以下は、コメントのようなものです。
- 問題のごく一部のみを解決します(
rainbow-delimiters-mode
)
- 完全にテストされていない(ラテックスファイルが1つだけある)
- 私はそれがなぜ機能するのか完全には理解していません(
font-lock-mode
実際には非常に複雑な機械です)
最初の解決策rainbow-delimiters-mode
:
テキストプロパティfont-lock-face
をface
in rainbow-delimiters-propertize-delimiter
およびrainbow-delimiters-unpropertize-delimiter
。以来defsubst
の代わりにパッケージに使用されているdefun
私たちは採用することはできませんdefalias
( -してくださいコメントを、私はこの点で間違っている場合、私はそれを理解する限り)が、機能そのものを変更する必要があります。
変更された機能は次のとおりです。
(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))))
今、推論:
$ -delimitersの間に埋め込まれた式は、font-lock-modeによってフォント化された構文です(すでにKirillが指摘したように)。このフォント化の登録は正常に見えます(変数font-lock-syntactic-face-function
と関数を参照font-latex-syntactic-face-function
)。しかしdescribe-char
、埋め込み式の文字では、構文のフォント化ではface
-propertyではなく-propertyが使用されることが示されていfont-lock-face
ます。
以下は、非常に複雑なフォントロック機構を完全に理解していないため、仮説です。
それface
はより強いようですfont-lock-face
。Rainbow-delimitersは、構文のフォント化にfont-lock-face
支配されていface
ます。それでも、検索(キーワード)ベースのフォント化がjit-lockを使用する前に、構文フォント化が最初に来るという利点があります(の情報ページを参照font-lock-mode
)。
それはface
、のrainbow-delimiters
代わりにを使用すると問題が解決するという結論に至りfont-lock-face
ます。そして、ここで私は完全な結果を知りません。しかし、以降rainbow-delimiters
も用途jit-lock
直接する(経由ではなくfont-lock-mode
)、とにかく不安定な床に立っています。
私は既にrainbow-delimiters
(/programming/19800243/highlight-first-mismatching-paren/20022030#20022030を参照)と連絡を取りましたが、ではありませんrainbow-blocks
。限られた時間しかありませんので、集中することにしましたrainbow-delimiters
。たぶん、あなたはrainbow-blocks
同様の方法で- 問題を解決することができます。