tikz/foreach:保护“迭代变量”后的空间

tikz/foreach:保护“迭代变量”后的空间

我尝试在 tikz 中绘制一些节点,由于它们非常简单,所以我想使用命令来“缩短”它们\foreach

\foreach \xnum in {1,2,3,4,5}
{
    \node at (X\xnum center) {$x_\xnum$};
}

您可以将其插入到任何tikzpicture具有定义了一些节点 X1、X2、... 的环境的 MWE 中。(在我的情况下,这些是矩形,使用这个:https://tex.stackexchange.com/a/47797/22276

问题在于,后面的空格\xnum没有被保留,这就是为什么我在运行 pdflatex 时出现以下错误:

! Package pgf Error: No shape named X1center is known.

知道如何解决这个问题吗?

答案1

用于\space获取文字空间。

活动字符~不仅产生空格,还产生不可破坏的空格,保存在\nobreakspace扩展为\leavevmode\nobreak\␣(LaTeX)的宏中。

结束宏的技巧\xnum{}不起作用,因为 TikZ 在某个点执行 a \csname pgf@sh@ma@#1\endcsname(其中#1是我们的坐标/节点名称)并且在那时{}将成为它们的实际字符:No shape named X1{} center is known

\␣对以下任一方面都不利csname控制序列\␣不应该出现在\csname和之间\endcsname(根据原始错误信息自由改编。)

代码

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\coordinate (X1 center) at (0,0);
\coordinate (X2 center) at (1,0);
\coordinate (X3 center) at (2,0);
\coordinate (X4 center) at (3,0);
\coordinate (X5 center) at (4,0);

\foreach \xnum in {1,2,3,4,5}
{
    \node at (X\xnum\space center) {$x_\xnum$};
}
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

答案2

这是另一种方法,可用于其他情况(例如,\xnum直接需要持有者宏的内容而无需扩展)。

\documentclass[tikz]{standalone}
\usepackage{tikz,loops}

\begin{document}
\begin{tikzpicture}
\coordinate (X1 center) at (0,0);
\coordinate (X2 center) at (1,0);
\coordinate (X3 center) at (2,0);
\coordinate (X4 center) at (3,0);
\coordinate (X5 center) at (4,0);

\newforeach \xnum in {1,...,5} {\node at (X#1 center) {$x_\xnum$};}

% Or
% \foreachfox {1,...,5} {\node at (X#1 center) {$x_#1$};}
\end{tikzpicture}
\end{document} 

相关内容