Подсветка синтаксиса Vim по математике
Я пытаюсь улучшить подсветку синтаксиса математики в документах уценки.
Multimarkdown использует скобки \\[ .. \\]
а также \\( .. \\)
для отображения дисплея и встроенной математики соответственно. Я хочу выделить их содержание с помощью TeX.
Вот что у меня так далеко:
syntax include @tex syntax/tex.vim
syn region displaymaths matchgroup=mkdMaths start = "\\\\\[" end="\\\\\]" contains=@tex
syn region inlinemaths matchgroup=mkdMaths start = "\\\\(" end="\\\\)" contains=@tex
hi def link mkdMaths SpecialComment
Проблема в том, что то, что находится в скобках, не воспринимается как математика tex.vim, потому что оно не заключено в $ .. $
, Есть ли способ, которым я могу обойти это? Я думаю, что это группа texMath в синтаксисе /tex.vim, которую я хочу использовать здесь.
Есть ли какой-нибудь способ, которым я могу заставить содержимое скобок интерпретироваться как тексты по математике?
2 ответа
:syntax include @tex syntax/tex.vim
дает вам @tex
синтаксический кластер для использования в регионах, содержащих Tex, но вы действительно хотите сослаться на конкретный кластер, существующий в tex.vim, @texMathZoneGroup
,
Поскольку нет вложенных синтаксических кластеров, вы можете просто напрямую обратиться к нему через contains=@texMathZoneGroup
,
syntax include syntax/tex.vim
syn region displaymaths matchgroup=mkdMaths start = "\\\\\[" end="\\\\\]" contains=@texMathZoneGroup
syn region inlinemaths matchgroup=mkdMaths start = "\\\\(" end="\\\\)" contains=@texMathZoneGroup
hi def link mkdMaths SpecialComment
Vim документация (:help syn-include
) фактически заявляет об этом довольно ясно (хотя, возможно, может сделать с примером):
Если элементы синтаксиса верхнего уровня во включенном файле синтаксиса должны содержаться внутри региона во включающем синтаксисе, вы можете использовать команду ":syntax include":
n:sy[ntax] include [@{grouplist-name}] {file-name}
Если вы хотите включить определенный элемент синтаксиса верхнего уровня 'foo' из включенного файла синтаксиса, вам необходимо иметь contains=@foo
в syn region
команда.
Все элементы синтаксиса, объявленные во включаемом файле, будут иметь добавленный флаг "ден ". Кроме того, если указан список групп, все элементы синтаксиса верхнего уровня во включенном файле будут добавлены в этот список.
Итак @tex
имя-группы в моем вопросе указывать не нужно. Если бы в моих документах были большие регионы TeX, это нужно было бы указать, поскольку оно дает доступ к пространству имен включенного файла синтаксиса, так что contains=@tex
выделит весь регион в соответствии со всеми правилами включенного файла синтаксиса.