我在 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
选项仍然是必需的。