我需要在繪圖標題中添加(通用)列表代碼。由於某種原因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}
我發現的一種解決方法是將\{
...放在案例\}
中\legendentry
,但這樣做不會在外部做同樣的事情pgfplot
,我想使用相同的代碼,無論是否可能。也許解決方案是我必須傳遞給環境tikzpicture
、tikz
包或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}