% 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