为什么当我的关键字后面紧跟着逗号时,系统无法识别它?

为什么当我的关键字后面紧跟着逗号时,系统无法识别它?

我使用listings粗体显示自定义关键字。在我的列表中,这些关键字有时后面会有一个逗号。但是,在下面的示例中,关键字后面的任何逗号都会阻止该关键字被识别。

以下代码的渲染

我怎样才能将和listings识别为关键字,即使它们后面紧跟着逗号?CustomKeywordif

\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}

相关内容