listings 包中的 C 预处理器命令

listings 包中的 C 预处理器命令

我正在使用该listings软件包,它大部分情况下都能很好地格式化内容。但是,它无法正确地语法突出显示缩进的预处理器命令。

例如,

\documentclass{article}
\usepackage{listings}
\begin{document}
\lstset{language=C}
\begin{lstlisting}
#if SYSTEM == SYSV
#    define HDR "sysv.h"
#if SYSTEM == SYSV
    #define HDR "sysv.h"
\end{lstlisting}
\end{document}

第一个#define关键字正确突出显示,但第二个#define关键字根本没有突出显示。对于旧的编译器,#符号必须是预处理器命令的第一个字符,但现代风格更喜欢后一种缩进系统。所以,我更喜欢缩进符号#

在此处输入图片描述

有什么方法可以让我缩进这个符号并让语法突出显示在包中正确显示listings

答案1

如果添加\lstset{otherkeywords={define,\# }},那么输出应该是您所寻找的内容:

在此处输入图片描述

看起来#if被分别突出显示。您可以看到,如果您尝试使用#ifx,则#仍会突出显示,但不会突出显示ifx。因此,通过指定define将被视为关键字,您可以获得所需的结果。

代码:

\documentclass{article}
\usepackage{listings}
\begin{document}
\lstset{language=C}
\lstset{otherkeywords={define,\# }}%

\begin{lstlisting}
#if SYSTEM == SYSV
#    define HDR "sysv.h"
#if SYSTEM == SYSV
    #define HDR "sysv.h"
\end{lstlisting}
\end{document}

相关内容