pgfplots キャプション内でリストを使用するにはどうすればいいですか?

pgfplots キャプション内でリストを使用するにはどうすればいいですか?

プロットキャプションに (一般的な) リスト コードを追加する必要があります。何らかの理由でlistings(インライン) が とうまく連携しません\addlegendentry。同じコードを環境の内外で動作させるにはどうすればよいですか\addlegendentry?

フレーズが間違った順序になっているという奇妙な結果 (画像を参照) も表示されることに注意してください。

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

pgfplot 内の奇妙なリスト

私が見つけた回避策の1つは、ケース内に\{...を入れることですが、そうすることでは、ケースの外側で同じことは起こりません。\}\legendentrypgfplot同じ可能であれば、コードに関係なく、tikzpicture環境、tikzパッケージ、またはにlisting渡す必要があるオプションが解決策になるかもしれません。

(このverbような環境はいつも私に頭痛の種を与えます。)


編集: Gonzalo の説明のおかげで、キャプションの内側と外側で同じコードを使用できるこのコードを作成しました。これはハックを使用しています (\textrm他の解決策も歓迎します)。

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

答え1

内部引数の使用は\lstinline実験的です。ドキュメントのこのサブセクションを参照してください。

5.1 引数内のリスト

引数内でリスト環境を使用したい場合、考慮すべきことがいくつかあります\lstinline。 TeX は "lst- マクロ" が実行される前に引数を読み込むため、このパッケージは入力を保存するために何もできません。スペースは 1 つのスペースに縮小され、タブと行末はスペースに変換され、TeX のコメント文字は印刷できません。 そのため、もう少し作業する必要があります。 次の 4 つの文字の前にバックスラッシュを置く必要があります。\{}%さらに、次の場合は、同じ方法でスペースを保護する必要があります。(i) 2 つ以上のスペースが連続している場合、または (ii) スペースが行の最初の文字である場合。 それだけでは十分ではありません。 各行は "改行" で終了する必要があります^^J。 また、このようなリスト内では LaTeX にエスケープすることはできません。

残念ながら、唯一の解決策は、ドキュメントで提案されているように、\{と を使用することです\}

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

ここに画像の説明を入力してください

listings別の方法としては、インターフェースを使用してfancyvrb(または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}

ここに画像の説明を入力してください

関連情報