禁止在列表中使用关键字

禁止在列表中使用关键字

我希望强制listings包在突出显示关键字时更具选择性。我目前在文档中包含 C 源文件,虽然我很高兴漂浮关键字被正确突出显示,我希望以下行显示为

#include <float.h>

而不是当前的

#include <漂浮.h>

本着同样的精神,别的很好,但#else应该排版而不是#别的

我尝试过使用 之类的解决方案deletekeywords={float.},但无济于事(毫不奇怪,根据文档:“(...)默认情况下,某些字符不允许出现在关键字中,例如'-',':','。',等等。(...)”)。使用deletedirectivesled 也无济于事。

答案1

关键字float没有点,不是float.

\documentclass{article}
\usepackage{listings}
\begin{document}
\begin{lstlisting}[language=C, deletekeywords={float}]
#include <float.h>
\end{lstlisting}
\end{document}

结果

两者兼而有之比较困难。该literate功能似乎可以解决问题:

\documentclass{article}
\usepackage{listings}
\begin{document}
\begin{lstlisting}[
  language=C,
  literate={float.}{float.}6,
]
#include <float.h>
float a = 1.0;
\end{lstlisting}
\end{document}

结果

如果你不想要特殊格式的指令,可以通过空的来禁用它directivestyle

\documentclass{article}
\usepackage{listings}
\begin{document}
\begin{lstlisting}[
  language=C,
  directivestyle={},
  literate={float.}{float.}6,
  columns=flexible,
]
#include <float.h>
float a = 1.0;
#ifdef foo
#else
#endif
\end{lstlisting}
\end{document}

结果

答案2

这个问题的解决方案很巧妙。

\lstset{
    language=C,
    directivestyle=\color[HTML]{006E28},
    deletedelim=*[directive]\#,
    moredelim=[directive][directivestyle]\#,
}

来自清单手册:

moredelim=[\*[*]] [<type>] [[<style>]]<delimiter(s)>

如果您使用一个可选星号,该包将检测分隔代码内的关键字、注释和字符串。使用两个可选星号时,样式将累积应用;

相关内容