我正在编写一些用于在 Tikz 中绘制时间线的宏,并认为将内部帮助坐标命名为 @ 可能是一个不错的选择。这样一来,它就不会与这些宏的潜在用户的坐标发生冲突(因为我经常编码问题)。
然而,令我惊讶的是,我可以在坐标名称中使用 @,而不将其放在\makeatletter
and内\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。