我在多个地方source2e.pdf
看到过\@let@token
它的使用,例如在的定义中\@ifnextchar
:
\long\def\@ifnextchar#1#2#3{%
\let\reserved@d=#1%
\def\reserved@a{#2}%
\def\reserved@b{#3}%
\futurelet\@let@token\@ifnch}
但是,我找不到的描述\@let@token
,所以我的问题是它到底起什么作用\@let@token
?
答案1
\@let@token
被分配给\futurelet
之后的下一个标记\@ifnextchar
,即它是下一个字符。\futurelet\@let@token\@ifnch
代码的意思是“将下一个标记分配给\@let@token
然后处理\@ifnch
”。在宏内部\@ifnch
测试\@let@token
它是否等于 的第一个参数(的第一个标记)\@ifnextchar
,即\reserved@d
(参见\let\reserved@d=#1
)。
因此,它什么也不做,但它被用作临时变量。理论上\@tempa
也可以使用,但不会像命名特殊宏那样安全。这里的好处是,您可以\@let@token
在错误的\@ifnextchar
使用该子句\ifx
对抗其他标记,而无需\@ifnextchar
再次使用更复杂的宏。
\@ifnextchar{\relax}{It was a relax!}{%
\ifx\@let@token$
It was a dollar!
\else
\ifx\@let@token&
It was an ampersand!
\else
something else
\fi
\fi
}
tikz-timing
这对于像和中的解析器代码很有用ydoc
。