J'utilise des spacemacs avec AUCTeX pour l'édition LaTeX et je voudrais que les délimiteurs arc-en-ciel et / ou les blocs arc-en-ciel mettent en évidence les équations mathématiques LaTeX. Malheureusement, cela ne fonctionne que partiellement, c'est-à-dire que certaines équations sont mises en évidence et d'autres non:
Dans l'exemple de capture d'écran, les mathématiques en ligne incluses dans $
ne sont pas mises en surbrillance tandis que le reste - y compris les mathématiques en ligne incluses dans \(...\)
- le fait.
Avec rainbow-blocks
cela empire, car cela fonctionnera parfois à un endroit du document et parfois ne fonctionnera pas quelle que soit la portée.
Q: Quelqu'un sait-il pourquoi cela se produit ou comment commencer à rainbow-blocks
travailler pour les mathématiques en ligne dans LaTeX? Existe-t-il des alternatives de travail?
la source
highlight-parentheses
utilise des superpositions au lieu du verrouillage de police, et il serait très simple d'utiliser une table de syntaxe temporaire pour la durée de la fonction de superposition. github.com/nschum/highlight-parentheses.el La fonction qui devrait être modifiée dans cette bibliothèque esthl-paren-highlight
:(let ((my-syntax-table (make-syntax-table))) (with-syntax-table my-syntax-table . . .
malheureusement, c'est une autre bibliothèque que celle que vous avez spécifiée - je ne sais pas comment corrigerrainbow-delimiters
- peut-être pourriez-vous ouvrir un problème sur Github avec le mainteneur.(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)))
il est possible de remplacer la fontification dans une formule incorporée. Mais cela ne fonctionne pas dans un conseil autour derainbow-delimiters-propertize-delimiter
. Cela indique que la fontification delatex-mode
a lieu après la fontificationrainbow-delimiters-mode
.Réponses:
Ce qui suit ressemble plus à un commentaire puisque
rainbow-delimiters-mode
)font-lock-mode
c'est vraiment une machine assez compliquée)Dans un premier temps la solution pour
rainbow-delimiters-mode
:Nous remplaçons la propriété text
font-lock-face
parface
inrainbow-delimiters-propertize-delimiter
etrainbow-delimiters-unpropertize-delimiter
. Étant donné quedefsubst
est utilisé dans le package au lieu de,defun
nous ne pouvons pas l'utiliser,defalias
mais nous devons modifier les fonctions elles-mêmes (pour autant que je le comprenne - veuillez commenter si je me trompe à cet égard).Les fonctions modifiées sont:
Maintenant, le raisonnement:
Les formules imbriquées entre les $ -delimiters sont des syntaxes caractérisées par font-lock-mode (comme Kirill l'a déjà souligné). L'enregistrement de cette fontification semble normal (voir variable
font-lock-syntactic-face-function
et fonctionfont-latex-syntactic-face-function
). Maisdescribe-char
au niveau des caractères d'une formule intégrée, la police syntaxique utilise laface
propriété au lieu de lafont-lock-face
propriété.Ce qui suit est hypothétique car je ne comprends pas complètement le mécanisme de verrouillage des polices qui est assez complexe.
Il semble que ce
face
soit plus fort quefont-lock-face
. Les délimiteurs arc-en-cielfont-lock-face
sont dominés parface
la fontification syntaxique. Néanmoins, nous avons l'avantage que la fontification syntaxique vient en premier avant la fontification basée sur la recherche (mot-clé) qui à son tour utilise jit-lock (voir les pages info defont-lock-mode
).Cela m'amène à la conclusion que le problème est résolu si nous utilisons
face
aurainbow-delimiters
lieu defont-lock-face
. Et ici, je ne connais pas toutes les conséquences. Mais, puisque nousrainbow-delimiters
utilisons égalementjit-lock
directement (et non à traversfont-lock-mode
), nous sommes de toute façon sur un sol fragile.Notez que j'ai déjà eu des contacts avec
rainbow-delimiters
(voir /programming/19800243/highlight-first-mismatching-paren/20022030#20022030 ) mais pas avecrainbow-blocks
. Parce que je n'ai qu'un laps de temps limité sur lequel j'ai choisi de me concentrerrainbow-delimiters
. Vous pouvez peut-être résoudre le problème de larainbow-blocks
même manière.la source