\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?

1 Answer 1


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. Commented Sep 12, 2018 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. Commented Sep 12, 2018 at 8:49

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .