为什么 LaTeX 在列表环境中用括号或下划线替换一些空格?

为什么 LaTeX 在列表环境中用括号或下划线替换一些空格?

我在 Windows 上使用 MikTeX 和 LaTeX,发现一些奇怪的行为。在输出中,一些空格被替换为括号状下划线。代码如下:

\documentclass[10pt]{article}
\usepackage{listings}
\begin{document}
\begin{lstlisting}[language=SAS, title=SAS code to format data on government patients]
code code;                                 
        code code;

code;
code;
code;
c
      identity = "Subject's identity"
      variable = "Subject's name in government archive of files";
FORMAT gender genderft.
       code
       response responseft.;
RUN;
\end{lstlisting}
\end{document}

这将生成以下输出:

输出带有破损空格

我已将所有制表符替换为空格,将代码复制到纯文本编辑器中并重新输入所有空格,但问题仍然存在。即使在问题发布后将代码从浏览器复制到编辑器中也不起作用。括号/下划线仍然存在。

我的文档中没有其他代码片段出现此问题,但它们也使用与此示例相同的列表语法并且使用 SAS 代码。

答案1

两个撇号(行中的撇号identity = "Subject'和下一行中的撇号)之间的文本被解释为字符串。将选项传递showstringspaces=false给环境将呈现所需的输出,即

\begin{lstlisting}[showstringspaces=false,language=SAS, title=SAS code to 
format data on government patients, frame=single]

更清晰的解决方案是将引号标记为字符串分隔符。

\lstdefinelanguage{SAS}{morestring=[b]"}这可以通过在前言中添加行来实现。[b]通过在字符串前面添加反斜杠,允许在字符串中使用引号。请注意,该showstringspaces=false选项仍然是必需的。

相关内容