我想将一些 unicode 字符写入lstlisting
环境,但它们在输出中以内联方式显示,这不是我所期望的。我怎样才能让它像标准字符一样工作?谢谢。
\documentclass{article}
\usepackage{fontspec}
\setmonofont{Consolas}
\usepackage{listings}
\lstset{
basicstyle=\ttfamily
}
\begin{document}
\begin{lstlisting}
└
└
└
\end{lstlisting}
\end{document}
答案1
如果您发现我的回答不合适,我很抱歉,但是在对您的代码进行一段时间的研究之后,我发现最简单的变体是从lstlisting
包切换到minted
。
为什么minted
?
优点:
- 与 pdflatex、xelatex 等配合使用效果很好
- 支持更多语言突出显示,比
lstlisting
- 有时执行突出显示看起来更好
- 开箱即用,无 UTF-8 字符问题
缺点:
- 需要额外的软件(尽管安装需要 2-5 分钟)
- 需要编辑编译命令标志(另外 30 秒)
好消息是附加软件上面提到的是 Python,如果你使用 OS X 或任何流行的 Linux 发行版,它可能会随你的系统一起提供,还有它的包 Pygments,只需在 shell 中一行即可安装。
您可以前往minted
手动的并检查第 2.1 节,说明非常简短且内容丰富。
你还需要检查你的 TeX 编辑器设置并进行如下更改
/Library/tex/texbin/xelatex -synctex=1 %.tex
添加-shell-escape
标志,所以现在它看起来像
/Library/tex/texbin/xelatex -shell-escape -synctex=1 %.tex
这是为了允许 XeLaTeX 调用其“沙箱”之外的东西(在我们的例子中是调用 Python)。
完成这些步骤后,您就可以使用了minted
。无需再进行任何设置。
现在您的 MWE 已适用于minted
:
\documentclass{article}
\usepackage{fontspec}
\setmonofont{Consolas}
\usepackage{minted}
\begin{document}
\begin{minted}{text}
└
└
└
\end{minted}
\end{document}
注意选项{text}
——它是指定语言(在我们的例子中是纯文本)。
结果如下:
PS 我以前从未用过minted
,但是为了解决你的问题,我花了超过 40 分钟的时间玩lstlisting
,只花了 2 分钟的时间安装和习惯minted
,所以绝对值得一试。