在坐标名称中使用@(Tikz)

在坐标名称中使用@(Tikz)

我正在编写一些用于在 Tikz 中绘制时间线的宏,并认为将内部帮助坐标命名为 @ 可能是一个不错的选择。这样一来,它就不会与这些宏的潜在用户的坐标发生冲突(因为我经常编码问题)。

然而,令我惊讶的是,我可以在坐标名称中使用 @,而不将其放在\makeatletterand内\makatother

\begin{tikzpicture}
  \draw (0,0)--(2,0) coordinate (A@1);
  \draw (1,1)--(A@1);
\end{tikzpicture}

我的问题是:它为什么有效?

那么,如果@可以自由使用,帮助坐标将不会受到保护以防止无意使用。

答案1

字母和非字母(catcode 是否为 11)之间的区别仅在于转义符(通常为\)后的解析,因此\foo@bar通常解析为 5 个标记\foo, @, b, a, r。但是,例如,可以 使用 来foo@bar访问 csname,而无需更改 catcode 。@\csname foo@bar\endcsname

您会看到与环境名称类似的情况,其中\begin{tabular*}使用名称访问命令,tabular*即使\tabular*无法访问该命令,但有两个令牌\tabular*除非您将 catcode 更改*为 11。

相关内容