dwww Home | Show directory contents | Find package

% 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|\<number>|=|\<file name>

\bugonpage A290, lines 25--26 (02/24/08)

\ninepoint\textindent{$\bull$}
\<leaders>\<box or rule>\<horizontal skip>.\enskip
Here \<horizontal skip> refers to one of the first five glue-appending
commands just mentioned; the formal syntax for \<leaders>\cutpar

\bugonpage A292, line 15 (12/02/02)

\ninepoint\noindent
are defined as in the
second alternative of a \<math field>, 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 \<variable>
should actually be replaced by a slightly more complicated pair of rules:


\bugonpage C129, line 16 (02/21/08)

\ninepoint\beginsyntax
<path subexpression>\is<path expression not ending with direction specifier>\kern-5pt\null
\endsyntax

\bugonpage C130, lines 13--15 from the bottom (09/13/03)

\ninepoint\noindent
point but not after it, the
nonempty one is duplicated in a similar way. A~basic path join
`$\to\controls u\and v\to$' specifies explicit control points that
override any direction specifiers that may immediately surround it.

\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
\<loop>\is\<loop header>|:|\<loop text> {\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
<path subexpression>\is<path expression not ending with direction specifier>\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|\<tag>' in a \<suffix list>.

\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 \<boolean primary>.)

\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

Generated by dwww version 1.15 on Sat May 18 09:08:35 CEST 2024.