% Bugs (sigh) in Computers \& Typesetting --- the most recent errata \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 and30 September 1989 (when \TeX\ Version 3.0 and \MF\ Version 2.0 werefully defined). Corrections made tothe softcover version of {\sl The \TeX book\/} are the same as corrections toVolume~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 reprintingsof the books. Several minor changesto Volumes A~and~C are not shown here because they simplymake room for the more substantive changes needed to describe the newfeatures of \TeX\ Version 3.0 and \MF\ Version 2.0. Hundreds ofchanges will soon be made to Volumes B~and~D because of the upgradesto \TeX\ and \MF\/; it will unfortunately be impossible to document all of thosechanges. Therefore, readers who need up-to-date information on the \TeX\ and\MF\ programs should refer to the |WEB| source files until newprintings 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 charactercodes. 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' onpages 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, yourerror messages may involve many inscrutable two-line levels of macrocontext. 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 linestogether with up to |\errorcontextlines| additional two-line items. \ (Ifanything has thereby been omitted, you'll also see `|...|'.) \ Chancesare good that you can spot the source of an error even when most of alarge context has been suppressed; if not, you can say`|I\errorcontextlines=100\oops|' and try again. \ (That will usuallygive 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 |^^?|, andthe dangerous bend sign can be obtained by saying|{\manual^^?}|. However, you must change the category code of character127 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 arelike single characters; for example, it would not be permissible to say|\catcode`\char127|, but |^^| symbols can even be used as letters withincontrol words. \bugonpage A45, new copy before line 20 (9/23/89) \danger There's also a special convention in which |^^| isfollowed by {\sl two\/} ``lowercase hexadecimal digits,'' |0|--|9| or |a|--|f|.With this convention, all 256 characters are obtainable in a uniformway, 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 alphabetscan make \TeX\ conform to any desired standard. For example, supposeyou 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 byAmerican installations of \TeX\ that don't have your keyboard, bysubstituting |^^f1| for character~241. \ (For example, the stated controlsequence would appear as |\s^^f1rtrykk| in the file; your Americanfriends should also be provided with the format that you used, with its|\catcode`^^f1=11|.) \ Of course you should also arrange your fontsso that \TeX's character 241 will print as {\ae}; and you shouldchange \TeX's hyphenation algorithm so that it will do correctNorwegian hyphenation. The main point is that such changes are notextremely difficult; nothing in the design of \TeX\ limits it to theAmerican alphabet. Fine printing is obtained by fine tuning to thelanguage or languages being used.^^{keyboards, non-ASCII} \ddanger European languages can also be accommodated effectively withonly 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 ifthose two equal characters are followed by a character of code$c<128$, then theyare deleted and 64 is added~to or subtracted from the code~$c$.\ (Thus, |^^A| isreplaced by a single character whose code is~1, etc., as explained earlier.) \However, if the two superscript characters are immediately followed by twoof the lowercase hexadecimal digits |0123456789abcdef|, thefour-character sequence is replaced by a single character having thespecified hexadecimal code.The replacement is carried out also if such a trio or quartet ofcharacters is encountered during steps (b) or~(c) of the control-sequence-namescanning 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 ishandled 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 specialsequence as justdescribed, it converts the character to a token by attaching the categorycode, and goes into state~$M$. This is the normal case; almost everynonblank character is handled by this rule. \bugonpage A48, line 15 (9/23/89) \ninepoint\noindentthe input line`| $x^2$~ \TeX ^^62^^6|'\thinspace? \bugonpage A54, third line from the bottom (9/23/89) \ninepoint\noindentFor 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 withouttrying to fix them manually, you might be tempted to set|tolerance=10000|; this allows arbitrarily bad lines to be acceptablein tough situations. But infinite tolerance is a bad idea, because\TeX\ doesn't distinguish between terribly bad and preposterouslyhorrible lines. Indeed, a tolerance of 10000 encourages \TeX\ toconcentrate all the badness in one place, making one truly unsightlyline 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 aparameter called ^|\emergencystretch| that is added to the assumedstretchability 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 aparagraph before choosing the line breaks, when the first passes didnot find a way to satisfy the ^|\pretolerance| and ^|\tolerance|.The effect of\/ |\emergencystretch| is to scale down the badnesses sothat large infinities are distinguishable from smaller ones. Bysetting |\emergencystretch| high enough (based on |\hsize|) you can besure that the |\tolerance| is never exceeded; hence overfull boxeswill 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 inquick succession, \TeX\ may need to carry them over to several subsequentpages; but they will retain their relative order when they arecarried over. For example, suppose you have pages that are nine inchestall, and suppose you have already specified 4~inches of text for somepage, 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=-1When the best page break is finally chosen, \TeX\ removes everything afterthe chosen breakpoint from the bottom of the ``current page,'' and puts itall back at the top of the ``recent contributions.'' Thechosen 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 changedto $10000$; otherwise |\outputpenalty| is set to 10000.The insertions that remain on the current page are of three kinds: Foreach class~$n$ there are unsplit insertions, followed possibly bya single split insertion, followed possibly by others. If^|\holdinginserts|$\null>0$, all insertions remain in place (so thatthey might be contributed again); otherwise they are all removed fromthe current page list as follows: The unsplit insertionsare appended to |\box|$\,n$, with no interline glue between them. \(^{Struts} should be used, as in the |\vfootnote| macro ofAppendix~B\null.) \If a split insertion is present, it is effectively |\vsplit| to the sizethat was computed previously in Step~4; the top part is treated as anunsplit insertion, and the remainder (if any) is converted to an insertionas if it had not been split. This remainder, followed by any other floatinginsertions of the same class, is heldover in a separate place. \ (They will show up on the ``current page'' if^|\showlists| is used while an ^|\output| routine is active; the totalnumber of such insertions appears in ^|\insertpenalties| during an|\output| routine.) %\Finally, the remaining items before the best break on the current page are puttogether in a |\vbox|\parfillskip=0pt \bugonpage A131, line 12 (9/22/89) \ninepoint\noindentwork fine; but sometimes you want to have uniformitybetween different members of a\cutpar \bugonpage A155, lines 3--5 (9/23/89) \ninepoint\noindentwhen it encounters a character thatis given explicitly as ^|\char|\<number>. \bugonpage A214, lines 19--24 (9/23/89) \ninepoint\textindent\bull |\the|\<special register>, where \<special register> isone of the integer quantities ^|\prevgraf|, ^|\deadcycles|, ^|\insertpenalties|,^|\inputlineno|, ^|\badness|,or ^|\parshape| (denoting only the number of lines of\/ |\parshape|); orone 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 ifyou 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\endttThe badness is between 0 and 10000unless 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\noindentvalue 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\noindentThat 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|.\enskipThe most common commands of all are the character commands that tell\TeX\ to append a character to the current horizontallist, using the current font.If two or more commands of this type occur in succession, \TeX\ processesthem all as a unit, converting to ligatures and/orinserting kerns as directed by the font information. \ (Ligatures andkerns may be influenced by invisible ``boundary'' characters at the leftand right, unless |\noboundary| appears.) \ Each charactercommand adjusts ^|\spacefactor|, usingthe ^|\sfcode| table as described in Chapter~12.In unrestricted horizontal mode, a`|\discretionary{}{}{}|' item is appended after a character whose code isthe ^|\hyphenchar| of its font, or after a ligature formed from a sequencethat 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 charactercode (0 to~255); \TeX\ forgets the original \<character> and expands thisactive 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 noeffect; 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 wascorrect in the first two printings and it has always been correct inside thecomputer!] \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| onlywhen 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\noindentThe 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\noindentbadness rating of abox is at most 10000, except that the |\badness| ofan overfull box is 1000000. |INITEX| initializes |\tolerance| to10000, thereby making all line breaks feasible. Penalties of 10000 or moreprohibit breaks; penalties of $-10000$ or less make breaks mandatory. Thecost of a page break is 100000, if the badness is 10000 and if theassociated penalties are less than 10000 in magnitude (see Chapter~15). \bugonpage A337, lines 2--16 (9/23/89) \ninepoint\noindentifies characters whose codes differ by~64from the codes of |?|, |@|, |A|; this convention applies only tocharacters 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| valuesmust be less than~256. A font has at most 256 characters. There are256~|\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 ``smallcharacter'' by~$2^{12}$. The magnitude ofa~\<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. Thereare $2^{16}\rm\,sp$ per~pt. A~|\delcode| valuemust be less than~$2^{24}$; a~|\delimiter|, less than $2^{27}$.The |\end| command sometimes contributesa penalty of $-2^{30}$ to the current page. A~\<dimen> must be less than$2^{30}\rm\,sp$ in absolute value; a~\<number> must beless 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) \ninepointModern 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 whichthey will transmit to output files; these subsets can be specifiedindependently. A completely permissive version of \TeX\ allows full256-character input and output; other versions might ignore allbut the visible characters of ASCII; still other versions mightdistinguish 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\noindentclose 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 thateach unrepresentableinternal code $<\null$\oct{200} leads to a representable code when \oct{100} isadded or subtracted; then all 256 codes can be input and output.\ (c)~Cooperate with everyone else who sharesthe 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\noindentdoesn't matter if these symbols have their plain\TeX\ meanings or not. \ (6)~There is a special convention forrepresenting characters 0--255 in the hexadecimal forms|^^00|--|^^ff|, explained in Chapter~8. This convention is alwaysacceptable as input, when |^| is any character of catcode~7. Textoutput is produced with this convention only when representingcharacters of code $\ge128$ that a \TeX\ installer has chosen not tooutput directly. \bugonpage A385, line 8 (5/14/89) Lines 1–500 of 1108. Load more
% Bugs (sigh) in Computers \& Typesetting --- the most recent errata \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)