我想创建一个宏来替换代码中的字符串“{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}