# What does \@let@token do?

In source2e.pdf I've seen \@let@token used in several places, for example in the definition of \@ifnextchar:

\long\def\@ifnextchar#1#2#3{%
\let\reserved@d=#1%
\def\reserved@a{#2}%
\def\reserved@b{#3}%
\futurelet\@let@token\@ifnch}


However, I couldn't find a description of \@let@token, so my question is what exactly does \@let@token do?

-

\@let@token is assigned by \futurelet to the next token after the \@ifnextchar, i.e. it is the next character. The \futurelet\@let@token\@ifnch code means "assign the next token to \@let@token and then process \@ifnch". Inside \@ifnch the \@let@token macro is tested if it is equal to the (first token of the) first argument of \@ifnextchar, i.e. \reserved@d (see the \let\reserved@d=#1).

So, it does nothing, but it is used as a temporary variable. In theory \@tempa could have been used as well but wouldn't be as save as a named special macro. The benefit here is that you can check \@let@token in the false clause of \@ifnextchar using \ifx against other tokens without going to the more complex \@ifnextchar macro again.

\@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
}


This is useful for parser code as in e.g. tikz-timing and ydoc.

-