fancyvrb
和的文档minted
警告用户不要期望列表中的任何字符都能正常工作,而 中则不能verbatim
。但他们并没有排除这种可能性,使用源代码中永远不会出现的转义字符的想法是一个诱人的前景:玩弄转义字符很麻烦;更好的方法是设置一个然后忘掉它。
我一直在使用,listings
直到几天前,我发现\lstinline
在垂直模式下(例如\parbox
)存在问题,而我知道minted
没有。但listings
它的优点是它允许使用非 ASCII 字符转义到 LaTeX — 我一直在使用“ ©
”而没有任何问题 — 而到目前为止,minted
我尝试过的十几个非 ASCII 字符都不接受。escapeinside
存在吗?
\documentclass{article}
\usepackage{fontspec}
\usepackage{minted}
\usepackage{unicode-math}
\begin{document}
\begin{minted}[escapeinside=©©]{postgres}
SELECT ©\(a ∈ A\)©
\end{minted}
\end{document}
我正在使用 进行编译lualatex
,如果重要的话,使用选项--shell-escape
并安装并运行 Pygments 版本 2.2.0。
答案1
escapeinside
可以处理非 ASCII 字符。但前提是您可以避免编码问题。
这些字符作为通过 shell 转义执行的命令escapeinside
的一部分传递给 Python 和 Pygments 。这在 Windows 下会失败,因为字符被编码为,但默认情况下 Python 将命令参数 ( ) 解释为(至少在 PowerShell 中是这样)。在 Linux 下,它也会失败,并且会变成 Unicode 序列。我不确定是哪组编码问题导致了这种情况,因为一切似乎都是默认的。pygmentize
utf8
pygmentize
sys.argv
cp1252
©
\udcc2\udca9
utf8
如果您可以使用相同的编码获得所有内容,那么它就会起作用(我尝试编辑 Pygmentscmdline.py
以在 Windows 下强制执行utf8
),但在某些情况下实现这一点可能很困难。