通过 \newcommand 和 {\newlength,\setlength} 设置 PGFplots 轴环境选项

通过 \newcommand 和 {\newlength,\setlength} 设置 PGFplots 轴环境选项

因为我经常在 LaTeX 文档中对多个轴使用相同的选项,所以我使用以下代码来简化我的生活。

\documentclass{article}
\usepackage{pgfplots}
\newcommand{\linecolora}{blue}
\newcommand{\marka}{o}
\newcommand{\plotoptsa}{color=\linecolora,mark=\marka}
\newcommand{\xlabela}{Test test 123}
\newlength\figurewidth
\setlength{\figurewidth}{\columnwidth}
\newcommand{\axisoptsa}{width=100,xlabel=\xlabela}
\newcommand{\axisoptsb}{ymin=-8,ymax=-3}
\begin{document}
    \begin{tikzpicture}
        \begin{axis}[\axisoptsa,\axisoptsb]
            \expandafter\addplot\expandafter[\plotoptsa] coordinates
                {
                    (2,-2.8559703)
                    (3,-3.5301677)
                    (4,-4.3050655)
                    (5,-5.1413136)
                    (6,-6.0322865)
                    (7,-6.9675052)
                    (8,-7.9377747)
                };
         \end{axis}     
    \end{tikzpicture}
\end{document}

它工作得很好!但是,如果我更改width=100为 defined width=\figurewidth,则会出现Missing \endcsname inserted.错误。使用

\expandafter\begin{axis}\expandafter[\axisoptsa,\axisoptsb]

没有帮助。

答案1

您不应该使用新命令来做这样的事情,而应该定义自己的样式。这样就可以覆盖它们。定义样式可确保您生成的图表都具有相同的外观和样式。

我建议每种图表类型都采用一种样式,而不是让所有东西都尽可能灵活。

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9}
\newlength\figurewidth
\setlength{\figurewidth}{\columnwidth}
\newcommand{\marka}{o}
%You can define colors like this:
\colorlet{linecolora}{blue}
%and define new styles like this:
\pgfplotsset{
    xlabela/.style={Test test 123},
    axisA/.style={width=\figurewidth,xlabel={xlabela}},
    axisB/.style={ymin=-8,ymax=-3},
    plotoptsa/.style={color=linecolora,mark=\marka}
}

\begin{document}
\begin{tikzpicture}
    \begin{axis}[axisA,axisB,xlabel={manually and conscious override of style}]
        \addplot [plotoptsa]
        coordinates
        {
            (2,-2.8559703)
            (3,-3.5301677)
            (4,-4.3050655)
            (5,-5.1413136)
            (6,-6.0322865)
            (7,-6.9675052)
            (8,-7.9377747)
        };
    \end{axis}     
\end{tikzpicture}
\end{document}

相关内容