
Esta pregunta reciente (Imprimir corchetes azules en un idioma y negros en otro)me hizo plantear (hasta) dos preguntas más sobre el listings
paquete:
- ¿Hay alguna opción similar
opstyle
que solo afecte?unoargumento (usando"
,,
o;
como primer delimitador y=
como segundo) yunovalor perteneciente a ese argumento? (usando=
como primer delimitador y"
,,
o;
como segundo)? - ¿Es posible ajustar el color utilizado en medio del
listings
entorno, sin que aparezca como comentario o línea, etc.? Todas estas soluciones definen colores fuera del entorno real.
Ni ellistings
manual, ni elArtículo de WikiLibrosdan respuestas concluyentes (y tampoco mencionan macros, incluidas las \lst@thestyle
que podría agregar), por lo que miré listings.sty
, como era de esperar, sin éxito, en parte porque el .sty
archivo no tiene absolutamente ningún comentario en ninguna línea para explicar.
Para su comodidad, he incluido el MWE del opstyle
ejemplo 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}