diff options
author | Karl Berry <karl@freefriends.org> | 2008-04-23 23:13:33 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2008-04-23 23:13:33 +0000 |
commit | 1b5a2b603c2cf0f0bb4876a2769438f6f31a8fff (patch) | |
tree | 8c5cf53f5fb82d7c360898eae35a16642a786ac8 /Master | |
parent | fc7a668ac46e1b0e8c8be4fb01a809f14e11d50a (diff) |
remaining knuth 2008 updates
git-svn-id: svn://tug.org/texlive/trunk@7621 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r-- | Master/texmf-dist/fonts/source/public/cm/calu.mf | 5 | ||||
-rw-r--r-- | Master/texmf-dist/fonts/source/public/cm/greekl.mf | 10 | ||||
-rw-r--r-- | Master/texmf-dist/fonts/source/public/cm/symbol.mf | 2 | ||||
-rw-r--r-- | Master/texmf-dist/tex/plain/base/gkpmac.tex | 43 | ||||
-rw-r--r-- | Master/texmf-dist/tex/plain/base/manmac.tex | 4 | ||||
-rw-r--r-- | Master/texmf-dist/tex/plain/base/plain.tex | 4 | ||||
-rw-r--r-- | Master/texmf-doc/doc/english/knuth/errata/cm85.bug | 46 | ||||
-rw-r--r-- | Master/texmf-doc/doc/english/knuth/errata/errata.eleven | 317 | ||||
-rw-r--r-- | Master/texmf-doc/doc/english/knuth/errata/errata.ten | 2 | ||||
-rw-r--r-- | Master/texmf-doc/doc/english/knuth/errata/errata.tex | 1198 | ||||
-rw-r--r-- | Master/texmf-doc/doc/english/knuth/errata/mf84.bug | 52 | ||||
-rw-r--r-- | Master/texmf-doc/doc/english/knuth/errata/tex82.bug | 90 |
12 files changed, 1561 insertions, 212 deletions
diff --git a/Master/texmf-dist/fonts/source/public/cm/calu.mf b/Master/texmf-dist/fonts/source/public/cm/calu.mf index 06657b8874c..da27f63f17e 100644 --- a/Master/texmf-dist/fonts/source/public/cm/calu.mf +++ b/Master/texmf-dist/fonts/source/public/cm/calu.mf @@ -79,10 +79,11 @@ beginchar("F",13.5u#,cap_height#,0); italcorr h#*slant+.5u#; adjust_fit(-.1w#,-u#); pickup cal.nib; x1=.5w; x3=.4w; lft x4=.1w; x5=x2+.35w; x6=.7[x1,x7]; rt x7=w; -top y1=top y6=h; z2=.5[z3,z1]+1.2bend; +top y1=top y6=h; z2=.5[z3,z1]+bend; bot y3=-o; y4=.1h; y5=y2; y7=.9h; draw flex(z1,z2,z3) softjoin (z3...{x4-x3,5(y4-y3)}z4); % stem -draw z1-flourish_change{up}...(z1-(u,0))---z6...{down}z7; % upper bar +draw z1-flourish_change+(0,.15asc_height){up}...{right}(z1-(2u,0)) + ---z6...{down}z7; % upper bar draw z2--z5--z5-(0,.1cap_curve); % middle bar math_fit(0,.5ic#); labels(1,2,3,4,5,6,7); endchar; diff --git a/Master/texmf-dist/fonts/source/public/cm/greekl.mf b/Master/texmf-dist/fonts/source/public/cm/greekl.mf index c8c11585ac5..823099f2aea 100644 --- a/Master/texmf-dist/fonts/source/public/cm/greekl.mf +++ b/Master/texmf-dist/fonts/source/public/cm/greekl.mf @@ -33,10 +33,10 @@ adjust_fit(0,0); pickup fine.nib; pos0(hair,180); pos1(hair,180); pos2(vair,90); pos3(.8[hair,stem],0); pos4(vair,-90); pos5(hair,-180); pos6(vair,-270); pos7(stem,-360); pos8(vair,-450); pos9(hair,-540); -x0=x1=x9; lft x0l=hround(1.5u-.5hair); x2=x4=x6=x8=.5w-.25u; +x0=x1=x9; lft x0r=hround(1.5u-.5hair); x2=x4=x6=x8=.5w-.25u; rt x3r=hround(w-1.75u); rt x7r=hround(w-u); rt x5l=hround(x4-u); bot y0=-d; y1=top y6r=x_height; top y2r=h+oo; y3=.5[y2,y4]; -y5=.5[y4,y6]; top y6r-bot y4r=vstem+eps; bot y8=-oo; y7=y9=.55[y6,y8]; +y5=.5[y4,y6]; top y6r-bot y4r=vstem+eps; bot y8r=-oo; y7=y9=.55[y6,y8]; if y6l<y4l: y6l:=y4l:=y5; fi filldraw stroke z0e---z1e...pulled_arc.e(2,3) & pulled_arc.e(3,4)...{up}z5e; % stem and upper bowl @@ -77,7 +77,7 @@ x4=x6=.5w+.5u; top y8r=x_height+oo; z4=z8; pos6(vair,-90); pos7(stem,-180); pos8(vair,-270); pos4(stem,angle(z4-z0)+90); pos5(stem,30); z3=.5[.5[z1,z4],z0]; -y5+.1x_height=y7=.5[y6,y8]; bot y6=-oo; +y5+.1x_height=y7=.5[y6,y8]; bot y6r=-oo; lft x7r=hround(1.4u-.5stem); rt x5r=hround(w-u); filldraw stroke z1e{z0-z1e}....z2e....z3e{(z0-z1)rotated 90} ...z4e{z4e-.8[z4,z0]} @@ -221,7 +221,7 @@ filldraw circ_stroke z4e{down}...{-36u,-h}z3e; % diagonal pickup tiny.nib; pos1(stem,0); pos2(stem,0); top y1=h+min(oo,serif_drop); bot y2=0; x1=x2=x3; z=((z4{down}...{-36u,-h}z3)intersectionpoint((x2r,0)--(x2r,h))); -filldraw z1l--z2l--z--z1r--cycle; % stem +filldraw z1l--z2l...(x3,y2l)...z--z1r--cycle; % stem sloped_serif.l(1,2,a,1/3,jut,serif_drop); % upper left serif math_fit(0,ic#-1/3x_height#*slant-.5u#); penlabels(1,2,3,4); endchar; @@ -323,7 +323,7 @@ adjust_fit(0,0); pickup fine.nib; numeric light_curve; light_curve=hround(.5[stem,curve]-2stem_corr); pos1(vair,90); pos2(light_curve,180); pos3(vair,270); pos4(light_curve,360); x1=x3=.5w; lft x2r=hround(1.5u-.5light_curve); x4=w-x2; -top y1=x_height+oo; y2=y4=.5[y1,y3]; bot y3=-oo; +top y1r=x_height+oo; y2=y4=.5[y1,y3]; bot y3r=-oo; filldraw stroke pulled_arc.e(1,2) & pulled_arc.e(2,3) & pulled_arc.e(3,4) & pulled_arc.e(4,1); % bowl pos5(hair,0); pos6(hair,0); x5=x6=.5w; top y5=h; bot y6=-d-oo; diff --git a/Master/texmf-dist/fonts/source/public/cm/symbol.mf b/Master/texmf-dist/fonts/source/public/cm/symbol.mf index 7a778624069..fd59d46546d 100644 --- a/Master/texmf-dist/fonts/source/public/cm/symbol.mf +++ b/Master/texmf-dist/fonts/source/public/cm/symbol.mf @@ -119,7 +119,7 @@ y1=y2=good.y h; y3=y4; .5[y1,y3]=.5[y5,y6]=math_axis; y5=good.y .3[y1,y3]; draw z1{x5-x1,2(y5-y1)}...z5{right}...z2{x2-x5,2(y2-y5)}; % upper bar draw z3{x6-x3,2(y6-y3)}...z6{right}...z4{x4-x6,2(y4-y6)}; % lower bar -labels(1,2,3,4); endchar; +labels(1,2,3,4,5,6); endchar; cmchar "Subset or equal to sign"; compute_spread(.45x_height#,.55x_height#); diff --git a/Master/texmf-dist/tex/plain/base/gkpmac.tex b/Master/texmf-dist/tex/plain/base/gkpmac.tex index cdcd7b9c087..1ae0f1a7a68 100644 --- a/Master/texmf-dist/tex/plain/base/gkpmac.tex +++ b/Master/texmf-dist/tex/plain/base/gkpmac.tex @@ -10,6 +10,7 @@ \font\textbf=cmbx10 % bold \font\textcsc=cccsc10 % caps and small caps \font\oldsty=ccmi10 % equation numbers +\font\twelvett=cmtt12 % Fonts for regular math % I'm setting \fontdimen2 to zero because AMS forgot to do it; @@ -405,15 +406,37 @@ \iftitle\hfil\copyrite\else\runhead\uppercase\expandafter{\chaptitle}\hfil\fi}} \def\rightheadline{\hbox to35pc{\iftitle\copyrite\fi\hfil \vbox to 10pt{}% strut to position the baseline - \runhead\uppercase\expandafter{\topmark}% + \iftitle\else\runhead\uppercase\expandafter{\topmark}\fi \rlap{\hfil\iftitle\rightcorner\else\foliofont\folio\fi\kern-2pc}}} -\def\leftcorner{\vrule\vbox to\folioht{\hrule width9pt\vfil}} -\def\rightcorner{\vbox to\folioht{\hrule width9pt\vfil}\vrule} +\def\leftcorner{\iffinal\else\vrule\vbox to\folioht{\hrule width9pt\vfil}\fi} +\def\rightcorner{\iffinal\else\vbox to\folioht{\hrule width9pt\vfil}\vrule\fi} \def\copyrite{\ifpreprint{\textfont2=\sevensy\sevenrm\copyright\ 1988 Addison-Wesley Publishing Company; all rights reserved}\fi} +\newdimen\htrimsize \htrimsize=7.5in +\newdimen\vtrimsize \vtrimsize=9.1875in +\newdimen\outermargin \outermargin=23mm +\newdimen\topmargin \topmargin=10mm % plus height of the headline box +\newbox\htrim \newbox\vtrim \newbox\trimmarks +\setbox\htrim=\hbox to\htrimsize{\kern-.65in + \vrule height .2pt depth .2pt width .4in\hfil\vrule width.4in\kern-.65in} + \wd\htrim=0pt +\setbox\vtrim=\vbox to\vtrimsize{\kern-.65in + \moveleft.2pt\hbox{\vrule height .4in}\vfil + \moveleft.2pt\hbox{\vrule height .4in}\kern-.65in} + \wd\vtrim=0pt +\setbox\trimmarks=\hbox to0pt{\raise\vtrimsize\copy\htrim \copy\htrim + \copy\vtrim \kern\htrimsize \copy\vtrim\hss} + \ht\trimmarks=0pt \dp\trimmarks=0pt + +\newif\iffinal % are we making the final copy? (pages.tex says "999") \def\onepageout#1{\escapechar=-1 % for writing \tabrefs - \shipout\vbox to\totheight{ % here we define one page of output + \shipout % here we define one page of output + \iffinal % add the trim marks + \hbox to\htrimsize{\copy\trimmarks + \ifodd\pageno\hss\else \hskip\outermargin\fi + \vbox to\vtrimsize{\kern\topmargin\fi + \vbox to\totheight{ \offinterlineskip % butt the boxes together \vbox to 2pc{ % this part goes on top of the regular pages \ifodd\pageno \rightheadline\else\leftheadline\fi @@ -424,6 +447,9 @@ \ifodd\pageno \hbox to35pc{\hfil\foliofont\folio} \else\hbox{\foliofont\folio}\fi\fi \ifpreprint\ifinxmode\makeinxfooter\fi\fi + \iffinal % finish the trimmed page + }\vfill}\ifodd\pageno\hskip\outermargin\else\hss\fi + \rlap{\smash{\lower30pt\hbox to.35in{\hss\twelvett\number\pageno}}}\fi } \advancepageno} @@ -851,8 +877,13 @@ {\endlinechar=-1\read\pages to\next \ifx\next\empty % in this case we should have eof now \else\global\nxtpg=\next\fi}\fi} -\ifeof\pages\else\message{OK, I'll ship only the requested pages!} - \getnxtpg\fi +\ifeof\pages\finalfalse\else\finaltrue + \getnxtpg +\ifnum\nxtpg=999 + \message{OK, I'm making final copy with trim marks!} + \hoffset=-.5in + \getnxtpg % this should ensure eof on the \pages file +\else\message{OK, I'll ship only the requested pages!}\fi\fi \def\shipout{\ifeof\pages\let\next=\Shipout \else\ifnum\pageno=\nxtpg\getnxtpg\let\next=\Shipout \else\let\next=\Tosspage\fi\fi \next} diff --git a/Master/texmf-dist/tex/plain/base/manmac.tex b/Master/texmf-dist/tex/plain/base/manmac.tex index d8678ab5070..63c064d1290 100644 --- a/Master/texmf-dist/tex/plain/base/manmac.tex +++ b/Master/texmf-dist/tex/plain/base/manmac.tex @@ -149,12 +149,12 @@ \def\titlepage{\global\titletrue} % for pages without headlines \def\rhead{} % \rhead contains the running headline -\def\leftheadline{\hbox to \pagewidth{% +\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{% +\def\rightheadline{\hbox to \pagewidth{\spaceskip=0pt \vbox to 10pt{}% strut to position the baseline \hfil\tenit\rhead\/% running head flush right \rlap{\kern1pc\tenbf\folio}% folio to right of text diff --git a/Master/texmf-dist/tex/plain/base/plain.tex b/Master/texmf-dist/tex/plain/base/plain.tex index 02d0523dd55..2b72027dff8 100644 --- a/Master/texmf-dist/tex/plain/base/plain.tex +++ b/Master/texmf-dist/tex/plain/base/plain.tex @@ -1228,7 +1228,7 @@ \def\loggingall{\tracingcommands\tw@\tracingstats\tw@ \tracingpages\@ne\tracingoutput\@ne\tracinglostchars\@ne \tracingmacros\tw@\tracingparagraphs\@ne\tracingrestores\@ne - \showboxbreadth\maxdimen\showboxdepth\maxdimen\errorstopmode} + \showboxbreadth\maxdimen\showboxdepth\maxdimen} \def\tracingall{\tracingonline\@ne\loggingall} \def\showhyphens#1{\setbox0\vbox{\parfillskip\z@skip\hsize\maxdimen\tenrm @@ -1238,4 +1238,4 @@ \nonfrenchspacing % punctuation affects the spacing \catcode`@=12 % at signs are no longer letters -\def\fmtname{plain}\def\fmtversion{3.14159265} % identifies the current format +\def\fmtname{plain}\def\fmtversion{3.141592653} % identifies the current format diff --git a/Master/texmf-doc/doc/english/knuth/errata/cm85.bug b/Master/texmf-doc/doc/english/knuth/errata/cm85.bug index 2fd56f503af..d8cbea6442d 100644 --- a/Master/texmf-doc/doc/english/knuth/errata/cm85.bug +++ b/Master/texmf-doc/doc/english/knuth/errata/cm85.bug @@ -1851,6 +1851,52 @@ numeric mid_thickness; mid_thickness=Vround 1/3[vair,stem]; filldraw p_; % arm and beak @z +@x in CALU, I decided in July 2005 that I really wanted a less swashy F +top y1=top y6=h; z2=.5[z3,z1]+1.2bend; +bot y3=-o; y4=.1h; y5=y2; y7=.9h; +draw flex(z1,z2,z3) softjoin (z3...{x4-x3,5(y4-y3)}z4); % stem +draw z1-flourish_change{up}...(z1-(u,0))---z6...{down}z7; % upper bar +@y +top y1=top y6=h; z2=.5[z3,z1]+bend; +bot y3=-o; y4=.1h; y5=y2; y7=.9h; +draw flex(z1,z2,z3) softjoin (z3...{x4-x3,5(y4-y3)}z4); % stem +draw z1-flourish_change+(0,.15asc_height){up}...{right}(z1-(2u,0)) + ---z6...{down}z7; % upper bar +@z + +@x in SYMBOL, two points of Hardy's asymptotic equivalence sign were unlabeled +labels(1,2,3,4); endchar; +@y +labels(1,2,3,4,5,6); endchar; +@z + +@x in GREEKL, correct a tiny notch that can show up at hires (Charles Duan) +filldraw z1l--z2l--z--z1r--cycle; % stem +@y +filldraw z1l--z2l...(x3,y2l)...z--z1r--cycle; % stem +@z + +@x in GREEKL, make almost-invisible semantic corrections to beta +x0=x1=x9; lft x0l=hround(1.5u-.5hair); x2=x4=x6=x8=.5w-.25u; +@y +x0=x1=x9; lft x0r=hround(1.5u-.5hair); x2=x4=x6=x8=.5w-.25u; +@z +@x +y5=.5[y4,y6]; top y6r-bot y4r=vstem+eps; bot y8=-oo; y7=y9=.55[y6,y8]; +@y +y5=.5[y4,y6]; top y6r-bot y4r=vstem+eps; bot y8r=-oo; y7=y9=.55[y6,y8]; +@z +@x and also to delta +y5+.1x_height=y7=.5[y6,y8]; bot y6=-oo; +@y +y5+.1x_height=y7=.5[y6,y8]; bot y6r=-oo; +@z +@x and also to phi +top y1=x_height+oo; y2=y4=.5[y1,y3]; bot y3=-oo; +@y +top y1r=x_height+oo; y2=y4=.5[y1,y3]; bot y3r=-oo; +@z + -----------Here I draw the line with respect to further changes (I sincerely believe there won't be any more!) diff --git a/Master/texmf-doc/doc/english/knuth/errata/errata.eleven b/Master/texmf-doc/doc/english/knuth/errata/errata.eleven new file mode 100644 index 00000000000..64d9f8ab457 --- /dev/null +++ b/Master/texmf-doc/doc/english/knuth/errata/errata.eleven @@ -0,0 +1,317 @@ +% 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-doc/doc/english/knuth/errata/errata.ten b/Master/texmf-doc/doc/english/knuth/errata/errata.ten index 85cdca31e09..9efa2a3e503 100644 --- a/Master/texmf-doc/doc/english/knuth/errata/errata.ten +++ b/Master/texmf-doc/doc/english/knuth/errata/errata.ten @@ -36,7 +36,7 @@ \tenpoint \noindent This is a list of all substantial corrections made to {\sl Computers -\& Typesetting\/} from the mid-1990s until the Millennium edition was +\& 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 diff --git a/Master/texmf-doc/doc/english/knuth/errata/errata.tex b/Master/texmf-doc/doc/english/knuth/errata/errata.tex index c9ea56063c0..6842a82cc6e 100644 --- a/Master/texmf-doc/doc/english/knuth/errata/errata.tex +++ b/Master/texmf-doc/doc/english/knuth/errata/errata.tex @@ -15,7 +15,7 @@ Jul\or Aug\or Sep\or Oct\or Nov\or Dec\fi \ \number\year} -\def\cutpar{{\parfillskip=0pt\par}} +\def\cutpar{{\parfillskip=0pt\endgraf}} \def\rhead{Bugs in {\tensl Computers \& Typesetting as of \today}} \def\bugonpage#1(#2) \par{\bigbreak\tenpoint @@ -34,15 +34,16 @@ \tenpoint \noindent This is a list of all substantial corrections made to {\sl Computers -\& Typesetting\/} since the publication of the Millennium Edition at the close -of the year 2000. (More precisely, it lists errors corrected +\& 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\/} are +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\/} are the same as corrections -to Volume~C\null. Changes to the mini-indexes +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. @@ -50,75 +51,57 @@ errors have been corrected in the most recent printings. % volume A -\bugonpage A16, line 7 from the bottom (6/30/01) +\bugonpage A7, line 4 from the bottom (01/15/04) -\font\magnifiedfiverm=cmr5 at 10pt -\tenpoint\indent -Ten-point type is different from% - \magnifiedfiverm\ magnif{}ied f{}ive-point type. - -\bugonpage A17, line 7 (6/30/01) - -\ninepoint\indent -fications that grow in geometric ratios---something like equal-tempered -tuning\cutpar - -\bugonpage A51, lines 18--20 (6/30/01) +\noindent +since control sequences of the second kind always have exactly one +symbol after\cutpar -\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 A123, line 7 from the bottom (02/27/08) -\bugonpage A52, line 7 from the bottom (6/30/01) +\ninepoint\noindent +that it won't make the natural height-plus-depth +of\/ |\box|$\,n$ surpass |\dimen|$\,n$, when it~is\cutpar -\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 A124, lines 12 and 13 (02/27/08) -\bugonpage A71, line 15 (6/30/01) +\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.) -\tenpoint\indent -One of the interesting things that can happen when glue stretches and\cutpar +\bugonpage A206, lines 12--17 (05/21/07) -\bugonpage A180, line 20 (6/30/01) +\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. -\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 (4/09/01) +\bugonpage A216, line 3 from the bottom (12/20/07) -\ninepoint\noindent -\begintt -\output={\unvbox255 - \ifnum\outputpenalty<10000 \penalty\outputpenalty\fi} -\endtt +\ninepoint\indent|\openin|\<number>|=|\<file name> -\bugonpage A292, lines 13--16 (6/30/01) +\bugonpage A290, lines 25--26 (02/24/08) -\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. +\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 A306, line 7 (6/30/01) +\bugonpage A292, line 15 (12/02/02) \ninepoint\noindent -instead of a shelf{\kern0pt}ful. -In fact, the latter idea---to -insert an ^{italic correction}---is prefer-\cutpar +are defined as in the +second alternative of a \<math field>, are +recorded in a ``choice\cutpar -\bugonpage A308, lines 25 and 26 (6/17/02) +\bugonpage A308, lines 25 and 26 (06/17/02) \ninepoint \begintt @@ -126,31 +109,83 @@ insert an ^{italic correction}---is prefer-\cutpar {\csname\expandafter\gobble\string#2\romannumeral#3\endcsname}} \endtt -\bugonpage A311, line 14 (12/2/02) +\bugonpage A311, line 14 (12/02/02) \ninepoint\indent |\def\\{\if\space\next\ % assume that \next is unexpandable| -\bugonpage A323, line 12 from the bottom (6/30/01) +\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\hss18.31.\enspace}% -|$k=1.38065\times10^{-16}\rm\,erg\,K^{-1}$|. +\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 (01/21/03) +\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 \errorstopmode}|\par +| \showboxbreadth=\maxdimen \showboxdepth=\maxdimen}|\par \noindent |\def\tracingall{\tracingonline=1 \loggingall}| -\bugonpage A364, line 5 from the bottom (01/21/03) +\bugonpage A364, line 5 from the bottom (02/29/08) \ninepoint\noindent -|\def\fmtversion{3.14159265} % identifies the current format| +|\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) @@ -164,55 +199,56 @@ $$\centerline{% \\0s\\1t\\2i\\0c\\1e\\0x\\3p\\2i\\3a\\0l\\2i\\1d\\0o\\1c\\2i\\0o\\2u\\2s\\0.}$$ \endgroup -\bugonpage A451, line 15 (1/30/01) +\bugonpage A458, left column (01/11/07) -\tenpoint\noindent -{\sl Connecticut Yankee\/} come out with only nine or -ten bad hyphens: +\eightpoint\noindent +|\\|, 38, {\it356}, {\it378}, {\it418}. -\bugonpage A451, line 23 (1/30/01) +\bugonpage A459, left column (03/17/06) -\tenpoint\noindent\begintt - mo-er-der-mohren-mut-ter-mar-mor-mon-u-menten-macher. -\endtt +\eightpoint\noindent +angle brackets ( $\langle\,\rangle$ ), 59, {\it146--147}, 150,~156,\par +\noindent\qquad $\underline{268}$, 420, 437; + {\sl see also\/} |\langle|, |\rangle|. -\bugonpage A454, lines 23--30 (6/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 (7/08/01) +\bugonpage A461, left column (02/24/08) \eightpoint\noindent -\llap{*}|\char|, {\it 43--45}, 76, 86, 155, 283, $\underline{286}$, +|\boxit|, 223, 331. -\bugonpage A466, left column (7/09/01) +\bugonpage A468, right column (02/26/08) \eightpoint\noindent -\llap{*}|\floatingpenalty|, $\underline{123}$--$\underline{124}$, - 272, 281, {\it 363}. +interline glue, 78--79, $\underline{80}$, 104, 105, 125, 221,\par +\noindent\qquad 245, 263, 281--282, 335, 352, 399, 409. -\bugonpage A470, left column (1/21/03) +\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 A473, left column (6/30/01) +\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 -orphans, {\sl see\/} widow words. +|\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 @@ -223,16 +259,16 @@ orphans, {\sl see\/} widow words. \eightpoint\noindent all of those changes. I~now believe that the final bug was discovered and removed on -20~December 2002. +27~February 2008. The finder's fee has converged to \$327.68. \hsize=35pc -\bugonpage B2, line 10 from the bottom (12/20/02) +\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.141592\char'23}\quad +{\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) @@ -243,33 +279,73 @@ because it disagrees with the IEEE floating-point standard. Many implementors have therefore chosen to substitute their own home-grown rounding procedure. -\bugonpage B8, line 2 (5/04/01) +\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 -statements will be meaningful. We insert the label -`\\{exit}' just before the `{\bf end}' of a procedure in\cutpar +$[\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 B30, line $-4$ (5/04/01) +\bugonpage B114, line 25 (09/11/07) +\def\#{\hbox{\tt\char`\#}} % parameter sign \ninepoint\noindent -\quad{\bf begin} \\{update\_terminal};\quad$\{\,$now the user sees - the prompt for sure$\,\}$ +{\bf define} $\\{save\_index}(\#)\equiv\\{save\_stack}[\#].\\{hh}.\\{rh}$\quad + $\{\,$\\{eqtb} location or token or \\{save\_stack} location$\,\}$ -\bugonpage B84, lines 22 and 27 (5/04/01) +\bugonpage B139, line 20 (12/19/02) \ninepoint\noindent -\quad$\\{ignore}=9$\quad$\{\,$characters to ignore ( |^^@| )$\,\}$\par -\noindent -\quad$\\{active\_char}=13$\quad$\{\,$characters that invoke - macros ( |~| )$\,\}$ +\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 B139, line 20 (12/19/02) +\bugonpage B144, line 14 (09/11/07) \ninepoint\noindent -\quad{\bf begin while} $(\\{state}=\\{token\_list}) \land +\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 @@ -284,6 +360,12 @@ 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 @@ -368,11 +450,31 @@ includes spaces is ``quoted'' somehow. \ninepoint\noindent \qquad{\bf else begin} $\\{lx}\gets\\{lr}$ {\bf div} $(\\{lq}+1)$; -\bugonpage B280, lines 23 and 24 (4/08/01) +\bugonpage B266, line 29 (09/11/07) \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. +$\\{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) @@ -391,17 +493,67 @@ is being scanned, or when no alignment preamble is active. \quad{\bf begin if\/} $(\\{scanner\_status}=\\{aligning}) \lor (\\{cur\_align}=\\{null})$ {\bf then} -\bugonpage B382, line 6 (1/01/01) +\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 -between `fl' and `y', then $m=2$, $t=2$, and $y_1$ will -be a ligature node for `fl' followed by an\cutpar +{\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 B386, line 11 (4/08/01) +\bugonpage B439, line 3 (09/11/07) \ninepoint\noindent -\quad$\\{qi}(2),\\{qi}(6)$: {\bf begin} $\\{cur\_r}\gets\\{rem\_byte}(q)$;% - \quad$\{\,$\||=:|, \||=:>|$\,\}$ +\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) @@ -430,15 +582,52 @@ we must defeat such hacks. are\]not\]allowed)\char'23});\par\noindent \quad{\bf if\/} $\\{cur\_group}=\\{align\_group}$ {\bf then} -\bugonpage B475, line 12 (7/01/01) +\bugonpage B505, line 19 (09/11/07) \ninepoint\noindent -\qquad{\bf end};\quad$\{\,$now we are in vertical mode, - working on the list that will contain the display$\,\}$ +\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) @@ -446,102 +635,208 @@ we must defeat such hacks. 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 (9/09/01) +\bugonpage C29, illustration for exercise 4.11 (09/09/01) \noindent [points 2 and 5 should not be labeled twice] -\bugonpage C156, line 15 from the bottom (9/09/01) +\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 C171, line 16 from the bottom (6/18/02) +\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 (9/09/01) +\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 C204, line 3 from the bottom (7/08/01) +\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 -slightly. If $\\{autorounding}>1$, -you get even more changes: Paths are perturbed slightly\cutpar +is performed whenever \MF\ uses the last two alternatives +in the definition\cutpar + +\bugonpage C250, lines 13 and 14 (02/19/08) -\bugonpage C238, lines 9 and 8 from the bottom (7/08/01) +\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 -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))$.}$$ +following \<boolean primary>.) -\bugonpage C286, line 25 (9/09/01) +\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 (9/09/01) +\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 (9/09/01) +\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 C313, bottom line (6/30/01) +\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) -\rightline{\eightss--- LA ROCHEFOUCAULD, {\eightssi Maximes\/}\enspace(1665)} +\ninepoint\noindent +(The proofsheet resolution will be 50 pixels per inch, because {\it cheapo\/} +has 200 pixels per\cutpar -\bugonpage C346, left column (6/18/02) +\bugonpage C346, left column (06/18/02) \eightpoint\noindent \llap{*}|:|, 169, 171, 317--319. -\bugonpage C346, right column (7/09/01) +\bugonpage C346, right column (07/09/01) \eightpoint\noindent \llap{*}|angle|, {\it29}, {\it67}, $\underline{72}$, {\it107}, {\it135}, 211, {\it238}. -\bugonpage C352, left column (6/30/01) +\bugonpage C351, right column (02/21/08) \eightpoint\noindent -La Rochefoucauld, Fran\c cois VI, 313. +independent variables, $\underline{81}$--$\underline{83}$, 88, 224, 226. -\bugonpage C357, right column (7/08/01) +\bugonpage C352, right column (02/29/08) \eightpoint\noindent -\llap{*}|true|, 55, {\it64\/}--{\it65}, 170, 210. +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 (12/21/02) +\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 22~January 2001, -and removed in version 2.71828. +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$ (12/21/02) +\bugonpage D2, line $-17$ (02/27/08) \ninepoint\noindent {\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$% -{\tt This\]is\]METAFONT,\]Version\]2.71828\char'23}\quad +{\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) @@ -552,17 +847,27 @@ 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 D8, line 2 (5/04/01) +\bugonpage D16, new paragraph to follow line 26 (06/25/04) -\tenpoint\noindent -statements will be meaningful. We insert the label -`\\{exit}' just before the `{\bf end}' of a procedure in\cutpar +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 D28, line $-8$ (5/04/01) +\bugonpage D22, line 26 (09/11/07) -\ninepoint\noindent -\quad{\bf begin} \\{update\_terminal};\quad$\{\,$now the user sees - the prompt for sure$\,\}$ +\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) @@ -586,21 +891,144 @@ language or 64-bit substitute is advisable. \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 +possible; otherwise \\{take\_scaled} will use more than 2\% of the running time when the Computer Modern fonts are being generated. -\bugonpage D101, line 21 (7/08/01) +\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} $\\{subscr\_head\_loc}(\hbox{\tt\#})\equiv\hbox{\tt\#}+1$ -\quad$\{\,$where \\{value}, \\{subscr\_head}, and \\{attr\_head} are$\,\}$ +\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 D180, lines 22 and 23 (1/26/01) +\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 -$(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$. +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) @@ -650,42 +1078,360 @@ $\{\,$positive if data truncated, negative if data dangerously large$\,\}$ \ninepoint\noindent \quad{\bf if\/} $\\{chopped}>0$ {\bf then} -\bugonpage D196, lines 7 and 8 (1/26/01) +\bugonpage D196, lines 3--8 (06/25/04) -\tenpoint\noindent -where $x'(t)\ge0$ we have $\\{right\_type}=% +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 D511, line 17 (7/03/01) +\bugonpage D196, lines 15 and 16 (06/25/04) -\tenpoint\noindent -from appearing again. +\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 11 (12/21/02) +\bugonpage E7, line 14 (12/21/02) \ninepoint\indent \\{crisp}, \\{tiny}, \\{fine}; \medskip\noindent and \\{thin\_join} should not be less than \\{fine}. -\bugonpage E9, line 9 (7/03/01) - -\tenpoint\indent -|[92] [123] [124]) ) )| - -\bugonpage E19, line 19 (11/7/01) +\bugonpage E19, line 19 (11/07/01) \tenpoint \line{\\{cap\_notch\_cut}\hskip 0pt plus1.5fil46/36\hfil31/36\hfil25/36\hfil @@ -706,14 +1452,62 @@ and \\{thin\_join} should not be less than \\{fine}. {\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) -\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 `--' \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 @@ -728,9 +1522,33 @@ and \\{thin\_join} should not be less than \\{fine}. {\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-doc/doc/english/knuth/errata/mf84.bug b/Master/texmf-doc/doc/english/knuth/errata/mf84.bug index aaa36b33da8..541f3d47e71 100644 --- a/Master/texmf-doc/doc/english/knuth/errata/mf84.bug +++ b/Master/texmf-doc/doc/english/knuth/errata/mf84.bug @@ -2204,7 +2204,7 @@ if a>0 then if b>0 then @z -565. we need not raise hassles about two-digit years (23 Nov 98) +565. we need not raise hackles about two-digit years (23 Nov 98) @x module 1200 print_int(round_unscaled(internal[year]) mod 100); print_char("."); @y @@ -2264,8 +2264,56 @@ if chopped then if chopped>0 then @z +567. I forgot to update curtype in e.g. boolean b[]; b1=true=b2; + (Thorsten Dahlheimer, June 2004) +@x 1003 + begin nonlinear_eq(v,cur_exp,false); goto done; +@y + begin nonlinear_eq(v,cur_exp,false); unstash_cur_exp(cur_exp); goto done; +@z + +568. Wrong handling of extreme TFM values (T. Dahlheimer, June 2004) +@x 1128 +max_tfm_dimen:=16*internal[design_size]-internal[design_size] div @'10000000; +@y +max_tfm_dimen:=16*internal[design_size]-1-internal[design_size] div @'10000000; +@z +@x 1129 + if x>0 then x:=three_bytes-1@+else x:=1-three_bytes; + end +else x:=make_scaled(x*16,internal[design_size]); +@y + if x>0 then x:=max_tfm_param@+else x:=-max_tfm_param; + end; +x:=make_scaled(x*16,internal[design_size]); +@z + +569. Bug in make_ellipse when theta=180 (T. Dahlheimer, June 2004) +@x 530 + else begin beta:=minor_axis; gamma:=major_axis; +@y + else begin beta:=minor_axis; gamma:=major_axis; theta:=0; +@z + +570. Forgot outer_tag in scan_declared variable (T. Dahlheimer, June 2004) +@x 1011 +done: if eq_type(x)<>tag_token then clear_symbol(x,false); +@y +done: if eq_type(x) mod outer_tag<>tag_token then clear_symbol(x,false); +@z + +571. Apparent bug if init_gf called at incredibly unlikely time (T. Dahlheimer, +June 2004); not REALLY a bug, because str_ptr cannot equal max_strings here +(because this was checked by end_name, and area_delimiter=0 there because +cur_area="" in the output file name); but anyway I'll make a patch to be clean +@x 1163 +str_start[str_ptr+1]:=pool_ptr; gf_string(0,str_ptr); +@y +gf_string(0,make_string); decr(str_ptr); +@z + ------------- -567. The absolutely final change (to be made after my death) +999. The absolutely final change (to be made after my death) @x module 2 @d banner=='This is METAFONT, Version 2.7182' {printed when \MF\ starts} @y diff --git a/Master/texmf-doc/doc/english/knuth/errata/tex82.bug b/Master/texmf-doc/doc/english/knuth/errata/tex82.bug index 2977f089156..607ffff358d 100644 --- a/Master/texmf-doc/doc/english/knuth/errata/tex82.bug +++ b/Master/texmf-doc/doc/english/knuth/errata/tex82.bug @@ -8947,8 +8947,96 @@ if g_sign<>normal then rule_ht:=rule_ht+cur_g; @z +420. Error recovery hindered by missing goto statement (reported by +David Fuchs, September 2007) + +@x module 395 +incr(align_state); long_state:=call; cur_tok:=par_token; ins_error; +@y +incr(align_state); long_state:=call; cur_tok:=par_token; ins_error; +goto continue; +@z + +421. Slight improvement to inner loop speed also eliminates a case +of "dirty Pascal" + +@x module 1035 + begin if character(tail)=qi(hyphen_char[main_f]) then if link(cur_q)>null then +@y + begin if link(cur_q)>null then + if character(tail)=qi(hyphen_char[main_f]) then ins_disc:=true; +@z + +422. Amendment to bugfix 414 (reported by David Fuchs, September 2007) + +@x module 1335 + store_fmt_file; return;@+tini@/ +@y + if last_glue<>max_halfword then delete_glue_ref(last_glue); + store_fmt_file; return;@+tini@/ +@z + +423. Remove leaking glue reference after error (DRF, September 2007) + +@x module 1236 + help2("I can't carry out that multiplication or division,")@/ + ("since the result is out of range."); +@y + help2("I can't carry out that multiplication or division,")@/ + ("since the result is out of range."); + if p>=glue_val then delete_glue_ref(cur_val); +@z + +424. Leaders with muglue is henceforth disallowed (indeed, David Fuchs +observed that it has ever worked, except in 180pt fonts!) + +@x module 1078 +if ((cur_cmd=hskip)and(abs(mode)<>vmode))or@| + ((cur_cmd=vskip)and(abs(mode)=vmode))or@| + ((cur_cmd=mskip)and(abs(mode)=mmode)) then +@y +if ((cur_cmd=hskip)and(abs(mode)<>vmode))or@| + ((cur_cmd=vskip)and(abs(mode)=vmode)) then +@z + +425. An optimization suggested by Fuchs that I couldn't resist, because +it improves the inner loop whenever the last letter of a word +has a lig/kern program. Also another twiddle for the inner loop. + +@x module 1039 +if char_tag(main_i)<>lig_tag then goto main_loop_wrapup; +@y +if char_tag(main_i)<>lig_tag then goto main_loop_wrapup; +if cur_r=non_char then goto main_loop_wrapup; +@z +@x module 1036 +tail_append(lig_stack) {|main_loop_lookahead| is next} +@y +link(tail):=lig_stack; tail:=lig_stack {|main_loop_lookahead| is next} +@z + +426. For robustness, enforce a restriction checked by TFtoPL (suggested +by DRF) + +@x module 365 +if lf<>6+lh+(ec-bc+1)+nw+nh+nd+ni+nl+nk+ne+np then abort; +@y +if lf<>6+lh+(ec-bc+1)+nw+nh+nd+ni+nl+nk+ne+np then abort; +if (nw=0)or(nh=0)or(nd=0)or(ni=0) then abort; +@z + +427. Tell more precisely the effective size of 1:1 insertions (DEK, 27 Feb 08) + +@x module 986 + t:=x_over_n(height(r),1000)*count(t); print_scaled(t); +@y + if count(t)=1000 then t:=height(r) + else t:=x_over_n(height(r),1000)*count(t); + print_scaled(t); +@z + ----------- -420. The absolutely final change (to be made after my death) +999. The absolutely final change (to be made after my death) @x module 2 @d banner=='This is TeX, Version 3.141592' {printed when \TeX\ starts} @y |