26

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?

24

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.