diff options
Diffstat (limited to 'macros/hptex/hptex.doc')
-rw-r--r-- | macros/hptex/hptex.doc | 751 |
1 files changed, 0 insertions, 751 deletions
diff --git a/macros/hptex/hptex.doc b/macros/hptex/hptex.doc deleted file mode 100644 index 4611efaa45..0000000000 --- a/macros/hptex/hptex.doc +++ /dev/null @@ -1,751 +0,0 @@ -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. |