我有一个代码片段,它使用了 unicode 字符’
( u2019
),也称为单词中间的右单引号。不幸的是,lstlistings 环境似乎导致此字符以及其他引号 ( u2018
, u201c
, u201d
) 的行为异常。它导致它们被移动到它们所在的任何单词的开头。下图的源代码是
\documentclass[
]{article}
\usepackage{listings}
\begin{document}
\begin{lstlisting}[language=Python]
"It’s a be”auti“ful day in the nei‘borhood"
\end{lstlisting}
It’s a be”auti“ful day in the nei‘borhood
\end{document}
我原本期望它在代码片段内外生成大致相似的东西,但不知何故 lstlisting 使引号移动到它们中断的单词的开头。我正在使用 xelatex。
答案1
正如@user202729 指出的那样,这是一个重复的问题。不过,我想我也会发布对我有用的解决方案,以防将来有人尝试这样做。添加
\makeatletter
\lst@InputCatcodes
\def\lst@DefEC{%
\lst@CCECUse \lst@ProcessLetter
^^^^2018^^^^2019^^^^201c^^^^201d% punctuation
^^00}
\lst@RestoreCatcodes
\makeatother
添加到文件开头(在文档开始之前)将告诉 lstlistings 应将这些 UTF 字符添加到处理列表中。此外,请确保您没有设置extendedchars=false
,因为它似乎默认处于开启状态,并且需要处于开启状态才能正常工作。
正如@user202729 在评论中提到的,也可以只使用字符而不是完整的字符代码;即替换^^^^2018^^^^2019^^^^201c^^^^201d
为‘’“”
。