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.twelve | 1709 ++++++++++++++++++++ 1 file changed, 1709 insertions(+) create mode 100644 Master/texmf-dist/source/generic/knuth/errata/errata.twelve (limited to 'Master/texmf-dist/source/generic/knuth/errata/errata.twelve') diff --git a/Master/texmf-dist/source/generic/knuth/errata/errata.twelve b/Master/texmf-dist/source/generic/knuth/errata/errata.twelve new file mode 100644 index 00000000000..8a7c291b490 --- /dev/null +++ b/Master/texmf-dist/source/generic/knuth/errata/errata.twelve @@ -0,0 +1,1709 @@ +% Bugs (sigh) in Computers \& Typesetting + +\input manmac +\def\.#1{\hbox{\tt#1}} +\font\sltt=cmsltt10 +\font\niness=cmss9 +\font\ninessi=cmssi9 +\proofmodefalse +\raggedbottom +\output{\hsize=29pc \onepageout{\unvbox255\kern-\dimen@ \vfil}} + +\def\today{\number\day\ + \ifcase\month\or + Jan\or Feb\or Mar\or Apr\or May\or Jun\or + Jul\or Aug\or Sep\or Oct\or Nov\or Dec\fi + \ \number\year} + +\def\cutpar{{\parfillskip=0pt\endgraf}} + +\def\rhead{Bugs in {\tensl Computers \& Typesetting as of \today}} +\def\bugonpage#1(#2) \par{\bigbreak\tenpoint + \hrule width\hsize + \line{\lower3.5pt\vbox to13pt{}Page #1\hfil(#2)}\hrule width\hsize + \nobreak\medskip} +\def\buginvol#1(#2) \par{\bigbreak\penalty-1000\tenpoint + \hrule width\hsize + \line{\lower3.5pt\vbox to13pt{}Volume #1\hfil(#2)}\hrule width\hsize + \nobreak\medskip} +\def\slMF{{\manual 89:;}\-{\manual <=>:}} % slant the logo +\def\0{\raise.7ex\hbox{$\scriptstyle\#$}} +\newcount\nn +\newdimen\nsize \newdimen\msize \newdimen\ninept \ninept=9pt +\newbox\eqbox \setbox\eqbox=\hbox{\kern2pt\eightrm=\kern2pt} + +\tenpoint +\noindent This is a list of all substantial corrections made to {\sl Computers +\& Typesetting\/} between the publication of the second ``Millennium Edition'' +at the close of the year 2001 and the beginning of the year 2014. +(More precisely, it lists errors corrected +in 16th to 19th printings of Volume~A, the 7th and 8th printings +of Volume~B, the 6th and 7th printings of Volume~C, the 4th and 5th printings +of Volume~D, and the 5th and 6th printings of Volume~E.) +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 +version of {\sl The \slMF\kern1ptbook}, beginning with its 11th printing, +are the same as corrections to Volume~C\null. Changes to the mini-indexes +and master indexes of Volumes B, D, and~E are not shown here unless they are +not obviously derivable from what has been shown. All of these +errors have supposedly been corrected in more recent printings, unless +they were subsequently found to be wrong. +\looseness=-1 + + % 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) + +\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. + + +\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 + +\bugonpage A292, line 15 (12/02/02) + +\ninepoint\noindent +are defined as in the +second alternative of a \, are +recorded in a ``choice\cutpar + +\bugonpage A308, lines 25 and 26 (06/17/02) + +\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) + +\ninepoint\indent +| \leavevmode\copy0\kern-\wd0\makelightbox}| + +\bugonpage A318, lines 24 and 25 (10/01/03) + +\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 + +\bugonpage A364, lines 12--15 from the bottom (02/29/08) + +\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}| + +\bugonpage A364, line 5 from the bottom (02/29/08) + +\ninepoint\noindent +|\def\fmtversion{3.141592653} % identifies the current format| + +\bugonpage A373, lines 4 and 5 from the bottom (01/02/14) + +\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) + +\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) + +\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 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|. + +\bugonpage A461, left column (02/24/08) + +\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) + +\eightpoint\noindent +Kastrup, David Friedrich, 399. + +\bugonpage A470, left column (01/21/03) + +\eightpoint\noindent +|\loggingall|, $\underline{364}$. + +\bugonpage A477, right column (06/08/07) + +\eightpoint\noindent +\llap{*}|\spaceskip|, 76, 274, {\it317}, {\it356}, {\it416}, 429. + +\bugonpage A479, right column (09/11/07) + +\eightpoint\noindent +|\undefined|, 350, 384. + +\bugonpage A483, line 5 from the bottom (11/18/03) + +\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)} + + % volume B +\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers +\def\to{\mathrel{.\,.}} % double dot, used only in math mode + +\bugonpage Bv, page number change (12/27/11) + +\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.] + +\bugonpage Bv {(formerly Bvii)}, bottom two lines (01/06/14) + +\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. + +\bugonpage Bxiii {(formerly Bxv)}, line $-7$ (12/27/11) + +\ninepoint\noindent +Format specs have no effect on the corresponding Pascal program, but they +do influence\cutpar + +\hsize=35pc + +\bugonpage B2, line 10 from the bottom (01/02/14) + +\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$\,\}$ + +\bugonpage B3, new paragraph to follow line 9 (12/20/02) + +\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. + +\bugonpage B21, lines 33 and 34 (09/11/07) + +\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. + +\bugonpage B109, line 16 (01/06/14) + +\ninepoint\noindent +\qquad\qquad{\bf begin} $\\{print\_esc}(\.{"csname"})$; +$\\{print\_esc}(\.{"endcsname"})$; +$\\{print\_char}(\.{"\ "})$; +{\bf end} + +\bugonpage B114, line 25 (09/11/07) + +\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$\,\}$ + +\bugonpage B139, line 20 (12/19/02) + +\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$\,\}$ + +\bugonpage B144, line 14 (09/11/07) + +\ninepoint\noindent +\quad\\{cat}: $0\to\\{max\_char\_code}$;\quad$\{\,$\\{cat\_code}(\\{cur\_char}), usually$\,\}$ + +\bugonpage B153, lines 2 and 3 (09/11/07) + +\tenpoint\noindent +In fact, these three procedures account for almost every use of \\{get\_next}. + +\bugonpage B161, line 19 (12/19/02) + +\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$\,\}$ + +\bugonpage B163, line 29 (12/19/02) + +\ninepoint\noindent +\quad$\\{long\_state}\gets\\{call}$; +$\\{cur\_tok}\gets\\{par\_token}$; +$\\{ins\_error}$; +{\bf goto} \\{continue}; + +\bugonpage B172, lines 2--6 from the bottom (09/11/07) + +\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}) + +\bugonpage B178, line 4 (09/11/07) + +\ninepoint\noindent +\quad$\\{cur\_val}\gets0$; +$\\{cur\_val\_level}\gets\\{int\_val}$; +$\\{radix}\gets0$; +$\\{cur\_order}\gets\\{normal}$; + +\bugonpage B184, line 9 from the bottom (04/18/07) + +\tenpoint\noindent +and denominator sum to 32768 or less. +According to the definitions here, $\rm2660\,dd\approx1000.33297\,mm$;\kern-6.6pt\cutpar + +\bugonpage B206, line 14 (10/30/02) + +\tenpoint\noindent +used input files like \.{webmac.tex}. + +\bugonpage B206, new paragraph to follow line 22 (12/20/02) + +\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. + +\bugonpage B227, new line to precede line 23 (09/11/07) + +\ninepoint\noindent +{\bf if} $(\\{nw}=0)\lor(\\{nh}=0)\lor(\\{nd}=0)\lor(\\{ni}=0)$ + {\bf then} \\{abort}; + +\bugonpage B256, line 25 (12/20/02) + +\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})$; + +\bugonpage B258, line 5 from the bottom (12/20/02) + +\ninepoint\noindent +\quad{\bf begin} $g\gets\\{glue\_ptr}(p)$; + $\\{rule\_wd}\gets\\{width}(g)-\\{cur\_g}$; + +\bugonpage B258, bottom line (12/20/02) + +\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})$; + +\bugonpage B259, line 4 (12/20/02) + +\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})$; + +\bugonpage B259, new line to precede old line 7 (12/20/02) + +\ninepoint\noindent +\quad$\\{rule\_wd}\gets\\{rule\_wd}+\\{cur\_g}$; + +\bugonpage B260, line 21 (12/19/02) + +\ninepoint\noindent +\qquad{\bf else begin} $\\{lx}\gets\\{lr}$ {\bf div} $(\\{lq}+1)$; + +\bugonpage B261, line 9 (12/20/02) + +\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})$; + +\bugonpage B262, line 10 from the bottom (12/20/02) + +\ninepoint\noindent +\quad{\bf begin} $g\gets\\{glue\_ptr}(p)$; + $\\{rule\_ht}\gets\\{width}(g)-\\{cur\_g}$; + +\bugonpage B262, line 6 from the bottom (12/20/02) + +\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})$; + +\bugonpage B262, line 2 from the bottom (12/20/02) + +\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})$; + +\bugonpage B263, new line to precede old line 2 (12/20/02) + +\ninepoint\noindent +\quad$\\{rule\_ht}\gets\\{rule\_ht}+\\{cur\_g}$; + +\bugonpage B264, line 10 (12/19/02) + +\ninepoint\noindent +\qquad{\bf else begin} $\\{lx}\gets\\{lr}$ {\bf div} $(\\{lq}+1)$; + +\bugonpage B266, line 29 (09/11/07) + +\tenpoint\noindent +$\\{total\_pages}\ge65536$, the \.{DVI} file will lie. And if +$\\{max\_push}\ge65536$, the user deserves whatever chaos might ensue. + +\bugonpage B279, line 19 (09/11/07) + +\ninepoint\noindent +\qquad\\{p}: \\{pointer};\quad$\{\,$a new glue node$\,\}$ + +\bugonpage B288, lines 18--20 (09/11/07) + +\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$)); + +\bugonpage B290, line 12 (09/11/07) + +\ninepoint\noindent +\quad{\bf begin if\/} $s=\\{text\_size}$ {\bf then} + \\{print\_esc}(\.{"textfont"}); + +\bugonpage B299, line 9 (12/20/02) + +\ninepoint\noindent +\qquad\qquad\quad{\bf if\/} $\\{type}(r)=\\{kern\_node}$ {\bf then} + \quad$\{\,$unneeded italic correction$\,\}$ + +\bugonpage B332, line 6 (12/19/02) + +\tenpoint\noindent +is being scanned, or when no alignment preamble is active. + +\bugonpage B332, line 8 (12/19/02) + +\ninepoint\noindent +\quad{\bf begin if\/} $(\\{scanner\_status}=\\{aligning}) \lor + (\\{cur\_align}=\\{null})$ {\bf then} + +\bugonpage B336, line 11 from the bottom (10/13/03) + +\tenpoint\noindent +$j-i+\\{min\_quarterword}$ in their +\\{link} fields. The values of $w_{ii}$ were initialized to +\\{null\_flag},\cutpar + +\bugonpage B342, lines 5 and 6 (09/11/07) + +\tenpoint +In restricted horizontal mode, the \\{clang} part of \\{aux} is undefined; +an over-cautious Pascal runtime system may complain about this. + +\bugonpage B343, line 25 (01/02/13) + +\noindent +should begin in the +sequence of line numbers, in case hanging indentation or \.{\char`\\parshape} +is in\cutpar + +\bugonpage B416, line 22 (02/29/08) + +\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)$ + +\bugonpage B438, lines 1--3 (09/11/07) + +\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}. + +\bugonpage B438, lines 19 and 20 (09/11/07) + +\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}$; + +\bugonpage B438, line 4 from the bottom (09/11/07) + +\ninepoint\noindent +\quad$\\{link}(\\{tail})\gets\\{lig\_stack}$; +$\\{tail}\gets\\{lig\_stack}$\quad$\{\,$\\{main\_loop\_lookahead} is next$\,\}$ + +\bugonpage B439, line 3 (09/11/07) + +\ninepoint\noindent +\quad{\bf if\/} $\\{main\_p}>\\{null}$ {\bf then} + \\{tail\_append}(\\{main\_p});\quad$\{\,$append a single character$\,\}$ + +\bugonpage B440, new line to follow line 9 (09/11/07) + +\ninepoint\noindent +\quad{\bf if\/} $\\{cur\_r}=\\{non\_char}$ {\bf then goto} + \\{main\_loop\_wrapup}; + +\bugonpage B452, line 18 (28/03/11) + +\noindent\\{hmode}, where the latter two are used to denote + \.{\char`\\vbox} and \.{\char`\\hbox}, respectively. + +\bugonpage B455, lines 3 and 4 (09/11/07) + +\ninepoint\noindent +\quad{\bf if\/} $((\\{cur\_cmd}=\\{hskip})\land(\\{abs}(\\{mode})\ne\\{vmode})) + \lor ((\\{cur\_cmd}=\\{vskip})\land(\\{abs}(\\{mode})=\\{vmode}))$ {\bf then} + +\bugonpage B472, new paragraph to follow line 10 (12/20/02) + +\tenpoint\noindent\quad +A devious user might force an \\{endv} command to occur just about anywhere; +we must defeat such hacks. + +\bugonpage B472, replacement for what used to be line 13 (12/20/02) + +\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} + +\bugonpage B505, line 19 (09/11/07) + +\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}; + +\bugonpage B506, line 1 (10/13/03) + +\tenpoint\noindent +{\bf 1237.\quad}Here we use the fact that the consecutive codes +$\\{int\_val}\to\\{mu\_val}$ and +$\\{assign\_int}\to$\cutpar + +\bugonpage B520, line 8 (06/25/04) + +\tenpoint\noindent +says, +for example, `\.{(preloaded format=plain 1982.11.19)}', showing the year, +month, and day\cutpar + +\bugonpage B535, new line to follow line 11 (09/11/07) + +\ninepoint\noindent +\qquad{\bf if\/} $\\{last\_glue}\ne\\{max\_halfword}$ {\bf then} + \\{delete\_glue\_ref}(\\{last\_glue}); + +\bugonpage B578, new entry (06/04/06) + +\eightpoint\noindent +Trabb Pardo, Luis Isidoro, 2. + + % 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 Cxi, line 4 (05/20/07) + +\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 C11, line 11 (10/11/01) + +\noindent +the area below the bar to the area above it equal to +$(\sqrt5+1)/2\approx1.61803$, the\cutpar + +\bugonpage C29, illustration for exercise 4.11 (09/09/01) + +\noindent +[points 2 and 5 should not be labeled twice] + +\bugonpage C32, line 5 from the bottom (01/04/14) + +\noindent +\hbox to\parindent{\hfil\sevenrm20\ \ }% +| penpos1(stem,15); penpos2(.9stem,12); penpos3(stem,10);| + +\bugonpage C36, line 5 from the bottom (01/05/14) + +\noindent +line~12, where it +says `|x1l|', not `|x11|' or~`|xll|'); be sure to distinguish between\cutpar + +\bugonpage C55, lines 5 and 6 (01/05/14) + +\ninepoint\noindent +suffixed or subscripted. +Thus, the syntax rule for \ +should actually be replaced by a slightly more complicated pair of rules: + + +\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. + +\bugonpage C137, lines 5--7 from the bottom (02/21/08) + +\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 + +\bugonpage C137, bottom two lines (02/21/08) + +\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 + +\bugonpage C156, line 15 from the bottom (09/09/01) + +\ninepoint\noindent +be the values they had upon entry to the group.) + +\bugonpage C159, lines 12--15 (12/01/06) + +\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. + +\bugonpage C171, line 16 from the bottom (06/18/02) + +\tenpoint +\\is\|:|\ {\tt endfor} + +\bugonpage C179, line 7 from the bottom (09/09/01) + +\ninepoint\noindent +next time \MF\ gets to the end of an input line, it will stop reading +from the\cutpar + +\bugonpage C180, lines 14--16 (04/25/03) + +\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. + +\bugonpage C180, new line to be inserted 4 from the bottom (06/25/04) + +\ninepoint\item\bull +When \MF\ is reading the symbolic tokens to be saved by {\bf save}. + +\bugonpage C203, line 12 from the bottom (04/25/03) + +\ninepoint\hbox to 237pt{point~3 at the right of the triangle +might digitize into a} + +\bugonpage C213, line 26 (02/21/08) + +\ninepoint\beginsyntax +\is\kern-5pt\null +\endsyntax + +\bugonpage C226, line 23 (02/21/08) + +\ninepoint\noindent following nineteen things will be mentioned: + +\bugonpage C226, new line to be second from the bottom (02/21/08) + +\ninepoint\indent|independent variables|\qquad(distinct numeric variables) + +\bugonpage C236, line 7 from the bottom (01/05/14) + +\ninepoint\noindent +\hbox to\parindent{\hss\bf 7.4.\enspace}False. +After `|newinternal x;|' you can't say `|x|\' in a \. + +\bugonpage C246, line 12 (02/21/08) + +\ninepoint\noindent +is performed whenever \MF\ uses the last two alternatives +in the definition\cutpar + +\bugonpage C250, lines 13 and 14 (02/19/08) + +\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.) + +\bugonpage C250, line 12 from the bottom (04/25/03) + +\ninepoint\noindent +following \.) + +\bugonpage C286, line 25 (09/09/01) + +\ninepoint\noindent +problem; it would simply have put |ENDFOR| into the +replacement text of |asts|, because\cutpar + +\bugonpage C289, line 7 (09/09/01) + +\vskip-6pt\ninepoint\begintt +if if pair x: x>(0,0) else: false fi: A else: B fi. +\endtt + +\bugonpage C292, line 10 from the bottom (09/09/01) + +\ninepoint\noindent +be known by saying `{\bf if\/} known $p-q$: $p=q$ {\bf else}:~{\bf false} +{\bf fi}'; transforms could be handled\cutpar + +\bugonpage C293, line 5 from the bottom (04/25/03) + +\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 + +\bugonpage C315, line 15 from the bottom (04/25/03) + +\ninepoint\noindent +`b' was shipped out.) \ The second letter,~`o', is placed +in a second little box adjacent\cutpar + +\bugonpage C325, bottom line (02/29/08) + +\rightline{\eightss--- CAROLUS LINN\AE US, + {\eightssi Philosophia Botanica\/}\enspace(1751)} + +\bugonpage C332, line 4 from the bottom (04/25/03) + +\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) + +\eightpoint\noindent +\llap{*}|angle|, {\it29}, {\it67}, $\underline{72}$, {\it107}, +{\it135}, 211, {\it238}. + +\bugonpage C346, right column (10/04/04) + +\eightpoint\noindent +arccosine, arcsine, arctangent, {\sl see\/} |angle|. + +\bugonpage C351, right column (02/21/08) + +\eightpoint\noindent +independent variables, $\underline{81}$--$\underline{83}$, 88, 224, 226. + +\bugonpage C352, right column (02/29/08) + +\eightpoint\noindent +Linn\'e, Carl von (= Linn\ae us, Carolus), 325. + +\bugonpage C355, right column (02/29/08) + +\eightpoint\noindent +\llap{*}|save|, $\underline{155}$--$\underline{156}$, {\it160}, 173, + {\it178}, 180, 218,\par +\noindent\qquad{\it236}, {\it244}, {\it296}, 299. + + % Volume D +\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers +\def\to{\mathrel{.\,.}} % double dot, used only in math mode + +\bugonpage Dv, page number change (12/27/11) + +\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.] + +\bugonpage Dv {(formerly Dvii)}, bottom two lines (01/06/14) + +\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. + +\bugonpage Dxiii {(formerly Dxv)}, line $-7$ (12/27/11) + +\ninepoint\noindent +Format specs have no effect on the corresponding Pascal program, but they +do influence\cutpar + +\hsize=35pc +\parindent=1em + +\bugonpage D2, line $-17$ (01/03/14) + +\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) + +\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 D31, line 29 (06/25/04) + +\noindent +This is the only nontrivial {\bf goto} statement in the +whole program. It is used when there is no\cutpar + +\bugonpage D42, replacement for lines 8--13 (12/23/02) + +\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) + +\tenpoint\noindent +language or 64-bit substitute is advisable. + +\bugonpage D44, lines 24--26 (12/23/02) + +\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. + +\bugonpage D58, line 16 from the bottom (06/25/04) + +\ninepoint\noindent +\hskip5em{\bf if\/} $\\{j\_random}=0$ {\bf then} \\{new\_randoms} + {\bf else} \\{decr}(\\{j\_random}) + +\bugonpage D63, line 21 (06/25/04) + +Locations of \\{mem} between \\{mem\_min} and \\{mem\_top} may be dumped as +part +of preloaded base\cutpar + +\bugonpage D75, line 13 (06/25/04) + +\ninepoint\noindent +\quad{\bf define} $\\{fi\_or\_else}=2$\quad$\{\,$delimiters for conditionals + ({\bf elseif\/}, {\bf else}, {\bf fi})$\,\}$ + +\bugonpage D76, line 5 (06/25/04) + +\ninepoint\noindent +\quad{\bf define} $\\{type\_name}=30$\quad$\{\,$declare a type + ({\bf numeric}, {\bf pair}, etc.)$\,\}$ + +\bugonpage D77, line 16 (06/25/04) + +\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) + +\noindent +\MF\ user assigns a type to a variable like \.{x20a.b} by saying, for +example, `\.{boolean} \.{x[]a.b}'. + +\bugonpage D102, lines 10--16 (06/25/04) + +\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) + +\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 + +\bugonpage D103, line 6 (06/25/04) + +\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$. + +\bugonpage D114, line 12 (06/25/04) + +\noindent +\qquad Such save stack entries are generated by {\bf save} commands. + +\bugonpage D120, line 3 (06/25/04) + +\ninepoint\noindent +[delete the line `The code here \dots', since the + code {\it doesn't\/} use the stated fact] + +\bugonpage D126, line 10 (06/25/04) + +\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 + +\bugonpage D138, line 11 from the bottom (10/26/06) + +\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}$. + +\bugonpage D142, line 3 (06/25/04) + +\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 + +\bugonpage D142, line 8 (10/26/06) + +\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 + +\bugonpage D142, lines 21--23 (06/25/04) + +\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)$.) + +\bugonpage D177, line 18 (06/25/04) + +\ninepoint\noindent +$\\{cur\_x},\\{cur\_y}$: \\{scaled};\quad$\{\,$outputs of \\{skew}, + \\{unskew}, and a few other routines$\,\}$ + +\bugonpage D182, lines 27--29 (06/25/04) + +\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$. + +\bugonpage D184, line 18 (12/21/02) + +\ninepoint\noindent +\qquad\\{chopped}: \\{integer};\quad +$\{\,$positive if data truncated, negative if data dangerously large$\,\}$ + +\bugonpage D184, line 25 (12/21/02) + +\ninepoint\noindent +\quad{\bf if\/} $(\\{internal}[\\{autorounding}]>0)\land(\\{chopped}=0)$ + {\bf then} \\{xy\_round}; + +\bugonpage D184, line 27 (12/21/02) + +\ninepoint\noindent +\quad{\bf if\/} $(\\{internal}[\\{autorounding}]>\\{unity})\land + (\\{chopped}=0)$ {\bf then} \\{diag\_round}; + +\bugonpage D184, line 32 (12/21/02) + +\ninepoint\noindent +\qquad{\bf if\/} $(\\{internal}[\\{autorounding}]\le0)\lor(\\{chopped}\ne0)$ + {\bf then} \\{print\_spec}({\tt\char`",\]after\]subdivision\char`"}) + +\bugonpage D185, lines 15--19 (12/21/02) + +\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$ + +\bugonpage D185, old line 22 (12/21/02) + +\ninepoint\noindent +\quad$p\gets\\{cur\_spec}$; $k\gets1$; $\\{chopped}\gets0$; + $\\{dmax}\gets\\{half}(\\{max\_allowed})$; + +\bugonpage D185, old line 28 (12/21/02) + +\ninepoint\noindent +\quad{\bf if\/} $\\{chopped}>0$ {\bf then} + +\bugonpage D196, lines 3--8 (06/25/04) + +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 D196, lines 15 and 16 (06/25/04) + +\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 D200, line 4 (06/25/04) + +\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 D212, line 18 (06/25/04) + +\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 D216, bottom line (06/25/04) + +\noindent +we list it twice (with coordinates +interchanged, so as to make the second octant look like\cutpar + +\bugonpage D217, lines 2--10 (06/25/04) + +\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) + +\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) + +\noindent +\\{endpoint}. The cubics all have +monotone-nondecreasing $x(t)$ and $y(t)$. + +\bugonpage D228, lines 4--7 from the bottom (06/25/04) + +\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 + +\bugonpage D231, line 7 (06/25/04) + +\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 $(*)$. + +\bugonpage D246, line 4 from the bottom (06/25/04) + +\noindent +dinate fields. Hence, for example, +the point $\bigl($$\\{x\_coord}(p)-\\{left\_v}(q),\\{y\_coord}(p)+% +\\{right\_u}(p)$$\bigr)$ +also\cutpar + +\bugonpage D248, lines 14 and 15 (01/06/14) + +\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 + +\bugonpage D248, line 24 (06/25/04) + +\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}. + +\bugonpage D251, line 10 (01/06/14) + +\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 + +\bugonpage D261, line 5 (06/25/04) + +\ninepoint\noindent +\\{tol}: \\{integer};\quad$\{\,$bound on the uncertainty in the overlap test$\,\}$ + +\bugonpage D262, lines 26 and 27 (06/25/04) + +\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}$\,\}$ + +\bugonpage D262, line 11 from the bottom (06/25/04) + +\ninepoint\noindent +\qquad$\\{xy}\gets\\{xy}+\\{int\_packets}$;\quad$\{\,$switch + from \\{l\_packets} to \\{r\_packets}$\,\}$ + +\bugonpage D274, line 15 from the bottom (06/25/04) + +\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) + +\noindent +\\{macro\_def} or \\{iteration}). + +\bugonpage D330, line 1 (06/25/04) + +\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. + +\bugonpage D354, lines 11 and 12 from the bottom (06/25/04) + +\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. + +\bugonpage D355, lines 1 and 2 (06/25/04) + +\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. + +\bugonpage D355, lines 5 and 6 (06/25/04) + +\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. + +\bugonpage D355, lines 21 and 22 (06/25/04) + +\noindent +$\\{cur\_type}=\\{token\_list}$ means that \\{cur\_exp} points to a linked list +of tokens. + +\bugonpage D356, lines 2--3 (06/25/04) + +\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. + +\bugonpage D368, line 13 (06/25/04) + +\ninepoint\noindent +\qquad\\{my\_var\_flag}: $0\to\\{max\_command\_code}$;\quad$\{\,$initial + value of \\{var\_flag}$\,\}$ + +\bugonpage D378, line 9 from the bottom (06/25/04) + +\ninepoint\noindent +\qquad\quad{\bf begin} $\\{cur\_type}\gets\\{known}$; + $\\{cur\_exp}\gets0$; + $\\{free\_node}(q,\\{dep\_node\_size})$; + +\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) + +\noindent +by a previous operation. We must maintain +the value of $\\{right\_type}(q)$ in cases such as\break +`|..{curl2}z{0,0\}..|'. + +\bugonpage D437, line 1 (06/25/04) + +\noindent +{\bf996.\quad}And \\{do\_assignment} is similar to \\{do\_equation}: + +\bugonpage D439, line 10 becomes two lines (06/25/04) + +\ninepoint\noindent +\qquad{\bf begin} $\\{nonlinear\_eq}(v,\\{cur\_exp},\\{false})$; + $\\{cur\_type}\gets t$; + {\bf goto} \\{done}; + +\bugonpage D443, line 11 (06/25/04) + +\ninepoint\noindent +\\{done}: {\bf if\/} $\\{eq\_type}(x)\mathbin{\hbox{\bf mod}}\\{outer\_tag} + \ne\\{tag\_token}$ {\bf then} + $\\{clear\_symbol}(x,\\{false})$; + +\bugonpage D452, line 9 (06/25/04) + +\noindent +though they don't necessarily correspond to primitive tokens. + +\bugonpage D476, line 12 from the bottom (06/25/04) + +\ninepoint\noindent +\quad{\bf if\/} $\\{nl}-\\{skip\_table}[c]>128$ {\bf then} + +\bugonpage D483, line 7 (06/25/04) + +\ninepoint\noindent +\quad$\\{max\_tfm\_dimen}\gets16\ast\\{internal}[\\{design\_size}]-1 + -\\{internal}[\\{design\_size}]\mathbin{\hbox{\bf div}}\Oct{10000000}$; + +\bugonpage D483, lines 15--17 (06/25/04) + +\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}])$; + +\bugonpage D496, line 2 (06/25/04) + +\noindent +a pointer to +an edge structure. Its mission is to describe the positive pixels +in \.{GF} form,\cutpar + +\bugonpage D500, line 16 (06/25/04) + +\ninepoint\noindent +\quad$\\{selector}\gets\\{old\_setting}$; + $\\{gf\_out}(\\{cur\_length})$; + $\\{gf\_string}(0,\\{make\_string})$; + $\\{decr}(\\{str\_ptr})$; + +\bugonpage D506, lines 8--10 (06/25/04) + +\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. + +\bugonpage D514, line 14 from the bottom (06/25/04) + +\noindent +\.{CMMF}, should also be provided for commonly used bases such as \.{cmbase}. + + % 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 `--' + +\bugonpage E1, line 3 (01/06/06) + +\tenpoint\noindent +Zillions of alphabets can be generated by the programs in this book. +All\cutpar + +\bugonpage E6, lines 16--19 (12/29/04) + +\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 E7, line 11 (12/21/02) + +\ninepoint\indent +\\{hair}, \\{vair}, \\{stem}, \\{curve}, \\{ess}, \\{flare}, \\{dot\_size}, + \\{bar}, \\{slab}, + +\bugonpage E7, line 14 (12/21/02) + +\ninepoint\indent +\\{crisp}, \\{tiny}, \\{fine}; +\medskip\noindent +and \\{thin\_join} should not be less than \\{fine}. + +\bugonpage E19, line 19 (11/07/01) + +\tenpoint +\line{\\{cap\_notch\_cut}\hskip 0pt plus1.5fil46/36\hfil31/36\hfil25/36\hfil +24/36\hfil22/36\hskip0pt plus3fil25/36} + +\bugonpage E41, line 8 (12/21/02) + +\ninepoint\noindent\mathchardef\AM="2026 % ampersand +\quad$\\{extra\_endchar}\gets\\{extra\_endchar}\AM + \.{\char`"charcode:=charcode+code\char`\_offset;"}$; + +\bugonpage E53, line 7 (12/21/02) + +\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 E125, line 6 from the bottom (07/10/05) + +\ninepoint\noindent +$\\{top}\,y_1=\\{top}\,y_6=h$; $z_2=.5[z_3,z_1]+\\{bend}$; + +\bugonpage E125, line 3 from the bottom (07/10/05) + +\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 E146, also pages 164 and 540 (02/08/03) + +\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 E147, line 11 from the bottom (04/23/04) + +\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$; + +\bugonpage E147, line 8 from the bottom (04/23/04) + +\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]$; + +\bugonpage E149, line 8 from the bottom (04/23/04) + +\ninepoint\noindent +$y_5+.1\\{x\_height}=y_7=.5[y_6,y_8]$; $\\{bot}\,y_{6r}=-\\{oo}$; + +\bugonpage E157, line 11 (02/29/08) + +\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} + +\bugonpage E161, line 7 from the bottom (04/23/04) + +\ninepoint\noindent +$\\{top}\,y_{1r}=\\{x\_height}+\\{oo}$; $y_2=y_4=.5[y_1,y_3]$; + $\\{bot}\,y_{3r}=-\\{oo}$; + +\bugonpage E209, line 3 (12/29/04) + +\ninepoint +\rightline{\% This lowercase italic alphabet was prepared by D. E. Knuth + in December, 1979,} + +\bugonpage E377, lines 3 and 4 from the bottom (12/22/02) + +\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} + +\bugonpage E379, lines 17 and 18 become one line (01/06/14) + +\ninepoint\noindent +{\bf else}: $\\{rt}\,x_{6r}={\rm hround}(w-1.5u)$; +$y_{6}=y_{5l}+\\{eps};$ {\bf fi} + +\bugonpage E379, bottom line of the program (01/06/14) + +\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}; + +\bugonpage E489, bottom line (06/25/04) + +\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.] + +\bugonpage E545, line 11 from the bottom (12/29/04) + +\parindent=36pt +The most important general routine in |cmbase| is probably the {\it pos}\cutpar + +\bugonpage E551, line 3 from the bottom (12/29/04) + +\noindent quantities needed in the |calu| +programs are also established at this time. + + +\bugonpage E577, right column (12/23/02) + +\eightpoint\noindent +\\{p\_}\kern1pt, 305, 377.\par\noindent +{\bf padded}, 103--111, 117--121, $\underline{549}$. + +\bugonpage E578, left column (12/23/02) + +\eightpoint\noindent +{\bf postcontrol}, 347, 377.\par\noindent +{\bf precontrol}, 347, 377. + + \bye -- cgit v1.2.3