diff options
author | Karl Berry <karl@freefriends.org> | 2009-09-28 15:26:51 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2009-09-28 15:26:51 +0000 |
commit | a7413da58c33f9b31d87d35b556eb455cefa06eb (patch) | |
tree | b59f692447d22dc87daf0b5dfbeebd9efade46f2 /Master/texmf-dist/doc/generic/knuth | |
parent | 260b43e151d5de7cbb40d61e955924b58dc0c98d (diff) |
re-update knuth, no need to move source/
git-svn-id: svn://tug.org/texlive/trunk@15510 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/generic/knuth')
16 files changed, 0 insertions, 15769 deletions
diff --git a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.eight b/Master/texmf-dist/doc/generic/knuth/source/errata/errata.eight deleted file mode 100644 index f7ceafd9f69..00000000000 --- a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.eight +++ /dev/null @@ -1,610 +0,0 @@ -% 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 ^\<number> 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\<chardef token>, $\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\<mathchardef token>, $\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=29pc -\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers -\def\to{\mathrel{.\,.}} % double dot, used only in math mode - -\bugonpage Dxiv, line 13 (4/19/96) - -\noindent preprocessor converts these into numeric constants that are -256 or more. This\cutpar - -\bugonpage Dxiv, line $-1$ (4/19/96) - -\ninepoint\noindent This file contains one line per string, starting with -string number 256, then number 257,\cutpar - -\bugonpage Dxv, lines 10 and 11 (4/19/96) - -\ninepoint\noindent -In this case, occurrences of |""| in the |WEB| program will be replaced by -256; occurrences of |"This longer string"| will be replaced by 257. -The symbol |@$| stands for the numeric\cutpar - -\hsize=35pc -\bugonpage D2, line $-17$ (8/7/98) - -\def\RQ/{{\char'23}} % right quote in a string -\ninepoint\noindent -{\bf define} $\\{banner}\equiv\hbox{\tt\RQ/This\]is\]METAFONT,\]% - Version\]2.7182\RQ/}$\quad$\{\,$printed when \MF\ starts$\,\}$ - -\bugonpage D50, line 26 (8/7/98) - -\ninepoint\noindent -\quad{\bf if\/} $b>0$ {\bf then} - -\bugonpage D138, line 14 from the bottom (3/6/95) - -\tenpoint -\textindent{$2'$)} Let $Z_k^{(j+1)}={1\over2}(Z_k^{(j)}+Z_{k+1}^{(j)})$, for -$1\le k\le n-j$, for $1\le j<n$. - -\bugonpage D190, D191, D194, D195 (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. -They are documented in file {\tt mf84.bug} as bug number 560. We also -delete lines 4 and~5 of page D194.] - -\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} - -\bugonpage D296, lines 8 and 9 from the bottom (9/13/98) - -\ninepoint\noindent[Delete these spurious lines.] - -\bugonpage D297, mini-index (6/6/98) - -\eightpoint the meaning of {\it loc\/} should be `macro' - -\bugonpage D310, line 7 (8/7/98) - -\ninepoint\noindent -\quad{\bf if\/} $(\\{loc}=k+1)\land(\\{length}(\\{buffer}[k])=1)$ - {\bf then} $\\{cur\_mod}:=\\{buffer}[k]$ - -\bugonpage D363, lines 10 and 11 (3/1/95) - -\ninepoint\noindent -\quad {\bf begin if\/} $(\\{max\_c}[\\{dependent}]$ {\bf div} - $\oct{10000}\ge\\{max\_c}[\\{proto\_dependent}])$ {\bf then} - $t\gets\\{dependent}$ - -\bugonpage D512, line 13 (11/23/98) - -\ninepoint\noindent -\quad \\{print\_int}(\\{round\_unscaled}(\\{internal}[\\{year}])); \ - \\{print\_char}(|"."|); - -\bugonpage D518, insert new material between lines 7 and 8 (3/20/95) - -\ninepoint\noindent -\quad {\bf while} $\\{input\_ptr}>0$ {\bf do}\par\noindent -\qquad {\bf if\/} \\{token\_state} {\bf then} \\{end\_token\_list} - {\bf else} \\{end\_file\_reading};\par\noindent -\quad {\bf while} $\\{loop\_ptr}\ne\\{null}$ {\bf do} \\{stop\_iteration}; - -\bugonpage D518, line 18 (3/20/95) - -\ninepoint\noindent -\qquad $\\{loop\_ptr}\gets\\{cond\_ptr}$; \ - $\\{cond\_ptr}\gets\\{link}(\\{cond\_ptr})$; \ - $\\{free\_node}(\\{loop\_ptr},\\{if\_node\_size})$; - -\bugonpage D546, left column (4/11/96) - -\eightpoint -Stern, Moritz Abraham: \ 526. - -% volume E -\hsize=29pc -\def\dashto{\mathrel{\hbox{-\kern-.05em}\mkern3.9mu\hbox{-\kern-.05em}}} - - -\bye - diff --git a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.eleven b/Master/texmf-dist/doc/generic/knuth/source/errata/errata.eleven deleted file mode 100644 index 64d9f8ab457..00000000000 --- a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.eleven +++ /dev/null @@ -1,317 +0,0 @@ -% Bugs (sigh) in Computers \& Typesetting - -\input manmac -\def\curl{\mathop{\rm curl}} -\def\cycle{{\rm cycle}}\indent -\def\dashto{\mathrel{\hbox{-\thinspace-\kern-.05em}}} -\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, 2001}} -\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 first ``Millennium edition'' of 2000 and the -second such edition, which appeared late in 2001. -(More precisely, it lists errors to the 16th, 7th, 6th, 4th, and 5th -printings of Volumes A, B, C, D, and E, respectively, that were corrected -in the 17th, 8th, 7th, 5th, and 6th printings.) -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. -\looseness=-1 - -% volume A - -\bugonpage A16, line 7 from the bottom (06/30/01) - -\font\magnifiedfiverm=cmr5 at 10pt -\tenpoint\indent -Ten-point type is different from% - \magnifiedfiverm\ magnif{}ied f{}ive-point type. - -\bugonpage A17, line 7 (06/30/01) - -\ninepoint\indent -fications that grow in geometric ratios---something like equal-tempered -tuning\cutpar - -\bugonpage A51, lines 18--20 (06/30/01) - -\tenpoint\kern-6pt\noindent -$$\openup1pt\halign{\indent#\hfil\cr -|ff| yields ff\thinspace;$\!$\quad |fi| yields fi\thinspace;$\!$\quad -|fl| yields fl\thinspace;$\!$\quad -|ffi| yields ffi\thinspace;$\!$\quad |ffl| yields ffl\thinspace;\cr -|``| yields``\thinspace;\qquad |''| yields ''\thinspace;\qquad -|!||`| yields !`\thinspace;\qquad |?||`| yields ?`\thinspace;\cr -|--| yields --\thinspace;\qquad |---| yields ---\thinspace.\cr}$$ - -\bugonpage A52, line 7 from the bottom (06/30/01) - -\tenpoint\kern-6pt\noindent -$$\halign{\indent\hbox to 50pt{#\hfil}&\hbox to 35pt{#\hfil}&#\hfil\cr -|\ae,\AE|&\ae,\thinspace\AE&(Latin ligature and Scandinavian letter AE)\cr}$$ - -\bugonpage A71, line 15 (06/30/01) - -\tenpoint\indent -One of the interesting things that can happen when glue stretches and\cutpar - -\bugonpage A180, line 20 (06/30/01) - -\ninepoint\indent -Challenge number 5:\enspace -$\qquad\tenmath k=1.38065\times10^{-16}\rm\,erg\,K^{-1}$. - -\bugonpage A254, line 12 from the bottom becomes two lines (04/09/01) - -\ninepoint\noindent -\begintt -\output={\unvbox255 - \ifnum\outputpenalty<10000 \penalty\outputpenalty\fi} -\endtt - -\bugonpage A292, lines 13--16 (06/30/01) - -\def\s{\hskip0pt plus1pt} -\ninepoint\textindent{$\bull$}|\mathchoice|\s -$\langle$filler$\rangle$\s|{|\s$\langle$math mode material$\rangle$\s|}|\s -$\langle$filler$\rangle$\s|{|\s$\langle$math mode material$\rangle$\s|}|\break -$\langle$filler$\rangle$|{|$\langle$math mode material$\rangle$|}| -$\langle$filler$\rangle$|{|$\langle$math mode material$\rangle$|}|. -Four math lists, which are defined as in the -second alternative of a \<math field>, are -recorded in a ``choice item'' that is appended to the current list. - -\bugonpage A306, line 7 (06/30/01) - -\ninepoint\noindent -instead of a shelf{\kern0pt}ful. -In fact, the latter idea---to -insert an italic correction---is prefer-\cutpar - -\bugonpage A323, line 12 from the bottom (06/30/01) - -\ninepoint\noindent -\hbox to\parindent{\bf\hss18.31.\enspace}% -|$k=1.38065\times10^{-16}\rm\,erg\,K^{-1}$|. - -\bugonpage A451, line 15 (01/30/01) - -\tenpoint\noindent -{\sl Connecticut Yankee\/} come out with only nine or -ten bad hyphens: - -\bugonpage A451, line 23 (01/30/01) - -\tenpoint\noindent\begintt - mo-er-der-mohren-mut-ter-mar-mor-mon-u-menten-macher. -\endtt - -\bugonpage A454, lines 23--30 (06/30/01) - -\begingroup -\hyphenpenalty=-1000 \pretolerance=-1 \tolerance=1000 -\doublehyphendemerits=-100000 \finalhyphendemerits=-100000 -\ddanger If a suitable starting letter is found, let it be in font~$f$. -Hyphenation is abandoned unless the |\hyphenchar| of~$f$ is a number -between 0 and~255, inclusive. -If this test is passed, \TeX\ continues to scan forward -until coming to something that's not one of the following three -``admissible items'': (1)~a character in font~$f$ whose |\lccode| -is nonzero; (2)~a ligature formed entirely from characters of type~(1); -(3)~an implicit kern. The first inadmissible item terminates this part of -the process; the trial word consists of all the letters found in admissible -items. Notice that all of these letters are in font~$f$. -\par\endgroup - -\bugonpage A461, right column (07/08/01) - -\eightpoint\noindent -\llap{*}|\char|, {\it 43--45}, 76, 86, 155, 283, $\underline{286}$, - -\bugonpage A466, left column (07/09/01) - -\eightpoint\noindent -\llap{*}|\floatingpenalty|, $\underline{123}$--$\underline{124}$, - 272, 281, {\it 363}. - -\bugonpage A473, left column (06/30/01) - -\eightpoint\noindent -orphans, {\sl see\/} widow words. - -% volume B -\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers -\def\to{\mathrel{.\,.}} % double dot, used only in math mode - -\hsize=35pc - -\bugonpage B8, line 2 (05/04/01) - -\tenpoint\noindent -statements will be meaningful. We insert the label -`\\{exit}' just before the `{\bf end}' of a procedure in\cutpar - -\bugonpage B30, line $-4$ (05/04/01) - -\ninepoint\noindent -\quad{\bf begin} \\{update\_terminal};\quad$\{\,$now the user sees - the prompt for sure$\,\}$ - -\bugonpage B84, lines 22 and 27 (05/04/01) - -\ninepoint\noindent -\quad$\\{ignore}=9$\quad$\{\,$characters to ignore ( |^^@| )$\,\}$\par -\noindent -\quad$\\{active\_char}=13$\quad$\{\,$characters that invoke - macros ( |~| )$\,\}$ - -\bugonpage B280, lines 23 and 24 (04/08/01) - -\tenpoint\noindent -or unset nodes; in particular, each mlist item appears in the -variable-size part of \\{mem}, so the \\{type} field is always present. - -\bugonpage B382, line 6 (01/01/01) - -\tenpoint\noindent -between `fl' and `y', then $m=2$, $t=2$, and $y_1$ will -be a ligature node for `fl' followed by an\cutpar - -\bugonpage B386, line 11 (04/08/01) - -\ninepoint\noindent -\quad$\\{qi}(2),\\{qi}(6)$: {\bf begin} $\\{cur\_r}\gets\\{rem\_byte}(q)$;% - \quad$\{\,$\||=:|, \||=:>|$\,\}$ - -\bugonpage B475, line 12 (07/01/01) - -\ninepoint\noindent -\qquad{\bf end};\quad$\{\,$now we are in vertical mode, - working on the list that will contain the display$\,\}$ - -% 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 C204, line 3 from the bottom (07/08/01) - -\ninepoint\noindent -slightly. If $\\{autorounding}>1$, -you get even more changes: Paths are perturbed slightly\cutpar - -\bugonpage C238, lines 9 and 8 from the bottom (07/08/01) - -\ninepoint\noindent -tance is ${\rm length}(z_4-z_1)$. But there's a slicker solution: -Just calculate -$$\hbox{abs ypart$((z_1-z_2)\mathbin{\rm rotated}-{\rm angle}(z_3-z_2))$.}$$ - -\bugonpage C313, bottom line (06/30/01) - -\rightline{\eightss--- LA ROCHEFOUCAULD, {\eightssi Maximes\/}\enspace(1665)} - -\bugonpage C352, left column (06/30/01) - -\eightpoint\noindent -La Rochefoucauld, Fran\c cois VI, 313. - -\bugonpage C357, right column (07/08/01) - -\eightpoint\noindent -\llap{*}|true|, 55, {\it64\/}--{\it65}, 170, 210. - -% Volume D -\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers -\def\to{\mathrel{.\,.}} % double dot, used only in math mode - -\hsize=35pc - -\bugonpage D8, line 2 (05/04/01) - -\tenpoint\noindent -statements will be meaningful. We insert the label -`\\{exit}' just before the `{\bf end}' of a procedure in\cutpar - -\bugonpage D28, line $-8$ (05/04/01) - -\ninepoint\noindent -\quad{\bf begin} \\{update\_terminal};\quad$\{\,$now the user sees - the prompt for sure$\,\}$ - -\bugonpage D101, line 21 (07/08/01) - -\ninepoint\noindent -\quad{\bf define} $\\{subscr\_head\_loc}(\hbox{\tt\#})\equiv\hbox{\tt\#}+1$ -\quad$\{\,$where \\{value}, \\{subscr\_head}, and \\{attr\_head} are$\,\}$ - -\bugonpage D180, lines 22 and 23 (01/26/01) - -\tenpoint\noindent -$(y,-x)$ will appear in node~$p$. Similarly, a fourth-octant -transformation will have been applied after the transition, so -we will have $\\{x\_coord}(q)=\hbox{$-x$}$ and $\\{y\_coord}(q)=y$. - -\bugonpage D196, lines 7 and 8 (01/26/01) - -\tenpoint\noindent -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 D511, line 17 (07/03/01) - -\tenpoint\noindent -from appearing again. - -% 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 E9, line 9 (07/03/01) - -\tenpoint\indent -|[92] [123] [124]) ) )| - -\bye - - diff --git a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.five b/Master/texmf-dist/doc/generic/knuth/source/errata/errata.five deleted file mode 100644 index 4e2982f109a..00000000000 --- a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.five +++ /dev/null @@ -1,1108 +0,0 @@ -% 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, 1989}} -\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}, Volumes \hbox{A--E}, between 20 February 1989 and -30 September 1989 (when \TeX\ Version 3.0 and \MF\ Version 2.0 were -fully defined). 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. -Some of these corrections have already been made in reprintings -of the books. Several minor changes -to Volumes A~and~C are not shown here because they simply -make room for the more substantive changes needed to describe the new -features of \TeX\ Version 3.0 and \MF\ Version 2.0. Hundreds of -changes will soon be made to Volumes B~and~D because of the upgrades -to \TeX\ and \MF\/; it will unfortunately be impossible to document all of those -changes. Therefore, readers who need up-to-date information on the \TeX\ and -\MF\ programs should refer to the |WEB| source files until new -printings of Volumes B~and~D are issued. - -% volume A - -\buginvol A, in general (9/23/89) - -\ninepoint\noindent -[Change `127' to `255' and `128' to `256' in contexts referring to character -codes. This happens on pages 37(twice), 39, 41, 43, 44(twice), 48, 93, 154, -277, 305(twice), 308(twice), 313, and 343. Also change `7-bit' to `8-bit' on -pages 214 and 277.] - -\bugonpage A23, line 16 (9/23/89) - -|This is TeX, Version 3.0 (preloaded format=plain 89.7.15)| - -\bugonpage A34, new copy for bottom of page (9/23/89) - -\ddanger If you use \TeX\ format packages designed by others, your -error messages may involve many inscrutable two-line levels of macro -context. By setting ^|\errorcontextlines||=0| at the beginning of your file, -you can reduce the amount of information that is reported; -\TeX\ will show only the top and bottom pairs of context lines -together with up to |\errorcontextlines| additional two-line items. \ (If -anything has thereby been omitted, you'll also see `|...|'.) \ Chances -are good that you can spot the source of an error even when most of a -large context has been suppressed; if not, you can say -`|I\errorcontextlines=100\oops|' and try again. \ (That will usually -give you an undefined control sequence error and plenty of context.) \ -Plain \TeX\ sets |\errorcontextlines=5|. - -\bugonpage A45, lines 9--15 (9/23/89) - -\ninepoint\noindent -|^^| has an internal code between 64 and 127, \TeX\ -subtracts 64 from the code; if the code is between 0 and 63, \TeX\ -adds~64. Hence code 127 can be typed |^^?|, and -the dangerous bend sign can be obtained by saying -|{\manual^^?}|. However, you must change the category code of character -127 before using it, since this character ordinarily has category~15 -(^{invalid}); say, e.g., |\catcode`\^^?=12|. -^^{double hat} ^^{hat hat} -The |^^| notation is different from |\char|, because |^^| combinations are -like single characters; for example, it would not be permissible to say -|\catcode`\char127|, but |^^| symbols can even be used as letters within -control words. - -\bugonpage A45, new copy before line 20 (9/23/89) - -\danger There's also a special convention in which |^^| is -followed by {\sl two\/} ``lowercase hexadecimal digits,'' |0|--|9| or |a|--|f|. -With this convention, all 256 characters are obtainable in a uniform -way, from |^^00| to |^^ff|. Character 127 is |^^7f|. - -\noindent -[Also remove one of the two dangerous bend signs on line 20.] - -\bugonpage A45, bottom paragraph and footnote (9/23/89) - -\ddanger People who install \TeX\ systems for use with non-American alphabets -can make \TeX\ conform to any desired standard. For example, suppose -you have a ^{Norwegian keyboard} containing the letter {\tt\ae}, which -^^{Scandinavian letters} ^^{foreign languages} -comes in as code~241 (say). Your local format package should define -|\catcode`|{\tt\ae}|=11|; then you could have control sequences like -|\s|{\tt\ae}|rtrykk|. Your \TeX\ input files could be made readable by -American installations of \TeX\ that don't have your keyboard, by -substituting |^^f1| for character~241. \ (For example, the stated control -sequence would appear as |\s^^f1rtrykk| in the file; your American -friends should also be provided with the format that you used, with its -|\catcode`^^f1=11|.) \ Of course you should also arrange your fonts -so that \TeX's character 241 will print as {\ae}; and you should -change \TeX's hyphenation algorithm so that it will do correct -Norwegian hyphenation. The main point is that such changes are not -extremely difficult; nothing in the design of \TeX\ limits it to the -American alphabet. Fine printing is obtained by fine tuning to the -language or languages being used. -^^{keyboards, non-ASCII} - -\ddanger European languages can also be accommodated effectively with -only a limited character set. -For example, let's consider Norwegian again, but suppose that\parfillskip=0pt - -\noindent [Now continue with the text on line 11 of page 46.] - -\bugonpage A47, lines 9--21 (9/23/89) - -\ddanger If \TeX\ sees a superscript character (category 7) in any state, -and if that character is followed by another identical character, and if -those two equal characters are followed by a character of code -$c<128$, then they -are deleted and 64 is added~to or subtracted from the code~$c$. -\ (Thus, |^^A| is -replaced by a single character whose code is~1, etc., as explained earlier.) \ -However, if the two superscript characters are immediately followed by two -of the lowercase hexadecimal digits |0123456789abcdef|, the -four-character sequence is replaced by a single character having the -specified hexadecimal code. -The replacement is carried out also if such a trio or quartet of -characters is encountered during steps (b) or~(c) of the control-sequence-name -scanning procedure described above. After the replacement is made, \TeX\ -begins again as if the new character had been present all the time. -If a superscript character is not the first of such a trio or quartet, it is -handled by the following rule. - -\ddanger If \TeX\ sees a character of categories 1, 2, 3, 4, 6, 8, 11, 12, -or~13, -or a character of category~7 that is not the first of a special -sequence as just -described, it converts the character to a token by attaching the category -code, and goes into state~$M$. This is the normal case; almost every -nonblank character is handled by this rule. - -\bugonpage A48, line 15 (9/23/89) - -\ninepoint\noindent -the input line -`| $x^2$~ \TeX ^^62^^6|'\thinspace? - -\bugonpage A54, third line from the bottom (9/23/89) - -\ninepoint\noindent -For example, a well-designed \TeX\ font for ^{French} -might well treat accents as lig-\cutpar - -\bugonpage A76, lines 3--5 from the bottom (9/23/89) - -\ninepoint\noindent -\TeX\ does not assign any value to -|\sfcode'042|. - -\bugonpage A107, new copy for top of page (9/23/89) - -\ddanger If you want to avoid overfull boxes at all costs without -trying to fix them manually, you might be tempted to set -|tolerance=10000|; this allows arbitrarily bad lines to be acceptable -in tough situations. But infinite tolerance is a bad idea, because -\TeX\ doesn't distinguish between terribly bad and preposterously -horrible lines. Indeed, a tolerance of 10000 encourages \TeX\ to -concentrate all the badness in one place, making one truly unsightly -line instead of two moderately bad ones, because a single -``write-off'' produces fewest total demerits according to the rules. -There's a much better way to get the desired effect: \TeX\ has a -parameter called ^|\emergencystretch| that is added to the assumed -stretchability of every line when badness and demerits are computed, -in cases where overfull boxes are otherwise unavoidable. If -|\emergencystretch| is positive, \TeX\ will make a third pass over a -paragraph before choosing the line breaks, when the first passes did -not find a way to satisfy the ^|\pretolerance| and ^|\tolerance|. -The effect of\/ |\emergencystretch| is to scale down the badnesses so -that large infinities are distinguishable from smaller ones. By -setting |\emergencystretch| high enough (based on |\hsize|) you can be -sure that the |\tolerance| is never exceeded; hence overfull boxes -will never occur unless the line-breaking task is truly impossible. - -\bugonpage A116, lines 11--15 (6/7/89) - -\danger If you have two or more |\topinsert| or |\pageinsert| commands in -quick succession, \TeX\ may need to carry them over to several subsequent -pages; but they will retain their relative order when they are -carried over. For example, suppose you have pages that are nine inches -tall, and suppose you have already specified 4~inches of text for some -page, say page~25. Then suppose you make seven topinserts in a row, of% -{\parfillskip=0pt\endgraf}\endgroup - -\bugonpage A125, lines 13--29 (9/23/89) - -\ddanger \looseness=-1 -When the best page break is finally chosen, \TeX\ removes everything after -the chosen breakpoint from the bottom of the ``current page,'' and puts it -all back at the top of the ``recent contributions.'' The -chosen breakpoint itself is placed at the very top of the recent contributions. -If it is a penalty item, the value of the penalty is recorded in -^|\outputpenalty| and the penalty in the contribution list is changed -to $10000$; otherwise |\outputpenalty| is set to 10000. -The insertions that remain on the current page are of three kinds: For -each class~$n$ there are unsplit insertions, followed possibly by -a single split insertion, followed possibly by others. If -^|\holdinginserts|$\null>0$, all insertions remain in place (so that -they might be contributed again); otherwise they are all removed from -the current page list as follows: The unsplit insertions -are appended to |\box|$\,n$, with no interline glue between them. \ -(^{Struts} should be used, as in the |\vfootnote| macro of -Appendix~B\null.) \ -If a split insertion is present, it is effectively |\vsplit| to the size -that was computed previously in Step~4; the top part is treated as an -unsplit insertion, and the remainder (if any) is converted to an insertion -as if it had not been split. This remainder, followed by any other floating -insertions of the same class, is held -over in a separate place. \ (They will show up on the ``current page'' if -^|\showlists| is used while an ^|\output| routine is active; the total -number of such insertions appears in ^|\insertpenalties| during an -|\output| routine.) %\ -Finally, the remaining items before the best break on the current page are put -together in a |\vbox|\parfillskip=0pt - -\bugonpage A131, line 12 (9/22/89) - -\ninepoint\noindent -work fine; but sometimes you want to have uniformity -between different members of a\cutpar - -\bugonpage A155, lines 3--5 (9/23/89) - -\ninepoint\noindent -when it encounters a character that -is given explicitly as ^|\char|\<number>. - -\bugonpage A214, lines 19--24 (9/23/89) - -\ninepoint -\textindent\bull |\the|\<special register>, where \<special register> is -one of the integer quantities ^|\prevgraf|, ^|\deadcycles|, ^|\insertpenalties|, -^|\inputlineno|, ^|\badness|, -or ^|\parshape| (denoting only the number of lines of\/ |\parshape|); or -one of the dimensions ^|\pagetotal|, ^|\pagegoal|, ^|\pagestretch|, -^|\pagefilstretch|, ^|\pagefillstretch|, ^|\pagefilllstretch|, ^|\pageshrink|, -^|\pagedepth|. In horizontal modes you can also refer to a special integer, -|\the\spacefactor|; in vertical modes there's a special dimension, -|\the\prevdepth|. - -\bugonpage A229, new copy after line 11 (9/23/89) - -\ddanger \TeX\ will report the badness of glue setting in a box if -you ask for the numeric quantity -^|\badness| after making a box. For example, you might say -\begintt -\setbox0=\line{\trialtexta} -\ifnum\badness>250 \setbox0=\line{\trialtextb}\fi -\endtt -The badness is between 0 and 10000 -unless the box is overfull, when |\badness=1000000|. - -\bugonpage A271, lines 17--20 (9/23/89) - -\ninepoint -\beginsyntax - \alt<countdef token>\alt^|\count|<8-bit number>\alt<codename><8-bit number> - \alt<chardef token>\alt<mathchardef token>\alt^|\parshape|\alt^|\inputlineno| - \alt^|\hyphenchar|<font>\alt^|\skewchar|<font>\alt^|\badness| -\endsyntax - -\bugonpage A272, lines 3--4 (9/23/89) - -\ninepoint\noindent -value is between 0~and $2^8-1=255$; a ^\<4-bit number> is similar. - -\bugonpage A273, insert after lines 11, 20, 21, 21, 38 (9/23/89) - -\ninepoint -\begindisplay -|\holdinginserts|\quad(positive if insertions remain dormant in output box)\cr -|\language|\quad(the current set of hyphenation rules)\cr -|\lefthyphenmin|\quad(smallest fragment at beginning of hyphenated word)\cr -|\righthyphenmin|\quad(smallest fragment at end of hyphenated word)\cr -|\errorcontextlines|\quad(maximum extra context shown when errors occur)\cr -\enddisplay - -\bugonpage A274, insert after line 4 (9/23/89) - -\ninepoint\indent -|\emergencystretch|\quad(reduces badnesses on final pass of line-breaking) - -\bugonpage A275, line 13 (9/23/89) - -\ninepoint\noindent -That makes a total of 103 parameters of all five kinds. - -\bugonpage A283, line 14 (9/23/89) - -\ninepoint -\beginsyntax - \alt^|\noboundary|\alt^|\unhbox|\alt^|\unhcopy|\alt^|\valign|\alt^|\vrule| -\endsyntax - -\bugonpage A286, lines 3--12 from the bottom (9/23/89) - -\ninepoint -\textindent{$\bull$}% -\<letter>, \<otherchar>, \kern-1pt^|\char|\<8-bit number>, \<chardef token>, -\kern-1pt^|\noboundary|.\enskip -The most common commands of all are the character commands that tell -\TeX\ to append a character to the current horizontal -list, using the current font. -If two or more commands of this type occur in succession, \TeX\ processes -them all as a unit, converting to ligatures and/or -inserting kerns as directed by the font information. \ (Ligatures and -kerns may be influenced by invisible ``boundary'' characters at the left -and right, unless |\noboundary| appears.) \ Each character -command adjusts ^|\spacefactor|, using -the ^|\sfcode| table as described in Chapter~12. -In unrestricted horizontal mode, a -`|\discretionary{}{}{}|' item is appended after a character whose code is -the ^|\hyphenchar| of its font, or after a ligature formed from a sequence -that ends with such a character. - -\bugonpage A287, insert after line 19 (9/23/89) - -\ninepoint -\textindent{$\bull$}% -|\setlanguage|\<number>.\enskip See the conclusion of Appendix H. - -\bugonpage A289, lines 9--14 from the bottom (9/23/89) - -\ninepoint\noindent -$2^{15}-1$. This is done by replacing the character number by its -^|\mathcode| value. If the -|\mathcode| value turns out to be $32768=\null$\hex{8000}, however, - the \<character> -is replaced by an ^{active character} token having the original character -code (0 to~255); \TeX\ forgets the original \<character> and expands this -active character according to the rules of Chapter~20. - -\bugonpage A290, insert before 13th line from bottom (9/23/89) - -\ninepoint -\textindent{$\bull$}% -|\noboundary|. This command is redundant and therefore has no -effect; boundary ligatures are automatically disabled in math modes. - -\bugonpage A296, line 16 from the bottom (9/22/89) - -\noindent[There should be a `|^|' just above the `|3|' in the line below. -This was mistakenly dropped by the printer some time during 1985; it was -correct in the first two printings and it has always been correct inside the -computer!] - -\bugonpage A309, lines 3--5 (9/23/89) - -\ninepoint\noindent -\hbox to\parindent{\bf\hss8.4.\enspace}\ignorespaces -|$|$_{3}$ |x|$_{11}$ |^|$_7$ |2|$_{12}$ |$|$_{3}$ |~|$_{13}$ \]$_{10}$ -\cstok{TeX} |b|$_{12}$ |v|$_{12}$ \]$_{10}$. The final space comes from the -\<return> placed at the end of the line. Code |^^6| yields |v| only -when not followed by |0|--|9| or |a|--|f|. -The initial space is ignored, because state~$N$ -governs the beginning of the line. - -\bugonpage A314, line 27 (9/23/89) - -\ninepoint\noindent -The English word `eighteen' might deserve similar treatment. -\TeX's hyphenation algorithm will not make such spelling changes automatically. - -\bugonpage A318, line 19 (3/3/89) - -\ninepoint -|\def\clearnotenumber{\notenumber=0\relax}| - -\bugonpage A330, line 3 (8/25/89) - -\ninepoint\noindent -\hbox to\parindent{\bf\hss20.10.\enspace}\ignorespaces -|\def\overpaid{{\count0=\balance| - -\bugonpage A336, lines 4--8 from the bottom (9/23/89) - -\ninepoint\noindent -badness rating of a -box is at most 10000, except that the |\badness| of -an overfull box is 1000000. |INITEX| initializes |\tolerance| to -10000, thereby making all line breaks feasible. Penalties of 10000 or more -prohibit breaks; penalties of $-10000$ or less make breaks mandatory. The -cost of a page break is 100000, if the badness is 10000 and if the -associated penalties are less than 10000 in magnitude (see Chapter~15). - -\bugonpage A337, lines 2--16 (9/23/89) - -\ninepoint\noindent -ifies characters whose codes differ by~64 -from the codes of |?|, |@|, |A|; this convention applies only to -characters with ASCII codes less than~128. There are 256 possible characters, -hence 256 entries in each of the |\catcode|, |\mathcode|, -|\lccode|, |\uccode|, |\sfcode|, and |\delcode| tables. All -|\lccode|, |\uccode|, and |\char| values -must be less than~256. A font has at most 256 characters. There are -256~|\box| registers, 256~|\count| registers, 256~|\dimen| registers, -256~|\skip| registers, 256~|\muskip| registers, 256~|\toks| registers, -256~hyphenation tables. -The ``at size'' of a font must be less than~$2048\pt$, i.e.,~$2^{11}\pt$. -Math delimiters are encoded by multiplying the math~code of the ``small -character'' by~$2^{12}$. The magnitude of -a~\<dimen> value must be less than~$16384\pt$, i.e.,~$2^{14}\pt$; -similarly, the \<factor> in a~\<fil dimen> must be less than~$2^{14}$. -A~|\mathchar| or |\spacefactor| or |\sfcode| value must be less than~$2^{15}$; -a~|\mathcode| or |\mag| value must be less than or equal to~$2^{15}$, -and $2^{15}$ denotes an ``active'' math character. There -are $2^{16}\rm\,sp$ per~pt. A~|\delcode| value -must be less than~$2^{24}$; a~|\delimiter|, less than $2^{27}$. -The |\end| command sometimes contributes -a penalty of $-2^{30}$ to the current page. A~\<dimen> must be less than -$2^{30}\rm\,sp$ in absolute value; a~\<number> must be -less than $2^{31}$ in absolute value. - -\bugonpage A348, line 12 from the bottom (9/23/89) - -\ninepoint\noindent -^|\showboxbreadth||=5 |^|\showboxdepth||=3 |^|\errorcontextlines||=5| - -\bugonpage A364, insert before line 18 from the bottom (9/23/89) - -\ninepoint\noindent -^|\lefthyphenmin||=2 |^|\righthyphenmin||=3 % disallow x- or -xx breaks| - -\bugonpage A364, line 5 from the bottom (9/23/89) - -\ninepoint\noindent -|\def|^|\fmtname||{plain}\def\fmtversion{3.0} % identifies the current format| - -\bugonpage A369, insert before line 5 from the bottom (9/23/89) - -\ninepoint -Modern keyboards allow 256 codes to be input, not just 128; so \TeX\ -represents characters internally as numbers in the range 0--255 (i.e., -\oct{000}--\oct{377}, or \hex{00}--\hex{FF}). Implementations of \TeX\ -differ in which characters they will accept in input files and which -they will transmit to output files; these subsets can be specified -independently. A completely permissive version of \TeX\ allows full -256-character input and output; other versions might ignore all -but the visible characters of ASCII; still other versions might -distinguish the tab character (code \oct{011}) from a space on input, -but might output each tab as a sequence of three characters |^^I|. - -\bugonpage A370, lines 3--7 (9/23/89) - -\ninepoint\noindent -close as possible to the ASCII conventions. -\ (b)~Make sure that codes \oct{041}--\oct{046}, \oct{060}--\oct{071}, -\oct{141}--\oct{146}, and \oct{160}--\oct{171} are present and that -each unrepresentable -internal code $<\null$\oct{200} leads to a representable code when \oct{100} is -added or subtracted; then all 256 codes can be input and output. -\ (c)~Cooperate with everyone else who shares -the same constraints, so that you all adopt the same policy. -\ (See Appendix~J for information about the \TeX\ Users Group.) - -\bugonpage A370, bottom line (9/23/89) - -\ninepoint\noindent -doesn't matter if these symbols have their plain -\TeX\ meanings or not. \ (6)~There is a special convention for -representing characters 0--255 in the hexadecimal forms -|^^00|--|^^ff|, explained in Chapter~8. This convention is always -acceptable as input, when |^| is any character of catcode~7. Text -output is produced with this convention only when representing -characters of code $\ge128$ that a \TeX\ installer has chosen not to -output directly. - -\bugonpage A385, line 8 (5/14/89) - -\ninepoint -|\def\beginbox{\setbox0=\hbox\bgroup}| - -\bugonpage A400, line 18 from the bottom (9/23/89) - -\ninepoint\noindent -page prematurely if you want to pass a signal. \ (Set -^|\holdinginserts| positive to pass a signal when the contents of\/ -|\box255| will be sent back through the page builder again, if any -insertions are present.) - -\bugonpage A419, lines 4--6 (9/23/89) - -\ninepoint\noindent -shortened or lengthened anyway; -book preparation with \TeX, as with type, encourages interaction between -humans and machines.) \ -The lines of the quotations are set ^{flush right} by using -^|\obeylines| together with a stretchable ^|\leftskip|: - -\bugonpage A444, lines 21--26 (9/23/89) - -\ninepoint\noindent -following one, using the specified family and the current size, then -insert the ligature character and continue as specified by the font; -two characters may collapse into one, or a new character may appear. -Otherwise if the font information -shows a kern between the current symbol and the next, insert a kern item -after the current Ord atom and move to the next item after that. -Otherwise (i.e., if no ligature or kern is specified between the present -text symbol and the following character), go to Rule~17. - -\bugonpage A453, lines 12--14 from the bottom (9/23/89) - -\begingroup -\hyphenpenalty=-1000 \pretolerance=-1 \tolerance=1000 -\doublehyphendemerits=-100000 \finalhyphendemerits=-100000 -\ninepoint\noindent -Exception: The character -`|.|'~is treated as if it were a \<letter> of code~0 -when it appears in a pattern. Code~0 (which obviously cannot match a nonzero -|\lccode|) is used by \TeX\ to represent the -left or right edge of a word when it is being hyphenated. - -\endgroup - -\bugonpage A454, lines 7--15 from the bottom (9/23/89) - -\begingroup -\hyphenpenalty=-1000 \pretolerance=-1 \tolerance=1000 -\doublehyphendemerits=-100000 \finalhyphendemerits=-100000 -\ddanger If a trial word $l_1\ldots l_n$ has been found by this process, -hyphenation will still be abandoned unless $n\ge\lambda+\rho$, where -$\lambda=\max(1,\hbox{|\lefthyphenmin|})$ and -$\rho=\max(1,\hbox{|\righthyphenmin|})$. -\ (Plain \TeX\ takes $\lambda=2$ and $\rho=3$.) \ Furthermore, the items -immediately following the trial word must consist of zero or more -characters, ligatures, and implicit kerns, followed immediately by -either glue or an explicit kern or a penalty item or a whatsit or an -item of vertical mode material from ^|\mark|, ^|\insert|, or ^|\vadjust|. -Thus, a box or rule or math formula or discretionary following too closely -upon the trial word will inhibit hyphenation. (Since \TeX\ inserts -empty discretionaries after ^{explicit hyphens}, these rules imply that -already-hyphenated compound words will not be further hyphenated by -the algorithm.) - -\endgroup - -\bugonpage A455, new copy after line 13 (9/23/89) - -\begingroup -\hyphenpenalty=-1000 \pretolerance=-1 \tolerance=1000 -\doublehyphendemerits=-100000 \finalhyphendemerits=-100000 -\ddanger \looseness=-1 -So far we have assumed that \TeX\ knows only one style of -hyphenation at a time; but in fact \TeX\ can remember up to 256 -distinct sets of rules, if you have enough memory in your computer. An -integer parameter called ^|\language| selects the rules actually used; -every ^|\hyphenation| and ^|\patterns| specification appends new rules -to those previously given for the current value of\/ |\language|. -\ (If\/ |\language| is negative or greater than 255, \TeX\ acts as if -|\language|$\null=0$.) \ All |\patterns| for all languages must be -given before a paragraph is typeset, if |INITEX| is used for -typesetting. - -\ddanger \TeX\ is able to work with several languages in the same -paragraph, because it operates as follows. At the beginning of a -paragraph the ``current language'' is defined to be~0. Whenever a -character is added to the current paragraph (i.e., in unrestricted -horizontal mode), the current language is compared to |\language|; if -they differ, the current language is reset and a whatsit node -specifying the new current language is inserted before the character. -Thus, if you say `|\def\french{\language1...}|' and `|mix| |{\french -franc/ais}| |with| |English|', \TeX\ will put whatsits before the |f| -and the~|w|; hence it will use language~1 rules when hyphenating -|franc/ais|, after which it will revert to language~0. You can insert -the whatsit yourself (even in restricted horizontal mode) by saying -^|\setlanguage|\<number>; this changes the current language but it -does not change |\language|. - -\endgroup - -\bugonpage A459, right column (9/23/89) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\badness|, 214, {\it229}, 271. - -\bugonpage A461, right column (9/23/89) - -\eightpoint -caron, {\sl see\/} h\'a\v cek. - -\bugonpage A464, line 10 (5/15/89) - -\eightpoint -displays, 87, 103, {\it139--145}, {\it166--167}, - -\bugonpage A464, right column (9/23/89) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\emergencystretch|, $\underline{107}$, 274. - -\bugonpage A465, left column (9/23/89) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\errorcontextlines|, $\underline{34}$, 273, {\it348}. - -\bugonpage A466, entry for `fractions' (9/23/89) - -\eightpoint[Add page 332 to this entry.] - -\bugonpage A466, entry for `French'' (9/23/89) - -\eightpoint[Add page 455 to this entry.] - -\bugonpage A467, entry for `hexadecimal' (9/23/89) - -\eightpoint[Add pages 45, 47--48 to this entry.] - -\bugonpage A467, right column (9/23/89) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\holdinginserts|, $\underline{125}$, 273, 400. - -\bugonpage A467, bottom line (9/23/89) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\hyphenation|, 277, {\it419}, $\underline{452}$--$\underline{453}$, 455. - -\bugonpage A468, right column (9/23/89) - -\eightpoint -infinite badness, 97, 107, 111, 229, 317. - -\bugonpage A468, right column (9/23/89) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\inputlineno|, 214, 271. - -\bugonpage A469, entry for kerns (9/23/89) - -\eightpoint[Add pages 286 and 444 to this entry.] - -\bugonpage A469, left column (9/23/89) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\language| (hyphenation method), 273, $\underline{455}$. - -\bugonpage A469, right column (9/23/89) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\lefthyphenmin|, 273, {\it364}, $\underline{454}$. - -\bugonpage A470, entry for ligatures (9/23/89) - -\eightpoint[Add pages 286 and 444 to this entry.] - -\bugonpage A472, left column (9/23/89) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\noboundary|, 283, $\underline{286}$, 290. - -\bugonpage A473, right column (9/23/89) - -\eightpoint -overfull boxes, 27--30, 94, 229, 238,\par -\indent\qquad 302--303, 307, 400.\par -\indent\quad avoiding, 107. - -\bugonpage A474, left column (9/23/89) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\patterns|, 277, $\underline{453}$, 455. - -\bugonpage A476, left column (9/23/89) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\righthyphenmin|, 273, {\it364}, $\underline{454}$. - -\bugonpage A476, right column (9/23/89) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\setlanguage|, 287, $\underline{455}$. - -\bugonpage A476, right column (9/23/89) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\showboxbreadth|, 273, $\underline{302}$, 303, {\it348}.\par -\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\showboxdepth|, 79, 273, $\underline{302}$, 303, {\it348}. - -\bugonpage A479, left column (9/23/89) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\tolerance|, {\it29--30}, 91, 94, $\underline{96}$, 107, 272,\par -\indent\qquad{\it317}, {\it333}, {\it342}, {\it348}, {\it364}, {\it451}. - -\bugonpage A481, right column, last six entries (9/23/89) - -\def\frac#1/#2{\leavevmode\kern.1em - \raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em - /\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}}% -\eightpoint -\frac1/2, 67, 332.\par -1/2, in unslashed form, 141, 186.\par -\<4-bit number>, $\underline{271}$.\par -\<8-bit number>, $\underline{271}$, 276--278.\par -\<15-bit number>, $\underline{271}$, 277, 289, 291.\par -\<27-bit number>, $\underline{271}$, 289, 291.\par - -\bugonpage A483, lines 15 and 21 (9/23/89) - -\noindent[Delete these two lines, as TUG's address is no longer c/o AMS.] - -% 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 Bvii, top two lines (4/21/89) - -{\hsize=29pc -\tenpoint\noindent -{\it {\sltt WEB} documentation for four utility programs that are -often used in conjunction with \TeX: {\sltt POOLtype}, {\sltt TFtoPL}, -{\sltt PLtoTF}, and {\sltt DVItype}.} -\par} - -\bugonpage B2, line 32 (6/20/89) - -\ninepoint\noindent\hskip10pt -{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$% -{\tt This\]is\]TeX,\]Version\]2.991\char'23}\quad -$\{\,$printed when \TeX\ starts$\,\}$ - -\bugonpage B118, lines 2--4 (3/2/89) - -\ninepoint\noindent\hskip10pt -{\bf begin if\/} $\\{cur\_level}>\\{level\_one}$ {\bf then}\par -\noindent\hskip20pt{\bf begin} \\{check\_full\_save\_stack}; \ - $\\{save\_type}(\\{save\_ptr})\gets\\{insert\_token}$;\par -\noindent\hskip20pt$\\{save\_level}(\\{save\_ptr})\gets\\{level\_zero}$; \ - $\\{save\_index}(\\{save\_ptr})\gets t$; \ \\{incr}(\\{save\_ptr});\par -\noindent\hskip20pt{\bf end}; - -\bugonpage B182, line 13 becomes two lines (6/20/89) - -\ninepoint\noindent -$k,\\{kk}$: \\{small\_number};\quad - $\{\,$number of digits in a decimal fraction$\,\}$\par\noindent -$p,q$: \\{pointer};\quad - $\{\,$top of decimal digit stack$\,\}$ - -\bugonpage B182, line 15 from the bottom (6/20/89) - -\ninepoint\noindent\hskip10pt -{\bf begin} $k\gets0$; $p\gets\\{null}$; \\{get\_token};\quad - $\{\,$\\{point\_token} is being re-scanned$\,\}$ - -\bugonpage B182, line 11 from the bottom (6/20/89) - -\ninepoint\noindent\hskip30pt -{\bf begin} $q\gets\\{get\_avail}$; $\\{link}(q)\gets p$; - $\\{info}(q)\gets\\{cur\_tok}-\\{zero\_token}$; - $p\gets q$; $\\{incr}(k)$; - -\bugonpage B182, line 8 from the bottom (6/20/89) - -\ninepoint\noindent -\\{done1}: {\bf for} $\\{kk}\gets k$ {\bf downto} 1 {\bf do}\par -\noindent\hskip20pt -{\bf begin} $\\{dig}[kk-1]\gets\\{info}(p)$; $q\gets p$; $p\gets\\{link}(p)$; - $\\{free\_avail}(q)$;\par -\noindent\hskip20pt{\bf end};\par -\noindent\hskip10pt$f\gets\\{round\_decimals}(k)$; - -\bugonpage B332, lines 11 and 12 from the bottom (4/8/89) - -\ninepoint -\noindent\hskip10pt -{\bf begin if\/} $\\{cur\_align}=\\{null}$ {\bf then} - \\{confusion}({\tt\char'23endv\char'23});\par\noindent\hskip10pt -$q\gets\\{link}(\\{cur\_align})$; \ {\bf if\/} $q=\\{null}$ {\bf then} - \\{confusion}({\tt\char'23endv\char'23}); - -\bugonpage B466, line 5 becomes three lines (6/7/89) - -\ninepoint -\noindent -$\\{mmode}+\\{halign}$: {\bf if\/} \\{privileged} {\bf then}\par\noindent -\hskip20pt{\bf if\/} $\\{cur\_group}=\\{math\_shift\_group}$ - {\bf then} \\{init\_align}\par\noindent\hskip20pt -{\bf else} \\{off\_save}; - -\bugonpage B518, line 25 (8/31/89) - -\ninepoint\noindent\hskip10pt -$\\{undump}(\\{lo\_mem\_stat\_max}+1)(\\{lo\_mem\_max})(\\{rover})$; \ -$p\gets\\{mem\_bot}$; \ $q\gets\\{rover}$; - -% volume C -\hsize=29pc -\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers - -\buginvol C, in general (9/23/89) - -\ninepoint\noindent -[Change `127' to `255' and `128' to `256' in contexts referring to character -codes. This happens on pages 188(thrice) and 251.] - -\bugonpage C91, lines 12 and 13 (8/31/89) - -\begintt -\mode=cheapo; input newface -\endtt -and the same file should also produce a high-resolution font if we start with - -\bugonpage C204, line 4 (8/18/89) - -\ninepoint\noindent -so that -\\{currenttransform} multiplies all $y$~coordinates by -\\{aspect\_ratio}, when paths are\cutpar - -\bugonpage C212, lines 24--27 (9/30/89) - -\ninepoint -\begindisplay -{\it boundarychar}\quad&the right boundary character for ligatures and kerns\cr -\enddisplay -All of these quantities are numeric. They are initially zero at the -start of a job, except for {\it year\/}, {\it month\/}, - {\it day\/}, and {\it time\/}, which -are initialized to the time the run began; furthermore, {\it boundarychar\/} is -initially~$-1$. A {\it granularity\/} of zero is equivalent to - $\hbox{\it granularity\/}=1$. -A preloaded base file like plain \MF\ will usually give nonzero values to -several other internal quantities on this list. - -\bugonpage C259, lines 16 and 17 from the bottom (5/14/89) - -\tenpoint -\noindent -|screenchars|; \ |screenstrokes|; \ |imagerules|; \ |gfcorners|; \ -|nodisplays|;\hfil\break -|notransforms|; \ |input| \<filename>. - -\bugonpage C282, the three lines following the chart (9/30/89) - -\tenpoint\noindent -\MF\ can also be configured to accept any or all of the character codes -128--255. -However, \MF\ programs that make use of anything in addition to the 95 -standard ASCII characters cannot be expected to run on other systems, so -the use of extended character sets is discouraged. - -\bugonpage C316, bottom 14 lines and top 30 of page C317 (9/30/89) - -\ninepoint -Ligature information and kerning information is specified in short -``^{ligtable programs}'' of a particularly simple form. Here's an example -that illustrates most of the features (although it is not a serious -example of typographic practice): -\beginlines -^|ligtable|| "f": "f" =: oct"013", "i" |\||=: oct"020", skipto 1;| -|ligtable "o": "b": "p": "e" kern .5u#, "o" kern .5u#, "x" kern-.5u#,| -| 1:: "!" kern u#;| -\endlines -This sequence of instructions can be paraphrased as follows: -\smallskip -\hangindent 3pc -Dear \TeX, when you're typesetting an~`f' with this font, and when the -following character also belongs to this font, look at it closely because -you might need to do something special: If that following character is -another~`f', replace the two f's by character code |oct"013"| -[namely `\char'13'\kern.5pt]; -if it's an `i', retain the `f' but replace the `i' by character code -|oct"020"| [a dotless `\char'20'\kern.5pt]; -otherwise skip down to label `|1::|' for further instructions. -When you're typesetting an `o' or~`b' or~`p', if the next input to \TeX\ is -`e' or~`o', add a half unit -of space between the letters; if it's an `x', subtract a half unit; if it's an -exclamation point, add a full unit. The last instruction applies also -to exclamation points following~`f' (because of the label `|1::|'). -\smallskip\noindent -When a character code appears in front of a colon, the colon ``labels'' -the starting place for that character's ligature and kerning program, -which continues to the end of the ligtable statement. A double colon denotes -a ``local label''; a |skipto| instruction advances to the next matching local -label, which must appear before 128 ligtable steps intervene. The special -label \|\||:| can be used to initiate ligtable instructions for an invisible -``left boundary character'' that is implicitly present just before every -word; an invisible ``right boundary character'' equal to {\it boundarychar\/} is -also implicitly present just after every word, if {\it boundarychar\/} - lies between -0 and~255. - -The general syntax for ligtable programs is pretty easy to guess from -these examples, but we ought to exhibit it for completeness: -\beginsyntax \chardef\\=`\| -<ligtable command>\is[ligtable]<ligtable program><optional skip> -<ligtable program>\is<ligtable step>\alt<ligtable program>[,]<ligtable step> -<optional skip>\is[,] [skipto]<code>\alt<empty> -<ligtable step>\is<code><ligature op><code> - \alt<code>[kern]<numeric expression> - \alt<label><ligtable step> -<ligature op>\is[=:]\alt[\\=:]\alt[\\=:>]\alt[=:\\]\alt[=:\\>]% - \alt[\\=:\\]\alt[\\=:\\>]\alt[\\=:\\>>] -<label>\is<code>[:]\alt<code>[::]\alt[\\\\:] -<code>\is<numeric expression>\alt<string expression> -\endsyntax -A \<code> should have a numeric value between 0 and 255, inclusive, -after having been rounded to the nearest integer; or it should be a -string of length~1, in which case it denotes the corresponding -^{ASCII} code (Appendix~C\null). For example, |"A"| and |64.61| both -specify the code value 65. Vertical bars to the left or right of `|=:|' -tell \TeX\ to retain the original left and/or right character that invoked a -ligature. Additional `|>|' signs tell \TeX\ to advance its focus of attention -instead of doing any further ligtable operations at the current -character position. - -\bugonpage C338, lines 21 and 22 (9/30/89) - -\ninepoint\noindent -and 127--255 have to be specified with the `|#|' option, -on non-fancy installations of \TeX, -and so does code 35 (which is the ASCII code of `|#|' itself). - -\bugonpage C346, left column, after line 14 (9/30/89) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -\||=:|, {\it316}, $\underline{317}$.\par -\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -\||=:>|, $\underline{317}$.\par -\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|=:|\|, $\underline{317}$.\par -\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|=:|\||>|, $\underline{317}$.\par -\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -\||=:|\|, $\underline{317}$.\par -\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -\||=:|\||>|, $\underline{317}$.\par -\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -\||=:|\||>>|, $\underline{317}$.\par - -\bugonpage C346, left column, after line 31 (9/30/89) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|::| (local label), $\underline{317}$.\par -\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -\|\||:| (left boundary label), $\underline{317}$.\par - -\bugonpage C347, left column (9/30/89) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|boundarychar|, 212, 317. - -\bugonpage C352, left column (9/30/89) - -\eightpoint[Change `\<ligature replacement>' to `\<ligature op>'.] - -\bugonpage C354, left column (9/30/89) - -\eightpoint -\<optional skip>, 217. - -\bugonpage C356, left column (9/30/89) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|skipto|, {\it316}, $\underline{317}$. - -% 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 Dvi, bottom two lines, and top lines of page vii (4/21/89) - -{\hsize=29pc \tenpoint -\textindent\bull ``\MF\/ware'' by Donald~E. Knuth, Tomas~G. Rokicki, and -Ar\-thur~L. Samuel, Stanford Computer Science Report 1255 (Stanford, -California, April 1989), 207~pp. \ {\it The {\sltt WEB} programs for -four utility programs that are often used in conjunction with -\slMF\kern1pt: {\sltt GFtype}, {\sltt GFtoPK}, {\sltt GFtoDVI}, -and {\sltt MFT}.} -\par} - -\bugonpage D63, line 9 (8/31/89) - -\tenpoint\noindent -\\{mem}, so we -allow pointers to assume any \\{halfword} value. The minimum memory -index represents\cutpar - -\bugonpage D63, line 28 (8/31/89) - -\tenpoint\centerline{$\\{null}=\\{mem\_min}<\\{lo\_mem\_max}< -\\{hi\_mem\_min}<\\{mem\_top}\le\\{mem\_end}\le\\{mem\_max}$.} - -\bugonpage D67, in the July 1987 printing (4/7/89) - -\ninepoint\noindent -[Delete line 7, which has a redundant `{\bf if\/} $r=p$ {\bf then}'; - move line 8 to the left 10 points for alignment; and restore the following - line (which was deleted by mistake after line 8): - - \noindent\hskip10pt - $\\{node\_size}(p)\gets q-p$\quad$\{\,$reset the size in case it grew$\,\}$ - - \noindent - These corrections are needed only in the reprinting made July, 1987.] - -\bugonpage D228, in the July 1987 printing (4/7/89) - -\ninepoint\noindent -[Delete lines 14--15, which were inserted erroneously from a previous errata -list; and restore the following lines (which were deleted by mistake): - -\noindent\hskip20pt -{\bf begin} \\{double}(\\{max\_coef}); \ -\\{double}(\\{x0}); \ -\\{double}(\\{x1}); \ -\\{double}(\\{x2});\par\noindent\hskip20pt -\\{double}(\\{y0}); \ -\\{double}(\\{y1}); \ -\\{double}(\\{y2});\par\noindent\hskip20pt -{\bf end} - -\noindent -These corrections are needed only in the reprinting made July, 1987.] - -\bugonpage D248, in the July 1987 printing (4/7/89) - -\ninepoint\noindent -[Delete line 16, which begins with `$d\gets\\{take\_fraction}$'; -and restore the following line (which was deleted by mistake after line 22): - -\noindent\hskip10pt -{\bf if\/} $d<\\{alpha}$ {\bf then} $d\gets\\{alpha}$ - -\noindent -These corrections are needed only in the reprinting made July, 1987.] - -\bugonpage D389, line 10 (6/20/89) - -\ninepoint\noindent\hskip20pt -\\{help1}({\tt\char'23 -The\]expression\]above\]should\]have\]been\]a\]number\]>=3/4.\char'23}); - -\bugonpage D504, line 25 (8/31/89) - -\ninepoint\noindent\hskip10pt -$\\{undump}(\\{lo\_mem\_stat\_max}+1)(\\{lo\_mem\_max})(\\{rover})$; \ -$p\gets\\{mem\_min}$; \ $q\gets\\{rover}$; - -\bugonpage D510, in the July 1987 printing (4/7/89) - -\ninepoint\noindent -[Move the 7th-to-last line, which begins with `\\{internal}[\\{fontmaking}]', -one line down, and indent it to the right by 10 more points. -This correction is needed only in the reprinting made July, 1987.] - -% volume E -\hsize=29pc -\def\dashto{\mathrel{\hbox{-\kern-.05em}\mkern3.9mu\hbox{-\kern-.05em}}} - -\bugonpage Exiii, bottom four lines (5/5/89) - -{\hsize=29pc \tenpoint -\textindent\bull ``Metamarks: Preliminary studies for a Pandora's Box of -shapes'' by Neenie Billawala, -Stanford Computer Science Report 1256 (Stanford, -California, May 1989), 132~pp. \ {\it Lavishly illustrated studies in -parameter variation, leading to the design of a new family of -typefaces called Pandora.} -\par} - -\bugonpage E401, bottom line (5/16/89) - -\ninepoint\noindent -{\bf \def\_{\kern.04em\vbox{\hrule width.3em height .6pt}\kern.08em}% -math\_fit}$(-.3\\{cap\_height}\0*\\{slant}-.5u\0,\\{ic}\0)$;\par\noindent -{\bf penlabels}$(1,2,3,4,5,6,7,8)$; {\bf endchar\/}; -\smallskip\noindent -[some points and labels are missing at the tip of the tail on page 400] -\bye -Now here are some that I will make soon! - diff --git a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.four b/Master/texmf-dist/doc/generic/knuth/source/errata/errata.four deleted file mode 100644 index 11d0435e749..00000000000 --- a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.four +++ /dev/null @@ -1,1052 +0,0 @@ -% 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, 1987--1988}} -\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} - -\noindent This is a list of all corrections made to {\sl Computers \& -Typesetting}, Volumes A--E\null, between -16 June 1987 and 20 February 1989. 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. -Some of these corrections have already been made in reprintings -of the books. Some of these corrections affect the indexes and -mini-indexes of Volumes B~and~D in ways not shown here. Corrections -made up to 15 June 1987 appear in other files. -% volume A - -\bugonpage A159, line 22 (2/15/88) - -\ninepoint\noindent -`|\nolimits|' if the normal |\displaylimits| -convention has been overridden; a Rad\cutpar - -\bugonpage A213, lines 34--35 (12/23/87) - -\ninepoint\noindent -text will be a single control sequence token, defined to be like |\relax| if -its meaning is currently undefined. - -\bugonpage A299, line 30 (7/6/88) - -\ninepoint\indent\tt -Fatal format file error; I'm stymied. - -\bugonpage A326, line 12 (12/12/87) - -\ninepoint\noindent -its natural width. The |\hbox| version also invokes |\everymath|. - -\bugonpage A359, line 2 (11/6/88) - -\ninepoint\noindent -|\mathchardef\ldotp="613A\mathchardef\cdotp="6201\mathchardef\colon="603A| - -\bugonpage A359, lines 35--38 (5/24/88) - -\ninepoint\noindent -|\def\updownarrow{\delimiter"326C33F } \def\arrowvert{\delimiter"033C000 }|% - \par\noindent -|\def\Updownarrow{\delimiter"326D377 } \def\Arrowvert{\delimiter"033D000 } |% - \par\noindent -|\def\vert{\delimiter"026A30C } \def\Vert{\delimiter"026B30D } |% - \par\noindent -|\def\backslash{\delimiter"026E30F } \def\bracevert{\delimiter"033E000 }| - -\bugonpage A364, line 35 (11/6/88) - -\ninepoint\noindent -|\def\fmtname{plain}\def\fmtversion{2.94} % identifies the current format| - -\bugonpage A379, line 15 (10/12/87) - -\ninepoint -|\def\deleterightmost#1{\edef#1{\expandafter\xyzzy#1\xyzzy}}| - -\bugonpage A383, lines 7--15 from the bottom (1/4/89) - -\begintt - 209 strings out of 1685 - 1659 string characters out of 17636 - 27618 words of memory out of 52821 - 1172 multiletter control sequences out of 2500 -\endtt -Consequently there was plenty of room for more macros: $52821-27618= -25203$ unused cells of main memory, $2500-1172=1328$ of name memory, -$1685-209=1476$ of string memory, and $17636-1659=15977$ of character memory. -But a fairly large \TeX\ was being used, and only the macros of -Appendices B and~E were loaded; in other circumstances it might have -been necessary to conserve space. - -\bugonpage A454, lines 23--29 (8/13/87) - -\begingroup -\hyphenpenalty=-1000 \pretolerance=-1 \tolerance=1000 -\doublehyphendemerits=-100000 \finalhyphendemerits=-100000 -\ddanger If a suitable starting letter is found, let it be in font~$f$. -Hyphenation is abandoned unless the |\hyphenchar| of~$f$ is between -0 and~255, and unless a character of that number exists in the font. -If this test is passed, \TeX\ continues to scan forward -until coming to something that's not one of the following three -``admissible items'': (1)~a character in font~$f$ whose |\lccode| -is nonzero; (2)~a ligature formed entirely from characters of type~(1); -(3)~an implicit kern. The first inadmissible item terminates this part of -the process; the trial word consists of all the letters found in admissible -items. Notice that all of these letters are in font~$f$. - -\endgroup % end the special hyphenation conventions - -\bugonpage A458, left column, line 19 (2/15/88) - -\eightpoint\indent -|\|\| ( $\Vert$ ), {\it146--147}, {\it171}, $\underline{361}$, 435, 438. - -\bugonpage A462, left column, line 7 (10/9/87) - -\eightpoint\indent\qquad 152, 178, $\underline{360}$. - -\bugonpage A463, left column (4/17/88) - -\eightpoint\indent -\hbox to0pt{\hss\lower1pt\hbox{*}}|\day|, 273, 349, {\it406}. - -\bugonpage A464, left column, under Displays (12/8/88) - -\eightpoint\indent\quad -non-centered, 186, 326, 375--376, 420--421. - -\bugonpage A465, entry for {\tt\char`\\everymath} (12/12/87) - -\eightpoint\indent[Include also a reference to page 326.] - -\bugonpage A465, right column (7/6/88) - -\eightpoint\indent{\tt Fatal format file error}, 299. - -\bugonpage A473, entry for `page builder' (8/13/87) - -\eightpoint\indent\quad when exercised, 122, 280--283, 286--287. - -\bugonpage A474, left column (12/27/88) - -\eightpoint\indent -\hbox to0pt{\hss\lower1pt\hbox{*}}|\parshape|, 101--102, 214, 271, 277, 283, - -\bugonpage A480, right column (2/15/88) - -\eightpoint\indent|\vdots| ( $\vdots$ ), {\it177}, $\underline{359}$. - -\bugonpage A481, right column (7/3/87) - -\eightpoint|\z@|, $\underline{347}$, 348.\par -|\z@skip|, $\underline{347}$, 348. -% 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 32 (2/20/89) - -\ninepoint\noindent\hskip10pt -{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$% -{\tt This\]is\]TeX,\]Version\]2.97\char'23}\quad -$\{\,$printed when \TeX\ starts$\,\}$ - -\bugonpage B38, lines 7--9 from the bottom (11/6/88) - -\tenpoint\noindent[Delete this paragraph; it is being moved to page B214.] - -\bugonpage B38, line 5 from the bottom (12/14/88) - -\ninepoint\noindent\kern10pt -{\bf begin if\/} \\{log\_opened} {\bf then} $\\{selector}\gets\\{term\_and\_log}$ - -\bugonpage B39, line 5 (12/14/88) - -\ninepoint\noindent\kern50pt -{\bf if\/} \\{log\_opened} {\bf then} \\{error}; - -\bugonpage B52, line 5 (8/13/87) - -\tenpoint\noindent -cannot be done, i.e., if $\\{hi\_mem\_min}=\\{lo\_mem\_max}+1$, -we have to quit. - -\bugonpage B54, lines 34--35 (7/9/88) - -\ninepoint\noindent\kern10pt -{\bf begin if\/} $\\{hi\_mem\_min}-\\{lo\_mem\_max}\ge1998$ - {\bf then} $t\gets\\{lo\_mem\_max}+1000$\par\noindent\kern10pt -{\bf else} $t\gets\\{lo\_mem\_max}+1+(\\{hi\_mem\_min}-\\{lo\_mem\_max}) -\,\mathbin{\bf div}\,2$;\quad\kern-4pt -$\{\,\\{lo\_mem\_max}+2\le t<\\{hi\_mem\_min}\,\}$ - -\bugonpage B108, new line after line 8 (5/24/88) - -\ninepoint\noindent\kern20pt -$d$: \\{integer};\quad -$\{\,$number of characters in incomplete current string$\,\}$ - -\bugonpage B108, lines 31--33 (5/24/88) - -\ninepoint\noindent\kern10pt -$\\{str\_room}(l)$; $d\gets\\{cur\_length}$;\par\noindent\kern10pt -{\bf while} $\\{pool\_ptr}>\\{str\_start}[\\{str\_ptr}]$ {\bf do} - \par\noindent\kern20pt -{\bf begin} \\{decr}(\\{pool\_ptr}); - $\\{str\_pool}[\\{pool\_ptr}+l]\gets\\{str\_pool}[\\{pool\_ptr}]$; - \par\noindent\kern20pt -{\bf end};\quad$\{\,$move current string up to make room for another$\,\}$ -\par\noindent\kern10pt -{\bf for} $k\gets j$ {\bf to} $j+l-1$ {\bf do} $\\{append\_char}(\\{buffer}[k])$; -\par\noindent\kern10pt -$\\{text}(p)\gets\\{make\_string}$; $\\{pool\_ptr}\gets\\{pool\_ptr}+d$; - -\bugonpage B115, line 12 (4/28/88) - -\ninepoint\noindent\hskip10pt -$\\{group\_code}=0\to\\{max\_group\_code}$;\quad - $\{\,$\\{save\_level} for a level boundary$\,\}$ - -\bugonpage B141, line 19 (4/28/88) - -\ninepoint\noindent -\\{par\_token}: \\{halfword};\quad - $\{\,$token representing `|\par|'$\,\}$ - -\bugonpage B150, line 24 (4/28/88) - -\tenpoint\noindent{\bf 358.\quad}% -The present point in the program is reached only when the \\{expand} -routine has inserted\cutpar - -\bugonpage B151, mini-index (4/28/88) - -\eightpoint\noindent -Delete the entry for `\\{no\_expand}'; replace it by: - -\indent\\{expand}: {\bf procedure}, \S366. - -\bugonpage B154, lines 25, 29, 34 respectively (9/20/87) - -\ninepoint\noindent\hskip20pt -$\\{cvl\_backup},\\{radix\_backup},\\{co\_backup}$: \\{small\_number};\quad - $\{\,$to save \\{cur\_val\_level}, etc.$\,\}$\par\noindent\hskip10pt -$\\{co\_backup}\gets\\{cur\_order}$; - $\\{backup\_backup}\gets\\{link}(\\{backup\_head})$;\par\noindent\hskip10pt -$\\{cur\_order}\gets\\{co\_backup}$; - $\\{link}(\\{backup\_head})\gets\\{backup\_backup}$; - -\bugonpage B155, new entry for mini-index (9/20/87) - -\eightpoint\indent -\\{cur\_order}: \\{glue\_ord}, \S447. - -\bugonpage B156, line 28 (12/23/87) - -\ninepoint\noindent\hskip20pt -{\bf begin }$\\{eq\_define}(\\{cur\_cs},\\{relax},256)$; - -\bugonpage B157, mini-index (12/23/87) - -\eightpoint\noindent -Delete the entries for `\\{eqtb}' and `\\{frozen\_relax}'; replace them -by the following: - -\indent\\{eq\_define}: {\bf procedure}, \S227.\par -$\\{relax}=0$, \S207.\par - -\bugonpage B162, lines 12--14 (4/30/88) - -\ninepoint\noindent\hskip10pt -{\bf repeat} $\\{link}(\\{temp\_head})\gets\\{null}$;\par\noindent\hskip20pt -{\bf if\/} $(\\{info}(r)>\\{match\_token}+127)\lor - (\\{info}(r)<\\{match\_token})$ {\bf then} - $s\gets\\{null}$\par\noindent\hskip20pt -{\bf else begin} $\\{match\_chr}\gets\\{info}(r)-\\{match\_token}$; \ - $s\gets\\{link}(r)$; \ $r\gets s$; \ $p\gets\\{temp\_head}$; \ - $m\gets 0$; - -\bugonpage B177, bottom line before mini-index (7/13/88) - -\ninepoint\noindent\hskip10pt -$\\{cur\_val}\gets0$; \ - $\\{cur\_val\_level}\gets\\{int\_val}$; \ - $\\{radix}\gets0$; \ - $\\{cur\_order}\gets0$; - -\bugonpage B181, line 31 (4/28/88) - -\ninepoint\noindent -[Change `$x$ units per sp' to `$x$ sp per unit'! This change also -should be made on line~1 of page B183 and line $-8$ of page B590.] - -\bugonpage B188, line 8 (5/25/88) - -\ninepoint\noindent -{\bf function} $\\{str\_toks}(b:\\{pool\_pointer})$: \\{pointer};\quad - $\{\,$changes the string \\{str\_pool}$[b\to\\{pool\_ptr}]$ to a token list$\,\}$ - -\bugonpage B188, line 13 (5/25/88) - -\ninepoint\noindent\kern10pt -{\bf begin} \\{str\_room}(1); $p\gets\\{temp\_head}$; - $\\{link}(p)\gets\\{null}$; $k\gets b$; - -\bugonpage B188, line 20 (5/25/88) - -\ninepoint\noindent\kern10pt -$\\{pool\_ptr}\gets b$; $\\{str\_toks}\gets p$; - -\bugonpage B188, new line after line 28 (5/25/88) - -\ninepoint\noindent\kern20pt -$b$: \\{pool\_pointer};\quad$\{\,$base of temporary string$\,\}$ - -\bugonpage B188, line 31 (5/25/88) - -\ninepoint\noindent\kern10pt -{\bf else begin} $\\{old\_setting}\gets\\{selector}$; - $\\{selector}\gets\\{new\_string}$; $b\gets\\{pool\_ptr}$; - -\bugonpage B188, line 41 (5/25/88) - -\ninepoint\noindent\kern20pt -$\\{selector}\gets\\{old\_setting}$; $\\{the\_toks}\gets\\{str\_toks}(b)$; - -\bugonpage B190, lines 16--18 (5/25/88) - -\ninepoint\noindent\kern20pt -$b$: \\{pool\_pointer};\quad$\{\,$base of temporary string$\,\}$\par -\noindent\kern10pt -{\bf begin} $c\gets\\{cur\_chr}$; - $\langle\,$Scan the argument for command $c${\eightrm\kern.5em471}$\,\rangle$; -\par\noindent\kern10pt -$\\{old\_setting}\gets\\{selector}$; -$\\{selector}\gets\\{new\_string}$; $b\gets\\{pool\_ptr}$; -$\langle\,$Print the result of command~$c${\eightrm\kern.5em472}$\,\rangle$; -\par\noindent\kern10pt -$\\{selector}\gets\\{old\_setting}$; -$\\{link}(\\{garbage})\gets\\{str\_toks}(b)$; -$\\{ins\_list}(\\{link}(\\{temp\_head}))$; - -\bugonpage B210, line 36 (5/25/88) - -\ninepoint\noindent\kern10pt -{\bf begin if} $(\\{pool\_ptr}+\\{name\_length}>\\{pool\_size}) - \lor(\\{str\_ptr}=\\{max\_strings})\lor(\\{cur\_length}>0)$ {\bf then} - -\bugonpage B211, new line of code before the mini-index (12/14/88) - -\ninepoint\noindent -\\{log\_opened}: \\{boolean};\quad$\{\,$has the transcript file been opened?$\,\}$ - -\bugonpage B212, line 5 (12/14/88) - -\ninepoint\noindent\kern10pt -$\\{job\_name}\gets0$; \ $\\{name\_in\_progress}\gets\\{false}$; \ -$\\{log\_opened}\gets\\{false}$; - -\bugonpage B213, line 24 (12/14/88) - -\ninepoint\noindent\kern10pt -$\\{log\_name}\gets\\{a\_make\_name\_string}(\\{log\_file})$; \ -$\\{selector}\gets\\{log\_only}$; \ -$\\{log\_opened}\gets\\{true}$; - -\bugonpage B214, lines 2 and 3 (12/14/88) - -\tenpoint\noindent -messages or even to \\{show\_context}. -The \\{prompt\_file\_name} routine can result in a \\{fatal\_error}, -but the \\{error} -routine will not be invoked because \\{log\_opened} will be false. -\par\noindent\hskip10pt -The normal idea of \\{batch\_mode} is that nothing at all should be written -on the terminal. However, in the unusual case that -no log file could be opened, we make an exception and allow -an explanatory message to be seen. - -\bugonpage B214, lines 7--11 reduce to a single line (12/14/88) - -\ninepoint\noindent\hskip10pt -{\bf begin} $\\{selector}\gets\\{term\_only}$; - -\bugonpage B224, second-last line (4/28/87) - -\ninepoint\noindent -\\{done}: {\bf if} \\{file\_opened} {\bf then} \\{b\_close}(\\{tfm\_file});\par -\noindent\hskip10pt $\\{read\_font\_info}\gets g$; - -\bugonpage B229, lines 6--8 (11/17/87) - -\tenpoint\noindent -than $2^{27}$. -If $z<2^{23}$, the individual multiplications $b\cdot z$, -$c\cdot z$, $d\cdot z$ cannot overflow; otherwise we will divide $z$ by 2, -4, 8, or 16, to obtain a multiplier less than $2^{23}$, and we can -compensate for this later. If $z$ has thereby been replaced by -$z^\prime=z/2^e$, let $\beta=2^{4-e}$; we shall compute - -\bugonpage B229, lines 11--12 (11/17/87) - -\tenpoint\noindent -if $a=0$, or the same quantity minus $\alpha=2^{4+e}z^\prime$ if $a=255$. -This calculation must be done exactly, in order to guarantee portability -of \TeX\ between computers. - -\bugonpage B230, lines 2--5 (11/17/87) - -\ninepoint -\noindent\hskip10pt{\bf begin} $\\{alpha}\gets16$;\par -\noindent\hskip10pt{\bf while} $z\ge\oct{40000000}$ {\bf do}\par -\noindent\hskip20pt{\bf begin} $z\gets z\ {\bf div}\ 2$; \ - $\\{alpha}\gets\\{alpha}+\\{alpha}$; \ {\bf end};\par -\noindent\hskip10pt$\\{beta}\gets256\ {\bf div}\ \\{alpha}$; \ - $\\{alpha}\gets\\{alpha}\ast z$;\par - -\bugonpage B245, new entry for mini-index (8/7/87) - -\eightpoint\indent -\\{cur\_s}: \\{integer}, \S616. - -\bugonpage B254, line 29 (8/7/87) - -\ninepoint\noindent -\\{cur\_s}: \\{integer};\quad -$\{\,$current depth of output box nesting, initially $-1\,\}$ - -\bugonpage B254, line 31 (8/7/87) - -\ninepoint\noindent -[Remove the statement `$\\{cur\_s}\gets-1$;' and put it on page B244 at the -end of line 31.] - -\bugonpage B259, line 13 (11/9/87) - -\ninepoint\noindent\hskip20pt -{\bf begin }$\\{rule\_wd}\gets\\{rule\_wd}+10$;\quad -$\{\,$compensate for floating-point rounding$\,\}$\par\noindent\hskip20pt -$\\{edge}\gets\\{cur\_h}+\\{rule\_wd}$; $\\{lx}\gets0$; -$\langle\,$Let \\{cur\_h} be the position of the first box, and set - -\bugonpage B259, line 17 (11/9/87) - -\ninepoint\noindent\hskip20pt -$\\{cur\_h}\gets\\{edge}-10$; {\bf goto} \\{next\_p}; - -\bugonpage B263, line 21 (11/9/87) - -\ninepoint\noindent\hskip20pt -{\bf begin }$\\{rule\_ht}\gets\\{rule\_ht}+10$;\quad -$\{\,$compensate for floating-point rounding$\,\}$\par\noindent\hskip20pt -$\\{edge}\gets\\{cur\_v}+\\{rule\_ht}$; $\\{lx}\gets0$; -$\langle\,$Let \\{cur\_v} be the position of the first box, and set - -\bugonpage B263, line 25 (11/9/87) - -\ninepoint\noindent\hskip20pt -$\\{cur\_v}\gets\\{edge}-10$; {\bf goto} \\{next\_p}; - -\bugonpage B266, line 8 (8/7/87) - -\ninepoint\noindent\hskip10pt -\\{dvi\_out}(\\{eop}); \\{incr}(\\{total\_pages}); $\\{cur\_s}\gets-1$; - -\bugonpage B266, new code between lines 31 and 32 (8/7/87) - -\ninepoint -\noindent\hskip10pt{\bf while} $\\{cur\_s}>-1$ {\bf do}\par -\noindent\hskip20pt{\bf begin if} $\\{cur\_s}>0$ {\bf then} - \\{dvi\_out}(\\{pop})\par -\noindent\hskip20pt{\bf else begin} \\{dvi\_out}(\\{eop}); - \\{incr}(\\{total\_pages})\par -\noindent\hskip30pt{\bf end};\par -\noindent\hskip20pt\\{decr}(\\{cur\_s});\par -\noindent\hskip20pt{\bf end};\par - -\bugonpage B285, line 21 (4/28/88) - -\noindent\tenpoint -is subsidiary to the \\{nucleus} field of some noad; the dot is replaced by -`|_|' or `|^|' or `|/|' or `|\|' if $p$ is\cutpar - -\bugonpage B338, second-last line (8/19/87) - -\ninepoint\noindent\kern10pt -$q\gets\\{link}(\\{head})$; $s\gets\\{head}$; - -\bugonpage B339, line 4 (8/19/87) - -\ninepoint\noindent\kern20pt -$s\gets q$; $q\gets\\{link}(q)$; - -\bugonpage B339, new code to insert after line 10 (8/19/87) - -\ninepoint -\noindent\kern10pt{\bf if} $o\ne0$ {\bf then}\par -\noindent\kern20pt{\bf begin} $r\gets\\{link}(q)$; $\\{link}(q)\gets\\{null}$; - $q\gets\\{hpack}(q,\\{natural})$;\par -\noindent\kern20pt$\\{shift\_amount}(q)\gets o$; $\\{link}(q)\gets r$; - $\\{link}(s)\gets q$;\par -\noindent\kern20pt{\bf end};\par -\noindent[These new lines also imply changes to the index that aren't - shown in this errata list.] - -\bugonpage B387, line 2 (5/24/88) - -\tenpoint\noindent -is quite short. In the following code we set \\{hc}$[\\{hn}+2]$ to the -impossible value 128, in order to\cutpar - -\bugonpage B387, line 8 (5/24/88) - -\ninepoint\noindent\kern10pt -$\\{hc}[0]\gets127$; $\\{hc}[\\{hn}+1]\gets127$; - $\\{hc}[\\{hn}+2]\gets128$;\quad$\{\,$insert delimiters$\,\}$ - -\bugonpage B390, lines 17--18 (5/24/88) - -\ninepoint\noindent\kern10pt -$\langle\,$Enter as many hyphenation exceptions as are listed, until coming - to a right brace; then {\bf return\eightrm\kern.5em961}$\,\rangle$; - -\smallskip[The same change applies to lines 20--21, and -to page~582.] - -\bugonpage B396, new line after line 34 (5/24/88) - -\ninepoint\noindent\kern10pt -$\\{trie\_link}(\\{trie\_size})\gets0$; -$\\{trie\_back}(0)\gets\\{trie\_size}$;\quad -$\{\,$wrap around$\,\}$ - -\bugonpage B396, bottom line (12/12/87) - -\ninepoint\noindent\hskip10pt -$\\{trie\_link}(0)\gets0$; $\\{trie\_char}(0)\gets0$; - $\\{trie\_op}(0)\gets\\{min\_quarterword}$; - -\bugonpage B397, lines 15--17 (5/24/88) - -\ninepoint\noindent\kern10pt -{\bf begin} $c\gets\\{trie\_c}[p]$;\par\noindent\kern10pt -{\bf if} $c<\\{trie\_min}$ {\bf then} $\\{trie\_min}\gets c$;\par\noindent\kern10pt -{\bf if} $\\{trie\_min}=0$ {\bf then} $z\gets\\{trie\_link}(\\{trie\_size})$\par -\noindent\kern10pt -{\bf else} $z\gets\\{trie\_link}(\\{trie\_min}-1)$;\quad -$\{\,$get the first conceivably good hole$\,\}$ - -\bugonpage B400, lines 3--4 (5/24/88) - -\ninepoint\noindent -$\langle\,$Enter all of the patterns into a linked trie, until coming - to a right brace{\eightrm\kern.5em961}$\,\rangle\equiv$ - -\smallskip[The same change applies to page B399, lines 29--30, and -to page~582.] - -\bugonpage B402, line 10 (5/24/88) - -\ninepoint\noindent\kern10pt -$r\gets\\{trie\_size}$;\quad -$\{\,$finally, we will zero out the holes$\,\}$ - -\bugonpage B406, line 9 from the bottom (1/23/89) - -\ninepoint\noindent\kern30pt -$\\{shrink\_order}(r)\gets\\{normal}$; \ $\\{delete\_glue\_ref}(q)$; \ -$\\{glue\_ptr}(p)\gets r$; \ $q\gets r$; - -\bugonpage B417, line 10 (1/23/89) - -\ninepoint\noindent\kern10pt -$q\gets\\{new\_skip\_param}(\\{top\_skip\_code})$; \quad -$\{\,$now $\\{temp\_ptr}=\\{glue\_ptr}(q)\,\}$ - -\bugonpage B418, line 14 (1/23/89) - -\ninepoint\noindent\kern30pt -$\\{shrink\_order}(r)\gets\\{normal}$; \ $\\{delete\_glue\_ref}(q)$; \ -$\\{glue\_ptr}(p)\gets r$; \ $q\gets r$; - -\bugonpage B507, line 13 (12/14/88) - -\ninepoint\noindent\kern10pt -{\bf if\/} \\{log\_opened} {\bf then} $\\{selector}\gets\\{selector}+2$; - -\bugonpage B527, line 21 (12/14/88) - -\ninepoint\noindent\kern10pt -{\bf if\/} \\{log\_opened} {\bf then} - -\bugonpage B528, line 5 (12/14/88) - -\ninepoint\noindent\kern10pt -{\bf if\/} \\{log\_opened} {\bf then} - -\bugonpage B547, right column (9/20/87) - -\eightpoint -\leftline{\\{co\_backup}:\quad $\underline{366}$.} - -\bugonpage B548, right column (9/20/87) - -\eightpoint -\leftline{\\{cur\_order}:\quad 366, $\underline{447}$, 448, 454, 462.} - -\bugonpage B548, right column (8/7/87) - -\eightpoint -\leftline{\\{cur\_s}:\quad 593, $\underline{616}$, 619, 629, 640, 642.} - -\bugonpage B551, both columns (12/23/87) - -\eightpoint[Remove `372' from \\{eqtb} and put it into \\{eq\_define}.] - -\bugonpage B552, left column (4/28/88) - -\eightpoint[Insert `358' into \\{expand}.] - -\bugonpage B554, left column (12/23/87) - -\eightpoint[Remove `372' from \\{frozen\_relax}.] - -\bugonpage B559, new entry (12/14/88) - -\eightpoint\noindent -\\{log\_opened}, 92--93, $\underline{527}$, 528, 534--535, 1265, 1333--1334. - -\bugonpage B559, right column (8/13/87) - -\eightpoint[Delete the entry for \\{low\_mem\_max}.] - -\bugonpage B562, left column (4/28/88) - -\eightpoint[Remove `358' from \\{no\_expand}.] - -\bugonpage B565, left column (8/7/87) - -\eightpoint -\leftline{\\{pop}:\quad 584--585, $\underline{586}$, 590, 601, 608, 642.} - -\bugonpage B567, left column (12/23/87) - -\eightpoint[Insert `372' into \\{relax}.] - -\bugonpage B568, left column (4/28/88) - -\eightpoint[Move `269' from \\{save\_index} to \\{save\_level}.] -% volume C -\hsize=29pc -\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers - -\bugonpage C26, bottom line (7/18/87) - -\tenpoint\noindent -What angle corresponds to the direction North-Northwest? - -\bugonpage C107, line 13 (10/7/87) - -{\bf pickup penrazor} xscaled \\{heavyline} - rotated (angle$(z_{32}-z_{31})+90$); - -\bugonpage C164, line 10 (4/27/88) - -\ninepoint\indent -\quad $y_{\$c}=\\{top}\,y_{\$l}$; \ $y_{\$d}=y_{\$r}$; \ - $x_{\$c}=x_{\$l}-\\{left\_jut}$; \ $x_{\$d}=x_{\$r}+\\{right\_jut}$; - -\bugonpage C175, line 23 (1/11/88) - -\ninepoint\noindent -expand into a sequence of tokens. \ -(The language {\eightrm{SIMULA67}} demonstrated that it is\cutpar - -\bugonpage C241, line 11 (5/25/88) - -\ninepoint\indent -{\bf numeric} $\\{ht}\0,\\{dp}\0$; \ - $\\{ht}\0=\\{body\_height}\0$; \ - $.5[\\{ht}\0,-\\{dp}\0]=\\{axis}\0$; - -\bugonpage C248, line 21 becomes two lines (1/24/89) - -\ninepoint\noindent -which might not -be numerically stable in the presence of rounding errors.) -Another case, not really desirable, is $\\{left\_jut}=\\{right\_jut}=0$. - -\bugonpage C262, line 15 (12/23/88) - -\ninepoint\noindent -|string base_name, base_version; base_name="plain"; base_version="1.7";| - -\bugonpage C271, line 12 (1/4/89) - -\ninepoint\noindent -the user and \MF's primitive picture commands. -First, some important program\cutpar - -\bugonpage C271, line 4 from the bottom (12/23/88) - -\ninepoint\noindent -|def |^|cutdraw|| expr p = % caution: you may need autorounding=0| - -\bugonpage C272, lines 5 and 6 (12/23/88) - -\ninepoint\noindent -| (cut_ scaled (1+max(pen_lft,pen_rt,pen_top,pen_bot))|\par\noindent -| rotated theta shifted z)t_;| - -\bugonpage C273, lines 20 and 22 (9/26/88) - -\ninepoint\noindent -| (z_+(0,pen_top))t_=round((z+(0,pen_top))t_); z_ enddef;|\par\noindent -| (z_+(0,pen_bot))t_=round((z+(0,pen_bot))t_); z_ enddef;| - -\bugonpage C290, line 6 from the bottom (12/23/88) - -\ninepoint\noindent -(2)~A throwaway variable, -`\\{whatever}', nullifies an unwanted equation at the beginning\cutpar - -\bugonpage C331, just below the illustration (7/18/87) - -\ninepoint\noindent -Such a pattern is, of course, rather unlikely to occur in a |gf| file, -but |GFtoDVI| would\cutpar - -\bugonpage C337, line 11 (4/28/88) - -\ninepoint -An online ``menu'' of the available test routines will be typed at your -terminal\cutpar - -\bugonpage C346, entry for {\tt autorounding} (12/23/88) - -\eightpoint\indent\hskip20pt -212, {\it262}, {\it264}, 271--272. - -\bugonpage C350, left column (7/6/88) - -\eightpoint\indent -|Fatal| |base| |file| |error|, 226. - -\bugonpage C356, left column (1/11/88) - -\eightpoint -SIMULA67 language, 175. - -\bugonpage C358, right column (2/15/88) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|yoffset|, 212, $\underline{220}$, 315, 324. -% 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 D2, line 27 (12/14/88) - -\ninepoint\noindent\hskip10pt -{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$% -{\tt This\]is\]METAFONT,\]Version\]1.7\char'23}\quad -$\{\,$printed when \MF\ starts$\,\}$ - -\bugonpage D36, lines 3--5 (11/6/88) - -\tenpoint\noindent[Delete this paragraph; it is being moved to page D349.] - -\bugonpage D36, line 7 (12/14/88) - -\ninepoint\noindent\kern10pt -{\bf begin if\/} \\{log\_opened} {\bf then} $\\{selector}\gets\\{term\_and\_log}$ - -\bugonpage D36, line 16 (12/14/88) - -\ninepoint\noindent\kern50pt -{\bf if\/} \\{log\_opened} {\bf then} \\{error}; - -\bugonpage D66, lines 34--35 (7/9/88) - -\ninepoint\noindent\kern10pt -{\bf begin if\/} $\\{hi\_mem\_min}-\\{lo\_mem\_max}\ge1998$ - {\bf then} $t\gets\\{lo\_mem\_max}+1000$\par\noindent\kern10pt -{\bf else} $t\gets\\{lo\_mem\_max}+1+(\\{hi\_mem\_min}-\\{lo\_mem\_max}) -\,\mathbin{\bf div}\,2$;\quad\kern-4pt -$\{\,\\{lo\_mem\_max}+2\le t<\\{hi\_mem\_min}\,\}$ - -\bugonpage D347, new line of code after line 5 (12/14/88) - -\ninepoint\noindent -\\{log\_opened}: \\{boolean};\quad$\{\,$has the transcript file been opened?$\,\}$ - -\bugonpage D347, line 11 (12/14/88) - -\ninepoint\noindent\kern10pt -$\\{job\_name}\gets0$; \ -$\\{log\_opened}\gets\\{false}$; - -\bugonpage D348, line 4 from the bottom (12/14/88) - -\ninepoint\noindent\kern10pt -$\\{log\_name}\gets\\{a\_make\_name\_string}(\\{log\_file})$; \ -$\\{selector}\gets\\{log\_only}$; \ -$\\{log\_opened}\gets\\{true}$; - -\bugonpage D349, lines 6 and 7 (12/14/88) - -\tenpoint\noindent -print error messages or even to \\{show\_context}. -The \\{prompt\_file\_name} routine can result in a \\{fatal\_error}, -but the \\{error} -routine will not be invoked because \\{log\_opened} will be false. -\par\noindent\hskip10pt -The normal idea of \\{batch\_mode} is that nothing at all should be written -on the terminal. However, in the unusual case that -no log file could be opened, we make an exception and allow -an explanatory message to be seen. - -\bugonpage D349, lines 11--15 reduce to a single line (12/14/88) - -\ninepoint\noindent\hskip10pt -{\bf begin} $\\{selector}\gets\\{term\_only}$; - -\bugonpage D420, bottom line (5/25/88) - -\ninepoint\noindent\kern30pt -{\bf if\/} \\{txx} {\bf mod} $\\{unity}=0$ {\bf then} - -\bugonpage D441, delete line 2 and change line 12 as follows (5/25/88) - -\ninepoint\noindent -\\{done}: {\bf if} $\\{eq\_type}(x)\ne\\{tag\_token}$ {\bf then} - $\\{clear\_symbol}(x,\\{false})$;\par\noindent\kern10pt -{\bf if} $\\{equiv}(x)=\\{null}$ {\bf then} $\\{new\_root}(x)$; -\par\noindent\kern10pt -$\\{scan\_declared\_variable}\gets h$; - -\bugonpage D444, line 8 from the bottom (12/14/88) - -\ninepoint\noindent\kern10pt -{\bf if\/} \\{log\_opened} {\bf then} $\\{selector}\gets\\{selector}+2$; - -\bugonpage D510, line 14 (12/14/88) - -\ninepoint\noindent\kern10pt -{\bf if\/} \\{log\_opened} {\bf then} - -\bugonpage D511, line 11 (12/14/88) - -\ninepoint\noindent\kern10pt -{\bf if\/} \\{log\_opened} {\bf then} - -\bugonpage D530, new entry (12/14/88) - -\eightpoint\noindent -\\{log\_opened}, 87--88, $\underline{782}$, 783, 788--789, 1023, 1205, 1208. - -\bugonpage D545, left column (10/31/87) - -\eightpoint -\leftline{{\bf zscaled} primitive:\quad $\underline{893}$.} -\leftline{Zabala Salelles, Ignacio Andres:\quad 812.} - -% volume E -\hsize=29pc -\def\dashto{\mathrel{\hbox{-\kern-.05em}\mkern3.9mu\hbox{-\kern-.05em}}} - -\bugonpage E32, second-last line (9/20/87) - -\tenpoint\noindent -after which comes `\\{math\_axis}\0; {\bf generate} |mathsy|' (which we -won't bother to\cutpar - -\bugonpage E111, line 29 (10/16/88) - -\ninepoint\noindent -$\\{lft}\,x_{11}={\rm hround}\,u$; \ - $x_{1l}-x_{11}=x_{2l}-x_{12}=x_{22}-x_{2r}={\rm hround}\,1.6\\{cap\_jut}$; - -\bugonpage E285, bottom line (12/1/87) - -\rightline{\eightssi Due to Technical Developments\/\enspace\eightss(1968)} - -\bugonpage E333, lines 9--11 (1/9/89) - -\ninepoint\noindent -$\\{lft}\,x_{1l}={\rm hround}(2.5u-.5\\{mfudged.stem})$; \ - $x_{1l}=x_{1'l}=x_{2l}=x_{2'l}$;\par\noindent -$\\{lft}\,x_{3l}={\rm hround}(.5w-.5\\{mfudged.stem})$; \ - $x_5-x_3=x_3-x_1$;\par -\line{{\bf if\/} not \\{monospace}: - $r:={\rm hround}(x_5+x_1)+r-w$; {\bf fi}\hfill - \% change width for better fit} - -\bugonpage E353, lines 38--39 (8/12/87) - -\ninepoint -\leftline{\kern10pt{\bf else}: {\bf fill} \\{diag\_end}$(6r,5r,1,1,5l,6l) - \dashto.9[z_{5l},z_{6l}]$} -\line{\kern30pt$.\,.\,\{z_5-z_6\}\,.1[z_{5r},z_{6r}]\dashto\rm cycle$;\hfil - \% middle stem} - -\bugonpage E387, line 13 (8/12/87) - -\ninepoint -\line{\kern10pt{\bf pickup} \\{tiny}.\\{nib}; \ \\{bulb}$(3,4,5)$;\hfil\% bulb} - -\bugonpage E413, lines 37--38 (8/12/87) - -\ninepoint -\leftline{\kern10pt{\bf else}: {\bf fill} \\{diag\_end}$(6r,5r,1,1,5l,6l) - \dashto.9[z_{5l},z_{6l}]$} -\line{\kern30pt$.\,.\,\{z_5-z_6\}\,.1[z_{5r},z_{6r}]\dashto\rm cycle$;\hfil - \% middle stem} - -\bugonpage E459, line 24 (8/7/87) - -\ninepoint\noindent[Delete the `$=$' sign between `\\{lft}' and `$x_5$'.] - -\bugonpage E471, line 5 (12/11/88) - -\ninepoint\noindent -$x_2=\\{good}.x\,.5w$; \ $\\{center\_on}(x_2)$; - -\bugonpage E471, insert two lines below the rule at bottom of page (12/11/88) - -\ninepoint -\line{{\bf def\/} -\\{center\_on}({\bf expr} $x) =\null$ -{\bf if\/} not \\{monospace}:\hfill \% change width for symmetric fit} -\leftline{\kern10pt - $r:=r+2x-w$; \ $w:=2x$; \ {\bf fi} {\bf enddef};} - -\bugonpage E477, line 20 (12/11/87) - -\ninepoint\noindent -$x_4=x_8=\\{good}.x\,.5w$; \ $\\{center\_on}(x_4)$; \ -$x_2=w-x_6=\\{good}.x(x_4+a)$; - -\bugonpage E483, third line of elementary division operator (12/11/88) - -\ninepoint\noindent -$x_3-.5\\{dot\_size}={\rm hround}(.5w-.5\\{dot\_size})$; \ -$\\{center\_on}(x_3)$; - -\bugonpage E485, line 4 (8/7/87) - -\ninepoint\noindent[Delete the `$=$' sign between `\\{lft}' and `$x_5$'.] - -\bugonpage E487, line 17 (8/4/88) - -\ninepoint\line{% -{\bf fill} \\{fullcircle} scaled$\,(\\{bold}+3.8\\{dw}+\\{eps})\,$% - shifted$\,(.5[z_4,z_8])$;\hfill\% dot} -\smallskip\noindent[Also remove page 487 from the index entry for -\\{dot\_size}, and add it to the entries for \\{bold} and \\{dw}.] - -\bugonpage E515, lines 5 and 12 (12/11/88) - -\ninepoint\noindent -$.5[x_1,x_2]=x_3=\\{good}.x\,.5w$; \ -$\\{center\_on}(x_3)$; \ $\\{lft}\,x_1={\rm hround}(.5w-u*{\rm sqrt}48)$; - -\bugonpage E515, line 21 (1/23/89) - -\ninepoint\noindent -{\bf labels}$(5,6)$; \ \\{zero\_width}; \ {\bf endchar\/}; -\smallskip\noindent[Also put labels `{\tt5}' and `{\tt6}' on the -upper right figure, page E514.] - -\bugonpage E521, lines 4 and 14 (12/12/88) - -\ninepoint\noindent -$x_1=x_2=\\{good}.x\,.5w$; \ -$\\{center\_on}(x_1)$; \ $\\{lft}\,x_3={\rm hround}\,u$; \ $x_4=w-x_3$; - -\bugonpage E537, line 6 (12/11/88) - -\ninepoint\noindent -$x_1=x_2=x_3=x_4$; \ -$x_1-.5\\{stem}={\rm hround}(.5w-.5\\{stem})$; \ -$\\{center\_on}(x_1)$; - -\bugonpage E537, line 19 (12/11/88) - -\ninepoint\noindent -$x_1=x_2=x_3$; \ -$x_1-.5\\{stem}={\rm hround}(.5w-.5\\{stem})$; \ -$\\{center\_on}(x_1)$; - -\bugonpage E539, line 4 (12/11/88) - -\ninepoint\noindent -$x_1=x_4=x_{30}=x_{33}=\\{good}.x\,.5w$; \ $\\{center\_on}(x_1)$; - -\bugonpage E539, line 21 (12/11/88) - -\ninepoint\noindent -$x_1=x_4=\\{good}.x\,.5w$; \ $\\{center\_on}(x_1)$; - -\bugonpage E541, line 4 (12/11/88) - -\ninepoint\noindent -$x_1=x_5=\\{good}.x\,.5w$; \ $\\{center\_on}(x_1)$; - -\bugonpage E541, line 17 (12/11/88) - -\ninepoint\noindent -$x_1=x_{10}=\\{good}.x\,.5w$; \ $\\{center\_on}(x_1)$; - -\bugonpage E550, new line after line 23 (8/15/87) - -\ninepoint\noindent\kern10pt -{\bf forsuffixes} $\hbox{\$}=\\{notch\_cut},\\{cap\_notch\_cut}$: - {\bf if\/} $\hbox{\$}<3$: $\hbox{\$}:=3$; {\bf fi endfor} -\smallskip\noindent -[To make room for this, combine lines 38 and 39 into a single line.] - -\bugonpage E550, line 29 (7/9/88) - -\ninepoint\noindent\hskip10pt -{\bf \def\_{\kern.04em\vbox{\hrule width.3em height .6pt}\kern.08em}% -define\_whole\_vertical\_blacker\_pixels}$(\\{vair},\\{bar},\\{slab}, - \\{cap\_bar},\\{cap\_band})$; - -\bugonpage E572, new entry at bottom (12/11/88) - -\eightpoint\noindent -\\{center\_on}, $\underline{471}$, 477, 483, 515, 521, 537--541. -\bye -Now here are some that I will make soon! - diff --git a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.nine b/Master/texmf-dist/doc/generic/knuth/source/errata/errata.nine deleted file mode 100644 index 3715cd813fc..00000000000 --- a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.nine +++ /dev/null @@ -1,226 +0,0 @@ -% 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 A, 1996}} -\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}, Volume~A (also known as {\sl The \TeX book}), -between 1992 and the publication of the final printed -version of that book in September 1996. -\looseness=-1 - -% volume A - -\bugonpage A31, line 8 (3/6/95) - -\tenpoint\noindent -\TeX\ begins its error messages with `|!|', and it shows what it was -reading at the\cutpar - -\bugonpage A46, line 8 (1/22/95) - -\ninepoint\noindent -out for -the occasional times when the adjacent characters |aa|, |ae|, and |o/| -should not be\cutpar - -\bugonpage A282, lines 11 and 12 (4/18/96) - -\ninepoint\noindent -unadorned \<box> command, except that the new box -being appended to the vertical list is also shifted left or right by the -specified amount. - -\bugonpage A285, lines 15--17 from the bottom (4/18/96) - -\ninepoint -\textindent{$\bull$}|\raise|\<dimen>\<box>, |\lower|\<dimen>\<box>.\enskip -This acts just like an unadorned \<box> command, except that the new box -being appended to the horizontal list is also shifted up or down by the -specified amount. - -\bugonpage A290, lines 4--6 from the bottom (4/18/96) - -\ninepoint -\textindent{$\bull$}|\raise|\<dimen>\<box>, |\lower|\<dimen>\<box>.\enskip -This acts just like an unadorned \<box> command, except that the new box -being put into the nucleus is also shifted up or down by the specified amount. - -\bugonpage A331, bottom two lines (6/25/93) - -\ninepoint\noindent -if you know that the -enclosing box is sufficiently small; and |\leaders\vrule\vfill| works fine in -vertical mode. - -\bugonpage A354, lines 19--22 (3/5/95) - -\ninepoint\noindent -|\def\sett@b{\ifx\next\+\def\nxt{\afterassignment\s@tt@b\let\nxt}%|\par -\noindent -| \else\let\nxt=\s@tcols\fi|\par\noindent -| \let\next=\relax \nxt} % turn off \outerness|\par\noindent -|\def\s@tt@b{\let\nxt=\relax \us@false\m@ketabbox}| - -\bugonpage A356, lines 13--20 from the bottom (3/5/95) - -\ninepoint -{\parindent=0pt -|\def\oalign#1{\leavevmode\vtop{\baselineskip0pt \lineskip.25ex|\par -| \ialign{##\crcr#1\crcr}}} \def\o@lign{\lineskiplimit=0pt \oalign}|\par -|\def\ooalign{\lineskiplimit=-\maxdimen \oalign} % chars over each other|\par -|\def\sh@ft#1{\dimen0=.00#1ex \multiply\dimen0 by\fontdimen1\font|\par -| \kern-.0156\dimen0} % compensate for slant in lowered accents|\par -|\def|^|\d||#1{{\o@lign{\relax#1\crcr\hidewidth\sh@ft{10}.\hidewidth}}}|\par -|\def|^|\b||#1{{\o@lign{\relax#1\crcr\hidewidth\sh@ft{29}%|\par -| \vbox to.2ex{\hbox{\char'26}\vss}\hidewidth}}}|\par -} - -\bugonpage A357, lines 7--12 (8/1/95) - -\ninepoint\noindent -|\def|^|\rightarrowfill||{$\m@th \smash- \mkern-7mu|\par\noindent -| \cleaders\hbox{$\mkern-2mu \smash- \mkern-2mu$}\hfill|\par\noindent -| \mkern-7mu \mathord\rightarrow$}|\par\noindent -|\def|^|\leftarrowfill|% - |{$\m@th \mathord\leftarrow \mkern-7mu|\par\noindent -| \cleaders\hbox{$\mkern-2mu \smash- \mkern-2mu$}\hfill|\par\noindent -| \mkern-7mu \smash-$}| - -\bugonpage A357, lines 16--20 (6/25/93) - -\ninepoint -{\parindent=0pt -| \setbox0=\hbox{$\braceld$}%|\par -| \bracelu\leaders\vrule height\ht0 depth0pt\hfill\bracerd|\par -| \braceld\leaders\vrule height\ht0 depth0pt\hfill\braceru$}|\par -|\def|^|\downbracefill||{$\m@th|\par -| \setbox0=\hbox{$\braceld$}%|\par -| \braceld\leaders\vrule height\ht0 depth0pt\hfill\braceru|\par -| \bracelu\leaders\vrule height\ht0 depth0pt\hfill\bracerd$}|\par -\smallskip[Also delete lines 21 and 22, as the usage is no longer restricted.] -} - -\bugonpage A359, line 25 (3/5/95) - -\ninepoint\noindent -|\def|^|\skew||#1#2#3{{\muskip0=#1mu \mkern.5\muskip0|\par\noindent -| #2{\mkern-.5\muskip0{#3}\mkern.5\muskip0}\mkern-.5\muskip0}{}}| - -\bugonpage A360, line 5 from the bottom (3/5/95) - -\ninepoint\noindent -|\def\@vereq#1#2{\lower.5pt\vbox{\lineskiplimit\maxdimen \lineskip-.5pt| - -\bugonpage A361, lines 19 and 20 (3/5/95) - -\ninepoint\noindent -|\def|^|\bmod||{\nonscript\mskip-\medmuskip \mkern5mu|\par\noindent -| |^|\mathbin||{\rm mod} \penalty900 \mkern5mu \nonscript\mskip-\medmuskip}| - -\bugonpage A362, lines 14--18 (3/5/95) - -\ninepoint\noindent -| |^|\everycr||{\noalign{\ifdt@p \global\dt@pfalse|% - | \ifdim\prevdepth>-1000pt|\par\noindent -| \vskip-\lineskiplimit \vskip\normallineskiplimit \fi|\par\noindent -| \else \penalty|^|\interdisplaylinepenalty|| \fi}}}|\par\noindent -|\def\@lign{\tabskip=0pt\everycr={}} % restore inside \displ@y|\par\noindent -|\def|^|\displaylines||#1{\displ@y \tabskip=0pt| - -\bugonpage A363, lines 8--9 from the bottom (12/8/89) - -{\ninepoint\parindent=0pt -| \if@mid \dimen@=\ht0 \advance\dimen@ by\dp\z@ |% - |\advance\dimen@ by12\p@|\parbreak% -| \advance\dimen@ by\pagetotal \advance\dimen@ by-\pageshrink| -\par} - -\bugonpage A364, line 5 from the bottom (4/11/96) - -\ninepoint\noindent -|\def\fmtname{plain}|\par\noindent -|\def\fmtversion{3.141592} % identifies the current format| - -\bugonpage A374, line 3 (3/7/95) - -\ninepoint\indent -|\begingroup\aftergroup\def\aftergroup\asts\aftergroup{| - -\bugonpage A410, line 23 (4/18/96) - -\ninepoint\noindent -| Tema con variazione \(su un tema differente)| -\smallskip\eightpoint\noindent -(This implies a corresponding correction to page 411.) - -\bugonpage A451, line $16$ (8/8/93) - -\ninepoint\noindent -But when plain \TeX\ is tried on the name of a famous ^{Welsh} village, - -\bugonpage A462, right column (3/5/95) - -\def\cong{\mathrel{\mathpalette\OvOreq\sim}} % congruence sign, index version -\def\OvOreq#1#2{\lower.5pt\vbox{\baselineskip0pt\lineskip-.0pt - \ialign{$#1\hfil##\hfil$\crcr#2\crcr=\crcr}}} -\eightpoint -|\cong| ( $\cong$ ), 151, $\underline{360}$, 436. - -\bugonpage A463, right column (6/25/93) - -\eightpoint -direct sum, {\sl see\/} |\oplus|. - -\bugonpage A464, left column (6/25/93) - -\eightpoint -|\downbracefill| (\hbox to 4em{\downbracefill}), 225--226, $\underline{357}$. - -\bugonpage A483, lines 15--21 (4/29/97) - -\tenpoint -\begintt -email: {\tt TUG@tug.org} -internet: {\tt http://www.tug.org/} -} -\endtt -Don't delay, subscribe today! That address again is - -\smallskip -{\obeylines -\TeX\ Users Group -email: {\tt TUG\char`\@ tug.org} -internet: {\tt http://www.tug.org/} -} - -\bye diff --git a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.one b/Master/texmf-dist/doc/generic/knuth/source/errata/errata.one deleted file mode 100644 index 471971958c3..00000000000 --- a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.one +++ /dev/null @@ -1,751 +0,0 @@ -% Bugs (sigh) in The TeXbook - -\input manmac -\proofmodefalse -\raggedbottom -\output{\onepageout{\unvbox255\kern-\dimen@ \vfil}} - -\def\rhead{Bugs in {\sl The \TeX book}, first printing} -\def\bugonpage#1(#2) \par{\bigbreak\tenpoint - \hrule\line{\lower3.5pt\vbox to13pt{}Page #1\hfil(#2)}\hrule\nobreak\medskip} - -\noindent This is a list of all corrections made to {\sl The \TeX book\/} -between the first and second printings. If your copy says `{\sl\kern-1pt Second -printing (October 1984)\/}' on the copyright page, you've already got -all of these things corrected. Otherwise, you're a lucky owner of the -rare first edition; read on. - -\bugonpage 29, lines 31--32 (8/25/84) - -The underfull box that \TeX\ produces in the 1.5-inch case is really bad; -with such narrow limits, an occasional wide space is unavoidable. But try - -\bugonpage 54, lines 5--6 (4/20/84) - -{\parfillskip=0pt -\ddanger Appendix B shows that plain \TeX\ handles most of the accents -by using \TeX's ^|\accent| primitive. For example, |\'#1| is equivalent -to |{\accent19 #1}|, where\par} - -\bugonpage 63, seven lines below the first illustration (2/27/84) - -\line{points, a width of 5.5555 points, and a depth of zero; -the letter `g' has a height} - -\bugonpage 72, line 35 (2/28/84) - -\ninepoint\noindent -from |0pt|, but |0.00001filll| is infinitely greater than |16383.99999fill|. - -\bugonpage 79, line 12 (2/28/84) - -\ninepoint\indent -|\hbox(6.25+1.94444)x312.0, glue set 0.5783, shifted 36.0 []| - -\bugonpage 98, line 24 (4/13/84) - -\ninepoint -\line{and |\finalhyphendemerits=5000|. Demerits are in units of - ``badness squared,'' so the} - -\bugonpage 101, lines 29--30 (3/13/84) - -{\parfillskip=0pt -\danger It's possible to control the length of lines in a much more general -way, if simple changes to |\leftskip| and |\rightskip| aren't -flexible enough for your\par} - -\bugonpage 113, bottom two lines (3/13/84) - -{\parfillskip=0pt -\ddanger Notice that the first ``|%| line'' of our example says |t=10.0|; -this is a consequence of another parameter, called ^|\topskip|. Glue -disappears at a page break, but\par} - -\bugonpage 124, eighth-last line (8/25/84) - -\ninepoint -{\parfillskip=0pt\noindent -discarded, |\box100| will -be void after the |\vsplit|. And if\/ |\box100| was void before the\par} - -\bugonpage 131, display in exercise 16.8 (3/16/84) - -\indent -|If$ x = y$, then $x$ is equal to $y.$| - -\bugonpage 170, table in middle of the page (2/12/84) - -\ninepoint -$$\baselineskip0pt\lineskip0pt -\halign to\hsize - {\strut\hbox to\parindent{\it#\hfil}& % for the legend "Left atom" - #\hfil\quad& % for the row labels - #\hfil\tabskip 0pt plus 10pt& % for the rule at the left - \hbox to 25pt{\tt\hss#\hss}& % for column 1 - \hbox to 25pt{\tt\hss#\hss}& % for column 2 - \hbox to 25pt{\tt\hss#\hss}& % for column 3 - \hbox to 25pt{\tt\hss#\hss}& % for column 4 - \hbox to 25pt{\tt\hss#\hss}& % for column 5 - \hbox to 25pt{\tt\hss#\hss}& % for column 6 - \hbox to 25pt{\tt\hss#\hss}& % for column 7 - \hbox to 25pt{\tt\hss#\hss}& % for column 8 - #\hfil\tabskip0pt\cr % for the rule at the right -\noalign{\vskip-6pt} % it just happens that there's extra white space -&&&&\multispan7\hss\it Right atom\hss\cr -\noalign{\vskip3pt} -&&&\rm Ord&\rm Op&\rm Bin&\rm Rel&\rm Open&\rm Close&\rm Punct&\rm Inner\cr -\noalign{\vskip2pt} -\omit&&\multispan{10}\leaders\hrule\hfil\cr -\omit\vbox to 2pt{}&&\vrule&&&&&&&&&\vrule\cr -&Ord&\vrule&0&1&(2)&(3)&0&0&0&(1)&\vrule\cr -&Op&\vrule&1&1&*&(3)&0&0&0&(1)&\vrule\cr -&Bin&\vrule&(2)&(2)&*&*&(2)&*&*&(2)&\vrule\cr -Left&Rel&\vrule&(3)&(3)&*&0&(3)&0&0&(3)&\vrule\cr -atom&Open&\vrule&0&0&*&0&0&0&0&0&\vrule\cr -&Close&\vrule&0&1&(2)&(3)&0&0&0&(1)&\vrule\cr -&Punct&\vrule&(1)&(1)&*&(1)&(1)&(1)&(1)&(1)&\vrule\cr -&Inner&\vrule&(1)&1&(2)&(3)&(1)&0&(1)&(1)&\vrule\cr -\omit\vbox to 2pt{}&&\vrule&&&&&&&&&\vrule\cr -\omit&&\multispan{10}\leaders\hrule\hfil\cr}$$ - -\bugonpage 173, line 11 (1/2/84) - -\indent|Clearly $a_i<b_i$ for~$i=1, 2, \ldots, n$.| - -\bugonpage 176, bottom two lines (7/20/84) - -\def\chapno{ 18} \exno=23 % for exercise 18.24! -\dangerexercise Typeset the display \ \lower12pt\null -$\tenpoint\smash{\displaystyle -\left\lgroup\matrix{a&b&c\cr d&e&f\cr}\right\rgroup - \left\lgroup\matrix{u&x\cr v&y\cr w&z\cr}\right\rgroup -}$, \ -using ^|\lgroup| and ^|\rgroup|. - -\bugonpage 189, line 18 (2/13/84) - -\ninepoint\noindent -{\parfillskip=0pt -when there is an overlap.] \ If $e=0$ and if there is an |\leqno|, -the equation number is\par} - -\bugonpage 204, line 31 (2/13/84) - -\ninepoint\noindent -of\/ |\a| is delimited by a left brace. - -\bugonpage 212, line 23 (7/8/84) - -\ninepoint\noindent -it equals~2.) \ -Similarly, ^|\tracingmacros||=2| will trace |\output|, |\everypar|, etc. - -\bugonpage 216, first five lines (8/25/84) - -\ddanger Expanded definitions that are made with |\edef| or |\xdef| continue -to expand tokens until only unexpandable tokens remain, except that -token lists produced by `^|\the|' are not expanded further. Furthermore -a token following `^|\noexpand|' will not be expanded, since its ability -to expand has been nullified. These two operations can be used to control -^^{expansion, avoiding} what gets expanded and what doesn't. - -\bugonpage 219, simplification of line 18 (2/15/84) - -\ninepoint\indent -| \advance\count0 by\count2 \hexdigit}}| - -\bugonpage 223, lines 3--4 (3/13/84) - -{\parfillskip=0pt -\ddanger Chapters 24 to 26 present summaries of all \TeX's operations -in all modes, and when those summaries mention a `\<box>' they mean one -of the seven\par} - -\bugonpage 242, line 29 (1/2/84) - -\ninepoint\noindent -{\parfillskip=0pt -a relation, the solution is to insert `|{}|' ^^{lbrace rbrace} -at the beginning of the right-hand formula; \TeX -\par} - -\bugonpage 245, line 24 (2/15/84) - -\ninepoint\noindent -of a box that spans columns $i$ through~$j$, -hence the glue in such a box might shrink. - -\bugonpage 248, the fourth dangerous bend (2/15/84) - -{\parfillskip=0pt -\ddanger You have to be careful with the use of |&| and ^|\span| and ^|\cr|, -because these tokens are intercepted by \TeX's scanner even when it is -not expanding macros.\par} - -\bugonpage 249, lines 20--26 (2/15/84) - -\ninepoint\noindent -line (see Chapter~9). -If you don't want a~|\cr| at the end of a certain line, -just type `|%|' and the corresponding |\cr| -will be ``commented out.'' ^^{percent} \ (This special mode doesn't -work with ^|\+| lines, since |\+| is a macro whose argument is delimited -by the token `|\cr|', not simply by a token that has the same meaning -as~|\cr|. ^^{delimited arguments} But you can redefine |\+| to overcome -this hurdle, if you want to. For example, define a macro |\alternateplus| -that is just like |\+| except that its argument is delimited by the active -character |^^M|; then include the command `|\let\+=\alternateplus|' as -part of\/ |\obeylines|.) - -\bugonpage 253, lines 28--32 (4/25/84) - -\ninepoint\noindent -vertical list at what it thinks is the best place, and at such times -it enters internal vertical mode and begins to read the commands in the -current |\output| routine. When the output routine begins, ^|\box255| -contains the page that \TeX\ has completed; the output routine is supposed to -do something with this vbox. When the output routine ends, the list of -items that it has constructed in internal vertical mode is placed just% -{\parfillskip=0pt\par} - -\bugonpage 254, lines 1--13 (3/13/84) - -\ddanger \TeX's primitive command |\shipout|\<box> is what actually -causes output. It sends the contents of the box to the |dvi| file, -which is \TeX's main output file; after \TeX\ has finished, -the ^|dvi| file will contain a compact device-independent encoding of -instructions that specify exactly what should be printed. When a -box is shipped out, \TeX\ displays the values of\/ |\count0| through -|\count9| on your terminal, ^^|\count0| as explained in Chapter~15; these -ten counters are also recorded in the |dvi| file, where they can be used -to identify the page. All of the ^|\openout|, ^|\closeout|, and ^|\write| -commands that appear inside of the \<box> are performed in their natural -order as that box is being shipped out. Since a |\write| command -expands macros, as explained in Chapter~21, \TeX's scanning mechanism -might detect syntax errors while a |\shipout| is in progress. If -^|\tracingoutput| is nonzero at the time of a |\shipout|, the contents -of the \<box> being shipped are written into your log file in symbolic -form. You can say |\shipout| anywhere, not only in an output routine. - -\bugonpage 255, line 33 (4/25/84) - -\ninepoint\indent -|\nointerlineskip| - - -\bugonpage 256, starting with line $-17$ (11/1/83) - -\ninepoint -\textindent{6)} Finally, the ^|\dosupereject| macro is designed to clear -out any insertions that have been held over, whether they are illustrations -or footnotes or both: ^^|\insertpenalties| ^^|\supereject| -\begintt -\ifnum\insertpenalties>0 - \line{} \kern-\topskip \nobreak - \vfill\supereject\fi -\endtt -The mysterious negative ^|\kern| here cancels out the natural space of the -^|\topskip| glue that goes above the empty |\line|; that empty line box -prevents the ^|\vfill| from disappearing into a page break. The vertical -list that results from |\dosupereject| is placed on \TeX's list of things -to put out next, just after the straggling insertions have been -reconsidered as explained in Chapter~15. Hence another super-eject will -occur, and the process will continue until no insertions remain. - -\bugonpage 262, line 14 (2/12/84) - -\ninepoint\indent -|\def\endindex{\mark{}\break\endgroup}| - -\bugonpage 262, lines 34 and 35 (2/12/84) - -\ninepoint\noindent -if\/ |\next| is `|\endindex|', -the next commands executed will be `|\vfill|\allowbreak -|\mark{}|\allowbreak|\break|\allowbreak|\endgroup|'; -otherwise the line will be treated as a main entry. - -\bugonpage 269, line 23 becomes two lines (8/25/84) - -\ninepoint\noindent -tokens like |+|$_{12}$; -(3)~keywords like \[pt]; (4)~control sequence names like |\dimen|; -or (5)~the special symbols |{|, |}|, |$|. - -\bugonpage 274, line 24 (2/15/84) - -\ninepoint\indent -|\lineskip|\quad(interline glue if\/ |\baselineskip| isn't feasible) - -\bugonpage 289, slight clarification on lines 39--41 (3/10/84) - -\ninepoint -A \<math character> defines a 15-bit number either by specifying it -directly with ^|\mathchar| or in a previous ^|\mathchardef|, or by -specifying a 27-bit |\delimiter| value; in the latter case, the least -significant 12~bits are discarded. - - -\bugonpage 307, a slightly more explicit answer (11/3/83) - -\ninepoint\noindent -\hbox to\parindent{\bf\hss6.3.\enspace}% -It represents the heavy bar that shows up in -your output. \ (This bar wouldn't be present if\/ ^|\overfullrule| had been -set to |0pt|, nor is it present in an underfull box.) - -\bugonpage 313, first four lines (3/13/84) - -{\ninepoint\parfillskip=0pt -\ansno12.17: - You get `A' at the extreme left and `puzzle.\null' at the extreme right, -because the space between words has the only stretchability that is finite; -the infinite stretchability cancels out. \ (In this case, \TeX's rule -about ^{infinite glue} differs from what you would get in the limit if the -value of $1\,{\rm fil}$ were finite but getting larger and larger. -The true\par} - -\bugonpage 315, first three lines (3/13/84) - -\ninepoint -\ansno14.14: - Just say |\parfillskip|\stretch|=|\stretch|\parindent|. Of course, -\TeX\ will not be able to find appropriate line breaks unless each -paragraph is sufficiently long or sufficiently lucky; but with an -appropriate text, your output will be immaculately -symmetrical.{\parfillskip=\parindent\par} - -\bugonpage 324, line 16 (2/15/84) - -\ninepoint\noindent -\hbox to\parindent{\bf\hss18.41.\enspace}% -|$$\{\underbrace{\overbrace{\mathstrut a,\ldots,a}| - -\bugonpage 324, first line of answer 18.44 (4/11/84) - -\ninepoint -\ansno18.44: - |$$\mathop{{\sum}'}_{x\in A}f(x)\mathrel{\mathop=^{\rm def}}| - -\bugonpage 333, beginning of the final paragraph (12/19/83) - -\ninepoint -{\sl Note:\/} The stated preamble solves the problem and demonstrates -that \TeX's line-breaking capability can be used within tables. But this -particular table is not really a good example of the use of\/ |\halign|, -because \TeX\ could typeset it directly, using ^|\everypar| in an -appropriate manner to set up the hanging indentation, and using |\par| -instead of\/ |\cr|. For example, one could say - -\bugonpage 341, the bottom line was left out! (2/9/84) - -\line{Footline\quad\dotfill\quad Page 1009} - -\bugonpage 345, top three lines (1/26/84) - -\ninepoint{\noindent\parfillskip=0pt -A mathcode is relevant only when the corresponding category code is -11 or~12; therefore many of these codes will rarely be looked at. For -example, the math code for |^^M| specifies the character |\oplus|, -but it's hard to imagine a user who would want |^^M|\par} - -\bugonpage 345, line 31 (2/29/84) - -\ninepoint\noindent -|\delcode`\<="26830A \delcode`\\="26E30F \delcode`\>="26930B| - -\bugonpage 347, lines 1 and 2 (3/16/84) - -\ninepoint\noindent -|\count18=3 % this counter allocates math families 4, 5, 6, ...|\hfil\break -|\count19=255 % this counter allocates insertions 254, 253, 252, ...| - -\bugonpage 350, line 9 from the bottom (3/16/84) - -\ninepoint\noindent -font, whose information does not have to be loaded again. - -\bugonpage 354, line 5 (6/7/84) - -\ninepoint\noindent -|\def\ialign{\everycr={}\tabskip=0pt \halign} % initialized \halign| - -\bugonpage 355, lines 19--21 (7/3/84) - -\ninepoint\noindent -subdivision in a document; to use it, you say -`|\beginsection|\<section title>' followed by a blank line (or~|\par|). -The macro first emits glue and penalties, designed to start a new page -if the present page is nearly full; then it makes a ^|\bigskip| and -puts the section{\parfillskip=0pt\par} - -\bugonpage 355, lines 27--29 (7/3/84) - -\ninepoint\noindent -|\outer\def\beginsection#1\par{\vskip0pt plus.3\vsize\penalty-250| -\par\noindent -| \vskip0pt plus-.3\vsize\bigskip\vskip\parskip| -\par\noindent -| \message{#1}\leftline{\bf#1}\nobreak\smallskip\noindent}| - -\bugonpage 355, line 37 (4/24/84) - -\ninepoint\noindent -|\outer\def\proclaim #1. #2\par{\medbreak| - -\bugonpage 356, seven lines from the bottom (4/11/84) - -\ninepoint\noindent -|\def|^|\TeX||{T\kern-.1667em \lower.5ex\hbox{E}\kern-.125em X}| - -\bugonpage 359, starting with line 2 (11/16/83) - -\ninepoint -\beginlines -|\mathchardef\ldotp="602E\mathchardef\cdotp="6201\mathchardef\colon="603A| -|\def\ldots{\mathinner{\ldotp\ldotp\ldotp}}| -|\def\cdots{\mathinner{\cdotp\cdotp\cdotp}}| -|\def\vdots{\vbox{\baselineskip=4pt \lineskiplimit=0pt| -| \kern6pt \hbox{.}\hbox{.}\hbox{.}}}| -|\def\ddots{\mathinner{\mskip1mu\raise7pt\vbox{\kern7pt\hbox{.}}\mskip2mu| -| \raise4pt\hbox{.}\mskip2mu\raise1pt\hbox{.}\mskip1mu}}| -\endlines - -\bugonpage 359, starting with line 19 (11/3/83) - -{\ninepoint\parindent=0pt -|\def|^|\overbrace|% - |#1{\mathop{\vbox{\ialign{##\crcr\noalign{\kern3pt}|\parbreak% -| \downbracefill\crcr\noalign{\kern3pt\nointerlineskip}|\parbreak% -| $\hfil\displaystyle{#1}\hfil$\crcr}}}|^|\limits||}| - -|\def|^|\underbrace||#1{\mathop{\vtop{\ialign{##\crcr|\parbreak% -| $\hfil\displaystyle{#1}\hfil$\crcr|% - |\noalign{\kern3pt\nointerlineskip}|\parbreak% -| \upbracefill\crcr\noalign{\kern3pt}}}}\limits}| -} - -\bugonpage 359, seventh line from the bottom (2/29/84) - -\ninepoint\noindent -|\def\backslash{\delimiter"026E30F } \def\bracevert{\delimiter"000033E }| - -\bugonpage 361, line 3 (8/17/84) - -\ninepoint\noindent - -|\def\buildrel#1\over#2{\mathrel{\mathop{\null#2}\limits^{#1}}}| - -\bugonpage 363, line 10 (4/26/84) - -\ninepoint\noindent -| \ifhmode\edef\@sf{\spacefactor=\the\spacefactor}\/\fi| - -\bugonpage 364, starting with line 10 (11/1/83) - -{\ninepoint\parindent=0pt -|\def\dosupereject{\ifnum\insertpenalties>0 % something is being held over|% -\parbreak -| \line{}\kern-\topskip\nobreak\vfill\supereject\fi}| -} - -\bugonpage 364, line 28 (7/8/84) - -\ninepoint\noindent -| \tracingmacros=2 \tracingparagraphs=1 \tracingrestores=1 | - -\bugonpage 370, line 7 (3/16/84) - -\ninepoint\noindent -information about the \TeX\ Users Group.) - -\bugonpage 374, line 23 (7/8/84) - -\ninepoint -\line{log file when |\tracingmacros=2| and - |\tracingcommands=2|. One of the important ways} - -\bugonpage 379, line 1 (1/12/84) - -\ninepoint\noindent -A particular item can be selected by its position number from the left: - -\bugonpage 381, line 6 (2/12/84) - -\ninepoint\indent -|\newcount\lineno % the number of file lines listed| - -\bugonpage 381, lines 24 and 25 (12/15/83) - -\ninepoint -{\parfillskip=0pt -Instead of listing a file verbatim, you might want to define a |\verbatim| -macro such that `|\verbatim{$this$|{\tt\ is }|{\it!}}|' yields -`|$this$|{\tt\ is }|{\it!}|'. It's somewhat\par} - -\bugonpage 385, lines 22 and 23 (1/12/84) - -\ninepoint\noindent -macro, a parameter, or a token list -variable; (b)~when \TeX\ must determine whether the token -|&|~or ^|\span| ^^{ampersand} -or ^|\cr| or~^|\crcr| is the end of an entry within an ^{alignment}. - -\bugonpage 387, two paragraphs in right column (1/18/84) - -\setbox0=\vbox{ -\eightpoint -\tolerance=9999 -\hbadness=2300 -\finalhyphendemerits=3000000 -\doublehyphendemerits=1000000 -\parskip=1pt -\parindent=1.5em -\frenchspacing -\hsize=166.8125pt -\def\\#1{\raise.5pt\hbox{$\scriptscriptstyle - \ifx#1`\langle\!\langle\else\rangle\!\rangle\fi$}% Spanish quote marks - \ifx#1`\nobreak\hskip0pt \fi} % allow hyphenation -\item{A.} Exactamente. Pero los profesores son tan conservadores -que temer\'\i an espantar al tipo de estudiante \\`apisonadora\\' -que hace lo que le proponen para casa, obe\-dien\-te\-mente y de forma -mec\'anica. Adem\'as, no creo que les gustase el trabajo adicional -de calificar respuestas a preguntas abiertas. - -\item{}La forma tradicional es dejar la parte creativa para los cursos -altos. Durante diecisiete a\~nos o m\'as se ense\~na al es\-tu\-diante a -aprobar, luego de golpe, cerca de la graduaci\'on, se le pide que haga -algo original. - -}\rightline{\box0} - -\bugonpage 395, lines 21 and 22 (1/12/84) - -\ninepoint\noindent -{\parfillskip=0pt -Notice that the macros need to do their own checking for ligatures, and -they also take appropriate actions when a paragraph begins with an opening -quote. Since |\kern|\par} - -\bugonpage 399, line 1 (1/10/84) - -\ninepoint -{\parfillskip=0pt -Inside the output routine, |\box\footins| will now be a vbox of hboxes, and -\par} - -\bugonpage 399, line 9 (2/28/84) - -\ninepoint\indent -|.\hbox(7.6359+0.0)x269.62617 []| - -\bugonpage 407, line 4 (6/10/84) - -\ninepoint\noindent -|\beginlinemode| and |\beginparmode| are defined to initiate these -modes; and another% -{\parfillskip=0pt\par} - -\bugonpage 408, line 15 (12/14/83) - -\noindent -| P. O. Box 1009, Haga Alto, CA 94321 USA}| - -\smallskip\noindent\ninepoint -[Also change the ZIP code in the return address on the envelope -illustrated at the bottom of page 405.] - -\bugonpage 409, line 5 (2/18/84) - -\ninepoint\noindent -|\font\twelveit=cmti10 at 12pt % (a cheap substitute for cmti12)| - -\bugonpage 417, last six lines (8/25/84) - -\ninepoint\noindent -^|\parskip| -of |0pt| |plus|~|.8pt| between adjacent entries, and since there is room for -more than 50 lines per column; therefore the |manmac| balancing routine tries -to make both the top and bottom baselines agree at the end of the index. -In applications where the glue is not so flexible it would be more -appropriate to let the right-hand column be a little short; the best -way to do this is probably to replace the command `|\unvbox3|' by -`|\dimen2=|^|\dp||3| |\unvbox3| |\kern-\dimen2| ^|\vfil|'. - -\bugonpage 422, lines 24--26 (2/9/84) - -\ninepoint\noindent -(The last two lines use |\d@nger| and |\dd@nger|, which are non-|\outer| -equivalents of\/ |\danger| and |\ddanger|; such duplication is necessary -because control sequences of type ^|\outer| cannot appear within a |\def|.) - -\bugonpage 428, in the table of sixteen basic fonts (12/19/83) - -\ninepoint\noindent -[The special fonts called |cmi10| and |cmi7| and |cmi5| should really be -called |cmmi10| and |cmmi7| and |cmmi5|.] - -\bugonpage 433, last eight lines (8/17/84) - -\noindent -explained in Appendix~G\null. If you want to increase -the number of parameters past the number that actually appear in a font's -metric information file, you can assign new values immediately after that font -has been loaded. For example, if some font |\ff| with seven parameters -has just entered \TeX's memory, the command |\fontdimen13\ff=5pt| will set -parameter number~13 to $5\pt$; the intervening parameters, numbers 8--12, -will be set to zero. You can even give more than seven parameters to -^|\nullfont|, provided that you assign the values before any actual fonts -have been loaded. - -\bugonpage 445, line 6 (11/11/83) - -\ninepoint -\line{if $(a-{1\over2}\theta)- -\bigl(h(z)-v\bigr)<\varphi$, increase~$v$ by the difference. Finally -construct a vbox of} - -\bugonpage 449, line 12 (1/18/84) - -\line{immediately clear why the `n' should -be attached to the `e' in one case but not} - -\bugonpage 459, left column, line 2 (1/18/84) - -\eightpoint -al-Khw\^arizm\^\i, abu Ja`far Mu\d{h}ammad - -\bugonpage 460, index entry for Beethoven (8/16/84) - -\eightpoint -Change `von' to `van'. - -\bugonpage 461, third line in left column (8/25/84) - -\eightpoint The entry for |\box255| should not be indented. - -\bugonpage 461, index entry for boxed material (8/2/84) - -\eightpoint Add `{\it 420}'. - -\bugonpage 462, index entry for {\tt\char`\\colon} (11/16/83) - -\eightpoint Add page \underbar{359} to this list. - -\bugonpage 462, right column, third-last line (5/21/84) - -\eightpoint\indent -[Change `crochets' to `crotchets'; then move this entry down two lines.] - -\bugonpage 463, right column, line 16 (5/20/84) - -\eightpoint\indent -design size, 16--17, 213. - -\bugonpage 464, index entry for {\tt\char`\\dump} (1/10/84) - -\eightpoint Add page {\it 344\/} to this list. - -\bugonpage 464, right column, line 5 (1/5/84) - -\eightpoint -Dvo\v r\'ak, Anton\'\i n Leopold, 409. - -\bugonpage 464, index entry for {\tt\char`\\end} (8/25/84) - -\eightpoint Page number 264 should be underlined. - -\bugonpage 465, index entry for {\tt\char`\\everydisplay} (8/25/84) - -\eightpoint Add page {\it 326\/} to this list. - -\bugonpage 465, index entry for {\tt\char`\\filbreak} (7/3/84) - -\eightpoint Delete the reference to page number 355. - -\bugonpage 466, index entry for {\tt\char`\\footnote} (4/26/84) - -\eightpoint Page number 363 should be underlined. - -\bugonpage 467, index entry for {\tt\char`\\hidewidth} (7/3/84) - -\eightpoint Page number 354 should be underlined. - -\bugonpage 468, index entry for insertions (8/25/84) - -\eightpoint Add pages 115--117, 122--125 to this list. - -\bugonpage 469, index entry for {\tt\char`\\kern} (11/1/83) - -\eightpoint Add page {\it 256\/} to this list. - -\bugonpage 470, index entry for {\tt\char`\\limits} (11/3/83) - -\eightpoint Add page {\it 359\/} to this list. - -\bugonpage 472, right column, lines 10--11 (7/9/84) - -{\eightpoint -\indent -|\normalbaselines|\kern1pt, - {\it 325}, 349, $\underline{351}$, {\it 414--415}.\par -\baselineskip=9.9pt -\indent -|\normalbaselineskip|\kern1pt, - $\underline{349}$, {\it 414--415}.\par -} - -\bugonpage 472, index entry for {\tt\char`\\null} (7/3/84) - -\eightpoint Page number 351 should be underlined. - -\bugonpage 472, right column, line 28 (1/3/84) - -\eightpoint\indent -\hbox to0pt{\hss\lower1pt\hbox{*}}|\nullfont|, 14, 153, 271, 433. - -\bugonpage 476, a new index entry (8/25/84) - -\eightpoint\indent -shifted output, {\sl see\/} |\hoffset|, |\voffset|. - -\bugonpage 476, index entry for shriek (8/25/84) - -\eightpoint It should not be capitalized. - -\bugonpage 478, index entry for \'Swierczkowski (9/15/84) - -\eightpoint -The middle name should be `S\l awomir'. - -\bugonpage 479, last seven lines in the left column (8/23/84) - -\eightpoint -{\baselineskip=9.9pt -\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\tracingmacros|, $\underline{205}$, $\underline{212}$, 273, {\it329}. -\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\tracingonline|, 121, 212, 273, $\underline{303}$. -\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\tracingoutput|, $\underline{254}$, 273, {\it301--302}. -\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\tracingpages|, {\it112--114}, 124, 273, $\underline{303}$. -\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\tracingparagraphs|, {\it98--99}, 273, $\underline{303}$. -\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\tracingrestores|, 273, $\underline{301}$, $\underline{303}$. -\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\tracingstats|, 273, $\underline{300}$, $\underline{303}$, {\it383}. -} - -\bugonpage 479, index entry for underlined text (8/2/84) - -\eightpoint Add `{\sl see also\/} |\underbar|'. - -\bugonpage 480, index entry for {\tt\char`\\vbox} (11/1/83) - -\eightpoint Delete page 256 from this list. - -\bye - diff --git a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.seven b/Master/texmf-dist/doc/generic/knuth/source/errata/errata.seven deleted file mode 100644 index 0866189da51..00000000000 --- a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.seven +++ /dev/null @@ -1,821 +0,0 @@ -% 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, 1991}} -\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}, Volumes A,~B, C, and D\null, between 1 January 1991 and -15 March 1992. -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. Some of the corrections below have already been made in -reprintings of the books. 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. -Dozens of changes, too many to list -here, have been made to Volume~E because of recent upgrades to the -Computer Modern font source files. -Those changes, which affect only the digitization at -low resolution and the appearance of lowercase delta and -some characters in the math symbols -fonts (but not the {\tt TFM} files), are documented at -the end of file {\tt cm85.bug}. -\looseness=-1 - -% volume A - -\bugonpage A96, lines 9--11 (9/18/91) - -\ninepoint -Some ^{German} words traditionally change their spelling -when they are split between lines. For example, `backen' becomes `bak-ken' -and `Bettuch' becomes `Bett-tuch'. How can you instruct \TeX\ to produce -such effects? - -\bugonpage A178, line 17 (11/19/91) - -\ninepoint -If you say `|\phantom{|\<subformula>|}|' in any formula, plain -\TeX\ will do its\cutpar - -\bugonpage A286, bottom two lines and continuing into A287 (11/21/91) - -\ninepoint\noindent -stands for zero or more \<assignment> -commands other than |\setbox|. -If the assignments are not followed by a \<character>, where -\<character> stands for any of the commands just discussed in the previous -paragraph, \TeX\ treats |\accent| as if it were |\char|, except that -the space factor is set to 1000. Otherwise the character that follows -the assignment is accented by the character that corresponds to the -\<8-bit number>. \ (The purpose of the intervening assignments is to -allow the accenter and accentee to be in different fonts.) \ If the -accent must be moved up or down, it is put into an hbox that is -raised or lowered. Then the accent is effectively superposed on the -character by means of kerns, in such a way that the width of the accent -does not influence the width of the resulting horizontal list. -Finally, \TeX\ sets |\spacefactor=1000|. - -\bugonpage A291, lines 6--8 (11/21/91) - -\ninepoint\noindent -`|}|' may be followed by -optional \<assignment> commands other than |\setbox|, -after which `|$$|'~must conclude -the display. \TeX\ will insert the |\abovedisplayskip| and -|\belowdisplayskip| glue before and after the result of the alignment. - -\bugonpage A293, line 14 (9/18/91) - -\ninepoint\noindent -explained in Appendix~G\null. \TeX\ -scans \<one optional space> after completing a displayed formula; this is -usually the implicit space at the end of a line in the input file. - -\bugonpage A311, bottom four lines (9/18/91) - -\ninepoint -\ansno12.7: 1000, except: 999 after |O|, |B|, |S|, |D|, and |J|; 1250 after the -comma; 3000 after the exclamation point, the right-quote marks, and the -periods. If a period had come just after the |B| (i.e., if the text had -said `|B. Sally|'), the space factor after that period would have -been~1000, not~3000. - -\bugonpage A314, lines 16--18 from the bottom (1/10/92) - -\ninepoint -\ansno14.8: |ba\ck/en| and |Be\ttt/uch|, where the macros |\ck/| and |\ttt/| -are defined by -\begintt -\def\ck/{\discretionary{k-}{k}{ck}} -\def\ttt/{tt\discretionary{-}{t}{}} -\endtt - -\bugonpage A354, line 8 (9/18/91) - -\ninepoint\noindent -|\def\multispan#1{\omit\mscount=#1\relax\loop\ifnum\mscount>1 \sp@n\repeat}|% -\kern-10pt\null - -\bugonpage A356, line 11 from the bottom (9/23/91) - -\ninepoint\noindent -| \else{\ooalign{\unhbox0\crcr\hidewidth\char'30\hidewidth}}\fi}| - -\bugonpage A358, line 8 from the bottom (9/18/91) - -\ninepoint\noindent -|\mathchardef\mapstochar="3237 \def\mapsto{\mapstochar\rightarrow}| - -\bugonpage A359, line 13 (11/4/91) - -\ninepoint\noindent -|\def\overrightarrow#1{\vbox{\m@th\ialign{##\crcr| - -\bugonpage A359, line 16 (11/4/91) - -\ninepoint\noindent -|\def\overleftarrow#1{\vbox{\m@th\ialign{##\crcr| - -\bugonpage A359, line 19 (11/4/91) - -\ninepoint\noindent -|\def\overbrace#1{\mathop{\vbox{\m@th\ialign{##\crcr\noalign{\kern3pt}| - -\bugonpage A359, line 22 (11/4/91) - -\ninepoint\noindent -|\def\underbrace#1{\mathop{\vtop{\m@th\ialign{##\crcr| - -\bugonpage A359, lines 7--14 from the bottom (1/11/92) - -\ninepoint\noindent -|\def\lgroup{\delimiter"462833A } \def\rgroup{\delimiter"562933B }|% -\par\noindent -|\def\lmoustache{\delimiter"437A340 } \def\rmoustache{\delimiter"537B341 }|% - \kern-2pt\null\par\noindent -|\def\uparrow{\delimiter"3222378 } \def\Uparrow{\delimiter"322A37E }|% -\par\noindent -|\def\downarrow{\delimiter"3223379 } \def\Downarrow{\delimiter"322B37F }|% -\par\noindent -|\def\updownarrow{\delimiter"326C33F } \def\arrowvert{\delimiter"026A33C }|% -\par\noindent -|\def\Updownarrow{\delimiter"326D377 } \def\Arrowvert{\delimiter"026B33D } |% -\par\noindent -|\def\vert{\delimiter"026A30C } \def\Vert{\delimiter"026B30D } |% -\par\noindent -|\def\backslash{\delimiter"026E30F } \def\bracevert{\delimiter"077C33E }| - -\bugonpage A360, line 13 (11/19/91) - -\ninepoint\noindent -|\phantom|, |\smash|, |\root|, and other -operations. (Actually |\phantom| and |\smash| are not perfect: They -assume that the current style is uncramped.) - -\bugonpage A360, line 2 from the bottom (11/4/91) - -\ninepoint\noindent -|\def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}}| - -\bugonpage A361, top line (11/4/91) - -\ninepoint\noindent -|\def\rlh@#1{\vcenter{\m@th\hbox{\ooalign{\raise2pt| - -\bugonpage A364, line 5 from the bottom (11/4/91) - -\ninepoint\noindent -|\def|^|\fmtname||{plain}\def\fmtversion{3.141}| - -\bugonpage A377, the bottom 17 lines (9/18/91) - -\eightpoint\noindent\hangindent\parindent\hangafter-3 -story: Macro |\stest| decides whether or not -a given token list register begins with -a \<space token> as defined in Chapter~24. If so, the macro -decides whether the token is explicit and/or funny and/or active. -\begintt -\newif\ifspace \newif\iffunny \newif\ifexplicit \newif\ifactive -\def\stest#1{\funnyfalse \expandafter\s\the#1! \stest} -\def\s{\global\explicitfalse \global\activefalse \futurelet\next\ss} -\def\ss{\ifcat\noexpand\next\stoken\let\nxt\sx\else\let\nxt\ns\fi\nxt} -\def\sx{\spacetrue\ifx\next\stoken\let\nxt\sss\else\let\nxt=\ssss\fi\nxt} -\long\def\sss#1 #2\stest{\def\next{#1}% - \ifx\next\empty \global\explicittrue \else\testactive#1\s\fi} -\long\def\ssss#1#2\stest{\funnytrue{\escapechar=\if*#1`?\else`*\fi\relax - \if#1\string#1\uccode`#1=`~ % we assume that ~ is an active character - \uppercase{\ifcat\noexpand#1}\noexpand~\global\activetrue - \else\global\explicittrue\fi - \else\testactive#1\s\fi}} -\long\def\ns#1\stest{\spacefalse} -\long\def\testactive#1#2\s{\expandafter\tact\string#1\s\tact} -\long\def\tact#1#2\tact{\def\next{#2}\ifx\next\xs\global\activetrue - \else\ifx\next\empty \global\activetrue\fi\fi} \def\xs{\s} -\endtt - -\bugonpage A444, lines 15--26 (3/26/91) - -\ninepoint -\textindent{\bf14.}If the current item is an Ord atom, -go directly to Rule~17 unless -all of the following are true: The nucleus is a symbol; the subscript -and superscript are both empty; the very next item in the math list is an -atom of type Ord, Op, Bin, Rel, Open, Close, or Punct; and the nucleus of the -next item is a symbol whose family is the same as the family in the present -Ord atom. In such cases the present symbol is marked as a text symbol. -If the font information shows a ligature between this symbol and the -following one, using the specified family and the current size, then -insert the ligature character and continue as specified by the font; -in this process, two characters may collapse into a single Ord -text symbol, and/or new Ord text characters may appear. If the font information -shows a kern between the current symbol and the next, insert a kern item -following the current atom. -As soon as an Ord atom has been fully processed for ligatures and kerns, -go to Rule~17. - -\bugonpage A446, lines 5 and 6 from the bottom (1/13/92) - -\ninepoint\noindent -are used to change the current style just as -in the first pass, so that both passes have the same value of~$C$ when -they work on any particular atom. - -\bugonpage A447, in the parameter usage table (1/13/92) - -\ninepoint\noindent[Delete the entry for `$\sigma_2$'; the entry for -`$\sigma_{17}$' moves down to the bottom of the left column.] - -\bugonpage A447, line 2 after the parameter usage table (1/13/92) - -\ninepoint\noindent -to parameters in arbitrary families: -Rule~17 uses |\fontdimen| parameter~2 (space) to de-\cutpar - -\bugonpage A467, entry for {\tt\char`\\hss} (9/18/91) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -{\tt\char`\\hss}, 71--72, {\it82--83}, 233, 283, 285, 290, 442. - -\bugonpage A467, new subentry under hyphenation (9/18/91) - -\eightpoint\indent\quad -suppressing, 93, 414, 424, 454. - -\bugonpage A476, right column (11/21/91) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -{\tt\char`\\setbox}, 66--67, 77, 81, $\underline{120}$, 276, 279, 286,\par -\indent\qquad 291, {\it386--392}. - -% 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 (1/11/92) - -\ninepoint\noindent\hskip10pt -{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$% -{\tt This\]is\]TeX,\]Version\]3.141\char'23}\quad -$\{\,$printed when \TeX\ starts$\,\}$ - -\bugonpage B18, lines 21 and 22 (10/12/91) - -\tenpoint\noindent -must have an \\{xchr} equivalent in the local -character set. (This restriction applies only to preloaded strings, -not to those generated dynamically by the user.) - -\bugonpage B26, new line before fourth line from bottom (1/24/92) - -\ninepoint\noindent\hskip20pt -\\{nl}: \\{integer};\quad$\{\,$new-line character to restore$\,\}$ - -\bugonpage B26, bottom line and top 3 lines of B27 (1/24/92) - -\ninepoint\noindent\hskip30pt -{\bf else begin if\/} $\\{selector}>\\{pseudo}$ {\bf then}\par -\noindent\hskip50pt -{\bf begin} \\{print\_char}($s$); \ {\bf return};\quad - $\{\,$internal strings are not expanded$\,\}$\par\noindent\hskip50pt -{\bf end};\par\noindent\hskip40pt -{\bf if\/} ($\langle\,$Character $s$ is the current new-line - character{\sevenrm\kern.5em244}$\,\rangle$) {\bf then}\par\noindent\hskip50pt -{\bf if\/} $\\{selector}<\\{pseudo}$ {\bf then}\par\noindent\hskip60pt -{\bf begin} \\{print\_ln}; \ {\bf return}; \ -{\bf end};\par\noindent\hskip40pt -$\\{nl}\gets\\{new\_line\_char}$; \ $\\{new\_line\_char}\gets-1$;\quad - $\{\,$temporarily disable new-line character$\,\}$\par\noindent\hskip40pt -$j\gets\\{str\_start}[s]$;\par\noindent\hskip40pt -{\bf while} $j<\\{str\_start}[s+1]$ {\bf do}\par\noindent\hskip50pt -{\bf begin} $\\{print\_char}(\\{so}(\\{str\_pool}[j]))$; \ $\\{incr}(j)$; \ -{\bf end};\par\noindent\hskip40pt -$\\{new\_line\_char}\gets\\{nl}$; \ {\bf return};\par\noindent\hskip40pt -{\bf end}; - -\bugonpage B27, lines 9 and 10 (9/19/91) - -\tenpoint\noindent -{\bf 60.\quad}% -Control sequence names, file names, and strings constructed with -{\tt\char`\\string} might contain \\{ASCII\_code} values that can't -be printed using \\{print\_char}. Therefore we use -\\{slow\_print} for them: - -\bugonpage B27, lines 13--26 (1/24/92) - -\ninepoint\noindent\hskip10pt -{\bf var} $j$: \\{pool\_pointer};\quad$\{\,$current character code - position$\,\}$\par\noindent\hskip10pt -{\bf begin if\/} $(s\ge\\{str\_ptr})\lor(s<256)$ {\bf then} \\{print}(s) -\par\noindent\hskip10pt {\bf else begin} $j\gets\\{str\_start}[s]$;\par -\noindent\hskip20pt{\bf while} $j<\\{str\_start}[s+1]$ {\bf do}\par -\noindent\hskip30pt{\bf begin} $\\{print}(\\{so}(\\{str\_pool}[j]))$; \ - $\\{incr}(j)$;\par\noindent\hskip30pt -{\bf end};\par\noindent\hskip20pt -{\bf end};\par\noindent\hskip10pt -{\bf end}; - -\bugonpage B28, line 8 (9/19/91) - -\ninepoint\noindent\hskip10pt -{\bf else begin} \\{slow\_print}(\\{format\_ident}); \ \\{print\_ln}; - -\bugonpage B33, line 3 (1/11/92) - -\tenpoint\noindent -recursively. A similar interlock is provided by \\{set\_box\_allowed}. - -\bugonpage B33, new line to come after line 14 (1/11/92) - -\ninepoint\noindent -\\{set\_box\_allowed}: \\{boolean};\quad - $\{\,$is it safe to do a |\setbox| assignment?$\,\}$ - -\bugonpage B33, new line to come after line 20 (1/11/92) - -\ninepoint\noindent\hskip10pt -$\\{set\_box\_allowed}\gets\\{true}$; - -\bugonpage B36, line 12 (9/19/91) - -\ninepoint\noindent\hskip30pt -{\bf begin} \\{print\_nl}({\tt\char`\"You\]want\]to\]edit\]file\]\char`\"}); - \ \\{slow\_print}(\\{input\_stack}[\\{base\_ptr}].\\{name\_field}); - -\bugonpage B46, lines 9 and 10 (5/24/91) - -\tenpoint\noindent -arithmetic; see {\sl TUGboat \bf3},1 (March 1982), 10--27. (But the -routines cited there must be modified to allow negative glue ratios.) - -\bugonpage B47, lines 2 and 3 (5/24/91) - -\tenpoint\noindent -structures on a \\{memory\_word}, which contains either a (signed) integer, -possibly scaled, or a (signed) \\{glue\_ratio}, or a small number of -fields that are one half or one quarter of the size used\cutpar - -\bugonpage B177, lines 10 and 11 (9/19/91) - -\ninepoint\noindent\hskip20pt -{\bf begin} \\{print\_err}({\tt\char`\"Bad\]mathchar\char`\"});\par -\noindent\hskip20pt -\\{help2}({\tt\char`\"A\]mathchar\]number\]must\]be\]between\]0\]% - and\]32767.\char`\"}) - -\bugonpage B196, new lines after line 11 (1/13/92) - -\ninepoint\noindent\hskip20pt -{\bf if\/} $\\{align\_state}<1000000$ {\bf then}\quad - $\{\,$unmatched `|}|' aborts the line$\,\}$\par\noindent\hskip30pt -{\bf begin repeat} \\{get\_token}; \ {\bf until} $\\{cur\_tok}=0$;\par -\noindent\hskip30pt$\\{align\_state}\gets1000000$; \ {\bf goto} \\{done};\par -\noindent\hskip30pt{\bf end}; - -\bugonpage B208, line 21 (9/19/91) - -\ninepoint\noindent\hskip10pt -{\bf begin} \\{slow\_print}($a$); \ \\{slow\_print}($n$); \ - \\{slow\_print}($e$); - -\bugonpage B214, line 14 (9/19/91) - -\ninepoint\noindent\hskip10pt -{\bf begin} \\{wlog}(\\{banner}); \\{slow\_print}(\\{format\_ident}); \ - \\{print}({\tt\char`\"\]\]\char`\"}); \ - \\{print\_int}(\\{day}); \ - \\{print\_char}({\tt\char`\"\]\char`\"}); - -\bugonpage B214, line 2 from the bottom (9/19/91) - -\ninepoint\noindent\hskip10pt -\\{print\_char}({\tt\char`\"(\char`\"}); \ -\\{incr}(\\{open\_parens}); \ -\\{slow\_print}(\\{name}); \ -\\{update\_terminal}; \ -$\\{state}\gets\\{new\_line}$; - -\bugonpage B234, line 22 (9/19/91) - -\ninepoint\noindent\hskip20pt -\\{print}({\tt\char`\"\]in\]font\]\char`\"}); \ -\\{slow\_print}(\\{font\_name}[$f$]); \ -\\{print\_char}({\tt\char`\"!\char`\"}); \ -\\{end\_diagnostic}(\\{false}); - -\bugonpage B267, lines 7 and 8 (9/19/91) - -\ninepoint\noindent\hskip20pt -\\{print\_nl}({\tt\char`\"Output\]written\]on\]\char`\"}); \ -\\{slow\_print}(\\{output\_file\_name});\par\noindent\hskip20pt -\\{print}({\tt\char`\"\](\char`\"}); \ -\\{print\_int}(\\{total\_pages}); \ -\\{print}({\tt\char`\"\]page\char`\"}); - -\bugonpage B296, new lines after line 8 of section 716 (1/11/92) - -\ninepoint\noindent\hskip10pt -{\bf if\/} $f<0$ {\bf then}\par\noindent\hskip20pt -{\bf begin} \\{decr}($n$); \ $f\gets f+\oct{200000}$;\par\noindent\hskip20pt -{\bf end}; - -\bugonpage B297, new lines after line 7 of section 717 (1/11/92) - -\ninepoint\noindent\hskip20pt -{\bf if\/} $f<0$ {\bf then}\par\noindent\hskip30pt -{\bf begin} \\{decr}($n$); \ $f\gets f+\oct{200000}$;\par\noindent\hskip30pt -{\bf end}; - -\bugonpage B348, bottom two lines (1/3/92) - -\tenpoint\noindent\hskip10pt -Up to three passes might be made through the paragraph in an attempt to find at -least one set of feasible breakpoints. On the first pass, we have -$\\{threshold}=\\{pretolerance}$ and $\\{second\_pass}=$\cutpar - -\bugonpage B364, line 20 (1/3/92) - -\tenpoint\noindent -{\bf 863.\quad} -The `{\bf loop}' in the following code is performed at most -thrice per call of \\{line\_break}, since\cutpar - -\bugonpage B377, insert new line after line 12 (9/19/91) - -\ninepoint\noindent -\\{hyf\_bchar}:\enspace\\{halfword};\quad - $\{\,$boundary character after $c_n\,\}$ - -\bugonpage B378, line 12 from the bottom (9/19/91) - -\ninepoint\noindent\hskip30pt -$\\{hyf\_bchar}\gets\\{character}(s)$; \ -$c\gets\\{qo}(\\{hyf\_bchar})$; - -\bugonpage B378, line 9 from the bottom (1/10/92) - -\ninepoint\noindent\hskip30pt -$\\{hb}\gets s$; \ \\{incr}(\\{hn}); \ $\\{hu}[\\{hn}]\gets c$; \ -$\\{hc}[\\{hn}]\gets\\{lc\_code}(c)$; \ -$\\{hyf\_bchar}\gets\\{non\_char}$; - -\bugonpage B378, line 5 from the bottom (9/19/91) - -\ninepoint\noindent\hskip30pt -{\bf else if} $(\\{type}(s)=\\{kern\_node})\land(\\{subtype}(s)=\\{normal})$ - {\bf then} $\\{hb}\gets s$\par\noindent\hskip40pt - {\bf else goto} \\{done3}; - -\bugonpage B379, line 6 (9/19/91) - -\ninepoint\noindent\hskip10pt -$j\gets\\{hn}$; \ $q\gets\\{lig\_ptr}(s)$; \ -{\bf if\/} $q>\\{null}$ {\bf then} $\\{hyf\_bchar}\gets\\{character}(q)$; - -\bugonpage B379, new line between lines 14 and 15 (1/10/92) - -\ninepoint\noindent\hskip10pt -{\bf if\/} $\\{odd}(\\{subtype}(s))$ {\bf then} -$\\{hyf\_bchar}\gets\\{font\_bchar}[\\{hf}]$ {\bf else} -$\\{hyf\_bchar}\gets\\{non\_char}$; - -\bugonpage B379, line 19 (9/19/91) - -\ninepoint\noindent\hskip10pt -{\bf if\/} $\\{hn}<\\{l\_hyf}+\\{r\_hyf}$ {\bf then goto} \\{done1}; \ -\quad$\{\,$\\{l\_hyf} and \\{r\_hyf} are always $\ge1\,\}$ - -\bugonpage B380, lines 9--11 from the bottom reduce to a single line (1/10/92) - -\ninepoint\noindent\hskip10pt -$q\gets\\{link}(\\{hb})$; \ $\\{link}(\\{hb})\gets\\{null}$; \ -$r\gets\\{link}(\\{ha})$; \ $\\{link}(\\{ha})\gets\\{null}$; \ -$\\{bchar}\gets\\{hyf\_bchar}$; - -\bugonpage B436, lines 9 and 10 (3/15/92) - -\tenpoint -$$\\{cur\_r}=\cases{\\{character}(\\{lig\_stack}),&if $\\{lig\_stack}> - \\{null}$;\cr - \\{font\_bchar}[\\{cur\_font}],&otherwise;\cr}$$ -except when $\\{character}(\\{lig\_stack})=\\{font\_false\_bchar} - [\\{cur\_font}]$. Several additional global variables are needed. - -\bugonpage B438, line 13 from the bottom (3/15/92) - -\ninepoint\noindent\hskip10pt -$\\{cur\_q}\gets\\{tail}$; \ $\\{cur\_l}\gets\\{character}(\\{lig\_stack})$; - -\bugonpage B507, line 6 of section 1241 (1/11/92) - -\ninepoint\noindent\hskip10pt -\\{scan\_optional\_equals};\par\noindent\hskip10pt -{\bf if\/} \\{set\_box\_allowed} {\bf then} -$\\{scan\_box}(\\{box\_flag}+n)$\par\noindent\hskip10pt -{\bf else begin} \\{print\_err}({\tt\char`\"Improper\]\char`\"}); -\ \\{print\_esc}({\tt\char`\"setbox\char`\"});\par\noindent\hskip20pt -\\{help2}({\tt\char`\"Sorry,\]\char`\\setbox\]is\]not\]allowed\]after\]% -\char`\\halign\]in\]a\]display,\char`\"})\par\noindent\hskip20pt -({\tt\char`\"or\]between\]\char`\\accent\]% -and\]an\]accented\]character.\char`\"}); -\ \\{error};\par\noindent\hskip20pt -{\bf end}; - -\bugonpage B511, new line inserted after line 3 (1/24/92) - -\ninepoint\noindent\hskip20pt -\\{flushable\_string}: \\{str\_number};\quad - $\{\,$string not yet referenced$\,\}$ - -\bugonpage B512, new line inserted after line 3 of section 1260 (1/24/92) - -\ninepoint\noindent\hskip10pt -$\\{flushable\_string}\gets\\{str\_ptr}-1$; - -\bugonpage B512, the former line 6 of section 1260 (1/24/92) - -\ninepoint\noindent\hskip30pt -{\bf begin if\/} $\\{cur\_name}=\\{flushable\_string}$ {\bf then} -\par\noindent\hskip40pt{\bf begin} \\{flush\_string}; \ - $\\{cur\_name}\gets\\{font\_name}[f]$; \ {\bf end}; -\par\noindent\hskip30pt{\bf if\/} $s>0$ {\bf then} - -\bugonpage B512, line 10 from the bottom (9/19/91) - -\ninepoint\noindent -\\{set\_font}:\enspace{\bf begin} -\\{print}({\tt\char`\"select\]font\]\char`\"}); \ -\\{slow\_print}(\\{font\_name}[\\{chr\_code}]); - -\bugonpage B514, line 9 (1/11/92) - -\ninepoint\noindent\hskip20pt -$\\{set\_box\_allowed}\gets\\{false}$; \ -\\{prefixed\_command}; \ -$\\{set\_box\_allowed}\gets\\{true}$; - -\bugonpage B515, line 19 (9/19/91) - -\ninepoint\noindent\hskip10pt -\\{slow\_print}($s$); \ \\{update\_terminal}; - -\bugonpage B516, line 2 (9/19/91) - -\ninepoint\noindent\hskip10pt -{\bf begin} \\{print\_err}({\tt\char`\"\char`\"}); \ - \\{slow\_print}($s$); - -\bugonpage B531, lines 19 and 20 (9/19/91) - -\ninepoint\noindent\hskip10pt -\\{print\_nl}({\tt\char`\"Beginning\]to\]dump\]on\]file\]\char`\"}; \ -\\{slow\_print}(\\{w\_make\_name\_string}(\\{fmt\_file})); \ -\\{flush\_string};\par\noindent\hskip10pt -\\{print\_nl}({\tt\char`\"\char`\"}); \ -\\{slow\_print}(\\{format\_ident}) - -\bugonpage B533, line 29 (9/19/91) - -\ninepoint\noindent\hskip30pt -{\bf begin} \\{print\_nl}({\tt\char`\"Transcript\]written\]on\]\char`\"}); \ -\\{slow\_print}(\\{log\_name}); \ -\\{print\_char}({\tt\char`\".\char`\"}); - -\bugonpage B538, line 13 (9/19/91) - -\ninepoint\noindent -10:\enspace\\{slow\_print}($n$); - -\bugonpage B577, left column (12/23/91) - -\eightpoint\noindent[Add 798 to the index entries for `system dependencies'.] - -% volume C -\hsize=29pc -\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers - -\bugonpage C262, line 15 (3/26/91) - -\ninepoint\noindent -|string base_name, base_version; base_name="plain"; base_version="2.7";| - -\bugonpage C271, line 17 from the bottom (3/26/91) - -\ninepoint\noindent -| currentpen_path shifted (z.t_) withpen penspeck enddef;| - -\bugonpage C347, Bront''e entry (1/29/91) - -\eightpoint\noindent -[The accent was clobbered; her name should, of course, be Bront\"e. -Fix the entries for D\"urer, M\"obius, and Stravinsky in the same way.] - -\bugonpage C348, left column (1/11/92) - -\eightpoint\indent -compound statement, $\underline{155}$, 217. - -\bugonpage C353, right column (1/11/92) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -{\tt numeric}, 55, $\underline{56}$, {\it65}, 88. - -\bugonpage C354, miscellaneous entries in both columns (1/11/92) - -\eightpoint -\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -{\tt openwindow}, $\underline{191}$--$\underline{193}$, 220, {\it277}, - {\it312--313}. -\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -{\tt or}, {\it65}, $\underline{170}$, 210, 237, 288--289. -\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -{\tt pair}, 55, $\underline{56}$, 65. -\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -{\tt path}, 55, $\underline{56}$, 171. -\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -{\tt pen}, 55, $\underline{56}$, {\it65}, 170. -\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -{\tt picture}, 55, $\underline{56}$, {\it114}. - -\bugonpage C356, right column (1/11/92) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -{\tt string}, 55, $\underline{56}$, 69. - -\bugonpage C357, right column (1/11/92) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -{\tt transform}, 55, $\underline{56}$, 57, 141--143, {\it160}, 266. - -% 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 D2, last line of section 2 (1/24/92) - -\ninepoint\noindent\hskip10pt -{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$% -{\tt This\]is\]METAFONT,\]Version\]2.71\char'23}\quad -$\{\,$printed when \MF\ starts$\,\}$ - -\bugonpage D102, line 15 from the bottom (11/1/91) - -\tenpoint\noindent -Then -$\\{eq\_type}(h(x))=\\{tag\_token}$ and $\\{equiv}(h(x))=p$, -where $p$~is a two-word value -node with\cutpar - -\bugonpage D188, lines 16 and 17 (1/24/92) - -\tenpoint\noindent -errors. Our subroutines also obey the identity $t[a,b]+t[b,a]=a+b$. - -\bugonpage D190, new copy before bottom four lines (1/24/92) - -\ninepoint\noindent\hskip10pt -{\bf if\/} $\\{x\_coord}(r)<\\{x\_coord}(\\{pp})$ {\bf then} - $\\{x\_coord}(r)\gets\\{x\_coord}(\\{pp})$\par\noindent\hskip10pt -{\bf else if\/} $\\{x\_coord}(r)>\\{dest\_x}$ {\bf then} - $\\{x\_coord}(r)\gets\\{dest\_x}$;\par\noindent\hskip10pt -{\bf if\/} $\\{left\_x}(r)>\\{x\_coord}(r)$ {\bf then}\par\noindent\hskip20pt -{\bf begin} $\\{left\_x}(r)\gets\\{x\_coord}(r)$; \ -{\bf if\/} $\\{right\_x}(\\{pp})>\\{x\_coord}(r)$ {\bf then} -$\\{right\_x}(\\{pp})\gets\\{x\_coord}(r)$; \ {\bf end};\par\noindent\hskip10pt -{\bf if\/} $\\{right\_x}(r)<\\{x\_coord}(r)$ {\bf then}\par\noindent\hskip20pt -{\bf begin} $\\{right\_x}(r)\gets\\{x\_coord}(r)$; \ -{\bf if\/} $\\{left\_x}(\\{qq})<\\{x\_coord}(r)$ {\bf then} -$\\{left\_x}(\\{qq})\gets\\{x\_coord}(r)$; \ {\bf end}; - -\bugonpage D191, new copy before bottom two lines of section 416 (1/24/92) - -\ninepoint\noindent\hskip10pt -{\bf if\/} $\\{x\_coord}(s)<\\{x\_coord}(r)$ {\bf then} - $\\{x\_coord}(s)\gets\\{x\_coord}(r)$\par\noindent\hskip10pt -{\bf else if\/} $\\{x\_coord}(s)>\\{dest\_x}$ {\bf then} - $\\{x\_coord}(s)\gets\\{dest\_x}$;\par\noindent\hskip10pt -{\bf if\/} $\\{left\_x}(s)>\\{x\_coord}(s)$ {\bf then}\par\noindent\hskip20pt -{\bf begin} $\\{left\_x}(s)\gets\\{x\_coord}(s)$; \ -{\bf if\/} $\\{right\_x}(r)>\\{x\_coord}(s)$ {\bf then} -$\\{right\_x}(r)\gets\\{x\_coord}(s)$; \ {\bf end};\par\noindent\hskip10pt -{\bf if\/} $\\{right\_x}(s)<\\{x\_coord}(s)$ {\bf then}\par\noindent\hskip20pt -{\bf begin} $\\{right\_x}(s)\gets\\{x\_coord}(s)$; \ -{\bf if\/} $\\{left\_x}(\\{qq})<\\{x\_coord}(s)$ {\bf then} -$\\{left\_x}(\\{qq})\gets\\{x\_coord}(s)$; \ {\bf end}; - -\bugonpage D194, lines 4 and 5 (1/24/92) - -\tenpoint\noindent[Delete those two lines; I no longer believe that the -assertion has been proved (although it might be true).] - -\bugonpage D194, lines 7--13 of section 424 (1/24/92) - -\ninepoint\noindent\hskip10pt -{\bf if\/} $\\{y\_coord}(r)<\\{y\_coord}(p)$ {\bf then} - $\\{y\_coord}(r)\gets\\{y\_coord}(p)$\par\noindent\hskip10pt -{\bf else if\/} $\\{y\_coord}(r)>\\{dest\_y}$ {\bf then} - $\\{y\_coord}(r)\gets\\{dest\_y}$;\par\noindent\hskip10pt -{\bf if\/} $\\{x\_coord}(p)+\\{y\_coord}(r)>\\{dest\_x}+\\{dest\_y}$ -{\bf then} $\\{y\_coord}(r)\gets\\{dest\_x}+\\{dest\_y}-\\{x\_coord}(p)$;\par -\noindent\hskip10pt -{\bf if\/} $\\{left\_y}(r)>\\{y\_coord}(r)$ {\bf then}\par\noindent\hskip20pt -{\bf begin} $\\{left\_y}(r)\gets\\{y\_coord}(r)$; \ -{\bf if\/} $\\{right\_y}(p)>\\{y\_coord}(r)$ {\bf then} -$\\{right\_y}(p)\gets\\{y\_coord}(r)$; \ {\bf end};\par\noindent\hskip10pt -{\bf if\/} $\\{right\_y}(r)<\\{y\_coord}(r)$ {\bf then}\par\noindent\hskip20pt -{\bf begin} $\\{right\_y}(r)\gets\\{y\_coord}(r)$; \ -{\bf if\/} $\\{left\_y}(q)<\\{y\_coord}(r)$ {\bf then} -$\\{left\_y}(q)\gets\\{y\_coord}(r)$; \ {\bf end}; - -\bugonpage D194, lines 8--11 from the bottom (1/24/92) - -\ninepoint\noindent\hskip10pt -{\bf if\/} $\\{right\_y}(r)<\\{y\_coord}(r)$ {\bf then}\par\noindent\hskip20pt -{\bf begin} $\\{right\_y}(r)\gets\\{y\_coord}(r)$; \ -{\bf if\/} $\\{left\_y}(q)<\\{y\_coord}(r)$ {\bf then} -$\\{left\_y}(q)\gets\\{y\_coord}(r)$; \ {\bf end}; - -\bugonpage D195, lines 3--9 of section 425 (1/24/92) - -\ninepoint\noindent\hskip10pt -{\bf if\/} $\\{y\_coord}(s)<\\{y\_coord}(r)$ {\bf then} - $\\{y\_coord}(s)\gets\\{y\_coord}(r)$\par\noindent\hskip10pt -{\bf else if\/} $\\{y\_coord}(s)>\\{dest\_y}$ {\bf then} - $\\{y\_coord}(s)\gets\\{dest\_y}$;\par\noindent\hskip10pt -{\bf if\/} $\\{x\_coord}(r)+\\{y\_coord}(s)>\\{dest\_x}+\\{dest\_y}$ -{\bf then} $\\{y\_coord}(s)\gets\\{dest\_x}+\\{dest\_y}-\\{x\_coord}(r)$;\par -\noindent\hskip10pt -{\bf if\/} $\\{left\_y}(s)>\\{y\_coord}(s)$ {\bf then}\par\noindent\hskip20pt -{\bf begin} $\\{left\_y}(s)\gets\\{y\_coord}(s)$; \ -{\bf if\/} $\\{right\_y}(r)>\\{y\_coord}(s)$ {\bf then} -$\\{right\_y}(r)\gets\\{y\_coord}(s)$; \ {\bf end};\par\noindent\hskip10pt -{\bf if\/} $\\{right\_y}(s)<\\{y\_coord}(s)$ {\bf then}\par\noindent\hskip20pt -{\bf begin} $\\{right\_y}(s)\gets\\{y\_coord}(s)$; \ -{\bf if\/} $\\{left\_y}(q)<\\{y\_coord}(s)$ {\bf then} -$\\{left\_y}(q)\gets\\{y\_coord}(s)$; \ {\bf end}; - -\bugonpage D195, lines 3--7 from the bottom if section 425 (1/24/92) - -\ninepoint\noindent\hskip10pt -{\bf if\/} $\\{right\_y}(s)<\\{y\_coord}(s)$ {\bf then}\par\noindent\hskip20pt -{\bf begin} $\\{right\_y}(s)\gets\\{y\_coord}(s)$; \ -{\bf if\/} $\\{left\_y}(q)<\\{y\_coord}(s)$ {\bf then} -$\\{left\_y}(q)\gets\\{y\_coord}(s)$; \ {\bf end}; - -\bugonpage D289, lines 9 and 10 (11/1/91) - -\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}\par - -\bugonpage D486, line 18 (11/1/91) - -\tenpoint\noindent -The \\{label\_loc} -and \\{label\_char} arrays have been set up to record all the -starting addresses; we have\cutpar - -% volume E -\hsize=29pc -\def\dashto{\mathrel{\hbox{-\kern-.05em}\mkern3.9mu\hbox{-\kern-.05em}}} - - -\bye - diff --git a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.six b/Master/texmf-dist/doc/generic/knuth/source/errata/errata.six deleted file mode 100644 index ad7444d8600..00000000000 --- a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.six +++ /dev/null @@ -1,528 +0,0 @@ -% 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, 1990}} -\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}, Volumes A,~C, and E\null, between 30 September 1989 (when -the revisions for \TeX\ Version 3.0 and \MF\ Version 2.0 were made) and -December 31, 1990. -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. Some of the corrections below have already been made in -reprintings of the books. Hundreds of changes, too many to list here, -have been made to Volumes B~and~D because of the upgrades to \TeX\ and -\MF\null. Readers who need up-to-date information on the \TeX\ and -\MF\ programs should refer to the |WEB| source files until new -printings of Volumes B~and~D are issued. \looseness=-1 - -% volume A - -\bugonpage A99, line 4 from the bottom (2/22/90) - -\ninepoint\indent -to be chosen because there was no feasible -way to keep total demerits small. - -\bugonpage A124, lines 18--21 (9/5/90) - -\ninepoint\noindent -Floating insertions can be accommodated -as a special case of split insertions, by making each floating topinsert -start with a small penalty, and by having -zero as the associated |\floatingpenalty|; non-floating insertions -like footnotes are accommodated by associating larger penalties with -split insertions (see Appendix~B). - -\bugonpage A137, lines 2 and 3 from the bottom (11/9/90) - -{\eightssi -\rightline{and you shouldn't even be reading this manual,} -\rightline{which is undoubtedly all English to you.} -} - -\bugonpage A141, line 15 from the bottom (10/18/90) - -\tenpoint\noindent -Thus if you type `|$1\over2$|' (in a text) you get $1\over2$, namely style -$S$ over style~$S'$;\cutpar - -\bugonpage A156, line 2 (11/18/89) - -\ninepoint -Commands like |\mathchardef\alpha="010B| are used in -Appendix~B to define\cutpar - -\bugonpage A165, lines 2--3 (8/13/90) - -\ninepoint - Type the formula $\bf\bar x^{\rm T}Mx={\rm0}\iff x=0$, -using as few keystrokes as possible. -\ (The first `0' is roman, the second is bold. The superscript `T' is roman.) - -\bugonpage A171, lines 24--26 (3/13/90) - -\ninepoint\noindent -formula produces a result exactly equivalent to -`|\left(|\<subformula>|\right)|', when the \<subformula> doesn't end -with Punct, except that the {delimiters} are forced to -be of the |\big| size regardless of the height and depth of the subformula. - -\bugonpage A193, lines 16--18 (12/2/89) - -\ninepoint\noindent -line if you insert -`^|\noalign||{|^|\break||}|' -after the |\cr| for that line. You can prohibit {\sl all\/} breaks -in an |\eqalignno| if you set ^|\interdisplaylinepenalty||=10000|; or you -can enclose the whole works in a ^|\vbox|: - -\bugonpage A233, bottom 9 lines, and top three on next page (12/2/89) - -\danger The |\+| macro in Appendix~B works -by putting the \<text> for each column that's followed by~|&| -into an hbox as follows: -\begindisplay -|\hbox to |\<column width>|{|\<text>|\hss}| -\enddisplay -The ^|\hss| means that the text is normally flush left, and that it can -extend to the right of its box. Since |\hfill| is ``more infinite'' than -|\hss| in its ability to stretch, it has the effect of right-justifying or -centering as stated above. Note that |\hfill| doesn't shrink, but |\hss| -does; if the text doesn't fit in its column, it will stick out at the right. -You could cancel the shrinkability of |\hss| by adding ^|\hfilneg|; then -an oversize text would produce an overfull box. -You could also center some text by putting `|\hss|' before it and just -`|&|' after it; in that case the text would be allowed to extend to the -left and right of its column. - The last column of a |\+|~line (i.e., the column entry that is -followed by |\cr|) is treated differently: The -\<text> is simply put into an hbox with its natural~width.\looseness=-1 - -\bugonpage A254, line 5 from the bottom (10/5/89) - -\ninepoint\noindent -|\vsize| hasn't changed, and if all insertions have been -held in place, the same page break\cutpar - -\bugonpage A286, lines 30--32 (3/13/90) - -\ninepoint\noindent -reading and expanding this \cstok{par} -token, \TeX\ will see the \<vertical command> token again. \ (The current -meaning of the control sequence ^|\par| will be used; \cstok{par} might no -longer stand for \TeX's |\par| primitive.) - -\bugonpage A290, lines 12--13 (3/24/90) - -\ninepoint\noindent -simply a single Ord atom without subscripts or superscripts, -or an Acc whose nucleus is an Ord, the -enclosing braces are effectively removed. - -\bugonpage A317, line 17 (5/17/90) - -\ninepoint -|\pretolerance=9999 \tolerance=9999 \parindent=0pt| - -\bugonpage A321, lines 16--17 (8/13/90) - -\ninepoint\noindent -\hbox to\parindent{\bf\hss18.6.\enspace}\ignorespaces -|$\bf\bar x^{\rm T}Mx={\rm0}\iff x=0$|. \ (If you typed a space between -|\rm| and~|0|, you wasted a keystroke; but don't feel guilty about it.) - -\bugonpage A340, nonblank line 11 (3/13/90) - -\tenpoint\noindent -|\topglue 1in % This makes an inch of blank space (1in=2.54cm).| - -\bugonpage A342, line 6 (3/13/90) - -\tenpoint\noindent -|\topglue| but not |\hglue|. It does not -illustrate |\raggedright| setting of para-\cutpar - -\bugonpage A346, lines 20--21 (12/3/89) - -\ninepoint\noindent -streams used by ^|\read| and ^|\write|, to math -^{families} used by ^|\fam|, to sets of hyphenation rules used by -^|\language|, and to insertions (which require -^|\box|, ^|\count|, ^|\dimen|, and ^|\skip| registers all having the -same number). - -\bugonpage A346, line 20 from the bottom (12/3/89) - -\ninepoint\noindent -manent value. These macros use registers -|\count10| through |\count20| to hold the\cutpar - -\bugonpage A346, lines 8--13 from the bottom (12/3/89) - -\ninepoint\noindent -number was allocated. The inside story of how allocation is actually performed -should be irrelevant when the allocation macros are used at a higher level; -you mustn't assume that |plain.tex| really does allocation in any -particular way. -\beginlines -|\count10=22 % this counter allocates \count registers 23, 24, 25, ...| -\endgroup - -\bugonpage A347, lines 2--5 (12/3/89) - -\ninepoint{\parindent=0pt -|\count19=0 % this counter allocates language codes 1, 2, 3, ...|\parbreak -|\count20=255 % this counter allocates insertions 254, 253, 252, ...|\parbreak -|\countdef\insc@unt=20 % nickname for the insertion counter|\parbreak -|\countdef\allocationnumber=21 % the most recent allocation|\parbreak -|\countdef|^|\m@ne||=22 \m@ne=-1 % a handy constant|\par} - -\bugonpage A347, new line after former line 17 (12/3/89) - -\ninepoint\noindent -|\outer\def|^|\newlanguage||{\alloc@9\language\chardef\@cclvi}| - -\bugonpage A352, new line before line 6 from the bottom (3/13/90) - -\ninepoint\noindent -|\def\topglue{\nointerlineskip \vglue-\topskip \vglue} % for top of page| - -\bugonpage A355, line 8 from the bottom (12/3/89) - -\ninepoint\noindent -| \noindent{\bf#1.\enspace}{\sl#2\par}%| - -\bugonpage A363, lines 8--9 from the bottom (12/8/89) - -{\ninepoint\parindent=0pt -| \if@mid \dimen@=\ht0 \advance\dimen@ by\dp\z@ |% - |\advance\dimen@ by12\p@|\parbreak% -| \advance\dimen@ by\pagetotal \advance\dimen@ by-\pageshrink| -\par} - -\bugonpage A375, line 27 (10/30/89) - -\ninepoint\noindent -depending on whether or not |\t|~contains -an asterisk. \ (Do you see why?) \ And here's\cutpar - -\bugonpage A393, lines 3--5 from the bottom (12/3/89) - -\ninepoint -|\hskip-.17em plus-3em minus.11em|\par -|\vadjust{}\penalty10000|\par -|\leaders\copy\dbox\hskip3.3\wd\dbox plus1fil minus.3\wd\dbox| - -\bugonpage A444, line 4 (3/13/90) - -\ninepoint\noindent -Shift box~$x$ down by ${1\over2}\bigl(h(x)-d(x)\bigr) --a$, where $a=\sigma_{22}$, so that the operator character\cutpar - -\bugonpage A450, line 8 (12/3/89) - -\def\\#1{$_{\kern\scriptspace#1}$} -\ninepoint\indent -{\qquad\tt\\0h\\0e\\0n\\5a\\0t\\0 \\1n\\0a\\0 \\0n\\2a\\0t\\0 - \\1t\\0i\\0o\\0 \\2i\\0o\\0 \\0o\\2n\\0} - -\bugonpage A450, line 14 (12/3/89) - -\ninepoint -{\tt.\\0h\\0y$_3$p\\0h\\0e\\2n\\5a\\4t\\2i\\0o\\2n\\0.} - -\bugonpage A450, lines 19 and 20 (12/3/89) - -\ninepoint\vskip-10pt -\begindisplay -\tt\\0o\\2n\\0 -\\0o\\0n\\1c\\0 -\\1c\\0a\\0 -\\1n\\0a\\0 -\\0n\\2a\\0t\\0 -\\1t\\0i\\0o\\0 -\\2i\\0o\\0 -\\0o\\2n\\0 -\enddisplay -and this yields `{\tt\\0c\\0o\\2n\\1c\\0a\\0t\\0e\\1n\\2a\\1t\\2i\\0o\\2n\\0}', -i.e., `|con-cate-na-tion|'. - -\bugonpage A455, last lines before the quotes (11/30/89) - -\ninepoint\noindent -sit yourself (even in restricted horizontal mode) by saying -^|\setlanguage|\<number>;\break - this changes the current language but it -does not change |\language|. Each what-\break -sit records the current -|\lefthyphenmin| and |\righthyphenmin|. - -\bugonpage A467, right column (12/3/89) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\hfilneg|, 72, 100, 233, 283, 285, 290, 397. - -\bugonpage A468, right column (12/2/89) - -\eightpoint -|\interdisplaylinepenalty|, {\it193}, 349, 362. - -\bugonpage A469, left column (12/3/89) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\language| (hyphenation method), 273, 346, $\underline{455}$. - -\bugonpage A469, right column (10/30/89) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\lefthyphenmin|, 273, {\it364}, $\underline{454}$, 455. - -\bugonpage A472, left column (12/3/89) - -\eightpoint -|\newlanguage|, 346, $\underline{347}$. - -\bugonpage A476, left column (10/30/89) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -|\righthyphenmin|, 273, {\it364}, $\underline{454}$, 455. - -\bugonpage A479, new entry (3/13/90) - -\eightpoint -|\topglue|, {\it340}, $\underline{352}$. - -\bugonpage A480, right column (3/13/90) - -\eightpoint -|\vglue|, $\underline{352}$, {\it408}. - -\bugonpage A483, the Providence lines (10/8/89) - -\noindent[Change the first one to -\begintt -Providence RI 02940\kern.05em-9506, USA. -\endtt -Then the second one will be -\begindisplay -Providence RI 02940\kern.05em-9506, USA. -\enddisplay -The second line will also appear on page C361.] - -% 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 - - -% volume C -\hsize=29pc -\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers - -\bugonpage C11, replacement for second quotation at bottom of page (9/27/90) - -\begingroup - \eightpoint \let\tt=\ninett - \baselineskip 10pt - \parfillskip \z@ - \interlinepenalty 10000 - \leftskip \z@ plus 40pc minus \parindent - \let\rm=\eightss \let\sl=\eightssi - \everypar{\sl} - \def\par{\ifhmode\/\endgraf\fi}\obeylines -To anyone who has lived in a modern American city (except Boston) -at least one of the underlying ideas of ^{Descartes}' analytic geometry -will seem ridiculously evident. Yet, as remarked, -it took mathematicians all of two thousand years -to arrive at this simple thing. -\author ERIC TEMPLE ^{BELL}, {\sl Mathematics: Queen and Servant of % - Science\/} (1951) % p123 - -\endgroup - -\bugonpage C220, top line (3/13/90) - -\ninepoint\noindent -modes you get into by hitting -`|S|', `|R|', or `|Q|', respectively, in response to error messages\cutpar - -\bugonpage C252, line 16 (3/13/90) - -\ninepoint\indent -| for i:=1 upto n_windows: display blankpicture inwindow i; endfor| - -\bugonpage C262, lines 19--21 (11/9/90) - -\ninepoint\noindent -for commonly occurring idioms. -For example, `{\bf stop} |"hello"|' displays `|hello|' on the terminal and waits -until \<return> is typed. -\beginlines -|def |^|upto|| = step 1 until enddef; def |^|downto|| = step -1 until enddef;| -\endgroup - -\bugonpage C264, lines 4--6 from the bottom (3/24/90) - -\ninepoint\noindent -|vardef |^|counterclockwise|| primary c =|\par\noindent -| if turningcheck>0:|\par\noindent -| interim |^|autorounding||:=0;|\par\noindent -| if |^|turningnumber|| c <= 0: reverse fi fi c enddef;| - -\bugonpage C306, line 6 (3/13/90) - -\ninepoint\noindent -| ligtable "'": "'" =: oct"042", % close quotes| - -\bugonpage C309, second line from bottom (11/18/89) - -\ninepoint\noindent -| define_whole_vertical_blacker_pixels(vair,slab,| $\cdots$ |);| - -\bugonpage C315, line 9 from the bottom (1/2/90) - -\ninepoint\noindent -units of printer's points): - -\bugonpage C329, line 25 (12/29/90) - -\ninepoint\noindent -which can be used to specify a nonstandard file area -or directory name for the gray\cutpar - -\bugonpage C337, line 4 from the bottom (1/7/90) - -\ninepoint\noindent -|\def\startfont{\font\testfont=\fontname \spaceskip=0pt| - -\bugonpage C347, left column (9/27/90) - -\eightpoint\noindent -Bell, Eric Temple, 11. - -\bugonpage C349, left column (9/27/90) - -\eightpoint\noindent -Descartes, Ren\'e, 6, 11, 19. - -\bugonpage C356, right column (9/27/90) - -\eightpoint\noindent -[remove the entry for Rex Stout.] - -\bugonpage C358, right column (9/27/90) - -\eightpoint\noindent -[remove the entry for Nero Wolfe.] - -% 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 - -% volume E -\hsize=29pc -\def\dashto{\mathrel{\hbox{-\kern-.05em}\mkern3.9mu\hbox{-\kern-.05em}}} - -\bugonpage Exiii, replacement for last four lines (4/30/90) - -\textindent{\bull}``AMS Euler---A new typeface for mathematics'' - by Donald~E. Knuth -and Hermann Zapf, {\sl Scholarly Publishing\/ \bf21} (1989), 131--157. -\ {\it The story of a design project that helps bridge the gulf between -mathematics and art.} - -\smallskip -\textindent{\bull}``Meta-Marks: - Preliminary studies for a Pandora's Box of shapes'' -by Neenie Billawala, Stanford Computer Science report 1259 (Stanford, -California, July 1989), 132~pp. -\ {\it Lavishly illus\-trated studies in parameter variation, -leading to the design of a new typeface called Pandora.} - - - -\bugonpage E325, line 13 (3/13/90) - -\ninepoint\noindent -{\bf if} \\{serifs}: $x_{3r}=\max(x_{1r},{\rm hround}(x_1+.5\\{dot\_diam} - -.2\\{jut})-.5\\{tiny})$\par\noindent -{\bf else}: $x_3=x_1-.5$ {\bf fi}; - -\bugonpage E483, line 4 (3/13/90) - -\ninepoint -\rightline{\% Character codes \oct{000}--\oct{100} and \oct{133}--\oct{177} - are generated.} - -\bugonpage E544, line 5 (3/13/90) - -\ninepoint\noindent -\hskip 3em\vdots\hskip2em\raise2pt\hbox{(the rest of the - program for `$\gamma$' in |greekl| comes here)} - -\bugonpage E557, line 9 (3/13/90) - -\ninepoint -\rightline{\sl`Nevermore---Ah nevermore.'\thinspace''} - -\bugonpage E558, line 21 (3/13/90) - -\eightpoint\noindent -|Clasp a rare and radiant maiden whom the angels name Lenore."| - -\bugonpage E570, lines 27--28 look better with proper skewchars (3/13/90) - -\begingroup -\tenpoint\bf -\textfont0=\tenbf \scriptfont0=\sevenbf -\font\boldi=cmmib10 \font\boldsy=cmbsy10 -\skewchar\boldi='177 \skewchar\boldsy='60 -\textfont1=\boldi -\textfont2=\boldsy -\noindent Here's some bold 10-point math: -${\hat A}^\Gamma_0 -+{\check B}^\Delta_1 --{\tilde C}^\Theta_2 -\times{\acute D}^\Lambda_3 -/{\grave E}^\Xi_4 -\oplus{\dot F}^\Pi_5 -\ominus{\ddot G}^\Sigma_6 -\otimes{\breve H}^\Phi_7 -\oslash{\bar I}^\Psi_8 -\odot{\vec J}^{\,\Omega}_9$. -\endgroup - -\bye - diff --git a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.ten b/Master/texmf-dist/doc/generic/knuth/source/errata/errata.ten deleted file mode 100644 index 9efa2a3e503..00000000000 --- a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.ten +++ /dev/null @@ -1,1289 +0,0 @@ -% Bugs (sigh) in Computers \& Typesetting - -\input manmac -\def\curl{\mathop{\rm curl}} -\def\cycle{{\rm cycle}}\indent -\def\dashto{\mathrel{\hbox{-\thinspace-\kern-.05em}}} -\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, 2000}} -\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\/} from the mid-1990s until the first ``Millennium edition'' was -published at the end of the year 2000. -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 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. -\looseness=-1 - -% volume A - -\bugonpage A3, line 14 {(in certain printings only)} (9/6/00) - -\tenpoint\noindent -that -looks like {\tt\char'15} or {\tt\char'23}. - -\bugonpage A8, lines 14 and 15 (9/6/00) - -\tenpoint\noindent -that is not to be ignored. Notice that |\|\] is a control -sequence of the second kind, namely a control symbol, since there is a -single nonletter (\]) following\cutpar - -\bugonpage A43, line $-17$ (8/4/98) - -\tenpoint\noindent -into your manuscript, if the |b|-key on your keyboard is broken. \ -(An optional\cutpar - -\bugonpage A88, lines 14, 16, 18, and 21 (8/12/00) - -\tenpoint\noindent -[Insert two blank spaces between `{\tt blank space}' and `{\tt\char`\}}'] - -\bugonpage A96, lines 9 and 10 (8/6/98) - -\ninepoint\indent -Before 1998, some ^{German} words changed their spelling -when split between lines. For example, `backen' became `bak-ken' -and `Bettuch' sometimes became `Bett-\cutpar - -\bugonpage A107, line 2 (8/5/98) - -\ninepoint -\line{\indent\spaceskip=.4em minus.35em -ually, you might be tempted to set -|\tolerance=10000|; this allows arbitrarily bad} - -\bugonpage A115, line $-19$ (8/5/98) - -\ninepoint\noindent -If there's no room for such an insertion on this page, \TeX\ -will insert it at the top of\cutpar - -\bugonpage A119, line 15 (8/5/98) - -\ninepoint\noindent -of\/ |\dimen3|, assuming that |\dimen3| is positive. - -\bugonpage A182, middle line of the displayed commutative diagram (12/3/99) - -\ninepoint -\def\mapright#1{\smash{ - \mathop{\longrightarrow}\limits^{#1}}} -$$\matrix{ - 0&\mapright{}&{\cal O}_C&\mapright\pi& - \pi_*{\cal O}_D&\mapright\delta& - R^1f_*{\cal O}_V(-D)&\mapright{}&0\cr}$$ - -\bugonpage A233, line $-2$ (8/5/98) - -\ninepoint\noindent -could avoid this by adding |\hskip| |0pt| |minus-1fil|; then -an oversize text would\cutpar - -\bugonpage A277, line 1 (8/5/98) - -\ninepoint\indent -\<code assignment>\is\<codename>\<8-bit number>\<equals>\<number> - -\bugonpage A277, line $-11$ (8/5/98) - -\ninepoint\noindent -[Move this line, which defines \<at clause>, up to the top of the page.] - -\bugonpage A289, line 24 (2/3/97) - -\ninepoint\indent -\<math field>\is\<filler>\<math symbol>\alt\<filler>|{|\<math mode material>|}| - -\bugonpage A309, line 3 (8/12/97) - -\ninepoint -\ansno8.4: -|$|$_{3}$ |x|$_{11}$ |^|$_7$ |2|$_{12}$ |$|$_{3}$ |~|$_{13}$ \]$_{10}$ -\cstok{TeX} |b|$_{11}$ |v|$_{11}$ \]$_{10}$. The final space comes from -the\cutpar - -\bugonpage A313, line 24 (9/19/00) - -\ninepoint\noindent -stands for `|\par\vfill...|', so the next three commands are - -\bugonpage A313, line 27 (9/19/00) - -\ninepoint\indent -|{vertical mode: \par}| - -\bugonpage A318, lines 12 and 13 (8/5/98) - -\ninepoint\noindent\hbox to\parindent{\hfil\bf15.8.\enspace}% -|\advance\dimen2 by\ifnum\dimen2<0 -\fi.5\dimen3|\parbreak -|\divide\dimen2 by\dimen3 \multiply\dimen2 by\dimen3| - -\bugonpage A325, line 22 (12/3/99) - -\ninepoint -| 0&\mapright{}&{\cal O}_C&\mapright\pi&| - -\bugonpage A337, line 3 from the bottom (9/6/00) - -\rightline{\eightss DONALD E. KNUTH, {\eightssi The \TeX book\/} (1984)} - -\bugonpage A348, lines 14--16 (8/6/98) - -\ninepoint\noindent -| \def\@if#1{true}{\let#1=\iftrue}%|\par\noindent -| \expandafter\expandafter\expandafter|\par\noindent -| \def\@if#1{false}{\let#1=\iffalse}%|\par\noindent - -\bugonpage A356, line 21 (8/6/98) - -\ninepoint\noindent -|\def\AA{\leavevmode\setbox0=\hbox{!}\dimen@=\ht0 \advance\dimen@ by-1ex| - -\bugonpage A356, lines 9--21 from the bottom (8/6/98) - -\ninepoint -{\parindent=0pt -|\def\S{\mathhexbox278} \def\P{\mathhexbox27B} \def\Orb{\mathhexbox20D}|\par -\smallskip -|\def\oalign#1{\leavevmode\vtop{\baselineskip0pt \lineskip.25ex|\par -| \ialign{##\crcr#1\crcr}}} \def\o@lign{\lineskiplimit=0pt \oalign}|\par -|\def\ooalign{\lineskiplimit=-\maxdimen \oalign} % chars over each other|\par -|{\catcode`p=12 \catcode`t=12 \gdef\\#1pt{#1}} \let\getf@ctor=\\|\par -|\def\sh@ft#1{\dimen@=#1 \kern\expandafter\getf@ctor\the\fontdimen1\font|\par -| \dimen@} % kern by #1 times the current slant|\par -|\def\d#1{{\o@lign{\relax#1\crcr\hidewidth\sh@ft{-1ex}.\hidewidth}}}|\par -|\def\b#1{{\o@lign{\relax#1\crcr\hidewidth\sh@ft{-3ex}%|\par -| \vbox to.2ex{\hbox{\char'26}\vss}\hidewidth}}}|\par -|\def\c#1{{\setbox0=\hbox{#1}\ifdim\ht0=1ex \accent'30 #1%|\par -| \else\ooalign{\unhbox0\crcr\hidewidth\char'30\hidewidth}\fi}}|\par -|\def\copyright{{\ooalign{\hfil\raise.07ex\hbox{c}\hfil\crcr\Orb}}}|\par -} - -\bugonpage A364, line 9 (8/9/98) - -\ninepoint\noindent -|\def\makefootline{\baselineskip=24pt \lineskiplimit=0pt|\par\noindent -| \line{\the\footline}}| - - -\bugonpage A364, line 4 from the bottom (8/6/98) - -\ninepoint\noindent -|\def\fmtversion{3.1415926} % identifies the current format| - -\bugonpage A447, bottom line (6/3/98) - -\rightline{\eightss--- JOHN SMITH, {\eightssi The Printer's Grammar\/}\enspace - (1755)} - -\bugonpage A450, lines 11--13 (4/12/98) - -\def\\#1{$_{\kern\scriptspace#1}$}% -\tenpoint\noindent -between `|e|' and `|n|' there are five relevant values -in this case (2~from {\tt\\0h\\0e\\2n\\0}, -0~from {\tt\\0h\\0e\\0n\\0a\\4}, -0~from {\tt\\0h\\0e\\0n\\5a\\0t\\0}, -1~from {\tt\\1n\\0a\\0}, -and 0~from {\tt\\0n\\2a\\0t\\0}); the maximum of these is~2. -The result of all the maximizations is - -\bugonpage A453, line 6 (8/5/98) - -\ninepoint\noindent -tion dictionary, except that plain \TeX\ blocks hyphens after the -very first letter or be-\cutpar - -\bugonpage A458, left column (9/6/00) - -\eightpoint -\leavevmode{\tt\rlap<\char`\_}, 45, 135, 368--369; {\sl see also\/} |\le|.\par -\leavevmode{\tt\rlap/=}, 45, 135, 368--369; {\sl see also\/} |\ne|.\par -\leavevmode{\tt\rlap>\char`\_}, 45, 135, 368--369; {\sl see also\/} |\ge|. - -\bugonpage A458, right column (7/5/99) - -\eightpoint -{\tt\char'13} and {\tt\char'14}, 135, 343, 368--369, 429;\par -al-Khw\^arizm\^\i, abu `Abd All\^ah Mu\d{h}ammad ibn M\^us\^a, 53. - -\bugonpage A464, right column (8/6/98) - -\eightpoint -\newbox\astbox \setbox\astbox=\hbox to0pt{\hss\lower1pt\hbox{*}} -\def\prim#1{\par\indent\copy\astbox{\tt\char`\\#1}} -\prim{edef}, {\it215--216}, 275, {\it328}, {\it373--374}. - -\bugonpage A466, right column (8/8/98) - -\eightpoint -|\getfactor|, {\it356}, $\underline{375}$, {\it398}. - -\bugonpage A467, right column (8/5/98) - -\eightpoint -\prim{hfilneg}, 72, 100, 283, 285, 290, 397. - -\bugonpage A469, left column (8/5/98) - -\eightpoint -italic type, 13--14, 100, 127, 165, 409, 428, 430. - -\bugonpage A469--A477, passim (5/13/98) - -\eightpoint\noindent -Add page 272 to the index entries for |\lastskip|, |\pagedepth|, -|\pagefilllstretch|,\hfil\break |\pagefillstretch|, |\pagefilstretch|, -|\pagegoal|, |\pageshrink|, |\pagestretch|, |\pagetotal|,\hfil\break -|\parshape|, |\prevdepth|, and |\spacefactor|.\par -\smallskip\noindent Also change `369' to `370' in the index entries for -|\lbrack|, |\lq|, |\rbrack|, |\rq|, |\sb|, and |\sp|.\par -\smallskip\noindent Also change `Luckombe, Philip' to `Smith, John'.\par - -\bugonpage A472, right column (8/6/98) - -\eightpoint -\prim{noexpand}, $\underline{209}$, $\underline{213}$, 215, 216, - {\it377}, {\it424}. - -\bugonpage A473, left column (8/6/98) - -\eightpoint -|\Orb| ( \Orb\ ), $\underline{356}$. - -% volume B -\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers -\def\to{\mathrel{.\,.}} % double dot, used only in math mode - -\bugonpage Bix, line 16 (1/16/00) - -\tenpoint\textindent{\bull}``Word hy-phen-a-tion by com-put-er'' -by Franklin Mark Liang, Stan-\cutpar - -\bugonpage Bxiv, line 13 (4/19/96) - -\tenpoint\noindent preprocessor converts these into numeric constants that are -256 or more. This\cutpar - -\bugonpage Bxiv, line $-1$ (4/19/96) - -\ninepoint\noindent This file contains one line per string, starting with -string number 256, then number 257,\cutpar - -\bugonpage Bxv, lines 10 and 11 (4/19/96) - -\ninepoint\noindent -In this case, occurrences of |""| in the |WEB| program will be replaced by -256; occurrences of |"This longer string"| will be replaced by 257. -The symbol |@$| stands for the numeric\cutpar - -\hsize=35pc -\bugonpage B2, line $-10$ (3/8/95) - -\def\RQ/{{\char'23}} % right quote in a string -\ninepoint\noindent\quad -{\bf define} $\\{banner}\equiv\hbox{\tt\RQ/This\]is\]TeX,\]% - Version\]3.14159\RQ/}$\quad$\{\,$printed when \TeX\ starts$\,\}$ - -\bugonpage B169, line 13 (9/22/95) - -\tenpoint\noindent -something in a ``muskip'' register, or to one of the -three parameters \hbox{\tt\char`\\thinmuskip}, -\hbox{\tt\char`\\medmuskip},\cutpar - -\bugonpage B221, line 9 (3/4/95) - -\ninepoint\noindent -\quad{\bf define} $\\{non\_address}=0$\quad -$\{\,$a spurious \\{bchar\_label}$\,\}$ - -\bugonpage B221, line 17 (3/4/95) - -\ninepoint\noindent -\\{font\_params}: {\bf array}[\\{internal\_font\_number}] {\bf of} - \\{font\_index};\quad$\{\,$how many font parameters are present$\,\}$ - -\bugonpage B256, insert new line 12 before the bottom (3/7/95) - -\ninepoint\noindent\qquad -\\{glue\_temp}: \\{real};\quad $\{\,$glue value before rounding$\,\}$ - -\bugonpage B258, line 11 before the bottom becomes four lines (3/7/95) - -\ninepoint\noindent -{\tenbf 625.}\quad{\bf define} $\\{billion}\equiv - \\{float\_constant}(1000000000)$\par\noindent -{\bf define} $\\{vet\_glue}(\hbox{\tt\char`\#})\equiv - \\{glue\_temp}\gets\hbox{\tt\char`\#}$;\par\noindent -\qquad{\bf if\/} $\\{glue\_temp}>\\{billion}$ - {\bf then} $\\{glue\_temp}\gets\\{billion}$\par\noindent -\qquad{\bf else if\/} $\\{glue\_temp}<-\\{billion}$ - {\bf then} $\\{glue\_temp}\gets-\\{billion}$\smallskip\noindent -$\langle\,$Move right or output leaders{\sevenrm\kern.5em625}$\,\rangle\equiv$ - -\bugonpage B258, lines 3--6 from the bottom (3/7/95) - -\ninepoint\noindent -\qquad\qquad{\bf begin} $\\{vet\_glue}(\\{float}(\\{glue\_set} - (\\{this\_box}))*\\{stretch}(g))$;\par\noindent -\qquad\qquad$\\{rule\_wd}\gets\\{rule\_wd}+ - \\{round}(\\{glue\_temp})$;\par\noindent -\qquad\qquad{\bf end};\par\noindent -\qquad\quad{\bf end}\par\noindent -\qquad{\bf else if\/} $\\{shrink\_order}(g)=\\{g\_order}$ - {\bf then}\par\noindent -\qquad\quad{\bf begin} $\\{vet\_glue}(\\{float}(\\{glue\_set} - (\\{this\_box}))*\\{shrink}(g))$;\par\noindent -\qquad\quad$\\{rule\_wd}\gets\\{rule\_wd}-\\{round}(\\{glue\_temp})$; - -\bugonpage B260, line 13 from the bottom (6/26/93) - -\ninepoint -\noindent\hskip10pt -$\\{doing\_leaders}\gets\\{outer\_doing\_leaders}$; \ -$\\{dvi\_v}\gets\\{save\_v}$; \ -$\\{dvi\_h}\gets\\{save\_h}$; \ -$\\{cur\_v}\gets\\{base\_line}$; - -\bugonpage B261, insert new line after line 7 (3/7/95) - -\ninepoint\noindent\qquad -\\{glue\_temp}: \\{real};\quad $\{\,$glue value before rounding$\,\}$ - -\bugonpage B262, lines 3--6 from the bottom (3/7/95) - -\ninepoint\noindent -\qquad\qquad{\bf begin} $\\{vet\_glue}(\\{float}(\\{glue\_set} - (\\{this\_box}))*\\{stretch}(g))$;\par\noindent -\qquad\qquad$\\{rule\_ht}\gets\\{rule\_ht}+ - \\{round}(\\{glue\_temp})$;\par\noindent -\qquad\qquad{\bf end};\par\noindent -\qquad\quad{\bf end}\par\noindent -\qquad{\bf else if\/} $\\{shrink\_order}(g)=\\{g\_order}$ - {\bf then}\par\noindent -\qquad\quad{\bf begin} $\\{vet\_glue}(\\{float}(\\{glue\_set} - (\\{this\_box}))*\\{shrink}(g))$;\par\noindent -\qquad\quad$\\{rule\_ht}\gets\\{rule\_ht}-\\{round}(\\{glue\_temp})$; - -\bugonpage B264, line 22 (6/26/93) - -\ninepoint -\noindent\hskip10pt -$\\{doing\_leaders}\gets\\{outer\_doing\_leaders}$; \ -$\\{dvi\_v}\gets\\{save\_v}$; \ -$\\{dvi\_h}\gets\\{save\_h}$; \ -$\\{cur\_h}\gets\\{left\_edge}$; - -\bugonpage B297, line 11 (3/7/95) - -\ninepoint\noindent -\qquad $\\{width}(p)\gets\\{mu\_mult}(\\{width}(p))$; \ - $\\{subtype}(p)\gets\\{explicit}$; - -\bugonpage B309, line 7 (9/22/95) - -\ninepoint\noindent -\qquad {\bf if} $\\{cur\_style}<\\{text\_style}$ {\bf then} - \quad$\{\,$display style$\,\}$ - -\bugonpage B356, line $-5$ (3/4/95) - -\tenpoint\noindent -$\\{hang\_after}=1$, and $\\{hang\_indent}=0$. -Note that if $\\{hang\_indent}=0$, the value of $\\{hang\_after}$ is\cutpar - -\bugonpage B388, bottom line (3/4/95) - -\ninepoint\noindent -\quad {\bf if\/} $\\{bchar\_label}[\\{hf}]\ne\\{non\_address}$ {\bf then}\quad - $\{\,$put left boundary at beginning of new line$\,\}$ - -\bugonpage B406, line 10 (5/1/98) - -\ninepoint\noindent -\qquad$q\gets p$;\quad$\{\,$now node $q$ represents $p_1\ldots p_{l-1}\,\}$ - -\bugonpage B503, line 12 (3/4/95) - -\tenpoint\noindent -of the following procedure. (Exception: The tabskip -glue isn't trapped while preambles are being scanned.) - -\bugonpage B529, line 12 (3/4/95) - -\ninepoint\noindent\quad -\\{undump}(0)($\\{fmem\_ptr}-1$)(\\{bchar\_label}[$k$]);\par\noindent\quad -\\{undump}(\\{min\_quarterword})(\\{non\_char})(\\{font\_bchar}[$k$]); - -\bugonpage B531, line 2 (11/23/98) - -\tenpoint\noindent -from appearing again. - -\bugonpage B531, line 14 (11/23/98) - -\ninepoint\noindent -\quad \\{print\_int}(\\{year}); \ \\{print\_char}(|"."|); \ - \\{print\_int}(\\{month}); \ \\{print\_char}(|"."|); \ - \\{print\_int}(\\{day}); - -\bugonpage B534, insert new material between lines $-16$ and $-15$ (3/20/95) - -\ninepoint\noindent -\quad {\bf while} $\\{input\_ptr}>0$ {\bf do}\par\noindent -\qquad {\bf if\/} $\\{state}=\\{token\_list}$ {\bf then} \\{end\_token\_list} - {\bf else} \\{end\_file\_reading}; - -\bugonpage B534, line $-2$ (3/20/95) - -\ninepoint\noindent -\qquad $\\{temp\_ptr}\gets\\{cond\_ptr}$; \ - $\\{cond\_ptr}\gets\\{link}(\\{cond\_ptr})$; \ - $\\{free\_node}(\\{temp\_ptr},\\{if\_node\_size})$; - -\bugonpage B535, line 9 (3/20/95) - -\ninepoint\noindent -\qquad {\bf begin init for} $c\gets\\{top\_mark\_code}$ {\bf to} - \\{split\_bot\_mark\_code} {\bf do}\par\noindent -\qquad\qquad {\bf if\/} $\\{cur\_mark}[c]\ne\\{null}$ {\bf then} - $\\{delete\_token\_ref}(\\{cur\_mark}[c])$;\par\noindent -\qquad\quad \\{store\_fmt\_file}; \ {\bf return}; \ {\bf tini} - -\bugonpage B581, Zabala entry (8/19/00) - -\eightpoint\noindent -Zabala Salelles, Ignacio Andr\'es:\quad 2. - -% volume C -\hsize=29pc -\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers - -\bugonpage C17, lines 12 and 13 (9/6/00) - -\tenpoint -{\bf draw} $z_4\{\curl0\}\to z_2\{z_3-z_4\}\to\{\curl0\}\,z_3$;\par -{\bf draw} $z_4\{\curl2\}\to z_2\{z_3-z_4\}\to\{\curl2\}\,z_3$ - -\bugonpage C23, line $-7$ (8/5/98) - -\ninepoint\indent -$x_1=ss=w-x_5$;\quad$y_3-y_1=\\{ygap}$ - -\bugonpage C69, line 17 (9/6/00) - -\ninepoint\noindent -|"abra"|, while -$p_1$ is `$(0,0)\to(3,3)$' and $p_2$ is `$(0,0)\to(3,3)\to\cycle$'. - -\bugonpage C94, line $-11$ (3/4/95) - -\ninepoint\noindent -put -are assumed to have square pixels. But if, for -example, the {\bf mode\_def} sets\cutpar - -\bugonpage C107, line 15 (3/4/95) - -\ninepoint -{\bf labels}$(1a,1b,2a,2b,3a,3b,4a,4b,\,${\bf range} 1 {\bf thru} 36); - \ {\bf endchar\/}; - -\bugonpage C123, lines 21 and 22 (12/19/95) - -\chardef\circc=34 % rotated quartercircle -\def\chapno{ 14} \exno=2 % for exercise 14.3! -\dangerexercise -Use a {\sl rotated\/} quarter-circle to produce `{\manual\circc}\kern1pt' -in font position `{\tt c}'. - -\bugonpage C129, lines 6--17 (8/5/98) - -\ninepoint -\beginsyntax -<path primary>\is<pair primary>\alt<path variable> - \alt[(]<path expression>[)] - \alt[reverse]<path primary> - \alt[subpath]<pair expression>[of]<path primary> -<path secondary>\is<pair secondary>\alt<path primary> - \alt<path secondary><transformer> -<path tertiary>\is<pair tertiary>\alt<path secondary> -<path expression>\is<pair expression>\alt<path tertiary> - \alt<path subexpression><direction specifier> - \alt<path subexpression><path join>[cycle] -<path subexpression>\is<path expression> - \alt<path subexpression><path join><path tertiary> -\endsyntax - -\bugonpage C134, line 8 (3/4/95) - -\ninepoint\noindent -of~$p$; if $t\le 0$, precontrol~$t$ of~$p$ is~$z_0$. -In particular, if $t$ is an integer, postcontrol~$t$ of~$p$\cutpar - -\bugonpage C139, illustration (8/5/98) - -\eightpoint\noindent -[Remove the labels {\tt 2r}, {\tt 2}, and {\tt 2l} below their dots.] - -\bugonpage C143, top two lines (3/4/95) - -\danger In order to have some transform variables to work with, it's necessary -to `^{hide}' some declarations and commands before giving the next |expr|s: - -\bugonpage C147, lines 14, 16, and 19 (9/6/00) - -\noindent -[Change `{\bf savepen}' to `{\it savepen}'.] - -\bugonpage C147, line 2 from the bottom (9/6/00) - -\ninepoint\noindent -{\manual lmnj}'s {\bf penrazor} stands for -`{\bf makepen} $\bigl((-.5,0)\dashto(.5,0)\dashto \cycle\bigr)$', -and {\bf pensquare}\cutpar - -\bugonpage C171, line 19 (8/5/98) - -\ninepoint\noindent -(\<path tertiary>) and -(\<pair tertiary>). A pair expression is not considered to\cutpar - -\bugonpage C172, line 14 (8/5/98) - -\tenpoint\noindent -been evaluated and changed to numeric tokens before being -substituted for~$s$.\cutpar - -\bugonpage C175, line 23 (1/11/88) - -\ninepoint\noindent -expand into a sequence of tokens. \ -(The language {\eightrm{SIMULA67}} demonstrated that it is\cutpar - -\bugonpage C206, minor changes to lines $-19$ to $-5$ (3/4/95) - -\vbox to70mm{\ninepoint -\beginlines \advance\hsize.71pt -|Path at line 15, before subdivision into octants:| -|(1.53745,9.05345)..controls (1.53745,4.00511) and (5.75409,-0.00049)| -| ..(10.85147,-0.00049)..controls (16.2217,-0.00049) and (20.46255,4.51297)|% - \kern.5em\null -| ..(20.46255,9.94655)..controls (20.46255,14.99713) and (16.23842,19.00049)| - \kern-.71pt -| ..(11.13652,19.00049)..controls (5.77066,19.00049) and (1.53745,14.48491)|% - \kern.5em\null -| ..cycle| -\smallskip -|Cycle spec at line 15, after subdivision:| -|(1.53745,9.05345) % beginning in octant `SSE'| -| ..controls (1.53745,6.58786) and (2.54324,4.371)| -| ..(4.16621,2.74803) % segment 0| -|% entering octant `ESE'| -| ..controls (5.8663,1.04794) and (8.24362,-0.00049)| -| ..(10.85147,-0.00049) % segment 0| -|% entering octant `ENE'| -\endlines -$\ldots$ and so on; there are lots more numbers! What does this all mean? -Well, the first segment of the curve, from $(1.53745,9.05345)$ to -$(10.85147,-0.00049)$, -has been\cutpar} - -\bugonpage C207, minor changes to lines 1--23 (3/4/95) - -\ninepoint -\begingroup\let\HRULE=\hrule \def\hrule{\HRULE width\hsize} -\beginlines -|Cycle spec at line 15, after subdivision and autorounding:| -|(2,9.05348) % beginning in octant `SSE'| -| ..controls (2,6.50526) and (3.02194,4.22272)| -| ..(4.6577,2.58696) % segment 0| -|% entering octant `ESE'| -| ..controls (6.2624,0.98225) and (8.45786,0)| -| ..(10.85873,0) % segment 0| -|% entering octant `ENE'| -\endlines -Point $(1.53745,9.05345)$, where there was a vertical tangent, has been -rounded to $(2,9.05348)$; point $(10.85147,-.00049)$, where there was -\vadjust{\goodbreak}% -a horizontal tangent, has been rounded to $(10.85873,0)$; the intermediate -control points have been adjusted accordingly. \ (Rounding of $x$~coordinates -has been done separately from $y$~coordinates.) \ Finally, with -$\\{autorounding}=2$, additional adjustments are made so that the -$45^\circ$ transition point will occur at what \MF\ thinks is a good spot: -\beginlines -|Cycle spec at line 15, after subdivision and double autorounding:| -|(2,9.05348) % beginning in octant `SSE'| -| ..controls (2,6.6761) and (3.07103,4.42897)| -| ..(4.78537,2.71463) % segment 0| -|% entering octant `ESE'| -| ..controls (6.46927,1.03073) and (8.62749,0)| -| ..(10.85873,0) % segment 0| -|% entering octant `ENE'| -\endlines -(Notice that $4.78537+2.71463=7.50000$; when the slope -is~$-1$ at a transition point\cutpar -\endgroup - -\bugonpage C210, line $-7$ (8/5/98) - -\ninepoint\indent\qquad\alt\<numeric token primary> - -\bugonpage C210, line $-2$ (8/5/98) - -\ninepoint\indent\<numeric token primary>\is\<numeric token>\thinspace -{\tt/}\thinspace\<numeric token> - -\bugonpage C211, line 16 (8/5/98) - -\ninepoint\indent\qquad\alt\<numeric token primary not followed by -{\tt+} or {\tt-} or a numeric token> - -\bugonpage C213, lines 17--27 (8/5/98) - -\ninepoint -\beginsyntax -<path primary>\is<pair primary>\alt<path variable>\alt<path argument> - \alt[(]<path expression>[)] - \alt[begingroup]<statement list><path expression>[endgroup] - \alt[makepath]<pen primary>\alt[makepath]<future pen primary> - \alt[reverse]<path primary> - \alt[subpath]<pair expression>[of]<path primary> -<path secondary>\is<pair secondary>\alt<path primary> - \alt<path secondary><transformer> -<path tertiary>\is<pair tertiary>\alt<path secondary> -<path subexpression>\is<path expression> - \alt<path subexpression><path join><path tertiary> -\endsyntax - -\bugonpage C213, line $-4$ (8/5/98) - -\ninepoint\indent -\<path expression>\is\<pair expression>\alt\<path tertiary> -\endsyntax - -\bugonpage C234, line 6 (9/6/00) - -\ninepoint\noindent -line~$z_1\to z_5$ that bisects $z_4\to z_2$, so it starts out in a -south-by-southwesterly direction;\cutpar - -\bugonpage C246, line 5 of answer 14.15 (8/5/98) - -\ninepoint\indent -\qquad/ length(postcontrol $t$ of $p$ $-$ point $t$ of $p$) {\bf enddef\/}; - -\bugonpage C246, line 10 of answer 14.15 (8/5/98) - -\ninepoint\indent -\qquad/ length(precontrol $t$ of $p$ $-$ point $t$ of $p$) {\bf enddef\/}; - -\bugonpage C252, line $-6$ (8/5/98) - -\ninepoint\noindent -$h+o$ and $\\{bot}\,y_4=-o$, so nothing needs to be done there. -We should, however, say - -\bugonpage C257, large display on line 5 (3/4/95) - -\def\bb{$\,\left\{\vcenter\bgroup\halign\bgroup\hfil##\hfil\cr} -\def\ee{\crcr\egroup\egroup\right\}\,$} -\tenpoint\noindent -\bb|boolean|\cr|numeric|\cr|pair|\cr|path|\cr -|pen|\cr|picture|\cr|string|\cr|transform|\ee\<expression>; \ -\bb\<boolean>\cr\<numeric>\cr\<pair>\cr\<string>\cr\<transform>\ee - \bb|<|\cr|<=|\cr|=|\cr|<>|\cr|>=|\cr|>|\ee - \bb\<boolean>\cr\<numeric>\cr\<pair>\cr\<string>\cr\<transform>\ee; - -\bugonpage C261, line $-15$ (8/5/98) - -\tenpoint\textindent\bull {\it Hacks:\/} \ |gobble|, |gobbled|, |killtext|; \ -|capsule_def|; \ |numtok|. - -\bugonpage C286, line 15 (8/5/98) - -\ninepoint\noindent -isn't entirely expanded by {\bf expandafter\/}; only \MF's first -step in loop expansion\cutpar - -\bugonpage C299, line 2 (12/6/99) - -\ninepoint\noindent -\begindisplay -$\displaystyle t[u_1,\ldots,u_n]\;=\;\sum_{k=1}^n{n-1\choose k-1} - (1-t)^{n-k}t^{k-1}u_k,$ -\enddisplay - -\bugonpage C299, swap lines 11 and 12 (8/5/98) - -\ninepoint\begintt -def lbrack = hide(delimiters []) lookahead [ enddef; -let [[[ = [; let ]]] = ]; let [ = lbrack; -\endtt - -\bugonpage C306, line 1 (11/4/98) - -\ninepoint\noindent -| ligtable oct"013": "i" =: oct"016", "l" =: oct"017", % ffi and ffl| - -\bugonpage C311, line 2 (8/5/98) - -\ninepoint\noindent -$\\{fine}:=4-\\{eps}$, and $\\{breadth\_}[1]:=4-\\{eps}$. -\ (A small amount~\\{eps} has been subtracted\cutpar - -\bugonpage C323, line $-3$ (8/5/98) - -\ninepoint\noindent -statement occurs, -the special string `|"title "|\thinspace\&\thinspace\<title>' -is output. \ (This is how the\cutpar - -\bugonpage C332, lines 22--24 (8/5/98) - -\ninepoint -\item{}be replicated so that the final -proofs will be \\{rep} times bigger than usual, and the pattern will be clipped -slightly at the edges so that discrete pixels can be seen plainly. - - -\bugonpage C341, line 23 (10/10/96) - -\ninepoint -\noindent|\def\:{\setbox0=\hbox{\noboundary\char\n\noboundary}%| - -\bugonpage C346, left column (9/6/00) - -\eightpoint -|...| (bounded join), 18--19, 127, 248, $\underline{262}$.\par -|...| (truncation of displayed context), 44. - -\bugonpage C346, and throughout the index (3/7/95) - -\eightpoint\noindent -(Many index entries for rules of syntax in chapters 25--26 -should have been underlined) - -\bugonpage C350, left column (4/24/00) - -\eightpoint\noindent -Evetts, Leonard Charles, 153. - -\bugonpage C351, right column (9/22/97) - -\eightpoint\noindent -\llap{\lower1pt\hbox{*}}% -|intersectiontimes|, $\underline{136}$, {\it178}, 213, {\it265}, {\it294}, -{\it298}. - -\bugonpage C353, right column (8/5/98) - -\eightpoint\noindent -\<numeric token atom>, {\it delete this entry}.\par\noindent -\<numeric token primary>, 72, $\underline{210}$. - -\bugonpage C354, left column (7/26/98) - -\eightpoint\noindent -Orwell, George (= Blair, Eric Arthur), 85. - -\bugonpage C355, right column (3/7/95) - -\eightpoint\noindent -|rt|, {\it23}, {\it77}, 80, {\it103}, 147, 151, $\underline{273}$. - -\bugonpage C361, lines 14--15 (4/29/97) - -\tenpoint -\begintt -email: {\tt TUG@tug.org} -internet: {\tt http://www.tug.org/} -} -\endtt - -\bugonpage C361, bottom five lines (4/29/97) - -\begingroup \def\TeX{T\kern-.2em\lower.5ex\hbox{E}\kern-.000em X} -\baselineskip10pt -\rightline{\eightssi Don't delay, subscribe today! That address again is} -\rightline{\eightssi \TeX\ Users Group} -\rightline{\eightssi email: \eighttt TUG\char`\@ tug.org} -\rightline{\eightssi internet: \eighttt http://www.tug.org/} -\smallskip -\rightline{\eightss DONALD E. KNUTH, {\eightssi The \TeX book\/} (1996)} -\endgroup - -% Volume D -\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers -\def\to{\mathrel{.\,.}} % double dot, used only in math mode - -\bugonpage Dix, line ix (8/19/00) - -\tenpoint -\textindent{\bull}``Interfacing with graphic objects'' by -Ignacio Andr\'es Zabala Salelles,\cutpar - -\hsize=35pc - -\bugonpage D71, line 11 of section 178 (9/13/00) - -\ninepoint -\noindent\quad\qquad\qquad$\{$ previous \\{mem\_end}, \\{lo\_mem\_max}, - and \\{hi\_mem\_min} $\}$ - -\bugonpage D132, line 6 of section 291 (9/13/00) - -\tenpoint\noindent -$$=v_n+w_n\theta_0-u_n\bigl(v_1+w_1\theta_0-u_1(v_2+\cdots --u_{n-2}(v_{n-1}+w_{n-1}\theta_0-u_{n-1}\theta_0)\ldots{})\bigr),$$ - -\bugonpage D213, line 7 (9/14/00) - -\tenpoint\noindent -$(-y+\epsilon, -x+y+\epsilon\delta)$. We should therefore round as if our skewed coordinates -were $(x+\epsilon+\epsilon\delta,y-\epsilon)$\cutpar - -\bugonpage D349, line 4 of section 784 (9/14/00) - -\ninepoint\noindent -{\bf procedure} \\{pack\_job\_name}($s\;$: \\{str\_number});\quad - $\{$ $s={}$|".log"|, |".gf"|, |".tfm"|, or \\{base\_extension} $\}$ - -\bugonpage D451, line 11 (9/14/00) - -\tenpoint\noindent -{\bf 1040}.\qquad The value of \\{cur\_mod} controls the \\{verbosity} in -the \\{print\_exp} routine: If it's \\{show\_code},\cutpar - -\bugonpage D464, bottom line (9/14/00) - -\ninepoint\noindent -\\{long\_help\_seen}: \\{boolean};\quad$\{$ has the long {\bf errmessage} - help been used? $\}$ - -\bugonpage D551, Zabala entry (8/19/00) - -\eightpoint\noindent -Zabala Salelles, Ignacio Andr\'es:\quad 812. - -% volume E -\hsize=29pc -\bugonpage Exiii, lines 3 and 4 from the bottom (7/17/98) - -\textindent{\bull}``Metamarks: -Preliminary studies for a Pandora's Box of shapes'' -by Neenie Billawala, Stanford Computer Science report 1256 (Stanford, -California,\cutpar - -\def\dashto{\mathrel{\hbox{-\kern-.05em}\mkern3.9mu\hbox{-\kern-.05em}}} -\def\ddashto{\mathrel{\hbox{-\kern-.05em}\mkern3.9mu - \hbox{-\kern-.05em}\mkern3.9mu\hbox{-\kern-.05em}}} - -\bugonpage E87, bottom line (6/4/98) - -\rightline{\eightss--- JOHN SMITH, {\eightssi The Printer's Grammar\/}\enspace - (1755)} % p129 - -\bugonpage E95, line 16 (8/8/98) - -\ninepoint\noindent -\quad$\dashto z_{1r}\dashto z_{1l}\dashto{}$% - {\bf subpath} $(t,0)$ {\bf of\/} $(z_{3l}\{z_9-z_3\}\,.\,.\,z_{5r})$ - -\bugonpage E95, line 11 from the bottom (8/8/98) - -\ninepoint\noindent -\quad$\dashto z_{1r}\dashto z_{1l}\dashto{}$% - {\bf subpath} $(t,0)$ {\bf of\/} $(z_{3r}\{z_9-z_3\}\,.\,.\,z_{5r})$ - -\bugonpage E95, line 8 from the bottom (3/6/95) - -\ninepoint\noindent -{\bf cmchar} |"Extensible vertical arrow--extension module"|; - -\bugonpage E97, line 8 from the bottom (3/6/95) - -\ninepoint\noindent -{\bf cmchar} |"Extensible double vertical arrow--extension module"|; - -\bugonpage E113, line 9 (3/6/95) - -\ninepoint\noindent -$x_5=.5[x_4,x_6]$; \ $x_4-x_6=1.2u$; \ $\\{lft}\,x_{5r}=\hbox{hround} - (.5w-.5\\{curve})$; - -\bugonpage E113, line 10 from the bottom (3/6/95) - -\ninepoint\noindent -$x_5=.5[x_4,x_6]$; \ $x_4-x_6=4.8u$; \ $\\{lft}\,x_{5r}=\hbox{hround} - (.5w-.5\\{max\_size})$; - -\bugonpage E115, line 9 (3/6/95) - -\ninepoint\noindent -$x_5=.5[x_4,x_6]$; \ $x_4-x_6=1.2u$; \ $\\{lft}\,x_{5r}=\hbox{hround} - (.5w-.5\\{curve})$; - -\bugonpage E115, line 12 from the bottom (3/6/95) - -\ninepoint\noindent -$x_5=.5[x_4,x_6]$; \ $x_4-x_6=4.8u$; \ $\\{lft}\,x_{5r}=\hbox{hround} - (.5w-.5\\{max\_size})$; - -\bugonpage E147, lines 11--14 from the bottom (7/7/97) - -\ninepoint\noindent -$\\{pos}_3(.8[\\{hair},\\{stem}],0)$; \ $\\{pos}_4(\\{vair},-90)$; \ - $\\{pos}_5(\\{hair},-180)$;\par\noindent -$\\{pos}_6(\\{vair},-270)$; \ ${pos}_7(\\{stem},-360)$; \ - $\\{pos}_8(\\{vair},-450)$; \ ${pos}_9(\\{hair},-540)$;\par\noindent -$x_0=x_1=x_9$; \ $\\{lft}\,x_{0l}=\hbox{hround}(1.5u-.5\\{hair})$; \ - $x_2=x_4=x_6=x_8=.5w-.25u$;\par\noindent -$\\{rt}\,x_{3r}=\hbox{hround}(w-1.75u)$; \ $\\{rt}\,x_{7r}=\hbox{hround}(w-u)$; - -\bugonpage E147, line 8 from the bottom (7/7/97) - -\ninepoint\noindent -$y_5=.5[y_4,y_6]$; \ $\\{top}\,y_{6r}-\\{bot}\,y_{4r}=\\{vstem}+\\{eps}$; \ -$\\{bot}\,y_8=-\\{oo}$; \ $y_7=y_9=.55[y_6,y_8]$; - -\bugonpage E165, line 6 (2/8/97) - -\ninepoint\noindent -$y_1+.5\\{hair}=h$; \ $x_1=x_2+.75u$; \ - $\\{pos}_1(\\{hair}+\\{dw},\hbox{angle}(2(x_1-x_2),y_1-y_2)+90)$; - -\bugonpage E165, line 10 (2/8/97) - -\ninepoint\noindent -$x_3=.5[x_2,x_4]$; \ $x_7-.25u=.5[x_6,x_8]$; \ - $\\{rt}\,x_{8r}=\hbox{hround}(w-.5u)$; - -\bugonpage E187, line 9 (3/6/95) - -\ninepoint\noindent -$\\{lft}\, x_{1l}=\\{lft}\, x_{2l}=\hbox{hround}(.5w-.5\\{shaved\_stem})$; \ - $\\{top}\, y_1=h$; \ $\\{bot}\, y_2=0$; - -\bugonpage E189, line 8 (3/6/95) - -\ninepoint\noindent -$\\{lft}\, x_{1l}=\\{lft}\, x_{2l}=\hbox{hround}(.5w-.5\\{shaved\_stem})$; \ - $\\{top}\, y_1=h$; \ $\\{bot}\, y_2=0$; - -\bugonpage E233, line 21 (3/6/95) - -\ninepoint\noindent -{\bf path} $p$; \ -$\{\{${\bf interim} $\\{superness}:=\\{more\_super}$; \ - $p=\\{pulled\_super\_arc}_l(3,4)(\\{pull})\}\}$; - -\bugonpage E237, line 5 (8/6/98) - -\ninepoint\noindent -$\\{lft}\,x_1={\rm hround}\,.5u$; \ $x_2=w-x_1$; \ - $y_1=y_2=\\{good}.y\,.7[\\{x\_height},\\{asc\_height}]$; - -\bugonpage E239, line 7 from the bottom (3/6/95) - -\ninepoint\noindent -$\\{lft}\,x_{6r}=\hbox{hround}\, u$; \ -$x_7=3u$; \ $x_8=w-3.5u$; \ $\\{rt}\,x_{9l}=\hbox{hround}(w-u)$; - -\bugonpage E253, line 2 from the bottom (8/9/98) - -\ninepoint -\line{\quad$.\,.\,z_{3e}\{\\{down}\}\,.\,.\,\{z_{5l}-z_{4l}\}z_{4e} - \dashto z_{5e}\dashto z_{6e}$;\hfil \% stroke} - -\bugonpage E263, line 21 (5/10/98) - -\ninepoint\noindent -{\bf path} $p$; \ -$\{\{${\bf interim} $\\{superness}:=\\{more\_super}$; \ - $p=\\{pulled\_super\_arc}_l(3,4)(\\{pull})\}\}$; - -\bugonpage E289, line 2 from the bottom (8/9/98) - -\ninepoint -\line{\quad$.\,.\,z_{3e}\{\\{down}\}\,.\,.\,\{z_{5l}-z_{4l}\}z_{4e} - \dashto z_{5e}\dashto z_{6e}$;\hfil \% stroke} - -\bugonpage E291, line 18 (3/6/95) - -\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 -$x_4=\frac1/3[x_5,x_{3l}]$; \ $z_4=z_5+\\{whatever}*(15u,.1h)$; - -\bugonpage E297, line 17 (5/10/98) - -\ninepoint\noindent -{\bf path} $p$; \ -$\{\{${\bf interim} $\\{superness}:=\\{more\_super}$; \ - $p=\\{pulled\_super\_arc}_l(3,4)(\\{pull})\}\}$; - -\bugonpage E303, line 17 (5/10/98) - -\ninepoint\noindent -{\bf path} $p$; \ -$\{\{${\bf interim} $\\{superness}:=\\{more\_super}$; \ - $p=\\{pulled\_super\_arc}_l(3,4)(\\{pull})\}\}$; - -\bugonpage E309, line 7 from the bottom (5/8/98) - -\ninepoint\noindent -\quad$y_{@0}=y_{@2l}-\\{bracket}-\\{eps}$; - -\bugonpage E313, line 7 from the bottom (5/8/98) - -\ninepoint\noindent -\quad$y_{@0}=y_{@2l}+\\{bracket}+\\{eps}$; - -\bugonpage E319, line 8 (5/11/98) - -\ninepoint\noindent -$\\{loop\_top}=$ {\bf if\/} \\{serifs}: - Vround .77$[\\{vair},\\{fudged.stem}]$ {\bf else}: \\{vair} {\bf fi}; - -\bugonpage E373, lines 5 and 6 from the bottom (7/13/97) - -\ninepoint\noindent -\quad$\\{top}\,y_{1r}=\hbox{vround}\, .95h+\\{oo}$; \ -$\\{top}\,y_{2r}=h+\\{oo}$; \ $y_3=.5h$;\par\noindent -\quad$\\{bot}\,y_{4r}=-\\{oo}$; \ -$\\{bot}\,y_{5r}=\hbox{vround}\,.08h-\\{oo}$; \ -$y_{5l}:=\\{good}.y\, y_{5l}$; \ $x_{5l}:=\\{good}.x\,x_{5l}$; - -\bugonpage E381, lines 11 and 12 from the bottom (7/13/97) - -\ninepoint\noindent -\quad$\\{top}\,y_{1r}=\hbox{vround}\, .93h+\\{oo}$; \ -$\\{top}\,y_{2r}=h+\\{oo}$; \ $y_3=.5h$;\par\noindent -\quad$\\{bot}\,y_{4r}=-\\{oo}$; \ -$\\{bot}\,y_{5r}=\hbox{vround}\,.07h-\\{oo}$; - -\bugonpage E389, bottom two lines (8/7/98) - -\ninepoint\noindent -\quad {\bf numeric} $\\{aa\_},\\{bb\_},\\{cc\_}$; - \ $\\{bb\_}=b/y$; \ $\\{cc\_}=c/y$; - \ $\\{aa\_}=a*a-\\{bb\_}*\\{bb\_}$;\par\noindent -\quad $(a*(\\{cc\_}\mathbin{++}\hbox{sqrt}\,\\{aa\_})-\\{bb\_}*\\{cc\_})/\\{aa\_}$ - {\bf enddef\/}; - -\bugonpage E423, line 17 (8/8/98) - -\ninepoint\noindent\quad -$x_{13}=x_{11}-.5$; \ $\\{top}\,y_{14r}=\min(\frac10/7\\{x\_height}+ - .5\\{bulb\_diam},h)+1$; \ $\\{top}\,y_{11}=\\{x\_height}$; - -\bugonpage E427, line 21 (8/8/98) - -\ninepoint\noindent\quad -$x_{23}=x_{21}-.5$; \ $\\{top}\,y_{24r}=\min(\frac10/7\\{x\_height}+ - .5\\{bulb\_diam},h)+1$; \ $\\{top}\,y_{21}=\\{x\_height}$; - -\bugonpage E431, lines 18 and 19 (8/8/98) - -\ninepoint\noindent -{\bf filldraw} $z_0\dashto(x_0,y_{2l})\dashto z_{1l}\{\\{right}\}\,.\,.\, - \{\\{left}\}z_{1r}$\par -\noindent\quad$\dashto{}${\bf subpath} $(t,0)$ {\bf of\/} - $(z_{3r}\,.\,.\,\{2(x_0-x_3),y_0-y_3\}z_{5r})$ - -\bugonpage E431, line 2 from the bottom (8/8/98) - -\ninepoint\line{\quad -$\dashto z_{1l}\{\\{right}\}\,.\,.\,\{\\{left}\}z_{1r}\dashto - (x_0,y_{2r})\dashto{}$cycle;\hfill\% arrowhead and stem} - -\bugonpage E433, lines 13 and 14 (8/8/98) - -\ninepoint\noindent -{\bf filldraw} $z_0\dashto(x_0,y_{2l})\dashto z_{1l}\{\\{left}\}\,.\,.\, - \{\\{right}\}z_{1r}$\par -\noindent\quad$\dashto{}${\bf subpath} $(t,0)$ {\bf of\/} - $(z_{3l}\,.\,.\,\{2(x_0-x_3),y_0-y_3\}z_{5r})$ - -\bugonpage E433, line 2 from the bottom (8/8/98) - -\ninepoint\line{\quad -$\dashto z_{1l}\{\\{left}\}\,.\,.\,\{\\{right}\}z_{1r}\dashto - (x_0,y_{2r})\dashto{}$cycle;\hfill\% arrowhead and stem} - -\bugonpage E463, line 15 (8/8/98) - -\ninepoint\noindent\quad -$\ddashto z_{1r}\,.\,.\,z_{1l}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/} - $(z_{3r}\{z_9-z_3\}\,.\,.\,z_{5r})$ - -\bugonpage E463, line 3 from the bottom (8/8/98) - -\ninepoint\noindent\quad -$\ddashto z_{1r}\,.\,.\,z_{1l}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/} - $(z_{3l}\{z_9-z_3\}\,.\,.\,z_{5r})$ - -\bugonpage E465, line 16 (8/8/98) - -\ninepoint\noindent\quad -$\ddashto z_{1l}\,.\,.\,z_{1r}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/} - $(z_{3r}\{z_9-z_3\}\,.\,.\,z_{5r})$ - -\bugonpage E465, line 3 from the bottom (8/8/98) - -\ninepoint\noindent\quad -$\ddashto z_{1l}\,.\,.\,z_{1r}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/} - $(z_{3l}\{z_9-z_3\}\,.\,.\,z_{5r})$ - -\bugonpage E467, line 18 (8/8/98) - -\ninepoint\noindent\quad -$\ddashto z_{1l}\,.\,.\,z_{1r}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/} - $(z_{3r}\{z_9-z_3\}\,.\,.\,z_{5r})$ - -\bugonpage E467, line 3 from the bottom (8/8/98) - -\ninepoint\noindent\quad -$\ddashto z_{11l}\,.\,.\,z_{12r}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/} - $(z_{13l}\{z_{19}-z_{13}\}\,.\,.\,z_{15r})$ - -\bugonpage E483, lines 12--14 from the bottom (3/6/95) - -\ninepoint\noindent -{\bf beginarithchar}(oct$\,$|"004"|); \ -{\bf pickup} \\{fine}.\\{nib}; \ -{\bf pickup} \\{rule}.\\{nib};\par -\line{{\bf numeric} \\{del}; - \ $\\{del}=\\{dot\_size}-\\{currentbreadth}$;\hfill - \% $\\{currentbreadth}=\\{fine}$} -\noindent -$x_3-.5\\{del}=\\{good}.x(.5w-.5\\{del})$; - \ $\\{center\_on}(x_3)$;\par\noindent -$y_3+.5del=\\{good}.y(\\{math\_axis}+\\{math\_spread}[.5\\{x\_height} - ,.6\\{x\_height}]+.5\\{del})$; - -\bugonpage E485, bottom line (6/4/98) - -\rightline{\eightss--- JOHN SMITH, {\eightssi The Printer's Grammar\/}\enspace - (1755)} % p80 - -\bugonpage E489, line 4 (8/8/98) - -\ninepoint\noindent -$\\{lft}\,x_6={\rm hround}\,u$; \ $x_2=w-x_6$; \ $\\{top}\,y_8=h$; \ - $y_8-y_4=x_2-x_6$; - -\bugonpage E489, line 10 (8/8/98) - -\ninepoint\noindent -$\\{lft}\,x_6={\rm hround}\,u$; \ $x_2=w-x_6$; \ $\\{top}\,y_8=h$; \ - $y_8-y_4=x_2-x_6$; \ \\{circle\_points}; - -\bugonpage E491, line 3 from the bottom (3/6/95) - -\def\SH{\raise.7ex\hbox{$\scriptstyle\#$}} % sharp sign for sharped units -\ninepoint\noindent -\quad $\\{spread}:=2\hbox{ceiling}(\\{spread}\SH*\\{hppp}/2)+\\{eps}$; - \ {\bf enddef\/}; - -\bugonpage E507, line 15 (8/8/98) - -\ninepoint\noindent\quad -$\ddashto z_{1r}\,.\,.\,z_{1l}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/} - $(z_{3r}\{z_9-z_3\}\,.\,.\,z_{5r})$ - -\bugonpage E507, line 3 from the bottom (8/8/98) - -\ninepoint\noindent\quad -$\ddashto z_{11r}\,.\,.\,z_{11l}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/} - $(z_{13l}\{z_{19}-z_{13}\}\,.\,.\,z_{15r})$ - -\bugonpage E509, line 17 (8/8/98) - -\ninepoint\noindent\quad -$\ddashto z_{1l}\,.\,.\,z_{1r}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/} - $(z_{3l}\{z_9-z_3\}\,.\,.\,z_{5r})$ - -\bugonpage E509, lines 3 and 4 from the bottom (8/8/98) - -\ninepoint\noindent\quad -$\ddashto z_{1l}\,.\,.\,z_{1r}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/} - $(z_{3l}\{z_9-z_3\}\,.\,.\,z_{5r})$ - -\bugonpage E511, line 17 (8/8/98) - -\ninepoint\noindent\quad -$\ddashto z_{1l}\,.\,.\,z_{1r}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/} - $(z_{3l}\{z_9-z_3\}\,.\,.\,z_{5r})$ - -\bugonpage E511, lines 3 and 4 from the bottom (8/8/98) - -\ninepoint\noindent\quad -$\ddashto z_{1l}\,.\,.\,z_{1r}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/} - $(z_{3l}\{z_9-z_3\}\,.\,.\,z_{5r})$ - -\bugonpage E541, bottom line (2/27/97) - -{\bf labels}\kern.05em$(1,2,3,5,6,7,8,9,10,11,12,13,14,15)$; \ {\bf endchar}; - -\bugonpage E568, the example of {\tt cmtex8} (4/18/96) - -\eightpoint\indent -(The word `{\tt logician}' should not be hyphenated.) - -\bugonpage E574, left column (3/6/95) - -\eightpoint\indent -\\{currentbreadth}, 483, $\underline{545}$, 546. - -\bugonpage E575, right column (9/10/98) - -Holmes, Kris Ann, vi, vii. - -\bugonpage E576, right column (6/4/98) - -\eightpoint\noindent Delete the entry for Luckombe - -\bugonpage E579, left column (6/4/98) - -\eightpoint Smith, John, 87, 485. - -\bye diff --git a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.tex b/Master/texmf-dist/doc/generic/knuth/source/errata/errata.tex deleted file mode 100644 index 6842a82cc6e..00000000000 --- a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.tex +++ /dev/null @@ -1,1554 +0,0 @@ -% Bugs (sigh) in Computers \& Typesetting --- the most recent errata - -\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\/} since the publication of the second ``Millennium Edition'' -at the close of the year 2001. (More precisely, it lists errors corrected -since the 16th printing of Volume~A, the 7th printing -of Volume~B, the 6th printing of Volume~C, the 4th printing of Volume~D, -and the 5th printing of Volume~E.) -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. Some (or all) of these -errors have been corrected in the most recent printings. -\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 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 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 {efficiency} on the -list preceding the glue or box that is removed. Hence |\removehboxes| has a -running time of order $n^2$ when it removes $n$~boxes. -But the constant~$b$ is so small that -for practical purposes it's possible to think of\/ |\unskip| and -|\lastbox| as almost instantaneous. - -\bugonpage A416, lines 18--22 (06/08/07) - -\ninepoint\noindent\beginlines -|\def\leftheadline{\hbox to \pagewidth{\spaceskip=0pt| -| \vbox to 10pt{}% strut to position the baseline| -| \llap{\tenbf\folio\kern1pc}% folio to left of text| -| \tenit\rhead\hfil}} % running head flush left| -|\def\rightheadline{\hbox to \pagewidth{\spaceskip=0pt\vbox to 10pt{}%| -\endlines - -\bugonpage 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 Bvii, bottom two lines (12/20/02) - -\eightpoint\noindent -all of those changes. -I~now believe that the final bug was discovered and removed on -27~February 2008. -The finder's fee has converged to \$327.68. - -\hsize=35pc - -\bugonpage B2, line 10 from the bottom (02/29/08) - -\ninepoint\noindent\hskip10pt -{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$% -{\tt This\]is\]TeX,\]Version\]3.1415926\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 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 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 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 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 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 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 Dvii, bottom two lines (02/29/08) - -\eightpoint\noindent -corporates all of those changes. -I~now believe that the final bug was discovered on 27~December 2004, -and removed in version 2.718281. -The finder's fee has converged to \$327.68. - -\hsize=35pc -\parindent=1em - -\bugonpage D2, line $-17$ (02/27/08) - -\ninepoint\noindent -{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$% -{\tt This\]is\]METAFONT,\]Version\]2.718281\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 \&{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, line 24 (06/25/04) - -\ninepoint\noindent -\qquad{\bf else begin} $\\{beta}\gets\\{minor\_axis}$; - $\\{gamma}\gets\\{major\_axis}$; - $\\{theta}\gets0$; - -\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 (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\_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 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) - -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 diff --git a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.three b/Master/texmf-dist/doc/generic/knuth/source/errata/errata.three deleted file mode 100644 index 5f00f73b22e..00000000000 --- a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.three +++ /dev/null @@ -1,1898 +0,0 @@ -% 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\cutpar{{\parfillskip=0pt\par}} - -\def\rhead{Bugs in {\tensl Computers \& Typesetting}} -\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} - -\noindent This is a list of all corrections made to {\sl Computers \& -Typesetting}, Volumes A--E\null, between the date of publication -(May, 1986) and 15~June 1987. -It also includes corrections made to -the softcover version of {\sl The \TeX book}, beginning with the -sixth printing (January 1986); these 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. -% volume A -\bugonpage A7, fourth line from the bottom (6/28/86) - -\tenpoint\line{% -since control sequences of the second kind always have exactly one -symbol after} - -\bugonpage A35, second-last line (1/31/87) - -\rightline{\eightssi He may run who reads.} -\smallskip -\rightline{\eightss--- HABAKKUK 2\thinspace:\thinspace2 (c.~600 B.C.)} -\smallskip -\rightline{\eightssi He that runs may read.} - -\bugonpage A43, lines 8--9 (8/23/86) - -\tenpoint\noindent -of Appendix B\null, which defines |%| to be a special kind of symbol so that you -can use it for comments, defines the control sequence |\%| to mean -a percent sign. - -\bugonpage A45, lines 10--13 (8/23/86) - -\ninepoint\noindent -\TeX\ adds~64. Hence -code 127 can be typed |^^?|, and -the dangerous bend sign can be obtained by saying -|{\manual^^?}|. However, you must change the category code of character -127 before using it, since this character ordinarily has category~15 -(^{invalid}); say, e.g., |\catcode`\^^?=12|. -The |^^| notation is different from |\char|, because |^^|\cutpar - -\bugonpage A76, line 7 (8/23/86) - -\ninepoint -\noindent -and extra space; for example, these quantities are -$3.33333\pt$, $1.66666\pt$, $1.11111\pt$,\cutpar - -\bugonpage A83, bottom line (5/19/87) - -\tenpoint\noindent[This line should be flush right.] - -\bugonpage A111, 7th-last line, right-hand column (2/15/87) - -\ninepoint -if $b=10000$ and $-10000<p<10000$ and $q<10000$; - -\bugonpage A117, second-last line (6/10/87) - -\eightpoint -marks; sometimes also |$\|\||$| ($\Vert$). -You can say, e.g., `|\footnote\dag{...}|'. - -\bugonpage A124, lines 6--11 (2/26/87) - -\begingroup \def\n{\thinspace$n$} -\ninepoint\noindent -of insertion; an additional `|\penalty-10000|' item is assumed -to be present at the end of the vertical list, to ensure that a legal -breakpoint exists.) \ Let $u$ be the natural height plus depth of that -least-cost box, and let $r$ be the penalty associated with the optimum -breakpoint. Decrease $g$ by~$uf$, and increase $q$ by~$r$. \ (If -|\tracingpages||=1|, the log file should now get a cryptic message that says -`|% split|\n\ |to| $v$|,|$u$ |p=|$r$'. For~example, -\begintt -% split254 to 180.2,175.3 p=100 -\endtt -\endgroup - -\bugonpage A158, lines 6--8 (2/20/87) - -\ninepoint\noindent the -second atom, which has subscript~$i$; the superscripts are empty except for the -last atom, whose superscript is~$\overline{n+1}$. This superscript is -itself a math list consisting of one atom, whose nucleus is~$n+1$; and that -nucleus is a math list consisting of three atoms. - -\bugonpage A171, line 20 (1/26/86) - -\ninepoint\line{% -will be surrounded by more space than there would be -if that subformula were enclosed} - -\bugonpage A176, line 1 (8/23/86) - -\ninepoint -You can insert `|\noalign||{|$\langle$vertical mode -material$\rangle$|}|' just after any \kern-1pt|\cr| within\cutpar - -\bugonpage A248, line 17 (6/17/86) - -\ninepoint -`|&|' or `|\span|' or `|\cr|', it needs some way to decide which -alignment is involved.\cutpar - -\bugonpage A249, line 20 (6/17/86) - -\ninepoint\noindent -line (see Chapter~8). -If you don't want a~|\cr| at the end of a certain line, -just type\cutpar - -\bugonpage A276, line 19 (1/27/86) - -\ninepoint\vskip-3pt -\beginsyntax - \alt^|\font|<control sequence><equals><file name><at clause> - \alt<global assignment> -\endsyntax -[The bottom line of p.~276 will now move to the top of p.~277.] - -\bugonpage A277, lines 31--32 (1/27/86) - -\ninepoint -\beginsyntax -<font assignment>\is^|\fontdimen|<number><font><equals><dimen> -\endsyntax - -\bugonpage A286, sixth-last line (4/28/87) - -\ninepoint\noindent -|\sfcode| table as described in Chapter~12; characters numbered 128 -to~255 set the\cutpar - -\bugonpage A287, line 19 (2/15/87) - -\ninepoint -\textindent{$\bull$}|\-|.\enskip -This ``discretionary hyphen'' command is defined in Appendix H. - -\bugonpage A292, lines 9--10 (2/15/87) - -\ninepoint -\textindent{$\bull$}|\-|.\enskip -This command is usually equivalent to `|\discretionary{-}{}{}|'; the `|-|' is -therefore interpreted as a ^{hyphen}, not as a minus sign. -\ (See Appendix~H.) - -\bugonpage A308, lines 25--26 (6/1/87) - -\ninepoint\indent -|\def\appendroman#1#2#3{\edef#1{\csname|\parbreak -| \expandafter\gobble\string#2\romannumeral#3\endcsname}}| - -\bugonpage A312, lines 10--14 (8/23/86) - -\ninepoint -\ansno12.11: The interline glue will be zero, and the natural height is -$1+1-3+2=1\pt$ (because the depth of\/ |\box2| isn't included in the natural -height); so the glue will ultimately become |\vskip-1pt| when it's set. -Thus, |\box3| is $3\pt$ high, $2\pt$ deep, $4\pt$ wide. Its reference -point coincides with that of\/ |\box2|; to get to the reference point -of\/ |\box1| you go up $2\pt$ and right $3\pt$. - -\bugonpage A312, line 21 (8/23/86) - -\ninepoint\noindent -up $4\pt$ to get to the upper left corner of -|\box4|; then down $-1.6\pt$, i.e., up $1.6\pt$, to\cutpar - -\bugonpage A319, line 20 (31/3/87) - -\ninepoint\noindent -make ordinary periods act like |\cdot| symbols: Just define -|\mathcode`.| to be |"0201|,\cutpar - -\bugonpage A328, lines 18--19 (5/14/87) - -\ninepoint\noindent -not performed -while the expansion is taking place, and the control sequences following -|\def| are expanded; so the result is an infinite string -\begintt -A\def A\def A\def A\def A\def A\def A\def A\def A... -\endtt - -\bugonpage A329, lines 14--15 (8/23/86) - -\ninepoint -\ansno20.5: The |##| feature is indispensable when the replacement text of -a definition contains other definitions. For example, consider - -\bugonpage A356, lines 6--7 (1/30/87) - -\ninepoint\noindent -| \spaceskip=.3333em \xspaceskip=.5em\relax}|\hfil\break -|\def\ttraggedright{\tt\rightskip=0pt plus2em\relax}| - -\bugonpage A356, line 33 (6/1/87) - -\ninepoint\noindent -| \vbox to.2ex{\hbox{\char'26}\vss}\hidewidth}}| - -\bugonpage A357, tenth-last line (10/13/86) - -\ninepoint\noindent -|\let\sp=^ \let\sb=_ {\catcode`\_=\active \global\let_=\_}| - -\bugonpage A357, third-last and second-last lines (2/17/87) - -\ninepoint\noindent -|\def\pr@m@s{\ifx'\next\let\nxt\pr@@@s \else\ifx^\next\let\nxt\pr@@@t|% -\hfil\break\strut -| \else\let\nxt\egroup\fi\fi \nxt}| - -\bugonpage A364, fifth-last line (1/30/87) - -\ninepoint\noindent -|\def\fmtname{plain}\def\fmtversion{2.3} % identifies the current format| - -\bugonpage A368, bottom line (2/26/86) - -\ninepoint -\line{that includes the symbols -{\tentex\char'30},~{\tentex\char1}, {\tentex\char'32}, {\tentex\char'34}, -and~{\tentex\char'35}, and he finds that this makes it much more} - -\bugonpage A396, line 13 (8/23/86) - -\ninepoint -| \hyphenpenalty=10000 \exhyphenpenalty=10000| - -\bugonpage A414, line 10 (3/4/86) - -\ninepoint\noindent -|\font\titlefont=cmssdc10 at 40pt % titles in chapter openings| - -\bugonpage A427, line 7 (2/23/86) - -\ninepoint\noindent -the author's book -{\sl Computer Modern Typefaces}.) - -\bugonpage A428, lines 18--20 (6/15/87) - -\tenpoint\noindent -The first eight of these all have essentially the same layout; -but |cmr5| needs no ligatures, and many of the symbols of |cmti10| -have different shapes. -For example, the ^{ampersand} becomes an `^{E.T.}', and the -^{dollar} changes to ^{pound} ^{sterling}: - -\bugonpage A434, lines 25--28 (8/17/86) - -\tenpoint\noindent -from |\nu|~($\nu$). Similarly, -|\varsigma|~($\varsigma$) should not be confused with |\zeta|~($\zeta$). -It turns out that |\varsigma| and |\upsilon| are almost never used in -math formulas; they are included in plain \TeX\ primarily because they are -sometimes needed in short Greek citations (cf.~Appendix~J). - -\bugonpage A447, line 32 (6/1/87) - -\ninepoint\noindent -ters -also affect mathematical typesetting: -dimension parameters - \hbox{|\delimitershortfall|}\cutpar - -\bugonpage A455, new paragraph to follow line 9 (2/15/87) - -\begingroup -\hyphenpenalty=-1000 \pretolerance=-1 \tolerance=1000 -\doublehyphendemerits=-100000 \finalhyphendemerits=-100000 -\ddanger The control sequence ^|\-| is equivalent to -|\discretionary{\char|$\,h$|}{}{}|, where $h$ is the -^|\hyphenchar| of the current font, provided that $h$ lies -between 0 and~255. Otherwise |\-| is equivalent to |\discretionary{}{}{}|. - -\endgroup % end the special hyphenation conventions - -\bugonpage A457, left column, fifth-last line (2/17/87) - -\eightpoint\indent\qquad 155, 201, {\it 305}, 324, $\underline{357}$, 394--395; - -\bugonpage A458, left column, line 6 (2/15/87) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -{\tt\char`\\-} (discretionary hyphen), 95, 283, 287,\par -\indent\qquad 292, $\underline{455}$. - -\bugonpage A458, left column, near the bottom (5/19/87) - -\eightpoint {\tt!} (exclamation point), 51, -{\it 72}, 73, 75, {\it 169}. -\nobreak\medskip\noindent[This saves a line that otherwise would make -the index too long on page 481!] - -\bugonpage A458, right column, line 10 (11/27/86) - -\eightpoint {\tt\char`\~} -(tilde), 38, 51, 343, $\underline{353}$; {\sl see also\/} ties. - -\bugonpage A458, right column (6/14/87) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -{\tt\char`\\accent} (general accent), 9, 54, 86, 283, $\underline{286}$. - -\bugonpage A461, entry for boxes (3/16/87) - -\eightpoint boxes, 63--67, 77--83, 221--229. - -\bugonpage A461, entry for {\tt\char`\\centering} (1/28/86) - -\eightpoint {\tt\char`\\centering}, $\underline{347}$, 348, 362. - -\bugonpage A462, entry for \<code assignment> (1/27/86) - -\eightpoint \<code assignment>, $\underline{277}$. - -\bugonpage A464, left column, line 3 (2/15/87) - -\eightpoint -discretionary hyphens, 28, 95--96, 453, $\underline{455}$. - -\bugonpage A465, right column, line 8 (5/3/87) - -\eightpoint -expansion of expandable tokens, 212--216, 238, - -\bugonpage A466, entry for {\tt\char`\\font}, second line (1/27/86) - -\eightpoint \indent\qquad 271, $\underline{276}$. - -\bugonpage A466, new entry (2/3/87) - -\eightpoint \indent\<fontdef token>, $\underline{271}$. - -\bugonpage A467, entry for {\tt\char`\\hideskip} (1/28/86) - -\eightpoint {\tt\char`\\hideskip}, $\underline{347}$, 348, 354. - -\bugonpage A468, left column line 2 (2/15/87) - -\eightpoint\indent\qquad 351, 395, {\it 414}, 454, 455. - -\bugonpage A470, entry for {\tt manfnt} (1/15/86) - -\eightpoint {\tt manfnt}, 44, 408, 414. - -\bugonpage A471, entry for {\tt\char`\\medbreak} (10/13/86) - -\eightpoint {\tt\char`\\medbreak}, 111, 113, $\underline{353}$, - {\it355}, {\it419}, {\it422}. - -\bugonpage A471, entry for {\tt\char`\\moveright} (2/27/87) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -{\tt\char`\\moveright}, 80--81, {\it 221}, $\underline{282}$. - -\bugonpage A471, entry for Mozart, second line (3/19/86) - -\eightpoint \indent\qquad Gottlieb (= Theophilus = Amadeus), 409. - -\bugonpage A472, the entry for {\tt\char`\\not} (2/12/87) - -\eightpoint\noindent -[The overprinting here is intentional, since {\tt\char`\\not} is a -character of width zero. More than a dozen people have reported this -as an error, but it is not!] - -\bugonpage A477, entry for {\tt\char`\\span} (5/3/87) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -{\tt\char`\\span}, 215, 238, $\underline{243}$, {\it244}, $\underline{245}$, -248, 249,\par -\indent\qquad 282, {\it330}, 385. - -\bugonpage A479, entry for ties, second line (11/27/86) - -\eightpoint \indent\qquad {\it173}, 353, {\it404}. - -\bugonpage A480, changes to various entries (6/14/87) - -\eightpoint -\newbox\astbox \setbox\astbox=\hbox to0pt{\hss\lower1pt\hbox{*}} -\def\prim#1{\par\indent\copy\astbox{\tt\char`\\#1}} -\prim{underline}, {\it130--131}, 141, 291, $\underline{443}$. -\prim{unhbox}, 120, 283, $\underline{285}$, {\it354}, {\it356}, {\it361}, - {\it399}. -\prim{unhcopy}, 120, 283, $\underline{285}$, {\it353}. -\prim{unkern}, $\underline{280}$. -\prim{unpenalty}, $\underline{280}$. -\prim{unskip}, 222--223, $\underline{280}$, 286, {\it313}, {\it392}, - {\it418--419}. -\prim{unvbox}, 120, 254, $\underline{282}$, 286, {\it354}, {\it361}, - {\it363}, {\it364}, {\it392}, {\it399}, {\it417}. -\prim{unvcopy}, 120, $\underline{282}$, 286, {\it361}. -\prim{vadjust}, 95, 105, 109, 110, 117, 259, $\underline{281}$, 393, 454. -\prim{valign}, 249, 283, $\underline{285}$--$\underline{286}$, 302, - {\it335}, {\it397}. -\prim{vcenter}, 150--151, 159, 170, 193, 222, 242, -\prim{vfil}, 71, $\underline{72}$, 111, 256, 281, 286, 417. -\prim{vfill}, 24, 25, 71, $\underline{72}$, 256--257, 281, 286. -\prim{vfilneg}, $\underline{72}$, 111, 281, 286.\par -|\voidb@x|, $\underline{347}$, 348. - -\bugonpage A481, left column (6/14/87) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -{\tt\char`\\vss}, 71, $\underline{72}$, {\it 255}, 281, 286. - -% 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 - -\buginvol B, in general (7/28/86) - -\tenpoint\noindent -[A number of entries were mistakenly omitted from the mini-indexes -on the right-hand pages. Here is a combined list of all the missing -items; you can mount it inside the back cover, say, as a secondary mini-index -when the first one fails\dots\ ] - -\nobreak\medskip -\setbox0=\vbox{\eightpoint \hsize=11pc \catcode`\_=\active \let_=\_ - \rightskip=0pt plus 100pt minus 10pt - \pretolerance 10000 - \hyphenpenalty 10000 \exhyphenpenalty 10000 - \noindent\vbox to1pt{}\par % 1pt = \topskip - \ninept - \def\{\hbox{\bf#1\/}} % boldface type for reserved words - \obeylines - \def\makeref #1 #2 #3#4 - {\nn=#2 \hangindent=1em \noindent\\{#1}% - \if#3:: \else\unhcopy\eqbox \fi#4, \S\number\nn.\par} - \makeref active_base 222 =$1$ - \makeref aux 213 =macro - \makeref begin_name 515 :\&{procedure} - \makeref big_switch 1030 =$60$ - \makeref choice_node 689 =$15$ - \makeref cur_boundary 271 :$0\to \\{save\_size}$ - \makeref cur_c 724 :\\{quarterword} - \makeref cur_group 271 :\\{group\_code} - \makeref cur_i 724 :\\{four\_quarters} - \makeref cur_level 271 :\\{quarterword} - \makeref do_extension 1348 :\&{procedure} - \makeref dvi_buf 595 :\&{array} - \makeref dvi_gone 595 :\\{integer} - \makeref dvi_limit 595 :\\{dvi\_index} - \makeref dvi_offset 595 :\\{integer} - \makeref dvi_ptr 595 :\\{dvi\_index} - \makeref end_graf 1096 :\&{procedure} - \makeref error 82 :\&{procedure} - \makeref error_stop_mode 73 =$3$ - \makeref font_base 12 =$0$ - \makeref font_info 549 :\&{array} - \makeref get_token 365 :\&{procedure} - \makeref glue_base 222 =$2626$ - \makeref half_buf 595 :\\{dvi\_index} - \makeref handle_right_brace 1068 :\&{procedure} - \makeref hash_base 222 =$258$ - \makeref head 213 =macro - \makeref hyf_distance 921 :\&{array} - \makeref hyf_next 921 :\&{array} - \makeref hyf_num 921 :\&{array} - \makeref index 302 =macro - \makeref inf 448 :\\{boolean} - \makeref init_col 788 :\&{procedure} - \makeref init_span 787 :\&{procedure} - \makeref input_ln 31 :\&{function} - \makeref interaction 73 :$0\to 3$ - \makeref limit 302 =macro - \makeref line_width 830 :\\{scaled} - \makeref macro_call 389 :\&{procedure} - \makeref main_control 1030 :\&{procedure} - \makeref mem 116 :\&{array} - \makeref mem_bot 12 =$0$ - \makeref mem_end 118 :\\{pointer} - \makeref mem_top 12 =macro - \makeref mlist_to_hlist 726 :\&{procedure} - \makeref mode 213 =macro - \makeref mode_line 213 =macro - \makeref more_name 516 :\&{function} - \makeref mu 448 :\\{boolean} - \makeref name 302 =macro - \makeref nest 213 :\&{array} - \makeref off_save 1064 :\&{procedure} - \makeref open_log_file 534 :\&{procedure} - \makeref output_active 989 :\\{boolean} - \makeref p 498 :\\{pointer} - \makeref param_stack 308 :\&{array} - \makeref pool_file 50 :\\{alpha\_file} - \makeref pool_ptr 39 :\\{pool\_pointer} - \makeref prefixed_command 1211 :\&{procedure} - \makeref prev_depth 213 =macro - \makeref prev_graf 213 =macro - \makeref prev_prev_r 830 :\\{pointer} - \makeref print_err 73 =macro - \makeref r 960 :\\{trie\_pointer} - \makeref reconstitute 906 :\&{function} - \makeref resume_after_display 1200 :\&{procedure} - \makeref save_ptr 271 :$0\to \\{save\_size}$ - \makeref save_stack 271 :\&{array} - \makeref scan_dimen 448 :\&{procedure} - \makeref scan_math 1151 :\&{procedure} - \makeref short_display 174 :\&{procedure} - \makeref show_node_list 182 :\&{procedure} - \makeref start 302 =macro - \makeref state 302 =macro - \makeref str_pool 39 :\&{packed}\ \&{array} - \makeref str_ptr 39 :\\{str\_number} - \makeref str_start 39 :\&{array} - \makeref tail 213 =macro - \makeref trap_zero_glue 1229 :\&{procedure} - \makeref trie 921 :\&{array} - \makeref trie_char 921 =macro - \makeref trie_link 921 =macro - \makeref trie_op 921 =macro - \makeref vlist_out 629 :\&{procedure} - \makeref write_loc 1345 :\\{pointer} - } -\hbox{\nsize=\ht0 \advance\nsize-\topskip - \divide\nsize by 3 \divide\nsize by\ninept - \multiply\nsize by\ninept \advance\nsize\topskip - \vsplit0 to\nsize \kern1pc - \msize=\ht0 \advance\msize-\topskip - \divide\msize by 2 \divide\msize by\ninept - \multiply\msize by\ninept \advance\msize\topskip - \vbox to\nsize{\vsplit0 to\msize\vss}\kern1pc - \vbox to\nsize{\box0\vss}} - -\buginvol B, in general (4/6/87) - -\tenpoint\noindent[The percent signs in all the comments (for example, -on pages 7 and 50) are in the wrong font! Change `{\tt\%}' to `\%'.] - -\bugonpage Bvi, bottom line, and top line of next page (10/12/86) - -{\hsize=29pc -\tenpoint\noindent -puter Science Report 1097 (Stanford, California, April 1986), 146~pp. -\ {\it The {\sltt WEB} programs for four utility programs that are -often used with \TeX: {\sltt POOLtype}, {\sltt TFtoPL}, -{\sltt PLtoTF}, and {\sltt DVItype}.} -\par} - -\bugonpage B2, line 32 (4/22/87) - -\ninepoint\noindent\hskip10pt -{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$% -{\tt This\]is\]TeX,\]Version\]2.2\char'23}\quad -$\{\,$printed when \TeX\ starts$\,\}$ - -\bugonpage B7, new line after line 25 (1/28/87) - -\ninepoint\noindent\hskip10pt -{\bf if} $\\{max\_in\_open}\ge128$ {\bf then} $\\{bad}\gets6$; - -\bugonpage B13, first three lines (4/7/87) - -\tenpoint\noindent -The `\\{name}' parameter, which is of type `{\bf packed array -$[\langle\\{any}\rangle]$ of \\{char}}', stands for the name of -the external file that is being opened for input or output. -Blank spaces that might appear in \\{name} are ignored. - -\bugonpage B14, line 30 (4/7/87) - -\tenpoint\noindent -{\bf 31.\quad}% -The \\{input\_ln} function brings the next line of input from the specified -file into available\cutpar - -\bugonpage B18, line 30 (5/22/86) - -\ninepoint\noindent -\\{str\_ptr}: \\{str\_number};\quad -$\{\,$number of the current string being created$\,\}$ - -\bugonpage B21, first line of mini-index, right column (6/14/87) - -\eightpoint -\indent\\{pool\_name}\unhcopy\eqbox|"string"|, \S11. - -\bugonpage B34, lines 5--6 (6/14/87) - -\tenpoint\noindent -to delete a token, and/or if some fatal error -occurs while \TeX\ is trying to fix a non-fatal one. But such recursion -is never more than two levels deep. - -\bugonpage B55, lines 12--13 (4/21/87) - -\ninepoint\noindent\hskip10pt -{\bf if} $r=p$ {\bf then if} $\\{rlink}(p)\ne p$ {\bf then} - $\langle\,$Allocate entire node $p$ and {\bf goto} \\{found}% - {\sevenrm\kern.5em129}$\,\rangle$; - -\bugonpage B57, lines 25--28 (6/14/87) - -\tenpoint\noindent -The first of these has $\\{font}=\\{font\_base}$, and its \\{link} -points to the second; -the second identifies the font and the character dimensions. -The saving feature about oriental characters is that most of them have -the same box dimensions. The \\{character} field of the first \\{char\_node} -is a ``\\{charext}'' that distinguishes between graphic symbols whose -dimensions are identical for typesetting purposes. (See the \MF\ manual.) -Such an extension of \TeX\ would not be difficult; further details are -left to the reader. - -\bugonpage B58, second line of section 136 (7/23/86) - -\tenpoint\noindent -the values corresponding to `|\hbox{}|'. The \\{subtype} field is set to -\\{min\_quarterword}, since that's\cutpar - -\bugonpage B66, lines 2--8 (4/21/87) - -\tenpoint\noindent -location is -more efficient than dynamic allocation when we can get away with it. For -example, locations \\{mem\_bot} to $\\{mem\_bot}+3$ are always used to store the -specification for glue that is `\hbox{\tt 0pt plus 0pt minus 0pt}'. The -following macro definitions accomplish the static allocation by giving -symbolic names to the fixed positions. Static variable-size nodes appear -in locations \\{mem\_bot} through \\{lo\_mem\_stat\_max}, and static -single-word nodes appear in locations \\{hi\_mem\_stat\_min} through -\\{mem\_top}, inclusive. It is harmless to let \\{lig\_trick} and -\\{garbage} share the same location of \\{mem}. - -\bugonpage B67, line 23 (4/13/87) - -\ninepoint\noindent\hskip30pt -$\{\,$previous \\{mem\_end}, \\{lo\_mem\_max}, and \\{hi\_mem\_min}$\,\}$ - -\bugonpage B71, line 17 (4/15/87) - -\ninepoint\noindent\hskip10pt -{\bf begin while} $p>\\{mem\_min}$ {\bf do} - -\smallskip\eightpoint\noindent[Now \\{null} can be removed from the mini-index.] - -\bugonpage B74, line 24 (4/15/87) - -\ninepoint\noindent -{\bf procedure} \\{show\_node\_list}($p\;{:}\;\\{integer}$);\quad -$\{\,$prints a node list symbolically$\,\}$ - -\bugonpage B74, line 33 (4/15/87) - -\ninepoint\noindent\hskip10pt -{\bf while} $p>\\{mem\_min}$ {\bf do} - -\bugonpage B84, line 12 (2/15/87) - -\ninepoint\noindent\hskip10pt -{\bf define} $\\{relax}=0$\quad$\{\,$do nothing ( {\tt\char`\\relax} )$\,\}$ - -\bugonpage B86, third line of section 210 (8/23/86) - -\tenpoint\noindent -that their special nature is easily discernible. -The ``expandable'' commands come first. - -\bugonpage B88, line 23 (5/22/86) - -\ninepoint\noindent -{\bf procedure\/}\ $\\{print\_mode}(m:\\{integer})$;\quad -$\{\,$prints the mode represented by $m\,\}$ - -\bugonpage B93, lines 3--4 (8/17/86) - -{\tenpoint\parindent=1em -In the first region we have 128 equivalents for ``active characters'' that -act as control sequences, followed by 128 equivalents for single-character -control sequences. -\par} - -\bugonpage B130, ninth-last line (5/7/87) - -\tenpoint\noindent -This variable has six possible values: - -\bugonpage B151, line 9 (4/22/87) - -\ninepoint\noindent\hskip20pt -{\bf begin if} $(\\{end\_line\_char}<0)\lor(\\{end\_line\_char}>127)$ - {\bf then} \\{incr}(\\{limit});\par\noindent\hskip20pt -{\bf if} $\\{limit}=\\{start}$ {\bf then}\quad - $\{\,$previous line was empty$\,\}$ - -\bugonpage B160, lines 17--20 (7/28/86) - -\tenpoint\noindent -{\bf 389.\quad}% -After parameter scanning is complete, the parameters are moved to the -\\{param\_stack}. Then the macro body is fed to the scanner; in other words, -\\{macro\_call} places the defined text of the control sequence at the -top of\/ \TeX's input stack, so that \\{get\_next} will proceed to read it -next. - -\bugonpage B200, top line (5/5/87) - -\tenpoint\noindent{\bf 495.\quad}% - When we begin to process a new {\tt\char`\\if}, we set -$\\{if\_limit}\gets\\{if\_code}$; then -if\/ {\tt\char`\\or} or {\tt\char`\\else} or {\tt\char`\\fi}\cutpar - -\bugonpage B217, lines 15--16 (6/14/87) - -\tenpoint\noindent -|DVI| format. - -\bugonpage B224, lines 4--7 of section 560 (10/22/86) - -\tenpoint\noindent -name and area strings \\{nom} and \\{aire}, and the -``at'' size~$s$. If $s$~is negative, it's the negative of a scale factor -to be applied to the design size; $s=-1000$ is the normal case. -Otherwise $s$ will be substituted for the design size; in this -case, $s$ must be positive and less than $2048\rm\,pt$ -(i.e., it must be less than $2^{27}$ when considered as an integer). - -\bugonpage B224, second-last line (4/28/87) - -\ninepoint\noindent -\\{done}: {\bf if} \\{file\_opened} {\bf then} \\{b\_close}(\\{tfm\_file});\par -\noindent\hskip10pt $\\{read\_font\_info}\gets g$; - -\bugonpage B255, mini-index at the bottom (4/15/87) - -\eightpoint -$\\{mag}=\rm macro$, \S236. - -\bugonpage B257, lines 11--13 (6/14/87) - -\ninepoint -\noindent\hskip20pt{\bf if} $c\ge\\{qi}(128)$ {\bf then} - \\{dvi\_out}(\\{set1});\par -\noindent\hskip20pt\\{dvi\_out}(\\{qo}($c$)); - -\bugonpage B260, lines 7--8 (4/15/87) - -\tenpoint\noindent\hskip10pt -In the case of \\{c\_leaders} (centered leaders), we want to increase \\{cur\_h} -by half of the excess space not occupied by the leaders; and in the -case of \\{x\_leaders} (expanded leaders) we increase\cutpar - -\bugonpage B267, mini-index at the bottom (4/15/87) - -\eightpoint -\\{cur\_s}: \\{integer}, \S616. -$\\{mag}=\rm macro$, \S236. -$\\{pop}=142$, \S586. - -\bugonpage B271, line 10 (8/23/86) - -\tenpoint\noindent -which will be ignored in the calculations -because it is a highly negative number. - -\bugonpage B285, lines 23 and 24 (5/4/87) - -\tenpoint\noindent -the current string would be `{\tt.\char`\^.\char`\_/}' -if $p$ points to the \\{ord\_noad} for $x$ in the (ridiculous) formula -`{\tt\char`\\sqrt\char`\{a\char`\^\char`\{\char`\\mathinner\char`\{% -b\char`\_\char`\{c\char`\\over x+y\char`\}\char`\}\char`\}\char`\}\char`\$}'. - -\bugonpage B296, lines 3--5 (5/8/87) - -\tenpoint\noindent -box~$b$ and -changes it so that the new box is centered in a box of width~$w$. -The centering is done by putting {\tt\char`\\hss} glue at the left and right -of the list inside $b$, then packaging the new box; thus, the -actual box might not really be centered, if it already contains -infinite glue. - -\bugonpage B346, line 19 (5/19/87) - -\ninepoint\noindent -\\{pass\_number}: \\{halfword};\quad -$\{\,$the number of passive nodes allocated on this pass$\,\}$ - -\bugonpage B350, lines 36 and 37 (1/28/87) - -\ninepoint\noindent -$v$: \\{pointer};\quad -$\{\,$points to a glue specification or a node ahead of \\{cur\_p}$\,\}$ -\par\noindent -$t$: \\{integer};\quad -$\{\,$node count, if \\{cur\_p} is a discretionary node$\,\}$ - -\bugonpage B353, lines 8--22 (1/28/87) - -\ninepoint -\noindent\hskip10pt$s\gets\\{cur\_p}$;\par -\noindent\hskip10pt{\bf if} $\\{break\_type}>\\{unhyphenated}$ {\bf then} - {\bf if} $\\{cur\_p}\ne\\{null}$ {\bf then}\par -\noindent\hskip30pt$\langle\,$Compute the discretionary - \\{break\_width} values{\sevenrm\kern.5em840}$\,\rangle$;\par -\noindent\hskip10pt{\bf while} $s\ne\\{null}$ {\bf do}\par -\noindent\hskip30pt\vdots\hskip30pt [as before, but indented one less notch]\par -\noindent\hskip10pt{\bf end}; - -\bugonpage B354, line 6 (1/28/87) - -\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$, -minus the length of nodes that will be discarded after the discretionary break. - -\bugonpage B354, lines 12--18 (1/28/87) - -\ninepoint -\noindent\hskip10pt{\bf begin} $t\gets\\{replace\_count}(\\{cur\_p})$;\kern5pt - $v\gets\\{cur\_p}$;\kern5pt $s\gets\\{post\_break}(\\{cur\_p})$;\par -\noindent\hskip10pt{\bf while} $t>0$ {\bf do}\par -\noindent\hskip20pt{\bf begin} $\\{decr}(t)$;\kern5pt - $v\gets\\{link}(v)$;\kern5pt - $\langle\,$Subtract the width of node $v$ from \\{break\_width}% - {\sevenrm\kern.5em841}$\,\rangle$;\par -\noindent\hskip20pt{\bf end};\par -\noindent\hskip10pt{\bf while} $s\ne\\{null}$ {\bf do}\par -\noindent\hskip20pt{\bf begin} $\langle\,$Add the width of - node $s$ to \\{break\_width} and increase $t$, unless it's - discardable{\sevenrm\kern.5em842}$\,\rangle$;\par - -\bugonpage B354, new line after line 21 (1/28/87) - -\ninepoint\noindent\hskip10pt -{\bf if} $t=0$ {\bf then} $s\gets\\{link}(v)$;\quad - $\{\,$more nodes may also be discardable after the break$\,\}$ - -\bugonpage B354, lines 26--34 (1/28/87) - -\ninepoint\noindent -[Change `$s$' to `$v$' throughout this section (8 times).] - -\bugonpage B354, line 9 from the bottom (1/28/87) - -\tenpoint\noindent{\bf 842.\quad}% -\ninepoint$\langle\,$Add the width of - node $s$ to \\{break\_width} and increase $t$, unless it's - discardable{\sevenrm\kern.5em842}$\,\rangle\equiv$ - -\bugonpage B355, lines 1--3 (1/28/87) - -\ninepoint -\noindent\hskip20pt$\\{hlist\_node},\\{vlist\_node},\\{rule\_node}$: - $\\{break\_width}[1]\gets\\{break\_width}[1]+\\{width}(s)$;\par -\noindent\hskip20pt\\{kern\_node}: {\bf if} $(t=0)\land - (\\{subtype}(s)\ne\\{acc\_kern})$ {\bf then} - $t\gets-1$\quad$\{\,$discardable$\,\}$\par -\noindent\hskip30pt{\bf else} $\\{break\_width}[1]\gets - \\{break\_width}[1]+\\{width}(s)$;\par -\noindent\hskip20pt{\bf othercases} - \\{confusion}({\tt\char'42 disc2\char'42})\par -\noindent\hskip20pt{\bf endcases};\par -\noindent\hskip10pt$\\{incr}(t)$ - -\bugonpage B355, patches to mini-index at bottom (1/28/87) - -\eightpoint -$\\{acc\_kern}=2$, \S155.\par -$\\{incr}=\rm macro$, \S16.\par -$t$: \\{integer}, \S830.\par -$v$: \\{pointer}, \S830. - -\bugonpage B372, lines 12--14 (1/28/87) - -\ninepoint -\noindent\hskip40pt$\langle\,$Change discretionary to compulsory - and set $\\{disc\_break}\gets\\{true}${\sevenrm\kern.5em882}$\,\rangle$\par -\noindent\hskip30pt{\bf else if\/} $(\\{type}(q)=\\{math\_node})\lor - (\\{type}(q)=\\{kern\_node})$ {\bf then} $\\{width}(q)\gets0$; - -\bugonpage B380, fifth-last line (5/7/87) - -\begingroup\tenpoint\noindent\def\!{\kern-1pt}\def\.#1{\hbox{\tt#1}} -\.b and \.c, the two patterns with and without hyphenation are -$\.a\,\.b\,\.-\,\.{c\!d}\,\.{e\!f}$ and $\.a\,\.{b\!c}\,\.{d\!e}\,\.f$. -Thus the\cutpar\endgroup - -\bugonpage B386, lines 2--4 (5/21/87) - -\tenpoint\noindent -hyphenation, -\TeX\ first looks to see if it is in the user's exception dictionary. If not, -hyphens are inserted based on patterns that appear within the given word, -using an algorithm due to Frank~M. Liang. - -\bugonpage B397, line 28 (5/21/87) - -\tenpoint\noindent -$h=z-c$. It follows that location \\{trie\_max} will -never be occupied in \\{trie}, and we will have\cutpar - -\bugonpage B415, the mini-index (4/6/87) - -\eightpoint\noindent[Delete the spurious entry for `$c$'.] - -\bugonpage B419, mini-index entry for \\{c} (4/6/87) - -\eightpoint $c$: \\{integer}, \S994. - -\bugonpage B422, line 24 (8/23/86) - -\ninepoint\noindent -\hskip20pt\\{prev\_p}: \\{pointer};\quad -$\{\,$predecessor of $p\,\}$ - -\bugonpage B435, line 16 (10/12/86) - -\ninepoint\noindent -\hskip20pt$\\{width}(p)\gets\\{font\_info}[k].\\{sc}$;\quad -$\{\,$that's \\{space}$(f)\,\}$\par\noindent -\hskip20pt$\\{stretch}(p)\gets\\{font\_info}[k+1].\\{sc}$;\quad -$\{\,$and \\{space\_stretch}$(f)\,\}$\par\noindent -\hskip20pt$\\{shrink}(p)\gets\\{font\_info}[k+2].\\{sc}$;\quad -$\{\,$and \\{space\_shrink}$(f)\,\}$\par -\smallskip\eightpoint\noindent -[And the mini-index gets three new entries: -$\\{space}=macro$, \S558. -$\\{space\_shrink}=macro$, \S558. -$\\{space\_stretch}=macro$, \S558.] - -\bugonpage B495, lines 18 and 19 (2/15/87) - -\ninepoint\noindent -[delete these lines, since the cases cannot occur] - -\bugonpage B510, line 8 (12/15/86) - -\ninepoint\noindent\hskip30pt -({\tt"Pretend\]that\]you're\]Hercule\]Poirot:\]Examine\]all\]clues,"}) - -\bugonpage B527, new line to follow line 13 (6/17/86) - -{\tenpoint\parindent=1em -This program doesn't bother to close the input files that may still be open. -\par} - -\bugonpage B534, fourth-last line (5/4/87) - -\ninepoint\noindent\hskip10pt -{\bf define} $\\{write\_stream}(\hbox{\tt\char`\#})\equiv\\{info}( - \hbox{\tt\char`\#}+1)$\quad $\{\,$stream number (0 to 17)$\,\}$ - -\bugonpage B544, left column (1/28/87) - -\eightpoint -\leftline{\\{acc\_kern}:\quad$\underline{155}$, 191, 837, 842, 879, 1125.} - -\bugonpage B546, entry for \\{c} (4/6/87) - -\eightpoint\noindent[Add a reference to section $\underline{994}$.] - -\bugonpage B547, left column (4/7/87) - -\eightpoint -\leftline{\\{char}:\quad 19, 26--27, 520, 534.} - -\bugonpage B547, left column (6/14/87) - -\eightpoint -\leftline{Chinese characters:\quad 134, 585.} - -\bugonpage B553, entry for \\{font\_base} (6/14/87) - -\eightpoint\noindent[Insert a reference to section 134.] - -\bugonpage B555, right column, new entry (10/25/86) - -\eightpoint -\leftline{{\tt Huge page...},\quad 641.} - -\bugonpage B556, entry for \\{incr} (1/28/87) - -\eightpoint\noindent[Add a reference to section 842.] - -\bugonpage B557, entry for \\{is\_char\_node} (1/28/87) - -\eightpoint\noindent[Delete the reference to section 881.] - -\bugonpage B557, right column (6/14/87) - -\eightpoint -\leftline{Japanese characters:\quad 134, 585.} - -\bugonpage B560, right column (1/28/87) - -\eightpoint -\leftline{\\{max\_in\_open}:\quad$\underline{11}$, 14, 304, 328.} - -\bugonpage B561, left column, line 10 (4/15/87) - -\eightpoint -\leftline{\qquad 169--172, 174, 178, 182, 1249, 1312, 1334.} - -\bugonpage B561, left column (5/1/87) - -\eightpoint -\leftline{{\tt Missing font identifier}:\quad 577.} - -\bugonpage B563, left column, line 2 (4/15/87) - -\eightpoint -\leftline{\qquad 136, 145, 149--154, 164, 168--169, 175--176, 182,} - -\bugonpage B563, right column (6/14/87) - -\eightpoint -\leftline{oriental characters:\quad 134, 585.} - -\bugonpage B569, right column, in appropriate places (10/12/86) - -\eightpoint -\leftline{\\{space}:\quad 547, $\underline{558}$, 752, 755, 1042.} -\leftline{\\{space\_shrink}:\quad 547, $\underline{558}$, 1042.} -\leftline{\\{space\_stretch}:\quad 547, $\underline{558}$, 1042.} - -\bugonpage B570, third-last line (1/28/87) - -\eightpoint\noindent\qquad - 786, 795, 809, 819--820, 822, 837, 842--844, 866, - -\bugonpage B571, right column (10/25/86) - -\eightpoint -\leftline{{\tt The following...deleted},\quad 641, 992, 1121.} - -\bugonpage B571, right column (4/7/87) - -\eightpoint -\leftline{\\{text\_char}:\quad $\underline{19}$, 20, 25, 47.} - -\bugonpage B573, right column (5/1/87) - -\eightpoint\noindent -[Delete the entry for `{\tt Undefined font code}'.] - -\bugonpage B576, line 2 (1/28/87) - -\ninepoint\noindent -$\langle\,$Add the width of - node $s$ to \\{break\_width} and increase $t$, unless it's - discardable{\sevenrm\kern.5em842}$\,\rangle$\par -\noindent\qquad {\eightpoint Used in section 840.} - -\bugonpage B591, line 6 from the bottom (1/28/87) - -\ninepoint\noindent - $\langle\,$Subtract the width of node $v$ from \\{break\_width}% - {\sevenrm\kern.5em841}$\,\rangle$\quad - {\eightpoint Used in section 840.} - -% volume C -\hsize=29pc -\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers - -\bugonpage C14, top two lines (3/16/87) - -\danger The recursive midpoint rule for curve-drawing was discovered in 1959 -by Paul de Casteljau, who showed that the curve could be described -algebraically by the remarkably simple formula - -\bugonpage C54, sixth-last to fourth-last lines (10/13/86) - -\ninepoint Jonathan H. Quick (a student) used `|a.plus1|' as the name -of a variable at the beginning of his program; later he said `|let| -|plus=+|'. How could he refer to the variable `|a.plus1|' after that? - -\bugonpage C76, line 14 (10/13/86) - -\tenpoint -\newdimen\longesteq -\setbox0=\hbox{\indent$z_{12}-z_{11}=z_{14}-z_{13}$\quad} -\longesteq=\wd0 -\noindent\hbox to \longesteq{\indent - $x_4=w-.01\\{in}$\hfil}% -Point 4 should be one-hundredth of an inch inside\cutpar - -\bugonpage C103, line 12 (10/12/86) - -\tenpoint -$\\{ht}\0=\\{body\_height}\0$; \ $.5[\\{ht}\0,-\\{dp}\0]=\\{axis}\0$; - -\bugonpage C105, line 13 (10/13/86) - -\ninepoint -The vertical line just to the right of the italic left parenthesis -shows the italic\cutpar - -\bugonpage C113, lines 20--27 (8/23/86) - -{\catcode`\@=\active -\def@#1@{\begingroup\def\_{\kern.04em - \vbox{\hrule width.3em height .6pt}\kern.08em}% - \ifmmode\mathop{\bf#1}\else\hbox{\bf#1\/}\fi\endgroup} -\danger The command `@erase@ @fill@ $c$' is an abbreviation for -`@cullit@; @unfill@~$c$; @cullit@'; this zeros out the pixel values inside -the cyclic path~$c$, and sets other pixel values to~1 if they were positive -before erasing took place. \ (It works because the initial @cullit@ makes -all the values 0 or~1, then the @unfill@ changes the values inside~$c$ -to 0 or negative. The final @cullit@ gets rid of the negative values, -so that they won't detract from future filling and drawing.) \ You can -also use `@draw@', `@filldraw@', or `@drawdot@' with `@erase@'; for example, -`@erase@ @draw@~$p$' is an abbreviation for `@cullit@; @undraw@~$p$; -@cullit@', which uses the currently-picked-up pen as if it were an -eraser applied to path~$p$. - -} - -\bugonpage C124, line 9 (6/17/86) - -\eightpoint -\noindent\hskip1.8in -$\\{branch}_2=\\{flex}((30,570),(10,590),(-1,616))$ - -\bugonpage C130, 3rd-last line (9/25/86) - -\ninepoint\noindent -{\sl Geometry\/ \bf 1} (1986), 123--140]: Given a sequence - -\bugonpage C144, sixth line of the program (8/23/86) - -\ninepoint\noindent\hbox to\parindent{\hfil\sevenrm6\ \ \ }% -$y_2=.1h$; \ $\\{top}\,y_3=.4h$; - -\bugonpage C148, the line before the illustration (11/27/86) - -\ninepoint\noindent -are polygons with 32 and 40 sides, respectively: - -\smallskip\noindent -[New illustrations are needed here, since \MF\ version 1.3 improves -the accuracy of pen polygons.] - -\bugonpage C149, 7th line after the illustration (10/24/86) - -\ninepoint -\line{$(200,y+100\pm\alpha)$, where -$\alpha=\sqrt5/4\approx0.559$. If we digitize these outlines and fill the} - -\bugonpage C178, second-last line (8/23/86) - -\ninepoint\noindent -(If $t_3=t_1$~transum~$t_2$, then -$z$~transformed~$t_3=z$~transformed~$t_1+z$~transformed~$t_2$,\cutpar - -\bugonpage C198, fifth-last and fourth-last lines (10/13/86) - -\ninepoint\vskip-3pt -\begindisplay -$\\{top}\,y_2={\rm round}(\\{top}\,\beta)$. -\enddisplay -Such operations occur frequently in practice, so plain \MF\ provides -convenient\cutpar - -\bugonpage C212, lines 9--11 from the bottom (8/23/86) - -\ninepoint -\qquad - \alt\[point]\<numeric expression>\[of]\<path primary>\continuerule - \alt\[precontrol]\<numeric expression>\[of]\<path primary>\continuerule - \alt\[postcontrol]\<numeric expression>\[of]\<path primary> - -\bugonpage C233, lines 13--14 (2/15/87) - -\ninepoint\noindent -one column of white -pixels, if the character is $2a$ pixels wide, because the right edge of -black pixels is specified here to have the $x$~coordinate $2a-1$. - -\bugonpage C247, lines 23--25 (11/27/86) - -\ninepoint -\ansno 16.2: - `{\bf pencircle} scaled 1.06060' is the diamond but -`{\bf pencircle} scaled 1.06061' is~the square. \ (This assumes that -$\\{fillin}=0$. If, for example, $\\{fillin}=.1$, the change doesn't -occur until the diameter is 1.20204.) \ The next change is at diameter -1.5, which\cutpar - -\bugonpage C262, lines 1--4 (7/28/86) - -\ninepoint -When we come to macros whose use has not yet been explained---for -example, somehow |softjoin| and |stop| never made it -into Chapters 1 through~27---we shall consider them from a user's -viewpoint. But most of the comments that follow are addressed to a -potential base-file designer. - -\bugonpage C266, line 16 (8/17/86) - -\ninepoint\noindent -variables; they have the side effect of changing the variable's value. - -\bugonpage C276, line 26 (6/23/86) - -\ninepoint -\noindent -| if charic<>0: r((w+charic*hppp,h.o_),(w+charic*hppp,.5h.o_)); fi| - -\bugonpage C286, lines 24--26 (10/13/86) - -\ninepoint\noindent -but \MF\ won't let you. And even if this had worked, it wouldn't have -solved the problem; it would simply have put |ENDFOR| into the -replacement text of |ast|, because expansion is inhibited when the -replacement text is being read. - -\bugonpage C290, line 1 (8/23/86) - -\ninepoint \noindent{\it 2.\enspace Fortuitous loops.\enspace}% -The `^{max}' and `^{min}' macros in Appendix~B make use of the fact\cutpar - -\bugonpage C298, third-last line (8/23/86) - -\ninepoint -$t[\,u_1,\ldots,u_n]\;=\;t\bigl[t[u_1,\ldots,u_{n-1}],t[u_2,\ldots,u_n]\,\bigr]$ - -\bugonpage C304, 14th-last line (2/15/87) - -\ninepoint\noindent -[replace this `|\smallskip|' by a |\smallskip| between lines!] - -\bugonpage C307, fifth-last line (12/7/86) - -\ninepoint -{\def\_{\kern.04em - \vbox{\hrule width.3em height .6pt}\kern.08em}% -\bf adjust\_fit}(\<left sidebearing adjustment>,\thinspace - \<right sidebearing adjustment>); - -\bugonpage C312, line 34 (10/12/86) - -\ninepoint\noindent -|params[2] = "sans_params"; fontname[2] = "cmssbx10";| - -\bugonpage C316, lines 19--21 (8/17/86) - -\ninepoint\noindent -example, -`|(some| |charht| |values| |had| |to| |be| |adjusted| |by| |as| |much| -|as| |0.12pt)|' means that~you had too many different nonzero heights, but -\MF\ found a way to reduce the number to at most~15 by changing some of -them; none of them had to be\cutpar - -\bugonpage C319, line 3 (8/23/86) - -\ninepoint\noindent -specified by saying, e.g., - -\bugonpage C321, line 6 (7/28/86) - -\ninepoint\noindent -| special "identifier " & font_identifier_;| - -\bugonpage C334, line 2 (6/23/86) - -\ninepoint\noindent -| currentpicture := currentpicture shifted-(1,1); pix := currentpicture;| - -\bugonpage C339, tenth-last line (2/4/87) - -\ninepoint\noindent -| Jackie K\=aren {\L}au\.ra Mar{\'\i}a N\H{a}ta{\l}{\u\i}e {\O}ctave| - -\bugonpage C343, second-last line (8/23/86) - -\rightline{\eightssi -the precise needs of a precise but limited intellectual goal.} - -\bugonpage C346, 2nd line of entry for `{\tt;}' (1/12/87) - -\eightpoint -\qquad 217, 223--224, 263, 312. - -\bugonpage C348, line 6 (6/17/86) - -\eightpoint -concatenation, of paths, {\eightit 70--71}, {\eightit 123}, 127, - -\bugonpage C348, just before `debugging' (3/16/87) - -\eightpoint -de Casteljau, Paul de Faget, 14. - -\bugonpage C348, right column (3/16/87) - -\eightpoint\noindent -[The entry for `|define_whole_vertical_blacker_pixels|' should be moved up -before the entry for `|define_whole_vertical_pixels|'.] - -\bugonpage C352, left column (6/1/87) - -\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% -{\tt kern}, {\it 97}, {\it 316}, $\underline{317}$. - -\bugonpage C352, right column (3/8/87) - -\eightpoint\noindent -[The entry for `|lowres|' belongs before the entry for `|lowres_fix|'.] - -\bugonpage C353, left column (3/8/87) - -\eightpoint\noindent -[The entries for `|mode|' and `\<mode command>' belong before the entry -for `|mode_def|'.] - -\bugonpage C353, entry for {\tt mode\char`\_def} (8/17/86) - -\eightpoint -{\tt mode\char`\_def}, 94, 189, $\underline{\smash{\hbox{\it 270}}}$, -{\it 278--279}. - -\bugonpage C355, right column (4/15/86) - -\eightpoint\noindent -[The entry for `{\tt rulepen}' belongs before the entry for `rules'.] - -\bugonpage C355, right column (8/5/86) - -\eightpoint -{\tt screenstrokes}, 191, $\underline{277}$. - -\bugonpage C355, 2nd line of entry for `semicolons' (1/12/87) - -\eightpoint -\qquad 217, 223--224, 263, 312. - -\bugonpage C356, full names for the Stanfords (4/10/86) - -\eightpoint -Stanford, Amasa Leland, 340. - -Stanford, Jane Elizabeth Lathrop, 340. - -% 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 - -\buginvol D, in general (7/28/86) - -\tenpoint\noindent -[A number of entries were mistakenly omitted from the mini-indexes -on the right-hand pages. Here is a combined list of all the missing -items; you can mount it inside the back cover, say, as a secondary mini-index -when the first one fails\dots\ ] - -\nobreak\medskip -\setbox0=\vbox{\eightpoint \hsize=11pc \catcode`\_=\active \let_=\_ - \rightskip=0pt plus 100pt minus 10pt - \pretolerance 10000 - \hyphenpenalty 10000 \exhyphenpenalty 10000 - \noindent\vbox to1pt{}\par % 1pt = \topskip - \ninept - \def\{\hbox{\bf#1\/}} % boldface type for reserved words - \obeylines - \def\makeref #1 #2 #3#4 - {\nn=#2 \hangindent=1em \noindent\\{#1}% - \if#3:: \else\unhcopy\eqbox \fi#4, \S\number\nn.\par} - \makeref add_or_subtract 930 :\&{procedure} - \makeref after 427 :\&{array} - \makeref arg_list 720 :\\{pointer} - \makeref b 580 :\\{pixel\_color} - \makeref bad_exp 824 :\&{procedure} - \makeref before 427 :\&{array} - \makeref begin_name 770 :\&{procedure} - \makeref bilin1 968 :\&{procedure} - \makeref binary_mac 863 :\&{procedure} - \makeref blank_rectangle 567 :\&{procedure} - \makeref boc_c 1162 :\\{integer} - \makeref boc_p 1162 :\\{integer} - \makeref cf 298 :\\{fraction} - \makeref clockwise 453 :\\{boolean} - \makeref ct 298 :\\{fraction} - \makeref cubic_intersection 556 :\&{procedure} - \makeref cur_pen 403 :\\{pointer} - \makeref cur_rounding_ptr 427 :$0\to \\{max\_wiggle}$ - \makeref cur_spec 403 :\\{pointer} - \makeref cur_x 389 :\\{scaled} - \makeref cur_y 389 :\\{scaled} - \makeref dely 557 :\\{integer} - \makeref dep_finish 935 :\&{procedure} - \makeref dep_list 587 =macro - \makeref dimen_head 1125 :\&{array} - \makeref dx 495 :\\{integer} - \makeref dy 495 :\\{integer} - \makeref d1 464 :$0\to 1$ - \makeref end_name 772 :\&{procedure} - \makeref eqtb 201 :\&{array} - \makeref error_stop_mode 68 =$3$ - \makeref firm_up_the_line 682 :\&{procedure} - \makeref get_next 667 :\&{procedure} - \makeref gf_buf 1152 :\&{array} - \makeref gf_offset 1152 :\\{integer} - \makeref gf_ptr 1152 :\\{gf\_index} - \makeref halfword 156 =$\\{min\_halfword}\to \\{max\_halfword}$ - \makeref hash 201 :\&{array} - \makeref index 629 =macro - \makeref input_ln 30 :\&{function} - \makeref interaction 68 :$0\to 3$ - \makeref j 357 :$0\to \\{move\_size}$ - \makeref known_pair 872 :\&{procedure} - \makeref limit 629 =macro - \makeref m_spread 357 :\\{integer} - \makeref materialize_pen 865 :\&{procedure} - \makeref max_allowed 403 :\\{scaled} - \makeref max_c 813 :\&{array} - \makeref max_link 813 :\&{array} - \makeref max_tfm_dimen 1130 :\\{scaled} - \makeref mem_top 12 =macro - \makeref mem 159 :\&{array} - \makeref memory_word 156 =\&{record} - \makeref more_name 771 :\&{function} - \makeref m1 464 :\\{integer} - \makeref n 580 :\\{screen\_col} - \makeref n_sin_cos 145 :\&{procedure} - \makeref name 629 =macro - \makeref negate_dep_list 904 :\&{procedure} - \makeref new_knot 871 :\&{function} - \makeref node_to_round 427 :\&{array} - \makeref n1 464 :\\{integer} - \makeref octant_dir 395 :\&{array} - \makeref o1 453 :\\{small\_number} - \makeref o2 453 :\\{small\_number} - \makeref paint_row 568 :\&{procedure} - \makeref param 1096 :\&{array} - \makeref param_stack 633 :\&{array} - \makeref path_length 916 :\&{function} - \makeref perturbation 1119 :\\{scaled} - \makeref phi 542 :\\{angle} - \makeref pool_ptr 38 :\\{pool\_pointer} - \makeref post_head 843 :\\{pointer} - \makeref pre_head 843 :\\{pointer} - \makeref print_err 68 =macro - \makeref print_macro_name 722 :\&{procedure} - \makeref quarterword 156 =$0\to 255$ - \makeref recycle_value 809 :\&{procedure} - \makeref row_transition 579 :\\{trans\_spec} - \makeref scan_text_arg 730 :\&{procedure} - \makeref scroll_mode 68 =$2$ - \makeref set_controls 299 :\&{procedure} - \makeref sf 298 :\\{fraction} - \makeref show_context 635 :\&{procedure} - \makeref sorted 325 =macro - \makeref st 298 :\\{fraction} - \makeref start 629 =macro - \makeref start_sym 1077 :\\{halfword} - \makeref str_pool 38 :\&{packed}\ \&{array} - \makeref str_ptr 38 :\\{str\_number} - \makeref str_start 38 :\&{array} - \makeref take_part 910 :\&{procedure} - \makeref tfm_changed 1130 :\\{integer} - \makeref tol 557 :\\{integer} - \makeref tt 843 :\\{small\_number} - \makeref tx 954 :\\{scaled} - \makeref txx 954 :\\{scaled} - \makeref txy 954 :\\{scaled} - \makeref ty 954 :\\{scaled} - \makeref tyx 954 :\\{scaled} - \makeref tyy 954 :\\{scaled} - \makeref unsorted 325 =macro - \makeref uv 557 :$0\to \\{bistack\_size}$ - \makeref xy 557 :$0\to \\{bistack\_size}$ - \makeref x1 542 :\\{scaled} - \makeref x2 542 :\\{scaled} - \makeref x3 542 :\\{scaled} - \makeref y1 542 :\\{scaled} - \makeref y2 542 :\\{scaled} - \makeref y3 542 :\\{scaled} - } -\hbox{\nsize=\ht0 \advance\nsize-\topskip - \divide\nsize by 3 \divide\nsize by\ninept - \multiply\nsize by\ninept \advance\nsize\topskip - \vsplit0 to\nsize \kern1pc - \msize=\ht0 \advance\msize-\topskip - \divide\msize by 2 \divide\msize by\ninept - \multiply\msize by\ninept \advance\msize\topskip - \vbox to\nsize{\vsplit0 to\msize\vss}\kern1pc - \vbox to\nsize{\box0\vss}} - -\buginvol D, in general (4/6/87) - -\tenpoint\noindent[The percent signs in all the comments (for example, -on pages 7 and 42) are in the wrong font! Change `{\tt\%}' to `\%'.] - -\bugonpage Dvii, line 9 (9/25/86) - -{\tenpoint\noindent\hsize=29pc -{\sl Discrete and Computational Geometry\/ \bf1} (1986), 123--140. -\ \it Develops the theory\cutpar} - -\bugonpage D2, line 27 (6/17/86) - -\ninepoint\noindent\hskip10pt -{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$% -{\tt This\]is\]METAFONT,\]Version\]1.3\char'23}\quad -$\{\,$printed when \MF\ starts$\,\}$ - -\bugonpage D18, line 30 (5/22/86) - -\ninepoint\noindent -\\{str\_ptr}: \\{str\_number};\quad -$\{\,$number of the current string being created$\,\}$ - -\bugonpage D23, second line of mini-index, right column (6/14/87) - -\eightpoint -\indent\\{pool\_name}\unhcopy\eqbox|"string"|, \S11. - -\bugonpage D30, lines 33--34 (6/14/87) - -\tenpoint\noindent -to delete a token, and/or if some fatal error -occurs while \MF\ is trying to fix a non-fatal one. But such recursion -is never more than two levels deep. - -\bugonpage D63, lines 13--14 (5/5/87) - -\ninepoint\noindent -[These two lines can be eliminated, since the variable \\{temp\_ptr} -is no longer used! If you delete them, also remove \S158 from the -list of sections where global variables are declared (pages D7 and D552), -and remove \\{temp\_ptr} from the index on page D540.] - -\bugonpage D66, line 6 (5/22/86) - -\ninepoint\noindent -{\bf function\/}\ $\\{get\_node}(s:\\{integer})$: \\{pointer};\quad -$\{\,$variable-size node allocation$\,\}$ - -\bugonpage D66, lines 31--32 (3/16/86) - -\tenpoint\noindent -controlled -growth helps to keep the \\{mem} usage consecutive when \MF\ is -implemented on ``virtual memory'' systems. - -\bugonpage D67, lines 7--8 (4/21/87) - -\ninepoint\noindent\hskip10pt -{\bf if} $r=p$ {\bf then if} $\\{rlink}(p)\ne p$ {\bf then} - $\langle\,$Allocate entire node $p$ and {\bf goto} \\{found}% - {\sevenrm\kern.5em171}$\,\rangle$; - -\bugonpage D86, second line of section 198 (2/27/87) - -\noindent -Individual class numbers have no semantic -or syntactic significance, except in a few instances\cutpar - -\bugonpage D101, line 2 (3/16/86) - -\tenpoint\line{% -like `{\tt x}', or they can -combine the structural properties of arrays and records, like `{\tt x20a.b}'. -A} - -\bugonpage D102, line 24 (3/16/86) - -\tenpoint\line{\kern10pt -In other words, variables have a hierarchical structure that includes -enough threads running} - -\bugonpage D127, line 10 (5/5/87) - -\ninepoint\noindent -[Variable $r$ can be eliminated, since it is not -used in this procedure! If you delete it, also remove $\underline{280}$ -from the corresponding index entry on page D536.] - -\bugonpage D129, line 15 (5/5/87) - -\ninepoint\noindent -[This line can be eliminated, since \\{sine} and \\{cosine} are not -used in this procedure! If you delete them, also remove $\underline{284}$ -from the corresponding index entries on pages D538 and D521.] - -\bugonpage D142, line 23 (4/24/87) - -\tenpoint\noindent -$(7-\sqrt{28}\,)/12$; the worst case -occurs for polynomials like $B(0,28-4\sqrt{28},14-5\sqrt{28},42;t)$.) - -\bugonpage D178, third-last line (7/30/86) - -\tenpoint\line{\quad -The following code maintains the invariant relations -$0\le \\{x0}<\max(\\{x1},\\{x1}+\\{x2})$, $\vert\\{x1}\vert<2^{30}$,} - -\bugonpage D228, line 13 (7/30/86) - -\ninepoint\noindent\kern10pt -{\bf while} $\\{max\_coef}<\\{fraction\_half}$ {\bf do} - -\smallskip\eightpoint\noindent -The mini-index at the bottom of the next page should also receive the following -new entry: -\smallskip\indent -$\\{fraction\_half}={\rm macro}$, \S105. - -\bugonpage D228, 10th-last line (5/5/87) - -\ninepoint\noindent\hskip20pt -{\bf begin} $\\{right\_type}(p)\gets k$; -\smallskip -\noindent[Also eliminate `$q,$' seven lines above this, and delete -$\underline{497}$ from the index entry for \\{q} on page D536.] - -\bugonpage D248, lines 16--21 (11/27/86) - -\ninepoint\noindent\kern10pt -$\\{alpha}\gets\\{abs}(u)$;\kern5pt - $\\{beta}\gets\\{abs}(v)$;\par\noindent\kern10pt -{\bf if} $\\{alpha}<\\{beta}$ {\bf then}\par\noindent\kern20pt -{\bf begin} $\\{alpha}\gets\\{abs}(v)$;\kern5pt - $\\{beta}\gets\\{abs}(u)$;\kern5pt -{\bf end};\quad$\{\,$now $\alpha=\max(\vert u\vert,\vert v\vert)$, - $\beta=\min(\vert u\vert,\vert v\vert)\,\}$\par\noindent\kern10pt -{\bf if} $\\{internal}[\\{fillin}]\ne0$ {\bf then}\par\noindent\kern20pt -$d\gets d-\\{take\_fraction}(\\{internal}[\\{fillin}], - \\{make\_fraction}(\\{beta}+\\{beta},\\{delta}))$;\par\noindent\kern10pt -$d\gets\\{take\_fraction}((d+4)\;{\bf div}\;8,\\{delta})$;\kern5pt -$\\{alpha}\gets\\{alpha}\;{\bf div}\;\\{half\_unit}$; - -\bugonpage D263, line 20 (3/16/86) - -\tenpoint\noindent -instead of \\{false}, the other routines will simply log the fact -that they have been called; they won't\cutpar - -\bugonpage D268, line 2 (4/28/87) - -\tenpoint\noindent -Given the number~$k$ of an open window, the pixels of positive -weight in \\{cur\_edges} will be shown\cutpar - -\bugonpage D301, line 6 of section 652 (5/5/87) - -\ninepoint\noindent -[This line can be eliminated, since variable $s$ is not -used in this procedure! If you delete it, also remove $\underline{652}$ -from the corresponding index entry on page D537; remove 652 from -the index entries for \\{param\_size} and \\{param\_start} on page D534; -and remove \\{param\_size} from the mini-index on page D301.] - -\bugonpage D376, lines 17 and 18 (11/14/86) - -\tenpoint\noindent -[these two mysterious lines should be deleted] - -\bugonpage D380, line 11 (5/5/87) - -\ninepoint\noindent -[Variables $q$ and $r$ can be eliminated, since they are not -used in this procedure! If you delete them, also remove $\underline{862}$ -from the corresponding index entries on page D536.] - -\bugonpage D429, line 14 (5/5/87) - -\ninepoint\noindent\hskip10pt -{\bf begin} $p\gets\\{cur\_exp}$; -\smallskip -\noindent[Also eliminate line 12, and delete $\underline{985}$ from the -index entry for \\{vv} on page D543.] - -\bugonpage D455, line 5 (5/5/87) - -\ninepoint\noindent -[This line can be eliminated, since variable $t$ is not -used in this procedure! If you delete it, also remove $\underline{1059}$ -from the corresponding index entry on page D540; remove 1059 from -the index entries for \\{small\_number} and \\{with\_option} on pages D539 -and D544; and remove \\{with\_option} from the mini-index on page D455.] - -\bugonpage D463, line 10 (12/15/86) - -\ninepoint\noindent\hskip30pt -({\tt"Pretend\]that\]you're\]Miss\]Marple:\]Examine\]all\]clues,"}) - -\bugonpage D465, lines 17--18 (6/14/87) - -\tenpoint\noindent -[Delete these two lines.] - -\bugonpage D474, 5th-last line (3/16/86) - -\tenpoint\noindent -depths, or italic corrections) are sorted; -then the list of sorted values is perturbed, if necessary. - -\bugonpage D481, line 12 (6/17/86) - -\ninepoint\noindent\hskip10pt -\\{print\_nl}({\tt\char`\"Font\]metrics\]written\]on\]\char`\"});\kern5pt -\\{print}(\\{metric\_file\_name});\kern5pt -\\{print\_char}({\tt\char`\".\char`\"}); - -\noindent\hskip10pt\\{b\_close}(\\{tfm\_file}) - -\smallskip\eightpoint\noindent -The mini-index at the bottom of this page should also receive the following -new entry: -\smallskip\indent -\\{print\_char}: {\bf procedure}, \S58. - -\bugonpage D510, new line to follow line 5 (6/17/86) - -{\tenpoint\parindent=1em -This program doesn't bother to close the input files that may still be open. -\par} - -\bugonpage D510, just before the fifth-last line (8/5/86) - -\ninepoint\noindent\hskip30pt$\\{internal}[\\{fontmaking}]\gets0$;\quad -$\{\,$avoid loop in case of fatal error$\,\}$ - -\bugonpage D520, right column (6/14/87) - -\eightpoint -\leftline{Chinese characters:\quad 1147.} - -\bugonpage D526, left column, lines 1--2 (7/30/86) - -\eightpoint -\leftline{\indent\\{fraction\_half}:\quad - $\underline{105}$, 111, 152, 288, 408, 496, 543,} -\leftline{\indent\qquad 1098, 1128, 1141.} - -\bugonpage D526, left column, lines 6--7 (7/30/86) - -\eightpoint -\leftline{\indent\qquad 478, 497, 499, 503, 530, 540, 547, 549, 599, 603,} -\leftline{\indent\qquad 612, 615, 815--816, 917, 1169--1170.} - -\bugonpage D528, right column (6/14/87) - -\eightpoint -\leftline{Japanese characters:\quad 1147.} - -\bugonpage D530, right column, line 45 (7/30/86) - -\eightpoint -\leftline{\indent\\{max}:\quad$\underline{539}$, 543.} - -\bugonpage D533, right column (6/14/87) - -\eightpoint -\leftline{oriental characters:\quad 1147.} - -\bugonpage D535, right column, line 27 (6/17/86) - -\eightpoint -\leftline{\indent\qquad 1134, 1163--1165, 1182, 1194, 1200, 1205, 1213.} - -\bugonpage D547, bottom two lines (11/27/86) - -\ninepoint\noindent -[These lines, and the top two on the next page, should move down -so that they appear in alphabetical order just before `Compute -test coefficients'.] -% volume E -\hsize=29pc -\def\dashto{\mathrel{\hbox{-\kern-.05em}\mkern3.9mu\hbox{-\kern-.05em}}} - -\bugonpage Exiii, lines 1--2 (7/28/86) - -\tenpoint\noindent -February 11--13, 1984), 49. -\ {\it An example meta-character of the Devanagari alphabet, worked out -``online'' with the help of Matthew Carter.} - -\bugonpage Exiii, line 6 (7/28/86) - -\tenpoint\noindent -{\it and western alphabets work also for Devanagari and Tamil.} - -\bugonpage E12, lines 15 and 19 (7/23/86) - -\tenpoint\noindent[change `17.32' to `17.28' in both places] - -\bugonpage E12, third-last line (12/18/86) - -\tenpoint\noindent[change `41' to `40'] - -\bugonpage E13, lines 3, 4, and 20 (12/18/86) - -\tenpoint\noindent[change `40' to `41', `48' to `47', `17' to `7'] - -\bugonpage E18, line 20 (7/23/86) - -\tenpoint\noindent[change `17.32' to `17.28'] - -\bugonpage E18, line 29 (12/9/86) - -\tenpoint\noindent[change `236' to `212' in the {\tt cmss9} column] - -\bugonpage E170, top illustration (11/2/86) - -\tenpoint\noindent[There should be no ``dish'' or depression in the -vicinity of point {\tt 3r}; the top edge of the character should be -straight. This error appears also in the other uses of `\\{no\_dish\_serif}' -throughout the book, since the illustrations were made before -`\\{no\_dish\_serif}' was added to the program. See page -E180~(twice at the top), E370~(twice), E374~(twice), E376~(twice), E378~(top), -E390~(bottom), E398~(top), E402~(top), E406~(top), E453~(twice).] - -\bugonpage E179, new line to be inserted after line 6 (10/13/86) - -\ninepoint\noindent -{\bf if} $\\{shaved\_stem}<\\{crisp}.\\{breadth}$: - $\\{shaved\_stem}:=\\{crisp}.\\{breadth}$; {\bf fi} - -\bugonpage E219, line 29 (6/2/87) - -\ninepoint\line{\\{top} $y_1=h$; \ $x_1=x_2$; \ - {\bf filldraw stroke} $z_{1e}\dashto z_{2'e}$;\hfil\% stem} - -\bugonpage E279, seventh line from the bottom (7/20/86) - -\rightline{\eightssi that delicious but restrained humor which - her readers found so irresistible.} - -\bugonpage E301, new line to be inserted after line 28 (5/15/87) - -\ninepoint\noindent -\quad{\bf if} $\\{lower\_side}>1.2\\{upper\_side}$: - $\\{upper\_side}:=\\{lower\_side}$; {\bf fi} - -\bugonpage E554, bottom half of page (12/18/86) - -\ninepoint\noindent[The letters will change slightly because of the -corrections to {\tt cmr17} noted on pages 12 and 13.] - -\bugonpage E561, line 3 (12/9/86) - -\ninepoint\noindent[The numerals should be `\thinspace -{\niness 0123456789}\thinspace' (i.e., 2/3 point less tall) -because of the correction made to page 18.] - -\bugonpage E562, line 9 (12/9/86) - -\ninepoint\noindent[The numerals should be `\thinspace -{\ninessi 0123456789\/}\thinspace' (i.e., 2/3 point less tall) -because of the correction made to page 18.] - -\bugonpage E572, entry for {\it breadth} (10/13/86) - -\eightpoint -{\it breadth}, 59, 75, 79, 91, 93, 179, 225, 233, - -\bugonpage E573, entry for {\tt cmcsc10} (8/17/86) - -\eightpoint -{\tt cmcsc10}, $\underline{30}$--$\underline{31}$, 567. - -\bugonpage E576, tenth-last line (5/15/87) - -\eightpoint -{\bf lowres\kern.04em\vbox{\hrule width.3em height .6pt}\kern.08em - fix}, 550. -\bye -Now here are some that I will make soon! - diff --git a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.two b/Master/texmf-dist/doc/generic/knuth/source/errata/errata.two deleted file mode 100644 index 74dde877267..00000000000 --- a/Master/texmf-dist/doc/generic/knuth/source/errata/errata.two +++ /dev/null @@ -1,491 +0,0 @@ -% More bugs (sigh) in The TeXbook - -\input manmac -\proofmodefalse -\raggedbottom -\output{\onepageout{\unvbox255\kern-\dimen@ \vfil}} - -\def\rhead{Bugs in {\tensl The \TeX book}, second printing} -\def\bugonpage#1(#2) \par{\bigbreak\tenpoint - \hrule\line{\lower3.5pt\vbox to13pt{}Page #1\hfil(#2)}\hrule\nobreak\medskip} - -\noindent This is a list of all corrections made to {\sl The \TeX book\/} -since the second printing. If your copy doesn't say `{\sl\kern-1pt Second -printing (October 1984)\/}' on the copyright page, you should also look at -the previous bug list. In fact, the most important corrections to the -first printing were discovered first, so they've already been~made. - -\bugonpage 23, line 16 (10/13/84) - -\tenpoint\indent -|This is TeX, Version 1.0 (preloaded format=plain 83.7.15)| - -\bugonpage 33, line 32 (10/21/84) - -The bottom line shows how far \TeX\ has gotten until now in the -|story|{\parfillskip=0pt\par} - -\bugonpage 41, lines 7 and 8 (10/8/85) - -\ddanger The twin operations ^|\uppercase||{|\<token list>|}| and -^|\lowercase||{|\<token list>|}| go through a given token list and convert -all of the character tokens to their\parfillskip=0pt\enddanger - -\bugonpage 57, line 17 (1/6/86) - -|dd|\quad didot point ($\rm1157\,dd=1238\,pt$) - -\bugonpage 61, lines 17--19 (12/18/85) - -\ninepoint\noindent -|depth|, |em|, |ex|, -|fil|, |height|, |in|, |l|, |minus|, |mm|, |mu|, |pc|, |plus|, -|pt|, |scaled|, |sp|, |spread|, |to|, |true|, |width|. ^^{reserved words} -\ (See Appendix~I for references to the contexts in which each of these is -recognized as a keyword.) - -\bugonpage 67, append a new exercise (1/19/85) - -\exno=5 \def\chapno{11} -\gdef\frac#1/#2{\leavevmode\kern.1em - \raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em - /\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}} - -\ddangerexercise Construct a |\frac| macro such that `|\frac1/2|' yields -`\frac1/2'. - -\bugonpage 130, line 15 (4/17/85) - -\beginmathdemo -|$y'''_3+g'^2$|&y'''_3+g'{}^2\cr -\endmathdemo - -\bugonpage 170, line 5 (5/28/85) - -\ninepoint -\line{tall, unslanted -letter; and so on. But two of the examples involve corrections that were} - -\bugonpage 194, lines 13--15 should be centered better (10/22/84) - -\ninepoint -$$\displaylines{\hfill x\equiv x;\hfill\llap{(1)}\cr - \hfill\hbox{if}\quad x\equiv y\quad\hbox{then}\quad - y\equiv x;\hfill\llap{(2)}\cr - \hfill\hbox{if}\quad x\equiv y\quad\hbox{and}\quad - y\equiv z\quad\hbox{then}\quad - x\equiv z.\hfill\llap{(3)}\cr}$$ - -\bugonpage 215, lines 9 and 10 from the bottom (12/23/84) - -\ninepoint\noindent -general format -is the same as for |\def| and |\gdef|, but \TeX\ blindly expands the tokens -of the replacement text according to the expansion rules above. For -example, consider - -\bugonpage 233, lines 15--19 (1/19/85) - -\medskip -\settabs\+\indent&10\frac1/2 lbs.\qquad&\it Servings\qquad&\cr -\+&\negthinspace\it Weight&\it Servings& - {\it Approximate Cooking Time\/}*\cr -\smallskip -\+&8 lbs.&6&1 hour and 50 to 55 minutes\cr -\+&9 lbs.&7 to 8&About 2 hours\cr -\+&9\frac1/2 lbs.&8 to 9&2 hours and 10 to 15 minutes\cr -\+&10\frac1/2 lbs.&9 to 10&2 hours and 15 to 20 minutes\cr - -\bugonpage 236, lines 18--21 (1/19/85) - -\ninepoint -$$\vbox{\openup2pt -\halign{\hfil\bf#&\quad\hfil\it#\hfil&\quad\hfil#\hfil& - \quad\hfil#\hfil&\quad#\hfil\cr -Squab&Poussin&2&\frac3/4 to 1&Broil, Grill, Roast\cr -Broiler&Poulet Nouveau&2 to 3&1\frac1/2 to 2\frac1/2&Broil, Grill, Roast\cr -Fryer&Poulet Reine&3 to 5&2 to 3&Fry, Saut\'e, Roast\cr -Roaster&Poularde&5\frac1/2 to 9&Over 3&Roast, Poach, Fricassee\cr}}$$ -[This change should also be made at the bottom of page 237.] - -\bugonpage 236, fifth-last line (1/19/85) - -\ninepoint -| Squab&Poussin&2&\frac3/4 to 1&Broil, Grill, Roast\cr| - -\bugonpage 237, line 25 (10/10/84) - -\ninepoint\noindent -saying `^|\tabskip||=|\<glue>'. For example, -let's do the poultry table again, but with the{\parfillskip=0pt\par} - -\bugonpage 265, bottom line (11/6/85) - -[insert a comma after `{\eightss LEONTIEF}'.] - -\bugonpage 271, line 8 (11/12/85) - -\ninepoint -\beginsyntax -<fil unit>\is[fil]\alt<fil unit>[l] -\endsyntax - -\bugonpage 280, lines 7 and 8 (1/8/85) - -\ninepoint\noindent -\<4-bit number>.\enskip -The specified output stream is opened or closed, for use in |\write| -commands, as explained in Chapter~21. - -\bugonpage 300, lines 5--10 [changed for version 1.3] (11/25/84) - -\ninepoint\noindent -what part of \TeX's memory has become overloaded; -one of the following fourteen things will be mentioned: -\begindisplay -|number of strings|\qquad(names of control sequences and files)\cr -|pool size|\qquad(the characters in such names)\cr -|main memory size|\qquad(boxes, glue, breakpoints, token lists, - characters, etc.)\cr -\enddisplay - -\bugonpage 300, lines 23--29 [changed for version 1.3] (11/25/84) - -\danger If you have a job that doesn't overflow \TeX's capacity, yet -you want to see just how closely you have approached the limits, -just set ^|\tracingstats| to a positive value before the end of your -job. The log file will then conclude with a report on your actual -usage of the first eleven things named above (i.e., the number of strings, -\dots, the save size), in that order. ^^{stack positions} -Furthermore, if you set |\tracingstats| equal to 2~or~more, \TeX\ -will show its current memory usage whenever it -does a ^|\shipout| command. Such statistics are broken into two -parts; `|490&5950|' means, for example, that 490 words are being used -for ``large'' things like boxes, glue, and -breakpoints, while 5950 words are being used for ``small'' things like -tokens and characters. - -\bugonpage 302, line 14 (10/8/85) - -\begintt -.\tenrm || (ligature ---) -\endtt - -\bugonpage 305, line 26 (12/24/84) - -\ninepoint\noindent -sentable as |^^M|. Asking \TeX\ to |\show\^^M| -\looseness-1 -produces the response `|>| |\^^M=macro:->\|\]|.|'. - -\bugonpage 306, line 10 (7/1/85) - -\ninepoint\noindent -no ``^{explicit kerns},'' and an italic correction is an -explicit kern.) \ But the italic correction may be too much (especially in an -italic font); |shelf{|^|\kern||0pt}ful| is often best. - -\bugonpage 308, line 25 (3/25/85) - -\ninepoint\indent -|\def\appendroman#1#2#3{\edef#1{\def\noexpand#1{\csname| - -\bugonpage 311, insert a new answer (1/19/85) - -\ninepoint -\ansno11.6: - |\def\frac#1/#2{\leavevmode\kern.1em|\parbreak -|\raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em|\parbreak -|/\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}}| - -\smallskip\noindent[This causes answer 12.8 to move to page 312; -answer 12.16 also moves to page 313.] - -\bugonpage 320, lines 17--20 (8/10/85) - -\ninepoint -\ansno17.16: - |\def\sqr#1#2{{\vcenter{\vbox{\hrule height.#2pt|\parbreak - | \hbox{\vrule width.#2pt height#1pt \kern#1pt|\parbreak - | \vrule width.#2pt}|\parbreak - | \hrule height.#2pt}}}}| - -\bugonpage 327, lines 26--33 (10/22/84) - -\ninepoint -\ansno19.16: - |$$\displaylines{\hfill x\equiv x;\hfill\llap{(1)}\cr|\parbreak - | \hfill\hbox{if}\quad x\equiv y\quad\hbox{then}\quad|\parbreak - | y\equiv x;\hfill\llap{(2)}\cr|\parbreak - | \hfill\hbox{if}\quad x\equiv y\quad\hbox{and}\quad|\parbreak - | y\equiv z\quad\hbox{then}\quad|\parbreak - | x\equiv z.\hfill\llap{(3)}\cr}$$|\par\medskip\noindent -There's also a trickier solution, which begins with -\begintt -$$\displaylines{x\equiv x;\hfil\llap{(1)}\hfilneg\cr -\endtt - -\bugonpage 330, line 29 (11/15/85) - -\ninepoint\indent -|\edef\next#1#2{\def#1{\b#2\d}} \next\a\c| - -\bugonpage 332, lines 17--24 (1/19/85) - -\ninepoint -\begintt -\settabs\+\indent&10\frac1/2 lbs.\qquad&\it Servings\qquad&\cr -\+&\negthinspace\it Weight&\it Servings& - {\it Approximate Cooking Time\/}*\cr -\smallskip -\+&8 lbs.&6&1 hour and 50 to 55 minutes\cr -\+&9 lbs.&7 to 8&About 2 hours\cr -\+&9\frac1/2 lbs.&8 to 9&2 hours and 10 to 15 minutes\cr -\+&10\frac1/2 lbs.&9 to 10&2 hours and 15 to 20 minutes\cr -\endtt - -\bugonpage 332, lines 33--35 (1/19/85) - -\ninepoint\noindent -proofs. \ (You weren't supposed to think of this, -but it has to be mentioned.) \ See exercise 11.\fracexno\ for the `|\frac|' -macro; it's better to say `\frac1/2' than `$1\over2$', in a cookbook.\par -Another way to treat this table would be to display it in a vbox, instead -of including a first column whose sole purpose is to specify indentation. - -\bugonpage 337, line 28 (11/12/85) - -\ninepoint\noindent |\nextnumber|. Quick should put `|\relax|' -at the end of his macro. \ (The {keywords} |l|,{\parfillskip=0pt\par} - -\bugonpage 357, lines 35 and 36 (1/8/85) - -\ninepoint\noindent -|\def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}}| - -\bugonpage 357, last two lines (4/17/85) - -\ninepoint\noindent -|\def\pr@m@s{\ifx'\next\let\next\pr@@@s|% - | \else\ifx^\next\let\next\pr@@@t|\par\noindent -| \else\let\next\egroup\fi\fi \next}|\par\noindent -|\def\pr@@@s#1{\prim@s} \def\pr@@@t#1#2{#2\egroup}| - -\bugonpage 358, lines 8--12 (1/23/85) - -\ninepoint\noindent -|\def\hbar{{\mathchar'26\mkern-9muh}}|\hfil\break\null -|\def\surd{{\mathchar"1270}}|\hfil\break\null -|\def\angle{{\vbox{\ialign{$\m@th\scriptstyle##$\crcr|\hfil\break\null -| \not\mathrel{\mkern14mu}\crcr \noalign{\nointerlineskip}|\hfil\break\null -| \mkern2.5mu\leaders\hrule height.34pt\hfill\mkern2.5mu\crcr}}}}| - -\bugonpage 359, lines 7--8 (1/22/85) - -\ninepoint\noindent -|\def\ddots{\mathinner{\mkern1mu\raise7pt\vbox{\kern7pt\hbox{.}}\mkern2mu|% -\hfil\break\null -| \raise4pt\hbox{.}\mkern2mu\raise1pt\hbox{.}\mkern1mu}}| - -\bugonpage 360, line 22 (1/22/85) - -\ninepoint\noindent -| \mkern5mu \raise.6\dimen@\copy\rootbox \mkern-10mu \box0}| - -\bugonpage 361, line 3 (3/27/85) - -\ninepoint\noindent -|\def\buildrel#1\over#2{\mathrel{\mathop{\kern0pt #2}\limits^{#1}}}| - -\bugonpage 361, lines 19--20 (1/22/85) - -\ninepoint\noindent -|\def\bmod{\mskip-\medmuskip \mkern5mu|\hfil\break\null -| \mathbin{\rm mod} \penalty900 \mkern5mu \mskip-\medmuskip}| - -\bugonpage 361, line 27 (5/1/85) - -\ninepoint\noindent -|\def\matrix#1{\null\,\vcenter{\normalbaselines\m@th| - -\bugonpage 361, bottom line (5/1/85) - -\ninepoint\noindent -| \null\;\vbox{\kern\ht1\box2}\endgroup}| - -\bugonpage 362, line 9 (5/1/85) - -\ninepoint\noindent -|\def\eqalign#1{\null\,\vcenter{\openup1\jot \m@th| - -\bugonpage 362, lines 17--29 (8/10/85) - -{\parindent=0pt\ninepoint -|\def\@lign{\tabskip=0pt\everycr={}} % restore inside \displ@y|\par -|\def|^|\displaylines||#1{\displ@y|\parbreak% -| \halign{\hbox to\displaywidth{|% - |$\hfil\@lign\displaystyle##\hfil$}\crcr|\parbreak% -| #1\crcr}}| -\smallbreak -|\def|^|\eqalignno||#1{\displ@y \tabskip=|^|\centering|\parbreak% -| \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip=0pt|\parbreak% -| &$\@lign\displaystyle{{}##}$\hfil\tabskip=\centering|\parbreak% -| &\llap{$\@lign##$}\tabskip=0pt\crcr|\parbreak% -| #1\crcr}}|\par -|\def|^|\leqalignno||#1{\displ@y \tabskip=\centering|\parbreak% -| \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip=0pt|\parbreak% -| &$\@lign\displaystyle{{}##}$\hfil\tabskip=\centering|\parbreak% -| &\kern-\displaywidth\rlap{$\@lign##$}\tabskip=\displaywidth\crcr|\parbreak% -| #1\crcr}}| -\par} - -\bugonpage 363, line 9 (5/12/85) - -\ninepoint\noindent -|\def\footnote#1{\let\@sf=\empty % parameter #2 (the text) is read later| - -\bugonpage 364, line 3 (3/23/85) - -\ninepoint\noindent -|\def\plainoutput{\shipout\vbox{\makeheadline\pagebody\makefootline}%| - -\bugonpage 364, fifth-last line (9/15/85) - -\ninepoint\noindent -|\def\fmtname{plain}\def\fmtversion{2.0} % identifies the current format| - -\bugonpage 399, eighth-last line (2/11/85) - -\ninepoint\noindent -| \baselineskip=\footnotebaselineskip\noindent\unhbox0\par}| - -\bugonpage 401, line 5 (1/29/85) - -\ninepoint\noindent -{|\fontdimen| parameters to qualify as a math symbol font). -(2)~Set all the font identifiers\parfillskip=0pt\par} - -\bugonpage 414, line 10 (12/17/84) - -\ninepoint\noindent -|\font\titlefont=cmssdc40 % titles in chapter openings| - -%\bugonpage 420, line 9 (10/3/85) -% -%\ninepoint\noindent -%|\def\AmSTeX{$\cal A\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.075em| -% that change comes under `font data', explained away below - -\bugonpage 444, bottom line (1/10/85) - -\ninepoint\noindent -depth $d(z)+v$, consisting -of box~$x$ followed by an appropriate kern followed by box~$z$. - -\bugonpage 461, entry for character codes (11/6/85) - -\eightpoint -Add `{\sl see also\/} category codes'. - -\bugonpage 463, entries for {\tt dd}, Didot, and didot (1/6/86) - -\eightpoint -Remove the circumflex accents. - -\bugonpage 466, left column (1/19/85) - -\eightpoint -fractions, 67, 139--143, 152, 170, 179,\par -\qquad 186, 444--445.\par -\quad huge, 196.\par -\quad slashed form, 67, 139--140, 233, 236. - -\bugonpage 467, index entry for {\tt\char`\\hsize} (6/14/85) - -\eightpoint -Add a reference to page {\it 60}. - -\bugonpage 469, index entry for {\tt\char`\\kern} (7/1/85) - -\eightpoint -Add a reference to page {\it 306}. - -\bugonpage 469, index entry for kerns (7/1/85) - -\eightpoint -Add a reference to page 306. - -\bugonpage 469, new entry (11/12/85) - -\eightpoint -|l| after |fil|, $\underline{271}$, 337. - -\bugonpage 469, second line on the right (9/13/85) - -\eightpoint -%\def\LaTeX{L\kern-.25em\raise.7ex\hbox{a}\kern-.05em\TeX} % old style -{L\kern -.36em\raise.6ex\hbox{\sixrm A}\kern-.15em\TeX}, 137. - -\bugonpage 470, index entries for {\tt\char`\\longleftarrow} - thru {\tt\char`\\Longrightarrow} (10/5/84) - -\eightpoint -The references to page 358 should be underlined (seven times). - -\bugonpage 475, index entry for punctuation in formulas (4/29/85) - -\eightpoint -Add a reference to page 161. - -\bugonpage 476, index entry for {\tt\char`\\scriptspace} (8/10/85) - -\eightpoint -Change `445' to `445--446'. - -\bugonpage 478, first and last lines (10/11/84) - -\noindent Delete the last line in the right-hand column -(since it appears on page 479), and add the following line -at the top of the left-hand column (since it was dropped by mistake -from the second printing): - -\smallskip -\eightpoint styles of math formatting, 140--141, 441--447. - -\bugonpage 478, new entry after tabbing (5/28/85) - -\eightpoint -tables, {\sl see\/} alignments, tabbing. - -\bugonpage 478, tabskip entries (3/25/85) - -\eightpoint\noindent Instead of `237--239' and `237--238' it should say -`$\underline{237}$--$\underline{239}$' twice. - -\bugonpage 481, the entry for {\tt\char`\\widetilde} (9/23/85) - -\eightpoint -Page 359 should be underlined. - -\bugonpage 483, lines 16--17 (1/19/85) - -|P.O. Box 9506|\parbreak -|Providence RI 02940-9506, USA.| - -\bugonpage 483, lines 22--23 (1/19/85) - -P.O. Box 9506\par -Providence RI 02940-9506, USA. - -\bigskip -\hrule -\bigskip\noindent\tenrm -Note: The next printing will use the ``real'' Computer Modern fonts -instead of the ``almost'' Computer Modern fonts. Therefore many of -the line breaks will be slightly different. Also, the font-related -numerical data on pages 27, 29, 66, 75, 76, 79, 88, 98, 99, 112, 113, 310, -314, 396, 399, 409, 420, and 459 will be different. However, these -differences need not be listed here, because the old book was correct with -respect to the old fonts. - -\bye diff --git a/Master/texmf-dist/doc/generic/knuth/source/errata/errorlog.tex b/Master/texmf-dist/doc/generic/knuth/source/errata/errorlog.tex deleted file mode 100644 index dc4845c1c19..00000000000 --- a/Master/texmf-dist/doc/generic/knuth/source/errata/errorlog.tex +++ /dev/null @@ -1,2924 +0,0 @@ -% Appendix to the Errors of TeX paper (updated) -% Section numbers now adjusted to TeX 3.0 equivalents -% NB: tab marks are significant in this file, they signal continuation lines -%\magnification=\magstephalf -%\pageno=35 -\input logmac -* 10 Mar 1978 -L1. Rename a few external variables to make their first six letters unique. -D2. Initialize \\{escape_char} to $-1$, not 0 [it will be set to the - first character input]. @240 -L3. Fix bug: The test `$\\{id}<\O{200}$' was supposed to distinguish one-letter - identifiers from longer (packed) ones, but negative values of - \\{id} also pass this test. @356 -B4. Fix bug: I wrote `{\bf while} $\alpha\land(\beta\lor\gamma)$' when I meant - `{\bf while} $(\alpha\land\beta)\lor\gamma$'. @259 -R5. Initialize the input routines in |INITEX| [at this time a short, - separate program not under user control], in case errors occur. @1337 -E6. Don't initialize \\{mem} in |INITEX|, it wastes time. @164 -B7. Change `\\{new_line}' [which denotes a lexical scanning state] to - `\\{next_line}' [which denotes - \\{carriage_return} and \\{line_feed}] in print commands. -F8. Include additional test `$\\{mem}[p] \ne 0\; \land$' in \\{check_mem}. @168 -M9. Fix inconsistency between the \\{eq_level} conventions of \\{macro_def} and - \\{eq_define}. @277 -# About six hours of debugging time today. -# |INITEX| appears to work, - and the test routine got through \\{start_input}, - \\{chcode} [the \TeX78 command for assigning a \\{cat_code}], - \\{get_next}, and \\{back_input} the first time. -* 11 Mar 1978 -I10. Insert space before `|(|' on terminal when opening a new file. @537 -F11. Put `$p\gets \\{link}(p)$' into the loop of \\{show_token_list}, - so that it doesn't loop forever. @292 -L12. Shift the last item found by \\{scan_toks} into the \\{info} field. - [With |SAIL| all packing of fields was done by arithmetic operations, - not by the compiler.] @474 -B13\>12. Fix the previous bugfix: I shifted by the wrong amount. @474 -I14. Add a feature that prints a warning when the end of a file page occurs within - a macro definition or call. [System dependent.] @336 -# Unintended bugs in my test routine [a format intended eventually to typeset - {\sl The Art of Computer Programming\/}] helped check out the - error recovery mechanisms. - For example, I had `|\lft{#}|' instead of `|\lft{##}|' inside a macro, - and three cases of improper |{|~and~|}| nesting. -F15. Add the forgotten case `\\{set_font}:' to \\{eq_destroy}. @275 -C16. Change |\require| to |\input|. @376 -F17. Add code for the case $\\{cur_cmd}=0$ [later known as the case - `$\,t\ge\\{cs_token_flag}$'] when scanning a tokenlist. @357 -# That's the first ``big'' error I've spotted so far. -I18. Introduce a `|d|' option in the error routine, to facilitate debugging. @84 -L19. Assign a floating-point constant \\{ignore_depth} to \\{prev_depth}, - instead of assigning the integer constant \\{flag} - [since \\{prev_depth} is type \\{real} in \TeX78]. @215 -I20. Improve the readability and spacing of \\{show_node_list} output. @182,187 -F21. Set the variable $v$ before using the {\bf case} construction in - \\{show_node_list}, because there's one case where $v$ - didn't receive a value [as part of the field unpacking]. @182 -# About seven hours today. -* 12 Mar 1978 -# One hour to enter yesterday's corrections and recompile. -# At this point \TeX\ correctly located further unintended syntax errors - in |acphdr| [the test file]. -I22. Insert \\{debug_help} into \\{succumb}, giving a chance to look at memory - before the system dies. @93 -D23. Use \\{eq_destroy} wherever necessary in \\{unsave}. @283 -L24. Change `$t \gets (t-1)$ mod 8' to `$t \gets (t-1)$ land~7' in \\{id_name}, - since |SAIL| has $-1$~mod~$8 = -1$. [At this time, \\{id_name} is a - routine that unpacks control sequence names, according to a scheme - that will become obsolete after change \#422.] -S25. Remove the space that appears at end of paragraph. - (I hadn't anticipated that.) @816 -L26. Throw away unwanted \\{line_feed} after getting a \\{carriage_return} - in response to \\{in_chr_w} [a system routine for - input from the terminal]. @83 -B27. Delete spurious call to \\{flush_list} in \\{end_token_list}. @324 -# Why did I make such a silly mistake? -F28. Fix bug in \\{get_x_token}: I forgot to say `\\{macro_call}' (which is the - main point of that routine)! @380 -# While tracking that bug down, I found out incidentally that kerning is okay. -# Also \TeX\ correctly caught an error |0p| for |0pt|. -L29. Fix bug in \\{scan_spec} ({\bf while} instead of {\bf repeat}). @404 -M30. Make the table entries for |\hfill| and |\hskip| consistent with the - program conventions. @1058 -L31. Disable unforeseen coercion: When \\{scan_spec} put \\{hsize} on - \\{save_stack}, the value changed from \\{real} to \\{integer}. @645 -I32. Use `|*|' instead of `|-1.0|' for running dimensions - of rules in \\{show_node_list}. @176 -D33. Clear \\{mem}[\\{head}] to null in \\{push_nest} [in \TeX82, this - will be done by \\{get_avail}]. @216 -# A vrule link got clobbered because I forgot to do this. -I34. Translate ASCII control codes to special form when displaying them. @48,68 -# Ligatures work, but \\{show_node_list} showed them funny. -F35. Remember to clear parameters off \\{save_stack} in \\{package} routine. @1086 -# About eight hours today. -* 13 Mar 1978 -D36. Introduce a new variable \\{hang_first} [later the sign of \\{hang_after}]. @849 -E37\>36. Simplify the new code, realizing that if $\\{hang_indent}=0$ then - \\{hang_first} is irrelevant. @848 -# Time sharing is very slow today, so I'm mostly reading technical reports while - waiting\/ {\bf three hours} for compiler, editor, and loading routine. -# I'm not counting this as debugging time! -# (Came back in the evening.) -P38. Spruce up the comments in the \\{line_break} routine, which appears to be - almost working. @813 -D39. Rethink the setting of \\{best_line}; it's 1 too high in many cases. - [The final line of a paragraph was handled in a treacherous way.] @874 -D40. Compute proper initialization for - \\{prev_depth} when beginning an |\hbox| - with a paragraph inside. [This refers to a special `paragraph box' - construction, used when an hbox of specified size becomes overfull; - \TeX78 doesn't have the concept of internal vertical mode.] @1083 -D41. Also initialize \\{tail} in that case. @1083 -M42. Also put the result of line-breaking into the correct list. -T43. Fix a typo in the \\{free_node} routine (`\\{link}' not `\\{llink}'); - by strange chance it had been harmless until today. @130 -F44. Fix bug: \\{post_line_break} forgot to set \\{adjust_tail}. @889 -D45. Update \\{act_width} properly when looking for end of word while - line breaking. @866 -B46. Repair the ``tricky'' part of \\{get_node}: I used the \\{info} field - when I meant to say \\{llink}. @127 -# Now the |\corners| macro of |acphdr| works! [See |\setcornerrules| - in {\sl The \TeX book}, page 417.] -D47. Reset \\{contrib_tail} properly in \\{build_page}. @995 -T48. Fix typo (|-| for |+|) in computation of \\{page_total}. @1004 -S49. Change the page-breaking logic: \TeX\ reached \\{fire_up} with - $\\{best_page_break}=\\{null}$ in one case, - since the badness was too bad. @1005 -M50. Perform the operation \\{delete_token_ref}(\\{top_mark}) only when - $\\{top_mark}\ne0$. @1012 -F51. Make \\{scan_toks} omit the initial |{| of an |\output| routine. @473 -I52. Insert a comma to make memory usage statistics look better. @639 -# About seven good hours of debugging today. -# Tomorrow will be first-output day (I hope). -* 14 Mar 1978 -# (Came in evening after sleeping most of day, to get computer at better time.) -# (Some day we will have personal computers and will live more normally.) -# 8:30pm, began to enter corrections to yesterday's problems. -I53. Issue an error message for non-character in filename or in font name. @771 -I54. Display `|...|' for omitted stuff in \\{show_context} routine. @643 -L55. Watch out for the |SAIL| syntax `$\alpha+\beta\mathbin{\rm lsh}\gamma$'; - it doesn't shift $\alpha+\beta$ left (only $\beta$). @464 -# That error was very hard to track down; it created a spurious link field - and sent $\\{hash}[0]=\null$|\beta| to the scanner! -# I could have found this bug an hour sooner if I had looked at the correct - stack entries for \\{name} and \\{token_type}. -D56. Show the correct page number when tracing pages before output is shipped. @638 -F57. Remember to nullify a box after using it. @1079 -I58. Issue an error message if\/ |\box255| isn't consumed by the output routine. @1015 -# I'm having trouble with the |BAIL| debugger; - it makes an illegal memory reference and dies, - when single-stepping past the entry to recursive procedures - \\{hlist_out} and \\{vlist_out}. So I have to reload and be careful - to go thru these procedures at high speed. -P59. Fix bug in comment (memory parameter description said $\ge$ not $\le$). @11 -B60. Fix typo in definition of rule output (said $x,y$ not $\\{x0},\\{y0}$). - [This part of the code went away when |DVI| files were introduced.] -B61. Correct the embarrassing bug in shellsort, where I said `$\le\\{str}[k]$' - not `$\le t$'. - [The first \TeX\ had to sort all output by vertical position on page.] -M62. Make \\{start_input} set up \\{job_name} in the form needed by \\{shipout}; - it uses obsolete conventions. @532,537 -L63. Insert |(| and |)| into the |SAIL| macro definition of \\{new_string}. - [This macro was for pre-|DVI| output.] -M64. Unscramble the parameters of \\{out_rule}: - The declaration was $(\\{x0},\\{y0},\\{x1},\\{y1})$ - while the call was $(\\{x0},\\{x1},\\{y0},\\{y1})$. -# 4:30am, \TeX's first page is successfully output! -# (It was `|\titlepage\setcpage1\corners\eject\end|'.) -* 15 Mar 1978 -# 10:30pm. Today I'm instrumenting the line-breaking routine and putting it - through a bunch of tests. -# (The inserted instrumentation had bugs that won't be mentioned here.) -C65. Don't abort the job when \\{eq_destroy} redefines a - \TeX\ control sequence. @275 -# The first word of a paragraph won't be hyphenated \dots\ so be it! -T66. Fix the typo in \\{line_break} that spoils the test for - `letters in the same font'. @896 -# The effect of that typo was to suppress all hyphenation attempts. -B67\>25. Replace the space at paragraph end by fillglue, not by zero. @816 -L68. Pack the hyphen character properly into its node. @582 -T69. Fix a typo (`{\tentex\char'30}' for `|+|') - in the computation of \\{break_width}. @838 -M70. Change the |\end| maneuver; the present code doesn't end the job, - since I forgot that \\{back_input} uses \\{cur_tok}. @1054 -A71. Add a parameter to \\{try_break}, since the width is different at - a discretionary hyphen. [This problem will be solved differently in \TeX82, - when discretionaries become much more general.] @840 -F72. Bypass kern nodes in pre-hyphenation. @896 -F73. Supply code for the forgotten case `$<$ |"a"|' in pre-hyphenation. - [This case was later generalized to a test of \\{lc_code}.] @897 -B74. Change $\\{mem}[q]$ to $\\{prev_break}(q)$ in the - reverse-linking loop. @878 -# (Such blunders. Am I getting feeble-minded?) -A75. Introduce special logic for \\{eject_penalty}; I was wrong - to think that forced ejection was exactly like an - infinitely negative penalty. @851 -A76. Use $(1+b)^2-p^2$ when computing demerits with $p<0$. @859 -# 6:30am. The line-breaking algorithm appears to be working fine - and efficiently. - On small measures (about 20 characters per line), it gives overfull boxes - instead of spaced out ones. Surprising but satisfactory. -* 16 Mar 1978 -# 9pm. The plan for tonight is to test page breaking and more paragraphing. -G77. Insert `|\topskip|' glue at beginning of page. @1001 -I78. Add `|\pausing|' feature. @363 -M79. Fix discrepancy: In \\{make_accent} I called \\{vpackage} - with a pointer to the first list item, but \\{vpackage} itself assumes - that the parameter is a pointer to that pointer. [The - \\{vpackage} of \TeX82 will be different.] @668 -# I checked for other lapses like that. Result: 14 calls OK, 12 NG. -M80. Create a new temporary list head location, \\{hold_head}, since there's - a case where \\{vpackage} is improperly called with - parameter \\{temp_head}. [At this time \\{vpackage} uses \\{temp_head} - to make a list of all insertions found.] @1014 -# 11:30pm. The machine is tied up again. -F81. Write code to handle charnodes in vlists; I forgot that I'd decided - to allow them. [Later I prohibited them again!] @669 -F82. Combine the page lists before pruning off glue - in \\{fire_up}; otherwise the pruning doesn't go far enough. @1017 -B83\>25. Fix typo where line-breaking starts: `\\{fill_glue}' should be - `\\{new_glue}(\\{fill_glue})'. @816 -I84. Add |/q| to |xspool| command (cosmetic change). [This changes a system - command that causes \TeX\ output to be printed on the Xerox Graphics - Printer (XGP), the progenitor of future laser printers; - the |/q| option says that the queue of printing requests should be - displayed on the user's terminal.] @642 -E85. Don't write a form feed after the last page of output. @642 -# To fix this, I reorganized \\{ship_out}, and it became simpler. -T86. Correct a typo (`{\tentex\char'30}' for `|+|') in the \\{vlist_node} case - within \\{hlist_out}. [The output routines were quite different - at this time, because output went directly to the XGP.] @622 -I87. Change the message `|completed page|' to `|Completed for page|'. @638 -B88\>48. Fix yet another typo in the computation of \\{page_total}: My original - code said $\\{stretch}(p)$ instead of $\\{stretch}(q)$ (terrible). @1004 -P89. Document the dirty trick about \\{bot_mark}'s reference count. - [That trick is, fortunately, no longer useful.] @1016 -A90. Rethink the algorithm for contributing an insertion: The original code - tests for a page break after incrementing the totals but - before the \\{contrib_list} is updated. [\TeX78 handles insertions - in a hardwired manner that will be greatly generalized in \TeX82.] -F91. Fix \\{get_node} again: - After the variable memory overflows, control falls through to \\{found} - instead of going to the \\{overflow} call. @125 -# I spent several hours tracking down that data structure bug! -B92. Change \\{new_line} to \\{next_line} in yet another print command (see \#7). -A93\>75. Amend the line-breaking algorithm: - |\break| in paragraph doesn't work with really bad breaks. @851 -# A problem to be diagnosed tomorrow: Each time I run the test program, - the amount of memory in use grows by 13 cells not returned. -# Seven hours tonight. -* 17 Mar 1978 -G94. Introduce \\{dead_cycles} to keep |\end| active until \\{ship_out} - occurs. @1054 -E95. Don't call \\{line_break} with an empty list. @1096 -S96. Take proper account of the (infinite) fillglue when computing - the width of a paragraph line preceding a display. @1146 -M97. Add a new parameter to \\{hpack} so that \\{line_break} won't be called - at the wrong time. - [This is for the soon-to-be-obsolete feature described in \#40.] -L98. Give a warning message if there's an |\hfill| in the middle of a paragraph; - fillglue upsets the line breaker, - because floating-point calculations don't have sufficient accuracy. @868 -# I spent an hour looking for another bug in \TeX, but the following one was in \MF: - The \\{xgp_height} data in fonts had been supplied wrong. -# It took two hours to recompile 32 fonts with proto-\MF. -R99. Make \\{show_node_list} and \\{show_token_list} - more robust in the presence of software bugs. @182 -D100\>97. Do not remove nodes with \\{eject_penalty}, - when the new parameter to \\{hpack} is \\{true}. -E101\>97. Put a fast exit into \\{hpack}; e.g., at glue nodes, test `{\bf if} - \\{paragraphing} $\land$ $\langle$current width is large$\rangle$'. -# 2am. I have to go to bed ``early'' tonight. -* 18 Mar 1978 -# 3:30pm. (Saturday) -I102. Add a parameter to \\{check_mem} (to suppress display unless needed). @167 -G103. Introduce a user-settable parameter |\maxdepth|, and - pass it as a parameter to \\{vpackage}. @668 -# I realized the need for |\maxdepth| while fixing insertions (see \#90). -G104. Introduce a user-settable parameter for \\{line_break}: The constant - 2.0 in my original algorithm becomes |\jpar| - [later |\tolerance|], to be set like |\tracing|. @828 -D105. Reclaim the \\{eject_penalty} nodes removed during line-breaking. @879 -# (Those were the 13 extra nodes reported on Thursday.) -# The \\{init_align} procedure worked right the first time! -# Also \\{init_row}, \\{init_col}. But then\thinspace\dots -S106. Rethink the command codes: \\{endv} in a token list has too high a - code for the assumptions of \\{get_next}. @207 -A107. Add a \\{prev_cmd} variable for processing delimited macro parameters; - the original algorithm loses track of braces. - [The rules will change slightly in \TeX82, and - \\{rbrace_ptr} will take on a similar function.] @400 -S108. Make the \\{get_next} routine intercept |&| and |\cr| tokens. @342 -# I'd thought I could just put |&| and |\cr| into - \\{big_switch} [i.e., in the stomach of \TeX, not the eyes]; - that was a great big mistake. -R109. Make more error checks on \\{endv}; e.g., it must not occur in - a macro definition or call. @780 -S110\>108. No, rethink alignments again; the new program still fails! @768 -# For the first time I can glimpse the - hairiness of alignment in general (e.g., `|\halign{\u#\v&...|' - when |\u| and |\v| are defined to include |&|'s and possible - alignments themselves). -# I think there's a ``simple'' solution, by considering only whether - an alignment is currently active [in \S342]. -# 11:30pm. Went to bed. -* 19 Mar 1978 -# Woke up with ``better'' idea on how to handle |&| and |\cr|. -# (Namely, to consider a special kind of\/ |\def| whose parameters don't interrupt - on |&|'s and |\cr|'s.) -# But replaced this by a much better idea (to introduce \\{align_state}). -# 11pm. Began to use computer. Performed major surgery - (inserting \\{align_state} and updating the associated routines - and documentation). -D111. Pop the alignment stacks in \\{fin_align}. @800 -T112\>110. Fix a (newly inserted) typo in \\{show_context}. @314 -D113\>110. Set \\{align_state} false when a live |&| or |\cr| is found. - [Originally \\{align_state} was of type \\{boolean}.] @789 -I114. Insert |\cr| when `|}|' occurs prematurely in an alignment. @1132 -M115. Remember to record \\{glue_stretch} when packaging an unset node. @796 -# I had a mistake in |acphdr| definition of\/ |\quoteformat|; also extra spaces. -# My first test programs, used before today, were contrived to test macro - expansion, line-breaking, and page layout. -# Next I'm using a test program based on Volume 2. -C116. Make carriage-return, space, and tab equivalent for macro matching. @348 -F117. Omit the reference count node when displaying a mark. @176 -B118. Correct a silly slip: I wrote `\\{type_displacement}' instead of - `\\{value_displacement}' when packing data in a penalty node. @158 -M119. Don't go to \\{build_page} after seeing |\noindent|; \TeX\ isn't - ready for that. - [In the original program, this was an instance of a bad {\bf goto}.] @1091 -# I had undesired spaces coming thru the scanner in my macro definitions - of\/ |\tenpoint| [see {\sl The \TeX book}, page 414]. -# 4am. \TeX\ now knows enough to typeset page 1 of Volume 2! -# Also it did its first ``math formula'' (namely `|$X$|') without crucial error. -# (Except that the italic correction was missing for some reason.) -D120. Remember to decrement \\{cur_level} in \\{fin_align}. [The routines will - eventually become more general and use \\{unsave} here.] @800 -D121. Remember to increment \\{cur_level} in error corrections by - \\{handle_right_brace}. [A better procedure will be adopted later.] @1069 -T122. Fix a typo: (`|{|' instead of `|}|') in error message for $\\{mmode}+ - \\{math_shift}$. @1065 -R123\>99. Make \\{show_noad_list} more robust and more like the new - \\{show_node_list}. [The routines will be combined in \TeX82.] @690 -L124. Fix a typo in \\{char_box}: should say \\{font_info_real}. - [In \TeX78 a single array - is used for both \\{real} and \\{integer}; in \TeX82 things will be - \\{scaled}.] @554 -B125. Fix typos in the definitions of \\{default_rule_thickness} and - \\{big_op_spacing}; they shouldn't start at \\{mathex}(7). @701 -B126. Reverse the \\{before} and \\{after} conventions in math nodes. @1196 -# I had them backwards; this turned - hyphenation on just before math, and off just after it! -# Seven and a half hours debugging today. - Got through the test program a little more. - But \TeX\ blew up on `|$Y+1$|'; tomorrow I hope to find out why. -* 20 Mar 1978 -# 8pm. I decided to work next on a super-hairy formula. -C127. Change `|\ascii|' to `|\cc|' (character code). [This name will change again - later, to `|\char|'.] @265 -E128. Don't bother to store a penalty node at the beginning of |$$| when - the paragraph-so-far fits on a single line, since such a penalty - has already been stored. [These conventions will change later, and - the |\predisplaypenalty| will always be stored.] @1203 -S129. Avoid reference to \\{tail} in \\{build_page}, - if $\\{nest_ptr}>0$. @995 -B130. Correct a silly - slip in \\{math_comp} (the exact opposite of what I did in \#118). @1158 -B131. Rectify my mental lapse in \\{make_fraction}; I said \\{nucleus} instead of - \\{thickness}. @743 -F132. Mask off the math class when scanning delimiters. @1160 -C133. Allow an optional space after |\def{...}|. [This decision - will be retracted later.] @473 -# My test example is so complicated it causes the semantic stacks to overflow! -L134. Don't test for no pages output by looking at the channel status. @642 -T135. Fix typo in definition of\/ |\mathop| (\\{open_noad} not \\{op_noad}). @1156 -A136. Rewrite \\{fin_mlist}, because `|\left(...\above...\right)|' doesn't - parse correctly; the |\left| goes into the numerator, - the |\right| into the denominator. @1184 -B137. Correct the use of \\{depth_threshold} in \\{print_subsidiary_data}: - Simple fields get shown while others look empty. @692 -I138\>78. Return the carriage before showing the first line of a new file - when pausing. @538 -M139. Fix bug: The call \\{show_noad_list}(\\{mem}[|..|]) should be - \\{show_noad_list}(|..|), in the \\{incompleat_noad} case - of \\{show_activities}. @219 -# 3am. The whole messy formula has been parsed correctly into a tree. -# The easy part is done, now comes the harder part. -F140. Don't shift single characters down in \\{make_op}. @749 -D141. Make \\{clean_box} return a box (as its name implies), not an hlist. @720 -# Font info still isn't quite right, it has the wrong value of \\{quad}. -A142. Retain the italic correction when doing \\{rebox}; - can make $\\{glue_set}\ne0$ a flag for this. [A better - solution will be adopted later.] @715 -B143. Fix the bug that makes \\{rebox} bomb out: $\\{value}(p)$ should be - $\\{value}(\\{mem}[p])$. @715 -# 6am; ten hours today. \TeX\ didn't do |$\pi\over2$| correctly, but was close. -# I found that the \\{rebox} problem (\#142) went away when I fixed the - \\{clean_box} problem (\#141); but I - will leave the extra stuff about $\\{glue_set} \ne 0$ - in the program anyway, just for weird cases. -E144. Omit extra levels of boxing when possible in \\{clean_box}. @721 -# (To do this, I need to face the \\{rebox} problem anyway.) -* 21 Mar 1978 -# 10pm. The computer is rather heavily loaded tonight. -F145. Don't forget \\{thickness} when making a square-root sign (see \#131). - [The rule thickness will later be derived from the character height.] @737 -L146. Define $p$ local to the \\{make_fraction} routine. @743 -# Unwittingly using the global $p$ was a disaster. -I147. Don't show the amount of \\{glue_set} when it's zero. @186 -D148\>142. Make \\{glue_set} nonzero in the result of \\{var_delimiter}. @706 -F149. Fix bug: The \\{math_glue} function didn't return any result. @716 -T150. Fix typo in \\{char_box} ($c$ not $w$); this caused a subscripted~$P$ to come - out the same width as an unsubscripted~$P$. [Later changes in the rules - will move this computation to \S755.] @709 -P151\>144. Revise \\{clean_box} to do operations that are needed - often because of the \\{rebox} change. @720 -D152. Use the new \\{clean_box} to avoid a bug in |\sqrt{\raise...}|. @737 -Q153. Change the definition of\/ |\not| so that it's a relation - (which will butt against the following relation). [All math - symbols and Greek letters are defined in |INITEX| at this - time, not in a changeable format definition.] -I154. Give error message `{\tt Large delimiter must be - in mathex font}', instead of calling \\{confusion}, - since the error can occur. - [This particular error is impossible in \TeX82.] @706 -F155. Change the use of $p$ in \\{var_delimiter}; it isn't always set when I say - {\bf goto} \\{found}. @706 -# Another font problem now surfaced: The mathex meta-font didn't compute \TeX\ info - in a machine-independent way. - (It took two hours to correct this.) -D156. Don't forget to set $\\{type}(b)$ in all relevant cases of - \\{var_delimiter}. @708 -B157. Use the correct sign convention for \\{shift_amount} in \\{hpackage}. @653 -F158. Always kern by \\{delta} when there's no superscript. @755 -M159. Declare \\{space_table} to be $[0\,.\,.\,6,0\,.\,.\,6]$ - not $[0\,.\,.\,7,0\,.\,.\,7]$; otherwise its entries are - pre\-loaded into the wrong positions. [The \\{space_table} in \TeX78 is - $7\times7$; it will become $8\times8$ in \TeX82, - represented as a string called \\{math_spacing}.] @764 -C160. Use a negative value, not zero, to represent a null delimiter. - [Actually zero will come back again later.] @685 -C161\>127. Change |\cc| to |\char|. @265 -L162. Don't use tricky subtraction on packed data when changing $q$ to - an \\{ord_noad} in \\{mlist_to_hlist}; subtraction isn't always safe. @729 -B163. Fix two typos in the \\{space_table} (|*| for |0|). @764 -F164. Initialize \\{cur_size} everywhere (I forgot it in two places). @703 -A165. Reset \\{op_noad} before resetting \\{bin_noad}. @728 -F166. Treat $\\{display_style}+\\{cramped}$ the same as \\{display_style} - inside \\{make_op}. @749 -B167. Shift the character correctly in the non-|\displaystyle| case of - \\{make_op}. @749 -# Still another font problem: The italic corrections are wrong because - the corresponding array was declared \\{real} in proto-\MF\ (and - italic corrections were used in nonstandard way in |mathex|). -B168. Use \\{depth} instead of \\{height} in \\{var_delimiter}. - [Later, both were used.] @714 -Q169. Skew the accents according to the font \\{slant}. [Soon retracted.] @741 -# At this point I think nearly all the math routines have been exercised. -# Tomorrow they should work! -# Eight hours debugging today. -* 22 Mar 1978 -# (Wednesday, but actually Thursday: - I began at midnight because I was proofreading a paper.) -# I checked out the font access tables, slowly (i.e., all the |\mathcode| - and special-character name entries were catalogued). -Q170\>169. Do {\bf not\/} consider slants after all in the math accent - routine, since slanted math letters are put differently into fonts. @741 -B171. Don't use $q$ for two different things simultaneously - in \\{make_math_accent}. @738 -F172. Fix bug in \\{compact_list} (I forgot to advance the loop variable). - [This procedure became unnecessary in \TeX82.] -M173. Avoid conflict between \\{var_delimiter} and \\{mlist_to_hlist}, which - want to use \\{temp_head} simultaneously. @713 -T174. Fix bad typo in \\{overbar} routine ($b$ for $p$). @705 -# Finally \TeX\ got to \\{after_math} after dealing with that - hairy formula\thinspace\dots -T175. Fix another bad typo: $p$ for $b$ this time. @1199 -L176. Insert more parentheses (twice) because of `|lsh|' precedence - in |SAIL|. @1199 -M177\>36. Use the new hanging-indentation conventions when formatting displayed - equations. @1199 -Q178. Recompute penalties so that break is allowed after \\{punct_noad}s. @761 -F179. Center the large delimiters vertically. @749 -Q180. Round all rule sizes (up) before drawing them. @589 -Q181. Provide more space over $x$ in $\sqrt x$, and more space atop vincula. - @705,737 -Q182. Make large delimiters large enough to cover formula height - (important for subscripts, superscripts). @762 -I183. Insert |/ntn=33| on XGP prompt message so that complex math - won't blow the device driver. [See \#84.] -P184\>161. Update the comment about the meaning of\/ |\char|, since it - can be used in math mode. @208 -# Six hours today. -* 23 Mar 1978 -# 11pm, Maundy Thursday. -C185\>104. Make |\tracing| and |\jpar| follow block structure. @283 -# It took me two hours to enter yesterday's corrections, - because the changes were so numerous. -M186. Fix bad call on \\{begin_token_list} when marks are to be scanned. @396 -# Now the formula looks like it should, modulo problems in fonts. -Q187. Prevent an exponent from going below baseline + xheight/4. @758 -B188. Change \\{quad} to \\{math_quad} when finishing a display - (several places). @1199 -A189. Don't use \\{append_to_vlist} when putting an |\eqno| box on a separate - line, because the page shouldn't break at glue there. - [Later, the \\{append} will be used but preceded by an - infinite penalty.] @1205 -S190. Increase the input \\{stack_size}; \TeX\ may need to back up a lot. @11 -A191. Don't assume that $p$ always points to a glue node when - a page is broken. @1017 -A192. Use \\{epsilon} in \\{scan_spec} (I had used a different - small constant). [This was a kludge to avoid the extra - parameter later called \\{exactly} or \\{additional}.] @645 -R193. Introduce a new procedure \\{scan_positive_length}, to prevent - negative or zero lengths in \\{scan_rule_spec}. - [This restrictive rule will be ``overruled'' later.] @463 -B194. Fix ridiculous bug in the leaders routine of \\{vlist_out}: - I had the initialization {\sl inside\/} the loop! @635 -L195. Eliminate confusion between the two temp variables named $h$; - one is \\{real} and the other is \\{integer}. @629 -F196. Include forgotten case (\\{leader_node}) in \\{hlist_out}. - [Type \\{leader_node} will be absorbed - into \\{glue_node} in \TeX82.] @622 -F197. Don't forget to compute \\{x0} in variable horizontal rules. @624 -# Seven and a half hours today. -# \TeX\ seems to be ready to tackle my test file based on Volume 2. -S198. Calculate \\{y00} in horizontal rules as an integer number of pixels - from the baseline, so that the baseline doesn't jump. @589 -* 25 Mar 1978 -# 2am Saturday. (Might as well drop Friday.) -D199\>185. Make \\{def_code} consistent with the new |\tracing| conventions. - [Many tracing options are packed into a single - parameter called |\tracing|.] @1233 -R200\>185. Don't allow users to change nonexistent things like |\catcode1000|. @1232 -F201\>110. Reset \\{align_state} at beginning of \\{init_align}. @774 -F202. Don't forget \\{scan_left_brace} after |\noalign|. @785 -F203\>110. Set $\\{cur_cs}\gets 0$ in \\{get_next}, after |\cr| - causes a switch to the $\langle v_j\rangle$ template. @342 -# Ouch, that was a big bad bug, which took me three hours to find - (since I thought \TeX's low-level scanning mechanism was working). -# Note to myself: I\/ {\bf knew\/} it would be cleaner to define \\{get_next} - so that it sets \\{cur_cs} to zero every time it begins [i.e., - in \S341, where this change will in fact be made in \TeX82]. - But I had avoided this on grounds of efficiency in the inner loop. - Well, now I have earned this tiny bit of efficiency. -D204. Prohibit the first word of an unavailable node from becoming negative. - [The storage allocator of \TeX78 uses - a negative value to signify a node that is available, just as - `$\\{link}=\\{max_halfword}$' will signal availability in \TeX82.] @124 -# That was another bad one, it's not my night. -# At least I'm developing more subtle diagnostic techniques. -M205. Remember to un-negate the top \\{save_stack} entry - when \\{handle_right_brace} finishes an \\{insert_group}. - [This routine was completely revised in \TeX82.] @1100 -F206\>185. Initialize |\jpar| [i.e., |\tolerance|]. @240 -B207. Correct the display of insertion nodes by \\{show_node_list}. @188 -R208. Prevent \\{show_token_list} from generating really long strings - when in a loop. @292 -D209. Increase the reference count of \\{bot_mark} when - \\{vpackage} finds it. [This was later the job of \\{fire_up}.] @1016 -M210. Remember that the tokenlist for a mark ends with a |}|. @1101 -D211. Don't let \\{vpackage} lose the top insert. (It fails when - the very first item is a |\topinsert|.) @1014 -A212. And when that stupid code is corrected, make it handle - insertions first-in-first-out. @1018 -# Seven hours today. -* 26 Mar 1978 -# Easter Sunday, will work till sunrise. -I213. Add an `|i|' feature to the \\{error} recovery routine. @87 -I214. Include a prompt. @87 -C215. Ignore space after |\noalign{...}|. @1133 -# Otherwise, things are going well tonight; - I'm finding more bugs in my test program than in \TeX. -# The `|i|' feature is proving to be very helpful. -# I increased the size of \\{mem} - (now $\\{lo_mem_max}=3500$, $\\{mem_max}=10000$). -# In fact I just needed to increase it again - (now $\\{lo_mem_max}=4500$, $\\{mem_max}=11000$). -R216. Make |INITEX| output \\{mem_top} for consistency checking. @1307 -A217. Calculate the size of delimiters by considering the enclosed formula's - distance from the axis, not from the baseline. @762 -# I'm having trouble with a |SAIL| compiler bug; I must rearrange the program, - more or less at random, until it - compiles correctly. I hope the bug isn't more severe than it appears. -D218\>210. Don't put a new group on \\{save_stack} if a null mark is expanded. - [\TeX82 will remove the `|}|' from the mark text.] @386 -# I had to redo the typewriter-style font since its width tables were wrong. -# And I increased low-memory size again to 5500, then 6500. -# Finally the entire test program was \TeX ed. Happy Easter! Six hours today. -* 27 Mar 1978 -# Beginning at 2:30am. -A219. Move |\vcenter| processing to the first pass of \\{mlist_to_hlist}; - otherwise the height, depth, subscripts, etc., are way off. @733 -C220. Omit space after closing |$$|. @1200 -# Spacing is wrong in the formula $Y_1+\cdots+Y_k$; I have to rethink the use - of three dots. -G221. Make conditional thin space available to user as |\|{\tentex\char'34}. - [Later will retract this.] @226 -Q222. Introduce |\dispaskip| and |\dispbskip| [later called - |\abovedisplayshortskip| and |\belowdisplayshortskip|]. @226 -# Reminder: I need to test line-breaking with embedded math formulas. -I223. Make sure that $\\{interaction}\ne\\{error_stop_mode}$ - in the `|Whoa|' error [\\{fatal_error}]. @93 -B224. Fix a big mistake in the \\{style_node} routine (which points to a glue spec, - not to glue itself); somehow this didn't cause trouble yesterday. - [In \TeX78, style nodes double as placeholders for math glue - like thin spaces.] @732 -C225. Make |\fntfam| obey group structure. [\TeX78's |\fntfam| operation - is a combination of \TeX82's - |\textfont|, |\scriptfont|, and |\scriptscriptfont|.] @1234 -# At this point the test routine for Volume 2 works perfectly. -# But I will change the page width in order to check harder cases. -Q226\>178. Disable automatic line breaks after punctuation in math - (e.g., consider $f(x,y)$). @761 -S227. Represent italic corrections as boxes, not glue, so that they won't be broken. - [The |\kern| command doesn't exist yet.] @1113 -# Eight hours today. -B228. Fix a bug that just clobbered the memory: Call \\{free_avail}, not - \\{free_node}, in the \\{ins_node} case of \\{vpackage}. - [This logic will change completely in \TeX82.] @1019 -* 29 Mar 1978 -# (Wednesday) Again beginning at 2:30am. -Q229. Put still more space above and below fraction lines in displayed - formulas. @746 -G230\>189. Install an infinite penalty feature, which positively suppresses breaks; - use it in displayed formulas whose |\eqno| doesn't fit. @1205 -F231. Call \\{build_page} after finishing a display; and don't - go to the |\noindent| routine because of the next remark. @1200 -S232. Put |\parskip| glue just before a paragraph, not just after - (since it interferes with a penalty after). @1091 -# Although the test program gives correct output, it generates 46 locations - of variable-size memory and 280 of one-word memory that are not freed. -F233. Recycle the ulists and vlists in \\{fin_align}. @801 -M234\>25. Fix bug when deleting space at end of paragraph: - \\{delete_glue_ref}(\\{cur_node}) not - \\{delete_glue_ref}(\\{value}(\\{cur_node})). @816 -# There's also a more mysterious type of uncollected garbage, - a \\{fraction_noad} corresponding to - |$p\choose$|, an \\{incompleat_noad} not completed. -# Couldn't find that one, so I recompiled with \#233 and \#234 corrected. -# Now it gains just 10 locations of variable-size memory and 7 of the other kind. -I235. Extend \\{search_mem} to search \\{eqtb} also. @255 -D236\>143. Fix bug in \\{rebox} when $\\{list_ptr}(b)=0$. @715 -# The seven one-word nodes were generated by this bug; - \\{rebox}\kern-1pt\ put them onto a linked list starting with - $\\{mem}[0]$, growing at the far end! -D237. Remember to complete each \\{incompleat_noad}. @1184 -# This solved the other mystery. I had never noticed that my test output - was actually wrong: |$p\choose k$| came out as `$k$'. -# After these corrections, the test routine worked\thinspace\dots\ I feel - that \TeX\ is now pretty well debugged - (except perhaps for error recovery)---it's time to celebrate! -* 1 Apr 1978 -I238. Don't quit after file lookup fails. @530 -* 2 Apr 1978 -P239. Add \\{\TeX_font_area}, so that it's easier to change the - default library area associated with a device. @514 -* 3 Apr 1978 -L240. Insert parentheses again, to cope with the precedence of\/ |lsh| - when packing data. (See \#55 and \#176.) @1114 -# I had never tried $\\{hmode}+\\{discretionary}$ before! -M241. Remember that \\{back_error} requires \\{cur_tok} to be set. - (Problem can arise during error recovery on parameter |#|$n$ - with $n$ out of range.) @476 -* 4 Apr 1978 -I242. Add a deletion feature to the \\{error} routine. @88 -* 5 Apr 1978 -Q243. Reset \\{space_factor} after |\/| [this was later rescinded] - and after math in text. @1196 -* 10 Apr 1978 -G244\>104. Replace |\jpar| and |\tracing| by a new primitive |\chpar| for parameters. - It allows a user to change those quantities as well as the penalties for - hyphens, relations, binary ops, widows. @209 -* 14 May 1978 -# Beginning to typeset a real book (Volume 2, second edition), not just a test. -Q245. Make math in text end with spacing as if it were - followed by punctuation. [This rule will soon be rescinded.] @760 -F246. Insert |\times| into the hash table; I left it out by mistake. - [It will eventually move into |plain.tex|.] -C247. Change the names of Scandinavian accents from |\o|, |\oslash|, - |\Oslash| to |\a|, |\o|, |\O|. [This will also move to |plain|.] -* 17 May 1978 -B248. Fix a silly bug that hasn't been tweaked until today: - `|\halign to size|' [obsolete in \TeX82] used \\{vsize} - instead of \\{hsize}. @645 -* 19 May 1978 -G249. Add a |\topbaseline| feature [later called |\topskip|]. @1001 -Q250\>245. Subtract the math spacing change of May 14. @760 -A251. Skip past blanks in the \\{scan_math} procedure. [This blank-skipping - will eventually go into \\{scan_left_brace}.] @403 -I252. Introduce a \\{missing_brace} routine [later generalized] to improve - error recovery in $\\{mmode}+\\{math_shift}$, when the top - of \\{save_stack} isn't a \\{math_shift_group}. @1065 -Q253. Adjust the math spacing between closing parentheses and - Ord, Op, Open, Punct. @764 -Q254. Make the underline go further under. @735 -S255\>96. Compute the proper natural width when a displayed equation follows - a paragraph whose fillglue has been deleted by \\{line_break}. @1146 -* 20 May 1978 -A256. Fix the spurious value of \\{prev_depth} inside alignments. @775 -S257. Consider (and defeat) the following scenario: - The u and v lists are built in \\{init_align} using \\{temp_head}; - then while scanning `|\tabskip 2pt\rt{...}|' the macro |\rt| is expanded, - clobbering \\{temp_head}. @779 -# That bug was more subtle than usual. -Q258. Add the parameter \\{num3}, so that the positioning of\/ |\atop| - can be different from that for fractions. @700 -Q259. Add new parameters \\{delim1} and \\{delim2}, so that - |\comb| can use fixed size delimiters, not computed as with |\left|. @748 -* 22 May 1978 -C260\>221. Change |\|{\tentex\char'34} to |\|{\tentex\char'35} and introduce - |\|{\tentex\char'34} as the negative of\/ |\|{\tentex\char'35}. - [Later obsolete.] @226 -L261. Fix the display of negative penalty nodes; \\{show_node_list} is confused - when a negative value has been packed into the middle of a word. @194 -# Memory overflow just occurred with $\\{lo_mem_max}=7500$ and $\\{mem_max}=16384$. - So I have to go to 15-bit pointers. (A problem on 32-bit machines?) -* 23 May 1978 -Q262. Add a new parameter \\{big_op_spacing5}, for - extra space above and below limits of big displayed operators. @751 -F263. Initialize \\{incompleat_noad} in |$$\halign{...}$$|. @775 -# That was another heretofore-untested operation. How much of the code - has not yet been exercised? -F264\>238. Close the file when doing lookup-failure recovery. @27 -I265. Improve the error recovery for `|Extra &|'. @792 -R266. The top piece must be calculated mod 128 in \\{var_delimiter}, - to guarantee a valid subscript range. [Obsolete in \TeX82.] @546 -B267\>252. Fix a blunder in new \\{missing_brace} code. @1065 -B268\>262. Fix a blunder in new code for limits on display operators. @751 -* 26 May 1978 -Q269. Don't insert a new penalty after an explicit penalty in math mode. @767 -# The hash table overflowed; I ought to make it much bigger. -R270\>110. Avoid possible bad memory references in alignment - when there is erroneous input after |\cr|. [Instead of - \\{extra_info}, the value of \\{cur_align} in \TeX78 is negated, - because we need only distinguish |\cr| from |&|.] @789 -S271. Make the dimension parameters like |\hsize| all global, so that they can - be set in the |\output| routine. @279 -# This led to major simplifications, also to major surgery. -# [But it was a kludgy decision, overruled in \TeX82.] -D272\>94. Don't forget to set the type of the new null box in the |\end| routine. @1054 -* 27 May 1978 -# The data overflowed memory again, both low and high, doing Section 3.3.2. -R273\>184. Mask off extra bits of\/ |\char| in math mode, - to avoid bad memory references. @1151 -B274. Zero out the negative |\medmuskip| in script styles. @732 -* 29 May 1978 -S275. Be prepared to handle an undefined control sequence during \\{get_x_token}. - (Can fix this by brute force, using \\{get_token} instead of \\{get_next}.) - @380 -D276. Correct the superscript shift when a single character is raised. @758 -R277\>184. Mask off all but 7 bits in |\char| routine, - to avoid space-factor index out of range. @435 -# More memory capacity overflows. -E278\>22. Fix \TeX's overflow stop so that I don't have to wait for loading of the - |BAIL| debug routines. [System dependent.] @93 -F279. Remember to adjust the page number - when a file page ends in mid-macro. [System dependent.] @306 -* 5 Jun 1978 -R280. Make sure that the arguments of positioning commands don't overflow - their field size. @610 -I281. Report the excess amount when giving an overfull box warning. @666,677 -* 7 Jun 1978 -Q282. Use $\ge$ instead of $>$ as termination criterion in \\{var_delimiter}. @714 -R283. Disallow |\eject| in math mode. [In \TeX78, |\eject| is - distinct from |\break|; in horizontal mode it includes - \TeX82's `|\vadjust{\break}|'.] @1102 -Q284. Don't put too much clearance above |\sqrt| in text style. @737 -* 9 Jun 1978 -G285\>110. Make \\{align_state} an integer variable, not \\{boolean}, - so that |\eqalign| can be within another |\eqalign|. @309 -C286. A |\mark| should expand its input. @1101 -* 10 Jun 1978 -E287. Provide for preloading of fonts. @1320 -L288. Close the output file before switching to edit the input file with - the `|e|' option. @84 -E289. Return adjustments found by \\{hpack} to free storage if - they're not used. [Later, \\{hpack} will detach them only - when they're used.] @655 -Q290. Strive for consistency between \\{make_under} and \\{make_over}. - @735 -* 18 Jun 1978 -B291\>236. Fix a serious error in \\{rebox} - (`$b$' instead of `$\\{list_ptr}(b)$'). @715 -# Strange that such a bug would now surface for the first time! -C292. Remove |\deg| from |INITEX|, since macros suffice. -Q293. Add an extra hyphenation penalty for two hyphenated lines in a row. @859 -* 19 Jun 1978 -S294. Introduce the `\\{no_new_control_sequence}' switch. Among other things, - this will prevent an undefined control sequence following \\{scan_math} - from clobbering the save stack. @259 -* 20 Jun 1978 -L295. Change the badness test - `$\\{glue}\le0.0$' to `$\\{glue}\le0.0001$'. [\TeX82 will avoid such - problems by calculating badness without floating point arithmetic.] @99 -R296. Force \\{badness} to be at most $10^{19}$. @108 -I297. Add \\{end_template} for better error recovery in alignments. @375 -E298\>287. Make |INITEX| more like the real \TeX; my simple scheme for - font preloading was no good because it left thousands of `dead' - words in memory. @8 -E299. Economize disk space by using internal arrays in load - modules that aren't being reinitialized. [System dependent.] -E300. Move the declaration of \\{mem} to the semantics module, so that the - object code will be more efficient. [System dependent. The code of - \TeX78 was divided into separately compiled modules for syntax, - semantics, output, extensions, and general organization.] -* 21 Jun 1978 -# Today I'm working on the user manual. -C301. Disallow |\input| except in vertical mode. [I will change this in - \TeX82, treating |\input| as a case of expansion.] @378 -I302. Add error recovery for \\{endv} and \\{par_end} occurring in math mode. - @1047 -G303. Generalize |\ifT| to |\if T|. @506 -* 22 Jun 1978 -F304. Preload the |\bullet| [later done by |plain.tex|]. -D305\>256. Get the correct \\{prev_depth} at the beginning of an alignment. @775 -C306. Change |\eject| so that it ejects only once. @1000 -* 14 Jul 1978 -I307. Look in standard area if a file isn't found in the user's area. @537 -I308. Echo all online inputs in the transcript file. @71 -* 19 Jul 1978 -Q309. Equalize spacing when only one of numerator/denominator is big. @745 -Q310. Prevent subscript from getting too high above baseline. @757 -R311. Avoid infinite loop when stack overflows: \\{push_input} should say - `{\bf if} $\\{input_ptr}\ge\\{stack_size}\;\land\;\\{interaction}= - \\{error_stop_mode}$'. @321 -* 22 Jul 1978 -C312. Make |\quad| meaningful outside math mode. (All fonts must - be generated again!) @558 -I313. Show the nesting level at the end of \\{show_activities}. - [But I decided not to do this in \TeX82.] @218 -C314. Put in |\>| [namely, |\mskip\medmuskip|; - \TeX78 already has |\|{\tentex\char'35}, for conditional |\thinmuskip|, - as well as the negative amounts |\<|,~|\|{\tentex\char'34}]. - Change the name of vector accent from |\>| to |\b|. [Math spacing - operators will become much more general in \TeX82.] @716 -* 25 Jul 1978 -Q315\>94. Give the correct |\hsize| and |\vsize| to the null boxes created - at |\end|. @1054 -A316\>94. And don't ``append'' them. [Later this was changed, so - that it would work better with generalized output routines.] @1054 -I317\>297. Remove the control sequence |\endv|, - since error recovery is now better. @375 -I318. Define another mode of tracing: It says `|OK|' and stops after - |\showlists|. @1298 -Q319\>244. Give better defaults to parameters. [Later done by |plain.tex|.] @209 -I320. Allow more bits in the packed representation of\/ |\showboxdepth|. @238 -I321. Scan past delimiters and/or dimensions when recovering from - ambiguous fractions. @1183 -R322. Reduce accent numbers modulo 128 or 512, depending on the - mode. @1165 -I323. Include a warning, `|(\end occurred on level ...)|'. @1335 -* 28 Jul 1978 -# (I'm writing Chapter 27 of the manual: `Recovery From Errors'.) -I324. Improve the error message in \\{scan_digit}. [This procedure will change - its name to \\{scan_eight_bit_int}, when the number of registers - increases from 10 to~256.] @433 -I325. Don't report overfull boxes if they're less than .1~point - over. @666,677 -I326. Give the user extra chances to define the font, if \\{read_font_info} - is unsuccessful. @560 -I327. Change default recovery for bad parameter number from |#1| to |##|, since - |#1| won't always work and since |##| is probably intended. @479 -I328. Omit the |"Negative?"| message on things like \\{scan_char_num}. @435 -I329. Improve error recovery when a large delimiter isn't in family~3. - [Obsolete.] -I330. Give a more appropriate error message when the input is `|$\right|'. @1192 -# Currently \TeX\ says `|Missing $|'! -I331. Call \\{back_input} before the error message in \\{back_error}, - not afterwards. @327 -* 1 Aug 1978 -I332. Give an appropriate warning when there's no input file and the user - types `|e|'. @84 -L333. Increase the system pushdownlist size so that the manual will compile. - [Procedures \\{hlist_out} and \\{vlist_out} can recurse deeply.] -# Yesterday I distributed 45 preliminary copies of the manual; today I - took out the ``debugging hooks'' and put \TeX\ up as a system program. -* 2 Aug 1978 -# I'm typing Volume 2 again (currently in Section 4.2.2). Culture shock! -G334. Introduce a |\ragged| parameter, to indicate a degree of raggedness. - [Previously, ragged-right setting was performed when the - |\tolerance|/100 was odd! Eventually a better approach, - with |\rightskip| and such things, will be discovered.] @886 -Q335. Omit the `widow penalty' in one-line paragraphs. @890 -* 5 Aug 1978 -G336. Generalize |\pageno| to |\count|\<digit>. @236 -D337\>285. Update \\{align_state} when recovering from `|Missing {|' and - `|Extra }|' errors. @1069,1127 -I338. Show ``runaway'' tokens, making it easier to pinpoint an error. @306 -* 22 Aug 1978 -G339. Add |\predisplaypenalty|. @1203 -I340. Clarify error messages; they should indicate when something has been - inserted, etc. @1064 -* 23 Aug 1978 -I341\>114. Substitute `|Extra }|' for the losing `|Missing \cr|' error message. @1069 -I342\>213. Go past online insertions in \\{show_context}. @311 -Q343. Exact no penalty for breaking one line before a display. @1145 -I344\>338. Check for runaways at end of file. @362 -I345. Give error message when a macro argument begins with |}|. @395 -* 24 Aug 1978 -L346\>213. Remove extra line-feed in \\{show_context} after printing insertions. - [System dependent.] @318 -* 25 Aug 1978 -Q347. Leave no glue at top of page, even after |\eject|. @997 -* 27 Aug 1978 -P348. Adopt Guy Steele's new version of the \TeX\ source files. [He has - recently made a copy and modified it by introducing - compile-time switches for MIT conventions as an alternative to SUAI. - This is the first time that \TeX\ is being ported to another site; - additional switches for PARC, TENEX, TOPS10, and TOPS20 will be - added later, using the Steele style.] -* 1 Sep 1978 -Q349. Don't pass over leader nodes in the \\{try_break} background - computation. [At this time, leaders have not yet been - unified with glue.] @837 -Q350\>82. Prune away all penalties at the top of a page. @997 -* 4 Sep 1978 -I351\>338. Include `|\|' in error message about a runaway argument. @306 -* 8 Sep 1978 -# I just remade all the fonts, with increased ligature field size. -B352\>350. Insert a necessary {\bf goto} statement in the first branch of - the new penalty routine within \\{build_page}. @997 -* 30 Sep 1978 -M353\>338. Make the token list for runaway arguments meaningful outside - of \\{macro_call}. (I just had a runaway argument ending with - `|\lcm|', which turned out to be the - control sequence in hashtable location 0.) @371 -R354. Avoid infinite loop when recovering from |$$| in - restricted horizontal mode. @1138 -L355. Fix two hyphenation bugs related to |-ages|, |-ers|. - [A completely new algorithm for hyphenation will go into \TeX82.] -Q356. Add |-est| to hyphenation routine; - also disable |puz-zled| and |rat-tled|, etc. -* 4 Oct 1978 -G357. Add new primitive |\vtop|. @1087 -Q358. Treat implicit kerns properly after discretionary hyphens have been - inserted. @914 -* 4 Nov 1978 -Q359. Forget the half quad originally required at left and right when - centering displayed equations without equation numbers. @1202 -* 11 Nov 1978 -R360. Don't let the postamble come out empty. [This could occur if no fonts were - selected.] @642 -* 15 Nov 1978 -C361. Allow optional space after digit in \\{scan_int} routine. @444 -* 17 Nov 1978 -R362. Make the \\{check_mem} procedure slightly more robust. @167 -* 20 Nov 1978 -C363. Make the |\par| in a |\def| match the |\par| that comes automatically with - a blank line. (Suggested by Terry Winograd.) @351 -G364. Add new parameter |\mathsurround| for spacing before and after - math in text. @1196 -G365. Extend |\advance| to allow increase by other than unity. [At this - time it applies only to the ten |\count| registers, and it is - called |\advcount|.] @1238 -* 25 Nov 1978 -G366. Add a new primitive: |\unskip|. @1105 -G367. Add new primitives |\uppercase| and |\lowercase|. @1288 -* 28 Nov 1978 -M368\>338. Don't let |\mark| and \\{macro_call} interfere with each other's - \\{scanner_status}. @306 -M369. Omit extra |}| after \\{show_node_list} shows a |\mark|, - since the right brace is already there. (See \#210.) @176 -G370. Add a new primitive suggested by Terry Winograd: |\xdef|. @1218 -* 29 Nov 1978 -S371. Delete a space following |\else{...}| also in the - false case. [\TeX78 uses braces, not |\fi|, for conditionals.] -D372\>320. Make |\tracing| set |\showboxbreadth| as advertised. @198 -F373. Account properly for kerns in width calculations of \\{line_break}. - @866 -Q374\>364. Delete a \\{math_node} at the beginning of a line. @148 -A375\>339. Guarantee that |\predisplaypenalty=10000| will suppress page breaking - before a display. @1005 -* 6 Dec 1978 -L376. Change the file opening statement to allow lines up to 150 characters long. - [System dependent.] -* 16 Jan 1979 -F377\>365. Initialize \\{negative} properly in the |\advance| routine - with a |\count| as argument. @440 -* 20 Jan 1979 -R378. Try to keep complex, buggy preambles of alignments from - crashing the program. @789 -* 17 Feb 1979 -I379\>376. Give more detailed information when warning about a - long line being broken. [System dependent; - the buffer size in \TeX78 is very limited.] -L380. Declare $p$ local to \\{try_break}, for the ``rare'' case code. - [My original program included the following comment: - ``This case can arise only in weird circumstances due to - changing line lengths, and the code may in fact never be executed.'' - Later Michael Plass will discover that variable line lengths require an - entirely different algorithm, using \\{last_special_line}.] - @847 -F381\>334. Don't omit the raggedness correction when the - last line of paragraph has to shrink. [Obsolete in \TeX82.] -* 22 Feb 1979 -F382\>363. Don't forget to return from \\{get_x_token} after finding |\par|. @351 -Q383. Add a new parameter: |\lineskiplimit|. @679 -C384. Change the syntactic sugar: - `|\hbox par|' replaces `|\hjust to ...{overfull}|'. [This vastly improves on - the old idea (see \#40), but there still is no internal vertical mode.] -C385. Introduce new names |\hbox| and |\vbox| for |\hjust| and |\vjust|. @1071 -G386. Add a new condition: |\ifpos|. [It will later be - generalized to |\ifnum| and |\ifdim|.] @513 -G387. Add |vu| and |\varunit|. [\TeX82 will eventually allow arbitrary - internal dimensions as units of measure.] @453 -G388\>312. Add an |em| unit. @455 -C389. Legalize |\hbox spread |\<negative dimension> [since \\{scan_spec} - no longer uses the sign as a flag]. @645 -* 10 Mar 1979 -C390\>370. Make \\{scan_toks} expand |\count| during |\xdef|. [This will - change later when |\the| and |\number| are introduced.] @367 -* 23 Mar 1979 -Q391. Put only 100000\thinspace pt stretch at the end of a paragraph instead of - 10000000000\thinspace pt. - [In \TeX78, ``infinite'' glue is actually finite but large; in the - language of \TeX82 we would say that |\parfillskip|, which is - not yet user-settable, is being changed to be like |\hfil| instead of - like |\hfill|.] @816 -Q392. Treat the last line of a paragraph more consistently with - the other lines (e.g., when |\hfil| appears in mid-paragraph), by - effectively inserting \\{inf_penalty} at the end. @816 -* 31 Mar 1979 -S393. Ensure that penalty nodes aren't wiped out, in weird cases where - breaks occur at penalties that normally disappear. @879 -* 27 Apr 1979 -A394. Correct the page number count when files begin with an empty page. - [System dependent.] -G395. Allow the \\{math_code} table to be changeable via |\chcode|. - [In \TeX82, |\chcode| will split into |\mathcode| and |\catcode|.] @1232 -I396\>332. Don't accept `|e|' after an error message if not - inputting from a file. @84 -* 29 May 1979 -F397. Don't call \\{end_file_reading} if you haven't already invoked - \\{begin_file_reading}; this could happen when trying to - recover from an error in \\{start_input}.@537 -* 7 Jun 1979 -A398\>306. Be sure to eject two pages, - when |\eject| comes just at the time another break is preferable - (e.g., when the page has just become too full). @1005 -* 27 Jun 1979 -I399\>354. Don't say `|You can't do that in math mode|' when the user - says `|$$|' in restricted horizontal mode! @1138 -* 30 Jun 1979 -G400. Add |wd|, |dp|, |ht| dimension units. @455 -I401\>307. Don't try the system area for file names whose area is explicitly - indicated. @537 -* 1 Jul 1979 -G402. Allow letters as (ASCII) numbers [without the |`| marker introduced - later]. @442 -* 2 Jul 1979 -F403. Fix a |\gdef| bug: If the control sequence was never defined before - [this later became the \\{restore_zero} option], - don't remove it at group end. @282 -* 16 Jul 1979 -I404\>320. Update \\{show_noad_list} to be like \\{show_node_list}. - [The two routines, originally separate, will be merged in \TeX82.] @238 -* 18 Jul 1979 -G405. Extend capacity from 32 fonts to 64 fonts if desired. @134 -Q406. Add new \\{extra_space} parameter to all text fonts (requested - by Frances Yao). @558 -F407. Make each \\{node_noad} print properly in \\{show_noad_list}. @183 -Q408. Make |\jpar| allow any break if it is 1000000 or more. - [In \TeX82, a |\tolerance| of 10000 or more allows any break.] @851 -* 23 Jul 1979 -E409. Introduce new primitives |\hfil|, |\vfil|, |\hfilneg|, |\vfilneg|. @1058 -G410. Add |\ifmmode|. @501 -G411. Add |\firstmark|. @1012,1016 -C412. Allow break at leaders (horizontal mode only). @149 -* 25 Jul 1979 -I413\>213. Revise \\{error} so that online insertions work properly - after end-of-file errors. @336 -B414\>411. Change `{\bf if} $\\{first_mark}\ne0$' to - `{\bf if} $\\{first_mark}\ge0$' [because $-1$ - is used to indicate `not yet given a value']. @1012 -* 28 Jul 1979 -C415\>370. Stop |\xdef| from expanding control sequences after |\def|'s. - [This decision will be rescinded later, after several more years of - experience with macro expansion will suggest better ways to cure - the problem.] @366 -I416. Change symbolic printout for control symbols. [System dependent.] @49 -L417\>308. Avoid linefeeds in the transcript file. [System dependent.] -C418\>370. Expand |\topmark|, etc., in |\xdef|. @366 -* 4 Aug 1979 -B419\>413. Fix an error introduced recently: |\par| was suddenly - omitted at end of page. [System dependent.] -* 11 Aug 1979 -P420. Change error messages that use |SAIL| characters not in - standard ASCII. @360 -* 28 Aug 1979 -D421\>411. Move the command `$\\{first_mark}\gets-1$' from \\{vpackage} - to \\{fire_up}. @1012 -S422\>403. Correct a serious |\gdef| bug: - Control sequences don't obey a last-in-first-out - discipline, so \TeX\ loses things from the hash table when deleting a - control sequence. @259 -# To fix this, I either need to restrict \TeX\ (so that - |\gdef| can be used inside a group only for control sequences already - defined on the outer level) or need to change the hash table algorithm. - Although all applications of \TeX\ known to me will agree to the - former restriction, I've chosen the latter alternative, because it gives me - a chance to improve the language: Control sequences - of arbitrary length will now be recognized. -D423. Make sure that \\{unsave} cannot call \\{eq_destroy} - with a value from the upper part of \\{eqtb}. @282 -# I noticed this long-standing bug while fixing \#422. It had very - low probability of causing damage (e.g., it required a certain field - of a floating-point number to have a certain value), but it would have - been devastating on the day it first showed up! -* 29 Aug 1979 -F424. Call \\{eq_destroy} when a control sequence is |\gdef|'ed - after being |\def|'ed. @283 -F425\>418. Treat the first token consistently - when |\topmark| and its cousins are expanded in \\{scan_toks}. @477 -# Now I've checked things pretty carefully and I think \TeX\ is ``fully debugged.'' -* 25 Jan 1980 -I426\>338. Display runaway alignment preambles. @306 -G427. Introduce active characters (one-stroke control sequences). - [I don't yet go - all the way: The meanings of `|x|' and `|\x|' have to be identical.] @344 -* 7 Feb 1980 -F428\>314. Fix a glaring omission: Op space |\>| was - never implemented in math mode! @716 -* 25 Feb 1980 -G429. Add a new dimension `|ex|' (for units of xheight). @455 -* 3 Mar 1980 -C430\>427. Allow the control sequence |\:| to be redefined - [it was the `select font' operator]; - this allows the character |:| to be active. [Obsolete.] -* 23 Mar 1980 -# An extend-\TeX-for-the-eighties party: -G431. Add a new |\copy| feature. @204 -G432. Add a new |\unbox| feature. @1110 -G433. Add a new |\open| feature [later |\openout|]. @1351 -G434. Add a new |\send| feature [later |\write|]. @1352 -G435. Add a new |\leqno| feature, requested by MDS. @1204 -G436. Add a new |\ifdimen| feature [later |\ifdim|]. @513 -C437. Make |\|\<space> in vertical mode begin a paragraph. @1090 -G438. Add a new |\font| feature [replacing the silly previous convention that - a font must be defined when it is first selected]. @1256 -G439. Add new |\parval| and |\codeval| features [later - |\the|\thinspace\<whatever>\thinspace]. @413 -C440\>427. Don't let active characters gobble the following space. @344 -G441\>208. Add a new parameter to govern amount of token list dumped. [Obsolete.] @295 -G442. Add a new |\linebreak| feature [later replaced by |\break|]. @831 -* 25 Mar 1980 -# (Still working on the above, also thought of more.) -G443. Add a new |\mskip| feature. @716 -G444. Add a new |\newname| feature (soon changed to |\let|). @1221 -G445\>430. Allow any control sequence to be redefined. @275 -I446. Send the output to the user's current file area, even when - input comes from elsewhere. @532 -* 27 Mar 1980 -Q447. Compute the xheight for accents in math mode from - family~1, not family~3. [Obsolete.] -* 28 Mar 1980 -Q448. Increase minimum clearance between subscript and superscript. @759 -* 29 Mar 1980 -Q449\>222. When a display follows a display, the second should have the - `shortskip' glue. @1146 -* 4 Apr 1980 -A450\>445. Look at current token meanings when trying to recognize - |\tabskip| in alignment preambles. @782 -* 23 Apr 1980 -I451. Estimate the length of printed output, for the new - priority feature on our XGP device driver. [System dependent.] -C452\>434. Break long |\send| lines - into pieces so that the file can be read in again. [System dependent.] -* 19 May 1980 -Q453\>182. Don't make |\left| and |\right| delimiters too large; they - need to be only 90\% of the enclosed size. [This eventually - became |\delimiterfactor|.] @762 -* 21 May 1980 -G454. Add a new |\pagebreak| feature [later |\vadjust{\break}|]. @655 -* 13 Jun 1980 -# Today I'm beginning to overhaul the line-breaking routine, - and I'll also install miscellaneous goodies. -G455. Allow a radical sign to be in different font positions. @737 -E456. Clear empty tokenlists off input stacks to allow deeper recursions - (suggested by Jim Boyce's macros for chess positions). @325 -G457. Make |\spaceskip| and |\parfillskip| changeable. @1228 -G458. Add a new parameter |\rfudge| (per request of Zippel) [later |\mag|]. @288 -G459. Add a new parameter |\loose| [later |\looseness|]; - now parameters are allowed to take negative values. @875 -E460. Remove the variable \\{just_par}. [Obsolete; it was the \\{real} equivalent - of an \\{integer}]. -* 14 Jun 1980 -Q461. Install new line-breaking routines, including |\parshape|. - (These major changes are introduced as Michael Plass - and I write our article.) @813 -G462. Add a new parameter |\exhyf| [later |\exhyphenpenalty|]. @869 -* 16 Jun 1980 -S463\>444. Change conventions in \\{eqtb} so that glue is distinguishable - from other equivalents. @275 -A464\>444. Don't expand |\b| in |\xdef{\d\b{...}}| after |\let\d=\def|. - [Obsolete.] -D465\>444. Avoid creating dead storage when doing \\{unsave} in certain regions. @275 -* 17 Jun 1980 -C466. Allow negative dimensions in rules. @138 -* 19 Jun 1980 -B467\>463. Make the new test for glue at the outer level of \\{show_eqtb}. @252 -* 27 Jun 1980 -Q468\>453. Don't let |\left| and |\right| become too small for big matrices. - [This eventually became |\delimitershortfall|.] @762 -* 3 Aug 1980 -Q469. Don't move extra-wide, numbered equations flush left unless - they begin with glue. @1202 -* 15 Sep 1980 -M470\>461. Say `$\ge\\{fz}$' instead of `$>\\{fz}$' in the pre-hyphenation - routine; I'd forgotten my definition of \\{fz} [a variable used to test - for a sequence of lowercase letters in the same font]. @897 -R471\>395. Check the range of the index in |\chcode| before saving the old value. - @1232 -* 18 Sep 1980 -D472\>457. Don't forget to increase the reference count to |\parfillskip|, - or it will mysteriously vanish. @816 -* 19 Sep 1980 -C473\>412. Make leaders break like glue in both horizontal and vertical modes. - @149 -Q474\>364. Make |\mathsurround| break properly at left and right end of lines. - @879 -* 13 Oct 1980 -I475\>461. Remove spurious overfull boxes generated when the looseness criterion - fails. [Obsolete.] -A476\>461. Redesign the iteration for looseness; breakpoints were not chosen - optimally. @875 -E477\>461. Avoid storing a lot of breakpoints when they are dominated by - others. @836 -B478\>366. Don't say `\\{cur_node}' when you mean `\\{mem}[\\{cur_node}]'. @1105 -Q479\>461. Prefer the oldest break to the youngest break - when two break nodes have the same total demerits. @836 -L480\>461. Don't make badness too big for floating-point calculations, - when forced to make an overfull box. [Obsolete.] -* 10 Dec 1980 -R481. Make it impossible to get unmatched `|}|' in a delimited macro - argument. @392 -G482. Add new |\topsep| and |\botsep| features. [These are \TeX78's - way to put space at the edge of inserts, - replaced in \TeX82 by the |\skip| register corresponding - to an |\insert| class.] @1009 -* 6 Jan 1981 -P483. Install new routines for reading the font metrics, using Ramshaw's - |TFM| files instead of\/ |TFX| files. @539 -I484. Abort after reporting 100 errors, if not pausing on errors. @82 -G485. Add new |\spacefactor| and |\specskip| and |\skip| primitives. - [At this time we write `|\specskip3=10pt|' and `|\skip3|' for what - will become `|\skip3=10pt|' and `|\hskip\skip3|' in \TeX82.] @1060 -G486\>366. |\unskip| is now allowed in internal vertical mode. @1105 -* 26 Jan 1981 -B487\>482. Don't say `\\{mem}[$q$]' when you mean `$q$'. (See \#143 and \#478.) @1009 -* 27 Feb 1981 -I488\>417. Put some linefeeds back into the transcript file, in order - to prevent overprinting in listings. [System dependent.] -G489. Add a new |\dpenalty| feature [later |\postdisplaypenalty|]. @1205 -G490. Add the dimension |cc| for European users. @458 -C491. Make \\{scan_keyword} match uppercase letters as alternatives - to lowercase ones (suggested by Barbara Beeton's experiments - with |\uppercase|). @407 -I492. Add nonstop mode so that overnight batch processing is possible. @73 -* 2 Mar 1981 -S493\>422. Fix a still more serious |\gdef| bug: The generality - of\/ |\gdef| almost makes it a crime to - forget {\sl any\/} control sequence names, ever! (The previous bug was - only the tip of an iceberg.) @259 -I494. Issue warning message at the end of a file page if nesting level isn't zero. - [System dependent.] -* 5 Mar 1981 -I495. Keep track of maximum memory usage, for statistical - reporting. [Obsolete.] @125 -Q496\>350. Prune away glue and penalties at top of page after marks, sends, - inserts. @1000 -G497. Allow |\mark| in horizontal mode. [Later it will - be |\vadjust{\mark...}|.] @655 -C498. Allow optional space before a required left brace, e.g., |\if AA {...}|. - [See \#251.] @403 -I499. Issue an incomplete |\if| error, to help catch a bad |\if|. @336 -* 17 Mar 1981 -I500\>494. Omit the warning message at end of a file page unless - the nesting level has changed on that page. [System dependent.] -Q501\>310. Fix the spacing when there is a very tall subscript with - a superscript. @759 -* 20 Mar 1981 -S502\>371. Make space-eating after |\else| fully consistent between the - true and false cases. [Obsolete.] -* 24 Mar 1981 -B503\>496. Change \\{glue_spec_size} to \\{ins_spec_size} - in \\{vpackage} [where insertions are done]. [Obsolete.] -* 5 Apr 1981 -B504\>501. Fix a typo (`|+|' instead of `|-|') in the new subscript code; - this shifted certain subscripts down instead of up. @759 -* 18 Apr 1981 -G505. Make leaders with rules of specified size act like variable rules. - @626,635 -* 29 Apr 1981 -A506\>461. Don't consider $\\{badness}>\\{threshold}$ at a line |\break| - except in an emergency. @854 -* 13 Jul 1981 -C507\>402. Allow other characters as numbers. @442 -R508\>294. Avoid dead storage if a \\{no_new_control_sequence} error occurs. - [Obsolete.] @259 -G509. Add a new |\ifx| feature. @507 -G510. Add new features |\xleaders| and |\cleaders|. @626,635 -* 14 Jul 1981 -S511\>507. Amend the new code for constants; - the `|.|' in `|.5|' is thought to mean \O{056}! @442 -L512\>507. And fix an egregious blunder in that code: New commands at the - end of a procedure are ignored when earlier statements - exit via {\bf return}. @442 -* 4 Aug 1981 -P513. Accept alphabetic codes for all online error recovery options, - instead of insisting on control codes like line feed or form feed. - [The original error-recovery codes were suggested by the - conventions of the |SAIL| compiler.] @84 -G514. Add a new |\thebox| feature [later |\lastbox|]. @1079 -* 7 Aug 1981 -G515. Add |fil|, |fill|, and |filll| as units for glue stretching - or shrinking. @454 -I516. Suppress the overfull box error when shrinkage amount is negative. @664 -* 9 Aug 1981 -Q517. Let unset boxes inherit the size of their parent in alignments. @810 -* 12 Apr 1982 -F518. Make |INITEX| dump out the \\{font_dsize} array needed by - the new |DVI| output module. @1322 -* 1 May 1982 -S519\>151. Fix \\{clean_box} so that \\{mlist_to_hlist} cannot make - $\\{link}(q)=0$ and $\\{type}(q)=\\{glue_node}$. @720 -# [That was the historic final change to \TeX78. All subsequent entries - in this log refer to \TeX82.] -* 15 Jul 1982 -# Finished draft of test program and began debugging about 1430 - [2:30\thinspace pm]. Taking my time. -BX1. Change \\{eqtb}[\\{cur_font}] to \\{eqtb}[\\{cur_font_loc}]. @232 -# Not logging changes to the exposition. -# Compile time is about 2 minutes CPU, times 5 for time-sharing; - add another half minute for linking and loading. -# Hash table and \\{get_next} seem to be working, with no changes needed! -# Time out 1630--1815 for Jill's birthday party. -LX2. Insert {\bf begin} \dots~{\bf end} around \\{dump_int} macro. @1305 -IX3. Print two blank spaces before date in \\{open_log_file}. @536 -AX4. Update $x$ and \\{var_used} outside the {\bf for} loop. @1311 -BX5. Change {\bf if} $=$ to {\bf if} $\ne$ as loop exit condition. @1315,1316 -# The |TRIP| test should preload more fonts. -LX6. Insert {\bf begin} \dots~{\bf end} around statistics output. @1334 -FX7. Must \\{get_x_token} when scanning a number. @445 -IX8. Interactive \\{debug_help} needs to print a newline. @1338 -FX9. Include \\{ignore_spaces} and \\{math_accent} in \\{print_cmd_char} cases. @266 -IX10. Don't call \\{confusion} when \\{print_cmd_char} sees unknown code. @298 -# Compiler bug causes stack overflow. Retiring for the night at 2145. -* 16 Jul 1982 -# Starting at 0700; DRF has fixed the compiler. -RX11. Allow arbitrary integer parameters in diagnostic print routines. @237,699 -TX12. Say \\{cur_tok}, not \\{cur_val}, when you mean \\{cur_tok}. @440 -FX13. Make |\pause| effective also on first line of a file. @538 -FX14. Show context after online deletion. @88 -IX15. Bypass reference count when \\{debug_help} shows a token list. @1339 -BX16. Change `{\bf case} $p$' to `{\bf case} \\{type}($p$)'. @1000 -FX17. Fix timing of \\{print_ln} when scrolling help messages. @90 -PX18. Make \\{other_char} the default category for ASCII control codes too. @232 -AX19. Use special scanning method for font number in \\{new_font}. @1257 -# Eating lunch, 1020--1035, while the machine slowly recompiles everything. -FX20. Don't forget to increase $k$ in the {\bf while} loop. @355 -DX21. Adjust \\{limit} properly after line changed when pausing. @363 -FX22. Remember to return a value in \\{new_spec} and \\{new_penalty}. @151,158 -# Now stepping through \\{line_break} in simple case. -AX23. Don't prune unwanted nodes if $\\{cur_p}=\\{null}$. @877 -FX24. Print a closing parenthesis when displaying glue nodes. @189 -SX25. Use \\{last}, not \\{limit}, in \\{term_input}; else error prompt causes - trouble when $\\{state}=\\{token_list}$. @71,87 -DX26. Set $\\{first}\gets\\{limit}+1$ after \\{init_terminal}. @331 -DX27. Make sure \\{set_trick_count} is always performed. @317 -* 17 Jul 1982 -IX28. Add new diagnostic feature |\tracingcommands|. @299,1031 -# Debugging of system-dependent code not shown in this log. -# Tangling \TeX\ now takes 1.75 minutes; about 75K bytes, 108K tokens. -# Redundant semicolon sends Pascal compiler into infinite loop! -FX29. Initialize $\\{passive}\gets\\{null}$. @864 -AX30. Fix pseudoprinting when the line is empty. @318 -EX31. Merge adjacent free areas of dynamic memory before dumping. @131 -FX32. Print the word |mode| in \\{print_mode}. @211 -IX33. Improve message and help in case of weird error. @415 -GX34. Allow optional space after |\def| and similar constructions. @473 -MX35. Declare \\{alpha} to be integer in \\{read_font_info}. @560 -AX36. Fix timing of \\{back_input} in \\{scan_dimen}. @448 -IX37. Back up after missing number error. @446 -IX38. Show the `|at|' size that is considered improper. @1259 -IX39. Streamline the dialog in \\{debug_help}. @1338 -MX40. Take output of \\{the_toks} from the advertised place. @467,1297 -TX41. Say \\{trie_fix}($q$), not \\{trie_fix}($p$). @959 -SX42. Decrease low limit of \\{error_count} to $-1$. @76 -* 18 Jul 1982 -FX43. Clear initial reference count of macro definitions. @473 -AX44. Fix timing of \\{back_input} in \\{scan_glue}. @461 -BX45. Use \\{cur_val_level}, not \\{cur_val}, when checking levels. @461 -BX46. Multiply |fil| units by $2^{16}$ for correct scaling. @454 -BX47. Don't confuse \\{glue_base} with \\{skip_base}. @1237 -AX48. Fix \\{print_scaled} so that 0.01 doesn't come out |0.1|. @103 -IX49\>X28. Show mode changes when tracing commands. @299 -LX50. Don't say {\bf if} $(n=0)\lor(\,\ldots\;\hbox{\bf div}\;n)$ in Pascal. @105 -BX51. Don't confuse \\{box_flag} with \\{box_code}. @1075 -SX52. Reset \\{offset} on \\{print_ln} even in \\{no_print} mode. @57 -SX53. Fix restarting of interrupts after \\{big_switch}. @1031 -LX54. Don't loop {\bf for} $k\gets a$ {\bf to} $b-1$ when $b=0$ if $k$ is - declared nonnegative. -IX55. Put `|=|' sign into the \\{format_ident}. @1328 -SX56. Allow $r$ to be any integer in \\{get_node}. @125 -IX57. Don't put the output of \\{print_file_name} in quotes. @518 -IX58. Say `|dumped|' after dumping. @1311 -EX59. Eliminate unnecessary initialization code. @1332 -LX60. Get the file reading started right when beginning to undump. @1308 -IX61. Give forlorn message if format file can't be loaded. @1303 -FX62. Assign value to \\{cur_val} after glue arithmetic. @1239,1240 -* 19 Jul 1982 -LX63. Don't say {\bf if} $p>\\{max}\lor\\{free}[p]$ in Pascal. @169 -AX64. Fix memory-undump logic; loops are out of phase with input. @1312 -BX65. Undump \\{hyph_word}[$j$], not \\{hyph_word}[$k$]. @1325 -# At last |trip.fmt| loads without bombing out. -PX66. Remove assignment of array to array, not allowed by IBM Pascal - (Susan Plass). @167 -PX67. Simplify an expression that's too big for IBM Pascal (Susan Plass). @1009 -AX68. Go to \\{contribute}, not \\{done}, after insertions. @1000 -IX69. Decrease \\{depth_threshold} if there's not enough string space. @198 -IX70. Show rules as `{\tt\char`\|}' in short displays. @175 -IX71. Don't show null glue in short displays. @175 -SX72. Set $\\{job_name}\gets0$ as part of output initialization. @528 -SX73. Don't complain of infinite shrinkage on |0pt minus 0fil|. @825,976,1009 -IX74. Use different prompt at beginning when accepting a file name. @37 -FX75. Reset \\{last_glue} on nonglue nodes. @996 -BX76. Remember to call \\{error} after printing |OK|. @1293 -LX77. Insert {\bf begin} \dots{ \bf end} around program text of section. @1025 -FX78. Define the |\shipout| primitive. @1071,1073 -AX79. Introduce \\{write_loc} analogous to \\{par_loc}. @1344,1371 -FX80. Dump and undump \\{par_loc} and \\{write_loc}. @1313,1314 -FX81. Allow \\{the} in \\{scan_the} [later \\{scan_something_internal}]. @413 -EX82. Interchange command codes $\\{the}:=:\\{number}$ [later \\{convert}]. @210 -BX83. Don't confuse \\{breadth} with \\{depth}. @236 -IX84. Add string printing feature to \\{debug_help}. @1339 -FX85. Set $\\{state}\gets\\{mid_line}$ in \\{begin_file_reading}. @328 -# Time out 2105--2200 to pick up Jenny from driving lesson. -LX86. Keep $c\le127$ when deleting 99 tokens. @88 -SX87. Don't check for \\{str_room} error when $\\{selector}=\\{new_string}$. @1328 -* 21 Jul 1982 -IX88. Gather more statistics: String usage, font info, hyphen exceptions, stacks. @1334 -DX89\>X79. Initialize \\{write_loc} from \\{cur_val}, not from \\{cs_ptr}. @1344 -FX90. Remember to pack file name for |\open|. @1374 -SX91\>X34. Defuse |\outer| test before scanning optional space after `|}|'. @473 -SX92. Don't allow \\{prepare_mag} to cause errors after \\{jump_out}. @84 -# The first page of |DVI| output is {\sl perfect\/}! Pause to play piano. -BX93. Don't confuse \\{dimen_base} with \\{scaled_base}. @1237 -DX94. Initialize $\\{link}(\\{page_head})\gets\\{null}$ when beginning a page. @991 -SX95. Correct \\{cur_height} more often, since \\{max_depth} might be negative. @972,973 -AX96. Calculate page dimensions properly after vertical kerns. @973 -SX97. Install new \\{page_contents} logic to handle interaction between - insertions and |\topskip|. @987,1008 -SX98. Allow \\{top_skip} glue to be a valid breakpoint. @1001 -FX99. Don't forget to count \\{dyn_used} in inner loop [erroneous analysis - retracted later]. @1034 -FX100. Set $p\gets q$ after migration step. @655 -FX101. Clear \\{prev_graf} to zero at start of paragraph. @1091 -LX102. Put parens into negated \\{leader_flag} macro. @1078 -# Time out 1720--1920 for John's birthday dinner. -DX103. Scale \\{best_height} when adjusting \\{page_goal}. @1010 -AX104. Simplify logic of split insertions; three states become two. @981,1019,1020 -MX105. Don't omit first character when showing a macro argument. @400 -RX106. Prevent clobberage if macros have too many parameters. @390 -* 22 Jul 1982 -IX107. Tell how many |DVI| bytes were output. @642 -IX108\>X88. Adjust for singular or plural statistics. @1320,1334 -SX109\>X98. Consider \\{page_head} a glue node, to inhibit unwanted break. @988 -DX110. Introduce \\{new_skip_param} to keep reference counts updated. @679,969,1001 -DX111. Record the correct size of new insertion after it's split. @1010 -DX112. Use \\{free_node}, not \\{flush_node_list}, when recycling insertion - nodes. @1022 -SX113. Make online insertions work after \\{get_next} is interrupted. @87,324,343 -BX114. Print newline on interruption stop. @98 -SX115\>X34. Put space before \\{end_write_token}. @1371 -BX116. Don't confuse \\{glue_order} with \\{stretch_order}. @838 -TX117. Set $\\{max_dimen}\gets\hbox{\it'7777777777\/}$, not {\it'777777777}. @421 -MX118. Make |\global\textfont| legal. @1211 -BX119. Fetch |\the\textfont| with \\{equiv}, not \\{fam_font}. @415 -BX120. Call $\\{new_ligature}(f,l,\ldots)$ not $(f,c,\ldots)$. @1035 -RX121. Make \\{show_box} work on random garbage. @174,177 -DX122. Count reference to \\{zero_glue} from \\{cond_math_glue}. @1171 -* 23 Jul 1982 -RX123. Allow $\\{avail}=\\{null}$ when undumping. @1312 -BX124\>X110. Set $\\{width}(\\{glue_ptr}(p))$, not $\\{width}(p)$. @679 -AX125. Put \\{begin_file_reading} inside the \\{start_input} loop. @537 -BX126\>X116. Don't confuse \\{glue_stretch} with \\{stretch_order} [the previous - fix went only half\-way]. @838 -BX127. Negate $x$ when calculating badness of shrinkage. @667,678 -LX128\>X121. Remove dangling {\bf else} that parses wrong. @174 -IX129\>X28. Print newline before |{|, not after |}|, when tracing commands. @299 -IX130. Remove colon from overfull box messages. @663,675 -DX131\>X97. Compute \\{page_goal} properly when the first box arrives after - inserts. @1001 -BX132. Don't confuse \\{page_size} [now \\{page_goal}] with \\{best_size}. @1017 -AX133. Put heldover insertions at front of contribution list. @1023 -SX134\>X88. Output stats before closing |DVI| file, since the latter - decreases \\{font_ptr}. @1333 -TX135. Don't call a |\vbox| an |\hbox|. @674 -TX136. Fix misplaced {\bf end} caused by editing error. @675 -* 24 Jul 1982 -DX137. Don't \\{eq_destroy} any paragraph shape when \\{par_shape} is null. @275 -IX138. Omit blank before |\message| at the beginning of a line. @1280 -AX139\>X104. Don't try to split an insertion when \\{best_node} isn't the - split one. @1021 -LX140. Correct another case of `{\bf if} $x\land y$' misunderstood by Pascal. - @1021 -IX141. Provide diagnostic info about insertions via |\showlists|. @986 -IX142. Add `|inside a group|' to clarify a warning message. @1335 -IX143. Report \\{prev_depth} on a separate line in |\showlists|. @219 -SX144. Back up input to avoid unexpected clobberage of \\{cur_tok}. @1090 -# Wow what a bug: \\{new_graf} calls \\{build_page}, which invokes the - output routine, after which `\/{\bf goto} \\{reswitch}' is a {\sl disaster}. -DX145. Add insertion glue to \\{page_so_far} instead of subtracting it from - the goal. @1009 -IX146. Put extra blank line before overfull box warning. @660 -CX147. Define break at kern consistently between horizontal and vertical lists. @973,1000 -DX148. Renumber so that math nodes are nondiscardable. @147 -TX149. Correct the \\{char_kern} macro: |#|, not $f$. @557 -FX150. Decrease $l$ after reconstituting discretionary break. @916 -EX151. Simplify the hyphen routine, knowing that $\\{link}(s)=\\{null}$. @918 -FX152. Initialize $r\gets q$ in discretionary destruction routine. @883 -* 25 Jul 1982 -AX153. Don't add interline penalty after last line of paragraph. @890 -IX154. Adjust spacing in diagnostic messages. @245 -DX155. Avoid simultaneous use of \\{temp_head} by \\{prune_page_top} and the - page builder. @1017 -FX156. Clear the \\{post_break} field of simple discretionaries. @916 -AX157. Split \\{offset} into independent variables \\{term_offset}, - \\{file_offset}. @54,57,58 -# Am freezing current program as version $-0.25$; a week of TUG lectures - begins tomorrow. -* 5 Aug 1982 -IX158. The `|.err|' file should be `|.log|' instead. @534 -GX159. Allow |\special| strings to contain more than 256 bytes. @585,1368 -MX160\>X99. Undo ``correction'' to a non-bug. @1034 -IX161. Suggest |\&| in help message for unexpected |&|. @1128 -GX162. Make `|E|' a standard option for exiting. @84 -GX163. Restore the use of dead cycles \`a la \TeX78. @1024,1054 -# The previous six changes were suggested during discussions with \TeX82 class. -SX164. Fix global variable conflict between \\{open_log_file} and \\{new_font}. @1257 -CX165. Allow optional `|=|' when assign to font parameter. @1253 -FX166. Set \\{cur_val} after increasing the number of font parameters. @580 -DX167. Set \\{hash_brace} when matching `|{|'. @476 -IX168\>X88. Clarify meaning of statistics printed. @1334 -GX169. Change |DVI| format to include design size. @602,1260 -DX170. Introduce \\{def_ref} for \\{runaway} messages. @306 -MX171. Restore \\{cur_cs} before calling \\{scan_toks}. @1226 -AX172\>X157. Update \\{print_nl} to dual offset conventions. @62 -AX173\>X163. Move endgame logic inside \\{main_control}, because the output - routine becomes active. @1054 -* 6 Aug 1982 -CX174. Allow |INITEX| to load format files. @1337 -EX175. Conserve input stack space by deleting finished token lists. @325 -IX176\>X74. Print the opening `|**|' in the transcript file. @534 -# Now ready to try breaking new ground in |TRIP|. -SX177. Preserve \\{align_state} from tokens deleted online. @88 -DX178. Set $t$ in all branches of \\{scan_toks}. @473 -SX179. Change `$\\{cur_cmd}\le\\{right_brace}$' to `$\\{cur_tok}\le - \\{right_brace_limit}$'; otherwise |\relax| gets through. @477 -CX180. Allow optional |=| when setting |\spacefactor|; disallow zero. @1243 -BX181. Change \\{vpackage}(\\{head}) to \\{vpackage}(\\{link}(\\{head})). @796 -# Shades of 1978! -LX182. Insert missing {\bf begin} \dots{ \bf end}. @798 -* 7 Aug 1982 -LX183. Keep \\{trie_max} declared in non-|INITEX| [later rescinded]. @950 -DX184. Watch out for empty token list when copying. @466 -DX185. Free unused reference count slot when defining |\everypar|. @1226 -GX186\>X163. Introduce |\maxdeadcycles|. @1012 -# I believe the \\{line_break} routine has passed its test perfectly. -SX187. Don't put discretionary after |-| inside a discretionary. @1039 -CX188. Change `|\minus|' to `|\minusthe|' [this feature retracted later]. @413 -BX189. Change \\{cur_p} to $r$ (three places). @875 -AX190. Increase range of \\{hc} to \\{halfword}; otherwise end-of-word mark - might match a vacant entry in the trie. @892 -FX191. Initialize $b$ in \\{shift_case} routine. @1288 -EX192. Don't back up if a space follows a decimal fraction. @452 -BX193. Don't confuse \\{glue_base} with \\{dimen_base}. @1145 -LX194. Guard against anomalous floating-point values in glue display. @186 -* 8 Aug 1982 -SX195. Avoid infinite loop when |\outer| leads to runaways. @339 -# I worked on that problem about two hours before fixing it. -IX196. Move final \\{debug_help} to \\{succumb}, except in batch mode. @93 -RX197. Insert kern after spanned box, to defeat access to floating point. @808 -* 9 Aug 1982 -CX198. Include |\leftskip| and |\rightskip| in displayed equations [rescinded - later]. @1199 -IX199. Trace line-break computations if $\\{tracing_stats}>2$. @846,856 -DX200. Keep \\{prev_p} up to date when passing a string. @867 -# Now stepping through math stuff; a lot is working. -DX201. Set $\\{link}(p)\gets z$ when making a fraction. @747 -CX202. Don't reset space factor when beginning |\valign|. @775 -IX203. Don't show glue setting if $\\{glue_sign}=\\{normal}$. @186 -DX204. Clear \\{glue_stretch} and \\{glue_shrink} when creating an unset box. @801 -BX205. Do \\{vpack} in hmode and vice versa when aligning. @804 -AX206. Remove fallacious call to \\{confusion} after alignment in display. @1206 -AX207. Don't test $\\{mode}=\\{vmode}$ in display, test $\\{nest_ptr}=1$. @1145 -FX208. Show an \\{inner_noad} as well as the other types. @690,696 -DX209. Renumber \\{mu_glue} and \\{cond_math_glue} so that the glue display logic - works. @149 -BX210. Don't confuse \\{cur_size} with \\{cur_style}. @703 -FX211. Advance $p\gets q$ during second pass over mlist. @761 -IX212. Add helpful hint about |\tracingonline=1|. @1293 -TX213. Delete spurious statement left from sloppy editing. @710 -DX214. Change the subtype when \\{mskip} becomes \\{hskip}. @732 -FX215. Don't forget to use the remainder when computing math glue. @716 -IX216\>X199. Improve paragraph diagnostics using \\{short_display}. @857 -IX217\>X199. Introduce \\{artificial_badness} for better diagnostics. @854,856 -* 11 Aug 1982 -AX218. Introduce \\{char_box} subroutine so that \\{var_delimiter} adds italic - correction. @709 -SX219. Save font and char in local variables of \\{make_math_accent}, since - it can be recursive. @738 -FX220. Call \\{error} after decrying an invalid character. @346 -* 12 Aug 1982 -IX221\>X199. Install new format for showing break nodes. @846 -# I have been testing \\{line_break} and I think it's working fine. -BX222. Change $q$ to $p$, in order to catch empty alignments. @812,1206 -SX223. Disallow third part of discretionary in math mode. @1120 -DX224. Don't change \\{tail} if discretionary third part is empty. @1120 -IX225. Say |nonscript|, not |non_script|. @189 -SX226. Inhibit math if |\scriptfont3| is improper. @1195 -IX227\>X199. Introduce {\tt\@}|firstpass| and {\tt\@}|secondpass| comments. @863 -TX228. Change $p$ to $r$ when you mean $r$. @1204 -IX229\>X108. Say |page|, not |pages|, if there's only |1|. @642 -IX230. Insert space before |[]| on truncated |\showlists|. @182 -* 28 Aug 1982 -# Back from vacation after having looked at hardcopy listing of |TRIP| test. -GX231. Allow |dm| as a unit [later |.5dm1| will be |.5\dimen1|]. @455 -IX232\>X108. Singularize |prevgraf 1 lines|. @219 -IX233. Omit trailing zero count registers when showing completed page numbers. @638 -LX234. Avoid clobbering $a$ by introducing a new local variable $t$. @986 -DX235\>X216. Fix diagnostic printing of discretionaries. @858 -IX236. Don't show unset stretch/shrink that's zero. @185 -CX237\>X198. Make |\halign| in displays consistent with other displays. (Namely, - ignore |\leftskip| and |\rightskip| in nonaligned displays; - respect the paragraph shape in aligned displays.) @800,1199 -IX238. Parenthesize `|If you're confused ...|'. @403 -IX239. Say `|\fraction|', not `|\xabovex|'. @697 -FX240. Remember to {\bf return} when you should. @1153 -PX241. Use absolute value to make sure {\bf div} is unambiguous. @737 -BX242\>X218. Don't confuse depth with height. @709 -BX243. Use $\\{delta}-\\{height}$, not $\\{height}-\\{delta}$. @736 -BX244. Increase \\{shift_down} to increase the clearance. @745 -IX245. Don't back up after improper use of |\the|. @428 -IX246. Don't give |0pt| as the default result when looking for \\{tok_val}. @428 -FX247. Initialize \\{second_indent} in the easy case. @848 -FX248. Package the equation number. @1204 -QX249. Don't resort to $v\gets\\{max_dimen}$ when glue doesn't stretch or - shrink. @1148 -IX250. Insert newline before showing current |\botmark|. -FX251. Call \\{error} after giving error message. @784 -AX252. Change implementation of |\number|; it should \\{scan_int}, not - something internal. @471 -PX253. Introduce symbolic constants like \\{format_area_length}. @524 -PX254. Change \\{quit} to \\{jump_out}, since some compilers treat \\{quit} - as a reserved word. @81 -LX255. Add more parentheses to get proper parsing. @1260 -IX256. Say |please| in order to be friendly (or at least polite). @360 -BX257. Don't confuse \\{cur_vcmd} with \\{cur_chr}. @508 -IX258. Use |&| instead of |!| to specify a preloaded format. @1337 -TX259\>X177. Correct |s3| to |s4|. @88 -GX260. Introduce new primitive |\mathchardef|, to save space and time. @1224 -CX261. Use the |[]| convention for noads as well as nodes. @692 -TX262. Correct spelling in call to \\{primitive}: |\xatopx| should be |\xoverx| - [later renamed, thank goodness]. @1178 -* 30 Aug 1982 -RX263. Don't fetch \\{link}(\\{null}) in malformed list. @175 -SX264. Initialize \\{align_state} at a better time so that \\{align_peek} - doesn't see |&| or |\span|. @785,791 -SX265. Outlaw preamble interfering with $\\{align_state}=0$. @789 -CX266. Add level of grouping to alignment to tabskip locality. @774 -FX267. Check \\{align_state} when scanning $\langle u_j\rangle$. @783 -AX268. Move `\\{unsave}; \\{new_save_level}' from \\{main_control} into - \\{fin_col}. @791,1131 -SX269\>X180. Remember \\{cur_chr} when you're looking for optional `|=|'. @1243 -TX270. Change $q$ to $r$ [in code now obsolete]. @804 -IX271. Disable interrupts during \\{back_error} so that help messages aren't - clobbered. @327 -SX272. Introduce \\{slow_print} for printing control sequences. @60 -IX273. Initialize \\{del_code}(|"."|$)\gets0$ for error recovery. @240 -SX274. Call \\{end_file_reading} before calling \\{check_outer_validity}. @362 -IX275. Don't delete an extra `|}|' when |\par| will help find a runaway. @395 -* 31 Aug 1982 -BX276. Don't confuse \\{thin_muskip} with \\{thin_muskip_code}. @413 -FX277\>X266. Recover from error if new \\{align_group} ends abnormally. @1132 -IX278. Recover from error if |\par| occurs when $\\{align_state}<0$. @1094 -CX279. Make |\hskip\the\thinmuskip| and |\mskip\the\baselineskip| erroneous. @413 -GX280. Add |\muskip| and |\setmuskip| analogs to |skip| and |\setskip|. @413,1228 -EX281. Don't output |pop| right after |push|. @601 -# The |TRIP| test looks right; now to test for wasted memory. -# When memory should be empty I find $\\{dyn_used}=18$, $\\{var_used}=267$. -* 1 Sep 1982 -# Made special |MEMTEX| program, designed to track all memory allocation. -DX282. Delete reference to \\{last_glue} when a page is packaged. @1017 -IX283. Include \\{save_stack} in the \\{search_mem} debugging routine. @285 -CX284. Disallow |\vfill| in restricted horizontal mode. @1095 -# Most of the memory locations I thought were wasted were actually in good use. -# Total 192 hours (approx) debugging time so far since July 15. -* 2 Sep 1982 -# Now looking at all zero counts in profile and extending |TRIP|. -EX285. Simplify the creation of |vtop| boxes. @1087 -CX286. Set $\\{space_factor}\gets1000$ after |\hbox|. @1076 -PX287. Introduce preamble into |DVI| format. @617 -SX288. Give special \\{chr_code} to |\relax|. @265 -IX289. Don't show `|(null)|' when token list is null, just show nothing. @295 -EX290. Delete the procedure \\{write_name_string}, which is never used. -CX291. Rename |\xabovex| to |\abovewithdelims|; do the same for - |\xatopx| and |\xoverx|. @1178 -QX292. Improve \\{clean_box} so that it recognizes cleanliness better. @720 -IX293. Report a |Missing delimiter| more meaningfully. @1161 -RX294. Give \\{endv_token} a \\{chr} code of 128 so that it will end a file name. @289 -RX295. Test present of math fonts {\sl after\/} parsing an mlist, not - before. @1138,1195 -IX296. Omit `|recent contributions|' and/or `|current page|' when they are - empty. @218,986 -IX297. Display what \TeX\ has deleted after improper discretionary list - has arisen. @1121 -IX298. Show what math character was undefined. @723 -IX299. Improve the |Incompatible magnification| error; break it into two lines. @288 -DX300. Put new cases into \\{flush_node_list}, to recycle mlist noads. @698 -* 6 Sep 1982 -FX301\>X300. Insert a necessary `{\bf goto} \\{done}' in that new material. @698 -# It took two hours to diagnose that {\bf goto} problem. -TX302\>X295. Change `|2|' to `|3|' in help message for extension fonts. @1195 -IX303. Add a special note if material is being held over for the next output. @986 -RX304. Divide before multiplying in \\{make_left_right}, to avoid overflow. @762 -IX305. Introduce the \\{box_error} routine. @992 -FX306. Clear \\{arith_error} after overflow has been reported. @460 -BX307\>X249. Don't confuse \\{stretch} with \\{glue_stretch}. @1148 -DX308. Set $\\{glue_sign}\gets\\{normal}$ when packaging with glue ratio - zero. @558,664 -AX309. Test for overflow before attaching the sign. @448 -# That all worked! Now trying |min_quarterword| negative. -LX310. Take absolute value before applying {\bf mod} in \\{new_trie_op}. @944 -LX311. Say $\\{qi}(c)$, not $c$, when testing |TFM| flags [now obsolete]. @573 -LX312. Initialize \\{token_ref_count}(\\{def_ref}) to \\{null}, not zero. @473 -LX313. Change the type of \\{vsplit} parameter $n$ from \\{quarterword} to - \\{eight_bits}. @977 -LX314. Initialize \\{null-delimiter} different form \\{null_character}. @685 -LX315. Insert \\{qi} twice in \\{scan_delimiter}. @1160 -FX316. Insert \\{qi} in \\{scan_math}. @1151 -FX317. Insert \\{qo} in \\{fetch}. @722,723 -FX318. Insert \\{qi} in \\{set_math_char}. @1155 -FX319. Insert \\{qi} in \\{math_ac}. @1165 -FX320. Insert \\{qo} in \\{mlist_to_hlist}. @755 -IX321. Use brackets around 8-bit characters in \\{print_ASCII}. @68 -IX322. Include \\{hyph_list} in the \\{search_mem} debugging routine. @933 -# Now compiling non-|INITEX| to try an industrial-strength version. -LX323. Add {\bf return} to \\{final_cleanup}, because some Pascal compilers - insist that each label be used. @1335 -DX324. Compute \\{par_token} when undumping. @1314 -* 11 Sep 1982 -IX325. Emit newline before file name, if near end of line. @537 -CX326. Define |\ifx| for arbitrary tokens. @507 -* 12 Sep 1982 -IX327. Don't ask users to type |x| twice before exiting. @84 -GX328. Install new features |\openin|, |\read|, |\ifeof|, |\closein|; rename - existing |\open|, |\send|, |\close| to be |\openout|, |\write|, - |\closeout|. @209,313,1275 -GX329. Install new feature |\expandafter|. @368 -PX330. Change the default file area from `|<TeX>|' to `|TeXinputs:|'. @574 -* 13 Sep 1982 -GX331. Install new feature |\string|. @472 -AX332. Remove spurious space printed by \\{sprint_cs}. @263 -# All tests passed now! But when I played with the system I found another bug - (undetected by |TRIP|): -FX333. Set $r\gets s$ after matching macro parameter tokens. @397 -* 16 Sep 1982 -IX334\>X199. Introduce serial numbers in line-break records, improving - readability and independence. @846 -IX335. Don't abort when \\{file_name_size} is exceeded. @519 -* 17 Sep 1982 -IX336. Remove unwanted period from font capacity message. @567 -* 18 Sep 1982 -GX337\>X329. Make |\expandafter| more powerful by moving it from semantics - to syntax [i.e., from stomach to mouth]. @368 -* 19 Sep 1982 -IX338. Improve error recovery for `|Missing number|'. @415 -* 22 Sep 1982 -QX339. Suppress italic correction between letters in math mode except in math - fonts. @752 -* 24 Sep 1982 -PX340. Define $\\{null}=\\{mem_bot}$, not \\{min_halfword}, because there's - a reference to \\{link}(\\{null}) in \\{try_break}. @115 -DX341. Initialize $\\{str_start}[0]\gets0$. @47 -IX342. Avoid blank space at beginning of line. @638 -DX343. Set type of new box in math mode to \\{ord_noad}, not \\{inner_noad}. @1076 -* 28 Sep 1982 -# Here are the first changes made to the preliminary listing of \TeX82 that was - published by the \TeX\ project earlier this month. -F520. Insert the missing cases \\{letter} and \\{other_char} after - \\{x_token} looks ahead. @1038 -C521. Change `|\pause|' to `|\pausing|'. @236 -D522. Reset \\{overfull_rule} when determining tabskip glue. @804 -A523. Fix the logic for scanning |\ifcase| [in obsolete syntax---everything - is still done with braces since `|\fi|' doesn't exist yet]. @509 -* 30 Sep 1982 -I524. Change |"0.0"| to |"?.?"| (suggested by DRF). @186 -* 2 Oct 1982 -Q525. Use conditional thin spacing next to `Inner' noads. @764 -Q526. Make thick spaces conditional. @766 -* 4 Oct 1982 -P527. Increase \\{trie_size} from 7000 to 8000, because of Frank Liang's improved - (but longer) hyphenation patterns. @11 -* 6 Oct 1982 -F528\>X330. Change the string lengths to match the new \\{\TeX_format_default}. @520 -# Version 0 of \TeX\ is being released today! -* 8 Oct 1982 -B529. Fix a blunder: I decreased $h$ mod a quarterword when it should have - been decreased mod \\{trie_op_hash_size} (HWT). @944 -* 9 Oct 1982 -P530\>X258. Fix a typo (`|!|' not `|&|') in the |WEB| documentation. @524 -F531. Remember to call \\{initialize} if a different format was preloaded - (Max D{\'\i}az). @1337 -# Version 0.1 incorporates the above changes. -* 12 Oct 1982 -G532. Add the `|\immediate|' feature, by popular request. @1375 -# Version 0.2 incorporates this (somewhat extensive) change. -* 13 Oct 1982 -P533. Introduce new |WEB| macros so that \\{glue_ratio} is more easily changed. @109 -# I began writing {\sl The \TeX book\/} today: edited the old preface and - searched in the library for quotations. -* 14 Oct 1982 -B534. Change the type of \\{hd} to \\{eight_bits}; it's - not a \\{quarterword} (HWT). @649 -S535\>X281. Revise the optimization of\/ |DVI| commands: It's not always safe to eliminate - \\{pop} when the preceding byte is \\{push}, since |DVI| commands - have variable length! (Embarrassing oversight caught by DRF.) @601 -* 15 Oct 1982 -C536. Test `$\\{prev_depth}>\\{ignore_depth}$', not `$\ne$'. @679 -# Version 0.3 incorporates the above changes. -* 16 Oct 1982 -P537. Omit definition of \\{align_size}; it's never used (Bill Scherlis). @11 -I538. Inhibit error messages when packaging box 255. @1017 -* 21 Oct 1982 -A539\>X145. Subtract $\\{width}(q)$ from \\{page_goal}, don't add it to - $\\{page_so_far}[1]$. @1009 -# Version 0.4 incorporates the above changes. -* 22 Oct 1982 -P540. Increase the amount of lower (variable-size) memory from 12000 to 13000, - since the \TeX\ program listing now needs about 11500. [At this time - there still is a fixed boundary between upper and lower memory.] @12 -G541. Add a new parameter |\boxmaxdepth|. @1086 -# Version 0.5 incorporates the above changes. -* 26 Oct 1982 -B542. Fix an off-by-one error caught by Gabi Kuper and HWT. - (I forgot `${}+1$'). @1317 -B543. Fix the spacing of displayed control sequences: \\{print_cs} should base its - decision on $\\{cat_code}(p-\\{single_base})$, not $\\{cat_code}(p)$. @262 -# The |TRIP| test detected this bug, but I didn't notice. -* 27 Oct 1982 -S544. Set \\{math_type} before saying $\\{fetch}(\\{nucleus}(q))$, since - fetching can have a side effect. @752 -* 28 Oct 1982 -G545. Install a major change: Fonts now have identifiers instead of code letters. - Eliminate the `|\:|' primitive, and give corresponding new - features to `|\the|'. @209 -# Actually I began making these changes on October 26, but I needed two days - to debug them and to put Humpty Dumpty together again. -# At this time I'm also drafting macros for typesetting {\sl The \TeX book}. -# The above changes have been incorporated into Version 0.6. -* 30 Oct 1982 -# After years of searching, I've finally found a definitive definition of - the printer's point; and (unfortunately) my previous conjecture was - wrong. The truth is that $\rm83\,pc=35\,cm$, exactly; - so I am changing \TeX\ to conform. -C546. Revise unit definitions for the `real' printer's point. @458,617 -# Version 0.7 incorporates the above. -* 1 Nov 1982 -# Oops! Retract error \#546, and retract \TeX\ Version 0.7; - the source of my information about points was flaky after all. - My original suppositions were correct, - as confirmed by NBS Circular 570. -* 4 Nov 1982 -C547. Revise the definition of |dd|, conforming to the definitive value - shown me by Chuck Bigelow. @458 -R548\>545. Introduce ``frozen'' copies of - font identifiers, to be returned by |\the\font|, so that font - manipulation is more robust. @1257 -* 5 Nov 1982 -D549. Reset \\{looseness} and paragraph shape when beginning a |\vbox|. @1083 -* 6 Nov 1982 -D550. De-update \\{align_state} when braces are in constants. @442 -I551\>X294. Improve error recovery for bad alignments. @1127 -# Today I wrapped up Chapters 4 and 5. -* 8 Nov 1982 -G552. Give more power to |\let|: the right-hand side needn't be a control - sequence. @1221 -I553. Amend \\{show_context} to say - `$(\\{base_ptr}=\\{input_ptr})\lor{}$'; otherwise undefined control - sequences can be invisible in unusual cases (John Hobby). @312 -A554. Compute demerits more suitably by adding a penalty squared, instead of - adding penalties before squaring. @859 -# Previously a slightly loose hyphenated line followed by a decent line - was considered worse than a decent hyphenated line followed by - a quite loose line. -* 10 Nov 1982 -E555. Save a bit of buffer space by declaring \\{pool_file} only in - |INITEX|. @50 -* 11 Nov 1982 -I556. Introduce a new context indicator to clarify \TeX's scanning state: - A special type - called \\{backed_up} is distinguished from other kinds of \\{inserted} - lists; it is called `recently read' or `to be read again', while - others are called `inserted'. @314 -I557. Append a comment, `|treated as zero|', to the missing-number message. @446 -I558. Ignore the settings of\/ |\hfuzz| or |\vfuzz| if\/ |\hbadness| or |\vbadness| - is less than 100. @666,677 -* 13 Nov 1982 -# Major surgery on the program is planned for today, because of new ideas - suggested by correspondence with MDS and other macro writers. -G559. Introduce a new |\tokens| register; this will be useful and easy to add, - since \TeX\ already can handle |\everypar| and |\output|. @1227 -C560\>X34. Change \\{get_x_token} to \\{get_token} when scanning an optional - space; then a construction like - |\def\foo{...}\foo| won't complain that |\foo| is undefined. @443 -# This change was retracted when it was being debugged, because it could - cause \\{endv} to abort the job. Then it was re-established again - when I found that \\{endv} needed to be more robust anyway. - [But it was eventually rescinded again.] -G561. Make |\span| mean `expand' in a preamble. @782 -E562. Use three separate {\bf if\/} tests instead of - `$\land$' in the inner loop of \\{get_next}, to gain efficiency. @342 -R563. Introduce \\{get_r_token} so that assignments have uniform error - messages and so that frozen equivalents cannot be changed. @1215 -# I gave a few variables more mnemonic names as I made these changes. -C564. Move conditional statements from the semantics (`stomach') part of - \TeX\ to the syntax (`mouth') part, by introducing `|\fi|'. - Also introduce |\csname| and |\endcsname|. @372,489\hbox{--}500 -# This makes macros much more predictable and logical, but it is by far - the most drastic change ever made to \TeX. The program began to come - back to life only after three days of solid hacking. -# Several other things were cleaned up as part of this change - because it is now more natural to handle them differently. - For example, a null control sequence has now become more logical. -# The result of all this is called Version 0.8. -* 18 Nov 1982 -# Today I resumed writing Chapter 8. Tomorrow I'm $\,2^{14}$ days old! -* 21 Nov 1982 -F565. Declare $c$ as a local variable for hyphenation (DRF). @912 -E566. Omit the ``first pass'' and try hyphenations immediately, - if\/ |\pretolerance| is negative (suggested by DRF). @863 -R567. Don't ship out incredibly huge pages; they might foul up - |DVI| files. @641 -* 2 Dec 1982 -G568. Add new features |\everymath| and |\everydisplay|. @1139,1145 -G569. Add a new feature |\futurelet|. @1221 -# The changes above have been incorporated into Version 0.9 of TeX. -* 7 Dec 1982 -G570. Add a new |\endinput| primitive (suggested by FY). @362,378 -* 8 Dec 1982 -I571. Try \\{off_save}, if\/ |\par| occurs in restricted horizontal mode. - (This avoids embarrassment if \TeX\ says `type a command or - say |\end|', then when you type |\end| it says you can't!) - [However, I soon retracted this change.] @1094 -* 21 Dec 1982 -A572. Redefine |\relax| so that its \\{chr} field exceeds 127. (This facilitates - the test for end in \\{scan_file_name}.) @265 -F573\>566. Call \\{begin_diagnostic} when omitting - the first pass of line breaking. @863 -A574. Fix the logic of glue scanning: In |\hskip-1pt plus2pt| the minus should - apply only to the |1pt|. @461 -* 23 Dec 1982 -I575. Renumber the decimal codes in paragraph statistics for loose and tight - lines; they were ordered backwards. @817 -C576. Treat a paragraph that ends with leaders like a paragraph that - ends with glue. @816 -C577. Allow commas as alternates to radix points, for Europeans. @438 -C578. Change |\hangindent| to a normal dimension parameter. [It had been - a combination of\/ |\hangindent| and |\hangafter|, with special - syntax.] @247 -G579. Make |\prevgraf| accessible to users. @422,1244 -G580. Split |\clubpenalty| off from |\widowpenalty|. @890 -# I'm typing Chapter 14 while making these changes. -* 24 Dec 1982 -S581. Use \\{back_input} instead of {\bf goto} \\{reswitch} when - inserting |\par|, because |\par| may have changed. @1095 -* 25 Dec 1982 -# It's 10pm after a very Merry Christmas! -I582\>X328. Don't prompt for a new file name if\/ |\openin| doesn't find a file. @1275 -G583. Add a new |\jobname| primitive. @472 -I584. Give the user a way to delete the dollar sign, when \TeX\ decides - to insert one. @1047 -C585. Allow optional equals after |\parshape|, and implement |\the\parshape|. - @423,1248 -* 26 Dec 1982 -I586. Add an \\{if_line_field} to the condition stack entries, - so that more informative error messages can be given. @489 -D587\>549. Introduce a \\{normal_paragraph} procedure, since initialization is needed - also within |\insert|, |\vadjust|, |\valign|, |\output|. @1070 -* 27 Dec 1982 -G588. Give users access to |\pagetotal| and |\pagegoal|. (Analogous to - \#679 and \#585, but simpler.) @1245 -I589\>X199. Introduce |\tracingpages|, allowing users to see - page-optimization calculations. Also split |\tracingparagraphs| off from - |\tracingstats|. @987,1005,1011 -# The changes above have been incorporated into Version 0.91 of \TeX. -* 31 Dec 1982 -P590. Break the \\{build_page} procedure into two parts, by extracting - the section now called \\{fire_up}. [This is necessary because - some Pascal compilers, notably for IBM mainframes, cannot - deal with large procedures.] @1012 -S591\>564. Make |\ifodd1\else| legal by introducing \\{if_code}. @489 -Q592. Improve alignments when columns don't occur: Don't append null boxes - for columns missing before |\cr|, and zero out the tabskip - glue after nonpresent columns. @802 -I593. Make the error message about overfull alignment more intelligible. - @801,804 -# The changes above have been incorporated into Version 0.92 of \TeX82, - which was the last version of 1982, - completed at 11:59pm on December 31. -* 3 Jan 1983 -# Today I'm beginning to write Chapter 15, and - planning the |\output| routine of |plain.tex|. -C594\>X186. Change the logic of \\{its_all_over}; use \\{max_dead_cycles} - here too, instead of the fixed constant~100. @1054 -F595\>X34. Don't forget to \\{pop_nest} when an insert is empty. Also disallow - optional space after |\insert|$\,n\,$|{...}|. @1100 -* 4 Jan 1983 -C596\>541. Use the |\boxmaxdepth| that's declared inside a |\vbox| when packaging it. - @1086 -C597. Rename |\groupbegin| and |\groupend| as |\begingroup| and - |\endgroup|. @265 -G598\>594. Make |\deadcycles| accessible to users. @1246 -Q599. Base the split insertions on natural height plus depth, not - on \\{delta}. @1010 -# The changes above have been incorporated into Version 0.93. -* 6 Jan 1983 -D600. Add \\{push_math} to handle a case where I forgot - to clear \\{incompleat_noad}. (This long-standing bug was - unearthed today by Phyllis Winkler.) @1136 -G601\>588. Add |\pageshrink|, etc., too. @1245 -G602. Introduce new parameters |\floatingpenalty|, |\insertpenalties|. Also - adopt a new internal representation of insertion nodes, - so that |\floatingpenalty|, |\splittopskip| and |\splitmaxdepth| - can be stored with each insertion. @140,1008 -* 7 Jan 1983 -Q603. Improve the rules for entering \\{new_line}, in particular - when the end-of-line character is active. @343 -* 9 Jan 1983 -Q604. Distinguish between implicit and explicit kerns. @155,896 -C605. Change the name |\ignorespace| to |\ignorespaces|. @265 -C606\>560. Don't omit a blank space after |\def|, |\message|, |\mark|, etc.; - the previous hodge-podge of rules is impossible to learn. @473 -# The above changes appear in Version 0.94. -* 12 Jan 1983 -# Beginning to write the chapters on math today. -G607. Add a new feature: active characters in math mode. @1151 -* 15 Jan 1983 -A608. Fix a surprise bug: `|$1-$|' treated the |-| as binary. @729 -D609. Initialize \\{space_factor} inside discretionaries. @1117 -* 16 Jan 1983 -F610. Fix an incredibly embarrassing bug: I forgot to update \\{spotless} in the - \\{error} routine! -# While fixing this, I decided to change - \\{spotless} to a more general \\{history} variable, as suggested - by IBMers who want a return code. @76,82,1335 -I611. Replace two calls of \\{confusion} by attempts at error recovery, in places - where `|This can't happen|' could actually happen. @1027,1372 -* 18 Jan 1983 -R612. Introduce the \\{normalize_selector} routine - to protect against startup anomalies - when the transcript file isn't open. Also make \\{open_log_file} - terminate in some cases. @92,535 -R613\>591. Insert |\relax|, not a blank space, to cure infinite - loop like |\ifeof\fi| (LL). @510 -G614. Change the old |\limitswitch| to |\limits|, |\nolimits|, and - |\displaylimits|. Incidentally, this fixes a bug in the former - positioning of integral signs. @682,749 -C615. Give a |\char| in math mode its inherited |\mathcode|. @1151 -Q616\>525. Make underline, overline, radical, vcenter, accent noads and |{...}| - all revert to type Ord instead of type Inner. Introduce a new primitive - |\mathinner|. (This fixes the spacing, which - got worse in some ways after change \#525.) @761 -# I'm working on Appendix G today. -* 19 Jan 1983 -G617. Introduce a |\mathchoice| primitive. @1174 -C618. Move |\input| from the stomach to the mouth. @378 -C619\>X260. Introduce |\chardef|, analogous to |\mathchardef|. @1038,1224 -G620. Change |\unbox| to |\unhbox| and |\unvbox|; also add |\unhcopy|. @1110 -C621. Consider |\spacefactor|, |\pagetotal|, etc., as part of - \\{prefixed_command}, even though they are always global. @1211 -* 20 Jan 1983 -C622. Switch modes when |\hrule| occurs in horizontal mode or |\vrule| - in vertical. @1090,1094 -G623. Add a new |\globaldefs| feature. @1211 -* 21 Jan 1983 -E624. Optimize the code, in places where it's important (based on - frequency counts of \TeX\ usage - accumulated during the past week): Introduce \\{fast_get_avail} - and \\{fast_store_new_token}; reduce procedure-call overhead - in \\{begin_token_list}, \\{end_token_list}, \\{back_input}, - \\{flush_node_list}; change some tests from `{\bf if} $a\land b$' to - `{\bf if}~$a$ {\bf then if}~$b$'. @122,371 -* 22 Jan 1983 -E625. Save space in math lists: Don't insert penalties within restricted - horizontal mode; simplify trivial boxes. @721,1196 -S626. Fix a surprising oversight in the \\{rebox} routine: - Ensure that $b$ isn't a vbox. @715 -C627\>545. Make |\nullfont| a primitive, so that \\{cur_font} always - has a value. (This is a dramatic improvement over \TeX78, where a - missing font was a fatal error called `|Whoa|'!) @552 -* 24 Jan 1983 -I628\>586. List all incomplete |\if|'s when the job ends. @1335 -* 29 Jan 1983 -C629\>552. Change initialization of \\{align_state} so that |\halign\bgroup| - works. @777 -* 30 Jan 1983 -D630\>625. Be sure to test `\\{is_char_node}($q$)' when checking for a trivial - box. @721 -# By extraordinary coincidence, this bug was caught when somebody - used font number~11 ($=\\{kern_node}$) in the second character - of a list of length~2! -I631\>X168. Improve format for stats at end of run, as suggested by DRF. @1334 -# The changes above have been incorporated into Version 0.95. -C632. Don't ignore the space after a control symbol (except `|\ |'). @354 -P633. Remove all trailing spaces at the right of input lines, - so that there's perfect compatibility with IBM systems that - extend short lines with spaces. @31 -* 3 Feb 1983 -I634. Assume that a \\{math_accent} was intended, after giving an error - message in the case $\\{mmode}+\\{accent}$. @1165 -G635. Add new primitives |\iftrue| and |\iffalse|. @488 -* 6 Feb 1983 -A636\>X304. Improve the accuracy of fixed-point arithmetic when - calculating sizes for |\left| and |\right|. (I had started by - dividing \\{delimiter_factor}, not \\{delta1}, by 500.) @762 -* 12 Feb 1983 -C637. Change the name |\delimiterlimit| to |\delimitershortfall|. @248 -C638. Make |\abovewithdelims..| equivalent to |\above|; change the - order of operands so that delimiters precede the dimension. @1182 -C639\>607. Remove the kludgy math codes introduced earlier; - make |\fam| a normal integer parameter and allow |\mathcode| - to equal $2^{15}$. @1233 -R640. Don't let |\spacefactor| become more than $2^{15}$. @1233,1243 -# I finished drafting Chapter 17 today. -* 14 Feb 1983 -I641\>639. Replace octal output (\\{print_octal}) by hexadecimal (\\{print_hex}) - so that math codes are clearer. @67 -F642\>619. Don't forget \\{char_given} in the \\{math_accent} routine. @1124 -* 17 Feb 1983 -C643\>622. Switch modes when |\halign| occurs in horizontal mode, or |\valign| - in vertical mode. @1090,1094 -* 18 Feb 1983 -I644. Add a new feature |\tracingrestores|. This requires a new procedure called - \\{show_eqtb}, whose code can be - interspersed with the \\{eqtb} definitions. @252 -* 25 Feb 1983 -I645\>622. Suggest using |\leaders| when the user tries a horizontal rule - in restricted horizontal mode. @1095 -* 27 Feb 1983 -I646. Specify the range of source lines, when giving warning messages - for underfull or overfull boxes in alignments. @662,675 -# Why did it take me all day to type the middle part of Chapter 18? -* 4 Mar 1983 -G647. Introduce a new feature |\xcr| (suggested by LL). [Changed later to - `|\crcr|'.] @785 -I648\>631. Subtract out \TeX's own string requirements from the stats. @1334 -* 6 Mar 1983 -G649. Add new features |\everyhbox| and |\everyvbox|. @1083,1167 -* 9 Mar 1983 -R650\>X295. Avoid accessing \\{math_quad} when the symbol fonts aren't known - to be present. @1199 -P651\>533. Introduce \\{float} and \\{unfloat} macros to aid portability (HWT). @109 -C652. Introduce new names |\abovedisplayskip| and |\belowdisplayskip| for - the old |\dispskip|; also |\abovedisplayshortskip| and - |\belowdisplayshortskip| for the old |\dispaskip| and |\dispbskip|. @226 -* 10 Mar 1983 -C653. Unbundle |\romannumeral| from |\number| (suggested by FY). @468 -* 12 Mar 1983 -C654. Ignore leading spaces in \\{scan_keyword}. @407 -* 14 Mar 1983 -E655\>631. Use \\{write} and \\{write_ln} directly when printing stats. @1334 -* 16 Mar 1983 -Q656\>602. Refine the page-break cost function (introducing `\\{deplorable}', - which is not quite `\\{awful_bad}'), after suggestion by LL. @974,1005 -# The changes above have been incorporated into Version 0.96. -* 18 Mar 1983 -G657. Add a new feature |\everyjob| suggested by FY. @1030 -* 19 Mar 1983 -I658. Don't treat left braces specially when showing macros. @294 -C659. Ignore blanks that would otherwise become undelimited arguments. @393 -* 21 Mar 1983 -F660\>X280. Make |\lastskip| handle \\{mu_glue} as well as ordinary glue. @424 -C661\>561. Expand only one level in a preamble |\span|. @782 -* 22 Mar 1983 -C662. Let a single |#| suffice in |\tokens|, |\message|, etc. (The previous rule, - in which |##| was always required as in macros, was a loser especially - in |\write| where you had to say |####|!) @477 -C663\>X328. Require the keyword `|to|' in |\read|. (This will avoid the common error - of an incomplete constant when no space appears - before the |\cs|.) Also allow terminal - I/O as a default when a stream number is out of range. @482,1225,1370 -* 26 Mar 1983 -C664. Replace |\ifeven|\<countnumber> by |\ifodd|\<number>, for better - consistency of language. @504 -S665\>564. Introduce the \\{change_if_limit}, to overcome a big surprise - bug relating to |\if\if aabc\fi|. @497 -# Such examples show that \\{cur_if} might not be current, - in my original implementation. -* 28 Mar 1983 -G666\>X326. Tolerate non-characters as arguments to |\if| and |\ifcat|. @506 -C667. Change `|absent|' to `|void|', a better word. @487 -C668. Clear the \\{shift_amount} in |\lastbox|, since I don't - want to figure out what it means in all cases. @1081 -* 29 Mar 1983 -I669. Wake up the terminal before giving an error message. (This - means a special \\{print_err} procedure is introduced.) - (Suggested by DRF.) @34,73 -* 1 Apr 1983 -# Today I finished Chapter 21 (boxes) and began to draft Chapter 22 (alignments). -G670. Allow periodic preambles in alignments. @793 -C671. Make |\leaders| line up according to the smallest - enclosing box. @627,636 -Q672. Allow hyphenation after whatsits (e.g., after items for an index). @896 -* 2 Apr 1983 -Q673. Call \\{build_page} when |\par| occurs in vertical mode. @1094 -C674. Clear \\{aux} in \\{init_row}, for tidyness. @786 -* 4 Apr 1983 -C675. Let digits switch families in math mode. @232 -* 7 Apr 1983 -Q676\>602. Refine the test for not splitting an insertion. @1008 -* 8 Apr 1983 -C677\>647. Rename |\xcr| as |\crcr|, at LL's request. @780 -* 9 Apr 1983 -# Took a day off and had a chance to help print a sample page on - a 150-year-old letterpress in Murphys, California. -* 11 Apr 1983 -I678. Recover more sensibly after a runaway preamble. @339 -* 12 Apr 1983 -C679\>X328. Make |\read| span several input lines, if necessary to get - balanced braces. @482 -* 14 Apr 1983 -S680. Fix a subtle bug found by JS: \S882 can make $q$ a \\{char_node}, - so we need to test `{\bf if} $\lnot\\{is_char_node}(q)$'. - [Actually I discovered much later that the real bug was - to omit `{\bf else}' at this point.] @881 -* 15 Apr 1983 -C681. Make |\uppercase| and |\lowercase| apply to all characters, regardless - of category. @1289 -# 7:30am. After working all night, I completed a draft of the manual thru - Chapter 22, for distribution to volunteer readers. -# 5pm. The changes above have been incorporated into Version 0.97. -* 17 Apr 1983 -R682. Change `\\{small_number}' to `$0\,.\,.\,65$' in the - hyphenation routine (DRF). @901 -I683. Flush patterns in the input when the user tries |\patterns| - outside of\/ |INITEX| (suggested by DRF). @1252 -# Tomorrow I fly to England, where I'll lecture and write a paper about - `Literate Programming' [{\sl Comp.~J. \bf27} (1984), 97--111]. -* 14 May 1983 -I684\>663. Improve the behavior of\/ |\read| from terminal - (suggested by Todd Allen at Yale). - [I'd forgotten to implement the extended stream numbers in \#663. - Also, the prompt is now omitted if $n<0$.] @484 -* 18 May 1983 -I685. Restrict |\write| $n$ to the transcript file only, if $n<0$. @1350 -C686\>X188. Unify the syntax for registers and internal quantities. (Remove - primitives called `|\insthe|' and `|\minusthe|'; rename - \\{scan_the} to \\{scan_something_internal}, and change its - interface accordingly; clean up command codes generally.) @209,413 -G687. Introduce new parameters |\hoffset|, |\voffset|. @617 -* 24 May 1983 -G688. Introduce a new parameter |\everycr| (suggested by MDS). @774,799 -# Many macro writers and preliminary-manual readers have been requesting - new features; I'll try to keep the language as concise and consistent - as possible. -* 25 May 1983 -G689. Introduce |\countdef|, |\dimendef|, etc.\ (suggested by DRF long ago, - easy now in view of \#686). @1224 -G690. Introduce |\advance|, |\multiply|, |\divide| (suggested by FY). @1240 -G691. Introduce |\hyphenchar|; this requires a new command - \\{assign_font_int}, plus minor changes to about 15 modules. @915 -G692. Introduce |\skewchar| (easy because of \#691). @741 -G693. Introduce |\noexpand|. (I had difficulty thinking of how to - implement this one!) @358,369 -G694. Introduce |\meaning|. @296 -G695\>X231. Remove `|dm|' and `|vu|'; allow the more general `|.5\hsize|'. @455 -C696. Change `|\texinfo| $f$ $n$' to `|\fontdimen| $n$ $f$'. @578 -* 27 May 1983 -G697. Add a new feature |\afterassignment| (suggested by ARK). @1269 -C698\>619. Adjust the timing so that commands like `|\chardef\xx=5\xx|' - behave sensibly. @1224 -* 28 May 1983 -C699. Ignore `|\relax|' as if it were a space, in math mode and in a few other - places where |\relax| would otherwise be erroneous. @404 -Q700. Improve |\mathaccent| spacing with respect to subscripts - and superscripts (suggested by HWT). @742 -* 30 May 1983 -C701\>598. Terminate a job only when $\\{dead_cycles}=0$. @1054 -# The changes above constitute Version 0.98. -* 3 Jun 1983 -# I finished the draft of Chapter 23 (output routines) today. -G702. Allow |\mark| and |\insert| and |\vadjust| in restricted - horizontal mode, and also in math mode. (This is a comparatively - big change, triggered by the fact that |\mark| in a display - presently causes \TeX\ to crash with `|This can't happen|'!) - The global variable \\{adjust_tail} is introduced. @796,888,1085 -* 6 Jun 1983 -G703\>695. Replace (and generalize) the previous uses of\/ |ht|, |wd|, and |dp| - in dimensions by introducing the new control sequences - |\ht|, |\wd|, and |\dp|. @1247 -I704. Display sub-parts of noads with the symbols |^| and |_| instead of - |(| and~|[|. @696 -C705\>694. Allow |A..F| in hex constants to be \\{other_char} as well as - \\{letter}. @445 -* 7 Jun 1983 -E706\>654. Remove an instance of \<Scan optional space>, since it's now - redundant. @457 -C707. Legalize |\mkern\thinmuskip| and |\mkern5\thinmuskip|. @456 -C708. Clean up the treatment of optional spaces in numerical specifications. @455 -# A construction like |2.5\space\space\dimen0| was previously - valid after `|plus|' or `|minus|' only! -# I'm obviously working on Chapter~24 today. -C709\>545. Allow `|\font|' as a \<font identifier> for the current font. @577 -C710\>623. Don't make |\gdef| global when $\\{global_defs}<0$. @1218 -E711. Produce \\{zero_glue} as the outcome of - |\advance\spaceskip by-\spaceskip|. @1229 -I712. Make |\show| do something appropriate for every possible token. @1294 -G713\>559. Replace the (single) |\tokens| parameter by an array of - 256 token registers. @230 -C714. Allow |\indent| in math mode; also make |\valign| in math mode produce the - `|Missing|~|$|' error. @1046,1093 -E715. Remove redundant code: There's no need to check \\{cur_group} - or call \\{off_save} when starting alignments or equation numbers - in displays. @1130,1142 -* 8 Jun 1983 -C716. Disallow |\openout-1| and |\closeout-1|. @1350 -C717. Disallow |\lastbox| in math mode. @1080 -* 9 Jun 1983 -I718. Call \\{back_error}, not \\{error}, when |\leaders| aren't followed by - proper glue. @1078 -D719. Initialize for a possible paragraph, after |\noalign| - in a |\valign|. @785 -* 10 Jun 1983 -C720\>708. Expand the optional space after an ASCII constant. @442 -* 12 Jun 1983 -C721. Set $\\{space_factor}\gets1000$ after a rule or a - constructed accent. @1056,1123 -* 14 Jun 1983 -D722. Correct a serious blunder: Set $\\{disc_width}\gets0$ before testing - if $s$ is null (caught by JS). @869 -# This is a real bug that existed since the beginning! - It showed up on page~37 of the - Version~0 |TRIP| manual, but I didn't notice the problem. -C723\>708. Make optional spaces after \<dimen> like those after \<number>. @448 -C724\>568. Insert \\{every_display} before calling \\{build_page}. @1145 -I725\>648. Report \TeX's capacity on overflow errors in a way that's - fully consistent with other statistical reports. @42 -* 17 Jun 1983 -C726. Make all |\tracing| decisions on the basis of $\ge$ versus $<$, - not $\ne$ versus~$=$. @581 -# Today I finished the draft of Chapter 27 (the last chapter)! -# The changes above were released as Version 0.99 on June 19, 1983. -* 20 Jun 1983 -C727. Set |\catcode`\%=14| in |INITEX|. @232 -C728\>587. Call \\{normal_paragraph} when |\par| occurs in vertical mode. @1094 -# Once again I'm retiring about 8am and awaking about 4pm. -* 21 Jun 1983 -C729\>558. Don't append an overfull rule solely because of\/ |\hbadness|. @666 -R730. Don't allow the glue-ratio of shrinking to be less than~$-1$. @810,811 -* 22 Jun 1983 -B731\>653. Declare the parameter to \\{print_roman_int} to be of type \\{integer}, - instead of \\{nonnegative_integer} (found by Debby Clark). @69 -C732\>690. Make the keyword `|by|' optional (suggested by LL). @1236 -* 24 Jun 1983 -I733. Say `|preloaded|' when announcing \\{format_ident}. @1328 -* 25 Jun 1983 -R734. Add extra boxes and - glue to the output of alignment. [This thwarts possible attempts - at trickery by which system-dependent glue set values - computed by |\span| could have gotten into \TeX's registers by - things like |\valign| and |\vsplit|. It also has the advantage - of perfect accuracy in alignment of vertical rules.] @809 -C735. Make leaders affect the height or width of the enclosing boxes. @656,671 -# Today I'm mainly installing a much-improved format for change files - in |WEB| programs (suggested by DRF). -* 28 Jun 1983 -C736. Permit |\unskip| in vertical mode when we know that it does nothing. @1106 -* 1 Jul 1983 -E737\>700. Avoid redundant boxes when things like `|{\bf A}|' occur in math. @1186 -G738. Add a `|scaled|' feature to |\font| input. @1258 -D739\>700. Remember to correct \\{delta} when an accented box changes. @742 -* 2 Jul 1983 -R740.Introduce \\{bypass_eoln}, to remove anomalous behavior on input files - of length~1. (Suggested by DRF after the problem was discovered by LL). @31 -* 4 Jul 1983 -G741. Allow codes like |^^b| as well as |^^B|. @352,355 -G742. Introduce new parameters |\escapechar|, |\endlinechar|, |\defaulthyphenchar|, - and |\defaultskewchar|, to make \TeX\ less dependent on the - character set. (This affects many modules, since a lot of - error messages must be broken up so that they use \\{print_esc}.) -* 7 Jul 1983 -P743. Use a system-dependent function \\{erstat} when opening or closing - files (suggested by DRF). @27 -* 11 Jul 1983 -# The computer is back up after more than 50 hours down time - (due to air conditioning failure). -I744. Show total glue in the output of\/ |\tracingpages|. @985 -R745. Guard against insertion into an hbox. @993 -C746. Legalize the assignment \<tokenvar>=\<tokenvar>. @1227 -I747. Introduce a new parameter |\errhelp|. @1283 -F748\>623. Don't forget to check \\{global_defs} when |\tabskip| is changed. @782 -* 12 Jul 1983 -C749. Allow an |\outer| macro to appear after |\string|, |\noexpand|, - and |\meaning| (Todd Allen). @369,471 -C750. Make `|\the|' an expandable control sequence (i.e., move it - from the stomach to the throat); this cleans up - several annoying glitches. @367 -C751\>620. Allow |\unhbox| and |\unhcopy| in math mode if the box is void. @1110 -* 13 Jul 1983 -# I lectured for four hours at the TUG meeting today after very little sleep! -* 16 Jul 1983 -# The following were suggested by TUG meeting discussions. -L752. Round the value of \\{default_rule} more properly: It should be 26215. @463 -Q753\>700. Fix |\mathaccent| again; it's still not right! - The final height should be the maximum of - the height of accented letter without superscript and - the height of unaccented letter with superscript. @742 -G754. Add a new feature |\newlinechar|. @59 -G755. Allow boxes and rules in discretionaries (suggested by somebody - from Hewlett-Packard). @1121 -I756\>X28. Show all token expansions, not just macros, - when |\tracingcommands|. @367 -C757. Allow |\char| in a |\hyphenation| list. @935 -G758. Introduce a new feature |\aftergroup|; it can be implemented with - \\{save_stack}. @326 -C759. Run the running dimensions to alignment boundaries (suggested - by ARK). @806 -* 17 Jul 1983 -R760. Zero out \\{hyf} values at the edges, so that - weird pattern data cannot lead to Pascal range checks. @965 -R761\>X190. Decrease the |hc| codes for hyphenation, so that code~127 cannot - possibly be matched. @937,962 -C762\>672. Allow whatsits after hyphenatable words. @899 -C763\>604. Represent an italic correction as an explicit kern. @1113 -* 18 Jul 1983 -C764. Allow lowercase letters in file names. @519 -I765. Change the message `|No output file|' to: `|No pages of output|'. @642 -I766. Confirm that a quiet mode is being entered, when error - interaction ends with |Q|, |R|, or |S| (suggested by ARK). @86 -# Version 0.999 was finally installed today; a new program listing has - been printed. -# From now on, I plan to keep all section numbers unchanged. -# I'm done writing Appendix~H; beginning to revise Chapter~20. -* 25 Jul 1983 -C767\>663. Allow space after `|to|' in the |\read| command (FY). @1215 -# To bed at 1pm today. -* 27 Jul 1983 -S768\>665. Stack the current type of\/ |\if|; this precaution is necessary - in general (FY). @498 -# To bed at 2pm today. -* 29 Jul 1983 -E769. Avoid putting a control sequence in the hash table - when it occurs after |\ifx|. (Requested by Math Reviews people.) @507 -# Finished a version of {\sl The \TeX book\/} lacking only Appendices - D, E, and~I, for distribution to interested readers. -# To bed at 10:30pm, planning to arise regularly at 6am for a change. -* 31 Jul 1983 -I770\>766. Call \\{update_terminal} when going quiet (HWT). @86 -* 1 Aug 1983 -C771. Don't put an empty line at the end of an |\input| file! (This simplifies - the rules and the program, and also gets around a bug that occurred - at the end of files with $\\{end_line_char}<0$.) @362 -# The changes above went into Version 0.9999, which was widely distributed. -* 16 Aug 1983 -B772\>665. Rectify a ridiculous gaffe: I initialized $q$ every time the loop - of \\{change_if_limit} was performed! (Found by FY.) @497 -I773\>648. Distinguish `|string|' from `|strings|' when reporting statistics. @1334 -A774. Introduce \\{lx}, to correct a bug in |\xleader| computations - (found by FY). @627 -* 20 Aug 1983 -F775. Don't forget to apply |\/| to ligatures. @1113 -# Today I began to read all previous issues of {\sl TUGboat}, in preparation for - Appendix~D. -* 27 Aug 1983 -I776. Add debugging hack number~16, to help catch subtle data structure bugs. @1339 -E777. Remove redundant setting and resetting of \\{name_in_progress}. @531 -S778\>618. Suppress |\input| during a font size spec; otherwise - \\{cur_name} is clobbered (found by MDS). @1258 -G779. Introduce new conditionals |\ifhbox| and |\ifvbox|. @505 -* 29 Aug 1983 -D780\>750. Test for an empty list, if emptiness will mess up the data structure. - (Found by Todd Allen.) @478 -E781\>624. Use \\{fast_store_new_token} in another place for efficiency. @466 -I782. Say `|has only|' instead of `|has|'. @579 -# These changes yield Version 0.99999, used only at Stanford. -* 30 Aug 1983 -C783. Make funny blank spaces showable. @298 -* 31 Aug 1983 -C784\>754. Make |\newlinechar| affect \\{print_char}, not just \\{print}. @58 -* 4 Sep 1983 -G785. Add new features |\lastkern|, |\lastpenalty|, |\unkern|, |\unpenalty|. - @424,996,1105 -# OK, Appendix D is finished!! -# The above changes have been installed in Version 0.999999. -* 17 Sep 1983 -P786\>548. Don't bother making duplicate font identifiers; that - was overkill, not really needed. @1258 -# Will this be the historic last change to \TeX? -* 18 Sep 1983 -I787. Correct a minor inconsistency, `|display|' not `|displayed|'. @211 -* 20 Sep 1983 -C788\>604. Treat the kerns inserted for accents as explicit kerns. @1125 -* 26 Sep 1983 -I789. Change `|log|' to `|transcript|' in several messages. @535,1335 -# The index was finished today; I mailed the entire {\sl \TeX book\/} to - Massachusetts for final proofreading before publication. -* 1 Oct 1983 -D790. Prevent uninitialized trie positions in case of overflow - (found by Bernd Schulze). @944 -* 7 Oct 1983 -# Henceforth our weekly `\TeX\ lunch' meetings will be called `\MF\ lunch'. -# DRF begins to produce {\sl The \TeX book\/} on our APS phototypesetter. -* 14 Oct 1983 -P791\>633. Ignore spaces at the ends of lines also in |TEX.POOL| (found - by DRF). @52 -D792\>610. Initialize the \\{history} variable at \\{start_here} (DRF). @1332 -* 18 Oct 1983 -I793. Extend \\{runaway} to catch runaway text (suggested by FY). @306 -D794. Reset \\{cur_cs} after \\{back_input}, not after scanning the - `|=|' (found by FY). @1226 -* 24 Oct 1983 -I795\>638. Change the error recovery for bad delimiters, in accordance with - the changed syntax. (Found by Barry Smith.) @1183 -* 9 Nov 1983 -E796. Optimize the code a bit more, based on empirical frequency data gathered - during September and October: In \S45, use the fact that the - result is almost always true. In \S380, delete `{\bf while} - \\{true} {\bf do}' since many compilers implement that badly. - Rewrite \S852 to avoid calling \\{badness} in the most common case. - @45,380,852 -* 3 Dec 1983 -F797. Don't forget to call |error| after the message has been - given (noticed by Gabi Kuper). @500 -# Version 1.0 released today incorporates all of the above. -* 9 Dec 1983 -# Dinner party with 36 guests to celebrate \TeX's coming of age. -* 2 Feb 1984 -S798\>786. Reinstall |\font| precautions that I thought were unnecessary. - I overlooked many problematic possibilities, like - `|{\font\a=x| |\global\a}| |\the\font|' - and `|\font\a=x| |\font\b=x| |\let\b=\undefined| |\the\a|', etc. - (Found by Mike Urban.) The new remedy involves removal of the - \\{font_ident} array and putting the identifiers into a frozen - part of the hash table; so there's a sprinkling of corrections - in lots of modules. But basically the change is quite conservative, - so it shouldn't spawn any new bugs (it says here). @222,267,1257 -* 9 Feb 1984 -S799. Remove the possibility of double interrupt, in a scenario - found by Clint Cuzzo. @1031 -* 12 Feb 1984 -Q800. Improve spacing in a formula like |$(A,<)$|. @764 -* 13 Feb 1984 -A801. Avoid a bad {\bf goto}, as diagnosed by Clint Cuzzo and George O'Connor. - (Must not go directly to \\{switch}.) @346 -E802. Conserve string pool space by not storing file name in two - guises (suggested by DRF). @537 -* 26 Feb 1984 -I803. Make scaled output look cleaner by printing fewer decimals whenever - this involves no loss of accuracy. (Suggested by \MF\ development.) @103 -* 2 Mar 1984 -R804. Maintain 17-digit accuracy, not 16; now - constants like `|.00000762939453126pt|' will round correctly. @452 -* 16 Mar 1984 -R805. Plug a loophole that permitted recursion in \\{get_next}, by disallowing - deletions in \\{check_outer_validity}. @336 -* 24 Mar 1984 -I806. Open the terminal before trying to wake it up, when the program starts bad. - @1332 -* 27 Mar 1984 -R807. Check that $k<63$, to avoid the - |\patterns{xxx...xxxdxxxdxxx}| anomaly found by Jacques D\'esarm\'enien. @962 -* 11 Apr 1984 -F808. Supply code for the missing case \\{adjust_node} in \\{copy_node_list}. @206 -# Yoicks, how could serious bugs like that have escaped detection? -* 11 Jun 1984 -D809\>627. Initialize \\{char_base}, etc., for \\{null_font}. - (Found by Nick Briggs.) @552 -R810. Clear the \\{buffer} array initially (Briggs). @331 -* 21 Jun 1984 -C811. Look ahead for ligature or kern after a |\chardef|'d item - (D\'esarm\'enien). @1038 -* 4 Jul 1984 -R812. Make the quarterword constraint explicit with a - new `\\{bad}' case (19). @111 -* 7 Jul 1984 -E813. Optimize \\{firm_up_the_line} slightly, - to be consistent with the \MF\ program. @363 -* 8 Jul 1984 -I814. Give additional diagnostics when |\tracingmacros>1|. @323 -# The changes above were incorporated in Version 1.1, released July 9, 1984. -* 27 Jul 1984 -I815. Say `|see| |the| |transcript| |file|' after handling offline |\show| - commands. (Suggested by \MF.) @1298 -* 20 Oct 1984 -I816. Allow `|0|' in response to error prompts. @84 -# Those two changes led to Version 1.2. -* 25 Nov 1984 -R817. Don't forget to check for \\{null} before looking at subfields - of a node. (This was ``dirty Pascal,'' with two quarterword 0's - read as a halfword.) @846 -R818. Ditto in another place! @939 -E819. Remove the fixed-at-compile-time - partition between lower and upper memory. @116,125,162 -# This major change in memory management - completes Version 1.3, which was published in preliminary - looseleaf form as `\TeX: The Program'. -* 20 Dec 1984 -R820. Keep the \\{node_size} field from overflowing if the lower part of memory - is too large. @125 -# That was another bug in existence from the beginning! -* 5 Jan 1985 -I821. Improve the missing-format-file error (DRF). @524 -* 7 Jan 1985 -I822. Update the terminal right away so that the welcoming message will - appear as soon as possible (DRF). @61 -* 23 Jan 1985 -I823. Convey more uncertainty in the - help message at times of \\{confusion}. @95 -I824\>610. Improve the \\{history} logic in the \\{warning_issued} case. @245 -* 18 Feb 1985 -P825\>810. Stick to standard Pascal: Don't - use \\{first} in a {\bf for} loop. [Some procedures ``threaten'' it - globally, according to British Standard 6192, section 6.8.3.9.] - (Pointed out by CET.) @331 -* 11 Apr 1985 -S826. Prevent nonexistent characters from being output by - unusual combinations of ligatures and hyphenation. @915 -* 15 Apr 1985 -L827\>819. Compute memory usage correctly in |INITEX|; the previous number - was wrong because of a |WEB| text macro without parentheses (DRF). @164 -* 16 Apr 1985 -E828. Speed up \\{flush_list} by not calling \\{free_avail} (DRF). @123 -* 17 Apr 1985 -A829\>788. Introduce a special kind of kern for accent positioning; - it must not disappear after a line break. @837,879,1125 -* 18 Apr 1985 -R830\>755. Prevent |\lastbox| and |\unkern| from removing discretionary replacements. - @1081,1105 -# That completes Version 1.4. -* 26 Apr 1985 -C831. Don't try \\{\TeX_area} if a nonstandard file area has been specified - (DRF). @537 -# That was \#401 in \TeX78; I never learn! -* 30 Apr 1985 -C832\>754. Eliminate the limitation on |\write| length; the reason for it - has disappeared (Nancy Tuma). @1370 -* 8 May 1985 -D833\>819. Allocate two words for the head of the \\{active} list (CET). @162 -* 11 May 1985 -I834. Change \\{wterm} to \\{wterm_ln} after a bad beginning (Bill Gropp). @1332 -E835\>806. Don't open the terminal twice (CET). @1332 -* 22 May 1985 -R836. Test for \\{batch_mode} after trying to open the transcript file, - not before (DRF). @92 -R837. Be prepared for string pool overflow while reading the command line! - (This bug was first found in \MF, when it could occur more easily.) @525 -* 7 Aug 1985 -A838. Fix a bug in |\edef\foo{\iffalse\fi\the\toks0}|: \TeX\ should stay in the - loop when expanding non-|\the|. (Found by Dan Brotsky.) @478 -# The above changes were incorporated in Version 1.5. -* 27 Nov 1985 -C839\>764. Make `|plain|' a lowercase name, for consistency with the manual. @521 -I840\>669. Wake up the terminal for |\show| commands. @1294,1297 -# The above changes were incorporated in Version 2.0, which was published - as Volume~B of the {\sl Computers \& Typesetting\/} series. -* 15 Dec 1986 -I841. Punctuate the Poirot help message more carefully. @1283 -* 28 Jan 1987 -R842. Make sure that \\{max_in_open} doesn't exceed 127 (DRF). @14 -D843\>680. Don't allow a |\kern| to be clobbered at the end of a pre-break list - when a discretionary break is taken. (A missing `{\bf else}' was the - source of the error, diagnosed incorrectly before.) @881 -D844. Take account of discarded nodes when computing the background width - after a discretionary. @840 -# That was the first really serious bug detected for more than 17 months! I found it - while experimenting with right-to-left extensions. -# Version 2.1 was released on January 26, 1987. -* 5 Feb 1987 -E845. Remove cases in \\{shorthand_def} that cannot occur (found by Pat Monardo). @1224 -* 14 Apr 1987 -R846. Improve robustness of data structure display - when debugging (Ronaldo Am\'a). @174,182 -* 21 Apr 1987 -E847. Make the storage allocation algorithm more elegant and efficient. @127 -* 22 Apr 1987 -A848\>742. Calculate the empty-line condition properly when \\{end_line_char} is - absent. @360 -# The previous three changes were found while I was teaching a class based - on Volume~B; they led to Version 2.2. -* 28 Apr 1987 -E849. Avoid closing a file when \TeX\ knows that it isn't open (JS). @560 -* 3 Aug 1987 -S850. Clean up unfinished output if it's necessary to - \\{jump_out} (Klaus Gunterman). @642 -# That makes Version 2.3; subsequent version numbers won't be logged here. -* 19 Aug 1987 -A851. Indent rules properly in cases like\hfil\break - |\hangindent=1pt$$\halign{...\cr\noalign{\hrule}}$$|. @806 -* 20 Aug 1987 -S852. Introduce \\{co_backup} because of cases like - |\hskip 0pt plus 1fil\ifdim| (Alan Guth). @366 -* 9 Nov 1987 -S853. Change the calculation for number of leader boxes, so that - it won't be too sensitive to roundoff error near exact multiples - (M. F. Bridgland). @626 -* 17 Nov 1987 -A854. Replace my stupid algorithm - for fixed-point multiplication of negatives (WGS). @572 -* 12 Dec 1987 -B855. Fix a typo in the initialization of hyphenation tables (PB). @952 -# That error was almost completely harmless, thus undetectable, - except if some |\lccode| is~1 and no |\patterns| are given. -* 23 Dec 1987 -S856\>564. Be more cautious when ``relaxing'' a previously undefined |\csname|; - you might be inside a group (CET). @372 -* 20 Apr 1988 -S857. Make sure \\{temp_head} is well-formed whenever it can be - printed in a ``runaway'' message: Consider constructions like - |\outer\def\a0{}\a\a| (Silvio Levy). @391 -* 24 Apr 1988 -S858\>618. Avoid conflicting use of the string pool in constructions like - |\def\\#1{}\input a\\\z| (Robert Messer). @260 -* 10 May 1988 -R859. Amend the |\patterns| data structure when $\\{trie_min}=0$ - (PB). @951,953 -* 25 May 1988 -R860. Guarantee that \\{trie_pointer} cannot be out of range. @923 -S861\>618. Avoid additional bugs like \#858 in constructions - like |\input a\romannumeral1|, etc. @464,465,470 -R862\>618. Prevent similar string pool confusion that could occur - during the processing of |**\input\romannumeral6|. @525 -* 19 Jun 1988 -S863\>819. Prevent a negative dividend from rounding upward, - causing a loop (CET). @126 -E864\>819. Adopt a smoother allocation strategy when - memory is nearly gone (CET). @126 -* 20 Jun 1988 -D865\>852. Initialize \\{cur_order}, now that it's being backed up - (Tsunetoshi Hayashi). @439 -* 6 Nov 1988 -S866\>612. Disable \\{fatal_error} in \\{prompt_input}, so that - \\{open_log_file} can use it safely (Tim Morgan). @71 -S867\>836. Force terminal output whenever \\{open_log_file} fails. @535 -* 14 Dec 1988 -P868\>866. Restore \\{fatal_error} in \\{prompt_input}, but don't - let it be unsafe for \\{open_log_file}. @92,534 -* 23 Jan 1989 -D869. Give $q$ a legal value when recovering from ``infinite shrinkage'' - error. @976,1004 -* 17 Feb 1989 -D870\>758. Avoid spurious error message for |\aftergroup\relax\dump| by avoiding - inaccessible |\aftergroup| tokens (FM and Rainer Sch\"opf). @280 -* 20 Mar 1989 -R871. Don't refer to \\{link}(\\{null}) even when it ``can't happen'' - (PB). @791 -* 7 Jun 1989 -S872. Avoid confusion from |$$\begingroup\halign{#\cr}$$| (FM). @1130 -* 20 Jun 1989 -S873. Put fraction digits into dynamic memory, not the global \\{dig} array, - because of constructions like |.5\ifdim.6| (FM). @452 -* 17 Jul 1989 -S874. Prevent embarrassing attempts to report errors before the string - mechanism has been fully initialized, for example when the - command line exceeds the buffer size (WGS). @31 -* 16 Aug 1989 -M875. Allow integer products to be 31 bits long (FM). @105 -* 31 Aug 1989 -C876\>441. Increase the number of tokens shown by \\{token_show} - (J. Lavagnino). @295 -S877. Avoid confusion from |$$\begingroup\eqno$$| (FM). @1140 -# The recent TUG meeting turned out to be an extend-\TeX-for-the-nineties - party! I agreed that some extensions for non-English languages - ought to be made while I still knew how to do them. (In other words, - I broke my firm commitment to keeping \TeX\ completely stable; - but in this case nobody objected.) The following eleven changes - were coded during the month of September. -* 30 Sep 1989 -G878. Install major change allowing general 8-bit code input. @38,352 -G879. Install major change allowing multiple hyphenation tables - (M. Ferguson). @923 -G880. Introduce new parameters |\lefthyphenmin| and |\righthyphenmin|. @923 -G881. Introduce major new ligature capabilities including implicit - boundary characters. @908,1037 -G882. Install new |\inputlineno| feature suggested by MDS. @424 -G883. Install new |\holdinginserts| feature suggested by FM. @1014 -G884. Install new |\badness| feature. @424,664 -G885. Install new |\emergencystretch| feature. @863 -G886. Install new |\errorcontextlines| feature suggested by FM. @311 -S887. Recover from anomaly when hyphenation |char_warning| clobbers - |old_setting|. @863 -P888. Make it easier to change the format extension (Don Hosek). @520,1328 -* 16 Oct 1989 -R889. Avoid range check in null font with |bc=256| (PB). @565 -* 22 Nov 1989 -S890\>856. Prevent \\{save_stack} conflicts in - |{\hbox\expandafter{\csname\endcsname}}| and\kern-3pt\break - similar constructions (WGS). @645,1117 -S891\>858. System-dependent parts of file names must be addressed relatively, - not absolutely (FM and Rainer Sch\"opf). @516,517 -* 3 Dec 1989 -G892\>880. Allow different hyphenmins in the same paragraph (M. Ferguson). @1376 -S893. Distinguish |\par| from characters on |\if| tests. (MVL). @334 -S894\>378. Alignments need to be more robust against malicious - attacks (MVL). @782 -C895. Don't let kerns in discretionaries disappear at breaks (MVL). @869 -Q896\>881. Make the new hyphenation reconstruction procedure less cautious, - so that it doesn't lose hyphens found by the old method. @914 -* 11 Dec 1989 -D897\>879. Make an undumped trie dumpable again (PB). @1325 -* 18 Dec 1989 -G898\>588. Allow access to page totals in |\output| routines - (FM and Chris Rowley). @421 -* 22 Jan 1990 -R899\>611. Recognize more cases of unbalanced |\output| (CET). @1026 -* 29 Jan 1990 -S900\>758. Make |\aftergroup| work properly after |\eqno| (Michael Downes). - @1194 -* 1 Feb 1990 -S901\>878. Fix one more case of \\{end_line_char_inactive} (WGS). @360 -* 22 Feb 1990 -R902. Don't lose the last active node when total demerits are very high (FM). - @836,854 -* 13 Mar 1990 -D903. Doublecheck math fonts after making equation number (MVL). @1194 -D904. Don't forget to rule out charnodes before testing \\{type} (MVL). - @805,1202 -* 23 Mar 1990 -F905\>881. Don't change the font of punctuation preceding a hyphenated word - (Scott C. Allendorf). @903 -I906. Balance the parentheses shown on the terminal during normal runs. @1335 -E907. Optimize |\ifx\p\q| after |\let\p=\q| (MVL). @508 -S908. Treat migration properly in displays (MVL). @1199,1205 -# We're now up to Version 3.0; I sincerely hope all bugs have been found. -* 11 May 1990 -F909\>881. Initialize |\nullfont| ligature parameters (Lance Carnes). @552 -* 22 July 1990 -S910\>579. Treat |\prevgraf| as zero within |\write| (Bogus\l aw Jackowski). - @422 -* 26 July 1990 -S911. Report `|l.1|' when first line of file overflows buffer - (George Russell). @538 -* 5 December 1990 -S912\>878. Translate unprintable characters in font identifiers (WGS). @63 -* 28 December 1990 -R913. Avoid range check when there are 65536 or more pages (Eberhard Mattes). - @642 -* 20 September 1991 -I914\>878. Improve error message for |\mathchar| out of range. @436 -S915\>878. Retain unprintable internal strings in 8-bit form (FM). @59 -S916\>881. Retain right punctuation context for ligature reconstruction - (problem found by Brian Hamilton Kelly). @903 -* 10 January 1992 -S917\>881. Also avoid producing a double kern at boundary (CET). @897 -S918. Disallow |\setbox| where it doesn't work (Robert Hunt). @1241,1270 -S919. Robustify |\mskip| and |\mkern| in presence of negative quad (WGS). - @716,717 -S920\>679. Defend against `|}{|' in |\read| (Michael Downes). @483 -E921\>798. Save string memory if font occurs repeatedly (Bogus\l aw Jackowski). - @1260 -S922\>784. Don't let |\newlinechar| interrupt unprintable expansion (Bernd - Raichle). @59,60 -* 7 February 1992 -D923\>881. Restore |cur_l| properly when boundary character doesn't exist - (Mattes and Raichle). @1036 -* 17 July 1992 -C924\>892. Use current language at beginning of horizontal mode (Rainer - Sch\"opf and CET). @1091,1200 -* 17 December 1992 -R925\>879. Avoid (harmless) range errors (Philip Taylor and CET). @934,960 -* 25 February 1993 -C926\>881. Protect kerns inserted by boundary characters (William Baxter). - @837,866 -S927\>917. Don't let boundary kern disappear after hyphenation. @897 -* 26 June 1993 -R928\>668. Avoid potential future bug (Peter Breitenlohner). @628,637 -* 17 December 1993 -S929\>881. Boundary character representation shouldn't depend on the font - memory size (Berthold Horn). @549,1323 -* 10 March 1994 -R930. Huge font parameter number may exceed array bound (CET). @549 -* 4 September 1994 -F931\>926. Math kerns are explicit (Walter Carlip). @717 -R932. Avoid overflow on huge real-to-integer conversion. @625,634 -* 19 March 1995 -R933. Avoid spurious reference counts in format files (PB). @1335 -* 23 November 1998 -R934. Make sure that TeX is certifiably Y2K-safe. @1328 -* 12 July 1999 -A935\>255. |\xleaders| often drops the final box (Hiroshi Nakashima). @627,636 -* 30 August 2001 -R789. Don't allow a million unbalanced braces followed by |\cr| - outside of any alignment (Ralf Roth). @789 -R790. Don't allow end-template except at end of template (Roth). @325,1131 -* 30 September 2002 -Q791. Improve rounding of glue during output (M. F. Bridgland). @625,634 -\relax -\bye - -Up to a point it is better to let the snags [bugs] be there -than to spend such time in design that there are none -(how many decades would this course take?). --- A M Turing - Proposals for Development in the Mathematics Division - of an Automatic Computing Engine (ACE) - Report E882, Executive Committee, National Physical Laboratory (NPL) - 1945; reprinted in April 1972 as NPL report Com Sci 57 - page 18 - quoted by Carpenter and Doran in The Computer Journal 20 (1977), 273. - -DRF David Fuchs -HWT Howard Trickey -FY Frank Yellin -LL Leslie Lamport -JS Jim Sterken -ARK Arthur Keller -CET Chris Thompson -FM Frank Mittelbach (added subsequent to publication of paper) -PB Peter Breitenlohner (ditto) -WGS Wayne G. Sullivan (ditto) -MVL Marc van Leeuwen (ditto) -MDS Michael D. Spivak (ditto) diff --git a/Master/texmf-dist/doc/generic/knuth/source/errata/logmac.tex b/Master/texmf-dist/doc/generic/knuth/source/errata/logmac.tex deleted file mode 100644 index 8719efc497d..00000000000 --- a/Master/texmf-dist/doc/generic/knuth/source/errata/logmac.tex +++ /dev/null @@ -1,107 +0,0 @@ -% macros for the appendix to "Errors of TeX" paper -\input manmac -\voffset=-.3in -\catcode`\^=7 % disable the indexing stuff -\font\sltt=cmsltt9 -\font\logosl=logosl9 -\ninepoint -\vsize=48pc \pageheight=\vsize -\hsize=33.5pc - -\def\\{\bgroup\catcode`_=\active\identifier} -{\catcode`_=\active \global\let_=\_} -\def\identifier#1{\hbox{\it#1\/\kern.05em}\egroup} % italic type for identifiers - -\newdimen\codesize \setbox0=\hbox{\enspace M} \codesize=\wd0 -\setbox0=\hbox{\thinspace\S1111\kern\codesize} \rightskip=\wd0 -\newdimen\itemnosize \setbox0=\hbox{\bf999} \itemnosize=\wd0 -\setbox0=\hbox{$999\mapsto{}$\kern\itemnosize\enspace} \parindent=\wd0 -\newdimen\datemar \setbox0=\hbox{\bf 15 Mar 1977} -\datemar=\hsize \advance\datemar-\wd0 \divide\datemar2 -\newdimen\hangamount \hangamount=\parindent \advance\hangamount 1em -\everypar{\global\hangindent=\hangamount} -\parfillskip=-\rightskip -\finalhyphendemerits=0 -\interlinepenalty=100 -\smallskipamount=3pt plus 2pt -\def\smallbreak{\fin\penalty-50\smallskip} - -\newbox\predec % for predecessor "mapsto" info -\newbox\code % for the code letter -\newbox\texsec % for TeX section numbers -\newbox\cbox % the symbol used on commentlines -\newbox\dbox % empty box used after datelines -\setbox\dbox=\hbox to\datemar{} -\setbox\cbox=\hbox to\itemnosize{\hfil$\bullet$} - -\newif\ifnothing \newif\ifnobreak -\def\fin{\ifnothing\nothingfalse\else\endgroup - \unskip\nobreak\hfil\penalty500\enspace\null\nobreak\hfil\box\texsec - \box\code\endgraf\ifnobreak\nobreakfalse\nobreak\fi\fi} - -\catcode`\ =12 % tabs are ordinary characters -\catcode`@=\active % @ signs denote a TeX section reference -{\obeylines \gdef@#1 - {\global\setbox\texsec=\hbox{\S$#1$}\lookahead}} -\chardef\@=`\@ -{\catcode`X=\active \gdef X{\X}} -\def\X{{\eightbf X}} -\def\lightX{\hbox{\eightrm X}} -\def\>#1\relax{\global\setbox\predec=\hbox{\let\X=\lightX - $#1\mapsto{}$}} % previous bug ref - -\def\checkvalid#1{\expandafter\ifx\csname#1!\endcsname\okay\else\invalidcode\fi} -\def\okay{\okay} -\def\makevalid#1{\expandafter\let\csname#1!\endcsname=\okay} -\makevalid A % algorithm -\makevalid B % blunder -\makevalid C % cleanup -\makevalid D % data structure -\makevalid E % efficiency -\makevalid F % forgotten case -\makevalid G % generalization -\makevalid I % interaction -\makevalid L % language -\makevalid M % mismatch -\makevalid P % program organization -\makevalid Q % quality -\makevalid R % robustness -\makevalid S % surprise -\makevalid T % typo - -\def\lookahead{\futurelet\next\looky} % we'll do this at end of every line -\def\looky{\if\next \let\cont\continuationline % tab mark - \else\if\next*\let\cont\dateline % asterisk - \else\if\next##\let\cont\commentline % sharp sign - \else\if\next\relax\let\cont\endit % \relax (gets us out) - \else\let\cont\dataline\fi\fi\fi\fi\cont} % otherwise should be a code letter -\def\continuationline { } % insert space if a tab mark starts the next line -\def\dateline* {\smallbreak\begingroup\bf\hfill\nobreaktrue - \global\setbox\code=\copy\dbox} -\def\dataline#1{\fin\checkvalid#1% - \global\setbox\code=\hbox to\codesize{\enspace - \hskip0pt plus 3fil\rm#1\hskip0pt plus1fil}% - \begingroup\rm\catcode`X=\active\itemnumber} -\def\itemnumber#1.{\catcode`X=11\setbox0=\hbox to\itemnosize{\bf\hss#1\relax}% - \setbox2=\hbox{\bf#1\relax}\ifdim\wd2>\wd0 \setbox0=\box2 \fi - \textindent{\hfil\box\predec\box0}} -\def\commentline{\fin\afterassignment\begincomment\let\next} -\def\begincomment{\begingroup\let\tt=\sltt - \let\MF=\slMF\sl\textindent{\hfil\copy\cbox}} - -\def\leftheadline{\hbox to \hsize{% - \vbox to 10pt{}% strut to position the baseline - {\tenrm\folio\kern1pc}% folio to left of text - \hfil\eightrm D. \ E. \ KNUTH\hfil% running head - }} -\def\rightheadline{\hbox to \hsize{% - \vbox to 10pt{}% strut to position the baseline - \hfil\eightrm THE \ ERRORS \ OF \ \TeX\hfil% running head - {\kern1pc\tenrm\folio}% folio to right of text - }} - -\def\O#1{\hbox{\rm\char'23\kern-.2em\it#1\/\kern.05em}} % octal constant -\def\slMF{{\logosl META}\-{\logosl FONT}} - -\def\endit{\fin\catcode`\^^M=5\let\par=\endgraf} -\let\par=\lookahead \obeylines \nothingtrue diff --git a/Master/texmf-dist/doc/generic/knuth/source/tex/glue.web b/Master/texmf-dist/doc/generic/knuth/source/tex/glue.web deleted file mode 100644 index 38a6d667c88..00000000000 --- a/Master/texmf-dist/doc/generic/knuth/source/tex/glue.web +++ /dev/null @@ -1,421 +0,0 @@ -% This program by D. E. Knuth is not copyrighted and can be used freely. -% It was written on 18 Dec 1981 and revised on 24 May 1991. - -% Here is TeX material that gets inserted after \input webmac -\def\PASCAL{Pascal} -\font\eightrm=cmr8 - -\def\title{GLUE} -\def\topofcontents{\null - \def\titlepage{F} % include headline on the contents page - \def\rheader{\mainfont\hfil \contentspagenumber} - \vfill - \centerline{\titlefont Fixed-Point Glue Setting} - \vfill} -\def\botofcontents{\vfill - \centerline{\hsize 6in\baselineskip9pt - \vbox{\eightrm\baselineskip9pt\noindent - The preparation of this report - was supported in part by the National Science - Foundation under grants IST-7921977 and MCS-7723728; - by Office of Naval Research grant N00014-81-K-0330; - and by the IBM Corporation. `\TeX' is a - trademark of the American Mathematical Society.}}} - -@* Introduction. -If \TeX\ is being implemented on a microcomputer that does 32-bit -addition and subtraction, but with multiplication and division restricted to -multipliers and divisors that are either powers of~2 or positive -integers less than~$2^{15}$, it can still do the computations associated -with the setting of glue in a suitable way. This program illustrates one -solution to the problem. - -Another purpose of this program is to provide the first ``short'' example -of the use of \.{WEB}. - -@ The program itself is written in standard \PASCAL. It begins with a -normal program header, most of which will be filled in with other parts of this -``web'' as we are ready to introduce them. -@^program header@> - -@p program GLUE(@!input,@!output); - type @<Types in the outer block@>@; - var @<Globals in the outer block@>@; - procedure initialize; {this procedure gets things started} - var @<Local variables for initialization@>@; - begin @<Set initial values@>; - end; - -@ Here are two macros for common programming idioms. - -@d incr(#) == #:=#+1 {increase a variable by unity} -@d decr(#) == #:=#-1 {decrease a variable by unity} - -@* The problem and a solution. -We are concerned here with the ``setting of glue'' that occurs when a -\TeX\ box is being packaged. Let $x_1$, \dots,~$x_n$ be integers whose sum -$s=x_1+\cdots+x_n$ is positive, and let $t$ be another positive integer. -These $x_i$ represent scaled amounts of glue in units of sp (scaled -points), where one sp is $2^{-16}$ of a printer's point. The other -quantity $t$ represents the total by which the glue should stretch or -shrink. Following the conventions of \TeX82, we will assume that the -integers we deal with are less than $2^{31}$ in absolute value. - -After the glue has been set, the actual amounts of incremental glue space -(in~sp) will be the integers $f(x_1)$, \dots,~$f(x_n)$, where $f$ is a -function that we wish to compute. We want $f(x)$ to be nearly proportional -to~$x$, and we also want the sum $f(x_1)+\cdots+f(x_n)$ to be nearly -equal to~$t$. If we were using floating-point arithmetic, we would simply -compute $f(x)\equiv(t/s)\cdot x$ and hope for the best; but the goal here -is to compute a suitable~$f$ using only the fixed-point arithmetic operations -of a typical ``16-bit microcomputer.'' - -The solution adopted here is to determine integers $a$, $b$, $c$ such that -$$f(x)=\bigl\lfloor 2^{-b}c\lfloor 2^{-a}x\rfloor\bigr\rfloor$$ -if $x$ is nonnegative. Thus, we take $x$ and shift it right by $a$~bits, -then multiply by~$c$ (which is $2^{15}$ or less), and shift the product -right by $b$~bits. The quantities $a$, $b$, and~$c$ are to be chosen -so that this calculation doesn't cause overflow and so that $f(x_1)+\cdots -+f(x_n)$ is reasonably close to~$t$. - -The following method is used to calculate $a$ and~$b$: -Suppose $$y=\max_{1\le i\le n}\vert x_i\vert\,.$$ -Let $d$ and $e$ be the smallest integers such that $t<2^ds$ and $y<2^e$. -Since $s$ and~$t$ are less than~$2^{31}$, we have $-30\le d\le31$ and -$1\le e\le31$. An error message is given if $d+e\ge31$; in such a case -some $x_m$ has $\vert x_m\vert\ge 2^{e-1}$ and we are trying to change -$\vert x_m\vert$ to $\vert(t/s)x_m\vert\ge2^{d+e-2}\ge2^{30}$~sp, which -\TeX\ does not permit. (Consider, for example, the ``worst case'' situation -$x_1=2^{30}+1$, $x_2=-2^{30}$, $t=2^{31}-1$; surely we need not bother -trying to accommodate such anomalous combinations of values.) On the other -hand if $d+e\le31$, we set $a=e-16$ and $b=31-d-e$. Notice that this choice -of~$a$ guarantees that $\lfloor2^{-a}\vert x_i\vert\rfloor<2^{16}$. We will -choose~$c$ to be at most~$2^{15}$, so that the product will be less -than~$2^{31}$. - -The computation of $c$ is the tricky part. -@^hairy mathematics@> -The ``ideal'' value for $c$ would be $\rho=2^{a+b}t/s$, since $f(x)$ should -be approximately $(t/s)\cdot x$. Furthermore it is better to have $c$ slightly -larger than~$\rho$, instead of slightly smaller, since the other operations -in $f(x)$ have a downward bias. Therefore we shall compute $c=\lceil\rho\rceil$. -Since $2^{a+b}t/s<2^{a+b+d}=2^{15}$, we have $c\le2^{15}$ as desired. - -We want to compute $c=\lceil\rho\rceil$ exactly in all cases. There is no -difficulty if $s<2^{15}$, since $c$ can be computed directly using the -formula $c=\bigl\lfloor(2^{a+b}t+s-1)/s\bigr\rfloor$; overflow will not -occur since $2^{a+b}t<2^{15}s<2^{30}$. - -Otherwise let $s=s_12^l+s_2$, where $2^{14}\le s_1<2^{15}$ and $0\le s_2<2^l$. -We will essentially carry out a long division. Let $t$ be ``normalized'' -so that $2^{30}\le2^ht<2^{31}$ for some~$h$. Then we form the quotient and -remainder of $2^ht$ divided by~$s_1$, -$$ 2^ht=qs_1+r_0, \qquad 0\le r_0<s_1.$$ -It follows that $2^{h+l}t-qs=2^lr_0-qs_2=r$, say. If $0\ge r>-s$ we have -$q=\lceil2^{h+l}t/s\rceil$; otherwise we can replace $(q,r)$ by -$(q\pm1,r\mp s)$ repeatedly until $r$ is in the correct range. It is not -difficult to prove that $q$ needs to be increased at most once and decreased -at most seven times, since $2^lr_0-qs_2<2^ls_1\le s$ and since -$qs_2/s\le(2^ht/s_1)(s_2/2^ls_1)<2^{31}/s_1^2\le8$. Finally, we have -$a+b-h-l=-1$ or~$-2$, since $2^{28+l}\le2^{14}s=2^{a+b+d-1}s\le2^{a+b}t< -2^{a+b+d}s=2^{15}s<2^{30+l}$ and $2^{30}\le2^ht<2^{31}$. Hence -$c=\lceil2^{a+b-h-l}q\rceil=\lceil{1\over2}q\rceil$ or~$\lceil{1\over4}q\rceil$. - -An error analysis shows that these values of $a$, $b$, and $c$ work -satisfactorily, except in unusual cases where we wouldn't expect them to. -@^error analysis@> -When $x\ge0$ we have -$$\eqalign{f(x)&=2^{-b}(2^{a+b}t/s+\theta_0)(2^{-a}x-\theta_1)-\theta_2\cr -&=(t/s)x+\theta_02^{-a-b}x-\theta_12^at/s-2^{-b}\theta_0\theta_1-\theta_2\cr}$$ -where $0\le\theta_0,\theta_1,\theta_2<1$. Now $0\le\theta_02^{-a-b}x -<2^{e-a-b}=2^{d+e-15}$ and $0\le\theta_12^at/s<2^{a+d}=2^{d+e-16}$, and -the other two terms are negligible. Therefore $f(x_1)+\cdots+f(x_n)$ differs -from~$t$ by at most about $2^{d+e-15}n$. Since $2^{d+e}$ is larger than -$(t/s)y$, which is the largest stretching or shrinking of glue after expansion, -the error is at worst about $n/32000$ times as much as this, so it is quite -reasonable. For example, even if fill glue is being used to stretch -20 inches, the error will still be less than $1\over1600$ of an inch. - -@ To sum up: Given the positive integers $s$, $t$, and $y$ as above, we -set $$a\gets\lfloor\lg y\rfloor-15,\qquad b\gets29-\lfloor\lg y\rfloor- -\lfloor\lg t/s\rfloor,\qquad\hbox{and}\qquad c\gets\lceil2^{a+b}t/s\rceil.$$ -The implementation below shows how to do the job in \PASCAL\ without using -large numbers. - -@ \TeX\ wants to have the glue-setting information in a 32-bit data type -called |glue_ratio|. The \PASCAL\ implementation of \TeX82 has |glue_ratio -=real|, but alternative definitions of |glue_ratio| are explicitly allowed. - -For our purposes we shall let |glue_ratio| be a record that is packed with -three fields: The |a_part| will hold the positive integer |a+16|, the -|b_part| will hold the nonnegative integer~|b|, and the |c_part| will hold -the nonnegative integer~|c|. When the formulas above tell us to take -|b>30|, we might as well set |c:=0| instead, because |f(x)| will be -zero in all cases when |b>30|. Note that we have only about 25 bits of -information in all, so it should fit in 32 bits with ease. - -@<Types...@>= -@!glue_ratio=packed record - @!a_part: 1..31; {the quantity |e=a+16| in our derivation} - @!b_part: 0..30; {the quantity |b| in our derivation} - @!c_part: 0..@'100000; {the quantity |c| in our derivation} - end; -@!scaled = integer; {this data type is used for quantities in sp units} - -@ The real problem is to define the procedures that \TeX\ needs to -deal with such |glue_ratio| values: -(a)~Given scaled numbers |s|, |t|, and~|y| as above, to compute the -corresponding |glue_ratio|. -(b)~Given a nonnegative scaled number~|x| and a |glue_ratio|~|g|, to -compute the scaled number~|f(x)|. -(c)~Given a |glue_ratio|~|g|, to print out a decimal equivalent of -|g| for diagnostic purposes. - -The procedures below can be incorporated into \TeX82 via a change file -without great difficulty. A few modifications will be needed, because -\TeX's |glue_ratio| values can be negative in unusual cases---when the -amount of stretchability or shrinkability is less than zero. Negative -values in the |c_part| will handle such problems, if proper care is -taken. The error message below should either become a warning message -or a call to \TeX's |print_err| routine; in the latter case, an -@^error message@> -appropriate help message should be given, stating that glue cannot -stretch to more than 18~feet long, but that it's OK to proceed with -fingers crossed. - -@*Glue multiplication. -The easiest procedure of the three just mentioned is the one that is -needed most often, namely, the computation of~|f(x)|. - -\PASCAL\ doesn't have built-in binary shift commands or built-in exponentiation, -although many computers do have this capability. Therefore our arithmetic -routines use an array called `|two_to_the|', containing powers of~two. -Divisions by powers of two are never done in the programs below when the -dividend is negative, so the operations can safely be replaced by right -shifts on machines for which this is most appropriate. (Contrary to popular -opinion, the operation `|x div 2|' is not the same as shifting |x| -right one binary place, on a machine with two's complement arithmetic, -when |x| is a negative odd integer. But division -{\it is\/} equivalent to shifting when |x| is nonnegative.) - -@<Globals...@>= -@!two_to_the: array[0..30] of integer; {$|two_to_the|[k]=2^k$} - -@ @<Local variables for init...@>= -@!k:1..30; {an index for initializing |two_to_the|} - -@ @<Set init...@>= -two_to_the[0]:=1; -for k:=1 to 30 do two_to_the[k]:=two_to_the[k-1]+two_to_the[k-1]; - -@ We will use the abbreviations |ga|, |gb|, and |gc| as convenient -alternatives to \PASCAL's \&{with} statement. The glue-multiplication -function |f|, which replaces several occurrences of the `|float|' macro -in \TeX82, is now easy to state: - -@d ga==g.a_part -@d gb==g.b_part -@d gc==g.c_part - -@p function glue_mult(@!x:scaled;@!g:glue_ratio):integer; - {returns |f(x)| as above, assuming that |x>=0|} -begin if ga>16 then x:=x div two_to_the[ga-16] {right shift by |a| places} -else x:=x*two_to_the[16-ga]; {left shift by |-a| places} -glue_mult:=(x*gc) div two_to_the[gb]; {right shift by |b| places} -end; {note that |b| may be as large as 30} - -@*Glue setting. -The |glue_fix| procedure computes |a|, |b|, and |c| by the method -explained above. \TeX\ does not normally compute the quantity~|y|, but -it could be made to do so without great difficulty. - -This procedure replaces several occurrences of the `|unfloat|' macro in -\TeX82. It would be written as a function that returns a |glue_ratio|, -if \PASCAL\ would allow functions to produce records as values. - -@p procedure glue_fix(@!s,@!t,@!y:scaled; var@!g:glue_ratio); -var @!a,@!b,@!c:integer; {components of the desired ratio} -@!k,@!h:integer; {$30-\lfloor\lg s\rfloor$, $30-\lfloor\lg t\rfloor$} -@!s0:integer; {original (unnormalized) value of |s|} -@!q,@!r,@!s1:integer; {quotient, remainder, divisor} -@!w:integer; {$2^l$, where $l=16-k$} -begin @<Normalize |s|, |t|, and |y|, computing |a|, |k|, and |h|@>; -if t<s then b:=15-a-k+h@+else b:=14-a-k+h; -if (b<0) or (b>30) then - begin if b<0 then write_ln('! Excessive glue.'); {error message} -@^error message@> - b:=0; c:=0; {make |f(x)| identically zero} - end -else begin if k>=16 then {easy case, $s_0<2^{15}$} - c:=(t div two_to_the[h-a-b]+s0-1) div s0 {here |1<=h-a-b<=k-14<=16|} - else @<Compute |c| by long division@>; - end; -ga:=a+16; gb:=b; gc:=c; -end; - -@ @<Normalize |s|, |t|, and |y|, computing |a|, |k|, and |h|@>= -begin a:=15; k:=0; h:=0; s0:=s; -while y<@'10000000000 do {|y| is known to be positive} - begin decr(a); y:=y+y; - end; -while s<@'10000000000 do {|s| is known to be positive} - begin incr(k); s:=s+s; - end; -while t<@'10000000000 do {|t| is known to be positive} - begin incr(h); t:=t+t; - end; -end {now $2^{30}\le t=2^ht_0<2^{31}$ and $2^{30}\le s=2^ks_0<2^{31}$, - hence $d=k-h$ if $t/s<1$} - -@ @<Compute |c| by long division@>= -begin w:=two_to_the[16-k]; -s1:=s0 div w; -q:=t div s1; -r:=((t mod s1)*w)-((s0 mod w)*q); -if r>0 then - begin incr(q); r:=r-s0; - end -else while r<=-s0 do - begin decr(q); r:=r+s0; - end; -if a+b+k-h=15 then c:=(q+1) div 2 @+else c:=(q+3) div 4; -end - -@*Glue-set printing. -The last of the three procedures we need is |print_gr|, which displays a -|glue_ratio| in symbolic decimal form. Before constructing such a procedure, -we shall consider some simpler routines, copying them from an early -draft of the program \TeX82. - -@d unity==@'200000 {$2^{16}$, represents 1.0000} - -@<Glob...@>= -@!dig:array[0..15] of 0..9; {for storing digits} - -@ An array of digits is printed out by |print_digs|. - -@p procedure print_digs(@!k:integer); {prints |dig[k-1]| \dots |dig[0]|} -begin while k>0 do - begin decr(k); write(chr(ord('0')+dig[k])); - end; -end; - -@ A nonnegative integer is printed out by |print_int|. - -@p procedure print_int(@!n:integer); {prints an integer in decimal form} -var @!k:0..12; {index to current digit; we assume that $0\le n<10^{12}$} -begin k:=0; -repeat dig[k]:=n mod 10; n:=n div 10; incr(k); -until n=0; -print_digs(k); -end; - -@ And here is a procedure to print a nonnegative |scaled| number. - -@p procedure print_scaled(s:scaled); - {prints a scaled real, truncated to four digits} -var k:0..3; {index to current digit of the fraction part} -begin print_int(s div unity); {print the integer part} -s:=((s mod unity)*10000) div unity; -for k:=0 to 3 do - begin dig[k]:=s mod 10; s:=s div 10; - end; -write('.'); print_digs(4); -end; - -@ Now we're ready to print a |glue_ratio|. Since the effective multiplier -is $2^{-a-b}c$, we will display the scaled integer $2^{16-a-b}c$, taking -care to print something special if this quantity is terribly large. - -@p procedure print_gr(@!g:glue_ratio); {prints a glue multiplier} -var @!j:-29..31; {the amount to shift |c|} -begin j:=32-ga-gb; -while j>15 do - begin write('2x'); decr(j); {indicate multiples of 2 for BIG cases} - end; -if j<0 then print_scaled(gc div two_to_the[-j]) {shift right} -else print_scaled(gc*two_to_the[j]); {shift left} -end; - -@* The driver program. -In order to test these routines, we will assume that the |input| file -contains a sequence of test cases, where each test case consists of the -integer numbers $t$, $x_1$, \dots,~$x_n$, 0. The final test case should -be followed by an additional zero. - -@<Glob...@>= -@!x:array[1..1000] of scaled; {the $x_i$} -@!t:scaled; {the desired total} -@!m:integer; {the test case number} - -@ Each case will be processed by the following routine, which assumes -that |t| has already been read. - -@p procedure test; {processes the next data set, given |t| and~|m|} -var @!n: 0..1000; {the number of items} -k:0..1000; {runs through the items} -y:scaled; {$\max_{1\le i\le n}\vert x_i\vert$} -@!g:glue_ratio; {the computed glue multiplier} -@!s:scaled; {the sum $x_1+\cdots+x_n$} -@!ts:scaled; {the sum $f(x_1)+\cdots+f(x_n)$} -begin write_ln('Test data set number ',m:1,':'); -@<Read $x_1,\ldots,x_n$@>; -@<Compute |s| and |y|@>; -if s<=0 then write_ln('Invalid data (nonpositive sum); this set rejected.') -else begin @<Compute |g| and print it@>; - @<Print the values of $x_i$, $f(x_i)$, and the totals@>; - end; -end; - -@ @<Read $x_1,\ldots,x_n$@>= -begin n:=0; -repeat incr(n); read(x[n]); -until x[n]=0; -decr(n); -end - -@ @<Compute |s| and |y|@>= -begin s:=0; y:=0; -for k:=1 to n do - begin s:=s+x[k]; - if y<abs(x[k]) then y:=abs(x[k]); - end; -end - -@ @<Compute |g| and print it@>= -begin glue_fix(s,t,y,g); {set |g|, perhaps print an error message} -write(' Glue ratio is '); print_gr(g); -write_ln(' (',ga-16:1,',',gb:1,',',gc:1,')'); -end - -@ @<Print the values of $x_i$, $f(x_i)$, and the totals@>= -begin ts:=0; -for k:=1 to n do - begin write(x[k]:20); - if x[k]>=0 then y:=glue_mult(x[k],g) - else y:=-glue_mult(-x[k],g); - write_ln(y:15); - ts:=ts+y; - end; -write_ln(' Totals',s:13,ts:15,' (versus ',t:1,')'); -end - -@ Here is the main program. -@^main program@> - -@p begin initialize; -m:=1; -read(t); -while t>0 do - begin test; - incr(m); read(t); - end; -end. - -@*Index. Here are the section numbers where various identifiers are used in the -program, and where various topics are discussed. - - - - - diff --git a/Master/texmf-dist/doc/generic/knuth/source/web/webman.tex b/Master/texmf-dist/doc/generic/knuth/source/web/webman.tex deleted file mode 100644 index 61e12a28789..00000000000 --- a/Master/texmf-dist/doc/generic/knuth/source/web/webman.tex +++ /dev/null @@ -1,1672 +0,0 @@ -% WEB user manual -- last updated by D E Knuth on 4 Dec 89 -\input webmac -\parskip 0pt plus 1pt -\def\RA{\char'31 } % right arrow -\def\hang{\hangindent 4em\ignorespaces} -\font\ninerm=cmr9 -\font\ninett=cmtt9 -\font\eighttt=cmtt8 -\let\mc=\ninerm % medium caps for names like SAIL -\def\PASCAL{Pascal} -\font\quoterm=cmssq8 -\font\quoteit=cmssqi8 -\def\pb{\.{|...|}} -\def\lpile{\def\cr{\hfill\endline}\matrix} % I only use \lpile by itself - -\outer\def\section #1.{\penalty-50\vskip 12pt plus 3pt minus 3pt - \noindent{\bf #1.}\quad\ignorespaces} - -\def\lheader{\mainfont\the\pageno\hfill\sc\runninghead\hfill} -\def\rheader{\hfill\sc\runninghead\hfill\mainfont\the\pageno} -\def\runninghead{{\tentt WEB} USER MANUAL} - -% This verbatim mode assumes that no ? appears in the text being copied. -\def\verbatim{\begingroup - \def\do##1{\catcode`##1=12 } \dospecials - \parskip 0pt \parindent 0pt - \catcode`\ =13 \catcode`\^^M=13 - \tt \catcode`\?=0 \verbatimdefs \verbatimgobble} -{\catcode`\^^M=13{\catcode`\ =13\gdef\verbatimdefs{\def^^M{\ \par}\let =\ }} % - \gdef\verbatimgobble#1^^M{}} -\centerline{\titlefont The {\ttitlefont WEB} System - of Structured Documentation} - -\vskip 15pt plus 3pt minus 3pt -\noindent This memo describes how to write programs in the -\.{WEB} language; and it also includes the full \.{WEB} documentation for -\.{WEAVE} and \.{TANGLE}, the programs that read \.{WEB} input and produce -\TeX\ and \PASCAL\ output, respectively. The philosophy behind \.{WEB} is -that an experienced system programmer, who wants to provide the best -possible documentation of software products, needs two things -simultaneously: a language like \TeX\ for formatting, and a language like -\PASCAL\ for programming. Neither type of language can provide the best -documentation by itself. But when both are appropriately combined, we -obtain a system that is much more useful than either language separately. - -The structure of a software program may be thought of as a ``web'' that is -made up of many interconnected pieces. To document such a program, we want -to explain each individual part of the web and how it relates to its -neighbors. The typographic tools provided by \TeX\ give us an opportunity -to explain the local structure of each part by making that structure -visible, and the programming tools provided by \PASCAL\ make it possible -for us to specify the algorithms formally and unambiguously. By combining -the two, we can develop a style of programming that maximizes our ability -to perceive the structure of a complex piece of software, and at the same -time the documented programs can be mechanically translated into a working -software system that matches the documentation. - -Since \.{WEB} is an experimental system developed for internal use within -the \TeX\ project at Stanford, this report is rather terse, and it assumes -that the reader is an experienced programmer who is highly motivated to -read a detailed description of \.{WEB}'s rules. Furthermore, even if a -less terse manual were to be written, the reader would have to be warned -in advance that \.{WEB} is not for beginners and it never will be: The -user of \.{WEB} must be familiar with both \TeX\ and \PASCAL. When one -writes a \.{WEB} description of a software system, it is possible to make -mistakes by breaking the rules of \.{WEB} and/or the rules of \TeX\ and/or -the rules of \PASCAL. In practice, all three types of errors will occur, -and you will get different error messages from the different language -processors. In compensation for the sophisticated expertise needed to cope -with such a variety of languages, however, experience has shown that -reliable software can be created quite rapidly by working entirely in -\.{WEB} from the beginning; and the documentation of such programs seems -to be better than the documentation obtained by any other known method. -Thus, \.{WEB} users need to be highly qualified, but they can get some -satisfaction and perhaps even a special feeling of accomplishment when -they have successfully created a software system with this method. - -To use \.{WEB}, you prepare a file called \.{COB.WEB} (say), and then you -apply a system program called \.{WEAVE} to this file, obtaining an output -file called \.{COB.TEX}. When \TeX\ processes \.{COB.TEX}, your output -will be a ``pretty printed'' version of \.{COB.WEB} that takes appropriate -care of typographic details like page layout and the use of indentation, -italics, boldface, etc.; this output will contain extensive cross-index -information that is gathered automatically. You can also submit the same -file \.{COB.WEB} to another system program called \.{TANGLE}, which will -produce a file \.{COB.PAS} that contains the \PASCAL\ code of your \.{COB} -program. The \PASCAL\ compiler will convert \.{COB.PAS} into -machine-language instructions corresponding to the algorithms that were so -nicely formatted by \.{WEAVE} and \TeX. Finally, you can (and should) -delete the files \.{COB.TEX} and \.{COB.PAS}, because \.{COB.WEB} contains -the definitive source code. Examples of the behavior of \.{WEAVE} and -\.{TANGLE} are appended to this manual. - -Besides providing a documentation tool, \.{WEB} enhances the \PASCAL\ -language by providing a rudimentary macro capability together with the -ability to permute pieces of the program text, so that a large system can -be understood entirely in terms of small modules and their local -interrelationships. The \.{TANGLE} program is so named because it takes a -given web and moves the modules from their web structure into the order -required by \PASCAL; the advantage of programming in \.{WEB} is that the -algorithms can be expressed in ``untangled'' form, with each module -explained separately. The \.{WEAVE} program is so named because it takes -a given web and intertwines the \TeX\ and \PASCAL\ portions contained in -each module, then it knits the whole fabric into a structured document. -(Get it? Wow.) Perhaps there is some deep connection here with the fact -that the German word for ``weave'' is ``{\it web\/}'', and the -corresponding Latin imperative is ``{\it texe\/}''! - -It is impossible to list all of the related work that has influenced the -design of \.{WEB}, but the key contributions should be mentioned -here.\quad (1)~Myrtle Kellington, as executive editor for ACM -publications, developed excellent typographic standards for the -typesetting of Algol programs during the 1960s, based on the original -designs of Peter Naur; the subtlety and quality of this influential work -can be appreciated only by people who have seen what happens when other -printers try to typeset Algol without the advice of ACM's copy -editors.\quad(2)~Bill McKeeman introduced a program intended to automate -some of this task [Algorithm 268, ``Algol~60 reference language editor,'' -{\sl CACM \bf8} (1965), 667--668]; and a considerable flowering of such -programs has occurred in recent years [see especially Derek Oppen, -``Prettyprinting,'' {\sl ACM TOPLAS \bf2} (1980), 465--483; G.~A. Rose and -J. Welsh, ``Formatted programming languages,'' {\sl SOFTWARE Practice -\char`\&\ Exper.\ \bf11} (1981), 651--669].\quad(3)~The top-down style of -exposition encouraged by \.{WEB} was of course chiefly influenced by Edsger -Dijkstra's essays on structured programming in the late 1960s. The less -well known work of Pierre-Arnoul de Marneffe [``Holon programming: A -survey,'' Univ.\ de Liege, Service Informatique, Liege, Belgium, 1973; 135 -pp.\null] also had a significant influence on the author as \.{WEB} was -being formulated.\quad(4)~Edwin Towster has proposed a similar style of -documentation in which the programmer is supposed to specify the relevant -data structure environment in the name of each submodule [``A convention -for explicit declaration of environments and top-down refinement of -data,'' {\sl IEEE Trans.\ on Software Eng.\ \bf SE--5} (1979), 374--386]; -this requirement seems to make the documentation a bit too verbose, -although experience with \.{WEB} has shown that any unusual control -structure or data structure should definitely be incorporated into the -module names on psychological grounds.\quad(5)~Discussions with Luis -Trabb~Pardo in the spring of 1979 were extremely helpful for setting up a -prototype version of \.{WEB} that was called \.{DOC}.\quad (6)~Ignacio -Zabala's extensive experience with \.{DOC}, in which he created a full -implementation of \TeX\ in \PASCAL\ that was successfully transported to -many different computers, was of immense value while \.{WEB} was taking -its present form.\quad(7)~David~R. Fuchs made several crucial suggestions -about how to make \.{WEB} more portable; he and Arthur~L. Samuel -coordinated the initial installations of \.{WEB} on dozens of computer -systems, making changes to the code so that it would be acceptable to -a wide variety of \PASCAL\ compilers.\quad(8)~The name \.{WEB} itself -was chosen in honor of my wife's mother, Wilda Ernestine Bates. - -The appendices to this report contain complete \.{WEB} programs for the -\.{WEAVE} and \.{TANGLE} processors. A study of these examples, together -with an attempt to write \.{WEB} programs by yourself, is the best way -to understand why \.{WEB} has come to be like it is. -\section General rules. -A \.{WEB} file is a long string of text that has been divided into -individual lines. The exact line boundaries are not terribly crucial, and -a programmer can pretty much chop up the \.{WEB} file in whatever way seems -to look best as the file is being edited; but string constants and control -texts must end on the same line on which they begin, since this convention -helps to keep errors from propagating. The end of a line means -the same thing as a blank space. - -Two kinds of material go into \.{WEB} files: \TeX\ text and \PASCAL\ text. -A programmer writing in \.{WEB} should be thinking both of the -documentation and of the \PASCAL\ program that he or she is creating; -i.e., the programmer should be instinctively aware of the different -actions that \.{WEAVE} and \.{TANGLE} will perform on the \.{WEB} file. -\TeX\ text is essentially copied without change by \.{WEAVE}, and it is -entirely deleted by \.{TANGLE}, since the \TeX\ text is ``pure -documentation.'' \PASCAL\ text, on the other hand, is formatted by -\.{WEAVE} and it is shuffled around by \.{TANGLE}, according to rules that -will become clear later. For now the important point to keep in mind is -that there are two kinds of text. Writing \.{WEB} programs is something -like writing \TeX\ documents, but with an additional ``\PASCAL\ mode'' -that is added to \TeX's horizontal mode, vertical mode, and math mode. - -A \.{WEB} file is built up from units called {\sl modules\/} that are more -or less self-contained. Each module has three parts: - -\yskip\item{1)} A \TeX\ part, containing explanatory material about what -is going on in the module. - -\item{2)} A definition part, containing macro definitions that serve as -abbreviations for \PASCAL\ constructions that would be less comprehensible -if written out in full each time. - -\item{3)} A \PASCAL\ part, containing a piece of the program that -\.{TANGLE} will produce. This \PASCAL\ code should ideally be about a -dozen lines long, so that it is easily comprehensible as a unit and so -that its structure is readily perceived. - -\yskip\noindent The three parts of each module must appear in this order; -i.e., the \TeX\ commentary must come first, then the definitions, and -finally the \PASCAL\ code. Any of the parts may be empty. - -\eject % page break inserted Dec 88 - -A module begins with the pair of symbols `\.{@\ }' or `\.{@*}', where -`\.{\ }' denotes a blank space. A module ends -at the beginning of the next module (i.e., at the next -`\.{@\ }' or `\.{@*}'), or at the end of the file, whichever comes first. -The \.{WEB} file may also contain material that is not part of any module -at all, namely the text (if any) that occurs before the first module. -Such text is said to be ``in limbo''; it is ignored by \.{TANGLE} -and copied essentially verbatim by \.{WEAVE}, so its function is to -provide any additional formatting instructions that may be desired in the -\TeX\ output. Indeed, it is customary to begin a \.{WEB} file with -\TeX\ code in limbo that loads special fonts, defines special macros, -changes the page sizes, and/or produces a title page. - -Modules are numbered consecutively, starting with 1; these numbers appear -at the beginning of each module of the \TeX\ documentation, and they appear -as bracketed comments at the beginning of the code generated by that -module in the \PASCAL\ program. - -Fortunately, you never mention these numbers yourself when you are writing -in \.{WEB}. You just say `\.{@\ }' or `\.{@*}' at the beginning of each -new module, and the numbers are supplied automatically by \.{WEAVE} and -\.{TANGLE}. As far as you are concerned, a module has a -{\sl name\/} instead of a number; such a name is specified by writing -`\.{@<}' followed by \TeX\ text followed by `\.{@>}'. When \.{WEAVE} -outputs a module name, it replaces the `\.{@<}' and `\.{@>}' by -angle brackets and inserts the module number in small type. Thus, when you -read the output of \.{WEAVE} it is easy to locate any module that is -referred to in another module. - -For expository purposes, a module name should be a good description of the -contents of that module; i.e., it should stand for the abstraction -represented by the module. Then the module can be ``plugged into'' one or -more other modules in such a way -that unimportant details of its inner workings -are suppressed. A module name therefore ought to be long enough to convey -the necessary meaning. Unfortunately, however, it is laborious to type -such long names over and over again, and it is also difficult to specify a -long name twice in exactly the same way so that \.{WEAVE} and \.{TANGLE} -will be able to match the names to the modules. To ameliorate this difficulty, -\.{WEAVE} and \.{TANGLE} let you abbreviate a module name -after its first appearance in the \.{WEB} file; you can type simply -`\.{@<$\alpha$...@>}', where $\alpha$ is any string that is a prefix of -exactly one module name appearing in the file. For example, `\.{@<Clear -the arrays@>}' can be abbreviated to `\.{@<Clear...@>}' if no other module -name begins with the five letters `\.{Clear}'. Module names must otherwise -match character for character, except that consecutive blank spaces and/or -tab marks are treated as equivalent to single spaces, and such spaces are -deleted at the beginning and end of the name. Thus, `\.{@< Clear { }the -arrays @>}' will also match the name in the previous example. - -We have said that a module begins with `\.{@\ }' or `\.{@*}', but we -didn't say how it gets divided up into a \TeX\ part, a definition part, -and a \PASCAL\ part. The definition part begins with the first appearance -of `\.{@d}' or `\.{@f}' in the module, and the \PASCAL\ part begins with -the first appearance of `\.{@p}' or `\.{@<}'. The latter option `\.{@<}' -stands for the beginning of a module name, which is the name of the module -itself. An equals sign (\.=) must follow the `\.{@>}' at the end of this -module name; you are saying, in effect, that the module name stands for -the \PASCAL\ text that follows, so you say `$\langle\,$module -name$\,\rangle=\null$\PASCAL\ text'. Alternatively, if the \PASCAL\ part -begins with `\.{@p}' instead of a module name, the current module is said -to be {\sl unnamed}. Note that module names cannot appear in the -definition part of a module, because the first `\.{@<}' in a module -signals the beginning of its \PASCAL\ part. But any number of module names -might appear in the \PASCAL\ part, once it has started. - -The general idea of \.{TANGLE} is to make a \PASCAL\ program out of these -modules in the following way: First all the \PASCAL\ parts of unnamed -modules are copied down, in order; this constitutes the initial -approximation $T_0$ to the text of the program. (There should be at least -one unnamed module, otherwise there will be no program.) Then all module -names that appear in the initial text $T_0$ are replaced by the \PASCAL\ -parts of the corresponding modules, and this substitution process -continues until no module names remain. Then all defined macros are -replaced by their equivalents, according to certain rules that are -explained later. The resulting \PASCAL\ code is ``sanitized'' so that it -will be acceptable to an average garden-variety \PASCAL\ compiler; i.e., -lowercase letters are converted to uppercase, long identifiers are -chopped, and the lines of the output file are constrained to be at most 72 -characters long. All comments will have been removed from this \PASCAL\ -program except for the meta-comments delimited by `\.{@\{}' and -`\.{@\}}', as explained below, and except for the module-number comments -that point to the source location where each piece of the program text -originated in the \.{WEB} file. - -If the same name has been given to more than one module, the \PASCAL\ text -for that name is obtained by putting together all of the \PASCAL\ parts in -the corresponding modules. This feature is useful, for example, in a -module named `Global variables in the outer block', since one can then -declare global variables in whatever modules those variables are -introduced. When several modules have the same name, \.{WEAVE} assigns the -first module number as the number corresponding to that name, and it -inserts a note at the bottom of that module telling the reader to `See -also sections so-and-so'; this footnote gives the numbers of all the other -modules having the same name as the present one. The \PASCAL\ text -corresponding to a module is usually formatted by \.{WEAVE} so that the -output has an equivalence sign in place of the equals sign in the \.{WEB} -file; i.e., the output says `$\langle\,$module -name$\,\rangle\equiv\null$\PASCAL\ text'. However, in the case of the second -and subsequent appearances of a module with the same name, this `$\equiv$' -sign is replaced by `$\mathrel+\equiv$', as an indication that the \PASCAL\ -text that follows is being appended to the \PASCAL\ text of another -module. - -The general idea of \.{WEAVE} is to make a \.{TEX} file from the \.{WEB} -file in the following way: The first line of the \.{TEX} file will be -`\.{\\input webmac}'; this will cause \TeX\ to read in the macros that -define \.{WEB}'s documentation conventions. The next lines of the file -will be copied from whatever \TeX\ text is in limbo before the first -module. Then comes the output for each module in turn, possibly -interspersed with end-of-page marks. Finally, \.{WEAVE} will generate a -cross-reference index that lists each module number in which each \PASCAL\ -identifier appears, and it will also generate an alphabetized list -of the module names, as well as a table of contents that -shows the page and module numbers for each ``starred'' module. - -What is a ``starred'' module, you ask? A module that begins with `\.{@*}' -instead of `\.{@\ }' is slightly special in that it denotes a new major -group of modules. The `\.{@*}' should be followed by the title of this -group, followed by a period. Such modules will always start on a new page -in the \TeX\ output, and the group title will appear as a running headline -on all subsequent pages until the next starred module. The title will also -appear in the table of contents, and in boldface type at the beginning of -its module. Caution: Do not use \TeX\ control sequences in such titles, -unless you know that the \.{webmac} macros will do the right thing with -them. The reason is that these titles are converted to uppercase when -they appear as running heads, and they are converted to boldface when they -appear at the beginning of their modules, and they are also written out to -a table-of-contents file used for temporary storage while \TeX\ is -working; whatever control sequences you use must be meaningful in all -three of these modes. - -The \TeX\ output produced by \.{WEAVE} for each module consists of -the following: First comes the module number (e.g., `\.{\\M123.}' -at the beginning of module 123, except that `\.{\\N}' appears in place of -`\.{\\M}' at the beginning of a starred module). Then comes the -\TeX\ part of the module, copied almost verbatim except as noted -below. Then comes the definition part and the \PASCAL\ part, formatted -so that there will be a little extra space between them if both are -nonempty. The definition and \PASCAL\ parts are obtained by inserting -a bunch of funny looking \TeX\ macros into the \PASCAL\ program; these -macros handle typographic details about fonts and proper math spacing, -as well as line breaks and indentation. - -When you are typing \TeX\ text, you will probably want to make frequent -reference to variables and other quantities in your \PASCAL\ code, and you -will want those variables to have the same typographic treatment -when they appear in your text as when they appear in your -program. Therefore the \.{WEB} language allows you to get the effect of -\PASCAL\ editing within \TeX\ text, if you place `\.|' marks before and -after the \PASCAL\ material. For example, suppose you want to say something -like this: -$$\hbox{The characters are placed into \\{buffer}, which is a -\&{packed} \&{array} $[1\to\|n]$ \&{of} \\{char}.}$$ -The \TeX\ text would look like this in your \.{WEB} file: -$$\.{The characters are placed into |buffer|, which is a |packed -array [1..n] of char|.}$$ -And \.{WEAVE} translates this into something you are glad you didn't have -to type: -$$\lpile{\.{The characters are placed into \\\\\{buffer\},}\cr - \.{which is a \\\&\{packed\}{ }\\\&\{array\}{ }\$ - [1\\to\\|n]\${ }\\\&\{of\}{ }\\\\\{char\}.}\cr}$$ -Incidentally, the cross-reference index that \.{WEAVE} would make, in -the presence of a comment like this, would include -the current module number as one of the index entries for \\{buffer} -\vadjust{\eject}% page break inserted Dec 88 -and \\{char}, even though \\{buffer} and \\{char} -might not appear in the \PASCAL\ part of -this module. Thus, the index covers references to identifiers in -the explanatory comments as well as in the program itself; you will -soon learn to appreciate this feature. However, the identifiers -\&{packed} and \&{array} and \|n\ and \&{of\/} would not be indexed, -because \.{WEAVE} does not make index entries for reserved words or -single-letter identifiers. Such identifiers are felt to be so ubiquitous -that it would be pointless to mention every place where they occur. - -Speaking of identifiers, the author of \.{WEB} thinks that -\\{IdentifiersSeveralWordsLong} look terribly ugly when they mix -uppercase and lowercase letters. He recommends that -\\{identifiers\_several\_words\_long} be written with underline characters -to get a much better effect. The actual identifiers sent to the \PASCAL\ -compiler by \.{TANGLE} will have such underlines removed, and \.{TANGLE} -will check to make sure that two different identifiers do not become -identical when this happens. (In fact, \.{TANGLE} even checks that -the first seven characters of identifiers are unique, when lowercase -letters have been converted to uppercase; the number seven in this -constraint is more strict than \PASCAL's eight, and it can -be changed if desired.) The \.{WEAVE} processor will properly -alphabetize identifiers that have embedded underlines -when it makes the index. - -Although a module begins with \TeX\ text and ends with \PASCAL\ text, we -have noted that the dividing line isn't sharp, since \PASCAL\ text can be -included in \TeX\ text if it is enclosed in `\pb'. Conversely, \TeX\ text -also appears frequently within \PASCAL\ text, because everything in -comments (i.e., between left and right braces) is treated as \TeX\ text. -Furthermore, a module name consists of \TeX\ text; thus, a \.{WEB} file -typically involves constructions like `\.{if} \.x \.= \.0 \.{then} -\.{@<Empty} \.{the} \.{|buffer|} \.{array@>}' where we go back and forth -between \PASCAL\ and \TeX\ conventions in a natural way. -\section Macros. -A \.{WEB} programmer can define three kinds of macros to make the programs -shorter and more readable: - -\yskip\hang`\.{@d} \\{identifier} \.= \\{constant}' defines a {\sl numeric\/} -macro, allowing \.{TANGLE} to do rudimentary arithmetic. - -\yskip\hang`\.{@d} \\{identifier} \.{==} \PASCAL\ text' defines a {\sl -simple\/} macro, where the identifier will be replaced by the \PASCAL\ text -when \.{TANGLE} produces its output. - -\yskip\hang`\.{@d} \\{identifier}\.{(\#) ==} \PASCAL\ text' defines a -{\sl parametric\/} macro, where the identifier will be replaced by the \PASCAL\ -text and where occurrences of \.{\#} in that \PASCAL\ text will be -replaced by an argument. - -\yskip\noindent In all three cases, the identifier must have length greater -than one; it must not be a single letter. - -Numeric macros are subject to the following restrictions:\quad -(1)~The identifier must -be making its first appearance in the \.{WEB} file; -a numeric macro must be defined before it is used.\quad -(2)~The right-hand side of the numeric definition must be made entirely from -integer constants, numeric macros, preprocessed strings (see below), and -plus~signs or minus signs. No other operations or symbols are allowed, -not even parentheses, except that \PASCAL-like comments (enclosed in -braces) can appear. Indeed, comments are recommended, since it is usually -wise to give a brief explanation of the significance of each identifier as -it is defined.\quad -(3)~The numeric value must be less than $2^{15}=32768$ in absolute value. -(For larger values, you can use `\.{==}' in place of~`\.=', thus making use -of a simple macro instead of a numeric one. Note, however, that simple -macros sometimes have a different effect. For example, consider the three -definitions `\.{@d n1=2 @d n2=2+n1 @d n3==2+n1}'; then `\.{x-n2}' will -expand into `\.{x-4}', while `\.{x-n3}' will expand into `\.{x-2+2}' which -is quite different! It is wise to include parentheses in non-numeric -macros, e.g., `\.{@d n3==(2+n1)}', to avoid such errors.) - -When constants are connected by plus signs or minus -signs in a \PASCAL\ program, \.{TANGLE} does the arithmetic before putting -the constant into the output file. Therefore it is permissible to say, for -example, `\&{array} $[0\,.\,.\,\\{size}-1]$' if \\{size} has been declared -as a macro; note that \PASCAL\ doesn't allow this kind of compile-time -arithmetic if \\{size} is a \&{constant} quantity in the program. Another -use of \.{TANGLE}'s arithmetic is to make \&{case} statement labels such -as `$\\{flag}+1$' legitimate. Of course, it is improper to change \.{2+2} -into \.4 without looking at the surrounding context; many counterexamples -exist, such as the phrases `\.{-2+2}', `\.{x/2+2}', and `\.{2+2E5}'. The -program for \.{TANGLE}, in the appendix, gives precise details about this -conversion, which \.{TANGLE} does only when it is safe. - -The right-hand sides of simple and parametric macros -are required to have balanced parentheses, and the \PASCAL\ texts of -modules must have balanced parentheses too. Therefore when the argument -to a para\-metric macro appears in parentheses, both parentheses -will belong to the same \PASCAL\ text. - -The appendices to this report contain hundreds of typical examples of the -usefulness of \.{WEB} macros, so it is not necessary to dwell on the -subject here. However, the reader should know that \.{WEB}'s apparently -primitive macro capabilities can actually do a lot of rather surprising -things. Here is a construction that sheds further light on what is -possible: After making the definitions -$$\catcode`\#=12 -\lpile{\.{@d two\_cases(#)==case j of 1:#(1); 2:#(2); end}\cr -\.{@d reset\_file(#)==reset(input\_file@\&#)}\cr}$$ -one can write `\.{two\_cases(reset\_file)}' and the resulting \PASCAL\ -output will be -$$\.{case j of 1:reset(input\_file1); 2:reset(input\_file2); end}$$ -(but in uppercase letters and with \.\_'s removed). -The `\.{@\&}' operation used here joins together two adjacent tokens -into a single token, as explained later; otherwise the \PASCAL\ file would -contain a space between \.{input\_file} and the digit that followed it. -This trick can be used to provide the effect of an array of files, if you -are unfortunate enough to have a \PASCAL\ compiler that doesn't allow such -arrays. Incidentally, the cross-reference index made by \.{WEAVE} from -this example would contain the identifier \\{input\_file} but it would not -contain \\{input\_file1} or \\{input\_file2}. Furthermore, \.{TANGLE} -would not catch the error that \.{INPUTFILE1} and \.{INPUTFILE2} both -begin with the same nine letters; one should be more careful when using -`\.{@\&}'! But such aspects of the construction in this trick are -peripheral to our main point, which is that a parametric macro name without -arguments can be used as an argument to another parametric macro. - -Although \.{WEB}'s macros are allowed to have at most one parameter, the -following example shows that this is not as much of a restriction as it -may seem at first. Let \\{amac} and \\{bmac} be any parametric macros, and -suppose that we want to get the effect of -$$\catcode`\#=12 -\.{@d cmac(#1,#2) == amac(#1) bmac(#2)}$$ -which \.{WEB} doesn't permit. The solution is to make the definitions -$$\catcode`\#=12 -\lpile{\.{@d cmac(#) == amac(#) dmac}\cr -\.{@d dmac(#) == bmac(#)}\cr}$$ -and then to say `\.{cmac(x)(y)}'. - -There is one restriction in the generality of \.{WEB}'s parametric -macros, however: the argument to a para\-metric macro must not come from -the expansion of a macro that has not already been ``started.'' For -example, here is one of the things \.{WEB} cannot handle: -$$\catcode`\#=12 -\lpile{\.{@d arg == (p)}\cr -\.{@d identity(#) == #}\cr -\.{@p identity arg}\cr}$$ -In this case \.{TANGLE} will complain that the \.{identity} macro is not -followed by an argument in parentheses. - -The \.{WEB} language has another feature that is somewhat similar to a -numeric macro. A {\sl preprocessed string\/} is a string that is like -a \PASCAL\ string but delimited by double-quote marks (\.") instead of -single-quotes. Double-quote marks inside of such strings are indicated by -giving two double-quotes in a row. If a preprocessed string is -of length one (e.g., \.{"A"} or \.{""""}), it will be treated by \.{TANGLE} -as equivalent to the corresponding ASCII-code integer (e.g., \.{65} or -\.{34}). And if a preprocessed string is not of length one, it will be -converted into an integer equal to 256 or more. A {\sl string pool\/} -containing all such strings will be written out by the \.{TANGLE} -processor; this string pool file consists of string 256, then string 257, -etc., where each string is followed by an end-of-line and prefixed by two -decimal digits that define its length. Thus, for example, the empty string -\.{""} would be represented in the string pool file by a line containing -the two characters `\.{00}', while the string \.{"""String"""} would be -represented by `\.{08"String"}'. A given string appears at most once in -the string pool; the use of such a pool makes it easier to cope with -\PASCAL's restrictions on string manipulation. The string pool ends with -`\.{*nnnnnnnnn}', where \.{nnnnnnnnn} is a decimal number -called the {\sl string pool check sum}. If any string changes, the check -sum almost surely changes too; thus, the `\.{@\$}' feature -described below makes it possible for a program to assure itself that it -is reading its own string pool. - -Here is a simple example that combines numeric macros with preprocessed -strings of length one: -$$\lpile{\.{@d upper\_case\_Y = "Y"}\cr -\.{@d case\_difference = -"y"+upper\_case\_Y}\cr}$$ -The result is to define -$\\{upper\_case\_Y}=89$, $\\{case\_difference}=-32$. -\section Control codes. -We have seen several magic uses of `\.{@}' signs in \.{WEB} files, and it -is time to make a systematic study of -these special features. A \.{WEB} {\sl control code\/} -is a two-character combination of which the first is `\.@'. - -Here is a complete list of the legal control codes. The letters $L$, $T$, -$P$, $M$, $C$, and/or $S$ following each code indicate whether or not that -code is allowable in limbo, in \TeX\ text, in \PASCAL\ text, in module -names, in comments, and/or in strings. A bar over such a letter means -that the control code terminates the present part of the \.{WEB} file; for -example, $\overline L$ means that this control code ends the limbo material -before the first module. - -\def\@#1[#2] {\yskip\hangindent 2em\noindent\.{@#1\unskip - \spacefactor1000{ }}$[#2]$\quad} -\def\oP{\overline P} -\def\oT{\overline T\mskip1mu} - -\@@ [C,L,M,P,S,T] A double \.@ denotes the single character `\.@'. This is -the only control code that is legal in limbo, in comments, and in strings. - -\@\ [\overline L,\oP,\oT] This denotes the beginning of a new -(unstarred) module. A tab mark or end-of-line (carriage return) -is equivalent to a space when it follows an \.@ sign. - -\@* [\overline L,\oP,\oT] This denotes the beginning of a new starred -module, i.e., a module that begins a new major group. The title of the new -group should appear after the \.{@*}, followed by a period. As explained -above, \TeX\ control sequences should be avoided in such titles unless -they are quite simple. When \.{WEAVE} and \.{TANGLE} read a \.{@*}, they -print an asterisk on the terminal -followed by the current module number, so that the user -can see some indication of progress. The very first module should be starred. - -\@d [\oP,\oT] Macro definitions begin with \.{@d} (or \.{@D}), followed by -the \PASCAL\ text for one of the three kinds of macros, as explained -earlier. - -\@f [\oP,\oT] Format definitions begin with \.{@f} (or \.{@F}); they cause -\.{WEAVE} to treat identifiers in a special way when they appear in -\PASCAL\ text. The general form of a format definition is `\.{@f} \|l \.{==} -\|r', followed by an optional comment enclosed in braces, where \|l and \|r -are identifiers; \.{WEAVE} will subsequently treat identifier \|l as it -currently treats \|r. This feature allows a \.{WEB} programmer to invent -new reserved words and/or to unreserve some of \PASCAL's reserved -identifiers. The definition part of each module consists of any number of -macro definitions (beginning with \.{@d}) and format definitions (beginning -with \.{@f}), intermixed in any order. - -\@p [\oP,\oT] The \PASCAL\ part of an unnamed module begins with \.{@p} -(or \.{@P}). This causes \.{TANGLE} to append the following \PASCAL\ code -to the initial program text $T_0$ as explained above. The \.{WEAVE} -processor does not cause a `\.{@p}' to appear explicitly in the \TeX\ -output, so if you are creating a \.{WEB} file based on a \TeX-printed -\.{WEB} documentation you have to remember to insert \.{@p} in the -appropriate places of the unnamed modules. - -\@< [P,\oT] A module name begins with \.{@<} followed by \TeX\ text followed -by \.{@>}; the \TeX\ text should not contain any \.{WEB} control codes -except \.{@@}, unless these control codes appear in \PASCAL\ text that -is delimited by \pb. The module name may be abbreviated, after its first -appearance in a \.{WEB} file, by giving any unique prefix followed by \.{...}, -where the three dots immediately precede the closing \.{@>}. No module name -should be a prefix of another. Module names may not appear in \PASCAL\ -text that is enclosed in \pb, nor may they appear in the definition part -of a module (since the appearance of a module name ends the definition -part and begins the \PASCAL\ part). - -\@\' [P,T] This denotes an octal constant, to be formed from the -succeeding digits. For example, if the \.{WEB} file contains `\.{@\'100}', -the \.{TANGLE} processor will treat this an equivalent to `\.{64}'; -the constant will be formatted as ``\O{100}'' in the \TeX\ output -produced via \.{WEAVE}. You should use octal notation only for positive -constants; don't try to get, e.g., $-1$ by saying `\.{@\'777777777777}'. - -\@" [P,T] A hexadecimal constant; `\.{@"D0D0}' tangles to \.{53456} and -weaves to `\H{D0D0}'. - -\@\$ [P] This denotes the string pool check sum. - -\@\{ [P] The beginning of a ``meta comment,'' i.e., a comment -that is supposed to appear in the \PASCAL\ code, is indicated by -\.{@\{} in the \.{WEB} file. Such delimiters can be used as -isolated symbols in macros or modules, but they should be properly nested -in the final \PASCAL\ program. The \.{TANGLE} processor will convert -`\.{@\{}' into `\.\{' in the \PASCAL\ output file, unless -the output is already part of a meta-comment; in the latter case -`\.{@\{}' is converted into `\.[', since \PASCAL\ does not allow -nested comments. Incidentally, module numbers are automatically inserted -as meta-comments into the \PASCAL\ program, in order to help correlate the -outputs of \.{WEAVE} and \.{TANGLE} (see Appendix~C\null). Meta-comments -can be used to put conditional text into a \PASCAL\ program; this helps to -overcome one of the limitations of \.{WEB}, since the simple macro -processing routines of \.{TANGLE} do not include the dynamic evaluation of -boolean expressions. - -\@\} [P] The end of a ``meta comment'' is indicated by `\.{@\}}'; this is -converted either into `\.\}' or `\.{]}' in the \PASCAL\ output, according -to the conventions explained for \.{@\{} above. - -\@\& [P] The \.{@\&} operation causes whatever is on its left to be -adjacent to whatever is on its right, in the \PASCAL\ output. No spaces or -line breaks will separate these two items. However, the thing on the left -should not be a semicolon, since a line break might occur after a semicolon. - -\@\^ [P,T] The ``control text'' that follows, up to the next -`\.{@>}', will be entered into the index together with the identifiers of -the \PASCAL\ program; this text will appear in roman type. For example, to -put the phrase ``system dependencies'' into the index, you can type -`\.{@\^system dependencies@>}' in each module -that you want to index as system dependent. A control text, like a string, -must end on the same line of the \.{WEB} file as it began. Furthermore, -no \.{WEB} control codes are allowed in a control text, not even -\.{@@}. (If you need an \.{@} sign you can get around this restriction by -typing `\.{\\AT!}'.) - -\@. [P,T] The ``control text'' that follows will be entered into the index -in \.{typewriter} \.{type}; see the rules for `\.{@\^}', which is analogous. - -\@: [P,T] The ``control text'' that follows will be entered into the index -in a format controlled by the \TeX\ macro `\.{\\9}', which the user -should define as desired; see the rules for `\.{@\^}', which is analogous. - -\@t [P] The ``control text'' that follows, up to the next `\.{@>}', will -be put into a \TeX\ \.{\\hbox} and formatted along with the neighboring -\PASCAL\ program. This text is ignored by \.{TANGLE}, but it can be used -for various purposes within \.{WEAVE}. For example, you can make comments -that mix \PASCAL\ and classical mathematics, as in `$\\{size}<2^{15}$', by -typing `\.{|size < @t\$2\^\{15\}\$@>|}'. A control text must end on the -same line of the \.{WEB} file as it began, and it may not contain any -\.{WEB} control codes. - -\@= [P] The ``control text'' that follows, up to the next `\.{@>}', will -be passed verbatim to the \PASCAL\ program. - -\@\\ [P] Force end-of-line here in the \PASCAL\ program file. - -\@! [P,T] The module number in an index entry will be underlined if `\.{@!}' -immediately precedes the identifier or control text being indexed. This -convention is used to distinguish the modules where an identifier is -defined, or where it is explained in some special way, from the modules -where it is used. A~reserved word or an identifier of length one will not -be indexed except for underlined entries. An `\.{@!}' is implicitly inserted -by \.{WEAVE} just after the reserved words \&{function}, \&{procedure}, -\&{program}, and \&{var}, and just after \.{@d} and \.{@f}. But you should -insert your own `\.{@!}' before the definitions of types, constants, -variables, parameters, and components of records and enumerated types that -are not covered by this implicit convention, if you want to improve the -quality of the index that you get. - -\@? [P,T] This cancels an implicit (or explicit) `\.{@!}', so that the next -index entry will not be underlined. - -\@, [P] This control code inserts a thin space in \.{WEAVE}'s output; it is -ignored by \.{TANGLE}. Sometimes you need this extra space if you are using -macros in an unusual way, e.g., if two identifiers are adjacent. - -\@/ [P] This control code causes a line break to occur within a \PASCAL\ -program formatted by \.{WEAVE}; it is ignored by \.{TANGLE}. Line breaks -are chosen automatically by \TeX\ according to a scheme that works 99\%\ -of the time, but sometimes you will prefer to force a line break so that -the program is segmented according to logical rather than visual criteria. -Caution: `\.{@/}' should be used only after statements or clauses, not in -the middle of an expression; use \.{@|} in the middle of expressions, in -order to keep \.{WEAVE}'s parser happy. - -\@| [P] This control code specifies an optional line break in the midst of -an expression. For example, if you have a long condition between \&{if} and -\&{then}, or a long expression on the right-hand side of an assignment -statement, you can use `\.{@|}' to specify breakpoints more logical than -the ones that \TeX\ might choose on visual grounds. - -\@\# [P] This control code forces a line break, like \.{@/} does, -and it also causes a little extra white space to appear between the lines at -this break. You might use it, for example, between procedure definitions or -between groups of macro definitions that are logically separate but within -the same module. - -\@+ [P] This control code cancels a line break that might otherwise be -inserted by \.{WEAVE}, e.g., before the word `\&{else}', if you want to -put a short if-then-else construction on a single line. It is ignored by -\.{TANGLE}. - -\@; [P] This control code is treated like a semicolon, for formatting -purposes, except that it is invisible. You can use it, for example, after -a module name when the \PASCAL\ text represented by that module name ends -with a semicolon. - -\yskip\noindent -The last six control codes (namely `\.{@,}', `\.{@/}', `\.{@|}', -`\.{@\#}', `\.{@+}', and `\.{@;}') have no effect on the \PASCAL\ -program output by \.{TANGLE}; they merely help to improve the readability -of the \TeX-formatted \PASCAL\ that is output by \.{WEAVE}, in unusual -circumstances. \.{WEAVE}'s built-in formatting method is fairly good, but -it is incapable of handling all possible cases, because it must deal with -fragments of text involving macros and module names; these fragments do -not necessarily obey \PASCAL's syntax. Although \.{WEB} allows you to -override the automatic formatting, your best strategy is not to worry -about such things until you have seen what \.{WEAVE} produces automatically, -since you will probably need to make only a few corrections when you are -touching up your documentation. - -Because of the rules by which every module is broken into three parts, -the control codes `\.{@d}', `\.{@f}', and `\.{@p}' are not allowed to occur -once the \PASCAL\ part of a module has begun. -\section Additional features and caveats. - -1. The character pairs `\.{(*}', `\.{*)}', `\.{(.}', and `\.{.)}' are -converted automatically in \PASCAL\ text as though they were -`\.{@\{}', `\.{@\}}', `\.[', and `\.]', respectively, except -of course in strings. Furthermore in certain installations of \.{WEB} that -{\def\\#1#2{`{\tentex\char'#1#2}'}% -have an extended character set, the characters \\32, \\34, \\35, \\30, -\\36, \\04, \\37, \\05, and \\06} -can be typed as abbreviations for -`\.{<>}', `\.{<=}', `\.{>=}', `\.{:=}', `\.{==}', `\.{and}', `\.{or}', -`\.{not}', and `\.{in}', respectively. However, the latter abbreviations -are not used in the standard versions of \.{WEAVE.WEB} and \.{TANGLE.WEB} -that are distributed to people who are installing \.{WEB} on other -computers, and the programs are designed to produce only standard ASCII -characters as output if the input consists entirely of ASCII characters. - -2. If you have an extended character set, all of the characters listed -in Appendix C of {\sl The \TeX book\/} can be used in strings. But you should -stick to standard ASCII characters if you want to write programs that will -be useful to all the poor souls out there who don't have extended -character sets. - -3. The \TeX\ file output by \.{WEAVE} is broken into lines having at most -80 characters each. The algorithm that does this line breaking is unaware -of \TeX's convention about comments following `\.\%' signs on a line. When -\TeX\ text is being copied, the existing line breaks are copied as well, -so there is no problem with `\.\%' signs unless the original \.{WEB} file -contains a line more than eighty characters long or a line with \PASCAL\ -text in \pb\ that expands to more than eighty characters long. Such lines -should not have `\.\%' signs. - -4. \PASCAL\ text is translated by a ``bottom up'' procedure that -identifies each token as a ``part of speech'' and combines parts of speech -into larger and larger phrases as much as possible according to a special -grammar that is explained in the documentation of \.{WEAVE}. It is easy to -learn the translation scheme for simple constructions like single -identifiers and short expressions, just by looking at a few examples of -what \.{WEAVE} does, but the general mechanism is somewhat complex because -it must handle much more than \PASCAL\ itself. Furthermore the output -contains embedded codes that cause \TeX\ to indent and break lines as -necessary, depending on the fonts used and the desired page width. For -best results it is wise to adhere to the following restrictions: - -\yskip\itemitem{a)}Comments in \PASCAL\ text should appear only after -statements or clauses; i.e., after semicolons, after reserved words like -\&{then} and \&{do}, or before reserved words like \&{end} and \&{else}. -Otherwise \.{WEAVE}'s parsing method may well get mixed up. - -\itemitem{b)}Don't enclose long \PASCAL\ texts in \pb, since the -indentation and line breaking codes are omitted when the \pb\ text is -translated from \PASCAL\ to \TeX. Stick to simple expressions or -statements. - -\yskip -5. Comments and module names are not permitted in \pb\ text. After a `\.|' -signals the change from \TeX\ text to \PASCAL\ text, the next `\.|' that is -not part of a string or control text ends the \PASCAL\ text. - -6. A comment must have properly nested occurrences of left and right -braces, otherwise \.{WEAVE} and \.{TANGLE} will not know where the comment -ends. However, the character pairs `\.{\\\{}' and `\.{\\\}}' do not count -as left and right braces in comments, and the character pair `\.{\\|}' -does not count as a delimiter that begins \PASCAL\ text. (The actual rule -is that a character after `\.\\' is ignored; hence in `\.{\\\\\{}' the -left brace {\sl does\/} count.) At present, \.{TANGLE} and \.{WEAVE} treat -comments in slightly different ways, and it is necessary to satisfy both -conventions: \.{TANGLE} ignores `\.|' characters entirely, while \.{WEAVE} -uses them to switch between \TeX\ text and \PASCAL\ text. Therefore, a -comment that includes a brace in a string in \pb---e.g., `\.{\{{ }look at -this |"\{"| \}}'---will be handled correctly by \.{WEAVE}, but \.{TANGLE} -will think there is an unmatched left brace. In order to satisfy both -processors, one can write `\.{\{{ }look at this \\leftbrace\\{ }\}}', after -setting up`\.{\\def\\leftbrace\{|"\{"|\}}'. - -7. Reserved words of \PASCAL\ must appear entirely in lowercase letters -in the \.{WEB} file; otherwise their special nature will not be recognized -by \.{WEAVE}. You could, for example, have a macro named \\{END} and it -would not be confused with \PASCAL's \&{end}. - -However, you may not want to capitalize macro names just to distinguish them -from other identifiers. Here is a way to unreserve \PASCAL's reserved word -`\&{type}' and to substitute another word `\&{mtype}' in the \.{WEB} file. -$$\vbox{\halign{\tt #\hfil\cr -@d type(\char'43) == mem[\char'43].t\cr -@d mtype == t \char'100\char'46{} y \char'100\char'46{} p - \char'100\char'46{} e\cr -@f mtype == type\cr -@f type == true\cr}}$$ -In the output of \.{TANGLE}, the macro \.{mtype} now produces `\.{TYPE}' -and the macro \.{type(x)} now produces `\.{MEM[X].T}'. In the output of -\.{WEAVE}, these same inputs produce \&{mtype} and \\{type}(\|x), -respectively. - -8. The \.{@f} feature allows you to define one identifier to act like -another, and these format definitions are carried out sequentially, as the -example above indicates. However, a given identifier has only one printed format -throughout the entire document (and this format will even be used before -the \.{@f} that defines it). The reason is that \.{WEAVE} operates in two -passes; it processes \.{@f}'s and cross-references on the first pass and -it does the output on the second. - -9. You may want some \.{@f} formatting that doesn't correspond to any -existing reserved word. In that case, \.{WEAVE} could be extended in a -fairly obvious way to include new ``reserved words'' in its vocabulary. -The identifier `\&{xclause}' has in fact been included already as a -reserved word, so that it can be used to format the `\&{loop}' macro, -where `\&{loop}' is defined to be equivalent to `\&{while \\{true} do}'. - -10. Sometimes it is desirable to insert spacing into \PASCAL\ code that is -more general than the thin space provided by `\.{@,}'. The \.{@t} feature -can be used for this purpose; e.g., `\.{@t\\hskip 1in@>}' will -leave one inch of blank space. Furthermore, `\.{@t\\4@>}' can be -used to backspace by one unit of indentation, since the control sequence -\.{\\4} is defined in \.{webmac} to be such a backspace. (This -control sequence is used, for example, at the beginning of lines that -contain labeled statements, so that the label will stick out a little at -the left.) - -11. \.{WEAVE} and \.{TANGLE} are designed to work with two input files, -called \\{web\_file} and \\{change\_file}, where \\{change\_file} contains -data that overrides selected portions of \\{web\_file}. The resulting merged -text is actually what has been called the \.{WEB} file elsewhere in this -report. - -Here's how it works: The change file consists of zero or more ``changes,'' -where a change has the form `\.{@x}$\langle$old lines$\rangle$\.{@y}$\langle$% -new lines$\rangle$\.{@z}'. The special control codes \.{@x}, \.{@y}, \.{@z}, -which are allowed only in change files, must appear at the beginning of a line; -the remainder of such a line is ignored. -The $\langle$old lines$\rangle$ represent material that exactly matches -consecutive lines of the \\{web\_file}; the $\langle$new lines$\rangle$ -represent zero or more lines that are supposed to replace the old. Whenever -the first ``old line'' of a change is found to match a line in the -\\{web\_file}, all the other lines in that change must match too. - -Between changes, before the first change, and after the last change, -the change file can have any number of lines that do not begin with -`\.{@x}', `\.{@y}', or~`\.{@z}'. Such lines are bypassed and not used for -matching purposes. - -This dual-input feature is useful when working with a master \.{WEB} file -that has been received from elsewhere (e.g., \.{TANGLE.WEB} or -\.{WEAVE.WEB} or \.{TEX.WEB}), when changes are desirable to customize the -program for your local computer system. You will be able to debug your -system-dependent changes without clobbering the master web file; and once -your changes are working, you will be able to incorporate them readily -into new releases of the master web file that you might receive from time -to time. -\section Appendices. -The basic ideas of \.{WEB} can be understood most easily by looking at -examples of ``real'' programs. Appendix~A shows the \.{WEB} input that -generated modules 55--59 of the \.{WEAVE} program; Appendix~B shows the -corresponding \TeX\ code output by \.{WEAVE}; and Appendix~C shows excerpts -from the corresponding \PASCAL\ code output by \.{TANGLE}. - -The complete webs for \.{WEAVE} and \.{TANGLE} appear as the bulk of this -report, in Appendices D and~E. The reader should first compare Appendix~A -to the corresponding portion of Appendix~D; then the same material should -be compared to Appendices B and~C. Finally, if time permits, the reader may -enjoy studying the complete programs in Appendices D and~E, since \.{WEAVE} -and \.{TANGLE} contain several interesting aspects, and since an attempt -has been made in these appendices to evolve a style of programming that -makes good use of the \.{WEB} language. - -Finally, Appendix F is the `\.{webmac}' file that sets \TeX\ up to accept -the output of \.{WEAVE}; Appendix~G discusses how to use some of its macros -to vary the output formats; and Appendix~H discusses what needs to be done -when \.{WEAVE} and \.{TANGLE} are installed in a new operating environment. -\section Performance statistics. -The programs in Appendices D and E will optionally keep statistics on -how much memory they require. Here is what they once printed out when -processing themselves: - -\def\pstat#1#2#3 -#4{\yskip\noindent\.{#1} applied to \.{#2} (cpu time #3 sec)\par -\halign{\quad\tt##\hfil\cr#4}} - -\pstat{TANGLE}{TANGLE}{15} -{Memory usage statistics:\cr -456 names, 215 replacement texts;\cr -3396+3361 bytes, 6685+7329+5805 tokens.\cr} - -\pstat{TANGLE}{WEAVE}{30} -{Memory usage statistics:\cr -692 names, 339 replacement texts;\cr -4576+4294 bytes, 10184+9875+9150 tokens.\cr} - -\pstat{WEAVE}{TANGLE}{45} -{Memory usage statistics: 478 names, 2045 cross references, 4159+3729 bytes;\cr -parsing required 684 scraps, 1300 texts, 3766 tokens, 119 levels;\cr -sorting required 34 levels.\cr} - -\pstat{WEAVE}{WEAVE}{65} -{Memory usage statistics: 737 names, 3306 cross references, 4896+4962 bytes;\cr -parsing required 684 scraps, 1300 texts, 3766 tokens, 119 levels;\cr -sorting required 73 levels.\cr} - -\yskip\noindent The cpu time for \PASCAL\ to process \.{TANGLE.PAS} was -approximately 13 seconds, and \.{WEAVE.PAS} took approximately 26 seconds; -thus the tangling time was slightly more than the compiling time. The cpu -time for \TeX\ to process \.{TANGLE.TEX} was approximately 500 seconds, -and \.{WEAVE.TEX} took approximately 750 seconds (i.e., about 7 -seconds per printed page, where these pages are substantially larger than -the pages in a normal book). All cpu times quoted are for a DECsystem-10. - -\def\K{{\mc K}} -The file \.{TANGLE.WEB} is about 125\K\ characters long; \.{TANGLE} -reduces it to a file \.{TANGLE.PAS} whose size is about 42\K\ characters, -while \.{WEAVE} expands it to a file \.{TANGLE.TEX} of about 185\K\null. -The corresponding file sizes for \.{WEAVE.WEB}, \.{WEAVE.PAS}, and -\.{WEAVE.TEX} are 180\K, 89\K, and 265\K. - -The much larger file \.{TEX.WEB} led to the following numbers: - -\pstat{TANGLE}{TEX}{110} -{Memory usage statistics:\cr -3750 names, 1768 replacement texts;\cr -41895+41053 bytes, 42378+45074+41091 tokens.\cr} - -\pstat{WEAVE}{TEX}{270} -{Memory usage statistics: 3412 names, 19699 cross references, - 37900+40232 bytes;\cr -parsing required 685 scraps, 1303 texts, 3784 tokens, 104 levels;\cr -sorting required 52 levels.\cr} - -\yskip\noindent -\PASCAL\ did \.{TEX.PAS} in about 75 seconds; \TeX\ did \.{TEX.TEX} -in about 3600. -% Here is a quotation that could not really be omitted - -\vfill - -{\baselineskip9pt -\halign to\hsize{\hfil\quoteit#\tabskip 0pt plus 100pt& - \hfil\quoteit#\tabskip 0pt\cr -O, what a tangled web we weave& - O, what a tangled WEB we weave\cr -When first we practise to deceive!& - When \TeX\ we practise to conceive!\cr -\noalign{\vskip 2pt} -\quoterm ---SIR WALTER SCOTT, {\quoteit Marmion} 6:17 (1808)& - \quoterm ---RICHARD PALAIS (1982)\cr -}} -\eject -\def\runninghead{APPENDIX A --- {\tentt WEB} FILE FORMAT} -\section Appendix A. -This excerpt from \.{WEAVE.WEB} produced modules 55--59 in Appendix~D. -Note that some of the lines are indented to show the program structure. -The indentation is ignored by \.{WEAVE} and \.{TANGLE}, but users find -that \.{WEB} files are quite readable if they have some such indentation. - -\vskip 6pt -\begingroup \def\tt{\eighttt} \baselineskip9pt -% Note to myself: I had to remove SAIL characters from the file here! -% Also tabs replaced by double-space. The changes were made in WEAVE source. -\verbatim -@* Searching for identifiers. -The hash table described above is updated by the |id_lookup| procedure, -which finds a given identifier and returns a pointer to its index in -|byte_start|. The identifier is supposed to match character by character -and it is also supposed to have a given |ilk| code; the same name may be -present more than once if it is supposed to appear in the index with -different typesetting conventions. -If the identifier was not already present, it is inserted into the table. - -Because of the way \.{WEAVE}'s scanning mechanism works, it is most convenient -to let |id_lookup| search for an identifier that is present in the |buffer| -array. Two other global variables specify its position in the buffer: the -first character is |buffer[id_first]|, and the last is |buffer[id_loc-1]|. - -@<Glob...@>= -@!id_first:0..long_buf_size; {where the current identifier begins in the buffer} -@!id_loc:0..long_buf_size; {just after the current identifier in the buffer} -@# -@!hash:array [0..hash_size] of sixteen_bits; {heads of hash lists} - -@ Initially all the hash lists are empty. - -@<Local variables for init...@>= -@!h:0..hash_size; {index into hash-head array} - -@ @<Set init...@>= -for h:=0 to hash_size-1 do hash[h]:=0; - -@ Here now is the main procedure for finding identifiers (and index -entries). The parameter |t| is set to the desired |ilk| code. The -identifier must either have |ilk=t|, or we must have -|t=normal| and the identifier must be a reserved word. - -@p function id_lookup(@!t:eight_bits):name_pointer; {finds current identifier} -label found; -var i:0..long_buf_size; {index into |buffer|} -@!h:0..hash_size; {hash code} -@!k:0..max_bytes; {index into |byte_mem|} -@!w:0..ww-1; {row of |byte_mem|} -@!l:0..long_buf_size; {length of the given identifier} -@!p:name_pointer; {where the identifier is being sought} -begin l:=id_loc-id_first; {compute the length} -@<Compute the hash code |h|@>; -@<Compute the name location |p|@>; -if p=name_ptr then @<Enter a new name into the table at position |p|@>; -id_lookup:=p; -end; - -@ A simple hash code is used: If the sequence of -ASCII codes is $c_1c_2\ldots c_m$, its hash value will be -$$(2^{n-1}c_1+2^{n-2}c_2+\cdots+c_n)\,\bmod\,|hash_size|.$$ - -@<Compute the hash...@>= -h:=buffer[id_first]; i:=id_first+1; -while i<id_loc do - begin h:=(h+h+buffer[i]) mod hash_size; incr(i); - end -?endgroup % end of verbatim mode -\endgroup -\vfill\eject -\def\runninghead{APPENDIX B --- TRANSLATION BY {\tentt WEAVE}} -\section Appendix B. -This excerpt from \.{WEAVE.TEX} corresponds to Appendix A. - -% I've inserted \vfill's here at the blank lines, to squeeze this on one page! -\begingroup \def\tt{\eighttt} \baselineskip9pt -\verbatim -?vfill?verbatimgobble -\N55. Searching for identifiers. -The hash table described above is updated by the \\{id\_lookup} procedure, -which finds a given identifier and returns a pointer to its index in -\\{byte\_start}. The identifier is supposed to match character by character -and it is also supposed to have a given \\{ilk} code; the same name may be -present more than once if it is supposed to appear in the index with -different typesetting conventions. -If the identifier was not already present, it is inserted into the table. -?vfill?verbatimgobble -Because of the way \.{WEAVE}'s scanning mechanism works, it is most convenient -to let \\{id\_lookup} search for an identifier that is present in the % -\\{buffer} -array. Two other global variables specify its position in the buffer: the -first character is $\\{buffer}[\\{id\_first}]$, and the last is $\\{buffer}[% -\\{id\_loc}-1]$. -?vfill?verbatimgobble -\Y\P$\4\X9:Globals in the outer block\X\mathrel{+}\S$\6 -\4\\{id\_first}: \37$0\to\\{long\_buf\_size}$;\C{where the current identifier -begins in the buffer}\6 -\4\\{id\_loc}: \37$0\to\\{long\_buf\_size}$;\C{just after the current -identifier in the buffer}\7 -\4\\{hash}: \37\&{array} $[0\to\\{hash\_size}]$ \1\&{of}\5 -\\{sixteen\_bits};\C{heads of hash lists}\2\par -\fi -?vfill?verbatimgobble -\M56. Initially all the hash lists are empty. -?vfill?verbatimgobble -\Y\P$\4\X16:Local variables for initialization\X\mathrel{+}\S$\6 -\4\|h: \37$0\to\\{hash\_size}$;\C{index into hash-head array}\par -\fi -?vfill?verbatimgobble -\M57. \P$\X10:Set initial values\X\mathrel{+}\S$\6 -\&{for} $\|h\K0\mathrel{\&{to}}\\{hash\_size}-1$ \1\&{do}\5 -$\\{hash}[\|h]\K0$;\2\par -\fi -?vfill?verbatimgobble -\M58. Here now is the main procedure for finding identifiers (and index -entries). The parameter \|t is set to the desired \\{ilk} code. The -identifier must either have $\\{ilk}=\|t$, or we must have -$\|t=\\{normal}$ and the identifier must be a reserved word. -?vfill?verbatimgobble -\Y\P\4\&{function}\1\ \37$\\{id\_lookup}(\|t:\\{eight\_bits})$: \37\\{name% -\_pointer};\C{finds current identifier}\6 -\4\&{label} \37\\{found};\6 -\4\&{var} \37\|i: \37$0\to\\{long\_buf\_size}$;\C{index into \\{buffer}}\6 -\|h: \37$0\to\\{hash\_size}$;\C{hash code}\6 -\|k: \37$0\to\\{max\_bytes}$;\C{index into \\{byte\_mem}}\6 -\|w: \37$0\to\\{ww}-1$;\C{row of \\{byte\_mem}}\6 -\|l: \37$0\to\\{long\_buf\_size}$;\C{length of the given identifier}\6 -\|p: \37\\{name\_pointer};\C{where the identifier is being sought}\2\6 -\&{begin} \37$\|l\K\\{id\_loc}-\\{id\_first}$;\C{compute the length}\6 -\X59:Compute the hash code \|h\X;\6 -\X60:Compute the name location \|p\X;\6 -\&{if} $\|p=\\{name\_ptr}$ \1\&{then}\5 -\X62:Enter a new name into the table at position \|p\X;\2\6 -$\\{id\_lookup}\K\|p$;\6 -\&{end};\par -\fi -?vfill?verbatimgobble -\M59. A simple hash code is used: If the sequence of -ASCII codes is $c_1c_2\ldots c_m$, its hash value will be -$$(2^{n-1}c_1+2^{n-2}c_2+\cdots+c_n)\,\bmod\,\\{hash\_size}.$$ -?vfill?verbatimgobble -\Y\P$\4\X59:Compute the hash code \|h\X\S$\6 -$\|h\K\\{buffer}[\\{id\_first}]$;\5 -$\|i\K\\{id\_first}+1$;\6 -\&{while} $\|i<\\{id\_loc}$ \1\&{do}\6 -\&{begin} \37$\|h\K(\|h+\|h+\\{buffer}[\|i])\mathbin{\&{mod}}\\{hash\_size}$;\5 -$\\{incr}(\|i)$;\6 -\&{end}\2\par -\U section~58.\fi -?endgroup -\endgroup -\eject -\def\runninghead{APPENDIX C --- TRANSLATION BY {\tentt TANGLE}} -\section Appendix C. -The \.{TANGLE} processor converts \.{WEAVE.WEB} into a syntactically -correct (but not very pretty) \PASCAL\ program \.{WEAVE.PAS}. -The first three and last two lines of output are shown here, together with the -lines of code generated by modules 55--62 and the environments of -those lines. There are 1559 lines in all; the notation -`\.. \\. \\.' stands for portions that are not shown. - -Note that, for example, the code corresponding to -module 55 begins with `\.{\{55:\}}' and ends with `\.{\{:55\}}'; -the code from modules 59--62 has been tangled into the code from module 58. - -\vskip6pt -\verbatim -{2:}{4:}{$C-,A+,D-}{[$C+,D+]}{:4} -PROGRAM WEAVE(WEBFILE,CHANGEFILE,TEXFILE);LABEL 9999;CONST{8:} -MAXBYTES=45000;MAXNAMES=5000;MAXMODULES=2000;HASHSIZE=353;BUFSIZE=100; - . . . -TOKPTR:0..MAXTOKS;{MAXTOKPTR,MAXTXTPTR:0..MAXTOKS;}{:53}{55:} -IDFIRST:0..LONGBUFSIZE;IDLOC:0..LONGBUFSIZE; -HASH:ARRAY[0..HASHSIZE]OF SIXTEENBITS;{:55}{63:}CURNAME:NAMEPOINTER; - . . . -PROCEDURE INITIALIZE;VAR{16:}I:0..127;{:16}{40:}WI:0..1;{:40}{56:} -H:0..HASHSIZE;{:56}{247:}C:ASCIICODE;{:247}BEGIN{10:}HISTORY:=0;{:10} - . . . -TOKPTR:=1;TEXTPTR:=1;TOKSTART[0]:=1;TOKSTART[1]:=1;{MAXTOKPTR:=1; -MAXTXTPTR:=1;}{:54}{57:}FOR H:=0 TO HASHSIZE-1 DO HASH[H]:=0;{:57}{94:} -SCANNINGHEX:=FALSE;{:94}{102:}MODTEXT[0]:=32;{:102}{124:}OUTPTR:=1; - . . . -IF R=0 THEN XREF[P]:=XREFPTR ELSE XMEM[R].XLINKFIELD:=XREFPTR;END;{:51} -{58:}FUNCTION IDLOOKUP(T:EIGHTBITS):NAMEPOINTER;LABEL 31; -VAR I:0..LONGBUFSIZE;H:0..HASHSIZE;K:0..MAXBYTES;W:0..1; -L:0..LONGBUFSIZE;P:NAMEPOINTER;BEGIN L:=IDLOC-IDFIRST;{59:} -H:=BUFFER[IDFIRST];I:=IDFIRST+1; -WHILE I<IDLOC DO BEGIN H:=(H+H+BUFFER[I])MOD HASHSIZE;I:=I+1;END{:59}; -{60:}P:=HASH[H]; -WHILE P<>0 DO BEGIN IF(BYTESTART[P+2]-BYTESTART[P]=L)AND((ILK[P]=T)OR((T -=0)AND(ILK[P]>3)))THEN{61:}BEGIN I:=IDFIRST;K:=BYTESTART[P];W:=P MOD 2; -WHILE(I<IDLOC)AND(BUFFER[I]=BYTEMEM[W,K])DO BEGIN I:=I+1;K:=K+1;END; -IF I=IDLOC THEN GOTO 31;END{:61};P:=LINK[P];END;P:=NAMEPTR; -LINK[P]:=HASH[H];HASH[H]:=P;31:{:60};IF P=NAMEPTR THEN{62:} -BEGIN W:=NAMEPTR MOD 2; -IF BYTEPTR[W]+L>MAXBYTES THEN BEGIN WRITELN(TERMOUT); -WRITE(TERMOUT,'! Sorry, ','byte memory',' capacity exceeded');ERROR; -HISTORY:=3;JUMPOUT;END; -IF NAMEPTR+2>MAXNAMES THEN BEGIN WRITELN(TERMOUT); -WRITE(TERMOUT,'! Sorry, ','name',' capacity exceeded');ERROR;HISTORY:=3; -JUMPOUT;END;I:=IDFIRST;K:=BYTEPTR[W]; -WHILE I<IDLOC DO BEGIN BYTEMEM[W,K]:=BUFFER[I];K:=K+1;I:=I+1;END; -BYTEPTR[W]:=K;BYTESTART[NAMEPTR+2]:=K;NAMEPTR:=NAMEPTR+1;ILK[P]:=T; -XREF[P]:=0;END{:62};IDLOOKUP:=P;END;{:58}{66:} -FUNCTION MODLOOKUP(L:SIXTEENBITS):NAMEPOINTER;LABEL 31;VAR C:0..4; - . . . -WRITE(TERMOUT,'(That was a fatal error, my friend.)');END;END{:263}; -END.{:261} -?endgroup -\vfill\eject -\pageno=197 % take account of the page numbers for App's D and E. -\def\runninghead{APPENDIX F --- MACROS FOR FORMATTING} -\section Appendix F: The \.{webmac.tex} file. -This is the file that extends ``plain \TeX'' format in order to support the -features needed by the output of \.{WEAVE}. - -\vskip6pt -\verbatim -% standard macros for WEB listings (in addition to PLAIN.TEX) -\xdef\fmtversion{\fmtversion+WEBMAC4.0} % identifies current set of macros -\parskip 0pt % no stretch between paragraphs -\parindent 1em % for paragraphs and for the first line of Pascal text - -\font\eightrm=cmr8 \let\sc=\eightrm % NOT a caps-and-small-caps font! -\let\mainfont=\tenrm -\font\titlefont=cmr7 scaled\magstep4 % title on the contents page -\font\ttitlefont=cmtt10 scaled\magstep2 % typewriter type in title -\font\tentex=cmtex10 % TeX extended character set (used in strings) - -\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers -\def\|#1{\hbox{$#1$}} % one-letter identifiers look a bit better this way -\def\{\hbox{\bf#1\/}} % boldface type for reserved words -\def\.#1{\hbox{\tentex % typewriter type for strings - \let\\=\BS % backslash in a string - \let\'=\RQ % right quote in a string - \let\`=\LQ % left quote in a string - \let\{=\LB % left brace in a string - \let\}=\RB % right brace in a string - \let\~=\TL % tilde in a string - \let\ =\SP % space in a string - \let\_=\UL % underline in a string - \let\&=\AM % ampersand in a string - #1}} -\def\#{\hbox{\tt\char`\#}} % parameter sign -\def\${\hbox{\tt\char`\$}} % dollar sign -\def\%{\hbox{\tt\char`\%}} % percent sign -\def\^{\ifmmode\mathchar"222 \else\char`^ \fi} % pointer or hat -% circumflex accents can be obtained from \^^D instead of \^ -\def\AT!{@} % at sign for control text - -\chardef\AM=`\& % ampersand character in a string -\chardef\BS=`\\ % backslash in a string -\chardef\LB=`\{ % left brace in a string -\def\LQ{{\tt\char'22}} % left quote in a string -\chardef\RB=`\} % right brace in a string -\def\RQ{{\tt\char'23}} % right quote in a string -\def\SP{{\tt\char`\ }} % (visible) space in a string -\chardef\TL=`\~ % tilde in a string -\chardef\UL=`\_ % underline character in a string - -\newbox\bak \setbox\bak=\hbox to -1em{} % backspace one em -\newbox\bakk\setbox\bakk=\hbox to -2em{} % backspace two ems - -\newcount\ind % current indentation in ems -\def\1{\global\advance\ind by1\hangindent\ind em} % indent one more notch -\def\2{\global\advance\ind by-1} % indent one less notch -\def\3#1{\hfil\penalty#10\hfilneg} % optional break within a statement -\def\4{\copy\bak} % backspace one notch -\def\5{\hfil\penalty-1\hfilneg\kern2.5em\copy\bakk\ignorespaces}% optional break -\def\6{\ifmmode\else\par % forced break - \hangindent\ind em\noindent\kern\ind em\copy\bakk\ignorespaces\fi} -\def\7{\Y\6} % forced break and a little extra space - -\let\yskip=\smallskip -\def\to{\mathrel{.\,.}} % double dot, used only in math mode -\def\note#1#2.{\Y\noindent{\hangindent2em\baselineskip10pt\eightrm#1~#2.\par}} -\def\lapstar{\rlap{*}} -\def\startsection{\Q\noindent{\let\*=\lapstar\bf\modstar.\quad}} -\def\defin#1{\global\advance\ind by 2 \1\&{#1 }} % begin `define' or `format' -\def\A{\note{See also section}} % crossref for doubly defined section name -\def\As{\note{See also sections}} % crossref for multiply defined section name -\def\B{\mathopen{\.{@\{}}} % begin controlled comment -\def\C#1{\ifmmode\gdef\XX{\null$\null}\else\gdef\XX{}\fi % Pascal comments - \XX\hfil\penalty-1\hfilneg\quad$\{\,$#1$\,\}$\XX} -\def\D{\defin{define}} % macro definition -\def\E{\cdot10^} % exponent in floating point constant -\def\ET{ and~} % conjunction between two section numbers -\def\ETs{, and~} % conjunction between the last two of several section numbers -\def\F{\defin{format}} % format definition -\let\G=\ge % greater than or equal sign -\def\H#1{\hbox{\rm\char"7D\tt#1}} % hexadecimal constant -\let\I=\ne % unequal sign -\def\J{\.{@\&}} % TANGLE's join operation -\let\K=\gets % left arrow -\let\L=\le % less than or equal sign -\outer\def\M#1.{\MN#1.\ifon\vfil\penalty-100\vfilneg % beginning of section - \vskip12ptminus3pt\startsection\ignorespaces} -\outer\def\N#1.#2.{\MN#1.\vfil\eject % beginning of starred section - \def\rhead{\uppercase{\ignorespaces#2}} % define running headline - \message{*\modno} % progress report - \edef\next{\write\cont{\Z{#2}{\modno}{\the\pageno}}}\next % to contents file - \ifon\startsection{\bf\ignorespaces#2.\quad}\ignorespaces} -\def\MN#1.{\par % common code for \M, \N - {\xdef\modstar{#1}\let\*=\empty\xdef\modno{#1}} - \ifx\modno\modstar \onmaybe \else\ontrue \fi \mark{\modno}} -\def\O#1{\hbox{\rm\char'23\kern-.2em\it#1\/\kern.05em}} % octal constant -\def\P{\rightskip=0pt plus 100pt minus 10pt % go into Pascal mode - \sfcode`;=3000 - \pretolerance 10000 - \hyphenpenalty 10000 \exhyphenpenalty 10000 - \global\ind=2 \1\ \unskip} -\def\Q{\rightskip=0pt % get out of Pascal mode - \sfcode`;=1500 \pretolerance 200 \hyphenpenalty 50 \exhyphenpenalty 50 } -\let\R=\lnot % logical not -\let\S=\equiv % equivalence sign -\def\T{\mathclose{\.{@\}}}} % terminate controlled comment -\def\U{\note{This code is used in section}} % crossref for use of a section -\def\Us{\note{This code is used in sections}} % crossref for uses of a section -\let\V=\lor % logical or -\let\W=\land % logical and -\def\X#1:#2\X{\ifmmode\gdef\XX{\null$\null}\else\gdef\XX{}\fi % section name - \XX$\langle\,$#2{\eightrm\kern.5em#1}$\,\rangle$\XX} -\def\Y{\par\yskip} -\let\Z=\let % now you can \send the control sequence \Z -\def\){\hbox{\.{@\$}}} % sign for string pool check sum -\def\]{\hbox{\.{@\\}}} % sign for forced line break -\def\=#1{\kern2pt\hbox{\vrule\vtop{\vbox{\hrule - \hbox{\strut\kern2pt\.{#1}\kern2pt}} - \hrule}\vrule}\kern2pt} % verbatim string -\let\~=\ignorespaces -\let\*=* - -\def\onmaybe{\let\ifon=\maybe} \let\maybe=\iftrue -\newif\ifon \newif\iftitle \newif\ifpagesaved -\def\lheader{\mainfont\the\pageno\eightrm\qquad\rhead\hfill\title\qquad - \tensy x\mainfont\topmark} % top line on left-hand pages -\def\rheader{\tensy x\mainfont\topmark\eightrm\qquad\title\hfill\rhead - \qquad\mainfont\the\pageno} % top line on right-hand pages -\def\page{\box255 } -\def\normaloutput#1#2#3{\ifodd\pageno\hoffset=\pageshift\fi - \shipout\vbox{ - \vbox to\fullpageheight{ - \iftitle\global\titlefalse - \else\hbox to\pagewidth{\vbox to10pt{}\ifodd\pageno #3\else#2\fi}\fi - \vfill#1}} % parameter #1 is the page itself - \global\advance\pageno by1} - -\def\rhead{\.{WEB} OUTPUT} % this running head is reset by starred sections -\def\title{} % an optional title can be set by the user -\def\topofcontents{\centerline{\titlefont\title} - \vfill} % this material will start the table of contents page -\def\botofcontents{\vfill} % this material will end the table of contents page -\def\contentspagenumber{0} % default page number for table of contents -\newdimen\pagewidth \pagewidth=6.5in % the width of each page -\newdimen\pageheight \pageheight=8.7in % the height of each page -\newdimen\fullpageheight \fullpageheight=9in % page height including headlines -\newdimen\pageshift \pageshift=0in % shift righthand pages wrt lefthand ones -\def\magnify#1{\mag=#1\pagewidth=6.5truein\pageheight=8.7truein - \fullpageheight=9truein\setpage} -\def\setpage{\hsize\pagewidth\vsize\pageheight} % use after changing page size -\def\contentsfile{CONTENTS} % file that gets table of contents info -\def\readcontents{\input CONTENTS} - -\newwrite\cont -\output{\setbox0=\page % the first page is garbage - \openout\cont=\contentsfile - \global\output{\normaloutput\page\lheader\rheader}} -\setpage -\vbox to \vsize{} % the first \topmark won't be null - -\def\ch{\note{The following sections were changed by the change file:} - \let\*=\relax} -\newbox\sbox % saved box preceding the index -\newbox\lbox % lefthand column in the index -\def\inx{\par\vskip6pt plus 1fil % we are beginning the index - \write\cont{} % ensure that the contents file isn't empty - \closeout\cont % the contents information has been fully gathered - \output{\ifpagesaved\normaloutput{\box\sbox}\lheader\rheader\fi - \global\setbox\sbox=\page \global\pagesavedtrue} - \pagesavedfalse \eject % eject the page-so-far and predecessors - \setbox\sbox\vbox{\unvbox\sbox} % take it out of its box - \vsize=\pageheight \advance\vsize by -\ht\sbox % the remaining height - \hsize=.5\pagewidth \advance\hsize by -10pt - % column width for the index (20pt between cols) - \parfillskip 0pt plus .6\hsize % try to avoid almost empty lines - \def\lr{L} % this tells whether the left or right column is next - \output{\if L\lr\global\setbox\lbox=\page \gdef\lr{R} - \else\normaloutput{\vbox to\pageheight{\box\sbox\vss - \hbox to\pagewidth{\box\lbox\hfil\page}}}\lheader\rheader - \global\vsize\pageheight\gdef\lr{L}\global\pagesavedfalse\fi} - \message{Index:} - \parskip 0pt plus .5pt - \outer\def\:##1, {\par\hangindent2em\noindent##1:\kern1em} % index entry - \let\ttentry=\. \def\.##1{\ttentry{##1\kern.2em}} % give \tt a little room - \def\[##1]{$\underline{##1}$} % underlined index item - \rm \rightskip0pt plus 2.5em \tolerance 10000 \let\*=\lapstar - \hyphenpenalty 10000 \parindent0pt} -\def\fin{\par\vfill\eject % this is done when we are ending the index - \ifpagesaved\null\vfill\eject\fi % output a null index column - \if L\lr\else\null\vfill\eject\fi % finish the current page - \parfillskip 0pt plus 1fil - \def\rhead{NAMES OF THE SECTIONS} - \message{Section names:} - \output{\normaloutput\page\lheader\rheader} - \setpage - \def\note##1##2.{\hfil\penalty-1\hfilneg\quad{\eightrm##1 ##2.}} - \linepenalty=10 % try to conserve lines - \def\U{\note{Used in section}} % crossref for use of a section - \def\Us{\note{Used in sections}} % crossref for uses of a section - \def\:{\par\hangindent 2em}\let\*=*\let\.=\ttentry} -\def\con{\par\vfill\eject % finish the section names - \rightskip 0pt \hyphenpenalty 50 \tolerance 200 - \setpage - \output{\normaloutput\page\lheader\rheader} - \titletrue % prepare to output the table of contents - \pageno=\contentspagenumber \def\rhead{TABLE OF CONTENTS} - \message{Table of contents:} - \topofcontents - \line{\hfil Section\hbox to3em{\hss Page}} - \def\Z##1##2##3{\line{\ignorespaces##1 - \leaders\hbox to .5em{.\hfil}\hfil\ ##2\hbox to3em{\hss##3}}} - \readcontents\relax % read the contents info - \botofcontents \end} % print the contents page(s) and terminate -?endgroup -\vfill\eject -\def\runninghead{APPENDIX G --- NOTES ON FORMATTING} -\section Appendix G: How to use \.{WEB} macros. -The macros in \.{webmac} make it possible to produce a variety of formats -without editing the output of \.{WEAVE}, and the purpose of this appendix -is to explain some of the possibilities. - -\def\point#1.{\yskip\indent#1.\quad\ignorespaces} - -\point 1. Three fonts have been declared in addition to the standard fonts of -\.{PLAIN} format: You can say `\.{\{\\sc STUFF\}}' to get {\sc STUFF} -in small caps; and you can select the largish fonts \.{\\titlefont} -and \.{\\ttitlefont} in the title of your document, where \.{\\ttitlefont} -is a typewriter style of type. - -\point 2. When you mention an identifier in \TeX\ text, you normally call -it `\.{|identifier|}'. But you can also say `\.{\\\\\{identifier\}}'. The -output will look the same in both cases, but the second alternative -doesn't put \\{identifier} into the index, since -it bypasses \.{WEAVE}'s translation from \PASCAL\ mode. - -\point 3. To get typewriter-like type, as when referring to `\.{WEB}', you -can use the `\.{\\.}' macro (e.g., `\.{\\.\{WEB\}}'). In the argument to -this macro you should insert an additional backslash before the symbols -listed as `special string characters' in the index to \.{WEAVE}, i.e., -before backslashes and dollar signs and the like. -A `\.{\\\ }' here will result in the visible space symbol; to get an -invisible space following a control sequence you can say `\.{\{\ \}}'. - -\point 4. The three control sequences \.{\\pagewidth}, \.{\\pageheight}, -and \.{\\fullpageheight} can be redefined in the limbo section at the -beginning of your \.{WEB} file, to change the dimensions of each page. -The standard settings -$$\lpile{\.{\\pagewidth=6.5in}\cr - \.{\\pageheight=8.7in}\cr - \.{\\fullpageheight=9in}\cr}$$ -were used to prepare the present report; \.{\\fullpageheight} is -\.{\\pageheight} plus room for the additional heading and page numbers at -the top of each page. If you change any of these quantities, you should -call the macro \.{\\setpage} immediately after making the change. - -\point 5. The \.{\\pageshift} macro defines an amount by which right-hand -pages (i.e., odd-numbered pages) are shifted right with respect to -left-hand (even-numbered) ones. By adjusting this amount you may be -able to get two-sided output in which the page numbers line up on -opposite sides of each sheet. - -\point 6. The \.{\\title} macro will appear at the top of each page -in small caps. For example, Appendix~D was produced after saying -`\.{\\def\\title\{WEAVE\}}'. - -\point 7. The first page usually is assigned page number 1. -To start on page 16, with contents -on page 15, say this: `\.{\\def\\contentspagenumber\{15\}} -\.{\\pageno=\\contentspagenumber} \.{\\advance\\pageno by 1}'. (Appendix~D -was generated that way.) - -\point 8. The macro \.{\\iftitle} will suppress the header line if it is -defined by `\.{\\titletrue}'. The normal value is \.{\\titlefalse} -except for the table of contents; thus, the contents -page is usually unnumbered. - -Two macros are provided to give flexibility to the table of -contents: \.{\\topofcontents} is invoked just before the contents -info is read, and \.{\\botofcontents} is invoked just after. -For example, Appendix~D was produced with the following definitions: -$$\lpile{\.{\\def\\topofcontents\{\\null\\vfill}\cr - \.{ { }\\titlefalse \% include headline on the contents page}\cr - \.{ { }\\def\\rheader\{\\mainfont Appendix D\\hfil 15\}}\cr - \.{ { }\\centerline\{\\titlefont The \{\\ttitlefont WEAVE\}{ }processor\}}\cr - \.{ { }\\vskip 15pt \\centerline\{(Version 4)\}{ }\\vfill\}}\cr}$$ -Redefining \.{\\rheader}, which is the headline for right-hand pages, -suffices in this case to put the desired information at the top of the -contents page. - -\point 9. Data for the table of contents is written to a file that -is read after the indexes have been \TeX ed; there's one line of data -for every starred module. For example, when Appendix~D was being generated, -a file \.{CONTENTS.TEX} containing -$$\lpile{\.{\\Z \{{ }Introduction\}\{1\}\{16\}}\cr - \.{\\Z \{{ }The character set\}\{11\}\{19\}}\cr}$$ -and similar lines was created. The \.{\\topofcontents} macro could -redefine \.{\\Z} so that the information appears in another format. - -\point 10. Sometimes it is necessary or desirable to divide the output of -\.{WEAVE} into subfiles that can be processed separately. For example, -the listing of \TeX\ runs to more than 500 pages, and that is enough to -exceed the capacity of many printing devices and/or their software. -When an extremely large job isn't cut into smaller pieces, the entire -process might be spoiled by a single error of some sort, making it -necessary to start everything over. - -Here's a safe way to break a woven file into three parts: -Say the pieces are $\alpha$, -$\beta$, and $\gamma$, where each piece begins with a starred module. -All macros should be defined in the opening limbo section of $\alpha$, -and copies of this \TeX\ code should be placed at the -beginning of $\beta$ and of $\gamma$. In order to process the parts -separately, we need to take care of two things: The starting page -numbers of $\beta$ and $\gamma$ need to be set up properly, and -the table of contents data from all three runs needs to be -accumulated. - -The \.{webmac} macros include two control sequences \.{\\contentsfile} and -\.{\\readcontents} that facilitate the necessary processing. We include -`\.{\\def\\contentsfile\{CONT1\}}' in the limbo section of $\alpha$, and -we include `\.{\\def\\contentsfile\{CONT2\}}' in the limbo section of -$\beta$; this causes \TeX\ to write the contents data for $\alpha$ and $\beta$ -into \.{CONT1.TEX} and \.{CONT2.TEX}. Now in $\gamma$ we say -$$\.{\\def\\readcontents\{\\input CONT1 \\input CONT2 \\input CONTENTS\}};$$ -this brings in the data from all three pieces, in the proper order. - -However, we still need to solve the page-numbering problem. One way to -do it is to include the following in the limbo material for $\beta$: -$$\lpile{\.{\\message\{Please type the last page number of part 1: \}}\cr - \.{\\read -1 to \\temp \\pageno=\\temp \\advance\\pageno by 1}\cr}$$ -Then you simply provide the necessary data when \TeX\ requests -it; a similar construction is used at the beginning of $\gamma$. - -This method can, of course, be used to divide a woven file into -any number of pieces. - -\point 11. Sometimes it is nice to include things in the index that are -typeset in a special way. For example, we might want to have an -index entry for `\TeX'. \.{WEAVE} provides two simple ways to -typeset an index entry (unless the entry is an identifier or a reserved word): -`\.{@\^}' gives roman type, and `\.{@.}' gives typewriter type. -But if we try to typeset `\TeX' in roman type by saying, e.g., -`\.{@\^\\TeX@>}', the backslash character gets in the way, -and this entry wouldn't appear in the index with the T's. - -The solution is to use the `\.{@:}' feature, declaring a macro that -simply removes a sort key as follows: -$$\.{\\def\\9\#1\{\}}$$ -Now you can say, e.g., `\.{@:TeX\}\{\\TeX@>}' in your \.{WEB} file; \.{WEAVE} -puts it into the index alphabetically, based on the sort key, and -produces the macro call `\.{\\9\{TeX\}\{\\TeX\}}' which will ensure that -the sort key isn't printed. - -A similar idea can be used to insert hidden material into module -names so that they are alphabetized in whatever way you might wish. -Some people call these tricks ``special refinements''; others call -them ``kludges''. - -\point 12. The control sequence \.{\\modno} is set to the number of the -module being typeset. - -\point 13. If you want to list only the modules that have changed, -together with the index, put the command `\.{\\let\\maybe=\\iffalse}' in -the limbo section before the first module of your \.{WEB} file. It's -customary to make this the first change in your change file. - -\point 14. To get output in languages other than English, redefine the -macros \.{\\A}, \.{\\As}, \.{\\ET}, \.{\\ETs}, \.{\\U}, \.{\\Us}, -\.{\\ch}, \.{\\fin}, and \.{\\con}. \.{WEAVE} itself need not be changed. - -\vfill\eject -\def\runninghead{APPENDIX H --- GETTING STARTED} -\section Appendix H: Installing the \.{WEB} system. -Suppose you want to use the \.{WEB} programs on your computer, and suppose -that you can't simply borrow them from somebody else who has the same -kind of machine. Here's what to do: - -\yskip -\def\step(#1){\par\hangindent 2em\noindent\hbox to 2em{\hfil(#1) }\ignorespaces} -\step(1) Get a tape that contains the files \.{WEAVE.WEB}, \.{TANGLE.WEB}, -\.{TANGLE.PAS}, and \.{WEBMAC.TEX}. The tape will probably also contain an -example change file \.{TANGLE.CH}. -\step(2) Look at the sections of \.{TANGLE} that are listed under ``system -dependencies'' in the index of Appendix~E above, and figure out what changes -(if any) will be needed for your system. -\step(3) Make a change file \.{TANGLE.CH} that contains the changes of~(2); -do not change your copy of \.{TANGLE.WEB}, leave it intact. (The -rules for change files are explained at the end of the manual just before -the appendices; you may want to look at the example change file that -arrived with your copy of \.{TANGLE.WEB}. It's also a good idea to -define all the ``switches'' like \&{debug} and \&{gubed} to be null in your -first change files; then you can sure that your compiler will handle -all of the code.) -\step(4) Make the changes of (2) in your copy of \.{TANGLE.PAS}. (If these -changes are extensive, you might be better off finding some computer that -that already has \.{TANGLE} running, and making the new \.{TANGLE.PAS} -from \.{TANGLE.WEB} and your \.{TANGLE.CH}.) -\step(5) Use your \PASCAL\ compiler to convert your copy of \.{TANGLE.PAS} -to a running program \.{TANGLE}. -\step(6) Check your changes as follows: Run \.{TANGLE} on \.{TANGLE.WEB} -and your \.{TANGLE.CH}, yielding $\.{TANGLE.PAS}'$; make a running -program $\.{TANGLE}'$ by applying \PASCAL\ to -$\.{TANGLE.PAS}'$; run $\.{TANGLE}'$ on \.{TANGLE.WEB} and -your \.{TANGLE.CH}, yielding $\.{TANGLE.PAS}''$; and check -that $\.{TANGLE.PAS}''$ is identical to -$\.{TANGLE.PAS}'$. Once this test has been passed, you have got a -working \.{TANGLE} program. -\step(7) Make a change file \.{WEAVE.CH} analogous to (3), but this time -consider the system-dependent parts of \.{WEAVE} that are listed in -the index to Appendix~D. -\step(8) Run \.{TANGLE} on \.{WEAVE.WEB} and your \.{WEAVE.CH}, obtaining -\.{WEAVE.PAS}. -\step(9) Use \PASCAL\ on \.{WEAVE.PAS} to make a running \.{WEAVE} program. -\step(10) Run \.{WEAVE} on \.{TANGLE.WEB} and \.{TANGLE.CH} to produce -\.{TANGLE.TEX}. -\step(11) Run \TeX\ on \.{TANGLE.TEX}, obtaining a listing analogous to -Appendix~E. This listing will incorporate your changes. -\step(12) Run \.{WEAVE} on \.{WEAVE.WEB} and your \.{WEAVE.CH} to produce -\.{WEAVE.TEX}. -\step(13) Run \TeX\ on \.{WEAVE.TEX}, obtaining a listing analogous to -Appendix~D that incorporates your changes. - -\yskip\noindent -This description assumes that you already have a working \TeX82 system. -But what if you don't have \TeX82? Then you start with a tape that also -contains \.{TEX.WEB} and \.{plain.tex}, and you refer to a hardcopy -listing of the \TeX82 program corresponding to \.{TEX.WEB}. Between steps -(10) and (11) you do the following: - -\yskip -\def\substep(10.#1){\par\hangindent 4em\noindent - \hbox to 4em{\hfil(10.#1) }\ignorespaces} -\substep(10.1) Make a change file \.{TEX.CH} to fix the system dependent -portions of \.{TEX.WEB}, in a manner analogous to step~(2). Since \TeX\ is -a much more complex program than \.{WEAVE} or \.{TANGLE}, there are more -system-dependent features to think about, but by now you will be good at -making such modifications. Do not make any changes to \.{TEX.WEB}. -\substep(10.2) Make an almost-copy of your \.{TEX.CH} called \.{INITEX.CH}; -this one will have the `\&{init}' and `\&{tini}' macros redefined in order -to make the initialization version of \TeX. It also might have smaller -font memory and dynamic memory areas, since \.{INITEX} doesn't need as -much memory for such things; by setting the memory smaller in \.{INITEX}, -you guarantee that the production system will have a ``cushion.'' -\substep(10.3) Run \.{TANGLE} on \.{TEX.WEB} and \.{INITEX.CH}, obtaining -\.{INITEX.PAS} and \.{TEX.POOL}. -\substep(10.4) Run \PASCAL\ on \.{INITEX.PAS}, obtaining \.{INITEX}. -\substep(10.5) Run \.{INITEX} on \.{TEX.POOL}, during which run you type -`\.{plain}' and `\.{\\dump}'. This will produce a file \.{plain.fmt} -containing the data needed to initialize \TeX's memory. -\substep(10.6) Run \.{TANGLE} on \.{TEX.WEB} and the \.{TEX.CH} of (10.1), -obtaining \.{TEX.PAS}. -\substep(10.7) Run \PASCAL\ on \.{TEX.PAS}, obtaining \.{VIRTEX}. -\substep(10.8) If your operating system supports programs whose core images -have been saved, run \.{VIRTEX}, type `\.{\&plain}', then save the core image -and call it \TeX. Otherwise, \.{VIRTEX} will be your \TeX, and it will -read `\.{plain.fmt}' (or some other \.{fmt} file) each time you run. - -\yskip -This 21-step process may seem long, but it is actually an oversimplification, -since you also need fonts and a way to print the device-independent files -that \TeX\ spews out. On the other hand, the total number of steps is not -quite so large when you consider that \.{TANGLE}-followed-by-\PASCAL\ and -\.{WEAVE}-followed-by-\TeX\ may be regarded as single operations. - -If you have only the present report, not a tape, you will have to prepare -files \.{WEAVE.WEB} and \.{TANGLE.WEB} by hand, typing them into the -computer by following Appendices D and E. Then you have to simulate the -behavior of \.{TANGLE} by converting \.{TANGLE.WEB} manually into -\.{TANGLE.PAS}; with a good text editor this takes about six hours. Then -you have to correct errors that were made in all this hand work; but still -the whole project is not impossibly difficult, because in fact the entire -development of \.{WEAVE} and \.{TANGLE} (including the writing of the -programs and this manual) took less than two months of work. -\vfill\end |