# \let\newtoks=\relax % this allows plain.tex to be read in twice

\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

• \outer is the most useless, annoying, "feature" in the whole TeX language. – David Carlisle Sep 12 at 8:27
• 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. – Henri Menke Sep 12 at 8:49