我正在尝试改进markdown文档中数学的语法高亮。
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选为数学,因为它没有包含在$ .. $
中。有没有办法解决这个问题?我认为这是我想在这里使用的syntax / tex.vim中的texMath组。
有什么方法可以强制括号的内容被解释为Tex数学?
答案 0 :(得分:2)
:syntax include @tex syntax/tex.vim
为您提供了一个@tex
语法群集,可在包含Tex的区域中使用,但您实际上想要引用tex.vim中存在的特定群集@texMathZoneGroup
。
由于没有语法群集的嵌套,您可以通过contains=@texMathZoneGroup
直接引用它。
答案 1 :(得分:0)
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
)实际上非常清楚地说明了这一点(虽然也许可以用一个例子):
如果包含语法文件中的顶级语法项 包含在包含语法的区域内,可以使用 “:语法包含”命令:
n:sy[ntax] include [@{grouplist-name}] {file-name}
如果要从包含的语法文件中包含特定的顶级语法项'foo',则需要在contains=@foo
命令中包含syn region
。
包含文件中声明的所有语法项都将具有 添加了“包含”标志。此外,如果指定了组列表, 将添加包含文件中的所有顶级语法项 那份清单。
因此,我的问题中的@tex
grouplist-name不需要指定。如果我在我的文档中有更大的TeX区域,则需要指定,因为它允许访问包含的语法文件的命名空间,这样contains=@tex
将根据所有规则突出显示整个区域。包含的语法文件。