如何在 tikz 循环中将变量与字符串连接起来?

如何在 tikz 循环中将变量与字符串连接起来?

是否可以将 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。但我想知道是否有任何方法可以在循环中直接连接\iX获得AX等等。例如,是否有命令\def{\ix}{\concatenate{\i}{X}}或类似命令?

答案1

删除并在和{...}之间添加一个空格。这个空格会告诉 latex 宏已结束,并且它不是宏名称的一部分,但它不会包含在您正在构建的节点名称中:\iX\iX

(用于#评论也是错误的)

\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}

相关内容