Necesito agregar un código de listado (general) en un título de trama. Por alguna razón listings
(en línea) no interactúa bien con \addlegendentry
, ¿qué puedo hacer para que el mismo código funcione fuera y dentro de un \addlegendentry
entorno?
Tenga en cuenta que incluso da un resultado extraño (ver imagen), donde la frase está en el orden incorrecto.
\documentclass[]{article}
\usepackage{pgfplots}
\usepackage[]{listings}
\begin{document}
\lstinline[]|(double x){bbbb}| %ok
\begin{tikzpicture}
\begin{axis}[]
\addlegendentry{\lstinline[]|(double x){bbbb;}|}; %not ok, garbage
\addplot+[mark=none, line join=round, fill opacity = 0.5, ] coordinates {
( 1, 2 )
( 3, 4)
};
\end{axis}
\end{tikzpicture}
\end{document}
Una solución que encontré es poner \{
... \}
en el \legendentry
caso, pero hacerlo no hace lo mismo fuera del pgfplot
y quiero usar elmismocódigo independientemente si es posible. Quizás la solución sea una opción que tengo que pasar al tikzpicture
entorno, o al tikz
paquete o al listing
.
(Estos verb
entornos similares siempre me dan dolores de cabeza).
EDITAR: Gracias a la aclaración de Gonzalo, hice este código que permite usar el mismo código dentro y fuera del título, usa un hack ( \textrm
, otras soluciones son bienvenidas):
\documentclass[]{article}
\usepackage{pgfplots}
\usepackage[]{listings}
\begin{document}
\textrm{\lstinline[]|(double x)\{bbbb\}|} %ok
\begin{tikzpicture}
\begin{axis}[small]
\addlegendentry{\textrm{\lstinline[]|(double x)\{bbbb\}|}}; %now ok
\addplot+[mark=none, line join=round, fill opacity = 0.5, ] coordinates {( 1, 2 )};
\addlegendentry{\lstinline[]|(double x){bbbb;}|}; % not ok, garbage
\addplot+[mark=none, line join=round, fill opacity = 0.5, ] coordinates {( 1, 2 )};
\addlegendentry{\lstinline[]|(double x)\{bbbb\}|}; % not what one expects
\addplot+[mark=none, line join=round, fill opacity = 0.5, ] coordinates {( 1, 2 )};
\end{axis}
\end{tikzpicture}
\end{document}
Respuesta1
El uso de \lstinline
argumentos internos es experimental; consulte esta subsección en la documentación:
5.1 Listados dentro de argumentos
Hay algunas cosas a considerar si desea utilizar
\lstinline
el entorno de listado dentro de los argumentos. Dado que TeX lee el argumento antes de que se ejecute "lst-macro", este paquete no puede hacer nada para preservar la entrada: los espacios se reducen a un espacio, el tabulador y el final de la línea se convierten en espacios, el carácter de comentario de TeX no imprimible, etc. Por tanto, debes trabajar un poco más. Tienes que poner una barra invertida delante de cada uno de los siguientes cuatro caracteres:\{}%
. Además, debes proteger los espacios de la misma manera si: (i) hay dos o más espacios uno detrás del otro o (ii) el espacio es el primer carácter de la línea. Eso no es suficiente: cada línea debe terminar con un "avance de línea"^^J
. ¡Y no puedes escapar a LaTeX dentro de dichos listados!
Me temo que la única solución es, como se sugiere en la documentación, usar \{
y \}
:
\documentclass[]{article}
\usepackage{pgfplots}
\usepackage[]{listings}
\begin{document}
\begin{tikzpicture}
\begin{axis}[]
\addlegendentry{\lstinline[]|(double x)\{bbbb;\}|};
\addplot+[mark=none, line join=round, fill opacity = 0.5, ] coordinates {
( 1, 2 )
( 3, 4)
};
\end{axis}
\end{tikzpicture}
\end{document}
Una alternativa sería utilizar la listings
interfaz para fancyvrb
(o utilizar fancyvrb
directamente):
\documentclass[]{article}
\usepackage{pgfplots}
\usepackage{fancyvrb}
\fvset{commandchars=\\\{\}}
\begin{document}
\Verb!(double x)\{bbbb;\}!
\begin{tikzpicture}
\begin{axis}[]
\addlegendentry{\Verb!(double x)\{bbbb;\}!};
\addplot+[mark=none, line join=round, fill opacity = 0.5, ] coordinates {
( 1, 2 )
( 3, 4)
};
\end{axis}
\end{tikzpicture}
\end{document}