我正在尝试基于宏变量定义多个循环列表。这样做的原因是我需要多个列表,并且我希望能够快速更改外观同时保持一致性。
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\newcommand{\var1}{solid, red, every mark/.append style={solid, fill=red}, mark=o}
\newcommand{\var2}{dashed, blue, every mark/.append style={solid, fill=blue}, mark=x}
\pgfplotscreateplotcyclelist{cycle1}{
\var1\\%
\var2\\%
}
\pgfplotscreateplotcyclelist{cycle2}{
\var1\\%
}
\begin{tikzpicture}
\begin{axis}[cycle list name = cycle1]
\addplot
coordinates
{
(0,0)
(10,5)
};
\addplot+[only marks,forget plot]
coordinates
{
(0,0)
(10,7)
};
\end{axis}
\end{tikzpicture}
\end{document}
此代码示例失败并显示以下消息
! Undefined control sequence.
\pgfkeyscurrentkey ->\var1
这可能与宏扩展有关,所以我尝试了,\noexpand
但\expandafter
似乎都不起作用。
答案1
我们不能在 LaTeX 宏中使用数字 - 请参阅定义包含数字的命令/缩写以及其中的链接以了解详情。
我们可以使用以下方法实现接近您期望的方法pgfplots
通过使用样式的基于方法:
\pgfplotsset{
mystyle/.style={
solid, red, every mark/.append style={solid, fill=red}, mark=o},
myotherstyle/.style={dashed, blue, every mark/.append style={solid, fill=blue}, mark=x}
}
\pgfplotscreateplotcyclelist{cycle1}{
mystyle\\%
myotherstyle\\%
}
\pgfplotscreateplotcyclelist{cycle2}{
mystyle\\%
}
这个想法是设置styles
称为mystyle
和 的样式myotherstyle
,并在声明中使用它们cyclelist
。如果您希望在文档中途更改这些样式,您可以使用,例如,
\pgfplotsset{mystyle/.style={blue}}
这是一个完整的 MWE,可供使用。
% arara: pdflatex
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\pgfplotsset{
mystyle/.style={
solid, red, every mark/.append style={solid, fill=red}, mark=o},
myotherstyle/.style={dashed, blue, every mark/.append style={solid, fill=blue}, mark=x}
}
\pgfplotscreateplotcyclelist{cycle1}{
mystyle\\%
myotherstyle\\%
}
\pgfplotscreateplotcyclelist{cycle2}{
mystyle\\%
}
\begin{tikzpicture}
\begin{axis}[cycle list name = cycle1]
\addplot
coordinates
{
(0,0)
(10,5)
};
\addplot+[only marks,forget plot]
coordinates
{
(0,0)
(10,7)
};
\end{axis}
\end{tikzpicture}
\end{document}