\let\newtoks=\relax % this allows plain.tex to be read in twice
\let\+=\relax % in case this file is being read in twice

I came across this when I was studying plain.tex. I have some questions:

(1) Under what circumstances do we need to read plain.tex twice?

(2) The purpose of these \let commands, as far as I can see, is to cancel the previous \outer definition of \newtoks and \+, so that they can be used to define other macros (\newhelp and \sett@b, respectively). Are there any other purposes?

(3) Are there any more such lines in plain.tex?


You see similar in this answer

Is there any software that converts latex file to tex file?

Note that isn't exactly inputting plain.tex twice but it is inputting code derived from plain tex into plain, so the same issues arise.

1. The most likely case of inputting putting plain twice is a file for a custom format that has

\input plain

so that it can be run from initex/virtex to initialise a format, but might also be input in a document in a normal plain tex command so input to a format already built with plain.

2. yes

3. no

  • 5
    \outer is the most useless, annoying, "feature" in the whole TeX language. Sep 12 '18 at 8:27
  • 3
    I guess back in the day it was extremely useful because you didn't have to wait for half an hour for TeX to realize that there is a missing } somewhere. Nevertheless, I would have appreciated a \noouter primitive which lets you use a control sequence defined \outer in a non-\outer context. Or if it would have at least been allowed to use \outer control sequences within outer \outer control sequences. This would facilitate the definition of monadic constructs. Sep 12 '18 at 8:49

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.