diff options
22 files changed, 3625 insertions, 1404 deletions
diff --git a/Master/texmf-dist/doc/fonts/cm/README b/Master/texmf-dist/doc/fonts/cm/README index 07c2bd816d7..af2dd997031 100644 --- a/Master/texmf-dist/doc/fonts/cm/README +++ b/Master/texmf-dist/doc/fonts/cm/README @@ -51,7 +51,7 @@ quite as light. Four special italic fonts are provided as demonstrations of further possibilities: cmbxti10 is a bold extended text italic; cmmib10 is -a bold math italic; cmit10 is an italic typewriter font; cmu10 is +a bold math italic; cmitt10 is an italic typewriter font; cmu10 is an unslanted italic with the same stem weights as cmr10. The math symbol fonts, cmsy5--cmsy10, have the same parameters diff --git a/Master/texmf-dist/doc/generic/knuth/errata/mf84.bug b/Master/texmf-dist/doc/generic/knuth/errata/mf84.bug index 0ce8ccbd748..c6349b896da 100644 --- a/Master/texmf-dist/doc/generic/knuth/errata/mf84.bug +++ b/Master/texmf-dist/doc/generic/knuth/errata/mf84.bug @@ -2321,10 +2321,117 @@ done1: if (link(p)<>null) then free_node(link(p),knot_node_size); link(p):=s; beta:=-y_coord(h); @z +573. Don't restrict the length of the banner line, leave it system-dependent code +(Udo Wermuth, 02 April 2017) +@x module 61 +incorrect, but the discrepancy is not serious since we assume that the banner +and base identifier together will occupy at most |max_print_line| +character positions. +@y +incorrect, but the discrepancy is not serious since we assume that this +part of the program is system dependent. +@^system dependencies@> +@z + +574. Defeat interactions during batch mode (Xiaosa Zhang, 27 June 2020) +@x module 78 +@ @<Get user's advice...@>= +loop@+begin continue: clear_for_error_prompt; prompt_input("? "); +@y +@ @<Get user's advice...@>= +loop@+begin continue: if interaction<>error_stop_mode then return; + clear_for_error_prompt; prompt_input("? "); +@z + +575. Don't exit to editor if no input file is at the bottom line +(Xiaosa Zhang, 03 July 2020) +@x module 79 +"E": if file_ptr>0 then +@y +"E": if file_ptr>0 then if input_stack[file_ptr].name_field>=256 then +@z +@x module 80 +if file_ptr>0 then print("E to edit your file,"); +@y +if file_ptr>0 then if input_stack[file_ptr].name_field>=256 then + print("E to edit your file,"); +@z + +576. Keep date and time in system variables, use them in opening banner +(Udo Wermuth, 11 December 2020) +@x module 194 +Since standard \PASCAL\ cannot provide such information, something special +is needed. The program here simply specifies July 4, 1776, at noon; but +users probably want a better approximation to the truth. + +Note that the values are |scaled| integers. Hence \MF\ can no longer +be used after the year 32767. + +@p procedure fix_date_and_time; +begin internal[time]:=12*60*unity; {minutes since midnight} +internal[day]:=4*unity; {fourth day of the month} +internal[month]:=7*unity; {seventh month of the year} +internal[year]:=1776*unity; {Anno Domini} +end; +@y +Since standard \PASCAL\ cannot provide such information, something special +is needed. The program here simply assumes that suitable values appear in +the global variables \\{sys\_time}, \\{sys\_day}, \\{sys\_month}, and +\\{sys\_year} (which are initialized to noon on 4 July 1776, +in case the implementor is careless). + +Note that the values are |scaled| integers. Hence \MF\ can no longer +be used after the year 32767. + +@p procedure fix_date_and_time; +begin sys_time:=12*60; +sys_day:=4; sys_month:=7; sys_year:=1776; {self-evident truths} +internal[time]:=sys_time*unity; {minutes since midnight} +internal[day]:=sys_day*unity; {day of the month} +internal[month]:=sys_month*unity; {month of the year} +internal[year]:=sys_year*unity; {Anno Domini} +end; +@z +@x module 196 +@ Of course we had better declare another global variable, if the previous +routines are going to work. + +@<Glob...@>= +@!old_setting:0..max_selector; +@y +@ Of course we had better declare a few more global variables, if the previous +routines are going to work. + +@<Glob...@>= +@!old_setting:0..max_selector; +@!sys_time,@!sys_day,@!sys_month,@!sys_year:integer; + {date and time supplied by external system} +@z +@x module 790 +print_int(round_unscaled(internal[day])); print_char(" "); +months:='JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'; +m:=round_unscaled(internal[month]); +for k:=3*m-2 to 3*m do wlog(months[k]); +print_char(" "); print_int(round_unscaled(internal[year])); print_char(" "); +m:=round_unscaled(internal[time]); +print_dd(m div 60); print_char(":"); print_dd(m mod 60); +@y +print_int(sys_day); print_char(" "); +months:='JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'; +for k:=3*sys_month-2 to 3*sys_month do wlog(months[k]); +print_char(" "); print_int(sys_year); print_char(" "); +print_dd(sys_time div 60); print_char(":"); print_dd(sys_time mod 60); +@z +@x module 1211 +fix_date_and_time; init_randoms((internal[time] div unity)+internal[day]);@/ +@y +fix_date_and_time; init_randoms(sys_time+sys_day*unity);@/ +@z + ------------- 999. The absolutely final change (to be made after my death) @x module 2 -@d banner=='This is METAFONT, Version 2.7182818' {printed when \MF\ starts} +@d banner=='This is METAFONT, Version 2.71828182' {printed when \MF\ starts} @y @d banner=='This is METAFONT, Version $e$' {printed when \MF\ starts} @z diff --git a/Master/texmf-dist/doc/generic/knuth/errata/tex82.bug b/Master/texmf-dist/doc/generic/knuth/errata/tex82.bug index 7d7a8c34bad..12de105bae8 100644 --- a/Master/texmf-dist/doc/generic/knuth/errata/tex82.bug +++ b/Master/texmf-dist/doc/generic/knuth/errata/tex82.bug @@ -1577,7 +1577,7 @@ but I decided later in the day to do a few more things: 231. \the to be an expandable control sequence (July 12) Several things in the language are cleaned up: a) \the\tenrm replaced by \fontname\tenrm [\fontname<font>] -b) when expanding edef, etc., result of \the still expanded only only level +b) when expanding edef, etc., result of \the still expanded only one level c) expansion after \def not inhibited, since \noexpand is now present d) \the\the disallowed. @@ -9044,10 +9044,186 @@ other multiletter control sequences are (found by Oleg Bulatov, 14 Sep 2008) begin print_esc("csname"); print_esc("endcsname"); print_char(" "); @z +429. Don't echo error message to terminal when tracing paragraphs +(Udo Wermuth, 15 January 2017) +@x module 826 + begin no_shrink_error_yet:=false; +@y + begin no_shrink_error_yet:=false; + @!stat if tracing_paragraphs>0 then end_diagnostic(true);@+tats@; +@z +@x + error; +@y + error; + @!stat if tracing_paragraphs>0 then begin_diagnostic;@+tats@; +@z + +430. Defeat interactions during batch mode (Xiaosa Zhang, 27 June 2020) +@x module 83 +@ @<Get user's advice...@>= +loop@+begin continue: clear_for_error_prompt; prompt_input("? "); +@y +@ @<Get user's advice...@>= +loop@+begin continue: if interaction<>error_stop_mode then return; + clear_for_error_prompt; prompt_input("? "); +@z + +431. Don't exit to editor if no input file is at the bottom line +(Xiaosa Zhang, 03 July 2020) +@x module 84 +"E": if base_ptr>0 then +@y +"E": if base_ptr>0 then if input_stack[base_ptr].name_field>=256 then +@z +@x module 85 +if base_ptr>0 then print("E to edit your file,"); +@y +if base_ptr>0 then if input_stack[base_ptr].name_field>=256 then + print("E to edit your file,"); +@z + +432. Keep date and time in system variables, use them in opening banner +(Udo Wermuth, 11 December 2020) +@x module 241 +Since standard \PASCAL\ cannot provide such information, something special +is needed. The program here simply specifies July 4, 1776, at noon; but +users probably want a better approximation to the truth. + +@p procedure fix_date_and_time; +begin time:=12*60; {minutes since midnight} +day:=4; {fourth day of the month} +month:=7; {seventh month of the year} +year:=1776; {Anno Domini} +@y +Since standard \PASCAL\ cannot provide such information, something special +is needed. The program here simply assumes that suitable values appear in +the global variables \\{sys\_time}, \\{sys\_day}, \\{sys\_month}, and +\\{sys\_year} (which are initialized to noon on 4 July 1776, +in case the implementor is careless). + +@p procedure fix_date_and_time; +begin sys_time:=12*60; +sys_day:=4; sys_month:=7; sys_year:=1776; {self-evident truths} +time:=sys_time; {minutes since midnight} +day:=sys_day; {day of the month} +month:=sys_month; {month of the year} +year:=sys_year; {Anno Domini} +@z +@x module 246 +@ Of course we had better declare another global variable, if the previous +routines are going to work. + +@<Glob...@>= +@!old_setting:0..max_selector; +@y +@ Of course we had better declare a few more global variables, if the previous +routines are going to work. + +@<Glob...@>= +@!old_setting:0..max_selector; +@!sys_time,@!sys_day,@!sys_month,@!sys_year:integer; + {date and time supplied by external system} +@z +@x module 536 +print_int(day); print_char(" "); +months:='JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'; +for k:=3*month-2 to 3*month do wlog(months[k]); +print_char(" "); print_int(year); print_char(" "); +print_two(time div 60); print_char(":"); print_two(time mod 60); +@y +print_int(sys_day); print_char(" "); +months:='JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'; +for k:=3*sys_month-2 to 3*sys_month do wlog(months[k]); +print_char(" "); print_int(sys_year); print_char(" "); +print_two(sys_time div 60); print_char(":"); print_two(sys_time mod 60); +@z + +433. After nine parameters, delete both # and the token that follows +(Bruno Le Floch, 22 October 2020) +@x module 473 +label found,done,done1,done2; +@y +label found,continue,done,done1,done2; +@z +@x module 474 +begin loop begin get_token; {set |cur_cmd|, |cur_chr|, |cur_tok|} +@y +begin loop begin continue: get_token; {set |cur_cmd|, |cur_chr|, |cur_tok|} +@z +@x module 476 + help1("I'm going to ignore the # sign you just used."); error; +@y + help2("I'm going to ignore the # sign you just used,")@/ + ("as well as the token that followed it."); error; goto continue; +@z + +434. Don't accept an implicit left brace after # in macro head +(Udo Wermuth, 20 May 2020) +@x module 476 +if cur_cmd=left_brace then +@y +if cur_tok<left_brace_limit then +@z + +435. Keep garbage out of the buffer if a |\read| end unexpectedly +(DRF, 17 February 2018) +@x module 486 + align_state:=1000000; error; +@y + align_state:=1000000; limit:=0; error; +@z + +436. Zero out nonexistent chars, to prevent rogue TFM files +(DRF, 06 October 2020) +@x module 722 + math_type(a):=empty; +@y + math_type(a):=empty; cur_i:=null_character; +@z + +437. Don't classify fraction noads as inner noads (DRF, 25 March 2019) +@x module 761 +fraction_noad: begin t:=inner_noad; s:=fraction_noad_size; + end; +@y +fraction_noad: s:=fraction_noad_size; +@z + +438. Properly identify tabskip glue when tracing repeated templates +(Igor Liferenko, 10 January 2020) +@x module 793 +link(p):=new_glue(glue_ptr(cur_loop)); +@y +link(p):=new_glue(glue_ptr(cur_loop)); +subtype(link(p)):=tab_skip_code+1; +@z + +439. Use the correct range for local variable hn (DRF, 31 October 2020) +@x module 892 +@!hn:small_number; {the number of positions occupied in |hc|} +@y +@!hn:0..64; {the number of positions occupied in |hc|; + not always a |small_number|} +@z + +440. Normalize newlinechar when printing the final stats +(Udo Wermuth, 29 November 2020) +@x module 1333 +begin @<Finish the extensions@>; +@y +begin @<Finish the extensions@>; new_line_char:=-1; +@z +@x module 1335 +begin c:=cur_chr; +@y +begin c:=cur_chr; if c<>1 then new_line_char:=-1; +@z + ----------- 999. The absolutely final change (to be made after my death) @x module 2 -@d banner=='This is TeX, Version 3.14159265' {printed when \TeX\ starts} +@d banner=='This is TeX, Version 3.141592653' {printed when \TeX\ starts} @y @d banner=='This is TeX, Version $\pi$' {printed when \TeX\ starts} @z diff --git a/Master/texmf-dist/fonts/source/public/concrete/ccn10.mf b/Master/texmf-dist/fonts/source/public/concrete/ccn10.mf new file mode 100644 index 00000000000..4dc258d14cc --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/concrete/ccn10.mf @@ -0,0 +1,75 @@ +% Concrete Roman Narrow 10 point +if unknown cmbase: input cmbase fi + +font_identifier:="CCR"; font_size 10pt#; + +u#:=17/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=1/36pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=3/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; % height of tallest characters +asc_height#:=250/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; % height of caps +fig_height#:=232/36pt#; % height of numerals +x_height#:=165/36pt#; % height of lowercase without ascenders +math_axis#:=90/36pt#; % axis of symmetry for math symbols +bar_height#:=92/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; % depth of comma below baseline +desc_depth#:=70/36pt#; % depth of lowercase descenders + +crisp#:=0pt#; % diameter of serif corners +tiny#:=11/36pt#; % diameter of rounded corners +fine#:=6/36pt#; % diameter of sharply rounded corners +thin_join#:=17/36pt#; % width of extrafine details +hair#:=21/36pt#; % lowercase hairline breadth +stem#:=25/36pt#; % lowercase stem breadth +curve#:=27/36pt#; % lowercase curve breadth +ess#:=25/36pt#; % breadth in middle of lowercase s +flare#:=29/36pt#; % diameter of bulbs or breadth of terminals +dot_size#:=38/36pt#; % diameter of dots +cap_hair#:=21/36pt#; % uppercase hairline breadth +cap_stem#:=27/36pt#; % uppercase stem breadth +cap_curve#:=28/36pt#; % uppercase curve breadth +cap_ess#:=27/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.4pt#; % thickness of lines in math symbols + +dish#:=0/36pt#; % amount erased at top or bottom of serifs +bracket#:=5/36pt#; % vertical distance from serif base to tangent +jut#:=30/36pt#; % protrusion of lowercase serifs +cap_jut#:=32/36pt#; % protrusion of uppercase serifs +beak_jut#:=10/36pt#; % horizontal protrusion of beak serifs +beak#:=70/36pt#; % vertical protrusion of beak serifs +vair#:=21/36pt#; % vertical diameter of hairlines +notch_cut#:=30/36pt#; % maximum breadth above or below notches +bar#:=21/36pt#; % lowercase bar thickness +slab#:=21/36pt#; % serif and arm thickness +cap_bar#:=21/36pt#; % uppercase bar thickness +cap_band#:=21/36pt#; % uppercase thickness above/below lobes +cap_notch_cut#:=1pt#; % max breadth above/below uppercase notches +serif_drop#:=5/36pt#; % vertical drop of sloped serifs +stem_corr#:=1/36pt#; % for small refinements of stem breadth +vair_corr#:=1/36pt#; % for small refinements of hairline height +apex_corr#:=0pt#; % extra width at diagonal junctions + +o#:=4/36pt#; % amount of overshoot for curves +apex_o#:=3/36pt#; % amount of overshoot for diagonal junctions + +slant:=0; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=.95; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=8/11; % parameter for superellipses +superpull:=1/15; % extra openness inside bowls +beak_darkness:=4/30; % fraction of triangle inside beak serifs +ligs:=2; % level of ligatures to be included + +square_dots:=false; % should dots be square? +hefty:=false; % should we try hard not to be overweight? +serifs:=true; % should serifs and bulbs be attached? +monospace:=false; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +low_asterisk:=false; % should the asterisk be centered at the axis? +math_fitting:=false; % should math-mode spacing be used? + +generate roman % switch to the driver file diff --git a/Master/texmf-dist/fonts/source/public/knuth-lib/grayf.mf b/Master/texmf-dist/fonts/source/public/knuth-lib/grayf.mf index 1a34e18fd1b..7765ebd8120 100644 --- a/Master/texmf-dist/fonts/source/public/knuth-lib/grayf.mf +++ b/Master/texmf-dist/fonts/source/public/knuth-lib/grayf.mf @@ -10,7 +10,7 @@ forsuffixes m = mag,rep: mg := mag; mag := 1; mode_setup; if mg>1: hppp := hppp*mg; vppp := vppp*mg; extra_endchar:= - "if charcode>0:currentpicture:=currentpicture scaled mg;fi" + "if charcode>0:currentpicture:=currentpicture scaled mg;fi;" & extra_endchar; fi; if picture pix_picture: rep := 1; diff --git a/Master/texmf-dist/fonts/source/public/knuth-lib/slant.mf b/Master/texmf-dist/fonts/source/public/knuth-lib/slant.mf index 3763222bce2..b851c3e1d89 100644 --- a/Master/texmf-dist/fonts/source/public/knuth-lib/slant.mf +++ b/Master/texmf-dist/fonts/source/public/knuth-lib/slant.mf @@ -19,8 +19,8 @@ pickup pencircle scaled r; ruler := savepen; for k=1 upto n: beginchar(k,k*u#*s,n*u#,0); pickup ruler; draw origin--(k*u*s,k*u); - unfill (lft-1,bot -1)--(rt 1,bot -1) - --(rt 1,0)--(lft-1,0)--cycle; + unfill (lft -1,bot -1)--(rt 1,bot -1) + --(rt 1,0)--(lft -1,0)--cycle; unfill ((lft -1,0)--(rt 1,0) --(rt 1,top 1)--(lft -1,top 1)--cycle) shifted (k*u*s,k*u); endchar; endfor diff --git a/Master/texmf-dist/fonts/source/public/knuth-local/domino.mf b/Master/texmf-dist/fonts/source/public/knuth-local/domino.mf index 6bd9da121be..578110eb32d 100644 --- a/Master/texmf-dist/fonts/source/public/knuth-local/domino.mf +++ b/Master/texmf-dist/fonts/source/public/knuth-local/domino.mf @@ -14,41 +14,49 @@ % instead of 16,32,48. But the present scheme seems mathematically better. mode_setup; p#:=in#/300; -d#:=64p#; +%d#:=64p#; +d#:=63p#; % changed September 2016 (makes the font slightly smaller) define_pixels(p); font_identifier:="DOMINO"; font_coding_scheme:="dominoes"; font_size:=10pt#; +font_quad:=d#; +font_normal_space:=d#; -pickup pencircle scaled p; tiny_pen=savepen; +pickup pencircle scaled .5p; tiny_pen=savepen; pickup pencircle scaled 13p; huge_pen=savepen; % I first tried 15p, and it looked OK, but the Taiwan set has smaller dots -pickup pencircle scaled 3p; bound_pen=savepen; def begindomchar(expr code)= beginchar(code,d#,d#,0); pickup tiny_pen; - for x=0 step 2p until 60p: - drawdot (x+.5p,1.5p); drawdot (x+1.5p,.5p); - drawdot (.5p,x+3.5p); drawdot (1.5p,x+2.5p); - drawdot (w-1.5p,x+1.5p); drawdot (w-.5p,x+.5p); - drawdot (x+2.5p,h-.5p); drawdot (x+3.5p,h-1.5p); +% for x=0 step 2p until 60p: +% drawdot (x+.5p,1.5p); drawdot (x+1.5p,.5p); +% drawdot (.5p,x+3.5p); drawdot (1.5p,x+2.5p); +% drawdot (w-1.5p,x+1.5p); drawdot (w-.5p,x+.5p); +% drawdot (x+2.5p,h-.5p); drawdot (x+3.5p,h-1.5p); +% September 2016: that approach gave bad effect at join between domino halves + for x=0 step 3p until 57p: + drawdot (x+1.5p,1.5p); + drawdot (w-1.5p,x+1.5p); + drawdot (w-1.5p-x,h-1.5p); + drawdot (1.5p,h-1.5p-x); endfor % fill (2p,2p)--(w-2p,2p)--(w-2p,h-2p)--(2p,h-2p)--cycle; fill (3p,3p)--(w-3p,3p)--(w-3p,h-3p)--(3p,h-3p)--cycle; pickup huge_pen; enddef; -def dota = erase drawdot(16p,48p) enddef; -def dotb = erase drawdot(32p,48p) enddef; -def dotc = erase drawdot(48p,48p) enddef; -def dotd = erase drawdot(16p,32p) enddef; -def dote = erase drawdot(32p,32p) enddef; -def dotf = erase drawdot(48p,32p) enddef; +def dota = erase drawdot(16p,47p) enddef; +def dotb = erase drawdot(31.5p,47p) enddef; +def dotc = erase drawdot(47p,47p) enddef; +def dotd = erase drawdot(16p,31.5p) enddef; +def dote = erase drawdot(31.5p,31.5p) enddef; +def dotf = erase drawdot(47p,31.5p) enddef; def dotg = erase drawdot(16p,16p) enddef; -def doth = erase drawdot(32p,16p) enddef; -def doti = erase drawdot(48p,16p) enddef; +def doth = erase drawdot(31.5p,16p) enddef; +def doti = erase drawdot(47p,16p) enddef; def v(expr code)=128+ASCII code enddef; % change character code for vertical format diff --git a/Master/texmf-dist/source/generic/knuth/errata/errata.nine b/Master/texmf-dist/source/generic/knuth/errata/errata.nine index fe9a20adadf..f562cb0bd8a 100644 --- a/Master/texmf-dist/source/generic/knuth/errata/errata.nine +++ b/Master/texmf-dist/source/generic/knuth/errata/errata.nine @@ -215,7 +215,7 @@ direct sum, {\sl see\/} |\oplus|. \eightpoint |\downbracefill| (\hbox to 4em{\downbracefill}), 225--226, $\underline{357}$. -\bugonpage A483, lines 15--21 (4/29/97) +\bugonpage A483, lines 15--21 (4/29/96) \tenpoint \begintt diff --git a/Master/texmf-dist/source/generic/knuth/errata/errata.tex b/Master/texmf-dist/source/generic/knuth/errata/errata.tex index c53b83902b2..3a0d367f0ca 100644 --- a/Master/texmf-dist/source/generic/knuth/errata/errata.tex +++ b/Master/texmf-dist/source/generic/knuth/errata/errata.tex @@ -1,5 +1,6 @@ % Bugs (sigh) in Computers \& Typesetting --- the most recent errata +\tracingpages=1 \input manmac \def\.#1{\hbox{\tt#1}} \font\sltt=cmsltt10 @@ -34,11 +35,12 @@ \tenpoint \noindent This is a list of all substantial corrections made to {\sl Computers -\& Typesetting\/} since the publication of the second ``Millennium Edition'' -at the close of the year 2001. (More precisely, it lists errors corrected -since the 16th printing of Volume~A, the 7th printing -of Volume~B, the 6th printing of Volume~C, the 4th printing of Volume~D, -and the 5th printing of Volume~E.) +\& Typesetting\/} since the beginning of 2014. +(More precisely, it lists errors corrected +since the 19th printing of Volume~A, the 9th printing +of Volume~B, the 8th printing of Volume~C, the 6th printing of Volume~D, +and the 7th printing of Volume~E. % 2012 for A-D, 2013 for E +But it omits changes that are ``purely cosmetic.'') 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 @@ -51,1650 +53,1750 @@ errors have been corrected in the most recent printings. % volume A -\bugonpage A7, line 4 from the bottom (01/15/04) - -\noindent -since control sequences of the second kind always have exactly one -symbol after\cutpar - -\bugonpage A123, line 7 from the bottom (02/27/08) - -\ninepoint\noindent -that it won't make the natural height-plus-depth -of\/ |\box|$\,n$ surpass |\dimen|$\,n$, when it~is\cutpar - -\bugonpage A124, lines 12 and 13 (02/27/08) - -\ninepoint\noindent -means that \TeX\ has tried to split an |\insert254| to height $180.2\pt$; -the natural height-plus-depth of the best such split is $175.3\pt$, -and the penalty for breaking there is~100.) - -\bugonpage A153, line 7 (01/03/14) - -\ninepoint\noindent -of three fonts: one for text size, one for -script size, and one for scriptscript size. The\cutpar - -\bugonpage A206, lines 12--17 (05/21/07) +\bugonpage A34, line 3 from the bottom (01/09/20) \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. +not, you can say +`\.{I\char`\\errorcontextlines=100} \.{\char`\\oops}' and try again. \ (That +will usually\cutpar +\bugonpage A43, line 6 (07/24/14) -\bugonpage A216, line 3 from the bottom (12/20/07) - -\ninepoint\indent|\openin|\<number>|=|\<file name> - -\bugonpage A290, lines 25--26 (02/24/08) - -\ninepoint\textindent{$\bull$} -\<leaders>\<box or rule>\<horizontal skip>.\enskip -Here \<horizontal skip> refers to one of the first five glue-appending -commands just mentioned; the formal syntax for \<leaders>\cutpar +\tenpoint\noindent +keyboard, or that have been +pre\"empted for formatting? -\bugonpage A292, line 15 (12/02/02) +\bugonpage A49, cummings quote (08/03/19) -\ninepoint\noindent -are defined as in the -second alternative of a \<math field>, are -recorded in a ``choice\cutpar +(delete the period at the end of the line) -\bugonpage A308, lines 25 and 26 (06/17/02) +\bugonpage A66, line 3 from the bottom (08/26/17) \ninepoint -\begintt -\def\appendroman#1#2#3{\expandafter\def\expandafter#1\expandafter - {\csname\expandafter\gobble\string#2\romannumeral#3\endcsname}} -\endtt - -\bugonpage A311, line 14 (12/02/02) - -\ninepoint\indent -|\def\\{\if\space\next\ % assume that \next is unexpandable| - -\bugonpage A311, line 17 (12/29/07) +Such displays of box contents will be discussed further in +Chapters 12 and~27.\cutpar + +\bugonpage A105, lines 9--16 (01/16/21) + +\ddanger If you say \.{\char`\\vadjust\char`\{}$\langle\,$vertical +mode material$\,\rangle$\.{\char`\}} within a +paragraph, \TeX\ will use internal vertical mode to insert the specified +material into the vertical +list that encloses the paragraph, immediately after whatever line +contained the position of the \.{\char`\\vadjust}. For example, you can say +`\.{\char`\\vadjust\char`\{\char`\\kern1pt\char`\}}' +to increase the amount of space between lines of a +paragraph if those lines would otherwise come out too close together. \ (The +\vadjust{\kern1pt}author +did that in the current line, just to illustrate what happens.) \ Also, +if you want to make sure that a page break will occur immediately after a +certain line, you can say `\.{\char`\\vadjust\char`\{\char`\\eject\char`\}}' +anywhere in that line. + +\bugonpage A122, lines 3--8 (11/24/19) + +\ninepoint\noindent +\.{\char`\\count255}, \.{\char`\\dimen255}, \.{\char`\\skip255}, +\.{\char`\\muskip255}, and \.{\char`\\toks255} are +traditionally kept available for such purposes. Furthermore, plain \TeX\ +reserves \.{\char`\\dimen0} to \.{\char`\\dimen9}, +\.{\char`\\skip0} to \.{\char`\\skip9}, \.{\char`\\muskip0} to +\.{\char`\\muskip9}, and \.{\char`\\box0} to \.{\char`\\box9} +for ``scratchwork''; these registers +are never allocated by the \.{\char`\\new...}\null\ operations. We have seen that +\.{\char`\\count0} through \.{\char`\\count9} are special, +and \.{\char`\\box255} also turns out to +be special; so those registers should be avoided unless you know what you +are doing. + +\bugonpage A155, line 8 from the bottom (01/17/21) \ninepoint\indent -| \leavevmode\copy0\kern-\wd0\makelightbox}| +\.{\char`\\mathopen\char`\{\char`\\hbox\char`\{\char`\$\char`\\left\char`\#1}% +$\langle\,$strut$\,\rangle$\.{\char`\\right.\char`\$\char`\}\char`\}} -\bugonpage A318, lines 24 and 25 (10/01/03) +\bugonpage A155, the bottom six lines (12/10/18) \ninepoint\noindent -\hbox to\parindent{\bf\hss15.13.\enspace}% -Yes, in severe circumstances. (1)~Previous footnotes might - have left no room for any more footnotes on the page. -(2)~If |\vadjust{\eject}| occurs on the same line\cutpar +dividual symbols; \.{\char`\\left}$\,\ldots\,$\.{\char`\\right} +constructions are treated as ``inner'' subformulas, which means that +they will be surrounded by additional space in certain circumstances. +All other subformulas are generally treated as ordinary symbols, +whether they are formed by \.{\char`\\overline} or +\.{\char`\\hbox} or \.{\char`\\vcenter} or +by simply being enclosed in braces. Thus, \.{\char`\\mathord} isn't really +a necessary part of the \TeX\ language; instead of typing +`\.{\char`\$1\char`\\mathord,234\char`\$}' you can get the same +effect from `\.{\char`\$1\char`\{,\char`\}234\char`\$}'. -\bugonpage A364, lines 12--15 from the bottom (02/29/08) +\bugonpage A158, line 19 (12/10/18) -\ninepoint\noindent -|\def\loggingall{\tracingcommands=2 \tracingstats=2|\par\noindent -| \tracingpages=1 \tracingoutput=1 \tracinglostchars=1 |\par\noindent -| \tracingmacros=2 \tracingparagraphs=1 \tracingrestores=1 |\par\noindent -| \showboxbreadth=\maxdimen \showboxdepth=\maxdimen}|\par -\noindent -|\def\tracingall{\tracingonline=1 \loggingall}| +\ninepoint\indent +Inner\quad is an inner atom produced by + `\.{\char`\\left}$\,\ldots\,$\.{\char`\\right}'; -\bugonpage A364, line 5 from the bottom (02/29/08) +\bugonpage A170, lines 18 and 19 (12/10/18) \ninepoint\noindent -|\def\fmtversion{3.141592653} % identifies the current format| +subformulas delimited by \.{\char`\\left} and \.{\char`\\right} +are treated as type~Inner. The following table is +used to determine the spacing between pairs of adjacent atoms: -\bugonpage A373, lines 4 and 5 from the bottom (01/02/14) +\bugonpage A171, line 19 from the bottom (06/15/19) \ninepoint\noindent -And here's another solution (which may be faster, because -token list registers can be expanded more quickly than macros -on some implementations, using |\the|): - -\bugonpage A373, line 2 from the bottom (01/02/14) +formula produces a result essentially equivalent to +`\.{\char`\\left(}$\langle\,$subformula$\,\rangle$\.{\char`\\right)}', +when\cutpar -\ninepoint\indent -|\loop \ifnum\m>0 \t=\expandafter{\the\t*}\advance\m-1 \repeat| - -\bugonpage A399, line 18, through what used to be page A400, line 14 (02/26/08) +\bugonpage A215, line 16 from the bottom becomes two lines (10/13/20) \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 A418, line 8 from the bottom (12/13/11) - -\ninepoint\noindent\beginlines -| \def\\{#3} \advance\hsize by -18mm| -\endlines - -\bugonpage A418, line 3 from the bottom (12/13/11) - -\ninepoint\noindent\beginlines -| \halign{\line{\titlefont\hss##}\\#4\unskip\\}| -\endlines - -\bugonpage A442, lines 7 and 8 from the bottom (01/03/14) - -\def\rule#1.{\smallskip\textindent{\bf#1.}\ignorespaces} -\ninepoint\textindent{\bf 3.}% -If the current item is a style change, set $C$ to the specified -style and move on to the next item. - -\bugonpage A450, lines 14--16 from the bottom (12/19/02) - -\begingroup\def\\#1{$_{\kern\scriptspace#1}$} -\indent\qquad{\tt s\\1tic - \\1exp x\\3p pi\\3a \\2i\\1a i\\2al \\2id \\1do \\1ci \\2io ou\\2 \\2us} -\medskip\noindent -(where subscripts that aren't shown are zero), and this yields -$$\centerline{% -\tt.\\0s\\0u\\1p\\0e\\0r\\1c\\0a\\0l\\1i\\0f\\0r\\0a\\0g\\1i\\0l\\4i% -\\0s\\1t\\2i\\0c\\1e\\0x\\3p\\2i\\3a\\0l\\2i\\1d\\0o\\1c\\2i\\0o\\2u\\2s\\0.}$$ -\endgroup - -\bugonpage A458, left column (01/11/07) - -\eightpoint\noindent -|\\|, 38, {\it356}, {\it378}, {\it418}. - -\bugonpage A459, left column (03/17/06) - -\eightpoint\noindent -angle brackets ( $\langle\,\rangle$ ), 59, {\it146--147}, 150,~156,\par -\noindent\qquad $\underline{268}$, 420, 437; - {\sl see also\/} |\langle|, |\rangle|. +\item\bull Just after a token such as \.{\char`\$}$_3$ +that begins math mode, to see if +another token of category 3 follows. -\bugonpage A461, left column (02/24/08) +\bugonpage A222, lines 21--23 (01/16/21) -\eightpoint\noindent -|\boxit|, 223, 331. - -\bugonpage A468, right column (02/26/08) - -\eightpoint\noindent -interline glue, 78--79, $\underline{80}$, 104, 105, 125, 221,\par -\noindent\qquad 245, 263, 281--282, 335, 352, 399, 409. - -\bugonpage A469, left column (02/26/08) +\ninepoint +\halign{\indent#\hfil&\quad(see Chapter #)\hfil\cr +\.{\char`\\hbox}$\langle\,$box specification$\,\rangle$% + \.{\char`\{}$\langle\,$horizontal mode material$\,\rangle$\.{\char`\}}&12\cr +\.{\char`\\vbox}$\langle\,$box specification$\,\rangle$% + \.{\char`\{}$\langle\,$vertical mode material$\,\rangle$\.{\char`\}}&12\cr +\.{\char`\\vtop}$\langle\,$box specification$\,\rangle$% + \.{\char`\{}$\langle\,$vertical mode material$\,\rangle$\.{\char`\}}&12\cr +} -\eightpoint\noindent -Kastrup, David Friedrich, 399. +\bugonpage A222, lines 11--13 from the bottom (01/16/21) -\bugonpage A470, left column (01/21/03) +\ninepoint\noindent +ter~15. The \.{\char`\\vsplit} operation +is also explained in Chapter~15. In math modes an additional +type of box is available: +\.{\char`\\vcenter}$\langle\,$box specification$\,\rangle$% + \.{\char`\{}$\langle\,$vertical mode material$\,\rangle$\.{\char`\}} +(see Chapter~17). -\eightpoint\noindent -|\loggingall|, $\underline{364}$. +\bugonpage A232, line 14 (01/10/21) -\bugonpage A477, right column (06/08/07) +\ninepoint\noindent +tabs outside; `\.{\char`\\global\char`\\settabs}' will not do what +you might think it should. -\eightpoint\noindent -\llap{*}|\spaceskip|, 76, 274, {\it317}, {\it356}, {\it416}, 429. +\bugonpage A233, lines 3--5 (04/27/15) -\bugonpage A479, right column (09/11/07) +\tenpoint\noindent +Only two tabs are set in this case, because only two \.{\char`\&}'s +appear in the sample line. \ (A sample line usually +ends with~\.{\char`\&\char`\\cr}, as it does here, +because text material between the last tab and \.{\char`\\cr} +isn't used for anything.) -\eightpoint\noindent -|\undefined|, 350, 384. +\bugonpage A252, lines 5--7 (12/25/20) -\bugonpage A483, line 5 from the bottom (11/18/03) +\ninepoint\noindent +blank, and +the footline is normally a centered page number, but you can specify any +headline and footline that you want by changing the token lists +\.{\char`\\headline} and \.{\char`\\footline}. For example, -\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)} +\bugonpage A253, lines 7--9 from the bottom (10/27/20) -% volume B -\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers -\def\to{\mathrel{.\,.}} % double dot, used only in math mode +\ninepoint\indent +\.{\char`\\everypar} or \.{\char`\\errhelp}, except that \TeX\ +retains the begin-group symbol~`\.{\char`\{}' at the beginning +and the end-group symbol~`\.{\char`\}}' at the end. These +grouping characters +help to keep the output routine from interfering with what +\TeX\ was doing\cutpar -\bugonpage Bv, page number change (12/27/11) +\bugonpage A256, line 19 (08/28/15) -\eightpoint\noindent[For consistency with Volumes A, C, and E, the -preface now begins on page v instead of page~vii. This change was first -made in the ninth printing.] +\ninepoint\indent +\tt \char`\\baselineskip=24pt \char`\\lineskiplimit=0pt -\bugonpage Bv {(formerly Bvii)}, bottom two lines (01/06/14) +\bugonpage A277, lines 9 and 10 from the bottom (08/26/17) -\eightpoint\noindent -all of those changes. -I~now believe that the final bug was discovered on 14 September 2008 -and removed in version 3.14159265. -The finder's fee has converged to \$327.68. +\ninepoint\indent +$\langle\,$hyphenation assignment$\,\rangle$\is + \.{\char`\\hyphenation}$\langle\,$filler$\,\rangle$% + \.{\char`\{}$\langle\,$hyphenations$\,\rangle$\.{\char`\}}\par +\qquad \alt \.{\char`\\patterns}$\langle\,$filler$\,\rangle$% + \.{\char`\{}$\langle\,$patterns$\,\rangle$\.{\char`\}} -\bugonpage Bxiii {(formerly Bxv)}, line $-7$ (12/27/11) +\bugonpage A286, bottom two lines {(and affecting the top lines +of page 287)} (08/26/17) \ninepoint\noindent -Format specs have no effect on the corresponding Pascal program, but they -do influence\cutpar +stands for zero or more \<assignment> +commands other than \.{\char`\\setbox}, possibly with \<filler>. +If the assignments are not followed by a \<character>, where +\<character> stands\cutpar -\hsize=35pc +\bugonpage A287, lines 11--17 (04/22/20) -\bugonpage B2, line 10 from the bottom (01/02/14) +\ninepoint +\textindent{$\bull$} \.{\char`\\discretionary}% + \<disc text>\<disc text>\<disc text>.\enskip +A \<disc text> has the form +`\<filler>\.{\char`\{}\<horizontal mode material>\.{\char`\}}', +where the material is processed in restricted horizontal mode and +should contain only fixed-width things. +More precisely, the horizontal list formed by each +\<disc text> must consist only of characters, ligatures, +kerns, boxes, and rules; there should be no glue or penalty items, etc. +This command appends a discretionary item to the current list; see +Chapter~14 for the meaning of a discretionary item. The space factor is +not changed. + +\bugonpage A292, lines 8--10 (04/22/20) -\ninepoint\noindent\hskip10pt -{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$% -{\tt This\]is\]TeX,\]Version\]3.14159265\char'23}\quad -$\{\,$printed when \TeX\ starts$\,\}$ +\ninepoint +\textindent{$\bull$} \.{\char`\\discretionary}% + \<disc text>\<disc text>\<disc text>.\enskip +This command has the same effect as in horizontal mode (see Chapter~25), but the +third \<disc text> must produce an empty list. -\bugonpage B3, new paragraph to follow line 9 (12/20/02) +\bugonpage A299, line 11 from the bottom (11/01/20) -\tenpoint\noindent\quad -Incidentally, Pascal's standard \\{round} function can be problematical, -because it disagrees with the IEEE floating-point standard. -Many implementors have -therefore chosen to substitute their own home-grown rounding procedure. +\ninepoint\noindent +is corrupted or was prepared for a different version of \TeX. -\bugonpage B21, lines 33 and 34 (09/11/07) +\bugonpage A305, bottom line (06/30/20) -\def\Oct#1{\hbox{\rm\char'23\kern-.2em\it#1\/\kern.05em}} % octal constant -\tenpoint\noindent -$[\Oct{41}\to\Oct{46},\Oct{60}% -\to\Oct{71},\Oct{136},\Oct{141}\to\Oct{146},\Oct{160}\to\Oct{171}]$ must be printable. -Thus, at least 81 printable characters are needed. +\ninepoint\indent +\tt \char`\\setbox0=\char`\\hbox\char`\{\char`\#1\char`\}% +\char`\\advance\char`\\dimen0 by -\char`\\wd0 \char`\}\rm. -\bugonpage B109, line 16 (01/06/14) +\bugonpage A309, line 2 becomes two lines (12/06/20) \ninepoint\noindent -\qquad\qquad{\bf begin} $\\{print\_esc}(\.{"csname"})$; -$\\{print\_esc}(\.{"endcsname"})$; -$\\{print\_char}(\.{"\ "})$; -{\bf end} +represent text entered from the user's terminal, or with +`\.{<insert>}', when they +represent text inserted during error recovery). -\bugonpage B114, line 25 (09/11/07) +\bugonpage A316, lines 17 and 18 from the bottom (09/03/15) -\def\#{\hbox{\tt\char`\#}} % parameter sign \ninepoint\noindent -{\bf define} $\\{save\_index}(\#)\equiv\\{save\_stack}[\#].\\{hh}.\\{rh}$\quad - $\{\,$\\{eqtb} location or token or \\{save\_stack} location$\,\}$ +(The next line must also not be too tall.) +Here \.{\char`\\specialstar} is a box of height zero and depth +\.{\char`\\strutdepth}, +and it puts an asterisk in the left margin: -\bugonpage B139, line 20 (12/19/02) +\bugonpage A320, lines 5--9 from the bottom (06/27/15) \ninepoint\noindent -\quad{\bf begin while} $(\\{state}=\\{token\_list}) \land - (\\{loc}=\\{null}) \land (\\{token\_type}\ne\\{v\_template})$ {\bf do}\par -\noindent\qquad\\{end\_token\_list};\quad$\{\,$conserve stack space$\,\}$ +{\bf 17.21.}\enspace Assigning \.{\char`\\delcode\char`\`\char`\{} +would not work to allow `\.{\char`\\left\char`\{}', because +the brace has category~1 and isn't a legal \<delim>. +Allowing brace delimiters would be a bad idea because it would +mess up other constructions, such as arguments to macros, and +components of alignments. Moreover, a user who +gets away with `\.{\char`\\left\char`\{}' +is likely to try also `\.{\char`\\bigl\char`\{}', which +fails miserably. -\bugonpage B144, line 14 (09/11/07) +\bugonpage A326, line 12 (08/26/17) \ninepoint\noindent -\quad\\{cat}: $0\to\\{max\_char\_code}$;\quad$\{\,$\\{cat\_code}(\\{cur\_char}), usually$\,\}$ +its natural width. The \.{\char`\\hbox} version also invokes +\.{\char`\\everyhbox} and \.{\char`\\everymath}. -\bugonpage B153, lines 2 and 3 (09/11/07) +\bugonpage A329, line 3 of answer 20.7 (05/15/19) -\tenpoint\noindent -In fact, these three procedures account for almost every use of \\{get\_next}. +\ninepoint\noindent +the three tokens \.{!1}, \.{\char`\#2}, \.{[}$_1$; the +\<replacement text> consists of the six tokens +\.{\char`\{}$_1$, \.{\char`\#}$_6$,\cutpar -\bugonpage B161, line 19 (12/19/02) +\bugonpage A329, line 6 of answer 20.7 (05/15/19) \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$\,\}$ +is otherwise irrelevant. Thus, `\.{\char`\\def\char`\\!!1\char`\#2\char + `\#[\char`\{\char`\#\char`\#]!!\char`\#2]}' +would produce an essentially\cutpar -\bugonpage B163, line 29 (12/19/02) +\bugonpage A329, line 5 from the bottom of answer 20.7 (05/15/19) -\ninepoint\noindent -\quad$\\{long\_state}\gets\\{call}$; -$\\{cur\_tok}\gets\\{par\_token}$; -$\\{ins\_error}$; -{\bf goto} \\{continue}; +\ninepoint\indent +\.{!1<-x} -\bugonpage B172, lines 2--6 from the bottom (09/11/07) +\bugonpage A329, bottom line of answer 20.7 (05/15/19) \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}) +final parameter in the parameter text; +`\.{!1}' would have been rendered `\.{\char`\#1}'. -\bugonpage B178, line 4 (09/11/07) +\bugonpage A332, lines 13 and 14 (08/26/17) \ninepoint\noindent -\quad$\\{cur\_val}\gets0$; -$\\{cur\_val\_level}\gets\\{int\_val}$; -$\\{radix}\gets0$; -$\\{cur\_order}\gets\\{normal}$; +{\bf 21.10.}\enspace If you say +`\.{\char`\{\char`\\let}\stretch +\.{\char`\\the=0\char`\\edef}\stretch +\.{\char`\\next}\stretch +\.{\char`\{\char`\\write}\stretch +\.{\char`\\cont}\stretch +\.{\char`\{}\<token list>\.{\char`\}\char`\}\char`\\next}\stretch +\.{\char`\}}', +the \.{\char`\\write} will be exercuted after +\.{\char`\\edef} expands everything except \.{\char`\\the}. -\bugonpage B184, line 9 from the bottom (04/18/07) +\bugonpage A332, bottom line (11/15/19) -\tenpoint\noindent -and denominator sum to 32768 or less. -According to the definitions here, $\rm2660\,dd\approx1000.33297\,mm$;\kern-6.6pt\cutpar +\ninepoint\indent\quad +\tt \char`\\+\char`\&\char`\{\char`\\bf end\char`\};\char`\\cr \ + \char`\%\ note that the semicolon isn't bold -\bugonpage B206, line 14 (10/30/02) +\bugonpage A342, lines 12 and 13 (08/14/20) \tenpoint\noindent -used input files like \.{webmac.tex}. +of plain \TeX\ format; but some of them are primitive (built in), +such as `\.{\char`\\par}' (end of +paragraph), `\.{\char`\\noindent}' (beginning of +non-indented paragraph), and `\.{\char`\/}' (italic\cutpar -\bugonpage B206, new paragraph to follow line 22 (12/20/02) +\bugonpage A345, lines 10--13 from the bottom (06/27/15) -\tenpoint\noindent\quad -The following procedures don't allow spaces to be part of -file names; but some users seem to like names that are spaced-out. -System-dependent changes to allow such things should probably -be made with reluctance, and only when an entire file name that -includes spaces is ``quoted'' somehow. +\ninepoint\noindent +Braces are used for grouping, when supplying +arguments to macros; so they cannot also be used as math delimiters, or as +arguments to macros such as \.{\char`\\big}. (One could change their catcodes +to~12, and use some other pair of characters for grouping; but that +would not be plain \TeX.) -\bugonpage B227, new line to precede line 23 (09/11/07) +\bugonpage A346, lines 10--22 (11/24/19) \ninepoint\noindent -{\bf if} $(\\{nw}=0)\lor(\\{nh}=0)\lor(\\{nd}=0)\lor(\\{ni}=0)$ - {\bf then} \\{abort}; +number identification.) \ (2)~The registers +\.{\char`\\count255}, \.{\char`\\dimen255}, \.{\char`\\skip255}, +\.{\char`\\toks255}, and \.{\char`\\muskip255} +are freely available in the same way. +\ (3)~All assignments to the scratch registers whose numbers are +1,~3, 5, 7, and~9 should be \.{\char`\\global}; all assignments to the +other scratch registers (0,~2, 4, 6, 8,~255) should be non-\.{\char`\\global}. +\ (This prevents the phenomenon of ``save stack buildup'' discussed +in Chapter~27.) +\ (4)~Furthermore, it's possible to +use any register in a group, if you ensure that \TeX's grouping +mechanism will restore the register when you're done with the group, and +if you are certain that other macros will not make global assignments +to that register when you need it. \ (5)~But when a register is used +by several macros, or over long spans of time, it should be allocated +by \.{\char`\\newcount}, \.{\char`\\newdimen}, \.{\char`\\newbox}, +etc. \ (6)~Similar remarks +apply to input/output streams used by \.{\char`\\read} and \.{\char`\\write}, +to math families used by \.{\char`\\fam}, to sets of hyphenation rules used by +\.{\char`\\language}, and to insertions (which require +\.{\char`\\box}, \.{\char`\\count}, \.{\char`\\dimen}, +and \.{\char`\\skip} registers all having the +same number).\looseness=-1 -\bugonpage B256, line 25 (12/20/02) +\bugonpage A347, line 6 (06/30/20) \ninepoint\noindent -\qquad\\{cur\_glue}: \\{real};\quad$\{\,$glue seen so far$\,\}$\par\noindent -\qquad\\{cur\_g}: \\{scaled};\quad$\{\,$rounded - equivalent of \\{cur\_glue} times the glue ratio$\,\}$\par\noindent -\quad{\bf begin} $\\{cur\_g}\gets0$; - $\\{cur\_glue}\gets\\{float\_constant}(0)$;\par\noindent -\quad$\\{this\_box}\gets\\{temp\_ptr}$; - $\\{g\_order}\gets\\{glue\_order}(\\{this\_box})$; - $\\{g\_sign}\gets\\{glue\_sign}(\\{this\_box})$; +\tt \char`\\def\char`\\wlog\char`\{\char`\\immediate\char`\\write-1 \char`\} +\ \char`\%\ this will write on log file (only) -\bugonpage B258, line 5 from the bottom (12/20/02) +\bugonpage A347, line 10 (11/24/19) \ninepoint\noindent -\quad{\bf begin} $g\gets\\{glue\_ptr}(p)$; - $\\{rule\_wd}\gets\\{width}(g)-\\{cur\_g}$; +\tt \char`\\outer\char`\\def\char`\\newmuskip\char`\{\char`\\alloc@3% +\char`\\muskip\char`\\muskipdef\char`\\@cclv\char`\} -\bugonpage B258, bottom line (12/20/02) +\bugonpage A347, line 14 (11/24/19) \ninepoint\noindent -\qquad\qquad{\bf begin} $\\{cur\_glue}\gets\\{cur\_glue}+\\{stretch}(g)$; - $\\{vet\_glue}(\\{float}(\\{glue\_set}(\\{this\_box}))*\\{cur\_glue})$;\par -\noindent\qquad\qquad$\\{cur\_g}\gets\\{round}(\\{glue\_temp})$; +\tt \char`\\outer\char`\\def\char`\\newtoks\char`\{\char`\\alloc@5% +\char`\\toks\char`\\toksdef\char`\\@cclv\char`\} -\bugonpage B259, line 4 (12/20/02) +\bugonpage A350, lines 15 and 16 from the bottom (01/17/21) \ninepoint\noindent -\qquad\qquad{\bf begin} $\\{cur\_glue}\gets\\{cur\_glue}-\\{shrink}(g)$; - $\\{vet\_glue}(\\{float}(\\{glue\_set}(\\{this\_box}))*\\{cur\_glue})$;\par -\noindent\qquad\qquad$\\{cur\_g}\gets\\{round}(\\{glue\_temp})$; +format; it shouldn't cost much for people to acquire all the +fonts of plain \TeX\ in addition to the ones that they really want. Second, it +is desirable on many computer systems to\cutpar -\bugonpage B259, new line to precede old line 7 (12/20/02) +\bugonpage A364, line 5 from the bottom (01/14/21) \ninepoint\noindent -\quad$\\{rule\_wd}\gets\\{rule\_wd}+\\{cur\_g}$; +\tt \char`\\def\char`\\fmtversion\char`\{3.1415926535\char`\} +\ \char`\%\ identifies the current format -\bugonpage B260, line 21 (12/19/02) +\bugonpage A370, lines 11 and 12 (08/26/17) \ninepoint\noindent -\qquad{\bf else begin} $\\{lx}\gets\\{lr}$ {\bf div} $(\\{lq}+1)$; +close as possible to the ASCII conventions. +\ (b)~Make sure that codes \oct{041}--\oct{046}, \oct{060}--\oct{071}, +\oct{136}, \oct{141}--\oct{146}, and \oct{160}--\oct{171} are present and that +each unrepresentable in-\cutpar -\bugonpage B261, line 9 (12/20/02) +\bugonpage A373, lines 21 and 22 (01/17/21) \ninepoint\noindent -\qquad\\{cur\_glue}: \\{real};\quad$\{\,$glue seen so far$\,\}$\par\noindent -\qquad\\{cur\_g}: \\{scaled};\quad$\{\,$rounded - equivalent of \\{cur\_glue} times the glue ratio$\,\}$\par\noindent -\quad{\bf begin} $\\{cur\_g}\gets0$; - $\\{cur\_glue}\gets\\{float\_constant}(0)$;\par\noindent -\quad$\\{this\_box}\gets\\{temp\_ptr}$; - $\\{g\_order}\gets\\{glue\_order}(\\{this\_box})$; - $\\{g\_sign}\gets\\{glue\_sign}(\\{this\_box})$; +and \.{\char`\\if...\char`\\fi} +tests, as well as special operations like \.{\char`\\the} +and \.{\char`\\input}, while the +latter category includes the primitive commands listed in Chapters~24--26. +The expansion of\cutpar -\bugonpage B262, line 10 from the bottom (12/20/02) +\bugonpage A375, bottom three lines (06/30/20) \ninepoint\noindent -\quad{\bf begin} $g\gets\\{glue\_ptr}(p)$; - $\\{rule\_ht}\gets\\{width}(g)-\\{cur\_g}$; +|$$\generaldisplay$$| to be invoked, with |\eq| defined to be $\alpha$. +Furthermore, when an equation number~$\beta$ is present, it should be stored +in |\eqn|, and the test |\ifeqno| should be true. +In such cases |\ifleqno| should distinguish |\leqno| from |\eqno|. +Here\cutpar -\bugonpage B262, line 6 from the bottom (12/20/02) +\bugonpage A398, lines 4 and 5 (08/26/17) -\ninepoint\noindent -\qquad\qquad{\bf begin} $\\{cur\_glue}\gets\\{cur\_glue}+\\{stretch}(g)$; - $\\{vet\_glue}(\\{float}(\\{glue\_set}(\\{this\_box}))*\\{cur\_glue})$;\par -\noindent\qquad\qquad$\\{cur\_g}\gets\\{round}(\\{glue\_temp})$; +\ninepoint\indent +|\setbox2=\lastbox \setbox\footins=\vbox{\box2}|\par +\smallskip\noindent +since |\lastbox| will be the result of\/ |\rigidbalance|, which is an hbox. -\bugonpage B262, line 2 from the bottom (12/20/02) +\bugonpage A407, line 5 from the bottom (06/30/20) -\ninepoint\noindent -\qquad\qquad{\bf begin} $\\{cur\_glue}\gets\\{cur\_glue}-\\{shrink}(g)$; - $\\{vet\_glue}(\\{float}(\\{glue\_set}(\\{this\_box}))*\\{cur\_glue})$;\par -\noindent\qquad\qquad$\\{cur\_g}\gets\\{round}(\\{glue\_temp})$; +\ninepoint\noindent\quad +| \interlinepenalty5000\def\par{\endgraf\penalty5000 }}| -\bugonpage B263, new line to precede old line 2 (12/20/02) +\bugonpage A413, line 11 from the bottom (05/14/19) -\ninepoint\noindent -\quad$\\{rule\_ht}\gets\\{rule\_ht}+\\{cur\_g}$; +\ninepoint\indent +The computer file |texbook.tex| that generated {\sl The \TeX book\/} begins +with a\cutpar -\bugonpage B264, line 10 (12/19/02) +\bugonpage A418, line 4 (05/14/19) \ninepoint\noindent -\qquad{\bf else begin} $\\{lx}\gets\\{lr}$ {\bf div} $(\\{lq}+1)$; +\TeX\ commands +that look like this in the file |texbook.tex|: -\bugonpage B266, line 29 (09/11/07) +\bugonpage A420, line 11 (06/30/20) -\tenpoint\noindent -$\\{total\_pages}\ge65536$, the \.{DVI} file will lie. And if -$\\{max\_push}\ge65536$, the user deserves whatever chaos might ensue. +\ninepoint\noindent +|\def\bull{\vrule height.9ex width.8ex depth-.1ex \relax} % square bullet| -\bugonpage B279, line 19 (09/11/07) +\bugonpage A423, line 16 (06/30/20) \ninepoint\noindent -\qquad\\{p}: \\{pointer};\quad$\{\,$a new glue node$\,\}$ +| \vrule height6pt depth2pt width0pt \relax} % a strut for \insert\margin| -\bugonpage B288, lines 18--20 (09/11/07) +\bugonpage A445, lines 10--14 (12/10/18) -\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$)); +\ninepoint +\textindent{\bf 15e.} Enclose the vbox that was constructed in Rule 15c or 15d by +delimiters $(\lambda,\rho)$ +whose height plus depth is at least $\sigma_{20}$, if $C>T$, and at +least $\sigma_{21}$ otherwise. Shift the delimiters up or down so that they are +vertically centered with respect to the axis. Replace the generalized +fraction by an Ord atom whose nucleus is the resulting sequence of three boxes +($\lambda$, vbox, $\rho$). Go to rule~19. -\bugonpage B290, line 12 (09/11/07) +\bugonpage A446, the bottom three lines of Rule 19 become four lines (01/10/21) \ninepoint\noindent -\quad{\bf begin if\/} $s=\\{text\_size}$ {\bf then} - \\{print\_esc}(\.{"textfont"}); +atom and the right boundary item to +a Close atom. The entire resulting list now becomes the nucleus of an +Inner atom. \ (All of the calculations in this step are done with +$C$ equal to the starting style of the math list; style items in the +middle of the list do not affect the style of the right boundary item.) -\bugonpage B299, line 9 (12/20/02) +\bugonpage A454, lines 17 and 18 from the bottom (04/13/20) \ninepoint\noindent -\qquad\qquad\quad{\bf if\/} $\\{type}(r)=\\{kern\_node}$ {\bf then} - \quad$\{\,$unneeded italic correction$\,\}$ +of the process; the trial word consists of all the letters found in admissible +items, up to a maximum of~63. Notice that all of these letters are in font~$f$. -\bugonpage B332, line 6 (12/19/02) +\bugonpage A458 and following, selected amendments to the index (01/18/21) -\tenpoint\noindent -is being scanned, or when no alignment preamble is active. +\eightpoint +|[1]| (progress report), 23, $\underline{119}$.\par +|\aa| ( \aa\ ), {\it52}, $\underline{356}$.\par +|\AA| ( \AA\ ), {\it52}, $\underline{356}$.\par +\<disc text>, $\underline{287}$, 292.\par +\<general text>, $\underline{276}$, 279, 280.\par +\<horizontal mode material>, 278, 285, 287.\par +integral signs, {\sl see\/} |\int|, |\oint|, |\smallint|.\par +\<math mode material>, 287, 289--293.\par +|\null|, 311, {\it312}, {\it316}, {\it332}, {\it335}, $\underline{351}$, {\it354}, {\it360}--{\it362}, {\it419}.\par +|\o| ( \o\ ), {\it52}, $\underline{356}$.\par +|\O| ( \O\ ), {\it52}, $\underline{356}$.\par +programs, for computers, 38, 165, {\it234}.\par +repeating templates, {\sl see\/} periodic preambles.\par +replacement text, {\it200}--{\it204}, 212, 280, 300, 329.\par +right delimiters, {\sl see\/} closings.\par +struts, $\underline{82}$, 125, 131, 142, 155, 178, 245--247, 255, 329, 416, 422, 423.\par +\<vertical mode material>, 278, 280--282, 290. -\bugonpage B332, line 8 (12/19/02) -\ninepoint\noindent -\quad{\bf begin if\/} $(\\{scanner\_status}=\\{aligning}) \lor - (\\{cur\_align}=\\{null})$ {\bf then} +% volume B +\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers +\def\dts{\mathrel{.\,.}} % double dot, used only in math mode -\bugonpage B336, line 11 from the bottom (10/13/03) +\bugonpage Bv {(formerly Bvii)}, bottom two lines (01/15/21) -\tenpoint\noindent -$j-i+\\{min\_quarterword}$ in their -\\{link} fields. The values of $w_{ii}$ were initialized to -\\{null\_flag},\cutpar +\eightpoint\noindent +all of those changes. +I~now believe that the final bug was discovered on 22 October 2020 +and removed in version 3.141592653. % on 12 January 2021 +The finder's fee has converged to \$327.68. + +\hsize=35pc -\bugonpage B342, lines 5 and 6 (09/11/07) +\bugonpage B2, line 10 from the bottom (01/15/21) -\tenpoint -In restricted horizontal mode, the \\{clang} part of \\{aux} is undefined; -an over-cautious Pascal runtime system may complain about this. +\ninepoint\noindent\hskip10pt +{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$% +{\tt This\]is\]TeX,\]Version\]3.141592653\char'23}\quad +$\{\,$printed when \TeX\ starts$\,\}$ -\bugonpage B416, line 22 (02/29/08) +\bugonpage B4, line 8 of \S7 (04/02/17) -\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)$ +\tenpoint\noindent +diagnostic information for \.{\char`\\tracingparagraphs}, +\.{\char`\\tracingpages}, and \.{\char`\\tracingrestores}. -\bugonpage B438, lines 1--3 (09/11/07) +\bugonpage B21, lines 33 and 34 (04/02/17) +\def\Oct#1{\hbox{\rm\char'23\kern-.2em\it#1\/\kern.05em}} % octal constant \tenpoint\noindent -{\bf1035.\quad}If \\{link}(\\{cur\_q}) is nonnull when \\{wrapup} is invoked, -\\{cur\_q} points to -the list of characters that were consumed while building the ligature -character~\\{cur\_l}. +$[\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 80 printable characters are needed. -\bugonpage B438, lines 19 and 20 (09/11/07) +\bugonpage B28, lines 3 and 4 (04/02/17) -\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}$; +\tenpoint\noindent +not serious since we assume that this +part of the program is system dependent. -\bugonpage B438, line 4 from the bottom (09/11/07) +\bugonpage B28, line 2 from the bottom (04/02/17) -\ninepoint\noindent -\quad$\\{link}(\\{tail})\gets\\{lig\_stack}$; -$\\{tail}\gets\\{lig\_stack}$\quad$\{\,$\\{main\_loop\_lookahead} is next$\,\}$ +\ninepoint\noindent\quad +{\bf var} $k$: $0\dts23$;\quad$\{\,$index to current digit; we assume + that $\vert n\vert<10^{23}\,\}$ -\bugonpage B439, line 3 (09/11/07) +\bugonpage B35, line 2 of \S83 becomes two lines (06/27/20) -\ninepoint\noindent -\quad{\bf if\/} $\\{main\_p}>\\{null}$ {\bf then} - \\{tail\_append}(\\{main\_p});\quad$\{\,$append a single character$\,\}$ +\ninepoint\noindent\quad +{\bf loop begin} \\{continue}: {\bf if} $\\{interaction}\ne\\{error\_stop\_mode}$ + {\bf then return};\par +\noindent\qquad +\\{clear\_for\_error\_prompt}; \ \\{prompt\_input}(\.{"?\]"}); -\bugonpage B440, new line to follow line 9 (09/11/07) +\bugonpage B36, line 11 of \S84 (07/03/20) -\ninepoint\noindent -\quad{\bf if\/} $\\{cur\_r}=\\{non\_char}$ {\bf then goto} - \\{main\_loop\_wrapup}; +\ninepoint\noindent\quad +\.{"E"}: {\bf if} $\\{base\_ptr}>0$ {\bf then if} + $\\{input\_stack}[\\{base\_ptr}].\\{name\_field}\ge256$ {\bf then} -\bugonpage B452, line 18 (28/03/11) +\bugonpage B36, line 5 of \S85 becomes two lines (07/03/20) -\noindent\\{hmode}, where the latter two are used to denote - \.{\char`\\vbox} and \.{\char`\\hbox}, respectively. +\ninepoint\noindent\quad +{\bf if} $\\{base\_ptr}>0$ {\bf then}\par +\noindent\qquad +{\bf if} $\\{input\_stack}[\\{base\_ptr}].\\{name\_field}\ge256$ {\bf then} +\\{print}(\.{"E\]to\]edit\]your\]file."} -\bugonpage B455, lines 3 and 4 (09/11/07) +\bugonpage B40, line 5 from the bottom (08/07/20) -\ninepoint\noindent -\quad{\bf if\/} $((\\{cur\_cmd}=\\{hskip})\land(\\{abs}(\\{mode})\ne\\{vmode})) - \lor ((\\{cur\_cmd}=\\{vskip})\land(\\{abs}(\\{mode})=\\{vmode}))$ {\bf then} +\ninepoint\noindent\qquad +(\.{"Try\]to\]insert\]an\]instruction\]for\]me\](e.g.,\]% + \char`\`I\char`\\showlists\char`\'),"}) -\bugonpage B472, new paragraph to follow line 10 (12/20/02) +\bugonpage B58, lines 2 and 3 of \S136 (10/11/20) -\tenpoint\noindent\quad -A devious user might force an \\{endv} command to occur just about anywhere; -we must defeat such hacks. +\tenpoint\noindent +the values corresponding to `\.{\char`\\hbox\char`\{\char`\}}'. +The \\{sub\_type} +field is set to \\{min\_quarterword}, for historic reasons that are no +longer relevant. -\bugonpage B472, replacement for what used to be line 13 (12/20/02) +\bugonpage B88, line 16 (10/22/20) -\ninepoint\noindent -\quad{\bf begin} $\\{base\_ptr}\gets\\{input\_ptr}$; - $\\{input\_stack}[\\{base\_ptr}]\gets\\{cur\_input}$;\par\noindent -\quad{\bf while} $(\\{input\_stack}[\\{base\_ptr}].\\{index\_field}\ne - \\{v\_template}) \land{}$\par\noindent -\quad\qquad $(\\{input\_stack}[\\{base\_ptr}].\\{loc\_field}= - \\{null}) \land {}$\par\noindent -\quad\qquad $(\\{input\_stack}[\\{base\_ptr}].\\{state\_field}= - \\{token\_list})$ {\bf do} \\{decr}(\\{base\_ptr});\par\noindent -\quad{\bf if\/} $(\\{input\_stack}[\\{base\_ptr}].\\{index\_field}\ne - \\{v\_template}) \lor {}$\par\noindent -\quad\qquad $(\\{input\_stack}[\\{base\_ptr}].\\{loc\_field}\ne - \\{null}) \lor {}$\par\noindent -\quad\qquad $(\\{input\_stack}[\\{base\_ptr}].\\{state\_field}\ne - \\{token\_list})$ {\bf then}\par\noindent -\qquad\\{fatal\_error}(\hbox{\tt\char'23(interwoven\]alignment\]preambles\]% - are\]not\]allowed)\char'23});\par\noindent -\quad{\bf if\/} $\\{cur\_group}=\\{align\_group}$ {\bf then} +\tenpoint\noindent +The mode is temporarily set to zero while processing \.{\char`\\write} texts. + +\bugonpage B102, lines 3 and following of \S241 (12/11/20) -\bugonpage B505, line 19 (09/11/07) +\tenpoint\noindent +information, something special +is needed. The program here simply assumes that suitable values appear in +the global variables \\{sys\_time}, \\{sys\_day}, \\{sys\_month}, and +\\{sys\_year} (which are initialized to noon on 4 July 1776, +in case the implementor is careless). +\smallskip +\ninepoint\noindent +{\bf procedure} \\{fix\_date\_and\_time};\par +\noindent\quad{\bf begin} +$\\{sys\_time}\gets12\ast60$; \ +$\\{sys\_day}\gets4$; \ +$\\{sys\_month}\gets7$; \ +$\\{sys\_year}\gets1776$;\quad +$\{\,$self-evident truths$\,\}$\par +\noindent\quad$\\{time}\gets\\{sys\_time}$;\quad + $\{\,$minutes since midnight$\,\}$\par +\noindent\quad$\\{day}\gets\\{sys\_day}$;\quad$\{\,$day of the month$\,\}$\par +\noindent\quad$\\{month}\gets\\{sys\_month}$;\quad$\{\,$month of the year$\,\}$\par +\noindent\quad$\\{year}\gets\\{sys\_year}$;\quad$\{\,$Anno Domini$\,\}$\par +\noindent\quad{\bf end}; + +\bugonpage B103, replacement for \S246 (12/11/20) +\tenpoint\noindent +{\bf 246.}\quad Of course we had better declare a few more global variables, +if the previous routines are going to work. +\smallskip \ninepoint\noindent -\qquad(\.{"since\]the\]result\]is\]out\]of\]range."});\par\noindent -\qquad{\bf if\/} $p\ge\\{glue\_val}$ {\bf then} - \\{delete\_glue\_ref}(\\{cur\_val});\par\noindent -\qquad\\{error}; {\bf return}; +$\langle\,$Global variables {\sevenrm\kern.5em13}$\,\rangle+\equiv$\par +\noindent\\{old\_setting}: $0\dts\\{max\_selector}$;\par +\noindent\\{sys\_time}, \\{sys\_day}, \\{sys\_month}, \\{sys\_year}: \\{integer}; +\quad$\{\,$date and time supplied by external system$\,\}$ -\bugonpage B506, line 1 (10/13/03) +\goodbreak +\bugonpage B122, lines 9 and 10 of \S291 (10/12/20) -\tenpoint\noindent -{\bf 1237.\quad}Here we use the fact that the consecutive codes -$\\{int\_val}\to\\{mu\_val}$ and -$\\{assign\_int}\to$\cutpar +\tenpoint\noindent\quad +The enclosing \.{\char'173} and \.{\char'175} characters of a macro +definition are omitted, but an output routine +will be enclosed in braces. -\bugonpage B520, line 8 (06/25/04) +\bugonpage B143, lines 2, 3, 4 become four lines (01/15/17) \tenpoint\noindent -says, -for example, `\.{(preloaded format=plain 1982.11.19)}', showing the year, -month, and day\cutpar +routines that should be aborted, but we can sketch the +ideas here: For a runaway definition or a runaway balanced text, +we will insert a right brace; for a +runaway preamble, we will insert a special \.{\char`\\cr} token and a right +brace; and for a runaway argument, we will set \\{long\_state} to +\\{outer\_call} and insert \.{\char`\\par}. -\bugonpage B535, new line to follow line 11 (09/11/07) +\bugonpage B188, line 8 (04/02/17) \ninepoint\noindent -\qquad{\bf if\/} $\\{last\_glue}\ne\\{max\_halfword}$ {\bf then} - \\{delete\_glue\_ref}(\\{last\_glue}); +{\bf function} \\{str\_toks}$(b:\\{pool\_pointer})$: \\{pointer};\quad + $\{\,$converts \\{str\_pool}$[b\dts\\{pool\_ptr}-1]$ to a token list$\,\}$ -\bugonpage B578, new entry (06/04/06) +\bugonpage B192, line 17 (10/22/20) -\eightpoint\noindent -Trabb Pardo, Luis Isidoro, 2. +\ninepoint\noindent\quad +{\bf label} \\{found}, \\{continue}, \\{done}, \\{done1}, \\{done2}; -% 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 B192, line 3 of \S474 (10/22/20) -\bugonpage Cxi, line 4 (05/20/07) +\ninepoint\noindent\qquad +{\bf begin} \\{continue}: \\{get\_token};\quad$\{\,$set \\{cur\_cmd}, + \\{cur\_chr}, \\{cur\_tok}$\,\}$ -\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 B193, line 4 of \S476 (05/20/20) -\bugonpage C11, line 11 (10/11/01) +\ninepoint\noindent\quad +{\bf if} $\\{cur\_tok}<\\{left\_brace\_limit}$ {\bf then} -\noindent -the area below the bar to the area above it equal to -$(\sqrt5+1)/2\approx1.61803$, the\cutpar +\bugonpage B193, line 10 of \S476 becomes two lines (10/22/20) -\bugonpage C29, illustration for exercise 4.11 (09/09/01) +\ninepoint\noindent\qquad +\\{help2}(\.{"I\char`\'m\]going\]to\]ignore\]the\]\#\]sign\]you\]just\]used,"})\par +\noindent\qquad +(\.{"as\]well\]as\]the\]token\]that\]followed\]it."}); +\\{error}; {\bf goto} \\{continue}; -\noindent -[points 2 and 5 should not be labeled twice] +\bugonpage B196, line 5 from the bottom (02/17/18) -\bugonpage C32, line 5 from the bottom (01/04/14) +\ninepoint\noindent\qquad\quad +\\{help1}(\.{"This\]\char`\\read\]has\]unbalanced\]braces."}); +$\\{align\_state}\gets1000000$; +$\\{limit}\gets0$; +\\{error}; -\noindent -\hbox to\parindent{\hfil\sevenrm20\ \ }% -| penpos1(stem,15); penpos2(.9stem,12); penpos3(stem,10);| +\bugonpage B199, lines 1--3 of \S494 (10/25/20) -\bugonpage C36, line 5 from the bottom (01/05/14) +\tenpoint\noindent +{\bf 494.} \ \ Here is a procedure that ignores text until coming to an \.{\char`\\or}, +\.{\char`\\else}, or \.{\char`\\fi} at the current level +of $\.{\char`\\if}\ldots\.{\char`\\fi}$ +nesting. After it has acted, \\{cur\_chr} will indicate the token that +was found, but \\{cur\_tok} will not be set (because this makes the +procedure run faster). + + +\bugonpage B214, lines 2--6 of \S536 (12/11/20) + +\ninepoint\noindent\quad +{\bf begin} \\{wlog}(\\{banner}); +\\{slow\_print}(\\{format\_ident}); +\\{print}(\.{"\]\]"}); +\\{print\_int}(\\{sys\_day}); +\\{print\_char}(\.{"\]"});\par +\noindent\quad +$\\{months}\gets\.{\char`\'JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC\char`\'}$;\par +\noindent\quad +{\bf for} $k\gets3\ast\\{sys\_month}-2$ {\bf to} $3\ast\\{sys\_month}$ +{\bf do} \\{wlog}(\\{months}[$k$]);\par +\noindent\quad +\\{print\_char}(\.{"\]"}); +\\{print\_int}(\\{sys\_year}); +\\{print\_char}(\.{"\]"}); +\\{print\_two}(\\{sys\_time} {\bf div} 60); +\\{print\_char}(\.{":"});\par +\noindent\quad +\\{print\_two}(\\{sys\_time} {\bf mod} 60); + +\bugonpage B214, line 2 of \S537 becomes two lines (10/29/20) -\noindent -line~12, where it -says `|x1l|', not `|x11|' or~`|xll|'); be sure to distinguish between\cutpar +\tenpoint\noindent +command is being processed. +Beware: For historic reasons, this code foolishly conserves a tiny bit +of string pool space; but that can confuse the interactive `\.E' option. -\bugonpage C55, lines 5 and 6 (01/05/14) +\bugonpage B214, bottom line (10/29/20) \ninepoint\noindent -suffixed or subscripted. -Thus, the syntax rule for \<variable> -should actually be replaced by a slightly more complicated pair of rules: +{\bf if} $\\{name}=\\{str\_ptr}-1$ {\bf then} +\ $\{\,$conserve string pool space (but see note above)$\,\}$ +\bugonpage B219, lines 18--20 of \S545 (09/19/19) -\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. +\tenpoint\noindent +so-called boundary character of this font; +the value of \\{next\_char} need not lie between \\{bc} and~\\{ec}. +If the very last instruction of the \\{lig\_kern} array has $\\{skip% +\_byte}=255$, +there is a special ligature/kerning program for a boundary character at the +left, beginning at location $256\ast\\{op\_byte}+$\cutpar -\bugonpage C137, lines 5--7 from the bottom (02/21/08) +\bugonpage B282, line 1 {(and change lines 20--23 accordingly)} (04/02/17) -\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 +\tenpoint\noindent +{\bf 682.} Each portion of a formula is classified as Ord, Op, Bin, Rel, Open, +Close, Punct, or Inner, for\cutpar -\bugonpage C137, bottom two lines (02/21/08) +\bugonpage B299, line 4 from the bottom of \S722 (10/06/20) -\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 +\ninepoint\noindent\qquad\quad +{\bf begin} \\{char\_warning}(\\{cur\_f}, \\{qo}(\\{cur\_c})); +$\\{math\_type}(a)\gets\\{empty}$; +$\\{cur\_i}\gets\\{null\_character}$; -\bugonpage C156, line 15 from the bottom (09/09/01) +\bugonpage B318, lines 16 and 17 of \S761 become one (03/25/19) \ninepoint\noindent -be the values they had upon entry to the group.) +\\{fraction\_noad}: $s\gets\\{fraction\_noad\_size}$; -\bugonpage C159, lines 12--15 (12/01/06) +\bugonpage B333, line 5 of \S793 becomes two lines (01/10/20) -\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. +\ninepoint\noindent\quad +$\\{cur\_loop}\gets\\{link}(\\{cur\_loop})$; +$\\{link}(p)\gets\\{new\_glue}(\\{glue\_ptr}(\\{cur\_loop}))$;\par +\noindent\quad +$\\{subtype}(\\{link}(p))\gets\\{tab\_skip\_code}+1$; -\bugonpage C171, line 16 from the bottom (06/18/02) +\bugonpage B348, insert a new line after line 5 of \S826 (01/15/17) -\tenpoint -\<loop>\is\<loop header>|:|\<loop text> {\tt endfor} +\ninepoint\noindent\qquad +{\bf stat if} $\\{tracing\_paragraphs}>0$ {\bf then} +\\{end\_diagnostic}(\\{true}); \ {\bf tats} -\bugonpage C179, line 7 from the bottom (09/09/01) +\bugonpage B348, insert a new line to be the seventh line after the previous change (01/15/17) -\ninepoint\noindent -next time \MF\ gets to the end of an input line, it will stop reading -from the\cutpar +\ninepoint\noindent\qquad +{\bf stat if} $\\{tracing\_paragraphs}>0$ {\bf then} +\\{begin\_diagnostic}; \ {\bf tats} -\bugonpage C180, lines 14--16 (04/25/03) +\bugonpage B377, line 6 (10/31/20) \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. +\\{hn}: $0\dts64$; \ $\{\,$the number of positions occupied in \\{hc}; + not always a \\{small\_number}$\,\}$ -\bugonpage C180, new line to be inserted 4 from the bottom (06/25/04) +\bugonpage B417, mini-index (04/02/17) -\ninepoint\item\bull -When \MF\ is reading the symbolic tokens to be saved by {\bf save}. +\eightpoint\noindent +The entry `\\{height}, \S981.' here and on many later +odd-numbered pages should be `$\\{height}=\rm macro$, \S135.' -\bugonpage C203, line 12 from the bottom (04/25/03) +\bugonpage B522, line 3 of \S1306. (10/25/20) -\ninepoint\hbox to 237pt{point~3 at the right of the triangle -might digitize into a} +\tenpoint\noindent +to be in the range $a\le x\le b$. +System error messages should be suppressed when undumping. -\bugonpage C213, line 26 (02/21/08) +\bugonpage B533, lines 5--8 of \S1333. (10/15/20) -\ninepoint\beginsyntax -<path subexpression>\is<path expression not ending with direction specifier>\kern-5pt\null -\endsyntax +\tenpoint\noindent +loop. +(Actually there's one way to get error messages, via \\{prepare\_mag}; +but that can't cause infinite recursion.)\par +\noindent\quad +If \\{final\_cleanup} is bypassed, this program doesn't bother to +close the input files that may still be open. -\bugonpage C226, line 23 (02/21/08) +\bugonpage B533, line 12 of \S1333. (11/29/20) -\ninepoint\noindent following nineteen things will be mentioned: +\ninepoint\noindent\quad +{\bf begin} $\langle\,$Finish the extensions{\sevenrm\kern.5em1378}$\,\rangle$; +$\\{new\_line\_char}\gets-1$; -\bugonpage C226, new line to be second from the bottom (02/21/08) +\bugonpage B534, line 6 of \S1335. (11/29/20) -\ninepoint\indent|independent variables|\qquad(distinct numeric variables) +\ninepoint\noindent\quad +{\bf begin} $c\gets\\{cur\_chr}$; +{\bf if} $c\ne1$ {\bf then} $\\{new\_line\_char}\gets-1$; -\bugonpage C236, line 7 from the bottom (01/05/14) +\bugonpage B537, line 18 of \S1338 becomes two lines (10/05/20) -\ninepoint\noindent -\hbox to\parindent{\hss\bf 7.4.\enspace}False. -After `|newinternal x;|' you can't say `|x|\<tag>' in a \<suffix list>. +\ninepoint\noindent\quad +{\bf begin} \\{clear\_terminal};\par +\noindent\quad +{\bf loop} -\bugonpage C246, line 12 (02/21/08) +\bugonpage B537, lines 11 and 12 from the bottom of \S1338 + become three lines (04/02/17) -\ninepoint\noindent -is performed whenever \MF\ uses the last two alternatives -in the definition\cutpar +\ninepoint\noindent\qquad\qquad +{\bf begin goto} \\{breakpoint};\par +\noindent\qquad\qquad\quad$\{\,$go to every declared label at least once$\,\}$\par +\noindent\qquad\quad\\{breakpoint}: $m\gets0$; + \.{@\char`\{\char`\'BREAKPOINT\char`\'@\char`\}} -\bugonpage C250, lines 13 and 14 (02/19/08) +\bugonpage B600, the bottom five lines (05/14/19) -\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.) +\tenpoint\noindent +they occupy in a typical production system +(executable code size for dark blocks, global data size for light blocks). +In this way the chart indicates a total of about +$12\times22=264${\ninerm K} bytes of memory, plus +$12\times10=120${\ninerm K} for the +dynamic memory region not shown explicitly. The dynamic memory +is often considerably larger in practice, because it is desirable to +accommodate large macro packages and large pages. -\bugonpage C250, line 12 from the bottom (04/25/03) -\ninepoint\noindent -following \<boolean primary>.) +% volume C +\hsize=29pc +\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers +\def\dashto{\mathrel{\hbox{-\thinspace-\kern-.05em}}} +\def\ddashto{\mathrel{\hbox{-\thinspace-\thinspace-\kern-.05em}}} +\def\tension{\mathop{\rm tension}} +\def\controls{\mathop{\rm controls}} +\def\and{\,{\rm and}\,} -\bugonpage C286, line 25 (09/09/01) +\bugonpage Cx, line 4 from the bottom (06/14/20) -\ninepoint\noindent -problem; it would simply have put |ENDFOR| into the -replacement text of |asts|, because\cutpar +\count255=1 +\def\diamondleaders{\global\advance\count255 by 1 + \ifodd\count255 \kern-10pt \fi + \leaders\hbox to 20pt{\ifodd\count255 \kern13pt \else\kern3pt \fi + .\hss}} +\line{\strut + \hbox to\parindent{\bf\hbox to 1em{\hss20}\hss}% + \rm More About Macros\diamondleaders\hfil\hbox to 2em{\hss175}} -\bugonpage C289, line 7 (09/09/01) +\bugonpage C39, lines 10 and 11 become three lines (07/04/20) -\vskip-6pt\ninepoint\begintt -if if pair x: x>(0,0) else: false fi: A else: B fi. -\endtt +\tenpoint\noindent +that has already been designed. All you'll see is +`|(io.mf| |The| |letter| |O| |[79])|' or possibly only `|(io.mf| |[79])|', +followed by~`|*|'. Now the fun starts: You should type -\bugonpage C292, line 10 from the bottom (09/09/01) +\bugonpage C68, lines 9, 28, 35, 36, 38 (11/11/17) -\ninepoint\noindent -be known by saying `{\bf if\/} known $p-q$: $p=q$ {\bf else}:~{\bf false} -{\bf fi}'; transforms could be handled\cutpar +\ninepoint +\halign{\indent\hbox to 160pt{\tt#\hfil}&\tt#\hfil\cr +uniformdeviate -100&-36.1628\cr +z slanted 1/6&(0.16667y+x,y)\cr +(a,b)zscaled(3,4)&(-4b+3a,3b+4a)\cr +(a,b)zscaled dir 30&(-0.5b+0.86603a,0.86603b+0.5a)\cr +(a,b)dotprod(3,4)&4b+3a\cr +} + +\bugonpage C72, lines 4--18 (07/16/20) + +\ninepoint\noindent +\beginsyntax +<numeric atom>\is<numeric variable> + \alt<numeric token primary> + \alt[(]<numeric expression>[)] + \alt[normaldeviate] + \alt[length]<string primary> + \alt[length]<path primary> + \alt[length]<pair primary> + \alt[angle]<pair primary> + \alt[xpart]<pair primary> + \alt[ypart]<pair primary> + \alt<numeric operator><numeric primary> +<numeric token primary>\is<numeric token>[/]<numeric token> + \alt<numeric token not followed by % + `{\tt/}$\thinspace\langle$numeric token$\rangle$'\thinspace> +<numeric primary>\is<numeric atom not followed by {[\char'133]<expression>[,]}> + \alt<numeric atom>[\char'133]<numeric expression>% + [,]<numeric expression>[\char'135] +\endsyntax -\bugonpage C293, line 5 from the bottom (04/25/03) +\bugonpage C76, lines 8--16 from the bottom (11/11/17) -\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 +\newdimen\longesteq +\setbox0=\hbox{\indent$z_{12}-z_{11}=z_{14}-z_{13}$\quad} +\longesteq=\wd0 +\tenpoint\noindent \hangindent\longesteq \hangafter0 +tom edge of the type. +\ (With plain \MF's {\bf beginchar} each +character has a ``bounding box'' that runs from $(0,h)$ +at the upper left and $(w,h)$ at the upper right to $(0,-d)$ and~$(w,-d)$ +at the lower left and lower right; variable $d$ represents the depth of +the type. The values of $w$, $h$, and~$d$ might change from character to +character, since the individual pieces of type need not have the same size +in a computer-produced font.) -\bugonpage C315, line 15 from the bottom (04/25/03) +\bugonpage C80, line 14 (06/13/20) -\ninepoint\noindent -`b' was shipped out.) \ The second letter,~`o', is placed -in a second little box adjacent\cutpar +\tenpoint\indent +\\{penpos}\<suffix>(\<unknown>,\thinspace\<known>). -\bugonpage C325, bottom line (02/29/08) +\bugonpage C83, line 16 (06/13/20) -\rightline{\eightss--- CAROLUS LINN\AE US, - {\eightssi Philosophia Botanica\/}\enspace(1751)} +\ninepoint\indent +|### 0.5a=-c-0.5b+1.5| -\bugonpage C332, line 4 from the bottom (04/25/03) +\bugonpage C83, line 19 (06/13/20) \ninepoint\noindent -(The proofsheet resolution will be 50 pixels per inch, because {\it cheapo\/} -has 200 pixels per\cutpar - -\bugonpage C346, left column (06/18/02) - -\eightpoint\noindent -\llap{*}|:|, 169, 171, 317--319. - -\bugonpage C346, right column (07/09/01) +the only +dependent variable is now $d$, which equals $0.5c+0.75b+0.75$. \ (This is\cutpar -\eightpoint\noindent -\llap{*}|angle|, {\it29}, {\it67}, $\underline{72}$, {\it107}, -{\it135}, 211, {\it238}. +\bugonpage C96, line 13 from the bottom (10/31/20) -\bugonpage C346, right column (10/04/04) +\tenpoint\noindent +illustrates the +use of $u\0$, $s\0$, $\\{ht}\0$, \\{logo\_pen}, \\{leftstemloc}, $o$, +\\{xgap}, and \\{barheight}: -\eightpoint\noindent -arccosine, arcsine, arctangent, {\sl see\/} |angle|. +\bugonpage C106, lines 19--21 (07/03/20) -\bugonpage C351, right column (02/21/08) +\ninepoint\noindent +pixels. \ (Some typesetting +systems use both of these device-dependent amounts to alter their current +position on a page, just after typesetting each character. Other systems, +like typical |dvi| software associated with \TeX, assume that $\\{chardy}=0$ +but use \\{chardx}\cutpar -\eightpoint\noindent -independent variables, $\underline{81}$--$\underline{83}$, 88, 224, 226. +\bugonpage C113, lines 5--11 from the bottom (07/20/20) -\bugonpage C352, right column (02/29/08) +\def\cycle{\hbox{\rm cycle}} +\ninepoint\noindent +\begindisplay +$s\0:=5\\{pt}\0$; \ {\bf define\_pixels}$(s)$; \ \% side of the square\cr +$z_1=(0,0)$; \ $z_2=(s,0)$; \ $z_3=(0,s)$; \ $z_4=(s,s)$;\cr +{\bf for} $k=1$ {\bf upto} 4: + $z[k+4]=z[k]+({2\over3}s,{1\over3}s)$; \ {\bf endfor}\cr +{\bf pickup pencircle} scaled $.4\\{pt}$; \ +{\bf draw} $z_5\dashto z_6\dashto z_8\dashto z_7\dashto \cycle$;\cr +{\bf pickup pencircle} scaled $1.6\\{pt}$; \ +{\bf erase draw} $z_2\dashto z_4\dashto z_3$;\cr +{\bf pickup pencircle} scaled $.4\\{pt}$; \ +{\bf draw} $z_1\dashto z_2\dashto z_4\dashto z_3\dashto \cycle$;\cr +{\bf for} $k=1$ {\bf upto} 4: + {\bf draw} $z[k]\dashto z[k+4]$; \ {\bf endfor}.\cr +\enddisplay -\eightpoint\noindent -Linn\'e, Carl von (= Linn\ae us, Carolus), 325. +\bugonpage C114, line 7 (07/20/20) -\bugonpage C355, right column (02/29/08) +\ninepoint\indent +{\bf for} $k=0$ {\bf upto} 4: \ $z[k]=\\{center}+(\\{radius},0)$ + rotated$(90+{360\over5}k)$; \ {\bf endfor} -\eightpoint\noindent -\llap{*}|save|, $\underline{155}$--$\underline{156}$, {\it160}, 173, - {\it178}, 180, 218,\par -\noindent\qquad{\it236}, {\it244}, {\it296}, 299. +\bugonpage C128, lines 13 and 14 (06/13/20) -% Volume D -\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers -\def\to{\mathrel{.\,.}} % double dot, used only in math mode +\ninepoint\noindent +changed. Plain \MF\ has a {\bf tensepath} operation +that does this. For example, {\bf tensepath}~\\{unitsquare}~$=$ +$(0,0)\ddashto(1,0)\ddashto(1,1)\ddashto(0,1)\ddashto\cycle$. -\bugonpage Dv, page number change (12/27/11) +\bugonpage C136, lines 18 and 19 (07/17/20) -\eightpoint\noindent[For consistency with Volumes A, C, and E, the -preface now begins on page v instead of page~vii. This change was first -made in the sixth printing.] +\ninepoint\noindent +only +about 0.28 with respect to the initial and final directions; since \MF\ insists +that tensions be at least~0.75, this anomalous path could never have arisen +if the control\cutpar -\bugonpage Dv {(formerly Dvii)}, bottom two lines (01/06/14) +\bugonpage C155, line 7 (10/07/20) -\eightpoint\noindent -corporates all of those changes. -I~now believe that the final bug was discovered on 03~June 2008, -and removed in version 2.7182818. -The finder's fee has converged to \$327.68. +\tenpoint\indent +\<program>\is\<statement list>\<statement>\thinspace|end| -\bugonpage Dxiii {(formerly Dxv)}, line $-7$ (12/27/11) +\bugonpage C160, lines 7--9 (06/25/20) \ninepoint\noindent -Format specs have no effect on the corresponding Pascal program, but they -do influence\cutpar - -\hsize=35pc -\parindent=1em +might produce a transcript +that includes the following diagnostic information: +\begintt +rotatedaround(EXPR0)(EXPR1)-> + shifted-(EXPR0)rotated(EXPR1)shifted(EXPR0) +\endtt -\bugonpage D2, line $-17$ (01/03/14) +\bugonpage C165, lines 5--7 from the bottom (11/11/17) \ninepoint\noindent -{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$% -{\tt This\]is\]METAFONT,\]Version\]2.7182818\char'23}\quad -$\{\,$printed when \MF\ starts$\,\}$ - -\bugonpage D2, lines 4 and 5 from the bottom (12/23/02) +(i.e., parameters in parentheses), +then we name zero or one or two undelimited parameters. +Then comes an `$=$'~sign, +followed by the replacement text, and {\bf enddef}. The `$=$'~sign might also +be~`$:=$'\thinspace; both mean the same thing. -\tenpoint\noindent -types; there are no `{\bf var}' parameters, except in the case of files -or in the system-dependent \\{paint\_row} procedure; -there are no tag fields on variant records; there are no \\{real} variables; -no procedures are declared local to other procedures.) - -\bugonpage D16, new paragraph to follow line 26 (06/25/04) - -The first line is special also because it may be read before \MF\ has -input a base file. In such cases, normal error messages cannot yet -be given. The following code uses concepts that will be explained later. -(If the Pascal compiler does not support non-local {\bf goto}, the -statement `{\bf goto} \\{final\_end}' should be replaced by something that -quietly terminates the program.) - -\bugonpage D22, line 26 (09/11/07) - -\noindent -ASCII codes $[\Oct{60}\to\Oct{71},% -\Oct{136},\Oct{141}\to\Oct{146}]$ -must be printable. +\bugonpage C171, lines 18--20 (08/16/20) -\bugonpage D31, line 29 (06/25/04) +\ninepoint\indent +Chapter~14's syntax rules for +\<path primary>, via \<pair primary>. +A pair expression is not considered to be +of type {\bf path} unless the path interpretation is the only~possibility. -\noindent -This is the only nontrivial {\bf goto} statement in the -whole program. It is used when there is no\cutpar +\bugonpage C176, line 7 from the bottom (07/09/20) -\bugonpage D42, replacement for lines 8--13 (12/23/02) +\ninepoint\indent +\quad {\bf if} |@#|$(\\{x\_})\colon\ \\{tx\_} \ \hbox{\bf else}\colon\ + \\{fx\_}\ \hbox{\bf fi}$ + :=\ \\{x\_}\thinspace; {\bf endfor} -\tenpoint\noindent\quad -Notice that if 64-bit integer arithmetic were available, -we could simply compute $(2^{29}*p+\nobreak q)\allowbreak\, -\hbox{\bf div}\,(2*q)$. -But when we are restricted to Pascal's 32-bit arithmetic we -must either resort to multiple-precision maneuvering -or use a simple but slow iteration. The multiple-precision technique -would be about three times faster than the code adopted here, but it -would be comparatively long and tricky, involving about sixteen -additional multiplications and divisions. - -\bugonpage D43, line 20 (12/23/02) +\bugonpage C180, line 3 from the bottom (06/24/20) -\tenpoint\noindent -language or 64-bit substitute is advisable. +\ninepoint\indent +`$=$' or `$:=$' following {\bf let}. -\bugonpage D44, lines 24--26 (12/23/02) +\bugonpage C187, line11 from the bottom (07/12/20) -\tenpoint\noindent\quad -Once again it is a good idea to use 64-bit arithmetic if -possible; otherwise \\{take\_scaled} will use more than 2\% of the running time -when the Computer Modern fonts are being generated. +\ninepoint\indent\qquad +\alt|substring|\thinspace\<pair expression>\thinspace|of|\thinspace + \<string primary> -\bugonpage D58, line 16 from the bottom (06/25/04) +\bugonpage C189, line 14 (06/13/20) \ninepoint\noindent -\hskip5em{\bf if\/} $\\{j\_random}=0$ {\bf then} \\{new\_randoms} - {\bf else} \\{decr}(\\{j\_random}) +`|! |' and followed +by~`|.|', followed by lines of context as in \MF's normal error\cutpar -\bugonpage D63, line 21 (06/25/04) +\bugonpage C200, line 12 from the bottom (08/27/20) -Locations of \\{mem} between \\{mem\_min} and \\{mem\_top} may be dumped as -part -of preloaded base\cutpar +\ninepoint\indent +$y_1=y_2=\\{good.y}(.5[-d,h]+1.1\\{pt})$; + +\bugonpage C202, line 17 from the bottom (06/13/20) + +\ninepoint\noindent +command, +and it works only when the \\{penpos} angle is~0. If the \\{penpos} command +is\cutpar + +\bugonpage C210, bottom eight lines, and top ten lines of page C211 (07/16/20) + +\ninepoint\noindent +\beginsyntax +<numeric atom>\is<numeric variable>\alt<numeric argument> + \alt<numeric token primary> + \alt<internal quantity> + \alt[normaldeviate] + \alt[(]<numeric expression>[)] + \alt[begingroup]<statement list><numeric expression>[endgroup] + \alt[length]<numeric primary>\alt[length]<pair primary> + \alt[length]<path primary>\alt[length]<string primary> + \alt[ASCII]<string primary>\alt[oct]<string primary>\alt[hex]<string primary> + \alt<pair part><pair primary>\alt<transform part><transform primary> + \alt[angle]<pair primary> + \alt[turningnumber]<path primary>\alt[totalweight]<picture primary> + \alt<numeric operator><numeric primary> + \alt[directiontime]<pair expression>[of]<path primary> +<numeric token primary>\is<numeric token>[/]<numeric token> + \alt<numeric token not followed by % + `{\tt/}$\thinspace\langle$numeric token$\rangle$'\thinspace> +<numeric primary>\is<numeric atom not followed by {[\char'133]<expression>[,]}> + \alt<numeric atom>[\char'133]<numeric expression>% + [,]<numeric expression>[\char'135] +\endsyntax -\bugonpage D75, line 13 (06/25/04) +\bugonpage C214, line 6 becomes two lines (07/17/20) \ninepoint\noindent -\quad{\bf define} $\\{fi\_or\_else}=2$\quad$\{\,$delimiters for conditionals - {\bf elseif\/}, {\bf else}, {\bf fi})$\,\}$ +\beginsyntax +<future pen primary>\is<future pen argument> + \alt[pencircle] +\endsyntax -\bugonpage D76, line 5 (06/25/04) +\bugonpage C214, line 6 from the bottom (07/12/20) \ninepoint\noindent -\quad{\bf define} $\\{type\_name}=30$\quad$\{\,$declare a type - ({\bf numeric}, {\bf pair}, etc.)$\,\}$ +\beginsyntax + \alt[substring]<pair expression>[of]<string primary> +\endsyntax -\bugonpage D77, line 16 (06/25/04) +\bugonpage C217, lines 20--25 (10/07/20) \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) +\beginsyntax +<program>\is<statement list><non-title statement>[end] + \alt<statement list><non-title statement>[dump] +<statement list>\is<empty>\alt<statement>[;]<statement list> +<statement>\is<empty>\alt<title> + \alt<equation>\alt<assignment>\alt<declaration> + \alt<definition>\alt<compound>\alt<command> +\endsyntax -\noindent -\MF\ user assigns a type to a variable like \.{x20a.b} by saying, for -example, `\.{boolean} \.{x[]a.b}'. +\bugonpage C219, line 25 (05/25/20) -\bugonpage D102, lines 10--16 (06/25/04) +\ninepoint\noindent +to see which of its subscripts and suffixes have occurred. +For example, if you're\cutpar -\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) +\bugonpage C224, lines 7--9 from the bottom (12/21/18) -\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 +\tenpoint\indent +|y4r=-0.9848thinn+259.00049|\par +|x4r=-0.08682thinn+144|\par +|y4=-0.4924thinn+259.00049| -\bugonpage D103, line 6 (06/25/04) +\bugonpage C226, lines 9 and 10 (11/01/20) -\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$. +\ninepoint\noindent +This means that the preloaded base you have specified cannot be used, +because it is corrupted or was prepared for a different version of +\MF\kern-.03em. -\bugonpage D114, line 12 (06/25/04) +\bugonpage C228, line 27 (06/19/20) -\noindent -\qquad Such save stack entries are generated by \&{save} commands. +\ninepoint\indent +|l.94 endfor| -\bugonpage D120, line 3 (06/25/04) +\bugonpage C228, line 4 from the bottom (07/12/20) \ninepoint\noindent -[delete the line `The code here \dots', since the - code {\it doesn't\/} use the stated fact] +might want to review now.) \ +You probably also have a |proof| mode diagram: -\bugonpage D126, line 10 (06/25/04) +\bugonpage C234, line 4 of answer 4.6 (07/20/20) -\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 +\ninepoint\indent +{\bf for} $k=1$ {\bf upto} 6: $z[k]'=.2[z[k],z_0]$; {\bf endfor} -\bugonpage D138, line 11 from the bottom (10/26/06) +\bugonpage C241, line 2 (11/11/17) -\tenpoint\noindent -for the bisected interval are $z'_0=z_0$ -and $z''_0=z_0+(Z'_1+Z'_2+\cdots+Z'_n)/2^{l+1}$. +\ninepoint\indent +|\mode=cheapo; input cheaplogo10| -\bugonpage D142, line 3 (06/25/04) +\bugonpage C242, line 11 of answer 13.7 (07/20/20) -\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 +\ninepoint\indent +{\bf for} $k=1$ {\bf upto} 4: + $z[k+4]=z[k]+({2\over3}s,{1\over3}s)$; \ {\bf endfor} -\bugonpage D142, line 8 (10/26/06) +\bugonpage C243, lines 7 and 8 (11/08/15) -\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 +\ninepoint\indent +\indent {\bf draw} subpath$(k,k+1)$ of \\{star}; {\bf cullit};\par\indent +\indent {\bf undraw} subpath$(k+2,k+3)$ of \\{star} {\bf withpen} + \\{eraser}; {\bf cullit}; -\bugonpage D142, lines 21--23 (06/25/04) +\bugonpage C243, line 3 of answer 13.11 (06/17/20) -\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)$.) +\ninepoint\indent +{\bf def overdraw expr} $c$ = {\bf begingroup save} \\{region}; -\bugonpage D177, line 18 (06/25/04) +\bugonpage C243, lines 12--16 of answer 13.11 (05/24/20) \ninepoint\noindent -$\\{cur\_x},\\{cur\_y}$: \\{scaled};\quad$\{\,$outputs of \\{skew}, - \\{unskew}, and a few other routines$\,\}$ +\begindisplay +{\bf beginchar}$(\hbox{\tt"M"},1.25\\{in}\0,.5\\{in}\0,0)$; \ + {\bf pickup pencircle} scaled .4\\{pt};\cr +$z_1=(20,-13)$; \ $z_2=(30,-6)$; \ $z_3=(20,1)$; \ $z_4=(4,-7)$;\cr +\indent $z_5=(-12,-13)$; \ $z_6=(-24,-4)$; \ $z_7=(-15,6)$;\cr +{\bf path} $M$; $M=(\\{origin}\dts + z_1\dts z_2\dts z_3\dts z_4\dts z_5\dts z_6\dts z_7\dts$\cr +\indent$\\{origin}\dts -z_7\dts -z_6\dts -z_5\dts -z_4\dts + -z_3\dts -z_2\dts -z_1\dts\cycle)$\cr +\enddisplay -\bugonpage D182, lines 27--29 (06/25/04) +\bugonpage C246, line 2 of answer 14.13 (08/16/20) -\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$. +\ninepoint\noindent +path $z_0\dashto z_1$ is equivalent to `$z_0\dts +\controls1/3[z_0,z_1]\and2/3[z_0,z_1]\dts z_1$', and the\cutpar -\bugonpage D184, line 18 (12/21/02) +\bugonpage C247, line 1 of answer 15.5 (06/13/20) \ninepoint\noindent -\qquad\\{chopped}: \\{integer};\quad -$\{\,$positive if data truncated, negative if data dangerously large$\,\}$ +\quad{\bf 15.5.}\enspace +{\bf beginchar}$(126,25u\0,\\{h\_height}\0+\\{border}\0,0)$; \ +|"Dangerous left bend"|; -\bugonpage D184, line 25 (12/21/02) +\bugonpage C247, replacement for answer 15.7 (07/21/20) \ninepoint\noindent -\quad{\bf if\/} $(\\{internal}[\\{autorounding}]>0)\land(\\{chopped}=0)$ - {\bf then} \\{xy\_round}; +\quad{\bf 15.7.}\enspace +Replace lines 10 and 11 by +\begindisplay +{\bf pickup pencircle} scaled 3/4\\{pt} yscaled 1/3 rotated $-60$;\cr +{\bf draw} ($z_1\ldots p$) transformed $t$;\cr +{\bf addto} \\{currentpicture} {\bf also} \\{currentpicture}\cr +\qquad rotatedaround$\bigl((.5w,.5h)$ yscaled \\{aspect\_ratio}$,-180\bigr)$;\cr +\enddisplay -\bugonpage D184, line 27 (12/21/02) +\bugonpage C249, line 1 of answer 18.9 (08/02/20) \ninepoint\noindent -\quad{\bf if\/} $(\\{internal}[\\{autorounding}]>\\{unity})\land - (\\{chopped}=0)$ {\bf then} \\{diag\_round}; +\quad{\bf 18.9.}\enspace +{\bf beginchar}\kern1pt(|"H"|$,13u\0,"ht"\0,0)$; \ + {\bf pickup} \\{broad\_pen}; -\bugonpage D184, line 32 (12/21/02) +\bugonpage C249, line 11 of answer 18.9 (08/02/20) -\ninepoint\noindent -\qquad{\bf if\/} $(\\{internal}[\\{autorounding}]\le0)\lor(\\{chopped}\ne0)$ - {\bf then} \\{print\_spec}({\tt\char`",\]after\]subdivision\char`"}) +\ninepoint\indent +{\bf filldraw} $\\{bot\_serif\_edge}_4$ -\bugonpage D185, lines 15--19 (12/21/02) +\bugonpage C250, line 4 of answer 19.1 (04/19/20) \ninepoint\noindent -\quad{\bf define} \\{procrustes}({\tt\char`#})${}\equiv{}${\bf if\/} - $\\{abs}(\.\#)\ge\\{dmax}$ {\bf then}\par\noindent -\qquad\qquad\quad{\bf if\/} $\\{abs}(\.\#)>\\{max\_allowed}$ {\bf then}\par -\noindent\qquad\qquad\qquad{\bf begin} $\\{chopped}\gets1$;\par\noindent -\qquad\qquad\qquad{\bf if\/} $\.\#>0$ {\bf then} $\.\#\gets\\{max\_allowed}$ - {\bf else} $\.\#\gets-\\{max\_allowed}$;\par\noindent -\qquad\qquad\qquad{\bf end}\par\noindent -\qquad\qquad\quad{\bf else if\/} $\\{chopped}=0$ {\bf then} - $\\{chopped}\gets-1$ +because it saves a wee bit of time and because +`;'\ often belongs before {\bf endfor}. -\bugonpage D185, old line 22 (12/21/02) +\bugonpage C250, replacement for answer 19.3 (07/12/20) \ninepoint\noindent -\quad$p\gets\\{cur\_spec}$; $k\gets1$; $\\{chopped}\gets0$; - $\\{dmax}\gets\\{half}(\\{max\_allowed})$; +\quad{\bf 19.3.}\enspace +Yes, if and only if $n-{1\over2}$ is an even integer. +\ (Because ambiguous values are rounded upwards.) -\bugonpage D185, old line 28 (12/21/02) +\bugonpage C251, replacement for answer 22.1 (07/12/20) \ninepoint\noindent -\quad{\bf if\/} $\\{chopped}>0$ {\bf then} - -\bugonpage D196, lines 3--8 (06/25/04) +\quad{\bf 22.1}\enspace +(a) If and only if $n$ is an integer between 0 and 255. +(b) If and only if $s$ is a string of length~1. -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 C254, lines 10--13 from the bottom become five lines (06/26/20) -\bugonpage D196, lines 15 and 16 (06/25/04) +\ninepoint\noindent +\begintt +? H +I found no right delimiter to match a left one. So I've +put one in, behind the scenes; this may fix the problem. +|null +? +\endtt -\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 C260, the ``line'' after line 3 (06/14/20) -\bugonpage D200, line 4 (06/25/04) +\def\bb{$\,\left\{\vcenter\bgroup\halign\bgroup\hfil##\hfil\cr} +\def\ee{\crcr\egroup\egroup\right\}\,$} +\tenpoint\noindent +\bb|font_size|\cr|font_slant|\cr|font_normal_space|\cr + |font_normal_stretch|\cr|font_normal_shrink|\cr|font_x_height|\cr + |font_quad|\cr|font_extra_space|\ee +\bb|=|\cr\noalign{\kern-2pt}|:=|\cr\noalign{\kern-2pt}\<empty>\ee +\<numeric$\0$>; \ +\bb|ligtable|\<ligs/kerns>\cr|charlist|\<codes>\cr|extensible|\<codes>\cr + |fontdimen|\<info>\cr|headerbyte|\<info>\ee;\kern-10pt -\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 C261, lines 16 and 17 from the bottom (06/14/20) -\bugonpage D212, line 18 (06/25/04) +\tenpoint\noindent +\bb|proofrule|\cr|screenrule|\ee|(|\<pair>|,|\<pair>|)|; \ +|makegrid(|\<numerics>|)(|\<numerics>|)|;\smallskip\noindent +|proofrulethickness| \<numeric$\0$>; \ |proofoffset| \<pair>. -\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 C266, lines 19 and 20 (07/04/20) -\bugonpage D216, bottom line (06/25/04) +\ninepoint\noindent +You can say either `|incr|~|x|' or `|incr|~|(x)|', within +an expression; but neither of them are valid statements by themselves. -\noindent -we list it twice (with coordinates -interchanged, so as to make the second octant look like\cutpar +\bugonpage C269, line 11 (01/10/21) -\bugonpage D217, lines 2--10 (06/25/04) +\ninepoint\indent +|\smode="specmode"; mag=|\<magnification>|; input |\<font file name> -\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) +\bugonpage C277, lines 15--19 (03/06/17) +\ninepoint\noindent +|def openit = openwindow currentwindow from origen % and please correct|\par \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) - +| to (screen_rows,screen_cols) at (-50,300) enddef; % "(-50,300)" too|\par \noindent -\\{endpoint}. The cubics all have -monotone-nondecreasing $x(t)$ and $y(t)$. - -\bugonpage D228, lines 4--7 from the bottom (06/25/04) - +|def showit_ = display currentpicture inwindow currentwindow enddef;|\par \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 +|def showit = openit; let showit=showit_; showit enddef; % first time only|\par +\kern3pt\hrule\medskip\noindent +Plain \MF\ has several other terse commands +similar to `{\bf openit}' and `{\bf showit}': -\bugonpage D231, line 7 (06/25/04) +\bugonpage C279, line 1 (11/11/17) \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 $(*)$. +| blacker:=.1; % make pens a teeny bit blacker| -\bugonpage D246, line 4 from the bottom (06/25/04) +\bugonpage C289, line 20 (10/07/20) -\noindent -dinate fields. Hence, for example, -the point $\bigl($$\\{x\_coord}(p)-\\{left\_v}(q),\\{y\_coord}(p)+% -\\{right\_u}(p)$$\bigr)$ -also\cutpar +\ninepoint\indent +|if {{(pair x) cand x>(0,0)}}: A else: B fi.| -\bugonpage D248, lines 14 and 15 (01/06/14) +\bugonpage C291, line 18 (07/24/20) -\noindent -the $x$-axis at the point -$\bigl((a^2-b^2)\sin\theta\cos\theta/\rho\bigr)+i\rho$, where -\vadjust{\vskip1pt}% -$\rho=\sqrt{(a\sin\theta)^2+(b\cos\theta)^2}$. It reaches -furthest to the right of~the $y$-axis at the point -$\sigma+i(a^2-b^2)\sin\theta\cos\theta/\sigma$, where -$\sigma=$\cutpar +\ninepoint\indent +| save u_; setu_ u; let switch_ = if; if false: enddef.| -\bugonpage D248, line 24 (06/25/04) +\bugonpage C292, line 10 from the bottom (10/23/20) \ninepoint\noindent -\qquad{\bf else begin} $\\{beta}\gets\\{minor\_axis}$; - $\\{gamma}\gets\\{major\_axis}$; - $\\{theta}\gets0$; - -\bugonpage D251, line 1 (01/06/14) - -\noindent -{\bf536.\quad}Only the coordinates need to be copied, not the class numbers -and other stuff. At this point either $\\{link}(p)$ or -$\\{link}(\\{link}(p))$ is \\{null}. +be known by saying `{\bf if} known $(p-q)$: $p=q$ {\bf else}:~{\bf false fi}'; +transforms could be handled\cutpar -\bugonpage D251, line 10 (01/06/14) +\bugonpage C293, lines 13 and 14 from the bottom (10/27/20) \ninepoint\noindent -\\{done1}: {\bf if\/} $(\\{link}(p)\ne\\{null})$ {\bf then} -$\\{free\_node}(\\{link}(p),\\{knot\_node\_size})$;\hfil\break -\null\quad$\\{link}(p)\gets s$; -$\\{beta}\gets-\\{y\_coord}(h)$; - -\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 +$f(-1)$ is false! When $c\rightarrow0$, the quantity $a^3+b^3$ +approaches $-\infty$ when $c$~is positive, $+\infty$ when $c$~is +negative. An attempt to `\\{solve} $f(1,-1)$' will divide by zero and +come\cutpar -\bugonpage D261, line 5 (06/25/04) +\bugonpage C295, line 2 (07/04/20) \ninepoint\noindent -\\{tol}: \\{integer};\quad$\{\,$bound on the uncertainty in the overlap test$\,\}$ +`interpolate $(1,1)\dts(3,2)\dts(15,4)$ of~7' the approximate value 3.37. -\bugonpage D262, lines 26 and 27 (06/25/04) +\bugonpage C299, bottom four lines of code become five (08/06/20) \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}$\,\}$ +\begintt +primarydef t Bernshtein nn = begingroup save r; r = + begingroup for n=nn downto 2: + for k=1 upto n-1: u_[[[k]]]:=t[[[u_[[[k]]],u_[[[k+1]]] ]]]; + endfor endfor u_[[[1]]] endgroup; numeric u_[[[]]]; + r endgroup enddef; +\endtt -\bugonpage D262, line 11 from the bottom (06/25/04) +\bugonpage C299, line 5 after the code becomes two lines (08/06/20) \ninepoint\noindent -\qquad$\\{xy}\gets\\{xy}+\\{int\_packets}$;\quad$\{\,$switch - from \\{l\_packets} to \\{r\_packets}$\,\}$ +brackets are nested inside of brackets. +However, the auxiliary variables `|u_[[[|$k$|]]]|' must not remain +independent at the end. -\bugonpage D274, line 15 from the bottom (06/25/04) +\bugonpage C305, lines 14--18 (07/08/20) \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) - +|width_adj#:=0pt#; % width adjustment for certain characters|\par \noindent -\\{macro\_def} or \\{iteration}). - -\bugonpage D330, line 1 (06/25/04) - +|serif_fit#:=0pt#; % extra sidebar near lowercase serifs| +\vskip-3pt\noindent\qquad\vdots\par\noindent +|low_asterisk:=false; % should the asterisk be centered at the axis?|\par \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. +|math_fitting:=false; % should math-mode spacing be used?| -\bugonpage D354, lines 11 and 12 from the bottom (06/25/04) +\bugonpage C317, line 21 becomes two lines (11/11/17) -\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. +\ninepoint\noindent +\beginsyntax +<label>\is<code label>\alt<code>[::]\alt[\\\\:] +<code label>\is\<code>[:] +\endsyntax -\bugonpage D355, lines 1 and 2 (06/25/04) +\bugonpage C318, lines 10--16 from the bottom (11/11/17) -\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. +\ninepoint\noindent +\beginsyntax + \alt<code label><labeled code> +<extensible command>\is[extensible]<code label><four codes> +<four codes>\is<code>[,]<code>[,]<code>[,]<code> +\endsyntax +Notice that a \<code label> can appear in a {\bf ligtable}, {\bf charlist}, or +{\bf extensible} command. + These appearances are mutually exclusive: No code may be +used more than once as a label. Thus, for example, a character with a +ligature/kerning program cannot also be {\bf extensible}, nor can it be +in a {\bf charlist} (except as the final item). -\bugonpage D355, lines 5 and 6 (06/25/04) +\bugonpage C333, line 29 (10/25/19) -\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. +\ninepoint\noindent +| "if charcode>0:currentpicture:=currentpicture scaled mg;fi;"| -\bugonpage D355, lines 21 and 22 (06/25/04) +\bugonpage C333, bottom two lines become one (11/11/17) -\noindent -$\\{cur\_type}=\\{token\_list}$ means that \\{cur\_exp} points to a linked list -of tokens. +\ninepoint\noindent +| if unknown scale: scale := max(1,round(pixels_per_inch/300)); fi| -\bugonpage D356, lines 2--3 (06/25/04) +\bugonpage C339, line 3 (05/21/20) -\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. +\ninepoint\noindent +ing `\char'31', `\char'32', +`\char'33', and~`\char'34') and the uppercase letters (including +`\char'35', `\char'36', and~`\char'37') are\cutpar -\bugonpage D368, line 13 (06/25/04) +\bugonpage C341, line 14 from the bottom (11/11/17) \ninepoint\noindent -\qquad\\{my\_var\_flag}: $0\to\\{max\_command\_code}$;\quad$\{\,$initial - value of \\{var\_flag}$\,\}$ +prints the |\table| and the |\text|; ^|\bigtest| gives +you the works, plus a mysterious word\cutpar -\bugonpage D378, line 9 from the bottom (06/25/04) +\bugonpage C345 and following, selected amendments to the index (01/20/21) -\ninepoint\noindent -\qquad\quad{\bf begin} $\\{cur\_type}\gets\\{known}$; - $\\{cur\_exp}\gets0$; - $\\{free\_node}(q,\\{dep\_node\_size})$; +\eightpoint +*|,| (comma), 57, 72, 73, 129, 155, 165--167, 171, 211--213, 218, 317, 318.\par +`A', 10--11, 163, 164, 248, 302--303.\par +\<addto command>, 118, $\underline{220}$.\par +bell-shaped distribution, $\underline{183}$, 251.\par +|black|, 270, 332--333.\par +\<code> and \<code label>, $\underline{317}$.\par +concatenation, of paths, {\it70}--{\it71}, {\it123}, 127--129, $\underline{130}$, 137, {\it245}, {\it266}.\par +\quad of strings, {\it69}, 73, 84--85, $\underline{187}$, {\it278}, {\it286}, {\it312}.\par +*|directiontime|, {\it135}, $\underline{\it136}$, 211, 245, 265, {\it298}.\par +distance, 76, 84, {\sl see also\/} |length|.\par +|dotprod|, {\it68}--{\it69}, 178, {\it238}, 265.\par +efficiency, 39, 99, 116, 141, 144, 147, 228, 230, 234, 244, 264, 265, 277, 291, 297, 298.\par +empty option in {\bf for\/} list, 171, $\underline{172}$, {\it299}.\par +forbidden tokens, 173, $\underline{218}$--$\underline{219}$, 286.\par +*|from|, $\underline{191}$, 220, {\it252}, {\it277}, {\it312}.\par +Giotto di Bondone, 139.\par +independent variables, $\underline{81}$--$\underline{83}$, 88, 224, 226, 299.\par +|\init|, $\underline{337}$, 342.\par +internal quantities, 54--55, 88, 218, 262, 265--266.\par +*|inwindow|, $\underline{191}$, 220, {\it277}.\par +\<keep or drop>, $\underline{118}$, 220.\par +|labels|, {\it107}, $\underline{274}$, 327--328.\par +*|length|, {\it66}, {\it69}, 72, 210, 238.\par +*|ligtable|, {\it97}, {\it305}--{\it306}, $\underline{316}$--$\underline{317}$.\par +loops, 169, 171--173, 179, 226--227, 259, 290--291, 299.\par +`N', 184--185, 302--303.\par +\<numeric token primary>, 72, $\underline{211}$.\par +|o|, {\it23}, {\it34}, $\underline{93}$, 197, 200, 204, 240, 302.\par +`O', 32--37, 161, 199, 302--303.\par +overshoot, 23, 34, 93, 197, 200, 204, 302.\par +|penpos|, {\it26}--{\it29}, 37, 80, {\it103}, {\it162}, $\underline{273}$, 310.\par +pens, 21--29, 147--152, 297--298.\par +*|rotated|, {\it21}--{\it22}, {\it25}, 27, 44, {\it68}, 73, {\it107}, {\it114}, {\it117}, $\underline{141}$, 213, {\it238}.\par +|rule|, 274, 328.\par +*|scaled|, {\it21}--{\it23}, {\it68}, 73, $\underline{141}$, 213, 244, 291.\par +*|showstopping|, 211, 219, {\it227}, 230, {\it262}.\par +string expressions, {\it69}, 187--189, 258, 286.\par +\<suffix list>, $\underline{171}$, 236.\par +sum, of vectors, 9, {\it68}.\par +|test.mf|, 311--313.\par +\TeX, 1, 34, 40, 91, 96, 98, 101--103, 315, 336--343, 361.\par +text arguments, 219, 288--291, 299.\par +|.tfm|, 39, 315--321, 333, 335.\par +*|to|, $\underline{191}$, 220, {\it252}, {\it277}, {\it312}.\par +undelimited suffix parameters, $\underline{167}$, 176, 266, 270.\par +|undraw|, 113, 118, 120, {\it242}, $\underline{271}$.\par +|unitsquare|, {\it116}, 123--124, 128, 132, 136, $\underline{263}$.\par +*|unknown|, $\underline{170}$, 210.\par +unknown quantities, nonnumeric, 84--85, 143.\par +values, disappearance of, 56, 83, 88, 156--157, 177--178, 218, 239, 299.\par +\<vardef heading>, 165, $\underline{178}$.\par +*|xscaled|, {\it21}--{\it22}, {\it68}, 73, $\underline{141}$, 213, 244, 291.\par -\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) +% Volume D +\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers +\def\to{\mathrel{.\,.}} % double dot, used only in math mode -\noindent -by a previous operation. We must maintain -the value of $\\{right\_type}(q)$ in cases such as\break -`|..\\{curl2\}z\{0,0\}..|'. +\bugonpage Dv, line 16 (01/16/21) -\bugonpage D437, line 1 (06/25/04) +\tenpoint\noindent +\kern12.5mm I believe that the final bug in \MF\ was discovered on January\cutpar -\noindent -{\bf996.\quad}And \\{do\_assignment} is similar to \\{do\_equation}: +\bugonpage Dv, bottom two lines (01/16/21) -\bugonpage D439, line 10 becomes two lines (06/25/04) +\eightpoint\noindent +corporates all of those changes. +I~now believe that the final bug was discovered on 03 July 2020 +and removed in version 2.71828182. % on 16 January 2021 +The finder's fee has converged to \$327.68. -\ninepoint\noindent -\qquad{\bf begin} $\\{nonlinear\_eq}(v,\\{cur\_exp},\\{false})$; - $\\{cur\_type}\gets t$; - {\bf goto} \\{done}; +\hsize=35pc -\bugonpage D443, line 11 (06/25/04) +\bugonpage D2, last line of \S2 (01/15/21) \ninepoint\noindent -\\{done}: {\bf if\/} $\\{eq\_type}(x)\mathbin{\hbox{\bf mod}}\\{outer\_tag} - \ne\\{tag\_token}$ {\bf then} - $\\{clear\_symbol}(x,\\{false})$; +$$\hbox{{\bf define} $\\{banner}\equiv\.{\char`\'This\]is\]METAFONT,\]Version\]2.71828182\char`\'}$\quad +$\{\,$printed when \MF\ starts$\,\}$}$$ -\bugonpage D452, line 9 (06/25/04) +\bugonpage D14, line 1 of \S30 (05/05/14) -\noindent -though they don't necessarily correspond to primitive tokens. +\tenpoint\noindent +{\bf 20.} \quad The \\{input\_ln} function brings the next line of input from the specified +file into available\cutpar -\bugonpage D476, line 12 from the bottom (06/25/04) +\bugonpage D21, line 8 of \S47 (10/11/20) -\ninepoint\noindent -\quad{\bf if\/} $\\{nl}-\\{skip\_table}[c]>128$ {\bf then} +\ninepoint\noindent\quad +$g$: \\{str\_number};\quad$\{\,$the string just created$\,\}$ -\bugonpage D483, line 7 (06/25/04) +\bugonpage D27, lines 3 and 4 of \S61 (04/02/17) -\ninepoint\noindent -\quad$\\{max\_tfm\_dimen}\gets16\ast\\{internal}[\\{design\_size}]-1 - -\\{internal}[\\{design\_size}]\mathbin{\hbox{\bf div}}\Oct{10000000}$; +\tenpoint\noindent +is not serious since we assume that this +part of the program is system dependent. -\bugonpage D483, lines 15--17 (06/25/04) +\bugonpage D28, line 7 (04/02/17) -\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}])$; +\ninepoint\noindent\quad +{\bf var} $k$: $0\dts23$;\quad$\{\,$index to current digit; we assume + that $\vert n\vert<10^{23}\,\}$ -\bugonpage D496, line 2 (06/25/04) +\bugonpage D32, line 2 of \S78 becomes two lines (06/27/20) -\noindent -a pointer to -an edge structure. Its mission is to describe the positive pixels -in \.{GF} form,\cutpar +\ninepoint\noindent\quad +{\bf loop begin} \\{continue}: {\bf if} $\\{interaction}\ne\\{error\_stop\_mode}$ + {\bf then return};\par +\noindent\qquad +\\{clear\_for\_error\_prompt}; \ \\{prompt\_input}(\.{"?\]"}); -\bugonpage D500, line 16 (06/25/04) +\bugonpage D32, line 11 of \S79 (07/03/20) -\ninepoint\noindent -\quad$\\{selector}\gets\\{old\_setting}$; - $\\{gf\_out}(\\{cur\_length})$; - $\\{gf\_string}(0,\\{make\_string})$; - $\\{decr}(\\{str\_ptr})$; +\ninepoint\noindent\quad +\.{"E"}: {\bf if} $\\{file\_ptr}>0$ {\bf then if} + $\\{input\_stack}[\\{file\_ptr}].\\{name\_field}\ge256$ {\bf then} -\bugonpage D506, lines 8--10 (06/25/04) +\bugonpage D33, line 5 of \S80 (07/03/20) -\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. +\ninepoint\noindent\quad +{\bf if} $\\{file\_ptr}>0$ {\bf then}\par +\noindent\qquad +{\bf if} $\\{input\_stack}[\\{file\_ptr}].\\{name\_field}\ge256$ {\bf then} +\\{print}(\.{"E\]to\]edit\]your\]file."} -\bugonpage D514, line 14 from the bottom (06/25/04) +\bugonpage D37, line 9 of \S93 (08/07/20) -\noindent -\.{CMMF}, should also be provided for commonly used bases such as \.{cmbase}. +\ninepoint\noindent\qquad +(\.{"Try\]to\]insert\]an\]instruction\]for\]me\](e.g.,\]% + \char`\`I\]show\]x;\char`\'),"}) -% volume E -\hsize=29pc +\bugonpage D82, line 2 from the bottom (09/19/19) -\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\quad +{\bf define} $\\{boundary\_char}=41$\quad$\{\,$the boundary character for ligatures$\,\}$ -\bugonpage E1, line 3 (01/06/06) +\bugonpage D85, lines 3 and 4 of \S194 {(and \S194 actually moves to page D86)} (12/11/20) \tenpoint\noindent -Zillions of alphabets can be generated by the programs in this book. -All\cutpar +information, something special +is needed. The program here simply assumes that suitable values appear in +the global variables \\{sys\_time}, \\{sys\_day}, \\{sys\_month}, and +\\{sys\_year} (which are initialized to noon on 4 July 1776, +in case the implementor is careless). + +\bugonpage D85, the final six lines of \S194 {(and \S194 actually moves to page D86)} (12/11/20) + +\ninepoint\noindent +{\bf procedure} \\{fix\_date\_and\_time};\par +\noindent\quad{\bf begin} +$\\{sys\_time}\gets12\ast60$; \ +$\\{sys\_day}\gets4$; \ +$\\{sys\_month}\gets7$; \ +$\\{sys\_year}\gets1776$;\quad +$\{\,$self-evident truths$\,\}$\par +\noindent\quad$\\{internal}[\\{time}]\gets\\{sys\_time}\ast\\{unity}$;\quad + $\{\,$minutes since midnight$\,\}$\par +\noindent\quad$\\{internal}[\\{day}]\gets\\{sys\_day}\ast\\{unity}$;\quad$\{\,$day of the month$\,\}$\par +\noindent\quad$\\{internal}[\\{month}]\gets\\{sys\_month}\ast\\{unity}$;\quad$\{\,$month of the year$\,\}$\par +\noindent\quad$\\{internal}[\\{year}]\gets\\{sys\_year}\ast\\{unity}$;\quad$\{\,$Anno Domini$\,\}$\par +\noindent\quad{\bf end}; + +\bugonpage D86, replacement for \S196 (12/11/20) -\bugonpage E6, lines 16--19 (12/29/04) +\tenpoint\noindent +{\bf 196.}\quad Of course we had better declare a few more global variables, +if the previous routines are going to work. +\smallskip +\ninepoint\noindent +$\langle\,$Global variables {\sevenrm\kern.5em13}$\,\rangle+\equiv$\par +\noindent\\{old\_setting}: $0\dts\\{max\_selector}$;\par +\noindent\\{sys\_time}, \\{sys\_day}, \\{sys\_month}, \\{sys\_year}: \\{integer}; +\quad$\{\,$date and time supplied by external system$\,\}$ -\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 D97, line 2 of \S221 (05/26/17) -\bugonpage E7, line 11 (12/21/02) +\tenpoint\noindent +the definition of attribute nodes) that +it is convenient to let $\\{info}(p)=0$ stand for `\.{[]}'. -\ninepoint\indent -\\{hair}, \\{vair}, \\{stem}, \\{curve}, \\{ess}, \\{flare}, \\{dot\_size}, - \\{bar}, \\{slab}, +\goodbreak +\bugonpage D148, line 7 (06/12/18) -\bugonpage E7, line 14 (12/21/02) +\tenpoint\noindent +but the $\log n$ factor is buried in our +implicit restriction on the maximum raster size.) The\cutpar -\ninepoint\indent -\\{crisp}, \\{tiny}, \\{fine}; -\medskip\noindent -and \\{thin\_join} should not be less than \\{fine}. +\bugonpage D237, line 5 of \S513 (05/26/17) -\bugonpage E19, line 19 (11/07/01) +\ninepoint\noindent\quad +{\bf for} $n\gets0$ {\bf to} $\\{n1}-\\{n0}-1$ {\bf do} $\\{env\_move}[n]\gets\\{mm0}$; -\tenpoint -\line{\\{cap\_notch\_cut}\hskip 0pt plus1.5fil46/36\hfil31/36\hfil25/36\hfil -24/36\hfil22/36\hskip0pt plus3fil25/36} +\bugonpage D250, line 2 of \S534 (05/26/17) -\bugonpage E41, line 8 (12/21/02) +\tenpoint\noindent +direction $\bigl(\\{right\_u}(p),\\{left\_v}(q)\bigr)$; +and there's a line of length $\ge\\{delta}$ from vertex~$q$ to vertex~$r$,\cutpar -\ninepoint\noindent\mathchardef\AM="2026 % ampersand -\quad$\\{extra\_endchar}\gets\\{extra\_endchar}\AM - \.{\char`"charcode:=charcode+code\_offset;"}$; +\bugonpage D296, line 11 (06/23/20) -\bugonpage E53, line 7 (12/21/02) +\tenpoint\noindent +\\{name} points to the \\{eqtb} address of the macro +being expanded, if the current token list\cutpar -\def\frac#1/#2{\leavevmode\kern.1em - \raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em - /\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}} -\ninepoint\noindent -{\bf numeric} \\{mid\_thickness}; - $\\{mid\_thickness}={\rm Vround}$ \frac1/3[$\\{vair},\\{stem}$]; +\bugonpage D324, line 13 of \S713 (12/20/20) -\bugonpage E125, line 6 from the bottom (07/10/05) +\ninepoint\noindent\qquad\quad +\\{help2}(\.{"After\]\char`\`exitif\]<boolean\]expr>\char`\'\]I\]expect\]to\]see\]a\]% +semicolon."}) -\ninepoint\noindent -$\\{top}\,y_1=\\{top}\,y_6=h$; $z_2=.5[z_3,z_1]+\\{bend}$; +\bugonpage D326, line 5 from the bottom (06/23/20) -\bugonpage E125, line 3 from the bottom (07/10/05) +\ninepoint\noindent\qquad\qquad +$\{\,$invokes a user-defined sequence of commands$\,\}$ -\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 D334, lines 1 and 2 of \S742 (10/25/20) -\bugonpage E146, also pages 164 and 540 (02/08/03) +\tenpoint\noindent +{\bf 742.} \ Here is a procedure that ignores text until coming to an {\bf elseif}, +{\bf else}, or {\bf fi} at the current level of {\bf if}$\,\ldots\,${\bf fi} +nesting. After it has acted, \\{cur\_mod} will indicate the token that +was found. -\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 D339, line 4 of \S757 (06/16/20) -\bugonpage E147, line 11 from the bottom (04/23/04) +\tenpoint\noindent\quad +(A user who tries some shenanigan like `{\bf for} $\ldots$ {\bf let} {\bf endfor}' +will be foiled by the \\{get\_symbol}\cutpar + +\bugonpage D351, lines 2--7 of \S536 become five lines (12/11/20) + +\ninepoint\noindent\quad +{\bf begin} \\{wlog}(\\{banner}); +\\{slow\_print}(\\{format\_ident}); +\\{print}(\.{"\]\]"}); +\\{print\_int}(\\{sys\_day}); +\\{print\_char}(\.{"\]"});\par +\noindent\quad +$\\{months}\gets\.{\char`\'JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC\char`\'}$;\par +\noindent\quad +{\bf for} $k\gets3\ast\\{sys\_month}-2$ {\bf to} $3\ast\\{sys\_month}$ +{\bf do} \\{wlog}(\\{months}[$k$]);\par +\noindent\quad +\\{print\_char}(\.{"\]"}); +\\{print\_int}(\\{sys\_year}); +\\{print\_char}(\.{"\]"}); +\\{print\_two}(\\{sys\_time} {\bf div} 60); +\\{print\_char}(\.{":"});\par +\noindent\quad +\\{print\_two}(\\{sys\_time} {\bf mod} 60); + +\bugonpage D352, line 2 of \S793 becomes two lines (10/29/20) -\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$; +\tenpoint\noindent +command is being processed. +Beware: For historic reasons, this code foolishly conserves a tiny bit +of string pool space; but that can confuse the interactive `\.E' option. -\bugonpage E147, line 8 from the bottom (04/23/04) +\bugonpage D352, line 5 from the bottom (10/29/20) \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]$; +{\bf if} $\\{name}=\\{str\_ptr}-1$ {\bf then} +\ $\{\,$conserve string pool space (but see note above)$\,\}$ -\bugonpage E149, line 8 from the bottom (04/23/04) +\bugonpage D354, line 2 from the bottom (07/29/20) -\ninepoint\noindent -$y_5+.1\\{x\_height}=y_7=.5[y_6,y_8]$; $\\{bot}\,y_{6r}=-\\{oo}$; +\tenpoint\noindent +$\\{cur\_type}=\\{path\_type}$ means that \\{cur\_exp} points to the first +node of +a path; nobody else points\cutpar -\bugonpage E157, line 11 (02/29/08) +\bugonpage D469, lines 18--20 of \S1093 (09/19/19) -\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} +\tenpoint\noindent +so-called boundary character of this font; +the value of \\{next\_char} need not lie between \\{bc} and~\\{ec}. +If the very last instruction of the \\{lig\_kern} array has $\\{skip% +\_byte}=255$, +there is a special ligature/kerning program for a boundary character at the +left, beginning at location $256\ast\\{op\_byte}+$\cutpar -\bugonpage E161, line 7 from the bottom (04/23/04) +\bugonpage D469, line 30 of \S1093 (01/15/21) -\ninepoint\noindent -$\\{top}\,y_{1r}=\\{x\_height}+\\{oo}$; $y_2=y_4=.5[y_1,y_3]$; - $\\{bot}\,y_{3r}=-\\{oo}$; +\tenpoint\noindent +tional halt; no ligature or kerning command is performed. -\bugonpage E209, line 3 (12/29/04) +\bugonpage D471, lines 20 and 21 (08/07/20) -\ninepoint -\rightline{\% This lowercase italic alphabet was prepared by D. E. Knuth - in December, 1979,} +\ninepoint\noindent +\\{param}: {\bf array} $[1\dts\\{max\_font\_dimen}]$ {\bf of} +\\{scaled};\quad$\{\,${\bf fontdimen} parameters$\,\}$\par\noindent +\\{np}: $0\dts\\{max\_font\_dimen}$;\quad$\{\,$the largest {\bf fontdimen} parameter +specified so far$\,\}$ -\bugonpage E377, lines 3 and 4 from the bottom (12/22/02) +\bugonpage D474, line 2 from the bottom (08/07/20) -\ninepoint\noindent -\qquad {\bf path} \\{p\_}; $\\{p\_}=z_{\$\$l}\{z_{@1}-z_{\$\$l}\}\8{...} - \\{darkness}[z_{@1},.5[z_{@2},z_{\$\$l}]]\8{...}z_{@2}$\par\noindent -\qquad\quad$\8{---}z_{\$l}\8{--}z_{\$r}\8{--}z_{@0}\8{--}z_{\$\$r}\8{--}% - {\rm cycle}$;\par\noindent -\qquad{\bf if\/} $(y_{\$\$}>y_\$) \ne ({\rm ypart}\,\hbox{\bf precontrol}\,1 - \,\hbox{\bf of\/}\,\\{p\_} > {\rm ypart}\,\hbox{\bf postcontrol}\,1\, - \,\hbox{\bf of\/}\,\\{p\_})$:\par\noindent -\qquad\quad$\\{p\_}=z_{\$\$l}\{z_{@1}-z_{\$\$l}\}\8{...} - \\{darkness}[z_{@1},.5[z_{@2},z_{\$\$l}]]$\par\noindent -\qquad\qquad$\8{---}z_{\$l}\8{--}z_{\$r}\8{--}z_{@0}\8{--}z_{\$\$r}\8{--}% - {\rm cycle}$;\ {\bf fi}\par\noindent -\line{\qquad {\bf filldraw} \\{p\_};\hfil \% arm and beak} +\ninepoint\noindent\quad\qquad +\\{help1}(\.{"A\]colon\]should\]follow\]a\]headerbyte\]or\]fontdimen\]location."}); +\\{back\_error}; -\bugonpage E379, lines 17 and 18 become one line (01/06/14) +\bugonpage D508, line 3 of \S1189. (10/05/20) -\ninepoint\noindent -{\bf else}: $\\{rt}\,x_{6r}={\rm hround}(w-1.5u)$; -$y_{6}=y_{5l}+\\{eps};$ {\bf fi} +\tenpoint\noindent +to be in the range $a\le x\le b$. +System error messages should be suppressed when undumping. -\bugonpage E379, bottom line of the program (01/06/14) +\bugonpage D516, line 6 (10/15/20) -\def\SH{\raise.7ex\hbox{$\scriptstyle\#$}} % sharp sign for sharped units -\ninepoint\noindent -{\bf math\_fit}$(0,\\{ic}\SH-2.5u\SH)$; -{\bf penlabels}$(0,1,2,3,4,5,6,7)$; -{\bf endchar}; +\tenpoint\noindent\quad +If \\{final\_cleanup} is bypassed, this program doesn't bother to +close the input files that may still be open. -\bugonpage E489, bottom line (06/25/04) +\bugonpage D519, line 17 (01/15/21) -\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.] +\ninepoint\noindent\quad +\\{fix\_date\_and\_time}; +$\\{init\_randoms}(\\{sys\_time}+\\{sys\_day}*\\{unity})$; -\bugonpage E545, line 11 from the bottom (12/29/04) +\bugonpage D520, line 18 of \S1212 becomes two lines (10/05/20) -\parindent=36pt -The most important general routine in |cmbase| is probably the {\it pos}\cutpar +\ninepoint\noindent\quad +{\bf begin} \\{clear\_terminal};\par +\noindent\quad +{\bf loop} -\bugonpage E551, line 3 from the bottom (12/29/04) +\bugonpage D520, lines 11 and 12 from the bottom of \S1212 + become three lines (04/02/17) -\noindent quantities needed in the |calu| -programs are also established at this time. +\ninepoint\noindent\qquad\qquad +{\bf begin goto} \\{breakpoint};\par +\noindent\qquad\qquad\quad$\{\,$go to every declared label at least once$\,\}$\par +\noindent\qquad\quad\\{breakpoint}: $m\gets0$; + \.{@\char`\{\char`\'BREAKPOINT\char`\'@\char`\}} +\bugonpage D566, the bottom five lines (05/14/19) -\bugonpage E577, right column (12/23/02) +\tenpoint\noindent +they occupy in a typical production system +(executable code size for dark blocks, global data size for light blocks). +In this way the chart indicates a total of about +$8\times22=176${\ninerm K} bytes of memory, plus +$8\times15=120${\ninerm K} for the +dynamic memory region not shown explicitly. The dynamic memory +is often considerably larger in practice, because it is desirable to +accommodate large macro packages and large pictures. -\eightpoint\noindent -\\{p\_}\kern1pt, 305, 377.\par\noindent -{\bf padded}, 103--111, 117--121, $\underline{549}$. -\bugonpage E578, left column (12/23/02) +% 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 `--' -\eightpoint\noindent -{\bf postcontrol}, 347, 377.\par\noindent -{\bf precontrol}, 347, 377. \bye diff --git a/Master/texmf-dist/source/generic/knuth/errata/errata.three b/Master/texmf-dist/source/generic/knuth/errata/errata.three index 5f00f73b22e..d4a0afaccd8 100644 --- a/Master/texmf-dist/source/generic/knuth/errata/errata.three +++ b/Master/texmf-dist/source/generic/knuth/errata/errata.three @@ -793,7 +793,7 @@ because it is a highly negative number. \tenpoint\noindent the current string would be `{\tt.\char`\^.\char`\_/}' if $p$ points to the \\{ord\_noad} for $x$ in the (ridiculous) formula -`{\tt\char`\\sqrt\char`\{a\char`\^\char`\{\char`\\mathinner\char`\{% +`{\tt\char`\$\char`\\sqrt\char`\{a\char`\^\char`\{\char`\\mathinner\char`\{% b\char`\_\char`\{c\char`\\over x+y\char`\}\char`\}\char`\}\char`\}\char`\$}'. \bugonpage B296, lines 3--5 (5/8/87) diff --git a/Master/texmf-dist/source/generic/knuth/errata/errata.twelve b/Master/texmf-dist/source/generic/knuth/errata/errata.twelve new file mode 100644 index 00000000000..8a7c291b490 --- /dev/null +++ b/Master/texmf-dist/source/generic/knuth/errata/errata.twelve @@ -0,0 +1,1709 @@ +% Bugs (sigh) in Computers \& Typesetting + +\input manmac +\def\.#1{\hbox{\tt#1}} +\font\sltt=cmsltt10 +\font\niness=cmss9 +\font\ninessi=cmssi9 +\proofmodefalse +\raggedbottom +\output{\hsize=29pc \onepageout{\unvbox255\kern-\dimen@ \vfil}} + +\def\today{\number\day\ + \ifcase\month\or + Jan\or Feb\or Mar\or Apr\or May\or Jun\or + Jul\or Aug\or Sep\or Oct\or Nov\or Dec\fi + \ \number\year} + +\def\cutpar{{\parfillskip=0pt\endgraf}} + +\def\rhead{Bugs in {\tensl Computers \& Typesetting as of \today}} +\def\bugonpage#1(#2) \par{\bigbreak\tenpoint + \hrule width\hsize + \line{\lower3.5pt\vbox to13pt{}Page #1\hfil(#2)}\hrule width\hsize + \nobreak\medskip} +\def\buginvol#1(#2) \par{\bigbreak\penalty-1000\tenpoint + \hrule width\hsize + \line{\lower3.5pt\vbox to13pt{}Volume #1\hfil(#2)}\hrule width\hsize + \nobreak\medskip} +\def\slMF{{\manual 89:;}\-{\manual <=>:}} % slant the logo +\def\0{\raise.7ex\hbox{$\scriptstyle\#$}} +\newcount\nn +\newdimen\nsize \newdimen\msize \newdimen\ninept \ninept=9pt +\newbox\eqbox \setbox\eqbox=\hbox{\kern2pt\eightrm=\kern2pt} + +\tenpoint +\noindent This is a list of all substantial corrections made to {\sl Computers +\& Typesetting\/} between the publication of the second ``Millennium Edition'' +at the close of the year 2001 and the beginning of the year 2014. +(More precisely, it lists errors corrected +in 16th to 19th printings of Volume~A, the 7th and 8th printings +of Volume~B, the 6th and 7th printings of Volume~C, the 4th and 5th printings +of Volume~D, and the 5th and 6th printings of Volume~E.) +Corrections made to the softcover version of {\sl The \TeX book\/}, +beginning with its 32nd printing, are +the same as corrections to Volume~A\null. Corrections to the softcover +version of {\sl The \slMF\kern1ptbook}, beginning with its 11th printing, +are the same as corrections to Volume~C\null. Changes to the mini-indexes +and master indexes of Volumes B, D, and~E are not shown here unless they are +not obviously derivable from what has been shown. All of these +errors have supposedly been corrected in more recent printings, unless +they were subsequently found to be wrong. +\looseness=-1 + +% volume A + +\bugonpage A7, line 4 from the bottom (01/15/04) + +\noindent +since control sequences of the second kind always have exactly one +symbol after\cutpar + +\bugonpage A123, line 7 from the bottom (02/27/08) + +\ninepoint\noindent +that it won't make the natural height-plus-depth +of\/ |\box|$\,n$ surpass |\dimen|$\,n$, when it~is\cutpar + +\bugonpage A124, lines 12 and 13 (02/27/08) + +\ninepoint\noindent +means that \TeX\ has tried to split an |\insert254| to height $180.2\pt$; +the natural height-plus-depth of the best such split is $175.3\pt$, +and the penalty for breaking there is~100.) + +\bugonpage A153, line 7 (01/03/14) + +\ninepoint\noindent +of three fonts: one for text size, one for +script size, and one for scriptscript size. The\cutpar + +\bugonpage A206, lines 12--17 (05/21/07) + +\ninepoint\noindent +or alignment template +is also considered to be |\outer| in this sense; for example, a +file shouldn't end in the middle of a definition. If you are designing a +format for others to use, you can help them detect errors before too much +harm is done, by using |\outer| with all control sequences that should +appear only at ``quiet times'' within a document. For example, Appendix~B +defines |\proclaim| to be |\outer|, since a user shouldn't be stating a +theorem as part of a definition or argument or preamble. + + +\bugonpage A216, line 3 from the bottom (12/20/07) + +\ninepoint\indent|\openin|\<number>|=|\<file name> + +\bugonpage A290, lines 25--26 (02/24/08) + +\ninepoint\textindent{$\bull$} +\<leaders>\<box or rule>\<horizontal skip>.\enskip +Here \<horizontal skip> refers to one of the first five glue-appending +commands just mentioned; the formal syntax for \<leaders>\cutpar + +\bugonpage A292, line 15 (12/02/02) + +\ninepoint\noindent +are defined as in the +second alternative of a \<math field>, are +recorded in a ``choice\cutpar + +\bugonpage A308, lines 25 and 26 (06/17/02) + +\ninepoint +\begintt +\def\appendroman#1#2#3{\expandafter\def\expandafter#1\expandafter + {\csname\expandafter\gobble\string#2\romannumeral#3\endcsname}} +\endtt + +\bugonpage A311, line 14 (12/02/02) + +\ninepoint\indent +|\def\\{\if\space\next\ % assume that \next is unexpandable| + +\bugonpage A311, line 17 (12/29/07) + +\ninepoint\indent +| \leavevmode\copy0\kern-\wd0\makelightbox}| + +\bugonpage A318, lines 24 and 25 (10/01/03) + +\ninepoint\noindent +\hbox to\parindent{\bf\hss15.13.\enspace}% +Yes, in severe circumstances. (1)~Previous footnotes might + have left no room for any more footnotes on the page. +(2)~If |\vadjust{\eject}| occurs on the same line\cutpar + +\bugonpage A364, lines 12--15 from the bottom (02/29/08) + +\ninepoint\noindent +|\def\loggingall{\tracingcommands=2 \tracingstats=2|\par\noindent +| \tracingpages=1 \tracingoutput=1 \tracinglostchars=1 |\par\noindent +| \tracingmacros=2 \tracingparagraphs=1 \tracingrestores=1 |\par\noindent +| \showboxbreadth=\maxdimen \showboxdepth=\maxdimen}|\par +\noindent +|\def\tracingall{\tracingonline=1 \loggingall}| + +\bugonpage A364, line 5 from the bottom (02/29/08) + +\ninepoint\noindent +|\def\fmtversion{3.141592653} % identifies the current format| + +\bugonpage A373, lines 4 and 5 from the bottom (01/02/14) + +\ninepoint\noindent +And here's another solution (which may be faster, because +token list registers can be expanded more quickly than macros +on some implementations, using |\the|): + +\bugonpage A373, line 2 from the bottom (01/02/14) + +\ninepoint\indent +|\loop \ifnum\m>0 \t=\expandafter{\the\t*}\advance\m-1 \repeat| + +\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 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 A418, line 8 from the bottom (12/13/11) + +\ninepoint\noindent\beginlines +| \def\\{#3} \advance\hsize by -18mm| +\endlines + +\bugonpage A418, line 3 from the bottom (12/13/11) + +\ninepoint\noindent\beginlines +| \halign{\line{\titlefont\hss##}\\#4\unskip\\}| +\endlines + +\bugonpage A442, lines 7 and 8 from the bottom (01/03/14) + +\def\rule#1.{\smallskip\textindent{\bf#1.}\ignorespaces} +\ninepoint\textindent{\bf 3.}% +If the current item is a style change, set $C$ to the specified +style and move on to the next item. + +\bugonpage A450, lines 14--16 from the bottom (12/19/02) + +\begingroup\def\\#1{$_{\kern\scriptspace#1}$} +\indent\qquad{\tt s\\1tic + \\1exp x\\3p pi\\3a \\2i\\1a i\\2al \\2id \\1do \\1ci \\2io ou\\2 \\2us} +\medskip\noindent +(where subscripts that aren't shown are zero), and this yields +$$\centerline{% +\tt.\\0s\\0u\\1p\\0e\\0r\\1c\\0a\\0l\\1i\\0f\\0r\\0a\\0g\\1i\\0l\\4i% +\\0s\\1t\\2i\\0c\\1e\\0x\\3p\\2i\\3a\\0l\\2i\\1d\\0o\\1c\\2i\\0o\\2u\\2s\\0.}$$ +\endgroup + +\bugonpage A458, left column (01/11/07) + +\eightpoint\noindent +|\\|, 38, {\it356}, {\it378}, {\it418}. + +\bugonpage A459, left column (03/17/06) + +\eightpoint\noindent +angle brackets ( $\langle\,\rangle$ ), 59, {\it146--147}, 150,~156,\par +\noindent\qquad $\underline{268}$, 420, 437; + {\sl see also\/} |\langle|, |\rangle|. + +\bugonpage A461, left column (02/24/08) + +\eightpoint\noindent +|\boxit|, 223, 331. + +\bugonpage A468, right column (02/26/08) + +\eightpoint\noindent +interline glue, 78--79, $\underline{80}$, 104, 105, 125, 221,\par +\noindent\qquad 245, 263, 281--282, 335, 352, 399, 409. + +\bugonpage A469, left column (02/26/08) + +\eightpoint\noindent +Kastrup, David Friedrich, 399. + +\bugonpage A470, left column (01/21/03) + +\eightpoint\noindent +|\loggingall|, $\underline{364}$. + +\bugonpage A477, right column (06/08/07) + +\eightpoint\noindent +\llap{*}|\spaceskip|, 76, 274, {\it317}, {\it356}, {\it416}, 429. + +\bugonpage A479, right column (09/11/07) + +\eightpoint\noindent +|\undefined|, 350, 384. + +\bugonpage A483, line 5 from the bottom (11/18/03) + +\eightpoint +\rightline{\eightss--- HIERONYMUS HORNSCHUCH, % + {\eightrm'}$O\mkern-1mu\rho\mkern1mu\vartheta o\mkern1mu % + \tau\upsilon\pi o\gamma\mkern-1mu % + \rho\alpha\phi\acute\iota\alpha\varsigma$\enspace(1608)} + +% volume B +\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers +\def\to{\mathrel{.\,.}} % double dot, used only in math mode + +\bugonpage Bv, page number change (12/27/11) + +\eightpoint\noindent[For consistency with Volumes A, C, and E, the +preface now begins on page v instead of page~vii. This change was first +made in the ninth printing.] + +\bugonpage Bv {(formerly Bvii)}, bottom two lines (01/06/14) + +\eightpoint\noindent +all of those changes. +I~now believe that the final bug was discovered on 14 September 2008 +and removed in version 3.14159265. +The finder's fee has converged to \$327.68. + +\bugonpage Bxiii {(formerly Bxv)}, line $-7$ (12/27/11) + +\ninepoint\noindent +Format specs have no effect on the corresponding Pascal program, but they +do influence\cutpar + +\hsize=35pc + +\bugonpage B2, line 10 from the bottom (01/02/14) + +\ninepoint\noindent\hskip10pt +{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$% +{\tt This\]is\]TeX,\]Version\]3.14159265\char'23}\quad +$\{\,$printed when \TeX\ starts$\,\}$ + +\bugonpage B3, new paragraph to follow line 9 (12/20/02) + +\tenpoint\noindent\quad +Incidentally, Pascal's standard \\{round} function can be problematical, +because it disagrees with the IEEE floating-point standard. +Many implementors have +therefore chosen to substitute their own home-grown rounding procedure. + +\bugonpage B21, lines 33 and 34 (09/11/07) + +\def\Oct#1{\hbox{\rm\char'23\kern-.2em\it#1\/\kern.05em}} % octal constant +\tenpoint\noindent +$[\Oct{41}\to\Oct{46},\Oct{60}% +\to\Oct{71},\Oct{136},\Oct{141}\to\Oct{146},\Oct{160}\to\Oct{171}]$ must be printable. +Thus, at least 81 printable characters are needed. + +\bugonpage B109, line 16 (01/06/14) + +\ninepoint\noindent +\qquad\qquad{\bf begin} $\\{print\_esc}(\.{"csname"})$; +$\\{print\_esc}(\.{"endcsname"})$; +$\\{print\_char}(\.{"\ "})$; +{\bf end} + +\bugonpage B114, line 25 (09/11/07) + +\def\#{\hbox{\tt\char`\#}} % parameter sign +\ninepoint\noindent +{\bf define} $\\{save\_index}(\#)\equiv\\{save\_stack}[\#].\\{hh}.\\{rh}$\quad + $\{\,$\\{eqtb} location or token or \\{save\_stack} location$\,\}$ + +\bugonpage B139, line 20 (12/19/02) + +\ninepoint\noindent +\quad{\bf begin while} $(\\{state}=\\{token\_list}) \land + (\\{loc}=\\{null}) \land (\\{token\_type}\ne\\{v\_template})$ {\bf do}\par +\noindent\qquad\\{end\_token\_list};\quad$\{\,$conserve stack space$\,\}$ + +\bugonpage B144, line 14 (09/11/07) + +\ninepoint\noindent +\quad\\{cat}: $0\to\\{max\_char\_code}$;\quad$\{\,$\\{cat\_code}(\\{cur\_char}), usually$\,\}$ + +\bugonpage B153, lines 2 and 3 (09/11/07) + +\tenpoint\noindent +In fact, these three procedures account for almost every use of \\{get\_next}. + +\bugonpage B161, line 19 (12/19/02) + +\ninepoint\noindent +\quad{\bf while} $(\\{state}=\\{token\_list}) \land + (\\{loc}=\\{null}) \land (\\{token\_type}\ne\\{v\_template})$ {\bf do}\par +\noindent\qquad\\{end\_token\_list};\quad$\{\,$conserve stack space$\,\}$ + +\bugonpage B163, line 29 (12/19/02) + +\ninepoint\noindent +\quad$\\{long\_state}\gets\\{call}$; +$\\{cur\_tok}\gets\\{par\_token}$; +$\\{ins\_error}$; +{\bf goto} \\{continue}; + +\bugonpage B172, lines 2--6 from the bottom (09/11/07) + +\ninepoint\noindent +{\bf else if\/} $m=\\{vmode}$ {\bf then} \\{scanned\_result}(\\{prev\_depth})(\\{dimen\_val})\par\noindent +\quad{\bf else} \\{scanned\_result}(\\{space\_factor})(\\{int\_val}) + +\bugonpage B178, line 4 (09/11/07) + +\ninepoint\noindent +\quad$\\{cur\_val}\gets0$; +$\\{cur\_val\_level}\gets\\{int\_val}$; +$\\{radix}\gets0$; +$\\{cur\_order}\gets\\{normal}$; + +\bugonpage B184, line 9 from the bottom (04/18/07) + +\tenpoint\noindent +and denominator sum to 32768 or less. +According to the definitions here, $\rm2660\,dd\approx1000.33297\,mm$;\kern-6.6pt\cutpar + +\bugonpage B206, line 14 (10/30/02) + +\tenpoint\noindent +used input files like \.{webmac.tex}. + +\bugonpage B206, new paragraph to follow line 22 (12/20/02) + +\tenpoint\noindent\quad +The following procedures don't allow spaces to be part of +file names; but some users seem to like names that are spaced-out. +System-dependent changes to allow such things should probably +be made with reluctance, and only when an entire file name that +includes spaces is ``quoted'' somehow. + +\bugonpage B227, new line to precede line 23 (09/11/07) + +\ninepoint\noindent +{\bf if} $(\\{nw}=0)\lor(\\{nh}=0)\lor(\\{nd}=0)\lor(\\{ni}=0)$ + {\bf then} \\{abort}; + +\bugonpage B256, line 25 (12/20/02) + +\ninepoint\noindent +\qquad\\{cur\_glue}: \\{real};\quad$\{\,$glue seen so far$\,\}$\par\noindent +\qquad\\{cur\_g}: \\{scaled};\quad$\{\,$rounded + equivalent of \\{cur\_glue} times the glue ratio$\,\}$\par\noindent +\quad{\bf begin} $\\{cur\_g}\gets0$; + $\\{cur\_glue}\gets\\{float\_constant}(0)$;\par\noindent +\quad$\\{this\_box}\gets\\{temp\_ptr}$; + $\\{g\_order}\gets\\{glue\_order}(\\{this\_box})$; + $\\{g\_sign}\gets\\{glue\_sign}(\\{this\_box})$; + +\bugonpage B258, line 5 from the bottom (12/20/02) + +\ninepoint\noindent +\quad{\bf begin} $g\gets\\{glue\_ptr}(p)$; + $\\{rule\_wd}\gets\\{width}(g)-\\{cur\_g}$; + +\bugonpage B258, bottom line (12/20/02) + +\ninepoint\noindent +\qquad\qquad{\bf begin} $\\{cur\_glue}\gets\\{cur\_glue}+\\{stretch}(g)$; + $\\{vet\_glue}(\\{float}(\\{glue\_set}(\\{this\_box}))*\\{cur\_glue})$;\par +\noindent\qquad\qquad$\\{cur\_g}\gets\\{round}(\\{glue\_temp})$; + +\bugonpage B259, line 4 (12/20/02) + +\ninepoint\noindent +\qquad\qquad{\bf begin} $\\{cur\_glue}\gets\\{cur\_glue}-\\{shrink}(g)$; + $\\{vet\_glue}(\\{float}(\\{glue\_set}(\\{this\_box}))*\\{cur\_glue})$;\par +\noindent\qquad\qquad$\\{cur\_g}\gets\\{round}(\\{glue\_temp})$; + +\bugonpage B259, new line to precede old line 7 (12/20/02) + +\ninepoint\noindent +\quad$\\{rule\_wd}\gets\\{rule\_wd}+\\{cur\_g}$; + +\bugonpage B260, line 21 (12/19/02) + +\ninepoint\noindent +\qquad{\bf else begin} $\\{lx}\gets\\{lr}$ {\bf div} $(\\{lq}+1)$; + +\bugonpage B261, line 9 (12/20/02) + +\ninepoint\noindent +\qquad\\{cur\_glue}: \\{real};\quad$\{\,$glue seen so far$\,\}$\par\noindent +\qquad\\{cur\_g}: \\{scaled};\quad$\{\,$rounded + equivalent of \\{cur\_glue} times the glue ratio$\,\}$\par\noindent +\quad{\bf begin} $\\{cur\_g}\gets0$; + $\\{cur\_glue}\gets\\{float\_constant}(0)$;\par\noindent +\quad$\\{this\_box}\gets\\{temp\_ptr}$; + $\\{g\_order}\gets\\{glue\_order}(\\{this\_box})$; + $\\{g\_sign}\gets\\{glue\_sign}(\\{this\_box})$; + +\bugonpage B262, line 10 from the bottom (12/20/02) + +\ninepoint\noindent +\quad{\bf begin} $g\gets\\{glue\_ptr}(p)$; + $\\{rule\_ht}\gets\\{width}(g)-\\{cur\_g}$; + +\bugonpage B262, line 6 from the bottom (12/20/02) + +\ninepoint\noindent +\qquad\qquad{\bf begin} $\\{cur\_glue}\gets\\{cur\_glue}+\\{stretch}(g)$; + $\\{vet\_glue}(\\{float}(\\{glue\_set}(\\{this\_box}))*\\{cur\_glue})$;\par +\noindent\qquad\qquad$\\{cur\_g}\gets\\{round}(\\{glue\_temp})$; + +\bugonpage B262, line 2 from the bottom (12/20/02) + +\ninepoint\noindent +\qquad\qquad{\bf begin} $\\{cur\_glue}\gets\\{cur\_glue}-\\{shrink}(g)$; + $\\{vet\_glue}(\\{float}(\\{glue\_set}(\\{this\_box}))*\\{cur\_glue})$;\par +\noindent\qquad\qquad$\\{cur\_g}\gets\\{round}(\\{glue\_temp})$; + +\bugonpage B263, new line to precede old line 2 (12/20/02) + +\ninepoint\noindent +\quad$\\{rule\_ht}\gets\\{rule\_ht}+\\{cur\_g}$; + +\bugonpage B264, line 10 (12/19/02) + +\ninepoint\noindent +\qquad{\bf else begin} $\\{lx}\gets\\{lr}$ {\bf div} $(\\{lq}+1)$; + +\bugonpage B266, line 29 (09/11/07) + +\tenpoint\noindent +$\\{total\_pages}\ge65536$, the \.{DVI} file will lie. And if +$\\{max\_push}\ge65536$, the user deserves whatever chaos might ensue. + +\bugonpage B279, line 19 (09/11/07) + +\ninepoint\noindent +\qquad\\{p}: \\{pointer};\quad$\{\,$a new glue node$\,\}$ + +\bugonpage B288, lines 18--20 (09/11/07) + +\ninepoint\noindent +\\{left\_noad}: {\bf begin} \\{print\_esc}(\.{"left"}); + \\{print\_delimiter}(\\{delimiter}($p$));\par\noindent +\quad{\bf end};\par\noindent +\\{right\_noad}: {\bf begin} \\{print\_esc}(\.{"right"}); + \\{print\_delimiter}(\\{delimiter}($p$)); + +\bugonpage B290, line 12 (09/11/07) + +\ninepoint\noindent +\quad{\bf begin if\/} $s=\\{text\_size}$ {\bf then} + \\{print\_esc}(\.{"textfont"}); + +\bugonpage B299, line 9 (12/20/02) + +\ninepoint\noindent +\qquad\qquad\quad{\bf if\/} $\\{type}(r)=\\{kern\_node}$ {\bf then} + \quad$\{\,$unneeded italic correction$\,\}$ + +\bugonpage B332, line 6 (12/19/02) + +\tenpoint\noindent +is being scanned, or when no alignment preamble is active. + +\bugonpage B332, line 8 (12/19/02) + +\ninepoint\noindent +\quad{\bf begin if\/} $(\\{scanner\_status}=\\{aligning}) \lor + (\\{cur\_align}=\\{null})$ {\bf then} + +\bugonpage B336, line 11 from the bottom (10/13/03) + +\tenpoint\noindent +$j-i+\\{min\_quarterword}$ in their +\\{link} fields. The values of $w_{ii}$ were initialized to +\\{null\_flag},\cutpar + +\bugonpage B342, lines 5 and 6 (09/11/07) + +\tenpoint +In restricted horizontal mode, the \\{clang} part of \\{aux} is undefined; +an over-cautious Pascal runtime system may complain about this. + +\bugonpage B343, line 25 (01/02/13) + +\noindent +should begin in the +sequence of line numbers, in case hanging indentation or \.{\char`\\parshape} +is in\cutpar + +\bugonpage B416, line 22 (02/29/08) + +\ninepoint\noindent +\qquad\qquad{\bf if\/} $\\{count}(t)=1000$ {\bf then} $t\gets\\{height}(r)$ +\par\noindent +\qquad\qquad{\bf else} $t\gets\\{x\_over\_n}(\\{height}(r),1000)*\\{count}(t)$; +\par\noindent +\qquad\qquad\\{print\_scaled}$(t)$ + +\bugonpage B438, lines 1--3 (09/11/07) + +\tenpoint\noindent +{\bf1035.\quad}If \\{link}(\\{cur\_q}) is nonnull when \\{wrapup} is invoked, +\\{cur\_q} points to +the list of characters that were consumed while building the ligature +character~\\{cur\_l}. + +\bugonpage B438, lines 19 and 20 (09/11/07) + +\ninepoint\noindent +\qquad\qquad\qquad{\bf begin if\/} $\\{link}(\\{cur\_q})>\\{null}$ {\bf then} +\par\noindent +\qquad\qquad\qquad\quad{\bf if\/} $\\{character}(\\{tail})=\\{qi}( + \\{hyphen\_char}[\\{main\_f}])$ {\bf then} $\\{ins\_disc}\gets\\{true}$; + +\bugonpage B438, line 4 from the bottom (09/11/07) + +\ninepoint\noindent +\quad$\\{link}(\\{tail})\gets\\{lig\_stack}$; +$\\{tail}\gets\\{lig\_stack}$\quad$\{\,$\\{main\_loop\_lookahead} is next$\,\}$ + +\bugonpage B439, line 3 (09/11/07) + +\ninepoint\noindent +\quad{\bf if\/} $\\{main\_p}>\\{null}$ {\bf then} + \\{tail\_append}(\\{main\_p});\quad$\{\,$append a single character$\,\}$ + +\bugonpage B440, new line to follow line 9 (09/11/07) + +\ninepoint\noindent +\quad{\bf if\/} $\\{cur\_r}=\\{non\_char}$ {\bf then goto} + \\{main\_loop\_wrapup}; + +\bugonpage B452, line 18 (28/03/11) + +\noindent\\{hmode}, where the latter two are used to denote + \.{\char`\\vbox} and \.{\char`\\hbox}, respectively. + +\bugonpage B455, lines 3 and 4 (09/11/07) + +\ninepoint\noindent +\quad{\bf if\/} $((\\{cur\_cmd}=\\{hskip})\land(\\{abs}(\\{mode})\ne\\{vmode})) + \lor ((\\{cur\_cmd}=\\{vskip})\land(\\{abs}(\\{mode})=\\{vmode}))$ {\bf then} + +\bugonpage B472, new paragraph to follow line 10 (12/20/02) + +\tenpoint\noindent\quad +A devious user might force an \\{endv} command to occur just about anywhere; +we must defeat such hacks. + +\bugonpage B472, replacement for what used to be line 13 (12/20/02) + +\ninepoint\noindent +\quad{\bf begin} $\\{base\_ptr}\gets\\{input\_ptr}$; + $\\{input\_stack}[\\{base\_ptr}]\gets\\{cur\_input}$;\par\noindent +\quad{\bf while} $(\\{input\_stack}[\\{base\_ptr}].\\{index\_field}\ne + \\{v\_template}) \land{}$\par\noindent +\quad\qquad $(\\{input\_stack}[\\{base\_ptr}].\\{loc\_field}= + \\{null}) \land {}$\par\noindent +\quad\qquad $(\\{input\_stack}[\\{base\_ptr}].\\{state\_field}= + \\{token\_list})$ {\bf do} \\{decr}(\\{base\_ptr});\par\noindent +\quad{\bf if\/} $(\\{input\_stack}[\\{base\_ptr}].\\{index\_field}\ne + \\{v\_template}) \lor {}$\par\noindent +\quad\qquad $(\\{input\_stack}[\\{base\_ptr}].\\{loc\_field}\ne + \\{null}) \lor {}$\par\noindent +\quad\qquad $(\\{input\_stack}[\\{base\_ptr}].\\{state\_field}\ne + \\{token\_list})$ {\bf then}\par\noindent +\qquad\\{fatal\_error}(\hbox{\tt\char'23(interwoven\]alignment\]preambles\]% + are\]not\]allowed)\char'23});\par\noindent +\quad{\bf if\/} $\\{cur\_group}=\\{align\_group}$ {\bf then} + +\bugonpage B505, line 19 (09/11/07) + +\ninepoint\noindent +\qquad(\.{"since\]the\]result\]is\]out\]of\]range."});\par\noindent +\qquad{\bf if\/} $p\ge\\{glue\_val}$ {\bf then} + \\{delete\_glue\_ref}(\\{cur\_val});\par\noindent +\qquad\\{error}; {\bf return}; + +\bugonpage B506, line 1 (10/13/03) + +\tenpoint\noindent +{\bf 1237.\quad}Here we use the fact that the consecutive codes +$\\{int\_val}\to\\{mu\_val}$ and +$\\{assign\_int}\to$\cutpar + +\bugonpage B520, line 8 (06/25/04) + +\tenpoint\noindent +says, +for example, `\.{(preloaded format=plain 1982.11.19)}', showing the year, +month, and day\cutpar + +\bugonpage B535, new line to follow line 11 (09/11/07) + +\ninepoint\noindent +\qquad{\bf if\/} $\\{last\_glue}\ne\\{max\_halfword}$ {\bf then} + \\{delete\_glue\_ref}(\\{last\_glue}); + +\bugonpage B578, new entry (06/04/06) + +\eightpoint\noindent +Trabb Pardo, Luis Isidoro, 2. + +% volume C +\hsize=29pc +\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers +\def\ddashto{\mathrel{\hbox{-\thinspace-\thinspace-\kern-.05em}}} +\def\tension{\mathop{\rm tension}} +\def\controls{\mathop{\rm controls}} +\def\and{\,{\rm and}\,} + +\bugonpage Cxi, line 4 (05/20/07) + +\line{\hbox to\parindent{\bf\hbox to 1em{\hss27}\hss}% + \rm Recovery from Errors\leaders\hbox to 20pt{\kern13pt.\hss}\hfil + \hbox to 2em{\hss223}} + +\bugonpage C11, line 11 (10/11/01) + +\noindent +the area below the bar to the area above it equal to +$(\sqrt5+1)/2\approx1.61803$, the\cutpar + +\bugonpage C29, illustration for exercise 4.11 (09/09/01) + +\noindent +[points 2 and 5 should not be labeled twice] + +\bugonpage C32, line 5 from the bottom (01/04/14) + +\noindent +\hbox to\parindent{\hfil\sevenrm20\ \ }% +| penpos1(stem,15); penpos2(.9stem,12); penpos3(stem,10);| + +\bugonpage C36, line 5 from the bottom (01/05/14) + +\noindent +line~12, where it +says `|x1l|', not `|x11|' or~`|xll|'); be sure to distinguish between\cutpar + +\bugonpage C55, lines 5 and 6 (01/05/14) + +\ninepoint\noindent +suffixed or subscripted. +Thus, the syntax rule for \<variable> +should actually be replaced by a slightly more complicated pair of rules: + + +\bugonpage C129, line 16 (02/21/08) + +\ninepoint\beginsyntax +<path subexpression>\is<path expression not ending with direction specifier>\kern-5pt\null +\endsyntax + +\bugonpage C130, lines 13--15 from the bottom (09/13/03) + +\ninepoint\noindent +point but not after it, the +nonempty one is duplicated in a similar way. A~basic path join +`$\to\controls u\and v\to$' specifies explicit control points that +override any direction specifiers that may immediately surround it. + +\bugonpage C137, lines 5--7 from the bottom (02/21/08) + +\danger Let's conclude this chapter by applying what we've learned about +paths to a real-life example. The {\sl Journal of Algorithms\/} was +published for many years by Academic Press, and its cover page carried the +following logo, which was designed\cutpar +\enddanger + +\bugonpage C137, bottom two lines (02/21/08) + +\ninepoint\noindent +A \MF\ program to produce this logo made it possible for the editors +of the journal to use it on letterheads in their correspondence. +Here is one way to do that job,\cutpar +% actually the MS now says "to write that program," and the +% correction therefore extends to page C138 + +\bugonpage C156, line 15 from the bottom (09/09/01) + +\ninepoint\noindent +be the values they had upon entry to the group.) + +\bugonpage C159, lines 12--15 (12/01/06) + +\begintt +def --- = ..tension infinity.. enddef; +\endtt +it makes `$z_1\ddashto z_2$' become +`$z_1\to\tension\\{infinity}\to z_2$'. +The {replacement text} can be any sequence of tokens not including +`{\bf enddef}\kern1pt'; or it can include entire subdefinitions like +`{\bf def}~$\ldots$~{\bf enddef}\kern1pt', according to certain rules +that we shall explain later. + +\bugonpage C171, line 16 from the bottom (06/18/02) + +\tenpoint +\<loop>\is\<loop header>|:|\<loop text> {\tt endfor} + +\bugonpage C179, line 7 from the bottom (09/09/01) + +\ninepoint\noindent +next time \MF\ gets to the end of an input line, it will stop reading +from the\cutpar + +\bugonpage C180, lines 14--16 (04/25/03) + +\ninepoint\noindent +digits should be a +file name that works in essentially the same way on all installations of +\MF\kern-.03em\null. Uppercase letters are considered to be distinct from their +lowercase counterparts, on many systems. + +\bugonpage C180, new line to be inserted 4 from the bottom (06/25/04) + +\ninepoint\item\bull +When \MF\ is reading the symbolic tokens to be saved by {\bf save}. + +\bugonpage C203, line 12 from the bottom (04/25/03) + +\ninepoint\hbox to 237pt{point~3 at the right of the triangle +might digitize into a} + +\bugonpage C213, line 26 (02/21/08) + +\ninepoint\beginsyntax +<path subexpression>\is<path expression not ending with direction specifier>\kern-5pt\null +\endsyntax + +\bugonpage C226, line 23 (02/21/08) + +\ninepoint\noindent following nineteen things will be mentioned: + +\bugonpage C226, new line to be second from the bottom (02/21/08) + +\ninepoint\indent|independent variables|\qquad(distinct numeric variables) + +\bugonpage C236, line 7 from the bottom (01/05/14) + +\ninepoint\noindent +\hbox to\parindent{\hss\bf 7.4.\enspace}False. +After `|newinternal x;|' you can't say `|x|\<tag>' in a \<suffix list>. + +\bugonpage C246, line 12 (02/21/08) + +\ninepoint\noindent +is performed whenever \MF\ uses the last two alternatives +in the definition\cutpar + +\bugonpage C250, lines 13 and 14 (02/19/08) + +\ninepoint\noindent\hbox to\parindent{\bf\hss19.3.\enspace}% +Yes, if and only if $n-{1\over2}$ is a nonnegative even integer. +\ (Because ambiguous values are rounded upwards.) + +\bugonpage C250, line 12 from the bottom (04/25/03) + +\ninepoint\noindent +following \<boolean primary>.) + +\bugonpage C286, line 25 (09/09/01) + +\ninepoint\noindent +problem; it would simply have put |ENDFOR| into the +replacement text of |asts|, because\cutpar + +\bugonpage C289, line 7 (09/09/01) + +\vskip-6pt\ninepoint\begintt +if if pair x: x>(0,0) else: false fi: A else: B fi. +\endtt + +\bugonpage C292, line 10 from the bottom (09/09/01) + +\ninepoint\noindent +be known by saying `{\bf if\/} known $p-q$: $p=q$ {\bf else}:~{\bf false} +{\bf fi}'; transforms could be handled\cutpar + +\bugonpage C293, line 5 from the bottom (04/25/03) + +\ninepoint\noindent +given angle~$\phi$. We can consider +the common angle~$\theta$ of $z_{1r}-z_{1l}$ and $z_{0r}-z_{0l}$ to be\cutpar + +\bugonpage C315, line 15 from the bottom (04/25/03) + +\ninepoint\noindent +`b' was shipped out.) \ The second letter,~`o', is placed +in a second little box adjacent\cutpar + +\bugonpage C325, bottom line (02/29/08) + +\rightline{\eightss--- CAROLUS LINN\AE US, + {\eightssi Philosophia Botanica\/}\enspace(1751)} + +\bugonpage C332, line 4 from the bottom (04/25/03) + +\ninepoint\noindent +(The proofsheet resolution will be 50 pixels per inch, because {\it cheapo\/} +has 200 pixels per\cutpar + +\bugonpage C346, left column (06/18/02) + +\eightpoint\noindent +\llap{*}|:|, 169, 171, 317--319. + +\bugonpage C346, right column (07/09/01) + +\eightpoint\noindent +\llap{*}|angle|, {\it29}, {\it67}, $\underline{72}$, {\it107}, +{\it135}, 211, {\it238}. + +\bugonpage C346, right column (10/04/04) + +\eightpoint\noindent +arccosine, arcsine, arctangent, {\sl see\/} |angle|. + +\bugonpage C351, right column (02/21/08) + +\eightpoint\noindent +independent variables, $\underline{81}$--$\underline{83}$, 88, 224, 226. + +\bugonpage C352, right column (02/29/08) + +\eightpoint\noindent +Linn\'e, Carl von (= Linn\ae us, Carolus), 325. + +\bugonpage C355, right column (02/29/08) + +\eightpoint\noindent +\llap{*}|save|, $\underline{155}$--$\underline{156}$, {\it160}, 173, + {\it178}, 180, 218,\par +\noindent\qquad{\it236}, {\it244}, {\it296}, 299. + +% Volume D +\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers +\def\to{\mathrel{.\,.}} % double dot, used only in math mode + +\bugonpage Dv, page number change (12/27/11) + +\eightpoint\noindent[For consistency with Volumes A, C, and E, the +preface now begins on page v instead of page~vii. This change was first +made in the sixth printing.] + +\bugonpage Dv {(formerly Dvii)}, bottom two lines (01/06/14) + +\eightpoint\noindent +corporates all of those changes. +I~now believe that the final bug was discovered on 03~June 2008, +and removed in version 2.7182818. +The finder's fee has converged to \$327.68. + +\bugonpage Dxiii {(formerly Dxv)}, line $-7$ (12/27/11) + +\ninepoint\noindent +Format specs have no effect on the corresponding Pascal program, but they +do influence\cutpar + +\hsize=35pc +\parindent=1em + +\bugonpage D2, line $-17$ (01/03/14) + +\ninepoint\noindent +{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$% +{\tt This\]is\]METAFONT,\]Version\]2.7182818\char'23}\quad +$\{\,$printed when \MF\ starts$\,\}$ + +\bugonpage D2, lines 4 and 5 from the bottom (12/23/02) + +\tenpoint\noindent +types; there are no `{\bf var}' parameters, except in the case of files +or in the system-dependent \\{paint\_row} procedure; +there are no tag fields on variant records; there are no \\{real} variables; +no procedures are declared local to other procedures.) + +\bugonpage D16, new paragraph to follow line 26 (06/25/04) + +The first line is special also because it may be read before \MF\ has +input a base file. In such cases, normal error messages cannot yet +be given. The following code uses concepts that will be explained later. +(If the Pascal compiler does not support non-local {\bf goto}, the +statement `{\bf goto} \\{final\_end}' should be replaced by something that +quietly terminates the program.) + +\bugonpage D22, line 26 (09/11/07) + +\noindent +ASCII codes $[\Oct{60}\to\Oct{71},% +\Oct{136},\Oct{141}\to\Oct{146}]$ +must be printable. + +\bugonpage D31, line 29 (06/25/04) + +\noindent +This is the only nontrivial {\bf goto} statement in the +whole program. It is used when there is no\cutpar + +\bugonpage D42, replacement for lines 8--13 (12/23/02) + +\tenpoint\noindent\quad +Notice that if 64-bit integer arithmetic were available, +we could simply compute $(2^{29}*p+\nobreak q)\allowbreak\, +\hbox{\bf div}\,(2*q)$. +But when we are restricted to Pascal's 32-bit arithmetic we +must either resort to multiple-precision maneuvering +or use a simple but slow iteration. The multiple-precision technique +would be about three times faster than the code adopted here, but it +would be comparatively long and tricky, involving about sixteen +additional multiplications and divisions. + +\bugonpage D43, line 20 (12/23/02) + +\tenpoint\noindent +language or 64-bit substitute is advisable. + +\bugonpage D44, lines 24--26 (12/23/02) + +\tenpoint\noindent\quad +Once again it is a good idea to use 64-bit arithmetic if +possible; otherwise \\{take\_scaled} will use more than 2\% of the running time +when the Computer Modern fonts are being generated. + +\bugonpage D58, line 16 from the bottom (06/25/04) + +\ninepoint\noindent +\hskip5em{\bf if\/} $\\{j\_random}=0$ {\bf then} \\{new\_randoms} + {\bf else} \\{decr}(\\{j\_random}) + +\bugonpage D63, line 21 (06/25/04) + +Locations of \\{mem} between \\{mem\_min} and \\{mem\_top} may be dumped as +part +of preloaded base\cutpar + +\bugonpage D75, line 13 (06/25/04) + +\ninepoint\noindent +\quad{\bf define} $\\{fi\_or\_else}=2$\quad$\{\,$delimiters for conditionals + ({\bf elseif\/}, {\bf else}, {\bf fi})$\,\}$ + +\bugonpage D76, line 5 (06/25/04) + +\ninepoint\noindent +\quad{\bf define} $\\{type\_name}=30$\quad$\{\,$declare a type + ({\bf numeric}, {\bf pair}, etc.)$\,\}$ + +\bugonpage D77, line 16 (06/25/04) + +\ninepoint\noindent +\quad{\bf define} $\\{lig\_kern\_token}=76$\quad$\{\,$the operators + `{\bf kern}' and `\.{=:}' and `\.{=:\char'174}', etc.$\,\}$ + +\bugonpage D98, bottom two lines (06/25/04) + +\noindent +They consist of zero or more parameter tokens followed +by a code for the type of macro. + +\bugonpage D101, line 3 (06/25/04) + +\noindent +\MF\ user assigns a type to a variable like \.{x20a.b} by saying, for +example, `\.{boolean} \.{x[]a.b}'. + +\bugonpage D102, lines 10--16 (06/25/04) + +\noindent +variable that is relevant +when no attributes are attached to the parent. The \\{attr\_head} node +has the fields of either +a value node, a subscript node, or an attribute node, depending on what +the parent would be if it were not structured; but the subscript and +attribute fields are ignored, so it effectively contains only the data of +a value node. The \\{link} field in this special node points to an attribute +node whose \\{attr\_loc} field is zero; the latter node represents a collective +subscript `\.{[]}' attached to the parent, and its \\{link} field points to +the first non-special attribute node (or to \\{end\_attr} if there are none). + +\bugonpage D102, lines 7 and 8 from the bottom (06/25/04) + +\noindent +$\\{subscr\_head}(\\{q1})=\\{qq1}$; +\\{qq} is a three-word ``attribute-as-value'' node with +$\\{type}(\\{qq})=\break\\{numeric\_type}$ +(assuming that \.{x5} is numeric, because \\{qq} represents `\.{x[]}' +with no further\break + attributes), $\\{name\_type}(\\{qq})=\\{structured\_root}$, +$\\{attr\_loc}(\\{qq})=0$, $\\{parent}(\\{qq})=p$,\cutpar + +\bugonpage D103, line 6 (06/25/04) + +\noindent +The value of variable \.{x20b} +appears in node~$\\{qqq2}=\\{link}(\\{qqq1})$, as you can well imagine. +Similarly, the value of `\.{x.a}' appears in node $\\{q2}=\\{link}(\\{q1})$, +where $\\{attr\_loc}(\\{q2})=h(a)$ and $\\{parent}(\\{q2})=p$. + +\bugonpage D114, line 12 (06/25/04) + +\noindent +\qquad Such save stack entries are generated by {\bf save} commands. + +\bugonpage D120, line 3 (06/25/04) + +\ninepoint\noindent +[delete the line `The code here \dots', since the + code {\it doesn't\/} use the stated fact] + +\bugonpage D126, line 10 (06/25/04) + +\tenpoint\noindent +If $\theta_0$ is supposed to have a given value $E_0$, we simply +define $C_0=1$, $D_0=0$, and $R_0=E_0$.\cutpar + +\bugonpage D138, line 11 from the bottom (10/26/06) + +\tenpoint\noindent +for the bisected interval are $z'_0=z_0$ +and $z''_0=z_0+(Z'_1+Z'_2+\cdots+Z'_n)/2^{l+1}$. + +\bugonpage D142, line 3 (06/25/04) + +\tenpoint\noindent +out to hold if and only if $x_0\le x_1$ and $x_2\le x_3$, and either +$x_1\le x_2$ or $(x_1-x_2)^2\le(x_1-x_0)(x_3-x_2)$.\cutpar + +\bugonpage D142, line 8 (10/26/06) + +\tenpoint\noindent\quad +For example, if we start with $(x_1-x_0,x_2-x_1,x_3-x_2)= +(X_1,X_2,X_3)=(7,-16,39)$, the\cutpar + +\bugonpage D142, lines 21--23 (06/25/04) + +\tenpoint\noindent +monotonic +cubic, then $B(x_0,x_1,x_2,x_3;{1\over2})$ is always between +$.06[x_0,x_3]$ and $.94[x_0,x_3]$; and it is impossible for $\bar x$ +to be within~$\epsilon$ of such a number. Contradiction! +(The constant .06 is actually $(2-\sqrt3\,)/4$; the worst case +occurs for polynomials like $B(0,2-\sqrt3,1-\sqrt3,3;t)$.) + +\bugonpage D177, line 18 (06/25/04) + +\ninepoint\noindent +$\\{cur\_x},\\{cur\_y}$: \\{scaled};\quad$\{\,$outputs of \\{skew}, + \\{unskew}, and a few other routines$\,\}$ + +\bugonpage D182, lines 27--29 (06/25/04) + +\noindent +{\bf399.\quad}If + the segment numbers on the cycle are $t_1$, $t_2$, \dots, $t_m$, +and if $m\le\\{max\_quarterword}$, +we have $t_{k-1}\le t_k$ except for at most one value of~$k$. If there are +no exceptions, $f$ will point to $t_1$; otherwise it will point to the +exceptional~$t_k$. + +\bugonpage D184, line 18 (12/21/02) + +\ninepoint\noindent +\qquad\\{chopped}: \\{integer};\quad +$\{\,$positive if data truncated, negative if data dangerously large$\,\}$ + +\bugonpage D184, line 25 (12/21/02) + +\ninepoint\noindent +\quad{\bf if\/} $(\\{internal}[\\{autorounding}]>0)\land(\\{chopped}=0)$ + {\bf then} \\{xy\_round}; + +\bugonpage D184, line 27 (12/21/02) + +\ninepoint\noindent +\quad{\bf if\/} $(\\{internal}[\\{autorounding}]>\\{unity})\land + (\\{chopped}=0)$ {\bf then} \\{diag\_round}; + +\bugonpage D184, line 32 (12/21/02) + +\ninepoint\noindent +\qquad{\bf if\/} $(\\{internal}[\\{autorounding}]\le0)\lor(\\{chopped}\ne0)$ + {\bf then} \\{print\_spec}({\tt\char`",\]after\]subdivision\char`"}) + +\bugonpage D185, lines 15--19 (12/21/02) + +\ninepoint\noindent +\quad{\bf define} \\{procrustes}({\tt\char`#})${}\equiv{}${\bf if\/} + $\\{abs}(\.\#)\ge\\{dmax}$ {\bf then}\par\noindent +\qquad\qquad\quad{\bf if\/} $\\{abs}(\.\#)>\\{max\_allowed}$ {\bf then}\par +\noindent\qquad\qquad\qquad{\bf begin} $\\{chopped}\gets1$;\par\noindent +\qquad\qquad\qquad{\bf if\/} $\.\#>0$ {\bf then} $\.\#\gets\\{max\_allowed}$ + {\bf else} $\.\#\gets-\\{max\_allowed}$;\par\noindent +\qquad\qquad\qquad{\bf end}\par\noindent +\qquad\qquad\quad{\bf else if\/} $\\{chopped}=0$ {\bf then} + $\\{chopped}\gets-1$ + +\bugonpage D185, old line 22 (12/21/02) + +\ninepoint\noindent +\quad$p\gets\\{cur\_spec}$; $k\gets1$; $\\{chopped}\gets0$; + $\\{dmax}\gets\\{half}(\\{max\_allowed})$; + +\bugonpage D185, old line 28 (12/21/02) + +\ninepoint\noindent +\quad{\bf if\/} $\\{chopped}>0$ {\bf then} + +\bugonpage D196, lines 3--8 (06/25/04) + +The first job is to fix things so that $x(t)$ plus the horizontal +pen offset is an integer multiple of the +current ``granularity'' when the derivative $x'(t)$ crosses through zero. +The given cyclic path contains regions where $x'(t)\ge0$ and regions +where $x'(t)\le0$. The \\{quadrant\_subdivide} routine is called into action +before any of the path coordinates have been skewed, but some of them +may have been negated. In regions where $x'(t)\ge0$ we have $\\{right\_type}=% +\\{first\_octant}$ or $\\{right\_type}=\\{eighth\_octant}$; in regions where +$x'(t)\le0$, +we have $\\{right\_type}=\\{fifth\_octant}$ or $\\{right\_type}=\\{fourth% +\_octant}$. + +\bugonpage D196, lines 15 and 16 (06/25/04) + +\noindent +current pen might be unsymmetric in such a way that $x$ coordinates +should round dif-\break ferently in different parts of the curve. +These considerations imply that round$(x_0)$\cutpar + +\bugonpage D200, line 4 (06/25/04) + +\noindent +and that there are similar ways to address other important offsets.\par +\smallskip\ninepoint +[Also delete the definitions of \\{north\_south\_edge}, etc., +on lines 11--15; those definitions are never used.] + +\bugonpage D212, line 18 (06/25/04) + +\noindent +at $(x_0,y_0)$ and ends at $(x_1,y_1)$, it's possible to +prove (by induction on the length of the truncated\cutpar + +\bugonpage D216, bottom line (06/25/04) + +\noindent +we list it twice (with coordinates +interchanged, so as to make the second octant look like\cutpar + +\bugonpage D217, lines 2--10 (06/25/04) + +\noindent +$$\tabskip\centering +\halign to\hsize{$\hfil#\;\mapsto\;{}$\tabskip=0pt& +$#\hfil$&\quad in the #\hfil\tabskip\centering\cr +w_2\;w_2\;w_2&(-5,6)\;(-5,6)\;(-5,6)\cr +\noalign{\vskip\belowdisplayskip +\vbox{\noindent\strut as the list of transformed and skewed offsets to use +when curves that travel in the second octant. Similarly, we will have\strut} +\vskip\abovedisplayskip} +w_2\;w_2\;w_2&(7,-6)\;(7,-6)\;(7,-6)&third;\cr +w_2\;w_2\;w_3\;w_3&(-7,1)\;(-7,1)\;(-3,2)\;(-3,2)&fourth;\cr +w_3\;w_3\;w_3&(3,-2)\;(3,-2)\;(3,-2)&fifth;\cr +w_3\;w_3\;w_0\;w_0&(-3,1)\;(-3,1)\;(1,0)\;(1,0)&sixth;\cr +w_0\;w_0\;w_0&(1,0)\;(1,0)\;(1,0)&seventh;\cr +w_0\;w_0\;w_0&(-1,1)\;(-1,1)\;(-1,1)&eighth.\cr}$$ + +\bugonpage D218, lines 2 and 3 (06/25/04) + +\noindent +count followed by pointers to the eight offset lists, followed +by an indication of the pen's range of values. + +\bugonpage D218, line 15 (06/25/04) + +The \\{link} field of a pen header node should be \\{null} if and only if +the pen is a single point. + +\bugonpage D227, line 11 (06/25/04) + +\noindent +\\{endpoint}. The cubics all have +monotone-nondecreasing $x(t)$ and $y(t)$. + +\bugonpage D228, lines 4--7 from the bottom (06/25/04) + +\noindent +In odd-numbered octants, the numerator and denominator of this fraction +will be nonnegative; in even-numbered octants they will both be nonpositive. +Furthermore we always have $0=s_0\le s_1\le\cdots\le s_n=\infty$. The goal of +\\{offset\_prep} is to find an offset index~$k$ to associate with +each cubic, such that the slope $s(t)$ of the cubic satisfies + +\bugonpage D231, line 7 (06/25/04) + +\ninepoint\noindent +\quad{\bf if\/} $\\{abs}(\\{du})\ge\\{abs}(\\{dv})$ {\bf then}\quad $\{\, + s_{k-1}\le1$ or $s_k\le1\,\}$ + +\bugonpage D231, line 16 (06/25/04) + +\noindent +and return towards $s_{k-1}$ or $s_k$, +respectively, yielding another solution of $(*)$. + +\bugonpage D246, line 4 from the bottom (06/25/04) + +\noindent +dinate fields. Hence, for example, +the point $\bigl($$\\{x\_coord}(p)-\\{left\_v}(q),\\{y\_coord}(p)+% +\\{right\_u}(p)$$\bigr)$ +also\cutpar + +\bugonpage D248, lines 14 and 15 (01/06/14) + +\noindent +the $x$-axis at the point +$\bigl((a^2-b^2)\sin\theta\cos\theta/\rho\bigr)+i\rho$, where +\vadjust{\vskip1pt}% +$\rho=\sqrt{(a\sin\theta)^2+(b\cos\theta)^2}$. It reaches +furthest to the right of~the $y$-axis at the point +$\sigma+i(a^2-b^2)\sin\theta\cos\theta/\sigma$, where +$\sigma=$\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 D251, line 1 (01/06/14) + +\noindent +{\bf536.\quad}Only the coordinates need to be copied, not the class numbers +and other stuff. At this point either $\\{link}(p)$ or +$\\{link}(\\{link}(p))$ is \\{null}. + +\bugonpage D251, line 10 (01/06/14) + +\ninepoint\noindent +\\{done1}: {\bf if\/} $(\\{link}(p)\ne\\{null})$ {\bf then} +$\\{free\_node}(\\{link}(p),\\{knot\_node\_size})$;\hfil\break +\null\quad$\\{link}(p)\gets s$; +$\\{beta}\gets-\\{y\_coord}(h)$; + +\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 becomes two lines (06/25/04) + +\ninepoint\noindent +\qquad{\bf begin} $\\{nonlinear\_eq}(v,\\{cur\_exp},\\{false})$; + $\\{cur\_type}\gets t$; + {\bf goto} \\{done}; + +\bugonpage D443, line 11 (06/25/04) + +\ninepoint\noindent +\\{done}: {\bf if\/} $\\{eq\_type}(x)\mathbin{\hbox{\bf mod}}\\{outer\_tag} + \ne\\{tag\_token}$ {\bf then} + $\\{clear\_symbol}(x,\\{false})$; + +\bugonpage D452, line 9 (06/25/04) + +\noindent +though they don't necessarily correspond to primitive tokens. + +\bugonpage D476, line 12 from the bottom (06/25/04) + +\ninepoint\noindent +\quad{\bf if\/} $\\{nl}-\\{skip\_table}[c]>128$ {\bf then} + +\bugonpage D483, line 7 (06/25/04) + +\ninepoint\noindent +\quad$\\{max\_tfm\_dimen}\gets16\ast\\{internal}[\\{design\_size}]-1 + -\\{internal}[\\{design\_size}]\mathbin{\hbox{\bf div}}\Oct{10000000}$; + +\bugonpage D483, lines 15--17 (06/25/04) + +\ninepoint\noindent +\qquad{\bf if\/} $x>0$ {\bf then} + $x\gets\\{max\_tfm\_dimen}$ {\bf else} + $x\gets-\\{max\_tfm\_dimen}$;\par\noindent +\qquad{\bf end};\par\noindent +\quad$x\gets\\{make\_scaled}(x\ast16,\\{internal}[\\{design\_size}])$; + +\bugonpage D496, line 2 (06/25/04) + +\noindent +a pointer to +an edge structure. Its mission is to describe the positive pixels +in \.{GF} form,\cutpar + +\bugonpage D500, line 16 (06/25/04) + +\ninepoint\noindent +\quad$\\{selector}\gets\\{old\_setting}$; + $\\{gf\_out}(\\{cur\_length})$; + $\\{gf\_string}(0,\\{make\_string})$; + $\\{decr}(\\{str\_ptr})$; + +\bugonpage D506, lines 8--10 (06/25/04) + +\noindent +\MF\ it says, +for example, `\.{(preloaded base=plain 1984.2.29)}', showing the year, +month, and day that the base file was created. We have $\\{base\_ident}=0$ +before \MF's tables are loaded. + +\bugonpage D514, line 14 from the bottom (06/25/04) + +\noindent +\.{CMMF}, should also be provided for commonly used bases such as \.{cmbase}. + +% volume E +\hsize=29pc + +\newbox\shorthyf \setbox\shorthyf=\hbox{-\kern-.05em} +\mathchardef\period=`\. +{\catcode`\-=\active \global\def-{\copy\shorthyf\mkern3.9mu} + \catcode`\.=\active \global\def.{\period\mkern3mu}} +\def\8#1{\mathrel{\mathcode`\.="8000 \mathcode`\-="8000 + #1\unkern}} % `..' and `--' + +\bugonpage E1, line 3 (01/06/06) + +\tenpoint\noindent +Zillions of alphabets can be generated by the programs in this book. +All\cutpar + +\bugonpage E6, lines 16--19 (12/29/04) + +\textindent\bull + {\it square\_dots\/} tells whether dots should be square, not rounded;\smallskip +\textindent\bull + {\it hefty\/} tells whether weight-reducing strategies should be used;\smallskip +\textindent\bull\hangindent\parindent + {\it monospace\/} tells whether the characters should all be forced to + have the same width; + +\bugonpage E7, line 11 (12/21/02) + +\ninepoint\indent +\\{hair}, \\{vair}, \\{stem}, \\{curve}, \\{ess}, \\{flare}, \\{dot\_size}, + \\{bar}, \\{slab}, + +\bugonpage E7, line 14 (12/21/02) + +\ninepoint\indent +\\{crisp}, \\{tiny}, \\{fine}; +\medskip\noindent +and \\{thin\_join} should not be less than \\{fine}. + +\bugonpage E19, line 19 (11/07/01) + +\tenpoint +\line{\\{cap\_notch\_cut}\hskip 0pt plus1.5fil46/36\hfil31/36\hfil25/36\hfil +24/36\hfil22/36\hskip0pt plus3fil25/36} + +\bugonpage E41, line 8 (12/21/02) + +\ninepoint\noindent\mathchardef\AM="2026 % ampersand +\quad$\\{extra\_endchar}\gets\\{extra\_endchar}\AM + \.{\char`"charcode:=charcode+code\char`\_offset;"}$; + +\bugonpage E53, line 7 (12/21/02) + +\def\frac#1/#2{\leavevmode\kern.1em + \raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em + /\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}} +\ninepoint\noindent +{\bf numeric} \\{mid\_thickness}; + $\\{mid\_thickness}={\rm Vround}$ \frac1/3[$\\{vair},\\{stem}$]; + +\bugonpage E125, line 6 from the bottom (07/10/05) + +\ninepoint\noindent +$\\{top}\,y_1=\\{top}\,y_6=h$; $z_2=.5[z_3,z_1]+\\{bend}$; + +\bugonpage E125, line 3 from the bottom (07/10/05) + +\ninepoint\noindent +{\bf draw} $z_1-\\{flourish\_change}\{\\{up}\}+(0,.15\\{asc\_height}) + \{\\{up}\}$\par +\line{\quad$\8{...}\{\\{right}\}(z_1+(2u,0))\8{---}z_6\8{...}\{\\{down}\}z_7$; + \hfil\% upper bar} + +\bugonpage E146, also pages 164 and 540 (02/08/03) + +\eightpoint\noindent +[The labels on the new illustrations of beta, omega, and spadesuit +are too large, and the resolution of the shapes is too small.] + +\bugonpage E147, line 11 from the bottom (04/23/04) + +\ninepoint\noindent +$x_0=x_1=x_9$; $\\{lft}\,x_{0r}={\rm hround}(1.5u-.5\\{hair})$; +$x_2=x_4=x_6=x_8=.5w-.25u$; + +\bugonpage E147, line 8 from the bottom (04/23/04) + +\ninepoint\noindent +$y_5=.5[y_4,y_6]$; $\\{top}\,y_{6r}-\\{bot}\,y_{4r}=\\{vstem}+\\{eps}$; + $\\{bot}\,y_{8r}=-\\{oo}$; $y_7=y_9=.55[y_6,y_8]$; + +\bugonpage E149, line 8 from the bottom (04/23/04) + +\ninepoint\noindent +$y_5+.1\\{x\_height}=y_7=.5[y_6,y_8]$; $\\{bot}\,y_{6r}=-\\{oo}$; + +\bugonpage E157, line 11 (02/29/08) + +\ninepoint\noindent +\line{{\bf filldraw} $z_{1l}\8{--}z_{2l}\8{...}(x_3,y_{2l})\8{...}z\8{--} + z_{1r}\8{--}\rm cycle$;\hfil\% stem} + +\bugonpage E161, line 7 from the bottom (04/23/04) + +\ninepoint\noindent +$\\{top}\,y_{1r}=\\{x\_height}+\\{oo}$; $y_2=y_4=.5[y_1,y_3]$; + $\\{bot}\,y_{3r}=-\\{oo}$; + +\bugonpage E209, line 3 (12/29/04) + +\ninepoint +\rightline{\% This lowercase italic alphabet was prepared by D. E. Knuth + in December, 1979,} + +\bugonpage E377, lines 3 and 4 from the bottom (12/22/02) + +\ninepoint\noindent +\qquad {\bf path} \\{p\_}; $\\{p\_}=z_{\$\$l}\{z_{@1}-z_{\$\$l}\}\8{...} + \\{darkness}[z_{@1},.5[z_{@2},z_{\$\$l}]]\8{...}z_{@2}$\par\noindent +\qquad\quad$\8{---}z_{\$l}\8{--}z_{\$r}\8{--}z_{@0}\8{--}z_{\$\$r}\8{--}% + {\rm cycle}$;\par\noindent +\qquad{\bf if\/} $(y_{\$\$}>y_\$) \ne ({\rm ypart}\,\hbox{\bf precontrol}\,1 + \,\hbox{\bf of\/}\,\\{p\_} > {\rm ypart}\,\hbox{\bf postcontrol}\,1\, + \,\hbox{\bf of\/}\,\\{p\_})$:\par\noindent +\qquad\quad$\\{p\_}=z_{\$\$l}\{z_{@1}-z_{\$\$l}\}\8{...} + \\{darkness}[z_{@1},.5[z_{@2},z_{\$\$l}]]$\par\noindent +\qquad\qquad$\8{---}z_{\$l}\8{--}z_{\$r}\8{--}z_{@0}\8{--}z_{\$\$r}\8{--}% + {\rm cycle}$;\ {\bf fi}\par\noindent +\line{\qquad {\bf filldraw} \\{p\_};\hfil \% arm and beak} + +\bugonpage E379, lines 17 and 18 become one line (01/06/14) + +\ninepoint\noindent +{\bf else}: $\\{rt}\,x_{6r}={\rm hround}(w-1.5u)$; +$y_{6}=y_{5l}+\\{eps};$ {\bf fi} + +\bugonpage E379, bottom line of the program (01/06/14) + +\def\SH{\raise.7ex\hbox{$\scriptstyle\#$}} % sharp sign for sharped units +\ninepoint\noindent +{\bf math\_fit}$(0,\\{ic}\SH-2.5u\SH)$; +{\bf penlabels}$(0,1,2,3,4,5,6,7)$; +{\bf endchar}; + +\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) + +\parindent=36pt +The most important general routine in |cmbase| is probably the {\it pos}\cutpar + +\bugonpage E551, line 3 from the bottom (12/29/04) + +\noindent quantities needed in the |calu| +programs are also established at this time. + + +\bugonpage E577, right column (12/23/02) + +\eightpoint\noindent +\\{p\_}\kern1pt, 305, 377.\par\noindent +{\bf padded}, 103--111, 117--121, $\underline{549}$. + +\bugonpage E578, left column (12/23/02) + +\eightpoint\noindent +{\bf postcontrol}, 347, 377.\par\noindent +{\bf precontrol}, 347, 377. + +\bye diff --git a/Master/texmf-dist/source/generic/knuth/errata/errorlog.tex b/Master/texmf-dist/source/generic/knuth/errata/errorlog.tex index 49bb6c0450b..dfb201b7377 100644 --- a/Master/texmf-dist/source/generic/knuth/errata/errorlog.tex +++ b/Master/texmf-dist/source/generic/knuth/errata/errorlog.tex @@ -1946,7 +1946,7 @@ R567. Don't ship out incredibly huge pages; they might foul up * 2 Dec 1982 G568. Add new features |\everymath| and |\everydisplay|. @1139,1145 G569. Add a new feature |\futurelet|. @1221 -# The changes above have been incorporated into Version 0.9 of TeX. +# The changes above have been incorporated into Version 0.9 of \TeX. * 7 Dec 1982 G570. Add a new |\endinput| primitive (suggested by FY). @362,378 * 8 Dec 1982 @@ -2694,7 +2694,7 @@ A848\>742. Calculate the empty-line condition properly when \\{end_line_char} is E849. Avoid closing a file when \TeX\ knows that it isn't open (JS). @560 * 3 Aug 1987 S850. Clean up unfinished output if it's necessary to - \\{jump_out} (Klaus Gunterman). @642 + \\{jump_out} (Klaus Guntermann). @642 # That makes Version 2.3; subsequent version numbers won't be logged here. * 19 Aug 1987 A851. Indent rules properly in cases like\hfil\break @@ -2887,7 +2887,7 @@ R932. Avoid overflow on huge real-to-integer conversion. @625,634 * 19 March 1995 R933. Avoid spurious reference counts in format files (PB). @1335 * 23 November 1998 -R934. Make sure that TeX is certifiably Y2K-safe. @1328 +R934. Make sure that \TeX\ is certifiably Y2K-safe. @1328 * 12 July 1999 A935\>255. |\xleaders| often drops the final box (Hiroshi Nakashima). @627,636 * 30 August 2001 @@ -2899,14 +2899,25 @@ Q938. Improve rounding of glue during output (M. F. Bridgland). @625,634 * 18 March 2008 F939. Forgot to goto the proper error recovery (DRF). @395 E940. Avoid a case of dirty Pascal and speed up inner loop. @1035 -R941. Forget reference to last_glue in format file (DRF). @1335 +R941. Forget reference to \\{last_glue} in format file (DRF). @1335 R942. Glue reference not updated after overflow error (DRF). @1236 -B943. Muglue in \leaders had wrong units; now disallowed (DRF). @1078 +B943. Muglue in |\leaders| had wrong units; now disallowed (DRF). @1078 E944. Speedup of ligatures and kerns at end of a word (DRF). @1039 -R945. Another sanity check of TFM files for security (DRF). @365 +R945. Another sanity check of TFM files for security (DRF). @565 I946. Give better size data for unmagnified insertions. @986 * 6 January 2014 -C947. Space after \csname\endcsname to match other spaces. (Oleg Bulatov) @262 +C947. Space after |\csname\endcsname| to match other spaces. (Oleg Bulatov) @262 +* 15 January 2021 +I948. Don't pause on errors when tracing paragraphs (Udo Wermuth). @826 +S949. Don't try to interact when in |\batchmode| (Xiaosa Zhang). @83 +S950. Don't try to edit when no file is active (Xiaosa Zhang). @84 +R951. Take date and time sometimes from system, not user (Udo Wermuth). @241,536 +B952. Don't allow implicit left brace after |#| (Udo Wermuth). @476 +R953. After nine parameters, must delete offending tokens (Bruno Le Floch). @476 +D954. Garbage visible in buffer after file ends prematurely (DRF). @486 +R955. Force nonexistent characters to have null specs (DRF). @722 +C956. Don't mark fraction noads as temporarily Inner (DRF). @761 +Q957. Reset |\newlinechar| before logging the stats (Udo Wermuth). @1333,1335 \relax \bye diff --git a/Master/texmf-dist/source/generic/knuth/tex/glue.web b/Master/texmf-dist/source/generic/knuth/tex/glue.web index 38a6d667c88..add1903b506 100644 --- a/Master/texmf-dist/source/generic/knuth/tex/glue.web +++ b/Master/texmf-dist/source/generic/knuth/tex/glue.web @@ -7,7 +7,7 @@ \def\title{GLUE} \def\topofcontents{\null - \def\titlepage{F} % include headline on the contents page + \titlefalse % include headline on the contents page \def\rheader{\mainfont\hfil \contentspagenumber} \vfill \centerline{\titlefont Fixed-Point Glue Setting} diff --git a/Master/texmf-dist/source/generic/knuth/web/webman.tex b/Master/texmf-dist/source/generic/knuth/web/webman.tex index 61e12a28789..e4781c1da77 100644 --- a/Master/texmf-dist/source/generic/knuth/web/webman.tex +++ b/Master/texmf-dist/source/generic/knuth/web/webman.tex @@ -622,7 +622,8 @@ in the final \PASCAL\ program. The \.{TANGLE} processor will convert `\.{@\{}' into `\.\{' in the \PASCAL\ output file, unless the output is already part of a meta-comment; in the latter case `\.{@\{}' is converted into `\.[', since \PASCAL\ does not allow -nested comments. Incidentally, module numbers are automatically inserted +nested comments. The \.{WEAVE} processor outputs `\.{@\{}'. +Incidentally, module numbers are automatically inserted as meta-comments into the \PASCAL\ program, in order to help correlate the outputs of \.{WEAVE} and \.{TANGLE} (see Appendix~C\null). Meta-comments can be used to put conditional text into a \PASCAL\ program; this helps to @@ -633,6 +634,7 @@ boolean expressions. \@\} [P] The end of a ``meta comment'' is indicated by `\.{@\}}'; this is converted either into `\.\}' or `\.{]}' in the \PASCAL\ output, according to the conventions explained for \.{@\{} above. +The \.{WEAVE} processor outputs `\.{@\}}'. \@\& [P] The \.{@\&} operation causes whatever is on its left to be adjacent to whatever is on its right, in the \PASCAL\ output. No spaces or @@ -812,7 +814,7 @@ comment that includes a brace in a string in \pb---e.g., `\.{\{{ }look at this |"\{"| \}}'---will be handled correctly by \.{WEAVE}, but \.{TANGLE} will think there is an unmatched left brace. In order to satisfy both processors, one can write `\.{\{{ }look at this \\leftbrace\\{ }\}}', after -setting up`\.{\\def\\leftbrace\{|"\{"|\}}'. +setting up `\.{\\def\\leftbrace\{|"\{"|\}}'. 7. Reserved words of \PASCAL\ must appear entirely in lowercase letters in the \.{WEB} file; otherwise their special nature will not be recognized @@ -1196,7 +1198,7 @@ WRITE(TERMOUT,'(That was a fatal error, my friend.)');END;END{:263}; END.{:261} ?endgroup \vfill\eject -\pageno=197 % take account of the page numbers for App's D and E. +\pageno=200 % take account of the page numbers for App's D and E. \def\runninghead{APPENDIX F --- MACROS FOR FORMATTING} \section Appendix F: The \.{webmac.tex} file. This is the file that extends ``plain \TeX'' format in order to support the @@ -1590,7 +1592,7 @@ define all the ``switches'' like \&{debug} and \&{gubed} to be null in your first change files; then you can sure that your compiler will handle all of the code.) \step(4) Make the changes of (2) in your copy of \.{TANGLE.PAS}. (If these -changes are extensive, you might be better off finding some computer that +changes are extensive, you might be better off finding some computer that already has \.{TANGLE} running, and making the new \.{TANGLE.PAS} from \.{TANGLE.WEB} and your \.{TANGLE.CH}.) \step(5) Use your \PASCAL\ compiler to convert your copy of \.{TANGLE.PAS} diff --git a/Master/texmf-dist/tex/plain/base/gkpmac.tex b/Master/texmf-dist/tex/plain/base/gkpmac.tex index 1ae0f1a7a68..5b143505a21 100644 --- a/Master/texmf-dist/tex/plain/base/gkpmac.tex +++ b/Master/texmf-dist/tex/plain/base/gkpmac.tex @@ -4,12 +4,12 @@ % Fonts for regular text -\font\textrm=ccr10 % roman -\font\textit=ccti10 % italic (emphasis) -\font\textsl=ccsl10 % slanted (titles) -\font\textbf=cmbx10 % bold -\font\textcsc=cccsc10 % caps and small caps -\font\oldsty=ccmi10 % equation numbers +\font\textrm=ccr10 % roman +\font\textit=ccti10 % italic (emphasis) +\font\textsl=ccsl10 % slanted (titles) +\font\textbf=cmbx10 % bold +\font\textcsc=cccsc10 % caps and small caps +\font\oldsty=ccmi10 % equation numbers \font\twelvett=cmtt12 % Fonts for regular math @@ -266,8 +266,8 @@ \smallskip\noindent} \def\beginsection#1 #2 \par{ % should not be first in the chapter - \backup=\lastskip % but should come on first or second page of chapter - \mark{#1\enspace #2} % because the mark gives running head on right page + \backup=\lastskip % but should come on first or second page of chapter + \mark{#1\enspace #2} % because the mark gives running head on right page \nobreak\vskip-\backup\penalty-200 {\subtitle\baselineskip=34pt \noindent\hbox to2\parindent{#1\hfil}\uppercase{\kern-.05em#2}\par} @@ -413,8 +413,8 @@ \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\htrimsize \htrimsize=7.375in +\newdimen\vtrimsize \vtrimsize=9.25in \newdimen\outermargin \outermargin=23mm \newdimen\topmargin \topmargin=10mm % plus height of the headline box \newbox\htrim \newbox\vtrim \newbox\trimmarks @@ -438,14 +438,15 @@ \vbox to\vtrimsize{\kern\topmargin\fi \vbox to\totheight{ \offinterlineskip % butt the boxes together + \vskip2.5pt % adjustment at the top (10 Jan 2011) \vbox to 2pc{ % this part goes on top of the regular pages \ifodd\pageno \rightheadline\else\leftheadline\fi \vfill} % this completes the \vbox to 2pc \ifodd\pageno\moveright7pc\fi #1 \vfill \iftitle \global\titlefalse % reset the titlepage switch - \ifodd\pageno \hbox to35pc{\hfil\foliofont\folio} - \else\hbox{\foliofont\folio}\fi\fi + \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 @@ -489,9 +490,9 @@ \catcode`\|=\active \expandafter\def\expandafter\dospecials\expandafter{\dospecials\do\|} -\newcount\defcount % number of old definitions not yet repeated -\newcount\changecount % number of new definitions that are changed -\newcount\miscount % number of unknown references +\newcount\defcount % number of old definitions not yet repeated +\newcount\changecount % number of new definitions that are changed +\newcount\miscount % number of unknown references \newread\tempin \def\refin#1 {\openin\tempin=#1.ref @@ -763,6 +764,7 @@ \def\And{\quad{\rm and}\quad} \let\==\equiv \def\tmod#1{(mod~$#1$)} +\def\pmod#1{\allowbreak\mkern18mu\hbox{(}{\rm mod}\,\,#1\hbox{)}} \let\implies=\Longrightarrow \def\?{\hbox{!`}} % subfactorial \def\hyp{\mathop{F{}}\nolimits\hyper} @@ -770,14 +772,14 @@ \def\hyper#1#2#3{\mathchoice{\tightplus \hbox{$\displaystyle\biggl({#1\atop#2}\Big\vert\,{#3}\!\biggr)$}}% {\bigl({#1\atop#2}\vert\mskip2mu#3\bigr)}% - {}{}} % used only in D and T styles + {}{}} % used only in D and T styles %\def\hypk_#1{\mathop{F{}}_{#1}\nolimits\hyper} % confl with mFn convention \def\hypk_#1#2#3#4{\mathop{F{}}\mathchoice{\tightplus \hbox{$\displaystyle\biggl({#2\atop#3}\Big\vert\,{#4}\!\biggr)$}% \lower\fontdimen11\mathsym\hbox{$\scriptstyle\!#1$}}% {\bigl({#2\atop#3}\vert\mskip2mu#4\bigr)\lower\fontdimen12\mathsym \hbox{$\scriptstyle\!#1$}}% - {}{}} % used only in D and T styles + {}{}} % used only in D and T styles \def\double(#1\choose#2){\mathchoice{\biggl(\!\!{#1\choose#2}\!\!\biggr)} {\bigl(\!{#1\choose#2}\!\bigr)}{}{}} % only D and T styles \def\hypstrut{\vphantom{_1\_^k}} % if there's another denominator with \_^k @@ -853,9 +855,9 @@ \hyphenation{logical Mac-Mahon hyper-geo-metric hyper-geo-met-rics Ber-noulli} -\preprintfalse % WE ARE MAKING THE REAL BOOK! -\inxmodetrue % WE ARE PREPARING A ROUGH INDEX -\showmissestrue % THE REFERENCES SHOULD ALL BE READY NOW +\preprintfalse % WE ARE MAKING THE REAL BOOK! +\inxmodetrue % WE ARE PREPARING A ROUGH INDEX +\showmissestrue % THE REFERENCES SHOULD ALL BE READY NOW \ifinxmode\immediate\openout\inx=\jobname.inx \fi % file for index reminders \ifinxmode\immediate\openout\bnx=\jobname.bnx \fi % file for bib reminders @@ -883,7 +885,8 @@ \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 +\else\message{OK, I'll ship only the requested pages!} + \hoffset=-.5in\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/letter.tex b/Master/texmf-dist/tex/plain/base/letter.tex deleted file mode 100644 index 531a8b520df..00000000000 --- a/Master/texmf-dist/tex/plain/base/letter.tex +++ /dev/null @@ -1,119 +0,0 @@ -% This macro file is for business letters - -\def\today{\ifcase\month\or - January\or February\or March\or April\or May\or June\or - July\or August\or September\or October\or November\or December\fi - \space\number\day, \number\year} -\def\narrower{\advance\leftskip by 20pt \advance\rightskip by 20pt } - -\raggedbottom -\interlinepenalty=1000 -\hsize=6.25truein \voffset=24pt \advance\vsize by-\voffset -\parindent=0pt \parskip=0pt -\nopagenumbers -\headline={\ifnum\pageno>1 - \tenrm To \addressee\hfil\today\hfil Page \folio - \else\hfil\fi} - -\def\beginlinemode{\endmode - \begingroup\obeylines\def\endmode{\par\endgroup}} -\def\beginparmode{\endmode - \begingroup\parskip=\medskipamount \def\endmode{\par\endgroup}} -\let\endmode=\par -\def\endletter{\endmode\vfill\supereject \pageno=1 } - -\newdimen\longindentation \longindentation=4truein -\newbox\theaddress -\def\address{\beginlinemode\getaddress} -{\obeylines\gdef\getaddress#1 - #2 - {\gdef\addressee{#2\unskip}% - \global\setbox\theaddress=\vbox\bgroup\raggedright% - \hsize=\longindentation \everypar{\hangindent2em}#2 - \def\endmode{\egroup\endgroup \copy\theaddress \bigskip}}} - -\def\body{\beginparmode} -\def\closing{\beginlinemode\getclosing} -{\obeylines\gdef\getclosing #1 - #2 - {\nobreak\bigskip \leftskip=\longindentation #2 - \nobreak\bigskip\bigskip\bigskip % space for signature - \def - {\endgraf\nobreak}}} -\def\annotations{\beginlinemode\def\par{\endgraf\nobreak}\obeylines\par} -\def\ps{\beginparmode\nobreak - \interlinepenalty5000\def\par{\endgraf\penalty5000}} -\def\cc{\beginparmode\nobreak - \interlinepenalty5000\def\par{\endgraf\penalty5000}} - -\def\up#1{\leavevmode \raise.16ex\hbox{#1}} -\font\smallheadfont=cmr8 at 8truept -\font\largeheadfont=cmbx10 at 14.4truept -\font\logofont=stan70 at 70truept -\def\stanfordseal{\vbox{\kern-3truept\hbox{\logofont A}\kern-3truept}} - -\def\csdreturn{Computer Science Department\par \stanfordreturn} -\def\stanfordreturn{Stanford University\par - Stanford, CA 94305\kern.5pt-21\kern-.5pt40 USA\par} -\def\letterhead{\pageno=1 \univletterhead - {\leftskip=\longindentation - {\baselineskip9truept\smallheadfont\sendingaddress} - \bigskip\bigskip\rm\today\bigskip}} -\def\specrule#1{\nointerlineskip - \line{\hbox to 60truept{\hrulefill - \hphantom{\stanfordseal\kern-#1truept}% - \hrulefill}\hrulefill}\nointerlineskip} -\def\univletterhead{\vglue-34pt - \specrule{11}\vskip8truept - \hbox{\hbox to\longindentation{\smash{\hbox to60truept{\hfil\kern2.5truept - \lower10truept\stanfordseal\hfil}}% - \largeheadfont STANFORD UNIVERSITY\hfil}% - \smallheadfont STANFORD, CALIFORNIA 94305\kern.5pt-21\kern-.5pt40} - \vskip6truept\specrule{17}\vskip13truept } - -\def\deklet{ - \def\sendingaddress{DONALD E. KNUTH\par - Professor Emeritus of The Art of\par - \qquad Computer Programming\par - Department of Computer Science\par - Telephone \up[415\up]\thinspace 723-4367\par} - \def\returnaddress{Prof.~D. E. Knuth\par \csdreturn} - \letterhead} - -\def\memoto{\beginlinemode\parindent=60truept - \everypar{\hangindent70truept}\startmemo} -\def\bigmemoto{\beginlinemode\parindent=60pt % use this for magstep>1! - \everypar{\hangindent70pt}\startmemo} -\def\textin#1{\noindent\hbox to\parindent{#1\hss}\ignorespaces} -{\obeylines\gdef\startmemo #1 - {\gdef\addressee{#1}% - \global\pageno=1 \vglue-34pt\specrule{11}\vskip8truept - \leftline{\smash{\hbox to60truept{\hfil\kern2.5truept - \lower10truept\stanfordseal\hfil}}% - \largeheadfont Stanford Computer Science Department % - \rm\today}% - \vskip6truept\specrule{20}\bigskip\bigskip\bigskip% - \textin{Memo to:}#1 - \def\endmode{\par\endgroup\bigskip}} - \gdef\from #1 - {\smallskip\textin{From:}#1 - } - \gdef\subject #1 - {\smallskip\textin{Subject:}#1 - } -} - -\def\makelabel{\endletter\hbox{\vrule - \vbox{\hrule \kern6truept - \hbox{\kern6truept\stanfordseal\kern3pt - \vbox{\smallheadfont\baselineskip9truept\hsize=2truein\returnaddress} - \kern6truept}\kern6truept\hrule}\vrule} - \kern.1truein - \hbox{\vrule - \vbox{\hrule \kern12truept - \hbox{\kern12truept\copy\theaddress - \kern12truept}\kern12truept\hrule}\vrule} - \pageno=0\vfill\eject} - -\def\frac#1/#2{\leavemode\kern.1em\raise.5ex\hbox{\the\scriptfont0 - #1}\kern-.1em/\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}} diff --git a/Master/texmf-dist/tex/plain/base/letterformat.tex b/Master/texmf-dist/tex/plain/base/letterformat.tex new file mode 100644 index 00000000000..bc2144a3c15 --- /dev/null +++ b/Master/texmf-dist/tex/plain/base/letterformat.tex @@ -0,0 +1,85 @@ +% This macro file is for business letters + +\def\today{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} + +\raggedbottom +\interlinepenalty=1000 +\hsize=6.25truein +\voffset=24pt +\advance\vsize by-\voffset +\parindent=0pt +\parskip=0pt +\nopagenumbers +\headline={\ifnum\pageno>1 + \tenrm To \addressee\hfil\today\hfil Page \folio + \else\hfil\fi} + +\def\beginlinemode{\endmode + \begingroup\obeylines\def\endmode{\par\endgroup}} +\def\beginparmode{\endmode + \begingroup\parskip=\medskipamount \def\endmode{\par\endgroup}} +\let\endmode=\par +\def\endletter{\endmode\vfill\supereject} + +\newdimen\longindentation \longindentation=4truein +\newbox\theaddress +\def\address{\beginlinemode\getaddress} +{\obeylines\gdef\getaddress #1 + #2 + {#1\gdef\addressee{#2}% + \global\setbox\theaddress=\vbox\bgroup\raggedright% + \hsize=\longindentation \everypar{\hangindent2em}#2 + \def\endmode{\egroup\endgroup \copy\theaddress \bigskip}}} + +\def\body{\beginparmode} +\def\closing{\beginlinemode\getclosing} +{\obeylines\gdef\getclosing #1 + #2 + {#1\nobreak\bigskip \leftskip=\longindentation #2 + \nobreak\bigskip\bigskip\bigskip % space for signature + \def + {\endgraf\nobreak}}} +\def\annotations{\beginlinemode\def\par{\endgraf\nobreak}\obeylines\par} +\def\ps{\beginparmode\nobreak + \interlinepenalty5000\def\par{\endgraf\penalty5000 }} + +\def\up#1{\leavevmode \raise.16ex\hbox{#1}} +\font\smallheadfont=cmr8 at 8truept +\font\largeheadfont=cmdunh10 at 14.4truept +\font\logofont=manfnt at 14.4truept + +\def\rjdletterhead{ + \def\sendingaddress{R. J. DROFNATS, F.T.U.G.\par + PROFESSOR OF FARM ECOLOGY\par + TEX.RJD @ SU-SCORE.ARPA\par + \up[415\up]\thinspace 497-4975\par} + \def\returnaddress{R. J. Drofnats, Dept.~of Farm Ecology\par + The University of St.~Anford\par + P. O. Box 1009, Haga Alto, CA 94321 USA} + \letterhead} + +\def\letterhead{\pageno=1 \def\addressee{} \univletterhead + {\leftskip=\longindentation + {\baselineskip9truept\smallheadfont\sendingaddress} + \bigskip\bigskip\rm\today\bigskip}} + +\def\univletterhead{\vglue-\voffset + \hbox{\hbox to\longindentation{\raise4truemm\hbox{\logofont + \kern2truept X\kern-1.667truept + \lower2truept\hbox{X}\kern-1.667truept X}\hfil + \largeheadfont The University of St.~Anford\hfil}% + \kern-\longindentation + \vbox{\smallheadfont\baselineskip9truept + \leftskip=\longindentation BOX 1009\par HAGA ALTO, CA 94321}} + \vskip2truept\hrule\vskip4truept } + +\def\makelabel{\endletter\hbox{\vrule + \vbox{\hrule \kern6truept + \hbox{\kern6truept\vbox to 2truein{\hsize=\longindentation + \smallheadfont\baselineskip9truept\returnaddress + \vfill\moveright 2truein\copy\theaddress\vfill}% + \kern6truept}\kern6truept\hrule}\vrule} + \pageno=0\vfill\eject} diff --git a/Master/texmf-dist/tex/plain/base/list-latin.tex b/Master/texmf-dist/tex/plain/base/list-latin.tex index 71d5bb6d9a1..09e27dd479a 100644 --- a/Master/texmf-dist/tex/plain/base/list-latin.tex +++ b/Master/texmf-dist/tex/plain/base/list-latin.tex @@ -1,4 +1,3 @@ -% This program by D. E. Knuth is not copyrighted and can be used freely. % Makes a listing of one or more files % Extended to allow the Latin-1 accented characters in UTF-8 encoding % Typical usage: @@ -63,32 +62,3 @@ % at present, it's indistinguishable from newline (^^J). % You can get up to 103 characters on a line without an overfull box. - -% Further notes from Don, January 2017: -% -% Maybe I'm the only person left who still uses plain TeX in a UTF-8 world. -% -% But for what it's worth, I'm appending a little file that I prepared today, -% since it turned out to be useful in a project of interest to me. -% -% Namely, I've got a program that takes an XML encoding of organ-pipe -% settings, used by performers when they change the stops during a -% performance, and translates it into a human-readable form. -% I mean, the output says "when you reach combination nunber 0013, -% the following ranks of pipes are set to play". -% -% The names of those ranks of pipes often contain accented characters, -% as well as things like the German \ss. In order to use such texts on the Web, -% I have them in UTF-8 code. But to make a verbatim hardcopy listing using -% nice typewriter-style fonts, I wanted a program like "list.tex", which -% I've been using to print text files for more than 25 years. -% -% Fortunately, the accented characters all turn out to be two-character -% sequences in UTF-8, where the first character is always '303. So I -% can simply make that character active, and it can then change the -% following character appropriately. -% -% Therefore I added a few lines to "list.tex", resulting in "list-latin.tex". -% And it works! Hence it might be a useful addition to the CTAN archives. -% -% Yours truly, Don diff --git a/Master/texmf-dist/tex/plain/base/llist-latin.tex b/Master/texmf-dist/tex/plain/base/llist-latin.tex new file mode 100644 index 00000000000..cbc61408500 --- /dev/null +++ b/Master/texmf-dist/tex/plain/base/llist-latin.tex @@ -0,0 +1,84 @@ +% Makes a landscape listing of one or more files +% Extended to allow the Latin-1 accented characters in UTF-8 encoding +% Typical usage: +% tex llist-latin *.txt \\end + +\def\grabfile#1 {\setbox0=\lastbox\endgraf\doit{#1}} +\everypar{\grabfile} + +\font\filenamefont= cmtt8 scaled\magstep3 +\font\headlinefont= cmr8 +\font\listingfont= cmtex8 +\font\ttfont= cmtt8 +\font\syttfont= cmsytt10 at 8pt +\font\eoffont= cmti8 + +\def\today{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} +\newcount\m \newcount\n +\n=\time \divide\n 60 \m=-\n \multiply\m 60 \advance\m \time +\def\hours{\twodigits\n\twodigits\m} +\def\twodigits#1{\ifnum #1<10 0\fi \number#1} + +\newlinechar=`@ +\message{@\today\space at \hours} + +\baselineskip=9pt +\medskipamount=4pt minus 1pt +\raggedbottom +\nopagenumbers + +\newcount\n +\catcode`\^^c3=\active +\def\missing{{\syttfont\char15}} +\def^^c3#1{\n=`#1\advance\n by-128 + {\ttfont\ifcase\n + \`A\or\'A\or\^A\or\~A\or\"A\or\AA\or\AE\or\c C\or + \`E\or\'E\or\^E\or\"E\or\`I\or\'I\or\^I\or\"I\or + \missing\or\~N\or\`O\or\'O\or\^O\or\~O\or\"O\or{\syttfont\char2}\or + \O\or\`U\or\'U\or\^U\or\"U\or\'Y\or\missing\or\ss\or + \`a\or\'a\or\^a\or\~a\or\"a\or\aa\or\ae\or\c c\or + \`e\or\'e\or\^e\or\"e\or\`\i\or\'\i\or\^\i\or\"\i\or + \missing\or\~n\or\`o\or\'o\or\^o\or\~o\or\"o\or{\syttfont\char4}\or + \o\or\`u\or\'u\or\^u\or\"u\or\'y\or\missing\or\"y\fi}} + +\chardef\other=12 +\def\doit#1{\message{@Listing #1@} + \begingroup \everypar{} \frenchspacing + \headline{\ifright \headlinefont \hfill Page \folio + \else\filenamefont#1\quad\headlinefont \today\ at \hours\hss \fi} + \def\do##1{\catcode`##1=\other}\dospecials + \catcode127=\other \catcode9=\other \catcode12=\other + \parindent 0pt \parfillskip=0pt plus 1fil minus .8in + \everypar{\hangindent 1in} \rightskip=0pt plus 2in + \def\par{\ifvmode\penalty-50\medskip\else\endgraf\fi} + \listingfont \obeylines \obeyspaces \global\pageno=1 + \input #1 {\eoffont(end of\/ file)}\endgraf\vfill\eject + \ifright\null\vfill\eject\fi\endgroup} +{\obeyspaces\global\let =\ } +\catcode`\_=\other % allow _ in file names + +\hsize=4.6truein +\vsize=7truein +\hoffset=-.5truein +\voffset=-.2truein +\newif\ifright +\newbox\lefthalf +\output{\ifright + \shipout\hbox{\hbox to5.5in{\box\lefthalf\hss}% + \vbox{\makeheadline\pagebody\makefootline}} + \advancepageno\global\rightfalse + \else\global\setbox\lefthalf\vbox{\makeheadline\pagebody\makefootline} + \global\righttrue\fi} + +\special{landscape} + +% A tab (^^I) prints as lowercase gamma. +% Character ^^M could be made visible, with a bit of work; +% at present, it's indistinguishable from newline (^^J). + +% You can get up to 91 characters on a line without an overfull box. +% (But lines with more than 84 characters will be clipped, if they +% appear on a righthand halfpage.) diff --git a/Master/texmf-dist/tex/plain/base/llist.tex b/Master/texmf-dist/tex/plain/base/llist.tex index f107169e248..9674f618030 100644 --- a/Master/texmf-dist/tex/plain/base/llist.tex +++ b/Master/texmf-dist/tex/plain/base/llist.tex @@ -31,7 +31,7 @@ \def\doit#1{\message{@Listing #1@} \begingroup \everypar{} \frenchspacing \headline{\ifright \headlinefont \hfill Page \folio - \else\filenamefont#1\quad\headlinefont \today\ at \hours\hfill \fi} + \else\filenamefont#1\quad\headlinefont \today\ at \hours\hss \fi} \def\do##1{\catcode`##1=\other}\dospecials \catcode127=\other \catcode9=\other \catcode12=\other \parindent 0pt \parfillskip=0pt plus 1fil minus .8in diff --git a/Master/texmf-dist/tex/plain/base/plain.tex b/Master/texmf-dist/tex/plain/base/plain.tex index 2b72027dff8..0f363a96c0e 100644 --- a/Master/texmf-dist/tex/plain/base/plain.tex +++ b/Master/texmf-dist/tex/plain/base/plain.tex @@ -225,11 +225,11 @@ \outer\def\newcount{\alloc@0\count\countdef\insc@unt} \outer\def\newdimen{\alloc@1\dimen\dimendef\insc@unt} \outer\def\newskip{\alloc@2\skip\skipdef\insc@unt} -\outer\def\newmuskip{\alloc@3\muskip\muskipdef\@cclvi} +\outer\def\newmuskip{\alloc@3\muskip\muskipdef\@cclv} \outer\def\newbox{\alloc@4\box\chardef\insc@unt} \let\newtoks=\relax % we do this to allow plain.tex to be read in twice \outer\def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}} -\outer\def\newtoks{\alloc@5\toks\toksdef\@cclvi} +\outer\def\newtoks{\alloc@5\toks\toksdef\@cclv} \outer\def\newread{\alloc@6\read\chardef\sixt@@n} \outer\def\newwrite{\alloc@7\write\chardef\sixt@@n} \outer\def\newfam{\alloc@8\fam\chardef\sixt@@n} @@ -1238,4 +1238,4 @@ \nonfrenchspacing % punctuation affects the spacing \catcode`@=12 % at signs are no longer letters -\def\fmtname{plain}\def\fmtversion{3.141592653} % identifies the current format +\def\fmtname{plain}\def\fmtversion{3.1415926535} % identifies the current format diff --git a/Master/texmf-dist/tex/plain/knuth-lib/webmac.tex b/Master/texmf-dist/tex/plain/knuth-lib/webmac.tex index 5ca707bb9b2..ec44128d45c 100644 --- a/Master/texmf-dist/tex/plain/knuth-lib/webmac.tex +++ b/Master/texmf-dist/tex/plain/knuth-lib/webmac.tex @@ -1,5 +1,5 @@ % standard macros for WEB listings (in addition to PLAIN.TEX) -\xdef\fmtversion{\fmtversion+WEBMAC4.1} % identifies current set of macros +\xdef\fmtversion{\fmtversion+WEBMAC4.2} % identifies current set of macros \parskip 0pt % no stretch between paragraphs \parindent 1em % for paragraphs and for the first line of Pascal text @@ -84,8 +84,10 @@ \edef\next{\write\cont{\Z{#2}{\modno}{\the\pageno}}}\next % to contents file \ifon\startsection{\bf\ignorespaces#2.\quad}\ignorespaces} \def\MN#1.{\par % common code for \M, \N - {\xdef\modstar{#1}\let\*=\empty\xdef\modno{#1}} - \ifx\modno\modstar \onmaybe \else\ontrue \fi \mark{\modno}} + {\xdef\modstar{#1}\let\*=\empty\xdef\modno{#1}}% remove \* from section name + \ifx\modno\modstar \onmaybe \else\ontrue \fi + \mark{{{\tensy x}\modno}{\rhead}}} + % each \mark is {section reference or null}{group title} \def\O#1{\hbox{\rm\char'23\kern-.2em\it#1\/\kern.05em}} % octal constant \def\P{\rightskip=0pt plus 100pt minus 10pt % go into Pascal mode \sfcode`;=3000 @@ -115,10 +117,14 @@ \def\onmaybe{\let\ifon=\maybe} \let\maybe=\iftrue \newif\ifon \newif\iftitle \newif\ifpagesaved -\def\lheader{\mainfont\the\pageno\eightrm\qquad\rhead\hfill\title\qquad - \tensy x\mainfont\topmark} % top line on left-hand pages -\def\rheader{\tensy x\mainfont\topmark\eightrm\qquad\title\hfill\rhead - \qquad\mainfont\the\pageno} % top line on right-hand pages +\def\lheader{\mainfont\the\pageno\eightrm\qquad\rhead + \hfill\title\qquad\mainfont\topsecno} % top line on left-hand pages +\def\rheader{\mainfont\topsecno\eightrm\qquad\title\hfill + \rhead\qquad\mainfont\the\pageno} % top line on right-hand pages +\def\topsecno{\expandafter\takeone\topmark} +\def\takeone#1#2{#1} +\def\taketwo#1#2{#2} +\def\nullsec{\eightrm\kern-2em} % the \kern-2em cancels \qquad in headers \def\page{\box255 } \def\normaloutput#1#2#3{\ifodd\pageno\hoffset=\pageshift\fi \shipout\vbox{ @@ -129,6 +135,7 @@ \global\advance\pageno by1} \def\rhead{\.{WEB} OUTPUT} % this running head is reset by starred sections +\mark{\noexpand\nullsec{\rhead}} \def\title{} % an optional title can be set by the user \def\topofcontents{\centerline{\titlefont\title} \vfill} % this material will start the table of contents page @@ -183,6 +190,7 @@ \if L\lr\else\null\vfill\eject\fi % finish the current page \parfillskip 0pt plus 1fil \def\rhead{NAMES OF THE SECTIONS} + \let\topsecno=\nullsec \message{Section names:} \output{\normaloutput\page\lheader\rheader} \setpage |