TikZ 坐标名称中的宏后的空格

TikZ 坐标名称中的宏后的空格

在 TikZ 中,我有时需要在坐标名称中使用宏,通常是在使用时\foreach。我的问题是坐标名称中的宏会消除任何后续空格。

例如,这里有一个关于该问题的例子:

\usepackage{tikz}

\begin{document}
    \begin{tikzpicture}
        \def\a{a}
        \coordinate (\a 1);
        \node at (a1) {Test}; % works correctly
        \node at (a 1) {Test}; % error: "No shape named `a 1' is known.
    \end{tikzpicture}
\end{document}

在示例中,我\a在坐标定义中使用了宏(\a 1)。我期望获取坐标(a 1),但是宏后面的空格被消除了,最终只得到了(a1)

有什么方法可以告诉 TikZ (或 LaTeX,我真的不知道宏扩展在后台是如何工作的) 我想保留宏后的空格?我尝试过将其转义 ( (\a\ 1),无法编译),添加更多空格 ( (\a 1),其中任何数量的空格仍会被消除) 并添加一些括号 (({\a} 1)(\a{} 1),这两种方法都可以防止消除空格,但只是因为括号包含在坐标名称中,分别产生({a} 1)(a{} 1))。

有没有解决我的问题的方法,或者我只需要避免在宏后使用空格?

答案1

控制序列后的空格会被 TeX 吞噬,因为它们是用来结束控制序列的。

如果您使用{a}a{}{}成为节点名称的一部分。(PGF/TikZ\csname内部使用来存储仅以此方式工作的节点)。

\是一个特殊的宏,它不只是输入一个,类似~(牢不可破的空间)。

您想要使用的是\space文字

\coordinate (\a\space 1);

解决方法是,任何非字母字符也会结束控制序列,因此

\coordinate (\a-1); % or (\a -1)

将使坐标被命名,这可能比s 和sa-1更容易处理。\space

您也可以使用,\def\a#1{a #1}但是不要这样做,在我看来,这样非常不雅。

相关内容