[texhax] Some puzzling TeX (\@sptoken)

Uwe Lueck uwe.lueck at web.de
Wed Jun 1 13:02:03 CEST 2011


"Heiko Oberdiek" <heiko.oberdiek at googlemail.com> wrote 31.05.2011 21:14:19:
> On Tue, May 31, 2011 at 08:50:28PM +0200, Uwe Lueck wrote:
>>
>>   \makeatletter \let\atest\@sptoken \show\atest \stop
>
> The syntax of \let contains optional spaces, therefore \@sptoken
> that is an (implicite) space is ignored and you get:
>   \let\atest\show
>   \atest\stop
>
> Probably you want:
>   \let\atest= \@sptoken
>   \show\atest
>   \stop

Thanks, indeed. Actually my code was a result of realizing
that \@sptoken behaves like a blank space, but I wondered
whether the TeXbook has an explicit rule on that. As to
`implicit', I wondered whether this is explained explicitly.

After Heiko's hint I found on TeXbook p. 153:
"When TeX's syntax allows both explicit and implicit characters,
the rules below will be careful to say so, explicitly."
I looked along the rules, not being willing to read 
the entire Chapter 24 ...

As I sometimes do (not knowing if this is allowed),
I then searched texbook.tex in a text editor and found
that the above quote continues (very next paragraph):
"The quantity <space token>, which was used in the syntax of <optional
spaces> above, stands for an explicit or implicit space. In other words,
it denotes either a character token of category 10, or a control sequence
or active character whose current meaning has been made equal to such a
token by \let or \futurelet."

What seems *not to be said explicitly*, indeed!! (see
announcement above), is that <one optional space>
may be an implicit space token. (Of course it is said
*implicitly*.)

Indeed I had `=' intermediately, but missed to try `= ', I rather removed
`=`for simplification in debugging, when I had no idea what was going on.

BTW, I have discovered at this occasion that Exercise 24.6
and the \futurenonspacelet story in Appendix D, pp. 376f.
expand on space tokens.

Cheers,

    Uwe.



More information about the texhax mailing list