我正在尝试使用 minted 设置一些 LaTeX 代码。
但是,minted(或者说它使用的词法分析器)假设 @ 字符是 catcode other,就像通常那样。但是在我想要格式化的代码中,@ 始终是 catcode 字母。因此命令名称突出显示不正确。
有没有简单的方法可以改变这种情况,还是我需要编写自定义词法分析器?有人知道如何编写自定义词法分析器的优秀教程吗?
答案1
我已经成功入侵它了。
和
$ find / -mount -name "*latex*" 2>/dev/null
我找到了 pygments 的位置。
该文件lexers/_mapping.py
包含一行
'TexLexer': ('pygments.lexers.markup', 'TeX', ('tex', 'latex'), ('*.tex', '*.aux', '*.toc'), ('text/x-tex', 'text/x-latex')),
告诉我词法分析器包含在文件中pygments/lexers/markup.py
并且该类被称为TexLexer
。
我已将该文件复制到lexer/latex_atletter.py
我的 LaTeX 项目目录中,并从中删除了所有不需要的类,以便只TexLexer
保留该类。
此类包含一行
(r'\\([a-zA-Z]+|.)', Keyword, 'command'),
我在正则表达式中允许的字母中添加了一个@
(并且在行尾添加了一条注释,表明我已对其进行了编辑)。
从这里我已经学会了如何在我的 LaTeX 文档中使用这个自定义词法分析器:我添加了
\def\mylatexlexer{lexer/latex_atletter.py:TexLexer -x}
\newmintedfile[inputlatex]{\mylatexlexer}{}
到序言中并将出现的每个 替换\inputminted{latex}
为\inputlatex
。
现在,包含 @ 符号的命令可以正确突出显示。