在 Erlang 代码中,问号运算符周围画有红色方框

在 Erlang 代码中,问号运算符周围画有红色方框

我尝试使用包含运算符的包将一些 Erlang 代码示例包含在文档中,minted?运算符用于表示从进程接收到的消息。代码

\documentclass{minimal}
\usepackage{minted}
\begin{document}
\begin{minted}{erlang}
A ! Msg1,
receive
    A ? Msg2 ->
        ok
\end{minted}
\end{document}

产生以下输出:

LaTeX 输出

操作?符的处理方式与!操作符不同,并在其周围画了一个红色框。我怎样才能删除这个框并使其与操作符以相同的方式处理!?我推测 pygmentize 会在这种情况下以类似的方式对待它们。有什么方法可以检查这个断言是否正确,如果不是,请相应地修改 pygmentize 的处理方式?

答案1

通常,红色框表示源代码(此处为 Erlang)中的语法错误。但是,Pygments(反过来也被 minted 使用)使用的语言特定解析器不完整。显然,Erlang 解析器无法处理问号作为标识符。

最好的做法是向 Erlang 词法分析器的维护者提交错误报告,杰里米·瑟古德或维护 Pygments 的 Pocoo 团队。

或者,您可以在本地 Pygments 安装中自行修复错误,方法是修改pygments/lexers/functional.py- 该错误可能只是缺少一个问号659 行

答案2

就我而言,上述解决方案不起作用。我尝试使用 minted 2.1 打印以下 Python 3 行:

>>> print("Instalação!")
Instalação!

我最后通过在序言中插入来禁用“çã”和“!”周围的颜色框:

\AtBeginEnvironment{minted}{%
  \renewcommand{\fcolorbox}[4][]{#4}}

我发现这个解决方案这里

答案3

您还可以pygments像这样覆盖错误命令:

\expandafter\def\csname PY@tok@err\endcsname{}

这并不是最好的解决方案,因为它会隐藏代码中的所有语法错误,但对我来说效果很好。我仍然不知道上面那行代码到底是什么意思,但它就是有效。

我发现通过pygments在命令行上运行并读取生成的输出,如下所示(在我的情况下,我使用的是 html 而不是 Erlang):

pygmentize -f latex -O full -l html test.html

答案4

选择不画红框的铸造风格,比如xcode

使用此命令:

\usemintedstyle{xcode}

实际上,您将拥有这种风格,\PYG{err}所以我不确定您是否会受到?同等对待,!但至少您没有红色框,并且没有任何黑客行为。

相关内容