是否可以将 TikZ 循环变量与字符串连接起来?例如,考虑以下 tikzpicture
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node[name=AX]{A};
\node[name=BX, at={(1,0)}]{B};
\node[name=CX, at={(2,0)}]{C};
\foreach \i in {A,B,C} {
\node[at=(\i{X})]{foo}; % FAIL HERE
}
\end{tikzpicture}
\end{document}
毫不奇怪,此代码失败并出现预期的错误:
Package pgf Error: No shape named `A{X}' is known. [}]
Package pgf Error: No shape named `B{X}' is known. [}]
Package pgf Error: No shape named `C{X}' is known. [}]
我知道有一些解决方法,例如重命名A-X
然后\i-X
在循环中使用,或者直接循环AX, BX, CX
。但我想知道是否有任何方法可以在循环中直接连接\i
以X
获得AX
等等。例如,是否有命令\def{\ix}{\concatenate{\i}{X}}
或类似命令?
答案1
删除并在和{...}
之间添加一个空格。这个空格会告诉 latex 宏已结束,并且它不是宏名称的一部分,但它不会包含在您正在构建的节点名称中:\i
X
\i
X
(用于#
评论也是错误的)
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node[name=AX]{A};
\node[name=BX, at={(1,0)}]{B};
\node[name=CX, at={(2,0)}]{C};
\foreach \i in {A,B,C} {
\node[at=(\i X)]{foo}; %# NO FAIL HERE
}
\end{tikzpicture}
\end{document}