A seguir, mais parece um comentário, pois
- resolve apenas uma pequena parte do problema (
rainbow-delimiters-mode)
- não é completamente testado (apenas com um arquivo de látex)
- Eu não entendo completamente por que funciona (
font-lock-modeé realmente uma máquina bastante complicada)
A princípio, a solução para rainbow-delimiters-mode:
Substituímos a propriedade text font-lock-facepor facein rainbow-delimiters-propertize-delimitere rainbow-delimiters-unpropertize-delimiter. Uma vez que defsubsté usado no pacote em vez de defunnão podemos empregar, defaliasmas devemos modificar as próprias funções (tanto quanto eu entendo - por favor, comente se eu estiver errado a esse respeito).
As funções modificadas são:
(defsubst rainbow-delimiters-propertize-delimiter (loc depth)
"Highlight a single delimiter at LOC according to DEPTH.
LOC is the location of the character to add text properties to.
DEPTH is the nested depth at LOC, which determines the face to use.
Sets text properties:
`font-lock-face' to the appropriate delimiter face.
`rear-nonsticky' to prevent color from bleeding into subsequent characters typed by the user."
(with-silent-modifications
(let ((delim-face (if (<= depth 0)
'rainbow-delimiters-unmatched-face
(rainbow-delimiters-depth-face depth))))
;; (when (eq depth -1) (message "Unmatched delimiter at char %s." loc))
(add-text-properties loc (1+ loc)
;; 2015-05-24: Changed font-lock-face to face to enable rainbow after syntax fontification in latex-mode
;; (see http://emacs.stackexchange.com/questions/4260/how-to-get-rainbow-delimiters-rainbow-blocks-to-highlight-in-line-math-in-latex)
`(face ,delim-face
rear-nonsticky t)))))
(defsubst rainbow-delimiters-unpropertize-delimiter (loc)
"Remove text properties set by rainbow-delimiters mode from char at LOC."
(with-silent-modifications
(remove-text-properties loc (1+ loc)
;; 2015-05-24: See corresponding line in `rainbow-delimiters-propertize-delimiter'.
'(face nil
rear-nonsticky nil))))
Agora o raciocínio:
As fórmulas incorporadas entre os delimitadores $ são sintaxe tipificada pelo modo de bloqueio de fonte (como Kirill já apontou). O registro dessa fonte parece normal (consulte variável font-lock-syntactic-face-functione função font-latex-syntactic-face-function). Mas, describe-charnos caracteres de uma fórmula incorporada, mostra que a fonte sintática usa a facepropriedade -propriedade em vez da font-lock-face-propriedade.
O que se segue é hipotético, pois não compreendo completamente o mecanismo de bloqueio de fonte que é bastante complexo.
Parece que faceé mais forte que font-lock-face. Usos delimitadores de arco-íris font-lock-faceque são dominados pela facefonte sintática. No entanto, temos a vantagem de que a fonte sintática vem primeiro antes da fonte (palavra-chave) baseada em pesquisa (palavra-chave) que, por sua vez, usa jit-lock (consulte as páginas de informações de font-lock-mode).
Isso me leva à conclusão de que o problema será resolvido se usarmos faceem rainbow-delimitersvez de font-lock-face. E aqui eu não conheço todas as consequências. Mas, como rainbow-delimiterstambém usa jit-lockdiretamente (e não completamente font-lock-mode), estamos em um piso instável de qualquer maneira.
Observe que eu já tive algum contato rainbow-delimiters(consulte /programming/19800243/highlight-first-mismatching-paren/20022030#20022030 ), mas não com rainbow-blocks. Porque tenho apenas um período limitado de tempo em que escolhi me concentrar rainbow-delimiters. Talvez você possa resolver o rainbow-blocksproblema-de maneira semelhante.