diff options
author | Norbert Preining <norbert@preining.info> | 2024-01-30 03:00:44 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2024-01-30 03:00:44 +0000 |
commit | 084f5d8435744b7ea7ef487ec111a7bfd100ed62 (patch) | |
tree | d4e91f6ef6d075509a2b33942f57337725089951 /obsolete/macros | |
parent | 6c43653052d016d5913aabb728c484f0e62b4754 (diff) |
CTAN sync 202401300300
Diffstat (limited to 'obsolete/macros')
-rw-r--r-- | obsolete/macros/hptex/dochc.tex | 827 | ||||
-rw-r--r-- | obsolete/macros/hptex/hpmanual.tex | 1240 | ||||
-rw-r--r-- | obsolete/macros/hptex/hptex.doc | 751 | ||||
-rw-r--r-- | obsolete/macros/hptex/hptex.tex | 836 | ||||
-rw-r--r-- | obsolete/macros/hptex/macroshc.tex | 897 | ||||
-rw-r--r-- | obsolete/macros/mathematica/CHANGES | 65 | ||||
-rw-r--r-- | obsolete/macros/mathematica/README | 222 | ||||
-rw-r--r-- | obsolete/macros/mathematica/tex-mma-j.ps.gz | bin | 0 -> 40574 bytes | |||
-rw-r--r-- | obsolete/macros/mathematica/tex-mma.tar_z | bin | 0 -> 418881 bytes |
9 files changed, 4838 insertions, 0 deletions
diff --git a/obsolete/macros/hptex/dochc.tex b/obsolete/macros/hptex/dochc.tex new file mode 100644 index 0000000000..1b287b14e5 --- /dev/null +++ b/obsolete/macros/hptex/dochc.tex @@ -0,0 +1,827 @@ +% FILE DOCHC +% +% *** Source for hardcopy of Documentation for HP TeX Macros *** +% Copyright 1984 Hewlett-Packard Co. +% +\catcode`@=11 +\def\itemlist#1{\medskip\resetsubitems\itemset@\@ne\@ne{#1}} +\def\itempar{\smallskip\itemset@\@ne\@ne\empty} \catcode`@=12 +\def\spacechar{\hskip1pt\lower3pt\vbox{ \hbox to 5pt + {\vrule height4pt width.009in \hfill + \vrule height4pt width.009in} \hrule depth.009in + height0pt}\hskip2pt} +\def\langle{$\mathchar"4268$} +\def\rangle{$\mathchar"5269$} +\def\evenheading{\vbox{\hbox to \hsize{\eightrm Page \folio\hfil\HPTEX} + \nointerlineskip\vskip2pt + \hbox{\vrule width \hsize height .4pt}}} +\def\oddheading{\vbox{\hbox to \hsize{\eightrm Documentation\hfil Page \folio} + \nointerlineskip\vskip2pt + \hbox{\vrule width \hsize height .4pt}}} + +\def\noheading{\hfil} +\headline{\ifnum\pageno=1\noheading + \else\ifodd\pageno\oddheading\else\evenheading\fi\fi} +\def\NOTE#1:{\itemlist{\hbox to .7in{NOTE\hfil#1}:}} +\def\\{$\backslash$} +\parindent.825in +\parskip5pt +\nopagenumbers +\inset=.825in +\def\section#1{\relax} + +\null +\vskip.75in +\centerline{\twelvebf DOCUMENTATION FOR \HPTEX\ MACROS}\footnote{}{\hskip-.76in + \eightrm\copyright 1984 Hewlett-Packard Co.} +\smallskip +\centerline{version A.00.00, Feb. 14, 1984.} +\vskip1in +\NOTE 1: PLAIN is read in as a separate file. + +\NOTE 2: ``@'' temporarily becomes a letter so that \HPTEX\ can use the + internal control sequences of PLAIN, and to avoid conflict between + the internal control sequences of \HPTEX\ and user names. + +\NOTE 3: This defines leaders used in the table of contents macros. + +\section{FONTS} + +\NOTE 4: \HPTEX\ has fonts available in sizes from 5 points to 24 points. The + fonts loaded in Plain are listed as comments to make it easier to + verify the fonts available. + +\NOTE 5: In case a font is used in a write or message. + +\NOTE 6: \\fontdef\#1\#2 defines the control sequence for the font, but the + font is not loaded until the first time the control sequence is + actually used. The first parameter is the control sequence to be + defined; the second is the external font name. + +\section{MACROS TO SET FSTYLE} + +\NOTE 7: These macros set the family and the background style. Then, using + \\setfont, they set the current font. + +\section{MACROS TO SET FSIZE} + +\NOTE 8: These macros set the background font size, and then use \\setfont to + set the current font. \\baselineskip and \\strutbox are set to + values appropriate to the font size. The fonts in families 0, 1, + and 2 are changed to appropriate sizes. The fonts that are not + already loaded, are not loaded unless they are needed by an entry + into either math mode or display mode. + +\section{MACROS TO SET CURRENT FONT USING FSTYLE AND FSIZE} + +\NOTE 9: \\tryfont\#1 sets \\nofont@ to true if the control sequence determine + by the current background font size and style (\#1) has not yet been + defined. If the control sequence does exist, \\nofont@ is set to + false, and the control sequence is invoked. + +\NOTE 10: \\setfont uses \\tryfont to set the current font based on the + background font size and style. If there is no control sequence + defined for that font, then \\tryfont is used again to check for a + font with the background size and in roman style. If there is + still no control sequence defined for that font, the size ten and + style roman is tried. This will always succeed in \HPTEX. + + \itempar\\{f}fam will be a third factor in determining the current + font when other font families become available. + + +\section{DEFAULTS} + +\NOTE 11: The default values in \HPTEX\ are family0 and font \\tenrm, with a + background style of roman, a background size of ten points, and a + superscript/subscript size of seven points. + +\section{LINE MACROS} + +\NOTE 12: These line setting macros take \\leftskip and \\rightskip into + account. + +\section{MORE MACROS} + +\NOTE 13: This replaces Knuth's definition of \\narrower. \\narrow@ is used in + the note and warning macros. + +\NOTE 14: \\need is followed by a dimension x. It uses \\need@ to determine + if x space remains on the page, and if not, causes an eject to + the next page. + + \itempar\\need@ depends on \\okbreak which merely encourages a page + break at that point. Its effect is dependent on its nearness to + the bottom of the page, and whether the text following the \\need + fits completely on the page or not. + +\NOTE 15: \\for provides a for-loop. Parameter \#1 (\\fcount@) contains the + variable name; \#2 is the initial value of the variable; \#3 + (\\fexit@) is the terminating value; \#4 (\\floop@) contains the + instructions to be done in the loop. The loop will not execute + unless the initial value (\#2) is less than or equal to the + terminating value (\#3). \\next@ is set to \\fnext@. + +\NOTE 16: \\fnext@ provides the looping capability for \\for. It executes + \\floop@ and then checks to see if \\fcount@ has reached the + terminating value. If it hasn't, then \\fcount@ is incremented. If + the terminating value has been reached, \\next@ is set to \\relax. + \\next@ is then entered and depending on its current meaning, either + the loop is repeated via \\fnext@, or \\relax ends the looping. + + +\NOTE 17: \\uline\#1 makes a \\vbox containing \#1 with a horizontal rule .23em + under its baseline, and then creates an \\hbox containing the vbox + lowered by the amount necessary to place the baseline of \#1 in line + with the baseline of the current line of text. + +\section{START AND FINISH GROUP STRUCTURE} + +\NOTE 18: \\start\#1 and \\finish\#1 define local nestable blocks. In the + event of any error, the error message is delayed until corrections + are complete. + +\NOTE 19: \\start\#1 uses \\{if}invalid@ to determine if \#1 is a valid + blockname. If it is, a block (group) is begun and \\blockname@ + stores \#1 as the name of the current block. The control sequence + \\BEGIN\#1 is invoked and \\Error is called to print out any error + messages. + +\NOTE 20: \\finish\#1 calls \\{if}invalid@ to determine if \#1 is a valid + blockname. If it is valid, \\matchup@ is called to close block \#1. + \\Error is called to print out any error messages. + +\NOTE 21: \\{if}invalid@\#1 tests to see if the control sequence \\BEGIN\#1 + has been defined. If it has not been defined, it is ignored + and \\errset is called to store an error message. + +\NOTE 22: \\matchup@\#1 closes blocks as follows: if a \\finish is used when no + block currently exists, it is ignored. if a finish does not match + the current blockname, blocks are closed until either a match is + found or all blocks are closed. The parameter is the parameter to + \\finish. + +\NOTE 23: \\done closes the current block. + +\section{GENERAL ERROR HANDLING} + +\NOTE 24: These macros are used for general purpose error handling. + \\errfalse clears the error status. \\errset assumes an argument of + an error message; any use of \\errset sets the error status and + produces an error message when \\Error is encountered. + +\section{DATE AND TIME MACROS} + +\NOTE 25: \\mon sets the current month with the current font. + +\NOTE 26: \\date sets the current date: \langle month\rangle + \langle day\rangle, + \langle year\rangle. + +\NOTE 27: \\hour sets the current time of day in 12 hour format: + \langle hour\rangle:\langle minutes\rangle \langle AM or PM\rangle. + +\section{INDENTSTYLE} + +\NOTE 28: The switch \\{if}indent acts as a flag to indicate when \\indentstyle + is being used. This is used in \\indentstyle, \\noindentstyle, and + \\indentspace. + +\NOTE 29: \\indentstyle sets \\parindent to \\indentsize. If \\indentstyle is + already in effect, \\parskip is not changed. If \\indentstyle is + not already in effect, \\parskip is decreased by 5 points. + +\NOTE 30: \\noindentstyle sets \\parindent to zero points. If \\indentstyle is + in effect, \\parskip is increased by 5 points, otherwise it is not + changed. + +\NOTE 31: \\indentspace will update \\parindent only if \\indentstyle is in + effect. + +\section{RAGGED MARGIN} + +\NOTE 32: \\fixmargin@ preserves the original \\rightskip. + +\NOTE 33: \\justify undoes the effects of \\raggedright by returning to the + original \\rightskip, and resetting the interword and intersentence + space to the default values. + +\NOTE 34: \\raggedright saves the original \\rightskip with \\fixmargin@, adds + some stretch to \\rightskip, and if \\tt is not in effect, fixes the + interword and intersentence spaces. + +\NOTE 35: \\tt@ is used in \\raggedright in the \\ifx comparison. It is + necessary if the comparison is to succeed. + +\section{ITEM AND SUBITEM} + +\NOTE 36: \\itemset@ takes three parameters: \#1 specifies the left + indentation (in multiples of \\inset), \#2 should be the sum of the + left and right indentation (in multiples of \\inset), and \#3 is + the tag to be hung to the left of the item. The line size is in + \\dimen@. \\parshape is used to build the paragraph. The tag (\#3) + is hung to the left of the paragraph. + +\NOTE 37: \\itemlist\#1 is syntactically the same as \\item, however + \\itemlist preserves \\leftskip and \\right\-skip, and both the + left and right margins are indented by the value of \\inset. The + parameter contains the tag for the item. Each time \\itemlist is + used, the subitem tag is reset, and the item tag is incremented if + appropriate. + +\NOTE 38: \\subitem\#1 is syntactically the same as \\itemitem, however left an + rightskip are preserved, and both the left and right margins are + indented by twice the value of \\inset. The parameter contains the + tag for the subitem. Each time \\subitem is used, the subitem tag + is incremented, if appropriate. + +\NOTE 39: \\itempar creates a paragraph identical to that created by \\itemlist + except it will have an empty tag. It can be used for the second + paragraph of an item. + +\NOTE 40: \\subitempar creates a paragraph like that created by \\subitem, but + with an empty tag. + + +\section{ITEM TAG AND SUBITEM TAG MACROS} + +\NOTE 41: The definition of a tag must do three things: + + \inset1in\itempar (1) define a control sequence + \\reset[sub]items which will be used to restart tag allocation + between lists; + + \itempar (2) restart tag allocation; + + \itempar (3) define a control sequence \\[sub]itemtag to + produce a tag. + \inset.825in + + \itempar\\icount@ (\\scount@) holds the value used to determine + the current item (subitem) tag for numbered and lettered tags. + + \itempar\\idigit@ (\\sdigit@) is used with lettered tags to keep + track of how many times the item [subitem] tags have gone through + the alphabet without being reset. + +\NOTE 42: \\itemn@\#1 is used in the allocation of numbered tags. The + parameter is either \\icount@ or \\scount@. + +\NOTE 43: \\itemr@\#1 is used in the allocation of lower case Roman tags. The + parameter is either \\icount@ or \\scount@. + +\NOTE 44: \\itemR@\#1 is used in the allocation of upper case Roman tags. + The parameter is either \\icount@ or \\scount@. + +\NOTE 45: \\iteml@\#1\#2 is used in the allocation of lettered tags. If the + end of the alphabet is reached, it begins again with ``aa'' or + ``AA''. The first parameter is either \\icount@ or \\scount@. The + second parameter is either \\idigit@ or \\sdigit@. + +\NOTE 46: \\item@\#1,\#2,\#3 takes three parameters: \#1 is the initial value o + \\icount@ (item counter), \#2 is the value of \\idigit@ which is + used to print out the appropriate number of letters when using + letters as tags, and \#3 is the definition of the \\itemtag. It + defines \\resetitems to be the initialization of \\icount@ and + \\idigit@. + +\NOTE 47: \\itm does not take a parameter. It uses the current \\itemtag + as the parameter to \\itemlist. If the \\itemtag is numbers or + letters, a period is appended to the tag. + +\NOTE 48: \\subitem@ is similar to \\item@. + +\NOTE 49: \\sitm is the subitem macro equivalent to \\itm for item. + +\NOTE 50: The defaults are \\numbereditems and \\letteredsubitems. The + execution of these macros defines \\itemtag, \\subitemtag, + \\resetitems, and \\resetsubitems. + +\section{NOTE AND WARNING MACROS} + +\NOTE 51: \\BEGINnote defines the blockname ``note'' and sets the indentation + at twice the left and right skip amounts. + +\NOTE 52: \\BEGINwarning defines the blockname ``warning,'' sets the indentatio + to twice the left and rightskip amounts, and places a horizontal + rule above the text. \\ENDwarning places a horizontal rule below + the text. + +\NOTE 53: \\marginrule\#1 defines an \\hrule limited by \\leftskip and + \\rightskip. Its only parameter specifies the height of the rule. + +\section{VERBATIM MODE} + +\NOTE 54: In verbatim mode, all characters except (\\), ($\{$) and ($\}$) + are treated + verbatim. Characters that cannot be extracted from the current font + are taken from the math font and given a fixed space equal to the + space of the current font. + + +\section{LUMPLINE AND LUMPSPACE MACROS} + +\NOTE 55: These macros make the verbatim mode use less memory. Multiple lines + and spaces are lumped together to make one large glob of glue + rather than many small globs. + + \itempar The carriage return is made into an active character, and + given the meaning of \\lumpline@. \\lumpline@ accumulates + sequential carriage returns into one lump of vertical glue in + \\skip@. + + \itempar ``\\{\spacechar}'' is made into an active character, and + given the meaning of \\lumpspace@. \\lumpspace@ accumulates + sequential spaces into one lump of horizontal glue in \\skip@. + +\goodbreak +\section{PAGE CONTROL MACROS} + +\NOTE 56: \\newpage first balances multi-column format which transfers the + contents of \\box 255 to \\contrb@, so it always looks like the + page is empty immediately afterwards. The box \\contrb@ is checked + to see if the page is really empty. + + \itempar If \\newpage occurs at the bottom of a full page, the + \\null\\vfill remains in recent contributions and causes an extra + page to be ejected. The workaround is to insert an \\eject in the + document just before the \\newpage (or the macro containing the + \\newpage). + + \itempar The same problem occurs with \\evenpage and \\oddpage, and + the same workaround is effective. + +\section{HEADING AND FOOTING MACROS} + +\NOTE 57: Headlines and footlines are constructed as follows: + + \inset1in + \itempar (1) under normal conditions the centered heading or + footing is centered, but in the event that one (or more) of the + headings or footings are too wide, space is distributed if possible + so there is no overlap. The macro triplehead@ does this. + + \itempar (2) inside and outside headings and footings have priority + over left and right headings and footings. \\buildline takes care + of this. + \inset.825in + + \itempar Notice that if the tokens in an \\hbox have width 0pt, it + is assumed they are empty. + + \itempar The macros and token registers associated with headings + and footings should be used near forced page breaks or at the + begining of the document. TeX scans ahead when building a page, so + the use of these macros could affect the previous page. + +\NOTE 58: \\buildline decides which tokens will be on the left and right of + the headline or footline that is being constructed. \\lft and \\rght + hold the numbers of the boxes containing the tokens to be placed on + the left and right sides of the line. They are initialized to the + boxes for \\leftheading and \\rightheading. If the box containing the + \\insideheading (\\box3) is not empty, then for an odd page \\lft is + set to 3, and for an even page \\rght is set to 3. + + \itempar If the box containing the \\outsideheading (\\box4) is not + empty, then for an odd page \\rght is set to 4, and for an even + page \\lft is set to 4. + + \itempar \\triplehead is called to actually construct the line. + +\NOTE 59: \\triplehead\#1\#2\#3 requires three parameters. \#1 is the number of + the box that is to go to the left, \#2 is the box number for the + center, and \#3 is the box number for the right. \\skip@ is the glue + to go between the left and center boxes, and \\skip@ii is the glue + to go between the center and right boxes. + + \itempar If the width of the left box is greater than the width of + the right box, \\skip@ii is increased by the difference, otherwise, + \\skip@ is increased by the difference. + + \itempar The line is then built by stringing together the boxes and + glue. + +\NOTE 60: \\loadbox\#1\#2 takes two parameters: \#1 is the box number, \#2 is t + token list to be put in the box. + +\NOTE 61: \\headline checks to see if headings are turned on or off. If on, + it loads the appropriate boxes with the various heading token + lists and calls \\buildline. If off, it adds horizontal glue, and + if \\suspendheading is in effect, updates the \\headcount. + +\NOTE 62: \\footline is similar to \\headline. + +\section{BOX MACROS} + +\NOTE 63: \\boxit\#1 takes as its parameter the text to be placed in the box, + and can be used when a real box is wanted, e.g., + \\setbox0\\boxit$\{${$\ldots$}$\}$. + \\boxit uses \\halign to center the lines of text, separated by \\cr, + within the box. + + \itempar The value of \\boxline determines the thickness of the + rule around the box. The value of \\boxspace determines the amount + of space between the rule and the text. + +\NOTE 64: \\centerbox\#1 takes as its parameter the text to be boxed, and then + uses \\centerline to center the box resulting from \\boxit\#1. The box + is separated from surrounding text by \\abovedisplayskip and + \\belowdisplayskip. + +\NOTE 65: \\textbox\#1 takes as its parameter the text to be boxed. It places + the boxed text in the current line (or begins a new paragraph if + encountered in vertical mode) with the baseline of the enclosed + text lined up with the baseline of the line. + +\section{HP2680A and HP2688A COPY CONTROL MACROS} + +\NOTE 66: These commands control the number of copies per page. Owing to the + synchronization problems associated with TeX, these should only be + used near forced page ejects or at the begining of a document. + + \itempar \\globalspecial writes the parameter to the postamble of + the PIF file. + + \itempar \\copycnt contains the number of the register that the PIF + server will look in to find the number of copies desired. + + \itempar \\oldcopy contains the number of copies desired. The + default is two, so if \\copieson is invoked before the user has + used \\copies\langle n\rangle, two copies will be generated. + +\section{HP2680A and HP2688A LOGICAL PAGE CONTROL (LPC) MACROS} + +\NOTE 67: \\lpcount@ holds the number of the register to be interpreted + by the PIF driver for explicit logical page control. + + \itempar\\nextlp@ holds the page control number to be put into + \\count\\lpcount@. + + \itempar These macros avoid the synchronization problems of TeX by + interjecting a page eject at an appropriate time. At the beginning + of the document and after each \\shipout, the ``empty@'' flag is set + to true. + + \itempar If an LPC macro occurs when the ``empty@'' flag is true, \\ne + is updated, its value is put into \\count\\lpcount@, and the flag + is set to false. + + \itempar If an LPC macro occurs when the ``empty@'' flag is false, \\n + is updated, but the value in the register \\count\\lpcount@ is not + changed. After the next shipout, \\count\\lpcount@ is updated by + the output routine. + + \itempar The codes for \\lpreset and \\lpexit will, if left alone, onl + for one page. + +\section{TABLE MACROS} + +\NOTE 68: The table macros are complex. It is recommended that anyone + wanting to understand how they work examine the LOG file of + a table made with \\tracingmacros=1 and \\tracingcommands=2. + + \itempar The table macros use unallocated dimension and token + registers to store the column specifications. New dimensions or + tokens should not be allocated between the \\tableformat and the + last \\tablerow or \\tablebar in a table. If any are allocated the + result will be a very strange looking table and a TeX error. If + too many columns, dimensions, tokens or inserts are allocated, an + error message is given and the registers are used anyway. + + \itempar A row is processed in sections. \\parseline@ takes + sections of the parameter to \\tableformat or \\tablerow. Each + section is delimited by a ``\~{}''. \\parsecol@ takes sub-sections + of the section where each sub-section is delimited by a ``$|$''. + After a sub-section is processed, the next sub-section is fetched + until the end of a section is reached. The next section is then + fetched and processed until the end of the original parameter to + \\tableformat or \\tablerow is reached. + + \itempar \\span is temporarily redefined during the execution of + either a \\tablerow or \\tablebar macro to allow spanning of + multiple columns. + + \itempar The standard table specifications are \\leftline, + \\rightline, \\centerline and (for internal columns) \\paragraph. + You can also make your own. There are only two rules: + + \inset1in + \itempar(1) your macro will have one parameter (the text) + + \itempar(2) your macro will yield a box of width \\hsize. + \inset.825in + +\NOTE 69: \\uptoks@ increments \\cntA@, used as a pointer to a token register + to hold column alignment specifications, and \\cntB@, used as a + pointer to a dimension register used to hold column width specifi\-% + cations. If too many token registers are used, an error message is + printed, and processing continues. + +\NOTE 70: \\bump@ increments \\cntC@, which contains the number of columns + processed in the current \\tablerow or \\tablebar. If the total number + of columns specified in the \\tableformat has not yet been processed, + then \\cntC@ is incremented, and \\uptoks@ is called to increment the + pointers to the registers that hold the column specifications. + +\NOTE 71: \\tableformat\#1 has as its parameter the description of the table + format. The alignment for the entire table is given first, + followed by the formats for each column. A column format consists + of its alignment followed by its width. A ``$|$'' separates the + table format from the column formats, and each column format from + the next. + + \itempar \\tableformat first calls \\tablelet with the three + parameters \\just@, \\just@, and \\relax. + + \itempar Next, \\parse@ (which has been assigned the meaning of + \\parseline@) is called and sent one parameter, which is delimited + by ``\lower4pt\hbox{\~{}}''. This effectively sends the contents + of the parameter of \\tableformat up to the first + \lower4pt\hbox{\~{}} to \\parse@ (\\parseline@). The \\done@ is + an undefined control sequence used to mark the end of the + specifications in the \\tableformat. + +\NOTE 72: \\tablerow\#1 is similar to \\tableformat. Its parameter is a list + of the contents for each column of the row. Each column must start + and terminate with either a ``$|$'' for a visible bar, or a + ``\lower4pt\hbox{\~{}}'' for an invisible bar. + + \itempar The parameters sent to \\tablelet are: \\bbar@, \\wbar@, + and \\endrow@. + +\NOTE 73: \\tablebar\#1 sets horizontal rules across the table. It resets + \\topstrut, \\botstrut, and \\table\-space, and then passes its + parameter to \\tablerow. Its parameter is a list of column + contents, with each column indicated as for \\tablerow. A + column can be empty, contain a \\vrule, or contain \\tbar. + +\NOTE 74: \\tablelet requires three parameters. The first is assigned to the + control sequence \\b@, the second to \\w@, and the third to \\f@. + \\CntA@, \\CntB@, and \\CntC@ are initialized. \\parse@ is assigned + the meaning of \\parseline@. If currently in horizontal mode, + vertical mode is entered; if in vertical mode, interline glue is + inhibited. + +\NOTE 75: \\just@\#1 is never invoked directly. The control sequences \\b@ + and \\w@ are \\let to be \\just@ in \\tablelet when \\tablelet is + called from \\tableformat. \\just@ is invoked by \\parsecol@ the + first time \\parsecol@ is entered. The parameter to \\just@ is the + alignment specification for the table. + + \itempar \\just@ assigns the control sequences \\b@ and \\w@ the + meaning of \\tform@, and initializes \\maxcol@ to 0. The control + sequence \\tablejust@ is assigned the table alignment + specification (\#1). + +\NOTE 76: \\tform@\#1 passes its parameter, which is the set of specifications + for a column, on to \\tform@@ with a \lower 4pt\hbox{\~{}} + deliminating the parameter. + +\NOTE 77: \\tform@@\#1\#2\lower 4pt\hbox{\~{}} updates the pointers to the + registers to be used for storing column specifications, puts the + column alignment (\#1) into the current token register, and the + column width (\#2) into the current dimension register. Then + \\maxcol@ is incremented to count the column just completed. + +\NOTE 78: \\bbar@\#1 begins a row that starts with a visible vrule. The + parameter is empty. + +\NOTE 79: \\wbar@\#1 begins a row that starts with an invisible vrule. The + parameter is empty. + +\NOTE 80: \\beginrow@\#1 reassigns \\b@ and \\w@ the meanings of \\vbar@ and + \\ibar@ respectively. The parameter is empty. + + \itempar Box 0, an \\hbox that will contain the row, is begun with + a \\bgroup, and the assignments that should hold within the box are + made. + +\NOTE 81: \\endrow@ finishes Box 0 and aligns the resulting box according to + \\tablejust@. + +\NOTE 82: \\vbar@\#1 adds a column entry that terminates with a visible \\vrule + The parameter contains the column entry. + +\NOTE 83: \\ibar@\#1 adds a column entry that terminates with an invisible + rule. The parameter contains the column entry. + +\NOTE 84: \\cs@\#1 determines if a column entry (\#1) spans multiple columns, + and invokes \\span@ with the appropriate parameters. + +\NOTE 85: \\parseline@\#1\lower 4pt\hbox{\~{}} is called by \\tableformat and + \\tablerow (and indirectly by \\tablebar). Its parameter is the + part (section) of the parameter to the calling macro terminated by + the first occurrence of ``\lower 4pt\hbox{\~{}}'' . If the + parameter is \\done@, then processing is complete, and \\parse@ is + assigned the current meaning of \\f@, which is \\relax if + \\parseline@ was called from \\tableformat, or \\endrow@ if + \\parseline@ was called from \\tablerow. + + \itempar If processing is not done, \\p@ss is assigned the meaning + of \\parsecol@, and then \\p@ss is invoked and its parameter is + that part (sub-section) of the parameter to \\parseline@ up to the + first occurrence of ``$|$''. \\done@ is an end of processing + indicator. \\parse@ is invoked and, depending on its current + assigned meaning, either terminates processing of this + \\tableformat or \\tablerow parameter, or takes the next section of + the parameter of the \\tableformat or \\tablerow terminated by + \lower 4pt\hbox{\~{}} as its parameter. + +\NOTE 86: \\parsecol@\#1 is called by \\parseline@ and has as its parameter tha + part (sub-section) of the parameter to \\parseline@ up to the next + occurrence of $|$. It defines the macro \\parsemode@: if we are on + the last column, then the currently assigned value of \\w@ + (\\tform@ or \\ibar@, depending on whether a \\tableformat or a + \\tablerow is being processed) is invoked, and \\p@ss becomes + \\lastp@ss; if we are not on the last column, then \\b@ (which is + either \\tform@ or \\vbar@) is invoked; in either case, \\p@ss is + called again and will either terminate processing or get the next + section to be processed. + + +\NOTE 87: \\span@\#1\#2 sets a box spanning the required number of columns and + containing the text in the parameter. \\hsize and \\z@ are set to + the width and alignment specifications respectively of the first + column spanned. The pointers are then incremented once for each + column spanned, and the width of each column plus the width of a + vertical bar is added to the \\hsize for each column spanned. The + first parameter is the integer following \\span, and the second is + the remainder of the column contents. + +\section{SECTION AND HEADING MACROS} + +\NOTE 88: These macros are used for head or section level control. + + \itempar\\basehead is the zero pointer value for the four pointers + to the head counters. The head counters count the number of + current headings at each heading level. + + \itempar\\headlevel keeps track of the level of the current + heading. + + \itempar To add a fifth level, do the following: + + \inset1in + \itempar(1) Change the ``\\advance\\count10 by~4'' command to + ``\\advance\\count10 by~5''. This allocates the counters for the + level number. + + \itempar(2) Change ``\\ifnum\\hdlevel$<$4 '' to + ``\\ifnum\\hdlevel$<$5'' in the \\sethead@ macro. + + \itempar(3) Allocate a new token register, \\fifthlevelhead, and + define a corresponding \\headE@:\hfil\break + \\def\\headE@$\{$\\head5\\the\\fifthlevelhead$\}$. + + \itempar(4) Modify the \\level macro so that it includes + \\headE@. + + \itempar(5) Load \\fifthlevelhead with some appropriate tokens. + \inset.825in + +\NOTE 89: \\setlevelno\#1 has one parameter: the levelnumber to be established. + This can be up to 4 numbers, separated by periods. The level number + and the pointer to the head counters are initialized. + + \itempar``.-1.'' is appended to the parameter to act as an end of + parameter signal. + +\NOTE 90: \\sethead@\#1. has as its parameter one of the num\-bers in the + parameter to \\setlevelno. The first num\-ber it receives is put into + the head counter for the first level. The second number goes into + the head counter for the second level, etc. Processing is + completed when -1 is received as a parameter, or when 4 levels have + been done. + +\NOTE 91: \\head\#1 is called indirectly by \\level via \\headA@, or \\headB@, + etc. It oversees adjusting the \\levelno according to the level of + the new heading. Its parameter is the level of the new + heading. + + \itempar If the new heading is on a level inferior to the current + heading, \\uplevel@ is called, otherwise \\headlevel is set to the + level of the new heading and that head counter for that level is + incremented. + + \itempar\\head@ is called to update \\levelno. + +\NOTE 92: \\uplevel@\#1 does what is necessary to add a level that has a + higher + number than the current level. \#1 is the level of the new heading. + +\NOTE 93: \\head@ defines \\levelno. + +\NOTE 94: These allocate token registers for each level description, and + define a corresponding \\headA@ (or \\headB@ etc.) that calls \\head + with the appropriate parameter, and accesses the tokens for that + headlevel. + +\NOTE 95: \\level\#1\#2 takes two parameters: \#1 is the level of the heading, + and \#2 becomes the definition of \\title. A case statement is + used to invoke the appropriate choice of \\headA@, \\headB@, etc. + +\section{CONTENTS FILE MACROS} + +\NOTE 96: ``\\content@'' can now be written with \\write + +\NOTE 97: \\ctswrite\#1 writes its parameter into a file along with the current + page number. If the file does not already exist, one is created. + When the file is read at a later time, @ will not be a character. + \\{\_} is redefined so that it can be read from the contents file. + \\content@ is defined with @ no longer a character so that it can be + read from the contents file. + + +\NOTE 98: \\contents adds the table of contents if a contents file was + created. + +\section{FOOTNOTES AND INSERTIONS} + +\NOTE 99: The \\vfootnote\#1 of PLAIN has been modified to accommodate + multi-column format by the insertion of \\realhsize to restore the + original \\hsize and by adding ``1\\baselineskip'' to remove any + glue from \\baselineskip. + +\NOTE 100: \\note generates footnotes with sequential numbers. + +\NOTE 101: \\midinsert has been changed from the definition in PLAIN by + the insertion of \\p@gefalse. + +\NOTE 102: \\@ins has been changed from the definition in PLAIN by adding a + return to the normal \\hsize and \\vsize. + +\NOTE 103: The \\endinsert of PLAIN has been modified. The ``room left on page'' + calculation has been expanded to handle multi-column format: if + there is room, the columns are balanced and the insertion is + appended. The penalty (first item in the \\insert) is set to -100 if + the insertion cannot fit on the current page, this keeps the page + from stretching if the insertion can't fit on the page. + +\section{COLUMN MACROS} + +\NOTE 104: The column macros and output routines are interrelated. Every time + the number of columns changes, a false output routine is invoked. + This routine takes the current page (and splits it up if necessary) + and appends it to the contrib box. The \\hsize is then reduced (or + restored) and the \\vsize is multiplied (or restored). Then, to + every insert which was not void during the false output routine a + null insert is made. This restores the page goal (in case there are + no bona fide insertions, one insertion is always made, it is called + \\hacker@). A new page total is then calculated from the height of + the contrib box. The two macros employed to do this work are + \\balance@ and \\newtotal@. Under no circumstances should the one be + used without the other. + +\NOTE 105: \\balance invokes the false output routine which has the effect of + balancing the columns if in multi-column mode. The page goal is + then updated by \\newtotal@. + +\NOTE 106: \\balance@ invokes the false output routine by setting \\ifreal@ to + false, and forcing an eject. + +\NOTE 107: \\newtotal@ restores the page total. + +\NOTE 108: \\multicol@\#1 is called by the \\BEGIN command for multi-column + format. It takes as its only parameter the number of columns + requested. It provides error checking and ignores the command + if already in multi-column mode. If the command is legal, then + the current page is balanced, and the \\hsize and \\vsize are + adjusted. The insertion registers are modified, the page total + is adjusted, and stretch is added to \\baselineskip. + +\section{OUTPUT ROUTINES} + +\NOTE 109: The output routines are complex. It is recommended that anyone + wanting to understand how they work examine the LOG file of a + file with \\tracingmacros=1 and \\tracingcommands=2. + + \itempar There are two types of output routines: \\realoutput@ + produces a \\shipout and \\fakeoutput@ does not. + + \itempar The \\toks registers associated with each insert are now + reserved (as were \\dimen, \\skip and \\count). Any tokens in these + registers will be destroyed when the \\output routine is active. + +\NOTE 110: \\realoutput puts the current page into \\out@. If currently in + one-column mode, it goes in directly, otherwise the current page + is first split into columns. Box 255 is then set to \\contrb@ with + \\old@ appended to it. The glue for insertions, \\hsize, \\vsize, + \\leftskip, and \\rightskip are returned to normal for the + \\shipout. After the \\shipout, the flags and counters for the + logical page macros are updated. + + +\NOTE 111: \\fakeoutput takes the current page, balances it if necessary, and + puts it into \\out@. \\out@ is then appended to \\contrb@. + + \itempar If any column must be shorter due to balancing, it ought + to be the rightmost. The \\vsplit primitive, however, will usually + make the rightmost column longer. To avoid this problem, columns + are split a little more than 1/2 or 1/3 down. Experimentation shows + that adding 1.16667 baselines to the total height for 2 columns, + and adding 2 baselines to the total height for 3 columns affords + the greatest probability of an aesthetic break. + +\NOTE 112: The ``@'' is no longer a letter. + +\bye diff --git a/obsolete/macros/hptex/hpmanual.tex b/obsolete/macros/hptex/hpmanual.tex new file mode 100644 index 0000000000..b776529494 --- /dev/null +++ b/obsolete/macros/hptex/hpmanual.tex @@ -0,0 +1,1240 @@ +% THIS IS FILENAME MANUAL +% +% ***This is the Users' Guide to the HP TeX Macro package *** +% +% Copyright 1984 Hewlett-Packard Co. +% +\let\indx=\relax +\def\evenheading{\vbox{\hbox to \hsize{\eightrm Page \folio\hfil\HPTEX} + \nointerlineskip\vskip2pt + \hbox{\vrule width \hsize height .4pt}}} +\def\oddheading{\vbox{\hbox to \hsize{\eightrm Macros \hfil Page \folio} + \nointerlineskip\vskip2pt + \hbox{\vrule width \hsize height .4pt}}} +\def\noheading{\hfil} +\headline{\ifnum\pageno=1\noheading + \else\ifodd\pageno\oddheading + \else\evenheading\fi\fi} +\centerfooting{} + +\tolerance=1000 +\noindentstyle +\font\hplogo=hplogo +\font\csc=amcsc10 \def\headno{\levelno} \def\emspace{\enspace} +\def\lb{$\langle$} \def\rb{$\rangle$} +\def\bs{{\tt \char92}\relax} +\font\bo=amb10 +\font\tenbo=amb10 +\def\+{{\tt \char92}\relax} \def\_{\kern.06em\vbox{\hrule width.5em}} +\def\[{$\{$} \def\]{$\}$} \def\tbw{{\bf - TO BE WRITTEN -}} +\def\ent{\textbox{\tt ENTER}} \def\sec{{\bf -SECTION NUMBER HERE-}} +\def\degrees{$^\circ$} +\def\gt{$>$} +\def\spacechar{\hskip1pt\lower3pt\vbox{ + \hbox to 5pt{\vrule height4pt width.009in + \hfill + \vrule height4pt width.009in} + \hrule depth.009in height0pt}\hskip2pt} + +\firstlevelhead{\need.75in\null\bigskip\leftline{\fourteenbf\levelno\enspace% + \title}% + \medskip\ctswrite{\hskip15pt\tenrm\title}} +\secondlevelhead{\need.6in\medskip\leftline{\twelvebf\levelno\enspace\title}% + \ctswrite{\hskip30pt\tenrm\title}} +\thirdlevelhead{\need.5in\medskip\leftline{\twelvebf\levelno\enspace\title}% + \ctswrite{\hskip45pt\ninerm\title}} + +\def\bs{{\tt \char92}\relax} +\def\+{{\tt \char92}\relax} + +\def\tspec{\lb{\sa table spec.}\rb} +\def\colspec{\lb{\sa column spec.}\rb} +\def\col{\lb{\sa column list}\rb} + + +\def\cmd#1{\need 0.5in\bigskip {\tentt\bs #1}\lbreak} +%\def\mcmd#1{\need 0.5in\bigskip {{\tentt\bs #1}}\lbreak} +%\def\\#1{\lbreak\indent{{\tentt\bs #1}}} +\def\lb{$\langle$} +\def\rb{$\rangle$} +\def\[{$\{$} +\def\]{$\}$} +\def\blk{\lb{\sa blockname}\rb} +\def\hor{\lb{\sa horizontal list}\rb} +\def\int{\lb{\sa integer}\rb} +\def\dim{\lb{\sa dimension}\rb} +\def\ver{\lb{\sa vertical list}\rb} +\def\vol{\lb{\sa Volume Name}\rb} + +\null +\vskip1in +\centerline{\eighteenbf THE HP \TeX\ MACROS}\footnote{}{\eightrm\copyright + 1984 Hewlett-Packard Co.} + +\vskip.5in +\centerline{HEWLETT-PACKARD CO.} +\vskip1.47in + +\level1{Introduction} +This set of macros was written as part of \HPTEX, Hewlett-Packard's software +package designed to facilitate the use of \TeX\ on the HP Series 200 Desktop +Computers. The \HPTEX\ program can be run on either an SRM based, or a +stand-alone (LIF) system, and requires 1.25 Mbytes main memory and a minimum +of 15 Mbytes mass storage. It uses an HP 2688A Laser Printer. + +The HP2688A is a page printer which uses scanned electrophotography technology +to print computer output on single sheet paper. The 300 dots per inch +resolution, high contrast and speed, plus sophisticated character printing, +allow a high degree of application flexibility. Unique features include +90\degrees\ rotation of page print, multiple pages of data output per printed +sheet, and a graphics option. The print rate is approximately 12 pages per +minute. + +The \HPTEX\ macro package is designed to supplement \TeX\ by providing macros +for formating documents and for controlling the HP2688A. The user of \HPTEX\ +can use any of the \TeX\ commands as well as the \HPTEX\ macro commands. + +While the formating macros include macros for headings and footings, +paragraph style, lists, lines, boxes, paragraph headings, multiple columns, +tables, and table of contents, they are not meant to be a complete system. +They are intended to enable the user to get +started, and to provide useful macros that can be modified and used as +examples by the user for the creation +of a customized macro package. + +A second release of \HPTEX\ is planned that will include graphics capability. + +\vfil +On \indx{syntax} +lines, when curly braces ``\[$\ldots$\]'' are shown, they are required in the +source file, text between +angle brackets ``\lb$\ldots$\rb'' identifies a parameter variable, +and the character ``\spacechar '' represents a required space. +\vfil\eject + +\level1{ Document Formatting Macros} +The following HP \TeX\ commands control the basic style and formatting +of a document: + +\level2{Page Layout} +The HP \TeX\ defaults for \indx{page layout} are the same as they are in +the \TeX\ program. That is, +all margins are set to approximately +one inch from the edges. (Plain \TeX\ sets {\tt \+vsize=8.9in} and +{\tt \+hsize=6.5in}.) \indx{Headings and footings} are printed {\bo outside} +those margins. + +The following macros affect the running head and the footing of +each page. The heading and footing lists are expanded during the +output routine so the \TeX\ commands \indx{{\tentt\bs firstmark}}, +\indx{{\tentt\bs topmark}} and +\indx{{\tentt\bs botmark}} are compatible here. + +\need.5in\bigskip\relax{{\tentt \+centerheading}}\[\hor\]\lbreak + \relax{{\tentt \+leftheading}}\[\hor\]\lbreak + \relax{{\tentt \+rightheading}}\[\hor\]\lbreak + \relax{{\tentt \+outsideheading}}\[\hor\]\lbreak + \relax{{\tentt \+insideheading}}\[\hor\]\lbreak +These macros accept text which is to be placed at the top of every page. +The first three macros place the argument in the center, left, or right +of the page respectively. +{\tt\bs outsideheading} and {\tt\bs insideheading}, +if specified, override the left and right headings. On odd pages, the +inside heading will appear on the left, outside on the right. Even +pages are the opposite. (This feature is helpful when the output is +to be used as two-sided copy.) + + +\need.5in\bigskip\relax{{\tentt \+centerfooting}}\[\hor\]\lbreak + \relax{{\tentt \+leftfooting}}\[\hor\]\lbreak + \relax{{\tentt \+rightfooting}}\[\hor\]\lbreak + \relax{{\tentt \+outsidefooting}}\[\hor\]\lbreak + \relax{{\tentt \+insidefooting}}\[\hor\]\lbreak +These are like the above commands, only they are for footings at the bottom +of each page. For example, if page numbers +are desired in the left side of the bottom of each page, type: +{\tt\bs leftfooting\[\indx{\bs folio\]}} + +{\tt\bs outsidefooting} and {\tt\bs insidefooting} will +produce similar results as {\tt\bs outsideheading} and +{\tt\bs insideheading} (see above). The default in HP \TeX\ is +{\tt \+centerfooting\[\+folio\]}. This produces page numbers at +the center of the bottom of each page. + +\need.5in\bigskip\relax{{\tentt \+noheading}}\lbreak + \relax{{\tentt \+nofooting}}\lbreak +These macros turn off headings or footings for the current and all +successive pages until the {\tt\bs resumefooting} or +{\tt\bs resumeheading} command is used. + +\need.5in\bigskip\relax{{\tentt \+suspendheading}}\int\lbreak + \relax{{\tentt \+suspendfooting}}\int\lbreak +These macros suspend headings or footings for the specified number of +pages or until the use of a {\tt\bs resumeheading} or {\tt\bs resumefooting}. + +\need.5in\bigskip\relax{{\tentt \+resumeheading}}\lbreak + \relax{{\tentt \+resumefooting}}\lbreak +These macros undo the effects of the {\tt\bs suspendheading}, +{\tt\bs noheading}, {\tt\bs suspendfooting} and +{\tt\bs nofooting} macros above. + +\break +\level2{Paging} + +\cmd{\indx{newpage}} +This macro forces a \indx{page eject} if not on a new page.\note{\tenpoint +If {\tt \+newpage, \+oddpage}, or {\tt \+evenpage} +occur at the bottom of a full page, they will cause an extra page +eject. If this happens, insert an {\tt \+eject} just before the +page command.} + +\cmd{\indx{oddpage}} +This macro causes a page eject, and if the current page is an odd-numbered +page, leaves an extra blank page so that the following text is +guaranteed to begin on an odd-numbered page. + +\cmd{\indx{evenpage}} +This macro is similar to oddpage, but the following text will appear on +an even rather than an odd numbered page. + +The {\bo plain} \TeX\ command, {\tt\+pageno} will set the current page number +to the specified page number. (See ``Some Useful \TeX\ Commands'' in +Chapter~2 of this manual.) + +\level2{Paragraph Style} +As \TeX\ accepts text from the input file, the text is formatted into +paragraphs. The following commands can be used to control the shape +of the paragraphs. + + +\cmd{\indx{inset}=\dim} +Specifies a general amount of indentation to be used with itemized +lists, notes, warnings and indent blocks. Default is 0.5 + inch. + +\need.5in\bigskip\relax{{\tentt \+start\[indent\]}}\lbreak + \relax{{\tentt \+finish\[indent\]}}\lbreak +These commands are used to indent the left margin by the inset +dimension. The right margin is unaffected by this block. + +\cmd{\indx{indentspace}=\dim} +This command assigns the indentation value for the first line of all succeeding +paragraphs when {\tt\bs indentstyle} is in effect. The default is +20 points. + +\cmd{\indx{indentstyle}} +This causes the first line of each paragraph to be indented +(the amount of the indentation is assigned by the {\tt\bs indentspace} +command). This is the default paragraph style. + +\cmd{\indx{noindentstyle}} +This causes the paragraphs to be formatted with no indentation. +The nominal \indx{spacing} between paragraphs is 5 points greater without +indentation than when {\tt\bs indentstyle} is being used. +\start{note} +\centerline{-- NOTE --} +Spacing between paragraphs can be user specified by using the {\tt +\bs parskip} command. +\finish{note} + +\level2{Itemized and Bulleted Lists} +The following macros are aids in producing lists. The various list commands +cause indentation at various levels and use various tokens (numbers, letters, +dots, dashes, $etc.$) to the left of the +first line of the listed item to set off the list entry. + +\need.5in\bigskip\relax{{\tentt \+numbereditems}}\lbreak + \relax{{\tentt \+lettereditems}}\lbreak + \relax{{\tentt \+Lettereditems}}\lbreak + \relax{{\tentt \+romanitems}}\lbreak + \relax{{\tentt \+Romanitems}}\lbreak + \relax{{\tentt \+squareditems}}\lbreak + \relax{{\tentt \+dotteditems}}\lbreak + \relax{{\tentt \+dasheditems}}\lbreak +These macros initialize the tag allocation macro {\tt\bs itemtag}. +Default is {\tt\bs numbereditems}. + +\need.5in\bigskip\indx{{\tentt \+numberedsubitems}}\lbreak + \relax{{\tentt \+letteredsubitems}}\lbreak + \relax{{\tentt \+Letteredsubitems}}\lbreak + \relax{{\tentt \+romansubitems}}\lbreak + \relax{{\tentt \+Romansubitems}}\lbreak + \relax{{\tentt \+squaredsubitems}}\lbreak + \relax{{\tentt \+dottedsubitems}}\lbreak + \relax{{\tentt \+dashedsubitems}}\lbreak +These macros initialize the tag allocation macro {\tt\bs subitemtag}. +Default is\lbreak {\tt\bs letteredsubitems}. + +\cmd{\indx{itemtag}} +This macro causes a number, letter, roman numeral, square, dot or dash +to be printed as the item specifier +depending upon what initialization has taken place (see above). + +\cmd{\indx{subitemtag}} +Similar to {\tt\bs itemtag} but pertains to subitems. + +\cmd{\indx{square}} +This macro prints a .4em-by-.4em square ( \square\ ). This macro can be used at +any time a horizontal list is being built (such as the middle of a +paragraph), +but it is particularly useful as the argument for the {\tt\bs itemlist} macro. +(This command produces the same symbol as \TeX 's {\tt \+bull} command.) +\cmd{\indx{dott}} +This macro prints a solid round dot ( \dott\ ). (Same as {\bo plain} \TeX 's +{\tt \$\+bullet\$}.) + +\cmd{\indx{emdash}} +Sets a horizontal rule one ``\indx{em}'' long ( \emdash\ ). + +\cmd{\indx{itemlist}\[\hor\]} +This macro introduces an item of a list by indenting both left and right +margins by the \dim\ specified in the last {\tt\bs inset} command. +The \hor\ is inserted within braces to specify the token +which is to set off the text. If the token has already been +specified (using {\tt \bs dotteditems, \bs Romanitems}, $etc.$), +or the default {\tt \bs numbereditems} is acceptable, +then the command {\tt \bs itemtag} can be inserted here. +The text of the item follows. (The text +does {\bo not\/} need to be enclosed within braces.) +Indentation continues only for the duration +of one paragraph (if more than one paragraph is desired in an +item, {\tt\bs itempar} should be used). +The use of {\tt\bs itemlist} resets the subitem tag. + +\cmd{\indx{subitem}\[\hor\]} +This macro is similar to {\tt\bs itemlist}, but the indentations are twice as +large as for {\tt\bs itemlist}. This can be used to indicate a + second level of list. (See {\tt \bs itemlist} for contents of + the \hor . + +\need.5in\bigskip\relax{{\tentt \+itempar}}\lbreak + \relax{{\tentt \+subitempar}}\lbreak +These macros are used to start new paragraphs within an item or +subitem respectively. + +\cmd{\indx{enditems}} +This commands properly ends an itemized list by resetting the item counter +and appending {\tt\bs bigskip} \indx{glue}. + +\cmd{\indx{itm}} +Similar to {\tt\bs itemlist\[\bs itemtag\]} except that a +period is appended to the tag if it is a letter, number +or roman numeral. With this command, the item tag must be +specified ahead of time using the command +{\tt \bs dotteditems, \bs lettereditems}, $etc.$, unless the +default ({\tt \bs numbereditems}) is acceptable. Again, +{\tt\bs itm} will {\bo not} accept any \hor\ +as an item tag specifier. + +\cmd{\indx{sitm}} +Similar to {\tt\bs itm} but pertains to subitems. Like +{\tt\bs itm}, {\tt\bs sitm} will {\bo not} +accept any \hor\ as a subitem tag specifier. The subitem tag must +be specified beforehand, unless the default +({\tt \bs letteredsubitems}) is acceptable. +%\need3in +\start{note} +\centerline{-- NOTE --} +If you enter a local \indx{block structure} prior to setting an itemized list, +and want to exit that structure immediately after your last item, then +you must first be sure that you are in {\bo \indx{vertical mode}}. +Otherwise, the last item may not be indented properly. + +Three ways to accomplish this are by using {\tt\bs enditems, +\bs vskip}, or {\tt\bs par}. \finish{note} + +\level2{Line Specifier Macros} +The content of individual lines can be controlled, and they can be +centered or justified using the following +commands. + +\cmd{\indx{centerline}\[\hor\]} +This takes the text within the brackets and centers it between the +margins. The line does not count as a paragraph, so the normal +interparagraph space is not inserted above the line. If this command +follows a paragraph, it is +usually appropriate to precede it with a {\tt\bs vskip}. This command +has been redefined from {\bo plain} \TeX\ in that it uses the +HP macro {\tt \+lline} (described below), so {\tt \+leftskip} +and {\tt \+rightskip} values are taken into account. + +\cmd{\indx{lline}\[\hor\]} +This is very similar to the plain \TeX\ {\tt\+line} command +in that it creates a horizontal box that is the width of the current +{\tt\+hsize}, except that {\tt\+lline} takes into account +the values of {\tt\+leftskip} and {\tt\+rightskip} +if they have been specified. In other words {\tt\+lline} +stays within the current margins. The \hor \ is the contents of +the horizontal box. + + +\cmd{\indx{leftline}\[\hor\]} +This left justifies the contents of the \hor . The comments about vertical +spacing above apply here, also. This command has also been redefined +to use {\tt \+lline} (see {\tt \+centerline}, above). + +\cmd{\indx{rightline}\[\hor\]} +This right justifies the contents of the \hor . The comments about vertical +spacing above apply here, also. This command has also been redefined +to use {\tt \+lline} (see {\tt \+centerline}, above). + +\cmd{\indx{raggedright}} +The {\tt\bs raggedright} macro causes paragraphs to be formatted +in such a way that they are not necessarily justified +on the right margin. This command has also been redefined from +{\bo plain} \TeX\ in that {\tt \+rightskip} values are preserved. + +\cmd{\indx{justify}} +This macro has the opposite effect of the {\tt\bs raggedright} macro +and causes the text to be right justified +({\tt\bs justify} is the default in HP \TeX ). + +\level2{Boxes} + +\cmd{\indx{boxline}=\dim} +This macro assigns the width of the lines used for {\indx{boxes}. The default +boxline dimension is 0.01332 inch. + +\cmd{\indx{boxspace}=\dim} +This macro assigns the width of the space between a boxed item and +the line of the box. The default width in HP \TeX\ is 5 points.\super{4} + +\cmd{\indx{boxit}\[\hor\]} +This macro encloses the argument in a box. If encountered +while making a line of text, the box's bottom line will +be along the baseline of the text. The \hor\ may contain multiple +lines separated by {\tt\bs cr} to be centered within the box. Note +that each line is then treated as a {\bo group}, so font changes, +$etc.$~on one line will not affect the next line. + When using this command, the \hor\ will be +raised somewhat above the line, \boxit{like this.} +If you desire that the text not be raised above the baseline, +use the {\tt\bs textbox} command (described below). + +\cmd{\indx{textbox}\[\hor\]} +This command causes a box to be placed around the \hor , +{\bo without} altering the text, \textbox{like this.} A +textbox cannot be broken from one line of text to another. + +\cmd{\indx{centerbox}\[\hor\]} +This macro centers a box horizontally on the page +and inserts space above and below. +Multiple lines can be specified using {\tt\bs cr} (see +{\tt \bs boxit} description). A {\tt \+centerbox} within a + {\tt \+centerbox} will not work, but {\tt \+boxit} inside + {\tt \+centerbox} will. + %\need1.25in +\level2{Notes and Warnings} +Two other text structures available with the HP \TeX\ macro package are notes +and warnings. + +\need.5in\bigskip\relax{{\tentt \+start\[note\]}}\lbreak + \relax{{\tentt \+finish\[note\]}}\lbreak +A note is inset twice the {\tt\bs inset} dimension on both margins and +set apart from the rest of the text by extra vertical space. +If a note would otherwise start less than half an inch from the +bottom of a page, a page eject is performed prior to the note. +{\tt\bs finish\[note\]} signifies the end of the note. + +\need.5in\bigskip\relax{{\tentt \+start\[warning\]}}\lbreak + \relax{{\tentt \+finish\[warning\]}}\lbreak +A warning is similar to a note, except that is also set apart by horizontal +rules above and below the text. {\tt\bs finish\[warning\]} +signifies the end of the warning text. + +\level2{Verbatim Mode} +Verbatim mode will cause text to be printed ``as is,'' +without any justification. Special characters in this mode +are the backslash (\bs ) and the curly brackets (\[), (\]). +Most other characters can be used and will be printed \indx{verbatim}. + +Verbatim mode is intended for use with simple text which does +{\bo not} contain a large number of control sequences. +The reason for this restriction is that there are many +characters (such as a space, a \indx{tilde}, $etc.$) +which take on different meanings in verbatim mode. Some of these may be +imbedded within a control sequence and can cause +problems when they are expanded. + +You will usually want to select a ``non-proportionally spaced'' +font (like ``tt'') for use in verbatim mode. The +reason for this is that ``proportional fonts'' (like ``rm'') +will cause the printed output to be aligned differently +than what appears on the CRT during source file typing. Other +non-proportional fonts available with the HP 2688A Laser Printer + are Courier, Gothic, Pica, Script, Prestige and Line Printer. + +\start{note} +\centerline{-- NOTE --} +Although verbatim mode using \indx{non-proportional fonts} will +{\bo usually} produce output +that exactly matches what you see on the CRT, there is +at least one exception to this. Long sequences of characters + may be spaced +slightly differently than a string +of blank spaces of identical length . This is +a result of the rounding anomalies that occur when \TeX 's +{\bo ideal} character sizes are converted to the printer's +{\bo actual} sizes. +\finish{note} +\cmd{\indx{start\[verbatim\]}} +This macro causes the following text to be printed ``verbatim'' +without any justification. + +\cmd{\indx{finish\[verbatim\]}} +This macro ends the verbatim mode described above. + +%\need1.25in +\level2{Paragraph Levels} +These macros can be used to create \indx{paragraph headings} +of four different levels. +The \hor, and page number can be written +to the file \lb{\sa jobname}\rb\lower.3em\hbox{*} +to be used for a table of contents (the asterisk ``\lower.3em\hbox{*}'' +signifies the {\tt contents} file). + +The command {\tt\+ctswrite\hor} will automatically open a file and write the +\hor\ and the page number to the file. The {\tt\+contents} command +then uses the \lb{\sa jobname}\rb\lower.3em\hbox{*} file to +create the \indx{table of contents} (refer to the {\tt\+contents} command +description in this section). + +\cmd{\indx{level}\lb\sa integer between 1 and 4\rb\[\hor\]} +This is the command used to print a paragraph heading. Whatever +format is specified using the commands listed below ({\tt \+firstlevelhead, +\+secondlevelhead}, $etc.$) will be used. For example, the command used to set +the paragraph heading of this section looked like this: + +\centerline{\tt \+level3\[Paragraph Levels\]} + +The {\tt \+level} command will automatically update the {\tt\bs levelno} +to print the paragraph head. + +\need.5in\bigskip\relax{{\tentt \+firstlevelhead}}\[\hor\]\lbreak +\relax{{\tentt \+secondlevelhead}}\[\hor\]\lbreak +\relax{{\tentt \+thirdlevelhead}}\[\hor\]\lbreak +\relax{{\tentt \+fourthlevelhead}}\[\hor\]\lbreak +These commands specify the tokens that are inserted to format +each of the various head levels. They should be used when the +default conditions of HP \TeX , as described below, + are not satisfactory. A control sequence {\tt \bs title} +is defined to be the \hor\ from the corresponding {\tt \bs level} +command. For example, the command: +\start{verbatim}\tt{\hfuzz=31pt + \+secondlevelhead\[\+need.75in\+bigskip\+leftline\[\+fourteenbf% + \+levelno\+enspace\+title\]\+medskip% + \+ctswrite\[\+hskip15pt\+tenrm\+title\]\]} + \finish{verbatim} +\vskip3pt\noindent + would cause all second level paragraph heads to be printed on +a new page if less than .75 inch remains on the current page. +The title will be left justified in fourteen point boldface +type. The level number is followed by an ``enspace.'' + ``Bigskip'' \indx{glue} is inserted before the title with a ``medskip'' +after. The \indx{{\tentt\+ctswrite}} command specifies how the +level heading will be written in the table of contents, as +described below. + +Whenever you define a {\tt \bs firstlevelhead, \bs secondlevelhead}, $etc.$, +command to specify the formatting of paragraph headings, you must also +specify how it will be written in the table of contents (if +you plan to create one). The command for doing this is +{\tt \bs ctswrite}. For example, the fourth level head was +redefined from the HP \TeX\ defaults in this document, and the +contents writing command was used as follows:\lbreak +\centerline{\tt \bs ctswrite\[\bs hskip45pt\bs ninerm\bs title\]} +This causes all fourth level headings in the table of contents +to be inset 45~points and be written in nine--point roman type. + +The default HP \TeX\ paragraph level headings +are formatted as follows: {\tt \bs level1} begins on a new page, +prints the title in 14 point bold face type and down 1.5 inches +from the top of the page. {\tt \bs level2} + requires that at least .75 inch remain on the +page. If so, the title is printed with some vertical space above it, +otherwise, it is set on the top of the next page. In any case, it is printed +in 12 point boldface type. {\tt \bs level3} and +{\tt \bs level4} are similar, but +require less space to remain on the page and print the title in 10 +point bold face and 10 point roman respectively. + +The ``levelhead'' macros are {\bo local} to +their \indx{block structure}. This provides a simple means +to return to the HP \TeX\ default levelhead +style. All you would need to do is enclose the command +and any text you want affected within braces. After the +closing brace, \TeX\ will return to the default format. Note +that this should only be attempted for {\bo shorter} blocks. +Creating large blocks of several pages in length can cause +\TeX\ to run out of memory. + + +\start{note}\centerline{-- NOTE --} +If you need to change the font style or size within a level +heading, you must specify the {\bo entire} font name, +(for example: {\tt \bs tentt}$\ldots$ not {\tt \bs tt}). +\finish{note} +\cmd{\indx{levelno}} +This macro can be used whenever the author desires the number +of the heading to appear in the document. The number of the +various levels of headings appear, separated by periods. +For example, typing {\tt Section \bs levelno} might result +in: Section 1.2.7.1 if this was the first fourth-level heading +of the seventh third-level section of the second$\ldots$ $etc.$ +Levels lower than the last modified level do not appear in +{\tt\bs levelno}. + +\def\delim{.} +\cmd{\indx{setlevelno}\[\int\delim\int$\ldots$\int\]} +This macro can be used for presetting the one through +four heading numbers. If you use +this command before a {\tt\+level} command, then the +counter will increment to the next number when the +{\tt\+level} command is encountered. Therefore, you +should preset to one number below the desired level. + You cannot preset the level 2 counter without + specifying the level 1, or the level 3 without level 1 and 2 + and so on. (For example, you cannot specify {\tt\+setlevelno\[1.~.~.4\]}, + you must specify {\tt \[1.\int .\int .4\]}.) + +\cmd{\indx{contents}} +This macro forces a page eject and produces a \indx{table of contents} +on the following pages as dictated by the previous heading macros. +No vertical \indx{glue} is inserted, so you may want to use a {\tt \bs vfil} +command immediately before {\tt \bs contents}. + +\need.5in\bigskip\relax{{\tentt \+topofcontents}}\[\ver\]\lbreak + \relax{{\tentt \+botofcontents}}\[\ver\]\lbreak +These macros specify a list to be placed above and below the table of +contents. The \ver\ may include logos, rules, $etc.$ The table of contents +is quite rigid, so a {\tt\bs vfill} is appropriate in at least one \ver. +Defaults in HP \TeX\ will format the table of contents as they appear in the +beginning of this manual (with the exception of the headings). +\start{note}\need1in +\centerline{-- NOTE --} +{\tt\+topofcontents} and {\tt\+botofcontents} must +{\bo both} be specified {\bo before} the +{\tt\+contents} command is used. (That is, you cannot +specify {\tt\+botofcontents} after {\tt\+contents}, +even though this seems logical.) +\finish{note} +\level2{Multiple Columns} + +The following macros control the number of columns on the page. +Multiple column and single column text can be mixed on a page by +using the following commands. + +\cmd{\indx{columnspace}=\dim} +This command specifies the amount of space between columns on a page. +This dimension should be assigned before entering multicolumn mode and +should remain unchanged for the duration thereof. The default +column space in HP \TeX\ is 0.5 inch. + +\need.5in\bigskip\relax{{\tentt \+start\[twocolumns\]}}\lbreak + \relax{{\tentt \+start\[threecolumns\]}}\lbreak + \relax{{\tentt \+finish\[twocolumns\]}}\lbreak + \relax{{\tentt \+finish\[threecolumns\]}}\lbreak +These four commands cause the text to be formatted into multiple columns. +If a {\tt\bs balance}, + {\tt\bs newpage}, {\tt\bs evenpage} or {\tt\bs oddpage} macro is +encountered while in multicolumn mode, the columns are balanced +on the page prior to the page eject. Exit from multicolumn mode +causes the columns to be balanced as well. Unbalanced columns may +be obtained by using {\tt\bs vfill} {\tt\bs eject} while in multicolumn mode. +Balancing forces the top lines of each column to be lined up. The +bottom lines are lined up as well unless {\tt\bs raggedbottom} has been +specified. Discardable items (such as glue, penalties, $etc.$) +immediately following these commands will be ignored. (To prevent +this, you may use {\tt\+null} immediately +after {\tt\+finish\[$n$columns\]}.) + +\cmd{\indx{balance}} +This command causes the columns to become balanced. Discardable +items (such as \indx{glue}, penalties, $etc.$) immediately following these +commands will be ignored. (To prevent +this, you may use {\tt\+null} immediately +after {\tt\+finish\[$n$columns\]}.) + + +\start{note} +\centerline{-- NOTE --} +When using multiple columns, you may find it helpful to use the +plain \TeX\ commands {\tt\+tolerance} and +{\tt\+hbadness} (to increase the stretch and +shrinkability of interword \indx{glue} and decrease complaints +regarding ``underfull hboxes''). See {\tenit The +\TeX book} for more information. +\finish{note} + +\level2{Tables} +The following macros are useful for setting \indx{tables}. These +macros are different from the plain \TeX\ {\tt\bs halign} and +{\tt\bs valign} commands in that +they format one row at a time. The table can be justified as a whole +either left, right or centered. As long as the number of columns +in each entry remains constant, the entire table appears justified. +(Interesting figures, such as pyramids, hopscotch boards, $etc.$ can +be produced by changing the format and the number of +columns in each entry.) +Each column of the table has its own user specified width. +Between each column +is a vertical line (which can be easily made invisible). +This vertical rule takes no space from any column so the rule +width may be varied without altering the column dimensions. +An entry may also be designed to span two or three columns. +Horizontal bars are +treated exactly the same as data entries. The macro \indx{{\tentt\bs tbar}} +can be used to produce such a bar. + +\cmd{\indx{tableline}=\dim} +This parameter specifies the dimension of bars and rules in +all subsequent entries. This parameter should remain unchanged +throughout the entire table. Default value is 0.01332 inch.\super{7} +\start{note} +\centerline{-- NOTE --} +There may be some occasion when printing a table that you +get the error message,\lbreak +~~~~``{\tt Printer error: \lbreak +~~~~**Could not process all the data, data lost.}''\lbreak +The printer uses a variety of different length line segments to +``build'' a line. If the {\tt tableline} specification you have +chosen requires too many individual segments to make up the exact +specification, it may cause this error. +There are a few remedies available, as follows: + +---If you are using the default magnification (1.0), then +try using the default {\tt tableline} dimension (just leave out +the {\tt\+tableline} command. + +---If you are using a file magnification value other than 1.0, then alter +your {\tt\+tableline} specification so that its value, when converted +to dots (multiply length in inches $\times\ 300$), is a power of 2 ($i.e.$ 1, 2, +8, 16, 32 or a multiple of any of these except 1). +\finish{note} + +\cmd{\indx{tablespace}=\dim} +This parameter specifies the minimum amount of space to be placed +between the vertical rules and data entries in the table. Default in +HP \TeX\ is 5 points. + +\cmd{\indx{tableformat}\[\tspec|\colspec\dim|$\ldots$|\colspec\dim\]} +This command specifies the table format. Note that a \indx{vertical bar} +(\indx{{\tentt |}}) is required as a separator +between specifications, but not at the beginning or end of the +list (different than {\tt \+tablerow} or {\tt \+tablebar}). + +\tspec\ can be any of {\tt\bs leftline}, {\tt\bs rightline}, + or {\tt\bs centerline}. \colspec\ can be any of +{\tt\bs leftline}, {\tt\bs rightline}, {\tt\bs centerline} or +{\tt\bs paragraph}. Other options are +allowed if you make them yourself; for example, if you type: +\par\vskip3pt +\centerline{\tt\bs def\bs mything\#1\[\bs line\[\bs hskip 1in \#1\bs hss\]\]} +\par\vskip3pt +\noindent then {\tt\bs mything} would be a valid \tspec\ option that +would print the table 1 inch from the left margin. +The \colspec\ is always a single token ({\tt\bs leftline}, {\tt\bs rightline}, +{\tt\bs centerline} or {\tt\bs paragraph}), and is +followed by a dimension. The token specifies the standard +justification of the column ({\tt\bs paragraph} must be used if the +column is to contain paragraphs), and the dimension specifies the +absolute width of the column. Again, if you are not satisfied with the +selection you can make your own---the rules are that the macro consume +one token (containing the text) and produce a box of width {\tt\bs hsize}. +%\need2in +\start{note} +\centerline{-- NOTE --} +If the {\tt\bs paragraph} column specification is used, {\tt \+parskip} +must be 0 points (this is the default). Otherwise, the paragraph entry +will be raised or lowered by the current {\tt \+parskip} amount and the +table will be out of alignment. If you are using {\tt\+noindentstyle} +and have not reset {\tt\+parskip}, then inserting an {\tt\+indentstyle} +command just prior to the table will return to the proper (0 points) parskip. +\finish{note} + +\need.5in\bigskip +\relax{{\tentt \+tablerow}}\[{\tt |}\col{\tt |}\col$\ldots${\tt |} + \col{\tt |}\]\lbreak +\relax{{\tentt \+tablebar}}\[{\tt |}\col{\tt |}\col$\ldots${\tt |} + \col{\tt |}\]\lbreak +These commands are used to build tables. {\tt\bs tablerow} should +be used if the \col\ contains text, while {\tt\bs tablebar} should +be used for bars or other non-text entries. Horizontal bars are +obtained by using either {\tt\bs vrule height} \dim , {\tt width} \dim\ + or {\tt\bs tbar} +as a \col\ ({\tt\bs tbar} uses {\tt\bs tableline} as the rule height). +The following syntax holds true for both macros:\dotteditems + +\itm A \indx{vertical bar} (\indx{{\tentt |}}) or a \indx{tilde} (\~{}) must be +beginning and end of each column, including the first and last entry +(differs from {\tt \+tableformat} syntax). +\itm The \indx{vertical bar}s ({\tt |}) may be replaced by tildes (\~{}) +if a visible vertical bar in that position is not desired. + +\itm If the first thing in a \col\ happens to be the control sequence +\indx{{\tentt \bs span}}\[\int\]{\tt \bs tbar}, then the number +of columns specified +as \int\ are spanned by the entry (in this case a horizontal bar). The +natural justification for the spanned entry will be that of the +leftmost column spanned. (Note that {\tt span}\[\int\] is +{\bo not} followed by a blank space as this can cause difficulties.) +%\need1.25in +\start{note} +\centerline{-- NOTE --} +While building tables, if a {\tt\+tablebar} or {\tt\+tablerow} +runs more than one line of text (on the CRT), it is good practice +to use the percent +sign (\indx{{\tentt \%}}) at the end of each line. This will tell \TeX\ to +ignore anything else on that line and prevent +possible problems with extra spaces being +misinterpreted by \TeX . +\finish{note} +\level2{Fonts} +Only a few fonts are preloaded in HP \TeX. These macros allow you +to access a variety of font families, styles, and sizes. + +\cmd{\indx{fontdef}\bs\lb{\sa command}\rb=\[\lb{\sa library}\rb,% + \lb{\sa font name}\rb\]} +This command equates a command of your choice with a +font (as used in the library). You can use \lb{\sa library}\rb +(optional) to +specify other than the default font library. +This command differs from \TeX's {\tt\+font} command in that the +font won't actually be loaded until +the first request (if any). + +\need.5in\bigskip\relax{{\tentt \+fivepoint}}\lbreak + \relax{{\tentt \+sixpoint}}\lbreak + \relax{{\tentt \+sevenpoint}}\lbreak + \relax{{\tentt \+eightpoint}}\lbreak + \relax{{\tentt \+ninepoint}}\lbreak + \relax{{\tentt \+tenpoint}}\lbreak + \relax{{\tentt \+tenpoint}}\lbreak + \relax{{\tentt \+fourteenpoint}}\lbreak + \relax{{\tentt \+eighteenpoint}}\lbreak + \relax{{\tentt \+twentyfourpoint}}\lbreak +These commands select the font point size from five to twentyfour. (In +{\bo Math Mode}, these commands only apply to the default +font within a font family. If you are using a current family +other than {\tt\+fam0}, you must make the appropriate +font assignments +(see Appendix A, ``Changing Fonts in HP \TeX ''). + +%\mcmd{{cm}}\lbreak + %tr\lbreak + %gv} +%These commands select Computer Modern, times roman +%and geneva font families respectively. +\need.5in\bigskip\relax{{\tentt \+rm}}\lbreak + \relax{{\tentt \+it}}\lbreak + \relax{{\tentt \+bf}}\lbreak + \relax{{\tentt \+sl}}\lbreak + \relax{{\tentt \+sa}}\lbreak + \relax{{\tentt \+tt}}\lbreak +These commands select \indx{roman} style, \indx{italic}, \indx{bold face}, +\indx{slanted}, +\indx{sans serif}, and \indx{typewriter} style. + +If the selected font is undefined, the font style is changed +to roman. If that new font is still undefined, the size is +changed to ten points. Computer Modern ten point +roman will always be defined in HP \TeX. + +\level2{Miscellaneous Macros} + +%\cmd{\indx{indx\[\hor\]} +%This command sets the \hor. The \hor\ along with the current page +%number are then written to the file {\job.inx} for use as an index. +% +\cmd{\indx{note}\[\hor\]} +This macro puts a footnote at the bottom of the current page +and inserts a superscript footnote number at the location +of the command and the footnote. +Footnote numbers are allocated starting with~1 and can be +reset by the use of {\tt\bs resetnotes}. The \hor\ is the footnote +text. + + +\cmd{\indx{need}\dim} +The result of this macro is that if the page breaking algorithm +of \TeX\ determines that the current position would optimally +fall within \dim\ of the bottom of the page, the page is broken +leaving some empty space at the bottom. +\need1in +\start{note} +\centerline{-- NOTE --} +Since the {\tt \bs need} command uses a negative penalty +to {\bo encourage} (not {\bo force}) \TeX\ to break +the page, it will +not always have the effect you might anticipate. This is especially +true if the command is encountered near +the top of the current page and the remaining text will not +adequately fill the current page. +\finish{note} +\cmd{\indx{super}\[\hor\]} +The argument is printed as a superscript. + +\cmd{\indx{sub}\[\hor\]} +The argument is printed as a subscript. + +\cmd{\indx{lbreak}} +This macro forces a line break within a paragraph. It inserts ``hfil'' +\indx{glue} before the break, so the line will {\bo not} be right +justified. If you want right justification, use plain \TeX 's +{\tt \bs break} command. + +\cmd{\indx{uline}\[\hor\]} +This macro causes the argument to be underlined. + +\cmd{\indx{mon}} +This command prints the current month name. For +example, if the current month were August, {\tt\bs mon} would +print the letters ``August'' in the current font. + +\cmd{\indx{date}} +This command prints the current date in the format Month Date, Year. +For example, if today's date were 12 December 1984, {\tt\bs date} +would print the characters ``December 12, 1984'' in the current font. + +\cmd{\indx{hour}} +This command prints the current time of day (for example -- 4:07 PM) + +\level2{Block Structure} +Certain local document styles are considered to belong to a ``block.'' +(\indx{Block structure}, as used here, simply refers to a portion of a +file that has some common formatting instructions applied +to it.)\note{\tenpoint The concept of {\tenbo \indx{grouping}}, explained +in this manual and in {\it The \TeX book}, is basically the +same as the ``\indx{block structure}'' referred to here.} + +The current block is defined to be the most recently opened +block. Pending blocks are blocks that have been opened but +not closed. The HP \TeX\ macros {\tt\+start} and {\tt\+finish} +are used to open and close blocks. + +Valid \blk s pre-loaded in HP \TeX\ include {\tt indent, note, + warning, ver\-ba\-tim, twocol\-umns} and {\tt threecolumns}, + all of which have been described in this chapter. + User defined blocks may be implemented by defining a control + sequence, {\tt\bs BEGIN\blk} and, optionally, another + control sequence, {\tt\bs END\blk}. + +\cmd{\indx{start}\[\blk\]} +This command determines if a control sequence {\tt\+BEGIN\blk} has +been defined. If one exists, a new block is opened and the control +sequence is invoked. Otherwise, an \indx{error message} is issued and the +command is ignored. + +\cmd{\indx{finish}\[\blk\]} +This command is used to close the current block and invoke the +control sequence {\tt\+END\blk} if one has been defined. If \blk\ matches +the current block name, the current block is closed. If not, an +appropriate error message is issued and corresponding corrective +action is taken. If \blk\ is not valid or there are no pending +blocks, the command is ignored. If \blk\ is valid but does not +match the current block +name, {\tt\bs done} commands are inserted until either \blk\ matches +the current block name or until all pending blocks are closed. + +\cmd{\indx{done}} +This command closes the current block without +any error checking and invokes the control sequence {\tt\+END\blk} if +one has been defined. A \TeX\ error message will be issued if +there are no pending blocks. + +Following is an sample usage of the {\tt\+BEGIN} and {\tt\+END} +commands in creating user-defined blocks: + +\def\BEGINexample{\bigskip\centerline{- EXAMPLE -} + \medskip\leftskip.75in\rightskip.75in} +\def\ENDexample{\medskip} +\start{example} +This example was created by defining the following block:\medskip +\centerline{\tt \+def\+BEGINexample\[\+bigskip\+centerline\[- EXAMPLE -\]} +\centerline{\tt ~~~~~~\+medskip\+leftskip.75in\+rightskip.75in\]~~~~~~} +\medskip +The block was opened using the command: {\tt\+start\[example\]}. The +optional control sequence {\tt\+END\blk} was also used, as follows:\medskip +\centerline{\tt \+def\+ENDexample\[\+medskip\]}\medskip +The {\tt\+medskip} vertical glue will be inserted after the block is +closed using the command: {\tt\+finish\[example\]}. +\finish{example} + + +\level1{\indx{HP 2688A} Control Macros} + +These macros are for controlling certain features of the 2688A Laser +Printer: + +\level2{Page Copy Control} + +\cmd{\indx{copies}\int} +This macro assigns the number of copies per page starting with the current +page. The copies are uncollated; in other words, if {\tt\bs copies5} +occurred on page 3, the output will have five copies of page 3, +then five copies of page 4, $etc.$ The control of the number of copies +is accomplished through one of \TeX's counters. Default is counter +number~1. Possible integers and their effect are shown below: +\itm 1 to 32,767 will produce the specified number of copies. +\itm Greater than 32,767 will produce 32,767 copies. +\itm 0 will produce 1 copy. +\itm Less than 0 (negative number) no copies (can be used +to suppress certain sections of a document, $etc.$) +\enditems +The counter +can be changed using the following macro. + +\cmd{\indx{selectcopycounter}\lb {\sa integer from 0 to 9}\rb} +This is used for changing which counter is used for controlling +the number of \indx{copies} per page (default is 1). This command generally +should not be used except by people who are writing their own +macros. + +\need.5in\bigskip\relax{{\tentt \+copieson}}\lbreak + \relax{{\tentt \+copiesoff}}\lbreak +If the multiple copies feature is being used in a document, these +macros can be used to alternate between one copy per page and the +number of copies assigned by the {\tt\bs copies} macro. The difference between +{\tt\bs copiesoff} and {\tt\bs copies1}~is that when the former is followed +with {\tt\bs copieson}, the original number of copies is restored, whereas +when the latter is followed with {\tt\bs copieson}, there is, +of course, no effect. + +\level2{Logical Page Control} + +The Print Server features a concept called ``\indx{logical paging}'' +which is controlled using the following set of macros. A +logical page is a rectangular addressing space on the sheet of paper +(referred to as the ``\indx{physical page}''). Logical pages have an +orientation (\indx{portrait}, \indx{landscape}, \indx{reverse portrait} +or \indx{reverse lanscape}) and a position on the physical page. +Through the operator +interface of PS2688A, you may define a list of logical pages that +may be written to on any sheet of paper. +These logical page specifications may also be stored in a PS2688A +input file to avoid typing in the specifications for each job. +Using these macros, you +can address the logical pages with either of two methods: +either by explicitly specifying a logical page for each page of +\TeX\ output, or by specifying an ordered list of logical pages +and letting the system cycle through the list. + +\cmd{\indx{lpdef}\[\lb\sa logical page definition\rb\]} +This command defines a logical page size and orientation. The +\lb{\sa logical page definition}\rb +consists of the logical page +number, followed by the {\bo left}, +then the {\bo top} dimensions (distance from the + edges of the physical page), and the +\indx{logical page orientation} (portrait, landscape, rev--portrait or +rev--landscape). Orientation may be abbreviated {\tt P,L,RP,}and +{\tt RL,} respectively, and either upper or lower case +characters will work. The edges of the page that +would normally be the top and left as viewed from that +logical page's orientation are +always considered top and left in this context. + An example usage follows:\medskip +\centerline{\tt \bs lpdef \[1, 1.5in, 3in, L\]}\medskip +This would cause logical page number 1~to be printed +in {\bo landscape} orientation, with the left edge of the +print (as viewed from landscape orientation) beginning 1.5~inches +from the edge of the physical page. The ``top'' (left-hand +edge along the paper path) will begin 3~inches from the +edge. + +The default values for logical pages in HP \TeX\ are: LEFT=1in, +TOP=1in. + + + + +\start{note} +\centerline{-- NOTE --} +The dimension specified as distance from the top edge does not +take into account the space needed for headings. If running headings +are to be used, the logical page definition should allow extra +room for them when specifying ``top'' dimension. (Footings +are also printed ``in the margin,'' so when specifying +{\tt vsize} be sure to leave room for them.) +\finish{note} + +\cmd{\indx{lplist}\[\lb\sa logical page list\rb\]} +This command specifies the logical page list to be used whenever +logical pages are being used implicitly. Only one such +specification is allowed within a document, if more than one exist, +all but the last are ignored. This command initializes +implied logical paging. + + The \lb {\sa logical page list}\rb ~is a list +of integer numbers from 1~to 32~which have been defined +using the {\tt \bs lpdef} command. Positive number entries will +cause a physical page eject prior to initiating the logical +page entry. Negative numbers require no such physical +page eject. Each entry number should be separated from +the next by a comma. + +%\need3in +\medskip The remaining commands control explicit logical paging. If any of +these commands occur within a page, a page eject is issued and the +next page to be printed will be dependant upon the particular +command. If any of these commands occur on the top of a page, the +prescribed action will be delayed until the next page break +(be it natural or forced by a {\tt\bs newpage}, {\tt\bs eject}, $etc.$). +For example, suppose the first page of every chapter in a +document uses logical page 5, then {\tt\bs ppageto5} {\tt\bs lpresume} +would eject the current page (assuming it is not empty), issue +a physical page eject and begin printing on page 5. Later, +when the page is full, \TeX\ breaks the page and resumes printing +according to the logical page list. + +\cmd{\indx{lpageto}\lb {\sa integer between 1 and 32}\rb} +This command causes the next page to be printed on the specified +logical page. No physical page eject is implied. + +\cmd{\indx{ppageto}\lb {\sa integer between 1 and 32}\rb } +This command is similar to {\tt\bs lpageto} but implies a physical +page eject prior to printing on the specified logical page. + +\cmd{\indx{lpresume}} +This command is used after a {\tt\+ppageto} or {\tt\+lpageto} +command to resume +printing on the current page of the logical page list. + +\cmd{\indx{lpreset}} +This command resets the logical page list and prints on the first +page in the list. + +\cmd{\indx{lpexit}} +This command exits the current loop in the logical page list and +prints on the next page in the list. + +\cmd{\indx{selectlpcounter}\int} +This is used for changing which counter is used for specifying the +logical page (default is 2). This macro generally should not be used +except by people who are writing their own macros. +\vfill\eject + +% THIS BEGINS THE SAMPLE PAGE*** + +\def\oddheading{\vbox{\hbox to \hsize{\eightrm A Sample Document + \hfil Page \folio} + \nointerlineskip\vskip2pt + \hbox{\vrule width \hsize height .4pt}}} +\centerfooting{\eightbf THIS DOCUMENT WAS CREATED USING \HPTEX} +\firstlevelhead{\leftline{\fourteenbf\levelno\enspace% + \title}% + \medskip\ctswrite{\hskip15pt\tenrm\title}} +\numbereditems +\level1{Formatting a \indx{Sample Document}} +In this section we will format a simple document +utilizing many of the HP \TeX\ macros. +For this example, we will accept all the HP \TeX\ default values for the +various commands. +\vskip.5in +\centerline{\twelvebf A Sample Document} + +Isn't that nice? If we wanted to, we could have easily set that off to the +right like this:\lbreak +\rightline{\twelvebf A Sample Document} + +Now, how about \textbox{a textbox?} Those are +always fun. Or, if we really want to set something off, we could +ask \TeX\ to: +\centerbox{put it inside\cr + a nice little\cr + centered box,} +or, maybe just \boxit{``boxit'' -- like this.} + +But say you're really serious about getting someone's attention. + +\start{warning} +\centerline{\bf LOOK!} +\centerline{You can use the ``Warning'' command, like we did here.} +\finish{warning} + +Now, let's use the extraordinary capabilities of \TeX\ to +generate a mathematical formula: +$$\hat{n}_2(s)={1\over \alpha_2}\biggl[ \biggl({\partial C_2\over + \partial x} \biggr)_{x=0}+{k_1 \hat{n}_1\over D_1} \biggr]$$ +Next, we'll create a table to show the dimensional units available in \TeX : +\medskip +\tableformat{\centerline|\centerline 1in|\leftline 1.2in|\centerline 1in|% + \centerline .05in|\centerline 1in|\leftline 1.2in|\centerline 1in} +\tablebar{|\span7\tbar|} +\tablerow{|\TeX\ UNIT|DESCRIPTION|PER INCH||\TeX\ UNIT|DESCRIPTION|PER INCH|} +\tablebar{|\span7\tbar|} +\tablerow{|{\tt in}|inch|1||{\tt mm}|millimeter|25.4|} +\tablerow{|{\tt cm}|centimeter|2.54||{\tt dd}|Didot point|67.54|} +\tablerow{|{\tt pt}|printer's point|72.27||{\tt bp}|big point|72|} +\tablerow{|{\tt pc}|pica|6.02|| | | |} +\tablebar{|\span7\tbar|} +\medskip +Itemized lists are very useful: +\itm For listing things. +\itm For making a series of points. +\sitm You can even use subitems. +\enditems +Now, look at the next page to see exactly how this sample +document was formatted. +\vfil\eject + + +\nofooting +\centerline{\bf Here's the source file for ``\indx{Sample Document}''} +\medskip +\start{verbatim}{\tentt\inset=.6in\start{indent} +\+noindentstyle +\+centerfooting\[\+eightbf THIS DOCUMENT WAS CREATED USING \+HPTEX\] +\+null\+bigskip +\+centerline\[\+twelvebf A Sample Document\] + +Isn't that nice? If we wanted to, we could have easily set that off to the +rightlike this:\+lbreak +\+rightline\[\+twelvebf A Sample Document\] + +Now, how about \+textbox\[a textbox?\] Those are always +fun. Or, if we really want to set something off, we could ask \+TeX\+ to: +\+centerbox\[put it inside\+cr + a nice little\+cr + centered box,\] +or, maybe just \+boxit\[``boxit'' -- like this.\] + +But say you're really serious about getting someone's attention. + +\+start\[warning\] +\+centerline\[\+bf LOOK!\] +\+centerline\[You can use the ``Warning'' command, like we did here.\] +\+finish\[warning\] + +Now, let's use the extraordinary capabilities of \+TeX\+ to +generate a mathematical formula: +$$\+hat\[n\]_2(s)=\[1\+over \+alpha_2\] \+biggl[ \+biggl(\[\+partial C_2\+over + \+partial x\] \+biggr)_\[x=0\] +\[k_1 \+hat\[n\]_1\+over D_1\] \+biggr]$$ +Next, we'll create a table to show the dimensional units available in \+TeX : +\+medskip +\+tableformat\[\+centerline|\+centerline 1in|\+leftline 1.2in|% + \+centerline 1in|\+centerline .05in|% + \+centerline 1in|\+leftline 1.2in|\+centerline 1in\] +\+tablebar\[|\+span7\+tbar|\] +\+tablerow\[|\+TeX\+ UNIT|DESCRIPTION|PER INCH||\+TeX\+ UNIT|DESCRIPTION|PER INC +\+tablebar\[|\+span7\+tbar|\] +\+tablerow\[|\[\+tentt in\]|inch|1||\[\+tentt mm\]|millimeter|25.4|\] +\+tablerow\[|\[\+tentt cm\]|centimeter|2.54||\[\+tentt dd\]|Didot point|67.54|\] +\+tablerow\[|\[\+tentt pt\]|printer's point|72.27||\[\+tenttbp\]|big point|72|\] +\+tablerow\[|\[\+tentt pc\]|pica|6.02|| | | |\] +\+tablebar\[|\+span7\+tbar|\] +\+medskip +Itemized lists are very useful: +\+itm For listing things. +\+itm For making a series of points. +\+sitm You can even use subitems. +\+enditems +Now, look at the next page to see exactly how this sample document was +formatted. +\+vfil\+eject +\finish{indent} +} +\finish{verbatim} + +\bye + diff --git a/obsolete/macros/hptex/hptex.doc b/obsolete/macros/hptex/hptex.doc new file mode 100644 index 0000000000..4611efaa45 --- /dev/null +++ b/obsolete/macros/hptex/hptex.doc @@ -0,0 +1,751 @@ +This is the documentation for HP TeX, version A.00.00, Feb. 14, 1984. + Copyright 1984 Hewlett-Packard Co. + +NOTE 1: Plain is read in as a separate file. + +NOTE 2: "@" temporarily becomes a letter so that HP TeX can use the + internal control sequences of PLAIN, and to avoid conflict between + the internal control sequences of HP TeX and user names. + +NOTE 3: This defines leaders used in the table of contents macros. + +<<FONTS>> + +NOTE 4: HP TeX has fonts available in sizes from 5 points to 24 points. The + fonts loaded in Plain are listed as comments to make it easier to + verify the fonts available. + +NOTE 5: In case a font is used in a write or message. + +NOTE 6: \fontdef#1#2 defines the control sequence for the font, but the + font is not loaded until the first time the control sequence is + actually used. The first parameter is the control sequence to be + defined; the second is the external font name. + +<<MACROS TO SET FSTYLE>> + +NOTE 7: These macros set the family and the background style. Then using + \setfont they set the current font. + +<<MACROS TO SET FSIZE>> + +NOTE 8: These macros set the background font size, and then use \setfont to + set the current font. \baselineskip and \strutbox are set to + values appropriate to the font size. The fonts in families 0, 1, + and 2 are changed to appropriate sizes. The fonts that are not + already loaded, are not loaded unless they are needed by an entry + into either math mode or display mode. + +<<MACROS TO SET CURRENT FONT USING FSTYLE AND FSIZE>> + +NOTE 9: \tryfont#1 sets \nofont@ to true if the control sequence determined + by the current background font size and style (#1) has not yet been + defined. If the control sequence does exist, \nofont@ is set to + false, and the control sequence is invoked. + +NOTE 10: \setfont uses \tryfont to set the current font based on the + background font size and style. If there is no control sequence + defined for that font, then \tryfont is used again to check for a + font with the background size and in roman style. If there is + still no control sequence defined for that font, the size ten and + style roman is tried. This will always succeed in HP TeX. + + \ffam will be a third factor in determining the current font when + other font families become available. + +<<DEFAULTS>> + +NOTE 11: The default values in HP TeX are family0 and font \tenrm with a + background style of roman, a background size of ten points, and a + superscript/subscript size of seven points. + +<<LINE MACROS>> + +NOTE 12: These line setting macros take \leftskip and \rightskip into + account. + +<<MORE MACROS>> + +NOTE 13: This replaces Knuth's definition of \narrower. \narrow@ is used in + the note and warning macros. + +NOTE 14: \need is followed by a dimension x. It uses \need@ to determine + if x space remains on the page, and if not, causes an eject to + the next page. + + \need@ depends on \okbreak which merely encourages a page break + at that point. Its effect is dependent on its nearness to the + bottom of the page, and whether the text following the \need + fits completely on the page or not. + +NOTE 15: \for provides a for-loop. Parameter #1 (\fcount@) contains the + variable name; #2 is the initial value of the variable; #3 + (\fexit@) is the terminating value; #4 (\floop@) contains the + instructions to be done in the loop. The loop will not execute + unless the initial value (#2) is less than or equal to the + terminating value (#3). \next@ is set to \fnext@. + +NOTE 16: \fnext@ provides the looping capability for \for. It executes + \floop@ and then checks to see if \fcount@ has reached the + terminating value. If it hasn't, then \fcount@ is incremented. If + the terminating value has been reached, \next@ is set to \relax. + \next@ is then entered and depending on its current meaning, either + the loop is repeated via \fnext@, or \relax ends the looping. + + +NOTE 17: \uline#1 makes an \vbox containing #1 with a horizontal rule .23em + under its baseline, and then creates an \hbox containing the vbox + lowered by the amount necessary to place the baseline of #1 in line + with the baseline of the current line of text. + +<<START AND FINISH GROUP STRUCTURE>> + +NOTE 18: \start#1 and \finish#1 define local nestable blocks. In the + event of any error, the error message is delayed until corrections + are complete. + +NOTE 19: \start#1 uses \ifinvalid@ to determine if #1 is a valid + blockname. If it is, a block (group) is begun and \blockname@ + stores #1 as the current block. The control sequence \BEGIN#1 is + invoked and \Error is called to print out any error messages. + +NOTE 20: \finish#1 calls \ifinvalid@ to determine if #1 is a valid + blockname. If it is valid, \matchup@ is called to close block #1. + \Error is called to print out any error messages. + +NOTE 21: \ifinvalid@#1 tests to see if the control sequence \BEGIN#1 + has been defined. If it has not been defined, it is ignored + and \errset is called to store an error message. + +NOTE 22: \matchup@#1 closes blocks as follows: if a \finish is used when no + block currently exists, it is ignored. if a finish does not match + the current blockname, blocks are closed until either a match is + found or all blocks are closed. The parameter is the parameter to + \finish. + +NOTE 23: \done closes the current block. + +<<GENERAL ERROR HANDLING>> + +NOTE 24: These macros are used for general purpose error handling. + \errfalse clears the error status. \errset assumes an argument of + an error message; any use of \errset sets the error status and + produces an error message when \Error is encountered. + +<<DATE AND TIME MACROS>> + +NOTE 25: \mon sets the current month with the current font. + +NOTE 26: \date sets the current date: <month> <day>, <year>. + +NOTE 27: \hour sets the current time of day in 12 hour format: + <hour>:<minutes> <AM or PM>. + +<<INDENTSTYLE>> + +NOTE 28: The switch \ifindent acts as a flag to indicate when \indentstyle + is being used. This is used in \indentstyle, \noindentstyle, and + \indentspace. + +NOTE 29: \indentstyle sets \parindent to \indentsize. If \indentstyle is + already in effect, \parskip is not changed. If \indentstyle is + not already in effect, \parskip is decreased by 5 points. + +NOTE 30: \noindentstyle sets \parindent to zero points. If \indentstyle is + in effect, \parskip is increased by 5 points, otherwise it is not + changed. + +NOTE 31: \indentspace will update \parindent only if \indentstyle is in + effect. + +<<RAGGED MARGIN> + +NOTE 32: \fixmargin@ preserves the original \rightskip. + +NOTE 33: \justify undoes the effects of \raggedright by returning to the + original \rightskip, and resetting the interword and intersentence + space to the default values. + +NOTE 34: \raggedright saves the original \rightskip with \fixmargin@, adds + some stretch to \rightskip, and if \tt is not in effect, fixes the + interword and intersentence spaces. + +NOTE 35: \tt@ is used in \raggedright in the \ifx comparison. It is + necessary if the comparison is to succeed. + +<<ITEM AND SUBITEM>> + +NOTE 36: \itemset@ takes three parameters: #1 specifies the left indentation + (in multiples of \inset), #2 should be the sum of the left and + right indentation (in multiples of \inset) , and #3 is the tag to be + hung to the left of the item. The line size is in \dimen@. \parshape + is used to build the paragraph. The tag (#3) is hung to the left of + the paragraph. + +NOTE 37: \itemlist#1 is syntactically the same as \item, however \itemlist + preserves \leftskip and \rightskip, and both the left and + right margins are indented by the value of \inset. The parameter + contains the tag for the item. Each time \itemlist is used, + the subitem tag is reset, and the item tag is incremented if + appropriate. + +NOTE 38: \subitem#1 is syntactically the same as \itemitem, however left and + rightskip are preserved, and both the left and right margins are + indented by twice the value of \inset. The parameter contains the + tag for the subitem. Each time \subitem is used, the subitem tag + is incremented, if appropriate. + +NOTE 39: \itempar creates a paragraph identical to that created by \itemlist + except it will have an empty tag. It can be used for the second + paragraph of an item. + +NOTE 40: \subitempar creates a paragraph like that created by \subitem, but + with an empty tag. + + +<<ITEM TAG AND SUBITEM TAG MACROS>> + +NOTE 41: The definition of a tag must do three things: + 1. define a control sequence \reset[sub]items which will be + used to restart tag allocation between lists; + 2. restart tag allocation; + 3. define a control sequence \[sub]itemtag to produce a tag. + + \icount@ (\scount@) holds the value used to determine the current + item (subitem) tag for numbered and lettered tags. + + \idigit@ (\sdigit@) is used with lettered tags to keep track of how + many times the item (subitem) tags have gone through the alphabet + without being reset. + +NOTE 42: \itemn@#1 is used in the allocation of numbered tags. The parameter + is either \icount@ or \scount@. + +NOTE 43: \itemr@#1 is used in the allocation of lower case Roman tags. The + parameter is either \icount@ or \scount@. + +NOTE 44: \itemR@#1 is used in the allocation of upper case Roman tags. + The parameter is either \icount@ or \scount@. + +NOTE 45: \iteml@#1#2 is used in the allocation of lettered tags. If the + end of the alphabet is reached, it begins again with "aa" or + "AA". The first parameter is either \icount@ or \scount@. The + second parameter is either \idigit@ or \sdigit@. + +NOTE 46: \item@#1,#2,#3 takes three parameters: #1 is the initial value of + \icount@ (item counter), #2 is the value of \idigit@ which is + used to print out the appropriate number of letters when using + letters as tags, and #3 is the definition of the \itemtag. It + defines \resetitems to be the initialization of \icount@ and + \idigit@. + +NOTE 47: \itm does not take a parameter. It uses the current \itemtag + as the parameter to \itemlist. If the \itemtag is numbers or + letters, a period is appended to the tag. + +NOTE 48: \subitem@ is similar to \item@. + +NOTE 49: \sitm is the subitem macro equivalent to \itm for item. + +NOTE 50: The defaults are \numbereditems and \letteredsubitems.The + execution of these macros defines \itemtag, \subitemtag, + \resetitems, and \resetsubitems. + +<<NOTE AND WARNING MACROS>> + +NOTE 51: \BEGINnote defines the blockname "note" and sets the indentation + at twice the left and right skip amounts. + +NOTE 52: \BEGINwarning defines the blockname "warning," sets the indentation + to twice the left and rightskip amounts, and places a horizontal + rule above the text. \ENDwarning places a horizontal rule below + the text. + +NOTE 53: \marginrule#1 defines an \hrule limited by \leftskip and + \rightskip. Its only parameter specifies the height of the rule. + +<<VERBATIM MODE>> + +NOTE 54: In verbatim mode, all characters except (\), ({) and (}) are treated + verbatim. Characters that cannot be extracted from the current font + are taken from the math font and given a fixed space equal to the + space of the current font. + + +<<LUMPLINE AND LUMPSPACE MACROS>> + +NOTE 55: These macros make the verbatim mode use less memory. Multiple lines + and spaces are lumped together to make one large glob of glue + rather than many small globs. + + The carriage return is made into an active character, and given + the meaning of \lumpline@. \lumpline@ accumulates sequential + carriage returns into one lump of vertical glue in \skip@. + + '\ ' is made into an active character, and given the meaning of + \lumpspace@. \lumpspace@ accumulates sequential spaces into + one lump of horizontal glue in \skip@. + +<<PAGE CONTROL MACROS>> + +NOTE 56: \newpage first balances multi-column format which transfers the + contents of \box 255 to \contrib@, so it always looks like the + page is empty immediately afterwards. The box \contrb@ is checked + to see if the page is really empty. + + If \newpage occurs at the bottom of a full page, the \null\vfill + remains in recent contributions and causes an extra page to be + ejected. The workaround is to insert an \eject in the document + just before the \newpage (or the macro containing the \newpage). + + The same problem occurs with \evenpage and \oddpage, and + the same workaround is effective. + +<<HEADING AND FOOTING MACROS>> + +NOTE 57: Headlines and footlines are constructed as follows: + + (1) under normal conditions the centered heading or footing is + centered, but in the event that one (or more) of the headings or + footings are too wide, space is distributed if possible so there is + no overlap. The macro triplehead@ does this. + + (2) inside and outside headings and footings have priority over + left and right headings and footings. \buildline takes care of + this. + + Notice that if the tokens in an \hbox have width 0pt, it is + assumed they are empty. + + The macros and token registers associated with headings and + footings should be used near forced page breaks or at the begining + of the document. TeX scans ahead when building a page, so the use + of these macros could affect the previous page. + +NOTE 58: \buildline decides which tokens will be on the left and right of + the headline or footline that is being constructed. \lft and \rght + hold the numbers of the boxes containing the tokens to be placed on + the left and right sides of the line. They are initialized to the + boxes for \leftheading and \rightheading. If the box containing the + \insideheading (\box3) is not empty, then for an odd page \lft is + set to 3, and for an even page \rght is set to 3. + + If the box containing the \outsideheading (\box4) is not empty, + then for an odd page \rght is set to 4, and for an even page \lft + is set to 4. + + \triplehead is called to actually construct the line. + +NOTE 59: \triplehead#1#2#3 requires three parameters. #1 is the number of + the box that is to go to the left, #2 is the box number for the + center, and #3 is the box number for the right. \skip@ is the glue + to go between the left and center boxes, and \skip@ii is the glue + to go between the center and right boxes. + + If the width of the left box is greater than the width of the right + box, \skip@ii is increased by the difference, otherwise, \skip@ is + increased by the difference. + + The line is then built by stringing together the boxes and glue. + +NOTE 60: \loadbox#1#2 takes two parameters: #1 is the box number, #2 is the + token list to be put in the box. + +NOTE 61: \headline checks to see if headings are turned on or off. If on, + it loads the appropriate boxes with the various heading token + lists and calls \buildline. If off, it adds horizontal glue, and + if \suspendheading is in effect, updates the \headcount. + +NOTE 62: \footline is similar to \headline. + +<<BOX MACROS>> + +NOTE 63: \boxit#1 takes as its parameter the text to be placed in the box, + and can be used when a real box is wanted, e.g., \setbox0\boxit{...}. + \boxit uses \halign to center the lines of text, separated by \cr, + within the box. + + The value of \boxline determines the thickness of the rule around + the box. The value of \boxspace determines the amount of space + between the rule and the text. + +NOTE 64: \centerbox#1 takes as its parameter the text to be boxed, and then + uses \centerline to center the box resulting from \boxit#1. The box + is separated from surrounding text by \abovedisplayskip and + \belowdisplayskip. + +NOTE 65: \textbox#1 takes as its parameter the text to be boxed. It places + the boxed text in the current line (or begins a new paragraph if + encountered in vertical mode) with the baseline of the enclosed + text lined up with the baseline of the line. + +<<HP2680A and HP2688A COPY CONTROL MACROS>> + +NOTE 66: These commands control the number of copies per page. Owing to the + synchronization problems associated with TeX, these should only be + used near forced page ejects or at the begining of a document. + + \globalspecial writes the parameter to the postamble of the + PIF file. + + \copycnt contains the number of the register that the PIF server + will look in to find the number of copies desired. + + \oldcopy contains the number of copies desired. The default is + two, so if \copieson is invoked before the user has used \copies<n>, + two copies will be generated. + +<<HP2680A and HP2688A LOGICAL PAGE CONTROL (LPC) MACROS>> + +NOTE 67: \lpcount@ holds the number of the register to be interpreted + by the PIF driver for explicit logical page control. + + \nextlp@ holds the page control number to be put into + \count\lpcount@. + + These macros avoid the synchronization problems of TeX by + interjecting a page eject at an appropriate time. At the beginning + of the document and after each \shipout, the "empty@" flag is set + to true. + + If an LPC macro occurs when the "empty@" flag is true, \nextlp@ + is updated, its value is put into \count\lpcount@, and the flag + is set to false. + + If an LPC macro occurs when the "empty@" flag is false, \nextlp@ + is updated, but the value in \count\lpcount@ is not changed. After + the next shipout, \count\lpcount@ is updated by the output routine. + + The codes for \lpreset and \lpexit will, if left alone, only endure + for one page. + +<<TABLE MACROS>> + +NOTE 68: The table macros are complex. It is recommended that anyone + wanting to understand how they work examine the LOG file of + a small table created with \tracingmacros=1 and \tracingcommands=2. + + The table macros use unallocated dimension and token registers to + store the column specifications. New dimensions or tokens should + not be allocated between the \tableformat and the last \tablerow or + \tablebar in a table. If any are allocated the result will be a + very strange looking table and a TeX error. If too many columns, + dimensions, tokens or inserts are allocated, an error message is + given and the registers are used anyway. + + A row is processed in sections. \parseline@ takes sections of the + parameter to \tableformat or \tablerow. Each section is delimited + by a ~. \parsecol@ takes sub-sections of the section where each sub- + section is delimited by a |. After a sub-section is processed, the + next sub-section is fetched until the end of a section is reached. + The next section is then fetched and processed until the end of the + original parameter to \tableformat or \tablerow is reached. + + \span is temporarily redefined during the execution of either a + \tablerow or \tablebar macro to allow spanning of multiple columns. + + The standard table specifications are \leftline, \rightline, + \centerline and (for internal columns) \paragraph. You can also + make your own. There are only two rules: + (1) your macro will have one parameter (the text) + (2) your macro will yield a box of width \hsize. + + +NOTE 69: \uptoks@ increments \cntA@, used as a pointer to a token register + to hold column alignment specifications, and \cntB@, used as a + pointer to a dimension register used to hold column width specifi- + cations. If too many token registers are used, an error message is + printed, and processing continues. + +NOTE 70: \bump@ increments \cntC@, which contains the number of columns + processed in the current \tablerow or \tablebar. If the total number + of columns specified in the \tableformat has not yet been processed, + then \cntC@ is incremented, and \uptoks@ is called to increment the + pointers to the registers that hold the column specifications. + + NOTE 71: \tableformat#1 has as its parameter the description of the + table format. The alignment for the entire table is given first, + followed by the formats for each column. A column format consists + of its alignment followed by its width. A | separates the table + format from the column formats, and each column format from the + next. + + \tableformat first calls \tablelet with the three parameters + \just@, \just@, and \relax. + + Next, \parse@ (which has been assigned the meaning of \parseline@) + is called and sent one parameter, which is delimited by ~. This + effectively sends the contents of the parameter of \tableformat up + to the first ~ to \parse@ (\parseline@). The \done@ is an undefined + control sequence used to mark the end of the specifications in the + \tableformat. + +NOTE 72: \tablerow#1 is similar to \tableformat. Its parameter is a list of + the contents for each column of the row. Each column must start + and terminate with either a | for a visible bar, or a ~ for an + invisible bar. + + The parameters sent to \tablelet are: \bbar@, \wbar@, and \endrow@. + +NOTE 73: \tablebar#1 sets horizontal rules across the table. It resets + \topstrut, \botstrut, and \tablespace, and then passes its + parameter to \tablerow. Its parameter is a list of column + contents, with each column indicated as for \tablerow. A + column can be empty, contain a \vrule, or contain \tbar. + +NOTE 74: \tablelet requires three parameters. The first is assigned to the + control sequence \b@, the second to \w@, and the third to \f@. + \CntA@, \CntB@, and \CntC@ are initialized. \parse@ is assigned + the meaning of \parseline@. If currently in horizontal mode, + vertical mode is entered; if in vertical mode, interline glue is + inhibited. + +NOTE 75: \just@#1 is never invoked directly. The control sequences \b@ + and \w@ are \let to be \just@ in \tablelet when \tablelet is + called from \tableformat. \just@ is invoked by \parsecol@ the + first time \parsecol@ is entered. The parameter to \just@ is the + alignment specification for the table. + + \just@ assigns the control sequences \b@ and \w@ the meaning of + \tform@, and initializes \maxcol@ to 0. The control sequence + \tablejust@ is assigned the table alignment specification (#1). + +NOTE 76: \tform@#1 passes its parameter, which is the set of specifications + for a column, on to \tform@@ with a ~ deliminating the parameter. + +NOTE 77: \tform@@#1#2~ updates the pointers to the registers to be used + for storing column specifications, puts the column alignment (#1) + into the current token register, and the column width (#2) into the + current dimension register. Then \maxcol@ is incremented to count + the column just completed. + +NOTE 78: \bbar@#1 begins a row that starts with a visible vrule. The + parameter is empty. + +NOTE 79: \wbar@#1 begins a row that starts with an invisible vrule. The + parameter is empty. + +NOTE 80: \beginrow@#1 reassigns \b@ and \w@ the meanings of \vbar@ and + \ibar@ respectively. The parameter is empty. + + Box0, an \hbox that will contain the row, is begun with a \bgroup, + and the assignments that should hold within the box are made. + +NOTE 81: \endrow@ finishes Box 0 and aligns the resulting box according to + \tablejust@. + +NOTE 82: \vbar@#1 adds a column entry that terminates with a visible \vrule. + The parameter contains the column entry. + +NOTE 83: \ibar@#1 adds a column entry that terminates with an invisible + \rule. The parameter contains the column entry. + +NOTE 84: \cs@#1 determines if a column entry (#1) spans multiple columns, + and invokes \span@ with the appropriate parameters. + +NOTE 85: \parseline@#1~ is called by \tableformat and \tablerow (and + indirectly by \tablebar). Its parameter is the part (section) of + the parameter to the calling macro terminated by the first + occurrence of ~ . If the parameter is \done@, then processing is + complete, and \parse@ is assigned the current meaning of \f@, which + is \relax if \parseline@ was called from \tableformat, or \endrow@ + if \parseline@ was called from \tablerow. + + If processing is not done, \p@ss is assigned the meaning of + \parsecol@, and then \p@ss is invoked and its parameter is + that part (sub-section) of the parameter to \parseline@ up to the + first occurrence of |. \done@ is an end of processing indicator. + \parse@ is invoked and, depending on its current assigned meaning, + either terminates processing of this \tableformat or \tablerow + parameter, or takes the next section of the parameter of the + \tableformat or \tablerow terminated by ~ as its parameter. + +NOTE 86: \parsecol@#1 is called by \parseline@ and has as its parameter that + part (sub-section) of the parameter to \parseline@ up to the next + occurrence of |. It defines the macro \parsemode@: if we are on + the last column, then the currently assigned value of \w@ (\tform@ + or \ibar@, depending on whether a \tableformat or a \tablerow is + being processed) is invoked, and \p@ss becomes \lastp@ss; if we are + not on the last column, then \b@ (which is either \tform@ or + \vbar@) is invoked; in either case, \p@ss is called again and will + either terminate processing or get the next section to be + processed. + + +NOTE 87: \span@#1#2 sets a box spanning the required number of columns and + containing the text in the parameter. \hsize and \z@ are set to + the width and alignment specifications respectively of the first + column spanned. The pointers are then incremented once for each + column spanned, and the width of each column plus the width of a + vertical bar is added to the \hsize for each column spanned. The + first parameter is the integer following \span, and the second is + the remainder of the column contents. + +<<SECTION AND HEADING MACROS>> + +NOTE 88: These macros are used for head or section level control. + + \basehead is the zero pointer value for the four pointers + to the head counters. The head counters count the number of + current headings at each heading level. + + \headlevel keeps track of the level of the current heading. + + To add a fifth level, do the following: + (1) Change the "\advance\count10by4" command to + "\advance\count10by5". This allocates + the counters for the level number. + + (2) Change "\ifnum\hdlevel<4 " to "\ifnum\hdlevel<5 + in the \sethead@ macro. + + (3) Allocate a new token register, \fifthlevelhead, and + define a corresponding \headE@ + (e.g., \def\headE@{\head5\the\fifthlevelhead}). + + (4) Modify the \level macro so that it includes \headE@. + + (5) Load \fifthlevelhead with some appropriate tokens. + +NOTE 89: \setlevelno#1 has one parameter: the levelnumber to be established. + This can be up to 4 numbers, separated by periods. The level number + and the pointer to the head counters are initialized. + + .-1. is appended to the parameter to act as an end of parameter + signal. + +NOTE 90: \sethead@#1. has as its parameter one of the numbers in the + parameter to \setlevelno. The first number it receives is put into + the head counter for the first level. The second number goes into + the head counter for the second level, etc. Processing is + completed when -1 is received as a parameter, or when 4 levels have + been done. + +NOTE 91: \head#1 is called indirectly by \level via \headA@, or \headB@, + etc. It oversees adjusting the \levelno according to the level of + the new heading. Its parameter is the level of the new + heading. + + If the new heading is on a level inferior to the current heading, + \uplevel@ is called, otherwise \headlevel is set to the level of + the new heading and that head counter for that level is incremented. + + \head@ is called to update \levelno. + +NOTE 92: \uplevel@#1 does what is necessary to add a level that has a higher + number than the current level. #1 is the level of the new heading. + +NOTE 93: \head@ defines \levelno. + +NOTE 94: These allocate token registers for each level description, and + define a corresponding \headA@ (or \headB@ etc.) that calls \head + with the appropriate parameter, and accesses the tokens for that + headlevel. + +NOTE 95: \level#1#2 takes two parameters: #1 is the level of the heading, + and #2 becomes the definition of \title. A case statement is + used to invoke the appropriate choice of \headA@, \headB@, etc. + +<<CONTENTS FILE MACROS>> + +NOTE 96: "\content@" can now be written with \write + +NOTE 97: \ctswrite#1 writes its parameter into a file along with the current + page number. If the file does not already exist, one is created. + When the file is read at a later time, @ will not be a character. + \_ is redefined so that it can be read from the contents file. + \content@ is defined with @ no longer a character so that it can be + read from the contents file. + + +NOTE 98: \contents adds the table of contents if a contents file was + created. + +<<FOOTNOTES AND INSERTIONS>> + +NOTE 99: The \vfootnote#1 of PLAIN has been modified to accommodate + multi-column format by the insertion of \realhsize to restore the + original \hsize and by adding 1\baselineskip to remove any glue + from \baselineskip. + +NOTE 100: \note generates footnotes with sequential numbers. + +NOTE 101: \midinsert has been changed from the definition in PLAIN by + the insertion of \p@gefalse. + +NOTE 102: \@ins has been changed from the definition in PLAIN by adding a + return to the normal \hsize and \vsize. + +NOTE 103: The \endinsert of PLAIN has been modified. The "room left on page" + calculation has been expanded to handle multi-column format: if + there is room, the columns are balanced and the insertion is + appended. The penalty (first item in the \insert) is set to -100 if + the insertion cannot fit on the current page, this keeps the page + from stretching if the insertion can't fit on the page. + +<<COLUMN MACROS>> + +NOTE 104: The column macros and output routines are interrelated. Every time + the number of columns changes, a false output routine is invoked. + This routine takes the current page (and splits it up if necessary) + and appends it to the contrib box. The \hsize is then reduced (or + restored) and the \vsize is multiplied (or restored). Then, to + every insert which was not void during the false output routine a + null insert is made. This restores the page goal (in case there are + no bona fide insertions, one insertion is always made, it is called + \hacker@). A new page total is then calculated from the height of + the contrib box. The two macros employed to do this work are + \balance@ and \newtotal@. Under no circumstances should the one be + used without the other. + +NOTE 105: \balance invokes the false output routine which has the effect of + balancing the columns if in multi-column mode. The page goal is + then updated by \newtotal@. + +NOTE 106: \balance@ invokes the false output routine by setting \ifreal@ to + false, and forcing an eject. + +NOTE 107: \newtotal@ restores the page total. + +NOTE 108: \multicol@#1 is called by the \BEGIN command for multi-column + format. It takes as its only parameter the number of columns + requested. It provides error checking and ignores the command + if already in multi-column mode. If the command is legal, then + the current page is balanced, and the \hsize and \vsize are + adjusted. The insertion registers are modified, the page total + is adjusted, and stretch is added to \baselineskip. + +<<OUTPUT ROUTINES>> + +NOTE 109: The output routines are complex. It is recommended that anyone + wanting to understand how they work examine the LOG file of a + short file with \tracingmacros=1 and \tracingcommands=2. + + There are two types of output routines: \realoutput@ produces a + \shipout and \fakeoutput@ does not. + + The \toks registers associated with each insert are now reserved + (as were \dimen, \skip and \count). Any tokens in these registers + will be destroyed when the \output routine is active. + +NOTE 110: \realoutput puts the current page into \out@. If currently in one- + column mode, it goes in directly, otherwise the current page is + first split into columns. Box 255 is then set to \contrb@ with + \old@ appended to it. The glue for insertions, \hsize, \vsize, + \leftskip, and \rightskip are returned to normal for the \shipout. + After the \shipout, the flags and counters are updated for the + logical page macros. + + +NOTE 111: \fakeoutput takes the current page, balances it if necessary, and + puts it into \out@. \out@ is then appended to \contrb@. + + If any column must be shorter due to balancing, it ought to be the + rightmost. The \vsplit primitive, however, will usually make the + rightmost column longer. To avoid this problem, columns are split a + little more than 1/2 or 1/3 down. Experimentation shows that adding + 1.16667 baselines to the total height for 2 columns, and adding 2 + baselines to the total height for 3 columns affords the greatest + probability of an aesthetic break. + +NOTE 112: The "@" is no longer a letter. diff --git a/obsolete/macros/hptex/hptex.tex b/obsolete/macros/hptex/hptex.tex new file mode 100644 index 0000000000..3a3c21f6db --- /dev/null +++ b/obsolete/macros/hptex/hptex.tex @@ -0,0 +1,836 @@ +% This is the HP TeX text format version A.00.00 as of Feb. 14, 1984. +% It is compatible with the plain TeX format that's described in The TeXbook. +% +% Copyright 1984 Hewlett-Packard Co. +% +% NOTE 1, NOTE 2, etc. refer to notes in the file HPTEX.DOC +% + +\input PLAIN.TEXT % NOTE 1 + +\message{Preloading the HP TeX codes,} + +% SPECIAL CATCODES +% +\catcode`@=11 % NOTE 2 + +% HPTEX +% +\def\HPTEX{HP\nobreak\ \TeX} +\let\HpTeX=\HPTEX +\def\fmtname{HP TeX}\def\fmtversion{A.00.00} + +% LEADERS +% +\def\dotfil{\tenrm\leaders\hbox to8\p@{\hss.\hss}\hss} % NOTE 3 + +% CONSTANT VALUES +% +\chardef\zer@=0 +\chardef\f@ur=4 +\skipdef\skip@ii=2 +\maxdepth=2pt + +\message{fonts,} + +% FONTS % NOTE 4 +% +\let\fontcheck=1 % NOTE 5 +\def\fontdef#1=#2 {\def#1{\font@{#1}{#2}}} % NOTE 6 +\def\font@#1#2{{\let\fontcheck=0\ifx0\fontcheck\egroup\global\font#1=#2#1% + \else}\string#1 \fi}%--The space after \string#1 is necessary. + +% ROMAN TEXT +% +\fontdef\twentyfourrm={amr10 scaled \magstep5} +\fontdef\eighteenrm={amr10 scaled \magstep3} +\fontdef\fourteenrm={amr10 scaled \magstep2} +\font\twelverm=amr10 scaled \magstep1 +%\font\tenrm=amr10 +\font\ninerm=amr9 +\font\eightrm=amr8 +%\font\sevenrm=amr7 +\font\sixrm=amr6 +%\font\fiverm=amr5 + +% MATH ITALIC +% +\fontdef\twentyfouri={ammi10 scaled \magstep5} +\fontdef\eighteeni={ammi10 scaled \magstep3} +\fontdef\fourteeni={ammi10 scaled \magstep2} +\fontdef\twelvei={ammi10 scaled \magstep1} +%\font\teni=ammi10 +\fontdef\ninei={ammi9} +\fontdef\eighti={ammi8} +%\font\seveni=ammi7 +\fontdef\sixi={ammi6} +%\font\fivei=ammi5 + +% MATH SYMBOLS +% +\fontdef\twentyfoursy={amsy10 scaled \magstep5} +\fontdef\eighteensy={amsy10 scaled \magstep3} +\fontdef\fourteensy={amsy10 scaled \magstep2} +\fontdef\twelvesy={amsy10 scaled \magstep1} +%\font\tensy=amsy10 +\fontdef\ninesy={amsy9} +\fontdef\eightsy={amsy8} +%\font\sevensy=amsy7 +\fontdef\sixsy={amsy6} +%\font\fivesy=amsy5 + +% BOLD MATH SYMBOLS +% +\fontdef\tenbfsy={ambsy10} + +% MATH EXTENSION +% +%\font\tenex=amex10 + +% SANS SERIF +% +\fontdef\fourteenss={amss10 scaled \magstep2} +\fontdef\twelvess={amss10 scaled \magstep1} +\font\tenss=amss10 +\font\eightss=amssq8 + +% SANS SERIF ITALIC +% +\font\tenitss=amssi10 +\font\eightitss=amssqi8 + +% BOLDFACE EXTENDED +% +\fontdef\twentyfourbf={ambx10 scaled \magstep5} +\fontdef\eighteenbf={ambx10 scaled \magstep3} +\fontdef\fourteenbf={ambx10 scaled \magstep2} +\font\twelvebf=ambx10 scaled \magstep1 +%\font\tenbf=ambx10 +\font\ninebf=ambx9 +\font\eightbf=ambx8 +%\font\sevenbf=ambx7 +\font\sixbf=ambx6 +%\font\fivebf=ambx5 + +% TYPEWRITER +% +\fontdef\twentyfourtt={amtt10 scaled \magstep5} +\fontdef\eighteentt={amtt10 scaled \magstep3} +\fontdef\fourteentt={amtt10 scaled \magstep2} +\fontdef\twelvett={amtt10 scaled \magstep1} +%\font\tentt=amtt10 +\font\ninett=amtt9 +\font\eighttt=amtt8 + +% SLANTED TYPEWRITER +% +\font\tensltt=amsltt10 + +% SLANTED ROMAN +% +\fontdef\twentyfoursl={amsl10 scaled \magstep5} +\fontdef\eighteensl={amsl10 scaled \magstep3} +\fontdef\fourteensl={amsl10 scaled \magstep2} +\fontdef\twelvesl={amsl10 scaled \magstep1} +%\font\tensl=amsl10 +\font\ninesl=amsl9 +\font\eightsl=amsl8 + +% TEXT ITALIC +% +\fontdef\twentyfourit={amti10 scaled \magstep5} +\fontdef\eighteenit={amti10 scaled \magstep3} +\fontdef\fourteenit={amti10 scaled \magstep2} +\fontdef\twelveit={amti10 scaled \magstep1} +%\font\tenit=amti10 +\font\nineit=amti9 +\font\eightit=amti8 +\fontdef\sevenit={amti7} + +% UNSLANTED TEXT ITALIC +% +\font\tenuit=amu10 + + +% CAPS AND SMALL CAPS +% +\font\tencsc=amcsc10 + +% SANS SERIF BOLD EXTENDED +% +\font\tenbfss=amssbx10 + + +% BOLD EXTENDED SLANTED +% +\font\tenslbf=ambxsl10 + + +% DUNHILL STYLE +% +\font\tendh=amdunh10 + +% FOR TITLES +% +\font\titlefont=amr7 scaled \magstep4 + + +% BIG FONT +% +\font\bigfont=amssbx10 scaled \magstep2 + + +\message{macros,} + +% MACROS TO SET FSTYLE % NOTE 7 +% +\def\rm{\fam\z@\def\fstyle{rm}\setfont} +\def\it{\fam\itfam\def\fstyle{it}\setfont} +\def\bf{\fam\bffam\def\fstyle{bf}\setfont\ifmmode{\tenbfsy}% + \textfont2=\tenbfsy\fi} +\def\sl{\fam\slfam\def\fstyle{sl}\setfont} +\def\sa{\def\fstyle{ss}\setfont} +\def\tt{\fam\ttfam\def\fstyle{tt}\setfont} + +\newfam\ssfam + +% MACROS TO SET FSIZE % NOTE 8 +% +\def\fivepoint{\def\fsize{five}\setfont\let\sfont=\fivepoint% + \baselineskip7pt% + \setbox\strutbox=\hbox{\vrule height4.5pt depth1.5pt width0pt}% + \textfont0=\fiverm \scriptfont0=\fiverm% + \scriptscriptfont0=\fiverm% + \textfont1=\fivei \scriptfont1=\fivei% + \scriptscriptfont1=\fivei% + \textfont2=\fivesy \scriptfont2=\fivesy% + \scriptscriptfont2=\fivesy} + +\def\sixpoint{\def\fsize{six}\setfont\let\sfont=\fivepoint% + \baselineskip8pt% + \setbox\strutbox=\hbox{\vrule height5pt depth2pt width0pt}% + \textfont0=\sixrm \scriptfont0=\fiverm% + \scriptscriptfont0=\fiverm% + \scriptfont1=\fivei \scriptscriptfont1=\fivei% + \scriptfont2=\fivesy \scriptscriptfont2=\fivesy% + \def\changes{{\sixi\sixsy}% + \textfont1=\sixi \textfont2=\sixsy}% + \ifmmode\changes\else\everymath{\changes}% + \everydisplay{\changes}\fi} + +\def\sevenpoint{\def\fsize{seven}\setfont\let\sfont=\fivepoint% + \baselineskip9pt% + \setbox\strutbox=\hbox{\vrule height6pt depth2pt width0pt}% + \textfont0=\sevenrm \scriptfont0=\sixrm% + \scriptscriptfont0=\fiverm% + \textfont1=\seveni \scriptscriptfont1=\fivei% + \textfont2=\sevensy \scriptscriptfont2=\fivesy% + \def\changes{{\sixi\sixsy}% + \scriptfont1=\sixi% + \scriptfont2=\sixsy}% + \ifmmode\changes\else\everymath{\changes}% + \everydisplay{\changes}\fi} + +\def\eightpoint{\def\fsize{eight}\setfont\let\sfont=\sixpoint% + \baselineskip9pt% + \setbox\strutbox=\hbox{\vrule height7pt depth2pt width0pt}% + \textfont0=\eightrm \scriptfont0=\sixrm% + \scriptscriptfont0=\fiverm% + \scriptscriptfont1=\fivei% + \scriptscriptfont2=\fivesy% + \def\changes{{\eighti\sixi\eightsy\sixsy}% + \textfont1=\eighti \scriptfont1=\sixi% + \textfont2=\eightsy \scriptfont2=\sixsy}% + \ifmmode\changes\else\everymath{\changes}% + \everydisplay{\changes}\fi} + +\def\ninepoint{\def\fsize{nine}\setfont\let\sfont=\sixpoint% + \baselineskip11pt% + \setbox\strutbox=\hbox{\vrule height8pt depth3pt width0pt}% + \textfont0=\ninerm \scriptfont0=\sevenrm% + \scriptscriptfont0\fiverm% + \scriptfont1=\seveni \scriptscriptfont1\fivei% + \scriptfont2=\sevensy \scriptscriptfont2\fivesy% + \def\changes{{\ninei\ninesy}% + \textfont1=\ninei% + \textfont2=\ninesy}% + \ifmmode\changes\else\everymath{\changes}% + \everydisplay{\changes}\fi} + +\def\tenpoint{\def\fsize{ten}\setfont\let\sfont=\sevenpoint% + \baselineskip12pt% + \setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width0pt}% + \textfont0=\tenrm \scriptfont0=\sevenrm% + \scriptscriptfont0\fiverm% + \textfont1=\teni \scriptfont1=\seveni% + \scriptscriptfont1\fivei% + \textfont2=\tensy \scriptfont2=\sevensy% + \scriptscriptfont2\fivesy} + +\def\twelvepoint{\def\fsize{twelve}\setfont\let\sfont=\eightpoint% + \baselineskip14pt% + \setbox\strutbox=\hbox{\vrule height10pt depth4pt width0pt}% + \textfont0=\twelverm \scriptfont0=\ninerm% + \scriptscriptfont0=\sevenrm% + \scriptscriptfont1=\seveni% + \scriptscriptfont2=\sevensy% + \def\changes{{\twelvei\ninei\twelvesy\ninesy}% + \textfont1=\twelvei \scriptfont1=\ninei% + \textfont2=\twelvesy \scriptfont2=\ninesy}% + \ifmmode\changes\else\everymath{\changes}% + \everydisplay{\changes}\fi} +\def\fourteenpoint{\def\fsize{fourteen}\setfont\let\sfont=\tenpoint% + \baselineskip16pt% + \setbox\strutbox=\hbox{\vrule height12pt depth4pt width0pt}% + \scriptfont0=\tenrm \scriptscriptfont0=\sevenrm% + \scriptfont1=\teni \scriptscriptfont1=\seveni% + \scriptfont2=\tensy \scriptscriptfont2=\sevensy% + \def\changes{{\fourteeni\fourteenrm\fourteensy}% + \textfont0=\fourteenrm% + \textfont1=\fourteeni% + \textfont2=\fourteensy}% + \ifmmode\changes\else\everymath{\changes}\everydisplay{\changes}\fi} + +\def\eighteenpoint{\def\fsize{eighteen}\setfont\let\sfont=\tenpoint% + \baselineskip18pt% + \setbox\strutbox=\hbox{\vrule height15pt depth3pt width0pt}% + \scriptfont0=\twelverm \scriptscriptfont0=\tenrm% + \scriptscriptfont1=\teni% + \scriptscriptfont2=\tensy% + \def\changes{{\eighteenrm\eighteeni\twelvei\eighteensy\twelvesy}% + \textfont0=\eighteenrm% + \textfont1=\eighteeni \scriptfont1=\twelvei% + \textfont2=\eighteensy \scriptfont2=\twelvesy}% + \ifmmode\changes\else\everymath{\changes}% + \everydisplay{\changes}\fi} +\def\twentyfourpoint{\def\fsize{twentyfour}\setfont\let\sfont=\tenpoint% + \baselineskip24pt% + \setbox\strutbox=\hbox{\vrule height21.5pt depth2.5pt width0pt}% + \def\changes{{\twentyfourrm\eighteenrm\fourteenrm\twentyfouri% + \eighteeni\fourteeni\twentyfoursy\eighteensy\fourteensy}% + \textfont0=\twentyfourrm \scriptfont0=\eighteenrm % + \scriptscriptfont0=\fourteenrm% + \textfont1=\twentyfouri \scriptfont1=\eighteeni% + \scriptscriptfont1=\fourteeni% + \textfont2=\twentyfoursy \scriptfont2=\eighteensy% + \scriptscriptfont2=\fourteensy}% + \ifmmode\changes\else\everymath{\changes}\everydisplay{\changes}\fi} + +% MACROS TO SET CURRENT FONT USING FSTYLE AND FSIZE +% +\newif\ifnofont@ +\def\tryfont#1{\expandafter\ifx\csname#1\endcsname\relax\nofont@true % NOTE 9 + \else\nofont@false\csname#1\endcsname\fi} +\def\setfont{\tryfont{\ffam\fsize\fstyle}% % NOTE 10 + \ifnofont@\tryfont{\ffam\fsize rm}% + \ifnofont@\tryfont{\ffam tenrm}% + \ifnofont@\tenrm\fi\fi\expandafter + \fonterr\csname\ffam\fsize\fstyle\endcsname{\the\font}\fi} +\def\fonterr#1#2{\immediate\write\m@ne{! font #1is undefined, + I'm using #2instead.}\xdef#1{#2}} + +% DEFAULTS % NOTE 11 +% +\fam\z@\tenrm\def\ffam{}\def\fstyle{rm}\def\fsize{ten}\let\sfont=\sevenpoint + +% LINE MACROS % NOTE 12 +% +\def\lline#1{\hbox to\hsize{\hskip\leftskip#1\hskip\rightskip}} +\def\leftline#1{\lline{#1\hss}} +\def\rightline#1{\lline{\hss#1}} +\def\centerline#1{\lline{\hss#1\hss}} + +% MORE MACROS +% +\def\narrow#1{\advance\leftskip#1\advance\rightskip#1} +\def\narrower{\narrow\parindent} % NOTE 13 +\def\narrow@{\narrow\inset} +\def\inc#1{\advance#1\@ne} +\def\dec#1{\advance#1\m@ne} +\def\ignore#1{\relax} +\def\okbreak{\par\penalty-200} +\def\need{\afterassignment\need@\dimen@} % NOTE 14 +\def\need@{\vskip\dimen@ minus\dimen@\okbreak\vskip-\dimen@ minus-\dimen@} +\def\for#1=#2to#3do#4{#1=#2\ifnum#2>#3\else\let\next@=\fnext@ % NOTE 15 + \def\fcount@{#1}\def\fexit@{#3}\def\floop@{#4}\next@\fi} +\def\fnext@{\floop@\ifnum\fcount@<\fexit@\inc\fcount@ % NOTE 16 + \else\let\next@=\relax\fi\next@} +\def\super#1{\/\raise.4em\hbox{\sfont#1}\thinspace} +\def\sub#1{\lower.25em\hbox{\sfont#1}\thinspace} +\def\lbreak{\hfill\break} +\def\uline#1{\setbox0=\hbox{#1}\dimen@=-\dp0\advance\dimen@ .23em % NOTE 17 + \ifvmode\indent\fi\hbox to \wd0{\lower.27em + \vbox{\box0\vskip\dimen@\hrule height.04em}}} + +% START AND FINISH GROUP STRUCTURE % NOTE 18 +% +\def\start#1{\errfalse\ifinvalid@{#1}\else\begingroup % NOTE 19 + \def\blockname@{#1}\csname BEGIN#1\endcsname\fi\Error} +\def\finish#1{\errfalse\ifinvalid@{#1}\else\matchup@{#1}\fi\Error} % NOTE 20 +\def\ifinvalid@#1{\expandafter\ifx\csname BEGIN#1\endcsname\relax % NOTE 21 + \errset{I don't understand {#1}, it may be misspelled}} +\def\matchup@#1{\def\test@{#1}% % NOTE 22 + \expandafter\ifx\csname blockname@\endcsname\relax + \errset{Extra \string\finish{\test@} ignored}% + \else\ifx\test@\blockname@\done + \else\errset{Missing \string\finish{\blockname@} inserted}% + \done\matchup@{#1}\fi\fi} +\def\done{\csname END\blockname@\endcsname\endgroup} % NOTE 23 + +% GENERAL ERROR HANDLING % NOTE 24 +% +\def\errfalse{\global\let\iferr=\iffalse} +\def\errtrue{\global\let\iferr=\iftrue} +\def\errset#1{\iferr\immediate\write0{! \error}\else\errtrue\fi\xdef\error{#1}} +\def\Error{\iferr\errmessage{\error}\fi} + +% DATE AND TIME MACROS +% +\newcount\cntA@\newcount\cntB@\newcount\cntC@ +\def\mon{\ifcase\month\relax\or January\or February\or March\or % NOTE 25 + April\or May\or June\or July\or August\or September\or October\or + November\or December\fi} +\def\date{\mon\nobreak\ \number\day, \number\year} % NOTE 26 +\def\hour{{\cntA@=\time \cntB@=\cntA@ % NOTE 27 + \divide\cntA@60 \cntC@=\cntA@ \multiply\cntC@60 + \advance\cntB@-\cntC@\ifnum\cntA@>11 + \advance\cntA@-12 \def\time@{PM}\else\def\time@{AM}\fi + \ifnum\cntA@=0 \cntA@=12 \fi\number\cntA@ + :\ifnum\cntB@<10 0\fi\number\cntB@\nobreak\ \time@}} + +% INDENTSTYLE +% +\newdimen\indentsize\indentsize=20pt +\newif\ifindent\indenttrue % NOTE 28 +\def\indentstyle{\parindent\indentsize % NOTE 29 + \ifindent\else\indenttrue\advance\parskip-5\p@\fi} +\def\noindentstyle{\parindent\z@ % NOTE 30 + \ifindent\indentfalse\advance\parskip5\p@\fi} +\def\indentspace{\afterassignment\indent@\indentsize} % NOTE 31 +\def\indent@{\ifindent\parindent\indentsize\fi} +\newdimen\inset +\inset.5in +\def\BEGINindent{\advance\leftskip \inset} +\let\ENDindent=\par + +% RAGGED MARGIN AND JUSTIFIED MARGIN MACROS +% +\def\fixmargin@{\dimen@=\rightskip\rightskip=\dimen@} % NOTE 32 +\def\justify{\fixmargin@\spaceskip\z@\xspaceskip\z@} % NOTE 33 +\def\raggedright{\fixmargin@\advance\rightskip\z@ plus2em % NOTE 34 + \ifx\fstyle\tt@\else\spaceskip.3333em\xspaceskip.5em\fi} +\def\tt@{tt} % NOTE 35 + +% ITEM AND SUBITEM MACROS +% +\newcount\icount@\newcount\scount@ +\newcount\idigit@\newcount\sdigit@ +\def\itemset@#1#2#3{\dimen@=\hsize \advance\dimen@-#2\inset % NOTE 36 + \parshape=\@ne#1\inset\dimen@\noindent + \hbox to\z@{\hss#3\enspace}\ignorespaces} +\def\itemlist#1{\medskip\resetsubitems\itemset@\@ne\tw@{#1}} % NOTE 37 +\def\subitem#1{\smallskip\itemset@\tw@\f@ur{#1}} % NOTE 38 +\def\itempar{\smallskip\itemset@\@ne\tw@\empty} % NOTE 39 +\def\subitempar{\subitem\empty} % NOTE 40 +\def\enditems{\bigskip\resetitems} + +% ITEMTAG AND SUBITEMTAG MACROS % NOTE 41 +% +\def\square{\hbox{\hskip.5pt\vrule height.4em width.4em depth 0em}} +\def\dott{$\bullet$} +\def\emdash{---} +\def\itemn@#1{\number#1\global\inc#1} % NOTE 42 +\def\itemr@#1{\romannumeral#1\global\inc#1} % NOTE 43 +\def\itemR@#1{\uppercase\expandafter{\romannumeral#1}\global\inc#1} % NOTE 44 +\def\iteml@#1#2{{\loop\char#1\ifnum#2>\@ne\dec#2\repeat}\global\inc#1%% NOTE 45 + \ifnum#1>122 \global#1=97 \global\inc#2\fi \ifnum#1=91 \global#1=65 + \global\inc#2\fi} + \def\item@ #1,#2,#3{\def\itemtag{#3}% % NOTE 46 + \def\resetitems{\global\icount@=#1\global\idigit@=#2}\resetitems} +\outer\def\numbereditems{\item@ 1,0,{\itemn@\icount@}} +\outer\def\lettereditems{\item@ 97,1,{\iteml@\icount@\idigit@}} +\outer\def\Lettereditems{\item@ 65,1,{\iteml@\icount@\idigit@}} +\outer\def\romanitems{\item@ 1,0,{\itemr@\icount@}} +\outer\def\Romanitems{\item@ 1,0,{\itemR@\icount@}} +\outer\def\squareditems{\let\itemtag=\square\let\resetitems=\relax} +\outer\def\dotteditems{\let\itemtag=\dott\let\resetitems=\relax} +\outer\def\dasheditems{\let\itemtag=\emdash\let\resetitems=\relax} +\def\itm{\itemlist{\tenrm\itemtag\ifx\relax\resetitems\else.\fi}} % NOTE 47 + +\def\subitem@ #1,#2,#3{\def\subitemtag{#3}% % NOTE 48 + \def\resetsubitems{\global\scount@=#1\global\sdigit@=#2}\resetsubitems} +\outer\def\numberedsubitems{\subitem@ 1,0,{\itemn@\scount@}} +\outer\def\letteredsubitems{\subitem@ 97,1,{\iteml@\scount@\sdigit@}} +\outer\def\Letteredsubitems{\subitem@ 65,1,{\iteml@\scount@\sdigit@}} +\outer\def\romansubitems{\subitem@ 1,0,{\itemr@\scount@}} +\outer\def\Romansubitems{\subitem@ 1,0,{\itemR@\scount@}} +\outer\def\squaredsubitems{\let\subitemtag=\square\let\resetsubitems=\relax} +\outer\def\dottedsubitems{\let\subitemtag=\dott\let\resetsubitems=\relax} +\outer\def\dashedsubitems{\let\subitemtag=\emdash\let\resetsubitems=\relax} +\def\sitm{\subitem{\tenrm\subitemtag\ifx\relax\resetsubitems\else.\fi}} + % NOTE 49 +\numbereditems\letteredsubitems % NOTE 50 + +% NOTE AND WARNING MACROS +% +\def\BEGINnote{\bigskip\narrow@\narrow@\nobreak} % NOTE 51 +\let\ENDnote=\bigskip +\def\BEGINwarning{\bigskip\nobreak\narrow@\narrow@\marginrule.02667in % NOTE 52 + \nobreak\medskip\nobreak} +\def\ENDwarning{\nobreak\medskip\nobreak\marginrule.02667in \bigskip} +\def\marginrule#1 {\nointerlineskip\vbox to#1{\vss % NOTE 53 + \lline{\leaders\hrule height#1\hss}}} + + +% VERBATIM MODE % NOTE 54 +% +\newskip\blanksize@ +\bgroup\catcode`\*=3 \catcode`\$=13 \catcode`\#=13 + \catcode`\^=13 \catcode`\_=13 \catcode`\|=13 \catcode`\~=13 +\gdef\BEGINverbatim{\parskip=0pt plus1pt + \catcode`\$=13 \def${\indent\hbox to \the\fontdimen\tw@\the\font + {\hss\$\hss}} + \catcode`\&=12 + \catcode`\#=13 \def#{\indent\hbox to \the\fontdimen\tw@\the\font + {\hss*\#*\hss}} + \catcode`\^=13 \def^{\indent\hbox to \the\fontdimen\tw@\the\font + {\hss*\mathchar"327D*\hss}} + \catcode`\_=13 \def_{\indent\hbox to \the\fontdimen\tw@\the\font + {\hss\_\hss}} + \catcode`\%=12 + \catcode`\|=13 \def|{\indent\hbox to \the\fontdimen\tw@\the\font + {\hss*\mathchar"326A*\hss}} + \catcode`\~=13 \def~{\indent\hbox to \the\fontdimen\tw@\the\font + {\hss*\mathchar"3218*\hss}} + \parindent\z@\lumplines\lumpspaces} +\egroup + +% LUMPLINE AND LUMPSPACE MACROS % NOTE 55 +% +{\catcode`\^^M=13 \gdef\lumplines{\catcode`\^^M=13 \let^^M=\lumpline@}} +\def\lumpline@{\par\skip@=\z@\let\munch@=\lumpB@\futurelet\lump@\lumpA@} +\def\lumpA@{\ifx\lumpline@\lump@\advance\skip@\baselineskip + \else\let\munch@=\relax\vskip\skip@\fi\munch@} +\def\lumpB@#1{\futurelet\lump@\lumpA@} +{\catcode`\ =13 \gdef\lumpspaces{\catcode`\ =13\relax\let =\lumpspace@}} +\def\lumpspace@{\blanksize@=\the\fontdimen\tw@\the\font + \skip@=\z@\let\munch@=\lumpb@\futurelet\lump@\lumpa@} +\def\lumpa@{\advance\skip@\blanksize@\ifx\lumpspace@\lump@ + \else\let\munch@=\relax\hskip\skip@\fi\munch@} +\def\lumpb@#1{\futurelet\lump@\lumpa@} +\let\munch@=\relax + +% PAGE CONTROL MACROS % NOTE 56 +% +\def\newpage{\balance\ifold@\null\vfill\eject\fi} +\def\evenpage{\newpage\ifodd\pageno\null\vfill\eject\fi} +\def\oddpage{\newpage\ifodd\pageno\else\null\vfill\eject\fi} + +% HEADING AND FOOTING MACROS % NOTE 57 +% +\newtoks\leftheading \newtoks\leftfooting +\newtoks\rightheading \newtoks\rightfooting +\newtoks\centerheading \newtoks\centerfooting +\newtoks\insideheading \newtoks\insidefooting +\newtoks\outsideheading \newtoks\outsidefooting +\newtoks\headline \newtoks\footline +\def\buildline{\let\lft=\zer@\let\rght=\@ne % NOTE 58 + \ifdim\wd3=\z@\else\ifodd\pageno\let\lft=\thr@@\else\let\rght=\thr@@\fi\fi + \ifdim\wd4=\z@\else\ifodd\pageno\let\rght=\f@ur\else\let\lft=\f@ur\fi\fi + \triplehead\lft\tw@\rght} +\def\triplehead#1#2#3{\skip@=1em\skip@ii=1em % NOTE 59 + \dimen@=\wd#1\advance\dimen@-\wd#3% + \ifdim\dimen@>\z@\advance\skip@ii\dimen@ minus\dimen@ + \else\advance\skip@-\dimen@ minus-\dimen@\fi + {\box#1\hskip\skip@\hfil\box#2\hfil\hskip\skip@ii\box#3}} +\def\loadbox#1#2{\setbox#1=\hbox{\the#2}} % NOTE 60 +\newcount\headcount\newcount\footcount +\def\suspendheading#1{\global\headcount=#1} +\def\suspendfooting#1{\global\footcount=#1} +\def\noheading{\suspendheading\m@ne} +\def\nofooting{\suspendfooting\m@ne} +\def\resumeheading{\suspendheading\zer@} +\def\resumefooting{\suspendfooting\zer@} +\headline{\ifnum\headcount=\z@\loadbox\tw@\centerheading % NOTE 61 + \loadbox\zer@\leftheading\loadbox\@ne\rightheading + \loadbox\thr@@\insideheading\loadbox\f@ur\outsideheading\buildline + \else\hfil\ifnum\headcount>\z@\global\dec\headcount\fi\fi} +\footline{\ifnum\footcount=\z@\loadbox\tw@\centerfooting % NOTE 62 + \loadbox\zer@\leftfooting\loadbox\@ne\rightfooting + \loadbox\thr@@\insidefooting\loadbox\f@ur\outsidefooting\buildline + \else\hfil\ifnum\footcount>\z@\global\dec\footcount\fi\fi} +\resumeheading +\resumefooting +% footline is normally a centered page number in font \tenrm +\centerfooting{\tenrm\folio} + +% BOX MACROS +% +\newdimen\boxline +\newdimen\boxspace +\boxline .01332in +\boxspace 5pt +\newdimen\depthbox@ +\def\boxit#1{\hbox{\vrule width\boxline % NOTE 63 + \vbox{\hrule height\boxline\kern\boxspace + \hbox{\kern\boxspace + \vbox{\halign{\hfil##\hfil\cr\strut#1\strut\cr}}% + \kern\boxspace}% + \kern\boxspace\hrule height\boxline}% + \vrule width\boxline}} +\def\centerbox#1{\vskip\abovedisplayskip % NOTE 64 + \centerline{\boxit{#1}}% + \vskip\belowdisplayskip} +\def\textbox#1{\depthbox@=\dp\strutbox\advance\depthbox@ by .4\p@ % NOTE 65 + \ifvmode\indent\fi\setbox\z@\hbox{\vrule + \vbox{\hrule\hbox{\kern\p@#1\strut\kern\p@}\hrule}% + \vrule}\lower\depthbox@\box\z@} + +% HP2680A and HP2688A COPY CONTROL MACROS % NOTE 66 +% +\newcount\oldcopy\newcount\copycnt +\def\copy@{\globalspecial{HP2688A,HP2680A COPIES \number\copycnt}} +\def\selectcopycount{\afterassignment\copy@\copycnt} +\def\copieson{\global\count\copycnt=\oldcopy\copy@} +\def\copiesoff{\global\count\copycnt=1 \copy@} +\def\copies{\afterassignment\copieson\global\oldcopy} +\copycnt=1 +\oldcopy=2 + +% HP2680A and HP2688A LOGICAL PAGE CONTROL (LPC) MACROS % NOTE 67 +% +\def\lplist#1{\globalspecial{HP2688A,HP2680A ILP #1}} +\def\lpdef#1{\globalspecial{HP2688A,HP2680A LP #1}} +\newif\ifempty@\empty@true +\newcount\lpcount@\newcount\nextlp@ +\def\selectlpcounter#1{\lpcount@#1 \setlpcount@{\the\lpcount@}} +\def\setlpcount@#1{\globalspecial{HP2688A,HP2680A ELP #1}} +\def\lpageto{\eject\afterassignment\lpeject@\nextlp@} +\def\ppageto{\eject\afterassignment\lpage@\nextlp@} +\def\lpeject@{\nextlp@=-\nextlp@\lpage@} +\def\lpresume{\eject\nextlp@=\z@\lpage@} +\def\lpreset{\eject\nextlp@=33 \lpage@ \nextlp@=\z@} +\def\lpexit{\eject\nextlp@=34 \lpage@ \nextlp@=\z@} +\def\lpage@{\ifempty@\count\lpcount@=\nextlp@\global\empty@false\fi} +\everyjob{\message{Using HP TeX Version \fmtversion}\selectlpcounter2 {}} + +% TABLE MACROS % NOTE 68 +% +\newcount\maxcol@ +\newbox\topstrutbox \def\topstrut{\unhcopy\topstrutbox} +\setbox\topstrutbox=\hbox{\vrule height11pt depth0pt width0pt} +\newbox\botstrutbox \def\botstrut{\unhcopy\botstrutbox} +\setbox\botstrutbox=\hbox{\vrule height0pt depth4pt width0pt} +\newdimen\tableline \tableline.01332in +\newskip\tablespace \tablespace5pt +\def\paragraph#1{\vbox{\hrule height\z@ width\hsize depth\z@#1}} +\def\tbar{\ifvmode\hrule\else\vrule width\hsize depth\z@\fi height\tableline} +\def\uptoks@{\inc\cntA@\inc\cntB@ % NOTE 69 + \ifnum\cntA@<\count19 \ifnum\cntB@<\count19 \else\err@\fi\else\err@\fi} +\def\err@{\errmessage{Columns too wide for tabular format}} +\def\bump@{\ifnum\cntC@<\maxcol@\inc\cntC@\uptoks@\fi} % NOTE 70 +\def\tableformat#1{\tablelet\just@\just@\relax\parse@#1~\done@~} % NOTE 71 +\def\tablerow#1{\tablelet\bbar@\wbar@\endrow@\parse@#1~\done@~} % NOTE 72 +\def\tablebar#1{{\let\topstrut\relax\let\botstrut\relax\tablespace\z@%% NOTE 73 + \tablerow{#1}}} +\def\tablelet#1#2#3{\let\b@#1\let\w@#2\let\f@#3\cntA@\count15 \cntB@\count11% + \cntC@\z@\let\parse@=\parseline@\ifhmode\par\else\nointerlineskip\fi} + % NOTE 74 +\def\just@#1{\let\b@\tform@\let\w@\tform@\maxcol@\z@\let\tablejust@#1} + % NOTE 75 + +\def\tform@#1{\tform@@#1~} % NOTE 76 +\def\tform@@#1#2~{\uptoks@\toks\cntA@{#1}\dimen\cntB@#2\inc\maxcol@} % NOTE 77 +\def\bbar@#1{\beginrow@{#1}\vrule width\tableline\vrule width\z@#1} % NOTE 78 +\def\wbar@#1{\beginrow@{#1}\kern\tableline\vrule width\z@#1} % NOTE 79 +\def\beginrow@#1{\let\b@\vbar@\let\w@\ibar@\setbox\z@=\hbox\bgroup% % NOTE 80 + \parindent\z@\leftskip\tablespace\rightskip\tablespace\let\span=\span@} +\def\endrow@{\kern-\dimen\cntB@\egroup\tablejust@{\unhbox\z@}} % NOTE 81 +\def\vbar@#1{\futurelet\lookahead@\cs@#1~\vrule width\tableline} % NOTE 82 +\def\ibar@#1{\futurelet\lookahead@\cs@#1~\kern\tableline} % NOTE 83 +\def\cs@#1~{\ifx\span@\lookahead@#1~\else\span@\@ne#1~\fi\lower\ht\z@\box\z@} + % NOTE 84 +\def\parseline@#1~{\ifx\done@#1\let\parse@\f@\else\let\p@ss\parsecol@% + \p@ss#1|\done@|\fi\parse@} % NOTE 85 +\def\parsecol@#1|{\def\parsemode@{\ifx\done@\lookahead@\w@{#1}% % NOTE 86 + \let\p@ss\lastp@ss\else\b@{#1}\fi\p@ss}% + \futurelet\lookahead@\parsemode@} +\def\lastp@ss#1|{} +\def\span@#1#2~{\bump@\hsize\dimen\cntB@\edef\x@{\the\toks\cntA@}% % NOTE 87 + \for\count@=2to#1do% + {\bump@\advance\hsize\dimen\cntB@\advance\hsize\tableline}% + \setbox\z@=\x@{\topstrut#2\botstrut}} + +% SECTION AND HEADING MACROS % NOTE 88 +% +\newcount\basehead\basehead=\count10 +\advance\count10by4 % This allocates 4 counters for head counters +\newcount\hdlevel +\def\setlevelno#1{\hdlevel=0 \cntA@=\basehead\sethead@0#1.-1.\head@} % NOTE 89 +\def\sethead@#1.{\ifnum-1=#1 \let\next@=\relax\else\let\next@=\sethead@ + % NOTE 90 + \ifnum\hdlevel<4 \inc\hdlevel\inc\cntA@\count\cntA@=#1\fi\fi\next@} +\def\head#1{\ifnum#1>\hdlevel\uplevel@{#1}\else % NOTE 91 + \hdlevel=#1\cntA@=#1\advance\cntA@\basehead\fi + \inc{\count\cntA@}\head@} +\def\uplevel@#1{\inc\hdlevel\cntA@=\hdlevel % NOTE 92 + \advance\cntA@\basehead\count\cntA@=0 + \ifnum\hdlevel=#1 \else\uplevel@{#1}\fi} +\def\head@{{\inc\basehead\xdef\levelno{\the\count\basehead} % NOTE 93 + \for\cntB@=\tw@ to\hdlevel do{\inc\basehead + \xdef\levelno{\levelno.\the\count\basehead}}}} +\setlevelno{0} + +\newtoks\firstlevelhead \def\headA@{\head\@ne\the\firstlevelhead} % NOTE 94 +\newtoks\secondlevelhead \def\headB@{\head\tw@\the\secondlevelhead} +\newtoks\thirdlevelhead \def\headC@{\head\thr@@\the\thirdlevelhead} +\newtoks\fourthlevelhead \def\headD@{\head\f@ur\the\fourthlevelhead} + +\def\level#1#2{\def\title{#2}% % NOTE 95 + \ifcase#1\relax\or\headA@\or\headB@\or\headC@\or\headD@\fi} +\firstlevelhead{\vfill\eject\vbox to1.5in{}\centerline{\fourteenbf\title}% + \vskip1.0in\ctswrite{\vrule height20pt width0pt\tenbf\title}} +\secondlevelhead{\need.75in\bigskip\leftline{\twelvebf\levelno\enspace\title}% + \medskip\ctswrite{\hskip15pt\tenrm\title}} +\thirdlevelhead{\need.6in\medskip\leftline{\tenbf\levelno\enspace\title}% + \ctswrite{\hskip30pt\tenrm\title}} +\fourthlevelhead{\need.5in\leftline{\tenrm\levelno\enspace\title}% + \ctswrite{\hskip45pt\tenrm\title}} + +% CONTENTS FILE MACROS +% +\newwrite\cnts@ +\newif\ifnocts@\nocts@true +\newtoks\topofcontents +\newtoks\botofcontents +\let\content@=\let% % NOTE 96 +\def\ctswrite#1{\ifnocts@\openout\cnts@=\jobname*[*]. \nocts@false\fi% NOTE 97 + {\def\_{\kern.06em \vbox{\hrule width.3em}}\let\the=0 + \edef\a@{\write\cnts@{\content@{#1}{\the\pageno}}}\a@}} +{\catcode`\@=12 \gdef\content@ #1#2{\need.5in\lline{#1\dotfil#2}}} +\def\contents{\ifnocts@\else\closeout\cnts@\null\supereject % NOTE 98 + \begingroup\pageno\m@ne\null\the\topofcontents\input\jobname*. + \the\botofcontents\eject\endgroup\nocts@true\fi} +\topofcontents{\noheading\vskip1in plus1fil + \centerline{\fourteenbf Table of Contents}\vskip1in plus1fil} +\botofcontents{\vfil} + +% FOOTNOTES AND INSERTIONS +% +\def\vfootnote#1{\insert\footins\bgroup % NOTE 99 + \interlinepenalty\interfootnotelinepenalty + \splittopskip\ht\strutbox % top baseline for broken footnotes + \splitmaxdepth\dp\strutbox \floatingpenalty\@MM + \realhsize\leftskip\z@skip \rightskip\z@skip + \baselineskip1\baselineskip + \textindent{#1}\footstrut\futurelet\next\fo@t} + +\newcount\notenumber +\def\resetnotes{\global\notenumber=0 } +\def\note{\global\inc\notenumber\footnote{$^{\the\notenumber}$}} % NOTE 100 +\def\midinsert{\@midtrue\p@gefalse\@ins} % NOTE 101 +\def\@ins{\par\begingroup\setbox\z@\vbox\bgroup\realhsize\divide\vsize\nocol@} + % NOTE 102 +\def\endinsert{\egroup\count@-100 % finish the \vbox % NOTE 103 + \ifp@ge\else\dimen@\ht\z@\advance\dimen@\dp\z@ + \advance\dimen@12\p@\multiply\dimen@-\nocol@ + \advance\dimen@-\pagetotal\advance\dimen@\pagegoal + \ifdim\dimen@<\z@\@midfalse\else\count@100 \fi\fi + \if@mid \balance@ + \global\setbox\contrb@\vbox{\unvbox\contrb@\bigskip\box\z@}\newtotal@ + \else\insert\topins{\penalty\count@ % floating insertion + \splittopskip\z@skip\splitmaxdepth\maxdimen\floatingpenalty\z@ + \ifp@ge \divide\vsize\nocol@ \dimen@\dp\z@ + \vbox to\vsize{\unvbox\z@\kern-\dimen@}% depth is zero + \else \box\z@\nobreak\bigskip\fi}\fi\endgroup} + +% COLUMN MACROS % NOTE 104 +% +\def\BEGINtwocolumns{\multicol@\tw@} +\def\BEGINthreecolumns{\multicol@\thr@@} +\def\ENDtwocolumns{\balance@\goal@\divide\endgroup\newtotal@\begingroup} +\let\ENDthreecolumns=\ENDtwocolumns +\def\balance{\balance@\newtotal@} % NOTE 105 +\def\balance@{\par{\let\ifreal@=\iffalse\eject}} % NOTE 106 +\def\newtotal@{{\each@{\the\toks\count@} % NOTE 107 + \ifold@\insert\hacker@{}\prevtotal@\pagetotal-\dimen@\fi}} +\def\multicol@#1{\ifnum\nocol@>\@ne\errset{You can't have columns % NOTE 108 + within columns. \string\start{\blockname@} ignored}\endgroup + \else\balance@\nocol@=#1\goal@\multiply\advance\hsize\columnspace + \divide\hsize#1\advance\hsize-\columnspace + \multiply\vsize#1\brokenpenalty\z@ + \each@{\multiply\count\count@\nocol@\multiply\skip\count@\nocol@}% + \newtotal@\global\dimen@=\baselineskip\baselineskip\dimen@ plus\dimen@\fi} + +\message{output routines} + +% OUTPUT ROUTINES % NOTE 109 +% +\newbox\contrb@ \newbox\out@ +\newdimen\columnspace +\columnspace=.5in +\let\ifreal@=\iftrue +\newcount\nocol@ \nocol@=1 +\newinsert\hacker@ +\def\ifold@{\ifvoid\contrb@\else} +\def\ifcol@{\ifnum\nocol@=\@ne\setbox\out@=\box\@cclv \else} +\def\setboxA@{\inc\cntA@\setbox\cntA@} +\def\boxA@{\inc\cntA@\box\cntA@} +\def\each@#1{\for\count@=\count19 to254 do{#1}} +\def\unglue@#1{\setbox#1=\vbox{\unvbox#1}} +\def\realhsize{\advance\hsize\columnspace\multiply\hsize\nocol@ + \advance\hsize-\columnspace} +\output{\hpoutput} + +\def\hpoutput{\splittopskip=\topskip + \setbox\hacker@=\box\voidb@x + \ifvoid\contrb@\dimen@=\ht\@cclv + \else\prevtotal@\advance\dimen@\ht\@cclv\fi + \ifreal@\realoutput@\else\fakeoutput@\fi + \each@{\global\toks\count@\ifvoid\count@{}\else{\insert\count@{}}\fi}} + +\def\realoutput@{\ifcol@\splitcol@\split@\setheight@\setout@ % NOTE 110 + \unvbox\@cclv \penalty\outputpenalty\fi + \setbox\@cclv=\pagestuff@{}\each@{\divide\skip\count@\nocol@}% + \realhsize\divide\vsize\nocol@\leftskip\z@\rightskip\z@ + \plainoutput\global\empty@true + \global\count\lpcount@=\nextlp@\ifnum\nextlp@>32 \global\nextlp@\z@\fi} + +\def\fakeoutput@{\unglue@{\@cclv}\global\let\ifreal@=\iftrue % NOTE 111 + \ifcol@\dimen@=\baselineskip + \dimen@=\ifnum\nocol@>2 2\dimen@ \else 1.1667\dimen@ \fi + \advance\dimen@\ht\@cclv\splitcol@{\box\@cclv}\setmax@\setout@\fi + \dimen@=\dp\out@\global\setbox\contrb@=\pagestuff@{\vskip-\dimen@}} + +\def\makeheadline{\vbox to\z@{\vskip-22.5\p@ + \lline{\vbox to8.5\p@{}\the\headline}\vss}\nointerlineskip} +\def\makefootline{\baselineskip24\p@\lline{\the\footline}} + +\def\pagecontents{\ifvoid\topins\else\unvbox\topins\fi + \unvbox\@cclv % open up \box255 + \ifvoid\footins\else % footnote info is present + \vskip\skip\footins + \footnoterule + \unvbox\footins\fi + \ifr@ggedbottom\vfil\fi} + +\def\splitcol@#1{\divide\dimen@\nocol@\cntA@=\count14 + \for\count@=\tw@ to\nocol@ do{\setboxA@=\split@}\setboxA@=#1} +\def\split@{\ifvoid\@cclv\vbox{\lline\hfil\vfil}\else\vsplit\@cclv to\dimen@\fi} +\def\setheight@{\ifold@\setmax@\fi} +\def\pagestuff@#1{\vbox{\ifold@\unvbox\contrb@\medskip\fi\unvbox\out@#1}} +\def\setout@{\cntA@=\count14 \setbox\out@=\vbox{\hbox + {\for\count@=\tw@ to\nocol@ do{\boxA@\hskip\columnspace}\boxA@}}} +\def\setmax@{\dimen@=\z@ \cntA@=\count14 + \for\count@=\@ne to\nocol@ do{\inc\cntA@\unglue@{\cntA@}% + \ifdim\ht\cntA@>\dimen@ \dimen@=\ht\cntA@\fi}% + \for\count@=\@ne to\nocol@ do{\setbox\cntA@ + =\vbox to\dimen@{\unvbox\cntA@\ifr@ggedbottom\vss\fi}\dec\cntA@}} +\def\prevtotal@{\dimen@=\medskipamount + \advance\dimen@\ht\contrb@\multiply\dimen@-\nocol@} +\def\goal@#1{\ifdim\pagegoal=\maxdimen\else + \dimen@=\pagegoal#1\dimen@\nocol@\pagegoal\dimen@\fi} + + +\catcode`@=12 % NOTE 112 + diff --git a/obsolete/macros/hptex/macroshc.tex b/obsolete/macros/hptex/macroshc.tex new file mode 100644 index 0000000000..706a8c3439 --- /dev/null +++ b/obsolete/macros/hptex/macroshc.tex @@ -0,0 +1,897 @@ +% THIS IS FILE MACROSHC +% +% *** Source file for hard copy of HP TEX Macro Package *** +% Copyright 1984 Hewlett-Packard Co. +% +%\lpdef{1,1in,1.34in,P} +%\vsize52pc +%\hsize39pc +\def\evenheading{\vbox{\hbox to \hsize{\eightrm Page \folio\hfil\HPTEX} + \nointerlineskip\vskip2pt + \hbox{\vrule width \hsize height .4pt}}} +\def\oddheading{\vbox{\hbox to \hsize{\eightrm The \HPTEX\ + Macros\hfil Page \folio} + \nointerlineskip\vskip2pt + \hbox{\vrule width \hsize height .4pt}}} +\def\noheading{\hfil} +\headline{\ifnum\pageno=1\noheading + \else\ifodd\pageno\oddheading + \else\evenheading\fi\fi} +\centerfooting{} + +\def\\{\char '134} +\def\lftbr{\char '173} +\def\rtbr{\char '175} + +\null +\vskip.5in +\centerline{\twelvebf THE \HPTEX\ MACROS}\footnote{}{\eightrm\copyright 1984 + Hewlett-Packard Co.} +\vskip1in + +\start{verbatim} +\tentt + +\% This is the HP TeX text format version A.00.00 as of Feb. 14, 1984. +\% It is compatible with the plain TeX format that's described in The TeXbook. +\% +\% NOTE 1, NOTE 2, etc. refer to notes in the file HPTEXDOC +\% + +\\input PLAIN.TEXT \% NOTE 1 + +\\message{\lftbr}Preloading the HP TeX codes,{\rtbr} + +\% SPECIAL CATCODES +\% +\\catcode`@=11 \% NOTE 2 + +\% HPTEX +\% +\\def\\HPTEX{\lftbr}HP\\nobreak\\ \\TeX{\rtbr} +\\let\\HpTeX=\\HPTEX +\\def\\fmtname{\lftbr}HP TeX{\rtbr}\\def\\fmtversion{\lftbr}A.00.00{\rtbr} + +\% LEADERS +\% +\\def\\dotfil{\lftbr}\\tenrm\\leaders\\hbox to8\\p@{\lftbr}\\hss.\\hss{\rtbr}\\h + +\% CONSTANT VALUES +\% +\\chardef\\zer@=0 +\\chardef\\f@ur=4 +\\skipdef\\skip@ii=2 +\\maxdepth=2pt + +\\message{\lftbr}fonts,{\rtbr} + +\% FONTS \% NOTE 4 +\% +\\let\\fontcheck=1 \% NOTE +\\def\\fontdef#1=#2 {\lftbr}\\def#1{\lftbr}\\font@{\lftbr}#1{\rtbr}{\lftbr}#2{\r +\\def\\font@#1#2{\lftbr}{\lftbr}\\let\\fontcheck=0\\ifx0\\fontcheck\\egroup\\glo + \\else{\rtbr}\\string#1 \\fi{\rtbr}\%--The space after \\string#1 is necessa + +\% ROMAN TEXT +\% +\\fontdef\\twentyfourrm={\lftbr}amr10 scaled \\magstep5{\rtbr} +\\fontdef\\eighteenrm={\lftbr}amr10 scaled \\magstep3{\rtbr} +\\fontdef\\fourteenrm={\lftbr}amr10 scaled \\magstep2{\rtbr} +\\font\\twelverm=amr10 scaled \\magstep1 +\%\\font\\tenrm=amr10 +\\font\\ninerm=amr9 +\\font\\eightrm=amr8 +\%\\font\\sevenrm=amr7 +\\font\\sixrm=amr6 +\%\\font\\fiverm=amr5 + +\% MATH ITALIC +\% +\\fontdef\\twentyfouri={\lftbr}ammi10 scaled \\magstep5{\rtbr} +\\fontdef\\eighteeni={\lftbr}ammi10 scaled \\magstep3{\rtbr} +\\fontdef\\fourteeni={\lftbr}ammi10 scaled \\magstep2{\rtbr} +\\fontdef\\twelvei={\lftbr}ammi10 scaled \\magstep1{\rtbr} +\%\\font\\teni=ammi10 +\\fontdef\\ninei={\lftbr}ammi9{\rtbr} +\\fontdef\\eighti={\lftbr}ammi8{\rtbr} +\%\\font\\seveni=ammi7 +\\fontdef\\sixi={\lftbr}ammi6{\rtbr} +\%\\font\\fivei=ammi5 + +\% MATH SYMBOLS +\% +\\fontdef\\twentyfoursy={\lftbr}amsy10 scaled \\magstep5{\rtbr} +\\fontdef\\eighteensy={\lftbr}amsy10 scaled \\magstep3{\rtbr} +\\fontdef\\fourteensy={\lftbr}amsy10 scaled \\magstep2{\rtbr} +\\fontdef\\twelvesy={\lftbr}amsy10 scaled \\magstep1{\rtbr} +\%\\font\\tensy=amsy10 +\\fontdef\\ninesy={\lftbr}amsy9{\rtbr} +\\fontdef\\eightsy={\lftbr}amsy8{\rtbr} +\%\\font\\sevensy=amsy7 +\\fontdef\\sixsy={\lftbr}amsy6{\rtbr} +\%\\font\\fivesy=amsy5 + +\% BOLD MATH SYMBOLS +\% +\\fontdef\\tenbfsy={\lftbr}ambsy10{\rtbr} + +\% MATH EXTENSION +\% +\%\\font\\tenex=amex10 + +\% SANS SERIF +\% +\\fontdef\\fourteenss={\lftbr}amss10 scaled \\magstep2{\rtbr} +\\fontdef\\twelvess={\lftbr}amss10 scaled \\magstep1{\rtbr} +\\font\\tenss=amss10 +\\font\\eightss=amssq8 + +\% SANS SERIF ITALIC +\% +\\font\\tenitss=amssi10 +\\font\\eightitss=amssqi8 + +\% BOLDFACE EXTENDED +\% +\\fontdef\\twentyfourbf={\lftbr}ambx10 scaled \\magstep5{\rtbr} +\\fontdef\\eighteenbf={\lftbr}ambx10 scaled \\magstep3{\rtbr} +\\fontdef\\fourteenbf={\lftbr}ambx10 scaled \\magstep2{\rtbr} +\\font\\twelvebf=ambx10 scaled \\magstep1 +\%\\font\\tenbf=ambx10 +\\font\\ninebf=ambx9 +\\font\\eightbf=ambx8 +\%\\font\\sevenbf=ambx7 +\\font\\sixbf=ambx6 +\%\\font\\fivebf=ambx5 + +\% TYPEWRITER +\% +\\fontdef\\twentyfourtt={\lftbr}amtt10 scaled \\magstep5{\rtbr} +\\fontdef\\eighteentt={\lftbr}amtt10 scaled \\magstep3{\rtbr} +\\fontdef\\fourteentt={\lftbr}amtt10 scaled \\magstep2{\rtbr} +\\fontdef\\twelvett={\lftbr}amtt10 scaled \\magstep1{\rtbr} +\%\\font\\tentt=amtt10 +\\font\\ninett=amtt9 +\\font\\eighttt=amtt8 + +\% SLANTED TYPEWRITER +\% +\\font\\tensltt=amsltt10 + +\% SLANTED ROMAN +\% +\\fontdef\\twentyfoursl={\lftbr}amsl10 scaled \\magstep5{\rtbr} +\\fontdef\\eighteensl={\lftbr}amsl10 scaled \\magstep3{\rtbr} +\\fontdef\\fourteensl={\lftbr}amsl10 scaled \\magstep2{\rtbr} +\\fontdef\\twelvesl={\lftbr}amsl10 scaled \\magstep1{\rtbr} +\%\\font\\tensl=amsl10 +\\font\\ninesl=amsl9 +\\font\\eightsl=amsl8 + +\% TEXT ITALIC +\% +\\fontdef\\twentyfourit={\lftbr}amti10 scaled \\magstep5{\rtbr} +\\fontdef\\eighteenit={\lftbr}amti10 scaled \\magstep3{\rtbr} +\\fontdef\\fourteenit={\lftbr}amti10 scaled \\magstep2{\rtbr} +\\fontdef\\twelveit={\lftbr}amti10 scaled \\magstep1{\rtbr} +\%\\font\\tenit=amti10 +\\font\\nineit=amti9 +\\font\\eightit=amti8 +\\fontdef\\sevenit={\lftbr}amti7{\rtbr} + +\% UNSLANTED TEXT ITALIC +\% +\\font\\tenuit=amu10 + +\% CAPS AND SMALL CAPS +\% +\\font\\tencsc=amcsc10 + +\% SANS SERIF BOLD EXTENDED +\% +\\font\\tenbfss=amssbx10 + +\% BOLD EXTENDED SLANTED +\% +\\font\\tenslbf=ambxsl10 + +\% DUNHILL STYLE +\% +\\font\\tendh=amdunh10 + +\% FOR TITLES +\% +\\font\\titlefont=amr7 scaled \\magstep4 + +\% BIG FONT +\% +\\font\\bigfont=amssbx10 scaled \\magstep2 + +\\message{\lftbr}macros,{\rtbr} + +\% MACROS TO SET FSTYLE \% NOTE 7 +\% +\\def\\rm{\lftbr}\\fam\\z@\\def\\fstyle{\lftbr}rm{\rtbr}\\setfont{\rtbr} +\\def\\it{\lftbr}\\fam\\itfam\\def\\fstyle{\lftbr}it{\rtbr}\\setfont{\rtbr} +\\def\\bf{\lftbr}\\fam\\bffam\\def\\fstyle{\lftbr}bf{\rtbr}\\setfont\\ifmmode{\l + \\textfont2=\\tenbfsy\\fi{\rtbr} +\\def\\sl{\lftbr}\\fam\\slfam\\def\\fstyle{\lftbr}sl{\rtbr}\\setfont{\rtbr} +\\def\\sa{\lftbr}\\def\\fstyle{\lftbr}ss{\rtbr}\\setfont{\rtbr} +\\def\\tt{\lftbr}\\fam\\ttfam\\def\\fstyle{\lftbr}tt{\rtbr}\\setfont{\rtbr} + +\\newfam\\ssfam + +\vfil\goodbreak +\% MACROS TO SET FSIZE \% NOTE 8 +\% +\\def\\fivepoint{\lftbr}\\def\\fsize{\lftbr}five{\rtbr}\\setfont\\let\\sfont=\\f + \\baselineskip7pt\% + \\setbox\\strutbox=\\hbox{\lftbr}\\vrule height4.5pt depth1.5pt w + \\textfont0=\\fiverm \\scriptfont0=\\fiverm\% + \\scriptscriptfont0=\\fiverm\% + \\textfont1=\\fivei \\scriptfont1=\\fivei\% + \\scriptscriptfont1=\\fivei\% + \\textfont2=\\fivesy \\scriptfont2=\\fivesy\% + \\scriptscriptfont2=\\fivesy{\rtbr} +\vfil\goodbreak + +\\def\\sixpoint{\lftbr}\\def\\fsize{\lftbr}six{\rtbr}\\setfont\\let\\sfont=\\fiv + \\baselineskip8pt\% + \\setbox\\strutbox=\\hbox{\lftbr}\\vrule height5pt depth2pt width + \\textfont0=\\sixrm \\scriptfont0=\\fiverm\% + \\scriptscriptfont0=\\fiverm\% + \\scriptfont1=\\fivei \\scriptscriptfont1=\\fivei\% + \\scriptfont2=\\fivesy \\scriptscriptfont2=\\fivesy\% + \\def\\changes{\lftbr}{\lftbr}\\sixi\\sixsy{\rtbr}\% + \\textfont1=\\sixi \\textfont2=\\sixsy{\rtbr}\% + \\ifmmode\\changes\\else\\everymath{\lftbr}\\changes + \\everydisplay{\lftbr}\\changes{\rtbr}\\fi{ +\vfil\goodbreak + +\\def\\sevenpoint{\lftbr}\\def\\fsize{\lftbr}seven{\rtbr}\\setfont\\let\\sfont=\ + \\baselineskip9pt\% + \\setbox\\strutbox=\\hbox{\lftbr}\\vrule height6pt depth2pt wi + \\textfont0=\\sevenrm \\scriptfont0=\\sixrm\% + \\scriptscriptfont0=\\fiverm\% + \\textfont1=\\seveni \\scriptscriptfont1=\\fivei\% + \\textfont2=\\sevensy \\scriptscriptfont2=\\fivesy\% + \\def\\changes{\lftbr}{\lftbr}\\sixi\\sixsy{\rtbr}\% + \\scriptfont1=\\sixi\% + \\scriptfont2=\\sixsy{\rtbr}\% + \\ifmmode\\changes\\else\\everymath{\lftbr}\\changes{\rtbr}\% + \\everydisplay{\lftbr}\\changes{\ +\vfil\goodbreak + +\\def\\eightpoint{\lftbr}\\def\\fsize{\lftbr}eight{\rtbr}\\setfont\\let\\sfont=\ + \\baselineskip9pt\% + \\setbox\\strutbox=\\hbox{\lftbr}\\vrule height7pt depth2pt wi + \\textfont0=\\eightrm \\scriptfont0=\\sixrm\% + \\scriptscriptfont0=\\fiverm\% + \\scriptscriptfont1=\\fivei\% + \\scriptscriptfont2=\\fivesy\% + \\def\\changes{\lftbr}{\lftbr}\\eighti\\sixi\\eightsy\\sixsy{\ + \\textfont1=\\eighti \\scriptfont1=\\sixi\% + \\textfont2=\\eightsy \\scriptfont2=\\sixsy{\rtbr}\% + \\ifmmode\\changes\\else\\everymath{\lftbr}\\changes{\rtbr}\% + \\everydisplay{\lftbr}\\changes{\rtbr}\\fi{\r +\vfil\goodbreak + +\\def\\ninepoint{\lftbr}\\def\\fsize{\lftbr}nine{\rtbr}\\setfont\\let\\sfont=\\s + \\baselineskip11pt\% + \\setbox\\strutbox=\\hbox{\lftbr}\\vrule height8pt depth3pt wi + \\textfont0=\\ninerm \\scriptfont0=\\sevenrm\% + \\scriptscriptfont0\\fiverm\% + \\scriptfont1=\\seveni \\scriptscriptfont1\\fivei\% + \\scriptfont2=\\sevensy \\scriptscriptfont2\\fivesy\% + \\def\\changes{\lftbr}{\lftbr}\\ninei\\ninesy{\rtbr}\% + \\textfont1=\\ninei\% + \\textfont2=\\ninesy{\rtbr}\% + \\ifmmode\\changes\\else\\everymath{\lftbr}\\changes{\ + \\everydisplay{\lftbr}\\changes{\rtbr}\\fi{\ +\vfil\goodbreak + +\\def\\tenpoint{\lftbr}\\def\\fsize{\lftbr}ten{\rtbr}\\setfont\\let\\sfont=\\sev + \\baselineskip12pt\% + \\setbox\\strutbox=\\hbox{\lftbr}\\vrule height8.5pt depth3.5pt + \\textfont0=\\tenrm \\scriptfont0=\\sevenrm\% + \\scriptscriptfont0\\fiverm\% + \\textfont1=\\teni \\scriptfont1=\\seveni\% + \\scriptscriptfont1\\fivei\% + \\textfont2=\\tensy \\scriptfont2=\\sevensy\% + \\scriptscriptfont2\\fivesy{\rtbr} +\vfil\goodbreak + +\\def\\twelvepoint{\lftbr}\\def\\fsize{\lftbr}twelve{\rtbr}\\setfont\\let\\sfont + \\baselineskip14pt\% + \\setbox\\strutbox=\\hbox{\lftbr}\\vrule height10pt depth4pt w + \\textfont0=\\twelverm \\scriptfont0=\\ninerm\% + \\scriptscriptfont0=\\sevenrm\% + \\scriptscriptfont1=\\seveni\% + \\scriptscriptfont2=\\sevensy\% + \\def\\changes{\lftbr}{\lftbr}\\twelvei\\ninei\\twelvesy\\nine + \\textfont1=\\twelvei \\scriptfont1=\\ninei\% + \\textfont2=\\twelvesy \\scriptfont2=\\ninesy{\rtbr}\ + \\ifmmode\\changes\\else\\everymath{\lftbr}\\changes{\rtbr}\% + \\everydisplay{\lftbr}\\changes{\rtbr}\\fi{ +\vfil\goodbreak + +\\def\\fourteenpoint{\lftbr}\\def\\fsize{\lftbr}fourteen{\rtbr}\\setfont\\let\\s + \\baselineskip16pt\% + \\setbox\\strutbox=\\hbox{\lftbr}\\vrule height12pt depth4pt width0pt{\rtbr + \\scriptfont0=\\tenrm \\scriptscriptfont0=\\sevenrm\% + \\scriptfont1=\\teni \\scriptscriptfont1=\\seveni\% + \\scriptfont2=\\tensy \\scriptscriptfont2=\\sevensy\% + \\def\\changes{\lftbr}{\lftbr}\\fourteeni\\fourteenrm\\fourteensy{\rtbr}\% + \\textfont0=\\fourteenrm\% + \\textfont1=\\fourteeni\% + \\textfont2=\\fourteensy{\rtbr}\% + \\ifmmode\\changes\\else\\everymath{\lftbr}\\changes{\rtbr}\\everydisplay{\ +\vfil\goodbreak + +\\def\\eighteenpoint{\lftbr}\\def\\fsize{\lftbr}eighteen{\rtbr}\\setfont\\let\\s + \\baselineskip18pt\% + \\setbox\\strutbox=\\hbox{\lftbr}\\vrule height15pt depth3pt width0pt{\rtb + \\scriptfont0=\\twelverm \\scriptscriptfont0=\\tenrm\% + \\scriptscriptfont1=\\teni\% + \\scriptscriptfont2=\\tensy\% + \\def\\changes{\lftbr}{\lftbr}\\eighteenrm\\eighteeni\\twelvei\\eighteensy + \\textfont0=\\eighteenrm\% + \\textfont1=\\eighteeni \\scriptfont1=\\twelvei\% + \\textfont2=\\eighteensy \\scriptfont2=\\twelvesy{\rtbr}\% + \\ifmmode\\changes\\else\\everymath{\lftbr}\\changes{\rtbr}\% + \\everydisplay{\lftbr}\\changes{\rtbr}\\fi{\rtbr} +\vfil\goodbreak + +\\def\\twentyfourpoint{\lftbr}\\def\\fsize{\lftbr}twentyfour{\rtbr}\\setfont\\le + \\baselineskip24pt\% + \\setbox\\strutbox=\\hbox{\lftbr}\\vrule height21.5pt depth2.5pt width0pt{ + \\def\\changes{\lftbr}{\lftbr}\\twentyfourrm\\eighteenrm\\fourteenrm\\twen + \\eighteeni\\fourteeni\\twentyfoursy\\eighteensy\\fourteensy + \\textfont0=\\twentyfourrm \\scriptfont0=\\eighteenrm \% + \\scriptscriptfont0=\\fourteenrm\% + \\textfont1=\\twentyfouri \\scriptfont1=\\eighteeni\% + \\scriptscriptfont1=\\fourteeni\% + \\textfont2=\\twentyfoursy \\scriptfont2=\\eighteensy\% + \\scriptscriptfont2=\\fourteensy{\rtbr}\% + \\ifmmode\\changes\\else\\everymath{\lftbr}\\changes{\rtbr}\\everydisplay + +\vfil\goodbreak +\% MACROS TO SET CURRENT FONT USING FSTYLE AND FSIZE +\% +\\newif\\ifnofont@ +\\def\\tryfont#1{\lftbr}\\expandafter\\ifx\\csname#1\\endcsname\\relax\\nofont@t + \\else\\nofont@false\\csname#1\\endcsname\\fi{\rtbr} +\\def\\setfont{\lftbr}\\tryfont{\lftbr}\\ffam\\fsize\\fstyle{\rtbr}\% + \\ifnofont@\\tryfont{\lftbr}\\ffam\\fsize rm{\rtbr}\% + \\ifnofont@\\tryfont{\lftbr}\\ffam tenrm{\rtbr}\% + \\ifnofont@\\tenrm\\fi\\fi\\expandafter + \\fonterr\\csname\\ffam\\fsize\\fstyle\\endcsname{\lftbr}\\the\\font{\rtbr}\ +\\def\\fonterr#1#2{\lftbr}\\immediate\\write\\m@ne{\lftbr}! font #1is undefined, + I'm using #2instead.{\rtbr}\\xdef#1{\lftbr}#2{\rtbr}{\rtbr} + +\% DEFAULTS \% NOTE 1 +\% +\\fam\\z@\\tenrm\\def\\ffam{\lftbr}{\rtbr}\\def\\fstyle{\lftbr}rm{\rtbr}\\def\\f + +\% LINE MACROS \% NOTE 1 +\% +\\def\\lline#1{\lftbr}\\hbox to\\hsize{\lftbr}\\hskip\\leftskip#1\\hskip\\rights +\\def\\leftline#1{\lftbr}\\lline{\lftbr}#1\\hss{\rtbr}{\rtbr} +\\def\\rightline#1{\lftbr}\\lline{\lftbr}\\hss#1{\rtbr}{\rtbr} +\\def\\centerline#1{\lftbr}\\lline{\lftbr}\\hss#1\\hss{\rtbr}{\rtbr} + +\% MORE MACROS +\% +\\def\\narrow#1{\lftbr}\\advance\\leftskip#1\\advance\\rightskip#1{\rtbr} +\\def\\narrower{\lftbr}\\narrow\\parindent{\rtbr} +\\def\\narrow@{\lftbr}\\narrow\\inset{\rtbr} +\\def\\inc#1{\lftbr}\\advance#1\\@ne{\rtbr} +\\def\\dec#1{\lftbr}\\advance#1\\m@ne{\rtbr} +\\def\\ignore#1{\lftbr}\\relax{\rtbr} +\\def\\okbreak{\lftbr}\\par\\penalty-200{\rtbr} +\\def\\need{\lftbr}\\afterassignment\\need@\\dimen@{\rtbr} +\\def\\need@{\lftbr}\\vskip\\dimen@ minus\\dimen@\\okbreak\\vskip-\\dimen@ minus +\goodbreak +\\def\\for#1=#2to#3do#4{\lftbr}#1=#2\\ifnum#2>#3\\else\\let\\next@=\\fnext@ + \\def\\fcount@{\lftbr}#1{\rtbr}\\def\\fexit@{\lftbr}#3{\rtbr}\\def\\floop@{\ +\goodbreak +\\def\\fnext@{\lftbr}\\floop@\\ifnum\\fcount@<\\fexit@\\inc\\fcount@ + \\else\\let\\next@=\\relax\\fi\\next@{\rtbr} +\goodbreak +\\def\\super#1{\lftbr}\\/\\raise.4em\\hbox{\lftbr}\\sfont#1{\rtbr}\\thinspace{\r +\\def\\sub#1{\lftbr}\\lower.25em\\hbox{\lftbr}\\sfont#1{\rtbr}\\thinspace{\rtbr} +\\def\\lbreak{\lftbr}\\hfill\\break{\rtbr} +\goodbreak +\\def\\uline#1{\lftbr}\\setbox0=\\hbox{\lftbr}#1{\rtbr}\\dimen@=-\\dp0\\advance\ + \\ifvmode\\indent\\fi\\hbox to \\wd0{\lftbr}\\lower.27em + \\vbox{\lftbr}\\box0\\vskip\\dimen@\\hrule height.04em{\rtbr}{\rtbr}{\rtbr} +\goodbreak + +\% START AND FINISH GROUP STRUCTURE \% NOTE 1 +\% +\\def\\start#1{\lftbr}\\errfalse\\ifinvalid@{\lftbr}#1{\rtbr}\\else\\begingroup + \\def\\blockname@{\lftbr}#1{\rtbr}\\csname BEGIN#1\\endcsname\\fi\\Error{\rt +\\def\\finish#1{\lftbr}\\errfalse\\ifinvalid@{\lftbr}#1{\rtbr}\\else\\matchup@{\ +\\def\\ifinvalid@#1{\lftbr}\\expandafter\\ifx\\csname BEGIN#1\\endcsname\\relax + \\errset{\lftbr}I don't understand {\lftbr}#1{\rtbr}, it may be misspelled{\ +\\def\\matchup@#1{\lftbr}\\def\\test@{\lftbr}#1{\rtbr}\% + \\expandafter\\ifx\\csname blockname@\\endcsname\\relax + \\errset{\lftbr}Extra \\string\\finish{\lftbr}\\test@{\rtbr} ignored + \\else\\ifx\\test@\\blockname@\\done + \\else\\errset{\lftbr}Missing \\string\\finish{\lftbr}\\blockname@{\rtbr} in + \\done\\matchup@{\lftbr}#1{\rtbr}\\fi\\fi{\rtbr} +\\def\\done{\lftbr}\\csname END\\blockname@\\endcsname\\endgroup{\rtbr} + +\% GENERAL ERROR HANDLING \% NOTE 2 +\% +\\def\\errfalse{\lftbr}\\global\\let\\iferr=\\iffalse{\rtbr} +\\def\\errtrue{\lftbr}\\global\\let\\iferr=\\iftrue{\rtbr} +\\def\\errset#1{\lftbr}\\iferr\\immediate\\write0{\lftbr}! \\error{\rtbr}\\else\ +\\def\\Error{\lftbr}\\iferr\\errmessage{\lftbr}\\error{\rtbr}\\fi{\rtbr} + +\% DATE AND TIME MACROS +\% +\\newcount\\cntA@\\newcount\\cntB@\\newcount\\cntC@ +\\def\\mon{\lftbr}\\ifcase\\month\\relax\\or January\\or February\\or March\\or + April\\or May\\or June\\or July\\or August\\or September\\or October\\or + November\\or December\\fi{\rtbr} +\\def\\date{\lftbr}\\mon\\nobreak\\ \\number\\day, \\number\\year{\rtbr} +\goodbreak +\\def\\hour{\lftbr}{\lftbr}\\cntA@=\\time \\cntB@=\\cntA@ + \\divide\\cntA@60 \\cntC@=\\cntA@ \\multiply\\cntC@60 + \\advance\\cntB@-\\cntC@\\ifnum\\cntA@>11 + \\advance\\cntA@-12 \\def\\time@{\lftbr}PM{\rtbr}\\else\\def\\time@{\lftbr}A + \\ifnum\\cntA@=0 \\cntA@=12 \\fi\\number\\cntA@ + :\\ifnum\\cntB@<10 0\\fi\\number\\cntB@\\nobreak\\ \\time@{\rtbr}{\rtbr} + +\% INDENTSTYLE +\% +\\newdimen\\indentsize\\indentsize=20pt +\\newif\\ifindent\\indenttrue \% NOTE +\\def\\indentstyle{\lftbr}\\parindent\\indentsize + \\ifindent\\else\\indenttrue\\advance\\parskip-5\\p@\\fi{\rtbr} +\\def\\noindentstyle{\lftbr}\\parindent\\z@ + \\ifindent\\indentfalse\\advance\\parskip5\\p@\\fi{\rtbr} +\\def\\indentspace{\lftbr}\\afterassignment\\indent@\\indentsize{\rtbr} +\\def\\indent@{\lftbr}\\ifindent\\parindent\\indentsize\\fi{\rtbr} +\\newdimen\\inset +\\inset.5in +\\def\\BEGINindent{\lftbr}\\advance\\leftskip \\inset{\rtbr} +\\let\\ENDindent=\\par + +\% RAGGED MARGIN AND JUSTIFIED MARGIN MACROS +\% +\\def\\fixmargin@{\lftbr}\\dimen@=\\rightskip\\rightskip=\\dimen@{\rtbr} +\\def\\justify{\lftbr}\\fixmargin@\\spaceskip\\z@\\xspaceskip\\z@{\rtbr} +\\def\\raggedright{\lftbr}\\fixmargin@\\advance\\rightskip\\z@ plus2em + \\ifx\\fstyle\\tt@\\else\\spaceskip.3333em\\xspaceskip.5em\\fi{\rtbr} +\\def\\tt@{\lftbr}tt{\rtbr} + +\% ITEM AND SUBITEM MACROS +\% +\\newcount\\icount@\\newcount\\scount@ +\\newcount\\idigit@\\newcount\\sdigit@ +\\def\\itemset@#1#2#3{\lftbr}\\dimen@=\\hsize \\advance\\dimen@-#2\\inset + \\parshape=\\@ne#1\\inset\\dimen@\\noindent + \\hbox to\\z@{\lftbr}\\hss#3\\enspace{\rtbr}\\ignorespaces{\rtbr} +\\def\\itemlist#1{\lftbr}\\medskip\\resetsubitems\\itemset@\\@ne\\tw@{\lftbr}#1{ +\\def\\subitem#1{\lftbr}\\smallskip\\itemset@\\tw@\\f@ur{\lftbr}#1{\rtbr}{\rtbr} +\\def\\itempar{\lftbr}\\smallskip\\itemset@\\@ne\\tw@\\empty{\rtbr} +\\def\\subitempar{\lftbr}\\subitem\\empty{\rtbr} +\\def\\enditems{\lftbr}\\bigskip\\resetitems{\rtbr} + +\% ITEMTAG AND SUBITEMTAG MACROS \% NOTE 41 +\% +\\def\\square{\lftbr}\\hbox{\lftbr}\\hskip.5pt\\vrule height.4em width.4em depth +\\def\\dott{\lftbr}$\\bullet${\rtbr} +\\def\\emdash{\lftbr}---{\rtbr} +\\def\\itemn@#1{\lftbr}\\number#1\\global\\inc#1{\rtbr} +\\def\\itemr@#1{\lftbr}\\romannumeral#1\\global\\inc#1{\rtbr} +\\def\\itemR@#1{\lftbr}\\uppercase\\expandafter{\lftbr}\\romannumeral#1{\rtbr}\\ +\goodbreak +\\def\\iteml@#1#2{\lftbr}{\lftbr}\\loop\\char#1\\ifnum#2>\\@ne\\dec#2\\repeat{\r + \\ifnum#1>122 \\global#1=97 \\global\\inc#2\\fi \\ifnum#1=91 \\global#1=65 + \\global\\inc#2\\fi{\rtbr} + \\def\\item@ #1,#2,#3{\lftbr}\\def\\itemtag{\lftbr}#3{\rtbr}\% + \\def\\resetitems{\lftbr}\\global\\icount@=#1\\global\\idigit@=#2{\rtbr}\\res +\\outer\\def\\numbereditems{\lftbr}\\item@ 1,0,{\lftbr}\\itemn@\\icount@{\rtbr}{ +\\outer\\def\\lettereditems{\lftbr}\\item@ 97,1,{\lftbr}\\iteml@\\icount@\\idigi +\\outer\\def\\Lettereditems{\lftbr}\\item@ 65,1,{\lftbr}\\iteml@\\icount@\\idigi +\\outer\\def\\romanitems{\lftbr}\\item@ 1,0,{\lftbr}\\itemr@\\icount@{\rtbr}{\rt +\\outer\\def\\Romanitems{\lftbr}\\item@ 1,0,{\lftbr}\\itemR@\\icount@{\rtbr}{\rt +\\outer\\def\\squareditems{\lftbr}\\let\\itemtag=\\square\\let\\resetitems=\\rel +\\outer\\def\\dotteditems{\lftbr}\\let\\itemtag=\\dott\\let\\resetitems=\\relax{ +\\outer\\def\\dasheditems{\lftbr}\\let\\itemtag=\\emdash\\let\\resetitems=\\rela +\\def\\itm{\lftbr}\\itemlist{\lftbr}\\tenrm\\itemtag\\ifx\\relax\\resetitems\\el + +\\def\\subitem@ #1,#2,#3{\lftbr}\\def\\subitemtag{\lftbr}#3{\rtbr}\% + \\def\\resetsubitems{\lftbr}\\global\\scount@=#1\\global\\sdigit@=#2{\rtbr}\ +\\outer\\def\\numberedsubitems{\lftbr}\\subitem@ 1,0,{\lftbr}\\itemn@\\scount@{\ +\\outer\\def\\letteredsubitems{\lftbr}\\subitem@ 97,1,{\lftbr}\\iteml@\\scount@\ +\\outer\\def\\Letteredsubitems{\lftbr}\\subitem@ 65,1,{\lftbr}\\iteml@\\scount@\ +\\outer\\def\\romansubitems{\lftbr}\\subitem@ 1,0,{\lftbr}\\itemr@\\scount@{\rtb +\\outer\\def\\Romansubitems{\lftbr}\\subitem@ 1,0,{\lftbr}\\itemR@\\scount@{\rtb +\\outer\\def\\squaredsubitems{\lftbr}\\let\\subitemtag=\\square\\let\\resetsubit +\\outer\\def\\dottedsubitems{\lftbr}\\let\\subitemtag=\\dott\\let\\resetsubitems +\\outer\\def\\dashedsubitems{\lftbr}\\let\\subitemtag=\\emdash\\let\\resetsubite +\\def\\sitm{\lftbr}\\subitem{\lftbr}\\tenrm\\subitemtag\\ifx\\relax\\resetsubite + \% NOTE 49 +\\numbereditems\\letteredsubitems \% NOTE + +\% NOTE AND WARNING MACROS +\% +\\def\\BEGINnote{\lftbr}\\bigskip\\narrow@\\narrow@\\nobreak{\rtbr} +\\let\\ENDnote=\\bigskip +\\def\\BEGINwarning{\lftbr}\\bigskip\\nobreak\\narrow@\\narrow@\\marginrule.0266 + \\nobreak\\medskip\\nobreak{\rtbr} +\\def\\ENDwarning{\lftbr}\\nobreak\\medskip\\nobreak\\marginrule.02667in \\bigsk +\\def\\marginrule#1 {\lftbr}\\nointerlineskip\\vbox to#1{\lftbr}\\vss + \\lline{\lftbr}\\leaders\\hrule height#1\\hss{\rtbr}{\rtbr}{\rtbr} + + +\% VERBATIM MODE \% NOTE 5 +\% +\\newskip\\blanksize@ +\\bgroup\\catcode`\\*=3 \\catcode`\\$=13 \\catcode`\\#=13 + \\catcode`\\^=13 \\catcode`\\_=13 \\catcode`\\|=13 \\catcode`\\~=13 +\goodbreak +\\gdef\\BEGINverbatim{\lftbr}\\parskip=0pt plus1pt + \\catcode`\\$=13 \\def${\lftbr}\\indent\\hbox to \\the\\fontdimen\\tw@\\the\ + {\lftbr}\\hss\\$\\hss{\rtbr}{\rtbr} + \\catcode`\\&=12 + \\catcode`\\#=13 \\def#{\lftbr}\\indent\\hbox to \\the\\fontdimen\\tw@\\the\ + {\lftbr}\\hss*\\#*\\hss{\rtbr}{\rtbr} + \\catcode`\\^=13 \\def^{\lftbr}\\indent\\hbox to \\the\\fontdimen\\tw@\\the\ + {\lftbr}\\hss*\\mathchar"327D*\\hss{\rtbr}{\rtbr} + \\catcode`\\_=13 \\def_{\lftbr}\\indent\\hbox to \\the\\fontdimen\\tw@\\the\ + {\lftbr}\\hss\\_\\hss{\rtbr}{\rtbr} + \\catcode`\\\%=12 + \\catcode`\\|=13 \\def|{\lftbr}\\indent\\hbox to \\the\\fontdimen\\tw@\\the\ + {\lftbr}\\hss*\\mathchar"326A*\\hss{\rtbr}{\rtbr} + \\catcode`\\~=13 \\def~{\lftbr}\\indent\\hbox to \\the\\fontdimen\\tw@\\the\ + {\lftbr}\\hss*\\mathchar"3218*\\hss{\rtbr}{\rtbr} + \\parindent\\z@\\lumplines\\lumpspaces{\rtbr} +\\egroup + +\% LUMPLINE AND LUMPSPACE MACROS \% NOTE 5 +\% +{\lftbr}\\catcode`\\^^M=13 \\gdef\\lumplines{\lftbr}\\catcode`\\^^M=13 \\let^^M= +\\def\\lumpline@{\lftbr}\\par\\skip@=\\z@\\let\\munch@=\\lumpB@\\futurelet\\lump +\\def\\lumpA@{\lftbr}\\ifx\\lumpline@\\lump@\\advance\\skip@\\baselineskip + \\else\\let\\munch@=\\relax\\vskip\\skip@\\fi\\munch@{\rtbr} +\\def\\lumpB@#1{\lftbr}\\futurelet\\lump@\\lumpA@{\rtbr} +{\lftbr}\\catcode`\\ =13 \\gdef\\lumpspaces{\lftbr}\\catcode`\\ =13\\relax\\let +\goodbreak +\\def\\lumpspace@{\lftbr}\\blanksize@=\\the\\fontdimen\\tw@\\the\\font + \\skip@=\\z@\\let\\munch@=\\lumpb@\\futurelet\\lump@\\lumpa@{\rtbr} +\goodbreak +\\def\\lumpa@{\lftbr}\\advance\\skip@\\blanksize@\\ifx\\lumpspace@\\lump@ + \\else\\let\\munch@=\\relax\\hskip\\skip@\\fi\\munch@{\rtbr} +\\def\\lumpb@#1{\lftbr}\\futurelet\\lump@\\lumpa@{\rtbr} +\\let\\munch@=\\relax + +\% PAGE CONTROL MACROS \% NOTE 5 +\% +\\def\\newpage{\lftbr}\\balance\\ifold@\\null\\vfill\\eject\\fi{\rtbr} +\\def\\evenpage{\lftbr}\\newpage\\ifodd\\pageno\\null\\vfill\\eject\\fi{\rtbr} +\\def\\oddpage{\lftbr}\\newpage\\ifodd\\pageno\\else\\null\\vfill\\eject\\fi{\rt + +\% HEADING AND FOOTING MACROS \% NOTE 57 +\% +\\newtoks\\leftheading \\newtoks\\leftfooting +\\newtoks\\rightheading \\newtoks\\rightfooting +\\newtoks\\centerheading \\newtoks\\centerfooting +\\newtoks\\insideheading \\newtoks\\insidefooting +\\newtoks\\outsideheading \\newtoks\\outsidefooting +\\newtoks\\headline \\newtoks\\footline +\goodbreak +\\def\\buildline{\lftbr}\\let\\lft=\\zer@\\let\\rght=\\@ne + \\ifdim\\wd3=\\z@\\else\\ifodd\\pageno\\let\\lft=\\thr@@\\else\\let\\rght=\\ + \\ifdim\\wd4=\\z@\\else\\ifodd\\pageno\\let\\rght=\\f@ur\\else\\let\\lft=\\f + \\triplehead\\lft\\tw@\\rght{\rtbr} +\goodbreak +\\def\\triplehead#1#2#3{\lftbr}\\skip@=1em\\skip@ii=1em + \\dimen@=\\wd#1\\advance\\dimen@-\\wd#3\% + \\ifdim\\dimen@>\\z@\\advance\\skip@ii\\dimen@ minus\\dimen@ + \\else\\advance\\skip@-\\dimen@ minus-\\dimen@\\fi + {\lftbr}\\box#1\\hskip\\skip@\\hfil\\box#2\\hfil\\hskip\\skip@ii\\box#3{\rtb +\goodbreak +\\def\\loadbox#1#2{\lftbr}\\setbox#1=\\hbox{\lftbr}\\the#2{\rtbr}{\rtbr} +\\newcount\\headcount\\newcount\\footcount +\\def\\suspendheading#1{\lftbr}\\global\\headcount=#1{\rtbr} +\\def\\suspendfooting#1{\lftbr}\\global\\footcount=#1{\rtbr} +\\def\\noheading{\lftbr}\\suspendheading\\m@ne{\rtbr} +\\def\\nofooting{\lftbr}\\suspendfooting\\m@ne{\rtbr} +\\def\\resumeheading{\lftbr}\\suspendheading\\zer@{\rtbr} +\\def\\resumefooting{\lftbr}\\suspendfooting\\zer@{\rtbr} +\goodbreak +\\headline{\lftbr}\\ifnum\\headcount=\\z@\\loadbox\\tw@\\centerheading + \\loadbox\\zer@\\leftheading\\loadbox\\@ne\\rightheading + \\loadbox\\thr@@\\insideheading\\loadbox\\f@ur\\outsideheading\\buildlin + \\else\\hfil\\ifnum\\headcount>\\z@\\global\\dec\\headcount\\fi\\fi{\rtbr} +\goodbreak +\\footline{\lftbr}\\ifnum\\footcount=\\z@\\loadbox\\tw@\\centerfooting + \\loadbox\\zer@\\leftfooting\\loadbox\\@ne\\rightfooting + \\loadbox\\thr@@\\insidefooting\\loadbox\\f@ur\\outsidefooting\\buildlin + \\else\\hfil\\ifnum\\footcount>\\z@\\global\\dec\\footcount\\fi\\fi{\rtbr} +\goodbreak +\\resumeheading +\\resumefooting +\% footline is normally a centered page number in font \\tenrm +\\centerfooting{\lftbr}\\tenrm\\folio{\rtbr} + +\% BOX MACROS +\% +\\newdimen\\boxline +\\newdimen\\boxspace +\\boxline .01332in +\\boxspace 5pt +\\newdimen\\depthbox@ +\\def\\boxit#1{\lftbr}\\hbox{\lftbr}\\vrule width\\boxline + \\vbox{\lftbr}\\hrule height\\boxline\\kern\\boxspace + \\hbox{\lftbr}\\kern\\boxspace + \\vbox{\lftbr}\\halign{\lftbr}\\hfil##\\hfil\\cr\\st + \\kern\\boxspace{\rtbr}\% + \\kern\\boxspace\\hrule height\\boxline{\rtbr}\% + \\vrule width\\boxline{\rtbr}{\rtbr} +\\def\\centerbox#1{\lftbr}\\vskip\\abovedisplayskip + \\centerline{\lftbr}\\boxit{\lftbr}#1{\rtbr}{\rtbr}\% + \\vskip\\belowdisplayskip{\rtbr} +\\def\\textbox#1{\lftbr}\\depthbox@=\\dp\\strutbox\\advance\\depthbox@ by .4\\p@ + \\ifvmode\\indent\\fi\\setbox\\z@\\hbox{\lftbr}\\vrule + \\vbox{\lftbr}\\hrule\\hbox{\lftbr}\\kern\\p@#1\\strut\\kern\\p@{\rtbr}\ + \\vrule{\rtbr}\\lower\\depthbox@\\box\\z@{\rtbr} + +\% HP2680A and HP2688A COPY CONTROL MACROS \% NOTE 66 +\% +\\newcount\\oldcopy\\newcount\\copycnt +\\def\\copy@{\lftbr}\\globalspecial{\lftbr}HP2688A,HP2680A COPIES \\number\\copy +\\def\\selectcopycount{\lftbr}\\afterassignment\\copy@\\copycnt{\rtbr} +\\def\\copieson{\lftbr}\\global\\count\\copycnt=\\oldcopy\\copy@{\rtbr} +\\def\\copiesoff{\lftbr}\\global\\count\\copycnt=1 \\copy@{\rtbr} +\\def\\copies{\lftbr}\\afterassignment\\copieson\\global\\oldcopy{\rtbr} +\\copycnt=1 +\\oldcopy=2 + +\% HP2680A and HP2688A LOGICAL PAGE CONTROL (LPC) MACROS \% NOTE 6 +\% +\\def\\lplist#1{\lftbr}\\globalspecial{\lftbr}HP2688A,HP2680A ILP #1{\rtbr}{\rtb +\\def\\lpdef#1{\lftbr}\\globalspecial{\lftbr}HP2688A,HP2680A LP #1{\rtbr}{\rtbr} +\\newif\\ifempty@\\empty@true +\\newcount\\lpcount@\\newcount\\nextlp@ +\\def\\selectlpcounter#1{\lftbr}\\lpcount@#1 \\setlpcount@{\lftbr}\\the\\lpcount +\\def\\setlpcount@#1{\lftbr}\\globalspecial{\lftbr}HP2688A,HP2680A ELP #1{\rtbr} +\\def\\lpageto{\lftbr}\\eject\\afterassignment\\lpeject@\\nextlp@{\rtbr} +\\def\\ppageto{\lftbr}\\eject\\afterassignment\\lpage@\\nextlp@{\rtbr} +\\def\\lpeject@{\lftbr}\\nextlp@=-\\nextlp@\\lpage@{\rtbr} +\\def\\lpresume{\lftbr}\\eject\\nextlp@=\\z@\\lpage@{\rtbr} +\\def\\lpreset{\lftbr}\\eject\\nextlp@=33 \\lpage@ \\nextlp@=\\z@{\rtbr} +\\def\\lpexit{\lftbr}\\eject\\nextlp@=34 \\lpage@ \\nextlp@=\\z@{\rtbr} +\\def\\lpage@{\lftbr}\\ifempty@\\count\\lpcount@=\\nextlp@\\global\\empty@false\ +\\everyjob{\lftbr}\\message{\lftbr}Using HP TeX Version \\fmtversion{\rtbr}\\se + +\% TABLE MACROS \% NOTE 6 +\% +\\newcount\\maxcol@ +\\newbox\\topstrutbox \\def\\topstrut{\lftbr}\\unhcopy\\topstrutbox{\rtbr} +\\setbox\\topstrutbox=\\hbox{\lftbr}\\vrule height11pt depth0pt width0pt{\rtbr} +\\newbox\\botstrutbox \\def\\botstrut{\lftbr}\\unhcopy\\botstrutbox{\rtbr} +\\setbox\\botstrutbox=\\hbox{\lftbr}\\vrule height0pt depth4pt width0pt{\rtbr} +\\newdimen\\tableline \\tableline.01332in +\\newskip\\tablespace \\tablespace5pt +\\def\\paragraph#1{\lftbr}\\vbox{\lftbr}\\hrule height\\z@ width\\hsize depth\\z +\\def\\tbar{\lftbr}\\ifvmode\\hrule\\else\\vrule width\\hsize depth\\z@\\fi heig +\\def\\uptoks@{\lftbr}\\inc\\cntA@\\inc\\cntB@ + \\ifnum\\cntA@<\\count19 \\ifnum\\cntB@<\\count19 \\else\\err@\\fi\\else\\er +\\def\\err@{\lftbr}\\errmessage{\lftbr}Columns too wide for tabular format{\rtbr +\\def\\bump@{\lftbr}\\ifnum\\cntC@<\\maxcol@\\inc\\cntC@\\uptoks@\\fi{\rtbr} +\\def\\tableformat#1{\lftbr}\\tablelet\\just@\\just@\\relax\\parse@#1~\\done@~{\ +\\def\\tablerow#1{\lftbr}\\tablelet\\bbar@\\wbar@\\endrow@\\parse@#1~\\done@~{\r +\\def\\tablebar#1{\lftbr}{\lftbr}\\let\\topstrut\\relax\\let\\botstrut\\relax\\t + \\tablerow{\lftbr}#1{\rtbr}{\rtbr}{\rtbr} +\\def\\tablelet#1#2#3{\lftbr}\\let\\b@#1\\let\\w@#2\\let\\f@#3\\cntA@\\count15 \ + \\cntC@\\z@\\let\\parse@=\\parseline@\\ifhmode\\par\\else\\nointerlineskip\\ + \% NOTE 74 +\\def\\just@#1{\lftbr}\\let\\b@\\tform@\\let\\w@\\tform@\\maxcol@\\z@\\let\\tabl + \% NOTE 75 +\\def\\tform@#1{\lftbr}\\tform@@#1~{\rtbr} +\\def\\tform@@#1#2~{\lftbr}\\uptoks@\\toks\\cntA@{\lftbr}#1{\rtbr}\\dimen\\cntB@ +\\def\\bbar@#1{\lftbr}\\beginrow@{\lftbr}#1{\rtbr}\\vrule width\\tableline\\vrul +\\def\\wbar@#1{\lftbr}\\beginrow@{\lftbr}#1{\rtbr}\\kern\\tableline\\vrule width +\\def\\beginrow@#1{\lftbr}\\let\\b@\\vbar@\\let\\w@\\ibar@\\setbox\\z@=\\hbox\\b + \\parindent\\z@\\leftskip\\tablespace\\rightskip\\tablespace\\let\\span=\\sp +\\def\\endrow@{\lftbr}\\kern-\\dimen\\cntB@\\egroup\\tablejust@{\lftbr}\\unhbox\ +\\def\\vbar@#1{\lftbr}\\futurelet\\lookahead@\\cs@#1~\\vrule width\\tableline{\r +\\def\\ibar@#1{\lftbr}\\futurelet\\lookahead@\\cs@#1~\\kern\\tableline{\rtbr} +\\def\\cs@#1~{\lftbr}\\ifx\\span@\\lookahead@#1~\\else\\span@\\@ne#1~\\fi\\lower + \% NOTE 84 +\\def\\parseline@#1~{\lftbr}\\ifx\\done@#1\\let\\parse@\\f@\\else\\let\\p@ss\\pa + \\p@ss#1|\\done@|\\fi\\parse@{\rtbr} +\\def\\parsecol@#1|{\lftbr}\\def\\parsemode@{\lftbr}\\ifx\\done@\\lookahead@\\w@ + \\let\\p@ss\\lastp@ss\\else\\b@{\lftbr}#1{\rtbr}\\fi\\p@ss{\rtbr}\% + \\futurelet\\lookahead@\\parsemode@{\rtbr} +\\def\\lastp@ss#1|{\lftbr}{\rtbr} +\\def\\span@#1#2~{\lftbr}\\bump@\\hsize\\dimen\\cntB@\\edef\\x@{\lftbr}\\the\\to + \\for\\count@=2to#1do\% + {\lftbr}\\bump@\\advance\\hsize\\dimen\\cntB@\\advance\\hsize\\tableline + \\setbox\\z@=\\x@{\lftbr}\\topstrut#2\\botstrut{\rtbr}{\rtbr} + +\% SECTION AND HEADING MACROS \% NOTE 8 +\% +\\newcount\\basehead\\basehead=\\count10 +\\advance\\count10by4 \% This allocates 4 counters for head counters +\\newcount\\hdlevel +\\def\\setlevelno#1{\lftbr}\\hdlevel=0 \\cntA@=\\basehead\\sethead@0#1.-1.\\head +\\def\\sethead@#1.{\lftbr}\\ifnum-1=#1 \\let\\next@=\\relax\\else\\let\\next@=\\ + \% NOTE 90 + \\ifnum\\hdlevel<4 \\inc\\hdlevel\\inc\\cntA@\\count\\cntA@=#1\\fi\\fi\\next +\goodbreak +\\def\\head#1{\lftbr}\\ifnum#1>\\hdlevel\\uplevel@{\lftbr}#1{\rtbr}\\else + \\hdlevel=#1\\cntA@=#1\\advance\\cntA@\\basehead\\fi + \\inc{\lftbr}\\count\\cntA@{\rtbr}\\head@{\rtbr} +\goodbreak +\\def\\uplevel@#1{\lftbr}\\inc\\hdlevel\\cntA@=\\hdlevel + \\advance\\cntA@\\basehead\\count\\cntA@=0 + \\ifnum\\hdlevel=#1 \\else\\uplevel@{\lftbr}#1{\rtbr}\\fi{\rtbr} +\goodbreak +\\def\\head@{\lftbr}{\lftbr}\\inc\\basehead\\xdef\\levelno{\lftbr}\\the\\count\\ + \\for\\cntB@=\\tw@ to\\hdlevel do{\lftbr}\\inc\\basehead + \\xdef\\levelno{\lftbr}\\levelno.\\the\\count\\basehead{\rtbr}{\rtbr}{\r +\goodbreak +\\setlevelno{\lftbr}0{\rtbr} +\\newtoks\\firstlevelhead \\def\\headA@{\lftbr}\\head\\@ne\\the\\firstlevelhea +\\newtoks\\secondlevelhead \\def\\headB@{\lftbr}\\head\\tw@\\the\\secondlevelhe +\\newtoks\\thirdlevelhead \\def\\headC@{\lftbr}\\head\\thr@@\\the\\thirdlevelh +\\newtoks\\fourthlevelhead \\def\\headD@{\lftbr}\\head\\f@ur\\the\\fourthlevelh +\\def\\level#1#2{\lftbr}\\def\\title{\lftbr}#2{\rtbr}\% + \\ifcase#1\\relax\\or\\headA@\\or\\headB@\\or\\headC@\\or\\headD@\\fi{\rtbr} +\\firstlevelhead{\lftbr}\\vfill\\eject\\vbox to1.5in{\lftbr}{\rtbr}\\centerline{ + \\vskip1.0in\\ctswrite{\lftbr}\\vrule height20pt width0pt\\tenbf\\title{\rtb +\\secondlevelhead{\lftbr}\\need.75in\\bigskip\\leftline{\lftbr}\\twelvebf\\level + \\medskip\\ctswrite{\lftbr}\\hskip15pt\\tenrm\\title{\rtbr}{\rtbr} +\\thirdlevelhead{\lftbr}\\need.6in\\medskip\\leftline{\lftbr}\\tenbf\\levelno\\e + \\ctswrite{\lftbr}\\hskip30pt\\tenrm\\title{\rtbr}{\rtbr} +\\fourthlevelhead{\lftbr}\\need.5in\\leftline{\lftbr}\\tenrm\\levelno\\enspace\\ + \\ctswrite{\lftbr}\\hskip45pt\\tenrm\\title{\rtbr}{\rtbr} + +\% CONTENTS FILE MACROS +\% +\\newwrite\\cnts@ +\\newif\\ifnocts@\\nocts@true +\\newtoks\\topofcontents +\\newtoks\\botofcontents +\\let\\content@=\\let\% \% NOTE +\\def\\ctswrite#1{\lftbr}\\ifnocts@\\openout\\cnts@=\\jobname*[*]. \\nocts@false + {\lftbr}\\def\\_{\lftbr}\\kern.06em \\vbox{\lftbr}\\hrule width.3em{\rtbr}{\ + \\edef\\a@{\lftbr}\\write\\cnts@{\lftbr}\\content@{\lftbr}#1{\rtbr}{\lftbr}\ +{\lftbr}\\catcode`\\@=12 \\gdef\\content@ #1#2{\lftbr}\\need.5in\\lline{\lftbr}# +\\def\\contents{\lftbr}\\ifnocts@\\else\\closeout\\cnts@\\null\\supereject + \\begingroup\\pageno\\m@ne\\null\\the\\topofcontents\\input\\jobname*. + \\the\\botofcontents\\eject\\endgroup\\nocts@true\\fi{\rtbr} +\\topofcontents{\lftbr}\\noheading\\vskip1in plus1fil + \\centerline{\lftbr}\\fourteenbf Table of Contents{\rtbr}\\vskip1in plus1fil +\\botofcontents{\lftbr}\\vfil{\rtbr} + +\% FOOTNOTES AND INSERTIONS +\% +\\def\\vfootnote#1{\lftbr}\\insert\\footins\\bgroup + \\interlinepenalty\\interfootnotelinepenalty + \\splittopskip\\ht\\strutbox \% top baseline for broken footnotes + \\splitmaxdepth\\dp\\strutbox \\floatingpenalty\\@MM + \\realhsize\\leftskip\\z@skip \\rightskip\\z@skip + \\baselineskip1\\baselineskip + \\textindent{\lftbr}#1{\rtbr}\\footstrut\\futurelet\\next\\fo@t{\rtbr} +\\newcount\\notenumber +\\def\\resetnotes{\lftbr}\\global\\notenumber=0 {\rtbr} +\\def\\note{\lftbr}\\global\\inc\\notenumber\\footnote{\lftbr}$^{\lftbr}\\the\\n +\\def\\midinsert{\lftbr}\\@midtrue\\p@gefalse\\@ins{\rtbr} +\\def\\@ins{\lftbr}\\par\\begingroup\\setbox\\z@\\vbox\\bgroup\\realhsize\\divid + \% NOTE 102 +\goodbreak +\\def\\endinsert{\lftbr}\\egroup\\count@-100 \% finish the \\vbox + \\ifp@ge\\else\\dimen@\\ht\\z@\\advance\\dimen@\\dp\\z@ + \\advance\\dimen@12\\p@\\multiply\\dimen@-\\nocol@ + \\advance\\dimen@-\\pagetotal\\advance\\dimen@\\pagegoal + \\ifdim\\dimen@<\\z@\\@midfalse\\else\\count@100 \\fi\\fi + \goodbreak + \\if@mid \\balance@ + \\global\\setbox\\contrb@\\vbox{\lftbr}\\unvbox\\contrb@\\bigskip\\box\\z@ + \\else\\insert\\topins{\lftbr}\\penalty\\count@ \% floating insertion + \\splittopskip\\z@skip\\splitmaxdepth\\maxdimen\\floatingpenalty\\z@ + \\ifp@ge \\divide\\vsize\\nocol@ \\dimen@\\dp\\z@ + \\vbox to\\vsize{\lftbr}\\unvbox\\z@\\kern-\\dimen@{\rtbr}\% depth is zero + \\else \\box\\z@\\nobreak\\bigskip\\fi{\rtbr}\\fi\\endgroup{\rtbr} +\goodbreak + +\% COLUMN MACROS \% NOTE 104 +\% +\\def\\BEGINtwocolumns{\lftbr}\\multicol@\\tw@{\rtbr} +\\def\\BEGINthreecolumns{\lftbr}\\multicol@\\thr@@{\rtbr} +\\def\\ENDtwocolumns{\lftbr}\\balance@\\goal@\\divide\\endgroup\\newtotal@\\begi +\\let\\ENDthreecolumns=\\ENDtwocolumns +\\def\\balance{\lftbr}\\balance@\\newtotal@{\rtbr} +\\def\\balance@{\lftbr}\\par{\lftbr}\\let\\ifreal@=\\iffalse\\eject{\rtbr}{\rtbr +\\def\\newtotal@{\lftbr}{\lftbr}\\each@{\lftbr}\\the\\toks\\count@{\rtbr} + \\ifold@\\insert\\hacker@{\lftbr}{\rtbr}\\prevtotal@\\pagetotal-\\dimen@\\fi +\\def\\multicol@#1{\lftbr}\\ifnum\\nocol@>\\@ne\\errset{\lftbr}You can't have co + within columns. \\string\\start{\lftbr}\\blockname@{\rtbr} ignored{\rtbr + \\else\\balance@\\nocol@=#1\\goal@\\multiply\\advance\\hsize\\columnspace + \\divide\\hsize#1\\advance\\hsize-\\columnspace + \\multiply\\vsize#1\\brokenpenalty\\z@ + \\each@{\lftbr}\\multiply\\count\\count@\\nocol@\\multiply\\skip\\count@\\no + \\newtotal@\\global\\dimen@=\\baselineskip\\baselineskip\\dimen@ plus\\dimen + +\\message{\lftbr}output routines{\rtbr} + +\% OUTPUT ROUTINES \% NOTE 10 +\% +\\newbox\\contrb@ \\newbox\\out@ +\\newdimen\\columnspace +\\columnspace=.5in +\\let\\ifreal@=\\iftrue +\\newcount\\nocol@ \\nocol@=1 +\\newinsert\\hacker@ +\\def\\ifold@{\lftbr}\\ifvoid\\contrb@\\else{\rtbr} +\\def\\ifcol@{\lftbr}\\ifnum\\nocol@=\\@ne\\setbox\\out@=\\box\\@cclv \\else{\rt +\\def\\setboxA@{\lftbr}\\inc\\cntA@\\setbox\\cntA@{\rtbr} +\\def\\boxA@{\lftbr}\\inc\\cntA@\\box\\cntA@{\rtbr} +\\def\\each@#1{\lftbr}\\for\\count@=\\count19 to254 do{\lftbr}#1{\rtbr}{\rtbr} +\\def\\unglue@#1{\lftbr}\\setbox#1=\\vbox{\lftbr}\\unvbox#1{\rtbr}{\rtbr} +\\def\\realhsize{\lftbr}\\advance\\hsize\\columnspace\\multiply\\hsize\\nocol@ + \\advance\\hsize-\\columnspace{\rtbr} +\\output{\lftbr}\\hpoutput{\rtbr} + +\goodbreak +\\def\\hpoutput{\lftbr}\\splittopskip=\\topskip + \\setbox\\hacker@=\\box\\voidb@x + \\ifvoid\\contrb@\\dimen@=\\ht\\@cclv + \\else\\prevtotal@\\advance\\dimen@\\ht\\@cclv\\fi + \\ifreal@\\realoutput@\\else\\fakeoutput@\\fi + \\each@{\lftbr}\\global\\toks\\count@\\ifvoid\\count@{\lftbr}{\rtbr}\\else{\ + +\\def\\realoutput@{\lftbr}\\ifcol@\\splitcol@\\split@\\setheight@\\setout@ + \\unvbox\\@cclv \\penalty\\outputpenalty\\fi + \\setbox\\@cclv=\\pagestuff@{\lftbr}{\rtbr}\\each@{\lftbr}\\divide\\skip\\co + \\realhsize\\divide\\vsize\\nocol@\\leftskip\\z@\\rightskip\\z@ + \\plainoutput\\global\\empty@true + \\global\\count\\lpcount@=\\nextlp@\\ifnum\\nextlp@>32 \\global\\nextlp@\\z@ + +\\def\\fakeoutput@{\lftbr}\\unglue@{\lftbr}\\@cclv{\rtbr}\\global\\let\\ifreal@= + \\ifcol@\\dimen@=\\baselineskip + \\dimen@=\\ifnum\\nocol@>2 2\\dimen@ \\else 1.1667\\dimen@ \\fi + \\advance\\dimen@\\ht\\@cclv\\splitcol@{\lftbr}\\box\\@cclv{\rtbr}\\set + \\dimen@=\\dp\\out@\\global\\setbox\\contrb@=\\pagestuff@{\lftbr}\\vskip-\\ + +\\def\\makeheadline{\lftbr}\\vbox to\\z@{\lftbr}\\vskip-22.5\\p@ + \\lline{\lftbr}\\vbox to8.5\\p@{\lftbr}{\rtbr}\\the\\headline{\rtbr}\\vss{\rtb +\\def\\makefootline{\lftbr}\\baselineskip24\\p@\\lline{\lftbr}\\the\\footline{\r + +\\def\\pagecontents{\lftbr}\\ifvoid\\topins\\else\\unvbox\\topins\\fi + \\unvbox\\@cclv \% open up \\box255 + \\ifvoid\\footins\\else \% footnote info is present + \\vskip\\skip\\footins + \\footnoterule + \\unvbox\\footins\\fi + \\ifr@ggedbottom\\vfil\\fi{\rtbr} + +\\def\\splitcol@#1{\lftbr}\\divide\\dimen@\\nocol@\\cntA@=\\count14 + \\for\\count@=\\tw@ to\\nocol@ do{\lftbr}\\setboxA@=\\split@{\rtbr}\\setboxA +\\def\\split@{\lftbr}\\ifvoid\\@cclv\\vbox{\lftbr}\\lline\\hfil\\vfil{\rtbr}\\el +\\def\\setheight@{\lftbr}\\ifold@\\setmax@\\fi{\rtbr} +\\def\\pagestuff@#1{\lftbr}\\vbox{\lftbr}\\ifold@\\unvbox\\contrb@\\medskip\\fi\ +\\def\\setout@{\lftbr}\\cntA@=\\count14 \\setbox\\out@=\\vbox{\lftbr}\\hbox + {\lftbr}\\for\\count@=\\tw@ to\\nocol@ do{\lftbr}\\boxA@\\hskip\\columnspace +\\def\\setmax@{\lftbr}\\dimen@=\\z@ \\cntA@=\\count14 + \\for\\count@=\\@ne to\\nocol@ do{\lftbr}\\inc\\cntA@\\unglue@{\lftbr}\\cntA + \\ifdim\\ht\\cntA@>\\dimen@ \\dimen@=\\ht\\cntA@\\fi{\rtbr}\% + \\for\\count@=\\@ne to\\nocol@ do{\lftbr}\\setbox\\cntA@ + =\\vbox to\\dimen@{\lftbr}\\unvbox\\cntA@\\ifr@ggedbottom\\vss\\fi{\rtbr +\\def\\prevtotal@{\lftbr}\\dimen@=\\medskipamount + \\advance\\dimen@\\ht\\contrb@\\multiply\\dimen@-\\nocol@{\rtbr} +\\def\\goal@#1{\lftbr}\\ifdim\\pagegoal=\\maxdimen\\else + \\dimen@=\\pagegoal#1\\dimen@\\nocol@\\pagegoal\\dimen@\\fi{\rtbr} + + +\\catcode`@=12 \% NOTE 112 +\finish{verbatim} +\bye diff --git a/obsolete/macros/mathematica/CHANGES b/obsolete/macros/mathematica/CHANGES new file mode 100644 index 0000000000..89b0249bdc --- /dev/null +++ b/obsolete/macros/mathematica/CHANGES @@ -0,0 +1,65 @@ +Record of changes to the tex-mathematica tools +============================================== + +See file README for information about these tools. + +Dan Dill dan@chem.bu.edu [128.197.30.18] + + + +Version 1.1 -> 1.2, 2/27/1991 +----------------------------- + + Texinfo documentation is now available, and the command C-c h now runs Info +on it. The source is tex-mma.texinfo, the Info file is tex-mma.info, and the +TeX formatted compressed PostScript is tex-mma.ps.Z. + + The name of the LaTeX description/example source has been changed to +tex-mma-j.tex and tex-mma-j.bib, the the TeX formatted compressed PostScript +is tex-mma-j.ps.Z. The name of the TeX example source has been changed to +tex-mma-tex.tex. + + Several changes have been made at the request of The Mathematica Journal, +which will publish the material contained in tex-mma-j.tex. The changes +replace user-visible occurances of mma with mathematica: + + 1. M-x tex-mma becomes M-x tex-mathematica + 2. \begin{mma} becomes \begin{mathematica} + 3. \end{mma} becomes \end{mathematica} + 4. \input mma10pt becomes \input mathematica10pt + 5. \input mma12pt becomes \input mathematica12pt + 6. \documentstyle[mma,... becomes \documentstyle[mathematica,...] + +Related to this, the file mmacommon.tex has been changed to mathematica.tex. +I hope these changes do not cause too much inconvenience. + + An error encountered when using LaTeX later than 2 May 90 has been +corrected. I had been using an older LaTeX. See comment in mathematica.sty +if you are using an older LaTeX, as the default works only with LaTeX 2 May 90 +or later. + + + +3/5-6/1991 +---------- + Startup commands plain-tex-mathematica and latex-mathematica added, to +explicitly select mode. + + Add commands C-c a and C-u C-c a to evaluate *all* cells of a document. + + +3/10/1991 +--------- + Add \mathematicafile{<...>} to print verbatim contents of file <...>. + + +Version 1.2 -> 1.3 4/22/1991 +--------------------------- + Don't start Mathematica until needed. + Bind tex-mma-recenter to C-c l. + Adapt/add code for generic TeX/Mathematica interface. + Renamed many functions. + Add tex-mma-assemble-package (C-c m) to assemble packages from cells. + Add shell command tex-mma-assemble-package to assemble packages in Emacs + batch mode. + Add tex-mma-assemble-cell (C-u C-c m) to assemble a single cell. diff --git a/obsolete/macros/mathematica/README b/obsolete/macros/mathematica/README new file mode 100644 index 0000000000..9b783e7ff6 --- /dev/null +++ b/obsolete/macros/mathematica/README @@ -0,0 +1,222 @@ +TeX/Mathematica is a set of tools that provide facilities of +Mathematica Notebooks in a UNIX environment, under GNU Emacs. They +permit interaction between a text and a Mathematica buffer and, if +desired, the use of TeX/LaTeX to annotate Mathematica-based +explorations and programs. Inclusion of Mathematica-generated +graphics in TeX/LaTeX documents printed using PostScript is +supported. The tools also support the automatic generation of +Mathematica packages from Mathematica documents. + +With these tools one can interactively develop and refine teaching and +research documents. The interactive nature of the tools encourages +Mathematica-based exploration as a natural part of the writing +process. + + +Getting TeX/Mathematica +*********************** + +The TeX/Mathematica tools are available from Internet host +`chem.bu.edu' [128.197.30.18] by anonymous `ftp' in directory +`/pub/tex-mathematica'. The author can be reached at Internet address +`dan@chem.bu.edu'. + +The `ftp' directory contains four files + + * `README', which duplicates the information + in this node. + + * `CHANGES', which describes changes that have been made. + + * `tex-mma-j.ps.Z', the compressed PostScript documentation/example. + + * `tex-mma.tar.Z', the TeX/Mathematica distribution kit (includes the + first three files). + + +LaTeX description of TeX/Mathematica +==================================== + +The PostScript document `tex-mma-j.ps.Z' is derived from the LaTeX +description of TeX/Mathematica. Transfer the document from the +`ftp' directory in binary (image) mode and then print it with + + zcat tex-mma-j.ps.Z | lpr + +The source for this document is the LaTeX file `tex-mma-j.tex' and +the BibTeX file `tex-mma-j.bib'. You can use `tex-mma-j.tex' +as a LaTeX example of a TeX/Mathematica document. + + +Files in the distribution kit +============================= + +The file `tex-mma.tar.Z' contains the TeX/Mathematica +tools. These consist of the following: + +Documentation things: + + + * `tex-mma.texinfo', Texinfo documentation of TeX/Mathematica + + * `tex-mma.ps.Z', compressed Texinfo document + formatted with TeX into PostScript + + * `tex-mma.info', Info file + (this file) + for on-line Emacs documentation + + * `tex-mma-j.tex', LaTeX description/example of TeX/Mathematica + + * `tex-mma-j.bib', BibTeX file for `tex-mma-j.tex' + + * `tex-mma-j.ps.Z', compressed LaTeX documentation formatted in + PostScript + + * `sin3x.ps', Mathematica-generated figure included in + `tex-mma-j.tex' + + * `tex-mma-tex.tex', TeX example of TeX/Mathematica + + * `texinfo.tex', TeX macros used to format `tex-mma.texinfo' + + +GNU Emacs things: + + * `tex-mma.el', the `tex-mathematica' package + + * `math.el', David Jacobson's Mathematica mode package (*Note math::) + + * `unix-tex-mma.el', example implementation of cell-type `unix' + + +TeX/LaTeX things: + + * `mathematica10pt.tex', TeX 10 point TeX/Mathematica interface + + * `mathematica12pt.tex', TeX 12 point TeX/Mathematica interface + + * `mathematica.sty', LaTeX generic TeX/Mathematica interface + + * `mathematica.tex', macros for formatting TeX/Mathematica + documents, used by the preceding files + + +Shell scripts and Mathematica commands for processing graphics, and +shell script and template file for Mathematica package assembly: + + * `PSTeX.m', generates `psfig'-adapted graphics to a file, without + PostScript prolog + + * `addBBox', shell script called by `PSTeX' + + * `PSTeXpro.m', generates `psfig'-adapted graphics to a file, with + PostScript prolog + + * `addBBoxpro', shell script called by `PSTeXpro' + + * `addBBoxpro.awk', `awk' script called by `addBBoxpro' + + * `PSFile.m', generates full-page graphics to a file, with PostScript + prolog + + * `tex-mma-assemble-package', shell script for Mathematica package + assembly + + * `tex-mma-assemble-package.tmplt', Emacs Lisp template used by + `tex-mma-assemble-package' + + +This is from Cameron Smith (*Note addBBox::): + + * `mma.pro.1.2', Mathematica Version 1.2 PostScript prolog. Note + that a different prolog will be needed for Mathematica Version 2.0. + This will be available from the author (*Note Getting tex-math::). + +These are from Trevor Darrell's `psfig/tex' distribution (*Note psfig::): + + * `psfig.pro', `psfig' PostScript prolog. + + * `psfig.sty', `psfig' for LaTeX. + + * `psfig.tex', `psfig' for TeX. + + +Installation procedure +====================== + + 1. Transfer `tex-mma.tar.Z' in binary (image) mode into an empty + directory, and extract its contents, with (for example) + + zcat tex-mma.tar.Z | tar xvf - + + 2. Install the Info on-line documentation file `tex-mma.info' where + your Emacs looks for Info file. If desired, add a pointer to it to your + Info directory file so that it will appear in the Info top-level menu. + The source for `tex-mma.info' is `tex-mma.texinfo'. The file + `tex-mma.ps.Z' is the compressed TeX formatted version, made + using the `texinfo.tex' included in the distribution (see the + beginning of `tex-mma.texinfo' for directions). The formatted + version can be printed with + + zcat tex-mma.ps.Z | lpr + + It contains complete details of the TeX/Mathematica tools. + + 3. Edit `tex-mma.el' to + + * set `tex-mma-process-string' to the command + you use to start Mathematica (default is `math'); + + * set `tex-mma-info-file' to point to where you put the file + `tex-mma.info' + + 4. Run `M-x byte-compile' on `tex-mma.el' and store the resulting + `tex-mma.elc' wherever your GNU Emacs looks for files. + + 5. Add the following to the GNU Emacs initialization file + + (autoload 'tex-mathematica "tex-mma" + "Major-mode for interaction with Mathematica from TeX." t) + (autoload 'plain-tex-mathematica "tex-mma" + "Major-mode for interaction with Mathematica from TeX." t) + (autoload 'latex-mathematica "tex-mma" + "Major-mode for interaction with Mathematica from TeX." t) + + 6. If you do not have David Jacobson's Mathematica mode package + `math.el', install it following the instructions in `math.el'. + If you do have `math.el', make sure your version is at least as + current as the one here, which contains changes necessary for use with + `tex-mma.el'. Make sure you place the file `math.el' (or, + better, the byte-compiled file `math.elc') where your Emacs looks + for libraries, so that `tex-mma.elc' will be able to load it if it + is not already loaded. + + 7. Edit `mathematica.tex' (at the end) to specify where the PostScript + prolog files `psfig.pro' and `mma.pro.1.2' will be, and put the + prolog files there. + + 8. If you are using a LaTeX *earlier* than 2 May 90, edit + `mathematica.sty' according to the comments there. + + 9. Put `mathematica.tex', `mathematica.sty', `mathematica12pt.tex', + `mathematica10pt.tex', `psfig.sty', and `psfig.tex' where your + TeX looks for macro files. + + 10. Put `PSTeX.m', `PSTeXpro.m' and `PSFile.m' where your + Mathematica looks for packages. + + 11. Edit `addBBoxpro' to specify which `awk' you use (default is GNU + awk, `gawk'). + + 12. Edit `tex-mma-assemble-package' to set the variables `bindir', `tmpdir' + and `tmpdirsed' for your system, as described in the comments there + and then place `tex-mma-assemble-package.tmplt' in `bindir'. + + 13. Put `addBBox', `addBBoxpro', `addBBoxpro.awk' and + `tex-mma-assemble-package' on your system's binary search path, make sure + they have execute status, and then execute `rehash'. + + +You should be ready to go: Startup emacs, run `M-x tex-mathematica' +and have fun. diff --git a/obsolete/macros/mathematica/tex-mma-j.ps.gz b/obsolete/macros/mathematica/tex-mma-j.ps.gz Binary files differnew file mode 100644 index 0000000000..fc01316989 --- /dev/null +++ b/obsolete/macros/mathematica/tex-mma-j.ps.gz diff --git a/obsolete/macros/mathematica/tex-mma.tar_z b/obsolete/macros/mathematica/tex-mma.tar_z Binary files differnew file mode 100644 index 0000000000..b383cc805b --- /dev/null +++ b/obsolete/macros/mathematica/tex-mma.tar_z |