
Quiero preparar una lista de códigos que se vea así:
\lstset{escapeinside={<@}{@>}}
\begin{lstlisting}
<@\textcolor{blue}{void}@> fun(var<<@\textcolor{blue}{long int}@>> list)
\end{lstlisting}
Pero terminó renderizándose así:
Esto me parece algo raro. Por ejemplo, el espacio entre los caracteres negros es diferente al de los caracteres azules. ¿Por qué esto es tan?
Editar
Configuración columns
de fullflexible
la siguiente manera: \begin{lstlisting}[columns=fullflexible]
resolvió el problema. Más detalles enesta respuesta.
Respuesta1
Debe mantener el texto textual/listado fuera de los argumentos de otras macros y también fuera de las regiones escapadas.
\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}
Respuesta2
Puede definir su propio entorno de listado y asignar diferentes colores a las listas de palabras clave que defina:
\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}