% Bugs (sigh) in Computers \& Typesetting \input manmac \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\par}} \def\rhead{Bugs in {\tensl Computers \& Typesetting, 1992}} \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 corrections made to {\sl Computers \& Typesetting\/} between 15 March 1992 and the publication of the final printed versions of those books. Corrections made to the softcover version of {\sl The \TeX book\/} are the same as corrections to Volume~A\null. Corrections to the softcover version of {\sl The \slMF\kern1ptbook\/} are the same as corrections to Volume~C\null. Changes to Volume~B refer to the fourth printing (1991), which differs markedly from earlier printings because it includes all the revisions for \TeX3.0. Changes to Volume~D refer to the third printing (1991), which differs markedly from earlier printings because it includes all the revisions for \MF\kern1pt2.0. Changes to the mini-indexes and master indexes of Volumes B and~D are not shown here unless they are not obviously derivable from what has been shown. \looseness=-1 % volume A \bugonpage A23, line 14 (9/1/92) \tenpoint\noindent a command and you type `|tex|' or `|run| |tex|' or something like that.) \bugonpage A53, line 23 (7/7/92) \tenpoint\noindent {\sl scientiarum imperialis petropolitan\ae\/} became {\sl Akademi\t\i a Nauk SSSR, Doklady}. \bugonpage A146, line 2 from the bottom (2/25/93) |$\bigl|\|| |\||x|\||-|\||y|\|| \bigr|\||$|\hskip1.25in $\bigl\vert\vert x\vert-\vert y\vert\bigr\vert$ \bugonpage A149, lines 3--5 (2/25/93) \noindent example, we used |\bigl| and |\bigr| to produce $\bigl\vert\vert x\vert- \vert y\vert\bigr\vert$ in one of the previous illustrations; |\left| and |\right| don't make things any bigger than necessary, so `|$\left|\||\left|\||x\right|\||-\left|\||y\right|\||\right|\||$|' yields only `$\left\vert \left\vert x\right\vert -\left\vert y\right\vert \right\vert$'.\cutpar \bugonpage A158, line 18 from the bottom (2/25/93) \ninepoint are four possibilities for each of these fields. A field can be \bugonpage A282, line 9 from the bottom (7/8/92) \ninepoint\noindent category~4) are intercepted by the alignment process, en route to \TeX's stomach, so\cutpar \bugonpage A293, new paragraph after line 15 (4/9/92) \ninepoint \textindent{$\bull$}|\unhbox|\<8-bit number>, |\unhcopy|\<8-bit number>.\enskip The specified box register must be void. Nothing happens. \bugonpage A309, line 23 (7/7/92) \ninepoint\noindent |petropolitan\ae\/} became {\sl Akademi\t\i a Nauk SSSR, Doklady}.| \bugonpage A320, line 11 (1/26/93) \ninepoint \ansno17.12: |$\bigl(x+f(x)\bigr) \big/ \bigl(x-f(x)\bigr)$|. \ Notice especially the\cutpar \bugonpage A349, second line from the bottom (7/8/92) \ninepoint\noindent expand to a ^\ en route to \TeX's ``stomach''; |\multiply| wouldn't work, because\cutpar \bugonpage A358, bottom line (2/3/93) \ninepoint\noindent it is easy to define ^|\ldots| and ^|\cdots| macros that give the proper spacing in most\cutpar \bugonpage A370, lines 28 and 29 (9/1/92) \def\Russiantt#1{{\tt\hbox to.5em{\hss\eighttt\char#1\hss}}} \ninepoint\noindent example, if \TeX\ is implemented for a purely ^{Cyrillic} ^^{Russian} keyboard, the letter `\Russiantt5' should be assigned to code \oct{160} and `\Russiantt{`T}' to code \oct{164}, so that `\Russiantt5\Russiantt{`T}' still means `|pt|'; or else control\cutpar \bugonpage A377, lines 17--24 (5/4/92) \ninepoint \begintt \def\sanswitch{\let\n@xt\endsanity \ifx\next\endsanity \else\ifcat\noexpand\next\stoken\aftergroup\space\let\n@xt=\eat \else\ifcat\noexpand\next\bgroup\aftergroup{\let\n@xt=\eat \else\ifcat\noexpand\next\egroup\aftergroup}\let\n@xt=\eat \else\let\n@xt=\copytok\fi\fi\fi\fi \n@xt} \def\eat{\afterassignment\sanitize \let\next= } \long\def\copytok#1{\ifcat\noexpand#1\relax\aftergroup\noexpand\fi \ifcat\noexpand#1\noexpand~\aftergroup\noexpand\fi \endtt \bugonpage A455, line 25 (2/26/93) \ninepoint\noindent rent language'' is set equal to |\language|. Whenever a character is added to the cur-\cutpar \bugonpage A459, second line of entry for ampersand (3/22/92) \eightpoint\indent\qquad {\it231--248}, $\underline{282}$, {\it339}, 344, 385--386, 428. \bugonpage A461, right column (2/19/93) \eightpoint \newbox\astbox \setbox\astbox=\hbox to0pt{\hss\lower1pt\hbox{*}} \def\prim#1{\par\indent\copy\astbox{\tt\char`\\#1}} \prim{chardef}, 44, 121, 155, 210, 214, 215, 271,\par \indent\qquad $\underline{277}$, 336, {\it343}, {\it345}, {\it356}, 452.\par \indent\, $\underline{271}$, 283, 286, 289. \bugonpage A467, left column (2/25/93) \eightpoint Greek, 127--128, 137, 156, 164, 319,\par \indent\qquad 358, 430, 434. \bugonpage A470, left column (2/25/93) \eightpoint margins, {\sl see\/} |\hoffset|, |\hsize|, |\narrower|. \bugonpage A471, left column (2/19/93) \eightpoint \prim{mathchardef}, 155, 199, 214, 215, 271,\par \indent\qquad 277, 289, 336, {\it358}, {\it394}.\par \indent\, $\underline{271}$, 289. \bugonpage A474, right column (3/22/92) \eightpoint pound sterling, 54, {\it339}, 428. \bugonpage A477, right column (3/22/92) \eightpoint sterling, 54, {\it339}, 428. \bugonpage A480, left column (4/9/92) \eightpoint \prim{unhbox}, 120, 283, $\underline{285}$, 293, {\it354}, {\it356}, {\it399}.\par \prim{unhcopy}, 120, 283, $\underline{285}$, 293, {\it353}. \bugonpage A481, left column (2/25/93) \eightpoint whatsits, 95, 110, 157, 226--229, 455. \bugonpage A483, lines 15--21 (2/25/93) {\tt P.O. Box 869\par Santa Barbara, CA 93102-0869 USA.\par |}|} \smallskip\noindent Don't delay, write today! That number again is \smallskip {\obeylines \TeX\ Users Group P.O. Box 869 Santa Barbara, CA 93102-0869 USA. } % volume B \hsize=35pc \def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers \def\to{\mathrel{.\,.}} % double dot, used only in math mode \bugonpage B2, line 10 from the bottom (2/27/93) \ninepoint\noindent\hskip10pt {\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$% {\tt This\]is\]TeX,\]Version\]3.1415\char'23}\quad $\{\,$printed when \TeX\ starts$\,\}$ \bugonpage B89, line 12 (2/27/93) \tenpoint \noindent\hskip10pt In horizontal mode, the \\{prev\_graf} field is used for initial language data. \bugonpage B89, line 20 (2/27/93) \ninepoint \noindent\hskip20pt \\{pg\_field}, \\{ml\_field}: \\{integer}; \ \\{aux\_field}: \\{memory\_word}; \par \noindent [Also delete the definitions of \\{lhmin} and \\{rhmin}, lines 32 and 33.] \bugonpage B90, line 13 (2/27/93) \ninepoint \noindent\hskip10pt $\\{prev\_depth}\gets\\{ignore\_depth}$; \ $\\{mode\_line}\gets0$; \ $\\{prev\_graf}\gets0$; \bugonpage B91, top three lines (2/27/93) \ninepoint \noindent\hskip20pt {\bf if\/} $m=\\{hmode}$ {\bf then if\/} $\\{nest}[p].\\{pg\_field}\ne \oct{40600000}$ {\bf then}\par\noindent\hskip40pt {\bf begin} \\{print}({\tt\char`\"\](language\char`\"}); \ \\{print\_int}(\\{nest}[$p$].\\{pg\_field} {\bf mod} \oct{200000});\par \noindent\hskip40pt \\{print}({\tt\char`\":hyphenmin\char`\"}); \ \\{print\_int}(\\{nest}[$p$].\\{pg\_field} {\bf div} \oct{20000000}); \ \\{print\_char}({\tt\char`\",\char`\"});\par\noindent\hskip40pt \\{print\_int}((\\{nest}[$p$].\\{pg\_field} {\bf div} \oct{200000}) {\bf mod} \oct{100}); \ \\{print\_char}({\tt\char`\")\char`\"}); \bugonpage B344, lines 21 and 22 (2/27/93) \tenpoint\noindent\hskip10pt This code assumes that a \\{glue\_node} and a \\{penalty\_node} occupy the same number of \\{mem}~words. \bugonpage B344, line 30 (2/27/93) \ninepoint\noindent\hskip10pt $\\{link}(\\{tail})\gets\\{new\_param\_glue}(\\{par\_fill\_skip\_code})$; \ $\\{init\_cur\_lang}\gets\\{prev\_graf}$ {\bf mod} \oct{200000};\par \noindent\hskip10pt $\\{init\_l\_hyf}\gets\\{prev\_graf}$ {\bf div} \oct{20000000}; \ $\\{init\_r\_hyf}\gets(\\{prev\_graf}$ {\bf div} \oct{200000}) {\bf mod} \oct{100}; \ \\{pop\_nest}; \bugonpage B353, line 4 (2/27/93) \tenpoint\noindent\hskip10pt Kern nodes do not disappear at a line break unless they are \\{explicit}. \bugonpage B353, lines 15 and 16 (2/27/93) \ninepoint\noindent\hskip20pt \\{math\_node}: $\\{break\_width}[1]\gets\\{break\_width}[1]-\\{width}(s)$;\par \noindent\hskip20pt \\{kern\_node}: {\bf if\/} $\\{subtype}(s)\ne\\{explicit}$ {\bf then goto} \\{done}\par\noindent\hskip30pt {\bf else} $\\{break\_width}[1]\gets\\{break\_width}[1]-\\{width}(s)$; \bugonpage B354, lines 6 and 7 (2/27/93) \tenpoint\noindent will be the background plus $l_1$, so the length from \\{cur\_p} to \\{cur\_p} should be $\gamma+l_0+l_1-l$. If the post-break text of the discretionary is empty, a break may also discard~$q$; in that unusual case we subtract the length of~$q$ and any other nodes that will be discarded after the discretionary break. \bugonpage B354, line 18 (2/27/93) \ninepoint\noindent\hskip20pt {\bf begin} $\langle\,$Add the width of node $s$ to \\{break\_width}{\sevenrm \kern.5em842}$\,\rangle$; \bugonpage B354, line 22 (2/27/93) \ninepoint\noindent\hskip10pt {\bf if\/} $\\{post\_break}(\\{cur\_p})=\\{null}$ {\bf then} $s\gets\\{link}(v)$;\quad$\{\,$nodes may be discardable after the break$\,\}$ \bugonpage B355, top line (2/27/93) \ninepoint\noindent {\tenbf842.\quad}$\langle\,$Add the width of node $s$ to \\{break\_width}{\sevenrm\kern.5em842}$\,\rangle\equiv$ \bugonpage B355, lines 9--14 (2/27/93) \ninepoint\noindent\hskip20pt $\\{hlist\_node},\\{vlist\_node},\\{rule\_node},\\{kern\_node}$: $\\{break\_width}[1]\gets\\{break\_width}[1]+\\{width}(s)$;\par \noindent\hskip20pt {\bf othercases} \\{confusion}({\tt\char`\"disc2\char`\"})\par \noindent\hskip20pt {\bf endcases} \bugonpage B364, line 10 (2/27/93) \tenpoint\noindent a glue node, penalty node, explicit kern node, or math node. \bugonpage B366, line 11 from the bottom (2/27/93) \ninepoint\noindent \\{kern\_node}: {\bf if\/} $\\{subtype}(\\{cur\_p})=\\{explicit}$ {\bf then} \\{kern\_break}\par\noindent\hskip10pt {\bf else} $\\{act\_width}\gets\\{act\_width}+\\{width}(\\{cur\_p})$; \bugonpage B367, line 21 (2/27/93) \ninepoint\noindent\hskip20pt {\bf else if\/} \\{precedes\_break}(\\{prev\_p}) {\bf then} $\\{try\_break}(0,\\{unhyphenated})$\par\noindent\hskip20pt {\bf else if\/} $(\\{type}(\\{prev\_p})=\\{kern\_node})\land (\\{subtype}(\\{prev\_p})\ne\\{explicit})$ {\bf then} $\\{try\_break}(0,\\{unhyphenated})$; \bugonpage B372, lines 12 and 13 (2/27/93) \ninepoint\noindent\hskip20pt {\bf if\/} $\\{type}(q)=\\{kern\_node}$ {\bf then}\par\noindent\hskip30pt {\bf if\/} $\\{subtype}(q)\ne\\{explicit}$ {\bf then goto} \\{done1}; \bugonpage B376, line 3 from the bottom (2/27/93) \ninepoint\noindent\hskip10pt $\\{cur\_lang}\gets\\{init\_cur\_lang}$; \ $\\{l\_hyf}\gets\\{init\_l\_hyf}$; \ $\\{r\_hyf}\gets\\{init\_r\_hyf}$; \bugonpage B377, lines 11 and 12 (2/27/93) \ninepoint\noindent $\\{cur\_lang},\\{init\_cur\_lang}$: \\{ASCII\_code};\quad $\{\,$current hyphenation table of interest$\,\}$\par\noindent $\\{l\_hyf},\\{r\_hyf},\\{init\_l\_hyf},\\{init\_r\_hyf}$: \\{integer};\quad $\{\,$limits on fragment sizes$\,\}$ \bugonpage B378, line 5 from the bottom, overriding earlier change (2/27/93) \ninepoint\noindent\hskip30pt {\bf else if} $(\\{type}(s)=\\{kern\_node})\land(\\{subtype}(s)=\\{normal})$ {\bf then}\par\noindent\hskip50pt {\bf begin} $\\{hb}\gets s$; \ $\\{hyf\_bchar}\gets\\{font\_bchar}[\\{hf}]$; \ {\bf end}\par\noindent\hskip40pt {\bf else goto} \\{done3}; \bugonpage B394, lines 12 and 13 (2/27/93) \ninepoint\noindent\hskip10pt {\bf var} $n$: $0\to64$;\quad$\{\,$length of current word; not always a \\{small\_number}$\,\}$\par\noindent\hskip20pt $j$: $0\to64$;\quad$\{\,$an index into \\{hc}$\,\}$ \bugonpage B404, line 21 (2/27/93) \ninepoint\noindent\hskip10pt {\bf var} $k,l$: $0\to64$;\quad$\{\,$indices into \\{hc} and \\{hyf}; not always in \\{small\_number} range$\,\}$ \bugonpage B460, lines 21 and 22 (2/27/93) \ninepoint\noindent\hskip10pt \\{push\_nest}; \ $\\{mode}\gets\\{hmode}$; \ $\\{space\_factor}\gets1000$; \ \\{set\_cur\_lang}; \ $\\{clang}\gets\\{cur\_lang}$;\par\noindent\hskip10pt $\\{prev\_graf}\gets(\\{norm\_min}(\\{left\_hyphen\_min})\ast\oct{100}+ \\{norm\_min}(\\{right\_hyphen\_min}))\ast\oct{200000}+\\{cur\_lang}$; \bugonpage B492, line 6 from the bottom (2/27/93) \ninepoint\noindent\hskip10pt \\{unsave}; \ $\\{prev\_graf}\gets\\{prev\_graf}+3$;\par\noindent\hskip10pt \\{push\_nest}; \ $\\{mode}\gets\\{hmode}$; \ $\\{space\_factor}\gets1000$; \ \\{set\_cur\_lang}; \ $\\{clang}\gets\\{cur\_lang}$;\par\noindent\hskip10pt $\\{prev\_graf}\gets(\\{norm\_min}(\\{left\_hyphen\_min})\ast\oct{100}+ \\{norm\_min}(\\{right\_hyphen\_min}))\ast\oct{200000}+\\{cur\_lang}$; % volume C \hsize=29pc \def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers \bugonpage C151, line 11 from the bottom (6/26/93) \ninepoint\indent \qquad scaled $1.42(1+\max(-\\{pen\_lft},\\{pen\_rt},\\{pen\_top}, -\\{pen\_bot}))$ \bugonpage C262, line 15 (6/26/93) \ninepoint\noindent |string base_name, base_version; base_name="plain"; base_version="2.71";| \bugonpage C262, line 29 (6/26/93) \ninepoint\noindent |def |^|gobble|| primary g = enddef; def |^|killtext|| text t = enddef;| \bugonpage C271, bottom line (6/26/93) \ninepoint\noindent | culldraw p enddef;| \bugonpage C272, three new lines for top of page (6/26/93) {\ninepoint\parindent=0pt |def |^|culldraw|| expr p = addto pic_ doublepath p.t_ withpen currentpen;|\par | cull pic_ dropping(-infinity,0) withweight default_wt_;|\par | addto_currentpicture also pic_; pic_:=nullpicture; killtext enddef;|\par } \bugonpage C272, replacement for former line 5 (6/26/93) \ninepoint\noindent | (cut_ scaled (1+max(-pen_lft,pen_rt,pen_top,-pen_bot))| \bugonpage C296, line 24 (2/3/93) \ninepoint\noindent the definition of |rp| is changed to `|]..tension 4..|', and if `|scaled|~|5pt|' is inserted\cutpar \bugonpage C299, line 3 (5/15/92) \ninepoint\noindent a Bernshte{\u\i}n polynomial of order $n-1$.) \bugonpage C347, left column (5/15/92) \eightpoint Bernshte{\u\i}n, Serge{\u\i} \thinspace Natanovich, 14. \bugonpage C348, left column (6/26/93) \eightpoint |culldraw|, {\it271}, $\underline{272}$. \bugonpage C350, left column (6/26/93) \eightpoint exponential, {\sl see\/} |mexp|. \bugonpage C352, left column (6/26/93) \eightpoint |killtext|, $\underline{262}$, {\it 272}. \bugonpage C352, right column (6/26/93) \eightpoint logarithm, {\sl see\/} |mlog|. \bugonpage C361, lines 14 and 15 (2/25/93) P.O. Box 869\par Santa Barbara, CA 93102-0869 USA. % Volume D \hsize=35pc \def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers \def\to{\mathrel{.\,.}} % double dot, used only in math mode \bugonpage D190, and subsequent pages (6/26/93) \noindent[Several changes to the code in sections 415, 416, 424, and 425 were made to \MF\ version 2.71 in July~1991, too numerous to mention here.] \bugonpage D216, line 10 from the bottom (7/15/92) \tenpoint\noindent will be offset by $w_1$ or $w_2$, unless its slope drops to zero en route to the eighth octant; in the latter\cutpar \bugonpage D289, lines 9 and 10 (6/26/93) \ninepoint\noindent\hskip20pt $p\gets\\{dep\_list}(p)$; \ $r\gets\\{inf\_val}$;\par\noindent\hskip20pt {\bf repeat if\/} $\\{value}(\\{info}(p))\ge\\{value}(r)$ {\bf then} % volume E \hsize=29pc \def\dashto{\mathrel{\hbox{-\kern-.05em}\mkern3.9mu\hbox{-\kern-.05em}}} \bye