¿Cómo utilizar listados dentro de los subtítulos de pgfplots?

¿Cómo utilizar listados dentro de los subtítulos de pgfplots?

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 \addlegendentryentorno?

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}

listado extraño dentro de pgfplot

Una solución que encontré es poner \{... \}en el \legendentrycaso, pero hacerlo no hace lo mismo fuera del pgfploty quiero usar elmismocódigo independientemente si es posible. Quizás la solución sea una opción que tengo que pasar al tikzpictureentorno, o al tikzpaquete o al listing.

(Estos verbentornos 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 \lstinlineargumentos 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 \lstinlineel 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}

ingrese la descripción de la imagen aquí

Una alternativa sería utilizar la listingsinterfaz para fancyvrb(o utilizar fancyvrbdirectamente):

\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}

ingrese la descripción de la imagen aquí

información relacionada