diff options
author | Norbert Preining <norbert@preining.info> | 2021-02-10 03:01:13 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2021-02-10 03:01:13 +0000 |
commit | 7428e668f046bec10d1200214789e40390fa51e7 (patch) | |
tree | d28de61e9d3ed96c80ebf2300d0ba3d6a76414e6 /systems/knuth/dist/tex | |
parent | 1350502b809c028b8f123dec94ca92782eda564f (diff) |
CTAN sync 202102100301
Diffstat (limited to 'systems/knuth/dist/tex')
-rw-r--r-- | systems/knuth/dist/tex/glue.web | 2 | ||||
-rw-r--r-- | systems/knuth/dist/tex/tex.web | 213 | ||||
-rw-r--r-- | systems/knuth/dist/tex/texbook.tex | 393 | ||||
-rw-r--r-- | systems/knuth/dist/tex/trip.dvi | bin | 0 -> 2920 bytes | |||
-rw-r--r-- | systems/knuth/dist/tex/trip.fot | 2 | ||||
-rw-r--r-- | systems/knuth/dist/tex/trip.log | 16 | ||||
-rw-r--r-- | systems/knuth/dist/tex/trip.tex | 2 | ||||
-rw-r--r-- | systems/knuth/dist/tex/trip.typ | 2 | ||||
-rw-r--r-- | systems/knuth/dist/tex/tripin.fot | 89 | ||||
-rw-r--r-- | systems/knuth/dist/tex/tripin.log | 6 |
10 files changed, 440 insertions, 285 deletions
diff --git a/systems/knuth/dist/tex/glue.web b/systems/knuth/dist/tex/glue.web index 38a6d667c8..add1903b50 100644 --- a/systems/knuth/dist/tex/glue.web +++ b/systems/knuth/dist/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/systems/knuth/dist/tex/tex.web b/systems/knuth/dist/tex/tex.web index e22c46b509..62374028b2 100644 --- a/systems/knuth/dist/tex/tex.web +++ b/systems/knuth/dist/tex/tex.web @@ -1,6 +1,7 @@ % This program is copyright (C) 1982 by D. E. Knuth; all rights are reserved. -% Copying of this file is authorized only if (1) you are D. E. Knuth, or if -% (2) you make absolutely no changes to your copy. (The WEB system provides +% Unlimited copying and redistribution of this file are permitted as long +% as this file is not modified. Modifications are permitted, but only if +% the resulting file is not named tex.web. (The WEB system provides % for alterations via an auxiliary file; the master file should stay intact.) % See Appendix H of the WEB manual for hints on how to install this program. % And see Appendix A of the TRIP manual for details about how to validate it. @@ -46,6 +47,7 @@ % Version 3.141592 fixed \xleaders, glueset, weird alignments (December 2002). % Version 3.1415926 was a general cleanup with minor fixes (February 2008). % Version 3.14159265 was similar (January 2014). +% Version 3.141592653 was similar but more extensive (January 2021). % A reward of $327.68 will be paid to the first finder of any remaining bug. @@ -188,7 +190,7 @@ helping to determine whether a particular implementation deserves to be known as `\TeX' [cf.~Stanford Computer Science report CS1027, November 1984]. -@d banner=='This is TeX, Version 3.14159265' {printed when \TeX\ starts} +@d banner=='This is TeX, Version 3.141592653' {printed when \TeX\ starts} @ Different \PASCAL s have slightly different conventions, and the present @!@:PASCAL H}{\ph@> @@ -199,7 +201,7 @@ reader see how to make an appropriate interface for other systems if necessary. (\ph\ is Charles Hedrick's modification of a compiler @^Hedrick, Charles Locke@> for the DECsystem-10 that was originally developed at the University of -Hamburg; cf.\ {\sl SOFTWARE---Practice \AM\ Experience \bf6} (1976), +Hamburg; cf.\ {\sl Software---Practice and Experience \bf6} (1976), 29--42. The \TeX\ program below is intended to be adaptable, without extensive changes, to most other versions of \PASCAL, so it does not fully use the admirable features of \ph. Indeed, a conscious effort has been @@ -295,8 +297,8 @@ to people who wish to preserve the purity of English. Similarly, there is some conditional code delimited by `$|stat|\ldots|tats|$' that is intended for use when statistics are to be kept about \TeX's memory usage. The |stat| $\ldots$ |tats| code also -implements diagnostic information for \.{\\tracingparagraphs} and -\.{\\tracingpages}. +implements diagnostic information for \.{\\tracingparagraphs}, +\.{\\tracingpages}, and \.{\\tracingrestores}. @^debugging@> @d debug==@{ {change this to `$\\{debug}\equiv\null$' when debugging} @@ -1303,7 +1305,7 @@ example, be `|k in [0,@'10..@'12,@'14,@'15,@'33,@'177..@'377]|'. If character |k| cannot be printed, and |k<@'200|, then character |k+@'100| or |k-@'100| must be printable; moreover, ASCII codes |[@'41..@'46, @'60..@'71, @'136, @'141..@'146, @'160..@'171]| must be printable. -Thus, at least 81 printable characters are needed. +Thus, at least 80 printable characters are needed. @:TeXbook}{\sl The \TeX book@> @^character set dependencies@> @^system dependencies@> @@ -1564,9 +1566,9 @@ end; @ Here is the very first thing that \TeX\ prints: a headline that identifies the version number and format package. The |term_offset| variable is temporarily -incorrect, but the discrepancy is not serious since we assume that the banner -and format identifier together will occupy at most |max_print_line| -character positions. +incorrect, but the discrepancy is not serious since we assume that this +part of the program is system dependent. +@^system dependencies@> @<Initialize the output...@>= wterm(banner); @@ -1616,7 +1618,7 @@ by all \PASCAL\ compilers. @<Basic print...@>= procedure print_int(@!n:integer); {prints an integer in decimal form} -var k:0..23; {index to current digit; we assume that $|n|<10^{23}$} +var k:0..23; {index to current digit; we assume that $\vert n\vert<10^{23}$} @!m:integer; {used to negate |n| in possibly dangerous cases} begin k:=0; if n<0 then @@ -1880,7 +1882,8 @@ var c:ASCII_code; {what the user types} {used to save global variables when deleting tokens} begin if history<error_message_issued then history:=error_message_issued; print_char("."); show_context; -if interaction=error_stop_mode then @<Get user's advice and |return|@>; +if interaction=error_stop_mode then + @<Get user's advice and |return|@>; incr(error_count); if error_count=100 then begin print_nl("(That makes 100 errors; please try again.)"); @@ -1891,7 +1894,8 @@ if error_count=100 then exit:end; @ @<Get user's advice...@>= -loop@+begin continue: clear_for_error_prompt; prompt_input("? "); +loop@+begin continue: if interaction<>error_stop_mode then return; + clear_for_error_prompt; prompt_input("? "); @.?\relax@> if last=first then return; c:=buffer[first]; @@ -1916,7 +1920,7 @@ case c of "0","1","2","3","4","5","6","7","8","9": if deletions_allowed then @<Delete \(c)|c-"0"| tokens and |goto continue|@>; @t\4\4@>@;@+@!debug "D": begin debug_help; goto continue;@+end;@+gubed@/ -"E": if base_ptr>0 then +"E": if base_ptr>0 then if input_stack[base_ptr].name_field>=256 then begin print_nl("You want to edit file "); @.You want to edit file x@> slow_print(input_stack[base_ptr].name_field); @@ -1937,7 +1941,8 @@ begin print("Type <return> to proceed, S to scroll future error messages,");@/ @.Type <return> to proceed...@> print_nl("R to run without stopping, Q to run quietly,");@/ print_nl("I to insert something, "); -if base_ptr>0 then print("E to edit your file,"); +if base_ptr>0 then if input_stack[base_ptr].name_field>=256 then + print("E to edit your file,"); if deletions_allowed then print_nl("1 or ... or 9 to ignore the next 1 to 9 tokens of input,"); print_nl("H for help, X to quit."); @@ -2129,7 +2134,7 @@ begin if OK_to_interrupt then print_err("Interruption"); @.Interruption@> help3("You rang?")@/ - ("Try to insert some instructions for me (e.g.,`I\showlists'),")@/ + ("Try to insert an instruction for me (e.g., `I\showlists'),")@/ ("unless you just want to quit by typing `X'."); deletions_allowed:=false; error; deletions_allowed:=true; interrupt:=0; @@ -2917,8 +2922,8 @@ specifies the order of infinity to which glue setting applies (|normal|, @ The |new_null_box| function returns a pointer to an |hlist_node| in which all subfields have the values corresponding to `\.{\\hbox\{\}}'. -The |subtype| field is set to |min_quarterword|, since that's the desired -|span_count| value if this |hlist_node| is changed to an |unset_node|. +(The |subtype| field is set to |min_quarterword|, for historic reasons +that are no longer relevant.) @p function new_null_box:pointer; {creates a new box node} var p:pointer; {the new node} @@ -4100,7 +4105,7 @@ expanded by `\.{\\the}'. @d hskip=26 {horizontal glue ( \.{\\hskip}, \.{\\hfil}, etc.~)} @d vskip=27 {vertical glue ( \.{\\vskip}, \.{\\vfil}, etc.~)} @d mskip=28 {math glue ( \.{\\mskip} )} -@d kern=29 {fixed space ( \.{\\kern})} +@d kern=29 {fixed space ( \.{\\kern} )} @d mkern=30 {math kern ( \.{\\mkern} )} @d leader_ship=31 {use a box ( \.{\\shipout}, \.{\\leaders}, etc.~)} @d halign=32 {horizontal table alignment ( \.{\\halign} )} @@ -4239,7 +4244,7 @@ At each level of processing we are in one of six modes: \hang|-mmode| stands for math formula mode (not displayed). \yskip\noindent The mode is temporarily set to zero while processing \.{\\write} -texts in the |ship_out| routine. +texts. Numeric values are assigned to |vmode|, |hmode|, and |mmode| so that \TeX's ``big semantic switch'' can select the appropriate thing to @@ -4432,7 +4437,7 @@ case abs(m) div (max_command+1) of end; end; 2: if a.int<>null then - begin print("this will be denominator of:"); show_box(a.int);@+ + begin print("this will begin denominator of:"); show_box(a.int);@+ end; end {there are no other cases} @@ -4954,7 +4959,7 @@ that will be defined later. @d output_penalty_code=39 {penalty found at current page break} @d max_dead_cycles_code=40 {bound on consecutive dead cycles of output} @d hang_after_code=41 {hanging indentation changes after this many lines} -@d floating_penalty_code=42 {penalty for insertions heldover after a split} +@d floating_penalty_code=42 {penalty for insertions held over after a split} @d global_defs_code=43 {override \.{\\global} specifications} @d cur_fam_code=44 {current family} @d escape_char_code=45 {escape character for token output} @@ -5236,14 +5241,18 @@ del_code("."):=0; {this null delimiter is used in error recovery} input and output, establishes the initial values of the date and time. @^system dependencies@> 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. +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 time:=12*60; {minutes since midnight} -day:=4; {fourth day of the month} -month:=7; {seventh month of the year} -year:=1776; {Anno Domini} +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} end; @ @<Show equivalent |n|, in region 5@>= @@ -5279,11 +5288,13 @@ if blank_line then print_ln; selector:=old_setting; end; -@ Of course we had better declare another global variable, if the previous +@ 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} @ The final region of |eqtb| contains the dimension parameters defined here, and the 256 \.{\\dimen} registers. @@ -5824,7 +5835,7 @@ should replace the corresponding entry in |xeq_level|. \yskip\hangg 2) If |save_type(p)=restore_zero|, then |save_index(p)| is a location in |eqtb| whose current value should be destroyed at the end of the current group, when it should be -replaced by the current value of |eqtb[undefined_control_sequence]|. +replaced by the value of |eqtb[undefined_control_sequence]|. \yskip\hangg 3) If |save_type(p)=insert_token|, then |save_index(p)| is a token that should be inserted into \TeX's input when the current @@ -6189,8 +6200,8 @@ when |m=out_param|, it means that \TeX\ should insert parameter number |c| into the text at this point. The enclosing \.{\char'173} and \.{\char'175} characters of a macro -definition are omitted, but the final right brace of an output routine -is included at the end of its token list. +definition are omitted, but an output routine +will be enclosed in braces. Here is an example macro definition that illustrates these conventions. After \TeX\ processes the text @@ -6654,7 +6665,7 @@ template is being scanned; template is being scanned; \hang|backed_up|, if the token list being scanned has been inserted as -`to be read again'. +`to be read again'; \hang|inserted|, if the token list being scanned has been inserted as the text expansion of a \.{\\count} or similar variable; @@ -7190,7 +7201,8 @@ end @ The recovery procedure can't be fully understood without knowing more about the \TeX\ routines that should be aborted, but we can sketch the -ideas here: For a runaway definition we will insert a right brace; for a +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 \.{\\cr} token and a right brace; and for a runaway argument, we will set |long_state| to |outer_call| and insert \.{\\par}. @@ -7827,7 +7839,7 @@ done: if cur_cs=0 then cur_tok:=(cur_cmd*@'400)+cur_chr else cur_tok:=cs_token_flag+cur_cs; end; -@ The |get_x_token| procedure is equivalent to two consecutive +@ The |get_x_token| procedure is essentially equivalent to two consecutive procedure calls: |get_next; x_token|. @p procedure x_token; {|get_x_token| without the initial |get_next|} @@ -8148,7 +8160,7 @@ end strip off the enclosing braces. That's why |rbrace_ptr| was introduced. @<Tidy up the parameter just scanned, and tuck it away@>= -begin if (m=1)and(info(p)<right_brace_limit)and(p<>temp_head) then +begin if (m=1)and(info(p)<right_brace_limit) then begin link(rbrace_ptr):=null; free_avail(p); p:=link(temp_head); pstack[n]:=link(p); free_avail(p); end @@ -9140,7 +9152,7 @@ The token list created by |str_toks| begins at |link(temp_head)| and ends at the value |p| that is returned. (If |p=temp_head|, the list is empty.) @p function str_toks(@!b:pool_pointer):pointer; - {changes the string |str_pool[b..pool_ptr]| to a token list} + {converts |str_pool[b..pool_ptr-1]| to a token list} var p:pointer; {tail of the token list} @!q:pointer; {new node being added to the token list via |store_new_token|} @!t:halfword; {token being appended} @@ -9302,7 +9314,7 @@ address of the control sequence to display in ``runaway'' error messages. @p function scan_toks(@!macro_def,@!xpand:boolean):pointer; -label found,done,done1,done2; +label found,continue,done,done1,done2; var t:halfword; {token representing the highest parameter number} @!s:halfword; {saved token} @!p:pointer; {tail of the token list being built} @@ -9322,7 +9334,7 @@ scan_toks:=p; end; @ @<Scan and build the parameter part...@>= -begin loop begin get_token; {set |cur_cmd|, |cur_chr|, |cur_tok|} +begin loop begin continue: get_token; {set |cur_cmd|, |cur_chr|, |cur_tok|} if cur_tok<right_brace_limit then goto done1; if cur_cmd=mac_param then @<If the next character is a parameter number, make |cur_tok| @@ -9344,7 +9356,7 @@ end @ @<If the next character is a parameter number...@>= begin s:=match_token+cur_chr; get_token; -if cur_cmd=left_brace then +if cur_tok<left_brace_limit then begin hash_brace:=cur_tok; store_new_token(cur_tok); store_new_token(end_match_token); goto done; @@ -9352,7 +9364,8 @@ if cur_cmd=left_brace then if t=zero_token+9 then begin print_err("You already have nine parameters"); @.You already have nine...@> - help1("I'm going to ignore the # sign you just used."); error; + help2("I'm going to ignore the # sign you just used,")@/ + ("as well as the token that followed it."); error; goto continue; end else begin incr(t); if cur_tok<>t then @@ -9502,7 +9515,7 @@ begin if not input_ln(read_file[m],true) then print_err("File ended within "); print_esc("read"); @.File ended within \\read@> help1("This \read has unbalanced braces."); - align_state:=1000000; error; + align_state:=1000000; limit:=0; error; end; end; end @@ -9638,7 +9651,7 @@ where skipping began, for use in error messages. @!skip_line:integer; {skipping began here} @ Here is a procedure that ignores text until coming to an \.{\\or}, -\.{\\else}, or \.{\\fi} at level zero of $\.{\\if}\ldots\.{\\fi}$ +\.{\\else}, or \.{\\fi} at the current level of $\.{\\if}\ldots\.{\\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). @@ -10342,15 +10355,18 @@ end @ @<Print the banner...@>= begin wlog(banner); slow_print(format_ident); print(" "); -print_int(day); print_char(" "); +print_int(sys_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); +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); end @ Let's turn now to the procedure that is used to initiate file reading when an `\.{\\input}' 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. +@^system dependencies@> @p procedure start_input; {\TeX\ will \.{\\input} something} label done; @@ -10375,7 +10391,7 @@ if term_offset+length(name)>max_print_line-2 then print_ln else if (term_offset>0)or(file_offset>0) then print_char(" "); print_char("("); incr(open_parens); slow_print(name); update_terminal; state:=new_line; -if name=str_ptr-1 then {we can conserve string pool space now} +if name=str_ptr-1 then {conserve string pool space (but see note above)} begin flush_string; name:=cur_name; end; @<Read the first line of the new file@>; @@ -10589,11 +10605,11 @@ deleted if $c=0$; then we pass over $a$~characters to reach the next current character (which may have a ligature/kerning program of its own). If the very first instruction of the |lig_kern| array has |skip_byte=255|, -the |next_char| byte is the so-called right boundary character of this font; +the |next_char| byte is the 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 left boundary character, -beginning at location |256*op_byte+remainder|. +there is a special ligature/kerning program for a boundary character at the +left, beginning at location |256*op_byte+remainder|. The interpretation is that \TeX\ puts implicit boundary characters before and after each consecutive string of characters from the same font. These implicit characters do not appear in the output, but they can affect @@ -10725,7 +10741,7 @@ the font. {start of |lig_kern| program for left boundary character, |non_address| if there is none} @!font_bchar:array[internal_font_number] of min_quarterword..non_char; - {right boundary character, |non_char| if there is none} + {boundary character, |non_char| if there is none} @!font_false_bchar:array[internal_font_number] of min_quarterword..non_char; {|font_bchar| if it doesn't exist in the font, otherwise |non_char|} @@ -10904,7 +10920,7 @@ var k:font_index; {index into |font_info|} @!a,@!b,@!c,@!d:eight_bits; {byte variables} @!qw:four_quarters;@!sw:scaled; {accumulators} @!bch_label:integer; {left boundary start location, or infinity} -@!bchar:0..256; {right boundary character, or 256} +@!bchar:0..256; {boundary character, or 256} @!z:scaled; {the design size or the ``at'' size} @!alpha:integer;@!beta:1..16; {auxiliary quantities used in fixed-point multiplication} @@ -11472,13 +11488,13 @@ stack were empty at the time of a |pop| command. The parameter is a signed number in two's complement notation, |-128<=b<128|; if |b<0|, the reference point moves left. -\yskip\hang|right2| 144 |b[2]|. Same as |right1|, except that |b| is a +\yskip\hang|@!right2| 144 |b[2]|. Same as |right1|, except that |b| is a two-byte quantity in the range |-32768<=b<32768|. -\yskip\hang|right3| 145 |b[3]|. Same as |right1|, except that |b| is a +\yskip\hang|@!right3| 145 |b[3]|. Same as |right1|, except that |b| is a three-byte quantity in the range |@t$-2^{23}$@><=b<@t$2^{23}$@>|. -\yskip\hang|right4| 146 |b[4]|. Same as |right1|, except that |b| is a +\yskip\hang|@!right4| 146 |b[4]|. Same as |right1|, except that |b| is a four-byte quantity in the range |@t$-2^{31}$@><=b<@t$2^{31}$@>|. \yskip\hang|w0| 147. Set |h:=h+w|; i.e., move right |w| units. With luck, @@ -12886,7 +12902,7 @@ also removes all occurrences of |ins_node|, |mark_node|, and |adjust_node| items and appends the resulting material onto the list that ends at location |adjust_tail|. -@< Glob...@>= +@<Glob...@>= @!adjust_tail:pointer; {tail of adjustment list} @ @<Set init...@>=adjust_tail:=null; last_badness:=0; @@ -13408,8 +13424,8 @@ programming. @d sub_mlist=3 {|math_type| when the attribute is a formula} @d math_text_char=4 {|math_type| when italic correction is dubious} -@ Each portion of a formula is classified as Ord, Op, Bin, Rel, Ope, -Clo, Pun, or Inn, for purposes of spacing and line breaking. An +@ Each portion of a formula is classified as Ord, Op, Bin, Rel, Open, +Close, Punct, or Inner, for purposes of spacing and line breaking. An |ord_noad|, |op_noad|, |bin_noad|, |rel_noad|, |open_noad|, |close_noad|, |punct_noad|, or |inner_noad| is used to represent portions of the various types. For example, an `\.=' sign in a formula leads to the creation of a @@ -13431,10 +13447,10 @@ limits has been overridden for this operator. @d op_noad=ord_noad+1 {|type| of a noad classified Op} @d bin_noad=ord_noad+2 {|type| of a noad classified Bin} @d rel_noad=ord_noad+3 {|type| of a noad classified Rel} -@d open_noad=ord_noad+4 {|type| of a noad classified Ope} -@d close_noad=ord_noad+5 {|type| of a noad classified Clo} -@d punct_noad=ord_noad+6 {|type| of a noad classified Pun} -@d inner_noad=ord_noad+7 {|type| of a noad classified Inn} +@d open_noad=ord_noad+4 {|type| of a noad classified Open} +@d close_noad=ord_noad+5 {|type| of a noad classified Close} +@d punct_noad=ord_noad+6 {|type| of a noad classified Punct} +@d inner_noad=ord_noad+7 {|type| of a noad classified Inner} @d limits=1 {|subtype| of |op_noad| whose scripts are to be above, below} @d no_limits=2 {|subtype| of |op_noad| whose scripts are to be normal} @@ -14209,7 +14225,7 @@ else begin if (qo(cur_c)>=font_bc[cur_f])and(qo(cur_c)<=font_ec[cur_f]) then else cur_i:=null_character; if not(char_exists(cur_i)) then begin char_warning(cur_f,qo(cur_c)); - math_type(a):=empty; + math_type(a):=empty; cur_i:=null_character; end; end; end; @@ -14596,7 +14612,7 @@ else begin shift_down:=denom2(cur_size); @ The numerator and denominator must be separated by a certain minimum clearance, called |clr| in the following program. The difference between -|clr| and the actual clearance is |2delta|. +|clr| and the actual clearance is twice |delta|. @<Adjust \(s)|shift_up| and |shift_down| for the case of no fraction line@>= begin if cur_style<text_style then clr:=7*default_rule_thickness @@ -14979,8 +14995,7 @@ rel_noad: begin t:=rel_noad; pen:=rel_penalty; ord_noad,vcenter_noad,over_noad,under_noad: do_nothing; radical_noad: s:=radical_noad_size; accent_noad: s:=accent_noad_size; -fraction_noad: begin t:=inner_noad; s:=fraction_noad_size; - end; +fraction_noad: s:=fraction_noad_size; left_noad,right_noad: t:=make_left_right(q,style,max_d,max_h); style_node: @<Change the current style and |goto delete_q|@>; whatsit_node,penalty_node,rule_node,disc_node,adjust_node,ins_node,mark_node, @@ -15020,7 +15035,7 @@ begin cur_style:=subtype(q); s:=style_node_size; goto delete_q; end -@ The inter-element spacing in math formulas depends on a $8\times8$ table that +@ The inter-element spacing in math formulas depends on an $8\times8$ table that \TeX\ preloads as a 64-digit string. The elements of this string have the following significance: $$\vbox{\halign{#\hfil\cr @@ -15400,6 +15415,7 @@ text(frozen_cr):="cr"; eqtb[frozen_cr]:=eqtb[cur_val];@/ primitive("crcr",car_ret,cr_cr_code); @!@:cr_cr_}{\.{\\crcr} primitive@> text(frozen_end_template):="endtemplate"; text(frozen_endv):="endtemplate"; +@.endtemplate@> eq_type(frozen_endv):=endv; equiv(frozen_endv):=null_list; eq_level(frozen_endv):=level_one;@/ eqtb[frozen_end_template]:=eqtb[frozen_endv]; @@ -15627,6 +15643,7 @@ info(p):=end_span; width(p):=null_flag; cur_loop:=link(cur_loop); @<Copy the templates from node |cur_loop| into node |p|@>; cur_loop:=link(cur_loop); link(p):=new_glue(glue_ptr(cur_loop)); +subtype(link(p)):=tab_skip_code+1; end @ @<Copy the templates from node |cur_loop| into node |p|@>= @@ -15992,8 +16009,8 @@ The method used here is based on an approach devised by Michael F. Plass and @^Plass, Michael Frederick@> @^Knuth, Donald Ervin@> the author in 1977, subsequently generalized and improved by the same two -people in 1980. A detailed discussion appears in {\sl SOFTWARE---Practice -\AM\ Experience \bf11} (1981), 1119--1184, where it is shown that the +people in 1980. A detailed discussion appears in {\sl Software---Practice +and Experience \bf11} (1981), 1119--1184, where it is shown that the line-breaking problem can be regarded as a special case of the problem of computing the shortest path in an acyclic network. The cited paper includes numerous examples and describes the history of line breaking as it has been @@ -16272,6 +16289,7 @@ function finite_shrink(@!p:pointer):pointer; {recovers from infinite shrinkage} var q:pointer; {new glue specification} begin if no_shrink_error_yet then begin no_shrink_error_yet:=false; + @!stat if tracing_paragraphs>0 then end_diagnostic(true);@+tats@; print_err("Infinite glue shrinkage found in a paragraph"); @.Infinite glue shrinkage...@> help5("The paragraph just ended includes some glue that has")@/ @@ -16280,6 +16298,7 @@ begin if no_shrink_error_yet then ("of any length to fit on one line. But it's safe to proceed,")@/ ("since the offensive shrinkability has been made finite."); error; + @!stat if tracing_paragraphs>0 then begin_diagnostic;@+tats@; end; q:=new_spec(p); shrink_order(q):=normal; delete_glue_ref(p); finite_shrink:=q; @@ -17291,7 +17310,7 @@ loop@+ begin q:=link(r); if is_char_node(q) then goto done1; if non_discardable(q) then goto done1; if type(q)=kern_node then if subtype(q)<>explicit then goto done1; - r:=q; {now |type(q)=glue_node|, |kern_node|, |math_node| or |penalty_node|} + r:=q; {now |type(q)=glue_node|, |kern_node|, |math_node|, or |penalty_node|} end; done1: if r<>temp_head then begin link(r):=null; flush_node_list(link(temp_head)); @@ -17502,7 +17521,8 @@ nodes $p_{a-1}$ and~$p_b$ in the description above are placed into variables @<Glob...@>= @!hc:array[0..65] of 0..256; {word to be hyphenated} -@!hn:small_number; {the number of positions occupied in |hc|} +@!hn:0..64; {the number of positions occupied in |hc|; + not always a |small_number|} @!ha,@!hb:pointer; {nodes |ha..hb| should be replaced by the hyphenated result} @!hf:internal_font_number; {font number of the letters in |hc|} @!hu:array[0..63] of 0..256; {like |hc|, before conversion to lowercase} @@ -17644,7 +17664,7 @@ forgetting what |ha| and |hb|, etc., are all about. @ @<Local variables for hyphenation@>= @!i,@!j,@!l:0..65; {indices into |hc| or |hu|} @!q,@!r,@!s:pointer; {temporary registers for list manipulation} -@!bchar:halfword; {right boundary character of hyphenated word, or |non_char|} +@!bchar:halfword; {boundary character of hyphenated word, or |non_char|} @ \TeX\ will never insert a hyphen that has fewer than \.{\\lefthyphenmin} letters before it or fewer than @@ -18378,7 +18398,7 @@ The hash table is called |trie_op_hash|, and the number of entries it contains is |trie_op_ptr|. @<Glob...@>= -@!init@! trie_op_hash:array[-trie_op_size..trie_op_size] of 0..trie_op_size; +@!init @!trie_op_hash:array[-trie_op_size..trie_op_size] of 0..trie_op_size; {trie op codes for quadruples} @!trie_used:array[ASCII_code] of quarterword; {largest opcode used so far for this language} @@ -18556,7 +18576,7 @@ entries. @d trie_back(#)==trie[#].lh {backward links in |trie| holes} @<Glob...@>= -@!init@!trie_taken:packed array[1..trie_size] of boolean; +@!init @!trie_taken:packed array[1..trie_size] of boolean; {does a family start here?} @t\hskip10pt@>@!trie_min:array[ASCII_code] of trie_pointer; {the first possible slot for each character} @@ -19213,7 +19233,8 @@ all split and floating insertions. @!last_glue:pointer; {used to implement \.{\\lastskip}} @!last_penalty:integer; {used to implement \.{\\lastpenalty}} @!last_kern:scaled; {used to implement \.{\\lastkern}} -@!insert_penalties:integer; {sum of the penalties for held-over insertions} +@!insert_penalties:integer; {sum of the penalties for insertions + that were held over} @ @<Put each...@>= primitive("pagegoal",set_page_dimen,0); @@ -20077,7 +20098,7 @@ Several additional global variables are needed. @!main_k:font_index; {index into |font_info|} @!main_p:pointer; {temporary register for list manipulation} @!main_s:integer; {space factor value} -@!bchar:halfword; {right boundary character of current font, or |non_char|} +@!bchar:halfword; {boundary character of current font, or |non_char|} @!false_bchar:halfword; {nonexistent character matching |bchar|, or |non_char|} @!cancel_boundary:boolean; {should the left boundary be ignored?} @!ins_disc:boolean; {should we insert a discretionary node?} @@ -20599,7 +20620,7 @@ end; @ Many of the actions related to box-making are triggered by the appearance of braces in the input. For example, when the user says `\.{\\hbox} -\.{to} \.{100pt\{$\langle\,\hbox{hlist}\,\rangle$\}}' in vertical mode, +\.{to} \.{100pt\{$\langle\,\hbox{\rm hlist}\,\rangle$\}}' in vertical mode, the information about the box size (100pt, |exactly|) is put onto |save_stack| with a level boundary word just above it, and |cur_group:=adjusted_hbox_group|; \TeX\ enters restricted horizontal mode to process the hlist. The right @@ -22785,6 +22806,7 @@ end; @ @<Initialize table entries...@>= text(frozen_protection):="inaccessible"; +@.inaccessible@> @ Here's an example of the way many of the following routines operate. (Unfortunately, they aren't all as simple as this.) @@ -23618,7 +23640,7 @@ any_mode(xray): show_whatever; @ @d show_code=0 { \.{\\show} } @d show_box_code=1 { \.{\\showbox} } @d show_the_code=2 { \.{\\showthe} } -@d show_lists=3 { \.{\\showlists} } +@d show_lists_code=3 { \.{\\showlists} } @<Put each...@>= primitive("show",xray,show_code); @@ -23627,14 +23649,14 @@ primitive("showbox",xray,show_box_code); @!@:show_box_}{\.{\\showbox} primitive@> primitive("showthe",xray,show_the_code); @!@:show_the_}{\.{\\showthe} primitive@> -primitive("showlists",xray,show_lists); -@!@:show_lists_}{\.{\\showlists} primitive@> +primitive("showlists",xray,show_lists_code); +@!@:show_lists_code_}{\.{\\showlists} primitive@> @ @<Cases of |print_cmd_chr|...@>= xray: case chr_code of show_box_code:print_esc("showbox"); show_the_code:print_esc("showthe"); - show_lists:print_esc("showlists"); + show_lists_code:print_esc("showlists"); othercases print_esc("show") endcases; @@ -23643,7 +23665,7 @@ procedure show_whatever; label common_ending; var p:pointer; {tail of a token list to show} begin case cur_chr of -show_lists: begin begin_diagnostic; show_activities; +show_lists_code: begin begin_diagnostic; show_activities; end; show_box_code: @<Show the current contents of a box@>; show_code: @<Show the current meaning of a token, then |goto common_ending|@>; @@ -23723,8 +23745,8 @@ so that the inverse relation between them is clear. The global variable |format_ident| is a string that is printed right after the |banner| line when \TeX\ is ready to start. For \.{INITEX} this -string says simply `\.{(INITEX)}'; for other versions of \TeX\ it says, -for example, `\.{(preloaded format=plain 1982.11.19)}', showing the year, +string says simply `\.{ (INITEX)}'; for other versions of \TeX\ it says, +for example, `\.{ (preloaded format=plain 1982.11.19)}', showing the year, month, and day that the format file was created. We have |format_ident=0| before \TeX's tables are loaded. @@ -23815,6 +23837,8 @@ macros to dump words of different types: @ The inverse macros are slightly more complicated, since we need to check the range of the values we are reading in. We say `|undump(a)(b)(x)|' to read an integer value |x| that is supposed to be in the range |a<=x<=b|. +System error messages should be suppressed when undumping. +@^system dependencies@> @d undump_wd(#)==begin get(fmt_file); #:=fmt_file^;@+end @d undump_int(#)==begin get(fmt_file); #:=fmt_file^.int;@+end @@ -24289,17 +24313,17 @@ cannot produce error messages. For example, it would be a mistake to call |str_room| or |make_string| at this time, because a call on |overflow| might lead to an infinite loop. @^system dependencies@> - -Actually there's one way to get error messages, via |prepare_mag|; -but that can't cause infinite recursion. +(Actually there's one way to get error messages, via |prepare_mag|; +but that can't cause infinite recursion.) @^recursion@> -This program doesn't bother to close the input files that may still be open. +If |final_cleanup| is bypassed, this program doesn't bother to close +the input files that may still be open. @<Last-minute...@>= procedure close_files_and_terminate; var k:integer; {all-purpose index} -begin @<Finish the extensions@>; +begin @<Finish the extensions@>; new_line_char:=-1; @!stat if tracing_stats>0 then @<Output statistics about this job@>;@;@+tats@/ wake_up_terminal; @<Finish the \.{DVI} file@>; if log_opened then @@ -24355,7 +24379,7 @@ been scanned and |its_all_over|\kern-2pt. procedure final_cleanup; label exit; var c:small_number; {0 for \.{\\end}, 1 for \.{\\dump}} -begin c:=cur_chr; +begin c:=cur_chr; if c<>1 then new_line_char:=-1; if job_name=0 then open_log_file; while input_ptr>0 do if state=token_list then end_token_list@+else end_file_reading; @@ -24459,14 +24483,15 @@ program below. (If |m=13|, there is an additional argument, |l|.) @!debug procedure debug_help; {routine to display various things} label breakpoint,exit; var k,@!l,@!m,@!n:integer; -begin loop begin wake_up_terminal; +begin clear_terminal; + loop begin wake_up_terminal; print_nl("debug # (-1 to exit):"); update_terminal; @.debug \#@> read(term_in,m); if m<0 then return else if m=0 then - begin goto breakpoint;@\ {go to every label at least once} - breakpoint: m:=0; @{'BREAKPOINT'@}@\ + begin goto breakpoint;@/ {go to every declared label at least once} + breakpoint: m:=0; @{'BREAKPOINT'@}@/ end else begin read(term_in,n); case m of diff --git a/systems/knuth/dist/tex/texbook.tex b/systems/knuth/dist/tex/texbook.tex index 23d626ed6d..a1e50786ea 100644 --- a/systems/knuth/dist/tex/texbook.tex +++ b/systems/knuth/dist/tex/texbook.tex @@ -102,7 +102,8 @@ ISBN 0-201-13448-9 (soft)\cr}} \noindent %{\sl \kern-1pt First hardcover edition, January 1986} %{\sl \kern-1pt Incorporates the final corrections made in 1996, and a few dozen more.} -{\sl \kern-1pt Incorporates all corrections known in 2013.} +%{\sl \kern-1pt Incorporates all corrections known in 2013.} +{\sl \kern-1pt Incorporates all corrections known in 2020.} \smallskip \noindent Internet page {\tt http://www-cs-faculty.stanford.edu/\char`\~ @@ -115,11 +116,19 @@ Copyright $\copyright$ 1984, 1986 by the American Mathematical Society \noindent This book is published jointly by the American Mathematical Society and Addison\kern.1em--Wesley Publishing Company. -All rights reserved. No part of this publication may be reproduced, stored in -a retrieval system, or transmitted, in any form or by any means, -electronic, mechanical, photocopying, recording, or otherwise, without -the prior written permission of the publishers. Printed in the United -States of America. % Published simultaneously in Canada. +All rights reserved. +%No part of this publication may be reproduced, stored in +%a retrieval system, or transmitted, in any form or by any means, +%electronic, mechanical, photocopying, recording, or otherwise, without +%the prior written permission of the publishers. +This publication is protected by copyright, and permission must be +obtained from the publisher prior to any prohibited reproduction, storage in +a~retrieval system, or transmission in any form or by any means, electronic, +mechanical, photocopying, recording, or likewise. For information regarding +permissions, request forms, and the appropriate contacts with the +Pearson Education Global Rights \& Permissions Department, please visit + {\tt www.pearson.com/permissions/}. +Printed in the United States of America. % Published simultaneously in Canada. \medskip \noindent %ISBN 0-201-13448-9\par % paperback @@ -129,9 +138,19 @@ ISBN-10 \enspace\phantom{978-}0-201-13447-0\par %33 34 35 36 37 38 39 DOC 09 08 07 06 % paperback %18 19 20 21 22 23 24 DOC 10 09 08 07 06 % hardcover \smallskip\noindent -Text printed in the United States - at Courier Westford in Westford, Massachusetts.\par\noindent -Nineteenth Printing, February 2012 +%Text printed in the United States +%% at Courier Westford in Westford, Massachusetts.\par\noindent +%at LSC Communications in Crawfordsville, Indiana.\par\noindent +%%Nineteenth Printing, February 2012 +%% [The printer deleted "Text printed ... Crawfordsville..." in 2017!] +%Thirty-fifth Softcover Printing, April 2017\par\noindent +%35\quad17 +%Twenty-second Printing, January 2021\par\noindent +Twenty-third Printing, February 2021\par\noindent +%20\quad17 +\smallskip +\font\pearsonkluj=arial at 9pt +\leftline{\pearsonkluj ScoutAutomatedPrintCode} ^^{Knuth, Donald Ervin} ^^|\copyright| \eject @@ -720,7 +739,7 @@ There's a special control word \TeX \endtt that produces the half-dozen or so instructions necessary to typeset `\TeX'. -When a phrase like `\TeX\ ignores spaces after control words.' is +When a phrase like `\TeX\ ignores spaces after control words.'\ is desired, the manuscript renders it as follows: \begintt \TeX\ ignores spaces after control words. @@ -1025,7 +1044,7 @@ you should say |a| |bold| \hbox{|`{\bf f\/}'|}, lest you get a bold `{\bf f}'. \ddangerexercise Define a control sequence |\ic| such that `|\ic c|' puts the italic correction of character $c$ into \TeX's register |\dimen0|. \answer |\def\ic#1{\setbox0=\hbox{#1\/}\dimen0=\wd0|\parbreak -|\setbox0=\hbox{#1}\advance\dimen0 by -\wd0}|. +|\setbox0=\hbox{#1}\advance\dimen0 by -\wd0 }|. \ddanger The primitive control sequence ^|\nullfont| stands for a font that has no characters. This font is always present, in case you haven't @@ -1336,7 +1355,7 @@ change fonts or to control spacing or anything. \TeX\ doesn't mind if you want to waste your time making groups for no particular reason. But in the second case, the necessary braces were forgotten. You get the letter `S' centered on a line by itself, followed by a paragraph that -begins with `o should this.' on the next line. +begins with `o should this.'\ on the next line. \exercise And how about this one? \begintt @@ -2162,7 +2181,7 @@ together with up to |\errorcontextlines| additional two-line items. \ (If anything has thereby been omitted, you'll also see `|...|'.) \ Chances are good that you can spot the source of an error even when most of a large context has been suppressed; if not, you can say -`|I\errorcontextlines=100\oops|' and try again. \ (That will usually +`|I\errorcontextlines=100| |\oops|' and try again. \ (That will usually give you an undefined control sequence error and plenty of context.) \ Plain \TeX\ sets |\errorcontextlines=5|. @@ -2566,7 +2585,7 @@ characters that you {\sl can\/} type on your ^{keyboard} are reserved for special purposes like escaping and grouping. Yet when we studied fonts it was pointed out that there are 256 characters per font. So how can you refer to the characters that aren't on your keyboard, or that have been -pre-empted for formatting? +pre\"empted for formatting? One answer is to use control sequences. For example, the plain format of Appendix B\null, which defines |%| to be a special kind of symbol so that you @@ -2722,9 +2741,10 @@ way, from |^^00| to |^^ff|. Character 127 is |^^7f|. \danger Most of the |^^| codes are unimportant except in unusual applications. But |^^M| is particularly noteworthy because it is code 13, the ASCII -^\<return> that \TeX\ normally places at the right end of every line of +^\<return> that \TeX\ normally assumes to be present +at the right end of every line of ^^{hat hat M} your input file. By changing the category of~|^^M| you can obtain useful -special effects, as we shall see later. ^^{hat hat M} +special effects, as we shall see later.\looseness=-1 \danger The control code |^^I| is also of potential interest, since it's the ASCII ^\<tab>. Plain \TeX\ makes \<tab> act like a blank space. @@ -2903,6 +2923,7 @@ you would have seen the space. Incidentally, when \TeX\ prints the ^{context of an error message}, the bottom pair of lines comes from a text file, but the other pairs of lines are portions of token lists that \TeX\ is reading (unless they begin with `|<*>|', when they +represent text entered from the user's terminal, or with `|<insert>|', when they represent text inserted during ^{error recovery}). \ddangerexercise Given the category codes of plain \TeX\ format, @@ -2985,7 +3006,7 @@ it a character token!) ^^|\let| ^^{implicit character} for life's not a paragraph \quad % he left a blank line here, really -And death i think is no parenthesis. +And death i think is no parenthesis \author e.~e.~^{cummings}, {\sl since feeling is first\/} (1926) \bigskip @@ -3000,7 +3021,7 @@ but the need for more than 128 codes in general applications was not yet evident. \author ASA SUBCOMMITTEE X3.2, {\sl American Standard\break % Code for Information Interchange\/^^{ASCII}} (1963) -% in {\sl Communications of the ACM\/} +% in Communications of the ACM \eject \beginchapter Chapter 9. \TeX's\\Roman Fonts @@ -3030,7 +3051,7 @@ $$\openup1pt\halign{\indent#\hfil\cr |ff| yields ff\thinspace;$\!$\quad |fi| yields fi\thinspace;$\!$\quad |fl| yields fl\thinspace;$\!$\quad |ffi| yields ffi\thinspace;$\!$\quad |ffl| yields ffl\thinspace;\cr -|``| yields``\thinspace;\qquad |''| yields ''\thinspace;\qquad +|``| yields ``\thinspace;\qquad |''| yields ''\thinspace;\qquad |!||`| yields !`\thinspace;\qquad |?||`| yields ?`\thinspace;\cr |--| yields --\thinspace;\qquad |---| yields ---\thinspace.\cr}$$ ^^{Spanish ligatures} @@ -3888,7 +3909,7 @@ the depth of the larger box). \answer This |E| is inside a box that's inside a box. \danger Such displays of box contents will be discussed further in -Chapters 12 and~17. +Chapters 12 and~27. They are used primarily for diagnostic purposes, when you are trying to figure out exactly what \TeX\ thinks it's doing. The main reason for bringing them up in the present chapter is simply to provide a glimpse of how \TeX\ represents @@ -4195,8 +4216,8 @@ plain \TeX, which creates an hbox whose width is the current |\hsize|: \line{\hfil\hfil What happens now?\hfil} \line{\hfill\hfil and now?\hfil} \endtt -\answer `What happens now?' is placed in a line of width |\hsize|, with -twice as much space at the left as at the right; `and now?' is put flush right +\answer `What happens now?'\ is placed in a line of width |\hsize|, with +twice as much space at the left as at the right; `and now?'\ is put flush right on the following line. \ddangerexercise How do the following three macros behave differently? @@ -4267,7 +4288,7 @@ this line to its minimum width, the result would be \hbox to 0pt{``Oh, oh!'' cried Baby Sally. Dick and Jane laughed.} \enddisplay The glue after a ^{comma} shrinks only 80 percent as much as ordinary -inter-word glue, and after a ^{period} or ^{exclamation point} or +interword glue, and after a ^{period} or ^{exclamation point} or ^{question mark} it shrinks by only one third as much. This all makes for nice-looking output, but it unfortunately adds a bit @@ -4290,7 +4311,7 @@ Chapter 18 has more to say about |\ldots| and related topics. ^{Abbreviations} present problems too. For example, the short story in Chapter~6 referred to `Mr.~^{Drofnats}'; \TeX\ must be told somehow that the -period after `Mr.'\ or `Mrs.'\ or `Ms.' or `Prof.'\ or `Dr.' or `Rt.~Hon.', +period after `Mr.'\ or `Mrs.'\ or `Ms.'\ or `Prof.'\ or `Dr.'\ or `Rt.~Hon.', etc., doesn't count as a sentence-ending ^{full stop}. We avoided that embarrassment in Chapter~6 by typing `|Mr.~Drofnats|'; @@ -4359,7 +4380,7 @@ the~`|I.|' in `|Dr.~Livingstone~I.\ Presume|'; that particular period is not assumed to be a full stop. ^^{Presume} \dangerexercise What can you do to make \TeX\ recognize the ends of sentences -that do end with uppercase letters (e.g., `$\ldots$ launched by NASA.\null' or +that do end with uppercase letters (e.g., `$\ldots$ launched by NASA.' or `Did I?' or `$\ldots$ see Appendix~A.')? \answer There are several ways; perhaps the easiest are to type `|\hbox{NASA}.|'\ or `|NASA\null.|' \ (The ^|\null| macro is an abbreviation @@ -4948,8 +4969,8 @@ but mainly he told the truth. Every shape exists only because of the space around it. % Jeder Formwert lebt nur dank seiner Umgebung. $\ldots$ Hence there is a `right' position for every shape in every situation. -% ... Daraus geht hervor, ein bestimmter Formvert in einer bestimmten Situation -% einen bestimmten Platz verlangt, der ihm gem\"a\ss\ ist. +% ... Daraus geht hervor, da\ss\ ein bestimmter Formwert in einer bestimmten +% Situation einen bestimmten Platz verlangt, der ihm gem\"a\ss\ ist. If we succeed in finding that position, we have done our job. % Gelingt es uns, diese Pl\"atze zu finden, % so nennen wir die Arbeit vollendet. @@ -6354,14 +6375,15 @@ lines end with hyphens. What penalties does plain \TeX\ put between the lines? \answer |\interlinepenalty| plus |\clubpenalty| plus |\widowpenalty| (and also plus |\brokenpenalty|, if the first line ends with a discretionary break). -\ddanger If you say ^|\vadjust||{|\<vertical list>|}| within a paragraph, -\TeX\ will insert the specified internal vertical list into the vertical +\ddanger If you say ^|\vadjust||{|\<vertical mode material>|}| 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 |\vadjust|. For example, you can say `|\vadjust{\kern1pt}|' to increase the amount of space between lines of a paragraph if those lines would otherwise come out too close together. \ (The -\vadjust{\vskip1pt}author -did it in the previous line, just to illustrate what happens.) \ Also, +\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 `|\vadjust{\eject}|' ^^|\eject| anywhere in that line. @@ -6392,6 +6414,7 @@ depth of a ^|\strut|. \def\strutdepth{\dp\strutbox} \def\marginalstar{\strut\vadjust{\kern-\strutdepth\specialstar}} \endtt +(The next line must also not be too tall.) Here |\specialstar| is a box of height zero and depth |\strutdepth|, and it puts an asterisk in the left margin: \begintt @@ -7442,7 +7465,8 @@ the footnotes here\note{Second note.} if ... \danger Sometimes, however, you want to use a register just for temporary storage, and you know that it won't conflict with anybody else's macros. -Registers |\count255|, |\dimen255|, |\skip255|, and |\muskip255| are +Registers |\count255|, |\dimen255|, |\skip255|, |\muskip255|, and +|\toks255| are traditionally kept available for such purposes. Furthermore, plain \TeX\ reserves |\dimen0| to |\dimen9|, |\skip0| to |\skip9|, |\muskip0| to |\muskip9|, and |\box0| to |\box9| for ``scratchwork''; these registers @@ -7967,7 +7991,8 @@ boxes, as explained in Chapter~11. If you have a formula in which there is only one |\sqrt|, or only one |\overline| or |\underline|, the normal positioning rules work fine; but sometimes you want to have uniformity between different members of a complex formula. For example, you might want to -typeset `$\sqrt{\mathstrut a}+\sqrt{\mathstrut d}+\sqrt{\mathstrut y}$', +typeset `$\mskip-1mu\sqrt{\mathstrut a}+ + \sqrt{\mathstrut d}+\sqrt{\mathstrut y}\mskip+2mu$', putting all square roots in the same vertical position. There's an easy way to do this, using the control sequence ^|\mathstrut| as follows: \begintt @@ -9416,11 +9441,11 @@ because |\mathopen| forces class~4 (opening). In the formula `|$G\mathbin:H$|', the ^{colon} is~treated as a binary operation. And Appendix~B constructs large opening symbols by defining ^|\bigl||#1| to be an abbreviation for -\begintt -\mathopen{\hbox{$\left#1 ...\right.$}} +\begintt|let|0|rm +\mathopen{\hbox{$\left#1|<|0strut>\right.$}} \endtt There's also an eighth classification, ^|\mathinner|, which is not -normally used for individual symbols; fractions and ^|\left||...|^|\right| +normally used for individual symbols; ^|\left|$\,\ldots\,$^|\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, @@ -9479,11 +9504,11 @@ are~$-1$ until they are changed by a |\delcode| command. \ddangerexercise Appendix~B defines |\delcode`<| so that there is a shorthand notation for ^{angle brackets}. Why do you think Appendix~B doesn't go further and define |\delcode`{|? -\answer If\/ |\delcode`{| were set to some nonnegative delimiter code, you -would get no error message when you wrote something like `|\left{|'. -This would be bad because strange effects would happen when certain -subformulas were given as arguments to macros, or when they appeared -in alignments. But it has an even worse defect, because a user who +\answer Assigning |\delcode`{| would not work to allow `|\left{|', 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 `|\left{|' is likely to try also `|\bigl{|', which fails miserably. @@ -9602,7 +9627,7 @@ Rel&is a relation atom like `$=$'\thinspace;\cr Open&is an opening atom like `$($'\thinspace;\cr Close&is a closing atom like `$)$'\thinspace;\cr Punct&is a punctuation atom like `$,$'\thinspace;\cr -Inner&is an inner atom like `$1\over2$'\thinspace;\cr +Inner&is an inner atom produced by `|\left|$\,\ldots\,$|\right|';\cr Over&is an overline atom like `$\overline x$'\thinspace;\cr Under&is an underline atom like `$\underline x$'\thinspace;\cr Acc&is an accented atom like `$\hat x$'\thinspace;\cr @@ -9697,7 +9722,7 @@ The learning time is short. A few minutes gives the general flavor, and typing a page or two of a paper generally uncovers most of the misconceptions. \author ^{KERNIGHAN} and ^{CHERRY}, {\sl A System for % Typesetting Mathematics\/} (1975) - % in {\sl Communications of the ACM\/} p152 + % in Communications of the ACM p152 \bigskip @@ -9706,7 +9731,7 @@ a typist with no math or typesetting experience can be taught to input even the most complex equations. \author PETER J. ^{BOEHM}, {\sl Software and Hardware Considerations % for a\break Technical Typesetting System\/} (1976) -% in {\sl IEEE Transactions on Professional Communication\/} PC-19, pp15--19 +% in IEEE Transactions on Professional Communication PC-19, pp15--19 \eject \beginchapter Chapter 18. Fine Points of\\Mathematics\\Typing @@ -9950,7 +9975,7 @@ was current outside the formula. \ddanger The bold fonts available in plain \TeX\ are ``bold roman,'' rather than ``bold italic,'' because the latter are rarely needed. However, \TeX\ could readily be set up to make use of bold math italics, if desired -(see Exercise 17.\bmiexno). A more extensive set of math fonts would also +(see exercise 17.\bmiexno). A more extensive set of math fonts would also include ^{script}, ^{Fraktur}, and ``^{blackboard bold}'' styles; plain \TeX\ doesn't have these, but other formats like \AmSTeX\ do. ^^{AMS-TeX} ^^{German black letters} @@ -10157,7 +10182,7 @@ almost true. But occasionally you must give \TeX\ some help. The number of possible math formulas is vast, and \TeX's spacing rules are rather simple, so it is natural that exceptions should arise. Of course, it is desirable to have fine units of spacing for this purpose, instead of the -big chunks that arise from |\|\], |\quad| and |\qquad|. +big chunks that arise from |\|\], |\quad|, and |\qquad|. The basic elements of space that \TeX\ puts into formulas are called {\sl ^{thin spaces}}, {\sl ^{medium @@ -10315,7 +10340,8 @@ and the math list consists chiefly of ``^{atoms}'' of eight basic types: ^{Punct}~(punctuation), ^^{punctuation} and ^{Inner}~(a delimited subformula). Other kinds of atoms, which arise from commands like ^|\overline| or ^|\mathaccent| or ^|\vcenter|, etc., are all treated as -type~Ord; ^{fractions} are treated as type~Inner. The following table is +type~Ord; subformulas delimited by ^|\left| and ^|\right| +are treated as type~Inner. The following table is used to determine the spacing between pairs of adjacent atoms: $$\baselineskip0pt\lineskip0pt \halign to\hsize @@ -10331,7 +10357,6 @@ $$\baselineskip0pt\lineskip0pt \hbox to 25pt{\tt\hss#\hss}& % for column 7 \hbox to 25pt{\tt\hss#\hss}& % for column 8 #\hfil\tabskip0pt\cr % for the rule at the right -\noalign{\vskip-6pt} % it just happens that there's extra white space &&&&\multispan7\hss\it Right atom\hss\cr \noalign{\vskip3pt} &&&\rm Ord&\rm Op&\rm Bin&\rm Rel&\rm Open&\rm Close&\rm Punct&\rm Inner\cr @@ -10360,7 +10385,7 @@ never arise, because Bin atoms must be preceded and followed by atoms compatible with the nature of binary operations. Appendix~G contains precise details about how math lists are converted to horizontal lists; this conversion is done whenever \TeX\ is about to leave math mode, and the -inter-atomic spacing is inserted at that time. +interatomic spacing is inserted at that time. \ddanger For example, the displayed formula specification \begintt @@ -10417,7 +10442,7 @@ if that subformula were enclosed by |\bigl| and~|\bigr|. For example, Ord followed by Inner (from |\left|) gets a thin space, but Ord followed by Open (from |\bigl|) does not. The rules in Chapter~17 imply that the construction `^|\mathinner||{\bigl({|\<subformula>|}\bigr)}|' within any -formula produces a result exactly equivalent to +formula produces a result essentially equivalent to `|\left(|\<subformula>|\right)|', when the \<subformula> doesn't end with Punct, except that the ^{delimiters} are forced to be of the |\big| size regardless of the height and depth of the subformula. @@ -11192,7 +11217,7 @@ shown here haven't been explained yet, but Chapter~22 will reveal all. enormous and still growing, so you will probably continue to find new challenges as you continue to type mathematical papers. It's a good idea to keep a personal notebook in which you record all of -the non-obvious formulas that you have handled successfully, +the nonobvious formulas that you have handled successfully, showing both the final output and what you typed to get it. Then you'll be able to refer back to those solutions when you discover that you need to do something similar, a few months later. @@ -11359,7 +11384,8 @@ And even if you do type `|$$\hbox{$\displaystyle{|\<formula>|}$}$$|', the results are not quite the same, as we will see later: \TeX\ will compress the glue in `|$$|\<formula>|$$|' if the formula is too wide to fit on a line at its natural width, but the glue inside |\hbox{...}| is frozen -at its natural width. The |\hbox| version also invokes |\everymath|. +at its natural width. The |\hbox| version also invokes +|\everyhbox| and |\everymath|. \dangerexercise You may have noticed that most of the displays in this manual are not centered; displayed material is usually aligned at the @@ -11821,7 +11847,7 @@ $$\eqalignno{...&\raise6pt\hbox{(5)}\cr}$$ What was his oversight, and what could he have done instead? \answer By raising the equation number, he increased the line height, so \TeX\ put extra space between that line and the previous line -when it calculated the inter-line glue. If he had said +when it calculated the interline glue. If he had said `^|\smash||{\raise...}|', he wouldn't have had that problem. \danger For other types of displays, plain \TeX\ provides ^|\displaylines|, @@ -12548,12 +12574,12 @@ what the following definition means: What token list will result when `|\! x{[y]][z}|' is expanded? \answer Let's go slowly on this one, so that the answer will give enough background to answer all similar questions. The \<parameter text> of the -definition consists of the three tokens |#1|, |#2|, |[|$_1$; the +definition consists of the three tokens |!1|, |#2|, |[|$_1$; the \<replacement text> consists of the six tokens |{|$_1$, |#|$_6$, |]|$_2$, |!|$_6$, |#2|, |[|$_1$. \ (When two tokens of category~6 occur in the replacement text, the character code of the second one survives; the character code of a category-6 character is otherwise irrelevant. Thus, -`|\def\!#1!2#[{##]!!#2]|' would produce an essentially identical +`|\def\!!1#2#[{##]!!#2]|' would produce an essentially identical definition.) \ When expanding the given token list, argument~|#1| is |x|$_{11}$, since it is undelimited. Argument~|#2| is delimited by~|[|$_1$, which is different from~|{|$_1$, so it is set provisionally to |{[y]]|; @@ -12567,13 +12593,14 @@ is therefore Incidentally, if you display this with ^|\tracingmacros||=1|, \TeX\ says \begintt \!!1#2[->{##]!!#2[ -#1<-x +!1<-x #2<-[y] \endtt Category codes are not shown, but a character of category~6 always appears twice in succession. A parameter token in the replacement text -uses the character code of the final parameter in the parameter text. +uses the character code of the final parameter in the parameter text; ^^{token lists, as displayed by TeX} +`|!1|' would have been rendered `|#1|'. \ddanger In practice, we all make mistakes. And one of the most common typographic errors is to forget a~`|}|', or to insert an extra~`|{|', @@ -12856,7 +12883,7 @@ True if \TeX\ is in math mode or display math mode (see Chapter~13). \item\bull^|\ifinner|\quad(test for an internal mode) \nobreak\smallskip\noindent True if \TeX\ is in internal vertical mode, or restricted -horizontal mode, or (nondisplay) math mode (see Chapter~13). +horizontal mode, or (non-display) math mode (see Chapter~13). \medbreak \item\bull^|\if|\<token$_1$>\<token$_2$>\quad(test if character codes agree) @@ -13176,7 +13203,7 @@ The expansion is the token list in the corresponding ``^{mark}'' register (see Chapter~23). \smallbreak -\textindent\bull ^|\input|\<file name>. The expansion is null; but \TeX\ +\textindent\bull ^|\input|\<filename>. The expansion is null; but \TeX\ prepares to read from the specified file before looking at any more tokens from its current source. @@ -13316,8 +13343,8 @@ a token for the primitive command |\span| or when reading the \<glue> after ^|\tabskip|. \smallskip -\item\bull Just after a |$|$_3$ token that begins math mode, to see if -another~|$|$_3$ follows. +\item\bull Just after a token such as |$|$_3$ that begins math mode, to see if +another token of category 3 follows. \smallskip \item\bull Just after a |`|$_{12}$ token that begins an ^{alphabetic constant}. @@ -13430,7 +13457,7 @@ other ^{brace tricks}. to~16 files at once, in addition to the files that are being |\input|. To initiate reading such an auxiliary file, you should say \begindisplay -^|\openin|\<number>|=|\<file name> +^|\openin|\<number>|=|\<filename> \enddisplay where the \<number> is between 0 and 15. \ (Plain \TeX\ allocates input stream numbers 0~through~15 with the ^|\newread| command, which @@ -13715,7 +13742,7 @@ But he found that this produced more space above and below the rule than when he had simply said `|\hrule width 4in|' with no |\vbox|. Why did \TeX\ insert more space, and what should he have done to avoid it? -\answer The interline skip is added for vboxes, but not for rules; he +\answer The interline glue is added for vboxes, but not for rules; he forgot to say ^|\nointerlineskip|, before and after the |\moveright| construction. @@ -13749,9 +13776,9 @@ horizontal mode; this character is taken from the current font. \ \ (3)~Otherwise you can make hboxes and vboxes, which fall under the generic term ^\<box>. A \<box> has one of the following seven forms: $$\halign{\indent#\hfil&\quad(see Chapter #)\hfil\cr -^|\hbox|\<box specification>|{|\<horizontal material>|}|&12\cr -^|\vbox|\<box specification>|{|\<vertical material>|}|&12\cr -^|\vtop|\<box specification>|{|\<vertical material>|}|&12\cr +^|\hbox|\<box specification>|{|\<horizontal mode material>|}|&12\cr +^|\vbox|\<box specification>|{|\<vertical mode material>|}|&12\cr +^|\vtop|\<box specification>|{|\<vertical mode material>|}|&12\cr ^|\box|\<register number>&15\cr ^|\copy|\<register number>&15\cr ^|\vsplit|\<register number>|to|\<dimen>&15\cr @@ -13764,7 +13791,7 @@ Chapter~12. A \<register number> is between 0 and 255; after you say is unchanged, as explained in Chapter~15. The |\vsplit| operation is also explained in Chapter~15. In math modes an additional type of box is available: -^|\vcenter|\<box specification>|{|\<vertical material>|}| (see Chapter~17). +^|\vcenter|\<box specification>|{|\<vertical mode material>|}| (see Chapter~17). \ddanger The bottom line of the table above refers to ^|\lastbox|, a primitive operation that hasn't been mentioned before. If the last item @@ -13937,7 +13964,7 @@ case vertical glue (e.g., |\vskip|\<glue> or |\vfill|) is used instead of horizontal glue, and |\leaders| produces boxes that are aligned so that the top of each repeated box has the same vertical position as the top of the smallest enclosing box, plus a multiple of the height-plus-depth -of the repeated box. No interlineskip glue is placed between boxes in +of the repeated box. No interline glue is placed between boxes in vertical leaders; the boxes are just stacked right on top of each other. \ddanger If you specify horizontal leaders with a box whose width isn't @@ -13949,7 +13976,7 @@ and produces ordinary glue instead. is at least $10\pt$ long and extends all the way to the right margin, like this: \null\nobreak\leaders\hrule\hskip10pt plus1filll\ \par -\answer For example, say +\answer For example, say this: \begintt \null\nobreak\leaders\hrule\hskip10pt plus1filll\ \par \endtt @@ -14043,9 +14070,9 @@ printing devices, via \TeX's ^|\special| command. \ddanger The ability to write text files that can later be input by other programs (including \TeX) makes it possible to take care of tables of contents, indexes, and many other things. You can say -`|\openout|\<number>|=|\<file name>' and `|\closeout|\<number>' by analogy +`|\openout|\<number>|=|\<filename>' and `|\closeout|\<number>' by analogy with the |\openin| and |\closein| commands of Chapter~20; the -\<number> must be between 0 and~15. The filename is usually extended with +\<number> must be between 0 and~15. The file name is usually extended with `^|.tex|' if it has no extension. There is a |\write| command that writes one line to a file, analogous to the |\read| command that reads one line; you say @@ -14154,9 +14181,9 @@ involves a macro |\chapno|, containing the current chapter number, as well as be expanded immediately, because it might change before the token list is written; but you want |\the\count0| to be expanded at the time of |\shipout|. How can you manage this? -\answer |{\let|\stretch|\the=0\edef|\stretch|\next|\stretch -|{\write|\stretch|\cont|\stretch|{|\<token list>|}}\next|\stretch|}| will -expand everything but |\the| when the |\write| command is given. +\answer If you say `|{\let|\stretch|\the=0\edef|\stretch|\next|\stretch +|{\write|\stretch|\cont|\stretch|{|\<token list>|}}\next|\stretch|}|', +the |\write| will be exercuted after |\edef| expands everything except |\the|. \ddanger Now let's wrap up our study of boxes by considering one more feature. The command `^|\special||{|\<token list>|}|' can be given in any @@ -14297,7 +14324,8 @@ implicitly inserts braces around each individual entry of an alignment. \danger Once you have issued a |\settabs| command, the tabs remain set until you reset them, even though you go ahead and type ordinary paragraphs as usual. But if you enclose |\settabs| in |{...}|, the tabs defined inside a group -don't affect the tabs outside; `^|\global||\settabs|' is not permitted. +don't affect the tabs outside; `^|\global||\settabs|' will not do what +you might think it should. \danger Tabbed lines usually are used between paragraphs, in the same places where you would type ^|\line| or ^|\centerline| to get lines with @@ -14344,8 +14372,9 @@ The |\settabs| command in this example makes column~1 as wide as a paragraph ^^{indention, see indentation} indentation; and column~2 is as wide as `Horizontal lists' plus one quad of space. ^^|\quad| Only two tabs are set in this case, because only two |&|'s -appear in the sample line. \ (A sample line might as well end with~|&|, -because the text following the last tab isn't used for anything.) +appear in the sample line. \ (A sample line usually ends with~|&\cr|, as it +does here, because text material between the last tab and |\cr| +isn't used for anything.) The first line of a table can't always be used as a sample line, because it won't necessarily give the correct tab positions. In a large table you have @@ -14481,7 +14510,7 @@ Thus, the following is recommended: \+\bf while $p>0$ do\cr \+\quad\cleartabs&{\bf begin} $q:={\it link}(p)$; ${\it free\_node}(p)$; $p:=q$;\cr - \+&{\bf end};\cr + \+&{\bf end};\cr % note that the semicolon isn't bold \endtt \danger Although |\+| lines can be used in vertical boxes, you must never @@ -15474,7 +15503,8 @@ put |\bigstrut| into some column of the title line, for some appropriate invisible box |\bigstrut| of width zero. Either way makes the table look better. -\ddangerexercise Typeset the following chart, making it exactly 36em wide: +\ddangerexercise Typeset the following chart, making it exactly +36\thinspace em wide: ^^{family tree} ^^{Bohning [Knuth], Louise Marie} ^^{Ehlert [Bohning], Pauline Anna Marie} @@ -15731,7 +15761,7 @@ output routine puts out a special line of text called the {\sl^{headline}\/} at the top of each page, and another special line of text called the {\sl^{footline}\/} at the bottom. The headline is normally blank, and the footline is normally a centered page number, but you can specify any -headline and footline that you want by redefining the control sequences +headline and footline that you want by changing the token lists ^|\headline| and ^|\footline|. For example, ^^|\hrulefill| \begintt \headline={\hrulefill} @@ -15839,8 +15869,8 @@ on the broken-off page can be removed and carried forward to the next page. \ddanger The current ^|\output| routine is defined as a token list parameter, just like ^|\everypar| or ^|\errhelp|, except that \TeX\ -automatically inserts a begin-group symbol~`|{|' at the beginning -and an end-group symbol~`|}|' at the end. These ^{grouping characters} +retains the begin-group symbol~`|{|' at the beginning +and the end-group symbol~`|}|' at the end. These ^{grouping characters} help to keep the output routine from interfering with what \TeX\ was doing when the page break was chosen; for example, an output routine often changes the ^|\baselineskip| when it puts a headline @@ -15881,7 +15911,7 @@ even though \TeX\ might no longer be making ^{spaces active} at that time. certain internal registers and parameters, in addition to |\box255|, just before the output routine begins. Insertions are put into their own vboxes, and ^|\insertpenalties| is set equal to the total number of -heldover insertions; furthermore the ^|\outputpenalty| parameter is +held-over insertions; furthermore the ^|\outputpenalty| parameter is set to the value of the penalty at the current breakpoint. An output routine can be made to do special things when these quantities have special values. For example, the output routine of plain \TeX\ recognizes @@ -15999,7 +16029,7 @@ the vertical list. ^{Ragged-bottom setting} is achieved by inserting ^^|\vfil| \textindent{4)} The ^|\makefootline| macro puts ^|\footline| into its proper position: \begintt -\baselineskip=24pt +\baselineskip=24pt \lineskiplimit=0pt \line{\the\footline} \endtt @@ -17132,7 +17162,7 @@ comparatively few patterns, as indicated by the following syntax rules: \alt<fontdef token>\alt<family assignment>\alt<shape assignment> \alt^|\read|<number>[to]<optional spaces><control sequence> \alt^|\setbox|<8-bit number><equals><filler><box> - \alt^|\font|<control sequence><equals><file name><at clause> + \alt^|\font|<control sequence><equals><filename><at clause> \alt<global assignment> <variable assignment>\is<integer variable><equals><number> \alt<dimen variable><equals><dimen> @@ -17206,8 +17236,8 @@ effect. <font assignment>\is^|\fontdimen|<number><font><equals><dimen> \alt^|\hyphenchar|<font><equals><number> \alt^|\skewchar|<font><equals><number> -<hyphenation assignment>\is^|\hyphenation|<general text> - \alt^|\patterns|<general text> +<hyphenation assignment>\is^|\hyphenation|<filler>|{|<hyphenations>|}| + \alt^|\patterns|<filler>|{|<patterns>|}| <box size assignment>\is<box dimension><8-bit number><equals><dimen> <interaction mode assignment>\is^|\errorstopmode|\alt^|\scrollmode| \alt^|\nonstopmode|\alt^|\batchmode| @@ -17223,11 +17253,11 @@ dimen> quantities were listed above when we discussed internal integers and dimensions. When |\prevgraf| is set to a \<number>, the number must not be negative. -The syntax for ^\<file name> is not standard in \TeX, because different +The syntax for ^\<filename> is not standard in \TeX, because different operating systems have different conventions. You should ask your local system wizards for details on just how they have decided to implement file names. However, the following principles should hold universally: -A~\<file name> should consist of \<optional spaces> followed by explicit +A~\<filename> should consist of \<optional spaces> followed by explicit character tokens (after expansion). A sequence of six or fewer ordinary letters and/or digits followed by a space should be a file name that works in essentially the same way on all installations of\/ \TeX\null. Uppercase @@ -17790,7 +17820,7 @@ that ends with such a character. ^^|\discretionary| \\^|\accent|\<8-bit number>\<optional assignments>. Here ^\<optional assignments> stands for zero or more \<assignment> -commands other than ^|\setbox|. +commands other than ^|\setbox|, possibly with \<filler>. If the assignments are not followed by a \<character>, where \<character> stands for any of the commands just discussed in the previous paragraph, \TeX\ treats |\accent| as if it were |\char|, except that @@ -17808,11 +17838,12 @@ Finally, \TeX\ sets |\spacefactor=1000|. If the last item on the current list is a character or ligature, an explicit kern for its ^{italic correction} is appended. -\\^|\discretionary|\<general text>\<general text>\<general text>.\enskip -The three general texts are processed in restricted horizontal mode. They -should contain only fixed-width things; hence they aren't really very -general in this case. More precisely, the horizontal list formed by each -discretionary general text must consist only of characters, ligatures, +\\^|\discretionary|\<disc text>\<disc text>\<disc text>.\enskip +A \<disc text> has the form `\<filler>|{|\<horizontal mode material>|}|', +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 @@ -18100,9 +18131,9 @@ A kern of width zero is appended to the current list. \ (This will have the effect of adding the italic correction to the previous character, if the italic correction wouldn't normally have been added.) -\\^|\discretionary|\<general text>\<general text>\<general text>. -This command is treated just as in horizontal mode (see Chapter~25), but the -third \<general text> must produce an empty list. +\\^|\discretionary|\<disc text>\<disc text>\<disc text>. +This command has the same effect as in horizontal mode (see Chapter~25), but the +third ^{\<disc text>} must produce an empty list. \\^|\-|.\enskip This command is usually equivalent to `|\discretionary{-}{}{}|'; @@ -18569,7 +18600,7 @@ document. Here are some of the messages you might get just before Fatal format file error; I'm stymied. ^^|Fatal format file error| This means that the preloaded format you have specified cannot be used, -because it was prepared for a different version of \TeX. +because it is corrupted or was prepared for a different version of \TeX. \fatal That makes 100 errors; please try again. \TeX\ has scrolled past 100 errors since the last paragraph ended, so @@ -19059,8 +19090,8 @@ The main purpose of the example is to serve as a reminder of the repertoire of possibilities. Most of the control sequences used in the example are defined by -macros of plain \TeX\ format, but three of them are ^{primitive}, i.e., -built~in: `|\par|' (end of paragraph), `|\noindent|' (beginning of +macros of plain \TeX\ format; but some of them are ^{primitive} (built in), +such as `|\par|' (end of paragraph), `|\noindent|' (beginning of non-indented paragraph), and `|\/|' (italic correction). The example also assigns values to two of \TeX's primitive parameters, namely |\hsize| and |\vsize|. \TeX\ has scores of parameters, all of which @@ -19277,12 +19308,13 @@ based on the delimiters available in Computer Modern: |\delcode`\<="26830A \delcode`\\="26E30F \delcode`\>="26930B| \endlines It's important to note that |\delcode`\{| and |\delcode`\}| have been left -equal to~$-1$. If those codes were set to certain values, a user would -^^{left brace} ^^{right brace} be able to type, e.g., -`|\big{|' to get a big left brace; but it would be a big mistake. -The reason is that ^{braces} are used for grouping, when supplying -arguments to macros; all sorts of strange things can happen if you try -to use them both as math delimiters and group delimiters. +equal to~$-1$. +^^{left brace} ^^{right brace} +^{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 |\big|. (One could change their catcodes +to~12, and use some other pair of characters for grouping; but that +would not be plain \TeX.) At this point the |plain.tex| file contains several definitions \beginlines @@ -19310,8 +19342,8 @@ temporary ``^{scratch}'' use, but their values are always assumed to be clobbered whenever any other macro might get into control. \ (This applies to registers like |\dimen0|, |\toks0|, |\skip1|, |\box3|, etc.; but \TeX\ has already reserved |\count0| through |\count9| for page number -identification.) \ (2)~The registers |\count255|, |\dimen255|, and -|\skip255| are freely available in the same way. +identification.) \ (2)~The registers |\count255|, |\dimen255|, |\skip255|, +|\muskip255|, and |\toks255| 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 ^|\global|; all assignments to the other scratch registers (0,~2, 4, 6, 8,~255) should be non-|\global|. @@ -19328,7 +19360,7 @@ apply to ^{input/output streams} used by ^|\read| and ^|\write|, to math ^{families} used by ^|\fam|, to sets of hyphenation rules used by ^|\language|, and to insertions (which require ^|\box|, ^|\count|, ^|\dimen|, and ^|\skip| registers all having the -same number). +same number).\looseness=-1 Some handy abbreviations are introduced at this point so that the macros below will have easy access to scratch registers: @@ -19366,16 +19398,16 @@ particular way. |\countdef\insc@unt=20 % nickname for the insertion counter| |\countdef\allocationnumber=21 % the most recent allocation| |\countdef|^|\m@ne||=22 \m@ne=-1 % a handy constant| -|\def|^|\wlog||{\immediate\write-1} % this will write on log file (only)| +|\def|^|\wlog||{\immediate\write-1 } % this will write on log file (only)| \smallbreak |\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 % this allows 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}| @@ -19594,8 +19626,8 @@ control sequence |\preloaded| is made undefined at the very end, so those fonts cannot be used directly. There are two reasons for this strange approach: First, it is desirable to keep the total number of fonts of plain \TeX\ relatively small, because plain \TeX\ is a sort of -standard format; it shouldn't cost much for someone to acquire all the -fonts of plain \TeX\ in addition to those he really wants. Second, it +standard 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 preload the information for most of the fonts that people will actually be using, since this saves a lot of machine time. The |\preloaded| font @@ -20469,7 +20501,7 @@ up ^|\rm| type, and that's all! |\catcode`@=12 % at signs are no longer letters| \nobreak\smallskip |\def|^|\fmtname||{plain}| -|\def\fmtversion{3.141592653} % identifies the current format| +|\def\fmtversion{3.1415926535} % identifies the current format| \endlines The format name and version number are recorded in control sequences, in order to help the people who might have to explain why something @@ -20666,7 +20698,7 @@ A person who implements \TeX\ on computer systems that do not have 95~externally representable symbols should adhere to the following guidelines: \ (a)~Stay as close as possible to the ASCII conventions. \ (b)~Make sure that codes \oct{041}--\oct{046}, \oct{060}--\oct{071}, -\oct{141}--\oct{146}, and \oct{160}--\oct{171} are present and that +\oct{136}, \oct{141}--\oct{146}, and \oct{160}--\oct{171} are present and that each unrepresentable internal code $<\null$\oct{200} leads to a representable code when \oct{100} is added or subtracted; then all 256 codes can be input and output. @@ -20761,14 +20793,14 @@ need to be familiar with the fine points in Chapter~20. \TeX's control sequences are divided into two main categories, ``expandable'' and ``unexpandable''; the former category includes all macros and |\if...\fi| tests, as well as special operations like |\the| and |\input|, while the -latter category includes the primitive commands listed in Chapter~24. +latter category includes the primitive commands listed in Chapters~24--26. The expansion of expandable tokens takes place in \TeX's ``^{mouth},'' but primitive commands (including assignments) are done in \TeX's ``^{stomach}.'' One important consequence of this structure is that it is impossible to redefine a control sequence or to advance a register while \TeX\ is expanding the token list of, say, a |\message| or |\write| command; assignment operations are done only when \TeX\ is building a -vertical or horizontal or math list. +vertical or horizontal or math list.\looseness=-1 For example, it's possible to put |\n| asterisks into a paragraph, by saying simply `|{|^|\loop||\ifnum\n>0 *\advance\n-1 \repeat}|'. @@ -20867,7 +20899,7 @@ where the characters `|pt|' are of category~12. After the macro definitions \begintt {\catcode`p=12 \catcode`t=12 \gdef\\#1pt{#1}} \let\getfactor=\\ -\def\kslant#1{\kern\expandafter\getfactor\the\fontdimen1#1\ht0} +\def\kslant#1{\kern\expandafter\getfactor\the\fontdimen1#1\ht0 } \endtt one can write, e.g., `|\kslant\tenit|' and this will expand to `|\kern0.25\ht0|'. If the boundary of\/ |\box0| is considered to be @@ -20921,11 +20953,11 @@ The goal is to set \TeX\ up so that the respective constructions `\thinspace|$$|$\,\alpha\,$|$$|\thinspace', ^^{dollar dollar} `\thinspace|$$|$\,\alpha\,$^|\eqno|$\,\beta\,$|$$|\thinspace', and `\thinspace|$$|$\,\alpha\,$^|\leqno|$\,\beta\,$|$$|\thinspace' will cause -a macro |$$\generaldisplay$$| to be invoked, with |\eq| defined to be $\alpha$; +a macro |$$\generaldisplay$$| to be invoked, with |\eq| defined to be $\alpha$. ^^{communication between macros} -furthermore, the test |\ifeqno| should be true when an equation -number~$\beta$ is present, and |\ifleqno| should be true in the case -of\/ |\leqno|. When $\beta$ is present, it should be stored in~|\eqn|. +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 $\alpha$~and~$\beta$ are arbitrary balanced token lists that don't contain either |\eqno| or |\leqno| at nesting level zero. The following macros do the required maneuvers: @@ -21328,7 +21360,8 @@ to an almost-verbatim transcript: \endtt Tokens are stripped off in this construction since, for example, ^|\meaning||\next| might be `\def\next{$this$ is {\it!}}% -\expandafter|\meaning\next|'. Notice that a space will be inserted after +\hbox{\kern1pt\expandafter|\meaning\next|}'. +Notice that a space will be inserted after the control word |\it|, but no space might actually have occurred there in the argument to |\verbatim|; such information has been irretrievably lost. @@ -22469,7 +22502,7 @@ How should the output routine break such a box up into three roughly equal pieces? Notice that the contents of the box are completely rigid; i.e., there is no glue that can stretch or shrink. Furthermore, we can assume that the contents of the box are regular, i.e., that the -inter-baseline distances are all the same. In such circumstances +interbaseline distances are all the same. In such circumstances a fairly simple ^{balancing} routine can be used to trisect the box. Let's consider a more general problem: Suppose that a rigid vbox is given, @@ -22538,9 +22571,9 @@ In our application to footnotes, the |\output| routine can reformat the contents of\/ |\box\footins| by saying, for example, \begintt \rigidbalance\footins 3 7pt -\setbox\footins=\lastbox +\setbox2=\lastbox \setbox\footins=\vbox{\box2} \endtt -since ^|\lastbox| will be the result of\/ |\rigidbalance|. +since ^|\lastbox| will be the result of\/ |\rigidbalance|, which is an hbox. This solution to the problem of short footnotes might result in ^{club lines} or ^{widow lines}, since the balancing routine we have @@ -22994,7 +23027,7 @@ end of the ^|\body| and the beginning of a ^|\ps|. | {|^|\endgraf||\nobreak}}}| |\def\annotations{\beginlinemode\def\par{\endgraf\nobreak}\obeylines\par}| |\def\ps{\beginparmode\nobreak| -| \interlinepenalty5000\def\par{\endgraf\penalty5000}}| +| \interlinepenalty5000\def\par{\endgraf\penalty5000 }}| \endlines The remaining portion of |letterformat.tex| deals with ^{letterheads} and @@ -23371,7 +23404,7 @@ should be ascribed to Herb Caswell; if it has any blemishes, they should be ascribed to Don Knuth, who wrote the formatting macros that we are now about to discuss. -The computer file |manual.tex| that generated {\sl The \TeX book\/} begins +The computer file |texbook.tex| that generated {\sl The \TeX book\/} begins with a copyright notice, and then it says `|\input| |manmac|'. The auxiliary file ^|manmac.tex| contains the formatting macros, and it begins by loading 9-point, 8-point, and 6-point~fonts: @@ -23620,7 +23653,7 @@ The next macros are concerned with chapter formatting. Each chapter in the manuscript file starts out with the macro ^|\beginchapter|; it ends with ^|\endchapter| and two ^{quotations}, ^^{epigraphs} followed by ^|\eject|. For example, Chapter~15 was generated by \TeX\ commands -that look like this in the file |manual.tex|: +that look like this in the file |texbook.tex|: \beginlines |\beginchapter Chapter 15. How \TeX\ Makes\\Lines into Pages| \medskip @@ -23755,7 +23788,7 @@ using the macros |\pt|, |\<|, |\oct|, |\hex|, and |\cstok|. |\def\MF{{\manual META}\-{\manual FONT}}| |\def\AmSTeX{$\cal A\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.075em| | S$-\TeX}| -|\def\bull{\vrule height .9ex width .8ex depth -.1ex } % square bullet| +|\def\bull{\vrule height.9ex width.8ex depth-.1ex \relax} % square bullet| |\def\SS{{\it SS}} % scriptscript style| |\def\dn{\leavevmode\hbox{\tt\char'14}} % downward arrow| |\def\up{|^|\leavevmode||\hbox{\tt\char'13}} % upward arrow| @@ -23931,7 +23964,7 @@ in the text as well as in the index. ^^{strut} ^|\newwrite||\inx| ^|\immediate|^|\openout||\inx=index % file for index reminders| |\def\marginstyle{\sevenrm % marginal notes are in 7-point type| -| \vrule height6pt depth2pt width0pt } % a strut for \insert\margin| +| \vrule height6pt depth2pt width0pt \relax} % a strut for \insert\margin| \endlines Sometimes it is desirable to index words that don't actually appear on the @@ -24127,7 +24160,7 @@ showing |cmr10| (^|\rm|, |\textfont0|). \noindent Plain \TeX\ makes use of sixteen basic fonts: $$\halign{\indent$\nulldelimiterspace=0pt \left.\ninepoint\vcenter{#}\,\hfil\right\}$ &#\hfil\cr -\halign{\strut\tt cm# \ \hfil&(Computer Modern #)\hfil&\hidebrace{#}\hfil\cr +\halign{\strut\tt cm# \ \hfil&(Computer Modern #)\hfil\cr r10&Roman 10 point\cr r7&Roman 7 point\cr r5&Roman 5 point\cr @@ -24136,7 +24169,7 @@ bx7&Bold Extended 7 point\cr bx5&Bold Extended 5 point\cr sl10&Slanted Roman 10 point\cr ti10&Text Italic 10 point\cr}&text\cr -\halign{\strut\tt cm# \ \hfil&(Computer Modern #)\hfil&\hidebrace{#}\hfil\cr +\halign{\strut\tt cm# \ \hfil&(Computer Modern #)\hfil\cr tt10&Typewriter Type 10 point\cr mi10&Math Italic 10 point\cr mi7&Math Italic 7 point\cr @@ -24659,7 +24692,7 @@ relation, as in `$x:=y$' and `$a:b::c:d$', which you type by saying \hbox to 115pt{$L(a,b;c\colon x,y;z)$\hfil}\enspace |$L(a,b;c\colon x,y;z)$|\cr \enddisplay -Plain \TeX\ also defines ^|\ldotp| and ^|\cdotp| to be `.' and `$\cdot$' +Plain \TeX\ also defines ^|\ldotp| and ^|\cdotp| to be `.'\ and `$\cdot$' with the spacing of commas and semicolons. These symbols don't occur directly in formulas, but they are useful in the definition of\/ ^|\ldots| and ^|\cdots|. @@ -25026,11 +25059,12 @@ so that the bottom of the hrule occurs at $a-{1\over2}\theta$ above the baseline. \rule 15e. Enclose the vbox that was constructed in Rule 15c or 15d by -delimiters whose height plus depth is at least $\sigma_{20}$, if $C>T$, and at +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 Inner atom whose nucleus is the resulting sequence of three boxes -(left delimiter, vbox, right delimiter). +fraction by an Ord atom whose nucleus is the resulting sequence of three boxes +($\lambda$, vbox, $\rho$). Go to rule~19. \bigbreak\noindent Rules 1--15 account for the preliminary processing of math list items; @@ -25122,7 +25156,8 @@ f,2\delta-l)$, where $f$ is the ^|\delimiterfactor| and $l$ is the ^|\delimitershortfall|. Shift the delimiters up or down so that they are vertically centered with respect to the axis. Change the left boundary item to an Open atom and the right boundary item to -a Close atom. \ (All of the calculations in this step are done with +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.) @@ -25590,7 +25625,7 @@ until coming to something that's not one of the following three is nonzero; (2)~a ligature formed entirely from characters of type~(1); (3)~an implicit kern. The first inadmissible item terminates this part of the process; the trial word consists of all the letters found in admissible -items. Notice that all of these letters are in font~$f$. +items, up to a maximum of~63. Notice that all of these letters are in font~$f$. \ddanger If a trial word $l_1\ldots l_n$ has been found by this process, hyphenation will still be abandoned unless $n\ge\lambda+\rho$, where @@ -25675,7 +25710,7 @@ when according to legend, an RCA Marketing Manager received a phone call from a disturbed customer. His 301 had just hyphenated ``God.'' \author PAUL E. ^{JUSTUS}, {\sl There's More to Typesetting Than % Setting Type\/} (1972) -% in {\sl IEEE Transactions on Professional Commun. vol PC-15, pp. 13-15 +% in IEEE Transactions on Professional Commun. vol PC-15, pp. 13-15 \bigskip @@ -25777,7 +25812,7 @@ redefine them. |\'| (acute accent), @7--9, 52--53, @305, @335, +356, @420. |''| ( '' ), @3--5, @24, 394--395. |`| (reverse apostrophe or left quote), 3--5, 51, 132, 134, @305, 391, 394--395; - \also alphabetic constant. + \also alphabetic constants. |\`| (grave accent), 8, 52--53, @305, +356. |``| ( `` ), @3--5, @24, 394--395. |"| (double quote or ditto mark), 52, 53, 134; \also hexadecimal. @@ -25787,7 +25822,7 @@ redefine them. |)| (right parenthesis), 51, 134, @140, @145--150, 345. |[| (left bracket), 51, 134, @146--148, 171, @408, @437. |[]|, +28, @+79, @302. -|[1]|, 23, +119. +|[1]| (progress report), 23, +119. |]| (right bracket), 51, 134, @146--147, 171, 345, @408, @437. |{| (left brace), @13--14, @19--21, 38, 51, @200--202, +203--+204, @205--206, 216, +269, 275--276, +283, +286, +291, @330. @@ -25840,7 +25875,7 @@ $:=$, 133. |?`|\hbox{ }(open question), 51. |!|\hbox{ }(exclamation point), 51, @72, 73, 75, @169. |!`|\hbox{ }(open exclamation), 51. -|\!|\ (negative thin space), +167, @169, +357. +|\!|\ (negative thin space), 167, @169, +357. |_| (underscore), 38, 51, @128--130, 134. |\_| ( \_ ), 38, @165, +356. |^| (hat), 38, 51, @128--130, 134, 369, @423. @@ -25856,8 +25891,8 @@ $:=$, 133. |@@|, 98--99. |\@ne|, +345. \newletter -|\aa| ( \aa\ ), +356. -|\AA| ( \AA\ ), +356. +|\aa| ( \aa\ ), @52, +356. +|\AA| ( \AA\ ), @52, +356. abbreviations, @73--74, @340; \also macros. *|\above| (general fraction), @143, 152, +292, 444--445. *|\abovedisplayshortskip|, +189, 274, @348, @415. @@ -25890,7 +25925,7 @@ al-Khw\^arizm\^\i, abu `Abd All\^ah Mu\d{h}ammad ibn M\^us\^a, 53. |\aleph| ( $\aleph$ ), 9, +358, 435. Alice, 4, 387, 394. alignment displays, 190, 193, +291. -\<alignment material>, 282, 285. +\<alignment material>, 282, 285, 291. alignments, 231--249, +282, 302--303, 385--386, 392; \also tabbing. Alka-Seltzer, 404--405. all caps, \see |\uppercase|. @@ -26067,7 +26102,7 @@ Bourbaki, Nicolas, 106. |\bowtie| ( $\bowtie$ ), +358, 436. \<box>, 120, 222, +278, 282, 285, 290. *|\box| (use box register), 120--122, 151, 222, +278, 346, @354, @386, @387. -|\box255|, 125, 253--258. +\sub |\box255|, 125, 253--258. \<box dimension>, +271, 277. box displays, 66, 75, 79, 158--159, 302, 455. box memory, 300, 394. @@ -26135,7 +26170,7 @@ Caswell, Herbert Ernest, 413. @421, @424. category codes, 37--40, +47, 48, 203--205, 209--210, 214, 381. \sub table, 37. -|cc| (cicero), 57, 270. +|cc| (cicero), +57, 270. |\cdot| ( $\cdot$ ), @133, @172, 319, 436. |\cdotp|, 358, +359, 438. |\cdots| ( $\cdots$ ), @172, @176, @180--181, +359, 438. @@ -26178,12 +26213,12 @@ classes of math characters, table, 154. *|\cleaders|, +224, 225--226, @357, @374. |\cleartabs|, @234, +354. Close atom, 158, 170--171, 289, 443--444, 446. -*|\closein|, 217, 280. +*|\closein|, +217, 280. *|\closeout|, 226--228, 254, +280, @422. |\closing|, @403--404, +407. closings, 134, 147, 154--155, 359, +437; \also Close atom. club lines, 104, 272, 398. -*|\clubpenalty|, 104, 113, 272, 317, @348, @419. +*|\clubpenalty|, +104, 113, 272, 317, @348, @419. |\clubsuit| ( $\clubsuit$ ), 435. |cm| (centimeter), @24, +57, 270. |cmbx| fonts, 60, 350, 413, 428, 433. @@ -26356,6 +26391,7 @@ dimensions, 57--61. Dionysius I of Syracuse, 239. diphthongs, \see |\ae|, |\oe|. direct sum, \see |\oplus|. +\<disc text>, +287, 292. discardable items, 95, 110--112, 124, @393. *|\discretionary|, 95--96, 283, 286, +287, +292. discretionary hyphens, 28, 95--96, 453, +455. @@ -26370,7 +26406,7 @@ displays, 87, 103, @139--145, @166--167, 185--197, @232, @241, 315. \sub non-centered, 186, 326, 375--376, 420--421. \sub positioning of, +188--+190. *|\displaystyle|, 141--142, +292, @362. -*|\displaywidowpenalty|, 104, 272, @348. +*|\displaywidowpenalty|, +104, 105, 272, @348. *|\displaywidth|, 188, 190, 274, 349. Disraeli [Beaconsfield], Benjamin, earl, 219. ditto mark, 53, 441. @@ -26541,10 +26577,10 @@ fields of atoms, 158--159, 289--291. \<fil dimen>, +271. \<fil unit>, +271. |\filbreak|, 111, +353. -\<file name>, 214, 216, 226, 277, +278. file names, 25, 214, 216--217, 226, 278. file pages, 343. file types, \see |.dvi|, |.fmt|, |.tfm|, |.tex|, log file, terminal. +\<filename>, 214, 216, 226, 277, +278. |fill|, 72, 118--119, +271, @347. fill page with blank space, \see |\vfill|. \<filler>, +276, 278, 280--282, 289. @@ -26613,7 +26649,7 @@ Gamble, James, 38. |\gcd| ( $\gcd$ ), 162, @192, 361. *|\gdef|, +206, 215, 275, @352, @407. |\ge| ( $\ge$ ), 9, 45, @175, 318, +361, 438. -\<general text>, +276, 277, 279, 280, 287, 292. +\<general text>, +276, 279, 280. generalized fraction, 152, 157, +292, +444--+445. generic coding, 194, 203. generic matrix, 177, 245. @@ -26715,7 +26751,7 @@ horizontal braces, @176, 225--226, @339. \<horizontal command>, +283. horizontal lists, 64, +94--+95. horizontal mode, 85--89, 105, +285--+287. -\<horizontal mode material>, 278. +\<horizontal mode material>, 278, 285, 287. \<horizontal rule>, 281. horizontal rules, 24, 64, 221--226, 246, +282. \<horizontal skip>, 285, 290. @@ -26793,7 +26829,7 @@ infinite penalty, 97, 111, 254--256, 264, 286, 400. |\infty| ( $\infty$ ), 9, 318, 435. inhibiting expansion, 216, 262--263, 377. |INITEX|, 39, 41, 76, 157, 283, 336, 343--345, 453. -Inner atom, 158, 170, 289, 443, 445--446. +Inner atom, 158, 170, 289, 292, 443, 446. *|\input|, 7, 9, @25--27, 47, 199, +214, 217, @380, 382--383, @403, @422. input/output commands, \see |\input|, |\read|, |\write|, |\message|, |\dump|. input/output streams, 346, \see |\openin|, |\openout|. @@ -26803,11 +26839,11 @@ input stack, 300, 374. inserting text online, 31. insertions, 110, 115--117, 122--125, 256, 335. *|\insertpenalties|, 111, 114, +123--+125, 214, 254, @256, 271. -|\int| (large $\smallint$), 144, @168--169, @192, 358, 435. +|\int| (large $\smallint$), 144, @168--169, @192, +358, 435. \<integer constant>, +269--+270. \<integer parameter>, 271, +272--+273, 276. \<integer variable>, +276. -integral signs, \see |\int|, |\smallint|. +integral signs, \see |\int|, |\oint|, |\smallint|. \sub multiple, @169, @180. inter-column spacing, 237--239, 247, 392. interacting with \TeX, 31--34, 217--218, 228, 295--299. @@ -26815,7 +26851,7 @@ interacting with \TeX, 31--34, 217--218, 228, 295--299. |\interdisplaylinepenalty|, @193, 349, 362. |\interfootnotelinepenalty|, 349, 363. interline glue, 78--79, +80, 104, 105, 125, 221, 245, 263, 281--282, 335, 352, 399, 409. -*|\interlinepenalty|, +104, 272, @363, @406, @419. +*|\interlinepenalty|, +104, 105, 272, @363, @406, @419. internal box-and-glue representation, 66, 75, 79, 158--159, 302, 455. internal character codes, 43--46, 367--370. \<internal dimen>, +271. @@ -26901,7 +26937,7 @@ leaders, 222, 223--226, 228, 280--282, 285, 290, @357, @392--394. leading, \see |\baselineskip|, |\vskip|. |\leavevmode|, 313, @333, @+356, @408, @420. Lee, Marshall, 17. -*|\left|, @148--150, 155--157, @171, 196, +292, 437. +*|\left|, @148--150, 155--157, 170, @171, 196, +292, 437. left brace, @13--14, @19--21, 38, 51, @200--202, +203--+204, @205--206, 216, +269, 275--276, +283, +286, +291, @330. \<left brace>, +275. @@ -26909,7 +26945,7 @@ left bracket, 51, 134, @146--148, 171, @408, @437. left delimiters, \see openings. left-hand pages, 252--253, @416. left parenthesis, 51, 134, @140, @145--150, 345. -left quote, 3--5, 132, 134, @305, 394--395; \also alphabetic constant. +left quote, 3--5, 132, 134, @305, 394--395; \also alphabetic constants. |\leftarrow| ( $\leftarrow$ ), 226, 437. |\Leftarrow| ( $\Leftarrow$ ), 226, 437. |\leftarrowfill| (\hbox to4em{\leftarrowfill}), +357. @@ -26921,7 +26957,7 @@ left quote, 3--5, 132, 134, @305, 394--395; \also alphabetic constant. |\Leftrightarrow| ( $\Leftrightarrow$ ), 437. *|\leftskip|, 100, 274, @317, @407, @419. Legendre symbol, 152. -Leontief, Wassily Wassily, 265. +Leontief, Wassily Wassily, 265. % acc to his postcard to me, 25 Feb 1983 |\leq| ( $\leq$ ), 318, +358, 436. |\leqalignno|, 192, 194, +362. *|\leqno|, @187, 189, +293, 375--376. @@ -27037,6 +27073,7 @@ math formulas, how to type, 127--197. math italic, 164--165, 409, 430, 433. math lists, 157--159, 441--446. math mode, 85--89, 127, 157, +289--+293. +\<math mode material>, 287, 289--293. math spacing table, 170--171. \<math symbol>, +289. math symbols, 127--128. @@ -27198,8 +27235,8 @@ Norwegian characters, 45--46, 52--53, 370. $n$th, 323. |\nu| ( $\nu$ ), @128, @163, 434. nucleus, 158--159, 289--292, 441--446. -|\null|, 311, @332, +351. \<null> (ASCII code 0), 37, 39, 48, 343, 369. +|\null|, 311, @312, @316, @332, @335, +351, @354, @360--@362, @419. null control sequence, 46, 308. null delimiter, 149--150, 152, 156, 345, @360, @362. null set, \see |\emptyset|. @@ -27216,8 +27253,8 @@ numerical tables, 240--241. |\nwarrow| ( $\nwarrow$ ), 437. \newletter |O| versus |0|, 132. -|\o| ( \o\ ), +356. -|\O| ( \O\ ), +356. +|\o| ( \o\ ), @52, +356. +|\O| ( \O\ ), @52, +356. |\oalign|, +356. obelisk {\sl or\/} obelus, 53. |\obeylines|, @94, @249, @262, 342, +352, @380--382, @407, @419. @@ -27278,7 +27315,7 @@ other character, 37. output routines, 21, 112, 251--264, 417. \sub when invoked, 122, 125, 281. *|\outputpenalty|, +125, @254--255, 273, 349, 400, @417. -*|\over|, @139--141, @148, 152, 292, 437, 444--445. +*|\over|, @139--141, @148, 152, +292, 437, 444--445. Over atom, 158, 289, 443. |\overbrace|, @176, 225, +359. overfull boxes, 27--30, 94, 229, 238, 302--303, 307, 400. @@ -27289,7 +27326,7 @@ overlaps, 82--83, 386. *|\overline|, @130--131, @136, 141, 170, 291, 443. overloading, 54, 243. |\overrightarrow|, 226, +359. -*|\overwithdelims|, @152, 292, 444--445. +*|\overwithdelims|, @152, +292, 444--445. |\owns| ( $\owns$ ), +361, 438. \newletter |\P| ( \P\ ), 53, 117, +356, 438--439. @@ -27332,7 +27369,7 @@ parentheses, 51, 129, 134, @140, @145--150, 345, 437. *|\parfillskip|, 100, 188, 274, +286, 307, @315, 332, @348, @394, @419. *|\parindent|, 86, 100, 101--102, 105, @262, 274, 282, 286, 291, @342, @348, @355, @394, @406, @415. -*|\parshape|, 101--102, 214, 271, 272, 277, 283, @315, 349, 374. +*|\parshape|, 101--103, 214, 271, 272, 277, 283, @315, 349, 374. *|\parskip|, 79, 104--105, 262, 274, 282, @342, @348, @355, @406, @417. |\partial| ( $\partial$ ), @147, 435. Pascal, Blaise, 101--102. @@ -27416,7 +27453,7 @@ private control sequences, 344, 364, 414. Procter, William Alexander, 38. |\prod| (large $\Pi$), @180--181, 435. programming with \TeX, 217--219, 387--388. -programs, for computers, 38, 165, 234. +programs, for computers, 38, 165, @234. \sub for music, 408--412. proofreading, 59, 303. proper names, 73, 92. @@ -27483,6 +27520,8 @@ relations, @133--134, 147, 154--155, 358, +436, +437; \also Rel atom. |\removelastskip|, +353. |\repeat|, @217--219, +352. repeating commands, \see |\loop|. +repeating templates, \see periodic preambles. +replacement text, @200--@204, 212, 280, 300, 329. reserved characters, 37--38, 51--52, 134. reserved words, +61, 71, +268, 337, 370. restricted horizontal mode, 85, 87--89, +285--+287. @@ -27490,19 +27529,19 @@ r\'esum\'e, 253. \<return> (ASCII code 13), 23, 39, 43, 45, 46, 48, 249, 331, 343, 345, 369, 380. |\|\<return>, 8, @305, +351. reverse apostrophe, 3--5, 51, 132, 134, 391, 394--395; - \also alphabetic constant. + \also alphabetic constants. reverse slash, \see backslash. Reviewer, Ann Arbor, 106. |\rfloor| ( $\rfloor$ ), @146--147, +359, 437. |\rgroup|, 150, @176, +359, 437. |\rho| ( $\rho$ ), 128, @325, 434. |\rhook|, +358. -*|\right|, @148--150, 155--157, @171, 196, +292, 437. +*|\right|, @148--150, 155--157, @170--@171, 196, +292, 437. right brace, @13--14, @19--21, 38, 51, @200--202, +203--+204, @205--206, +269, 275--276, +279, 301, @330. \<right brace>, +275. right bracket, 51, 134, @146--147, 171, 345, @408, @437. -right delimiters, \see openings. +right delimiters, \see closings. right-hand pages, 252--253, @416. right justification, 71. right parenthesis, 51, 134, @140, @145--150, 345. @@ -27713,7 +27752,7 @@ stretchability, 69--71, @75, 409. |\strut|, 82, @142, 178, 240, @246--247, @316, @329, @333, +353, @396, @400, @421. |\strutbox|, @316, +353, @396, @414--415. -struts, +82, 125, 131, 142, 178, 245--247, 255, 329, 416, 422, 423. +struts, +82, 125, 131, 142, 155, 178, 245--247, 255, 329, 416, 422, 423. style change items, 157, 442. style-independent documents, 194, 203. styles of math formatting, 140--141, 441--447. @@ -27955,7 +27994,7 @@ variables in formulas, 132, 358, 434--435; \also Ord atom. vbox (box with vertical list inside), 65. *|\vbox|, 65, 80--82, 103, 151, 193, 222, 278, 388--389. Vcent atom, 158, 290, 443. -*|\vcenter|, 150--151, 159, 170, 193, 222, 242, +290, @361, +443. +*|\vcenter|, 150--151, 159, 170, 193, 222, 242, +290, @326, @361, +443. |\vdash| ( $\vdash$ ), 436. |\vdots| ( $\vdots$ ), @177, +359. |\vec| (math accent: $\vec x\,$), 135; \also |\overrightarrow|. @@ -27970,7 +28009,7 @@ vertical line (the character `\|'), 52, 53, 132, @146--147, @171, @174, 438; \also vertical rules. vertical lists, 64, +110. vertical mode, 85--89, +267--+283. -\<vertical mode material>, 278. +\<vertical mode material>, 278, 280--282, 290. \<vertical rule>, +281. vertical rules, 64, 151, 221--226, +285, +291, 392. \<vertical skip>, +281. @@ -28013,7 +28052,7 @@ whatsits, 95, 110, 157, 226--229, 455. |\widetilde| (math accent: $\widetilde x\,$), @136, +359. widow lines, 104, 272, 398. widow words, 104. -*|\widowpenalty|, 104, 113, 272, @348. +*|\widowpenalty|, +104, 105, 113, 272, @348. |width|, 221, 224, +282, 337. width of a box, 63--67, 77, 80--82, 225. wiggle, \see |\sim|. diff --git a/systems/knuth/dist/tex/trip.dvi b/systems/knuth/dist/tex/trip.dvi Binary files differnew file mode 100644 index 0000000000..d951a496c2 --- /dev/null +++ b/systems/knuth/dist/tex/trip.dvi diff --git a/systems/knuth/dist/tex/trip.fot b/systems/knuth/dist/tex/trip.fot index 7ae8e89d87..a6b3800563 100644 --- a/systems/knuth/dist/tex/trip.fot +++ b/systems/knuth/dist/tex/trip.fot @@ -1,4 +1,4 @@ -This is TeX, Version 3.14159265 (INITEX) +This is TeX, Version 3.141592653 (INITEX) ** &trip trip (trip.tex ## ! Bad number (-7). diff --git a/systems/knuth/dist/tex/trip.log b/systems/knuth/dist/tex/trip.log index 585bf9b1fa..37d7c29d07 100644 --- a/systems/knuth/dist/tex/trip.log +++ b/systems/knuth/dist/tex/trip.log @@ -1,4 +1,4 @@ -This is TeX, Version 3.14159265 (preloaded format=trip 2014.1.7) 7 JAN 2014 09:59 +This is TeX, Version 3.141592653 (preloaded format=trip 1776.7.4) 4 JUL 1776 12:00 ** &trip trip (trip.tex ## {vertical mode: \tracingrestores} @@ -1836,6 +1836,7 @@ the \fontdimen values needed in math symbol fonts. {restoring \mathsurround=0.0pt} {restoring \fam=0} {horizontal mode: \par} + ! Infinite glue shrinkage found in a paragraph. l.210 ...round60pt\hbox{$$}$\par } @@ -2428,7 +2429,7 @@ deleted material, e.g., by typing `I$}'. ### display math mode entered at line 249 \mathord .{} -this will be denominator of: +this will begin denominator of: \fraction, thickness = default \\mathord [] \\mathord [] @@ -3021,7 +3022,7 @@ oxbreadth 9999 \showboxdepth 9999 \showlists \pagegoal =10000pt} ./.\.\fam1 q ././\rule(9.0+*)x0.4 \mathord -this will be denominator of: +this will begin denominator of: \fraction, thickness 9.0 \{} ### math mode entered at line 280 @@ -5015,14 +5016,15 @@ you'd better type `E' or `X' now and fix your file. <to be read again> 8 l.356 ...ef\lo#1#2U3#4#5#6#7#8#8 - #9#{\relax} + #99#{\relax} I've inserted the digit you should have used after the #. Type `1' to delete what you did use. ! You already have nine parameters. l.356 ...\lo#1#2U3#4#5#6#7#8#8#9 - #{\relax} -I'm going to ignore the # sign you just used. + 9#{\relax} +I'm going to ignore the # sign you just used, +as well as the token that followed it. {blank space } {\ifcase} @@ -7294,7 +7296,7 @@ Memory usage before: 334&431; after: 292&418; still untouched: 175 (end occurred when iftrue on line 413 was incomplete) Here is how much of TeX's memory you used: 47 strings out of 1674 - 253 string characters out of 8354 + 253 string characters out of 8367 2825 words of memory out of 3000 372 multiletter control sequences out of 2100 3041 words of font info for 4 fonts, out of 20000 for 75 diff --git a/systems/knuth/dist/tex/trip.tex b/systems/knuth/dist/tex/trip.tex index a9205e52d5..0bcfe5c1a8 100644 --- a/systems/knuth/dist/tex/trip.tex +++ b/systems/knuth/dist/tex/trip.tex @@ -353,7 +353,7 @@ A \char'202$$\global\count8=\predisplaysize\leqno\kern1009pt$\par \def\b#1\par{} \outer\gdef\a^^@^^@a#1\par#2{}\tokens{\a^^@^^@a\par! \long\gdef\l#1{} -\outer\global\long\edef\lo#1#2U3#4#5#6#7#8#8#9#{\relax} +\outer\global\long\edef\lo#1#2U3#4#5#6#7#8#8#99#{\relax} \ifcase 1 \undefined\or\l\par\b{\par % occurrence of \par aborts \b \b{\l\undefined}\par\else\b{\par}\fi % but not there! \ifcase\iftrue-1a\else\fi \ifcase0\fi\else\ifcase5\fi\fi diff --git a/systems/knuth/dist/tex/trip.typ b/systems/knuth/dist/tex/trip.typ index 2ef2781289..8bc03e15f7 100644 --- a/systems/knuth/dist/tex/trip.typ +++ b/systems/knuth/dist/tex/trip.typ @@ -6,7 +6,7 @@ Options selected: Resolution = 72.27000000 pixels per inch numerator/denominator=25400000/473628672 magnification=2000; 0.00003052 pixels per DVI unit -' TeX output 2014.01.07:0959' +' TeX output 1776.07.04:1200' 42: beginning of page 0.0.0.0.11.0.0.0.0.0 87: down4 129105920 diff --git a/systems/knuth/dist/tex/tripin.fot b/systems/knuth/dist/tex/tripin.fot new file mode 100644 index 0000000000..c1b004b9d1 --- /dev/null +++ b/systems/knuth/dist/tex/tripin.fot @@ -0,0 +1,89 @@ +This is TeX, Version 3.141592653 (INITEX) +** +Please type the name of your input file. +**\input trip +(trip.tex +! Bad character code (256). +<to be read again> + - +l.26 \nonstopmode\lccode256- + 0\mathchardef\a="8000\def\a{ SC... +! Bad mathchar (32768). +<to be read again> + \def +l.26 ...\mathchardef\a="8000\def + \a{ SCALED 3~2769} +! Illegal magnification has been changed to 1000 (32769). +<to be read again> + \skewchar +l.28 \skewchar + \rip=`B \countdef\countz % \countz will be \c... +! Missing number, treated as zero. +<to be read again> + \def +l.29 \def + \on{1} \toksdef\tokens=256 \show\errorstopmode +! Bad register code (256). +l.29 ...{1} \toksdef\tokens=256 + \show\errorstopmode +> \errorstopmode=\errorstopmode. +l.29 ...=256 \show\errorstopmode + +> \rip . +<recently read> \font + +l.30 \showthe\font + \showthe\pageshrink \showthe\pagegoal +> 0.0pt. +l.30 ...font \showthe\pageshrink + \showthe\pagegoal +> 16383.99998pt. +l.30 ...shrink \showthe\pagegoal + +! Illegal unit of measure (replaced by filll). +l.32 ...fdim\hsize<\hsize\fi lll + minus 0 fill +\one \csname on line 60 +! You can't use `\badness' in vertical mode. +l.61 ...yphenpenalty 89 \badness + +! Bad \patterns. +l.75 ...uage256\patterns{0111 \? + 50AA1b3 *1AcA. bb bb1 0B2B0 b... +! Nonletter. +l.75 ...ge256\patterns{0111 \?50 + AA1b3 *1AcA. bb bb1 0B2B0 b1c... +! Duplicate pattern. +l.75 ...1b3 *1AcA. bb bb1 0B2B0 + b1c}} % *==space +! OK (see the transcript file). +l.78 ...ns{q9q} -\0qq \showlists + {\language\?\noboundary111}% +! Too late for \patterns. +l.79 ...har\rip=`-\cr}}\patterns + {toolate}\showbox0} +! OK (see the transcript file). +<to be read again> + } +l.79 ...terns{toolate}\showbox0} + + ) +(see the transcript file for additional information) +Beginning to dump on file trip.fmt + (preloaded format=trip 1776.7.4) +1326 strings of total length 23633 +471 memory locations dumped; current usage is 96&278 +341 multiletter control sequences +\font\nullfont=nullfont +\font\rip=trip +\font\smalltrip=trip at 5.0pt +\font\bigtr +p=trip at 20.0pt +2279 words of font info for 3 preloaded fonts +1 hyphenation exception +Hyphenation trie of length 273 has 9 ops out of 500 + 2 for language 255 + 1 for language 98 + 6 for language 0 +No pages of output. +Transcript written on trip.log. diff --git a/systems/knuth/dist/tex/tripin.log b/systems/knuth/dist/tex/tripin.log index 1d98379456..b74d9ca61a 100644 --- a/systems/knuth/dist/tex/tripin.log +++ b/systems/knuth/dist/tex/tripin.log @@ -1,4 +1,4 @@ -This is TeX, Version 3.14159265 (INITEX) 7 JAN 2014 09:09 +This is TeX, Version 3.141592653 (INITEX) 4 JUL 1776 12:00 **\input trip (trip.tex ! Bad character code (256). @@ -447,8 +447,8 @@ l.79 ...terns{toolate}\showbox0} ) Beginning to dump on file trip.fmt - (preloaded format=trip 2014.1.7) -1326 strings of total length 23646 + (preloaded format=trip 1776.7.4) +1326 strings of total length 23633 471 memory locations dumped; current usage is 96&278 341 multiletter control sequences \font\nullfont=nullfont |