我需要在绘图标题中添加(通用)列表代码。由于某种原因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!
恐怕唯一的解决办法就是,按照文档中的建议,使用\{
和\}
:
\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}