Estoy usando spacemacs con AUCTeX para la edición de LaTeX y me gustaría hacer que los delimitadores del arco iris y / o los bloques del arco iris resalten las ecuaciones matemáticas de LaTeX. Desafortunadamente, esto solo funciona en parte, es decir, algunas ecuaciones se resaltan y otras no:
En la captura de pantalla de ejemplo, las matemáticas en línea encerradas en $
no se resaltan, mientras que el resto, incluidas las matemáticas en línea encerradas \(...\)
, sí.
Con rainbow-blocks
esto empeora, ya que a veces funcionará en un lugar del documento y a veces no funcionará independientemente del alcance.
P: ¿Alguien sabe por qué sucede esto o cómo rainbow-blocks
trabajar para las matemáticas en línea en LaTeX? ¿Hay alguna alternativa de trabajo?
fuente
highlight-parentheses
usa superposiciones en lugar de bloqueo de fuente, y sería muy simple usar una tabla de sintaxis temporal mientras dure la función de superposición. github.com/nschum/highlight-parentheses.el La función que necesitaría ser alterada en esa biblioteca eshl-paren-highlight
:(let ((my-syntax-table (make-syntax-table))) (with-syntax-table my-syntax-table . . .
Desafortunadamente, esa es otra biblioteca diferente a la que ha especificado, no sé cómo solucionarlorainbow-delimiters
, tal vez podría abre un problema en Github con el mantenedor.(with-silent-modifications (remove-text-properties (region-beginning) (region-end) '(face nil font-lock-face nil)) (add-text-properties (region-beginning) (region-end) '(face rainbow-delimiters-depth-1-face)))
usarlo, es posible reemplazar la fuente dentro de una fórmula incrustada. Pero esto no funciona en un consejo general derainbow-delimiters-propertize-delimiter
. Esto indica que la fontificación de selatex-mode
lleva a cabo después de la fuenterainbow-delimiters-mode
.Respuestas:
Lo siguiente es más como un comentario desde
rainbow-delimiters-mode
)font-lock-mode
es realmente una maquinaria bastante complicada)Al principio la solución para
rainbow-delimiters-mode
:Reemplazamos la propiedad de texto
font-lock-face
porface
enrainbow-delimiters-propertize-delimiter
yrainbow-delimiters-unpropertize-delimiter
. Dado quedefsubst
se usa en el paquete en lugar dedefun
no podemos emplearlo,defalias
pero debemos modificar las funciones en sí mismas (hasta donde yo entiendo, por favor comente si estoy equivocado en este sentido).Las funciones modificadas son:
Ahora el razonamiento:
Las fórmulas incrustadas entre los $ -delimitadores son sintaxis fontified por font-lock-mode (como ya señaló Kirill). El registro de esta fuente parece normal (ver variable
font-lock-syntactic-face-function
y funciónfont-latex-syntactic-face-function
). Perodescribe-char
en los caracteres de una fórmula incrustada se muestra que la fuente sintáctica utiliza laface
propiedad-en lugar de lafont-lock-face
propiedad.Lo siguiente es hipotético ya que no entiendo completamente la maquinaria de bloqueo de fuentes que es bastante compleja.
Parece que
face
es más fuerte quefont-lock-face
. El uso de delimitadores de arco irisfont-lock-face
está dominado por laface
fuente sintáctica. Sin embargo, tenemos la ventaja de que la fuente sintáctica viene primero que la fuente basada en búsqueda (palabra clave) que a su vez usa jit-lock (ver páginas de información defont-lock-mode
).Eso me lleva a la conclusión de que el problema se resuelve si usamos
face
in enrainbow-delimiters
lugar defont-lock-face
. Y aquí no sé las consecuencias completas. Pero, dado querainbow-delimiters
también se usajit-lock
directamente (y no a travésfont-lock-mode
), estamos parados en un piso inestable de todos modos.Tenga en cuenta que ya tuve algún contacto con
rainbow-delimiters
(consulte /programming/19800243/highlight-first-mismatching-paren/20022030#20022030 ) pero no conrainbow-blocks
. Debido a que solo tengo un período de tiempo limitado en el que elegí concentrarmerainbow-delimiters
. Tal vez, puede resolver elrainbow-blocks
problema de una manera similar.fuente