
Esta pergunta recente (imprima colchetes azuis em um idioma e preto em outro)me fez levantar (até) mais duas perguntas sobre o listings
pacote:
- Existe uma opção semelhante a
opstyle
que afeta apenasumargumento (usando"
,,
ou;
como primeiro delimitador e=
como segundo) eumvalor pertencente a esse argumento? (usando=
como primeiro delimitador e"
,,
ou;
como segundo)? - É possível ajustar a cor utilizada no meio do
listings
ambiente, sem que ela apareça como comentário ou linha, etc.? Todas essas soluções definem cores fora do ambiente real.
Nem olistings
manual, nem oArtigo do WikiLivrosdê respostas conclusivas (e também não mencione macros, incluindo \lst@thestyle
devo acrescentar), então olhei listings.sty
, sem surpresa, sem sucesso, parcialmente porque o .sty
-file não tem absolutamente nenhum comentário em nenhuma linha para explicação.
Para sua conveniência, incluí o MWE do opstyle
exemplo e a imagem do tópico mencionado anteriormente. No meu caso eu gostaria, por exemplo, de colorir a parte string: ()
laranja, mas a {}><;&
parte vermelha.
\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}