pgfplots:使用宏作为刻度标签

pgfplots:使用宏作为刻度标签

我想使用宏来定义 pgfplots 图片中额外刻度的标签。当宏使用希腊字符时,它会产生错误:

! Missing \endcsname inserted.

这是我的 MWE:

\documentclass{article}
\usepackage{pgfplots}
\newcommand{\extraticksmwe}{%
    extra y ticks={.5}, extra y tick labels={$\alpha$}%
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
    ytick={0},
    \extraticksmwe
    ]

\addplot[]{ .5 };
\end{axis}
\end{tikzpicture}
\end{document}

请注意,如果我不使用希腊字符,例如使用 $a$ 而不是 $\alpha$,则上述相同代码不会生成错误。同样,如果我根本不使用宏,它也不会生成错误,因此以下代码可以正常工作:

\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
    ytick={0},
    extra y ticks={.5}, extra y tick labels={$\alpha$}%
    ]

\addplot[]{ .5 };
\end{axis}
\end{tikzpicture}
\end{document}

答案1

你必须extraticksmwe先扩张。这可以通过以下方式实现

\edef\x{\noexpand\begin{axis}[
    ytick={0},
    \extraticksmwe
    ]
}
\x

然而这不是一个好的解决方案。它也不会\extraticksmwe只扩展一次。

我建议在你新定义的命令中使用\pgfplotsset并在环境axis启动之前调用它:

\newcommand{\extraticksmwe}{%
 \pgfplotsset{%
    extra y ticks={.5}, extra y tick labels={$\alpha$}%
 }
}

以下是完整的 MWE:

\documentclass{article}
\usepackage{pgfplots}
\newcommand{\extraticksmwe}{%
 \pgfplotsset{%
    extra y ticks={.5}, extra y tick labels={$\alpha$}%
 }
}
\begin{document}
\begin{tikzpicture}
\extraticksmwe
\begin{axis}[ytick={0}]
\addplot[]{ .5 };
\end{axis}
\end{tikzpicture}
\end{document}

如果您愿意避免使用宏,您也可以按照 percusse 的建议定义一种新样式。

\pgfplotsset{extraticksmwe/.style={extra y ticks={.5}, extra y tick labels={$\alpha$}}}

这种新样式可以在可选参数中使用axis

\begin{axis}[ytick={0},extraticksmwe]

相关内容