
Ich möchte eine Codeliste erstellen, die wie folgt aussieht:
\lstset{escapeinside={<@}{@>}}
\begin{lstlisting}
<@\textcolor{blue}{void}@> fun(var<<@\textcolor{blue}{long int}@>> list)
\end{lstlisting}
Aber am Ende sah das Ergebnis so aus:
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 columns
wie fullflexible
folgt: \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.
\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}