使用 minted 格式化 LaTeX 代码:makeatletter

使用 minted 格式化 LaTeX 代码:makeatletter

我正在尝试使用 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

现在,包含 @ 符号的命令可以正确突出显示。

相关内容