在 pgfplots 的轴选项中使用宏

在 pgfplots 的轴选项中使用宏

我想创建一个宏来替换代码中的字符串“{a,b,c}”:

xticklabels={a,b,c}

所以我设置

\newcommand\inputnames{a,b,c}
xticklabels=\inputnames

但这给出了与 相同的结果xticklabels={{a,b,c}},而这在我的例子中是不同的。我猜想它来自我的宏的不必要的扩展,但我找不到如何阻止它。

完整代码如下:

\documentclass{standalone}
\usepackage{pgfplots}


\begin{document}

\newcommand{\inputnames}{a,b,c}

\begin{tikzpicture}
\begin{axis}[xtick={1,2,3},xticklabels=\inputnames]
\addplot coordinates {(1,-1)(2,-3)(3,-4)};
\end{axis}
\end{tikzpicture}

\begin{tikzpicture}
\begin{axis}[xtick={1,2,3},xticklabels={a,b,c}]
\addplot coordinates {(1,-1)(2,-3)(3,-4)};
\end{axis}
\end{tikzpicture}

\end{document} 

答案1

你需要使用

xticklabels/.expand once=\inputnames

在实际应用之前,它将参数扩展为xticklabel一次。(还有和.expand twice.expanded

否则,当xticklabels读取时,解析器只会找到一个标签,即 ,\xticklabel然后将其提供给排版此标签的节点。首先,这里展开宏。

代码

\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\newcommand{\inputnames}{a,b,c}
\begin{tikzpicture}
\begin{axis}[xtick={1,2,3},xticklabels/.expand once=\inputnames]
\addplot coordinates {(1,-1)(2,-3)(3,-4)};
\end{axis}
\end{tikzpicture}
\end{document} 

输出

在此处输入图片描述

相关内容