我正在为我的学生制作幻灯片,我使用 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
回答所问的问题:您可以使用deletestring
style 选项忽略字符串分隔符。此选项应反映分隔符的原始定义,其中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}
结果: