5

我正在尝试改进 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 数学?

4

2 回答 2

2

:syntax include @tex syntax/tex.vim为您提供了一个语法@tex集群,可在包含 Tex 的区域中使用,但您实际上想要引用 tex.vim 中存在的特定集群@texMathZoneGroup

由于没有嵌套语法簇,你可以直接通过contains=@texMathZoneGroup.

于 2012-11-29T11:13:08.987 回答
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) 实际上非常清楚地说明了这一点(尽管也许可以举个例子):

如果包含语法文件中的顶级语法项要包含在包含语法的区域中,可以使用 ":syntax include" 命令:

n:sy[ntax] include [@{grouplist-name}] {file-name}

如果要从包含的语法文件中包含特定的顶级语法项“foo”,则需要contains=@foosyn region命令中包含。

包含文件中声明的所有语法项都将添加“包含”标志。此外,如果指定了组列表,则包含文件中的所有顶级语法项都将添加到该列表中。

所以@tex我的问题中的 grouplist-name 不需要指定。但是,如果我的文档中有较大的 TeX 区域,则需要指定它,因为它可以访问包含的语法文件的命名空间,这样contains=@tex将根据包含的语法文件的所有规则突出显示整个区域。

于 2012-11-29T10:53:30.760 回答