
Diese aktuelle Frage (Drucken Sie blaue Klammern in einer Sprache und schwarze in einer anderen)brachten mich dazu, mir (bis zu) zwei weitere Fragen zum Paket auszudenken listings
:
- Gibt es eine ähnliche Option,
opstyle
die nureinsArgument (mit"
,,
oder;
als erstes Trennzeichen und=
als zweites) undeinsWert, der zu diesem Argument gehört? (mit und=
als erstem Trennzeichen"
oder als zweitem)?,
;
- Ist es möglich, die verwendete Farbe mitten in der
listings
Umgebung anzupassen, ohne dass diese als Kommentar oder Linie etc. auffällt? Diese Lösungen definieren alle Farben außerhalb der eigentlichen Umgebung.
Weder dielistings
Handbuchnoch dieWikiBooks-Artikelgeben keine schlüssigen Antworten (und erwähnen auch keine Makros, einschließlich, \lst@thestyle
möchte ich hinzufügen), also habe ich mir angesehen listings.sty
, wenig überraschend ohne Erfolg, teilweise weil die .sty
-Datei in keiner Zeile Anmerkungen zur Erklärung enthält.
Der Einfachheit halber habe ich das MWE des opstyle
Beispiels und des Bilds aus dem zuvor erwähnten Thread eingefügt. In meinem Fall möchte ich beispielsweise den Teil string: ()
orange, den {}><;&
Teil jedoch rot färben.
\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}