因为我经常在 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}