Diferentes colores para cada argumento y valor en los listados

Diferentes colores para cada argumento y valor en los listados

Esta pregunta reciente (Imprimir corchetes azules en un idioma y negros en otro)me hizo plantear (hasta) dos preguntas más sobre el listingspaquete:

  1. ¿Hay alguna opción similar opstyleque solo afecte?unoargumento (usando ", ,o ;como primer delimitador y =como segundo) yunovalor perteneciente a ese argumento? (usando =como primer delimitador y ", ,o ;como segundo)?
  2. ¿Es posible ajustar el color utilizado en medio del listingsentorno, sin que aparezca como comentario o línea, etc.? Todas estas soluciones definen colores fuera del entorno real.

Ni ellistingsmanual, ni elArtículo de WikiLibrosdan respuestas concluyentes (y tampoco mencionan macros, incluidas las \lst@thestyleque podría agregar), por lo que miré listings.sty, como era de esperar, sin éxito, en parte porque el .styarchivo no tiene absolutamente ningún comentario en ninguna línea para explicar.

Para su comodidad, he incluido el MWE del opstyleejemplo y la imagen del hilo mencionado anteriormente. En mi caso me gustaría, por ejemplo, colorear la parte de string: ()naranja, pero la {}><;&parte de rojo.

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

ejemplo de estilo op

información relacionada