如何使用 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!

恐怕唯一的解决办法就是,按照文档中的建议,使用\{\}

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

在此处输入图片描述

相关内容