Разные цвета для каждого аргумента и значения в списках

Разные цвета для каждого аргумента и значения в списках

Этот недавний вопрос (напишите синие скобки на одном языке и черные на другом)заставили меня задать еще два вопроса относительно пакета listings:

  1. Есть ли аналогичная опция, opstyleкоторая влияет только наодинаргумент (используя ", ,или ;как первый разделитель и =как второй) иодинзначение, принадлежащее этому аргументу? (используя =в качестве первого разделителя и ", ,или ;в качестве второго)?
  2. Можно ли настроить используемый цвет в середине среды listings, чтобы он не отображался как комментарий или строка и т. д.? Все эти решения определяют цвета за пределами фактической среды.

Ни то, ни другоеlistingsруководство, ниСтатья в WikiBooksдают убедительные ответы (и также не упоминают макросы, включая те, которые \lst@thestyleя мог бы добавить), поэтому я посмотрел на listings.sty, что неудивительно, но безрезультатно, отчасти потому, что в .styфайле нет абсолютно никаких комментариев ни к одной строке для пояснения.

Для вашего удобства я включил 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}

пример опстиля

Связанный контент