% Bugs (sigh) in Computers \& Typesetting \input manmac \font\sltt=cmsltt10 \font\niness=cmss9 \font\ninessi=cmssi9 \proofmodefalse \raggedbottom \output{\hsize=29pc \onepageout{\unvbox255\kern-\dimen@ \vfil}} \def\today{\number\day\ \ifcase\month\or Jan\or Feb\or Mar\or Apr\or May\or Jun\or Jul\or Aug\or Sep\or Oct\or Nov\or Dec\fi \ \number\year} \def\cutpar{{\parfillskip=0pt\par}} \def\rhead{Bugs in {\tensl Computers \& Typesetting, 1989}} \def\bugonpage#1(#2) \par{\bigbreak\tenpoint \hrule width\hsize \line{\lower3.5pt\vbox to13pt{}Page #1\hfil(#2)}\hrule width\hsize \nobreak\medskip} \def\buginvol#1(#2) \par{\bigbreak\penalty-1000\tenpoint \hrule width\hsize \line{\lower3.5pt\vbox to13pt{}Volume #1\hfil(#2)}\hrule width\hsize \nobreak\medskip} \def\slMF{{\manual 89:;}\-{\manual <=>:}} % slant the logo \def\0{\raise.7ex\hbox{$\scriptstyle\#$}} \newcount\nn \newdimen\nsize \newdimen\msize \newdimen\ninept \ninept=9pt \newbox\eqbox \setbox\eqbox=\hbox{\kern2pt\eightrm=\kern2pt} \tenpoint \noindent This is a list of all corrections made to {\sl Computers \& Typesetting}, Volumes \hbox{A--E}, between 20 February 1989 and 30 September 1989 (when \TeX\ Version 3.0 and \MF\ Version 2.0 were fully defined). Corrections made to the softcover version of {\sl The \TeX book\/} are the same as corrections to Volume~A\null. Corrections to the softcover version of {\sl The \slMF\kern1ptbook\/} are the same as corrections to Volume~C\null. Some of these corrections have already been made in reprintings of the books. Several minor changes to Volumes A~and~C are not shown here because they simply make room for the more substantive changes needed to describe the new features of \TeX\ Version 3.0 and \MF\ Version 2.0. Hundreds of changes will soon be made to Volumes B~and~D because of the upgrades to \TeX\ and \MF\/; it will unfortunately be impossible to document all of those changes. Therefore, readers who need up-to-date information on the \TeX\ and \MF\ programs should refer to the |WEB| source files until new printings of Volumes B~and~D are issued. % volume A \buginvol A, in general (9/23/89) \ninepoint\noindent [Change `127' to `255' and `128' to `256' in contexts referring to character codes. This happens on pages 37(twice), 39, 41, 43, 44(twice), 48, 93, 154, 277, 305(twice), 308(twice), 313, and 343. Also change `7-bit' to `8-bit' on pages 214 and 277.] \bugonpage A23, line 16 (9/23/89) |This is TeX, Version 3.0 (preloaded format=plain 89.7.15)| \bugonpage A34, new copy for bottom of page (9/23/89) \ddanger If you use \TeX\ format packages designed by others, your error messages may involve many inscrutable two-line levels of macro context. By setting ^|\errorcontextlines||=0| at the beginning of your file, you can reduce the amount of information that is reported; \TeX\ will show only the top and bottom pairs of context lines together with up to |\errorcontextlines| additional two-line items. \ (If anything has thereby been omitted, you'll also see `|...|'.) \ Chances are good that you can spot the source of an error even when most of a large context has been suppressed; if not, you can say `|I\errorcontextlines=100\oops|' and try again. \ (That will usually give you an undefined control sequence error and plenty of context.) \ Plain \TeX\ sets |\errorcontextlines=5|. \bugonpage A45, lines 9--15 (9/23/89) \ninepoint\noindent |^^| has an internal code between 64 and 127, \TeX\ subtracts 64 from the code; if the code is between 0 and 63, \TeX\ adds~64. Hence code 127 can be typed |^^?|, and the dangerous bend sign can be obtained by saying |{\manual^^?}|. However, you must change the category code of character 127 before using it, since this character ordinarily has category~15 (^{invalid}); say, e.g., |\catcode`\^^?=12|. ^^{double hat} ^^{hat hat} The |^^| notation is different from |\char|, because |^^| combinations are like single characters; for example, it would not be permissible to say |\catcode`\char127|, but |^^| symbols can even be used as letters within control words. \bugonpage A45, new copy before line 20 (9/23/89) \danger There's also a special convention in which |^^| is followed by {\sl two\/} ``lowercase hexadecimal digits,'' |0|--|9| or |a|--|f|. With this convention, all 256 characters are obtainable in a uniform way, from |^^00| to |^^ff|. Character 127 is |^^7f|. \noindent [Also remove one of the two dangerous bend signs on line 20.] \bugonpage A45, bottom paragraph and footnote (9/23/89) \ddanger People who install \TeX\ systems for use with non-American alphabets can make \TeX\ conform to any desired standard. For example, suppose you have a ^{Norwegian keyboard} containing the letter {\tt\ae}, which ^^{Scandinavian letters} ^^{foreign languages} comes in as code~241 (say). Your local format package should define |\catcode`|{\tt\ae}|=11|; then you could have control sequences like |\s|{\tt\ae}|rtrykk|. Your \TeX\ input files could be made readable by American installations of \TeX\ that don't have your keyboard, by substituting |^^f1| for character~241. \ (For example, the stated control sequence would appear as |\s^^f1rtrykk| in the file; your American friends should also be provided with the format that you used, with its |\catcode`^^f1=11|.) \ Of course you should also arrange your fonts so that \TeX's character 241 will print as {\ae}; and you should change \TeX's hyphenation algorithm so that it will do correct Norwegian hyphenation. The main point is that such changes are not extremely difficult; nothing in the design of \TeX\ limits it to the American alphabet. Fine printing is obtained by fine tuning to the language or languages being used. ^^{keyboards, non-ASCII} \ddanger European languages can also be accommodated effectively with only a limited character set. For example, let's consider Norwegian again, but suppose that\parfillskip=0pt \noindent [Now continue with the text on line 11 of page 46.] \bugonpage A47, lines 9--21 (9/23/89) \ddanger If \TeX\ sees a superscript character (category 7) in any state, and if that character is followed by another identical character, and if those two equal characters are followed by a character of code $c<128$, then they are deleted and 64 is added~to or subtracted from the code~$c$. \ (Thus, |^^A| is replaced by a single character whose code is~1, etc., as explained earlier.) \ However, if the two superscript characters are immediately followed by two of the lowercase hexadecimal digits |0123456789abcdef|, the four-character sequence is replaced by a single character having the specified hexadecimal code. The replacement is carried out also if such a trio or quartet of characters is encountered during steps (b) or~(c) of the control-sequence-name scanning procedure described above. After the replacement is made, \TeX\ begins again as if the new character had been present all the time. If a superscript character is not the first of such a trio or quartet, it is handled by the following rule. \ddanger If \TeX\ sees a character of categories 1, 2, 3, 4, 6, 8, 11, 12, or~13, or a character of category~7 that is not the first of a special sequence as just described, it converts the character to a token by attaching the category code, and goes into state~$M$. This is the normal case; almost every nonblank character is handled by this rule. \bugonpage A48, line 15 (9/23/89) \ninepoint\noindent the input line `| $x^2$~ \TeX ^^62^^6|'\thinspace? \bugonpage A54, third line from the bottom (9/23/89) \ninepoint\noindent For example, a well-designed \TeX\ font for ^{French} might well treat accents as lig-\cutpar \bugonpage A76, lines 3--5 from the bottom (9/23/89) \ninepoint\noindent \TeX\ does not assign any value to |\sfcode'042|. \bugonpage A107, new copy for top of page (9/23/89) \ddanger If you want to avoid overfull boxes at all costs without trying to fix them manually, you might be tempted to set |tolerance=10000|; this allows arbitrarily bad lines to be acceptable in tough situations. But infinite tolerance is a bad idea, because \TeX\ doesn't distinguish between terribly bad and preposterously horrible lines. Indeed, a tolerance of 10000 encourages \TeX\ to concentrate all the badness in one place, making one truly unsightly line instead of two moderately bad ones, because a single ``write-off'' produces fewest total demerits according to the rules. There's a much better way to get the desired effect: \TeX\ has a parameter called ^|\emergencystretch| that is added to the assumed stretchability of every line when badness and demerits are computed, in cases where overfull boxes are otherwise unavoidable. If |\emergencystretch| is positive, \TeX\ will make a third pass over a paragraph before choosing the line breaks, when the first passes did not find a way to satisfy the ^|\pretolerance| and ^|\tolerance|. The effect of\/ |\emergencystretch| is to scale down the badnesses so that large infinities are distinguishable from smaller ones. By setting |\emergencystretch| high enough (based on |\hsize|) you can be sure that the |\tolerance| is never exceeded; hence overfull boxes will never occur unless the line-breaking task is truly impossible. \bugonpage A116, lines 11--15 (6/7/89) \danger If you have two or more |\topinsert| or |\pageinsert| commands in quick succession, \TeX\ may need to carry them over to several subsequent pages; but they will retain their relative order when they are carried over. For example, suppose you have pages that are nine inches tall, and suppose you have already specified 4~inches of text for some page, say page~25. Then suppose you make seven topinserts in a row, of% {\parfillskip=0pt\endgraf}\endgroup \bugonpage A125, lines 13--29 (9/23/89) \ddanger \looseness=-1 When the best page break is finally chosen, \TeX\ removes everything after the chosen breakpoint from the bottom of the ``current page,'' and puts it all back at the top of the ``recent contributions.'' The chosen breakpoint itself is placed at the very top of the recent contributions. If it is a penalty item, the value of the penalty is recorded in ^|\outputpenalty| and the penalty in the contribution list is changed to $10000$; otherwise |\outputpenalty| is set to 10000. The insertions that remain on the current page are of three kinds: For each class~$n$ there are unsplit insertions, followed possibly by a single split insertion, followed possibly by others. If ^|\holdinginserts|$\null>0$, all insertions remain in place (so that they might be contributed again); otherwise they are all removed from the current page list as follows: The unsplit insertions are appended to |\box|$\,n$, with no interline glue between them. \ (^{Struts} should be used, as in the |\vfootnote| macro of Appendix~B\null.) \ If a split insertion is present, it is effectively |\vsplit| to the size that was computed previously in Step~4; the top part is treated as an unsplit insertion, and the remainder (if any) is converted to an insertion as if it had not been split. This remainder, followed by any other floating insertions of the same class, is held over in a separate place. \ (They will show up on the ``current page'' if ^|\showlists| is used while an ^|\output| routine is active; the total number of such insertions appears in ^|\insertpenalties| during an |\output| routine.) %\ Finally, the remaining items before the best break on the current page are put together in a |\vbox|\parfillskip=0pt \bugonpage A131, line 12 (9/22/89) \ninepoint\noindent work fine; but sometimes you want to have uniformity between different members of a\cutpar \bugonpage A155, lines 3--5 (9/23/89) \ninepoint\noindent when it encounters a character that is given explicitly as ^|\char|\. \bugonpage A214, lines 19--24 (9/23/89) \ninepoint \textindent\bull |\the|\, where \ 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\alt^|\count|<8-bit number>\alt<8-bit number> \alt\alt\alt^|\parshape|\alt^|\inputlineno| \alt^|\hyphenchar|\alt^|\skewchar|\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$}% \, \, \kern-1pt^|\char|\<8-bit number>, \, \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|\.\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 \ is replaced by an ^{active character} token having the original character code (0 to~255); \TeX\ forgets the original \ 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 \ 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~\ value must be less than~$16384\pt$, i.e.,~$2^{14}\pt$; similarly, the \ in a~\ 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~\ must be less than $2^{30}\rm\,sp$ in absolute value; a~\ must be less than $2^{31}$ in absolute value. \bugonpage A348, line 12 from the bottom (9/23/89) \ninepoint\noindent ^|\showboxbreadth||=5 |^|\showboxdepth||=3 |^|\errorcontextlines||=5| \bugonpage A364, insert before line 18 from the bottom (9/23/89) \ninepoint\noindent ^|\lefthyphenmin||=2 |^|\righthyphenmin||=3 % disallow x- or -xx breaks| \bugonpage A364, line 5 from the bottom (9/23/89) \ninepoint\noindent |\def|^|\fmtname||{plain}\def\fmtversion{3.0} % identifies the current format| \bugonpage A369, insert before line 5 from the bottom (9/23/89) \ninepoint Modern keyboards allow 256 codes to be input, not just 128; so \TeX\ represents characters internally as numbers in the range 0--255 (i.e., \oct{000}--\oct{377}, or \hex{00}--\hex{FF}). Implementations of \TeX\ differ in which characters they will accept in input files and which they will transmit to output files; these subsets can be specified independently. A completely permissive version of \TeX\ allows full 256-character input and output; other versions might ignore all but the visible characters of ASCII; still other versions might distinguish the tab character (code \oct{011}) from a space on input, but might output each tab as a sequence of three characters |^^I|. \bugonpage A370, lines 3--7 (9/23/89) \ninepoint\noindent close as possible to the ASCII conventions. \ (b)~Make sure that codes \oct{041}--\oct{046}, \oct{060}--\oct{071}, \oct{141}--\oct{146}, and \oct{160}--\oct{171} are present and that each unrepresentable internal code $<\null$\oct{200} leads to a representable code when \oct{100} is added or subtracted; then all 256 codes can be input and output. \ (c)~Cooperate with everyone else who shares the same constraints, so that you all adopt the same policy. \ (See Appendix~J for information about the \TeX\ Users Group.) \bugonpage A370, bottom line (9/23/89) \ninepoint\noindent doesn't matter if these symbols have their plain \TeX\ meanings or not. \ (6)~There is a special convention for representing characters 0--255 in the hexadecimal forms |^^00|--|^^ff|, explained in Chapter~8. This convention is always acceptable as input, when |^| is any character of catcode~7. Text output is produced with this convention only when representing characters of code $\ge128$ that a \TeX\ installer has chosen not to output directly. \bugonpage A385, line 8 (5/14/89) \ninepoint |\def\beginbox{\setbox0=\hbox\bgroup}| \bugonpage A400, line 18 from the bottom (9/23/89) \ninepoint\noindent page prematurely if you want to pass a signal. \ (Set ^|\holdinginserts| positive to pass a signal when the contents of\/ |\box255| will be sent back through the page builder again, if any insertions are present.) \bugonpage A419, lines 4--6 (9/23/89) \ninepoint\noindent shortened or lengthened anyway; book preparation with \TeX, as with type, encourages interaction between humans and machines.) \ The lines of the quotations are set ^{flush right} by using ^|\obeylines| together with a stretchable ^|\leftskip|: \bugonpage A444, lines 21--26 (9/23/89) \ninepoint\noindent following one, using the specified family and the current size, then insert the ligature character and continue as specified by the font; two characters may collapse into one, or a new character may appear. Otherwise if the font information shows a kern between the current symbol and the next, insert a kern item after the current Ord atom and move to the next item after that. Otherwise (i.e., if no ligature or kern is specified between the present text symbol and the following character), go to Rule~17. \bugonpage A453, lines 12--14 from the bottom (9/23/89) \begingroup \hyphenpenalty=-1000 \pretolerance=-1 \tolerance=1000 \doublehyphendemerits=-100000 \finalhyphendemerits=-100000 \ninepoint\noindent Exception: The character `|.|'~is treated as if it were a \ of code~0 when it appears in a pattern. Code~0 (which obviously cannot match a nonzero |\lccode|) is used by \TeX\ to represent the left or right edge of a word when it is being hyphenated. \endgroup \bugonpage A454, lines 7--15 from the bottom (9/23/89) \begingroup \hyphenpenalty=-1000 \pretolerance=-1 \tolerance=1000 \doublehyphendemerits=-100000 \finalhyphendemerits=-100000 \ddanger If a trial word $l_1\ldots l_n$ has been found by this process, hyphenation will still be abandoned unless $n\ge\lambda+\rho$, where $\lambda=\max(1,\hbox{|\lefthyphenmin|})$ and $\rho=\max(1,\hbox{|\righthyphenmin|})$. \ (Plain \TeX\ takes $\lambda=2$ and $\rho=3$.) \ Furthermore, the items immediately following the trial word must consist of zero or more characters, ligatures, and implicit kerns, followed immediately by either glue or an explicit kern or a penalty item or a whatsit or an item of vertical mode material from ^|\mark|, ^|\insert|, or ^|\vadjust|. Thus, a box or rule or math formula or discretionary following too closely upon the trial word will inhibit hyphenation. (Since \TeX\ inserts empty discretionaries after ^{explicit hyphens}, these rules imply that already-hyphenated compound words will not be further hyphenated by the algorithm.) \endgroup \bugonpage A455, new copy after line 13 (9/23/89) \begingroup \hyphenpenalty=-1000 \pretolerance=-1 \tolerance=1000 \doublehyphendemerits=-100000 \finalhyphendemerits=-100000 \ddanger \looseness=-1 So far we have assumed that \TeX\ knows only one style of hyphenation at a time; but in fact \TeX\ can remember up to 256 distinct sets of rules, if you have enough memory in your computer. An integer parameter called ^|\language| selects the rules actually used; every ^|\hyphenation| and ^|\patterns| specification appends new rules to those previously given for the current value of\/ |\language|. \ (If\/ |\language| is negative or greater than 255, \TeX\ acts as if |\language|$\null=0$.) \ All |\patterns| for all languages must be given before a paragraph is typeset, if |INITEX| is used for typesetting. \ddanger \TeX\ is able to work with several languages in the same paragraph, because it operates as follows. At the beginning of a paragraph the ``current language'' is defined to be~0. Whenever a character is added to the current paragraph (i.e., in unrestricted horizontal mode), the current language is compared to |\language|; if they differ, the current language is reset and a whatsit node specifying the new current language is inserted before the character. Thus, if you say `|\def\french{\language1...}|' and `|mix| |{\french franc/ais}| |with| |English|', \TeX\ will put whatsits before the |f| and the~|w|; hence it will use language~1 rules when hyphenating |franc/ais|, after which it will revert to language~0. You can insert the whatsit yourself (even in restricted horizontal mode) by saying ^|\setlanguage|\; this changes the current language but it does not change |\language|. \endgroup \bugonpage A459, right column (9/23/89) \eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% |\badness|, 214, {\it229}, 271. \bugonpage A461, right column (9/23/89) \eightpoint caron, {\sl see\/} h\'a\v cek. \bugonpage A464, line 10 (5/15/89) \eightpoint displays, 87, 103, {\it139--145}, {\it166--167}, \bugonpage A464, right column (9/23/89) \eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% |\emergencystretch|, $\underline{107}$, 274. \bugonpage A465, left column (9/23/89) \eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% |\errorcontextlines|, $\underline{34}$, 273, {\it348}. \bugonpage A466, entry for `fractions' (9/23/89) \eightpoint[Add page 332 to this entry.] \bugonpage A466, entry for `French'' (9/23/89) \eightpoint[Add page 455 to this entry.] \bugonpage A467, entry for `hexadecimal' (9/23/89) \eightpoint[Add pages 45, 47--48 to this entry.] \bugonpage A467, right column (9/23/89) \eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% |\holdinginserts|, $\underline{125}$, 273, 400. \bugonpage A467, bottom line (9/23/89) \eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% |\hyphenation|, 277, {\it419}, $\underline{452}$--$\underline{453}$, 455. \bugonpage A468, right column (9/23/89) \eightpoint infinite badness, 97, 107, 111, 229, 317. \bugonpage A468, right column (9/23/89) \eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% |\inputlineno|, 214, 271. \bugonpage A469, entry for kerns (9/23/89) \eightpoint[Add pages 286 and 444 to this entry.] \bugonpage A469, left column (9/23/89) \eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% |\language| (hyphenation method), 273, $\underline{455}$. \bugonpage A469, right column (9/23/89) \eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% |\lefthyphenmin|, 273, {\it364}, $\underline{454}$. \bugonpage A470, entry for ligatures (9/23/89) \eightpoint[Add pages 286 and 444 to this entry.] \bugonpage A472, left column (9/23/89) \eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% |\noboundary|, 283, $\underline{286}$, 290. \bugonpage A473, right column (9/23/89) \eightpoint overfull boxes, 27--30, 94, 229, 238,\par \indent\qquad 302--303, 307, 400.\par \indent\quad avoiding, 107. \bugonpage A474, left column (9/23/89) \eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% |\patterns|, 277, $\underline{453}$, 455. \bugonpage A476, left column (9/23/89) \eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% |\righthyphenmin|, 273, {\it364}, $\underline{454}$. \bugonpage A476, right column (9/23/89) \eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% |\setlanguage|, 287, $\underline{455}$. \bugonpage A476, right column (9/23/89) \eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% |\showboxbreadth|, 273, $\underline{302}$, 303, {\it348}.\par \indent\hbox to0pt{\hss\lower1pt\hbox{*}}% |\showboxdepth|, 79, 273, $\underline{302}$, 303, {\it348}. \bugonpage A479, left column (9/23/89) \eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}% |\tolerance|, {\it29--30}, 91, 94, $\underline{96}$, 107, 272,\par \indent\qquad{\it317}, {\it333}, {\it342}, {\it348}, {\it364}, {\it451}. \bugonpage A481, right column, last six entries (9/23/89) \def\frac#1/#2{\leavevmode\kern.1em \raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em /\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}}% \eightpoint \frac1/2, 67, 332.\par 1/2, in unslashed form, 141, 186.\par \<4-bit number>, $\underline{271}$.\par \<8-bit number>, $\underline{271}$, 276--278.\par \<15-bit number>, $\underline{271}$, 277, 289, 291.\par \<27-bit number>, $\underline{271}$, 289, 291.\par \bugonpage A483, lines 15 and 21 (9/23/89) \noindent[Delete these two lines, as TUG's address is no longer c/o AMS.] % volume B \hsize=35pc \def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers \def\to{\mathrel{.\,.}} % double dot, used only in math mode \bugonpage Bvii, top two lines (4/21/89) {\hsize=29pc \tenpoint\noindent {\it {\sltt WEB} documentation for four utility programs that are often used in conjunction with \TeX: {\sltt POOLtype}, {\sltt TFtoPL}, {\sltt PLtoTF}, and {\sltt DVItype}.} \par} \bugonpage B2, line 32 (6/20/89) \ninepoint\noindent\hskip10pt {\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$% {\tt This\]is\]TeX,\]Version\]2.991\char'23}\quad $\{\,$printed when \TeX\ starts$\,\}$ \bugonpage B118, lines 2--4 (3/2/89) \ninepoint\noindent\hskip10pt {\bf begin if\/} $\\{cur\_level}>\\{level\_one}$ {\bf then}\par \noindent\hskip20pt{\bf begin} \\{check\_full\_save\_stack}; \ $\\{save\_type}(\\{save\_ptr})\gets\\{insert\_token}$;\par \noindent\hskip20pt$\\{save\_level}(\\{save\_ptr})\gets\\{level\_zero}$; \ $\\{save\_index}(\\{save\_ptr})\gets t$; \ \\{incr}(\\{save\_ptr});\par \noindent\hskip20pt{\bf end}; \bugonpage B182, line 13 becomes two lines (6/20/89) \ninepoint\noindent $k,\\{kk}$: \\{small\_number};\quad $\{\,$number of digits in a decimal fraction$\,\}$\par\noindent $p,q$: \\{pointer};\quad $\{\,$top of decimal digit stack$\,\}$ \bugonpage B182, line 15 from the bottom (6/20/89) \ninepoint\noindent\hskip10pt {\bf begin} $k\gets0$; $p\gets\\{null}$; \\{get\_token};\quad $\{\,$\\{point\_token} is being re-scanned$\,\}$ \bugonpage B182, line 11 from the bottom (6/20/89) \ninepoint\noindent\hskip30pt {\bf begin} $q\gets\\{get\_avail}$; $\\{link}(q)\gets p$; $\\{info}(q)\gets\\{cur\_tok}-\\{zero\_token}$; $p\gets q$; $\\{incr}(k)$; \bugonpage B182, line 8 from the bottom (6/20/89) \ninepoint\noindent \\{done1}: {\bf for} $\\{kk}\gets k$ {\bf downto} 1 {\bf do}\par \noindent\hskip20pt {\bf begin} $\\{dig}[kk-1]\gets\\{info}(p)$; $q\gets p$; $p\gets\\{link}(p)$; $\\{free\_avail}(q)$;\par \noindent\hskip20pt{\bf end};\par \noindent\hskip10pt$f\gets\\{round\_decimals}(k)$; \bugonpage B332, lines 11 and 12 from the bottom (4/8/89) \ninepoint \noindent\hskip10pt {\bf begin if\/} $\\{cur\_align}=\\{null}$ {\bf then} \\{confusion}({\tt\char'23endv\char'23});\par\noindent\hskip10pt $q\gets\\{link}(\\{cur\_align})$; \ {\bf if\/} $q=\\{null}$ {\bf then} \\{confusion}({\tt\char'23endv\char'23}); \bugonpage B466, line 5 becomes three lines (6/7/89) \ninepoint \noindent $\\{mmode}+\\{halign}$: {\bf if\/} \\{privileged} {\bf then}\par\noindent \hskip20pt{\bf if\/} $\\{cur\_group}=\\{math\_shift\_group}$ {\bf then} \\{init\_align}\par\noindent\hskip20pt {\bf else} \\{off\_save}; \bugonpage B518, line 25 (8/31/89) \ninepoint\noindent\hskip10pt $\\{undump}(\\{lo\_mem\_stat\_max}+1)(\\{lo\_mem\_max})(\\{rover})$; \ $p\gets\\{mem\_bot}$; \ $q\gets\\{rover}$; % volume C \hsize=29pc \def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers \buginvol C, in general (9/23/89) \ninepoint\noindent [Change `127' to `255' and `128' to `256' in contexts referring to character codes. This happens on pages 188(thrice) and 251.] \bugonpage C91, lines 12 and 13 (8/31/89) \begintt \mode=cheapo; input newface \endtt and the same file should also produce a high-resolution font if we start with \bugonpage C204, line 4 (8/18/89) \ninepoint\noindent so that \\{currenttransform} multiplies all $y$~coordinates by \\{aspect\_ratio}, when paths are\cutpar \bugonpage C212, lines 24--27 (9/30/89) \ninepoint \begindisplay {\it boundarychar}\quad&the right boundary character for ligatures and kerns\cr \enddisplay All of these quantities are numeric. They are initially zero at the start of a job, except for {\it year\/}, {\it month\/}, {\it day\/}, and {\it time\/}, which are initialized to the time the run began; furthermore, {\it boundarychar\/} is initially~$-1$. A {\it granularity\/} of zero is equivalent to $\hbox{\it granularity\/}=1$. A preloaded base file like plain \MF\ will usually give nonzero values to several other internal quantities on this list. \bugonpage C259, lines 16 and 17 from the bottom (5/14/89) \tenpoint \noindent |screenchars|; \ |screenstrokes|; \ |imagerules|; \ |gfcorners|; \ |nodisplays|;\hfil\break |notransforms|; \ |input| \. \bugonpage C282, the three lines following the chart (9/30/89) \tenpoint\noindent \MF\ can also be configured to accept any or all of the character codes 128--255. However, \MF\ programs that make use of anything in addition to the 95 standard ASCII characters cannot be expected to run on other systems, so the use of extended character sets is discouraged. \bugonpage C316, bottom 14 lines and top 30 of page C317 (9/30/89) \ninepoint Ligature information and kerning information is specified in short ``^{ligtable programs}'' of a particularly simple form. Here's an example that illustrates most of the features (although it is not a serious example of typographic practice): \beginlines ^|ligtable|| "f": "f" =: oct"013", "i" |\||=: oct"020", skipto 1;| |ligtable "o": "b": "p": "e" kern .5u#, "o" kern .5u#, "x" kern-.5u#,| | 1:: "!" kern u#;| \endlines This sequence of instructions can be paraphrased as follows: \smallskip \hangindent 3pc Dear \TeX, when you're typesetting an~`f' with this font, and when the following character also belongs to this font, look at it closely because you might need to do something special: If that following character is another~`f', replace the two f's by character code |oct"013"| [namely `\char'13'\kern.5pt]; if it's an `i', retain the `f' but replace the `i' by character code |oct"020"| [a dotless `\char'20'\kern.5pt]; otherwise skip down to label `|1::|' for further instructions. When you're typesetting an `o' or~`b' or~`p', if the next input to \TeX\ is `e' or~`o', add a half unit of space between the letters; if it's an `x', subtract a half unit; if it's an exclamation point, add a full unit. The last instruction applies also to exclamation points following~`f' (because of the label `|1::|'). \smallskip\noindent When a character code appears in front of a colon, the colon ``labels'' the starting place for that character's ligature and kerning program, which continues to the end of the ligtable statement. A double colon denotes a ``local label''; a |skipto| instruction advances to the next matching local label, which must appear before 128 ligtable steps intervene. The special label \|\||:| can be used to initiate ligtable instructions for an invisible ``left boundary character'' that is implicitly present just before every word; an invisible ``right boundary character'' equal to {\it boundarychar\/} is also implicitly present just after every word, if {\it boundarychar\/} lies between 0 and~255. The general syntax for ligtable programs is pretty easy to guess from these examples, but we ought to exhibit it for completeness: \beginsyntax \chardef\\=`\| \is[ligtable] \is\alt[,] \is[,] [skipto]\alt \is \alt[kern] \alt