列表中的每个参数和值有不同的颜色

列表中的每个参数和值有不同的颜色

这是最近的问题(用一种语言打印蓝色括号,用另一种语言打印黑色括号)让我想到了(最多)两个有关该listings包裹的问题:

  1. 是否有类似的选项opstyle仅影响参数(使用",,;作为第一个分隔符,=作为第二个分隔符)和属于该参数的值?(用作=第一个分隔符,并使用",,;作为第二个分隔符)?
  2. 是否可以在环境中间调整使用的颜色listings,而不会显示为注释或线条等?这些解决方案都在实际环境之外定义颜色。

无论是listings手动的,也不是维基百科文章给出确凿的答案(并且也没有提到包括\lst@thestyle我可能添加的宏),所以我查看了listings.sty,毫不奇怪地无济于事,部分原因是.sty-file 在任何行上都没有任何解释的注释。

为了方便起见,我附上了前面提到的帖子中的示例和图片的 MWE opstyle。在我的例子中,我想将部分颜色设为string: ()橙色,而将{}><;&部分颜色设为红色。

\documentclass{article}

\usepackage{xcolor}
\usepackage{listings}

\newcommand\opstyle{\color{red}} % <--- customise operator style here

\makeatletter

\lstset
{%
  language=C++,
  alsoletter=0123456789,% to prevent \opstyle from being applied to digits
}

% Hook into listings
\lst@AddToHook{OutputOther}{\ProcessOther@silmeth}

% helper macro
\newcommand\ProcessOther@silmeth
{%
  \ifnum\lst@mode=\lst@Pmode%     % If we're in `Processing' mode...
    \def\lst@thestyle{\opstyle}%  % ... redefine the style locally
  \fi%
}

\makeatother

\begin{document}
\begin{lstlisting}[]
int i = 0;
if(i > 1) && (1/2 < 2) {

    // one-line comment ()={}><;&

    printf("string: ()={}><;&");

    /*
      block comment ()={}><&;
    */
}
\end{lstlisting}
\end{document}

opstyle 示例

相关内容