\@let@token 起什么作用?

\@let@token 起什么作用?

我在多个地方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

相关内容