pgfplot 循环列表条目的宏

pgfplot 循环列表条目的宏

我正在尝试基于宏变量定义多个循环列表。这样做的原因是我需要多个列表,并且我希望能够快速更改外观同时保持一致性。

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

相关内容