listings 包:禁用“字符串分隔符

listings 包:禁用“字符串分隔符

我正在为我的学生制作幻灯片,我使用 listings 包

我想显示编译基本错误 C 代码时给出的警告和错误消息。

我很难显示的典型错误是忘记关闭字符串分隔符。您收到的警告是

Errors1.c:5:16: warning: missing terminating '"' character [-Winvalid-pp-token]
    printf("the value of x is %i,x);

当我使用 listing 包在 LateX 中写入时出现的问题是,它将第一个“视为字符串分隔符的开头,因此后面的所有内容都被格式化为字符串。

参见下面的 MWE。“后面的所有内容都被解释为字符串(可见空格和斜体)。(抱歉,我不知道如何在这里显示编译后的 latex)

\documentclass[12pt]{article}
\usepackage{listings}
\lstdefinestyle{bash}{
language=bash,
breaklines=true, 
basicstyle=\ttfamily,
stringstyle=\textit,
morekeywords={warning,error},
showspaces=false,
}

\begin{document}
\begin{lstlisting}[style=bash]
Errors1.c:5:16: warning: missing terminating '"' character [-Winvalid-pp-token]
        printf("the value of x is %i,x);
               ^
Errors1.c:5:16: error: expected expression
\end{lstlisting}
\end{document}

谢谢你的帮助

皮埃尔

答案1

回答所问的问题:您可以使用deletestringstyle 选项忽略字符串分隔符。此选项应反映分隔符的原始定义,其中bash包括sh转义[d]模式,即"字符串中的文字可以通过将其加倍来转义。转义字符串中的字符在这里对您没有帮助,因为您不在字符串中,但您需要知道它才能正确地从语言定义中删除分隔符。

但是,如果您不使用语法高亮,那么您也可以使用逐字环境。当输入包含长行时,您可以使用环境Verbatim(注意大写字母 V)和breaklines包中的选项fvextra/ fancyvrb

梅威瑟:

\documentclass[12pt]{article}
\usepackage{listings}
\usepackage{fvextra}
\lstdefinestyle{bash}{
language=bash,
breaklines=true, 
basicstyle=\ttfamily,
stringstyle=\textit,
morekeywords={warning,error},
showspaces=false,
deletestring=[d]"
}

\begin{document}
\begin{lstlisting}[style=bash]
Errors1.c:5:16: warning: missing terminating '"' character [-Winvalid-pp-token]
        printf("the value of x is %i,x);
               ^
Errors1.c:5:16: error: expected expression
\end{lstlisting}

\begin{Verbatim}[breaklines=true]
Errors1.c:5:16: warning: missing terminating '"' character [-Winvalid-pp-token]
        printf("the value of x is %i,x);
               ^
Errors1.c:5:16: error: expected expression
\end{Verbatim}

\end{document}

结果:

在此处输入图片描述

相关内容