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-blocksesto 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-blockstrabajar para las matemáticas en línea en LaTeX? ¿Hay alguna alternativa de trabajo?
fuente

highlight-parenthesesusa 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-modelleva a cabo después de la fuenterainbow-delimiters-mode.Respuestas:
Lo siguiente es más como un comentario desde
rainbow-delimiters-mode)font-lock-modees realmente una maquinaria bastante complicada)Al principio la solución para
rainbow-delimiters-mode:Reemplazamos la propiedad de texto
font-lock-faceporfaceenrainbow-delimiters-propertize-delimiteryrainbow-delimiters-unpropertize-delimiter. Dado quedefsubstse usa en el paquete en lugar dedefunno podemos emplearlo,defaliaspero 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-functiony funciónfont-latex-syntactic-face-function). Perodescribe-charen los caracteres de una fórmula incrustada se muestra que la fuente sintáctica utiliza lafacepropiedad-en lugar de lafont-lock-facepropiedad.Lo siguiente es hipotético ya que no entiendo completamente la maquinaria de bloqueo de fuentes que es bastante compleja.
Parece que
facees más fuerte quefont-lock-face. El uso de delimitadores de arco irisfont-lock-faceestá dominado por lafacefuente 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
facein enrainbow-delimiterslugar defont-lock-face. Y aquí no sé las consecuencias completas. Pero, dado querainbow-delimiterstambién se usajit-lockdirectamente (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-blocksproblema de una manera similar.fuente