Я использую Spacemacs с AUCTeX для редактирования LaTeX и хотел бы, чтобы радужные разделители и / или радужные блоки выделяли математические уравнения LaTeX. К сожалению, это работает только частично, то есть некоторые уравнения подсвечиваются, а некоторые нет:
На снимке экрана с примером встроенная математика, заключенная в $
, не выделяется, в то время как остальные - в том числе встроенная математика \(...\)
- включены.
С rainbow-blocks
этим становится хуже, так как иногда он будет работать в одном месте документа, а иногда не будет работать независимо от области действия.
В: Кто-нибудь знает, почему это происходит или как начать rainbow-blocks
работать над математической матрицей в LaTeX? Есть ли рабочие альтернативы?
latex
syntax-highlighting
nemesit
источник
источник
highlight-parentheses
использует наложения вместо блокировки шрифтов, и было бы очень просто использовать временную синтаксическую таблицу на время функции наложения. github.com/nschum/highlight-parentheses.el Функция, которую необходимо изменить в этой библиотекеhl-paren-highlight
:(let ((my-syntax-table (make-syntax-table))) (with-syntax-table my-syntax-table . . .
К сожалению, это другая библиотека, чем та, которую вы указали - я не знаю, как исправитьrainbow-delimiters
- возможно, вы могли бы откройте вопрос о Github с сопровождающим.(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)))
его помощью можно заменить фонификацию в рамках встроенной формулы. Но это не работает в общем советеrainbow-delimiters-propertize-delimiter
. Это указывает на то, что истолкованиеlatex-mode
происходит после истечения срокаrainbow-delimiters-mode
.Ответы:
Следующее больше похоже на комментарий, так как
rainbow-delimiters-mode
)font-lock-mode
это действительно довольно сложный механизм)Сначала решение для
rainbow-delimiters-mode
:Заменим свойство text
font-lock-face
наface
inrainbow-delimiters-propertize-delimiter
иrainbow-delimiters-unpropertize-delimiter
. Посколькуdefsubst
в пакете используется вместо того, чтобыdefun
мы не могли использовать,defalias
но должны изменить сами функции (насколько я понимаю - пожалуйста, прокомментируйте, если я не прав в этом отношении).Измененные функции:
Теперь рассуждения:
Внедренные формулы между $ -delimiters имеют синтаксис, обозначенный font-lock-mode (как уже указывал Кирилл). Регистрация этого шрифта выглядит нормально (см. Переменную
font-lock-syntactic-face-function
и функциюfont-latex-syntactic-face-function
). Ноdescribe-char
на символах встроенной формулы видно, что синтаксическая фонификация использует -propertyface
вместоfont-lock-face
-property.Следующее является гипотетическим, так как я не полностью понимаю механизм блокировки шрифтов, который является довольно сложным.
Кажется, что
face
сильнее, чемfont-lock-face
. Радужные разделители используются, вfont-lock-face
которых преобладаетface
синтаксическая формация. Тем не менее, у нас есть преимущество в том, что синтаксическая фонификация стоит на первом месте перед фонатификацией на основе поиска (по ключевым словам), которая, в свою очередь, использует jit-lock (см. Информационные страницыfont-lock-mode
).Это подводит меня к выводу , что проблема решена , если мы используем
face
вrainbow-delimiters
вместоfont-lock-face
. И здесь я не знаю всех последствий. Но, так какrainbow-delimiters
также используетjit-lock
напрямую (а не черезfont-lock-mode
), мы все равно стоим на шатком полу.Обратите внимание, что я уже имел некоторый контакт с
rainbow-delimiters
(см. Https://stackoverflow.com/questions/19800243/highlight-first-mismatching-paren/20022030#20022030 ), но не сrainbow-blocks
. Поскольку у меня есть только ограниченный период времени, я решил сконцентрироваться наrainbow-delimiters
. Возможно, вы можете решить эту проблемуrainbow-blocks
аналогичным образом.источник