Подсветка синтаксиса 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 выделит весь регион в соответствии со всеми правилами включенного файла синтаксиса.

Другие вопросы по тегам