我有一个自定义命令,经常用它来注释掉源文件的块,定义如下:
\newcommand{\comment}[1]{}
在 Sublime Text(使用 LaTeXTools)中,此命令会关闭语法高亮:在\comment{
文件的第一个块的开头,所有内容开始均匀地变灰,这是应该的,但这种情况永远不会停止;它会一直持续到结束}
,直到文件的其余部分。一切都编译正常;只是高亮无法正常恢复。
我希望\comment{ }
块完全变灰,就像现在这样,但关闭后恢复正常突出显示。有没有办法让 Sublime Text 和 LaTeXTools 做到这一点?
答案1
首先,我想我应该说这是我第一次在文件中编写代码.sublime-syntax
,所以我很可能犯了一些初学者错误,或者我的解决方案不是最佳的。然而,我发现你的问题很有趣,经过一番研究,我找到了一个似乎对我有用的解决方案。
语法高亮由LaTeX.sublime-syntax
,因此要修改高亮的行为,首先要做的是访问此文件。最简单的方法是使用包资源查看器,可以使用 Package Control 安装。然后您可以使用该Open Resource
工具找到该文件,该文件应该位于 LaTeX 文件夹中。
打开LaTeX.sublime-syntax
文件后,需要进行两项更改。首先,您必须删除代码中在\comment{
检测到命令时立即关闭所有语法突出显示的部分。这部分代码应紧跟在命令之后pkgcomment:
,应该是以下内容
- match: '^(\\)comment\b'
captures:
0: punctuation.definition.comment.start.latex
1: punctuation.definition.backslash.latex
push:
- meta_scope: meta.environment.comment.latex comment.block.command.comment.latex
- match: '^(\\)endcomment\b'
captures:
0: punctuation.definition.comment.end.latex
1: punctuation.definition.backslash.latex
pop: true
由于我远非文件方面的专家,因此我强烈建议直接注释掉该部分代码,以防万一发生任何意外。通过在每行开头sublime-syntax
放置一个,可以注释掉每行。#
一旦删除了“坏”代码,剩下的任务就是添加命令以注释掉\comment{
命令和下一个命令之间的内容}
。为此,您可以在文件开头的- include: comment
行后prototype:
部分中添加一个新段落。如果我理解得没错,将其放在此部分中会为命令提供更高的优先级,以便它也可以在数学模式下工作。
以下代码对应于文件的开头,其中包含我添加的代码,用于定义命令的突出显示\comment
。新代码在注释中指出。
name: LaTeX
file_extensions:
- tex
- ltx
scope: text.tex.latex
contexts:
prototype:
- include: comments
# The following paragraph is a replacement to the commented code block in the pkgcomment section.
- match: '(\\)comment(\{)'
scope: support.function.general.latex
captures:
0: punctuation.definition.comment.start.latex
1: punctuation.definition.backslash.latex
push:
- meta_content_scope: meta.environment.comment.latex comment.block.command.comment.latex
- match: '(\{)'
push: comment_braces
- match: '(\})'
captures:
0: punctuation.definition.comment.end.latex
1: punctuation.definition.backslash.latex
pop: true
# this is used to assert that the commented section ends with the corresponding }.
comment_braces:
- match: '(\{)'
push: comment_braces
- match: '(\})'
pop: true
此代码应跟在main:
部分后面。
经过这些更改,当我\comment{some random text}
在 LaTeX 文件中写入时,该\comment{
部分看起来与任何其他常规命令相同,在达到some random text
匹配之前,会突出显示为注释}
。它也适用于数学模式,并且如果在 的参数中放置其他括号\comment{}
。