summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/generic/knuth/errata/errata.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/generic/knuth/errata/errata.tex')
-rw-r--r--Master/texmf-dist/source/generic/knuth/errata/errata.tex2474
1 files changed, 1288 insertions, 1186 deletions
diff --git a/Master/texmf-dist/source/generic/knuth/errata/errata.tex b/Master/texmf-dist/source/generic/knuth/errata/errata.tex
index c53b83902b2..3a0d367f0ca 100644
--- a/Master/texmf-dist/source/generic/knuth/errata/errata.tex
+++ b/Master/texmf-dist/source/generic/knuth/errata/errata.tex
@@ -1,5 +1,6 @@
% Bugs (sigh) in Computers \& Typesetting --- the most recent errata
+\tracingpages=1
\input manmac
\def\.#1{\hbox{\tt#1}}
\font\sltt=cmsltt10
@@ -34,11 +35,12 @@
\tenpoint
\noindent This is a list of all substantial corrections made to {\sl Computers
-\& Typesetting\/} since the publication of the second ``Millennium Edition''
-at the close of the year 2001. (More precisely, it lists errors corrected
-since the 16th printing of Volume~A, the 7th printing
-of Volume~B, the 6th printing of Volume~C, the 4th printing of Volume~D,
-and the 5th printing of Volume~E.)
+\& Typesetting\/} since the beginning of 2014.
+(More precisely, it lists errors corrected
+since the 19th printing of Volume~A, the 9th printing
+of Volume~B, the 8th printing of Volume~C, the 6th printing of Volume~D,
+and the 7th printing of Volume~E. % 2012 for A-D, 2013 for E
+But it omits changes that are ``purely cosmetic.'')
Corrections made to the softcover version of {\sl The \TeX book\/},
beginning with its 32nd printing, are
the same as corrections to Volume~A\null. Corrections to the softcover
@@ -51,1650 +53,1750 @@ errors have been corrected in the most recent printings.
% volume A
-\bugonpage A7, line 4 from the bottom (01/15/04)
-
-\noindent
-since control sequences of the second kind always have exactly one
-symbol after\cutpar
-
-\bugonpage A123, line 7 from the bottom (02/27/08)
-
-\ninepoint\noindent
-that it won't make the natural height-plus-depth
-of\/ |\box|$\,n$ surpass |\dimen|$\,n$, when it~is\cutpar
-
-\bugonpage A124, lines 12 and 13 (02/27/08)
-
-\ninepoint\noindent
-means that \TeX\ has tried to split an |\insert254| to height $180.2\pt$;
-the natural height-plus-depth of the best such split is $175.3\pt$,
-and the penalty for breaking there is~100.)
-
-\bugonpage A153, line 7 (01/03/14)
-
-\ninepoint\noindent
-of three fonts: one for text size, one for
-script size, and one for scriptscript size. The\cutpar
-
-\bugonpage A206, lines 12--17 (05/21/07)
+\bugonpage A34, line 3 from the bottom (01/09/20)
\ninepoint\noindent
-or alignment template
-is also considered to be |\outer| in this sense; for example, a
-file shouldn't end in the middle of a definition. If you are designing a
-format for others to use, you can help them detect errors before too much
-harm is done, by using |\outer| with all control sequences that should
-appear only at ``quiet times'' within a document. For example, Appendix~B
-defines |\proclaim| to be |\outer|, since a user shouldn't be stating a
-theorem as part of a definition or argument or preamble.
+not, you can say
+`\.{I\char`\\errorcontextlines=100} \.{\char`\\oops}' and try again. \ (That
+will usually\cutpar
+\bugonpage A43, line 6 (07/24/14)
-\bugonpage A216, line 3 from the bottom (12/20/07)
-
-\ninepoint\indent|\openin|\<number>|=|\<file name>
-
-\bugonpage A290, lines 25--26 (02/24/08)
-
-\ninepoint\textindent{$\bull$}
-\<leaders>\<box or rule>\<horizontal skip>.\enskip
-Here \<horizontal skip> refers to one of the first five glue-appending
-commands just mentioned; the formal syntax for \<leaders>\cutpar
+\tenpoint\noindent
+keyboard, or that have been
+pre\"empted for formatting?
-\bugonpage A292, line 15 (12/02/02)
+\bugonpage A49, cummings quote (08/03/19)
-\ninepoint\noindent
-are defined as in the
-second alternative of a \<math field>, are
-recorded in a ``choice\cutpar
+(delete the period at the end of the line)
-\bugonpage A308, lines 25 and 26 (06/17/02)
+\bugonpage A66, line 3 from the bottom (08/26/17)
\ninepoint
-\begintt
-\def\appendroman#1#2#3{\expandafter\def\expandafter#1\expandafter
- {\csname\expandafter\gobble\string#2\romannumeral#3\endcsname}}
-\endtt
-
-\bugonpage A311, line 14 (12/02/02)
-
-\ninepoint\indent
-|\def\\{\if\space\next\ % assume that \next is unexpandable|
-
-\bugonpage A311, line 17 (12/29/07)
+Such displays of box contents will be discussed further in
+Chapters 12 and~27.\cutpar
+
+\bugonpage A105, lines 9--16 (01/16/21)
+
+\ddanger If you say \.{\char`\\vadjust\char`\{}$\langle\,$vertical
+mode material$\,\rangle$\.{\char`\}} within a
+paragraph, \TeX\ will use internal vertical mode to insert the specified
+material into the vertical
+list that encloses the paragraph, immediately after whatever line
+contained the position of the \.{\char`\\vadjust}. For example, you can say
+`\.{\char`\\vadjust\char`\{\char`\\kern1pt\char`\}}'
+to increase the amount of space between lines of a
+paragraph if those lines would otherwise come out too close together. \ (The
+\vadjust{\kern1pt}author
+did that in the current line, just to illustrate what happens.) \ Also,
+if you want to make sure that a page break will occur immediately after a
+certain line, you can say `\.{\char`\\vadjust\char`\{\char`\\eject\char`\}}'
+anywhere in that line.
+
+\bugonpage A122, lines 3--8 (11/24/19)
+
+\ninepoint\noindent
+\.{\char`\\count255}, \.{\char`\\dimen255}, \.{\char`\\skip255},
+\.{\char`\\muskip255}, and \.{\char`\\toks255} are
+traditionally kept available for such purposes. Furthermore, plain \TeX\
+reserves \.{\char`\\dimen0} to \.{\char`\\dimen9},
+\.{\char`\\skip0} to \.{\char`\\skip9}, \.{\char`\\muskip0} to
+\.{\char`\\muskip9}, and \.{\char`\\box0} to \.{\char`\\box9}
+for ``scratchwork''; these registers
+are never allocated by the \.{\char`\\new...}\null\ operations. We have seen that
+\.{\char`\\count0} through \.{\char`\\count9} are special,
+and \.{\char`\\box255} also turns out to
+be special; so those registers should be avoided unless you know what you
+are doing.
+
+\bugonpage A155, line 8 from the bottom (01/17/21)
\ninepoint\indent
-| \leavevmode\copy0\kern-\wd0\makelightbox}|
+\.{\char`\\mathopen\char`\{\char`\\hbox\char`\{\char`\$\char`\\left\char`\#1}%
+$\langle\,$strut$\,\rangle$\.{\char`\\right.\char`\$\char`\}\char`\}}
-\bugonpage A318, lines 24 and 25 (10/01/03)
+\bugonpage A155, the bottom six lines (12/10/18)
\ninepoint\noindent
-\hbox to\parindent{\bf\hss15.13.\enspace}%
-Yes, in severe circumstances. (1)~Previous footnotes might
- have left no room for any more footnotes on the page.
-(2)~If |\vadjust{\eject}| occurs on the same line\cutpar
+dividual symbols; \.{\char`\\left}$\,\ldots\,$\.{\char`\\right}
+constructions are treated as ``inner'' subformulas, which means that
+they will be surrounded by additional space in certain circumstances.
+All other subformulas are generally treated as ordinary symbols,
+whether they are formed by \.{\char`\\overline} or
+\.{\char`\\hbox} or \.{\char`\\vcenter} or
+by simply being enclosed in braces. Thus, \.{\char`\\mathord} isn't really
+a necessary part of the \TeX\ language; instead of typing
+`\.{\char`\$1\char`\\mathord,234\char`\$}' you can get the same
+effect from `\.{\char`\$1\char`\{,\char`\}234\char`\$}'.
-\bugonpage A364, lines 12--15 from the bottom (02/29/08)
+\bugonpage A158, line 19 (12/10/18)
-\ninepoint\noindent
-|\def\loggingall{\tracingcommands=2 \tracingstats=2|\par\noindent
-| \tracingpages=1 \tracingoutput=1 \tracinglostchars=1 |\par\noindent
-| \tracingmacros=2 \tracingparagraphs=1 \tracingrestores=1 |\par\noindent
-| \showboxbreadth=\maxdimen \showboxdepth=\maxdimen}|\par
-\noindent
-|\def\tracingall{\tracingonline=1 \loggingall}|
+\ninepoint\indent
+Inner\quad is an inner atom produced by
+ `\.{\char`\\left}$\,\ldots\,$\.{\char`\\right}';
-\bugonpage A364, line 5 from the bottom (02/29/08)
+\bugonpage A170, lines 18 and 19 (12/10/18)
\ninepoint\noindent
-|\def\fmtversion{3.141592653} % identifies the current format|
+subformulas delimited by \.{\char`\\left} and \.{\char`\\right}
+are treated as type~Inner. The following table is
+used to determine the spacing between pairs of adjacent atoms:
-\bugonpage A373, lines 4 and 5 from the bottom (01/02/14)
+\bugonpage A171, line 19 from the bottom (06/15/19)
\ninepoint\noindent
-And here's another solution (which may be faster, because
-token list registers can be expanded more quickly than macros
-on some implementations, using |\the|):
-
-\bugonpage A373, line 2 from the bottom (01/02/14)
+formula produces a result essentially equivalent to
+`\.{\char`\\left(}$\langle\,$subformula$\,\rangle$\.{\char`\\right)}',
+when\cutpar
-\ninepoint\indent
-|\loop \ifnum\m>0 \t=\expandafter{\the\t*}\advance\m-1 \repeat|
-
-\bugonpage A399, line 18, through what used to be page A400, line 14 (02/26/08)
+\bugonpage A215, line 16 from the bottom becomes two lines (10/13/20)
\ninepoint
-Finally, the reformatting of\/ |\box\footins| can be achieved easily with
-an elegant technique suggested by David Kastrup, using the following
-\TeX\ code within the |\output| routine:
-\begindisplay
-|\def\makefootnoteparagraph{\unvbox\footins|\cr
-| \baselineskip=\footnotebaselineskip \removehboxes}|\cr
-|\def\removehboxes{\unskip\setbox0=\lastbox|\cr
-| \ifhbox0{\removehboxes}\unhbox0 \else\noindent \fi}|\cr
-\enddisplay
-The key idea here is |\removehboxes|, a macro that has the magical ability to
-take a vertical box such as `|\vbox{\box1\box2\box3\removehboxes}|' and
-transform it into
-`|\vbox{\noindent\unhbox1\unhbox2\unhbox3}|'\kern-1pt,
-if\/ |\box1|, \kern-2pt|\box2|, and
-|\box3| are hboxes. Notice how |\removehboxes| introduces braces so that
-\TeX's {save stack} will hold all of the hboxes before they are unboxed. Each
-level of recursion in this routine uses one cell of input stack space and
-three cells of save stack space; thus, it is generally safe to do more than
-100 footnotes without exceeding \TeX's capacity.
-
-In our application there is no interline glue within |\box\footins|,
-so the |\unskip| command could be deleted from |\removehboxes|.
-
-Incidentally, the |\unskip| and |\lastbox| operations have running
-times of the approximate form
-$a+mb$, where $m$~is the number of items {efficiency} on the
-list preceding the glue or box that is removed. Hence |\removehboxes| has a
-running time of order $n^2$ when it removes $n$~boxes.
-But the constant~$b$ is so small that
-for practical purposes it's possible to think of\/ |\unskip| and
-|\lastbox| as almost instantaneous.
-
-\bugonpage A416, lines 18--22 (06/08/07)
-
-\ninepoint\noindent\beginlines
-|\def\leftheadline{\hbox to \pagewidth{\spaceskip=0pt|
-| \vbox to 10pt{}% strut to position the baseline|
-| \llap{\tenbf\folio\kern1pc}% folio to left of text|
-| \tenit\rhead\hfil}} % running head flush left|
-|\def\rightheadline{\hbox to \pagewidth{\spaceskip=0pt\vbox to 10pt{}%|
-\endlines
-
-\bugonpage A418, line 8 from the bottom (12/13/11)
-
-\ninepoint\noindent\beginlines
-| \def\\{#3} \advance\hsize by -18mm|
-\endlines
-
-\bugonpage A418, line 3 from the bottom (12/13/11)
-
-\ninepoint\noindent\beginlines
-| \halign{\line{\titlefont\hss##}\\#4\unskip\\}|
-\endlines
-
-\bugonpage A442, lines 7 and 8 from the bottom (01/03/14)
-
-\def\rule#1.{\smallskip\textindent{\bf#1.}\ignorespaces}
-\ninepoint\textindent{\bf 3.}%
-If the current item is a style change, set $C$ to the specified
-style and move on to the next item.
-
-\bugonpage A450, lines 14--16 from the bottom (12/19/02)
-
-\begingroup\def\\#1{$_{\kern\scriptspace#1}$}
-\indent\qquad{\tt s\\1tic
- \\1exp x\\3p pi\\3a \\2i\\1a i\\2al \\2id \\1do \\1ci \\2io ou\\2 \\2us}
-\medskip\noindent
-(where subscripts that aren't shown are zero), and this yields
-$$\centerline{%
-\tt.\\0s\\0u\\1p\\0e\\0r\\1c\\0a\\0l\\1i\\0f\\0r\\0a\\0g\\1i\\0l\\4i%
-\\0s\\1t\\2i\\0c\\1e\\0x\\3p\\2i\\3a\\0l\\2i\\1d\\0o\\1c\\2i\\0o\\2u\\2s\\0.}$$
-\endgroup
-
-\bugonpage A458, left column (01/11/07)
-
-\eightpoint\noindent
-|\\|, 38, {\it356}, {\it378}, {\it418}.
-
-\bugonpage A459, left column (03/17/06)
-
-\eightpoint\noindent
-angle brackets ( $\langle\,\rangle$ ), 59, {\it146--147}, 150,~156,\par
-\noindent\qquad $\underline{268}$, 420, 437;
- {\sl see also\/} |\langle|, |\rangle|.
+\item\bull Just after a token such as \.{\char`\$}$_3$
+that begins math mode, to see if
+another token of category 3 follows.
-\bugonpage A461, left column (02/24/08)
+\bugonpage A222, lines 21--23 (01/16/21)
-\eightpoint\noindent
-|\boxit|, 223, 331.
-
-\bugonpage A468, right column (02/26/08)
-
-\eightpoint\noindent
-interline glue, 78--79, $\underline{80}$, 104, 105, 125, 221,\par
-\noindent\qquad 245, 263, 281--282, 335, 352, 399, 409.
-
-\bugonpage A469, left column (02/26/08)
+\ninepoint
+\halign{\indent#\hfil&\quad(see Chapter #)\hfil\cr
+\.{\char`\\hbox}$\langle\,$box specification$\,\rangle$%
+ \.{\char`\{}$\langle\,$horizontal mode material$\,\rangle$\.{\char`\}}&12\cr
+\.{\char`\\vbox}$\langle\,$box specification$\,\rangle$%
+ \.{\char`\{}$\langle\,$vertical mode material$\,\rangle$\.{\char`\}}&12\cr
+\.{\char`\\vtop}$\langle\,$box specification$\,\rangle$%
+ \.{\char`\{}$\langle\,$vertical mode material$\,\rangle$\.{\char`\}}&12\cr
+}
-\eightpoint\noindent
-Kastrup, David Friedrich, 399.
+\bugonpage A222, lines 11--13 from the bottom (01/16/21)
-\bugonpage A470, left column (01/21/03)
+\ninepoint\noindent
+ter~15. The \.{\char`\\vsplit} operation
+is also explained in Chapter~15. In math modes an additional
+type of box is available:
+\.{\char`\\vcenter}$\langle\,$box specification$\,\rangle$%
+ \.{\char`\{}$\langle\,$vertical mode material$\,\rangle$\.{\char`\}}
+(see Chapter~17).
-\eightpoint\noindent
-|\loggingall|, $\underline{364}$.
+\bugonpage A232, line 14 (01/10/21)
-\bugonpage A477, right column (06/08/07)
+\ninepoint\noindent
+tabs outside; `\.{\char`\\global\char`\\settabs}' will not do what
+you might think it should.
-\eightpoint\noindent
-\llap{*}|\spaceskip|, 76, 274, {\it317}, {\it356}, {\it416}, 429.
+\bugonpage A233, lines 3--5 (04/27/15)
-\bugonpage A479, right column (09/11/07)
+\tenpoint\noindent
+Only two tabs are set in this case, because only two \.{\char`\&}'s
+appear in the sample line. \ (A sample line usually
+ends with~\.{\char`\&\char`\\cr}, as it does here,
+because text material between the last tab and \.{\char`\\cr}
+isn't used for anything.)
-\eightpoint\noindent
-|\undefined|, 350, 384.
+\bugonpage A252, lines 5--7 (12/25/20)
-\bugonpage A483, line 5 from the bottom (11/18/03)
+\ninepoint\noindent
+blank, and
+the footline is normally a centered page number, but you can specify any
+headline and footline that you want by changing the token lists
+\.{\char`\\headline} and \.{\char`\\footline}. For example,
-\eightpoint
-\rightline{\eightss--- HIERONYMUS HORNSCHUCH, %
- {\eightrm'}$O\mkern-1mu\rho\mkern1mu\vartheta o\mkern1mu %
- \tau\upsilon\pi o\gamma\mkern-1mu %
- \rho\alpha\phi\acute\iota\alpha\varsigma$\enspace(1608)}
+\bugonpage A253, lines 7--9 from the bottom (10/27/20)
- % volume B
-\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
-\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+\ninepoint\indent
+\.{\char`\\everypar} or \.{\char`\\errhelp}, except that \TeX\
+retains the begin-group symbol~`\.{\char`\{}' at the beginning
+and the end-group symbol~`\.{\char`\}}' at the end. These
+grouping characters
+help to keep the output routine from interfering with what
+\TeX\ was doing\cutpar
-\bugonpage Bv, page number change (12/27/11)
+\bugonpage A256, line 19 (08/28/15)
-\eightpoint\noindent[For consistency with Volumes A, C, and E, the
-preface now begins on page v instead of page~vii. This change was first
-made in the ninth printing.]
+\ninepoint\indent
+\tt \char`\\baselineskip=24pt \char`\\lineskiplimit=0pt
-\bugonpage Bv {(formerly Bvii)}, bottom two lines (01/06/14)
+\bugonpage A277, lines 9 and 10 from the bottom (08/26/17)
-\eightpoint\noindent
-all of those changes.
-I~now believe that the final bug was discovered on 14 September 2008
-and removed in version 3.14159265.
-The finder's fee has converged to \$327.68.
+\ninepoint\indent
+$\langle\,$hyphenation assignment$\,\rangle$\is
+ \.{\char`\\hyphenation}$\langle\,$filler$\,\rangle$%
+ \.{\char`\{}$\langle\,$hyphenations$\,\rangle$\.{\char`\}}\par
+\qquad \alt \.{\char`\\patterns}$\langle\,$filler$\,\rangle$%
+ \.{\char`\{}$\langle\,$patterns$\,\rangle$\.{\char`\}}
-\bugonpage Bxiii {(formerly Bxv)}, line $-7$ (12/27/11)
+\bugonpage A286, bottom two lines {(and affecting the top lines
+of page 287)} (08/26/17)
\ninepoint\noindent
-Format specs have no effect on the corresponding Pascal program, but they
-do influence\cutpar
+stands for zero or more \<assignment>
+commands other than \.{\char`\\setbox}, possibly with \<filler>.
+If the assignments are not followed by a \<character>, where
+\<character> stands\cutpar
-\hsize=35pc
+\bugonpage A287, lines 11--17 (04/22/20)
-\bugonpage B2, line 10 from the bottom (01/02/14)
+\ninepoint
+\textindent{$\bull$} \.{\char`\\discretionary}%
+ \<disc text>\<disc text>\<disc text>.\enskip
+A \<disc text> has the form
+`\<filler>\.{\char`\{}\<horizontal mode material>\.{\char`\}}',
+where the material is processed in restricted horizontal mode and
+should contain only fixed-width things.
+More precisely, the horizontal list formed by each
+\<disc text> must consist only of characters, ligatures,
+kerns, boxes, and rules; there should be no glue or penalty items, etc.
+This command appends a discretionary item to the current list; see
+Chapter~14 for the meaning of a discretionary item. The space factor is
+not changed.
+
+\bugonpage A292, lines 8--10 (04/22/20)
-\ninepoint\noindent\hskip10pt
-{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
-{\tt This\]is\]TeX,\]Version\]3.14159265\char'23}\quad
-$\{\,$printed when \TeX\ starts$\,\}$
+\ninepoint
+\textindent{$\bull$} \.{\char`\\discretionary}%
+ \<disc text>\<disc text>\<disc text>.\enskip
+This command has the same effect as in horizontal mode (see Chapter~25), but the
+third \<disc text> must produce an empty list.
-\bugonpage B3, new paragraph to follow line 9 (12/20/02)
+\bugonpage A299, line 11 from the bottom (11/01/20)
-\tenpoint\noindent\quad
-Incidentally, Pascal's standard \\{round} function can be problematical,
-because it disagrees with the IEEE floating-point standard.
-Many implementors have
-therefore chosen to substitute their own home-grown rounding procedure.
+\ninepoint\noindent
+is corrupted or was prepared for a different version of \TeX.
-\bugonpage B21, lines 33 and 34 (09/11/07)
+\bugonpage A305, bottom line (06/30/20)
-\def\Oct#1{\hbox{\rm\char'23\kern-.2em\it#1\/\kern.05em}} % octal constant
-\tenpoint\noindent
-$[\Oct{41}\to\Oct{46},\Oct{60}%
-\to\Oct{71},\Oct{136},\Oct{141}\to\Oct{146},\Oct{160}\to\Oct{171}]$ must be printable.
-Thus, at least 81 printable characters are needed.
+\ninepoint\indent
+\tt \char`\\setbox0=\char`\\hbox\char`\{\char`\#1\char`\}%
+\char`\\advance\char`\\dimen0 by -\char`\\wd0 \char`\}\rm.
-\bugonpage B109, line 16 (01/06/14)
+\bugonpage A309, line 2 becomes two lines (12/06/20)
\ninepoint\noindent
-\qquad\qquad{\bf begin} $\\{print\_esc}(\.{"csname"})$;
-$\\{print\_esc}(\.{"endcsname"})$;
-$\\{print\_char}(\.{"\ "})$;
-{\bf end}
+represent text entered from the user's terminal, or with
+`\.{<insert>}', when they
+represent text inserted during error recovery).
-\bugonpage B114, line 25 (09/11/07)
+\bugonpage A316, lines 17 and 18 from the bottom (09/03/15)
-\def\#{\hbox{\tt\char`\#}} % parameter sign
\ninepoint\noindent
-{\bf define} $\\{save\_index}(\#)\equiv\\{save\_stack}[\#].\\{hh}.\\{rh}$\quad
- $\{\,$\\{eqtb} location or token or \\{save\_stack} location$\,\}$
+(The next line must also not be too tall.)
+Here \.{\char`\\specialstar} is a box of height zero and depth
+\.{\char`\\strutdepth},
+and it puts an asterisk in the left margin:
-\bugonpage B139, line 20 (12/19/02)
+\bugonpage A320, lines 5--9 from the bottom (06/27/15)
\ninepoint\noindent
-\quad{\bf begin while} $(\\{state}=\\{token\_list}) \land
- (\\{loc}=\\{null}) \land (\\{token\_type}\ne\\{v\_template})$ {\bf do}\par
-\noindent\qquad\\{end\_token\_list};\quad$\{\,$conserve stack space$\,\}$
+{\bf 17.21.}\enspace Assigning \.{\char`\\delcode\char`\`\char`\{}
+would not work to allow `\.{\char`\\left\char`\{}', because
+the brace has category~1 and isn't a legal \<delim>.
+Allowing brace delimiters would be a bad idea because it would
+mess up other constructions, such as arguments to macros, and
+components of alignments. Moreover, a user who
+gets away with `\.{\char`\\left\char`\{}'
+is likely to try also `\.{\char`\\bigl\char`\{}', which
+fails miserably.
-\bugonpage B144, line 14 (09/11/07)
+\bugonpage A326, line 12 (08/26/17)
\ninepoint\noindent
-\quad\\{cat}: $0\to\\{max\_char\_code}$;\quad$\{\,$\\{cat\_code}(\\{cur\_char}), usually$\,\}$
+its natural width. The \.{\char`\\hbox} version also invokes
+\.{\char`\\everyhbox} and \.{\char`\\everymath}.
-\bugonpage B153, lines 2 and 3 (09/11/07)
+\bugonpage A329, line 3 of answer 20.7 (05/15/19)
-\tenpoint\noindent
-In fact, these three procedures account for almost every use of \\{get\_next}.
+\ninepoint\noindent
+the three tokens \.{!1}, \.{\char`\#2}, \.{[}$_1$; the
+\<replacement text> consists of the six tokens
+\.{\char`\{}$_1$, \.{\char`\#}$_6$,\cutpar
-\bugonpage B161, line 19 (12/19/02)
+\bugonpage A329, line 6 of answer 20.7 (05/15/19)
\ninepoint\noindent
-\quad{\bf while} $(\\{state}=\\{token\_list}) \land
- (\\{loc}=\\{null}) \land (\\{token\_type}\ne\\{v\_template})$ {\bf do}\par
-\noindent\qquad\\{end\_token\_list};\quad$\{\,$conserve stack space$\,\}$
+is otherwise irrelevant. Thus, `\.{\char`\\def\char`\\!!1\char`\#2\char
+ `\#[\char`\{\char`\#\char`\#]!!\char`\#2]}'
+would produce an essentially\cutpar
-\bugonpage B163, line 29 (12/19/02)
+\bugonpage A329, line 5 from the bottom of answer 20.7 (05/15/19)
-\ninepoint\noindent
-\quad$\\{long\_state}\gets\\{call}$;
-$\\{cur\_tok}\gets\\{par\_token}$;
-$\\{ins\_error}$;
-{\bf goto} \\{continue};
+\ninepoint\indent
+\.{!1<-x}
-\bugonpage B172, lines 2--6 from the bottom (09/11/07)
+\bugonpage A329, bottom line of answer 20.7 (05/15/19)
\ninepoint\noindent
-{\bf else if\/} $m=\\{vmode}$ {\bf then} \\{scanned\_result}(\\{prev\_depth})(\\{dimen\_val})\par\noindent
-\quad{\bf else} \\{scanned\_result}(\\{space\_factor})(\\{int\_val})
+final parameter in the parameter text;
+`\.{!1}' would have been rendered `\.{\char`\#1}'.
-\bugonpage B178, line 4 (09/11/07)
+\bugonpage A332, lines 13 and 14 (08/26/17)
\ninepoint\noindent
-\quad$\\{cur\_val}\gets0$;
-$\\{cur\_val\_level}\gets\\{int\_val}$;
-$\\{radix}\gets0$;
-$\\{cur\_order}\gets\\{normal}$;
+{\bf 21.10.}\enspace If you say
+`\.{\char`\{\char`\\let}\stretch
+\.{\char`\\the=0\char`\\edef}\stretch
+\.{\char`\\next}\stretch
+\.{\char`\{\char`\\write}\stretch
+\.{\char`\\cont}\stretch
+\.{\char`\{}\<token list>\.{\char`\}\char`\}\char`\\next}\stretch
+\.{\char`\}}',
+the \.{\char`\\write} will be exercuted after
+\.{\char`\\edef} expands everything except \.{\char`\\the}.
-\bugonpage B184, line 9 from the bottom (04/18/07)
+\bugonpage A332, bottom line (11/15/19)
-\tenpoint\noindent
-and denominator sum to 32768 or less.
-According to the definitions here, $\rm2660\,dd\approx1000.33297\,mm$;\kern-6.6pt\cutpar
+\ninepoint\indent\quad
+\tt \char`\\+\char`\&\char`\{\char`\\bf end\char`\};\char`\\cr \
+ \char`\%\ note that the semicolon isn't bold
-\bugonpage B206, line 14 (10/30/02)
+\bugonpage A342, lines 12 and 13 (08/14/20)
\tenpoint\noindent
-used input files like \.{webmac.tex}.
+of plain \TeX\ format; but some of them are primitive (built in),
+such as `\.{\char`\\par}' (end of
+paragraph), `\.{\char`\\noindent}' (beginning of
+non-indented paragraph), and `\.{\char`\/}' (italic\cutpar
-\bugonpage B206, new paragraph to follow line 22 (12/20/02)
+\bugonpage A345, lines 10--13 from the bottom (06/27/15)
-\tenpoint\noindent\quad
-The following procedures don't allow spaces to be part of
-file names; but some users seem to like names that are spaced-out.
-System-dependent changes to allow such things should probably
-be made with reluctance, and only when an entire file name that
-includes spaces is ``quoted'' somehow.
+\ninepoint\noindent
+Braces are used for grouping, when supplying
+arguments to macros; so they cannot also be used as math delimiters, or as
+arguments to macros such as \.{\char`\\big}. (One could change their catcodes
+to~12, and use some other pair of characters for grouping; but that
+would not be plain \TeX.)
-\bugonpage B227, new line to precede line 23 (09/11/07)
+\bugonpage A346, lines 10--22 (11/24/19)
\ninepoint\noindent
-{\bf if} $(\\{nw}=0)\lor(\\{nh}=0)\lor(\\{nd}=0)\lor(\\{ni}=0)$
- {\bf then} \\{abort};
+number identification.) \ (2)~The registers
+\.{\char`\\count255}, \.{\char`\\dimen255}, \.{\char`\\skip255},
+\.{\char`\\toks255}, and \.{\char`\\muskip255}
+are freely available in the same way.
+\ (3)~All assignments to the scratch registers whose numbers are
+1,~3, 5, 7, and~9 should be \.{\char`\\global}; all assignments to the
+other scratch registers (0,~2, 4, 6, 8,~255) should be non-\.{\char`\\global}.
+\ (This prevents the phenomenon of ``save stack buildup'' discussed
+in Chapter~27.)
+\ (4)~Furthermore, it's possible to
+use any register in a group, if you ensure that \TeX's grouping
+mechanism will restore the register when you're done with the group, and
+if you are certain that other macros will not make global assignments
+to that register when you need it. \ (5)~But when a register is used
+by several macros, or over long spans of time, it should be allocated
+by \.{\char`\\newcount}, \.{\char`\\newdimen}, \.{\char`\\newbox},
+etc. \ (6)~Similar remarks
+apply to input/output streams used by \.{\char`\\read} and \.{\char`\\write},
+to math families used by \.{\char`\\fam}, to sets of hyphenation rules used by
+\.{\char`\\language}, and to insertions (which require
+\.{\char`\\box}, \.{\char`\\count}, \.{\char`\\dimen},
+and \.{\char`\\skip} registers all having the
+same number).\looseness=-1
-\bugonpage B256, line 25 (12/20/02)
+\bugonpage A347, line 6 (06/30/20)
\ninepoint\noindent
-\qquad\\{cur\_glue}: \\{real};\quad$\{\,$glue seen so far$\,\}$\par\noindent
-\qquad\\{cur\_g}: \\{scaled};\quad$\{\,$rounded
- equivalent of \\{cur\_glue} times the glue ratio$\,\}$\par\noindent
-\quad{\bf begin} $\\{cur\_g}\gets0$;
- $\\{cur\_glue}\gets\\{float\_constant}(0)$;\par\noindent
-\quad$\\{this\_box}\gets\\{temp\_ptr}$;
- $\\{g\_order}\gets\\{glue\_order}(\\{this\_box})$;
- $\\{g\_sign}\gets\\{glue\_sign}(\\{this\_box})$;
+\tt \char`\\def\char`\\wlog\char`\{\char`\\immediate\char`\\write-1 \char`\}
+\ \char`\%\ this will write on log file (only)
-\bugonpage B258, line 5 from the bottom (12/20/02)
+\bugonpage A347, line 10 (11/24/19)
\ninepoint\noindent
-\quad{\bf begin} $g\gets\\{glue\_ptr}(p)$;
- $\\{rule\_wd}\gets\\{width}(g)-\\{cur\_g}$;
+\tt \char`\\outer\char`\\def\char`\\newmuskip\char`\{\char`\\alloc@3%
+\char`\\muskip\char`\\muskipdef\char`\\@cclv\char`\}
-\bugonpage B258, bottom line (12/20/02)
+\bugonpage A347, line 14 (11/24/19)
\ninepoint\noindent
-\qquad\qquad{\bf begin} $\\{cur\_glue}\gets\\{cur\_glue}+\\{stretch}(g)$;
- $\\{vet\_glue}(\\{float}(\\{glue\_set}(\\{this\_box}))*\\{cur\_glue})$;\par
-\noindent\qquad\qquad$\\{cur\_g}\gets\\{round}(\\{glue\_temp})$;
+\tt \char`\\outer\char`\\def\char`\\newtoks\char`\{\char`\\alloc@5%
+\char`\\toks\char`\\toksdef\char`\\@cclv\char`\}
-\bugonpage B259, line 4 (12/20/02)
+\bugonpage A350, lines 15 and 16 from the bottom (01/17/21)
\ninepoint\noindent
-\qquad\qquad{\bf begin} $\\{cur\_glue}\gets\\{cur\_glue}-\\{shrink}(g)$;
- $\\{vet\_glue}(\\{float}(\\{glue\_set}(\\{this\_box}))*\\{cur\_glue})$;\par
-\noindent\qquad\qquad$\\{cur\_g}\gets\\{round}(\\{glue\_temp})$;
+format; it shouldn't cost much for people to acquire all the
+fonts of plain \TeX\ in addition to the ones that they really want. Second, it
+is desirable on many computer systems to\cutpar
-\bugonpage B259, new line to precede old line 7 (12/20/02)
+\bugonpage A364, line 5 from the bottom (01/14/21)
\ninepoint\noindent
-\quad$\\{rule\_wd}\gets\\{rule\_wd}+\\{cur\_g}$;
+\tt \char`\\def\char`\\fmtversion\char`\{3.1415926535\char`\}
+\ \char`\%\ identifies the current format
-\bugonpage B260, line 21 (12/19/02)
+\bugonpage A370, lines 11 and 12 (08/26/17)
\ninepoint\noindent
-\qquad{\bf else begin} $\\{lx}\gets\\{lr}$ {\bf div} $(\\{lq}+1)$;
+close as possible to the ASCII conventions.
+\ (b)~Make sure that codes \oct{041}--\oct{046}, \oct{060}--\oct{071},
+\oct{136}, \oct{141}--\oct{146}, and \oct{160}--\oct{171} are present and that
+each unrepresentable in-\cutpar
-\bugonpage B261, line 9 (12/20/02)
+\bugonpage A373, lines 21 and 22 (01/17/21)
\ninepoint\noindent
-\qquad\\{cur\_glue}: \\{real};\quad$\{\,$glue seen so far$\,\}$\par\noindent
-\qquad\\{cur\_g}: \\{scaled};\quad$\{\,$rounded
- equivalent of \\{cur\_glue} times the glue ratio$\,\}$\par\noindent
-\quad{\bf begin} $\\{cur\_g}\gets0$;
- $\\{cur\_glue}\gets\\{float\_constant}(0)$;\par\noindent
-\quad$\\{this\_box}\gets\\{temp\_ptr}$;
- $\\{g\_order}\gets\\{glue\_order}(\\{this\_box})$;
- $\\{g\_sign}\gets\\{glue\_sign}(\\{this\_box})$;
+and \.{\char`\\if...\char`\\fi}
+tests, as well as special operations like \.{\char`\\the}
+and \.{\char`\\input}, while the
+latter category includes the primitive commands listed in Chapters~24--26.
+The expansion of\cutpar
-\bugonpage B262, line 10 from the bottom (12/20/02)
+\bugonpage A375, bottom three lines (06/30/20)
\ninepoint\noindent
-\quad{\bf begin} $g\gets\\{glue\_ptr}(p)$;
- $\\{rule\_ht}\gets\\{width}(g)-\\{cur\_g}$;
+|$$\generaldisplay$$| to be invoked, with |\eq| defined to be $\alpha$.
+Furthermore, when an equation number~$\beta$ is present, it should be stored
+in |\eqn|, and the test |\ifeqno| should be true.
+In such cases |\ifleqno| should distinguish |\leqno| from |\eqno|.
+Here\cutpar
-\bugonpage B262, line 6 from the bottom (12/20/02)
+\bugonpage A398, lines 4 and 5 (08/26/17)
-\ninepoint\noindent
-\qquad\qquad{\bf begin} $\\{cur\_glue}\gets\\{cur\_glue}+\\{stretch}(g)$;
- $\\{vet\_glue}(\\{float}(\\{glue\_set}(\\{this\_box}))*\\{cur\_glue})$;\par
-\noindent\qquad\qquad$\\{cur\_g}\gets\\{round}(\\{glue\_temp})$;
+\ninepoint\indent
+|\setbox2=\lastbox \setbox\footins=\vbox{\box2}|\par
+\smallskip\noindent
+since |\lastbox| will be the result of\/ |\rigidbalance|, which is an hbox.
-\bugonpage B262, line 2 from the bottom (12/20/02)
+\bugonpage A407, line 5 from the bottom (06/30/20)
-\ninepoint\noindent
-\qquad\qquad{\bf begin} $\\{cur\_glue}\gets\\{cur\_glue}-\\{shrink}(g)$;
- $\\{vet\_glue}(\\{float}(\\{glue\_set}(\\{this\_box}))*\\{cur\_glue})$;\par
-\noindent\qquad\qquad$\\{cur\_g}\gets\\{round}(\\{glue\_temp})$;
+\ninepoint\noindent\quad
+| \interlinepenalty5000\def\par{\endgraf\penalty5000 }}|
-\bugonpage B263, new line to precede old line 2 (12/20/02)
+\bugonpage A413, line 11 from the bottom (05/14/19)
-\ninepoint\noindent
-\quad$\\{rule\_ht}\gets\\{rule\_ht}+\\{cur\_g}$;
+\ninepoint\indent
+The computer file |texbook.tex| that generated {\sl The \TeX book\/} begins
+with a\cutpar
-\bugonpage B264, line 10 (12/19/02)
+\bugonpage A418, line 4 (05/14/19)
\ninepoint\noindent
-\qquad{\bf else begin} $\\{lx}\gets\\{lr}$ {\bf div} $(\\{lq}+1)$;
+\TeX\ commands
+that look like this in the file |texbook.tex|:
-\bugonpage B266, line 29 (09/11/07)
+\bugonpage A420, line 11 (06/30/20)
-\tenpoint\noindent
-$\\{total\_pages}\ge65536$, the \.{DVI} file will lie. And if
-$\\{max\_push}\ge65536$, the user deserves whatever chaos might ensue.
+\ninepoint\noindent
+|\def\bull{\vrule height.9ex width.8ex depth-.1ex \relax} % square bullet|
-\bugonpage B279, line 19 (09/11/07)
+\bugonpage A423, line 16 (06/30/20)
\ninepoint\noindent
-\qquad\\{p}: \\{pointer};\quad$\{\,$a new glue node$\,\}$
+| \vrule height6pt depth2pt width0pt \relax} % a strut for \insert\margin|
-\bugonpage B288, lines 18--20 (09/11/07)
+\bugonpage A445, lines 10--14 (12/10/18)
-\ninepoint\noindent
-\\{left\_noad}: {\bf begin} \\{print\_esc}(\.{"left"});
- \\{print\_delimiter}(\\{delimiter}($p$));\par\noindent
-\quad{\bf end};\par\noindent
-\\{right\_noad}: {\bf begin} \\{print\_esc}(\.{"right"});
- \\{print\_delimiter}(\\{delimiter}($p$));
+\ninepoint
+\textindent{\bf 15e.} Enclose the vbox that was constructed in Rule 15c or 15d by
+delimiters $(\lambda,\rho)$
+whose height plus depth is at least $\sigma_{20}$, if $C>T$, and at
+least $\sigma_{21}$ otherwise. Shift the delimiters up or down so that they are
+vertically centered with respect to the axis. Replace the generalized
+fraction by an Ord atom whose nucleus is the resulting sequence of three boxes
+($\lambda$, vbox, $\rho$). Go to rule~19.
-\bugonpage B290, line 12 (09/11/07)
+\bugonpage A446, the bottom three lines of Rule 19 become four lines (01/10/21)
\ninepoint\noindent
-\quad{\bf begin if\/} $s=\\{text\_size}$ {\bf then}
- \\{print\_esc}(\.{"textfont"});
+atom and the right boundary item to
+a Close atom. The entire resulting list now becomes the nucleus of an
+Inner atom. \ (All of the calculations in this step are done with
+$C$ equal to the starting style of the math list; style items in the
+middle of the list do not affect the style of the right boundary item.)
-\bugonpage B299, line 9 (12/20/02)
+\bugonpage A454, lines 17 and 18 from the bottom (04/13/20)
\ninepoint\noindent
-\qquad\qquad\quad{\bf if\/} $\\{type}(r)=\\{kern\_node}$ {\bf then}
- \quad$\{\,$unneeded italic correction$\,\}$
+of the process; the trial word consists of all the letters found in admissible
+items, up to a maximum of~63. Notice that all of these letters are in font~$f$.
-\bugonpage B332, line 6 (12/19/02)
+\bugonpage A458 and following, selected amendments to the index (01/18/21)
-\tenpoint\noindent
-is being scanned, or when no alignment preamble is active.
+\eightpoint
+|[1]| (progress report), 23, $\underline{119}$.\par
+|\aa| ( \aa\ ), {\it52}, $\underline{356}$.\par
+|\AA| ( \AA\ ), {\it52}, $\underline{356}$.\par
+\<disc text>, $\underline{287}$, 292.\par
+\<general text>, $\underline{276}$, 279, 280.\par
+\<horizontal mode material>, 278, 285, 287.\par
+integral signs, {\sl see\/} |\int|, |\oint|, |\smallint|.\par
+\<math mode material>, 287, 289--293.\par
+|\null|, 311, {\it312}, {\it316}, {\it332}, {\it335}, $\underline{351}$, {\it354}, {\it360}--{\it362}, {\it419}.\par
+|\o| ( \o\ ), {\it52}, $\underline{356}$.\par
+|\O| ( \O\ ), {\it52}, $\underline{356}$.\par
+programs, for computers, 38, 165, {\it234}.\par
+repeating templates, {\sl see\/} periodic preambles.\par
+replacement text, {\it200}--{\it204}, 212, 280, 300, 329.\par
+right delimiters, {\sl see\/} closings.\par
+struts, $\underline{82}$, 125, 131, 142, 155, 178, 245--247, 255, 329, 416, 422, 423.\par
+\<vertical mode material>, 278, 280--282, 290.
-\bugonpage B332, line 8 (12/19/02)
-\ninepoint\noindent
-\quad{\bf begin if\/} $(\\{scanner\_status}=\\{aligning}) \lor
- (\\{cur\_align}=\\{null})$ {\bf then}
+ % volume B
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\dts{\mathrel{.\,.}} % double dot, used only in math mode
-\bugonpage B336, line 11 from the bottom (10/13/03)
+\bugonpage Bv {(formerly Bvii)}, bottom two lines (01/15/21)
-\tenpoint\noindent
-$j-i+\\{min\_quarterword}$ in their
-\\{link} fields. The values of $w_{ii}$ were initialized to
-\\{null\_flag},\cutpar
+\eightpoint\noindent
+all of those changes.
+I~now believe that the final bug was discovered on 22 October 2020
+and removed in version 3.141592653. % on 12 January 2021
+The finder's fee has converged to \$327.68.
+
+\hsize=35pc
-\bugonpage B342, lines 5 and 6 (09/11/07)
+\bugonpage B2, line 10 from the bottom (01/15/21)
-\tenpoint
-In restricted horizontal mode, the \\{clang} part of \\{aux} is undefined;
-an over-cautious Pascal runtime system may complain about this.
+\ninepoint\noindent\hskip10pt
+{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
+{\tt This\]is\]TeX,\]Version\]3.141592653\char'23}\quad
+$\{\,$printed when \TeX\ starts$\,\}$
-\bugonpage B416, line 22 (02/29/08)
+\bugonpage B4, line 8 of \S7 (04/02/17)
-\ninepoint\noindent
-\qquad\qquad{\bf if\/} $\\{count}(t)=1000$ {\bf then} $t\gets\\{height}(r)$
-\par\noindent
-\qquad\qquad{\bf else} $t\gets\\{x\_over\_n}(\\{height}(r),1000)*\\{count}(t)$;
-\par\noindent
-\qquad\qquad\\{print\_scaled}$(t)$
+\tenpoint\noindent
+diagnostic information for \.{\char`\\tracingparagraphs},
+\.{\char`\\tracingpages}, and \.{\char`\\tracingrestores}.
-\bugonpage B438, lines 1--3 (09/11/07)
+\bugonpage B21, lines 33 and 34 (04/02/17)
+\def\Oct#1{\hbox{\rm\char'23\kern-.2em\it#1\/\kern.05em}} % octal constant
\tenpoint\noindent
-{\bf1035.\quad}If \\{link}(\\{cur\_q}) is nonnull when \\{wrapup} is invoked,
-\\{cur\_q} points to
-the list of characters that were consumed while building the ligature
-character~\\{cur\_l}.
+$[\Oct{41}\to\Oct{46},\Oct{60}%
+\to\Oct{71},\Oct{136},\Oct{141}\to\Oct{146},\Oct{160}\to\Oct{171}]$ must be printable.
+Thus, at least 80 printable characters are needed.
-\bugonpage B438, lines 19 and 20 (09/11/07)
+\bugonpage B28, lines 3 and 4 (04/02/17)
-\ninepoint\noindent
-\qquad\qquad\qquad{\bf begin if\/} $\\{link}(\\{cur\_q})>\\{null}$ {\bf then}
-\par\noindent
-\qquad\qquad\qquad\quad{\bf if\/} $\\{character}(\\{tail})=\\{qi}(
- \\{hyphen\_char}[\\{main\_f}])$ {\bf then} $\\{ins\_disc}\gets\\{true}$;
+\tenpoint\noindent
+not serious since we assume that this
+part of the program is system dependent.
-\bugonpage B438, line 4 from the bottom (09/11/07)
+\bugonpage B28, line 2 from the bottom (04/02/17)
-\ninepoint\noindent
-\quad$\\{link}(\\{tail})\gets\\{lig\_stack}$;
-$\\{tail}\gets\\{lig\_stack}$\quad$\{\,$\\{main\_loop\_lookahead} is next$\,\}$
+\ninepoint\noindent\quad
+{\bf var} $k$: $0\dts23$;\quad$\{\,$index to current digit; we assume
+ that $\vert n\vert<10^{23}\,\}$
-\bugonpage B439, line 3 (09/11/07)
+\bugonpage B35, line 2 of \S83 becomes two lines (06/27/20)
-\ninepoint\noindent
-\quad{\bf if\/} $\\{main\_p}>\\{null}$ {\bf then}
- \\{tail\_append}(\\{main\_p});\quad$\{\,$append a single character$\,\}$
+\ninepoint\noindent\quad
+{\bf loop begin} \\{continue}: {\bf if} $\\{interaction}\ne\\{error\_stop\_mode}$
+ {\bf then return};\par
+\noindent\qquad
+\\{clear\_for\_error\_prompt}; \ \\{prompt\_input}(\.{"?\]"});
-\bugonpage B440, new line to follow line 9 (09/11/07)
+\bugonpage B36, line 11 of \S84 (07/03/20)
-\ninepoint\noindent
-\quad{\bf if\/} $\\{cur\_r}=\\{non\_char}$ {\bf then goto}
- \\{main\_loop\_wrapup};
+\ninepoint\noindent\quad
+\.{"E"}: {\bf if} $\\{base\_ptr}>0$ {\bf then if}
+ $\\{input\_stack}[\\{base\_ptr}].\\{name\_field}\ge256$ {\bf then}
-\bugonpage B452, line 18 (28/03/11)
+\bugonpage B36, line 5 of \S85 becomes two lines (07/03/20)
-\noindent\\{hmode}, where the latter two are used to denote
- \.{\char`\\vbox} and \.{\char`\\hbox}, respectively.
+\ninepoint\noindent\quad
+{\bf if} $\\{base\_ptr}>0$ {\bf then}\par
+\noindent\qquad
+{\bf if} $\\{input\_stack}[\\{base\_ptr}].\\{name\_field}\ge256$ {\bf then}
+\\{print}(\.{"E\]to\]edit\]your\]file."}
-\bugonpage B455, lines 3 and 4 (09/11/07)
+\bugonpage B40, line 5 from the bottom (08/07/20)
-\ninepoint\noindent
-\quad{\bf if\/} $((\\{cur\_cmd}=\\{hskip})\land(\\{abs}(\\{mode})\ne\\{vmode}))
- \lor ((\\{cur\_cmd}=\\{vskip})\land(\\{abs}(\\{mode})=\\{vmode}))$ {\bf then}
+\ninepoint\noindent\qquad
+(\.{"Try\]to\]insert\]an\]instruction\]for\]me\](e.g.,\]%
+ \char`\`I\char`\\showlists\char`\'),"})
-\bugonpage B472, new paragraph to follow line 10 (12/20/02)
+\bugonpage B58, lines 2 and 3 of \S136 (10/11/20)
-\tenpoint\noindent\quad
-A devious user might force an \\{endv} command to occur just about anywhere;
-we must defeat such hacks.
+\tenpoint\noindent
+the values corresponding to `\.{\char`\\hbox\char`\{\char`\}}'.
+The \\{sub\_type}
+field is set to \\{min\_quarterword}, for historic reasons that are no
+longer relevant.
-\bugonpage B472, replacement for what used to be line 13 (12/20/02)
+\bugonpage B88, line 16 (10/22/20)
-\ninepoint\noindent
-\quad{\bf begin} $\\{base\_ptr}\gets\\{input\_ptr}$;
- $\\{input\_stack}[\\{base\_ptr}]\gets\\{cur\_input}$;\par\noindent
-\quad{\bf while} $(\\{input\_stack}[\\{base\_ptr}].\\{index\_field}\ne
- \\{v\_template}) \land{}$\par\noindent
-\quad\qquad $(\\{input\_stack}[\\{base\_ptr}].\\{loc\_field}=
- \\{null}) \land {}$\par\noindent
-\quad\qquad $(\\{input\_stack}[\\{base\_ptr}].\\{state\_field}=
- \\{token\_list})$ {\bf do} \\{decr}(\\{base\_ptr});\par\noindent
-\quad{\bf if\/} $(\\{input\_stack}[\\{base\_ptr}].\\{index\_field}\ne
- \\{v\_template}) \lor {}$\par\noindent
-\quad\qquad $(\\{input\_stack}[\\{base\_ptr}].\\{loc\_field}\ne
- \\{null}) \lor {}$\par\noindent
-\quad\qquad $(\\{input\_stack}[\\{base\_ptr}].\\{state\_field}\ne
- \\{token\_list})$ {\bf then}\par\noindent
-\qquad\\{fatal\_error}(\hbox{\tt\char'23(interwoven\]alignment\]preambles\]%
- are\]not\]allowed)\char'23});\par\noindent
-\quad{\bf if\/} $\\{cur\_group}=\\{align\_group}$ {\bf then}
+\tenpoint\noindent
+The mode is temporarily set to zero while processing \.{\char`\\write} texts.
+
+\bugonpage B102, lines 3 and following of \S241 (12/11/20)
-\bugonpage B505, line 19 (09/11/07)
+\tenpoint\noindent
+information, something special
+is needed. The program here simply assumes that suitable values appear in
+the global variables \\{sys\_time}, \\{sys\_day}, \\{sys\_month}, and
+\\{sys\_year} (which are initialized to noon on 4 July 1776,
+in case the implementor is careless).
+\smallskip
+\ninepoint\noindent
+{\bf procedure} \\{fix\_date\_and\_time};\par
+\noindent\quad{\bf begin}
+$\\{sys\_time}\gets12\ast60$; \
+$\\{sys\_day}\gets4$; \
+$\\{sys\_month}\gets7$; \
+$\\{sys\_year}\gets1776$;\quad
+$\{\,$self-evident truths$\,\}$\par
+\noindent\quad$\\{time}\gets\\{sys\_time}$;\quad
+ $\{\,$minutes since midnight$\,\}$\par
+\noindent\quad$\\{day}\gets\\{sys\_day}$;\quad$\{\,$day of the month$\,\}$\par
+\noindent\quad$\\{month}\gets\\{sys\_month}$;\quad$\{\,$month of the year$\,\}$\par
+\noindent\quad$\\{year}\gets\\{sys\_year}$;\quad$\{\,$Anno Domini$\,\}$\par
+\noindent\quad{\bf end};
+
+\bugonpage B103, replacement for \S246 (12/11/20)
+\tenpoint\noindent
+{\bf 246.}\quad Of course we had better declare a few more global variables,
+if the previous routines are going to work.
+\smallskip
\ninepoint\noindent
-\qquad(\.{"since\]the\]result\]is\]out\]of\]range."});\par\noindent
-\qquad{\bf if\/} $p\ge\\{glue\_val}$ {\bf then}
- \\{delete\_glue\_ref}(\\{cur\_val});\par\noindent
-\qquad\\{error}; {\bf return};
+$\langle\,$Global variables {\sevenrm\kern.5em13}$\,\rangle+\equiv$\par
+\noindent\\{old\_setting}: $0\dts\\{max\_selector}$;\par
+\noindent\\{sys\_time}, \\{sys\_day}, \\{sys\_month}, \\{sys\_year}: \\{integer};
+\quad$\{\,$date and time supplied by external system$\,\}$
-\bugonpage B506, line 1 (10/13/03)
+\goodbreak
+\bugonpage B122, lines 9 and 10 of \S291 (10/12/20)
-\tenpoint\noindent
-{\bf 1237.\quad}Here we use the fact that the consecutive codes
-$\\{int\_val}\to\\{mu\_val}$ and
-$\\{assign\_int}\to$\cutpar
+\tenpoint\noindent\quad
+The enclosing \.{\char'173} and \.{\char'175} characters of a macro
+definition are omitted, but an output routine
+will be enclosed in braces.
-\bugonpage B520, line 8 (06/25/04)
+\bugonpage B143, lines 2, 3, 4 become four lines (01/15/17)
\tenpoint\noindent
-says,
-for example, `\.{(preloaded format=plain 1982.11.19)}', showing the year,
-month, and day\cutpar
+routines that should be aborted, but we can sketch the
+ideas here: For a runaway definition or a runaway balanced text,
+we will insert a right brace; for a
+runaway preamble, we will insert a special \.{\char`\\cr} token and a right
+brace; and for a runaway argument, we will set \\{long\_state} to
+\\{outer\_call} and insert \.{\char`\\par}.
-\bugonpage B535, new line to follow line 11 (09/11/07)
+\bugonpage B188, line 8 (04/02/17)
\ninepoint\noindent
-\qquad{\bf if\/} $\\{last\_glue}\ne\\{max\_halfword}$ {\bf then}
- \\{delete\_glue\_ref}(\\{last\_glue});
+{\bf function} \\{str\_toks}$(b:\\{pool\_pointer})$: \\{pointer};\quad
+ $\{\,$converts \\{str\_pool}$[b\dts\\{pool\_ptr}-1]$ to a token list$\,\}$
-\bugonpage B578, new entry (06/04/06)
+\bugonpage B192, line 17 (10/22/20)
-\eightpoint\noindent
-Trabb Pardo, Luis Isidoro, 2.
+\ninepoint\noindent\quad
+{\bf label} \\{found}, \\{continue}, \\{done}, \\{done1}, \\{done2};
- % volume C
-\hsize=29pc
-\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
-\def\ddashto{\mathrel{\hbox{-\thinspace-\thinspace-\kern-.05em}}}
-\def\tension{\mathop{\rm tension}}
-\def\controls{\mathop{\rm controls}}
-\def\and{\,{\rm and}\,}
+\bugonpage B192, line 3 of \S474 (10/22/20)
-\bugonpage Cxi, line 4 (05/20/07)
+\ninepoint\noindent\qquad
+{\bf begin} \\{continue}: \\{get\_token};\quad$\{\,$set \\{cur\_cmd},
+ \\{cur\_chr}, \\{cur\_tok}$\,\}$
-\line{\hbox to\parindent{\bf\hbox to 1em{\hss27}\hss}%
- \rm Recovery from Errors\leaders\hbox to 20pt{\kern13pt.\hss}\hfil
- \hbox to 2em{\hss223}}
+\bugonpage B193, line 4 of \S476 (05/20/20)
-\bugonpage C11, line 11 (10/11/01)
+\ninepoint\noindent\quad
+{\bf if} $\\{cur\_tok}<\\{left\_brace\_limit}$ {\bf then}
-\noindent
-the area below the bar to the area above it equal to
-$(\sqrt5+1)/2\approx1.61803$, the\cutpar
+\bugonpage B193, line 10 of \S476 becomes two lines (10/22/20)
-\bugonpage C29, illustration for exercise 4.11 (09/09/01)
+\ninepoint\noindent\qquad
+\\{help2}(\.{"I\char`\'m\]going\]to\]ignore\]the\]\#\]sign\]you\]just\]used,"})\par
+\noindent\qquad
+(\.{"as\]well\]as\]the\]token\]that\]followed\]it."});
+\\{error}; {\bf goto} \\{continue};
-\noindent
-[points 2 and 5 should not be labeled twice]
+\bugonpage B196, line 5 from the bottom (02/17/18)
-\bugonpage C32, line 5 from the bottom (01/04/14)
+\ninepoint\noindent\qquad\quad
+\\{help1}(\.{"This\]\char`\\read\]has\]unbalanced\]braces."});
+$\\{align\_state}\gets1000000$;
+$\\{limit}\gets0$;
+\\{error};
-\noindent
-\hbox to\parindent{\hfil\sevenrm20\ \ }%
-| penpos1(stem,15); penpos2(.9stem,12); penpos3(stem,10);|
+\bugonpage B199, lines 1--3 of \S494 (10/25/20)
-\bugonpage C36, line 5 from the bottom (01/05/14)
+\tenpoint\noindent
+{\bf 494.} \ \ Here is a procedure that ignores text until coming to an \.{\char`\\or},
+\.{\char`\\else}, or \.{\char`\\fi} at the current level
+of $\.{\char`\\if}\ldots\.{\char`\\fi}$
+nesting. After it has acted, \\{cur\_chr} will indicate the token that
+was found, but \\{cur\_tok} will not be set (because this makes the
+procedure run faster).
+
+
+\bugonpage B214, lines 2--6 of \S536 (12/11/20)
+
+\ninepoint\noindent\quad
+{\bf begin} \\{wlog}(\\{banner});
+\\{slow\_print}(\\{format\_ident});
+\\{print}(\.{"\]\]"});
+\\{print\_int}(\\{sys\_day});
+\\{print\_char}(\.{"\]"});\par
+\noindent\quad
+$\\{months}\gets\.{\char`\'JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC\char`\'}$;\par
+\noindent\quad
+{\bf for} $k\gets3\ast\\{sys\_month}-2$ {\bf to} $3\ast\\{sys\_month}$
+{\bf do} \\{wlog}(\\{months}[$k$]);\par
+\noindent\quad
+\\{print\_char}(\.{"\]"});
+\\{print\_int}(\\{sys\_year});
+\\{print\_char}(\.{"\]"});
+\\{print\_two}(\\{sys\_time} {\bf div} 60);
+\\{print\_char}(\.{":"});\par
+\noindent\quad
+\\{print\_two}(\\{sys\_time} {\bf mod} 60);
+
+\bugonpage B214, line 2 of \S537 becomes two lines (10/29/20)
-\noindent
-line~12, where it
-says `|x1l|', not `|x11|' or~`|xll|'); be sure to distinguish between\cutpar
+\tenpoint\noindent
+command is being processed.
+Beware: For historic reasons, this code foolishly conserves a tiny bit
+of string pool space; but that can confuse the interactive `\.E' option.
-\bugonpage C55, lines 5 and 6 (01/05/14)
+\bugonpage B214, bottom line (10/29/20)
\ninepoint\noindent
-suffixed or subscripted.
-Thus, the syntax rule for \<variable>
-should actually be replaced by a slightly more complicated pair of rules:
+{\bf if} $\\{name}=\\{str\_ptr}-1$ {\bf then}
+\ $\{\,$conserve string pool space (but see note above)$\,\}$
+\bugonpage B219, lines 18--20 of \S545 (09/19/19)
-\bugonpage C129, line 16 (02/21/08)
-
-\ninepoint\beginsyntax
-<path subexpression>\is<path expression not ending with direction specifier>\kern-5pt\null
-\endsyntax
-
-\bugonpage C130, lines 13--15 from the bottom (09/13/03)
-
-\ninepoint\noindent
-point but not after it, the
-nonempty one is duplicated in a similar way. A~basic path join
-`$\to\controls u\and v\to$' specifies explicit control points that
-override any direction specifiers that may immediately surround it.
+\tenpoint\noindent
+so-called boundary character of this font;
+the value of \\{next\_char} need not lie between \\{bc} and~\\{ec}.
+If the very last instruction of the \\{lig\_kern} array has $\\{skip%
+\_byte}=255$,
+there is a special ligature/kerning program for a boundary character at the
+left, beginning at location $256\ast\\{op\_byte}+$\cutpar
-\bugonpage C137, lines 5--7 from the bottom (02/21/08)
+\bugonpage B282, line 1 {(and change lines 20--23 accordingly)} (04/02/17)
-\danger Let's conclude this chapter by applying what we've learned about
-paths to a real-life example. The {\sl Journal of Algorithms\/} was
-published for many years by Academic Press, and its cover page carried the
-following logo, which was designed\cutpar
-\enddanger
+\tenpoint\noindent
+{\bf 682.} Each portion of a formula is classified as Ord, Op, Bin, Rel, Open,
+Close, Punct, or Inner, for\cutpar
-\bugonpage C137, bottom two lines (02/21/08)
+\bugonpage B299, line 4 from the bottom of \S722 (10/06/20)
-\ninepoint\noindent
-A \MF\ program to produce this logo made it possible for the editors
-of the journal to use it on letterheads in their correspondence.
-Here is one way to do that job,\cutpar
-% actually the MS now says "to write that program," and the
-% correction therefore extends to page C138
+\ninepoint\noindent\qquad\quad
+{\bf begin} \\{char\_warning}(\\{cur\_f}, \\{qo}(\\{cur\_c}));
+$\\{math\_type}(a)\gets\\{empty}$;
+$\\{cur\_i}\gets\\{null\_character}$;
-\bugonpage C156, line 15 from the bottom (09/09/01)
+\bugonpage B318, lines 16 and 17 of \S761 become one (03/25/19)
\ninepoint\noindent
-be the values they had upon entry to the group.)
+\\{fraction\_noad}: $s\gets\\{fraction\_noad\_size}$;
-\bugonpage C159, lines 12--15 (12/01/06)
+\bugonpage B333, line 5 of \S793 becomes two lines (01/10/20)
-\begintt
-def --- = ..tension infinity.. enddef;
-\endtt
-it makes `$z_1\ddashto z_2$' become
-`$z_1\to\tension\\{infinity}\to z_2$'.
-The {replacement text} can be any sequence of tokens not including
-`{\bf enddef}\kern1pt'; or it can include entire subdefinitions like
-`{\bf def}~$\ldots$~{\bf enddef}\kern1pt', according to certain rules
-that we shall explain later.
+\ninepoint\noindent\quad
+$\\{cur\_loop}\gets\\{link}(\\{cur\_loop})$;
+$\\{link}(p)\gets\\{new\_glue}(\\{glue\_ptr}(\\{cur\_loop}))$;\par
+\noindent\quad
+$\\{subtype}(\\{link}(p))\gets\\{tab\_skip\_code}+1$;
-\bugonpage C171, line 16 from the bottom (06/18/02)
+\bugonpage B348, insert a new line after line 5 of \S826 (01/15/17)
-\tenpoint
-\<loop>\is\<loop header>|:|\<loop text> {\tt endfor}
+\ninepoint\noindent\qquad
+{\bf stat if} $\\{tracing\_paragraphs}>0$ {\bf then}
+\\{end\_diagnostic}(\\{true}); \ {\bf tats}
-\bugonpage C179, line 7 from the bottom (09/09/01)
+\bugonpage B348, insert a new line to be the seventh line after the previous change (01/15/17)
-\ninepoint\noindent
-next time \MF\ gets to the end of an input line, it will stop reading
-from the\cutpar
+\ninepoint\noindent\qquad
+{\bf stat if} $\\{tracing\_paragraphs}>0$ {\bf then}
+\\{begin\_diagnostic}; \ {\bf tats}
-\bugonpage C180, lines 14--16 (04/25/03)
+\bugonpage B377, line 6 (10/31/20)
\ninepoint\noindent
-digits should be a
-file name that works in essentially the same way on all installations of
-\MF\kern-.03em\null. Uppercase letters are considered to be distinct from their
-lowercase counterparts, on many systems.
+\\{hn}: $0\dts64$; \ $\{\,$the number of positions occupied in \\{hc};
+ not always a \\{small\_number}$\,\}$
-\bugonpage C180, new line to be inserted 4 from the bottom (06/25/04)
+\bugonpage B417, mini-index (04/02/17)
-\ninepoint\item\bull
-When \MF\ is reading the symbolic tokens to be saved by {\bf save}.
+\eightpoint\noindent
+The entry `\\{height}, \S981.' here and on many later
+odd-numbered pages should be `$\\{height}=\rm macro$, \S135.'
-\bugonpage C203, line 12 from the bottom (04/25/03)
+\bugonpage B522, line 3 of \S1306. (10/25/20)
-\ninepoint\hbox to 237pt{point~3 at the right of the triangle
-might digitize into a}
+\tenpoint\noindent
+to be in the range $a\le x\le b$.
+System error messages should be suppressed when undumping.
-\bugonpage C213, line 26 (02/21/08)
+\bugonpage B533, lines 5--8 of \S1333. (10/15/20)
-\ninepoint\beginsyntax
-<path subexpression>\is<path expression not ending with direction specifier>\kern-5pt\null
-\endsyntax
+\tenpoint\noindent
+loop.
+(Actually there's one way to get error messages, via \\{prepare\_mag};
+but that can't cause infinite recursion.)\par
+\noindent\quad
+If \\{final\_cleanup} is bypassed, this program doesn't bother to
+close the input files that may still be open.
-\bugonpage C226, line 23 (02/21/08)
+\bugonpage B533, line 12 of \S1333. (11/29/20)
-\ninepoint\noindent following nineteen things will be mentioned:
+\ninepoint\noindent\quad
+{\bf begin} $\langle\,$Finish the extensions{\sevenrm\kern.5em1378}$\,\rangle$;
+$\\{new\_line\_char}\gets-1$;
-\bugonpage C226, new line to be second from the bottom (02/21/08)
+\bugonpage B534, line 6 of \S1335. (11/29/20)
-\ninepoint\indent|independent variables|\qquad(distinct numeric variables)
+\ninepoint\noindent\quad
+{\bf begin} $c\gets\\{cur\_chr}$;
+{\bf if} $c\ne1$ {\bf then} $\\{new\_line\_char}\gets-1$;
-\bugonpage C236, line 7 from the bottom (01/05/14)
+\bugonpage B537, line 18 of \S1338 becomes two lines (10/05/20)
-\ninepoint\noindent
-\hbox to\parindent{\hss\bf 7.4.\enspace}False.
-After `|newinternal x;|' you can't say `|x|\<tag>' in a \<suffix list>.
+\ninepoint\noindent\quad
+{\bf begin} \\{clear\_terminal};\par
+\noindent\quad
+{\bf loop}
-\bugonpage C246, line 12 (02/21/08)
+\bugonpage B537, lines 11 and 12 from the bottom of \S1338
+ become three lines (04/02/17)
-\ninepoint\noindent
-is performed whenever \MF\ uses the last two alternatives
-in the definition\cutpar
+\ninepoint\noindent\qquad\qquad
+{\bf begin goto} \\{breakpoint};\par
+\noindent\qquad\qquad\quad$\{\,$go to every declared label at least once$\,\}$\par
+\noindent\qquad\quad\\{breakpoint}: $m\gets0$;
+ \.{@\char`\{\char`\'BREAKPOINT\char`\'@\char`\}}
-\bugonpage C250, lines 13 and 14 (02/19/08)
+\bugonpage B600, the bottom five lines (05/14/19)
-\ninepoint\noindent\hbox to\parindent{\bf\hss19.3.\enspace}%
-Yes, if and only if $n-{1\over2}$ is a nonnegative even integer.
-\ (Because ambiguous values are rounded upwards.)
+\tenpoint\noindent
+they occupy in a typical production system
+(executable code size for dark blocks, global data size for light blocks).
+In this way the chart indicates a total of about
+$12\times22=264${\ninerm K} bytes of memory, plus
+$12\times10=120${\ninerm K} for the
+dynamic memory region not shown explicitly. The dynamic memory
+is often considerably larger in practice, because it is desirable to
+accommodate large macro packages and large pages.
-\bugonpage C250, line 12 from the bottom (04/25/03)
-\ninepoint\noindent
-following \<boolean primary>.)
+ % volume C
+\hsize=29pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\dashto{\mathrel{\hbox{-\thinspace-\kern-.05em}}}
+\def\ddashto{\mathrel{\hbox{-\thinspace-\thinspace-\kern-.05em}}}
+\def\tension{\mathop{\rm tension}}
+\def\controls{\mathop{\rm controls}}
+\def\and{\,{\rm and}\,}
-\bugonpage C286, line 25 (09/09/01)
+\bugonpage Cx, line 4 from the bottom (06/14/20)
-\ninepoint\noindent
-problem; it would simply have put |ENDFOR| into the
-replacement text of |asts|, because\cutpar
+\count255=1
+\def\diamondleaders{\global\advance\count255 by 1
+ \ifodd\count255 \kern-10pt \fi
+ \leaders\hbox to 20pt{\ifodd\count255 \kern13pt \else\kern3pt \fi
+ .\hss}}
+\line{\strut
+ \hbox to\parindent{\bf\hbox to 1em{\hss20}\hss}%
+ \rm More About Macros\diamondleaders\hfil\hbox to 2em{\hss175}}
-\bugonpage C289, line 7 (09/09/01)
+\bugonpage C39, lines 10 and 11 become three lines (07/04/20)
-\vskip-6pt\ninepoint\begintt
-if if pair x: x>(0,0) else: false fi: A else: B fi.
-\endtt
+\tenpoint\noindent
+that has already been designed. All you'll see is
+`|(io.mf| |The| |letter| |O| |[79])|' or possibly only `|(io.mf| |[79])|',
+followed by~`|*|'. Now the fun starts: You should type
-\bugonpage C292, line 10 from the bottom (09/09/01)
+\bugonpage C68, lines 9, 28, 35, 36, 38 (11/11/17)
-\ninepoint\noindent
-be known by saying `{\bf if\/} known $p-q$: $p=q$ {\bf else}:~{\bf false}
-{\bf fi}'; transforms could be handled\cutpar
+\ninepoint
+\halign{\indent\hbox to 160pt{\tt#\hfil}&\tt#\hfil\cr
+uniformdeviate -100&-36.1628\cr
+z slanted 1/6&(0.16667y+x,y)\cr
+(a,b)zscaled(3,4)&(-4b+3a,3b+4a)\cr
+(a,b)zscaled dir 30&(-0.5b+0.86603a,0.86603b+0.5a)\cr
+(a,b)dotprod(3,4)&4b+3a\cr
+}
+
+\bugonpage C72, lines 4--18 (07/16/20)
+
+\ninepoint\noindent
+\beginsyntax
+<numeric atom>\is<numeric variable>
+ \alt<numeric token primary>
+ \alt[(]<numeric expression>[)]
+ \alt[normaldeviate]
+ \alt[length]<string primary>
+ \alt[length]<path primary>
+ \alt[length]<pair primary>
+ \alt[angle]<pair primary>
+ \alt[xpart]<pair primary>
+ \alt[ypart]<pair primary>
+ \alt<numeric operator><numeric primary>
+<numeric token primary>\is<numeric token>[/]<numeric token>
+ \alt<numeric token not followed by %
+ `{\tt/}$\thinspace\langle$numeric token$\rangle$'\thinspace>
+<numeric primary>\is<numeric atom not followed by {[\char'133]<expression>[,]}>
+ \alt<numeric atom>[\char'133]<numeric expression>%
+ [,]<numeric expression>[\char'135]
+\endsyntax
-\bugonpage C293, line 5 from the bottom (04/25/03)
+\bugonpage C76, lines 8--16 from the bottom (11/11/17)
-\ninepoint\noindent
-given angle~$\phi$. We can consider
-the common angle~$\theta$ of $z_{1r}-z_{1l}$ and $z_{0r}-z_{0l}$ to be\cutpar
+\newdimen\longesteq
+\setbox0=\hbox{\indent$z_{12}-z_{11}=z_{14}-z_{13}$\quad}
+\longesteq=\wd0
+\tenpoint\noindent \hangindent\longesteq \hangafter0
+tom edge of the type.
+\ (With plain \MF's {\bf beginchar} each
+character has a ``bounding box'' that runs from $(0,h)$
+at the upper left and $(w,h)$ at the upper right to $(0,-d)$ and~$(w,-d)$
+at the lower left and lower right; variable $d$ represents the depth of
+the type. The values of $w$, $h$, and~$d$ might change from character to
+character, since the individual pieces of type need not have the same size
+in a computer-produced font.)
-\bugonpage C315, line 15 from the bottom (04/25/03)
+\bugonpage C80, line 14 (06/13/20)
-\ninepoint\noindent
-`b' was shipped out.) \ The second letter,~`o', is placed
-in a second little box adjacent\cutpar
+\tenpoint\indent
+\\{penpos}\<suffix>(\<unknown>,\thinspace\<known>).
-\bugonpage C325, bottom line (02/29/08)
+\bugonpage C83, line 16 (06/13/20)
-\rightline{\eightss--- CAROLUS LINN\AE US,
- {\eightssi Philosophia Botanica\/}\enspace(1751)}
+\ninepoint\indent
+|### 0.5a=-c-0.5b+1.5|
-\bugonpage C332, line 4 from the bottom (04/25/03)
+\bugonpage C83, line 19 (06/13/20)
\ninepoint\noindent
-(The proofsheet resolution will be 50 pixels per inch, because {\it cheapo\/}
-has 200 pixels per\cutpar
-
-\bugonpage C346, left column (06/18/02)
-
-\eightpoint\noindent
-\llap{*}|:|, 169, 171, 317--319.
-
-\bugonpage C346, right column (07/09/01)
+the only
+dependent variable is now $d$, which equals $0.5c+0.75b+0.75$. \ (This is\cutpar
-\eightpoint\noindent
-\llap{*}|angle|, {\it29}, {\it67}, $\underline{72}$, {\it107},
-{\it135}, 211, {\it238}.
+\bugonpage C96, line 13 from the bottom (10/31/20)
-\bugonpage C346, right column (10/04/04)
+\tenpoint\noindent
+illustrates the
+use of $u\0$, $s\0$, $\\{ht}\0$, \\{logo\_pen}, \\{leftstemloc}, $o$,
+\\{xgap}, and \\{barheight}:
-\eightpoint\noindent
-arccosine, arcsine, arctangent, {\sl see\/} |angle|.
+\bugonpage C106, lines 19--21 (07/03/20)
-\bugonpage C351, right column (02/21/08)
+\ninepoint\noindent
+pixels. \ (Some typesetting
+systems use both of these device-dependent amounts to alter their current
+position on a page, just after typesetting each character. Other systems,
+like typical |dvi| software associated with \TeX, assume that $\\{chardy}=0$
+but use \\{chardx}\cutpar
-\eightpoint\noindent
-independent variables, $\underline{81}$--$\underline{83}$, 88, 224, 226.
+\bugonpage C113, lines 5--11 from the bottom (07/20/20)
-\bugonpage C352, right column (02/29/08)
+\def\cycle{\hbox{\rm cycle}}
+\ninepoint\noindent
+\begindisplay
+$s\0:=5\\{pt}\0$; \ {\bf define\_pixels}$(s)$; \ \% side of the square\cr
+$z_1=(0,0)$; \ $z_2=(s,0)$; \ $z_3=(0,s)$; \ $z_4=(s,s)$;\cr
+{\bf for} $k=1$ {\bf upto} 4:
+ $z[k+4]=z[k]+({2\over3}s,{1\over3}s)$; \ {\bf endfor}\cr
+{\bf pickup pencircle} scaled $.4\\{pt}$; \
+{\bf draw} $z_5\dashto z_6\dashto z_8\dashto z_7\dashto \cycle$;\cr
+{\bf pickup pencircle} scaled $1.6\\{pt}$; \
+{\bf erase draw} $z_2\dashto z_4\dashto z_3$;\cr
+{\bf pickup pencircle} scaled $.4\\{pt}$; \
+{\bf draw} $z_1\dashto z_2\dashto z_4\dashto z_3\dashto \cycle$;\cr
+{\bf for} $k=1$ {\bf upto} 4:
+ {\bf draw} $z[k]\dashto z[k+4]$; \ {\bf endfor}.\cr
+\enddisplay
-\eightpoint\noindent
-Linn\'e, Carl von (= Linn\ae us, Carolus), 325.
+\bugonpage C114, line 7 (07/20/20)
-\bugonpage C355, right column (02/29/08)
+\ninepoint\indent
+{\bf for} $k=0$ {\bf upto} 4: \ $z[k]=\\{center}+(\\{radius},0)$
+ rotated$(90+{360\over5}k)$; \ {\bf endfor}
-\eightpoint\noindent
-\llap{*}|save|, $\underline{155}$--$\underline{156}$, {\it160}, 173,
- {\it178}, 180, 218,\par
-\noindent\qquad{\it236}, {\it244}, {\it296}, 299.
+\bugonpage C128, lines 13 and 14 (06/13/20)
- % Volume D
-\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
-\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+\ninepoint\noindent
+changed. Plain \MF\ has a {\bf tensepath} operation
+that does this. For example, {\bf tensepath}~\\{unitsquare}~$=$
+$(0,0)\ddashto(1,0)\ddashto(1,1)\ddashto(0,1)\ddashto\cycle$.
-\bugonpage Dv, page number change (12/27/11)
+\bugonpage C136, lines 18 and 19 (07/17/20)
-\eightpoint\noindent[For consistency with Volumes A, C, and E, the
-preface now begins on page v instead of page~vii. This change was first
-made in the sixth printing.]
+\ninepoint\noindent
+only
+about 0.28 with respect to the initial and final directions; since \MF\ insists
+that tensions be at least~0.75, this anomalous path could never have arisen
+if the control\cutpar
-\bugonpage Dv {(formerly Dvii)}, bottom two lines (01/06/14)
+\bugonpage C155, line 7 (10/07/20)
-\eightpoint\noindent
-corporates all of those changes.
-I~now believe that the final bug was discovered on 03~June 2008,
-and removed in version 2.7182818.
-The finder's fee has converged to \$327.68.
+\tenpoint\indent
+\<program>\is\<statement list>\<statement>\thinspace|end|
-\bugonpage Dxiii {(formerly Dxv)}, line $-7$ (12/27/11)
+\bugonpage C160, lines 7--9 (06/25/20)
\ninepoint\noindent
-Format specs have no effect on the corresponding Pascal program, but they
-do influence\cutpar
-
-\hsize=35pc
-\parindent=1em
+might produce a transcript
+that includes the following diagnostic information:
+\begintt
+rotatedaround(EXPR0)(EXPR1)->
+ shifted-(EXPR0)rotated(EXPR1)shifted(EXPR0)
+\endtt
-\bugonpage D2, line $-17$ (01/03/14)
+\bugonpage C165, lines 5--7 from the bottom (11/11/17)
\ninepoint\noindent
-{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
-{\tt This\]is\]METAFONT,\]Version\]2.7182818\char'23}\quad
-$\{\,$printed when \MF\ starts$\,\}$
-
-\bugonpage D2, lines 4 and 5 from the bottom (12/23/02)
+(i.e., parameters in parentheses),
+then we name zero or one or two undelimited parameters.
+Then comes an `$=$'~sign,
+followed by the replacement text, and {\bf enddef}. The `$=$'~sign might also
+be~`$:=$'\thinspace; both mean the same thing.
-\tenpoint\noindent
-types; there are no `{\bf var}' parameters, except in the case of files
-or in the system-dependent \\{paint\_row} procedure;
-there are no tag fields on variant records; there are no \\{real} variables;
-no procedures are declared local to other procedures.)
-
-\bugonpage D16, new paragraph to follow line 26 (06/25/04)
-
-The first line is special also because it may be read before \MF\ has
-input a base file. In such cases, normal error messages cannot yet
-be given. The following code uses concepts that will be explained later.
-(If the Pascal compiler does not support non-local {\bf goto}, the
-statement `{\bf goto} \\{final\_end}' should be replaced by something that
-quietly terminates the program.)
-
-\bugonpage D22, line 26 (09/11/07)
-
-\noindent
-ASCII codes $[\Oct{60}\to\Oct{71},%
-\Oct{136},\Oct{141}\to\Oct{146}]$
-must be printable.
+\bugonpage C171, lines 18--20 (08/16/20)
-\bugonpage D31, line 29 (06/25/04)
+\ninepoint\indent
+Chapter~14's syntax rules for
+\<path primary>, via \<pair primary>.
+A pair expression is not considered to be
+of type {\bf path} unless the path interpretation is the only~possibility.
-\noindent
-This is the only nontrivial {\bf goto} statement in the
-whole program. It is used when there is no\cutpar
+\bugonpage C176, line 7 from the bottom (07/09/20)
-\bugonpage D42, replacement for lines 8--13 (12/23/02)
+\ninepoint\indent
+\quad {\bf if} |@#|$(\\{x\_})\colon\ \\{tx\_} \ \hbox{\bf else}\colon\
+ \\{fx\_}\ \hbox{\bf fi}$
+ :=\ \\{x\_}\thinspace; {\bf endfor}
-\tenpoint\noindent\quad
-Notice that if 64-bit integer arithmetic were available,
-we could simply compute $(2^{29}*p+\nobreak q)\allowbreak\,
-\hbox{\bf div}\,(2*q)$.
-But when we are restricted to Pascal's 32-bit arithmetic we
-must either resort to multiple-precision maneuvering
-or use a simple but slow iteration. The multiple-precision technique
-would be about three times faster than the code adopted here, but it
-would be comparatively long and tricky, involving about sixteen
-additional multiplications and divisions.
-
-\bugonpage D43, line 20 (12/23/02)
+\bugonpage C180, line 3 from the bottom (06/24/20)
-\tenpoint\noindent
-language or 64-bit substitute is advisable.
+\ninepoint\indent
+`$=$' or `$:=$' following {\bf let}.
-\bugonpage D44, lines 24--26 (12/23/02)
+\bugonpage C187, line11 from the bottom (07/12/20)
-\tenpoint\noindent\quad
-Once again it is a good idea to use 64-bit arithmetic if
-possible; otherwise \\{take\_scaled} will use more than 2\% of the running time
-when the Computer Modern fonts are being generated.
+\ninepoint\indent\qquad
+\alt|substring|\thinspace\<pair expression>\thinspace|of|\thinspace
+ \<string primary>
-\bugonpage D58, line 16 from the bottom (06/25/04)
+\bugonpage C189, line 14 (06/13/20)
\ninepoint\noindent
-\hskip5em{\bf if\/} $\\{j\_random}=0$ {\bf then} \\{new\_randoms}
- {\bf else} \\{decr}(\\{j\_random})
+`|! |' and followed
+by~`|.|', followed by lines of context as in \MF's normal error\cutpar
-\bugonpage D63, line 21 (06/25/04)
+\bugonpage C200, line 12 from the bottom (08/27/20)
-Locations of \\{mem} between \\{mem\_min} and \\{mem\_top} may be dumped as
-part
-of preloaded base\cutpar
+\ninepoint\indent
+$y_1=y_2=\\{good.y}(.5[-d,h]+1.1\\{pt})$;
+
+\bugonpage C202, line 17 from the bottom (06/13/20)
+
+\ninepoint\noindent
+command,
+and it works only when the \\{penpos} angle is~0. If the \\{penpos} command
+is\cutpar
+
+\bugonpage C210, bottom eight lines, and top ten lines of page C211 (07/16/20)
+
+\ninepoint\noindent
+\beginsyntax
+<numeric atom>\is<numeric variable>\alt<numeric argument>
+ \alt<numeric token primary>
+ \alt<internal quantity>
+ \alt[normaldeviate]
+ \alt[(]<numeric expression>[)]
+ \alt[begingroup]<statement list><numeric expression>[endgroup]
+ \alt[length]<numeric primary>\alt[length]<pair primary>
+ \alt[length]<path primary>\alt[length]<string primary>
+ \alt[ASCII]<string primary>\alt[oct]<string primary>\alt[hex]<string primary>
+ \alt<pair part><pair primary>\alt<transform part><transform primary>
+ \alt[angle]<pair primary>
+ \alt[turningnumber]<path primary>\alt[totalweight]<picture primary>
+ \alt<numeric operator><numeric primary>
+ \alt[directiontime]<pair expression>[of]<path primary>
+<numeric token primary>\is<numeric token>[/]<numeric token>
+ \alt<numeric token not followed by %
+ `{\tt/}$\thinspace\langle$numeric token$\rangle$'\thinspace>
+<numeric primary>\is<numeric atom not followed by {[\char'133]<expression>[,]}>
+ \alt<numeric atom>[\char'133]<numeric expression>%
+ [,]<numeric expression>[\char'135]
+\endsyntax
-\bugonpage D75, line 13 (06/25/04)
+\bugonpage C214, line 6 becomes two lines (07/17/20)
\ninepoint\noindent
-\quad{\bf define} $\\{fi\_or\_else}=2$\quad$\{\,$delimiters for conditionals
- {\bf elseif\/}, {\bf else}, {\bf fi})$\,\}$
+\beginsyntax
+<future pen primary>\is<future pen argument>
+ \alt[pencircle]
+\endsyntax
-\bugonpage D76, line 5 (06/25/04)
+\bugonpage C214, line 6 from the bottom (07/12/20)
\ninepoint\noindent
-\quad{\bf define} $\\{type\_name}=30$\quad$\{\,$declare a type
- ({\bf numeric}, {\bf pair}, etc.)$\,\}$
+\beginsyntax
+ \alt[substring]<pair expression>[of]<string primary>
+\endsyntax
-\bugonpage D77, line 16 (06/25/04)
+\bugonpage C217, lines 20--25 (10/07/20)
\ninepoint\noindent
-\quad{\bf define} $\\{lig\_kern\_token}=76$\quad$\{\,$the operators
- `{\bf kern}' and `\.{=:}' and `\.{=:\char'174}', etc.$\,\}$
-
-\bugonpage D98, bottom two lines (06/25/04)
-
-\noindent
-They consist of zero or more parameter tokens followed
-by a code for the type of macro.
-
-\bugonpage D101, line 3 (06/25/04)
+\beginsyntax
+<program>\is<statement list><non-title statement>[end]
+ \alt<statement list><non-title statement>[dump]
+<statement list>\is<empty>\alt<statement>[;]<statement list>
+<statement>\is<empty>\alt<title>
+ \alt<equation>\alt<assignment>\alt<declaration>
+ \alt<definition>\alt<compound>\alt<command>
+\endsyntax
-\noindent
-\MF\ user assigns a type to a variable like \.{x20a.b} by saying, for
-example, `\.{boolean} \.{x[]a.b}'.
+\bugonpage C219, line 25 (05/25/20)
-\bugonpage D102, lines 10--16 (06/25/04)
+\ninepoint\noindent
+to see which of its subscripts and suffixes have occurred.
+For example, if you're\cutpar
-\noindent
-variable that is relevant
-when no attributes are attached to the parent. The \\{attr\_head} node
-has the fields of either
-a value node, a subscript node, or an attribute node, depending on what
-the parent would be if it were not structured; but the subscript and
-attribute fields are ignored, so it effectively contains only the data of
-a value node. The \\{link} field in this special node points to an attribute
-node whose \\{attr\_loc} field is zero; the latter node represents a collective
-subscript `\.{[]}' attached to the parent, and its \\{link} field points to
-the first non-special attribute node (or to \\{end\_attr} if there are none).
-
-\bugonpage D102, lines 7 and 8 from the bottom (06/25/04)
+\bugonpage C224, lines 7--9 from the bottom (12/21/18)
-\noindent
-$\\{subscr\_head}(\\{q1})=\\{qq1}$;
-\\{qq} is a three-word ``attribute-as-value'' node with
-$\\{type}(\\{qq})=\break\\{numeric\_type}$
-(assuming that \.{x5} is numeric, because \\{qq} represents `\.{x[]}'
-with no further\break
- attributes), $\\{name\_type}(\\{qq})=\\{structured\_root}$,
-$\\{attr\_loc}(\\{qq})=0$, $\\{parent}(\\{qq})=p$,\cutpar
+\tenpoint\indent
+|y4r=-0.9848thinn+259.00049|\par
+|x4r=-0.08682thinn+144|\par
+|y4=-0.4924thinn+259.00049|
-\bugonpage D103, line 6 (06/25/04)
+\bugonpage C226, lines 9 and 10 (11/01/20)
-\noindent
-The value of variable \.{x20b}
-appears in node~$\\{qqq2}=\\{link}(\\{qqq1})$, as you can well imagine.
-Similarly, the value of `\.{x.a}' appears in node $\\{q2}=\\{link}(\\{q1})$,
-where $\\{attr\_loc}(\\{q2})=h(a)$ and $\\{parent}(\\{q2})=p$.
+\ninepoint\noindent
+This means that the preloaded base you have specified cannot be used,
+because it is corrupted or was prepared for a different version of
+\MF\kern-.03em.
-\bugonpage D114, line 12 (06/25/04)
+\bugonpage C228, line 27 (06/19/20)
-\noindent
-\qquad Such save stack entries are generated by \&{save} commands.
+\ninepoint\indent
+|l.94 endfor|
-\bugonpage D120, line 3 (06/25/04)
+\bugonpage C228, line 4 from the bottom (07/12/20)
\ninepoint\noindent
-[delete the line `The code here \dots', since the
- code {\it doesn't\/} use the stated fact]
+might want to review now.) \
+You probably also have a |proof| mode diagram:
-\bugonpage D126, line 10 (06/25/04)
+\bugonpage C234, line 4 of answer 4.6 (07/20/20)
-\tenpoint\noindent
-If $\theta_0$ is supposed to have a given value $E_0$, we simply
-define $C_0=1$, $D_0=0$, and $R_0=E_0$.\cutpar
+\ninepoint\indent
+{\bf for} $k=1$ {\bf upto} 6: $z[k]'=.2[z[k],z_0]$; {\bf endfor}
-\bugonpage D138, line 11 from the bottom (10/26/06)
+\bugonpage C241, line 2 (11/11/17)
-\tenpoint\noindent
-for the bisected interval are $z'_0=z_0$
-and $z''_0=z_0+(Z'_1+Z'_2+\cdots+Z'_n)/2^{l+1}$.
+\ninepoint\indent
+|\mode=cheapo; input cheaplogo10|
-\bugonpage D142, line 3 (06/25/04)
+\bugonpage C242, line 11 of answer 13.7 (07/20/20)
-\tenpoint\noindent
-out to hold if and only if $x_0\le x_1$ and $x_2\le x_3$, and either
-$x_1\le x_2$ or $(x_1-x_2)^2\le(x_1-x_0)(x_3-x_2)$.\cutpar
+\ninepoint\indent
+{\bf for} $k=1$ {\bf upto} 4:
+ $z[k+4]=z[k]+({2\over3}s,{1\over3}s)$; \ {\bf endfor}
-\bugonpage D142, line 8 (10/26/06)
+\bugonpage C243, lines 7 and 8 (11/08/15)
-\tenpoint\noindent\quad
-For example, if we start with $(x_1-x_0,x_2-x_1,x_3-x_2)=
-(X_1,X_2,X_3)=(7,-16,39)$, the\cutpar
+\ninepoint\indent
+\indent {\bf draw} subpath$(k,k+1)$ of \\{star}; {\bf cullit};\par\indent
+\indent {\bf undraw} subpath$(k+2,k+3)$ of \\{star} {\bf withpen}
+ \\{eraser}; {\bf cullit};
-\bugonpage D142, lines 21--23 (06/25/04)
+\bugonpage C243, line 3 of answer 13.11 (06/17/20)
-\tenpoint\noindent
-monotonic
-cubic, then $B(x_0,x_1,x_2,x_3;{1\over2})$ is always between
-$.06[x_0,x_3]$ and $.94[x_0,x_3]$; and it is impossible for $\bar x$
-to be within~$\epsilon$ of such a number. Contradiction!
-(The constant .06 is actually $(2-\sqrt3\,)/4$; the worst case
-occurs for polynomials like $B(0,2-\sqrt3,1-\sqrt3,3;t)$.)
+\ninepoint\indent
+{\bf def overdraw expr} $c$ = {\bf begingroup save} \\{region};
-\bugonpage D177, line 18 (06/25/04)
+\bugonpage C243, lines 12--16 of answer 13.11 (05/24/20)
\ninepoint\noindent
-$\\{cur\_x},\\{cur\_y}$: \\{scaled};\quad$\{\,$outputs of \\{skew},
- \\{unskew}, and a few other routines$\,\}$
+\begindisplay
+{\bf beginchar}$(\hbox{\tt"M"},1.25\\{in}\0,.5\\{in}\0,0)$; \
+ {\bf pickup pencircle} scaled .4\\{pt};\cr
+$z_1=(20,-13)$; \ $z_2=(30,-6)$; \ $z_3=(20,1)$; \ $z_4=(4,-7)$;\cr
+\indent $z_5=(-12,-13)$; \ $z_6=(-24,-4)$; \ $z_7=(-15,6)$;\cr
+{\bf path} $M$; $M=(\\{origin}\dts
+ z_1\dts z_2\dts z_3\dts z_4\dts z_5\dts z_6\dts z_7\dts$\cr
+\indent$\\{origin}\dts -z_7\dts -z_6\dts -z_5\dts -z_4\dts
+ -z_3\dts -z_2\dts -z_1\dts\cycle)$\cr
+\enddisplay
-\bugonpage D182, lines 27--29 (06/25/04)
+\bugonpage C246, line 2 of answer 14.13 (08/16/20)
-\noindent
-{\bf399.\quad}If
- the segment numbers on the cycle are $t_1$, $t_2$, \dots, $t_m$,
-and if $m\le\\{max\_quarterword}$,
-we have $t_{k-1}\le t_k$ except for at most one value of~$k$. If there are
-no exceptions, $f$ will point to $t_1$; otherwise it will point to the
-exceptional~$t_k$.
+\ninepoint\noindent
+path $z_0\dashto z_1$ is equivalent to `$z_0\dts
+\controls1/3[z_0,z_1]\and2/3[z_0,z_1]\dts z_1$', and the\cutpar
-\bugonpage D184, line 18 (12/21/02)
+\bugonpage C247, line 1 of answer 15.5 (06/13/20)
\ninepoint\noindent
-\qquad\\{chopped}: \\{integer};\quad
-$\{\,$positive if data truncated, negative if data dangerously large$\,\}$
+\quad{\bf 15.5.}\enspace
+{\bf beginchar}$(126,25u\0,\\{h\_height}\0+\\{border}\0,0)$; \
+|"Dangerous left bend"|;
-\bugonpage D184, line 25 (12/21/02)
+\bugonpage C247, replacement for answer 15.7 (07/21/20)
\ninepoint\noindent
-\quad{\bf if\/} $(\\{internal}[\\{autorounding}]>0)\land(\\{chopped}=0)$
- {\bf then} \\{xy\_round};
+\quad{\bf 15.7.}\enspace
+Replace lines 10 and 11 by
+\begindisplay
+{\bf pickup pencircle} scaled 3/4\\{pt} yscaled 1/3 rotated $-60$;\cr
+{\bf draw} ($z_1\ldots p$) transformed $t$;\cr
+{\bf addto} \\{currentpicture} {\bf also} \\{currentpicture}\cr
+\qquad rotatedaround$\bigl((.5w,.5h)$ yscaled \\{aspect\_ratio}$,-180\bigr)$;\cr
+\enddisplay
-\bugonpage D184, line 27 (12/21/02)
+\bugonpage C249, line 1 of answer 18.9 (08/02/20)
\ninepoint\noindent
-\quad{\bf if\/} $(\\{internal}[\\{autorounding}]>\\{unity})\land
- (\\{chopped}=0)$ {\bf then} \\{diag\_round};
+\quad{\bf 18.9.}\enspace
+{\bf beginchar}\kern1pt(|"H"|$,13u\0,"ht"\0,0)$; \
+ {\bf pickup} \\{broad\_pen};
-\bugonpage D184, line 32 (12/21/02)
+\bugonpage C249, line 11 of answer 18.9 (08/02/20)
-\ninepoint\noindent
-\qquad{\bf if\/} $(\\{internal}[\\{autorounding}]\le0)\lor(\\{chopped}\ne0)$
- {\bf then} \\{print\_spec}({\tt\char`",\]after\]subdivision\char`"})
+\ninepoint\indent
+{\bf filldraw} $\\{bot\_serif\_edge}_4$
-\bugonpage D185, lines 15--19 (12/21/02)
+\bugonpage C250, line 4 of answer 19.1 (04/19/20)
\ninepoint\noindent
-\quad{\bf define} \\{procrustes}({\tt\char`#})${}\equiv{}${\bf if\/}
- $\\{abs}(\.\#)\ge\\{dmax}$ {\bf then}\par\noindent
-\qquad\qquad\quad{\bf if\/} $\\{abs}(\.\#)>\\{max\_allowed}$ {\bf then}\par
-\noindent\qquad\qquad\qquad{\bf begin} $\\{chopped}\gets1$;\par\noindent
-\qquad\qquad\qquad{\bf if\/} $\.\#>0$ {\bf then} $\.\#\gets\\{max\_allowed}$
- {\bf else} $\.\#\gets-\\{max\_allowed}$;\par\noindent
-\qquad\qquad\qquad{\bf end}\par\noindent
-\qquad\qquad\quad{\bf else if\/} $\\{chopped}=0$ {\bf then}
- $\\{chopped}\gets-1$
+because it saves a wee bit of time and because
+`;'\ often belongs before {\bf endfor}.
-\bugonpage D185, old line 22 (12/21/02)
+\bugonpage C250, replacement for answer 19.3 (07/12/20)
\ninepoint\noindent
-\quad$p\gets\\{cur\_spec}$; $k\gets1$; $\\{chopped}\gets0$;
- $\\{dmax}\gets\\{half}(\\{max\_allowed})$;
+\quad{\bf 19.3.}\enspace
+Yes, if and only if $n-{1\over2}$ is an even integer.
+\ (Because ambiguous values are rounded upwards.)
-\bugonpage D185, old line 28 (12/21/02)
+\bugonpage C251, replacement for answer 22.1 (07/12/20)
\ninepoint\noindent
-\quad{\bf if\/} $\\{chopped}>0$ {\bf then}
-
-\bugonpage D196, lines 3--8 (06/25/04)
+\quad{\bf 22.1}\enspace
+(a) If and only if $n$ is an integer between 0 and 255.
+(b) If and only if $s$ is a string of length~1.
-The first job is to fix things so that $x(t)$ plus the horizontal
-pen offset is an integer multiple of the
-current ``granularity'' when the derivative $x'(t)$ crosses through zero.
-The given cyclic path contains regions where $x'(t)\ge0$ and regions
-where $x'(t)\le0$. The \\{quadrant\_subdivide} routine is called into action
-before any of the path coordinates have been skewed, but some of them
-may have been negated. In regions where $x'(t)\ge0$ we have $\\{right\_type}=%
-\\{first\_octant}$ or $\\{right\_type}=\\{eighth\_octant}$; in regions where
-$x'(t)\le0$,
-we have $\\{right\_type}=\\{fifth\_octant}$ or $\\{right\_type}=\\{fourth%
-\_octant}$.
+\bugonpage C254, lines 10--13 from the bottom become five lines (06/26/20)
-\bugonpage D196, lines 15 and 16 (06/25/04)
+\ninepoint\noindent
+\begintt
+? H
+I found no right delimiter to match a left one. So I've
+put one in, behind the scenes; this may fix the problem.
+|null
+?
+\endtt
-\noindent
-current pen might be unsymmetric in such a way that $x$ coordinates
-should round dif-\break ferently in different parts of the curve.
-These considerations imply that round$(x_0)$\cutpar
+\bugonpage C260, the ``line'' after line 3 (06/14/20)
-\bugonpage D200, line 4 (06/25/04)
+\def\bb{$\,\left\{\vcenter\bgroup\halign\bgroup\hfil##\hfil\cr}
+\def\ee{\crcr\egroup\egroup\right\}\,$}
+\tenpoint\noindent
+\bb|font_size|\cr|font_slant|\cr|font_normal_space|\cr
+ |font_normal_stretch|\cr|font_normal_shrink|\cr|font_x_height|\cr
+ |font_quad|\cr|font_extra_space|\ee
+\bb|=|\cr\noalign{\kern-2pt}|:=|\cr\noalign{\kern-2pt}\<empty>\ee
+\<numeric$\0$>; \
+\bb|ligtable|\<ligs/kerns>\cr|charlist|\<codes>\cr|extensible|\<codes>\cr
+ |fontdimen|\<info>\cr|headerbyte|\<info>\ee;\kern-10pt
-\noindent
-and that there are similar ways to address other important offsets.\par
-\smallskip\ninepoint
-[Also delete the definitions of \\{north\_south\_edge}, etc.,
-on lines 11--15; those definitions are never used.]
+\bugonpage C261, lines 16 and 17 from the bottom (06/14/20)
-\bugonpage D212, line 18 (06/25/04)
+\tenpoint\noindent
+\bb|proofrule|\cr|screenrule|\ee|(|\<pair>|,|\<pair>|)|; \
+|makegrid(|\<numerics>|)(|\<numerics>|)|;\smallskip\noindent
+|proofrulethickness| \<numeric$\0$>; \ |proofoffset| \<pair>.
-\noindent
-at $(x_0,y_0)$ and ends at $(x_1,y_1)$, it's possible to
-prove (by induction on the length of the truncated\cutpar
+\bugonpage C266, lines 19 and 20 (07/04/20)
-\bugonpage D216, bottom line (06/25/04)
+\ninepoint\noindent
+You can say either `|incr|~|x|' or `|incr|~|(x)|', within
+an expression; but neither of them are valid statements by themselves.
-\noindent
-we list it twice (with coordinates
-interchanged, so as to make the second octant look like\cutpar
+\bugonpage C269, line 11 (01/10/21)
-\bugonpage D217, lines 2--10 (06/25/04)
+\ninepoint\indent
+|\smode="specmode"; mag=|\<magnification>|; input |\<font file name>
-\noindent
-$$\tabskip\centering
-\halign to\hsize{$\hfil#\;\mapsto\;{}$\tabskip=0pt&
-$#\hfil$&\quad in the #\hfil\tabskip\centering\cr
-w_2\;w_2\;w_2&(-5,6)\;(-5,6)\;(-5,6)\cr
-\noalign{\vskip\belowdisplayskip
-\vbox{\noindent\strut as the list of transformed and skewed offsets to use
-when curves that travel in the second octant. Similarly, we will have\strut}
-\vskip\abovedisplayskip}
-w_2\;w_2\;w_2&(7,-6)\;(7,-6)\;(7,-6)&third;\cr
-w_2\;w_2\;w_3\;w_3&(-7,1)\;(-7,1)\;(-3,2)\;(-3,2)&fourth;\cr
-w_3\;w_3\;w_3&(3,-2)\;(3,-2)\;(3,-2)&fifth;\cr
-w_3\;w_3\;w_0\;w_0&(-3,1)\;(-3,1)\;(1,0)\;(1,0)&sixth;\cr
-w_0\;w_0\;w_0&(1,0)\;(1,0)\;(1,0)&seventh;\cr
-w_0\;w_0\;w_0&(-1,1)\;(-1,1)\;(-1,1)&eighth.\cr}$$
-
-\bugonpage D218, lines 2 and 3 (06/25/04)
+\bugonpage C277, lines 15--19 (03/06/17)
+\ninepoint\noindent
+|def openit = openwindow currentwindow from origen % and please correct|\par
\noindent
-count followed by pointers to the eight offset lists, followed
-by an indication of the pen's range of values.
-
-\bugonpage D218, line 15 (06/25/04)
-
-The \\{link} field of a pen header node should be \\{null} if and only if
-the pen is a single point.
-
-\bugonpage D227, line 11 (06/25/04)
-
+| to (screen_rows,screen_cols) at (-50,300) enddef; % "(-50,300)" too|\par
\noindent
-\\{endpoint}. The cubics all have
-monotone-nondecreasing $x(t)$ and $y(t)$.
-
-\bugonpage D228, lines 4--7 from the bottom (06/25/04)
-
+|def showit_ = display currentpicture inwindow currentwindow enddef;|\par
\noindent
-In odd-numbered octants, the numerator and denominator of this fraction
-will be nonnegative; in even-numbered octants they will both be nonpositive.
-Furthermore we always have $0=s_0\le s_1\le\cdots\le s_n=\infty$. The goal of
-\\{offset\_prep} is to find an offset index~$k$ to associate with
-each cubic, such that the slope $s(t)$ of the cubic satisfies
+|def showit = openit; let showit=showit_; showit enddef; % first time only|\par
+\kern3pt\hrule\medskip\noindent
+Plain \MF\ has several other terse commands
+similar to `{\bf openit}' and `{\bf showit}':
-\bugonpage D231, line 7 (06/25/04)
+\bugonpage C279, line 1 (11/11/17)
\ninepoint\noindent
-\quad{\bf if\/} $\\{abs}(\\{du})\ge\\{abs}(\\{dv})$ {\bf then}\quad $\{\,
- s_{k-1}\le1$ or $s_k\le1\,\}$
-
-\bugonpage D231, line 16 (06/25/04)
-
-\noindent
-and return towards $s_{k-1}$ or $s_k$,
-respectively, yielding another solution of $(*)$.
+| blacker:=.1; % make pens a teeny bit blacker|
-\bugonpage D246, line 4 from the bottom (06/25/04)
+\bugonpage C289, line 20 (10/07/20)
-\noindent
-dinate fields. Hence, for example,
-the point $\bigl($$\\{x\_coord}(p)-\\{left\_v}(q),\\{y\_coord}(p)+%
-\\{right\_u}(p)$$\bigr)$
-also\cutpar
+\ninepoint\indent
+|if {{(pair x) cand x>(0,0)}}: A else: B fi.|
-\bugonpage D248, lines 14 and 15 (01/06/14)
+\bugonpage C291, line 18 (07/24/20)
-\noindent
-the $x$-axis at the point
-$\bigl((a^2-b^2)\sin\theta\cos\theta/\rho\bigr)+i\rho$, where
-\vadjust{\vskip1pt}%
-$\rho=\sqrt{(a\sin\theta)^2+(b\cos\theta)^2}$. It reaches
-furthest to the right of~the $y$-axis at the point
-$\sigma+i(a^2-b^2)\sin\theta\cos\theta/\sigma$, where
-$\sigma=$\cutpar
+\ninepoint\indent
+| save u_; setu_ u; let switch_ = if; if false: enddef.|
-\bugonpage D248, line 24 (06/25/04)
+\bugonpage C292, line 10 from the bottom (10/23/20)
\ninepoint\noindent
-\qquad{\bf else begin} $\\{beta}\gets\\{minor\_axis}$;
- $\\{gamma}\gets\\{major\_axis}$;
- $\\{theta}\gets0$;
-
-\bugonpage D251, line 1 (01/06/14)
-
-\noindent
-{\bf536.\quad}Only the coordinates need to be copied, not the class numbers
-and other stuff. At this point either $\\{link}(p)$ or
-$\\{link}(\\{link}(p))$ is \\{null}.
+be known by saying `{\bf if} known $(p-q)$: $p=q$ {\bf else}:~{\bf false fi}';
+transforms could be handled\cutpar
-\bugonpage D251, line 10 (01/06/14)
+\bugonpage C293, lines 13 and 14 from the bottom (10/27/20)
\ninepoint\noindent
-\\{done1}: {\bf if\/} $(\\{link}(p)\ne\\{null})$ {\bf then}
-$\\{free\_node}(\\{link}(p),\\{knot\_node\_size})$;\hfil\break
-\null\quad$\\{link}(p)\gets s$;
-$\\{beta}\gets-\\{y\_coord}(h)$;
-
-\bugonpage D256, line 2 from the bottom (06/25/04)
-
-\noindent
-we have $2^lu_{\min}=2^lu_0+U_{\min}$, etc.; the condition for overlap
-reduces to
+$f(-1)$ is false! When $c\rightarrow0$, the quantity $a^3+b^3$
+approaches $-\infty$ when $c$~is positive, $+\infty$ when $c$~is
+negative. An attempt to `\\{solve} $f(1,-1)$' will divide by zero and
+come\cutpar
-\bugonpage D261, line 5 (06/25/04)
+\bugonpage C295, line 2 (07/04/20)
\ninepoint\noindent
-\\{tol}: \\{integer};\quad$\{\,$bound on the uncertainty in the overlap test$\,\}$
+`interpolate $(1,1)\dts(3,2)\dts(15,4)$ of~7' the approximate value 3.37.
-\bugonpage D262, lines 26 and 27 (06/25/04)
+\bugonpage C299, bottom four lines of code become five (08/06/20)
\ninepoint\noindent
-\qquad\quad$\\{uv}\gets\\{uv}+\\{int\_packets}$;\quad$\{\,$switch
- from \\{l\_packets} to \\{r\_packets}$\,\}$\par\noindent
-\qquad\quad$\\{decr}(\\{cur\_tt})$;
- $\\{xy}\gets\\{xy}-\\{int\_packets}$;\quad$\{\,$switch
- from \\{r\_packets} to \\{l\_packets}$\,\}$
+\begintt
+primarydef t Bernshtein nn = begingroup save r; r =
+ begingroup for n=nn downto 2:
+ for k=1 upto n-1: u_[[[k]]]:=t[[[u_[[[k]]],u_[[[k+1]]] ]]];
+ endfor endfor u_[[[1]]] endgroup; numeric u_[[[]]];
+ r endgroup enddef;
+\endtt
-\bugonpage D262, line 11 from the bottom (06/25/04)
+\bugonpage C299, line 5 after the code becomes two lines (08/06/20)
\ninepoint\noindent
-\qquad$\\{xy}\gets\\{xy}+\\{int\_packets}$;\quad$\{\,$switch
- from \\{l\_packets} to \\{r\_packets}$\,\}$
+brackets are nested inside of brackets.
+However, the auxiliary variables `|u_[[[|$k$|]]]|' must not remain
+independent at the end.
-\bugonpage D274, line 15 from the bottom (06/25/04)
+\bugonpage C305, lines 14--18 (07/08/20)
\ninepoint\noindent
-\qquad\qquad{\bf begin if\/} $\\{serial\_no}>\\{el\_gordo}-\\{s\_scale}$
- {\bf then}\par\noindent
-\qquad\qquad\quad$\\{overflow}(\.{"independent\]variables"},
- \\{serial\_no}\mathbin{\hbox{\bf div}}\\{s\_scale})$;\par\noindent
-\qquad\qquad$\\{type}(\#)\gets\\{independent}$;
- $\\{serial\_no}\gets\\{serial\_no}+\\{s\_scale}$;
- $\\{value}(\#)\gets\\{serial\_no}$;
-
-\bugonpage D309, line 21 (06/25/04)
-
-\noindent
-{\bf670.\quad}We go to \\{restart} instead of to \\{switch},
-because we might enter \\{token\_state} after the error\cutpar
-
-\bugonpage D314, line 6 from the bottom (06/25/04)
-
+|width_adj#:=0pt#; % width adjustment for certain characters|\par
\noindent
-\\{macro\_def} or \\{iteration}).
-
-\bugonpage D330, line 1 (06/25/04)
-
+|serif_fit#:=0pt#; % extra sidebar near lowercase serifs|
+\vskip-3pt\noindent\qquad\vdots\par\noindent
+|low_asterisk:=false; % should the asterisk be centered at the axis?|\par
\noindent
-{\bf728.\quad}A {\bf suffix} or {\bf text} parameter will have been scanned as
-a token list pointed to by \\{cur\_exp},\cutpar
-
-\bugonpage D354, lines 15 and 16 from the bottom (06/25/04)
-
-\noindent\hangindent 3em
-$\\{cur\_type}=\\{unknown\_boolean}$ means that \\{cur\_exp} points to a
-capsule node that is in
-a ring of equivalent booleans whose value has not yet been defined.
+|math_fitting:=false; % should math-mode spacing be used?|
-\bugonpage D354, lines 11 and 12 from the bottom (06/25/04)
+\bugonpage C317, line 21 becomes two lines (11/11/17)
-\noindent\hangindent 3em
-$\\{cur\_type}=\\{unknown\_string}$ means that \\{cur\_exp} points to a
-capsule node that is in
-a ring of equivalent strings whose value has not yet been defined.
-
-\bugonpage D354, lines 7 and 8 from the bottom (06/25/04)
-
-\noindent\hangindent 3em
-$\\{cur\_type}=\\{unknown\_pen}$ means that \\{cur\_exp} points to a
-capsule node that is in
-a ring of equivalent pens whose value has not yet been defined.
+\ninepoint\noindent
+\beginsyntax
+<label>\is<code label>\alt<code>[::]\alt[\\\\:]
+<code label>\is\<code>[:]
+\endsyntax
-\bugonpage D355, lines 1 and 2 (06/25/04)
+\bugonpage C318, lines 10--16 from the bottom (11/11/17)
-\noindent\hangindent 3em
-$\\{cur\_type}=\\{unknown\_path}$ means that \\{cur\_exp} points to a
-capsule node that is in
-a ring of equivalent paths whose value has not yet been defined.
+\ninepoint\noindent
+\beginsyntax
+ \alt<code label><labeled code>
+<extensible command>\is[extensible]<code label><four codes>
+<four codes>\is<code>[,]<code>[,]<code>[,]<code>
+\endsyntax
+Notice that a \<code label> can appear in a {\bf ligtable}, {\bf charlist}, or
+{\bf extensible} command.
+ These appearances are mutually exclusive: No code may be
+used more than once as a label. Thus, for example, a character with a
+ligature/kerning program cannot also be {\bf extensible}, nor can it be
+in a {\bf charlist} (except as the final item).
-\bugonpage D355, lines 5 and 6 (06/25/04)
+\bugonpage C333, line 29 (10/25/19)
-\noindent\hangindent 3em
-$\\{cur\_type}=\\{unknown\_picture}$ means that \\{cur\_exp} points to a
-capsule node that is in
-a ring of equivalent pictures whose value has not yet been defined.
+\ninepoint\noindent
+| "if charcode>0:currentpicture:=currentpicture scaled mg;fi;"|
-\bugonpage D355, lines 21 and 22 (06/25/04)
+\bugonpage C333, bottom two lines become one (11/11/17)
-\noindent
-$\\{cur\_type}=\\{token\_list}$ means that \\{cur\_exp} points to a linked list
-of tokens.
+\ninepoint\noindent
+| if unknown scale: scale := max(1,round(pixels_per_inch/300)); fi|
-\bugonpage D356, lines 2--3 (06/25/04)
+\bugonpage C339, line 3 (05/21/20)
-\noindent
-nodes have $\\{name\_type}=\\{capsule}$,
-and their \\{type} field is one of the possibilities for \\{cur\_type}
-listed above.
-Also $\\{link}\le\\{void}$ in capsules that aren't part of a token list.
+\ninepoint\noindent
+ing `\char'31', `\char'32',
+`\char'33', and~`\char'34') and the uppercase letters (including
+`\char'35', `\char'36', and~`\char'37') are\cutpar
-\bugonpage D368, line 13 (06/25/04)
+\bugonpage C341, line 14 from the bottom (11/11/17)
\ninepoint\noindent
-\qquad\\{my\_var\_flag}: $0\to\\{max\_command\_code}$;\quad$\{\,$initial
- value of \\{var\_flag}$\,\}$
+prints the |\table| and the |\text|; ^|\bigtest| gives
+you the works, plus a mysterious word\cutpar
-\bugonpage D378, line 9 from the bottom (06/25/04)
+\bugonpage C345 and following, selected amendments to the index (01/20/21)
-\ninepoint\noindent
-\qquad\quad{\bf begin} $\\{cur\_type}\gets\\{known}$;
- $\\{cur\_exp}\gets0$;
- $\\{free\_node}(q,\\{dep\_node\_size})$;
+\eightpoint
+*|,| (comma), 57, 72, 73, 129, 155, 165--167, 171, 211--213, 218, 317, 318.\par
+`A', 10--11, 163, 164, 248, 302--303.\par
+\<addto command>, 118, $\underline{220}$.\par
+bell-shaped distribution, $\underline{183}$, 251.\par
+|black|, 270, 332--333.\par
+\<code> and \<code label>, $\underline{317}$.\par
+concatenation, of paths, {\it70}--{\it71}, {\it123}, 127--129, $\underline{130}$, 137, {\it245}, {\it266}.\par
+\quad of strings, {\it69}, 73, 84--85, $\underline{187}$, {\it278}, {\it286}, {\it312}.\par
+*|directiontime|, {\it135}, $\underline{\it136}$, 211, 245, 265, {\it298}.\par
+distance, 76, 84, {\sl see also\/} |length|.\par
+|dotprod|, {\it68}--{\it69}, 178, {\it238}, 265.\par
+efficiency, 39, 99, 116, 141, 144, 147, 228, 230, 234, 244, 264, 265, 277, 291, 297, 298.\par
+empty option in {\bf for\/} list, 171, $\underline{172}$, {\it299}.\par
+forbidden tokens, 173, $\underline{218}$--$\underline{219}$, 286.\par
+*|from|, $\underline{191}$, 220, {\it252}, {\it277}, {\it312}.\par
+Giotto di Bondone, 139.\par
+independent variables, $\underline{81}$--$\underline{83}$, 88, 224, 226, 299.\par
+|\init|, $\underline{337}$, 342.\par
+internal quantities, 54--55, 88, 218, 262, 265--266.\par
+*|inwindow|, $\underline{191}$, 220, {\it277}.\par
+\<keep or drop>, $\underline{118}$, 220.\par
+|labels|, {\it107}, $\underline{274}$, 327--328.\par
+*|length|, {\it66}, {\it69}, 72, 210, 238.\par
+*|ligtable|, {\it97}, {\it305}--{\it306}, $\underline{316}$--$\underline{317}$.\par
+loops, 169, 171--173, 179, 226--227, 259, 290--291, 299.\par
+`N', 184--185, 302--303.\par
+\<numeric token primary>, 72, $\underline{211}$.\par
+|o|, {\it23}, {\it34}, $\underline{93}$, 197, 200, 204, 240, 302.\par
+`O', 32--37, 161, 199, 302--303.\par
+overshoot, 23, 34, 93, 197, 200, 204, 302.\par
+|penpos|, {\it26}--{\it29}, 37, 80, {\it103}, {\it162}, $\underline{273}$, 310.\par
+pens, 21--29, 147--152, 297--298.\par
+*|rotated|, {\it21}--{\it22}, {\it25}, 27, 44, {\it68}, 73, {\it107}, {\it114}, {\it117}, $\underline{141}$, 213, {\it238}.\par
+|rule|, 274, 328.\par
+*|scaled|, {\it21}--{\it23}, {\it68}, 73, $\underline{141}$, 213, 244, 291.\par
+*|showstopping|, 211, 219, {\it227}, 230, {\it262}.\par
+string expressions, {\it69}, 187--189, 258, 286.\par
+\<suffix list>, $\underline{171}$, 236.\par
+sum, of vectors, 9, {\it68}.\par
+|test.mf|, 311--313.\par
+\TeX, 1, 34, 40, 91, 96, 98, 101--103, 315, 336--343, 361.\par
+text arguments, 219, 288--291, 299.\par
+|.tfm|, 39, 315--321, 333, 335.\par
+*|to|, $\underline{191}$, 220, {\it252}, {\it277}, {\it312}.\par
+undelimited suffix parameters, $\underline{167}$, 176, 266, 270.\par
+|undraw|, 113, 118, 120, {\it242}, $\underline{271}$.\par
+|unitsquare|, {\it116}, 123--124, 128, 132, 136, $\underline{263}$.\par
+*|unknown|, $\underline{170}$, 210.\par
+unknown quantities, nonnumeric, 84--85, 143.\par
+values, disappearance of, 56, 83, 88, 156--157, 177--178, 218, 239, 299.\par
+\<vardef heading>, 165, $\underline{178}$.\par
+*|xscaled|, {\it21}--{\it22}, {\it68}, 73, $\underline{141}$, 213, 244, 291.\par
-\bugonpage D380, line 12 (06/25/04)
-\ninepoint\noindent
-\qquad\qquad{\bf begin} $\\{type}(r)\gets\\{known}$;
- $\\{value}(r)\gets0$;
- $\\{free\_node}(p,\\{dep\_node\_size})$;
-\bugonpage D390, lines 2 and 3 (06/25/04)
+ % Volume D
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
-\noindent
-by a previous operation. We must maintain
-the value of $\\{right\_type}(q)$ in cases such as\break
-`|..\\{curl2\}z\{0,0\}..|'.
+\bugonpage Dv, line 16 (01/16/21)
-\bugonpage D437, line 1 (06/25/04)
+\tenpoint\noindent
+\kern12.5mm I believe that the final bug in \MF\ was discovered on January\cutpar
-\noindent
-{\bf996.\quad}And \\{do\_assignment} is similar to \\{do\_equation}:
+\bugonpage Dv, bottom two lines (01/16/21)
-\bugonpage D439, line 10 becomes two lines (06/25/04)
+\eightpoint\noindent
+corporates all of those changes.
+I~now believe that the final bug was discovered on 03 July 2020
+and removed in version 2.71828182. % on 16 January 2021
+The finder's fee has converged to \$327.68.
-\ninepoint\noindent
-\qquad{\bf begin} $\\{nonlinear\_eq}(v,\\{cur\_exp},\\{false})$;
- $\\{cur\_type}\gets t$;
- {\bf goto} \\{done};
+\hsize=35pc
-\bugonpage D443, line 11 (06/25/04)
+\bugonpage D2, last line of \S2 (01/15/21)
\ninepoint\noindent
-\\{done}: {\bf if\/} $\\{eq\_type}(x)\mathbin{\hbox{\bf mod}}\\{outer\_tag}
- \ne\\{tag\_token}$ {\bf then}
- $\\{clear\_symbol}(x,\\{false})$;
+$$\hbox{{\bf define} $\\{banner}\equiv\.{\char`\'This\]is\]METAFONT,\]Version\]2.71828182\char`\'}$\quad
+$\{\,$printed when \MF\ starts$\,\}$}$$
-\bugonpage D452, line 9 (06/25/04)
+\bugonpage D14, line 1 of \S30 (05/05/14)
-\noindent
-though they don't necessarily correspond to primitive tokens.
+\tenpoint\noindent
+{\bf 20.} \quad The \\{input\_ln} function brings the next line of input from the specified
+file into available\cutpar
-\bugonpage D476, line 12 from the bottom (06/25/04)
+\bugonpage D21, line 8 of \S47 (10/11/20)
-\ninepoint\noindent
-\quad{\bf if\/} $\\{nl}-\\{skip\_table}[c]>128$ {\bf then}
+\ninepoint\noindent\quad
+$g$: \\{str\_number};\quad$\{\,$the string just created$\,\}$
-\bugonpage D483, line 7 (06/25/04)
+\bugonpage D27, lines 3 and 4 of \S61 (04/02/17)
-\ninepoint\noindent
-\quad$\\{max\_tfm\_dimen}\gets16\ast\\{internal}[\\{design\_size}]-1
- -\\{internal}[\\{design\_size}]\mathbin{\hbox{\bf div}}\Oct{10000000}$;
+\tenpoint\noindent
+is not serious since we assume that this
+part of the program is system dependent.
-\bugonpage D483, lines 15--17 (06/25/04)
+\bugonpage D28, line 7 (04/02/17)
-\ninepoint\noindent
-\qquad{\bf if\/} $x>0$ {\bf then}
- $x\gets\\{max\_tfm\_dimen}$ {\bf else}
- $x\gets-\\{max\_tfm\_dimen}$;\par\noindent
-\qquad{\bf end};\par\noindent
-\quad$x\gets\\{make\_scaled}(x\ast16,\\{internal}[\\{design\_size}])$;
+\ninepoint\noindent\quad
+{\bf var} $k$: $0\dts23$;\quad$\{\,$index to current digit; we assume
+ that $\vert n\vert<10^{23}\,\}$
-\bugonpage D496, line 2 (06/25/04)
+\bugonpage D32, line 2 of \S78 becomes two lines (06/27/20)
-\noindent
-a pointer to
-an edge structure. Its mission is to describe the positive pixels
-in \.{GF} form,\cutpar
+\ninepoint\noindent\quad
+{\bf loop begin} \\{continue}: {\bf if} $\\{interaction}\ne\\{error\_stop\_mode}$
+ {\bf then return};\par
+\noindent\qquad
+\\{clear\_for\_error\_prompt}; \ \\{prompt\_input}(\.{"?\]"});
-\bugonpage D500, line 16 (06/25/04)
+\bugonpage D32, line 11 of \S79 (07/03/20)
-\ninepoint\noindent
-\quad$\\{selector}\gets\\{old\_setting}$;
- $\\{gf\_out}(\\{cur\_length})$;
- $\\{gf\_string}(0,\\{make\_string})$;
- $\\{decr}(\\{str\_ptr})$;
+\ninepoint\noindent\quad
+\.{"E"}: {\bf if} $\\{file\_ptr}>0$ {\bf then if}
+ $\\{input\_stack}[\\{file\_ptr}].\\{name\_field}\ge256$ {\bf then}
-\bugonpage D506, lines 8--10 (06/25/04)
+\bugonpage D33, line 5 of \S80 (07/03/20)
-\noindent
-\MF\ it says,
-for example, `\.{(preloaded base=plain 1984.2.29)}', showing the year,
-month, and day that the base file was created. We have $\\{base\_ident}=0$
-before \MF's tables are loaded.
+\ninepoint\noindent\quad
+{\bf if} $\\{file\_ptr}>0$ {\bf then}\par
+\noindent\qquad
+{\bf if} $\\{input\_stack}[\\{file\_ptr}].\\{name\_field}\ge256$ {\bf then}
+\\{print}(\.{"E\]to\]edit\]your\]file."}
-\bugonpage D514, line 14 from the bottom (06/25/04)
+\bugonpage D37, line 9 of \S93 (08/07/20)
-\noindent
-\.{CMMF}, should also be provided for commonly used bases such as \.{cmbase}.
+\ninepoint\noindent\qquad
+(\.{"Try\]to\]insert\]an\]instruction\]for\]me\](e.g.,\]%
+ \char`\`I\]show\]x;\char`\'),"})
- % volume E
-\hsize=29pc
+\bugonpage D82, line 2 from the bottom (09/19/19)
-\newbox\shorthyf \setbox\shorthyf=\hbox{-\kern-.05em}
-\mathchardef\period=`\.
-{\catcode`\-=\active \global\def-{\copy\shorthyf\mkern3.9mu}
- \catcode`\.=\active \global\def.{\period\mkern3mu}}
-\def\8#1{\mathrel{\mathcode`\.="8000 \mathcode`\-="8000
- #1\unkern}} % `..' and `--'
+\ninepoint\noindent\quad
+{\bf define} $\\{boundary\_char}=41$\quad$\{\,$the boundary character for ligatures$\,\}$
-\bugonpage E1, line 3 (01/06/06)
+\bugonpage D85, lines 3 and 4 of \S194 {(and \S194 actually moves to page D86)} (12/11/20)
\tenpoint\noindent
-Zillions of alphabets can be generated by the programs in this book.
-All\cutpar
+information, something special
+is needed. The program here simply assumes that suitable values appear in
+the global variables \\{sys\_time}, \\{sys\_day}, \\{sys\_month}, and
+\\{sys\_year} (which are initialized to noon on 4 July 1776,
+in case the implementor is careless).
+
+\bugonpage D85, the final six lines of \S194 {(and \S194 actually moves to page D86)} (12/11/20)
+
+\ninepoint\noindent
+{\bf procedure} \\{fix\_date\_and\_time};\par
+\noindent\quad{\bf begin}
+$\\{sys\_time}\gets12\ast60$; \
+$\\{sys\_day}\gets4$; \
+$\\{sys\_month}\gets7$; \
+$\\{sys\_year}\gets1776$;\quad
+$\{\,$self-evident truths$\,\}$\par
+\noindent\quad$\\{internal}[\\{time}]\gets\\{sys\_time}\ast\\{unity}$;\quad
+ $\{\,$minutes since midnight$\,\}$\par
+\noindent\quad$\\{internal}[\\{day}]\gets\\{sys\_day}\ast\\{unity}$;\quad$\{\,$day of the month$\,\}$\par
+\noindent\quad$\\{internal}[\\{month}]\gets\\{sys\_month}\ast\\{unity}$;\quad$\{\,$month of the year$\,\}$\par
+\noindent\quad$\\{internal}[\\{year}]\gets\\{sys\_year}\ast\\{unity}$;\quad$\{\,$Anno Domini$\,\}$\par
+\noindent\quad{\bf end};
+
+\bugonpage D86, replacement for \S196 (12/11/20)
-\bugonpage E6, lines 16--19 (12/29/04)
+\tenpoint\noindent
+{\bf 196.}\quad Of course we had better declare a few more global variables,
+if the previous routines are going to work.
+\smallskip
+\ninepoint\noindent
+$\langle\,$Global variables {\sevenrm\kern.5em13}$\,\rangle+\equiv$\par
+\noindent\\{old\_setting}: $0\dts\\{max\_selector}$;\par
+\noindent\\{sys\_time}, \\{sys\_day}, \\{sys\_month}, \\{sys\_year}: \\{integer};
+\quad$\{\,$date and time supplied by external system$\,\}$
-\textindent\bull
- {\it square\_dots\/} tells whether dots should be square, not rounded;\smallskip
-\textindent\bull
- {\it hefty\/} tells whether weight-reducing strategies should be used;\smallskip
-\textindent\bull\hangindent\parindent
- {\it monospace\/} tells whether the characters should all be forced to
- have the same width;
+\bugonpage D97, line 2 of \S221 (05/26/17)
-\bugonpage E7, line 11 (12/21/02)
+\tenpoint\noindent
+the definition of attribute nodes) that
+it is convenient to let $\\{info}(p)=0$ stand for `\.{[]}'.
-\ninepoint\indent
-\\{hair}, \\{vair}, \\{stem}, \\{curve}, \\{ess}, \\{flare}, \\{dot\_size},
- \\{bar}, \\{slab},
+\goodbreak
+\bugonpage D148, line 7 (06/12/18)
-\bugonpage E7, line 14 (12/21/02)
+\tenpoint\noindent
+but the $\log n$ factor is buried in our
+implicit restriction on the maximum raster size.) The\cutpar
-\ninepoint\indent
-\\{crisp}, \\{tiny}, \\{fine};
-\medskip\noindent
-and \\{thin\_join} should not be less than \\{fine}.
+\bugonpage D237, line 5 of \S513 (05/26/17)
-\bugonpage E19, line 19 (11/07/01)
+\ninepoint\noindent\quad
+{\bf for} $n\gets0$ {\bf to} $\\{n1}-\\{n0}-1$ {\bf do} $\\{env\_move}[n]\gets\\{mm0}$;
-\tenpoint
-\line{\\{cap\_notch\_cut}\hskip 0pt plus1.5fil46/36\hfil31/36\hfil25/36\hfil
-24/36\hfil22/36\hskip0pt plus3fil25/36}
+\bugonpage D250, line 2 of \S534 (05/26/17)
-\bugonpage E41, line 8 (12/21/02)
+\tenpoint\noindent
+direction $\bigl(\\{right\_u}(p),\\{left\_v}(q)\bigr)$;
+and there's a line of length $\ge\\{delta}$ from vertex~$q$ to vertex~$r$,\cutpar
-\ninepoint\noindent\mathchardef\AM="2026 % ampersand
-\quad$\\{extra\_endchar}\gets\\{extra\_endchar}\AM
- \.{\char`"charcode:=charcode+code\_offset;"}$;
+\bugonpage D296, line 11 (06/23/20)
-\bugonpage E53, line 7 (12/21/02)
+\tenpoint\noindent
+\\{name} points to the \\{eqtb} address of the macro
+being expanded, if the current token list\cutpar
-\def\frac#1/#2{\leavevmode\kern.1em
- \raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em
- /\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}}
-\ninepoint\noindent
-{\bf numeric} \\{mid\_thickness};
- $\\{mid\_thickness}={\rm Vround}$ \frac1/3[$\\{vair},\\{stem}$];
+\bugonpage D324, line 13 of \S713 (12/20/20)
-\bugonpage E125, line 6 from the bottom (07/10/05)
+\ninepoint\noindent\qquad\quad
+\\{help2}(\.{"After\]\char`\`exitif\]<boolean\]expr>\char`\'\]I\]expect\]to\]see\]a\]%
+semicolon."})
-\ninepoint\noindent
-$\\{top}\,y_1=\\{top}\,y_6=h$; $z_2=.5[z_3,z_1]+\\{bend}$;
+\bugonpage D326, line 5 from the bottom (06/23/20)
-\bugonpage E125, line 3 from the bottom (07/10/05)
+\ninepoint\noindent\qquad\qquad
+$\{\,$invokes a user-defined sequence of commands$\,\}$
-\ninepoint\noindent
-{\bf draw} $z_1-\\{flourish\_change}\{\\{up}\}+(0,.15\\{asc\_height})
- \{\\{up}\}$\par
-\line{\quad$\8{...}\{\\{right}\}(z_1+(2u,0))\8{---}z_6\8{...}\{\\{down}\}z_7$;
- \hfil\% upper bar}
+\bugonpage D334, lines 1 and 2 of \S742 (10/25/20)
-\bugonpage E146, also pages 164 and 540 (02/08/03)
+\tenpoint\noindent
+{\bf 742.} \ Here is a procedure that ignores text until coming to an {\bf elseif},
+{\bf else}, or {\bf fi} at the current level of {\bf if}$\,\ldots\,${\bf fi}
+nesting. After it has acted, \\{cur\_mod} will indicate the token that
+was found.
-\eightpoint\noindent
-[The labels on the new illustrations of beta, omega, and spadesuit
-are too large, and the resolution of the shapes is too small.]
+\bugonpage D339, line 4 of \S757 (06/16/20)
-\bugonpage E147, line 11 from the bottom (04/23/04)
+\tenpoint\noindent\quad
+(A user who tries some shenanigan like `{\bf for} $\ldots$ {\bf let} {\bf endfor}'
+will be foiled by the \\{get\_symbol}\cutpar
+
+\bugonpage D351, lines 2--7 of \S536 become five lines (12/11/20)
+
+\ninepoint\noindent\quad
+{\bf begin} \\{wlog}(\\{banner});
+\\{slow\_print}(\\{format\_ident});
+\\{print}(\.{"\]\]"});
+\\{print\_int}(\\{sys\_day});
+\\{print\_char}(\.{"\]"});\par
+\noindent\quad
+$\\{months}\gets\.{\char`\'JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC\char`\'}$;\par
+\noindent\quad
+{\bf for} $k\gets3\ast\\{sys\_month}-2$ {\bf to} $3\ast\\{sys\_month}$
+{\bf do} \\{wlog}(\\{months}[$k$]);\par
+\noindent\quad
+\\{print\_char}(\.{"\]"});
+\\{print\_int}(\\{sys\_year});
+\\{print\_char}(\.{"\]"});
+\\{print\_two}(\\{sys\_time} {\bf div} 60);
+\\{print\_char}(\.{":"});\par
+\noindent\quad
+\\{print\_two}(\\{sys\_time} {\bf mod} 60);
+
+\bugonpage D352, line 2 of \S793 becomes two lines (10/29/20)
-\ninepoint\noindent
-$x_0=x_1=x_9$; $\\{lft}\,x_{0r}={\rm hround}(1.5u-.5\\{hair})$;
-$x_2=x_4=x_6=x_8=.5w-.25u$;
+\tenpoint\noindent
+command is being processed.
+Beware: For historic reasons, this code foolishly conserves a tiny bit
+of string pool space; but that can confuse the interactive `\.E' option.
-\bugonpage E147, line 8 from the bottom (04/23/04)
+\bugonpage D352, line 5 from the bottom (10/29/20)
\ninepoint\noindent
-$y_5=.5[y_4,y_6]$; $\\{top}\,y_{6r}-\\{bot}\,y_{4r}=\\{vstem}+\\{eps}$;
- $\\{bot}\,y_{8r}=-\\{oo}$; $y_7=y_9=.55[y_6,y_8]$;
+{\bf if} $\\{name}=\\{str\_ptr}-1$ {\bf then}
+\ $\{\,$conserve string pool space (but see note above)$\,\}$
-\bugonpage E149, line 8 from the bottom (04/23/04)
+\bugonpage D354, line 2 from the bottom (07/29/20)
-\ninepoint\noindent
-$y_5+.1\\{x\_height}=y_7=.5[y_6,y_8]$; $\\{bot}\,y_{6r}=-\\{oo}$;
+\tenpoint\noindent
+$\\{cur\_type}=\\{path\_type}$ means that \\{cur\_exp} points to the first
+node of
+a path; nobody else points\cutpar
-\bugonpage E157, line 11 (02/29/08)
+\bugonpage D469, lines 18--20 of \S1093 (09/19/19)
-\ninepoint\noindent
-\line{{\bf filldraw} $z_{1l}\8{--}z_{2l}\8{...}(x_3,y_{2l})\8{...}z\8{--}
- z_{1r}\8{--}\rm cycle$;\hfil\% stem}
+\tenpoint\noindent
+so-called boundary character of this font;
+the value of \\{next\_char} need not lie between \\{bc} and~\\{ec}.
+If the very last instruction of the \\{lig\_kern} array has $\\{skip%
+\_byte}=255$,
+there is a special ligature/kerning program for a boundary character at the
+left, beginning at location $256\ast\\{op\_byte}+$\cutpar
-\bugonpage E161, line 7 from the bottom (04/23/04)
+\bugonpage D469, line 30 of \S1093 (01/15/21)
-\ninepoint\noindent
-$\\{top}\,y_{1r}=\\{x\_height}+\\{oo}$; $y_2=y_4=.5[y_1,y_3]$;
- $\\{bot}\,y_{3r}=-\\{oo}$;
+\tenpoint\noindent
+tional halt; no ligature or kerning command is performed.
-\bugonpage E209, line 3 (12/29/04)
+\bugonpage D471, lines 20 and 21 (08/07/20)
-\ninepoint
-\rightline{\% This lowercase italic alphabet was prepared by D. E. Knuth
- in December, 1979,}
+\ninepoint\noindent
+\\{param}: {\bf array} $[1\dts\\{max\_font\_dimen}]$ {\bf of}
+\\{scaled};\quad$\{\,${\bf fontdimen} parameters$\,\}$\par\noindent
+\\{np}: $0\dts\\{max\_font\_dimen}$;\quad$\{\,$the largest {\bf fontdimen} parameter
+specified so far$\,\}$
-\bugonpage E377, lines 3 and 4 from the bottom (12/22/02)
+\bugonpage D474, line 2 from the bottom (08/07/20)
-\ninepoint\noindent
-\qquad {\bf path} \\{p\_}; $\\{p\_}=z_{\$\$l}\{z_{@1}-z_{\$\$l}\}\8{...}
- \\{darkness}[z_{@1},.5[z_{@2},z_{\$\$l}]]\8{...}z_{@2}$\par\noindent
-\qquad\quad$\8{---}z_{\$l}\8{--}z_{\$r}\8{--}z_{@0}\8{--}z_{\$\$r}\8{--}%
- {\rm cycle}$;\par\noindent
-\qquad{\bf if\/} $(y_{\$\$}>y_\$) \ne ({\rm ypart}\,\hbox{\bf precontrol}\,1
- \,\hbox{\bf of\/}\,\\{p\_} > {\rm ypart}\,\hbox{\bf postcontrol}\,1\,
- \,\hbox{\bf of\/}\,\\{p\_})$:\par\noindent
-\qquad\quad$\\{p\_}=z_{\$\$l}\{z_{@1}-z_{\$\$l}\}\8{...}
- \\{darkness}[z_{@1},.5[z_{@2},z_{\$\$l}]]$\par\noindent
-\qquad\qquad$\8{---}z_{\$l}\8{--}z_{\$r}\8{--}z_{@0}\8{--}z_{\$\$r}\8{--}%
- {\rm cycle}$;\ {\bf fi}\par\noindent
-\line{\qquad {\bf filldraw} \\{p\_};\hfil \% arm and beak}
+\ninepoint\noindent\quad\qquad
+\\{help1}(\.{"A\]colon\]should\]follow\]a\]headerbyte\]or\]fontdimen\]location."});
+\\{back\_error};
-\bugonpage E379, lines 17 and 18 become one line (01/06/14)
+\bugonpage D508, line 3 of \S1189. (10/05/20)
-\ninepoint\noindent
-{\bf else}: $\\{rt}\,x_{6r}={\rm hround}(w-1.5u)$;
-$y_{6}=y_{5l}+\\{eps};$ {\bf fi}
+\tenpoint\noindent
+to be in the range $a\le x\le b$.
+System error messages should be suppressed when undumping.
-\bugonpage E379, bottom line of the program (01/06/14)
+\bugonpage D516, line 6 (10/15/20)
-\def\SH{\raise.7ex\hbox{$\scriptstyle\#$}} % sharp sign for sharped units
-\ninepoint\noindent
-{\bf math\_fit}$(0,\\{ic}\SH-2.5u\SH)$;
-{\bf penlabels}$(0,1,2,3,4,5,6,7)$;
-{\bf endchar};
+\tenpoint\noindent\quad
+If \\{final\_cleanup} is bypassed, this program doesn't bother to
+close the input files that may still be open.
-\bugonpage E489, bottom line (06/25/04)
+\bugonpage D519, line 17 (01/15/21)
-\ninepoint\noindent
-{\bf labels}$(1,2,3,4,5,6)$; {\bf endchar};\hfil\break
-[Labels `\.5' and `\.6' should also be added to
- the lower illustration on page E488.]
+\ninepoint\noindent\quad
+\\{fix\_date\_and\_time};
+$\\{init\_randoms}(\\{sys\_time}+\\{sys\_day}*\\{unity})$;
-\bugonpage E545, line 11 from the bottom (12/29/04)
+\bugonpage D520, line 18 of \S1212 becomes two lines (10/05/20)
-\parindent=36pt
-The most important general routine in |cmbase| is probably the {\it pos}\cutpar
+\ninepoint\noindent\quad
+{\bf begin} \\{clear\_terminal};\par
+\noindent\quad
+{\bf loop}
-\bugonpage E551, line 3 from the bottom (12/29/04)
+\bugonpage D520, lines 11 and 12 from the bottom of \S1212
+ become three lines (04/02/17)
-\noindent quantities needed in the |calu|
-programs are also established at this time.
+\ninepoint\noindent\qquad\qquad
+{\bf begin goto} \\{breakpoint};\par
+\noindent\qquad\qquad\quad$\{\,$go to every declared label at least once$\,\}$\par
+\noindent\qquad\quad\\{breakpoint}: $m\gets0$;
+ \.{@\char`\{\char`\'BREAKPOINT\char`\'@\char`\}}
+\bugonpage D566, the bottom five lines (05/14/19)
-\bugonpage E577, right column (12/23/02)
+\tenpoint\noindent
+they occupy in a typical production system
+(executable code size for dark blocks, global data size for light blocks).
+In this way the chart indicates a total of about
+$8\times22=176${\ninerm K} bytes of memory, plus
+$8\times15=120${\ninerm K} for the
+dynamic memory region not shown explicitly. The dynamic memory
+is often considerably larger in practice, because it is desirable to
+accommodate large macro packages and large pictures.
-\eightpoint\noindent
-\\{p\_}\kern1pt, 305, 377.\par\noindent
-{\bf padded}, 103--111, 117--121, $\underline{549}$.
-\bugonpage E578, left column (12/23/02)
+ % volume E
+\hsize=29pc
+
+\newbox\shorthyf \setbox\shorthyf=\hbox{-\kern-.05em}
+\mathchardef\period=`\.
+{\catcode`\-=\active \global\def-{\copy\shorthyf\mkern3.9mu}
+ \catcode`\.=\active \global\def.{\period\mkern3mu}}
+\def\8#1{\mathrel{\mathcode`\.="8000 \mathcode`\-="8000
+ #1\unkern}} % `..' and `--'
-\eightpoint\noindent
-{\bf postcontrol}, 347, 377.\par\noindent
-{\bf precontrol}, 347, 377.
\bye