如何在 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 內的奇怪列表

我發現的一種解決方法是將\{...放在案例\}\legendentry,但這樣做不會在外部做同樣的事情pgfplot,我想使用相同的代碼,無論是否可能。也許解決方案是我必須傳遞給環境tikzpicturetikz包或listing.

(這些verb類似的環境總是讓我頭痛。)


編輯:感謝 Gonzalo 的澄清,我編寫了這段程式碼,允許在標題內部和外部使用相同的程式碼,它使用了 hack(\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-巨集”之前讀取參數,因此該包無法執行任何操作來保留輸入:空格縮小為一個空格,製表符和行尾轉換為空格,TeX 的註釋字元不是可列印,等等。因此,你必須多努力一點。您必須在以下四個字元前面加上一個反斜線:\{}%。此外,如果出現以下情況,則必須以相同的方式保護空格:(i) 存在兩個或多個連續的空格,或 (ii) 空格是該行中的第一個字元。這還不夠:每一行都必須以「換行」結束^^J。而且您無法在此類清單中轉而使用 LaTeX!

恐怕唯一的解決方案是,按照文件中的建議,使用\{and \}

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

在此輸入影像描述

相關內容