铸造错误或误用?

铸造错误或误用?

考虑以下代码:

\begin{minted}[escapeinside=||]{ocaml}
  foo |this is escaped| bar
\end{minted}

其工作符合预期,即转义的文本实际上已被转义。

但是,如果我们将语言从 更改ocamlprolog,则转义的文本将不再转义:

\begin{minted}[escapeinside=||]{prolog}
  foo |this is no longer escaped| bar
\end{minted}

这是 minted 的一个错误还是我误用了 minted 包?我尝试了几个转义字符,但都不起作用。

答案1

minted用途皮格门特斯进行实际的高亮显示,其中包括escapeinside。Pygment 的实现escapeinside可以是在某些情况下很脆弱,并且在字符串或注释中不起作用。

在这种情况下prologfoo被标记化为String.Atom,因此当词法分析器到达第一个 时|,它处于错误的模式,无法开始转义。相反,在这种ocaml情况下,foo被标记为Name,因此词法分析器将其解释为转义。最终,这归结为 Pygments 实现 的方式与词法分析器工作方式|之间的相互作用。escapeinsideprolog

相关内容