我使用listings
粗体显示自定义关键字。在我的列表中,这些关键字有时后面会有一个逗号。但是,在下面的示例中,关键字后面的任何逗号都会阻止该关键字被识别。
我怎样才能将和listings
识别为关键字,即使它们后面紧跟着逗号?CustomKeyword
if
\usepackage{lstlistings}
\lstdefinelanguage{csharp}{
alsoletter={@,=,>,},
morekeywords={return, if, is, int, CustomKeyword, else, or, bool},
sensitive=true,
morecomment=[l]{//},
morecomment=[s]{/*}{*/},
morestring=[b]"
}
\lstset{
language=csharp,
showstringspaces=false,
columns=spaceflexible,%fullflexible,
mathescape=true,
numbers=none,
numberstyle=\tiny,
basicstyle=\codestyle
}
\begin{lstlisting}[columns=fullflexible]
CustomKeyword // OK in bold.
CustomKeyword, // Not in bold anymore.
if //OK in bold
if, // Not in bold anymore
\end{lstlisting}
答案1
有问题的行是
alsoletter={@,=,>,},
您不应使用逗号来分隔要声明为“字母”的字符。如果这样做,listings
则采用这些逗号字面上地并将逗号本身声明为“字母”;因此,listings
将其视为if,
与 不同的标识符if
。
正确的alsoletter
语法包括
alsoletter={@=>},
甚至(可读性更差!)
alsoletter=@=>,
(请注意,该行末尾的逗号仅被解释为listings
键值对的分隔符,而不是声明为“字母”的字符。)
\documentclass{article}
\usepackage{listings}
\lstdefinelanguage{csharp}{
alsoletter={@=>},
morekeywords={return, if, is, int, CustomKeyword, else, or, bool},
sensitive=true,
morecomment=[l]{//},
morecomment=[s]{/*}{*/},
morestring=[b]",
}
\lstset{
language=csharp,
showstringspaces=false,
columns=spaceflexible,%fullflexible,
mathescape=true,
numbers=none,
numberstyle=\tiny,
}
\begin{document}
\begin{lstlisting}[columns=fullflexible]
CustomKeyword // OK in bold.
CustomKeyword, // in bold too :)
if //OK in bold
if, // in bold too
\end{lstlisting}
\end{document}