Wie verwende ich Auflistungen in pgfplots-Beschriftungen?

Wie verwende ich Auflistungen in pgfplots-Beschriftungen?

Ich muss einen (allgemeinen) Auflistungscode in eine Grundstücksüberschrift einfügen. Aus irgendeinem Grund listingsfunktioniert (inline) nicht gut mit . \addlegendentryWas kann ich tun, damit derselbe Code außerhalb und innerhalb einer \addlegendentryUmgebung funktioniert?

Beachten Sie, dass es sogar ein merkwürdiges Ergebnis gibt (siehe Bild), bei dem die Phrase in der falschen Reihenfolge steht.

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

seltsame Auflistung in pgfplot

\{Eine Problemumgehung, die ich gefunden habe, besteht darin , ... \}in den Fall einzufügen \legendentry, aber dies bewirkt nicht dasselbe außerhalb des pgfplotund ich möchte denDasselbetikzpictureCode, wenn möglich, unabhängig davon. Vielleicht ist die Lösung eine Option, die ich an die Umgebung, das tikzPaket oder das weitergeben muss listing.

(Diese verb-ähnlichen Umgebungen bereiten mir immer Kopfschmerzen.)


BEARBEITEN: Dank Gonzalos Klarstellung habe ich diesen Code erstellt, der die Verwendung des gleichen Codes innerhalb und außerhalb der Überschrift ermöglicht. Er verwendet einen Hack ( \textrm, andere Lösungen sind willkommen):

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

Antwort1

Die Verwendung von \lstinlineInside-Argumenten ist experimentell; siehe diesen Unterabschnitt in der Dokumentation:

5.1 Auflistungen innerhalb von Argumenten

Wenn Sie oder die Listing-Umgebung innerhalb von Argumenten verwenden möchten, müssen Sie einige Dinge beachten \lstinline. Da TeX das Argument liest, bevor das „lst-Makro“ ausgeführt wird, kann dieses Paket nichts tun, um die Eingabe zu erhalten: Leerzeichen werden auf ein Leerzeichen reduziert, der Tabulator und das Zeilenende werden in Leerzeichen umgewandelt, TeXs Kommentarzeichen sind nicht druckbar usw. Sie müssen also etwas mehr tun. Sie müssen vor jedes der folgenden vier Zeichen einen Backslash setzen: \{}%. Darüber hinaus müssen Sie Leerzeichen auf die gleiche Weise schützen, wenn: (i) zwei oder mehr Leerzeichen hintereinander stehen oder (ii) das Leerzeichen das erste Zeichen in der Zeile ist. Das reicht nicht: Jede Zeile muss mit einem „Line Feed“ abgeschlossen werden ^^J. Und Sie können innerhalb solcher Listings nicht nach LaTeX wechseln!

Ich fürchte, die einzige Lösung besteht dann darin, wie in der Dokumentation vorgeschlagen, \{und zu verwenden \}:

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

Bildbeschreibung hier eingeben

Eine Alternative wäre, die listingsSchnittstelle zu nutzen fancyvrb(oder direkt zu verwenden fancyvrb):

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

Bildbeschreibung hier eingeben

verwandte Informationen