Wie kann ich eine Auflistung richtig farblich kennzeichnen, ohne dass es zu seltsamen Zeichenabständen kommt?

Wie kann ich eine Auflistung richtig farblich kennzeichnen, ohne dass es zu seltsamen Zeichenabständen kommt?

Ich möchte eine Codeliste erstellen, die wie folgt aussieht:

Bildbeschreibung hier eingeben
Ich habe Folgendes versucht:

\lstset{escapeinside={<@}{@>}}
\begin{lstlisting}
<@\textcolor{blue}{void}@> fun(var<<@\textcolor{blue}{long int}@>> list)
\end{lstlisting}

Aber am Ende sah das Ergebnis so aus:

Bildbeschreibung hier eingeben

Das sieht für mich irgendwie komisch aus. Beispielsweise ist der Abstand zwischen schwarzen Zeichen anders als zwischen blauen Zeichen. Warum ist das so?

Bearbeiten

Die Einstellung columnswie fullflexiblefolgt: \begin{lstlisting}[columns=fullflexible]hat das Problem gelöst. Weitere Details indiese Antwort.

Antwort1

Sie müssen den wörtlichen/auflistenden Text aus den Argumenten anderer Makros und auch aus Escape-Regionen heraushalten.

Bildbeschreibung hier eingeben

\documentclass{article}

\usepackage{listings}

\usepackage{color}
\def\z#1{\gdef\zz{\color{#1}}\aftergroup\zz}
\begin{document}

\lstset{escapechar=|}
\begin{lstlisting}
|\z{blue}|void|\z{black}| fun(var<|\z{blue}|long int|\z{black}|> list)
\end{lstlisting}

\end{document}

Antwort2

Sie können Ihre eigene Listenumgebung definieren und den Listen mit von Ihnen definierten Schlüsselwörtern unterschiedliche Farben zuweisen:

\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[procnames]{listings}
\usepackage{color}


\lstnewenvironment{myCode}[1][]{
\lstset{
    emph={void,long,int},
emphstyle=\color{blue},
emph={[2]fun},
emphstyle=[2]\color{green}
}}{}


\begin{document}

\begin{myCode}
void fun(var<long int> list)
\end{myCode}

\end{document}

verwandte Informationen