summaryrefslogtreecommitdiff
path: root/Master/texmf-dist
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-02-26 23:56:54 +0000
committerKarl Berry <karl@freefriends.org>2021-02-26 23:56:54 +0000
commitbe31a3bcf74e6d21aa329076b6b6993eb3c2061d (patch)
tree2f0be6260a4262dc5dea9025ab492379d4016c0d /Master/texmf-dist
parent957025c65317ad12e816b1681e1e852ed7b1e572 (diff)
knuth runtime file updates from the 2021 tuneup
git-svn-id: svn://tug.org/texlive/trunk@57963 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r--Master/texmf-dist/doc/fonts/cm/README2
-rw-r--r--Master/texmf-dist/doc/generic/knuth/errata/mf84.bug109
-rw-r--r--Master/texmf-dist/doc/generic/knuth/errata/tex82.bug180
-rw-r--r--Master/texmf-dist/fonts/source/public/concrete/ccn10.mf75
-rw-r--r--Master/texmf-dist/fonts/source/public/knuth-lib/grayf.mf2
-rw-r--r--Master/texmf-dist/fonts/source/public/knuth-lib/slant.mf4
-rw-r--r--Master/texmf-dist/fonts/source/public/knuth-local/domino.mf40
-rw-r--r--Master/texmf-dist/source/generic/knuth/errata/errata.nine2
-rw-r--r--Master/texmf-dist/source/generic/knuth/errata/errata.tex2474
-rw-r--r--Master/texmf-dist/source/generic/knuth/errata/errata.three2
-rw-r--r--Master/texmf-dist/source/generic/knuth/errata/errata.twelve1709
-rw-r--r--Master/texmf-dist/source/generic/knuth/errata/errorlog.tex25
-rw-r--r--Master/texmf-dist/source/generic/knuth/tex/glue.web2
-rw-r--r--Master/texmf-dist/source/generic/knuth/web/webman.tex10
-rw-r--r--Master/texmf-dist/tex/plain/base/gkpmac.tex45
-rw-r--r--Master/texmf-dist/tex/plain/base/letter.tex119
-rw-r--r--Master/texmf-dist/tex/plain/base/letterformat.tex85
-rw-r--r--Master/texmf-dist/tex/plain/base/list-latin.tex30
-rw-r--r--Master/texmf-dist/tex/plain/base/llist-latin.tex84
-rw-r--r--Master/texmf-dist/tex/plain/base/llist.tex2
-rw-r--r--Master/texmf-dist/tex/plain/base/plain.tex6
-rw-r--r--Master/texmf-dist/tex/plain/knuth-lib/webmac.tex22
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