我希望强制listings
包在突出显示关键字时更具选择性。我目前在文档中包含 C 源文件,虽然我很高兴漂浮关键字被正确突出显示,我希望以下行显示为
#include <float.h>
而不是当前的
#include <
漂浮.h>
本着同样的精神,别的很好,但#else
应该排版而不是#别的。
我尝试过使用 之类的解决方案deletekeywords={float.}
,但无济于事(毫不奇怪,根据文档:“(...)默认情况下,某些字符不允许出现在关键字中,例如'-',':','。',等等。(...)”)。使用deletedirectives
led 也无济于事。
答案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)>
如果您使用一个可选星号,该包将检测分隔代码内的关键字、注释和字符串。使用两个可选星号时,样式将累积应用;