From be31a3bcf74e6d21aa329076b6b6993eb3c2061d Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 26 Feb 2021 23:56:54 +0000 Subject: knuth runtime file updates from the 2021 tuneup git-svn-id: svn://tug.org/texlive/trunk@57963 c570f23f-e606-0410-a88d-b1316a301751 --- .../source/generic/knuth/errata/errata.tex | 2474 ++++++++++---------- 1 file changed, 1288 insertions(+), 1186 deletions(-) (limited to 'Master/texmf-dist/source/generic/knuth/errata/errata.tex') 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|\|=|\ - -\bugonpage A290, lines 25--26 (02/24/08) - -\ninepoint\textindent{$\bull$} -\\\.\enskip -Here \ refers to one of the first five glue-appending -commands just mentioned; the formal syntax for \\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 \, 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 \ +commands other than \.{\char`\\setbox}, possibly with \. +If the assignments are not followed by a \, where +\ 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}% + \\\.\enskip +A \ has the form +`\\.{\char`\{}\\.{\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 +\ 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}% + \\\.\enskip +This command has the same effect as in horizontal mode (see Chapter~25), but the +third \ 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 +`\.{}', 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 \. +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 +\ 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`\{}\\.{\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 +\, $\underline{287}$, 292.\par +\, $\underline{276}$, 279, 280.\par +\, 278, 285, 287.\par +integral signs, {\sl see\/} |\int|, |\oint|, |\smallint|.\par +\, 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 +\, 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 \ -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 -\is\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 -\\is\|:|\ {\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 -\is\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|\' in a \. +\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 \.) + % 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 +\is + \alt + \alt[(][)] + \alt[normaldeviate] + \alt[length] + \alt[length] + \alt[length] + \alt[angle] + \alt[xpart] + \alt[ypart] + \alt +\is[/] + \alt +\is[,]}> + \alt[\char'133]% + [,][\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}\(\,\thinspace\). -\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 +\\is\\\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 +\, via \. +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\\thinspace|of|\thinspace + \ -\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 +\is\alt + \alt + \alt + \alt[normaldeviate] + \alt[(][)] + \alt[begingroup][endgroup] + \alt[length]\alt[length] + \alt[length]\alt[length] + \alt[ASCII]\alt[oct]\alt[hex] + \alt\alt + \alt[angle] + \alt[turningnumber]\alt[totalweight] + \alt + \alt[directiontime][of] +\is[/] + \alt +\is[,]}> + \alt[\char'133]% + [,][\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 +\is + \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][of] +\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 +\is[end] + \alt[dump] +\is\alt[;] +\is\alt + \alt\alt\alt + \alt\alt\alt +\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}\\ee +\; \ +\bb|ligtable|\\cr|charlist|\\cr|extensible|\\cr + |fontdimen|\\cr|headerbyte|\\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|(|\|,|\|)|; \ +|makegrid(|\|)(|\|)|;\smallskip\noindent +|proofrulethickness| \; \ |proofoffset| \. -\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=|\|; input |\ -\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 +\alt[::]\alt[\\\\:] +\is\[:] +\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 +\is[extensible] +\is[,][,][,] +\endsyntax +Notice that a \ 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 +\, 118, $\underline{220}$.\par +bell-shaped distribution, $\underline{183}$, 251.\par +|black|, 270, 332--333.\par +\ and \, $\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 +\, $\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 +\, 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 +\, $\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 +\, 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\]\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 -- cgit v1.2.3