diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 19:44:05 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 19:44:05 +0000 |
commit | d318611dd6f23fcfedd50e9b9e24620b102ba96a (patch) | |
tree | 8b9eef82ca40fdd5a8deeabf07572074c236095d /contrib/mom | |
parent | Initial commit. (diff) | |
download | groff-upstream.tar.xz groff-upstream.zip |
Adding upstream version 1.23.0.upstream/1.23.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'contrib/mom')
48 files changed, 75654 insertions, 0 deletions
diff --git a/contrib/mom/BUGS b/contrib/mom/BUGS new file mode 100644 index 0000000..6e7a828 --- /dev/null +++ b/contrib/mom/BUGS @@ -0,0 +1,985 @@ + -*- text -*- + Copyright 2004-2020 Free Software Foundation, Inc. + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. + +Assume that anything that doesn't work or behaves oddly is a bug. +The documentation should be taken as the authoritative source for +how things ought to be. + +Post to the groff mailing list with bug reports, questions and +suggestions, or contact me directly at: + + peter@schaffter.ca + +If writing me directly, please include the word "groff" or "mom" in +the Subject line or you risk my spam filters nuking your message. + +--Peter Schaffter + +==================================================================== + +Version 2.5_c +============= + +#R_MARGIN not being respected in PAGEWIDTH. +---Fixed--- + +Version 2.5_b +============= +PAGINATE not restoring page numbers after being disabled. +---Fixed--- + +Sentence space not being restored after a terminating REF. +---Fixed--- + +CODE <OFF> not always correctly restoring point size of text +afterwards. +---Fixed--- + +BLANKPAGE broken when columns are enabled. +---Fixed--- + +Registers #FROM_COVERTITLE and #FROM_DOC_COVERTITLE not being +cleared in macro COLLATE. +---Fixed--- + +DROPCAP not calculating distance to FOOTER trap correctly. +---Fixed--- + +Version 2.5 +=========== + +Page offset not being restored correctly after CENTRE_BLOCK. +---Fixed--- + +LEFT_HANG intermittently causing type to be raised out of position. +---Fixed--- + +$CHAPTER_STRING default not being set in COPYSTYLE. +---Fixed--- + +When using mom bare metal, NEWPAGE depositing a superfluous blank +page unless B_MARGIN has been set explicitly. +---Fixed--- + +Version 2.4-4_e +=============== + +LANDSCAPE arg to PAPER not being appended to $PAPER so PAPER +isn't picking it up when PAPER is called at the top of DEFAULTS. +---Fixed--- + +BLANKPAGE with NULL arg printing incorrect page number when page +numbering is restored. +---Fixed--- + +BLANKPAGE with DIVIDER arg spitting out one too many pages. +---Fixed--- + +Hyphens appearing mid-line in runon footnotes. +---Fixed--- + +Version 2.4-4_b +=============== +SMALLCAPS introducing a small indent equal to a wordspace when +called after PP. +---Fixed--- + +Version 2.4-4_a +=============== +BIBLIOGRAPHY_SPACING not being respected. +---Fixed--- + +Version 2.4-4 +============= +Default PAPER settings overwriting user-entered PAGEWIDTH, +PAGELENGTH, and PAGE. +---Fixed--- + +QUOTE and BLOCKQUOTE indents shifting after page breaks. +---Fixed--- + +Version 2.4-3 +============= +TYPEWRITE: Inline \*[PREV] calling \*[ULX] without explicitly +returning to TYPEWRITER font. +---Fixed--- + +%u field in refer databases not triggering ref*type 0 (Internet +reference). +---Fixed--- + +Idem field of refer databases overwriting first occurrence of author +name. +---Fixed--- + +Captions not fully respecting TYPEWRITE. +---Fixed--- + +COVERTEXT not fully respecting TYPEWRITE. +---Fixed--- + +Changes to font family inside a COVERTEXT block not being reset to +default document family when the block is terminated. +---Fixed--- + +Unwanted linespace before labels above tables. +---Fixed--- + +Label number of AUTOLABEL_TABLES incrementing by 2 instead of 1. +---Fixed--- + +Page number of the page before a bibliography not printing. +---Fixed--- + +Version 2.4-1 +============= +tbl not respecting pre-tbl fill mode. +---Fixed--- + +COVER and DOC_COVER not always capturing pertinent title and +copyright. +---Fixed--- + +Version 2.4 +=========== +BIBLIOGRAPHY output broken. +---Fixed--- + +Version 2.3 +=========== +.PS/.PE not working at start of documents without a preceding .PP. +---Fixed--- + +Output of .PS/.PE not centered correctly (the default). +---Fixed--- + +Version 2.2-a +============= +Omitting postfixed digit from ROMAN/roman args to LIST not +generating warning. +---Fixed--- + +FOOTERS causing infinite loop. +---Fixed--- + +Version 2.2 +=========== +COVERTITLE not picking up style params. +---Fixed--- + +FORCE_RECTO and BLANKPAGES not co-operating. +---Fixed--- + +TOC and LISTS_OF leading not being picked up and/or adjusted +properly. +---Fixed--- + +PDF outline putting first doc ahead of TOC in PDF outline when +TOC is auto-relocated and COVER has the BLANKPAGE arg. +---Fixed--- + +Version 2.1-b +============= +Toggling of pagination broken. +---Fixed--- + +HEADERS_AND_FOOTERS printing footer at top of second page instead of +printing header unless FOOTER_ON_FIRST_PAGE is called. +---Fixed--- + +Version 2.1-a +============= + +Some part-by-part formatting changes to headers not being recognized +when global header options have been invoked. +---Fixed--- + +Version 2.1 +=========== + +UNDERSCORE adding an extra space after underlined text. +---Fixed--- + +bug #44903: 2 column output misplaced +---Fixed--- + +PDF_IMAGE and FLOAT environments conflicting. +---Fixed--- + +DROPCAP picking up color from last call to .gcolor. +---Fixed--- + +PAD not working properly with mom's indent macros. +---Fixed--- + +Margin notes not respecting differing recto-verso margins. +---Fixed--- + +Graphical object macros not clearing fill/no-fill registers and +modes. +---Fixed--- + +LIST ALPHA emitting a number register to output. +---Fixed--- + +HEADER_PLAIN and FOOTER_PLAIN broken. +---Fixed--- + +Version 2.0-c_1 +=============== + +.TS with no H causing FN_OVERFLOW warning when there are footnotes +on same page. +---Fixed--- + +PDF_TARGET "descriptive text" not printing. +---Fixed--- + +Version 2.0-c +============= + +Endnotes page offset wrong if (BLOCK)QUOTE last macro before +ENDNOTES. +---Fixed--- + +Character translation of diacritics from lowercase to caps broken. +---Fixed--- + +Spacing not being restored (.ns/.rs) after a HEADING that falls at +the top of the page. +---Fixed--- + +Version 2.0-b +============= + +When line numbering is enabled, line numbers after QUOTE being reset +to '0'. +---Fixed--- + +When line numbering is enabled for QUOTE and BLOCKQUOTE, style +params for line numbers not being applied. +---Fixed--- + +TOC overprinting footer when it comes immediately after +BIBLIOGRAPHY. +---Fixed--- + +TOC page numbers not printing when positioned at top of page. +---Fixed--- + +TOC page numbers not always incrementing properly. +---Fixed--- + +Version 2.0-a_1 +=============== + +QUOTE_INDENT not being respected in FLOAT. +---Fixed--- + +SMARTQUOTES OFF broken. +---Fixed--- + +DOCHEADER_LEAD being reset to default after first chapter. +---Fixed--- + +Forced floats that fit on the page causing floats on the next page +to be treated as forced. +---Fixed--- + +Forced floats not advancing on the page after output if the float is +forced to the next page, causing running text to overprint. +---Fixed--- + +Text after deferred floats not being shimmed properly. +---Fixed--- + +Tables that span pages overprinting first two lines of table on new +pages. +---Fixed--- + +PDF_IMAGE not respecting .IL, .IR, or .IB. +---Fixed--- + +AUTOLEAD not sticking after .START. +---Fixed--- + +Version 2.0-a +============= + +Footer not printing on first page when HEADERS_AND_FOOTERS enabled. +---Fixed--- + +$AUTHOR string missing. +---Fixed--- + +Version 2.0 +=========== + +tbl macros .TS/.TE not working unless inside a float. +---Fixed--- + +Terminal period after page number(s) in refer items not always +printing. +---Fixed--- + +==================================================================== + +Version 1.6-a +=========== + +Footnotes on last page of columnar docs before a TOC getting printed +at bottom of last column, not current column. +--Fixed--- + +HEADER_RULE OFF turning off headers completely. +---Fixed--- + +FINIS depositing a blank final page when invoked too close to the +bottom margin. +---Fixed--- + +Version 1-6 +=========== + +ENDNOTE_STRING_CAPS not disabling caps when arg given. +---Fixed--- + +Superfluous blank line before paragraphs with paraheads. +---Fixed--- + +Paraheads causing line numbering to overprint two line numbers. +---Fixed--- + +Endless loop when DOC_LEAD_ADJUST is disabled. +---Fixed--- + +In the case where the list doesn't fit the page, -mom inserts +an extra page with one word and a warning about "environment stack +underflow" and then continues on the following page. +--Fixed-- + +PRINTSTYLE TYPEWRITE not respecting TYPEWRITER_FAMILY when DOCTYPE +is LETTER. +---Fixed--- + +Version 1.5-d +============= + +ILX not quitting left indents set within ITEM. +---Fixed---- + +Version 1.5-c +============= + +COVER_COUNTS_PAGES incrementing pagenum by 1 too many. +---Fixed--- + +HEADER/FOOTER_RECTO strings vanishing when the default CAPS option +is turned off. +---Fixed--- + +TQ not removing QUAD arg from cleared tabs. +---Fixed--- + +DROPCAP_OFF trap remaining in effect after dropcap has been +processed. +---Fixed--- + +PARAHEAD_SIZE 0 resulting in 0-sized type! +---Fixed--- + +When DOC_LEAD is called to change document leading in collated docs, +document leading steadily increases by small amounts at each +subsequent call to COLLATE. +---Fixed--- + +(DOC_)COVER requests annihilating families used in various document +elements if those families differ from the document's overall +family. +---Fixed--- + +Covers and doccovers not always respecting null pagenumbering. +--Fixed--- + +Version 1.5-b +============= +Use of \E*[UC] and \E*[LC] inside strings for HDRFTR_RECTO and +HDRFTR_VERSO breaking headers. +---Not fixable. CAPS option added to HDRFTR_RECTO/VERSO to + accommodate situations where capitalized reserved + strings(\*[$TITLE], \*[$AUTHOR], etc) are desired.--- + +COLLATE depositing a blank page if last output line before it falls +at the bottom of running text. +---Fixed--- + +PRINTSTYLE TYPEWRITE not setting $FAMILY or $FONT or $PP_FT, with +consequences for COLLATE. +---Fixed--- + +FOOTNOTE_MARKERS OFF not disabling footnote markers if used before +START. +---Fixed--- + +1st footnotes with overflow vanishing altogether with an +"automatically ending diversion 'FN_OVERFLOW' on exit" warning. +---Fixed--- + +Right hand margin notes vanishing when an RH margin note overflows +to the next output page. +---Fixed (I think)--- + +Doc bug; \*[S<size>] escape incorrectly typed as \*S[<size>] in the +section on mom's inlines. +---Fixed--- + +Paragraphs inside blockquotes not being spaced when .PARA_SPACE is +active. +---Fixed--- + +Version 1.5-a +============= +Indenting of references (collected with .REF) on endnotes pages when +endnote numbers are right-aligned appears to be backwards; the +first line of the reference is indented more than the second. +---Fixed--- + +Version 1.5 +=========== +DROPCAP not printing the dropcap letter at all in PRINTSTYLE +TYPEWRITE, nor when DROPCAP is used (accidentally?) after a valid +"first" paragraph. +---FIXED--- + +DROPCAP going into an infinite loop when groff called with the +-Tascii switch. +---FIXED--- + +SHIFT_LIST, when used anywhere but with a top-level list, is killing +list indents for every list level *returned to* afterward. +---Fixed--- + +TOC page number for heads and subheads that get bumped to next page +(because of .ne) off by 1. +---Fixed--- + +Moving backwards in nested lists not setting the proper indent. +---Fixed--- + +Default linebreak color missing in om.tmac. +---Fixed--- + +Some links in macrolist.html not pointing to html "name" owing to +missing # in link names. +---Fixed--- + +Version 1.4-b +============= +Line lengths and indents not always being respected in LIST. +---Fixed--- + +CAPS OFF, called inline with \*[CAPS OFF] not working. +(Added two new inlines, \*[UC] and \*[LC], to do the job.) +---Fixed--- + +When type is set after START but no docelement tag given, the +expected family ($DOC_FAMILY) and font (R) are not in effect. +---Fixed--- + +When DOCTYPE is CHAPTER and .TITLE is omitted after .COLLATE, the +title vanishes from page headers/footers. +---Fixed--- + +Version 1.4-a +============= +In collated documents, when using a different HEADER_FAMILY, +if BLANKPAGE <n> is given after COLLATE (but before START) all +subsequent text is set in the HEADER_FAMILY face rather than the +standard text face. +---Fixed--- + +Document title identification string missing on endnotes pages when +the endnote marker style is LINE. +---Fixed--- + +Space between endnote items on endnotes output pages not being +inserted. +---Fixed--- + +Version 1.4 +=========== +Invoking .FOOTERS isn't automatically putting pagination in the top +margin. +---Fixed--- + +.PP_FONT after .COLLATE not being respected. +---Fixed--- + +$SAVED_PP_FT not being fed to .FT in .PP after .COLLATE +---Fixed--- + +.CODE OFF not always restoring previous family and font. +---Fixed--- + +.ITEM, when not in a list, should do nothing. +---Fixed--- + +Version 1.3-e_3 +=============== +ENDNOTES is not, by default, printing headers on endnotes pages. +---Fixed--- + +Processing of the "Endnotes" title for the TOC is putting the +page number 1 line too high and not inserting leader. +---Fixed--- + +Collated docs not respecting $PP_FT (it's picking up the font from +the pagenumber font) +---Fixed--- + +Docheader spacing sometimes depositing too much space between +various docheader elements in TYPEWRITE when DOCTYPE is DEFAULT or +NAMED. +---Fixed--- + +When COLUMNS are on, subheads that are deferred to the next +column/page because there isn't enough room for the s/h and one +line of text are causing columns to overprint. +---Fixed--- + +HDRFTR_LEFT printing one line too high when .HEADER_COLOR is used. +---Fixed--- + +DOCTITLE link broken in the docs. +---Fixed--- + +Version 1.3-e_2 +=============== +TOC formatting incorrect when the pound/number sign (#) is used in +head elements. +---Fixed--- + +[Documentation]: The docs erroneously state that TOC control macros +can be entered anywhere in a file prior to invoking TOC (they should +be entered before START). +---Fixed--- + +Page numbers in the bottom margin being printed too low on output +pages preceding an invocation of COLLATE or macros that call it. +---Fixed--- + +A superfluous blank, numbered page is being generated by COLLATE +(and macros that call it, namely TOC and ENDNOTES) when the last +line of output text before it falls on the last valid baseline of +an output page. Same thing happening occasionally with normal +document termination. +---Fixed--- + +SHIFT_LIST not being observed when moving *back* to a shifted list; +the list is reverting to the left margin. +---Fixed--- + +NUMBER_SUBHEADS not working with TYPESET when PARA_SPACE is on. +---Fixed--- + +Version 1.3-e_1 +=============== +Missing #COLLATE register (accidentally wiped out) creating various +problems with .COLLATE (missing headers, leading increasing +slightly each time .COLLATE invoked, etc). +---Fixed--- + +Version 1.3-e +============= +mom failing during groff build while processing +examples/typesetting.mom +---Fixed--- + +Windows user reports COLLATE fails with a bottom margin error +(generated by mom). +---Fixed--- + +Version 1.3-d +============= +Small error in the examples of output in the "Footnotes and +Punctuation" documentation section. +---Fixed---- + +PAD_LIST_DIGITS/SHIFT_LIST broken when the enumerator type is +roman or ROMAN. +---Fixed--- + +COLLATE wiping out <doc element>_FAMILY settings. +---Fixed--- + +DOC_LEAD_ADJUST OFF not being observed when COLLATE is invoked. +---Fixed--- + +DROPCAP setting the dropcap too high in initial paragraph after a +COLLATE. +---Fixed--- + +Version 1.3-c +============= +Owing to a superfluous "if" in the FONT macro, the "missing font" +routine is being silently ignored. +---Fixed--- + +FOOTNOTE, used in nofill mode, adds a linebreak between the +marker and the text of the footnote. +---Fixed--- + +Version 1.3-b +============= + +ITALIC_MEANS_ITALIC not being respected when DOCTYPE LETTER. +---Fixed--- + +Underlining of italic passages in PRINTSTYLE TYEPWRITE not spanning +pages. +---Fixed--- + +PRINTSTYLE TYPEWRITE depositing extra space on new pages above quotes +that span pages. +---Fixed--- + +MN doesn't accept OFF, QUIT, END, X, etc. +---Fixed--- + +Margin notes that begin flush with the last line of text on a page +are running down the same page, instead of the remainder being +collected and output on the next. +---Fixed--- + +MN sometimes erroneously dropping margin notes near the bottom of +a page, even when they'd fit. (MN-shifted not being removed by +MN-top.) +---Fixed--- + +MN_INIT not accepting "" args for default values. +---Fixed--- + +Documentation for margin notes erroneously states that the first +(optional) argument can be either "ragged" or "symmetric". S/b +"RAGGED" or "SYMMETRIC". +---Fixed--- + +Use of "" to tell MN_INIT to use the default for any specific +argument in the arg list broken. +---Fixed--- + +Paragraphs that begin with a "smart" double quote when the +preceding paragraph has no corresponding close quote (i.e. dialogue +passages containing multiple paragraphs) are starting off with a +close quote. +---Fixed--- + +Version 1.3-a +============= + +First baseline of type isn't going where it's supposed to when the +docheader is turned off. +---Fixed--- + +Version 1.3 +=========== + +Persistent error in html coding of docs (<nobr> tag). +---Fixed--- + +Version 1.2-f +============ + +Multiple line subheads near page bottom sometimes printing one line +of subhead at page bottom, and subsequent lines on next page. +---Fixed--- + +Post-quote spacing still wonky when paragraph spacing is turned on. +---Fixed--- (for good would be nice) + +RULE not always resetting quad and quad value. +---Fixed--- + +Version 1.2-e +============= + +Some string definitions in om.tmac had superfluous spaces after +them (e.g. $COVERTITLE). +---Fixed--- + +Spacing under quotes not correct when paragraph spacing is turned +on. +---Fixed--- + + +First word of last line before footnotes is getting chopped. +---Fixed--- + +Version 1.2-d +============= + +HEADER_FAMILY not changing header family. +---Fixed--- + +FAMILY, after COLLATE, not changing the family of all and every +page element or tag. +---Fixed--- + +Heads and subheads at the start of docs are printing one line lower +than they should. +---Fixed--- + +Gaps are appearing at the bottom of pages when there's a linebreak +followed by a subhead. +---Fixed--- + +When LS is invoked after a single text line at the top of a page +containing a T_MARGIN (set with T_MARGIN or PAGE), mom is performing +spacing adjustments as if the first line doesn't exist. +---Fixed--- + +Changes made to ALD and LS in version 1.2-c should not apply when +the document processing macros are used. There is a significant +conflict with the internal use of ALD when the docheader is only +one line long (as, for example, when DOCTYPE is CHAPTER). +---Fixed, pending discovery of further conflicts--- + +Version 1.2-c +============= + +Deferred footnotes not always being output, and groff complains +"ending diversion FN_OVERFLOW on exit." +---Fixed--- + +First .LS call after a top margin has been set (with .T_MARGIN +or .PAGE) causing mom to move off the top margin baseline. Also, +there are conflicts between ALD, LS and T_MARGIN. +---Fixed--- + +DROPCAP not properly restoring a running \*[COND] or \*[EXT] after +COND or EXT are given as arguments to DROPCAP. +---Fixed--- + +Version 1.2 +=========== + +.PAD not co-operating with mom's fontstyles, esp. when a full +family+fontstyle is given to .FT. +---Fixed--- + +.DROPCAP -- ditto the above. +---Fixed--- + +Version 1.1.9 +============= + +Footnote markers not resetting properly on new pages when COLUMNS +is enabled. +---Fixed--- + +When overflowed footnote material is the only footnote material on +the page or in the column, no footnotes are output. +---Fixed--- + +The AUTOLEAD used in FOOTNOTE not being disabled after FOOTNOTES +are output, or after PROCESS_FN_LEFTOVER/PROCESS_FN_IN_DIVER. +---Fixed--- + +COL_NEXT and COL_BREAK, when invoked during the last column on a +page, are overprinting the last column instead of breaking to a new +page when there are footnotes in the column. +---Fixed--- + +BR_AT_LINE_KERN not "break-and-spreading" text when used in +justified copy. +---Fixed--- + +Version 1.1.8 +============= + +BLOCKQUOTE_FAMILY not changing blockquote family. +---Fixed--- + +FOOTNOTE, whether in column mode or not, was using +#FN_COUNT_FOR_COLS for all footnote markers and handling. +---Fixed--- + +Deferred footnotes that occurred on the second to last page of +documents not printing. +---Fixed--- + +Version 1.1.7-a +=============== + +Suite number in DOCTYPE LETTER not printing. +---Fixed--- + +Footer elements not always vertically aligning. +---Fixed--- + +Footer rule gap not always correctly observed. +---Fixed--- + +Page numbering, when at top of page, not always falling on +HDRFTR_MARGIN. +---Fixed--- + +Default page numbering style for COPYSTYLE draft is DIGIT instead +of roman. +---Fixed--- + +Hyphens around page numbering when style is DIGIT, ROMAN or ALPHA +not vertically centered. +---Fixed--- + +EXT arg not working with DROPCAP. +---Fixed--- + +DOC_QUAD not automatically set immediately after START +---Fixed-- + +Tabs behaving erratically during document processing. +---Fixed--- + +Version 1.1.7 +============= + +When DOCHEADER OFF <distance> is given, if <distance> falls short +of the top margin of running text, <distance> is not respected and +bottom margin falls low. +---Fixed--- + + +Version 1.1.6-e +=============== + +The " mark (doublequote), when entered while not in document +processing mode (i.e. just straightforward typesetting), outputs +nothing unless SMARQUOTES is invoked explicitly. +---Fixed--- + +Version 1.1.6-c +=============== + +In document processing mode, docs that use *none* of the +docprocessing tags being ignored. +---Fixed--- + +Version 1.1.6-b +=============== + +String tabs not picking up #L_MARGIN when #L_MARGIN not explicitly +set with L_MARGIN, PAPER or PAGE. +---Fixed--- + +Infinite loop when B_MARGIN is set lower than FOOTER_MARGIN during +doc processing. +---Fixed--- + +Version 1.1.6-a +=============== + +Mom partially broken when run with groff 1.19.1. Don't know yet +what this is, whether bad coding in mom, or a problem with 1.19.1. +Only solution for now: run mom 1.1.6 with groff 1.18. +----Fixed--- + +Top margin of endnotes pages after the first endnotes page when +PRINTSTYLE is TYPEWRITE and endnotes single-spacing is turned on +falling one line too high. +---Fixed--- + +Version 1.1.6 +============= + +DOCHEADER OFF (distance) not being respected. +---Fixed--- + +FINIS killing ENDNOTES page numbering and heads. +---Fixed--- + +Version 1.1.5 +============= + +Draft and revision not appearing in page headers. +---Fixed--- + +\*[RULE] not working properly with indents and justified copy. +---Fixed--- + +Post-epigraph spacing in TYPEWRITE causing some first pages to run too +deep. +---Fixed--- + +Spacing of docheaders in TYPEWRITE not always consistent. +---Fixed--- + +Version 1.1.4 +============= + +Blockquotes that span pages running too deep. +---Fixed--- + +Version 1.1.3 +============= + +Footnotes not outputting on final page of document body when ENDNOTES +is invoked. +---Fixed--- + +Pad not working properly and/or spitting out warnings when fill mode is +on. +---Fixed--- + +Version 1.1.2 +============= + +PAGENUM_STYLE being ignored unless entered after START. +---Fixed--- + +Version 1.1 +=========== + +String tabs not working as advertised when set from within other tabs. +---Fixed--- + +.COLLATE sometimes depositing a header on the first page of a subsequent doc. +---Fixed with workaround BREAK_QUOTE--- + +.UNDERLINE_QUOTES in PRINTSTYLE TYPEWRITE not on by default as advertised. +---Fixed--- + +.TI not cooperating with other indent styles. +---Fixed--- + +.WS and .SS not cooperating. +---Fixed--- + +.RW and .EW not working. +---Fixed--- + +======================================================================== + +KNOWN PROBLEMS +-------------- + +The indent macros from the typesetting macro set may not always +perform well in conjunction with the document processing macros, +especially when documents are set in columns. Mostly, this is the +result of inadequate testing. There are only so many "who'd want to +do this anyway?" scenarios I can think of on my own. + +Epigraphs at the bottoms of page may sometimes run exactly one line +deeper than they should. The alternative (from my point of view) is +to have them run 1 line shorter than they should. The problem stems +from the fact the epigraphs are leaded differently than all other text, +and there's only so much adjusting that can be done with the whitespace +surrounding them to get them to bottom align. Since stylistically, +epigraphs should never appear at the bottom of a page/column without at +least some running text beneath them in order to make sense of the role +they play in page layout, this not likely to be fixed for some time. + diff --git a/contrib/mom/ChangeLog b/contrib/mom/ChangeLog new file mode 100644 index 0000000..82e5dbb --- /dev/null +++ b/contrib/mom/ChangeLog @@ -0,0 +1,1788 @@ +2023-06-15 + + * om.tmac: Enclose all calls to \D't n' in \Z + +2023-03-01 G. Branden Robinson <g.branden.robinson@gmail.com> + + [mom]: Generate test script even if we'll skip it. + + * examples/test-mom.sh.in: Check availability of required + pdfinfo(1) and pdfimages(1) commands at test time; skip if they + aren't present. + * mom.am [!HAVE_PDFTOOLS]: Generate the test script even if + these tools aren't available. + +2023-02-18 G. Branden Robinson <g.branden.robinson@gmail.com> + + * mom.am (uninstall_mom): Clean more fastidiously; try to remove + the configured `pdfdocdir` in the event it is empty, but do not + fail if it isn't. (It can be a directory shared with other + groff components; we don't know in what order the uninstall + targets will serialize, but the last one run should succeed.) + +2023-02-02 + * om.tmac (UNDERSCORE, UNDERSCORE2): Add PREFIX and SUFFIX + arguments so surrounding punctuation can be protected from + underscoring. + +2023-01-16 + * om.tmac (PRINTSTYLE): Abort with message if nroff is called on + a document using PRINTSTYLE TYPESET. + + Fixes <https://savannah.gnu.org/bugs/?63581>. Thanks to Gene + for the report. + +2022-11-16 + + * om.tmac (PAPER): Adjust #R_MARGIN to work with papersize.tmac. + +2022-10-23 G. Branden Robinson <g.branden.robinson@gmail.com> + + * om.tmac (FORCE_RECTO): Use backslash before newline when + starting multi-line conditional block. + +2022-09-02 + + * examples/mom-pdf.mom: Fixes missing parameter to \*[SIZE] at + line 457. + + * om.tmac: Fixes CODE <anything> not restoring point size + correctly. The point size was being stored in a number register + instead of a string. + + * BUGS: Updated. + + Fixes <https://savannah.gnu.org/bugs/?62996>. + +2022-08-29 G. Branden Robinson <g.branden.robinson@gmail.com> + + * mom.am (MOMPDFMOM): Pass `PDFMOMBIN` '-K utf8', not '-k', in + case 'configure' didn't find uchardet. + + Fixes <https://savannah.gnu.org/bugs/?62975>. Thanks to Bjarni + Ingi Gislason for the report. + +2022-05-31 + + * Make mom emit a warning and abort when tbl(1) data present + without a corresponding -t on the command line. + +2022-05-20 G. Branden Robinson <g.branden.robinson@gmail.com> + + * momdoc/appendices.html: Reflect file rename in groff + distribution: the name of the file mapping Adobe Glyph List + names to groff special character identifiers for text (as + opposed to "special") fonts has changed from "textmap" to + "text.map". + +2022-05-20 G. Branden Robinson <g.branden.robinson@gmail.com> + + * mom.am (MOMPROCESSEDEXAMPLEFILES): Include "typesetting.pdf" + only if `HAVE_URW_FONTS`, since the document demands them. + +2022-05-20 G. Branden Robinson <g.branden.robinson@gmail.com> + + * mom.am: Rename `BUILD_PDFDOC` to `USE_GROPDF`. + +2022-05-01 G. Branden Robinson <g.branden.robinson@gmail.com> + + * mom.am ($(MOMPROCESSEDEXAMPLEFILES)): Depend on new name for + devpdf stamp file. + +2022-04-12 Ingo Schwarze <schwarze@openbsd.org> + + Delete the harmful, ill-designed, buggy, and essentially + unmaintained and untested --with-doc option of the configure + script. See the NEWS file for more details on the rationale. + + * mom.am: Delete one INSTALL_SHIPPED_HTML and one BUILD_EXAMPLES + conditional and use BUILD_PDFDOC instead of BUILD_PDFEXAMPLES. + +2021-03-29 G. Branden Robinson <g.branden.robinson@gmail.com> + + * mom.am: Eliminate `MOM_TFLAG` and `MOM_PFLAG` Make macros; + they were expanded in only one place. + (MOMPDFMOM): Track rename of Make macro `TFLAG` to `MFLAG`. + +2022-03-26 G. Branden Robinson <g.branden.robinson@gmail.com> + + * mom.am (MOMPROCESSEDEXAMPLEFILES): Drop dependency on gnu.eps. + No mom document appears to require this file; it came in with + the initial Automake file for mom in commit 4d84d0f1d, 27 + January 2015, and may have been a copy-and-paste error. + +2021-10-21 G. Branden Robinson <g.branden.robinson@gmail.com> + + * mom.am (mom_test_template): Pull file name into a new + variable. + (EXTRA_DIST, contrib/mom/examples/tests-mom.sh): Use it. + (contrib/mom/examples/tests-mom.sh): Build more quietly; + prefix rule with `$(AM_V_GEN)`. Also run `chmod` conditionally. + +2021-10-04 + + * version 2.5 release (see NEWS) + + * removed orphaned stubs for abandoned cutaround feature from + om.tmac + +2019-12-26 + + * added PREFIX_CHAPTER argument to HEADING_STYLE + + * added TOC_HEADING; single line, non-pagenumbered insertions into + the TOC + +2019-11-03 + + * templates added for setting up copyright pages + + * updated mom.am to include the templates when building + pdfs in mom/examples + +2018-11-24 + + * version 2.4 release (see NEWS) + +2018-09-05 + + * improved grap support + +2018-03-04 + + * version 2.3 release (see NEWS) + +2018-02-28 Werner LEMBERG <wl@gnu.org> + + * mom.am (.mom.pdf): Use $(GROFF_V). + +2017-11-04 G. Branden Robinson <g.branden.robinson@gmail.com> + + * mom.am: Drop unnecessary -M flag; build tree has what it needs. + +2017-10-29 Bjarni Ingi Gislason <bjarniig@rhi.hi.is> + + * om.tmac-u: Fix typo in register reference. + + Fix bug https://savannah.gnu.org/bugs/?51608. + +2015-08-22 Bernd Warken <groff-bernd.warken-72@web.de> + + * groff_mom.7.man: Rename `groff_mom.man'. + + * mom.am: Include renaming. + +2015-08-05 Bernd Warken <groff-bernd.warken-72@web.de> + + * mom.am: Add `Last update'. Setup Emacs mode. + +* Sun Jul 26 2015 + + o Fix to header part-by-part changes. + +* Mon Apr 27 2015 + + o version 2.1-a release (see NEWS) + +* Fri Apr 4 2015 + + o groff_mom.man: Make it work in compatibility mode. + +* Sat Feb 28 2015 + + o Added an ADJUST argument to QUOTE and BLOCKQUOTE to facilitate + optical centering tweaks + +* Sat Feb 21 2015 + + o Expanded scope of _STYLE macros to headers/footers and + page numbers + +* Thu Feb 5 2015 + + o Version 2.1 release (see NEWS) + + o overhaul of control macro handling + + o overhaul of cover and docheader management + + o general code cleanup to remove redundancies and reduce size of + om.tmac + + o changes to example files to demonstrate new features + + o copyrights updated in all files + +* Tue Jan 14 2015 + + o Added a new example in French, mon_premier_doc.mom + + o Added README-fr.txt, a translation in French of the README.txt file + + o Makefile.sub: generation of mon_premier_doc.mom, installation of + README-fr.txt + +* Sun Nov 30 2014 + + o Added auto underscoring, caps, and color to TOC header + (first-page titles) + + o Added vertical page positioning control macros for TOC and + ENDNOTES headers (first-page titles) + +* Tue Nov 25 2014 + + o Tweak so collated, non-chapter docs with the same author + don't require .AUTHOR "" to skip printing author in docheader + +* Wed Oct 29 2014 + + o Makefile.sub: KFLAG to run pdfmom with -k + + o Set utf-8 preconv coding tag in examples/typesetting.mom and + examples/letter.mom + +* Mon Oct 20 2014 + + o Changes to caption/label/source quadding strategy. + +* Wed Sep 03 2014 Bernd Warken <groff-bernd.warken-72@web.de> + + o all files in contrib/mom source: Copying and Emacs setting. + + o contrib/mom source/ChangeLog: Repair file. The file runs now in + Emacs change-log mode. + +* Tue Aug 12 2014 + + o Makefile.sub (stamp-strip): Set LANG=C LC_ALL=C when calling + `sed'. + + This prevents a build error on OS X. + +* Thu Apr 3 2014 + + o Makefile.sub: Set LC_ALL=C when calling $(PDFMOM). + + Doing so in an UTF-8 locale with $PERL5OPT=-C set avoids warnings + like + + utf8 "\xF5" does not map to Unicode at\ + [.]src/devices/gropdf/gropdf line 1359, <PD> line 63. + Malformed UTF-8 character (unexpected end of string)\ + in substitution (s///) at\ + [.]src/devices/gropdf/gropdf line 1315, <PD> line 63. + +* Sat Mar 29 2014 + + o Makefile.sub: Handle examples separately, controlled by + $(make{_,_install_,_uninstall_}examples). + +* Wed Mar 26 2014 + + o Added user settable space to PARA_SPACE. + +* Tue Mar 11 2014 + + o Makefile.sub (MAN7): Do not install empty `mom.7' (tiny change). + + A mom(7) manual got briefly added, then promptly removed again in + 9f38f05e58d31eda1affce01d1144760b5f48096 for integration into + groff_mom(7), but it was forgotten to remove it from the list of + manual pages to install. + +* Fri Feb 28 2014 + + o Reworked handling of pdf-images. Preprocessor support expanded + to include eqn and pic. Spacing and placement of tbl output + improved. Fixed floats in columns. Added facilities for captions + and labels for pdf-image, eqn, pic, and tbl. Added auto-generated + "Lists of". + +* Wed Oct 30 2013 + + o Expanded and improved float/tbl handling. + +* Sat Sep 14 2013 + + o .TS/.TE extended to support multi-page tables with headers. + +* Sat Aug 24 2013 + + o Restored reserved.html to toc.html in docs. + +* Tue Aug 20 2013 + + o Integrate mom.7 into the man-page groff_mom.7 + +* Tue Aug 20 2013 + + o New man page mom.7 + +* Sun Aug 11 2013 + + o Updated documentation concerning refer usage + + o Replaced REF_STYLE and REF<bracket-style> macros with warnings. + +* Wed Jun 19 2013 + + o groff_mom.man: Fix inappropriate use of .UR/.UE. + +* Fri Jan 4 2012 + + o Makefile.sub (install_data): Create directory for PDF + documentation. This is necesssary in case GhostScript is not + available, and no other PDF files have been created yet. + +* Sun Dec 30 2012 + + o Makefile.sub (install_data): Fix symlink. + Patch from Elias Pipping <pipping@lavabit.com>. + +* Thu Sep 20 2012 + + o Simplify environment handling. + +* Fri Aug 31 2012 + + o Version 2.0 release. Changes documented in version-2.html in + the html documentation. + + o Added new documentation, Producing PDFs with groff and mom. + +* Sat Feb 18 2012 + + o Added choice to have DOCTYPE NAMED <name> underscored or not + when PRINTSTYLE TYPEWRITE + + o Doc fix to DOCTYPE NAMED underlining entry + +* Thu Sep 8 2011 + + o Added register #SUBHEAD, analogous to #HEAD, to fix excessive + spacing between SUBHEADs and SUBSUBHEADs. + +* Sun Feb 20 2011 + + o Added support for sub-subheads from patch supplied by Petr Man. + +* Fri Feb 11 2011 + + o Moved register #UNADJUSTED_DOC_LEAD to top of TRAPS macro. + +* Fri Nov 19 2010 + + o Added utility macro, SINGE_SPACE, for PRINTSTYLE TYPEWRITE + +* Sat Jan 22 2011 + + o groff_mom.man (FILES): Fix directory locations. + +* Sun Oct 3 2010 + + o Complete overhaul of refer macros and documentation + + o Inclusion of Tadziu Hoffman's postscript code for underlining + +* Wed Aug 18 2010 + + o Complete overhaul of documentation + +* Thu Aug 5 2010 + + o Changes to COVER and DOCCOVER for greater flexibility in + placement of elements + + o Improved handling of MISC info on cover pages for greater style + flexibility + + o Added _FAMILY, _FONT, _SIZE and _COLOR control macros for CODE + +* Mon July 6 2009 + + o Added CLOSING_INDENT and SIGNATURE_SPACE to DOCTYPE LETTER + macros. + +* Sun Jun 14 2009 + + o DROPCAP handling changed; uses local vertical motions now + instead of .mk/.rt. + + o Added macro SUPERSCRIPT_RAISE_AMOUNT + + o Added registers and strings to keep track of .RW and .EW and the + amounts passed to them. + +* Sat May 2 2009 + + o Fixed error in docs: COVERS_COUNT_PAGES changed to + COVER_COUNTS_PAGES. Ditto DOC_COVERS_COUNT_PAGES. + +* Fri May 1 2009 + + o Fixed PARAHEAD size so it properly adds the value of + \*[$PH_SIZE_CHANGE] to \n[#DOC_LEAD]. + +* Sat Jan 17 2009 + + o Changed FAMILY, FT and PT_SIZE requests in DO_COVER to groff + primitives (fam, ft and ps respectively). Fixes (DOC_)COVER bug + where (DOC_)COVER was resetting families and fonts of various + document elements (QUOTE, BLOCKQUOTE, etc) to document default. + + o Removed (excessive) cleanup of (doc)cover and docheader strings + and registers from macro CLEANUP. Changes to mom's default style + for these document elements now survive COLLATE. + +* Fri Jan 2 2009 + + o Added possibility of quadding docheader left or right, as well + as center, which remains the default. + +* Wed Dec 31 2008 + + o Default definition of $QUOTE0 and $QUOTE1 in om.tmac changed + from \[dq] to \[lq] and \[rq], respectively. + +* Sun Jan 4 2009 + + o Makefile.sub (CLEANADD): Add om.tmac-s. + +* Tue Dec 30 2008 + + o Doc fixes in toc.html + + o Control of null pagenumbering of covers passed to \n%; formerly + handled by \n[#PAGE_NUM_ADJ] + +* Tue Dec 23 2008 + + o Added a CAPS option to HDRFTR_RECTO and HDRFTR_VERSO to allow + capitalization of reserved strings when designing recto and/or + verso headers. Fixed docs accordingly. + +* Sun Nov 30 2008 + + o Added .nr #DIVER_DEPTH 0 to end of PRINT_PAGE_NUMBER to ensure + that #DIVER_DEPTH=0 + + o Moved string definition of $FONT in macro FT to top of macro. + + o Moved string definition of $FAMILY in macro FAMILY to top of + macro. + + o Changed condition generating #NO_BREAK at top of macro COLLATE + from .if ( \\n[.t] < \\n[.v] ) \{ .nr #NO_BREAK 1 \} to .if ( + (\\n[.t]-1) <= \\n[.v] ) \{ .nr #NO_BREAK 1 \} + + (Bottom-of-page trap is tripped 1 unit below last valid baseline) + (not on it.) + +* Tue Nov 25 2008 + + o Commented out what appears to be a superfluous and destructive + resetting of #VARIABLE_FOOTER_POSITION at line 13347 in FOOTNOTE + macro. For now, fixes the "vanishing first footnote with some + overflow" bug. + +* Mon Oct 6 2008 + + o Added a bit to .PP to accommodate .PP_FONT I when PRINTSTYLE is + TYPEWRITE and ITALIC_MEANS_ITALIC + +* Mon Jun 30 2008 + + o Removed spurious 'sp |\\n[MN-curr-pos]u from MNbottom-right, + prior to re-invoking traps. Hopefully, fixes vanishing RH margin + notes bug. + +* Sun Mar 16 2008 + + o Added missing spaced paras bit in blockquotes. + +* Tue Jan 22 2008 + + o Fixed indent handling of refer items in endnotes. + + o Amendations to refer.html. + + o Removed dead email address from groff_mom.man. + +* Fri Jan 04 2008 + + o groff_mom.man: Replace .URL with .UR/.UE. Replace .MTO with + .MT/.ME. Insert `\:' in URLs where appropriate. Don't include + www.tmac. + +* Wed Sep 12 2007 + + o Fixed an oversight in DROPCAP that meant when DROPCAP needed to + be ignored, the dropcap letter itself was dropped from running + text altogether, instead of printing as a normal part of text. + + o Added an .if n clause to DROPCAP to prevent mom from going into + an infinite loop when groff invoked with the -Tascii switch. + +* Wed Jul 25 2007 + + o Did a couple of doc fixes. + + o Added vpt checks at the top of all the graphical object macros. + Basically, only turn vpt's off and on again if they're already + enabled. + +* Wed Feb 14 2007 + + o Moved .ne requests in HEAD and SUBHEAD to top of respective + macros, fixing bug that was gathering the wrong page number for + head and subhead toc entries. + +* Fri Nov 24 2006 + + o Added a default linebreak color (black) + +* Thu Sep 28 2006 + + o Fixed missing #'s in linknames in macrolist.html. + +* Mon Jul 31 2006 + + o Changed all .LLs in LIST to .ll requests. + + o Added new macro, FINIS_STRING_CAPS, to control capitalization of + the finis string. + + o Amended doc section on page set up to include directions for + telling groff about the physical dimensions of printer sheets. + + o Added new arg to BLANKPAGE: NULL. If given, BLANKPAGE does not + increment the page number when outputting a blank page. + + o Added new control macros, COVERS_COUNT_PAGES and + DOC_COVERS_COUNT_PAGES in case user wants covers counted in the + pagination scheme. + + o Added new final arg to COVER and DOC_COVER: BLANKPAGE. + Instructs COVER or DOC_COVER to print a blank page after the + cover. + + o Added new optional args to CODE: BR, BREAK, SPREAD. CODE can + now be called inline; if called as a macro and the user wants a + break or spread, s/he has to supply one of the args. + + o Added new macro, CODE_FAMILY, to set fixed-width family used by + .CODE + + o Made EDITOR an alias of AUTHOR + + o Added optional arguments, COVER or DOC_COVER, to reference + macros that may be used on covers and doc covers, allowing users + greater flexibility in determining exactly what goes on covers and + doc covers without screwing up the doc header or the default page + headers/footers + + o Added macros to control the weight and placement of all + underscore/underline rules used in typesetting and document + processing + + o Added macros for drawing of rules, boxes and circles (ellipses) + + o Added macro, RULE_WEIGHT, to control weight of rules drawn with + \*[RULE] + + o General doc updates, additions, amendations and corrections + + o Reformatted entirety of documentation to be xhtml clean + + o Added inlines \*[UC] and \*[LC] to handle inline caps; corrected + doc entry stating that you can use \*[CAPS] and \*[CAPS OFF]; + chief reason is to allow inline capitalization in strings passed + to header/footer definitions. + +* Fri Jul 7 2006 + + o Changed inline, \*[RULE], so that it always draws the rule one + linespace beneath the last output line. Formerly, \*[RULE] drew + the rule on the baseline of the current output line. + +* Sun Jul 2 2006 + + o Changed UNDERSCORE and UNDERSCORE2 to use groff's \D'l <n> <n>' + line drawing function. + + o Changed RULE to use groff's \D'l <n> <n>' line drawing function. + + o Added RULE_WEIGHT macro, to allow controlling weight of + \*[RULE], expressed in points (including fractional points). + + o Added two new inlines, \*[UC] (all caps) and \*[LC] + (caps/lowercase). These can be used in user-defined header/footer + strings (if \E is used instead of just the backslash by itself) as + well as in normal copy. + +* Sat Jul 1 2006 + + o Added .FAMILY \\*[$DOC_FAMILY] and .FT R to the end of + .DEFAULT_DOCHEADER, .CHAPTER_DOCHEADER and .NAMED_DOCHEADER. + Fixes bug that was causing type which was set after .START when no + docelement tag given to be set in the last family and font used in + the docheader, instead of the expected $DOC_FAMILY and roman font + (R). + +* Fri Jun 30 2006 + + o Updated copyright file + + o Massive documentation cleanup to make docs well-formed xhtml + +* Thu Jun 22 2006 + + o Rewrote portions of TITLE, COVERTITLE, DOCCOVERTITLE, + CHAPTER_TITLE, SUBTITLE and MISC so that when they're called from + .COLLATE, they properly clean out all associated strings and + registers. Fixes the "vanishing $TITLE" bug. + + o Added missing .rm $AUTHORS to .AUTHOR. .as $AUTHORS now always + starts with a clean slate. + +* Wed Jun 14 2006 + + o Added a missing </nobr> tag to docelement.html. + +* Sat Jun 10 2006 + + o In header and footer routines, changed all .FAMILY calls when + .PRINTSTYLE TYPESET to .fam + + o Fixed DOC_FAMILY so that PARAHEAD_FAMILY and LINENUMBER_FAMILY + are properly set to the new value. + +* Fri Jun 9 2006 + + o Re-worked .QUOTE_INDENT so that users can pass it an absolute + value (by adding a scaling indicator to the arg) instead of just a + value relative to the paragraph indent. Fixes bug (oversight?) + that meant QUOTES and BLOCKQUOTES got no indent at all if the + PP_INDENT was 0. Fixed EPIGRAPH_INDENT similarly. + + o Added missing default ENDNOTE_LINENUMBER_FAMILY and _FONT to + DEFAULTS. + +* Thu Jun 8 2006 + + o Changed distance of the underscores used in docheaders when + PRINTSTYLE is TYPEWRITE from the default 2p to 4p. This is to + leave room for the descenders if the strings are caps/lowercase. + +* Wed Jun 7 2006 + + o Added strings $AUTHOR and $AUTHORS. $AUTHOR = $AUTHOR_1 (i.e. + the first arg passed to .AUTHOR); $AUTHORS = a comma-separated + concatenated string of all the args passed to .AUTHOR. + +* Tue Jun 6 2006 + + o Updated docs. + + o Converted all .ig blocks in om.tmac to comment lines beginning + with \#. This so that the comments will be stripped from om.tmac + during make. The groff sources still contain the commented + version of om.tmac, as do the tarballs posted on mom's homepage. + + o Added new macro, HEADERS_AND_FOOTERS, to allow having both + headers and footers on a page. + + o Fixed whitespace around epigraphs after .DOCTYPE CHAPTER + docheaders. + + o Added test in .PP_FONT for existence of $SAVED_PP_FT; if it's + there, remove it (fixes bug that was causing .PP to ignore + .PP_FONT after .COLLATE). Also fixed .PP so that it properly + passes $PP_FT to .FT if $PP_FT has been re-defined to + $SAVED_PP_FT. + +* Sun Jun 4 2006 + + o Added a note about colorizing underscored text in the docs. + +* Wed May 24 2006 + + o Adjusted the .ne value for heads and subheads (again) + +* Sun May 21 2006 + + o In the documentation, removed the section stating that setting + the family, font, pointsize and colour of line numbers wasn't + possible. + + o Updated documentation entry for TOCs to include instructions for + using psselect. + +* Sat May 20 2006 + + o Added string $PRE_CODE_FAM to CODE; fixes bug that kept CODE OFF + from restoring the previous family_font combo + + o Added a test for existence of register #DEPTH to .ITEM; if it + doesn't exist, ignore ITEM + +* Fri May 19 2006 + + o Updated docs + + o Added macro, CODE + + o DOCTITLE, TITLE, CHAPTER_TITLE, SUBTITLE, COVERTITLE and + DOC_COVERTITLE now accept multiple arguments; each is printed on a + separate line in docheaders and on cover pages. Where the macros + also supply reference information to page headers, endnotes and + tables of contents, the args are concatenated. + +* Thu May 18 2006 + + o Changed default DOCHEADER_LEAD to +0 when there's both the + chapter number and a chapter title in DOCTYPE CHAPTER. + Compensated by adding 1/4 of the leading in effect for docheaders + between them. Applies equally similar situations on covers and + doc covers. + +* Mon May 15 2006 + + o Added missing default ENDNOTES_ALLOWS_HEADERS to DEFAULTS. + + o Added missing temporary change of the pad marker from # to ^ to + the toc title collection routine of .ENDNOTES. + + o Added string $SAVED_PP_FT to start of .COLLATE; string is tested + for in .PP + + o Improved testing for $FONT and $PP_FT in DEFAULTS + + o Trivial changes to docheader spacing for doctypes DEFAULT and + NAMED when PRINTSTYLE is TYPEWRITE. + +* Sun May 14 2006 + + o Call to .ne in HEAD moved higher in macro, and .ne's reduced + each by 1. + + o Handling of "how much space is needed for subheads + 1 line of + text" in SUBHEAD changed to a simple .ne. Fixes bug that was + causing overprinting of columns when s/h was deferred to next + page/column. + + o In macro, PRINT_HDRFTR, removed .EOL from clause .if + \\n[#HDRFTR_COLOR]=1 + +* Sat May 13 2006 + + o Fixed broken link to DOCTITLE in docs. + +* Wed Apr 26 2006 + + o Corrected doc entry that stated TOC control macros can be + entered anywhere in a file prior to invoking TOC (TOC control + macros must come before START). + + o Removed spurious .nop from .ie \\n[#PRE_COLLATE]=1 clause in + FAMILY (fixes bug that was causing page numbers on pages before + COLLATE or TOC to be printed too low). + + o Added a test at top of COLLATE to set register #NO_BREAK to 1 if + the distance to the next trap is less than one linespace; used in + NEWPAGE to determine whether to do a 'br or .br. (fixes BUG that + was causing COLLATE, NEWPAGE, and TOC to spit out a blank page + when the last line of text before them happened to fall on the + last valid baseline of the page). + + o Changed pad marker used to format TOC entries to permit use of + the pound/number sign (#) in head elements. + + o New macro, PREFIX_CHAPTER_NUMBER, to allow users to prepend + chapter numbers to the numbering scheme used in head element + numbering. + + o Added missing periods at the ends of head, subhead, parahead + numbers. + + o CHAPTER, with a numeric argument, can now be used to identify + any document as a "chapter" for the purposes of prefixing the + argument to CHAPTER to the numbering scheme of head elements. + + o Fixed alignment of TOC entries. + + o Removed .rr #DOC_HEADER and replaced with + + .if \\n[#DOC_HEADER]=1 \{ .nr #DOC_HEADER 2 \} + + near the end of START. I.e., #DOC_HEADER becomes "2" if + docheaders were on in the previous document. COLLATE tests for 2 + in order to reset #DOC_HEADER to 1 for use in the user-invoked + START that comes after a COLLATE. + + o Added register, #CHAPTER_CALLED, to CHAPTER; tested for in + PREFIX_CHAPTER_NUMBER to determine whether the argument to CHAPTER + can be used to establish a chapter number for chapter number + prefixes in head element numbering. + +* Mon Apr 17 2006 + + o Fixed bug that was causing shifted lists, when returned to, to + revert to the left margin instead of observing the correct + indent+shift for the list. + + o Added a check in LIST so that if user invokes LIST with RETURN, + mom doesn't get confused by the initial `R' (which she was using + to check if the arg to LIST was ROMAN or roman). + + o Replaced an incorrectly copied code block in SUBHEAD that was + preventing SUBHEAD from processing subheads properly when + PARA_SPACE was on. + +* Wed Mar 15 2006 + + o Added a .SHIM after .sp \\n[#DC_LINES]v in .DROPCAP. Fixes + problem of dropcaps in initial paragraphs after COLLATE being set + slightly too high. + + o Added .rr #DOC_LEAD_ADJUST_OFF to .ie clause of DOC_LEAD_ADJUST + and removed .rr #DOC_LEAD_ADJUST_OFF from DEFAULTS (after TRAPS) + so that document leading adjustment (or lack thereof) is + maintained from doc to doc when COLLATE is being used. + + o Added new register, #PRE_COLLATE. The .FAMILY macro is called + several times during initial COLLATE processing, and contained a + stanza that allowed FAMILY, after a collate, to invoke DOC_FAMILY + if #COLLATE=1. This allowed users to use FAMILY after a COLLATE + but before START in a way consistent with the behaviour described + in the docs (namely, FAMILY before START sets the DOC_FAMILY). + Since that functionality is still needed, #PRE_COLLATE instructs + FAMILY not to reset DOC_FAMILY until COLLATE is complete (i.e. + after the break to a new page). #PRE_COLLATE, if set to 1, is + removed at the end of HEADER. + +* Thu, Mar 2 2006 + + o Added control macros for linenumbering family, font, point size + and color + + o Added a NO_SHIM macro + +* Sun Feb 26 2006 + + o Changed .PRINT "\h'\\n[#LIST_INDENT\\n[#DEPTH]]u' in the "ROMAN + I, padded" and "roman i, padded" clauses of ITEM to .PRINT + "\h'\\n[#HL_INDENT\\n[#DEPTH]]u' to fix bug associated with using + both PAD_LIST_DIGITS LEFT and SHIFT_LIST. + +* Fri Feb 24 2006 + + o Removed superfluous "if" from FONT, line 492 + + o Removed #ADD_BREAK register from FOOTNOTE and ENDNOTE, along + with the routines it invoked + + o Added an optional argument, BREAK, to FOOTNOTE OFF and ENDNOTE + OFF, for correct and flexible handling of punctuation and + continued lines when FOOTNOTE or ENDNOTE are called while nofill + mode is active. + + o Created an alias for .so, INCLUDE. + +* Thu Feb 2 2006 + + o Small fix to handling of underlining of italic text spanning + pages in PRINTSTYLE TYPEWRITE. + +* Thu Jan 12 2006 + + o Reworked changing and setting of traps associated with + outputting left and right margin notes. See BUGS. + +* Sat Jan 7 2006 + + o Bracketed outputting of margin notes diversions with .nf/.fi. + +* Fri Jan 6 2006 + + o Corrected docs MN_INIT so that the optional first arg is + properly given as RAGGED | SYMMETRIC + + o Fixed MN_INIT macro routine that reads MN_INIT args into strings + so that the strings are first "initialized" with the @ character + if the corresponding arg is blank. Since MN-init tests for \A and + \B (correctly, I hope) for each of its args, the @ character + should be safe. + +* Tue May 16 2005 + + o momdoc/appendices.html: Add space in shebang, conforming to + portability recommendation in autoconf docs. + +* Thu May 12 2005 + + o Added margin notes capability + + o Added mom-specific refer support; refer calls can be embedded in + running text, sent to footnotes or endnotes, or collected for + output on a bibliography page; also added mom-specific refer + control macros + + o Added bibliography page capability, with full suite of control + macros + + o Added referencing of footnotes and endnotes by line number + + o Added capability to have footnotes run on when footnotes are + being referenced by line number + + o Added a post footnote space option, in case users want a little + space between their footnotes + + o Added ENDNOTE_MARKER_STYLE, so user can choose between endnotes + identified by a numerical marker in the text, or by line number + + o Added control macros to accommodate differing needs for endnotes + identified by line number + + o Added ENDNOTE_TITLE_SPACE, so user can control starting position + of the endnotes page title + + o Extended LIST so that it accepts lowercase alpha, uppercase + roman numeral and lowercase roman numeral enumerators; also added + a "prefix" argument (which comes *after* the separator argument) + + o Changed RESET_LIST so that it can reset a list to any number, + letter, or roman numeral, instead of just 1, a, A, I and i + + o Change to handling of footnote/endnote markers in text; input + lines before FOOTNOTE still require \c, but input line after + FOOTNOTE OFF must be entered as a literal continuation of the line + before FOOTNOTE, including any required word space or punctuation + (this so users can get the footnote marker in text either before + or after the punctuation without hassle) + + o Added QUOTE_AUTOLEAD and BLOCKQUOTE_AUTOLEAD, so user can have + quotes and blockquotes leaded differently from running text + + o Reworked QUOTE and BLOCKQUOTE to accommodate _AUTOLEAD control; + spacing above and below quotes is equalized *on a per quote basis* + (not completely happy with this, but at least it gives users some + flexibility in designing (block)quotes) + +* Fri Mar 18 2005 + + o Added mom.vim to /examples + +* Thu Jan 20 2005 + + o Added \*[TB+] and \*[B] to give inline functionality of .TN and + .EL, respectively. + + o Added SECTION and SECTION_CHAR as aliases of LINEBREAK and + LINEBREAK_CHAR + + o Added a NOBREAK option to PAD, so when PAD is called, it's + possible to instruct mom not to advance on the page. + +* Wed Jan 19 2005 + + o New macro, ADD_SPACE, so that extra space can be added at the + top of a new page in document processing; the .ns call in HEADER + was making additional space impossible + + o Reworked handling of ALD/SPACE/SP and LS when they're used at + the tops of pages during pure (i.e. non-docprocessing) + typesetting. First lines were still wandering. Should also be + more intuitive: ALD after LS advances the specified distance from + the top baseline; LS after ALD doesn't change the position of the + first baseline (i.e. merely sets the lead for the text that + follows). + +* Tue Dec 14 2004 + + o Fixed a small problem with spacing under quotes when paragraph + spacing is turned on. + +* Fri Dec 10 2004 + + o Put all calls in VFP_CHECK inside their own environment. + Without the .ev call, the trap invoked VFP_CHECK was chopping off + the first word of the last line before footnotes. + +* Dec 6 2004 + + o Small fixes to elvis_syntax.new (dealing with strings, \{\ and + \} + + o Changed + .ie \\n[#START] \{\ + .if \\n[#DOC_HEADER]=0 \{ . \} + .\} + in HEAD to + .ie \\n[#START] \{\ + .if \\n[#DOC_HEADER]=0 \{ .RLD 1v \} + .\} + so that HEADs at the start of docs with no docheaders falls on + the correct baseline. + +* Dec 3 2004 + + o Removed spurious parens from if ( \\n[#TRAP_DISTANCE] < + \\n[#DOC_LEAD]*2 ) in SUBHEAD. + +* Oct 14 2004 + + o Reworked the LL macro so that the argument can take a prepended + + or - sign (i.e. the argument is relative to the current line + length). + +* Oct 13 2004 + + o Added an .if \\n(.n=0 if to the ie clause in LS that controls + how mom responds to initial LS invocation at page top if T_MARGIN + has been set. Now, if there's text on the "top" baseline, LS + behaves as expected when invoked afterwards. + +* Oct 11 2004 + + o Added an ie !r#DOCS clause to the processing of "top baseline" + ALDs. ALD is used extensively (internally) in the document + processing macros, and does not need to check--indeed, should not + check--for top baseline placement prior to execution. + +* Sep 29 2004 + + o Additions to elvis_syntax.new + +* Sep 12 2004 + + o Small fixes to the documentation. + +* Aug 21 2004 + + o Removed superfluous second arguments from strings UP, DOWN, FWD + and BCK + +* Aug 8 2004 + + o Version changed from the 1.1.x series to 1.2. All of the + features I originally wanted mom to have originally have been + implemented, and appear to be stable. + + o Major overhaul to the setting of page traps and the handling of + footnotes, both "normal" footnotes and footnotes that occur inside + QUOTE, BLOCKQUOTE and EPIGRAPH. + + o Addition of font "styles" to om.tmac, plus changes to the FAMILY + and FT macros to manage them. New section in the doc appendices + on adding fonts and managing the new font styles. + + o Mom now uses a "fallback font" whenever there's an invalid call + to FAMILY. + + o RW and EW now affect only the font in effect. A change of + family or font disables them. + + o BR_AT_LINE_KERN now properly does a .brp (spread and break) when + used in justified text. + + o NEWPAGE, which used to be an alias for .bp, has been moved into + its own macro, in order to make it more responsive to some unusual + situations. + + o Some changes to elvis_syn.new, including that the file + extensions recognized by elvis now include both .mom and .tmac. + This makes om.tmac much easier to read. + +* Jul 6 2004 + + o FT and FAM(ILY) reworked to take advantage of if S, if F and + \n[.sty] additions to groff (1.19.2). Warnings are emitted if a + style hasn't been registered, or if a font style doesn't exist in + the current family. Invalid .FAM(ILY) calls now use a "fallback" + font" (although no warning is issued); fallback is user-settable + + o New macro, FALLBACK_FONT. Not only controls the fallback font + for invalid family calls, but also controls whether mom aborts on + invalid .FT calls after issuing a warning. + + o RW/EW now affect only the current font (or font style) + + o BR_AT_LINE_KERN now (properly) does a break-and-spread when text + is justified. + + o Fairly extensive list of .sty's added to om.tmac. Hopefully, + this will make life easier for users wishing to add new fonts + and/or entire new families to their groff site-font/devps + directory. + +* Jun 6 2004 + + o Altered kerning slightly for footnote markers in text. Daggers + and double-daggers were getting a bit jammed + +* Jun 3 2004 + + o Rewrote the routines dealing with _FAMILY, _FONT, _SIZE, _COLOR + and _QUAD. A single macro for each checks for the calling alias + (e.g. TITLE_FAMILY in _FAMILY), and performs the appropriate + action. + + o All "COLOUR" aliases of "COLOR", no matter where, have been + removed. + + o Added cover and doc cover page generation. + + o Added reference macros COVERTITLE, DOC_COVERTITLE, MISC and + COPYRIGHT (for use with covers only) + + o Fixed EL and TN so they don't spring page traps; in nofill modes + the preceding input line must be terminated by \c. + + o Added #T_MARGIN_LEAD_ADJ to DO_B_MARGIN, DO_T_MARGIN and NEWPAGE + to ensure accurate placement of first lines on new pages when + docprocessing is not taking place. + + o Made NEWPAGE it's own macro; formerly just an alias of .bp. + + o Made BREAKQUOTE obsolete; rewrote sections of footnote handling, + including adding support macros to deal with processing of + footnotes that were started inside quotes, blockquotes and + epigraphs. + + o Added a TERMINATE .em to docprocessing (except letters) to + ensure that deferred footnotes print on the last page of a doc. + +* Mar 15 2004 + + o Added color support + + o Adjusted vertical placement of hyphens around page numbering so + that they are better centered on the height of the page number. + + o Re-wrote portions of the document processing macros so that tabs + behave in a consistent and intuitive manner. Tab structures are + now properly preserved from page to page and column to column. + +* Mar 05 2004 + + o Makefile.sub (GROFF_BIN_PATH): Use SH_SEP. + +* Feb 20 2004 + + o Rewrote the macros associated with DOCTYPE LETTER so that the + user can enter DATE, TO and FROM in any order s/he likes. For + backward compatibility, if the older, fixed order (DATE-TO-FROM) + is used, the date goes flush right with two linespaces after it, + while the other fields go flush left with a single linespace + separating them. + + o Fixed handling of DOCHEADER OFF <distance> when <distance> fell + short of the top margin of running text (the change is actually in + the SHIM macro, which is called by DOCHEADER). + + o Added a selection of iso 639 two-letter language codes as + optional arguments to SMARTQUOTES, so that the use can enter + her/his language code to get language specific quoting styles + + o Changed the way the strings for \*[ST<n>], \*[ST<n>X], \*[FU<n>] + and \*[BU<n>] are read. Formerly, they were entered literally. + Now they're entered as an array. + +* Jan 24 2004 + + o Added lists and associated macros. Mom now does (nested) lists. + + o Added German-style lowered double quotes and two styles of + guillemets to SMARTQUOTES. + + o Added macro SIZE, intended to be called inline as \*[SIZE <n>]. + This is to bring mom's inline size change syntax into line with + her other inlines. + + o Added ESC_CHAR as an alias of .ec + + o Added doc entries for lists. + + o Updated SMARTQUOTES entry in docs. + + o Updated reserved words in docs. + + o Fixed a few more typos in docs. + +* Mon Dec 29 2003 + + o Makefile.sub (GROFF_BIN_PATH): Use $(SEP). + +* Tue Oct 21 2003 + + o Changed \n[#DRAFT] and \n[#REVISION] to strings \*[$DRAFT] and + \*[$REVISION], allowing for the possibility of blank entries that + don't mess up headers/footers with zeros if user doesn't want any + numbers. + + o Extended handling of draft and revision numbers and strings in + headers/footers for increased flexibility. It's possible now to + have just about any combo of DRAFT_STRING, DRAFT, REVISION_STRING + and REVISION, and have them come out in headers/footers as one + intuitively expects/wants. + +* Mon Oct 13 2003 + + o Finally fix change 2003-08-26, based on ideas from Chuck Silvers + <chuq@chuq.com>. + + o Makefile.sub: Use a stamp file in the `examples' directory. + +* Sun Aug 31 2003 + + o Makefile.sub: Fix last change to make it really work. + +* Tue Aug 26 2003-08-26 + + o Makefile.sub (prepare_make_examples): Make it work with parallel + runs of `make'. Patch from Chuck Silvers <chuq@chuq.com>. + +* Fri Jul 25 2003 + + o Added a .bp after .if \\n[#START]=1 in FOOTER. Without it, in + document processing mode, documents that use *none* of the + docprocessing tags (yes, there are times when users want to do + this) ignored the footer trap. + +* Fri Jun 6 2003 + + o Changed register #DOCHEADER_LEAD_ADJ to string + $DOCHEADER_LEAD_ADJ. This means that .DOCHEADER_LEAD no longer + requires a unit of measure; points is assumed. + +* Tue Jun 3 2003 + + o Added SHIM macro, which, when invoked, calculates and moves to + the next "valid" baseline in document processing. + + o Corrected handling of DOCHEADER OFF <distance> so that the first + line of running text falls on a "valid" baseline when <distance> + is given. + +* Wed May 21 2003 + + o DOC_TITLE changed to be used exclusively with DOCTYPE DEFAULT + + o Fixed problem with restoration of previous doc pagenum style + when endnotes use a different pagenum style (set with + ENDNOTES_PAGENUM_STYLE) + + o Fixed handling of headers/footers with respect to endnotes. + Now, when either headers or footers are on, mom picks up the + correct page header/footer on the last page prior to ENDNOTES, + gets the pageheaders correct for endnotes pages *including the + last one*, and picks up correct page headers/footers for the + subsequent docs after COLLATE + +* Sat May 17 2003 + + o Added TOC (finally) and a nearly complete set of associated + control macros + + o Added new control macros to endnotes: + + ENDNOTES_STRING_CAPS - capitalize the endnotes string + ENDNOTES_NO_COLUMNS - allows docs in columns and endnotes not + ENDNOTES_PAGENUM_STYLE - set page numbering style for endnotes + ENDNOTES_FIRST_PAGENUMBER - set first pagenumber for endnotes + ENDNOTES_ALLOWS_HEADERS - page headers on endnotes pages off or on + ENDNOTES_NO_FIRST_PAGENUM - allows non-printing first page number + when page footers are being used instead of headers + ENDNOTES_SINGLE_SPACE - for TYPEWRITE, if doc double-spaced + SUSPEND/RESTORE_PAGINATION - turns page numbering off for endnotes + + o Added an ADJUST option to ENDNOTE_LEAD + + o Added DOC_TITLE (like TITLE, but sets document-wide title for + collated docs) + + o Added HDRFTR_CENTER_PAD, to allow adjustments to placement of + HDRFTR_CENTER_STRING + + o Added BLANKPAGE macro, to output blank pages (silently numbered) + + o Extensive changes to DEFAULTS, START, COLLATE, HEAD, SUBHEAD and + PARAHEAD because of new TOC and extended flexibility of ENDNOTES + page design + + o Fixed DOCHEADER OFF (distance), FINIS + +* Sat Apr 05 2003 + + o Makefile.sub (GROFFBIN): New variable for groff binary path. + (groff_bin_path): Rename to GROFF_BIN_PATH. + (GROFF): Use GROFFBIN and GROFF_BIN_PATH. + + Patch from Maciej W. Rozycki <macro@ds2.pg.gda.pl>. + +----------------------------------------------------------------------- + +* Sat Feb 22 2003 + + o (Re)-fixed handling of post epigraph spacing after #START for + TYPEWRITE double-spaced. + +------------------------------------------------------------------------ + +* Sun Feb 16 2003 + + o Added James Ramsey's proposed CHAPTER_TITLE macro, along with + his rewritten START macro and his utility macros to make START + easier to read. + + o Expanded handling of CHAPTER_TITLE to encompass TYPEWRITE, as + well as plugging it into the docheaders. Made CHAPTER_TITLE + backwardly compatible so that pre-1.1.5 docs using CHAPTER_STRING + to create a chapter title remain unaffected when groffed with + 1.1.5. + + o Created control macros for CHAPTER_TITLE FAMILY, FONT and SIZE. + Added defaults for handling of CHAPTER title to DEFAULTS. + Documented CHAPTER_TITLE and everything that goes along with it. + + o Fixed broken draft and revision in headers/footers. + + o Fixed \*[RULE] so that it behaves properly with indents and + justified copy. + + o Fixed/tweaked handling of epigraph spacing in TYPEWRITE. + + o Fixed broken spacing of docheaders in TYPEWRITE. + +* Mon Feb 3 2003 + + o Fixed an oversight in CLOSING for DOCTYPE LETTER (closing wasn't + being set flush left) + +* Sun Sep 29 2002 + + o Changed .ne in .HEAD when PRINTSTYLE TYPESET from 5 to 4. With + 5, heads required at least 2 lines of text underneath or they'd be + deferred to the next page, which created too much whitespace at the + end of the page. Heads will now be processed on the same page if + the head plus at least one line of text underneath fits. I figure + it's easier for the user to break to a new page manually if this + behaviour is unsatisfactory than to massage the page to fix the + excess whitespace. + +* Sun Aug 25 2002 + + o Changed .IX to .IQ. The older form still works, but emits a + message advising the user to update to the newer. (The macro in + om.tmac still remains IX; IQ is an alias.) Docs updated to + reflect the change. + +* Tue Aug 20 2002 + + o Added new (better) way to handle inline kerning. \*[BU #] and + \*[FU #] allow passing an argument to the inline string. The + older forms \*[BU#] and \*[FU#] still work, though. + + o Changed handling of inline horizontal and vertical movements. + Horizontal movements are now done with \*[BCK #<unit>] and \*[FWD + #<unit>]; verticals with \*[UP #<unit>] and \*[DOWN #<unit>]. The + older forms \*[FP#] and \*[BP#] still work (horizontals), as do + \*[ALD#] and \*[RLD#] (verticals). + +------------------------------------------------------------------------ + +* Mon Aug 19 2002 + + o Fixed ENDNOTES so footnotes output properly when ENDNOTES is + called + + o Added ENDNOTES_HDRFTR_CENTER so that default no-print of header + center string on endnotes page(s) when DOCTYPE is CHAPTER can be + disabled (i.e. header center will be printed). + +* Sat Aug 10 2002 + + o Added .nf to top of PAD, with a test beforehand for current fill + mode. If fill mode was on, it's restored after PAD completes + processing. Updated reserved.html to include number register + #FILL_MODE. + +* Fri Jul 12 2002 + + o More fixes to underlining. + +* Fri Jul 5 2002 + + o Added capability of endnotes and pertinent control macros to + om.tmac. + + o Added document entries pertaining to endnote macros. + + o Incorporated endnote macros into elvis_syntax. + + o Small doc fixes. + + o Tidied up indenting of om.tmac. + + o Fixed handling of underlining of italics in PRINTSTYLE TYPEWRITE + (there was a problem with footnotes getting underlined when they + shouldn't have been). + + o Removed ENDNOTES from TODO + + o Fixed the character translations for UNDERLINE so they work + properly with digraphs. + +* Mon Jul 1 2002 + + o Expanded docprocessing.html entry "Special Note on Chapters". + Tidied up html a bit. + +* Sat Jun 15 2002 + + o Small fix to PAD to make the use of inlines within the pad + string more intuitive. + + o Added \*[RULE] ( = \l'\n(.lu' ) so that full measure rules + (either to full line length or within tabs) are easier to set. + +* Sat Jun 8 2002 + + o Macro .PS renamed to .PT_SIZE. Alias .TS removed. + + o .tr bits in .CAPS rewritten in the form .tr é\[`E]. + + o General cleanup of docs to reflect changes + + o Small changes/additions to elvis_syn + +* Thu Jun 6 2002 + + o In DOCTYPE, in .if '\\$1'LETTER', added .FOOTER_RIGHT_SIZE +0. + Without it, the suite page was printing at the default + FOOTER_RIGHT_SIZE of -.5, which didn't look good. + +* Wed Jun 5 2002 + + o Makefile.sub (TFLAG): Add `$(top_builddir)/tmac'. + +* Tue Jun 4 2002 + + o Makefile.sub (groff_bin_dirs): Fix typo (forgotten `src' + element). + +* Mon Jun 3 2002 + + o Makefile.sub (uninstall_sub): Don't use `momdocdir' but + `htmldocdir'. Add missing backslash. + +* Sat Jun 1 2002 + + o Makefile.in (prepare_make_examples): Test for `penguin.ps', not + `examples/penguin.ps'. + +* Wed May 29 2002 + + o Rewrote portions of PAGENUM_STYLE and COPYSTYLE so that + PAGENUM_STYLE behaves as advertised. + +* Fri May 24 2002 + + o /Makefile.sub (momdocdir): Removed. + (HTMLDOCFILES): Prepend `momdoc/'. + (EXTRAEXAMPLEFILES): Removed. Added entries to... + (EXAMPLEFILES): This. + (.SUFFIXES, .mom.ps): New. + (prepare_make_examples): Updated. + (examples/*.ps): Removed; .mom.ps will handle this. + (install_data): Updated. + +* hu May 23 2002 + + o Applied two small bug fixes to om.tmac (patches 1.1.1a and + 1.1.1b). + + o mom is now part of groff. + + Some renaming to avoid problems with 8+3 filesystems: + + examples/docprocessing_typeset.mom -> examples/typeset.mom + examples/docprocessing_typewrite.mom -> examples/typewrite.mom + examples/typesetting_macros.mom -> examples/macros.mom + examples/penguin_small2_bw.ps -> examples/penguin.ps + + o Removed `INSTALL' and `README' since groff takes care of + installation now. + + o Added Makefile.sub. + + o Added mom.tmac (which simply calls om.tmac). + + o Added groff_mom.man for orthogonality; it simply points to the + HTML documentation. + +* Thu May 16 2002 + + o Added macro DRAFT_WITH_PAGENUMBER so user can have + draft/revision info attached to the pagenumber in COPYSTYLE DRAFT, + instead of having it HEADER center. Always having it HEADER + center was creating problems with long doc titles, esp. with + PRINTSTYLE TYPEWRITE (which is when COPYSTYLE DRAFT is most likely + to be used). Now user has the choice, in these circumstances, + either to reduce HEADER_SIZE, or to displace the draft/revision + info. Also rewrote portions of COPYSTYLE so that if no revision + number is given in the reference macros, "Rev. #" doesn't appear + when COPYSTYLE DRAFT. + +* Fri May 10 2002 + + o Added capability of user-defined, single string recto/verso + headers/footers. + + o Added new entries to docs about the above. Made some additional + small changes to toc.html, rectoverso.html, and headfootpage.html + to supplement the new entries. + + o Small fix to handling of footer separator rule -- was 1 point + too low owing to fuzziness of #CAP_HEIGHT as returned by + SIZESPECS. + + o Added some more useful stuff to elvis_syntax. + +* Sun May 05 2002 + + o Fix to DEFAULTS so that L_MARGIN and R_MARGIN are reprocessed if + DOCTYPE LETTER. R_MARGIN, as set by DOCTYPE LETTER had no + preceding PAGEWIDTH or PAPER from which to get #PAGE_WIDTH for + figuring out line length. + + o Additional fix to DEFAULTS in handling DOCTYPE LETTER so that if + user sets line length prior to START, no reprocessing of R_MARGIN + occurs. This necessitated adding a new number register: + #USER_SET_L_LENGTH + +* Sat May 04 23:48:05 EDT 2002 + + o Added .cflags 4 /\(en -- was driving me nuts that lines wouldn't + break after these characters; I'm assuming others feel the same + way + +* Fri May 03 2002 + + o Made some small fixes to space handling around quotes, mostly to + do with quotes immediately after START and quotes after + (sub)heads. + +* Wed May 01 2002 + + o Fixed a small bug that was causing the first .PP after START to + begin at the top margin of the page regardless of any type that + preceded .PP when docheaders were off. + + o Fixed HEADER so that when HEADERS are off the first line of type + on pages after the first falls properly at the top margin + +* Sat Apr 27 2002 + + o Renamed docprocessing_macros.mom in /examples to + docprocessing_typeset.mom. Added docprocessing_typewrite.mom, as + well as a README file. + + o Fixed UNDERLINE_QUOTES (for PRINTSTYLE TYPEWRITE) so they really + are on by default as the docs say. + + o Changes to doc entry on COLLATE: + + - removed bit about using COLLATE after a cover page (I wrote the + entry *before* I wrote the macro!). Cover pages should be + followed by NEWPAGE, not COLLATE. + + - added caution about mixing PRINTSTYLEs + + - added caution about using DOC_FAMILY to change family of all + document elements after COLLATE + + o Made HEADER_SIZE (and, by extension, FOOTER_SIZE) available to + PRINTSTYLE TYPEWRITE. Changed appropriate doc entries to reflect + this. + +* Wed Apr 24 2002 + + o Small change to DO_QUOTE to correct a problem with quotes and + blockquotes that fall in the middle of paragraphs (i.e. text after + the quote is not a new para). Basically, added a bit that stores + the current para indent, sets para indent to 0, invokes a PP, then + restores the original para indent. + + o Added new macro, BREAK_QUOTE, to deal with the problem of + footnotes in quotes and blockquotes that cross pages or columns. + + Quotes and blockquotes are read into diversions, which means they + get their footnote information from the page/column on which they + were started. If a footnoted quote crosses a page/column, what + sometimes happens is that the footnote itself is output at the + bottom of page/column where the quote started, whereas the text + marker for the footnote appears on the next page/column where the + quote ends. Furthermore, the text marker is the one appropriate + to the previous page. BREAK_QUOTE is a workaround. + + o Added directory /examples to archive. + + o Added typesetting_macros.mom, docprocessing_macros.mom, + elvis_syntax and penguin_small2_bw.ps to /examples. + + o Added BREAK_QUOTE to docs, made some additions to reserved words + list, and corrected a few little doc errors. + +* Mon Apr 22 2002 + + o Added default .L_MARGIN 1i and .R_MARGIN 1i to PAPER, PAGE, and + PAGEWIDTH. L_MARGIN is essential otherwise left indents and tabs + don't have a register #L_MARGIN to work with. The default right + margin is a convenience only. Updated the doc entries for + L_MARGIN and R_MARGIN to reflect the change. + +* Sun Apr 21 2002 + + o Changes to COLLATE: + + - added some "resets" (LL, LS, QUAD) + - added a check for whether pagination is at page top (either + because FOOTERS are on or because PAGENUM_POS was user set). + If pagination is on, and PAGENUM_POS is TOP, it's turned off + for next page (start of next collated document) and restored + for subsequent pages unless PAGENUM_ON_FIRST_PAGE is on, in + which case the page number appears at page top. + + o The macro TRAPS is always invoked at the end of DEFAULTS (which + is called by START). Formerly, TRAPS was only invoked at the + start of a doc, not after COLLATE. Now runs after COLLATE as + well. + + o Distance from $DOC_TYPE in DOCTYPE NAMED "<string>" to start of + running text was one linespace too deep. Fixed (in START). + + o When 1st arg to PAGENUM_POS was user set to TOP, running text + was printing 1 linespace too high, even when PAGINATION was OFF. + Same problem when HEADERS were OFF (i.e. nothing in the header + margin at all). Fixed by removing -\\n[#DOC_LEAD]u from all .sp + |\\n[#T_MARGIN]u calls of .el portion after .ie \\n[#HEADERS_ON]. + + o Added new macro: PAGENUM_ON_FIRST_PAGE. Normally, when FOOTERS + are being used instead of HEADERS, mom doesn't print the page + number at the top of the first page of a doc, or the first page of + collated docs. New macro allows user to get mom to put the page + number on "first" pages if that's desired. Updated docs to + include the macro. + + o More little fixes to docs. + +* Thu Apr 18 2002 + + o Fixed TI (temporary indent) so that it continues to work as + expected, even when called while another type of indent is in + effect. + +* Tue Apr 16 2002 + + o String tabs weren't working as advertised when set from within a + tab. Fixed. Two new registers added: #ST_OFFSET and #IN_TAB. + String tabs now behave properly and intuitively when set within + tabs. + + o Added a note to docs about surrounding \w'...' escape with + double- quotes when it's used as an argument to macros + + o Added a note to docs that SILENT does not deposit a .br + +* Mon Apr 15 2002 + + o Added new macro BR_AT_LINE_KERN if user wants mom to deposit + .br's before .RW and/or .EW. + + o Added 1/4 points to inline escapes \*[ALD] and \*[RLD]. + + o Added 1/4 points to inline escapes \*[FP] and \*[BP] + + o Updated docs to reflect the above changes. + +* Fri Apr 12 2002 + + o Fixed .RW and .EW which weren't working because of a missing \ + in \\n(.f register. Also made it so that .RW and .EW affect all + fonts in positions 1, 2, 3, and 4 at once, hence line kerning now + affects all fonts that appear after it, not just the font that was + current at the time of the macros' invocation. + + o .SS and .WS now working properly. .WS no longer has any effect + on .SS, which remains constant regardless of .WS. Furthermore, + .SS no longer gets its value by adding \*[$SS_VAR] + \n[.ss]. + Instead, it remains constant. Don't know what I was thinking when + I wrote the routine in the first place. + + o Updated and rewrote doc entry pertaining to SS + +* Wed Apr 10 2002 + + o Renamed tmac.om to om.tmac to bring macro file's name into line + with current groff policy + + o Added more standard paper sizes to PAPER. + + o Fixed T_MARGIN, LS, and AUTOLEAD so that if T_MARGIN is set + before LS or AUTOLEAD at the top of a file, the first line of type + falls properly on the baseline set by T_MARGIN. Previously, LS + and AUTOLEAD automatically advanced by the value passed to them + before setting the first line of type, meaning that the first line + of type fell at T_MARGINu+1v instead of T_MARGIN. + + o Updated docs to reflect changes. + + o Removed #TEST_FOR_NUMERIC from list of reserved words. + + o Added "t" and #T_MARGIN_SET to list of reserved words. + +* Sat Apr 6 2002 + + o Added FACTOR arg to AUTOLEAD, so if user wants autolead to be a + factor of point size, instead of being the sum of pointsize + + autolead, s/he has the choice. Incorporated appropriate changes + to PS and LS. + + o Added new register #AUTOLEAD_FACTOR to reserved words. Modified + comments for AUTOLEAD, PS, and LS to reflect changes. Also + corrected an error where #AUTOLEAD_VALUE had mistakenly been + written $AUTOLEAD_VALUE in comments in the macro file, and removed + erroneous | <anything>. Updated AUTOLEAD entry in + momdoc/typesetting.html to reflect the changes. + +* Wed Apr 3 2002 + + o Cleaned up html errors in the docs. + + o Added "Next," "Prev" and "Top" links to top and bottom of doc + files. + + o Fixed some typos in the docs. + +________________________________________________________________________ + +##### License + +Copyright 2004-2020 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + +##### Editor settings +Local Variables: +coding: latin-1 +fill-column: 72 +mode: change-log +version-control: never +End: +vim:set autoindent textwidth=72: diff --git a/contrib/mom/NEWS b/contrib/mom/NEWS new file mode 100644 index 0000000..d7cf82a --- /dev/null +++ b/contrib/mom/NEWS @@ -0,0 +1,710 @@ + -*- text -*- + Copyright (C) 2004-2020 Free Software Foundation, Inc. + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. + +Release 2.5 +----------- +Addition of shaded backgrounds, frames, and page colour. + +Releases 2.4 — 2.4-4_e +---------------------- +General bug fix releases, with an overhaul of float, image, and +pre-processor handling to correct inconsistencies in spacing, +indents, labels, and captions. Corrects page numbering issue in +"Lists of..." when pre-processor material is floated and deferred. + +Release 2.3 +----------- +Addition of DOCTYPE SLIDES and associated macros + NEWSLIDE + PAUSE + TRANSITION for slide presentations processed with gropdf. +Fixes and improvements to nested lists (ITEM now takes a spacing +arg), indents (IB), NEWPAGE (aliased as NEWSLIDE). Addition +of CENTER_BLOCK (center blocks of type over whole line length +regardless of indents). Tighten up graphical object macros. +Addition of macros to handle hanging punctuation. .COLOR preferred +to .gcolor in om.tmac. Changes to HEADER to handle printing of both +headers and footers when DOCTYPE SLIDES. + +Release 2.2 +----------- +Addition of flex-spacing (flexible vertical whitespace). Fixes and +improvements to positioning of floats, images, and pre-processor +material. Addition of TARGET (PDF target) argument to floats, +images, and pre-processor material. Improvements to autolabelling. + +Release 2.1-b +------------- +Fix to handling of kern units. Updated copyright info. + +Release 2.1-a +------------- +Expanded labelling facilities to include floats and +quotes/blockquotes. Improvements to TOC handling. + +Release 2.1 +----------- +Expanded support for doc-covers, covers, and docheaders: + - control macros for formatting every element separately (title, + subtitle, author, etc.); formatting options include family, + font, size, color, quad, caps, smallcaps and underscoring + - (DOC_)COVERTEXT for setting blocks of type on cover pages + - (DOC_)COVER_IMAGE for putting full page or small images on cover + pages + +New <ELEMENT>_STYLE macros that allow grouping of style parameters +for most document elements into a single macro using keyword/value +pairs. + +Smallcaps, with the ability to control size, weight, and width. + +Release 2.0-c +------------- +Mom now has full support for eqn, pic, and tbl, as well as +captioning and labelling of pdf images and preprocessor output. +Lists of Figures, Equations, and Tables can now be autogenerated. +PDF_IMAGE has a new FRAME option. + +Release 2.0-b +------------- +Improved and expanded float and tbl support. + +Release 2.0-a +------------- +FORCE argument added to FLOAT; immediately breaks to a new page +to output the float if it does not fit on current the page. + +Release 2.0 +----------- +Full integration with gropdf. Mom's focus now is on the generation +of PDF output. PDF outlines and PDF links (internal and external) +fully supported. + +New management of nested heading levels via HEADING <level>, +replacing HEAD, SUBHEAD, SUBSUBHEAD and PARAHEAD. + +"NAMED <id>" argument to HEADING <level> creates PDF target at the +heading. + +Use of "oldstyle" headings preserved, allowing the continued use of HEAD, +SUBHEAD, etc. + +PARAHEAD removed; replaced by HEADING <level> PARAHEAD. + +New management of head styling. + +New management of TOC, mostly transparent to user. + +New management of TOC title and entry styling. + +Overhaul of TOC default style; greater flexibility in numbering +entries, improved indenting, improved spacing. + +FLOAT macro added. + +MN_INIT wrapper re-written such that each argument must be preceded +by a flag. + +New perl script, pdfmom, to facilitate generation of PDF output. + +Additional documentation in the form of a PDF manual, which covers +mom/PDF/groff usage. + +==================================================================== + +Release 1.6-a +------------- +Support for sub-subheads added. + +Release 1.6 +----------- +Complete overhaul of refer handling. If you've been using mom and +refer, the changes may affect documents you've already created. +Please read refer.html. + +Improved underlining thanks to Tadziu Hoffman. + +Increased flexibility of PRINTSTYLE TYPEWRITE, which now allows +user to choose the monospace family and point size. + +Release 1.5-e +------------- +Complete overhaul of documentation + +Release 1.5-d +------------- +Control macros added to various miscellaneous docprocessing +functions + +Release 1.5-c +------------- +Bugfix release (see BUGS, Version 1.5-b). + +Release 1.5-b +------------- +Bugfix release (see BUGS, Version 1.5-a). + +Release 1.5-a +------------- +Bugfix release (see BUGS, Version 1.5). + +Release 1.5 +----------- +Macros have been added to facilitate the drawing of common +graphical objects: rules (horizontal and vertical), boxes (solid or +filled) and circles (ellipses; also solid or filled). The +behaviour of \*[RULE] has changed so that it always deposits a +break when it's called, bringing it (somewhat) into line with the +new macro for drawing rules precisely, DRH. Additionally, a new +macro, RULE_WEIGHT, can be used to control the weight of rules +drawn with \*[RULE]. + +Overall, the handling of underscoring and underlining--wherever it +occurs--has been overhauled so that users can control both the +weight and the placement of underscore/underline rules. New +macros have been created to control, for example, +the weight and placement of the rule under a HEAD, or the weight of +a FOOTNOTE separator rule, etc. Anything that can be underscored +or underlined (except the pseudo-underlining of italic passages in +PRINTSTYLE TYPEWRITE) has a "rule" control macro. See the document +sections pertinent to the macro in question. + +The creation and management of covers and doc covers has been +overhauled for greater flexibility, including the ability to +generate differing titles, subtitles, attribution strings, authors, +doctypes, miscellaneous lines and copyright information for the +same document's doc cover and cover (title) pages, without +affecting the default docheader that appears on page one. +Additionally, you can now get mom to output a blank page after a +cover or doc cover, as well as tell her whether to include covers +and doc covers in the pagination scheme. + +The convenience macro, CODE, has been made more convenient. A new +control macro allows setting users' preferred fixed-width fonts. +Additionally, CODE can now be called inline. + +New inline escapes, \*[UC] and \*[LC], have been added to allow +inline capitalization. This is particularly useful when users +want to pass a header/footer left-center-right part one of mom's +"reserved" strings and want the string capitalized (or not) in the +header/footer. + +For more details, see ChangeLog as well as the documentation. + +Release 1.4-b +------------- +It is now possible to pass an absolute value to QUOTE_INDENT, +BLOCKQUOTE_INDENT and EPIGRAPH_INDENT. If an absolute value +is desired, the user simply appends a unit of measure (scaling +indicator) to the argument. If no unit of measure is appended, +the old behaviour is still observed (i.e. the numeric argument +represents the amount by which to multiply the paragraph indent to +arrive at the desired indent value). + +The main macro file, om.tmac, is now stripped of comments when +groff is built from sources. om.tmac in the sources themselves +still contains the comments, as do the tarballs posted on the mom +homepage. + +Release 1.4-a +------------- +Added a new macro, HEADERS_AND_FOOTERS, to allow having both +headers and footers on a page. + +Release 1.4 +----------- +DOCTITLE, TITLE, CHAPTER_TITLE, SUBTITLE, COVERTITLE and +DOC_COVERTITLE now accept multiple arguments; each is printed +on a separate line. + +New macro, CODE, to facilitate setting programming code snippets. + +Release 1.3-e_<#> +----------------- +New macro, PREFIX_CHAPTER_NUMBER, to allow users to prepend chapter +numbers to the numbering scheme used in head element numbering. + +Indented TOC entries now line up better. + +Line numbering now has control macros for family, font, point size +and color. + +A new macro, NO_SHIM, to disable the automatic shimming of +(possibly irregularly linespaced) quotes and blockquotes. + +Release 1.3-d +------------- +Bug fix release (FONT--removed superfluous "if" that was breaking +fallback font logic; FOOTNOTE--no longer adding a linebreak after +footnote marker in footnote text in nofill modes). + +Fixed indent problem with LIST when both PAD_LIST_DIGITS LEFT and +SHIFT_LIST used concurrently. + +Release 1.3-c +------------- +Bug fix release (margin notes, TYPEWRITE--spacing, underlining and +italicizing + +Release 1.3-b +------------- +Bug fix release. SMARTQUOTES has been smartened; miscellaneous +glitches in PRINTSTYLE TYPEWRITE fixed (see BUGS). Primarily +corrects inconsistencies and bugs with the margin notes routines. + +Release 1.3-a +------------- +Bug fixes: First baseline of type wasn't going where it was supposed +to when the docheader was turned off; fixes to errors in html +formatting of docs. + +Release 1.3 +----------- + +Added line numbering capabilities, with controls. + +Footnotes and endnotes can now be referenced by line number. + +Added ability to adjust vertical position of the title that appears +on the first endnotes page. + +Footnotes can run on when being referenced by line number. + +Footnotes now have a post-footnote spacing option, for adding +a little space between footnotes. + +Extended LIST so it accepts alpha, ROMAN and roman enumerators. + +Added margin notes capability. + +Added refer support. + +Added bibliography page support. + +Added QUOTE_AUTOLEAD and BLOCKQUOTE_AUTOLEAD, so user can have +quotes and blockquotes leaded differently from running text. + +Change: the input line immediately after FOOTNOTE OFF must be +entered as a literal continuation of the line prior to FOOTNOTE, +including any initial spaces or punctuation marks. This allows +for hassle-free placing of footnote markers in running text either +before or after punctuation marks. + +Release 1.2-f +------------- + +Added ADD_SPACE, to permit users to insert space at the top of +running text (after the first page) when using the docprocessing +macros. + +Releases 1.2-a and 1.2-b +------------------------ + +My personal email address has changed. 1.2-a and -b have been +updated to reflect that. Additionally, I made some small changes +to the documentation. + +Release 1.2 +----------- + +As of 1.2, the recommended version of groff to use with mom has +been bumped up from groff, 1.18 to groff, 1.19.2. Although mom will +continue to work with groff, 1.18, her handling of .FAM(ILY) and .FT +is now slightly different, therefore users of groff 1.18 may have to +update documents created with mom so that every .FAM(ILY) request is +followed by a .FT request before any text is input, otherwise mom +will set the text after .FAM(ILY) in Courier (until she encounters a +.FT request). People running groff, >= 1.19.2 don't have to worry +about this, but I recommend that, regardless of which version you're +running, you have a look at the document entries for FAMILY and FT +in order to see how mom will be handling .FAMILY and .FT from now +on. + +When used with groff >=1.19.2, mom now emits warnings if a style +hasn't been registered, or if a font style doesn't exist in the +current family. Invalid .FAM(ILY) calls now use a "fallback" font" +(although no warning is issued). The fallback is user-settable. + +Mom's macro file, om.tmac, now sets up a fairly extensive list of +font "styles," thus expanding the range of arguments that can be +passed to .FT (formerly, just R, I, B and BI, unless users had +already rolled their own solution to the problem of extensive type +families containing fonts like condensed, demibold, black, light, etc). +Users are advised to read the documentation sections on FAM(ILY), +FT and FALLBACK_FONT, as well as the new appendix section, "Adding +PostScript fonts to groff", for information on using mom's style +extensions (and how to disable them, should they conflict with a +user's present groff site-font/devps setup). + +A new macro, FALLBACK_FONT, has been added. It controls not only +the fallback font for invalid .FAMILY calls, but also whether mom +aborts on invalid .FT calls after issuing a warning, or continues +processing using the fallback. + +Release 1.1.9 +------------- + +Added the (optional) generation of cover pages and document cover +pages, plus a full suite of control macros for all cover page +elements. + +Added new reference macros that apply to covers: COVERTITLE, +DOC_COVERTITLE, COPYRIGHT and MISC. + +The need for TRAP OFF/TRAP to deal with ELs and TNs that fall at +the bottom page has been obsoleted. However, both EL and TN, when +invoked in any "nofill" mode (LEFT, RIGHT, CENTER, or the L | R | C +arguments to TAB_SET or ST when no QUAD argument is given), must now +have the input line preceding the EL or TN terminated by \c. Fill +modes do not have this requirement, i.e. no \c is required. + +Footnotes that occur inside quotes, blockquotes and epigraphs now +work just like regular footnotes, with no user intervention +required. This obsoletes the macro BREAK_QUOTE. + +Removed all aliases that used the word COLOUR. Users must use +COLOR wherever COLOR is needed. COLOUR, as a replacement/alias, is +no longer supported. + +NEWPAGE, which used to be an alias of .bp, is now its own macro. + +Release 1.1.8 +------------- + +Added text color support. Users can now define or initialize a color, +and afterwards change text color with an inline of the form +\*[<colorname>], or with the macro .COLOR. In document processing, +the docelement tag control macros have been expanded to include +_COLOR, e.g. .HEAD_COLOR <predefined colorname> will colorize +heads, PAGENUM_COLOR <predefined colorname) will colorize page +numbering, etc. + +Adjusted vertical placement of hyphens around page numbering when +PAGENUM_STYLE is DIGIT, ROMAN or ALPHA so that the hyphens appear +properly centered on the page numbering character. + +Changed tab handling in document processing so that tab structures +are preserved from page to page and column to column. + +Release 1.1.7-a +--------------- + +Increased the flexibility of SMARTQUOTES so that they handle quoting +styles by language, entered as a 2-digit language code argument to +SMARTQUOTES. See docs. + +Re-wrote the DOCTYPE LETTER macros so that DATE, TO and FROM can be +entered in any order the user wishes, with output that matches +input. (Should have done this in the first place.) + +Release 1.1.7 +------------- + +Finally got around to writing "list" macros. See the docs. + +Added German-style lowered double quotes and two styles of +guillemets to SMARTQUOTES. + +Added macro SIZE, intended to be called inline as \*[SIZE <n>]. +This brings mom's inline size change syntax into line with her other +inlines. \*S[<n>] can still be used for the same thing. + +The file elvis_syntax (for elvis prior to 2.2h) is no longer being +maintained. It was getting messy and long in the tooth. The +official elvis syntax file is elvis_syntax.new, which works for +2.2h of elvis (and higher, one hopes). elvis users are encouraged +to update to 2.2h or higher. + +Release 1.1.6-e +--------------- + +Extended handling of draft and revision numbers and strings in +headers/footers for increased flexibility. It's possible now to +have just about any combo of DRAFT_STRING, DRAFT, REVISION_STRING +and REVISION, and have them come out in headers/footers as one +intuitively expects/wants. + +Also added a new set of syntax highlighting rules for the vi clone, +elvis. Version 2-2h-beta of elvis finally made possible the +highlighting of \*[...] inline escapes, whether or not they're +separated from surrounding text by spaces. This is a terrific +improvement in elvis, and makes for greatly improved readability of +mom files. + +Release 1.1.6-b - 1.1.6d +------------------------ + +Trivial changes to documentation and some cleanups of the main +om.tmac file, including: + +Added a .bp after .if \\n[#START]=1 in FOOTER. Without it, +in document processing mode, documents that use *none* of the +docprocessing tags (yes, there are times when users want to do +this) ignored the footer trap. + +Changed register #DOCHEADER_LEAD_ADJ to string +$DOCHEADER_LEAD_ADJ. This means that .DOCHEADER_LEAD no longer +requires a unit of measure; points is assumed. + +Release 1.1.6-b +--------------- + +Added a SHIM macro that calculates and moves to the next "valid" +baseline during document processing (useful if user starts playing +around with spacing/leading on a page and needs to get the leading +back on track). + +Fixed handling of DOCHEADER OFF <distance> so that the first line of +running text falls on a "valid" baseline when <distance> is given. + +Release 1.1.6-a +--------------- + +Problem with groff 1.19.1 fixed by Werner (.return handled arguments +incorrectly). + +Fixed handling of page numbering style restoration in endnotes, so +that (collated) docs have the correct page numbering style when the +style has been changed for endnotes (with ENDNOTES_PAGENUM_STYLE). + +DOC_TITLE has been made for use exclusively with DOCTYPE DEFAULT. + +Fixed handling of headers/footers with respect to endnotes. Now, +when either headers or footers are on, mom picks up the correct +page header/footer on the last page prior to ENDNOTES, gets the +pageheaders correct for endnotes pages *including the last one*, and +picks up correct page headers/footers for the subsequent docs after +COLLATE. + + +Release 1.1.6 +------------- + +BAD NEWS: mom appears to be crippled in some areas when run with +groff 1.19.1. Pending a solution, mom must be run with groff 1.18 + +***NEW*** + +Added TOC capabilities. + +Extended range of endnotes control macros. See the documentation +on endnotes control macros. + +Added a new DOC_TITLE macro, to deal with collated documents that +have an overall title, while each doc has its own separate doc +title (from TITLE). + + +Release 1.1.5 +------------- + +***NEW*** + +Added James Ramsey's CHAPTER_TITLE macro as well as control macros to +go with it. Thanks James. Also from James came a patch to handle +START differenty which has been incorporated into om.tmac. Thanks +again, James. + +Some bits and pieces of the docs have been tweaked, but nothing +changed. Hopefully, the changes will make parts of the docs easier to +read and navigate. + +***FIXES*** + +o \*[RULE] + +o broken draft and revision in docheaders + +o post-epigraph spacing in TYPEWRITE + +o header spacing in TYPEWRITE + +------------------------------------------------------------------------ + +Release 1.1.4 +------------- + +***SIGNIFICANT CHANGE*** +.IX is now deprecated, although it will continue to work as before. +The new form is .IQ (Indent Quit). Groff will emit a message advising +users to update their docs. + +***NEW*** +Four new inlines to deal with horizontal and vertical movements: + + o \*[FWD n] + o \*[BCK n] + o \*[UP n] + o \*[DOWN n] + +All four require a unit of measure after n. These inlines are similar +to the older \*[FPn], \*[BPn], \*[ALDn] and \*[RLDn], however they're +not restricted to points, and any value can be entered for n (the older +forms -- which still work -- were restricted to 1 - 36). + +***CHANGED*** +Inline kerning can now be accomplished with \*[BU n] and \*[FU n], where +n, after the space, is the desired number of kern units. The older +forms \*[BUn] and \*[FUn] still work, up to 36 units. + +------------------------------------------------------------------------ + +Release 1.1.3c +-------------- + +***NEW*** +A new macro -- ENDNOTES_HDRFTR_CENTER -- added so that mom's default +behaviour of not printing the header center string when DOCTYPE is +CHAPTER can be disabled (i.e. she will print the center string). The +macro is user-called with ENDNOTES_HEADER_CENTER or +ENDNOTES_FOOTER_CENTER. + +***FIXES*** +PAD now works as advertised when fill mode is on. + +ENDNOTES no longer disables printing of footnotes on last page of +document body. + +Release 1.1.3 +------------- + +***SIGNIFICANT CHANGE -- PLEASE TAKE NOTE*** +As of 1.1.3, groff must be >= 1.18. + +***NEW*** +Added endnotes functionality to mom, along with a slew of macros to +control how mom prints endnotes pages. See the html documentation. + +***NEW*** +Added inline \*[RULE], which draws a rule to the full measure of the +current line length ( to be used in place of \h'\n(.lu' ). Weight of the +rule is dependent on the point size of type when \#[RULE] is called. + +***FIXES*** +PAD -- works more intuitively now when the pad string contains inline +escapes for font, point size, etc. + +UNDERLINE -- fixed character translations of digraphs so they get +underlined properly. Also fixed a bug that was causing some footnotes +to get underlined when UNDERLINE was on in the body of the document. + +***UPDATES*** +Html documentation +elvis_syn + +Release 1.1.2a +-------------- + +***SIGNIFICANT CHANGE -- PLEASE TAKE NOTE*** +In order to help mom toward full groffship, the macro .PS has been +renamed to .PT_SIZE, and the alias .TS (for .TAB_SET) has been removed. +.PS and .TS are keywords used by pic and tbl respectively, and the mom +macros of the same name were in conflict. + +Release 1.1.2 +------------- + +***IT'S OFFICIAL!*** +mom is now an official part of the groff. New releases will be +incorporated into the groff package. I'll still be posting each new +release on the mom homepage, so there's no need to download all of the +most recent version of groff just to get a newer mom. :) + +***CHANGES*** +Fixed default footer separator rule adjustment so that it's closer to +the advertised "4 points above the tallest ascender in the footer." + +Added more stuff to the elvis_syn file. Still wouldn't mind someone +contributing some vim/emacs syntax highlighting. + +Added .cflags 4 /\(em to om.tmac. By default, mom now obligingly +breaks after / and \(en. + +***NEW*** +Macro(s): HEADER_RECTO + HEADER_VERSO +With these macros, users can now define single-string recto/verso +headers/footers. HEADER_RECTO (or FOOTER_RECTO) can be used to create +a one-part header/footer (instead of mom's default three-parters) that +appears on every page if RECTO_VERSO is OFF or, if RECTO_VERSO is on, if +no HEADER_VERSO (or FOOTER_VERSO) has been defined. If a HEADER_VERSO +(or FOOTER_VERSO) is defined and RECTO_VERSO is on, _RECTO prints on +even pages and _VERSO on odd pages. + +Added macro DRAFT_WITH_PAGENUMBER so user can have draft/revision +info attached to the pagenumber in COPYSTYLE DRAFT, instead of having +it HEADER center. Always having it HEADER center was creating problems +with long doc titles, esp. with PRINTSTYLE TYPEWRITE (which is when +COPYSTYLE DRAFT is most likely to be used). + +***FIXES*** +No more "can't break line" warnings in DOCTYPE LETTER. + +If no REVISION number is given, Rev. 0 no longer appears HEADER_CENTER +in COPYSTYLE DRAFT + +PAGENUM_STYLE now works as advertised. + +Release 1.1.1 +------------- + +***CHANGES*** +Main macro file renamed to om.tmac, in keeping with current groff +policy. + +Now okay to use groff mailing list for mom-related posts + +***NEW*** +Toggle macro -- BR_AT_LINE_KERN. When on, automatically deposits +a break whenever .RW or .EW are invoked. Very useful when kerning +whole lines of rag copy. + +***NEW*** +Toggle macro -- PAGENUM_ON_FIRST_PAGE. Normally, when FOOTERS are +being used instead of HEADERS, mom doesn't print the page number at +the top of the first page of a doc, or the first page of collated docs. +PAGENUM_ON_FIRST_PAGE allows user to get mom to put the page number on +"first" pages if that's desired. + +***NEW*** +Macro -- BREAK_QUOTE -- to deal with problem of footnoted quotes and +blockquotes that cross a page or column. + +***NEW*** +New argument to AUTOLEAD -- FACTOR. With FACTOR, you can, if you +wish, enter a factor by which AUTOLEAD multiplies the point size when +calculating lead automatically. + +Improvements +------------ + +PAPER now has a much larger selection of common paper sizes. + +\*[ALD], \*[RLD], \*[FP] and \*[BP] now accept increments of quarter +points (expressed as decimal fractions). \*[RLD1.75], for example, +reverses 1-3/4 points up on the line. + +HEADER_SIZE now available to PRINTSTYLE TYPEWRITE. This was necessary +to deal with the problem of excessively long HEADER_LEFT, _CENTER or +_RIGHT strings. + +Fixes +----- + +T_MARGIN -- can be set before or after LS or AUTOLEAD +SS -- remains constant regardless of WS +WS -- no longer affects SS +TI -- now works as expected even when called while another indent + type is in effect +COLLATE -- small fixes + +Broken .RW and .EW fixed. + +String tabs now behave properly when set from within tabs. + +UNDERLINE_QUOTES (for PRINTSTYLE TYPEWRITE) are now, in fact, on by +default as the docs state. diff --git a/contrib/mom/TODO b/contrib/mom/TODO new file mode 100644 index 0000000..d9bb257 --- /dev/null +++ b/contrib/mom/TODO @@ -0,0 +1,10 @@ + -*- txt -*- + Copyright 2004-2020 Free Software Foundation, Inc. + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. + +- cutarounds +- clickable footnote and endnote markers +- indexing diff --git a/contrib/mom/copyright b/contrib/mom/copyright new file mode 100644 index 0000000..04c09d9 --- /dev/null +++ b/contrib/mom/copyright @@ -0,0 +1,24 @@ +-*- text -*- +AUTHOR +------ +Peter Schaffter (peter@schaffter.ca) +6-331 Mona Ave +Vanier (ON) CANADA +K1L 7A3 + +======================================================================== + +The groff macro file om.tmac and the html documentation pertaining to +it are Copyright (C) 2004-2021 Peter Schaffter. + +om.tmac is issued under the GNU General Public License, a full copy of +which can be had at + + http://www.gnu.org/licenses/gpl.html + +The html documentation pertaining to om.tmac is issued under the GNU +Free Documentation License, a full copy of which can be had at + + http://www.gnu.org/copyleft/fdl.html + +======================================================================== diff --git a/contrib/mom/examples/README-fr.txt b/contrib/mom/examples/README-fr.txt new file mode 100644 index 0000000..5b1b434 --- /dev/null +++ b/contrib/mom/examples/README-fr.txt @@ -0,0 +1,126 @@ +-*- mode: text; coding: utf-8; -*- +Copyright (C) 2014-2020 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + +======================================================================== + +Les fichiers dans ce répertoire vous permettent de voir mom en pleine +action. + +Si vous avez téléchargé et décompressé une version de mom depuis sa +page d'accueil, vous verrez qu'aucun exemple n'est accompagné du +fichier PDF (.pdf) correspondant, comme c'est le cas sur les versions +pré-compilées de groff, ou groff compilé à partir des sources. + +Je n'ai pas inclu les PDF parce que je voulais conserver l'archive mom +aussi petite que possible. Pour générer les PDF, traitez les fichiers +avec pdfmom(1). + + pdfmom mom-pdf.mom > mom-pdf.pdf + pdfmom sample_docs.mom > sample_docs.pdf + pdfmom slide-demo.mom > slide-demo.pdf + pdfmom -k letter.mom > letter.pdf + pdfmom -k mon_premier_doc.mom > mon_premier_doc.pdf + pdfmom -k typesetting.mom > typesetting.pdf + +Les fichiers +------------ + +Tous les fichiers sont configurés pour le format lettre US, exceptés +mom-pdf.mom et mon_premier_doc.mom, qui utilisent le format A4. + +***typesetting.mom** + +Le fichier typesetting.mom montre l'utilisation d'éléments de +composition typographique: tabulations, tabulations intégrées dans des +chaînes de caractères, remplissage de lignes, texte sur plusieurs +colonnes et différents styles d'indentation; ainsi que certaines +subtilités et réglages précis disponibles via des macros et des +échappements en ligne ("inline escape", des commandes insérées +directement dans le texte, par opposition aux macros). + +Comme ce fichier montre également l'utilisation d'une petite image au +milieu d'un texte et que cette image est la mascotte favorite de tout +le monde -- Tux, le fichier PDF de cette image, penguin.pdf, a été +ajouté dans ce répertoire. + +***sample_docs.mom*** + +Le fichier sample_docs.mom montre en exemple les trois styles de +documents apportés par les macros de formattage de document de mom, +ansi que l'utilisation de COLLATE. Il montre également certaines +fonctionnalités PDF de mom dont l'écriture d'une ébauche de nouvelle +ou des liens cliquables dans une table des matières. + +Le dernier exemple démontre, par un texte séparé en deux colonnes, la +souplesse de mom pour la conception de document. + +Le PRINTSTYLE de ce fichier est TYPESET et vous donne une idée du +comportement par défaut de mom pour la composition typographique de +document. + +Si vous souhaitez voir comment mom traite le même fichier quand +PRINTSTYLE est TYPEWRITE (c'est-à -dire dactylographié, avec espace +double) remplacez .PRINTSTYLE TYPESET par .PRINTSTYLE TYPEWRITE au +début du fichier. + +***letter.mom*** + +Ceci est simplement l'exemple du tutorial de momdocs, prêt à être vu. + +***slide-demo.mom*** + +Le fichier slide-demo.mom montre une présentation de diapositives +avec des effets PAUSE et TRANSITION. Le fichier .pdf généré avec +pdfmom devrait être ouvert en mode Présentation d'un lecteur PDF +(Okular, Evince, Acroread). Notez que pas tous les effets de +transition sont disponibles pour tous les lecteurs PDF. + +***mon_premier_doc.mom*** + +Le fichier mon_premier_doc.mom est un exemple simple en français +montrant l'utilisation d'éléments de formattage courants: titres de +section, paragraphes, listes, table des matières et liens PDF +cliquables. Il doit être généré avec l'option -k du fait de la +présence de caractères accentués. + +Un certain nombre de réglages ont également été changés pour ce +document en français: ATTRIBUTE_STRING est utilisé pour remplacer +"by" par "par" en tête de document (là où le titre et l'auteur sont +affichés). TOC_HEADER_STRING sert à modifier le titre de la table des +matières en "Table des matières" plutôt que "Table of Content". Enfin, +le paramètre de configuration INDENT_FIRST_PARAS est activé afin +d'indenter le premier paragraphe de chaque section -- ceci est l'usage +en typographie française. + +***copyright-default.mom/copyright-chapter.mom*** + +Deux fichiers qui montrent la bonne façon d'insérer une page des +droits d'auteur dans les documents créés avec mom. "Default" est +pour DOCTYPE DEFAULT; "chapter" est pour DOCTYPE CHAPTER. + +***mom-pdf.mom*** + +Le manuel "Producing PDFs with mom and groff". + +***mom.vim*** + +Les règles de coloration syntaxique vim sont baséés sur celles +fournies par Christian V. J. Brüssow (cvjb@cvjb.de). Copiez le fichier +mom.vim dans votre répertoire ~/.vim/syntax directory; ensuite, +autorisez la coloration syntaxique si ce n'est pas encore le cas: + + :syntax enable +ou + :syntax on + +***elvis_syntax.new*** + +Ceux qui utilisent elvis, le clone de vi, peuvent directement +copier-coller le contenu de ce fichier dans leur elvis.syn. Tous les +fichiers ayant l'extension .mom auront la coloration syntaxique. Les +règles dans elvis_syntax ne sont pas exhaustive, mais aideront +beaucoup à rendre les fichiers mom plus lisibles. diff --git a/contrib/mom/examples/README.txt b/contrib/mom/examples/README.txt new file mode 100644 index 0000000..851a9a2 --- /dev/null +++ b/contrib/mom/examples/README.txt @@ -0,0 +1,119 @@ +-*- mode: text; coding: utf-8; -*- +Copyright (C) 2004-2020 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + +======================================================================== + +The files in this directory show mom in action. + +If you have downloaded and untarrred a version of mom from her +homepage, you'll see that none of the example files come with +corresponding PDF (.pdf) files, as they do with pre-compiled +versions of groff, or groff built from source. + +I haven't included the PDF output because I want to keep the mom +archive as lean as possible. To view the PDF output, process the +files with pdfmom(1). + + pdfmom mom-pdf.mom > mom-pdf.pdf + pdfmom sample_docs.mom > sample_docs.pdf + pdfmom slide-demo.mom > slide-demo.pdf + pdfmom -k letter.mom > letter.pdf + pdfmom -k mon_premier_doc.mom > mon_premier_doc.pdf + pdfmom -k typesetting.mom > typesetting.pdf + +The files themselves +-------------------- + +All are set up for US letter papersize except mom-pdf.mom and +mon_premier_doc.mom, which uses A4. + +***typesetting.mom** + +The file, typesetting.mom, demonstrates the use of typesetting tabs, +string tabs, line padding, multi-columns and various indent styles, +as well as some of the refinements and fine-tuning available via +macros and inline escapes. + +Because the file also demonstrates a cutaround using a small picture +of everybody's favourite mascot, Tux, the PDF file, penguin.pdf has +been included in the directory. + +***sample_docs.mom*** + +The file, sample_docs.mom, shows examples of three of the document +styles available with the mom's document processing macros, as well +as demonstrating the use of COLLATE. It also shows off some of +mom's PDF features, including a PDF outline and clickable links in +the printable Table of Contents. + +The last sample, set in 2 columns, demonstrates mom's flexibility +when it comes to designing documents. + +The PRINTSTYLE of this file is TYPESET, to give you an idea of mom's +default behaviour when typesetting a document. + +If you'd like to see how mom handles exactly the same file when the +PRINTSTYLE is TYPEWRITE (ie typewritten, double-spaced), simply +change .PRINTSTYLE TYPESET to .PRINTSTYLE TYPEWRITE near the top of +the file. + +***letter.mom*** + +This is just the tutorial example from the momdocs, ready for +previewing. + +***slide-demo.mom*** + +The file, slide-demo.mom, demonstrates a slide presentation with +PAUSE and TRANSITION effects. The .pdf created by pdfmom should be +opened in Presentation Mode in a PDF reader (e.g. Okular, Evince, +Acroread). Note that not all transition effects are available in +all PDF readers. + +***mon_premier_doc.mom*** + +The file, mon_premier_doc.mom, is a simple example in French showing +the use of common elements: section headings, paragraphs, lists, table +of contents and clickable links. It should be generated with option -k +as there are some accented letters. + +A few settings were also changed for this French document: +ATTRIBUTE_STRING is used to replace "by" by "par" in the document +header (where the title and the author are displayed). +TOC_HEADER_STRING is used to modity the Table of Content title to +"Table des matières". And finally, INDENT_FIRST_PARAS is used to +indent the first paragraph of a section -- this is the usual +convention in French typesetting. + +***copyright-default.mom/copyright-chapter.mom*** + +These two files demonstrate the correct way to insert a copyright +page into mom documents. "Default" is for DOCTYPE DEFAULT; +"chapter" is for DOCTYPE CHAPTER. + +***mom-pdf.mom*** + +The manual, Producing PDFs with mom and groff. + +***mom.vim*** + +The vim syntax highlighting rules are based on those provided by +Christian V. J. Brüssow (cvjb@cvjb.de). Copy mom.vim file to your +~/.vim/syntax directory; then, if your vim isn't already set up to +do so, enable mom syntax highlighting with + + :syntax enable +or + :syntax on + +***elvis_syntax.new*** + +For those who use the vi clone, elvis, you can paste this file into +your elvis.syn. Provided your mom documents have the extension +.mom, they'll come out with colorized syntax highlighting. The +rules in elvis_syntax aren't exhaustive, but they go a long way to +making mom files more readable. diff --git a/contrib/mom/examples/copyright-chapter.mom b/contrib/mom/examples/copyright-chapter.mom new file mode 100644 index 0000000..261c712 --- /dev/null +++ b/contrib/mom/examples/copyright-chapter.mom @@ -0,0 +1,160 @@ +.\" -*- mode: text; coding: utf-8; -*- +\# +\# Copyright (C) 2019-2020 Free Software Foundation, Inc. +\# +\# Copying and distribution of this file, with or without modification, +\# are permitted in any medium without royalty provided the copyright +\# notice and this notice are preserved. +\# +.ig +***Template for creating a copyright page, DOCTYPE CHAPTER*** +. +Mom documents comprised of chapters using DOCTYPE CHAPTER require +the START macro to begin each chapter, and the COLLATE macro to join +it to the subsequent chapter. +. +A copyright page (also called an edition page), which is not a +chapter, should be treated as a DOCTYPE DEFAULT. The text of +the copyright page is entered after START and joined to the first +chapter (DOCTYPE CHAPTER) with COLLATE. +. +Copyright pages are not identified by a title or heading, however +they require a TITLE in order to be included in PDF viewer outlines +and the Table of Contents. Supplying '.TITLE "Copyright"' +but disabling the DOCHEADER achieves both these requirements. +. +Pagination should also be disabled for the copyright page. Both +docheader and pagination should be re-enabled before the START of +the first chapter. +.. +. +.\" Cover setup +. +.\" By default, mom uses the last TITLE macro before START for the +.\" title that appears on the cover. Since the TITLE is "Copyright," +.\" mom needs to be told explicitly to use a different title. +. +.\" Cover and PDF viewer setup +. +.DOCTITLE "Book Title" +.TITLE DOC_COVER \ + "\*[$DOCTITLE]" \" Title for the cover page +.AUTHOR \ + "Book Author" +.DOC_COVER \ + TITLE AUTHOR +.PDF_TITLE \ + "DOCTYPE CHAPTER with copyright page" \" For PDF viewer titlebar +. +.\" Copyright page setup +. +.PRINTSTYLE TYPESET +.DOCTYPE DEFAULT \" Copyright page is not a chapter. +. +.DOCHEADER off 1i \" Turn off docheader for copyright page. +. \" Begin text 1 inch from page top. +.PAGINATION off \" Disable pagination for copyright page. +. +.TITLE "Copyright" \" Required for the PDF viewer outline; does not +. \" get printed because docheader is disabled. +.NO_TOC_ENTRY \" So copyright page is not included in the TOC +. +.START \" Begin example copyright page +All rights reserved. No part of this publication may be reproduced, +distributed, or transmitted in any form or by any means, including +photocopying, recording, or other electronic or mechanical methods, +without the prior written permission of the publisher, except +in the case of brief quotations embodied in critical reviews +and certain other noncommercial uses permitted by copyright +law. For permission requests, write to the publisher, addressed +“Attention: Permissions Coordinator,†at the address below. +.SP +.LEFT +Copyright \[co]2019 Copyright Holder +.SP +Additional information... +.TOC_AFTER_HERE \" Place TOC after copyright page. +. +.COLLATE +. +.\" Chapter setup +. +.DOCTYPE CHAPTER \" Begin using DOCTYPE CHAPTER. +.TITLE \ + "\*[$DOCTITLE]" \" Needed for page headers. +. \" Only required before first chapter. +.CHAPTER 1 +.CHAPTER_TITLE \ + "Sample Chapter" +.DOCHEADER \" Re-enable docheader. +.PAGINATE \" Re-enable pagination. +.PAGENUMBER 1 +. +.START \" Begin first chapter. +.PP +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed at +ante. Mauris eleifend, quam a vulputate dictum, massa quam dapibus +leo, eget vulputate orci purus ut lorem. In fringilla mi in ligula. +Pellentesque aliquam quam vel dolor. Nunc adipiscing. Sed quam odio, +tempus ac, aliquam molestie, varius ac, tellus. Vestibulum ut nulla +aliquam risus rutrum interdum. Pellentesque lorem. Curabitur sit +amet erat quis risus feugiat viverra. Pellentesque augue justo, +sagittis et, lacinia at, venenatis non, arcu. Nunc nec libero. In +cursus dictum risus. Etiam tristique nisl a nulla. Ut a orci. +Curabitur dolor nunc, egestas at, accumsan at, malesuada nec, magna. +.PP +Nulla facilisi. Nunc volutpat. Vestibulum ante ipsum primis in +faucibus orci luctus et ultrices posuere cubilia Curae; Ut sit +amet orci vel mauris blandit vehicula. Nullam quis enim. Integer +dignissim viverra velit. Curabitur in odio. In hac habitasse platea +dictumst. Ut consequat, tellus eu volutpat varius, justo orci +elementum dolor, sed imperdiet nulla tellus ut diam. Vestibulum +ipsum ante, malesuada quis, tempus ac, placerat sit amet, elit. +.PP +Sed eget turpis a pede tempor malesuada. Vivamus quis mi at leo +pulvinar hendrerit. Cum sociis natoque penatibus et magnis dis +parturient montes, nascetur ridiculus mus. Pellentesque aliquet +lacus vitae pede. Nullam mollis dolor ac nisi. Phasellus sit amet +urna. Praesent pellentesque sapien sed lacus. Donec lacinia odio +in odio. In sit amet elit. Maecenas gravida interdum urna. Integer +pretium, arcu vitae imperdiet facilisis, elit tellus tempor nisi, +vel feugiat ante velit sit amet mauris. Vivamus arcu. Integer +pharetra magna ac lacus. Aliquam vitae sapien in nibh vehicula +auctor. Suspendisse leo mauris, pulvinar sed, tempor et, consequat +ac, lacus. Proin velit. Nulla semper lobortis mauris. Duis urna +erat, ornare et, imperdiet eu, suscipit sit amet, massa. Nulla nulla +nisi, pellentesque at, egestas quis, fringilla eu, diam. +.PP +Donec semper, sem nec tristique tempus, justo neque commodo nisl, +ut gravida sem tellus suscipit nunc. Aliquam erat volutpat. Ut +tincidunt pretium elit. Aliquam pulvinar. Nulla cursus. Suspendisse +potenti. Etiam condimentum hendrerit felis. Duis iaculis aliquam +enim. Donec dignissim augue vitae orci. Curabitur luctus felis a +metus. Cum sociis natoque penatibus et magnis dis parturient montes, +nascetur ridiculus mus. In varius neque at enim. Suspendisse massa +nulla, viverra in, bibendum vitae, tempor quis, lorem. +.PP +Donec dapibus orci sit amet elit. Maecenas rutrum ultrices lectus. +Aliquam suscipit, lacus a iaculis adipiscing, eros orci pellentesque +nisl, non pharetra dolor urna nec dolor. Integer cursus dolor vel +magna. Integer ultrices feugiat sem. Proin nec nibh. Duis eu dui +quis nunc sagittis lobortis. Fusce pharetra, enim ut sodales luctus, +lectus arcu rhoncus purus, in fringilla augue elit vel lacus. In +hac habitasse platea dictumst. Aliquam erat volutpat. Fusce iaculis +elit id tellus. Ut accumsan malesuada turpis. Suspendisse potenti. +Vestibulum lacus augue, lobortis mattis, laoreet in, varius at, +nisi. Nunc gravida. Phasellus faucibus. In hac habitasse platea +dictumst. Integer tempor lacus eget lectus. Praesent fringilla augue +fringilla. +.PP +Pellentesque aliquam quam vel dolor. Nunc adipiscing. Sed quam odio, +tempus ac, aliquam molestie, varius ac, tellus. Vestibulum ut nulla +aliquam risus rutrum interdum. Pellentesque lorem. Curabitur sit +amet erat quis risus feugiat viverra. Pellentesque augue justo, +sagittis et, lacinia at, venenatis non, arcu. Nunc nec libero. In +cursus dictum risus. Etiam tristique nisl a nulla. Ut a orci. +.TOC +.\" Local Variables: +.\" mode: nroff +.\" End: +.\" vim: filetype=groff: diff --git a/contrib/mom/examples/copyright-default.mom b/contrib/mom/examples/copyright-default.mom new file mode 100644 index 0000000..25a428f --- /dev/null +++ b/contrib/mom/examples/copyright-default.mom @@ -0,0 +1,149 @@ +.\" -*- mode: text; coding: utf-8; -*- +\# +\# Copyright (C) 2019-2020 Free Software Foundation, Inc. +\# +\# Copying and distribution of this file, with or without modification, +\# are permitted in any medium without royalty provided the copyright +\# notice and this notice are preserved. +\# +.ig +***Template for created a copyright page, DOCTYPE DEFAULT*** + +Mom documents comprised of titled sections using DOCTYPE DEFAULT +(e.g. a collection of articles or a book of short stories by +different authors) require the START macro to begin each new +section, and the COLLATE macro to join it to the subsequent section. +. +A copyright page (also called an edition page) should be treated +as a titled section. The text of the copyright page is entered +after START and joined to the next major section (i.e. the beginning +of a document's content) with COLLATE. +. +Copyright pages are not identified by a title or heading, however +they require a TITLE in order to be included in PDF viewer outlines +and, if desired, the Table of Contents. Supplying '.TITLE "Copyright"' +but disabling the DOCHEADER achieves both these requirements. +. +Pagination should also be disabled for the copyright page. Both +docheader and pagination should be re-enabled before the START of +the first (titled) section of the document. +.. +. +.\" Cover and PDF viewer setup +. +.\" By default, mom uses the last TITLE macro before START for the +.\" title that appears on the cover. Since the TITLE is "Copyright," +.\" mom needs to be told explicitly to use a different title. +. +.TITLE DOC_COVER \ + "Document Title" +.EDITOR DOC_COVER \ + "Document Editor" +.ATTRIBUTE_STRING DOC_COVER \ + "Edited by" +.DOC_COVER \ + TITLE EDITOR +.PDF_TITLE \ + "DOCTYPE DEFAULT with copyright page" \" For PDF viewer titlebar +. +.\" Copyright page setup +. +.PRINTSTYLE TYPESET +.DOCHEADER off 1i \" Turn off docheader for copyright page. +. \" Begin text 1 inch from page top. +.PAGINATION off \" Disable pagination for copyright page. +. +.TITLE "Copyright" \" Required for PDF viewer outline; does not +. \" get printed because docheader is disabled. +. +.NO_TOC_ENTRY \" So copyright page is not included in the TOC +. +.START \" Begin copyright page +All rights reserved. No part of this publication may be reproduced, +distributed, or transmitted in any form or by any means, including +photocopying, recording, or other electronic or mechanical methods, +without the prior written permission of the publisher, except +in the case of brief quotations embodied in critical reviews +and certain other noncommercial uses permitted by copyright +law. For permission requests, write to the publisher, addressed +“Attention: Permissions Coordinator,†at the address below. +.SP +.LEFT +Copyright \[co]2019 Copyright Holder +.SP +Additional information... +.TOC_AFTER_HERE \" Place TOC after copyright page. +. +.COLLATE +. +.\" Sample article setup +. +.TITLE \ + "Sample article" \" Title of first article +.AUTHOR \ + "Article Author" +.DOCHEADER \" Re-enable docheader. +.PAGINATE \" Re-enable pagination. +.PAGENUMBER 1 +. +.START +.PP +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed at +ante. Mauris eleifend, quam a vulputate dictum, massa quam dapibus +leo, eget vulputate orci purus ut lorem. In fringilla mi in ligula. +Pellentesque aliquam quam vel dolor. Nunc adipiscing. Sed quam odio, +tempus ac, aliquam molestie, varius ac, tellus. Vestibulum ut nulla +aliquam risus rutrum interdum. Pellentesque lorem. Curabitur sit +amet erat quis risus feugiat viverra. Pellentesque augue justo, +sagittis et, lacinia at, venenatis non, arcu. Nunc nec libero. In +cursus dictum risus. Etiam tristique nisl a nulla. Ut a orci. +Curabitur dolor nunc, egestas at, accumsan at, malesuada nec, magna. +.PP +Nulla facilisi. Nunc volutpat. Vestibulum ante ipsum primis in +faucibus orci luctus et ultrices posuere cubilia Curae; Ut sit +amet orci vel mauris blandit vehicula. Nullam quis enim. Integer +dignissim viverra velit. Curabitur in odio. In hac habitasse platea +dictumst. Ut consequat, tellus eu volutpat varius, justo orci +elementum dolor, sed imperdiet nulla tellus ut diam. Vestibulum +ipsum ante, malesuada quis, tempus ac, placerat sit amet, elit. +.PP +Sed eget turpis a pede tempor malesuada. Vivamus quis mi at leo +pulvinar hendrerit. Cum sociis natoque penatibus et magnis dis +parturient montes, nascetur ridiculus mus. Pellentesque aliquet +lacus vitae pede. Nullam mollis dolor ac nisi. Phasellus sit amet +urna. Praesent pellentesque sapien sed lacus. Donec lacinia odio +in odio. In sit amet elit. Maecenas gravida interdum urna. Integer +pretium, arcu vitae imperdiet facilisis, elit tellus tempor nisi, +vel feugiat ante velit sit amet mauris. Vivamus arcu. Integer +pharetra magna ac lacus. Aliquam vitae sapien in nibh vehicula +auctor. Suspendisse leo mauris, pulvinar sed, tempor et, consequat +ac, lacus. Proin velit. Nulla semper lobortis mauris. Duis urna +erat, ornare et, imperdiet eu, suscipit sit amet, massa. Nulla nulla +nisi, pellentesque at, egestas quis, fringilla eu, diam. +.PP +Donec semper, sem nec tristique tempus, justo neque commodo nisl, +ut gravida sem tellus suscipit nunc. Aliquam erat volutpat. Ut +tincidunt pretium elit. Aliquam pulvinar. Nulla cursus. Suspendisse +potenti. Etiam condimentum hendrerit felis. Duis iaculis aliquam +enim. Donec dignissim augue vitae orci. Curabitur luctus felis a +metus. Cum sociis natoque penatibus et magnis dis parturient montes, +nascetur ridiculus mus. In varius neque at enim. Suspendisse massa +nulla, viverra in, bibendum vitae, tempor quis, lorem. +.PP +Donec dapibus orci sit amet elit. Maecenas rutrum ultrices lectus. +Aliquam suscipit, lacus a iaculis adipiscing, eros orci pellentesque +nisl, non pharetra dolor urna nec dolor. Integer cursus dolor vel +magna. Integer ultrices feugiat sem. Proin nec nibh. Duis eu dui +quis nunc sagittis lobortis. Fusce pharetra, enim ut sodales luctus, +lectus arcu rhoncus purus, in fringilla augue elit vel lacus. In +hac habitasse platea dictumst. Aliquam erat volutpat. Fusce iaculis +elit id tellus. Ut accumsan malesuada turpis. Suspendisse potenti. +Vestibulum lacus augue, lobortis mattis, laoreet in, varius at, +nisi. Nunc gravida. Phasellus faucibus. In hac habitasse platea +dictumst. Integer tempor lacus eget lectus. Praesent fringilla augue +fringilla dui. +.TOC +.\" Local Variables: +.\" mode: nroff +.\" End: +.\" vim: filetype=groff: diff --git a/contrib/mom/examples/elvis_syntax b/contrib/mom/examples/elvis_syntax new file mode 100644 index 0000000..b5735bf --- /dev/null +++ b/contrib/mom/examples/elvis_syntax @@ -0,0 +1,96 @@ +" Copyright (C) 2004-2020 Free Software Foundation, Inc. +" +" Copying and distribution of this file, with or without modification, +" are permitted in any medium without royalty provided the copyright +" notice and this notice are preserved. + +#Mom +language mom +extension .mom .tmac + +startword . +color startword normal + +inword _.' +color inword normal + +other initialpunct +mostly normal + +backslash none + +color args like fixed +color braces like char +color brackets like underlined +color chars like emphasized +color decimals like number +color ellipsis normal +color escapes like keyword +color math like cursor +color misc like string +color operators like string +color parens like comment +color reg_string like math +color tmac_escapes like keyword +color single_slash like char + +font args DA DE EN ES FR IT NL NO PT SV +font args DEFAULT CHAPTER NAMED LETTER +font args TYPESET TYPEWRITE +font args FINAL DRAFT +font args BLOCK QUAD +font args LEFT RIGHT CENTER CENTRE JUSTIFY TOP BOTTOM L R C J +font args OFF QUIT END EXIT DONE NO ALL +font args PAGE NUMBER STAR +font args LETTER LEGAL EXECUTIVE LEDGER TABLOID QUARTO FOLIO +font args 10x14 A3 A4 A5 B4 B5 +font args SINGLESPACE +font args FACTOR +font args DASH BULLET ALPHA DIGIT USER +font args RGB CYM CMYK GRAY GREY +font args COND CONDX EXT EXTX SUP SUPX CONDSUP CONDSUPX EXTSUP EXTSUPX +font args BOLDER BOLDERX SLANT SLANTX +font args UP DOWN BCK FWD BU BP FU FP +font args ROM IT BD BDI PREV +font args ST +font args SUSPEND RESUME + +prefix { \{ \{\ +font braces { \{ \{\ +prefix [ ] +font brackets [ ] +prefix \(bu \(co \(ct \(de \(dg \(di \(em \(en \(mu \(pl \(rg \(sc \(sq \(lq \(rq +font chars \(bu \(co \(ct \(de \(dg \(di \(em \(en \(mu \(pl \(rg \(sc \(sq \(lq \(rq +prefix \(14 \(12 \(34 \(+- +font chars \(14 \(12 \(34 \(+- +prefix \fR \fB \fI \fP \f0 \f1 \f2 \f3 +font chars \fR \fB \fI \fP \f0 \f1 \f2 \f3 +prefix .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 +font decimals . .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 +prefix \/ \/. \/? \/! \/, \/; \/: +font escapes \/ \/. \/? \/! \/, \/; \/: +prefix \, \,. \,? \,! \,, \,; \,: +font escapes \, \,. \,? \,! \,, \,; \,: +prefix \~ \0 \: \| \^ \& \% \! +font escapes \~ \0 \: \| \^ \& \% \! +prefix \b \c \C \d \D \e \f \f( \h \l \L \p \r \s \s+ \s- \S \u \v \w +font escapes \b \c \C \d \D \e \f \f( \h \l \L \p \r \s \s+ \s- \S \u \v \w +prefix ... +font ellipsis ... +prefix + - * / = == < > <= >= <? >? % +font math + - * / = == < > <= >= <? >? % +prefix | +font misc | +prefix ! : & +font operators ! : & +prefix ( ) +font parens ( ) +prefix # * $ +font reg_string # * $ +prefix \n \* \[ +font single_slash \n \* \[ +prefix \\n \\* \\$ +font tmac_escapes \\n \\* \\$ + +comment \# +comment \" diff --git a/contrib/mom/examples/elvis_syntax.new b/contrib/mom/examples/elvis_syntax.new new file mode 100644 index 0000000..5dadecc --- /dev/null +++ b/contrib/mom/examples/elvis_syntax.new @@ -0,0 +1,116 @@ +" Copyright (C) 2004-2020 Free Software Foundation, Inc. +" +" Copying and distribution of this file, with or without modification, +" are permitted in any medium without royalty provided the copyright +" notice and this notice are preserved. + +" Steve Kirkendall has thoughtfully reworked elvis's syntax +" highlighting so that it now supports nroff constructs like \fBword +" and \(emword, with \fB and \(em being highlighted while "word" is +" not. +" +" There are some other enhancements as well, making it possible +" to have any word beginning with punctuation (i.e. groff +" requests) highlighted. I've decided to take advantage of these +" improvements, which apply to elvis-2.2h onwards, and write a new +" simplified set of syntax highlighting rules for mom. Just plug +" this file at the end of /etc/elvis/elvis.syn to use them. +" +" If you're using an older version of elvis, stick with the +" highlighting rules in the files elvis_syntax. + +#Mom +language mom +extension .mom .tmac + +startword . +color startword normal + +inword _.' +color inword normal + +other initialpunct +mostly normal + +backslash none + +color args like fixed +color braces like char +color brackets like underlined +color chars like emphasized +color decimals normal +color ellipsis normal +color escapes like keyword +color math like cursor +color misc like string +color operators like string +color parens like comment +color reg_string like math +color tmac_escapes like keyword +color single_slash like char + +font args DA DE EN ES FR IT NL NO PT SV +font args DEFAULT CHAPTER NAMED LETTER +font args TYPESET TYPEWRITE +font args FINAL DRAFT +font args BLOCK QUAD +font args LEFT RIGHT CENTER CENTRE JUSTIFY TOP BOTTOM L R C J +font args OFF QUIT END EXIT DONE NO ALL +font args PAGE NUMBER STAR LINE +font args LETTER LEGAL EXECUTIVE LEDGER TABLOID QUARTO FOLIO +font args 10x14 A3 A4 A5 B4 B5 +font args SINGLESPACE +font args FACTOR +font args DASH BULLET ALPHA DIGIT USER ROMAN roman alpha +font args SUSPEND RESUME +font args RGB CYM CMYK GRAY GREY +font args COND CONDX EXT EXTX SUP SUPX CONDSUP CONDSUPX EXTSUP EXTSUPX +font args BOLDER BOLDERX SLANT SLANTX +font args UP DOWN BCK FWD BU BP FU FP FN_MARK EN_MARK +font args ROM IT BD BDI PREV +font args ST +font args COVER DOC_COVER +font args COVERTITLE DOCTITLE TITLE CHAPTER CHAPTER_TITLE CHAPTER+TITLE SUBTITLE +font args AUTHOR DOCTYPE COPYRIGHT MISC +font args NULL BLANKPAGE NOBREAK + +prefix { \{ \} \{\ } +font braces { \{ \} \{\ } +prefix [ ] +font brackets [ ] +prefix \(bu \(co \(ct \(de \(dg \(di \(em \(en \(mu \(pl \(rg \(sc \(sq \(lq \(rq +font chars \(bu \(co \(ct \(de \(dg \(di \(em \(en \(mu \(pl \(rg \(sc \(sq \(lq \(rq +prefix \(14 \(12 \(34 \(+- +font chars \(14 \(12 \(34 \(+- +prefix \fR \fB \fI \fP \f0 \f1 \f2 \f3 +font chars \fR \fB \fI \fP \f0 \f1 \f2 \f3 +prefix .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 +font decimals . .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 +prefix \/ \/. \/? \/! \/, \/; \/: +font escapes \/ \/. \/? \/! \/, \/; \/: +prefix \, \,. \,? \,! \,, \,; \,: +font escapes \, \,. \,? \,! \,, \,; \,: +prefix \~ \0 \: \| \^ \& \% \! +font escapes \~ \0 \: \| \^ \& \% \! +prefix \b \c \C \d \D \e \f \f( \h \l \L \p \r \s \s+ \s- \S \u \v \w +font escapes \b \c \C \d \D \e \f \f( \h \l \L \p \r \s \s+ \s- \S \u \v \w +prefix ... +font ellipsis ... +prefix + - * / = == < > <= >= <? >? % +font math + - * / = == < > <= >= <? >? % +prefix | +font misc | +prefix ! : & +font operators ! : & +prefix ( ) +font parens ( ) +prefix # * $ +font reg_string # * $ +prefix \n \* +font single_slash \n \* +prefix \\n \\* \\$ +font tmac_escapes \\n \\* \\$ + +character \]' +comment \# +comment \" diff --git a/contrib/mom/examples/letter.mom b/contrib/mom/examples/letter.mom new file mode 100644 index 0000000..6e1a0c0 --- /dev/null +++ b/contrib/mom/examples/letter.mom @@ -0,0 +1,46 @@ +.\" -*- mode: text; coding: utf-8; -*- +\# +\# Copyright (C) 2004-2020 Free Software Foundation, Inc. +\# +\# Copying and distribution of this file, with or without modification, +\# are permitted in any medium without royalty provided the copyright +\# notice and this notice are preserved. +\# +.AUTHOR "Yannick P. Guique" +.DOCTYPE LETTER +.PRINTSTYLE TYPESET +.START +.DATE +August 25, 2013 +.TO +GUILLAUME BARRIÈRES +Minidoux Corporation +5000 Pannes Drive +Redmond, Virginia +USA +.FROM +Y.P. GUIQUE +022 Umask Road +St-Sauveur-en-dehors-de-la-mappe, Québec +CANADA +.GREETING +Dear Mr. Barrières, +.PP +It has come to my attention that you have been lobbying the +US government to prohibit the use of open source software by +endeavouring to outlaw so-called "warranty free" applications. +.PP +I feel it is my duty to inform you that the success of your +operating system with its embedded web browser relies heavily +on open source programs and protocols, most notably TCP/IP. +.PP +Therefore, in the interests of your corporation's fiscal health, +I strongly advise that you withdraw support for any US +legislation that would cripple or render illegal open source +development. +.CLOSING +Sincerely, +.\" Local Variables: +.\" mode: nroff +.\" End: +.\" vim: filetype=groff: diff --git a/contrib/mom/examples/mom-pdf.mom b/contrib/mom/examples/mom-pdf.mom new file mode 100644 index 0000000..15cf6df --- /dev/null +++ b/contrib/mom/examples/mom-pdf.mom @@ -0,0 +1,620 @@ +.\" -*- mode: text; coding: utf-8; -*- +.\" +.\" Copyright (C) 2012-2020 Free Software Foundation, Inc. +.\" +.\" This file is part of mom, which is part of groff, a free software +.\" project. +.\" +.\" You can redistribute it and/or modify it under the terms of the +.\" GNU General Public License as published by the "Free Software + \" Foundation", version\~2. +.\" +.\" The license text is available on the internet at +.\" <http://www.gnu.org/licenses/gpl-2.0.html> +.\" +.PAPER A4 +.\" Reference macros (metadata) +.TITLE "Producing PDFs" "with groff and mom" +.PDF_TITLE "\*[$TITLE] +.COPYRIGHT "20\*[BU3]1\*[BU2]5, 20\*[BU3]1\*[BU2]7 Free Software Foundation +.AUTHOR "Deri James" "\*[UP .5p]and" "Peter Schaffter" +.\" Cover author style +.COVER_AUTHOR_STYLE \ + LEAD 15 \ + SPACE -.5v +.\" Docheader author style +.AUTHOR_STYLE \ + LEAD 14 \ + SPACE -.75 +.ATTRIBUTE_STRING "" \" Don't print 'by' +.\" +.PDF_BOOKMARKS_OPEN 2 +.\" Formatting style, margins +.PRINTSTYLE TYPESET +.L_MARGIN 2.5c +.R_MARGIN 2.5c +.B_MARGIN 2.5c +.\" General defaults +.FAM H +.FT R +.PT_SIZE 10.5 +.AUTOLEAD 3 +.PARA_INDENT 0 \" No indent because we're spacing paragraphs. +.COVERTEXT +.SP .5v +.QUAD CENTER +.HY off +.IB 8P +.\" Copyright notice +This file is part of groff. +.SP .5v +Groff is free software. You can redistribute it +and\*[FU3]/or modify it under the terms of the GNU +General Public License as published by the +Free Software Foundation, either version 3 +of the License, or (at your option) any later +version. +.SP .5v +You should have received a copy of the GNU +General Public License along with this program. +If not, see: +.SP .25v +.PDF_LINK_COLOR 0.0 0.3 0.9 +.PDF_WWW_LINK http://www.gnu.org/licenses/ +.IQ CLEAR +.HY +.COVERTEXT end +.\" Cover and page header +.COVER TITLE AUTHOR COPYRIGHT COVERTEXT +.HEADER_LEFT "James, Schaffter" +.\" +.COVER_LEAD +3.5 +.DOCHEADER_LEAD +3.5 +.\" Color for code snippets +.NEWCOLOUR dark-grey RGB #343434 +.\" Make QUOTE look like CODE +.QUOTE_STYLE \ + FAMILY C \ + FONT B \ + SIZE +1.5 \ + COLOR dark-grey \ + INDENT 9p +.\" +.CODE_STYLE \ + FONT B \ + SIZE 115 \ + COLOR dark-grey +.CONDENSE 87 \" Condense percentage used in COD +.\" +.HEADING_STYLE 1 \ + NUMBER \ + FONT B \ + SIZE +1 \ + BASELINE_ADJUST \n[.v]/5 +.HEADING_STYLE 2 \ + NUMBER \ + FONT I \ + SIZE +.25 \ + BASELINE_ADJUST \n[.v]/5 +.\" +.FOOTNOTE_SIZE -1 +.\" Character definitions for program names, opts, etc. +.char \[ghostscript] \*[BD]ghostscript\*[PREV] +.char \[groff] \*[BD]groff\*[PREV] +.char \[gropdf] \*[BD]gropdf\*[PREV] +.char \[grops] \*[BD]grops\*[PREV] +.char \[man] \*[BD]man\*[PREV] +.char \[-mom] \*[BD]\-mom\*[PREV] +.char \[mom] \*[BD]mom\*[PREV] +.char \[-mpdfmark] \*[BD]\-mpdfmark\*[PREV] +.char \[ms] \*[BD]ms\*[PREV] +.char \[pdfmom] \*[BD]pdfmom\*[PREV] +.char \[pdfroff] \*[BD]pdfroff\*[PREV] +.char \[-P-e] \*[BD]\-P\-e\*[PREV] +.char \[-P-p<papersize>] \*[BD]\-P\-p<papersize>\*[PREV] +.char \[ps2pdf] \*[BD]ps2pdf\*[PREV] +.char \[psselect] \*[BD]psselect\*[PREV] +.char \[-T] \*[BD]\-T\*[PREV] +.char \[-Tpdf] \*[BD]\-Tpdf\*[PREV] +.char \[-Tps] \*[BD]\-Tps\*[PREV] +.\" Strings for inline code +.ds cod \E*[CODE]\&\E*[COND] +.ds codx \E*[CONDX]\E*[CODE off]\& +.\" Paragraph spacing +.PARA_SPACE .3v +.\" Wrapper around QUOTE +.de COD +. QUOTE +. nop \*[COND]\\$*\*[CONDX] +. QUOTE OFF +.. +.\" Table of contents +.TOC_PADDING 2 +.SPACE_TOC_ITEMS +.AUTO_RELOCATE_TOC +.TOC_ENTRY_STYLE 2 FONT I +.TOC_LEAD 14.5 ADJUST +.TOC_PADDING 1 +.\" +.DOCHEADER_ADVANCE 5c \" Begin docheader this distance down from top of page +.\" +.NO_SHIM \" Use flex spacing +.START +.\" +.SP .5c +.HEADING 1 NAMED intro "Introduction" +.PP +.RW .12 +PDF documents are intended to be "electronic paper,\*[BU6]" and, as +such, take advantage of the digital medium in ways that PostScript +documents do not. Chief amongst these are clickable links that +point to named destinations, either within the documents themselves +.PDF_LINK internal PREFIX ( SUFFIX ) "internal links" +or to remote web pages +.PDF_LINK external PREFIX ( SUFFIX ), "external links" +and the generation of a clickable document outline that appears in +the Contents panel of most PDF viewers. +.PP +.RW .01 +Using \[groff] and \[mom] to produce PDF documents results in the +automatic generation of clickable document outlines (discussed +below, +.PDF_LINK outline SUFFIX ), + +and, if the \*[cod]TOC\*[codx] macro is included in the source file, +entries in the printable table of contents can be clicked on as well +when the document is viewed at the screen (see +.PDF_LINK toc SUFFIX ). + +.RW 0 +.HEADING 1 NAMED generating "Using groff to generate PDF files" +.PP +Groff provides more than one way to generate PDF documents from +files formatted with the \[mom] macros. One is to call \[groff] +directly, either with +.COD "groff [\-Tps] \-mom \-m pdfmark doc.mom | ps2pdf \- doc.pdf +which pipes output from the \[grops] PostScript driver through +\[ps2pdf], or +.COD "groff \-Tpdf \-mom doc.mom > doc.pdf +which uses the native PDF driver, \[gropdf]. Alternatively, one may +call the wrapper +.COD "pdfroff \-mom \-mpdfmark \-\-no-toc doc.mom > doc.pdf +A fourth, preferred method is to use +.PDF_LINK pdfmom SUFFIX , "\[pdfmom]" +which is strongly recommended since it implements the full range +of PDF features available in \[mom]. +.COD "pdfmom doc.mom > doc.pdf +One reason to prefer using the native PDF driver (via \[pdfmom] or +\[-Tpdf]) is that papersizes set within mom source files (see +.PDF_WWW_LINK https://www.schaffter.ca/mom/momdoc/typesetting.html#page-setup-intro SUFFIX ) \ + "paper and page setup macros" +do not require a corresponding \[-P-p<papersize>] flag on the +command line. +.PP +There are other minor differences between the methods, discussed +.PDF_LINK pdf-diff SUFFIX . "here" +.RW 0 +.HEADING 1 NAMED links "Creating PDF links with mom" +.PP +Often, but not always, links in the body of a PDF document point +to headings elsewhere in the same document. Creating these links +is a simple process. First, identify the places to link to +("destinations"), then link to them from any place in the document. +.HEADING 2 NAMED naming "Creating destination points at headings" +.PP +The first step in creating links to a heading is to give the +heading a unique destination name. With mom, this is done by +adding \*[cod]NAMED\|<id>\*[codx] to the HEADING macro, where +\*[cod]<id>\*[codx] is a unique identifier for the heading. For +example, +.PDF_TARGET intro-ex +.COD "\&.HEADING 1 NAMED intro \[dq]Introduction\[dq]" +would, in addition to printing the head in the body of the document, +identify the introduction by the unique id, "intro"\*[BU6]. This +id, or name, can then be used to create links to the introduction +from any part of the document. +.PP +Furthermore, \*[cod]NAMED\|<id>\*[codx] stores the text of the +heading for use later on when linking to it (see +.PDF_LINK internal SUFFIX ). + +If headings are being numbered, the heading number is prepended. +.HEADING 2 NAMED target "Creating destination points at arbitrary locations" +.PP +Any part of a document can be a link destination, not just headings. +For example, say you create a table that needs to be referred to +from other parts of the document. You'd identify the location of +the table by placing +.COD "\&.PDF_TARGET <id> \[dq]<text>\[dq]" +just above the table in the source file. As with +\*[cod]HEADING\*[codx], \*[cod]<id>\*[codx] is any unique name. +\*[cod]<text>\*[codx] is optional. \*[cod]<id>\*[codx] can now be linked +to from anywhere in the document. +.SP 2.5p +.HEADING 2 NAMED internal "Creating internal links" +.PP +Internal links are clickable text areas that allow you to jump to +named destinations within a document. (See +.PDF_LINK external "here" +for a description of external links.) +.PP +Internal links are created with the macro \*[cod]PDF_LINK\*[codx], +which takes the form +.COD "\&.PDF_LINK <id> [PREFIX <text>] [SUFFIX <text>] \ +\[dq]<hotlink text>\[dq]" +where \*[cod]<id>\*[codx] is a named destination point elsewhere in +the document (see +.PDF_LINK naming + +and +.PDF_LINK target SUFFIX ). + +.PP +\*[cod]PREFIX\|<text>\*[codx] and \*[cod]SUFFIX\|<text>\*[codx], both or +either of which are optional, are printed around the clickable area +but do not form part of the link itself. +.PP +\*[cod]<hotlink text>\*[codx] is the text that should be clickable, +identifiable in the PDF document by the colour assigned to links +(see +.PDF_LINK colour SUFFIX ). + +.PDF_TARGET expando +.PP +If the hotlink text ends in \*[cod]\[dq]*\[dq]\*[codx]\*[BU9], +the asterisk is replaced by the text of the destination +point, assuming it's a heading. If the hotlink text ends in +\*[cod]\[dq]+\[dq]\*[codx]\*[BU9], the replacement text is surrounded +by quotes. +.PP +Using our +.PDF_LINK intro-ex SUFFIX , "HEADING example" +.RW .1 +above, the following invocation of \*[cod]PDF_LINK\*[codx] would +produce a click\%able link to the introduction: +.COD "\&.PDF_LINK intro PREFIX ( SUFFIX ). \[dq]see: +\[dq]" +.RW 0 +In the text, the link would look like this: +.PDF_LINK intro PREFIX ( SUFFIX ). "see: +" +.HEADING 2 NAMED external "Creating external links" +.PP +External links are clickable text areas whose destination is a +URL. Clicking on them causes a browser window to pop up with the +destination address. +.PP +The format of the macro to create external links is similar to the +one for creating internal links: +.COD "\&.PDF_WWW_LINK <url> [PREFIX <text>] [SUFFIX <text>] [\[dq]<hotlink text>\[dq]]" +\*[cod]<url>\*[codx] is any valid URL, usually a web address; +\*[cod]PREFIX\|<text>\*[codx] and \*[cod]SUFFIX\|<text>\*[codx] have +exactly the same meaning, as does \*[cod]<hotlink text>\*[codx], +which furthermore accepts the same expandos, \*[cod]\[dq]+\[dq]\*[codx] and +\*[cod]\[dq]*\[dq]\*[codx]. +.PP +.RW .1 +If no hotlink text is given, then \*[cod]<url>\*[codx] is +used as the text. If hotlink text is given and ends in +\*[cod]\[dq]*\[dq]\*[codx]\*[BU9], the asterisk is replaced by the +URL. If it ends in \*[cod]\[dq]+\[dq]\*[codx]\*[BU9], the URL is +surrounded by quotes. As an example, +.RW 0 +.COD "\&.PDF_WWW_LINK https://www.schaffter.ca/mom/momdoc/toc.html +would open mom's online documentation at +.PDF_WWW_LINK https://www.schaffter.ca/mom/momdoc/toc.html SUFFIX "." +The same, with \*[cod]\[dq]here\[dq]\*[codx] supplied as +hotlink text, lets you click +.PDF_WWW_LINK https://www.schaffter.ca/mom/momdoc/toc.html "here" +instead. +.HEADING 2 NAMED colour "Assigning a colour to links" +.PP +The colour of links is set with +.COD "\&.PDF_LINK_COLOR <xcolor> | <newcolor> | <r g b> | <#rrggbb> +where \*[cod]<xcolor>\*[codx] or \*[cod]<newcolor>\*[codx] are the names +of colours already initialized with +.PDF_WWW_LINK https://www.schaffter.ca/mom/momdoc/color.html#xcolor "XCOLOR" +or +.PDF_WWW_LINK https://www.schaffter.ca/mom/momdoc/color.html#newcolor SUFFIX . "NEWCOLOR" +If you prefer to define a new colour (using the RGB colour scheme), +enter it either as 3 numbers between +0.0 \*[UP 1p]\[->]\*[DOWN 1p] 1\*[BU4].0 +or as a 6 character hex string. Thus +.SP .5v +\*[FWD 6p]\*[cod].PDF_LINK_COLOR #ff0000\*[codx] +\ \*[SIZE -.5]and\*[SIZE]\ \" +\*[cod].PDF_LINK_COLOR 1.0 0 0\*[codx] +.SP .5v +both lead to mom using +.PDF_LINK_COLOR 1 0 0 +.PDF_LINK colour red +.PDF_LINK_COLOR +links. +.PP +The default colour can be restored by calling +\*[cod]PDF_LINK_COLOR\*[codx] with no parameter. +.FLOAT +.JUSTIFY +.BOX-NOTE 3P +\*[BD]Note:\*[PREV] +The decimal scheme for creating colours must be used if a file is to +be processed with +\[oq]\[groff]\~\[-Tps]\~\[-mpdfmark]\[cq], +\[oq]\[pdfroff]\[cq], or +\[oq]\[pdfmom]\~\[-Tps]\[cq]. +.IBQ +.FLOAT off +.SP .5v +.HEADING 1 NAMED outline "The PDF Outline" +.PP +Most PDF viewers provide a panel that displays a document's outline, +similar to a table of contents. Clicking on an entry navigates +directly to the appropriate place in the document. +.PP +Mom generates PDF outlines the same way she populates +her own table of contents: by intercepting calls to the +\*[cod]HEADING\*[codx] macro, as well as to the various title +and chapter macros used in namimg documents, and allocating each a +hierarchic level. +.PP +Covers, titles/chapters, and the table of contents are all +assigned to level 1\*[BU5]. Subsequent headings are assigned to +n\*[UP 1p]+\*[DOWN 1p]\*[BU4]1, where n is the level given to +\*[cod]HEADING\*[codx]. +.PP +.RW .22 +The PDF outline can sensibly recover from skipped or omitted heading +levels; the printed table of contents cannot. Users are therefore +advised to use headings in logical order, not for typographic +effects. +.RW 0 +.HEADING 2 NAMED open-close "Opening and closing levels +.PP +A level is said to be open if one or more levels beneath it is +visible in the PDF outline. Closed \%levels have at least one level +beneath them that is not visible unless the closed link is clicked. +It is common for only the first two levels to be open so the outline +doesn't look cluttered. +.PP +To establish which levels should be open by default when a document +loads, use +.COD "\&.PDF_BOOKMARKS_OPEN n +where \*[cod]n\*[codx] is a number specifying at which level all +subsequent ones should be closed. +.PP +If, at any point in the document, you specify +.COD "\&.PDF_BOOKMARKS_OPEN NO \e\[dq] or any other text argument +then all subsequent bookmarks will be closed until +\*[cod]PDF_BOOKMARKS_OPEN\*[codx] opens them again. +.HEADING 2 NAMED disabling "Suspending/disabling collection of outline entries +.PP +Suspending the collection of entries for the PDF outline is +accomplished with +.COD "\&.PDF_BOOKMARKS OFF +Mom's default is to collect entries, so if the command is placed at +the start of a document, it \%disables entry collection completely. +Elsewhere, it suspends collection until you re-enable it with +.COD "\&.PDF_BOOKMARKS \e\[dq] i.e. with no parameter +.SP -1 +.HEADING 2 NAMED pdf:title "The PDF window title" +.PP +While not strictly part of the PDF outline, the title of a document +can be displayed as the document viewer's window title. The macro +to accomplish this is +.COD "\&.PDF_TITLE\ \[dq]<window title>\[dq] +It can take any text, so the viewer window title need not be the +same as the document's title. +.FLOAT +.JUSTIFY +.BOX-NOTE 4P+8p +\*[BD]Note:\*[PREV] The macro, \*[cod]DOC_TITLE\*[codx], always +invokes \*[cod]PDF_TITLE\*[codx]. If this is not what you want, you +can remove the window title by issuing +.COD ".PDF_TITLE \[dq]\[dq] \e\[dq] ie. with a blank argument +.IBQ +.FLOAT off +\#.SP .5v +.HEADING 1 NAMED toc "Tables of Contents" +.RLD .5v +.HEADING 2 NAMED toc:gen "Generating a Table of Contents +.PP +.RW .1 +To generate a printable Table of Contents for any document, simply +insert the macro, \*[cod]TOC\*[codx], as the last line of the source +file. (Formatting of the printable Table of Contents is discussed in +detail in the +.PDF_WWW_LINK \ +https://www.schaffter.ca/mom/momdoc/tables-of-contents.html#top \ +SUFFIX ). "mom documentation" +When the file is processed and loaded in a viewer, entries in the +Table of Contents will be clickable links. +.RW 0 +.PP +Whichever link colour is active at the end of the document, prior to +\*[cod]TOC\*[codx], will be used for the \%Table of Contents +links. +.HEADING 2 NAMED toc:pos "Positioning the Table of Contents" +.PP +If \[groff]'s PostScript device (\[-Tps]) is used to process a mom +file, the Table of Contents is printed at the end of the document. +When this is not desirable, the PostScript output from \[groff] +must be processed with \[psselect] in order to place the TOC in the +preferred location. +.PP +When using mom and \[groff]'s native pdf device (via \[pdfmom] or +\[groff] \[-Tpdf]), positioning of the Table of Contents can be done +within the source file. +.PP +The command to control the placement of the TOC is +.COD "\&.AUTO_RELOCATE_TOC [<position>] +where the optional \*[cod]<position>\*[codx] can be one of these +keywords: +.LEFT +.IL 2P +.SP .25v +\*[SIZE -.7]TOP\*[FU2]\*[UP .5p]\c +.FOOTNOTE +\*[BD]Note:\*[PREV] Documents without a COVER or DOC_COVER require +the \*[cod]TOP\*[codx] argument. +.FOOTNOTE off +\*[IT]\*[SIZE +.2]\ +(ie. at the very start of the document)\*[SIZE -.2]\*[PREV] +BEFORE_DOCCOVER +AFTER_DOCCOVER +BEFORE_COVER +AFTER_COVER\*[SIZE +.7] +.SP .25v +.ILQ +.JUSTIFY +It is normally not necessary to supply a keyword, since +\*[cod]AUTO_RELOCATE_TOC\*[codx] places the TOC after the DOC_COVER, +if there is one, or the first COVER when no DOC_COVER is present. +In rare instances where it is desirable to place the TOC somewhere +else in the document, there are two low-level commands, +\*[cod].TOC_BEFORE_HERE\*[codx] +\ \*[SIZE -.5]and\*[SIZE]\ \" +\*[cod].TOC_AFTER_HERE\*[codx] +which place the TOC either before or after the current page. +.PP +These last two commands have a small catch: although the TOC will +appear where specified, the \%"Contents" entry in the PDF outline, +which observes a hierarchy of levels, will assign the TOC to +level\~\*[BU4]1\*[BU4], possibly disrupting the visual ordering of +levels in the outline. +.HEADING 1 NAMED simplify "pdfmom: Simplifying PDF output" +.PP +As explained in the section +.PDF_LINK generating SUFFIX , * +.RW .15 +there are two established methods +.RW 0 +for creating PDF files with \[groff]: the original method, ie. +passing the \[-Tps] and \[-mpdfmark] options to \[groff] (or using +\[pdfroff], which does this for you); or the newer \[-Tpdf], which +produces PDF files natively. +.HEADING 2 NAMED fwd:ref "The problem of forward references" +.PP +.EW .2 +Both methods encounter difficulties when dealing with forward +references; that is, when a link \*[IT]\%earlier\/\*[PREV] in a +document refers to a destination \*[IT]later\/\*[PREV] in the +document and the link text terminates +.EW 0 +with one of the expandos, +\*[cod]\[dq]*\[dq]\*[codx] or \*[cod]\[dq]+\[dq]\*[codx] +(explained +.PDF_LINK expando SUFFIX ). "here" +Mom doesn't know what text to put in the expando because it has not +yet been defined. This means that \[groff] must be run multiple +times to find the unknown text. +.PP +.EW .2 +The program \[pdfroff] exists to handle these multiple runs, but it +imposes some limitations on the PDF features available with \[mom]. +.EW 0 +.HEADING 2 NAMED pdfmom "pdfmom" +.PP +\[pdfmom] performs the same function as \[pdfroff], and is the +preferred, trouble-free way to generate PDF documents from a mom +source file. Like \[pdfroff], it is a frontend to \[groff] and +accepts all the same options (see \[man]\~\[groff]). +.PP +.EW .2 +Called as-is, \[pdfmom] accepts all the same options as \[groff], +and requires no additional flags. PDF generation is performed by +\[gropdf], \[groff]'s native PDF driver: +.EW 0 +.COD "pdfmom doc.mom [groff opts] > doc.pdf +If a \[-Tps] option is supplied, \[pdfmom] hands control over to +\[pdfroff], and both \[groff] and \[pdfroff] options may given. +The resulting PDF is produced from PostScript output fed into +\[ghostscript]. +.COD "pdfmom \-Tps [pdfroff opts [groff opts]] doc.mom > doc.pdf +For either invocation, it is not necessary to add \[-mom] or +\[-mpdfmark], as these are implied. +.PP +.RW .04 +If Encapsulated PostScript or plain PostScript images have been +embedded in a document with +.PDF_WWW_LINK https://www.schaffter.ca/mom/momdoc/images.html#pspic SUFFIX , \ + "PSPIC" +the \[-Tps] option must be used. In most other cases, \[pdfmom] +with no \[-T] flag is preferable. +.RW 0 +.HEADING 2 NAMED papersize "Setting papersize within a source file" +.PP +A significant convenience afforded by using \[pdfmom] (or \[groff] +with the \[-Tpdf] flag) is that papersizes or page dimensions set +within mom source files (see +.PDF_WWW_LINK https://www.schaffter.ca/mom/momdoc/typesetting.html#page-setup-intro \ + SUFFIX ) "paper and page setup macros" +do not require a corresponding \[-P-p<papersize>] option on the +command line. It is even possible to create documents with +unequal-sized pages. +.HEADING 2 NAMED pdf-diff \ +"Differences between pdfmom and pdfroff" +.PP +Several features described in this manual are not available when +the \[-Tps] option is given to \[pdfmom], nor when using \[pdfroff] +or \[groff]\~\[-Tps]\~\[-mpdfmark]: +.SP .25v +.QUAD LEFT +.HYPHENATION off +.IB 16p +.LIST +.ITEM +.PDF_LINK toc:pos "Relocation of the Table of Contents" +is not supported. The TOC appears at the end of the document; +\[psselect] must be used to re-order pages. +.ITEM +If a link crosses a page boundary, it will stop being a clickable +hotspot on subsequent pages. +.ITEM +When establishing whether PDF outline levels are +.PDF_LINK open-close SUFFIX , "open or closed" +only the numerical parameter to \*[cod]PDF_BOOKMARKS_OPEN\*[codx] has +any effect. +.ITEM +.PDF_LINK colour "PDF_LINK_COLOR" +only accepts colour definitions in decimal notation. +.LIST OFF +.IQ +.HEADING 1 \ +"Comparison of \-Tps\*[FU4]/\*[FU2]\-mpdfmark with \-Tpdf\*[FU4]/\*[FU2]\-mom +.SP .25v +.IB +\[-Tps]\*[FU4]/\*[FU2]\[-mpdfmark] +.LIST +.SHIFT_LIST 1P+6p +.ITEM +does not support all the features described here +.ITEM +accepts images and graphics embedded with PSPIC +.LIST OFF +.IQ +.ALD .4v +.IB +\[-Tpdf]\*[FU4]/\*[FU2]\[-mom] +.LIST +.SHIFT_LIST 1P+6p +.ITEM +facilitates embedding fonts directly in the PDF file (if the +\[-P-e] flag is given on the command line) +.ITEM +sets papersize from within the source file, circumventing the need +for the papersize flag (\[-P-p<papersize>]) on the command line +.ITEM +is not compatible with +.PDF_WWW_LINK \ + https://www.schaffter.ca/mom/momdoc/docprocessing.html#printstyle \ + "PRINTSTYLE TYPEWRITE" +underlining (e.g., of italics) +.ITEM +generally produces larger files; these can be reduced by piping +the output through \[ps2pdf]\*[B] +.sp -1.25v +.BOX OUTLINED black SHADED grey90 WEIGHT 1p INSET 6p +.JUSTIFY +\*[BD]Note:\*[PREV] Owing to a known bug, PDF files piped through +\[ps2pdf] lose some of their metadata, notably the window title set +with \*[cod]PDF_TITLE\*[codx]. +.BOX STOP +.SP -.25v +.LIST OFF +.TOC +.\" Local Variables: +.\" mode: nroff +.\" End: +.\" vim: filetype=groff: diff --git a/contrib/mom/examples/mom.vim b/contrib/mom/examples/mom.vim new file mode 100644 index 0000000..fe8debf --- /dev/null +++ b/contrib/mom/examples/mom.vim @@ -0,0 +1,140 @@ +" Copyright (C) 2012-2020 Free Software Foundation, Inc. +" +" Copying and distribution of this file, with or without modification, +" are permitted in any medium without royalty provided the copyright +" notice and this notice are preserved. + +" Vim syntax file +" Language: mom +" Maintainer: Peter Schaffter (peter@schaffter.ca) +" Last Change: So 06 Mär 2005 17:28:13 CET +" Filenames: *.mom +" URL: http://www.cvjb.de/comp/vim/mom.vim +" Note: Remove or overwrite troff syntax for *.mom-files with filetype/filedetect. +" Version: 0.1 +" +" Mom: Macro set for easy typesetting with troff/nroff/groff. + +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +" Mom is case sensitive +syn case match + +" Synchronization, I know it is a huge number, but normal texts can be +" _very_ long ;-) +syn sync lines=1000 + +" Characters allowed in keywords +if version >= 600 + setlocal iskeyword=@,#,$,%,48-57,.,@-@,_,\\,{,},192-255 +else + set iskeyword=@,#,$,%,48-57,.,@-@,_,\\,{,},192-255 +endif + +" mom/groff macros and requests (the initial dot or single-quote) +" +" Highlighting carries through to EOL; macro names, requests and +" arguments are contained +syn match startRequest /^\s*\(\.\|'\)\s*.*$/ contains=momMacro,groffCommentLine,groffRequest,momRegister,groffNoLineBreak,momInteger,groffUnit,momString,momSpecialParam,groffDelimiter,groffRegister,groffPreprocessor,groffBraces + +" mom macros +syn region momMacro start=/^\s*\(\.\|'\)\s*\zs[A-Z0-9_(){}\[\]]\+/ end=/\s\+\|$/ + +" mom registers and strings +syn match momRegister /\(\$\|#\)[A-Za-z][_0-9A-Za-z]*/ contains=momRegisterStart + +syn match momRegisterStart /#\|\$/ contained + +" mom comment region +syn region momCommentRegion matchgroup=startRequest start='\<\.\(COMMENT\)\|\(SILENT\)\>' end='\<\.\(COMMENT\s\+OFF\)\|\(SILENT\s\+OFF\)\>' skip='$' + +" groff requests +syn match groffRequest /^\s*\(\.\|'\)\s*\zs[a-z0-9]\+/ + +" groff comment region +syn region groffCommentLine start='\(\\!\)\|\(\\"\)\|\(\\#\)' end='$' contains=momTodo +syn region groffCommentRegion start="^\s*\.\s*ig" matchgroup=startRequest end="^\.\.$" contains=startRequest + +" Preprocessor requests +syn match groffPreprocessor /[^A-Z]\zs\(EQ\s*$\|EN\s*$\|GS\s*$\|GE\s*$\|GF\s*$\|PS\s*$\|PE\s*$\|R1\s*$\|R2\s*$\|TS\s*$\|TE\s*$\|TH\s*$\)/ contained +syn match groffPreprocessor /[^A-Z]\zs\(G1\s*$\|G2\s*$\|IS\s*$\|IE\s*$\|cstart\s*$\|cend\s*$\)/ contained + +" Preprocessor requests for refer +syn match groffPreprocessor /\(\[\s*$\|\]\s*$\)/ contained + +" Quoted strings +syn region momString matchgroup=startRequest start='"\zs' end='"\|$' contains=groffNoLineBreak,groffGreek,groffSpecialChar,momInteger,momFloatEN,momFloatDE,momBracketRegion,momBracketError,momSpecialMove contained + +" Special characters +syn match groffSpecialChar '\\\((\|\[\)[-+A-Za-z0-9*<>=~!\/]\+\]*' + +" Greek symbols +syn match groffGreek '\\(\*[A-Za-z]\+' + +" Hyphenation marks +syn match groffHyphenation '\\%' + +" Masking of line breaks +syn match groffNoLineBreak /\\\s*$/ contains=groffBraces + +" groff number and string register delimiters +syn region groffDelimiter start=/\\*\\\(n+*\|\*\)\((\|\[\)\</ end=/\(\s\|\]\|$\)/ contains=momRegister,groffRegister,groffOperators + +" groff registers +syn match groffRegister /\\\((\|\[\)\zs\.*[a-z]\+/ + +" groff operators +syn match groffOperators /\(+\|-\|\/\|\*[^[]\)/ contained + +" Units (of measure) +syn match groffUnit '[-+]\=\([0-9]\|]\)\+\zs[icPpvusfz]\=' contained + +" Braces +syn match groffBraces /\(\\{\|\\}\)/ contained + +" Error +syn match groffError '\\\[ \+[[:print:]]\+ \+[[:print:]]\+\]' + +" For version 5.7 and earlier: only when not done already +" For version 5.8 and later: only when an item doesn't have highlighting yet +if version >= 508 || !exists("did_mom_syn_inits") + if version < 508 + let did_mom_syn_inits = 1 + command -nargs=+ HiLink hi link <args> + else + command -nargs=+ HiLink hi def link <args> + endif + +HiLink groffError Error +HiLink groffBraces darkmagenta +HiLink groffCommentLine darkcyan +HiLink groffCommentRegion cyan +HiLink groffDelimiter cyan +HiLink groffGreek cyan +HiLink groffHyphenation cyan +HiLink groffNoLineBreak cyan +HiLink groffOperators white +HiLink groffPreprocessor brown +HiLink groffRegister darkgreen +HiLink groffRequest magenta +HiLink groffSpecialChar darkcyan +HiLink groffUnit brown +HiLink momCommentRegion darkcyan +HiLink momMacro red +HiLink momRegister green +HiLink momRegisterStart magenta +HiLink momSpecialParam red +HiLink momString white +HiLink startRequest yellow + delcommand HiLink +endif + +let b:current_syntax = "mom" + +" vim:ts=8:sw=4:nocindent:smartindent: diff --git a/contrib/mom/examples/mon_premier_doc.mom b/contrib/mom/examples/mon_premier_doc.mom new file mode 100644 index 0000000..3497c06 --- /dev/null +++ b/contrib/mom/examples/mon_premier_doc.mom @@ -0,0 +1,140 @@ +.\" -*- mode: text; coding: utf-8; -*- +\# +\# Copyright (C) 2015-2020 Free Software Foundation, Inc. +\# +\# Copying and distribution of this file, with or without modification, +\# are permitted in any medium without royalty provided the copyright +\# notice and this notice are preserved. +\# +\# A very simple document with basic elements: headings, paragraphs, +\# lists, table of contents and clickable links. +\# +.TITLE "Mon Premier Document" +.AUTHOR "Cicéron" +. +.DOCTYPE DEFAULT +.PRINTSTYLE TYPESET +. +.PAPER A4 +.DOC_COVERTITLE "Mon Premier Document" +.DOC_COVER DOC_COVERTITLE AUTHOR +.COVER TITLE +.ATTRIBUTE_STRING "par" +.TOC_HEADER_STRING "Table des matières" +.AUTO_RELOCATE_TOC +.HEADING_STYLE 1 NUMBER +.HEADING_STYLE 2 NUMBER +.NO_SHIM +.START +\# +.HEADING 1 "Les différentes versions" +.PP +Voir également le chapitre sur +.PDF_LINK evolution "les évolutions" +possibles. +.HEADING 2 "La version originale" +.PP +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non +risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, +ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula +massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci +nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl +sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, +consequat in, pretium a, enim. Pellentesque congue. Ut in risus +volutpat libero pharetra tempor. Cras vestibulum bibendum augue. +Praesent egestas leo in pede. Praesent blandit odio eu enim. +Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum +primis in faucibus orci luctus et ultrices posuere cubilia Curae; +Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. +Maecenas adipiscing ante non diam sodales hendrerit. +.PP +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non +risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, +ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula +massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci +nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl +sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, +consequat in, pretium a, enim. Pellentesque congue. Ut in risus +volutpat libero pharetra tempor. Cras vestibulum bibendum augue. +Praesent egestas leo in pede. Praesent blandit odio eu enim. +Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum +primis in faucibus orci luctus et ultrices posuere cubilia Curae; +Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. +Maecenas adipiscing ante non diam sodales hendrerit. +.PP +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non +risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, +ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula +massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci +nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl +sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, +consequat in, pretium a, enim. Pellentesque congue. Ut in risus +volutpat libero pharetra tempor. Cras vestibulum bibendum augue. +Praesent egestas leo in pede. Praesent blandit odio eu enim. +Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum +primis in faucibus orci luctus et ultrices posuere cubilia Curae; +Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. +\# +.HEADING 2 "La version moderne" +.PP +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non +risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, +ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula +massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci +nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl +sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, +consequat in, pretium a, enim. Pellentesque congue. Ut in risus +volutpat libero pharetra tempor. Cras vestibulum bibendum augue. +Praesent egestas leo in pede. Praesent blandit odio eu enim. +Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum +primis in faucibus orci luctus et ultrices posuere cubilia Curae; +Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. +Maecenas adipiscing ante non diam sodales hendrerit. +.PP +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non +risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, +ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula +massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci +nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl +sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, +consequat in, pretium a, enim. Pellentesque congue. Ut in risus +volutpat libero pharetra tempor. Cras vestibulum bibendum augue. +Praesent egestas leo in pede. Praesent blandit odio eu enim. +Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum +primis in faucibus orci luctus et ultrices posuere cubilia Curae; +Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. +Maecenas adipiscing ante non diam sodales hendrerit. +\# +.HEADING 1 NAMED evolution "Les évolutions du Lorem" +.PP +Trois axes de progressions sont envisageables: +.LIST +.SHIFT_LIST 3m +.ITEM +Lorem ipsum dolor sit amet. +.ITEM +Consectetur adipiscing elit. +.ITEM +.PDF_TARGET sed_non_risus +Sed non risus. +.LIST OFF +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non +risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, +ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula +massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci +nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl +sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, +consequat in, pretium a, enim. Pellentesque congue. Ut in risus +volutpat libero pharetra tempor. Cras vestibulum bibendum augue. +Praesent egestas leo in pede. Praesent blandit odio eu enim. +Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum +primis in faucibus orci luctus et ultrices posuere cubilia Curae; +Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. +Maecenas adipiscing ante non diam sodales hendrerit. +\# +.TOC_RV_SWITCH +.TOC +.\" Local Variables: +.\" mode: nroff +.\" End: +.\" vim: filetype=groff: diff --git a/contrib/mom/examples/penguin.pdf b/contrib/mom/examples/penguin.pdf new file mode 100644 index 0000000..5e969ea --- /dev/null +++ b/contrib/mom/examples/penguin.pdf @@ -0,0 +1,148 @@ +%PDF-1.4 +1 0 obj +<< +/Pages 2 0 R +/Type /Catalog +>> +endobj +2 0 obj +<< +/Type /Pages +/Kids [ 3 0 R ] +/Count 1 +>> +endobj +3 0 obj +<< +/Type /Page +/Parent 2 0 R +/Resources << +/XObject << /Im0 8 0 R >> +/ProcSet 6 0 R >> +/MediaBox [0 0 81 96] +/CropBox [0 0 81 96] +/Contents 4 0 R +/Thumb 11 0 R +>> +endobj +4 0 obj +<< +/Length 5 0 R +>> +stream +q +81 0 0 96 0 0 cm +/Im0 Do +Q +endstream +endobj +5 0 obj +29 +endobj +6 0 obj +[ /PDF /Text /ImageC ] +endobj +7 0 obj +<< +>> +endobj +8 0 obj +<< +/Type /XObject +/Subtype /Image +/Name /Im0 +/Filter [ /RunLengthDecode ] +/Width 81 +/Height 96 +/ColorSpace 10 0 R +/BitsPerComponent 8 +/SMask 15 0 R +/Length 9 0 R +>> +stream +õ…ì„þ…Ú„û…ø„û…û†þ‚þzþkûeþXûfþmþzþ~û†›…þ„þ…þ„þ…ì„þ…Ñ„õ…þ€þpþ\þQøIþGûJþMþPþXþfþv›…ø„þ…ì„þ…Ñ„þ†þ‡þ„þwþ]þPûJþIûJþIøKþHþIþKþNþwþƒ•…ì„þ…ø„þ…à„þ…þ†þ…þnþKþNþKþJïIþHøIþHþJþPþgþ€þ„þ‡¤…þ„þ…ì„þ…Ô„þ…þ„þ†þOþNþHþJûIþJòHûIþQþiþ_þHþIþXþ{¡…þ„þ…ì„þ…ׄû…þþQþGàJþIþOþqþ”þ¦þ…þgþJþHþRþ}þ…þ†°…û„þ…ì„þ…Ú„þ…þ„þ†þmþNþKàJþHþMþrþ™þ¨þþxþ[þJþMþcþƒþ†³…ø„þ…ì„þ…Ú„þ…þ†þþXþHþKÝJþTþvþ–þ›þ€þwþbþJþKþOþsþ…þ‡³…û„þ…ì„þ…Ú„þ…þ†þsþJþHþIãJþKþIþSþoþ‚þ{þYþWþQþKþMþHþZþƒþ‡³…þ„û…ì„þ…Ú„û…þ_þGûIãJþIþJþNþ[þ`þOþMþKþIþMþJþIþKþt³…¶„û…þRþIþHþIþMæJþIþKûJþNþKþNþIþMþKþIþKþJþ]þ†þ„…ì„þ…Ú„þ…þƒþJþKûIþKþIãJþKûJþIþJøKþIþJþIþOþ€ª…ì„þ…ׄþvþMûJþHþNþRþMæJþKþOþRþSûMûKøIþMþsþƒ…ì„þ…ׄþuþKþGþKþQþYþpþmþPûKûJøKþGþHþIþZþ~þNþIûKþJþHþIþKþoþ„…ì„û…ø„þ…é„þ…þuþMûHþœþ®þ‘þ[þsþ`þMøJþjþ™þ®þ¸þ¾þÃþŸþnþXøKþJþKþNþ\ª…ø„þ…ø„û…û„þ…ø„þ…ò„þ…þtþMþGþ_þÃþÔþÇþŸþZþXþKûJþeþ¢þºþÃþÌþÒþÚþÊþPþYûKþJþHþIþJþXª…õ„þ…û„þ…Ú„þ…þsþMþGþƒþÚþéþæþÖþ–þJþKûJþ—þÌþìþ÷ûùþõþáþlþJûKþIþHûIþPª…ì„þ…Ú„þ…þsûMþªþâþÐþòþþââáþWþIûJþÅþùþýââáþ•þ˜þÚûüûþþGûKþJþIûHþOª…ì„þ…é„þ…õ„þ…þtþIþXþÒþ`þ„þšþïþûþsþVþMþOþÒþüþîþfþXþœ‘’‘þ×þÒþTûKþJþHþIþHþMª…ì„þ…Ú„þ…þsþJþ]þÝþHþ„þ–þ´þüþˆþfþvþxþÓþüþ¬þNþJþoþ¡‘’‘þìþgûKþJûIþHþMþ„¹…³„þzþKþ\þÝþOþ\‘’‘þˆþúþ‚þZþ]þjÀÁÀþøþŽþFþMþVþnþ{þñþhøJøIþKþ„…ì„þ…ì„û…ï„þSþWþÖþMþNþiþzþØþyþþ‚þþ”þîþþKûJþKþnþïþkþIþJþIþJþIþMþHþ†…ì„þ…Ô„þRþOþÄþWþKþRþ‚þµþÎþÓþÑþÍþ¿þÍþþJþMþKþOþžþãþ^øIþJøIª…ì„þ…õ„þ…ã„þSþHþnþëþ¨þ¸þÍþ×øØþÜþßþãþáþÝþÐþ·þÐþêþvûHþIþJûIþJþFª…ì„þ…Ô„þSþFþOþ³þ·þÆþÔøØþÛþàþæþèþæþåââáþÞþ×þÎþ|þPòIþJþGª…õ„þ…û„þ…ï„þ…é„þRþGþfþ³þÁþÍþÕûØþÚþÝââáþèþçþæøåþæþãþÂþhûJûIþJþMþHª…ì„þ…õ„þ…ã„þ]þTþ•þºþÉþÒûØþÙþÜþßââáþèþæõåþÚþ¿þÌþqþMþKþIþJþMþIþMþ„…ì„û…Ú„þ…þeþ^þ¥þÀþÍþÕûØþÚþÝþáþåþæøåââáþÊþ·þ¼þ»þbþKþMþJþIûJþNþ~þ…þ†³…ø„þ…ø„û…ï„þ…û„þ…ø„þ…þgþYþŸþÆþÎþØþÙþÚþÜþÞþâþæþåþäþãþØþºþ¹þÄþÇþ¹þ]þMþKþIþJþGþIþPþlþ„þ‡³…õ„þ…û„þ…Ô„þcþKþoþ¼þÓþÙûÚþÞþáþäþãþáþÚþ¾þ°þ¿þÅûÇþ™þQþJþKþþ‡þXþBþIþYþ„þ†³…ì„þ…Ô„þbþNþWþ˜þ²þÐþÚþÞþàþáþàþÚþ¶þ¦þ²þÁþÄþÇþÄþ»þ˜þSûHþvþ¨þŸþ‚þRþMþ|þ†³…ì„þ…þ„þ…ï„þ…õ„þ…þ†þgþMþ[þËþ²þ¡þ¨þÁþÌþÆþÂÀÁÀþ¾þ½þ»þ´þ¹þÊþÒþØþÎþ‰þJþKþMþq©ª©þªþ™þIþNþx³…ì„û…û„þ…ì„û…û„þZþHþiþÍþËþ±þŸþ®þ¿þÁþÀþ½þ²þ°þ³ÀÁÀûÍþÐþÜþÝþºþRþJþKþQþŒþ›þmDEDþIþZþƒþ‡¶…ï„û…æ„þ…þ†û…þvþPþMþ`þÐþÍþÌþ¶þ¡þ¢þ§þ©þ¦þ¤þ¶þÇûÍþÓþçþ÷þüþåþþKþMþJþIþSþMþJþIþOþtþ‡þ†¼…ì„þ…é„þ…þ„þ…þ„þ…þƒþWþKþIþ_þáþÒûÍþÈþ¶û«þþÇþÌûÍþ×þéþúûþûüûþËþWòKþJþIþNþ^þƒþ„¼…ï„û…ã„þ…þƒþ„þnþNþKþIþ þìþØûÎþÍþÎòÍþÒþÝþê÷ø÷õþþûþ…þPòKþJþIþTþmû‡¿…ì„þ…à„þ…þzþcþXþFþkþæþùþêþÑþÍûÎþÍþÎþÍþÏþØþäþñþùøþþýþþþýþÕþ\þKþNþHþKøJþOþ\þ~û…þ„Å…ì„þ…à„þ€þ]þgþTþQþ¿þùþþþùþÝïÍþÝþì÷ø÷þýòþþýþüþùþ•ûNûKþIþKþIþJþKþ`þ„¿…õ„þ…þ„û…æ„þ…þ„þZûJþFþ†þ÷þþþüþýþðþØþÐøÍþ×þöûüûøþþýøþþýþþþýþÕþQþIþJþKûIþJþIþKþMþsþ…þ„Å…õ„þ…û„þ…ã„þmþOþPþMþWþÙþýþþþýþþþý÷ø÷þëþáþãþëþôøýûþþýïþþøþ|þGþIþKõIûJþZþ}Î…Ë„ø…þzûKþIþ^þÛûüûþýòþþüûüûþýûþòýìþþüþÒûKûJþIøJþIþMþOþeõ…þ„ø…õ„þ…þ„þ…þ„þ…þ„û…ì„þ…ø„û…þ„þˆþ†þ€þSþJþHþMþþìþûûÿõþþýþüþýûþþýûþþýìþþýþúþèþ_þMþKõJûKþIþJþKþ„þ†Ë…ì„þ…ø„û…þ„þ…þþ_þKþJþFþXþ°þèþúþþþÿûýûþþýûúþýïþþýûþþýþüþ÷ûóþïþxþPìKþIþHþIþjÑ…þ„û…ì„þ…õ„þ…û„þfþPþKþJþFþ\þ´þØþóþûþüþþþýþû÷ø÷þôþðþïþöþúûüûüûþýûüûþúþù÷ø÷þóþïþéþâþæþëþ™þYþKþJþKþJþIûJþKþIþJþPþoË…ì„û…ø„þ…þ„þuûNøJþnþ¸þÅþÙþìþñûû÷ø÷þñþéþçþëþìþõýûüûûüûþùþòþèââáþÜûØþÖþÒþÓþàþÐþdûJþGþMþIþNþKþJûIþNþOþvÎ…ì„þ…ø„û…þþ\þNþHûJþWþ‚þ»þÂþÕþäþïþüþýþþþýþñþê÷ø÷þüõþþýþùþñþéþÝþÔûÒûÑþÒþåþÅþVþOþwþ`þJþIþKûJþIþHþMþ]þ‚Ñ…õ„ò…û„û…þsþOþJûKþJþ]þþÇþÜþïþùþþþýþüþþþýþòþôøýûüþþûýþþþüþúþíþåþÜþÕþÒþÑþØþò©ª©þCþhþ‚þrþXþMþNþIþKûJþOþuÝ…ø„þ…ø„þ…ø„þ…ø„þ†þƒþ]þKþNþIþYþMþrþ¾þãþôþüûýþþøý÷ø÷÷ø÷þüþýþüòýûüþþþýþü÷ø÷þîþáþ×þÒþàþïþKûNþkþ…þ]þKþNþKûJþMþdû†×…õ„þ…û„þ…ø„þ†þþTþOþHþqþsþQþ¡þæ÷ø÷þýþþõýþüþýûüûûüûýþüþýþþõýþþûýþüþýþøþëþÜþÓþéþQþJþNþIþ_þ†þSDEDþOþKþJþIþRþ~þ…þ†à…þ„þ…ì„þ…ø„þ†þjûMþsþ_þKþ þüþþþüþýþþòýûüþþþüþþþýþüøýþüûýûþõýþþþýþñþÜþÏþNþHþ`þnþcþwþkþJþKþJþFþMþQþ‚Ý…þ„þ…ì„þ…ø„þƒþZþPþYþ‚þGþHþîøþþüòýþüþýþþøýþüþýûüûýþþþýþþòýþþþýþþûôþkþPþqþŠþƒþgþ€þSþKþJþKþJþNþv×…û„þ…õ„þ…þ„þ†þ…þwþPþMþ}þeþGþNþüõýþüûýþþûýûüþýþüþýþüþýþþìýþüûýþþþýþþþüþýþþþ¦þWþxþþ†þeþlþtþMþIþJþIþKþ`þ„Ú…ì„þ…þ„þ‡þ„þdþJþWþ}þIþJþmûüûþýþüþýþüþýþüøýþüþúûüûþüøýþþþüþýþþûýþþûýþüþþþýþüõýþþþÑþbþqþwþiþTþQþ‹þKþNþIþKþNþTþÚ…þ„þ…ò„ø…þþYþHþoþfþBþOþ©þüæýþûþïòüþýþüþþûýþüõýþüþþûýûþûýþìþYþNþPûKþGþqþIþNþHûIþKþtþ„Ý…ì„þ…þ„þ…þvþMþKþƒþPþCþdââáþýûüûýþüûýþþþüþ÷þíûüûþýþþûýþüþýþüõýþüìýûüþýûüûþuþMûJþKþGþ]þGþNøIþKþcÚ…ì„û…þ„þ`þKþeþtþKþHþœþúþüþýþüìýþõþñþýþþøýþþþýþüïýûþõýþþøýþ–þHûKþIþJþPþRûHþIþHþJþRþ‚ã…þ„þ…ì„û…þyûMþ{þWþKþQþÐûüûþûýþþþüøýûñþüéýûüõýûüûõýþüûýþþþ²þMõKþNþGþHþKþJþIþKþPþ{é…ø„þ…ø„þ…ø„þ…þ„þOþNþ\þsþGþKþ”þüþýþþþüþþõýþüþýþüþëþïþüþýþþõýþüþþøýþþøýþþøýþüûýþþþÉþJûKþJþHþTþHþFþIþJþHþJþMþgÚ…õ„û…þ†þ€þJþGþfþoþHþIþ¹ûýûþøýþüþýþþûüþëþïþûûüþýûüûýþüþþûýþüøýþþõýþüûýþØþMûKþIþMþ`þIþGþHûIþHþMþbé…û„û…ï„þ†þ„þlþKþIþeþsþIþYþ×þýþüõýûþûýþþûüûþèþîûüûûüþýþþæýûüþýþüþþûýþþûýþÝþSøKþJþmþIþJþIþHûJþIþQÝ…õ„þ…þ„þ…þþRþMþFþiþ{þKþYþÞþþþüòýþüþýþþþýûüûþçþîûüþýþþûýþüõýþüþýþüøýûüþþþýþüþýþþââáþRûKþMþKþyþIûJþIþHþKþJþPã…þ„þ…ì„þhþMþKþQþrþ€þIþ^þçòýþüþþõýþûþçþðþüõýûüþýþþûýþþþüøýþüþýûüþþøýþäþSøKþIþwþIþJøIûJþOÚ…ò„þ…þbþOþNþbþ‰þ‘þKþnþîþýûþøüûýþüûüûþýþúþèþòûüÝýþüþþþýþüþýþþûýþüþþþåþTøKþWþrûKûJøIþOÝ…ï„þþXþIþHþXþ~þ˜þOþ|þñþýþþøýþüòýþùþèþòþýþüûýûþþýþüþþþýøþøýþþþüûýþüþýþüþþþãþVûKþHþmþXûKþJþHøIþQÝ…û„þ…ø„þ‚þRûJþIþWþ…þZþ|þóøýþüûýþüøýþüþúþèþôõýþüæýþüïýþüþþþýþÖþPþHþJþRþ{þKþNþJþKøJþKþSÝ…ï„þþVûIûMþ[þuþþòþýþüæýþúþèþôþýþüþýþþþýûþòýûüãýþÅþKþPþmþ{þpþWþsþgþXþPþJþMþJþdã…þ„þ…û„û…þ„þ…þ„þ‡þ²þÝþÞþÒþŽþKþcþ¾þûþýþþøýþüþþøýþúþèþöþüûýþþïýõüþýþüòýûüþøþ|þiþQþKûJþIþKûJþsþŸþxþWþzþ…þ†ã…û„þ…þ„þ†þ„þ†þ«þÍøÝþÖ‘’‘þPþhþ¸÷ø÷þüþýþüþþûüþýþüþýþúþçþöþýþüõýþüûýûþéýþüþøþÝþÜþÛþ¬þlþIþJþIøKþJþMþpþ‰þtþZþ~Ý…þ„þ…û„þ†þ…þšþ¿þÒõÝþÖþ’þPþ`þ±þüøýþüõýþøþéþ÷þýþþûüéýþþøýþüøýþãþØþäþãþ×þnþOþJþIøKþJþOþxþqþdþ¬þ›û†ï…ø„û…ø„þ…þ‰þ²þÅþÒòÝþÑþ€þJþZþîþýþüþýþþþýûüþýþúþçþóþüþýþüøýþüûýþüþýþüøýþüõýþÝþÒþßââáþÇþcþHþMþIøKþJþRþbþQþ‰þØââáþ†þ‡ï…þ„þ…þ„þ†û…þ„þƒþ‘þÀÁÀþÌþ×ïÝþÃþgþKþ†þÞûüûýûþþüûüûþïþñþýþüþþûýûþòýþüþýþüþýþþøýþßþÐþÝþÚþ¸þdþJþIþJøKûJþFþfþÇþÝþßþ†þ„ï…þ„þƒþŠþžþ¹þ·þ´þ²þ¶þÁþÉþÓþÚïÝþÛþ°þVþQþnþÍþùûýþþþüþýþþþüþûþýþþþýþüûýþüõýþüûýþþûýûüþúþàþÏþÛþÓþ·þoþJþKþHøKûJþRþ§þØþÚþÝþ†þƒï…þ†þŠþ¯þÀþÍþËûÇþÉþÏþÔþÚéÝþÕþþGþMþXþ®þöþüûýþþòýþüÝýþüþýþüþíþÜþÒþÏþØþÎþ¼þ‹þXþMþFûHþGþKþYþþËþÖþØþÚþ‰þ„ï…þ†þœþ¾þÊþ×þÖþÓþÒþÖþÚþÛãÝþÄþHþKþJþTþ™þëþþûýþüøýûþþüõýþüûýþþþýûüþþþýþòþ×þÒþÎþÍþÕþÍþ¼©ª©þ„þXþQþOþIþSþtþ›þÀþÎþÖþØþÛþˆé…þ®þÅþÒÔÝûÜþÝþxþHþKþHþCþPþjþËþüûýþüòýþüþýþþõýûüûýþüþæþÓþÒþÉþÆþÔþÑþÇþ¾þ·þ´þ±þ°þ±þ¶þ¿þËþÖþÚøÝþ½þŠþ„þ†õ…þ„þ£þÄþÑÑÝþÜþÝþµþXþIþHþMþJþHþeûýøþòýûþûýþþþýþþþüûýþüþæûÒþÅþÁûÔþÍþÆþÂþ¿þ¾û½þÄþÌþÕòÝþØþ¬ì…þžþÂþÎËÝþÓþþKþFþJûGþIþóõýþþãýþþþýþüþýþþþìþÕþÓÀÁÀþ¼þÓþÕþÒþÍþÈþÇøÆþÎþÓþÚòÝþÚþÒþ ò…þ„þþÀþÌþÜËÝþÃþjþJøIþGþàòýþüþýþüûýþþõýþüûýþþþüþòþÙþÒþ»þ¹þÓþÙþØþÕþÐþÎûÍþÎþÒþØþÛïÝþÚþÍþ¡þ„þ…þ†û…‘’‘þ½þÉþÜËÝþØþ¨þQþHþIþKþIþÚøýþüþýþüþýþþþýþüòýþüþýþüûýþöþÜþÂþšþ¹þÓþÙþÛþÚþ×þÕþÓþÒþÔþØþÚìÝþÜþÙþÕ©ª©þ‰þ†û…þþ»þÈþÜÎÝþÜþÝþÐþûJþHþJþðþþøýþüòýþüþýþüûýþüûýþüþýþõþÏþzþ—þ¹þÓþÚûÜûÛþÙûÚþÛþÜàÝþÅþšû…þŽþºþÇþÜËÝþÜþÝþ¿þgþRþXþŽøýþüûýûþûýþüøýûþøýþüþýþ×þpþVþ–þºþÔþÚþÛÅÝþØþ´þ…þþ¼þÇþÜËÝûÜþØ©ª©þ¶þãþúòýûüõýþþõýþüûýþúþÍþeþJþYþ›þ¹þÔþÚþÜÅÝþÛþÑþƒþ–þ¼þÇþÛþÜÎÝþÜûÚþËþ³þ÷ûüûþüûýþüøýûüéýþüþøþ³þWþHþFþ`þœþ¹þÕþÛÅÝþÜþØþÍþ†þþ¼þÌÂÝþØþÙþÈþ¦þÚûüéýþüòýþóþ^þKþHþMþIþHþqþšþ¶þÖþÛËÝþÚþÑþÈþµþ‰þ“þµþÃþÕþÜÅÝþØþÔþËþ¯þ’ûüûþüøýþüøýþüõýþóþÁþnþJþKþJþGþHþIþwþšþµþÖþÜÔÝþÜþÚþÖþÍþÂþ¥þ‹þ„þ¥þ¼þËþ×þÜÅÝþÙþÑþÉþµþ•þœþÚþóþùþüþýþüûýûüûþöþìþÐþ¤þmþPþGòKþNþ~þþ¶þÕþÛÔÝþÒþÌþÂþ²þ’þ…û†þ³þ½þÉþÒûÛþÜþÝþÜÑÝþÚþÒþÈþ¸þŸþKþNþoþ‘þ¤þ¶þ¼þ°þ©þþqþ]þNþKþJûHõKþJþTþƒþŸþ¶þÔþÛãÝþÛþÚþÛþÚþÒþ¾þª‘’‘þ†õ…þ²þºþÄþËþÕþ×ûØþÙþÛþÝþÜÚÝþÙþÒþÈþ¶þ þYþHþIþHûNþJþIþGþFDEDþJþHþKûGþKþJþIûJþHþYþˆþ¡þµþÓþÛæÝþÙþÖþÔþÑþÉþ¿þŒþ„ø…þ†û…þªþ´þ¹þ½þÈþËþÌþÎþÐþÑþÔþÖþØþÚþÛûÜìÝþÜþØþÎþÃþ²þþhøIþJÚIûJûIþYþ‰þ þ²þÎþØïÝþÛþÚþÕþÐþËþÇþ¿þ«þ’þ„ì…þþ¢þ©þþ²þ¶þºþ½þÀþÃþÄþÈþÌþÑþÓþ×þÙþÛïÝþÚþÒþÇþ¸þ©þœþlòJþIãJþHþIøJþ\þ‰þœþþÉþÓþÙþÛûÜûÛþÙþÒþËþÅþÀþµþœþ†ø„ï…þ„þ…þˆþþžþ¢þ¨þ¬þ¯û³þµþ¸þ¿þÃþÇþÍþÒþ×þØþÚþÛûÚþÕþËþ¾þ®þ þ—þkþHþJþHþIïKþMòKþHþGþHþJþIþ^þ†þ—þ§þÂþËþÓþØþÙþÚþÙþ×þÒþÇþ½þ³þªþŽþ…þ„à…þ†û…þ‡þþ—þþ¡û¥þ§þ«þ¯þ³þºÀÁÀþÆþÊþÎþÒþÔþÏþÇþ½þ²þ¤þ˜þþ`þMþQûRþ]þhækþjþ_ûWþTþQþ_þƒþ”þ¡þ¹þÃþÌþÐûÒþÑþÊþÅþ·þ«þœþˆþ„Ú…ï„û…û„þ…þ‰þŽþþ”þ›þŸþ¢þ¦þ©þ«þ©þ£þœþ•þ‘þŒþ…þwþƒþ…þ„ø…ï„ì…û„þƒþ€þ‰þ”þ¨þ«þþ°û±þ¯þ«þ§þþ†û…û„×…ì„þ…þ„þƒû„þ…þ‰þþ“þ˜û™þ˜þ•þ’þþŠþ‚þþ…Ý„æ…þ„þƒþ‚þŒþžþ¢þ£ø¦þ¤þŸþ–ø„Î…ì„þ…ø„û†û…þ†þˆþ‰þþþŽþŒþ‡þþ€û…Ý„æ…þ„þ…þþ‚þþ”þ—þšþ™þ˜þ•þŒþ‡þ„þ…þ„Î…ì„þ…ø„ï…þƒþ†þƒû‚þ„þƒø…ï„þ…ò„Ý…þ„û‚þ…þˆþ†û…þ„þ…þ„Ô…€ +endstream +endobj +9 0 obj +7826 +endobj +10 0 obj +/DeviceRGB +endobj +11 0 obj +<< +/Filter [ /RunLengthDecode ] +/Width 81 +/Height 96 +/ColorSpace 10 0 R +/BitsPerComponent 8 +/Length 12 0 R +>> +stream +õ…ì„þ…Ú„û…ø„û…û†þ‚þzþkûeþXûfþmþzþ~û†›…þ„þ…þ„þ…ì„þ…Ñ„õ…þ€þpþ\þQøIþGûJþMþPþXþfþv›…ø„þ…ì„þ…Ñ„þ†þ‡þ„þwþ]þPûJþIûJþIøKþHþIþKþNþwþƒ•…ì„þ…ø„þ…à„þ…þ†þ…þnþKþNþKþJïIþHøIþHþJþPþgþ€þ„þ‡¤…þ„þ…ì„þ…Ô„þ…þ„þ†þOþNþHþJûIþJòHûIþQþiþ_þHþIþXþ{¡…þ„þ…ì„þ…ׄû…þþQþGàJþIþOþqþ”þ¦þ…þgþJþHþRþ}þ…þ†°…û„þ…ì„þ…Ú„þ…þ„þ†þmþNþKàJþHþMþrþ™þ¨þþxþ[þJþMþcþƒþ†³…ø„þ…ì„þ…Ú„þ…þ†þþXþHþKÝJþTþvþ–þ›þ€þwþbþJþKþOþsþ…þ‡³…û„þ…ì„þ…Ú„þ…þ†þsþJþHþIãJþKþIþSþoþ‚þ{þYþWþQþKþMþHþZþƒþ‡³…þ„û…ì„þ…Ú„û…þ_þGûIãJþIþJþNþ[þ`þOþMþKþIþMþJþIþKþt³…¶„û…þRþIþHþIþMæJþIþKûJþNþKþNþIþMþKþIþKþJþ]þ†þ„…ì„þ…Ú„þ…þƒþJþKûIþKþIãJþKûJþIþJøKþIþJþIþOþ€ª…ì„þ…ׄþvþMûJþHþNþRþMæJþKþOþRþSûMûKøIþMþsþƒ…ì„þ…ׄþuþKþGþKþQþYþpþmþPûKûJøKþGþHþIþZþ~þNþIûKþJþHþIþKþoþ„…ì„û…ø„þ…é„þ…þuþMûHþœþ®þ‘þ[þsþ`þMøJþjþ™þ®þ¸þ¾þÃþŸþnþXøKþJþKþNþ\ª…ø„þ…ø„û…û„þ…ø„þ…ò„þ…þtþMþGþ_þÃþÔþÇþŸþZþXþKûJþeþ¢þºþÃþÌþÒþÚþÊþPþYûKþJþHþIþJþXª…õ„þ…û„þ…Ú„þ…þsþMþGþƒþÚþéþæþÖþ–þJþKûJþ—þÌþìþ÷ûùþõþáþlþJûKþIþHûIþPª…ì„þ…Ú„þ…þsûMþªþâþÐþòþþââáþWþIûJþÅþùþýââáþ•þ˜þÚûüûþþGûKþJþIûHþOª…ì„þ…é„þ…õ„þ…þtþIþXþÒþ`þ„þšþïþûþsþVþMþOþÒþüþîþfþXþœ‘’‘þ×þÒþTûKþJþHþIþHþMª…ì„þ…Ú„þ…þsþJþ]þÝþHþ„þ–þ´þüþˆþfþvþxþÓþüþ¬þNþJþoþ¡‘’‘þìþgûKþJûIþHþMþ„¹…³„þzþKþ\þÝþOþ\‘’‘þˆþúþ‚þZþ]þjÀÁÀþøþŽþFþMþVþnþ{þñþhøJøIþKþ„…ì„þ…ì„û…ï„þSþWþÖþMþNþiþzþØþyþþ‚þþ”þîþþKûJþKþnþïþkþIþJþIþJþIþMþHþ†…ì„þ…Ô„þRþOþÄþWþKþRþ‚þµþÎþÓþÑþÍþ¿þÍþþJþMþKþOþžþãþ^øIþJøIª…ì„þ…õ„þ…ã„þSþHþnþëþ¨þ¸þÍþ×øØþÜþßþãþáþÝþÐþ·þÐþêþvûHþIþJûIþJþFª…ì„þ…Ô„þSþFþOþ³þ·þÆþÔøØþÛþàþæþèþæþåââáþÞþ×þÎþ|þPòIþJþGª…õ„þ…û„þ…ï„þ…é„þRþGþfþ³þÁþÍþÕûØþÚþÝââáþèþçþæøåþæþãþÂþhûJûIþJþMþHª…ì„þ…õ„þ…ã„þ]þTþ•þºþÉþÒûØþÙþÜþßââáþèþæõåþÚþ¿þÌþqþMþKþIþJþMþIþMþ„…ì„û…Ú„þ…þeþ^þ¥þÀþÍþÕûØþÚþÝþáþåþæøåââáþÊþ·þ¼þ»þbþKþMþJþIûJþNþ~þ…þ†³…ø„þ…ø„û…ï„þ…û„þ…ø„þ…þgþYþŸþÆþÎþØþÙþÚþÜþÞþâþæþåþäþãþØþºþ¹þÄþÇþ¹þ]þMþKþIþJþGþIþPþlþ„þ‡³…õ„þ…û„þ…Ô„þcþKþoþ¼þÓþÙûÚþÞþáþäþãþáþÚþ¾þ°þ¿þÅûÇþ™þQþJþKþþ‡þXþBþIþYþ„þ†³…ì„þ…Ô„þbþNþWþ˜þ²þÐþÚþÞþàþáþàþÚþ¶þ¦þ²þÁþÄþÇþÄþ»þ˜þSûHþvþ¨þŸþ‚þRþMþ|þ†³…ì„þ…þ„þ…ï„þ…õ„þ…þ†þgþMþ[þËþ²þ¡þ¨þÁþÌþÆþÂÀÁÀþ¾þ½þ»þ´þ¹þÊþÒþØþÎþ‰þJþKþMþq©ª©þªþ™þIþNþx³…ì„û…û„þ…ì„û…û„þZþHþiþÍþËþ±þŸþ®þ¿þÁþÀþ½þ²þ°þ³ÀÁÀûÍþÐþÜþÝþºþRþJþKþQþŒþ›þmDEDþIþZþƒþ‡¶…ï„û…æ„þ…þ†û…þvþPþMþ`þÐþÍþÌþ¶þ¡þ¢þ§þ©þ¦þ¤þ¶þÇûÍþÓþçþ÷þüþåþþKþMþJþIþSþMþJþIþOþtþ‡þ†¼…ì„þ…é„þ…þ„þ…þ„þ…þƒþWþKþIþ_þáþÒûÍþÈþ¶û«þþÇþÌûÍþ×þéþúûþûüûþËþWòKþJþIþNþ^þƒþ„¼…ï„û…ã„þ…þƒþ„þnþNþKþIþ þìþØûÎþÍþÎòÍþÒþÝþê÷ø÷õþþûþ…þPòKþJþIþTþmû‡¿…ì„þ…à„þ…þzþcþXþFþkþæþùþêþÑþÍûÎþÍþÎþÍþÏþØþäþñþùøþþýþþþýþÕþ\þKþNþHþKøJþOþ\þ~û…þ„Å…ì„þ…à„þ€þ]þgþTþQþ¿þùþþþùþÝïÍþÝþì÷ø÷þýòþþýþüþùþ•ûNûKþIþKþIþJþKþ`þ„¿…õ„þ…þ„û…æ„þ…þ„þZûJþFþ†þ÷þþþüþýþðþØþÐøÍþ×þöûüûøþþýøþþýþþþýþÕþQþIþJþKûIþJþIþKþMþsþ…þ„Å…õ„þ…û„þ…ã„þmþOþPþMþWþÙþýþþþýþþþý÷ø÷þëþáþãþëþôøýûþþýïþþøþ|þGþIþKõIûJþZþ}Î…Ë„ø…þzûKþIþ^þÛûüûþýòþþüûüûþýûþòýìþþüþÒûKûJþIøJþIþMþOþeõ…þ„ø…õ„þ…þ„þ…þ„þ…þ„û…ì„þ…ø„û…þ„þˆþ†þ€þSþJþHþMþþìþûûÿõþþýþüþýûþþýûþþýìþþýþúþèþ_þMþKõJûKþIþJþKþ„þ†Ë…ì„þ…ø„û…þ„þ…þþ_þKþJþFþXþ°þèþúþþþÿûýûþþýûúþýïþþýûþþýþüþ÷ûóþïþxþPìKþIþHþIþjÑ…þ„û…ì„þ…õ„þ…û„þfþPþKþJþFþ\þ´þØþóþûþüþþþýþû÷ø÷þôþðþïþöþúûüûüûþýûüûþúþù÷ø÷þóþïþéþâþæþëþ™þYþKþJþKþJþIûJþKþIþJþPþoË…ì„û…ø„þ…þ„þuûNøJþnþ¸þÅþÙþìþñûû÷ø÷þñþéþçþëþìþõýûüûûüûþùþòþèââáþÜûØþÖþÒþÓþàþÐþdûJþGþMþIþNþKþJûIþNþOþvÎ…ì„þ…ø„û…þþ\þNþHûJþWþ‚þ»þÂþÕþäþïþüþýþþþýþñþê÷ø÷þüõþþýþùþñþéþÝþÔûÒûÑþÒþåþÅþVþOþwþ`þJþIþKûJþIþHþMþ]þ‚Ñ…õ„ò…û„û…þsþOþJûKþJþ]þþÇþÜþïþùþþþýþüþþþýþòþôøýûüþþûýþþþüþúþíþåþÜþÕþÒþÑþØþò©ª©þCþhþ‚þrþXþMþNþIþKûJþOþuÝ…ø„þ…ø„þ…ø„þ…ø„þ†þƒþ]þKþNþIþYþMþrþ¾þãþôþüûýþþøý÷ø÷÷ø÷þüþýþüòýûüþþþýþü÷ø÷þîþáþ×þÒþàþïþKûNþkþ…þ]þKþNþKûJþMþdû†×…õ„þ…û„þ…ø„þ†þþTþOþHþqþsþQþ¡þæ÷ø÷þýþþõýþüþýûüûûüûýþüþýþþõýþþûýþüþýþøþëþÜþÓþéþQþJþNþIþ_þ†þSDEDþOþKþJþIþRþ~þ…þ†à…þ„þ…ì„þ…ø„þ†þjûMþsþ_þKþ þüþþþüþýþþòýûüþþþüþþþýþüøýþüûýûþõýþþþýþñþÜþÏþNþHþ`þnþcþwþkþJþKþJþFþMþQþ‚Ý…þ„þ…ì„þ…ø„þƒþZþPþYþ‚þGþHþîøþþüòýþüþýþþøýþüþýûüûýþþþýþþòýþþþýþþûôþkþPþqþŠþƒþgþ€þSþKþJþKþJþNþv×…û„þ…õ„þ…þ„þ†þ…þwþPþMþ}þeþGþNþüõýþüûýþþûýûüþýþüþýþüþýþþìýþüûýþþþýþþþüþýþþþ¦þWþxþþ†þeþlþtþMþIþJþIþKþ`þ„Ú…ì„þ…þ„þ‡þ„þdþJþWþ}þIþJþmûüûþýþüþýþüþýþüøýþüþúûüûþüøýþþþüþýþþûýþþûýþüþþþýþüõýþþþÑþbþqþwþiþTþQþ‹þKþNþIþKþNþTþÚ…þ„þ…ò„ø…þþYþHþoþfþBþOþ©þüæýþûþïòüþýþüþþûýþüõýþüþþûýûþûýþìþYþNþPûKþGþqþIþNþHûIþKþtþ„Ý…ì„þ…þ„þ…þvþMþKþƒþPþCþdââáþýûüûýþüûýþþþüþ÷þíûüûþýþþûýþüþýþüõýþüìýûüþýûüûþuþMûJþKþGþ]þGþNøIþKþcÚ…ì„û…þ„þ`þKþeþtþKþHþœþúþüþýþüìýþõþñþýþþøýþþþýþüïýûþõýþþøýþ–þHûKþIþJþPþRûHþIþHþJþRþ‚ã…þ„þ…ì„û…þyûMþ{þWþKþQþÐûüûþûýþþþüøýûñþüéýûüõýûüûõýþüûýþþþ²þMõKþNþGþHþKþJþIþKþPþ{é…ø„þ…ø„þ…ø„þ…þ„þOþNþ\þsþGþKþ”þüþýþþþüþþõýþüþýþüþëþïþüþýþþõýþüþþøýþþøýþþøýþüûýþþþÉþJûKþJþHþTþHþFþIþJþHþJþMþgÚ…õ„û…þ†þ€þJþGþfþoþHþIþ¹ûýûþøýþüþýþþûüþëþïþûûüþýûüûýþüþþûýþüøýþþõýþüûýþØþMûKþIþMþ`þIþGþHûIþHþMþbé…û„û…ï„þ†þ„þlþKþIþeþsþIþYþ×þýþüõýûþûýþþûüûþèþîûüûûüþýþþæýûüþýþüþþûýþþûýþÝþSøKþJþmþIþJþIþHûJþIþQÝ…õ„þ…þ„þ…þþRþMþFþiþ{þKþYþÞþþþüòýþüþýþþþýûüûþçþîûüþýþþûýþüõýþüþýþüøýûüþþþýþüþýþþââáþRûKþMþKþyþIûJþIþHþKþJþPã…þ„þ…ì„þhþMþKþQþrþ€þIþ^þçòýþüþþõýþûþçþðþüõýûüþýþþûýþþþüøýþüþýûüþþøýþäþSøKþIþwþIþJøIûJþOÚ…ò„þ…þbþOþNþbþ‰þ‘þKþnþîþýûþøüûýþüûüûþýþúþèþòûüÝýþüþþþýþüþýþþûýþüþþþåþTøKþWþrûKûJøIþOÝ…ï„þþXþIþHþXþ~þ˜þOþ|þñþýþþøýþüòýþùþèþòþýþüûýûþþýþüþþþýøþøýþþþüûýþüþýþüþþþãþVûKþHþmþXûKþJþHøIþQÝ…û„þ…ø„þ‚þRûJþIþWþ…þZþ|þóøýþüûýþüøýþüþúþèþôõýþüæýþüïýþüþþþýþÖþPþHþJþRþ{þKþNþJþKøJþKþSÝ…ï„þþVûIûMþ[þuþþòþýþüæýþúþèþôþýþüþýþþþýûþòýûüãýþÅþKþPþmþ{þpþWþsþgþXþPþJþMþJþdã…þ„þ…û„û…þ„þ…þ„þ‡þ²þÝþÞþÒþŽþKþcþ¾þûþýþþøýþüþþøýþúþèþöþüûýþþïýõüþýþüòýûüþøþ|þiþQþKûJþIþKûJþsþŸþxþWþzþ…þ†ã…û„þ…þ„þ†þ„þ†þ«þÍøÝþÖ‘’‘þPþhþ¸÷ø÷þüþýþüþþûüþýþüþýþúþçþöþýþüõýþüûýûþéýþüþøþÝþÜþÛþ¬þlþIþJþIøKþJþMþpþ‰þtþZþ~Ý…þ„þ…û„þ†þ…þšþ¿þÒõÝþÖþ’þPþ`þ±þüøýþüõýþøþéþ÷þýþþûüéýþþøýþüøýþãþØþäþãþ×þnþOþJþIøKþJþOþxþqþdþ¬þ›û†ï…ø„û…ø„þ…þ‰þ²þÅþÒòÝþÑþ€þJþZþîþýþüþýþþþýûüþýþúþçþóþüþýþüøýþüûýþüþýþüøýþüõýþÝþÒþßââáþÇþcþHþMþIøKþJþRþbþQþ‰þØââáþ†þ‡ï…þ„þ…þ„þ†û…þ„þƒþ‘þÀÁÀþÌþ×ïÝþÃþgþKþ†þÞûüûýûþþüûüûþïþñþýþüþþûýûþòýþüþýþüþýþþøýþßþÐþÝþÚþ¸þdþJþIþJøKûJþFþfþÇþÝþßþ†þ„ï…þ„þƒþŠþžþ¹þ·þ´þ²þ¶þÁþÉþÓþÚïÝþÛþ°þVþQþnþÍþùûýþþþüþýþþþüþûþýþþþýþüûýþüõýþüûýþþûýûüþúþàþÏþÛþÓþ·þoþJþKþHøKûJþRþ§þØþÚþÝþ†þƒï…þ†þŠþ¯þÀþÍþËûÇþÉþÏþÔþÚéÝþÕþþGþMþXþ®þöþüûýþþòýþüÝýþüþýþüþíþÜþÒþÏþØþÎþ¼þ‹þXþMþFûHþGþKþYþþËþÖþØþÚþ‰þ„ï…þ†þœþ¾þÊþ×þÖþÓþÒþÖþÚþÛãÝþÄþHþKþJþTþ™þëþþûýþüøýûþþüõýþüûýþþþýûüþþþýþòþ×þÒþÎþÍþÕþÍþ¼©ª©þ„þXþQþOþIþSþtþ›þÀþÎþÖþØþÛþˆé…þ®þÅþÒÔÝûÜþÝþxþHþKþHþCþPþjþËþüûýþüòýþüþýþþõýûüûýþüþæþÓþÒþÉþÆþÔþÑþÇþ¾þ·þ´þ±þ°þ±þ¶þ¿þËþÖþÚøÝþ½þŠþ„þ†õ…þ„þ£þÄþÑÑÝþÜþÝþµþXþIþHþMþJþHþeûýøþòýûþûýþþþýþþþüûýþüþæûÒþÅþÁûÔþÍþÆþÂþ¿þ¾û½þÄþÌþÕòÝþØþ¬ì…þžþÂþÎËÝþÓþþKþFþJûGþIþóõýþþãýþþþýþüþýþþþìþÕþÓÀÁÀþ¼þÓþÕþÒþÍþÈþÇøÆþÎþÓþÚòÝþÚþÒþ ò…þ„þþÀþÌþÜËÝþÃþjþJøIþGþàòýþüþýþüûýþþõýþüûýþþþüþòþÙþÒþ»þ¹þÓþÙþØþÕþÐþÎûÍþÎþÒþØþÛïÝþÚþÍþ¡þ„þ…þ†û…‘’‘þ½þÉþÜËÝþØþ¨þQþHþIþKþIþÚøýþüþýþüþýþþþýþüòýþüþýþüûýþöþÜþÂþšþ¹þÓþÙþÛþÚþ×þÕþÓþÒþÔþØþÚìÝþÜþÙþÕ©ª©þ‰þ†û…þþ»þÈþÜÎÝþÜþÝþÐþûJþHþJþðþþøýþüòýþüþýþüûýþüûýþüþýþõþÏþzþ—þ¹þÓþÚûÜûÛþÙûÚþÛþÜàÝþÅþšû…þŽþºþÇþÜËÝþÜþÝþ¿þgþRþXþŽøýþüûýûþûýþüøýûþøýþüþýþ×þpþVþ–þºþÔþÚþÛÅÝþØþ´þ…þþ¼þÇþÜËÝûÜþØ©ª©þ¶þãþúòýûüõýþþõýþüûýþúþÍþeþJþYþ›þ¹þÔþÚþÜÅÝþÛþÑþƒþ–þ¼þÇþÛþÜÎÝþÜûÚþËþ³þ÷ûüûþüûýþüøýûüéýþüþøþ³þWþHþFþ`þœþ¹þÕþÛÅÝþÜþØþÍþ†þþ¼þÌÂÝþØþÙþÈþ¦þÚûüéýþüòýþóþ^þKþHþMþIþHþqþšþ¶þÖþÛËÝþÚþÑþÈþµþ‰þ“þµþÃþÕþÜÅÝþØþÔþËþ¯þ’ûüûþüøýþüøýþüõýþóþÁþnþJþKþJþGþHþIþwþšþµþÖþÜÔÝþÜþÚþÖþÍþÂþ¥þ‹þ„þ¥þ¼þËþ×þÜÅÝþÙþÑþÉþµþ•þœþÚþóþùþüþýþüûýûüûþöþìþÐþ¤þmþPþGòKþNþ~þþ¶þÕþÛÔÝþÒþÌþÂþ²þ’þ…û†þ³þ½þÉþÒûÛþÜþÝþÜÑÝþÚþÒþÈþ¸þŸþKþNþoþ‘þ¤þ¶þ¼þ°þ©þþqþ]þNþKþJûHõKþJþTþƒþŸþ¶þÔþÛãÝþÛþÚþÛþÚþÒþ¾þª‘’‘þ†õ…þ²þºþÄþËþÕþ×ûØþÙþÛþÝþÜÚÝþÙþÒþÈþ¶þ þYþHþIþHûNþJþIþGþFDEDþJþHþKûGþKþJþIûJþHþYþˆþ¡þµþÓþÛæÝþÙþÖþÔþÑþÉþ¿þŒþ„ø…þ†û…þªþ´þ¹þ½þÈþËþÌþÎþÐþÑþÔþÖþØþÚþÛûÜìÝþÜþØþÎþÃþ²þþhøIþJÚIûJûIþYþ‰þ þ²þÎþØïÝþÛþÚþÕþÐþËþÇþ¿þ«þ’þ„ì…þþ¢þ©þþ²þ¶þºþ½þÀþÃþÄþÈþÌþÑþÓþ×þÙþÛïÝþÚþÒþÇþ¸þ©þœþlòJþIãJþHþIøJþ\þ‰þœþþÉþÓþÙþÛûÜûÛþÙþÒþËþÅþÀþµþœþ†ø„ï…þ„þ…þˆþþžþ¢þ¨þ¬þ¯û³þµþ¸þ¿þÃþÇþÍþÒþ×þØþÚþÛûÚþÕþËþ¾þ®þ þ—þkþHþJþHþIïKþMòKþHþGþHþJþIþ^þ†þ—þ§þÂþËþÓþØþÙþÚþÙþ×þÒþÇþ½þ³þªþŽþ…þ„à…þ†û…þ‡þþ—þþ¡û¥þ§þ«þ¯þ³þºÀÁÀþÆþÊþÎþÒþÔþÏþÇþ½þ²þ¤þ˜þþ`þMþQûRþ]þhækþjþ_ûWþTþQþ_þƒþ”þ¡þ¹þÃþÌþÐûÒþÑþÊþÅþ·þ«þœþˆþ„Ú…ï„û…û„þ…þ‰þŽþþ”þ›þŸþ¢þ¦þ©þ«þ©þ£þœþ•þ‘þŒþ…þwþƒþ…þ„ø…ï„ì…û„þƒþ€þ‰þ”þ¨þ«þþ°û±þ¯þ«þ§þþ†û…û„×…ì„þ…þ„þƒû„þ…þ‰þþ“þ˜û™þ˜þ•þ’þþŠþ‚þþ…Ý„æ…þ„þƒþ‚þŒþžþ¢þ£ø¦þ¤þŸþ–ø„Î…ì„þ…ø„û†û…þ†þˆþ‰þþþŽþŒþ‡þþ€û…Ý„æ…þ„þ…þþ‚þþ”þ—þšþ™þ˜þ•þŒþ‡þ„þ…þ„Î…ì„þ…ø„ï…þƒþ†þƒû‚þ„þƒø…ï„þ…ò„Ý…þ„û‚þ…þˆþ†û…þ„þ…þ„Ô…€ +endstream +endobj +12 0 obj +7826 +endobj +13 0 obj +endobj +14 0 obj +7826 +endobj +15 0 obj +<< +/Type /XObject +/Subtype /Image +/Name /Ma0 +/Filter [ /RunLengthDecode ] +/Width 81 +/Height 96 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Length 16 0 R +>> +stream +‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿäÿ€ +endstream +endobj +16 0 obj +125 +endobj +17 0 obj +<< +/Title (penguin.pdf) +/CreationDate (D:20120619194903) +/ModDate (D:20120619194903) +/Producer (ImageMagick 6.6.0-4 2012-04-30 Q16 http://www.imagemagick.org) +>> +endobj +xref +0 18 +0000000000 65535 f +0000000010 00000 n +0000000059 00000 n +0000000118 00000 n +0000000296 00000 n +0000000377 00000 n +0000000395 00000 n +0000000433 00000 n +0000000454 00000 n +0000008478 00000 n +0000008498 00000 n +0000008525 00000 n +0000016495 00000 n +0000016516 00000 n +0000016532 00000 n +0000016553 00000 n +0000016869 00000 n +0000016889 00000 n +trailer +<< +/Size 18 +/Info 17 0 R +/Root 1 0 R +>> +startxref +17067 +%%EOF diff --git a/contrib/mom/examples/penguin.ps b/contrib/mom/examples/penguin.ps new file mode 100644 index 0000000..2728930 --- /dev/null +++ b/contrib/mom/examples/penguin.ps @@ -0,0 +1,461 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner +%%Title: /home/peter/Pics/penguin_small2_bw.ps +%%CreationDate: Wed Apr 17 19:49:51 2002 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 0 0 81 96 +%%EndComments +%%BeginPreview: 90 107 1 107 +% aaaaaaaaabff555555555540 +% 5b6db6db5edbf6b6b6b6b680 +% aaaaaaaab7ff7ad555555540 +% b55555557eddeeaadadadac0 +% 56db6db6dbffdf56ab555540 +% aaaaaaaaffb755dab556ab40 +% 5b555b55f77ed7d556b56d40 +% aab6d56dbfffaaeb6ad5aa80 +% 6d555aabf6edd5daad56ab40 +% aadaab56ffdfaff555aab540 +% 5555b56bddfdff76dab55680 +% b6aaaaaffbbbbbed5556dac0 +% 55b6d6d5bff7f77aab6aaa80 +% aaaaaaaff77f6ffd6d555540 +% 5b555b576defeedaaaadb680 +% aab6d56dfbfd3bfdb56aaac0 +% 55555aab8eda4fb556ab5540 +% b6daab5743f40b7eaad56d80 +% 5555b56f037007fadaad5540 +% aaaaaaab11e0c6ed55b5aa80 +% 5b6d6db731b1a3feaaaab6c0 +% aaab55566963a3badb555540 +% 6d556aaf35d2e37d556daa80 +% aadaadb57959f3f6aaaab6c0 +% 5555aaab3403c37d6dab5540 +% 6daab5571428c3eeaab56a80 +% aab6d6db908007fd5556ad80 +% ad5555574000176edb6ad540 +% 55aaadab920003fd55555a80 +% b56db55b2000136eaaadab40 +% 56aaaaab400047fdb6d55540 +% aad556d7040112df555ab680 +% 6d5b6ab5d00447bb55ab5540 +% aaaaad57402915cf6d556a80 +% adb555ab9a9243a7aab6ad80 +% 5556dab6902485ead5aad540 +% b5aaab57854901d7daad5a80 +% 56b5556d929201bfab55ab40 +% aaab6d57004400fb756ab540 +% 6d6d55af0a1000efeaad5680 +% aaaaaaba0080005ef6d5aac0 +% adb5b6d60220003fdaaab540 +% 5556aabc0000003bfd5b5680 +% b5aab57c0000003f76d56ac0 +% 56b556e80000001beeaaad40 +% aaab6bf80000001f7f5b5580 +% 6d6d55b00000001dfbaab540 +% aaaaaff00000001bdf6d5680 +% 55b5b5b00000000ffbd5aac0 +% b6aaafe40000000f6ff55a80 +% aad6df7000000246fedaab40 +% 555ab6d000000003aff5b540 +% b6aaafe000000013edbaaa80 +% 556b7d8000000001b7f6d6c0 +% aaad5bc000000001fbbd5a80 +% 6db57f0000000000d77aaac0 +% aaaab58000000000edf6d540 +% 5556f7000000000056fead80 +% b6dab600000000006edb5540 +% aaaaee00000000007ffeb680 +% 5555ee000000000076bb5540 +% b6dabc00000000003f7f6a80 +% 5555d800000000003b7756c0 +% aaabfc00000000003f7eda80 +% 6db6b0000000000036f7aac0 +% aaabd800000000003ffeab40 +% ad57b800000000003d6fda80 +% 55b7d8000000000037fdaac0 +% b55eb800000000003edfab40 +% 56afb000000000003bfbb540 +% aaddb000000000003edf5680 +% 6d5bd8000000000035fdaac0 +% aaafe800000000003b5bb540 +% 55ba5000000000006fef5680 +% b6a83800000000005f736ac0 +% aaa00c00000000003dfdad40 +% 55680e00000000003bd65580 +% b6a107000000000077bc5a80 +% 55a013c0000000023ff82b40 +% a80401a0000000005db45540 +% 429021f0000000043ff02d40 +% 900000f80000000096c4aa80 +% a00080be000000082a902d80 +% 004204770000000244401540 +% a200003e8000001411001540 +% 4004105fc000000044444b40 +% 8800001b8000000a00800540 +% 5040411f4000001012000280 +% 80040007c000001440044080 +% 5080040d0000003100100040 +% 800040200000007400400400 +% 51080002000000e804008040 +% 80008440000003f210000080 +% 50000005000007d400080940 +% 0111000080001ef020808280 +% a00008894000ffd480001540 +% 02000000fa57bb680108aa80 +% a0222002bfffffe900012b40 +% 0a4001115ffdedd20824d540 +% d0888004bb6fbfb4008b5a80 +% ad251202bffdfbe921255580 +% b554a05576ab576a045aaa80 +% aaaa950aaaad5aaaa955b6c0 +% 56d56a556d6aaad48556aa80 +% b55b5555aaab6b5ab55aad40 +% 55aaaaaab5b555554aaad580 +% ad556d5b56aaad6b556b5a80 +%%EndPreview +%%BeginProlog +% Use own dictionary to avoid conflicts +5 dict begin +%%EndProlog +%%Page: 1 1 +% Translate for offset +0.000000 0.000000 translate +% Translate to begin of first scanline +0.000000 95.872000 translate +80.640000 -95.872000 scale +% Variable to keep one line of raster data +/scanline 90 1 mul string def +% Image geometry +90 107 8 +% Transformation matrix +[ 90 0 0 107 0 0 ] +{ currentfile scanline readhexstring pop } +image +72727272717171717171717172717171717171717171717172717171727271717171727273736f +675852524e4653535a676b73737272727272727272727272727272727272727272727272727272 +727272727272727272727272 +7172717271717171717171717271717171717171717171717271717171717172727272726d5d4a +4039393939373a3a3c3f4653637172727272727272727272727272727272727272727272727272 +727272727272727272727272 +7171717271717171717171717271717171717171717171717271717171717173747271644b3f3a +3a393a3a3a393b3b3b38393b3d4d64707272727272727272727272727272727272727272727272 +727272727272727272727272 +727272727171717171717171727171717172717171717171727171717171727372705b3b3d3b3a +3939393939393938393939383a3c3f546d71747272727272727272727272727272727272727272 +727272727272727272727272 +727271727171717171717171727171717171717171717171727171717171727173553e3d383a39 +393a383838383838393940564d3f38394668727272727272727272727272727272727272727272 +727272727272727272727272 +71717171717171717171717172717171717171717171717172717171717172715f3d38393b3b39 +3a393939393939393a3c5574807252403742627272727272727272727272727272727272727272 +727272727272727272727272 +727271727171717171717171727171717171717171717171727171717172726c403c373a3a3a3a +3a3a3a3a3a3a3a3a393e5e82958c72543a38416a72737272727272727272727272727272727272 +727272727272727272727272 +727171727171717171717171727171717171717171717171727171717271735a3d383b3a3a3a3a +3a3a3a3a3a3a3a3a383c5f87978e7c65493a3c5070737272727272727272727272727272727272 +727272727272727272727272 +7171717271717171717171717271717171717171717171717271717172736c4638373b3a3a3a3a +3a3a3a3a3a3a3a3a3a436384897d6d644f3a3b3e60727472727272727272727272727272727272 +727272727272727272727272 +727171727171717171717171727171717171717171717171727171717273603a3839393a3a3a3a +3a3a3a3a3a3a3a3b39425c6f68574745403b3c3848707472727272727272727272727272727272 +727272727272727272727272 +7271727271717171717171717271717171717171717171717271717172724d373938393a3a3a3a +3a3a3a3a3a3a3a393a3d494e3e3e3c3b393c3a393b617272727272727272727272727272727272 +727272727272727272727272 +71717171717171717171717171717171717171717171717172717171727241393839393c3a3a3a +3a3a3a3a3a3a3a393b3a3a3d3b3a3d393c3b393b3a4b7374717272727272727272727272727272 +727272727272727272727272 +7272727271717171717171717271717171717171717171717271717172703a3b3937393b393a3a +3a3a3a3a3a3a3a3a3a3b3a3a393d3a3b3b3b393a393e6d74727272727272727272727272727272 +727272727272727272727272 +7272727271717171717171717271717171717171717171717271717171633c3a3a38383d413c3a +3a3a3a3a3a3a3a3a3a3b3e4142393c3c3b3b3939393c6074707272727272727272727272727272 +727272727272727272727272 +7272727271717171717171717271717171717171717171717271717171623b373b3e40475d5a3f +3b3b3a3a393b3b3b373839486b6d3d393b3b3a38393b5c73717272727272727272727272727272 +727272727272727272727272 +7272727271717171717171717271717171717271717171717271717172623b373c3a3d3f425d65 +3f393a3a3d393b3e5b75795a3e6562393b3b3b39393d4f71727272727272727272727272727272 +727272727272727272727272 +7272727271717171717171717272717171717271717171717271717172623c3838538a9e7e4960 +4e3c3a3a3c3a57879ea9b0b68e445b463b3b3b3a3b3d4a72727272727272727272727272727272 +727272727272727272727272 +7272727271717171727171717272717171727171717271717271717172613c374d96b6cabb8e48 +463b3a3a3a5291abb6c0c7d1be7f3f473b3b3a38393a4672727272727272727272727272727272 +727272727272727272727272 +7272727271717171717271717271717171717171717171717271717172603c3770acd1e3dfcc84 +3a3b3a3a3d85c0e7f4f7f7f2d9a4593a3b3b393839393f6b727272727272727272727272727272 +727272727272727272727272 +7272727271717171717171717271717171717171717171717271717172603c3c9aebdbc5eefdda +45393a3a45b8f7fcda8386d1faec8b373b3b3a3938383e6b727272727272727272727272727272 +727272727272727272727272 +7272727271717171717171717271717171717171717172717271717172613946c8db4e7188eaf9 +60443c3e4dc7fbe953468a7fcdfdc7433b3b3a3839383c6a727272727272727272727272727272 +727272727272727272727272 +7272727271717171717171717271717171717171717171717271717172603a4bd59a387184a5fb +755363655bc9fb9c3d3a5c907ffbe7543b3b3a3939383c6a717272727272727272727272727272 +727272727272727272727272 +7171717171717171717171717171717171717171717171717171717171673b4ad5833e4a7f75f8 +6f484b575cb3f67b363c445b68f4ed553a3a3a3939393b6a717272727272727272727272727272 +727272727272727272727272 +7272727272717171717171717271717171717171717272717271717171714245cc953c3d5667ce +666e6f6c6282e97a3b3a3a3b5bf5ea58393a393a393c386a737272727272727272727272727272 +727272727272727272727272 +727272727171717171717171727171717171717171717171727171717171413eb7c4453b416fa6 +c3c9c6c2bcb1c19d3a3c3b3e8cfbdc4c3939393a39393969727272727272727272727272727272 +727272727272727272727272 +727272727171717171717171727171717171727171717171727171717171413a8df18e477da2af +cdcecbbfa6b2cfc289534273ebf9ac3f3939393939383b62727272727272727272727272727272 +727272727272727272727272 +72727272717171717171717172717171717172717171717172717171717142385bdae697a9c1cd +cfcecfd3d4d7dcd9d5c5a8c5e4dc633838393a39393a365b727272727272727272727272727272 +727272727272727272727272 +72727272717171717171717172717171717171717171717172717171717142363e99a4a8b9cacf +cecfd2d8dcdfe2dfdedad6cdc3ac693f39393939393a375b727272727272727272727272727272 +727272727272727272727272 +7272727271717171717271717271717171717171727171717271717171714137538fa4b4c2cbcf +cfd1d5dadee2e1dfdedededfdcdab5553a3a39393a3c3859727272727272727272727272727272 +727272727272727272727272 +7272727271717171717171717271717171717271717171717271717171714b43839facbdc8cfcf +d0d3d7dae2e2dfdedededed1b1c5c05e3c3b393a3c393c4c717272727272727272727272727272 +727272727272727272727272 +727272727171717171717171727271717171717171717171727171717172524c94a0b2c1cbcfcf +d1d5d9dee1dfdedededabea8aebbad4f3b3c3a393a3a3d426b7273727272727272727272727272 +727272727272727272727272 +72727272727171717271717172727171717171717172717172727171717254478ea5b9c3ced0d1 +d3d6dbe0dededddccfabaab7bbbaaa4b3c3b393a37393f3b597174727272727272727272727272 +727272727272727272727272 +727272727171717171727171727171717171717171717171727171717171503b5c84aec9d0d1d1 +d6d9dddcded9d1b0a0b1b8bbbab387403a3b6c7446333938477173727272727272727272727272 +727272727272727272727272 +7272727271717171717171717271727171717171717171717271717171714f3d457986a3c5d1d6 +d8d9d8d1bfa795a2b4b7bab7adac8642383863978e6f413c3c6973727272727272727272727272 +727272727272727272727272 +727272727171717171717171727171717171717171717271727172717272523b4390a58a8e9da8 +aba4a29d9ca5aeb3b2afabb7c4c2bb5d3b3645849b99663a3c4e72727272727272727272727272 +727272727272727272727272 +727272727171717171717171727171727171717171717271727171717273543c49adbfa29097b4 +c0b9b5b3b4b0afada5aabec7cfcac3763a3b3c5e999a8745393d65727272727272727272727272 +727272727272727272727272 +727272727271717171717171727271717172717171717171727172727171483856aac1bfa18e9e +b1b4b2afa9a3a0a4b3c1c1c5d3ded4ac413a3b4079895a38353948707472727272727272727272 +727272727272727272727272 +7272727271727171717171717272727171717171717171717272737272633f3c4ea8c5c1c0a790 +919698959193a7bac2c1c9e1f4fbfbde6c3b3c3a39423c3b3a393e617473727272727272727272 +727272727272727272727272 +7272727271717171717171717271727171717171717172717272717270453b394dc1d9c8c2c2bc +a79b9b9dabbac0c1c2cde3f8fdfdfdfabf453b3b3b3b3b3b3a393d4c7071727272727272727272 +727272727272727272727272 +727272727171717171717172727171717171717171717171727270715b3d3b398ff5e7cec3c3c1 +c3c1c2c2c3c2c2c8d4e4f5fdfdfdfdfdf9723f3b3b3b3b3b3b3a39435a74747272727272727272 +727272727272727272727272 +7272727271717171717171717271717171717171717171717271726750463658e0fbf7e4c6c2c3 +c3c2c3c2c2c4ceddedf7fdfdfdfdfcfdfccb4a3b3d383b3b3a3a3a3e4a6b727271727272727272 +727272727272727272727272 +72727272717171717171717172717271717171717171717172716d4b544340b1f7fcfdf7d5c2c2 +c2c2c2c2c6d5e7f5fcfdfdfdfdfdfdfcfbf7833d3d3b3b3b393b393a3b4e717272717272727272 +727272727272727272727272 +7272727271717171717271727271727171717171717171727371483a3a3673f4fdfcfbfceccfc5 +c2c1c2cde3f3fafdfdfdfcfdfdfdfdfcfdfccb40393a3b3b39393a393b3c607271727272727272 +727272727272727272727272 +727272727171717171727171727171717171717171717171705a3e3f3c45d0fcfdfdfcfdfcf5e6 +d9dce5f1fafcfcfcfdfdfcfdfdfdfdfdfdfdf66937393b3b393939393a3a486a72717272727272 +727272727272727272727272 +7272727271717171717171717271717171717171717171725f3e3a3c3985fbfcfdfcfdfdfdfdf9 +f1f8fcfdfdfcfcfcfcfdfdfdfdfdfdfdfdfdfd933b3a3b3b3a3a3a3a393a3d4a6b717272727272 +727272727272727272727272 +717171717171717171717171717171717171717172727267443b3b394cd2fafcfdfdfdfdfdfdfb +fafcfdfdfdfcfcfcfcfcfdfdfdfdfdfdfdfdfbc73b3b3a3a3a393a3a3a393c3e52727272727271 +727272717171717172717271 +727172727171717171717171727171717172727175736d423a3a383c7de7f9fefefdfdfdfdfdfc +fbfcfdfdfdfcfdfdfcfdfdfdfdfdfdfdfdfcf8e24d3c3b3b3a3a3a3a3b3b393a3b537173727272 +727272727272727272727272 +7272727271717171717171717271727171727271726e4d3b3b3a3646a0e2f8fdfefdfcfcfdfdfc +f8f8fcfdfdfdfdfdfdfdfcfdfdfdfcfbf4f0efeb653f3b3b3b3b3b3b3b3b3938393f5772727272 +727272727272727272727272 +727172727171717171717171727171717171727171533f3b3b3a364aa5cef0f9fbfdfdfcf9f5f1 +ecebf3f8fafbfbfafcfaf8f7f5f5efeae3dbdfe687473b3b3a3b3a393a3a3b393a393f5c727272 +727272727272727272727272 +7272727271717171717171717272717171717271623d3d3a3b3a3a5ba9b8d0e7edf5f9f9f5ede3 +e1e5e7f2fbf9fafaf7eee2dad3d0cececcc8c9d8c5513a3b3a373c393d3b3a3939383d3e637272 +727272727272727272727272 +727272727171717171717171727171717172726e4a3d383a3b3a456fadb5cbddebf8fbfcfdfced +e4f5fbfdfcfdfdfdfcf7ede3d5cecac8c7c6c6c7deb844393e644e3a393b3a3a3939383c4b6f72 +727272727272727272727272 +72727272717171717172727272727271717272603e3a3b3b393a4b7cbbd3ebf7fdfcfcfbfdfcee +f1fcfcfcfcfbfbfdfcfcfdfbf8f2e8ded3cbc7c6ceee993d34556f5f463c3d393b393a3a3e6272 +727272727272727272727272 +717171727171717172717171727171717173704b3b3d39473c3c5fb0dcf1fbfcfcfcfdfcfcfcf5 +f5fbfcfbfdfcfcfcfcfcfbfbfdfcfcfbf5e9d9cdc7d8ea683b3d3d58724b3b3d3b3a3a3a3c5173 +737272727272727272727272 +7272727271717171717271717271717171736e433e385e603e4090dff5fcfdfcfcfbfcfcfbfcfa +fbfbfcfcfcfbfcfdfcfcfcfcfdfcfcfcfbfcf6e6d3c9e3c3403a3d394d7342353e3a3b3a39416b +727372727272727272727272 +727171727171717171717171727171717172673d374a6b3b3d4cd9f8fdfcfcfcfbfdfbfcfbfcfc +fbfcfcfbfcfcfcfcfdfcfcfcfbfcfbfcfcfdfdfaedd4ceeb6c3c3d3d3e51663a3e383b3a393c56 +717472727272727272727272 +727271727171717171717171727171717173573c3c604d3b3c8ffbfdfbfcfdfcfcfcfcfcfcfbfb +fdfbfdfcfdfbfcfcfcfbfcfcfdfbfdfcfcfcfcfdfcedd3dac43d384e5b5064583a3c3b3a363c40 +6f7272727272727272727272 +727271727171717171717171727171717170483f476f373851e9fdfdfdfbfcfcfcfcfcfcfbfcfd +fcfcfcfbfcfcfbfbfcfcfdfcfdfcfcfcfcfcfcfdfcfdf1e6f1583f5e7770546d42393b3a3b3a3d +637272727272727272727272 +7272727271717172717171717271727372643f3c6a52373da0fbfcfcfcfcfbfcfcfcfdfcfcfbfb +fcfbfcfbfbfcfdfcfcfcfcfcfcfcfcfbfcfcfdfcfdfbfcfcfd9545657c735259613d3c393a393b +4e7172727272727272727272 +7272727271717171717171717271727471513a456a393a5ae6fafcfbfcfbfcfbfcfcfcfcfbf8fa +fbfcfcfcfcfdfbfcfdfcfcfdfcfdfcfbfdfcfbfcfcfcfcfcfdc64f5e6456434078433b3d393b3d +436c72727272727272727272 +727272727171727171717171727272726e47385c53333e98fbfbfcfcfcfcfcfcfcfcfcfcf9eafb +fbfbfbfbfcfcfbfdfcfcfbfcfcfcfcfcfbfdfcfcfdfdfcfdfce7473d3f3b3b375e57393d383939 +3b6171727272727272727272 +72727272717171717171717172717272633c3b703f3451dafcfcfbfbfcfcfbfcfcfdfdfbf4e8fa +fcfdfcfcfcfbfcfbfcfcfcfcfbfdfcfcfcfcfcfcfcfbfbfcfcfa623c3a3a3b374b66373d393939 +3b5072727272727272727272 +727272727171717171717171727272714e3b52613b388af8fcfbfcfbfcfcfcfcfcfdfcfcf2edfc +fdfcfcfcfcfdfcfbfcfcfcfcfcfdfcfdfdfcfcfcfcfdfcfbfcfc84383b3b393a3f774138383938 +3a416f727272727272727272 +727271727171717171717171727272663c3c68453b40c5fbfbfbfdfdfcfcfdfbfcfcfcfcededfb +fcfcfcfcfbfcfcfcfcfbfbfcfcfcfcfcfafcfcfcfcfbfcfdfcfda23c3b3b3b3b3d7437383b3a39 +3b3f68727272727272727272 +7272727271717171717171717174714b3a3a6b373b57eefcfcfcfcfbfcfcfbfcfcfbfdfbe9e9fb +fbfcfcfcfbfcfcfbfbfcfcfbfbfcfbfcfcfcfcfcfbfcfcfcfdfcaf3b3b3b3c3a406f37373a3a39 +393d5f727272727272727272 +7171717272717171727171717271623e3d4a60373b82fbfcfcfdfbfdfcfcfcfcfbfcfcfbe6eafb +fcfdfcfcfcfcfcfbfdfcfcfcfdfcfcfcfcfdfcfcfcfbfcfcfcfdbd3a3b3b3a3843633836393a38 +3a3c54727272727272727272 +727272727272717171717272736d463a37535c3839aafcfcfcfdfdfcfcfcfbfcfdfcfbfbe6eaf9 +fbfbfcfbfcfbfcfcfbfdfcfcfbfcfcfcfcfdfcfcfcfcfbfdfcfcce3c3b3b393c4e533937383939 +383c4f727272727272727272 +71717272717171717171717371593d3b3952603947cdfcfbfcfcfcfcfcfdfdfcfcfcfdfae2e9fa +fbfbfcfdfbfcfcfcfcfcfcfcfcfcfcfbfbfcfbfdfcfcfdfafcfcd4423b3b3b3a5a4e393a39383a +3a3940727272727272727272 +7272727271717171717271726c41393c3656683b47d6fdfbfcfcfcfcfcfcfbfcfdfcfcfae1e9fb +fbfcfdfcfcfcfbfcfcfcfcfbfcfcfbfcfcfcfbfbfdfcfbfcfcfdda413b3b3c3b6644393a3a3938 +3b3a3f727272727272727272 +727271727171717171717171553c3b3b405f6d394ce1fcfcfcfcfcfcfbfdfcfcfcfcfcf9e1ecfb +fcfcfcfcfcfbfbfcfdfcfcfdfbfcfcfcfcfbfcfbfbfdfcfdfcfcdd423b3b3b39643f393a393939 +3a3a3e727272727272727272 +7272727271727171717171724f3e363d4f767e3b5be9fcfdfcfdfbfbfbfcfcfbfafcfcf8e2eefb +fbfcfcfcfcfcfcfcfcfcfcfcfcfcfcfbfdfcfbfcfdfcfcfcfbfdde433b3b3b455f3a3b3b3a3a39 +39393e727272727272727272 +72727272717171717171716e46393938466b863e69edfcfdfcfcfcfcfbfcfcfcfcfcfcf7e2eefc +fbfcfcfdfbfdfcfbfdfcfdfdfdfcfcfcfcfdfbfcfcfbfcfcfbfddc443b3b385a463b3b3b3a3839 +393940727272727272727272 +72727272717171727171716f413a3a3a3945724869effcfcfcfcfbfcfcfbfcfcfcfcfbf8e2f1fc +fcfcfcfbfcfcfcfcfcfcfcfcfcfcfcfbfcfcfcfcfcfcfbfcfdfccc3f383a41683b3d3d3a3b3a3a +3a3b42727272727272727272 +72727272727171717171716e443938393c3c49626eeefcfbfcfcfcfcfcfcfcfcfcfcfcf8e2f1fc +fbfcfdfcfcfdfdfcfcfcfcfcfbfcfbfcfcfcfcfcfcfcfcfcfcfcb83b3f5a685d455b6054463f3a +3c3a51727272727272727272 +727272727271717172717171524a728f8d5e424d80e3fbfcfcfbfcfcfdfcfbfcfcfcfcf7e1f2fb +fcfcfcfcfcfcfcfbfcfdfbfcfcfcfcfcfcfcfcfcfcfdfcfcfcfc9c405b503d3b3c3c455368755c +3d3a5a727272727272727272 +72727172717171727271727174a3c9d4d6c87b3b50b0f9fcfcfdfcfcfcfbfdfcfcfcfcf8e2f3fb +fcfcfdfcfcfcfcfcfcfcfbfbfbfcfbfcfbfcfcfcfcfcfbf9fbf66956403b3a3a39393b3a3a608d +654567717273727272727272 +7272727271717172717371739bc1d1d4d4d4cc7f3f55a9f5fbfbfcfbfdfbfbfcfbfbfcf8e1f3fc +fbfcfcfcfbfcfbfcfcfdfdfcfcfcfcfcfcfcfcfcfbf6d5d3d3d29c59393a393b3b3b3b3a3c5d76 +61486b737272727272727272 +727272727171727171737288b1c7d1d4d4d5d4cc803f4ea1f0fbfcfcfcfbfcfcfcfdfcf6e3f4fc +fdfbfbfcfcfcfcfcfcfcfcfcfdfbfcfcfcfbfcfcfcdccfdbdddccd5b3e3a393b3b3b3b3a3e655e +519c89727373727272727272 +7171717272727171717276a3b8c8d2d4d5d4d5d5c66d3a4892e9fcfbfcfdfcfbfbfbfcf8e1effb +fcfbfcfcfcfcfbfcfcfbfcfbfcfcfcfcfbfcfcfcfcd5c7d4d7dabb50383c393b3b3b3b3a414f40 +76cfda8f7374727272727272 +7172717372727271707e9db3c0cdd4d4d5d4d4d5d4b6543b4673d6fbfbfcfcfdfdfcfbfaeaedfc +fbfdfcfcfcfdfdfcfcfcfcfcfbfbfcfbfcfdfcfcfcd7c5d3d4d1a9513a393a3b3b3b3b3a3a3653 +bad5d7b87371727272727272 +7170778c9baaa8a5a3a7b4bdc9d1d4d4d4d4d4d4d5d2a04435405bc1f7fcfcfdfbfcfcfdfbf9fc +fdfcfbfcfcfcfbfcfcfcfcfbfcfcfcfdfcfcfbfbf8d8c4d3d2c9a85c3a3b383b3b3b3b3a3a4196 +cfd1d4c47370727272727272 +73779fb2bcc1bfbbbbbdc4cad1d4d4d4d5d4d4d4d5d4cb7c3d373c469ef3fbfcfcfcfdfcfcfcfc +fcfbfcfcfbfcfcfcfcfcfcfcfcfcfcfcfbfcfbe8d3c7c4d2cec3ae78463c36383836373b477dbf +cccfd1c07671727272727272 +738ab0bec9cdccc9c7ccd1d2d4d4d4d4d4d4d4d4d4d5d5b758383b3a4387e5fdfcfcfcfbfcfcfc +fdfdfbfcfcfcfcfcfbfcfcfdfcfcfbfbfdfceecdc7c3c2cecbc1ae997146403e393d426189b2c3 +cccfd2c27572727272727272 +7193b7c7ced1d2d3d2d3d4d4d4d4d4d4d5d4d4d4d4d3d4cf953d383a353a68d0fbfbfbfbfdfcfc +fbfbfbfdfcfdfcfbfcfcfbfcfcfcfdfcfbfde3c7c8c2bfc9cac4b5a69c8e7d77767e929eacc0ca +d0d3d4d07f72727272727272 +729eb8c8d0d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d5d3d3d5c065383b38343f57bffbfbfcfcfbfc +fcfcfcfcfbfbfcfdfcfcfcfcfbfbfbfcfcfbdfc9c8bdb9c8cac6bbb0a8a5a1a0a1a3a7b1bfccd1 +d4d4d4d3af77717372727272 +7192b7c6d0d4d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d3d4d4a64639383c3a3852c7fcfcfdfdfd +fcfcfcfcfcfcfdfdfcfcfdfcfdfcfbfcfcfbe0c8c8b8b4c6cacac1b9b5b1b0afafb2b7c0cbd4d4 +d4d5d4d2cf9c727272727272 +728cb5c3ced4d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d4d4d4c97d3b363a3737396ef0fcfcfcfc +fdfcfcfcfbfcfcfcfcfcfcfcfdfcfcfbfcfde7cbc9b3aebfc9cbc8c2bcbbb9b9b9bcc3c9d1d5d5 +d5d5d5d3d1c88f7272727272 +718bb2c0cdd3d4d4d4d4d4d5d5d5d4d4d5d4d4d4d5d4d4d4d4d5b6573a3939393742d8fcfcfcfc +fcfbfcfbfcfcfcfdfcfcfcfcfbfbfcfcfdfbeed0c8adaabcc9d0cecbc5c3c2c1c3c5c8ced2d5d5 +d5d5d5d5d4d1c29071727372 +727fafbdccd3d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d4d4d4d4ce974038393b393fd1fcfcfcfb +fcfbfcfdfcfcfbfcfcfcfcfcfbfcfcfbfcfcf3d3b588aabdc9d0d2d1cdcbc9c8caccced1d4d5d5 +d5d5d5d5d4d3d0cb99767372 +727aadbccbd3d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d4d4d5d3d5c57a3a3a383a59ecfdfcfcfc +fbfcfcfcfcfcfcfbfcfbfcfcfbfcfcfcfbfcf2c46785aabdc9d1d3d3d2d2d0d1d1d2d2d3d4d5d5 +d5d5d5d5d5d5d4d4d4b88872 +727bacbacbd3d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d4d4d5d4d3d5b15441467bd7fcfcfcfbfc +fcfdfdfcfcfcfbfcfcfcfdfdfcfcfcfcfbfccd5d4484abbecad1d2d4d4d5d4d5d4d4d4d4d5d5d5 +d5d5d5d5d5d4d5d4d4d5cea5 +727caebac9d3d4d4d4d4d5d5d5d5d4d4d4d4d4d4d4d4d4d4d5d5d3d3ce99a7dcf8fcfcfcfcfcfc +fbfbfcfcfbfcfcfdfcfcfcfcfbfcfcfcf8c2523a4789aabecad1d3d4d5d5d5d5d5d5d5d5d5d5d5 +d5d5d5d5d5d5d5d5d5d5d2c6 +7084aebacbd2d3d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d3d1d1bfa4f4fafbfbfcfcfbfc +fcfcfbfbfcfcfcfcfcfcfcfcfcfbfbf6a44538364e8aaabecbd2d4d4d4d4d4d4d4d4d4d4d4d4d4 +d4d4d4d4d4d4d5d5d4d3cec1 +718eacbbcdd3d3d4d4d4d5d4d5d4d4d4d5d4d4d5d4d4d5d4d5d4d4d3cfceadbdfbfcfbfcfcfcfc +fbfdfdfcfbfdfbfbfcfcfbfbfcfce87f42353834578aa9c0cbd2d5d5d5d5d5d5d5d5d5d5d5d5d5 +d5d5d5d5d5d5d5d4d0c9c19f +739daec0d0d4d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d4d4d5d4d4d4cfd0bc95d1fbfbfbfcfcfc +fcfcfcfcfcfcfbfcfcfcfcfcefa84c3b383c39385e88a7c1ccd2d4d5d5d5d5d5d5d5d5d5d5d5d5 +d5d5d5d5d4d4d4d1c6bca676 +81a6b6cbd2d3d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d4d4d5d4d4d4cfcabf9f80cbfafbfcfcfc +fbfcfcfcfcfbfcfcfcfcf0b45b3c3a3b3a3738396488a6bfccd3d4d5d5d5d5d5d5d5d5d5d5d5d5 +d4d4d4d4d3d1ccc1b5947871 +94aebfcdd2d3d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d4d5d5d4d4d4d0c6bda6835a8ad1eff7fb +fcfbfcfcfbfaf3e7c5935a3f373a3b3b3b3b3b3d6b8ba7becbd2d5d5d5d5d5d5d5d5d5d5d5d4d4 +d5d4d4cec7c0b5a280727373 +a4afbdc8d1d2d2d3d4d3d4d4d5d4d4d4d4d4d4d4d4d4d4d4d5d4d4d4d1c8bca98d693b3d5c7e93 +a7aea0988f7c5e4b3d3b3a38383b3b3b3b3b3a43708ea7bdcad2d5d5d5d5d5d5d5d5d5d5d4d2d1 +d2d1c8bbb09a7f7372727272 +a3abb7bfc8cbcdcecfd0d2d4d3d4d4d4d4d4d4d4d4d4d4d5d5d4d5d4d0c8bca78f75473839383d +3d3a39373836353a383b37373b3a3a393a3a38477590a6bac9d2d4d5d5d5d4d4d4d5d4d4d0ccca +c6bdb1947971727272737272 +9aa5aaafb7bcbfc0c3c5c6cacccfd0d1d2d3d3d4d4d4d4d5d5d4d4d3cec3b6a28b7b553939393a +393939393939393939393939393a393a3a393947768fa3b5c3cfd4d4d4d4d4d4d2d2d1cbc5bfbb +b19b80737172727272727272 +7a91989da0a2a7abafb2b6b7bcc0c4c6c9cdd0d2d4d4d4d4d4d4d4d1c8bba9988a7c593a3a3a3a +3a393a3a3a3a3a3a3a3a3a3a3a3938393a3a3a4a768a9daebdc9d0d2d3d3d2d2d0cdc7bfb8b2a6 +8a7371717171727272727272 +7172757a838c91979c9fa4a4a6a9aeb1b6bac1c7cdcfd1d2d1d1d1cbbfb09e8f857958383a3839 +3b3b3b3b3c3b3b3c3b3b3b3b3b3a3837383a394c738596a5b5bfc9ced0d1d0cdc7bfbbafa49a7b +727172727272727272727272 +727273727272747c858b90949496999b9fa4acb3b9bec3c8cbcac4bbafa393867d734e3c404141 +4b555858585858585858585857554d454543404d7082909daab6c0c5c7c8c6beb8b2a89b8a7571 +727272727272727272727272 +7372727272727171727274797d8185898d90959ba2a6abb0b6b6b0a89c92867e776547656f7372 +707172727272727272727272727174736f6f66656c7e8a959fa6aeb3b4b4b1aaa49d9382727272 +727272727272727272727272 +727271717271717171727271717273767b7d82898e9195989b9b98928a837e7972616470727172 +72727171717171717172727272727272727171706d76828e979b9da0a1a19f9b968d7c73727271 +717272727272727272727272 +72727272717171717171717172717170717172767d81868788878683807c776f6e727271717171 +7171717171717171717272727272727272727271706f79838c9192959595938d84787171717272 +727272727272727272727272 +7272727271717171717171717271717171737372727375767a7c7d7b79746e6d72737271717171 +7171717171717171717272727272727272727271726e6f737c8285888786837974727172717272 +727272727272727272727272 +7272727271717171717171717271717171727272727272707273706f6f71707272727271717171 +71717271717171717172727272727272727272727272716e6f6f72757372727172717172727272 +727272727272727272727272 +showpage +%%Trailer +end +%%EOF diff --git a/contrib/mom/examples/sample_docs.mom b/contrib/mom/examples/sample_docs.mom new file mode 100644 index 0000000..f9b2933 --- /dev/null +++ b/contrib/mom/examples/sample_docs.mom @@ -0,0 +1,713 @@ +.\" -*- mode: text; coding: utf-8; -*- +\# +\# Copyright (C) 2004-2020 +\# +\# Copying and distribution of this file, with or without modification, +\# are permitted in any medium without royalty provided the copyright +\# notice and this notice are preserved. +\# +\# This file contains three greeked documents collated together: +\# +\# i) two pages of a novelist's outline +\# ii) two pages of a chapter using COPYSTYLE DRAFT +\# iii) three pages of an academic paper, set in two columns +\# +\# Mom's defaults are used throughout, except for iii), which +\# demonstrates some of the ways you can design your own documents. +\# +\# Since the text throughout is greeked, and groff doesn't know how +\# to hyphenate all that pseudo-latinate nonsense, I've inserted +\# discretionary hyphens (\%) into a large number of the words. +\# Normally, this isn't necessary. +\# +\# The PRINTSTYLE is TYPESET. If you'd like to see what mom does +\# with the documents when the PRINTSTYLE is TYPEWRITE, change +\# PRINTSTYLE TYPESET, below, to PRINTSTYLE TYPEWRITE and re-run with +\# +\# pdfmom -Tps sample_docs.mom > sample_docs.pdf +\# +\# =================================================================== +\# +\# First, a sample NAMED document--in this case, an outline. +\# A novelist wouldn't normally write an outline with numbered +\# subheads and paraheads. I've turned the feature on merely to +\# demonstrate it. +\# +\# Information for the cover pages +\# +\# Title, subtitle and copyright for the document cover. +\# +.TITLE DOC_COVER \ + "Sample mom documents" +.SUBTITLE DOC_COVER \ + "Three types of mom documents" \ + "assembled and collated" \ + "by mom's author" +.COPYRIGHT DOC_COVER \ + "2015 Peter Schaffter" +\# +\# What appears in the pdf viewer's window title +\# +.PDF_TITLE "Sample mom documents" +\# +\# Reference macros (metadata) for the first section of the collated +\# document. +\# +.TITLE "Lake Attica's Shores" +.SUBTITLE "A Romance Novel" +.AUTHOR "Rosemary Winspeare" +.COPYRIGHT "2015 Alma Podborski" +\# +\# What to put on the cover for the whole document (in mom-speak, +\# the "doc cover"). The title, subtitle, and author are what were +\# given to TITLE DOC_COVER, SUBTITLE DOC_COVER, and COPYRIGHT +\# DOC_COVER. +\# +.DOC_COVER TITLE SUBTITLE COPYRIGHT +\# +\# What to put on the first document's title page (in mom-speak, the +\# "cover"). In this case, we're using the metadata from TITLE, +\# SUBTITLE, AUTHOR and COPYRIGHT, which will also be used to +\# generate the docheader (minus the copyright). +\# +.COVER TITLE AUTHOR DOCTYPE COPYRIGHT +\# +\# Docstyle macros (templates) +\# +.DOCTYPE NAMED "Outline" +.PRINTSTYLE TYPESET +.PAPER LETTER +\# +\# Here we style the covers a bit. +\# +.DOC_COVER_TITLE_STYLE \ + SIZE +8 \ + SMALLCAPS \ + UNDERLINE 1 3p +.DOC_COVER_SUBTITLE_STYLE \ + FONT I \ + SIZE +2 \ + LEAD 18 \ + SPACE .75v +.DOC_COVER_COPYRIGHT_SIZE -.5 +\# +.COVER_TITLE_SIZE +5 +.COVER_ATTRIBUTE_STYLE \ + SIZE +2 \ + SPACE .25v +.COVER_AUTHOR_STYLE \ + SIZE +2 \ + LEAD 18 +.COVER_DOCTYPE_STYLE \ + SIZE +4 \ + UNDERLINE DOUBLE 1 +.COVER_COPYRIGHT_SIZE -.5 +\# +\# Here we style the docheader a bit. +\# +.SUBTITLE_SPACE .25v +.DOCTYPE_UNDERLINE 1 2p +\# +\# Styles for nested heading levels +\# +\# The first two instances of level-1 headings will be paragraph heads +\# so we set the paragraph head style here, then change it when +\# level-1 headings become main heads. +\# +.HEADING_STYLE 1 \ + FONT BI \ + SIZE +.75 +.HEADING_STYLE 2 \ + FONT B \ + SIZE +.5 \ + BASELINE_ADJUST \n[.v]/8 \" ie 1/8 the leading +\# +.AUTO_RELOCATE_TOC \" Move table of contents to the top of the doc +.SPACE_TOC_ITEMS \" Prettify TOC spacing +\# +\# Begin the document +\# +.START +\# +.PP +.HEADING 1 PARAHEAD "A note on the setting" +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam +nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat, +sed diam voluptua. Stet clita kasd gubergren, no sea takimata sanctus est. +At vero eos et accusam et justo duo do\%lo\%re et ea rebum. +.PP +Stet clita kasd gubergren, no sea takimata sanctus est. Lorem ipsum +dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod +tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam +voluptua. +.PP +Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt +ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. At +vero, eos et accusam et justo duo do\%lo\%res et ea rebum. Consetetur +sadipscing elitr, sed diam nonumy. +.LINEBREAK +.PP +.HEADING 1 PARAHEAD "About historical personnages" +At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita +kasd gubergren, no sea takimata sanctus est. Tempor invidunt ut +labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. +.PP +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam +nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat, +sed diam voluptua. Consetetur sadipscing elitr, sed diam nonumy +eirmod tempor invidunt ut labore et do\%lo\%re magna. Tempor invidunt +ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. +\# +\# Change level-1 style and add numbering to levels 1 and 2 +\# +.HEADING_STYLE 1 \ + FONT B \ + SIZE +1.5 \ + CAPS \ + UNDERSCORE .5 2p \ + QUAD C \ + NO_SPACE_AFTER \ + BASELINE_ADJUST +0 \ + NUMBER +.HEADING_STYLE 2 NUMBER +\# +.HEADING 1 "Part One" +.HEADING 2 "Chapter 1" +.PP +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna +ali\%quyam erat, sed diam voluptua. At vero eos et accusam et +justo duo do\%lo\%res et ea rebum. +.PP +At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita +kasd gubergren, no sea takimata sanctus est. Lorem ipsum dolor sit +amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor +invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. +Stet clita kasd gubergren, no sea takimata sanctus est. +.HEADING 2 "Chapter 2" +.PP +Stet clita kasd gubergren, no sea takimata sanctus est. Lorem ipsum +dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod +tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam +voluptua. At vero eos et accusam et justo duo do\%lo\%res et ea rebum. +.PP +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, +sed diam nonumy eirmod tempor invidunt. Ut labore et do\%lo\%re magna +ali\%quyam erat, sed diam voluptua at vero. +.HEADING 2 "Chapter 3" +.PP +Eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita kasd +gubergren, no sea takimata sanctus est lorem ipsum dolor sit amet. +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam +nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat, +sed diam voluptua. At vero eos et accusam et justo duo do\%lo\%res et +ea rebum. +.HEADING 1 "Part Two" +.HEADING 2 "Chapter 4" +.PP +Stet clita kasd gubergren, no sea takimata sanctus est +lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur +sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore +et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. +.PP +At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita +kasd gubergren, no sea takimata sanctus est lorem ipsum dolor sit amet. +.PP +Nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat, +sed diam voluptua. At vero eos et accusam et justo duo do\%lo\%res et +ea rebum. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna +ali\%quyam erat, sed diam voluptua. At vero eos et accusam et justo +duo do\%lo\%res et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est lorem ipsum dolor sit amet. Consetetur sadipscing elitr, +sed diam nonumy eirmod tempor invidunt. +.HEADING 2 "Chapter 5" +.PP +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed +diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna +ali\%quyam erat, sed diam voluptua. At vero eos et accusam et +justo duo do\%lo\%res et ea rebum. Stet clita kasd gubergren, +no sea takimata sanctus est lorem ipsum dolor sit amet. +.PP +Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt +ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. At vero +eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita kasd +gubergren, no sea takimata sanctus. +.PP +At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita +kasd gubergren. Sea takimata sanctus est lorem ipsum dolor +sit amet. Accusam et justo duo do\%lo\%res et ea rebum. Diam +nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna. +.RIGHT +\*[BD]\&...end of sample outline\c +.EL +.COLLATE +\# +\# The '\c /.EL' keeps mom from depositing a line break which, +\# because "...end of sample outline" falls exactly on the last +\# baseline of the page, would spring the page trap that sets a +\# header at the top of the next page. Since the next page is a +\# title page, we don't want that. Normally, this isn't required, +\# although using it routinely before COLLATE is a good habit. +\# +\# Notice, too, the use of "\&" before "..." Whenever an input line +\# begins with either a period, an apostrophe or a space, you must +\# precede it with \&, otherwise the line will disappear, even when, +\# as here, there's an inline escape beforehand. +\# +\# ===================================================================== +\# +\# Next, a document composed of two pages of a chapter, set in DRAFT +\# style, showing the use of the EPIGRAPH BLOCK macro and the QUOTE +\# macro. +\# +\# You'll notice that the starting page number of this "draft" is 1 (in +\# roman numerals). COPYSTYLE DRAFT always numbers the first page of a +\# document 1. +\# +.TITLE "Lake Attica's Shores" +.SUBTITLE "A Romance Novel" +.AUTHOR "Rosemary Winspeare" +.CHAPTER 1 +.CHAPTER_TITLE "The Bonny Blue Yonder" +.DRAFT 1 +.REVISION 2 +.MISC "Draft 1, 2nd revision" +\# +.DOCTYPE CHAPTER +.COPYSTYLE DRAFT +\# +.EPIGRAPH_FONT I \" Epigraphs are normally set in roman +.DRAFT_WITH_PAGENUMBER \" Draft/revision info usually goes in the header +\# +\# Style the title page +\# +.COVER_CHAPTER_SIZE +6 +.COVER_CHAPTER_TITLE_STYLE \ + SIZE +5 \ + SPACE .25v +.COVER_MISC_SIZE -.25 +\# +\# What goes on the title page +\# +.COVER CHAPTER+TITLE MISC +\# +\# Begin the document +\# +.CHAPTER_SIZE +3.5 +.CHAPTER_TITLE_SIZE +5 +.CHAPTER_TITLE_SPACE +3p +.START +.EPIGRAPH BLOCK +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam +nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat, +sed diam voluptua. +.RIGHT +\# +\# If running PRINTSTYLE TYPEWRITE, this adds space before +\# attribution ("Joseph E. Blough") +\# +.if \n[#PRINT_STYLE]=1 .sp +\# +\*[ROM]\[em]Joseph E. Blough +.EPIGRAPH OFF +.PP +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam +nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat, +sed diam voluptua. At vero eos et accusam et justo duo do\%lo\%res et +ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est. +At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Lorem ipsum +dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod +tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam +voluptua. At vero eos et accusam et justo duo do\%lo\%res et ea rebum. +Stet clita kasd gubergren, no sea takimata sanctus est. At vero eos +et accusam et justo duo do\%lo\%res et ea rebum. +.PP +Stet clita kasd gubergren, no sea takimata sanctus est. Lorem ipsum +dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod +tempor invidunt. +.PP +"Consetetur sadipscing elitr," dixit ea. +.PP +"Sed diam nonumy eirmod tempor invidunt ut labore," dixit eum. +.PP +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam +nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat, +sed diam voluptua. Consetetur sadipscing elitr, sed diam nonumy +eirmod tempor invidunt ut labore et do\%lo\%re magna. +.PP +"Lorem ipsum dolor sit amet," dixit ea. +.PP +"At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita +kasd gubergren, no sea takimata sanctus est," dixit eum. "Sed diam +nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat, +sed diam voluptua." +.PP +Consetetur sadipscing elitr, sed diam nonumy eirmod tempor: +.QUOTE +Invidunt ut labore et do\%lo\%re +Magna ali\%quyam erat sed diam +Voluptua stet clita kasd gubergren +No sea takimata sanctus est. +.QUOTE OFF +.PP +Justo duo do\%lo\%res et ea rebum. Stet clita kasd gubergren, no +sea takimata sanctus est. Lorem ipsum dolor sit amet, consetetur +sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore +et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. +.PP +"Stet clita kasd gubergren," dixit ea. +.PP +"No sea takimata sanctus est," dixit eum. +.PP +Nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna. Aliquyam erat +sed diam voluptua. At vero eos et accusam et justo, duo do\%lo\%res et +ea rebum. +.PP +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam +nonumy eirmod tempor invidunt. Ut labore et do\%lo\%re magna ali\%quyam +erat, sed diam voluptua at vero. Stet clita kasd gubergren, no sea +takimata sanctus est. Consetetur sadipscing elitr, sed diam nonumy +eirmod tempor invidunt ut labore et do\%lo\%re magna. +.PP +Invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. +At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita +kasd gubergren, no sea takimata sanctus est. At vero eos et accusam et +justo duo do\%lo\%res et ea rebum. Lorem ipsum dolor sit amet, consetetur +sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore +et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. At vero eos et +accusam et justo duo do\%lo\%res et ea rebum. Stet clita kasd gubergren, +no sea takimata sanctus est. At vero eos et accusam et justo duo +do\%lo\%res et ea rebum. +.RIGHT +\*[BD]\&...end of sample chapter\c +.EL +.COLLATE +\# +\# ===================================================================== +\# +\# Finally, a sample journal article, set in two columns with a +\# 1.5-pica gutter between them. This example also uses QUOTES, +\# BLOCKQUOTES and FOOTNOTES. In addition, it's set RECTO_VERSO, +\# with differing left and right margins that alternate from page to +\# page. (The header also flips from right to left, which you can +\# see on the 2nd and 3rd pages). +\# +\# The primary purpose of this sample is to demonstrate how to +\# create a stylesheet, along with some of the control macros that +\# can be used. +\# +\# Style the title page +\# +.COVER_TITLE_CAPS +.COVER_ATTRIBUTE_SPACE .5v +.COVER_AUTHOR_STYLE \ + SIZE +1.5 \ + LEAD 14 \ + SPACE .25v +.COVER_MISC_STYLE \ + QUAD L \ + SIZE +0 +.COVER_COPYRIGHT_SIZE +0 +\# +\# What goes on the title page +\# +.COVER TITLE AUTHOR COPYRIGHT MISC +\# +.DOCTYPE DEFAULT +.COPYSTYLE FINAL +\# +.TITLE "Control Equals Chaos" +.SUBTITLE "\*[ALD1]The Psychological and Auditory \ +Impact of Serial vs. Aleatoric Music\*[RLD1]" +.AUTHOR "Joe Chang" "and" "Brad Hegel Connors" +.COPYRIGHT "2015 J. Chang, B.H. Connors +.MISC "Submitted June 3, 2015" "\*[IT]Piano Quarterly\*[PREV]" +\# +\# Style the docheader +\# +.TITLE_CAPS +.ATTRIBUTE_SPACE .33 +.AUTHOR_SIZE +1 +.SUBTITLE_SIZE +2 +\# +.L_MARGIN 6P +.R_MARGIN 4P+6p +.PT_SIZE 10 +.AUTOLEAD 1.5 +\# +.RECTO_VERSO +.PAGENUM 1 +\# +.HEADER_LEFT "Chang, Connors" \" Because we have two authors +.HEADER_SIZE +1 +\# +.DOCHEADER_ADVANCE 1.75i +.DOCHEADER_LEAD +2p +\# +\# When PRINTSTYLE is TYPESET, these indents need to be smaller than +\# the default +\# +.if \n[#PRINT_STYLE]=2 \{\ +. PARA_INDENT 1P +. QUOTE_INDENT 2 +. BLOCKQUOTE_INDENT 2 +.\} +\# +\# Style heading 1 +\# +.HEADING_STYLE 1 \ + QUAD L \ + SIZE +0 \ + NO_NUMBER \ + NO_CAPS \ + NO_UNDERSCORE \ + NO_SPACE_AFTER \ + BASELINE_ADJUST \n[.v]/8 \" ie 1/8 of the leading +\# +\# Style the blockquotes +\# +.BLOCKQUOTE_STYLE \ + FAMILY H \ + SIZE -2 \ + AUTOLEAD 2 +\# +.COLUMNS 2 1P+6p \" Set in two columns +\# +\# Being the document +\# +.START +.PP +Lorem ipsum dolor sit amet, consetetur sadipscing elitr. Sed diam +nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna. Ali\%quyam +erat, sed diam voluptua. +.PP +At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita +kasd gubergren no sea takimata. Sanctus est, lorem ipsum dolor sit +amet. Consetetur sadipscing elitr, sed diam nonumy. Eirmod tempor +invidunt ut labore et do\%lo\%re magna ali\%quyam erat. Sed diam voluptua +at vero eos et accusam et justo. +\# +.BLOCKQUOTE +Stet clita kasd gubergren, no sea takimata sanctus est lorem. +Ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy +eirmod tempor. Invidunt ut labore et do\%lo\%re magna ali\%quyam erat, +sed diam voluptua at vero. Eos et accusam et justo duo do\%lo\%res et +ea rebum stet clita.\c +.FOOTNOTE \" Note the use of \c, above, to keep the word and footnote marker together. +Clita ipsum dolor sit amet, consetetur sadipscing elitr. +.FOOTNOTE OFF +.BLOCKQUOTE OFF +\# +.PP +Duo do\%lo\%res et ea rebum, stet clita kasd gubergren. No sea takimata +sanctus est lorem ipsum dolor sit amet, consetetur sadipscing elitr. +Sed diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna +ali\%quyam. Erat sed diam voluptua at. Vero eos et accusam et justo +duo do\%lo\%res et ea rebum stet. Clita kasd gubergren no sea takimata +sanctus est. +.PP +Nonumy eirmod tempor invidunt, ut labore et do\%lo\%re magna ali\%quyam +erat? At vero eos et accusam et justo duo do\%lo\%res et ea. Rebum stet +clita kasd gubergren no sea takimata sanctus. Est lorem ipsum dolor +sit amet. Sadipscing\c +.FOOTNOTE +Sadipscing diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna +ali\%quyam erat, sed diam voluptua. +.FOOTNOTE OFF + elitr sed diam nonumy eirmod tempor invidunt. Ut labore et do\%lo\%re +magna ali\%quyam erat, sed diam voluptua. At vero eos et accusam et +justo duo do\%lo\%res et ea rebum. Stet clita kasd gubergren no sea. +\# +.HEADING 1 "Schoenberg \[em]" "The Origins of Serial Pitch Organization" +\# +.PP +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam +nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat, +sed diam voluptua. At vero eos et accusam et justo duo do\%lo\%res et ea +rebum. Stet clita kasd gubergren, no sea takimata sanctus est lorem. +Ipsum dolor sit amet consetetur sadipscing. Elitr, sed diam nonumy, +eirmod tempor invidunt ut labore et do\%lo\%re magna. Ali\%quyam erat sed +diam voluptua, at vero eos. Et accusam et justo duo do\%lo\%res et ea +rebum stet clita kasd gubergren lorem ipsum. Dolor sit amet +consetetur, sadipscing elitr, sed diam. Nonumy eirmod tempor invidunt +ut labore et do\%lo\%re. Magna ali\%quyam erat sed diam voluptua at vero. +Eos et accusam et justo duo do\%lo\%res et ea rebum stet clita kasd. +Gubergren no sea takimata sanctus est. +.PP +Amet consetetur sadipscing elitr sed diam nonumy eirmod. Tempor +invidunt ut labore. Et dolor\%e magna ali\%quyam erat, sed diam voluptua, +at vero. Eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita +kasd gubergren sed diam voluptua. +.PP +No sea takimata\c +.FOOTNOTE +Takimata sadipscing elitr, sed diam nonumy eirmod tempor invidunt +ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. +.FOOTNOTE OFF + sanctus est lorem. Ipsum dolor sit amet, consetetur +sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore +et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. At vero eos et +accusam et justo duo do\%lo\%res et ea rebum amet. Consetetur sadipscing +elitr sed diam nonumy eirmod tempor invidunt ut labore, et do\%lo\%re +magna ali\%quyam erat. Sed diam voluptua, at vero, eos et accusam et +justo duo do\%lo\%res et ea rebum qua certiore. +\# +.HEADING 1 "Messiaen to Stockhausen \[em]" "The Quest for Absolute Control" +\# +.PP +Vero eos et accusam et justo duo do\%lo\%res et ea rebum amet: +\# +.QUOTE +Eirmod tempor invidunt +Ut labore et do\%lo\%re magna ali\%quyam erat +Sed diam voluptua +At vero eos et accusam et justo duo do\%lo\%res. +.QUOTE OFF +\# +Lorem ipsum dolor sit amet, consetetur sadipscing elitr +sed diam. Nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna. +Aliquyam erat, sed diam voluptua at vero eos et accusam. Et +justo duo do\%lo\%res et rebum. +.PP +Elitr sed diam nonumy eirmod tempor. Invidunt ut labore et do\%lo\%re +magna ali\%quyam erat sed. Diam voluptua at vero eos et accusam et +justo duo do\%lo\%res et ea rebum. +\# +.BLOCKQUOTE +Sanctus est lorem ipsum dolor sit amet, consetetur sadipscing. Elitr, +sed diam nonumy eirmod tempor, invidunt ut labore et do\%lo\%re magna +ali\%quyam. Erat sed diam voluptua, at vero eos et accusam et justo +rebum amet. Consetetur sadipsc\%ing elitr sed diam nonumy eirmod +sed diam nonumy, eirmod tempor. Invidunt tempor invidunt ut labore.\c +.FOOTNOTE +Labore diam nonumy eirmod tempor, invidunt ut labore et do\%lo\%re +magna ali\%quyam. Erat sed diam voluptua, at vero eos et accusam et +justo. +.FOOTNOTE OFF + Et do\%lo\%re et magna ali\%quyam erat, sed diam voluptua, at vero. +Eos et accusam et justo duo. +.BLOCKQUOTE OFF +\# +.PP +Lorem ipsum dolor sit amet, consetetur sadipscing elitr. Sed diam +nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna. +.PP +Nonumy eirmod tempor invidunt, ut labore et do\%lo\%re magna ali\%quyam +erat? At vero eos et accusam et justo duo do\%lo\%res et ea. Rebum stet +clita kasd gubergren no sea takimata sanctus. Est lorem ipsum dolor +sit amet. Sadipscing elitr sed diam nonumy eirmod tempor invidunt. +Ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. +At vero eos et accusam et justo duo do\%lo\%res et ea rebum. +Stet clita kasd gubergren no sea. Ali\%quyam erat, sed diam voluptua. +\# +.HEADING 1 "John Cage \[em]" "Leaving It All to Chance" +\# +.PP +Sit amet, consetetur sadipscing elitr, sed diam nonumy. Eirmod tempor +invidunt ut labore et do\%lo\%re magna. Ali\%quyam erat, sed diam +voluptua at vero. Eos et accusam et justo duo dolores et ea rebum. +Stet clita kasd gubergren, no sea taki\%mata sanctus est. +.PP +Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt +ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. At vero +eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita kasd +gubergren, no sea takimata sanctus est lorem. Ipsum dolor sit amet, +consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt +ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. At vero +eos et accusam et justo duo do\%lo\%res et ea rebum. +.PP +Stet clita kasd gubergren. No sea takimata sanctus est lorem ipsum +dolor sit. Amet consetetur sadipscing elitr, sed diam nonumy eirmod +tempor. Invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam +voluptua, at vero. Eos et accusam et justo duo do\%lo\%res et ea rebum. +Stet clita kasd gubergren, no sea takimata. Sanctus est lorem ipsum +dolor sit amet consetetur. Sadipscing elitr sed diam nonumy eirmod +tempor invidunt. Ut labore et do\%lo\%re magna ali\%quyam erat, sed diam +voluptua. At vero eos et accusam et justo duo do\%lo\%res et ea rebum. +\# +.BLOCKQUOTE +.PP +Stet clita kasd gubergren no sea. Takimata sanctus est lorem ipsum +dolor sit amet. Consetetur sadipscing elitr sed diam nonumy eirmod +tempor invidunt ut labore et do\%lo\%re. Magna ali\%quyam\c +.FOOTNOTE +Aliquyam nonumy eirmod tempor invidunt ut labore. +.FOOTNOTE OFF + erat, sed diam +voluptua at vero eos et accusam. Et justo duo do\%lo\%res et ea rebum, +stet clita kasd gubergren, no sea takimata. +.PP +Takimata lorem ipsum dolor sit amet consetetur sadipscing elitr. +Sed diam, nonumy eirmod tempor, invidunt ut labore et do\%lo\%re magna. +Aliquyam erat sed diam voluptua. At vero eos et accusam et +justo.\c +.FOOTNOTE +Justo vero eos et accusam et justo duo. +.FOOTNOTE OFF +.BLOCKQUOTE OFF +\# +.PP +Duo do\%lo\%res et ea rebum, stet clita kasd gubergren, no sea takimata +sanctus. Est lorem ipsum. Dolor sit amet, consetetur sadipscing elitr, +sed diam nonumy. Eirmod tempor invidunt ut labore et do\%lo\%re magna +ali\%quyam erat, sed diam voluptua. At vero eos et accusam. +.PP +Et justo duo do\%lo\%res et ea rebum stet clita kasd. Gubergren +no sea takimata sanctus est. Lorem ipsum dolor sit amet, consetetur +sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore +et dolore magna ali\%quyam erat, sed diam voluptua. At vero eos et +accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, +no sea takimata sanctus est. +\# +.HEADING 1 "Beyond Cage \[em]" "Catching the Midnight Train" +\# +.PP +Lorem ipsum dolor sit amet, consetetur sadipscing elitr. Sed diam +nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna. Ali\%quyam +erat, sed diam voluptua. +.PP +At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita +kasd gubergren no sea takimata. Sanctus est, lorem ipsum dolor sit +amet. Consetetur sadipscing elitr, sed diam nonumy. Eirmod tempor +invidunt ut labore et do\%lo\%re magna ali\%quyam erat. Sed diam voluptua +at vero eos et accusam et justo. +.PP +Duo do\%lo\%res et ea rebum, stet clita kasd gubergren. No sea takimata +sanctus est lorem ipsum dolor sit amet, consetetur sadipscing elitr. +Sed diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna +ali\%quyam. Erat sed diam voluptua at. Vero eos et accusam et justo +duo do\%lo\%res et ea rebum stet. Clita kasd gubergren no sea takimata +sanctus est. +.PP +Nonumy eirmod tempor invidunt, ut labore et do\%lo\%re magna ali\%quyam +erat? At vero eos et accusam et justo duo do\%lo\%res et ea. Rebum stet +clita kasd gubergren no sea takimata sanctus. Est lorem ipsum dolor +amet. Sadipscing\c +.FOOTNOTE +Sadipscing diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna +ali\%quyam erat, sed diam voluptua. +.FOOTNOTE OFF + elitr sed diam nonumy eirmod tempor invidunt. Ut labore et do\%lo\%re +magna ali\%quyam erat, sed diam voluptua. At vero eos et accusam et +justo duo do\%lo\%res et ea rebum. Stet clita kasd gubergren no sea +takimata lorem. Ipsum dolor sit amet, consetetur sadipscing elitr. +Sed diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna. +Ali\%quyam erat, sed diam voluptua. At vero eos et accusam et justo +duo do\%lo\%res et ea rebum. Stet clita kasd gubergren, no sea +takimata sanctus est. +.PP +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed +diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna +ali\%quyam erat, sed diam voluptua. At vero eos et accusam et justo +duo do\%lo\%res et ea rebum. Stet clita kasd gubergren, no sea +takimata sanctus est. +.RIGHT +\*[BD]\&...end of sample article\*[PREV] +.FINIS +.TOC_RV_SWITCH +.TOC +.\" Local Variables: +.\" mode: nroff +.\" End: +.\" vim: filetype=groff: diff --git a/contrib/mom/examples/slide-demo.mom b/contrib/mom/examples/slide-demo.mom new file mode 100644 index 0000000..989ce5a --- /dev/null +++ b/contrib/mom/examples/slide-demo.mom @@ -0,0 +1,438 @@ +.\" -*- mode: text; coding: utf-8; -*- +\# +\# Copyright (C) 2004-2020 Free Software Foundation, Inc. +\# Revised for version 2.5 2021-08. +\# +\# Copying and distribution of this file, with or without modification, +\# are permitted in any medium without royalty provided the copyright +\# notice and this notice are preserved. +\# +.\" Macro for code blocks +.de CODE_BLOCK +. ie \\n[.$] \{\ +. CODE off +. QUOTE off +. CENTER_BLOCK off +. \} +. el \{\ +. CENTER_BLOCK +. QUOTE +. CODE +. \} +.. +.\"---------------------------------------------------------------- +. +.TITLE "Creating slide presentations with gropdf/mom" +.PDF_TITLE "\*[$TITLE]" +. +.DOCTYPE SLIDES \ + ASPECT 16:9 \ + HEADER "Header left" "\*[$TITLE]" "Header right" \ + FOOTER "" "" "\*S[+2]\*[SLIDE#]\*S[-2]" \ + TRANSITION "Box 1 . O" \ + PAUSE "Wipe 1" +. +.PARA_SPACE .75v +.SS +3 +.HYPHENATION off +. +.NEWCOLOR darkred #aa0000 +.NEWCOLOR darkred1 #900000 +.NEWCOLOR blue1 #00007b +.NEWCOLOR blue2 #00006f +.NEWCOLOR code-grey GRAY 0.3 +.XCOLOR cyan4 +.XCOLOR green4 +. +.HEADER_COLOR darkred1 +.HEADER_RULE_COLOR blue1 +.FOOTER_RULE off +. +.COVER_STYLE \ + LEAD +8 \ + COLOR white +.HEADING_STYLE 1 \ + COLOR blue2 +.CODE_STYLE \ + FONT B \ + SIZE 115 \ + COLOR code-grey +.QUOTE_STYLE \ + QUAD LEFT +.CONDENSE 90 +. +.PDF_IMAGE_FRAME "" 1 blue1 +. +.COVERTITLE \ + "Creating slide presentations" \ + "with" \ + "gropdf and mom" +. +.COVER_START_POS 15P +.COVER COVERTITLE +. +.STRING hand \*[darkred]\[rh]\*[black] +. +.\" Make first slide black. +.\" If printing, remove to save ink. +.SLIDE_COLOR black +. +.START +.SLIDE_COLOR off +. +.ADD_SPACE 9p +.IB 8P +. +.HEADING 1 "PDF slides" +.SP .5v +. +.PP +PDF slides are a subset of mom's document processing macros +formatted for presentation mode when viewed in a PDF reader. In +most respects, they behave identically to the default document type +described in mom's html documentation\*[HANG .] +.BR +Differences in the formatting include\*[HANG :] +. +.PAUSE +.LEFT +.LIST +.ITEM .2v +the choice between two aspect ratios, 4:3 or 16:9 +.LIST USER \*[hand] +.ITEM +both fit on A4 or US letter paper sizes when printed +. +.PAUSE +.LIST BACK +.ITEM .2v +type is set centered by default +.LIST USER \*[hand] +.ITEM +this may be changed to left, right, or justified +. +.PAUSE +.LIST BACK +.ITEM .2v +headers and/or footers must be explicitly instantiated +.LIST USER \*[hand] +.ITEM +the left, centre, and right parts must be supplied +by the user +. +.PAUSE +.LIST BACK +.ITEM .2v +slide numbering (pagination) is disabled +.LIST USER \*[hand] +.ITEM +if slide numbering is desired, it must be put in the left, +centre, or right part of a header or footer definition +.QUIT_LISTS +. +.NEWSLIDE +. +.ADD_SPACE 9p +.IB 2P +. +.DOC_QUAD CENTER +. +.HEADING 1 "Pauses and transitions" +.SP .5v +. +.PP +Slides made with mom take advantage of the pause and slide +transition features provided in presentation mode by most +contemporary PDF readers. +.PAUSE +.PP +Pauses and transitions are dynamic and engaging, holding the +viewer's attention while increasing the impact of the content. +.PAUSE +.PP +With pauses, material on a slide can be revealed progressively +with +.BR +a mouse click or by hitting +. +.LIST +.ITEM .5v +Next +.ITEM 2p +PgDown +.ITEM 2p +Spacebar +.LIST off +. +.PAUSE +.PP +The manner in which new material is revealed and new slides +are displayed can be tailored separately for effects like Fade, +Dissolve, Wipe and others, and can be changed on the fly. +. +.NEWSLIDE +. +.PP +Mom slides begin with the macro DOCTYPE SLIDES, where you choose +the aspect ratio and transition effects, and set up headers and +footers\*[HANG .] +.PAUSE +.PP +You may find it convenient to provide a title for the slide +presentation, as the top of the .mom file for these slides +demonstrates\*[HANG :] +. +.SP -1v +.CODE_BLOCK +\*[COND]\&.TITLE "Creating slide presentations with gropdf/mom" +\&.PDF_TITLE "\\*[$TITLE]" +\&.\\" +\&.DOCTYPE SLIDES \\ + ASPECT 16:9 \\ + HEADER "Header left" "\\*[$TITLE]" "Header right" \\ + FOOTER "" "" "\\*S[+2]\\*[SLIDE#]\\*S[-2]" \\ + TRANSITION "Box 1 . O" \\ + PAUSE "Wipe 1"\*[CONDX] +.CODE_BLOCK off +.SP -.5v +. +.PAUSE +.PP +Afterwards, you may make any changes you like to the layout and +style, then enter START. Unlike other mom documents, PRINTSTYLE is +not required\*[HANG .] +. +.NEWSLIDE +. +.ADD_SPACE 9p +.IB -1P+6p +. +.HEADING 1 \ + "The \s[-2]PAUSE\s[0] and \s[-2]NEWSLIDE\s[0] macros" +.SP .5v +. +.PP +Whenever you want a pause before revealing the next material on a +slide, enter the macro PAUSE on a line by itself. If you want a +reveal effect that's different from the current one, you may pass +PAUSE the parameters of the new effect\*[HANG :] +. +.SP -1v +.PAUSE +. +.CODE_BLOCK +\&.PAUSE "Dissolve .4" +.CODE_BLOCK off +. +.PAUSE "Dissolve .4" +Notice that this material dissolves in, whereas before, new material +appeared from left to right. \*[BU6]The new effect stays in force +until you change it again\*[HANG .] +.PAUSE "Wipe 1" +.PP +New slides are introduced with NEWSLIDE. \*[bu6]Transition effects +and parameters may be given to NEWSLIDE\*[HANG :] +.SP -1v +. +.CODE_BLOCK +\&.NEWSLIDE "Blinds .5" +.CODE_BLOCK off +. +.PAUSE +The next slide in this presentation will appear with the Blinds +effect\*[HANG .] +.BR +Consult man gropdf\c +\*[FU2]\*[UP 1p](\*[DOWN 1p]\*[BU2]1\*[UP 1p]\*[BU1])\*[DOWN 1p] +for all the pause/transition effects and their +parameters.\*[BU6]\*[UP 2p]\s[-2]*\s[0] +.SP 4p +.FT I +.PT_SIZE -2 +*Note that not all PDF \*[BU6]viewers support every effect\*[HANG .] +.FT R +.PT_SIZE +2 +. +.NEWSLIDE "Blinds .5" +.SLIDE_COLOR antiquewhite +. +.ADD_SPACE 9p +. +.HEADING 1 "Highlighting items +.SP .5v +.PP +The BOX macro lets you highlight items as they are revealed with +frames and shaded backgrounds\*[HANG .] +.PAUSE "Fade .5" +.BOX SHADED pink INSET 3p +.PP +This item is highlighted with a shaded background\*[HANG .] +.PAUSE +.PP +The highlight moves to each new item as it's revealed\*[HANG .] +.PAUSE +.PP +Highlighting can continue for as many slides as you want\*[HANG .] +.PAUSE +.PP +If there are no pauses on a slide, BOX can be used +.BR +to provide a background for all the items\*[HANG .] +.PAUSE +.PP +The SLIDE_COLOR macro lets you colour +.BR +the whole slide (q.v.)\*[HANG .] +.BOX off +. +.NEWSLIDE "Box 1 . O" +.SLIDE_COLOR off +. +.ADD_SPACE 9p +. +.HEADING 1 "Macros and preprocessors" +.SP .5v +.PP +Slides can make full use of all mom's document processing and +typesetting macros, including preprocessors and image insertion\*[HANG .] +. +.IBX CLEAR +.LS -4 +. +.PAD "\ +\*[FWD 4P+6p]\*[ST1]#\*[ST1X]\ +\*[FWD 2P+6p]\*[ST2]\*[FWD 12P]\\*[ST2X]\ +\*[FWD 3P+9p]\*[ST3]#\*[ST3X]\ +\*[FWD 3P]\*[ST4]#\*[ST4X]\*[FWD 2P]" +. +.ST 1 L +.ST 2 C +.ST 3 C +.ST 4 C +. +.PAUSE "Fade .5" +. +.TAB 1 +.PT_SIZE -1.5 +.CENTER +\*[BD]\*[blue2]\*[DOWN 6p]tbl +.LEFT +.mk +.PT_SIZE -1 +.COLOR blue2 +.TS H BOXED +tab(^) allbox; +c c +n n. +\*[darkred]\s[-.5]\*[DOWN .5p]Year^Mean Temp.\s[0]\*[blue2] +_ +.TH +\*[cyan4]\fB2015^28.3\*[blue2] +\*[cyan4]1998^28.3\*[blue2] +\*[cyan4]1997^28.3\*[blue2] +\*[cyan4]2010^28.1\*[blue2] +\*[cyan4]2002^28.1\*[blue2] +\*[cyan4]2005^28.0\*[blue2] +\*[cyan4]2014^27.9\*[blue2] +\*[cyan4]2009^27.9\*[blue2] +.TE +. +.rt +.PAUSE +. +.TN +.PT_SIZE +1 +\*[FWD 10p]\*[DOWN 6p]pic +.COLOR green4 +.SP 3p +.PS 2 LEFT +A: ellipse wid 0.5 ht 0.5 + arrow color "green4" up 0.2 from A.n + arrow color "green4" up 0.2 right 0.2 from A.ne + arrow color "green4" right 0.2 from A.e + arrow color "green4" down 0.2 right 0.2 from A.se + arrow color "green4" down 0.2 from A.s + arrow color "green4" down 0.2 left 0.2 from A.sw + arrow color "green4" left 0.2 from A.w + arrow color "green4" up 0.2 left 0.2 from A.nw +.PE +. +.rt +.PAUSE +. +.TN +.COLOR blue2 +\*[FWD 1p]\*[DOWN 6p]eqn +.FAMILY T +.PT_SIZE +3 +.LS +.COLOR code-grey +.SP 4P +.EQ +f sub X (x) ^=^ left { + rpile { 0 above 2x above 0 } + ~~lpile { x < 0 above 0 <= x <= 1 above x > 1 } +.EN +. +.rt +.PAUSE +. +.TN +.FAMILY H +.PT_SIZE -3 +.COLOR blue2 +\*[DOWN 6p]pdf image\*[black]\*[PREV] +.SP 2P+6p +.PDF_IMAGE -C penguin.pdf 81p 96p FRAME +.TQ +. +.NEWSLIDE "Box 1 . O" +.ADD_SPACE 5p +.IB 10P +.PT_SIZE +1.5 +. +.HEADING 1 "Printing handouts" +.SP .5v +. +.CODE_STYLE \ + COLOR BLACK \ + SIZE 120 +.PP +Because slides contain pauses, they need a little help on their +way to the printer or they stop printing at the first pause\*[HANG .] +.PAUSE "Wipe 1" +.PP +Setting GROPDF_NOSLIDE=1 before invoking +\[oq]\*[FU4]\*[CODE]\*[COND]pdfmom\*[CONDX]\*[CODE off]\*[FU4]\[cq] +or +\[oq]\*[FU2]\*[CODE]\*[COND]groff\~-Tpdf\*[CONDX]\*[CODE off]\*[FU6]\[cq] +disables the pauses\*[HANG :] +. +.SP -1v +. +.CODE_STYLE \ + COLOR code-grey \ + SIZE 110 +.CODE_BLOCK +\*[COND]GROPDF_NOSLIDE=1 pdfmom <options> slide-file.mom\*[CONDX] +.CODE_BLOCK off +. +.PAUSE +The output may be piped directly to a printer or saved to a file\*[HANG .] +.PAUSE +.PP +See mom's html documentation and the gropdf\c +\*[FU2]\*[UP 1p](\*[DOWN 1p]\*[BU2]1\*[UP 1p]\*[BU1])\*[DOWN 1p] +manpage for complete information concerning slide usage\*[HANG .] +. +.SP 9p +.CENTER_BLOCK +.nr dcl-ind -1 1 +.while \n[dcl-ind]<4 \{\ +. DCL SOLID \n+[dcl-ind]P 9p 9p blue2 +.\} +.CENTER_BLOCK off +.\" Local Variables: +.\" mode: nroff +.\" End: +.\" vim: filetype=groff: diff --git a/contrib/mom/examples/test-mom.sh.in b/contrib/mom/examples/test-mom.sh.in new file mode 100644 index 0000000..ebaba20 --- /dev/null +++ b/contrib/mom/examples/test-mom.sh.in @@ -0,0 +1,92 @@ +#!/bin/sh +# +# Copyright (C) 2018-2020 Free Software Foundation, Inc. +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +builddir="@abs_top_builddir@" +have_urw_fonts="@groff_have_urw_fonts@" +examplesdir="$builddir/contrib/mom/examples" +ret=0 +list=" + letter.pdf + mom-pdf.pdf + mon_premier_doc.pdf + sample_docs.pdf + slide-demo.pdf + typesetting.pdf + copyright-chapter.pdf + copyright-default.pdf + " + +if test "$have_urw_fonts" != "yes"; then + echo "No URW fonts, mom examples cannot be correctly generated" + exit 77 +fi + +for cmd in pdfinfo pdfimages +do + if ! command -v $cmd >/dev/null + then + echo "cannot locate '$cmd' command; skipping" >&2 + exit 77 # skip + fi +done + +# $1: pdf file +# $2: expected number of pages +check_number_pages() +{ + echo "Checking number of pages of $1" + n_pages=`pdfinfo $1 | grep Pages | awk '{ print $2}'` + if test "$n_pages" != "$2"; then + echo " Error: expected $2 pages, found $n_pages pages" + ret=255 + fi +} + +# $1 pdf file +check_has_images() +{ + echo "Checking if $1 has images" + n_lines=`pdfimages -list $1 | wc -l ` + if test $n_lines -le 2; then + echo " no images found" + ret=255 + fi +} + +for k in $list; do + if ! test -f $examplesdir/$k; then + echo "File $k not found" + exit 255 + fi +done + +check_number_pages "$examplesdir/letter.pdf" 1 +check_number_pages "$examplesdir/mom-pdf.pdf" 8 +check_number_pages "$examplesdir/mon_premier_doc.pdf" 5 +check_number_pages "$examplesdir/sample_docs.pdf" 12 +check_number_pages "$examplesdir/slide-demo.pdf" 33 +check_number_pages "$examplesdir/typesetting.pdf" 3 +check_number_pages "$examplesdir/copyright-chapter.pdf" 5 +check_number_pages "$examplesdir/copyright-default.pdf" 5 + +check_has_images "$examplesdir/typesetting.pdf" +check_has_images "$examplesdir/slide-demo.pdf" + +exit $ret diff --git a/contrib/mom/examples/typesetting.mom b/contrib/mom/examples/typesetting.mom new file mode 100644 index 0000000..e273611 --- /dev/null +++ b/contrib/mom/examples/typesetting.mom @@ -0,0 +1,707 @@ +.\" -*- mode: text; coding: utf-8; -*- +\# +\# Copyright 2004-2020 Free Software Foundation, Inc. +\# +\# Copying and distribution of this file, with or without modification, +\# are permitted in any medium without royalty provided the copyright +\# notice and this notice are preserved. +\# +\# Most mom users rely on mom's document processing macros to format +\# their work. The doc processing macros take care of all things +\# typographic and are simple, clear and easy to learn. The kind of +\# "by hand" typesetting this file demonstrates is geared towards +\# professional typographers. Bear in mind, though, that the full +\# power of mom's typesetting capabilities can be brought to bear on +\# document processing as well. +\# +\# Basic page setup +\# +.PAGE 8.5i 11i 1i 1i 1i \" Page size, margins +\# +\# Basic type parameters +\# +.FAMILY T \" Times Roman family +.FT B \" Bold font +.PT_SIZE 12 \" Point size +.LS 14 \" Leading (line spacing) +.LEFT \" Set lines flush left, nofill mode +\# +\# Refinements +\# +.HY \" Hyphenate +.KERN \" Automatic pairwise kerning +.LIGATURES \" Automatic ligature generation +.SMARTQUOTES \" Enable smartquotes +.SS 0 \" No extra space between sentences +\# +.SP |1i-1v \" Advance 1 inch from top of paper to first baseline +Example 1\*[BU 2]: +.ALD .25v \" Advance an extra 1/4 linespace +.UNDERSCORE 3.5p "T\*[BU 4]asting notes using padding, string tabs \ +and multi-columns" +\# +.SP \" Add an extra line space +\# +.FAM H \" Helvetica family +.PT_SIZE 10 +.LS 11 \" New leading +\# +\# The following uses a combination of padding, string tabs, and the +\# FWD escape to set up five tabs with 1-pica gutters stretched over +\# the full line length. +\# +.SILENT \" Don't print the next line +.PAD "\*[ST1]VIN#\*[ST1X]\*[FWD 1P]\*[ST2]ROBE#\*[ST2X]\ +\*[FWD 1P]\*[ST3]NEZ#\*[ST3X]\*[FWD 1P]\*[ST4]BOUCHE#\*[ST4X]\ +\*[FWD 1P]\*[ST5]COMMENTAIRES\*[ST5X]" +.SILENT OFF \" Resume normal printing of text +\# +\# Now that the string tabs have been marked off, we "set" them. +\# +.ST 1 L \" First string tab flush left, nofill (line-for-line) mode +.ST 2 L QUAD \" Remaining tabs are flush left/rag right, fill mode +.ST 3 L QUAD +.ST 4 L QUAD +.ST 5 L QUAD +\# +.TAB 1 \" Call first tab +.UNDERSCORE "VIN" +.TN \" Move to next tab and stay on the same baseline +.UNDERSCORE "ROBE" +.TN \" Ibid +.UNDERSCORE "NEZ" +.TN \" Ibid +.UNDERSCORE "BOUCHE" +.TN \" Ibid +.UNDERSCORE "COMMENTAIRES" +.TQ \" Quit tabs +\# +.ALD 6p \" Advance an extra 6 points +.FT R \" Change font to roman (medium) +.MCO \" Turn multi-column mode on +\# +.TAB 1 \" Notice that this tab gets set line-for-line +\*[IT]Peelee Island \" Set italic +\*[PREV]Gewürztraminer \" Revert to former font (roman) +2000 +(Canada) +.MCR \" Return to top of column +.TAB 2 \" Call tab 2; in multi-column mode, don't use .TN +Jaune pâle. +.MCR +.TB 3 \" Notice that from here on, we use the alias TB instead of TAB +Frais, fruité, ci\%tronné, arômes fortes de lichee et de fruits +tropicaux. +.MCR +.TB 4 +Doux, fruité, bien équilibré avec une bonne acidité. +.MCR +.TB 5 +Bon apéro. Servir avec des plats +.RW .1 \" Reduce Whitespace between letters to tighten this line +indiens ou \%chinois. +.RW 0 \" Back to normal spacing between letters +.BR +Excellent rapport qualité/prix. +.MCX 8p \" Multi-column mode off; advance an extra 8 points +.MCO \" Re-invoke multi-columns for next wine description +.TB 1 +\*[IT]Carau Pujol +\*[ROM]Tannat +1995 +(Uraguay) +.MCR +.TB 2 +Rubis foncé, vio\%lacée, presque opaque. +.MCR +.TB 3 +Belles arômes de fruits foncés (prunes, cerises noires, cassis). +Odeurs tertiares de cuir, cèdre, violets, eucalyptus, avec une trace +exotique de Band-Aid*\*[BU 12]. +\# +\# The \*[BU 12], above, pulls the period back so that it falls +\# underneath the asterisk. \*[BP<n>] could have been used instead +\# if you prefer to use points rather than kern units. +\# +.MCR +.TB 4 +Très rond, tannins mûres et veloutés, avec un long finis fruité et +doucement alcoolique. +.MCR +.TB 5 +Superbe\|! Une aubaine à ne pas manquer. Prêt à boire maintenant. +.MCX 1v \" Multi-columns off; advance an extra linespace +\# +\# Now, an example of a hanging indent. This is excessively fussy +\# from a typographic standpoint in that it hangs the asterisk outside +\# the current left margin so that the text following it lines up with +\# with the text in the tasting notes. Notice that in order to use a +\# hanging indent, you must first set a left indent. +\# +.FT I \" Change font to italic +.PT_SIZE -.5 \" Reduce point size by 1/2 point +.LS -.5 \" Reduce leading by 1/2 point +.JUSTIFY \" Set text justified +\# +\# Now, move the left margin back by the width of an asterisk plus 2 points... +\# +.L_MARGIN -(\w'*'+2p) +\# +\# ...and set a left indent equal to the width of an asterisk plus 2 points +\# +.IL \w'*'+2p +\# +\# Now, set the hanging indent equal to the left indent, effectively +\# pulling the first line of the following text back to the new left +\# margin. Subsequent output lines will be indented by the .IL +\# amount. Notice that when using the \w inline escape, there's no +\# need to append a unit of measure. +\# +.HI \w'*'+2p +*\*[FWD 1p]The term "Band-Aid" means the slightly sweet, vaguely chemical +smell associated with medical-grade plastics. It is often found in +wines from terroirs in South America. Provided a wine has a sufficient +concentration of fruit +.RW .04 \" Tighten the next line slightly, so "lipstick" doesn't hyphenate. +aromas and complex tertiary characteristics, Band-Aid is a Good Thing. +Otherwise, it smells like cheap lipstick. +.RW 0 \" Reset kerning to 0 +\# +\# Notice, above, that although the values for IL and HI are the width +\# of an asterisk plus 2 points, when setting the first line of text +\# (the one with the asterisk at the beginning), we put only 1 point of +\# space after the *. This is to compensate for the fact that in the +\# italic font, the letter T doesn't align visually with the rest of +\# the text. As already noted, this is an extremely fussy example. :) +\# +.IQ CLEAR \" Cancel and clear stored indent values +.L_MARGIN 1i \" Reset left margin to its original value. +\# +.ALD 2P \" Add 2-picas extra space before next example +\# +.FAM T +.FT B +.PT_SIZE 12 +.LS 14 +\# +Example 2: +.ALD .25v +\# +.COMMENT +In the next line, because the string to be underscored must be +enclosed in double-quotes, you can't use the double-quote character +itself around the word "Massaging". We circumvent this by using the +groff inline escapes \[lq] and \[rq] (leftquote and rightquote). +.COMMENT OFF +\# +.UNDERSCORE 3.5p "\[lq]Massaging\[rq] \*[BCK 1p]a passage of rag right text" +.SP \" Add an extra linespace +\# +.PT_SIZE 12.5 +.LS 14 +.PT_SIZE -1 \" Reduce point size by 1 point +Passage using groff spacing defaults +\# +.ALD .5v \" Add an extra 1/2 line space +\# +.PT_SIZE +1 \" Restore point size +.QUAD LEFT \" Set quad left, fill mode +.IB 3P \" Indent 3 picas from both the left and right margins +.FT R +The thousand injuries of Fortunato I had borne as I best could; +but when he ventured upon insult, I vowed revenge. You, who so well +know the nature of my soul, will not suppose, however, that I gave +utterance to a threat. \*[IT]At length\*[PREV] I would be +avenged; this was a point definitively settled\[em]but the very +definitiveness with which it was resolved, precluded the idea of +risk. I must not only punish, but punish with impunity. A +wrong is unredressed when retribution overtakes its redresser. +It is equally unredressed when the avenger fails to make himself +felt as such to him who has done the wrong. +.ALD 6p +\# +\# The next line is set quad right, nofill mode, 1/2 point smaller +\# than the preceding text (using the \*[SIZE <n>] inline escape. +\# +.RIGHT +\*[SIZE -.5]\[em]Edgar Allen Poe, \*[IT]The Cask of Amontillado\*[PREV]\*[SIZE +.5] +.SP \" Extra linespace +.IBQ \" Disable "indent both" +\# +\# The passage above, while acceptable in a longer document, exhibits a +\# few typographic flaws. The shape of the right margin rag exhibits +\# a decidedly "rounded" appearance. The word "I" stands alone at the +\# end of the third line. The space between the 1st and 2nd sentences +\# ("...revenge. You...") is too large, owing to the letter "Y" that +\# begins the 2nd sentence. The spacing between "A wrong..." (line 6) +\# is equally too large because of the way "A" and "w" fit together. +\# The em-dash before Edgar isn't vertically centered with the letter "E". +\# And so on. The most important correction below is fixing the rag +\# so that longer and shorter lines alternate. This is accomplished by +\# manually breaking lines and then slightly lengthening and shortening +\# them until a pleasing rag is achieved. The remainder of the little +\# flaws are fixed with inline escapes. +\# +.FT B +.PT_SIZE -1 +.LEFT +The same passage, \*[BU4]"massaged" +\# +.ALD .5v +\# +.FT R +.PT_SIZE +1 +.QUAD LEFT +.HY OFF \" Turn automatic hyphenation off +.BR_AT_LINE_KERN \" Automatically insert a line break (.BR) at each .RW and .EW +.WS +1 \" Increase word space slightly +.IB \" Turn "indent both" back on; values are the same as before +\# +The thousand injuries of Fortunato I had borne as I best could; +but when he ventured upon insult, I \*[BU2]vowed revenge. +\*[BU4]Y\*[BU6]ou, \*[BU4]who so \*[BU2]well know the nature +.EW .2 +of my soul, \*[BU2]will not suppose, however, that I gave utterance +to a threat. \*[IT]At +.EW .2 +length\*[PREV] I would be avenged; this was a point definitively +settled\[em]but the +.EW .2 +v\*[BU1]ery definitiveness with which it was resolved, precluded the +idea of risk. +.EW 0 +I must not only punish, but punish with impunity. A \*[BCK 1p]wrong +is unredressed +.EW .1 +when retribution overtakes its redresser. It is equally unredressed +when the +.RW .1 +avenger fails to make himself felt as such to him \*[BU 2]who has +done the wrong. +.RW 0 \" Restore normal kerning +.WS +0 \" Restore normal wordspacing +.ALD 6p +.PT_SIZE -.5 +.RIGHT +\*[UP 1.5p]\[em]\*[DOWN 1.5p]\*[BCK 1p]Edgar \*[BCK 1p]Allen Poe, \ +\*[IT]The Cask of Amontillado\*[PREV] +.IQ CLEAR \" Cancel and clear stored values of all indents +\# +.NEWPAGE \" Start a new page +.T_MARGIN 1i \" Set top margin to 1i (approx. equivalent to .ALD 1i-1v above) +\# +.FAM T +.FT B +.PT_SIZE 12 +.LS 14 +.LEFT +\# +Example 3: +.ALD .25v +.UNDERSCORE 3.5p "A \*[BU2]recipe for enumerated lists using indents" +.SP .5v \" Add an extra half line space +.ie '\*[.T]'ps' \ +.FAM N \" New Century Schoolbook family +.el .if '\*[.T]'pdf' \ +.FAM U-N +.FT R +.PT_SIZE 11 +.LS 13 +.HY \" Turn hyphenation back on +.JUSTIFY \" Justify text +This example demonstrates the use of left and hanging indents for +simple enumerated lists. Nested lists are possible, as the example +shows; however, the more complex the nesting, the wiser it becomes +to use (string) tabs, as seen in Example 4. +.DBX .5 0 \n[.l]u 2P+9p \" Draw box; \n[.l]u means "the current line length" +.IB 6p \" Indent from both left and right margins +.ALD 14p +\*[BD]Please note: mom\*[PREV] has macros that allow you to set +enumerated lists automatically. These examples merely show hanging +indents and string tabs in use. +\# +.ALD 9p +.JUSTIFY \" Justify text +.IL \w'\0.\0' \" Establish a left indent equal to 2 figure spaces plus a period. +.HI \w'\0.\0' \" Establish a hanging indent equal to the left indent. +.ALD 6p +\# +\# +1.\0This is the first item in the list. N\*[BU2]otice how the first line +"hangs" back from the remaining text, which is otherwise +indented by the width of by two figure-spaces (digit-width +spaces) and a period. +.BR +.HI \" Notice that HI doesn't require an argument once the value's set +.ALD 6p +2.\0This is the second item in the list. As with the above item, +notice the use of the \*[BU8]\\0 escape sequence in the input +text. It's there to ensure that the space after the number/period +combination always remains the same (i.e. doesn't stretch when the +line is justified). That way, the text of each item always lines up +perfectly. +\# +.COMMENT +Now we're going to set a bullet-point list, indented from the text +above by 1 pica. IL arguments are always added to whatever value +is in already effect for IL, hence all we have to do is tell mom to +indent (from the current left indent) 1 pica plus the width of the +bullet character, \[bu]. \*[FWD 3p] puts three points of space after +the bullet so that the bullet and the text are visually separated. +.COMMENT OFF +\# +\# +.IL 1P+\w'\[bu]\*[FWD 3p]' +\# +\# Hanging indents are always relative to the current left indent. +\# The additional 1-pica indent, above, already having been taken +\# care of, we only want to hang the first lines of bullet list +\# items back by the width of the bullet character plus its 3 extra +\# points of space. +\# +.ALD 6p +.HI \w'\[bu]\*[FWD 3p]' +\*[DOWN 1p]\[bu]\*[UP 1p]\*[FWD 3p]This is the first line of a +sublist with bullets. N\*[BU2]otice how the first line (the one +with the bullet) is indented exactly one pica from the text of the +list item above it, while the remaining lines align with the left +indent we set above. +.ALD 6p +.HI +\*[DOWN 1p]\[bu]\*[UP 1p]\*[FWD 3p]This is the second item of the +sublist with bullets. \*[BU4]We could go on indefinitely, but let's +go back to the top level (numbered) list... +\# +\# The easiest way to return to a previous indent value is by +\# subtraction. The argument to IL, above, was 1P+\w'[bu]\*[FWD +\# 3p]', so we just reverse it by putting a minus sign in front. +\# The parentheses are required for groff to evaluate the expression +\# properly. +\# +.IL -(1P+\w'\[bu]\*[FWD 3p]') +.HI \w'\0.\0' \" Reset hanging indent for use with numbered items. +.ALD 6p +3.\0...and here we are. +.IQ CLEAR \" Don't forget to cancel and/or clear indents! +\# +.FAM T +.FT B +.PT_SIZE 12 +.LS 14 +.LEFT +.SP +\# +Example 4: +.ALD .25v +.UNDERSCORE 3.5p "A \*[BU 2]recipe for nested lists using string tabs" +.SP .5v +.ie '\*[.T]'ps' \ +.FAM N +.el .if '\*[.T]'pdf' \ +.FAM U-N +.FT R +.PT_SIZE 11 +.LS 13 +.JUSTIFY +Although setting up string tabs is a bit more complex than setting +up indents, it's \*[BU 3]well worth the effort, especially for +nested lists. +.ALD 6p +\# +.COMMENT +The PAD line, below, sets up two string tabs. The first (ST1) is +exactly the length of two figure spaces and a period. The second +(ST2) is simply "the remainder of the line." +.COMMENT OFF +\# +.SILENT \" Don't print any of this +.PAD "\*[ST1]\0.\0\*[ST1X]\*[ST2]#\*[ST2X]" +.ST 1 L \" String tabs must be "set" after being marked off in a line +.ST 2 J \" ST 1 will be set flush left, nofill; ST 2 will be justified. +.SILENT OFF \" Restore printing +\# +.TB 1 +1.\c +.TN \" Use .TN so text stays on the same baseline +This is the first item in the list. N\*[BU 2]otice how, just as in +Example 3, the first line hangs back from the remaining text, which +is otherwise +indented. +.ALD 6p +.TB 1 +2.\c +.TN +This is the second item in the list. N\*[BU 2]otice that when +setting "lists" with tabs, there's no need to use the \*[BU 8]\\0 +escape sequence after the number/period combination in the input +text. +\# +.COMMENT +Now, set up the indented bullet-point sublist. The PAD line +says: move forward 12 points (1 pica), then mark off a string +tab (ST3) that's the length of the bullet character; move forward +another three points, then make the next string tab (ST4) the +length of remainder of the line. +.COMMENT OFF +\# +.SILENT +.PAD "\*[FWD 12p]\*[ST3]\[bu]\*[ST3X]\*[FWD 3p]\*[ST4]#\*[ST4X]" +.ST 3 L +.ST 4 J +.SILENT OFF +.ALD 6p +.TB 3 +\*[DOWN 1p]\[bu]\*[UP 1p]\c +.TN +This is the first line of a sublist with bullets. N\*[BU2]otice +how the bullets and the text line up exactly the same as in Example +3. +.ALD 6p +.TB 3 +\*[DOWN 1p]\[bu]\*[UP 1p]\c +.TN +This is the second item of the sublist with bullets. For the fun of +it, lets add in an +.SPREAD +en-dashed sub-sublist. +.BR \" We're in fill mode right now, so you must terminate the line with BR +\# +.SILENT +.PAD "\*[FWD 12p]\*[ST5]\[en]\*[ST5X]\*[FWD 4p]\*[ST6]#\*[ST6X]" +.ST 5 L +.ST 6 J +.SILENT OFF +.ALD 6p +.TB 5 +\*[UP .75p]\[en]\*[DOWN .75p]\c +.TN +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam +nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam +erat, sed diam voluptua. +.ALD 6p +.TB 5 +\*[UP .75p]\[en]\*[DOWN .75p]\c +.TN +At \*[BU 3]vero eos et accusam et justo duo dolores et ea rebum. +Stet clita kasd gubergren, no sea takimata sanctus est lorem ipsum +dolor sit amet. +.ALD 6p +.TB 1 +3.\c +.TN +And here we are, back at the top-level numbered list with a minimum +of muss and fuss, +.ALD 6p +.TB 1 +4.\c +.TN +Generally speaking, once you get the hang of string tabs and the +\*[BD]PAD\*[PREV] macro, you'll find setting up complex indenting +structures easier than with the indent macros. +.TQ +\# +.NEWPAGE +.FAM T +.FT B +.PT_SIZE 12 +.LS 14 +.RLD 2p +.LEFT +\# +Example 5: +.ALD .25v +.UNDERSCORE 3.5p "Word spacing" +.ALD 8p +.ie '\*[.T]'ps' \ +.FAM P \" Palatino family +.el .if '\*[.T]'pdf' \ +.FAM U-P +.PT_SIZE 11 +.LS 14 +\# +\# The "label" lines for the following are set in Helvetica +\# bold, one point smaller than the examples themselves. This +\# demonstrates the use of the groff inline escape \f[...] to change +\# both family and font inline. It also shows using the mom inline +\# \*S[...], which is an alternate form of the inline, \*[SIZE <n>] +\# +\f[HB]\*S[-1]Normal word spacing\*S[+1]\*[PREV] +.FT R +N\*[BU1]o\*[BU1]w \*[BU1]is the time for all good men to come to the aid of the party. +.ALD 4p +\f[HB]\*S[-1]Word spacing adjusted by \*[UP 1p]\*[BU3]+\*[DOWN 1p]\*[BU1]2\*S[+1]\*[PREV] +.FT R +.WS +2 +N\*[BU1]o\*[BU1]w \*[BU1]is the time for all good men to come to the aid of the party. +.WS DEFAULT +.ALD 4p +\f[HB]\*S[-1]Word spacing adjusted by \*[UP 1p]\*[BU3]+\*[DOWN 1p]4\*S[+1]\*[PREV] +.FT R +.WS +4 +N\*[BU1]o\*[BU1]w \*[BU1]is the time for all good men to come to the aid of the party. +.WS DEFAULT +.ALD 4p +\f[HB]\*S[-1]Word spacing adjusted by \*[UP 1p]\*[BU3]+\*[DOWN 1p]6\*S[+1]\*[PREV] +.FT R +.WS +6 +N\*[BU1]o\*[BU1]w \*[BU1]is the time for all good men to come to the aid of the party. +.WS DEFAULT +.SP 1.5v +\# +.FAM T +.FT B +.PT_SIZE 12 +.LS 14 +\# +.LEFT +Example 6: +.ALD .25v +.UNDERSCORE 3.5p "Line kerning" +.ALD 8p +.ie '\*[.T]'ps' \ +.FAM P \" Palatino family +.el .if '\*[.T]'pdf' \ +.FAM U-P +.FT R +.PT_SIZE 11 +.LS 15 +\# +\# Here, we set up some tabs so the examples can go into facing columns. +\# +.TAB_SET 1 0 19.5P L +.TAB_SET 2 19.5P 19.5P L +\# +.MCO \" Turn multi-columns on +.TB 1 +\f[HB]\*S[-1]Unkerned line\*S[+1]\*[PREV] +.FT R +"But this is \*[IT]important!\/"\*[PREV]she exclaimed. +.ALD 4p +\f[HB]\*S[-1]Line "tightened" \[en] .RW .1\*S[+1]\*[PREV] +.RW .1 +"But this is \*[IT]important!\/"\*[PREV]she exclaimed. +.ALD 4p +\# +\# In the next line, notice that because it uses a different family +\# (Helvetica instead of Palatino), the RW macro doesn't affect it. +\# +\f[HB]\*S[-1]Line "tightened" \[en] .RW .2\*S[+1]\*[PREV] +.RW .2 +"But this is \*[IT]important!\/"\*[PREV]she exclaimed. +.ALD 4p +\f[HB]\*S[-1]Line "tightened" \[en] .RW .3\*S[+1]\*[PREV] +.RW .3 +"But this is \*[IT]important!\/"\*[PREV]she exclaimed. +.MCR +.TB 2 +\f[HB]\*S[-1]Unkerned line\*S[+1]\*[PREV] +"But this is \*[IT]important!\/"\*[PREV]she exclaimed. +.ALD 4p +\f[HB]\*S[-1]Line "loosened" \[en] .EW .1\*S[+1]\*[PREV] +.EW .1 +"But this is \*[IT]important!\/"\*[PREV]she exclaimed. +.ALD 4p +\f[HB]\*S[-1]Line "loosened" \[en] .EW .2\*S[+1]\*[PREV] +.EW .2 +"But this is \*[IT]important!\/"\*[PREV]she exclaimed. +.ALD 4p +\f[HB]\*S[-1]Line "loosened" \[en] .EW .3\*S[+1]\*[PREV] +.EW .3 +"But this is \*[IT]important!\/"\*[PREV]she exclaimed. +.MCX 1.5v +.EW 0 +\# +.FAM T +.FT B +.PT_SIZE 12 +.LS 14 +.LEFT +\# +Example 7: +.ALD .25v +.UNDERSCORE 3.5p "Cutaround using left\*[FU 2]/right indents, \ +multi columns and a dropcap" +.SP +\# +.FT R +.PT_SIZE 11 +.LS 12 +.BR_AT_LINE_KERN OFF \" In justified text, it's best to have this OFF +\# +.TAB_SET 1 0 18.5P J +.TAB_SET 2 20.5P 18.5P J +.MCO +.ALD 5P+9p +\# +\# The little picture of tux. +\# +.if '\*[.T]'pdf' .PDF_IMAGE penguin.pdf 81p 96p +.if '\*[.T]'ps' .PSPIC penguin.ps 81p 96p +.MCR +.TAB 1 +.XCOLOR red \" Initialize the X11 color, red +.DROPCAP_COLOR red +.DROPCAP_FONT B +.DROPCAP L 3 COND 80 \" i.e. the letter L dropped 3 lines, condensed to 80% of its normal width +.EW .2 +orem ipsum dolor sit amet, consetetur sa\%dip\%scing elitr, sed diam +nonumy eir\%mod tempor invidunt ut labore et dolore magna aliquyam +erat, sed diam voluptua. +.EW 0 +.TI 1P +At vero eos et accusam et justo duo dolores et ea rebum. Stet clita +kasd gubergren, no sea taki- +.SPREAD \" Force justify preceding line before starting indent +.IR 3.5P +kimata sanctus est lorem ipsum dolor sit amet. Lorem ipsum dolor +sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod +tempor. +.EW .2 +.TI +Invidunt ut labore et dolore magna ali\%qu\%yam erat, sed diam +voluptua. At +.EW 0 +vero eos et accusam et justo duo dolores et ea rebum. +.TI +Stet clita kasd gubergren, no sea ta- +.SPREAD \" Force justify preceding line before quitting indent +.IRQ +kimata sanctus est lorem ipsum dolor sit amet. Lorem ipsum dolor +sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor +in\%vi\%dunt ut labore et dolore magna aliquyam erat. Sed diam +voluptua, at vero eos et accusam et justo duo +.SPREAD +.EW .3 +dolores et ea rebum. Stet clita no kasd guber- +.SPREAD +.MCR +.TB 2 +gren, no sea takimata sanctus est lorem ipsum +.EW 0 +dolor sit amet. Consetetur sadipscing elitr, sed diam nonumy eirmod +tempor invidunt ut labore et dolore. +.TI +Magna aliquyam erat, sed diam voluptua, at vero eos et accusam. Et +justo duo dolores et ea +.SPREAD +.IL 3.5P +rebum, stet clita kasd gubergren. No sea takimata sanctus est, +lorem ipsum dolor sit amet. +.TI +Sit amet, consetetur sadipscing elitr, sed diam. Nonumy eirmod +tempor in\%vi- +.EW .3 +dunt ut labore et dolore magna. Ali- +.EW 0 +quyam erat sed diam voluptua. At vero eos et accusam et justo duo +dolores et ea rebum stet. +.ILQ +.TI +Dolores et ea rebum stet clita kasd gubergren, no sea takimata +sanctus. Sadipscing elitr sed diam, nonumy eirmod tempor, invidunt +ut labore et dolore magna aliquyam erat. Sed diam voluptua, at vero +eos et accusam et justo duo dolores et ea rebum. +.\" Local Variables: +.\" mode: nroff +.\" End: +.\" vim: filetype=groff: diff --git a/contrib/mom/groff_mom.7.man b/contrib/mom/groff_mom.7.man new file mode 100644 index 0000000..3872b8f --- /dev/null +++ b/contrib/mom/groff_mom.7.man @@ -0,0 +1,3427 @@ +.TH groff_mom @MAN7EXT@ "@MDATE@" "groff @VERSION@" +.SH Name +groff_mom \- modern macros for document composition with GNU +.I roff +. +. +.\" ==================================================================== +.\" Legal Terms +.\" ==================================================================== +.\" +.\" Copyright (C) 2002-2020 Free Software Foundation, Inc. +.\" +.\" This file is part of mom, which is part of groff, the GNU roff +.\" type-setting system. +.\" +.\" This program is free software: you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License as published by +.\" the Free Software Foundation, either version 3 of the License, or +.\" (at your option) any later version. +.\" +.\" This program is distributed in the hope that it will be useful, but +.\" WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +.\" General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program. If not, see +.\" <http://www.gnu.org/licenses/>. +. +. +.\" Save and disable compatibility mode (for, e.g., Solaris 10/11). +.do nr *groff_groff_mom_7_man_C \n[.cp] +.cp 0 +. +.\" Define fallback for groff 1.23's MR macro if the system lacks it. +.nr do-fallback 0 +.if !\n(.f .nr do-fallback 1 \" mandoc +.if \n(.g .if !d MR .nr do-fallback 1 \" older groff +.if !\n(.g .nr do-fallback 1 \" non-groff *roff +.if \n[do-fallback] \{\ +. de MR +. ie \\n(.$=1 \ +. I \%\\$1 +. el \ +. IR \%\\$1 (\\$2)\\$3 +. . +.\} +.rr do-fallback +. +. +.\" ==================================================================== +.\" Setup +.\" ==================================================================== +. +.hw line-space +. +. +.\" ==================================================================== +.\" .FONT (<font name> <text> [<font name> <text> ...]) +.\" +.\" Print in different fonts: R, I, B, CR, CI, CB +.\" +.de FONT +. if (\\n[.$] = 0) \{\ +. nop \&\f[P]\& +. return +. \} +. ds result \& +. while (\\n[.$] >= 2) \{\ +. as result \,\f[\\$1]\\$2 +. if !"\\$1"P" .as result \f[P]\"" +. shift 2 +. \} +. if (\\n[.$] = 1) .as result \,\f[\\$1] +. nh +. nop \\*[result]\& +. rm result +. hy \\n[HY] +.. +. +. +.\" ==================================================================== +.SH Synopsis +.\" ==================================================================== +. +.SY groff +.B \-mom +.RI [ option\~ .\|.\|.\&] +.RI [ file\~ .\|.\|.] +. +.SY groff +.B "\-m mom" +.RI [ option\~ .\|.\|.\&] +.RI [ file\~ .\|.\|.] +.YS +. +. +.\" ==================================================================== +.SH Description +.\" ==================================================================== +. +.I mom +is a macro set for +.IR groff , +designed primarily to prepare documents for PDF and PostScript output. +. +. +.I mom +provides macros in two categories: typesetting +and document processing. +. +The former provide access to +.IR groff 's +typesetting capabilities in ways that are simpler to master than +.IR groff 's +requests and escape sequences. +. +The latter provide highly customizable markup tags that allow the user +to design and output professional-looking documents with a minimum of +typesetting intervention. +. +. +.P +Files processed with +.MR pdfmom @MAN1EXT@ +produce PDF documents. +. +The documents include a PDF outline that appears in the navigation pane +panel of document viewers, +and may contain clickable internal and external links. +. +.P +Normally. +.IR groff 's +native PDF driver, +.MR gropdf @MAN1EXT@ , +is used to generate the output. +. +When +.I pdfmom +is given the +.RB \[lq] "\-T ps" \[rq] +option, +it still produces PDF, +but processing is delegated to +.IR pdfroff , +which uses +.IR groff 's +PostScript driver, +.MR grops @MAN1EXT@ . +. +Not all PDF features are available when +.B \-T ps +is given; +its primary use is to allow processing of files with embedded PostScript +images. +.\" XXX: but we have PDFPIC now...so -Tps is necessary only for people +.\" who want to avoid use of unsafe mode? +. +. +.P +Files processed with +.B groff \-mom +(or +.BR "\-m mom" ) +format for the device specified with the +.B \-T +option. +. +(In this installation, +.B @DEVICE@ +is the default output device.) +. +. +.P +.I mom +comes with her own comprehensive documentation in HTML. +. +A PDF manual, +\[lq]Producing PDFs with +.I groff +and +.IR mom \[rq], +discusses preparation of PDF documents with +.I mom +in detail. +. +. +.\" ==================================================================== +.SH Files +.\" ==================================================================== +. +.TP +.I @MACRODIR@/\:mom.tmac +is a wrapper enabling the package to be loaded with +.RB \[lq] "groff \-m mom" \[rq]. +. +. +.TP +.I @MACRODIR@/\:om.tmac +implements the package. +. +. +.TP +.I @HTMLDOCDIR@/\:mom/\:toc.html +is the entry point to the HTML documentation. +. +. +.TP +.I @PDFDOCDIR@/\:mom\-pdf.pdf +is \[lq]Producing PDFs with +.I groff +and +.IR mom \[rq], +by Deri James and Peter Schaffter. +. +. +.TP +.IR @EXAMPLEDIR@/\:mom/\: * .mom +are examples of +.I mom +usage. +. +. +.\" ==================================================================== +.SH Reference +.\" ==================================================================== +. +.\" ==================================================================== +.SS "Escape sequences" +.\" ==================================================================== +. +.TP +.FONT B \[rs]*[ I <colorname> B ] +begin using an initialized colour inline +. +. +.TP +.FONT B \[rs]*[BCK I " n" B ] +move backward in a line +. +. +.TP +.B \[rs]*[BOLDER] +invoke pseudo bold inline (related to macro +.BR .SETBOLDER ) +. +. +.TP +.B \[rs]*[BOLDERX] +off pseudo bold inline (related to macro +.BR .SETBOLDER ) +. +. +.TP +.FONT B \[rs]*[BU I " n" B ] +move characters pairs closer together inline (related to macro +.BR \%.KERN ) +. +. +.TP +.B \[rs]*[COND] +invoke pseudo condensing inline (related to macro +.BR \%.CONDENSE ) +. +. +.TP +.B \[rs]*[CONDX] +off pseudo condensing inline (related to macro +.BR \%.CONDENSE ) +. +. +.TP +.FONT B \[rs]*[CONDSUP] R .\|.\|. B \[rs]*[CONDSUPX] +pseudo-condensed superscript +. +. +.TP +.FONT B \[rs]*[DOWN I " n" B ] +temporarily move downward in a line +. +. +.TP +.B \[rs]*[EN\-MARK] +mark initial line of a range of line numbers (for use with line +numbered endnotes) +. +. +.TP +.B \[rs]*[EXT] +invoke pseudo extending inline (related to macro +.BR \%.EXTEND ) +. +. +.TP +.B \[rs]*[EXTX] +off pseudo condensing inline (related to macro +.BR \%.EXTEND ) +. +. +.TP +.FONT B \[rs]*[EXTSUP] R .\|.\|. B \[rs]*[EXTSUPX] +pseudo extended superscript +. +. +.TP +.FONT B \[rs]*[FU I " n" B ] +move characters pairs further apart inline (related to macro +.BR \%.KERN ) +. +. +.TP +.FONT B \[rs]*[FWD I " n" B ] +move forward in a line +. +. +.TP +.B \[rs]*[LEADER] +insert leaders at the end of a line +. +. +.TP +.B \[rs]*[RULE] +draw a full measure rule +. +. +.TP +.FONT B \[rs]*[SIZE I " n" B ] +change the point size inline (related to macro +.BR \%.PT_SIZE ) +. +. +.TP +.B \[rs]*[SLANT] +invoke pseudo italic inline (related to macro +.BR \%.SETSLANT ) +. +. +.TP +.B \[rs]*[SLANTX] +off pseudo italic inline (related to macro +.BR \%.SETSLANT ) +. +. +.TP +.FONT B \[rs]*[ST I <n> B ] R .\|.\|. B \[rs]*[ST I <n> B X] +string tabs (mark tab positions inline) +. +. +.TP +.FONT B \[rs]*[SUP] R .\|.\|. B \[rs]*[SUPX] +superscript +. +. +.TP +.B \[rs]*[TB+] +inline escape for +.B .TN +.RI ( "Tab Next" ) +. +. +.TP +.FONT B \[rs]*[UL] R .\|.\|. B \[rs]*[ULX] +invoke underlining inline (fixed width fonts only) +. +. +.TP +.FONT B \[rs]*[UP I " n" B ] +temporarily move upward in a line +. +. +.\" ==================================================================== +.SS Macros +.\" ==================================================================== +. +.TP +.B .AUTOLEAD +set the linespacing relative to the point size +. +. +.TP +.B .B_MARGIN +set a bottom margin +. +. +.TP +.B .BR +break a justified line +. +. +.TP +.B .CENTER +set line-by-line quad centre +. +. +.TP +.B .CONDENSE +set the amount to pseudo condense +. +. +.TP +.B .EL +break a line without advancing on the page +. +. +.TP +.B .EXTEND +set the amount to pseudo extend +. +. +.TP +.B .FALLBACK_FONT +establish a fallback font (for missing fonts) +. +. +.TP +.B .FAM +alias to +.B .FAMILY +. +. +.TP +.BI ".FAMILY " <family> +set the +.I family type +. +. +.TP +.B .FT +set the font style (roman, italic, etc.) +. +. +.TP +.BI ".HI [" " <measure> " ] +hanging indent +. +. +.TP +.B .HY +automatic hyphenation on/off +. +. +.TP +.B .HY_SET +set automatic hyphenation parameters +. +. +.TP +.BI ".IB [" " <left measure> <right measure> " ] +indent both +. +. +.TP +.B .IBX [ CLEAR ] +exit indent both +. +. +.TP +.BI ".IL [" " <measure> " ] +indent left +. +. +.TP +.B .ILX [ CLEAR ] +exit indent left +. +. +.TP +.B .IQ [ CLEAR ] +quit any/all indents +. +. +.TP +.BI ".IR [" " <measure> " ] +indent right +. +. +.TP +.B .IRX [ CLEAR ] +exit indent right +. +. +.TP +.B .JUSTIFY +justify text to both margins +. +. +.TP +.B .KERN +automatic character pair kerning on/off +. +. +.TP +.B .L_MARGIN +set a left margin (page offset) +. +. +.TP +.B .LEFT +set line-by-line quad left +. +. +.TP +.B .LL +set a line length +. +. +.TP +.B .LS +set a linespacing (leading) +. +. +.TP +.B .PAGE +set explicit page dimensions and margins +. +. +.TP +.B .PAGEWIDTH +set a custom page width +. +. +.TP +.B .PAGELENGTH +set a custom page length +. +. +.TP +.BI .PAPER " <paper_type>" +set common paper sizes (letter, A4, etc) +. +. +.TP +.B .PT_SIZE +set the point size +. +. +.TP +.B .QUAD +"justify" text left, centre, or right +. +. +.TP +.B .R_MARGIN +set a right margin +. +. +.TP +.B .RIGHT +set line-by-line quad right +. +. +.TP +.B .SETBOLDER +set the amount of emboldening +. +. +.TP +.B .SETSLANT +set the degree of slant +. +. +.TP +.B .SPREAD +force justify a line +. +. +.TP +.B .SS +set the sentence space size +. +. +.TP +.B .T_MARGIN +set a top margin +. +. +.TP +.BI ".TI [" " <measure> " ] +temporary left indent +. +. +.TP +.B .WS +set the minimum word space size +. +. +.\" ==================================================================== +.SH "Documentation of details" +.\" ==================================================================== +. +.\" ==================================================================== +.SS "Details of inline escape sequences in alphabetical order" +.\" ==================================================================== +. +.TP +.FONT B \[rs]*[ I <colorname> B ] +begin using an initialized colour inline +. +. +.TP +.FONT B \[rs]*[BCK I " n" B ] +move backward in a line +. +. +.\" ==================================================================== +.\" BOLDER +.\" ==================================================================== +.TP +.B \[rs]*[BOLDER] +.TQ +.B \[rs]*[BOLDERX] +Emboldening on/off +. +.RS +. +.P +.B \[rs]*[BOLDER] +begins emboldening type. +. +.B \[rs]*[BOLDERX] +turns the feature off. +. +Both are inline escape sequences; +therefore, +they should not appear as separate lines, +but rather be embedded in text lines, like this: +.RS +.EX +.FONT R "Not " B \[rs]*[BOLDER] R everything B \[rs]*[BOLDERX] \ +R " is as it seems." +.EE +.RE +. +.P +Alternatively, if you wanted the whole line emboldened, you should do +.RS +.EX +.FONT B \[rs]*[BOLDER] R "Not everything is as it seems." \ +B \[rs]*[BOLDERX] +.EE +.RE +. +Once +.B \[rs]*[BOLDER] +is invoked, it remains in effect until turned off. +. +.P +Note: If you're using the document processing macros with +.BR "\%.PRINTSTYLE \%TYPEWRITE" , +.I mom +ignores +.B \[rs]*[BOLDER] +requests. +. +.RE +. +. +.\" ==================================================================== +.\" BU +.\" ==================================================================== +.TP +.FONT B \[rs]*[BU I " n" B ] +move characters pairs closer together inline (related to macro +.BR \%.KERN ) +. +. +.\" ==================================================================== +.\" COND +.\" ==================================================================== +.TP +.B \[rs]*[COND] +.TQ +.B \[rs]*[CONDX] +Pseudo-condensing on/off +. +.RS +. +.P +.B \[rs]*[COND] +begins pseudo-condensing type. +. +.B \[rs]*[CONDX] +turns the feature off. +. +Both are inline escape sequences; +therefore, +they should not appear as separate lines, +but rather be embedded in text lines, like this: +.RS +.EX +.FONT B \[rs]*[COND] I "Not everything is as it seems." B \[rs]*[CONDX] +.EE +.RE +.B \%\[rs]*[COND] +remains in effect until you turn it off with +.BR \%\[rs]*[CONDX] . +. +.P +IMPORTANT: You must turn +.B \%\[rs]*[COND] +off before making any changes to the point size of your type, either +via the +.B \%.PT_SIZE +macro or with the +.B \[rs]s +inline escape sequence. +. +If you wish the new point size to be pseudo-condensed, simply reinvoke +.B \%\[rs]*[COND] +afterward. +. +Equally, +.B \%\[rs]*[COND] +must be turned off before changing the condense percentage with +.BR \%.CONDENSE . +. +.P +Note: If you're using the document processing macros with +.BR "\%.PRINTSTYLE \%TYPEWRITE" , +.I mom +ignores +.B \%\[rs]*[COND] +requests. +. +.RE +. +. +.\" ==================================================================== +.\" CONDSUP +.\" ==================================================================== +.TP +.FONT B \[rs]*[CONDSUP] R .\|.\|. B \[rs]*[CONDSUPX] +pseudo-condensed superscript +. +. +.\" ==================================================================== +.\" DOWN +.\" ==================================================================== +.TP +.FONT B \[rs]*[DOWN I " n" B ] +temporarily move downward in a line +. +. +.\" ==================================================================== +.\" EN-MARK +.\" ==================================================================== +.TP +.B \[rs]*[EN\-MARK] +mark initial line of a range of line numbers (for use with line +numbered endnotes) +. +. +.\" ==================================================================== +.\" EXT +.\" ==================================================================== +.TP +.B \[rs]*[EXT] +.TQ +.B \[rs]*[EXTX] +Pseudo-extending on/off +. +.RS +. +.P +.B \[rs]*[EXT] +begins pseudo-extending type. +. +.B \[rs]*[EXTX] +turns the feature off. +. +Both are inline escape sequences; +therefore, +they should not appear as separate lines, +but rather be embedded in text lines, like this: +.RS +.EX +.FONT B \[rs]*[EXT] I "Not everything is as it seems." B \[rs]*[EXTX] +.EE +.RE +.B \[rs]*[EXT] +remains in effect until you turn it off with +.BR \[rs]*[EXTX] . +. +.P +IMPORTANT: You must turn +.B \%\[rs]*[EXT] +off before making any changes to the point size of your type, either +via the +.B \%.PT_SIZE +macro or with the +.B \[rs]s +inline escape sequence. +. +If you wish the new point size to be +.IR \%pseudo-extended , +simply reinvoke +.B \%\[rs]*[EXT] +afterward. +. +Equally, +.B \%\[rs]*[EXT] +must be turned off before changing the extend percentage with +.BR \%.EXTEND . +. +.P +Note: If you are using the document processing macros with +.BR "\%.PRINTSTYLE \%TYPEWRITE" , +.I mom +ignores +.B \%\[rs]*[EXT] +requests. +. +.RE +. +. +.\" ==================================================================== +.\" EXTSUP +.\" ==================================================================== +.TP +.FONT B \[rs]*[EXTSUP] R .\|.\|. B \[rs]*[EXTSUPX] +pseudo extended superscript +. +. +.\" ==================================================================== +.\" FU +.\" ==================================================================== +.TP +.FONT B \[rs]*[FU I " n" B ] +move characters pairs further apart inline (related to macro +.BR .KERN ) +. +. +.\" ==================================================================== +.\" FWD +.\" ==================================================================== +.TP +.FONT B \[rs]*[FWD I " n" B ] +move forward in a line +. +. +.\" ==================================================================== +.\" LEADER +.\" ==================================================================== +.TP +.B \[rs]*[LEADER] +insert leaders at the end of a line +. +. +.\" ==================================================================== +.\" RULE +.\" ==================================================================== +.TP +.B \[rs]*[RULE] +draw a full measure rule +. +. +.\" ==================================================================== +.\" PT_SIZE +.\" ==================================================================== +.TP +.FONT B \[rs]*[SIZE I " n" B ] +change the point size inline (related to macro +.BR \%.PT_SIZE ) +. +. +.\" ==================================================================== +.\" SLANT +.\" ==================================================================== +.TP +.B \[rs]*[SLANT] +.TQ +.B \[rs]*[SLANTX] +Pseudo italic on/off +. +.RS +. +.P +.B \%\[rs]*[SLANT] +begins +.I pseudo-italicizing +.IR type . +. +.B \%\[rs]*[SLANTX] +turns the feature off. +. +Both are inline escape sequences; +therefore, +they should not appear as separate lines, +but rather be embedded in text lines, like this: +.RS +.EX +.FONT R "Not " B \[rs]*[SLANT] R everything B \[rs]*[SLANTX] \ +R " is as it seems." +.EE +.RE +. +.P +Alternatively, if you wanted the whole line +.IR pseudo-italicized , +you'd do +.RS +.EX +.FONT B \[rs]*[SLANT] R "Not everything is as it seems." \ +B \[rs]*[SLANTX] +.EE +.RE +. +.P +Once +.B \[rs]*[SLANT] +is invoked, it remains in effect until turned off. +. +.P +Note: If you're using the document processing macros with +.BR "\%.PRINTSTYLE \%TYPEWRITE" , +.I mom +underlines pseudo-italics by default. +. +To change this behaviour, use the special macro +.BR .SLANT_MEANS_SLANT . +. +.RE +. +. +.\" ==================================================================== +.\" ST +.\" ==================================================================== +.TP +.FONT B \[rs]*[ST I <number> B ] R .\|.\|. B \[rs]*[ST I <number> B X] +Mark positions of string tabs +. +.RS +.P +The +.I quad +direction must be +.B LEFT +or +.B \%JUSTIFY +(see +.B \%.QUAD +and +.BR \%.JUSTIFY ) +or the +.I no-fill mode +set to +.B LEFT +in order for these inlines to function properly. +. +Please see +.IR \%IMPORTANT , +below. +. +.P +String tabs need to be marked off with inline escape sequences before +being set up with the +.B .ST +macro. +. +Any input line may contain string tab markers. +. +.IR <number> , +above, means the numeric identifier of the tab. +. +.P +The following shows a sample input line with string tab markers. +.RS +.EX +.BR \[rs]*[ST1] "De minimus" \[rs]*[ST1X] \c +.RB "non curat" \[rs]*[ST2] lex \[rs]*[ST2X] . +.EE +.RE +. +.P +String +.I tab 1 +begins at the start of the line and ends after the word +.IR \%time . +. +String +.I tab 2 +starts at +.I good +and ends after +.IR men . +. +.I Inline escape sequences +(e.g., +.I font +or +.I point size +.IR changes , +or horizontal movements, including padding) are taken into account +when +.I mom +determines the +.I position +and +.I length +of +.I string +.IR tabs . +. +.P +Up to nineteen string tabs may be marked (not necessarily all on the +same line, of course), and they must be numbered between 1 and 19. +. +.P +Once string tabs have been marked in input lines, they have to be +.I set +with +.BR .ST , +after which they may be called, by number, with +.BR .TAB . +. +.P +Note: Lines with string tabs marked off in them are normal input +lines, i.e.\& they get printed, just like any input line. +. +If you want to set up string tabs without the line printing, use the +.B \%.SILENT +macro. +. +.P +.I IMPORTANT: +Owing to the way +.I groff +processes input lines and turns them into output lines, it is not +possible for +.I mom +to +.I guess +the correct starting position of string tabs marked off in lines that +are centered or set flush right. +. +.P +Equally, she cannot guess the starting position if a line is fully +justified and broken with +.BR \%.SPREAD . +. +.P +In other words, in order to use string tabs, +.B LEFT +must be active, or, if +.B .QUAD LEFT +or +.B \%JUSTIFY +are active, the line on which the +.I string tabs +are marked must be broken +.I manually +with +.B .BR +(but not +.BR \%.SPREAD ). +. +.P +To circumvent this behaviour, I recommend using the +.B PAD +to set up string tabs in centered or flush right lines. +. +Say, for example, you want to use a +.I string tab +to +.I underscore +the text of a centered line with a rule. +. +Rather than this, +.RS +.EX +.B .CENTER +.B \[rs]*[ST1]A line of text\[rs]*[ST1X]\[rs]c +.B .EL +.B .ST 1 +.B .TAB 1 +.B .PT_SIZE 24 +.B .ALD 3p +.B \[rs]*[RULE] +.B .RLD 3p +.B .TQ +.EE +.RE +you should do: +.RS +.EX +\&.QUAD CENTER +\&.PAD "#\[rs]*[ST1]A line of text\[rs]*[ST1X]#" +\&.EL +\&.ST 1 +\&.TAB 1 +\&.PT_SIZE 24 +\&.ALD 3p +\&\[rs]" You can\[aq]t use \[rs]*[UP] or \[rs]*[DOWN] with \[rs]*[RULE]. +\&.RLD 3p +\&.TQ +.EE +.RE +. +.RE +. +. +.\" ==================================================================== +.\" SUP +.\" ==================================================================== +.TP +.FONT B \[rs]*[SUP] R .\|.\|. B \[rs]*[SUPX] +superscript +. +. +.\" ==================================================================== +.\" TB+ +.\" ==================================================================== +.TP +.B \[rs]*[TB+] +Inline escape for +.B .TN +.RI ( "Tab Next" ) +. +. +.\" ==================================================================== +.\" UL +.\" ==================================================================== +.TP +.FONT B \[rs]*[UL] R .\|.\|. B \[rs]*[ULX] +invoke underlining inline (fixed width fonts only) +. +. +.\" ==================================================================== +.\" UP +.\" ==================================================================== +.TP +.FONT B \[rs]*[UP I " n" B ] +temporarily move upward in a line +. +. +.\" ==================================================================== +.SS "Details of macros in alphabetical order" +.\" ==================================================================== +. +.\" ==================================================================== +.\" AUTOLEAD +.\" ==================================================================== +.TP +.B .AUTOLEAD +set the linespacing relative to the point size +. +. +.\" ==================================================================== +.\" Bottom Margin +.\" ==================================================================== +.TP +.BI .B_MARGIN " <bottom margin>" +Bottom Margin +. +.RS +. +.P +Requires a unit of measure +. +.P +.B .B_MARGIN +sets a nominal position at the bottom of the page beyond which you +don't want your type to go. +. +When the bottom margin is reached, +.I mom +starts a new page. +. +.B .B_MARGIN requires a unit of measure. +. +Decimal fractions are allowed. +. +To set a nominal bottom margin of 3/4 inch, enter +.RS +.EX +.B .B_MARGIN .75i +.EE +.RE +. +.P +Obviously, if you haven't spaced the type on your pages so that the +last lines fall perfectly at the bottom margin, the margin will vary +from page to page. +. +Usually, but not always, the last line of type that fits on a page +before the bottom margin causes mom to start a new page. +. +.P +Occasionally, owing to a peculiarity in +.IR groff , +an extra line will fall below the nominal bottom margin. +. +If you're using the document processing macros, this is unlikely to +happen; the document processing macros are very hard-nosed about +aligning bottom margins. +. +.P +Note: The meaning of +.B .B_MARGIN +is slightly different when you're using the document processing +macros. +. +.RE +. +. +.\" ==================================================================== +.\" Fallback Font +.\" ==================================================================== +.TP +.BI \%.FALLBACK_FONT " <fallback font> " "[ ABORT | WARN ]" +Fallback Font +. +.RS +. +.P +In the event that you pass an invalid argument to +.B \%.FAMILY +(i.e.\& a non-existent +.IR family ), +.IR mom , +by default, uses the +.IR "fallback font" , +.B Courier Medium Roman +.RB ( CR ), +in order to continue processing your file. +. +.P +If you'd prefer another +.IR "fallback font" , +pass +.B \%.FALLBACK_FONT +the full +.I family+font name +of the +.I font +you'd like. +. +For example, if you'd rather the +.I fallback font +were +.BR "Times Roman Medium Roman" , +.RS +.EX +.B .FALLBACK_FONT TR +.EE +.RE +would do the trick. +. +.P +.B Mom +issues a warning whenever a +.I font style set +with +.B .FT +does not exist, either because you haven't registered the style +or because the +.I font style +does not exist in the current +.I family set +with +.BR .FAMILY . +. +By default, +.B \%mom +then aborts, which allows you to correct the problem. +. +.P +If you'd prefer that +.B \%mom +not abort on non-existent +.IR fonts , +but rather continue processing using a +.IR "fallback font" , +you can pass +.B \%.FALLBACK_FONT +the argument +.BR WARN , +either by itself, or in conjunction with your chosen +.IB "fallback font" . +. +.P +Some examples of invoking +.BR \%.FALLBACK_FONT : +. +.TP +.B .FALLBACK_FONT WARN +.I mom +will issue a warning whenever you try to access a non-existent +.I font +but will continue processing your file with the default +.IR "fallback font" , +.BR "Courier Medium Roman" . +. +. +.TP +.B .FALLBACK_FONT TR WARN +.B \%mom +will issue a warning whenever you try to access a non-existent +.I font +but will continue processing your file with a +.I fallback font +of +.BR "Times Roman Medium Roman" ; +additionally, +.B TR +will be the +.I fallback font +whenever you try to access a +.I family +that does not exist. +. +.TP +.B .FALLBACK_FONT TR ABORT +.B \%mom +will abort whenever you try to access a non-existent +.BR font , +and will use the +.I fallback font +.B TR +whenever you try to access a +.I family +that does not exist. +. +If, for some reason, you want to revert to +.BR ABORT , +just enter +.B \%".FALLBACK_FONT ABORT" +and +.I mom +will once again abort on +.IR "font errors" . +. +.RE +. +. +.\" ==================================================================== +.\" FAM +.\" ==================================================================== +.TP +.BI .FAM " <family>" +Type Family, +alias of +.B .FAMILY +. +. +.\" ==================================================================== +.\" FAMILY +.\" ==================================================================== +.TP +.BI .FAMILY " <family>" +Type Family, +alias of +.B .FAM +. +.RS +. +.P +.B .FAMILY +takes one argument: the name of the +.I family +you want. +. +.I Groff +comes with a small set of basic families, each identified by a 1-, +2- or 3-letter mnemonic. +. +The standard families are: +.RS +.EX +.B "A = Avant Garde" +.B "BM = Bookman" +.B "H = Helvetica" +.B "HN = Helvetica Narrow" +.B "N = New Century Schoolbook" +.B "P = Palatino" +.B "T = Times Roman" +.B "ZCM = Zapf Chancery" +.EE +.RE +. +.P +The argument you pass to +.B .FAMILY +is the identifier at left, above. +. +For example, if you want +.BR Helvetica , +enter +.RS +.EX +.B .FAMILY H +.EE +.RE +. +.P +Note: The font macro +.RB ( .FT ) +lets you specify both the type +.I family +and the desired font with a single macro. +. +While this saves a few +keystrokes, I recommend using +.B .FAMILY for +.IR family , +and +.B .FT for +.IR font , +except where doing so is genuinely inconvenient. +. +.BR ZCM , +for example, +only exists in one style: +.B Italic +.RB ( I ). +. +.P +Therefore, +.RS +.EX +.B .FT ZCMI +.EE +.RE +makes more sense than setting the +.I family +to +.BR ZCM , +then setting the +.I font +to +.IR I . +. +.P +Additional note: If you are running a +.I groff +version prior to +1.19.2, +you must follow all +.B .FAMILY +requests with a +.B .FT +request, +otherwise +.I mom +will set all type up to the next +.B .FT +request in the fallback font. +. +.P +If you are running +.I groff +1.19.2 or later, +when you invoke the +.B .FAMILY +macro, +.I mom +.I remembers +the font style +.BR ( Roman , +.BR Italic , +etc) currently in use (if the font style exists in the new +.IR family ) +and will continue to use the same font style in the new family. +For example: +.RS +.EX +.BI ".FAMILY BM " "\[rs]"" Bookman family" +.BI ".FT I " "\[rs]"" Medium Italic" +.I <some text> \[rs]" Bookman Medium Italic +.BI ".FAMILY H " "\[rs]"" Helvetica family" +.I <more text> \[rs]" Helvetica Medium Italic +.EE +.RE +. +.P +However, if the font style does not exist in the new family, +.I mom +will set all subsequent type in the fallback font (by default, +.B Courier Medium +.BR Roman ) +until she encounters a +.B .FT +request that's valid for the +.IR family . +. +.P +For example, assuming you don't have the font +.B Medium Condensed Roman +.RI ( mom +extension +.IR CD ) +in the +.I Helvetica +.IR family : +.RS +.EX +.BI ".FAMILY UN " "\[rs]"" Univers family" +.BI ".FT CD " "\[rs]"" Medium Condensed" +.I <some text> \[rs]" Univers Medium Condensed +.BI ".FAMILY H " "\[rs]"" Helvetica family" +.I <more text> \[rs]" Courier Medium Roman! +.EE +.RE +. +.P +In the above example, you must follow +.B .FAMILY H +with a +.B .FT +request that's valid for +.BR Helvetica . +. +.P +Please see the Appendices, +.I Adding fonts to +.IR groff , +for information on adding fonts and families to +.IR groff , as well as to +see a list of the extensions +.I mom +provides to +.IR groff 's +basic +.BR R , +.BR I , +.BR B , +.B BI +styles. +. +.P +Suggestion: When adding +.I families to +.IR groff , +I recommend following the established standard for the naming families +and fonts. +. +For example, if you add the +.B Garamond +family, name the font files +.RS +.EX +.B GARAMONDR +.B GARAMONDI +.B GARAMONDB +.B GARAMONDBI +.EE +.RE +. +.B GARAMOND then becomes a valid +.I family name +you can pass to +.BR .FAMILY . +. +(You could, of course, shorten +.B GARAMOND +to just +.BR G , +or +.BR GD .) +.BR R , +.BR I , +.BR B , +and +.B BI +after +.B GARAMOND +are the +.IR roman , +.IR italic , +.I bold +and +.I bold-italic +fonts respectively. +. +.RE +. +. +.\" ==================================================================== +.\" FONT +.\" ==================================================================== +.TP +.BI ".FONT R | B | BI | " "<any other valid font style>" +Alias to +.B .FT +. +. +.\" ==================================================================== +.\" FT +.\" ==================================================================== +.TP +.BI ".FT R | B | BI | " "<any other valid font style>" +Set font +. +.RS +. +.P +By default, +.I groff +permits +.B .FT +to take one of four possible arguments specifying the desired font: +.RS +.EX +.B R = (Medium) Roman +.B I = (Medium) Italic +.B B = Bold (Roman) +.B BI = Bold Italic +.EE +.RE +. +.P +For example, if your +.I family +is +.BR Helvetica , +entering +.RS +.EX +.B .FT B +.EE +.RE +will give you the +.I Helvetica bold +.IR font . +. +If your +.I family +were +.BR \%Palatino , +you'd get the +.I \%Palatino bold +.IR font . +. +.P +.B Mom +considerably extends the range of arguments you can pass to +.BR .FT , +making it more convenient to add and access fonts of differing weights +and shapes within the same family. +. +.P +Have a look here for a list of the weight/style arguments +.I mom +allows. +. +Be aware, though, that you must have the fonts, correctly installed +and named, in order to use the arguments. +. +(See +.I Adding fonts to groff +for instructions and information.) +. +Please also read the +.I ADDITIONAL NOTE +found in the description of the +.B \%.FAMILY +macro. +. +. +.P +How +.I mom +reacts to an invalid argument to +.B .FT +depends on which version of +.I groff +you're using. +. +If your +.I groff +version is 1.19.2 or later, +.I mom +will issue a warning and, +depending on how you've set up the fallback font, +either continue processing using the fallback font, +or abort +(allowing you to correct the problem). +. +In earlier versions, +.I mom +will silently continue processing, +using either the fallback font or the font that was in effect prior to +the invalid +.B .FT +call. +. +. +.P +.B .FT +will also accept, as an argument, a full +.I family +and +.I font +.IR name . +. +.P +For example, +.RS +.EX +.B .FT HB +.EE +.RE +will set subsequent type in +.I Helvetica +.IR Bold . +. +.P +However, I strongly recommend keeping +.I family +and +.I font +separate except where doing so is genuinely inconvenient. +. +.P +For inline control of +.IR fonts , +see +.I Inline +.IR Escapes , +font control. +. +.RE +. +. +.\" ==================================================================== +.\" Hanging Indent +.\" ==================================================================== +.TP +.BI "\%.HI [" " <measure> " ] +Hanging indent \[em] the optional argument requires a unit of measure. +. +.RS +. +.P +A hanging indent looks like this: +.RS +.EX +The thousand injuries of Fortunato I had borne as best I + could, but when he ventured upon insult, I vowed + revenge.\& You who so well know the nature of my soul + will not suppose, however, that I gave utterance to a + threat, at length I would be avenged.\|.\|. +.EE +.RE +. +The first line of text +.I hangs +outside the +.IR "left margin" . +. +.P +In order to use +.IR "hanging indents" , +you must first have a +.I left indent +active (set with either +.B .IL +or +.BR .IB ). +. +.B Mom +will not hang text outside the +.I left margin set +with +.B \%.L_MARGIN +or outside the +.I left margin +of a +.IR \%tab . +. +.P +The first time you invoke +.BR .HI , +you must give it a +.BR measure . +. +If you want the first line of a paragraph to +.IR "hang by" , +say, +.IR "1 pica" , +do +.RS +.EX +.B ".IL 1P" +.B ".HI 1P" +.EE +.RE +. +Subsequent invocations of +.B \%.HI +do not require you to supply a +.IR measure ; +.I mom +keeps track of the last measure you gave it. +. +.P +Generally speaking, you should invoke +.B .HI +immediately prior to the line you want hung (i.e.\& without any +intervening control lines). +. +And because +.I hanging indents +affect only one line, there's no need to turn them off. +. +.P +.I IMPORTANT: +Unlike +.BR IL , +.B IR +and +.BR IB , +measures given to +.B .HI +are NOT additive. +. +Each time you pass a measure to +.BR .HI , +the measure is treated literally. +. +.B +.I Recipe: +A numbered list using +.I hanging indents +. +.P +.I Note: +.I mom +has macros for setting lists. +. +This recipe exists to demonstrate the use of +.I hanging indents +only. +.RS +.EX +\&.PAGE 8.5i 11i 1i 1i 1i 1i +\&.FAMILY T +\&.FT R +\&.PT_SIZE 12 +\&.LS 14 +\&.JUSTIFY +\&.KERN +\&.SS 0 +\&.IL \[rs]w\[aq]\[rs]0\[rs]0.\[aq] +\&.HI \[rs]w\[aq]\[rs]0\[rs]0.\[aq] +1.\[rs]0The most important point to be considered is whether +the answer to the meaning of Life, the Universe, and +Everything really is 42.\& We have no one\[aq]s word on the +subject except Mr.\& Adams\[aq]s. +\&.HI +2.\[rs]0If the answer to the meaning of Life, the Universe, +and Everything is indeed 42, what impact does this have on +the politics of representation?\& 42 is, after all not a +prime number.\& Are we to infer that prime numbers don\[aq]t +deserve equal rights and equal access in the universe? +\&.HI +3.\[rs]0If 42 is deemed non-exclusionary, how do we present +it as the answer and, at the same time, forestall debate +on its exclusionary implications? +.EE +.RE +. +.P +First, we invoke a left indent with a measure equal to the width of 2 +figures spaces plus a period (using the \[rs]w inline escape). +. +At this point, the left indent is active; text afterward would +normally be indented. +. +However, we invoke a hanging indent of exactly the same width, which +hangs the first line (and first line only!\&) to the left of the indent +by the same distance (in this case, that means \[lq]out to the left +margin\[rq]). +. +Because we begin the first line with a number, a period, and a figure +space, the actual text +.RI ( "The most important point.\|.\|.\&" ) +starts at exactly the same spot as the indented lines that follow. +. +.P +Notice that subsequent invocations of +.B .HI +don't require a +.I measure +to be given. +. +.P +Paste the example above into a file and preview it with +.RS +.EX +.B pdfmom filename.mom | ps2pdf \- filename.pdf +.EE +.RE +to see hanging indents in action. +. +.RE +. +. +.\" ==================================================================== +.\" IB - INDENT BOTH +.\" ==================================================================== +.TP +.BI "\%.IB [" " <left measure> <right measure> " ] +Indent both \[em] the optional argument requires a unit of measure +. +.RS +. +.P +.B .IB +allows you to set or invoke a left and a right indent at the same time. +. +.P +At its first invocation, you must supply a measure for both indents; +at subsequent invocations when you wish to supply a measure, both must +be given again. +. +As with +.B .IL +and +.BR .IR , +the measures are added to the values previously passed to the +macro. +. +Hence, if you wish to change just one of the values, you must give an +argument of zero to the other. +. +.P +.I A word of advice: +If you need to manipulate left and right indents separately, use a +combination of +.B .IL +and +.B .IR +instead of +.BR .IB . +. +You'll save yourself a lot of grief. +. +.P +A +.I minus sign +may be prepended to the arguments to subtract from their current +values. +. +The \[rs]w inline escape may be used to specify text-dependent +measures, in which case no unit of measure is required. +. +For example, +.RS +.EX +.B .IB \[rs]w\[aq]margarine\[aq] \[rs]w\[aq]jello\[aq] +.EE +.RE +left indents text by the width of the word +.I margarine +and right indents by the width of +.IR jello . +. +.P +Like +.B .IL +and +.BR .IR , +.B .IB +with no argument indents by its last active values. +. +See the brief explanation of how mom handles indents for more details. +. +.P +.I Note: +Calling a +.I tab +(with +.BR ".TAB <n>" ) +automatically cancels any active indents. +. +.P +.I Additional note: +Invoking +.B .IB +automatically turns off +.B .IL +and +.BR .IR . +. +.RE +. +. +.\" ==================================================================== +.\" IL - INDENT LEFT +.\" ==================================================================== +.TP +.BI "\%.IL [" " <measure> " ] +Indent left \[em] the optional argument requires a unit of measure +. +.RS +. +.P +.B .IL +indents text from the left margin of the page, or if you're in a +.IR tab , +from the left edge of the +.IR tab . +. +Once +.I IL +is on, the +.I left indent +is applied uniformly to every subsequent line of text, even if you +change the line length. +. +.P +The first time you invoke +.BR .IL , +you must give it a measure. +. +Subsequent invocations with a measure add to the previous measure. +. +A minus sign may be prepended to the argument to subtract from the +current measure. +. +The +.B \[rs]w +inline escape may be used to specify a text-dependent measure, in +which case no unit of measure is required. +. +For example, +.RS +.EX +.B .IL \[rs]w\[aq]margarine\[aq] +.EE +.RE +indents text by the width of the word +.IR margarine . +. +.P +With no argument, +.B .IL +indents by its last active value. +. +See the brief explanation of how +.I mom +handles indents for more details. +. +.P +.I Note: +Calling a +.I tab +(with +.BR ".TAB <n>" ) +automatically cancels any active indents. +. +.P +.I Additional note: +Invoking +.B .IL +automatically turns off +.BR IB . +. +.RE +. +. +.\" ==================================================================== +.\" IQ - quit any/all indents +.\" ==================================================================== +.TP +.BI "\%.IQ [" " <measure> " ] +IQ \[em] quit any/all indents +. +.RS +. +.P +.I IMPORTANT NOTE: +The original macro for quitting all indents was +.BR .IX . +. +This usage has been deprecated in favour of +.BR IQ . +. +.B .IX +will continue to behave as before, but +.I mom +will issue a warning to +.I stderr +indicating that you should update your documents. +. +.P +As a consequence of this change, +.BR .ILX , +.B .IRX +and +.B .IBX +may now also be invoked as +.BR .ILQ , +.B .IRQ +and +.BR .IBQ . +. +Both forms are acceptable. +. +.P +Without an argument, the macros to quit indents merely restore your +original margins and line length. +. +The measures stored in the indent macros themselves are saved so you +can call them again without having to supply a measure. +. +.P +If you pass these macros the optional argument +.BR CLEAR , +they not only restore your original left margin and line length, but +also clear any values associated with a particular indent style. +. +The next time you need an indent of the same style, you have to supply +a measure again. +. +.P +.BR ".IQ CLEAR" , +as you'd suspect, quits and clears the values for all indent +styles at once. +. +.RE +. +. +.\" ==================================================================== +.\" IR - INDENT RIGHT +.\" ==================================================================== +.TP +.BI "\%.IR [" " <measure> " ] +Indent right \[em] the optional argument requires a unit of measure +. +.RS +. +.P +.B .IR +indents text from the +.I right margin +of the page, or if you're in a +.IR tab , +from the end of the +.IR tab . +. +.P +The first time you invoke +.BR .IR , +you must give it a measure. +. +Subsequent invocations with a measure add to the previous indent +measure. +. +A +.I minus sign +may be prepended to the argument to subtract from the current indent +measure. +. +The \[rs]w inline escape may be used to specify a text-dependent +measure, in which case no +.I unit of measure +is required. +. +For example, +.RS +.EX +.B .IR \[rs]w\[aq]jello\[aq] +.EE +.RE +indents text by the width of the word +.IR jello . +. +.P +With no argument, +.B .IR +indents by its last active value. +. +See the brief explanation of how +.I mom +handles indents for more details. +. +.P +.I Note: +Calling a +.I tab +(with +.BR "\%.TAB <n>" ) +automatically cancels any active indents. +. +.P +.I Additional note: +Invoking +.B .IR +automatically turns off +.BR IB . +. +.RE +. +. +.\" ==================================================================== +.\" Left Margin +.\" ==================================================================== +.TP +.BI .L_MARGIN " <left margin>" +Left Margin +. +.RS +. +.P +L_MARGIN establishes the distance from the left edge of the printer +sheet at which you want your type to start. +. +It may be used any time, +and remains in effect until you enter a new value. +. +.P +Left indents and tabs are calculated from the value you pass to +.BR .L_MARGIN , +hence it's always a good idea to invoke it before starting any serious +typesetting. +. +A unit of measure is required. +. +Decimal fractions are allowed. +. +Therefore, +to set the left margin at 3 picas (1/2 inch), +you'd enter either +.RS +.EX +.B .L_MARGIN 3P +.EE +.RE +or +.RS +.EX +.B .L_MARGIN .5i +.EE +.RE +. +.P +If you use the macros +.BR .PAGE , +.B .PAGEWIDTH +or +.B .PAPER +without invoking +.B .L_MARGIN +(either before or afterward), +.I mom +automatically sets +.B .L_MARGIN +to +.IR "1 inch" . +. +.P +Note: +.B .L_MARGIN +behaves in a special way when you're using the document processing +macros. +. +.RE +. +. +.\" ==================================================================== +.\" MCO - BEGIN MULTI-COLUMN SETTING +.\" ==================================================================== +.TP +.B .MCO +Begin multi-column setting. +. +.RS +.P +.B .MCO +.RI ( "Multi-Column On" ) +is the +.I macro +you use to begin +.IR "multi-column setting" . +. +It marks the current baseline as the top of your columns, for use +later with +.BR .MCR . +. +See the introduction to columns for an explanation of +.I multi-columns +and some sample input. +. +.P +.I Note: +Do not confuse +.B .MCO +with the +.B .COLUMNS +macro in the document processing macros. +. +.RE +. +. +.\" ==================================================================== +.\" MCR - RETURN TO TOP OF COLUMN +.\" ==================================================================== +.TP +.B \%.MCR +Once you've turned +.I multi-columns +on (with +.BR \%.MCO ), +.BR .MCR , +at any time, +returns you to the +.IR "top of your columns" . \" XXX: Are italics truly required here? +. +. +.\" ==================================================================== +.\" MCX - EXIT MULTI-COLUMNS +.\" ==================================================================== +.TP +.BI "\%.MCX [ " "<distance to advance below longest column>" " ]" +Optional argument requires a unit of measure. +. +.RS +. +.P +Exit multi-columns. +. +.P +.B .MCX +takes you out of any +.I tab +you were in (by silently invoking +.BR .TQ ) +and advances to the bottom of the longest column. +. +.P +Without an argument, +.B .MCX +advances +.I 1 linespace +below the longest column. +. +.P +Linespace, in this instance, is the leading in effect at the moment +.B .MCX +is invoked. +. +.P +If you pass the +.I <distance> +argument to +.BR .MCX , +it advances +.I 1 linespace +below the longest column (see above) +.I PLUS +the distance specified by the argument. +. +The argument requires a unit of measure; therefore, to advance an +extra 6 points below where +.B \%.MCX +would normally place you, you'd enter +.RS +.EX +.B .MCX 6p +.EE +.RE +. +.P +.I Note: +If you wish to advance a precise distance below the baseline of the +longest column, use +.B .MCX +with an argument of +.B 0 +(zero; no +.I unit of measure +required) in conjunction with the +.B \%.ALD +macro, like this: +.RS +.EX +.B .MCX 0 +.B .ALD 24p +.EE +.RE +. +The above advances to precisely +.I 24 points +below the baseline of the longest column. +. +.RE +. +. +.\" ==================================================================== +.\" Start a new Page +.\" ==================================================================== +.TP +.B .NEWPAGE +. +.RS +. +.P +Whenever you want to start a new page, use +.BR .NEWPAGE , +by itself with no argument. +. +.B Mom +will finish up processing the current page and move you to the top of +a new one (subject to the top margin set with +.BR .T_MARGIN ). +. +.RE +. +. +.\" ==================================================================== +.\" Page +.\" ==================================================================== +.TP +.BI ".PAGE " <width> " [ " <length> " [ " <lm> " [ " <rm> " [ " \ + <tm> " [ " <bm> " ] ] ] ] ]" +. +.RS +. +.P +All arguments require a unit of measure +. +.P +.I IMPORTANT: +If you're using the document processing macros, +.B .PAGE +must come after +.BR .START . +. +Otherwise, it should go at the top of a document, prior to any text. +. +And remember, when you're using the document processing macros, top +margin and bottom margin mean something slightly different than when +you're using just the typesetting macros (see Top and bottom margins +in document processing). +. +.P +.B .PAGE +lets you establish paper dimensions and page margins with a single +macro. +. +The only required argument is page width. +. +The rest are +optional, but they must appear in order and you can't skip over +any. +. +.IR <lm> , +.IR <rm> , +.I <tm> +and +.I <bm> +refer to the left, right, top and bottom margins respectively. +. +.P +Assuming your page dimensions are 11 inches by 17 inches, and that's +all you want to set, enter +.RS +.EX +.B .PAGE 11i 17i +.EE +.RE +. +If you want to set the left margin as well, say, at 1 inch, +.B PAGE +would look like this: +.RS +.EX +.B .PAGE 11i 17i 1i +.EE +.RE +. +.P +Now suppose you also want to set the top margin, +say, +at 1\(en1/2 inches. +. +.I <tm> +comes after +.I <rm> +in the optional arguments, but you can't skip over any arguments, +therefore to set the top margin, you must also give a right margin. +. +The +.B .PAGE +macro would look like this: +.RS +.EX +.tr -\- +\&.PAGE 11i 17i 1i 1i 1.5i + | | +required right---+ +---top margin + margin +.tr -- +.EE +.RE +. +.P +Clearly, +.B .PAGE +is best used when you want a convenient way to tell +.I mom +just the dimensions of your printer sheet (width and length), or when +you want to tell her everything about the page (dimensions and all the +margins), for example +.RS +.EX +.B .PAGE 8.5i 11i 45p 45p 45p 45p +.EE +.RE +. +This sets up an 8\(12 by 11 inch page with margins of 45 points +(5/8-inch) all around. +. +.P +Additionally, if you invoke +.B .PAGE +with a top margin argument, any macros you invoke after +.B .PAGE +will almost certainly move the baseline of the first line of text down +by one linespace. +. +To compensate, do +.RS +.EX +.B .RLD 1v +.EE +.RE +immediately before entering any text, or, if it's feasible, make +.B .PAGE +the last macro you invoke prior to entering text. +. +.P +Please read the +.I Important note +on page dimensions and papersize for information on ensuring +.I groff +respects your +.B .PAGE +dimensions and margins. +. +.RE +. +. +.\" ==================================================================== +.\" Page Length +.\" ==================================================================== +.TP +.BI .PAGELENGTH " <length of printer sheet>" +tells +.I mom +how long your printer sheet is. +. +It works just like +.BR .PAGEWIDTH . +. +.RS +. +.P +Therefore, to tell +.I mom +your printer sheet is 11 inches long, you enter +.RS +.EX +.B .PAGELENGTH 11i +.EE +.RE +. +Please read the important note on page dimensions and papersize for +information on ensuring +.I groff +respects your +.IR PAGELENGTH . +. +.RE +. +. +.\" ==================================================================== +.\" Page Width +.\" ==================================================================== +.TP +.BI .PAGEWIDTH " <width of printer sheet>" +. +.RS +. +.P +The argument to +.B .PAGEWIDTH +is the width of your printer sheet. +. +.P +.B .PAGEWIDTH +requires a unit of measure. +. +Decimal fractions are allowed. +. +Hence, to tell +.I mom +that the width of your printer sheet is 8\(12 inches, you enter +.RS +.EX +\&.PAGEWIDTH 8.5i +.EE +.RE +. +.P +Please read the Important note on page dimensions and papersize for +information on ensuring +.I groff +respects your +.IR PAGEWIDTH . +. +.RE +. +. +.\" ==================================================================== +.\" Paper +.\" ==================================================================== +.TP +.BI .PAPER " <paper type>" +provides a convenient way to set the page dimensions for some common +printer sheet sizes. +. +The argument +.I <paper type> +can be one of: +.BR LETTER , +.BR LEGAL , +.BR STATEMENT , +.BR TABLOID , +.BR LEDGER , +.BR FOLIO , +.BR QUARTO , +.BR EXECUTIVE , +.BR 10x14 , +.BR A3 , +.BR A4 , +.BR A5 , +.BR B4 , +.BR B5 . +. +. +.TP +.B .PRINTSTYLE +. +. +.\" ==================================================================== +.\" PT_SIZE - POINT SIZE OF TYPE +.\" ==================================================================== +.TP +.BI .PT_SIZE " <size of type in points>" +Point size of type, does not require a +.IR "unit of measure" . +. +.RS +. +.P +.B \%.PT_SIZE +.RI ( "Point Size" ) +takes one argument: the +.I size of type +in +.IR points . +. +Unlike most other macros that establish the +.I size +or +.I measure +of something, +.B \%.PT_SIZE +does not require that you supply a +.I unit of measure +since it's a near universal convention that +.I type size +is measured in +.IR points . +. +Therefore, to change the +.I type size +to, say, +.IR "11 points" , +enter +.RS +.EX +.B .PT_SIZE 11 +.EE +.RE +. +.I Point sizes +may be +.I fractional +(e.g., +.I 10.25 +or +.IR 12.5 ). +. +.P +You can prepend a +.I plus +or a +.I minus sign +to the argument to +.BR \%.PT_SIZE , +in which case the +.I point size +will be changed by +.I + +or +.I \- +the original value. +. +For example, +if the +.I point size +is +.IR 12 , +and you want +.IR 14 , +you can do +.RS +.EX +.B .PT_SIZE +2 +.EE +.RE +then later reset it to +.I 12 +with +.RS +.EX +.B .PT_SIZE \-2 +.EE +.RE +. +The +.I size of type +can also be changed inline. +. +.P +.I Note: +It is unfortunate that the +.B \%pic +preprocessor has already taken the name, PS, and thus +.IR mom 's +macro for setting +.I point sizes +can't use it. +. +However, if you aren't using +.BR pic , +you might want to alias +.B \%.PT_SIZE +as +.BR .PS , +since there'd be no conflict. +. +For example +.RS +.EX +.B .ALIAS PS PT_SIZE +.EE +.RE +would allow you to set +.I point sizes +with +.BR .PS . +. +.RE +. +. +.\" ==================================================================== +.\" Right Margin +.\" ==================================================================== +.TP +.BI .R_MARGIN " <right margin>" +Right Margin +. +.RS +. +.P +Requires a unit of measure. +. +.P +IMPORTANT: +.BR .R_MARGIN , +if used, must come after +.BR .PAPER , +.BR .PAGEWIDTH , +.BR .L_MARGIN , +and/or +.B .PAGE +(if a right margin isn't given to PAGE). +. +The reason is that +.B .R_MARGIN +calculates line length from the overall page dimensions and the left +margin. +. +.P +Obviously, it can't make the calculation if it doesn't know the page +width and the left margin. +. +.P +.B .R_MARGIN +establishes the amount of space you want between the end of typeset +lines and the right hand edge of the printer sheet. +. +In other words, it sets the line length. +.B .R_MARGIN +requires a unit of measure. +. +Decimal fractions are allowed. +. +.P +The line length macro (LL) can be used in place of +.BR .R_MARGIN . +. +In either case, the last one invoked sets the line length. +. +The choice of which to use is up to you. +. +In some instances, you may find it easier to think of a section of +type as having a right margin. +. +In others, giving a line length may make more sense. +. +.P +For example, if you're setting a page of type you know should have +6-pica margins left and right, it makes sense to enter a left and +right margin, like this: +.RS +.EX +.B .L_MARGIN 6P +.B .R_MARGIN 6P +.EE +.RE +. +.P +That way, you don't have to worry about calculating the line +length. +. +On the other hand, if you know the line length for a patch of type +should be 17 picas and 3 points, entering the line length with LL is +much easier than calculating the right margin, e.g., +.RS +.EX +.B .LL 17P+3p +.EE +.RE +. +.P +If you use the macros +.BR .PAGE , +.B .PAGEWIDTH +or +.B PAPER +without invoking +.B .R_MARGIN +afterward, +.I mom +automatically sets +.B .R_MARGIN +to +.IR "1 inch" . +. +If you set a line length after these macros (with +.BR .LL ), +the line length calculated by +.B .R_MARGIN +is, of course, overridden. +. +.P +Note: +.B .R_MARGIN +behaves in a special way when you're using the document processing +macros. +. +.RE +. +. +.\" ==================================================================== +.\" ST - Set String Tabs +.\" ==================================================================== +.TP +.FONT B .ST I " <tab number> " B "L | R | C | J [ QUAD ]" +. +.RS +.P +After +.I string tabs +have been marked off on an input line (see +.BR \[rs]*[ST].\|.\|.\&\[rs]*[STX] ), +you need to +.I set +them by giving them a direction and, optionally, the +.B \%QUAD +argument. +. +.P +In this respect, +.B .ST +is like +.B \%.TAB_SET +except that you don't have to give +.B .ST +an indent or a line length (that's already taken care of, inline, +by +.BR \[rs]*[ST].\|.\|.\&\[rs]*[STX] ). +. +.P +If you want string +.I tab 1 +to be +.BR \%left , +enter +.RS +.EX +.B .ST 1 L +.EE +.RE +. +If you want it to be +.I \%left +and +.IR \%filled , +enter +.RS +.EX +.B .ST 1 L \%QUAD +.EE +.RE +. +If you want it to be justified, enter +.RS +.EX +.B .ST 1 J +.EE +.RE +. +.RE +. +. +.\" ==================================================================== +.\" TAB - Call Tabs +.\" ==================================================================== +.TP +.BI \%.TAB " <tab number>" +After +.I tabs +have been defined (either with +.B \%.TAB_SET +or +.BR .ST ), +.B \%.TAB +moves to whatever +.I tab number +you pass it as an argument. +. +.RS +. +.P +For example, +.RS +.EX +.B \%.TAB 3 +.EE +.RE +moves you to +.IR "\%tab 3" . +. +.P +Note: +.B \%.TAB +breaks the line preceding it and advances 1 linespace. +. +Hence, +.RS +.EX +.B .TAB 1 +.B A line of text in tab 1. +.B .TAB 2 +.B A line of text in tab 2. +.EE +.RE +produces, on output +.RS +.EX +.B "A line of text in tab 1." +.B " A line of text in tab 2." +.EE +.RE +. +. +.P +If you want the tabs to line up, +use +.B .TN +(\[lq]Tab Next\[rq]) +or, +more conveniently, +the inline escape sequence +.BR \[rs]*[TB+] : +.RS +.EX +.BR .TAB \~1 +A line of text in tab 1.\[rs]*[TB+] +A line of text in tab 2. +.EE +.RE +which produces +.RS +.EX +.B "A line of text in tab 1.\& A line of text in tab 2." +.EE +.RE +. +. +.P +If the text in your tabs runs to several lines, and you want the first +lines of each tab to align, you must use the multi-column macros. +. +.P +.I Additional note: +Any indents in effect prior to calling a tab are automatically turned +off by +.BR TAB . +. +If you were happily zipping down the page with a left indent of +.I 2 picas +turned on, and you call a +.I tab +whose indent from the left margin is +.IR "6 picas" , +your new distance from the +.I left margin +will be +.IR "6 picas" , +not +I 6 picas plus the 2 pica +indent. +. +.P +.I \%Tabs +are not by nature columnar, which is to say that if the text inside a +.I tab +runs to several lines, calling another +.I tab +does not automatically move to the baseline of the first line in the +.IR "previous tab" . +. +To demonstrate: +.RS +.EX +TAB 1 +Carrots +Potatoes +Broccoli +\&.TAB 2 +$1.99/5 lbs +$0.25/lb +$0.99/bunch +.EE +.RE +produces, on output +.RS +.EX +Carrots +Potatoes +Broccoli + $1.99/5 lbs + $0.25/lb + $0.99/bunch +.EE +.RE +. +.RE +. +.\" ==================================================================== +.\" TB - Call Tabs Alias +.\" ==================================================================== +.TP +.BI .TB " <tab number>" +Alias to +.B .TAB +. +. +.\" ==================================================================== +.\" TI - TEMPORARY (LEFT) INDENT +.\" ==================================================================== +.TP +.BI "\%.TI [" " <measure> " ] +Temporary left indent \[em] the optional argument requires a +.I unit of measure +. +.RS +. +.P +A temporary indent is one that applies only to the first line of text +that comes after it. +. +Its chief use is indenting the first line of paragraphs. +.RB ( Mom's +.B .PP +macro, for example, uses a +.IR "temporary indent" .) +. +.P +The first time you invoke +.BR .TI , +you must give it a measure. +. +If you want to +.I indent +the first line of a paragraph by, say, 2 ems, do +.RS +.EX +.B .TI 2m +.EE +.RE +. +.P +Subsequent invocations of +.B .TI +do not require you to supply a measure; +.I mom +keeps track of the last measure you gave it. +. +.P +Because +.I temporary indents +are temporary, there's no need to turn them off. +. +.P +.I IMPORTANT: +Unlike +.BR .IL , +.B .IR +and +.BR IB , +measures given to +.B .TI +are NOT additive. +. +In the following example, the second +.B \%".TI 2P" +is exactly +.IR "2 picas" . +.RS +.EX +.B .TI 1P +.B The beginning of a paragraph.\|.\|.\& +.B .TI 2P +.B The beginning of another paragraph.\|.\|.\& +.EE +.RE +. +.RE +. +. +. +.\" ==================================================================== +.\" TN - Tab Next +.\" ==================================================================== +.TP +.B .TN +Tab Next +. +.RS +.P +Inline escape +.B \[rs]*[TB+] +. +.P +.B TN +moves over to the +.I next tab +in numeric sequence +.RI ( "tab n+1" ) +without advancing on the page. +. +See the +.I NOTE +in the description of the +.B \%.TAB +macro for an example of how +.B TN +works. +. +.P +In +.I \%tabs +that aren't given the +.B QUAD +argument when they're set up with +.B \%.TAB_SET +or +.BR ST , +you must terminate the line preceding +.B .TN +with the +.B \[rs]c +inline escape sequence. +. +Conversely, if you did give a +.B QUAD +argument to +.B \%.TAB_SET +or +.BR ST , +the +.B \[rs]c must not be used. +. +.P +If you find remembering whether to put in the +.B \[rs]c +bothersome, you may prefer to use the inline escape alternative +to +.BR .TN , +.BR \[rs]*[TB+] , +which works consistently regardless of the fill mode. +. +.P +.I Note: +You must put text in the input line immediately after +.BR .TN . +. +Stacking of +.BR .TN 's +is not allowed. +. +In other words, you cannot do +.RS +.EX +\&.TAB 1 +Some text\[rs]c +\&.TN +Some more text\[rs]c +\&.TN +\&.TN +Yet more text +.EE +.RE +. +The above example, assuming +.I tabs +numbered from +.I 1 +to +.IR 4 , +should be entered +.RS +.EX +\&.TAB 1 +Some text\[rs]c +\&.TN +Some more text\[rs]c +\&.TN +\[rs]&\[rs]c +\&.TN +Yet more text +.EE +.RE +. +\[rs]& is a zero-width, non-printing character that +.I groff +recognizes as valid input, hence meets the requirement for input text +following +.BR .TN . +. +.RE +. +. +.\" ==================================================================== +.\" Tab Quit +.\" ==================================================================== +.TP +.B .TQ +.B TQ +takes you out of whatever +.I tab +you were in, advances +.IR "1 linespace" , +and restores the +.IR "left margin" , +.IR "line length" , +.I quad direction +and +.I fill mode +that were in effect prior to invoking any +.IR tabs . +. +. +.\" ==================================================================== +.\" Top Margin +.\" ==================================================================== +.TP +.BI .T_MARGIN " <top margin>" +Top margin +. +.RS +. +.P +Requires a unit of measure +. +.P +.B .T_MARGIN +establishes the distance from the top of the printer sheet at which +you want your type to start. +. +It requires a unit of measure, and decimal fractions are allowed. +. +To set a top margin of 2\(12 centimetres, you'd enter +.RS +.EX +.B .T_MARGIN 2.5c +.EE +.RE +. +.B .T_MARGIN +calculates the vertical position of the first line of type on a page +by treating the top edge of the printer sheet as a baseline. +Therefore, +.RS +.EX +.B .T_MARGIN 1.5i +.EE +.RE +puts the baseline of the first line of type 1\(12 inches beneath the +top of the page. +. +.P +Note: +.B .T_MARGIN +means something slightly different when you're using the document +processing macros. +. +See Top and bottom margins in document processing for an explanation. +. +.P +IMPORTANT: +.B .T_MARGIN +does two things: it establishes the top margin for pages that come +after it and it moves to that position on the current page. +. +Therefore, +.B .T_MARGIN +should only be used at the top of a file (prior to entering text) or +after NEWPAGE, like this: +.RS +.EX +.B .NEWPAGE +.B .T_MARGIN 6P +.I <text> +.EE +.RE +. +.RE +. +. +.\" ==================================================================== +.SH Authors +.\" ==================================================================== +. +.I mom +was written by +.MT peter@\:schaffter\:.ca +Peter Schaffter +.ME . +. +PDF support was provided by +.MT deri@\:chuzzlewit\:.myzen\:.co\:.uk +Deri James +.ME . +. +This manual page was written by Bernd Warken. +. +. +.\" ==================================================================== +.SH "See also" +.\" ==================================================================== +. +.TP +.I @HTMLDOCDIR@/\:mom/\:toc\:.html +entry point to the HTML documentation +. +. +.TP +.UR http://\:www\:.schaffter\:.ca/\:mom/\:momdoc/\:toc\:.html +.UE +HTML documentation online +. +. +.TP +.UR http://\:www\:.schaffter\:.ca/\:mom/ +.UE +the +.I mom +macros homepage +. +. +.P +.IR "Groff: The GNU Implementation of troff" , +by Trent A.\& Fisher and Werner Lemberg, +is the primary +.I groff +manual. +. +You can browse it interactively with \[lq]info groff\[rq]. +. +. +.P +.MR pdfmom @MAN1EXT@ , +.MR groff @MAN1EXT@ , +.MR @g@troff @MAN1EXT@ +. +. +.\" Restore compatibility mode (for, e.g., Solaris 10/11). +.cp \n[*groff_groff_mom_7_man_C] +.do rr *groff_groff_mom_7_man_C +. +. +.\" Local Variables: +.\" fill-column: 72 +.\" mode: nroff +.\" End: +.\" vim: set filetype=groff textwidth=72: diff --git a/contrib/mom/mom.am b/contrib/mom/mom.am new file mode 100644 index 0000000..3bbbc9a --- /dev/null +++ b/contrib/mom/mom.am @@ -0,0 +1,182 @@ +# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Written by Werner Lemberg <wl@gnu.org> +# Automake migration by Bertrand Garrigues +# <bertrand.garrigues@laposte.net> +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +mom_srcdir = $(top_srcdir)/contrib/mom + +# pdfmom command used to generate .pdf +# +# Use '-K utf8', not '-k', in case 'configure' didn't find uchardet. +MOMPDFMOM = \ + GROFF_COMMAND_PREFIX= \ + GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \ + PDFMOM_BIN_PATH="$(top_builddir)" \ + $(PDFMOMBIN) $(FFLAG) $(MFLAG) -M$(mom_srcdir) -K utf8 -p -e -t + +man7_MANS += contrib/mom/groff_mom.7 + +# Files installed in $(tmacdir). +# MOMNORMALFILES are located in the source tree. +MOMNORMALFILES = \ + contrib/mom/mom.tmac \ + contrib/mom/om.tmac +momtmacdir = $(tmacdir) +dist_momtmac_DATA = $(MOMNORMALFILES) + +# Files installed in htmldocdir/mom +MOMHTMLDOCFILES=\ + contrib/mom/momdoc/stylesheet.css \ + contrib/mom/momdoc/appendices.html \ + contrib/mom/momdoc/color.html \ + contrib/mom/momdoc/cover.html \ + contrib/mom/momdoc/definitions.html \ + contrib/mom/momdoc/docelement.html \ + contrib/mom/momdoc/docprocessing.html \ + contrib/mom/momdoc/goodies.html \ + contrib/mom/momdoc/graphical.html \ + contrib/mom/momdoc/headfootpage.html \ + contrib/mom/momdoc/images.html \ + contrib/mom/momdoc/inlines.html \ + contrib/mom/momdoc/intro.html \ + contrib/mom/momdoc/letters.html \ + contrib/mom/momdoc/macrolist.html \ + contrib/mom/momdoc/rectoverso.html \ + contrib/mom/momdoc/refer.html \ + contrib/mom/momdoc/reserved.html \ + contrib/mom/momdoc/tables-of-contents.html \ + contrib/mom/momdoc/toc.html \ + contrib/mom/momdoc/typesetting.html \ + contrib/mom/momdoc/using.html \ + contrib/mom/momdoc/version-2.html +momhtmldir = $(htmldocdir)/mom +momhtml_DATA = $(MOMHTMLDOCFILES) + +# Files installed in $(examplesdir)/mom. MOMEXAMPLEFILES are located +# in the source tree, while MOMPROCESSEDEXAMPLEFILES are generated in +# the build tree. +MOMEXAMPLEFILES=\ + contrib/mom/examples/letter.mom \ + contrib/mom/examples/mom-pdf.mom \ + contrib/mom/examples/mon_premier_doc.mom \ + contrib/mom/examples/sample_docs.mom \ + contrib/mom/examples/typesetting.mom \ + contrib/mom/examples/README.txt \ + contrib/mom/examples/README-fr.txt \ + contrib/mom/examples/elvis_syntax \ + contrib/mom/examples/elvis_syntax.new \ + contrib/mom/examples/penguin.ps \ + contrib/mom/examples/penguin.pdf \ + contrib/mom/examples/mom.vim \ + contrib/mom/examples/slide-demo.mom \ + contrib/mom/examples/copyright-default.mom \ + contrib/mom/examples/copyright-chapter.mom +momexampledir = $(exampledir)/mom +dist_momexample_DATA = $(MOMEXAMPLEFILES) + +if USE_GROPDF +MOMPROCESSEDEXAMPLEFILES = \ + contrib/mom/examples/letter.pdf \ + contrib/mom/examples/mom-pdf.pdf \ + contrib/mom/examples/mon_premier_doc.pdf \ + contrib/mom/examples/sample_docs.pdf \ + contrib/mom/examples/slide-demo.pdf \ + contrib/mom/examples/copyright-default.pdf \ + contrib/mom/examples/copyright-chapter.pdf +if HAVE_URW_FONTS +MOMPROCESSEDEXAMPLEFILES += contrib/mom/examples/typesetting.pdf +endif +momprocessedexampledir = $(exampledir)/mom +nodist_momprocessedexample_DATA = $(MOMPROCESSEDEXAMPLEFILES) +endif + +mom_test_template = contrib/mom/examples/test-mom.sh.in + +# Small test suite on mom examples +mom_TESTS = contrib/mom/examples/tests-mom.sh +TESTS += $(mom_TESTS) +contrib/mom/examples/tests-mom.sh: \ + $(top_builddir)/config.status \ + $(MOMPROCESSEDEXAMPLEFILES) \ + $(top_srcdir)/$(mom_test_template) + $(AM_V_GEN)sed \ + -e "s|[@]abs_top_builddir[@]|$(abs_top_builddir)|g" \ + -e "s|[@]groff_have_urw_fonts[@]|$(groff_have_urw_fonts)|g" \ + $(top_srcdir)/$(mom_test_template) > $@ \ + && chmod +x $@ +MOSTLYCLEANFILES += $(mom_TESTS) +EXTRA_DIST += $(mom_test_template) + +# For this list of files we add a symlink from $(exampledir)/mom to $(pdfdocdir) +PDFDOCFILE = mom-pdf.pdf + +EXTRA_DIST += $(MOMHTMLDOCFILES) $(MOMEXAMPLEFILES) \ + contrib/mom/BUGS \ + contrib/mom/ChangeLog \ + contrib/mom/NEWS \ + contrib/mom/TODO \ + contrib/mom/copyright \ + contrib/mom/groff_mom.7.man + +MOSTLYCLEANFILES += \ + $(MOMPROCESSEDEXAMPLEFILES) \ + penguin.ps \ + penguin.pdf + +# rule to generate .pdf files from .mom files +SUFFIXES += .mom .pdf +.mom.pdf: + $(GROFF_V)$(MKDIR_P) `dirname $@` \ + && LC_ALL=C $(MOMPDFMOM) $< >$@ + +$(MOMPROCESSEDEXAMPLEFILES): $(MOMNORMALFILES) \ + groff troff gropdf pdfmom penguin.ps penguin.pdf font/devpdf/stamp + +penguin.ps: + $(AM_V_at)cp $(mom_srcdir)/examples/penguin.ps $@ +penguin.pdf: + $(AM_V_at)cp $(mom_srcdir)/examples/penguin.pdf $@ + +install-data-hook: install_mom +install_mom: +if USE_GROPDF + for f in $(PDFDOCFILE); do \ + $(RM) $(DESTDIR)$(pdfdocdir)/$$f; \ + ln -s $(exampledir)/mom/$$f $(DESTDIR)$(pdfdocdir)/$$f; \ + done +endif + +uninstall_groffdirs: uninstall_mom +uninstall_mom: + for f in $(PDFDOCFILE); do \ + $(RM) $(DESTDIR)$(pdfdocdir)/$$f; \ + done + -rmdir $(DESTDIR)$(pdfdocdir) + if test -d $(DESTDIR)$(exampledir)/mom; then \ + rmdir $(DESTDIR)$(exampledir)/mom; \ + fi + if test -d $(DESTDIR)$(htmldocdir)/mom; then \ + rmdir $(DESTDIR)$(htmldocdir)/mom; \ + fi + + +# Local Variables: +# fill-column: 72 +# mode: makefile-automake +# End: +# vim: set autoindent filetype=automake textwidth=72: diff --git a/contrib/mom/mom.tmac b/contrib/mom/mom.tmac new file mode 100644 index 0000000..7a6494b --- /dev/null +++ b/contrib/mom/mom.tmac @@ -0,0 +1,3 @@ +.\" -*- nroff -*- mom.tmac +.\" +.do mso om.tmac diff --git a/contrib/mom/momdoc/appendices.html b/contrib/mom/momdoc/appendices.html new file mode 100644 index 0000000..964a2ab --- /dev/null +++ b/contrib/mom/momdoc/appendices.html @@ -0,0 +1,901 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004-2020 Free Software Foundation, Inc. +Written by Peter Schaffter (peter@schaffter.ca). + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"/> + <title>Mom -- Appendices</title> + <link rel="stylesheet" type="text/css" href="stylesheet.css" /> +</head> + +<body style="background-color: #f5faff;"> + +<!-- ==================================================================== --> + +<div id="top" class="page"> + +<!-- Navigation links --> +<table style="width: 100%;"> +<tr> + <td><a href="toc.html">Back to Table of Contents</a></td> +</tr> +</table> + +<h1 id="appendices" class="docs">Appendices</h1> + +<div style="width: 68%; margin: auto;"> +<ul class="no-enumerator"> + <li><a href="#fonts">Adding fonts to groff</a> + <ul style="margin-left: -.5em; list-style-type: disc"> + <li><a href="#extending">Extending groff families / adding new families and fonts</a> + <ul style="margin-left: -.5em; list-style-type: circle"> + <li><a href="#traditional">The traditional approach</a></li> + <li><a href="#simpler">The simpler way with mom</a></li> + </ul></li> + <li><a href="#steps">Step-by-step instructions</a></li> + <li><a href="#install-font">Automate the whole process – the install-font script</a></li> + </ul></li> + <li><a href="#codenotes">Some reflections on mom</a></li> + <li><a href="#contact">Contact the author</a></li> +</ul> +</div> + +<div class="rule-medium"><hr/></div> + +<h2 id="fonts" class="docs">Adding fonts to groff</h2> + +<div id="small-note" class="box-tip"> +<p class="tip-top"> +<kbd><prefix></kbd>, in this section, refers +to the directory in which groff is installed, typically +<br/> +<span class="pre-in-pp"> + /usr/share/groff/ +</span> +(for distro-specific, pre-compiled groff packages) or +<br/> +<span class="pre-in-pp"> + /usr/local/share/groff/ +</span> +(if you’ve built groff from source). +</p> + +<p class="tip-bottom"> +<kbd><version></kbd> refers to the groff version number, which +can be found, if necessary, by typing +<br/> +<span class="pre-in-pp"> + groff -v +</span> +at the command line. +</p> +</div> + +<p> +Groff comes with a small library of +<a href="definitions.html#family">families</a> +(see the +<a href="typesetting.html#family">FAMILY</a> +macro for a list). The families have four +<a href="definitions.html#font">fonts</a> +associated with them. These fonts are a combination of +<a href="definitions.html#weight">weight</a> +and +<a href="definitions.html#shape">shape</a>: +<br/> +<span class="pre-in-pp"> + R (Roman, usually Medium weight), + I (Italic, usually Medium weight), + B (Bold, usually Roman shape) and + BI (Bold Italic) +</span> +If you work with mom a lot, sooner or later you’ll find that these +families and their associated fonts aren’t sufficient. You’ll +want to supplement them, either with more fonts for the families +already provided—<i>Damn! I need Helvetica Bold Condensed +Italic</i>—or with entire new families. +</p> + +<h3 id="extending" class="docs">Extending groff families / adding new families and fonts</h3> + +<h4 id="traditional" class="docs">The traditional approach</h4> + +<p> +The traditional approach to extending groff families has been +to create new families for non-default weights and shapes (e.g. +<b>Light</b>, which is a +<a href="definitions.html#weight">weight</a>, +or <b>Condensed</b>, which is a +<a href="definitions.html#shape">shape</a>), +then to associate them with groff’s predefined <b>R, +I, B</b> and <b>BI</b> font styles. An example of this +can be seen in the groff PostScript font library itself, which is +found in +<br/> +<span class="pre-in-pp"> + <prefix>/<version>/font/devps/ +</span> +There’s one “family” for Helvetica (<b>HR</b>, +<b>HI</b>, <b>HB</b>, <b>HBI</b>) and another for Helvetica Narrow +(<b>HNR</b>, <b>HNI</b>, <b>HNB</b>, <b>HNBI</b>). +</p> + +<p> +The difficulty with this approach is that typographers tend to +think of families as referring to the entire set of font weights +and shapes associated with a family name. For example, when +a typesetter says “the Helvetica family”, s/he is +including the weights Helvetica Thin, Helvetica Light, Helvetica +Regular, Helvetica Bold, Helvetica Heavy, etc, and all their +associated shapes (Roman, Italic, Condensed, Narrow, Extended, +Outline, etc). +</p> + +<p> +Thus, intuitively, when a typesetter gives mom a +<kbd>.FAMILY H</kbd> directive, s/he reasonably expects that +any subsequent <kbd>.FT</kbd> directive will access the desired font +from the Helvetica family—without the need to state explicitly +both family and font to <kbd>.FT</kbd>, as it is explained one can +do in the +<a href="typesetting.html#family">FAMILY</a> +and +<a href="typesetting.html#font">FT</a> +sections of these documents. +</p> + +<p> +If one had, say, Helvetica Light Roman and Helvetica Light Italic +as well as Helvetica Light Condensed Roman and Helvetica Light +Condensed Italic, the established groff approach would require two +“partial” families, <b>HL</b> (for Helvetica Light) +and <b>HLCD</b> (for Helvetica Light Condensed), with <b>R</b> and +<b>I</b> fonts for both: +<br/> +<span class="pre-in-pp"> + HLR + HLI + HLCDR + HLCDI +</span> +Accessing these family/font combos routinely +throughout a document would then require changing the family +(with <kbd>.FAMILY</kbd>) and selecting the desired font +(with <kbd>.FT R</kbd> or <kbd>.FT I</kbd>), or +passing <kbd>.FT</kbd> the lengthy family+fontname (.e.g. +<kbd>.FT HLCDI</kbd>). +</p> + +<h4 id="simpler" class="docs">The simpler way with mom</h4> + +<p> +Fortunately, groff provides a mechanism whereby it’s possible +to extend the basic <b>R</b>, <b>I</b>, <b>B</b>, and <b>BI</b> fonts +(“styles” in groff-speak) so that one can, in fact, +create extensive type families, and access all the fonts in them +with <kbd>.ft</kbd> (groff) or <kbd>.FT</kbd> (mom). +</p> + +<p> +Mom uses this mechanism to offer, in addition to groff’s +default font styles, the following: +</p> + +<div class="examples-container" style="padding-bottom: 1em;"> +<div id="style-extensions" style="width: 50%; float: left;"> +<span class="pre" style="font-size: 85%"> +UL = Ultra Light +ULI = Ultra Light Italic +ULCD = Ultra Light Condensed +ULCDI = Ultra Light Condensed Italic +ULEX = Ultra Light Extended +ULEXI = Ultra Light Extended Italic + +XL = Extra Light +XLI = Extra Light Italic +XLCD = Extra Light Condensed +XLCDI = Extra Light Condensed Italic +XLEX = Extra Light Extended +XLEXI = Extra Light Extended Italic + +TH = Thin +THI = Thin Italic +THCD = Thin Condensed +THCDI = Thin Condensed Italic +THEX = Thin Extended +THEXI = Thin Extended Italic + +L = Light Roman +LI = Light Italic +LCD = Light Condensed +LCDI = Light Condensed Italic +LEX = Light Extended +LEXI = Light Extended Italic + +BK = Book Roman +BKI = Book Italic +BKCD = Book Condensed +BKCDI = Book Condensed Italic +BKEX = Book Extended +BKEXI = Book Extended Italic + +CD = Medium Condensed +CDI = Medium Condensed Italic +EX = Medium Extended +EXI = Medium Extended Italic + +DB = DemiBold Roman +DBI = DemiBold Italic +DBCD = DemiBold Condensed +DBCDI = DemiBold Condensed Italic +DBEX = DemiBold Extended +DBEXI = DemiBold Extended Italic + +SB = SemiBold Roman +SBI = SemiBold Italic +SBCD = SemiBold Condensed +SBCDI = SemiBold Condensed Italic +SBEX = SemiBold Extended +SBEXI = SemiBold Extended Italic +</span> +</div> +<span class="pre" style="font-size: 85%"> +BCD = Bold Condensed +BCDI = Bold Condensed Italic +BEX = Bold Extended +BEXI = Bold Extended Italic +BO = Bold Outline + +XB = Extra Bold +XBI = Extra Bold Italic +XBCD = Extra Bold Condensed +XBCDI = Extra Bold Condensed Italic +XBEX = Extra Bold Extended +XBEXI = Extra Bold Extended Italic + +UB = Ultra Bold +UBI = Ultra Bold Italic +UBCD = Ultra Bold Condensed +UBCDI = Ultra Bold Condensed Italic +UBEX = Ultra Bold Extended +UBEXI = Ultra Bold Extended Italic + +HV = Heavy +HVI = Heavy Italic +HVCD = Heavy Condensed +HVCDI = Heavy Condensed Italic +HVEX = Heavy Extended +HVEXI = Heavy Extended Italic + +BL = Black +BLI = Black Italic +BLCD = Black Condensed +BLCDI = Black Condensed Italic +BLEX = Black Extended +BLEXI = Black Extended Italic +BLO = Black Outline + +XBL = Extra Black +XBLI = Extra Black Italic +XBLCD = Extra Black +XBLCDI = Extra Black +XBLEX = Extra Black Italic +XBLEXI = Extra Black Italic + +UBL = Ultra Black +UBLI = Ultra Black Italic +UBLCD = Ultra Black Condensed +UBLCDI = Ultra Black Condensed Italic +UBLEX = Ultra Black Extended +UBLEXI = Ultra Black Extended Italic + +SC = Small Caps Roman +SCI = Small Caps Italic +SCDB = Small Caps Demibold +SCDBI = Small Caps Demibold Italic +SCSB = Small Caps Semibold +SCSBI = Small Caps Semibold Italic +</span> +</div> + +<p style="clear: both;"> +Thus, with mom, if you’ve installed some extra +Helvetica fonts and named them according to the convention +<kbd><F><S></kbd> (where <kbd><F></kbd> means +family and <kbd><S></kbd> means font style), once having +entered +<br/> +<span class="pre-in-pp" style="margin-bottom: -1em;"> + .FAMILY H +</span> +you can access any of the extra Helvetica fonts simply by passing +the correct argument to +<a href="typesetting.html#font">FT</a> +from the list, above. For example, if you were working in Medium +Roman (<kbd>.FT R</kbd>) and you needed Medium Condensed Italic +for a while (assuming it’s installed), you’d just type +<br/> +<span class="pre-in-pp" style="margin-bottom: -1em;"> + .FT CDI +</span> +to access the Medium Condensed Italic font from the Helvetica +family. +</p> + +<p> +Mom’s list of font styles doesn’t pretend to be +exhaustive. The extension names are arbitrary and can be used in a +flexible manner. For example, if you create a family that has a +Demibold font (<b>DB</b>) but no Bold font (<b>B</b>), you might +find it more convenient to give the Demibold font the extension +“<b>B</b>”. +</p> + +<p id="register-style"> +You may, at needs, want to add to mom’s list of font styles. +You can do this by editing the file, om.tmac (typical location: +<kbd><prefix>/<version>/tmac/om.tmac</kbd>). Near the +top, you’ll see lines of the form +<br/> +<span class="pre-in-pp"> + .sty \n[.fp] XL \" Extra Light + .sty \n[.fp] L \" Light Roman + .sty \n[.fp] LI \" Light Italic + .sty \n[.fp] LCD \" Light Condensed Roman +</span> +Simply add your new font style by imitating what you see, above, +and plugging in your new font style (having, of course, +added the font to groff, correctly named); see +<a href="#steps">Step-by-step instructions</a>). +</p> + +<p> +For example, if you already have some fonts from the Univers family +installed and have called the family <b>Univers</b>, you might decide at +some point to add the Bold Outline font (<b>UniversBO</b>). In which +case, you’d add +<br/> +<span class="pre-in-pp"> + .sty \n[.fp] BO \" Bold Outline +</span> +to the <kbd>.sty \n[.fp] <font style></kbd> list +in om.tmac. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Mom’s font extensions are not “user-space” +controllable via a macro. If you’ve been using groff for +a long time, and have already rolled your own solution to adding +families and fonts to groff, you may find that mom’s font +extensions conflict with your own scheme. Should that be the case, +comment out the <kbd>.sty \n[.fp] <font style></kbd> +lines found near the top of the <kbd>om.tmac</kbd> file. +</p> +</div> + +<div class="box-important"> +<p class="tip"> +<span class="important">Important:</span> +Be careful that any styles you add do not conflict with +<i>family</i> names that already exist. “<b>C</b>”, +for example, conflicts with the Courier family (<b>CR</b>, +<b>CI</b>, <b>CB</b>, <b>CI</b>). Were you to create a font +style “<b>C</b>”, thinking that <kbd>.FT C</kbd> +would give you access to font style once you’d given a +<kbd>.FAMILY</kbd> directive, you’d get a nasty surprise: +your type would come out in Courier Roman! +</p> +</div> + +<div class="rule-medium"><hr/></div> + +<h2 id="steps" class="docs">Step-by-step instructions</h2> + +<div> +<ul class="no-enumerator" style="margin-left: -1.5em;"> + <li><a href="#need">What you need before you start</a></li> + <li><a href="#preparation">Initial preparation</a></li> + <li><a href="#step-1">1. Acquire the font</a></li> + <li><a href="#step-2">2. Prepare to convert the font to the correct format</a> + <ul style="margin-left: -.5em"> + <li><a href="#ttf">TTF fonts</a></li> + <li><a href="#type1">Type 1 fonts</a></li> + </ul></li> + <li><a href="#step-3">3. Convert the font and put it in the right place</a></li> + <li><a href="#step-4">4. Update the download file</a> + <ul style="margin-left: -.5em"> + <li><a href="#internal">Get the internal font name</a></li> + <li><a href="#add">Add the font to the download file</a></li> + <li><a href="#gropdf-download">Updating the gropdf download file</a></li> + </ul></li> + <li><a href="#groff-font-names">Naming groff fonts</a></li> + <li><a href="#install-font">Automate the whole process – the install-font script</a> + </li> +</ul> +</div> + + +<p> +There are a number of ways to approach making fonts available +to groff. These instructions aren’t meant to cover all +possibilities, merely one. +</p> + +<p> +GNU/Linux distributions being what they are, directory locations +may differ and the presence of some executable can’t be +guaranteed. I run a Debian-based system. The instructions reflect +that. Users of other distros may have to interpret them according +to the way their distro operates. +</p> + +<h3 id="need" class="docs appendices">What you need before you start</h3> + +<ul style="margin-top: 1em; margin-left: -.5em;"> + <li>groff, version 1.18 or higher<br/> + (Debian package: groff) + </li> + <li>ghostscript<br/> + (Debian package: ghostscript or ghostscript-x) + </li> + <li>fontforge<br/> + (Debian package: fontforge) + </li> +</ul> + +<h3 id="preparation" class="docs appendices">Initial preparation (you only need do this once)</h3> + +<ol id="site-font" style="margin-left: -1em;"> + <li> + Locate the groff directory, + <kbd class="nobr">site-font</kbd>. The exact location is + difficult to predict, owing to differences between distros and + whether you’re using a pre-packaged groff or have built + it from source. Some typical locations are: + <br/> + <span class="pre-in-pp" style="margin-bottom: -2em;"> + /usr/share/groff/ + /usr/local/share/groff/ + /etc/groff/ + </span> + If you can’t find the site-font directory, locate + groff’s <kbd class="nobr">site-tmac</kbd> directory, and, as root, + create site-font in the same directory. Eg, if you find + site-tmac in <kbd class="nobr">/usr/share/groff/</kbd>, create site-font in + <kbd class="nobr">/usr/share/groff/</kbd> + <br/> + <span class="pre-in-pp" style="margin-bottom: -2em;"> + sudo mkdir site-font + </span> + </li> + <li> + Create two files, generate-t42.pe and generate-pfa.pe, + as you see them below. Place them in a convenient and + easily-remembered location, like your home directory. + <br/> + <span class="examples" style="font-size: 95%; display: block; margin-top: .5em;">generate-t42.pe</span> + + <div class="examples-container" style="margin-top: 0; margin-bottom: -1em; padding-bottom: 1em;"> +<span class="pre"> +# generate-t42.pe + +Open($1); +Generate($fontname + ".pfa"); +Generate($fontname + ".t42"); +</span> + </div> + <br/> + <span class="examples" style="font-size: 95%; display: block; margin-top: .5em;">generate-pfa.pe</span> + <div class="examples-container" style="margin-top: 0; padding-bottom: 1em;"> +<span class="pre"> +# generate-pfa.pe + +Open($1); +Generate($fontname + ".pfa"); +</span> + </div> + </li> +</ol> + +<h3 id="step-1" class="docs appendices">Step 1: Acquire the font</h3> + +<p class="top"> +The two most commonly available types of fonts are PostScript Type1 +(extension .pfb) and TrueType (extension .ttf). Either can be made +available to groff. There are many websites holding collections of +both. +</p> + +<h3 id="step-2" class="docs appendices">Step 2: Prepare to convert the font to the correct format</h3> + +<p class="top"> +Change into the directory holding the new font. +</p> + +<p> +For convenience in the next step, make a symbolic link to +the file 'textmap': +<br/> +<span class="pre-in-pp"> + ln -s <prefix>/<version>/font/devps/generate/textmap . +</span> +See +<a href="#small-note">here</a> +for an explanation of <kbd><prefix></kbd> +and <kbd><version></kbd>. +</p> + +<p> +In addition, unless you’re installing fonts from your home +directory, make links to the files 'generate-t42.pe' and +'generate-pfa.pe'. +<br/> +<span class="pre-in-pp"> + ln -s $HOME/generate-t42.pe . + ln -s $HOME/generate-pfa.pe . +</span> +</p> + +<h3 id="step-3" class="docs appendices">Step 3: Convert the font and put it in the right place</h3> + +<p class="top"> +TrueType fonts (.ttf) need to be converted to .t42. Type 1 fonts +(.pfa, .pfb) need to be converted to .pfa. +</p> + +<h4 id="ttf" class="docs" style="font-size: 90%; text-transform: uppercase;"> • Converting TTF Fonts</h4> + +<p class="top" style="margin-top: .5em;"> +For .ttf fonts, run +<br/> +<span class="pre-in-pp"> + fontforge -script generate-t42.pe <file>.ttf +</span> +This will create three new files with the extensions .t42, .pfa, and +.afm. Next, run +<br/> +<span class="pre-in-pp"> + afmtodit <afm file> textmap <groff font> +</span> +This will create a groff font with the name you give. (See +<a href="#groff-font-names">here</a> +for advice on naming groff fonts.) +</p> + +<p> +Move the .t42 and groff font files to +<kbd class="nobr"><prefix>/site-font/devps/</kbd>. +</p> + +<p> +If you’re running a recent version of groff that includes +the native pdf device (gropdf), move the .pfa file to <kbd +class="nobr"><prefix>/site-font/devpdf/</kbd>. If not, you +may safely remove it. You may also safely remove the .afm file. +</p> + +<h4 id="type1" class="docs" style="font-size: 90%; text-transform: uppercase;"> • Converting Type1 Fonts</h4> + +<p class="top" style="margin-top: .5em;"> +For .pfb fonts, run +<br/> +<span class="pre-in-pp"> + fontforge -script generate-pfa.pe <file>.pfb +</span> +This will create two new files with the extensions .pfa, and .afm. +Next, run +<br/> +<span class="pre-in-pp"> + afmtodit <afm file> textmap <groff font> +</span> +Move the .pfa and groff font files to +<kbd class="nobr"><prefix>/<site-font>/devps/</kbd>. +(See +<a href="#groff-font-names">here</a> +for advice on naming groff fonts.) +</p> + +<p> +If you’re running a recent version of groff that includes the +native pdf device (gropdf), link the .pfa and groff font files, now +in <kbd class="nobr"><prefix>/<site-font>/devps/</kbd>, +to the <kbd class="nobr"><prefix>/site-font/devpdf</kbd> +directory. +</p> + +<p> +Start by changing into the +<kbd class="nobr"><prefix>/site-font/devpdf/</kbd> +directory, then: +<br/> +<span class="pre-in-pp"> + ln -s <prefix>/<site-font>/devps/<file>.pfa . + ln -s <prefix>/<site-font>/devps/<groff font> . +</span> +You may safely remove the .afm file. +</p> + +<h3 id="step-4" class="docs appendices">Step 4: Update the download file</h3> + +<h4 id="internal" class="docs" style="font-size: 90%; text-transform: uppercase;"> • Get the internal font name</h4> + +<p class="top" style="margin-top: .5em;"> +Inspect your new groff font file. Near the top, you will see a line +of the form +<br/> +<span class="pre-in-pp"> + internalname <name> +</span> +Usually, the internal name is helpfully descriptive, e.g. +<br/> +<span class="pre-in-pp"> + internalname Optima-Bold +</span> +Make a note of the internal name. +</p> + +<h4 id="add" class="docs" style="font-size: 90%; text-transform: uppercase;"> • Add the font to the download file</h4> + +<p class="top" style="margin-top: .5em;"> +If a file called ‘download’ is not already present in +<kbd class="nobr"><prefix>/site-font/devps/</kbd>, +copy over the one found in +<kbd class="nobr"><prefix>/<version>/font/devps/</kbd>. +</p> + +<p> +The download file maps the internal names used by groff to the +actual fonts. To add your new font to the download file, append a +line containing the internal name, followed by a tab (make sure your +text editor is inserting the tab character, not spaces), followed by +the .t42 or .pfa font to which the internal name refers. +</p> + +<p> +For example, if the internal name is Optima-Bold and the font is a +.pfa file called Optima-Bold.pfa, your updated download file will +contain +<br/> +<span class="pre-in-pp"> + Optima-Bold<tab>Optima-Bold.pfa +</span> +</p> + +<h4 id="gropdf-download" class="docs" style="font-size: 90%; text-transform: uppercase;"> • Updating the gropdf download file</h4> + +<p class="top" style="margin-top: .5em;"> +If you’re running a recent version of groff that includes +the native pdf device (gropdf), you must update the +<kbd class="nobr"><prefix>/site-font/devpdf/download</kbd> +file as well. If it does not exist, create it. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Start with a blank ‘download’ file. Do not copy +over the ‘download’ file from +<kbd class="nobr"><prefix>/<version>/font/devpdf/</kbd>. +</p> +</div> + +<p> +The instructions for registering fonts in the +<kbd class="nobr"><prefix>/site-font/devpdf/</kbd> download +file are identical to those for PostScript fonts (see above), but +with one important difference: the lines must all begin with a tab +character. Thus, using our Optima example, your +<kbd class="nobr"><prefix>/site-font/devpdf/download</kbd> +file download line for the same font is +<br/> +<span class="pre-in-pp"> + <tab>Optima-Bold<tab>Optima-Bold.pfa +</span> +</p> + +<h3 id="groff-font-names" class="docs appendices">Naming groff fonts</h3> + +<p class="top"> +For convenience when using mom, and to keep your font collection +organized, choose meaningful groff font names following the scheme +<Family><FONT>, where Family is something +like Optima or Univers or Clarendon, and FONT is either +<br/> +<span style="display: block; margin-left: 2em;"> +<kbd>R </kbd>(roman/regular) +<br/> +<kbd>I </kbd>(italic) +<br/> +<kbd>B </kbd>(bold) +<br/> +<kbd>BI </kbd>(bold italic) +</span> +or one of the 1–5 character fontstyles listed +<a href="#style-extensions">here</a>. +Thus, for the fonts Optima Light Italic and Optima Extra Black, your font names would be +<br/> +<span class="pre-in-pp"> + OptimaLI + OptimaXBL +</span> +This scheme allows you to enter <kbd>.FAMILY Optima</kbd> to make +Optima the current family, and <kbd>.FT LI</kbd> or <kbd>.FT XBL</kbd> +when you need the fonts Light Italic or Extra Black. +</p> + +<p> +Groff font names are, in fact, arbitrary; you can call your fonts +anything you like, provided the +<a href="#internal">internal name</a> +in the +<a href="#add">download file</a> +matches the internal name found in the groff font file. When +calling a font that does not follow the recommended naming convention, +you must pass the full font name to <kbd>.FT</kbd> whenever you wish +to use it. +</p> + +<p> +For example, the font, Goudy Stout, isn’t really part of the +Goudy family, and while "stout" describes it, Stout is not a +recognized font style. Therefore, its groff name could simply be +GoudyStout, and whenever you needed it, you could call it with +<kbd>.FT GoudyStout</kbd>. +</p> + +<h3 id="install-font" class="docs appendices">Automate the whole process – the install-font script</h3> + +<p> +A bash script to make the entire process of installing fonts a +painless no-brainer has been posted online at +<a href="https://www.schaffter.ca/mom/bin/install-font.sh">https://www.schaffter.ca/mom/bin/install-font.sh</a>. +Be sure to make the script executable +(<kbd class="nobr">chmod 755 install-font</kbd>) +after you download it, then type <kbd>./install-font.sh -H</kbd> for +usage. +</p> + +<div class="rule-medium" style="margin-top: 2em;"><hr/></div> + +<!-- ===================================================================== --> + +<h2 id="codenotes" class="docs">Some reflections on mom</h2> + +<p> +If, as Eric Raymond asserts, open source begins with a programmer +scratching a personal itch, then mom can truly be called open +source. +</p> + +<p> +Mom had her origins in a library of groff routines I wrote over +the years to handle various aspects of typesetting and document +processing that weren’t adequately covered by ms, me, mm, and +friends. Typically, I’d use the library to cobble together +macro sets for new challenges as they came my way. +</p> + +<p> +As a writer living in a perpetual state of penury, all the computers +I’ve ever owned have been hand-me-downs—several +generations out-of-date and resource challenged. Disk space has +always been an issue, as has processor speed and available RAM. One +of the reasons I run GNU/Linux rather than the offering from Redmond +is that it has helped enormously to get the most out of my poor +little boxes. +</p> + +<p> +In Linux-land (all Unix variants, in fact), the choice of +typesetting systems basically comes down to groff or TeX. Both are +wonderful—monumental achievements if you ask me—and both +have their own particular strengths. However, for people in my +financial position (and there are millions of us around the globe, +in both developed and developing countries), TeX and groff have one +big difference: size. TeX is huge. Even its most ardent supporters +agree it suffers from bloat, on top of being complex and unwieldy to +manage. Groff is tiny by comparison, occupying minimal disk space +and having only a small memory footprint while at the same time +being flexible and powerful, typographically speaking. Back in the +Jurassic Period, I ran it successfully on a 386 with 8 megs of RAM +and a 250 meg hard disk. +</p> + +<p> +However, groff has always had a liability: it’s incredibly geeky. +Owing to its very long history, it—and its power users +—seem to have remained stuck in a time warp. The canonical macro packages +still look as they did back in those decades when memory was exorbitantly +expensive and every byte mattered. +</p> + +<p> +For some time now, groff users and macro writers have had the option +to use “long” names for macros (i.e. longer than two +letters, the original limit), yet have mostly chosen not to. With +long names, it’s possible to create macro sets that are +humanly readable and easy to interpret, encouraging development and +evolution. What’s more, the macros themselves need not be +terse, intimidating, and easily forgotten 1- or 2-letter commands +inserted in the body of a document. They can be sensible and +helpful to everyone, groff newbies and old hands alike. +</p> + +<p> +Mom’s macro file, om.tmac, uses long names, aliases, and a +host of other groff goodies that have become part of the whole groff +picture. The function of nearly every macro, number register and +string can be inferred simply from its name. The file is heavily +commented. A consistent, if idiosyncratic, indenting style is used +as well, significantly improving readability. Anyone wanting to +futz around with mom’s macros should be able to do so with a +minimum of head scratching. +</p> + +<div class="rule-medium"><hr/></div> + +<!-- ===================================================================== --> + +<h2 id="contact" class="docs">Contact the author</h2> + +<p> +If you have any questions or comments about mom, suggestions to +make, criticisms to offer, or bugs to report, use the groff mailing +list (subscription information available +<a href="http://www.gnu.org/software/groff/groff.html">here</a>) +or contact me, Peter Schaffter, directly at the following +address: +<br/> +<span class="pre-in-pp"> + peter@schaffter.ca +</span> +Please include the word “mom” or “groff” in +the Subject line of any message sent to my personal address or you +risk the wrath of my implacable spam filters. +</p> + +<p> +If you want to visit mom’s website, you’ll find a link +to it at +<br/> +<span class="pre-in-pp"> + https://www.schaffter.ca +</span> +The site contains links to some of my fiction, all of which was +typeset with mom and groff. +</p> + +<div class="rule-long"><hr/></div> + +<!-- Navigation links --> +<table style="width: 100%; margin-top: 12px;"> +<tr> + <td style="width: 33%;"><a href="toc.html">Back to Table of Contents</a></td> + <td style="width: 100%; text-align: right;"><a href="#top">Top</a></td> +</tr> +</table> + +</div> + +<div class="bottom-spacer"><br/></div> + +</body> +</html> diff --git a/contrib/mom/momdoc/color.html b/contrib/mom/momdoc/color.html new file mode 100644 index 0000000..f53b5c0 --- /dev/null +++ b/contrib/mom/momdoc/color.html @@ -0,0 +1,505 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004-2020 Free Software Foundation, Inc. +Written by Peter Schaffter (peter@schaffter.ca). + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"/> + <title>Mom -- Colour</title> + <link rel="stylesheet" type="text/css" href="stylesheet.css" /> +</head> + +<body style="background-color: #f5faff;"> + +<!-- ==================================================================== --> + +<div id="top" class="page"> + +<!-- Navigation links --> +<table style="width: 100%;"> +<tr> + <td><a href="toc.html">Back to Table of Contents</a></td> + <td style="text-align: right;"><a href="graphical.html#top">Next: Graphical objects</a></td> +</tr> +</table> + +<h1 class="docs">Coloured text</h1> + +<div style="text-align: center;"> +<a href="#index-color">List of color macros</a> +</div> + +<div class="rule-medium"><hr/></div> + +<h2 class="docs">Introduction</h2> + +<p> +Mom’s support for coloured text is straightforward. You begin +by telling mom about the colours you want with +<a href="#newcolor">NEWCOLOR</a> +or +<a href="#xcolor">XCOLOR</a>. +Afterwards, any time you want text to be coloured, you either colour +it with an +<a href="definitions.html#inlines">inline escape</a> +that contains the colour name (e.g. <kbd><span class="nobr">\*[red]</span></kbd> +or <kbd><span class="nobr">\*[blue]</span></kbd>) or invoke the macro +<a href="#color">COLOR</a> +with the name of the colour you want. +</p> + +<p id="color-example"> +For example, say you want to have the name “Jack” in the +sentence “All work and no play makes Jack a dull boy” +appear in yellow. You’d begin by telling mom about the colour, +yellow. There are two ways of doing this; see +<a href="#newcolor">NEWCOLOR</a> +and +<a href="#xcolor">XCOLOR</a> +for a full explanation of the difference between the two. +</p> + +<p> +If you use XCOLOR, you’d enter this: +<br/> +<span class="pre-in-pp"> + .XCOLOR yellow +</span> +If you use NEWCOLOR, you might enter: +<br/> +<span class="pre-in-pp"> + .NEWCOLOR yellow RGB #FFFF00 +</span> +</p> + +<p id="color-example2" style="margin-top: -1em;"> +After defining or initializing the colour yellow you’d +colourise the name, Jack, either with an inline escape +<br/> +<span class="pre-in-pp"> + All work and no play makes \*[yellow]Jack\*[black] a dull boy. +</span> +or with the +<a href="#color">COLOR</a> +macro +<br/> +<span class="pre-in-pp"> + All work and no play makes + .COLOR yellow + Jack + .COLOR black + a dull boy. +</span> +Notice, in both examples, that a) you have to set the colour back +to black after “Jack,” and b) you don’t have to +define or initialize the colour, black. Mom predefines it for you. +</p> + +<p> +For information on using colour during +<a href="docprocessing.html#intro-macros-docprocessing">document processing</a>, +see +<a href="docprocessing.html#color">Colour support in document processing</a>. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Mom’s colour support is for text only. She doesn’t +support “fill” (or “background”) colour for +solid, enclosed graphical objects (polygons, ellipses) drawn with +groff’s <kbd>\D</kbd> +<a href="definitions.html#inlines">inline escapes</a>, +although you may give a colour as one of the arguments to +mom’s “box” and “circle” macros, +<a href="graphical.html#dbx">DBX</a> +and +<a href="graphical.html#dcl">DCL</a> +when the first argument to these macros is <kbd>SOLID</kbd>. +</p> +</div> + +<div class="box-tip"> +<p class="tip"> +<span class="experts">Experts:</span> +If you’re accustomed to using groff’s +<kbd>.defcolor</kbd> to define colours, and groff’s inline +<kbd>\m[<colorname>]</kbd> to call them, you may continue to +do so without confusing mom. +</p> +</div> + +<div class="macro-list-container"> +<h3 id="index-color" class="macro-list">Coloured text macros</h3> + +<ul class="macro-list"> + <li><a href="#newcolor">NEWCOLOR</a></li> + <li><a href="#xcolor">XCOLOR</a></li> + <li><a href="#color">COLOR</a></li> + <li><a href="#color-inline">\*[<colourname>]</a> (inline escape)</li> +</ul> +</div> + +<div class="rule-medium" style="margin-bottom: 1.5em;"><hr/></div> + +<!-- -NEWCOLOR- --> + +<div class="macro-id-overline"> +<h3 id="newcolor" class="macro-id">Creating (initializing) a colour with NEWCOLOR</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>NEWCOLOR</b> <kbd class="macro-args"><colour name> [<colour scheme>] <colour components></kbd> +</div> + +<p> +NEWCOLOR lets you create a colour, rather like an artist mixing +paint on a palette. The colour isn’t used immediately; +NEWCOLOR merely tells mom how to mix the colour when you need it. +If you haven’t invoked <kbd>.NEWCOLOR</kbd> (or +<kbd><a href="#xcolor">.XCOLOR</a></kbd>), +mom doesn’t have a clue what you mean when you reference a +colour (with +<a href="#color">COLOR</a> +or +<a href="#color-inline"><kbd><span class="nobr">\*[<colour name>]</span></kbd></a>). +</p> + +<p> +The first argument to NEWCOLOR is a name for your colour. It +can be anything you like—provided it’s just one word +long—and can be caps, lower case, or any combination of the +two. +</p> + +<p> +The second argument, which is entirely optional, is the +“colour scheme” you want mom to use when mixing the +colour. Valid arguments are +<br/> +<span class="pre-in-pp"> + RGB (3 components: red green blue) + CYM (3 components: cyan yellow magenta) + CMYK (4 components: cyan magenta yellow black) + GRAY (1 component) +</span> +If you omit the second argument, mom assumes you +want RGB. +</p> + +<p> +The final argument is the components of your colour. This can be +hexadecimal string starting with a pound sign (<kbd>#</kbd>) (for +colour values in the 0-255 range) or two pound signs (<kbd>##</kbd>) +(for colour values in the 0-65535 range), or it can be a series of +decimal digits, separated by spaces, one digit per component, with +the argument enclosed in double quotes. (If this is all gibberish +to you, see +<a href="#color-tip">Tips for newbies</a>.) +</p> + +<p> +Thus, to tell mom about a colour named “YELLOW”, you +could enter one of the following: +<br/> +<span class="pre-in-pp"> + .NEWCOLOR YELLOW #FFFF00 \"or ##FFFFFFFF0000 or "1 1 0" + .NEWCOLOR YELLOW RGB #FFFF00 \"or ##FFFFFFFF0000 or "1 1 0" + .NEWCOLOR YELLOW CMY #0000FF \"or ##0000FFFF0000 or "0 0 1" + .NEWCOLOR YELLOW CMYK #0000FF00 \"or ##00000000FFFF0000 or "0 0 1 0" +</span> +After you’ve told mom about a colour, you can then get her to +set text in that colour either with the +<a href="definitions.html#inlines">inline escape</a>, +<a href="#color-inline"><kbd><span class="nobr">\*[<colourname>]</span></kbd></a>, +or the macro +<a href="#color">COLOR</a>. +(See the +<a href="#color-example">example</a>, +above.) +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="note">Note:</span> +The colourname you give to NEWCOLOR may be used with groff’s +<kbd>\m[<colourname>]</kbd> inline escape (the <kbd>\m</kbd> +escape is used to set text and rule colours). Thus, assuming +a colourname “blueblack” set with NEWCOLOR, +<kbd><span class="nobr">\*[blueblack]</span></kbd> and <kbd>\m[blueblack]</kbd> +are equivalent. Furthermore, the colourname can be given as an +argument to <b>groff</b>’s +<a href="definitions.html#primitives">primitive</a> +request, <kbd>.gcolor</kbd> (which does the same thing as +<kbd>\m[<colourname>]</kbd>). +</p> + +<p class="tip-bottom"> +Equally, the colourname may be used with +<kbd>\M[<colourname>]</kbd> and <kbd>.fcolor</kbd>, which set +the “fill” colour for solid graphical objects. +</p> +</div> + +<div class="box-tip"> +<p id="color-tip" class="tip-top"> +<span class="tip">Tips for newbies:</span> +Colour manipulation can be tremendously confusing if you don’t +have a background in graphic arts or computing. My advice, if colour +intimidates you, is to stick to using mom’s default RGB colour +scheme, and to fire up a colour chooser that gives you the RGB values +you want for the colour you select. Plug those values into the +components argument to NEWCOLOR, and you’ll get the colour +you want. Both the KDE and gnome desktops have colour selectors +that provide you with the shorter RGB hexadecimal string. If +you’re not running KDE or gnome, the X utility, xcolorsel, +provides you with a similar functionality, although it only provides +RGB values for 256 pre-defined colours. If you use xcolorsel, be +sure to click the button “Display format” and select +“8 bit truncated rgb”. +</p> + +<p class="tip-bottom"> +Alternatively, you can use mom’s simpler +<kbd><a href="#xcolor">XCOLOR</a></kbd> +macro to initialize one of the 256 pre-defined X colours by +supplying the name of the colour as an argument. +</p> +</div> + +<!-- -XCOLOR- --> + +<div class="macro-id-overline"> +<h3 id="xcolor" class="macro-id">Initializing a colour with XCOLOR</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>XCOLOR</b> <kbd class="macro-args"><X colourname> [<alias>]</kbd> +</div> + +<p class="requires"> +<kbd style="font-style: normal"><X colourname></kbd> <i>must be all one word, all lower case.</i> +<br/> +(See +<a href="#xcolor-names" style="font-style: normal;">Finding X colour names</a> +for how to get a list of valid colour names.) +</p> + +<p> +XCOLOR is similar to NEWCOLOR in that it tells mom to initialize a +colour, but it’s easier to use. All you have to do is pass +it, as an argument, the valid name of one of the 256 pre-defined +X colours. The name must be all one word, and, breaking with mom +policy, it must be entered in lower case. +</p> + +<p> +For example, if you want to initialize the X colour, coral, all you +have to do is enter +<br/> +<span class="pre-in-pp"> + .XCOLOR coral +</span> +Afterwards +<br/> +<span class="pre-in-pp"> + .COLOR coral +</span> + +will colourise subsequent text coral until you instruct mom to +return to black, or some other pre-defined, initialized colour. +(The +<a href="definitions.html#inlines">inline escape</a> +<kbd><span class="nobr">\*[coral]</span></kbd> will equally colourise text coral +after you’ve initialized the colour with XCOLOR.) +</p> + +<p> +The downside of XCOLOR is that you can’t create custom +colours. This restriction, however, is mitigated by the fact that +for many users, 256 colours is more than enough to play around with. +</p> + +<p> +While some X colours have fanciful names (peachpuff, papayawhip, +thistle, snow), many are self-explanatory and self-descriptive +in ordinary colour terms. “blue” is pure (rgb) +blue, “green” is pure (rgb) green, and so on. +Furthermore, for many X colours, there exist four variants, each +representing increasingly darker shades of the same colour. +For example, “blue1” is a relatively bright blue; +“blue2”, “blue3” and “blue4” are +increasingly darker shades. For that reason, you may find XCOLOR is +a better choice than NEWCOLOR when it comes to initializing common +colours. +</p> + +<p> +The whimsical nature of X colour names sometimes makes for names +that are long to type in, e.g. “mediumspringgreen”. The +optional second argument to XCOLOR allows you to come up with more +convenient name by which to reference the colour. For example, you +could enter +<br/> +<span class="pre-in-pp"> + .XCOLOR mediumspringgreen mygreen +</span> +or +<span class="pre-in-pp"> + .XCOLOR mediumspringgreen MYGREEN +</span> +so that whenever you want text mediumspringgreen-ed, you can use +either <kbd>.COLOR mygreen</kbd> (or <kbd>.COLOR MYGREEN</kbd>) +or the inline escape +<kbd>\*[mygreen]</kbd> (or <kbd>\*[MYGREEN]</kbd>.) +</p> + +<h3 id="xcolor-names" class="docs">Finding X colour names</h3> + +<p> +There are two ways of finding the names of the pre-defined X +colours. One is to consult the file, rgb.txt, included with all +X11 installations. The location of the file on a Debian GNU/Linux +distribution is typically /etc/X11/rgb.txt. Other distributions and +other X installations may have the file in another location. The +file lists the colour names, but doesn’t show you what the +colours actually look like. +</p> + +<p> +A better way to get the colour names, as well as to see what the +colours look like, is to fire up a colour chooser (like xcolorsel) +that both lists the colour names and shows a swatch of the colour +as well. +</p> + +<p> +Whichever method you use to find X colour names, remember that the +names, passed as arguments to XCOLOR, must be all one word, all in +lower case. +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="note">Note:</span> +Both the colourname and the alias you give to XCOLOR may be +used with groff’s <kbd>\m[<colourname>]</kbd> +inline escape (the <kbd>\m</kbd> escape is used to set +text and rule colours). Thus, assuming an X-colourname +“mediumspringgreen” set with +XCOLOR, and an alias, “mygreen”, +<kbd><span class="nobr">\*[mediumspringgreen]</span></kbd>, +<kbd><span class="nobr">\m[mediumspringgreen]</span></kbd>, +<kbd><span class="nobr">\*[mygreen]</span></kbd> and +<kbd><span class="nobr">\m[mygreen]</span></kbd> are all equivalent. +Furthermore, both the colourname and the alias can be given as an +argument to groff’s +<a href="definitions.html#primitives">primitive</a> +request, <kbd>.gcolor</kbd> (which does the same thing as +<kbd><span class="nobr">\m[<colourname>]</span></kbd>). +</p> + +<p class="tip-bottom"> +The colourname initialized with XCOLOR <i>but not the +alias</i> may also be used with groff’s inline escape, +<kbd>\M[<colorname>]</kbd>, and the corresponding primitive, +<kbd>.fcolor</kbd>, both of which set the “fill” colour +for solid graphical objects. If you need a colour initialized with +XCOLOR for <kbd>\M</kbd> or <kbd>.fcolor</kbd>, you MUST give the +full colourname; the alias won’t work. +</p> +</div> + +<!-- -COLOR- --> + +<div class="macro-id-overline"> +<h3 id="color" class="macro-id">Invoking a colour</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>COLOR</b> <kbd class="macro-args"><colourname></kbd> +</div> + +<p id="color-inline" class="requires" style="font-style: normal;"> +Inline: <kbd>\*[<colourname>]</kbd> +</p> + +<p> +Once you’ve told mom about a colour (via +<a href="#newcolor">NEWCOLOR</a> +or +<a href="#xcolor">XCOLOR</a>, +you use either the macro COLOR or the +<a href="definitions.html#inlines">inline escape</a>, +<kbd><span class="nobr">\*[<colourname>]</span></kbd>, to cause mom to set +subsequent text in that colour. See the +<a href="#color-example2">example</a>, +above, which shows both in action. +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="note">Note:</span> +You can use the <kbd><span class="nobr">\*[<colourname>]</span></kbd> +inline escape in any +<a href="docprocessing.html#top">document processing</a> +macro that takes a +<a href="definitions.html#stringargument">string argument</a>. +However, you must remember to reset the colour at the end of the +argument (typically with <kbd><span class="nobr">\*[black]</span></kbd>) unless +you want all subsequent invocations of that particular macro to be +colourised. +</p> + +<p> +Furthermore, if you use +<kbd><span class="nobr">\*[<colourname>]</span></kbd> in the string +argument passed to +<a href="docelement.html#heading">HEADING <n></a> +and you’ve requested that the heading level be numbered, the +numbers themselves will not be colourised, only the text you pass to +the macro. If you wish the numbers to be colourised along with the +text, you must explicitly tell mom with +<a href="docelement.html#heading-style">HEADING_STYLE <n></a>. +</p> + +<p class="tip-bottom"> +For colourising underscored text, see +<a href="goodies.html#underscore-color">Colourising underscored text</a> +in the notes at the end of +<a href="goodies.html#underscore">UNDERSCORE</a>. +</p> +</div> + +<div class="rule-long"><hr/></div> + +<!-- Navigation links --> +<table style="width: 100%; margin-top: 12px;"> +<tr> + <td style="width: 33%;"><a href="toc.html">Back to Table of Contents</a></td> + <td style="width: 33%; text-align: center;"><a href="#top">Top</a></td> + <td style="width: 33%; text-align: right;"><a href="graphical.html#top">Next: Graphical objects</a></td> +</tr> +</table> + +</div> + +<div class="bottom-spacer"><br/></div> + +</body> +</html> diff --git a/contrib/mom/momdoc/cover.html b/contrib/mom/momdoc/cover.html new file mode 100644 index 0000000..7efee1f --- /dev/null +++ b/contrib/mom/momdoc/cover.html @@ -0,0 +1,851 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004-2020 Free Software Foundation, Inc. +Written by Peter Schaffter (peter@schaffter.ca). + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"/> + <title>Mom -- Document processing, creating cover pages</title> + <link rel="stylesheet" type="text/css" href="stylesheet.css" /> +</head> + +<body style="background-color: #f5faff;"> + +<!-- ==================================================================== --> + +<div id="top" class="page"> + +<!-- Navigation links --> +<table style="width: 100%;"> +<tr> + <td><a href="toc.html">Back to Table of Contents</a></td> + <td style="text-align: right;"><a href="tables-of-contents.html#top">Next: Tables of contents</a></td> +</tr> +</table> + +<h1 class="docs">Creating cover pages</h1> + +<div style="width: 66%; margin: auto;"> +<ul class="no-enumerator"> + <li><a href="#cover-intro">Introduction to cover pages</a> + <ul style="margin-left: -.5em; list-style-type: disc;"> + <li><a href="#important-note">Important note</a></li> + <li><a href="#desc">Description of cover pages</a></li> + <li><a href="#pagination">Headers/footers/pagination</a> + <ul style="margin-left: -1.25em; list-style-type: circle;"> + <li><a href="#pagination">DOC_COVERS_COUNT_PAGES</a></li> + <li><a href="#pagination">COVERS_COUNT_PAGES</a></li> + </ul> + </li> + <li><a href="#design">Designing your own cover pages</a></li> + <li><a href="#persistence">Persistence of data and formatting</a></li> + </ul></li> + <li><a href="#index-covers">Doc-cover and cover macros</a> + <ul style="margin-left: -.5em; list-style-type: disc;"> + <li><a href="#cover">DOC_COVER / COVER</a> + <ul style="margin-left: -1.25em; list-style-type: circle;"> + <li><a href="#cover-args">The argument list: saying what goes on doc cover and cover pages</a></li> + <li><a href="#meanings">What the arguments mean</a></li> + <li><a href="#chapter">How the CHAPTER argument and friends work</a></li> + </ul></li> + <li><a href="#covertext">DOC_COVERTEXT / COVERTEXT</a> + <ul style="margin-left: -1.25em; list-style-type: circle;"> + <li><a href="#placement">Placement</a></li> + </ul> + </li> + <li><a href="#coverimages">DOC_COVER_IMAGE / COVER_IMAGE</a> + <ul style="margin-left: -1.25em; list-style-type: circle;"> + <li><a href="#positioning">Positioning of doc cover and cover images</a></li> + </ul> + </li> + </ul></li> + <li><a href="#on-off">Enabling/disabling automatic generation of cover pages</a></li> + <li><a href="#cover-control">Control macros for covers and doc covers</a></li> +</ul> +</div> + +<div class="rule-medium"><hr/></div> + +<h2 id="cover-intro" class="docs">Introduction to cover pages</h2> + +<p> +Though identical in treatment, mom provides two kinds of cover +pages: document cover pages (”doc covers”) and section +cover pages (“covers”). Section cover pages are +analogous to title pages. +</p> + +<p> +A doc cover is what you’d most likely use at the start of a +collated document, where you might want the name of the complete +document, the author(s) and the copyright line to appear. Another +place you might use a doc cover is for a novel, where you want the +title of the novel, not the chapter title or chapter number, as the +first cover page. +</p> + +<p> +A cover is what you’d use for pages that separate sections +of a collated document, i.e. title pages. A cover page (but not a +doc cover) in a collated document could, for example, simply read: +”PART 1”. +</p> + +<p> +In non-collated documents (say, an essay) you can use either a cover +or doc cover to generate the cover sheet. +</p> + +<p> +In addition, nothing prevents you from generating both a doc cover +and a cover for every document in a collated document. Or you can +selectively disable the automatic generation of either doc covers or +covers in a collated document on-the-fly. +</p> + +<div id="important-note" class="box-important"> +<p class="tip"> +<span class="important">Important note:</span> +Automatic generation of covers or doc covers after the first one(s) +only takes place if you are working with collated documents. Mom +provides no mechanism for saying ”print a section cover +here even though I’m still working on the same (non-collated) +document.” +</p> +</div> + +<h3 id="desc" class="docs">Description of cover pages</h3> + +<p> +By default, mom typesets covers and doc covers identically to +<a href="definitions.html#docheader">docheaders</a> +(see +<a href="docprocessing.html#docheader-control">How to change the look of docheaders</a> +for a description of what a docheader looks like). The only +differences are +</p> +<ul style="margin-top: -.5em; margin-bottom: -.5em;"> + <li>the position on the page where the information is output</li> + <li>the (optional) addition of copyright and miscellaneous information</li> + <li>there’s no running text underneath, although you can add text + to a cover or doc cover (for example, an Abstract) with + <a href="#covertext">COVERTEXT</a> + </li> +</ul> + +<p> +You tell mom what you want to appear on cover pages through the +arguments you pass to +<a href="#cover">DOC_COVER</a> +and/or +<a href="#cover">COVER</a>. +Provided you have already given mom the appropriate reference macros +(e.g. +<a href="docprocessing.html#title">TITLE</a> +or +<a href="docprocessing.html#author">AUTHOR</a>), +she will output covers and doc covers identically to how she +would output docheaders containing the same information. +</p> + +<p> +By default, mom starts covers and doc covers one-third of the way +down the page. This can be changed through the use of the control +macros DOC_COVER_START_POS / COVER_START_POS (or DOC_COVER_ADVANCE / +COVER_ADVANCE). +</p> + +<p> +If you request copyright information (and have already given mom the +reference macro +<a href="docprocessing.html#copyright">COPYRIGHT</a>) +she sets it, by default, in a smaller +<a href="definitions.html#ps">point size</a> +in the bottom right hand corner of the cover or doc cover. The +position, as well as all of the standard typesetting parameters, can be +altered via control macros. +</p> + +<p> +Similarly, if you request miscellaneous information (and have +already given mom the reference macro +<a href="docprocessing.html#misc">MISC</a>) +she sets it, by default, in a smaller point size in the bottom left +hand corner of the cover or doc cover. As with the copyright, the +position and type specs can be altered via control macros. +</p> + +<h3 id="pagination" class="docs">Headers/footers/pagination</h3> + +<p> +Mom does not set any +<a href="definitions.html#header">headers</a> +or +<a href="definitions.html#footer">footers</a> +on cover pages. Neither does she set any page numbers. From +the point of view of pagination, covers and doc covers are by +default considered ”null” pages. If you wish them to +be included in the pagination scheme (even though no page numbers +appear), you must tell mom that’s what you want by invoking +<br/> +<span class="pre-in-pp"> + .DOC_COVER_COUNTS_PAGES +</span> +or +<br/> +<span class="pre-in-pp"> + .COVER_COUNTS_PAGES +</span> +</p> + +<h3 id="design" class="docs">Designing your own cover pages</h3> + +<p> +Finally, if you want to design your own cover page(s), you can +typeset them by hand inside a +<a href="#covertext">COVERTEXT</a> +block using mom’s typesetting macros to format the text. +</p> + +<h3 id="persistence" class="docs">Persistence of data and formatting</h3> + +<p> +Doc-cover and cover data—that is to say, the strings passed to +reference macros that appear on doc cover and cover +pages—does not persist after +<a href="docprocessing.html#start">START</a>, +however the formatting of the various parts (TITLE, AUTHOR, +COPYRIGHT, etc.) does. +</p> + +<div class="macro-list-container"> +<h3 id="index-covers" class="macro-list">Cover and document cover macros</h3> +<ul class="macro-list"> + <li><a href="#cover">DOC_COVER and COVER</a> + <ul style="margin-left: -.5em; list-style-type: disc;"> + <li><a href="#cover-args">The arguments: saying what goes on doc cover and cover pages</a></li> + </ul></li> + <li><a href="#covertext">DOC_COVERTEXT / COVERTEXT</a></li> + <li><a href="#doc-coverimage">DOC_COVER_IMAGE / COVER_IMAGE</a></li> + <li><a href="#on-off">Enabling/disabling automatic generation of cover pages</a> + <ul style="margin-left: -.5em; list-style-type: disc;"> + <li><a href="#doc-covers">DOC_COVERS</a></li> + <li><a href="#covers">COVERS</a></li> + </ul></li> + <li><a href="#cover-control">Control macros for doc covers and covers</a></li> +</ul> +</div> + +<!-- -COVER- --> + +<div class="macro-id-overline"> +<h3 id="cover" class="macro-id">DOC_COVER and COVER</h3> +</div> + +<div id="doc-cover" class="box-macro-args"> +Macro: <b>DOC_COVER</b> <kbd class="macro-args">(see argument list, below)</kbd> +</div> + +<div class="box-macro-args" style="margin-top: 1em;"> +Macro: <b>COVER</b> <kbd class="macro-args">(see argument list, below)</kbd> +</div> + +<p> +DOC_COVER and COVER behave identically. The reason mom provides +two macros for cover page generation is so that you can have two +different kinds of covers with different information on each. +</p> + +<p> +Imagine, for a moment, you’ve written a document comprised of +three sections. When you +<a href="rectoverso.html#collate">COLLATE</a> +the document for output, you could use DOC_COVER to generate a cover +page that contained the name of the entire document, your (the +author’s) name, and perhaps the copyright date. Subsequently, +you could use COVER, after each <kbd>.COLLATE</kbd> but before each +<kbd><a href="docprocessing.html#start">.START</a></kbd>, +to generate a cover page (title page, cover sheet) containing +just the name of the section, for example, “Part 1”. +</p> + +<p> +The arguments to <kbd>DOC_COVER</kbd> and <kbd>COVER</kbd> tell mom +what you’d like on cover pages. You may give as many or as +few arguments as you need, in any order. A very common setup would +be: +<br/> +<span class="pre-in-pp"> + .COVER TITLE AUTHOR COPYRIGHT +</span> +</p> + +<h4 id="cover-args" class="docs" style="margin-top: -1em;">The argument list</h4> + +<p style="margin-top: 1em"> +The arguments to <kbd>COVER</kbd> and <kbd>DOC_COVER</kbd> tell mom +what you want on the cover page: +<br/> +<span class="pre-in-pp"> + TITLE | DOCTITLE | DOC_COVERTITLE | COVERTITLE + CHAPTER | CHAPTER_TITLE | CHAPTER+TITLE + SUBTITLE + AUTHOR + DOCTYPE + DOC_COVERTEXT | COVERTEXT + DOC_COVER_IMAGE | COVER_IMAGE + COPYRIGHT + MISC + PDF_OUTLINE_LABEL "<label>" + BLANKPAGE +</span> +</p> + +<h4 id="meanings" class="docs" style="margin-top: -1em;">What the arguments mean</h4> + +<dl> + <dt class="params">TITLE</dt> + <dd class="cover-args">– the string(s) you gave to + <a href="docprocessing.html#title">TITLE</a> + </dd> + <dt class="params">DOCTITLE</dt> + <dd class="cover-args">– the string(s) you gave to + <a href="docprocessing.html#doc-title">DOCTITLE</a> + </dd> + <dt class="params">DOC_COVERTITLE / COVERTITLE</dt> + <dd class="cover-args">– the string(s) you gave to + <a href="docprocessing.html#doc-covertitle">DOC_COVERTITLE</a> + or + <a href="docprocessing.html#covertitle">COVERTITLE</a> + </dd> + <dt class="params">CHAPTER, CHAPTER_TITLE, CHAPTER+TITLE</dt> + <dd class="cover-args">– see below, + <a href="#chapter">How the CHAPTER argument and friends work</a> + </dd> + <dt class="params">SUBTITLE</dt> + <dd class="cover-args">– the string(s) you gave to + <a href="docprocessing.html#subtitle">SUBTITLE</a> + </dd> + <dt class="params">AUTHOR</dt> + <dd class="cover-args">– the string(s) you gave to + <a href="docprocessing.html#author">AUTHOR</a> + </dd> + <dt class="params">DOCTYPE</dt> + <dd class="cover-args">– the string you gave to + <a href="docprocessing.html#doctype">DOCTYPE NAMED</a> + </dd> + <dt class="params">DOC_COVERTEXT / COVERTEXT</dt> + <dd class="cover-args">– the block of type you entered for + <a href="#covertext">DOC_COVERTEXT</a> + or + <a href="#covertext">COVERTEXT</a> + </dd> + <dt class="params">DOC_COVER_IMAGE / COVER_IMAGE</dt> + <dd class="cover-args">– the image file you gave to + <a href="#covertext">DOC_COVER_IMAGE</a> + or + <a href="#covertext">COVER_IMAGE</a> + </dd> + <dt class="params">COPYRIGHT</dt> + <dd class="cover-args">– the string you gave to + <a href="docprocessing.html#copyright">COPYRIGHT</a> + </dd> + <dt class="params">MISC</dt> + <dd class="cover-args">– the string(s) you gave to + <a href="docprocessing.html#misc">MISC</a> + </dd> + <dt class="params">PDF_OUTLINE_LABEL <label></dt> + <dd class="cover-args"> + <span style="display:block; margin-left: 1em"> + By default, mom identifies doc covers in the outline panel of PDF + viewers with the prepended label, “Cover:”, and covers + with the label “Title Page:”. If you would like + to change the label, give the <kbd>PDF_OUTLINE_LABEL</kbd> + argument to DOC_COVER or COVER along with the new label, in + quotation marks, as in this example: + <br/> + <kbd> .COVER TITLE AUTHOR COPYRIGHT PDF_LABEL "Cover Sheet: "</kbd> + </span> + </dd> + <dt class="params">BLANKPAGE</dt> + <dd class="cover-args"> + <span style="display:block; margin-left: 1em"> + If the final argument to DOC_COVER or COVER is <kbd>BLANKPAGE</kbd>, + mom will insert a blank page after the doc cover or cover. This is + particularly useful if you intend to print your document two-sided, + since, in two-sided printing, there may be instances where you do + not want text on the reverse side of cover or title pages + </span> + <span style="display:block; margin-left: 1em; margin-top: .5em"> + If you enable + <a href="#pagination">DOC_COVERS_COUNT_PAGES</a> + and/or + <a href="#pagination">COVERS_COUNT_PAGES</a>, + the blank page will be taken into account in the pagination + scheme, though no page number appears on it. Otherwise, blank + pages are invisible to mom’s pagination. + </span> + </dd> +</dl> + +<p> +Please note that in all cases, if you have passed +a reference macro one of the optional arguments +<kbd>DOC_COVER</kbd> or <kbd>COVER</kbd> (e.g. +<kbd>.TITLE DOC_COVER "Title"</kbd>), mom will print the +appropriate string on the appropriate cover page. Thus, +<br/> +<span class="pre-in-pp"> + .TITLE DOC_COVER "Collected Essays" + .TITLE COVER "1985-2015" + .TITLE "Neo-liberalism: Who Did They Think They Were Fooling?" + .DOC_COVER TITLE + .COVER TITLE +</span> +will print “Collected Essays” on the doc cover page, +“1985-2015” on the cover page, and, assuming the +docheader hasn’t been disabled, “Neo-liberalism: Who +Did They Think They Were Fooling?” as the title in the +docheader. +</p> + +<p> +Note that +<br/> +<span class="pre-in-pp"> + .DOC_COVERTITLE "Collected Essays" + .COVERTITLE "1985-2015" + .TITLE "Neo-liberalism: Who Did They Think They Were Fooling?" + .DOC_COVER DOC_COVERTITLE + .COVER COVERTITLE +</span> +could be used to accomplish the same thing. +</p> + +<h5 id="chapter" class="docs" style="margin-top: 0; text-transform: none;">How the CHAPTER argument and friends work</h5> + +<p style="margin-top: .75em"> +<span style="display: block; margin-bottom: -1.25em; font-weight: bold;">• CHAPTER</span> +<br/> +The <kbd>CHAPTER</kbd> argument will print the +<a href="docprocessing.html#chapter-string">CHAPTER_STRING</a> +concatenated with the chapter number you gave to +<a href="docprocessing.html#chapter">CHAPTER</a>. +For example, assuming a vanilla setup for your chapter: +<br/> +<span class="pre-in-pp" style="color: #64614a;"> + .CHAPTER 1 + .CHAPTER_TITLE "The Bonny Blue Yonder" + <span style="color: #941614;">.COVER CHAPTER</span> \" (or <span style="color: #941614;">.DOC_COVER CHAPTER</span>) +</span> +will print (and only print) +<br/> +<span class="pre-in-pp"> + Chapter 1 +</span> +</p> + +<p style="margin-top: -1em;"> +<span style="display: block; margin-bottom: -1.25em; font-weight: bold;">• CHAPTER_TITLE</span> +<br/> +The <kbd>CHAPTER_TITLE</kbd> argument will print the chapter title +you gave to +<a href="docprocessing.html#chapter-title">CHAPTER_TITLE</a>. +For example, assuming a vanilla setup for your chapter: +<br/> +<span class="pre-in-pp" style="color: #64614a;"> + .CHAPTER 1 + .CHAPTER_TITLE "The Bonny Blue Yonder" + <span style="color: #941614;">.COVER CHAPTER_TITLE</span> \"(or <span style="color: #941614;">.DOC_COVER CHAPTER_TITLE</span>) +</span> +will print (and only print) +<br/> +<span class="pre-in-pp"> + The Bonny Blue Yonder +</span> +</p> + +<p style="margin-top: -1em;"> +<span style="display: block; margin-bottom: -1.25em; font-weight: bold;">• CHAPTER+TITLE</span> +<br/> +The <kbd>CHAPTER+TITLE</kbd> argument will print both the +concatenated chapter string+number and the chapter title. For +example, assuming a vanilla setup for your chapter: +<br/> +<span class="pre-in-pp" style="color: #64614a;"> + .CHAPTER 1 + .CHAPTER_TITLE "The Bonny Blue Yonder" + <span style="color: #941614;">.COVER CHAPTER+TITLE</span> \"(or <span style="color: #941614;">.DOC_COVER CHAPTER+TITLE</span>) +</span> +will print +<br/> +<span class="pre-in-pp"> + Chapter 1 + The Bonny Blue Yonder +</span> +</p> + +<div class="macro-id-overline"> +<h3 id="covertext" class="macro-id">DOC_COVERTEXT and COVERTEXT</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>DOC_COVERTEXT</b> <kbd class="macro-args">[START <starting position>] <toggle></kbd> +</div> +<div class="box-macro-args" style="margin-top: 1em;"> +Macro: <b>COVERTEXT</b> <kbd class="macro-args">[START <starting position>] <toggle></kbd> +</div> + +<p class="requires"> +• Must come after +<a href="#printstyle"><span class="normal">PRINTSTYLE</span></a> +</p> + +<p> +<kbd>DOC_COVERTEXT</kbd> and <kbd>COVERTEXT</kbd> allow you to add +text to doc covers and covers in addition to, or instead of, what is +generated by mom from the arguments you give to +<a href="#doccover">DOC_COVER</a> +and +<a href="#doccover">COVER</a>. +</p> + +<p> +Invoke <kbd>.DOC_COVERTEXT</kbd> or <kbd>.COVERTEXT</kbd> on a line +by itself, follow it with the text and formatting you desire, and +terminate the text block with <kbd>.DOC_COVERTEXT OFF</kbd> or +<kbd>COVERTEXT OFF</kbd> (or <kbd>QUIT, END, DONE</kbd>, etc.). +</p> + +<p> +By default, cover text is set over the full line length of the +document, using the style parameters of +<a href="definitions.html#running">running text</a>. +Therefore, as noted, these macros must come after PRINTSTYLE +and any global style changes (margins, family, size, leading, +etc.). Formatting within a cover text block must be done +“manually” with mom’s typesetting macros; +<a href="docelement.html#pp">PP</a> +is the only allowed document element tag. +</p> + +<h4 id="placement" class="docs">Placement</h4> + +<p> +If you do not instruct mom to put anything on doc cover or cover +pages except <kbd>DOC_COVERTEXT</kbd> or <kbd>COVERTEXT</kbd>, the +cover text will begin at the document’s top margin. +Equally, if only <kbd>COPYRIGHT</kbd> and/or <kbd>MISC</kbd> are +to go on the pages, cover text begins at the top margin. In all +other cases, cover text begins below the last element on the page +(excluding COPYRIGHT or MISC), separated by a blank line. +</p> + +<p> +If you wish to change the starting position of the text, you must +use +<a href="typesetting.html#space">SP</a> +or +<a href="typesetting.html#ald">ALD</a> +to move it further down the page. Alternatively, you may use the +optional START argument to give a precise location for the text to +begin. +</p> + +<p> +<kbd>DOC_COVERTEXT</kbd> and <kbd>COVERTEXT</kbd> are particularly +useful for putting abstracts on cover pages, as technical reports +often require. +</p> + +<p> +Here’s a simple recipe for setting an abstract: +<br/> +<span class="pre-in-pp"> + .COVERTEXT + .FT BI + .PT_SIZE 14 + .LS 14 + .CENTER + Abstract + .SP .5v + .FT R + .PT_SIZE 12 + .IB 6P + .JUSTIFY + Text of Abstract... + .COVERTEXT OFF +</span> +Assuming you have told mom to put the title and author on the +cover page, the abstract will appear beneath the author with a +14-point bold-italic title, centered, with the text of the abstract +medium-roman and justified, indented 6 picas from both margins. +</p> + +<div class="macro-id-overline"> +<h3 id="coverimages" class="macro-id">DOC_COVER_IMAGE and COVER_IMAGE</h3> +</div> + +<div id="doc-coverimage" class="box-macro-args"> +Macro: <b>DOC_COVER_IMAGE</b> <kbd class="macro-args"><image> <width> <height> [ -L | -C | -R | -I <indent> <Y-pos> [ <X-pos> ] ]</kbd> +</div> + +<div id="coverimage" class="box-macro-args" style="margin-top: 1em;"> +Macro: <b>COVER_IMAGE</b> <kbd class="macro-args"><image> <width> <height> [ -L | -C | -R | -I <indent> <Y-pos> [ <X-pos> ] ]</kbd> +</div> + +<p> +There are times you need a full page image on a cover, for example +the jacket of a book. Equally, there are times when you need a small +image on the cover, perhaps a company logo. +</p> + +<p> +DOC_COVER_IMAGE and COVER_IMAGE take the same arguments +as PDF_IMAGE, and in the same order. Consult +<a href="images.html#pdf-image">PDF_IMAGE</a> +for a description. +</p> + +<p> +Two additional arguments allow you to place images using x-y +coordinates. Please note that if you use x-y coordinates for +positioning, <b>Y-pos</b> comes before <b>X-pos</b> in the order of +arguments. +</p> + +<p> +Like PDF_IMAGE, the image file must be in PDF format. Mom +apologizes, but PostScript images are not supported for inclusion on +covers. See +<a href="images.html#pdf">Image conversion and file processing</a> +for instructions on converting various image types to PDF, and +<a href="images.html#bounding-box">here</a> +for instructions on obtaining image dimensions. +</p> + +<h4 id="positioning" class="docs">Positioning of doc cover and cover images</h4> + +<p> +With no arguments other than <kbd><file name></kbd>, +<kbd><width></kbd>, and <kbd><height></kbd>, +DOC_COVER_IMAGE and COVER_IMAGE place images flush with the top +left corner of the printer sheet. This allows placing full-page +background images on covers. For example, assuming a US-letter page +size, +<br/> +<span class="pre-in-pp"> + .DOC_COVER_IMAGE image.pdf 612p 792p + .DOC_COVER TITLE AUTHOR DOC_COVER_IMAGE +</span> +will fill the doc cover page with “image.pdf” and set +the title and author in their usual locations. +</p> + +<p> +For smaller images, the horizontal position is established +with one of the <kbd>-L</kbd>, <kbd>-C</kbd>, <kbd>-R</kbd>, or +<kbd>-I <indent></kbd> arguments, just like +<a href="images.html#pdf-image">PDF_IMAGE</a>. +You may instead use the <kbd>X-pos</kbd> argument, provided that it +is preceded by a <kbd>Y-pos</kbd> argument. The values given to +<kbd>-I</kbd>, <kbd>Y-pos</kbd> and <kbd>X-pos</kbd> must have a +<a href="definitions.html#unitofmeasure">unit of measure</a> +appended to them. +</p> + +<p> +Vertical positioning of smaller images requires the <kbd>Y-pos</kbd> +argument (which is why it precedes <kbd>X-pos</kbd> in the order of +arguments) otherwise the image will be flush with the top edge of +the printer sheet +</p> + +<p> +The positioning of images does not effect the placement of type on +doc cover and cover pages. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Tip:</span> +The combination of +<a href="#covertext">COVERTEXT</a> +and COVER_IMAGE make it possible to design covers entirely to your +own specifications. +</p> +</div> + +<div class="macro-id-overline" style="margin-top: .5em"> +<h3 id="on-off" class="macro-id">Enabling/disabling automatic generation of cover pages</h3> +</div> + +<div id="covers" class="box-macro-args" style="margin-top: .5em"> +Macro: <b>COVERS</b> <kbd class="macro-args"><toggle></kbd> +</div> + +<div id="doc-covers" class="box-macro-args" style="margin-top: 1em;"> +Macro: <b>DOC_COVERS</b> <kbd class="macro-args"><toggle></kbd> +</div> + +<p> +By default, if you give mom a +<a href="#cover">COVER</a> +or +<a href="#doc-cover">DOC_COVER</a> +directive, she will print the cover or doc cover. In a document +that contains sections, articles or chapters formerly treated as +”one-off’s” but now being +<a href="rectoverso.html#collate-intro">collated</a>, +such behaviour may not be desirable. +</p> + +<p> +Mom lets you selectively enable or disable the generation of covers +and/or doc covers with the toggle macros, COVERS and DOC_COVERS. +Because they’re toggle macros, simply invoking them by +themselves enables automatic cover or doc cover generation, while +invoking them with any argument at all (<kbd>OFF, QUIT, X</kbd>, +etc) disables cover or doc cover generation. </p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +You must place these macros prior to any instance of +<a href="docprocessing.html#start">START</a>. +Since they’re ”on” by default, there’s no +need to use them if you want covers. However, if you don’t, +especially in the kind of scenario described above, the best place +to put them (most likely with an <kbd>OFF, NO, X</kbd>, etc. argument), +is immediately after the first invocation of START. By doing so, +you ensure they meet the requirement of preceding all subsequent +instances of START. +</p> +</div> + +<div class="rule-short"><hr/></div> + +<h2 id="cover-control" class="macro-group">Control macros for doc covers and covers</h2> + +<p> +The default typographic appearance of the items on a doc cover or +cover is identical to that of the items in a +<a href="definitions.html#docheader">docheader</a>. +(See +<a href="docprocessing.html#docheader-desc">Docheader description</a> +for a description of the defaults.) +</p> + +<p> +<a href="docprocessing.html#copyright">COPYRIGHT</a> +and +<a href="docprocessing.html#misc">MISC</a>, +which do not appear in docheaders, have the following default +characteristics: +</p> +<ul style="margin-top: -.5em; margin-bottom: -.5em;"> + <li>the COPYRIGHT line is set flush with the document’s right + and bottom margins, 2 + <a href="definitions.html#ps">point sizes</a> + smaller than the size of + <a href="definitions.html#running">running text</a> + </li> + <li>MISC lines are set flush with the document’s left and bottom + margins, in the same family, font and point size as the + copyright line. + </li> +</ul> + +<p> +The defaults for the entirety of doc covers and covers, and all the +elements thereon, can be changed with control macros whose defaults +and arguments are identical to the corresponding +<a href="docprocessing.html#index-docheader-control">Control macros for docheaders</a> +(q.v.) The only difference is the name by which you invoke them. Wherever +<kbd>DOCHEADER</kbd> is used for overall changes, replace it +with <kbd>DOC_COVER</kbd> or <kbd>COVER</kbd>. For part-by-part +changes, prepend <kbd>DOC_COVER_</kbd> or <kbd>COVER_</kbd> to the +part/parameter. +</p> + +<p> +Thus, to change the overall family, color, leading, quad, and +starting position of a doc cover, you’d do +<br/> +<span class="pre-in-pp"> + .DOC_COVER_FAMILY H + .DOC_COVER_COLOR blue + .DOC_COVER_LEAD +2 + .DOC_COVER_QUAD L + .DOC_COVER_ADVANCE 3i \" or .DOC_COVER_START_POS 3i +</span> +To change the style parameters for selected parts of a cover, you +might do something like this: +<br/> +<span class="pre-in-pp"> + .COVER_TITLE_FONT B + .COVER_TITLE_SIZE +4 + .COVER_SUBTITLE_FONT I + .COVER_AUTHOR_FONT R + .COVER_AUTHOR_SPACE_BEFORE 6p + .COVER_DOCTYPE_COLOR red + .COVER_MISC_SIZE -1 + .COVER_MISC_LEAD 12 + .COVER_COPYRIGHT_SIZE -2 + .COVER_COPYRIGHT_QUAD L + .COVER_MISC_QUAD R +</span> +Note in the above example that _COPYRIGHT_QUAD and _MISC_QUAD set +both the horizontal position on the page and the quad direction, +either L (or LEFT) or R (or RIGHT), and have no corresponding +docheader control macro. +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="note">Tip:</span> +As with the docheader control macros, <kbd>DOC_COVER_</kbd> and +<kbd>COVER_</kbd> part/parameter style changes may be +<a href="docprocessing.html#grouping">grouped</a>, +for example +<br/> +<span class="pre-in-pp"> + .DOC_COVER_TITLE_STYLE \ + FAMILY A \ + FONT B \ + SIZE +4 \ + CAPS +</span> +</p> +</div> + +<!-- Navigation links --> +<table style="width: 100%; margin-top: 12px;"> +<tr> + <td style="width: 33%;"><a href="toc.html">Back to Table of Contents</a></td> + <td style="width: 33%; text-align: center;"><a href="#top">Top</a></td> + <td style="width: 33%; text-align: right;"><a href="tables-of-contents.html">Next: Tables of contents</a></td> +</tr> +</table> + +</div> + +<div class="bottom-spacer"><br/></div> + +</body> +</html> diff --git a/contrib/mom/momdoc/definitions.html b/contrib/mom/momdoc/definitions.html new file mode 100644 index 0000000..b85a089 --- /dev/null +++ b/contrib/mom/momdoc/definitions.html @@ -0,0 +1,995 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004-2020 Free Software Foundation, Inc. +Written by Peter Schaffter (peter@schaffter.ca). + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"/> + <title>Mom -- Definitions and Terms</title> + <link rel="stylesheet" type="text/css" href="stylesheet.css" /> +</head> + +<body style="background-color: #f5faff;"> + +<!-- ==================================================================== --> + +<div id="top" class="page"> + +<!-- Navigation links --> +<table style="width: 100%;"> + <tr> + <td><a href="toc.html">Back to Table of Contents</a></td> + <td style="text-align: right;"><a href="using.html#top">Next: Using mom</a></td> + </tr> +</table> + +<h1 id="terms" class="docs">Definitions of terms used in this manual</h1> + +<p> +I use a number of typesetting-specific and groff-specific terms +throughout this documentation, as well as a few terms that apply +to mom herself. To make life easier, I’ll explain +them here. Refer back to this section should you encounter a word +or concept you’re not familiar with. +</p> + +<div class="rule-short" style="margin-top: 18px; margin-bottom: 28px;"><hr/></div> + +<div class="col-1-definitions"> + <table class="definitions"> + <tr><th class="definitions">Typesetting terms</th></tr> + <tr> + <td> + <a href="#ascender">Ascender</a><br/> + <a href="#baseline">Baseline</a><br/> + <a href="#ballotbox">Ballot box</a><br/> + <a href="#bullet">Bullet</a><br/> + <a href="#capheight">Cap-height</a><br/> + <a href="#descender">Descender</a><br/> + <a href="#discretionaryhyphen">Discretionary hyphen</a><br/> + <a href="#dropcap">Drop cap</a><br/> + <a href="#em">Em/en</a><br/> + <a href="#family">Family</a><br/> + <a href="#figurespace">Figure space/Digit space</a><br/> + <a href="#fixedwidthfont">Fixed width font</a><br/> + <a href="#fixedwidthspace">Fixed width space</a><br/> + <a href="#font">Font</a><br/> + <a href="#force">Force justify</a><br/> + <a href="#just">Justify/justification</a><br/> + <a href="#gutter">Gutter</a><br/> + <a href="#kern">Kerning</a><br/> + <a href="#kernunit">Kern Units</a><br/> + <a href="#leading">Lead/leading</a><br/> + <a href="#leader">Leaders</a><br/> + <a href="#ligatures">Ligature</a><br/> + <a href="#picaspoints">Picas/Points</a><br/> + <a href="#ps">Point Size</a><br/> + <a href="#quad">Quad</a><br/> + <a href="#rag">Rag</a><br/> + <a href="#shape">Shape</a><br/> + <a href="#solid">Solid/set solid</a><br/> + <a href="#trackkerning">Track kerning/Line kerning</a><br/> + <a href="#unbreakablespace">Unbreakable space</a><br/> + <a href="#weight">Weight</a><br/> + <a href="#wordspace">Word space</a><br/> + <a href="#xheight">x-height</a><br/> + </td> + </tr> + </table> +</div> + +<div class="col-2-definitions"> + <table class="definitions"> + <tr><th class="definitions">Groff terms</th></tr> + <tr> + <td> + <a href="#alias">Alias</a><br/> + <a href="#arguments">Arguments</a><br/> + <a href="#commentlines">Comment lines</a><br/> + <a href="#controllines">Control Lines</a><br/> + <a href="#filled">Filled lines</a><br/> + <a href="#inlines">Inline escapes</a><br/> + <a href="#inputline">Input line</a><br/> + <a href="#macros">Macros</a><br/> + <a href="#units">Machine units</a><br/> + <a href="#numericargument">Numeric argument</a><br/> + <a href="#outputline">Output line</a><br/> + <a href="#primitives">Primitives</a><br/> + <a href="#preprocessor">Pre-processor</a><br/> + <a href="#stringargument">String Argument</a><br/> + <a href="#unitofmeasure">Unit of measure</a><br/> + <a href="#zerowidthcharacter">Zero-width character</a><br/> + </td> + </tr> + </table> +</div> + +<div class="col-3-definitions"> + <table class="definitions"> + <tr><th class="definitions">Mom terms</th></tr> + <tr> + <td> + <a href="#baseline-grid">Baseline grid</a><br/> + <a href="#blockquote">Blockquote</a><br/> + <a href="#controlmacro">Control macro</a><br/> + <a href="#docheader">Docheader</a><br/> + <a href="#epigraph">Epigraph</a><br/> + <a href="#float">Float</a><br/> + <a href="#footer">Footer</a><br/> + <a href="#head">Head</a><br/> + <a href="#header">Header</a><br/> + <a href="#linebreak">Linebreak</a><br/> + <a href="#parahead">Paragraph head</a><br/> + <a href="#pdflink">PDF link</a><br/> + <a href="#pdfoutline">PDF outline</a><br/> + <a href="#quote">Quote</a><br/> + <a href="#running">Running text</a><br/> + <a href="#toggle">Toggle</a><br/> + </td> + </tr> + </table> +</div> + +<h3 id="typesetting-terms" class="docs">Typesetting terms</h3> +<dl> + <dt id="ascender">Ascender</dt> + <dd> + The portion of a letter that extends above the bowl. For + example, the letters a, c, and e have no ascenders. The letters + b, d, and h do. + </dd> + + <dt id="baseline">Baseline</dt> + <dd> + The imaginary line on which the bottoms of capital letters and + the bowls of lower case letters rest. + </dd> + + <dt id="ballotbox">Ballot box</dt> + <dd> + An unfilled square, usually + <a href="#capheight">cap-height</a> + in size, typically placed beside items in a checklist. + </dd> + + <dt id="bullet">Bullet</dt> + <dd> + A small, filled circle typically found beside items or points in + a list. + </dd> + + <dt id="capheight">Cap-height</dt> + <dd> + The height of the tallest capital letter in a given + <a href="#font">font</a> + at the current + <a href="#ps">point size</a>. + </dd> + + <dt id="descender">Descender</dt> + <dd> + The portion of a letter that extends beneath the + <a href="#baseline">baseline</a> + (j, q, y are letters with descenders). + </dd> + + <dt id="discretionaryhyphen">Discretionary hyphen</dt> + <dd> + A symbol inserted between two syllables of a word that indicates + to a typesetting program the valid hyphenation points in the + word. Normally, if hyphenation is turned on, groff knows where + to hyphenate words. However, hyphenation being what it is + (in English, at any rate), groff doesn’t always get it right. + Discretionary hyphens make sure it does. In the event that the + word doesn’t need to be hyphenated at all, groff leaves them + alone. In groff, the discretionary hyphen is entered with + <kbd>\%</kbd> (i.e. a backslash followed by the percent sign). + </dd> + + <dt id="dropcap">Drop cap</dt> + <dd> + A large, usually upper-case letter that introduces the first + paragraph of a document or section thereof. The top of the + drop cap usually lines up with the top of the first line of the + paragraph, and typically “drops” several lines lower. + Text adjacent to the drop cap is indented to the right of the + letter until the bottom of the drop cap is reached, at which + point text reverts to the left margin. + </dd> + + <dt id="em">Em/en</dt> + <dd> + An em is a relative measurement equal to the width of the + letter M at a given + <a href="#ps">point size</a> + in a given + <a href="#font">font</a>. + Since most Ms are designed square, an em is usually (but + sometimes erroneously) considered to be the same size as the + current point size (i.e., if the point size of the type is 12, + one em equals 12 points). An en is equal to the width of a + letter N (historically 2/3 of an em, although groff treats an en + as 1/2 of an em). Typically, ems and ens are used to measure + indents, or to define the length of dashes (long hyphens). + </dd> + + <dt id="family">Family</dt> + <dd> + The collective name by which a collection of + <a href="#font">fonts</a> + are known, e.g. Helvetica, Times Roman, Garamond. + </dd> + + <dt id="figurespace">Figure space/Digit space</dt> + <dd> + A + <a href="#fixedwidthspace">fixed width space</a> + that has the width of one digit. Used for aligning numerals in, + say, columns or numbered lists. In groff, the figure space is + entered with <kbd>\0</kbd> (i.e. a backslash followed by a zero) + </dd> + + <dt id="fixedwidthfont">Fixed-width font</dt> + <dd> + A family or font in which every character occupies exactly the + same amount of horizontal space on the line. Courier is the + best-known, if not the most elegant, fixed-width font. + </dd> + + <dt id="fixedwidthspace">Fixed width space</dt> + <dd> + Equal to + <a href="#wordspace">word space</a>, + but does not expand or contract when text is + <a href="#just">justified</a>. + In groff, fixed width space is entered with + <kbd>\<space></kbd> (i.e. a backslash followed by a space) + </dd> + + <dt id="font">Font</dt> + <dd> + The specific + <a href="#weight">weight</a> + and + <a href="#shape">shape</a> + of type within a + <a href="#family">family</a>, + e.g. light, medium, bold (which are weights), and roman, italic, + condensed (which are shapes). By default, groff knows of four + fonts within its default set of families: R (medium roman), I + (medium italic), B (bold roman) and BI (bold italic). + Mom considerably extends this very basic list. + </dd> + + <dt id="force">Force justify</dt> + <dd> + Sometimes, in + <a href="#just">justified</a> + text, a line needs to be broken short of the right margin. + Force justifying means telling a typesetting program (like + groff) that you want the line broken early AND that you want the + line’s word spacing stretched to force the line flush with the + right margin. + </dd> + + <dt id="gutter">Gutter</dt> + <dd> + The vertical whitespace separating columns of type. + </dd> + + <dt id="just">Justify/justification</dt> + <dd> + Lines of type are justified when they’re flush at both the left + and right margins. Justification is the act of making both + margins flush. Some people use the terms "left justified" and + "right justified" to mean type where only the left (or right) + margins align. I don’t. See + <a href="#quad">quad</a>. + </dd> + + <dt id="kern">Kerning</dt> + <dd> + Moving pairs of letters closer together to remove excess + whitespace between them. In the days before phototypesetting, + type was set from small, rectangular blocks of wood or metal, + each block having exactly one letter. Because the edge of + each block determined the edge of each letter, certain letter + combinations (TA, for example) didn’t fit together well and had + to be mortised by hand to bring them visually closer. Modern + typesetting systems usually take care of kerning automatically, + but they’re far from perfect. Professional typesetters still + devote a lot of time to fitting letters and punctuation together + properly. + </dd> + + <dt id="kernunit">Kern Units</dt> + <dd> + A relative distance, which, by default, is equal to 1/36 of the + current + <a href="#ps">point size</a>. + Used between individual letters for + <a href="#kern">kerning</a>. + Different typesetting systems use different values (1/54 is + popular), and sometimes call kern units by a different name. + It is possible to change the default size of the kern unit with the + <a href="inlines.html#kernunit">KERN_UNIT</a> + macro. + </dd> + + <dt id="leading">Lead/leading</dt> + <dd> + The distance from the + <a href="#baseline">baseline</a> + of one line of type to the line of type immediately beneath + it. Pronounced "ledding." Also called line spacing. Usually + measured in + <a href="#picaspoints">points</a>. + + <p> + <em>In case you’re interested...</em> In previous centuries, + lines of type were separated by thin strips of—you guessed + it—lead. Lines of type that had no lead between them were said + to be “set solid.” Once you began separating them with + strips of lead, they were said to be “leaded”, and the + spacing was expressed in terms of the number of + <a href="#picaspoints">points</a> + of lead. For this reason, “leading” and “line + spacing” aren’t, historically speaking, synonymous. + If type was set 10 on 12, for example, the leading was 2 + points, not 12. Nowadays, however, the two terms are used + interchangeably to mean the distance from baseline to baseline. + </p> + + </dd> + + <dt id="leader">Leaders</dt> + <dd> + Single characters used to fill lines, usually to their end. So + called because they “lead” the eye from one element + of the page to another. For example, in the following (brief) + Table of Contents, the periods (dots) are leaders. + + <span class="pre" style="margin-bottom: -2em;"> + Foreword............... 2 + Chapter 1.............. 5 + Chapter 2.............. 38 + Chapter 3.............. 60 + </span> + </dd> + + <dt id="ligatures">Ligature</dt> + <dd> + Ligatures are letters joined together to form a single + character. The commonest are fi, fl, ff, ffi and ffl. Others + are ae and oe. Occasionally, one sees an st ligature, but this + is archaic and quite rare. + </dd> + + <dt id="picaspoints">Picas/Points</dt> + <dd> + There are twelve points in a pica, and six picas in an inch + (hence 72 points to the inch). In the same way that gem-dealers + have always used their own system of measurement for weight + (carats), typographers have always used their own system of + measurement for type. + </dd> + + <dt id="ps">Point Size</dt> + <dd> + The nominal size of type, measured in + <a href="#picaspoints">points</a> + from the bottom of the longest + <a href="#descender">descender</a> + to the top of the highest + <a href="#ascender">ascender</a>. + In reality, type is always fractionally smaller than its point + size. + </dd> + + <dt id="quad">Quad</dt> + <dd> + When only one margin of type is flush, lines of type are quadded + in the direction of the flush margin. Therefore, quad left + means the left margin is flush, the right isn’t. Quad right + means the right margin is flush, the left isn’t. Quad centre + means neither the left nor the right margin is flush; rather, + lines of type are quadded on both sides so that type appears + centred on the page. + </dd> + + <dt id="rag">Rag</dt> + <dd> + Describes a margin that isn’t flush. Rag right means the right + margin isn’t flush. Rag left means the left margin isn’t flush. + The expression "flush left/rag right" is sometimes used to + describe type that is + <a href="#quad">quadded</a> + left. + </dd> + + <dt id="shape">Shape</dt> + <dd> + The degree of slant and/or the width of characters. + (Technically speaking, this is not a proper typesetting term; + however, it may help clarify some concepts presented in these + documents.) + + <p> + Some typical shapes are: + </p> + + <ul style="margin-top: -.5em; margin-bottom: -.5em"> + <li>Roman, which has no slant, and has letterforms of + average width</li> + <li>Italic, which is slanted, and has letterforms + of average width</li> + <li>Condensed, which has no slant, but has + letterforms narrower than the average represented by Roman</li> + <li>Condensed Italic, which is slanted, with letterforms narrower + than average</li> + </ul> + + <p> + The term + <a href="#font">font</a>, + as it is used in these documents, refers to a combination of + <a href="#weight">weight</a> + and shape. + </p> + + </dd> + + <dt id="solid">Solid/set solid</dt> + <dd> + When no + <a href="#leading">lead</a> + is added between lines of type (i.e., the + <a href="#ps">point size</a> + and linespacing are the same), the lines are said to be “set + solid.” + </dd> + + <dt id="trackkerning">Track kerning/Line kerning</dt> + <dd> + Sometimes, it’s advantageous to increase or decrease the amount + of space between every letter in a line by an equal (usually + small) amount, in order to fit more (or fewer) characters on the + line. The correct term is letter spacing, but track kerning and + line kerning (and sometimes, just "kerning") have come to mean + the same thing. + </dd> + + <dt id="unbreakablespace">Unbreakable space</dt> + <dd> + Equal to + <a href="#wordspace">word space</a>, + however words separated by an unbreakable space will always be + kept together on the same line. Expands and contracts like word + space. Useful for proper names, which one should, whenever + possible, avoid splitting onto two lines. In groff, unbreakable + space is entered with <kbd>\~</kbd> (i.e. a backslash followed by a + tilde) + </dd> + + <dt id="weight">Weight</dt> + <dd> + The thickness of the strokes of letterforms. Medium and Book + have average thicknesses and are the weights used for most + of the text in books, magazines, newspapers, etc. Light has + strokes slightly thinner than Medium or Book, but is still + acceptable for most text. Semibold, Bold, Heavy and Black all + have strokes of increasing thickness, making them suitable for + headings and the like. + </dd> + + <dt id="wordspace">Word space</dt> + <dd> + The amount of whitespace between words. When text is + <a href="#just">justified</a>, + word space expands or contracts to make the margins flush. + </dd> + + <dt id="xheight">x-height</dt> + <dd> + The height of a lower case letter x in a given font at a given + point size. Generally used to mean the average height of the + bowl of lower case letters. + </dd> +</dl> + +<h3 id="groff-terms" class="docs">Groff terms</h3> + +<dl> + <dt id="alias">Alias</dt> + <dd> + A + <a href="#macros">macro</a> + invoked by a name different from its “official” + name. For example, the official name of the macro to change + <a href="#family">family</a> + is <kbd>FAMILY</kbd>. Its alias is <kbd>FAM</kbd>. + Aliases may be created for any macro (via the + <a href="goodies.html#alias"><kbd>ALIAS</kbd></a> + macro) provided the alias uses a name not already taken by the + mom macros or one of the groff + <a href="#primitives">primitives</a>. + For a complete list of words or names you must not use, see the + <a href="reserved.html#reserved">list of reserved words</a>. + </dd> + + <dt id="arguments">Arguments</dt> + <dd> + Parameters or information needed by a + <a href="#macros">macro</a> + to do its job. For example, in the macro + + <span class="pre" style="margin-bottom: -2em;"> + .PT_SIZE 12 + </span> + + <kbd>12</kbd> is the argument. In the macro + + <span class="pre" style="margin-bottom: -2em;"> + .QUAD LEFT + </span> + + <kbd>LEFT</kbd> is the argument. Arguments are separated from + macros by spaces. Some macros require several arguments; each + is separated by a space. + </dd> + + <dt id="commentlines">Comment Lines</dt> + <dd> + <a href="#inputline">Input lines</a> + introduced with the comment character <kbd>\#</kbd> (i.e. a + backslash followed by the pound sign). When processing output, + groff silently ignores everything on a line that begins with the + comment character. + </dd> + + <dt id="controllines">Control Lines</dt> + <dd> + Instructions to groff that appear on a line by themselves, which + means that “control lines” are either + <a href="#macros">macros</a> + or groff + <a href="#primitives">primitives</a>. + Control lines begin with a period or, occasionally, an apostrophe. + </dd> + + <dt id="filled">Filled lines/fill mode</dt> + <dd> + Automatic + <a href="#just">justification</a> + or + <a href="#quad">quadding</a>. + In fill mode, the ends of lines as they appear in your text + editor are ignored. Instead, words from adjoining + <a href="#inputline">input lines</a> + are added one at a time to the output line until no more words + fit. Then, depending whether text is to be + <a href="#just">justified</a> + or + <a href="#quad">quadded</a> + (left, right, or centre), and depending on whether automatic + hyphenation is turned on, groff attempts to hyphenate the last + word, or, barring that, spreads and breaks the line (when + justification is turned on) or breaks and quads the line (when + quadding is turned on). + + <p id="no-fill"> + Nofill mode (non-filled text) means that groff respects the ends + of lines exactly as they appear in your text editor. + </p> + + </dd> + + <dt id="inlines">Inline escapes</dt> + <dd> + Instructions issued to groff that appear as part of an + <a href="#inputline">input line</a> + (as opposed to + <a href="#macros">macros</a>, + which must appear on a line by themselves). Inline escapes are + always introduced by the backslash character. For example, + + <span class="pre" style="margin-bottom: -2em;"> + A line of text with the word T\*[BU 2]oronto in it + </span> + + contains the inline escape <kbd>\*[BU 2]</kbd> (which means + “move the letter ‘o’ 2 + <a href="#kernunit">kern units</a> + closer to the letter ‘T’”). + + <p style="margin-bottom: -2em;"> + Mom’s inline escapes always take the form + <kbd>\*[<ESCAPE>]</kbd>, where <kbd>ESCAPE</kbd> is + composed of capital letters, sometimes followed immediately by a + digit, sometimes followed by a space and a + <a href="#numericargument">numeric argument</a>. + Groff’s escapes begin with the backslash + character but typically have no star and are in lower case. For + example, the mom escapes to move forward 6 + points on a line are either + + <span class="pre" style="margin-bottom: -2em;"> + \*[FP6] or \*[FWD 6p] + </span> + + while the groff escape for the same thing is + + <span class="pre" style="margin-bottom: -2em;"> + \h’6p’ + </span> + </p> + + </dd> + + <dt id="inputline" style="margin-top: -1em;">Input line</dt> + <dd> + A line of text as it appears in your text editor. + </dd> + + <dt id="macros">Macros</dt> + <dd> + Instructions embedded in a document that determine how groff + processes the text for output. mom’s macros + always begin with a period, on a line by themselves, and must + be typed in capital letters. Typically, macros contain complex + commands issued to groff—behind the scenes—via + groff + <a href="#primitives">primitives</a>. + </dd> + + <dt id="units">Machine units</dt> + <dd> + A machine unit is 1/1000 of a + <a href="#picaspoints">point</a> + when the groff device is ps. (“ps” means + “PostScript”—the default device for + which groff prepares output, and the device for which + mom was originally designed.) + </dd> + + <dt id="numericargument">Numeric argument</dt> + <dd> + An + <a href="#arguments">argument</a> + that has the form of a digit. Numeric arguments can be built + out of arithmetic expressions using +, -, *, and / for plus, + minus, times, and divided-by respectively. If a numeric + argument requires a + <a href="#unitofmeasure">unit of measure</a>, + a unit of measure must be appended to <em>every</em> digit in + the argument. For example: + + <span class="pre" style="margin-bottom: -2em;"> + .ALD 1i-1v + </span> + + <div class="box-important" style="margin-right: 2.5em;"> + <p class="tip"> + <span class="important">IMPORTANT:</span> groff does not + respect the order of operations, but rather evaluates + arithmetic expressions from left to right. Parentheses must + be used to circumvent this peculiarity. Not to worry, though. + The likelihood of more than just the occasional plus or minus + sign when using mom’s macros is slim. + </p> + </div> + </dd> + + <dt id="outputline">Output line</dt> + <dd> + A line of text as it appears in output copy. + </dd> + + <dt id="preprocessor">Pre-processor</dt> + <dd> + Pre-processors are used by groff to generate tables + (<strong>tbl</strong>), diagrams (<strong>pic</strong>), graphs + (<strong>grap</strong>), and equations (<strong>eqn</strong>). + These pre-processors are fully supported by mom. In addition, + the “refer” pre-processor is used to generate + bibliographies and lists of cited works. The PDF_IMAGE macro, + which allows insertion of graphics into a document, is not + strictly a pre-processor but behaves similarly to tbl, pic, and + eqn. + </dd> + + <dt id="primitives">Primitives</dt> + <dd> + The lowercase instructions, introduced with a period, that groff + uses as its native command language, and out of which macros + are built. The majority of groff’s primitive requests are two + letters long. + </dd> + + <dt id="stringargument">String Argument</dt> + <dd> + Technically, any + <a href="#arguments">argument</a> + that is not numeric. In this documentation, string argument + means an argument that requires the user to input text. For + example, in the + <a href="#macros">macro</a> + + <span class="pre" style="margin-bottom: -2em;"> + .TITLE "My Pulitzer Novel" + </span> + + <kbd>"My Pulitzer Novel"</kbd> is a string argument. + + <p> + Because string arguments must be enclosed by double-quotes, you + can’t use double-quotes as part of the string argument. If you + need double-quotes to be part of a string argument, use the + <a href="#inlines">inline escapes</a> + <kbd>\(lq</kbd> and <kbd>\(rq</kbd> (leftquote and + rightquote respectively) in place of the double-quote character + (<kbd>"</kbd>). + </p> + + </dd> + + <dt id="unitofmeasure">Unit of measure</dt> + <dd> + The single letter after a + <a href="#numericargument">numeric argument</a> + that tells mom what measurement scale the + argument should use. Common valid units are: + + <span class="pre" style="margin-bottom: -2em;"> + i (inches) + p (points) + P (Picas) + c (centimetres) + m (ems) + n (ens) + u (machine units) + v (the current leading [line space]) + </span> + + <p style="margin-top: -1em;"> + Units of measure must come immediately after the numeric + argument (i.e. with no space between the argument and the unit + of measure), like this: + + <span class="pre" style="margin-bottom: -2em;"> + .ALD 2v + .LL 39P + .IL 1i + </span> + + The above example advances 2 line spaces and sets the line + length to 39 picas with a left indent of 1 inch. + </p> + + <div class="box-important" style="margin-right: 2.5em;"> + <p class="tip"> + <span class="important">IMPORTANT:</span> + Most mom macros that set the size or measure of something must + be given a unit of measure since most of the macros do not have + default units of measure. There are a couple of exceptions, + the most notable of which are <kbd>PT_SIZE</kbd> and + <kbd class="bold">LS</kbd>. Both use + <a href="#picaspoints">points</a> + as the default unit of measure, which means you don’t have to + append “p” to their argument. + </p> + </div> + + <p> + You can enter decimal values for any unit of measure. Different + units may be combined by adding them together (e.g. 1.5i+2m, + which gives a measure of 1-1/2 inches plus 2 ems). + </p> + + <div class="box-tip" style="margin-right: 2.5em;"> + <p class="tip"> + <span class="note">Note:</span> + a pica is composed of 12 points, therefore 12.5 picas is 12 + picas and 6 points, not 12 picas and 5 points. If you want 12 + picas and 5 points, you have to enter the measure as 12P+5p. + </p> + </div> + + </dd> + + <dt id="zerowidthcharacter">Zero-width character</dt> + <dd> + The + <a href="#inlines">inline escape</a> + that allows you to print a literal period, apostrophe and, if + <a href="#outputline">output lines</a> + are + <a href="#filled">filled</a>, + a space that falls at the beginning of an + <a href="#inputline">input line</a>. + It looks like this: + + <span class="pre" style="margin-bottom: -2em;"> + \& <span style="font-family: arial, sans-serif; font-weight: normal">(i.e. a backslash followed by an ampersand)</span> + </span> + + Normally, groff interprets a period (or an apostrophe) at the + beginning of an input line as meaning that what follows is a + <a href="#controllines">control line</a>. + In fill modes, groff treats a space at the beginning of an input + line as meaning “start a new line and put a space at the + beginning of it.” If you want groff to interpret periods + and apostrophes at the beginning of input lines literally (i.e. + to print them), or spaces at the beginning of input lines as just + garden variety word spaces, you must start the line with the + zero-width character. + </dd> +</dl> + +<h3 id="mom-terms" class="docs">Mom terms</h3> +<dl> + <dt id="baseline-grid">Baseline grid</dt> + <dd> + Virtual guide lines spaced according to the + <a href="#leading">leading</a> + established for running text. Adherence to the grid ensures that + text fills the page completely to the bottom margin. Uncorrected + deviations from the grid result in bottom margins that fall short. + </dd> + + <dt id="controlmacro">Control macro</dt> + <dd> + Macros used in + <a href="docprocessing.html#docprocessing">document processing</a> + to control/alter the appearance of document elements (e.g. + headings, quotes, footnotes, + <a href="#header">headers</a>, + etc.). + </dd> + + <dt id="docheader">Document header/docheader</dt> + <dd> + Document information (title, subtitle, author, etc) output at + the top of page one. + </dd> + + <dt id="epigraph">Epigraph</dt> + <dd> + A short, usually cited passage that appears at the beginning of + a chapter, story, or other document. + </dd> + + <dt id="float">Float</dt> + <dd> + A float is material intended to be kept together as a block. + Floated material that fits on a page in position is output on that + page. Floats that do not fit in position are deferred to the top + of the next page. + </dd> + + <dt id="footer">Footer/page footer</dt> + <dd> + Document information (frequently author and title) output in + the bottom margin of pages after page one. Not to be + confused with footnotes, which are considered part of + <a href="#running">running text</a>. + </dd> + + <dt id="head">Heading</dt> + <dd> + The title used to identify a section of a document. Headings + are hierarchic, corresponding to the notion of head, subhead, + subsubhead, etc. + </dd> + + <dt id="header">Header/page header</dt> + <dd> + Document information (frequently author and title) output in the + top margin of pages after page one. + + <div class="box-tip" style="margin-right: 2.5em;"> + <p class="tip"> + <span class="note">Note:</span> In terms of content and style, + headers and + <a href="#footer">footers</a> + are the same; they differ only in their placement on the page. + In most places in this documentation, references to the content + or style of headers applies equally to footers. + </p> + </div> + + </dd> + + <dt id="linebreak">Linebreak/author linebreak</dt> + <dd> + A gap in the vertical flow of + <a href="#running">running text</a>, + frequently set off by typographic symbols such as asterisks or + daggers. Used to indicate a shift in the content of a document + (e.g. a scene change in a short story). Also commonly called a + scene break or a section break. + </dd> + + <dt id="parahead">Paragraph head</dt> + <dd> + A heading joined to the body of a paragraph. + </dd> + + <dt id="pdflink">PDF link</dt> + <dd> + A portion of text that, when clicked on in a PDF viewer, + navigates to a bookmarked location in a document, generally but not + exclusively a heading. PDF links are usually coloured to make + them stand out from the surrounding text. + </dd> + + <dt id="pdfoutline">PDF outline</dt> + <dd> + The hierarchically-arranged navigation outline provided by most PDF + viewers (e.g. Okular, Evince), typically in a panel to the left of + the document window, and usually labelled “Contents”. + </dd> + + <dt id="quote">Quote</dt> + <dd> + A quote, to mom, is a line-for-line setting + of quoted material (e.g. poetry, song lyrics, or a snippet of + programming code). You don’t have to use + <a href="typesetting.html#br"><kbd>BR</kbd></a> + with quotes. + </dd> + + <dt id="running">Running text</dt> + <dd> + In a document formatted with mom, running + text means text that forms the body of the document, including + elements such as headings. + <a href="#docheader">Docheaders</a>, + <a href="#header">headers</a>, + <a href="#footer">footers</a> + and page numbers are not part of running text. + </dd> + + <dt id="toggle">Toggle</dt> + <dd> + A macro or tag that, when invoked without an argument, begins + something or turns a feature on, and, when invoked with ANY + argument, ends something or turns a feature off. See + <a href="intro.html#toggle-example">Example 3</a> + of the section + <a href="intro.html#macro-args">How to read macro arguments</a>. + </dd> +</dl> + +<div class="rule-long"><hr/></div> + +<!-- Navigation links --> +<table style="width: 100%;"> + <tr> + <td style="width: 33%;"><a href="toc.html">Back to Table of Contents</a></td> + <td style="width: 33%; text-align: center;"><a href="#top">Top</a></td> + <td style="width: 33%; text-align: right;"><a href="using.html#top">Next: Using mom</a></td> +</tr> +</table> + +</div> + +<div class="bottom-spacer"><br/></div> + +</body> +</html> diff --git a/contrib/mom/momdoc/docelement.html b/contrib/mom/momdoc/docelement.html new file mode 100644 index 0000000..43f79d4 --- /dev/null +++ b/contrib/mom/momdoc/docelement.html @@ -0,0 +1,6639 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004-2020 Free Software Foundation, Inc. +Written by Peter Schaffter (peter@schaffter.ca). + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"/> + <title>Mom -- Document processing, element tags</title> + <link rel="stylesheet" type="text/css" href="stylesheet.css" /> +</head> + +<body style="background-color: #f5faff;"> + +<!-- ==================================================================== --> + +<div id="top" class="page"> + +<!-- Navigation links --> +<table style="width: 100%;"> +<tr> + <td><a href="toc.html">Back to Table of Contents</a></td> + <td style="text-align: right;"><a href="images.html#top">Next: Graphics, floats, preprocessor support</a></td> +</tr> +</table> + +<h1 class="docs">The document element tags</h1> + +<div style="width: 460px; margin: auto;"> +<ul class="no-enumerator"> + <li><a href="#docelement-intro">Introduction to the document element tags</a></li> + <li><a href="#docelement-control">Control macros – changing the tag defaults</a> + <ul style="margin-left: -.5em; list-style-type: disc;"> + <li><a href="#control-macro-args">Arguments to the control macros</a> + <ul style="margin-left: -.5em; list-style-type: circle;"> + <li><a href="#family-and-font">family and font</a></li> + <li><a href="#point-size">point size</a></li> + <li><a href="#color">colour</a></li> + <li><a href="#quad">quad/justification</a></li> + <li><a href="#underline">underline style, rule weight</a></li> + </ul></li> + <li><a href="#grouping">Grouping control macros</a></li> + </ul></li> +</ul> +</div> + +<div class="rule-medium"><hr/></div> + +<h2 id="toc-doc-element" class="docs" style="text-align: center;">Document element tags table of contents</h2> + +<div id="docelement-mini-toc" style="font-size: 100%; line-height: 150%; margin-top: .5em;"> +<div class="mini-toc-col-1" style="margin-left: 0;"> +<h3 class="toc toc-docproc-header" style="margin-top: 1em;"><a class="header-link" href="#epigraph-intro">Epigraphs</a></h3> +<ul class="toc-docproc" style="margin-top: .5em;"> + <li><a href="#epigraph">EPIGRAPH</a></li> + <li><a href="#epigraph-control">Epigraph control</a></li> +</ul> +<h3 class="toc toc-docproc-header"><a class="header-link" href="#pp-intro">Paragraphs</a></h3> +<ul class="toc-docproc" style="margin-top: .5em;"> + <li><a href="#pp">PP</a></li> + <li><a href="#pp-control">Paragraph control</a></li> +</ul> +<h3 class="toc toc-docproc-header"><a class="header-link" href="#heading-intro">Headings</a></h3> +<ul class="toc-docproc" style="margin-top: .5em;"> + <li><a href="#heading">HEADING</a></li> + <li><a href="#heading-control">Heading control</a></li> + <li><a href="#oldstyle-headings-intro">Oldstyle headings</a></li> +</ul> +<h3 class="toc toc-docproc-header"><a class="header-link" href="#linebreak-intro">Linebreaks (section breaks)</a></h3> +<ul class="toc-docproc" style="margin-top: .5em;"> + <li><a href="#linebreak">LINEBREAK</a></li> + <li><a href="#linebreak-control">Linebreak control</a></li> +</ul> +<h3 class="toc toc-docproc-header"><a class="header-link" href="#quote-intro">Quotes (line for line; poetry or code)</a></h3> +<ul class="toc-docproc" style="margin-top: .5em;"> + <li><a href="#quote">QUOTE</a></li> + <li><a href="#quote-control">Quote control</a></li> +</ul> +<h3 class="toc toc-docproc-header"><a class="header-link" href="#blockquote-intro">Blockquotes (cited material)</a></h3> +<ul class="toc-docproc" style="margin-top: .5em;"> + <li><a href="#blockquote">BLOCKQUOTE</a></li> + <li><a href="#blockquote-control">Blockquote control</a></li> +</ul> +<h3 class="toc toc-docproc-header"><a class="header-link" href="#code-intro">Inserting code snippets</a></h3> +<ul class="toc-docproc" style="margin-top: .5em;"> + <li><a href="#code">CODE</a></li> + <li><a href="#code-control">Code control</a></li> +</ul> +</div> +<div class="mini-toc-col-2" style="margin-top: 1.5em;"> +<h3 class="toc toc-docproc-header"><a class="header-link" href="#list-intro">Nested lists</a></h3> +<ul class="toc-docproc" style="margin-top: .5em;"> + <li><a href="#list">LIST</a></li> + <li><a href="#item">ITEM</a></li> + <li><a href="#list-control">List control</a></li> +</ul> +<h3 class="toc toc-docproc-header"><a class="header-link" href="#number-lines-intro">Line numbering</a></h3> +<ul class="toc-docproc" style="margin-top: .5em;"> + <li><a href="#number-lines">NUMBER_LINES</a></li> + <li><a href="#number-lines-control">Line numbering control</a></li> +</ul> +<h3 class="toc toc-docproc-header"><a class="header-link" href="#footnote-intro">Footnotes</a></h3> +<ul class="toc-docproc" style="margin-top: .5em;"> + <li><a href="#footnote">FOOTNOTE</a></li> + <li><a href="#footnote-control">Footnote control</a></li> +</ul> +<h3 class="toc toc-docproc-header"><a class="header-link" href="#endnote-intro">Endnotes</a></h3> +<ul class="toc-docproc" style="margin-top: .5em;"> + <li><a href="#endnote">ENDNOTE</a></li> + <li><a href="#endnote-control">Endnote control</a></li> +</ul> +<h3 class="toc toc-docproc-header"><a class="header-link" href="#margin-notes-intro">Margin notes</a></h3> +<ul class="toc-docproc" style="margin-top: .5em;"> + <li><a href="#mn-init">MN_INIT (set margin notes parameters)</a></li> + <li><a href="#mn">MN</a></li> +</ul> +<h3 class="toc toc-docproc-header"><a class="header-link" href="#finis-intro">Document termination string</a></h3> +<ul class="toc-docproc" style="margin-top: .5em;"> + <li><a href="#finis">FINIS</a></li> + <li><a href="#finis-control">Finis control</a></li> +</ul> +</div> +</div> + +<div class="rule-medium" style="clear: both;"><hr/></div> + +<h2 id="docelement-intro" class="docs">Introduction to the document element tags</h2> + +<p> +Once you’ve completed the setup for a document (see +<a href="docprocessing.html#docprocessing-tut">Setting up a mom document</a>), +formatting it is a snap. Simply invoke the appropriate tag for +each document element as you need it. The tags are macros that +tell mom: “This is a paragraph; this is a heading; this is a +footnote,” and so on. +</p> + +<p> +Generally, for each tag, there are +<a href="definitions.html#controlmacro">control macros</a> +for the tag’s family, font and point size. Where appropriate, +there are macros to control leading, indents, quad and special +features as well. +Mom has tasteful defaults for all the tags, hence you only use the +control macros when you want to change the way she does things. +This is usually done prior to +<a href="docprocessing.html#start">START</a>, +but can, in fact, be done at any time in the course of a document. +Any change to a tag’s style affects all subsequent invocations +of the tag. +</p> + +<h2 id="docelement-control" class="docs">Control macros – changing the tag defaults</h2> + +<p> +The control macros for document processing tags let you design the +look of all the parts of your documents—should you wish. At +a bare minimum, all tags have macros to change mom’s defaults +for family, font, point size and colour. Where appropriate, there +are macros to control leading, indents and quad as well. +</p> + +<p> +In addition, many tags have special macros to control features that +are pertinent to those tags alone. Have a look at the section +dealing with any particular tag to find out what macros control the +tag, and what mom’s defaults for the tag are. +</p> + +<p> +The control macros may be used at any time during the course of a +document (i.e. before or after +<a href="docprocessing.html#start">START</a>). +The changes you make alter all subsequent invocations of the +affected tag until you make another change, either by passing new +arguments to the tag’s control macro, or toggling a particular +feature of the tag on or off. +</p> + +<p> +And don’t forget: the +<a href="typesetting.html#macros-typesetting">typesetting macros</a> +can be used at any time, including inside +<a href="definitions.html#toggle">toggle</a> +tags (affecting only that particular invocation of the tag). +Equally, +<a href="definitions.html#inlines">inline escapes</a> +can be used in tags that take +<a href="definitions.html#stringargument">string arguments.</a> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="tip">Tip:</span> +Get familiar with mom at her default settings before exploring the +control macros. Put her through her paces. See how she behaves. +Get to know what she feels like and how she looks, both in your +text editor and on the printed page. Then, if you don’t like +something, use this documentation to find the precise macro you need +to change it. There are tons of control macros. Reading up on them +and trying to remember them all might lead you to think that mom is +complex and unwieldy, which is not only untrue, but would offend her +mightily. +</p> +</div> + +<div class="box-important"> +<p class="tip-top"> +<span class="important">Important:</span> +The family, font, point size, colour and leading control macros have +no effect in +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPEWRITE</kbd></a>, +except where noted throughout this documentation. +</p> + +<p class="tip-bottom"> +Please also note that the defaults listed with the control macros +apply only to +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPESET</kbd></a> +unless a default for <kbd>TYPEWRITE</kbd> is also given. +</p> +</div> + +<h3 id="control-macro-args" class="docs">Arguments to the control macros</h3> + +<h4 id="family-and-font" class="docs" style="margin-top: 1em; margin-bottom: -.75em;">Family and font</h4> + +<p> +The arguments to the control macros that end in _FAMILY or _FONT are +the same as for +<a href="typesetting.html#family">FAMILY</a> +and +<a href="typesetting.html#font">FT</a>. +</p> + +<h4 id="point-size" class="docs" style="margin-top: -.5em; margin-bottom: -.75em;">Point size</h4> + +<p> +Control macros that end in _SIZE always take +the form <kbd>+<n></kbd> or <kbd>-<n></kbd> where +<n> is the number of +<a href="definitions.html#picaspoints">points</a> +larger (+) or smaller (-) than the point size of paragraphs +you want the document element to be. For example, to set +blockquotes 2 points smaller than the type in paragraphs, do +<br/> +<span class="pre-in-pp"> + .BLOCKQUOTE_SIZE -2 +</span> +There’s no need for a +<a href="definitions.html#unitofmeasure">unit of measure</a> +with the _SIZE control macros; points is assumed. +</p> + +<h4 id="color" class="docs" style="margin-top: -.5em; margin-bottom: -.75em;">Colour</h4> + +<p> +Control macros that end in _COLOR take as their argument a colour +name pre-defined (or “initialized”) with +<a href="color.html#newcolor">NEWCOLOR</a> +or +<a href="color.html#xcolor">XCOLOR</a>. +For example, if you want your +<a href="#linebreak">author linebreaks</a> +to be red, once you’ve defined or initialized the colour, red, +<br/> +<span class="pre-in-pp"> + .LINEBREAK_COLOR red +</span> +will turn them red. +</p> + +<h4 id="lead" class="docs" style="margin-top: -.5em; margin-bottom: -.75em;">Lead / linespacing</h4> + +<p> +Control macros that end in _AUTOLEAD take the same argument as +<a href="typesetting.html#autolead">AUTOLEAD</a>, +<i>viz.</i> a digit that represents the number of points to add to +the tag’s point size to arrive at its +<a href="definitions.html#leading">leading</a>. +For example, to set footnotes +<a href="definitions.html#solid">solid</a>, do +<br/> +<span class="pre-in-pp"> + .FOOTNOTE_AUTOLEAD 0 +</span> +To set footnotes with a 1-point lead (i.e. with the line spacing +one point greater than the footnote’s point size), do +<br/> +<span class="pre-in-pp"> + .FOOTNOTE_AUTOLEAD 1 +</span> +</p> + +<div class="box-tip" style="margin-top: -1.25em;"> +<p class="tip"> +<span class="note">Note:</span> +_AUTOLEAD control macros do not have a <kbd>FACTOR</kbd> argument. +</p> +</div> + + +<h4 id="control-indents" class="docs" style="margin-top: -.75em; margin-bottom: -.75em;">Indents</h4> + +<p> +Except for +<a href="#para-indent">PARA_INDENT</a>, +the argument to control macros that end in _INDENT can take +either a single numeral (whole numbers only, no decimal fractions) +<i>without</i> a +<a href="definitions.html#unitofmeasure">unit of measure</a> +appended to it, or a digit (including decimal fractions) <i>with</i> +a unit of measure appended. +</p> + +<p> +A digit <i>without</i> a unit of measure appended represents by +how much you want your paragraph first-line indents (set with +PARA_INDENT) multiplied to achieve the correct indent for a +particular tag. For example, +<br/> +<span class="pre-in-pp"> + .PARA_INDENT 2m + .BLOCKQUOTE_INDENT 2 +</span> +means that blockquotes will be indented from the left and right +margins by twice the size of the paragraph indent, or 4 +<a href="definitions.html#em">ems</a>. +</p> + +<p> +A digit <i>with</i> a unit of measure appended defines an absolute +indent, relative to nothing. In the following, blockquotes will be +indented by 3 +<a href="definitions.html#picaspoints">picas</a> +and 6 +<a href="definitions.html#picaspoints">points</a>, +regardless of the paragraph indent. +<br/> +<span class="pre-in-pp"> + .PARA_INDENT 2m + .BLOCKQUOTE_INDENT 3P+6p +</span> +</p> + +<h4 id="quad" class="docs" style="margin-top: -1em; margin-bottom: -.75em;">Quad / justification style</h4> + +<p> +Control macros that end in _QUAD take the same arguments as +<a href="typesetting.html#quad">QUAD</a>. +</p> + +<h4 id="underscore" class="docs" style="margin-bottom: -.75em;">Underscore style, rule weight</h4> + +<p> +If mom gives the option to underscore a document element, the weight +of the underline and its distance from the +<a href="definitions.html#baseline">baseline</a> +are controlled by macros that end in _UNDERSCORE or _UNDERLINE, the +two being synonymous. These macros take the following arguments: +<br/> +<span class="pre-in-pp"> + DOUBLE - double underscore + <weight> - the underscore weight (in points, no unit of measure required + <distance> - distance from baseline (unit of measure required) + <rule gap> - distance between double underscore rules (unit of measure required) +</span> +<kbd>DOUBLE</kbd> by itself will double-underscore the element. The +remaining arguments must be entered in the order given. You may not +skip over any of them, which means that if you only wish to change +<kbd><rule gap></kbd>, you must still enter a +<kbd><weight></kbd> and <kbd><distance></kbd> argument. +</p> + +<p> +Page elements that are separated from +<a href="definitions.html#running">running text</a> +by a rule (i.e. page headers, page footers, and footnotes) are +controlled by macros that end in _RULE_WEIGHT. +</p> + +<p> +The weight argument to _UNDERSCORE macros is the same as the +argument to +<a href="inlines.html#rule-weight">RULE_WEIGHT</a>, +as is the argument to _RULE_WEIGHT macros. +</p> + +<h3 id="grouping" class="docs">Grouping control macros</h3> + +<p> +As of version 2.1, it is possible to group control macros for a +particular tag into a single <kbd><element>_STYLE</kbd> macro. +For example, rather than setting the family, size, and indent of +<a href="#blockquote-intro">BLOCKQUOTES</a> +with +<br/> +<span class="pre-in-pp"> + .BLOCKQUOTE_FAMILY H + .BLOCKQUOTE_SIZE -2 + .BLOCKQUOTE_INDENT 4P +</span> +you can enter the same style parameter changes with +<br/> +<span class="pre-in-pp"> + .BLOCKQUOTE_STYLE \ + FAMILY H \ + SIZE -2 \ + INDENT 4P +</span> +<kbd><element>_STYLE</kbd> macros use +“keyword/value” pairs (<kbd>FAMILY</kbd> is a keyword, +<kbd>H</kbd> is a value), and may be entered entirely on one line, +or, as the example shows, broken into several readable lines using +the backslash. The macro itself and all but the last keyword/value +pair require the backslash when this style is used. +</p> + +<p> +Not all the control macros for a particular tag may be available +with an <kbd><element>_STYLE</kbd> macro. Generally speaking, +though, if a tag has control macros for +</p> +<table style="font-family: monospace; font-weight: bold; margin-left: 5em; margin-top: -1em"> + <tr> + <td style="padding-right: 1em">FAMILY</td> + <td style="padding-right: 1em">LEAD</td> + <td style="padding-right: 1em">INDENT</td> + <td style="padding-right: 1em">SMALLCAPS</td> + </tr> + <tr> + <td style="padding-right: 1em">FONT</td> + <td style="padding-right: 1em">AUTOLEAD</td> + <td style="padding-right: 1em">COLOR</td> + <td style="padding-right: 1em">UNDERSCORE or UNDERLINE</td> + </tr> + <tr> + <td style="padding-right: 1em">SIZE</td> + <td style="padding-right: 1em">QUAD</td> + <td style="padding-right: 1em">CAPS</td> + </tr> +</table> +<p style="margin-top: .5em"> +those parameters may be used within an +<kbd><element>_STYLE</kbd> macro. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If you need to reverse the sense of <kbd>CAPS</kbd>, +<kbd>SMALLCAPS</kbd> or <kbd>UNDERSCORE/UNDERLINE</kbd>, which +do not take a value after the keyword, use <kbd>NO_CAPS</kbd>, +<kbd>NO_SMALLCAPS</kbd>, and <kbd>NO_UNDERSCORE/NO_UNDERLINE</kbd>. +</p> +</div> + +<div class="rule-short"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="epigraph-intro" class="macro-group">Epigraphs</h2> + +<ul style="margin-left: -.5em;"> + <li><a href="#epigraph">Tag: EPIGRAPH</a></li> + <li><a href="#epigraph-control">Epigraph control macros and defaults</a></li> +</ul> + +<p> +<a href="definitions.html#epigraph">Epigraphs</a> +colour, flavour, or comment on the document they precede. +Typically, they are centred at the top of a document’s first page +(underneath the title) and set in a smaller point size than that of +paragraph text. +</p> + +<p> +By default, mom sets epigraphs centred and +<a href="definitions.html#filled">unfilled</a>; +this lets you input them on a line for line basis. This behaviour +can be changed to accommodate +<a href="definitions.html#filled">filled</a> +epigraph “blocks.” +</p> + +<!-- -EPIGRAPH- --> + +<div class="macro-id-overline"> +<h3 id="epigraph" class="macro-id">EPIGRAPH</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>EPIGRAPH</b> <kbd class="macro-args"><toggle> | [ BLOCK ]</kbd> +</div> + +<p> +EPIGRAPH is a toggle, used like this: +<br/> +<span class="pre-in-pp"> + .EPIGRAPH + <text of epigraph> + .EPIGRAPH OFF +</span> +<kbd>OFF</kbd>, above, could be anything—say, <kbd>Q</kbd> or +<kbd>X</kbd>—since any argument other than <kbd>BLOCK</kbd> +turns it off. +</p> + +<p> +If given the argument, <kbd>BLOCK</kbd>, EPIGRAPH sets epigraphs +<a href="definitions.html#filled">filled</a>, +justified or quadded in the same direction as paragraphs, indented +equally from both the left and right margins. +</p> + +<p> +If a block-style epigraph runs to more than one paragraph (unlikely, +but conceivable), you must introduce every paragraph—including +the first—with the +<a href="#pp">PP</a> +tag. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +EPIGRAPH should only be used at the top of a document (i.e. just +after +<a href="docprocessing.html#start">START</a>) +or after headings. The latter is not especially recommended, but it +does work. In all other places where you want quotes or cited text, +use +<a href="#quote">QUOTE</a> +or +<a href="#blockquote">BLOCKQUOTE</a>. +</p> +</div> + +<div class="box-tip"> +<p class="tip"> +<span class="tip">Tips on vertical spacing around epigraphs:</span> +If you wish to change the vertical position of an epigraph with +<a href="typesetting.html#space">SPACE</a>, +<a href="typesetting.html#ald">ALD</a>, or +<a href="typesetting.html#rld">RLD</a>, +do so before invoking <kbd>.EPIGRAPH</kbd>, like this: +<br/> +<span class="pre-in-pp"> + .SP -6p + .EPIGRAPH + A notable quote. + .EPIGRAPH OFF +</span> +If you’re setting a document in +<a href="docprocessing.html#columns">columns</a> +and you’d like to add or subtract space <i>after</i> the +epigraph, which is centred over the top of both columns, the place +to do it is inside the epigraph, like this: +<br/> +<span class="pre-in-pp"> + .EPIGRAPH + A notable quote. + .SP 1v + .EPIGRAPH OFF +</span> +If you were to add the <kbd>.SP 1v</kbd> outside the epigraph, the +space would be added to the top of the leftmost column only, +resulting in unbalanced columns. +</p> +</div> + +<div class="defaults-container" style="padding-bottom: 8px;"> +<h3 id="epigraph-control" class="docs defaults" style="margin-top: -.25em;">EPIGRAPH control macros and defaults</h3> + +<p class="defaults"> +See +<a href="#control-macro-args">Arguments to the control macros</a>. +<br/> +The following EPIGRAPH control macros may also be +<a href="#grouping">grouped</a> +using EPIGRAPH_STYLE. +</p> + +<span class="pre defaults"> +.EPIGRAPH_FAMILY default = prevailing document family; default is Times Roman +.EPIGRAPH_FONT default = roman +.EPIGRAPH_SIZE default = -1.5 (points) +.EPIGRAPH_COLOR default = black +.EPIGRAPH_AUTOLEAD default = 2 points +(The next two apply to “block” style epigraphs only) +.EPIGRAPH_INDENT* (see Note on EPIGRAPH_INDENT, below) + +*Indent here refers to the indent from both the left and right margins + that centres block style epigraphs on the page. +</span> +</div> + +<div class="box-notes"> +<h3 id="epigraph-indent" class="docs notes" style="margin-bottom: -.75em;">Note on EPIGRAPH_INDENT</h3> + +<p style="margin-top: .5em;"> +If you pass EPIGRAPH_INDENT an integer with no unit of measure +appended, the integer represents the amount by which to multiply +PARA_INDENT to arrive at an indent for block style epigraphs. If +you append a unit of measure to the argument, the indent will be +precisely the amount specified. +</p> + +<p> +Please also note that if your PARA_INDENT is <kbd>0</kbd> (i.e. +no indenting of the first line of paragraphs), you must set an +EPIGRAPH_INDENT yourself, with a unit of measure appended to the +argument. Mom has no default for EPIGRAPH_INDENT if paragraph first +lines are not being indented. +</p> + +<p class="tip-bottom"> +The default value for EPIGRAPH_INDENT is <kbd>3</kbd> (for +<a href="docprocessing.html#printstyle">PRINTSTYLE TYPESET</a>) +and <kbd>2</kbd> (for +<a href="docprocessing.html#printstyle">PRINTSTYLE TYPEWRITE</a>). +</p> +</div> + +<div class="rule-short"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="pp-intro" class="macro-group">Paragraphs</h2> + +<ul style="margin-left: -.5em;"> + <li><a href="#pp">Tag: PP</a></li> + <li><a href="#pp-control">Paragraph control macros and defaults</a></li> +</ul> + +<p> +The paragraph macro is the one you use most often. Consequently, +it’s one of most powerful, yet simplest to use—just the +letters PP. No arguments, nothing. Just <kbd>.PP</kbd> on a line +by itself any time, in any document element, tells mom you want to +start a new paragraph. The spacing and indent appropriate to where +you are in your document are taken care of automatically. +</p> + +<p> +By default, mom does not indent the first paragraph of a document, +nor paragraphs that fall immediately after headings. The first +paragraphs of blockquotes and block-style epigraphs are also not +indented. This behaviour can be changed with the control macro +<kbd><a href="#para-indent-first">INDENT_FIRST_PARAS</a></kbd>. +</p> + +<p> +Mom does not deposit a blank line between paragraphs. If you want +her to do so, use the control macro +<a href="#pp-space">PARA_SPACE</a>. +(I don’t recommend using this macro with +<a href="typesetting.html#printstyle">PRINTSTYLE TYPEWRITE</a>.) +</p> + +<p> +Note that mom does not provide widow or orphan control for +paragraphs (i.e., even if only one line of a paragraph fits at the +bottom of a page, she will set it on that page). The reason for +this is that writers of fiction often have single-line paragraphs +(e.g. in dialogue). Groff’s simplistic orphan control will +break these one-liners—if they fall at the bottom of the +page—to a new page, which is not what you want. +</p> + +<!-- -PP- --> + +<div class="macro-id-overline"> +<h3 id="pp" class="macro-id">PP</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>PP</b> +</div> +<p> +<kbd>.PP</kbd> (on a line by itself, of course) tells mom to start a +new paragraph. See +<a href="#pp-intro">above</a> +for more details. In addition to regular text paragraphs, you can +use PP in +<a href="#epigraph-intro">epigraphs</a>, +<a href="#blockquote-intro">blockquotes</a>, +<a href="#endnote-intro">endnotes</a> +and +<a href="#footnote-intro">footnotes</a>. +</p> + +<div class="defaults-container" style="background-color: #ded4bd; border: none;"> +<h3 id="pp-control" class="docs defaults">PP control macros and defaults</h3> + +<p class="defaults"> +The PP macro being so important, and representing, as it were, the +basis of everything that goes on in a document, its control is +managed in a manner somewhat different from other document element +tags. As a result, the control macros for PP may not be +<a href="#grouping">grouped</a> +within a <kbd>_STYLE</kbd> macro. +</p> + +<ol style="margin-top: .5em; padding-bottom: .5em;"> + <li><a href="#pp-family">Family control</a></li> + <li><a href="#pp-font">Font control</a></li> + <li><a href="#pp-color">Paragraph colour</a></li> + <li><a href="#pp-leading">Leading/linespacing control</a></li> + <li><a href="#pp-just-quad">Justification/quad control</a></li> + <li><a href="#para-indent">First-line indent control</a></li> + <li><a href="#para-indent-first">Initial paragraphs indent control</a></li> + <li><a href="#pp-space">Inter-paragraph spacing</a></li> +</ol> +</div> + +<h4 id="pp-family" class="docs" style="margin-top: -1.5em;">1. Family control</h4> + +<p> +The paragraph +<a href="definitions.html#family">family</a> +is set with +<a href="typesetting.html#family">FAMILY</a> +prior to +<a href="docprocessing.html#start">START</a>, +or +<a href="docprocessing.html#doc-family">DOC_FAMILY</a> +afterwards. Please note that both globally affect the family of +every element in the document. +</p> + +<p> +If you wish to change the family for regular text paragraphs only, +invoke <kbd>.FAMILY</kbd> immediately after <kbd>.PP</kbd> in every +paragraph whose family you wish to differ from the prevailing +document family. Alternatively, set the family and font for +paragraphs with PP_FONT, giving it a complete family+font name, e.g. +<br/> +<span class="pre-in-pp"> + PP_FONT TI +</span> +which would make the font used in paragraphs Times Roman Italic. +</p> + +<p> +Mom’s default paragraph (and document) family is Times Roman. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Neither FAMILY nor DOC_FAMILY has any effect when the PRINTSTYLE is +<kbd>TYPEWRITE</kbd>. +</p> +</div> + +<h4 id="pp-font" class="docs" style="margin-top: -.25em;">2. Font control</h4> + +<p> +To change the +<a href="definitions.html#font">font</a> +used in regular text paragraphs, use PP_FONT, which takes the same +argument as +<a href="typesetting.html#font">FT</a>. +PP_FONT may be used before or after +<a href="docprocessing.html#start">START</a>. +Only regular text paragraphs are affected; paragraphs in +<a href="#epigraph-intro">epigraphs</a>, +<a href="#blockquote-intro">blockquotes</a>, +<a href="#endnote-intro">endnotes</a>, +and +<a href="#footnote-intro">footnotes</a> +remain at their default setting (medium roman) unless you change +them with the appropriate control macros. +</p> + +<p> +Mom’s default paragraph font is medium roman. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +PP_FONT has no effect when the PRINTSTYLE is <kbd>TYPEWRITE</kbd>. +If you wish to set whole typewritten paragraphs in italic, invoke +<kbd>.FT I</kbd> immediately after <kbd>.PP</kbd>. Depending +on which of +<a href="docprocessing.html#printstyle-italics">UNDERLINE_ITALIC</a> +or +<a href="docprocessing.html#printstyle-italics">ITALIC_MEANS_ITALIC</a> +is currently enabled, the paragraph will be set underlined or in +italic. Neither persists past the end of the paragraph. +</p> +</div> + +<h4 id="pp-color" class="docs" style="margin-top: -.25em;">3. Paragraph colour</h4> + +<p> +Mom has no special control macro for colourising paragraphs. If you +wish a colourised paragraph, you must use the macro +<a href="color.html#color">COLOR</a> +or the +<a href="definitions.html#inline">inline escape</a>, +<a href="color.html#color-inline"><kbd><span class="nobr">\*[<colourname>]</span></kbd></a>, +<i>after</i> <kbd>.PP</kbd>. The colour must be one pre-defined (or +“initialized”) with +<a href="color.html#newcolor">NEWCOLOR</a> +or +<a href="color.html#xcolor">XCOLOR</a>. +</p> + +<p> +Please note that unless you change the colour back to it’s +default (usually black) at the end of the paragraph, all subsequent +paragraphs will be set in the new colour, although most other +elements of your document will continue to be set in the default +colour (usually black). +</p> + +<p> +For example, assuming you have defined the colour, blue, +<br/> +<span class="pre-in-pp"> + .PP + .COLOR blue + <first paragraph> + .HEADING 1 "Monty Python" + .HEADING 2 "The Origins of Spam" + .PP + <second paragraph> +</span> +the first paragraph will be blue, the head and subhead will be in +the document’s default colour (usually black), and the second +paragraph will be in blue. +</p> + +<h4 id="pp-leading" class="docs" style="margin-top: -.25em;">4. Leading</h4> + +<p> +The paragraph +<a href="definitions.html#leading">leading</a> +is set with +<a href="typesetting.html#leading">LS</a> +prior to +<a href="docprocessing.html#start">START</a>, +or +<a href="docprocessing.html#doc-lead">DOC_LEAD</a> +afterwards. Please note that either method globally affects the +leading and spacing of every document element (except +<a href="definitions.html#header">headers</a> +and +<a href="definitions.html#footer">footers</a>). +</p> + +<p> +If you wish to change the leading of regular text paragraphs only, +invoke <kbd>.LS</kbd> immediately after <kbd>.PP</kbd> in any +paragraph whose leading you wish to change. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Warning:</span> +Changing a paragraph’s leading will almost certainly screw up +mom’s ability to balance the bottom margin of pages. Should +you absolutely require a change to a paragraph’s leading and +need to get mom back on track leading-wise afterwards, use the +<a href="docprocessing.html#shim">SHIM</a> +or +<a href="docprocessing.html#shim">FLEX</a> +macro, depending on which +<a href="docprocessing.html#vertical-whitespace-management">vertical whitespace management</a> +strategy you are using. +</p> +</div> + +<p> +Mom’s default paragraph leading (document leading) +is 16 points, adjusted to fill the page. +</p> + +<h4 id="pp-just-quad" class="docs" style="margin-top: -.25em;">5. Justification / quad</h4> + +<p> +The justification/quad-direction of regular text paragraphs (i.e. +<a href="definitions.html#just">justified</a>, +or +<a href="definitions.html#filled">filled</a> +and +<a href="definitions.html#quad">quadded</a> +left/right/centre) is set with +<a href="typesetting.html#justify">JUSTIFY</a> +or +<a href="typesetting.html#quad">QUAD</a> +prior to +<a href="docprocessing.html#start">START</a>, +and with +<a href="docprocessing.html#doc-quad">DOC_QUAD</a> +afterwards. +</p> + +<p> +Please note that either method of setting the paragraph +justification/quad-direction also affects +<a href="#epigraph-intro">epigraphs</a>, +<a href="#footnote-intro">footnotes</a>, +and +<a href="#endnote-intro">endnotes</a>, +but not +<a href="#blockquote-intro">blockquotes</a> +(whose default is quad left unless you change it with +<a href="#blockquote">BLOCKQUOTE_QUAD</a>). +The justification/quad-direction of epigraphs and footnotes may be +changed with their own control macros. +</p> + +<p> +If you wish to change the justification/quad-direction of individual +paragraphs, invoke +<a href="typesetting.html#justify"><kbd>.JUSTIFY</kbd></a> +or +<a href="typesetting.html#quad"><kbd>.QUAD</kbd></a> +on the line immediately after <kbd>.PP</kbd>. Only the paragraph +in question gets justified or quadded differently; subsequent +paragraphs remain unaffected. +</p> + +<p> +Mom’s default justification/quad-direction for paragraphs +when the +<a href="docprocessing.html#printstyle">PRINTSTYLE</a> +is <kbd>TYPESET</kbd> is justified; for PRINTSTYLE +<kbd>TYPEWRITE</kbd>, the default is quad left. +</p> + +<h4 id="para-indent" class="docs" style="margin-top: -.25em;">6. First-line indent</h4> + +<p> +The first-line indent of paragraphs is controlled by PARA_INDENT, +which takes one argument: the size of the indent. PARA_INDENT may be +used before or after +<a href="docprocessing.html#start">START</a>. +A +<a href="definitions.html#unitofmeasure">unit of measure</a> +is required; fractional sizes are allowed. Thus, to set the +paragraph indent to 4-1/2 +<a href="definitions.html#em">ems</a>, do +<br/> +<span class="pre-in-pp"> + .PARA_INDENT 4.5m +</span> +In addition to establishing the basic first line-indent of +paragraphs, PARA_INDENT also affects +<a href="#epigraph-intro">epigraphs</a>, +<a href="#quote-intro">quotes</a> +and +<a href="#blockquote-intro">blockquotes</a>, +whose overall indenting from the left and (where applicable) +right margins is relative to PARA_INDENT if +the _INDENT control macro for these tags has +no +<a href="definitions.html#unitofmeasure">unit of measure</a> +appended to it. Furthermore, the first-line indent of paragraphs +within these document elements (as well as footnotes) is also +relative to PARA_INDENT (always 1/2 of PARA_INDENT), hence they are +also affected. +</p> + +<p> +Mom’s default PARA_INDENT is 2 ems for +<a href="docprocessing.html#printstyle">PRINTSTYLE</a> +<kbd>TYPESET</kbd> and 3 picas (1/2 inch) for +<a href="docprocessing.html#printstyle">PRINTSTYLE</a> +<kbd>TYPEWRITE</kbd>. +</p> + +<h4 id="para-indent-first" class="docs" style="margin-top: -.25em;">7. Indenting initial paragraphs</h4> + +<p> +By default, mom does not indent the first paragraph of a document, +nor the first paragraph after a heading or +<a href="#linebreak-intro">linebreak</a>, +nor the first paragraphs of +<a href="#epigraph-intro">epigraphs</a>, +<a href="#blockquote-intro">blockquotes</a>, +<a href="#endnote-intro">endnotes</a> +or +<a href="#footnote-intro">footnotes</a> +that run to more than one paragraph. +</p> + +<p> +If you wish to have first paragraphs indented, invoke the macro +INDENT_FIRST_PARAS without an argument, either before or after +<a href="docprocessing.html#start">START</a>. +INDENT_FIRST_PARAS is a toggle macro, therefore passing it any +argument (<kbd>OFF</kbd>, <kbd>QUIT</kbd>, <kbd>Q</kbd>, +<kbd>X</kbd>...) cancels its effect, meaning that first paragraphs +will once again not be indented. +</p> + +<h4 id="pp-space" class="docs">8. Inter-paragraph spacing</h4> + +<p> +By default, mom does not insert a blank line between +paragraphs. If you would like her to do so, invoke the macro +PARA_SPACE without an argument, either before or after +<a href="docprocessing.html#start">START</a>. +PARA_SPACE is a toggle macro, therefore passing it any argument +(<kbd>OFF</kbd>, <kbd>QUIT</kbd>, <kbd>Q</kbd>, <kbd>X</kbd>...) +cancels its effect, meaning that paragraphs will once again not be +separated by a blank line. +</p> + +<p> +If you would like to space paragraphs by less than a full linespace, +invoke PARA_SPACE with the amount of space you want as a numeric +argument. A +<a href="definitions.html#unitofmeasure">unit of measure</a> +is required. For example, to space paragraphs by one-quarter +linespace +<span class="pre-in-pp"> + .PARA_SPACE .25v +</span> +is how you’d do it, or, if you want six points between +paragraphs +<span class="pre-in-pp"> + .PARA_SPACE 6p +</span> +</p> + +<p style="margin-top: -1em" > +If +<a href="docprocessing.html#flex-vs-shim">flex-spacing</a> +is enabled, additional flexible vertical whitespace can be inserted +between spaced paragraphs with the +<a href="docprocessing.html#flex">FLEX</a> +macro. +</p> + +<p> +PARA_SPACE is not recommended for use with PRINTSTYLE TYPEWRITE +unless you give PRINTSTYLE the <kbd>SINGLESPACE</kbd> option. +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="note">Note:</span> +If PARA_SPACE is on, mom spaces only those paragraphs that come +after an initial paragraph. Initial paragraphs are those that come +immediately after the +<a href="definitions.html#docheader">docheader</a> +(i.e. the start of a document), +<a href="#epigraph-intro">epigraphs</a>, +<a href="#heading-intro">headings</a>, +and +<a href="#linebreak-intro">linebreaks</a>. +(The first paragraph after these document elements requires no +blank line to separate it from other paragraphs.) +</p> + +<p class="tip-bottom"> +Sometimes, you can be fairly deep into a document before using PP +for the first time, and when you do, because mom is still waiting +for that initial paragraph, she doesn’t space it with a blank +line, even though you expect her to. The simple workaround for this +is to invoke <kbd>.PP</kbd> twice (in succession) at the point you +expect the blank line to appear. +</p> +</div> + +<div class="rule-short"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="heading-intro" class="macro-group">Headings</h2> + +<ul style="margin-left: -.5em;"> + <li><a href="#heading">Tag: HEADING</a></li> + <li><a href="#head-spacing-notes">Spacing of headings</a></li> + <li><a href="#heading-control">Heading control macros and defaults</a></li> + <li><a href="#prefix-chapter-number">Prefixing chapter numbers</a></li> + <li><a href="#oldstyle-headings">Oldstyle headings</a> + <ul style="list-style-type: circle; margin-left: -1.25em"> + <li><a href="#parahead">Important information about PARAHEAD</a> + <ul style="list-style-type: square; margin-left: -1.25em"> + <li><a href="#parahead-usage">Correct usage of paraheads</a></li> + </ul></li> + </ul></li> +</ul> + +<p> +Heads, subheads, and deeper levels of section headings are +handled by a single macro, HEADING, to which you pass an argument +stating the desired level. +<kbd><span class="nobr">.HEADING 1 "<text>"</span></kbd>, +for example, would be a main head; +<kbd><span class="nobr">.HEADING 2 "<text>"</span></kbd> +would be a subhead; etc. +</p> + +<p> +In addition to printing headings in the body of your document, +HEADING collects the heading as an entry for the Table of Contents, +if the document is to have one, and the +<a href="definitions.html#pdfoutline">PDF outline</a>. +With the <kbd>NAMED</kbd> argument, it furthermore acts as a +bookmark for +<a href="definitions.html#pdflink">PDF links</a>. +</p> + +<p> +Headings can also be numbered on a per-heading-level basis, +hierarchically and concatenatively, e.g. +<br/> +<span class="pre-in-pp"> + 1. + 1.1 + 1.2 + 1.2.1 + 2. + 2.1 + 2.2 + 2.2.1 +</span> +By default, a blank line precedes headings, regardless of the level. +Mom initially sets up a very basic style for nine levels of heading, +of which you can have an infinite number, although as has been said, +if you need more than four levels of heading, you should consider +re-organising your material. The pared-down style of mom’s +defaults is intentional; it is expected that you will design +headings to your own specifications with the +<a href="definitions.html#controlmacro">control macro</a>, +<a href="#heading-style">HEADING_STYLE</a>. +</p> + +<p> +It is very good practice, and strongly recommended, that you respect +the hierarchy of headings, using level-1 for main heads, level-2 for +subheads, level-3 for subsubheads, etc. The ease of designing and +re-designing the style for each level, plus mom’s very basic +defaults, are meant, in part, to prevent the whimsical misuse of +a particular heading level just because its style appeals to you. +</p> + +<!-- -HEAD- --> + +<div class="macro-id-overline"> +<h3 id="heading" class="macro-id">HEADING</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>HEADING</b> <kbd class="macro-args"><level> [ +PARAHEAD ] [ NAMED <pdf-id> ] "<heading text>"</kbd> +</div> + +<p> +The first argument to HEADING is the <kbd>level</kbd>. Level 1 is +analogous to a main head; level 2 is analogous to a subhead; level 3 +is analogous to a subsubhead; etc. +</p> + +<p> +The second (optional) argument, <kbd>PARAHEAD</kbd>, instructs mom +that the heading should be treated as a +<a href="definitions.html#parahead">paragraph head</a>. +If HEADING is being used to create a parahead, it must come after +<a href="#pp">PP</a>, +not before. +</p> + +<p> +The indent applied to a parahead is the same as what would be +expected from a paragraph without the parahead (see +<a href="#para-indent-first">Indenting initial paragraphs</a>). +If you wish that a paragraph introduced by a parahead not be +indented, use +<a href="#para-indent">PARA_INDENT</a> +to set the paragraph indent to zero, then reset the indent for +subsequent paragraphs. +</p> + +<p> +The optional third argument, <kbd>NAMED <id></kbd>, gives +the heading a unique, non-printing identifier that allows it to be +referenced from anywhere in the final PDF document with the PDF_LINK +macro, provided the mom file is processed with +<a href="using.html#pdfmom" style="font-weight: bold">pdfmom</a>. +PDF_LINK usage is explained in the manual, +<a href="http://www.schaffter.ca/mom/pdf/mom-pdf.pdf"><span class="book-title">Producing PDFs with groff and mom</span></a>. +</p> + +<p> +The final argument is the text of the heading, surrounded by double +quotes. Long headings that are likely to exceed the current +line length should be broken into chunks, each surrounded by +double-quotes, like this: +<br/> +<span class="pre-in-pp"> + .HEADING 1 "A needlessly long but instructive" "first level heading" +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If a heading falls near the bottom of an output page and mom is +unable to fit the heading plus at least one line of text underneath +it, she will set the head at the top of the next page. +</p> +</div> + +<div class="box-tip"> +<h3 id="head-spacing-notes" class="docs" style="padding-top: 9px; font-size: 100%; text-transform: none">Spacing of headings</h3> + +<p> +As described above, mom inserts a blank line before each heading. +If the leading of your document never changes, and you introduce no +additional space into the text—as, for example, between +paragraphs—this will result in perfectly equal whitespace before +each heading. +</p> + +<p> +If, however, you disrupt the regular placement of text on +mom’s +<a href="definitions.html#baseline-grid">baseline grid</a>, +HEADING adds extra whitespace to the blank line according to the +<a href="docprocessing.html#vertical-whitespace-management">vertical whitespace management</a> +strategy in effect. This, along with a similar strategy for +whitespace around quotes, blockquotes, and +<a href="definitions.html#float">floated</a> +and +<a href="definitions.html#preprocessor">pre-processor material</a> +is what allows mom to balance the bottom +margins of pages effectively. +</p> + +<p> +It occasionally happens that the extra whitespace becomes +noticeable. This typically occurs when the amount of whitespace +adjustment approaches the value of the current leading. The result +looks like two blank lines instead of one. When this happens, a +simple but effective fix is to reduce the space before the heading +by backing up one line, either with +<br/> +<span class="pre-in-pp"> + .SPACE -1v +</span> +or +<br/> +<span class="pre-in-pp"> + .RLD -1v +</span> +This results in slightly less whitespace than normal, but the +difference is usually not apparent. Alternatively, you may pass the +<kbd>NO_SHIM</kbd> or <kbd>NO_FLEX</kbd> argument to +<a href="#heading-style">HEADING_STYLE</a> +to prevent shimming or flex-spacing of any particular heading level +either globally or selectively. If shimming/flex-spacing is +disabled selectively with +<br/> +<span class="pre-in-pp"> + .HEADING_STYLE <n> NO_SHIM | NO_FLEX +</span> +it can be re-enabled for the heading level with +<br/> +<span class="pre-in-pp"> + .HEADING_STYLE <n> SHIM | FLEX +</span> +</p> +</div> + +<div class="defaults-container" style="background-color: #ded4bd; border: none;"> +<h3 id="heading-control" class="defaults" style="margin-left: 6px; margin-bottom: -1em">HEADING control and defaults</h3> + +<div style="padding-left: 15px; padding-right: 15px"> +<p style="margin-bottom: 1em"> +By default, mom pre-initializes nine levels of headings to use +the bold font of the prevailing document family, with a baseline +adjustment of 1/10 of the current +<a href="definitions.html#leading">leading</a>. +In addition, level-1 headings are 3 points larger than running text, +level-2 headings 2 points larger, and level 3-headings 1 point +larger. The remaining 6 levels are the same size as running text. +A single blank line precedes all levels of heading. +</p> + +<h4 id="heading-style" class="docs" style="margin-bottom: -.5em">The HEADING_STYLE macro</h4> + +<p> +Styling heads is accomplished with a single macro +<br/> +<span class="pre-in-pp"> + .HEADING_STYLE <level> +</span> +where <kbd><level></kbd> is the numeric heading level to which +the style applies. +</p> + +<p> +HEADING_STYLE takes any or all of the following arguments, +which may be given in any order: +<br/> +<span class="pre defaults"> + FAMILY <family> \ + FONT <font> \ + SIZE <+|-size> \ + QUAD <direction> \ + COLOR <colour> \ + UNDERSCORE <weight> <gap> | NO_UNDERSCORE \ + UNDERSCORE2 <weight> <gap1> <gap2> | NO_UNDERSCORE2 \ + CAPS | NO_CAPS \ + SMALLCAPS | NO_SMALLCAPS \ + BASELINE_ADJUST <amount to raise heading from the baseline> \ + NEEDS <lines of text required beneath the heading> \ + PREFIX_CHAPTER [<n>] \ + SPACE_AFTER | NO_SPACE_AFTER \ + NUMBER | NO_NUMBER \ + NO_SHIM | SHIM \ + NO_FLEX | FLEX +</span> +</p> + +<p> +You may enter your entire argument list on a single line, or, if it +is very long, break it into shorter lines with the +“line-continued” backslash (<kbd>\</kbd>), as shown +above. +</p> + +<p class="defaults" style="margin-bottom: 1em"> +The arguments to <kbd>FAMILY</kbd>, <kbd>FONT</kbd>, +<kbd>SIZE</kbd>, <kbd>QUAD</kbd>, and +<kbd>COLOR</kbd> are the same as +those you’d give to the +<a href="#docelement-control">control macros</a> +ending in _FAMILY, _FONT, _SIZE, _QUAD, or _COLOR. See +<a href="#control-macro-args">Arguments to the control macros</a>. +</p> + +<p class="defaults" style="margin-bottom: 1em"> +<kbd>UNDERSCORE</kbd> and <kbd>UNDERSCORE2</kbd> require that a +weight for the underscore be given, in points (decimal fractions +allowed), but without the unit of measure <kbd>p</kbd> appended. +They also require that the underscore’s distance from the +baseline be supplied; in the case of UNDERSCORE2, an additional gap +argument representing the distance between the two underscores must +be provided. +</p> + +<p class="defaults" style="margin-bottom: 1em"> +The <kbd>CAPS</kbd> argument capitalizes the text of a heading +level in the body of a document but not in the Table of +Contents, where capitalization of entries is controlled by +<a href="tables-of-contents.html#toc-entry-style">TOC_ENTRY_STYLE <n></a>. +</p> + +<p class="defaults" style="margin-bottom: 1em"> +<kbd>BASELINE_ADJUST</kbd> allows you to raise a heading slightly +above the baseline on which it would otherwise sit. For aesthetic +reasons, it is often desirable to introduce a small amount of space +between a heading and the text following it. Since headings are +preceded by a blank line, it is preferable to move the heading +upward than to lower the text following it. The argument to +BASELINE_ADJUST is the amount by which to raise the heading. It +requires no <kbd>+</kbd> or <kbd>-</kbd> sign, and must have a +<a href="definitions.html#unitofmeasure">unit of measure</a> +appended to it. +</p> + +<p class="defaults" style="margin-bottom: 1em"> +<kbd>NEEDS</kbd> lets you reserve the number of lines of text +required beneath a heading, including fractions thereof (e.g. +“1.5” for one line of text plus half a linespace). +If a heading falls near the bottom margin and there isn’t +sufficient room for both the heading and the reserved space, mom +will break to a new page for the heading. A +<a href="definitions.html#unitofmeasure">unit of measure</a> +should not be appended to the argument. +<span class="note"><i>Note:</i></span> If you have +<a href="goodies.html#dropcap">DROPCAP</a>s +after headings, you must increase the value of <kbd>NEEDS</kbd> +to match the number of dropcap lines. +</p> + +<p class="defaults" style="margin-bottom: 1em"> +<kbd>PREFIX_CHAPTER</kbd> instructs mom to prefix the current +chapter number to numbered headings. If mom is unable to determine +a chapter number, she will ask for one. +</p> + +<p class="defaults" style="margin-bottom: 1em"> +Note that using <kbd>PREFIX_CHAPTER</kbd> with an explicit chapter +number will also set the chapter number for subsequent +<a href="images.html#autolabel">automatically-generated image and pre-processor labels</a> +as well. +</p> + +<p class="defaults" style="margin-bottom: 1em"> +<kbd>SPACE_AFTER</kbd> inserts a blank line equal to the current +<a href="definitions.html#leading">leading</a> after a HEADING. +If you’d like a full linespace after a heading level, use +<kbd>SPACE_AFTER</kbd>. If you’d like additional space before +a heading level, you must introduce it yourself with +<a href="typesetting.html#space">SPACE</a> +or +<a href="typesetting.html#ald">ALD</a>. +</p> + +<p class="defaults" style="margin-bottom: 1em"> +<kbd>NUMBER</kbd> and <kbd>NO_NUMBER</kbd> allow you to determine +whether mom prepends a hierarchic numbering scheme to a heading +level in the body of a document. Numbering of Table of Contents +entries is controlled separately with +<a href="tables-of-contents.html#toc-entry-numbers">TOC_ENTRY_NUMBERS</a>. +Mom also has a special macro to toggle whether to prefix a chapter +number to numbered headings and Table of Contents entries, +<a href="#prefix-chapter-number">PREFIX_CHAPTER_NUMBER</a>. +</p> + +<p class="defaults" style="margin-bottom: 1em"> +<kbd>SHIM</kbd> is not necessary if shimming is enabled +globally, which it is by default; it exists to re-enable +shimming for the heading level if you have previously passed +HEADING_STYLE <kbd><n></kbd> a <kbd>NO_SHIM</kbd> +argument. The <kbd>FLEX</kbd> and <kbd>NO_FLEX</kbd> arguments work +the same way if flex-spacing is enabled. +</p> + +<p class="defaults" style="padding-bottom: .5em"> +The argument list is long, so you may want to break it into +several lines by using the backslash character (<kbd>\</kbd>). +Here’s an example of how you might style a level 1 heading: +<br/> +<span class="pre defaults"> + .HEADING_STYLE 1 \ + FONT B \ + QUAD C \ + UNDERSCORE .5 2p \ + BASELINE_ADJUST 3p \ + NUMBER +</span> +This creates a level-1 heading style that’s bold, centred, +underscored and numbered, raised by 3 points from the baseline. +</p> +</div> +</div> + +<!-- -PREFIX_CHAPTER_NUMBER- --> + +<div id="prefix-chapter-number" class="macro-id-overline" style="margin-top: -1em;"> +<h3 class="macro-id" style="text-transform: none; font-size: 105%;">Prefixing chapter numbers</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>PREFIX_CHAPTER_NUMBER</b> <kbd class="macro-args"><none> | <chapter number as digit> | <anything></kbd> +</div> + +<p> +If, in addition to numbering heads, you want mom to prepend the +chapter number, invoke <kbd>.PREFIX_CHAPTER_NUMBER</kbd>. +</p> + +<p> +When you invoke <kbd>.PREFIX_CHAPTER_NUMBER</kbd> without an +argument, mom checks to see whether the argument you passed to <a +href="docprocessing.html#chapter">CHAPTER</a> (if it’s been +called) is a digit. If it isn’t (say you’ve numbered your +chapter “One” instead of “1”), mom will +abort with a request that you pass PREFIX_CHAPTER_NUMBER a digit +representing the chapter number. +</p> + +<p> +After you invoke <kbd>.PREFIX_CHAPTER_NUMBER</kbd>, mom will prepend +the chapter number to all headings you have requested be numbered +with +<a href="#heading-style"><kbd>.HEADING_STYLE <n> NUMBER</kbd></a>. +Thus, assuming chapter number twelve (12): +<br/> +<span class="pre-in-pp"> + 1. LEVEL 1 HEADING + 1.1. Level 2 heading +</span> +would become +<br/> +<span class="pre-in-pp"> + 12.1. LEVEL 1 HEADING + 12.1.1. Level 2 heading +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If a chapter number is given to PREFIX_CHAPTER_NUMBER, automatically +generated labels with a prepended chapter number are also affected. +</p> +</div> + +<p> +In collated documents, mom automatically increments the digit used +by PREFIX_CHAPTER_NUMBER by one (current chapter digit + 1) every +time you invoke +<a href="rectoverso.html#collate"><kbd>.COLLATE</kbd></a>, +even if you’ve (temporarily) turned off the prefixing +of chapter numbers. Thus, even if you number your chapters +“One”, “Two”, “Three” instead of +“1”, “2”, “3”, mom will Do The +Right Thing with respect to numbering head (and label) elements +in all collated chapters following the first invocation of +PREFIX_CHAPTER_NUMBER (assuming, of course, that the collated +chapters are in incrementing order; if not, you must put +<br/> +<span class="pre-in-pp"> + .PREFIX_CHAPTER_NUMBER <chapter number> +</span> +somewhere after the invocation of COLLATE and before the first +numbered head element of each collated document). +</p> + +<p> +PREFIX_CHAPTER_NUMBER can be disabled by passing it any argument +other than a digit (e.g. (<kbd>OFF</kbd>, <kbd>QUIT</kbd>, <kbd>Q</kbd>, +<kbd>X</kbd>...), although, as noted above, mom will keep, +and—in the case of collated documents—increment the +chapter number, allowing you to turn prefixing of chapter numbers to +numbered head elements off and on according to your needs or whims. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Because PREFIX_CHAPTER_NUMBER takes an (optional) digit representing +the chapter number, it’s use need not be restricted to +<a href="docprocessing.html#doctype">DOCTYPE <kbd>CHAPTER</kbd></a>. +You can use it with any document type. Furthermore, even if +your doctype isn’t <kbd>CHAPTER</kbd>, you can identify +the document as a chapter for the purposes of numbering head +elements by invoking the macro +<a href="docprocessing.html#chapter"><kbd>.CHAPTER</kbd></a> +with a +<a href="definitions.html#numericargument">numeric argument</a> +in your document setup. +</p> +</div> +<div class="rule-short"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="oldstyle-headings-intro" class="macro-group">Oldstyle headings</h2> + +<ul style="margin-left: -.5em;"> + <li><a href="#oldstyle-headings">Macro: OLDSTYLE_HEADINGS</a></li> + <li><a href="#head">Macro: HEAD</a></li> + <li><a href="#subhead">Macro: SUBHEAD</a></li> + <li><a href="#subsubhead">Macro: SUBSUBHEAD</a></li> +</ul> + +<p> +In versions of mom prior to 2.0, headings were entered by their +commonly used names, <i>viz.</i> HEAD, SUBHEAD, and SUBSUBHEAD. The +new +<a href="#heading-intro">HEADING</a> +scheme allows for greater flexibility, and permits seamless +integration with PDF output. +</p> + +<p> +Documents created with pre-2.0 versions may still use the oldstyle +heading names, as may new documents, however there are some +differences in their behaviour. +</p> + +<p> +Whenever mom encounters an oldstyle heading, she loads the default +style formerly associated with the oldstyle name. See below for a +description of the default styles in the sections +<a href="#head">HEAD</a> (now HEADING 1), +<a href="#subhead">SUBHEAD</a> (now HEADING 2), +and +<a href="#subsubhead">SUBSUBHEAD</a> (now HEADING 3). +Mom also emits a message to stderr alerting you to what she’s +doing. +</p> + +<p> +The control macros formerly associated with oldstyle headings are no +longer present in mom’s macro file, which means that if you +made changes to mom’s default for those headings, you must +recreate the changes with the +<a href="#heading-style">HEADING_STYLE</a> +macro. The entire style need not be recreated, only those +parameters that differed from mom’s defaults. Thus, if your +HEADs were set flush left, instead of the oldstyle default, centred, +but otherwise kept mom’s settings, you need only do +<br/> +<span class="pre-in-pp"> + .HEADING_STYLE 1 QUAD L +</span> +</p> + +<div id="parahead" class="box-important"> +<p class="tip-top"> +<span class="important">Important:</span> +The macro PARAHEAD is no longer available. You must create paragraph +heads using the +<a href="#heading">HEADING</a> +macro. Mom will abort with an informational message whenever she +encounters PARAHEAD. Assuming a heading level of 3 for your +paraheads, the former defaults for PARAHEAD can be set up like this: +<br/> +<span class="pre-in-pp"> + .HEADING STYLE 3 FONT BI SIZE -.25 \" For PRINTSTYLE TYPESET + .HEADING STYLE 3 FONT I SIZE +0 \" For PRINTSTYLE TYPEWRITE +</span> +Equally, the macro NUMBER_PARAHEADS is no longer available. You +must enable numbering of the correct level for paraheads with +HEADING_STYLE. Again assuming a heading level of 3 for paraheads, +it’s simply done: +<br/> +<span class="pre-in-pp"> + .HEADING_STYLE 3 NUMBER +</span> +</p> + +<h3 id="parahead-usage" class="docs" style="text-transform: none; margin-top: -1em">Correct usage of paraheads</h3> + +<p style="margin-top: .5em"> +It is tempting to choose an arbitrary heading level for paraheads, +since they are sometimes needed out-of-sequence; for example, +immediately after a main head (level-1) in a document that +subsequently requires subheads (level-2). In such a circumstance, +choosing level-3 for all your paraheads might seem to make sense, +but in fact doesn’t, since it disrupts the hierarchy of +both the Table of Contents (if your document has one) and the PDF +outline. +</p> + +<p> +Correct use of the <kbd>PARAHEAD</kbd> option to HEADING under such +circumstances requires always assigning <kbd>PARAHEAD</kbd> to +the next logical level in the heading hierarchy. For example, if +there are no headings before the parahead, it should be assigned to +level-1. If subsequently there is a main head to be followed by +more paraheads, the main head should be level-1, and the paraheads +level-2. This will almost certainly require assigning new style +parameters to level-1 (with +<a href="#heading-style">HEADING_STYLE</a>) +and to the level now being used for paraheads. The following +example demonstrates. +<br/> +<span class="pre-in-pp"> + .HEADING_STYLE 1 FONT BI SIZE +.25 \" parahead style, level-1 + .PP + .HEADING 1 PARAHEAD <parahead> + <paragraph text> + .PP + .HEADING 1 PARAHEAD <parahead> + <paragraph text> + \# main head style, level-1 + .HEADING_STYLE 1 FONT B SIZE +3 QUAD CENTER UNDERSCORE .5 2p + .HEADING_STYLE 2 FONT BI SIZE +.25 \" parahead style, level-2 + .HEADING 1 <main head> + .PP + <paragraph text> + .PP + .HEADING 2 PARAHEAD <parahead> + <paragraph text> +</span> +</p> +</div> + +<!-- -OLDSTYLE_HEADINGS - --> + +<div class="macro-id-overline"> +<h3 id="oldstyle-headings" class="macro-id">OLDSTYLE HEADINGS</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>OLDSTYLE_HEADINGS</b> +</div> + +<p> +OLDSTYLE_HEADINGS requires no argument. It instructs mom to set the +first three levels of heading to the parameters of her old defaults +for HEAD, SUBHEAD, and SUBSUBHEAD. Use of OLDSTYLE_HEADINGS will +also prevent mom from generating the message she issues the first +time she encounters HEAD, SUBHEAD, and SUBSUBHEAD. +</p> + +<!-- -HEAD- --> + +<div id="head" class="box-macro-args"> +Macro: <b>HEAD</b> <kbd class="macro-args">[ NAMED <id> ] "<text of head>" "<another line>"...</kbd> +</div> + +<p> +When invoked for the first time, with or without +<a href="oldstyle-headings">OLDSTYLE_HEADINGS</a>, +HEAD sets the parameters for level-1 headings to mom’s old +HEAD defaults, then prints the head as a level-1 heading. +The <kbd>NAMED <id></kbd> optional argument is explained in +the description of +<a href="#heading">HEADING</a>. +</p> + +<p> +If, prior to invoking HEAD, you have given any parameters to level-1 +heads with +<a href="#heading-style">HEADING STYLE</a>, +they will be preserved; any you give afterwards will be respected. +</p> + +<p> +The former style defaults for HEAD were: +<br/> +<span class="pre-in-pp"> + FAMILY = prevailing document family + FONT = bold (TYPESET); roman (TYPEWRITE) + SIZE = +1 (TYPESET); +0 (TYPEWRITE) + QUAD = C + UNDERSCORE .5 2p + CAPS +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +The macro NUMBER_HEADS from pre-2.0 versions of mom, can still be +used, though it is now a wrapper for +<br/> +<span class="pre-in-pp"> + .HEADING_STYLE 1 NUMBER +</span> +Mom will alert you to this on stderr. +</p> +</div> + +<!-- -SUBHEAD- --> + +<div id="subhead" class="box-macro-args"> +Macro: <b>SUBHEAD</b> <kbd class="macro-args">[ NAMED <id> ] "<text of head>" "<another line>"...</kbd> +</div> + +<p> +When invoked for the first time, with or without +<a href="oldstyle-headings">OLDSTYLE_HEADINGS</a>, +SUBHEAD sets the parameters for level-2 headings to mom’s old +SUBHEAD defaults, then prints the subhead as a level-2 heading. +The <kbd>NAMED <id></kbd> optional argument is explained in +the description of +<a href="#heading">HEADING</a>. +</p> + +<p> +The former style defaults for SUBHEAD were: +<br/> +<span class="pre-in-pp"> + FAMILY = prevailing document family + FONT = bold (TYPESET); italic, i.e. underlined (TYPEWRITE) + SIZE = +.5 (TYPESET); +0 (TYPEWRITE) + QUAD = L + BASELINE_ADJUST = 1/8 the current leading +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +The macro NUMBER_SUBHEADS from pre-2.0 versions of mom, can still be +used, though it is now a wrapper for +<br/> +<span class="pre-in-pp"> + .HEADING_STYLE 2 NUMBER +</span> +Mom will alert you to this on stderr. +</p> +</div> + +<!-- -SUBSUBHEAD- --> + +<div id="subsubhead" class="box-macro-args"> +Macro: <b>SUBSUBHEAD</b> <kbd class="macro-args">[ NAMED <id> ] "<text of head>" "<another line>"...</kbd> + +</div> + +<p> +When invoked for the first time, with or without +<a href="oldstyle-headings">OLDSTYLE_HEADINGS</a>, +SUBSUBHEAD sets the parameters for level-3 headings to mom’s old +SUBSUBHEAD defaults, then prints the subsubhead as a level-3 heading. +The <kbd>NAMED <id></kbd> optional argument is explained in +the description of +<a href="#heading">HEADING</a>. +</p> + +<p> +The former style defaults for SUBSUBHEAD were: +<br/> +<span class="pre-in-pp"> + FAMILY = prevailing document family + FONT = italic (TYPESET); roman (TYPEWRITE) + SIZE = +.5 (TYPESET); +0 (TYPEWRITE) + QUAD = L + BASELINE_ADJUST = 1/8 the current leading +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +The macro NUMBER_SUBSUBHEADS from pre-2.0 versions of mom, can still be +used, though it is now a wrapper for +<br/> +<span class="pre-in-pp"> + .HEADING_STYLE 3 NUMBER +</span> +Mom will alert you to this on stderr. +</p> +</div> + +<div class="rule-short"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="linebreak-intro" class="macro-group">Linebreaks (section breaks)</h2> + +<ul style="margin-left: -.5em;"> + <li><a href="#linebreak">Tag: LINEBREAK</a></li> + <li><a href="#linebreak-control">Linebreak control macros and defaults</a></li> +</ul> + +<p> +Linebreaks (“author linebreaks”, “section +breaks”) are gaps in the vertical flow of running text that +indicate a shift in content (e.g. a scene change in story). They +are frequently set off by typographic symbols, sometimes whimsical +in nature. +</p> + +<!-- -LINEBREAK- --> + +<div class="macro-id-overline"> +<h3 id="linebreak" class="macro-id">LINEBREAK</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>LINEBREAK</b> +</div> +<p class="alias" style="margin-bottom: 0;"> +<i>Alias:</i> <b>SECTION</b> +</p> + +<p> +LINEBREAK takes no arguments. Simply invoke it (on a line by +itself, of course) whenever you want to insert an author linebreak. +</p> + +<div class="defaults-container" style="background-color: #ded4bd; border: none;"> +<h3 id="linebreak-control" class="docs defaults">LINEBREAK control macros and defaults</h3> + +<p class="defaults"> +By default, mom marks +<a href="definitions.html#linebreak">author linebreaks</a> +with three centred asterisks (stars) in the prevailing colour of the +document (by default, black). You can alter this with the control +macros +</p> +<ol style="margin-top: .5em; padding-bottom: .5em;"> + <li><a href="#linebreak-char">LINEBREAK_CHAR</a></li> + <li><a href="#linebreak-color">LINEBREAK_COLOR</a></li> +</ol> +</div> + +<h4 id="linebreak-char" class="docs" style="margin-top: -1.5em; margin-bottom: .5em;">1. Linebreak character</h4> +<div class="box-macro-args"> +Macro: <b>LINEBREAK_CHAR</b> <kbd class="macro-args">[ <character> ] [ <iterations> [ <vertical adjustment> ] ]</kbd> +</div> + +<p class="alias" style="margin-bottom: 0;"> +<i>Alias:</i> <b>SECTION_CHAR</b> +</p> +<p class="requires"> +• The third optional argument requires a +<a href="definitions.html#unitofmeasure">unit of measure</a>. +</p> + +<p> +LINEBREAK_CHAR determines what mom prints when LINEBREAK is invoked. +It takes 3 optional arguments: the character you want deposited at +the line break, the number of times you want the character repeated, +and a vertical adjustment factor. +</p> + +<p> +The first argument is any valid groff character (e.g. <kbd>*</kbd> +[an asterisk], <kbd>\[dg]</kbd> [a dagger], <kbd>\f[ZD]\N'141'\fP</kbd> +[an arbitrary character from Zapf Dingbats], <kbd>\l'4P'</kbd> [a +4-pica long rule]). Mom sets the character centred on the current +line length. (See <kbd>man groff_char</kbd> for a list of all +valid groff characters.) +</p> + +<p> +The second argument is the number of times to repeat the character. +</p> + +<p> +The third argument is a +|-value by which to raise (-) or lower (+) +the character in order to make it appear visually centred between +sections of text. This lets you make vertical adjustments to +characters that don’t sit on the +<a href="definitions.html#baseline">baseline</a> +(such as asterisks). The argument must be preceded by a plus or +minus sign, and must include a unit of measure. +</p> + +<p> +If you enter LINEBREAK_CHAR with no arguments, sections of +text will be separated by two blank lines when you invoke +<kbd>.LINEBREAK</kbd>. +</p> + +<p> +Mom’s default for LINEBREAK_CHAR is +<br/> +<span class="pre-in-pp"> + .LINEBREAK_CHAR * 3 -3p +</span> +i.e. three asterisks, raised 3 points from their normal vertical +position (for +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPESET</kbd></a>; +the vertical adjustment is -2 points for +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPEWRITE</kbd></a>). +</p> + +<h4 id="linebreak-color" class="docs" style="margin-top: -.25em; margin-bottom: .5em;">2. Linebreak colour</h4> + +<div class="box-macro-args"> +Macro: <b>LINEBREAK_COLOR</b> <kbd class="macro-args"><colourname></kbd> +</div> +<p class="alias" style="margin-bottom: 0;"> +<i>Alias:</i> <b>SECTION_COLOR</b> +</p> + +<p> +To change the colour of the linebreak character(s), simply invoke +<kbd>.LINEBREAK_COLOR</kbd> with the name of a colour pre-defined +(or “initialized”) with +<a href="color.html#newcolor">NEWCOLOR</a> +or +<a href="color.html#xcolor">XCOLOR</a>. + +</p> + +<div class="rule-short"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="quote-intro" class="macro-group">Quotes (line for line, poetry or code)</h2> + +<ul style="margin-left: -.5em;"> + <li><a href="#quote-description">Introduction</a> + <ul style="margin-left: -1.25em"> + <li><a href="#quote-spacing">Quote spacing</a> + <ul style="margin-left: -1.25em"> + <li><a href="#quote-spacing-notes">Notes on quote spacing</a></li> + </ul></li> + <li><a href="#no-shim">Disable shimming of quotes and blockquotes</a></li> + <li><a href="#float-quote">Keeping quotes and blockquotes together as a block</a></li> + <li><a href="#label-caption">Labelling/captioning quotes and blockquotes</a></li> + </ul></li> + <li><a href="#quote">Tag: QUOTE</a></li> + <li><a href="#quote-control">Quote control macros and defaults</a></li> +</ul> + +<p id="quote-decription"> +<a href="definitions.html#quote">Quotes</a> +are always set in +<a href="definitions.html#filled">nofill mode</a>, +flush left. This permits entering quotes on a line for line basis +in your text editor and have them come out the same way on output +copy. (See +<a href="#blockquote-intro">Blockquotes</a> +for how quotes, in the present sense, differ from longer passages of +cited text.) +</p> + +<p> +Since mom originally came into being to serve the needs of creative +writers (i.e. novelists, short story writers, etc.—not +to cast aspersions on the creativity of mathematicians and +programmers), she sets quotes in italics +<a href="docprocessing.html#printstyle">(PRINTSTYLE <kbd>TYPESET</kbd>)</a> +or underlined +<a href="docprocessing.html#printstyle">(PRINTSTYLE <kbd>TYPEWRITE</kbd>)</a>, +indented from the left margin. Obviously, she’s thinking +“quotes from poetry or song lyrics”, but with the +<a href="#quote-control">QUOTE control macros</a> +you can change her defaults so QUOTE serves other needs, e.g. +entering verbatim snippets of programming code, command-line +instructions, and so on. (See the +<a href="#code">CODE</a> +for a convenience macro to assist in including code snippets in +documents.) +</p> + +<h3 id="quote-spacing" class="docs">QUOTE spacing</h3> + +<p> +Besides indenting quotes, mom further sets them off from +<a href="definitions.html#running">running text</a> +with a small amount of vertical whitespace top and bottom. In +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPEWRITE</kbd></a>, +this is always one full linespace. In +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPESET</kbd></a>, +it’s 1/2 of the prevailing +<a href="definitions.html#leading">leading</a> +if the quote fits fully on the page (i.e. with running text above +and below it), otherwise it’s a full linespace either above +or below as is necessary to balance the page to the bottom margin. +This behaviour can be changed with the control macro +<a href="#always-fullspace-quotes">ALWAYS_FULLSPACE_QUOTES</a>. +</p> + +<div class="box-tip"> +<h3 id="quote-spacing-notes" class="docs" style="padding-top: 9px; font-size: 95%;">Notes on quote spacing</h3> + +<p style="margin-top: .5em"> +If your quote (or blockquote) leading differs from the document +leading, mom attempts to observe the same rules for vertical +whitespace outlined above; however, she will also insert a small, +flexible amount of extra whitespace +(<a href="docprocessing.html#shim-vs-flex">shim or flex-spacing</a>) +around the quotes to make sure the whitespace is equal, top and +bottom. When shimming is enabled, this may result in multiple +quotes or blockquotes on the same page being spaced slightly +differently. +</p> + +<h4 id="no-shim" class="docs">Disable shimming/flex-spacing of quotes and blockquotes</h4> + +<p class="tip-bottom"> +If you don’t want the behaviour +described above (i.e., you don’t want mom putting additional shim +or flex-spacing around quotes and +blockquotes), put <kbd>.NO_SHIM</kbd> or/and <kbd>.NO_FLEX</kbd> +in the style sheet section of your document (i.e. after PRINTSTYLE +but before START), which will disable shimming or/and flex-spacing +globally for all tags, or disable shimming/flex-spacing +on a per-instance basis prior to <kbd>.QUOTE</kbd> or +<kbd>.BLOCKQUOTE</kbd>, re-enabling it after the terminating +<kbd>.QUOTE OFF</kbd> or <kbd>.BLOCKQUOTE OFF</kbd> with +<kbd>.NO_SHIM OFF</kbd> or <kbd>.NO_FLEX OFF</kbd>. +</p> + +</div> + +<h3 id="float-quote" class="docs">Keeping QUOTEs and BLOCKQUOTEs together as a block</h3> + +<p> +The text of quotes and blockquotes is output immediately, and may therefore +start on one page and finish on the next. If you wish to keep the +text together as a block, deferred to the following page if the +block doesn’t all fit on one page, wrap +<kbd><span class="nobr">(BLOCK)QUOTE...(BLOCK)QUOTE OFF</span></kbd> +inside a +<a href="images.html#floats-intro">float</a>. +If you further wish to force a page break before the floated quote +or blockquote (leaving whitespace at the bottom of the page, pass +<a href="images.html#float">FLOAT</a> +the <kbd>FORCE</kbd> argument. +<span class="pre-in-pp"> + .FLOAT FORCE + .QUOTE + Fly me to the moon + And let me play among the stars + Let me see what life is like + On Jupiter and Mars + .QUOTE END + .FLOAT OFF +</span> +</p> + +<h3 id="label-caption" class="docs">Labelling/captioning quotes and blockquotes</h3> + +<p> +Quotes and blockquotes may be labelled and/or captioned identically to +<a href="images.html#floats-intro">floats</a> +with the macros +<a href="images.html#label">LABEL</a> +and +<a href="images.html#caption">CAPTION</a> +(see +<a href="images.html#float-label-caption">Labelling and captioning floats</a>). +</p> + +<!-- -QUOTE- --> + +<div class="macro-id-overline"> +<h3 id="quote" class="macro-id">QUOTE</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>QUOTE</b> <kbd class="macro-args">[ ADJUST +|-<space> ] | <anything></kbd> +</div> +<p class="requires"> +• The argument to <kbd style="font-style: normal">ADJUST</kbd> requires a +<a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +QUOTE is a toggle macro. To begin a section of quoted text, invoke +it with no argument, then type in your quote. When you’re +finished, invoke <kbd>.QUOTE</kbd> with any argument (e.g. <kbd>OFF, +END, X, Q</kbd>...) to turn it off. Example: +<br/> +<span class="pre-in-pp"> + .QUOTE + Nymphomaniacal Jill + Used a dynamite stick for a thrill + They found her vagina + In North Carolina + And bits of her tits in Brazil. + .QUOTE END +</span> +Mom does her best to equalize whitespace around quotes and make +sure the line following it falls on a valid baseline. On occasion, +you may need to tweak the quote placement slightly, which is done +by passing <kbd>ADJUST</kbd> to QUOTE with a plus or minus value. +The quote will be lowered (<kbd>+</kbd>) or raised (<kbd>-</kbd>) +<i>within the space allotted for it</i> by the given amount. For +example, to lower a quote slightly within the space allotted for it, +you’d do +<br/> +<span class="pre-in-pp"> + .QUOTE ADJUST +3p + There was a soprano named Golda + Whose lovers grew colda and colda + For during love-making + She'd sing the earth-shaking + Love theme from Tristan und Isolde. + .QUOTE off +</span> +</p> + +<div class="defaults-container" style="background-color: #ded4bd; border: none;"> + +<h3 id="quote-control" class="docs defaults">QUOTE control macros and defaults</h3> + +<ol style="margin-top: .5em; padding-bottom: .5em;"> + <li><a href="#quote-general">Family/font/size/leading/colour/indent</a></li> + <li><a href="#always-fullspace-quotes">Spacing above and below quotes (typeset only)</a></li> + <li><a href="#underline-quotes">Underlining quotes (typewrite only)</a></li> +</ol> +</div> + +<h4 id="quote-general" class="docs" style="margin-top: -1.5em; margin-bottom: .5em;">1. Family/font/size/colour/indent</h4> + +<div class="defaults-container" style="padding-bottom: 8px;"> +<p class="defaults" style="padding-top: 6px;"> +See +<a href="#control-macro-args">Arguments to the control macros</a>. +<br/> +The following QUOTE control macros may also be +<a href="#grouping">grouped</a> +using QUOTE_STYLE. If you do so, <kbd>QUOTE_LEFT</kbd>, <kbd>QUOTE_CENTER</kbd>, +and <kbd>QUOTE_RIGHT</kbd> must be entered as: +<br/> +<kbd> QUAD LEFT</kbd><br/> +<kbd> QUAD CENTER</kbd><br/> +<kbd> QUAD RIGHT</kbd> +</p> + +<span class="pre defaults"> +.QUOTE_FAMILY default = prevailing document family; default is Times Roman +.QUOTE_FONT default = italic; underlined in TYPEWRITE +.QUOTE_SIZE default = +0 (i.e. same size as paragraph text) +<a id="quote-autolead">.QUOTE_AUTOLEAD default = none; leading of quotes is the same as paragraphs </a> +.QUOTE_COLOR default = black +.QUOTE_INDENT (see below, "Quote indent") +.QUOTE_LEFT -+ Quad direction of quote. +.QUOTE_CENTER | LEFT observes QUOTE_INDENT; +.QUOTE_RIGHT -+ CENTER and RIGHT do not +</span> +</div> + +<h4 id="quote-indent" class="docs" style="margin-top: -1.5em;">Quote indent</h4> + +<p> +<kbd>QUOTE_INDENT</kbd> takes one of two kinds of argument: an integer +representing the amount by which to multiply the argument passed to +<a href="#para-indent"><kbd>.PARA_INDENT</kbd></a> +(by default, 2 +<a href="definitions.html#em">ems</a> +for TYPESET, 3 +<a href="definitions.html#picaspoints">picas</a> +for TYPEWRITE) to arrive at the quote indent, or a distance with a +<a href="definitions.html#unitofmesaure">unit of measure</a> +appended. +</p> + +<p> +Be careful when using QUOTE. If a quote is set flush left (the +default), the QUOTE_INDENT applies only to the left margin. Because +quote lines are output as-is (see +<a href="definitions.html#no-fill">no-fill mode</a>), +they do not respect line length and may extend beyond a document's +right margin. Similarly, if a quote is being set flush right, the +indent applies only to the right margin; long lines may extend into +the left margin. Centered quotes are never indented, so long lines +may extend beyond both the left and right margins. +</p> + +<p> +The default value for QUOTE_INDENT is 3 (for +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPESET</kbd></a>) +and 1 (for +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPEWRITE</kbd></a>). +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If your PARA_INDENT is 0 (i.e. no indenting of the first line of +paragraphs), you <i>must</i> set a QUOTE_INDENT yourself, with a +unit of measure appended to the argument. Mom has no default for +QUOTE_INDENT if paragraph first lines are not being indented. +</p> +</div> + +<h4 id="always-fullspace-quotes" class="docs" style="margin-top: -.25em;">2. Spacing above and below quotes (typeset only)</h4> + +<p> +If you’d like mom always to put a full linespace above and +below quotes, invoke +<br/> +<span class="pre-in-pp"> + .ALWAYS_FULLSPACE_QUOTES +</span> +with no argument. If you wish to restore mom’s +default behaviour regarding the spacing of quotes (see +<a href="#quote-spacing">Quote spacing</a>), +invoke the macro with any argument (<kbd>OFF</kbd>, <kbd>QUIT</kbd>, +<kbd>END</kbd>, <kbd>X</kbd>...) +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +This macro also sets mom’s spacing policy for +<a href="#blockquote-intro">blockquotes</a>. +</p> +</div> + +<h4 id="underline-quotes" class="docs" style="margin-top: -.25em;">3. Underlining quotes (typewrite only)</h4> + +<p> +By default in +<a href="docprocessing.html#printstyle">PRINTSTYLE TYPEWRITE</a>, +mom underlines quotes. If you’d rather she didn’t, +invoke <kbd>.UNDERLINE_QUOTES</kbd> with any argument +(<kbd>OFF</kbd>, <kbd>QUIT</kbd>, <kbd>END</kbd>, <kbd>X</kbd>...) +to disable the feature. Invoke it without an argument to restore +mom’s default underlining of quotes. +</p> + +<p> +If you not only wish that mom not underline quotes, but also that +she set them in italic, you must follow each instance of QUOTE with +the typesetting macro +<a href="typesetting.html#font">FT I</a>. +Furthermore, since mom underlines all instances of italics by +default in PRINTSTYLE TYPEWRITE, you must also make sure that +ITALIC_MEANS_ITALIC is enabled (see +<a href="docprocessing.html#typewrite-control">PRINTSTYLE TYPEWRITE control macros</a>). +</p> + +<div class="rule-short"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="blockquote-intro" class="macro-group">Blockquotes (cited material)</h2> + +<ul style="margin-left: -.5em;"> + <li><a href="#blockquote-description">Introduction</a></li> + <li><a href="#blockquote">Tag: BLOCKQUOTE</a></li> + <li><a href="#blockquote-control">BLOCKQUOTE control macros</a></li> +</ul> + +<p id="blockquote-description"> +<a href="definitions.html#blockquote">Blockquotes</a> +are used to cite passages from another author’s work. So that +they stand out well from +<a href="definitions.html#running">running text</a>, +mom indents them from both the left and right margins and sets them +in a different point size +(<a href="docprocessing.html#printstyle">PRINTSTYLE TYPESET</a> +only). +<a href="definitions.html#outputline">Output lines</a> +are +<a href="definitions.html#filled">filled</a>, +and, by default, +<a href="definitions.html#quad">quadded</a> +left. +</p> + +<p> +Besides indenting blockquotes, mom further sets them off from +running text with a small amount of vertical whitespace top and +bottom. (See +<a href="#quote-spacing">Quote spacing</a> +for a complete explanation of how this is managed, and how +to control it.) +</p> + +<p> +Additional information concerning blockquotes, floats, and labelling +blockquotes can be found in the sections +<a href="#float-quote">Keeping quotes and blockquotes together as a block</a>, +and +<a href="#label-caption">Labelling/captioning quotes and blockquotes</a>. +</p> + +<!-- -BLOCKQUOTE- --> + +<div class="macro-id-overline"> +<h3 id="blockquote" class="macro-id">BLOCKQUOTE</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>BLOCKQUOTE</b> <kbd class="macro-args">[ ADJUST +|-<space> ] | <anything></kbd> +</div> + +<p class="alias" style="margin-bottom: 0;"> +<i>Aliases: </i> <b>CITE, CITATION</b> +</p> + +<p class="requires"> +• The argument to <kbd style="font-style: normal">ADJUST</kbd> requires a +<a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +BLOCKQUOTE is a toggle macro. To begin a cited passage, invoke +the tag with no argument, then type in your blockquote. When +you’re finished, invoke <kbd>.BLOCKQUOTE</kbd> with any +argument (e.g. <kbd>OFF, END, X, Q</kbd>...) to turn it off. +Example: +<br/> +<span class="pre-in-pp"> + .BLOCKQUOTE + Redefining the role of the United States from enablers to keep + the peace to enablers to keep the peace from peacekeepers is + going to be an assignment. + .RIGHT + \[em]George W. Bush + .BLOCKQUOTE END +</span> +If the cited passage runs to more than one paragraph, you must +introduce each paragraph—including the first—with +<kbd><a href="#pp">.PP</a></kbd>. +</p> + +<p> +Mom does her best to equalize whitespace around blockquotes and make +sure the line following it falls on a valid baseline. On occasion, +you may need to tweak the blockquote placement slightly, which is +done by passing <kbd>ADJUST</kbd> to BLOCKQUOTE with a plus or minus +value. The blockquote will be lowered (<kbd>+</kbd>) or raised +(<kbd>-</kbd>) <i>within the space allotted for it</i> by the given +amount. For example, to raise a blockquote slightly within the +space allotted for it, you’d do +<br/> +<span class="pre-in-pp"> + .BLOCKQUOTE ADJUST -3p + True! - nervous - very, very dreadfully nervous I had been and + am; but why will you say that I am mad? The disease had sharpened + my senses - not destroyed - not dulled them. + .RIGHT + \[em]Edgar Allen Poe, The Tell-Tale Heart + .QUOTE off +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +The aliases CITE and CITATION may be used in place of the BLOCKQUOTE +tag, as well as in any of the control macros that begin or end with +BLOCKQUOTE_. +</p> +</div> + +<div class="defaults-container" style="background-color: #ded4bd; border: none;"> +<h3 id="blockquote-control" class="docs defaults">BLOCKQUOTE control macros and defaults</h3> + +<ol style="margin-top: .5em; padding-bottom: .5em;"> + <li><a href="#blockquote-general">Family/font/size/leading/colour/quad/indent</a></li> + <li><a href="#bq-always-fullspace-quotes">Spacing above and below (typeset only)</a></li> +</ol> +</div> + +<h4 id="blockquote-general" class="docs" style="margin-top: -1.5em; margin-bottom: .5em;">1. Family/font/size/colour/quad/indent</h4> + +<div class="defaults-container" style="padding-bottom: 8px;"> +<p class="defaults" style="padding-top: 6px;"> +See +<a href="#control-macro-args">Arguments to the control macros</a>. +<br/> +The following BLOCKQUOTE control macros may also be +<a href="#grouping">grouped</a> +using BLOCKQUOTE_STYLE. +</p> +<span class="pre defaults"> +.BLOCKQUOTE_FAMILY default = prevailing document family; default is Times Roman +.BLOCKQUOTE_FONT default = roman +.BLOCKQUOTE_SIZE default = -1 (point) +<a id="blockquote-autolead">.BLOCKQUOTE_AUTOLEAD default = none; leading of blockquotes is the same as paragraphs</a> +.BLOCKQUOTE_COLOR default = black +.BLOCKQUOTE_QUAD default = left +.BLOCKQUOTE_INDENT (see below) +</span> +</div> + +<h4 id="blockquote-indent" class="docs" style="margin-top: -1.5em;">Blockquote indent</h4> + +<p> +<kbd>BLOCKQUOTE_INDENT</kbd> takes one of two kinds of argument: an +integer representing the amount by which to multiply the argument +passed to +<a href="#para-indent">PARA_INDENT</a> +(by default, 2 +<a href="definitions.html#em">ems</a> +for TYPESET, 3 +<a href="definitions.html#picaspoints">picas</a> +for TYPEWRITE) to arrive at the blockquote indent, or a distance with a +<a href="definitions.html#unitofmesaure">unit of measure</a> +appended. Both result in blockquotes being indented equally from +the left and right margins. +</p> + +<p> +The default value for BLOCKQUOTE_INDENT is 3 (for +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPESET</kbd></a>) +and 1 (for +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPEWRITE</kbd></a>). +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If your PARA_INDENT is 0 (i.e. no indenting of the first line of +paragraphs), you must set a BLOCKQUOTE_INDENT yourself, with +a unit of measure appended to the argument. Mom has no default for +BLOCKQUOTE_INDENT if paragraph first lines are not being indented. +</p> +</div> + + + +<h4 id="bq-always-fullspace-quotes" class="docs">2. Spacing above and below blockquotes (typeset only)</h4> + +<p> +If you’d like mom always to put a full linespace above and +below blockquotes, invoke +<br/> +<span class="pre-in-pp"> + .ALWAYS_FULLSPACE_QUOTES +</span> +with no argument. If you wish to restore mom’s default +behaviour regarding the spacing of blockquotes (see +<a href="#quote-spacing">Quote spacing</a>), +invoke the macro with any argument (<kbd>OFF</kbd>, <kbd>QUIT</kbd>, +<kbd>END</kbd>, <kbd>X</kbd>...). +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +This macro also sets mom’s spacing policy for +<a href="#quote-intro">quotes</a>. +</p> +</div> + +<div class="rule-short"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="code-intro" class="macro-group">Inserting code into a document</h2> + +<ul style="margin-left: -.5em;"> + <li><a href="#code">Tag: CODE</a></li> + <li><a href="#code-control">CODE control macros and defaults</a></li> +</ul> + +<p> +CODE is a convenience macro that facilitates entering code blocks +into documents. Its use is not restricted to documents created +using mom’s document processing macros; it can be used for +“manually” typeset documents as well. +</p> + +<div class="macro-id-overline"> +<h3 id="code" class="macro-id">CODE</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>CODE</b> <kbd class="macro-args">[BR | BREAK | SPREAD] <anything></kbd> +</div> + +<p class="requires" style="font-style: normal"> +Inline escape: <b><kbd>\*[CODE]</kbd></b> +</p> + +<p> +When you invoke the macro CODE or insert +<kbd><span class="nobr">\*[CODE]</span></kbd> into running text, mom switches to +a +<a href="definitions.html#fixedwidthfont">fixed-width font</a> +(Courier, by default) and turns +<a href="goodies.html#smartquotes">SMARTQUOTES</a> +off. +</p> + +<p> +If your code includes the backslash character, which is +groff’s escape character, you will have to change the +escape character temporarily to something else with the macro +<a href="goodies.html#esc-char">ESC_CHAR</a>. +Mom has no way of knowing what special characters you’re going +to use in code snippets, therefore she cannot automatically replace +the escape character with something else. +</p> + +<p> +The correct order for changing the escape character inside +<kbd>CODE</kbd> is +<span class="pre-in-pp"> + .CODE + .ESC_CHAR character + <code> + .ESC_CHAR \ + .CODE OFF +</span> +Be aware that changing the escape character prevents subsequent +macros, which require that the backslash be the escape character, +from functioning correctly. Therefore, do not introduce any macros +into your CODE block without first restoring the escape character to +its default. +</p> + +<p> +Alternatively, you can enter the backslash character as +<kbd>\e</kbd> or <kbd>\\</kbd> (two backslashes), which tells groff +to print a literal backslash. +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="tip">Note:</span> +<kbd>.CODE</kbd> does not cause a line break when +you’re in a +<a href="definitions.html#filled">fill mode</a> +(i.e. +<a href="typesetting.html#justify">JUSTIFY</a> +or +<a href="typesetting.html#quad">QUAD</a> +<kbd>LEFT, CENTER,</kbd> or <kbd>RIGHT</kbd>). +If you want CODE to deposit a break, invoke <kbd>.CODE</kbd> with +the argument <kbd>BR</kbd> (or <kbd>BREAK</kbd>). If, in addition +to having mom break the line before <kbd>.CODE</kbd>, you want her +to +<a href="definitions.html#force">force justify</a> +it as well, invoke <kbd>.CODE</kbd> with the argument, +<kbd>SPREAD</kbd>. If, in addition to breaking the line before CODE +you want a break afterwards, you must supply it manually with +<a href="typesetting.html#br">BR</a> +unless what follows immediately is a macro that automatically causes +a break (e.g. +<a href="#pp">PP</a>). +</p> + +<p id="quote-code" class="tip-bottom"> +In all likelihood, if you want the situation described above (i.e. a +break before and after CODE), what you probably want is to use +<a href="quote">QUOTE</a> +in conjunction with CODE, like this: +<br/> +<span class="pre-in-pp"> + .QUOTE + .CODE + $ echo "Hello, world" | sed -e 's/Hello,/Goodbye, cruel/' + .QUOTE OFF +</span> +QUOTE takes care of breaking both the text and the code, as well as +indenting the code and offsetting it from +<a href="definitions.html#running">running text</a> +with vertical whitespace. Notice that <kbd>.CODE</kbd>, above, has +no corresponding <kbd>.CODE OFF</kbd>. <kbd>.CODE</kbd> inside a QUOTE +does not require a terminating <kbd>.CODE OFF</kbd>, which risks +introducing unwanted vertical whitespace. +</p> +</div> + +<p> +Passing any argument other than <kbd>BR</kbd>, <kbd>BREAK</kbd> or +<kbd>SPREAD</kbd> to CODE (e.g. <kbd>OFF</kbd>, <kbd>QUIT</kbd>, +<kbd>END</kbd>, <kbd>X</kbd>, etc) turns CODE off and returns the +family, font, and smartquotes back to their former state. +</p> + +<h4 class="docs" style="font-size: 102%">Using <kbd>\*[CODE]</kbd> inline</h4> + +<p> +<kbd><span class="nobr">\*[CODE]</span></kbd> invokes <kbd>.CODE</kbd>, allowing you to +bracket code snippets inline. It does not accept the <kbd>BR</kbd>, +<kbd>BREAK</kbd>, or <kbd>SPREAD</kbd> arguments. It is most useful +for short snippets, as in the following example. +<br/> +<span class="pre-in-pp"> + \*[CODE]apropos\*[CODE X] and \*[CODE]man -k\*[CODE X] are identical. +</span> +</p> + +<p> +<kbd><span class="nobr">\*[CODE]</span></kbd> does not permit changing the escape +character, so <kbd>\e</kbd> or a doubled backslash must be used. +Furthermore, if your code starts with a period, you must enter it as +“<kbd>\&.</kbd>”. +<br/> +<span class="pre-in-pp"> + Registers are created with the \*[CODE]\&.nr\*[CODE X] request. +</span> +</p> + +<h4 class="docs" style="font-size: 102%; margin-top: -1em">CODE and punctuation</h4> + +<p> +<kbd>.CODE OFF</kbd> automatically inserts a word space into +running text. If your CODE block is to be followed by punctuation +with the parameters of +<a href="definitions.html#running">running text</a>, +you must terminate the block with “<kbd>\c</kbd>” and +enter the punctuation at the beginning of the next input line. If +the punctuation mark is a period or an apostrophe, you must precede +it with +“<kbd>\&</kbd>”. +<br/> +<span class="pre-in-pp"> + ...for example, + .CODE + echo "Hello, world" | sed -e 's/Hello,/Goodbye, cruel/'\c + .CODE OFF + \&. As this demonstrates... +</span> +Use of <kbd><span class="nobr">\*[CODE]</span></kbd> inline does not require +the <kbd>\c</kbd>, however periods and apostrophes after +<kbd><span class="nobr">\*[CODE X]</span></kbd> still need to be introduced +with <kbd>\&</kbd>, as in this example: +<br/> +<span class="pre-in-pp"> + ...append the unit of measure \*[CODE]p\*[CODE OFF]\&. New sentence... +</span> +</p> + + +<div class="defaults-container" style="background-color: #ded4bd; border: none;"> +<h3 id="code-control" class="docs defaults">CODE control macros and defaults</h3> + +<ol style="margin-top: .5em; padding-bottom: .5em;"> + <li><a href="#code-general">Family/Font/Colour</a></li> + <li><a href="#code-size">Size</a></li> +</ol> +</div> + +<h4 id="code-general" class="docs" style="margin-top: -1.5em; margin-bottom: .5em;">1. Family/font/colour</h4> + +<div class="defaults-container" style="padding-bottom: 8px;"> +<p class="defaults" style="padding-top: 6px;"> +See +<a href="#control-macro-args">Arguments to the control macros</a>. +<br/> +The following CODE control macros may also be +<a href="#grouping">grouped</a> +using CODE_STYLE. +</p> +<span class="pre defaults"> +.CODE_FAMILY default = Courier +.CODE_FONT default = roman; see Note +.CODE_COLOR default = black + +Note: Unlike other control macros, CODE_FONT sets the code font for both +PRINTSTYLE TYPESET and PRINTSTYLE TYPEWRITE. +</span> +</div> + +<h4 id="code-size" class="docs" style="margin-top: -1.25em;">2. Size</h4> + +<p> +CODE_SIZE works a little differently from the other _SIZE macros +(see <a href="#control-macro-args">Arguments to the control +macros</a>). The argument you pass it is a percentage of the +prevailing document point size. It does not require a prepended +plus (<kbd>+</kbd>) or minus (<kbd>-</kbd>) sign, nor an appended +percent sign (<kbd>%</kbd>). Thus, if you want the point size of your CODE font to be +90% of the prevailing document point size, you enter: +<br/> +<span class="pre-in-pp"> + .CODE_SIZE 90 +</span> +Fixed-width fonts have notoriously whimsical +<a href="definitions.html#xheight">x-heights</a>, +meaning that they frequently look bigger (or, in some cases, +smaller) than the type surrounding them, even if they’re +technically the same point size. CODE_SIZE lets you choose a +percentage of the prevailing point size for your fixed-width +CODE font so it doesn’t look gangly or minuscule in relation +to the type around it. All invocations of <kbd>.CODE</kbd> or +<kbd><span class="nobr">\*[CODE]</span></kbd> will use this size, so that if you +decide to change the prevailing point size of your document, the +CODE font will be scaled proportionally. +</p> + +<div class="rule-short"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="list-intro" class="macro-group">Nested lists</h2> + +<ul style="margin-left: -.5em;"> + <li><a href="#list">Tag: LIST</a></li> + <li><a href="#item">Tag: ITEM</a></li> + <li><a href="#list-control">LIST control macros and defaults</a></li> +</ul> + +<p> +Lists are points or items of interest or importance that are +separated from +<a href="definitions.html#running">running text</a> +by enumerators. Some typical enumerators are +<a href="definitions.html#em">en-dashes</a>, +<a href="definitions.html#bullet">bullets</a>, +digits and letters. +</p> + +<p> +Setting lists with mom is easy. First, you initialize a list with +the LIST macro. Then, for every item in the list, you invoke +the macro <kbd>.ITEM</kbd> followed by the text of the item. +When a list is finished, you exit the list with +<kbd>.LIST OFF</kbd> (or <kbd>QUIT</kbd>, <kbd>END</kbd>, +<kbd>BACK</kbd>, etc.) +</p> + +<p> +By default mom starts each list with the enumerator flush with the +left margin of running text that comes before it, like this: +<br/> +<span class="pre-in-pp"> + My daily schedule needs organising. I can’t + seem to get everything done I want. + o an hour’s worth of exercise + o time to prepare at least one healthy + meal per day + o reading time + o work on mom + o writing + - changes from publisher + - current novel + o a couple of hours at the piano +</span> +In other words, mom does not, by default, indent entire lists. +Indenting a list is controlled by the macro +<a href="#shift-list">SHIFT_LIST</a>. +(This is a design decision; there are too many instances where a +default indent is not desirable.) Equally, mom does not add any +extra space above or below lists. +</p> + +<p> +Lists can be nested (as in the example above). In other words, +you can set lists within lists, each with an enumerator (and +possibly, indent) of your choosing. In nested lists, each +invocation of <kbd>.LIST OFF</kbd> (you may prefer to use +<kbd>.LIST BACK</kbd>) takes you back to the previous depth +(or level) of list, with that list’s enumerator and indent +intact. The final <kbd>.LIST OFF</kbd> exits lists completely +and returns you to the left margin of running text. +</p> + +<p> +If +<kbd><a href="typesetting.html#quad">QUAD CENTER</a></kbd> +is in effect when LIST is invoked, the list is set quad left but +centred on the page as a block, based on the longest line of list +text. Equally, if <kbd>QUAD RIGHT</kbd> in in effect, the list is +set flush left but quadded right as a block. If you want a centred +or right-quadded list in an otherwise left-quadded or justified +document, simply invoke <kbd>.QUAD <direction></kbd> +before the list and reset the quad afterwards. Do not use +<kbd><a href="typesetting.html#lrc">CENTER</a></kbd> +or +<kbd><a href="typesetting.html#lrc">RIGHT</a></kbd>. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Mom centres lists over the entire line length, disregarding +<a href="typesetting.html#ib">IB</a> +if it is in effect. If there are lines in the list that exceed +the margins of IB, they must be broken manually with +<kbd>.BR</kbd> if you wish to keep them within the indented margins. +</p> +</div> + +<p> +Finally, lists can be used in documents created with either the +<a href="docprocessing.html#top">document processing macros</a> +or just the +<a href="typesetting.html#top">typesetting macros</a>. +</p> + +<!-- -LIST- --> + +<div class="macro-id-overline"> +<h3 id="list" class="macro-id">LIST</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>LIST</b> <kbd class="macro-args">[ BULLET | DASH | DIGIT | ALPHA | alpha | ROMAN<n> | roman<n> | USER <user-defined enumerator> | PLAIN | VARIABLE <character>] [ <separator> ] [ <prefix> ] [ <anything> ]</kbd> +</div> + +<p> +Invoked by itself (i.e. with no argument), LIST +initializes a list with bullets as the default enumerator. +Afterwards, each block of input text preceded by +<kbd><a href="#item">.ITEM</a></kbd>, +on a line by itself, is treated as a list item. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Every time you invoke <kbd>.LIST</kbd> to start a list (as opposed to +<a href="#list-exit">exiting one</a>), +you must supply an enumerator (and optionally, a separator) for the +list, unless you want mom’s default enumerator, which is a +bullet. Within nested lists, mom stores the enumerator, separator +and indent for any list you return <i>backwards</i> to (i.e. with +<kbd>.LIST OFF</kbd>), but does not store any information for lists +you move <i>forward</i> to. +</p> +</div> + +<p> +There are a lot of arguments (be sure to side-scroll through them +all, above), so I’ll discuss them one at a time here. +</p> +<h3 class="docs">The first argument – enumerator style</h3> + +<p> +The optional arguments <kbd>BULLET</kbd>, <kbd>DASH</kbd>, +<kbd>DIGIT</kbd> (for Arabic numerals), <kbd>ALPHA</kbd> (for +uppercase letters), <kbd>alpha</kbd> (for lowercase letters), +<kbd>ROMAN<n></kbd> (for uppercase roman numerals), +<kbd>roman<n></kbd> (for lowercase roman numerals) tell +mom what kind of enumerator to use for a given list. +</p> + +<p> +The arguments, <kbd>ROMAN<n></kbd> and +<kbd>roman<n></kbd>, are special. You must append to them +a digit (arabic, e.g. "1" or "9" or "17") saying how many items a +particular roman-numeraled LIST is going to have. Mom requires this +information in order to align roman numerals sensibly, and will +abort—with a message — if you don’t provide it. +(For setting roman numeral and digit lists with the enumerators +aligned flush right—the default is flush left—see +<a href="#pad-list-digits">PAD_LIST_DIGITS</a>.) +</p> + +<p> +A roman-numeraled list containing, say, five items, would be set +up like this: +<br/> +<span class="pre-in-pp"> + .LIST roman5 producing i) Item 1. + .ITEM ii) Item 2. + Item 1. iii) Item 3. + .ITEM iv) Item 4. + Item 2. v) Item 5. + .ITEM + Item 3 + .ITEM + Item 4 + .ITEM + Item 5 +</span> +</p> + +<p> +The argument <kbd>VARIABLE <character></kbd> lets +you choose different enumerators for the items in a list. +<kbd><character></kbd> is the widest enumerator to +be used. Thus, if you have a list enumerated by both bullets +and em-dashes, you’d set it up with +<br/> +<span class="pre-in-pp"> + .LIST VARIABLE \[em] +</span> +and select the enumerator you want with +<br/> +<span class="pre-in-pp"> + .ITEM \[em] +</span> +or +<br/> +<span class="pre-in-pp"> + .ITEM \[bu] +</span> +If your enumerator contains spaces, you must enclose the +<kbd><character></kbd> argument in both LIST and ITEM in +double-quotes, e.g. +<br/> +<span class="pre-in-pp"> + .LIST VARIABLE "\*[UP 1p]\[bu]\*[DOWN 1p]" + .ITEM "\*[UP 1p]\[bu]\*[DOWN 1p]" +</span> +</p> + +<p> +The argument <kbd>USER</kbd> lets you make up your own enumerator, +and must be followed by a second argument: what you’d like the +enumerator to look like. For example, if you want a list enumerated +with <kbd>=></kbd>, +<br/> +<span class="pre-in-pp"> + .LIST USER => + .ITEM + A list item +</span> + +will produce +<br/> +<span class="pre-in-pp"> + => A list item +</span> +Some useful special groff characters you might want to pass to +<kbd>USER</kbd> are: +<span class="pre-in-pp"> + \[sq] - square box + \[rh] - pointing hand + \[->] - right arrow + \[rA] - right double arrow + \[OK] - checkmark +</span> +The size and vertical positioning of special characters may be +adjusted with +<a href="definitions.html#inlines">inline escapes</a> +in the argument passed to USER. For example, to raise the position +of <kbd><span class="nobr">\[sq]</span></kbd> slightly, you might do +<span class="pre-in-pp"> + .LIST USER "\*[UP .25p]\[sq]\*[DOWN .25p]" + or + .LIST USER \v'-.25p'\[sq]\v'.25p' +</span> +</p> + +<p> +The argument <kbd>PLAIN</kbd> initializes a list with no enumerator. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If the argument to <kbd>USER</kbd> contains spaces, you must enclose +the argument in double quotes. +</p> +</div> + +<h3 class="docs">The second argument – separator style</h3> + +<p> +If you choose <kbd>DIGIT</kbd>, <kbd>ALPHA</kbd>, <kbd>alpha</kbd>, +<kbd>ROMAN<n></kbd>, or <kbd>roman<n></kbd>, you may +enter the optional argument, <kbd>separator</kbd>, to say what kind +of separator you want after the enumerator. The separator can be +anything you like. The default for <kbd>DIGIT</kbd> is a period +(dot), like this: +<br/> +<span class="pre-in-pp"> + 1. A list item +</span> +The default separator for <kbd>ALPHA</kbd>, <kbd>alpha</kbd>, +<kbd>ROMAN<n></kbd> and <kbd>roman<n></kbd> is a right +parenthesis, like this: +<br/> +<span class="pre-in-pp"> + a) An alpha-ed list item + b) A second alpha-ed list item +</span> +If you’d prefer, say, digits with right-parenthesis separators +instead of the default period, you’d do +<br/> +<span class="pre-in-pp"> + .LIST DIGIT ) + .ITEM + A numbered list item +</span> +which would produce +<br/> +<span class="pre-in-pp"> + 1) A numbered list item +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +<kbd>BULLET</kbd>, <kbd>DASH</kbd> and <kbd>USER</kbd> do not take a +separator. +</p> +</div> + +<h3 class="docs">The third argument – prefix style</h3> + +<p> +Additionally, you may give a prefix (i.e. a character +that comes <i>before</i> the enumerator) when your +enumerator style for a particular list is <kbd>DIGIT</kbd>, +<kbd>ALPHA</kbd>, <kbd>alpha</kbd>, <kbd>ROMAN<n></kbd> or +<kbd>roman<n></kbd>. In the arguments to LIST, the prefix +comes <i>after</i> the separator, which is counter-intuitive, +so please be careful. +</p> + +<p> +A prefix can be anything you like. Most likely, you’ll want +some kind of open-bracket, such as a left parenthesis. If, for +example, you want a <kbd>DIGIT</kbd> list with the numbers enclosed +in parentheses, you’d enter +<br/> +<span class="pre-in-pp"> + .LIST DIGIT ) ( + .ITEM + The first item on the list. + .ITEM + The second item on the list. +</span> +which would produce +<br/> +<span class="pre-in-pp"> + (1) The first item on the list. + (2) The second item on the list. +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +<kbd>BULLET</kbd>, <kbd>DASH</kbd> and +<kbd>USER</kbd> do not take a prefix. +</p> +</div> + +<h3 class="docs">Exiting lists – LIST OFF / BACK or QUIT_LISTS</h3> + +<p> +Any single argument to <kbd>LIST</kbd> other than +<kbd>BULLET</kbd>, <kbd>DASH</kbd>, <kbd>DIGIT</kbd>, +<kbd>ALPHA</kbd>, <kbd>alpha</kbd>, <kbd>ROMAN<n></kbd>, +<kbd>roman<n></kbd> or <kbd>USER</kbd> (e.g. +<kbd>LIST OFF</kbd> or <kbd>LIST BACK</kbd>) takes you out +of the current list. +</p> + +<p> +If you are at the first list-level (or list-depth), mom returns you +to the left margin of running text. Any indents that were in effect +prior to setting the list are fully restored. +</p> + +<p> +If you are in a nested list, mom moves you back one list-level +(i.e., does not take you out of the list structure) and restores the +enumerator, separator and indent appropriate to that level. +</p> + +<p> +Each invocation of <kbd>.LIST</kbd> should thus be matched by +a corresponding <kbd>.LIST OFF</kbd> in order to fully exit +lists. For example, +<br/> +<span class="pre-in-pp"> + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, + sed diam nonumy eirmod tempor invidunt ut labore. + o List item in level 1 + o List item in level 1 + - List item in level 2 + - List item in level 2 + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, + sed diam nonumy eirmod tempor invidunt ut labore. +</span> +is created like this: +<br/> +<span class="pre-in-pp"> + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, + sed diam nonumy eirmod tempor invidunt ut labore. + .LIST BULLET + .ITEM + List item in level 1 + .ITEM + List item in level 1 + .LIST DASH + .ITEM + List item in level 2 + .ITEM + List item in level 2 + .LIST OFF \" Turn level 2 list off + .LIST OFF \" Turn level 1 list off + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, + sed diam nonumy eirmod tempor invidunt ut labore. +</span> +Alternatively, you may use the single-purpose macro +<kbd>.QUIT_LISTS</kbd>, to get yourself out of a list structure. In +the example above, the two <kbd>.LIST OFF</kbd> lines could be +replaced with a single <kbd>.QUIT_LISTS</kbd>. +</p> + +<div class="macro-id-overline"> +<h3 id="item" class="macro-id">ITEM</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>ITEM</b> <kbd class="macro-args">[<enumerator>] [<space>]</kbd> +</div> +<p class="requires"> +• The argument to <kbd style="font-style: normal"><space></kbd> requires a +<a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +After you’ve initialized a list with +<a href="#list">LIST</a>, +precede each item you want in the list with <kbd>.ITEM</kbd>. Mom +takes care of everything else with respect to setting the item +appropriate to the list you’re in. +</p> + +<p> +If you’ve chosen the <kbd>VARIABLE</kbd> argument when +invoking LIST, ITEM must be followed by an enumerator character. +</p> + +<p> +If you give ITEM a space argument, either by itself or after a +variable enumerator character, the item will be spaced by the amount +of the argument. +</p> + +<p> +In document processing, it is valid to have list items that contain +multiple paragraphs. Simply issue a +<kbd><a href="#pp">.PP</a></kbd> +request for each paragraph <i>following</i> the first item. +I.e., don’t do this: +<br/> +<span class="pre-in-pp"> + .ITEM + .PP + Some text... + .PP + A second paragraph of text +</span> +but rather +<br/> +<span class="pre-in-pp"> + .ITEM + Some text... + .PP + A second paragraph of text +</span> +</p> + +<div class="defaults-container" style="background-color: #ded4bd; border: none;"> +<h3 id="list-control" class="docs defaults">LIST control macros and defaults</h3> + +<p style="margin-top: 0; margin-left: .5em"> +LIST control macros may not be +<a href="#grouping">grouped</a>. +</p> + +<ol style="margin-top: -.5em; padding-left: 1.5em; padding-bottom: .5em;"> + <li><a href="#shift-list">Indenting lists (SHIFT_LIST)</a></li> + <li><a href="#reset-list">Resetting an initialized list’s enumerator (RESET_LIST)</a></li> + <li><a href="#pad-list-digits">Padding digit enumerators (PAD_LIST_DIGITS)</a></li> +</ol> +</div> + +<h4 id="shift-list" class="docs" style="margin-top: -1.5em;">1. Indenting lists – SHIFT_LIST</h4> + +<p> +If you want a list to be indented to the right of running text, or +indented to the right of a current list, use the macro SHIFT_LIST +immediately after +<a href="#list">LIST</a>. +SHIFT_LIST takes just one argument: the amount by which you want the +list shifted to the right. The argument requires a +<a href="definitions.html#unitofmeasure">unit of measure</a>. +</p> + +<p> +SHIFT_LIST applies only to the list you just initialized with LIST. +It does not carry over from one invocation of LIST to the next. +However, the indent remains in effect when you return to a list +level in a nested list. +</p> + +<p> +For example, if you want a 2-level list, with each list indented to +the right by 18 +<a href="definitions.html#picaspoints">points</a>, +<br/> +<span class="pre-in-pp"> + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, + sed diam nonumy eirmod tempor invidunt ut labore. + .LIST \" List 1 + .SHIFT_LIST 18p \" Indent 18 points right of running text + .ITEM + List 1 item + .ITEM + List 1 item + .LIST DASH \" List 2 + .SHIFT_LIST 18p \" Indent 18 points right of list 1 + .ITEM + List 2 item + .ITEM + List 2 item + .LIST OFF \" Move back to list 1 + .ITEM + List 1 item + .ITEM + List 1 item + .LIST OFF \" Exit lists + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, + sed diam nonumy eirmod tempor invidunt ut labore. +</span> +produces (approximately) +<br/> +<span class="pre-in-pp"> + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, + sed diam nonumy eirmod tempor invidunt ut labore. + • List 1 item + • List 1 item + - List 2 item + - List 2 item + • List 1 item + • List 1 item + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, + sed diam nonumy eirmod tempor invidunt ut labore. +</span> +</p> + +<h4 id="reset-list" class="docs" style="margin-top: -.25em;">2. Resetting an initialized list’s enumerator – RESET_LIST</h4> + +<p> +In nested lists, if your choice of enumerator for a given level +of list is <kbd>DIGIT</kbd>, <kbd>ALPHA</kbd>, <kbd>alpha</kbd>, +<kbd>ROMAN</kbd> or <kbd>roman</kbd>, you may sometimes want to +reset the list’s enumerator when you return to that list. +Consider the following: +<br/> +<span class="pre-in-pp"> + Things to do religiously each and every day: + • take care of the dog + a) walk every day + b) brush once a week + - trim around the eyes every fourth brushing + - don’t forget to check nails + • feed the cat + d) soft food on Mon., Wed. and Fri. + e) dry food on Tues., Thurs. and Sat. + f) canned tuna on Sunday +</span> +</p> + +<p> +The alpha-enumerated items under “Feed the cat” +would be normally a), b), c), but we want d), e), f). The +solution is to reset the second <kbd>.LIST alpha</kbd>’s +enumerator—before the first <kbd>.ITEM</kbd>—with +the macro RESET_LIST. +</p> + +<p> +With no argument, <kbd>.RESET_LIST</kbd> resets an incrementing +enumerator to 1, A, a, I or i depending on the style of enumerator. +If you pass <kbd>.RESET_LIST</kbd> a +<a href="definitions.html#numericargument">numeric argument</a>, +it represents the starting position for an incrementing enumerator. In +the example above, <kbd>.RESET_LIST 4</kbd> starts the second +alpha-ed list at d). +</p> + +<h4 id="pad-list-digits" class="docs" style="margin-top: -.25em;">3. Padding digit enumerators – PAD_LIST_DIGITS</h4> + +<h5 class="docs" style="margin-top: 1em;">Arabic digits</h5> + +<p style="margin-top: .5em;"> +When your choice of enumerators is DIGIT and the number of items +in the list exceeds nine (9), you have to make a design decision: +should mom leave room for the extra numeral in two-numeral digits to +the right or the left of the single-numeral digits? +</p> + +<p> +If you want the extra space to the right, invoke the macro +<kbd>.PAD_LIST_DIGITS</kbd> (with no argument), after +<kbd>.LIST</kbd> and before <kbd>.ITEM</kbd>. This will produce +something like +<br/> +<span class="pre-in-pp"> + 8. List item + 9. List item + 10. List item +</span> +If you want the extra space to the left, invoke +<kbd>.PAD_LIST_DIGITS</kbd> with the single argument, +<kbd>LEFT</kbd>, which will produce +<br/> +<span class="pre-in-pp"> + 8. List item + 9. List item + 10. List item +</span> +</p> + +<p> +Of course, if the number of items in the list is less than ten +(10), there’s no need for PAD_LIST_DIGITS. +</p> + +<h5 class="docs" style="margin-top: -.5em;">Roman numerals</h5> + +<p style="margin-top: .5em;"> +By default, mom sets roman numerals in lists flush left. The +<kbd><n></kbd> argument appended to <kbd>ROMAN<n></kbd> +or <kbd>roman<n></kbd> allows her to calculate how much space +to put after each numeral in order to ensure that the text of items +lines up properly. +</p> + +<p> +If you’d like the roman numerals to line +up flush right (i.e. be padded "left"), simply +invoke <kbd>.PAD_LIST_DIGITS LEFT</kbd> after +<kbd>.LIST ROMAN<n></kbd> or +<kbd>.LIST roman<n></kbd> and before <kbd>.ITEM</kbd>. +</p> + +<div class="rule-short"><hr/></div> + +<!-- -LINE NUMBERING- --> + +<h2 id="number-lines-intro" class="macro-group">Line numbering – prepend numbers to output lines</h2> + +<ul style="margin-left: -.5em;"> + <li><a href="#number-lines">Macro: <b>NUMBER_LINES</b></a> + <ul style="margin-left: -.5em;"> + <li><a href="#ln-control">Line numbering control (off/suspend, resume)</a></li> + </ul></li> + <li><a href="#number-lines-control">Control macros and defaults</a> + <ul style="margin-left: -.5em;"> + <li><a href="#number-quote-lines">Line numbering control macros for quotes and blockquotes</a></li> + </ul></li> +</ul> + +<p style="margin-top: -.5em;"> +When you turn line-numbering on, mom, by default +</p> +<ul style="margin-top: -.5em;"> + <li>numbers every line of paragraph text; line-numbering is + suspended for all other document processing tags (like + docheaders, epigraphs, headings, quotes, etc.) and special + pages (covers, endotes, bibliographies, etc.); be aware, + though, that if you turn + <a href="definitions.html#docheader">docheaders</a> + off (with + <a href="docprocessing.html#docheader">DOCHEADER</a> OFF) + and create your own docheader, mom + <i>will</i> line-number your custom docheader, so turn + line numbering on afterwards + </li> + <li>doesn’t touch your line length; line numbers are hung + outside your current left margin (as set with + <a href="typesetting.html#l-margin">L_MARGIN</a>, + <a href="typesetting.html#page">PAGE</a> + or + <a href="docprocessing.html#doc-left-margin">DOC_LEFT_MARGIN</a>), + regardless of any indents that may be active + </li> + <li>separates line numbers from running text by two + <a href="definitions.html#figurespace">figure spaces</a>. + </li> +</ul> + +<p> +Mom expects that +<a href="#quote">QUOTE</a>s +and +<a href="#blockquote">BLOCKQUOTE</a>s +will not be line-numbered, however control macros are provided to +enable line numbering for either. +See +<a href="#number-quote-lines">Line numbering control macros for quotes and blockquotes</a>. +</p> + +<!-- -NUMBER_LINES- --> + +<div class="macro-id-overline"> +<h3 id="number-lines" class="macro-id">NUMBER_LINES</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>NUMBER_LINES</b> <kbd class="macro-args"><start number> [ <which lines to number> [ <gutter> ] ]</kbd> +</div> + +<div class="box-macro-args" style="margin-top: 1em;"> +Macro: <b>NUMBER_LINES</b> <kbd class="macro-args"><anything> | RESUME</kbd> +</div> + +<p> +NUMBER_LINES does what it says: prints line numbers, to the left of +<a href="definitions.html#outputline">output lines</a> +of paragraph text. One of the chief reasons for wanting numbered +lines is in order to identify footnotes or endnotes by line number +instead of by a marker in the text. (See +<a href="#footnotes-by-linenumber">Footnotes by linenumber</a> +for instructions on line-numbered footnotes, and +<a href="#endnote-marker-style">ENDNOTE_MARKER_STYLE LINE</a> +for instructions on line-numbered endnotes.) +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Do not use NUMBER_LINES inside +<a href="#quote">QUOTE</a> +or +<a href="#blockquote">BLOCKQUOTE</a>. +By default, mom expects that quotes and blockquotes will not be +line numbered. If you wish to enable line numbering for them, you +must invoke +<a href="#number-quote-lines">NUMBER_QUOTE_LINES</a> +or +<a href="#number-quote-lines">NUMBER_BLOCKQUOTE_LINES</a>. +</p> +</div> + + +<p> +The first time you invoke +<a href="#number-lines">NUMBER_LINES</a> +you must, at a minimum, tell it what line number you want the +<i>next</i> +<a href="definitions.html#outputline">output line</a> +to have. The optional arguments <kbd><which lines to number></kbd> +and <kbd><gutter></kbd> allow you to state which lines should +be numbered (e.g. every five or every ten lines), and the gutter to +place between line numbers and +<a href="definitions.html#running">running text</a>. +</p> + +<p> +For example, if you want mom to number output lines using her defaults, +<span class="pre-in-pp"> + .NUMBER_LINES 1 +</span> +will prepend the number, 1, to the next output line and number all +subsequent output lines sequentially. +</p> + +<p> +If you want only every five lines numbered, pass mom the optional +<kbd><which lines to number></kbd> argument, like this: +<span class="pre-in-pp"> + .NUMBER_LINES 1 5 +</span> +</p> + +<div class="box-important"> +<p class="tip-top"> +<span class="important">GOTCHA!</span> +The argument to <kbd><which lines to number></kbd> instructs +mom to number only those lines that are multiples of the argument. +Hence, in the above example, line number <kbd>1</kbd> will +<i>not</i> be numbered, since <kbd>1</kbd> is not a multiple of +<kbd>5</kbd>. +</p> + +<p> +If you want line number <kbd>1</kbd> to be numbered, you have +to invoke <kbd><span class="nobr">.NUMBER_LINES 1 1</span></kbd> before the +first output line you want numbered, then study your <i>output</i> +copy and determine where best to insert the following in your +<i>input</i> text: +<br/> +<span class="pre-in-pp"> + .NUMBER_LINES \n[ln] 5 +</span> +(The escape <kbd>\n[ln]</kbd> ensures that NUMBER_LINES +automatically supplies the correct value for the first argument, +<kbd><start number></kbd>.) +</p> + +<p class="tip-bottom"> +Following this recipe, line number <kbd>1</kbd> will be numbered; +subsequently, only line numbers that are multiples of 5 will be +numbered. A little experimentation may be required to determine the +best place for it in your input text. +</p> +</div> + +<p> +The optional argument, <kbd><gutter></kbd>, tells mom how much +space to put between the line numbers and the running text. +<kbd><gutter></kbd> does not require (or even accept) a +<a href="definitions.html#unitofmeasure">unit of measure</a>. +The argument you pass to it is the number of +<a href="definitions.html#figurespace">figure spaces</a> +you want between line numbers and running text. +Mom’s default gutter is two figure spaces. If +you’d like a wider gutter, say, four figures spaces, you’d do +<br/> +<span class="pre-in-pp"> + .NUMBER_LINES 1 1 4 + | + +-- Notice you *must* supply a value + for the 2nd argument in order to supply + a value for the 3rd. +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +When giving a value for <kbd><gutter></kbd>, you cannot skip +the <kbd><which lines to number></kbd> argument. Either fill +in the desired value, or use two double-quotes ( <kbd>""</kbd> ) to +have mom use the value formerly in effect. +</p> +</div> + +<h3 id="ln-control" class="docs" style="margin-top: -.5em;">Off/suspend, resume</h3> + +<p style="margin-top: .5em;"> +After initializing line numbering, you can suspend it, with the +option to resume, using +<br/> +<span class="pre-in-pp"> + .NUMBER_LINES OFF +</span> +(or <kbd>END</kbd>, <kbd>QUIT</kbd>, <kbd>X</kbd>, etc). +</p> + +<p>To resume line numbering: +<br/> +<span class="pre-in-pp"> + .NUMBER_LINES RESUME +</span> +When you resume, the line number will be the next in sequence +from where you left off. If that is not what you want—say +you want to reset the line number to <kbd>1</kbd>—re-invoke +<kbd>.NUMBER_LINES</kbd> with whatever arguments are needed for the +desired result. +</p> + +<div class="box-tip" style="margin-left: 6px;"> +<p class="tip"> +<span class="note">Additional notes:</span> +</p> +<ol style="margin-top: -1.25em; margin-left: -1.25em; padding-bottom: .5em;"> + <li>In document processing, you may invoke + <kbd>.NUMBER_LINES</kbd> either before or after + <kbd>.START</kbd>. Mom doesn’t care. + </li> + <li style="margin-top: .25em;">If you’re collating documents with + <a href="rectoverso.html#collate">COLLATE</a>, + you should re-invoke, at a minimum, + <kbd>.NUMBER_LINES 1</kbd> for each collated + document, in order to ensure that each begins with the + number <kbd>1</kbd> prepended to the first line. + </li> + <li style="margin-top: .25em;">Occasionally, you may want to + change the current gutter between line numbers and running + text without knowing what the next output line number should + be. Since NUMBER_LINES requires this number as its first + argument, in such instances, pass NUMBER_LINES as its first + argument the escape + <kbd>\n[ln]</kbd>. + <br/> + <span style="display: block; margin-top: .5em;">For example, if you were numbering every 5 lines with a + gutter of 2 (figure spaces) and you needed to change the + gutter to 4 (figures spaces), + <br/> + <span class="pre-in-pp" style="margin-bottom: -2em;"> + .NUMBER_LINES \n[ln] 5 4 + </span> + would do the trick. + </span> + </li> + <li style="margin-top: .25em;">If you’re using + <a href="#mn-intro">margin notes</a> + in a document, be sure to set the gutter for margin notes wide + enough to allow room for the line numbers. + </li> + <li style="margin-top: .25em;">Mom (groff, actually), only numbers + lines <i>to the left</i> of running text. For aesthetic + reason, therefore, the use of line numbering when setting a + document in columns is discouraged. However, should you wish + to number lines when setting in columns, make sure the + <a href="definitions.html#gutter">gutter(s)</a> + between columns is wide enough to leave room for the numbers. + </li> +</ol> +</div> + +<div class="defaults-container" style="background-color: #ded4bd; border: none;"> +<h3 id="number-lines-control" class="docs defaults">NUMBER_LINES control macros and defaults</h3> + +<ol style="margin-top: .5em; padding-bottom: .5em;"> + <li><a href="#number-lines-general">Family/font/size/colour</a></li> + <li><a href="#number-lines-per-section">Reset line numbering after COLLATE</a></li> + <li><a href="#number-quote-lines">Line numbering control for quotes and blockquotes</a> + <ul style="padding-left: 1em"> + <li><a href="#number-quote-lines-global">Including QUOTEs and BLOCKQUOTEs in the line numbering scheme</a></li> + <li><a href="#number-quote-lines-selective">Selectively enabling line numbering for QUOTEs and BLOCKQUOTEs</a></li> + <li><a href="#number-quote-lines-gutter">Changing the line number gutter for QUOTEs and BLOCKQUOTEs</a></li> + <li><a href="#number-quote-lines-silent">Silently increment line numbers during QUOTE and BLOCKQUOTE</a></li> + </ul></li> +</ol> +</div> + +<h4 id="number-lines-general" class="docs" style="margin-top: -1.5em; margin-bottom: .5em;">1. Family/font/size/colour</h4> + +<div class="defaults-container" style="padding-bottom: 8px;"> +<p class="defaults" style="padding-top: 6px;"> +See +<a href="#control-macro-args">Arguments to the control macros</a>. +<br/> +The following NUMBER_LINES control macros may also be +<a href="#grouping">grouped</a> +using LINENUMBER_STYLE. +</p> +<span class="pre defaults"> +.LINENUMBER_FAMILY default = prevailing family or document family; default is Times Roman +.LINENUMBER_FONT default = prevailing font +.LINENUMBER_SIZE default = +0 +.LINENUMBER_COLOR default = black +</span> +</div> + +<h4 id="number-lines-per-section" class="docs" style="margin-top: -1.75em;">2. Reset line numbering after COLLATE</h4> + +<p> +After +<a href="rectoverso.html#collate">COLLATE</a>, +line numbering continues from where it left off. If you would like +each chapter or major document section to begin its line numbering +at “1”, invoke +<span class="pre-in-pp"> + .NUMBER_LINES_PER_SECTION +</span> +after +<a href="#number-lines"><kbd>.NUMBER_LINES</kbd></a>. +</p> + +<h4 id="number-quote-lines" class="docs" style="margin-top: 0em;">3. Line numbering control macros for QUOTE and BLOCKQUOTE</h4> + +<h5 id="number-quote-lines-global" class="docs" style="font-size: 87%">• Including QUOTEs and BLOCKQUOTEs in the line numbering scheme</h5> + +<p> +If you’d like mom to number lines in a +<a href="#quote">QUOTE</a> +or +<a href="#blockquote">BLOCKQUOTE</a> +as part of the same order and sequence as paragraph text, +invoke +<span class="pre-in-pp"> + .NUMBER_QUOTE_LINES +</span> +or +<span class="pre-in-pp"> + .NUMBER_BLOCKQUOTE_LINES +</span> +either before or after NUMBER_LINES. Both behave identically with +respect to the affected macro (i.e. QUOTE or BLOCKQUOTE). +</p> + +<h5 id="number-quote-lines-selective" class="docs" style="font-size: 87%">• Selectively enabling line numbering for QUOTEs and BLOCKQUOTEs</h5> + +<p> +If you’d like to enable line numbering selectively for quotes +and blockquotes <i>only</i>, invoke <kbd>.NUMBER_QUOTE_LINES</kbd> +or <kbd>.NUMBER_BLOCKQUOTE_LINES</kbd> first, followed by +<kbd>.NUMBER_LINES <n></kbd>, where <kbd><n></kbd> +is the first line number of the quote or blockquote. Afterwards, +enter your QUOTE or BLOCKQUOTE. When the quote or blockquote +is finished (i.e. after <kbd>.QUOTE OFF</kbd> or +<kbd>.BLOCKQUOTE OFF</kbd>), turn line numbering off. Each +subsequent quote or blockquote you want line numbered requires +only <kbd>.NUMBER_LINES <n></kbd> (with a corresponding +<kbd>.NUMBER_LINES OFF</kbd>) until you turn NUMBER_QUOTE_LINES or +NUMBER_BLOCKQUOTE_LINES off. +</p> + +<p> +Here’s a recipe where the first line number of quotes starts +repeatedly at “1”. +<span class="pre-in-pp"> + <running text> + .NUMBER_QUOTE_LINES + .NUMBER_LINES 1 + .QUOTE + <text of quote> + .QUOTE OFF + .NUMBER_LINES OFF + <further running text> + .NUMBER_LINES 1 + .QUOTE + <text of quote> + .QUOTE OFF + .NUMBER_LINES OFF + <further running text> +</span> +</p> + +<h5 id="number-quote-lines-gutter" class="docs" style="font-size: 87%">• Changing the line number gutter for QUOTEs and BLOCKQUOTEs</h5> + +<p> +Owing to groff’s restriction on accepting only the figure +space as the line number +<a href="definitions.html#gutter">gutter</a>’s +unit of measure, it is not possible for line numbers in quotes +or blockquotes to hang outside a document’s overall left +margin and be reliably flush with the line numbers of paragraph +text. Consequently, line numbers in quotes or blockquotes hang +to the left of the quote, separated by the currently active +gutter for NUMBER_LINES. +</p> + +<p> +If you’d like to change the line number gutter for quotes +or blockquotes, invoke <kbd>.NUMBER_QUOTE_LINES</kbd> or +<kbd>.NUMBER_BLOCKQUOTE_LINES</kbd> with a digit representing the +number of +<a href="definitions.html#figurespace">figure spaces</a> +you’d like between the line numbers and the quoted text, like this: +<br/> +<span class="pre-in-pp"> + .NUMBER_QUOTE_LINES 3 +</span> +With the above, line numbers in quotes (and only quotes) will have +a gutter of 3 figure spaces. +</p> + +<h5 id="number-quote-lines-silent" class="docs" style="font-size: 87%">• Silently increment line numbers during QUOTE and BLOCKQUOTE</h5> + +<p> +If you’ve asked mom not to line number quotes or blockquotes, +but would like line numbering to continue while they’re +being output (as opposed to mom’s default behaviour of +<i>suspending</i> incrementing of line numbers during the output of +quotes and blockquotes), invoke +<span class="pre-in-pp"> + .NUMBER_QUOTE_LINES SILENT +</span> +or +<span class="pre-in-pp"> + .NUMBER_BLOCKQUOTE_LINES SILENT +</span> +With these, mom continues to increment line numbers while quotes +or blockquotes are being output, but the line numbers won’t +appear in the output copy. +</p> + +<p> +Once having turned NUMBER_QUOTE_LINES or NUMBER_BLOCKQUOTE_LINES on, +you may disable them with +<span class="pre-in-pp"> + .NUMBER_QUOTE_LINES OFF +</span> +or +<span class="pre-in-pp"> + .NUMBER_BLOCKQUOTE_LINES OFF +</span> +</p> + +<div class="rule-short"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="footnote-intro" class="macro-group">Footnotes</h2> + +<ul> + <li><a href="#footnote-behaviour">Footnote behaviour</a> + <ul style="margin-left: -.5em;"> + <li><a href="#fn-and-punct">Footnote markers and punctuation in the running text</a></li> + </ul></li> + <li><a href="#footnote">Tag: FOOTNOTE</a></li> + <li><a href="#footnote-control">Footnote control macros and defaults</a></li> +</ul> + +<p> +For something so complex behind the scenes, footnotes are easy to use. +You just type, for example, +<br/> +<span id="footnote-example" class="pre-in-pp"> + ...the doctrines of Identity as urged by Schelling\c + .FOOTNOTE + <footnote about who the hell is Schelling> + .FOOTNOTE OFF + were generally the points of discussion presenting the most + of beauty to the imaginative Morella. +</span> +and be done with it. +(Note the obligatory use of the <kbd>\c</kbd> +<a href="definitions.html#inlines">inline escape</a>, +required whenever your +<a href="#footnote-marker-style">FOOTNOTE_MARKER_STYLE</a> +is either <kbd>STAR</kbd> [star/dagger footnotes] or +<kbd>NUMBER</kbd> [superscript numbers].) +</p> + +<p> +After you invoke <kbd>.FOOTNOTE</kbd>, mom takes care of everything: +putting footnote markers in the body of the document, keeping track +of how many footnotes are on the page, identifying the footnotes +themselves appropriately, balancing them properly with the bottom +margin, deferring footnotes that don’t fit on the page... +Even if you’re using +<a href="docprocessing.html#columns">COLUMNS</a>, +mom knows what to do, and Does The Right Thing. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +See +<a href="refer.html">refer.html</a> +for information on using footnotes with the <kbd>refer</kbd> +bibliographic database. +</p> +</div> + +<h3 id="footnote-behaviour" class="docs">Footnote behaviour</h3> + +<p> +Footnotes can be sly little beasts. If you’re writing a +document that’s footnote-heavy, you might want to read the +following. +</p> + +<p> +By default, mom marks footnotes with alternating stars (asterisks), +daggers, and double-daggers. The first footnote gets a star, the +second a dagger, the third a double-dagger, the fourth two stars, +the fifth two daggers, etc. If you prefer numbered footnotes, rest +assured mom is happy to oblige. +</p> + +<p> +A small amount of vertical whitespace and a short horizontal rule +separate footnotes from the document body. When +<a href="docprocessing.html#flex-vs-shim">shimming</a> +is enabled, the amount of whitespace +may vary slightly from page to page depending on the number of lines +in the footnotes. Mom tries for a nice balance between too little +whitespace and too much, but when push comes to shove, she’ll +usually opt for ample over cramped. The last lines of footnotes are +always flush with the document’s bottom margin. +</p> + +<p> +When +<a href="docprocessing.html#flex-vs-shim">flex-spacing</a> +is enabled, the distance between the last line of text and the +first footnote is always the same. +</p> + +<p> +If mom sees that a portion of a footnote cannot be fit on its page, +she carries that portion over to the next page. If an entire +footnote can’t be fit on its page (i.e., FOOTNOTE has been +called too close to the bottom), she defers the footnote to the next +page, but sets it with the appropriate marker from the previous +page. +</p> + +<p> +When footnotes occur within cited text, for example a +<a href="#quote">QUOTE</a> +or a +<a href="#blockquote">BLOCKQUOTE</a>, +mom will usually opt for deferring the footnote over to the next +page if it allows her to complete the cited text on one page. +</p> + +<p> +In the unfortunate happenstance that a deferred footnote is the +only footnote on its page (i.e., it’s marked in the document +body with a star) and the page it’s deferred to has its own +footnotes, mom separates the deferred footnote from the page’s +proper footnote(s) with a blank line. This avoids the confusion +that might result from readers seeing two footnote entries on +the same page identified by a single star (or the number 1 if +you’ve requested numbered footnotes that begin at 1 on every +page). The blank line makes it clear that the first footnote entry +belongs to the previous page. +</p> + +<p> +In the circumstance where a deferred footnote is not the only one +on its page, and is consequently marked by something other than +a single star, there’s no confusion and mom doesn’t +bother with the blank line. (By convention, the first footnote on +a page is always marked with a single star, so if readers see, say, +a dagger or double-dagger marking the first footnote entry, +they’ll know the entry belongs to the previous page). +</p> + +<p> +Very exceptionally, two footnotes may have to be deferred (e.g., one +occurs on the second to last line of a page, and another on the last +line). In such a circumstance, mom does not add +a blank after the second deferred footnote. If you’d like a blank +line separating both deferred footnotes from any footnotes proper to +the page the deferred ones were moved to, add the space manually by +putting a +<a href="typesetting.html#space"><kbd>.SPACE</kbd></a> +command at the end of the footnote text, before +<kbd>.FOOTNOTE OFF</kbd> (or <kbd>OFF</kbd>, <kbd>QUIT</kbd>, +<kbd>END</kbd>, <kbd>X</kbd>, etc). +</p> + +<p> +Obviously, deferred footnotes aren’t an issue if you request +numbered footnotes that increase incrementally throughout the whole +document—yet another convenience mom has thought of. +</p> + +<p> +While mom’s handling of footnotes is sophisticated, +and tries to take nearly every imaginable situation under which they +might occur into account, some situations are simply impossible from +a typographic standpoint. For example, if you have a +<a href="#head">HEAD</a> +near the bottom of a page and the page has some footnotes on it, mom +may simply not have room to set any text under the head (normally, +she insists on having room for at least one line of text beneath +a head). In such an instance, mom will either set the head, with +nothing under it but footnotes, or transfer the head to the next +page. Either way, you’ll have a gaping hole at the bottom +of the page. It’s a sort of typographic Catch-22, and can +only be resolved by you, the writer or formatter of the document, +adjusting the type on the offending page so as to circumvent the +problem. +</p> + +<h3 id="fn-and-punct" class="docs">Footnote markers and punctuation in the running text</h3> + +<ol style="margin-left: -1.25em;"> + <li><a href="#fn-and-punct-fill">“Fill” modes – JUSTIFY, or QUAD LEFT | CENTER | RIGHT</a></li> + <li><a href="#fn-and-punct-nofill">“No-fill” modes – LEFT, CENTER, RIGHT</a></li> +</ol> + +<h4 id="fn-and-punct-fill" class="docs">1. “Fill” modes – JUSTIFY, or QUAD LEFT | CENTER | RIGHT</h4> + +<p> +In +<a href="definitions.html#filled">fill</a> +modes, the correct way to enter the line after +<kbd>.FOOTNOTE OFF</kbd> is to input it as if it’s +literally a continuation of the input line you were entering before +you invoked <kbd>.FOOTNOTE</kbd>. Therefore, if necessary, the +input line may have to begin with space(s) or a punctuation mark, as +in the two following examples. +</p> + +<div id="examples-footnotes-1" class="examples-container" style="padding-bottom: 1em;"> +<div class="examples" style="margin-top: 0; margin-bottom: -.25em;">Example 1</div> +<span class="pre"> +A line of text,\c +.FOOTNOTE +A footnote line. +.FOOTNOTE OFF + broken up with a comma. +^ +(last line begins with a literal space) +</span> +</div> + +<div id="examples-footnotes-2" class="examples-container" style="margin-top: 1em; padding-bottom: 1em;"> +<div class="examples" style="margin-top: 0; margin-bottom: -.25em;">Example 2</div> +<span class="pre"> +A line of text\c +.FOOTNOTE +A footnote line. +.FOOTNOTE OFF +, broken up with a comma. +^ +(last line begins with a comma and a space) +</span> +</div> + +<p> +Example 1 produces, on output +<br/> +<span class="pre-in-pp"> + A line of text,* broken up with a comma. +</span> +Example 2 produces +<br/> +<span class="pre-in-pp"> + A line of text*, broken up with a comma. +</span> +Care must be taken, though, if the punctuation mark that begins the +line after <kbd>.FOOTNOTE OFF</kbd> is a period (dot). You +<b><i>must</i></b> begin such lines with <kbd>\&.</kbd>, like +this: +<br/> +<span class="pre-in-pp"> + ...end of sentence\c + .FOOTNOTE + A footnote line. + .FOOTNOTE OFF + \&. A new sentence... +</span> +If you omit the <kbd>\&.</kbd>, the line will vanish! +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +The document element tags, +<a href="#epigraph">EPIGRAPH</a> +and +<a href="#blockquote">BLOCKQUOTE</a>, +imply a fill mode, therefore these instructions also apply when you +insert a footnote into epigraphs or blockquotes. +</p> +</div> + +<h4 id="fn-and-punct-nofill" class="docs">2. “No-fill” modes – LEFT, CENTER, RIGHT</h4> + +<p> +In +<a href="definitions.html#filled">no-fill</a> +modes, you must decide a) whether text on the <i>input</i> line +after <kbd>.FOOTNOTE OFF</kbd> is to be joined to the +<i>output</i> line before <kbd>.FOOTNOTE</kbd> was invoked, or b) +whether you want the <i>output</i> text to begin on a new line. +</p> + +<p> +In the first instance, simply follow the instructions, +<a href="#fn-and-punct-fill">above</a>, +for fill modes. +</p> + +<p> +In the second instance, you must explicitly tell mom that +you want input text after <kbd>.FOOTNOTE OFF</kbd> to +begin on a new output line. This is accomplished by passing +<kbd>.FOOTNOTE OFF</kbd> (or <kbd>OFF</kbd>, <kbd>QUIT</kbd>, +<kbd>END</kbd>, <kbd>X</kbd>, etc) an additional argument: +<kbd>BREAK</kbd> or <kbd>BR</kbd>. +</p> + +<p> +Study the two examples below to understand the difference. +</p> + +<div id="examples-footnotes-3" class="examples-container" style="padding-bottom: 1em;"> +<div class="examples" style="margin-top: 0; margin-bottom: -.25em;">Example 1</div> +<span class="pre"> +.LEFT +A line of text\c +.FOOTNOTE +A footnote line +.FOOTNOTE OFF +that carries on after the footnote. +</span> +</div> + +<div id="examples-footnotes-4" class="examples-container" style="margin-top: 1em; padding-bottom: 1em;"> +<div class="examples" style="margin-top: 0; margin-bottom: -.25em;">Example 2</div> +<span class="pre"> +.LEFT +A line of text\c +.FOOTNOTE +A footnote line +.FOOTNOTE OFF BREAK +that doesn’t carry on after the footnote. +</span> +</div> + +<p> +Example 1, on output, produces +<br/> +<span class="pre-in-pp"> + A line of text* that carries on after the footnote. +</span> +whereas Example 2 produces +<span class="pre-in-pp"> + A line of text* + that doesn’t carry on after the footnote. +</span> +The distinction becomes particularly important if you like to see +punctuation marks come <i>after</i> footnote markers. In no-fill +modes, that’s accomplished like this: +<br/> +<span class="pre-in-pp"> + .LEFT + A line of text\c + .FOOTNOTE + A footnote line + .FOOTNOTE OFF + , + broken up with a comma. +</span> +The output of the above looks like this: +<br/> +<span class="pre-in-pp"> + A line of text*, + broken up with a comma. +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +The document element tag, +<a href="#quote">QUOTE</a>, +implies a no-fill mode, therefore these instructions also apply when +you insert footnotes into quotes. +</p> +</div> + +<!-- -FOOTNOTE- --> + +<div class="macro-id-overline"> +<h3 id="footnote" class="macro-id">FOOTNOTE</h3> +</div> + +<div class="box-macro-args"> +Tag: FOOTNOTE <kbd class="macro-args"><toggle> [ BREAK | BR ] [ INDENT LEFT | RIGHT | BOTH <indent value> ]</kbd> +</div> + +<p class="requires"> +• <kbd><span style="font-style: normal"><indent value></span></kbd> requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +<br/> +See <span style="font-style: normal"><a href="#footnote-note">HYPER-IMPORTANT NOTE</a></span>. +</p> + +<p> +FOOTNOTE is a toggle macro, therefore invoking it on a line by +itself allows you to enter a footnote in the body of a document. +Invoking it with any argument other than <kbd>INDENT</kbd> (i.e. +<kbd>OFF</kbd>, <kbd>QUIT</kbd>, <kbd>END</kbd>, <kbd>X</kbd>...) +tells mom you’re finished. +</p> + +<p> +Footnotes are the only element of +<a href="definitions.html#running">running text</a> +that are not affected by the typesetting +<a href="typesetting.html#indents">indent macros</a>. +In the unlikely event that you want a page’s footnotes to +line up with a running indent, invoke <kbd>.FOOTNOTE</kbd> with +the <kbd>INDENT</kbd> argument and pass it an indent direction and +indent value. <kbd>L, R,</kbd> and <kbd>B</kbd> may be used in place +of <kbd>LEFT, RIGHT,</kbd> and <kbd>BOTH</kbd>. FOOTNOTE must be +invoked with <kbd>INDENT</kbd> for every footnote you want indented; +mom does not save any footnote indent information from invocation to +invocation. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If a footnote runs to more than one paragraph, do <i>not</i> begin +the footnote with the +<a href="#pp">PP</a> +tag. Use <kbd>.PP</kbd> only to introduce subsequent paragraphs. +</p> +</div> + +<div id="footnote-note" class="box-tip"> +<p class="tip-top"> +<span class="note">HYPER-IMPORTANT NOTE:</span> +The final word on the +<a href="definitions.html#inputline">input line</a> +that comes immediately before FOOTNOTE <i>must</i> terminate with a +<kbd><a href="typesetting.html#join">\c</a></kbd> +inline escape if your +<a href="#footnote-marker-style">FOOTNOTE_MARKER_STYLE</a> +is either <kbd>STAR</kbd> or <kbd>NUMBER</kbd>. See the +<a href="#footnote-example">footnote example</a> +above. +</p> + +<p> +Additionally, in +<a href="definitions.html#filled">fill</a> +modes +(<a href="typesetting.html#justify">JUSTIFY</a> +or +<a href="typesetting.html#quad">QUAD</a>), +the line <i>after</i> a <kbd>.FOOTNOTE OFF</kbd> should be +entered as if there were no interruption in the input text, i.e., +the line should begin with a literal space or punctuation mark (see +explanation and examples +<a href="#fn-and-punct">here</a>). +</p> + +<p> +In +<a href="definitions.html#filled">no-fill</a> +modes, the optional argument <kbd>BREAK</kbd> or <kbd>BR</kbd> may +be used after the <kbd>OFF</kbd> (or <kbd>OFF</kbd>, +<kbd>QUIT</kbd>, <kbd>END</kbd>, <kbd>X</kbd>, etc) argument to +instruct mom not to join the next input line to the previous output. +See +<a href="#fn-and-punct-nofill">here</a> +for a more complete explanation, with examples. +</p> + +<p class="tip-bottom"> +Do not use the <kbd>\c</kbd> inline escape if your +FOOTNOTE_MARKER_STYLE is <kbd>LINE</kbd>, or if you have disabled +footnote markers with +<kbd><a href="#footnote-markers">.FOOTNOTE_MARKERS OFF</a></kbd>. +In these instances, the line after <kbd>.FOOTNOTE OFF</kbd> +should be entered normally. +</p> +</div> + +<div class="defaults-container" style="background-color: #ded4bd; border: none;"> +<h3 id="footnote-control" class="docs defaults">FOOTNOTE control macros and defaults</h3> + +<ol style="margin-top: .5em; padding-bottom: .5em;"> + <li><a href="#footnote-general">Family/font/size/colour/lead/quad</a></li> + <li><a href="#footnote-markers">Footnote markers</a> – on or off</li> + <li><a href="#footnote-marker-style">Footnote marker style</a> – star+dagger or numbered + <ul style="margin-left: -.5em; list-style-type: disc;"> + <li><a href="#footnote-number-placeholders">Left padding of footnote numbers</a></li> + </ul></li> + <li><a href="#footnotes-by-linenumber">Footnotes by line number</a> + <ul style="margin-left: -.5em; list-style-type: disc;"> + <li><a href="#footnote-linenumber-brackets">FOOTNOTE_LINENUMBER_BRACKETS</a></li> + <li><a href="#footnote-linenumber-separator">FOOTNOTE_LINENUMBER_SEPARATOR</a></li> + <li><a href="#footnotes-run-on">FOOTNOTES_RUN_ON</a> – line-numbered footnotes only</li> + </ul></li> + <li><a href="#reset-footnote-number">Reset footnote number</a> – set footnote marker number to 1</li> + <li><a href="#footnote-space">Inter-footnote spacing</a></li> + <li><a href="#footnote-rule">Footnote rule</a> – on or off</li> + <li><a href="#footnote-rule-length">Footnote rule length</a> – length of footnote separator rule</li> + <li><a href="#footnote-rule-weight">Footnote rule weight</a> – weight of footnote separator rule</li> + <li><a href="#footnote-rule-adj">Adjust vertical position of footnote separator rule</a></li> +</ol> +</div> + +<h4 id="footnote-general" class="docs" style="margin-top: -1.5em; margin-bottom: .5em;">1. Family/font/size/colour/lead/quad</h4> + +<div class="defaults-container" style="padding-bottom: 8px;"> +<p class="defaults" style="padding-top: 6px;"> +See +<a href="#control-macro-args">Arguments to the control macros</a>. +<br/> +The following FOOTNOTE control macros may also be +<a href="#grouping">grouped</a> +using FOOTNOTE_STYLE. +</p> +<span class="pre defaults"> +.FOOTNOTE_FAMILY default = prevailing document family; default is Times Roman +.FOOTNOTE_FONT default = roman +.FOOTNOTE_SIZE default = -2 (points) +.FOOTNOTE_COLOR default = black +.FOOTNOTE_AUTOLEAD default = 2 points (typeset); single-spaced (typewrite) +.FOOTNOTE_QUAD default = same as paragraphs +</span> +</div> + +<h4 id="footnote-markers" class="docs" style="margin-top: -1.25em;">2. Footnote markers – FOOTNOTE_MARKERS</h4> + +<p> +If you don’t want footnote markers in either the body of +the document or beside footnote entries themselves, toggle them +off with <kbd>.FOOTNOTE_MARKERS OFF</kbd> (or <kbd>OFF</kbd>, +<kbd>QUIT</kbd>, <kbd>END</kbd>, <kbd>X</kbd>...). This means, +of course, that you’ll have to roll your own. If you want +them back on, invoke <kbd>.FOOTNOTE_MARKERS</kbd> with no argument. +Footnote markers are on by default. +</p> + +<p> +If FOOTNOTE_MARKERS are disabled, do not use the <kbd>\c</kbd> +inline escape to terminate the line before <kbd>.FOOTNOTE</kbd>. +</p> + +<h4 id="footnote-marker-style" class="docs" style="margin-top: -.25em;">3. Footnote marker style – FOOTNOTE_MARKER_STYLE</h4> + +<p> +Mom gives you two choices of footnote marker style: star+dagger (see +<a href="#footnote-behaviour">footnote behaviour</a> +above), or numbered. +</p> + +<p> +<kbd>.FOOTNOTE_MARKER_STYLE STAR</kbd> gives you star+dagger (the +default). There is a limit of 10 footnotes per page with this +style. +</p> + +<p> +<kbd>.FOOTNOTE_MARKER_STYLE NUMBER</kbd> gives you superscript +numbers, both in the document body and in the footnote entries +themselves. By default, footnote numbers increase incrementally +(prev. footnote number + 1) throughout the whole document. You +can ask mom to start each page’s footnote numbers at 1 with +<kbd>.RESET_FOOTNOTE_NUMBER</kbd> +(<a href="#reset-footnote-number">see below</a>.) +</p> + +<p> +If your +<a href="docprocessing.html#printstyle">PRINTSTYLE</a> +is <kbd>TYPEWRITE</kbd> and you would prefer that the footnotes +themselves not use superscript numbers, you may pass +<kbd>.FOOTNOTE_MARKER_STYLE NUMBER</kbd> an additional argument: +<kbd>NO_SUPERSCRIPT</kbd>. While the marker in the text will still +be superscript, the footnotes themselves will be identified with +normal-sized, base aligned numbers, surrounded by parentheses. +</p> + +<h5 id="footnote-number-placeholders" class="docs">Left padding of footnote numbers</h5> + +<p> +When footnote numbering is enabled, in order to ensure that the +left margin of footnote text aligns regardless of the footnote +number, you sometimes have to pad the footnote numbers. This will +be the case any time the footnote numbers change from 9 to 10 on +the same page, or from 99 to 100. Consider this scenario: +<br/> +<span class="pre-in-pp"> + <sup>9</sup> Footnote text + <sup>10</sup> Footnote text + <sup>11</sup> Footnote text +</span> +As you can see, the left margins of the footnotes are not aligned. +</p> + +<p> +In order to correct this, use the macro +<kbd>.FOOTNOTE_NUMBER_PLACEHOLDERS</kbd>, which takes a single +argument: the number of placeholders in the longer digit. For +example, placed at an appropriate point in your input file, +<kbd>.FOOTNOTE_NUMBER_PLACEHOLDERS 2</kbd> causes the above +example to come out like this: +<br/> +<span class="pre-in-pp"> + <sup> 9</sup> Footnote text + <sup>10</sup> Footnote text + <sup>11</sup> Footnote text +</span> +Given the impossibility of knowing in advance when the number of +placeholders required for footnote numbers will change, you must +study your <i>output</i> file to determine where to insert this +macro into your <i>input</i> file. +</p> + +<p> +Obviously, mom does not provide a default for +<kbd>.FOOTNOTE_NUMBER_PLACEHOLDERS</kbd>. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +<kbd>.FOOTNOTE_NUMBER_PLACEHOLDERS</kbd> affects both superscript +footnote numbers, and, in +<a href="docprocessing.html#printstyle">PRINTSTYLE TYPEWRITE</a>, +the normal, base-aligned numbers surrounded by parentheses that you +get with +<kbd>.FOOTNOTE_MARKER_STYLE NUMBER NO_SUPERSCRIPT</kbd>. +</p> +</div> + +<h4 id="footnotes-by-linenumber" class="docs" style="margin-top: -.25em;">4. Footnotes by line number – FOOTNOTE_MARKER_STYLE LINE</h4> + +<p> +FOOTNOTE_MARKER_STYLE with the argument, <kbd>LINE</kbd> lets you +have footnotes which are identified by line number, rather than by a +marker in the text. (Note that +<a href="#number-lines">NUMBER_LINES</a> +must be enabled in order to use this marker style.) +</p> + +<p> +With FOOTNOTE_MARKER_STYLE <kbd>LINE</kbd>, mom will identify +footnotes either by single line numbers, or line ranges. If +what you want is a single line number, you need only invoke +<kbd>.FOOTNOTE</kbd>, <i>without the terminating</i> <kbd>\c</kbd>, +at the appropriate place in running text. Input lines after the +footnote has been terminated (e.g. with +<kbd>.FOOTNOTE OFF</kbd>) are entered normally. +</p> + +<p> +If you want a range of line numbers (e.g. [5-11] ), +insert, directly into the first line of the range you want, the +<a href="definitions.html#inlines">inline escape</a>, +<kbd><span class="nobr">\*[FN_MARK]</span></kbd>. For the terminating line +number of the range, you need only invoke <kbd>.FOOTNOTE</kbd> +(again, without the terminating <kbd>\c</kbd>); mom is smart enough +to figure out that where <kbd>.FOOTNOTE</kbd> was invoked represents +the terminating line number. +</p> + +<p> +Range-numbered footnotes are always output on the page +where <kbd>.FOOTNOTE</kbd> was invoked, not the page where +<kbd><span class="nobr">\*[FN_MARK]</span></kbd> appears (subject, of course, to +the rules for footnotes that fall too close to the bottom of a page, +as outlined +<a href="#footnote-rules">here</a>). +</p> + +<p> +The behaviour of line-numbered footnotes can be controlled with the +macros: +<br/> +<span style="display: inline-block; margin-left: 2em; margin-top: .5em;"><a href="#footnote-linenumber-brackets">FOOTNOTE_LINENUMBER_BRACKETS</a></span> +<br/> +<span style="margin-left: 2em;"><a href="#footnote-linenumber-separator">FOOTNOTE_LINENUMBER_SEPARATOR</a></span> +<br/> +<span style="margin-left: 2em;"><a href="#footnotes-run-on">FOOTNOTES_RUN_ON</a></span> +</p> + +<div style="margin-left: 1.25em;"> +<h5 id="footnote-linenumber-brackets" class="docs" style="margin-top: -.25em;">• FOOTNOTE_LINENUMBER_BRACKETS</h5> + +<p style="margin-left: .5em;"> +Mom, by default, surrounds footnote line numbers with square +brackets. The style of the brackets may be changed with the macro +<br/> +<span class="pre-in-pp"> + .FOOTNOTE_LINENUMBER_BRACKETS +</span> +which takes one of three possible arguments: <kbd>PARENS</kbd> +(round brackets), <kbd>SQUARE</kbd> (the default) or +<kbd>BRACES</kbd> (curly braces). If you prefer a shortform, the +arguments, <kbd>(</kbd>, <kbd>[</kbd> or <kbd>{</kbd> may be used +instead. +</p> + +<p style="margin-left: .5em;">Thus, for example, either +<br/> +<span class="pre-in-pp"> + .FOOTNOTE_LINENUMBER_BRACKETS PARENS +</span> +or +<br/> +<span class="pre-in-pp"> + .FOOTNOTE_LINENUMBER_BRACKETS ( +</span> +will surround footnote line numbers with round brackets. +</p> + +<h5 id="footnote-linenumber-separator" class="docs" style="margin-top: -.25em;">• FOOTNOTE_LINENUMBER_SEPARATOR</h5> + +<p style="margin-left: .5em;"> +If you don’t want the numbers enclosed in brackets, you +may tell mom to use a “separator” instead. A common +separator would be the colon, but it can be anything you like. +The macro to do this is +<br/> +<span class="pre-in-pp"> + .FOOTNOTE_LINENUMBER_SEPARATOR +</span> +which takes, as its single argument, the separator you want. For +safety and consistency’s sake, always enclose the argument in +double-quotes. The separator can be composed of any valid groff +character, or any combination of characters. +</p> + +<p style="margin-left: .5em;"> +<b>A word of caution:</b> when using a separator, mom doesn’t +insert any space after the separator. Hence, if you want space +(you probably do), you must make the space part of the argument you +pass to FOOTNOTE_LINENUMBER_SEPARATOR. For example, to get a colon +separator with a space after it, you’d do +<br/> +<span class="pre-in-pp"> + .FOOTNOTE_LINENUMBER_SEPARATOR ": " +</span> +</p> + +<h5 id="footnotes-run-on" class="docs" style="margin-top: -1em;">• FOOTNOTES_RUN_ON</h5> + +<p style="margin-left: .5em;"> +Finally, if your footnote marker style is <kbd>LINE</kbd>, you may +instruct mom to do “run-on style” footnotes. Run-on +footnotes do not treat footnotes as discrete entities, i.e. each +beginning on a new line. Rather, each footnote is separated from +the footnote before it by horizontal space in the running line, so +that the footnotes on any given page form a continuous block, like +lines in a paragraph. +</p> + +<p style="margin-left: .5em;"> +The macro to get mom to run footnotes on is +<br/> +<span class="pre-in-pp"> + .FOOTNOTES_RUN_ON +</span> +Invoked by itself, it turns the feature on. Invoked with any other +argument (<kbd>OFF, NO</kbd>, etc.), it turns the feature off. +It is generally not a good idea to turn the feature on and off +during the course of a single document. If you do, mom will issue +a warning if there’s going to be a problem. However, it is +always perfectly safe to enable/disable the feature after +<a href="rectoverso.html#collate">COLLATE</a>. +</p> +</div> + +<h4 id="reset-footnote-number" class="docs" style="margin-top: -.25em;">5. Reset footnote number – RESET_FOOTNOTE_NUMBER</h4> + +<p> +<kbd>.RESET_FOOTNOTE_NUMBER</kbd>, by itself, resets footnote +numbering so that the next footnote you enter is numbered 1. +</p> + +<p> +<kbd>.RESET_FOOTNOTE_NUMBER PAGE</kbd> tells mom to start every +page’s footnote numbering at 1. +</p> + +<h4 id="footnote-space" class="docs" style="margin-top: -.25em;">6. Inter-footnote spacing – FOOTNOTE_SPACING</h4> + +<p> +If you’d like some space between footnotes, you can +have mom put it in for you by invoking <kbd>.FOOTNOTE_SPACING</kbd> +with an argument representing the amount of extra space you’d +like. The argument to FOOTNOTE_SPACING requires a +<a href="definitions.html#unitofmeasure">unit of measure</a>. +</p> + +<p> +In the following example, footnotes will be separated from each +other by 3 +<a href="definitions.html#picaspoints">points</a>. +<br/> +<span class="pre-in-pp"> + .FOOTNOTE_SPACING 3p +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If you’re using footnotes for references generated from the +refer database (see +<a href="refer.html">refer.html</a>), +correct MLA style requires a full linespace between footnotes, which +you can accomplish with <kbd>.FOOTNOTE_SPACING 1v</kbd>. +</p> +</div> + +<h4 id="footnote-rule" class="docs" style="margin-top: -.25em;">7. Footnote rule – FOOTNOTE_RULE</h4> + +<p> +If you don’t want a footnote separator rule, toggle it +off with <kbd>.FOOTNOTE_RULE OFF</kbd> (or <kbd>END</kbd>, +<kbd>QUIT</kbd>, <kbd>X</kbd>...). Toggle it back on by invoking +<kbd>.FOOTNOTE_RULE</kbd> with no argument. The default is to print +the rule. +</p> + +<h4 id="footnote-rule-length" class="docs" style="margin-top: -.25em;">8. Footnote rule length – FOOTNOTE_RULE_LENGTH</h4> + +<p> +If you want to change the length of the footnote separator rule, +invoke <kbd>.FOOTNOTE_RULE_LENGTH</kbd> with a length, like this, +<br/> +<span class="pre-in-pp"> + .FOOTNOTE_RULE_LENGTH 1i +</span> + +which sets the length to 1 inch. Note that a +<a href="definitions.html#unitofmeasure">unit of measure</a> +is required. The default is 4 +<a href="definitions.html#picaspoints">picas</a> +for both +<a href="docprocessing.html#printstyle">PRINTSTYLE</a>s. +</p> + +<h4 id="footnote-rule-weight" class="docs" style="margin-top: -.25em;">9. Footnote rule weight – FOOTNOTE_RULE_WEIGHT</h4> + +<p> +If you want to change the weight (“thickness”) of the +footnote separator rule, invoke <kbd>.FOOTNOTE_RULE_WEIGHT</kbd> +with the desired weight. The weight is measured in +<a href="definitions.html#picaspoints">points</a>; +however, do not append the +<a href="definitions.html#unitofmeasure">unit of measure</a>, +<kbd>p</kbd>, to the argument. +</p> + +<p> +Mom’s default footnote rule weight is 1/2 point. If +you’d like a 1-point rule instead,<br/> +<span class="pre-in-pp"> + .FOOTNOTE_RULE_WEIGHT 1 +</span> +is how you’d get it. +</p> + +<h4 id="footnote-rule-adj" class="docs" style="margin-top: -.25em;">10. Adjust vertical position of footnote separator rule – FOOTNOTE_RULE_ADJ</h4> + +<p> +The footnote separator rule is a rule whose bottom edge falls +on the +<a href="definitions.html#baseline">baseline</a> +(at the footnote +<a href="definitions.html#leading">leading</a>) +one line above the first line of a page’s footnotes. By default, +mom raises the rule 3 +<a href="definitions.html#picaspoints">points</a> +from the baseline so that the separator and the footnotes don’t +look jammed together. If you’d prefer a different vertical +adjustment, invoke <kbd>.FOOTNOTE_RULE_ADJ</kbd> with the +amount you’d like. For example +<br/> +<span class="pre-in-pp"> + .FOOTNOTE_RULE_ADJ 4.25p +</span> +raises the rule by 4-1/4 points. Note that you can only raise +the rule, not lower it. A +<a href="definitions.html#unitofmeasure">unit of measure</a> +is required. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If your document +<a href="definitions.html#leading">leading</a> +is 2 +<a href="definitions.html#picaspoints">points</a> +or less (e.g your +<a href="definitions.html#ps">point size</a> +is 10 and your linespacing is 10, 11, or 12), lowering mom’s +default footnote rule adjustment will almost certainly give you +nicer looking results than leaving the adjustment at the default. +Furthermore, you can invoke <kbd>.FOOTNOTE_RULE_ADJ</kbd> on any +page in which footnotes appear, or in any column, so that the +placement of the footnote rule can be changed on-the-fly, should you +wish. +</p> +</div> + +<div class="rule-short"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="endnote-intro" class="macro-group">Endnotes</h2> + +<ul style="margin-left: -.5em;"> + <li><a href="#endnote-behaviour">Endnotes behaviour</a> + <ul style="margin-left: -.5em;"> + <li><a href="#endnote-columns">Endnotes and columnar documents</a></li> + </ul></li> + <li><a href="#endnote">Tag: ENDNOTE</a></li> + <li><a href="#endnotes">Macro: <b>ENDNOTES</b></a>—tell mom to output endnotes</li> + <li><a href="#endnote-control">ENDNOTES control macros and defaults</a></li> +</ul> + +<p> +Embedding endnotes into mom documents is accomplished the same way +as embedding +<a href="#footnote-intro">footnotes</a>. +The example below is identical to the one shown in the +<a href="#footnote-example">introduction to footnotes</a>, +except that <kbd>.FOOTNOTE</kbd> has been replaced with +<kbd>.ENDNOTE</kbd>. +</p> + +<div id="examples" class="examples-container" style="padding-bottom: 1em;"> +<div class="examples" style="margin-top: 0; margin-bottom: -.25em;">Example</div> +<span id="endnote-example" class="pre"> + ...the doctrines of Identity as urged by Schelling\c + .ENDNOTE + <endnote about who the hell is Schelling> + .ENDNOTE OFF + were generally the points of discussion presenting the most + of beauty to the imaginative Morella. +</span> +</div> + +<p> +As with footnotes, note the obligatory use of the <kbd>\c</kbd> +<a href="definitions.html#inlines">inline escape</a> +when your +<a href="#endnote-marker-style">ENDNOTE_MARKER_STYLE</a> +is <kbd>NUMBER</kbd> or <kbd>SUPERSCRIPT</kbd> (both of which mark +endnotes references in +<a href="definitions.html#running">running text</a> +with superscript numbers). When the marker style is +<kbd>LINE</kbd>, you must <i>not</i> use the <kbd>\c</kbd> +escape. +</p> + +<p> +Endnotes differ from footnotes in two ways (other than the fact that +endnotes come at the end of a document whereas footnotes appear in +the body of the document): +</p> + +<ol style="margin-top: -.5em;"> + <li>When your ENDNOTE_MARKER_STYLE is <kbd>NUMBER</kbd> or + <kbd>SUPERSCRIPT</kbd>, endnotes are always numbered + incrementally, starting at “1”. + </li> + <li>Endnotes must be output explicitly; mom does not output + them for you. In + <a href="rectoverso.html#collate">collated</a> + documents, this allows you to choose whether you want the + endnotes to appear at the end of each chapter or article in a + document, or grouped together at the very end of the document. + </li> +</ol> + +<p> +Within endnotes, you may use the document element tags +<a href="#pp">PP</a>, +<a href="#quote">QUOTE</a> +and +<a href="#blockquote">BLOCKQUOTE</a>. +This provides the flexibility to create endnotes that run to several +paragraphs, as well as to embed cited text within endnotes. +</p> + +<p> +Should you wish to change the appearance of quotes or blockquotes +that appear within endnotes, you may do so with the +<a href="#quote-control">quote control macros</a> +or +<a href="#blockquote-control">blockquote control macros</a>. +However, you must make the changes <i>within</i> each endnote, +prior to invoking <kbd>.QUOTE</kbd> or <kbd>.BLOCKQUOTE</kbd>, +and undo them prior to terminating the endnote (i.e. before +<kbd>.ENDNOTE OFF</kbd>), otherwise the changes will affect +subsequent quotes and blockquotes that appear in the document body +as well. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +See +<a href="refer.html">refer.html</a> +for information on using endnotes with the <kbd>refer</kbd> +bibliographic database. +</p> +</div> + +<h3 id="endnote-behaviour" class="docs">Endnotes behaviour</h3> + +<p> +When you output endnotes (with +<kbd><a href="#endnotes">.ENDNOTES</a></kbd>), +mom finishes processing the last page of your document, then breaks +to a new page for printing the endnotes. If the document type is +<kbd><a href="docprocessing.html#doctype">CHAPTER</a></kbd>, +the centre part of the +<a href="definitions.html#header">header</a> +(or footer), which, by default, contains a chapter number or title, +is removed. +</p> + +<p> +By default, mom starts the endnotes page with a bold, centred head, +“ENDNOTES”. Subsequently, for each section in a +<a href="rectoverso.html#collate-intro">collated</a> +document (e.g. chapters in a book), she identifies the section in bold +type, flush left and underscored, followed by one-half linespace. +Endnotes pertaining to the section are output underneath, identified +by superscript numbers. The text of the endnotes themselves is +indented to the right of the numbers. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +The one-half linespace between section identifiers and the endnotes +themselves, plus the need to group identifiers and endnotes sensibly, +means that mom cannot guarantee perfectly aligned bottom margins. +This is an unavoidable consequence of the structure of endnotes. +</p> +</div> + +<p> +Of course, all the defaults, as well as the overall style of the +endnotes pages, can be changed with the +<a href="#endnote-control">endnote control macros</a>. +The attentive will notice that endnotes have an awful lot of control +macros. This is because endnotes are like a mini-document unto +themselves, and therefore need not be bound by the style parameters +of the body of the document. +</p> + +<h3 id="endnote-columns" class="docs">Endnotes and columnar documents</h3> + +<p> +If your document is set in columns (see +<a href="docprocessing.html#columns">COLUMNS</a>), +mom gives you the option to have endnotes appear in either +the column format or set to the full page width. See +<a href="#endnotes-no-columns">ENDNOTES_NO_COLUMNS</a>. +</p> + +<!-- -ENDNOTE- --> + +<div class="macro-id-overline"> +<h3 id="endnote" class="macro-id">ENDNOTE</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>ENDNOTE</b> <kbd class="macro-args"><toggle> [ BREAK | BR ]</kbd> +</div> +<p class="requires"> +See <span style="font-style: normal"><a href="#endnote-note">HYPER-IMPORTANT NOTE</a></span> +</p> + +<p> +ENDNOTE is a toggle macro, therefore invoking it on a line by itself +allows you to enter an endnote in the body of a document. Invoking +it with any other argument (i.e. <kbd>OFF</kbd>, <kbd>QUIT</kbd>, +<kbd>END</kbd>, <kbd>X</kbd>...) tells mom that you’ve +finished the endnote. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If an endnote runs to more than one paragraph, do <i>not</i> begin +the endnote with the +<a href="#pp">PP</a> +tag. Use PP only to introduce subsequent paragraphs. +</p> +</div> + +<div id="endnote-note" class="box-tip"> +<p class="tip-top"> +<span class="note">HYPER-IMPORTANT NOTE:</span> +If your +<a href="#endnote-marker-style">ENDNOTE_MARKER_STYLE</a> +is <kbd>NUMBER</kbd> or <kbd>SUPERSCRIPT</kbd> (mom’s +default is <kbd>NUMBER</kbd> unless you have +<a href="refer.html#endnote-refs">ENDNOTE_REFS</a> +enabled, in which case it’s <kbd>SUPERSCRIPT</kbd>), the final word on the +<a href="definitions.html#inputline">input line</a> +that comes immediately before <kbd>.ENDNOTE</kbd> must terminate +with a +<a href="typesetting.html#join"><kbd>\c</kbd></a> +inline escape. See the +<a href="#endnote-example">endnote example</a> +above. +</p> + +<p> +Additionally, in +<a href="definitions.html#filled">fill</a> +modes +(<a href="typesetting.html#justify">JUSTIFY</a> +or +<a href="typesetting.html#quad">QUAD</a>, +the line after <kbd>.ENDNOTE OFF</kbd> should be +entered as if there were no interruption in the input text, i.e., +the line should begin with a literal space or punctuation mark (see +explanation and examples for footnotes, which apply equally to +endnotes, +<a href="#fn-and-punct">here</a>). +</p> + +<p> +In +<a href="definitions.html#filled">no-fill</a> +modes, the optional argument <kbd>BREAK</kbd> or <kbd>BR</kbd> may +be used after the <kbd>OFF</kbd> (or <kbd>OFF</kbd>, +<kbd>QUIT</kbd>, <kbd>END</kbd>, <kbd>X</kbd>, etc) argument to +instruct mom not to join the next input line to the previous output. +See +<a href="#fn-and-punct-nofill">here</a> +for a more complete explanation. The examples are for +<kbd>.FOOTNOTE</kbd>, but apply equally to <kbd>.ENDNOTE</kbd>. +</p> + +<p class="tip-bottom"> +If your ENDNOTE_MARKER_STYLE is LINE, do not use the <kbd>\c</kbd> +escape, and enter the line after <kbd>.ENDNOTE OFF</kbd> normally, +ie at your text editor’s left margin. +</p> +</div> + +<!-- -ENDNOTES- --> + +<div class="macro-id-overline"> +<h3 id="endnotes" class="macro-id">ENDNOTES</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>ENDNOTES</b> +</div> + +<p> +Unlike footnotes, which mom automatically outputs at the bottom +of pages, endnotes must be explicitly output by you, the +user. ENDNOTES, by itself (i.e. without any argument), is the macro +to do this. +</p> + +<p> +Typically, you’ll use ENDNOTES at the end of a document. If +it’s a single (i.e. not collated) document, mom will print +the endnotes pertaining to it. If it’s a collated document, +mom will print all the endnotes contained within all sections of +the document (typically chapters), appropriately identified and +numbered. +</p> + +<p> +Should you wish to output the endnotes for each section of a +collated document at the ends of the sections (instead of at the +very end of the document), simply invoke <kbd>.ENDNOTES</kbd> +immediately prior to +<a href="rectoverso.html#collate">COLLATE</a>. +Mom will print the endnotes, identified and numbered appropriately, +on a separate page prior to starting the next section of the +document. Each subsequent invocation of <kbd>.ENDNOTES</kbd> +outputs only those endnotes that mom collected after the previous +invocation. +</p> + +<div class="defaults-container" style="background-color: #ded4bd; border: none;"> +<h3 id="endnote-control" class="docs defaults">ENDNOTES control macros and defaults</h3> + +<div class="box-important" style="width: 700px; margin: auto; background-color: #ded4bd;"> +<p class="tip-top" style="color: #000056;"> +<span class="important">Important:</span> +Endnotes control macros must always be invoked prior to the first +instance of +<a href="#endnote"><kbd>.ENDNOTE</kbd></a>. +</p> + +<p style="color: #000056; margin-top: -.5em;"> +When you embed endnotes in the body of a document, mom collects +<i>and processes</i> them for later outputting (when you invoke +<a href="#endnotes"><kbd>.ENDNOTES</kbd></a>). +By the time you do invoke <kbd +style="color: #000056;">.ENDNOTES</kbd>, it’s much too late to +change your mind about how you want them to look. +</p> + +<p class="tip-bottom" style="color: #000056; margin-top: -.5em;"> +My advice? If you’re planning to change the default +appearance of endnotes pages, set them up prior to +<a href="docprocessing.html#start">START</a>. +</p> +</div> + +<ol style="margin-top: .5em; padding-bottom: .5em;"> + <li><a href="#endnotes-general"><b>General endnotes style control</b></a> + <ul style="margin-left: -.5em;"> + <li><a href="#endnote-style">Base family/font/quad</a></li> + <li><a href="#endnote-pt-size">Base point size</a></li> + <li><a href="#endnote-lead">Leading</a></li> + <li><a href="#endnote-spacing">Spacing between endnotes</a></li> + <li><a href="#singlespace-endnotes">Singlespace endnotes (TYPEWRITE only)</a></li> + <li><a href="#endnote-para-indent">Paragraph indenting</a></li> + <li><a href="#endnote-para-space">Inter-paragraph spacing</a></li> + <li><a href="#endnotes-no-columns">Turning off column mode during endnotes output</a></li> + </ul></li> + <li><a href="#endnotes-pagination"><b>Pagination of endnotes</b></a> + <ul style="margin-left: -.5em;"> + <li><a href="#endnotes-pagenum-style">Page numbering style</a></li> + <li><a href="#endnotes-first-pagenumber">Setting the first page number of endnotes</a></li> + <li><a href="#endnotes-no-first-pagenum">Omitting a page number on the first page of endnotes</a></li> + <li><a href="#suspend-pagination">Suspending pagination during endnotes output</a></li> + </ul></li> + <li><a href="#endnotes-header-control"><b>Header/footer control</b></a> + <ul style="margin-left: -.5em;"> + <li><a href="#endnotes-modify-hdrftr">Modifying what goes in the endnotes header/footer</a></li> + <li><a href="#endnotes-hdrftr-center">Header/footer centre string when doctype is CHAPTER</a></li> + <li><a href="#endnotes-allows-headers">Allow headers on endnotes pages</a></li> + </ul></li> + <li><a href="#endnotes-header"><b>Endnotes header (first-page title) control</b></a> + <ul style="margin-left: -.5em;"> + <li><a href="#endnotes-header-string">Header string</a></li> + <li><a href="#endnotes-header-string-control">Header string control macros and defaults</a></li> + <li><a href="#endnotes-header-placement">Header string placement</a></li> + <li><a href="#endnotes-header-underscore">Header string underscoring</a></li> + <li><a href="#endnotes-header-caps">Header string capitalization</a></li> + </ul></li> + <li><a href="#endnotes-doc-title"><b>Endnotes document-identification string control</b></a> + <ul style="margin-left: -.5em;"> + <li><a href="#endnote-title">Document-identification string(s)</a></li> + <li><a href="#endnote-title-control">Document-identification string control macros and defaults</a></li> + </ul></li> + <li><a href="#endnotes-numbering"><b>Endnotes referencing style</b></a> + <ul style="margin-left: -.5em;"> + <li><a href="#endnote-marker-style">Endnote marker style</a> – by numbers in the text, or by line number + <ul style="margin-left: -.5em;"> + <li><a href="#endnote-linenumber-gap">Spacing between line-numbered endnotes and the endnote text</a></li> + <li><a href="#endnote-linenumber-brackets">Brackets around endnote line numbers</a></li> + <li><a href="#endnote-linenumber-separator">Separator after endnote line numbers instead of brackets</a></li> + </ul></li> + <li><a href="#endnote-number-control">Endnote numbering control macros and defaults</a></li> + <li><a href="#endnote-number-alignment">Endnote numbering alignment</a></li> + </ul></li> +</ol> +</div> + +<h4 id="endnotes-general" class="docs" style="margin-top: -1.5em; margin-bottom: .5em;">1. General endnotes page style control</h4> + +<h5 id="endnote-style" class="docs" style="margin-top: 0; margin-bottom: .5em; margin-left: .5em;">• Base family/font/quad</h5> + +<div class="defaults-container" style="padding-bottom: 8px;"> +<p class="defaults" style="padding-top: 6px;"> +See +<a href="#control-macro-args">Arguments to the control macros</a>. +<br/> +The following ENDNOTE control macros may also be +<a href="#grouping">grouped</a> +using ENDNOTE_STYLE. +</p> +<span class="pre defaults"> +.ENDNOTE_FAMILY default = prevailing document family; default is Times Roman +.ENDNOTE_FONT default = roman +.ENDNOTE_QUAD* default = justified + +*Note: ENDNOTE_QUAD must be set to either L (LEFT) or J (JUSTIFIED); + R (RIGHT) and C (CENTER) will not work. +</span> +</div> + +<!-- -ENDNOTE_PT_SIZE- --> + +<h5 id="endnote-pt-size" class="docs" style="margin-top: -1.5em; margin-bottom: .5em; margin-left: .5em;">• Base point size</h5> + +<div class="box-macro-args"> +Macro: <b>ENDNOTE_PT_SIZE</b> <kbd class="macro-args"><base type size of endnotes></kbd> +</div> + +<p> +Unlike most other control macros that deal with size of document +elements, ENDNOTE_PT_SIZE takes as its argument an absolute value, +relative to nothing. Therefore, the argument represents the size of +endnote type in +<a href="definitions.html#picaspoints">points</a>, +unless you append an alternative +<a href="definitions.html#unitofmeasure">unit of measure</a>. +For example, +<br/> +<span class="pre-in-pp"> + .ENDNOTE_PT_SIZE 12 +</span> +sets the base point size of type on the endnotes page to 12 +points, whereas +<br/> +<span class="pre-in-pp"> + .ENDNOTE_PT_SIZE .6i +</span> +sets the base point size of type on the endnotes page to 1/6 of an +inch. +</p> + +<p> +The type size set with ENDNOTE_PT_SIZE is the size of type used for +the text of the endnotes, and forms the basis from which the point +size of other endnote page elements is calculated. +</p> + +<p> +The default for +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPESET</kbd></a> +is 12.5 points (the same default size used in the body of the +document). +</p> + +<!-- -ENDNOTE_LEAD- --> + +<h5 id="endnote-lead" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">• Leading</h5> + +<div class="box-macro-args"> +Macro: <b>ENDNOTE_LEAD</b> <kbd class="macro-args"><base leading of endnotes> [ ADJUST ] </kbd> +</div> + +<p class="requires"> +• Does not require a <a href="definitions.html#unitofmeasure">unit of measure</a>; points is assumed +</p> + +<p> +Unlike most other control macros that deal with leading of document +elements, ENDNOTE_LEAD takes as its argument an absolute value, +relative to nothing. Therefore, the argument represents the +<a href="definitions.html#leading">leading</a> +of endnotes in +<a href="definitions.html#picaspoints">points</a> +unless you append an alternative +<a href="definitions.html#unitofmeasure">unit of measure</a>. +For example, +<br/> +<span class="pre-in-pp"> + .ENDNOTE_LEAD 14 +</span> +sets the base leading of type on the endnotes page to 14 +points, whereas +<br/> +<span class="pre-in-pp"> + .ENDNOTE_LEAD .5i +</span> +sets the base leading of type on the endnotes page to 1/2 inch. +</p> + +<p> +If you want the leading of endnotes adjusted to fill the page, pass +ENDNOTE_LEAD the optional argument +<kbd>ADJUST</kbd>. (See +<a href="docprocessing.html#doc-lead-adjust">DOC_LEAD_ADJUST</a> +for an explanation of leading adjustment.) +</p> + +<p> +The default for +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPESET</kbd></a> +is the prevailing document leading (16 by default), adjusted. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Even if you give mom a <kbd>.DOC_LEAD_ADJUST OFF</kbd> command, she +will still, by default, adjust endnote leading. You <i>must</i> +enter <kbd>.ENDNOTE_LEAD <lead></kbd> with no +<kbd>ADJUST</kbd> argument to disable this default behaviour. +</p> +</div> + +<!-- -ENDNOTE_SPACING- --> + +<h5 id="endnote-spacing" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">• Spacing between endnotes</h5> + +<div class="box-macro-args"> +Macro: <b>ENDNOTE_SPACING</b> <kbd class="macro-args"><space to insert between endnotes></kbd> +</div> +<p class="requires"> +• Requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +If you’d like some whitespace between endnotes, just invoke +ENDNOTE_SPACING with the amount of space you want, e.g. +<br/> +<span class="pre-in-pp"> + .ENDNOTE_SPACING 6p +</span> +which inserts 6 points of lead between endnotes. Be aware, though, +that inserting space between endnotes means that the bottoms of +endnotes pages will most likely not align. +</p> + +<p> +Mom’s default is not to insert any whitespace between endnotes. +</p> + +<!-- -SINGLESPACE_ENDNOTES- --> + +<h5 id="singlespace-endnotes" class="docs" style="margin-top: 0; margin-bottom: .5em; margin-left: .5em;">• Singlespace endnotes (TYPEWRITE only)</h5> + +<div class="box-macro-args"> +Macro: <b>SINGLESPACE_ENDNOTES</b> <kbd class="macro-args"><toggle></kbd> +</div> + +<p> +If your +<a href="docprocessing.html#printstyle">PRINTSTYLE</a> +is <kbd>TYPEWRITE</kbd> and you use TYPEWRITE’s default +double-spacing, endnotes are double-spaced. If your document is +single-spaced, endnotes are single-spaced. +</p> + +<p> +If, for some reason, you’d prefer that endnotes be +single-spaced in an otherwise double-spaced document (including +double-spaced +<a href="rectoverso.html#collate">collated</a> +documents), invoke +<br/> +<span class="pre-in-pp"> + .SINGLESPACE_ENDNOTES +</span> +with no argument. And if, god help you, you want to change endnote +single-spacing back to double-spacing for different spacing of +endnotes output at the ends of separate documents in a collated +document, invoke <kbd>.SINGLESPACE_ENDNOTES</kbd> with any argument +(<kbd>OFF</kbd>, <kbd>QUIT</kbd>, <kbd>END</kbd>, <kbd>X</kbd>...). +</p> + +<!-- -ENDNOTE_PARA_INDENT- --> + +<h5 id="endnote-para-indent" class="docs" style="margin-top: 0; margin-bottom: .5em; margin-left: .5em;">• Paragraph indenting</h5> + +<div class="box-macro-args"> +Macro: <b>ENDNOTE_PARA_INDENT</b> <kbd class="macro-args"><amount to indent first line of paragraphs in endnotes></kbd> +</div> + +<p class="requires"> +• Requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +ENDNOTE_PARA_INDENT works exactly the same way as +<a href="#para-indent">PARA_INDENT</a>, +except that the indent given is the amount by which to indent the +first lines of endnote paragraphs, not document body paragraphs. +</p> + +<p> +The default is 1.5 +<a href="definitions.html#em">ems</a> +for +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPESET</kbd></a>; +1/2 inch for +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPEWRITE</kbd></a>. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +The first line of the first paragraph of endnotes (the one attached +immediately to the identifying endnote number) is never indented. +Only subsequent paragraphs are affected by ENDNOTE_PARA_INDENT. +</p> +</div> + +<!-- -ENDNOTE_PARA_SPACE- --> + +<h5 id="endnote-para-space" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">• Inter-paragraph spacing</h5> + +<div class="box-macro-args"> +Macro: <b>ENDNOTE_PARA_SPACE</b> <kbd class="macro-args"><toggle></kbd> +</div> + +<p> +ENDNOTE_PARA_SPACE works exactly the same way as +<a href="#pp-space">PARA_SPACE</a>, +except that it inserts a blank line between endnote paragraphs, not +document body paragraphs. +</p> + +<p> +The default is not to insert a blank line between paragraphs in +endnotes. +</p> + +<!-- -ENDNOTES_NO_COLUMNS- --> + +<h5 id="endnotes-no-columns" class="docs" style="margin-top: 0; margin-bottom: .5em; margin-left: .5em;">• Turning off column mode during endnotes output</h5> + +<div class="box-macro-args"> +Macro: <b>ENDNOTES_NO_COLUMNS</b> <kbd class="macro-args"><toggle></kbd> +</div> + +<p> +By default, if your document is set in +<a href="docprocessing.html#columns">columns</a>, +mom sets the endnotes in columns, too. However, if your document +is set in columns and you’d like the endnotes not to be, +just invoke <kbd>.ENDNOTES_NO_COLUMNS</kbd> with no argument. +The endnotes pages will be set to the full page measure of your +document. +</p> + +<p> +If you output endnotes at the end of each document in a +<a href="rectoverso.html#collate">collated</a> +document set in columns, column mode will automatically be +reinstated for each document, even with ENDNOTES_NO_COLUMNS turned +on. In such circumstances, you must re-enable ENDNOTES_NO_COLUMNS +for each separate collated document. +</p> + +<h4 id="endnotes-pagination" class="docs" style="margin-bottom: .5em;">2. Pagination of endnotes</h4> + +<!-- -ENDNOTES_PAGENUM_STYLE- --> + +<h5 id="endnotes-pagenum-style" class="docs" style="margin-top: 0; margin-bottom: .5em; margin-left: .5em;">• Page numbering style</h5> + +<div class="box-macro-args"> +Macro: <b>ENDNOTES_PAGENUM_STYLE</b> <kbd class="macro-args">DIGIT | ROMAN | roman | ALPHA | alpha</kbd> +</div> + +<p> +Use this macro to set the page numbering style of endnotes pages. +The arguments are identical to those for +<a href="headfootpage.html#pagenum-style">PAGENUM_STYLE</a>. +The default is <kbd>digit</kbd>. You may want to change it to, say, +<kbd>alpha</kbd>, which you would do with +<br/> +<span class="pre-in-pp"> + .ENDNOTES_PAGENUM_STYLE alpha +</span> +</p> + +<!-- -ENDNOTES_FIRST_PAGENUMBER- --> + +<h5 id="endnotes-first-pagenumber" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">• Setting the first page number of endnotes</h5> + +<div class="box-macro-args"> +Macro: <b>ENDNOTES_FIRST_PAGENUMBER</b> <kbd class="macro-args"><page # that appears on page 1 of endnotes></kbd> +</div> + +<p> +Use this macro with caution. If all endnotes for several +<a href="rectoverso.html#collate">collated</a> +documents are to be output at once, i.e. not at the end of each +separate doc, ENDNOTES_FIRST_PAGENUMBER tells mom what page number +to put on the first page of the endnotes. +</p> + +<p> +However, if you set ENDNOTES_FIRST_PAGENUMBER in collated documents +in which the endnotes are output after each section (chapter, +article, etc), you have to reset every section’s first page +number after +<a href="rectoverso.html#collate">COLLATE</a> +and before +<a href="docprocessing.html#start">START</a> +with +<a href="headfootpage.html#pagenumber">PAGENUMBER</a>. +</p> + +<!-- -ENDNOTES_NO_FIRST_PAGENUN- --> + +<h5 id="endnotes-no-first-pagenum" class="docs" style="margin-top: -.25em; margin-bottom: .5em; margin-left: .5em;">• Omitting a page number on the first page of endnotes</h5> + +<div class="box-macro-args"> +Macro: <b>ENDNOTES_NO_FIRST_PAGENUM</b> <kbd class="macro-args"><toggle></kbd> +</div> + +<p> +This macro is for use only if +<a href="headfootpage.html#footers">FOOTERS</a> +are on. It tells +<a href="#endnotes">ENDNOTES</a> +not to print a page number on the first endnotes page. Mom’s +default is to print the page number. +</p> + +<!-- -SUSPEND_PAGINATION- --> + +<h5 id="suspend-pagination" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">• Suspending pagination during endnotes output</h5> + +<div class="box-macro-args" style="margin-bottom: 1em;"> +Macro: <b>SUSPEND_PAGINATION</b> +</div> + +<div class="box-macro-args"> +Macro: <b>RESTORE_PAGINATION</b> +</div> + +<p> +SUSPEND_PAGINATION doesn’t take an argument. Invoked +immediately prior to +<a href="#endnotes">ENDNOTES</a>, +it turns off endnotes pages pagination. Mom continues, however to +increment page numbers silently. +</p> + +<p> +To restore normal document pagination after endnotes, invoke +<kbd>.RESTORE_PAGINATION</kbd> (again, with no argument) immediately +after <kbd>.ENDNOTES</kbd>. +</p> + +<h4 id="endnotes-header-control" class="docs" style="margin-bottom: .5em;">3. Header/footer control</h4> + +<h5 id="endnotes-modify-hdrftr" class="docs" style="margin-top: 0; margin-bottom: -.75em; margin-left: .5em;">• Modifying what goes in the endnotes header/footer</h5> + +<p> +If you wish to modify what appears in the header/footer that appears +on endnotes page(s), make the changes before you invoke +<a href="#endnotes"><kbd>.ENDNOTES</kbd></a>, +not afterwards. +</p> + +<p> +Except in the case of +<a href="docprocessing.html#doctype">DOCTYPE <kbd>CHAPTER</kbd></a>, +mom prints the same header or footer used throughout the document +on the endnotes page(s). Chapters get treated differently in that, +by default, mom does not print the header/footer centre string +(normally the chapter number or chapter title.) In most cases, this +is what you want. However, should you not want mom to remove +the centre string from the endnotes page(s) headers/footers, invoke +<kbd><a href="#endnotes-hdrftr-center">.ENDNOTES_HEADER_CENTER</a></kbd> +with no argument. +</p> + +<p> +An important change you may want to make is to put the word +“Endnotes” in the header/footer centre position. To do +so, invoke +<br/> +<span class="pre-in-pp" style="margin-bottom: -1em;"> + .HEADER_CENTER "Endnotes" +</span> +or +<span class="pre-in-pp" style="margin-top: -.5em;"> + .FOOTER_CENTER "Endnotes" +</span> +prior to invoking <kbd>.ENDNOTES</kbd>. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If your +<a href="docprocessing.html#doctype">DOCTYPE</a> +is <kbd>CHAPTER</kbd>, you must also invoke +<a href="#endnotes-hdrftr-center">ENDNOTES_HEADER_CENTER</a> +for the ENDNOTES_HEADER_CENTER to appear. +</p> +</div> + +<h5 id="endnotes-hdrftr-center" class="docs" style="margin-top: 0; margin-bottom: .5em; margin-left: .5em;">• Header/footer centre string when doctype is CHAPTER</h5> + +<div class="box-macro-args"> +Macro: <b>ENDNOTES_HEADER_CENTER</b> <kbd class="macro-args">toggle</kbd> +</div> + +<p> +If your +<a href="docprocessing.html#doctype">DOCTYPE</a> +is <kbd>CHAPTER</kbd> and you want mom to include a centre +string in the headers/footers that appear on endnotes +pages, invoke <kbd>.ENDNOTES_HEADER_CENTER</kbd> (or +<kbd>.ENDNOTES_FOOTER_CENTER</kbd>) with no argument. Mom’s +default is not to print the centre string. +</p> + +<p> +If, for some reason, having enabled the header/footer centre string +on endnotes pages, you wish to disable it, invoke the same macro +with any argument (<kbd>OFF</kbd>, <kbd>QUIT</kbd>, <kbd>END</kbd>, +<kbd>X</kbd>...). </p> + +<h5 id="endnotes-allows-headers" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">• Allow headers on endnotes pages</h5> + +<div class="box-macro-args"> +Macro: <b>ENDNOTES_ALLOWS_HEADERS</b> <kbd class="macro-args"><none> | ALL</kbd> +</div> + +<p> +By default, if HEADERS are on, mom prints page headers on all +endnotes pages except the first. If you don’t want her to +print headers on endnotes pages, do +<br/> +<span class="pre-in-pp"> + .ENDNOTES_ALLOWS_HEADERS OFF +</span> +If you want headers on every page including the first, do +<br/> +<span class="pre-in-pp"> + .ENDNOTES_ALLOWS_HEADERS ALL +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If FOOTERS are on, mom prints footers on every endnotes page. +This is a style convention. In mom, there is no such beast as +ENDNOTES_ALLOWS_FOOTERS OFF. +</p> +</div> + +<h4 id="endnotes-header" class="docs">4. Endnotes header (first-page title) control</h4> + +<!-- -ENDNOTES_HEADER_STRING- --> + +<h5 id="endnotes-header-string" class="docs" style="margin-top: 1em; margin-bottom: .5em; margin-left: .5em;">• Header (first-page title) string</h5> + +<div class="box-macro-args"> +Macro: <b>ENDNOTES_HEADER_STRING</b> <kbd class="macro-args">"<title to print at the top of endnotes>"</kbd> +</div> + +<p class="alias" style="margin-bottom: 0;"> +<i>Alias:</i> <b>ENDNOTE_STRING</b> (for compatibility with older documents) +</p> + +<p> +By default, mom prints the word “ENDNOTES” as a head +at the top of the first page of endnotes. If you want her to +print something else, invoke <kbd>.ENDNOTES_HEADER_STRING</kbd> +with the endnotes-page head you want, surrounded by double-quotes. +If you don’t want a head at the top of the first +endnotes-page, invoke <kbd>.ENDNOTES_HEADER_STRING</kbd> +with a blank argument (either two double-quotes side by +side—<kbd>""</kbd>—or no argument at all). +</p> + +<!-- -ENDNOTES_HEADER_CONTROL- --> + +<h5 id="endnotes-header-string-control" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">• Header (first-page title) control macros and defaults</h5> + +<div class="defaults-container" style="padding-bottom: 8px;"> +<p class="defaults" style="padding-top: 6px;"> +See +<a href="#control-macro-args">Arguments to the control macros</a>. +<br/> +The following ENDNOTES_HEADER control macros may also be +<a href="#grouping">grouped</a> +using ENDNOTES_HEADER_STYLE. +</p> + +<p style="margin-top: .5em; margin-bottom: 0; margin-left: .5em"> +Please note that “_HEADER_”, here, refers to the title +that appears at the top of the first endnotes page, not to the page +headers of subsequent endnotes pages. +<span class="pre defaults"> +.ENDNOTES_HEADER_FAMILY default = prevailing document family +.ENDNOTES_HEADER_FONT default = bold +.ENDNOTES_HEADER_SIZE* default = +1 +.ENDNOTES_HEADER_QUAD default = centred +.ENDNOTES_HEADER_COLOR default = black + +*Relative to the size of the endnotes text (set with ENDNOTE_PT_SIZE) +</span> +</p> +</div> + +<p style="margin-top: -2em"> +<b>Note:</b> <i>For compatibility with older documents, these macros are aliased +as</i> <kbd>.ENDNOTE_STRING_<SPEC></kbd>, e.g. <kbd>.ENDNOTE_STRING_FAMILY</kbd>. +</p> + +<!-- -ENDNOTES_HEADER_V_POS- --> + +<h5 id="endnotes-header-placement" class="docs" style="margin-top: -.25em; margin-bottom: .5em; margin-left: .5em;">• Header (first-page title) placement</h5> + +<div class="box-macro-args"> +Macro: <b>ENDNOTES_HEADER_V_POS</b> <kbd class="macro-args"><distance from top of page></kbd> +</div> + +<p class="requires"> +• Argument requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p class="alias" style="margin-top: -1em; margin-bottom: 0;"> +<i>Alias:</i> <b>ENDNOTE_STRING_ADVANCE</b> (for compatibility with older documents) +</p> + +<p> +By default, mom places the title (the docheader, as it were) of +endnotes pages (typically "ENDNOTES") on the same +<a href="definitions.html#baseline">baseline</a> +that is used for the start of +<a href="definitions.html#running">running text</a>. +If you’d prefer another location, higher or lower on the page +(thereby also raising or lowering the starting position of the +endnotes themselves), invoke <kbd>.ENDNOTES_HEADER_V_POS</kbd> with +an argument stating the distance from the top edge of the page at +which you’d like the title placed. +</p> + +<p> +The argument requires a unit of measure, so if you’d like the title +to appear 1-1/2 inches from the top edge of the page, you’d tell +mom about it like this: +<br/> +<span class="pre-in-pp"> + .ENDNOTES_HEADER_V_POS 1.5i +</span> +</p> + +<!-- -ENDNOTES_HEADER_UNDERSCORE- --> + +<h5 id="endnotes-header-underscore" class="docs" style="margin-top: -1em; margin-bottom: .5em; margin-left: .5em;">• Header (first-page title) underscoring</h5> + +<div class="box-macro-args"> +Macro: <b>ENDNOTES_HEADER_UNDERSCORE</b> <kbd class="macro-args">[DOUBLE] [<underscore weight> [<underscore gap> [<distance between double rules]]] | <none> | <anything></kbd> +</div> + +<p class="alias" style="margin-bottom: 0;"> +<i>Alias:</i> <b>ENDNOTES_HEADER_UNDERLINE</b>. +<i>(For compatibility with older documents, also +aliased as</i> <b>ENDNOTE_STRING_UNDERSCORE</b> <i>and</i> +<b>ENDNOTE_STRING_UNDERLINE</b>.) +</p> + +<p class="requires"> +• The argument +<span style="font-style: normal"><kbd><underscore weight></kbd></span> +must not have the +<a href="definitions.html#unitofmeasure">unit of measure</a>, +<span style="font-style: normal;"><kbd>p</kbd></span>, +appended to it; all other arguments require a unit of measure +</p> + +<p> +Invoked without an argument, <kbd>.ENDNOTES_HEADER_UNDERSCORE</kbd> +will place a single rule underneath the endnotes page title. Invoked +with the argument, <kbd>DOUBLE</kbd>, ENDNOTES_HEADER_UNDERSCORE will +double-underscore the title. Invoked with any other non-numeric +argument, (e.g. <kbd>OFF, NO, X</kbd>, etc.) the macro disables +underscoring of the title. +</p> + +<p> +In addition, you can use ENDNOTES_HEADER_UNDERSCORE to control the +weight of the underscore rule(s), the gap between the title and the +underscore, and, in the case of double-underscores, the distance +between the two rules. +</p> + +<p> +Some examples: +<br/> +<span class="pre-in-pp"> + .ENDNOTES_HEADER_UNDERSCORE 1 + - turn underscoring on; set the rule weight to 1 point + + .ENDNOTES_HEADER_UNDERSCORE 1 3p + - turn underscoring on; set the rule weight to 1 point; set + the gap between the title and the underscore to 3 points + + .ENDNOTES_HEADER_UNDERSCORE DOUBLE .75 3p + - turn double-underscoring on; set the rule weight to 3/4 of + a point; set the gap between the title and the upper + underscore to 3 points; leave the gap between the upper + and the lower underscore at the default + + .ENDNOTES_HEADER_UNDERSCORE DOUBLE 1.5 1.5p 1.5p + - turn double-underscoring on; set the rule weight to 1-1/2 + points; set the gap between the title and the upper + underscore to 1-1/2 points; set the gap between the upper + and the lower underscore to 1-1/2 points +</span> +Note, from the above, that in all instances, underscoring (single +or double) is enabled whenever ENDNOTES_HEADER_UNDERSCORE is used in +this way. +</p> + +<p> +By default, mom double-underscores the title if your +<a href="docprocessing.html#printstyle">PRINTSTYLE</a> +is <kbd>TYPEWRITE</kbd>. +</p> + +<!-- -ENDNOTES_HEADER_CAPS- --> + +<h5 id="endnotes-header-caps" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">• Header (first-page title) capitalization</h5> + +<div class="box-macro-args"> +Macro: <b>ENDNOTES_HEADER_CAPS</b> <kbd class="macro-args">toggle</kbd> +</div> + +<p class="alias" style="margin-bottom: 0;"> +<i>Alias:</i> <b>ENDNOTE_STRING_CAPS</b> (for compatibility with older documents) +</p> + +<p> +Invoked by itself, <kbd>.ENDNOTES_HEADER_CAPS</kbd> will +automatically capitalize the endnotes-page title. Invoked with any +other argument, the macro disables automatic capitalization of the +title. +</p> + +<p> +If you’re generating a table of contents, you may want the +endnotes pages title to be in caps, but the toc entry in caps/lower +case. If the argument to +<a href="#endnotes-header-string">ENDNOTES_HEADER_STRING</a> +is in caps/lower case and ENDNOTES_HEADER_CAPS is on, this is exactly +what will happen. +</p> + +<p> +Mom’s default is to capitalize the endnotes pages title string. +</p> + +<!-- -ENDNOTE_TITLE- --> + +<h4 id="endnotes-doc-title" class="docs" style="margin-top: -.25em;">5. Endnotes document-identification title control</h4> + +<h5 id="endnote-title" class="docs" style="margin-top: 1em; margin-bottom: .5em; margin-left: .5em;">• Document-identification title string(s)</h5> + +<div class="box-macro-args"> +Macro: <b>ENDNOTE_TITLE</b> <kbd class="macro-args">"<title to identify a document in endnotes>"</kbd> +</div> + +<p> +By default, mom identifies the document(s) to which endnotes belong +by the document title(s) given to the +<a href="docprocessing.html#title">TITLE</a> +macro. If you’d like her to identify the document(s) another +way, simply invoke <kbd>.ENDNOTE_TITLE</kbd> prior to +<a href="docprocessing.html#start">START</a> +with the identifying title you want, surrounded by double-quotes. +</p> + +<p> +If you don’t want any identifying title, invoke +<kbd>.ENDNOTE_TITLE</kbd> with a blank argument, either two +double-quotes side by side (<kbd>""</kbd>) or no argument +at all. This is particularly useful if you have a single (i.e. +non-collated) document and find having the document’s title +included in the endnotes redundant. +</p> + +<!-- -ENDNOTE_TITLE_CONTROL- --> + +<h5 id="endnote-title-control" class="docs" style="margin-top: .75em; margin-bottom: .5em; margin-left: .5em;">• Document-identification string control macros and defaults</h5> + +<div class="defaults-container" style="padding-bottom: 8px;"> +<p class="defaults" style="padding-top: 6px;"> +See +<a href="#control-macro-args">Arguments to the control macros</a>. +<br/> +The following ENDNOTE_TITLE_STYLE control macros may also be +<a href="#grouping">grouped</a> +using ENDNOTE_TITLE_STYLE_STYLE. +</p> +<span class="pre defaults"> +.ENDNOTE_TITLE_FAMILY default = prevailing document family; default is Times Roman +.ENDNOTE_TITLE_FONT default = bold +.ENDNOTE_TITLE_SIZE* default = 0 +.ENDNOTE_TITLE_COLOR default = black +.ENDNOTE_TITLE_QUAD default = left +.ENDNOTE_TITLE_CAPS +.ENDNOTE_TITLE_SMALLCAPS +.ENDNOTE_TITLE_UNDERSCORE default = single underscore + +*Relative to the size of the endnotes text (set with ENDNOTE_PT_SIZE) +</span> +</div> + +<!-- -ENDNOTE_NUMBERING- --> + +<h4 id="endnotes-numbering" class="docs" style="margin-top: -.25em;">6. Endnotes referencing style</h4> + +<h5 id="endnote-marker-style" class="docs" style="margin-top: 1em; margin-bottom: .5em; margin-left: .5em;">• Endnote marker style</h5> + +<div class="box-macro-args"> +Macro: <b>ENDNOTE_MARKER_STYLE</b> <kbd class="macro-args"><a href="#line">LINE</a> | <a href="#number">NUMBER</a> | <a href="#superscript">SUPERSCRIPT</a></kbd> +</div> + +<p id="line"> +<span style="display: block; margin-bottom: .25em;">• <i>Argument:</i> <kbd>LINE</kbd></span> +By default, mom places superscript numbers in +<a href="definitions.html#running">running text</a> +to identify endnotes. However, if you have +<a href="#number-lines">linenumbering</a> +turned on, you may instruct mom not to put superscript numbers in +the running text, but rather to reference endnotes by line number. +The command to do this is +<br/> +<span class="pre-in-pp"> + .ENDNOTE_MARKER_STYLE LINE +</span> +With ENDNOTE_MARKER_STYLE <kbd>LINE</kbd>, mom will identify +endnotes either by single line numbers or by line ranges. If +what you want is a single line number, you need only invoke +<kbd>.ENDNOTE</kbd> at the appropriate place in running +text <i>without the terminating</i> <kbd>\c</kbd>. Input lines +after the endnote has been terminated (e.g. with <kbd>.ENDNOTE +OFF</kbd>) must begin at the left margin. +</p> + +<p> +(Should you wish to revert to mom’s default behaviour of +placing a superscript number in the text to identify an endnote, +you can invoke <kbd>.ENDNOTE_MARKER_STYLE</kbd> with the argument, +<kbd>NUMBER</kbd>. It is not advisable to switch marker styles +within a single document, for aesthetic reasons, but there is +nothing to prevent you from doing so.) +</p> + +<p id="en-mark"> +If you want a range of line numbers (e.g. [5-11] ), +insert, directly into the first line of the range you want, the +<a href="definitions.html#inlines">inline escape</a>, +<kbd><span class="nobr">\*[EN-MARK]</span></kbd>. For the terminating line +number of the range, you need only invoke <kbd>.ENDNOTE</kbd> +(again, without the terminating <kbd>\c</kbd>). Mom is smart enough +to figure out that where <kbd>.ENDNOTE</kbd> is invoked represents +the terminating line number. +</p> + +<div id="endnote-linenumbers-note" class="box-tip"> +<p class="tip-top"> +<span class="note">Note:</span> +By default, mom reserves a fixed amount of space, equal to 8 +placeholders, for the linenumbers of linenumbered endnotes. Within +that space, the numbers are flush right with each other. The +reserved space is enough to print a range of linenumbers of the form +<kbd>[nnnn-nnnn]</kbd>, but may be more than you need. +</p> + +<p> +The goal with linenumbered endnotes is to ensure that the longest +linenumber or range of lines is flush with the left margin of the +page. Adjusting the reserved space is done with the macro +<a href="docelement.html#endnote-numbers-align">ENDNOTE_NUMBERS_ALIGN</a>, +and the rules for getting it right are simple. +</p> + +<p class="tip-bottom"> +If your document runs to less than 100 lines, invoke +<br/> +<span class="pre-in-pp"> + .ENDNOTE_NUMBERS_ALIGN RIGHT 0 +</span> +If your document has between 100 and 999 lines +<br/> +<span class="pre-in-pp"> + .ENDNOTE_NUMBERS_ALIGN RIGHT 1 +</span> +If your document has between 1000 and 9999 lines +<br/> +<span class="pre-in-pp"> + .ENDNOTE_NUMBERS_ALIGN RIGHT 2 +</span> +etc. +</p> +</div> + +<p id="number" style="margin-top: -.5em;"> +<span style="display: block; margin-bottom: .25em;">• <i>Argument:</i> <kbd>NUMBER</kbd></span> +With the argument <kbd>NUMBER</kbd>, mom places superscript numbers +in running text, but identifies endnotes in the endnotes section +of your document with normal-sized, base-aligned numbers. +</p> + +<p id="superscript" style="margin-top: -.5em;"> +<span style="display: block; margin-bottom: .25em;">• <i>Argument:</i> <kbd>SUPERSCRIPT</kbd></span> +With the argument <kbd>SUPERSCRIPT</kbd>, mom places superscript +numbers in running text, and identifies endnotes in the endnotes +section of your document with superscript numbers as well. This is +mom’s default. +</p> + +<div id="endnote-superscript-note" class="box-tip"> +<p class="tip-top"> +<span class="note">Note:</span> +By default, mom reserves a fixed amount of space, equal to 2 +placeholders, for the superscript numbers identifying endnotes in +the endnotes section of your document. Within that space, the +numbers are flush right with each other. +</p> + +<p class="tip-bottom"> +If you need less space (the total number of endnotes is less than 10) or +more (the total number of endnotes is greater than 99), use the +macro +<a href="docelement.html#endnote-numbers-align">ENDNOTE_NUMBERS_ALIGN</a>, +to set the desired amount of reserved space, e.g. +<br/> +<span class="pre-in-pp"> + .ENDNOTE_NUMBERS_ALIGN RIGHT 1 +</span> +or +<br/> +<span class="pre-in-pp"> + .ENDNOTE_NUMBERS_ALIGN RIGHT 3 +</span> +</p> +</div> + +<h5 id="endnote-linenumber-gap" class="docs" style="margin-bottom: .5em; margin-left: .5em;">• Spacing between line-numbered endnotes and the endnote text</h5> + +<div class="box-macro-args"> +Macro: <b>ENDNOTE_LINENUMBER_GAP</b> <kbd class="macro-args"><size of gap></kbd> +</div> + +<p class="requires"> +• Requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +When your +<a href="#endnote-marker-style">ENDNOTE_MARKER_STYLE</a> +is <kbd>LINE</kbd>, mom, by default, inserts a space equal to +1/2-<a href="definitions.html#em">en</a> +between the linenumber and the text of an endnote. For aesthetic +reasons, you may want to change the size of the gap, which is done +with the macro ENDNOTE_LINENUMBER_GAP. +</p> + +<p> +ENDNOTE_LINENUMBER_GAP takes as its single argument the size +of the gap. The argument requires a +<a href="definitions.html#unitofmeasure">unit of measure</a>, +so, for example, to change the gap to 2 +<a href="definitions.html#picaspoints">picas</a>, +you’d do +<br/> +<span class="pre-in-pp"> + .ENDNOTE_LINENUMBER_GAP 2P +</span> +</p> + +<h5 id="endnote-linenumber-brackets" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">• Brackets around endnote line numbers</h5> + +<div class="box-macro-args"> +Macro: <b>ENDNOTE_LINENUMBER_BRACKETS</b> <kbd class="macro-args">PARENS | SQUARE | BRACES | ( | [ | {</kbd> +</div> + +<p> +By default, mom puts endnote line numbers inside square brackets. +The style of the brackets may be changed with the macro +ENDNOTE_LINENUMBER_BRACKETS, which takes one of three possible +arguments: <kbd>PARENS</kbd> (“round” brackets), +<kbd>SQUARE</kbd> (the default) or <kbd>BRACES</kbd> (curly braces). +If you prefer a shortform, the arguments, <kbd>(</kbd>, <kbd>[</kbd> +or <kbd>{</kbd> may be used instead. +</p> + +<h5 id="endnote-linenumber-separator" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">• Separator after endnote line numbers instead of brackets</h5> + +<div class="box-macro-args"> +Macro: <b>ENDNOTE_LINENUMBER_SEPARATOR</b> <kbd class="macro-args"><character></kbd> +</div> + +<p> +If you don’t want the numbers enclosed in brackets, you may tell +mom to use a separator instead. A common +separator would be the colon, but it can be anything you like. +</p> + +<p> +ENDNOTE_LINENUMBER_SEPARATOR takes as its single argument the +separator you want. (If the argument contains spaces, don’t +forget to enclose the argument in double-quotes.) The separator +can be composed of any valid groff character, or any combination of +characters. For example, to get a colon separator after the line +number in line-numbered endnotes, you’d do +<br/> +<span class="pre-in-pp"> + .ENDNOTE_LINENUMBER_SEPARATOR : +</span> +</p> + +<h5 id="endnote-number-control" class="docs" style="margin-top: -1em; margin-bottom: .5em; margin-left: .5em;">• Endnote numbering style control</h5> + +<div class="defaults-container" style="padding-bottom: 8px;"> +<p class="defaults" style="padding-top: 6px;"> +See +<a href="#control-macro-args">Arguments to the control macros</a>. +</p> + +<p class="defaults"> +Please note that the control macros for endnote numbering affect only +the numbers that appear on the endnotes pages themselves, not the +endnote numbers that appear in the body of a document. +</p> +<span class="pre defaults"> +Numbered endnotes +.ENDNOTE_NUMBER_FAMILY default = prevailing document family; default Times Roman +.ENDNOTE_NUMBER_FONT default = bold +.ENDNOTE_NUMBER_SIZE* default = 0 +Linenumbered endnotes +.ENDNOTE_LINENUMBER_FAMILY default = prevailing document family; default Times Roman +.ENDNOTE_LINENUMBER_FONT default = bold +.ENDNOTE_LINENUMBER_SIZE* default = 0 + +*Relative to the size of the endnotes text (set with ENDNOTE_PT_SIZE) +</span> +</div> + +<h5 id="endnote-number-alignment" class="docs" style="margin-top: -1.25em; margin-bottom: -.5em; margin-left: .5em;">• Endnote numbering alignment</h5> + +<p style="margin-top: .75em;"> +By default, when your +<a href="#endnote-marker-style">ENDNOTE_MARKER_STYLE</a> +is <kbd>NUMBER</kbd>, mom hangs the numbers on endnotes pages, +aligned right to two placeholders, producing this: +<br/> +<span id="endnote-numbering-alignment-example" class="pre-in-pp"> + 9. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, + sed diam nonumy eirmod tempor invidunt ut labore et + dolore magna aliquyam erat, sed diam voluptua. + + 10. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, + sed diam nonumy eirmod tempor invidunt ut labore et + dolore magna aliquyam erat, sed diam voluptua. +</span> +If you wish to change either the alignment or the number of +placeholders, the macro to use is ENDNOTE_NUMBERS_ALIGN. +</p> + +<!-- -ENDNOTE_NUMBERS_ALIGN- --> + +<div id="endnote-numbers-align" class="box-macro-args"> +Macro: <b>ENDNOTE_NUMBERS_ALIGN</b> <kbd class="macro-args">LEFT | RIGHT <number of placeholders></kbd> +</div> + +<p> +ENDNOTE_NUMBERS_ALIGN determines how endnote numbers are aligned. If you invoke +<br/> +<span class="pre-in-pp"> + .ENDNOTE_NUMBERS_ALIGN RIGHT 2 +</span> +the periods (dots) after the numbers will align, like this +<span class="pre-in-pp"> + 9. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, + sed diam nonumy eirmod tempor invidunt ut labore et + dolore magna aliquyam erat, sed diam voluptua. + + 10. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, + sed diam nonumy eirmod tempor invidunt ut labore et + dolore magna aliquyam erat, sed diam voluptua. +</span> +If you invoke +<span class="pre-in-pp"> + .ENDNOTE_NUMBERS_ALIGN LEFT 2 +</span> +the first digits of the numbers will line up flush left, like this +<span class="pre-in-pp"> + 9. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, + sed diam nonumy eirmod tempor invidunt ut labore et + dolore magna aliquyam erat, sed diam voluptua. + + 10. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, + sed diam nonumy eirmod tempor invidunt ut labore et + dolore magna aliquyam erat, sed diam voluptua. +</span> +The argument <kbd><number of placeholders></kbd> represents +the maximum size of the numbers, expressed as the number of +digits in the largest number. Numbers in the range 0-9 require +1 placeholder; in the range 10-99, 2 placeholders; in the range +100-999 3 placeholders, and so on. +</p> + +<p> +Therefore, if you have fewer than ten endnotes, +<br/> +<span class="pre-in-pp"> + .ENDNOTE_NUMBERS_ALIGN RIGHT 1 +</span> +would ensure proper right alignment of endnote numbers. +</p> + +<p> +Mom’s default for endnote number alignment is to align the +numbers right to two placeholders. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +ENDNOTE_NUMBERS_ALIGN can also be used to establish the alignment +and number of placeholders when your +<a href="#endnote-marker-style">ENDNOTE_MARKER_STYLE</a> +is <kbd>SUPERSCRIPT</kbd>. Furthermore, it can be used to establish +the number of placeholders to reserve when your ENDNOTE_MARKER_STYLE +is <kbd>LINE</kbd>, even though, in such an instance, the numbers +themselves are always aligned right. See +<a href="#endnote-linenumbers-note">here</a> +for examples. +</p> +</div> + +<div class="rule-short"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="margin-notes-intro" class="macro-group">Margin notes</h2> + +<ul style="margin-left: -.5em;"> + <li><a href="#margin-notes-behaviour">Margin notes behaviour</a> + <ul style="margin-left: -.5em;"> + <li><a href="#margin-notes-vertical">Adjusting the vertical position of margin notes</a></li> + </ul></li> + <li><a href="#mn-init">Macro: <b>MN_INIT</b></a> – set margin notes parameters</li> + <li><a href="#mn">Tag: MN</a></li> +</ul> + +<p> +Margin notes are short annotations that appear in either the left +or right margin of a document. Sometimes they comment on the text. +Sometimes they assist in following the “flow” of a +document by summarizing the subject of a portion of text. Sometimes +they’re comments to yourself in a draft copy. +</p> + +<p> +The margin notes macros and routines in om.tmac (mom) are +“mommified” versions of the margin notes macros and +routines written by Werner Lemberg and patched by Gaius Mulley. +</p> + +<h3 id="margin-notes-behaviour" class="docs">Margin notes behaviour</h3> + +<p> +First things first: before you enter your first margin note, you +must “initialize” margin notes with +<a href="#mn-init">MN_INIT</a>. +MN_INIT sets up the style parameters for margin notes, including +things like +<a href="definitions.html#font">font</a>, +<a href="definitions.html#family">family</a> +and +<a href="definitions.html#leading">leading</a>. +MN_INIT may be called before or after +<a href="docprocessing.html#start">START</a>. +</p> + +<p> +After initializing margin notes, you create margin notes with the +<a href="#mn">MN</a> +macro. Based on the argument you pass MN, your margin note will go +in either the left or the right margin. +</p> + +<p> +Margin notes are tricky from a typographic standpoint with respect +to vertical placement. Since the leading of margin notes may differ +from that of +<a href="definitions.html#running">running text</a>, +it’s impossible for mom to guess whether to align +the first lines of margin notes with a document +<a href="definitions.html#baseline">baseline</a>, +whether to align the last lines of margin notes with a document +baseline, or whether to centre them, vertically, so that neither +first nor last line aligns with anything! +</p> + +<p> +Given this difficulty, mom always aligns the first line of any +margin note with a document baseline. If you want a different +behaviour, you must adjust the position(s) of margin notes yourself, +on a note by note basis. (See +<a href="#margin-notes-vertical">Adjusting the vertical position of margin notes</a>.) +</p> + +<p> +Generally speaking, mom tries to place margin notes at the point +where you invoke +<a href="#mn">MN</a>. +However, in the event that a margin note runs deep, she may not be +able to place a subsequent margin note exactly where you want. In +such an instance, mom will “shift” the margin note down +on the page, placing it one (margin note) linespace beneath the +previous margin note (plus whatever vertical space is required to +get the first line to line up with a baseline of running text). A +warning will be issued, letting you know this has happened, and +where. +</p> + +<p> +Sometimes, if a margin note has to be shifted down, there simply +isn’t enough room to start the margin note on the page on +which <kbd>.MN</kbd> is invoked. In that case, mom ignores the +margin note entirely and issues a warning, letting you know what +she’s done, and where. </p> + +<p> +In the event that a margin note, successfully begun on a page, runs +past your bottom margin (or the last line before footnotes begin), +the margin note will “flow” onto the next page. If +it is a “left” margin note, it will continue in the +left margin. If it is a “right” margin note, it will +continue in the right margin. +</p> + +<p> +If your document is being set in two columns, mom will sensibly and +automatically set all margin notes pertaining to the left column in +the left margin, and all margin notes pertaining to the right column +in the right margin, regardless of the “direction” +argument you give the MN tag. If you try to use MN in documents of +more than two columns, mom will ignore all margin notes, and issue +a warning for each. +</p> + +<h3 id="margin-notes-vertical" class="docs">Adjusting the vertical position of margin notes</h3> + +<p> +When the +<a href="definitions.html#term-leading">leading</a> +of margin notes differs from the leading used throughout a document, +you may want to adjust the vertical position of individual margin +notes. This is most often going to be the case with margin notes +that end near the bottom of the page, where you want the last line +of the margin note to line up with the last line of text on the +page. +</p> + +<p> +Adjustments to the vertical position of margin notes must be done +inside the margin note (i.e. after <kbd>.MN</kbd>), at the top, +before entering text. The commands to use are +<kbd>\!<a href="typesetting.html#ald">.ALD</a></kbd> +(to lower the margin note) and +<kbd>\!<a href="typesetting.html#rld">.RLD</a></kbd> +(to raise it). + +The <kbd>\!</kbd> must precede the macros, or they +won’t have any effect. +</p> + +<!-- -MN_INIT- --> + +<div class="macro-id-overline"> +<h3 id="mn-init" class="macro-id">MN_INIT</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>MN_INIT</b> <kbd class="macro-args"><arguments> (see list)</kbd> +</div> + +<h4 style="margin-top: .75em; margin-left: .5em; font-style: normal; font-weight: bold: font-size: 105%; color: #6f614a;">Argument list:</h4> + +<span class="pre" style="margin-top: -1.5em; margin-left: .5em;"> +RAGGED | SYMMETRIC +<L_WIDTH> <value> +<R_WIDTH> <value> +<GUTTER> <value> +<FONTSTYLE> <value> +<SIZE> <value> +<LEAD> <value> +<COLOR> <value> +<HY> <value> +</span> + +<p style="margin-top: 1.25em;"> +Before you enter your first margin note, you must initialize +the style parameters associated with margin notes using MN_INIT. +If you forget to do so, mom will issue a warning and abort. +</p> + +<p> +The arguments may be entered in any order, and since the list is +long, use of the backslash character ( <kbd>\</kbd> ) to put each on +a separate line is recommended, e.g. +<br/> +<span class="pre-in-pp"> + .MN_INIT \ + SYMMETRIC \ + L_WIDTH 4P \ + SIZE 8 \ + LEAD 9 \ + HY 14 +</span> +All arguments are optional, but since mom requires you to run +MN_INIT before entering margin notes, you should, at a minimum, set +the <kbd>RAGGED</kbd> or <kbd>SYMMETRIC</kbd> parameter. +You will almost certainly want to set <kbd>L_WIDTH</kbd>, <kbd>R_WIDTH</kbd>, +<kbd>SIZE</kbd> and <kbd>LEAD</kbd> as well. +</p> + +<h4 class="docs arg-list"><kbd>RAGGED | SYMMETRIC</kbd></h4> + +<p> +If the argument <kbd>RAGGED</kbd> is given, both left and +right margin notes will be flush left. If the argument +<kbd>SYMMETRIC</kbd> is given, left margin notes will be set flush +<i>right</i>, and right margin notes flush <i>left</i>. The effect +is something like this: +<br/> +<span class="pre-in-pp"> + A left This is a meaningless batch A right + margin note of text whose sole purpose is margin note + with just to demonstrate how the sym- with just + a few words metric argument to MN sets left a few words + in it. and right margin notes. in it. +</span> +</p> + +<p> +If the argument is omitted, both left and right margin notes will +be set justified. (Justified is usually not a good idea, since the +narrow measure of margin notes makes pleasing justification a near +impossibility.) +</p> + +<h4 class="docs arg-list"><kbd>L_WIDTH <value></kbd></h4> + +<p> +The width of left margin notes. A +<a href="definitions.html#unitofmeasure">unit of measure</a> +must be appended directly onto the argument. The default is to set +left margin notes right out to the edge of the page, which is almost +certainly not what you want, so you should give a value for this +argument if using left margin notes. +</p> + +<h4 class="docs arg-list"><kbd>R_WIDTH <value></kbd></h4> + +<p> +The width of right margin notes. A +<a href="definitions.html#unitofmeasure">unit of measure</a> +must be appended directly onto the argument. The default is to +set right margin notes right out to the edge of the page, which is +almost certainly not what you want, so you should give a value for +this argument if using right margin notes. +</p> + +<h4 class="docs arg-list"><kbd>GUTTER <value></kbd></h4> + +<p> +The +<a href="definitions.html#gutter">gutter</a> +between margin notes and +<a href="definitions.html#running">running text</a>. +A +<a href="definitions.html#unitofmeasure">unit of measure</a> +must be appended directly onto the argument. The gutter applies to +both left and right margin notes. The default is 1 +<a href="definitions.html#em">em</a>. +</p> + +<h4 class="docs arg-list"><kbd>FONTSTYLE <value></kbd></h4> + +<p> +The family+font for margin notes. Yes, that’s right: the +family <i>plus</i> font combo. For example, if you want Times +Roman Medium, the argument must be <kbd>TR</kbd>. If you want Palatino +Medium Italic, the argument must be <kbd>PI</kbd>. The default is the same +family+font combo used for a document’s paragraph text. +</p> + +<h4 class="docs arg-list"><kbd>SIZE <value></kbd></h4> + +<p> +The point size of type for margin notes. There is no need to append a +<a href="definitions.html#unitofmeasure">unit of measure</a> +to the argument; +<a href="definitions.html#picaspoints">points</a> +is assumed (although there’s nothing preventing you from +appending an alternative unit of measure directly to the argument). +The default is for margin notes to use the same point size of type +as is used in document paragraphs. +</p> + +<h4 class="docs arg-list"><kbd>LEAD <value></kbd></h4> + +<p> +The +<a href="definitions.html#leading">leading</a> +of margin notes. <kbd><LEAD></kbd> takes +<a href="definitions.html#picaspoints">points</a> +as its unit of measure, so don’t tack a unit of measure onto +the end of the argument. The default lead is the same as paragraph +text (i.e. the document’s base leading). +</p> + +<h4 class="docs arg-list"><kbd>COLOR <value></kbd></h4> + +<p> +The colour of margin notes. The colour must be pre-initialized +with +<a href="color.html#newcolor">NEWCOLOR</a> +or +<a href="color.html#xcolor">XCOLOR</a>. +The default is black. +</p> + +<h4 class="docs arg-list"><kbd>HY <value></kbd></h4> + +<p> +<kbd><value></kbd> is a digit telling groff how you want margin +notes hyphenated. +<br/> +<span class="pre-in-pp"> + 0 = do not hyphenate + 1 = hyphenate without restrictions + 2 = do not hyphenate the last word on the page + 4 = do not hyphenate the last two characters of a word + 8 = do not hyphenate the first two characters of a word +</span> +The values can be added together, so, for example, if you want +neither the first two nor the last two characters of words +hyphenated, the hyphenation-flag would be 12. The default value is +14 (i.e. 2+4+8). +</p> + +<!-- -MN- --> + +<div class="macro-id-overline"> +<h3 id="mn" class="macro-id">MN</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>MN</b> <kbd class="macro-args">LEFT | RIGHT</kbd> +</div> + +<p> +Once you’ve initialized margin notes with +<kbd><a href="#mn-init">.MN_INIT</a></kbd>, +you can enter margin notes any time you like with <kbd>.MN</kbd>. +An argument of <kbd>LEFT</kbd> will set a left margin note. An +argument of <kbd>RIGHT</kbd> will set a right margin note. +</p> + +<p> +Any argument, such as <kbd>OFF</kbd> (or <kbd>OFF</kbd>, +<kbd>QUIT</kbd>, <kbd>END</kbd>, <kbd>X</kbd>, etc) exits the +current margin note. +</p> + +<div class="rule-short"><hr/></div> + +<!-- ==================================================================== --> + +<!-- -FINIS- --> + +<h2 id="finis-intro" class="macro-group">Document termination string</h2> + +<ul style="margin-left: -.5em;"> + <li><a href="#finis">Tag: FINIS</a></li> + <li><a href="#finis-control">FINIS control macros</a> + <ul style="margin-left: -1.25em;"> + <li><a href="#finis-string">Changing the FINIS string</a></li> + <li><a href="#finis-string-caps">Automatic capitalization of the FINIS string</a></li> + <li><a href="#finis-color">Changing the FINIS colour</a></li> + <li><a href="#finis-no-dashes">Removing the dashes around FINIS</a></li> + </ul></li> +</ul> + +<p> +The use of FINIS is optional. If you invoke it at the end of a +document (before +<kbd><a href="#endnotes">.ENDNOTES</a></kbd>, +<kbd><a href="refer.html#bibliography">.BIBLIOGRAPHY</a></kbd> +or +<kbd><a href="tables-of-contents.html#toc">.TOC</a></kbd>) +mom deposits the word, <b>END</b>, centred after a blank line, +beneath the last line of the document. <b>END</b> is enclosed +between +<a href="definitions.html#em">em-dashes</a>, +like this: +<br/> +<span class="pre-in-pp"> + ...and they all lived happily ever after. + + — END — +</span> +If there is insufficient room for FINIS on the last page of a +document, mom will alert you on stderr. +</p> + +<p> +If you’re writing in a language other than English, you can +change what mom prints for END with the control macro +<a href="#finis-string">FINIS_STRING</a>. +</p> + +<div class="macro-id-overline"> +<h3 id="finis" class="macro-id">FINIS</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>FINIS</b> +</div> + +<p> +The use of FINIS is optional, but if you use it, it should be the +last macro you invoke in a document before +<kbd><a href="#endnotes">.ENDNOTES</a></kbd>, +<kbd><a href="refer.html#bibliography">.BIBLIOGRAPHY</a></kbd> +or +<kbd><a href="tables-of-contents.html#toc">.TOC</a></kbd>. +See +<a href="#finis-intro">above</a> +for a description of how FINIS behaves. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If you don’t use FINIS, and you don’t want +<a href="definitions.html#footer">footers</a> +(if they’re on) or a page number at the bottom of the last +page of a document, you have to turn them off manually, as the last +two lines of your document file, like this: +<br/> +<span class="pre-in-pp"> + .FOOTERS OFF + .PAGINATE OFF +</span> +</p> +</div> + +<!-- -FINIS STRING- --> + +<h3 id="finis-control" class="docs" style="margin-bottom: -1em">Finis control macros</h3> + +<p> +Since FINIS is only used once in a document, it has few control +macros. It is expected that you will make changes to style +parameters such as family, font, and size with +<a href="definitions.html#inlines">inline escapes</a> +in the FINIS string itself (see below). +</p> + +<h4 id="finis-string" class="docs" style="margin-top: -.5em">Changing the FINIS string</h4> + +<p> +By default, FINIS prints the word, END, between +<a href="definitions.html#em">em-dashes</a>. +If you’d like mom to print something else between the dashes, +use the FINIS_STRING macro (anywhere in the document prior to +FINIS). +</p> + +<p> +For example, if your document’s in French, you’d do +<br/> +<span class="pre-in-pp"> + .FINIS_STRING "FIN" +</span> +Double-quotes must enclose the macro’s argument. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If you pass FINIS_STRING a blank string, +<br/> +<span class="pre-in-pp"> + .FINIS_STRING "" +</span> +mom will still print the em-dashes when you invoke +<kbd>.FINIS</kbd>. This, in effect, produces a short, centred +horizontal rule that terminates the document. (In +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPEWRITE</kbd></a>, +it’s a short, dashed line composed of four hyphens.) +</p> +</div> + +<!-- -FINIS STRING CAPS- --> + +<h4 id="finis-string-caps" class="docs">Automatic capitalization of the FINIS string</h4> + +<p> +By default, mom sets the string you pass to FINIS all-caps. +If you’d prefer that she not do so, but rather respect +the FINIS string exactly as you enter it, invoke the macro +<kbd>.FINIS_STRING_CAPS</kbd> with the <kbd>OFF</kbd> argument, like +this: +<br/> +<span class="pre-in-pp"> + .FINIS_STRING_CAPS OFF +</span> +<kbd>OFF</kbd>, above, could be anything, e.g. <kbd>NO</kbd> or +<kbd>X</kbd>. +</p> + +<!-- -FINIS COLOR- --> + +<h4 id="finis-color" class="docs">Changing the FINIS colour</h4> + +<p> +Invoking the control macro <kbd>.FINIS_COLOR</kbd> with a +pre-defined (or “initialized”) colour changes the colour +of both the FINIS string and the em-dashes that surround it. If you +use the +<a href="definitions.html#inline">inline escape</a>, +<a href="color.html#color-inline"><kbd><span class="nobr">\*[<colourname>]</span></kbd></a>, +in the argument passed to FINIS, only the text will be in the +new colour; the em-dashes will be in the default document colour +(usually black). +</p> + +<!-- -FINIS DASHES- --> + +<h4 id="finis-no-dashes" class="docs">Removing the dashes around FINIS</h4> + +<p> +If you don’t want the dashes around the FINIS string, you can +remove them with +<br/> +<span class="pre-in-pp"> + .FINIS_NO_DASHES +</span> +</p> + +<div class="rule-long"><hr/></div> + +<!-- Navigation links --> +<table style="width: 100%; margin-top: 12px;"> +<tr> + <td style="width: 33%;"><a href="toc.html">Back to Table of Contents</a></td> + <td style="width: 33%; text-align: center;"><a href="#top">Top</a></td> + <td style="width: 33%; text-align: right;"><a href="images.html#top">Next: Graphics, floats, and preprocessor support</a></td> +</tr> +</table> + +</div> + +<div class="bottom-spacer"><br/></div> + +</body> +</html> diff --git a/contrib/mom/momdoc/docprocessing.html b/contrib/mom/momdoc/docprocessing.html new file mode 100644 index 0000000..4d09553 --- /dev/null +++ b/contrib/mom/momdoc/docprocessing.html @@ -0,0 +1,4420 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004-2020 Free Software Foundation, Inc. +Written by Peter Schaffter (peter@schaffter.ca). + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"/> + <title>Mom -- Document Processing, Introduction and Setup</title> + <link rel="stylesheet" type="text/css" href="stylesheet.css" /> +</head> + +<body style="background-color: #f5faff;"> + +<!-- ==================================================================== --> + +<div id="top" class="page"> + +<!-- Navigation links --> +<table style="width: 100%;"> +<tr> + <td><a href="toc.html">Back to Table of Contents</a></td> + <td style="text-align: right;"><a href="docelement.html#top">Next: The document element tags</a></td> +</tr> +</table> + +<h1 class="docs">Document processing with mom</h1> + +<h2 id="toc-doc-processing" class="docs" style="text-align: center;">Table of contents</h2> + +<div id="docprocessing-mini-toc" style="font-size: 90%; line-height: 150%; margin-top: .5em;"> +<div class="mini-toc-col-1" style="margin-left: 0;"> +<h3 class="toc toc-docproc-header" style="margin-top: 1em;"><a class="header-link" href="#docprocessing-intro">Introduction to document processing</a></h3> +<h3 class="toc toc-docproc-header" style="margin-top: .5em;"><a class="header-link" href="#defaults">Document defaults</a></h3> +<h3 class="toc toc-docproc-header" style="margin-top: .5em;"><a class="header-link" href="#vertical-whitespace-management">Vertical whitespace management</a></h3> +<h3 class="toc toc-docproc-header" style="margin-top: .5em;"><a class="header-link" href="#setup">Preliminary document setup</a></h3> +<ul class="toc-docproc" style="margin-top: .5em;"> + <li><a href="#docprocessing-tut"><b>Tutorial – Setting up a mom document</b></a></li> + <li><a href="#reference-macros"><b>The reference macros (metadata)</b></a> + <ul class="toc-docproc"> + <li><a href="#title">TITLE</a></li> + <li><a href="#doc-title">DOCTITLE</a></li> + <li><a href="#subtitle">SUBTITLE</a></li> + <li><a href="#author">AUTHOR</a></li> + <li><a href="#chapter">CHAPTER</a></li> + <li><a href="#chapter-title">CHAPTER_TITLE</a></li> + <li><a href="#draft">DRAFT</a></li> + <li><a href="#revision">REVISION</a></li> + <li><a href="#copyright">COPYRIGHT</a></li> + <li><a href="#misc">MISC</a></li> + <li><a href="#covertitle">COVERTITLE</a></li> + <li><a href="#doc-covertitle">DOC_COVERTITLE</a></li> + <li><a href="#pdftitle">PDF_TITLE</a></li> + <li><a href="#toc-heading">TOC_HEADING</a></li> + </ul></li> + <li><a href="#docstyle-macros"><b>The docstyle macros (templates)</b></a> + <ul class="toc-docproc"> + <li><a href="#doctype">DOCTYPE (default, chapter, letter, named, slides)</a></li> + <li><a href="#slides">DOCTYPE SLIDES</a> + <ul class="toc-docproc"> + <li><a href="#newslide">NEWSLIDE</a></li> + <li><a href="#pause">PAUSE</a></li> + <li><a href="#transition">TRANSITION</a></li> + </ul></li> + <li><a href="#printstyle">PRINTSTYLE</a></li> + <li><a href="#copystyle">COPYSTYLE</a></li> + </ul></li> + <li><a href="cover.html"><b>Cover pages</b></a></li> + <li><a href="#docheader"><b>Managing the document header</b></a> + <ul class="toc-docproc"> + <li><a href="#docheader">DOCHEADER</a></li> + <li><a href="#docheader-control">Docheader control</a> + <ul class="toc-docproc"> + <li><a href="#docheader-desc">Docheader description</a></li> + <li><a href="#index-docheader-control">Macro list</a></li> + </ul></li> + </ul></li> +</ul> +</div> +<div class="mini-toc-col-2"> +<br/> +<h3 class="toc toc-docproc-header"><a class="header-link" href="#start-macro">Initiate document processing</a></h3> +<ul class="toc-docproc" style="margin-top: .5em;"> + <li><a href="#start"><b>The START macro</b></a></li> +</ul> +<h3 class="toc toc-docproc-header"><a class="header-link" href="#style-before-start">Establishing type and formatting<br/><span style="display: block; margin-top: -.3em;">parameters before START</span></a></h3> +<ul class="toc-docproc"> + <li><a href="#type-before-start"><b>Behaviour of the typesetting macros before START</b></a> + <ul class="toc-docproc"> + <li><a href="docprocessing.html#include">Including (sourcing) style sheets and files</a></li> + <li><a href="#color">Initializing colours</a></li> + </ul></li> +</ul> +<ul class="toc-docproc" style="margin-top: -1em"> + <li><a href="#doc-lead-adjust"><b>Adjust linespacing to fill pages</b></a> + <ul class="toc-docproc"> + <li><a href="#doc-lead-adjust">DOC_LEAD_ADJUST</a></li> + <li><a href="#shim">SHIM</a> – get document leading back on track + <ul class="toc-docproc"> + <li><a href="#automatic-shimming">Automatic shimming (headings, etc)</a></li> + </ul></li> + </ul></li> + <li><a href="#columns-intro"><b>Setting documents in columns</b></a> + <ul class="toc-docproc"> + <li><a href="#columns">COLUMNS</a></li> + <li><a href="#marking-col-start">Marking the first page column start position</a> + <ul class="toc-docproc"> + <li><a href="#col-mark">COL_MARK</a></li> + </ul></li> + <li><a href="#breaking-columns">Breaking columns manually</a> + <ul class="toc-docproc"> + <li><a href="#col-next">COL_NEXT</a> and <a href="#col-break">COL_BREAK</a></li> + </ul></li> + </ul></li> +</ul> +<h3 class="toc toc-docproc-header"><a class="header-link" href="#style-after-start">Changing basic type and formatting<br/><span style="display: block; margin-top: -.3em;">parameters after START</span></a></h3> +<ul class="toc-docproc" style="margin-top: .5em;"> + <li><a href="#behaviour"><b>Behaviour of the typesetting macros during document processing</b></a></li> + <li><a href="docprocessing.html#intro-doc-param"><b>Changing document-wide typesetting parameters after START</b></a> + <ul class="toc-docproc"> + <li><a href="docprocessing.html#index-doc-param">Post-START global style change macros</a> + <ul class="toc-docproc"> + <li><a href="#doc-left-margin">DOC_LEFT_MARGIN</a></li> + <li><a href="#doc-right-margin">DOC_RIGHT_MARGIN</a></li> + <li><a href="#doc-line-length">DOC_LINE_LENGTH</a></li> + <li><a href="#doc-family">DOC_FAMILY</a></li> + <li><a href="#doc-pt-size">DOC_PT_SIZE</a></li> + <li><a href="#doc-lead">DOC_LEAD</a></li> + <li><a href="#doc-lead-adjust">DOC_LEAD_ADJUST</a></li> + <li><a href="#doc-quad">DOC_QUAD</a></li> + </ul></li> + </ul></li> +</ul> +<h3 class="toc toc-docproc-header"><a class="header-link" href="#terminating">Terminating a document</a></h3> +</div> +</div> + +<div class="rule-short" style="margin-top: -1.75em"><br/><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="docprocessing-intro" class="docs" style="margin-top: 1em">Introduction to document processing</h2> + +<p> +Document processing with mom uses markup tags to identify document elements +such as headings, paragraphs, blockquotes, and so on. The tags are, of course, +macros, but with sensible, readable names that make them easy +to grasp and easy to remember. (And don’t forget: if you +don’t like the “official” name of a tag — +too long, cumbersome to type in, not “intuitive” enough +— you can change it with the +<a href="goodies.html#alias">ALIAS</a> +macro.) +</p> + +<p> +In addition to the tags themselves, mom has an extensive array of +macros that control how they look and behave. +</p> + +<p> +Setting up a mom doc is a simple, four-part procedure. You +begin by entering metadata about the document itself (title, +subtitle, author, etc.). Next, you tell mom what kind of document +you’re creating (e.g. a chapter, letter, abstract, etc...) and +what kind of output you want (typeset, typewritten, draft-style, +etc) — essentially, templates. Thirdly, you make as many +or as few changes to the templates as you wish; in other words, +create a style sheet. Lastly, you invoke the +<kbd><a href="#start">START</a></kbd> +macro. Voilà ! You’re ready to write. +</p> + +<!-- ==================================================================== --> + +<h2 id="defaults" class="docs">Document defaults</h2> + +<p> +As is to be expected, mom has defaults for everything. If you want +to know a particular default, read about it in the description of +the pertinent tag. +</p> + +<p> +I fear the following may not be adequately covered elsewhere in the +documentation, so just in case: +</p> +<ul style="margin-top: -.5em; margin-bottom: .5em;"> + <li>the paper size is 8.5x11 inches</li> + <li>the left and right margins are 1-inch</li> + <li>the top and bottom margins for document text are plus/minus + visually 1-inch + </li> + <li>pages are numbered; the number appears centred, at the + bottom, surrounded by hyphens (e.g. -6- ) + </li> + <li>the first page of a document begins with a + <a href="definitions.html#docheader">document header</a> + </li> + <li>subsequent pages have + <a href="definitions.html#header">page headers</a> + with a rule underneath + </li> +</ul> + +<!-- ==================================================================== --> + +<h2 id="vertical-whitespace-management" class="macro-group">Vertical whitespace management</h2> + +<ul style="margin-left: -.5em;"> + <li><a href="#shim">Macro: SHIM</a></li> + <li><a href="#no-shim">Macro: NO_SHIM</a></li> + <li><a href="#flex">Macro: FLEX</a></li> + <li><a href="#no-flex">Macro: NO_FLEX</a></li> +</ul> + + +<p> +Mom takes evenly-aligned bottom margins in +<a href="definitions.html#running">running text</a> +very seriously. Only under a very few, exceptional circumstances +will she allow a bottom margin to “hang” (i.e. to fall +short). +</p> + +<p> +Mom offers two modes of operation for ensuring flush bottom margins: +shimming and flex-spacing. Shimming means that mom nudges the +next line after a significant break in running text back onto the +<a href="definitions.html#baseline-grid">baseline grid</a> +(e.g. after the insertion of a graphic). Flex-spacing means that any +vertical whitespace remaining between the end of running text and +the bottom margin is distributed equally at logical points on the +page. +</p> + +<p> +Mom uses the +<a href="definitions.html#leading">leading</a> +of running text (the “document leading”) that’s in effect +<i>at the start of running text on each page</i> +to establish the grid and space document elements such as heads or +blockquotes so that they adhere to it. (Prior to invoking +<a href="#start">START</a>, +the document leading is set with the +<a href="typesetting.html#macros-typesetting">typesetting macro</a> +<a href="typesetting.html#leading">LS</a>, +afterwards with the +<a href="definitions.html#controlmacro">document control macro</a> +<a href="#doc-lead">DOC_LEAD</a>.) +</p> + +<p> +What this means is that documents whose paragraphs are not separated +by whitespace and which do not contain graphics or +<a href="definitions.html#pre-processor">pre-processor material</a> +will fill the page completely to the bottom margin. +However, if your paragraphs are spaced, or if there are any leading +changes on a page, or if graphics or pre-processor material are +inserted, it’s very likely the bottom margins will hang +unless shimming or flex-spacing is enabled. +</p> + +<h3 id="shim-vs-flex" class="docs">Shimming <span style="text-transform: none">vs.</span> flex-spacing</h3> + +<p> +<b>Shimming</b> is mom’s default mode of operation. She applies it +automatically before headings, around quotes and blockquotes, and +beneath +<a href="definitions.html#float">floats</a> +and +<a href="definitions.html#preprocessor">pre-processor material</a>. +In addition, the +<a href="#shim">SHIM</a> +macro can be inserted into a document at any point to make sure +the text following falls on the baseline grid. +</p> + +<p> +This mode of operation works well in documents whose paragraphs are +not spaced. Deviations from the baseline grid, usually +caused by floats or pre-processor material, are corrected +immediately. If the shimming results in slightly unbalanced +whitespace around them, it can easily be remedied by passing the +<kbd>ADJUST</kbd> argument to the appropriate macro. +</p> + +<p> +If you do not want mom shimming automatically, +<a href="#no-shim">NO_SHIM</a> +turns shimming off globally and suppresses the SHIM macro. If you +want to disable shimming only for a particular float or +pre-processor, the <kbd>NO_SHIM</kbd> argument may be given to the +appropriate macro. +</p> + +<p> +<b>Flex-spacing</b> kicks in automatically whenever you turn shimming +off. In other words, if you want a document flex-spaced, +<kbd>.NO_SHIM</kbd> is how you achieve it. If, in addition to not +shimming, you don’t want mom flex-spacing either, +<a href="#no-flex">NO_FLEX</a> +lets you disable it, too. +</p> + +<p> +Flex-spacing differs from shimming in that mom doesn’t +correct deviations from the baseline grid. Rather, she distributes +whitespace left at the bottom of the page equally in appropriate +places. Like shimming, flex-spacing is automatically applied +before heads, after floats and pre-processor material, and around +quotes and blockquotes. Like shimming, flex-spacing can be +disabled for individual floats or pre-processor material with the +<kbd>NO_FLEX</kbd> flag. +</p> + +<p> +In addition, you can use the +<a href="#flex">FLEX</a> +macro to insert flex-spacing yourself into the document, which you +will almost certainly want to do if your paragraphs are spaced. +This is because paragraphs are not flex-spaced. Typographically, +the ideal for spaced paragraphs is that the space between them +remain constant. Paradoxically, the only way to achieve flush +bottom margins, or to correct excessive flex-spacing before a +heading, is by adding flex-space between the paragraphs. This +requires human judgment, and mom does not presume to decide for you. +</p> + +<p> +Shimming and flex-spacing are mutually exclusive. If the one is +active, the other isn’t unless you have disabled both. This means +that you cannot use the FLEX macro when shimming is enabled, or the +SHIM macro when flex-spacing is enabled. Mom will issue a warning +if you do. +</p> + +<p> +The choice of whether to use shimming or flex-spacing depends on +whether or not your paragraphs are spaced. In a document with +indented, non-spaced paragraphs, shimming and flex-spacing produce +nearly the same result, with shimming winning by an aesthetic hair. +In documents with spaced paragraphs, flex-spacing is the only way to +achieve flush bottom margins. +</p> + +<!-- -SHIM- --> + +<div class="macro-id-overline"> +<h3 id="shim" class="macro-id">SHIM</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>SHIM</b> +</div> + +<p> +When shimming is enabled, which it is by default, the SHIM macro +allows you to nudge the line following it back onto the baseline +grid. In documents with non-spaced paragraphs, this prevents +the bottom margins from hanging. +</p> + +<p style="margin-bottom: -1em"> +Mom herself automatically applies shimming +</p> +<ul> + <li><i>before</i> headings</li> + <li><i>around</i> quotes and blockquotes</li> + <li><i>after</i> PDF images, tables, pic diagrams, equations, and floats</li> +</ul> + +<p> +You may sometimes find the amount of space generated by +<kbd>SHIM</kbd> looks too big, whether inserted manually into a +document or as a result of automatic shimming. +The situation occurs when the amount of shimming applied +comes close to the leading currently in effect, making it seem as if +there’s one linespace too much whitespace. +</p> + +<p> +The solution is simply to add <kbd>.SPACE -1v</kbd> or +<kbd>.RLD 1v</kbd> to the document immediately after +<kbd>.SHIM</kbd>. (Both <kbd>.SPACE -1v</kbd> and +<kbd>.RLD 1v</kbd> back up by one linespace.) +</p> + +<div class="macro-id-overline"> +<h3 id="no-shim" class="macro-id">NO_SHIM</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>NO_SHIM</b> <kbd class="macro-args"><none> | <anything></kbd> +</div> + +<p> +NO_SHIM, without an argument, disables automatic shimming, +suppresses the SHIM macro, and enables flex-spacing. +</p> + +<p> +NO_SHIM with any argument (e.g. <kbd>OFF</kbd>, <kbd>QUIT</kbd>, +<kbd>END</kbd>, <kbd>X</kbd>, etc) re-enables shimming if it has +been disabled and disables flex-spacing. +</p> + +<!-- -FLEX- --> + +<div class="macro-id-overline"> +<h3 id="flex" class="macro-id">FLEX</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>FLEX</b> <kbd class="macro-args">[ FORCE ]</kbd> +</div> + +<p> +When flex-spacing is enabled, the FLEX macro inserts flexible +vertical whitespace into a document. The amount of flex-space is +determined from any extra whitespace at the bottom of a page divided +by the number of flex points on the same page. +</p> + +<p style="margin-bottom: -1em"> +If flex-spacing is enabled, mom herself automatically applies +flex-spacing +</p> +<ul style="margin-bottom: -.5em"> + <li><i>before</i> headings</li> + <li><i>around</i> quotes and blockquotes</li> + <li><i>after</i> PDF images, tables, pic diagrams, equations, and floats</li> +</ul> + +<p> +Near the bottom of some pages, you may find that +<a href="definitions.html#float">floated</a> +or +<a href="definitions.html#preprocessor">pre-processor material</a>, +including images, or a single line of text afterwards, is not flush +with the bottom margin. This is a result of mom flex-spacing +<i>after</i> such material but not before. The solution to is +insert <kbd>.FLEX</kbd> immediately beforehand. +</p> + +<p> +There are some instances where mom inhibits flex-spacing, notably +after outputting floated material deferred from one page to the +next. Introducing FLEX by itself in these instances—say, +before a head or paragraph—will not have any effect; you must +pass FLEX the <kbd>FORCE</kbd> argument. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="important">Important note on flex-spacing policy:</span><br/> +Mom disables flex-spacing on +</p> +<ul style="margin-top: -1em; margin-bottom: -.5em"> + <li>the last page or column of a document, before the Table of Contents, + Endnotes, Bibliography, and/or any “Lists of...” + </li> + <li>the page preceding a + <a href="rectoverso.html#collate">COLLATE</a> + </li> + <li>the page preceding a + <a href="typesetting.html#NEWPAGE">NEWPAGE</a> + or + <a href="headfootpage.html#blankpage">BLANKPAGE</a> + </li> + <li>the column preceding a + <a href="#col-next">COL_NEXT</a> + or + <a href="#col-break">COL_BREAK</a> + </li> +</ul> + +<p> +If this is not what you want, insert +<a href="#no-flex"><kbd>.NO_FLEX OFF</kbd></a> +before the first flex-space point on the affected page or in the +affected column. +</p> + +<p> +Flex-spacing is also disabled for any page or column where +insufficient room at or near the bottom causes a +<a href="docelement.html#heading">HEADING</a> +or +<a href="images.html#tbl">table</a> +to be moved to the top of the next page. These situations cannot +be harmonized with flex-spacing except by adjusting your layout +to prevent them. You may try re-enabling flex-spacing for the +page (<kbd>.NO_FLEX OFF</kbd>) and manually inserting +flex-spaces at appropriate points, but the original whitespace is +usually large enough that re-distributing it merely changes +one layout gaffe into another. +</p> + +<p> +Very occasionally you may notice that a document element (spaced +paragraph, floated material, pre-processor material, or a PDF image) +near the bottom of page has also caused mom to disable flex-spacing +for that page. This occurs when the document element following it +is a +<a href="docelement.html#pp-space">spaced paragraph</a>. +</p> + +<p> +It is typographically acceptable for there to be space between +insertions in running text (e.g. an image) and the bottom margin when +the next page begins with a paragraph. If you’d like to +nudge the insertion a little closer to the bottom margin—not +all the way; that isn’t possible without pushing it to the +next page and disrupting subsequent flex-spacing—insert a +small amount of space beforehand with +<a href="typesetting.html#sp">SP</a>. +Do not, in these cases, use the <kbd>ADJUST</kbd> +argument (for example to +<a href="images.html#pdf-image">PDF_IMAGE</a>.) +</p> + +<p class="tip-bottom"> +In the case of a spaced paragraph itself near the bottom of the page +causing a break, re-enabling flex-spacing +(<kbd>.NO_FLEX OFF</kbd>) at an appropriate place in your input +file will resolve the issue, provided there is at least one +flex-point on the page. If not, add one or more. +</p> +</div> + +<div class="macro-id-overline"> +<h3 id="no-flex" class="macro-id">NO_FLEX</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>NO_FLEX</b> <kbd class="macro-args"><none> | <anything></kbd> +</div> + +<p> +NO_FLEX, without an argument, disables automatic flex-spacing +and suppresses the FLEX macro. If, in addition to NO_FLEX, NO_SHIM +has also been given, your document will be neither flex-spaced nor +shimmed. +</p> + +<p> +NO_FLEX with any argument (e.g. <kbd>OFF</kbd>, <kbd>QUIT</kbd>, +<kbd>END</kbd>, <kbd>X</kbd>, etc) re-enables flex-spacing if it has +been disabled. +</p> + +<div class="rule-short"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="setup" class="docs" style="margin-bottom: .5em;">Preliminary document setup</h2> + +<div class="examples-container" style="margin-bottom: 1.5em;"> +<h3 id="docprocessing-tut" class="docs">Tutorial – Setting up a mom document</h3> + +<p style="margin-top: 1em;"> +There are four parts to setting up a mom doc (three, actually, +with one optional). Before we proceed, though, be reassured that +something as simple as +<br/> +<span class="pre-in-pp"> + .TITLE "By the Shores of Lake Attica" + .AUTHOR "Rosemary Winspeare" + .PRINTSTYLE TYPESET + .START +</span> +produces a beautifully typeset 8.5x11 document, with a +<a href="definitions.html#docheader">docheader</a> +at the top of page 1, +<a href="definitions.html#header">page headers</a> +with the title and author on subsequent pages, and page numbers at +the bottom of each page. In the course of the document, headings, +citations, quotes, epigraphs, and so on, all come out looking neat, +trim, and professional. +</p> + +<p> +For the purposes of this tutorial, we’re going to set up +a short story—<i>My Pulitzer Winner</i>—by Joe Blow. +Thankfully, we don’t have to look at story itself, just the +setup. Joe wants the document +</p> +<ul style="margin-top: -.5em; margin-bottom: -.5em;"> + <li>to be draft 7, revision 39;</li> + <li>to use the DEFAULT template;</li> + <li>to print as draft-style output (instead of final-copy output);</li> + <li>to be typeset, in Helvetica, 12 on 14, + <a href="definitions.html#rag">rag-right</a>; + </li> + <li>to have <a href="definitions.html#footer">footers</a> + instead of + <a href="definitions.html#header">headers</a>; + </li> + <li>to use a single asterisk for + <a href="definitions.html#linebreak">author linebreaks</a>. + </li> +</ul> + +<p> +Joe Blow has no taste in typography. His draft won’t look +pretty, but this is, after all, a tutorial; we’re after +examples, not beauty. +</p> + +<h4 class="docs" style="margin-top: -.5em;">Step 1</h4> + +<p style="margin-bottom: -.5em;"> +The first step in setting up any document is giving mom some +reference information (metadata). The reference macros are: +</p> +<div style="width: 50%; float: left;"> +<ul> + <li>TITLE</li> + <li>SUBTITLE</li> + <li>AUTHOR</li> + <li>CHAPTER – chapter number</li> + <li>CHAPTER_TITLE</li> + <li>DRAFT – draft number</li> + <li>REVISION – revision number</li> +</ul> +</div> +<div> +<ul> + <li>COPYRIGHT – only used on cover pages</li> + <li>MISC – only used on cover pages</li> + <li>DOCTITLE</li> + <li>COVERTITLE</li> + <li>DOC_COVERTITLE</li> + <li>PDF_TITLE</li> +</ul> +</div> + +<p style="margin-top: -.5em; clear: both;"> +You can use as many or as few as you wish, although at a minimum, +you’ll probably fill in TITLE (unless the document’s a +letter) and AUTHOR. Order doesn’t matter. You can separate +the +<a href="definitions.html#arguments">arguments</a> +from the macros by any number of spaces. The following are what +you’d need to start Joe Blow’s story. +<br/> +<span class="pre-in-pp"> + .TITLE "My Pulitzer Winner" + .AUTHOR "Joe Blow" + .DRAFT 7 + .REVISION 39 +</span> +</p> + +<h4 class="docs" style="margin-top: -1.5em;">Step 2</h4> + +<p> +Once you’ve given mom the reference information she needs, you +tell her how you want your document formatted. What kind of +document is it? Should it be typeset or typewritten? Is this a +final copy (for the world to see) or just a draft? Mom calls +the macros that answer these questions “the docstyle +macros”, and they’re essentially templates. +</p> +<ul style="margin-top: -.5em; margin-bottom: -.5em;"> + <li>PRINTSTYLE—typeset or typewritten</li> + <li>DOCTYPE—the type of document (default, chapter, user-defined, letter, slide)</li> + <li>COPYSTYLE—draft or final copy</li> +</ul> + +<p> +Mom has defaults for DOCTYPE and COPYSTYLE; if they’re what +you want, you don’t need to include them. However, +PRINTSTYLE has no default and must be present in every formatted +document. If you omit it, mom won’t process the document +AND she’ll complain (both to stderr and as a single printed +sheet with a warning). Moms—they can be so annoying +sometimes. <sigh> +</p> + +<p> +Adding to what we already have, the next bit of setup for Joe +Blow’s story looks like this: +<br/> +<span class="pre-in-pp"> + .TITLE "My Pulitzer Winner" + .AUTHOR "Joe Blow" + .DRAFT 7 + .REVISION 39 + \# + .DOCTYPE DEFAULT \"Superfluous; mom uses DOCTYPE DEFAULT by default + .PRINTSTYLE TYPESET + .COPYSTYLE DRAFT +</span> +Notice the use of the +<a href="definitions.html#commentlines">comment line</a> +( <kbd>\#</kbd> ), a handy way to keep groups of macros visually +separated for easy reading in a text editor. +</p> + +<h4 class="docs" style="margin-top: -.5em; margin-bottom: -.5em;">Step 3</h4> + +<p> +This step—completely optional—is where you, the user, +take charge. Mom has reasonable defaults for every document element +and tag, but who’s ever satisfied with defaults? Use any of +the +<a href="typesetting.html#macros-typesetting">typesetting macros</a> +here to change mom’s document defaults (paper size, margins, +family, point size, line space, rag, etc), or any of the document +processing +<a href="definitions.html#controlmacro">control macros</a>. +This is the stylesheet section of a document, and +must come after the +<a href="#printstyle">PRINTSTYLE</a> +directive. Failure to observe this condition will result in +PRINTSTYLE overriding your changes. +</p> + +<p> +Joe Blow wants his story printed in Helvetica, 12 on 14, rag right, +with +<a href="definitions.html#footer">page footers</a> +instead of +<a href="definitions.html#header">page headers</a> +and a single asterisk for the +<a href="definitions.html#linebreak">linebreak</a> +character. None of these requirements conforms to mom’s +defaults for the chosen PRINTSTYLE (TYPESET), so we change them +here. The setup for Joe Blow’s story now looks like this: +<br/> +<span class="pre-in-pp"> + .TITLE "My Pulitzer Winner" + .AUTHOR "Joe Blow" + .DRAFT 7 + .REVISION 39 + \# + .DOCTYPE DEFAULT + .PRINTSTYLE TYPESET + .COPYSTYLE DRAFT + \# + .FAMILY H + .PT_SIZE 12 + .LS 14 + .QUAD LEFT \"ie rag right + .FOOTERS + .LINEBREAK_CHAR * +</span> +</p> + +<h4 class="docs" style="margin-top: -1.5em; margin-bottom: -.5em;">Step 4</h4> + +<p> +The final step in setting up a document is telling mom to start +document processing. It’s a no-brainer, just the single +macro START. Other than PRINTSTYLE, it’s the only macro +required for document processing. +</p> + +<p> +Here’s the complete setup for <i>My Pulitzer Winner</i>: +<br/> +<span class="pre-in-pp"> + .TITLE "My Pulitzer Winner" + .AUTHOR "Joe Blow" + .DRAFT 7 + .REVISION 39 + \# + .DOCTYPE DEFAULT + .PRINTSTYLE TYPESET + .COPYSTYLE DRAFT + \# + .FAMILY H + .PT_SIZE 12 + .LS 14 + .QUAD LEFT \"ie rag right + .FOOTERS + .LINEBREAK_CHAR * + \# + .START +</span> +As pointed out earlier, Joe Blow is no typographer. Given that all he +needs is a printed draft of his work, a simpler setup would have been: +<br/> +<span class="pre-in-pp"> + .TITLE "My Pulitzer Winner" + .AUTHOR "Joe Blow" + .DRAFT 7 + .REVISION 39 + \# + .PRINTSTYLE TYPEWRITE + .COPYSTYLE DRAFT + \# + .START +</span> +<kbd>.PRINTSTYLE TYPEWRITE</kbd>, above, means that Joe’s +work will come out “typewritten, double-spaced”, +making the blue-pencilling he (or someone else) is sure to do much +easier (which is why many publishers and agents still insist on +typewritten, double-spaced copy). +</p> + +<p> +When J. Blow stops re-writing and decides to print off a final, +typeset copy of his work for the world to see, he need only make two +changes to the (simplified) setup: +<br/> +<span class="pre-in-pp"> + .TITLE "My Pulitzer Winner" + .AUTHOR "Joe Blow" + .DRAFT 7 + .REVISION 39 + \# + .PRINTSTYLE TYPESET \"first change + .COPYSTYLE FINAL \"second change + \# + .START +</span> +In the above, <kbd>.DRAFT 7, .REVISION 39,</kbd> and +<kbd>.COPYSTYLE FINAL</kbd> are actually superfluous. The draft +and revision numbers aren’t used when COPYSTYLE is FINAL, +and <b>COPYSTYLE FINAL</b> is mom’s default unless you tell +her otherwise. +</p> + +<p> +But... to judge from the number of drafts already, +J. Blow may very well decide his “final” version still +isn’t up to snuff. Hence, he might as well leave in the +superfluous macros. That way, when draft 7, rev. 62 becomes draft +8, rev. 1, he’ll be ready to tackle his Pulitzer winner again. +</p> +</div> + +<div class="rule-short"><hr/></div> + +<!-- ======================================================================== --> + +<h2 id="reference-macros" class="macro-group">The reference macros (metadata)</h2> + +<p> +The reference macros give mom the metadata she needs to generate +<a href="definitions.html#docheader">docheaders</a>, +<a href="definitions.html#header">page headers</a>, +and +<a href="cover.html#cover-top">covers</a>. +They must go at the top of any file that uses mom’s document +processing macros. +</p> + +<div class="macro-list-container"> +<h3 id="index-reference" class="macro-list">Reference macros</h3> + +<ul class="macro-list"> + <li><a href="#title">TITLE</a> – title of a story, article, etc</li> + <li><a href="#doc-title">DOCTITLE</a> – title of a book, or any collated document</li> + <li><a href="#subtitle">SUBTITLE</a></li> + <li><a href="#author">AUTHOR</a></li> + <li><a href="#chapter">CHAPTER</a> – the chapter number + <ul> + <li class="sublist"><a href="#chapter-string">CHAPTER_STRING</a> – “Chapter”, “CHAPTER”, “Chapître”, etc</li> + </ul></li> + <li><a href="#chapter-title">CHAPTER_TITLE</a></li> + <li><a href="#draft">DRAFT</a> + <ul> + <li class="sublist"><a href="#draft-string">DRAFT_STRING</a> – “Draft”, “DRAFT”, “Jet”, etc</li> + </ul></li> + <li><a href="#revision">REVISION</a> + <ul> + <li class="sublist"><a href="#revision-string">REVISION_STRING</a> – “Revision”, “Rev.”, “Révision”, etc</li> + </ul></li> + <li><a href="#copyright">COPYRIGHT</a></li> + <li><a href="#misc">MISC</a></li> + <li><a href="#covertitle">COVERTITLE</a> – frontispiece, title page, etc</li> + <li><a href="#doc-covertitle">DOC_COVERTITLE</a> – book cover, collated document cover, etc</li> + <li><a href="#pdftitle">PDF_TITLE</a> – window title for PDF viewers</li> + <li><a href="#toc-heading">TOC_HEADING</a> – single, non-pagenumbered line of text in table of contents</li> +</ul> +</div> + +<!-- -TITLE- --> + +<div class="macro-id-overline"> +<h3 id="title" class="macro-id">TITLE</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>TITLE</b> <kbd class="macro-args">[COVER | DOC_COVER] "<title string>" ["<2nd line>" ["<3rd line>" ... ] ]</kbd> +</div> +<p class="requires"> +• Arguments must be enclosed in double-quotes +</p> + +<p> +The title string can be caps or caps/lower-case; it’s up to you. In +<a href="#printstyle">PRINTSTYLE TYPESET</a>, +the title will appear in the +<a href="definitions.html#docheader">docheader</a> +exactly as you typed it. However, mom converts the title to all +caps in +<a href="definitions.html#header">page headers</a> +unless you turn that feature off (see +<a href="headfootpage.html#_caps">HEADER_<POSITION>_CAPS</a>). +In +<a href="#printstyle">PRINTSTYLE TYPEWRITE</a>, +the title always gets converted to caps. +</p> + +<p> +TITLE accepts multiple arguments, each surrounded by double-quotes. +Each argument is printed on a separate line, permitting you to +create multi-line titles in your docheaders. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If your <kbd><a href="#doctype">DOCTYPE</a></kbd> is CHAPTER, TITLE +should be the title of the opus, not “CHAPTER whatever”. +</p> +</div> + +<p> +If the optional argument, <kbd>COVER</kbd> or <kbd>DOC_COVER</kbd>, +is given to TITLE, the remaining string arguments represent the +title that will appear on cover or document cover pages (see the +<a href="cover.html#cover-intro">Introduction to cover pages</a> +for a description of the difference between “document +covers” and “covers”). Thus, it is possible +to have differing titles appear on the document cover, the cover +(“title”) page, and in the document header. For +example, +<br/> +<span class="pre-in-pp"> + .TITLE DOC_COVER "Collected Essays" + .TITLE COVER "The Meming of Meaning" + .TITLE "LOL Cat Corruption" + .AUTHOR "D. Rawkins" + .DOC_COVER TITLE AUTHOR + .COVER TITLE + .START +</span> +creates a document cover with “Collected Essays” and the +author, a cover page with “The Meming of Meaning”, +and a docheader title, “LOL Cat Corruption” at the top +of the essay. +</p> + +<p> +Alternatively, you can use the macros +<a href="#doc-covertitle">DOC_COVERTITLE</a> +and +<a href="#covertitle">COVERTITLE</a> +to accomplish the same thing. +</p> + +<h4 id="no-toc-entry" class="docs">Table of Contents exceptions</h4> +<p> +Except for standalone documents (i.e. non-collated documents such +as essays), the TITLE string appears as an entry in the Table of +Contents. If you would like a document section not to appear in the +Table of Contents (e.g. the copyright page), invoke the macro +<kbd>.NO_TOC_ENTRY</kbd> after <kbd>.TITLE</kbd>. +</p> + + +<!-- -DOCTITLE- --> + +<div class="macro-id-overline"> +<h3 id="doc-title" class="macro-id">DOCUMENT TITLE</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>DOCTITLE</b> <kbd class="macro-args">"<overall document title>" ["<2nd line>" ["<3rd line>" ... ] ]</kbd> +</div> +<p class="requires"> +• Arguments must be enclosed in double-quotes +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +This macro should be used only if your <a +href="#doctype">DOCTYPE</a> is <kbd>DEFAULT</kbd> (which is +mom’s default). If your DOCTYPE is CHAPTER, use +<a href="#title">TITLE</a> +to set the overall document title for cover pages, document cover +pages, and page headers or footers. +</p> +</div> + +<p style="margin-top: -.5em;"> +When you’re creating a single document, say, an essay or a +short story, you have no need of this macro. +<a href="#title">TITLE</a> +takes care of all your title needs. +</p> + +<p> +However if you’re +<a href="rectoverso.html#collate">collating</a> +a bunch of documents together, say, to print out a report containing +many articles with different titles, or a book of short stories with +different authors, you need DOCTITLE. +</p> + +<p> +DOCTITLE tells mom the title of the complete document (as opposed to +the title of each article or entitled section), and appears +</p> + +<ol style="list-style-type: lower-alpha"> + <li>as the window title in PDF viewers (e.g. Okular or Evince)</li> + <li>in the initial rightmost position of page headers in the document</li> +</ol> + +<p> +Moreover, DOCTITLE does not appear in the +<a href="definitions.html#pdfoutline">PDF outline</a>, +as its presence in window title would make it redundant. +</p> + +<p> +The doctitle string can be caps or caps/lower-case; it’s up to +you. In +<a href="#printstyle">PRINTSTYLE TYPESET</a>, +by default, the doctitle in +<a href="definitions.html#header">page headers</a> +is all in caps, unless you turn that feature off (see +<a href="headfootpage.html#_caps">HEADER_<POSITION>_CAPS</a>). +In +<a href="#printstyle">PRINTSTYLE TYPEWRITE</a>, +the doctitle always gets converted to caps. +</p> + +<p> +DOCTITLE accepts multiple arguments, each surrounded +by double-quotes. Each argument is printed on a separate line, +permitting you to create multi-line document titles for use on +<a href="cover.html#cover">Covers</a> +and/or +<a href="cover.html#doc-cover">Doc covers</a>. +</p> + +<!-- -SUBTITLE- --> + +<div class="macro-id-overline"> +<h3 id="subtitle" class="macro-id">SUBTITLE</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>SUBTITLE</b> <kbd class="macro-args">[COVER | DOC_COVER] "<subtitle>" ["<2nd line>" ["<3rd line>" ... ] ]</kbd> +</div> +<p class="requires"> +• String arguments must be enclosed in double-quotes +</p> + +<p> +The subtitle string can be caps or caps/lower-case. I recommend +caps/lower case. +</p> + +<p> +SUBTITLE accepts multiple arguments, each surrounded +by double-quotes. Each argument is printed on a separate line, +permitting you to create multi-line subtitles. +</p> + +<p> +If the optional argument, <kbd>COVER</kbd> or <kbd>DOC_COVER</kbd>, +is given to SUBTITLE, the remaining string +arguments represent the subtitle that will appear on cover or +document cover pages (see the +<a href="cover.html#cover-intro">Introduction to cover pages</a> +for a description of the difference between “document +covers” and “covers”). Thus, it is possible to have +differing subtitles appear on the document cover, the cover +(“title”) page, and in the document header. An extreme +example would be: +<br/> +<span class="pre-in-pp"> + .SUBTITLE "The Docheader Subtitle" + .SUBTITLE DOC_COVER "The Document Cover Subtitle" + .SUBTITLE COVER "The Cover Subtitle" +</span> +The first invocation of <kbd>.SUBTITLE</kbd> establishes the +subtitle that appears in the docheader at the top of the first page +of a document. The second invocation establishes the subtitle that +appears on the document cover; the third establishes the subtitle +that appears on the cover (“title”) page. +</p> + +<p> +If you don’t require differing subtitles for doc cover and cover +pages, <kbd>.SUBTITLE</kbd>, without the optional first argument, is +sufficient, provided you give the word, <kbd>SUBTITLE</kbd>, as an +argument to the macro +<a href="cover.html#doc-cover">DOC_COVER</a> +or +<a href="cover.html#cover">COVER</a> +</p> + +<!-- -AUTHOR- --> + +<div class="macro-id-overline"> +<h3 id="author" class="macro-id">AUTHOR</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>AUTHOR</b> <kbd class="macro-args">[COVER | DOC_COVER] "<author>" [ "<author2>" ["<author3>" ... ] ]</kbd> +</div> + +<p class="alias" style="margin-bottom: 0;"> +<i>Alias:</i> <b>EDITOR</b> +</p> +<p class="requires"> +• String arguments must be enclosed in double-quotes +</p> + +<p> +Each author string can hold as many names as you like, e.g. +<br/> +<span class="pre-in-pp" style="margin-bottom: -1em;"> + .AUTHOR "Joe Blow" +</span> +or +<br/> +<span class="pre-in-pp" style="margin-top: -.5em;"> + .AUTHOR "Joe Blow, Jane Doe" "John Hancock" +</span> +Mom prints each string that’s enclosed in double-quotes on a +separate line in the +<a href="definitions.html#docheader">docheader</a>, +however only the first string appears in +<a href="definitions.html#header">page headers</a>. +If you want mom to put something else in the author part of page +headers (say, just the last names of a document’s two +authors), redefine the appropriate part of the header (see +<a href="headfootpage.html#header-control">header/footer control</a>). +</p> + +<p> +The strings can be caps or caps/lower-case. I recommend caps/lower +case. +</p> + +<p> +If the optional argument, <kbd>COVER</kbd> or <kbd>DOC_COVER</kbd>, +is given to AUTHOR, the remaining string arguments represent the +author(s) that will appear on cover or document cover pages (see the +<a href="cover.html#cover-intro">Introduction to cover pages</a> +for a description of the difference between “document +covers” and “covers”). Thus, it is possible +to have differing authors on the document cover, the cover +(“title”) page, in the document first-page header and +subsequent page headers/footers. An example might be: +<br/> +<span class="pre-in-pp"> + .AUTHOR "Joe Blow" + .EDITOR DOC_COVER "John Smith" "and" "Jane Doe" \" EDITOR is an alias for AUTHOR + .AUTHOR COVER "Joe Blow" "(assisted by Jane Doe)" +</span> +The first invocation of <kbd>.AUTHOR</kbd> establishes the author +that appears in the docheader at the top of the first page of +a document and in subsequent page headers/footers. The second +invocation establishes the authors (editors, in this instance) that +appear on the document cover; the third establishes the author(s) +that appear(s) on the cover (“title”) page. +</p> + +<p> +If you don’t require differing authors for doc cover and cover +pages, <kbd>.AUTHOR</kbd>, without the optional first argument, is +sufficient, provided you give the word, <kbd>AUTHOR</kbd> as an +argument to the macro +<a href="cover.html#doc-cover">DOC_COVER</a> +or +<a href="cover.html#cover">COVER</a> +</p> + +<!-- -CHAPTER- --> + +<div class="macro-id-overline"> +<h3 id="chapter" class="macro-id">CHAPTER</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>CHAPTER</b> <kbd class="macro-args"><chapter number></kbd> +</div> + +<p> +The chapter number can be in any form you like—a digit, a roman +numeral, a word. If you choose +<a href="#doctype">DOCTYPE CHAPTER</a>, +mom prints whatever argument you pass CHAPTER beside the word, +“Chapter”, as a single line +<a href="definitions.html#docheader">docheader</a>. +She also puts the same thing in the middle of +<a href="definitions.html#header">page headers</a>. +</p> + +<p> +Please note that if your argument to CHAPTER runs to more than one +word, you must enclose the argument in double-quotes. +</p> + +<p> +If you’re not using DOCTYPE CHAPTER, the macro can +be used to identify any document as a chapter <i>for the purpose of +prepending a chapter number to numbered head elements</i>, provided +you pass it a +<a href="definitions.html#numericargument">numeric argument</a>. +See +<a href="docelement.html#prefix-chapter-number">PREFIX_CHAPTER_NUMBER</a>. +</p> + +<!-- -CHAPTER_STRING- --> + +<h3 id="chapter-string" class="docs">Chapter string</h3> + +<p> +If you’re not writing in English, you can ask mom to use the +word for “chapter” in your own language by telling her +what it is with the CHAPTER_STRING macro, like this: +<br/> +<span class="pre"> + .CHAPTER_STRING "Chapître" +</span> +</p> + +<p> +If you would like a blank chapter string, i.e., you’d like the +chapter number to appear without “Chapter” beforehand, +enter <kbd>.CHAPTER_STRING "\&"</kbd>. +</p> + +<!-- -CHAPTER_TITLE- --> + +<div class="macro-id-overline"> +<h3 id="chapter-title" class="macro-id">CHAPTER_TITLE</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>CHAPTER_TITLE</b> <kbd class="macro-args">"<chapter title>" ["<2nd line>" ["<3rd line>" ... ] ]</kbd> +</div> +<p class="requires"> +• Arguments must be enclosed in double-quotes +</p> + +<p> +If, either in addition to or instead of “Chapter +<n>” appearing at the top of chapters, you want your +chapter to have a title, use CHAPTER_TITLE, with your title enclosed +in double-quotes, like this: +<br/> +<span class="pre"> + .CHAPTER_TITLE "The DMCA Nazis" +</span> +</p> + +<p> +CHAPTER_TITLE accepts multiple arguments, each surrounded by +double-quotes. Each argument is printed on a separate line, +permitting you to create multi-line chapter titles in your +docheaders. +</p> + +<p> +If you’ve used +<a href="#chapter">CHAPTER</a> +to give the chapter a number, both “Chapter <n>” +and the chapter title will appear at the top of the chapter, like +this: +<br/> +<span class="pre-in-pp"> + Chapter 1 + The DMCA Nazis +</span> +In such a case, by default, only the chapter’s title will appear in +the +<a href="definitions.html#header">page headers</a>, +not “Chapter <n>”. +</p> + +<p> +If you omit CHAPTER when setting up your reference macros, only the +title will appear, both at the top of page one and in subsequent +page headers. +</p> + +<p> +The style of the chapter title can be altered by +<a href="docelement.html#docelement-control">control macros</a>, +e.g. CHAPTER_TITLE_FAMILY, CHAPTER_TITLE_FONT, etc. The default +family, font and point size are Times Roman, Bold Italic, 4 points +larger than +<a href="definitions.html#running">running text</a>. +</p> + +<!-- -DRAFT- --> + +<div class="macro-id-overline"> +<h3 id="draft" class="macro-id">DRAFT</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>DRAFT</b> <kbd class="macro-args"><draft number></kbd> +</div> + +<p> +DRAFT only gets used with +<a href="#copystyle">COPYSTYLE DRAFT</a>. +If the COPYSTYLE is FINAL (the default), mom ignores DRAFT. DRAFT +accepts both alphabetic and numeric arguments, hence it’s +possible to do either +<br/> +<span class="pre"> + .DRAFT 2 + or + .DRAFT Two +</span> +</p> + +<p> +Mom prints the argument to <kbd>.DRAFT</kbd> (i.e. the draft number) +beside the word “Draft” in the middle part of +<a href="definitions.html#header">page headers</a>. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">A small word of caution:</span> +If your argument to <kbd>.DRAFT</kbd> is more than one word long, +you must enclose the argument in double-quotes. +</p> +</div> + +<p> +You may, if you wish, invoke <kbd>.DRAFT</kbd> without an +argument, in which case, no draft number will be printed beside +“Draft” in headers or footers. +</p> + +<!-- -DRAFT_STRING- --> + +<h3 id="draft-string" class="docs">The draft string</h3> + +<p> +If you’re not writing in English, you can ask mom +to use the word for “draft” in your own language by +telling her what it is with the DRAFT_STRING macro, +like this: +<br/> +<span class="pre"> + .DRAFT_STRING "Jet" +</span> +</p> + +<p> +Equally, DRAFT_STRING can be used to roll your own solution to +something other than the word “Draft.” For example, you +might want “Trial run alpha-three” to appear in the +headers of a draft version. You’d accomplish this by doing +<br/> +<span class="pre"> + .DRAFT alpha-three + .DRAFT_STRING "Trial run" +</span> +</p> + +<p> +If you wanted only “Trial run” to appear, entering +<kbd>.DRAFT</kbd> without an argument as well as +<kbd>.DRAFT_STRING "Trial run"</kbd> is how you’d do it. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If you define both a blank <kbd>.DRAFT</kbd> and a blank +<kbd>.DRAFT_STRING</kbd>, mom skips the draft field in headers +entirely. If this is what you want, this is also the only way +to do it. Simply omitting invocations of <kbd>.DRAFT</kbd> and +<kbd>.DRAFT_STRING</kbd> will result in mom using her default, which +is to print “Draft <number>”. +</p> +</div> + +<!-- -REVISION- --> + +<div class="macro-id-overline"> +<h3 id="revision" class="macro-id">REVISION</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>REVISION</b> <kbd class="macro-args"><revision number></kbd> +</div> + +<p> +REVISION only gets used with +<a href="#copystyle">COPYSTYLE DRAFT</a>. +If the COPYSTYLE is FINAL (the default), mom ignores the REVISION +macro. REVISION accepts both alphabetic and numeric arguments, hence +it’s possible to do either +<br/> +<span class="pre" style="margin-bottom: -1em;"> + .REVISION 2 +</span> +or +<span class="pre" style="margin-top: -.5em;"> + .REVISION Two +</span> +</p> + +<p> +Mom prints the revision number beside the shortform +“Rev.” in the middle part of +<a href="definitions.html#header">page headers</a>. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">A small word of caution:</span> +If your argument to <kbd>.REVISION</kbd> is more than one word long, +you must enclose the argument in double-quotes. +</p> +</div> + +<p> +You may, if you wish, invoke <kbd>.REVISION</kbd> without an +argument, in which case, no revision number will be printed beside +“Rev.” in headers or footers. +</p> + +<!-- -REVISION_STRING- --> + +<h3 id="revision-string" class="docs">The revision string</h3> + +<p> +If you’re not writing in English, you can ask mom +to use the word for “revision,” or a shortform +thereof, in your own language by telling her what it is with the +REVISION_STRING macro, like this: +<br/> +<span class="pre"> + .REVISION_STRING "Rév." +</span> +</p> + +<p> +Additionally, you may sometimes want to make use of mom’s +<a href="#copystyle">COPYSTYLE DRAFT</a> +but not actually require any draft information. For example, +you might like mom to indicate only the revision number of +your document. The way to do that is to define an empty +<kbd>.DRAFT</kbd> and <kbd>.DRAFT_STRING</kbd> in addition to +<kbd>.REVISION</kbd>, like this: +<br/> +<span class="pre"> + .DRAFT + .DRAFT_STRING + .REVISION 2 +</span> +</p> + +<p> +Equally, if you want to roll your own solution to what revision +information appears in headers, you could do something like this: +<br/> +<span class="pre"> + .DRAFT + .DRAFT_STRING + .REVISION "two-twenty-two" + .REVISION_STRING "Revision" +</span> +</p> + +<p> +The above, naturally, has no draft information. If you want to roll +your own <kbd>.DRAFT</kbd> and/or <kbd>.DRAFT_STRING</kbd> as well, +simply supply arguments to either or both. +</p> + +<!-- -COPYRIGHT- --> + +<div class="macro-id-overline"> +<h3 id="copyright" class="macro-id">COPYRIGHT</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>COPYRIGHT</b> <kbd class="macro-args">[COVER | DOC_COVER] "<copyright info>"</kbd> +</div> + +<p class="requires"> +• Argument must be enclosed in double-quotes +</p> + +<p> +The required argument to COPYRIGHT is only used on cover or doc cover +pages, and then only if the argument COPYRIGHT is passed to +<a href="cover.html#cover">COVER</a> +or +<a href="cover.html#doc-cover">DOC_COVER</a>. +Do not include the copyright symbol in the argument passed to +COPYRIGHT; mom puts it in for you. +</p> + +<p> +The optional argument, <kbd>COVER</kbd> or <kbd>DOC_COVER</kbd>, +should only be used if you have both a doc cover and a cover and want +differing copyright information on each (see the +<a href="cover.html#cover-intro">Introduction to cover pages</a> +for a description of the difference between “document +covers” and “covers”). Thus, it is possible to +have differing copyright information on the document cover and on +the cover (“title”) page. An example might be: +<br/> +<span class="pre-in-pp"> + .COPYRIGHT DOC_COVER "2010 John Smith and Jane Doe" + .COPYRIGHT COVER "2008 Joe Blow" +</span> +The first invocation of <kbd>.COPYRIGHT</kbd> establishes the +copyright information that appears on the document cover; the second +establishes the copyright information that appears on the cover +(“title”) page. +</p> + +<p> +If you don’t require differing copyright information for +doc cover and cover pages, <kbd>.COPYRIGHT</kbd>, without the +optional first argument, is sufficient, provided you give the word, +<kbd>COPYRIGHT</kbd>, as an argument to the macro +<a href="cover.html#doc-cover">DOC_COVER</a> +or +<a href="cover.html#cover">COVER</a> +</p> + +<p> +Style parameters for the copyright line may be +entered as individual macros or +<a href="docelement.html#grouping">grouped</a>, +e.g. +<br/> +<span class="pre-in-pp"> + .COPYRIGHT_FAMILY H + .COPYRIGHT_FONT R + .COPYRIGHT_SIZE -2 +</span> +or +<br/> +<span class="pre-in-pp"> + .COPYRIGHT_STYLE \ + FAMILY H \ + FONT R \ + SIZE -2 +</span> +The vertical position of the copyright line may be raised (-) or +lowered (+) with the macro COPYRIGHT_V_ADJUST. For example, to +raise the copyright line by 3 +<a href="definitions.html#picaspoints">points</a>, you’d do +<br/> +<span class="pre-in-pp"> + .COPYRIGHT_V_ADJUST -3p +</span> +Alternatively, the COPYRIGHT_STYLE macro may be used with the +argument <kbd>V_ADJUST</kbd>: +<span class="pre-in-pp"> + .COPYRIGHT_STYLE \ + FAMILY H \ + FONT R \ + SIZE -2 \ + V_ADJUST -3p +</span> +</p> + +<!-- -MISC- --> + +<div class="macro-id-overline"> +<h3 id="misc" class="macro-id">MISC</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>MISC</b> <kbd class="macro-args">[COVER | DOC_COVER] "<argument 1>" ["<argument 2>" "<argument 3>" ...]</kbd> +</div> + +<p class="requires"> +• String arguments must be enclosed in double-quotes +</p> + +<p> +The argument(s) passed to MISC are only used on cover or doc cover +pages, and then only if the argument <kbd>MISC</kbd> is passed to +<a href="cover.html#cover">COVER</a> +or +<a href="cover.html#doc-cover">DOC_COVER</a>. +MISC can contain any information you like. Each argument appears on +a separate line at the bottom of the cover or doc cover page. +</p> + +<p> +For example, if you’re submitting an essay where the prof has +requested that you include the course number, his name and the date, +you could do +<br/> +<span class="pre-in-pp"> + .MISC "Music History 101" "Professor Hasbeen" "Dec. 24, 2010" +</span> +and the information would appear on the essay’s cover page. +</p> + +<p> +If the optional argument, <kbd>COVER</kbd> or <kbd>DOC_COVER</kbd>, +is given to MISC, the string arguments represent the miscellaneous +information that will appear on cover or document cover pages (see +the +<a href="cover.html#cover-intro">Introduction to cover pages</a> +for a description of the difference between “document +covers” and “covers”). Thus, it is possible to +have differing miscellaneous information on the document cover and +on the cover (“title”) page. An example might be: +<br/> +<span class="pre"> + .MISC DOC_COVER "Music History 101" "Professor Hasbeen" + .MISC COVER "Spring Term Paper" +</span> +</p> + +<p> +The first invocation of <kbd>.MISC</kbd> establishes the +miscellaneous information that appears on the document cover; the +second establishes the miscellaneous information that appears on the +cover (“title”) page. +</p> + +<p> +If you don’t require differing miscellaneous information +for doc cover and cover pages, <kbd>.MISC</kbd>, without the +optional first argument, is sufficient, provided you give the word +“MISC” as an argument to the macro +<a href="cover.html#doc-cover">DOC_COVER</a> +or +<a href="cover.html#cover">COVER</a> +</p> + +<!-- -COVER_TITLE- --> + +<div class="macro-id-overline"> +<h3 class="macro-id">COVERTITLE & DOC_COVERTITLE</h3> +</div> + +<div id="covertitle" class="box-macro-args"> +Macro: <b>COVERTITLE</b> <kbd class="macro-args">"<user defined cover page title>" ["<2nd line>" ["<3rd line>" ... ] ]</kbd> +</div> +<p class="requires"> +• Arguments must be enclosed in double-quotes +</p> + +<div id="doc-covertitle" class="box-macro-args"> +Macro: <b>DOC_COVERTITLE</b> <kbd class="macro-args">"<user defined document cover page title>" ["<2nd line>" ["<3rd line>" ... ] ]</kbd> +</div> +<p class="requires"> +• Arguments must be enclosed in double-quotes +</p> + +<p> +The arguments passed to COVERTITLE or DOC_COVERTITLE are only +used on cover or doc cover pages, and then only if the argument +<kbd>COVERTITLE</kbd> or <kbd>DOC_COVERTITLE</kbd> is explicitly +passed to +<a href="cover.html#cover">COVER</a> +or +<a href="cover.html#doc-cover">DOC_COVER</a>. +</p> + +<p> +COVERTITLE and DOC_COVERTITLE accept multiple arguments, each +surrounded by double-quotes. Each argument is printed on a separate +line, permitting you to create multi-line titles on your cover +and/or doc cover pages. +</p> + +<p> +You only require COVERTITLE or DOC_COVERTITLE if they differ from +TITLE. Note that +<a href="#title">TITLE</a> +itself has two optional arguments that accomplish the same thing. +</p> + +<div class="macro-id-overline"> +<h3 class="macro-id">PDF Title</h3> +</div> + +<div id="pdftitle" class="box-macro-args"> +Macro: <b>PDF_TITLE</b> <kbd class="macro-args">"<pdf viewer window title>"</kbd> +</div> +<p class="requires"> +• Argument must be enclosed in double-quotes +</p> + +<p> +Except for +<a href="#doc-title">DOCTITLE</a>, +mom does not, by default, provide PDF viewers with a document title. +You may set one, if you like, with PDF_TITLE. +</p> + +<div class="macro-id-overline"> +<h3 class="macro-id">TOC heading</h3> +</div> + +<div id="toc-heading" class="box-macro-args"> +Macro: <b>TOC_HEADING</b> <kbd class="macro-args">"<single line TOC heading>"</kbd> +</div> +<p class="requires"> +• Argument must be enclosed in double-quotes +</p> + +<p> +Mom generates tables of contents automatically (see +<a href="tables-of-contents.html#toc">TOC</a>). +You may sometimes want to insert a line of text into the table of +contents without it referring to a page number, for example to +identify a “Part I” and a “Part II.” +</p> + +<p> +Placed before any instance of +<a href="#start">START,</a> +TOC_HEADING inserts its text into the table of contents with a +modest amount of whitespace around it to distinguish it easily +from table of contents entries. +</p> + +<p> +The appearance of the heading may be controlled with +the macro +<a href="#toc-heading-style">TOC_HEADING_STYLE</a>. +</p> + +<div id="toc-heading-style" class="box-macro-args"> +Macro: <b>TOC_HEADING_STYLE</b> <kbd class="macro-args">"<arguments>"</kbd> +</div> + +<p> +TOC_HEADING_STYLE controls the look of TOC headings. It is a +<a href="docelement.html#grouping">“grouping”</a> +style macro with multiple arguments. It is recommended that +you use the backslash character to separate them into individual +lines rather than entering a single, very long line. +</p> + +<p> +TOC_HEADING_STYLE accepts as many or as few arguments as you need: +<span class="pre-in-pp"> + FAMILY <family> \ + FONT <font> \ + SIZE <+|-n> \ + COLOR <colorname>* \ + QUAD L | C | R \ + SPACE_ABOVE <n>** \ + SPACE_BENEATH <n>** +</span> + * <kbd>COLOR</kbd> must be pre-initialized with +<a href="color.html#newcolor">NEWCOLOR</a> +or +<a href="color.html#xcolor">XCOLOR</a>. +<br/> +** <kbd>SPACE_ABOVE</kbd> and <kbd>SPACE_BENEATH</kbd> require a +<a href="definitions.html#unitofmeasure">unit of measure</a> +to be appended to their numeric argument. +</p> + +<p> +For example, if you want your TOC headings to be bold, slightly +larger than the rest of the table of contents, centred, and with +one linespace beforehand, +<span class="pre-in-pp"> + FONT B \ + SIZE +.5 \ + QUAD C \ + SPACE_ABOVE 1v +</span> +</p> + +<p> + See +<a href="docelement.html#control-macro-args">Arguments to the control macros</a> +for further information about the arguments. Note that +<kbd>SPACE_ABOVE</kbd> and <kbd>SPACE_BENEATH</kbd> are unique to +TOC_HEADING_STYLE. + +</p> + +<div class="rule-short"><hr/></div> + +<!-- ======================================================================== --> + +<h2 id="docstyle-macros" class="macro-group">The docstyle macros</h2> + +<p> +The docstyle macros tell mom what type of document you’re +writing, whether you want the output typeset or “typewritten, +double-spaced”, and whether you want a draft copy (with draft +and revision information in the headers) or a final copy. +</p> + +<div class="macro-list-container"> +<h3 id="index-docstyle" class="macro-list">Docstyle macros</h3> +<ul class="macro-list"> + <li><a href="#doctype">DOCTYPE</a></li> + <li><a href="#printstyle">PRINTSTYLE</a> – non-optional macro required for document processing + <ul style="margin-left: -.5em; list-style-type: disc;"> + <li><a href="#typeset-defaults">Defaults for PRINTSTYLE TYPESET</a></li> + <li><a href="#typewrite-defaults">Defaults for PRINTSTYLE TYPEWRITE</a> + <ul style="margin-left: -.5em; list-style-type: circle;"> + <li><a href="#typewrite-control">PRINTSTYLE TYPEWRITE control macros</a> + <ul style="margin-left: -1.5em; list-style-type: square;"> + <li><a href="#typewriter-family">Family</a></li> + <li><a href="#typewriter-size">Point size</a></li> + <li><a href="#typewriter-underlining">Underlining of italics</a></li> + </ul></li> + </ul></li> + </ul></li> + <li><a href="#copystyle">COPYSTYLE</a></li> +</ul> +</div> + +<!-- -DOCTYPE- --> + +<div class="macro-id-overline"> +<h3 id="doctype" class="macro-id">DOCTYPE</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>DOCTYPE</b> <kbd class="macro-args">DEFAULT | CHAPTER | NAMED "<name>" | LETTER | SLIDES</kbd> +</div> + +<p> +The arguments <kbd>DEFAULT,</kbd> <kbd>CHAPTER</kbd> and +<kbd>NAMED</kbd> tell mom what to put in the +<a href="definitions.html#docheader">docheader</a> +and +<a href="definitions.html#header">page headers</a>. +<kbd>LETTER</kbd> and <kbd>SLIDES</kbd> tells her you want to write +a letter or create slides. +</p> + +<p> +Mom’s default DOCTYPE is <kbd>DEFAULT</kbd>. If that’s +what you want, you don’t have to give a DOCTYPE command. +</p> + +<p id="default-doctype"> +<kbd>DEFAULT</kbd> prints a +<a href="definitions.html#docheader">docheader</a> +containing the title, subtitle and author information given to the +<a href="#reference-macros">reference macros</a>, +and page headers with the author and title. (See +<a href="headfootpage.html#header-style">Default specs for headers</a> +for how mom outputs each part of the page header.) +</p> + +<p> +<kbd>CHAPTER</kbd> prints “Chapter <n>” in place +of a +<a href="definitions.html#docheader">docheader</a> +(<n> is what you gave to the +<a href="#reference-macros">reference macro</a>, +<kbd><a href="#chapter">CHAPTER</a></kbd>). +If you give the chapter a title with +<a href="#chapter-title">CHAPTER_TITLE</a>, +mom prints “Chapter <n>” and the +title underneath. If you omit the +<a href="#chapter">CHAPTER</a> +reference macro but supply a +<a href="#chapter-title">CHAPTER_TITLE</a>, +mom prints only the chapter title. +</p> + +<p> +The page headers in DOCTYPE <kbd>CHAPTER</kbd> contain the author, +the title of the book (which you gave with +<a href="#title">TITLE</a>), +and “Chapter <n>” (or the chapter title). See +<a href="headfootpage.html#header-style">Default Specs for Headers</a> +for mom’s default type parameters for each part of +the page header. +</p> + +<p> +<kbd>NAMED</kbd> takes an additional argument: a name for this +particular kind of document (e.g. outline, synopsis, abstract, +memorandum), enclosed in double-quotes. <kbd>NAMED</kbd> is +identical to <kbd>DEFAULT</kbd> except that mom prints the argument +to <kbd>NAMED</kbd> beneath the +<a href="definitions.html#docheader">docheader</a>, +as well as in page headers. +(See +<a href="headfootpage.html#header-style">Default specs for headers</a> +for how mom outputs each part of the page header.) +</p> + +<div class="box-tip"> +<p id="doctype-note" class="tip"> +<span class="note">Note: version 2.1 change</span> +<br/> +<kbd>DOCTYPE NAMED "string"</kbd> no longer accepts a colour +argument after <kbd>"string"</kbd>. Setting the colour +of the string is now done with <kbd><span class="nobr">DOCTYPE_COLOR +<color></span></kbd>. Default underscoring of +<kbd>"string"</kbd> in the docheader and on covers +has been removed. Use <kbd>DOCTYPE_UNDERSCORE</kbd>, +<kbd>DOC_COVER_DOCTYPE_UNDERSCORE</kbd> and/or +<kbd>COVER_DOCTYPE_UNDERSCORE</kbd> to re-enable it. All three take +the same arguments listed in the +<a href="docelement.html#underscore">Underscore style, rule weight</a> +section of +<a href="docelement.html#control-macro-args">Arguments to the control macros</a>. +</p> +</div> + +<p> +<kbd>LETTER</kbd> tells mom you’re writing a letter. See the +section +<a href="letters.html#letters">Writing Letters</a> +for instructions on using mom to format letters. +</p> + +<h4 id="slides" class="docs" style="font-size: 100%; text-transform: uppercase">Slides</h4> + +<p> +PDF slides are a special kind of mom document, formatted for viewing +in a PDF reader’s presentation mode. In most respects, they +behave identically to the other document types. Key differences +are: +</p> +<ul style="margin-top: -.5em"> +<li>headers, footers, and pagination are disabled by default</li> +<li>type is set +<a href="typesetting.html#quad">QUAD CENTER</a> +by default</li> +<li> +<a href="#flex">flex-spacing</a> +and +<a href="#shim">shimming</a> +are disabled by default; shimming may +be re-enabled (with <kbd>NO_SHIM OFF</kbd>), but not flex-spacing</li> +<li>there’s no need for +<a href="#printstyle">PRINTSTYLE</a></li> +</ul> + +<p> +DOCTYPE SLIDES takes up to five optional arguments, which come +immediately after SLIDES. They may be entered in any order. +<br/> +<span class="pre-in-pp"> + DOCTYPE SLIDES \ + ASPECT 4:3 | 16:9 \ + HEADER "left" "centre" "right" \ + FOOTER "left" "centre" "right" \ + TRANSITION "<slide transition effect>" (mode + parameters) \ + PAUSE "<text reveal effect>" (mode + parameters) +</span> +For convenience, you many want to enter each argument on a single +line as shown above; all but the last must be terminated by a +backslash. +</p> + +<h5 class="docs" style="margin-top: .5em">Aspect</h5> + +<p> +Slides can be formatted for one of two aspect ratios common to +monitors and screens: 4:3 and 16:9. The default is 16:9. +<span class="pre-in-pp"> + 4:3 16:9 + media size: 11" x 8.25" media size: 11" x 8.1875" + left/right margins: 36 points left/right margins: 36 points + top margin: 90 points top margin: 80 points + bottom margin: 84 points bottom margin: 72 points + base text size: 16 points base text size: 14 points + autoleading: 6 points, adjusted autoleading: 4 points, adjusted + (header/footer size: -3 points) (header/footer size: -2 points) +</span> +Note that both media sizes fit on either A4 or US LETTER papersizes. +</p> + +<h5 class="docs" style="margin-top: .5em">Headers, footers, and pagination</h5> + +<p> +If you want a header, footer, or both for your slides, pass SLIDES +the <kbd>HEADER</kbd> and/or <kbd>FOOTER</kbd> argument(s). Both +take three additional +<a href="definitions.html#stringargument">string arguments</a>, +which must be enclosed in double-quotes, defining the left, centre, +and right parts of the header/footer. Any parts you want left blank +should be entered as two double-quotes. For example, +<span class="pre-in-pp"> + HEADER "" "My slide presentation" "" +</span> +will result in a header with only the centre part. +</p> + +<p> +Normal pagination is disabled for slides. If you want your slides +numbered, the slide number must be given to one of the header/footer +parts with the +<a href="definitions.html#inlines">inline escape</a> +<br/> +<kbd><span class="nobr">\*[SLIDE#]</span></kbd>. For example: +<span class="pre-in-pp"> + HEADER "" "My slide presentation" "" \ + FOOTER "" "" "\*[SLIDE#]" +</span> +will give you a centred header with numbering at the bottom right of +the slide. +</p> + +<p> +The overall family, size, and colour of headers may be set with +HEADER_FAMILY, HEADER_SIZE, and HEADER_COLOR. If you request +FOOTERS, you may use the FOOTER_ equivalent of these macros. +If you request both headers and footers, use one or the other but +not both. For example, in a header/footer situation, HEADER_FAMILY +would determine the family for both headers and footers, but if you +attempted to do this +<span class="pre-in-pp"> + .HEADER_FAMILY T + .FOOTER_FAMILY H +</span> +FOOTER_FAMILY would take precedence, and your header family would be +“<kbd>H</kbd>”. +</p> + +<p> +All other formatting of individual header/footer parts must be +entered as inline escapes inside the double-quotes. If you want, +say, your headers to be red but your footer page numbering to be +black and two points larger, this is how you’d do it: +<span class="pre-in-pp"> + .HEADER_COLOR red + .DOCTYPE SLIDES \ + HEADER "" "My slide presentation" "" \ + FOOTER "" "" "\*[black]\*S[+2]\*[SLIDE#]\*S[-2]" +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Do not use mom’s +<a href="inlines.html#inline-size-mom"><kbd><span class="nobr">\*[SIZE ±n]</span></kbd></a> +inline escape to change point size in the strings +passed to HEADER or FOOTER. Prefer either mom’s +<kbd><span class="nobr">\*S[±n]</span></kbd> or groff’s +<kbd><span class="nobr">\s[±n]</span></kbd>. +</p> +</div> + +<h5 class="docs" style="margin-top: .5em">Transition</h5> + +<p> +“Transition” refers to how new slides appear during a +presentation. The official PDF specification lists a number of modes, +each with a choice of configurable parameters. Modes include Box, +Blinds, Wipe, Fade, and several others. Parameters include things +like duration, dimension, and direction. There are a total of +twelve modes; for each one there are from one to six configurable +parameters. Consult <kbd>man gropdf(1)</kbd> for a complete listing +of modes and parameters. +</p> + +<p> +If you pass SLIDES the <kbd>TRANSITION</kbd> argument, you must +at a minimum follow it with a mode. Afterwards, you may give as +many or as few parameters as you wish. Parameters are, in order, +<span class="pre-in-pp"> + 1. duration + 2. dimension + 3. motion + 4. direction + 5. scale + 6. bool +</span> +You don’t have to fill them all out. If you only need the +first three, that’s all you need to input. If you need the +first and third, enter the second as a period (dot), which is used +any time you want to leave a parameter at its current default or +when it isn’t applicable. For example, if you want a Box +transition that lasts 1 second, filling the screen from the centre +outwards, you’d enter +<span class="pre-in-pp"> + TRANSITION "Box 1 . O" +</span> +because Box does not take a “dimension” parameter but it +does take a motion parameter. +</p> + +<p> +Notice that the entire string (mode+parameters) must be enclosed in +double-quotes. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Not all PDF viewers support all modes. Any that are not supported +are replaced by the “R” mode, which simply replaces one +slide with the next unless the PDF viewer has a different default +transition mode. +</p> +</div> + +<h5 class="docs" style="margin-top: .5em">Pause</h5> + +<p> +A “pause” occurs when material on a slide is halted (see +<a href="#pause">PAUSE</a>), +awaiting a mouse click, PgDown, Next, or the spacebar to reveal +subsequent material. All the same modes and parameters as +<kbd>TRANSITION</kbd> may be used. The manner of entering them is +is identical, including that the entire mode+parameter string must +be enclosed in double-quotes. +</p> + +<div class="macro-id-overline"> +<h3 id="slide-macros" class="macro-id">SLIDE MACROS</h3> +</div> + +<div id="newslide" class="box-macro-args"> +Macro: <b>NEWSLIDE</b> <kbd class="macro-args">["<transition mode and parameters>"]</kbd> +</div> + +<p> +Unless you want material from one slide to flow onto the next, you +need to tell mom when to start a new slide with the macro NEWSLIDE. +Without any arguments, the new slide will appear with the default +TRANSITION you gave to DOCTYPE SLIDES. +</p> + +<p> +If you would like a different transition, you may pass NEWSLIDE a +new mode and associated parameters, following the same rules as the +TRANSITION argument to DOCTYPE. Note that the new effect becomes +the default. If you wish to return to the original transition, you +must give it explicitly to the appropriate NEWSLIDE. +</p> + +<div id="pause" class="box-macro-args"> +Macro: <b>PAUSE</b> <kbd class="macro-args">["<pause mode and parameters>"]</kbd> +</div> + +<p> +Pauses in slides are accomplished by entering the macro PAUSE at +desired locations in your input file. Subsequent material will be +revealed using the pause mode given to DOCTYPE SLIDES. +</p> + +<p> +If you would like a different mode, you may pass PAUSE a +new mode and associated parameters, following the same rules as the +PAUSE argument to DOCTYPE. +</p> + +<div id="transition" class="box-macro-args"> +Macro: <b>TRANSITION</b> <kbd class="macro-args">["<transition mode and parameters>"]</kbd> +</div> + +<p> +If for some reason you have material that flows from one slide to +the next <i>and</i> you want the next slide to have a transition +different from the current one, you can tell mom about the new +transition with the macro TRANSITION anywhere prior to the break to +the next slide. +</p> + +<h4 id="slide-printing" class="docs" style="font-size: 100%; text-transform: uppercase">Printing slides</h4> + +<p> +If you want to print slides as handouts, you have to tell +<kbd>pdfmom</kbd> or <kbd>gropdf</kbd>, otherwise printing will +stop at the first pause. Simply precede <kbd>pdfmom</kbd> or +<kbd>gropdf</kbd> with GROPDF_NOSLIDE=1, like this: +<br/> +<span class="pre-in-pp"> + GROPDF_NOSLIDE=1 pdfmom <options> slidefile.mom > slidefile.pdf +</span> + +</p> + +<!-- -PRINTSTYLE- --> + +<div class="macro-id-overline"> +<h3 id="printstyle" class="macro-id">PRINTSTYLE</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>PRINTSTYLE</b> <kbd class="macro-args">TYPESET | TYPEWRITE [ SINGLESPACE ]</kbd> +</div> + +<p class="requires"> +• Required for document processing, except in the case of +slides +<br/> +Must come before any changes to default document style +</p> + +<p> +PRINTSTYLE tells mom whether to typeset a document, or to print it +out “typewritten, doubled-spaced”. +</p> + +<div class="box-important"> +<p class="tip-top"> +<span class="important">Important:</span> +<b>This macro may not be omitted.</b> In order for document +processing to take place, mom requires a PRINTSTYLE. If you +don’t give one, mom will warn you on stderr and print a single +page with a nasty message. +</p> + +<p class="tip-bottom"> +<span class="important">Just as important:</span> +<b>PRINTSTYLE must precede any and all page and style +parameters associated with a document</b> with the exception of +<kbd>PAPER</kbd>, which should be placed at the top of your file. +PRINTSTYLE sets up complete templates that include default margins, +family, fonts, point sizes, and so on. Therefore, changes to any +aspect of document style must come afterwards. For example, +<br/> +<span class="pre-in-pp"> + .PAPER A4 + .LS 14 + .QUAD LEFT + .PRINTSTYLE TYPESET +</span> +will not change mom’s default document leading to 14 points, +nor the default justification style (fully justified) to left +justified, whereas +<br/> +<span class="pre-in-pp"> + .PAPER A4 + .PRINTSTYLE TYPESET + .LS 14 + .QUAD LEFT +</span> +will. +</p> + +</div> + +<p> +<kbd>TYPESET</kbd>, as the argument implies, typesets +documents (by default in Times Roman; see +<a href="#typeset-defaults">TYPESET defaults</a>). +You have full access to all the +<a href="typesetting.html#macros-typesetting">typesetting macros</a> +as well as the +<a href="definitions.html#style-control">style control macros</a> +of document processing. +</p> + +<p> +With <kbd>TYPEWRITE</kbd>, mom does her best to reproduce the look +and feel of typewritten, double-spaced copy (see +<a href="#typewrite-defaults">TYPEWRITE defaults</a>). +<a href="docelement.html#docelement-control">Control macros</a> +and +<a href="typesetting.html#intro-macros-typesetting">typesetting macros</a> +that alter family, font, point size, and +<a href="definitions.html#leading">leading</a> +are (mostly) ignored. An important exception is +<a href="headfootpage.html#hdrftr-global-size">HEADER_SIZE</a> +(and, by extension, FOOTER_SIZE), which allows you to reduce the +point size of headers/footers should they become too crowded. Most +of mom’s inlines affecting the appearance of type are also +ignored +(<a href="inlines.html#inline-size-mom"><kbd><span class="nobr">\*S[<size>]</span></kbd></a> +is an exception; there may be a few others). +</p> + +<p> +In short, <kbd>TYPEWRITE</kbd> never produces effects +other than those available on a typewriter. Don’t be fooled +by how brainless this sounds; mom is remarkably sophisticated when +it comes to conveying the typographic sense of a document within the +confines of <kbd>TYPEWRITE</kbd>. +</p> + +<p> +The primary uses of <kbd>TYPEWRITE</kbd> are: outputting hard +copy drafts of your work (for editing) and producing documents +for submission to publishers and agents who (wisely) insist on +typewritten, double-spaced copy. To get a nicely typeset version of +work that’s in the submission phase of its life (say, to show +fellow writers for critiquing), simply change <kbd>TYPEWRITE</kbd> +to <kbd>TYPESET</kbd> and print out a copy. +</p> + +<p> +If, for some reason, you would prefer the output of +<kbd>TYPEWRITE</kbd> single-spaced, pass PRINTSTYLE +<kbd>TYPEWRITE</kbd> the optional argument, <kbd>SINGLESPACE</kbd>. +</p> + +<div class="defaults-container"> +<h3 id="typeset-defaults" class="docs defaults" style="margin-top: 0;">PRINTSTYLE TYPESET defaults</h3> +<span class="pre defaults"> + Family = Times Roman + Point size = 12.5 + Paragraph leading = 16 points, adjusted + Fill mode = justified + Hyphenation = enabled + max. lines = 2 + margin = 36 points + interword adjustment = 1 point + Kerning = enabled + Ligatures = enabled + Smartquotes = enabled + Word space = groff default + Sentence space = 0 +</span> +</div> + +<div class="defaults-container"> +<h3 id="typewrite-defaults" class="docs defaults" style="margin-top: 0;">PRINTSTYLE TYPEWRITE defaults</h3> +<span class="pre defaults"> + Family = Courier + Italics = underlined + Point size = 12 + Paragraph leading = 24 points, adjusted; 12 points for SINGLESPACE + Fill mode = left + Hyphenation = disabled + Kerning = disabled + Ligatures = disabled + Smartquotes = disabled + Word space = groff default + Sentence space = groff default + Columns = ignored +</span> +</div> + +<div class="box-tip" style="margin-top: 1.5em;"> +<h3 id="typewrite-control" class="docs control">PRINTSTYLE TYPEWRITE control macros</h3> + +<h4 id="typewriter-family" class="docs">Family</h4> + +<p style="margin-top: .5em;"> +If you’d prefer a monospace +<a href="definitions.html#family">family</a> +for PRINTSTYLE <kbd>TYPEWRITE</kbd> other than mom’s +default, Courier, you can change it with +<kbd>.TYPEWRITER_FAMILY <family></kbd> (or +<kbd>.TYPEWRITER_FAM</kbd>). Since groff ships with only the +Courier family, you will have to install any other monospace family +yourself. See +<a href="appendices.html#fonts">Adding fonts to +groff</a>. +</p> + +<h4 id="typewriter-size" class="docs">Point size</h4> + +<p style="margin-top: .5em;"> +If you’d like a smaller or larger point size for +PRINTSTYLE <kbd>TYPEWRITE</kbd> (mom’s default is 12-point), +you can change it with +<kbd>.TYPEWRITER_SIZE <size></kbd>. There’s no need to +add a +<a href="definitions.html#unitofmeasure">unit of measure</a> +to the <kbd><size></kbd> argument; points is assumed. Be +aware, however, that regardless of point size, mom’s +leading/linespacing for <kbd>TYPEWRITE</kbd> is fixed at 24-point +for double-spaced, and 12-point for single-spaced. +</p> + +<h4 id="typewriter-underlining" class="docs">Underlining of italics</h4> + +<p> +In PRINTSTYLE <kbd>TYPEWRITE</kbd>, mom, by default, underlines +anything that looks like italics. This includes the +<a href="typesetting.html#slant-inline"><kbd><span class="nobr">\*[SLANT]</span></kbd></a> +<a href="definitions.html#inlines">inline escape</a> +for pseudo-italics. (See +<a href="goodies.html#underline">UNDERLINE</a> +for a note on how to process TYPEWRITE files that underline +italics.) +</p> + +<p id="printstyle-italics"> +If you’d prefer that mom were less bloody-minded +about pretending to be a typewriter (i.e., you’d like italics and +pseudo-italics to come out as italics), use the control macros +<br/> +<span class="pre-in-pp"> + .ITALIC_MEANS_ITALIC +</span> +and +<span class="pre-in-pp"> + .SLANT_MEANS_SLANT +</span> +Neither requires an argument. +</p> + +<p> +Although it’s unlikely, should you wish to reverse +the sense of these macros in the midst of a document, +<kbd>.UNDERLINE_ITALIC</kbd> and <kbd>.UNDERLINE_SLANT</kbd> restore +underlining of italics and pseudo-italics. +</p> + +<p id="underline-quotes"> +Additionally, by default, mom underlines +<a href="definitions.html#quotes">quotes</a> +(but not +<a href="definitions.html#blockquotes">blockquotes</a>) +in PRINTSTYLE <kbd>TYPEWRITE</kbd>. If you don’t like this +behaviour, turn it off with +<br/> +<span class="pre"> + .UNDERLINE_QUOTES OFF +</span> +</p> + +<p> +To turn underlining of quotes back on, use UNDERLINE_QUOTES without +an argument. +</p> + +<p> +While most of the +<a href="docelement.html#docelement-control">control macros</a> +have no effect on PRINTSTYLE <kbd>TYPEWRITE</kbd>, there +is an important exception: +<a href="headfootpage.html#hdrftr-global-size">HEADER_SIZE</a> +(and by extension, FOOTER_SIZE). This is +particularly useful for reducing the point size of +headers/footers should they become crowded (quite likely to +happen if the title of your document is long and your +<a href="#copystyle">COPYSTYLE</a> +is <kbd>DRAFT</kbd>). +</p> + +<p class="tip-bottom"> +Finally, note that colour is disabled for <kbd>TYPEWRITE</kbd>. If +you would like it enabled, for example so PDF links are colourised, +invoke the groff +<a href="definitions.html#primitives">primitive</a> +'<kbd>.color</kbd>' after PRINTSTYLE. +</p> + +</div> + +<!-- -COPYSTYLE- --> + +<div class="macro-id-overline"> +<h3 id="copystyle" class="macro-id">COPYSTYLE</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>COPYSTYLE</b> <kbd class="macro-args">DRAFT | FINAL</kbd> +</div> + +<p> +Mom’s default COPYSTYLE is <kbd>FINAL</kbd>, so you +don’t have to use this macro unless you want to. +</p> + +<p> +COPYSTYLE <kbd>DRAFT</kbd> exhibits the following behaviour: +</p> +<ol style="margin-top: -.5em;"> + <li>Documents start on page 1, whether or not you + request a different starting page number with + <a href="headfootpage.html#pagenumber">PAGENUMBER</a>. + </li> + <li>Page numbers are set in lower case roman numerals.</li> + <li>The draft number supplied by + <a href="#draft">DRAFT</a> + and a revision number, if supplied with + <a href="#revision">REVISION</a> + (see + <a href="#reference-macros">reference macros</a>), + appear in the centre part of + <a href="definitions.html#header">page headers</a> + (or footers, depending on which you’ve selected) along with + any other information that normally appears there. + </li> +</ol> + +<div class="box-important"> +<p class="tip"> +<span class="important">Important:</span> +If you define your own centre part for page headers with +<a href="headfootpage.html#hdrftr-center">HEADER_CENTER</a>, +no draft and/or revision number will appear there. If you want +draft and revision information in this circumstance, use +<a href="headfootpage.html#draft-with-pagenumber">DRAFT_WITH_PAGENUMBER</a>. +</p> +</div> + +<p> +COPYSTYLE <kbd>FINAL</kbd> differs from <kbd>DRAFT</kbd> in that: +</p> +<ol style="margin-top: -.5em;"> + <li>It respects the starting page number you give the document.</li> + <li>Page numbers are set in normal (Arabic) digits.</li> + <li>No draft or revision number appears in the page headers.</li> +</ol> + +<div class="box-tip"> +<p id="copystyle-note" class="tip"> +<span class="note">Note:</span> +The centre part of page headers can get crowded, especially with +<a href="docprocessing.html#doctype">DOCTYPE <kbd>CHAPTER</kbd></a> +and +<a href="docprocessing.html#doctype">DOCTYPE <kbd>NAMED</kbd></a>, +when the COPYSTYLE is <kbd>DRAFT</kbd>. Three mechanisms are +available to overcome this problem. One is to reduce the overall +size of headers (with +<a href="headfootpage.html#hdrftr-global-size">HEADER_SIZE</a>). +Another, which only works with +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPESET</kbd></a>, +is to reduce the size of the header’s centre part only (with +<a href="headfootpage.html#_size">HEADER_CENTER_SIZE</a>). +And finally, you can elect to have the draft/revision information +attached to page numbers instead of having it appear in the centre +of page headers (see +<a href="headfootpage.html#draft-with-pagenumber">DRAFT_WITH_PAGENUMBER</a>). +</p> +</div> + +<div class="rule-short"><hr/></div> + +<!-- ======================================================================== --> + +<h2 id="start-macro" class="macro-group">Initiate document processing</h2> + +<p> +In order to use mom’s document element macros (tags), you have +to tell her you want them. The macro to do this is +<a href="#start">START</a>. +</p> + +<p> +START collects the information you gave mom in the setup section at +the top of your file (see +<a href="#docprocessing-tut">Tutorial – Setting up a mom document</a>), +merges it with her defaults, sets up headers and page numbering, +and prepares mom to process your document using the document +element tags. No document processing takes place until you invoke +<kbd>.START</kbd>. +</p> + +<!-- -START- --> + +<div class="macro-id-overline"> +<h3 id="start" class="macro-id">START</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>START</b> +</div> +<p class="requires"> +• Required for document processing +</p> + +<p> +START takes no arguments. It simply instructs mom to begin document +processing. If you don’t want document processing (i.e., you +only want the +<a href="typesetting.html#macros-typesetting">typesetting macros</a>), +don’t use START. +</p> + +<p> +At a barest minimum before START, you must enter a +<a href="#printstyle">PRINTSTYLE</a> +command. +</p> + +<div class="rule-short"><hr/></div> + +<!-- ======================================================================== --> + +<h2 id="style-before-start" class="macro-group">Establishing typestyle and formatting parameters before START</h2> + +<p> +In the third (optional) part of setting up a document (the +stylesheet; see +<a href="#docprocessing-tut">Tutorial – Setting up a mom document</a>), +you can use the +<a href="typesetting.html">typesetting macros</a> +to change mom’s document-wide defaults for margins, +line length, family, base point size, +<a href="definitions.html#leading">leading</a>, +and justification style. +</p> + +<p> +Two additional style concerns have to be addressed here (i.e. in +macros before +<a href="#start">START</a>): +changes to the +<a href="definitions.html#docheader">docheader</a>, +and whether you want you want the document’s nominal leading +adjusted to fill pages fully to the bottom margin. +</p> + +<div class="macro-list-container" style="margin-top: 2em;"> +<h3 id="index-style-before-start" class="macro-list">Type & formatting parameters before START</h3> +<ul class="macro-list"> + <li><a href="#type-before-start">Behaviour of the typesetting macros before START</a> + <ul class="sublist" style="font-size: 100%; line-height: 120%; margin-bottom: .25em;"> + <li><a href="#meanings">List of meanings</a></li> + <li><a href="#lrc-note">Special note on LEFT, RIGHT and CENTER</a></li> + <li><a href="#color">Initializing colours</a></li> + </ul></li> + <li><a href="#include">Including (sourcing) style sheets and files</a></li> + <li><a href="#doc-lead-adjust">DOC_LEAD_ADJUST</a> – adjust linespacing to fill pages and align bottom margins</li> + <li><a href="#docheader">DOCHEADER</a> + <ul class="sublist" style="font-size: 100%; line-height: 120%;"> + <li><a href="#docheader-control">Docheader control</a></li> + </ul></li> + <li><a href="#columns">COLUMNS</a> + <ul class="sublist" style="font-size: 100%; line-height: 120%;"> + <li><a href="#col-next">COL_NEXT</a></li> + <li><a href="#col-break">COL_BREAK</a></li> + </ul></li> +</ul> +</div> + +<h3 id="type-before-start" class="docs">Behaviour of the typesetting macros before START</h3> + +<p> +From time to time (or maybe frequently), you’ll want the +overall look of a document to differ from mom’s defaults. +Perhaps you’d like her to use a different +<a href="definitions.html#family">family</a>, +or a different overall +<a href="definitions.html#leading">leading</a>, +or have different left and/or right page margins. +</p> + +<p> +To accomplish such alterations, use the appropriate +<a href="typesetting.html#macros-typesetting">typesetting macros</a> +(listed below) after +<a href="#printstyle">PRINTSTYLE</a> +and before +<a href="#start">START</a>. +</p> + +<p> +More than one user has, quite understandably, not fully grasped the +significance of the preceding sentence. The part they’ve missed is +<i>after</i> PRINTSTYLE. +</p> + +<p> +Changes to any aspect of the default look and/or formatting of a mom +document must come after PRINTSTYLE. For example, it might seem +natural to set up page margins at the very top of a document with +<br/> +<span class="pre-in-pp"> + .L_MARGIN 1i + .R_MARGIN 1.5i +</span> +However, when you invoke <kbd>.PRINTSTYLE</kbd>, those margins +will be overridden. The correct place to set margins—and +all other changes to the look of a document—is <i>after</i> +PRINTSTYLE. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="important">Important:</span> +Do not use the macros listed in +<a href="#intro-doc-param">Changing document-wide typesetting parameters after START</a> +prior to START; they are exclusively for use afterwards. +</p> +</div> + +<div id="meanings" class="defaults-container"> +<h3 class="docs defaults" style="margin-top: 0;">Meanings</h3> +<p style="margin-left: 9px; margin-top: -.25em;"> +When used before START, the +<a href="typesetting.html#macros-typesetting">typesetting macros</a>, +below have the following meanings: +<br/> +<span class="pre"> + L_MARGIN Left margin of pages, including headers/footers + R_MARGIN Right margin of pages, including headers/footers + T_MARGIN The point at which running text (i.e. not + headers/footers or page numbers) starts on each + page + B_MARGIN* The point at which running text (i.e. not + (see note) headers/footers or page numbers) ends on each page + + PAGE If you use PAGE, its final four arguments have the + same meaning as L_ R_ T_ and B_MARGIN (above). + + LL The line length for everything on the page; + equivalent to setting the right margin with + R_MARGIN + FAMILY The family of all type in the document + PT_SIZE The point size of type in paragraphs; mom uses + this to calculate automatic point size changes + (e.g. for heads, footnotes, quotes, headers, etc) + LS/AUTOLEAD** The leading used in paragraphs; all leading and + spacing of running text is calculated from this + + QUAD/JUSTIFY Affects paragraphs only + LEFT*** No effect + RIGHT*** No effect + CENTER*** No effect + +------ + *See <a href="headfootpage.html#footer-margin">FOOTER MARGIN AND BOTTOM MARGIN</a> for an important warning + **See <kbd><a href="#doc-lead-adjust">DOC_LEAD_ADJUST</a></kbd> +***See <a href="#lrc-note">Special note</a> +</span> +</p> +</div> + +<p style="margin-top: -.75em;"> +Other macros that deal with type style, or refinements thereof +(<a href="typesetting.html#kern">KERN</a>, +<a href="typesetting.html#ligatures">LIGATURES</a>, +<a href="typesetting.html#hy">HY</a>, +<a href="typesetting.html#ws">WS</a>, +<a href="typesetting.html#ss">SS</a>, +etc.), behave normally. It is not recommended that you set up tabs +or indents prior to START. +</p> + +<p> +If you want to change any of the basic parameters (above) +<i>after</i> START and have them affect a document globally (as if +you’d entered them <i>before</i> START), you must use the macros +listed in +<a href="#intro-doc-param">Changing document-wide typesetting parameters after START</a>. +</p> + +<h4 id="lrc-note" class="docs">Special note on LEFT, RIGHT and CENTER prior to START</h4> + +<p> +In a word, these three macros have no effect on document processing +when invoked prior to START. +</p> + +<p> +All mom’s document element tags +(<a href="docelement.html#pp">PP</a>, +<a href="docelement.html#heading">HEADING</a>, +<a href="docelement.html#blockquote">BLOCKQUOTE</a>, +<a href="docelement.html#footnote">FOOTNOTE</a>, +etc.) except +<a href="docelement.html#quote">QUOTE</a> +set a +<a href="definitions.html#filled">fill mode</a> +as soon as they’re invoked. If you wish to turn fill mode off +for the duration of any tag (with +<a href="typesetting.html#lrc">LEFT, RIGHT or CENTER</a>) +you must do so immediately after invoking the tag. Furthermore, +the change affects <i>only</i> the current invocation of the tag. +Subsequent invocations of the same tag for which you want the same +change require that you invoke <kbd>.LEFT</kbd>, <kbd>.RIGHT</kbd> +or <kbd>.CENTER</kbd> immediately after every invocation of the tag. +</p> + +<!-- -INCLUDE- --> + +<h4 id="include" class="docs">Including (sourcing) style sheets and files</h4> + +<p> +If you routinely make the same changes to mom’s defaults in +order to create similar documents in a similar style—in other +words, you need a template— you can create stylesheet files +and include, or “source”, them into your mom documents +with the macro <kbd>.INCLUDE</kbd>. The right place for such style +sheets is after +<a href="#printstyle">PRINTSTYLE</a> +and before +<a href="#start">START</a>. +</p> + +<p> +Say, for example, in a particular kind of document, you always +want main heads set in Helvetica Bold Italic, flush left, with +no underscore. You’d create a file, let’s call it +<kbd>head-template</kbd>, in which you’d place the pertinent +HEADIING control macros. +<br/> +<span class="pre-in-pp"> + .HEADING_STYLE 1 \ + FAMILY H \ + FONT BI \ + QUAD L \ + NO_UNDERSCORE +</span> +Then, in the preliminary document set-up section of your main file, +you’d include the style sheet, or template, like this: +<br/> +<span class="pre-in-pp"> + .TITLE "Sample Document + .AUTHOR "Joe Blow + .PRINTSTYLE TYPESET + \# + .INCLUDE head-template + \# + .START +</span> + +The blank comment lines ( <kbd>\#</kbd> ) aren’t required, but +they do make your file(s) easier to read. +</p> + +<p> +If the file to be included is in the same directory as the file +you’re working, you simply enter the filename after +<kbd>.INCLUDE</kbd>. If the file’s in another directory, you must +provide a full path name to it. For example, if you’re working in +a directory called <kbd>/home/joe/stories</kbd> and your +stylesheet is in <kbd>/home/joe/stylesheets</kbd>, the above +example would have to look like this: +<br/> +<span class="pre-in-pp"> + .TITLE "Sample Document + .AUTHOR "Joe Blow + .PRINTSTYLE TYPESET + \# + .INCLUDE /home/joe/stylesheets/head-template + \# + .START +</span> +</p> + +<p> +INCLUDE is not restricted to style sheets or templates. You can +include any file at any point into a document, provided the file +contains only text and valid groff or mom formatting commands. +Neither is INCLUDE restricted to use with mom’s document +processing macros. You can use it in plain typeset documents as +well. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +INCLUDE is an alias for the groff request <kbd>.so</kbd>. If the +sourced file contains material that requires pre-processing (e.g. +a table made with <b>tbl(1)</b> or non-English characters), use +<kbd>.so</kbd> rather than INCLUDE and invoke pdfmom thus: +<br/> +<span class="pre-in-pp"> + soelim file.mom | pdfmom [flags] > file.pdf +</span> +<b>soelim</b> only looks for lines that begin with <kbd>.so</kbd>, +which furthermore must not have any space between the period and +the “s”. +</p> +</div> + +<!-- -COLOUR- --> + +<h4 id="color" class="docs">Initializing colours</h4> + +<p> +Although it doesn’t really matter where you define/initialize +colours for use in document processing (see +<a href="color.html#newcolor">NEWCOLOR</a> +and +<a href="color.html#xcolor">XCOLOR</a> +in the section +<a href="color.html#color-intro">Coloured text</a>), +I recommend doing so before you begin document processing with +<kbd><a href="#start">START</a></kbd>. +</p> + +<p> +The macro +<a href="color.html#color">COLOR</a> +and the +<a href="definitions.html#inlines">inline escape</a>, +<a href="color.html#color-inline"><kbd><span class="nobr">\*[<colorname>]</span></kbd></a> +can be used at any time during document processing for occasional +colour effects. However, consistent and reliable colourising of +various document elements (the docheader, heads, linebreaks, +footnotes, pagenumbers, and so on) must be managed through the use +of the +<a href="docelement.html#docelement-control">document element control macros</a>. +</p> + +<p> +Please note that colour is disabled if your +<a href="#printstyle">PRINTSTYLE</a> +is <kbd>TYPEWRITE</kbd>. If you would like it enabled, for example +so PDF links are colourised, invoke the groff +<a href="definitions.html#primitives">primitive</a> +'<kbd>.color</kbd>' after PRINTSTYLE. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If you plan to have mom generate a +<a href="docelement.html#toc">table of contents</a>, +do not embed colour +<a href="definitions.html#inlines">inline escapes</a> +(<a href="color.html#color-inline"><kbd><span class="nobr">\*[<colourname>]</span></kbd></a>) +in the +<a href="definitions.html#stringargument">string arguments</a> +given to any of the +<a href="docprocessing.html#reference-macros">reference macros</a>, +nor in the string arguments given to +<a href="docelement.html#heading">HEADING</a>. +Use, rather, the +<a href="definitions.html#controlmacro">control macros</a> +mom provides to automatically colourise these elements. +</p> +</div> + +<!-- -DOC LEAD ADJUST- --> + +<div class="macro-id-overline"> +<h3 id="doc-lead-adjust" class="macro-id">Adjust linespacing to fill pages and align bottom margins</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>DOC_LEAD_ADJUST</b> <kbd class="macro-args">toggle</kbd> +</div> + +<p class="requires"> +• Must come after +<a href="typesetting.html#ls"><span class="normal">LS</span></a> +or +<a href="typesetting.html.#autoloead"><span class="normal">AUTOLEAD</span></a> +and before +<a href="#start"><span class="normal">START</span></a> +</p> + +<p> +DOC_LEAD_ADJUST is a special macro to adjust document +<a href="definitions.html#leading">leading</a> +so that bottom margins fall precisely where you expect. +</p> + +<p> +When you invoke <kbd>.DOC_LEAD_ADJUST</kbd>, mom takes the number +of lines that fit on the page at your requested leading, then +incrementally adds +<a href="definitions.html#units">machine units</a> +to the leading until the maximum number of lines at the new leading +that fit on the page coincides perfectly with the bottom margin of +<a href="definitions.html#running">running text</a>. +</p> + +<p> +In most instances, the difference between the requested lead and +the adjusted lead is unnoticeable, and since in almost all cases +adjusted leading is what you want, it’s mom’s default +and you don’t have to invoke it explicitly. +</p> + +<p> +However, should you not want adjusted document leading, you must +turn it off manually, like this: +<br/> +<span class="pre"> + .DOC_LEAD_ADJUST OFF +</span> +</p> + +<p> +If you set the document leading prior to START with +<a href="typesetting.html#leading">LS</a> +or +<a href="typesetting.html#autolead">AUTOLEAD</a>, +<kbd>.DOC_LEAD_ADJUST OFF</kbd> must come afterwards, like +this: +<br/> +<span class="pre-in-pp"> + .LS 12 + .DOC_LEAD_ADJUST OFF +</span> +In this scenario, the maximum number of lines that fit on a page at +a +<a href="definitions.html#leading">leading</a> +of 12 +<a href="definitions.html#picaspoints">points</a> +determine where mom ends a page. The effect will be that last lines +usually fall (slightly) short of the “official” bottom +margin. +</p> + +<p> +In +<a href="docprocessing.html#printstyle">PRINTSTYLE</a> <kbd>TYPEWRITE</kbd>, +the leading is always adjusted and can’t be turned off. +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="note">Note:</span> +DOC_LEAD_ADJUST, if used, must be invoked after +<a href="typesetting.html#leading">LS</a> +or +<a href="typesetting.html#autolead">AUTOLEAD</a> +and before +<a href="#start">START</a>. +</p> + +<p class="tip-bottom"> +<span class="additional-note">Additional note:</span> +Even if you disable DOC_LEAD_ADJUST, mom will still adjust the +leading of endnotes pages and toc pages. See +<a href="docelement.html#endnote-lead">ENDNOTE_LEAD</a> +and +<a href="docelement.html#toc-lead">TOC_LEAD</a> +for an explanation of how to disable this default behaviour. +</p> +</div> + +<!-- -DOCHEADER- --> + +<div class="macro-id-overline"> +<h3 id="docheader" class="macro-id">Managing the docheader</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>DOCHEADER</b> <kbd class="macro-args"><toggle> [ distance to advance from top of page ] [ NO_SHIM ]</kbd> +</div> + +<p class="requires"> +• Must come before +<a href="#start"><span class="normal">START</span></a>; <kbd><span class="normal">distance</span></kbd> requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +By default, mom prints a +<a href="definitions.html#docheader">docheader</a> +on the first page of any document (see +<a href="#docheader-desc">below</a> +for a description of the docheader). If you don’t want a docheader, +turn it off with +<br/> +<span class="pre-in-pp"> + .DOCHEADER OFF +</span> +DOCHEADER is a toggle macro, so the argument doesn’t +have to be OFF; it can be anything you like. +</p> + +<p> +If you turn the docheader off, mom, by default, starts +the running text of your document on the same top +<a href="definitions.html#baseline">baseline</a> +as all subsequent pages. If you’d like her to start at a different +vertical position, give her the distance you’d like as a second +argument. +<br/> +<span class="pre-in-pp"> + .DOCHEADER OFF 1.5i +</span> +This starts the document 1.5 inches from the top of the page plus +whatever spacing adjustment mom has to make in order to ensure that +the first baseline of running text falls on a “valid” +baseline (i.e., one that ensures that the bottom margin of the first +page falls where it should). The distance is measured from the top +edge of the paper to the +<a href="definitions.html#baseline">baseline</a> +of the first line of type. +</p> + +<p> +With <kbd>.DOCHEADER OFF</kbd>, it is possible to create your own +custom docheaders (after +<a href="#start">START</a>) +using mom’s typesetting macros. It is recommended that if you +do create a custom docheader, you make +<a href="docprocessing.html#shim"><kbd>.SHIM</kbd></a> +the last macro before the first item of your document (for +example, <kbd>.PP</kbd> or <kbd>.HEADING 1</kbd>. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +You may have tried <kbd>DOCHEAHER OFF</kbd> with a distance argument +and discovered that mom will not budge the starting position of the document +from her chosen default location. This is byproduct of +<a href="#shim">shimming</a>, +which mom always applies before the first line of running text after +the docheader, regardless of which +<a href="#vertical-whitespace-management">vertical whitespace management</a> +strategy is in effect. If you encounter the problem, pass +<kbd>DOCHEADER OFF <distance></kbd> +the additional final argument, <kbd>NO_SHIM</kbd>. +</p> +</div> + +<!-- DOCHEADER CONTROL --> + +<h3 id="docheader-control" class="docs">Docheader control: How to change the look of docheaders</h3> + +<p> +In +<a href="#printstyle">PRINTSTYLE <kbd>TYPEWRITE</kbd></a>, +the look of docheaders is carved in stone. In +<a href="#printstyle">PRINTSTYLE <kbd>TYPESET</kbd></a>, +however, you can make a lot of changes. Macros that alter +docheaders must come before +<a href="#start">START</a>. +</p> + +<h4 id="docheader-desc" class="docs">Docheader description</h4> + +<p> +A typeset docheader has the following characteristics: +</p> +<div class="box-code" style="margin-left: 24px;"> +<span class="pre" style="color: #302419;"> + TITLE bold, 3.5 points larger than running text (not necessarily caps) + Subtitle medium, same size as running text + by medium italic, same size as running text + Author(s) medium italic, same size as running text + +(Document type) bold italic, 3 points larger than running text +</span> +</div> + +<p> +Or, if the +<a href="#doctype">DOCTYPE</a> +is <kbd>CHAPTER</kbd>, +</p> +<div class="box-code" style="margin-left: 24px;"> +<span class="pre" style="color: #302419;"> + Chapter <n> bold, 4 points larger than running text +Chapter Title bold italic, 4 points larger than running text +</span> +</div> + +<p> +The +<a href="definitions.html#family">family</a> +is the prevailing family of the whole document. Title, subtitle, +author, and document type are what you supply with the +<a href="#reference-macros">reference macros</a>. +Any you leave out will not appear; mom will compensate: +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If your DOCTYPE is <kbd>CHAPTER</kbd> and you have both “Chapter +<n>” and a “Chapter Title” (as above), mom +inserts a small amount of whitespace between them, equal to +one-quarter of the +<a href="definitions.html#leading">leading</a> +in effect. If this doesn’t suit you, you can remove or alter +the space with +<a href="#space-before">CHAPTER_TITLE_SPACE_BEFORE</a>. +</p> +</div> + +<div class="macro-list-container"> +<h3 id="index-docheader-control" class="macro-list">Docheader control</h3> + +<p style="margin-top: -1.5em; margin-left: .5em; margin-right: .5em"> +With the docheader control macros, you can change the family, +colour, leading, and quad direction of the entire docheader. You can +also set the style parameters for each part individually. Style +parameters include family, font, size, colour, lead, space before, +caps, smallcaps, and underscoring. +</p> + +<ul class="macro-list" style="margin-top: -.5em"> + <li><a href="#change-whole-docheader">1. Changes to the whole docheader</a> + <ul style="list-style-type: disc"> + <li><a href="#change-start">Change the starting position of the docheader</a></li> + <li><a href="#docheader-family">Change the family of the whole docheader</a></li> + <li><a href="#docheader-color">Change the colour of the whole docheader</a></li> + <li><a href="#docheader-lead">Change the leading of the whole docheader</a></li> + <li><a href="#docheader-quad">Change the quad direction of the docheader</a></li> + </ul> + </li> + <li><a href="#part-by-part">2. Part by part changes</a> + <ul style="list-style-type: disc"> + <li><a href="#list-of-params">List of parameters and arguments</a></li> + <li><a href="#grouping">Grouping part/parameter changes</a> – very handy</li> + </ul> + </li> + <li><a href="#change-attribute">3. Changing or removing the attribution string (“by”)</a></li> +</ul> +</div> + +<h4 id="change-whole-docheader" class="docs" style="font-size: 100%">1. Changes to the whole docheader</h4> + +<h5 id="change-start" class="docs">Change the starting position of the docheader</h5> + +<p> +By default, a docheader starts on the same +<a href="definitions.html#baseline">baseline</a> +as +<a href="definitions.html#running">running text</a>. +If you’d like it to start somewhere else, use the macro +DOCHEADER_ADVANCE and give it the distance you want (measured from +the top edge of the paper to the first baseline of the docheader), +like this: +<br/> +<span class="pre-in-pp"> + .DOCHEADER_ADVANCE 4P +</span> +A +<a href="definitions.html#unitofmeasure">unit of measure</a> +is required. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If +<a href="headfootpage.html#headers">HEADERS</a> +are <kbd>OFF</kbd>, mom’s normal top margin for +<a href="definitions.html#running">running text</a> +(7.5 +<a href="definitions.html#picaspoints">picas</a>) +changes to 6 picas (visually approx. 1 inch). Since the first +baseline of the docheader falls on the same baseline as the first +line of running text (on pages after page 1), you might find the +docheaders a bit high when headers are off. Use DOCHEADER_ADVANCE +to place them where you want. +</p> +</div> + +<h5 id="docheader-quad" class="docs">Change the quad direction of the docheader</h5> + +<p> +By default, mom centres the docheader. If you’d prefer to +have your docheaders set flush left or right, or need to restore +the default centering, invoke <kbd>.DOCHEADER_QUAD</kbd> with the +quad direction you want, either <kbd>LEFT</kbd> (or <kbd>L</kbd>), +<kbd>RIGHT</kbd> (or <kbd>R</kbd>) or <kbd>CENTER</kbd> (or +<kbd>C</kbd>). +</p> + +<h5 id="docheader-family" class="docs">Change the family of the entire docheader</h5> + +<p> +By default, mom sets the docheader in the same +family used for +<a href="definitions.html#running">running text</a>. +If you’d prefer to have your docheaders set in a different +family, invoke <kbd>.DOCHEADER_FAMILY</kbd> with the family you +want. The argument to DOCHEADER_FAMILY is the same as for +<a href="typesetting.html#family">FAMILY</a>. +</p> + +<p> +For example, mom’s default family for running text is Times +Roman. If you’d like to keep that default, but have the +docheaders set entirely in Helvetica, +<br/> +<span class="pre-in-pp"> + .DOCHEADER_FAMILY H +</span> +is how you’d do it. +</p> + +<p> +Please note that if you use DOCHEADER_FAMILY, you can still alter +the family of individual parts of the docheader. +</p> + +<h5 id="docheader-color" class="docs">Change the colour of the entire docheader</h5> + +<p> +The default colour for docheaders is black, as you’d expect. +If you wish to change it, use +<kbd>.DOCHEADER_COLOR <colour></kbd>, where +<kbd> <colour></kbd> is a colour pre-initialized with +<a href="color.html#xcolor">XCOLOR</a> +or +<a href="color.html#newcolor">NEWCOLOR</a>. +</p> + +<h5 id="docheader-lead" class="docs">Change the leading of the entire docheader</h5> + +<p> +By default, mom uses the leading in effect for +<a href="definitions.html#running">running text</a> +for docheaders. If you want to increase or +decrease the overall docheader leading, use +<kbd>.DOCHEADER_LEAD +|-<amount></kbd>, where +<kbd><amount></kbd> is the number of +<a href="definitions.html#picaspoints">points</a> +by which to make the adjustment. +</p> + +<h4 id="part-by-part" class="docs" style="font-size: 100%">2. Part by part changes</h4> + +<p> +Whenever you want to change the style parameters for any part of +the docheader, simply join the name of the part to the parameter +you wish to change using an underscore, then supply any necessary +arguments. The subtitle double-underlined? No problem. +<br/> +<span class="pre-in-pp"> + .SUBTITLE_UNDERSCORE DOUBLE +</span> +Author in red? +<br/> +<span class="pre-in-pp"> + .AUTHOR_COLOR red +</span> +Title in smallcaps? +<span class="pre-in-pp"> + .TITLE_SMALLCAPS +</span> +</p> + +<div class="box-tip" style="margin-top: -1em;"> +<p class="tip"> +<span class="note">Note:</span> +Use <kbd>ATTRIBUTE</kbd> as the part name for the attribution string +(“by”) that precedes the author, and <kbd>DOCTYPE</kbd> +as the name for the string passed to <kbd>DOCTYPE NAMED "string"</kbd>. +</p> +</div> + +<h5 id="list-of-params" class="docs">List of parameters with arguments</h5> + +<dl> + <dt class="params">_FAMILY</dt> + <dd> + Takes the same argument as <a href="typesetting.html#family">FAMILY</a>. + </dd> + <dt class="params">_FONT</dt> + <dd> + Takes the same argument as <a href="typesetting.html#font">FT</a>. + </dd> + <dt class="params">_SIZE</dt> + <dd> + Takes a <kbd>+</kbd> or <kbd>-</kbd> value relative to the size of + <a href="definitions.html#running">running text</a>. + </dd> + <dt class="params">_COLOR</dt> + <dd> + Takes the same argument as <a href="color.html#color">COLOR</a>. + Colours should be pre-initialized with + <a href="color.html#xcolor">XCOLOR</a> + or + <a href="color.html#newcolor">NEWCOLOR</a>. + </dd> + <dt class="params">_LEAD</dt> + <dd> + Takes an absolute leading value, i.e. not relative to the + overall leading of the docheader. The leading applies to + multiple lines of type within the same docheader part, e.g. + several authors or a long title that must be split over two + lines. No + <a href="definitions.html#unitofmeasure">unit of measure</a> + is required; + <a href="definitions.html#picaspoints">points</a> + is assumed. + </dd> + <dt id="space-before" class="params">_SPACE</dt> + <dd> + Takes a numeric value with a + <a href="definitions.html#unitofmeasure">unit of measure</a> + appended to it. The value may be negative. This allows you + to adjust the whitespace before a docheader part, for example + if you want more whitespace between the title and the author. + <span style="display: block; margin-top: .5em"> + Note that <kbd>TITLE</kbd> does not have a <kbd>_SPACE</kbd> + parameter; use + <a href="#change-start">DOCHEADER_ADVANCE</a> + to move the title further down on the page. + </span> + </dd> + <dt class="params">_CAPS</dt> + <dd> + Capitalizes the entire docheader part. No argument is + required. + </dd> + <dt class="params">_NO_CAPS</dt> + <dd> + Only used if you need to reverse the sense of <kbd>_CAPS</kbd>, as + can sometimes happen when + <a href="rectoverso.html#collate">collating</a> + documents that have differing docheader style requirements. + </dd> + <dt class="params">_SMALLCAPS</dt> + <dd> + Set the entire docheader part in smallcaps. No argument is + required. + </dd> + <dt class="params">_NO_SMALLCAPS</dt> + <dd> + Only used if you need to reverse the sense of + <kbd>_SMALLCAPS</kbd>, as can sometimes happen when + <a href="rectoverso.html#collate">collating</a> + documents that have differing docheader style requirements. + </dd> + <dt class="params">_UNDERSCORE</dt> + <dd> + With no argument, underscores the docheader part. With a + single, possibly decimal numeric argument, sets the weight of + the underscore. A second numeric argument to which a + <a href="definitions.html#unitofmeasure">unit of measure</a> + is appended (most likely <kbd>p</kbd>) sets the distance + between the baseline and the underscore. + <span style="display: block; margin-top: .5em"> + If the argument <kbd>DOUBLE</kbd> is given, double underscores + the docheader part. With a single, possibly decimal numeric + argument afterwards, sets the weight of the underscore rules. + A third numeric argument to which a + <a href="definitions.html#unitofmeasure">unit of measure</a> + is appended (most likely <kbd>p</kbd>) sets the distance + between the baseline and the first underscore rule. A fourth + numeric argument to which a unit of measure is appended sets + the distance between the two underscore rules. + </span> + <span style="display: block; margin-top: .5em"> + You may give <kbd>_UNDERLINE</kbd> as the parameter instead of + <kbd>_UNDERSCORE</kbd> if you prefer. + </span> + </dd> + <dt class="params">NO_UNDERSCORE</dt> + <dd> + Only used if you need to reverse the sense of + <kbd>_UNDERSCORE</kbd>, as can sometimes happen when + <a href="rectoverso.html#collate">collating</a> + documents that have differing docheader style requirements. + </dd> +</dl> + +<h5 id="grouping" class="docs">Grouping part/parameter changes</h5> + +<p> +If you want to change several parameters for a particular docheader +part, you may group the changes together in a single macro by +joining the name of the part to <kbd>STYLE</kbd> with an underscore, +for example <kbd>TITLE_STYLE</kbd> or <kbd>AUTHOR_STYLE</kbd>. +The following demonstrates: +<span class="pre-in-pp"> + .CHAPTER_TITLE_STYLE \ + FAMILY T \ + SIZE +4 \ + UNDERSCORE 2 \ + SMALLCAPS +</span> +Notice the use of the backslash character, which is required after +the macro name and all parameters except the last. Grouping reduces +clutter and the finger fatigue caused by entering +<span class="pre-in-pp"> + .CHAPTER_TITLE_FAMILY T + .CHAPTER_TITLE_SIZE +4 + .CHAPTER_TITLE_UNDERSCORE 2 + .CHAPTER_TITLE_SMALLCAPS +</span> +</p> + +<h4 id="change-attribute" class="docs" style="font-size: 100%">3. Changing or removing the attribution string (“by”)</h4> + +<p> +If you’re not writing in English, you can change what mom +prints where “by” appears in docheaders. For example, +<br/> +<span class="pre-in-pp"> + .ATTRIBUTE_STRING "par" +</span> +changes “by” to “par”. ATTRIBUTE_STRING +can also be used, for example, to make the attribution read +“Edited by”. +</p> + +<p> +If you don’t want an attribution string at all, simply pass +ATTRIBUTE_STRING an empty argument, like this: +<br/> +<span class="pre-in-pp"> + .ATTRIBUTE_STRING "" +</span> +Mom will deposit a blank line where the attribution string normally +appears. +</p> + +<p> +If the optional argument <kbd>COVER</kbd> or <kbd>DOC_COVER</kbd> +is given to ATTRIBUTE_STRING, the string argument represents the +attribution string that will appear on cover or document cover pages +(see the +<a href="cover.html#cover-intro">Introduction to cover pages</a> +for a description of the difference between “document +covers” and “covers”). Thus, it is possible to +have different attribution strings on the document cover page, the +cover (“title”) page, and in the first-page docheader. +An extreme example would be: +<br/> +<span class="pre-in-pp"> + .ATTRIBUTE_STRING "" + .ATTRIBUTE_STRING DOC_COVER "Edited by" + .ATTRIBUTE_STRING COVER "by" +</span> +The first invocation of <kbd>.ATTRIBUTE_STRING</kbd> establishes a +blank attribution string that will be incorporated in the first-page +docheader. The second will print “Edited by” on the +document cover; the third will print “by” on the cover +(“title”) page. +</p> + +<p> +If you don’t require differing attribute strings for +doc cover pages, cover pages, or the first-page docheader, +<kbd>.ATTRIBUTE_STRING</kbd>, without either of the optional first +arguments, is sufficient. +</p> + +<div class="rule-short"><hr/></div> + +<!-- -COLUMNS- --> + +<h2 id="columns-intro" class="docs">Setting documents in columns</h2> + +<p> +Setting documents in columns is easy with mom. All you have to do +is say how many columns you want and how much space you want +between them (the +<a href="definitions.html#gutter">gutters</a>). +That’s it. Mom takes care of everything else, from soup to +nuts. +</p> + +<h3 class="docs">Some words of advice</h3> + +<p> +If you want your type to achieve a pleasing +<a href="definitions.html#just">justification</a> +or +<a href="definitions.html#rag">rag</a> +in columns, reduce the point size of type (and probably the +<a href="definitions.html#leading">leading</a> +as well). Mom’s default document point size is 12.5, which +works well across her default 39 +<a href="definitions.html#picaspoints">pica</a> +full page line length, but with even just two columns on a page, the +default point size is awkward to work with. +</p> + +<p> +Furthermore, you’ll absolutely need to reduce the indents for +<a href="docelement.html#epigraph-control">epigraphs</a>, +<a href="docelement.html#quote-general">quotes</a>, +and +<a href="docelement.html#blockquote-general">blockquotes</a> +(and probably the +<a href="docelement.html#para-indent">paragraph first-line indent</a> +as well). +</p> + +<!-- -COLUMN- --> + +<div class="macro-id-overline"> +<h3 id="columns" class="macro-id">COLUMNS</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>COLUMNS</b> <kbd class="macro-args"><number of columns> <width of gutters></kbd> +</div> + +<p class="requires"> +• Should be the last macro before START +<br/> + +<i>The second argument requires a <a href="definitions.html#unitofmeasure">unit of measure</a></i> +</p> + +<p> +COLUMNS takes two arguments: the number of columns you want on +document pages, and the width of the +<a href="definitions.html#gutter">gutter</a> +between them. For example, to set up a page with two columns +separated by an 18 point gutter, you’d do +<br/> +<span class="pre-in-pp"> + .COLUMNS 2 18p +</span> +Nothing to it, really. However, as noted above, COLUMNS should +always be the last document setup macro prior to +<a href="#start">START</a>. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Mom ignores columns completely when the +<a href="#printstyle">PRINTSTYLE</a> +is <kbd>TYPEWRITE</kbd>. The notion of typewriter-style +output in columns is just too ghastly for her to bear. +</p> +</div> + +<h3 class="docs" id="marking-col-start">Marking the first page column start position</h3> + +<p> +If you insert or remove space after the docheader, i.e. immediately after +<a href="#start">START</a> +in your input file, mom needs to know where your first column begins +in order to align subsequent columns on the first page. +</p> + +<div id="col-mark" class="box-macro-args"> +Macro: <b>COL_MARK</b> +</div> + +<p> +<kbd>COL_MARK</kbd> tells mom where the first column after the +docheader begins, in order for the top of subsequent columns on the +first page to be aligned. Note that if you do not manually add +or remove space after the docheader, there is no need to invoke +<kbd>COL_MARK</kbd>. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If you do add or subtract space after the docheader, e.g. with +<a href="typesetting.html#ald">ALD</a> +or +<a href="typesetting.html#SP">SP</a>, +and your +<a href="definitions.html#unitofmeasure">unit of measure</a> +is something other than a multiple of “<kbd>v</kbd>”, be +sure to follow the spacing command with +<a href="docprocessing.html#shim">SHIM</a> +before entering <kbd>.COL_MARK</kbd> unless shimming has been +disabled with +<a href="#no-shim">NO_SHIM</a>. +If your document is being flex-spaced, do not use +<a href="docprocessing.html#flex">FLEX</a>. +Rather, disable flex-spacing temporarily with +<br/> +<span class="pre-in-pp"> + .NO_FLEX + .NO_SHIM off + .SHIM + .COL_MARK +</span> +and re-enable it afterwards with +<span class="pre-in-pp"> + .NO_SHIM + .NO_FLEX off +</span> +</p> +</div> + +<h3 class="docs">Using tabs when COLUMNS are enabled</h3> + +<p> +Mom’s tabs (both +<a href="typesetting.html#typesetting-tabs">typesetting tabs</a> +and +<a href="typesetting.html#string-tabs">string tabs</a>) +behave as you’d expect during document processing, even +when COLUMNS are enabled. Tab structures set up during document +processing carry over from page to page and column to column. +</p> + +<!-- -BREAKING COLUMNS- --> + +<h3 id="breaking-columns" class="docs">Breaking columns manually</h3> + +<p> +Mom takes care of breaking columns when they reach the bottom +margin of a page. However, there may be times you want to break +the columns yourself. There are two macros for breaking columns +manually: COL_NEXT and COL_BREAK. +</p> + +<div id="col-next" class="box-macro-args"> +Macro: <b>COL_NEXT</b> +</div> + +<p> +<kbd>.COL_NEXT</kbd> breaks the line just before it, +<a href="definitions.html#quad">quads</a> +it left (assuming the type is justified or quad left), and moves over +to the top of the next column. If the column happens to be the last +(rightmost) one on the page, mom starts a new page +at the “column 1” position. This is the macro to use when +you want to start a new column after the end of a paragraph. +</p> + +<div id="col-break" class="box-macro-args"> +Macro: <b>COL_BREAK</b> +</div> + +<p> +<kbd>.COL_BREAK</kbd> is almost the same as <kbd>.COL_NEXT</kbd>, +except that instead of breaking and quadding the line preceding it, +mom breaks and spreads it (see +<a href="typesetting.html#spread">SPREAD</a>). +Use this macro whenever you need to start a new column in the middle +of a paragraph. +</p> + +<div class="box-important"> +<p class="tip"> +<span class="important">Warning:</span> +If you need COL_BREAK in the middle of a blockquote or (god help +you) an epigraph, you must do the following in order for COL_BREAK +to work: +<br/> +<span class="pre-in-pp"> + .SPREAD + \!.COL_BREAK +</span> +</p> +</div> + +<div class="rule-short"><hr/></div> + +<!-- ======================================================================== --> + +<!-- *** --> + + +<h2 id="style-after-start" class="macro-group">Changing basic type and formatting parameters after START</h2> + +<ul id="changing-basic-type"> + <li><a href="#behaviour">Behaviour of the typesetting macros during document processing</a> + <ul style="margin-left: -.5em;"> + <li><a href="#behaviour-specific">Effect of specific typesetting macros</a></li> + </ul></li> + <li><a href="#tb-margins">Top and bottom margins in document processing</a></li> + <li><a href="#space">Inserting space at the top of a new page</a> + <ul style="margin-left: -.5em;"> + <li><a href="#add-space">ADD_SPACE</a></li> + </ul></li> +</ul> + +<div class="rule-medium"><hr/></div> + +<h3 id="behaviour" class="docs">Behaviour of the typesetting macros during document processing</h3> + +<p> +During document processing, most of the +<a href="typesetting.html#macros-typesetting">typesetting macros</a> +affect type in the document globally. For example, if you turn +kerning off, pairwise kerning is disabled not only in paragraphs, +but also in headers, footers, quotes, and so on. +</p> + +<p> +Typesetting macros that alter margins and line lengths affect +<a href="definitions.html#running">running text</a> +globally (or at least try to), but leave headers/footers and +footnotes alone. (To indent footnotes, see the full explanation of +the +<a href="docelement.html#footnote">FOOTNOTE</a> +macro.) +</p> + +<p> +Mom’s tabs (both +<a href="typesetting.html#typesetting-tabs">typesetting tabs</a> +and +<a href="typesetting.html#string-tabs">string tabs</a>) +behave as expected in running text during document processing. Tab +structures that do not exceed the line length of running text are +preserved sensibly from page to page, and, if +<a href="docprocessing.html#columns">COLUMNS</a> +are enabled, from column to column. +</p> + +<p> +Some typesetting macros, however, when used during document +processing, behave in special ways. These are the macros that deal +with the basic parameters of type style: horizontal and vertical +margins, line length, +<a href="definitions.html#family">family</a>, +<a href="definitions.html#font">font</a>, +<a href="definitions.html#ps">point size</a>, +<a href="definitions.html#leading">leading</a>, +and +<a href="definitions.html#quad">quad</a>. +</p> + +<p> +Mom assumes that any changes to these parameters stem from a +temporary need to set type in a style different from that provided +by mom’s +<a href="docelement.html#index-docelement">document element tags</a>. +In other words, you need to do a bit of creative typesetting in the +middle of a document. +</p> + +<p> +The following lists those typesetting macros whose behaviour during +document processing requires some explanation. +(Please refer to +<a href="#tb-margins">Top and bottom margins in document processing</a> +for information on how mom interprets +<a href="typesetting.html#t-margin">T_MARGIN</a> +and +<a href="typesetting.html#b-margin">B_MARGIN</a> +in document processing. Additionally, see +<a href="#add-space">ADD_SPACE</a> +if you encounter the problem of trying to get mom to put space at +the tops of pages after the first.) +</p> + +<div id="behaviour-specific" class="box-code" style="margin-left: 3.5%"> +<span class="pre" style="color: #302419;"> + MACRO EFFECT DURING DOCUMENT PROCESSING + ----- --------------------------------- + + L_MARGIN •The left margin of all running text + assumes the new value. + + •The line length remains unaltered. + + •The header and footer left margin + remain at the current document default. + + (You won’t use this often by itself. Most + likely, you’ll use it in combination with + R_MARGIN or LL.) + + R_MARGIN •The right margin of all running text + assumes the new value. In other words, + the line length is altered. + + •The header and footer right margin + remain at the current document default. + + LL •The line length of all running text + is set to the new value. + + •The header and footer line length remain + at the current document default. + + FAMILY •Changes family for the duration of the + current tag only. As soon as another document + element tag is invoked, the family reverts to + the current default for the new tag. + + FT •Changes font for the duration of the + current tag only. As soon as another document + element tag is entered, the font reverts + to the current default for the new tag. + + N.B. — \*[SLANT] and \*[BOLDER] affect + paragraph text, and remain in effect for all + paragraphs until turned off. If you want to + use them in a macro that takes a string + argument, include the escape in the string. + \*[COND] and \*[EXT] behave similarly. + + PT_SIZE •Changes point size for the duration of the + current tag only. As soon as another document + element tag is entered, the point size reverts + to the current document default for the new + tag. + + LS •Changes line space for the duration of the + current tag only. As soon as another document + element tag is entered, the line space reverts + to the current document default for the new + tag. + + Using LS to temporarily change leading within + a document will almost certainly result in a + bottom margin that doesn’t align with the + bottom margin of subsequent pages. You’ll + need to use the SHIM or FLEX macro to get mom back + on track when you’re ready to return to the + document’s default leading. + + <a id="autolead" style="margin-top: -1em">AUTOLEAD</a> •Invoked before START, sets the overall document + leading as a function of the overall document + point size (i.e. the point size used in paragraphs); + subsequently disabled after START, except for calls + to DOC_PT_SIZE + + •DOC_LEAD before DOC_PT_SIZE cancels the AUTOLEAD + set before START + + •Invoked after START, remains in effect for all + subsequent point size changes made with PT_SIZE, + but does not affect the leading of the document + element tags (e.g. HEADING, PP, QUOTE...), or calls + to DOC_PT_SIZE + + QUAD •Changes quad for the duration of the + current tag only. As soon as another document + element tag is entered, the quad reverts to + the current document default for the new + tag. + + N.B. — Line-for-line quadding macros + (LEFT, CENTER, RIGHT) are also temporary, + overridden by the QUAD value of any subsequent + document element tag. +</span> +</div> + +<h3 id="tb-margins" class="docs" style="margin-top: 1.5em;">Top and bottom margins in document processing</h3> + +<p> +Normally, mom establishes the top and bottom +margins of +<a href="definitions.html#running">running text</a> +in documents from the values of <b>HEADER_MARGIN + +HEADER_GAP</b> and <b>FOOTER_MARGIN + FOOTER_GAP</b> +respectively. However, if you invoke +<a href="typesetting.html#t-margin">T_MARGIN</a> +or +<a href="typesetting.html#b-margin">B_MARGIN</a> +either before or after +<a href="docelement.html#start">START</a>, +they set the top and bottom margins of running text irrespective of +HEADER_GAP and FOOTER_GAP. +</p> + +<p> +Put another way, in document processing, T_MARGIN +and B_MARGIN set the top and bottom margins of +running text, but have no effect on the placement of +<a href="definitions.html#header">headers</a>, +<a href="definitions.html#footer">footers</a>, +or page numbers. +</p> + +<!-- ==================================================================== --> + +<h3 id="space" class="docs">Inserting space at the top of a new page</h3> + +<p> +Occasionally, you may want to insert space before the start of +<a href="definitions.html#running">running text</a> +on pages after the first. +</p> + +<p> +You might have tried using +<a href="typesetting.html#ald">ALD</a> +or +<a href="typesetting.html#space">SPACE</a> +and found it did nothing. This is because mom normally inhibits +any extra space before the start of running text on pages after the +first. +</p> + +<p> +If you need the space, you must use the macro ADD_SPACE in +conjunction with +<a href="typesetting.html#newpage">NEWPAGE</a>. +</p> + +<!-- -ADD_SPACE- --> + +<div class="macro-id-overline"> +<h3 id="add-space" class= "macro-id">ADD_SPACE/RESTORE_SPACE</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>ADD_SPACE</b> <kbd class="macro-args"><amount of space></kbd> +<br/> +Macro: <b>RESTORE_SPACE</b> +</div> + +<p class="requires"> +• Requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +If your +<a href="#doctype">DOCTYPE</a> +is DEFAULT, CHAPTER, NAMED, or LETTER, ADD_SPACE takes as its +single argument the distance you want mom to advance from the normal +baseline position at the top of any page <i>after the first</i> (i.e. +the one on which the docheader is normally printed). A +<a href="definitions.html#unitofmeasure">unit of measure</a> is +required. +</p> + +<p> +For example, say you wanted to insert 2 inches of space before the +start of +<a href="definitions.html#running">running text</a> +on a page other than the first. You’d accomplish it with +<br/> +<span class="pre-in-pp"> + .NEWPAGE + .ADD_SPACE 2i +</span> +which would terminate your current page, break to a new page, print +the header (assuming headers are on) and insert 2 inches of space +before the start of running text. +</p> + +<p> +Since adding space in this way is almost sure to disrupt mom’s +ability to guarantee perfectly flush bottom margins, I highly +recommend using the +<a href="docprocessing.html#shim">SHIM</a> +or +<a href="docprocessing.html#flex">FLEX</a> +macro immediately after ADD_SPACE, which will add the space plus +whatever correction is required by the +<a href="docprocessing.html#vertical-whitespace-management">vertical whitespace management</a> +strategy in effect. +</p> + +<p> +If your +<a href="#doctype">DOCTYPE</a> +is SLIDES, ADD_SPACE may be used on any slide <i>including the +first</i> to introduce additional white space at the top. +</p> + +<h4 class="docs doc-param-macros" style="margin-top: .5em">RESTORE_SPACE</h4> + +<p style="margin-top: .5em"> +You may sometimes find that mom refuses to respect +<a href="typesetting.html#space">SP</a>, +<a href="typesetting.html#index-aldrld">ALD/RLD</a>, +<a href="docprocessing.html#shim">SHIM</a>, +or +<a href="docprocessing.html#flex">FLEX</a> +after the first element (line of text, floated material) output +at the top of a page. Should this happen, insert the macro +RESTORE_SPACE before issuing the spacing command. +</p> + +<!-- *** --> + +<h2 id="intro-doc-param" class="macro-group">Changing document-wide typesetting parameters after START</h2> + +<p> +In the normal course of things, you establish the basic type style +parameters of a document prior to invoking +<a href="#start">START</a>, +using the +<a href="typesetting.html#macros-typesetting">typesetting macros</a> +(<b>L_MARGIN, FAMILY, PT_SIZE, LS,</b> etc). After START, you must +use the following macros if you wish to make global changes to the +basic type style parameters, for example changing the overall leading or +the justification style. +</p> + +<div class="box-important"> +<p class="tip"> +<span class="important">Important:</span> +Because these macros globally update the chosen parameter, they +should only be used immediately prior to +<a href="rectoverso.html#collate">COLLATE</a> +or, if an occasional effect is desired, +<a href="typesetting.html#newpage">NEWPAGE</a>. +<a href="#doc-pt-size">DOC_PT_SIZE</a>, +for example, updates the point size of every page element, including +headers, footers, page numbers, and so on, which is almost certainly +not what you want in the middle of a page. +</p> +</div> + +<div class="macro-list-container"> +<h3 id="index-doc-param" class="macro-list">Post-START global style change macros</h3> +<ul class="macro-list"> + <li><a href="#doc-left-margin">DOC_LEFT_MARGIN</a></li> + <li><a href="#doc-right-margin">DOC_RIGHT_MARGIN</a></li> + <li><a href="#doc-line-length">DOC_LINE_LENGTH</a></li> + <li><a href="#doc-family">DOC_FAMILY</a></li> + <li><a href="#doc-pt-size">DOC_PT_SIZE</a></li> + <li><a href="#doc-lead">DOC_LEAD</a></li> + <li><a href="#doc-lead-adjust">DOC_LEAD_ADJUST</a></li> + <li><a href="#doc-quad">DOC_QUAD</a></li> +</ul> +</div> + +<!-- -DOC_LEFT_MARGIN --> + +<div class="macro-id-overline"> +<h3 id="doc-left-margin" class="macro-id">DOC_LEFT_MARGIN</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>DOC_LEFT_MARGIN</b> <kbd class="macro-args"><left margin></kbd> +</div> + +<p class="requires"> +• Requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<h4 class="docs doc-param-macros">Arguments and behaviour</h4> + +<ul class="doc-param-macros"> + <li>the argument is the same as for + <a href="typesetting.html#l-margin">L_MARGIN</a> + </li> + <li>changes all left margins, including headers, footers, and page + numbers to the new value + </li> + <li>any document elements that use a left indent calculate + the indent from the new value + </li> + <li>the line length remains the same (i.e., the right margin + shifts when you change the left margin) + </li> +</ul> + +<!-- -DOC_RIGHT_MARGIN --> + +<div class="macro-id-overline"> +<h3 id="doc-right-margin" class="macro-id">DOC_RIGHT_MARGIN</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>DOC_RIGHT_MARGIN</b> <kbd class="macro-args"><right margin></kbd> +</div> + +<p class="requires"> +• Requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<h4 class="docs doc-param-macros">Arguments and behaviour</h4> + +<ul class="doc-param-macros"> + <li>the argument is the same as for + <a href="typesetting.html#r-margin">R_MARGIN</a> + </li> + <li>changes all right margins, including headers, footers, and + page numbers to the new value; + </li> + <li>any document elements that use a right indent calculate + the indent from the new value + </li> +</ul> + +<!-- -DOC_RIGHT_MARGIN --> + +<div class="macro-id-overline"> +<h3 id="doc-line-length" class="macro-id">DOC_LINE_LENGTH</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>DOC_LINE_LENGTH</b> <kbd class="macro-args"><length></kbd> +</div> + +<p class="requires"> +• Requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<h4 class="docs doc-param-macros">Arguments and behaviour</h4> + +<ul class="doc-param-macros"> + <li>the argument is the same as for + <a href="typesetting.html#linelength">LL</a> + </li> + <li>exactly equivalent to changing the right margin with + DOC_RIGHT_MARGIN (see + <a href="#doc-right-margin">above</a>); + </li> +</ul> + +<!-- -DOC_FAMILY- --> + +<div class="macro-id-overline"> +<h3 id="doc-family" class="macro-id">DOC_FAMILY</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>DOC_FAMILY</b> <kbd class="macro-args"><family></kbd> +</div> + +<h4 class="docs doc-param-macros" style="margin-top: 1em;">Arguments and behaviour</h4> + +<ul class="doc-param-macros"> + <li>the argument is the same as for + <a href="typesetting.html#family">FAMILY</a> + </li> + <li>globally changes the type family for + <ul> + <li style="margin-left: -.5em;">the <a href="definitions.html#docheader">docheader</a></li> + <li style="margin-left: -.5em;">all <a href="docelement.html#index-docelement">document element tags</a>, including footnotes</li> + <li style="margin-left: -.5em;"><a href="definitions.html#header">headers and/or footers</a></li> + <li style="margin-left: -.5em;"><a href="docelement.html#number-lines-intro">line numbering</a></li> + <li style="margin-left: -.5em;"><a href="headfootpage.html#pagination">page numbering</a></li> + </ul></li> + <li>does <i>not</i> change the family of + <ul> + <li><a href="cover.html#doc-cover">document cover pages</a></li> + <li><a href="cover.html#cover">cover pages</a></li> + <li><a href="docelement.html#endnote-intro">endnotes pages</a></li> + <li><a href="docelement.html#toc-intro">table of contents</a></li> + </ul></li> + <li>any page elements (e.g. headers page numbers, footnotes) whose + families you wish to remain at their old values must be + reset with the appropriate + <a href="docelement.html#docelement-control">control macros</a> + </li> +</ul> + +<!-- -DOC_PT_SIZE- --> + +<div class="macro-id-overline"> +<h3 id="doc-pt-size" class="macro-id">DOC_PT_SIZE</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>DOC_PT_SIZE</b> <kbd class="macro-args"><point size></kbd> +</div> + +<p class="requires"> +• Does not require a <a href="definitions.html#unitofmeasure">unit of measure</a>; points is assumed +</p> + +<h4 class="docs doc-param-macros">Arguments and behaviour</h4> + +<ul class="doc-param-macros"> + <li>the argument is the same as for + <a href="typesetting.html#ps">PT_SIZE</a>, + and refers to the point size of type in paragraphs + </li> + <li>all automatic point size changes (heads, quotes, + footnotes, headers, etc.) are affected by the new size; + anything you do not want affected must be reset to + its former value (see the Control Macros section of + the pertinent document element for instructions on + how to do this) + </li> + <li>if + <a href="typesetting.html#autolead">AUTOLEAD</a> + was invoked before START; the value of AUTOLEAD will be used + to update the leading of all document element tags except + FOOTNOTE and EPIGRAPH + </li> +</ul> + +<!-- -DOC_LEAD- --> + +<div class="macro-id-overline"> +<h3 id="doc-lead" class="macro-id">DOC_LEAD</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>DOC_LEAD</b> <kbd class="macro-args"><points> [ ADJUST ]</kbd> +</div> + +<p class="requires"> +• Does not require a <a href="definitions.html#unitofmeasure">unit of measure</a>; points is assumed +</p> + +<h4 class="docs doc-param-macros">Arguments and behaviour</h4> + +<ul class="doc-param-macros"> + <li>the argument is the same as for + <a href="typesetting.html#leading">LS</a>, + and refers to the + <a href="definitions.html#lead">leading</a> + of paragraphs + </li> + <li>because paragraphs will have a new leading, the leading and + spacing of most running text is influenced by the new value + </li> + <li>epigraphs and footnotes remain unaffected; + if you wish to change their leading, use + <a href="docelement.html#epigraph-autolead">EPIGRAPH_AUTOLEAD</a> + and + <a href="docelement.html#footnote-autolead">FOOTNOTE_AUTOLEAD</a>. + </li> + <li>the optional argument <kbd>ADJUST</kbd> performs + leading adjustment as explained in + <a href="#doc-lead-adjust">DOC_LEAD_ADJUST</a> + </li> + <li>if + <a href="typesetting.html#autolead">AUTOLEAD</a> + was invoked before START; the value of that AUTOLEAD will be + cancelled + </li> +</ul> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Even if you don’t pass DOC_LEAD the optional argument +<kbd>ADJUST</kbd>, mom will still adjust the leading of endnotes +pages and toc pages. See +<a href="docelement.html#endnote-lead">ENDNOTE_LEAD</a> +and +<a href="docelement.html#toc-lead">TOC_LEAD</a> +for an explanation of how to disable this default behaviour. +</p> +</div> + +<!-- -DOC_QUAD- --> + +<div class="macro-id-overline"> +<h3 id="doc-quad" class="macro-id">DOC_QUAD</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>DOC_QUAD</b> <kbd class="macro-args">L | R | C | J</kbd> +</div> + +<h4 class="docs doc-param-macros" style="margin-top: 1em;">Arguments and behaviour</h4> + +<ul class="doc-param-macros"> + <li>the arguments are the same as for + <a href="typesetting.html#quad">QUAD</a> + </li> + <li>affects paragraphs, epigraphs and footnotes; does not + affect blockquotes + </li> +</ul> + +<h2 id="terminating" class="macro-group">Terminating a document</h2> + +<p> +You need do nothing special to terminate a document. When groff +finishes processing the last +<a href="definitions.html#inputline">input line</a> +of a file, the page is ejected, subject to whatever routines are +needed to complete it (e.g. printing footnotes or adding the page +number). +</p> + +<p> +It happens sometimes, however, that a last line of +<a href="definitions.html#running">running text</a>, +falling on or very near the bottom of the page, tricks groff into +breaking to a new page before terminating. The result is a blank +page at the end of the formatted document. +</p> + +<p> +The situation is rare, generally occurring only when some additional +macro is required after the input text, e.g. to exit a +<a href="docelement.html#list-intro">list</a> +or terminate a +<a href="docelement.html#quote">quote</a>. +To prevent it from ever happening, I recommend getting into the habit +of following the final input line of all your mom files with +<a href="typesetting.html#el"><kbd>.EL</kbd></a>. +Depending on the +<a href="definitions.html#filled">fill mode</a> +in effect, you may also have to append the “join line” +<a href="definitions.html#inlines">escape</a>, +<kbd>\c</kbd>, to the final line.</p> + +<p> +Thus, for normal text at the end of a paragraph, which is in fill +mode, +<br/> +<span class="pre-in-pp"> + and they all lived happily ever after. + .EL +</span> +or for ending a +<a href="docelement.html#list-intro">LIST</a> +(also in fill mode) +<span class="pre-in-pp"> + .ITEM + peaches, pears, plums + .EL + .LIST OFF +</span> +whereas, at the end of a +<a href="docelement.html#quote-intro">QUOTE</a> +(which is in nofill mode), +<span class="pre-in-pp"> + Shall be lifted\[em]nevermore!\c + .EL + .QUOTE OFF +</span> +Notice that the <kbd>.EL</kbd> comes after the last line of input +text, not any macros following. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +<a href="inlines.html#b"><kbd><span class="nobr">\*[B]</span></kbd></a> +cannot be used as a replacement for <kbd>.EL</kbd> when terminating +a document. +</p> +</div> + +<!-- Navigation links --> +<table style="width: 100%; margin-top: 12px;"> +<tr> + <td style="width: 33%;"><a href="toc.html">Back to Table of Contents</a></td> + <td style="width: 24%; text-align: center;"><a href="#top">Top</a></td> + <td style="width: 43%; text-align: right;"><a href="docelement.html#top">Next: The document element tags</a></td> +</tr> +</table> + +</div> + +<div class="bottom-spacer"><br/></div> + +</body> +</html> diff --git a/contrib/mom/momdoc/goodies.html b/contrib/mom/momdoc/goodies.html new file mode 100644 index 0000000..7c39e14 --- /dev/null +++ b/contrib/mom/momdoc/goodies.html @@ -0,0 +1,1785 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004-2020 Free Software Foundation, Inc. +Written by Peter Schaffter (peter@schaffter.ca). + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"/> + <title>Mom -- Goodies</title> + <link rel="stylesheet" type="text/css" href="stylesheet.css" /> +</head> + +<body style="background-color: #f5faff;"> + +<!-- ==================================================================== --> + +<div id="top" class="page"> + +<!-- Navigation links --> +<table style="width: 100%;"> +<tr> + <td><a href="toc.html">Back to Table of Contents</a></td> + <td style="text-align: right;"><a href="inlines.html#top">Next: Inline escapes</a></td> +</tr> +</table> + +<h1 id="goodies" class="docs">Goodies</h1> + +<p> +The macros in this section are a collection of useful (and sometimes +nearly indispensable) routines to simplify typesetting. +</p> + +<div id="goodies-macros-mini-toc" style="margin-top: -1em; font-size: 95%;"> +<div class="mini-toc-col-1"> +<ul class="no-enumerator"> +<li class="list-head-goodies"><a href="#alias">ALIAS</a> <span class="normal-smaller">– rename macros</span></li> +<li class="list-head-goodies"><a href="#caps">CAPS</a> <span class="normal-smaller">– convert to upper case</span></li> +<li class="list-head-goodies"><a href="#center-block">CENTER_BLOCK</a> <span class="normal-smaller">– centre blocks of type with quad intact</span></li> +<li class="list-head-goodies"><a href="#esc-char">ESC_CHAR</a> <span class="normal-smaller">– change the escape character to something other than a backslash</span></li> +<li class="list-head-goodies"><a href="#hang">HANG</a> <span class="normal-smaller">– hang character(s) outside right margin (inline escape)</span></li> +<li class="list-head-goodies"><a href="#left-hang">LEFT_HANG</a> <span class="normal-smaller">– hang character(s) outside left margin</span></li> +<li class="list-head-goodies"><a href="#silent">SILENT</a> <span class="normal-smaller">– hide input lines from output</span></li> +<li class="list-head-goodies"><a href="#sizespecs">SIZESPECS</a> <span class="normal-smaller">– get cap-height, x-height and descender depth of a font</span></li> +<li class="list-head-goodies"><a href="#smartquotes">SMARTQUOTES</a> <span class="normal-smaller">– convert typewriter doublequotes to proper doublequotes</span></li> +<li class="list-head-goodies"><a href="#string">STRING</a> <span class="normal-smaller">– user-definable strings</span></li> +<li class="list-head-goodies"><a href="#trap">TRAP</a> <span class="normal-smaller">– suspend/re-invoke traps</span></li> +<li class="list-head-goodies no-anchor"><span style="font-size: 90%;">Underscoring/underlining</span> +<ul class="sublist"> + <li class="list-head-goodies text-color"><a href="#underscore">UNDERSCORE</a> <span class="normal-smaller">– single underscore</span> + <ul class="sublist sub"> + <li class="list-head-goodies text-color"><a href="#underscore-weight">Controlling the weight of underscores</a></li> + <li class="list-head-goodies text-color"><a href="#underscore-color">Colourising underscores</a></li> + </ul></li> + <li class="list-head-goodies text-color"><a href="#underscore2">UNDERSCORE2</a> <span class="normal-smaller">– double underscore</span></li> + <li class="list-head-goodies text-color"><a href="#underline">UNDERLINE</a> + <ul class="sublist sub"> + <li class="list-head-goodies text-color"><a href="#ul">\*[UL]</a> <span class="normal-sub-sub">– inline escape to underline</span></li> + </ul></li> +</ul></li> +<li class="list-head-goodies no-anchor"><span style="font-size: 90%;">Padding</span> +<ul class="sublist"> + <li class="list-head-goodies text-color"><a href="#pad">PAD</a> <span class="normal-smaller">– insert equalized whitespace into lines</span> + <ul class="sublist sub"> + <li class="list-head-goodies text-color"><a href="#pad-marker">PAD_MARKER</a> <span class="normal-sub-sub">– change/set the marker used with PAD</span></li> + </ul></li> +</ul></li> +</ul> +</div> +<div class="mini-toc-col-2"> +<ul class="no-enumerator"> +<li class="list-head-goodies no-anchor"><span style="font-size: 90%;">Leaders</span> +<ul class="sublist"> + <li class="list-head-goodies text-color"><a href="#leader">\*[LEADER]</a> <span class="normal-smaller">– inline escape to add leaders to a line</span></li> + <li class="list-head-goodies text-color"><a href="#leader-character">LEADER_CHARACTER</a> <span class="normal-smaller">– change/set the leader character</span></li> +</ul></li> +<li class="list-head-goodies no-anchor"><span style="font-size: 90%;">Drop caps</span> +<ul class="sublist"> + <li class="list-head-goodies text-color"><a href="#dropcap">DROPCAP</a> <span class="normal-smaller">– set a drop cap</span></li> + <li class="list-head-goodies text-color" style="list-style-type: none;"><a href="#dropcap-support"><span class="normal-smaller" style="font-weight: bold;">Support macros for DROPCAP</span></a> + <ul class="sublist sub"> + <li class="list-head-goodies text-color"><a href="#dropcap-family">DROPCAP_FAMILY</a> <span class="normal-sub-sub">– change drop cap family</span></li> + <li class="list-head-goodies text-color"><a href="#dropcap-font">DROPCAP_FONT</a> <span class="normal-sub-sub">– change drop cap font</span></li> + <li class="list-head-goodies text-color"><a href="#dropcap-adjust">DROPCAP_ADJUST</a> <span class="normal-sub-sub">– alter size of drop cap</span></li> + <li class="list-head-goodies text-color"><a href="#dropcap-color">DROPCAP_COLOR</a> <span class="normal-sub-sub">– change colour of drop cap</span></li> + <li class="list-head-goodies text-color"><a href="#dropcap-gutter">DROPCAP_GUTTER</a> <span class="normal-sub-sub">– change space between drop cap and running text</span></li> + </ul></li> +</ul></li> +<li class="list-head-goodies text-color no-anchor"><span style="font-size: 90%;">Superscripts</span> +<ul class="sublist"> + <li class="list-head-goodies text-color"><a href="#sup">\*[SUP]</a> <span class="normal-smaller">– inline escape to set superscripts</span> + <ul class="sublist sub"> + <li class="list-head-goodies text-color"><a href="#sup-raise">SUPERSCRIPT_RAISE_AMOUNT</a> <span class="normal-sub-sub">(control superscript raise amount</span></li> + <li class="list-head-goodies text-color"><a href="#cond-or-ext-sup">\*[CONDSUP]</a> <span class="normal-sub-sub">– condensed superscripts</span></li> + <li class="list-head-goodies text-color"><a href="#cond-or-ext-sup">\*[EXTSUP]</a> <span class="normal-sub-sub">– extended superscripts</span></li> + </ul></li> +</ul></li> +</ul> +</div> +</div> + +<div class="rule-medium" style="padding-bottom: 1em;"><hr/></div> + +<!-- -ALIAS- --> + +<div class="macro-id-overline"> +<h3 id="alias" class="macro-id">Rename macros</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>ALIAS</b> <kbd class="macro-args"><new name> <old name></kbd> +</div> + +<p> +The ALIAS macro may well be your best friend. With it, you can +change the name of a macro to anything you like (provided the new +name is not already being used by mom). +</p> + +<p> +Groff has always been a bit intimidating for new users because +its standard macro packages use very terse macro names. Mom +doesn’t like people to feel intimidated; she wants them +to feel welcome. Consequently, she tries for easy-to-grasp, +self-explanatory macro names. However, mom knows that people have +their own ways of thinking, their own preferences, their own habits. +Some of her macro names may not suit you; they might be too long, +or aren’t what you automatically think of when you want to +do a particular thing, or might conflict with habits you’ve +developed over the years. +</p> + +<p> +If you don’t like one of mom’s macro names, say, +PAGEWIDTH, change it, like this: +<br/> +<span class="pre-in-pp"> + .ALIAS PW PAGEWIDTH + | | + new--+ +--official + name name +</span> +The first argument to ALIAS is the new name you want for a macro. +The second is the “official” name by which the macro is +normally invoked. After ALIAS, either can be used. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="tip">Tip:</span> +A particularly good candidate for ALIAS is the macro +<a href="typesetting.html#ps">PT_SIZE</a>. +A more natural name for it would simply be PS, but PS conflicts +with the <b>eqn</b> equation preprocessor and thus mom uses the +longer form. However, if you’re not using <b>eqn</b>, you can +happily rename PT_SIZE to +PS: +<br/> +<span class="pre-in-pp"> + .ALIAS PS PT_SIZE +</span> +</p> +</div> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If you use ALIAS a lot, and always for the same things, consider +creating an aliases file of the form +<br/> +<span class="pre-in-pp"> + .ALIAS <new name> <old name> + .ALIAS <new name> <old name> + .ALIAS <new name> <old name> + ...etc +</span> +Put the file someplace convenient and source it (include it) at the +beginning of your documents with the +<a href="docprocessing.html#include">INCLUDE</a> +macro. Assuming that you’ve created an aliases file called +<b>mom-aliases</b> in your home directory under a directory called +<b>Mom</b>, you’d source it by placing +<br/> +<span class="pre-in-pp"> + .INCLUDE /home/<username>/Mom/mom-aliases +</span> +at the top of your documents. +</p> + +<p class="tip-bottom"> +If you share documents that make use of an alias file, remember that +other people don’t have the file. Paste the whole thing at +the top of your documents, please. +</p> +</div> + +<div class="box-tip"> +<p class="tip"> +<span class="experts">Experts:</span> +ALIAS is an alias of <kbd>.als</kbd>. You can use either, or mix +’n’ match with impunity. +</p> +</div> + +<!-- -SILENT- --> +<div class="macro-id-overline"> +<h3 id="silent" class="macro-id">Hide input lines from output</h3> +</div> + +<div class="box-macro-args"> + Macro: <b>SILENT</b> <kbd class="macro-args">toggle</kbd> +</div> + +<p class="alias" style="margin-bottom: 0;"> +<i>Alias:</i> <b>COMMENT</b> +</p> + +<p> +Sometimes, you want to “hide” +<a href="definitions.html#inputline">input lines</a> +from final output. This is most likely to be the case when setting +up string tabs (see the +<a href="typesetting.html#string-tabs-tut">quickie tutorial on string tabs</a> +for an example), but there are other places where you might want +input lines to be invisible as well. Any place you don’t want +input lines to appear in the output, use the SILENT macro. +</p> + +<p> +SILENT is a toggle. Invoking it without an argument turns it on; +any argument turns it off. E.g., +<br/> +<span class="pre-in-pp"> + .SILENT + A line of text + .SILENT OFF +</span> +The line “A line of text” will not appear in the +output copy. +</p> + +<p> +SILENT is aliased as COMMENT. If you want to insert non-printing +comments into your documents, you may prefer this. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="tip">Tip:</span> +SILENT does not automatically break an +<a href="definitions.html#inputline">input line</a> +(see +<a href="typesetting.html#br">BR</a>) +when you’re in one of the +<a href="definitions.html#filled">fill modes</a> +(<a href="typesetting.html#justify">JUSTIFY</a> +or +<a href="typesetting.html#quad">QUAD L | R | C | J</a>). +The same applies to tabs +(<a href="typesetting.html#tab-set">typesetting</a> +or +<a href="typesetting.html#st">string</a>) +to which you’ve passed the J or QUAD argument. You must +insert <kbd>.BR</kbd> yourself, or risk a portion of your text +disappearing into a black hole. +</p> +</div> + +<!-- -TRAP- --> + +<div class="macro-id-overline"> +<h3 id="trap" class="macro-id">Suspend / re-invoke traps</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>TRAP</b> <kbd class="macro-args">toggle</kbd> +</div> + +<p> +Traps are vertical positions on the output page at which +you or mom have instructed groff to start doing something +automatically. Commonly, this is near the bottom of the page, where +behind-the-scenes processing is needed in order for one page to +finish and another to start. +</p> + +<p> +Sometimes, traps get sprung when you don’t want them. If this +happens, surround just the offending macros and input lines with +<br/> +<span class="pre-in-pp"> + .TRAP OFF + ... + .TRAP +</span> +TRAP is a toggle, therefore any argument turns it off (i.e., suspends +the trap), and no argument turns it (back) on. +</p> + +<!-- -SMARTQUOTES- --> + +<div class="macro-id-overline"> +<h3 id="smartquotes" class="macro-id">Convert typewriter doublequotes to proper doublequotes</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>SMARTQUOTES</b> <kbd class="macro-args">[<off>] [ ,, | >> | << ]</kbd> +</div> + +<span style="margin-left: .5em">or</span> + +<div class="box-macro-args"> +Macro: <b>SMARTQUOTES</b> <kbd class="macro-args">DA | DE | ES | FR | IT | NL | NO | PT | SV</kbd> +</div> + +<p> +If you invoke SMARTQUOTES without an argument, mom converts all +instances of the inch-mark, (<kbd>"</kbd>), also called +a doublequote, into the appropriate instances of true Anglo-American +open-and close-doublequotes. (See +<a href="#sq-international">Internationalization</a> +for how to get SMARTQUOTES to behave correctly for non-English +quoting styles.) +</p> + +<p> +Typographically, there is a difference between the inch-mark and +quotation marks—a big difference. Sadly, typewriters and computer +keyboards supply only one: the inch-mark. While using inches for +doublequotes is, and always has been, acceptable in typewriter-style +copy, it has never been, and, God willing, never will be acceptable in +typeset copy. Failure to turn inches into quotes is the first thing +a professional typesetter notices in documents prepared by amateurs. +And you don’t want to look like an amateur, do you? +</p> + +<h3 id="sq-international" class="docs">Internationalization</h3> +<p> +If you invoke SMARTQUOTES with one of the optional arguments +(<kbd>,,</kbd> or <kbd>>></kbd> +or <kbd><<</kbd>) you can use +<kbd>"</kbd> (i.e. the inch-mark/doublequotes key) +as “cheap” open-and close-quotes when inputting text in +a language other than English, and have mom convert them, on output, +into the chosen open-and close-quote style. +</p> + +<p> +<kbd>,,</kbd> opens quotes with “lowered +doublequotes” and closes them with “raised +doublequotes”, as in this ascii approximation: +<br/> +<span class="pre-in-pp"> + ,,Hilfe !`` +</span> + +<kbd>>></kbd> opens quotes with guillemets +pointing to the right, and closes them with guillemets pointing to +the left, as in this ascii approximation: +<br/> +<span class="pre-in-pp"> + >>Zurück !<< +</span> +<kbd><<</kbd> opens quotes with guillemets +pointing to the left, and closes them with guillemets pointing to +the right, as in this ascii approximation: +<br/> +<span class="pre-in-pp"> + <<Mais monsieur! Je ne suis pas ce genre de fille!>> +</span> +Please note: the above arguments to SMARTQUOTES are literal +ASCII characters. <kbd>,,</kbd> is two commas; +<kbd><<</kbd> is two less-than signs; +<kbd>>></kbd> is two greater-than signs. +</p> + +<p> +Alternatively, you can pass SMARTQUOTES the two-letter, ISO 639 +abbreviation for the language you’re writing in, and mom will +output the correct quotes. +<br/> +<span class="pre-in-pp"> + .SMARTQUOTES DA = Danish >>text<< + .SMARTQUOTES DE = German ,,text`` + .SMARTQUOTES ES = Spanish ``text´´ + .SMARTQUOTES FR = French << text >> + .SMARTQUOTES IT = Italian << text >> + .SMARTQUOTES NL = Dutch ´´text´´ + .SMARTQUOTES NO = Norwegian <<text>> + .SMARTQUOTES PT = Portuguese <<text>> + .SMARTQUOTES SV = Swedish >>text>> +</span> +</p> + +<p> +Turn SMARTQUOTES off by passing it any argument not in the argument +list (e.g. <kbd>OFF</kbd>, <kbd>QUIT</kbd>, <kbd>X</kbd>, etc) +</p> + +<p> +If you’re using the +<a href="docprocessing.html#docprocessing">document processing macros</a> +with +<a href="docprocessing.html#printstyle">PRINTSTYLE TYPESET</a>, +smartquotes are on by default (in the Anglo-American style); with +<a href="docprocessing.html#printstyle">PRINTSTYLE TYPEWRITE</a>, +it’s off by default (and should probably stay that way). +</p> + +<p> +Finally, if you’re fussy about the kerning of quote marks in +relation to the text they surround, or have special quoting needs, +you have to enter quote marks by hand using groff’s native +<a href="definitions.html#inlines">inline escapes</a> +for special characters (see <kbd>man groff-char</kbd> +for a complete list of special characters). Entering quote marks +this way allows you to use mom’s +<a href="inlines.html#inline-kerning-mom">inline kerning escapes</a> +to fine-tune the look of quotes. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +SMARTQUOTES does not work on single quotes, which most people +input with the apostrophe (found at the right-hand end of the +“home row” on a QWERTY keyboard). Groff will interpret +all instances of the apostrophe as an apostrophe, making the symbol +useless as an open-single-quote. For open single quotes, input +the backtick character typically found under the tilde on most +keyboards. Here’s an example of correct input copy with +single quotes: +<br/> +<span class="pre-in-pp"> + "But she said, `I don’t want to!'" +</span> +</p> + +<p class="tip-bottom" style="margin-top: -1em;"> +<span class="additional-note">Additional note:</span> +Whether or not you have SMARTQUOTES turned on, get into the habit of +entering the foot-and inch-marks, when you need them, with the +<a href="definitions.html#inlines">inline escapes</a> +<kbd><span class="nobr">\*[FOOT]</span></kbd> and +<kbd><span class="nobr">\*[INCH]</span></kbd>, instead of +<kbd>'</kbd> and <kbd>"</kbd>. +</p> +</div> + +<!-- -CAPS- --> + +<div class="macro-id-overline"> +<h3 id="caps" class="macro-id">Convert to upper case</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>CAPS</b> <kbd class="macro-args">toggle</kbd> +</div> + +<p> +CAPS converts all lower case letters to upper case. +Primarily, it’s a support macro used by the +<a href="docprocessing.html#docprocessing">document processing macros</a>, +but you may find it helpful on occasion. CAPS is a toggle, therefore +no argument turns it on, any argument (<kbd>OFF</kbd>, +<kbd>QUIT</kbd>, <kbd>X</kbd>, etc) turns it off. +<br/> +<span class="pre-in-pp"> + .CAPS + All work and no play makes Jack a dull boy. + .CAPS OFF +</span> + +produces, on output +<br/> +<span class="pre-in-pp"> + ALL WORK AND NO PLAY MAKES JACK A DULL BOY. +</span> +If you wish to capitalise a section of type inline, use the +<a href="definitions.html#inlines">inline escapes</a>, +<a href="inlines.html#uc-lc"><kbd><span class="nobr">\*[UC]...\*[LC]</span></kbd></a> +like this: +<br/> +<span class="pre-in-pp"> + All work \*[UC]and\*[LC] no play makes Jack a dull boy. +</span> + +The above produces, on output +<br/> +<span class="pre-in-pp"> + All work AND no play makes Jack a dull boy. +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +<kbd>\*[LC]</kbd> must come after a terminating period. +<br/> +<span class="pre-in-pp"> + \*[UC]All work and no play makes Jack a dull boy.\*[LC] +</span> +not +<span class="pre-in-pp"> + \*[UC]All work and no play makes Jack a dull boy\*[LC]. +</span> +Conversely, an initial period must come <em>before</em> +<kbd>\*[UC]</kbd>, or be preceded by <kbd>\&</kbd>, like this: +<br/> +<span class="pre-in-pp"> + .\*[UC]start\*[LC] is used to begin document processing. +</span> +or +<span class="pre-in-pp"> + \*[UC]\&.start\*[LC] is used to begin document processing. +</span> +Upon output, either will produce +<br/> +<span class="pre-in-pp"> + START is used to begin document processing. +</span> +</p> +</div> + +<!-- -STRING- --> + +<div class="macro-id-overline"> +<h3 id="string" class="macro-id">User-defined strings</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>STRING</b> <kbd class="macro-args"><name> <what you want in the string></kbd> +</div> + +<p> +You may find sometimes that you have to type out portions of text +repeatedly. If you’d like not to wear out your fingers, you can +define a string that, whenever you call it by name, outputs whatever +you put into it. +</p> + +<p> +For example, say you’re creating a document that repeatedly uses +the phrase “the Montreal/Windsor corridor”. Instead +of typing all that out every time, you could define a string, like +this: +<br/> +<span class="pre-in-pp"> + .STRING mw the Montreal/Windsor corridor +</span> +Once a string is defined, you can call it any time with the +<a href="definitions.html#inlines">inline escape</a> +<kbd><span class="nobr">\*[<name>]</span></kbd>. Using the example +string above +<br/> +<span class="pre-in-pp"> + The schedule for trains along \*[mw]: +</span> +produces, on output +<br/> +<span class="pre-in-pp"> + The schedule for trains along the Montreal/Windsor corridor: +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Be very careful not to put any spaces at the ends of strings +you’re defining, unless you want them. Everything after +the name argument you pass to STRING goes into the string, +including trailing spaces. It’s a good idea to get into the +habit of using groff’s native commenting mechanism, <kbd +class="bold">\"</kbd>, immediately following any string definition +in order to avoid spaces you can’t see, like this +<br/> +<span class="pre-in-pp"> + .STRING mw the Montreal/Windsor corridor\" +</span> +</p> +</div> + +<div class="box-tip"> +<p class="tip"> +<span class="experts">Experts:</span> +STRING is an alias for <b>ds</b>. You can use either, or mix +’n’ match with impunity. +</p> +</div> + +<!-- -ESC_CHAR- --> + +<div class="macro-id-overline"> +<h3 id="esc-char" class="macro-id">Change the escape character</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>ESC_CHAR</b> <kbd class="macro-args"><new character> | <anything></kbd> +</div> + +<p> +Groff’s and mom’s default escape character is +the backslash. Sometimes, you may want to include a literal +backslash in your document. There are two ways to accomplish +this. One is simply to double the backslash character (<kbd +class="bold">\\</kbd>), which is convenient if you don’t have +a lot of backslashes to input. If you need to input a whole batch +of backslashes (say, when including code snippets in your document), +you can use ESC_CHAR to make the change permanent (until you decide +to restore the escape character to its default, the backslash). +</p> + +<p> +ESC_CHAR with a single character argument changes the escape +character to whatever the argument is. ESC_CHAR with no argument +restores the escape character to the backslash. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="important">Important:</span> +Changing the escape character prevents macros, which require that +the backslash be the escape character, from functioning correctly. +Do not introduce any subsequent macros without first restoring the +escape character to its default. +</p> +</div> + +<div class="box-tip"> +<p class="tip"> +<span class="experts">Experts:</span> +ESC_CHAR is an alias of <kbd>.ec</kbd>. Mix ’n’ match +the two with impunity. +</p> +</div> + +<!-- -SIZESPECS- --> + +<div class="macro-id-overline"> +<h3 id="sizespecs" class="macro-id">Get cap-height, x-height and descender depth of a font</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>SIZESPECS</b> +</div> + +<p> +Whenever you need to get the +<a href="definitions.html#capheight">cap-height</a>, +<a href="definitions.html#xheight">x-height</a> +or +<a href="definitions.html#descender">descender</a> +depth of type at the current point size, invoke <kbd +class="bold">.SIZESPECS</kbd>, which takes no argument. +The dimensions are stored in the string registers +<b><span class="nobr">\*[$CAP_HEIGHT]</span></b>, +<b><span class="nobr">\*[$X_HEIGHT]</span></b>, +and +<b><span class="nobr">\*[$DESCENDER]</span></b>, respectively, in +<a href="definitions.html#units">machine units</a> +to which the +<a href="definitions.html#unitofmeasure">unit of measure</a>, +<b>u</b>, is already appended. +</p> + +<p> +Thus, if you wanted to advance 2 inches from your current position +on the page plus the cap-height of the current point size of type +<br/> +<span class="pre-in-pp"> + .PT_SIZE <n> + .SIZESPECS + .ALD 2i+\*[$CAP_HEIGHT] +</span> +would do the trick. +</p> + +<!-- -UNDERSCORE- --> + +<div class="macro-id-overline"> +<h3 id="underscore" class="macro-id">Single underscore</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>UNDERSCORE</b> <kbd class="macro-args">[ <distance below baseline> ] [ PREFIX <prefix> ] [ SUFFIX <suffix> ] "<string>"</kbd> +</div> + +<p class="requires"> +• <distance below baseline> requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +By default, UNDERSCORE places an underscore 2 points beneath the +required +<a href="definitions.html#stringargument">string argument</a>. +The string must be enclosed in double-quotes, like this: +<br/> +<span class="pre-in-pp"> + .UNDERSCORE "Unmonitored monopolies breed high prices and poor products" +</span> +If you wish to change the distance of the rule from the baseline, +use the optional argument +<kbd><distance below baseline></kbd> +(with a unit of measure). +<br/> +<span class="pre-in-pp"> + .UNDERSCORE 3p "Unmonitored monopolies breed high prices and poor products" +</span> +The above places the upper edge of the underscore 3 points below the +<a href="definitions.html#baseline">baseline</a>. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Tip:</span> +UNDERSCORE can also be used for strikethrough effects by supplying a +negative value to the distance argument. +</p> +</div> + +<p> +<kbd>PREFIX</kbd> and <kbd>SUFFIX</kbd> allow you to add +non-underscored punctuation (or other glyphs) to the beginning +and/or end of the underscored string. If the argument to either +<kbd>PREFIX</kbd> or <kbd>SUFFIX</kbd> contains spaces, surround the +argument with double-quotes. For example, the following underscores +the text string but not the surrounding punctuation. +<br/> +<span class="pre-in-pp"> + .UNDERSCORE PREFIX ( SUFFIX .) "Unmonitored monopolies breed high prices and poor products" +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +UNDERSCORE does not work across line breaks in output copy, which is +to say that you can’t underscore a multi-line passage simply +by putting the text of the whole thing in the string you pass to +UNDERSCORE. If you need to underscore several lines of type, use +<a href="#underline">UNDERLINE</a>. +</p> +</div> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Additional note:</span> +In +<a href="definitions.html#filled">nofill modes</a>, +UNDERSCORE causes a break before and after, meaning the underscored +word or phrase will appear as a separate line in your output. If +you wish to embed an underscored word or phrase into non-filled +text, temporarily change to the corresponding fill mode with +<a href="typesetting.html#quad">QUAD</a> +and insert breaks manually with +<a href="typesetting.html#br">BR</a> +as appropriate, reverting to the original nofill mode afterwards. +</p> +</div> + +<h3 id="underscore-weight" class="docs">Controlling the weight of underscores</h3> +<p> +The weight (thickness) of underscores may be controlled with the +macro UNDERSCORE_WEIGHT. Thus, if you want underscores with a +weight of 1-1/2 points, you’d invoke: +<br/> +<span class="pre-in-pp"> + .UNDERSCORE_WEIGHT 1.5 +</span> +prior to invoking <kbd>.UNDERSCORE</kbd>. Every +subsequent instance of <kbd>.UNDERSCORE</kbd> will use +this weight. +</p> + +<p> +Mom’s default underscore weight is 1/2 point. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +UNDERSCORE_WEIGHT also sets the weight of +<a href="#UNDERSCORE2">double underscores.</a> +</p> +</div> + +<h3 id="underscore-color" class="docs">Colourising underscored text</h3> +<p> +If you want underscored text to be in a different colour from the +text around it, use the +<a href="color.html#color">COLOR</a> +macro rather than the +<a href="color.html#color-inline">inline escape for changing colour</a>. +In other words, assuming your prevailing text colour is black and +you want underscored text in red +<br/> +<span class="pre-in-pp"> + .COLOR red + .UNDERSCORE "text to underscore" + .COLOR black +</span> +rather than +<br/> +<span class="pre-in-pp"> + .UNDERSCORE "\*[red]text to underscore\*[black]" +</span> +The latter will render the text in red but the underscore in black. +You can, of course, use this to create rainbow effects if that's +what you want, e.g. text in red, underscore in blue, and prevailing +type in black: +<br/> +<span class="pre-in-pp"> + .UNDERSCORE "\*[red]text to underscore\*[blue]" + .COLOR black +</span> +</p> + +<!-- -UNDERSCORE2- --> + +<div class="macro-id-overline"> +<h3 id="underscore2" class="macro-id">Double underscore</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>UNDERSCORE2</b> <kbd class="macro-args">[ <distance below baseline> [ <distance between rules> ] [ PREFIX <prefix> ] [ SUFFIX <suffix> ] "<string>"</kbd> +</div> + +<p class="requires"> +• <distance below baseline> +and +<distance between rules> +require a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +By default, UNDERSCORE2 places a double underscore 2 points beneath +the required +<a href="definitions.html#stringargument">string argument</a>. +The string must be enclosed in double-quotes, like this: +<br/> +<span class="pre-in-pp"> + .UNDERSCORE2 "Unmonitored monopolies breed high prices and poor products" +</span> +The default distance between the two rules is 2 points, measured +from the bottom edge of the upper rule to the top edge of the lower +one. +</p> + +<p> +If you wish to change the distance of the double underscore from the +<a href="definitions.html#baseline">baseline</a>, +use the optional argument +<kbd><distance below baseline></kbd> +(with a unit of measure), e.g. +<br/> +<span class="pre-in-pp"> + .UNDERSCORE2 3p "Unmonitored monopolies breed high prices and poor products" +</span> +which places the upper edge of the first rule of the double +underscore 3 points below the baseline. +</p> + +<p> +If you wish to change the distance between the two rules as well, +use the second optional argument +<kbd><distance between rules></kbd> +(with a unit of measure). The distance between the two rules +is measured from the bottom edge of the upper rule to the top +edge of the lower one. Be aware that you must give a value for +<kbd><distance below baseline></kbd> if you want to +use <kbd><distance between rules></kbd>. +</p> + +<p> +<kbd>PREFIX</kbd> and <kbd>SUFFIX</kbd> allow you to add +non-underscored punctuation (or other glyphs) to the beginning +and/or end of the double-underscored string. If the argument to +either <kbd>PREFIX</kbd> or <kbd>SUFFIX</kbd> contains spaces, +surround the argument with double-quotes. For example, the +following double-underscores the text string but not the surrounding +punctuation. +<br/> +<span class="pre-in-pp"> + .UNDERSCORE2 PREFIX ( SUFFIX .) "Unmonitored monopolies breed high prices and poor products" +</span> +The weight (thickness) of double underscores may be controlled with +the macro +<a href="#underscore-weight">UNDERSCORE_WEIGHT</a> +(q.v). +</p> + +<p> +See +<a href="#underscore-color">here</a> +for advice on colourising double-underscored text. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +In +<a href="definitions.html#filled">nofill modes</a>, +UNDERSCORE2 causes a break before and after, meaning the double-underscored +word or phrase will appear as a separate line in your output. If +you wish to embed a double-underscored word or phrase into non-filled +text, temporarily change to the corresponding fill mode with +<a href="typesetting.html#quad">QUAD</a> +and insert breaks manually with +<a href="typesetting.html#br">BR</a> +as appropriate, reverting to the original nofill mode afterwards. +</p> +</div> + +<!-- -UNDERLINE- --> +<div class="macro-id-overline"> +<h3 id="underline" class="macro-id">Underline</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>UNDERLINE</b> <kbd class="macro-args">toggle</kbd> +</div> + +<p> +The distinction between underscoring and underlining is that +underscoring is suitable for occasional effects (a word here, +a phrase there), whereas underlining underlines whole passages +of type. Furthermore, you cannot colourise underlining. +There’s a special macro, +<a href="#underline-specs">UNDERLINE_SPECS</a>, +to control the weight and distance from the baseline of the +underline. +</p> + +<p> +Lastly, files that use UNDERLINE must be processed with +<br/> +<span class="pre-in-pp"> + pdfmom -Tps filename.mom | ps2pdf - filename.pdf +</span> +since groff’s pdf driver does not recognize UNDERLINE. +</p> + +<p> +Note that +<a href="docprocessing.html#printstyle">PRINTSTYLE TYPEWRITE</a> +uses UNDERLINE to underline italics +and pseudo-italics (<a href="typesetting.html#slant-inline">SLANT</a>) +by default. The default may be changed (see +<a href="docprocessing.html#printstyle-italics">Underlining of italics</a>) +but if it's what you want, you must process your document as shown +above. +</p> + +<p> +UNDERLINE is a toggle macro, therefore you invoke it by itself (i.e. +with no argument) to initiate underlining, and with any argument +(<kbd>OFF</kbd>, <kbd>QUIT</kbd>, <kbd>END</kbd>, <kbd>X</kbd>, etc) +to turn it off. +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="note">Note:</span> +Underlining may also be turned on and off +<a href="definitions.html#inlines">inline</a> +with the escapes +<a href="#ul"><kbd><span class="nobr">\*[UL]...\*[ULX]</span></kbd></a>. +</p> + +<p class="tip-bottom"> +<span class="additional-note">Additional note:</span> +In document processing, neither <kbd>.UNDERLINE</kbd> nor +<kbd><span class="nobr">\*[UL]</span></kbd> persist past the current document element tag. +For example, if you turn underlining on in a paragraph +(<kbd><a href="docelement.html#pp">.PP</a></kbd>), +your next paragraph will not be underlined. +</p> +</div> + +<h4 id="underline-specs" class="docs">UNDERLINE_SPECS</h4> + +<p> +The weight of underlining and the distance from the baseline is +set with +<br/> +<span class="pre-in-pp"> + .UNDERLINE_SPECS <weight> <distance> +</span> +The <kbd><weight></kbd> argument can be expressed in any +<a href="definitions.html#unitofmeasure">unit of measure</a> +you like, but points is the most usual. Mom’s default is 1/2 point +(.5p). The same holds for the <kbd><distance></kbd> argument; +mom’s default is 1-1/4 points (1.25p). +</p> + +<!-- -UL- --> + +<h4 id="ul" class="docs">INLINE ESCAPE FOR UNDERLINING</h4> + +<p> +The macro pair, +<kbd><a href="#underline">.UNDERLINE</a></kbd> / +<kbd>.UNDERLINE OFF</kbd>, and the inline escapes, +<span class="nobr"><kbd>\*[UL]</kbd> / <kbd>\*[ULX]</kbd></span>, are +functionally identical, hence, in +<a href="definitions.html#filled">fill</a> +modes +<br/> +<span class="pre-in-pp"> + Which should I heed? + .UNDERLINE + Just do it + .UNDERLINE OFF + or + .UNDERLINE + just say no? + .UNDERLINE OFF +</span> +produces the same result as +<br/> +<span class="pre-in-pp"> + Which should I heed? \*[UL]Just do it\*[ULX] or \*[UL]just say no?\*[ULX] +</span> +In either case, this is a misuse of UNDERLINE. +<a href="#underscore">UNDERSCORE</a> +is preferable. +</p> + +<!-- -PAD- --> + +<div class="macro-id-overline"> +<h3 id="pad" class="macro-id">Insert equalized whitespace into lines</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>PAD</b> <kbd class="macro-args">"<string with pad markers inserted>" [ NOBREAK ]</kbd> +</div> + +<p> +With PAD, you can insert proportional amounts of whitespace into a +line. The optional <kbd id="nobreak" class="bold">NOBREAK</kbd> +argument tells mom not to advance on the page after the PAD macro +has been invoked. +</p> + +<p> +PAD calculates the difference between the length of text on the line +and the distance remaining to its end, then inserts the difference +(as whitespace) at the place(s) you specify. +</p> + +<p> +Take, for example, the following relatively common typesetting +situation, found at the bottom of legal agreements: +<br/> +<span class="pre"> + Date Signature | +</span> +</p> + +<p> +The person signing the agreement is supposed to fill in the date +as well as a signature. Space needs to be left for both, but the +exact amount is neither known, nor important. All that matters is +that there be a little space after Date, and rather more space after +Signature. (In the above, <kbd>|</kbd> represents the +end of the line at the prevailing line length.) +</p> + +<p> +The +<a href="goodies.html#pad-marker">pad marker</a> +(see below) is <kbd>#</kbd> (the pound or number sign +on your keyboard) and can be used multiple times in a line. With +that in mind, here’s how you’d input the Date/Signature line +(assuming a length of 30 picas): +<br/> +<span class="pre"> + .LL 30P + .PAD "Date#Signature###" +</span> +</p> + +<p> +When the line is output, the space remaining on the line, after +"Date" and "Signature" have been taken into +account, is split into four (because there are four # signs). One +quarter of the space is inserted between Date and Signature, the +remainder is inserted after Signature. +</p> + +<div class="examples-container"> +<h3 id="pad-example" class="docs notes">Example of PAD usage</h3> +<p style="margin-top: .5em;"> +One rarely wants merely to insert space in a line; one usually wants +to fill it with something, hence PAD is particularly useful in +conjunction with +<a href="typesetting.html#string-tabs">string tabs</a>. +The following uses the Date/Signature example, above, but adds +rules into the whitespace through the use of string tabs and +mom’s +<a href="definitions.html#inlines">inline escape</a> +<a href="inlines.html#inline-rule-mom"><kbd><span class="nobr">\*[RULE]</span></kbd></a>. +<br/> +<span class="pre-in-pp"> + .LL 30P + .PAD "Date \*[ST1]#\*[ST1X] Signature \*[ST2]###\*[ST2X]" NOBREAK + .ST 1 J + .ST 2 J + .TAB 1 + \*[RULE] + .TN + \*[RULE] + .TQ +</span> +</p> + +<p> +Here’s what the example does: +</p> +<ol style="margin-top: -.5em; margin-bottom: -.5em;"> + <li>Pads the Date/Signature line with a shorter space for Date + (<kbd>#</kbd>) and a longer space for Signature + (<kbd>###</kbd>), encloses the padded space with string tabs + markers, and outputs the line without advancing on the page. + </li> + <li>Sets the quad for the two string tabs (in this instance, justified). + </li> + <li>Calls the first string tab and draws a rule to its full + length. + </li> + <li>Calls the second tab with + <a href="typesetting.html#tn">TN</a> + (which moves to tab 2 and stays on the same baseline) + then draws a rule to the full length of string tab 2. + </li> +</ol> + +<p> +Often, when setting up string tabs this way, you don’t want the +padded line to print immediately. To accomplish this, use +<kbd><a href="#silent">SILENT</a></kbd>. +See the +<a href="typesetting.html#string-tabs-tut">quickie tutorial on string tabs</a> +for an example. +</p> +</div> + +<div class="box-tip"> +<p class="tip-top"> +<span class="note">Note:</span> +Because the pound sign +(<kbd>#</kbd>) is used as the pad marker, you +can’t use it as a literal part of the pad string. If you need +the sign to appear in the text of a padded line, change the pad +marker with +<kbd><a href="#pad-marker">PAD_MARKER</a></kbd>. +Also, be aware that <kbd>#</kbd> as a pad marker +only applies within the PAD macro; at all other times it prints +literally, just as you’d expect. +</p> + +<p class="tip-bottom"> +Another important consideration when using PAD is that because the +string must be enclosed in double-quotes, you can’t use the +double-quote (<kbd>"</kbd>) as part of the string. The +way to circumvent this is to use the groff +<a href="definitions.html#inlines">inline escapes</a> +<kbd>\(lq</kbd> and <kbd>\(rq</kbd> +(leftquote and rightquote respectively) whenever double-quotes are +required in the string passed to PAD. +</p> +</div> + +<!-- -PAD_MARKER- --> + +<div class="macro-id-overline"> +<h3 id="pad-marker" class="macro-id">Change/set the marker used with PAD</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>PAD_MARKER</b> <kbd class="macro-args">"<character to use as the pad marker></kbd> +</div> + +<p> +If you need to change mom’s default pad marker (<kbd +class="bold">#</kbd>), either because you want a literal # in +the padded line, or simply because you want to use another character +instead, use PAD_MARKER, whose argument is the new pad marker +character you want. +<br/> +<span class="pre-in-pp"> + .PAD_MARKER @ +</span> +changes the pad marker to <kbd>@</kbd>. +</p> + +<p> +Once you’ve changed the pad marker, the new marker remains in effect +for every instance of +<a href="#pad">PAD</a> +until you change it again (say, back to the pound sign). +</p> + +<!-- -\*[LEADER]- --> + +<div class="macro-id-overline"> +<h3 id="leader" class="macro-id">Inline escape to add leaders to a line</h3> +</div> + +<div class="box-macro-args"> +Inline: <b>\*[LEADER]</b> +</div> + +<p> +Whenever you want to fill a line or tab with +<a href="definitions.html#leader">leaders</a>, +use the +<a href="definitions.html#inlines">inline escape</a> +<kbd><span class="nobr">\*[LEADER]</span></kbd>. The remainder of the line or +tab will be filled with the leader character. Mom’s default +leader character is a period (dot), but you can change it to any +character you like with +<kbd><a href="#leader-character">LEADER_CHARACTER</a></kbd>. +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="note">Note:</span> +<kbd>\*[LEADER]</kbd> fills lines or tabs right to +their end. You cannot insert leaders into a line or tab and have +text following the leader on the same line or in the same tab. +Should you wish to achieve such an effect typographically, create +tabs for each element of the line and fill them appropriately with +the text and leaders you need. +<a href="typesetting.html#string-tabs">String tabs</a> +are perfect for this. An example follows. +<br/> +<span class="pre"> + .LL 30P + .PAD "Date\*[ST1]#\*[ST1X] Signature\*[ST2]###\*[ST2X]" NOBREAK + .EL + .ST 1 J + .ST 2 J + .TAB 1 + \*[LEADER] + .TN + \*[LEADER] + .TQ +</span> +</p> + +<p class="tip-bottom"> +The PAD line sets the words Date and Signature, and marks string +tabs around the pad space inserted in the line. The string tabs are +then "set", called, and filled with leaders. The result +looks like this: +<br/> +<span class="pre" style="margin-bottom: -1em;"> + Date.............Signature..................................... +</span> +</p> +</div> + +<!-- -LEADER_CHARACTER- --> + +<div class="macro-id-overline"> +<h3 id="leader-character" class="macro-id">Change/set the leader character</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>LEADER_CHARACTER</b> <kbd class="macro-args"><character></kbd> +</div> + +<p> +LEADER_CHARACTER takes one argument: a single character you would +like to be used for +<a href="definitions.html#leader">leaders</a>. +(See +<a href="#leader"><kbd><span class="nobr">\*[LEADER]</span></kbd></a> +for an explanation of how to fill lines with leaders.) +</p> + +<p> +For example, to change the leader character from mom’s +default (a period) to the underscore character, enter +<br/> +<span class="pre-in-pp"> + .LEADER_CHARACTER _ +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="tip">Tip:</span> +A particularly useful function of LEADER_CHARACTER is that it can be +used to increase the spacing of mom’s default leaders. This is +done by assigning to LEADER_CHARACTER both the period (dot) and a +space. The technique requires a little low-level groffing: +<br/> +<span class="pre-in-pp"> + .char \[leader] . \" + .LEADER_CHARACTER \[leader] +</span> +The <kbd>.char</kbd> +<a href="definitions.html#primitives">primitive</a> +allows you to define a character called <kbd>leader</kbd>, to which +you assign a period and a space. The <kbd>\"</kbd>, which, in +groff, is used to add non-printing comments to a line, is not +strictly necessary. Its presence here lets you see that +there’s a space after the period. +</p> +</div> + +<!-- -DROPCAP- --> + +<div class="macro-id-overline"> +<h3 id="dropcap" class="macro-id">Drop caps</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>DROPCAP</b> <kbd class="macro-args"><dropcap letter> <number of lines to drop> [ COND <percentage> | EXT <percentage> ]</kbd> +</div> + +<p> +The first two arguments to DROPCAP are the letter you want to be the +<a href="definitions.html#dropcap">drop cap</a> +and the number of lines you want it to drop. By default, mom uses +the current family and font for the drop cap. +</p> + +<p> +The optional argument (<kbd>COND</kbd> or <kbd>EXT</kbd>) indicates +that you want the drop cap condensed (narrower) or extended (wider). +If you use <kbd class="bold">COND</kbd> or <kbd>EXT</kbd>, you must +follow the argument with the percentage of the letter’s normal +width you want it condensed or extended. No percent sign +(<kbd>%</kbd>) is required. +</p> + +<p> +Mom will do her very best to get the drop cap to line up with the +first line of text indented beside it, then set the correct number +of indented lines, and restore your left margin when the number of +drop cap lines has been reached. +</p> + +<p> +Beginning a paragraph with a drop cap “T” looks like this: +<br/> +<span class="pre"> + .DROPCAP T 3 COND 90 + he thousand injuries of Fortunato I had borne as best I + could, but when he ventured upon insult, I vowed revenge. + You who so well know the nature of my soul will not suppose, + however, that I gave utterance to a threat... +</span> +</p> + +<p> +The drop cap, slightly condensed but in the current family and font, +will be three lines tall, with whatever text fills those three +lines indented to the right of the letter. The remainder of the +paragraph’s text will revert to the left margin. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +When using the +<a href="docprocessing.html#docprocessing">document processing macro</a> +<a href="docelement.html#pp">PP</a>, +DROPCAP only works +</p> +<ul style="margin-top: -1em; margin-bottom: -.5em;"> + <li>with initial paragraphs (i.e. at the start of the document, + or after + <a href="docelement.html#heading">HEADING</a>),</li> + <li>when <kbd>.DROPCAP</kbd> comes immediately after <kbd>.PP</kbd>,</li> + <li>the + <a href="docprocessing.html#printstyle">PRINTSTYLE</a> + is TYPESET.</li> +</ul> +<p> +If these conditions aren’t met, DROPCAP is silently ignored. +</p> + +<p class="tip-bottom" style="margin-top: -1em;"> +<span class="additional-note">Additional note:</span> +If you have dropcaps after +<a href="docelement.html#heading">HEADING</a>s, +you must increase the <kbd>NEEDS</kbd> argument to +<a href="docelement.html#heading-style">HEADING_STYLE</a> +to match the number of dropcap lines. For example, assuming +dropcaps that are three lines tall: +<br/> +<span class="pre-in-pp"> + .HEADING_STYLE 1 NEEDS 3 +</span> +</p> +</div> + +<div class="box-important"> +<p class="tip"> +<span class="important">Warning:</span> +DROPCAP puts a bit of a strain on resource-challenged systems. If +you have such a system and use drop caps extensively in a document, +be prepared for a wait while mom does her thing. +</p> +</div> + +<h3 id="dropcap-support" class="docs control-macros-header">Support macros for DROPCAP</h3> +<p> +Drop caps are the bane of most typesetters’ existence. +It’s very difficult to get the size of the drop cap right +for the number of drop lines, especially if the drop cap is in a +different family from the prevailing family of running text. Not +only that, but there’s the gutter around the drop cap to take +into account, plus the fact that the letter may be too wide or too +narrow to look anything but odd or misplaced. +</p> + +<p> +Mom solves the last of these problems with the <kbd>COND</kbd> and +<kbd>EXT</kbd> arguments. The rest she solves with macros that +change the default behaviour of DROPCAP, namely +</p> +<ul class="no-enumerator" style="margin-top: -.5em; margin-left: -.5em;"> + <li><a href="#dropcap-family">DROPCAP_FAMILY</a></li> + <li><a href="#dropcap-font">DROPCAP_FONT</a></li> + <li><a href="#dropcap-color">DROPCAP_COLOR</a></li> + <li><a href="#dropcap-adjust">DROPCAP_ADJUST</a></li> + <li><a href="#dropcap-gutter">DROPCAP_GUTTER</a></li> +</ul> + +<p style="margin-top: -.5em;"> +These macros must, of course, come before you invoke DROPCAP. +</p> + +<h3 id="dropcap-family" class="control-macro">• DROPCAP_FAMILY</h3> +<p style="margin-left: .66em;"> +Set the drop cap family by giving DROPCAP_FAMILY the name of the +family you want, e.g. +<br/> +<span class="pre-in-pp"> + .DROPCAP_FAMILY H +</span> +which will set the family to Helvetica for the drop cap only. +</p> + +<h3 id="dropcap-font" class="control-macro">• DROPCAP_FONT</h3> +<p style="margin-left: .66em;"> +Set the drop cap font by giving DROPCAP_FONT the name of the font +you want, e.g. +<br/> +<span class="pre-in-pp"> + .DROPCAP_FONT I +</span> +which will set the font to italic for the drop cap only. +</p> + +<h3 id="dropcap-adjust" class="control-macro">• DROPCAP_ADJUST</h3> +<p style="margin-left: .66em;"> +If the size mom calculates for the drop cap isn’t precisely +what you want, you can increase or decrease it with DROPCAP_ADJUST, +like this: e.g. +<br/> +<span class="pre-in-pp"> + .DROPCAP_ADJUST +1 +</span> +or +<br/> +<span class="pre"> + .DROPCAP_ADJUST -.75 +</span> +</p> + +<p style="margin-left: .66em;"> +DROPCAP_ADJUST only understands +<a href="definitions.html#picaspoints">points</a>, +therefore do not append any +<a href="definitions.html#unitofmeasure">unit of measure</a> +to the argument. And always be sure to prepend the plus or +minus sign, depending on whether you want the drop cap larger or +smaller. +</p> + +<h3 id="dropcap-color" class="control-macro">• DROPCAP_COLOR</h3> +<p style="margin-left: .66em;"> +If you’d like your drop cap colourized, simply invoke +<kbd>.DROPCAP_COLOR <color></kbd> with the name of a +colour you’ve already created (“initialized”) with +<a href="color.html#newcolor">NEWCOLOR</a> +or +<a href="color.html#xcolor">XCOLOR</a>. +Only the drop cap will be colourized; all other text will remain at +the current colour default (usually black). +</p> + +<h3 id="dropcap-gutter" class="control-macro">• DROPCAP_GUTTER</h3> +<p style="margin-left: .66em;"> +By default, mom puts three points of space between the drop cap +and the text indented beside it. If you want another value, use +DROPCAP_GUTTER (with a unit of measure), like this: +<br/> +<span class="pre-in-pp"> + .DROPCAP_GUTTER 6p +</span> +</p> + +<!-- -\*[SUP]- --> + +<div class="macro-id-overline"> +<h3 id="sup" class="macro-id">Superscript</h3> +</div> + +<div class="box-macro-args"> +Inlines: <kbd>\*[SUP]...\*[SUPX]</kbd> +</div> + +<p> +Superscripts are accomplished +<a href="definitions.html#inlines">inline</a>. +Whenever you need one, typically for numerals, all you need +to do is surround the superscript with the inlines above. +<kbd><span class="nobr">\*[SUP]</span></kbd> begins superscripting; +<kbd><span class="nobr">\*[SUPX]</span></kbd> turns it off. +</p> + +<p id="cond-or-ext-sup"> +If your running type is +<a href="typesetting.html#cond-inline">pseudo-condensed</a> +or +<a href="typesetting.html#ext-inline">pseudo-extended</a> +and you want your superscripts to be equivalently pseudo-condensed +or -extended, use +<br/> +<kbd><span class="nobr">\*[CONDSUP]...\*[CONDSUPX]</span></kbd> or +<kbd><span class="nobr">\*[EXTSUP]...\*[EXTSUPX]</span></kbd>. +</p> + +<p> +The superscript inlines are primarily used by the +<a href="docprocessing.html#docprocessing">document processing macros</a> +for automatic generation of numbered footnotes. However, you may +find them useful for other purposes. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Mom does a pretty fine job of making superscripts look good in any +font and at any size. If you’re fussy, though (and I am), +about precise vertical placement, kerning, weight, size, and so on, +you may want to roll your own solution. +</p> +</div> + +<h3 id="sup-raise" class="docs">SUPERSCRIPT RAISE AMOUNT</h3> +<p> +By default, mom raises superscripts 1/3 of an +<a href="definitions.html#em">em</a> +above the baseline. If you’re not happy with this default, +you can change it by invoking SUPERSCRIPT_RAISE_AMOUNT with the +amount you want them raised. A +<a href="definitions.html#unitofmeasure">unit of measure</a> +must be appended directly to the amount. Thus, if you want +superscripts raised by 3 +<a href="definitions.html#picaspoints">points</a> +instead of 1/3 em, you’d do +<br/> +<span class="pre-in-pp"> + .SUPERSCRIPT_RAISE_AMOUNT 3p +</span> +and all subsequent superscripts would be raised by 3 points. +</p> + +<!-- -CENTER BLOCK- --> + +<div class="macro-id-overline"> +<h3 id="center-block" class="macro-id">Centre blocks of type</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>CENTER_BLOCK</b> <kbd class="macro-args"><toggle></kbd> +</div> + +<p> +Blocks of type sometimes need to be centred on the page with their quad +direction (left, centre, right) left intact. The +document processing macros +<a href="docelement.html#quote">QUOTE</a> +and +<a href="docelement.html#blockquote">BLOCKQUOTE</a> +take care of this automatically, but there are other situations +where you may want to centre blocks of type. An example might be +left-quadded +<a href="docelement.html#list-intro">nested lists</a>. +</p> + +<p> +Whenever you want to centre a block of type on the page, surround it +with <kbd>.CENTER_BLOCK/.CENTER_BLOCK OFF</kbd> (or <kbd>QUIT</kbd>, +<kbd>X</kbd>, etc). +</p> + +<div class="macro-id-overline"> +<h3 id="left-hang" class="macro-id">Hanging characters</h3> +</div> +<br/> +<div class="box-macro-args"> +Macro: <b>LEFT_HANG</b> <kbd class="macro-args"><character> [ <gutter></kbd> ] +</div> +<p class="requires"> +• left-hung characters +</p> + +<div class="box-macro-args" style="margin-top: 1em"> +Inline: <b>\*[HANG <kbd class="macro-args"><character></kbd>]</b> +</div> +<p class="requires"> +• right-hung characters +</p> + +<p> +Hung characters, frequently punctuation, fall outside the left or +right margin. Their purpose is usually to fine-tune justification. +Consider the following: +</p> + +<table style="margin-left: 3%; margin-right: 6%; text-align: justify"> +<tr> +<td style="padding-right: 1em"> +“Play the man, Master Ridley; we +shall this day light such a candle, +by God's grace, in England, as I +trust shall never be put out.” +</td> +<td> + +</td> +<td style="margin-right: 0; padding-right: 0"> +“ +<br/> +<br/> +<br/> +<br/> +</td> +<td style="margin-left: 0; padding-left: 0"> +Play the man, Master Ridley; we +shall this day light such a candle, +by God's grace, in England, as I +trust shall never be put out.”</td> +</tr> +</table> + +<p> +In the right hand example, the opening double-quote hangs outside +the left margin, creating a uniform left margin for the text. +</p> + +<h4 class="docs">Left hung characters</h4> + +<p> +LEFT_HANG hangs its first argument, the character to be hung, to +the left of the left margin. The optional second argument lets you +specify an amount of space to insert between the hung character and +the text. +</p> + +<p> +Input text after LEFT_HANG must begin with the character to be hung +PLUS a +<a href="inlines.html#inline-horizontal-mom">horizontal motion</a> +corresponding to <kbd><gutter></kbd> if one was given. +If the hung character is a left double-quote, <kbd>\[lq]</kbd> +must be used as the argument to LEFT_HANG and the usual keyboard +double-quote (<kbd>"</kbd>) entered as the input text so as not to +confuse +<a href="goodies.html#smartquotes">SMARTQUOTES</a> +The following example demonstrates: +<br/> +<span class="pre-in-pp"> + .LEFT_HANG \[lq] 1p + "\*[FWD 1p]This line will have its opening double-quote + plus one point of space hung outside the left margin." +</span> +</p> + +<p style="margin-top: -1em"> +Note that what follows LEFT_HANG must be an input line and therefore +it cannot be used to left-hang a +<a href="docelement.html#heading">HEADING</a> +character. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="important">Important:</span> +Versions of mom lower than 2.5_a that included LEFT_HANG required +that the character and its gutter be entered as a single, +concatenated argument, using horizontal motions to establish the +gutter +(e.g. +<a href="inlines.html#inline-horizontal-mom">FWD</a>, +<a href="inlines.html#inline-horizontal-mom">BCK</a>). +Documents created with versions prior to 2.5_a may have to be +updated. +</p> +</div> + +<h4 class="docs">Right hung characters</h4> + +<p> +The <kbd>\*[HANG c]</kbd> inline escape hangs its argument outside +the right margin of justified or quad right copy. The argument may +be a single character, or a single character preceded by a +horizontal motion, effectively establishing a gutter between the +right margin and the hung character: +<br/> +<span class="pre-in-pp" style="margin-bottom: .25em"> + This line will have its closing period hung outside + the right margin with a one point gutter\*[HANG \*[FWD 1p].] +</span> +If the hung character is a right double-quote, <kbd>"\[rq]"</kbd> +must be used as the argument (that is, the <kbd>\[rq]</kbd> +character surrounded by double-quotes). The double-quotes are +required for all special characters of the form +<kbd style="whitespace: nowrap">\[name]</kbd>. +Horizontal motion, if any, must fall inside the double-quotes: +<br/> +<span class="pre-in-pp"> + ...and they all lived happily ever after.\*[HANG "\*[FWD 1p]\[rq]"] +</span> +</p> + +<p> +If the hung character is a hyphen, +<kbd style="whitespace: nowrap"><span class="nobr">\*[HANG -]</span></kbd> +must come at the end of an +<a href="definitions.html#inputline">input line</a>. +This restriction does not apply to other characters, which may come +anywhere in an input line provided that, on output, the line breaks +at the point you introduced the hung character. +</p> + +<p> +For the exceptionally fussy, <kbd>\*[HANG]</kbd> may also be used to +improve visual centring; when text is centred, <kbd +style="whitespace: nowrap">\*[HANG c]</kbd> +hangs the character to the right of the centred line instead of the +margin. +</p> + +<div class="rule-long"><hr/></div> + +<!-- Navigation links --> +<table style="width: 100%; margin-top: 12px;"> +<tr> + <td style="width: 33%;"><a href="toc.html">Back to Table of Contents</a></td> + <td style="width: 33%; text-align: center;"><a href="#top">Top</a></td> + <td style="width: 33%; text-align: right;"><a href="inlines.html#top">Next: Inline escapes</a></td> +</tr> +</table> + +</div> + +<div class="bottom-spacer"><br/></div> + +</body> +</html> diff --git a/contrib/mom/momdoc/graphical.html b/contrib/mom/momdoc/graphical.html new file mode 100644 index 0000000..0f373b7 --- /dev/null +++ b/contrib/mom/momdoc/graphical.html @@ -0,0 +1,689 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004-2020 Free Software Foundation, Inc. +Written by Peter Schaffter (peter@schaffter.ca). + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"/> + <title>Mom -- Graphical Objects</title> + <link rel="stylesheet" type="text/css" href="stylesheet.css" /> +</head> + +<body style="background-color: #f5faff;"> + +<!-- ==================================================================== --> + +<div id="top" class="page"> + +<!-- Navigation links --> +<table style="width: 100%;"> +<tr> + <td><a href="toc.html">Back to Table of Contents</a></td> + <td style="text-align: right;"><a href="docprocessing.html#top">Next: Document processing</a></td> +</tr> +</table> + +<h1 class="docs">Graphical objects</h1> + +<div style="text-align: center;"> +<ul class="no-enumerator" style="margin-left: -2.5em;"> + <li><a href="#intro-graphical">Introduction to graphical objects</a></li> + <li><a href="#behaviour">Graphical objects behaviour</a></li> + <li><a href="#order">Order of arguments</a></li> + <li><a href="#index-graphical">Index of graphical objects macros</a></li> +</ul> +</div> + +<div class="rule-medium"><hr/></div> + +<h2 id="intro-graphical" class="docs">Introduction to graphical objects</h2> + +<p> +Groff has a number of +<a href="definitions.html#inlines">inline escapes</a> +for drawing rules, polygons, ellipses and splines. All begin with +<kbd>\D</kbd> (presumably for “Draw”) and are documented +in the groff info manual: +<br/> +<span class="pre-in-pp"> + info groff \D +</span> +The escapes allow you to draw just about any simple graphical object +you can think of, but owing to their syntax they’re not always easy +to read, which can make tweaking them difficult. Additionally, +while they perform in a <i>consistent</i> manner, they don’t +always perform in an <i>expected</i> manner. +</p> + +<p> +Experience shows that the most common graphical elements typesetters +need are rules (horizontal and vertical), boxes, and circles (or +ellipses). For this reason, mom provides macros +to draw these objects in an easy-to-understand way; the results are +predictable, and mom’s syntax makes fixes or tweaks +painless. +</p> + +<p id="graphical-example"> +For example, if you want to draw a 2-inch square outline box at the left +margin using groff’s <kbd>\D</kbd> escapes, it looks like this: +<br/> +<span class="pre-in-pp"> + back up + by + weight + +-------+ + | | + \D't 500'\h'-500u'\D'p 2i 0 0 2i -2i 0 0 -2i' + | | | | + +-------+ +------------------------+ + set rule draw box, 1 line at a time + weight +</span> + +Obviously, this isn’t very efficient for something as simple as a +box. +</p> + +<p> +Here’s the same box, drawn with mom’s box drawing +macro +<kbd><a href="#dbx">DBX</a></kbd>: +<br/> +<span class="pre-in-pp"> + left margin indent--+ +--box width + | | + .DBX .5 0 2i 2i + | | + rule weight--+ +--box depth + (in points) +</span> +</p> + +<p> +Mom’s graphical object macros allow—in fact, +require—giving the rule weight (“thickness”) for +the object (or saying that you want it filled), an indent from the +left margin where the object begins, the dimensions of the object, +and optionally a colour for the object. +</p> + +<p> +There are no defaults for the arguments to mom’s graphical +object macros, which means you must supply the arguments every time +you invoke them. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +As stated above, mom only provides macros for commonly-used +graphical objects (rules, boxes, circles). More complex objects +(polygons, non-straight lines, splines) must be drawn using +groff’s <kbd>\D</kbd> escapes. +</p> +</div> + +<h3 id="behaviour" class="docs">Graphical object behaviour</h3> + +<p> +Mom’s graphical object macros all behave in the following, +carved-in-stone ways: +</p> +<ol style="margin-top: -.5em; margin-bottom: -.5em;"> + <li>Objects are drawn from the + <a href="definitions.html#baseline">baseline</a> + down, including horizontal rules.</li> + <li>Objects begin precisely at the left indent supplied as + an argument to the macro.</li> + <li>Objects are drawn from left to right.</li> + <li>Enclosed objects (boxes, circles) are drawn from the + perimeter <i>inward</i>.</li> + <li>Objects return to their horizontal/vertical point of origin.</li> +</ol> + +<p> +The consistency means that once you’ve mastered the very +simple order of arguments that applies to invoking graphical +object macros, you can draw objects with full confidence that you +know exactly where they’re placed and how much room they +occupy. Furthermore, because all return to their point of origin, +you’ll know exactly where you are on the page. +</p> + +<h3 id="order" class="docs">Order of arguments</h3> + +<p> +The order of arguments to the graphical object macros is the same +for every macro: +</p> +<ul style="margin-top: -.5em; margin-bottom: -.5em;"> + <li>the rule weight + <ul style="margin-left: -.75em;"> + <li>the single word <kbd>SOLID</kbd> may be used in place + of <kbd>weight</kbd> if you want boxes or circles filled</li> + </ul></li> + <li>the indent from the current left margin at which to begin + the object + </li> + <li>the width of the object if applicable</li> + <li>the depth of the object if applicable</li> + <li>the colour of the object (optional)</li> +</ul> + +<div class="macro-list-container"> +<h3 id="index-graphical" class="macro-list">Graphical objects macros</h3> + +<ul class="macro-list"> + <li><a href="#drh">DRH</a> + – horizontal rules</li> + <li><a href="#drv">DRV</a> + – vertical rules</li> + <li><a href="#dbx">DBX</a> + – box</li> + <li><a href="#dcl">DCL</a> + – circles or ellipses</li> +</ul> +</div> + +<!-- -DRH- --> + +<div class="macro-id-overline"> +<h3 id="drh" class="macro-id">Drawing horizontal rules</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>DRH</b> <kbd class="macro-args"><none> | <weight> <indent> <width> [<colour>]</kbd> +</div> + +<p class="requires"> +• +the argument to <kbd class="normal"><weight></kbd> is in +<a href="definitions.html#picaspoints" class="normal">points</a>, +but do <span class="normal">not</span> append the +<a href="definitions.html#unitsofmeasure">unit of measure</a>, +<kbd class="normal">p</kbd> +<br/> +• +<kbd class="normal"><indent></kbd> +and +<kbd class="normal"><width></kbd> +require a unit of measure +<br/> +• +arithmetic expressions to +<kbd class="normal"><indent></kbd> +and +<kbd class="normal"><width></kbd> +must be surrounded by parentheses +</p> + +<p> +If all you want is to draw a rule from your current left +margin to your current right margin (in other words, a "full +measure" rule), you may invoke <kbd>.DRH</kbd> without any +arguments. +</p> +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +DRH is the only graphical object macro that may be invoked +without arguments. The weight (“thickness”) of +the rule is determined by the argument you last gave the +macro +<a href="inlines.html#rule-weight">RULE_WEIGHT</a>. +DRH, used this way, is exactly equivalent to entering the +<a href="definitions.html#inlines">inline escape</a> +<a href="inlines.html#inline-rule-mom"><kbd><span class="nobr">\*[RULE]</span></kbd></a>. +</p> +</div> + +<p style="margin-top: -.5em;"> +To draw horizontal rules of a specified width, you must, at +a minimum, supply DRH with the arguments <kbd>weight,</kbd> +<kbd>indent</kbd> (measured from the current left margin) and +<kbd>width</kbd>. +</p> + +<p> +Optionally, you may give a <kbd>color</kbd> argument. The colour +may be either one defined with +<a href="color.html#newcolor">NEWCOLOR</a>, +or a named X-color initialized with +<a href="color.html#xcolor">XCOLOR</a>, +or an X-color alias (again, initialized with XCOLOR). +</p> + +<p> +Say, for example, you want to draw a 1-1/4 point horizontal rule +that starts 2 picas from the current left margin and runs for 3 +inches. To do so, you’d invoke <kbd>.DRH</kbd> like this: +<br/> +<span class="pre-in-pp"> + weight width + | | + .DRH 1.25 2P 3i + | + indent +</span> +(Note that the rule weight argument, which is expressed in points, +must not have the unit of measure <kbd>p</kbd> appended to it.) +</p> + +<p> +If, in addition, you want the rule blue: +<br/> +<span class="pre-in-pp"> + .DRH 1.25 2P 3i blue +</span> +</p> + +<h3 class="docs">How mom handles the positioning of horizontal rules</h3> + +<p> +Horizontal rules are drawn from left to right, and from the baseline +down. “From the baseline down” means that if you request +a rule with a weight of four points, the four points of rule fall +entirely below the baseline. +</p> + +<p> +Furthermore, after the rule is drawn, mom returns you to the current +left margin, at the same vertical position on the page as when DRH +was invoked. In other words, DRH causes no movement on the page, +either horizontal or vertical. +</p> + +<!-- -DRV- --> + +<div class="macro-id-overline"> +<h3 id="drv" class="macro-id">Drawing vertical rules</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>DRV</b> <kbd class="macro-args"><weight> <indent> <depth> [<colour>]</kbd> +</div> + +<p class="requires"> +• +the argument to <kbd class="normal"><weight></kbd> is in +<a href="definitions.html#picaspoints" class="normal">points</a>, +but do <span class="normal">not</span> append the +<a href="definitions.html#unitsofmeasure">unit of measure</a>, +<kbd class="normal">p</kbd> +<br/> +• +<kbd class="normal"><indent></kbd> +and +<kbd class="normal"><depth></kbd> +require a unit of measure +<br/> +• +arithmetic expressions to +<kbd class="normal"><indent></kbd> +and +<kbd class="normal"><depth></kbd> +must be surrounded by parentheses +</p> + +<p> +To draw vertical rules of a specified depth, you must, at +a minimum, supply DRV with the arguments <kbd>weight,</kbd> +<kbd>indent</kbd> (measured from the current left margin) and +<kbd>depth</kbd>. +</p> + +<p> +Optionally, you may give a <kbd>color</kbd> argument. The colour +may be either one defined with +<a href="color.html#newcolor">NEWCOLOR</a>, +or a named X-color initialized with +<a href="color.html#xcolor">XCOLOR</a>, +or an X-color alias (again, initialized with XCOLOR). +</p> + +<p> +Say, for example, you want to draw a 3/4-point vertical rule that +starts 19-1/2 picas from the current left margin and has a depth of +6 centimetres. To do so, you’d invoke <kbd>.DRV</kbd> like +this: +<br/> +<span class="pre-in-pp"> + weight depth + | | + .DRV .75 19P+6p 6c + | + indent +</span> +(Note that the rule weight argument, which is expressed in points, +must not have the unit of measure <kbd>p</kbd> appended to it.) +</p> + +<p> +If, in addition, you want the rule red: +<br/> +<span class="pre-in-pp"> + .DRV .75 19P+6p 6c red +</span> +</p> + +<h3 class="docs">How mom handles the positioning of vertical rules</h3> + +<p> +Vertical rules are drawn from the baseline down, and from left to +right. "Left to right" means that if you request a rule +with a weight of four points, the four points of rule fall entirely +to the right of the indent given to DRV. +</p> + +<p> +Furthermore, after the rule is drawn, mom returns you to the current +left margin, at the same vertical position on the page as when DRV +was invoked. In other words, DRV causes no movement on the page, +either horizontal or vertical. +</p> + +<!-- -DBX- --> + +<div class="macro-id-overline"> +<h3 id="dbx" class="macro-id">Drawing boxes</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>DBX</b> <kbd class="macro-args"><weight>|SOLID <indent> <width>|FULL_MEASURE <depth> [<color>]</kbd> +</div> + +<p class="requires"> +• +the argument to <kbd class="normal"><weight></kbd> is in +<a href="definitions.html#picaspoints" class="normal">points</a>, +but do <span class="normal">not</span> append the +<a href="definitions.html#unitsofmeasure">unit of measure</a> +<kbd class="normal">p</kbd> +<br/> +• <kbd class="normal"><indent></kbd>, +<kbd class="normal"><width></kbd>, +and +<kbd class="normal"><depth></kbd> +require a unit of measure +<br/> +• +arithmetic expressions to +<kbd class="normal"><indent></kbd>, +<kbd class="normal"><width></kbd>, +and +<kbd class="normal"><depth></kbd> +must be enclosed in parentheses. +</p> + +<p> +To draw boxes you must, at a minimum, supply DBX with the arguments +<kbd>weight</kbd> or <kbd>SOLID</kbd>, <kbd>indent</kbd>, +<kbd>width</kbd> or <kbd>FULL_MEASURE</kbd>, and <kbd>depth</kbd>. +</p> + +<p> +<kbd>weight</kbd> is the rule weight of outlined boxes, given in +points but without the +<a href="definitions.html#unitsofmeasure">unit of measure</a> +<kbd>p</kbd> appended. +</p> + +<p> +If <kbd>SOLID</kbd> is given as the first argument, the box is +filled rather than outlined and no <kbd>weight</kbd> argument should +be supplied. +</p> + +<p> +<kbd>indent</kbd> is measured from the current left margin. If +<kbd>FULL_MEASURE</kbd> is given, <kbd>indent</kbd> should be set to +“0”. +</p> + +<p> +<kbd>width</kbd> is the width of the box with a +<a href="definitions.html#unitsofmeasure">unit of measure</a> +appended, caclculated from <kbd>indent</kbd> argument. +</p> + +<p> +If <kbd>FULL_MEASURE</kbd> is given instead of <kbd>width</kbd>, +it circumvents having to calculate the width when left and/or right +indents are in effect; mom draws the box from the current left +margin to the current right margin. When no indents are in effect, +<kbd>FULL_MEASURE</kbd> or <kbd>\n[.l]u</kbd>—the groff +way of saying “the current line length”—have the +same effect. +</p> + +<p> +Optionally, you may give a <kbd>color</kbd> argument. The colour +may be either one defined with +<a href="color.html#newcolor">NEWCOLOR</a>, +or a named X-color initialized with +<a href="color.html#xcolor">XCOLOR</a>, +or an X-color alias (again, initialized with XCOLOR). +</p> + +<p> +Say, for example, you want to draw a 1/2 point outline box that +starts one inch from the current left margin and has the dimensions +12 picas x 6 picas. To do so, you’d invoke <kbd>.DBX</kbd> +like this: +<br/> +<span class="pre-in-pp"> + indent depth + | | + .DBX .5 1i 12P 6P + | | + weight width +</span> +(Note that the box weight argument, which is expressed in points, +must not have the unit of measure <kbd>p</kbd> appended to it.) +</p> + +<p> +If you want the same box, but solid (“filled”) rather +than drawn as an outline: +<br/> +<span class="pre-in-pp"> + .DBX SOLID 1i 12P 6P +</span> +Additionally, if you want the box green: +<br/> +<span class="pre-in-pp"> + .DBX .5 1i 12P 6P green +</span> +or +<span class="pre-in-pp"> + .DBX SOLID 1i 12P 6P green +</span> +</p> + +<h3 class="docs">How mom handles the positioning of boxes</h3> + +<p> +Boxes are drawn from the baseline down, from left to right, and +from the perimeter <i>inward</i>. “From the perimeter +inward” means that if you request a box weight of six points, +the 6-point rules used to draw the outline of the box fall entirely +<i>within</i> the dimensions of the box. +</p> + +<p> +Furthermore, after the box is drawn, mom returns you to the current +left margin, at the same vertical position on the page as when DBX +was invoked. In other words, DBX causes no movement on the page, +either horizontal or vertical. +</p> + +<!-- -DCL- --> + +<div class="macro-id-overline"> +<h3 id="dcl" class="macro-id">Drawing circles (ellipses)</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>DCL</b> <kbd class="macro-args"><weight>|SOLID <indent> <width>|FULL_MEASURE <depth> [<color>]</kbd> +</div> + +<p class="requires"> +• +the argument to <kbd class="normal"><weight></kbd> is in +<a href="definitions.html#picaspoints" class="normal">points</a>, +but do <span class="normal">not</span> append the +<a href="definitions.html#unitsofmeasure">unit of measure</a> +<kbd class="normal">p</kbd> +<br/> +• <kbd class="normal"><indent></kbd>, +<kbd class="normal"><width></kbd>, +and +<kbd class="normal"><depth></kbd> +require a unit of measure +<br/> +• +arithmetic expressions to +<kbd class="normal"><indent></kbd>, +<kbd class="normal"><width></kbd>, +and +<kbd class="normal"><depth></kbd> +must be enclosed in parentheses. +</p> + +<p> +To draw circles you must, at a minimum, supply DCL with the arguments +<kbd>weight</kbd> or <kbd>SOLID</kbd>, <kbd>indent</kbd>, +<kbd>width</kbd> or <kbd>FULL_MEASURE</kbd>, and <kbd>depth</kbd>. +</p> + +<p> +<kbd>weight</kbd> is the rule weight of outlined circles, given in +points but without the unit of measure +<a href="definitions.html#unitsofmeasure">unit of measure</a> +<kbd>p</kbd> appended. +</p> + +<p> +If <kbd>SOLID</kbd> is given as the first argument, the circle is +filled rather than outlined and no <kbd>weight</kbd> argument should +be supplied. +</p> + +<p> +<kbd>indent</kbd> is measured from the current left margin. If +<kbd>FULL_MEASURE</kbd> is given, <kbd>indent</kbd> should be set to +“0”. +</p> + +<p> +<kbd>width</kbd> is the width of the circle with a +<a href="definitions.html#unitsofmeasure">unit of measure</a> +appended, caclculated from <kbd>indent</kbd> argument. +</p> + +<p> +If <kbd>FULL_MEASURE</kbd> is given instead of <kbd>width</kbd>, +it circumvents having to calculate the width when left and/or right +indents are in effect; mom draws the circle from the current left +margin to the current right margin. When no indents are in effect, +<kbd>FULL_MEASURE</kbd> or <kbd>\n[.l]u</kbd>—the groff +way of saying “the current line length”—have the +same effect. +</p> + +<p> +Optionally, you may give a <kbd>color</kbd> argument. The colour +may be either one defined with +<a href="color.html#newcolor">NEWCOLOR</a>, +or a named X-color initialized with +<a href="color.html#xcolor">XCOLOR</a>, +or an X-color alias (again, initialized with XCOLOR). +</p> + +<p> +Say, for example, you want to draw a 1/2 point outline circle that +starts one inch from the current left margin and has the dimensions +12 picas x 6 picas. To do so, you’d invoke <kbd>.DCL</kbd> +like this: +<br/> +<span class="pre-in-pp"> + indent depth + | | + .DCL .5 1i 12P 6P + | | + weight width +</span> +(Note that the circle weight argument, which is expressed in points, +must not have the unit of measure <kbd>p</kbd> appended to it.) +</p> + +<p> +If you want the same circle, but solid (“filled”) rather +than drawn as an outline: +<br/> +<span class="pre-in-pp"> + .DCL SOLID 1i 12P 6P +</span> +Additionally, if you want the circle green: +<br/> +<span class="pre-in-pp"> + .DCL .5 1i 12P 6P green +</span> +or +<span class="pre-in-pp"> + .DCL SOLID 1i 12P 6P green +</span> +</p> + + +<h3 class="docs">How mom handles the positioning of circles (ellipses)</h3> + +<p> +Circles (ellipses) are drawn from the baseline down, from left +to right, and from the perimeter <i>inward</i>. “From the +perimeter inward” means that if you request a circle weight of +six points, the 6-point rule used to draw the outline of the circle +or ellipse falls entirely <i>within</i> the dimensions of the +circle or ellipse. +</p> + +<p> +Furthermore, after the circle is drawn, mom returns you to the +current left margin, at the same vertical position on the page as +when DCL was invoked. In other words, DCL causes no movement on the +page, either horizontal or vertical. +</p> + +<div class="rule-long"><hr/></div> + +<!-- Navigation links --> +<table style="width: 100%; margin-top: 12px;"> +<tr> + <td style="width: 33%;"><a href="toc.html">Back to Table of Contents</a></td> + <td style="width: 33%; text-align: center;"><a href="#top">Top</a></td> + <td style="width: 33%; text-align: right;"><a href="docprocessing.html#top">Next: Document processing</a></td> +</tr> +</table> + +</div> + +<div class="bottom-spacer"><br/></div> + +</body> +</html> diff --git a/contrib/mom/momdoc/headfootpage.html b/contrib/mom/momdoc/headfootpage.html new file mode 100644 index 0000000..1c11ab1 --- /dev/null +++ b/contrib/mom/momdoc/headfootpage.html @@ -0,0 +1,2341 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004-2020 Free Software Foundation, Inc. +Written by Peter Schaffter (peter@schaffter.ca). + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"/> + <title>Mom -- Document processing, page headers/footers and pagination</title> + <link rel="stylesheet" type="text/css" href="stylesheet.css" /> +</head> + +<body style="background-color: #f5faff;"> + +<!-- ==================================================================== --> + +<div id="top" class="page"> + +<!-- Navigation links --> +<table style="width: 100%;"> +<tr> + <td><a href="toc.html">Back to Table of Contents</a></td> + <td style="text-align: right;"><a href="rectoverso.html#top">Next: Recto/verso printing, collating</a></td> +</tr> +</table> + +<h1 class="docs">Page headers/footers, pagination</h1> + +<div style="text-align: center;"> +<ul class="no-enumerator" style="margin-left: -2.5em;"> + <li><a href="#headfootpage-intro">Introduction – VERY IMPORTANT; read me!</a></li> + <li> <a href="#pagination-note">An important note on pagination</a></li> + <li><a href="#description-general">General description of headers/footers</a></li> + <li><a href="#header-style">Default specs for headers/footers</a></li> + <li><a href="#vertical-spacing">Vertical placement and spacing of headers/footers</a></li> +</ul> +</div> + +<div class="rule-medium"><hr/></div> + +<h2 id="toc-doc-head-foot-page" class="docs" style="text-align: center;">Table of contents</h2> + +<h3 class="toc toc-docproc-header" style="margin-top: 1em;"><a class="header-link" href="#headfoot-management">Managing page headers and footers</a></h3> +<ul class="toc-docproc" style="margin-top: .5em;"> + <li><a href="#headers">HEADERS</a> – on or off</li> + <li><a href="#footers">FOOTERS</a> – on or off</li> + <li><a href="#footer-on-first-page">FOOTER_ON_FIRST_PAGE</a></li> +</ul> +<h3 class="toc toc-docproc-header"><a class="header-link" href="#headfoot-control">Control macros for headers/footers</a></h3> + <ul class="toc-docproc" style="margin-top: .5em;"> + <li><a href="#index-headfoot-control">Header/footer control macros and defaults</a> + <ul class="toc-docproc"> + <li><a href="#hdrftr-strings">Header/footer strings</a> + <ul class="toc-docproc"> + <li><a href="#reserved-strings">Using mom’s reserved strings in header/footer definitions</a> (TITLE, AUTHOR, etc.)</li> + </ul></li> + <li><a href="#hdrftr-style">Header/footer style</a> + <ul class="toc-docproc"> + <li><a href="#hdrftr-style-global">Global changes</a></li> + <li><a href="#hdrftr-style-part">Part-by-part changes</a></li> + </ul></li> + <li><a href="#hdrftr-vertical">Vertical placement and spacing of headers/footers</a> + <ul class="toc-docproc"> + <li><a href="#hdrftr-margin">HEADER_MARGIN / FOOTER_MARGIN</a> + <ul class="toc-docproc no-enumerator" style="margin-left: -2em;"> + <li>– <a href="#footer-margin">Important: FOOTER_MARGIN and bottom margins</a></li> + </ul></li> + </ul></li> + <li><a href="#hdrftr-separator">The header/footer separator rule</a> + <ul class="toc-docproc"> + <li><a href="#hdrftr-rule">HEADER_RULE</a> – on or off</li> + <li><a href="#hdrftr-rule-weight">HEADER_RULE_WEIGHT</a> – weight of the rule</li> + <li><a href="#hdrftr-rule-gap">HEADER_RULE_GAP</a> – distance of rule from header/footer</li> + <li><a href="#hdrftr-rule-color">HEADER_RULE_COLOR</a> – colour of the header/footer rule</li> + </ul></li> + </ul></li> +</ul> +<h3 class="toc toc-docproc-header"><a class="header-link" href="#userdef-hdrftr-rv">User-defined, single string recto/verso headers/footers</a></h3> +<ul class="toc-docproc" style="margin-top: .5em;"> + <li><a href="#hdrftr-recto">HEADER_RECTO, HEADER_VERSO</a> + <ul style="margin-left: -.5em"> + <li><a href="#userdef-hdrftr">User-defined, single string headers/footers (no recto/verso)</a></li> + <li><a href="#padding-hdrftr">Padding the header-recto/header-verso string</a></li> + </ul></li> +</ul> +<h3 class="toc toc-docproc-header"><a class="header-link" href="#headers-and-footers-intro">Headers and footers on the same page</a></h3> +<h3 class="toc toc-docproc-header" style="margin-top: .75em;"><a class="header-link" href="#pagination-intro">Pagination</a></h3> +<ul class="toc-docproc" style="margin-top: .5em;"> + <li><a href="#index-pagination">Pagination macros</a></li> + <li><a href="#index-paginate-control">Pagination control macros and defaults</a></li> +</ul> +<h3 class="toc toc-docproc-header"><a class="header-link" href="#blank-pages">Inserting blank pages into a document</a></h3> + +<div class="rule-medium" style="margin-top: 1.5em;"><hr/></div> + +<h2 id="headfootpage-intro" class="macro-group">Managing page headers and footers</h2> + +<div id="headerfooter" class="box-tip"> +<p class="tip-top"> +<span class="note">Note:</span> +Because headers and footers are virtually identical, this +documentation addresses itself only to headers. In all cases, +unless otherwise noted, descriptions of headers describe footers as +well. +</p> + +<p class="tip-bottom"> +Furthermore, any +<a href="definitions.html#controlmacro">control macro</a> +that begins with HEADER_ may be used to control footers, simply by +replacing HEADER_ with FOOTER_. +</p> +</div> + +<p style="margin-top: -.75em;"> +<a href="definitions.html#header">Headers</a> +and +<a href="definitions.html#footer">footers</a>, +as defined in the section +<a href="definitions.html#mom">Mom’s Document Processing Terms</a>, +are those parts of a document that contain information about the document +itself which appear in the margins either above or below +<a href="definitions.html#running">running text</a>. +They are, in all respects but two, identical. The differences are: +</p> +<ol style="margin-top: -.5em; margin-bottom: -.5em;"> + <li>headers appear in the margin <i>above</i> running text while + footers appear in the margin <i>beneath</i> running text; + </li> + <li>the (optional) rule that separates headers from running + text appears <i>below</i> the header while + the (optional) rule that separates footers from running + text appears <i>above</i> the footer. + </li> +</ol> + +<div id="pagination-note" class="box-tip" style="margin-top: 1.5em;"> +<p class="tip"> +<span class="note">Note:</span> +While the single page number that mom generates in either the top +or bottom margin above or below running text is technically a kind +of header/footer, mom and this documentation treat it as a separate +page element. +</p> +</div> + +<div id="author-note" class="box-tip"> +<p class="tip"> +<span class="note">Author’s note:</span> +Left to their own devices (i.e. if you’re happy with the way +mom does things by default), headers are something you never have to +worry about. You can skip reading this section entirely. But if +you want to change them, be advised that headers have more macros to +control their appearance than any other document element. The text +of this documentation becomes correspondingly dense at this point. +</p> +</div> + +<h3 id="description-general" class="docs">General description of headers/footers</h3> + +<p> +Headers comprise three distinct parts: a left part, a centre part, +and a right part. Each part contains text (a “string”) +that identifies some aspect of the document as a whole. +</p> + +<p> +The left part (“header-left”) lines up with the +document’s left margin. The centre part (“header +centre”) is centred on the document’s line length. +The right part (“header-right”) lines up with the +document’s right margin. Not all parts need contain a string, +and if you don’t want headers at all, you can turn them off +completely. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note to groff experts:</span> +Although mom’s headers resemble the three-part titles +generated by <kbd>.tl</kbd>, they’re in no way related to it, +nor based upon it. <kbd>.tl</kbd> is not used at all in mom. +</p> +</div> + +<p> +Normally, mom fills headers with strings appropriate to the document +type selected by +<a href="docprocessing.html#doctype">DOCTYPE</a>, +with the author left, the document title right, and chapter or +document type information in the centre. You can, however, supply +whatever strings you like—including page numbers—to go +in any part of headers. What’s more, you can set the family, +font, size, colour and capitalization style (caps, caps/lower-case, +or smallcaps) for each header part individually. +</p> + +<p> +By default, mom prints a horizontal rule beneath headers to separate +them visually from running text. In the case of footers, the rule +is above. You can increase or decrease the space between the header +and the rule if you like (with +<kbd><a href="#hdrftr-rule-gap">HEADER_RULE_GAP</a></kbd>), +or remove it completely. +</p> + +<h3 id="header-style" class="docs">Default specs for headers/footers</h3> + +<p> +Mom makes small type adjustments to each part of the header (left, +centre, right) to achieve an aesthetically pleasing result. The +defaults are listed below. (The strings mom puts by default in each +part are explained in +<a href="docprocessing.html#doctype">DOCTYPE</a>.) +</p> + +<div class="defaults-container" style="padding-bottom: 8px;"> +<p class="defaults" style="padding-top: 6px; padding-bottom: 6px; text-align: center;"> +<i>Note:</i> Except for capitalization (all caps or caps/lower-case), +these defaults apply only to +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPESET</kbd></a>. +</p> +<span class="pre defaults"> +TYPE SPEC HEADER LEFT HEADER CENTER HEADER RIGHT +--------- ----------- ------------- ------------ +Family document default document default document default +Font roman italic roman +Colour (black) (black) (black) +All caps no no yes +Size* -.5 (points) -.5 (points) -2 (points) + (-2 if all caps) (-2 if all caps) (-.5 if not all caps) + +*Relative to the point size of <a href="definitions.html#running">running text</a> +</span> +</div> + +<p style="margin-top: -1.5em;"> +You can, of course, change any of the defaults using the appropriate +control macros. And should you wish to design headers from the +ground up, mom has a special macro +<a href="#hdrftr-plain">HEADER_PLAIN</a> +that removes all type adjustments to headers. The +type specs for running text are used instead, providing a simple +reference point for any alterations you want to make to the family, +font, size, and capitalization style of any header part. +</p> + +<h3 id="vertical-spacing" class="docs">Vertical placement and spacing of headers/footers</h3> + +<p> +As explained in the section, +<a href="docprocessing.html#behaviour">Typesetting macros during document processing</a>, +the top and bottom margins of a mom document are the vertical start +and end positions of +<a href="definitions.html#running">running text</a>, +not the vertical positions of headers or footers, which, by definition, +appear in the margins above (or below) running text. +</p> + +<p> +The vertical placement of headers is controlled by the macro +<a href="#hdrftr-margin">HEADER_MARGIN</a>, +which establishes the +<a href="definitions.html">baseline</a> +position of headers relative to the top edge of the page. The +header rule, whose position is relative to the header itself, is +controlled by a separate macro. +</p> + +<p> +FOOTER_MARGIN is the counterpart to HEADER_MARGIN, and establishes +the baseline position of footers relative to the bottom edge of the +page. +</p> + +<p> +The distance between headers and the start +of running text can be controlled with the macro +<a href="#hdrftr-gap">HEADER_GAP</a>, +effectively making HEADER_MARGIN + HEADER_GAP the top margin of +running text unless you give mom a literal top margin (with +<a href="typesetting.html#t-margin">T_MARGIN</a>) +or +<a href="typesetting.html#page">PAGE</a>, +in which case she ignores HEADER_GAP and begins the running text at +whatever top margin you give. +</p> + +<p> +FOOTER_GAP and +<a href="typesetting.html#b-margin">B_MARGIN</a> +work similarly, except they determine where running text <i>ends</i> +on the page. (See +<a href="#footer-margin">Important – footer margin and bottom margins</a> +for a warning about possible conflicts between the footer margin and +the bottom margin.) +</p> + +<p> +Confused? Mom apologizes. It’s really quite simple. By +default, mom sets headers <span class="nobr">4-1/2</span> +<a href="definitions.html#picaspoints">picas</a> +down from the top of the page and begins the running text 3 picas +(the HEADER_GAP) beneath that, which means the effective top margin +of the running text is <span class="nobr">7-1/2</span> picas (visually approx. 1 +inch). However, if you give mom a literal top margin (with +<a href="typesetting.html#t-margin">T_MARGIN</a>), +she ignores the HEADER_GAP and starts the running text at whatever +top margin you give. +</p> + +<p> +Footers are treated similarly. Mom sets footers 3 picas up from the +bottom of the page, and interrupts the processing of running text 3 +picas (the FOOTER_GAP) above that (again, visually approx. 1 inch). +However, if you give mom a literal bottom margin (with +<a href="typesetting.html#b-margin">B_MARGIN</a>), +she ignores the FOOTER_GAP and interrupts the processing of running +text at whatever bottom margin you give. +</p> + +<p> +If mom is paginating your document (she does, by default, at the +bottom of each page), the vertical spacing and placement of page +numbers, whether at the top or the bottom of the page, is managed +exactly as if the page numbers were headers (or footers), and are +controlled by the same macros. See +<a href="#index-paginate-control">Pagination control</a>. +</p> + +<div class="rule-short"><hr/></div> + +<!-- ======================================================================== --> + +<h2 id="headfoot-management" class="macro-group">Managing headers/footers</h2> + +<p> +The following are the basic macros for turning +<a href="definitions.html#header">headers</a> +or +<a href="definitions.html#footer">footers</a> +on or off. They should be invoked prior to +<a href="docprocessing.html#start">START</a>. +</p> + +<p> +By default, mom prints page headers. If you turn +them off, she will begin the +<a href="definitions.html#running">running text</a> +on each page with a default top margin of 6 +<a href="definitions.html#picaspoints">picas</a> +unless you have requested a different top margin (with +<a href="typesetting.html#t-margin">T_MARGIN</a>) +prior to +<a href="docprocessing.html#start">START</a>. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +<a href="#headers">HEADERS</a> +and +<a href="#footers">FOOTERS</a> +are mutually exclusive. If headers are on, footers (but not +bottom-of-page numbering) are automatically turned off. Equally, +if footers are on, headers (but not top-of-page numbering) are +automatically turned off. Thus, if you’d prefer footers in a +document, you need only invoke +<kbd><a href="#footers">.FOOTERS</a></kbd>; +there’s no need to turn headers off first. +</p> +</div> + +<p style="margin-top: -.5em"> +If you need both headers and footers, there’s a special macro +<a href="#headers-and-footers">HEADERS_AND_FOOTERS</a> +that allows you to set it up. +</p> + +<div class="macro-list-container"> +<h3 id="index-hdrftr" class="macro-list">Header/footer macros</h3> +<ul class="macro-list"> + <li><a href="#headers">HEADERS</a> – on or off</li> + <li><a href="#footers">FOOTERS</a> – on or off</li> + <li><a href="#footer-on-first-page">FOOTER_ON_FIRST_PAGE</a></li> + <li><a href="#userdef-hdrftr-rv">User-defined, single string recto/verso headers/footers</a> + <ul> + <li><a href="#hdrftr-rectoverso">HEADER_RECTO, HEADER_VERSO</a> + <ul style="margin-left: -.5em;"> + <li><a href="#userdef-hdrftr">User-defined, single string headers/footers (no recto/verso)</a></li> + </ul></li> + <li><a href="#reserved-strings">Using mom’s reserved strings in header/footer definitions</a> + (title, author, etc.) + </li> + </ul></li> + <li><a href="#headers-and-footers-intro">HEADERS_AND_FOOTERS</a> – + putting both headers and footers on document pages + </li> + <li><a href="#headfoot-control">Header and footer control macros</a></li> +</ul> +</div> + +<!-- -HEADERS- --> + +<div class="macro-id-overline"> +<h3 class="macro-id">Headers</h3> +</div> + +<div id="headers" class="box-macro-args"> +Macro: <b>HEADERS</b> <kbd class="macro-args">toggle</kbd> +</div> + +<p> +<a href="definitions.html#header">Page headers</a> +are on by default. If you don’t want them, turn them off by +invoking <kbd>.HEADERS</kbd> with any argument (<kbd>OFF</kbd>, +<kbd>QUIT</kbd>, <kbd>END</kbd>, <kbd>X</kbd>...), e.g. +<br/> +<span class="pre-in-pp"> + .HEADERS OFF +</span> +</p> + +<p> +<b>NOTE:</b> HEADERS automatically +disables +<a href="definitions.html#footer">footers</a> +but not the page numbers that normally appear at the bottom of the +page. If you want both headers and footers, you must use the macro +<a href="#headers-and-footers">HEADERS_AND_FOOTERS</a>. +</p> + +<p> +<b>ADDITIONAL NOTE:</b> If HEADERS are OFF, mom’s normal top +margin for +<a href="definitions.html#running">running text</a> +(7.5 +<a href="definitions.html#picaspoints">picas</a>) +changes to 6 picas (visually approx. 1 inch). This does NOT apply +to the situation where footers have been explicitly turned on +(with +<kbd><a href="#footers">FOOTERS</a></kbd>). +Explicitly invoking footers moves page numbering to the +top of the page, where its placement and spacing are the same as +for headers (i.e. the top margin of running text remains 7.5 +picas.) +</p> + +<!-- -FOOTERS- --> + +<div class="macro-id-overline"> +<h3 id="footers" class="macro-id">Footers</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>FOOTERS</b> <kbd class="macro-args">toggle</kbd> +</div> + +<p> +<a href="definitions.html#footer">Page footers</a> +are off by default. If you want them instead of +<a href="definitions.html#header">headers</a>, +turn them on by invoking +<kbd>.FOOTERS</kbd> without an argument, e.g. +<br/> +<span class="pre-in-pp"> + .FOOTERS +</span> +FOOTERS automatically disables headers, and +mom shifts the placement of page numbers from their +normal position at page bottom to the top of the page. +</p> + +<p> +<b>NOTE:</b> If you want both headers and footers, you must use the +macro +<a href="#headers-and-footers">HEADERS_AND_FOOTERS</a>. +</p> + +<p> +<b>NOTE:</b> By default, when footers are on, +mom does not print a page number on the first +page of a document, nor on first pages after +<a href="rectoverso.html#collate">COLLATE</a>. +If you don’t want this behaviour, you can change it with +<kbd><a href="#pagenum-on-first-page">PAGENUM_ON_FIRST_PAGE</a></kbd>. +</p> + +<!-- -FOOTER_ON_FIRST_PAGE- --> + +<div class="macro-id-overline"> +<h3 id="footer-on-first-page" class="macro-id">Footer on first page</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>FOOTER_ON_FIRST_PAGE</b> <kbd class="macro-args">toggle</kbd> +</div> + +<p> +If you invoke +<a href="#footers"><kbd>.FOOTERS</kbd></a>, +mom, by default, does not print a footer on the +first page of the document. (The +<a href="definitions.html">docheader</a> +on page 1 makes it redundant.) However, should you wish a footer on +page 1, invoke <kbd>.FOOTER_ON_FIRST_PAGE</kbd> without any argument. +</p> + +<div class="rule-short"><hr/></div> + +<h2 id="headfoot-control" class="macro-group">Control macros for headers/footers</h2> + +<p> +Virtually every part of headers (and footers; see the note on how +<a href="#headerfooter">“headers” means “footers”</a> +in the +<a href="#headfootpage-intro">Introduction</a> +to headers/footers) can be designed to your own specifications. +</p> + +<div class="macro-list-container"> +<h3 id="index-headfoot-control" class="macro-list">Header/footer control macros and defaults</h3> + +<ol style="margin-top: -1.5em; padding-bottom: 6px;"> + <li><a href="#hdrftr-strings">Header/footer strings</a> + <ul style="margin-left: -.5em;"> + <li><a href="#hdrftr-left">HEADER_LEFT</a></li> + <li><a href="#hdrftr-centre">HEADER_CENTER</a> + <ul style="margin-left: -.5em;"> + <li><a href="#hdrftr-centre-pad">Padding the header-centre string</a></li> + </ul></li> + <li><a href="#hdrftr-right">HEADER_RIGHT</a></li> + <li><a href="#reserved-strings">Using mom’s reserved strings in header/footer definitions</a> + (e.g. <kbd>\E*[$TITLE]</kbd> when you want + the title, <kbd>\E*[$AUTHOR]</kbd> when you want the author, etc.) + </li> + <li><a href="#page-number-symbol">Replacing header-left, centre or right with the page number</a></li> + <li><a href="#page-number-incl">Including the page number in header-left, centre or right</a></li> + </ul></li> + <li><a href="#hdrftr-style">Header/footer style</a> + <ul style="margin-left: -.5em;"> + <li><a href="#hdrftr-style-global">Global changes</a> + <ul style="margin-left: -.5em;"> + <li><a href="#hdrftr-plain">HEADER_PLAIN</a> – disable default adjustments to header parts</li> + <li><a href="#hdrftr-global-family">HEADER_FAMILY</a> – family for entire header</li> + <li><a href="#hdrftr-global-size">HEADER_SIZE</a> – size for entire header</li> + <li><a href="#hdrftr-color">HEADER_COLOR</a> – colourize the header</li> + </ul></li> + <li><a href="#hdrftr-style-part">Part-by-part changes</a> + <ul style="margin-left: -.5em;"> + <li><a href="#_family">_FAMILY</a> – left, centre or right family</li> + <li><a href="#_font">_FONT</a> – left, centre or right font</li> + <li><a href="#_size">_SIZE</a> – left, centre or right size</li> + <li><a href="#_caps">_CAPS</a> – left, centre or right all caps</li> + <li><a href="#_smallcaps">_SMALLCAPS</a> – left, centre or right smallcaps</li> + <li><a href="#_color">_COLOR</a> – left, centre or right colour</li> + </ul></li> + </ul></li> + <li><a href="#hdrftr-vertical">Header/footer vertical placement and spacing</a> + <ul style="margin-left: -.5em;"> + <li><a href="#hdrftr-margin">HEADER_MARGIN</a></li> + <li><a href="#hdrftr-gap">HEADER_GAP</a></li> + </ul></li> + <li><a href="#hdrftr-separator">Header/footer separator rule</a> + <ul style="margin-left: -.5em;"> + <li><a href="#hdrftr-rule">HEADER_RULE</a></li> + <li><a href="#hdrftr-rule-weight">HEADER_RULE_WEIGHT</a></li> + <li><a href="#hdrftr-rule-gap">HEADER_RULE_GAP</a></li> + <li><a href="#hdrftr-rule-color">HEADER_RULE_COLOR</a></li> + </ul></li> +</ol> +</div> + +<!-- -HDRFTR_STRINGS- --> + +<h4 id="hdrftr-strings" class="docs">1. Header/footer strings</h4> + +<div id="hdrftr-left" class="box-macro-args" style="margin-top: 1em;"> +”Macro: <b>HEADER_LEFT</b> <kbd class="macro-args">“<text of header-left> | #</kbd> +</div> + +<div id="hdrftr-centre" class="box-macro-args" style="margin-top: 1em;"> +”Macro: <b>HEADER_CENTER</b> <kbd class="macro-args">“<text of header-centre> | #</kbd> +</div> + +<div id="hdrftr-right" class="box-macro-args" style="margin-top: 1em;"> +”Macro: <b>HEADER_RIGHT</b> <kbd class="macro-args">“<text of header-right> | #</kbd> +</div> + +<p> +To change the text (the “string”) of the left, centre, +or right part of headers, invoke the appropriate macro, above, +with the string you want. For example, mom, by default, prints +the document’s author in the header-left position. If your +document has, say, two authors, and you want both their names to +appear header-left, change HEADER_LEFT like this: +<br/> +<span class="pre-in-pp"> + .HEADER_LEFT "R. Stallman, E. Raymond" +</span> +</p> + +<p> +Because the arguments to HEADER_LEFT, _CENTER, +and _RIGHT are +<a href="definitions.html#stringargument">string arguments</a>, +they must be enclosed in double-quotes. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Replace HEADER_, above, with FOOTER_ to change the strings in +footers. +</p> +</div> + +<h3 id="hdrftr-centre-pad" class="docs">Padding the header/footer centre string</h3> + +<div class="box-macro-args" style="margin-top: 1em;"> +Macro: <b>HEADER_CENTER_PAD</b> <kbd class="macro-args">LEFT | RIGHT <amount of space by which to pad centre string left or right></kbd> +</div> + +<p class="requires"> +• Requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +By default, mom centres the header-centre string on the line length +in effect for page headers. +</p> + +<p> +In some cases, notably when the header-left or header-right +strings are particularly long, the effect isn’t pretty. The +offendingly long header-left or right crowds, or even overprints, +the header-centre. That’s where HEADER_CENTER_PAD comes +in. With a bit of experimentation (yes, you have to preview the +document), you can use HEADER_CENTER_PAD to move the header-centre +string left or right until it looks acceptably centred between the +two other strings. +</p> + +<p> +For example, say your document is an outline for a novel called +<i>By the Shores of Lake Attica</i>. You’ve told mom you want +<br/> +<span class="pre-in-pp"> + .DOCTYPE NAMED "Outline" +</span> +but when you preview your work, you see that “Outline”, +in the centre of the page header, is uncomfortably close to the +title, which is to the right. By invoking +<br/> +<span class="pre-in-pp"> + .HEADER_CENTER_PAD RIGHT 3P +</span> +you can scoot the word "Outline" over three +<a href="definitions.html#picaspoints">picas</a> +<i>to the left</i> (because the padding is added onto the right of the +string) so that your head looks nicely spaced out. Invoking +<kbd>.HEADER_CENTER_PAD</kbd> with the <kbd>LEFT</kbd> argument puts +the padding on the left side of the string so that it scoots +right. +</p> + +<p> +Most reassuring of all is that if you use HEADER_CENTER_PAD +conjunction with +<a href="rectoverso.html#recto-verso">RECTO_VERSO</a>, +mom will pad the centre string appropriately left OR right, +depending on which page you’re on, without you having to tell +her to do so. +</p> + +<h3 id="reserved-strings" class="docs">Using mom’s reserved strings in header/footer definitions</h3> + +<p> +As pointed out in the +<a href="#author-note">Author’s note</a> +in the introduction to headers/footers, headers and footers are +something you don’t normally have to worry much about. Mom +usually knows what to do. +</p> + +<p> +However, situations do arise where you need to manipulate what goes +in the header/footer strings, setting and resetting them as you go +along. +</p> + +<p> +A case where you might want to do this would be if you want to +output endnotes at the end of each document in a series of +<a href="rectoverso.html#collate">collated</a> +documents, and you want the word "Endnotes" to go in the header +centre position of the endnotes, but want, say, the +<a href="docprocessing.html#title">TITLE</a> +to go back into the centre position for the next output document. +</p> + +<p> +In scenarios like the above, mom has a number of reserved strings +you can plug into the HEADER_LEFT, _CENTER and _RIGHT macros. They +are: +<br/> +<span class="pre-in-pp"> + \E*[$TITLE] —the current argument passed to .TITLE + \E*[$DOCTITLE] —the current argument passed to .DOCTITLE + \E*[$DOC_TYPE] —the NAMED argument passed to .DOCTYPE + \E*[$AUTHOR] —the current first argument passed to .AUTHOR + \E*[$AUTHOR_1...9] —the current arguments passed to .AUTHOR + \E*[$AUTHORS] —a comma-separated concatenated string + of all the current arguments passed to .AUTHOR + (i.e. a list of authors) + \E*[$CHAPTER_STRING] —the current argument passed to .CHAPTER_STRING, + if invoked, otherwise, "Chapter" + \E*[$CHAPTER] —the current argument (typically a number) passed + to .CHAPTER + \E*[$CHAPTER_TITLE] —the current argument passed to .CHAPTER_TITLE +</span> +Returning to the scenario above, first, you’d define a centre +string for the endnotes page: +<br/> +<span class="pre-in-pp"> + .HEADER_CENTER "Endnotes" +</span> +Then, you’d output the endnotes: +<br/> +<span class="pre-in-pp"> + .ENDNOTES +</span> +Then, you’d prepare mom for the next document: +<br/> +<span class="pre-in-pp"> + .COLLATE + .TITLE "New Doc Title" + .AUTHOR "Josephine Blough" +</span> +Then, you’d redefine the header-centre string using the +reserved string <kbd><span class="nobr">\*[$TITLE]</span></kbd>, like this: +<br/> +<span class="pre-in-pp"> + .HEADER_CENTER "\E*[$TITLE]" +</span> +And last, you’d do: +<br/> +<span class="pre-in-pp"> + .START +</span> +Voilà ! Any argument you pass to +<a href="docprocessing.html#title">TITLE</a> +from here on in (say, for subsequent documents) is back in the +header-centre position. Here’s the whole routine again: +<br/> +<span class="pre-in-pp"> + .HEADER_CENTER "Endnotes" + .ENDNOTES + .COLLATE + .TITLE "New Doc Title" + .AUTHOR "Josephine Blough" + .HEADER_CENTER "\E*[$TITLE]" + .START +</span> +</p> + +<p> +If need be, you can concatenate the strings, as in the following +example. +<br/> +<span class="pre-in-pp"> + .HEADER_CENTER "\E*[$CHAPTER_STRING] \E*[$CHAPTER]" +</span> +which, assuming a <kbd>.CHAPTER_STRING</kbd> of +<kbd>"Chapter"</kbd> and a <kbd>.CHAPTER</kbd> of +<kbd>"2"</kbd>, would put “Chapter 2” in the +header-centre position. +</p> + +<h3 id="page-number-symbol" class="docs">Replacing header-left, -centre or -right with the page number</h3> + +<p> +If you would like to have the current page number appear in the +header-left, -centre, or -right position instead of a text string, +invoke the appropriate macro, above, with the single argument +<kbd>#</kbd> (the “number” or “pound” sign). +Do not surround the pound size with double-quotes, as you would +normally do if the argument to <kbd>.HEADER_CENTER</kbd> were a +string. For example, +<br/> +<span class="pre-in-pp"> + .HEADER_CENTER # +</span> +(notice, no double-quotes) will print the current page number in the +centre part of headers. +</p> + +<h3 id="page-number-incl" class="docs">Including the page number in header-left, -CENTER or -right</h3> + +<p> +If you would like to <i>include</i> the current page number in the +string you pass to HEADER_LEFT, _CENTER, or _RIGHT, (as +opposed to replacing the string with the page number), use the +special +<a href="definitions.html#inlines">inline escape</a> +<kbd><span class="nobr">\*[PAGE#]</span></kbd> in the string argument. +</p> + +<p> +For example, say you have a document that’s ten pages long, +and you want header-right to say “page <whichever> of +10”, invoke <kbd>.HEADER_RIGHT</kbd> as follows: +<br/> +<span class="pre-in-pp"> + .HEADER_RIGHT "page \*[PAGE#] of 10" +</span> +The header-right of page two will read “page 2 of 10”, +the header-right of page three will read “page 3 of 10”, +and so on. +</p> + +<!-- -HDRFTR_STYLE- --> + +<h4 id="hdrftr-style" class="docs">2. Header/footer style</h4> + +<h5 id="hdrftr-style-global" class="docs" style="margin-top: 1em;">Global changes</h5> + +<p style="margin-top: .5em;"> +The following macros allow you to make changes that affect all parts +of the header at once. +</p> + +<div class="macro-list-container"> +<ul style="padding-top: 6px; padding-bottom: 6px; margin-left: -.5em;"> + <li><a href="#hdrftr-plain">HEADER_PLAIN</a></li> + <li><a href="#hdrftr-global-family">HEADER_FAMILY</a></li> + <li><a href="#hdrftr-global-size">HEADER_SIZE</a></li> + <li><a href="#hdrftr-color">HEADER_COLOR</a></li> +</ul> +</div> + +<div id="hdrftr-plain" class="box-macro-args"> +Macro: <b>HEADER_PLAIN</b> +</div> + +<p> +By default, mom makes adjustments to the font, size, and +capitalization style of each part of headers to achieve an +aesthetically pleasing look. Should you wish to design your own +headers from the ground up without worrying how changes to the +various elements of header style interact with mom’s defaults, +invoke <kbd>.HEADER_PLAIN</kbd> by itself, with no argument. Mom +will disable her default behaviour for headers, and reset all +elements of header style to the same family, font, point size and +colour as she uses in paragraphs. +</p> + +<p> +Replace HEADER_, above, with FOOTER_ to disable mom’s default +behaviour for the various elements of footer style. +</p> + +<div id="hdrftr-global-family" class="box-macro-args"> +Macro: <b>HEADER_FAMILY</b> <kbd class="macro-args"><family></kbd> +</div> + +<p> +By default, mom uses the default document family for headers. If +you would like her to use another +<a href="definitions.html#family">family</a> +in headers, invoke <kbd>.HEADER_FAMILY</kbd> with the identifier +for the family you want. The argument is the same as for the +typesetting macro +<a href="typesetting.html#family">FAMILY</a>. +</p> + +<p> +Replace HEADER_, above, with FOOTER_ to change the footer family. +</p> + +<div id="hdrftr-global-size" class="box-macro-args"> +Macro: <b>HEADER_SIZE</b> <kbd class="macro-args"><+|-number of points></kbd> +</div> +<p class="requires"> +• Argument is relative to the point size of type in paragraphs. +See +<span style="font-style: normal;"><a href="docelement.html#control-macro-args">Arguments to the control macros</a></span> +for an explanation of how control macros ending in +_SIZE work. +</p> + +<p> +By default, mom makes small adjustments to the size of each part +of a header to achieve an aesthetically pleasing result. If +you’d like her to continue to do so, but would like the +overall appearance of headers to be a little smaller or a little +larger, invoke <kbd>.HEADER_SIZE</kbd> with + or - the number of <a +href="definitions.html#picaspoints">points</a> (fractions allowed) +by which you want her to in/decrease the size of headers. For +example, +<br/> +<span class="pre-in-pp"> + .HEADER_SIZE +.75 +</span> +increases the size of every part of a header by 3/4 of a point while +respecting mom’s own little size changes. +</p> + +<p> +Replace HEADER_, above, with FOOTER_ to change the footer size. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Normally, macros that control headers have no effect on +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPEWRITE</kbd></a>. +HEADER_SIZE is an exception. While all parts of a header in +PRINTSTYLE <kbd>TYPEWRITE</kbd> are always the same size, you +can use HEADER_SIZE with PRINTSTYLE <kbd>TYPEWRITE</kbd> to +reduce the header’s overall point size. You’ll most +likely require this when the +<a href="docprocessing.html#copystyle">COPYSTYLE</a> +is <kbd>DRAFT</kbd>, since portions of the header may overprint if, +say, the title of your document is very long. +</p> +</div> + +<div id="hdrftr-color" class="box-macro-args"> +Macro: <b>HEADER_COLOR</b> <kbd class="macro-args"><colorname></kbd> +</div> + +<p> +If you want your headers in a colour different from the document +default (usually black), invoke <kbd>.HEADER_COLOR</kbd> with the +name of a colour pre-defined (or “initialized”) with +<a href="color.html#newcolor">NEWCOLOR</a> +or +<a href="color.html#xcolor">XCOLOR</a>. +</p> + +<p> +HEADER_COLOR will set all the parts of the header +plus the header rule in the colour you give it as an argument. If +you wish finer control over colour in headers, you can use +<a href="#_color">HEADER_<POSITION>_COLOR</a> +to colourize each part of the header separately, as well as +<a href="#hdrftr-rule-color">HEADER_RULE_COLOR</a> +to change the colour of the header rule. +</p> + +<p> +Replace HEADER_, above, with FOOTER_ to colourize footers. +</p> + +<h4 id="hdrftr-style-part" class="docs">3. Part by part changes</h4> + +<p> +When using the following control ”macros, replace +“<POSITION> by <b>LEFT, CENTER,</b> or RIGHT as +appropriate. +</p> + +<div class="macro-list-container"> +<ul style="padding-top: 6px; padding-bottom: 6px; margin-left: -.5em;"> + <li><a href="#_family">HEADER_<POSITION>_FAMILY</a></li> + <li><a href="#_font">HEADER_<POSITION>_FONT</a></li> + <li><a href="#_size">HEADER_<POSITION>_SIZE</a></li> + <li><a href="#_caps">HEADER_<POSITION>_CAPS</a></li> + <li><a href="#_smallcaps">HEADER_<POSITION>_SMALLCAPS</a></li> + <li><a href="#_color">HEADER_<POSITION>_COLOR</a></li> + <li><a href="#grouping">Grouping style parameters for the individual header/footer parts</a></li> +</ul> +</div> + +<div id="_family" class="box-macro-args"> +Macro: <b>HEADER_<POSITION>_FAMILY</b> <kbd class="macro-args"><family></kbd> +</div> + +<p> +Use HEADER_<POSITION>_FAMILY to change the +<a href="definitions.html#family">family</a> +of any part of headers. See +<a href="docelement.html#control-macro-args">Arguments to the control macros</a> +for an explanation of how control macros ending in _FAMILY work. +</p> + +<p> +Replace HEADER_, above, with FOOTER_ to change a footer part’s family. +</p> + +<div id="_font" class="box-macro-args"> +Macro: <b>HEADER_<POSITION>_FONT</b> <kbd class="macro-args"><font></kbd> +</div> + +<p> +Use HEADER_<POSITION>_FONT to change the +<a href="definitions.html#font">font</a> +of any part of headers. See +<a href="docelement.html#control-macro-args">Arguments to the control macros</a> +for an explanation of how control macros ending in _FONT work. +</p> + +<p> +Replace HEADER_, above, with FOOTER_ to change a footer part’s font. +</p> + +<div id="_size" class="box-macro-args"> +Macro: <b>HEADER_<POSITION>_SIZE</b> <kbd class="macro-args"><+|-number of points></kbd> +</div> + +<p> +Use HEADER_<POSITION>_SIZE to change the size of any part of +headers (relative to the point size of type in paragraphs). See +<a href="docelement.html#control-macro-args">Arguments to the control macros</a> +for an explanation of how control macros ending in _SIZE work. +</p> + +<p> +Replace HEADER_, above, with FOOTER_ to change a footer part’s size. +</p> + +<div id="_caps" class="box-macro-args"> +Macro: <b>HEADER_<POSITION>_CAPS</b> <kbd class="macro-args">toggle</kbd> +</div> + +<p> +HEADER_<POSITION>_CAPS is a +<a href="definitions.html#toggle">toggle macro</a>. +If you want any part of headers to be set in all caps, regardless of +the capitalization of that part’s string as given to the +<a href="docprocessing.html#reference-macros">reference macros</a> +or as defined by you with the +<a href="#hdrftr-strings">header string control macros</a>, +simply invoke this macro (using the appropriate position) with no +argument. If you wish to turn capitalization off (say, for the +header-right string that mom capitalizes by default), invoke the +macro with any argument (e.g. <kbd>OFF</kbd>, <kbd>QUIT</kbd>, +<kbd>END</kbd>, <kbd>X</kbd>...). +</p> + +<p> +Replace HEADER_, above, with FOOTER_ to change a footer part’s +capitalization style. +</p> + +<div id="_smallcaps" class="box-macro-args"> +Macro: <b>HEADER_<POSITION>_SMALLCAPS</b> <kbd class="macro-args">toggle</kbd> +</div> + +<p> +HEADER_<POSITION>_SMALLCAPS is a +<a href="definitions.html#toggle">toggle macro</a>. +If you want any part of headers to be set in smallcaps, simply +invoke this macro (using the appropriate position) with no argument. +If you wish to turn the smallcaps off, invoke the macro with any +argument (e.g. <kbd>OFF</kbd>, <kbd>QUIT</kbd>, <kbd>END</kbd>, +<kbd>X</kbd>...). +</p> + +<p> +Replace HEADER,_ above, with FOOTER_ to invoke smallcaps for footer +parts. +</p> + +<div id="_color" class="box-macro-args"> +Macro: <b>HEADER_<POSITION>_COLOR</b> <kbd class="macro-args"><colorname></kbd> +</div> + +<p> +HEADER_<POSITION>_COLOR allows you to set a colour for each of +the three possible parts of a page header separately. For example, +say you want the right part of the header (by default, the document +title) in red, this is how you’d get it: +<br/> +<span class="pre-in-pp"> + .HEADER_RIGHT_COLOR red +</span> +The other parts of the header will be in the default header colour +(usually black, but that can be changed with +<a href="#hdrftr-color">HEADER_COLOR</a>). +</p> + +<p> +Remember that you have to define (or “initialize”) a +colour with +<a href="color.html#newcolor">NEWCOLOR</a> +or +<a href="color.html#xcolor">XCOLOR</a> +before you can use the colour. +</p> + +<p> +If you create a +<a href="#userdef-hdrftr-rv">user-defined header</a> +with +<a href="#hdrftr-rectoverso">HEADER_RECTO</a> +or +<a href="#hdrftr-rectoverso">HEADER_VERSO</a>, +and you want various elements within the header to be colourized, +embed the colours in the string passed to HEADER_RECTO or +HEADER_VERSO with the +<a href="color.html#color-inline"><kbd><span class="nobr">\*[<colorname>]</span></kbd></a> +<a href="definitions.html#inlines">inline escape</a>. +</p> + +<p> +Replace HEADER_, above, with FOOTER_ to set the colours for the +various elements of footers. +</p> + +<h5 id="grouping" class="docs">Grouping style parameters for the individual header parts</h5> + +<p> +Instead of using control macros for the style parameters +of an individual header part, the parameters may be +<a href="docelement.html#grouping">grouped</a> +by invoking <kbd>HEADER_<POSITION>_STYLE</kbd> with a list of +keyword/value pairs. Acceptable keywords are +<kbd>FAMILY FONT SIZE COLOR CAPS</kbd> and <kbd>SMALLCAPS</kbd>. +Keyword/value pairs may appear on the same line as the macro, or +separated into several lines using the backslash character +(<kbd>\</kbd>). If you use the latter style, all but the final +parameter must be terminated with the backslash. +</p> + +<p> +Thus, to set the header-left part in Helvetica bold, red, 1 point larger +than +<a href="definitions.html#running">running text</a> +and all caps, you could do either +<br/> +<span class="pre-in-pp"> + .HEADER_LEFT_STYLE FAMILY H FONT B SIZE +1 COLOR red CAPS +</span> +or +<br/> +<span class="pre-in-pp"> + .HEADER_LEFT_STYLE \ + FAMILY H \ + FONT B \ + SIZE +1 \ + COLOR red \ + CAPS +</span> +If you need to reverse the sense of <kbd>CAPS</kbd> +or <kbd>SMALLCAPS</kbd>, use <kbd>NO_CAPS</kbd> or +<kbd>NO_SMALLCAPS</kbd>. +</p> + +<!-- -HDRFTR_VERTICAL- --> + +<h4 id="hdrftr-vertical" class="docs">3. Header/footer vertical placement and spacing</h4> + +<p> +See +<a href="#vertical-spacing">Vertical placement and spacing of headers/footers</a> +for an explanation of how mom deals with +headers, footers, and top/bottom page margins. +</p> + +<div class="macro-list-container"> +<ul style="padding-top: 6px; padding-bottom: 6px; margin-left: -.5em;"> + <li><a href="#hdftr_margin">HEADER_MARGIN</a></li> + <li><a href="#hdftr_gap">HEADER_GAP</a></li> +</ul> +</div> + +<!-- -HDRFTR_MARGIN- --> + +<div id="hdrftr-margin" class="box-macro-args"> +Macro: <b>HEADER_MARGIN</b> <kbd class="macro-args"><distance to baseline of header></kbd> +</div> + +<p class="requires"> +• Requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +Use HEADER_MARGIN to set the distance from the top edge of the page to the +<a href="definitions.html#baseline">baseline</a> +of type in headers. A unit of measure is required, and decimal +fractions are allowed. +</p> + +<p> +Mom’s default header margin is 4-1/2 +<a href="definitions.html#picaspoints">picas</a>, +but if you want a different margin, say, 1/2-inch, do +<br/> +<span class="pre-in-pp"> + .HEADER_MARGIN .5i +</span> +If your document uses +<a href="definitions.html#footer">footers</a>, +replace HEADER_, above, with FOOTER_. The argument to FOOTER_MARGIN +is the distance from the bottom edge of the page to the baseline of +type in footers. Mom’s default footer margin is 3 +<a href="definitions.html#picaspoints">picas</a>. +</p> + +<h3 class="docs">Header/footer margins and page numbering</h3> + +<p> +Mom uses HEADER_MARGIN and FOOTER_MARGIN to establish the baseline +position of page numbers in addition to the baseline position of +headers and footers proper. +</p> + +<p> +By default, page numbers appear at the bottom of the page, therefore +if you want the default position (bottom), but want to change the +baseline placement, use FOOTER_MARGIN. Conversely, if page numbers +are at the top of the page, either because you turned +<a href="#footers">FOOTERS</a> +on or because you instructed mom to put them there with +<a href="#pagenum-pos">PAGENUM_POS</a>, +you’d use HEADER_MARGIN to change their baseline placement. +</p> + +<div id="footer-margin" class="box-important" style="padding-bottom: 15px;"> +<p class="tip-top"> +<span class="important" style="display: block; margin-bottom: -1em;">Important – FOOTER_MARGIN and bottom margins</span> +<br/> +Mom requires a footer margin (i.e. the distance from the bottom of +the page at which to place footers) for proper operation, hence she +sets one, even if you don’t. As stated above, her default +footer margin is 3-picas. +</p> + +<p> +If you use +<a href="typesetting.html#b-margin">B_MARGIN</a> +or +<a href="typesetting.html#page">PAGE</a> +to set a bottom margin for your document (prior to +<a href="docprocessing.html#start">START</a>), +and the margin’s too close to mom’s default +footer margin (or a footer margin you set yourself with +FOOTER_MARGIN), mom will not print your footers; additionally, +she’ll give you a warning and some advice on standard error. +When this happens, you must reset either B_MARGIN or FOOTER_MARGIN +so there’s an adequate amount of space for mom to print the +bottom line of running text and the footer. +</p> + +<p> +If you see the warning even when footers and/or bottom-of-page page +numbering are disabled, set a nominal footer margin of 0 prior to +<a href="docprocessing.html#start">START</a>, +as in these examples. +</p> + +<div id="examples-footnotes-1" class="examples-container" style="padding-bottom: 1em;"> +<div class="examples" style="margin-top: 0; margin-bottom: -.25em;">Example 1</div> +<span class="pre"> + <reference macros, etc> + .PAGINATION OFF + .B_MARGIN .25i + .FOOTER_MARGIN O + .START +</span> +</div> + +<div id="examples-footnotes-2" class="examples-container" style="margin-top: 1em; padding-bottom: 1em;"> +<div class="examples" style="margin-top: 0;">Example 2</div> +<span class="pre"> + <reference macros, etc> + .HEADERS OFF + .PAGENUM_POS TOP RIGHT + .B_MARGIN .25i + .FOOTER_MARGIN O + .START +</span> +</div> +</div> + +<!-- -HDRFTR_GAP- --> + +<div id="hdrftr-gap" class="box-macro-args"> +Macro: <b>HEADER_GAP</b> <kbd class="macro-args"><distance from header to start of running text></kbd> +</div> + +<p class="requires"> +• Requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +Use HEADER_GAP to set the distance from the +<a href="definitions.html#baseline">baseline</a> +of type in headers to the start of +<a href="definitions.html#running">running text</a>. +A unit of measure is required, and decimal fractions are allowed. +</p> + +<p> +As explained in +<a href="#vertical-spacing">Vertical placement and spacing of headers/footers</a>, +HEADER_MARGIN + HEADER_GAP determine the default vertical starting +position of running text on the page unless you have given mom your +own top margin (with +<a href="typesetting.html#t-margin">T_MARGIN</a>). +If you give a top margin, mom ignores HEADER_GAP; running text +starts at your stated top margin. +</p> + +<p> +Mom’s default header gap is 3 +<a href="definitions.html#picaspoints">picas</a>, +but if you want a different gap, say, 2 centimetres, do +<br/> +<span class="pre-in-pp"> + .HEADER_GAP 2c +</span> +If your document uses +<a href="definitions.html#footer">footers</a>, +replace HEADER_, above, with FOOTER_. The argument to FOOTER_GAP +is the distance from the baseline of type in footers to the last +baseline of running text on the page. +</p> + +<p> +As explained in +<a href="#vertical-spacing">Vertical placement and spacing of headers/footers</a>, +FOOTER_MARGIN + FOOTER_GAP determine the default vertical end +position of running text on the page unless you have given mom a +bottom margin (with +<a href="typesetting.html#b-margin">B_MARGIN</a>). +If you give a bottom margin, mom ignores FOOTER_GAP; running text +ends at your stated bottom margin, subject to the restriction outlined +<a href="#footer-margin">here</a>. +</p> + +<p> +Mom’s default footer gap is 3 +<a href="definitions.html#picaspoints">picas</a>. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Mom uses HEADER_GAP and FOOTER_GAP to establish the start and end +baseline positions of running text with respect to both headers and +footers AND page numbers. If you wish to change the gap between the +last line of running text and a bottom page number, use FOOTER_GAP. +If page numbers are at the top of the page, change the gap between +the number and the first line of running text with HEADER_GAP. +</p> +</div> + +<div id="gap-note" class="box-tip"> +<p class="tip-top"> +<span class="note">Additional note:</span> +HEADER_GAP and FOOTER_GAP may only be used once, at the start of a +document. In +<a href="rectoverso.html#collate">collated documents</a>, +this means that HEADER_GAP or FOOTER_GAP cannot be used to change +the gaps once they have been set. The same applies to the Table of +Contents, Endnotes, Bibliographies, and Lists of... . +</p> + +<p class="tip-bottom"> +In the event that you need to change the header or footer gap after +the start of a document, you must do so with +<a href="typesetting.html#t-margin">T_MARGIN</a> +or +<a href="typesetting.html#b-margin">B_MARGIN</a>, +which raise or lower the top and bottom margins of +<a href="definitions.html#running">running text</a> +but do not affect the placement headers and footers. +(See +<a href="tables-of-contents.html#toc-page-settings-example">here</a> +for a demonstration.) +</p> +</div> + +<!-- -HDRFTR_SEPARATOR- --> + +<h4 id="hdrftr-separator" class="docs">4. Header/footer separator rule</h4> + +<p> +The header/footer separator rule is a modest horizontal rule, +set slightly below the header (or above the footer), that runs +the length of the +<a href="definitions.html#header">header</a> +and helps separate it visually from +<a href="definitions.html#running">running text</a>. If +you don’t want the rule, you can turn it off. If you want it, +but at a different vertical position relative to the header (or +footer), you can alter its placement. +</p> + +<div class="macro-list-container"> +<ul style="padding-top: 6px; padding-bottom: 6px; margin-left: -.5em;"> + <li><a href="#hdrftr-rule">HEADER_RULE</a> – on or off</li> + <li><a href="#hdrftr-rule-weight">HEADER_RULE_WEIGHT</a> – weight of the rule</li> + <li><a href="#hdrftr-rule-gap">HEADER_RULE_GAP</a> – distance of rule from header</li> + <li><a href="#hdrftr-rule-color">HEADER_RULE_COLOR</a> – color of rule header</li> +</ul> +</div> + +<!-- -HDRFTR_RULE- --> + +<div id="hdrftr-rule" class="box-macro-args"> +Macro: <b>HEADER_RULE</b> <kbd class="macro-args">toggle</kbd> +</div> + +<p> +By default, mom prints a header separator rule underneath headers +(or above footers). If you don’t want the rule, turn it off by +invoking <kbd>.HEADER_RULE</kbd> with any argument (<kbd>OFF</kbd>, +<kbd>QUIT</kbd>, <kbd>END</kbd>, <kbd>X</kbd>...), e.g. +<br/> +<span class="pre-in-pp"> + .HEADER_RULE OFF +</span> +To turn the rule (back) on, invoke <kbd>.HEADER_RULE</kbd> +without any argument. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Replace HEADER_, above, with FOOTER_ to enable/disable the printing +of the footer separator rule. (Most likely, if you’re using +<kbd><a href="#footers">FOOTERS</a></kbd>, +you’ll want it off.) +</p> +</div> + +<!-- -HDRFTR_RULE_WEIGHT- --> + +<div id="hdrftr-rule-weight" class="box-macro-args"> +Macro: <b>HEADER_RULE_WEIGHT</b> <kbd class="macro-args"><weight in points></kbd> +</div> + +<p class="requires"> +• Argument must <span class="normal">NOT</span> have a <a href="definitions.html#unitofmeasure">unit of measure</a> appended +</p> + +<p> +HEADER_RULE_WEIGHT controls the weight (“thickness”) of +the header rule. Like +<a href="inlines.html#rule-weight">RULE_WEIGHT</a>, +it takes a single argument: the weight of the header rule expressed +in +<a href="definitions.html#picaspoints">points</a> +but without the unit of measure, <kbd>p</kbd>, appended. The +argument to HEADER_RULE_WEIGHT must be greater than 0 and less than +100; decimal fractions are allowed. +</p> + +<p> +Say, for example, you want a really strong header separator rule. +<br/> +<span class="pre-in-pp"> + .HEADER_RULE_WEIGHT 4 +</span> +which sets the separator rule weight to 4 points, is how you’d do +it. +</p> + +<p> +Mom’s default header rule weight is 1/2 point. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Replace HEADER_, above, with FOOTER_ to set the weight of the footer +separator rule. +</p> +</div> + +<!-- -HDRFTR_RULE_GAP- --> + +<div id="hdrftr-rule-gap" class="box-macro-args"> +Macro: <b>HEADER_RULE_GAP</b> <kbd class="macro-args"><distance of rule beneath header></kbd> +</div> + +<p class="requires"> +• Requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +HEADER_RULE_GAP is the distance from the +<a href="definitions.html#baseline">baseline</a> +of type in headers to the top edge of the rule underneath. (If +FOOTER_RULE_GAP, the gap is the distance from the top of the highest +<a href="definitions.html#ascender">ascender</a> +to the bottom edge of the rule.) A unit of measure is required, and +decimal fractions are allowed. Please note that HEADER_RULE_GAP has +no effect on +<a href="#hdrftr-gap">HEADER_GAP</a> +(i.e., HEADER_RULE_GAP is NOT added to HEADER_GAP when mom calculates +the space between headers and the start of +<a href="definitions.html#running">running text</a>). +</p> + +<p> +By default, the header rule gap is 4 +<a href="definitions.html#picaspoints">points</a>. +If you’d like to change it to, say, 1/4 +<a href="definitions.html#em">em</a>, do +<br/> +<span class="pre-in-pp"> + .HEADER_RULE_GAP .25m +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Replace HEADER_, above, with FOOTER_ if you’re using +<a href="definitions.html#footer">footers</a> +and want to change the separator rule gap. In footers, the gap is +measured from the top of the tallest +<a href="definitions.html#ascender">ascender</a> +in the footer. +</p> + +<p class="tip-bottom"> +<span class="additional-note">Additional note:</span> +When using +<a href="#hdrftr-recto">FOOTER_RECTO</a> +and +<a href="#hdrftr-verso">FOOTER_VERSO</a>, +make sure that the default size for footers +(<a href="#footer-global-size">FOOTER_SIZE</a>) +is set to the largest size of type that will be used in the footer +or mom may not get the rule gap right. Inline changes to the size +of type in FOOTER_RECTO and FOOTER_VERSO should always be negative +(smaller) than the default. +</p> +</div> + +<!-- -HDRFTR_RULE_COLOR- --> + +<div id="hdrftr-rule-color" class="box-macro-args"> +Macro: <b>HEADER_RULE_COLOR</b> <kbd class="macro-args"><colorname></kbd> +</div> + +<p> +If you wish to change the colour of the header rule, invoke +<kbd>.HEADER_RULE_COLOR</kbd> with the name of a colour pre-defined +(or “initialized”) with +<a href="color.html#newcolor">NEWCOLOR</a> +or +<a href="color.html#xcolor">XCOLOR</a>. +</p> + +<p> +HEADER_RULE_COLOR overrides the colour set with +<a href="#hdrftr-color">HDRFTR_COLOR</a>, +so it’s possible to have the heads entirely in, say, blue (set +with HEADER_COLOR), and the header rule in, say, red. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Replace HEADER_, above, with FOOTER_ to change the colour of the +footer rule. +</p> +</div> + +<div class="rule-short"><hr/></div> + +<!-- -USERDEF_HDRFTR- --> + +<h2 id="userdef-hdrftr-rv" class="macro-group">User-defined, single string recto/verso headers/footers</h2> + +<p> +Sometimes, you’ll find you can’t get mom’s +handling of 3-part headers or footers to do exactly what you want in +the order you want. This is most likely happen when you want the +information contained in the headers/footers split over two pages, +as is often the case with recto/verso documents. +</p> + +<p> +Say, for example, you want recto page headers to contain a +document’s author, centred, and verso page headers to contain +the document’s title, also centred, like this: +<br/> +<span class="pre-in-pp"> + +------------------------+ +------------------------+ + | Author | | Title | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + +------------------------+ +------------------------+ +</span> +With mom’s standard 3-part headers, this isn’t possible, +even when +<a href="rectoverso.html#recto-verso">RECTO_VERSO</a> +is enabled. RECTO_VERSO switches the left and right parts of +headers on alternate pages, but the centre part remains unchanged. +</p> + +<p> +Any time you need distinctly different headers on alternate pages, +mom has macros that let you manually design and determine what goes +into headers on recto pages, and what goes into headers on verso +pages. The macros are +<a href="#hdrftr-recto">HEADER_RECTO</a> +and +<a href="#hdrftr-verso">HEADER_VERSO</a>. +Both allow you to state whether the header is flush left, centred, +or flush right, and both take a single +<a href="definitions.html#stringargument">string argument</a> +with which, by combining text and +<a href="definitions.html#inlines">inline escapes</a>, +you can make the headers come out just about any way you want. Use +of the <kbd><span class="nobr">\*[PAGE#]</span></kbd> escape is permitted in the +string argument (see +<a href="#page-number-incl">Including the page number in header-left, -centre or -right</a>), +and, as an added bonus, mom provides a special mechanism whereby +it’s possible to +<a href="#padding-hdrftr">pad</a> +the string as well. The padding mechanism lets you create headers +that contain left, centre and right parts like mom’s defaults +but entirely of your own design. +</p> + +<div class="macro-list-container"> +<ul style="padding-top: 6px; padding-bottom: 6px; margin-left: -.5em;"> + <li><a href="#hdrftr-recto">HEADER_RECTO</a></li> + <li><a href="#hdrftr-verso">HEADER_VERSO</a> + <ul style="margin-left: -.5em;"> + <li><a href="#userdef-hdrftr">User-defined single string headers/footers (no recto/verso)</a></li> + <li><a href="#padding-hdrftr">Padding the header-recto/header-verso string</a></li> + </ul></li> +</ul> +</div> + +<!-- -HDRFTR_RECTOVERSO- --> + +<div id="hdrftr-recto" class="box-macro-args"> +Macro: <b>HEADER_RECTO</b> <kbd class="macro-args">LEFT | CENTER | RIGHT [ CAPS ] "<header recto string>"</kbd> +</div> + +<div id="hdrftr-verso" class="box-macro-args" style="margin-top: 1em;"> +Macro: <b>HEADER_VERSO</b> <kbd class="macro-args">LEFT | CENTER | RIGHT [ CAPS ] "<header verso string>"</kbd> +</div> + +<div id="userdef-hdrftr" class="box-important"> + +<p class="tip"> +<span class="tip" style="display: block; margin-bottom: -1.25em; color: #000056; font-size: 100%;">User-defined single string headers/footers (no recto/verso)</span> +<br/> +HEADER_RECTO may be used to create user-defined, single string +headers (or footers, with FOOTER_RECTO), even when recto/verso is +not enabled (with +<a href="rectoverso.html#recto-verso">RECTO_VERSO</a>). +In such cases, the header/footer you create is the one used on +every page, making HEADER_RECTO your “I need to design my own +headers from scratch” solution. +</p> +</div> + +<p> +HEADER_RECTO and HEADER_VERSO behave identically, hence all +references to HEADER_RECTO in this section also refer to +HEADER_VERSO. Furthermore, FOOTER_ can be used instead of HEADER_ +to set up recto/verso footers. +</p> + +<p> +The first argument to HEADER_RECTO is the direction in which you +want the header +<a href="definitions.html#quad">quadded</a>. +<kbd>L</kbd>, <kbd>C</kbd>, and <kbd>R</kbd> may be used in place of +<kbd>LEFT</kbd>, <kbd>CENTER</kbd>, and <kbd>RIGHT</kbd>. +</p> + +<p> +The second argument (optional) tells mom to capitalize the text of +the header. <b>Please note:</b> Do not use +<a href="inlines.html#uc-lc"><kbd><span class="nobr">\*[UC]...\*[LC]</span></kbd></a> +inside the string passed to HEADER_RECTO. +</p> + +<p> +The final argument is a string, surrounded by double-quotes, +containing what you want in the header. HEADER_RECTO disables +mom’s normal 3-part headers, therefore anything you want in +the headers must be entered by hand in the string, including colours +(via the +<a href="definitions.html#inlines">inline escape</a> +<a href="color.html#color-inline"><kbd><span class="nobr">\*[<colorname>]</span></kbd></a>). +</p> + +<p> +By default, HEADER_RECTO is set at the same size, and in the same +family and font, as paragraph text. The control macros +<a href="#hdrftr-global-family">HEADER_FAMILY</a> +and +<a href="#hdrftr-global-size">HEADER_SIZE</a> +may be used to change the default family and size. Changes to the +font(s) within the string must be accomplished with the +<a href="definitions.html#inlines">inline escapes</a> +<kbd><span class="nobr">\*[ROM]</span></kbd>, +<kbd><span class="nobr">\*[IT]</span></kbd>, +<kbd><span class="nobr">\*[BD]</span></kbd>, +<kbd><span class="nobr">\*[BDI]</span></kbd>, +and <kbd><span class="nobr">\*[PREV]</span></kbd> (see +<a href="inlines.html#inline-fonts-mom">Changing fonts</a>). +Additional refinements to the style of the header-recto string, +including horizontal spacing and/or positioning, can also be made +with inline escapes. +</p> + +<p> +To include the current page number in the string, use the +<kbd><span class="nobr">\*[PAGE#]</span></kbd> +<a href="definitions.html#inlines">inline escape</a>. +</p> + +<h3 id="padding-hdrftr" class="docs">Padding the header-recto/header-verso string</h3> + +<p> +You can “pad” the header-recto string, a convenience +you’ll appreciate in circumstances such as the following. +<br/> +<span class="pre-in-pp"> + VERSO RECTO + +------------------------+ +------------------------+ + | Author Page# | | Page# Title | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + +------------------------+ +------------------------+ +</span> +</p> + +<p> +There are two steps to padding the string argument passed to HEADER_RECTO +(if you’re unsure what padding is, see +<a href="goodies.html#pad">Insert space into lines</a>). +</p> +<ol style="margin-top: -.5em; margin-left: -.5em; margin-bottom: -.5em;"> + <li>Begin and end the string (inside the double-quotes) with the caret character (<kbd>^</kbd>).</li> + <li>Enter the pound sign (<kbd>#</kbd>) at any point in the string where you want an equalized amount of whitespace inserted.</li> +</ol> + +<p> +The situation depicted above is accomplished like this: +<br/> +<span class="pre-in-pp"> + .HEADER_RECTO LEFT "^\*[PAGE#]#\E*[$TITLE]^" + .HEADER_VERSO LEFT "^\E*[$AUTHOR]#\*[PAGE#]^" +</span> +Notice that the quad argument, <kbd>LEFT</kbd>, is used in both +cases. When padding a header, it doesn’t matter which +quad argument you use, although you must be sure to supply +one. Also note that mom does not interpret the <kbd>#</kbd> in +<kbd><span class="nobr">\*[PAGE#]</span></kbd> as a padding marker (i.e. as a +place to insert whitespace). +</p> + +<div class="box-important"> +<p class="tip"> +<span class="important">Important:</span> +The +<a href="goodies.html#pad-marker">PAD_MARKER</a> +macro, which changes the default pad marker (<kbd>#</kbd>) used by +<a href="goodies.html#pad">PAD</a>, +has no effect on the pad marker used in the HEADER_RECTO string. If +you absolutely must have a literal pound sign in your HEADER_RECTO +string, use the escape sequence for the pound sign +( <kbd>\[sh]</kbd> ) where you want the pound sign to go. +</p> +</div> + +<!-- -HDRFTR_RECTOVERSO- --> + +<h2 id="headers-and-footers-intro" class="macro-group">Headers and footers on the same page</h2> + +<p> +Normally, mom prints either a header or a footer, but not both, depending on whether +<a href="#headers">HEADERS</a> +or +<a href="#footers">FOOTERS</a> +is enabled. (Page numbering, whether in the top margin +or the bottom, is not considered a header or a footer.) +Should you need both headers and footers on the same page, the +single macro HEADERS_AND_FOOTERS is the way to set it up. +</p> + +<div id="headers-and-footers" class="box-macro-args"> +Macro: <b>HEADERS_AND_FOOTERS</b> <kbd class="macro-args">(see Invocation)</kbd> +</div> + +<p> +Invocation: +<br/> +<span class="pre-in-pp" style="margin-bottom: -1em;"> + .HEADERS_AND_FOOTERS \ + <L | C | R> "<header-recto string>" \ + <L | C | R> "<footer-recto string>" \ + <L | C | R> "<header-verso string>" \ + <L | C | R> "<footer-verso string>" +</span> +or +<span class="pre-in-pp" style="margin-top: -.5em;"> + .HEADERS_AND_FOOTERS <anything> +</span> +</p> + +<p> +Unlike the macros, +<a href="#headers">HEADERS</a> +and +<a href="#footers">FOOTERS</a>, +which are +<a href="definitions.html#toggle">toggle</a> +macros, HEADERS_AND_FOOTERS requires that you supply the information +you want in the headers and footers yourself. Mom does no automatic +generation of things like the title and the author in headers and +footers when you’re using HEADERS_AND_FOOTERS. Furthermore, +style changes—family, font, pointsize, colour, capitalization, +etc —are entirely your responsibility and must be made with +<a href="definitions.html#inlines">inline escapes</a> +in the arguments passed to <kbd>“<recto +”header string>“</kbd>, <kbd><recto footer +string>“</kbd>, etc. By default, mom sets the headers and +footers created with HEADERS_AND_FOOTERS in the same family, font, +point size, capitalization style and colour as +<a href="definitions.html#running">running text</a>. +</p> + +<p> +The manner of entering what you want is identical to the way you +input +<a href="#userdef-hdrftr-rv">single string headers and footers</a>. +I suggest reading up on them, as well as looking at the entries, +<a href="#hdrftr-rectoverso">HEADER_RECTO</a> +and +<a href="#reserved-strings">Using mom’s reserved strings in header/footer definitions</a>. +</p> + +<p> +The same +<a href="#padding-hdrftr">padding mechanism</a> +used in HEADER_RECTO and HEADER_VERSO is available in the +<a href="definitions.html#stringargument">string arguments</a> +passed to HEADERS_AND_FOOTERS, allowing you to simulate two- and +three-part headers and footers. +</p> + +<p> +<kbd>L | C | R</kbd> in the arguments to HEADERS_AND_FOOTERS refers +to whether you want the specific header or footer part on the left, +in the middle, or on the right. (You can also use the longer forms, +<kbd>LEFT</kbd>, <kbd>CENTER</kbd> and <kbd>RIGHT</kbd>.) The +string you give afterwards is whatever text you want, including +mom’s +<a href="#reserved-strings">reserved strings</a>, +and whatever +<a href="definitions.html#inlines">inline escapes</a> +you need to change things like family and font, pointsize, colour, +etc. as you go along. +</p> + +<p> +Note the backslashes in the invocation, above. Every set of +arguments given this way to HEADERS_AND_FOOTERS <i>except the +last</i> requires a backslash after it. The use of backslashes +isn’t required if you want to put the entire argument list on +the same (very long!) line as the macro itself; I recommend sticking +to the style shown above to keep things manageable. +</p> + +<p> +If you want to disable having both headers and footers on the same +page, invoke <kbd>.HEADERS_AND_FOOTERS</kbd> with any argument +you want (e.g. <kbd>OFF</kbd>, <kbd>QUIT</kbd>, <kbd>END</kbd>, +<kbd>X</kbd>...). Mom will restore her default behaviour of setting +automatically generated page headers, with the page number, +centered, at the bottom of the page. If you would prefer footers +instead of headers after turning HEADERS_AND_FOOTERS off, invoke +<a href="#footers"><kbd>.FOOTERS</kbd></a> +afterwards. +</p> + +<h4 class="docs" style="margin-bottom: 1em;">Examples of HEADERS_AND_FOOTERS usage</h4> + +<div id="examples-userdef-hdrftr-1" class="examples-container" style="padding-bottom: 0;"> +<div class="examples" style="margin-top: 12px; margin-bottom: 0;">Example 1: Header and footer the same on every page</div> +<span class="pre"> +.HEADERS_AND_FOOTERS \ +-----------------------+ +C "\E*[$TITLE]" \ | Title | +L "^\E*[$AUTHOR]#\*[PAGE#]^" | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | Author Pg. # | + +-----------------------+ +</span> + +<p> +<kbd><span class="nobr">\E*[$TITLE]</span></kbd> and +<kbd><span class="nobr">\E*[$AUTHOR]</span></kbd> will print the strings you pass +to +<a href="docprocessing.html#title">TITLE</a> +and +<a href="docprocessing.html#author">AUTHOR</a>; +<kbd><span class="nobr">\*[PAGE#]</span></kbd> is how you include the page number +in a header or footer string. (For a list of special strings you +can use in headers and footers, see +<a href="#reserved-strings">here</a>.) +</p> + +<p> +You don’t have to use these special strings. You can type +in anything you like. I’ve only used them here to show that +they’re available. +</p> +</div> + +<div id="examples-userdef-hdrftr-2" class="examples-container" style="margin-top: 1em; padding-bottom: 18px;"> +<div class="examples" style="margin-top: 12px; margin-bottom: 0;">Example 2: Different headers and footers on recto/verso pages</div> +<span class="pre"> +.HEADERS_AND_FOOTERS \ +C "BOOK TITLE" \ +L "^\*[PAGE#]#\E*[$AUTHOR]^" \ +C "Story Title" \ +L "^\E*[$AUTHOR]#\*[PAGE#]^" + + +-----------------------+ +------------------------+ + | BOOK TITLE | | Story Title | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | Pg. # Author | | Author Pg.# | + +-----------------------+ +------------------------+ +</span> +</div> + +<div class="rule-short" style="margin-top: 1.25em;"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="pagination-intro" class="macro-group">Pagination</h2> + +<p> +By default, mom paginates documents. Page numbers +appear in the bottom margin of the page, centred between two hyphens. +As with all elements of mom’s document processing, +most aspects of pagination style can be altered to suit your taste +with control macros. +</p> + + +<div class="macro-list-container"> +<h3 id="index-pagination" class="macro-list">Pagination macros</h3> +<ul class="macro-list"> + <li><a href="#paginate">PAGINATE</a> – pagination on or off</li> + <li><a href="#pagenumber">PAGENUMBER</a> – user-defined (starting) page number</li> + <li><a href="#pagenum-style">PAGENUM_STYLE</a> – digits, roman numerals, etc</li> + <li><a href="#pagenum-on-first-page">PAGENUM_ON_FIRST_PAGE</a> – put page number on first page when numbering is at the top of the page</li> + <li><a href="#draft-with-pagenumber">DRAFT_WITH_PAGENUMBER</a> – attach draft/revision information to page numbers</li> + <li><a href="#pagenumber-string">PAGENUMBER_STRING</a> – user-defined page number string</li> + <li><a href="#index-paginate-control">Pagination control macros and defaults</a></li> +</ul> +</div> + +<!-- -PAGINATE- --> + +<div id="paginate" class="box-macro-args"> +Macro: <b>PAGINATE</b> <kbd class="macro-args">toggle</kbd> +</div> + +<p class="alias" style="margin-bottom: 0;"> +<i>Alias:</i> <b>PAGINATION</b> +</p> + +<p> +By default, mom paginates documents (in the bottom margin). If +you’d prefer she not paginate, turn pagination off by +invoking <kbd>.PAGINATE</kbd> with any argument (<kbd>OFF</kbd>, +<kbd>NO</kbd>, <kbd>QUIT</kbd>, <kbd>END</kbd>, <kbd>X</kbd>...), +e.g. +<br/> +<span class="pre-in-pp"> + .PAGINATE NO +</span> +To (re)start pagination, invoke <kbd>.PAGINATE</kbd> without any +argument. +</p> + +<!-- -PAGENUMBER- --> + +<div id="pagenumber" class="box-macro-args"> +Macro: <b>PAGENUMBER</b> <kbd class="macro-args"><number></kbd> +</div> + +<p> +As is to be expected, pagination of documents begins at page 1. If +you’d prefer that mom begin with a different number on the +first page of a document, invoke <kbd>.PAGENUMBER</kbd> with the +number you want. +</p> + +<p> +PAGENUMBER need not be used only to give mom a "first page" number. +It can be used at any time to tell mom what number you want a page +to have. Subsequent page numbers will, of course, be incremented by +1 from that number. +</p> + +<!-- -PAGENUM_STYLE- --> + +<div id="pagenum-style" class="box-macro-args"> +Macro: <b>PAGENUM_STYLE</b> <kbd class="macro-args">DIGIT | ROMAN | roman | ALPHA | alpha</kbd> +</div> + +<p> +PAGENUM_STYLE lets you tell mom what kind of page numbering you +want. +<br/> +<span class="pre-in-pp"> + DIGIT Arabic digits (1, 2, 3...) + ROMAN upper case roman numerals (I, II, III...) + roman lower case roman numerals (i, ii, iii...) + ALPHA upper case letters (A, B, C...) + alpha lower case letters (a, b, c...) +</span> +</p> + +<!-- -PAGENUM_ON_FIRST_PAGE- --> + +<div id="pagenum-on-first-page" class="box-macro-args"> +Macro: <b>PAGENUM_ON_FIRST_PAGE</b> <kbd class="macro-args">toggle</kbd> +</div> + +<p> +This macro applies only if you’ve enabled +<a href="#footers">FOOTERS</a>. +If FOOTERS are on, mom automatically places page numbers at the tops +of pages except on the first page of a document (or on first pages +after +<a href="rectoverso.html#collate">COLLATE</a>). +If you’d like the page number to appear on “first” pages +when footers are on, invoke +<br/> +<span class="pre-in-pp"> + .PAGENUM_ON_FIRST_PAGE +</span> +with no argument. Any other argument turns the feature off +(<kbd>OFF</kbd>, <kbd>QUIT</kbd>, <kbd>END</kbd>, <kbd>X</kbd>, +etc). +</p> + +<p> +As with most of the +<a href="definitions.html#controlmacro">control macros</a>, +PAGENUM_ON_FIRST_PAGE can be invoked at any time, meaning that if +you don’t want a page number on the very first page of a +document, but do want one on pages that appear after COLLATE, omit +it before the first +<a href="docprocessing.html#start">START</a> +of the document, then invoke it either just before or after your +first COLLATE. +</p> + +<!-- -DRAFT_WITH_PAGENUMBER- --> + +<div id="draft-with-pagenumber" class="box-macro-args"> +Macro: <b>DRAFT_WITH_PAGENUMBER</b> +</div> + +<p> +Sometimes, in +<a href="docprocessing.html#copystyle">COPYSTYLE <kbd>DRAFT</kbd></a>, +the CENTER part of page headers gets overcrowded because of +the draft and revision information that go there by default. +DRAFT_WITH_PAGENUMBER is one way to fix the problem. +</p> + +<p> +Invoked without an argument, <kbd>.DRAFT_WITH_PAGENUMBER</kbd> +removes draft/revision information from the page headers and +attaches it instead to the document’s page numbering, in the +form +<br/> +<span class="pre-in-pp"> + Draft #, Rev. # / <pagenumber> +</span> +If you have not supplied mom with a draft number (with +<a href="docprocessing.html#draft">DRAFT</a>) +DRAFT_WITH_PAGENUMBER will assume “Draft 1“, and will +print it before the page number. +</p> + +<p> +See the note in +<a href="docprocessing.html#copystyle-note">COPYSTYLE <kbd>DRAFT</kbd> +</a> +for other ways of dealing with crowded page headers when formatting +draft-style copy. +</p> + +<!-- -PAGENUMBER_STRING- --> + +<div id="pagenumber-string" class="box-macro-args"> +Macro: <b>PAGENUMBER_STRING</b> "<text of page number string>" +</div> + +<p> +If you want page numbering to contain text in addition to the page +number itself, use PAGENUMBER_STRING. +</p> + +<p> +The most common use for PAGENUMBER_STRING is to include the total +number of pages along with the page number, for example +“Page 1 of 10, Page 2 of 10...” To accomplish this, +you’d enter +<br/> +<span class="pre-in-pp"> + .PAGENUMBER_STRING "Page \*[PAGE#] of 10" +</span> +Notice that the page number is entered symbolically with the +<a href="definitions.html#inlines">inline escape</a> +<span style="white-space:nowrap"><kbd><span class="nobr">\*[PAGE#]</span></kbd>,</span> +while the total number of pages must be entered explicitly after the +document is complete and the total number of pages known. +</p> + +<!-- -PAGINATE_CONTROL- --> + +<div class="macro-list-container"> +<h3 id="index-paginate-control" class="macro-list">Pagination control macros and defaults</h3> + +<ol style="margin-top: -1.5em; padding-bottom: 6px;"> + <li><a href="#paginate-general">Family/font/size/colour</a></li> + <li><a href="#pagenum-pos">Page number position (vertical and horizontal)</a></li> + <li><a href="#pagenum-hyphens">Enclose page numbers with hyphens (on or off)</a></li> +</ol> +</div> + +<h4 id="paginate-general" class="docs">1. Page number family/font/size/colour</h4> + +<div class="defaults-container" style="margin-top: 1em; padding-bottom: 8px;"> +<p class="defaults" style="padding-top: 6px;"> +See +<a href="docelement.html#control-macro-args">Arguments to the control macros</a>. +<br/> +The following control macros may also be +<a href="docelement.html#grouping">grouped</a> +using PAGENUMBER_STYLE.* +</p> +<span class="pre defaults"> +.PAGENUM_FAMILY default = prevailing document family +.PAGENUM_FONT default = roman +.PAGENUM_SIZE default = +0 (i.e. same size as paragraph text) +.PAGENUM_COLOR default = black +</span> +</div> + +<p style="margin-top: -2em"> +*Note: Do not confuse PAGENUMBER_STYLE with +<a href="#pagenum-style">PAGENUM_STYLE</a>. +</p> + +<h4 id="pagenum-pos" class="docs" style="margin-top: 0em;">2. Page number position</h4> + +<div class="box-macro-args" style="margin-top: 1em;"> +Macro: <b>PAGENUM_POS</b> <kbd class="macro-args">[ TOP | BOTTOM ] [ LEFT | CENTER | RIGHT ]</kbd> +</div> + +<p> +Use PAGENUM_POS to change the default position of automatic page +numbering. PAGENUM_POS requires <i>two</i> arguments: a vertical +position (<kbd>TOP</kbd> or <kbd>BOTTOM</kbd>) and a horizontal +position (<kbd>LEFT</kbd> or <kbd>CENTER</kbd> or <kbd>RIGHT</kbd>). +</p> + +<p> +For example, if you turn both +<a href="definitions.html#header">headers</a> +and +<a href="definitions.html#footer">footers</a> +off (with <kbd>.HEADERS OFF</kbd> and +<kbd>.FOOTERS OFF</kbd>) and you want mom to number your pages +at the top right position, enter +<br/> +<span class="pre-in-pp"> + .PAGENUM_POS TOP RIGHT +</span> +</p> + +<div id="pagenum-pos-note" class="box-tip" style="margin-top: 1em;"> +<p class="tip"> +<span class="note">Note:</span> +HEADERS must be OFF for PAGENUM_POS TOP to work. +</p> +</div> + +<h4 id="pagenum-hyphens" class="docs" style="margin-top: -1em;">3. Enclose page numbers with hyphens (on or off)</h4> + +<div class="box-macro-args" style="margin-top: 1em;"> +Macro: <b>PAGENUM_HYPHENS</b> <kbd class="macro-args">toggle</kbd> +</div> + +<p> +By default, mom encloses page numbers between hyphens. If you +don’t want this behaviour, invoke the macro PAGENUM_HYPHENS +with any argument (<kbd>OFF</kbd>, <kbd>QUIT</kbd>, <kbd>END</kbd>, +<kbd>X</kbd>, etc), like this: +<br/> +<span class="pre-in-pp"> + .PAGENUM_HYPHENS OFF +</span> +If, for some reason, you want to turn page number hyphens back +on, invoke the macro without an argument. +</p> + +<!-- -BLANK_PAGE- --> + +<h2 id="blank-pages" class="macro-group">Inserting blank pages into a document</h2> + +<div class="box-macro-args"> +Macro: <b>BLANKPAGE</b> <kbd class="macro-args"><# of blank pages to insert> [DIVIDER [NULL]]</kbd> +</div> + +<p> +This one does exactly what you’d expect—inserts a blank +page (or pages) into a document. Unless you give the optional argument, +<kbd>NULL</kbd>, mom silently increments the page number of every +blank page and keeps track of +<a href="rectoverso.html#recto-verso">recto/verso</a> +stuff, but otherwise does nothing. This is useful for forcing new +sections of a document onto recto pages, but may have other +applications as well. +</p> + +<p> +The required argument to BLANK_PAGE is the number of blank pages to +insert. The argument is not optional, hence even if you only want +one blank page, you have to tell mom: +<br/> +<span class="pre-in-pp"> + .BLANKPAGE 1 +</span> +The optional argument <kbd>DIVIDER</kbd> must be given if +you’re inserting a blank page before the start of major +document sections (chapters, endnotes, bibliographies, +or tables of contents–provided the table of contents is not being +<a href="tables-of-contents.html#auto-relocate-toc">autorelocated</a>). +Without the <kbd>DIVIDER</kbd> argument, mom simply +inserts the blank pages and prepares the next page to receive +<a href="definitions.html#running">running text</a>. +</p> + +<p> +<kbd>NULL</kbd>, which is also optional, allows you to output the +specified number of pages without mom incrementing the page number +for each blank page. She will, however, continue to keep track +of which pages are recto/verso if recto/verso printing has been +enabled. +</p> + +<div id="blankpage-note" class="box-tip" style="margin-top: 1.5em;"> +<p class="tip"> +<span class="note">Note:</span> +Do not use BLANKPAGE before TOC if the table of contents is being +<a href="tables-of-contents.html#auto-relocate-toc">autorelocated</a>. +</p> +</div> + +<div class="rule-long"><hr/></div> + +<!-- Navigation links --> +<table style="width: 100%; margin-top: 12px;"> +<tr> + <td style="width: 33%;"><a href="toc.html">Back to Table of Contents</a></td> + <td style="width: 24%; text-align: center;"><a href="#top">Top</a></td> + <td style="width: 42%; text-align: right;"><a href="rectoverso.html">Next: Recto/verso printing, collating</a></td> +</tr> +</table> + +</div> + +<div class="bottom-spacer"><br/></div> + +</body> +</html> diff --git a/contrib/mom/momdoc/images.html b/contrib/mom/momdoc/images.html new file mode 100644 index 0000000..dc1837f --- /dev/null +++ b/contrib/mom/momdoc/images.html @@ -0,0 +1,3515 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004-2020 Free Software Foundation, Inc. +Written by Peter Schaffter (peter@schaffter.ca). + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"/> + <title>Mom -- Graphics, floats, and preprocessor support</title> + <link rel="stylesheet" type="text/css" href="stylesheet.css" /> +</head> + +<body style="background-color: #f5faff;"> + +<!-- ==================================================================== --> + +<div id="top" class="page"> + +<!-- Navigation links --> +<table style="width: 100%;"> +<tr> + <td><a href="toc.html">Back to Table of Contents</a></td> + <td style="text-align: right;"><a href="headfootpage.html#top">Next: Page headers/footers, pagination</a></td> +</tr> +</table> + +<h1 class="docs">Graphics, floats, and preprocessor support</h1> + +<div style="width: 80%; margin: auto;"> +<ul class="no-enumerator" style="margin-left: -1em;"> + <li><a href="#images-intro">Inserting images and graphics</a> + <ul> + <li><a href="#converting">Image conversion and file processing</a> + <ul style="margin-left: -1em"> + <li><a href="#pdf">PDF</a></li> + <li><a href="#eps">EPS</a></li> + </ul></li> + <li><a href="#pdf-image">The PDF_IMAGE macro</a> + <ul style="margin-left: -1em"> + <li><a href="#pdf-image-frame">PDF_IMAGE_FRAME</a>—set parameters for image frames</li> + </ul></li> + <li><a href="#pspic">The PSPIC macro</a></li> + </ul></li> + <li><a href="#floats-intro">Floats</a> + <ul> + <li><a href="#float">The FLOAT macro</a></li> + <li><a href="#float-label-caption">Labelling and captioning floats</a> + <ul style="margin-left: -1em"> + <li><a href="#label">LABEL</a></li> + <li><a href="#caption">CAPTION</a></li> + </ul></li> + </ul></li> + <li><a href="#preprocessor-support">Preprocessor support</a> + <ul> + <li><a href="#tbl">tbl</a> + <ul style="margin-left: -1em;"> + <li><a href="#ts-te">.TS / .TH / .TE macros and arguments</a></li> + </ul></li> + <li><a href="#eqn">eqn</a> + <ul style="margin-left: -1em;"> + <li><a href="#eq-en">.EQ / .EN macros and arguments</a></li> + </ul></li> + <li><a href="#pic">pic</a> + <ul style="margin-left: -1em;"> + <li><a href="#ps-pe">.PS / .PE macros and arguments</a></li> + <li><a href="#pic-text-style">PIC_TEXT_STYLE</a>—set parameters for text in diagrams</li> + </ul></li> + <li><a href="#grap">grap</a></li> + <li><a href="#refer">refer</a></li> + </ul></li> + <li><a href="#captions-and-labels">Captions and labels</a> + <ul> + <li><a href="#autolabel">AUTOLABEL</a></li> + <li><a href="#set-autolabel">SET_AUTOLABEL</a></li> + <li><a href="#caption-after-label">CAPTION_AFTER_LABEL</a></li> + <li><a href="#captions-labels-sources">CAPTIONS / LABELS / SOURCES</a>—set parameters for each</li> + <li><a href="#mla">MLA</a></li> + </ul></li> + <li><a href="#lists-of">Lists of Figures, Tables, and Equations</a> + <ul> + <li><a href="#lists-placement">Placement of Lists</a></li> + <li><a href="#lists-macros">Macros to generate Lists</a></li> + <li><a href="#formatting-lists">Formatting and style parameters for Lists</a> + <ul style="margin-left: -1em"> + <li><a href="#lists-style">LISTS_STYLE</a></li> + </ul></li> + </ul></li> + <li><a href="#box-intro">Shaded backgrounds and frames (boxes)</a> + <ul> + <li><a href="#box-intro">Introduction and description</a></li> + <li><a href="#box">The BOX macro</a></li> + <li><a href="#box-notes">Additional notes on box usage and behaviour</a> + <ul> + <li><a href="#qbef">QUOTE, BLOCKQUOTE, EPIGRAPH, FLOAT</a></li> + <li><a href="#code">CODE</a></li> + <li><a href="#quotes">Description of boxed BLOCKQUOTEs and EPIGRAPHs</a> + <ul style="margin-left: -1em; list-style: disc;"> + <li><a href="#leftover">Leftover box syndrome</a></li> + </ul></li> + <li><a href="#slides">Slides</a></li> + <li><a href="#footnotes">Footnotes</a></li> + </ul></li> + <li><a href="#page-color-intro">Page colour</a></li> + </ul> + </li> +</ul> +</div> + +<div class="rule-medium"><hr/></div> + +<h2 id="images-intro" class="docs">Inserting images and graphics</h2> + +<p> +In order to include images in mom documents, the images must be in +either PDF (.pdf) or EPS (.eps) format. Each format requires its own +macro, but both take the same arguments, and in the same order. +</p> + +<p> +Please note that there are differences in the way the files +containing PDF and EPS images must be processed, hence documents may +not contain a mix. +</p> + +<h3 id="converting" class="docs">Image conversion and file processing</h3> + +<p> +When your image files are not in PDF or EPS format—jpgs, +for example—you must convert them before including them in +a mom document. Any utility for converting images may used. The +ImageMagick suite of programmes, present on most GNU/Linux +systems, contains <b>convert</b>, which is simple and effective. +</p> + +<h4 id="pdf" class="docs">PDF</h4> + +<p> +Assuming a jpg image, conversion to PDF is done like this: +<br/> +<span class="pre-in-pp"> + convert <image>.jpg <image>.pdf +</span> +Any image type supported by <b>convert</b> may be converted this +way. +</p> + +<p> +Mom files containing PDF images must be processed using +groff’s pdf driver. Use of +<a href="using.html#pdfmom" style="font-weight: bold">pdfmom</a> +is strongly recommended, which natively invokes the pdf driver. +<br/> +<span class="pre-in-pp"> + pdfmom doc.mom > doc.pdf +</span> +</p> + +<h4 id="eps" class="docs">EPS</h4> + +<p> +Assuming a jpg image, conversion to EPS is done like this: +<br/> +<span class="pre-in-pp"> + convert <image>.jpg <image>.eps +</span> +Any image type supported by <b>convert</b> may be converted this +way. There have been reports of trouble with PostScript level 2 +images, so don’t save your images in this format. +</p> + +<p> +Mom files containing EPS images must be processed using +groff’s postscript driver. Use of +<a href="using.html#pdfmom" style="font-weight: bold">pdfmom</a>, +which can be told to use the postscript driver, is strongly +recommended. +<br/> +<span class="pre-in-pp"> + pdfmom -Tps doc.mom > doc.pdf +</span> +</p> + +<!-- -PDF_IMAGE- --> + +<div class="macro-id-overline"> +<h3 id="pdf-image" class= "macro-id">PDF_IMAGE</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>PDF_IMAGE</b> \ +<br/> +<kbd class="macro-args">[ -L | -C | -R | -I <indent> ] \ +<br/> +<pdf image file> <width> <height> [ SCALE <factor> ] \ +<br/> +[ ADJUST +|-<vertical adjustment> ] [ NO_SHIM ] [ NO_FLEX ] \ +<br/> +[ FRAME ] \ +<br/> +[ CAPTION "<caption>" ] [ SHORT_CAPTION "<short caption>" ] \ +<br/> +[ LABEL "<label>" ] [ TARGET "<name>" ]</kbd> +</div> +<p class="requires"> +• <span style="font-style: normal"> +<kbd><indent></kbd>, +<kbd><width></kbd>, +<kbd><height></kbd></span> +and +<span style="font-style: normal"> +<kbd><vertical adjustment></kbd></span> +require a +<a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Mom files with embedded PDF images must be processed with +pdfmom doc.mom > doc.pdf. Arguments may be broken +into several lines using the “line-continued” backslash +(<b>\</b>), as shown above. +</p> +</div> + +<p> +Unlike +<a href="#pspic">PSPIC</a>, +which it resembles, PDF_IMAGE requires that the pdf image’s +dimensions (the bounding box, +<a href="#bounding-box">see below</a>) +be supplied each time it’s called. +</p> + +<p> +The first optional argument tells mom how to align the image +horizontally, with <kbd>-L</kbd>, <kbd>-C</kbd>, and <kbd>-R</kbd> +standing for left, centre and right respectively. If you need more +precise placement, the <kbd>-I</kbd> argument allows you to give an +indent from the left margin. Thus, to indent a PDF image 6 +<a href="definitions.html#picaspoints">picas</a> +from the left margin +<br/> +<span class="pre-in-pp"> + .PDF_IMAGE -I 6P <remaining arguments> +</span> +If you omit the first argument, the image will be centred. +</p> + +<p> +<kbd><pdf image></kbd> must be in PDF format, with a .pdf +extension. If it is not, mom will abort with a message. See +<a href="#pdf">here</a> +for instructions on converting image formats to PDF. +</p> + +<p id="bounding-box"> +<kbd><width></kbd> and <kbd><height></kbd> are the +dimensions of the image’s bounding box. The most reliable way +of getting the bounding box is with the utility, <strong>pdfinfo</strong>: +<br/> +<span class="pre-in-pp"> + pdfinfo <image.pdf> | grep "Page *size" +</span> +This will spit out a line that looks like this: +<br/> +<span class="pre-in-pp"> + Page size: width x height pts +</span> +<kbd>pts</kbd> means +<a href="definitions.html#picaspoints">points</a>, +therefore the unit of measure appended to <kbd><width></kbd> +and <kbd><height></kbd> must be <kbd>p</kbd>. +</p> + +<p> +The remaining arguments are optional and may be entered in any +order, although it’s best to put <kbd>CAPTION</kbd>, +<kbd>SHORT_CAPTION</kbd>, and <kbd>LABEL</kbd> last. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">SCALE</h5> + +<p> +<kbd>SCALE</kbd> allows you to scale the image by +<kbd><factor></kbd>. The factor is a percentage of the +image’s original dimensions, thus <kbd>SCALE 50</kbd> +scales the image to 50 percent of its original size. No percent +sign or unit of measure should be appended. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">ADJUST</h5> + +<p> +<kbd>ADJUST</kbd> lets you raise (<kbd>-</kbd>) or lower +(<kbd>+</kbd>) the image +<span style="font-style: italic">within the space allotted for it</span> +by the amount you specify. This is useful for achieving good +optical centering between surrounding blocks of type. A unit of +measure is required. +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="note">Tip:</span> +You may sometimes find that a PDF_IMAGE at the bottom of a page +doesn’t sit flush on the bottom margin, however attempts to lower it +by adding space beforehand result in it being deferred to the next +page. +</p> + +<p class="tip-bottom"> +The solution is to introduce <i>negative</i> space before the image +so that it displays on the page, then lower it to the bottom margin +with PDF_IMAGE’s ADJUST argument. +</p> +</div> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">NO_SHIM</h5> + +<p> +<kbd>NO_SHIM</kbd> instructs mom not to apply +<a href="docprocessing.html#shim-vs-flex">shimming</a> +after an image, which she will do automatically when shimming is +enabled, which it is by default. Shimming ensures that running text +after the image falls properly on the page’s +<a href="definitions.html#baseline-grid">baseline grid</a>, +but can result in slightly unequal spacing above and below +(correctable with the <kbd>ADJUST</kbd> argument). +<kbd>NO_SHIM</kbd> is useful when you have several images on the +page and there are visible differences in the spacing beneath them +as a result of shimming. To ensure a flush bottom margin, the last +image on the page should be shimmed, i.e. should not be given the +<kbd>NO_SHIM</kbd> argument. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">NO_FLEX</h5> + +<p> +<kbd>NO_FLEX</kbd> instructs mom not to apply +<a href="docprocessing.html#shim-vs-flex">flex-spacing</a> +after an image, which she will do automatically when flex-spacing is +enabled. <kbd>NO_FLEX</kbd> is useful when you have several images +on the page and you want to distribute excess vertical +whitespace on the page amongst other flex-spacing points on the +page. If there are no others, the final image should be +flex-spaced, i.e. not given the <kbd>NO_FLEX</kbd> argument. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">FRAME</h5> + +<p> +<kbd>FRAME</kbd> instructs mom to put a frame around the image. +Parameters for the frame are set with +<a href="#pdf-image-frame">PDF_IMAGE_FRAME</a>. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">CAPTION</h5> + +<p> +<kbd>CAPTION</kbd> allows you to give the image a caption. By +default, the caption appears above the image, but may be attached to +the label that appears beneath the image. See +<a href="#caption-after-label">CAPTION_AFTER_LABEL</a> +in +<a href="#captions-and-labels">Captions and labels</a>. +The text of the caption must be surrounded by double-quotes. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">SHORT_CAPTION</h5> + +<p> +<kbd>SHORT_CAPTION</kbd> allows you to trim long captions for +inclusion in the List of Figures. The text you supply, surrounded +by double-quotes, is what will appear in the List. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">LABEL</h5> + +<p> +<kbd>LABEL</kbd>, if given, appears beneath the image. The text you +supply, surrounded by double-quotes, is how the image is labelled +in both the document proper and the List of Figures. Mom provides +an auto-labelling facility for images (see +<a href="#autolabel">AUTOLABEL</a>), +which, if enabled, overrides the <kbd>LABEL</kbd> argument. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">TARGET</h5> + +<p> +<kbd>TARGET</kbd> followed by a unique name surrounded by +double-quotes creates a PDF target for the image so that it may be +linked to from other places in the file (with PDF_LINK; see +<a href="version-2.html#mom-pdf">Producing PDFs with groff and mom</a>). +</p> + +<p> +<b><i>Please note:</i></b> The following functionality is available +only with groff 1.22.4 or later. +</p> + +<p> +When +<a href="#autolabel">autolabelling</a> +is enabled and the document is processed with +<a href="using.html#pdfmom" style="font-weight: bold">pdfmom</a>, +the target name can be used to generate the target’s label +number in running text if it is entered as a groff string, i.e. of the +form <kbd><span class="nobr">\*[name]</span></kbd>. For example, if you create +a target named “foo” for a pdf image whose autolabel +number would be 3, entering +<br/> +<span class="pre-in-pp"> + See + .PDF_LINK foo "Figure \*[foo]" +</span> +anywhere in running text would result in a pdf link that reads +“Figure 3”. If chapter numbers are being prefixed to +labels, the same string in, say, chapter 5 would produce the pdf +link “Figure 5.3”. +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="note">Note: Version 2.0-c change</span> +<br/> +Mom now treats all pdf images identically to +<a href="#floats-intro">floats</a>, +which is to say that if an image doesn’t fit on the output +page, she will defer it to the top of the next page while continuing +to process +<a href="definitions.html#running">running text</a>. +<kbd>ADJUST</kbd> is ignored whenever an image is the first to be +deferred, except when moving from column to column on the same page, +when the image may need to be optically adjusted. Subsequent images +that do not fit, if any, are output in order immediately after the +first. +</p> + +<p class="tip-bottom"> +Prior to 2.0-c, it was recommended that images be wrapped inside +<a href="#float">FLOAT</a>, +but this is now no longer required, and should, in fact, be avoided. +</p> +</div> + +<!-- -PDF_IMAGE_FRAME- --> + +<div class="macro-id-overline"> +<h3 id="pdf-image-frame" class= "macro-id">PDF_IMAGE_FRAME</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>PDF_IMAGE_FRAME</b> <kbd class="macro-args"><inset amount> <rule weight> <color></kbd> +</div> +<p class="requires"> +• <span style="font-style: normal"><kbd><inset amount></kbd></span> +requires a +<a href="definitions.html#unitofmeasure">unit of measure</a>; +conversely, +<span style="font-style: normal"><kbd><rule weight></kbd></span> +must not have a unit of measure appended +</p> + +<p> +PDF_IMAGE_FRAME establishes the parameters for subsequent invocations of +<a href="#pdf-image">PDF_IMAGE</a> +when the <kbd>FRAME</kbd> argument is given. Arguments must appear +in order, and any you wish left at the current value should be +entered as two adjacent double-quotes. So, for example, +<br/> +<span class="pre-in-pp"> + .PDF_IMAGE_FRAME "" "" blue +</span> +leaves the inset value and rule weight at their current value and +changes the frame colour to blue. +</p> + +<p> +Frames are drawn <span class="italic">outside</span> the image at +its requested dimensions inclusive of scaling. Colours must be +pre-initialized with +<a href="color.html#xcolor">XCOLOR</a> +or +<a href="color.html#newcolor">NEWCOLOR</a>. +</p> + +<p> +The default inset is 6 <a +href="definitions.html#picaspoints">points</a>, the default rule +weight is .5 (points), and the default colour is black. +</p> + +<!-- -PSPIC- --> + +<div class="macro-id-overline"> +<h3 id="pspic" class= "macro-id">PSPIC</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>PSPIC</b> <kbd class="macro-args">[ -L | -R | -I <n> ] <file> [ width [ height ] ]</kbd> +</div> + +<p> +PSPIC is not actually part of mom, but rather a macro included with +every groff installation. <kbd>man groff_tmac</kbd> contains the +documentation for PSPIC, but I’ll repeat it here with a few +modifications for clarity. +</p> + +<div class="examples-container"> +<h3 id="groff-tmac" class="docs" style="margin-top: .5em;">From <span style="text-transform: none">groff_tmac</span></h3> +<p style="margin-top: .5em; margin-bottom: .5em;"> +<kbd><file></kbd> is the name of the file containing the +image; <kbd>width</kbd> and <kbd>height</kbd> give the desired +width and height of the image as you wish it to appear within the +document. The width and height arguments may have +<a href="definitions.html#unitofmeasure">units of measure</a> +attached; the default unit of measure is <kbd>i</kbd>. PSPIC will +scale the graphic uniformly in the x and y directions so that +it is no more than <kbd>width</kbd> wide and <kbd>height</kbd> +high. By default, the graphic will be horizontally centred. The +<kbd>-L</kbd> and <kbd>-R</kbd> options cause the graphic to be +left-aligned and right-aligned, respectively. The <kbd>-I</kbd> +option causes the graphic to be indented by <kbd><n></kbd>; +the default unit of measure is <kbd>m</kbd> +(<a href="definitions.html#em">ems</a>). +</p> +</div> + +<p> +It is not necessary to pass PSPIC the <kbd><width></kbd> +and <kbd><height></kbd> arguments unless you are scaling +the image, in which case you will most likely need the original +dimensions of the EPS image’s bounding box. These can be +found with +<br/> +<span class="pre-in-pp"> + gs -q -dBATCH -dNOPAUSE -sDEVICE=bbox <image file>.pdf 2>&1 \ + | grep "%%BoundingBox" | cut -d " " -f4,5 +</span> +The two digits returned are in +<a href="definitions.html#picaspoints">points</a>, +therefore the +<a href="definitions.html#unitofmeasure">unit of measure</a> +<kbd>p</kbd> must be appended to them. +</p> + +<p> +Because PSPIC lacks the <kbd>ADJUST</kbd> option offered by +<a href="#pdf-image">PDF_IMAGE</a> +a certain amount of manual tweaking of the vertical placement of the +image will probably be required, typically by using the +<a href="typesetting.html#ald">ALD</a> +and +<a href="typesetting.html#rld">RLD</a> +macros. Wrapping the image in a +<a href="#float">float</a> +and using FLOAT’s <kbd>ADJUST</kbd> option can also be used to +correct optical centering. +</p> + +<p> +Additionally, non-floated EPS images +will almost certainly disrupt the baseline placement of +<a href="definitions.html#running">running text</a>. +In order to get mom back on track after inserting a non-floated +<kbd>.PSPIC</kbd> image, insert the +<a href="docprocessing.html#shim">SHIM</a> +or +<a href="docprocessing.html#flex">FLEX</a> +macro afterwards, depending on the +<a href="docprocessing.html#vertical-whitespace-management">vertical whitespace management</a> +strategy in effect, so that the bottom margin of running text falls +where it should. +</p> + +<p> +Remember that mom files with embedded EPS images must be processed +with +<br/> +<span class="pre-in-pp"> + pdfmom -Tps doc.mom > doc.pdf +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Please note:</span> +<kbd>PSPIC</kbd> does not support +<a href="autolabel">autolabelling</a>, +labels, captions, or inclusion in the List of Figures. If you wish +this functionality, +<a href="#converting">convert your images to pdf</a> +and use +<a href="#pdf-image">PDF_IMAGE</a> +instead, then process the file with +<a href="using.html#pdfmom" style="font-weight: bold">pdfmom</a> +(without the <kbd>-Tps</kbd> option). +</p> +</div> +<div class="rule-medium"><hr/></div> + +<h2 id="floats-intro" class="docs">Introduction to floats</h2> + +<p> +Non-textual insertions in a document (tables, for example) sometimes +do not fit on the output page of a PDF or PostScript document at +the place they’re inserted in the input file. It’s +necessary, therefore, to defer them to the next page while carrying +on with +<a href="definitions.html#running">running text</a>. +</p> + +<p> +Whenever you need this functionality, mom provides the FLOAT macro. +</p> + +<p> +Floats are usually used for images and graphics, but can contain +anything you like, including text. Whatever’s in the +float will be kept together as a block, output immediately if +there’s room, or deferred to the top of the next output page +when there isn’t; running text continues to the bottom of the +previous page without interruption. +</p> + +<p> +In the case of a float that doesn’t fit being followed by +one that does, both are deferred and output one after the other. +Note that this represents a change from versions 2.1-b_1 and earlier +where the second float was output in position and the first was +deferred. +</p> + +<p> +A key distinction between a float and a +<a href="docelement.html#quote">QUOTE</a> +or +<a href="docelement.html#blockquote">BLOCKQUOTE</a> +is that while a float keeps everything together and defers output if +necessary, quotes and blockquotes are output immediately, and may +start on one page and finish on the next. +</p> + +<p> +Floats always begin in +<a href="definitions.html#filled">no-fill mode</a>. +Text entered immediately after FLOAT will be set line-for-line +unless a +<a href="typesetting.html#justify">JUSTIFY</a> +or +<a href="typesetting.html#quad">QUAD L|R|C</a> +precedes it. Alternatively, any macro that sets a quad direction +may be used, e.g. +<a href="docelement.html#pp">PP</a>. +</p> + +<p> +Floats always deposit a break before they begin, which means the +line beforehand will not be +<a href="definitions.html#filled">filled</a>. +Floats, therefore, cannot be inserted in the middle of a paragraph +without studying the output file and determining where to break or +<a href="typesetting.html#spread">spread</a> +the line before the float. Furthermore, if you want a float between +paragraphs, the float should come before <kbd>.PP</kbd>, like this: +<br/> +<span class="pre-in-pp"> + .FLOAT + ... + .FLOAT OFF + .PP +</span> +not +<br/> +<span class="pre-in-pp"> + .PP + .FLOAT + ... + .FLOAT OFF +</span> +</p> + +<p id="float-spacing"> +Floats begin on the baseline immediately below the running text +preceding them. No additional whitespace surrounds them, above or +below. Running text below a float is, however, +<a href="docprocessing.html#shim">shimmed</a> +or +<a href="docprocessing.html#flex">flex-spaced</a>, +depending on the +<a href="docprocessing.html#vertical-whitespace-management">vertical whitespace management</a> +strategy in effect. This behaviour can be disabled for individual +floats with <kbd>NO_SHIM</kbd> or <kbd>NO_FLEX</kbd>. +</p> + +<p> +If you’d like more space around a float, you must add it +manually, for example with +<a href="typesetting.html#ald">ALD</a> +or +<a href="typesetting.html#space">SPACE</a>. +</p> + +<!-- -FLOAT- --> + +<div class="macro-id-overline"> +<h3 id="float" class= "macro-id">FLOAT</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>FLOAT</b> <kbd class="macro-args"><arguments> | <anything> +<br/> +Arguments: +<br/> +[ ADJUST +|-<amount> ] \ +<br/> +[ FORCE ] \ +<br/> +[ SPAN ] \ +<br/> +[ INDENT <value> ] \ +<br/> +[ CENTER ] \ +<br/> +[ RIGHT ] \ +<br/> +[ NO_SHIM] \ +<br/> +[ NO_FLEX ] \ +<br/> +[ TARGET "<name>" ]</kbd> +<br/> +</div> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +FLOAT is intended for use with the document processing macros only. +</p> +</div> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +As a general rule, avoid consecutive floats that have no intervening +<a href="definitions.html#running">running text</a>. +Rather, wrap all the material into a single float. +</p> +</div> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Deferred floats are output with the left indent that was in effect +when they were input. If you do not want this behaviour, disable +the indent prior to inputting the float and re-enable it afterward. +</p> +</div> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Mom treats <b>pic</b> pre-processor directives and pdf images as +floats so it is not necessary to wrap them inside FLOAT unless +additional material is included in what is floated. +</p> +</div> + +<p style="margin-top: -.5em"> +To begin a float, simply invoke <kbd>.FLOAT</kbd> and follow it with +whatever you want the float to contain. When you’re done, +invoke <kbd>.FLOAT OFF</kbd> (or <kbd>OFF</kbd>, +<kbd>QUIT</kbd>, <kbd>END</kbd>, <kbd>X</kbd>, etc). +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">ADJUST</h5> + +<p> +The optional <kbd>ADJUST</kbd> argument tells mom to raise +(<kbd>+</kbd>) or lower (<kbd>-</kbd>) the float <i>within +the space allotted to it</i> by the specified amount. +<kbd><amount></kbd> must have a +<a href="definitions.html#unitofmeasure">unit of measure</a> +appended. <kbd>ADJUST</kbd> gives you precise control over +the vertical centering of floats, allowing you to compensate for +unequal spacing that may result from the automatic +<a href="docprocessing.html#shim">shimming</a> +or +<a href="docprocessing.html#flex">flex-spacing</a> +floats. +</p> + +<p> +<kbd>ADJUST</kbd> is ignored for the first float deferred to +a following page but respected for subsequent deferred floats +output immediately afterwards. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">FORCE</h5> + +<p> +The <kbd>FORCE</kbd> argument instructs mom to output the float +exactly where it occurs in the input file. With <kbd>FORCE</kbd>, +mom immediately breaks to a new page to output the float if it does +not fit on the current page. While this is somewhat contrary to the +notion of floats (i.e. that running text should continue to fill the +page), there are circumstances where it may be desirable. +</p> + +<p> +If you need to force a page break after completion of a float that +has been deferred to a subsequent page, insert <kbd>\!.bp</kbd> +immediately before terminating the float. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">SPAN</h5> + +<p> +The <kbd>SPAN</kbd> argument tells mom that a float, if deferred, +may carry onto multiple pages. Please note that <kbd>SPAN</kbd> may +not be used for floats containing a boxed table; mom will abort with +a warning should this occur. Unboxed tables, on the other hand, are +acceptable within floats that are given the <kbd>SPAN</kbd> argument. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">INDENT</h5> + +<p> +<kbd>INDENT</kbd> allows you to indent a float from the left margin +by a specified value. The value must have a +(<a href="definitions.html#unitofmeasure">unit of measure</a> +appended to it. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">CENTER</h5> + +<p> +<kbd>CENTER</kbd> instructs mom to center a float if it is not +already centered by default. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">RIGHT</h5> + +<p> +<kbd>RIGHT</kbd> instructs mom to place a float at the right of the +page; the longest line in the float will be flush with the +page’s right margin. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">NO_SHIM</h5> + +<p> +<kbd>NO_SHIM</kbd> instructs mom not to apply +<a href="docprocessing.html#shim-vs-flex">shimming</a> +after a float, which she will do automatically when shimming is +enabled, which it is by default. Shimming ensures that running text +after the float falls properly on the page’s +<a href="definitions.html#baseline-grid">baseline grid</a>, +but can result in slightly unequal spacing above and below +(correctable with the <kbd>ADJUST</kbd> argument). +<kbd>NO_SHIM</kbd> is useful when you have several floats on the +page and there are visible differences in the spacing beneath them +as a result of shimming. To ensure a flush bottom margin, the last +float on the page should be shimmed, i.e. should not be given the +<kbd>NO_SHIM</kbd> argument. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">NO_FLEX</h5> + +<p> +<kbd>NO_FLEX</kbd> instructs mom not to apply +<a href="docprocessing.html#shim-vs-flex">flex-spacing</a> +after a float, which she will do automatically when flex-spacing is +enabled. <kbd>NO_FLEX</kbd> is useful when you have several floats +on the page and you want to distribute excess vertical +whitespace on the page amongst other flex-spacing points on the +page. If there are no others, the final float should be +flex-spaced, i.e. not given the <kbd>NO_FLEX</kbd> argument. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">TARGET</h5> + +<p> +<kbd>TARGET</kbd> followed by a unique name surrounded by +double-quotes creates a PDF target for the float so that it may be +linked to from other places in the file (with PDF_LINK; see +<a href="version-2.html#mom-pdf">Producing PDFs with groff and mom</a>). +</p> + +<p> +Floats cannot be autolabelled, so unlike pdf images and +pre-processor material, the target name cannot be used as a string +to generate the target’s label number in running text. Label +numbers for floats must be entered explicitly running text, however +they may be entered symbolically in the argument to +<a href="#label">LABEL</a>. +See +<a href="#reserved-label-strings">Reserved variables for +labels</a>. +</p> + + +<div class="box-tip"> +<p class="tip-top"> +<span class="note">Note:</span> +Floats use +<a href="definitions.html#filled">no-fill mode</a>, +with each input line beginning at the left margin. If this is not +what you want, you must specify the preferred horizontal alignment +<i>within the float</i> (e.g. +<a href="typesetting.html#lrc">CENTER</a> +or +<a href="typesetting.html#lrc">RIGHT</a>). +</p> + +<p class="tip-bottom"> +Furthermore, if you want text +<a href="definitions.html#filled">filled</a>, +you must specify +<a href="typesetting.html#quad"><kbd>.QUAD L|R|C</kbd></a> +or +<a href="typesetting.html#justify"><kbd>.JUSTIFY</kbd></a>—again, +within the float. +</p> +</div> + +<h2 id="float-label-caption" class="docs">Labelling and captioning floats</h2> + +<p> +Labelling and captioning of tables (<b>tbl</b>), equations +(<b>eq</b>), diagrams (<b>pic</b>) and pdf images +(<a href="#pdf-image">PDF_IMAGE</a>) +are handled by the macros that initiate them, regardless of whether +they’re wrapped inside a float. However, since a float may +contain any valid input, it is sometimes necessary to add a label +and/or caption to the float itself. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="important">Important:</span> +Always use the native labelling/captioning facilities for +preprocessor output and pdf images rather than labelling the +containing float, if any. +</p> +</div> + +<p> +The macros to label and caption floats are +<a href="#label">LABEL</a> +and +<a href="#caption">CAPTION</a>. +If a label or caption is to appear above the float, the appropriate +macro is entered immediately after +<a href="#float">FLOAT</a>. +If a label or caption is to appear beneath the float, the appropriate +macro is entered immediately before ending the float with +<kbd>FLOAT OFF</kbd>. +</p> + +<p> +If a label and caption are to be joined, the <b>LABEL</b> macro is +used to enter both by passing the <kbd>CAPTION</kbd> argument to +<kbd>LABEL</kbd>. +</p> + +<p> +It is impossible for mom to know the contents of a float, so +floats cannot be autolabelled. Each label must be entered +explicitly. Mom does, however, provide a way to enter both +chapter numbers and incrementing label numbers +<a href="#reserved-label-strings">symbolically</a>, +easing the burden of keeping the numbering scheme intact as +labelled floats are added to or subtracted from a document. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Tip:</span> +<a href="docelement.html#blockquote">QUOTE</a> +and +<a href="docelement.html#blockquote">BLOCKQUOTE</a> +may also be labelled and captioned using <b>LABEL</b> and +<b>CAPTION</b>. +</p> +</div> + +<h4 class="docs">Spacing</h4> + +<p> +If a float has a caption at the top, the caption is whitespaced +1/4 linespace from running text and the float itself begins +an additional 1/4 linespace below the caption. If the float has +no corresponding label at the bottom, the float observes the +bottom-spacing rules for all floats, namely that no extra space is +added other than +<a href="docprocessing.html#shim">shimming</a> +or +<a href="docprocessing.html#shim-vs-flex">flex-spacing</a>, +depending on the +<a href="docprocessing.html#vertical-whitespace-management">vertical whitespace management</a> +in effect. +</p> + +<p> +If a float has a label at the bottom but no caption at the top, the +float begins exactly where started, i.e. with no extra whitespace +between running text and the float. The label (and attached +caption, if any) are whitespaced 1/4 linespace below the float, +with an additional 1/4 linespace underneath <i>plus</i> shimming or +flex-spacing. +</p> + +<p> +Labelled/captioned quotes and blockquotes inside floats treat the +labels/captions as part of the quote so the spacing above and +below the whole float block is what you’d expect from quotes +normally, while the spacing between the label/caption and the quote +is 1/4 linespace. +</p> + +<div class="macro-id-overline"> +<h3 id="label" class="macro-id">LABEL</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>LABEL</b> +<kbd class="macro-args">"<label>" [ CAPTION "<caption>" ] [ SHORT_CAPTION ] \ +<br/> +[ TO_LIST FIGURES | TABLES | EQUATIONS ]</kbd> +</div> + +<p> +The placement of a float’s label depends on where you put it +inside the float. +</p> + +<p> +If you want a label at the top, put <kbd>LABEL</kbd> immediately +underneath +<a href="#float">FLOAT</a> +and follow it with the text of the label surrounded by double-quotes: +<br/> +<span class="pre-in-pp"> + .FLOAT + .LABEL "Fig. 1" +</span> +If you want a label at the bottom, put <kbd>LABEL</kbd> immediately +before ending the float: +<br/> +<span class="pre-in-pp"> + .FLOAT + <contents of float> + .LABEL "Fig. 1" + .FLOAT OFF +</span> +</p> + +<h3 id="reserved-label-strings" class="docs" style="text-transform: none">Reserved variables for labels</h3> + +<p> +Mom reserves strings you may use when entering +label text after the <kbd>LABEL</kbd> argument. +<kbd><span class="nobr">\*[chapter]</span></kbd> holds the current chapter +or major section number. <kbd><span class="nobr">\*[fig-label]</span></kbd>, +<kbd><span class="nobr">\*[tbl-label]</span></kbd>, and +<kbd><span class="nobr">\*[eqn-label]</span></kbd> increment the label number of +the appropriate label type by one, and are initially set to zero +after each invocation of +<a href="docprocessing.html#start">START</a> +when the +<a href="docprocessing.html#doctype">DOCTYPE</a> +is <kbd>CHAPTER</kbd>. Thus, in every chapter requiring numbered +float labels, you can enter +<br/> +<span class="pre-in-pp"> + .LABEL "Fig. \*[chapter].\*[fig-label]. TO_LIST FIGURES +</span> +which, assuming the third autolabelled float of Chapter 2, will +produce <kbd>Fig. 2.3.</kbd> +</p> + +<p> +If your <b>DOCTYPE</b> is <kbd>DEFAULT</kbd> or <kbd>NAMED</kbd>, +you must reset <kbd><span class="nobr">\*[<type>-label]</span></kbd> after +each +<a href="docprocessing.html#collate">COLLATE</a> +by entering +<br/> +<span class="pre-in-pp"> + .AUTOLABEL_<list type> +</span> +before <kbd>.START</kbd>. +</p> + +<p> +If +<a href="#autolabel">autolabelling</a> +is enabled, e.g. <kbd>.AUTOLABEL_IMAGES</kbd> (List +of Figures) or <kbd>.AUTOLABEL_PIC</kbd> (also List of Figures), +the prefix is stripped from the label when it appears in +the List. Thus, if you have invoked <kbd>.AUTOLABEL_PIC</kbd>, +<br/> +<span class="pre-in-pp"> + .LABEL "Fig. 1.1." + CAPTION "Caption for label \ + TO_LIST FIGURES +</span> +or +<br/> +<span class="pre-in-pp"> + .LABEL "Fig. \*[chapter].\*[label]." \ + CAPTION "Caption for label \ + TO_LIST FIGURES +</span> +will appear in the List of Figures as “1.1. Caption for +label”. +</p> + +<h3 class="docs">CAPTION</h3> + +<p> +If you’d like a caption attached to the label, pass +<kbd>LABEL</kbd> the optional argument <kbd>CAPTION</kbd> followed +by the text of the caption as a single string surrounded by +double-quotes: +<br/> +<span class="pre-in-pp"> + .FLOAT + <contents of float> + .LABEL "Fig. 1" CAPTION "Caption for Fig. 1" + .FLOAT OFF +</span> +Note that the +<a href="#caption">CAPTION</a> +macro by itself permits entering several strings, each output on +a line by itself, whereas the <kbd>CAPTION</kbd> argument to +<kbd>LABEL</kbd> accepts only a single string. +</p> + +<h3 class="docs">SHORT_CAPTION</h3> + +<p> +If your caption runs long and you’re including the +float in a “List of ...”, (see +<a href="#list-of">TO_LIST</a>, below) +<kbd>SHORT_CAPTION</kbd> tells +mom how you’d like the caption to appear in the List. +</p> + +<h3 class="docs">TO_LIST</h3> + +<p> +The optional argument <kbd>TO_LIST</kbd> tells mom to add the +float’s label and attached caption, if present, to the specified +<a href="#lists-of">list</a>, +which may be one of <kbd>FIGURES</kbd>, <kbd>TABLES</kbd>, or +<kbd>EQUATIONS</kbd>. +</p> + +<p> +If, for some reason, you want only the caption appended to the List, +give <kbd>\&</kbd> as the first argument to LABEL, followed by +<kbd>CAPTION “caption”</kbd>: +<br/> +<span class="pre-in-pp"> + .LABEL \& \ + CAPTION "caption" +</span> +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="note">Tip:</span> +<kbd>TO_LIST</kbd> can be used to handle situations where labelled +floats need to go to a uniquely named “List of ...”. +</p> + +<p class="tip-bottom"> +Suppose, for example, your document contains figures (e.g. +<b>pic</b> output or pdf-images) and tables, and you need a +“List of Examples” for floats labelled “Example +n.n”. By changing the default title string for +<a href="#lists-macros">LIST_OF_EQUATIONS</a> +to “List of Examples”, you may include the float in your +List of Examples with +<br/> +<span class="pre-in-pp"> + .TO_FIGURES EQUATIONS +</span> +</p> +</div> + +<div class="macro-id-overline"> +<h3 id="caption" class="macro-id">CAPTION</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>CAPTION</b> +<kbd class="macro-args">"<caption>" \ +<br/> +[ "<additional line>" [ "<additional line>"... ] ] \ +<br/> +[ TO_LIST FIGURES | TABLES | EQUATIONS ]</kbd> +</div> + +<p> +The placement of a float’s caption depends on where you put it +inside the float. +</p> + +<p> +If you want a caption at the top, put <kbd>CAPTION</kbd> immediately +underneath +<a href="#float">FLOAT</a> +and follow it with the text of the caption surrounded by double-quotes: +<br/> +<span class="pre-in-pp"> + .FLOAT + .CAPTION "Caption at top of float" +</span> +<b>CAPTION</b> can take multiple string arguments, allowing for +captions that run to several lines. There is a caveat: the strings +are not automatically broken into individual lines. You must +provide strings that include literal breaks or spaces: +<br/> +<span class="pre-in-pp"> + .FLOAT + .CAPTION "Caption" ".BR" "at top" ".BR" "of float" +</span> +or, easier to read: +<br/> +<span class="pre-in-pp"> + .FLOAT + .CAPTION "Caption" \ + ".BR" \ + "at top" \ + ".BR" \ + "of float" +</span> +If you want a caption at the bottom, put <kbd>CAPTION</kbd> immediately +before ending the float: +<br/> +<span class="pre-in-pp"> + .FLOAT + <contents of float> + .CAPTION "Caption at bottom of float" + .FLOAT OFF +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If you want a caption attached to a label, do not use +<b>CAPTION</b> by itself. Rather, invoke +<a href="#label"><kbd>.LABEL</kbd></a> +with the <kbd>CAPTION</kbd> argument. +</p> +</div> + +<div class="rule-medium"><hr/></div> + +<h2 id="preprocessor-support" class="docs">Preprocessor support</h2> + +<p> +Mom offers full support for the <b>eqn</b> (equations), <b>pic</b> +(diagrams), <b>grap</b> (graphs), <b>tbl</b> (tables) and +<b>refer</b> (bibliographies/citations) preprocessors, including +captions, labelling, autolabelling, and inclusion in the Lists of +Equations, Figures, and Tables. +</p> + +<p> +Other than <b>refer</b>, which is discussed at length in the <a +href="refer.html">Bibliographies and references</a> section, it is +beyond the scope of this documentation to cover full preprocessor +usage. Consult the manpages <b>eqn(1)</b>, <b>pic(1)</b>, +<b>grap(1)</b> and <b>tbl(1)</b> for instructions. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Version 2.0-c changes</span> +<br/> +Preprocessor support has been revised and expanded as of version 2.0-c. +Please read the following sections thoroughly and update any +documents created with versions prior to 2.0-c as necessary. +</p> +</div> + +<h3 id="tbl" class="docs">tbl support</h3> + +<p> +Mom documents can include tables generated with the groff +preprocessor <b>tbl</b>. If you are unfamiliar with <b>tbl</b>, I +recommend downloading a copy of +<a href="http://plan9.bell-labs.com/10thEdMan/tbl.pdf">Tbl - A Program to Format Tables</a>, +which, in addition to providing a thorough introduction, contains +some fine examples. If you use <b>tbl</b>, you must pass groff or +pdfmom the <b>-t</b> flag when you process the file. +</p> + +<p> +Tables formatted with <kbd>tbl</kbd> begin with the macro +<kbd>.TS</kbd> (<b>T</b>able <b>S</b>tart) and end with +<kbd>.TE</kbd> (<b>T</b>able <b>E</b>nd). Depending on where you +want your tables output in a document, you may need to wrap +your <kbd>tbl</kbd> code inside a +<a href="#floats-intro">float</a>, +or pass the <kbd>H</kbd> argument to <kbd>.TS</kbd>. +</p> + +<p> +If you put <kbd>tbl</kbd> code inside a float, the table will be +output immediately if it fits on the page, or deferred to the top +of the next page if it doesn’t. If you prefer a table to +begin where you say and span over to the next page, or if you know +for certain a boxed table will run to multiple pages, simply pass the +<kbd>H</kbd> argument to <kbd>.TS</kbd>, along with a corresponding +<a href="#th"><kbd>TH</kbd></a> +and do not wrap the table inside a float. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If you create a boxed table that will span several pages, do not +wrap the table inside a float. Boxed, multipage tables and FLOAT +should be considered mutually exclusive. This restriction is +imposed by the <kbd>tbl</kbd> preprocessor itself, not groff or +mom. Unboxed tables that span several pages, however, are +acceptable within FLOAT. +</p> +</div> + +<h4 id="tbl-placement" class="docs">tbl placement in mom docs</h4> + +<p> +If you use <kbd>.TS</kbd> without the <kbd>H</kbd> argument (and +therefore no <kbd>.TH</kbd>), tables that fit on the page are output +in position. If there is not enough room to output the table, +<kbd>tbl</kbd> will abort with message instructing you to use +<kbd>.TS H/.TH</kbd>. Given that <kbd>.TS</kbd> without <kbd>H</kbd> +may sometimes fail, it is advisable to begin all <b>tbl</b> blocks +with <kbd>.TS H</kbd>. +</p> + +<p> +If you give <kbd>.TS</kbd> the <kbd>H</kbd> argument (with a +corresponding <kbd>.TH</kbd>), tables will be output in position and +span as many pages as necessary to complete output. A table header +will be printed at the top of each page’s table output. In the +event that there is not enough room to print the table header and +at least one row of table data near the bottom of a page, mom will +break to a new page before beginning table output, leaving a gap +in +<a href="definitions.html#running">running text</a>. +</p> + +<p> +Boxed tables inside +<a href="#floats-intro">floats</a> +are output in position if they fit on the page. If not, they are +deferred to the top of the next page without a break in running +text. Boxed tables within floats may not, however, span multiple +pages; mom will abort with a message should a boxed table in a float +run longer than the page. +</p> + +<p> +Unboxed tables inside floats may span multiple pages provided the +<kbd>SPAN</kbd> argument has been given to +<a href="#float">FLOAT</a>. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +The vertical spacing around unfloated tables may appear slightly +unequal, especially if there are several tables on the page. This +is a result of the +<a href="docprocessing.html#shim">shimming</a> +or +<a href="docprocessing.html#flex">flex-spacing</a> +that mom applies automatically after each table, depending on which +<a href="docprocessing.html#vertical-whitespace-management">vertical whitespace management</a> +is in effect. You may +disable shimming or flex-spacing with +<a href="docprocessing.html#no-shim">NO_SHIM</a> +or +<a href="docprocessing.html#no-flex">NO_FLEX</a>, +or by passing the <kbd>NO_SHIM</kbd> or <kbd>NO_FLEX</kbd> argument +to <kbd>.TS</kbd>. In either case, you will still likely want to +adjust the spacing around with table with the <kbd>ADJUST</kbd> +argument to <kbd>.TS</kbd>. Tables inside floats should be adjusted +with the <kbd>ADJUST</kbd> argument to +<a href="#float">FLOAT</a>, +not the <kbd>ADJUST</kbd> argument to <kbd>.TS</kbd>. +</p> +</div> + +<div class="macro-id-overline"> +<h3 id="ts-te" class= "macro-id">.TS / .TH / .TE</h3> +</div> + +<div class="box-macro-args"> +Macro: <a href="#ts"><b>TS</b></a> +<kbd class="macro-args"><br/> +Arguments: +<br/> + [ H ] +<br/> + [ BOXED ] +<br/> + [ CENTER ] +<br/> + [ NEEDS ] +<br/> + [ ADJUST +|-<vertical adjustment>]</kbd> +<span style="font-size: 95%"> +(<a href="definitions.html#unitofmeasure">unit of measure</a> +required) +</span> +<kbd class="macro-args"><br/> + [ NO_SHIM ] +<br/> + [ NO_FLEX ] +<br/> + [ CAPTION "<caption>" ] +<br/> + [ SHORT_CAPTION "<short caption>" ] +<br/> + [ LABEL "<label>" ] +<br/> + [ TARGET "<name>" ] +</kbd> +<br/> +Macro: <a href="#th"><b>TH</b></a> <kbd class="macro-args">(optional, only if .TS H)</kbd> +<br/> +Macro: <a href="#te"><b>TE</b></a> <kbd class="macro-args">[ SOURCE "<text of table source>" ]</kbd> +</div> + +<p> +Tables to be formatted with <kbd>tbl</kbd> begin with the macro +<kbd>.TS</kbd> and end with <kbd>.TE</kbd>. Global <kbd>tbl</kbd> +options (“flags”), formatting, and data (per +<kbd>tbl(1)</kbd>) come between the two macros. +<br/> +<span class="pre-in-pp"> + .TS + <tbl options, formatting, and data> + .TE +</span> +Tables may be wrapped inside a +<a href="#float-intro">float</a>, +in which case, the entire table will be output on the current page +if it fits, or deferred to the next page if it doesn’t. +<br/> +<span class="pre-in-pp"> + .FLOAT + .TS + <tbl options, formatting, and data> + .TE + .FLOAT OFF +</span> +</p> + +<div class="macro-id-overline"> +<h4 id="ts" class="docs" style="font-size: 100%; margin-top: .5em">The .TS macro</h4> +</div> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note: Version 2.0-c change</span> +<br/> +2.0-c introduces revisions to the handling of labels and/or +captions, which, along with <kbd>NO_SHIM</kbd>, must now be given +as arguments to <kbd>.TS</kbd> rather than <kbd>.TE</kbd>, as was +the case formerly. Please read this section carefully if you have +documents containing tables as they may need to be updated. +</p> +</div> + +<div class="box-important" style="margin-top: 1em"> +<p class="tip"> +<span class="important">IMPORTANT:</span> +All arguments to <b>TS</b> must appear on the same line as +<kbd>.TS</kbd>. Do not attempt to break them up with the +“line-continued” backslash. You may want to set your +text editor to “wrap” mode in order to see all your +arguments. This annoyance stems from the preprocessor mechanism +itself, not groff or mom. +</p> +</div> + +<p> +The <b>TS</b> macro must be invoked before entering a <kbd>tbl</kbd> +block. You may give as many or as few of its arguments as required, +in any order, although it is advisable to put <kbd>CAPTION</kbd>, +<kbd>SHORT_CAPTION</kbd>, and/or <kbd>LABEL</kbd> last. +</p> + +<h5 id="h" class="docs" style="margin-top: 1em; text-transform: none">H</h5> + +<p> +With the <b>H</b> argument, a table will span as many pages as +necessary, with or without a running header. The placement of the +corresponding +<a href="#th"><kbd>.TH</kbd></a>, +which is required whenever the <b>H</b> argument is given, +determines what, if anything, goes in the header. Compare the +following: +<span class="pre-in-pp"> + .TS H .TS H + c s s c s s + c s s c s s + c c c c c c + n n n. n n n. + Percent Increase .TH + 2002-2012 Percent Increase + .TH 2002-2012 + <tbl data> <tbl data> + .TE .TE +</span> +The first example will create a table that spans multiple +pages if necessary, with a running header (“Percent +Increase / 2002-2012”) for that table appearing at +the top of each page until the table ends. The second example, +equally, may run to several pages, but without the running header. +See +<a href="#th"><b>TH</b></a> +for an explanation of <kbd>.TH</kbd> placement. +</p> + +<div id="h-tip" class="box-tip"> +<p class="tip"> +<span class="note">Tip:</span> +Generally speaking, it’s a good idea to get into the habit +of using <kbd>.TS H</kbd> all the time, since there are no +circumstances under which it fails, whereas <kbd>.TS</kbd> without +<kbd>H</kbd> will fail on tables that exceed the page length. +</p> +</div> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">BOXED</h5> + +<p> +If a table is to be boxed (i.e., <kbd>tbl</kbd> is given the flags +<kbd>'box'</kbd> or <kbd>'allbox'</kbd>) you must pass the argument +<kbd>BOXED</kbd> to <kbd>.TS</kbd>, as in this example: +<br/> +<span class="pre-in-pp"> + .TS BOXED + allbox; + c s s + c c c + n n n. + <tbl data> + .TE +</span> +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">CENTER</h5> + +<p> +If a table is to be centered on the page, (i.e., <kbd>tbl</kbd> is +given the <kbd>'center'</kbd> flag), you must pass the argument +<kbd>CENTER</kbd> to <kbd>.TS</kbd>, as in this example, which +creates a (possibly) multipage boxed table, centered on the page, +with a running header. +<span class="pre-in-pp"> + .TS H BOXED CENTER + allbox center; + c s s + c s s + c c c + n n n. + Percent Increase + 2002-2012 + .TH + <tbl data> + .TE +</span> +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">NEEDS</h5> + +<p> +If a table is not inside a float and you pass <kbd>.TS </kbd> the +<kbd>H</kbd> argument (which you should; see the tip +<a href="#h-tip">here</a>), +mom begins output immediately where the table occurs in the +input file <i>if there is enough room on the output page for the +table header plus at least one row of table data</i>. If there +isn’t enough room, mom breaks to a new page before beginning +the table, leaving a gap in +<a href="definitions.html#running">running text</a> +at the bottom of the previous page. If, for aesthetic reasons, +you would prefer that mom require more than one row of table data +beneath the header near the bottom of a page, you may increase the +number with the <kbd>NEEDS</kbd> argument, followed by the desired +number of rows. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">ADJUST</h5> + +<p> +<kbd>ADJUST</kbd> lets you raise (<kbd>-</kbd>) or lower +(<kbd>+</kbd>) the table +<span style="font-style: italic">within the space allotted for it</span> +by the amount you specify. This is useful for achieving good +optical centering between surrounding blocks of type. A unit of +measure is required. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">NO_SHIM</h5> + +<p> +<kbd>NO_SHIM</kbd> instructs mom not to apply +<a href="docprocessing.html#shim-vs-flex">shimming</a> +after a table, which she will do automatically when shimming is +enabled, which it is by default. Shimming ensures that running text +after the table falls properly on the page’s +<a href="definitions.html#baseline-grid">baseline grid</a>, +but can result in slightly unequal spacing above and below +(correctable with the <kbd>ADJUST</kbd> argument). +<kbd>NO_SHIM</kbd> is useful when you have several tables on the +page and there are visible differences in the spacing beneath them +as a result of shimming. To ensure a flush bottom margin, the last +table on the page should be shimmed, i.e. should not be given the +<kbd>NO_SHIM</kbd> argument. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">NO_FLEX</h5> + +<p> +<kbd>NO_FLEX</kbd> instructs mom not to apply +<a href="docprocessing.html#shim-vs-flex">flex-spacing</a> +after a table, which she will do automatically when flex-spacing is +enabled. <kbd>NO_FLEX</kbd> is useful when you have several tables +on the page and you want to distribute excess vertical +whitespace on the page amongst other flex-spacing points on the +page. If there are no others, the final table should be +flex-spaced, i.e. not given the <kbd>NO_FLEX</kbd> argument. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">CAPTION</h5> + +<p> +<kbd>CAPTION</kbd> allows you to give the table a caption. By +default, the caption appears above the table, but may be attached to +the label that appears beneath the table. See +<a href="#caption-after-label">CAPTION_AFTER_LABEL</a> +in +<a href="#captions-and-labels">Captions and labels</a>. +The text of the caption must be surrounded by double-quotes. +</p> + +<p> +Please note that if your table has a caption, you must invoke +<kbd>TS</kbd> with the <kbd>H</kbd> flag, which also entails the use +of +<a href="#th">TH</a>. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">SHORT_CAPTION</h5> + +<p> +<kbd>SHORT_CAPTION</kbd> allows you to trim long captions for +inclusion in the List of Tables. The text you supply, surrounded +by double-quotes, is what will appear in the List. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">LABEL</h5> + +<p> +<kbd>LABEL</kbd>, if given, appears beneath the table. The text you +supply, surrounded by double-quotes, is how the table is labelled +in both the document proper and the List of Tables. Mom provides +an auto-labelling facility for tables (see +<a href="#autolabel">AUTOLABEL</a>), +which, if enabled, overrides the <kbd>LABEL</kbd> argument. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">TARGET</h5> + +<p> +<kbd>TARGET</kbd> followed by a unique name surrounded by +double-quotes creates a PDF target for the table so that it may be +linked to from other places in the file (with PDF_LINK; see +<a href="version-2.html#mom-pdf">Producing PDFs with groff and mom</a>). +</p> + +<p> +<b><i>Please note:</i></b> The following functionality is available +only with groff 1.22.4 or later. +</p> + +<p> +When +<a href="#autolabel">autolabelling</a> +is enabled and the document is processed with +<a href="using.html#pdfmom" style="font-weight: bold">pdfmom</a>, +the target name can be used to generate the target’s label +number in running text if it is entered as a groff string, i.e. of +the form <kbd><span class="nobr">\*[name]</span></kbd>. For example, if you +create a target called “foo” for a table whose autolabel +number would be 3, entering +<br/> +<span class="pre-in-pp"> + See + .PDF_LINK foo "Table \*[foo]" +</span> +anywhere in running text would result in a pdf link that reads +“Table 3”. If chapter numbers are being prefixed to +labels, the same string in, say, chapter 5 would produce the pdf +link “Table 5.3”. +</p> + +<div class="macro-id-overline"> +<h4 id="th" class="docs" style="font-size: 100%; margin-top: .5em">The .TH macro</h4> +</div> + +<p> +The <b>TH</b> macro (<b>T</b>able <b>H</b>eader), which is required +when you begin a table with <kbd>.TS H</kbd>, allows you to +determine what goes in a table’s running header if it spans +multiple pages. Placing <kbd>.TH</kbd> under the first row of +<kbd>tbl</kbd> data makes the first row the header. If placed under +the second row, the first and second rows form the header, and so +on. +</p> + +<p> +As there are sometimes reasons to run <kbd>.TS H</kbd> when +you don’t, in fact, want a running header (e.g. when +your table has a caption), you can suppress it by placing +<kbd>.TH</kbd> immediately underneath your <kbd>tbl</kbd> formatting +specifications, the last line of which always ends with a period +(see <kbd>tbl(1)</kbd>). +</p> + +<p> +See the +<kbd><a href="#h">H</a></kbd> +argument to <kbd>.TS</kbd> for examples demonstrating <kbd>.TH</kbd> +placement. +</p> + +<div class="macro-id-overline"> +<h4 id="te" class="docs" style="font-size: 100%; margin-top: .5em">The .TE macro</h4> +</div> + +<p> +<kbd>tbl</kbd> blocks must be terminated with <kbd>.TE</kbd>, +which, as of version 2.0-c, takes a single, optional argument, +<kbd>SOURCE</kbd>. (Formerly, <kbd>TE</kbd> took a label/caption +argument along with arguments controlling placement.) The argument +is followed by the text of the table’s source, surrounded by +double-quotes. The SOURCE argument may only be used if +<a href="#mla">MLA</a> +(Modern Language Association) style is enabled. +</p> + +<div class="rule-medium"><hr/></div> + +<h3 id="pic" class="docs">pic support</h3> + +<p> +Mom documents can include diagrams generated with the groff +preprocessor <b>pic</b>. If you are unfamiliar with <b>pic</b>, I +recommend downloading a copy of +<a href="http://www.kohala.com/start/troff/gpic.raymond.ps">Making Pictures with GNU PIC</a> +which provides a thorough introduction and contains many examples. +If you use <b>pic</b>, you must pass groff or pdfmom the <b>-p</b> +flag when you process the file. + +</p> + +<p> +Diagrams created with <kbd>pic</kbd> begin with the macro +<kbd>.PS</kbd> (<b>P</b>ic <b>S</b>tart) and end with +<kbd>.PE</kbd> (<b>P</b>ic <b>E</b>nd). Everything between them is +interpreted by the preprocessor as pic instructions. Please note: +<i>Making Pictures with GNU PIC</i> says that <kbd>.PF</kbd> can +also be used to terminate a pic diagram, but this is not supported +by mom. +</p> + +<p> +Pic diagrams are always centered. Note that this represents a +change from version 2.0-b of mom, where centering diagrams required +passing <kbd>-mpic</kbd> to <b>groff</b> or +<a href="using.html#pdfmom" style="font-weight: bold">pdfmom</a> +on the command line. +</p> + +<p> +In addition, mom treats <b>pic</b> diagrams identically to +<a href="#floats-intro">floats</a>, +which is to say that if a diagram doesn’t fit on the output +page, she will defer it to the top of the next page while continuing +to process +<a href="definitions.html#running">running text</a>. +<kbd>ADJUST</kbd> is ignored whenever a diagram is deferred, except +when moving from column to column on the same page, when the diagram +may need to be optically adjusted. Subsequent diagrams that do not +fit, if any, are output in order immediately after the first. +</p> + +<p> +Lastly, if your diagrams contain text, you may set all the type +parameters for the text (family, font, size, leading) separately +from the <b>pic</b> block with the macro +<a href="#pic-text-style">PIC_TEXT_STYLE</a>. +If you need to change the type parameters within the block +on-the-fly, you must use <b>pic</b>’s native facilities for +doing so. +</p> + +<div class="macro-id-overline"> +<h3 id="ps-pe" class= "macro-id">.PS / .PE</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>PS</b> +<kbd class="macro-args"> +<br/> +Arguments: [ <width> <height> ] +<kbd class="macro-args"> +<br/> + [ LEFT ]</kbd> +<br/> + [ ADJUST +|-<vertical adjustment>]</kbd> +<span style="font-size: 95%"> +(<a href="definitions.html#unitofmeasure">unit of measure</a> +required) +</span> +<kbd class="macro-args"><br/> + [ NO_SHIM ] +<br/> + [ NO_FLEX ] +<br/> + [ CAPTION "<caption>" ] +<br/> + [ SHORT_CAPTION "<short caption>" ] +<br/> + [ LABEL "<label>" ] +<br/> + [ TARGET "<name>" ] +</kbd> +<br/> +Macro: <b>PE</b> <span style="font-size: 95%">(no arguments; ends +the <b>pic</b> block)</span> +</div> + +<div class="box-important" style="margin-top: 1.5em"> +<p class="tip"> +<span class="important">IMPORTANT:</span> +All arguments to <b>PS</b> must appear on the same line as +<kbd>.PS</kbd>. Do not attempt to break them up with the +“line-continued” backslash. You may want to set your +text editor to “wrap” mode in order to see all your +arguments. This annoyance stems from the preprocessor mechanism +itself, not groff or mom. +</p> +</div> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">'width' and 'height'</h5> + +<p> +The <kbd>width</kbd> and <kbd>height</kbd> arguments to +<kbd>.PS</kbd> are idiosyncratic owing to the preprocessor itself. +Both are optional and both expect a value in inches, so neither +argument should have a +(<a href="definitions.html#unitofmeasure">unit of measure</a> +appended. +</p> + +<p> +If the <kbd>width</kbd> argument is supplied, the diagram, but +not any text it contains, is scaled to the given width. If a +literal width argument of <kbd>0</kbd> (zero) is given and a +<kbd>height</kbd> argument is supplied, the diagram, but not any +text it contains, will be scaled to the requested height. In the +case of two non-zero arguments being given, only the height scaling +is applied. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">LEFT</h5> + +<p> +By default, pic diagrams are centred on the page. If you would +prefer them to be flush left, pass <kbd>PS</kbd> the <kbd>LEFT</kbd> +argument. +</p> +<h5 class="docs" style="margin-top: 1em; text-transform: none">ADJUST</h5> + +<p> +<kbd>ADJUST</kbd> lets you raise (<kbd>-</kbd>) or lower +(<kbd>+</kbd>) a diagram +<span style="font-style: italic">within the space allotted for it</span> +by the amount you specify. This is useful for achieving good +optical centering between surrounding blocks of type. A unit of +measure is required. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">NO_SHIM</h5> + +<p> +<kbd>NO_SHIM</kbd> instructs mom not to apply +<a href="docprocessing.html#shim-vs-flex">shimming</a> +after a <b>pic</b> diagram, which she will do automatically when +shimming is enabled, which it is by default. Shimming ensures that +running text after the diagram falls properly on the page’s +<a href="definitions.html#baseline-grid">baseline grid</a>, +but can result in slightly unequal spacing above and below +(correctable with the <kbd>ADJUST</kbd> argument). +<kbd>NO_SHIM</kbd> is useful when you have several diagrams on the +page and there are visible differences in the spacing beneath them +as a result of shimming. To ensure a flush bottom margin, the last +diagram on the page should be shimmed, i.e. should not be given the +<kbd>NO_SHIM</kbd> argument. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">NO_FLEX</h5> + +<p> +<kbd>NO_FLEX</kbd> instructs mom not to apply +<a href="docprocessing.html#shim-vs-flex">flex-spacing</a> +after a <b>pic</b> diagram, which she will do automatically when +flex-spacing is enabled. <kbd>NO_FLEX</kbd> is useful when you +have several diagrams on the page and you want to distribute excess +vertical whitespace on the page amongst other flex-spacing points +on the page. If there are no others, the final diagram should be +flex-spaced, i.e. not given the <kbd>NO_FLEX</kbd> argument. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">CAPTION</h5> + +<p> +<kbd>CAPTION</kbd> allows you to give the diagram a caption. By +default, the caption appears above the diagram, but may be attached to +the label that appears beneath it. See +<a href="#caption-after-label">CAPTION_AFTER_LABEL</a> +in +<a href="#captions-and-labels">Captions and labels</a>. +The text of the caption must be surrounded by double-quotes. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">SHORT_CAPTION</h5> + +<p> +<kbd>SHORT_CAPTION</kbd> allows you to trim long captions for +inclusion in the List of Figures. The text you supply, surrounded +by double-quotes, is what will appear in the List. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">LABEL</h5> + +<p> +<kbd>LABEL</kbd>, if given, appears beneath the diagram. The text you +supply, surrounded by double-quotes, is how the diagram is labelled +in both the document proper and the List of Figures. Mom provides +an auto-labelling facility for diagrams (see +<a href="#autolabel">AUTOLABEL</a>), +which, if enabled, overrides the <kbd>LABEL</kbd> argument. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">TARGET</h5> + +<p> +<kbd>TARGET</kbd> followed by a unique name surrounded by +double-quotes creates a PDF target for the diagram so that it may be +linked to from other places in the file (with PDF_LINK; see +<a href="version-2.html#mom-pdf">Producing PDFs with groff and mom</a>). +</p> + +<p> +<b><i>Please note:</i></b> The following functionality is available +only with groff 1.22.4 or later. +</p> + +<p> +When +<a href="#autolabel">autolabelling</a> +is enabled and the document is processed with +<a href="using.html#pdfmom" style="font-weight: bold">pdfmom</a>, +the target name can be used to generate the target’s label +number in running text if it is entered as a groff string, i.e. of +the form <kbd><span class="nobr">\*[name]</span></kbd>. For example, if you +create a target called “foo” for a diagram whose +autolabel number would be 3, entering +<br/> +<span class="pre-in-pp"> + See + .PDF_LINK foo "Figure \*[foo]" +</span> +anywhere in running text would result in a pdf link that reads +“Figure 3”. If chapter numbers are being prefixed to +labels, the same string in, say, chapter 5 would produce the pdf +link “Figure 5.3”. +</p> + +<!-- PIC_TEXT_STYLE --> + +<div class="macro-id-overline"> +<h3 id="pic-text-style" class= "macro-id">PIC_TEXT_STYLE</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>PIC_TEXT_STYLE</b> \ +<br/> +<kbd class="macro-args"> + [ FAMILY ] "<family>" \ +<br/> + [ FONT ] "<font>" \ +<br/> + [ SIZE ] "+|-<size>" \ +<br/> + [ AUTOLEAD ] "<value>" +</kbd> +</div> + +<p> +Diagrams drawn with <b>pic</b> may contain text, and groff +<a href="inlines.html#intro-inlines">inline escapes</a> +may be used to alter the text parameters. A problem that arises +from so doing is that, in many cases, it clutters up the <b>pic</b> +code unnecessarily. +</p> + +<p> +PIC_TEXT_STYLE lets you establish the type parameters for text +inside a <b>pic</b> block all at once in cases where so doing +improves the readability of your mom source files. +</p> + +<p> +The arguments to PIC_TEXT_STYLE behave identically to the arguments +to other control macros, explained +<a href="docelement.html#control-macro-args">here</a>. +They may be given in any order, and you may use as many or as few as +you like. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Text within <b>pic</b> diagrams does not scale when you provide a +scaling argument to <kbd>.PS</kbd>. This is a limitation of the +preprocessor itself, not groff or mom. +</p> +</div> + +<div class="rule-medium"><hr/></div> + +<h3 id="grap" class="docs">grap support</h3> + +<p> +Grap is a <b>pic</b> preprocessor for creating graphs. Grap +usage is covered in the <kbd>grap(1)</kbd> manpage. Its mom +implementation is the same as for <b>pic</b> except that instead of +enclosing directives between +<a href="#ps-pe">.PS / .PE</a>, +they are enclosed between <b>.G1/.G2</b>. If you use <b>grap</b>, +you must pass groff or pdfmom the <b>-G</b> flag when you process +the file. + +</p> + +<p> +<b>.G1</b> takes all the same arguments as +<a href="#ps-pe">PS</a> +with one exception: the argument <b>GRAP</b> must always be given to +<b>.G1</b>. So, for example, a skeleton grap block raised 2 points +and with a caption would be entered: +<br/> +<span class="pre-in-pp"> + .G1 GRAP ADJUST +2p CAPTION "Graph caption" + <grap directives> + .G2 +</span> + +</p> + +<div class="rule-medium"><hr/></div> + +<h3 id="eqn" class="docs">eqn support</h3> + +<p> +Support for <b>eqn</b> is provided via extensions to the standard +<kbd>.EQ/.EN</kbd> macros. <kbd>eqn</kbd> usage itself is beyond +the scope of this documentation, but is covered in the manpage +<kbd>eqn(1)</kbd>. You can also download a copy of Ted +Harding’s +<a href="http://lists.gnu.org/archive/html/groff/2013-10/pdfTyBN2VWR1c.pdf"> +A Guide to Typesetting Mathematics Using GNU eqn +</a>, +which contains useful examples. If you use <b>eqn</b>, you must give groff or +pdfmom the <b>-e</b> flag. + +</p> + +<div class="macro-id-overline"> +<h3 id="eq-en" class= "macro-id">.EQ / .EN</h3> +</div> + +<div class="box-macro-args"> +Macro: <a href="#eq"><b>EQ</b></a> +<br/> +<kbd class="macro-args">Arguments: +<br/> + [ -L | -C | -I <indent> ]</kbd> +<span style="font-size: 95%"> +(<a href="definitions.html#unitofmeasure">unit of measure</a> +required) +</span> +<kbd class="macro-args"><br/> + [ ADJUST +|-<vertical adjustment>]</kbd> +<span style="font-size: 95%"> +(<a href="definitions.html#unitofmeasure">unit of measure</a> +required) +</span> +<kbd class="macro-args"><br/> + [ NO_SHIM ] +<br/> + [ NO_FLEX ] +<br/> + [ CAPTION "<caption>" ] +<br/> + [ LABEL "<label>" ] +<br/> + [ SHIFT_LABEL +|-<vertical adjustment> ] +<br/> + [ SHORT_CAPTION "<short caption>" ] +<br/> + [ TARGET "<name>" ] +<br/> + [ CONTINUED | CONT | ... ]</kbd> +</div> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note: Version 2.0-c change</span> +<br/> +2.0-c introduces revisions to <b>EQ</b>, including the addition +of a dash (<kbd>-</kbd>) to the positioning arguments +(<kbd>-L</kbd>, <kbd>-C</kbd>, and <kbd>-I</kbd>) and the removal of a +default value for <kbd>-I</kbd>. Other changes include passing all +options to <kbd>.EQ</kbd> (including the label) such that +<kbd>.EN</kbd> takes only a single, optional argument saying whether +the equation is to be continued at the next invocation of +<kbd>.EQ</kbd>. Please read this section carefully if you have +documents containing equations as they may need to be updated. +</p> +</div> + +<div class="box-important" style="margin-top: 1em"> +<p class="tip"> +<span class="important">IMPORTANT:</span> +All arguments to <b>EQ</b> must appear on the same line as +<kbd>.EQ</kbd>. Do not attempt to break them up with the +“line-continued” backslash. You may want to set your +text editor to “wrap” mode in order to see all your +arguments. This annoyance stems from the preprocessor mechanism +itself, not groff or mom. +</p> +</div> + +<div class="macro-id-overline" style="margin-top: .5em"> +<h4 id="eq" class="docs" style="font-size: 100%; margin-top: .5em">The .EQ macro</h4> +</div> + +<p> +Equations to be set with <b>eqn</b> begin with <kbd>.EQ</kbd>, +followed by <b>eqn</b> code. Equations are centered by default, +but may be set flush left or indented from the left margin +if <kbd>-L</kbd> or <kbd>-I</kbd> are passed as arguments to +<kbd>.EQ</kbd>. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">ADJUST</h5> + +<p> +<kbd>ADJUST</kbd> lets you raise (<kbd>-</kbd>) or lower +(<kbd>+</kbd>) an equation +<span style="font-style: italic">within the space allotted for it</span> +by the amount you specify. This is useful for achieving good +optical centering between surrounding blocks of type. A unit of +measure is required. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">NO_SHIM</h5> + +<p> +<kbd>NO_SHIM</kbd> instructs mom not to apply +<a href="docprocessing.html#shim-vs-flex">shimming</a> +after an equation, which she will do automatically when shimming is +enabled, which it is by default. Shimming ensures that running text +after the equation falls properly on the page’s +<a href="definitions.html#baseline-grid">baseline grid</a>, +but can result in slightly unequal spacing above and +below (correctable with the <kbd>ADJUST</kbd> argument). +<kbd>NO_SHIM</kbd> is useful when you have several equations on the +page and there are visible differences in the spacing beneath them +as a result of shimming. To ensure a flush bottom margin, the last +equation on the page should be shimmed, i.e. should not be given the +<kbd>NO_SHIM</kbd> argument. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">NO_FLEX</h5> + +<p> +<kbd>NO_FLEX</kbd> instructs mom not to apply +<a href="docprocessing.html#shim-vs-flex">flex-spacing</a> +after an equation, which she will do automatically when flex-spacing +is enabled. <kbd>NO_FLEX</kbd> is useful when you have several +equations on the page and you want to distribute excess vertical +whitespace on the page amongst other flex-spacing points on +the page. If there are no others, the final equation should be +flex-spaced, i.e. not given the <kbd>NO_FLEX</kbd> argument. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">CAPTION</h5> + +<p> +<kbd>CAPTION</kbd> allows you to give the equation a caption. +Equation captions always appear beneath the equation. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">SHORT_CAPTION</h5> + +<p> +<kbd>SHORT_CAPTION</kbd> allows you to trim long captions for +inclusion in the List of Equations. The text you supply, surrounded +by double-quotes, is what will appear in the List. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">LABEL</h5> + +<p> +<kbd>LABEL</kbd>, if given, appears on the same baseline as the last line of the +equation, flush with the left or right margin, depending on the +equation’s horizontal position. The text you supply, surrounded by +double-quotes, is how +the equation is labelled in both the document proper and the List of +Equations. Mom provides an auto-labelling facility for equations (see +<a href="#autolabel">AUTOLABEL</a>), +which, if enabled, overrides the <kbd>LABEL</kbd> argument. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">SHIFT_LABEL</h5> + +<p> +<kbd>SHIFT_LABEL</kbd> allows you to raise (<kbd>-</kbd>) or lower +(<kbd>+</kbd>) the equation label. It’s primary use is to +center equation labels vertically on the equation rather than flush +with the last line. Assuming a three-line equation, +<kbd>.EQ SHIFT_LABEL -1v</kbd> would raise the label by +one line, thus centering it vertically on the equation. +</p> + +<h5 class="docs" style="margin-top: 1em; text-transform: none">TARGET</h5> + +<p> +<kbd>TARGET</kbd> followed by a unique name surrounded by +double-quotes creates a PDF target for the equation so that it may +be linked to from other places in the file (with PDF_LINK; see +<a href="version-2.html#mom-pdf">Producing PDFs with groff and mom</a>). +</p> + +<p> +<b><i>Please note:</i></b> The following functionality is available +only with groff 1.22.4 or later. +</p> + +<p> +When +<a href="#autolabel">autolabelling</a> +is enabled and the document is processed with +<a href="using.html#pdfmom" style="font-weight: bold">pdfmom</a>, +the target name can be used to generate the target’s label +number in running text if it is entered as a groff string, i.e. of +the form <kbd><span class="nobr">\*[name]</span></kbd>. For example, if you +create a target called “foo” for an equation whose +autolabel number would be 3, entering +<br/> +<span class="pre-in-pp"> + See + .PDF_LINK foo "Equation \*[foo]" +</span> +anywhere in running text would result in a pdf link that reads +“Equation 3”. If chapter numbers are being prefixed to +labels, the same string in, say, chapter 5 would produce the pdf +link “Equation 5.3”. +</p> + + +<div class="macro-id-overline" style="margin-top: .5em"> +<h4 id="en" class="docs" style="font-size: 100%; margin-top: .5em">The .EN macro</h4> +</div> + +<p> +A block of <b>eqn</b> code is terminated with <kbd>.EN</kbd>. +</p> + +<p> +If an equation needs to span multiple lines, possibly aligned +with <b>eqn</b>’s <kbd>'mark'</kbd> and <kbd>'lineup'</kbd> +directives, separate invocations of <kbd><span class="nobr">.EQ/.EN</span></kbd> +are required for each line, and the optional argument, +<kbd>CONTINUED</kbd> (or <kbd>CONT</kbd>, or <kbd>...</kbd> [three +dots, an ellipsis]), must be passed to <kbd>.EN</kbd>. +</p> + +<p> +If <kbd>-L</kbd> or <kbd>-I</kbd> is given to the first +<kbd>.EQ</kbd> of a multi-line equation, they remain in effect +until an <kbd>.EN</kbd> without the <kbd>CONTINUED</kbd> argument +is reached. +</p> + +<p> +Mom does not treat equations as floats, therefore it is possible to +begin an equation on one page and terminate it on the next. If you +wish to keep all lines of an equation together, you must wrap the +equation, including all invocations of <kbd>.EQ/.EN</kbd>, inside +a +<a href="#floats-intro">float</a>. +</p> + +<div class="rule-medium"><hr/></div> + +<h3 id="refer" class="docs">refer support</h3> + +<p> +<b>refer</b> support is covered in the section +<a href="refer.html">Bibliographies and references</a>. +</p> + +<div class="rule-medium"><hr/></div> + +<h2 id="captions-and-labels" class="docs">Captions and labels</h2> + +<ul> + <li><a href="#autolabel">AUTOLABEL</a></li> + <li><a href="#caption-after-label">CAPTION_AFTER_LABEL</a></li> + <li><a href="#mla">MLA</a>—MLA-style captioning and labelling</li> + <li><a href="#captions-labels-sources">Set style parameters for captions, labels, and sources</a></li> +</ul> + +<p> +Mom includes facilities for adding captions and labels to figures, +tables, equations, and pdf images, including auto-labelling. If +Lists of Figures, Tables, and Equations are desired, captions (if +any) and labels (if any) are collected and output in the Lists with +the appropriate page number. +</p> + +<p> +The distinction between a caption and a label is that labels are +identifiers, e.g. “Fig. 1” or “Table 3”, +while captions are descriptive or informative. For most types of +writing, it is usual to provide both. +</p> + +<p> +By default, mom sets captions above figures (i.e. <b>pic</b> output and +pdf images) and tables. This behaviour may be modified with the +macro +<a href="#caption-after-label">CAPTION_AFTER_LABEL</a>. +Equations always have their captions set underneath. All aspects of +the text style for captions may be set with the macro +<a href="#captions-labels-sources">CAPTIONS</a>. +</p> + +<p> +Labels for tables are set underneath the table unless the +<a href="#mla">MLA</a> +macro has been invoked, in which case the label and caption appear +above the table, per MLA style, and the source for the table, if +any, appears underneath. Labels for figures are set underneath. +Equation labels, by default, are set on the same baseline as the +last line of the equation. Like captions, all aspects of text style +for labels may be established with a single macro +<a href="#labels">LABELS</a>. +Furthermore, mom can autolabel figures, tables, and equations, with +or without a prefixed chapter number. +</p> + +<div class="macro-id-overline"> +<h3 id="autolabel" class="macro-id">Autolabel</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>AUTOLABEL_EQUATIONS</b> +<br/> +Macro: <b>AUTOLABEL_IMAGES</b> +<br/> +Macro: <b>AUTOLABEL_PIC</b> +<br/> +Macro: <b>AUTOLABEL_TABLES</b> +<br/> +<kbd class="macro-args">Arguments: +<br/> +[ PREFIX "<string>"] [ SUFFIX "<string>"] [ PREFIX_CHAPTER [ <n> ] ] +</kbd> +</div> + +<p> +<b>AUTOLABEL_<type></b> takes care of labelling <type> by +identifying each with a separate, incrementing numeric scheme, which +is also collected for output in Lists of Figures, Equations, and +Tables. +</p> + +<p> +Autolabelling may be disabled on-the-fly by giving any argument +other than <kbd>PREFIX</kbd>, <kbd>SUFFIX</kbd>, or +<kbd>PREFIX_CHAPTER</kbd> to the appropriate macro. For example, +<br/> +<span class="pre-in-pp"> + .AUTOLABEL_IMAGES NO +</span> +would disable autolabelling of images. +</p> + +<h4 class="docs" style="margin-top: -.5em">Prefixes and suffixes</h4> + +<p> +By default, when <b>AUTOLABEL</b> is enabled, the label numbers are +prefixed, and, in the case of equations, suffixed, with strings such +that they appear for tables as “Table <n>”, for +<b>pic</b> diagrams and pdf images as “Fig. <n>”, +and for equations as “Eq. (<n>)”. +</p> + +<p> +You can use <kbd>PREFIX <"string"></kbd> to change what +comes before the automatic numbering. For example, if you are +including musical excerpts in your document, MLA style requires that +they be labelled “Ex. <n>”. Since musical +excerpts are likely to be scanned images (in pdf format, don’t +forget), you have to change the prefix string for pdf images: +<br/> +<span class="pre-in-pp"> + .AUTOLABEL_IMAGES \ + PREFIX "Ex. " \ + SUFFIX "" +</span> +If you need a suffix after the automatic numbering, use +<kbd>SUFFIX <"string"></kbd>, like this: +<br/> +<span class="pre-in-pp"> + .AUTOLABEL_IMAGES \ + PREFIX "(Fig. " \ + SUFFIX ")" +</span> +Note from the above that both arguments, <kbd>PREFIX</kbd> and +<kbd>SUFFIX</kbd>, are required should you want either. Two +adjacent double-quotes leaves the string blank. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +In automatically formatted +<a href="#lists-macros">“Lists of ...”</a>, +label number prefixes are stripped when autolabelling is enabled. +</p> +</div> + +<h4 class="docs" style="margin-top: -.5em">Prefixing chapter numbers</h4> + +<p> +If you would like mom to prefix chapter numbers to the label, +pass <kbd>AUTOLABEL_<type></kbd> the argument +<kbd>PREFIX_CHAPTER</kbd>. +</p> + +<p> +If for some reason you need to specify the chapter number, +you may do so by passing the number as an argument to +<kbd>PREFIX_CHAPTER</kbd>. Subsequent chapters or major sections +will increment by one as expected. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +For the purposes of labelling, mom treats +<a href="docprocessing.html#doctype">DOCTYPE DEFAULT</a> +as if it were <b>DOCTYPE CHAPTER</b>, hence, with +<kbd>PREFIX_CHAPTER</kbd>, each collated <b>DEFAULT</b> +doctype’s prefixed “chapter” number is +incremented and the label number itself reset to “1”. +If you do not supply the <kbd>PREFIX_CHAPTER</kbd> argument, the +label number is <i>not</i> reset automatically. To reset it, invoke +<kbd>.AUTOLABEL_<type></kbd> after each +<a href="docprocessing.html#collate">COLLATE</a>. +</p> +</div> + +<div id="set-autolabel" class="box-macro-args" style="margin-top: .5em"> +Macro: <b>SET_AUTOLABEL</b> <kbd class="macro-args">FIG | TBL | PIC | EQN <n></kbd> +</div> + +<p> +You may sometimes need to set or reset the autolabel number for a +particular type of pre-processor or for PDF images. This is likely +to occur if you are using +<a href="#float">FLOAT</a> +in conjunction with the <kbd>TO_LIST</kbd> argument. +</p> + +<p> +For example, if your document has Figures (PDF images, pic diagrams) +and you want your tables to be labelled as Figures as well, you have +to wrap the tables inside a float and label the float manually as +“Fig. n”, sending it to the List of Figures with +<kbd>TO_LIST FIGURES</kbd>. +</p> + +<p> +Mom does not autolabel floats or assign them automatically +to a list, so she doesn’t know you’ve interrupted the +auto-incrementing label numbers. Use SET_AUTOLABEL get her back on +track. The number you give as an argument after telling her which +kind of label number to set is the one you want to appear next. +<br/> +<span class="pre-in-pp"> + .SET_AUTOLABEL FIG 6 +</span> +means the next autolabelled Figure will be “Fig. 6.” +</p> + +<div class="macro-id-overline"> +<h3 id="caption-after-label" class="macro-id">Captions after labels</h3> +</div> + +<div class="box-macro-args" style="margin-top: .5em"> +Macro: <b>CAPTION_AFTER_LABEL</b> <kbd class="macro-args">IMG | PIC | TBL | ALL [ <anything> ]</kbd> +</div> + +<p> +By default, mom sets captions above figures (<b>pic</b> output +and pdf images) and tables; labels are always underneath. +</p> + +<p> +<kbd>.CAPTION_AFTER_LABEL</kbd>, with one of the required arguments, +instructs mom to attach captions directly to the appropriate +labels, beginning on the same line. Any argument after the first +disables this behaviour, restoring caption placement to mom’s +default. For example, +<br/> +<span class="pre-in-pp"> + .CAPTION_AFTER_LABEL ALL +</span> +would enable captions after labels globally, while a subsequent +<br/> +<span class="pre-in-pp"> + .CAPTION_AFTER_LABEL IMG OFF +</span> +would disable captions after labels for pdf images only. +<kbd>OFF</kbd> can be anything you like (<kbd>X</kbd>, +<kbd>NO</kbd>, etc). +</p> + +<p> +If +<a href="#mla">MLA</a> +is enabled, there’s no need to invoke +<kbd>CAPTION_AFTER_LABEL</kbd> as this is implied. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +A separate invocation of <kbd>.CAPTION_AFTER_LABEL</kbd> is required +for each one of the required first arguments. You cannot, for +example, do +<br/> +<span class="pre-in-pp"> + .CAPTION_AFTER_LABEL IMG TBL +</span> +Rather, you must do +<br/> +<span class="pre-in-pp"> + .CAPTION_AFTER_LABEL IMG + .CAPTION_AFTER_LABEL TBL +</span> +</p> +</div> + +<div class="macro-id-overline"> +<h3 id="mla" class="macro-id">MLA-style captioning and labelling</h3> +</div> + +<div class="box-macro-args" style="margin-top: .5em"> +Macro: <b>MLA</b> <kbd class="macro-args"> [ <anything> ]</kbd> +</div> + +<p> +Modern Language Association style dictates that captions should +always go after labels. Furthermore, labels and captions for tables +should go <i>above</i> the tables, with the source for the table, if +any, underneath. +</p> + +<p> +Invoking <kbd>.MLA</kbd> by itself takes care of these details. If +you need to disable MLA-style captioning and labelling mid-document, +<kbd>.MLA OFF</kbd> does the trick. <kbd>OFF</kbd> can be +anything you like (<kbd>X</kbd>, <kbd>NO</kbd>, etc). +</p> + +<div class="macro-id-overline" style="margin-top: 1em"> +<h3 id="captions-labels-sources" class="macro-id">Style parameters for captions, labels and sources</h3> +</div> + +<div class="box-macro-args" style="margin-top: .5em"> +Macro: <b>CAPTIONS</b> <kbd class="macro-args">EQN | IMG | PIC | TBL | FLOATING | ALL</kbd> +<br/> +Macro: <b>LABELS</b> <kbd class="macro-args">EQN | IMG | PIC | TBL | FLOATING | ALL</kbd> +<br/> +Macro: <b>SOURCES</b> <kbd class="macro-args">TBL</kbd> +<br/> +<kbd class="macro-args">Style arguments: +<br/> + FAMILY <family> \ +<br/> + FONT <font> \ +<br/> + SIZE +|-<size> \ +<br/> + AUTOLEAD <value> \ +<br/> + COLOR <color> \ +<br/> + QUAD LEFT | CENTER | RIGHT [ ON_LL ] \ +<br/> + INDENT <indent> \ +<br/> + ADJUST +|-<vertical adjustment> +</kbd> +</div> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Arguments may be broken into several lines using the +“line-continued” backslash (<b>\</b>), as shown above. +</p> +</div> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Additional note:</span> +Mom’s default style for labels, captions, and sources is +the same as the style used for running text, with two exceptions: +labels are set in bold, except for eqn which is roman medium, and +the autolead value for all three is “2”, effectively +tightening the lead. Furthermore, they are quadded left (except +eqn, which is quadded right.) +</p> +</div> + +<p> +With the exception of <kbd>ADJUST</kbd> and <kbd>QUAD</kbd> (which +requires a bit of explanation), the style arguments to <kbd>CAPTIONS</kbd>, +<kbd>LABELS</kbd>, and <kbd>SOURCES</kbd> (which is only available +for tables) behave identically to the +<a href="docelement.html#control-macro-args">arguments to control macros</a>. +</p> + +<p> +The first, required argument after <kbd>CAPTIONS</kbd>, +<kbd>LABELS</kbd>, or <kbd>SOURCES</kbd> indicates the preprocessor +type for which you are setting the parameters. (For convenience +PDF_IMAGE—argument <kbd>IMG</kbd>—is here treated as a +preprocessor.) <kbd>FLOATING</kbd> sets the style for the macros +<a href="#caption">CAPTION</a> +and +<a href="#label">LABEL</a>, +which are used to label floats, quotes, and blockquotes. +</p> + +<p> +An argument of <kbd>ALL</kbd> sets a unified style for all +preprocessors, floats, quotes, and blockquotes. If the +<kbd>ALL</kbd> argument is given, arguments to subsequent +invocations of <kbd>CAPTIONS</kbd>, <kbd>LABELS</kbd>, or +<kbd>SOURCES</kbd> overwrite only the explicitly named style +parameters. +</p> + +<h4 class="docs">QUAD — quadding of labels, captions, and sources</h4> + +<h5 class="docs" style="text-transform: none">• pic, tbl, pdf images</h5> + +<p> +By default, figures (<b>pic</b> output and pdf images) and tables +have their captions and labels set quad left. Sources (for +tables) are also set quad left. Equations have their labels +set quad right, and their captions centered. +</p> + +<p> +Regardless of the quad direction, captions, labels and sources +are set on the width of the figure, table, or pdf image +unless you pass the optional <kbd>ON_LL</kbd> argument to +<kbd><span class="nobr">QUAD <direction></span></kbd>, in which case +the prevailing document line length is used instead. +</p> + +<h5 class="docs" style="text-transform: none">• eqn</h5> + +<p> +Equations behave differently. By default, equation labels are +set flush right with the page’s right margin regardless of +equation positioning, which is, again by default, centered. If the +equation is positioned left, the label will appear at the right +margin regardless of the direction you give to <kbd>QUAD</kbd>. If +the equation is indented with the +<kbd><span class="nobr">-I <indent></span></kbd> option, a quad +direction of <kbd>LEFT</kbd> is observed, but may overprint the last +line of the equation. +</p> + +<p> +Note that there is no <kbd>CENTER</kbd> option for equation labels, +and that captions are always quadded over the prevailing document +line length. +</p> + +<h5 class="docs" style="text-transform: none">• quotes and blockquotes</h5> + +<p> +Floating labels attached to <b>QUOTE</b>s are quadded on the +prevailing document line length, and require the <kbd>INDENT</kbd> +argument if you want to align them with the left and/or right edges +the quote. +</p> + +<p> +Floating labels attached to <b>BLOCKQUOTE</b>s are always quadded on +the indent and line length of the blockquote. +</p> + +<h5 class="docs" style="text-transform: none">• floats</h5> + +<p> +Floating labels and captions attached to <b>FLOAT</b>s are always +quadded over the prevailing document line length, and require the +<kbd>INDENT</kbd> argument if you want to align them with the left +and/or right edges of the float’s contents. +</p> + +<h4 class="docs">INDENT</h4> + +<p> +The <kbd>INDENT</kbd> argument may only be used if the label +or caption type is <kbd>FLOATING</kbd>, and only applies to +<b>FLOAT</b>s and <b>QUOTE</b>s, not <b>BLOCKQUOTE</b>s. +</p> + +<p> +It is not possible for mom to know the width of a float before +setting a label or caption attached to a float. She therefore sets +it on the prevailing document line length. While this isn’t +much of an issue when the label or caption quad is <b>CENTER</b>, +you may want to adjust the horizontal positioning when the quad is +<b>LEFT</b> or <b>RIGHT</b>. +</p> + +<p> +<kbd>INDENT</kbd>, with a numeric value to which a +<a href="definitions.html#unitofmeasure">unit of measure</a> +is appended, allows you to indent a floating label or caption so +it lines up with the left edge of a <b>FLOAT</b> or <b>QUOTE</b>. +<kbd>INDENT RIGHT</kbd> (with a value) allows you to shorten the +line length to the appropriate width. If you need both a left and +right indent, invoke <kbd>LABELS</kbd> or <kbd>CAPTIONS</kbd> twice, +one instance containing <kbd>INDENT <indent></kbd> and +the other <kbd>INDENT RIGHT <indent></kbd>. +</p> + +<h4 class="docs">ADJUST</h4> + +<p> +The <kbd>ADJUST</kbd> argument allows you to add(<kbd>+</kbd>) or +subtract (<kbd>-</kbd>) vertical space between labels and captions +and the output to which they are attached. The argument requires a +<a href="definitions.html#unitofmeasure">unit of measure</a>. +For example, if you find that table labels are a bit too close to +the table itself, +<br/> +<span class="pre-in-pp"> + .LABELS TBL ADJUST +3p +</span> +would put three extra points of space between the bottoms of tables +and the labels that appear beneath them. +</p> + +<h2 id="lists-of" class="docs">Lists of Figures, Tables, and Equations</h2> + +<p> +Besides a +<a href="tables-of-contents.html">Table of Contents</a>, +mom can generate Lists of Figures, Tables, and Equations. Labels +and captions are collected and concatenated, and output in lists +with the appropriate page number, just like a Table of Contents. +Including such lists in a document is as simple as adding whichever +you need of +<br/> +<span class="pre-in-pp"> + .LIST_OF_FIGURES + .LIST_OF_EQUATIONS + .LIST_OF_TABLES +</span> +to the end of your input file. +</p> + +<p> +Also like the Table of Contents, entries in the Lists’ output +are clickable PDF links when a document is viewed at the screen. +</p> + +<h3 id="lists-placement" class="docs">Placement of Lists</h3> + +<p> +Lists normally appear after the Table of Contents, and continue +the page numbering scheme used for it. By default, the Table of +Contents begins on roman-numeral page “i”. +</p> + +<p> +If you are using mom’s +<a href="tables-of-contents.html#auto-relocate-toc">AUTO_RELOCATE_TOC</a> +feature, you have two options for placement of the Lists within the +document. If you want the Lists shifted to the top of the document +along with the Table of Contents, invoke the Lists macros <i>after</i> +<a href="tables-of-contents.html#toc"><kbd>.TOC</kbd></a>. +If you prefer to have the Lists at the end of the document, invoke +the Lists macros <i>before</i> <kbd>.TOC</kbd>. +</p> + +<p> +Lists shifted with the Table of Contents do not appear in the Table +of Contents itself, but do appear as clickable links in the PDF +outline typically available in the left panel of most PDF viewers. +Lists that are not shifted with the Table of Contents appear in both +the Table of Contents itself and the PDF outline. +</p> + +<div class="macro-id-overline" style="margin-top: 1em"> +<h3 id="lists-macros" class="macro-id">Macros to generate Lists</h3> +</div> + +<div class="box-macro-args" style="margin-top: .5em"> +Macro: <b>LIST_OF_EQUATIONS</b> +<br/> +Macro: <b>LIST_OF_FIGURES</b> +<br/> +Macro: <b>LIST_OF_TABLES</b> +<br/> +<kbd class="macro-args">Arguments: +<br/> + [ TITLE_STRING "<string>" ] [ START_PAGENUM <page number> ] +</kbd> +</div> + +<p> +The first optional argument to the <kbd>LIST_OF_<type></kbd> +macros allows you to change the title that appears at the top of the +page. This is useful not only for internationalization, or to meet +the requirements of various style guides, but is also useful +for, say, documents containing musical examples, which, per +MLA-style, should be labelled “Example ” or +“Ex. ”. When it comes time to output the List of +Figures (to which musical examples, usually scanned pdf images, belong), +<br/> +<span class="pre-in-pp"> + LIST_OF_FIGURES TITLE_STRING "List of Examples" +</span> +ensures that the title of the List is correct. +</p> + +<p> +The second optional argument allows you to give a starting page +number for a list in cases where mom’s pagination scheme does +not provide the List with the starting page number you want. +</p> +<h3 id="formatting-lists" class="docs">Formatting and style parameters for Lists</h3> + +<p> +Like the Table of Contents, nearly every aspect of Lists can be +designed independently of a document’s overall style. By +default, Lists follow the formatting and style parameters of the +Table of Contents, both mom’s defaults and any changes you may +have made to the Table of Contents. +</p> + +<p> +If you wish to make changes to any aspect of Lists formatting +or styling, the macro <kbd>LISTS_STYLE</kbd> provides all the +tools necessary. It is unlikely that you’ll want the +formatting of the various list types to differ one from the other, +so <kbd>LISTS_STYLE</kbd> applies to all Lists. In the event that +you do need to change some aspect of the formatting for different +list types, simply invoke <kbd>LISTS_STYLE</kbd> immediately prior +to each list whose formatting needs to be changed. +</p> + +<div class="macro-id-overline" style="margin-top: 1em"> +<h3 id="lists-style" class="macro-id">Lists style</h3> +</div> + +<div class="box-macro-args" style="margin-top: .5em"> +Macro: <b>LISTS_STYLE</b> <kbd class="macro-args"> +<br/> +Arguments: +<br/> + FAMILY <family> \ +<br/> + FONT <font> \ +<br/> + PT_SIZE <size> \ +<br/> + LEAD <leading> \ +<br/> + TITLE_FAMILY <family> \ +<br/> + TITLE_FONT <font> \ +<br/> + TITLE_SIZE +|-<size> \ +<br/> + TITLE_QUAD LEFT | CENTER | RIGHT \ +<br/> + TOC_HEADER_UNDERSCORE default = none +<br/> + TITLE_COLOR <color> \ +<br/> + PN_FAMILY <family> \ +<br/> + PN_FONT <font> \ +<br/> + PN_SIZE +|-<size> \ +<br/> + EQN_PN_PADDING <placeholders> \ +<br/> + FIG_PN_PADDING <placeholders> \ +<br/> + TBL_PN_PADDING <placeholders> \ +<br/> + PAGENUM_STYLE DIGIT | ROMAN | roman | ALPHA | alpha \ +<br/> + NO_PAGINATION +</kbd> +</div> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Arguments may be broken into several lines using the +“line-continued” backslash (<b>\</b>), as shown above. +</p> +</div> + +<p> +<kbd>FAMILY</kbd> is the family for the entirety of Lists pages. +</p> + +<p> +<kbd>FONT</kbd> is the font for the entirety of Lists pages. +</p> + +<p> +<kbd>PT_SIZE</kbd> is the base point size for the entirety of Lists +pages. +</p> + +<p> +<kbd>LEAD</kbd> is the base leading for the entirety of Lists pages. +</p> + +<p> +<kbd>TITLE_FAMILY</kbd> is the family for the Lists titles if you +want it different from the family otherwise used for the Lists +pages. +</p> + +<p> +<kbd>TITLE_FONT</kbd> is the font for the Lists titles if you want +it different from the font otherwise used for the Lists pages. +</p> + +<p> +<kbd>TITLE_SIZE</kbd> tells mom by how much to increase +(<kbd>+</kbd>) or decrease (<kbd>-</kbd>) the point size of the +titles relative to the overall point size of Lists pages. +</p> + +<p> +<kbd>TITLE_QUAD</kbd> tells mom how to position the title +horizontally. +</p> + +<p> +<kbd>TITLE_COLOR</kbd> sets the colour for the titles. The colour +must be pre-initialized with +<a href="color.html#newcolor">NEWCOLOR</a> +or +<a href="color.html#xcolor">XCOLOR</a>. +</p> + +<p> +<kbd>PN_FAMILY</kbd> sets the family for entry pagenumbers. +</p> + +<p> +<kbd>PN_FONT</kbd> sets the font for entry pagenumbers. +</p> + +<p> +<kbd>PN_SIZE</kbd> tells mom by how much to increase (<kbd>+</kbd>) +or decrease (<kbd>-</kbd>) the point size of entry pagenumbers +relative to the overall point size of Lists pages. +</p> + +<p> +<kbd>EQN_PN_PADDING</kbd>, <kbd>FIG_PN_PADDING</kbd>, and +<kbd>TBL_PN_PADDING</kbd> tells mom how many placeholders to reserve +for the entry pagenumbers in their respective Lists. If, for example, +a document with both tables and figures runs to over a hundred +pages, but there are no tables after page 99, +<br/> +<span class="pre-in-pp"> + LISTS_STYLE FIG_PN_PADDING 3 + LISTS_STYLE TBL_PN_PADDING 2 +</span> +would prevent an unneeded, reserved placeholder from putting too +much space between the leader and the entry pagenumber in the List of +Tables. +</p> + +<p> +The padding in effect, unless you change it, is whatever was set for +the Tables of Contents; mom’s default is “3”. +</p> + +<p> +<kbd>PAGENUM_STYLE</kbd> tells mom which pagination format to use +for the page numbers of the Lists pages themselves. By default, +since Lists observe what is in effect for the Table of Contents, the +pagination format is “roman”. Please note that the +starting page number for any of the Lists is given as an argument to +the +<a href="#lists-of">LISTS_0F_<type></a> +macro. +</p> + +<p> +<kbd>NO_PAGINATION</kbd> disables pagination of Lists pages. +</p> + +<h2 id="box-intro" class="docs">Shaded backgrounds and frames (boxes)</h2> + +<p> +Mom lets you add shaded backgrounds and frames to text and other +material. For convenience, she calls backgrounds and frames +“boxes.” Entire passages may be boxed, or individual +document elements like headings, quotes, or pre-processor output. +Furthermore, boxes may be nested. +</p> + +<p> +Boxes start on the baseline where the boxed material would have +started were it not for the box, subject to minor aesthetic +corrections mom takes the liberty of making. +</p> + +<p> +Boxes extend from the current left margin to the current right +margin, respecting any active left and/or right indents. There are +two exceptions, +<a href="docelement.html#epigraph">EPIGRAPH BLOCK</a> +and +<a href="docelement.html#blockquote">BLOCKQUOTE</a>, +which are discussed +<a href="#quotes">here</a>. +</p> + +<p> +After a box is started, active left and right indents are +cleared. The box’s inset determines the new left and right +margins. Indents set inside a box are relative to the inset. +When a box is stopped, formerly active left and right indents +are restored. +</p> + +<p> +Frames are drawn from the perimeter inward. The inset is +relative to the inner edge of the frame. +</p> + +<p> +If a box (including the bottom inset) can complete on a page, it +does, even if there is no further room for type. This may, on +occasion, result in slight deviations from normal bottom margin +alignment. +</p> + +<p> +Boxes span pages whenever the boxed material continues on the next +page. Spanning boxes extend fully to the bottom margin of the page +on which they begin, leaving a slightly larger inset at the bottom +than around the other sides. +</p> + +<p> +When there is not enough room to set at least one line of type +inside a box, mom defers starting the box until the next page, +leaving a gap. +</p> + +<p> +Boxed material is not +<a href="docprocessing.html#shim-vs-flex">shimmed</a> +or +<a href="docprocessing.html#shim-vs-flex">flexed</a>. +If either was active prior to the box, it is restored when the box +ends and mom automatically shims or flexes whatever comes next. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="important">NOTE:</span> +Shaded backgrounds and frames are not available when your +<a href="docprocessing.html#printstyle">PRINTSTYLE</a> +is <kbd>TYPEWRITE</kbd> or when +<a href="docprocessing.html#columns">COLUMNS</a> are enabled. +</p> +</div> + +<div class="macro-id-overline"> +<h3 id="box" class= "macro-id">BOX</h3> +</div> + +<div id="box-macro" class="box-macro-args" style="margin-top: .5em"> +Macro: <b>BOX</b> <kbd class="macro-args"> [ <arguments> ] | <anything> +<br/> +Arguments: +<br/> +[ SHADED <color> | OUTLINED <colour> ] \ +<br/> +[ INSET <dist> ] \ +<br/> +[ WEIGHT <wt> ] \ +<br/> +[ ADJUST +|-<amount> ] \ +<br/> +[ EQN | PIC | GRAP | IMG ] +</kbd> +</div> + +<p> +Without arguments, BOX begins a shaded grey background. +The material inside is inset by one +<a href="definitions.html#picaspoints">pica</a>. +Any other type of box requires at a minimum either +<kbd>SHADED</kbd> or <kbd>OUTLINED</kbd>. In the case of boxes +that are to contain pdf images or pre-processor material for +<a href="#eqn">eqn</a>, +<a href="#pic">pic</a>, +or +<a href="#grap">grap</a>, +<kbd>IMG</kbd>, <kbd>EQN</kbd>, <kbd>PIC</kbd>, or <kbd>GRAP</kbd> +must also be given. Note that +<a href="#tbl">tbl</a> +does not have this requirement. +</p> + +<p> +BOX is a +<a href="definitions.html#toggle">toggle macro</a>, +so any argument other than one in the list completes the box +(<kbd>QUIT</kbd>, <kbd>END</kbd>, <kbd>X</kbd>, etc). +</p> + +<p> +Boxes should be started inside toggle macros like +<a href="docelement.html#quote">QUOTE</a> +or +<a href="#float">FLOAT</a> +just after the macro is called, and terminated just before toggling +the macro off (unless you wish the box to enclose further material). +</p> + +<p> +Non-toggle macros like +<a href="docelement.html#heading">HEADING</a> +or +<a href="docelement.html#pp">PP</a> +require that the box be started beforehand. Boxed pre-processor +material must be fully enclosed by BOX / BOX OFF, as +in this recipe for a one-off boxed pic diagram: +<span class="pre-in-pp"> +.BOX +.PS +<pic commands> +.PE +.BOX OFF +</span> +Arguments to BOX are not sticky. Each time you invoke BOX, you +must invoke it with arguments unless you want mom’s default grey +background. If all or several boxes in a document require the same +arguments, create a macro at the top of the input file that calls +BOX with the arguments you want, e.g. +<span class="pre-in-pp"> + .de PINK_BOX + .BOX \ + SHADED pink \ + OUTLINED darkred \ + WEIGHT 1p \ + INSET 9p + .. +</span> +<kbd>.PINK_BOX</kbd> may then be used instead of <kbd>.BOX</kbd> any +time you want a box with those arguments. +</p> + +<h3 class="docs">SHADED | OUTLINED</h3> + +<p> +<kbd>SHADED</kbd> or <kbd>OUTLINED</kbd> are required. Both may +be given, resulting in a shaded background with a frame, and both +require a colour, e.g. +<span class="pre-in-pp"> + .BOX SHADED blue OUTLINED black +</span> +The colour may be +</p> + +<ul style="margin-top: -1em;"> + <li>an xcolor name</li> + <li>a colour initialized with + <a href="color.html#newcolor">NEWCOLOR</a> + or + <a href="color.html#xcolor">XCOLOR</a> + </li> + <li>an RGB hexadecimal string beginning with (e.g. #FF0000)</li> +</ul> + +<p> +Note that without <kbd>SHADED</kbd>, the above would simply draw a +black frame. +</p> + +<h3 class="docs">WEIGHT</h3> + +<p> +Mom’s default weight for <kbd>OUTLINED</kbd> is 1/2 +<a href="definitions.html#picaspoints">point</a>. +If you’d like to change it, give <kbd>WEIGHT</kbd> the desired +value with a unit of measure appended, typically points, e.g. +<span class="pre-in-pp"> + .BOX OUTLINED black WEIGHT 1p +</span> +</p> + +<h3 class="docs">INSET</h3> + +<p> +Mom’s default inset for boxes is one +<a href="definitions.html#picaspoints">pica</a> +on all sides. If you’d like a larger or smaller inset, give +<kbd>INSET</kbd> the distance you want with a unit of measure +appended, e.g. +<span class="pre-in-pp"> + .BOX SHADED pink INSET 2m +</span> +</p> + +<h3 class="docs">ADJUST</h3> + +<p> +If you are not happy with the starting position of a box, you can +change it by giving <kbd>ADJUST</kbd> the distance you want it +raised (-) or lowered (+) with a unit of measure appended. For +example, to lower a box three points, +<span class="pre-in-pp"> + .BOX OUTLINED black ADJUST +3p +</span> +To raise it, +<span class="pre-in-pp"> + .BOX OUTLINED black ADJUST -3p +</span> +</p> + +<h3 class="docs">PIC / GRAP / EQN / IMG</h3> + +<p> +The <kbd>PIC</kbd> argument must be given to BOX if the box contains +any +<a href="#pic">pic</a> +diagrams. Likewise, graphs made with +<a href="#grap">grap</a>, +equations made with +<a href="#eqn">eqn</a>, +and +<a href="#pdf-image">pdf images</a> +require a corresponding <kbd>GRAP</kbd>, <kbd>EQN</kbd>, or +<kbd>IMG</kbd> argument. +</p> + +<p> +If you’re boxing a single diagram, graph, or pdf image, wrap +it in a float, like this: +<span class="pre-in-pp"> + .FLOAT + .BOX PIC <other parameters> + .PS + <pic input> + .PE + .BOX OFF + .FLOAT OFF +</span> +Notice that in the case of pdf images, pic, and grap, this +represents a change from the norm, where the use of FLOAT may be +destructive and is discouraged. +</p> + +<h2 id="box-notes" class="docs">Additional notes on BOX usage and behaviour</h2> + +<h3 id="qbef" class="docs">QUOTE, BLOCKQUOTE, EPIGRAPH, FLOAT</h3> + +<p> +<a href="docelement.html#quote">QUOTE</a>, +<a href="docelement.html#blockquote">BLOCKQUOTE</a>, +<a href="docelement.html#epigraph">EPIGRAPH</a>, +and +<a href="images.html#float">FLOAT</a> +require that boxes be started <i>after</i> they are +invoked and stopped just before they are toggled off: +<span class="pre-in-pp"> + .QUOTE + .BOX <parameters> + Text of quote + .BOX OFF + .QUOTE OFF +</span> +</p> + +<h3 id="code" class="docs">CODE</h3> + +<p> +If you’re boxing +<a href="docelement.html#code">CODE</a> +that’s wrapped inside +<a href="docelement.html#quote">QUOTE</a>, +as described +<a href="docelement.html#quote-code">here</a>, +set the quote indent to “0” with +<span class="pre-in-pp"> + .QUOTE_STYLE INDENT 0 +</span> +so that the box’s leftmost inset is respected. +</p> + +<p> +Here’s a recipe for setting boxed code with an 18-point inset: +<span class="pre-in-pp"> + .QUOTE_STYLE INDENT 0 + .QUOTE + .CODE + .BOX INSET 18p + Hello, world. + .BOX OFF + .QUOTE OFF +</span> +Note that CODE, wrapped inside QUOTE, does not require a corresponding CODE OFF. +</p> + +<h4 id="quotes" class="docs">Description of boxed BLOCKQUOTES and EPIGRAPH BLOCKS</h4> + +<p> +When you box a BLOCKQUOTE, or an EPIGRAPH with the <kbd>BLOCK</kbd> +argument, the box is centred on the page and is only as wide as the +blockquote or epigraph plus the box’s inset. +</p> + +<p> +QUOTE and EPIGRAPH (without the <kbd>BLOCK</kbd> argument), on the +other hand, set the box fully to the left and right margins. +</p> + +<h4 id="leftover" class="docs">Leftover box syndrome</h4> + +<p> +Boxed quotes and blockquotes sometimes exhibit leftover box +syndrome, where the page after a fully terminated boxed quote or +blockquote begins with an empty bit of box. Equally, you may +sometimes see the lower edge of a quote’s or +blockquote’s box falling slightly below the page’s +bottom margin. +</p> + +<p> +The solution in both situations is to use the <kbd>ADJUST</kbd> +argument to raise or lower the box’s starting position. +Leftover box syndrome is usually fixed by raising the box slightly. +When the box runs too deep, lowering it is generally recommended, +although this will result in a widowed line at the top of the next +page. In either case, some experimentation is necessary. +</p> + +<h3 id="slides" class="docs">SLIDES</h3> + +<p> +On a slide with no pauses, boxes behave as they do in printed +documents. +</p> + +<p> +When a slide contains pauses, only the material up to the first +pause is boxed. As subsequent material is revealed, the box changes +location, moving down to surround each new item. This behaviour +persists until the box is stopped, making it useful for highlighting +material as it is revealed. +</p> + +<h3 id="footnotes" class="docs">Footnotes</h3> + +<p> +You don’t have to worry about boxes encroaching on footnotes. +Mom makes sure they don’t. +</p> + +<h2 id="page-color-intro" class="docs">Page colour</h2> + +<p> +Mom lets you change the page (“paper”) colour +from white to anything you like. While this has limited application +in printed documents, it can be effective in +<a href="docprocessing.html#slides">slide presentations</a>. +</p> + +<div class="macro-id-overline"> +<h3 id="page-color" class= "macro-id">PAGE_COLOR</h3> +</div> + +<div id="page-color-macro" class="box-macro-args" style="margin-top: .5em"> +Macro: <b>PAGE_COLOR</b> <kbd class="macro-args"> <color> | OFF | off</kbd> +</div> +<p class="requires" style="font-style: normal"> +<i>Aliased as</i> <kbd>PAGE_COLOUR</kbd>, <kbd>SLIDE_COLOR</kbd>, +<i>and</i> <kbd>SLIDE_COLOUR</kbd>. +</p> + +<p> +When you invoke PAGE_COLOR with a <kbd>color</kbd> argument, the +current and subsequent pages turn the colour you request. If +more than one instance of PAGE_COLOR appears before a page break, +including <kbd>PAGE_COLOR OFF</kbd>, only the last applies. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Unlike other +<a href="definitions.html#toggle">toggle macros</a>, +PAGE_COLOR requires the use of <kbd>OFF</kbd> or <kbd>off</kbd> +to terminate it rather than an arbitrary string (<kbd>OFF</kbd>, +<kbd>QUIT</kbd>, <kbd>END</kbd>, <kbd>X</kbd>, etc). +</p> +</div> + +<div class="rule-long"><hr/></div> + +<!-- Navigation links --> +<table style="width: 100%; margin-top: 12px;"> +<tr> + <td style="width: 33%;"><a href="toc.html">Back to Table of Contents</a></td> + <td style="width: 20%; text-align: center;"><a href="#top">Top</a></td> + <td style="width: 46%; text-align: right;"><a href="headfootpage.html">Next: Page headers/footers, pagination</a></td> +</tr> +</table> + +</div> + +<div class="bottom-spacer"><br/></div> + +</body> +</html> diff --git a/contrib/mom/momdoc/inlines.html b/contrib/mom/momdoc/inlines.html new file mode 100644 index 0000000..8613161 --- /dev/null +++ b/contrib/mom/momdoc/inlines.html @@ -0,0 +1,1112 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004-2020 Free Software Foundation, Inc. +Written by Peter Schaffter (peter@schaffter.ca). + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"/> + <title>Mom -- Inline escapes</title> + <link rel="stylesheet" type="text/css" href="stylesheet.css" /> +</head> + +<body style="background-color: #f5faff;"> + +<!-- ==================================================================== --> + +<div id="top" class="page"> + +<!-- Navigation links --> +<table style="width: 100%;"> +<tr> + <td><a href="toc.html">Back to Table of Contents</a></td> + <td style="text-align: right;"><a href="color.html#top">Next: Coloured text</a></td> +</tr> +</table> + +<h1 id="inline-escapes" class="docs">Inline escapes</h1> + +<div style="text-align: center;"> +<a href="#index-inlines">List of inline escapes</a> +</div> + +<div class="rule-medium"><hr/></div> + +<h2 id="intro-inlines" class="docs">Introduction</h2> +<p> +Inline escapes, as described in the +<a href="definitions.html#inlines">groff terms</a> +section of this manual, are typesetting commands that appear in text +<a href="definitions.html#inputline">input lines</a>, +as opposed to macros and other +<a href="definitions.html#controllines">control lines</a> +that must appear on lines by themselves. +</p> + +<p> +Aside from altering type parameters within a line, inlines also tell +groff about special characters—em-dashes, bullets, +<a href="definitions.html#figurespace">figure/digit-width spaces</a>, +and so on. It is beyond the scope of this manual to provide +a complete list of groff’s inline functions and special +characters. I recommend having a look at the +<a href="intro.html#canonical">canonical reference materials</a> +should you need more information than is contained herein. +</p> + +<p> +In groff, the escape character is the backslash (<kbd>\</kbd>). +Groff interprets everything following the backslash as instructions, +not literal text, until the escape sequence is complete. Should +you need the actual backslash character as part of a line of text, +simply enter it twice (<kbd>\\</kbd>). Groff understands that this +means “please print a backslash character.” +</p> + +<p> +You can also use <kbd>\e</kbd> to print a literal backslash, or use +<a href="goodies.html#esc-char">ESC_CHAR</a> to change the escape +character to something other than the backslash, which lets you +use a single backslash as a literal backslash. +</p> + +<p> +Groff has a number of ways of recognizing what constitutes a +complete escape sequence. This is both a boon and a curse; some +escape sequences have no terminating delimiter and consequently +become difficult to distinguish from real input text. Others +require the use of an opening parenthesis with no corresponding +closing parenthesis. Still others need to be enclosed in square +brackets. +</p> + +<p> +Mom recognizes that certain escapes get used more often than others. +For these, she has a consistent input style that takes the form +<kbd><span class="nobr">\*[...]</span></kbd>, which makes them stand out well +from the text of your documents. These escapes are the ones listed +under +<a href="#inlines-mom">Mom’s personal inline escapes</a>. +</p> + +<p> +Despite mom’s best intentions, there are still +a number of typesetting functions that can only be accomplished +with groff’s native inline escapes. I’ve listed the +ones that strike me as essential, but there are many others. If you +want to know what they are, please read the +<a href="intro.html#canonical">canonical reference materials</a> +pertaining to groff. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="tip">Helpful bit of information:</span> +Inline escapes can be used in +<a href="docprocessing.html#docprocessing">document processing macros</a> +that take +<a href="definitions.html#stringargument">string arguments</a>. +</p> +</div> + +<div class="macro-list-container"> +<h3 id="index-inlines" class="macro-list">List of inline escapes</h3> + +<ul class="macro-list"> +<li id="inlines-mom"><a href="#inlines-mom-top">Mom’s personal inline escapes</a> +<ul class="no-enumerator" style="margin-left: -1.5em;"> + <li><a href="#inline-fonts-mom">Changing fonts</a></li> + <li><a href="#inline-size-mom">Changing point size</a></li> + <li><a href="#uc-lc">Capitalise a section of type</a></li> + <li><a href="#inline-kerning-mom">Pairwise kerning</a></li> + <li><a href="#inline-horizontal-mom">Horizontal movement</a></li> + <li><a href="#inline-vertical-mom">Vertical movement</a></li> + <li><a href="#inline-b-mom">Terminate a line without advancing on the page</a></li> + <li><a href="#tb-plus-mom">Call the next sequential tab without advancing on the page</a></li> + <li><a href="#inline-rule-mom">Full measure rules</a> + <ul class="sublist" style="font-size: 100%;"> + <li><a href="#rule-weight">Macro to control the weight of rules</a></li> + </ul></li> +</ul></li> +<li id="inlines-groff"><a href="#inlines-groff-top">Commonly-used groff inline escapes</a> +<ul class="no-enumerator" style="margin-left: -1.5em;"> + <li><kbd>\f</kbd> <a href="#inline-fonts-groff">Font control</a></li> + <li><kbd>\h</kbd> <a href="#inline-horizontal-groff">Inline horizontal motions</a></li> + <li><kbd>\v</kbd> <a href="#inline-vertical-groff">Inline vertical motions</a></li> + <li><kbd>\w</kbd> <a href="#inline-stringwidth-groff">String width function</a></li> + <li><kbd>\l</kbd> <a href="#inline-linedrawing-groff">Horizontal line drawing function</a></li> + <li style="margin-left: 1.6em;"><a href="#inline-characters-groff">Special characters</a></li> +</ul></li> +</ul> +</div> + +<div class="rule-medium"><hr/></div> + +<!-- -INLINE_FONTS_MOM- --> + +<h2 id="inlines-mom-top" class="macro-group">Mom’s personal inline escapes</h2> + +<h3 id="inline-fonts-mom" class="docs">Changing fonts</h3> + +<p> +Mom provides five escapes for changing fonts inline: +<br/> +<span class="pre-in-pp"> + \*[ROM] Change to the medium roman font + \*[IT] Change to the medium italic font + \*[BD] Change to the bold roman font + \*[BDI] Change to the bold italic font + \*[PREV] Revert to the previous font (once only)* +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">*Note:</span> +<kbd><span class="nobr">\*[PREV]</span></kbd> does not operate "stack +style". It returns to the previous font once only, and +afterwards has no effect. In other words, in the case of +<kbd><span class="nobr">\*[PREV]\*[PREV]</span></kbd>, only the first +<kbd><span class="nobr">\*[PREV]</span></kbd> is respected; the second one is silently +ignored. +</p> +</div> + +<p> +These escapes are provided for merely for convenience, legibility, +and consistency when typesetting with mom. For more complete and +flexible inline font control, please see +<a href="#inline-fonts-groff">font control with <kbd>\f</kbd></a>. +</p> + +<div class="box-notes"> +<h3 id="inlines-docprocessing-fonts" class="docs notes">Notes concerning document processing</h3> +<p style="margin-top: .5em;"> +If you’re using the +<a href="docprocessing.html#docprocessing">document processing macros</a>, +inline font changes remain in effect only for the duration of the +current document element tag. +</p> + +<p class="tip-bottom"> +Additionally, if you’re designing your own +<a href="headfootpage.html#headfootpage-intro">HEADERS or FOOTERS</a> +and want to use mom’s inline escapes for changing fonts as +part of the left, centre and/or right strings, or in the strings +for +<a href="headfootpage.html#hdrftr-rectoverso">recto</a> +and/or +<a href="headfootpage.html#hdrftr-rectoverso">verso</a> +HEADERS or FOOTERS, or in the strings passed to +<a href="headfootpage.html#headers-and-footers">HEADERS_AND_FOOTERS</a>, +you must enter the inlines beginning with <kbd>\E*</kbd> +rather than just <kbd><span class="nobr">\*</span></kbd>, e.g. +<kbd><span class="nobr">\E*[BD]</span></kbd>. You may, in such cases, prefer to +use the simpler groff inline escape +<a href="#inline-fonts-groff"><kbd>\f</kbd></a>. +</p> +</div> + +<!-- -INLINE_SIZE_MOM- --> + +<h3 id="inline-size-mom" class="docs">Changing point size</h3> +<p> +Mom has two inline escapes for changing point size: +<br/> +<span class="pre-in-pp"> + \*[SIZE <size>] +</span> +and +<br/> +<span class="pre-in-pp"> + \*S[<size>] +</span> +where “size” is the new size you want. You can use +either; they behave exactly the same way. For example, to change +the point size of type inline to 12 points, you could enter either +<br/> +<span class="pre-in-pp"> + \*[SIZE 12] +</span> +or +<br/> +<span class="pre-in-pp"> + \*S[12] +</span> +Entering either <kbd><span class="nobr">\*[SIZE]</span></kbd> or +<kbd><span class="nobr">\*S[]</span></kbd> with no argument reverts to the former +point size. +</p> + +<p> +The advantage of the first form is that it’s easy to remember, +and follows mom’s usual inline syntax. The advantage of the +second is that it’s more concise. +</p> + +<p> +Notice that in both cases, the new size does not require a +<a href="definitions.html#unitofmeasure">unit of measure</a>; +<a href="definitions.html#picaspoints">points</a> +is assumed. However, a unit of measure may be appended to the size +if that’s what you wish. Fractional sizes are, of course, +allowed. +</p> + +<p> +The size given to <kbd><span class="nobr">\*[SIZE <size>]</span></kbd> +or <kbd><span class="nobr">\*S[<size>]</span></kbd> may be expressed in +plus or minus terms, which can be very useful. In the following +examples, the word “mom” will be output 2 points larger +than the point size of the rest of the line. +<br/> +<span class="pre-in-pp"> + While she isn't perfect, \*S[+2]mom\*S[-2] isn't half bad. + While she isn't perfect, \*[SIZE +2]mom\*[SIZE -2] isn't half bad. +</span> +Please note that inline size changes do not update the leading if +<a href="typesetting.html#autolead">AUTOLEAD</a> +is enabled. +</p> + +<div class="box-notes"> +<h3 id="inline-docprocessing-ps" class="docs notes">NOTE CONCERNING DOCUMENT PROCESSING</h3> +<p style="margin-top: .5em;"> +If you’re using the +<a href="docprocessing.html#docprocessing">document processing macros</a> +and wish to design your own +<a href="headfootpage.html#headfootpage-intro">HEADERS or FOOTERS</a> +using mom’s inline escape for changing point size as part of +the left, centre and/or right strings, or in the strings for +<a href="headfootpage.html#hdrftr-rectoverso">recto</a> +and/or +<a href="headfootpage.html#hdrftr-rectoverso">verso</a> +HEADERS or FOOTERS, or in the strings passed to +<a href="headfootpage.html#headers-and-footers">HEADERS_AND_FOOTERS</a>, +you <i>must</i> use the form <kbd><span class="nobr">\*S[<n>]</span></kbd> +and enter the inline beginning with <kbd>\E*</kbd>, like this: +<kbd><span class="nobr">\E*S[<+|-><n>]</span></kbd>. +</p> + +<p class="tip-bottom"> +<span class="additional-note">Additional note:</span> +If you’re accustomed to groff’s usual way of handling +inline size requests <kbd>(\sN, \s±N, \s(NN, \s±(NN, \s[NNN], +\s±[NNN]),</kbd> feel free to continue with your old habits. Mom +doesn’t care. +</p> +</div> + +<!-- -CAPITALISATION- --> + +<h3 id="uc-lc" class="docs">Capitalise a section of type</h3> +<p> +If you need to capitalise a region of type inline, +bracket the region of type with the inline escapes, +<kbd><span class="nobr">\*[UC]</span></kbd> (Upper Case) and +<kbd><span class="nobr">\*[LC]</span></kbd> (Lower Case), like this: +<br/> +<span class="pre-in-pp"> + All work \*[UC]and\*[LC] no play makes Jack a dull boy. +</span> +The above produces, on output +<br/> +<span class="pre-in-pp"> + All work AND no play makes Jack a dull boy. +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +<kbd>\*[UC]</kbd> and <kbd>\*[LC]</kbd> must not be used inside the +<a href="definitions.html#stringargument">string arguments</a> +passed to the +<a href="headfootpage.html#hdrftr-strings">HEADER_<POSITION></a> +macro. Instead, use the control macro +<a href="headfootpage.html#_caps">HEADER_<POSITION>_CAPS.</a> +For +<a href="headfootpage.html#hdrftr-rectoverso">HEADER_RECTO</a> +(or _VERSO) or +<a href="headfootpage.html#hdrftr-rectoverso">FOOTER_RECTO</a> +(or _VERSO), supply the <kbd>CAPS</kbd> option to the appropriate +macro. +</p> +</div> + +<!-- -INLINE_KERNING_MOM- --> + +<h3 id="inline-kerning-mom" class="docs">Pairwise kerning</h3> +<p> +Pairwise kerning means moving specific letter pairs closer +together or further apart (see +<a href="definitions.html#kern">Typesetting terms, kerning</a> +for more details). +</p> + +<p> +Mom permits inline pairwise kerning through the use of the inline +escapes +<br/> +<span class="pre-in-pp"> + \*[BU <n>] Closes the space between letters (Back Units). + \*[FU <n>] Opens the space between letters (Forward Units). +</span> +<b><n></b> is the number of +<a href="definitions.html#kernunit">kern units</a> +by which to close or open the space between letters. +</p> + +<p> +For example, +<br/> +<span class="pre-in-pp"> + THE HUMAN COST OF COMMODIF\*[FU 1]YING FRESH W\*[BU 4]A\*[BU 5]TER +</span> +moves the letter Y in “COMMODIFYING” one kern unit away +from the letter F, and the letter A in “WATER” four +kern units closer to the letter W. Additionally, the letter T in +“WATER” is moved five kern units closer to the letter A. +</p> + +<p> +For backward compatibility, the forms +<br/> +<span class="pre-in-pp"> + \*[BU1]...\*[BU36] Move backward 1...36 <a href="definitions.html#kernunit">kern units</a> + \*[FU1]...\*[FU36] Move forward 1...36 <a href="definitions.html#kernunit">kern units</a> +</span> +also exist (i.e. with no space before the number of kern units desired, +up to a limit of 36). +</p> + +<p id="kernunit"> +The default size of a kern unit is 1/36 of the current point size; +this may be changed by invoking the macro <kbd>.KERN_UNIT</kbd> +with the desired value, which represents a fraction of the current +point size. For example, to change the kern unit to 1/54 of the +current point size, +<br/> +<span class="pre-in-pp"> + .KERN_UNIT 54 +</span> +To restore the kern unit to its default, invoke +<kbd>.KERN_UNIT</kbd> with an argument of <kbd>DEFAULT</kbd>. +</p> + + +<div class="box-notes"> +<h3 id="inlines-docprocessing-kerning" class="docs notes">Notes concerning document processing</h3> +<p style="margin-top: .5em;"> +If you’re using the +<a href="docprocessing.html#docprocessing">document processing macros</a> +and wish to design your own +<a href="headfootpage.html#headfootpage-intro">HEADERS or FOOTERS</a> +using mom’s inline escapes for kerning as part of the left, +centre and/or right strings, or in the strings for +<a href="headfootpage.html#hdrftr-rectoverso">recto</a> +and/or +<a href="headfootpage.html#hdrftr-rectoverso">verso</a> +HEADERS or FOOTERS, or in the strings passed to +<a href="headfootpage.html#headers-and-footers">HEADERS_AND_FOOTERS</a>, +you <i>must</i> use the forms +<kbd><span class="nobr">\E*[BU<n>]</span></kbd> and +<kbd><span class="nobr">\E*[FU<n>]</span></kbd> (i.e. with no space), +and enter the inline beginning with <kbd><span class="nobr">\E*</span></kbd> +rather than just <kbd><span class="nobr">\*</span></kbd>, e.g. +<kbd><span class="nobr">\E*[BU4]</span></kbd>. +</p> + +<p class="tip-bottom"> +<span class="additional-note">Additional note:</span> +Using the <kbd>BU</kbd> or <kbd>FU</kbd> escapes between characters +pairs that are already automatically kerned (see +<a href="typesetting.html#kern">KERN</a>) +disables the automatic kerning and uses the value you give to +<kbd>BU</kbd> or <kbd>FU</kbd> instead. +</p> +</div> + +<!-- -INLINE_HORIZONTAL_MOM- --> + +<h3 id="inline-horizontal-mom" class="docs">Horizontal inline movement</h3> +<p> +Sometimes, you may need to insert a specified amount of white +space into an +<a href="definitions.html#outputline">output line</a>, +or—occasionally—back up to a previous position on an +<a href="definitions.html#inputline">output</a> +line in order to create special typographic effects. +</p> + +<p> +Mom’s inline escapes for these horizontal movements are +<br/> +<span id="bck" class="pre-in-pp"> + \*[BCK <n unit>] Move backward inline the specified number of + <a href="definitions.html#unitofmeasure">units of measure</a>; decimal fractions are allowed. +</span> +and +<span id="fwd" class="pre-in-pp"> + \*[FWD <n unit>] Move forward inline the specified number of + <a href="definitions.html#unitofmeasure">units of measure</a>; decimal fractions are allowed. +</span> +</p> + +<p> +For example, +<br/> +<span class="pre-in-pp"> + 1.\*[FWD 12p]The Free Trade Play-Offs: WalMart 100, Mexico 0 +</span> +puts 12 points of space between <kbd>1.</kbd> and +<kbd>The</kbd>. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +For backward compatibility, the forms +<br/> +<span class="pre-in-pp"> + \*[BP.25]...\*[BP12.75] Move backward .25...12.75 points + \*[FP.25]...\*[FP12.75] Move forward .25...12.75 points +</span> +also exist (i.e. with no space before the digit and points being +the unit of measure, hence no unit of measure required). Both +accept quarter points, so it’s possible to do, +for example, <kbd><span class="nobr">\*[FP.5]</span></kbd> or +<kbd><span class="nobr">\*[BP1.25]</span></kbd> up to a limit of 12.75 points. +</p> +</div> + +<div class="box-notes"> +<h3 id="inlines-docprocessing-horizontal" class="docs notes">Note concerning document processing</h3> +<p style="margin-top: .5em; padding-bottom: .5em;"> +If you’re using the +<a href="docprocessing.html#docprocessing">document processing macros</a> +and wish to design your own +<a href="headfootpage.html#headfootpage-intro">HEADERS or FOOTERS</a> +using mom’s inline escapes for horizontal movements as part of +the left, centre and/or right strings, or in the strings for +<a href="headfootpage.html#hdrftr-rectoverso">recto</a> +and/or +<a href="headfootpage.html#hdrftr-rectoverso">verso</a> +HEADERS or FOOTERS, or in the strings passed to +<a href="headfootpage.html#headers-and-footers">HEADERS_AND_FOOTERS</a>, +you <i>must</i> use the forms +<kbd><span class="nobr">\E*[BP<n>]</span></kbd> and +<kbd><span class="nobr">\E*[FP<n>]</span></kbd> (i.e. with no space), +and enter the inline beginning with <kbd><span class="nobr">\E*</span></kbd> +rather than just <kbd><span class="nobr">\*</span></kbd>, e.g. +<kbd><span class="nobr">\E*[BP.75]</span></kbd>. You may, in such cases, prefer +to use the native groff inline escape +<a href="#inline-horizontal-groff"><kbd>\h</kbd></a>. +</p> +</div> + +<!-- -INLINE_VERTICAL_MOM- --> + +<h3 id="inline-vertical-mom" class="docs">Vertical inline movement</h3> +<p> +If you need to move portions of type up or down on a line, mom +provides the following inline escapes: +<br/> +<span id="down" class="pre-in-pp"> + \*[DOWN <n unit>] Move down inline the specified number of + <a href="definitions.html#unitofmeasure">units of measure</a> + + <span id="up">\*[UP <n unit>] Move up inline the specified number of + <a href="definitions.html#unitofmeasure">units of measure</a></span> +</span> +For example, +<br/> +<span class="pre-in-pp"> + Tel: 905\*[UP 1p]-\*[DOWN 1p]4072 +</span> +moves the hyphen in the telephone number up by 1 point, then +moves back down by the same amount. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +<kbd><span class="nobr">\*[UP]</span></kbd> and +<kbd><span class="nobr">\*[DOWN]</span></kbd> +do not work in conjunction with the inline escape, +<a href="#inline-rule-mom"><kbd><span class="nobr">\*[RULE]</span></kbd></a>. +</p> + +<p> +<span class="additional-note">Additional note:</span> +For backward compatibility, the following are also available: +<br/> +<span class="pre-in-pp"> + \*[ALD.25]...\*[ALD12.75] Advance lead .25...12.75 points (move downward) + \*[RLD.25]...\*[RLD12.75] Reverse lead .25...12.75 points (move upward) +</span> +</p> + +<p class="tip-bottom"> +Both <kbd><span class="nobr">\*[ALD]</span></kbd> and +<kbd><span class="nobr">\*[RLD]</span></kbd> work in points, hence you +mustn’t use a unit of measure. +</p> +</div> + +<div class="box-notes"> +<h3 id="inline-docprocessing-vertical" class="docs notes">Note concerning document processing</h3> +<p style="margin-top: .5em; padding-bottom: .5em;"> +If you’re using the +<a href="docprocessing.html#docprocessing">document processing macros</a> +and wish to design your own +<a href="headfootpage.html#headfootpage-intro">HEADERS or FOOTERS</a> +using mom’s inline escapes for vertical movements as part of +the left, centre and/or right strings, or in the strings for +<a href="headfootpage.html#hdrftr-rectoverso">recto</a> +and/or +<a href="headfootpage.html#hdrftr-rectoverso">verso</a> +HEADERS or FOOTERS, or in the strings passed to +<a href="headfootpage.html#headers-and-footers">HEADERS_AND_FOOTERS</a>, +you <i>must</i> use the forms +<kbd><span class="nobr">\E*[ALD<n>]</span></kbd> and +<kbd>\E*[RLD<n>]</kbd> (i.e. with no space), and enter the +inline beginning with <kbd><span class="nobr">\E*</span></kbd> rather than just +<kbd><span class="nobr">\*</span></kbd>, +e.g. <kbd><span class="nobr">\E*[ALD.5]</span></kbd>. +You may, in such cases, prefer to use the native groff inline +escape +<a href="#inline-vertical-groff"><kbd>\v</kbd></a>. + +</p> +</div> + +<!-- -INLINE_B_MOM- --> + +<h3 id="inline-b-mom" class="docs">Terminate a line without advancing on the page</h3> +<p> +Sometimes, you want mom to break a line but not advance on the page. +This can be accomplished with the macro +<a href="typesetting.html#el">EL</a> +or with the escape <kbd><span class="nobr">\*[B]</span></kbd>. Simply attach +<kbd><span class="nobr">\*[B]</span></kbd> to the end of any input line. Using +the example given in the document entry for EL, you’d use +<kbd><span class="nobr">\*[B]</span></kbd> like this: +<br/> +<span class="pre-in-pp"> + .LEFT + .LS 12.5 + A line of text.\*[B] + .ALD 24p + The next line of text. +</span> + +<kbd>\*[B]</kbd> works reliably regardless of the current +<a href="definitions.html#filled">fill mode</a>. +</p> + +<!-- -INLINE_TB+_MOM- --> + +<h3 id="tb-plus-mom" class="docs">Call the next sequential tab without advancing on the page</h3> +<p> +Sometimes, you want mom to move to the next tab in sequence (e.g. +from TAB 1 to TAB 2, or TAB 8 to TAB 9) without mom advancing on the +page. (See the NOTE +<a href="typesetting.html#note-tn">here</a> +if you’re not clear how mom manages tabs and linebreaks.) To +do so, simply attach the escape <kbd><span class="nobr">\*[TB+]</span></kbd> to +the end of the input line in previous tab, like this: +<br/> +<span class="pre-in-pp"> + .TAB 1 + Some text\*[TB+] \" In tab 1 + Some more text \" In tab 2, same baseline. +</span> + +<kbd><span class="nobr">\*[TB+]</span></kbd> works reliably regardless of the +current +<a href="definitions.html#filled">fill mode</a>. +</p> + +<!-- -INLINE_RULE_MOM- --> + +<h3 id="inline-rule-mom" class="docs">Full measure rules</h3> +<p> +I find I often need rules drawn to the full measure of the +current line or tab length. The official way to do this is +<kbd><span class="nobr">\l'\n[.l]u'</span></kbd>, which is annoying to type, +and doesn’t mean a whole heck of a lot if you’re new +to groff. The inline, <kbd><span class="nobr">\*[RULE]</span></kbd>, is a +simple replacement for <kbd><span class="nobr">\l'\n[.l]u'</span></kbd>. Use it +whenever you need a rule drawn to the full measure of the current +line or tab length, for example: +<br/> +<span class="pre-in-pp"> + .LL 6P + \*[RULE] +</span> + +The above draws a rule the full measure of the 6-pica line length. +For another way to draw full measure rules, see the macro +<a href="graphical.html#drh">DRH</a>. +</p> + +<p> +<kbd>\*[RULE]</kbd> must appear on an +<a href="definitions.html#inputline">input line</a> +by itself, and always causes a break when entered after a normal +input line of text. It does not, however, deposit a break when used +immediately after a macro. +</p> + +<p> +The weight of the rule drawn with <kbd><span class="nobr">\*[RULE]</span></kbd> +is controlled with the macro +<a href="#rule-weight">RULE_WEIGHT</a>. +Mom’s default is 1/2 point. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +<kbd><span class="nobr">\*[RULE]</span></kbd> draws the rule to the full measure, +hence it cannot be used to fill the remainder of a partial line with +a rule in this way: +<br/> +<span class="pre-in-pp"> + Signature__________________________________________ +</span> +If you wish to accomplish this effect, you have to use +<kbd>\*[RULE]</kbd> in conjunction with the +<a href="goodies.html#pad">PAD</a> +macro and +<a href="typesetting.html#string-tabs">string tabs</a>. +(See the +<a href="goodies.html#pad-example">example</a> +provided with PAD.) +<a name="RULE_EXCEPTION"></a> +</p> + +<p> +Please also note that the inline escapes +<a href="#up"><kbd><span class="nobr">\*[UP]</span></kbd></a> +and +<a href="#down"><kbd>\*[DOWN]</kbd></a> +cannot be used in conjunction with <kbd><span class="nobr">\*[RULE]</span></kbd>. +</p> + +<p> +This <i>doesn’t</i> work: +<br/> +<span class="pre-in-pp"> + \*[DOWN 2p]\*[RULE]\*[UP 2p] +</span> +whereas this does: +<br/> +<span class="pre-in-pp"> + .ALD 2p + \*[RULE] + .RLD 2p +</span> +</p> + +<p class="tip-bottom"> +See groff’s +<a href="#inline-linedrawing-groff">Horizontal line drawing function</a> +for more information on drawing horizontal rules. +</p> +</div> + +<!-- -RULE_WEIGHT- --> + +<div id="rule-weight" class="box-macro-args"> +Macro: <b>RULE_WEIGHT</b> <kbd><weight in points></kbd> +</div> + +<p class="requires"> +• Must <span class="normal">not</span> have a +<a href="definitions.html#unitofmeasure">unit of measure</a> +appended. +<br/> + Argument must be greater than 0 and less than 100; decimal +fractions are allowed. +</p> + +<p> +RULE_WEIGHT allows you to tell mom how heavy (in other words, how +“thick”) you want the rules drawn with the inline +escape, +<a href="#inline-rule-mom"><kbd><span class="nobr">\*[RULE]</span></kbd></a>. +It takes a single argument: the weight of the rule in +<a href="definitions.html#picaspoints">points</a> +<i>but without the</i> +<a href="definitions.html#unitofmeasure">unit of measure</a> +<kbd>p</kbd> <i>attached</i>. Thus, to set the weight of rules +drawn with <kbd><span class="nobr">\*[RULE]</span></kbd> to 1-1/4 points, +you’d do +<br/> +<span class="pre-in-pp"> + .RULE_WEIGHT 1.25 +</span> +</p> + +<p> +RULE_WEIGHT also sets the weight of rules drawn +with +<a href="graphical.html#drh"><kbd>.DRH</kbd></a> +when DRH is not given any arguments. +</p> + +<div class="rule-medium"><hr/></div> + +<!-- -INLINE_FONT_GROFF- --> + +<h2 id="inlines-groff-top" class="macro-group">Commonly-used groff inline escapes</h2> + +<h3 id="inline-fonts-groff" class="docs">Font control (<kbd style="text-transform: none">\f</kbd>)</h3> + +<p> +Groff’s basic mechanism for inline font control is the escape +<kbd>\f[<font>]</kbd>. +<br/> +<span class="pre-in-pp"> + \f[R] Change to the medium roman font (equivalent to mom's \*[ROM]) + \f[I] Change to the medium italic font (equivalent to mom's \*[IT]) + \f[B] Change to the bold roman font (equivalent to mom's \*[BD]) + \f[BI] Change to the bold italic font (equivalent to mom's \*[BDI]) + \f[P] Revert to the previous font (equivalent to mom's \*[PREV]) +</span> +</p> + +<p> +<kbd>\f[<font>]</kbd> can be used with any valid +<a href="definitions.html#font">font style</a> +registered with groff. (See +<a href="appendices.html#style-extensions">here</a> +for a list of pre-registered font styles provided by mom). +</p> + +<p> +<kbd>\f[<family><font>]</kbd> can also take a complete valid +family+font name combo. This is especially useful should you +need to change both family and font inline. For example, if your +prevailing family and font are Times Roman and you want a few words +in Courier Bold Italic, you could do this: +<br/> +<span class="pre-in-pp"> + .FAM T + .FT R + The command \f[CBI]ls -l\f[P] gives a "long" directory listing. +</span> +The Unix command <kbd>ls -l</kbd> will appear in Courier Bold Italic +in a line that is otherwise in Times Roman. +</p> + +<!-- -INLINE_HORIZONTAL_GROFF- --> + +<h3 id="inline-horizontal-groff" class="docs">Inline horizontal motions (<kbd style="text-transform: none;">\h</kbd>)</h3> + +<p> +Whenever you need to move forward or backward on a line, use the +inline +<br/> +<span class="pre-in-pp"> + \h'<distance>' +</span> +In order to avoid unpleasant surprises, always append a +<a href="definitions.html#unitofmeasure">unit of measure</a> +to <kbd><distance></kbd>. For example, +<br/> +<span class="pre-in-pp"> + \h'1.25i' +</span> +moves you 1.25 inches to the right (forward) of the horizontal +position on the current +<a href="definitions.html#outputline">output line</a>. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +<kbd>\h'<distance>'</kbd> is exactly equivalent to a +<a href="#fwd"><kbd><span class="nobr">\*[FWD n<unit>]</span></kbd></a>. +</p> +</div> + +<p> +To move backwards by the same amount, do +<br/> +<span class="pre-in-pp"> + \h'-1.25i' +</span> +</p> + +<div class="box-tip"> +<p class="tip" style="margin-top: -1em;"> +<span class="note">Note:</span> +<kbd>\h'-<distance>'</kbd> is exactly equivalent to +<a href="#bck"><kbd><span class="nobr">\*[BCK n<unit>]</span></kbd></a>. +</p> +</div> + +<!-- -INLINE_VERTICAL_GROFF- --> + +<h3 id="inline-vertical-groff" class="docs">Inline vertical motions (<kbd style="text-transform: none;">\v</kbd>)</h3> + +<p> +If you need to raise or lower type on a line (say, for sub- or +superscripts, or any other special effect), use +<br/> +<span class="pre-in-pp"> + \v'<distance>' +</span> +In order to avoid unpleasant surprises, always append a +<a href="definitions.html#unitofmeasure">unit of measure</a> +to <kbd><distance></kbd>. For example, +<br/> +<span class="pre-in-pp"> + \v'.6m' +</span> +moves you (approx.) 2/3 of an +<a href="definitions.html#em">em</a> +downward on the current +<a href="definitions.html#outputline">output line</a>. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +<kbd>\v'<distance>'</kbd> is exactly equivalent to +<a href="#down"><kbd><span class="nobr">\*[DOWN n<unit>]</span></kbd></a>. +</p> +</div> + +<p style="margin-top: -.5em;"> +To move upward an equivalent amount, do +<br/> +<span class="pre-in-pp"> + \v'-.6m' +</span> +</p> + +<div class="box-tip" style="margin-top: -1em;"> +<p class="tip"> +<span class="note">Note:</span> +<kbd>\v'<-distance>'</kbd> is exactly equivalent to +<a href="#up"><kbd><span class="nobr">\*[UP n<unit>]</span></kbd></a>. +</p> +</div> + +<div class="box-important"> +<p class="tip"> +<span class="important">Important:</span> +The vertical motion of <kbd>\v</kbd> only affects type on the +current +<a href="definitions.html#outputline">output line</a>. +When groff breaks the output line, the effect of +<kbd>\v</kbd> is cancelled; the baseline of the next output line +is where it would be if you hadn’t used <kbd>\v</kbd>. +</p> +</div> + +<div class="box-tip"> +<p class="tip"> +<span class="tip">Tip:</span> +When using <kbd>\v</kbd> for occasional effects in a line, +don’t forget to reverse it when you’ve done what you +want to do. Otherwise, the remaining type will be set too high (if +you used <kbd>\v</kbd> with the minus sign) or too low (if you used +<kbd>\v</kbd> without the minus sign). +</p> +</div> + +<!-- -INLINE_STRINGWIDTH_GROFF- --> + +<h3 id="inline-stringwidth-groff" class="docs">String width function (<kbd style="text-transform: none;">\w</kbd>)</h3> + +<p> +In the context of mom, the string width inline +<kbd>\w'<string>'</kbd> primarily serves to let you establish the +horizontal measure of something (e.g. indents) based on the length +of a bit of text. For example, if you want a left indent the length +of the word “Examples:” plus a space, you can set it with +the <kbd>\w</kbd> inline escape: +<br/> +<span class="pre-in-pp"> + .IL "\w'Examples: '" +</span> +</p> + +<div class="box-tip" style="margin-top: -1em;"> +<p class="tip"> +<span class="note">Note:</span> +Whenever you pass <kbd>\w'string'</kbd> +to a macro that normally requires a +<a href="definitions.html#unitofmeasure">unit of measure</a>, +<i>do NOT add a unit of measure to the</i> +<kbd>\w'string'</kbd> <i>argument.</i> +</p> + +<p class="tip-bottom"> +Furthermore, if the <kbd>\w</kbd> is used in place of a +<a href="definitions.html#numericargument">numeric argument</a> +to a macro and <kbd>string</kbd> is composed of several words +separated by spaces, you must surround the whole escape with double +quotes, as in the example above. +</p> +</div> + +<!-- -INLINE_LINEDRAWING_GROFF- --> + +<h3 id="inline-linedrawing-groff" class="docs">Horizontal line drawing function (<kbd style="text-transform: none;">\l</kbd>)</h3> + +<p> +The <kbd>\l'distance'</kbd> inline allows you to draw a horizontal +rule of the specified distance. You must supply a +<a href="definitions.html#unitofmeasure">unit of measure</a>. +Therefore, to set a 3-pica rule into a line of text, you’d do +<br/> +<span class="pre-in-pp"> + A line of text with a superfluous \l'3P' 3-pica rule in it. +</span> +<kbd>\l'3P'</kbd>, above, not only draws the rule, but advances 3 +picas horizontally as well, just as you’d expect. +</p> + +<p> +For an easy way of drawing rules to the full measure of the current +line or tab length, see +<a href="#inline-rule-mom">Full measure rules</a>. +</p> + +<p> +The weight (thickness) of rules varies according to the point +size in effect when you invoke <kbd>\l</kbd>, but you can’t fix +the weight with any real precision. A point size of 12 produces +a tastefully moderate rule weight of between one-half and one +point (depending on your printer). +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Besides <kbd>\l</kbd>, <b>groff</b> provides a number of more +sophisticated “drawing” escapes. It is well beyond +the scope of this documentation to demonstrate their usage; see +<br/> +<span class="pre-in-pp"> + info groff \\D +</span> +for directions concerning their use. The drawing escapes can be a +bit unwieldy, so mom provides “user-friendly” macros for +the +<a href="graphical.html#top">graphical objects</a> +most commonly encountered in typesetting: horizontal and vertical +rules, boxes, and circles (ellipses). +</p> + +<p class="tip-bottom"> +Additionally, groff comes with two “preprocessors” that +let you create ruled tables and vector diagrams (line drawings): +<b>tbl</b> and <b>pic</b>. The documentation for <b>tbl</b> can be +downloaded from +<br/> + <a style="display: inline-block; margin-left: 2em; margin-top: .5em; margin-bottom: .5em" href="http://cm.bell-labs.com/cm/cs/doc/76/tbl.ps.gz">http://cm.bell-labs.com/cm/cs/doc/76/tbl.ps.gz</a> +<br/> +and <b>pic</b> from +<br/> + <a style="display: inline-block; margin-left: 2em; margin-top: .5em; margin-bottom: .5em" href="http://www.kohala.com/start/troff/gpic.raymond.ps">http://www.kohala.com/start/troff/gpic.raymond.ps</a> +<br/> +Both are powerful tools, but they can be nasty to learn—at +first, anyway. You may prefer to use a vector drawing program +to create diagrams and tables; inserting the results into a +document is easy enough with +<a href="images.html#pdf-image">PDF_IMAGE</a> +or +<a href="images.html#pspic">PSPIC</a>. +</p> +</div> + +<!-- -INLINE_CHARACTERS_GROFF- --> + +<h3 id="inline-characters-groff" class="docs">Special characters and symbols</h3> +<p> +Here follows a short list of commonly-used special characters +available via inline escapes. If you’re not sure of the +meaning of some of these characters, consult the +<a href="definitions.html#top">Definitions of Terms</a>. +</p> + +<p> +For a complete list of special characters and glyphs (i.e. just +about anything you’d ever want to appear on the printed +page, including mathematical symbols, accented characters, unusual +ligatures and letters unique to various European languages), consult +<kbd>man groff_char</kbd>. +</p> + +<span class="pre"> + CHARACTER ESCAPE SEQUENCE + --------- --------------- + Comment line \# or .\" + Fixed-width space \<space> + Unbreakable space \~ + Digit-width (figure) space \0 + Zero-width character \& + Discretionary hyphen \% + Backslash \\ or \e + Plus/minus (arithmetic) \[+-] + Subtract (arithmetic) \[mi] + Multiply (arithmetic) \[mu] + Divide (arithmetic) \[di] + Em-dash \[em] + En-dash \[en] + Left double-quote \[lq] + Right double-quote \[rq] + Open (left) single-quote \[oq] + Close (right) single-quote \[cq] + Bullet \[bu] + Ballot box \[sq] + One-quarter \[14] + One-half \[12] + Three-quarters \[34] + Degree sign \[de] + Dagger \[dg] + Foot mark \[fm] + Cent sign \[ct] + Registered trademark \[rg] + Copyright \[co] + Section symbol \[se] +</span> +<br/> + +<div class="rule-long"><hr/></div> + +<!-- Navigation links --> +<table style="width: 100%; margin-top: 12px;"> +<tr> + <td style="width: 33%;"><a href="toc.html">Back to Table of Contents</a></td> + <td style="width: 33%; text-align: center;"><a href="#top">Top</a></td> + <td style="width: 33%; text-align: right;"><a href="color.html#top">Next: Coloured text</a></td> +</tr> +</table> + +</div> + +<div class="bottom-spacer"><br/></div> + +</body> +</html> diff --git a/contrib/mom/momdoc/intro.html b/contrib/mom/momdoc/intro.html new file mode 100644 index 0000000..3e25631 --- /dev/null +++ b/contrib/mom/momdoc/intro.html @@ -0,0 +1,487 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004-2020 Free Software Foundation, Inc. +Written by Peter Schaffter (peter@schaffter.ca). + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"/> + <title>What is mom?</title> + <link rel="stylesheet" type="text/css" href="stylesheet.css" /> +</head> + +<body style="background-color: #f5faff;"> + +<!-- ==================================================================== --> + +<div id="top" class="page"> + +<!-- Navigation links --> +<table style="width: 100%;"> + <tr> + <td><a href="toc.html">Back to Table of Contents</a></td> + <td style="text-align: right;"><a href="definitions.html#top">Next: Definitions</a></td> + </tr> + </table> + +<h1 id="intro" class="docs">What is mom?</h1> + +<div style="text-align: center;"> +<ul class="no-enumerator" style="margin-left: -2.5em;"> + <li ><a href="#intro-intro">Who is mom meant for?</a></li> + <li ><a href="#intro-typesetting">Typesetting with mom</a></li> + <li ><a href="#intro-docprocessing">Document processing with mom</a></li> + <li ><a href="#intro-philosophy">Mom’s philosophy</a></li> + <li ><a href="#intro-documentation">A note on mom’s documentation</a></li> + <li ><a href="#canonical">Canonical reference materials</a></li> + <li ><a href="#macro-args">How to read macro arguments</a></li> +</ul> +</div> + +<div class="rule-short" style="margin-top: 18px;"><hr/></div> + +<h2 id="intro-intro" class="docs">Who is mom meant for?</h2> + +<p> +Mom (“my own macros”, “my other macros”, +“maximum overdrive macros”...) is a macro set for groff, +designed to format documents in Portable Document Format (.pdf) and +PostScript (.ps). She’s aimed at three kinds of users: +</p> + +<ol style="margin-top: -.5em; margin-bottom: -.5em;"> + <li>Typesetters who suspect groff might be the right + tool for the job but who are frustrated, + intimidated, or puzzled by groff’s terse, + not-always-typographically-intuitive + <a href="definitions.html#primitives">primitives</a>; + </li> + <li>Writers who need to format their work easily, with a + minimum of clutter; + </li> + <li>Newcomers to groff, typesetting, or document processing + who need a well-documented macro set to get them started. + </li> +</ol> + +<p> +Mom is actually two macro packages in one: a very complete set +of typesetting macros, and an equally thorough set of document +formatting macros. The typesetting macros afford fine-grained +control over all visible aspects of page layout and design (margins, +fonts, sizes, kerning, etc), while the document formatting macros +focus on the logical structure of a document (titles, headings, +paragraphs, lists, etc) and call on groff to render logical +structure into pleasing type. +</p> + +<h2 id="intro-typesetting" class="docs">Typesetting with mom</h2> + +<p> +Mom’s typesetting macros control the basic parameters +of type: margins, line lengths, type family, font, point size, +linespacing, and so on. In addition, they allow you to move +around on the page horizontally and vertically, and to set up +tabs, indents, and columns. Finally, they let you adjust such +typographic details as justification style, letter spacing, word +spacing, hyphenation, and kerning. +</p> + +<p> +The typesetting macros also provide the means to create horizontal +and vertical rules, rectangles (boxes, frames), and ellipses +(circles). +</p> + +<p> +In terms of typographic control, the typesetting macros provide +access to groff’s primitives in a way that’s consistent, +sensible, and easy to use. With them, you can create individual +pages designed from the ground up. Provided you have not signalled +to mom that you want document processing (via the +<a href="docprocessing.html#start">START</a> +macro; see below), every typesetting macro is a literal command +that remains in effect until you modify it or turn it off. This +means that if you want to create flyers, surveys, tabulated forms, +curricula vitae and so on, you may do so in the good old-fashioned +way: one step at a time with complete control over every element on +the page. +</p> + +<p> +Years of experience have convinced me that no program can ever +replace the human eye and human input when it comes to high quality +typesetting. Words and punctuation on the printed page are too +variable, too fluid, to be rendered flawlessly by any algorithm, +no matter how clever. +</p> + +<p> +Mom, therefore, does not try to guess solutions for issues like +hanging punctuation, or left-margin adjustments for troublesome +letters like T, V and W. Rather, she provides tools that allow +knowledgeable typesetters to handle these typographic challenges in +ways that are easier and more intuitive than manipulating groff at +the primitive level. +</p> + +<h2 id="intro-docprocessing" class="docs">Document processing with mom</h2> + +<p> +Mom’s document processing macros let you format documents +without having to worry about the typographic details. In this +respect, mom is similar to other groff macro packages, as well as +to html and LaTeX. Where mom differs is in the degree of control +you have over the look and placement of the various elements of a +document. For example, if you’d like your headings underlined, +or in caps, or centred rather than flush left, you can make the +changes easily and have them apply to the whole document. Temporary +and one-off changes are easy, too. +</p> + +<p> +Mom has some features other macro sets don’t provide. For +example, you can switch between draft-style and final-copy output. +If you regularly make submissions to publishers and editors who +insist on "typewritten, double-spaced," there’s a special +macro— +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPEWRITE</kbd></a>— +that changes typeset documents into ones that would make an +old-school typing teacher proud. Footnotes, endnotes, tables of +contents, multiple columns, nested lists, recto/verso printing and +user designable headers and footers are also part of the fun. +</p> + +<h2 id="intro-philosophy" class="docs">Mom’s philosophy</h2> + +<p> +Formatting documents should be easy, from soup to nuts. Writers +need to focus on what they’re writing, not on how it looks. +From the moment you fire up an editor to the moment you add +"FINIS" to your opus, nothing should interfere with the flow of +your words. The commands needed to format your work should be +easy to remember, comprehensible, and stand out well from the +text. There shouldn’t be too much clutter. Your documents +should be as readable inside a text editor as they are on the +printed page. +</p> + +<p> +Unfortunately, in computerland, “easy,” +“comprehensible,” and “readable” often +mean “you’re stuck with what you get.” No +document formatting system can give you exactly what you want all +the time, every time. Documents always need to be tweaked, either +to satisfy a typographic whim or to clarify some aspect of their +content. +</p> + +<p> +Groff has traditionally solved the problem of formatting vs. +tweaking by requiring users of the common macro packages (mm, ms, +me and their offspring) to resort to groff +<a href="definitions.html#primitives">primitives</a> +and +<a href="definitions.html#inlines">inline escapes</a> +for their special typesetting needs. Not to put too fine a point +on it, groff primitives tend toward the abstruse, and most inline +escapes are about as readable as an encrypted password. This does +not make for happy-camper writers, who either find themselves stuck +with a formatting style they don’t like, or are forced to +learn groff from the ground up—a daunting task, to say the +least. +</p> + +<p> +Mom aims to make creating documents a simple matter, but with no +corresponding loss of user control. The document processing macros +provide an initial set of reasonable defaults, but anything that +is not to your liking can be changed. In combination with the +typesetting macros, you have all the tools you need to massage +passages and tweak pages until they look utterly professional. +</p> + +<p> +One rarely hears the term “user interface” in +conjunction with document processing. Since formatting takes +place inside a text editor, little thought is given to the +look and feel of the formatting commands. Mom attempts to +rectify this by providing users with a consistent, readable +“coding” style. Most of the macros (especially in +the document processing set) have humanly-readable names. Not +only does this speed up learning the macros, it makes the sense +of what’s going on in a document easier to decipher, +typographically and structurally. +</p> + +<p> +Mom does not try to be all things to all people. In contrast to +the normal groff philosophy, she does not try to produce output +that looks good no matter where it’s displayed. She’s +designed for primarily for PDF or PostScript output, although +with +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPEWRITE</kbd></a> +she produces acceptable terminal copy. No attempt is made to be +compatible with older versions of troff. +</p> + +<p> +One special feature in mom’s design is the attention she pays +to aligning the bottom margins of every page. Nothing screams +shoddy in typeset documents louder than bottom margins that +wander, or, in typesetter jargon, “hang.” There are, +of course, situations where whitespace at the bottom of a page +may be unavoidable (for example, you wouldn’t want a head +to appear at the bottom of the page without some text underneath +it), but in all cases where hanging bottom margins can be avoided, +mom does avoid them, by clever adjustments to leading (“line +spacing”) and the spacing between different elements on the +page. +</p> + +<h2 id="intro-documentation" class="docs">A note on mom’s documentation</h2> + +<p> +Writing documentation is tough, no doubt about it. One is never +quite sure of the user’s level of expertise. Is s/he new to +the application, new to its underlying protocols and programs, new +to the operating system? At some point, one has to decide for whom +the documentation is intended. Making the wrong choice can mean the +difference between a program that gets used and a program that gets +tossed. +</p> + +<p> +Mom’s documentation assumes users know their way around +their own operating system (basic file management, how to use +the command line, how to use a text editor, etc). I run GNU/Linux, +and while the documentation may exhibit a GNU/Linux bias, mom +and groff can, in fact, be run on other platforms. +</p> + +<p> +The documentation further assumes users at least know what groff +is, even if they don’t know much about it. Lastly, +it assumes that everyone—groff newbies and experts +alike—learns faster from a few well-placed examples than +from manpage-style reference docs. What mom’s documentation +doesn’t assume is that you know everything—not about +groff, not about typesetting, not about document processing. Even +experts have odd lacunae in their knowledge base. Therefore, +whenever I suspect that a term or procedure will cause head +scratching, I offer an explanation. And when explanations +aren’t enough, I offer examples. +</p> + +<h3 id="canonical" class="docs">Canonical reference materials</h3> + +<p> +The canonical reference materials for groff are +<strong>cstr54</strong> (a downloadable PostScript copy of which +is available +<a href="http://www.kohala.com/start/troff/cstr54.ps">here</a>) +and the <strong>troff</strong> and <strong>groff_diff</strong> +manpages. The most complete and up-to-date source of information is +the groff info pages, available by typing <kbd>info groff</kbd> at +the command line (assuming you have the TeXinfo standalone browser +installed on your system, which is standard for most GNU/Linux +distributions). And for inputting special characters, see <kbd>man +groff_char</kbd>. +</p> + +<p style="margin-top: 24px;"> +I’ve tried to avoid reiterating the information contained +in these documents; however, in a few places, this has proved +impossible. But be forewarned: I have no qualms about +sidestepping excruciating completeness concerning groff usage; +I’m more interested in getting mom users up and running. +<i>Mea culpa.</i> +</p> + +<p> +Groff has ancillary programmes (pre-processors) for generating +tables (<strong>tbl</strong>), diagrams (<strong>pic</strong>), and +equations (<strong>eqn</strong>), which may be used in conjunction +with mom. The manuals describing their usage are found at: +<br/> +<span style="display:block; margin-top: .5em"> +<kbd> tbl</kbd> <a href="http://www.kohala.com/start/troff/v7man/tbl/tbl.ps">http://www.kohala.com/start/troff/v7man/tbl/tbl.ps</a> +<br/> +<kbd> pic</kbd> <a href="http://www.kohala.com/start/troff/gpic.raymond.ps">http://www.kohala.com/start/troff/gpic.raymond.ps</a> +<br/> +<kbd> eqn</kbd> <a href="http://www.kohala.com/start/troff/v7man/eqn/eqn2e.ps">http://www.kohala.com/start/troff/v7man/eqn/eqn2e.ps</a> +</span> +</p> + +<div class="box-tip"> +<p class="tip-top" style="padding-bottom: 9px;"> +<b>Note:</b> Mom’s macro file (om.tmac) is heavily +commented. Each macro is preceded by a description of its +arguments, function and usage, which may give you information in +addition to what’s contained in this documentation. +</p> +</div> + +<div class="rule-short" style="padding-top: 6px; padding-bottom: 3px;"><hr/></div> + +<h2 id="macro-args" class="docs">How to read macro arguments</h2> + +<p> +The concise descriptions of macros in this documentation typically +look like this: +</p> + +<div class="box-macro-args"> +Macro: <b>MACRO_NAME</b> <kbd class="macro-args">arguments</kbd> +</div> + +<p> +<kbd>arguments</kbd> lists the macro’s +arguments using conventions that should be familiar to anyone who +has ever read a manpage. Briefly: +</p> + +<ol> + <li>Macro arguments are separated from each other by spaces.</li> + <li>If an argument is surrounded by chevrons + (<kbd>< ></kbd>), it’s a description + of the argument, not the argument itself. + </li> + <li>If an argument begins with or is surrounded by double-quotes, the + double quotes must be included in the argument. + </li> + <li>If the user has a choice between several arguments, each of the + choices is separated by the pipe character + (<kbd>|</kbd>), which means “or.” + </li> + <li>Arguments that are optional are surrounded by square brackets.</li> + <li><kbd><off></kbd> or <kbd><anything></kbd> in an argument + list means that any argument other than those in the argument + list turns the macro off. + </li> +</ol> + +<h3 id="toggle-macro" class="docs">Toggle macros</h3> + +<p> +Some macros don’t require an argument. They simply start +something. When you need to turn them off, the same macro with +any argument will do the trick. That’s right: <em>any</em> +argument (in caps, lowercase, or a mixture thereof). This permits +choosing whatever works for you: <kbd>OFF</kbd>, <kbd>end</kbd>, +<kbd>Quit</kbd>, <kbd>Q</kbd>, <kbd>X</kbd>, and so on. +</p> + +<p> +Since these macros toggle things on and off, the argument list +simply reads <kbd>toggle</kbd>. +</p> + +<div id="examples" class="examples-container"> +<h2 class="docs" style="margin-top: .5em;">Examples</h2> + +<div class="examples">Example 1: An argument requiring double-quotes</div> + +<div class="box-macro-args" style="max-width: 684px;"> +Macro: <b>TITLE</b> <kbd class="macro-args">"<title of document>"</kbd> +</div> + +<p> +The required argument to TITLE is the title of your document. +Since it’s surrounded by double-quotes, you must include +them in the argument, like this: +<br/> +<span class="pre-in-pp"> + .TITLE "My Pulitzer Novel" +</span> +</p> + +<div class="examples" style="margin-top: -1em;">Example 2: A macro with required and optional arguments</div> + +<div class="box-macro-args" style="width: 684px;"> +Macro: <b>TAB_SET</b> <kbd class="macro-args"><tab number> <indent> <length> [ L | R | C | J [ QUAD ] ] </kbd> +</div> + +<p> +The first required argument is a number that identifies the tab +(say, "3"). The second required argument is an indent from the +left margin (say, 6 picas). The third required argument is the +length of the tab (say, 3 picas). Therefore, at a minimum, when +using this macro, you would enter: +<br/> +<span class="pre-in-pp"> + .TAB_SET 3 6P 3P +</span> +The remaining two arguments are optional. The first is a +single letter, either <kbd>L, R, C</kbd> or +<kbd>J</kbd>. The second, which is itself +optional after <kbd>L, R, C</kbd> or +<kbd>J</kbd>, is the word <kbd>QUAD</kbd>. +Therefore, depending on what additional information you wish to +pass to the macro, you could enter: +<br/> +<span class="pre-in-pp"> + .TAB_SET 3 6P 3P L +</span> +or +<br/> +<span class="pre-in-pp"> + .TAB_SET 3 6P 3P L QUAD +</span> +</p> + +<div id="toggle-example" class="examples" style="margin-top: -1em;">Example 3: A sample toggle macro:</div> + +<div class="box-macro-args" style="max-width: 684px;"> +Macro: <b>QUOTE</b> <kbd class="macro-args">toggle</kbd> +</div> + +<p> +<kbd>QUOTE</kbd> begins a section of quoted text +in a document and doesn’t require an argument. When the +quote’s finished, you have to tell mom it’s done. +<span class="pre"> + .QUOTE + So runs my dream, but what am I? + An infant crying in the night + An infant crying for the light + And with no language but a cry. + .QUOTE OFF +</span> +</p> + +<p> + Alternatively, you could have turned the quote off with + <kbd>END</kbd>, or <kbd>X</kbd>, or something else. + </p> +</div> + +<!-- Navigation links --> +<table style="width: 100%; margin-top: 12px;"> +<tr> + <td style="width: 33%;"><a href="toc.html">Back to Table of Contents</a></td> + <td style="width: 33%; text-align: center;"><a href="#top">Top</a></td> + <td style="width: 33%; text-align: right;"><a href="definitions.html#top">Next: Definitions</a></td> +</tr> +</table> + +</div> + +<div class="bottom-spacer"><br/></div> + +</body> +</html> diff --git a/contrib/mom/momdoc/letters.html b/contrib/mom/momdoc/letters.html new file mode 100644 index 0000000..3021eb2 --- /dev/null +++ b/contrib/mom/momdoc/letters.html @@ -0,0 +1,577 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004-2020 Free Software Foundation, Inc. +Written by Peter Schaffter (peter@schaffter.ca). + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"/> + <title>Mom -- Writing letters</title> + <link rel="stylesheet" type="text/css" href="stylesheet.css" /> +</head> + +<body style="background-color: #f5faff;"> + +<!-- ==================================================================== --> + +<div id="top" class="page"> + +<!-- Navigation links --> +<table style="width: 100%;"> +<tr> + <td><a href="toc.html">Back to Table of Contents</a></td> + <td style="text-align: right;"><a href="macrolist.html#top">Next: Quick reference guide</a></td> +</tr> +</table> + +<h1 class="docs">Writing letters</h1> + +<div style="width: 33%; margin: auto;"> +<ul class="no-enumerator"> + <li><a href="#letters-intro">Introduction</a></li> + <li><a href="#letters-tutorial">Tutorial</a></li> + <li><a href="#letters-defaults">Mom’s default letter style</a></li> + <li><a href="#index-letters-macros">The letter macros</a></li> +</ul> +</div> + +<div class="rule-medium"><hr/></div> + +<h2 id="letters-intro" class="docs">Introduction</h2> + +<p> +Mom’s simple but effective letter-writing macros are a subset +of the +<a href="docprocessing.html#docprocessing">document processing macros</a>, +designed to ease the creation of correspondence. +</p> + +<p> +Because the letter macros are a subset of the document processing +macros, you can use +<a href="definitions.html#controlmacro">control macros</a> +to design correspondence to your own specifications. However, +mom makes no pretence of providing complete design flexibility in +the matter of letters, which are, after all, simple communicative +documents whose only real style requirements are that they be neat +and professional-looking. +</p> + +<div class="examples-container" style="margin-top: 1.5em; margin-bottom: 1.5em;"> +<h3 id="letters-tutorial" class="docs">Tutorial – writing letters</h3> + +<p> +Mom letters begin, like all mom-processed documents, with +<a href="docprocessing.html#reference-macros">reference macros</a> +(in this case, +<a href="docprocessing.html#author">AUTHOR</a>), +a +<a href="docprocessing.html#doctype">DOCTYPE</a> +(LETTER, obviously), the essential +<a href="docprocessing.html#printstyle">PRINTSTYLE</a> +macro, and +<a href="docprocessing.html#start">START</a>, +like this: +<br/> +<span class="pre-in-pp"> + .AUTHOR "Yannick P. Guique" + .DOCTYPE LETTER + .PRINTSTYLE TYPESET + .START +</span> +PRINTSTYLE, above, could also be <kbd>TYPEWRITE</kbd>. Mom has no +objection to creating letters that look like they were typed on an +Underwood by a shapely secretary with 1940s gams. +</p> + +<p> +Please note that if you choose <kbd>PRINTSTYLE TYPEWRITE</kbd>, +there’s no need to give the <kbd>SINGLESPACE</kbd> option, as +this is the unalterable default for letters. +</p> + +<p> +After the START macro, you enter headers pertinent to your letter: +the date, the addressee (in business correspondence, typically both +name and address), the addresser (that’s you; in business +correspondence, typically both name and address), and a greeting +(in full, e.g. “Dear Mr. Smith,” or “Dear +Mr. Smith:”). +</p> + +<p> +The macros for entering the headers are simple (they’re not even +<a href="definitions.html#toggle">toggles</a>): +<br/> +<span class="pre-in-pp"> + .DATE + .TO + .FROM + .GREETING +</span> +You may enter them in any order you like, except for GREETING, which +must come last. Mom ignores any headers you omit and spaces the +letter’s opening according to what you do include. See +<a href="#letters-defaults">Default for letters</a> +to find out how mom formats the headers. +</p> + +<p> +Once you’ve filled in what you need to get a letter started, +simply type the letter, introducing each and every paragraph, +including the first, with the +<a href="docelement.html#pp">PP</a> +macro. +</p> + +<p> +At the end of the letter, should you wish a closing (“Yours +truly,” “Sincerely,” “Hugs and +kisses”), invoke the macro <kbd>.CLOSING</kbd> on a line +by itself, and follow it with the text of the closing. <b>N.B.</b> +Don’t put your name here; mom supplies it automatically from +<a href="docprocessing.html#author">AUTHOR</a>), +with enough space to leave room for your signature. If you omit the +closing, mom simply adds your name (from AUTHOR), again with enough +space for your signature. +</p> + +<p> +Assuming our tutorial letter is for business correspondence, +here’s what the complete letter looks like. +<br/> +<span class="pre-in-pp"> + .AUTHOR "Yannick P. Guique" + .DOCTYPE LETTER + .PRINTSTYLE TYPESET + .START + .DATE + August 25, 2010 + .TO + GUILLAUME BARRIÈRES + Minidoux Corporation + 5000 Pannes Drive + Redmond, Virginia + .FROM + Y.P. GUIQUE + 022 Umask Road + St-Sauveur-en-dehors-de-la-mappe, Québec + .GREETING + Dear Mr. Barrières, + .PP + It has come to my attention that you have once again been + lobbying the US government to prohibit the use of open source + software by endeavouring to outlaw so-called "warranty + free" applications. + .PP + I feel it is my duty to inform you that the success of your + operating system relies heavily on open source programs and + protocols, notably TCP/IP. + .PP + Therefore, in the interests of your corporation’s fiscal health, + I strongly advise that you withdraw support for any US + legislation that would cripple or render illegal open source + development. + .CLOSING + Sincerely, +</span> +This produces a letter with headers that follow the North American +standard for business correspondence. If you’d prefer another style +of correspondence, for example, British, you’d set up the same +letter like this: +<br/> +<span class="pre-in-pp"> + .AUTHOR "Yannick P. Guique" + .DOCTYPE LETTER + .PRINTSTYLE TYPESET + .START + .FROM + .RIGHT + Y.P. GUIQUE + 022 Umask Road + St-Sauveur-en-dehors-de-la-mappe, Québec + .TO + GUILLAUME BARRIÈRES + Minidoux Corporation + 5000 Pannes Drive + Redmond, Virginia + .DATE + .RIGHT + August 25, 2004 + .GREETING + Dear Mr. Barrières, +</span> +Notice the use of <kbd>.RIGHT</kbd> after <kbd>.FROM</kbd> and +<kbd>.DATE</kbd> in this example, used to change the default quad +for these macros. +</p> +</div> + +<h2 id="letters-defaults" class="docs">Default letter style</h2> + +<p> +In letters, if the order of header macros is +</p> +<ol style="margin-top: -.5em;"> + <li><kbd>.DATE</kbd></li> + <li><kbd>.TO</kbd> (the addressee)</li> + <li><kbd>.FROM</kbd> (the addresser)</li> + <li><kbd>.GREETING</kbd> (“Dear Whoever,” “To Whom It May Concern,” etc.)</li> +</ol> +<p style="margin-top: -.5em;"> +mom sets +</p> +<ul style="margin-top: -.5em;"> + <li>the date flush right, page right, at the top of page one, + with a gap of two linespaces underneath + </li> + <li>the addressee (<kbd>.TO</kbd>) in a block flush left, page + left, with a gap of one linespace underneath + </li> + <li>the addresser (<kbd>.FROM</kbd>) in a block flush left, page + left, with a gap of one linespace underneath + </li> + <li>the greeting flush left, with a gap of one linespace + underneath + </li> +</ul> +<p style="margin-top: -.5em;"> +which is the standard for North American business correspondence. +</p> + +<p> +If you switch the order of <kbd>.DATE</kbd>, <kbd>.TO</kbd> and/or +<kbd>.FROM</kbd>, mom sets all the headers +flush left, with a gap of one linespace underneath each. (The +default left quad of any header can be changed by invoking the +<kbd>.RIGHT</kbd> macro, on a line by itself, immediately before +inputting the text of the header.) +</p> + +<p> +Following the headers, mom sets +</p> +<ul style="margin-top: -.5em;"> + <li>the body of the letter justified</li> + <li>in multi-page letters: + <ul style="margin-left: -.5em;"> + <li>a footer indicating there’s a next page (of the form <kbd>.../#</kbd>)</li> + <li>the page number at the top of every page after page one</li> + </ul></li> + <li>the closing/signature lines flush left, indented halfway across the page</li> +</ul> + +<p> +Other important style defaults are listed below, and may be changed +via the +<a href="typesetting.html#top">typesetting macros</a> +or the document processing +<a href="definitions.html#controlmacro">control macros</a> +prior to +<a href="docprocessing.html#start">START</a>. +Assume that any style parameter not listed below is the same as for +any document processed with +<a href="docprocessing.html#typeset-defaults">PRINTSTYLE <kbd>TYPESET</kbd></a> +or +<a href="docprocessing.html#typewrite-defaults">PRINTSTYLE <kbd>TYPEWRITE</kbd></a>. +</p> + +<div class="defaults-container" style="padding-bottom: 8px;"> +<span class="pre defaults"> + PARAMETER PRINTSTYLE TYPESET PRINTSTYLE TYPEWRITE + + Paper size 8.5 x 11 inches 8.5 x 11 inches + Left/right margins 1.125 inches 1.125 inches + Header margin 3.5 picas 3.5 picas + (for page numbers) + Header gap 3 picas 3 picas + (for page numbers) + Family Times Roman Courier + Font roman roman + Point size 12 12 + Line space 13.5 12 (i.e. singlespaced) + Paragraph indent 3 ems 3 picas + Spaced paragraphs yes no + Footers* yes yes + Footer margin 3 picas 3 picas + Footer gap 3 picas 3 picas + Page numbers top, centred top, centred + + *Footers contain a "next page" number of the form .../# +</span> +</div> + +<div class="rule-medium"><hr/></div> + + +<div class="macro-list-container"> +<h3 id="index-letters-macros" class="macro-list">The letter macros</h3> +<p style="margin-left: 9px; margin-top: -1.5em;"> +All letter macros must come after +<a href="docprocessing.html#start">START</a>, +except NO_SUITE, which must come after +<a href="docprocessin.html#start">PRINTSTYLE</a> +and before +<a href="docprocessing.html#start">START</a>. +</p> + +<ul class="macro-list" style="margin-top: -.75em;"> + <li><a href="#date">DATE</a></li> + <li><a href="#to">TO</a></li> + <li><a href="#from">FROM</a></li> + <li><a href="#greeting">GREETING</a></li> + <li><a href="#closing">CLOSING</a> + <ul style="margin-left: -.5em;"> + <li><a href="#closing-indent">CLOSING_INDENT</a></li> + <li><a href="#signature-indent">SIGNATURE_INDENT</a></li> + </ul></li> + <li><a href="#no-suite">NO_SUITE</a> – turn the “next page” footer off</li> +</ul> +</div> + +<!-- -DATE- --> + +<div id="date" class="box-macro-args"> +Macro: <b>DATE</b> +</div> + +<p> +Invoke <kbd>.DATE</kbd> on a line by itself, with the date +underneath, like this: +<br/> +<span class="pre-in-pp"> + .DATE + October 31, 2012 +</span> +If you wish to change the default quad direction for the date, +enter <kbd>.LEFT</kbd> or <kbd>.RIGHT</kbd>, on a line by itself, +immediately after <kbd>.DATE</kbd>. +</p> + +<p> +If you wish to insert additional space between the date and any +letter header that comes after it, do so after inputting the date, +not at the top of the next header macro, like this: +<br/> +<span class="pre-in-pp"> + .DATE + October 31, 2012 + .SPACE \"Or, more simply, .SP +</span> +If you wish to remove the default space, +<br/> +<span class="pre-in-pp"> + .SPACE -1v \"Or, more simply, .SP -1v +</span> +will do the trick. +</p> + +<!-- -TO- --> + +<div id="to" class="box-macro-args"> +Macro: <b>TO</b> +</div> + +<p> +Invoke <kbd>.TO</kbd> on a line by itself, with the name and address +of the addressee underneath, like this: +<br/> +<span class="pre-in-pp"> + .TO + JOHN SMITH + 10 Roberts Crescent + Bramladesh, Ont. +</span> +If you wish to change the default quad direction for the address, +enter <kbd>.LEFT</kbd> or <kbd>.RIGHT</kbd>, on a line by itself, +immediately after <kbd>.TO</kbd>. +</p> + +<p> +If you wish to insert additional space between the address and +any letter header that comes after it, do so after inputting the +address, not at the top of the next header macro, like this: +<br/> +<span class="pre-in-pp"> + .TO + JOHN SMITH + 10 Roberts Crescent + Bramladesh, Ont. + .SPACE \"Or, more simply, .SP +</span> +If you wish to remove the default space, +<br/> +<span class="pre-in-pp"> + .SPACE -1v \"Or, more simply, .SP -1v +</span> +will do the trick. +</p> + +<!-- -FROM- --> + +<div id="from" class="box-macro-args"> +Macro: <b>FROM</b> +</div> + +<p> +Invoke <kbd>.FROM</kbd> on a line by itself, with the name and +address of the addresser underneath, like this: +<br/> +<span class="pre-in-pp"> + .FROM + JOE BLOW + 15 Brunette Road + Ste-Vieille-Andouille, Québec +</span> +If you wish to change the default quad direction for the address, +enter <kbd>.LEFT</kbd> or <kbd>.RIGHT</kbd>, on a line by itself, +immediately after <kbd>.FROM</kbd>. +</p> + +<p> +If you wish to insert additional space between the address and +any letter header that comes after it, do so after inputting the +address, not at the top of the next header macro, like this: +<br/> +<span class="pre-in-pp"> + .FROM + JOE BLOW + 15 Brunette Road + Ste-Vieille-Andouille, Québec + .SPACE \"Or, more simply, .SP +</span> +If you wish to remove the default space, +<br/> +<span class="pre-in-pp"> + .SPACE -1v \"Or, more simply, .SP -1v +</span> +will do the trick. +</p> + +<!-- -GREETING- --> + +<div id="greeting" class="box-macro-args"> +Macro: <b>GREETING</b> +</div> + +<p> +Invoke <kbd>.GREETING</kbd> on a line by itself, with the full +salutation you want for the letter underneath, like this: +<br/> +<span class="pre-in-pp"> + .GREETING + Dear Mr. Smith, +</span> +</p> + +<!-- -CLOSING- --> + +<div id="closing" class="box-macro-args"> +Macro: <b>CLOSING</b> +</div> + +<p> +Invoke <kbd>.CLOSING</kbd> on a line by itself after the body of +the letter, with the closing you’d like (e.g. “Yours +truly,”) underneath, like this: +<br/> +<span class="pre-in-pp"> + .CLOSING + Yours truly, +</span> +</p> + +<div class="box-tip" style="background-color: #E3D2B1;"> +<p class="tip"> +<span class="tip" style="display: inline-block; padding-bottom: .5em; color: #000056;">CLOSING control macros and defaults</span> +<br/> +Two macros control the behaviour of <kbd>.CLOSING</kbd>: +</p> +<ul style="margin-top: -1.25em;"> + <li>CLOSING_INDENT</li> + <li>SIGNATURE_SPACE</li> +</ul> + +<p id="closing-indent" style="margin-top: -.25em;"> +The first, CLOSING_INDENT, indicates the distance from the left +margin you’d like to have your closing indented. It takes a +single +<a href="definitions.html#numericargument">numeric argument</a> +and must have a +<a href="definitions.html#unitofmeasure">unit of measure</a> +appended to it, unless you want an indent of 0 (zero). Mom’s +default is one half the width of the letter’s line length +(i.e. halfway across the page). If you wanted, instead, an indent of +6 +<a href="definitions.html#picaspoints">picas</a>, +you’d do it like this: +<br/> +<span class="pre-in-pp"> + .CLOSING_INDENT 6P +</span> +Or, if you wanted to have no indent at all: +<br/> +<span class="pre-in-pp"> + .CLOSING_INDENT 0 +</span> +</p> + +<p id="signature-space" style="margin-top: -1.25em;"> +The second, SIGNATURE_SPACE, controls how much room to leave for the +signature. It takes a single +<a href="definitions.html#numericargument">numeric argument</a> +and must have a +<a href="definitions.html#unitofmeasure">unit of measure</a> +appended to it. Mom’s default is 3 line spaces, but if you +wanted to change that to, say, 2 line spaces, you’d do: +<br/> +<span class="pre-in-pp"> + .SIGNATURE_SPACE 2v +</span> +</p> +</div> + +<!-- -NO_SUITE- --> + +<div id="no-suite" class="box-macro-args" style="margin-top: 2em;"> +Macro: <b>NO_SUITE</b> +</div> + +<p> +If you don’t want mom to print a “next page” +number at the bottom of multi-page letters, invoke +<kbd>.NO_SUITE</kbd>, on a line by itself, prior to +<a href="docprocessing.html#start">START</a>. +</p> + +<div class="rule-long"><hr/></div> + +<!-- Navigation links --> +<table style="width: 100%; margin-top: 12px;"> +<tr> + <td style="width: 33%;"><a href="toc.html">Back to Table of Contents</a></td> + <td style="width: 33%; text-align: center;"><a href="#top">Top</a></td> + <td style="width: 33%; text-align: right;"><a href="macrolist.html">Next: Quick reference guide</a></td> +</tr> +</table> + +</div> + +<div class="bottom-spacer"><br/></div> + +</body> +</html> diff --git a/contrib/mom/momdoc/macrolist.html b/contrib/mom/momdoc/macrolist.html new file mode 100644 index 0000000..81ebd7c --- /dev/null +++ b/contrib/mom/momdoc/macrolist.html @@ -0,0 +1,1529 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004-2020 Free Software Foundation, Inc. +Written by Peter Schaffter (peter@schaffter.ca). + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"/> + <title>Mom -- Quick reference guide</title> + <link rel="stylesheet" type="text/css" href="stylesheet.css" /> +</head> + +<body style="background-color: #f5faff;"> + +<!-- ==================================================================== --> + +<div id="top" class="page" style="width: 800px"> + +<!-- Navigation links --> +<table style="width: 100%;"> +<tr> + <td><a href="toc.html">Back to Table of Contents</a></td> + <td style="text-align: right;"><a href="appendices.html#top">Next: Appendices</a></td> +</tr> +</table> + +<h1 class="docs">Quick reference guide</h1> + +<p> +Once you know your way around mom, you may find this guide +preferable to using the Table of Contents. It lists mom’s +major user-space macros. The links point to references found +elsewhere in the documentation. +</p> + +<div class="macro-list-container" style="padding-left: 9px; padding-right: 9px; padding-bottom: 9px;"> +<h2 class="docs" style="text-align: center; padding-top: 15px;">Index to the quick reference guide</h2> +<div style="width: 50%; float: left; margin-right: 9px;"> +<h3 class="docs" style="margin-top: 1.25em;">TYPESETTING MACROS</h3> +<ul style="margin-top: .5em; margin-left: 0; padding-left: 0; list-style-type: none;"> + <li><a href="#qr-1">Paper size, margins, line length</a></li> + <li><a href="#qr-2">Family, font, point size</a></li> + <li><a href="#qr-3">Font modifications</a></li> + <li><a href="#qr-4">Linespacing (leading)</a></li> + <li><a href="#qr-5">Justification, quad, breaking lines</a></li> + <li><a href="#qr-6">Hyphenation</a></li> + <li><a href="#qr-7">Word and sentence spacing</a></li> + <li><a href="#qr-8">Kerning, ligatures, smartquotes</a></li> + <li><a href="#qr-9">Horizontal/vertical motions, columns</a></li> + <li><a href="#qr-10">Indents</a></li> + <li><a href="#qr-11">Tabs</a></li> + <li><a href="#qr-12">Underscoring, underlining</a></li> + <li><a href="#qr-13">Superscipts</a></li> + <li><a href="#qr-14">Nested lists</a></li> + <li><a href="#qr-15">Colour</a></li> + <li><a href="#qr-16">Dropcaps</a></li> + <li><a href="#qr-56">Smallcaps</a></li> + <li><a href="#qr-17">Utilities</a></li> + <li><a href="#qr-18">Graphical objects and images</a></li> +</ul> +<h3 class="docs" style="margin-top: -.5em;">DOCUMENT PROCESSING MACROS</h3> +<ul style="margin-top: .5em; margin-left: 0; padding-left: 0; list-style-type: none;"> + <li><a href="#qr-19">Reference macros (metadata)</a></li> + <li><a href="#qr-20">Document type and initial defaults</a></li> + <li><a href="#qr-59"> – Slides</a></li> + <li><a href="#qr-23">TYPEWRITE control macros</a></li> + <li><a href="#qr-57">Vertical whitespace management</a></li> + <li><a href="#qr-47">Document and section cover (title) pages</a></li> + <li><a href="#qr-22">Set documents in columns</a></li> + <li><a href="#qr-21">Line numbering</a></li> + <li><a href="#qr-24">Initiate document processing</a></li> +</ul> +</div> +<ul style="margin-top: 1.75em; margin-left: 0; padding-left: 0; list-style-type: none;"> + <li><a href="#qr-42">Global print style changes after START</a></li> + <li><a href="#qr-43">Managing the docheader</a></li> + <li><a href="#qr-25">Epigraphs</a></li> + <li><a href="#qr-26">Headings</a></li> + <li><a href="#qr-30">Paragraphs</a></li> + <li><a href="#qr-31">Quotes (line for line quotes)</a> </li> + <li><a href="#qr-32">Blockquotes (cited passages of text)</a></li> + <li><a href="#qr-33">Code snippets (inserting bits of programming code)</a></li> + <li><a href="#qr-34">Author linebreaks (section breaks)</a></li> + <li><a href="#qr-35">Document termination string</a></li> + <li><a href="#qr-36">Footnotes</a></li> + <li><a href="#qr-37">Endnotes</a></li> + <li><a href="#qr-38">Margin notes</a></li> + <li><a href="#qr-49">Floats</a></li> + <li><a href="#qr-53">Images and graphics</a></li> + <li><a href="#qr-60">Shaded backgrounds, frames, page colour</a></li> + <li><a href="#qr-51">eqn support</a></li> + <li><a href="#qr-52">pic support</a></li> + <li><a href="#qr-58">grap support</a></li> + <li><a href="#qr-50">tbl support</a></li> + <li><a href="#qr-54">Captions and labels</a></li> + <li><a href="#qr-39">Bibliographic references</a></li> + <li><a href="#qr-40">Tables of contents</a></li> + <li><a href="#qr-55">Lists of Figures, Tables, and Equations</a></li> + <li><a href="#qr-41">Letter (correspondence) macros</a></li> + <li><a href="#qr-44">Managing page headers and footers</a></li> + <li><a href="#qr-45">Recto/verso page headers and footers</a></li> + <li><a href="#qr-46">Pagination</a></li> + <li><a href="#qr-48">Utilities</a></li> +</ul> +</div> + +<h2 class="docs">Quick reference guide</h2> + +<div style="display: inline-block; margin-top: 1em; margin-bottom: .5em; border-bottom: 2px solid #302419;"><kbd>TYPESETTING MACROS</kbd></div> + +<table class="quick-ref"> +<tr> +<th id="qr-1" class="quick-ref" colspan="2"> +<a href="typesetting.html#page-setup-intro">+++ Paper size, margins, line length</a></th> +</tr> +<tr> +<td><a href="typesetting.html#paper">PAPER</a></td><td>-- set common paper sizes (letter, A4, etc)</td> +</tr> +<tr> +<td><a href="typesetting.html#pagewidth">PAGEWIDTH</a></td><td>-- set a custom page width</td> +</tr> +<tr> +<td><a href="typesetting.html#pagelength">PAGELENGTH</a></td><td>-- set a custom page length</td> +</tr> +<tr> +<td><a href="typesetting.html#page">PAGE</a></td><td>-- set explicit page dimensions and margins</td> +</tr> +<tr> +<td><a href="typesetting.html#t-margin">T_MARGIN</a></td><td>-- set a top margin</td> +</tr> +<tr> +<td><a href="typesetting.html#b-margin">B_MARGIN</a></td><td>-- set a bottom margin</td> +</tr> +<tr> +<td><a href="typesetting.html#l-margin">L_MARGIN</a></td><td>-- set a left margin (page offset)</td> +</tr> +<tr> +<td><a href="typesetting.html#r-margin">R_MARGIN</a></td><td>-- set a right margin</td> +</tr> +<tr> +<td><a href="typesetting.html#linelength">LL</a></td><td>-- set a line length</td> +</tr> +</table> + +<table class="quick-ref"> +<tr><th id="qr-2" class="quick-ref" colspan="2"> +<a href="typesetting.html#basic-params-intro">+++ Family, font, point size</a></th></tr> +<tr> +<td><a href="typesetting.html#family">FAMILY</a></td><td>-- set the family of type</td> +</tr> +<tr> +<td><a href="typesetting.html#font">FT</a></td><td>-- set the font style (roman, italic, etc)</td> +</tr> +<tr> +<td><a href="typesetting.html#fallback-font">FALLBACK_FONT</a></td><td>-- establish a fallback font (for missing fonts)</td> +</tr> +<tr> +<td><a href="typesetting.html#ps">PT_SIZE</a></td><td>-- set the point size</td> +</tr> +<tr> +<td><a href="inlines.html#inline-size-mom">\*[SIZE n]</a></td><td>-- change the point size inline</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-3" class="quick-ref" colspan="2"> +<a href="typesetting.html#modifications-intro">+++ Font modifications</a></th> +</tr> +<tr><td style="padding-left: 0;">Pseudo italic</td></tr> +<tr> +<td><a href="typesetting.html#setslant">SETSLANT</a></td><td>-- set the degree of slant</td> +</tr> +<tr> +<td><a href="typesetting.html#slant-inline">\*[SLANT]</a></td><td>-- invoke pseudo italic inline</td> +</tr> +<tr> +<td><a href="typesetting.html#slant-inline">\*[SLANTX]</a></td><td>-- turn off pseudo italic inline</td> +</tr> +<tr><td style="padding-left: 0;">Pseudo bold</td></tr> +<tr> +<td><a href="typesetting.html#setbolder">SETBOLDER</a></td><td>-- set the amount of emboldening</td> +</tr> +<tr> +<td><a href="typesetting.html#bolder-inline">\*[BOLDER]</a></td><td>-- invoke pseudo bold inline</td> +</tr> +<tr> +<td><a href="typesetting.html#bolder-inline">\*[BOLDERX]</a></td><td>-- turn off pseudo bold inline</td> +</tr> +<tr><td style="padding-left: 0;">Pseudo condensed</td></tr> +<tr> +<td><a href="typesetting.html#condense">CONDENSE</a></td><td>-- set the amount to pseudo condense</td> +</tr> +<tr> +<td><a href="typesetting.html#cond-inline">\*[COND]</a></td><td>-- invoke pseudo condensing inline</td> +</tr> +<tr> +<td><a href="typesetting.html#cond-inline">\*[CONDX]</a></td><td>-- turn off pseudo condensing inline</td> +</tr> +<tr><td style="padding-left: 0;">Pseudo extended</td></tr> +<tr> +<td><a href="typesetting.html#extend">EXTEND</a></td><td>-- set the amount to pseudo extend</td> +</tr> +<tr> +<td><a href="typesetting.html#ext-inline">\*[EXT]</a></td><td>-- invoke pseudo extending inline</td> +</tr> +<tr> +<td><a href="typesetting.html#ext-inline">\*[EXTX]</a></td><td>-- turn off pseudo condensing inline</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-4" class="quick-ref" colspan="2"> +<a href="typesetting.html#leading">+++ Linespacing (leading)</a></th> +</tr> +<tr> +<td><a href="typesetting.html#leading">LS</a></td><td>-- set the linespacing (leading)</td> +</tr> +<tr> +<td><a href="typesetting.html#autolead">AUTOLEAD</a></td><td>-- set the linespacing relative to the point size</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-5" class="quick-ref" colspan="2"> +<a href="typesetting.html#justification-intro">+++ Justification, quad, line-by-line setting, breaking lines</a></th> +</tr> +<tr> +<td><a href="typesetting.html#justify">JUSTIFY</a></td><td>-- justify text to both margins</td> +</tr> +<tr> +<td><a href="typesetting.html#quad">QUAD</a></td><td>-- "justify" text left, centre, or right</td> +</tr> +<tr> +<td><a href="typesetting.html#lrc">LEFT</a></td><td>-- set line-by-line quad left</td> +</tr> +<tr> +<td><a href="typesetting.html#lrc">CENTER</a></td><td>-- set line-by-line quad centre</td> +</tr> +<tr> +<td><a href="typesetting.html#lrc">RIGHT</a></td><td>-- set line-by-line quad right</td> +</tr> +<tr> +<td><a href="typesetting.html#br">BR</a></td><td>-- break a justified line</td> +</tr> +<tr> +<td><a href="typesetting.html#spread">SPREAD</a></td><td>-- force justify a line</td> +</tr> +<tr> +<td><a href="typesetting.html#el">EL</a></td><td>-- break a line without advancing on the page</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-6" class="quick-ref" colspan="2"> +<a href="typesetting.html#hy">+++ Hyphenation</a></th> +</tr> +<tr> +<td><a href="typesetting.html#hy">HY</a></td><td>-- automatic hyphenation on/off</td> +</tr> +<tr> +<td><a href="typesetting.html#hy-set">HY_SET</a></td><td>-- set automatic hyphenation parameters</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-7" class="quick-ref" colspan="2"> +<a href="typesetting.html#ws">+++ Word and sentence spacing</a></th> +</tr> +<tr> +<td><a href="typesetting.html#ws">WS</a></td><td>-- set the minimum word space size</td> +</tr> +<tr> +<td><a href="typesetting.html#ss">SS</a></td><td>-- set the sentence space size</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-8" class="quick-ref" colspan="2"> +<a href="typesetting.html#kern">+++ Kerning, ligatures, smartquotes</a></th> +</tr> +<tr> +<td><a href="typesetting.html#kern">KERN</a></td><td>-- automatic character pair kerning on/off</td> +</tr> +<tr> +<td><a href="inlines.html#inline-kerning-mom">\*[BU n]</a></td><td>-- move characters pairs closer together inline</td> +</tr> +<tr> +<td><a href="inlines.html#inline-kerning-mom">\*[FU n]</a></td><td>-- move character pairs further apart inline</td> +</tr> +<tr> +<td><a href="typesetting.html#rw">RW</a></td><td>-- uniformly tighten space between characters</td> +</tr> +<tr> +<td><a href="typesetting.html#ew">EW</a></td><td>-- uniformly loosen space between characters</td> +</tr> +<tr> +<td><a href="typesetting.html#br-at-line-kern">BR_AT_LINE_KERN</a></td><td>-- break previous line when RW or EW is invoked</td> +</tr> +<tr> +<td><a href="typesetting.html#ligatures">LIGATURES</a></td><td>-- automatic generation of ligatures on/off</td> +</tr> +<tr> +<td><a href="goodies.html#smartquotes">SMARTQUOTES</a></td><td>-- smartquoting on/off</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-9" class="quick-ref" colspan="2"> +<a href="typesetting.html#aldrld-intro">+++ Horizontal and vertical movements, columnar setting</a></th> +</tr> +<tr> +<td><a href="typesetting.html#ald">ALD</a></td><td>-- move downards on the page</td> +</tr> +<tr> +<td><a href="typesetting.html#rld">RLD</a></td><td>-- move upwards on the page</td> +</tr> +<tr> +<td><a href="typesetting.html#space">SPACE</a></td><td>-- insert space between lines on a page</td> +</tr> +<tr> +<td><a href="inlines.html#down">\*[DOWN n]</a></td><td>-- temporarily move downwards in a line</td> +</tr> +<tr> +<td><a href="inlines.html#up">\*[UP n]</a></td><td>-- temporarily move upwards in a line</td> +</tr> +<tr> +<td><a href="inlines.html#fwd">\*[FWD n]</a></td><td>-- move forward in a line</td> +</tr> +<tr> +<td><a href="inlines.html#bck">\*[BCK n]</a></td><td>-- move backwards in a line</td> +</tr> +<tr> +<td><a href="typesetting.html#mco">MCO</a></td><td>-- multiple columns on</td> +</tr> +<tr> +<td><a href="typesetting.html#mcr">MCR</a></td><td>-- recto vertical position of column start</td> +</tr> +<tr> +<td><a href="typesetting.html#mcx">MCX</a></td><td>-- multiple columns off, advance past longest column</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-10" class="quick-ref" colspan="2"> +<a href="typesetting.html#indents-intro">+++ Indents</a></th> +</tr> +<tr> +<td><a href="typesetting.html#il">IL</a></td><td>-- set and turn on a left indent</td> +</tr> +<tr> +<td><a href="typesetting.html#ir">IR</a></td><td>-- set and turn on a right indent</td> +</tr> +<tr> +<td><a href="typesetting.html#ib">IB</a></td><td>-- set and turn on indents both left and right</td> +</tr> +<tr> +<td><a href="typesetting.html#iq">IQ</a></td><td>-- quit (exit) all indents</td> +</tr> +<tr> +<td><a href="typesetting.html#ti">TI</a></td><td>-- set and turn on a temporary (one line) indent</td> +</tr> +<tr> +<td><a href="typesetting.html#hi">HI</a></td><td>-- set and turn on a hanging indent</td> +</tr> +<tr> +<td><a href="typesetting.html#iq">ILX</a></td><td>-- left indents off</td> +</tr> +<tr> +<td><a href="typesetting.html#iq">IRX</a></td><td>-- right indents off</td> +</tr> +<tr> +<td><a href="typesetting.html#iq">IBX</a></td><td>-- both left and right indents off</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-11" class="quick-ref" colspan="2"> +<a href="typesetting.html#tabs-intro">+++ Tabs</a></th> +</tr> +<tr> +<td><a href="typesetting.html#tab-set">TAB_SET</a></td><td>-- set up a typesetting tab</td> +</tr> +<tr> +<td><a href="typesetting.html#tab">TAB <n></a></td><td>-- call tab <n></td> +</tr> +<tr> +<td><a href="typesetting.html#tq">TQ</a></td><td>-- quit (exit) tabs</td> +</tr> +<tr> +<td><a href="typesetting.html#inline-st">\*[ST<n>]...</a></td><td>-- string tabs (mark tab positions inline)</td> +</tr> +<tr> +<td><a href="typesetting.html#inline-st">\*[ST<n>X]</a></td> +</tr> +<tr> +<td><a href="typesetting.html#tn">TN</a></td><td>-- move to tab<n+1> without advancing on the page</td> +</tr> +<tr> +<td><a href="typesetting.html#st">ST</a></td><td>-- set quad/fill for string tabs</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-12" class="quick-ref" colspan="2"> +<a href="goodies.html#underscore">+++ Underscoring, underlining</a></th> +</tr> +<tr> +<td><a href="goodies.html#underscore">UNDERSCORE</a></td><td>-- underscore</td> +</tr> +<tr> +<td><a href="goodies.html#underscore2">UNDERSCORE2</a></td><td>-- double underscore</td> +</tr> +<tr> +<td><a href="goodies.html#underline">UNDERLINE</a></td><td>-- underline (fixed width fonts only)</td> +</tr> +<tr> +<td><a href="goodies.html#ul">\*[UL]...</a></td><td>-- invoke underlining inline (fixed width fonts only)</td> +</tr> +<tr> +<td><a href="goodies.html#ul">\*[ULX]</a></td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-13" class="quick-ref" colspan="2"> +<a href="goodies.html#sup">+++ Superscipts</a></th> +</tr> +<tr> +<td><a href="goodies.html#sup">\*[SUP]...\*[SUPX]</a></td><td>-- superscript</td> +</tr> +<tr> +<td><a href="goodies.html#sup">\*[CONDSUP]...\*[CONDSUPX]</a></td><td>-- pseudo-condensed superscript</td> +</tr> +<tr> +<td><a href="goodies.html#sup">\*[EXTSUP]...\*[EXTSUPX]</a></td><td>-- pseudo extended supercript</td> +</tr> +<tr> +<td><a href="goodies.html#sup-raise">SUPERSCRIPT_RAISE_AMOUNT</a></td><td>-- vertical offset of superscripts</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-14" class="quick-ref" colspan="2"> +<a href="docelement.html#list-intro">+++ Nested lists</a></th> +</tr> +<tr> +<td><a href="docelement.html#list">LIST</a></td><td>-- begin a list</td> +</tr> +<tr> +<td><a href="docelement.html#item">ITEM</a></td><td>-- begin an item in a list</td> +</tr> +<tr> +<td><a href="docelement.html#shift-list">SHIFT_LIST</a></td><td>-- change the indent of a list</td> +</tr> +<tr> +<td><a href="docelement.html#reset-list">RESET_LIST</a></td><td>-- clear and reset a list’s enumerator</td> +</tr> +<tr> +<td><a href="docelement.html#pad-list-digits">PAD_LIST_DIGITS</a></td><td>-- reserve space for digits</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-15" class="quick-ref" colspan="2"> +<a href="color.html#color-intro">+++ Colour</a></th> +</tr> +<tr> +<td><a href="color.html#newcolor">NEWCOLOR</a></td><td>-- initialize (define) a colour</td> +</tr> +<tr> +<td><a href="color.html#color">COLOR</a></td><td>-- begin using an initialized colour</td> +</tr> +<tr> +<td><a href="color.html#xcolor">XCOLOR</a></td><td>-- initialize a "named" X colour</td> +</tr> +<tr> +<td><a href="color.html#color-inline">\*[<colorname>]</a></td><td>-- begin using an initialized colour inline</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-16" class="quick-ref" colspan="2"> +<a href="goodies.html#dropcap">+++ Dropcaps</a></th> +</tr> +<tr> +<td><a href="goodies.html#dropcap">DROPCAP</a></td><td>-- set a dropcap</td> +</tr> +<tr> +<td><a href="goodies.html#dropcap-family">DROPCAP_FAMILY</a></td><td>-- set a dropcap’s family</td> +</tr> +<tr> +<td><a href="goodies.html#dropcap-font">DROPCAP_FONT</a></td><td>-- set a dropcap’s font style</td> +</tr> +<tr> +<td><a href="goodies.html#dropcap-color">DROPCAP_COLOR</a></td><td>-- set a dropcap’s colour</td> +</tr> +<tr> +<td><a href="goodies.html#dropcap-adjust">DROPCAP_ADJUST</a></td><td>-- adjust size of a dropcap</td> +</tr> +<tr> +<td><a href="goodies.html#dropcap-gutter">DROPCAP_GUTTER</a></td><td>-- adjust space between a dropcap and regular text</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-56" class="quick-ref" colspan="2"> +<a href="typesetting.html#smallcaps">+++ Smallcaps</a></th> +</tr> +<tr> +<td><a href="typesetting.html#smallcaps">SMALLCAPS</a></td> +</tr> +<tr> +<td><a href="typesetting.html#smallcaps-style">SMALLCAPS_STYLE</a></td> +</tr> +</table> + + +<table class="quick-ref"> +<tr> +<th id="qr-17" class="quick-ref" colspan="2">+++ Utilities</th> +</tr> +<tr> +<td><a href="goodies.html#alias">ALIAS</a></td><td>-- give a macro a new name</td> +</tr> +<tr> +<td><a href="goodies.html#caps">CAPS</a></td><td>-- set type all caps</td> +</tr> +<tr> +<td><a href="goodies.html#silent">COMMENT</a></td><td>-- silently embed comments in a document</td> +</tr> +<tr> +<td><a href="goodies.html#esc-char">ESC_CHAR</a></td><td>-- change the default escape character</td> +</tr> +<tr> +<td><a href="goodies.html#leader">\*[LEADER]</a></td><td>-- insert leaders at the end of a line</td> +</tr> +<tr> +<td><a href="goodies.html#leader-character">LEADER_CHARACTER</a></td><td>-- change the character used for leaders</td> +</tr> +<tr> +<td><a href="typesetting.html#newpage">NEWPAGE</a></td><td>-- break to a new page</td> +</tr> +<tr> +<td><a href="docprocessing.html#newslide">NEWSLIDE</a></td><td>-- break to a new slide</td> +</tr> +<tr> +<td><a href="docprocessing.html#pause">PAUSE</a></td><td>-- pause slide presentation</td> +</tr> +<tr> +<td><a href="docprocessing.html#transition">TRANSITION</a></td><td>-- transition effect for slides</td> +</tr> +<tr> +<td><a href="goodies.html#pad">PAD</a></td><td>-- insert equalized whitespace into a line</td> +</tr> +<tr> +<td><a href="goodies.html#pad-marker">PAD_MARKER</a></td><td>-- change the pad marker</td> +</tr> +<tr> +<td><a href="inlines.html#inline-rule-mom">\*[RULE]</a></td><td>-- draw a full measure rule</td> +</tr> +<tr> +<td><a href="goodies.html#sizespecs">SIZESPECS</a></td><td>-- cap-height, x-height, descender depth</td> +</tr> +<tr> +<td><a href="goodies.html#silent">SILENT</a></td><td>-- output processing off or on</td> +</tr> +<tr> +<td><a href="goodies.html#trap">TRAP</a></td><td>-- enable or disable page position traps</td> +</tr> +<tr> +<td><a href="goodies.html#left-hang">LEFT_HANG / \*[HANG]</a></td><td>-- hanging punctuation</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-18" class="quick-ref" colspan="2"> +<a href="graphical.html#intro-graphical">+++ Graphical objects and images</a></th> +</tr> +<tr> +<td><a href="graphical.html#drh">DRH</a></td><td>-- draw a horizontal rule</td> +</tr> +<tr> +<td><a href="graphical.html#drv">DRV</a></td><td>-- draw a vertical rule</td> +</tr> +<tr> +<td><a href="graphical.html#dbx">DBX</a></td><td>-- draw a box</td> +</tr> +<tr> +<td><a href="graphical.html#dcl">DCL</a></td><td>-- draw a circle (ellipse)</td> +</tr> +<tr> +<td><a href="inlines.html#rule-weight">RULE_WEIGHT</a></td><td>-- set weight of rules drawn with \*[RULE]</td> +</tr> +<tr> +<td><a href="images.html#pdf-image">PDF_IMAGE</a></td><td>-- insert a PDF image</td> +</tr> +<tr> +<td><a href="images.html#pspic">PSPIC</a></td><td>-- insert a PostScript image</td> +</tr> +</table> + +<div style="display: inline-block; margin-top: 1em; margin-bottom: .5em; border-bottom: 2px solid #302419;"><kbd>DOCUMENT PROCESSING MACROS</kbd></div> + +<table class="quick-ref"> +<tr> +<th id="qr-19" class="quick-ref" colspan="2"> +<a href="docprocessing.html#reference-macros">+++ Reference macros</a></th> +</tr> +<tr> +<td><a href="docprocessing.html#title">TITLE</a></td><td>-- document title</td> +</tr> +<tr> +<td><a href="docprocessing.html#doc-title">DOCTITLE</a></td><td>-- document title (if different from TITLE)</td> +</tr> +<tr> +<td><a href="docelement.html#endnote-title">ENDNOTE_TITLE</a></td><td>-- document/chapter id string for endnotes</td> +</tr> +<tr> +<td><a href="docprocessing.html#chapter">CHAPTER</a></td><td>-- chapter number</td> +</tr> +<tr> +<td><a href="docprocessing.html#chapter-title">CHAPTER_TITLE</a></td><td>-- chapter title</td> +</tr> +<tr> +<td><a href="docprocessing.html#chapter-string">CHAPTER_STRING</a></td><td>-- what to use in place of “Chapter”</td> +</tr> +<tr> +<td><a href="docprocessing.html#subtitle">SUBTITLE</a></td><td>-- document subtitle</td> +</tr> +<tr> +<td><a href="docprocessing.html#author">AUTHOR</a></td><td>-- document author(s)</td> +</tr> +<tr> +<td><a href="docprocessing.html#covertitle">DOC_COVERTITLE</a></td><td>-- document title cover</td> +</tr> +<tr> +<td><a href="docprocessing.html#covertitle">COVERTITLE</a></td><td>-- section cover title</td> +</tr> +<tr> +<td><a href="docprocessing.html#copyright">COPYRIGHT</a></td><td>-- copyright</td> +</tr> +<tr> +<td><a href="docprocessing.html#misc">MISC</a></td><td>-- miscellaneous cover information</td> +</tr> +<tr> +<td><a href="docprocessing.html#draft">DRAFT</a></td><td>-- document’s draft number</td> +</tr> +<tr> +<td><a href="docprocessing.html#draft-string">DRAFT_STRING</a></td><td>-- what to use in place of “Draft”</td> +</tr> +<tr> +<td><a href="docprocessing.html#revision">REVISION</a></td><td>-- document’s revision number</td> +</tr> +<tr> +<td><a href="docprocessing.html#revision-string">REVISION_STRING</a></td><td>-- what to use in place of “Revision”</td> +</tr> +<tr> +<td><a href="docprocessing.html#pdftitle">PDF_TITLE</a></td><td>-- PDF viewer window title</td> +</tr> +<tr> +<td><a href="docprocessing.html#toc-heading">TOC_HEADING</a></td><td>-- non-pagenumbered line inserted into the TOC</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-20" class="quick-ref" colspan="2"> +<a href="docprocessing.html#docstyle-macros">+++ General document formatting directives</a></th> +</tr> +<tr> +<td><a href="docprocessing.html#doctype">DOCTYPE</a></td><td>-- general document type</td> +</tr> +<tr> +<td id="qr-59"><a href="docprocessing.html#slides">DOCTYPE SLIDES</a></td><td>-- create slide presentation</td> +</tr> +<tr> +<td><a href="docprocessing.html#copystyle">COPYSTYLE</a></td><td>-- draft or final copy</td> +</tr> +<tr> +<td><a href="docprocessing.html#printstyle">PRINTSTYLE</a></td><td>-- typeset or “typewritten”</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-21" class="quick-ref" colspan="2"> +<a href="docelement.html#number-lines-intro">+++ Line numbering</a></th> +</tr> +<tr> +<td><a href="docelement.html#number-lines">NUMBER_LINES</a></td><td>-- automatic line numbering on/off</td> +</tr> +<tr> +<td><a href="docelement.html#number-quote-lines">NUMBER_QUOTE_LINES</a></td><td>-- numbering of QUOTE lines on/off</td> +</tr> +<tr> +<td><a href="docelement.html#number-blockquote-lines">NUMBER_BLOCKQUOTE_LINES</a></td><td>-- numbering of BLOCKQUOTE lines on/off</td> +</tr> +<tr> +<td><a href="docelement.html#number-lines-control">Control macros</a></td><td></td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-22" class="quick-ref" colspan="2"> +<a href="docprocessing.html#columns-intro">+++ Set documents in columns</a></th> +</tr> +<tr> +<td><a href="docprocessing.html#columns">COLUMNS</a></td> +</tr> +<tr> +<td><a href="docprocessing.html#col-next">COL_NEXT</a></td> +</tr> +<tr> +<td><a href="docprocessing.html#col-break">COL_BREAK</a></td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-23" class="quick-ref" colspan="2">+++ TYPEWRITE control macros</th> +</tr> +<tr> +<td><a href="docprocessing.html#typewriter-family">TYPEWRITER_FAMILY</a></td><td>alternative to Courier</td> +</tr> +<tr> +<td><a href="docprocessing.html#typewriter-size">TYPEWRITER_SIZE</a></td><td>point size of typewriter font</td> +</tr> +<tr> +<td><a href="docprocessing.html#typewriter-underlining">UNDERLINE_ITALIC</a></td><td>-- underlining of italics on</td> +</tr> +<tr> +<td><a href="docprocessing.html#printstyle-italics">UNDERLINE_QUOTES</a></td><td>-- underlining of QUOTEs on/off</td> +</tr> +<tr> +<td><a href="docprocessing.html#printstyle-italics">ITALIC_MEANS_ITALIC</a></td><td>-- use real italics (not underlining)</td> +</tr> +<tr> +<td><a href="docprocessing.html#typewriter-underlining">UNDERLINE_SLANT</a></td><td>-- underlining of pseudo-italics on</td> +</tr> +<tr> +<td><a href="docprocessing.html#typewriter-underlining">SLANT_MEANS_SLANT</a></td><td>-- use pseudo italics (not underlining)</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-24" class="quick-ref" colspan="2"> +<a href="docprocessing.html#start-macro">+++ Initiate document processing</a></th> +</tr> +<tr> +<td><a href="docprocessing.html#start">START</a></td><td>-- begin document processing</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-25" class="quick-ref" colspan="2"> +<a href="docelement.html#epigraph-intro">+++ Epigraphs</a></th> +</tr> +<tr> +<td><a href="docelement.html#epigraph">EPIGRAPH</a></td><td>-- set an epigraph underneath the docheader</td> +</tr> +<tr> +<td><a href="docelement.html#epigraph-control">Control macros</a></td><td>-- change default style of epigraphs</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-26" class="quick-ref" colspan="2"> +<a href="docelement.html#heading-intro">+++ Headings</a></th> +</tr> +<tr> +<td><a href="docelement.html#heading">HEADING</a></td><td>-- hierarchical headings</td> +</tr> +<tr> +<td><a href="docelement.html#heading-control">Control macros</a></td><td>-- style heading levels</td> +</tr> +<tr> +<td><a href="docelement.html#heading-style"> HEADING_STYLE</a></td><td>-- set style parameters for heading levels</td> +</tr> +<tr> +<td><a href="docelement.html#prefix-chapter-number"> PREFIX_CHAPTER_NUMBER</a></td><td>-- add chapter number to heading numbering</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-30" class="quick-ref" colspan="2"> +<a href="docelement.html#pp-intro">+++ Paragraphs</a></th> +</tr> +<tr> +<td><a href="docelement.html#pp">PP</a></td><td>-- set a paragraph</td> +</tr> +<tr> +<td><a href="docelement.html#pp-control">Control macros</a></td><td>-- managing paragraph style concerns</td> +</tr> +<tr> +<td><a href="docelement.html#pp-font"> PP_FONT</a></td><td>-- globally change font of regular paragraphs</td> +</tr> +<tr> +<td><a href="docelement.html#para-indent"> PARA_INDENT</a></td><td>-- set the paragraph first-line indent</td> +</tr> +<tr> +<td><a href="docelement.html#para-indent-first"> INDENT_FIRST_PARAS</a></td><td>-- indenting of paragraph first-lines on/off</td> +</tr> +<tr> +<td><a href="docelement.html#pp-space"> PARA_SPACE</a></td><td>-- linespace between paragraphs on/off</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-31" class="quick-ref" colspan="2"> +<a href="docelement.html#quote-intro">+++ Quotes (line for line verbatim quotes)</a></th> +</tr> +<tr> +<td><a href="docelement.html#quote">QUOTE</a></td><td>-- set quoted text line for line </td> +</tr> +<tr> +<td><a href="docelement.html#quote-general">Control macros</a></td><td>-- change default style of quotes</td> +</tr> +<tr> +<td><a href="docelement.html#always-fullspace-quotes"> ALWAYS_FULLSPACE_QUOTES</a></td><td>-- control vertical space around quotes</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-32" class="quick-ref" colspan="2"> +<a href="docelement.html#blockquote-intro">+++ Blockquotes (cited passages of text)</a></th> +</tr> +<tr> +<td><a href="docelement.html#blockquote">BLOCKQUOTE</a></td><td>-- set passages of cited text</td> +</tr> +<tr> +<td><a href="docelement.html#blockquote-general">Control macros</a></td><td>-- change default blockquote style</td> +</tr> +<tr> +<td><a href="docelement.html#always-fullspace-quotes"> ALWAYS_FULLSPACE_BLOCKQUOTES</a></td><td>-- control vertical spacing</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-49" class="quick-ref" colspan="2"> +<a href="images.html#floats-intro">+++ Floats</a></th> +</tr> +<tr> +<td style="vertical-align: top"><a href="images.html#float">FLOAT</a></td><td>-- keep blocks of input together, output on next page +<br/> + if necessary</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-53" class="quick-ref" colspan="2"> +<a href="images.html#images-intro">+++ Images and graphics</a></th> +</tr> +<tr> +<td style="vertical-align: top"><a href="images.html#pdf">PDF_IMAGE</a></td><td>-- inserting pdf images</td> +</tr> +<tr> +<td style="vertical-align: top"><a href="images.html#pdf-image-frame"> PDF_IMAGE_FRAME</a></td><td>-- set parameters for pdf image frames</td> +</tr> +<tr> +<td style="vertical-align: top"><a href="images.html#pspic">PSPIC</a></td><td>-- inserting PostScript images</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-60" class="quick-ref" colspan="2"> +<a href="images.html#box-intro">+++ Shaded backgrounds, frames, page colour</a></th> +</tr> +<tr> +<td style="vertical-align: top"><a href="images.html#box-macro">BOX</a> -- shaded backgrounds and frames</td> +</tr> +<tr> +<td style="vertical-align: top"><a href="images.html#page-color">PAGE_COLOR</a></td> +</tr> + +</table> +<table class="quick-ref"> +<tr> +<th id="qr-51" class="quick-ref" colspan="2"> +<a href="images.html#eqn">+++ eqn support</a></th> +</tr> +<tr> +<td><a href="images.html#eq-en">EQ</a></td><td>-- begin an eqn block</td> +</tr> +<tr> +<td><a href="images.html#eq-en">EN</a></td><td>-- end an eqn block</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-52" class="quick-ref" colspan="2"> +<a href="images.html#pic">+++ pic support</a></th> +</tr> +<tr> +<td><a href="images.html#ps-pe">PS</a></td><td>-- begin a pic block</td> +</tr> +<tr> +<td><a href="images.html#ps-pe">PE</a></td><td>-- end a pic block</td> +</tr> +<tr> +<td><a href="images.html#pic-text-style">PIC_TEXT_STYLE</a></td><td>-- set style for pic text</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-58" class="quick-ref" colspan="2"> +<a href="images.html#grap">+++ grap support</a></th> +</tr> +<tr> +<td><a href="images.html#grap">G1</a></td><td>-- begin a grap block</td> +</tr> +<tr> +<td><a href="images.html#grap">G2</a></td><td>-- end a grap block</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-50" class="quick-ref" colspan="2"> +<a href="images.html#tbl">+++ tbl support</a></th> +</tr> +<tr> +<td><a href="images.html#ts-te">TS</a></td><td>-- begin a tbl block</td> +</tr> +<tr> +<td><a href="images.html#ts-te">TH</a></td><td>-- running table header (after TS H)</td> +</tr> +<tr> +<td><a href="images.html#ts-te">TE</a></td><td>-- end tbl block</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-54" class="quick-ref" colspan="2"> +<a href="images.html#captions-and-labels">+++ Captions and labels</a></th> +</tr> +<tr> +<td><a href="images.html#autolabel">AUTOLABEL</a></td><td>-- auto-label figures, tables, equations</td> +</tr> +<tr> +<td><a href="images.html#set-autolabel">SET_AUTOLABEL</a></td><td>-- set or reset autolabel numbers</td> +</tr> +<tr> +<td><a href="images.html#caption-after-label">CAPTION_AFTER_LABEL</a></td><td>-- place captions after labels</td> +</tr> +<tr> +<td><a href="images.html#mla">MLA</a></td><td>-- MLA-style labelling and captioning</td> +</tr> +<tr> +<td><a href="images.html#caption">CAPTION</a></td><td>-- add a caption to a float or (block)quote</td> +</tr> +<tr> +<td><a href="images.html#label">LABEL</a></td><td>-- add a label to a float or (block)quote</td> +</tr> +<tr> +<td><a href="images.html#captions-labels-sources">CAPTIONS</a></td><td>-- set style for captions</td> +</tr> +<tr> +<td><a href="images.html#captions-labels-sources">LABELS</a></td><td>-- set style for labels</td> +</tr> +<tr> +<td><a href="images.html#captions-labels-sources">SOURCES</a></td><td>-- set style for sources (tbl only)</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-55" class="quick-ref" colspan="2"> +<a href="images.html#lists-of">+++ Lists of Figures, Tables, and Equations</a></th> +</tr> +<tr> +<td><a href="images.html#lists-macros">LIST_OF_FIGURES</a></td><td>-- generate a List of Figures</td> +</tr> +<tr> +<td><a href="images.html#lists-macros">LIST_OF_TABLES</a></td><td>-- generate a List of Tables</td> +</tr> +<tr> +<td><a href="images.html#lists-macros">LIST_OF_EQUATIONS</a></td><td>-- generate a List of Equations</td> +</tr> +<tr> +<td><a href="images.html#lists-style">LISTS_STYLE</a></td><td>-- set style parameters for Lists</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-33" class="quick-ref" colspan="2"> +<a href="docelement.html#code-intro">+++ Code snippets</a></th> +</tr> +<tr> +<td><a href="docelement.html#code">CODE</a></td><td>-- set a code snippet</td> +</tr> +<tr> +<td><a href="docelement.html#code-control">Control macros</a></td><td>-- change default style of code snippets</td> +</tr> +<tr> +<td><a href="docelement.html#code-general"> General</a></td><td>-- family, font, and colour</td> +</tr> +<tr> +<td><a href="docelement.html#code-size"> CODE_SIZE</a></td><td>-- code size as a percentage of prevailing text</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-34" class="quick-ref" colspan="2"> +<a href="docelement.html#linebreak-intro">+++ Author linebreaks (section breaks)</a></th> +</tr> +<tr> +<td><a href="docelement.html#linebreak">LINEBREAK</a></td><td>-- insert an author linebreak (section break)</td> +</tr> +<tr> +<td><a href="docelement.html#linebreak-control">Control macros</a></td><td>-- change default style of linebreaks</td> +</tr> +<tr> +<td><a href="docelement.html#linebreak-char"> LINEBREAK_CHAR</a></td><td>-- character to use for author linebreaks</td> +</tr> +<tr> +<td><a href="docelement.html#linebreak-color"> LINEBREAK_COLOR</a></td><td>-- colour of author linebreak character</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-35" class="quick-ref" colspan="2"> +<a href="docelement.html#finis-intro">+++ Document termination string</a></th> +</tr> +<tr> +<td><a href="docelement.html#finis">FINIS</a></td><td>-- insert a document termination string</td> +</tr> +<tr> +<td><a href="docelement.html#finis-control">Control macros</a></td><td>-- change default style finis string</td> +</tr> +<tr> +<td><a href="docelement.html#finis-string"> FINIS_STRING</a></td><td>-- set the document termination string</td> +</tr> +<tr> +<td><a href="docelement.html#finis-string-caps"> FINIS_STRING_CAPS</a></td><td>-- capitalization of termination string</td> +</tr> +<tr> +<td><a href="docelement.html#finis-color"> FINIS_COLOR</a></td><td>-- set the document termination string colour</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-36" class="quick-ref" colspan="2"> +<a href="docelement.html#footnote-intro">+++ Footnotes</a></th> +</tr> +<tr> +<td><a href="docelement.html#footnote">FOOTNOTE</a></td><td>-- set a footnote</td> +</tr> +<tr> +<td><a href="docelement.html#footnote-general">Control macros</a></td><td>-- change default style of footnotes</td> +</tr> +<tr> +<td><a href="docelement.html#footnote-markers"> FOOTNOTE_MARKERS</a></td><td>-- footnote markers on/off</td> +</tr> +<tr> +<td><a href="docelement.html#footnote-marker-style"> FOOTNOTE_MARKER_STYLE</a></td><td>-- type of footnote marker to use</td> +</tr> +<tr> +<td><a href="docelement.html#reset-footnote-number"> RESET_FOOTNOTE_NUMBER</a></td><td>-- reset footnote numbering</td> +</tr> +<tr> +<td><a href="docelement.html#footnote-rule"> FOOTNOTE_RULE</a></td><td>-- footnote separator rule on/off</td> +</tr> +<tr> +<td><a href="docelement.html#footnote-rule-adj"> FOOTNOTE_RULE_ADJ</a></td><td>-- adjust position of footnote rule</td> +</tr> +<tr> +<td><a href="docelement.html#footnote-rule-length"> FOOTNOTE_RULE_LENGTH</a></td><td>-- adjust length of footnote rule</td> +</tr> +<tr> +<td style="vertical-align: top;"><a href="docelement.html#footnotes-run-on"> FOOTNOTES_RUN_ON</a></td> + <td>-- instruct footnotes to be continuous</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-37" class="quick-ref" colspan="2"> +<a href="docelement.html#endnote-intro">+++ Endnotes</a></th> +</tr> +<tr> +<td><a href="docelement.html#endnote">ENDNOTE</a></td><td>-- set an endnote</td> +</tr> +<tr> +<td style="vertical-align: top;"><a href="docelement.html#en-mark">\*[EN-MARK]</a></td> + <td>-- mark initial line of a range of line numbers<br /> + (for use with line numbered endnotes)</td> +</tr> +<tr> +<td><a href="docelement.html#endnotes">ENDNOTES</a></td><td>-- output endnotes</td> +</tr> +<tr> +<td><a href="docelement.html#endnote-control">Control macros</a></td><td></td> +</tr> +</table> + +<table class="quick-ref" style="margin-top: -.5em; margin-left: 1em;"> +<tr> +<td><a href="docelement.html#endnotes-general">General style control</a></td> +</tr> +<tr> +<td><a href="docelement.html#endnotes-pagination">Pagination</a></td> +</tr> +<tr> +<td><a href="docelement.html#endnotes-header-control">Header/footer control</a></td> +</tr> +<tr> +<td><a href="docelement.html#endnotes-header-string-control">Title control</a></td> +</tr> +<tr> +<td><a href="docelement.html#endnotes-doc-title">Document/section identification control</a></td> +</tr> +<tr> +<td><a href="docelement.html#endnotes-numbering">Identification style</a></td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-38" class="quick-ref" colspan="2"> +<a href="docelement.html#margin-notes-intro">+++ Margin notes</a></th> +</tr> +<tr> +<td><a href="docelement.html#mn-init">MN_INIT</a></td><td>-- initialize margin notes</td> +</tr> +<tr> +<td><a href="docelement.html#mn">MN</a></td><td>-- set a margin note</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-39" class="quick-ref" colspan="2"> +<a href="refer.html#intro-ref">+++ Bibliographic references</a></th> +</tr> +<tr> +<td><a href="refer.html#ref">REF</a></td><td>-- begin a reference</td> +</tr> +<tr> +<td><a href="refer.html#footnote-refs">FOOTNOTE_REFS</a></td><td>-- place references in footnotes</td> +</tr> +<tr> +<td><a href="refer.html#endnote-refs">ENDNOTE_REFS</a></td><td>-- place references in endnotes</td> +</tr> +<tr> +<td><a href="refer.html#bracket-refs">REF( / REF)</a></td><td>-- put parentheses around embedded references</td> +</tr> +<tr> +<td><a href="refer.html#bracket-refs">REF[ / REF]</a></td><td>-- put square brackets around embedded references</td> +</tr> +<tr> +<td><a href="refer.html#bracket-refs">REF{ / REF}</a></td><td>-- put curly braces around embedded references</td> +</tr> +<tr> +<td><a href="refer.html#bibliography">BIBLIOGRAPHY</a></td><td>-- output a bibliography</td> +</tr> +<tr> +<td><a href="refer.html#biblio-control">Control macros</a></td> +</tr> +</table> + +<table class="quick-ref" style="margin-top: -.5em; margin-left: 1em;"> +<tr> +<td><a href="refer.html#bibliography-type">BIBLIOGRAPHY_TYPE</a> -- "plain" or enumerated list</td> +</tr> +<tr> +<td><a href="refer.html#biblio-general">General style control</a></td> +</tr> +<tr> +<td><a href="refer.html#biblio-header-control">Header/footer control</a></td> +</tr> +<tr> +<td><a href="refer.html#biblio-main-title">Main head control</a></td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-40" class="quick-ref" colspan="2"> +<a href="tables-of-contents.html">+++ Tables of contents</a></th> +</tr> +<tr> +<td><a href="tables-of-contents.html#toc">TOC</a></td><td>-- output a table of contents</td> +</tr> +<tr> +<td><a href="docprocessing.html#no-toc-entry">NO_TOC_ENTRY</a></td><td>-- omit a document section from the TOC</td> +</tr> +<tr> +<td><a href="docprocessing.html#toc-heading">TOC_HEADING</a></td><td>-- insert a heading into the TOC</td> +</tr> +<tr> +<td><a href="tables-of-contents.html#index-toc-control">Control macros</a></td> +</tr> +</table> + +<table class="quick-ref" style="margin-top: -.5em; margin-left: 1em;"> +<tr> +<td><a href="tables-of-contents.html#toc-general">General style control</a></td> +</tr> +<tr> +<td><a href="tables-of-contents.html#toc-pagenumbering">Page numbering</a></td> +</tr> +<tr> +<td><a href="tables-of-contents.html#toc-header">Header string control</a></td> +</tr> +<tr> +<td><a href="tables-of-contents.html#toc-style">Entries and reference page numbers style control</a></td> +</tr> +<tr> +<td><a href="tables-of-contents.html#toc-title-style">TOC_TITLE_STYLE</a></td> +</tr> +<tr> +<td><a href="tables-of-contents.html#toc-entry-style">TOC_ENTRY_STYLE</a></td> +</tr> +<tr> +<td><a href="docprocessing.html#toc-heading-style">TOC_HEADING_STYLE</a></td> +</tr> +<tr> +<td><a href="tables-of-contents.html#toc-additional">Additional table of contents control macros</a></td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-41" class="quick-ref" colspan="2"> +<a href="letters.html">+++ Letter (correspondence) macros</a></th> +</tr> +<tr> +<td><a href="letters.html#date">DATE</a></td><td>-- letter’s date</td> +</tr> +<tr> +<td><a href="letters.html#from">FROM</a></td><td>-- letter’s addresser</td> +</tr> +<tr> +<td><a href="letters.html#to">TO</a></td><td>-- letter’s addressee</td> +</tr> +<tr> +<td><a href="letters.html#greeting">GREETING</a></td><td>-- letter’s salutation</td> +</tr> +<tr> +<td><a href="letters.html#closing">CLOSING</a></td><td>-- letter’s closing salutation</td> +</tr> +<tr> +<td><a href="letters.html#closing-indent">CLOSING_INDENT</a></td><td>-- indentation of the closing salutation</td> +</tr> +<tr> +<td><a href="letters.html#signature-space">SIGNATURE_SPACE</a></td><td>-- room to leave for the signature</td> +</tr> +<tr> +<td><a href="letters.html#no-suite">NO_SUITE</a></td><td>-- printing of "next page number" off or on</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-42" class="quick-ref" colspan="2"> +<a href="docprocessing.html#style-after-start">+++ Changing global print style parameters after START</a></th> +</tr> +<tr> +<td><a href="docprocessing.html#doc-left-margin">DOC_LEFT_MARGIN</a></td><td>-- left margin of everything on the page</td> +</tr> +<tr> +<td><a href="docprocessing.html#doc-right-margin">DOC_RIGHT_MARGIN</a></td><td>-- right margin of everything on the page</td> +</tr> +<tr> +<td><a href="docprocessing.html#doc-line-length">DOC_LINE_LENGTH</a></td><td>-- document’s base line length</td> +</tr> +<tr> +<td><a href="docprocessing.html#doc-family">DOC_FAMILY</a></td><td>-- document’s base family</td> +</tr> +<tr> +<td><a href="docprocessing.html#doc-pt-size">DOC_PT_SIZE</a></td><td>-- document’s base point size</td> +</tr> +<tr> +<td><a href="docprocessing.html#doc-lead">DOC_LEAD</a></td><td>-- document’s base lead</td> +</tr> +<tr> +<td><a href="docprocessing.html#doc-quad">DOC_QUAD</a></td><td>-- document’s base quad directions</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-43" class="quick-ref" colspan="2"> +<a href="docprocessing.html#docheader">+++ Managing a document’s first-page header</a></th> +</tr> +<tr> +<td><a href="docprocessing.html#docheader">DOCHEADER</a></td><td>-- document first-page header on/off</td> +</tr> +<tr> +<td><a href="docprocessing.html#index-docheader-control">Control macros</a></td><td>-- change default style of docheader elements</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-44" class="quick-ref" colspan="2"> +<a href="headfootpage.html#headfoot-management">+++ Managing page headers and footers</a></th> +</tr> +<tr> +<td><a href="headfootpage.html#headers">HEADERS</a></td><td>-- page headers on/off</td> +</tr> +<tr> +<td><a href="headfootpage.html#footers">FOOTERS</a></td><td>-- page footers on/off</td> +</tr> +<tr> +<td style="vertical-align: top;"><a href="headfootpage.html#headers-and-footers">HEADERS_AND_FOOTERS</a></td><td>-- enable generation of both headers and<br/> + footers</td> +</tr> +<tr> +<td><a href="headfootpage.html#headfoot-control">Control macros</a></td> +</tr> +</table> + +<table class="quick-ref" style="margin-top: -.5em; margin-left: 1em;"> +<tr> +<td><a href="headfootpage.html#hdrftr-strings">Strings</a></td><td>-- left-right-center strings</td> +</tr> +<tr> +<td><a href="headfootpage.html#hdrftr-style">Style</a></td><td>-- change defaults for headers and/or footers</td> +</tr> +<tr> +<td><a href="headfootpage.html#hdrftr-style-global">Global</a></td><td>-- global style changes</td> +</tr> +<tr> +<td><a href="headfootpage.html#hdrftr-style-part">Part-by-part</a></td><td>-- part-by-part style changes</td> +</tr> +<tr> +<td><a href="headfootpage.html#vertical-spacing">Vertical placement</a></td><td>-- adjust position of headers and/or footers</td> +</tr> +<tr> +<td><a href="headfootpage.html#hdrftr-separator">Separator rule</a></td><td>-- manage the header/footer separator rule</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-45" class="quick-ref" colspan="2"> +<a href="rectoverso.html">+++ Recto/verso page headers and footers</a></th> +</tr> +<tr> +<td><a href="rectoverso.html#recto-verso">RECTO_VERSO</a></td><td>-- recto/verso headers and/or footers on/off</td> +</tr> +<tr> +<td><a href="rectoverso.html#force-recto">FORCE_RECTO</a></td><td>-- insert blank pages so chapters start recto</td> +</tr> +<tr> +<td><a href="rectoverso.html#switch-hdrftr">SWITCH_HEADERS</a></td><td>-- switch recto or verso header</td> +</tr> +<tr> +<td><a href="rectoverso.html#switch-hdrftr">SWITCH_FOOTERS</a></td><td>-- switch recto or verso footer</td> +</tr> +<tr> +<td><a href="headfootpage.html#hdrftr-recto">HEADER_RECTO</a></td><td>-- string that constitutes a recto header</td> +</tr> +<tr> +<td><a href="headfootpage.html#hdrftr-verso">HEADER_VERSO</a></td><td>-- string that constitutes a verso header</td> +</tr> +<tr> +<td><a href="headfootpage.html#hdrftr-recto">FOOTER_RECTO</a></td><td>-- string that constitutes a recto footer</td> +</tr> +<tr> +<td><a href="headfootpage.html#hdrftr-verso">FOOTER_VERSO</a></td><td>-- string that constitutes a recto footer</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-46" class="quick-ref" colspan="2"> +<a href="headfootpage.html#pagination-intro">+++ Pagination</a></th> +</tr> +<tr> +<td><a href="headfootpage.html#paginate">PAGINATE</a></td><td>-- pagination on/off</td> +</tr> +<tr> +<td><a href="headfootpage.html#index-paginate-control">Control macros</a></td><td>-- change default style for pagination</td> +</tr> +<tr> +<td><a href="headfootpage.html#pagenumber"> PAGENUMBER</a></td><td>-- user-defined (starting) page number</td> +</tr> +<tr> +<td><a href="headfootpage.html#pagenum-style"> PAGENUM_STYLE</a></td><td>-- digits, roman numerals, etc</td> +</tr> +<tr> +<td><a href="headfootpage.html#pagenumber-string"> PAGENUMBER_STRING</a></td><td>-- user-defined page numbering string</td> +</tr> +<tr> +<td><a href="headfootpage.html#pagenum-on-first-page"> PAGENUM_ON_FIRST_PAGE</a></td><td>-- when page numbering is at page top</td> +</tr> +<tr> +<td style="vertical-align: top;"><a href="headfootpage.html#draft-with-pagenumber"> DRAFT_WITH_PAGENUMBER</a></td><td>-- attach draft/revision to page number</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-57" class="quick-ref" colspan="2"> +<a href="docprocessing.html#vertical-whitespace-management">+++ Vertical whitespace management</a></th> +</tr> +<tr> +<td><a href="docprocessing.html#shim">SHIM</a></td><td>-- align to the baseline grid</td> +</tr> +<tr> +<td><a href="docprocessing.html#flex">FLEX</a></td><td>-- insert flexible whitespace</td> +</tr> +</table> + + +<table class="quick-ref"> +<tr> +<th id="qr-47" class="quick-ref" colspan="2"> +<a href="cover.html">+++ Document and section cover (title) pages</a></th> +</tr> +<tr> +<td><a href="cover.html#cover">DOC_COVER</a></td><td>-- information to include in a document cover</td> +</tr> +<tr> +<td><a href="cover.html#cover">COVER</a></td><td>-- information to include in a section cover</td> +</tr> +<tr> +<td><a href="cover.html#on-off">DOC_COVERS</a></td><td>-- printing of document covers on/off</td> +</tr> +<tr> +<td><a href="cover.html#on-off">COVERS</a></td><td>-- printing of section covers on/off</td> +</tr> +<tr> +<td><a href="cover.html#covertext">DOC_COVERTEXT</a></td><td>-- user-added text for document covers</td> +</tr> +<tr> +<td><a href="cover.html#covertext">COVERTEXT</a></td><td>-- user-added text for section covers</td> +</tr> +<tr> +<td><a href="cover.html#coverimage">DOC_COVER_IMAGE</a></td><td>-- add images to document covers</td> +</tr> +<tr> +<td><a href="cover.html#coverimage">COVER_IMAGE</a></td><td>-- add images to document covers</td> +</tr> +<tr> +<td><a href="cover.html#cover-control">Control macros</a></td><td>-- change style defaults for covers</td> +</tr> +</table> + +<table class="quick-ref"> +<tr> +<th id="qr-48" class="quick-ref" colspan="2">+++ Utilities</th> +</tr> +<tr> +<td><a href="docprocessing.html#add-space">ADD_SPACE</a></td><td>-- add space to the top of a page</td> +</tr> +<tr> +<td><a href="docprocessing.html#add-space">RESTORE_SPACE</a></td><td>-- restore spacing at the top of a page</td> +</tr> +<tr> +<td><a href="headfootpage.html#blank-pages">BLANKPAGE</a></td><td>-- output one or more blank pages</td> +</tr> +<tr> +<td><a href="docprocessing.html#doc-lead-adjust">DOC_LEAD_ADJUST</a></td><td>-- adjust leading to fill pages</td> +</tr> +<tr> +<td><a href="rectoverso.html#collate">COLLATE</a></td><td>-- join documents (chapters/sections)</td> +</tr> +<tr> +<td><a href="goodies.html#center-block">CENTER_BLOCK</a></td><td>-- centre blocks of type</td> +</tr> +</table> + +<div class="rule-long"><hr/></div> + +<!-- Navigation links --> +<table style="width: 100%; margin-top: 12px;"> +<tr> + <td style="width: 33%;"><a href="toc.html">Back to Table of Contents</a></td> + <td style="width: 33%; text-align: center;"><a href="#top">Top</a></td> + <td style="width: 33%; text-align: right;"><a href="appendices.html">Next: Appendices</a></td> +</tr> +</table> + +</div> + +<div class="bottom-spacer"><br/></div> + +</body> +</html> diff --git a/contrib/mom/momdoc/rectoverso.html b/contrib/mom/momdoc/rectoverso.html new file mode 100644 index 0000000..92cf80f --- /dev/null +++ b/contrib/mom/momdoc/rectoverso.html @@ -0,0 +1,350 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004-2020 Free Software Foundation, Inc. +Written by Peter Schaffter (peter@schaffter.ca). + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"/> + <title>Mom -- Recto/verso printing, collating</title> + <link rel="stylesheet" type="text/css" href="stylesheet.css" /> +</head> + +<body style="background-color: #f5faff;"> + +<!-- ==================================================================== --> + +<div id="top" class="page"> + +<!-- Navigation links --> +<table style="width: 100%;"> +<tr> + <td><a href="toc.html">Back to Table of Contents</a></td> + <td style="text-align: right;"><a href="cover.html#top">Next: Cover pages</a></td> +</tr> +</table> + +<h1 class="docs">Recto/verso printing, collating</h1> + +<div style="width: 50%; margin: auto;"> +<ul class="no-enumerator" style="margin-left: -1em;"> + <li><a href="#rectoverso-intro">Introduction to recto/verso printing</a> + <ul style="margin-left: -.5em; list-style-type: disc;"> + <li><a href="#rectoverso-list">Macro list</a></li> + </ul></li> + <li><a href="#collate-intro">Introduction to collating</a> + <ul style="margin-left: -.5em; list-style-type: disc;"> + <li><a href="#collate">The COLLATE macro</a></li> + </ul></li> +</ul> +</div> + +<div class="rule-medium"><hr/></div> + +<h2 id="rectoverso-intro" class="docs">Introduction to recto/verso printing</h2> + +<p> +Recto/verso printing allows you to set up a mom document in such +a way that it can be printed on both sides of a printer sheet and +subsequently bound. +</p> + +<p> +With recto/verso, mom automatically takes control of the following +aspects of alternating page layout: +</p> +<ul style="margin-top: -.5em; margin-left: -.5em; margin-bottom: -.5em;"> + <li>switching left and right margins (if they’re not equal)</li> + <li>switching the left and right parts of the default 3-part + <a href="definitions.html#header">headers</a> + or + <a href="definitions.html#footer">footers</a> + (see the + <a href="headfootpage.html#description-general">General description of headers</a>) + </li> + <li>switching + <a href="headfootpage.html#hdrftr-recto">HEADER_RECTO</a> + and + <a href="headfootpage.html#hdrftr-recto">HEADER_VERSO</a> + if user-defined, single string recto/verso headers + or footers are used in place of the default 3-part + headers or footers + </li> + <li>switching the page number position (if page numbers are not centred)</li> +</ul> +<br/> + +<div class="macro-list-container"> +<h3 id="rectoverso-list" class="macro-list">Recto/verso macros</h3> +<ul class="macro-list"> + <li><a href="#recto-verso">RECTO_VERSO</a></li> + <li><a href="#force-recto">FORCE_RECTO</a></li> + <li><a href="#switch-hdrftr">SWITCH_HEADERS (also FOOTERS)</a> + – switch starting position of the header parts (left and right) + </li> +</ul> +</div> + +<!-- -RECTO_VERSO- --> + +<div id="recto-verso" class="box-macro-args"> +Macro: <b>RECTO_VERSO</b> +</div> + +<p> +If you want mom to set up alternating pages for recto/verso +printing, simply invoke RECTO_VERSO, with no argument, anywhere in +your document (most likely before +<a href="docprocessing.html#start">START</a>). +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="note">Note:</span> +Recto/verso always switches the left and right parts of +<a href="definitions.html#header">headers</a> +or +<a href="definitions.html#footer">footers</a> +on odd/even pages. However, it only switches the left and right +margins if the margins aren’t equal. Consequently, it is +your responsibility to set the appropriate differing left and right +margins with +<a href="typesetting.html#l-margin">L_MARGIN</a> +and +<a href="typesetting.html#r-margin">R_MARGIN</a> +(prior to +<a href="docprocessing.html#start">START</a>) +or with +<a href="docprocessing.html#doc-left-margin">DOC_LEFT_MARGIN</a> +and +<a href="docprocessing.html#doc-right-margin">DOC_RIGHT_MARGIN</a> +(before or after START). +</p> + +<p class="tip-bottom"> +Equally, recto/verso only switches the page number position if page +numbers aren’t centred, which means you have to set the page +number position with +<a href="headfootpage.html#pagenum-pos">PAGENUM_POS</a> +(before or after START). +</p> +</div> + +<!-- -FORCE_RECTO- --> + +<div id="force-recto" class="box-macro-args" style="margin-top: 1em;"> +Macro: <b>FORCE_RECTO</b> +</div> + +<p> +It is a common convention with two-sided printing to ensure that +cover pages, title pages, and chapters or major sections of a document +always begin on the recto side of a page. This sometimes +necessitates inserting a blank page before the start of a new +chapter or major section. +</p> + +<p> +If you would like mom to take care of this for you automatically, +simply invoke <kbd>FORCE_RECTO</kbd> before the first +<a href="docprocessing.html#start">START</a> +of the document. +</p> + +<!-- -SWITCH_HDRFTR- --> + +<div id="switch-hdrftr" class="box-macro-args" style="margin-top: 1em;"> +Macro: <b>SWITCH_HEADERS</b> +</div> + +<p> +SWITCH_HEADERS switches the location of the header left string +(by default, the author) and the header right string (by default, +the document title). If you don’t like mom’s default +placement of author and title, use SWITCH_HEADERS to reverse it. +</p> + +<p> +SWITCH_HEADERS can also be useful in conjunction with +<a href="#recto-verso">RECTO_VERSO</a>. +The assumption of RECTO_VERSO is that the first page of a document +(i.e. recto/odd) represents the norm for header-left and header-right, +meaning that the second (and all subsequent verso/even) pages of the +document will reverse the order of header-left and header-right. +</p> + +<p> +If mom’s behaviour in this matter is not what you want, simply +invoke SWITCH_HEADERS on the first page of your recto/verso document +to reverse her default treatment of header parts. The remainder of +your document (with respect to headers) will come out as you want. +</p> + +<div class="rule-medium"><hr/></div> + +<!-- ===================================================================== --> + +<h2 id="collate-intro" class="docs">Introduction to collating</h2> + +<p> +Many people wisely keep chapters of a long work in separate +files, previewing or printing them as needed during the draft +phase. However, when it comes to the final version, mom requires +a single, collated file in order to keep track of page numbering +and recto/verso administration, generating tables of contents and +endnotes, ensuring that +<a href="definitions.html#docheader">docheaders</a> +get printed correctly, and a host of other details. +</p> + +<p> +The COLLATE macro, which can be used with any +<a href="docprocessing.html#doctype">DOCTYPE</a> +except <kbd>LETTER</kbd>, lets you glue mom-formatted input files +together. You need only concatenate chapters into a single file +(most likely with <kbd>cat(1)</kbd>), and put +<kbd>.COLLATE</kbd> at the end of each concatenated chapter. +Assuming all the files begin with the required +<a href="docprocessing.html#reference-macros">reference macros</a> +(metadata), style parameters, and +<a href="docprocessing.html#start">START</a>, +each chapter will begin on a fresh page and behave as expected. +</p> + +<p> +Even if you work with monolithic, multi-chapter files, every +chapter and its associated metadata plus <kbd>.START</kbd> +still needs to be preceded by <kbd>.COLLATE</kbd>. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +COLLATE assumes you are collating documents/files with similar +type-style parameters hence there’s no need for PRINTSTYLE +to appear after COLLATE, although if you’re collating +documents that were created as separate files, chances are the +PRINTSTYLE’s already there. +</p> +</div> + +<div class="box-tip"> +<p id="caution" class="tip"> +<b>Two words of caution:</b> +</p> +<ol style="margin-top: -1.25em; padding-bottom: .5em;"> + <li>Do not collate documents of differing + PRINTSTYLES (i.e., don’t try to + collate a <kbd>TYPESET</kbd> document and <kbd>TYPEWRITE</kbd> + document). + </li> + <li>Use <kbd>.DOC_FAMILY</kbd> instead of + <kbd>.FAMILY</kbd> if, for some reason, you want to + change the family of all the document elements after + <kbd>.COLLATE</kbd>. <kbd>.FAMILY</kbd>, by itself, will + change the family of paragraph text only. + </li> +</ol> +</div> + +<!-- -COLLATE- --> + +<div class="macro-id-overline"> +<h3 id="collate" class="macro-id">collate</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>COLLATE</b> +</div> + +<p> +The most basic (and most likely) collating situation looks like +this: +<br/> +<span class="pre-in-pp"> + .COLLATE + .CHAPTER 17 + .START +</span> +A slightly more complex version of the same thing, for chapters +that require their own titles, looks like this: +<br/> +<span class="pre-in-pp"> + .COLLATE + .CHAPTER_TITLE "Geek Fatigue: Symptoms and Causes" + .START +</span> +</p> + +<div class="box-tip" style="margin-top: -1em"> +<p class="tip"> +<span class="tip">Tip:</span> +If the last line of text before <kbd>.COLLATE</kbd> +falls too close to the bottom margin, or if the line is followed +by a macro likely to cause a linebreak (e.g. <kbd>.LIST OFF</kbd> or +<kbd>.IQ</kbd>), mom may output a superfluous blank page before +the start of the following document. +</p> + +<p class="tip-bottom" style="margin-top: -1em"> +In order to avoid this, insert +<a href="docprocessing.html#EL"><kbd>.EL</kbd></a> +after the last line of text, before <kbd>.COLLATE</kbd> and/or any +concluding macros. For example, +<br/> +<span class="pre-in-pp"> + some concluding text.\c + .EL + .COLLATE +</span> +or +<br/> +<span class="pre-in-pp"> + some concluding text.\c + .EL + .LIST OFF + .COLLATE +</span> +</p> +</div> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +See the +<a href="#caution">two words of caution</a>, +above. +</p> +</div> + +<div class="rule-long"><hr/></div> + +<!-- Navigation links --> +<table style="width: 100%; margin-top: 12px;"> +<tr> + <td style="width: 33%;"><a href="toc.html">Back to Table of Contents</a></td> + <td style="width: 33%; text-align: center;"><a href="#top">Top</a></td> + <td style="width: 33%; text-align: right;"><a href="cover.html">Next: Cover pages</a></td> +</tr> +</table> + +</div> + +<div class="bottom-spacer"><br/></div> + +</body> +</html> diff --git a/contrib/mom/momdoc/refer.html b/contrib/mom/momdoc/refer.html new file mode 100644 index 0000000..5f11814 --- /dev/null +++ b/contrib/mom/momdoc/refer.html @@ -0,0 +1,2129 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004-2020 Free Software Foundation, Inc. +Written by Peter Schaffter (peter@schaffter.ca). + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"/> + <title>Mom -- Document processing, bibliographies and references</title> + <link rel="stylesheet" type="text/css" href="stylesheet.css" /> +</head> + +<body style="background-color: #f5faff;"> + +<!-- ==================================================================== --> + +<div id="top" class="page"> + +<!-- Navigation links --> +<table style="width: 100%;"> +<tr> + <td><a href="toc.html">Back to Table of Contents</a></td> + <td style="text-align: right;"><a href="letters.html#top">Next: Writing letters</a></td> +</tr> +</table> + +<h1 class="docs">Bibliographies and references</h1> + +<div style="width: 75%; margin: auto;"> +<ul class="no-enumerator"> + <li><a href="#intro-ref">Introduction to bibliographies and references</a></li> + <li><a href="#tutorial-ref">Tutorial on <kbd>refer</kbd> usage with mom</a> + <ul style="margin-left: -.5em; list-style-type: disc;"> + <li><a href="#db-ref">Create a <kbd>refer</kbd> database</a></li> + <li><a href="#rcommands-ref">Insert a <kbd>refer</kbd> block</a></li> + <li><a href="#placement-ref">Tell mom where you want your references (if footnotes or endnotes)</a></li> + <li><a href="#accessing-ref">Accessing references in the database</a></li> + <li><a href="#fn-en-recipe">Entering footnote/endnote references</a></li> + <li><a href="#parenthetical">Parenthetical insertions</a></li> + <li><a href="#bibliography-from-embedded">Generating a bibliography from parenthetical insertions</a></li> + <li><a href="#bibliography-recipe">Generating a comprehensive bibliography</a></li> + <li><a href="#invoking-ref">Invoking groff with mom and <kbd>refer</kbd></a></li> + </ul></li> + <li><a href="#mla">MLA (Modern Language Association) style</a> + <ul style="margin-left: -.5em; list-style-type: disc;"> + <li><a href="#ref-styles">Types of references (endnote, footnote, or embedded in text)</a></li> + <li><a href="#parenthetical">Inserting parenthetical references into the text</a></li> + </ul></li> + <li><a href="#database">The <kbd>refer</kbd> database</a> + <ul style="margin-left: -.5em; list-style-type: disc;"> + <li><a href="#database-intro">Introduction</a></li> + <li><a href="#database-rules">Rules</a></li> + <li><a href="#fields-quick">Quick guide to field identifiers (%A for author, %T for title, etc)</a></li> + <li><a href="#fields-specifics">Field identifiers: specifics, usage and examples</a></li> + </ul></li> + <li><a href="#index-ref">The bibliography and reference macros</a> + <ul style="margin-left: -.5em; list-style-type: disc;"> + <li><a href="#biblio-control">Bibliography control macros and defaults</a></li> + </ul></li> +</ul> +</div> + +<div class="rule-medium"><hr/></div> + +<h2 id="intro-ref" class="docs">Introduction to bibliographies and references</h2> + +<p> +Mom provides the ability to format and generate bibliographies, as +well as footnote or endnote references, in MLA (Modern Language +Association) style. She accomplishes this by working in conjunction +with a special groff program called <kbd>refer</kbd>. +</p> + +<p> +<kbd>Refer</kbd> requires first that you create a database of works +that will be cited in your documents. Once that’s done, special +macros let you briefly key in references to entries in the database +and have mom format them with respect to order, punctuation and +italicization in footnotes, endnotes, or a full bibliography. +</p> + +<p> +<kbd>Refer</kbd> has been around for a long time. It’s +powerful and has many, many features. Unfortunately, the manpage +(<kbd>man refer</kbd>), while complete and accurate, is +dense and not a good introduction. (It’s a classic manpage +Catch-22: the manpage is useful only after you know how to use the +program.) +</p> + +<p> +In order to get mom users up and running with <kbd>refer</kbd>, +this section of mom’s documentation focuses exclusively, in a +recipe-like manner, on what you need to know to use <kbd>refer</kbd> +satisfactorily in conjunction with mom. The instructions are not to +be taken as a manual on full <kbd>refer</kbd> usage. +</p> + +<p> +If you’re already a <kbd>refer</kbd> user, the information +herein will be useful for adapting your current <kbd>refer</kbd> +usage to mom’s way of doing things. If you’ve never +used <kbd>refer</kbd>, the information is essential, and, in many +cases, may be all you need. +</p> + +<p> +I encourage anyone interested in what MLA style looks +like—and, by extension, how your bibliographies and references +will look after mom formats them—to check out +<br/> +<span class="pre-in-pp"> + <a href="http://www.aresearchguide.com/12biblio.html">http://www.aresearchguide.com/12biblio.html</a> +</span> +or any other website or reference book on MLA style. +</p> + +<div class="rule-short" style="margin-top: 1em;"><hr/></div> + +<div class="examples-container" style="margin-top: 1.5em; margin-bottom: 1.5em;"> +<h3 id="tutorial-ref" class="docs">Tutorial on refer usage with mom</h3> +<ol style="margin-top: 1em; margin-bottom: -.5em;"> + <li><a href="#db-ref">Create a <kbd>refer</kbd> database</a> + <ul style="margin-left: -.5em; list-style-type: disc;"> + <li><a href="#example-refer-database">example <kbd>refer</kbd> database</a></li> + </ul></li> + <li><a href="#rcommands-ref">Insert a <kbd>refer</kbd> block</a> + <ul style="margin-left: -.5em; list-style-type: disc;"> + <li><a href="#fn-en-block">refer block for footnotes/endnotes</a></li> + <li><a href="#in-text-block">refer block for parenthetical insertions into running text</a></li> + <li><a href="#bibliography-block">refer block for comprehensive bibliographies (reading lists)</a></li> + </ul></li> + <li><a href="#placement-ref">Tell mom where you want your references (if footnotes or endnotes)</a></li> + <li><a href="#accessing-ref">Accessing references in the database</a></li> + <li><a href="#fn-en-recipe">Entering footnote/endnote references</a></li> + <li><a href="#parenthetical-insertions">Parenthetical insertions</a></li> + <li><a href="#bibliography-from-embedded">Generating a bibliography from parenthetical insertions</a></li> + <li><a href="#bibliography-recipe">Generating a comprehensive bibliography</a></li> + <li><a href="#invoking-ref">Invoking groff with mom and <kbd>refer</kbd></a></li> +</ol> + +<h4 id="db-ref" class="docs">1. Create a refer database</h4> + +<p> +The first step in using <kbd>refer</kbd> with mom is creating a +database. The database is a text file containing entries for the +works you will be citing. You may set up separate databases for +individual documents, or create a large database that can be +accessed by many documents. +</p> + +<p> +Entries (“records” in refer-speak) in the database +are separated from each other by a single, blank line. The records +themselves are composed of single lines (“fields”) with +no blank lines between them. Each field begins with a percent +sign and a single letter (the "field identifier") +e.g. <kbd>%A</kbd> or <kbd>%T</kbd>. The letter identifies +what part of a bibliographic entry the field refers to: Author, +Title, Publisher, Date, etc. After the field identifier comes +a single space, followed by the information appropriate to +field. +</p> + +<!-- Add rules for punctuation and italics --> + +<p> +Here’s an example database containing two records so you can +visualize what the above paragraph says. +</p> + +<div id="example-refer-database" class="examples" style="margin-top: -.5em;">Example <kbd>refer</kbd> database</div> +<div class="examples-container" style="padding-bottom: 1em;"> +<span class="pre"> +%A Terry Pratchett +%A Neil Gaiman +%T Good Omens +%C London +%I Gollancz +%D 1990 + +%A Peter Schaffter +%T The Schumann Proof +%C Toronto +%I RendezVous Press +%D 2004 +</span> +</div> + +<p> +The order in which you enter fields doesn’t matter. +<kbd>Refer</kbd> will re-arrange them for you. +</p> + +<h4 id="rcommands-ref" class="docs">2. Insert a refer block</h4> + +<p> +Having set up your database, you now need to put some +<kbd>refer</kbd>-specific commands in your mom file. +</p> + +<p> +<kbd>Refer</kbd> commands are introduced by a single line +containing <kbd>.R1</kbd>, and concluded with a single line +containing <kbd>.R2</kbd>. What goes between the <kbd>.R1</kbd> +and <kbd>.R2</kbd> lines is called a “refer block”. +<kbd>Refer</kbd> commands in a refer block should be entered one per +line, in lowercase letters, <i>with no initial period</i> (dot). +The actual commands depend on whether you want your references +</p> +<ul> +<li>in footnotes/endnotes</li> +<li>parenthetically inserted (in abbreviated form) into running text, +referring to a works-cited list (bibliography)</li> +<li>to generate a comprehensive bibliography (a reading list)</li> +</ul> + +<h5 id="fn-en-block" class="docs" style="font-size: 90%; margin-top: .25em;">Refer block for footnotes/endnotes</h5> + +<p style="margin-top: .5em;"> +If you want footnote or endnote references, place this block at +the <i>top</i> of your mom file. +</p> + +<div id="refer-block1" class="examples" style="margin-top: -.5em;"> +<div class="examples-container" style="padding-bottom: 1em;"> +<span class="pre"> +.R1 +no-label-in-text +no-label-in-reference +join-authors " and " ", " ", and " +database <full path to database> +.R2 +</span> +</div> +</div> +<p style="margin-top: .5em; font-size: 95%; line-height: 120%;"> +<kbd><full path to the database></kbd> +means the full path including the filename, e.g. +<kbd>/home/user/refer/my-database-file</kbd>. +</p> + +<h5 id="in-text-block" class="docs" style="font-size: 90%; margin-top: .25em;">Refer block for parenthetical insertions into running text</h5> + +<p style="margin-top: .5em;"> +If you want short, parenthetical insertions into running text, +referring to works cited in a bibliography, place this block at +the <i>top</i> of your mom file. +</p> + +<div id="refer-block2" class="examples" style="margin-top: -.5em;"> +<div class="examples-container" style="padding-bottom: 1em;"> +<span class="pre"> +.R1 +label "(A.n|Q)" +bracket-label " (" ")" ", " +join-authors ", and " ", " ", and " +move-punctuation +reverse A1 +sort A1Q1T1B1E1 +database <full path to database> +.R2 +</span> +</div> +</div> +<p style="margin-top: .5em; font-size: 95%; line-height: 120%;"> +<kbd><full path to the database></kbd> +means the full path including the filename, e.g. +<kbd>/home/user/refer/my-database-file</kbd>. +</p> + +<h5 id="bibliography-block" class="docs" style="font-size: 90%; margin-top: .25em;">Refer block for comprehensive bibliographies</h5> + +<p style="margin-top: .5em;"> +If you want to output an entire <kbd>refer</kbd> database, or +generate a comprehensive bibliography (a reading list) from a +database, place this block at the <i>bottom</i> of your mom file, +either prior to or immediately after invoking +<a href="#bibliography">BIBLIOGRAPHY</a>. +</p> + +<div id="refer-block3" class="examples" style="margin-top: -.5em;"> +<div class="examples-container" style="padding-bottom: 1em;"> +<span class="pre"> +.R1 +no-label-in-text +no-label-in-reference +join-authors ", and " ", " ", and " +sort A1Q1T1B1E1 +reverse A1 +database <full path to database> +.R2 +</span> +</div> +</div> + +<p style="margin-top: .5em; font-size: 95%; line-height: 120%;"> +<kbd><full path to the database></kbd> +means the full path including the filename, e.g. +<kbd>/home/user/refer/my-database</kbd>. +</p> + +<h4 id="placement-ref" class="docs">3. Tell mom where you want your references</h4> + +<p> +If you want references in footnotes, issue the instruction +<br/> +<span class="pre-in-pp"> + .FOOTNOTE_REFS +</span> +anywhere before the first citation in your file. Footnote markers +will be inserted into the text, and the bibliographic information +for the citation will appear as a footnote. +</p> + +<p> +If you want references in endnotes, issue the instruction +<br/> +<span class="pre-in-pp"> + .ENDNOTE_REFS +</span> +anywhere before the first citation in your file. Endnote markers +will be inserted into the text, and the bibliographic information +for the citation will appear as an endnote entry. +</p> + +<p> +Note that if you want references parenthetically inserted +into running text, referring to entries in a works-cited list +(bibliography) that <kbd>mom</kbd> and <kbd>refer</kbd> assemble +automatically, no special instructions are required. See +<a href="#bibliography-from-embedded">Generating a bibliography from parenthetical insertions</a> +for how to output the collected references. +</p> + +<p> +For outputting an entire <kbd>refer</kbd> database, or +generating a comprehensive reading list from a database, see the +macro +<a href="#bibliography">BIBLIOGRAPHY</a>. +</p> + +<h4 id="accessing-ref" class="docs">4. Accessing references in the database</h4> + +<p> +References are accessed by putting keywords from the desired database +record between two special <kbd>refer</kbd> commands: +<br/> +<span class="pre-in-pp"> + .[ +</span> +and +<br/> +<span class="pre-in-pp"> + .] +</span> +Keywords are any word, or set of words, that identify a database +record unambiguously. Thus, if you have only one database record for +the author Ray Bradbury, +<br/> +<span class="pre-in-pp"> + .[ + bradbury + .] +</span> +is sufficient. However, if your database contains several records +for books by Bradbury, say, <i>Fahrenheit 451</i> and <i>The +Martian Chronicles</i>, +“<kbd>bradbury 451</kbd>” and +“<kbd>bradbury martian</kbd>” would identify the two records unambiguously. +</p> + +<p> +A special database field identifier, <kbd>%K</kbd>, lets you create +unique keywords for database records to help clear up any ambiguity. +</p> + +<p> +Notice that you don’t have to worry about capitalization when +entering keywords. +</p> + +<h4 id="fn-en-recipe" class="docs">5. Entering footnote/endnote references</h4> + +<p> +Depending on which you have issued, a +<kbd><a href="#footnote-refs">.FOOTNOTE_REFS</a></kbd> +or an +<kbd><a href="#endnote-refs">.ENDNOTE_REFS</a></kbd> +command, entering references is done like this: +<br/> +<span class="pre-in-pp"> + .REF + .[ + keyword(s) + .] + .REF +</span> +If FOOTNOTE_REFS is in effect, the reference between the first +and second <kbd>.REF</kbd> will be treated as a footnote. If +ENDNOTE_REFS, it will be treated as an endnote. Endnote references +must be explicitly output with +<a href="docelement.html#ENDNOTES">ENDNOTES</a> +at the end of your file, before +<a href="tables-of-contents.html#TOC">TOC</a>. +</p> + +<div class="box-important"> +<p class="tip"> +<span class="important">Important:</span> +REF behaves identically to +<a href="docelement.html#footnote">FOOTNOTE</a> +and +<a href="docelement.html#endnote">ENDNOTE</a> +with respect to the use of the <kbd>\c</kbd> inline escape. Please +read the +<a href="docelement.html#footnote-note">HYPER IMPORTANT NOTE</a> +found in the document entry for FOOTNOTE (which also applies to +ENDNOTE). +</p> +</div> + +<h4 id="parenthetical-insertions" class="docs">6. Parenthetical insertions</h4> + +<p> +See +<a href="#parenthetical">Inserting parenthetical references into +text</a>. +</p> + +<h4 id="bibliography-from-embedded" class="docs">7. Generating a bibliography from parenthetical insertions</h4> + +<p> +To generate a bibliography from works cited by parenthetical +insertions in the text, put this at the end of your document, before +<kbd><a href="tables-of-contest.html#TOC">.TOC</a></kbd>. +<br/> +<span class="pre-in-pp"> + .BIBLIOGRAPHY + .[ + $LIST$ + .] + .BIBLIOGRAPHY OFF +</span> +</p> + +<h4 id="bibliography-recipe" class="docs">8. Generating a comprehensive bibliography</h4> + +<p> +You can also generate a comprehensive bibliography, which is to say a +bibliography containing more works than are actually cited (a +“reading list”), by placing references between +<kbd><a href="#bibliography">.BIBLIOGRAPHY</a></kbd> +and +<kbd><a href="#bibliography">.BIBLIOGRAPHY OFF</a></kbd>. +Once you have input the desired references, insert +<br/> +<span class="pre-in-pp"> + .[ + $LIST$ + .] +</span> +and follow it with <kbd>.BIBLIOGRAPHY OFF</kbd>. Study the +example below if you’re having trouble visualizing this. +</p> + +<div id="example-bibliography" class="examples" style="margin-top: -.5em;">Example bibliography</div> +<div class="examples-container" style="padding-bottom: 1em;"> +<span class="pre"> +.BIBLIOGRAPHY +.R1 +no-label-in-text +no-label-in-reference +join-authors ", and " ", " ", and " +sort A1Q1T1B1E1 +reverse A1 +database <full path to database> +.R2 +.[ +bradbury +.] +.[ +pratchett +.] +.[ +$LIST$ +.] +.BIBLIOGRAPHY OFF +</span> +</div> + +<p> +Alternatively, you can output an entire database as a +bibliography. Do the following at the end of your document, before +<kbd><a href="tables-of-contest.html#TOC">.TOC</a></kbd>. +<br/> +<span class="pre-in-pp"> + .BIBLIOGRAPHY + .R1 + no-label-in-text + no-label-in-reference + join-authors ", and " ", " ", and " + sort A1Q1T1B1E1 + reverse A1 + bibliography <full path to database> + .R2 + .BIBLIOGRAPHY OFF +</span> +</p> + +<h4 id="invoking-ref" class="docs">9. Invoking groff with mom and refer</h4> + +<p> +So, now you’ve got a document formatted properly to use +references processed with <kbd>refer</kbd>, what do you do to output +the document? +</p> + +<p> +It’s simple. Pass the <kbd>-R</kbd> flag to pdfmom or groff, +like this: +<br/> +<span class="pre-in-pp"> + pdfmom -R <filename> ... +</span> +</p> +</div> + +<div class="rule-medium" style="margin-top: 1em;"><hr/></div> + +<h2 id="mla" class="docs">MLA (Modern Language Association) style</h2> + +<h3 id="ref-styles" class="docs">Types of references (endnote, footnote, or embedded in text)</h3> + +<p> +MLA allows for three types of references, or referencing styles: +</p> +<ul style="margin-top: -.5em;"> + <li>short, parenthetical references in the text, linked to a + works-cited list (bibliography) at the end of the document</li> + <li>footnote references</li> + <li>endnote references</li> +</ul> + +<p style="margin-top: -.5em;"> +There are significant differences between the way footnote/endnote +references should be formatted, and the formatting style of +bibliographies. One example is that footnote/endnote references +should have their first lines indented, whereas bibliographic +references should have their second lines indented. Fortunately, +with mom, there’s no need to concern yourself with the differences; +they’re taken care of automatically. +</p> + +<p> +In terms of inserting references into your documents, +footnote/endnote references are input in a manner similar to +entering any other kind of +<a href="docelement.html#footnote-into">footnote</a> +or +<a href="docelement.html#endnote-into">endnote</a>. +Parenthetical references, however, need to be handled differently. +See the next section. +</p> + +<h3 id="parenthetical" class="docs">Inserting parenthetical references into the text</h3> + +<p> +MLA style prefers restricting the information in parenthetical +references to the barest minimum needed to identify works +in the works-cited list (the bibliography). Typically, a +parenthetical insertion is just the author’s last name +followed by the page number of the cited work (if only one work by +that author is cited), or by the author, a shortened title of the +work, and the page number (if more than one work is cited). +</p> + +<p> +This necessitates a slightly fiddly way of entering parenthetical +references, though not by any means difficult or hard to make sense +of. +</p> + +<p> +The <kbd>refer</kbd> block suggested +<a href="#refer-block2">here</a> +for parenthetical references prints only the author’s +last name from the database record identified by your keywords +(the <kbd>label</kbd> command), surrounded by parentheses (the +<kbd>bracket-label</kbd> command). Therefore, assuming you are +citing Ray Bradbury’s <i>The Martian Chronicles</i>, and it is +the only work by Bradbury mentioned in the text, +<br/> +<span class="pre-in-pp"> + ...end of sentence. + .[ + martian chronicles + .] + A new sentence... +</span> +will insert “<span style="font-family: times; font-size: 105%; font-weight: bold">...end of sentence (Bradbury). A new sentence...</span>” into the text. +<i>The Martian Chronicles</i> will be added +to the works-cited list generated at the end of the document if it +is not already present as the result of an earlier reference. +</p> + +<p> +If you need a page number to identify where in <i>The Martian +Chronicles</i> to find a specific quote +<br/> +<span class="pre-in-pp"> + "...aluminum roaches and iron crickets." + .[ + [ martian chronicles + .] 168) + A new sentence... +</span> +results in <span style="font-family: times; font-size: 105%; font-weight: bold">“...aluminum roaches and iron crickets.” (Bradbury 168) A new sentence...</span>” +(which is excruciatingly correct MLA style). The +“<kbd>[</kbd>” before <kbd>martian chronicles</kbd> tells +refer to print the opening parenthesis; any text immediately +following the “<kbd>.]</kbd>”, including spaces, +<i>replaces</i> the closing parenthesis. (Notice that you have to +add the closing parenthesis yourself after the page number.) +</p> + +<p> +If your document cites more than one work by Bradbury and you need +a title and page number in addition to the author’s name in +the inline reference, +<br/> +<span class="pre-in-pp"> + "...aluminum roaches and iron crickets." + .[ + [ bradbury martian + .], \fIChronicles\fP 168) + A new sentence... +</span> +will produce “<span style="font-family: times; font-size: 105%; font-weight: bold">“...aluminum roaches and iron crickets.” (Bradbury, <i>Chronicles</i> 168) A new sentence...</span>”. +</p> + +<div class="examples-container" style="margin-top: 1.5em; margin-bottom: 1.5em;"> +<h3 class="docs">The <span style="text-transform: none">‘label’</span><span style="text-transform: uppercase"> and</span> <span style="text-transform: none">‘bracket-label’</span><span style="text-transform: uppercase"> commands</span></h3> + +<p> +The <kbd>label</kbd> and <kbd>bracket-label</kbd> commands in +the refer block allow you to customize what information goes +into parenthetical references, and how they should be formatted. +<kbd>label</kbd> dictates which fields from the database record +to print and how to punctuate them. <kbd>bracket-label</kbd> +controls the bracketing style. Users are encouraged to consult +<kbd>man refer</kbd> for usage. +</p> + +<p> +Here’s an example of how to set up APA-style references, which +require the author and date of publication, optionally with a page +number or range of pages. +<br/> +<span class="pre-in-pp"> + .R1 + label "(A.n|Q) ', ' D.y" + bracket-label " (" ")" ", " + join-authors ", and " ", " ", and " + move-punctuation + reverse A1 + sort A1Q1T1B1E1 + database /home/peter/Groff-mom/Testing/Refer/refer-database + .R2 +</span> +Assuming a reference to a work by Ursula Leguin published in 1980 +<br/> +<span class="pre-in-pp"> + .[ + leguin + .] +</span> +produces +<span style="font-family: times; font-size: 105%; font-weight: bold"> +(Leguin, 1980) +</span>. +If a page number is also required +<br/> +<span class="pre-in-pp"> + .[ + [ leguin + .], p. 73) +</span> +produces +<span style="font-family: times; font-size: 105%; font-weight: bold">(Leguin, 1980, p. 73)</span>. +</p> +</div> + +<div class="rule-medium" style="margin-top: 1em;"><hr/></div> + +<h2 id="database" class="docs">The refer database</h2> + +<h3 id="database-intro" class="docs">Introduction</h3> + +<p style="margin-top: .5em;"> +The heart and soul of <kbd>refer</kbd> is the bibliographic +database. Knowing how to create records (i.e. the entries for works +cited in a document) is largely a question matching data (author, +title, publisher, etc) with the correct field identifier. For +example, if you’re citing from a scholarly journal, you need to know +that <kbd>%J</kbd> is the field identifier for journal names and +<kbd>%N</kbd> is the field identifier for the journal number. Use +the +<a href="#fields-quick">Quick list of field identifiers</a> +as your guide. +</p> + +<h3 id="database-rules" class="docs">The rules</h3> + +<p style="margin-top: .5em;"> +Entering the data correctly is also important. Fortunately, there +are very few rules, and those there are make sense. In a nutshell: +</p> +<ul style="margin-top: -.5em;"> + <li>enter the data in each field in natural order; author John Smith is + “John Smith”, editor Jane Doe is “Jane Doe”</li> + <li>capitalize all proper nouns and words in titles as you expect + to see them; otherwise, use lowercase</li> + <li>use no terminating punctuation unless required; typically, + required punctuation is the period after a shortform + (“ed.” or “eds.”, “Jr.”, + etc) or a question mark or exclamation mark at the end of a + title</li> + <li>if part of a field needs to be set off in single-quotes, use + <kbd>\[oq]</kbd> and <kbd>\[cq]</kbd> (openquote, closequote) rather than the + single-quote (or apostrophe) character on your keyboard</li> + <li>if part of a field needs to be forced into italics, use the + escapes <kbd><span class="nobr">\*[IT]</span></kbd> and + <kbd><span class="nobr">\*[PREV]</span></kbd>; if the italicized portion + concludes the field, omit <kbd><span class="nobr">\*[PREV]</span></kbd></li> + <li>if you require characters with accents, ligatures or special + symbols, use groff’s “named” glyphs (e.g. + <kbd>\['e]</kbd> for <kbd>é</kbd>); a full list can be found in + <kbd>man groff_char</kbd></li> +</ul> + +<h3 id="fields-quick" class="docs" style="margin-top: 1.25em; margin-bottom: .5em;">Quick guide to field identifiers <span style="text-transform: none;">(click on any that are links for more information)</span></h3> + +<div class="examples-container" style="padding-bottom: 1em;"> +<span class="pre"> +<a class="quick" href="#A">%A</a> author – records may contain multiple authors, + one per line +<a class="quick" href="#Q">%Q</a> non-human author – corporate author, e.g. National Geographic; + may also be used for exceptional reference types +<a class="quick" href="#m">%m</a> multiple authors – whenever "et al." is desirable +<a class="quick" href="#i">%i</a> idem – multiple works by the same author +<a class="quick" href="#p">%p</a> post-author – post-author information (e.g. appendix, + foreword, letter) +%T title – primary title (of a book) or the + title of an article (within a scholarly + journal or a magazine) +%B book title – when %T contains the title of an article; +<a class="quick" href="#q">%q</a> force quote – force a title into double-quotes +%t reprint title – if different from a work's original title +%b main author – when citing a preface, foreword, + introduction, or afterword, the author of + the complete original work +<a class="quick" href="#E">%E</a> editor – records may contain multiple editors, + one per line +<a class="quick" href="#l">%l</a> translator – if more than one translator, all the + names +%r translator – if tr. and ed. are one in the same + and editor +%M magazine or – when %T contains the title of an article + newspaper +%J journal – when %T contains the title of an article +%e edition – number or name of an edition + (e.g. Second, 2nd, Collector's, etc.) +%S series – series name of books or journals +%V volume – volume number (of books) +%N journal number – journal or magazine number +%R report number – technical report number +%G gov’t. – government ordering number +<a class="quick" href="#O">%O</a> other – information for which there is no appropriate + field letter +<a class="quick" href="#C">%C</a> city – city of publication +%I publisher – publisher +%D date – publication date +<a class="quick" href="#d">%d</a> original + publication date – if different from date of publication +<a class="quick" href="#P">%P</a> page(s) – page number or range +<a class="quick" href="#n">%n</a> annotation – annotation to the reference +%s site name – for internet references, the website name +%c content – for internet references, the source of + the material (e.g. Web or Email); for websites, + the content, if unclear +%o organization – for internet sites, the organization, group + or sponsor of the site +%a access date – for internet sites, the date of access +%u URL – for internet sites, the full URL +<a class="quick" href="#K">%K</a> keywords – words that help clear up ambiguities in + the database +</span> +</div> + +<h3 id="fields-specifics" class="docs">Field identifiers: specifics, usage and examples</h3> + +<h4 id="A" class="docs fields">%A – author field</h4> + +<p> +For multiple authors, enter each in a separate <kbd>%A</kbd> +field in the order in which they should appear. If the author on +the title page is the editor (say, a book of short stories edited by +Ray Bradbury), add <kbd>, ed.</kbd> to the end of the +<kbd>%A</kbd> field, like this: +<br/> +<span class="pre-in-pp"> + %A Ray Bradbury, ed. +</span> +Do not use the <kbd>%E</kbd> field in these instances. If the work +has several such editors, enter each in a separate <kbd>%A</kbd> +field, as for multiple authors, and add <kbd>, eds.</kbd> to the +last one, like this: +<br/> +<span class="pre-in-pp"> + %A Jane Dearborne + %A Bill Parsons, eds. +</span> +</p> + +<h4 id="Q" class="docs fields">%Q – exceptional entries</h4> + +<p> +Sometimes, a work has no author or title information, for example a +book review in a newspaper. In such cases, use <kbd>%Q</kbd>, like +this: +<br/> +<span class="pre-in-pp"> + %Q Rev. of \*[IT]Mean Streets Omnibus\*[PREV], ed. Raymond Hammett + %M Times Literary Supplement + %D 7 July 1972 +</span> +</p> + +<h4 id="m" class="docs fields">%m – multiple authors (et al.)</h4> + +<p> +Whenever it’s desirable to abbreviate a list of authors with +“et al.” enter it in the <kbd>%m field</kbd>, like this: +<br/> +<span class="pre-in-pp"> + %A Paul Lauter + %A Doug Scofield + %m et al. +</span> +</p> + +<h4 id="i" class="docs fields">%i – idem</h4> + +<p> +Whenever there are several works by the same author, fill out the +<kbd>%A</kbd> field with the author’s name and follow it with the +<kbd>%i idem</kbd>, like this: +<br/> +<span class="pre-in-pp"> + %A Jonathon Schmidt + %i idem +</span> +Per MLA style, the author’s name will be replaced by a long dash. +</p> + +<p> +If it’s necessary to state the role the author served (say, +editor or translator), fill out the <kbd>%i</kbd> field with the +information minus <kbd>idem</kbd>, like this: +<br/> +<span class="pre-in-pp"> + %A Ray Bradbury + %i ed. + %T Timeless Stories for Today and Tomorrow +</span> +</p> + +<h4 id="p" class="docs fields">%p – post-author information</h4> + +<p> +When citing from a preface, foreword, introduction, afterword, +or appendix, MLA requires that the information come between the +author’s name and the work’s title, like this: +<br/> +<span class="pre-in-pp"> + %A Martin Packham, Jr. + %p appendix + %T Why the West was Won +</span> +Do not capitalize the first word in the <kbd>%p</kbd> field unless +it is a proper noun. +</p> + +<h4 id="q" class="docs fields">%q – force title into double-quotes</h4> + +<p> +Occasionally, you may not be able to use <kbd>%T</kbd> for the +title because doing so will cause it to come out in italics when +double-quotes are called for. An example of this is when citing +from a dissertation. Use <kbd>%q</kbd> to get around the problem, +like this: +<br/> +<span class="pre-in-pp"> + %A Carol Sakala + %q Maternity Care Policy in the United States + %O diss., Boston U, 1993 +</span> +</p> + +<h4 id="E" class="docs fields">%E – editor</h4> + +<p> +Use this only if the author and the editor are not one in the same, +e.g. +<br/> +<span class="pre-in-pp"> + %A Geoffrey Chaucer + %T The Works of Geoffrey Chaucer + %E F. W. Robinson +</span> +</p> + +<h4 id="l" class="docs fields">%l – translator</h4> + +<p> +If there is more than one translator, enter all the names, with +appropriate conjunctions and punctuation, like this: +<br/> +<span class="pre-in-pp"> + %A Feodor Dostoevsky + %T Crime and Punishment + %l Jessie Coulson, Marjorie Benton, and George Bigian +</span> +</p> + +<h4 id="O" class="docs fields">%O – other</h4> + +<p> +Occasionally, MLA requires additional information after the title +but before the publication data (city/publisher/date), for instance, +the number of volumes in a series, or the fact that the work cited +is a dissertation. Here are two examples: +<br/> +<span class="pre-in-pp"> + %A Arthur M. Schlesinger + %T History of U.S. Political Parties + %O 4 vols. + %C New York + %I Chelsea + %D 1973 + + %A Carol Sakala + %q Maternity Care Policy in the United States + %O diss., Boston U, 1993 +</span> +Do not capitalize the first word of the <kbd>%O</kbd> field unless +it is a proper noun. +</p> + +<p> +Generally, consider <kbd>%O</kbd> a catch-all for information that +does not match the criterion of any existing field identifier. +</p> + +<h4 id="C" class="docs fields">%C – city</h4> + +<p> +Normally, <kbd>%C</kbd> takes the name of the city of publication, +and that’s all. In the case of a republished book, if new material +has been added, put such information in the <kbd>%C</kbd> +field, like this: +<br/> +<span class="pre-in-pp"> + %A Theodore Dreiser + %T Sister Carrie + %d 1900 + %C Introd. E. L. Doctorow, New York +</span> +</p> + +<h4 id="d" class="docs fields">%d – original date of publication</h4> + +<p> +Normally, all that is required in the <kbd>%d</kbd> field is the +original date of publication. However, if supplementary original +publication data is desired, include it in the field, like this: +<br/> +<span class="pre-in-pp"> + %A Kazuo Ishiguro + %T The Remains of the Day + %d London: Faber, 1989 + %C New York + %I Knopf + %D 1990 +</span> +</p> + +<h4 id="K" class="docs fields">%K – keywords</h4> + +<p> +<kbd>Refer</kbd> hates ambiguity, and complains when encountering +it. Ambiguities result from the duplication of any word in more +than one database record when that word is used to identify a +reference in your input file. Use <kbd>%K</kbd> to create unique +keywords found nowhere else in the database. +</p> + +<p> +Imagine, for example, that your database contains records for +Ray Bradbury’s <i>The Illustrated Man</i>, another record for +<i>The Illustrated Bradbury</i> and a third for <i>Bradbury, +Illustrated</i>. <kbd>%K</kbd> can be used to clear up any +ambiguities by assigning a unique word to each record, for example +<kbd>%K ill-man</kbd> for the first, <kbd>%K ill-brad</kbd> for the +second, and <kbd>%K brad-ill</kbd> for the third. +</p> + +<h4 id="P" class="docs fields">%P – pages</h4> + +<p> +When citing page numbers, which is often the case with footnotes +and endnotes, it is not necessary to put the numbers in the database +records. The <kbd>%P</kbd> field can be added underneath the +keyword(s) in the <kbd>.[</kbd> / <kbd>.]</kbd> entries in your +input file, allowing you to recycle database records. For example, +<br/> +<span class="pre-in-pp"> + %A Frye + %T Anatomy + %K frye-anat +</span> +could be your short record for Northrop Frye’s <i>The Anatomy of +Criticism</i>. Any time you wanted to cite a particular page or +range of pages from that work in a footnote or endnote, you can +put +<br/> +<span class="pre-in-pp"> + .REF + .[ + frye-anat + %P 67-8 + .] + .REF +</span> +in your input file, and have it show up with the correct page(s). +</p> + +<h4 id="n" class="docs fields">%n – annotations</h4> + +<p> +Annotations come at the very end of references. Capitalize all +words that require it, including, for bibliographic references (but not +for footnotes/endnotes) the first. +</p> + +<div class="rule-short"><hr/></div> + +<div class="macro-list-container"> +<h3 id="index-ref" class="macro-list">The bibliography and reference macros</h3> +<ul class="macro-list"> + <li><a href="#ref">REF</a> – begin/end a <kbd>refer</kbd> reference that will go in a footnote or endnote</li> + <li><a href="#footnote-refs">FOOTNOTE_REFS</a> – instruct mom to put REFs in footnotes</li> + <li><a href="#endnote-refs">ENDNOTE_REFS</a> – instruct mom to put REFs in endnotes</li> + <li><a href="#indent-refs">INDENT_REFS</a> – manage indenting of references, per MLA standards</li> + <li><a href="#hyphenate-refs">HYPHENATE_REFS</a> – enable/disable hyphenation of references</li> + <li><a href="#bibliography">BIBLIOGRAPHY</a> – begin a bibliography</li> + <li><a href="#bibliography-type">BIBLIOGRAPHY_TYPE</a> – plain, or numbered list bibliography</li> + <li><a href="#biblio-control">Bibliography control macros and defaults</a></li> +</ul> +</div> + +<!-- -REF- --> + +<div class="macro-id-overline"> +<h3 id="ref" class="macro-id">Begin/end a reference that goes in a footnote or endnote</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>REF</b> +</div> + +<p> +The macro REF tells mom that what follows is +<kbd>refer</kbd>-specific, a keyword-identified reference to a +<kbd>refer</kbd> database record. Depending on whether you’ve issued +a +<kbd><a href="#footnote-refs">.FOOTNOTE_REFS</a></kbd> +or +<kbd><a href="#endnote-refs">.ENDNOTE_REFS</a></kbd> +instruction, the reference will be formatted and placed in a +footnote, or collected for output in the endnotes. Parenthetical +insertion of references into the text do not require +<kbd>.REF</kbd> (see +<a href="#parenthetical">Inserting parenthetical references into the text</a>.) +</p> + +<p> +Before you use REF, you must create a <kbd>refer</kbd> block +containing <kbd>refer</kbd> commands (see +<a href="#rcommands-ref">Required refer commands</a> +in the tutorial, above). +</p> + +<p> +REF usage always looks like this: +<br/> +<span class="pre-in-pp"> + .REF + .[ + keyword(s) + .] + .REF +</span> +Notice that REF “brackets” the <kbd>refer</kbd> instructions, +and never takes an argument. +</p> + +<p> +What REF really is is a convenience. One could, for example, put a +reference in a footnote by doing +<br/> +<span class="pre-in-pp"> + .FOOTNOTE + .[ + keyword(s) + .] + .FOOTNOTE OFF +</span> +However, if you have a lot of references going into footnotes (or +endnotes), it’s much shorter to type <kbd>.REF/.REF</kbd> +than <kbd>.FOOTNOTE/.FOOTNOTE OFF</kbd>. It also helps you +distinguish—visually, in your input file—between +footnotes (or endnotes) which are references, and footnotes (or +endnotes) which are explanatory, or expand on the text. +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="note">Note:</span> +If you’re using REF to put references in footnotes and your +footnotes need to be indented, you may (indeed, should) pass REF the +same arguments used to indent footnotes. See +<a href="docelement.html#footnote">FOOTNOTE</a>. +</p> + +<p class="tip-bottom"> +<span class="additional-note">Additional note:</span> +REF behaves identically to +<a href="docelement.html#footnote">FOOTNOTE</a> +or +<a href="docelement.html#footnote">ENDNOTE</a>, +so please read the HYPER IMPORTANT NOTE found in the document entry +for +<a href="docelement.html#footnote-note">FOOTNOTE</a> +and/or +<a href="docelement.html#endnote-note">ENDNOTE</a> +for instructions on correct entry of text preceding and following REF. +</p> +</div> + +<!-- -FOOTNOTE_REFS- --> + + +<div class="macro-id-overline"> +<h3 id="footnote-refs" class="macro-id">Instruct mom to put references in footnotes</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>FOOTNOTE_REFS</b> +</div> + +<p> +FOOTNOTE_REFS is an instruction to +<a href="#ref">REF</a>, +saying, “put all subsequent references bracketed by the REF +macro into footnotes.” You invoke it by itself, with no +argument. +</p> + +<p> +When FOOTNOTE_REFS is in effect, regular footnotes, (i.e. +those introduced with <kbd>.FOOTNOTE</kbd> and terminated with +<kbd>.FOOTNOTE OFF</kbd>) continue to behave normally. +</p> + +<p> +You may switch between FOOTNOTE_REFS and +<a href="#endnote-refs">ENDNOTE_REFS</a> +at any time. +</p> + +<p> +By default, FOOTNOTE_REFS sets the +<a href="docelement.html#footnote-marker-style">FOOTNOTE_MARKER_STYLE</a> +to <kbd>NUMBER</kbd> (i.e. superscript numbers). You may change +change that if you wish by invoking FOOTNOTE_MARKER_STYLE, with the +argument you want, after FOOTNOTE_REFS. +</p> + +<p> +If you have a lot of footnote references, and are identifying +footnotes by line number rather than by markers in the text, you may +want to enable +<a href="docelement.html#footnotes-run-on">FOOTNOTES_RUN_ON</a> +in conjunctions with FOOTNOTE_REFS. +</p> + +<!-- -ENDNOTE_REFS- --> + +<div class="macro-id-overline"> +<h3 id="endnote-refs" class="macro-id">Instruct mom to put references in endnotes</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>ENDNOTE_REFS</b> +</div> + +<p> +ENDNOTE_REFS is an instruction to +<a href="#ref">REF</a>, +saying, “add all subsequent references bracketed by the REF +macro to endnotes.” You invoke it by itself, with no argument. +</p> + +<p> +When ENDNOTE_REFS is in effect, mom continues to format regular +endnotes, (i.e. those introduced with <kbd>.ENDNOTE</kbd> and +terminated with <kbd>.ENDNOTE OFF</kbd>) in the normal way. +</p> + +<p> +You may switch between ENDNOTE_REFS and +<a href="#footnote-refs">FOOTNOTE_REFS</a> +at any time. +</p> + +<!-- -INDENT_REFS- --> + +<div class="macro-id-overline"> +<h3 id="indent-refs" class="macro-id">Manage indenting of references, per MLA standards</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>INDENT_REFS</b> <kbd class="macro-args">FOOTNOTE | ENDNOTE | BIBLIO <indent> </kbd> +</div> + +<p class="requires"> +• <kbd style="font-style: normal;"><indent></kbd> requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +MLA-style requires that footnote or endnote references should +have their first lines indented, whereas bibliographic references +should have their second and subsequent lines indented. Thus, if +you invoke INDENT_REFS with a first argument of <kbd>FOOTNOTE</kbd> +or <kbd>ENDNOTE</kbd>, the value you give to +<kbd><indent></kbd> sets the indent of the first line for +those types of references; if you invoke it with <kbd>BIBLIO</kbd>, +the value you give <kbd><indent></kbd> sets the indent of +second and subsequent lines in bibliographies. +</p> + +<p> +By default, the indent for all three types of references is 1/2-inch +for +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPEWRITE</kbd></a> +and 2 +<a href="definitions.html#em">ems</a> +for +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPESET</kbd></a>. +</p> + +<p> +If you’d like to change the indent for footnote, endnote or +bibliography references, just invoke <kbd>.INDENT_REFS</kbd> with +a first argument saying which one you want the indent changed for, and +a second argument saying what you’d like the indent to be. +For example, if you want the second-line indent of references on a +bibliography page to be 3 +<a href="definitions.html#picas-points">picas</a>, +<br/> +<span class="pre-in-pp"> + .INDENT_REFS BIBLIO 3P +</span> +is how you’d set it up. +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="tip">Tip:</span> +If you are identifying endnotes by line number +(<a href="docelement.html#endnote-marker-style">ENDNOTE_MARKER_STYLE <kbd>LINE</kbd></a>) +and have instructed mom to put references bracketed by +<kbd><a href="#ref">.REF</a></kbd> +into endnotes (with +<a href="#endnote-refs">ENDNOTE_REFS</a>), +you will almost certainly want to adjust the second-line indent for +references in endnotes, owing to the way mom formats line-numbered +endnotes. Study the output of such documents to see whether an +indent adjustment is required. +</p> + +<p> +The same advice applies to references in endnotes when you have enabled +<br/> +<span class="pre-in-pp"> + <a href="docelement.html#endnote-numbers-align-left">.ENDNOTE_NUMBERS_ALIGN_LEFT</a> +</span> +in favour of mom’s default, which is to align them right. +Study the output to determine what size of second-line indent works +best. +</p> + +<p class="tip-bottom"> +<i>(Frankly, endnote references formatted in MLA-style combined with +left-aligned endnote numbers is a no-win situation, and so is best +avoided. Wherever you set the indent, you’ll end up with the +endnote numbers appearing to hang into the left margin, so you might +as well have them hang, as is the case with +<kbd style="font-style: normal;">.ENDNOTE_NUMBERS_ALIGN_RIGHT</kbd>.</i> – Ed.) +</p> +</div> + +<!-- -HYPHENATE_REFS- --> + +<div class="macro-id-overline"> +<h3 id="hyphenate-refs" class="macro-id">Enable/disable hyphenation of references</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>HYPHENATE_REFS</b> <kbd class="macro-args"><toggle></kbd> +</div> + +<p> +If you have hyphenation turned on for a document (see +<a href="typesetting.html#hy">HY</a>), +and in most cases you probably do, mom will hyphenate references +bracketed by the +<a href="#ref">REF</a> +macro. Since references typically contain quite a lot of proper +names, which shouldn’t be hyphenated, you may want to disable +hyphenation for references. +</p> + +<p> +HYPHENATE_REFS is a toggle macro; invoking it by itself will turn +automatic hyphenation of REF-bracketed references on (the default). +Invoking it with any other argument (<kbd>OFF</kbd>, <kbd>NO</kbd>, +<kbd>X</kbd>, etc.) will disable automatic hyphenation for +references bracketed by REF. +</p> + +<p> +An alternative to turning reference hyphenation off is to prepend +to selected proper names in your <kbd>refer</kbd> database +the groff +<a href="definitions.html#discretionaryhyphen">discretionary hyphen</a> +character, <kbd>\%</kbd>. (See +<a href="#ref-disc-hy">here</a> +in the tutorial for an example.) +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +References embedded in the body of a document are considered part of +<a href="definitions.html#running">running text</a>, +and are hyphenated (or not) according to whether hyphenation is +turned on or off for running text. Therefore, if you want to +disable hyphenation for such references, you must do so temporarily, +with +<a href="typesetting.html#hy">HY</a>, +like this: +<br/> +<span class="pre-in-pp"> + .HY OFF + .[ + keyword(s) + .] + .HY +</span> +Alternatively, sprinkle your database fields liberally with +<kbd>\%</kbd>. +</p> +</div> + +<!-- -BIBLIOGRAPHY- --> + +<div class="macro-id-overline"> +<h3 id="bibliography" class="macro-id">Begin a bibliography</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>BIBLIOGRAPHY</b> <kbd class="marco-args">toggle</kbd> +</div> + +<p> +To append a bibliography to your document, whether of references +inserted parenthetically into text or a comprehensive reading list +derived from a large <kbd>refer</kbd> database, all you need +do is invoke <kbd>.BIBLIOGRAPHY</kbd>. <kbd>.BIBLIOGRAPHY</kbd> +breaks to a new page, prints the title (BIBLIOGRAPHY by default, but +that can be changed), and awaits <kbd>refer</kbd> instructions. How +to create bibliographies is covered in the tutorial section, +<a href="#bibliography-from-embedded">Generating a bibliography from parenthetical insertions</a> +and +<a href="#bibliography-recipe">Generating a comprehensive bibliography</a>. +When all the required data has been entered, type +<br/> +<span class="pre-in-pp"> + .BIBLIOGRAPHY OFF +</span> +to complete the bibliography. +</p> + +<p> +See the +<a href="#biblio-control">Bibliography control macros and defaults</a> +for macros to tweak, design and control the appearance of +bibliography pages. +</p> + +<!-- -BIBLIOGRAPHY_TYPE- --> + +<div class="macro-id-overline"> +<h3 id="bibliography-type" class="macro-id">Plain, or numbered list bibliography</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>BIBLIOGRAPHY_TYPE</b> <kbd class="macro-args">PLAIN | LIST [ <list separator> ] [ <list prefix> ]</kbd> +</div> + +<p> +Mom offers two styles of bibliography output: plain, or numbered +list style. With the argument, <kbd>PLAIN</kbd>, bibliography entries are output +with no enumerators. With the argument, <kbd>LIST</kbd>, each entry is numbered. +</p> + +<p> +The two optional arguments, <kbd><list separator></kbd> +and <kbd><list prefix></kbd> have the same meaning as the +equivalent arguments to +<a href="docelement.html#list">LIST</a> +(i.e. <kbd><separator></kbd> and <kbd><prefix></kbd>). +</p> + +<p> +You may enter the BIBLIOGRAPHY_TYPE either before or after +<kbd>.BIBLIOGRAPHY</kbd>. It must, however, always come before +any <kbd>refer</kbd> commands. See +<a href="#bibliography-from-embedded">Generating a bibliography from parenthetical insertions</a> +and +<a href="#bibliography-recipe">Generating a comprehensive bibliography</a>. +</p> + +<p> +Mom’s default BIBLIOGRAPHY_TYPE is <kbd>PLAIN</kbd>. +</p> + +<!-- -BIBLIO_CONTROL- --> + +<div class="defaults-container" style="background-color: #ded4bd; border: none;"> +<h3 id="biblio-control" class="docs defaults">Bibliography control macros and defaults</h3> + +<p style="margin-top: .25em; margin-left: 9px;"> +Mom processes bibliography pages in a manner very similar to the +way she processes endnotes pages. The bibliography page control +macros, therefore, behave in the same way as their endnotes pages +equivalents. +</p> + +<ol style="margin-top: -.5em; padding-bottom: .5em;"> + <li><a href="#biblio-general"><b>General bibliography style control</b></a> + <ul style="margin-left: -.5em;"> + <li><a href="#biblio-style">Base family/font/quad</a></li> + <li><a href="#biblio-pt-size">Base point size</a></li> + <li><a href="#biblio-lead">Leading</a></li> + <li><a href="#biblio-spacing">Adjust the space between bibliography entries</a></li> + <li><a href="#singlespace-biblio">Singlespace bibliographies (for TYPEWRITE only)</a></li> + <li><a href="#biblio-no-columns">Turning off column mode during bibliography output</a></li> + </ul></li> + <li><a href="#biblio-pagination"><b>Pagination of bibliographies</b></a> + <ul style="margin-left: -.5em;"> + <li><a href="#biblio-pagenum-style">Page numbering style</a></li> + <li><a href="#biblio-first-pagenumber">Setting the first page number of bibliographies</a></li> + <li><a href="#biblio-no-first-pagenum">Omitting a page number on the first page of bibliographies</a></li> + <li><a href="#suspend-pagination">Suspending pagination during bibliography output</a></li> + </ul></li> + <li><a href="#biblio-header-control"><b>Header/footer control</b></a> + <ul style="margin-left: -.5em;"> + <li><a href="#biblio-modify-hdrftr">Modifying what goes in bibliography headers/footers</a></li> + <li><a href="#biblio-hdrftr-center">Header/footer centre string when doctype is CHAPTER</a></li> + <li><a href="#biblio-allows-headers">Allow headers on bibliography pages</a></li> + </ul></li> + <li><a href="#biblio-main-title"><b>Bibliography first-page title control</b></a> + <ul> + <li><a href="#biblio-string">Title string</a></li> + <li><a href="#biblio-string-control">Title string control macros and defaults</a></li> + <li><a href="#biblio-string-placement">Title string placement</a></li> + <li><a href="#biblio-string-underline">Title string underscoring</a></li> + <li><a href="#biblio-string-caps">Title string capitalization</a></li> + </ul></li> +</ol> +</div> + +<h4 id="biblio-general" class="docs" style="margin-top: -1.5em; margin-bottom: .5em;">1. General bibliography page style control</h4> + +<h5 id="biblio-style" class="docs" style="margin-top: 0; margin-bottom: .5em; margin-left: .5em;">• Base family/font/quad</h5> + +<div class="defaults-container" style="padding-bottom: 8px;"> +<p class="defaults" style="padding-top: 6px;"> +See +<a href="#control-macro-args">Arguments to the control macros</a>. +</p> +<span class="pre defaults"> +.BIBLIOGRAPHY_FAMILY default = prevailing document family; default is Times Roman +.BIBLIOGRAPHY_FONT default = roman +.BIBLIOGRAPHY_QUAD* default = justified + +*Note: BIBLIOGRAPHY_QUAD must be set to either L (LEFT) or J (JUSTIFIED); + R (RIGHT) and C (CENTER) will not work. +</span> +</div> + +<!-- -BIBLIO_PT_SIZE- --> + +<h5 id="biblio-pt-size" class="docs" style="margin-top: -1.5em; margin-bottom: .5em; margin-left: .5em;">• Base point size</h5> + +<div class="box-macro-args"> +Macro: <b>BIBLIOGRAPHY_PT_SIZE</b> <kbd class="macro-args"><base type size of bibliography></kbd> +</div> + +<p> +Unlike most other control macros that deal with size of document +elements, BIBLIOGRAPHY_PT_SIZE takes as its argument an absolute +value, relative to nothing. Therefore, the argument represents the +size of bibliography type in +<a href="definitions.html#picaspoints">points</a>, +unless you append an alternative +<a href="definitions.html#unitofmeasure">unit of measure</a>. +For example, +<br/> +<span class="pre-in-pp"> + .BIBLIOGRAPHY_PT_SIZE 12 +</span> +sets the base point size of type on the bibliography page to 12 +points, whereas +<br/> +<span class="pre-in-pp"> + .BIBLIOGRAPHY_PT_SIZE .6i +</span> +sets the base point size of type on the bibliography page to 1/6 of an +inch. +</p> + +<p> +The type size set with BIBLIOGRAPHY_PT_SIZE is the size of type used +for the text of the bibliographies, and forms the basis from which +the point size of other bibliography page elements is calculated. +</p> + +<p> +The default for +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPESET</kbd></a> +is 12.5 points (the same default size used in the body of the +document). +</p> + +<!-- -BIBLIO_LEAD- --> + +<h5 id="biblio-lead" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">• Leading</h5> + +<div class="box-macro-args"> +Macro: <b>BIBLIOGRAPHY_LEAD</b> <kbd class="macro-args"><base leading of bibliographies> [ ADJUST ]</kbd> +</div> + +<p class="requires"> +• Does not require a <a href="definitions.html#unitofmeasure">unit of measure</a>; points is assumed +</p> + +<p> +Unlike most other control macros that deal with leading of document +elements, BIBLIOGRAPHY_LEAD takes as its argument an absolute value, +relative to nothing. Therefore, the argument represents the +<a href="definitions.html#leading">leading</a> +of bibliographies in +<a href="definitions.html#picaspoints">points</a> +unless you append an alternative +<a href="definitions.html#unitofmeasure">unit of measure</a>. +For example, +<br/> +<span class="pre-in-pp"> + .BIBLIOGRAPHY_LEAD 14 +</span> +sets the base leading of type on the bibliography page to 14 +points, whereas +<br/> +<span class="pre-in-pp"> + .BIBLIOGRAPHY_LEAD .5i +</span> +sets the base leading of type on the bibliography page to 1/2 inch. +</p> + +<p> +If you want the leading of bibliographies adjusted to fill the page, +pass BIBLIOGRAPHY_LEAD the optional argument, +<kbd>ADJUST</kbd>. (See +<a href="docprocessing.html#doc-lead-adjust">DOC_LEAD_ADJUST</a> +for an explanation of leading adjustment.) +</p> + +<p> +The default for +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPESET</kbd></a> +is the prevailing document lead (16 by default), adjusted. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Even if you give mom a <kbd>.DOC_LEAD_ADJUST OFF</kbd> command, +she will still, by default, adjust bibliography leading. You +<i>must</i> enter <kbd>BIBLIOGRAPHY_LEAD <lead></kbd> +with no <kbd>ADJUST</kbd> argument to disable this default +behaviour. +</p> +</div> + +<!-- -BIBLIO_SPACING- --> + +<h5 id="biblio-spacing" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">• Adjust the space between bibliography entries</h5> + +<div class="box-macro-args"> +Macro: <b>BIBLIOGRAPHY_SPACING</b> <kbd class="macro-args"><amount of space> </kbd> +</div> + +<p class="requires"> +• Requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +By default, mom inserts no space between bibliography entries. +If you’d prefer she add some, instruct her to do so with +BIBLIOGRAPHY_SPACING. Say, for example, you want a half a linespace +between entries, +<br/> +<span class="pre-in-pp"> + .BIBLIOGRAPHY_SPACING .5v +</span> +would do the trick. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +As with endnotes pages, inserting space between bibliography entries +will most likely result in hanging bottom margins. +</p> +</div> + +<!-- -SINGLESPACE_BIBLIO- --> + +<h5 id="singlespace-biblio" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">• Singlespace bibliography (TYPEWRITE only)</h5> + +<div class="box-macro-args"> +Macro: <b>SINGLESPACE_BIBLIOGRAPHY</b> <kbd class="macro-args"><toggle></kbd> +</div> + +<p> +If your +<a href="docprocessing.html#printstyle">PRINTSTYLE</a> +is <kbd>TYPEWRITE</kbd> and you use TYPEWRITE’s default +double-spacing, bibliographies are double-spaced. If your document +is single-spaced, bibliographies are single-spaced. +</p> + +<p> +If, for some reason, you’d prefer that bibliographies be +single-spaced in an otherwise double-spaced document (including +double-spaced +<a href="rectoverso.html#collate">collated</a> +documents), invoke <kbd>.SINGLESPACE_BIBLIOGRAPHY</kbd> with no +argument. +</p> + +<!-- -BIBLIO_NO_COLUMNS- --> + +<h5 id="biblio-no-columns" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">• Turning off column mode during bibliography output</h5> + +<div class="box-macro-args"> +Macro: <b>BIBLIOGRAPHY_NO_COLUMNS</b> <kbd class="macro-args"><toggle></kbd> +</div> + +<p> +By default, if your document is set in +<a href="docprocessing.html#columns">columns</a>, +mom sets the bibliographies in columns, too. However, if your +document is set in columns and you’d like the bibliographies +not to be, just invoke <kbd>.BIBLIOGRAPHY_NO_COLUMNS</kbd> with +no argument. The bibliography pages will be set to the full page +measure of your document. +</p> + +<p> +If you output bibliographies at the end of each document in a +<a href="rectoverso.html#collate">collated</a> +document set in columns, column mode will automatically be +reinstated for each document, even with BIBLIOGRAPHY_NO_COLUMNS +turned on. In such circumstances, you must re-enable +BIBLIOGRAPHY_NO_COLUMNS for each separate collated document. +</p> + +<h4 id="biblio-pagination" class="docs" style="margin-bottom: .5em;">2. Pagination of bibliographies</h4> + +<!-- -BIBLIO_PAGENUM_STYLE- --> + +<h5 id="biblio-pagenum-style" class="docs" style="margin-top: 0; margin-bottom: .5em; margin-left: .5em;">• Page numbering style</h5> + +<div class="box-macro-args"> +Macro: <b>BIBLIOGRAPHY_PAGENUM_STYLE</b> <kbd class="macro-args">DIGIT | ROMAN | roman | ALPHA | alpha</kbd> +</div> + +<p> +Use this macro to set the page numbering style of bibliography +pages. The arguments are identical to those for +<a href="headfootpage.html#pagenum-style">PAGENUM_STYLE</a>. +The default is <kbd>digit</kbd>. You may want to change it to, say, +<kbd>alpha</kbd>, which you would do with +<br/> +<span class="pre-in-pp"> + .BIBLIOGRAPHY_PAGENUM_STYLE alpha +</span> +</p> + +<!-- -BIBLIO_FIRST_PAGENUMBER- --> + +<h5 id="biblio-first-pagenumber" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">• Setting the first page number of bibliographies</h5> + +<div class="box-macro-args"> +Macro: <b>BIBILOGRAPHY_FIRST_PAGENUMBER</b> <kbd class="macro-args"><page # that appears on page 1 of bibliographies></kbd> +</div> + +<p> +Use this macro with caution. If the bibliography for a +<a href="rectoverso.html#collate">collated</a> +document is to be output at the document’s end, +BIBLIOGRAPHY_FIRST_PAGENUMBER tells mom what page number to put on +the first page of the bibliography. +</p> + +<p> +However, if you’re outputting a bibliography at the end of each +section (chapter, article, etc) of a collated document, +you have to reset every section’s first page number after +<a href="rectoverso.html#collate">COLLATE</a> +and before +<a href="docprocessing.html#start">START</a>. +</p> + +<!-- -BIBLIO_NO_FIRST_PAGENUN- --> + +<h5 id="biblio-no-first-pagenum" class="docs" style="margin-top: -.25em; margin-bottom: .5em; margin-left: .5em;">• Omitting a page number on the first page of bibliographies</h5> + +<div class="box-macro-args"> +Macro: <b>BIBLIOGRAPHY_NO_FIRST_PAGENUM</b> <kbd class="macro-args"><toggle></kbd> +</div> + +<p> +This macro is for use only if +<a href="headfootpage.html#footers">FOOTERS</a> +are on. It tells +<kbd><a href="#bibliography">BIBLIOGRAPHY</a></kbd> +not to print a page number on the first bibliography page. +Mom’s default is to print the page number. +</p> + +<!-- -SUSPEND_PAGINATION- --> + +<h5 id="suspend-pagination" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">• Suspending pagination during bibliography output</h5> + +<div class="box-macro-args" style="margin-bottom: 1em;"> +Macro: <b>SUSPEND_PAGINATION</b> +</div> + +<div class="box-macro-args"> +Macro: <b>RESTORE_PAGINATION</b> +</div> + +<p> +SUSPEND_PAGINATION doesn’t take an argument. Invoked +immediately prior to +<kbd><a href="#bibliography">BIBLIOGRAPHY</a></kbd>, +it turns off pagination for the duration of the bibliography. Mom +continues, however to increment page numbers silently. +</p> + +<p> +To restore normal document pagination after bibliographies, invoke +<kbd>.RESTORE_PAGINATION</kbd> (again, with no argument) immediately +after you’ve finished with your bibliography. +</p> + +<h4 id="biblio-header-control" class="docs" style="margin-bottom: .5em;">3. Header/footer control</h4> + +<h5 id="biblio-modify-hdrftr" class="docs" style="margin-top: 0; margin-bottom: .5em; margin-left: .5em;">• Modifying what goes in the bibliography header/footer</h5> + +<p style="margin-top: 0"> +If you wish to modify what appears in the header/footer that appears +on bibliography pages, make the changes before you invoke +<a href="#bibliography"><kbd>.BIBLIOGRAPHY</kbd></a>, +not afterwards. +</p> + +<p> +Except in the case of +<a href="docprocessing.html#doctype">DOCTYPE <kbd>CHAPTER</kbd></a>, +mom prints the same header or footer used throughout the document +on bibliography pages. Chapters get treated differently in that, +by default, mom does not print the header/footer centre string +(normally the chapter number or chapter title.) In most cases, this +is what you want. However, should you not want mom to remove the +centre string from the bibliography pages’ headers/footers, or +you would like her to add one in cases where there hasn’t been +one before (e.g. DOCTYPE DEFAULT) invoke +<kbd><a href="#bibliography-hdrftr-center">.BIBLIOGRAPHY_HEADER_CENTER</a></kbd> +with no argument. +</p> + +<p> +An important change you may want to make is to put the word +“Bibliography” in the header/footer centre position. To +do so, invoke +<br/> +<span class="pre-in-pp" style="margin-bottom: -1em;"> + .BIBLIOGRAPHY_HEADER_CENTER + .HEADER_CENTER "Bibliography" +</span> +or +<span class="pre-in-pp" style="margin-top: -.5em;"> + .BIBLIOGRAPHY_FOOTER_CENTER + .FOOTER_CENTER "Bibliography" +</span> +prior to invoking <kbd>.BIBLIOGRAPHY</kbd>. +</p> + +<div class="box-important"> +<p class="tip"> +<span class="important">Important:</span> +Unless you have a running centre string in your headers or footers, you must invoke +<span class="pre-in-pp" style="margin-top: -.5em;"> + <a href="#endnotes-hdrftr-center">.BIBLIOGRAPHY_HEADER_CENTER</a> +</span> +or +<span class="pre-in-pp" style="margin-top: -.5em;"> + <a href="#endnotes-hdrftr-center">.BIBLIOGRAPHY_FOOTER_CENTER</a> +</span> +in order for the centre string to appear, as demonstrated above. +</p> +</div> + +<h5 id="biblio-hdrftr-center" class="docs" style="margin-top: 0; margin-bottom: .5em; margin-left: .5em;">• Header/footer centre string when doctype is CHAPTER</h5> + +<div class="box-macro-args"> +Macro: <b>BIBLIOGRAPHY_HEADER_CENTER</b> <kbd class="macro-args">toggle</kbd> +</div> + +<p> +If your +<a href="docprocessing.html#doctype">DOCTYPE</a> +is <kbd>CHAPTER</kbd> and you want mom to include a centre +string in the headers/footers that appear on bibliography +pages, or if you do not have a running header/footer +centre string in the body of the document, invoke +<kbd>.BIBLIOGRAPHY_HEADER_CENTER</kbd> (or +<kbd>.BIBLIOGRAPHY_FOOTER_CENTER</kbd>) with no argument before +defining the centre string . Mom’s default is NOT to print the +centre string. +</p> + +<p> +If, for some reason, having enabled the header/footer centre string +on bibliography pages, you wish to disable it, invoke the same macro +with any argument (<kbd>OFF</kbd>, <kbd>QUIT</kbd>, <kbd>Q</kbd>, +<kbd>X</kbd>...). +</p> + +<h5 id="biblio-allows-headers" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">• Allow headers on bibliography pages</h5> + +<div class="box-macro-args"> +Macro: <b>BIBLIOGRAPHY_ALLOWS_HEADERS</b> <kbd class="macro-args"><none> | ALL</kbd> +</div> + +<p> +By default, if HEADERS are on, mom prints page headers on all +bibliography pages except the first. If you don’t want her to +print headers on bibliography pages, do +<br/> +<span class="pre-in-pp"> + .BIBLIOGRAPHY_ALLOWS_HEADERS OFF +</span> +If you want headers on every page including the first, do +<br/> +<span class="pre-in-pp"> + .BIBLIOGRAPHY_ALLOWS_HEADERS ALL +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If FOOTERS are on, mom prints footers on every bibliography page. +This is a style convention. In mom, there is no such beast as +BIBLIOGRAPHY_ALLOWS_FOOTERS OFF. +</p> +</div> + +<h4 id="biblio-main-title" class="docs">4. Bibliography first-page title control</h4> + +<!-- -BIBLIO_STRING- --> + +<h5 id="biblio-string" class="docs" style="margin-top: 1em; margin-bottom: .5em; margin-left: .5em;">• Title string</h5> + +<div class="box-macro-args"> +Macro: <b>BIBLIOGRAPHY_STRING</b> <kbd class="macro-args">"<title to print at the top of bibliography pages>"</kbd> +</div> +<p class="alias" style="margin-bottom: 0;"> +<i>Alias:</i> <b>BIBLIOGRAPHY_HEADER</b> +</p> + +<p> +By default, mom prints the word “BIBLIOGRAPHY” as a title +at the top of the first page of a bibliography. If you want her to +print something else, invoke <kbd>.BIBLIOGRAPHY_STRING</kbd> with +the title you want, surrounded by double-quotes. +</p> + +<p> +If you don’t want a title at the top of the first bibliography +page, invoke <kbd>.BIBLIOGRAPHY_STRING</kbd> with a blank argument +(either two double-quotes side by +side—<kbd>""</kbd>—or no argument at all). +</p> + +<!-- -BIBLIO_STRING_CONTROL- --> + +<h5 id="biblio-string-control" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">• Title string control macros and defaults</h5> + +<div class="defaults-container" style="padding-bottom: 8px;"> +<p class="defaults" style="padding-top: 6px;"> +See +<a href="#control-macro-args">Arguments to the control macros</a>. +</p> +<span class="pre defaults"> +.BIBLIOGRAPHY_STRING_FAMILY default = prevailing document family; default is Times Roman +.BIBLIOGRAPHY_STRING_FONT default = bold +.BIBLIOGRAPHY_STRING_SIZE* default = +1 +.BIBLIOGRAPHY_STRING_QUAD default = centred + +*Relative to the size of the bibliography text (set with BIBLIOGRAPHY_PT_SIZE) +</span> +</div> + +<!-- -BIBLIOGRAPHY_STRING_ADVANCE- --> + +<h5 id="biblio-string-placement" class="docs" style="margin-top: -1em; margin-bottom: .5em; margin-left: .5em;">• Title string placement</h5> + +<div class="box-macro-args"> +Macro: <b>BIBLIOGRAPHY_STRING_ADVANCE</b> <kbd class="macro-args"><distance from top of page></kbd> +</div> + +<p class="requires"> +• Argument requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +By default, mom places the title (the docheader, as it were) of +bibliographies (typically "BIBLIOGRAPHY") on the same +<a href="definitions.html#baseline">baseline</a> +that is used for the start of +<a href="definitions.html#running">running text</a>. +If you’d prefer another location, higher or lower on the page +(thereby also raising or lowering the starting position of the +bibliography itself), invoke <kbd>.BIBLIOGRAPHY_STRING_ADVANCE</kbd> +with an argument stating the distance from the top edge of the page +at which you’d like the title placed. +</p> + +<p> +The argument requires a unit of measure, so if you’d like the title +to appear 1-1/2 inches from the top edge of the page, you’d tell +mom about it like this: +<br/> +<span class="pre-in-pp"> + .BIBLIOGRAPHY_STRING_ADVANCE 1.5i +</span> +</p> + +<!-- -BIBLIO_STRING_UNDERLINE- --> + +<h5 id="biblio-string-underline" class="docs" style="margin-top: -1em; margin-bottom: .5em; margin-left: .5em;">• Title string underscoring</h5> + +<div class="box-macro-args"> +Macro: <b>BIBLIOGRAPHY_STRING_UNDERSCORE</b> <kbd class="macro-args">[DOUBLE] [<underline weight> [<underline gap> [<distance between double rules]]] | <none> | <anything></kbd> +</div> + +<p class="alias" style="margin-bottom: 0;"> +<i>Alias:</i> <b>BIBLIOGRAPHY_STRING_UNDERLINE</b> +</p> + +<p class="requires"> +• The argument +<span style="font-style: normal"><kbd><underscore weight></kbd></span> +must not have the +<a href="definitions.html#unitofmeasure">unit of measure</a>, +<span style="font-style: normal;"><kbd>p</kbd></span>, appended to it +</p> + +<p> +Invoked without an argument, +<kbd>.BIBLIOGRAPHY_STRING_UNDERSCORE</kbd> will place a single rule +underneath the bibliography’s first-page title. Invoked with the +argument, <kbd>DOUBLE</kbd>, BIBLIOGRAPHY_STRING_UNDERSCORE will +double-underscore the title. Invoked with any other non-numeric +argument, (e.g. <kbd>OFF</kbd>, <kbd>NO</kbd>, <kbd>X</kbd>, etc.) +the macro disables underlining of the title. +</p> + +<p> +In addition, you can use BIBLIOGRAPHY_STRING_UNDERSCORE to control +the weight of the underscore rule(s), the gap between the title and +the underscore, and, in the case of double-underscores, the distance +between the two rules. +</p> + +<p> +Some examples: +<br/> +<span class="pre-in-pp"> + .BIBLIOGRAPHY_STRING_UNDERLINE 1 + - turn underlining on; set the rule weight to 1 point + + .BIBLIOGRAPHY_STRING_UNDERLINE 1 3p + - turn underlining on; set the rule weight to 1 point; set + the gap between the string and the underline to 3 points + + .BIBLIOGRAPHY_STRING_UNDERLINE DOUBLE .75 3p + - turn double-underlining on; set the rule weight to 3/4 of + a point; set the gap between the string and the upper + underline to 3 points; leave the gap between the upper + and the lower underline at the default + + .BIBLIOGRAPHY_STRING_UNDERLINE DOUBLE 1.5 1.5p 1.5p + - turn double-underlining on; set the rule weight to 1-1/2 + points; set the gap between the string and the upper + underline to 1-1/2 points; set the gap between the upper + and the lower underline to 1-1/2 points +</span> +Note, from the above, that in all instances, underscoring (single or +double) is enabled whenever BIBLIOGRAPHY_STRING_UNDERSCORE is used +in this way. +</p> + +<p> +By default, mom double-underscores the title if your +<a href="docprocessing.html#printstyle">PRINTSTYLE</a> +is <kbd>TYPEWRITE</kbd>. +</p> + +<!-- -BIBLIO_STRING_CAPS- --> + +<h5 id="biblio-string-caps" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">• Title string capitalization</h5> + +<div class="box-macro-args"> +Macro: <b>BIBLIOGRAPHY_STRING_CAPS</b> <kbd class="macro-args">toggle</kbd> +</div> + +<p> +Invoked by itself, <kbd>.BIBLIOGRAPHY_STRING_CAPS</kbd> will +automatically capitalize the bibliography first-page title. Invoked +with any other argument, the macro disables automatic capitalization +of the title. +</p> + +<p> +If you’re generating a table of contents, you may want the +bibliography first-page title to be in caps, but the toc entry in +caps/lower case. If the argument to +<kbd><a href="#bibliography-string">BIBLIOGRAPHY_STRING</a></kbd> +is in caps/lower case and BIBLIOGRAPHY_STRING_CAPS is +on, this is exactly what will happen. +</p> + +<p> +Mom’s default is to capitalize the bibliography first-page +title. +</p> + +<div class="rule-long"><hr/></div> + +<!-- Navigation links --> +<table style="width: 100%; margin-top: 12px;"> +<tr> + <td style="width: 33%;"><a href="toc.html">Back to Table of Contents</a></td> + <td style="width: 33%; text-align: center;"><a href="#top">Top</a></td> + <td style="width: 33%; text-align: right;"><a href="letters.html">Next: Writing letters</a></td> +</tr> +</table> + +</div> + +<div class="bottom-spacer"><br/></div> + +</body> +</html> diff --git a/contrib/mom/momdoc/reserved.html b/contrib/mom/momdoc/reserved.html new file mode 100644 index 0000000..4cdab3b --- /dev/null +++ b/contrib/mom/momdoc/reserved.html @@ -0,0 +1,2736 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004-2020 Free Software Foundation, Inc. +Written by Peter Schaffter (peter@schaffter.ca). + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"/> + <title>Mom -- Reserved words (macros, strings, registers)</title> + <link rel="stylesheet" type="text/css" href="stylesheet.css" /> +</head> + +<body style="background-color: #f5faff;"> + +<!-- ==================================================================== --> + +<div id="top" class="page" style="width: 800px;"> + +<!-- Navigation links --> +<table style="width: 100%;"> +<tr> + <td><a href="toc.html">Back to Table of Contents</a></td> +</tr> +</table> + +<h1 id="reserved-words" class="docs">List of reserved words (macros, strings, registers)</h1> + +<p> +The following is a list of reserved words used by mom. Before +changing the name of any macro or document element tag with +<a href="goodies.html#ALIAS">ALIAS</a>, +I strongly recommend doing a search of this page for your proposed +new name. If you find it in the left hand column, choose something +else instead. +</p> + +<p> +Anyone interested in hacking/patching mom’s macro file +(om.tmac) will also find this list useful since it lists most of +the macros, strings, diversions, aliases, and number registers +mom uses, along with brief descriptions of their functions. +</p> + +<p> +The list is not exhaustive. PDF-related macros, strings, registers, +and diversions, as well as those associated with preprocessor +support and “Lists of” are not included. +</p> + +<div class="rule-medium"><hr/></div> + +<span class="pre" style="scroll: none;"> +<span style="display: block; text-decoration: underline;">TYPESETTING</span> +<span style="display: block; margin-top: -1em;">+++MACROS+++</span> +<span style="display: block; margin-top: -1em; margin-bottom: -1em;">*Page layout</span> + PAGELENGTH Page width + PAGE Page width/length; left, right, top, bottom margins + PAGEWIDTH Page width + PAPER Letter, legal, or A4 + B_MARGIN Space to leave at page bottom + L_MARGIN Page offset + R_MARGIN Line length as a function of + pagewidth minus pageoffset minus rightmargin + T_MARGIN Advance lead from page top + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Page control</span> + DO_B_MARGIN Margin at bottom of page; trap-invoked + DO_T_MARGIN Margin at top of page; trap-invoked + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Style</span> + COLOR Change color of text to predefined value + CONDENSE Set percentage of pseudo-condense (alias of + CONDENSE_OR_EXTEND) + EXTEND Set percentage of pseudo-extend (alias of + CONDENSE_OR_EXTEND) + FAMILY Family + FT Font + FALLBACK_FONT Font to use whenever FAMILY or FT errors occur + LL Line length + LS Leading (.vs) + NEWCOLOR Define a text color + PT_SIZE Point size + SETBOLDER Set degree of emboldening (pseudo-bold) in units + SETSLANT Set degree of pseudo-italic + XCOLOR Initialize a color from rgb.txt + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Autolead</span> + AUTOLEAD Always lead n points more than .PT_SIZE + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Quad, fill, justification</span> + JUSTIFY Justified text + QUAD Filled text, left, right, or centre + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Quad, no-fill</span> + CENTER Line-for-line, non-filled text, centre + LEFT Line-for-line, non-filled text, left + RIGHT Line-for-line, non-filled text, right + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Hyphenation</span> + HY Turn hyphenation on/off, or set LINES, MARGIN, SPACE + HY_SET Set LINES, MARGIN, SPACE in a single command + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Advanced style</span> + KERN Turn automatic kerning on or off + LIGATURES Turn ligatures on or off + SS Sentence space control + WS Word space control + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Line breaks</span> + BR Alias of br + EL Breaks line but doesn't advance + SPACE Alias of sp + SPREAD Alias of brp + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Vertical motions</span> + ALD Advance lead + RLD Reverse lead + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Indents</span> + HI Indent hang + IB Indent both + IBX Indent both off + IL Indent left + ILX Indent left off + IQ Indents off + IR Indent right + IRX Indent right off + IX Indents off -- deprecated + TI Indent temporary + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Tabs</span> + ST String tab + TAB_SET Tab Set + TN Tab Next + TQ Tab Quit + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Columnar tabs</span> + MCO Turn on multi-column mode + MCR Return to top of column + MCX Turn off multi-column mode + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Underscore</span> + UNDERSCORE Underscores words or phrases + UNDERSCORE2 Double underscores words or phrases + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Underline</span> + UNDERLINE Underlines whole passages (Courier only) + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Smart Quotes</span> + SMARTQUOTES Turns smart quotes on or off + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Graphical objects</span> + RULE_WEIGHT Weight of rules drawn with \*[RULE] + DBX Draw box + DCL Draw circle (ellipse) + DRH Draw horizontal rule + DRV Draw vertical rule + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Misc + Support</span> + BR_AT_LINE_KERN Deposit a break before RW and WE + CAPS Convert u/lc to UC + COMMENT Don't print lines till COMMENT OFF (alias of SILENT) + DROPCAP_ADJUST Points (poss. fractional) to add/subtract + from drop caps + DROPCAP Create drop cap + DROPCAP_FAMILY Drop cap family + DROPCAP_FONT Drop cap font + DROPCAP_GUTTER Drop cap gutter + DROPCAP_OFF Support only; restores .in if there was one + ESC_CHAR Alias for .ec + EW Extra white -- loosen overall line kern + (character spacing) + LEADER_CHARACTER Sets leader character + PAD Insert padding spaces at marked places + PADMARKER Sets character to use instead of # in PAD + PRINT Simply prints args passed to it; keeps my code + indented nicely + RW Reduce white -- tighten overall line kern + (character spacing) + SILENT Don't print lines till SILENT OFF + SIZESPECS Get cap-height, x-height and descender depth for + current point size + SUPERSCRIPT_RAISE_AMOUNT Change default vertical displacement of superscripts + TRAP Turn traps off or on + +<span style="display: block; margin-top: -.5em; margin-bottom: -2.5em;">+++DIVERSIONS+++</span> + + NO_FLASH Diverts output of SILENT or COMMENT so they don't print + NULL Diverts SIZESPECS in PRINT_HDRFTR so it doesn't screw up + FOOTER and FOOTNOTE processing when FOOTERS are on + PAD_STRING Diverts $PAD_STRING for processing + TYPESIZE Diverts SIZESPECS routine so it doesn't print + +<span style="display: block; margin-top: -.5em; margin-bottom: -2.5em;">+++NUMBER REGISTERS+++</span> + + #ABORT_FT_ERRORS Abort on FT errors? (boolean) + #ALD ALD value + #ARGS_TO_LIST Tells LIST whether LIST was invoked with a valid + arg; controls LIST OFF processing + #ARGS_TO_SQ Tells SMARTQUOTES whether it was invoked with a + valid arg; controls SMARTQUOTES OFF + processing + #AUTOLEAD_FACTOR Using FACTOR arg to AUTOLEAD? (boolean) + #AUTO_LEAD Using autolead? (boolean) + #AUTOLEAD_VALUE Auto leading value + #BL_INDENT Value of left indent when IB + #B_MARGIN Bottom margin + #B_MARGIN_SET Has a bottom margin been set with B_MARGIN? (boolean) + #BOLDER_UNITS Number of units to embolden type + #BR_AT_LINE_KERN Break when EW/RW are invoked? (boolean) + #BR_INDENT Value of right indent when IB + #BX_SOLID Draw box filled? (boolean) + c column mark + #CAPS_ON Is CAPS enabled? (boolean) + #CL_SOLID Draw circle filled? (boolean) + #CODE_FAM Use different family from Courier for CODE? (boolean) + #CODE_FT Use different font from roman for CODE? (boolean) + #CONDENSE Are we in pseudo-condense mode? (boolean) + #CONDENSE_WAS_ON For restoring \*[COND] in DROPCAP + #COND_WIDTH Width of pseudo-condensed type + (pointsize x $COND_PERCENT) + #CURRENT_HY \\n[.hy] when ref*normal-print called + #CURRENT_L_LENGTH Current line length at first invocation of LIST; + like #ORIG_L_LENGTH + #CURRENT_TAB Current tab number + #DC_COLOR Colorize dropcap? (boolean) + #DC_GUT Width of dropcap gutter + #DC_HEIGHT Dropcap height + #DC_LINES Number of lines for dropcap + #DEGREES # of degrees slant for pseudo-italic + #ENUMERATOR<n> Number register enumerator for depth <n> in lists + #EW Is EW in effect? (boolean) + #EXT_WIDTH Width of pseudo-extended type + (pointsize x $EXT_PERCENT) + #EXTEND Are we in pseudo-extend mode? (boolean) + #EXTEND_WAS_ON For restoring \*[EXT] in DROPCAP + #FILL_MODE Which fill mode are we in? ( \n[.j] ) + #FILLED Are we in a fill mode? (boolean) + #H_INDENT Value of left indent when IH + #HL_INDENT<n> Hanging indent for LIST depth <n> + #HL_INDENT Value of the hang when IH + #HY_SET Did we manually set hyphenation parameters? + (boolean) + #HYPHEN_ADJ Amount by which to raise hyphens surrounding page + numbers + #HYPHENATE Hyphenation on? (boolean) + #IN_ITEM Are we in a list item? (boolean) + #IN_ITEM_L_INDENT Value passed to IL if #IN_ITEM=1 + #IN_TAB Are we in a tab? (boolean) + Set in macro TAB; used in ST to determine + whether to add #ST_OFFSET to #ST<n>_OFFSET + #INDENT_ACTIVE Indicates whether an indent is active (boolean) + #INDENT_BOTH_ACTIVE Toggle + #INDENT_LEFT_ACTIVE Toggle + #INDENT_RIGHT_ACTIVE Toggle + #INDENT_STYLE_BOTH Indicates IB when #INDENT_ACTIVE=1 (boolean) + #INDENT_STYLE_HANG Indicates IH when #INDENT_ACTIVE=1 (boolean) + #INDENT_STYLE_LEFT Indicates IL when #INDENT_ACTIVE=1 (boolean) + #INDENT_STYLE_RIGHT Indicates IR when #INDENT_ACTIVE=1 (boolean) + #INDENT_STYLE_TEMP Indicates IT when #INDENT_ACTIVE=1 (boolean) + #IGNORE_COLUMNS Don't set document in columns (boolean) + #IN_DIVER Are we in a diversion? (boolean) + #IX_WARN Toggles to 1 the first time IX is user-invoked + #JUSTIFY In EW/RW, when BR_AT_LINE_KERN, whether to + break or break-spread preceding line (boolean) + #KERN Kern on? (boolean) + #KERN_UNIT Size of kern units (1/36 of current point size) + #KERN_WAS_ON Indicates kerning was on; used in list ITEMs (boolean) + #LAST_TAB Last tab number set in multi-columns + #LAST_FN_COUNT_FOR_COLS #FN_COUNT_FOR_COLS at top of HEADER + #LEAD Leading (alias) + #LIGATURES Ligatures on? (boolean) + #LIST_INDENT<n> Left indent of list <n> + #L_INDENT Value of left indent + #L_LENGTH Line length + #L_MARGIN Page offset if set with LMARGIN; + if .po used, \n[.o] returns page offset + #LOOP In EPIGRAPH, #LOOP=1 if a while loop executes; + otherwise 0. Elsewhere, an arbitrary incrementing + register used to read in strings + #MCX_ALD Amount to advance past end of longest column + #NEWPAGE Was NEWPAGE just invoked? (boolean) + #NEXT_DEPTH_BACK Next list level back in lists + #NEXT_TAB Current tab number + 1 (used in TN) + #NEXT_TAB Next tab in an n+1 sequence + #NOFILL Are we in a nofill mode? (boolean) + #NOFILL_MODE Nofill mode + #OLD_LEAD Lead in effect prior to changing it with .vs + in .LS or .AUTOLEAD + #OPEN_CLOSE Manipulates character " to print `` or '' + #ORIGINAL_L_LENGTH Used in LIST for IB processing; holds \n[.l] + p Output line horiz position at end of + $PAD_STRING + #PAD_COUNT Number of times # was included in arg to PAD + #PAD_LIST_DIGITS Pad list digits to the left? (boolean) + #PAD_SPACE Size of padding space + #PAGE_LENGTH Page length (alias) + #PAGE_WIDTH Page width + #PP_ACTIVE Are we in the context of a para? (boolean) + #PRINT_FOOTER_ON_PAGE_1 (boolean) + #PSEUDO_FILL Signals that LEFT, RIGHT or CENTER is + in effect (booleand off, i.e. to 0, when + QUAD <arg> or JUSTIFY is called) + #PT_SIZE Point size (fractional) in units (alias) + #Q_AT_TOP Does a quote start at the top of a new page? + (boolean) + #QUAD In autoquad mode? (boolean) + #QUIT Tells LIST whether to exit lists completely + (boolean) + #REMOVE Used in LIST OFF cleanup + #RESTORE_FILL Used to restore \[.u] state if temporarily changed + #RESTORE_LEAD Lead value in effect prior to AUTOLEAD + #RESTORE_LINE_LENGTH Restores actual line length in RULE + #RESTORE_LN_NUMBER Start linenumbering again with stored + #NEXT_LN? (boolean) + #RESTORE_PT_SIZE Stores current point size (in units) prior + to underscore + #R_INDENT Value of right indent + #R_MARGIN Right margin + #RESTORE_PREV_INDENT Tells LIST OFF what kind of indent was active + prior to first invocation of LIST + #RESTORE_TRAP Did we have to disable traps? Used in + graphical object macros (boolean) + #RESTORE_SQ Instructs SMARTQUOTES to restore smartquotes if + SMARTQUOTES invoked without an arg + #RLD RLD value + #RULE_WEIGHT Weight given to RULE_WEIGHT + #RULE_WEIGHT_ADJ RULE_WEIGHT/2 + #RW Is RW in effect? (boolean) + #SHIFT_LIST<n> Value to add to #LIST_INDENT<n> for shifted lists + #SILENT Is silent on? (boolean) + #SIZE_FOR_PAD Used to ensure that the size in effect prior + to PAD is restored at the start of every + iteration of $PAD_STRING + #SLANT_ON Is SLANT on? (boolean) + #SPACE_TO_END Whitespace at end of string passed to PAD + #SQ_WAS_ON Instructs CODE OFF to restore smartquotes if they + were on prior to CODE + #ST<n>_LENGTH Length of ST<n>; calculated during ST <n> + #ST<n>_MARK Page offset of autotab <n> at ST<n>X + #ST_NUM Incrementing counter for autotab identification + #ST<n>_OFFSET Offset (from current tab) to add to #ST<n>_OFFSET + when calculating string indents set from within + tabs + #ST<n>_OFFSET Indent of autotab <n> (page offset) + #STORED_L_INDENT Current left indent at first invocation of LIST + #STORED_R_INDENT Current right indent at first invocation of LIST + #STORED_BL_INDENT Current "both, left" indent at first invocation + of LIST + #STORED_BR_INDENT Current "both, right" indent at first invocation + of LIST + #STORED_HL_INDENT Current hanging indent at first invocation + of LIST + #STORED_T_INDENT Current temporary indent at first invocation + of LIST + #STR_LENGTH Holds string length derived from .length request + tbl Are we in a tbl? (boolean) + #T_INDENT Value of temporary indent + #T_MARGIN Top margin + #TAB_ACTIVE Are we in a tab? (boolean) + #TAB_NUMBER Tab number given to TAB_SET + #TAB_LENGTH Tab length given to TAB_SET + #TAB_OFFSET Tab indent given to TAB_SET + #TEXT_WIDTH Width of string to underscore + #TN Was TN (or \*[T+] called? (boolean) + #TOP Set to 1 in T_MARGIN, DO_T_MARGIN and ALD; tells + the first LS or AUTOLEAD on a page to maintain + the baseline position prior to the LS call + #TOP_BASELINE_ADJ Amount by which to adjust the baseline position + of the first line on the page if an LS or AUTOLEAD + request differs from the lead current at the end of + the previous page + #TOTAL_LISTS Total number of lists in a nest + #UNDERSCORE_WEIGHT Weight of underscores + #UNDERSCORE_WEIGHT_ADJ UNDERSCORE_WEIGHT/2 + #USER_SET_L_LENGTH Did user invoke LL? (boolean) + #USER_SET_TITLE_ITEM Did user invoke TOC_TITLE_ENTRY? + #WEIGHT Weight given to #RULE_WEIGHT + #WEIGHT_ADJ RULE_WEIGHT/2 + u Horiz position of start of underscore + +<span style="display: block; margin-top: -.5em; margin-bottom: -2.5em;">+++STRINGS+++</span> + + $ARG String holding substrings derived from .substring + request + $COND_PERCENT Percentage by which to pseudo-condense type + $COLOR_SCHEME Color scheme used in NEWCOLOR + $<colorname>_FILL XCOLOR "alias" with _FILL attached; used to determine if + the alias exists when the alias is passed to DBX SOLID + or DCL SOLID + $CURRENT_QUAD Restores current quad value in RULE + $CURRENT_TAB Current tab number + $DC_ADJUST +|- # of points to subtract from dropcap + $DC_FAM Drop cap family + $DC_FT Drop cap font + $DROPCAP The dropcap letter + $ENUMERATOR<n> String enumerator for depth <n> in lists + $ENUMERATOR_TYPE<n> Type of enumerator used in LIST<n> + $EW Value passed to EW + $EXT_PERCENT Percentage by which to pseudo-extend type + $FAMILY Family + $FAMILY_FOR_PAD Used to ensure that the family in effect prior + to PAD is restored at the start of every + iteration of $PAD_STRING + $FONT Font + $FONT_FOR_PAD Used to ensure that the font in effect prior + to PAD is restored at the start of every + iteration of $PAD_STRING + $PAD_MARKER Character to mark off padding in PAD + $PAD_STRING Arg passed to PAD + $PREFIX<n> Prefix for enumerator of LIST<n> + $QUAD_VALUE Quad value (left, right, centre, justify) + $QUOTE0 Open quotation marks + $QUOTE1 Close quotation marks + $RESTORE_COND Restores the pseudo-condense value in effect + prior to DROPCAP + $RESTORE_EXT Restores the pseudo-extend value in effect + prior to DROPCAP + $RESTORE_FAM Used to restore the family in effect + prior to DROPCAP + $RESTORE_FT Used to restore the font/fontstyle in effect + prior to DROPCAP + $RESTORE_PT_SIZE Used to restore the point size of normal + running text after a dropcap + $RESTORE_QUAD_VALUE Quad value for use in restoring L, R, C, J + (after tabs) + $RESTORE_SQ The smartquoting string last passed to SMARTQUOTES + $RULE_GAP Distance between underscore rules + $RW Value passed to RW + $SAVED_STYLE Current style, if there is one (used in FAMILY) + $SAVED_UNDERSCORE_GAP Temporarily holds string in $UNDERSCORE_GAP + $SEPARATOR<n> Separator for depth <n> in lists + $SS_VAR Holds + or - sentence space value + $ST<n>_FILL Always QUAD if QUAD passed to ST <n> + ST\n[#LOOP] Used to initialize string tab markers (1-19) + ST\n[#LOOP]X Used to initialize string tab markers (1-19) + $ST<n>_QUAD_DIR Quad direction supplied to ST for <n> + $SUP_LOWER Vertical displacement amount of superscripts + $SUP_RAISE Vertical displacement amount of superscripts + $SUP_RAISE_AMOUNT Argument passed to SUPERSCRIPT_RAISE_AMOUNT + $TAB_NUMBER Argument passed to TAB macro to call TAB# macro + created in TAB_SET + $UNDERSCORE_GAP Distance between text and underscore rule + $WS_CONSTANT 12; used to hold groff default wordspace + $WS Holds WS value; concatenation of WS_CONSTANT and + WS_VAR + $WS_VAR + or - value to add to $WS_CONSTANT + BLACK Pre-defined black color + black Pre-defined black color + WHITE Pre-defined white color + white Pre-defined white color + +<span style="display: block; margin-top: -.5em; margin-bottom: -2.5em;">+++ALIASES+++</span> + + ALIAS als + ALIASN aln + BR br + CENTRE CENTER + COLOUR COLOR + COMMENT SILENT + CONDENSE CONDENSE_OR_EXTEND + EXTEND CONDENSE_OR_EXTEND + FAM FAMILY + FT FONT + HYPHENATE HY + HYPHENATION HY + INCLUDE so + LIG LIGATURES + LL LINE_LENGTH + MAC de + NEW_PAGE bp + NEWCOLOUR NEWCOLOR + NEWPAGE NEW_PAGE + PAGELENGTH PAGE_LENGTH + PAGE_LENGTH pl + PAGEWIDTH PAGE_WIDTH + SPREAD brp + SP sp + STRING ds + TABSET TAB_SET + TB TAB + TI IT + UNDERSCORE_2 UNDERSCORE2 + XCOLOUR XCOLOR + +<span style="display: block; margin-top: -.5em; margin-bottom: -2.5em;">+++ALIASES FOR NUMBER REGISTERS+++</span> + + #DIVER_DEPTH dn -- diversion depth + #DIVER_WIDTH dl -- diversion width + #INDENT .i -- value of current indent + #LEAD .v -- line space (.vs, not .ls) + #L_LENGTH .l -- line length + #NUM_ARGS .$ -- number of arguments passed to a macro + #PAGE_LENGTH .p -- page length + #PT_SIZE .ps -- current point size (fractional) in units + #TRAP_DISTANCE .t -- distance to next trap + +<span style="display: block; margin-top: -.5em; margin-bottom: -2.5em;">+++INLINE ESCAPES+++</span> + + ALD<n> Move down inline by <n> (between .25 and 12.75) + B Inline equivalent to .EL + BCK Inline backward horizontal movement + BD Bold font + BDI Bold italic font + BLACK Color + black color + BOLDER Pseudo-bold on + BOLDERX Pseudo-bold off + BP Back points (horizontal movement) + BP<n> Back points by <n> (between .25 and 12.75) + BU Back units (inline pairwise kerning) + BU<n> Back units by <n> (between 1 and 36) + COND Pseudo-condense type + COND_FOR_SUP Pseudo-condense string for use with superscripts + (called with CONDSUP) + COND_FOR_SUP Pseudo-extend string for use with superscripts (called + with EXTSUP) + CONDSUP Pseudo-condensed superscript (using value set with + CONDENSE) + CONDSUPX Pseudo-condensed superscript off + CONDX Pseudo-condense off + DOWN Inline downward vertical movement + EN-MARK Inline escape to indicate the beginning of a + range of lines used to identify an endnote + EXT Pseudo-extend type + EXTX Pseudo-extend off + EXTSUP Pseudo-extended superscript + EXTSUPX Pseudo-extended superscript off + FN-MARK Inline escape to indicate the beginning of a + range of lines used to identify a footnote + FP<n> Forward points by <n> (between .25 and 12.75) + FP Forward points (horizontal movement) + FU Forward units (inline pairwise kerning) + FU<n> Forward units by <n> (between 1 and 36) + FWD Inline forward horizontal movement + PREV Return to previous font in effect + RLD<n> Move up, inline, by <n> (between .25 and 12.75) + ROM Roman (medium) font + S Same \s + SLANT Slant (pseudo-italic on + SLANTX Slant off + ST<n> String tab end marker + ST<n> String tab start marker + SUP Superscript + SUPX Superscript off + TB+ Move to next tab number (n+1) without advancing on the page + UP Inline upward vertical movement + WHITE Color + white Color + +<span style="display: block; margin-top: -.5em; margin-bottom: -2.5em;">+++SPECIAL CHARACTERS+++</span> + + FOOT The foot character \(fm + INCH The inch character \(fm\(fm + LEADER Deposit leader to end of current LL or TAB + RULE Draw a rule to the full measure of the current line or + tab length +<span style="display: block; margin-top: 1em; text-decoration: underline;">DOCUMENT PROCESSING</span> +<span style="display: block; margin-top: -1em;">+++MACROS+++</span> +<span style="display: block; margin-top: -1em; margin-bottom: -1em;">*Document info (reference macros)</span> + AUTHOR Author + CHAPTER Chapter number + CHAPTER_TITLE Chapter title + COPYRIGHT Copyright info (covers only) + DOCTITLE Overall doc title (for collated docs) + DRAFT Draft number + MISC Misc info (covers only) + REVISION Revision number + SUBTITLE Doc subtitle + TITLE Doc title + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Covers</span> + COVER What goes on cover + COVERS Whether covers get printed (boolean) + COVER_ADVANCE Set vertical start position of cover material + COVER_LEAD Overall leading of covers + COVERTITLE User-defined cover title string + DOC_COVER What goes on doc cover + DOC_COVERS Whether doc covers get printed + DOC_COVER_ADVANCE Set vertical start position of doc cover material + DOC_COVER_LEAD Overall leading of doc covers + DOC_COVERTITLE User-defined doc cover title string + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Document style</span> + COPYSTYLE Output style (DRAFT or FINAL) + DEFAULTS In START, sets defaults + DOCTYPE Kind of doc (DEFAULT, CHAPTER, NAMED, LETTER) + PAGENUMBER Page number that appears on 1st page of doc + PAPER Paper size (LETTER, LEGAL, A4) + PRINTSTYLE Print style (TYPEWRITE or TYPESET) + NUMBER_LINES Number output lines in the left margin + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Document tags and macros</span> + ADD_SPACE Special macro to add space to the top of a pages after + page 1; must be preceded by NEWPAGE + BIBLIOGRAPHY Begin a bibliography page + BIBLIOGRAPHY_TYPE LIST or PLAIN + BLOCKQUOTE Block-indented, quoted text + COL_BREAK Breaks and spreads line before invocation; moves to + next column on page or 1st col of next page. An + alias of COL_NEXT. + COL_NEXT Moves to next column on page or 1st col of next page + ENDNOTE Endnote + ENDNOTE_REFS Send REFs to endnotes + ENDNOTES Output endnotes + EPIGRAPH Epigraph before 1st para + EQ/EN eqn block + FINIS Prints --END-- + FLOAT Keep material together as a block; defer output + to following page if not enough room to print + FOOTNOTE Collects footnotes in text for printing at bottom + of page + FOOTNOTE_REFS Send REFs to footnotes + HEAD Section title (main heads) + HYPHENATE_REFS Turn on/off hyphenation of REF references + ITEM Begin a list item + LINEBREAK Break between narrative sections + LIST Initialize a list + MN Margin note + MN_INIT Initialize parameters for margin notes + NUMBER_LINES Number text lines + NUMBER_BLOCKQUOTE_LINES Number blockquote lines + NUMBER_QUOTE_LINES Number quote lines + PAD_LIST_DIGITS Leave space for two-numeral digit enumerators + in a list + PARAHEAD Paragraph head + PP Paragraph + QUOTE Poetic or line for line quotes + REF Wrapper around FOOTNOTE or ENDNOTE, depending + on FOOTNOTE_REFS or ENDNOTE_REFS + REF( Begin embedded reference, parens + REF) End embedded reference, parens + REF[ Begin embedded reference, square brackets + REF] End embedded reference, square brackets + REF{ Begin embedded reference, braces + REF} End embedded reference, braces + REF_INDENT Amount of 2nd line indent of references for + footnote, endnote or bibliography refs + RESET_LIST Reset digit or alpha list enumerator + SHIFT_LIST Move a list over to the right + START Sets doc defaults and prints info collected + with doc info macros + SUBHEAD Subheads + SUBSUBHEAD Subsubheads + TH Running tbl header + TS/TE Begin/end a tbl block + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Headers/footers</span> + DO_FOOTER Prints footer (after footnote processing, if any) + FOOTER_ON_FIRST_PAGE Print footer on first page? (boolean) + FOOTER Trap-invoked footer macro + HEADER Trap-invoked header macro + PAGINATE Turns page numbering on or off (doc default=on) + PAGINATE_TOC Turns pagination of toc on or off (default=on) + RECTO_VERSO Enables switch HEADER_LEFT and HEADER_RIGHT on + alternate pages + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Control macros</span> +-General- + ALWAYS_FULLSPACE_QUOTES Fullspace quotes instead of default + 1/2 spacing them. + ATTRIBUTE_STRING What to print before author (default is "by") + CHAPTER_STRING What to print whenever the word "chapter" + is required + COLUMNS Print in columns + DOC_FAMILY Overall doc family + DOCHEADER Print doc header? + DOCHEADER_ADVANCE Start position of docheader (relative to top + of page) + DOCHEADER_LEAD +|- value applied to #DOC_LEAD to in/decrease + leading of doc header + DOC_LEAD_ADJUST Adjust #DOC_LEAD to fill page to #B_MARGIN + DOC_LEAD Overall doc leading + DOC_LEFT_MARGIN Doc left margin + DOC_LINE_LENGTH Doc line length + DOC_PT_SIZE Overall doc point size + DOC_RIGHT_MARGIN Doc right margin + DOC_TITLE Overall doc title that gets printed in + headers/footers (mostly for use with collated + docs where each doc is an article with a + different title + DRAFT_STRING What to print whenever the word "draft" is + required + DRAFT_WITH_PAGENUMBER Attach draft/revision info to page number + (instead of putting it HEADER centre) + REVISION_STRING What to print whenever the word "revision" + is required + +-Covers- + COVER_ADVANCE Vertical place on page to start outputting + cover material + COVER_LEAD Lead in/decrease for cover pages + COVERS_COUNT_PAGES Whether to include cover pages in pagination scheme + DOC_COVER_ADVANCE Vertical place on page to start outputting + doc cover material + DOC_COVER_LEAD Lead in/decrease for doc cover pages + DOC_COVERS_COUNT_PAGES Whether to include doc cover pages in pagination + scheme + +-Epigraphs and finis- + EPIGRAPH_AUTOLEAD Autolead value for epigraphs + EPIGRAPH_INDENT Value by which to multiply PP_INDENT for + block epigraphs + FINIS_STRING What to print when FINIS is invoked + FINIS_STRING_CAPS Whether to capitalize the finis string + +-eqn- + EQ_INDENT Indent value if 'EQ I' + +-Footnotes- + FOOTNOTE_AUTOLEAD Autolead to use in footnotes + FOOTNOTE_LINENUMBER_BRACKETS Brackets for footnote linenumbers + FOOTNOTE_LINENUMBER_SEPARATOR Separator for footnote linenumbers + FOOTNOTE_MARKERS Turns footnote markers on or off + FOOTNOTE_MARKER_STYLE STAR or NUMBER; default=STAR + FOOTNOTE_RULE_ADJ # of points to raise footnote rule from its + baseline + FOOTNOTE_RULE_LENGTH Length of footnote separator rule + FOOTNOTE_RULE Turns printing of fn separator rule on or off; + default is on + FOOTNOTE_SPACING Post footnote item spacing + FOOTNOTES_RUN_ON Run footnotes on (line numbering mode only) + RESET_FOOTNOTE_NUMBER Reset fn# to 1, or, if arg PAGE, reset + automatically to 1 on every page + RUNON_WARNING Utility macro; warns if FOOTNOTES_RUN_ON + was called when fn marker style is STAR or + NUMBER + +-Endnotes- + ENDNOTE_LEAD Leading for endnotes page + ENDNOTE_LINENUMBER_BRACKETS Brackets around line numbers identifying + endnotes and text + ENDNOTE_LINENUMBER_GAP Amount of space to leave between line + ENDNOTE_LINENUMBER_SEPARATOR Separator between line numbers identifying + endnotes and the endnote item text + endnotes and text + ENDNOTE_MARKER_STYLE NUMBER or LINE + ENDNOTE_NUMBERS_ALIGN_RIGHT Hang endnote numbers and align right + ENDNOTE_NUMBERS_ALIGN_LEFT Don't hang endnote numbers and align left + ENDNOTE_PARA_INDENT First line indent of paras in multi-para + endnotes + ENDNOTE_PARA_SPACE Whether to space paras in multi-para endnotes + ENDNOTE_PT_SIZE Base point size for endnotes page + FOOTNOTE_SPACING Post endnotenote item spacing + ENDNOTE_STRING Endnotes page head + ENDNOTE_STRING_ADVANCE Distance of title string "ENDNOTES" from top + edge of page + ENDNOTE_STRING_CAPS Capitalize the endnotes string + ENDNOTE_STRING_UNDERLINE Underscoring of endnotes page head + ENDNOTE_TITLE Endnotes identifying title + ENDNOTE_TITLE_SPACE Distance from top of page to endnotest title + ENDNOTE_TITLE_UNDERLINE Underscoring of endnotes identifying title + ENDNOTES_ALLOWS_HEADERS Page headers on endnotes pages? (boolean) + ENDNOTES_FIRST_PAGENUMBER Page number to appear on page 1 of endnotes + pages + ENDNOTES_HDRFTR_CENTER Print header/footer centre string on endnotes + pages? + ENDNOTES_HEADER_CENTER Print header centre string on endnotes pages? + ENDNOTES_FOOTER_CENTER Print footer centre string on endnotes pages? + ENDNOTES_NO_COLUMNS Turn columnar mode off for endnotes pages + ENDNOTES_NO_FIRST_PAGENUM Don't print a pagenumber on page 1 of + endnotes. + ENDNOTES_PAGENUM_STYLE Set numbering style for endnotes pages page + numbers + SINGLESPACE_ENDNOTES Single space TYPEWRITE endnotes + +-Bibliographies- + BIBLIOGRAPHY_ALLOWS_HEADERS Allow headers on bib pages + BIBLIOGRAPHY_FIRST_PAGENUMBER Starting page number for bibliographies + BIBLIOGRAPHY_HDRFTR_CENTER Header/footer center string for bib pages + BIBLIOGRAPHY_LEAD Base lead of bib pages + BIBLIOGRAPHY_NO_COLUMNS De-columnize bibliographies + BIBLIOGRAPHY_NO_FIRST_PAGENUM Don't print a page number on the first + page of bibliographies + BIBLIOGRAPHY_PAGENUM_STYLE Format for bib pages page numbering + BIBLIOGRAPHY_PT_SIZE Base point size for bib pages + BIBLIOGRAPHY_SPACING Post bib entry space + BIBLIOGRAPHY_STRING String for bib title + BIBLIOGRAPHY_STRING_ADVANCE Distance of title string "BIBLIOGRAPHY" from + top edge of page + BIBLIOGRAPHY_STRING_CAPS Capitalize bib title string + BIBLIOGRAPHY_STRING_UNDERLINE Underscore bib title string + SINGLESPACE_BIBLIOGRAPHY Singlespace bibs if PRINTSTYLE TYPEWRITE + +-Headers and footers- + FOOTER_COLOR Footer color + FOOTER_GAP Distance between running text and footer + FOOTER_MARGIN Distance from footer to bottom of page + FOOTERS Turns footers on or off + HDRFTR_CENTER String to go in centre part of header/footer; + default doctype + HDRFTR_CENTER_CAPS Centre part of header/footer in caps? (boolean) + HDRFTR_CENTER_PAD Pad hdrftr CENTER left or right by specified + amount + HDRFTR_GAP Distance from header/footer to running text + HDRFTR_LEFT_CAPS Left part of header/footer in caps? (boolean) + HDRFTR_LEFT String to go in left part of header/footer; + default is AUTHOR_1 + HDRFTR_LEFT The header/footer left string + HDRFTR_MARGIN Distance from top of page to header + HDRFTR_PLAIN Header/footer fam/ft/ps all same as running + text + HDRFTR_RECTO User-defined, single string recto + header/footer + HDRFTR_RIGHT_CAPS Right part of header/footer in caps? (boolean) + HDRFTR_RIGHT The header/footer right string + HDRFTR_RULE_GAP Space between header/footer and header/footer + rule + HDRFTR_RULE_INTERNAL Prints the header/footer rule + HDRFTR_RULE Turns header/footer rule on or off + When invoked internally, prints the rule. + HDRFTR_VERSO User-defined, single string verso + header/footer + HEADERS Turns headers on or off + HEADER_GAP Space between header and running text + HEADER_MARGIN Space from top of page to header + HEADERS_AND_FOOTERS Enables and permits the creation of + headers and footers that appear on the + same page + SWITCH_HDRFTR Switch HDRFTR_LEFT and HDRFTR_RIGHT + +-Page numbering- + PAGENUM_HYPHENS Turns on/off hyphens surrounding page numbers + PAGENUM_ON_FIRST_PAGE Print page number on first page when footers + are on (boolean) + PAGENUM_POS Controls placement of page numbers; + default=bottom/centred + PAGENUM_SIZE How much to in/decrease point size of page + numbers + PAGENUM_STYLE Page # in roman, Arabic, or alphabetic + RESTORE_PAGINATION Restore pagination after outputting non- + paginated endnotes. + SUSPEND_PAGINATION Suspend pagination prior to outputting + endnotes + +-Heads- + HEAD_CAPS Print section titles in caps? (boolean) + HEAD_SPACE Give HEADs 2 line-spaces before. If OFF, + only 1. Default is on. + HEAD_UNDERLINE Underline section titles? (boolean) + NUMBER_HEADS Print head numbers + RESET_HEAD_NUMBER Reset head number + HEAD_BASELINE_ADJUST Amount to raise head above baseline + +-Subheads- + NUMBER_SUBHEADS Print subhead numbers + RESET_SUBHEAD_NUMBER Reset subhead number + SUBHEAD_BASELINE_ADJUST Amount to raise subhead above baseline + +-Subsubheads- + NUMBER_SUBSUBHEADS Print subhead numbers + RESET_SUBSUBHEAD_NUMBER Reset subhead number + SUBSUBHEAD_BASELINE_ADJUST Amount to raise subhead above baseline + +-Para heads- + NUMBER_PARAHEADS Print parahead numbers + PARAHEAD_INDENT How much to indent paraheads + RESET_PARAHEAD_NUMBER Reset parahead number + + PREFIX_CH_NUM_WARNING Macro to abort PREFIX_CHAPTER_NUMBER + with a warning if the arg to CHAPTER isn't + a digit, and user hasn't supplied a digit + to PREFIX_CHAPTER_NUMBER + PREFIX_CHAPTER_NUMBER Prefix the chapter number to numbered + heads, subheads and paraheads +-Paragraphs- + INDENT_FIRST_PARAS Indent 1st paras? (doc default=not indented) + PARA_INDENT Size of para indent + PARA_SPACE Put a line space before paras + PP_FONT Overall doc font + +-Quotes- + Q_FITS Utility macro for DO_QUOTE + Q_NOFIT Utility macro for DO_QUOTE + QUOTE_AUTOLEAD Leading of (block)quotes + +-Line/section breaks- + LINEBREAK_CHAR Linebreak character, iterations and positioning + +-Printstyle TYPEWRITE- + ITALIC_MEANS_ITALIC For TYPEWRITE; render .FT I in italic. + SLANT_MEANS_SLANT In TYPEWRITE, render \*[SLANT] as slant + UNDERLINE_ITALIC In TYPEWRITE, render .FT I as underlined + UNDERLINE_QUOTES In TYPEWRITE, underline quotes? (boolean) + UNDERLINE_SLANT In TYPEWRITE, render \*[SLANT] as underlined + +-Table of contents- + TOC_APPENDS_AUTHORS Appends author(s) to toc doc title entries + TOC_LEAD Leading of toc pages + TOC_PADDING Number of placeholders for toc entries page + numbers + TOC_HEAD_INDENT Indent of toc head entries + TOC_HEADER_STRING TOC header string (default=Contents) + TOC_PAGENUM_STYLE Page numbering style (hdrftr nums) of + toc pages + TOC_RV_SWITCH Switch L/R margins of toc pages + TOC_PARAHEAD_INDENT Indent of toc parahead entries + TOC_SUBHEAD_INDENT Indent of toc subhead entries + TOC_TITLE_ENTRY User supplied toc doc title entry + TOC_TITLE_INDENT Indent of toc doc title entries + +<span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Aliases for header/footer control macros</span> + HEADER_SIZE HDRFTR_SIZE + HEADER_RIGHT_PS HDRFTR_RIGHT_SIZE + HEADER_RIGHT_SIZE HDRFTR_RIGHT_SIZE + HEADER_RIGHT_FAM HDRFTR_RIGHT_FAMILY + HEADER_RIGHT_FAMILY HDRFTR_RIGHT_FAMILY + HEADER_RIGHT_FONT HDRFTR_RIGHT_FONT + HEADER_RIGHT_FT HDRFTR_RIGHT_FONT + HEADER_LEFT_PS HDRFTR_LEFT_SIZE + HEADER_LEFT_SIZE HDRFTR_LEFT_SIZE + HEADER_LEFT_FAM HDRFTR_LEFT_FAMILY + HEADER_LEFT_FAMILY HDRFTR_LEFT_FAMILY + HEADER_LEFT_FONT HDRFTR_LEFT_FONT + HEADER_LEFT_FT HDRFTR_LEFT_FONT + HEADER_CENTRE_PS HDRFTR_CENTER_SIZE + HEADER_CENTRE_SIZE HDRFTR_CENTER_SIZE + HEADER_FAM HDRFTR_FAMILY + HEADER_FAMILY HDRFTR_FAMILY + HEADER_CENTRE_FAM HDRFTR_CENTER_FAMILY + HEADER_CENTRE_FAMILY HDRFTR_CENTER_FAMILY + HEADER_CENTRE_FONT HDRFTR_CENTER_FONT + HEADER_CENTRE_FT HDRFTR_CENTER_FONT + HEADER_CENTER_PS HDRFTR_CENTER_SIZE + HEADER_CENTER_SIZE HDRFTR_CENTER_SIZE + HEADER_CENTER_FAM HDRFTR_CENTER_FAMILY + HEADER_CENTER_FAMILY HDRFTR_CENTER_FAMILY + HEADER_CENTER_FONT HDRFTR_CENTER_FONT + HEADER_CENTER_FT HDRFTR_CENTER_FONT + FOOTER_SIZE HDRFTR_SIZE + FOOTER_RIGHT_PS HDRFTR_RIGHT_SIZE + FOOTER_RIGHT_SIZE HDRFTR_RIGHT_SIZE + FOOTER_RIGHT_FAM HDRFTR_RIGHT_FAMILY + FOOTER_RIGHT_FAMILY HDRFTR_RIGHT_FAMILY + FOOTER_RIGHT_FONT HDRFTR_RIGHT_FONT + FOOTER_RIGHT_FT HDRFTR_RIGHT_FONT + FOOTER_LEFT_PS HDRFTR_LEFT_SIZE + FOOTER_LEFT_SIZE HDRFTR_LEFT_SIZE + FOOTER_LEFT_FAM HDRFTR_LEFT_FAMILY + FOOTER_LEFT_FAMILY HDRFTR_LEFT_FAMILY + FOOTER_LEFT_FONT HDRFTR_LEFT_FONT + FOOTER_LEFT_FT HDRFTR_LEFT_FONT + FOOTER_CENTRE_PS HDRFTR_CENTER_SIZE + FOOTER_CENTRE_SIZE HDRFTR_CENTER_SIZE + FOOTER_FAM HDRFTR_FAMILY + FOOTER_FAMILY HDRFTR_FAMILY + FOOTER_CENTRE_FAM HDRFTR_CENTER_FAMILY + FOOTER_CENTRE_FAMILY HDRFTR_CENTER_FAMILY + FOOTER_CENTRE_FT HDRFTR_CENTER_FONT + FOOTER_CENTER_PS HDRFTR_CENTER_SIZE + FOOTER_CENTER_SIZE HDRFTR_CENTER_SIZE + FOOTER_CENTER_FAM HDRFTR_CENTER_FAMILY + FOOTER_CENTER_FAMILY HDRFTR_CENTER_FAMILY + FOOTER_CENTER_FONT HDRFTR_CENTER_FONT + FOOTER_CENTER_FT HDRFTR_CENTER_FONT + +<span style="display: block; margin-top: -.5em; margin-bottom: -2.5em;">+++LETTER MACROS+++</span> + + CLOSING Closing (i.e. Yours truly,) + CLOSING_INDENT Left indent of CLOSING + DATE Date for letters + FROM Addresser's name and address + GREETING Full salutation (e.g. Dear John Smith,) + NO_SUITE Remove suite page numbers from bottom of letter pages + SIGNATURE_SPACE Amount of room to leave for signature + TO Addressee's name and address + ALL_DONE .em (the "end macro") for letters + +<span style="display: block; margin-top: -.5em; margin-bottom: -2.5em;">+++SUPPORT+++</span> + + CHECK_INDENT Applies indents to doc elements inside ev's + (head, subhead, etc) + CLEANUP_DEFAULTS Removes selected rregisters and strings + from DEFAULTS after START + DO_COVER Formats and outputs covers + DO_DOC_COVER Formats and outputs doc covers + D0_QUOTE Outputs quotes with space adjustments before + and after + DIVER_FN_1_PRE -+ + DIVER_FN_2_PRE | Manage footnotes called inside diversions + | QUOTE, BLOCKQUOTE and EPIGRAPH + DIVER_FN_2_POST -+ + DIVERT_FN_LEFTOVER Diverts excess fn stored in FN_OVERFLOW into + FOOTNOTE + DIVERT_FN_OVERFLOW Diverts excess fn stored in FN_OVERFLOW when + FN_DEFER into FOOTNOTE + DO_EPIGRAPH Outputs epigraphs with space adjustments before + and after + FN_OVERFLOW_TRAP Fixed at B_MARGIN; if footnotes run longer than + B_MARGIN, diverts excess into FN_OVERFLOW + GET_ROMAN_INDENT Figures out amount of space to reserve + for roman numerals in lists + HDRFTR_RULE Prints rule under header or over footer + MN_OVERFLOW_TRAP Trap-invoked macro to collect margin note + overflows + NO_SHIM Disable SHIM + PRINT_FOOTNOTE_RULE An alias of PRINT_FOOTNOTE; prints footnote + separator rule + PRINT_HDRFTR Prints header/footer (trap invoked) + PRINT_PAGE_NUMBER Invoked in HEADER or FOOTER + PRINT_USERDEF_HDRFTR Prints user defined, single string recto/verso + header/footer + PROCESS_SHIM Calculates #SHIM when \n[.d] is lower on the + page than #T_MARGIN + PROCESS_FN_IN_DIVER Processes footnotes gathered in a diversion (called + at page/column breaks) + REMOVE_INDENT Removes indents set with CHECK_INDENT + Q_FITS Handles spacing of quotes when quote fits on the page + Q_NOFIT Handles spacing of quotes when quote does not fit on + the page + QUIT_LISTS Exit lists cleanly and completely + SET_LIST_INDENT Restore indent of a prev. level of list + SHIM Advance to next "valid" baseline + TBL*CLEANUP Remove selected registers and strings created + by TS/TH/TE + TBL*GET_QUAD Establish quad of tbl caption + tbl*float-warning If tbl in a float exceeds page limits + tbl*print-header Administrivia for printing tbl headers + tbl@top-hook Trap-invoked (HEADER); prints running tbl header + and moves FOOTER/FN_OVERFLOW_TRAP_POS traps + to accommodate tbl + TERMINATE .em that ensures deferred footnotes get output + on final pages + TRAPS Sets hdrftr traps; optionally adjusts #DOC_LEAD + to fill page to #B_MARGIN + TYPEWRITER Sets family (C), font (R) and point size (12) + for PRINTSTYLE TYPEWRITE + VFP_CHECK Trap-sprung macro, 1 valid baseline higher than + where FOOTER will be sprung; checks whether + there is, in fact, just enough room for + another line of running text to be added to + the page without jamming footnotes too close + to running text. + +<span style="display: block; margin-top: -.5em; margin-bottom: -2.5em;">+++DIVERSIONS+++</span> + + B_QUOTE Block (indented) quote text + CLOSING_TEXT Closing (i.e. Yours truly,) + EPI_TEXT Epigraph text + END_NOTES Endnotes text + FLOAT*DIV Float content + FN_IN_DIVER Footnotes gathered from inside a diversion + FN_OVERFLOW Excess footnotes when B_MARGIN is reached + FOOTNOTES Text of footnotes + GREETING Full salutation (e.g. Dear John Smith,) + LETTERHEAD<n> Date, addresser, addressee or greeting; + <n> is from 1 to 4, supplied by #FIELD + P_QUOTE Line for line (poetic) quote text + RUNON_FOOTNOTES Special diversion for run-on footnotes + RUNON_FN_IN_DIVER Special diversion for run-on footnotes inside + (block)quotes + tbl*header-div Running tbl header + TOC_ENTRIES TOC entries + +<span style="display: block; margin-top: -.5em; margin-bottom: -2.5em;">+++NUMBER REGISTERS+++</span> + + #ADJ_BIB_LEAD Adjust BIB_LEAD? (boolean) + #ADJ_DOC_LEAD Adjust DOC_LEAD? (boolean) + #ADJ_EN_LEAD Adjust EN_LEAD? (boolean) + #ADJ_TOC_LEAD Adjust TOC_LEAD? (boolean) + #ADVANCE_FROM_TOP Distance from page top to start of + running text if no docheader + #ARG_NUM Keeps track of number of args passed to a + macro + #ARGS_TO_LIST Was LIST passed some args? (boolean) + #ATTRIBUTE_COLOR Colorize attribute string? (boolean) + #AUTHOR_<n> Strings passed to AUTHOR + #AUTHOR_COLOR Colorize author(s)? (boolean) + #AUTHOR_COVER_NUM Incrementing register used in defining + $AUTHOR_COVER_<n> strings + #AUTHOR_DOCCOVER_NUM Incrementing register used in defining + $AUTHOR_COVER_<n> strings + #AUTHOR_NUM Keeps track of user-defined string + AUTHOR_<n> in AUTHOR + #AUTHORS Equals final value of AUTHOR_NUM; + used for authors in doc header + #BASELINE_MARK In PP, the vertical position on the page + (when paragraph spacing is on) after a + quote or blockquote has been output and + the post-quote space has been added. + #BMARG Position of unvarying bottom margin + during doc processing; required for + collecting footnotes inside diversions + #BIB_ALLOWS_HEADERS Put headers on bib pages? (boolean) + #BIB_ALLOWS_HEADERS_ALL Put headers on all bib pages? (boolean) + #BIB_FIRST_PAGE Tells PRINT_PAGE_NUMBER about bibliography + first page number + #BIB_FIRST_PN Starting pagenumber for bibliographies + #BIB_HDRFTR_CENTER Put a center string in bib page headers? + (boolean) + #BIB_LEAD Bibliography lead, expressed in points + #BIB_LIST Output bibs in list style? (boolean) + #BIB_NO_COLS De-columnize bibliographies? (boolean) + #BIB_NO_FIRST_PN Put a page number on the first page of + bibliographies? (boolean) + #BIB_SINGLESPACE Single-space TYPEWRITE bibliographies? (boolean) + #BIB_SPACE Post item space for bibliography pages + #BIB_STRING_ADVANCE Vertical position of "BIBLIOGRAPHY" string + (relative to the top edge of the page) + #BIB_STRING_CAPS Capitalize bib title? (boolean) + #BIB_STRING_UNDERLINE Underscore bib title? 0=no; 1=yes; 2=double + #BIB_STRING_UNDERLINE_WEIGHT Underline weight in units + #BIB_STRING_UNDERLINE_WEIGHT_ADJ Underline weight/2 + #BIB_PS Base point size for bibliography pages expressed + in points + #BIBLIOGRAPHY Are we doing a bib page? (boolean) + #BQ_AUTOLEAD Register created by BLOCKQUOTE_AUTOLEAD + #BQ_LEAD Leading of blockquotes + #BQUOTE_COLOR Colorize blockquotes? (boolean) + #BQUOTE_LN Number blockquotes? (boolean) + #CAP_HEIGHT_ADJUST Tallest cap height of strings LEFT, CENTER, + and RIGHT in footers; used to place rule + over footer + #CAPS_WAS_ON In HDRFTR, to re-enable running text CAPS + (boolean) + #CENTER_CAP_HEIGHT Cap height of CENTER string in + headers/footers + #CH_NUM The chapter number obtained by + PREFIX_CHAPTER_NUMBER + #CHAPTER_CALLED Has CHAPTER been invoked? (boolean); used + by PREFIX_CHAPTER_NUMBER to see whether + to try to get the chapter number from + the arg passed to CHAPTER + #CHAPTER_TITLE_NUM Incrementing register used to define strings + $CHAPTER_TITLE_<n> + #CHAPTER_TITLE_COLOR Colorize chapter title? (boolean) + #CLOSING Is there a closing (for letters)? (boolean) + #CODE_COLOR Colorize CODE? (boolean) + #CODE_SIZE_ADJ Percentage by which to scale CODE font + #COL_L_LENGTH Line length of columns + #COL_<n>_L_MARGIN Left margin of column <n> + #COL_NEXT Was COL_NEXT invoked? (boolean; used in + FOOTER) + #COL_NUM Incrementing counter of num of columns; + for use with #COL_<n>_L_MARGIN + #COL_TOTAL #COL_L_LENGTH + #GUTTER; used to calculate + #COL_<n>_L_MARGIN + #COLLATE Are we performing a COLLATE? (boolean) + #COLLATED_DOC If 1, instructs TOC that this is a collated + doc + #COLUMNS Are columns turned on? (boolean) + #COLUMNS_WERE_ON Stores columnar state prior to outputting + endnotes in no-columns mode + #COPY_STYLE 1=draft, 2=final + #COUNTERS_RESET Tells FOOTNOTE if fn counters have + been reset because of footnotes gathered + inside a diversion + #COVER Print a COVER? (boolean) + #COVER_ATTRIBUTE_COLOR Colorize cover attribution string? (boolean) + #COVER_AUTHOR Put AUTHOR(s) on COVER? (boolean) + #COVER_AUTHOR_COLOR Colorize cover author(s)? (boolean) + #COVER_BLANKPAGE Output blankpage after COVER? (boolean) + #COVER_COLOR Colorize COVER? (boolean) + #COVER_COPYRIGHT Put copyright on COVER? (boolean) + #COVER_COPYRIGHT_COLOR Colorize cover copyright line? (boolean) + #COVER_DOCTYPE Put doctype on COVER? (boolean) + #COVER_DOCTYPE_COLOR Colorize cover doctype? (boolean) + #COVER_END Are we ending a COVER? (boolean) + #COVER_LEAD Cover leading + #COVER_MISC Put misc on COVER? (boolean) + #COVER_MISC_COLOR Colorize cover misc line? (boolean) + #COVER_RULE_WEIGHT Doctype underline weight on COVER + #COVER_RULE_WEIGHT_ADJ COVER_RULE_WEIGHT/2 + #COVER_START_POS Vertical starting pos of cover material + #COVER_SUBTITLE Put subtitle on COVER? (boolean) + #COVER_TITLE Put title on COVER? (boolean) + #COVER_TITLE_NUM Number of cover title items + #COVER_TITLE_COLOR Colorize cover title? (boolean) + #COVER_SUBTITLE_COLOR Colorize cover subtitle? (boolean) + #COVER_UNDERLINE Underline doctype on COVER? (boolean) + #COVER_UNDERLINE_WEIGHT Doctype underline weight on COVER + #COVER_UNDERLINE_WEIGHT_ADJ COVER_UNDERLINE_WEIGHT/2 + #CURRENT_V_POS \n[.d] ; used in SHIM + #COVERS Print covers? (boolean) + #COVERS_COUNT Include COVER in pagination scheme? (boolean) + #COVERS_OFF Don't print COVERs (boolean) + #DATE_FIRST Was .DATE invoked as first letter + header after .START? (boolean) + dc "mark" register for document columns + DD Vert. space before and after eqn blocks + defer / new-defer Appended to FLOAT*DIV: if float deferred + #DEFER_BIB_SPACING Tells DEFAULTS to do BIBLIOGRAPHY_SPACING + if it was called before START + #DEFER_PAGINATION Tells COLLATE to restore pagination (from + RESTORE_PAGINATION + #DEFER_SPACE_ADDED Was space added between two "first" footnotes that + appear on the same page? (boolean) + #DELAY_SHIM Instructs DO_QUOTE to delay SHIM when quote + falls at the top of a page + #DEPTH LIST depth + #DEPTH_1 Doc header depth with lead adjustment + (#DOCHEADER_LINES * #DOCHEADER_LEAD) + #DEPTH_2 Doc header depth without lead adjustment + (#DOCHEADER_LINES * #DOC_LEAD) + #DEPTH_TO_B_MARGIN Page length minus #B_MARGIN + D-float Depth of float containing/ending with + DRH, DRV, DBX, or DCL + DI eqn indent if EQ I + #DIVER_FN Register that tells FOOTNOTE whether to + "move" or "defer" a footnote collected + inside a diversion + #DIVERSIONS_HY_MARGIN A reasonable value for .hym applied to + QUOTE, BLOCKQUOTE and EPIGRAPH to + avoid excessive hyphenation if these are + set quad left + #DIVERTED Set to 1 in DIVERT_FN_OVERFLOW; reset + subsequently in FOOTNOTES when called by + PROCESS_FN_LEFTOVER to 2 or 3 for use by + FOOTER to decide whether to in/decrease + #FN_DEPTH when outputting footnotes + #DOC_COVER Are we doing a DOC_COVER? (boolean) + #DOC_COVER_AUTHOR Put AUTHOR(s) on DOC_COVER? (boolean) + #DOCCOVER_BLANKPAGE Output blank page after DOC_COVER? (boolean) + #DOC_COVER_CHAPTER_TITLE_COLOR Colorize CHAPTER_TITLE on DOC_COVER? (boolean) + #DOC_COVER_COPYRIGHT Put copyright on DOC_COVER? (boolean) + #DOC_COVER_DOCTYPE Put doctype on DOC_COVER? (boolean) + #DOCCOVER_END Are we finishing a DOC_COVER? (boolean) + #DOC_COVER_LEAD Doc cover leading + #DOC_COVER_MISC Put misc on DOC_COVER? (boolean) + #DOC_COVER_START_POS Vertical starting pos of doc cover material + #DOC_COVER_COLOR Colorize cover? (boolean) + #DOC_COVER_START_POS Vertical starting pos of cover material + #DOC_COVER_TITLE_COLOR Colorize doc cover title? (boolean) + #DOC_COVER_SUBTITLE_COLOR Colorize doc cover subtitle? (boolean) + #DOC_COVER_ATTRIBUTE_COLOR Colorize doc cover attribution string? (boolean) + #DOC_COVER_AUTHOR_COLOR Colorize doc cover author(s)? (boolean) + #DOC_COVER_DOCTYPE_COLOR Colorize doc cover doctype? (boolean) + #DOC_COVER_COPYRIGHT_COLOR Colorize doc cover copyright line? (boolean) + #DOC_COVER_MISC_COLOR Colorize doc cover misc line? (boolean) + #DOC_COVER_SUBTITLE Put subtitle on DOC_COVER? (boolean) + #DOC_COVER_TITLE Put title on DOC_COVER? (boolean) + #DOC_COVER_TITLE_NUM Number of doc cover title items + #DOC_COVERS Print doc covers? (boolean) + #DOC_COVERS_OFF Don't print DOC_COVERs (boolean) + #DOCCOVER_RULE_WEIGHT Doctype underline weight on DOC_COVER + #DOCCOVER_RULE_WEIGHT_ADJ DOCCOVER_RULE_WEIGHT/2 + #DOCCOVER_UNDERLINE Underline doctype on DOC_COVER? (boolean) + #DOCCOVER_UNDERLINE_WEIGHT Doctype underline weight on DOC_COVER + #DOCCOVER_UNDERLINE_WEIGHT_ADJ DOCCOVER_UNDERLINE_WEIGHT/2 + #DOCCOVERS_COUNT Include DOC_COVER in pagination scheme? (boolean) + #DOC_HEADER Whether to print a doc header (boolean) + #DOC_LEAD_ADJ Incrementing value (in units) added to + #DOC_LEAD to fill page to #B_MARGIN + #DOC_LEAD Leading used in body + #DOC_L_LENGTH Global L_LENGTH + #DOC_L_MARGIN Global L_MARGIN + #DOC_LR_MARGIN_TMP In HEADER, if RECTO_VERSO=1, temporarily + holds DOC_L_MARGIN during page margin switch + #DOC_PT_SIZE Point size used for body text + #DOC_R_MARGIN Global R_MARGIN + #DOC_TYPE 1=default, 2=chapter, 3=named, 4=letter + #DOCHEADER_ADVANCE Distance from top-of-page to baseline of + docheader + #DOCHEADER_COLOR Colorize docheader? (boolean) + #DOCHEADER_DEPTH Depth of docheader + #DOCHEADER_LEAD Lead of doc header + (#DOC_LEAD + #DOCHEADER_LEAD_ADJ) + #DOC_LEAD_ADJUST_OFF Don't adjust DOC_LEAD (boolean) + #DOCS Always 1 after START + #DOCTITLE_NUM Number of doctitle items + #DOCTYPE_COLOR Colorize doctype? (boolean) + #DOCTYPE_RULE_WEIGHT Doctype underline weight + #DOCTYPE_RULE_WEIGHT_ADJ DOCTYPE_RULE_WEIGHT/2 + #DOCTYPE_UNDERLINE Underline doctype? (boolean) + #DOCTYPE_UNDERLINE_WEIGHT Weight of doctype underline + #DOCTYPE_UNDERLINE_WEIGHT_ADJ DOCTYPE_UNDERLINE_WEIGHT/2 + #DOING_COVER Tells PRINT_AUTHORS that it's printing + the authors for a cover or doc cover + #DONE_ONCE Keeps track of how many times footnotes + have been collected inside the same diversion + #DONT_RULE_ME Rule this (apparent) first footnote? (boolean) + #DIVER_LN_OFF Turn linenumbering off in (block)quotes? + (boolean) + #DRAFT_WITH_PAGENUM Are we attaching draft/revision info to page + number? (boolean) + #EM_ADJUST Amount to raise \(em at END + #EN_ALLOWS_HEADERS Put page headers on endnotes pages? (boolean) + #EN_ALLOWS_HEADERS_ALL Put page headers on all endnotes pages? + (boolean) + #EN_BQ_AUTOLEAD Register created by EN_BLOCKQUOTE_AUTOLEAD + #EN_BQ_LEAD Leading of blockquotes on endnotes pages + #EN_FIGURE_SPACE Width of \0, for use with formatting endnotes + #EN_FIRST_PAGE Tells PRINT_PAGE_NUMBER about endnotes + first page number + #EN_FIRST_PN Page number that appears on page 1 of + endnotes pages. + #EN_HDRFTR_CENTER Should we print centre string of + headers/footers on endnotes pages? (boolean) + #EN_LEAD Lead of endnotes + #EN_LN_BRACKETS Are we using brackets for line-numbered + endnotes (boolean) + #EN_LN_SEP Are we using a separator for line-numbered + endnotes (boolean) + #EN_MARK \n[ln] when \*[EN-MARK] is called + #EN_MARK_2 \n[ln] when ENDNOTE is called + #EN_MARKER_STYLE 1=NUMBER; 2=LINE + #EN_NO_COLS Do not set endnotes in columns? (boolean) + #EN_NO_FIRST_PN Put pagenumber on 1st page of endnotes? + (boolean) + #EN_NUMBER Number of current endnote + #EN_NUMBER_PLACEHOLDERS Number of placeholders to reserve for endnotes + numbers + #EN_NUMBERS_ALIGN_RIGHT Hang and align endnote numbers right? + (boolean) + #EN_NUMBERS_ALIGN_LEFT Align endnote numbers with left margin? + (boolean) + #EN_NUMBERS_PLACEHOLDERS Number of placeholders when endnote numbers + hang and align right + #EN_NUMBER_L_LENGTH Line length for endnote numbers when they're + right aligned + #EN_PP_INDENT First line indent of paras in multi-para + endnotes + #EN_PP_SPACE Space multi-paras in endnotes? (boolean) + #EN_PS ps of endnotes + #EN_Q_AUTOLEAD Register created by EN_QUOTE_AUTOLEAD + #EN_Q_LEAD Leading of quotes on endnotes pages + #EN_REF Put REFs in endnotes? (boolean) + #EN_SINGLESPACE Single space endnotes pages? (boolean) + #EN_STRING_ADVANCE Vertical position of "ENDNOTES" string (relative to + the top edge of the page) + #EN_STRING_CAPS Should ENDNOTES capitalize the endnotes + string? (boolean) + #EN_STRING_UNDERLINE Underscore endnotes page head? (boolean) + #EN_STRING_UNDERLINE_WEIGHT Weight of endnotes page title underscore + #EN_STRING_UNDERLINE_WEIGHT_ADJ EN_STRING_UNDERLINE_WEIGHT_ADJ/2 + #EN_TEXT_INDENT Page offset for text of endnotes when + numbers right align + #EN_TITLE_UNDERLINE Underscore endnotes document identifier? + (boolean) + #EN_TITLE_UNDERLINE_WEIGHT Weight of endnotes document identification + underscore + #EN_TITLE_UNDERLINE_WEIGHT_ADJ #EN_STRING_UNDERLINE_WEIGHT_ADJ/2 + #END_QUOTE For PP=0 indenting; did we just end a quote? + (boolean) + #ENDNOTE Are we in an endnote? (boolean) + #ENDNOTE_REFS Are REFs going to endnotes? (boolean) + #ENDNOTES Are we in an endnote (for FOOTERs; boolean) + #EPI_ACTIVE Are we in an epigraph? (boolean) + #EPI_AUTOLEAD Autolead value for epigraphs + #EPI_COLOR Colorize epigraphs? (boolean) + #EPI_DEPTH Depth of epigraph from first baseline to + last + #EPI_FITS Does epigraph fit on page/column? (boolean) + #EPIGRAPH Did we have an epigraph? (boolean) + #EPI_LEAD_DIFF Difference between #DOC_LEAD and #EPI_LEAD + #EPI_LEAD Leading of epigraph; set by AUTOLEAD + #EPI_LINES_EVEN Even # of lines at end of epi crossing page in + TYPEWRITE (d-spaced)? + #EPI_LINES Number of lines in the epigraph + #EPI_LINES_TO_END Number of epigraph lines remaining after + footer trap is sprung + #EPI_LINES_TO_TRAP Number of epigraph lines till footer trap is + sprung + #EPI_L_LENGTH Epigraph line length + #EPI_OFFSET Left margin of epigraphs + #EPI_OFFSET_VALUE Epigraph indent as a function of page offset + #EPI_ON Are we in an epigraph? (boolean) + #EPI_WHITESPACE Space after epigraph to compensate for + epigraph leading + #FIELD Incrementing register tacked onto LETTERHEAD + #FINIS Was FINIS invoked? (boolean) + #FINIS_STRING_CAPS Capitalize finis string? (boolean) + #FINIS_COLOR Colorize FINIS? (boolean) + #FIRST_DOC_TITLE_PN Page number of 1st (collated) doc (for TOC) + #FIRST_DOC_TOC_PN_PADDING Padding for 1st page number of 1st (collated) doc + (for TOC) + float*after-shim / \n[nl]; tests if SHIM has stayed on the same + float*before-shim baseline + float-span Float can run to multiple pages? (boolean) + float*with-tbl Float contains a tbl block + #FN_AUTOLEAD Autolead value of footnotes + #FN_BL_INDENT Left indent of INDENT BOTH in footnotes + #FN_BR_INDENT Right indent of INDENT BOTH in footnotes + #FN_COUNT Which fn marker to print; also to + tell mom to reserve space for and print + the rule above footnotes + #FN_COUNT_AT_FOOTER The FN_COUNT after FOOTNOTES has been + output in FOOTER + #FN_COUNT_FOR_COLS Holds a separate footnote count for columns + (so they don't reset to 0 1 until page break) + #FN_DEFER Defer footnote to next page/column? (boolean) + If 0, don't defer. + #FN_DEFER_SPACE Whether to deposit space before + footnote 1 because there's a deferred + footnote on the page + #FN_DEPTH Depth of footnote diversion(s) + #FN_FOR_EPI Signals to epigraph that a footnote is being + processed + #FN_GAP When there are footnotes on a page, the + difference between where FOOTER will be + sprung and the next valid baseline. + Used in VFP_CHECK. + #FN_LEAD Lead in footnotes after FN_AUTOLEAD is + applied + #FN_L_INDENT Left indent of INDENT LEFT in footnotes + #FN_LINES Number of lines in fn; used to calculate + fn depth + #FN_LN_BRACKETS Are footnote linenumber brackets being used? + (boolean) + #FN_LN_SEP Is a footnote linenumber separator being used? + (boolean) + #FN_MARK \n[ln] when \*[FN-MARK] is called + #FN_MARK_2 \n[nl] when FOOTNOTE is called + #FN_MARKER_STYLE 1=STAR; 2=NUMBER + #FN_MARKERS Print footnote markers? (boolean) + #FN_NUMBER The footnote number attached to running text + (and fns) when numbers instead of + star/dagger is being used for footnootes + numbers + #FN_OVERFLOW_DEPTH Depth of leftover from footnote processing + #FN_OVERFLOW_TRAP_POS The register that sets the position of + trap FN_OVERFLOW_TRAP. + #FN_R_INDENT Right indent of INDENT RIGHT in footnotes + #FN_REF Put REFs in footnotes? (boolean) + #FN_RULE Print fn rule? (boolean) + #FN_RULE_ADJ # of points to raise footnote separator from + its baseline + #FN_RULE_LENGTH Length of footnote separator rule + #FN_RULE_WEIGHT Weight of the footnote separator rule + #FN_RULE_WEIGHT_ADJ FN_RULE_WEIGHT/2 + #FN_WAS_DEFERED Tells HEADER about a deferred footnote + #FOOTER_DIFF In TRAPS, the difference between the + original #B_MARGIN and #VISUAL_B_MARGIN + #FOOTER_GAP Amount of space between end of text and + page # + #FOOTER_MARGIN Amount of space between page # and bottom + of page + #FOOTER_POS Position of footer trap (required for + collecting footnotes inside a diversion) + #FOOTER_RULE Print footer rule? (boolean) + #FOOTER_RULE_GAP Gap between footer and separator rule above + #FOOTER_RULE_WEIGHT Weight of footer rule + #FOOTER_RULE_WEIGHT_ADJ #FOOTER_RULE_WEIGHT/2 + #FOOTERS_ON Are we using footers? (boolean) + #FOOTERS_WERE_ON Were footers on? - used in FINIS and BLANKPAGE + (boolean) + #FOOTNOTE_COLOR Colorize footnotes? (boolean) + #FORCE Force float? (boolean) + #FROM_BIB_STRING Tells UNDERSCORE it's underscoring $BIB_STRING + #FROM_COVER Tells UNDERSCORE it's underscoring on a cover + #FROM_DOC_COVER Tells UNDERSCORE it's underscoring on a doccover + #FROM_DOCTYPE Tells UNDERSCORE it's underscoring the doctype + #FROM_EN_STRING Tells UNDERSCORE it's underscoring $EN_STRING + #FROM_EN_TITLE Tells UNDERSCORE it's underscoring $EN_TITLE + #FROM_HEAD Tells UNDERSCORE it's underscoring a head + #FROM_DIVERT_FN Signals to FOOTNOTE, when run from + within DIVERT_FN_LEFTOVER, to set + #SPACE_REMAINING to the total area + allowable for running text + #FROM_FOOTER In col to col footnote processing, tells + FOOTNOTE that FOOTNOTES was output from + FOOTER. + #FROM_HEADER In col to col footnote processing, tells + FOOTNOTE that FOOTNOTES was output from + HEADER. + #FULLSPACE_QUOTES Should we fullspace quotes? (boolean) + #GET_DC_HEIGHT Used in routine to get the correct point size for + dropcaps + #GET_DEPTH Signals to FOOTNOTE that it should + measure the depth of current footnotes + plus the most recently added one, except + where the footnote is to be deferred to + the next page or column + #GUTTER Width of gutter between columns + #H_BASELINE_ADJ Vertical spacing adjustment for heads (default=0) + #HDRFTR_BOTH Are we setting both headers and footers? (boolean) + #HDRFTR_CENTER_CAPS CENTER part of header/footer in caps? + (boolean; default=off) + #HDRFTR_CENTER_COLOR Colorize header/footer center? (boolean) + #HDRFTR_COLOR Colorize headers/footers? (boolean) + #HDRFTR_CTR_PAD_LEFT Amount of hdrftr CENTER padding on the left + #HDRFTR_CTR_PAD_RIGHT Amount of hdrftr CENTER padding on the right + #HDRFTR_CTR_PAD_TMP Temp storage of left hdrftr CENTER padding + (for recto/verso switch) + #HDRFTR_HEIGHT Cap height of $HDRFTR_RECTO/$HDRFTR_VERSO + strings + #HDRFTR_LEFT_CAPS Left part of header/footer in caps? + (boolean; default=off) + #HDRFTR_LEFT_COLOR Colorize header/footer left? (boolean) + #HDRFTR_PT_SIZE Initial point size of headers/footers + #HDRFTR_RECTO_CAPS Header/footer recto caps? (boolean) + #HDRFTR_RIGHT_CAPS Right part of header/footer in caps? + (boolean; default=on) + #HDRFTR_RIGHT_COLOR Colorize header/footer right? (boolean) + #HDRFTR_RULE Print head/footer rule? (boolean) + #HDRFTR_RULE_COLOR Colorize header/footer rule? (boolean) + #HDRFTR_RULE_GAP Space between header/footer and + header/footer rule + #HDRFTR_RULE_WEIGHT Weight of header/footer rule + #HDRFTR_RULE_WEIGHT_ADJ HDRFTR_RULE_WEIGHT/2 + #HDRFTR_TMP_CAPS_SWITCH Temporarily holds HDRFTR_LEFT_CAPS value if + #SWITCH_HDRFTR=1 + #HDRFTR_VERSO_CAPS Header/footer verso caps? (boolean) + #HEAD 1=main/section head 2=subhead + #HEAD_CAPS Print section titles in caps? (boolean) + #HEAD_COLOR Colorize heads? (boolean) + #HEADER_GAP Distance from header to running text + #HEAD_NUM Head number + #HEAD_SPACE 2 line spaces before heads? (boolean) + #HEAD_UNDERLINE Underline heads? (boolean) + #HEAD_UNDERLINE_WEIGHT Head underline weight + #HEAD_UNDERLINE_WEIGHT_ADJ HEAD_UNDERLINE_WEIGHT/2 + #HEADER_MARGIN Distance from top of page to header + #HEADER_RULE Print header rule? (boolean) + #HEADER_RULE_GAP Gap between header and header rule + #HEADER_RULE_WEIGHT Header rule weight + #HEADER_RULE_WEIGHT_ADJ HEADER_RULE_WEIGHT/2 + #HEADERS_ON Headers on? (boolean) + #HEADER_STATE Saves header state in COLLATE for use in + START after COLLATE + #HEADERS_WERE_ON Were headers on? - used in BLANKPAGE (boolean) + #HF_OFF Has HEADERS_AND_FOOTERS been turned off? (boolean) + #HORIZ_MARK Horizontal + #HOW_MANY Number of blank pages to output + #IGNORE Should we ignore this macro? Set to 1 in + TYPEWRITE. + #IN_BIB_LIST Tells ITEM we're doing a bibliography in + list style + #INDENT_FIRST_PARAS Indent first paras? (boolean) + #INDENT_FIRSTS Tells footnotes to leave INDENT_FIRST_PARAS + alone if it's on for running text. + #ITALIC_MEANS_ITALIC For TYPEWRITE. (boolean) + #ITEM Counter for removing _1, _2, _3... strings + in TITLE, CHAPTER_TITLE, etc. + #L_LENGTH_FOR_EPI Stores line length at top of doc for use + with EPIGRAPH when columns are on + #L_MARGIN_DIFF Difference between DOC_L_MARGIN and + L_MARGIN + #LB_CHAR_ITERATIONS Number of linebreak character iterations + #LEFT_CAP_HEIGHT Cap height of left string in headers/footers + #VALID_BASELINE Calculates vert. position of next valid + baseline in SHIM + #LETTER_STYLE 1=BUSINESS 2=PERSONAL + #LINEBREAK Did we have a linebreak? (boolean) + #LINEBREAK_COLOR Colorize linebreak? (boolean) + #LINENUMBER_COLOR Colorize linenumbers? (boolean) + #LINENUMBERS Holds various states of line-numbering when + line numbering is enabled + #LINES_PER_PAGE # of lines (at DOC_LEAD) that fit on + page after #B_MARGIN is set + #LN Test 1st arg to NUMBER_LINES for digit or string + MN-active Are we doing a margin note? (boolean) + MN-curr Current margin note + MN-div-<n>-depth Depth of margin note <n> + MN-hy Hyphenation flag of margin notes + #MNinit Have margin notes been initialized? (boolean) + #MNinit_DEFERRED Did we have to defer a margin note? (boolean) + MN-last-pos Baseline of previous margin note + MN-lead-adj Difference between the current DOC_LEAD and the + leading used in margin notes + MN-left Number of current left margin note + MN-left-start Horizontal start position of left margin note + MN-left-width Width of left margin note + MN-right Number of current right margin note + MN-right-start Horizontal start position of right margin note + MN-right-width Width of right margin note + MN-sep Gutter between margin notes and running text + MN-shifted Did we have to shift a margin note down? + (boolean) + MN-size Point size of margin notes + MN-spacing Leading of margin notes + #MISC_<n> Used to print "next" misc lines in DO_COVER + #MISC_COVER_NUM Number of cover misc items + #MISC_DOCCOVER_NUM Number od doc cover misc items + #MISC_NUM Number of MISC items + #MISCS =#MISC_NUM in DO_COVER + #MN_OVERFLOW_LEFT If 1, left margin note text overflows + #MN_OVERFLOW_RIGHT If 1, right margin note text overflows + #n%_AT_PAGENUM_SET Page # from n% when PAGENUMBER invoked + #NEEDS_SPACE Instruct FOOTNOTE, when called by + PROCESS_FN_IN_DIVER, that if the footnote + had to be deferred, the VFP must be + raised by 1v (set in DIVER_FN_2_PRE) + #NEITHER Should we print no covers? (boolean) + #NEXT_AUTHOR Supplies correct digit to AUTHOR_<n> + when printing authors in doc header + #NEXT_LN Next linenumber when \n[ln] has to be stored + because linenumbering suspended + #NEXT_MISC Incrementing counter for misc lines in + DO_COVER + #NEXT_SUBTITLE Incrementing register used to print subtitles + #no-repeat-MN-left Don't repeat left margin note (boolean) + #no-repeat-MN-right Don't repeat right margin note (boolean) + #NO_BACK_UP Instructs FN_OVERFLOW_TRAP not to + subtract 1 line of footnote lead from + FN_OVERFLOW in a PREV_FN_DEFERRED + situation. + #NO_BREAK Set to 1 in COLLATE if last line of + text before COLLATE falls at the bottom + of the page; instructs NEWPAGE to use + 'br instead of .br + #NO_COLUMNS Don't print document in columns (boolean) + #NO_FN_MARKER Don't print footnote markers (boolean) + #NO_SHIM Should SHIM shim? (boolean) + #NO_SPACE When para spacing is active, instructs + PP not to add space after a quote or blockquote + #NO_TRAP_RESET Should we reset page traps? (boolean) + #NOT_YET_ADJUSTED Line on which a footnote was called has not yet + been adjusted by groff (boolean) + #NUM_AUTHORS # of authors mod 2 to test if odd or even + # of authors + #NUM_MISCS Number of args passed to MISC + #NUM_MISCS_COVER Number of args passed to MISC COVER + #NUM_MISCS_DOCCOVER Number of args passed to MISC DOC_COVER + #NUMBER_HEAD Are heads numbered? (boolean) + #NUMBER_PH Are paraheads numbered? (boolean) + #NUMBER_SH Are subheads numbered? (boolean) + #NUMBER_SSH Are subsubheads numbered? (boolean) + #NUM_COLS Number of columns per page + #NUMBERED If set to 1, lets PARAHEAD know that + main-, sub-, and subsubhead numbers have already been + prefixed to the parahead string + #NUM_FIELDS Incrementing register used to match + #TOTAL_FIELDS + #OK_PROCESS_LEAD Initial processing of TOC and endnote + leading is deferred until OK_PROCESS_LEAD=1 + #ORIGINAL_B_MARGIN The value for #B_MARGIN as set by the + macro B_MARGIN + #ORIG_DOC_LEAD DOC_LEAD before endnotes, bibliographies, tocs + #ORIG_L_LENGTH \\n[.l] before starting LISTs + #ORIGINAL_DOC_LEAD The lead for PRINT_STYLE 1 as set in + PRINTSTYLE; required so that PRINT_STYLE 1 + footnotes have an unadjusted lead of + 12 points + #OVERFLOW Signals to FOOTNOTE that some of the + footnote text won't fit on the page + #OVERFLOW_LEFT Does left margin note overflow? (boolean) + #OVERFLOW_RIGHT Does right margin note overflow? (boolean) + #P Page number for margin notes + #PAD_LIST_DIGITS<n> Pad LIST digits for LIST <n>? (boolean) + #PAGE_NUM_ADJ What to add to n% to get #PAGENUMBER + #PAGE_NUM_H_POS 1=left 2=CENTER 3=right; default=2 + #PAGE_NUM_COLOR Colorize pagenumbers? (boolean) + #PAGE_NUM_HYPHENS Print hyphens surrounding page numbers? + (boolean) + #PAGE_NUM_HYPHENS_SET Did user set (or unset) hyphens around page + numbers? (boolean) + #PAGE_NUM_POS_SET Did user set page number position? (boolean) + #PAGE_NUM_SET Test if PAGE_1_NUM was used to set 1st page + number + #PAGE_NUM_V_POS 1=top 2=bottom; default=2 + #PAGE_NUMS Print page numbers? (boolean) + #PAGE_POS Exact position on page during a diversion + (required for collecting footnotes inside + a diversion) + #PAGE_TOP \n[nl] after HEADER completes itself + #PAGENUM_STYLE_SET Did we set pagenumber style? (boolean) + #PAGENUMBER The page number + #PAGES Number of blank pages to output + #PAGINATE Are we paginating? (boolean) + #PAGINATE_TOC Is toc pagination on? (boolean) + #PAGINATE_WAS_ON Keeps track of pagination state while + outputting blank pages + #PAGINATION_STATE Saves pagination state in COLLATE for use in + START after a COLLATE + #PAGINATION_WAS_ON Was pagination on? - used in FINIS (boolean) + #PH_COLOR Colorize paraheads? (boolean) + #PH_INDENT Size of parahead indent + #PH_NUM Parahead number + #PP 0 at first para; auto-increments + #PP_AT_PAGE_BREAK # of last (incl. partial) para on page + #PP_INDENT How much to indent paras + #PP_SPACE Put space before paras? (boolean) + #PP_SPACE_SUSPEND Suspend para spacing for blockquotes and + epigraphs + #PP_STYLE_PREV In footnotes, stores PP style in effect + prior to invoking FOOTNOTE + #PP_STYLE Regular para=1; quote or epi para=2 + #PRE_COLLATE Set to 1 in COLLATE; prevents FAMILY + from clobbering a user-set DOC_FAMILY + #PREFIX_CH_NUM Prefix the chapter number to numbered + heads, subheads and/or paraheads? (boolean) + #PREV_FN_DEFERRED Was previous footnote deferred? (boolean) + #PRINT_PAGENUM_ON_PAGE_1 Should we print the page number on first + page of doc when footers are on? (boolean) + #PRINT_STYLE Typewrite=1, typeset=2 + #PT_SIZE_IN_UNITS Stored value of \n[.ps] from last time + PT_SIZE was called + #Q_AUTOLEAD Register created by QUOTE_AUTOLEAD + #Q_DEPTH Depth of quote + #Q_FITS Does this quote fit on one page/column? + (boolean) + #Q_LEAD Leading of quotes + #Q_LEAD_DIFF Difference between leading of running text + and the leading used in quotes/blockquotes + #Q_LEAD_REAL Leading of quotes and blockquotes saved at the + ends of their respective diversions + #Q_L_LENGTH Line length of quotes + #Q_OFFSET Page offset for quotes + #Q_OFFSET_VALUE Factor by which to multiply PP_INDENT to + offset quotes + #Q_PARTIAL_DEPTH The amount of a quote/blockquote that fits at + the bottom of a page when a quote/blockquote + spans pages + #Q_PP In PP, stores para # in QUOTE. Removed in + ENDQUOTE. + #Q_SPACE_ADJ The flexible amount of whitespace to add before + and after a quote/blockquote + #Q_TOP Vertical place on page that a quote starts + #QUOTE 1=PQUOTE, 2=BQUOTE + #QUOTE_COLOR Colorize quotes (poetic)? (boolean) + #QUOTE_LN Linenumber quotes? (boolean) + #RECTO_VERSO Switch HEADER_LEFT and HEADER_RIGHT on + alternate pages? (boolean) + ref*suppress-period Suppress period at end of ref field? (boolean) + ref*type Kind of reference we're building + #REF Was REF called? (boolean) + #REF_HY Hyphenate REFs? (boolean) + #REF_WARNING Have we issued a ref warning? (boolean) + #REPEAT Number of times to repeat linebreak + character + #RERUN_TRAPS Should we invoke TRAPS? (boolean) + #RESERVED_SPACE Just enough room to put 1 more line of + footnotes on the page + #RESET_EN_PP Holds value of register #EN_PP_INDENT + #RESET_EN_PP_INDENT Holds value of register #EN_PP_INDENT + #RESET_FN_COUNTERS 1 = "moved" footnote collected in a diversion + 2 = "deferred" fn collected in a diversion + #RESET_FN_NUMBER Should fn# start at 1 on every page? + (boolean) + #RESET_L_LENGTH Stores current line length when necessary + #RESET_PARA_SPACE Holds current value of boolean register + #PP_SPACE + #RESET_PP_INDENT Stores value of PP_INDENT when needed + #RESET_QUOTE_SPACING Stores value of boolean register + #FULLSPACE_QUOTES (used in endnotes) + #RESTORE_ADJ_DOC_LEAD Stores value of #ADJ_DOC_LEAD whenever needed + #RESTORE_B_MARGIN Stores #B_MARGIN whenever needed + #RESTORE_DOC_LEAD Stores value of current doc lead (used in + endnotes) + #RESTORE_HY Restore hyphenation after .][? (boolean) + #RESTORE_INDENT Store \n[.i] whenever needed + #RESTORE_L_LENGTH Stores \n[.l] whenever needed + #RESTORE_LN_NUM Should we restore line numbering? (boolean) + #RESTORE_OFFSET Page offset at moment footer trap is sprung; + not currently used + #RESTORE_UNDERLINE Instructs CODE OFF to restore underlining of + italics (TYPEWRITE) if underlining was + formerly on + #RIGHT_CAP_HEIGHT Cap height of right string in + headers/footers + #RULED Tells FOOTNOTE if a rule (or space has been + put above the first footnote on the page + #RUNON_FN_IN_DIVER If #LN=1, if we're in a (block)quote, instructs + FOOTNOTE to unformat diversion RUNON_FN_IN_DIVER + #RUNON_FOOTNOTES If #LN=1, instructs FOOTNOTE to unformat + diversion RUNON_FOOTNOTES + #RUN_ON Are we using run-on footnotes? (boolean) + #SAVED_DIVER_FN_COUNT In the case of a footnote inside a + diversion that should be treated as a + "normal" footnote, FOOTNOTE needs to + distinguish between a "normal" deferred + footnote (always the 1st footnote on the + page) and one that only looks as if + it should be deferred, when, in fact, + it's an overflow; this register lets + FOOTNOTE know whether the diversion + footnote is, in fact, the first on the + page. + #SAVED_DOC_LEAD Stored value of #DOC_LEAD (used in DEFAULTS after + a COLLATE) + #SAVED_FN_COUNT #FN_COUNT+1 prior to +#FN_COUNT; used + in FOOTNOTES while gathering fns inside + diversions + #SAVED_FN_COUNT_FOR_COLS #FN_COUNT_FOR_COLS+1 prior to + +#FN_COUNT_FOR_COLS; used in FOOTNOTES + while gathering fns inside diversions + #SAVED_FN_DEPTH_1 Footnote depth prior to adding footnote + diversion depth to FN_DEPTH; used when + footnote text will overflow + #SAVED_FN_DEPTH_2 Footnote depth after to adding footnote + diversion depth to FN_DEPTH; used when + footnote text will overflow + #SAVED_FN_NUMBER Stores current FN_NUMBER whenever needed + #SAVED_FOOTER_POS Position of FOOTER in DO_QUOTE (hack) + #SAVED_LEAD In FOOTER and DO_FOOTER, stores the + lead in effect prior to outputting + FOOTNOTES or performing either + PROCESS_FN_LEFTOVER or + PROCESS_FN_IN_DIVERSION; both the + diversion FOOTNOTES and the two macros + have, for PRINT_STYLE 2, an AUTOLEAD + call, which requires that an LS be + performed with the #SAVED_LEAD in + order to remove register #AUTO_LEAD or + #AUTO_LEAD_FACTOR. + #SAVED_UNDERSCORE_WEIGHT Stores underscore weight whenever needed + #SAVED_UNDERSCORE_WEIGHT_ADJ SAVED_UNDERSCORE_WEIGHT/2 + #SAVED_VFP Store variable footer position whenever needed + #SAVED_WEIGHT Stores weight given to RULE_WEIGHT whenever needed + #SAVED_WEIGHT_ADJ SAVED_UNDERSCORE_WEIGHT/2 + #SEP_TYPE Set to 1 if LIST separator is ( or [ or { + #SH_COLOR Colorize subheads? (boolean) + #SH_BASELINE_ADJ #DOC_LEAD/8 (TYPESET) or /5 (TYPEWRITE) + (used for subhead vertical spacing) + #SH_NUM Subhead number + #SHIM Amount of lead required to advance to + next valid baseline + #SILENT_BQUOTE_LN "Silently" linenumber blockquotes? (boolean) + #SILENT_QUOTE_LN "Silently" linenumber quotes? (boolean) + #SINGLE_SPACE Is TYPEWRITE in single space mode? (boolean) + #SKIP ENTRY If one, don't print the first entry (the + document title) in the TOC of uncollated docs. + #SKIP_FOOTER If 1, instructs DO_FOOTER to do nothing + if B_MARGIN falls below FOOTER_MARGIN + #SLANT_MEANS_SLANT For TYPEWRITE. (boolean) + #SLANT_WAS_ON Keeps track of SLANT when it needs to go off + for a while + #SPACE_REMAINING Space remaining to footer trap; used to + decide whether or not to defer a footnote + #SPACE_TO_FOOTER Distance to FOOTER trap; used to calculate + available space when FOOTNOTE is called inside + a diversion + #SR_ADJ_FACTOR An adjustment factor that compensates + for the fact that #SPACE_REMAINING + sometimes reports a fractionally larger + space than is actually available for + footnote text. + #SSH_BASELINE_ADJ #DOC_LEAD/8 (TYPESET) or /5 (TYPEWRITE) + (used for subsubhead vertical spacing) + #START If 1, signals completion of START + #START_FOR_FOOTERS Toggle set in START; signals to + PRINT_HDRFTR that START has been invoked, + allowing PRINT_HDRFTR to decide whether or + not to print a footer on page 1 + #START_FOR_MNinit If 1, defer processing MN_INIT until #START + #STORED_PP_INDENT Temporarily holds value of #PP_INDENT + #SUBHEAD Was subhead the last macro invoked? (boolean) + Controls vert. space between SUBHEAD and + SUBSUBHEAD + #SUBTITLE_COLOR Colorize subtitle? (boolean) + #SUBTITLE_COVER_NUM Incrementing register used to define strings + $SUBTITLE_COVER_<n> + #SUBTITLE_DOCCOVER_NUM Incrementing register used to define strings + $SUBTITLE_DOCCOVER_<n> + #SUBTITLE_NUM Incrementing register used to define strings + $SUBTITLE_<n> + #SUBTITLES Holds number of subtitle items + #SUITE Current page number (for letters) + #SUP_PT_SIZE Point size of superscript + #SUSPEND_PAGINATION Suspend pagination prior to endnotes? + #SWITCH_HDRFTR Switch HDRFTR_LEFT and HDRFTR_RIGHT? + (boolean) + tbl*boxed tbl has box or allbox (boolean) + tbl*center-label-on-table Is tbl caption centered? (boolean) + tbl*have-header tbl has a running header (boolean) + tbl*header-ht Depth of tbl*header-div + tbl*left-label-on-table Is tbl caption quad left? (boolean) + tbl*move-fn-overflow-trap Whether to move FN_OVERFLOW_TRAP_POS + to accommodate tbl + tbl*move-fn-overflow Amount by which to change + FN_OVERFLOW_TRAP_POS to accommodate tbl + tbl*move-footer Amount by which to change FOOTER trap + to accommodate tbl + tbl*move-footer-trap Whether to move FOOTER trap to accommodate + tbl + tbl*no-shim Whether to SHIM tbl (boolean) + tbl*right-label-on-table Is tbl caption quad right? (boolean) + #T_MARGIN_LEAD_ADJ \n[.v]-12000; ensures critically accurate + placement of first lines on pages when + doc processing is not being used and + a T_MARGIN has been set + #TAB_OFFSET# "#" at the end is from $CURRENT_TAB + #TERMINATE Has TERMINATE been called? (boolean) + #TITLE_COLOR Colorize title? (boolean) + #TITLE_NUM Number of title items + #TOC_AUTHORS Whether to append author(s) to toc doc + title entries (boolean) + #TOC_ENTRY_PN Current page number when a toc entry is + collected + #TOC_FIRST_PAGE If 1, tells PRINT_PAGE_NUMBER that this + is the first page of the toc + #TOC_LEAD Leading of toc pages + #TOC_PN_PADDING Max. # of placeholders for toc entries + page numbers + #TOC_PS Point size of toc pages + #TOC_RV_SWITCH Switch L/R margins of toc pages + #TOC_HEAD_INDENT Indent of toc head entries + #TOC_HEAD_SIZE_CHANGE ps in/decrease of toc head entries + #TOC_PH_INDENT Indent of toc parahead entries + #TOC_PH_SIZE_CHANGE ps in/decrease of toc parahead entries + #TOC_SH_INDENT Indent of toc subhead entries + #TOC_SH_SIZE_CHANGE ps in/decrease of toc subhead entries + #TOC_TITLE_INDENT Indent of toc doc title entries + #TOC_TITLE_SIZE_CHANGE ps in/decrease of toc doc title entries + @TOP Controls .ns at page top; + trap-invoked (FOOTER); mostly trap-removed + (RR_@TOP) + #TOTAL_FIELDS Total number of letter header fields + #TRAP \n[.t]-1 (used in DO_QUOTE) + #TW Width of tbl block + #UNADJUSTED_DOC_LEAD Argument passed to DOC_LEAD prior to + adjusting (set in TRAPS) + #UNDERLINE_ITALIC For TYPEWRITE. (boolean) + #UNDERLINE_ON Was UNDERLINE called? (boolean) + #UNDERLINE_QUOTES Was UNDERLINE_QUOTES called? (boolean) + #UNDERLINE_QUOTE Underline pquotes? (boolean) + #UNDERLINE_SLANT For TYPEWRITE. (boolean) + #UNDERLINE_WAS_ON Was underlining on prior to the + invocation of current macro? (boolean) + #UNDERLINE_WAS_ON_FN As above, but for footnotes only + #USER_DEF_HDRFTR_CENTER Has user defined hdrftr center? (boolean) + #USER_DEF_HDRFTR_LEFT Has user defined hdrftr left? (boolean) + #USER_DEF_HDRFTR_RIGHT Has user defined hdrftr right? (boolean) + #USER_DEF_HEADER_CENTER User defined CENTER title? (boolean); + used in COPYSTYLE + #USER_DEF_HEADER_LEFT User defined CENTER title? (boolean); + used in COPYSTYLE + #USER_DEF_HEADER_RIGHT User defined CENTER title? (boolean) + used in COPYSTYLE + #USERDEF_HDRFTR User defined single string recto/verso + header/footer? (boolean) + #USERDEF_HDRFTR_RECTO_QUAD 1=left, 2=CENTER, 3=right + #USERDEF_HDRFTR_VERSO_QUAD 1=left, 2=CENTER, 3=right + #VARIABLE_FOOTER_POS Wandering trap position for processing + footnotes and footers; pos depends on number of + footnotes + #VISUAL_B_MARGIN Set in TRAPS, what \n[nl] would report + on the last line of running text before + FOOTER is sprung. + #VFP_DIFF #FN_DEPTH minus #SAVED_FN_DEPTH; the + number of footnote lines that will fit + on the page when there will be over, and + therefore the amount by which to raise + the VFP for footnotes with overflow after + the 1st footnote. + y Vertical position stored with mk in hdrftrs. + +<span style="display: block; margin-top: -.5em; margin-bottom: -2.5em;">+++STRINGS+++</span> + + $1ST_LETTER First letter of first arg to LIST + $ADJUST_BIB_LEAD 2nd arg to BIBLIOGRAPHY_LEAD; if not blank + adjust bib leading + $ADJUST_EN_LEAD 2nd arg to ENDNOTE_LEAD; if not blank adjust + endnote leading + $ADJUST_TOC_LEAD 2nd arg to TOC_LEAD; if not blank adjust + toc leading + $ATTRIBUTE_COLOR Attribution string color + $ATTRIBUTE_STRING Attribution string in doc header + $ATTRIBUTE_STRING_COVER Attribution string on cover + $ATTRIBUTE_STRING_DOCCOVER Attribution string on doc cover + $AUTHOR_<n> Document author(s) + $AUTHOR The author, or the first argument + passed to .AUTHOR ($AUTHOR_1) + $AUTHOR_COLOR Author color + $AUTHOR_COVER_<n> Author(s) on cover + $AUTHOR_DOCCOVER_<n> Author(s) on doc cover + $AUTHOR_FAM Family to use for author in doc header + $AUTHOR_FT Font to use for author in doc header + $AUTHOR_SIZE_CHANGE ps in/decrease of author in doc header + $AUTHOR_PT_SIZE Absolute ps of authors + $AUTHORS Comma-separated concatenated + string of all args passed to .AUTHOR + $BIB_FAM Bibliography page family + $BIB_FT Bibliography page font + $BIB_LEAD Base leading for bibliographies + $BIB_LIST_SEPARATOR Separator between enumerator and text + when outputting bibliographies in + LIST style + $BIB_LIST_PREFIX Prefix before enumerator when outputting + bibliographies in LIST style + $BIB_PN_STYLE Format of bibliography page numbers + $BIB_QUAD + $BIB_SPACE Post entry space for bibliographies + $BIB_STRING Bibliography title string + $BIB_STRING_FAM Bib title family + $BIB_STRING_FT Bib title font + $BIB_STRING_QUAD Bib title quad + $BIB_STRING_RULE_GAP Distance between the underscores when + BIB_STRING (bib first-page header) is + double-underlined + $BIB_STRING_SIZE_CHANGE Bib title size (+ or -) + $BIB_STRING_UNDERLINE_GAP Distance between BIB_STRING text and (first) + underline rule + $BQ_LN_GUTTER Gutter between line numbers and bquotes in + bquotes + $BQUOTE_COLOR Blockquote color + $BQUOTE_FAM Family to use for blockquotes + $BQUOTE_FT Font to use for blockquotes + $BQUOTE_QUAD Quad value for blockquotes + $BQUOTE_SIZE_CHANGE ps in/decrease of blockquotes + $BX_COLOR Box color + $BX_DEPTH Box depth + $BX_INDENT Box left margin starting position + $BX_WEIGHT Box rule weight + $BX_WIDTH Box width + $CENTER_TITLE What to put in the middle of header + title + $CH_NUM Chapter number (as a string) + $CHAPTER The chapter number + $CHAPTER_STRING What to print whenever the word + "chapter" is required + $CHAPTER_TITLE Concatenated args passed to CHAPTER_TITLE + $CHAPTER_TITLE_<n> Chapter title items + $CHAPTER_TITLE_FAM Family of chapter title + $CHAPTER_TITLE_FT Font of chapter title + $CHAPTER_TITLE_SIZE_CHANGE ps in/decrease of chapter title + $CHAPTER_TITLE_PT_SIZE Absolute ps of chapter title + $CHAPTER_TITLE_COLOR Color of chapter title + $CL_COLOR Circle (ellipse) color + $CL_DEPTH Circle (ellipse) depth + $CL_INDENT Circle (ellipse) left margin starting + position + $CL_WEIGHT Circle (ellipse) rule weight + $CL_WIDTH Circle (ellipse) width + $CLOSE_INDENT Argument passed to CLOSING_INDENT + $CODE_FAM Family to use with CODE + $CODE_FT Font to use with CODE + $CODE_COLOR Color of CODE + $COLOR_SCHEME Color scheme arg passed to NEWCOLOR + $COPY_STYLE DRAFT or FINAL + $COPYRIGHT Copyright info + $COPYRIGHT_COVER Copyright info for cover + $COPYRIGHT_DOCCOVER Copyright info for doc cover + $COPYRIGHT_FAM Copyright line family + $COPYRIGHT_FT Copyright line font + $COPYRIGHT_PT_SIZE Base string to which $COPYRIGHT_SIZE_CHANGE + is appended + $COPYRIGHT_SIZE_CHANGE Copyright line size + $COPYRIGHT_COLOR Copyright line color + $COPYRIGHT_QUAD Copyright line quad direction + $COVER_ATTRIBUTE_COLOR Cover attribution string color + $COVER_AUTHOR_COLOR Cover author(s) color + $COVER_AUTHOR_FAM Cover author(s) family + $COVER_AUTHOR_FT Cover author(s) font + $COVER_AUTHOR_PT_SIZE Author point size on cover + $COVER_AUTHOR_SIZE_CHANGE Cover author(s) size + $COVER_CHAPTER_TITLE_COLOR Color of chapter title on cover + $COVER_CHAPTER_TITLE_PT_SIZE Size of chapter title on cover + $COVER_COLOR Overall cover color + $COVER_COPYRIGHT_PT_SIZE Size of copyright info on cover + $COVER_DOCTYPE_PT_SIZE Size of doctype on cover + $COVER_FAM Overall cover family + $COVER_LEAD_ADJ String appended to DOC_LEAD to arrive at + base leading of covers + $COVER_SUBTITLE_PT_SIZE Size of subtitle on cover + $COVER_TITLE_PT_SIZE Size of title on cover + $COVER_TITLE User-defined cover title string + $COVER_TITLE_<n> Cover title items + $COVER_TITLE_FAM Cover title family + $COVER_TITLE_FT Cover title font + $COVER_TITLE_SIZE_CHANGE Cover title size + $COVER_TITLE_COLOR Cover title color + $COVER_UNDERLINE_GAP Distance between baseline of the doctype + on covers and the underline + $COVER_SUBTITLE_FAM Cover subtitle family + $COVER_SUBTITLE_FT Cover subtitle font + $COVER_SUBTITLE_SIZE_CHANGE Cover subtitle size + $COVER_SUBTITLE_COLOR Cover subtitle color + $COVER_DOCTYPE_FAM Cover doctype family + $COVER_DOCTYPE_FT Cover doctype font + $COVER_DOCTYPE_SIZE_CHANGE Cover doctype size + $COVER_DOCTYPE_COLOR Cover doctype color + $COVER_COPYRIGHT_FAM Cover copyright family + $COVER_COPYRIGHT_FT Cover copyright font + $COVER_COPYRIGHT_SIZE_CHANGE Cover copyright size + $COVER_COPYRIGHT_COLOR Cover copyright color + $COVER_MISC_FAM Cover misc family + $COVER_MISC_FT Cover misc font + $COVER_MISC_SIZE_CHANGE Cover misc size + $COVER_MISC_COLOR Cover misc color + $CURRENT_EV \n[.ev] at REF_BRACKETS_START + $DC_COLOR Dropcap color + $DOC_COVER_ATTRIBUTE_COLOR Doc cover attribution string color + $DOC_COVER_AUTHOR_COLOR Doc cover author(s) color + $DOC_COVER_AUTHOR_FAM Doc cover author(s) family + $DOC_COVER_AUTHOR_FT Doc cover author(s) font + $DOC_COVER_AUTHOR_PT_SIZE Size of author on doc cover + $DOC_COVER_AUTHOR_SIZE_CHANGE Doc cover author(s) size + $DOC_COVER_CHAPTER_TITLE_COLOR Color of chapter title on doc cover + $DOC_COVER_CHAPTER_TITLE_PT_SIZE Size of chapter title on doc cover + $DOC_COVER_COLOR Overall doc cover color + $DOC_COVER_COPYRIGHT_COLOR Doc cover copyright color + $DOC_COVER_COPYRIGHT_FAM Doc cover copyright family + $DOC_COVER_COPYRIGHT_FT Doc cover copyright font + $DOC_COVER_COPYRIGHT_PT_SIZE Size of copyright info on doc cover + $DOC_COVER_COPYRIGHT_SIZE_CHANGE Doc cover copyright size + $DOC_COVER_DOCTYPE_COLOR Doc cover doctype color + $DOC_COVER_DOCTYPE_FAM Doc cover doctype family + $DOC_COVER_DOCTYPE_FT Doc cover doctype font + $DOC_COVER_DOCTYPE_PT_SIZE Size of doctype on doc cover + $DOC_COVER_DOCTYPE_SIZE_CHANGE Doc cover doctype size + $DOC_COVER_MISC_COLOR Doc cover misc color + $DOC_COVER_MISC_FAM Doc cover misc family + $DOC_COVER_MISC_FT Doc cover misc font + $DOC_COVER_MISC_SIZE_CHANGE Doc cover misc size + $DOC_COVER_FAM Overall doc cover family + $DOC_COVER_LEAD_ADJ String appended to DOC_LEAD to arrive at base + leading of doc covers + $DOC_COVER_SUBTITLE_FAM Doc cover subtitle family + $DOC_COVER_SUBTITLE_FT Doc cover subtitle font + $DOC_COVER_SUBTITLE_PT_SIZE Size of subtitle on doc cover + $DOC_COVER_SUBTITLE_SIZE_CHANGE Doc cover subtitle size + $DOC_COVER_SUBTITLE_COLOR Doc cover subtitle color + $DOC_COVER_TITLE User-defined doc cover title string + $DOC_COVER_TITLE_<n> Doc cover title items + $DOC_COVER_TITLE_COLOR Doc cover title color + $DOC_COVER_TITLE_FAM Doc cover title family + $DOC_COVER_TITLE_FT Doc cover title font + $DOC_COVER_TITLE_PT_SIZE Size of title on doc cover + $DOC_COVER_TITLE_SIZE_CHANGE Doc cover title size + $DOC_FAM Predominant font family used in the + document + $DOC_QUAD Quad used for body text (justified or + left) + $DOC_TITLE Concatenated args passed to DOCTITLE + $DOC_TITLE_<n> DOCTITLE items + $DOC_TYPE Document type (default, chapter, named, + letter) + $DOCCOVER_UNDERLINE_GAP Distance between baseline of doctype and the + underline on covers + $DOCHEADER_COLOR Color of docheader + $DOCHEADER_FAM Family used for all parts of the docheader + $DOCHEADER_QUAD Quad direction (LRC) of docheader + $DOCHEADER_LEAD_ADJ +|- value applied to #DOC_LEAD to + in/decrease leading of doc header + $DOCTYPE_COLOR Color of DOCTYPE string in doc header + $DOCTYPE_FAM Family to use for DOCTYPE string in + doc header + $DOCTYPE_FT Font to use for DOCTYPE string in + doc header + $DOCTYPE_SIZE_CHANGE ps in/decrease of DOCTYPE string in + doc header + $DOCTYPE_PT_SIZE Absolute ps of DOCTYPE + $DOCTYPE_UNDERLINE_GAP Distance between baseline of DOCTYPE and the + underline in doc header + $DRAFT The draft number (string valued) + $DRAFT_STRING What to print whenever the word "draft" + is required + EN_MARK Inline, gets #EN_MARK (\(ln) + $EN_CLOSE_BRACKET Close bracket for line-number enumerated + endnotes + $EN_FAMILY Family for endnotes + $EN_FT Font for endnotes + $EN_LEAD Leading of endnotes pages + $EN_LINENUMBER String to print for line-number enumerators + in line-numbered endnotes + $EN_LN_FAM Family for line-numbers in line-number + identified endnotes + $EN_LN_FT Font for line-numbers in line-number + identified endnotes + $EN_LN_GAP Gap to leave in initial endnote lines + between line-number identifies and text + $EN_LN_SEP User-defined separator to use between line + number(s) and endnotes when endnotes are + identified by line number + $EN_LN_SIZE_CHANGE Size change (+ or -) for line-numbers in + line-number identified endnotes + $EN_OPEN_BRACKET Open bracket for line-number enumerated + endnotes + $EN_PN_STYLE Pagenumbering style for endnotes pages + $EN_QUAD Quad for endnotes + $EN_STRING Endnotes page head + $EN_STRING_FAM Endnotes page head family + $EN_STRING_FT Endnotes page head font + $EN_STRING_QUAD Endnotes page head quad direction + $EN_STRING_RULE_GAP Distance between rules when EN_STRING is + double-underlined + $EN_STRING_UNDERLINE_GAP Distance between baseline of EN_STRING and + underline rule + $EN_STRING_SIZE_CHANGE Endnotes page head size + $EN_TITLE Endnote document identifier + $EN_TITLE_FAM Endnote document identifier family + $EN_TITLE_FT Endnote document identifier font + $EN_TITLE_QUAD Endnote document identifier quad + direction + $EN_TITLE_SIZE_CHANGE Endnote document identifier size + $EN_TITLE_UNDERLINE_GAP Distance between baseline of EN_TITLE and + underline rule + $EN_NUMBER_FAM Endnote numbering family + $EN_NUMBER_FT Endnote numbering font + $EN_NUMBER_SIZE_CHANGE Endnote numbering size + $EPI_AUTOLEAD Autolead value (decimals ok) of + epigraphs + $EPI_COLOR Color of epigraphs + $EPI_FAM Family to use in epigraphs + $EPI_FT Font to use in epigraphs + $EPI_OFFSET_VALUE Arg passed to EPIGRAPH_INDENT if the + arg has a unit of measure appended to it + $EPI_QUAD Quad in block-style epigraphs + (justified or left) + $EPI_SIZE_CHANGE ps in/decrease of epigraphs + $EVAL_BIB_SPACE Temporary string to find out if the + arg to BIBLIOGRAPHY_SPACING ended in "v" + $EVAL_EI_ARG Temporary string to find out whether + the arg to EPIGRAPH_INDENT ended with + a unit of measure + $EVAL_QI_ARG Temporary string to find out whether + the arg to QUOTE_INDENT ended with + a unit of measure + eval*[B Used to get substring of \*([B + eval*[S Used to get substring of \*([S + eval*[s Used to get substring of \*([s + $FINIS_COLOR Color of FINIS string + $FINIS_STRING What to print when FINIS macro is + invoked + float-adj:bottom A + or - sign + float-adj:top A + or - sign + float*type Used with tbl; 'boxed' or 'table' + FN_MARK Inline, gets #FN_MARK ( \n[ln] ) + $FN_CLOSE_BRACKET Close bracket for line-number identified + footnotes + $FN_FAM Family used in footnotes + $FN_FT Font used in footnotes + $FN_LINENUMBER String to print before footnotes when + line-numbering enabled for footnotes + $FN_LN_SEP Separator after line-number identified + footnotes + $FN_OPEN_BRACKET Open bracket for line-number identified + footnotes + $FN_QUAD Quad used in footnotes + $FN_SIZE_CHANGE ps in/decrease of footnotes + $FN_SPACE Post footnote space + $FOOTNOTE_COLOR Footnote color + $FTR_RECTO_QUAD Quad direction of footer recto + $FTR_RECTO_STRING String for footer recto + $FTR_VERSO_QUAD Quad direction of footer verso + $FTR_VERSO_STRING String for footer verso + $HDR_RECTO_QUAD Quad of header recto + $HDR_RECTO_STRING String for header recto + $HDR_VERSO_QUAD Quad of header verso + $HDR_VERSO_STRING String for header verso + +<span style="display: block; border-top: 1px solid black; border-bottom: 1px solid black; padding-top: 2px;">**Note: "header", in the descriptions below, means either headers or footers</span> + $HDRFTR_CENTER What to put in CENTER part of headers; + default doctype + $HDRFTR_CENTER_COLOR Color of CENTER part of headers + $HDRFTR_CENTER_FAM Family of CENTER part of headers + $HDRFTR_CENTER_FT Font of centre part of headers + $HDRFTR_CENTER_NEW HDRFTR_CENTER after the start of TOC; + defined in HDRFTR_CENTER if + HDRFTR_CENTER is called as + FOOTER_CENTER + $HDRFTR_CENTER_OLD HDRFTR_CENTER just prior to start of + TOC; defined in HDRFTR_CENTER if + HDRFTR_CENTER is called as + FOOTER_CENTER + $HDRFTR_CENTER_SIZE_CHANGE ps in/decrease of centre title in + headers + $HDRFTR_COLOR Color of headers/footers + $HDRFTR_FAM Family to use in headers + $HDRFTR_LEFT_COLOR Color of LEFT part of headers + $HDRFTR_LEFT_FAM Family of left part of headers + $HDRFTR_LEFT_FT Font of left part of headers + $HDRFTR_LEFT_SIZE_CHANGE ps in/decrease of author in headers + $HDRFTR_LEFT What to put in left part of headers; + default author + $HDRFTR_RIGHT_COLOR Color of RIGHT part of headers + $HDRFTR_RIGHT_FAM Family of right part of headers + $HDRFTR_RIGHT_FT Font of right part of headers + $HDRFTR_RIGHT_SIZE_CHANGE ps in/decrease of right part of + headers + $HDRFTR_RIGHT What to put in right part of headers; + default title + $HDRFTR_RULE_COLOR Color of header rule + $HDRFTR_SIZE_CHANGE ps in/decrease of headers + $HDRFTR_TMP_SIZE_CHANGE_SWITCH Temporarily holds + HDRFTR_LEFT_SIZE_CHANGE if + #SWITCH_HDRFTRS=1 + $HDRFTR_TMP_SWITCH Temporarily holds HDRFTR_LEFT if + #SWITCH_HDRFTRS=1 + $HDRFTR_TMP_COLOR_SWITCH Temporarily holds HDRFTR_LEFT_COLOR if + #SWITCH_HDRFTRS=1 + $HEAD_COLOR Head color + $HEAD_FAM Family to use for section titles + $HEAD_FT Font to use for section titles + $HEAD_QUAD Quad value of section titles + $HEAD_SIZE_CHANGE ps in/decrease of section titles + $HEAD_UNDERLINE_GAP Distance between a head and the underline + $HYPHEN Vertically adjusted hyphen used around page + numbers + $LHS Holds digits on the left side of the decimal + in weight arg passed to RULE_WEIGHT + $LINEBREAK_CHAR Character that marks line breaks + $LINEBREAK_CHAR_V_ADJ +|- amount by which to raise/lower + linebreak character + $LAST_CHAR Temporary string used to discover whether + user has remembered to put a digit after + ROMAN or roman in arg to LIST + $LINEBREAK_COLOR Linebreak color + $LIST_ARG_1 The first arg to LIST (minus digits if + ROMAN or roman + $LN_COLOR Linenumber color + $LN_FAMILY Linenumber family + $LN_FONT Linenumber font + $LN_GUTTER Gutter to leave between line numbers + and text + $LN_INC 2nd arg to NUMBER_LINES as a string + $LN_NUM 1st arg to NUMBER_LINES as a string + $LN_SIZE_CHANGE ps in/decrease of linenumbers + $MISC_<n> Position of args pass to MISC + $MISC_COLOR Misc color + $MISC_COVER_<n> Misc items for cover + $MISC_DOCCOVER_<n> Misc items for doc cover + $MISC_QUAD Misc quad direction + $MN-arg<n> Sequentially numbered args passed to MNinit + MN-color Color of margin note + MN-curr Number of current margin note + MN-dir Left or right margin note + MN-font Font of margin note + MN-left-ad Fill mode of margin note + PAGE# For use in hdrftr strings where page # + is needed; \*[PAGE] + $PAGENUM_COLOR Page number color + $PAGENUM_STYLE String passed to PAGENUM_STYLE + $PAGE_NUM_FAM Family of page numbers + $PAGE_NUM_FT Font of page numbers + $PAGE_NUM_SIZE_CHANGE ps in/decrease of page numbers + $PAPER Paper size (LETTER, A4, LEGAL); + default=LETTER + $PH_COLOR Parahead color + $PH_FAM Parahead family + $PH_FT Parahead font + $PH_SIZE_CHANGE ps in/decrease of paraheads + $PH_SPACE Amount of horizontal space between a parahead + and the start of paragraph text + $PP_FT Font used in paragraphs + $RESTORE_PAGENUM_STYLE Hold previous page numbering style + $ROMAN_WIDTH<n> The digit(s) appended by user to ROMAN or + roman when LIST is invoked + $Q_LN_GUTTER Gutter between linenumbers and quotes + in quotes + $Q_OFFSET_VALUE Arg passed to QUOTE_INDENT if the + arg has a unit of measure appended to it + $QUOTE_COLOR Quote (poetic) color + $QUOTE_FAM Family to use for pquotes + $QUOTE_FT Font to use for pquotes + $QUOTE_SIZE_CHANGE ps in/decrease of pquotes + ref*post-punct Final punctuation mark of references + ref*spec!<n> Holds fields required by differing reference + types + ref*string The data passed to a reference + $REF_BIB_INDENT 2nd line indent value for references in + bibliographies + $REF_EN_INDENT 2nd line indent value for references in + endnotes + $REF_FN_INDENT 2nd line indent value for references in + footnotes + $REF_STYLE MLA bibliography-style or footnote/endnote + style; used in ref*add-<x> + $RESTORE_SS_VAR Saves \*[$SS_VAR] for use with ref*build + #REVISION The revision number (string valued) + $REVISION_STRING What to print whenever the word + "revision" is required + $RHS Holds digits on the right side of the decimal + in weight arg passed to RULE_WEIGHT + $RL_COLOR Rule color (DRH/DRV) + $RL_DEPTH Rule depth (DRH/DRV) + $RL_INDENT Left start position of rule (DRH/DRV) + $RL_LENGTH Rule length (DRH/DRV) + $RL_WEIGHT Rule weight (DRH/DRV) + $SAVED_COPYRIGHT Temporarily holds string in $COPYRIGHT + $SAVED_RULE_GAP Temporarily holds string in $RULE_GAP + $SAVED_DOC_FAM Document family in effect before COLLATE + $SAVED_PP_FT $PP_FT in effect at start of + .COLLATE; tested for and removed + in .PP + $SH_FAM Family to use in subheads + $SH_FT Font to use in subheads + $SH_SIZE_CHANGE ps in/decrease of subheads + $SH_COLOR Subhead color + $SIG_SPACE Arg passed to macro, SIGNATURE_SPACE + $SUBTITLE Concatenated args passed to SUBTITLE + $SUBTITLE_<n> Subtitle items for doc header + $SUBTITLE_COLOR Color of subtitle + $SUBTITLE_COVER_<n> Subtitle items for cover + $SUBTITLE_DOCCOVER_<n> Subtitle items for doc cover + $SUBTITLE_FAM Family to use for subtitle in doc + header + $SUBTITLE_FT Font to use for subtitle in doc header + $SUBTITLE_SIZE_CHANGE ps in/decrease of subtitle + $SUBTITLE_PT_SIZE Absolute ps of subtitle + $SUITE The #SUITE number register + tbl*center 'C' if set + tbl*label Text of tbl caption + tbl*needs # of rows of tbl data required to print + tbl near bottom of page + tbl*user-add-space User-added space before a tbl caption + $TITLE Concatenated args pass to TITLE + $TITLE_<n> Title items + $TITLE_COLOR Color of title + $TITLE_FAM Family to use for title in doc header + $TITLE_FT Font to use for title in doc header + $TITLE_PT_SIZE Absolute point size of title in docheader + $TITLE_SIZE_CHANGE ps in/decrease of title in doc header + $TOC_AUTHORS What to print after toc doc title entry + if #TOC_AUTHORS=1 + $TOC_FAM Family to use on toc pages + $TOC_HEAD_FAM Family of toc head entries + $TOC_HEAD_FT Font of toc head entries + $TOC_HEAD_ITEM A head as collected for TOC_ENTRIES + $TOC_HEADER_FAM Family to use for "Contents" + $TOC_HEADER_FT Font to use for "Contents" + $TOC_HEADER_QUAD Quad direction of "Contents" + $TOC_HEADER_SIZE ps in/decrease of "Contents"**** + $TOC_HEADER_STRING Header string of first toc page + $TOC_LEAD Leading of toc pages + $TOC_PH_ITEM Toc parahead entry + $TOC_PN Sets up toc leaders + entry pn + (typeset) + $TOC_PN_FAM Family for toc entries page numbers + $TOC_PN_FT Font for toc entries page numbers + $TOC_PN_SIZE_CHANGE ps in/decrease of toc entries page + numbers + $TOC_PN_STYLE Page-numbering style of toc pages + $TOC_PN_TYPEWRITE Sets up toc leaders + entry pn + (typewrite) + $TOC_PH_FAM Family of toc parahead entries + $TOC_PH_FT Font of toc parahead entries + $TOC_PARAHEAD_ITEM A parahead collected for TOC_ENTRIES + $TOC_SH_FAM Family of toc subhead entries + $TOC_SH_FT Font of toc subhead entries + $TOC_SH_ITEM A subhead collected for TOC_ENTRIES + $TOC_TITLE_FAM Family of toc doc title entries + $TOC_TITLE_FT Font of toc doc title entries + $TOC_TITLE_ITEM Toc document title item + $USER_SET_TITLE_ITEM User defined toc doc title entry as + set by TOC_TITLE_ENTRY + $UR_PAGINATION_STYLE Pagination style prior to endnotes + $USERDEF_HDRFTR_RECTO User defined header/footer recto string + $USERDEF_HDRFTR_VERSO User defined header/footer verso string + +<span style="display: block; margin-top: -.5em; margin-bottom: -2.5em;">+++PREPROCESSOR KEYWORDS+++</span> + + (eqn) EQ EN (grn) GS GE GF (pic) PS PE (refer) R1 R2 [ ] + + (tbl) TS TE TH (grap) G1 G2 (ideal) IS IE (chem) cstart cend + +<span style="display: block; margin-top: -.5em; margin-bottom: -2.5em;">+++ALIASES+++</span> + +<span style="display: block; border: 1px solid black; padding-left: 12px; padding-bottom: 9px;"> +<span style="display: block; margin-top: -1em;">Please note:</span> +Prior to version 1.1.9, all macros that included the word COLOR had +aliases that used COLOUR instead. This convenience has now been +removed, in an effort to reduce the size of the om.tmac file. + +Furthermore, if you want the convenience, you’ll have to edit the +om.tmac file. Simply aliasing, say, HEAD_COLOR as HEAD_COLOUR will +not work, owing to significant changes in the handling of +docelement control macros that end in _COLOR. +</span> + +<span style="display: block; margin-top: -1.5em; margin-bottom: -2.5em;">+++These aliases are for convenience, and header/footer management+++</span> + + BIBLIOGRAPHY_STRING_UNDERSCORE BIBLIOGRAPHY_STRING_UNDERLINE + CITATION BLOCKQUOTE + CITE BLOCKQUOTE + COL_BREAK COL_NEXT + DOC_FAM DOC_FAMILY + DOC_L_LENGTH DOC_LINE_LENGTH + DOC_L_LENGTH DOC_LINE_LENGTH + DOC_L_MARGIN DOC_LEFT_MARGIN + DOC_L_MARGIN DOC_LEFT_MARGIN + DOC_LS DOC_LEAD + DOC_PS DOC_PT_SIZE + DOC_R_MARGIN DOC_RIGHT_MARGIN + DOC_R_MARGIN DOC_RIGHT_MARGIN + ENDNOTE_STRING_UNDERSCORE ENDNOTE_STRING_UNDERLINE + ENDNOTE_TITLE_UNDERSCORE ENDNOTE_TITLE_UNDERLINE + FOOTER_CENTER_CAPS HDRFTR_CENTER_CAPS + FOOTER_CENTER HDRFTR_CENTER + FOOTER_CENTRE_CAPS HDRFTR_CENTER_CAPS + FOOTER_CENTRE HDRFTR_CENTER + FOOTER_LEFT_CAPS HDRFTR_LEFT_CAPS + FOOTER_LEFT HDRFTR_LEFT + FOOTER_PLAIN HDRFTR_PLAIN + FOOTER_RECTO HDRFTR_RECTO + FOOTER_RIGHT_CAPS HDRFTR_RIGHT_CAPS + FOOTER_RIGHT HDRFTR_RIGHT + FOOTER_RULE_GAP HDRFTR_RULE_GAP + FOOTER_RULE HDRFTR_RULE + FOOTER_VERSO HDRFTR_VERSO + HDRFTR_RULE_INTERNAL HDRFTR_RULE + HEADER_CENTER_CAPS HDRFTR_CENTER_CAPS + HEADER_CENTER HDRFTR_CENTER + HEADER_CENTRE_CAPS HDRFTR_CENTER_CAPS + HEADER_CENTRE HDRFTR_CENTER + HEADER_LEFT_CAPS HDRFTR_LEFT_CAPS + HEADER_LEFT HDRFTR_LEFT + HEADER_PLAIN HDRFTR_PLAIN + HEADER_RECTO HDRFTR_RECTO + HEADER_RIGHT_CAPS HDRFTR_RIGHT_CAPS + HEADER_RIGHT HDRFTR_RIGHT + HEADER_RULE_GAP HDRFTR_RULE_GAP + HEADER_RULE HDRFTR_RULE + HEADER_VERSO HDRFTR_VERSO + PAGENUM PAGENUMBER + PAGINATION PAGINATE + PP_FT PP_FONT + PRINT_FOOTNOTE_RULE FOOTNOTE_RULE + SWITCH_FOOTERS SWITCH_HDRFTR + SWITCH_HEADERS SWITCH_HDRFTR + TOC_LS TOC_LEAD + TOC_PS TOC_PT_SIZE + +<span style="display: block; margin-top: -.5em; margin-bottom: -2.5em;">+++These aliases are used for docelement type-style control+++</span> + + AUTHOR_FAMILY _FAMILY + AUTHOR_FONT _FONT + AUTHOR_SIZE _SIZE + BIBLIOGRAPHY_FAMILY _FAMILY + BIBLIOGRAPHY_FONT _FONT + BIBLIOGRAPHY_FOOTER_CENTER BIBLIOGRAPHY_HDRFTR_CENTER + BIBLIOGRAPHY_FOOTER_CENTRE BIBLIOGRAPHY_HDRFTR_CENTRE + BIBLIOGRAPHY_HEADER_CENTER BIBLIOGRAPHY_HDRFTR_CENTER + BIBLIOGRAPHY_HEADER_CENTRE BIBLIOGRAPHY_HDRFTR_CENTRE + BIBLIOGRAPHY_QUAD _QUAD + BIBLIOGRAPHY_STRING_FAMILY _FAMILY + BIBLIOGRAPHY_STRING_FONT _FONT + BIBLIOGRAPHY_STRING_QUAD _QUAD + BIBLIOGRAPHY_STRING_SIZE _SIZE + BLOCKQUOTE_AUTOLEAD Q_AUTOLEAD + BLOCKQUOTE_AUTOLEAD QUOTE_AUTOLEAD + BLOCKQUOTE_COLOR _COLOR + BLOCKQUOTE_FAMILY _FAMILY + BLOCKQUOTE_FONT _FONT + BLOCKQUOTE_QUAD _QUAD + BLOCKQUOTE_SIZE _SIZE + CHAPTER_TITLE_COLOR _COLOR + CHAPTER_TITLE_FAMILY _FAMILY + CHAPTER_TITLE_FONT _FONT + CHAPTER_TITLE_SIZE _SIZE + COVER_ATTRIBUTE_COLOR _COLOR + COVER_AUTHOR_COLOR _COLOR + COVER_AUTHOR_FAMILY _FAMILY + COVER_AUTHOR_FONT _FONT + COVER_AUTHOR_SIZE _SIZE + COVER_COLOR _COLOR + COVER_COPYRIGHT_COLOR _COLOR + COVER_COPYRIGHT_FAMILY _FAMILY + COVER_COPYRIGHT_FONT _FONT + COVER_COPYRIGHT_QUAD _QUAD + COVER_COPYRIGHT_SIZE _SIZE + COVER_DOCTYPE_COLOR _COLOR + COVER_DOCTYPE_FAMILY _FAMILY + COVER_DOCTYPE_FONT _FONT + COVER_DOCTYPE_SIZE _SIZE + COVER_FAMILY _FAMILY + COVER_MISC_COLOR _COLOR + COVER_MISC_QUAD _QUAD + COVER_SUBTITLE_COLOR _COLOR + COVER_SUBTITLE_FAMILY _FAMILY + COVER_SUBTITLE_FONT _FONT + COVER_SUBTITLE_SIZE _SIZE + COVER_TITLE_COLOR _COLOR + COVER_TITLE_FAMILY _FAMILY + COVER_TITLE_FONT _FONT + COVER_TITLE_SIZE _SIZE + DOC_COVER_ATTRIBUTE_COLOR _COLOR + DOC_COVER_AUTHOR_COLOR _COLOR + DOC_COVER_AUTHOR_FAMILY _FAMILY + DOC_COVER_AUTHOR_FONT _FONT + DOC_COVER_AUTHOR_SIZE _SIZE + DOC_COVER_COLOR _COLOR + DOC_COVER_COPYRIGHT_COLOR _COLOR + DOC_COVER_COPYRIGHT_FAMILY _FAMILY + DOC_COVER_COPYRIGHT_FONT _FONT + DOC_COVER_COPYRIGHT_QUAD _QUAD + DOC_COVER_COPYRIGHT_SIZE _SIZE + DOC_COVER_DOCTYPE_COLOR _COLOR + DOC_COVER_DOCTYPE_FAMILY _FAMILY + DOC_COVER_DOCTYPE_FONT _FONT + DOC_COVER_DOCTYPE_SIZE _SIZE + DOC_COVER_FAMILY _FAMILY + DOC_COVER_MISC_COLOR _COLOR + DOC_COVER_MISC_QUAD _QUAD + DOC_COVER_SUBTITLE_COLOR _COLOR + DOC_COVER_SUBTITLE_FAMILY _FAMILY + DOC_COVER_SUBTITLE_FONT _FONT + DOC_COVER_SUBTITLE_SIZE _SIZE + DOC_COVER_TITLE_COLOR _COLOR + DOC_COVER_TITLE_FAMILY _FAMILY + DOC_COVER_TITLE_FONT _FONT + DOC_COVER_TITLE_SIZE _SIZE + DOCHEADER_COLOR _COLOR + DOCHEADER_FAMILY _FAMILY + DOCHEADER_QUAD _QUAD + DOC_QUAD _QUAD + DOCTYPE_FAMILY _FAMILY + DOCTYPE_FONT _FONT + DOCTYPE_SIZE _SIZE + ENDNOTE_BLOCKQUOTE_AUTOLEAD Q_AUTOLEAD + ENDNOTE_BLOCKQUOTE_AUTOLEAD QUOTE_AUTOLEAD + ENDNOTE_FAMILY _FAMILY + ENDNOTE_FONT _FONT + ENDNOTE_LINENUMBER_FAMILY _FAMILY + ENDNOTE_LINENUMBER_FONT _FONT + ENDNOTE_LINENUMBER_SIZE _SIZE + ENDNOTE_NUMBER_FAMILY _FAMILY + ENDNOTE_NUMBER_FONT _FONT + ENDNOTE_NUMBER_SIZE _SIZE + ENDNOTE_QUAD _QUAD + ENDNOTE_QUOTE_AUTLOEAD Q_AUTOLEAD + ENDNOTE_QUOTE_AUTOLEAD QUOTE_AUTOLEAD + ENDNOTE_STRING_FAMILY _FAMILY + ENDNOTE_STRING_FONT _FONT + ENDNOTE_STRING_QUAD _QUAD + ENDNOTE_STRING_SIZE _SIZE + ENDNOTE_TITLE_FAMILY _FAMILY + ENDNOTE_TITLE_FONT _FONT + ENDNOTE_TITLE_QUAD _QUAD + ENDNOTE_TITLE_SIZE _SIZE + EPIGRAPH_COLOR _COLOR + EPIGRAPH_FAMILY _FAMILY + EPIGRAPH_FONT _FONT + EPIGRAPH_QUAD _QUAD + EPIGRAPH_SIZE _SIZE + FINIS_COLOR _COLOR + FOOTNOTE_COLOR _COLOR + FOOTNOTE_FAMILY _FAMILY + FOOTNOTE_FONT _FONT + FOOTNOTE_QUAD _QUAD + FOOTNOTE_SIZE _SIZE + HDRFTR_CENTER_FAMILY _FAMILY + HDRFTR_CENTER_FONT _FONT + HDRFTR_CENTER_SIZE _SIZE + HDRFTR_COLOR _COLOR + HDRFTR_FAMILY _FAMILY + HDRFTR_LEFT_FAMILY _FAMILY + HDRFTR_LEFT_FONT _FONT + HDRFTR_LEFT_SIZE _SIZE + HDRFTR_RIGHT_FAMILY _FAMILY + HDRFTR_RIGHT_FONT _FONT + HDRFTR_RIGHT_SIZE _SIZE + HDRFTR_RULE_COLOR _COLOR + HDRFTR_SIZE _SIZE + HEAD_COLOR _COLOR + HEAD_FAMILY _FAMILY + HEAD_FONT _FONT + HEAD_QUAD _QUAD + HEAD_SIZE _SIZE + LINEBREAK_COLOR _COLOR + LINENUMBER_FAMILY _COLOR + LINENUMBER_FONT _COLOR + LINENUMBER_SIZE _COLOR + LINENUMBER_COLOR _COLOR + MISC_COLOR _COLOR + MISC_QUAD _QUAD + PAGENUM_COLOR _COLOR + PAGENUM_FAMILY _FAMILY + PAGENUM_FONT _FONT + PARAHEAD_COLOR _COLOR + PARAHEAD_FAMILY _FAMILY + PARAHEAD_FONT _FONT + PARAHEAD_SIZE _SIZE + QUOTE_COLOR _COLOR + QUOTE_FAMILY _FAMILY + QUOTE_FONT _FONT + QUOTE_INDENT _INDENT + QUOTE_SIZE _SIZE + REF_INDENT INDENT_REFS + REF) REF_BRACKETS_END + REF] REF_BRACKETS_END + REF} REF_BRACKETS_END + REF( REF_BRACKETS_START + REF[ REF_BRACKETS_START + REF{ REF_BRACKETS_START + SUBHEAD_COLOR _COLOR + SUBHEAD_FAMILY _FAMILY + SUBHEAD_FONT _FONT + SUBHEAD_SIZE _SIZE + SUBTITLE_COLOR _COLOR + SUBTITLE_FAMILY _FAMILY + SUBTITLE_FONT _FONT + SUBTITLE_SIZE _SIZE + TITLE_COLOR _COLOR + TITLE_FAMILY _FAMILY + TITLE_FONT _FONT + TITLE_SIZE _SIZE + TOC_FAM _FAMILY + TOC_FAMILY _FAMILY + TOC_HEADER_FAMILY _FAMILY + TOC_HEADER_FONT _FONT + TOC_HEADER_QUAD _QUAD + TOC_HEADER_SIZE _SIZE + TOC_HEAD_FAMILY _FAMILY + TOC_HEAD_FONT _FONT + TOC_HEAD_SIZE _SIZE + TOC_PARAHEAD_FAMILY _FAMILY + TOC_PARAHEAD_FONT _FONT + TOC_PARAHEAD_SIZE _SIZE + TOC_PN_FAMILY _FAMILY + TOC_PN_FONT _FONT + TOC_PN_SIZE _SIZE + TOC_PT_SIZE _SIZE + TOC_SUBHEAD_FAMILY _FAMILY + TOC_SUBHEAD_FONT _FONT + TOC_SUBHEAD_SIZE _SIZE + TOC_TITLE_FAMILY _FAMILY + TOC_TITLE_FONT _FONT + TOC_TITLE_SIZE _SIZE + +<span style="display: block; margin-top: -.5em; margin-bottom: -2.5em;">+++These aliases are used to control underlining/underscoring weights+++</span> + + UNDERSCORE_WEIGHT RULE_WEIGHT + HEAD_UNDERLINE_WEIGHT RULE_WEIGHT + HEADER_RULE_WEIGHT RULE_WEIGHT + FOOTER_RULE_WEIGHT RULE_WEIGHT + FOOTNOTE_RULE_WEIGHT RULE_WEIGHT + COVER_UNDERLINE_WEIGHT RULE_WEIGHT + DOC_COVER_UNDERLINE_WEIGHT RULE_WEIGHT + ENDNOTE_STRING UNDERLINE_WEIGHT RULE_WEIGHT + ENDNOTE_TITLE UNDERLINE_WEIGHT RULE_WEIGHT + BIBLIOGRAPHY_STRING UNDERLINE_WEIGHT RULE_WEIGHT +</span> + +<div class="rule-long" style="margin-top: 2em;"><hr/></div> + +<!-- Navigation links --> +<table style="width: 100%; margin-top: 12px;"> +<tr> + <td style="width: 33%;"><a href="toc.html">Back to Table of Contents</a></td> + <td style="width: 33%; text-align: right;"><a href="#top">Top</a></td> +</tr> +</table> + +</div> + +<div class="bottom-spacer"><br/></div> + +</body> +</html> diff --git a/contrib/mom/momdoc/stylesheet.css b/contrib/mom/momdoc/stylesheet.css new file mode 100644 index 0000000..9d9efa3 --- /dev/null +++ b/contrib/mom/momdoc/stylesheet.css @@ -0,0 +1,691 @@ +/* Copyright (C) 2004-2020 Free Software Foundation, Inc. */ +/* This file is part of mom, which is part of groff, a free software */ +/* project. */ + +/* You can redistribute it and/or modify it under the terms of the */ +/* "GNU General Public License" as published by the "Free Software */ +/* Foundation", version 2. + +/* The license text is available in the internet at */ +/* <http://www.gnu.org/licenses/gpl-2.0.html> */ + +/* stylesheet for the mom macros documentation */ + +a:link { color: blue; text-decoration: none; } +a:hover { color: red; text-decoration: underline; } +a:visited { color: purple; text-decoration: none; } +a:visited:hover { color: purple; text-decoration: underline; } +a.header-link:visited { color: #6e70cc ; } +a.header-link:visited:hover { color: #6e70cc ; } + +a:link.quick { text-decoration: underline; } +.version /* version number for top of toc.html */ +{ + font-size: 90% ; + text-align: center ; +} + +.page /* Page setup: page color, size and border */ +{ + width: 67% ; + position: relative ; + top: 12px ; + bottom: 12px ; + margin: auto ; + padding: 12px ; + border: solid 1px #ceac8d ; + color: #302419 ; + background-color: #ffffeb ; + font: 1em/1.5em arial,sans-serif ; + font-variant-ligatures: none; +} + +.nobr /* Make <nobr> a class property */ +{ + white-space: nowrap ; + hyphens: none ; +} + +/* Heads */ + +h1.docs +{ + font-family: arial,sans-serif ; + font-size: 125% ; + text-align: center ; + color: #002b56 ; + background-color: #e2f1ff ; + outline: solid 1px #99cccc ; + padding: 6px ; +} +h2.docs +{ + margin-bottom: -.25em ; + font-size: 105% ; + color: #000056 ; +} +h2.macro-group /* ie "Page setup" or "Indents" or "Multi-columns" */ +{ + margin-top: 1em ; + font-size: 120% ; + color: #000056 ; + background-color: #dfccad ; + padding: 6px ; +} +h3.docs +{ + margin-bottom: -.5em ; + font-size: 95% ; + color: #000056 ; + text-transform: uppercase ; +} +h3.appendices +{ + font-size: 100% ; + text-transform: none ; +} +h3.notes +{ + display: inline-block ; + margin-top: .5em ; +} +h3.control +{ + padding-top: .5em ; + font-size: 100% ; + text-transform: none ; +} +h3.numbered +{ + font-size: 100% ; + margin-bottom: -.5em ; +} +h3.macro-id +{ + font-size: 105% ; + color: #000056 ; + text-transform: uppercase ; + margin-top: 3px ; + margin-bottom: 0px ; +} +h4.docs +{ + font-size: 95% ; + margin-bottom: -.5em ; + color: #000056 ; +} +h4.doc-param-macros +{ + margin-top: -.5em ; +} +h4.arg-list +{ + margin-top: -.5em ; +} +h4.fields +{ + color: #302419 ; +} +h5.docs +{ + margin-bottom: -.5em ; + font-size: 95% ; + color: #000056 ; + text-transform: uppercase ; +} +ul.doc-param-macros +{ + margin-top: .75em ; + margin-left: -.5em ; +} +.control-macros-header +{ + display: inline-block ; + margin-bottom: -.25em ; + padding: 2px 6px 0 6px ; + outline: 1px solid #000058 ; + font-size: 100% ; + background-color: #e2f1ff ; +} +.control-macro +{ + font-size: 100% ; + margin-bottom: -.75em ; + color: #2f2f71 ; +} +.macro-id-overline +{ + display: inline-block ; + border-top: solid 2px #8d8775 ; + margin-bottom: .5em ; +} + +/* Paragraphs */ + +p.no-indent +{ + text-indent: 0px ; +} +p.requires +{ + font-family: arial,sans-serif ; + font-style: italic ; + text-indent: 0px ; + margin-top: .25em ; +} +p.alias +{ + font-family: arial,sans-serif ; + font-style: normal ; + text-indent: 0px ; + margin-top: .25em ; +} + +/* Horizontal rules */ + +hr /* horizontal rules need a border to be colorized) */ +{ + border: solid 1px #8d8775 ; +} +div.rule-short /* for section breaks; top/bottom margins set manually */ +{ + display: block ; + width: 25% ; + margin: auto; + clear: both ; +} +div.rule-medium /* underneath mini-tocs; top/bottom margins set manually */ +{ + display: block ; + width: 40% ; + margin: auto; + clear: both ; +} +div.rule-long /* precedes nav bar at bottom of page */ +{ + display: block ; + width: 90% ; + margin: auto; +} + +/* Boxed text */ + +.box-macro-args /* Macro name+args */ +{ + display: block ; + border: solid 1px #302419 ; + padding-top: 5px ; + padding-bottom: 3px ; + padding-left: 15px ; + padding-right: 15px ; + background-color: #ffffff ; + white-space: nowrap ; + overflow: auto ; +} +.box-code +{ + display: block ; + width: 100% ; + border: solid 1px #302419 ; + padding-top: 5px ; + padding-bottom: 18px ; + padding-left: 15px ; + padding-right: 15px ; + color: #6f614a ; + background-color: #ffffff ; + white-space: nowrap ; +} +.box-tip +{ + outline: solid 1px #ceac8d ; + padding-left: 15px ; + padding-right: 15px ; + text-align: justify ; + background-color: #f9f9d9 ; + margin-bottom: 1.5em ; + } +.box-example-layout +{ + outline: solid 1px #ceac8d ; + padding-left: 15px ; + padding-right: 15px ; + text-align: justify ; + background-color: #f9f9d9 ; + margin-bottom: 2.5em ; + } +.box-notes +{ + outline: solid 1px #ceac8d ; + padding-left: 15px ; + padding-right: 15px ; + text-align: justify ; + background-color: #f9f9d9 ; + margin-bottom: 1.5em ; + } +.box-important +{ + outline: solid 1px #ce7a65 ; + padding-left: 15px ; + padding-right: 15px ; + text-align: justify ; + background-color: #f9f9d9 ; + margin-bottom: 1.5em ; +} +p.tip +{ + padding-top: 9px ; + padding-bottom: 9px ; + text-indent: 0px ; +} +p.tip-top +{ + padding-top: 9px ; + text-indent: 0px ; +} +p.tip-bottom +{ + padding-bottom: 9px ; + text-indent: 0px ; +} + +/* Pre-formatted code */ + +span.pre /* pre-formatted multi-line blocks; indent must be exactly 2 spaces */ +{ + display: block ; + position: relative ; + top: -1em ; + margin-bottom: -1.5em ; + font-family: "Lucida Console",monospace ; + font-weight: bolder ; + font-size: 95% ; + white-space: pre ; + overflow: auto ; +} +span.defaults +{ + margin-left: 6px ; + padding-bottom: 1em ; + font-size: 95% ; +} +span.pre-in-pp +{ + display: block ; + position: relative ; + top: -1em ; + margin-bottom: -.5em ; + font-family: "Lucida Console",monospace ; + font-weight: bolder ; + font-size: 95% ; + white-space: pre ; + overflow: auto ; +} +span.important +{ + font-family: arial,sans-serif ; + font-weight: bolder ; + color: #8b0000 ; +} +span.note +{ + font-family: arial,sans-serif ; + font-weight: bolder ; + color: #443526 ; +} +span.additional-note +{ + font-family: arial,sans-serif ; + font-weight: bolder ; + font-style: italic ; + color: #443526 ; +} +span.tip +{ + font-family: arial,sans-serif ; + font-weight: bolder ; + color: #443526 ; +} +span.experts +{ + font-family: arial,sans-serif ; + font-weight: bolder ; + color: #443526 ; +} +/* Mini-tocs (usually at top of page) */ + +/* 1-column, centered mini-toc */ +ul.mini-toc-centered +{ + text-align: center ; + list-style-type: none ; + margin-left: -40px ; +} + +/* 2-column mini-toc column defs*/ +.mini-toc-col-1 +{ + float: left ; + width: 49% ; + margin-left: -10px ; +} +.mini-toc-col-2 +{ + float: left ; + width: 51% ; + clear: right ; +} + +/* 3-column mini-toc column defs */ +.col-1-definitions +{ + float: left ; + width: 32% ; + height: 55em ; + padding-bottom: 9px; + background-color: #ded4bd ; + margin-right: 2% ; +} +.col-2-definitions +{ + float: left ; + width: 32% ; + height: 55em ; + padding-bottom: 9px; + background-color: #ded4bd ; + margin-right: 2% ; +} +.col-3-definitions +{ + float: left ; + width: 32% ; + height: 55em ; + padding-bottom: 9px; + background-color: #ded4bd ; + margin-bottom: 24px ; +} + +/* List styles */ + +ul.toc +{ + margin-top: .5em ; +} +ul.no-enumerator +{ + list-style-type: none ; +} +.list-head +{ + font-family: arial,sans-serif ; + font-weight: bolder ; + font-size: 110% ; + color: #000056 ; +} +.list-head-goodies +{ + font-family: arial,sans-serif ; + font-weight: normal ; + font-size: 110% ; + color: #000056 ; +} +.no-anchor +{ + color: #302419 ; + font-weight: bold ; +} +.text-color +{ + color: #302419 ; +} +li.item +{ + font-family: arial,sans-serif ; + font-weight: normal ; + font-size: 100% ; + margin-left: -10px ; + list-style-type: disc ; +} +.mini-toc +{ + margin-top: -1em ; + font-size: 90% ; +} +.sublist +{ + margin-left: -1em ; + font-size: 90% ; + color: #302419 ; + list-style-type: disc ; +} +.sub +{ + list-style-type: circle ; +} +.normal +{ + font-style: normal ; + font-size: 100% ; +} +.normal-smaller +{ + font-weight: normal ; + color: #302419 ; + font-size: 90% ; +} +.normal-sub-sub +{ + font-weight: normal ; + color: #302419 ; + font-size: 90% ; +} + +/* Macro lists / defaults */ + +div.macro-list-container +{ + background-color: #ded4bd ; + margin-bottom: 1.5em ; +} +h3.macro-list +{ + font-size: 100% ; + color: #000056 ; + text-transform: uppercase ; + padding: 9px ; +} +ul.macro-list +{ + margin-left: -21px ; + padding-right: 12px ; + list-style-type: none ; + font-family: arial,sans-serif ; + margin-top: -1.25em ; + padding-bottom: 6px ; +} +ol.macro-list +{ + font-family: arial,sans-serif ; + margin-top: -1.25em ; + padding-bottom: 6px ; +} + +.defaults-container +{ + background-color: #e3d2b1 ; + border: 1px solid #3f2c00 ; + margin-bottom: 2.5em ; +} +h3.defaults +{ + font-size: 100% ; + color: #000056 ; + text-transform: uppercase ; + padding: 9px ; +} +p.defaults +{ + margin-top: .25em ; + margin-left: 6px ; + margin-right: 12px ; + margin-bottom: 0 ; +} +#toc-title, #toc-head, #toc-subhead, #toc-parahead +{ + display: block ; + margin-top: -1em ; + margin-bottom: -1em ; +} + +/* Bottom of page spacer */ + +div.bottom-spacer +{ + display: block ; + height: 24px ; +} + +/* General markup */ + +kbd +{ + font-family: "Lucida Console",monospace ; + font-weight: bold ; + font-size: 98% ; +} +kbd.macro-args +{ + margin-right: .5em ; + color: #6f614a ; + white-space: nowrap ; + overflow: auto ; +} + +/* tocs */ + +h1.toc +{ + font-family: arial,sans-serif ; + font-size: 175% ; + text-align: center ; + color: #002b56 ; + background-color: #e2f1ff ; + outline: solid 1px #99cccc ; + padding: 6px ; +} +h2.toc +{ + font-size: 120% ; + color: #000056 ; +} +h3.toc +{ + margin-top: -.5em ; + margin-bottom: -.5em ; + font-size: 100% ; + color: #6e70cc ; +} +.highlight +{ + font-weight: bold ; +} +.fourth-level +{ + margin-left: -1.25em ; + list-style-type: none ; +} +ul.toc-docproc +{ + margin-left: -1em ; +} +.toc-docproc-header +{ + margin-top: -.5em ; + text-transform: uppercase ; +} +a.header-link +{ + color: #6e70cc ; + font-size: 95% ; +} + +/* Examples */ + +.examples-container +{ + border: solid 1px #917963 ; + background-color: #f9f9d9 ; + padding-left: 24px ; + padding-right: 24px ; + padding-top: 3px ; + padding-bottom: 3px ; +} + +.examples +{ + font-weight: bolder ; + font-size: 98% ; + color: #524b3f ; + margin-top: 12px ; + margin-bottom: 3px ; +} + +/* definitions.html */ + +table.definitions /* mini-toc is set up as a table */ +{ + margin-top: 12px ; + text-align: left ; + margin-left: 12px ; +} +th.definitions +{ + padding-bottom: 6px ; + font-size: 120% ; + color: #000056 ; +} +dt /* definition terms in italic*/ +{ + font-style: italic ; +} +dt.no-italic +{ + font-style: normal ; +} + +/* Tables */ +table.quick-ref +{ + margin-top: .25em ; +} +table.quick-ref, th.quick-ref +{ + padding-bottom: .25em ; + font-family: "Lucida Console",monospace ; + font-weight: bold ; + text-align: left ; +} + +td +{ + padding: 0 ; + padding-left: .5em ; +} + +/* Misc */ + +span.book-title +{ + font-style: italic ; +} + +dt.params +{ + font-style: normal ; + font-weight: bold ; +} + +dd.cover-args +{ + margin-bottom: .25em; + margin-left: 1.25em ; +} diff --git a/contrib/mom/momdoc/tables-of-contents.html b/contrib/mom/momdoc/tables-of-contents.html new file mode 100644 index 0000000..1f9affb --- /dev/null +++ b/contrib/mom/momdoc/tables-of-contents.html @@ -0,0 +1,1224 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004-2020 Free Software Foundation, Inc. +Written by Peter Schaffter (peter@schaffter.ca). + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"/> + <title>Mom -- Document processing, tables of contents</title> + <link rel="stylesheet" type="text/css" href="stylesheet.css" /> +</head> + +<body style="background-color: #f5faff;"> + +<!-- ==================================================================== --> + +<div id="top" class="page"> + +<!-- Navigation links --> +<table style="width: 100%;"> +<tr> + <td><a href="toc.html">Back to Table of Contents</a></td> + <td style="text-align: right;"><a href="refer.html#top">Next: Bibliographies and references</a></td> +</tr> +</table> + +<h1 class="docs">Tables of contents</h1> + +<div style="width: 68%; margin: auto;"> +<ul class="no-enumerator"> + <li><a href="#toc-intro">Introduction to tables of contents</a></li> + <li><a href="#toc-appearance">Tables of contents appearance and behaviour</a></li> + <li><a href="#pdf-output">PDF output</a> + <ul style="margin-left: -.5em; list-style-type: disc;"> + <li><a href="#positioning">Positioning the table of contents</a></li> + <li><a href="#auto-relocate-toc">AUTO_RELOCATE_TOC</a></li> + <li><a href="#psselect"><kbd>psselect</kbd></a></li> + </ul></li> + <li><a href="#toc">The TOC macro</a> + <ul style="margin-left: -.5em; list-style-type: disc;"> + <li><a href="#toc-heading">TOC_HEADING</a></li> + </ul></li> + <li><a href="#toc-control-top">Control macros for tables of contents</a> + <ul style="margin-left: -.5em; list-style-type: disc;"> + <li><a href="#index-toc-control">Table of contents control macros</a></li> + </ul></li> +</ul> +</div> + +<div class="rule-medium"><hr/></div> + +<h2 id="toc-intro" class="docs">Introduction to tables of contents</h2> + +<p> +Want a table of contents for your document? Easy. Just enter +<br/> +<span class="pre-in-pp"> + .TOC +</span> +as the very last macro of your input file. Mom will have picked +up all document titles (in +<a href="rectoverso.html#collate">collated</a> +documents) and headings, as well as the endnotes section and +bibliography, if they exist, and assigned them the appropriate page +number. Talk about a no-brainer! +</p> + +<p> +That said, tables of contents have even more control macros than +endnotes. As always, the reason for so many control macros is so +that if you want to change just about any aspect of the table of +contents’ typographic appearance, you can. +</p> + +<h2 id="toc-appearance" class="docs">Tables of contents appearance and behaviour</h2> + +<p> +When you output a table of contents (with +<kbd><a href="#toc">.TOC</a></kbd>), +mom finishes processing the last page of your document then breaks +to a new page for printing the table of contents. +</p> + +<p> +Mom follows standard typesetting conventions for tables of contents. +To this end, if +<a href="headfootpage.html#headers">HEADERS</a> +are enabled for the document, the first page of the table of +contents has no page header, but does have a first page number +(roman numeral), always “i”, in the bottom margin. If +<a href="headfootpage.html#footers">FOOTERS</a> +are enabled for the document, the first page has neither a footer, +nor a page number in the top margin. (If you absolutely must have +a page footer on the first page of the table of contents, simply +invoke +<a href="headfootpage.html#footer-on-first-page"><kbd>.FOOTER_ON_FIRST_PAGE</kbd></a> +immediately before <kbd>.TOC</kbd>.) Subsequent table of contents +pages have both page headers or footers and a page number. +</p> + +<p> +Entries in a table of contents are hierarchically indented, as you +would expect, and if headings are numbered in the body of the document, +you can instruct mom to number them in the table of contents as +well (see +<a href="#toc-entry-numbers">TOC_ENTRY_NUMBERS</a>). +</p> + +<p> +Tables of contents are never set in columns, regardless of whether +the rest of the document is. Lastly, if +<a href="rectoverso.html#recto-verso">recto/verso</a> +printing is enabled, the table of contents respects it. This +sometimes leads to tables of contents that begin with the wrong +margins, but the margins can be corrected either by outputting a +<a href="headfootpage.html#blank-pages">BLANKPAGE</a> +or by using the control macro +<a href="#toc-rv-switch">TOC_RV_SWITCH</a>. +</p> + +<p> +The overall table of contents +<a href="definitions.html#family">family</a>, +<a href="definitions.html#ps">point size</a> +and +<a href="definitions.html#leading">lead</a> +can be altered with +<a href="definitions.html#controlmacro">control macros</a>, +as can the family, +<a href="definitions.html#font">font</a>, +point size and indent of each level of entry. Furthermore, the page +numbering style can be changed, as can the amount of visual space +reserved for entry page numbers. +</p> + +<h2 id="pdf-output" class="docs">PDF output</h2> + +<p> +When files containing a table of contents are processed with +<a href="using.html#pdfmom" style="font-weight: bold">pdfmom</a>, +entries in the table of contents are clickable links when the +document is viewed at the screen. The colour of the links is the +last <kbd>.PDF_LINK_COLOR</kbd> in effect, so if you wish another +colour, it should be set just before issuing <kbd>.TOC</kbd>. +</p> + +<p> +When preparing files for printing, coloured links in both the table +of contents and elsewhere in the document may not be desirable. +You can disable the colour by passing +<a href="using.html#pdfmom" style="font-weight: bold">pdfmom</a> +the <kbd>-c</kbd> option, like this: <br/> +<span class="pre-in-pp"> + pdfmom -c doc.mom > doc.pdf +</span> +</p> + +<h3 id="positioning" class="docs">Positioning the Table of Contents</h3> + +<p> +Because a table of contents can’t be generated until the +end of a document (hence the last macro in the file), it is also +the last page of the document. While this is desirable for some +language conventions—French, for example—it is not +desirable for others. +</p> + +<h4 id="auto-relocate-toc" class="docs">Automatic PDF relocation of the Table of Contents</h4> + +<p> +When +<a href="using.html#pdfmom" style="font-weight: bold">pdfmom</a> +is used to process files with a table of contents, the macro +<kbd>.AUTO_RELOCATE_TOC</kbd> can be used to reposition the table +of contents to the top of the output document, with the presence +of a cover and/or title page sensibly taken into account. Full +AUTO_RELOCATE_TOC usage is described in the manual, +<a href="https://www.schaffter.ca/mom/pdf/mom-pdf.pdf"><span class="book-title">Producing PDFs with groff and mom</span></a>. +</p> + +<p> +In order to take advantage of automatic table of contents +repositioning, you must use +<a href="using.html#pdfmom" style="font-weight: bold">pdfmom</a> +with groff’s native PDF driver (i.e. without the +<strong>-Tps</strong> flag). Files that need to be processed with +the <strong>-Tps</strong> flag require you to reposition the table +of contents yourself with <strong>psselect</strong>, described +below. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +<kbd>AUTO_RELOCATE_TOC</kbd> must come before +<a href="docprocessing.html#start">START</a>. +</p> +</div> + +<h4 id="psselect" class="docs"><span style="text-transform: none">Using psselect to relocate the Table of Contents in PostScript documents</span></h4> + +<p> +To change the location of the table of contents in files +processed with <kbd>pdfmom -Tps</kbd>, you have two choices: +rearrange the pages by hand (okay for one or two hard copies), +or use the <strong>psselect</strong> programme provided by the +<strong>psutils</strong> suite of tools (which you may have to +install as a package from your distribution if it is not already on +your system). +</p> + +<p> +The procedure for using <strong>psselect</strong> to put the +table of contents near the beginning of a document begins by +you determining how many pages it contains. You can do this by +previewing the document with the document viewer of your choice +(gv, Okular, Evince, etc). +</p> + +<p> +Once you know the number of pages in the table of contents, you use +<strong>psselect</strong> to place them where you want. +</p> + +<p> +Say, for example, the table of contents runs to just one page. The +command to place a one-page table of contents at the start of a +document is: +<br/> +<span class="pre-in-pp"> + psselect -p _1,1-_2 +</span> +The <kbd>-p</kbd> option instructs <kbd>psselect</kbd> that what +follows is a comma-separated list of the order in which you want +pages of a document rearranged. The underscore character means +"counting backwards from the end of the document". Thus, the above +says: "Put the last page first (i.e. the table of contents), followed +by all pages from the original first page up to the second to last +(i.e. the last page before the table of contents)." +</p> + +<p> +If your table of contents runs to two pages, the option to +<kbd>psselect</kbd> would look like this: +<br/> +<span class="pre-in-pp"> + psselect -p _1-_2,1-_3 +</span> +If your table of contents runs to two pages and you have a cover +page, the command would look like this: +<br/> +<span class="pre-in-pp"> + psselect -p 1,_1-_2,2-_3 +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +<kbd>psselect</kbd> outputs to stdout, so you have to redirect the +output to a new file. +<br/> +<span class="pre-in-pp" style="margin-bottom: -1em"> + psselect -p <page list> <file>.ps > <new-file>.ps +</span> +</p> +</div> + +<!-- -TOC- --> + +<div class="macro-id-overline"> +<h3 id="toc" class="macro-id">The TOC macro</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>TOC</b> <kbd class="macro-args">[ INCLUDE_TITLE ]</kbd> +</div> + +<p> +If you want a table of contents, just place <kbd>.TOC</kbd> at the +very end of your document. Mom takes care of the rest. +</p> + +<p> +The optional argument, <kbd>INCLUDE_TITLE</kbd>, is needed only +if your document is standalone, i.e. is not collated, for example +an essay. By default, mom does not include the title (and page +number) of standalone documents in the Table of Contents since it +is largely redundant. If you would like her to include the title, +invoke <kbd>.TOC</kbd> with <kbd>INCLUDE_TITLE</kbd>. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +If the last line of text in a document, before <kbd>.TOC</kbd>, +falls too close to the bottom margin, or if the line is followed +by a macro likely to cause a linebreak (e.g. <kbd>.LIST OFF</kbd> or +<kbd>.IQ</kbd>), mom may output a superfluous blank page before the +Table of Contents. +</p> + +<p class="tip-bottom" style="margin-top: -1em"> +In order to avoid this, insert +<a href="typesetting.html#el"><kbd>.EL</kbd></a> +after the last line of text, before <kbd>.TOC</kbd> and/or any +concluding macros. For example, +<br/> +<span class="pre-in-pp"> + some concluding text. + .EL + .TOC +</span> +or +<br/> +<span class="pre-in-pp"> + some concluding text. + .EL + .LIST OFF + .TOC +</span> +</p> +</div> + +<div class="macro-id-overline"> +<h3 class="macro-id">TOC heading</h3> +</div> + +<div id="toc-heading" class="box-macro-args"> +Macro: <b>TOC_HEADING</b> <kbd class="macro-args">"<single line TOC heading>"</kbd> +</div> +<p class="requires"> +• Argument must be enclosed in double-quotes +</p> + +<p> +You may sometimes want to insert a line of text into the table of +contents without it referring to a page number, for example to +identify a “Part I” and a “Part II”. +</p> + +<p> +Placed before any instance of the +<a href="docprocessing.html#start">START</a> +macro, TOC_HEADING inserts its text into the table of contents +before the next section title or heading. A modest amount of +whitespace is introduced above and beneath to distinguish it easily +from table of contents entries. +</p> + +<p> +The appearance of the heading may be controlled with +the macro +<a href="docprocessing.html#toc-heading-style">TOC_HEADING_STYLE</a>. +</p> + + +<div class="rule-short"><hr/></div> + +<h2 id="toc-control-top" class="macro-group">Control macros for tables of contents</h2> + +<p> +Aside from allowing you to set the style of table of contents +entries on a per-level basis, the control macros let you design +the table of contents as if they were a complete document unto +themselves (overall family, headers/footers, pagination, etc). +</p> + +<div class="defaults-container" style="background-color: #ded4bd; border: none;"> +<h3 id="index-toc-control" class="docs defaults">Table of contents control macros</h3> + +<ol style="margin-top: .5em; padding-bottom: .5em;"> + <li><a href="#toc-general">General table of contents style control</a> + <ul style="margin-left: -.5em;"> + <li><a href="#toc-family">TOC_FAMILY</a> – base family for tables of contents</li> + <li><a href="#toc-pt-size">TOC_PT_SIZE</a> – base point size for tables of contents</li> + <li><a href="#toc-lead">TOC_LEAD</a> – leading of tables of contents</li> + </ul></li> + <li><a href="#toc-pagenumbering">Page numbering</a> + <ul style="margin-left: -.5em;"> + <li><a href="#paginate-toc">PAGINATE_TOC</a> – turn table of contents pagination on or off</li> + <li><a href="#toc-pagenum-style">TOC_PAGENUM_STYLE</a> – table of contents page numbering style</li> + </ul></li> + <li><a href="#toc-header">Header string (e.g. “Contents”) and style</a> + <ul style="margin-left: -.5em;"> + <li><a href="#toc-header-string">Changing the header string</a></li> + <li><a href="#toc-header-v-pos">Header string vertical placement</a></li> + <li><a href="#toc-header-style">Header string control macros and defaults</a></li> + </ul></li> + <li><a href="#toc-style">Entries and reference page number style</a> + <ul style="margin-left: -.5em;"> + <li><a href="#toc-pn">Reference page numbers style control</a></li> + <li><a href="#toc-title-style">Title entry style control</a></li> + <li><a href="#toc-entry-style">Heading entry style control</a></li> + <li>Numbering table of contents items + <ul style="margin-left: -.75em; list-style: disc"> + <li><a href="#toc-prefix-ch-number">Prefix chapter/section numbers</a> + <ul style="margin-left: -.75em;"> + <li><a href="#toc-pad-ch-numbers">Pad chapter/section numbers</a></li> + </ul></li> + <li><a href="#toc-entry-numbers">Numbering heading entries</a></li> + </ul></li> + </ul></li> + <li><a href="#toc-additional">Additional table of contents control macros</a> + <ul style="margin-left: -.5em;"> + <li><a href="#toc-appends-author">Append author(s) to table of contents title entries</a></li> + <li><a href="#toc-title-entry">Alter the wording of a table of contents title entry</a></li> + <li><a href="#space-toc-items">Space table of contents entries pleasingly</a></li> + <li><a href="#toc-padding">Establish the number of placeholders to leave for page reference numbers</a></li> + <li><a href="#toc-rv-switch">Switch tables of contents page margins</a></li> + </ul></li> + <li><a href="#toc-more">I still need more!</a></li> +</ol> +</div> + +<h4 id="toc-general" class="docs" style="margin-top: -1.5em; margin-bottom: .5em;">1. General tables of contents style control</h4> + +<!-- -TOC_FAMILY- --> + +<div id="toc-family" class="box-macro-args"> +Macro: <b>TOC_FAMILY</b> <kbd class="macro-args"><family></kbd> +</div> + +<p> +TOC_FAMILY establishes the default family for every page element in +a table of contents, including the table of contents’ header +string (by default, “Contents”) and the page +number in the top or bottom margin. The default is the prevailing +document family. +</p> + +<p> +All page elements in the table of contents also have their own +_FAMILY control macros, which can be used on a case-by-case basis to +override the default family set with TOC_FAMILY. +</p> + +<!-- -TOC_PT_SIZE- --> + +<div id="toc-pt-size" class="box-macro-args"> +Macro: <b>TOC_PT_SIZE</b> <kbd class="macro-args"><base type size of the toc></kbd> +</div> + +<p class="requires"> +• Does not require a <a href="definitions.html#unitofmeasure">unit of measure</a>; points is assumed +</p> + +<p> +Unlike most other control macros that deal with size of document +elements, TOC_PT_SIZE takes as its argument an absolute value, +relative to nothing. (Compare this with the +<a href="docelement.html#point-size">_SIZE</a> +control macros.) The argument represents the base point size +of tables of contents from which the size of all other table of +contents elements are calculated. +</p> + +<p> +The default for +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPESET</kbd></a> +is 12.5 points (the same default size used in the body of the +document). +</p> + +<!-- -TOC_LEAD- --> + +<div id="toc-lead" class="box-macro-args"> +Macro: <b>TOC_LEAD</b> <kbd class="macro-args"><leading of the toc> [ ADJUST ]</kbd> +</div> + +<p class="requires"> +• Does not require a <a href="definitions.html#unitofmeasure">unit of measure</a>; points is assumed +</p> + +<p> +Unlike most other control macros that deal with leading of document +elements, TOC_LEAD takes as its argument an absolute value, relative +to nothing. Therefore, the argument represents the +<a href="definitions.html#leading">leading</a> +of tables of contents in +<a href="definitions.html#picaspoints">points</a> +unless you append an alternative +<a href="definitions.html#unitofmeasure">unit of measure</a>. +For example, +<br/> +<span class="pre-in-pp"> + .TOC_LEAD 14 +</span> +sets the base leading of tables of contents to 14 points, whereas +<br/> +<span class="pre-in-pp"> + .TOC_LEAD .5i +</span> +sets the base leading of tables of contents to 1/2 inch. +</p> + +<p> +If you want the leading of tables of contents adjusted to fill the +page, pass TOC_LEAD the optional argument <kbd>ADJUST</kbd>. (See +<a href="docprocessing.html#doc-lead-adjust">DOC_LEAD_ADJUST</a> +for an explanation of leading adjustment.) +</p> + +<p> +The default for +<a href="docprocessing.html#printstyle">PRINTSTYLE TYPESET</a> +is the prevailing document lead (16 by default), adjusted. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Even if you give mom a <kbd>.DOC_LEAD_ADJUST OFF</kbd> command, +she will still, by default, adjust the leading of the table of +contents. You <i>must</i> enter +<kbd>TOC_LEAD <lead></kbd> with no <kbd>ADJUST</kbd> +argument to disable this default behaviour. +</p> + +<p class="tip-bottom"> +<span class="additional-note">Additional note:</span> +Tables of contents are always double-spaced in +<a href="docprocessing.html#printstyle">PRINTSTYLE <kbd>TYPEWRITE</kbd></a>, +regardless of whether the body of the document is single-spaced. +</p> +</div> + +<h4 id="toc-pagenumbering" class="docs">2. Page numbering</h4> + +<p> +The pagination style of tables of contents is controlled by the same +macros that control +<a href="headfootpage.html#pagination-intro">document page numbering</a>, +except +<a href="headfootpage.html#pagenum">PAGENUM</a> +(tables of contents always start on page 1). The defaults are the +same as for the rest of the document, with the exception that tables +of contents, by default, have roman numeral page numbers. +</p> + +<p> +Therefore, if you wish to change some aspect of table of contents +pagination style, use the +<a href="headfootpage.html#index-pagination-control">document pagination control macros</a> +immediately prior to <kbd>.TOC</kbd>. +</p> + +<p> +A special macro, +<a href="#toc-pagenum-style">TOC_PAGENUM_STYLE</a>, +controls the style of table of contents pagination (i.e. the actual +table of contents pages’ numbers, not the page number +references of entries). +</p> + +<!-- -PAGINATE_TOC- --> + +<div id="paginate-toc" class="box-macro-args"> +Macro: <b>PAGINATE_TOC</b> <kbd class="macro-args"><toggle></kbd> +</div> + +<p> +By default, mom paginates tables of contents. If you’d like +her not to, do +<br/> +<span class="pre-in-pp"> + .PAGINATE_TOC OFF +</span> +(or <kbd>NO, X,</kbd> etc). +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +Simply invoking +<kbd>.PAGINATION OFF</kbd> +or +<kbd>.PAGINATE OFF</kbd> +disables table of contents pagination <i>for the first +page of the table of contents only.</i> You must use +<kbd>.PAGINATE_TOC OFF</kbd> to disable table of contents +pagination completely, even if pagination is turned off elsewhere in +your document. +</p> +</div> + +<!-- -TOC_PAGENUM_STYLE- --> + +<div id="toc-pagenum-style" class="box-macro-args"> +Macro: <b>TOC_PAGENUM_STYLE</b> <kbd class="macro-args"><DIGIT | ROMAN | roman | ALPHA | alpha></kbd> +</div> +<p class="requires"> +See +<a href="headfootpage.html#pagenum-style"><span style="font-style: normal;">PAGENUM_STYLE</span></a> +for an explanation of the arguments. +</p> + +<p> +By default, mom uses roman numerals to number table of contents +pages. Use TOC_PAGENUM_STYLE if you’d prefer something else. +For example, to have standard digits instead of roman numerals, do +the following: +<br/> +<span class="pre-in-pp"> + .TOC_PAGENUM_STYLE DIGIT +</span> +</p> + +<h4 id="toc-header" class="docs" style="margin-top: -.5em;">3. Header string and style</h4> + +<p> +The table of contents header string is the title that appears at the top of the +table of contents. By default, it’s “Contents”.</p> + +<div id="toc-header-string" class="box-macro-args"> +Macro: <b>TOC_HEADER_STRING</b> <kbd class="macro-args"><string></kbd> +</div> + +<p> +If you’d like the title of the table of contents to read +something other than “Contents”, do, for +example +<br/> +<span class="pre-in-pp"> + .TOC_HEADER_STRING "Table of Contents" +</span> +</p> + +<h5 id="toc-header-v-pos" class="docs" style="margin-top: 1em; text-transform: none;">Header string vertical placement</h5> + +<div id="toc-header-v-pos1" class="box-macro-args" style="margin-top: 1em"> +Macro: <b>TOC_HEADER_V_POS</b> <kbd class="macro-args"><distance from top of page></kbd> +</div> +<p class="requires"> +• Requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +Normally, the TOC header string falls at the same vertical position +as the +<a href="definitions.html#docheader">docheader</a>. +If you’d like it to fall at a different position, say 2 inches, use +<br/> +<span class="pre-in-pp"> + .TOC_HEADER_V_POS 2i +</span> +</p> + +<h5 id="toc-header-style" class="docs" style="margin-top: -.5em; text-transform: none;">Header string control macros and defaults</h5> + +<div class="defaults-container" style="margin-top: 1em; padding-bottom: 8px;"> +<p class="defaults" style="padding-top: 6px;"> +See +<a href="docelement.html#control-macro-args">Arguments to the control macros</a>. +<br/> +The following TOC_HEADER control macros may also be +<a href="#grouping">grouped</a> +using TOC_HEADER_STYLE. +</p> +<span class="pre defaults"> +.TOC_HEADER_FAMILY default = prevailing doc family +.TOC_HEADER_FONT default = bold +.TOC_HEADER_SIZE default = +4 +.TOC_HEADER_QUAD default = left +.TOC_HEADER_COLOR default = black +.TOC_HEADER_CAPS default = no +.TOC_HEADER_SMALLCAPS default = no +.TOC_HEADER_UNDERSCORE default = none +</span> +</div> + +<h4 id="toc-style" class="docs" style="margin-top: -.5em;">4. Entries and reference page numbers style</h4> + +<p> +“Entries” refers to the hierarchical arrangement of +section titles (in +<a href="rectoverso.html#collate-intro">collated</a> +documents) and headings as they appear in the table of contents: +<span class="pre-in-pp"> + Section title + Head level 1 + Head level 2 + Head level 3 + ... +</span> +The style for title entries (e.g. chapter numbers or titles) and +heading levels is controlled by +<a href="#toc-title-style">TOC_TITLE_STYLE </a> +and +<a href="#toc-entry-style">TOC_ENTRY_STYLE</a> +respectively. +</p> + +<p id="toc-pn"> +“Reference page numbers” means the page numbers +associated with entries. Macros to control their style take the +form <kbd>.TOC_PN_<SPEC></kbd>, and the defaults are listed +here. +</p> + +<div class="defaults-container" style="margin-top: 1em; padding-bottom: 8px;"> +<p class="defaults" style="padding-top: 6px;"> +See +<a href="docelement.html#control-macro-args">Arguments to the control macros</a>. + +<span class="pre defaults"> +.TOC_PN_FAMILY default = prevailing doc family +.TOC_PN_FONT default = roman +.TOC_PN_SIZE default = 0 +</span> +</p> +</div> + +<!-- -TOC_TITLE_STYLE- --> + +<div id="toc-title-style" class="box-macro-args"> +Macro: <b>TOC_TITLE_STYLE</b> <kbd class="macro-args"><see below for args></kbd> +</div> + +<p> +TOC_TITLE_STYLE allows you to set all the style parameters for +title entries in the tables of contents with one macro. The +number of arguments can run long, so you may want to break them into +several lines with the backslash character (<kbd>\</kbd>). The +arguments are: +<br/> +<span class="pre-in-pp"> + FAMILY <family> + FONT <font> + SIZE +|-<n> + COLOR <color> + INDENT <amount> + CAPS | NO_CAPS +</span> +The arguments may be entered in any order. +</p> + +<p> +The family, font, size, and color arguments behave identically +to the individual control macros that govern other tags, therefore see +<a href="docelement.html#control-macro-args">Arguments to the control macros</a> +for usage. Their defaults are the same as for paragraphs in +<a href="definitions.html#running">running text</a>. +</p> + +<p> +<kbd>INDENT</kbd> lets you indent title entries by the amount specified, and +requires a +<a href="definitions.html#unitofmeasure">unit of measure</a>. +The default is zero. +</p> + +<p> +<kbd>CAPS</kbd> instructs mom to capitalize title entries. +Capitalization may be enabled or disabled on a per-entry-level +basis. +</p> + +<p> +As an example, if you want title entries bold, slightly larger than other +entries and capitalized, you could do either +<br/> +<span class="pre-in-pp"> + .TOC_TITLE_ENTRY FONT B SIZE +.5 CAPS +</span> +or +<br/> +<span class="pre-in-pp"> + .TOC_TITLE_ENTRY \ + FONT B \ + SIZE +.5 \ + CAPS +</span> +</p> + +<!-- -TOC_ENTRY_STYLE- --> + +<div id="toc-entry-style" class="box-macro-args"> +Macro: <b>TOC_ENTRY_STYLE</b> <kbd class="macro-args"><level> <see below for remaining args></kbd> +</div> + +<p> +TOC_ENTRY_STYLE allows you to set individually all the style +parameters for any level of entry (beneath titles) in the tables +of contents. The number of arguments can run long, so you may +want to break them into several lines with the backslash character +(<kbd>\</kbd>). +</p> + +<p> +<kbd><level></kbd> corresponds to a +<a href="docelement.html#heading">HEADING</a> +level assigned in the body of the document. The remaining arguments +are as follows. +<br/> +<span class="pre-in-pp"> + FAMILY <family> + FONT <font> + SIZE +|-<n> + COLOR <color> + INDENT <amount> + CAPS | NO_CAPS +</span> +The arguments may be entered in any order. +</p> + +<p> +The family, font, size, and color arguments behave identically +to the individual control macros that govern other tags, therefore see +<a href="docelement.html#control-macro-args">Arguments to the control macros</a> +for usage. Their defaults are the same as for paragraphs in +<a href="definitions.html#running">running text</a>. +</p> + +<p> +<kbd>INDENT</kbd> lets you indent entries by the amount specified, and +requires a +<a href="definitions.html#unitofmeasure">unit of measure</a>. +Mom sensibly indents and aligns all levels of entry. If you change +the indent for any level, all levels beneath it are still indented +according to mom’s normal arrangement, but with the indent +assigned to <kbd>level</kbd> taken into account. When you use +<kbd>INDENT</kbd>, the indent is measured from the left edge of +the text of the previous level, including numbering, if any. +</p> + +<p> +<kbd>CAPS</kbd> instructs mom to capitalize title entries. +Capitalization may be enabled or disabled on a per-title basis. +</p> + +<p> +As an example, if you want a particular entry level, say +“2”, to be in Helvetica, italics, and slightly larger +than other entries, you could do either +<br/> +<span class="pre-in-pp"> + .TOC_ENTRY_STYLE 2 FAMILY H FONT I SIZE +.25 +</span> +or +<br/> +<span class="pre-in-pp"> + .TOC_ENTRY_STYLE 2 \ + FAMILY H + FONT I \ + SIZE +.25 +</span> +</p> + +<!-- -PREFIX_CHAPTER_NUMBERS- --> + +<div id="toc-prefix-ch-number" class="box-macro-args"> +Macro: <b>TOC_PREFIX_CHAPTER_NUMBER</b> <kbd class="macro-args"><none> <anything></kbd> +</div> +<p class="alias" style="margin-bottom: 0;"> +<i>Alias:</i> <b>TOC_PREFIX_SECTION_NUMBER</b> +</p> + +<p> +By default, mom does not prefix a chapter number to chapters or +section titles in the table of contents. If you would like her to +do so, invoke <kbd>.TOC_PREFIX_CHAPTER_NUMBER</kbd> without an +argument before +<a href="docprocessing.html#start">START</a>. +</p> + +<p> +You may subsequently disable the prefixing of chapter numbers +by supplying the macro with any argument (<kbd>OFF</kbd>, +<kbd>QUIT</kbd>, <kbd>Q</kbd>, <kbd>X</kbd>...) prior to the +<kbd>.START</kbd> that comes after +<a href="rectoverso.html#collate"><kbd>.COLLATE</kbd></a>. +</p> + +<p> +This macro is useful you want chapters numbered in the table of +contents but the chapters themselves are identified by title only. +It can be used with both +<a href="docprocessing.html#doctype">DOCTYPE CHAPTER</a> +and +<a href="docprocessing.html#doctype">DOCTYPE DEFAULT</a>. +The alias <b>TOC_PREFIX_SECTION_NUMBER</b> may be preferable +in the latter case. +</p> + +<!-- -PAD_TOC_CHAPTER_NUMBERS- --> + +<div id="toc-pad-ch-numbers" class="box-macro-args"> +Macro: <b>PAD_TOC_CHAPTER_NUMBERS</b> <kbd class="macro-args"><number of chapters></kbd> +</div> +<p class="alias" style="margin-bottom: 0;"> +<i>Alias:</i> <b>PAD_TOC_SECTION_NUMBERS</b> +</p> + + +<p> +If the number of chapters or major sections +(<a href="docprocessing.html#doctype">DOCTYPE DEFAULT</a>) +exceeds 9, you can have mom pad the numbers so the rightmost +numerals of the chapter numbers align. Simply invoke +<kbd>PAD_TOC_CHAPTER_NUMBERS</kbd> with the number of chapters in +the document. +</p> + +<p> +Without padding: +<br/> +<span class="pre-in-pp"> + 9. Chapter Title.....................100 + 10. Chapter Title....................123 +</span> +With padding: +<br/> +<span class="pre-in-pp"> + 9. Chapter Title....................100 + 10. Chapter Title....................123 +</span> +</p> + +<!-- -TOC_ENTRY_NUMBERS- --> + +<div id="toc-entry-numbers" class="box-macro-args"> +Macro: <b>TOC_ENTRY_NUMBERS</b> <kbd class="macro-args"><FULL> <TRUNCATE> <NONE></kbd> +</div> + +<p> +If numbering is enabled for any level of +<a href="docelement.html#heading">HEADING</a>, +mom, by default, includes the numbering in that level’s +entries in table of contents. If you would prefer that +numbering not be included in the table of contents, +issue <kbd>.TOC_ENTRY_NUMBERS NONE</kbd>. If +you’d like to include numbering, but not the full, +concatenated numbering used in the body of the document, issue +<kbd>.TOC_ENTRY_NUMBERS TRUNCATE</kbd>. +</p> + +<p> +Assuming numbering is enabled for HEADINGs 1, 2, and 3, +<kbd>.TOC_ENTRY_NUMBERS FULL</kbd> (mom’s default), would +result in +<br/> +<span class="pre-in-pp"> + 1. Level-1 entry + 1.1. Level-2 entry + 1.1.1. Level-3 entry + 2. Level-1 entry + 2.1. Level-2 entry + 2.1.1. Level-3 entry +</span> +whereas <kbd>.TOC_ENTRY_NUMBERS TRUNCATE</kbd> would produce +<br/> +<span class="pre-in-pp"> + 1. Level-1 entry + 1. Level-2 entry + 1. Level-3 entry + 2. Level-1 entry + 1. Level-2 entry + 1. Level-3 entry +</span> +and <kbd>.TOC_ENTRY_NUMBERS NONE</kbd> would remove numbering +completely. +<br/> +<span class="pre-in-pp"> + Level-1 entry + Level-2 entry + Level-3 entry + Level-1 entry + Level-2 entry + Level-3 entry +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +<kbd>.TOC_ENTRY_NUMBERS TRUNCATE</kbd> removes the numbering +associated with table of contents chapter or section titles +when +<a href="docelement.html#prefix-chapter-number">PREFIX_CHAPTER_NUMBER</a> +is enabled. To enable the numbering of chapter or section titles +in this circumstance, use +<a href="#toc-prefix-ch-number">TOC_PREFIX_CHAPTER_NUMBER</a>. +</p> +</div> + +<h4 id="toc-additional" class="docs" style="margin-top: -1em;">5. Additional table of contents control macros</h4> + +<p> +The following five macros allow you to +</p> +<ul style="margin-top: -.5em; margin-left: -.5em;"> + <li>instruct mom to <a href="#toc-appends-author">append author(s) to</a> <a href="docprocessing.html#title">TITLE</a> <a href="toc-appends-author">entries</a></li> + <li><a href="#toc-title-entry">alter the wording of</a> <a href="docprocessing.html#title">TITLE</a> <a href="#toc-title-entry">entries</a></li> + <li>instruct mom to <a href="#space-toc-items">space table of contents entries</a> pleasingly</li> + <li>establish <a href="#toc-padding">how many placeholders to leave for page number references</a></li> + <li><a href="#toc-rv-switch">switch table of contents page margins</a> should they be incorrect for recto/verso printing</li> +</ul> + +<!-- -TOC_APPENDS_AUTHOR- --> + +<div id="toc-appends-author" class="box-macro-args"> +Macro: <b>TOC_APPENDS_AUTHOR</b> <kbd class="macro-args"><none> | "<name(s) of authors>"</kbd> +</div> + +<p> +In certain kinds of collated documents, different authors are +responsible for the articles or stories contained within them. In +such documents, you may wish to have the author or authors appended +to the table of contents’ title entry for each story or +article. +</p> + +<p> +If you invoke <kbd>.TOC_APPENDS_AUTHOR</kbd> <i>without</i> an +argument, mom appends the first argument you passed to +<a href="docprocessing.html#author">AUTHOR</a> +to table of contents title entries, separated by a front-slash. +</p> + +<p> +If you invoke <kbd>.TOC_APPENDS_AUTHOR</kbd> <i>with</i> an argument +(surrounded by double-quotes), mom will append it to the table of +contents title entries instead. This is useful if you have multiple +authors you wish to identify by last name only. For example, if +three authors—Joe Blough, Jane Doe, and John Deere—are +responsible for a single article +<br/> +<span class="pre-in-pp"> + .TOC_APPENDS_AUTHOR "Blough et al." +</span> +would be a good way to identify them in the table of contents. +</p> + +<!-- -TOC_TITLE_ENTRY- --> + +<div id="toc-title-entry" class="box-macro-args"> +Macro: <b>TOC_TITLE_ENTRY</b> <kbd class="macro-args">"<alternate wording for a title entry in the toc>"</kbd> +</div> + +<p> +In +<a href="rectoverso.html#collate">collated</a> +documents, the title of each chapter appears in the table of +contents. It may sometimes happen that you don’t want the +title as it appears in the table of contents to be the same as what +appears in the +<a href="definitions.html#docheader">docheader</a>. +You might, for example, want to shorten it. Or, in the case of +chapters where the docheader contains both a chapter number and a +chapter title, like this +<br/> +<span class="pre-in-pp"> + Chapter 6 + Burning Bush — Maybe God Was Right +</span> +you might want only the chapter title, not the chapter number, to +show up in the table of contents. (By default, <kbd>.TOC</kbd> +generates both.) +</p> + +<p> +If you want to change the wording of a title entry in the table of +contents, simply invoke +<br/> +<span class="pre-in-pp"> + .TOC_TITLE_ENTRY +</span> +with the desired wording, enclosed in double-quotes. Using the +example, above, +<br/> +<span class="pre-in-pp"> + .CHAPTER 6 + .CHAPTER_TITLE "Burning Bush — Maybe God Was Right" + .TOC_TITLE_ENTRY "Burning Bush" + .DOCTYPE CHAPTER +</span> + +would identify chapter 6 in the table of contents simply as +“Burning Bush”. +</p> + +<!-- -SPACE_TOC_ITEMS- --> + +<div id="space-toc-items" class="box-macro-args"> +Macro: <b>SPACE_TOC_ITEMS</b> +</div> + +<p> +If you’d like mom to add a small amount of space between table +of contents entry levels, use <kbd>.SPACE_TOC_ITEMS</kbd>. Mom will +visually group entry levels in a way that’s pleasing to the +eye. The only catch to this macro is that the bottom margins of +table of contents pages may not align perfectly. +</p> + +<p> +Please note that +<kbd>SPACE_TOC_ITEMS</kbd> is only available with +<a href="docprocessing.html#printstyle">PRINTSTYLE TYPESET</a>. +</p> + + +<!-- -TOC_PADDING- --> + +<div id="toc-padding" class="box-macro-args"> +Macro: <b>TOC_PADDING</b> <kbd class="macro-args"><number of placeholders to allow for page number listings></kbd> +</div> + +<p> +By default, mom allows room for 3 digits in the page number +references of table of contents entries. If you’d like some +other number of placeholders, say 2 (if your document runs to less +than 100 pages), do +<br/> +<span class="pre-in-pp"> + .TOC_PADDING 2 +</span> +</p> + +<!-- -TOC_RV_SWITCH- --> + +<div id="toc-rv-switch" class="box-macro-args"> +Macro: <b>TOC_RV_SWITCH</b> +</div> + +<p> +TOC_RV_SWITCH doesn’t take an argument. It simply instructs +mom to switch the left and right margins of the first table of +contents page in +<a href="rectoverso.html#recto-verso">recto/verso</a> +documents should the table of contents happen to begin on an even +page when you want an odd, or vice versa. +</p> + +<p> +The same result can be accomplished by outputting a +<a href="headfootpage.html#blank-pages">BLANKPAGE</a>. +</p> + +<h4 id="toc-more" class="docs" style="margin-top: -.5em;">6. I still need more!</h4> + +<p> +If there is some aspect of Table of Contents formatting for which +no TOC control macros are provided, mom has a special +<a href="definitions.html#toggle">toggle macro</a> +to help out: TOC_PAGE_SETTINGS. +</p> + +<p> +TOC_PAGE_SETTINGS allows you to enter extra formatting changes for +the Table of Contents as if it were simply another collated section +or chapter of a document. Because it’s a toggle macro, +invoking it by itself begins collecting your formatting directives, +and invoking it with any argument (<kbd>OFF</kbd>, <kbd>QUIT</kbd>, +<kbd>END</kbd>...) stops the collection. +</p> + +<p> +TOC_PAGE_SETTINGS is special in that the formatting commands +contained within it must be preceded by <kbd>\!</kbd> (that’s +backslash-exclamation point). +</p> + +<p id="toc-page-settings-example"> +For example, say you want to redesign the default page headers for +the Tables of Contents so that it only contains the document title +on the left and “Contents” in italics on the right, and +furthermore adjust the footer margin and footer gap, this is how +you’d do it: +<br/> +<span class="pre-in-pp"> + .TOC_PAGE_SETTINGS + \!.HEADER_RECTO L "^\E*[$TITLE]#\*[IT]Contents\*[PREV]^" + \!.FOOTER_MARGIN 3P + \!.B_MARGIN 6P+3p + .TOC_PAGE_SETTINGS END +</span> +(For an explanation of why the example uses <kbd>.B_MARGIN</kbd> to +set/change the footer gap, see +<a href="headfootpage.html#gap-note">here</a>.) +</p> + +<p> +TOC_PAGE_SETTINGS can be put in the stylesheet section of a document +(i.e. after +<a href="docprocessing.html#printstyle">PRINTSTYLE</a> +and before +<a href="docprocessing.html#start">START</a>) +or invoked just before +<a href="#toc">TOC</a>. +</p> + +<div class="rule-long"><hr/></div> + +<!-- Navigation links --> +<table style="width: 100%; margin-top: 12px;"> +<tr> + <td style="width: 33%;"><a href="toc.html">Back to Table of Contents</a></td> + <td style="width: 24%; text-align: center;"><a href="#top">Top</a></td> + <td style="width: 42%; text-align: right;"><a href="refer.html">Next: Bibliographies and references</a></td> +</tr> +</table> + +</div> + +<div class="bottom-spacer"><br/></div> + +</body> +</html> diff --git a/contrib/mom/momdoc/toc.html b/contrib/mom/momdoc/toc.html new file mode 100644 index 0000000..6273751 --- /dev/null +++ b/contrib/mom/momdoc/toc.html @@ -0,0 +1,476 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004-2020 Free Software Foundation, Inc. +Written by Peter Schaffter (peter@schaffter.ca). + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"/> + <title>Mom, version 2.5_d -- Table of Contents</title> + <link rel="stylesheet" type="text/css" href="stylesheet.css" /> +</head> + +<body style="background-color: #f5faff;"> + +<!-- ==================================================================== --> + +<div class="page"> + + <div class="version"> + mom, version 2.5_d + </div> + +<h1 class="toc" style="margin-top: 9px;">Table of Contents</h1> + + <p style="margin-left: 2.75em; margin-right: 2.75em; text-align:center "> + The table of contents is large. To ease navigation, + click on any link in the + <br/> + <a href="#quick-toc">Quick Table of Contents</a> + <br/> + which will take you to the corresponding entry in the + <br/> + <a href="#detailed-toc">Detailed Table of Contents</a>. + <br/> + If you’ve been using mom for a while, you may prefer the + <br/> + <a href="macrolist.html#top">Quick Reference Guide</a>, + <br/> + which gives a convenient, categorized list of mom’s + user-space macros with links to corresponding entries in the + documentation. + </p> + +<div class="rule-medium"><hr/></div> + +<!-- -QUICK TABLE OF CONTENTS- --> + + <h2 id="quick-toc" class="toc" style="margin-top: 18px; text-align: center;">Quick Table of Contents</h2> + + <div style="width: 50%; margin-top: .75em; margin-left: 12px; float: left;"> + <h3 id="version-2" class="toc"><a style="color: #6e70cc" href="#v2-notes">VERSION 2.0 NOTES</a></h3> + <br/> + + <h3 id="introductory" class="toc"><a style="color: #6e70cc" href="#what">INTRODUCTION TO MOM</a></h3> + + <ul class="toc"> + <li><a href="#what">What is mom?</a></li> + <li><a href="#defs">Definitions of terms used in this manual</a></li> + <li><a href="#using">Using mom</a></li> + </ul> + + <h3 id="typesetting" class="toc"><a style="color: #6e70cc" href="#typeset">TYPESETTING WITH MOM</a></h3> + + <ul class="toc"> + <li><a href="#type-intro">Introduction to the typesetting macros</a></li> + <li><a href="#page">Page setup</a></li> + <li><a href="#param">Basic typesetting parameters</a></li> + <li><a href="#just">Justifying, quadding, etc.</a></li> + <li><a href="#refine">Refinements</a></li> + <li><a href="#mod">Modifying type</a></li> + <li><a href="#vert">Vertical movements</a></li> + <li><a href="#tab">Tabs</a></li> + <li><a href="#col">Multiple columns</a></li> + <li><a href="#ind">Indents</a></li> + <li><a href="#goodies">Goodies</a></li> + <li><a href="#escapes">Inline escapes</a></li> + <li><a href="#color">Coloured text</a></li> + <li><a href="#graphical">Graphical objects</a></li> + </ul> + </div> + + <div style="margin-left: 332px;"> + <h3 id="document-processing" class="toc" style="margin-top: 1.25em;"><a style="color: #6e70cc" href="#doc-proc">DOCUMENT PROCESSING WITH MOM</a></h3> + + <ul class="toc" style="margin-left: 3em;"> + <li><a href="#doc-proc">Introduction to document processing</a></li> + <li><a href="#doc-defaults">Document defaults</a></li> + <li><a href="#vert-ws">Vertical whitespace management</a></li> + <li><a href="#prelim">Preliminary document setup</a></li> + <li><a href="#typemacdoc">Behaviour of the typesetting macros during document processing</a></li> + <li><a href="#tags">The document element tags</a> – headings, paragraphs, quotes, etc.</li> + <li><a href="#images">Graphics, floats, and preprocessor support</a></li> + <li><a href="#box">Shaded backgrounds and frames</a></li> + <li><a href="#hdrftr">Page headers and footers</a></li> + <li><a href="#paginate">Pagination</a></li> + <li><a href="#rv">Recto/verso printing and collating</a></li> + <li><a href="#cover">Cover pages</a></li> + <li><a href="#tocs">Tables of contents</a></li> + <li><a href="#ref">Bibliographies and references</a></li> + <li><a href="#letter">Writing letters</a> + <ul style="list-style-type: none;"> + <li style="display: inline-block; width: 212px; height: 0; margin-top: .5em; margin-left: -2.5em; border: solid 1px #8d8775;"> </li> + </ul></li> + <li style="margin-top: -1em;"><a href="#quick">Quick reference guide</a></li> + <li><a href="#appendices">Appendices</a></li> + </ul> + </div> + + <div class="rule-long" style="clear: both;"><hr/></div> + +<!-- -FULL TABLE OF CONTENTS- --> + + <h2 id="detailed-toc" class="toc" style="margin-top: 24px; text-align: center;">Detailed Table of Contents</h2> + + <div style="margin-left: 12px;"> + <h3 id="v2-notes" class="toc"><a style="color: #6e70cc" href="version-2.html#top">VERSION 2.0 NOTES</a></h3> + + <ul class="toc"> + <li><a href="version-2.html#prefatory">Prefatory comments</a></li> + <li><a href="version-2.html#differences">Differences between 2.0 and 1.x</a> + <ul> + <li><a href="version-2.html#pdf-support">PDF Support</a></li> + <li><a href="version-2.html#covers">Covers</a></li> + <li><a href="version-2.html#headings">Headings</a></li> + <li><a href="version-2.html#margin-notes">Margin notes</a></li> + <li><a href="version-2.html#floats">Floats</a></li> + <li><a href="version-2.html#table-of-contents">Table of Contents</a></li> + </ul></li> + <li><a href="version-2.html#pdfmom">The <strong>pdfmom</strong> wrapper around groff</a></li> + <li><a href="version-2.html#install-font">The <strong>install-font</strong> script</a></li> + </ul> + + <h3 id="what" class="toc"><a style="color: #6e70cc" href="intro.html#top">1. WHAT IS MOM?</a></h3> + + <ul class="toc"> + <li><a href="intro.html#intro-intro">1.1 Who is mom meant for?</a></li> + <li><a href="intro.html#intro-typesetting">1.2 Typesetting with mom</a></li> + <li><a href="intro.html#intro-docprocessing">1.3 Document processing with mom</a></li> + <li><a href="intro.html#intro-philosophy">1.4 Mom’s philosophy</a></li> + <li><a href="intro.html#intro-documentation">1.5 A note on mom’s documentation</a> + <ul> + <li><a href="intro.html#canonical">1.5.1 Canonical reference materials</a></li> + <li><a href="intro.html#macro-args">1.5.2 How to read macro arguments</a></li> + <li><a href="intro.html#toggle-macro">1.5.3 “Toggle” macros</a></li> + <li><a href="intro.html#examples">1.5.4 Examples</a></li> + </ul> + </li> + </ul> + + <h3 id="defs" class="toc"><a style="color: #6e70cc" href="definitions.html#top">2. DEFINITIONS OF TERMS USED IN THIS MANUAL</a></h3> + + <ul class="toc"> + <li><a href="definitions.html#typesetting-terms">2.1 Typesetting terms</a></li> + <li><a href="definitions.html#groff-terms">2.2 Groff terms</a></li> + <li><a href="definitions.html#mom-terms">2.3 Mom’s document processing terms</a></li> + </ul> + + <h3 id="using" class="toc"><a style="color: #6e70cc" href="using.html#top">3. USING MOM</a></h3> + + <ul class="toc"> + <li><a href="using.html#using-intro">3.1 Introduction</a></li> + <li><a href="using.html#using-macros">3.2 How to input mom’s macros</a></li> + <li><a href="using.html#viewing">3.3 Processing and viewing documents</a> + <ul> + <li><a href="using.html#pdf">Mom and pdf</a></li> + <li><a href="using.html#pdfmom">pdfmom</a></li> + </ul></li> + <li><a href="using.html#previewing">3.4 Automatic previewing of documents</a></li> + </ul> + +<!-- -TYPESETTING MACROS- --> + + <h3 id="typeset" class="toc"><a style="color: #6e70cc" href="typesetting.html#top">4. TYPESETTING WITH MOM</a></h3> + + <ul class="toc"> + <li><a id="type-intro" href="typesetting.html#typesetting-intro">4.1 Introduction to the typesetting macros</a></li> + <li><a id="page" href="typesetting.html#page-setup-intro">4.2 Page setup</a> – paper size and page margins + <ul> + <li><a href="typesetting.html#index-page-setup">4.2.1 Macro list</a></li> + </ul></li> + <li><a id="param" href="typesetting.html#basic-params-intro">4.3 Basic typesetting parameters</a> – family, font, fallback font, point size, line space, line length, autolead + <ul> + <li><a href="typesetting.html#index-basic">4.3.1 Macro list</a></li> + </ul></li> + <li><a id="just" href="typesetting.html#justification-intro">4.4 Justifying, quadding, filling and breaking lines</a> + <ul> + <li><a href="typesetting.html#index-justification">4.4.1 Macro list</a></li> + </ul></li> + <li><a id="refine" href="typesetting.html#refinements-intro">4.5 Refinements</a> – word space, sentence space, letter spacing (track kerning), hyphenation, kerning, ligatures + <ul> + <li><a href="typesetting.html#index-refinements">4.5.1 Macro list</a></li> + </ul></li> + <li><a id="mod" href="typesetting.html#modifications-intro">4.6 Modifying Type</a> – pseudo-italic, -bold, -condensed, and -extended + <ul> + <li><a href="typesetting.html#index-modifications">4.6.1 Macro list</a></li> + </ul></li> + <li><a id="vert" href="typesetting.html#aldrld-intro">4.7 Vertical Movements</a> – moving up and down on the page + <ul> + <li><a href="typesetting.html#index-aldrld">4.7.1 Macro list</a></li> + </ul></li> + <li><a id="tab" href="typesetting.html#tabs-intro">4.8 Tabs</a> + <ul> + <li><a href="typesetting.html#typesetting-tabs">4.8.1 Typesetting tabs</a> + <ul> + <li><a href="typesetting.html#typesetting-tabs-tut">4.8.1.1 Quickie tutorial</a></li> + </ul></li> + <li><a href="typesetting.html#string-tabs">4.8.2 String tabs (autotabs)</a> + <ul> + <li><a href="typesetting.html#string-tabs-tut">4.8.2.1 Quickie tutorial</a></li> + </ul></li> + <li><a href="typesetting.html#index-tabs">4.8.3 Macro list</a></li> + </ul></li> + <li><a id="col" href="typesetting.html#multicolumns-intro">4.9 Multiple columns</a> + <ul> + <li><a href="typesetting.html#index-multicolumns">4.9.1 Macro list</a></li> + </ul></li> + <li><a id="ind" href="typesetting.html#indents-intro">4.10 Indents</a> + <ul> + <li><a href="typesetting.html#indents-handling">4.10.1 A brief explanation of how mom handles indents</a></li> + <li><a href="typesetting.html#index-indents">4.10.2 Macro list</a></li> + </ul></li> + <li><a id="goodies" href="goodies.html#top">4.11 Goodies</a> + – aliases, transparent (comment) lines, smartquotes, caps, + underscoring/underlining, padding lines, leaders, drop + caps, superscripts, user-definable strings, changing the + escape character + <ul> + <li><a href="goodies.html#index-goodies">4.11.1 Macro list</a></li> + </ul></li> + <li><a id="escapes" href="inlines.html#top">4.12 Inline Escapes</a> + <ul> + <li><a href="inlines.html#intro-inlines">4.12.1 Introduction to inline escapes</a></li> + <li><a href="inlines.html#index-inlines">4.12.2 List of inline escapes</a></li> + <li><a href="inlines.html#inlines-mom-top">4.12.3 Mom’s personal inline escapes</a></li> + <li><a href="inlines.html#inlines-groff-top">4.12.4 Commonly-used groff inline escapes</a> + <ul> + <li><a href="inlines.html#inline-characters-groff">4.12.4.1 Special characters and symbols</a></li> + </ul></li> + </ul></li> + <li><a id="color" href="color.html#top">4.13 Coloured text</a> + <ul> + <li><a href="color.html#intro-color">4.13.1 Introduction to coloured text</a></li> + <li><a href="color.html#index-color">4.13.2 Macro list</a></li> + </ul></li> + <li><a id="graphical" href="graphical.html#top">4.14 Graphical objects</a> + – horizontal and vertical rules, boxes, ellipses (circles) + <ul> + <li><a href="graphical.html#intro-graphical">4.14.1 Introduction to graphical objects</a></li> + <li><a href="graphical.html#index-graphical">4.13.2 Macro list</a></li> + </ul></li> + </ul> + +<!-- -DOCUMENT PROCESSING MACORS- --> + + <h3 id="doc-proc" class="toc"><a style="color: #6e70cc" href="docprocessing.html#top">5. DOCUMENT PROCESSING WITH MOM</a></h3> + <ul class="toc"> + <li><a href="docprocessing.html#docprocessing-intro">5.1 Introduction to document processing</a></li> + <li><a id="doc-defaults" href="docprocessing.html#defaults">5.2 Document defaults</a> – papersize, margins, etc. + <ul> + <li><a id="vert-ws" href="docprocessing.html#vertical-whitespace-management">5.2.1 Vertical whitespace management</a> + <ul> + <li><a href="docprocessing.html#shim">5.2.1.1 SHIM</a></li> + <li><a href="docprocessing.html#flex">5.2.1.2 FLEX</a></li> + </ul></li> + </ul></li> + <li><a id="prelim" href="docprocessing.html#setup" class="highlight">5.3 PRELIMINARY DOCUMENT SETUP</a> + <ul> + <li><a href="docprocessing.html#docprocessing-tut">5.3.1 Tutorial</a> – setting up a mom document</li> + <li><a href="docprocessing.html#reference-macros">5.3.2 The reference macros</a> – metadata mom needs to do her job + <ul> + <li><a href="docprocessing.html#title">5.3.2.1 TITLE</a></li> + <li><a href="docprocessing.html#doc-title">5.3.2.2 DOCTITLE</a></li> + <li><a href="docprocessing.html#subtitle">5.3.2.3 SUBTITLE</a></li> + <li><a href="docprocessing.html#author">5.3.2.4 AUTHOR</a></li> + <li><a href="docprocessing.html#chapter">5.3.2.5 CHAPTER</a></li> + <li><a href="docprocessing.html#chapter-title">5.3.2.6 CHAPTER_TITLE</a></li> + <li><a href="docprocessing.html#draft">5.3.2.7 DRAFT</a></li> + <li><a href="docprocessing.html#revision">5.3.2.8 REVISION</a></li> + <li><a href="docprocessing.html#copyright">5.3.2.9 COPYRIGHT</a></li> + <li><a href="docprocessing.html#misc">5.3.2.10 MISC</a></li> + <li><a href="docprocessing.html#covertitle">5.3.2.11 COVERTITLE</a></li> + <li><a href="docprocessing.html#covertitle">5.3.2.12 DOC_COVERTITLE</a></li> + <li><a href="docprocessing.html#pdftitle">5.3.2.13 PDF_TITLE</a></li> + <li><a href="docprocessing.html#toc-heading">5.3.2.14 TOC_HEADING</a></li> + </ul></li> + <li><a href="docprocessing.html#docstyle-macros">5.3.3 The docstyle macros</a> – base templates; what kind of document you’re creating, how you want it to look overall + <ul> + <li><a href="docprocessing.html#doctype">5.3.3.1 DOCTYPE</a> – the kind of document (default, chapter, named, letter) + <ul style="list-style-type: circle"> + <li><a href="docprocessing.html#slides">DOCTYPE SLIDES</a></li> + </ul></li> + <li><a href="docprocessing.html#printstyle">5.3.3.2 PRINTSTYLE</a> – typeset or “typewritten, double-spaced”</li> + <li><a href="docprocessing.html#copystyle">5.3.3.3 COPYSTYLE</a> – draft or final</li> + </ul></li> + <li><a href="docprocessing.html#start-macro">5.3.4 Initiate document processing</a> + <ul> + <li><a href="docprocessing.html#start">5.3.4.1 START</a> – the required macro to initiate document processing</li> + </ul></li> + <li><a href="docprocessing.html#docheader">5.3.5 Managing the DOCHEADER</a> – title, author, etc. on first page + <ul> + <li><a href="docprocessing.html#docheader-control">5.3.5.1 DOCHEADER control</a></li> + </ul></li> + <li><a href="docprocessing.html#columns-intro">5.3.6 Setting documents in columns</a></li> + <li><a href="docprocessing.html#style-before-start">5.3.7 Establishing type and formatting parameters <span style="font-style: italic">before</span> START</a> + <ul> + <li><a href="docprocessing.html#type-before-start">5.3.7.1 Use of the typesetting macros before START</a> + <ul class="fourth-level"> + <li>– <a href="docprocessing.html#include">5.3.7.1.1 Including (sourcing) style sheets and files</a></li> + <li>– <a href="docprocessing.html#color">5.3.7.1.2 Initializing colours</a></li> + </ul></li> + <li><a href="docprocessing.html#doc-lead-adjust">5.3.7.2 DOC_LEAD_ADJUST</a> – adjust document + <a href="definitions.html#leading">leading</a> + to fill pages</li> + </ul></li> + <li><a href="docprocessing.html#style-after-start">5.3.8 Changing basic type and formatting parameters <span style="font-style: italic">after</span> START</a></li> + <li><ul> + <li><a id="typemacdoc" href="docprocessing.html#behaviour">5.3.8.1 Behaviour of the typesetting macros during document processing</a></li> + <li><a href="docprocessing.html#intro-doc-param">5.3.8.2 Post-START global style-change macros</a></li> + </ul></li> + </ul></li> + <li><a id="tags" class="highlight" href="docelement.html#top">5.4 THE DOCUMENT ELEMENT TAGS</a> + <ul> + <li><a href="docelement.html#docelement-intro">5.4.1 Introduction to the document element tags</a> + <ul> + <li><a href="docelement.html#docelement-control">5.4.1.1 Control macros</a> – changing style defaults for document element tags</li> + <li><a href="docelement.html#control-macro-args">5.4.1.2 Arguments to the control macros</a></li> + </ul></li> + <li><a href="docelement.html#epigraph-intro">5.4.2 Epigraphs</a></li> + <li><a href="docelement.html#pp-intro">5.4.3 Paragraphs</a></li> + <li><a href="docelement.html#heading-intro">5.4.4 Headings</a></li> + <li><a href="docelement.html#linebreak-intro">5.4.5 Linebreaks</a> – author linebreaks (section breaks)</li> + <li><a href="docelement.html#quote-intro">5.4.6 Quotes</a> – line for line poetic quotes or unformatted, verbatim text (e.g. blocks of code)</li> + <li><a href="docelement.html#blockquote-intro">5.4.7 Blockquotes</a> – cited material</li> + <li><a href="docelement.html#code">5.4.8 Code</a> – inserting code snippets</li> + <li><a href="docelement.html#list-intro">5.4.9 Lists</a> – nested lists</li> + <li><a href="docelement.html#number-lines-intro">5.4.10 Line numbering</a></li> + <li><a href="docelement.html#footnote-intro">5.4.11 Footnotes</a></li> + <li><a href="docelement.html#endnote-intro">5.4.12 Endnotes</a></li> + <li><a href="docelement.html#margin-notes-intro">5.4.13 Margin notes</a></li> + <li><a href="docelement.html#finis-intro">5.4.14 Document termination string</a> – FINIS</li> + </ul></li> + <li><a id="images" class="highlight" href="images.html#top">5.5 GRAPHICS, FLOATS, AND PREPROCESSOR SUPPORT</a> + <ul> + <li><a href="images.html#images-intro">5.5.1 Inserting images and graphics</a></li> + <li><a href="images.html#converting">5.5.2 Image conversion and file processing</a></li> + <li><a href="images.html#pdf-image">5.5.3 PDF_IMAGE</a> + <ul> + <li><a href="images.html#pdf-image-frame">5.5.3.1 PDF_IMAGE_FRAME</a></li> + </ul></li> + <li><a href="images.html#pspic">5.5.4 PSPIC</a></li> + <li><a href="images.html#floats-intro">5.5.5 Floats</a> + <ul> + <li><a href="images.html#float">5.5.5.1 FLOAT</a></li> + </ul></li> + <li><a href="images.html#preprocessor-support">5.5.6 Preprocessor support</a> + <ul> + <li><a href="images.html#tbl">5.5.6.1 tbl support</a></li> + <li><a href="images.html#eqn">5.5.6.2 eqn support</a></li> + <li><a href="images.html#pic">5.5.6.3 pic support</a></li> + <li><a href="images.html#grap">5.5.6.4 grap support</a> + <ul style="list-style-type: disc"> + <li><a href="images.html#pic-text-style">5.5.6.3.1 PIC_TEXT_STYLE</a></li> + </ul></li> + <li><a href="images.html#refer">5.5.6.4 refer support</a></li> + </ul></li> + <li><a href="images.html#captions-and-labels">5.5.7 Captions and labels</a> + <ul> + <li><a href="images.html#autolabel">5.5.7.1 AUTOLABEL</a></li> + <li><a href="images.html#caption-after-label">5.5.7.2 CAPTION_AFTER_LABEL</a></li> + <li><a href="images.html#captions-labels-sources">5.5.7.3 CAPTIONS / LABELS / SOURCES—set style parameters</a></li> + <li><a href="images.html#mla">5.5.7.4 MLA</a></li> + </ul></li> + <li><a href="images.html#lists-of">5.5.8 Lists of Figures, Tables, and Equations</a> + <ul> + <li><a href="images.html#lists-placement">5.5.8.1 Placement of Lists</a></li> + <li><a href="images.html#lists-macros">5.5.8.2 Macros to generate Lists</a></li> + <li><a href="images.html#formatting-lists">5.5.8.3 Formatting and style parameters for Lists</a> + <ul> + <li><a href="#lists-style">5.5.8.3.1 LISTS_STYLE</a></li> + </ul></li> + </ul></li> + </ul></li> + <li><a id="box" class="highlight" href="headfootpage.html#top">5.6 SHADED BACKGROUNDS AND FRAMES</a> + <ul> + <li><a href="images.html#box-intro">5.6.1 Introduction</a></li> + <li><a href="images.html#box-macro">5.6.2 The BOX macro</a></li> + <li><a href="images.html#box-notes">5.6.3 Additional notes on BOX usage and behaviour</a></li> + <li><a href="images.html#page-color">5.6.4 PAGE_COLOR</a></li> + </ul> + </li> + <li><a id="hdrftr" class="highlight" href="headfootpage.html#top">5.7 PAGE HEADERS AND FOOTERS</a> + <ul> + <li><a href="headfootpage.html#headfootpage-intro">5.7.1 Introduction</a></li> + <li><a href="headfootpage.html#description-general">5.7.2 General description of headers/footers</a></li> + <li><a href="headfootpage.html#header-style">5.7.3 Default specs for headers/footers</a></li> + <li><a href="headfootpage.html#vertical-spacing">5.7.4 Vertical placement and spacing of headers/footers</a></li> + <li><a href="headfootpage.html#headfoot-management">5.7.5 Managing page headers and footers</a></li> + <li><a href="headfootpage.html#headfoot-control">5.7.6 Control macros for headers/footers</a></li> + <li><a href="headfootpage.html#userdef-hdrftr-rv">5.7.7 User-defined, single string recto/verso headers/footers</a> + <ul> + <li><a href="headfootpage.html#userdef-hdrftr">5.7.7.1 User-defined, single string headers/footers (no recto/verso)</a></li> + </ul></li> + <li><a href="headfootpage.html#headers-and-footers-intro">5.7.8 Headers and footers on the same page</a></li> + </ul></li> + <li><a id="paginate" class="highlight" href="headfootpage.html#pagination-intro">5.8 PAGINATION</a> + <ul> + <li><a href="headfootpage.html#pagination">5.8.1 Introduction</a></li> + <li><a href="headfootpage.html#index-pagination">5.8.2 Pagination macros list</a></li> + <li><a href="headfootpage.html#blank-pages">5.8.3 Blank pages</a></li> + </ul></li> + <li><a id="rv" class="highlight" href="rectoverso.html#top">5.9 RECTO/VERSO PRINTING, COLLATING</a> + <ul> + <li><a href="rectoverso.html#rectoverso-intro">5.9.1 Introduction to recto/verso printing</a> + <ul> + <li><a href="rectoverso.html#rectoverso-list">5.9.1.1 Macro list</a></li> + </ul></li> + <li><a href="rectoverso.html#collate-intro">5.9.2 Introduction to collating</a> + <ul> + <li><a href="rectoverso.html#collate">5.9.2.1 The COLLATE macro</a></li> + </ul></li> + </ul></li> + <li><a id="cover" class="highlight" href="cover.html#top">5.10 COVER PAGES</a></li> + <li><a id="tocs" class="highlight" href="tables-of-contents.html#top">5.11 TABLES OF CONTENTS</a> + <ul> + <li><a href="tables-of-contents.html#toc-intro">5.11.1 Introduction</a> – the TOC macro</li> + <li><a href="tables-of-contents.html#toc-appearance">5.11.2 Table of contents appearance and behaviour</a></li> + <li><a href="tables-of-contents.html#pdf-output">5.11.3 PDF output</a></li> + <li><a href="tables-of-contents.html#positioning">5.11.4 Positioning the table of contents</a> + <ul> + <li><a href="tables-of-contents.html#auto-relocate-toc">5.11.2 Automatic PDF relocation of the Table of Contents</a></li> + <li><a href="tables-of-contents.html#psselect">5.11.2 Using psselect to relocate the TOC in PostScript documents</a></li> + </ul></li> + <li><a href="tables-of-contents.html#index-toc-control">5.11.5 Table of contents control macros</a></li> + </ul></li> + <li><a id="ref" class="highlight" href="refer.html#top">5.12 BIBLIOGRAPHIES AND REFERENCES</a></li> + <li><a id="letter" class="highlight" href="letters.html#top">5.13 WRITING LETTERS</a> + <ul> + <li><a href="letters.html#letters-intro">5.13.1 Introduction to writing letters</a></li> + <li><a href="letters.html#letters-tutorial">5.13.2 Tutorial on writing letters</a></li> + <li><a href="letters.html#letters-defaults">5.13.3 Default letter style</a></li> + <li><a href="letters.html#index-letters-macros">5.13.4 The letter macros</a></li> + </ul></li> + </ul> + <h3 id="quick" class="toc highlight"><a style="color: #6e70cc" href="macrolist.html#top">6. QUICK REFERENCE GUIDE</a></h3> + <h3 id="appendices" class="toc" style="margin-top: .5em;"><a style="color: #6e70cc" href="appendices.html#top">7. APPENDICES</a></h3> + <ul class="toc"> + <li><a href="appendices.html#fonts">7.1 Adding fonts to groff</a> + <ul> + <li><a href="appendices.html#steps">7.1.1 Step-by-step instructions</a></li> + </ul></li> + <li><a href="appendices.html#codenotes">7.2 Some reflections on mom</a></li> + <li><a href="reserved.html">7.3 List of reserved words (macros, registers, strings)</a></li> + <li><a href="appendices.html#contact">7.4 Contact the author</a></li> + </ul> + </div> + +</div> + +<div class="bottom-spacer"><br/></div> + +</body> +</html> diff --git a/contrib/mom/momdoc/typesetting.html b/contrib/mom/momdoc/typesetting.html new file mode 100644 index 0000000..51d199e --- /dev/null +++ b/contrib/mom/momdoc/typesetting.html @@ -0,0 +1,4988 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004-2020 Free Software Foundation, Inc. +Written by Peter Schaffter (peter@schaffter.ca). + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"/> + <title>Mom -- Typesetting Macros</title> + <link rel="stylesheet" type="text/css" href="stylesheet.css" /> +</head> + +<body style="background-color: #f5faff;"> + +<!-- ==================================================================== --> + +<div id="top" class="page"> + +<!-- Navigation links --> +<table style="width: 100%;"> +<tr> + <td><a href="toc.html">Back to Table of Contents</a></td> + <td style="text-align: right;"><a href="goodies.html#top">Next: Goodies</a></td> +</tr> +</table> + +<h1 id="typesetting" class="docs">The typesetting macros</h1> + +<div id="typesetting-macros-mini-toc" class="mini-toc"> +<div class="mini-toc-col-1"> +<ul class="no-enumerator"> + <li class="list-head"><a href="#typesetting-macros">Introduction</a></li> + <li class="list-head"><a href="#page-setup-intro">Paper and page setup</a> + <ul> + <li class="item"><a href="#page-setup-note"><i>Important note on page dimensions & papersize</i></a></li> + <li class="item"><a href="#index-page-setup">Macro list</a></li> + </ul></li> + <li class="list-head"><a href="#basic-params-intro">Basic typesetting parameters</a> + <ul> + <li class="item"><a href="#index-basic">Macro list</a></li> + </ul></li> + <li class="list-head"><a href="#justification-intro">Justification and quadding/ + <br/> + <span style="margin-left: 1em;">breaking and joining lines</span></a> + <ul> + <li class="item"><a href="#index-justification">Macro list</a></li> + </ul></li> + <li class="list-head"><a href="#refinements-intro">Typographic refinements</a> + <ul> + <li class="item"><a href="#index-refinements">Macro list</a></li> + </ul></li> + <li class="list-head"><a href="#modifications-intro">Type modifications (pseudo font styles)</a> + <ul class="no-enumerator"> + <li class="item"><a href="#index-modifications">Macro list</a></li> + </ul></li> + <li class="list-head"><a href="#aldrld-intro">Vertical movements</a> + <ul class="no-enumerator"> + <li class="item"><a href="#index-aldrld">Macro list</a> + </li> + </ul></li> +</ul> +</div> +<div class="mini-toc-col-2"> + <ul class="no-enumerator"> + <li class="list-head"><a href="#tabs-intro">Tabs</a> + <ul class="no-enumerator"> + <li class="item"><a href="#typesetting-tabs">Typesetting tabs</a> + <ul style="margin-left: -.5em;"> + <li class="item" style="margin-left: -.5em; list-style-type: circle;"><a href="#typesetting-tabs-tut">Quickie tutorial on typesetting tabs</a></li> + </ul></li> + <li class="item"><a href="#string-tabs">String tabs</a> + <ul style="margin-left: -.5em;"> + <li class="item" style="margin-left: -.5em; list-style-type: circle;"><a href="#string-tabs-tut">Quickie tutorial on string tabs</a></li> + </ul></li> + <li class="item"><a href="#index-tabs">Macro list</a></li> + </ul></li> + <li class="list-head"><a href="#multicolumns-intro">Multiple columns</a> + <ul class="no-enumerator"> + <li class="item"><a href="#index-multicolumns">Macro list</a> + </li> + </ul></li> + <li class="list-head"><a href="#indents-intro">Indents</a> + <ul class="no-enumerator"> + <li class="item"><a href="#indents-handling">How mom handles indents</a></li> + <li class="item"><a href="#index-indents">Macro list</a> + </li> + </ul></li> + <li class="list-head"><a href="goodies.html#goodies">Goodies</a> + <ul class="no-enumerator"> + <li class="item"><a href="goodies.html#goodies-macros">Macro list</a> + </li> + </ul></li> + <li class="list-head"><a href="inlines.html#top">Inline escapes</a> + <ul class="no-enumerator"> + <li class="item"><a href="inlines.html#index-inlines">List of inline escapes</a> + </li> + </ul></li> + <li class="list-head"><a href="color.html">Coloured text</a> + <ul class="no-enumerator"> + <li class="item"><a href="color.html#index-color">Macro list</a></li> + </ul></li> +</ul> +</div> +</div> + +<div class="rule-medium"><hr/></div> + +<h2 id="typesetting-intro" class="docs">Introduction</h2> + +<p> +Mom’s typesetting macros provide access to groff’s +typesetting capabilities. Aside from controlling basic type +parameters (family, font, line length, point size, leading), +mom’s macros fine-tune wordspacing, letterspacing, kerning, +hyphenation, and so on. In addition, mom has true typesetting tabs, +string tabs, multiple indent styles, line padding, and a batch of +other goodies. +</p> + +<p> +In some cases, mom’s typesetting macros merely imitate groff +primitives. In others, they approach typesetting concerns in +conceptually new ways (for groff, at least). This should present +no problem for newcomers to groff who are learning mom. Old groff +hands should be careful. Just because it looks like a duck and +walks like a duck does not, in this instance, mean that it is a +duck. When using mom, stay away from groff primitives if mom +provides a macro that accomplishes the same thing. +</p> + +<p> +Mom’s typesetting macros can be used as a standalone package, +independent of the +<a href="docprocessing.html#top">document processing macros</a>. +With them, you can typeset on-the-fly. Book covers, your best +friend’s résumé, a poster for a lost dog—none of these +requires structured document processing (page headers, paragraphs, +headings, footnotes, etc). What they do demand is precise control over +every element on the page. The typesetting macros give you that +control. +</p> + +<div class="rule-short" style="margin-bottom: 24px;"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="page-setup-intro" class="macro-group">Paper and page setup: paper size & page margins</h2> + +<p> +The page setup macros establish the physical dimensions of your page +and the margins you want it to have. The +<a href="#paper">PAPER</a> +macro provides a shortcut for setting the page to the correct +dimensions for a number of common paper sizes. The +<a href="#page">PAGE</a> +macro provides a convenient way of setting the page dimensions and +some or all of the page margins with a single macro. +</p> + +<div class="box-notes"> +<h3 id="page-setup-note" class="docs notes">Important note on page dimensions and papersize</h3> + +<p style="margin-top: .5em;"> +When mom files are processed with +<a href="using.html#pdfmom" style="font-weight: bold">pdfmom</a>, +which is recommended (see +<a href="http://www.schaffter.ca/mom/pdf/mom-pdf.pdf"><span class="book-title">Producing PDFs with groff and mom</span></a>), +page dimensions are automatically passed to groff, and you +don’t have to worry about them. +</p> + +<p> +Mom documents processed directly with <strong>groff</strong>, or with +<strong>pdfroff</strong>, or with <strong>pdfmom ‑Tps</strong>, require +that the papersize be given on the command line as well if the +papersize is different from the default on your system. You can +verify—or change—the default papersize by inspecting the +files +<br/> +<span class="pre-in-pp"> + <path to groff>/font/devps/DESC +</span> +and +<br/> +<span class="pre-in-pp"> + <path to groff>/font/devpdf/DESC +</span> +(See <strong>man papersize</strong> for list of valid papersize +names, as well as for instructions on how to enter a non-standard +size.) +</p> + +<p> +If you occasionally need to print on sheets that do not +conform to your default papersize, you must, in addition +to setting the page dimensions in your mom file, pass the +<kbd>-P-p<papersize></kbd> option to <strong>groff</strong>, +<strong>pdfroff</strong>, or <strong>pdfmom -Tps</strong>. +</p> + +<p> +For example, suppose your routine papersize is “letter”, +and you need to print something on a legal-sized sheet. After +telling mom about the legal-size sheet (with either +<a href="#pagelength">PAGELENGTH</a> +and +<a href="#pagewidth">PAGEWIDTH</a> +or +<a href="#paper">PAPER</a>, +or +<a href="#page">PAGE</a>), +you must include <kbd>-P-p<papersize></kbd> on whichever +command line you use, e.g. +<br/> +<span class="pre-in-pp"> + pdfmom -Tps -mom -P-plegal +</span> +Remember, though, that +<a href="using.html#pdfmom" style="font-weight: bold">pdfmom</a>, +with no <kbd>-Tps</kbd> option, is smart enough to know the +papersize from the dimensions provided in your mom file. +</p> + +<p class="tip-bottom"> +Consult <kbd>man groff</kbd>, <kbd>man grops</kbd> and <kbd>man +groff_font</kbd> for additional information concerning papersizes, +as well as information on printing in “landscape” +orientation. +</p> +</div> + +<div class="macro-list-container"> +<h3 id="index-page-setup" class="macro-list">Paper and page setup macros</h3> + +<ul class="macro-list"> + <li><a href="#pagewidth">PAGEWIDTH</a> – page width</li> + <li><a href="#pagelength">PAGELENGTH</a> – page length</li> + <li><a href="#paper">PAPER</a> – common paper sizes</li> + <li><a href="#l-margin">L_MARGIN</a> – left margin</li> + <li><a href="#r-margin">R_MARGIN</a> – right margin</li> + <li><a href="#t-margin">T_MARGIN</a> – top margin</li> + <li><a href="#b-margin">B_MARGIN</a> – bottom margin</li> + <li><a href="#page">PAGE</a> – page dimensions and margins all in one fell swoop</li> + <li><a href="#newpage">NEWPAGE</a> – start a new page</li> +</ul> +</div> + +<!-- -PAGEWIDTH- --> + +<div class="macro-id-overline"> +<h3 id="pagewidth" class="macro-id">Page width</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>PAGEWIDTH</b> <kbd class="macro-args"><width of printer sheet></kbd> +</div> +<p class="requires"> +• Requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +The argument to PAGEWIDTH is the width of your printer sheet. +PAGEWIDTH requires a unit of measure. Decimal fractions are +allowed. Hence, to tell mom that the width of your printer sheet is +8-1/2 inches, you enter +<br/> +<span class="pre-in-pp"> + .PAGEWIDTH 8.5i +</span> +Please read the +<a href="#page-setup-note">Important note on page dimensions and papersize</a> +for information on ensuring groff respects your PAGEWIDTH. +</p> + +<!-- -PAGELENGTH- --> + +<div class="macro-id-overline"> +<h3 id="pagelength" class="macro-id">Page length</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>PAGELENGTH</b> <kbd class="macro-args"><length of printer sheet></kbd> +</div> +<p class="requires"> +• Requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +PAGELENGTH tells mom how long your printer sheet is. It works just +like PAGEWIDTH. Therefore, to tell mom your printer sheet is 11 +inches long, you enter +<br/> +<span class="pre-in-pp"> + .PAGELENGTH 11i +</span> +Please read the +<a href="#page-setup-note">Important note on page dimensions and papersize</a> +for information on ensuring groff respects your PAGELENGTH. +</p> + +<!-- -PAPER- --> + +<div class="macro-id-overline"> +<h3 id="paper" class="macro-id">Paper</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>PAPER</b> <kbd class="macro-args"><paper type> [ LANDSCAPE ]</kbd> +</div> + +<p> +PAPER provides a convenient way to set the dimensions for some +common printer sheet sizes. <kbd><paper type></kbd> can +be one of: +<br/> +<span class="pre-in-pp"> + LETTER EXECUTIVE + LEGAL 10x14 + STATEMENT A3 + TABLOID A4 + LEDGER A5 + FOLIO B4 + QUARTO B5 +</span> +Say, for example, you have A4-sized sheets in your printer. It’s +shorter (and easier) to enter +<br/> +<span class="pre-in-pp"> + .PAPER A4 +</span> +than to remember the correct dimensions and enter +<br/> +<span class="pre-in-pp"> + .PAGEWIDTH 595p + .PAGELENGTH 842p +</span> +If you’d like landscape orientation for your paper type, +pass PAPER the <kbd>LANDSCAPE</kbd> argument. +</p> + +<p> +Please read the +<a href="#page-setup-note">Important note on page dimensions and papersize</a> +for information on ensuring groff respects your PAPER size. +</p> + +<div class="box-important"> +<p class="tip"> +<span class="important">Important:</span> If you need PAPER, +it should always be placed at the very top of your file. +</p> +</div> + +<!-- -L_MARGIN- --> + +<div class="macro-id-overline"> +<h3 id="l-margin" class="macro-id">Left margin</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>L_MARGIN</b> <kbd class="macro-args"><left margin></kbd> +</div> +<p class="requires"> +• Requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +L_MARGIN establishes the distance from the left edge of the printer +sheet at which you want your type to start. +<a href="#il">Left indents</a> +and +<a href="#tabs">tabs</a> +are calculated from the value you pass to L_MARGIN. +If you use the macros +<a href="#pagewidth">PAGEWIDTH</a> +or +<a href="#paper">PAPER</a> +without setting L_MARGIN, mom automatically sets the left margin to +1 inch. +</p> + +<p> +A unit of measure is required and decimal fractions are allowed. +Therefore, to set the left margin at 3 picas (1/2 inch), you’d +enter either +<br/> +<span class="pre-in-pp"> + .L_MARGIN 3P +</span> +or +<span class="pre-in-pp"> + .L_MARGIN .5i +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> L_MARGIN behaves in a special way +when you’re using the +<a href="docprocessing.html#docprocessing">document processing macros</a>. +See +<a href="docprocessing.html#behaviour">Typesetting macros during document processing</a> +for an explanation. +</p> +</div> + +<!-- -R_MARGIN- --> + +<div class="macro-id-overline"> +<h3 id="r-margin" class="macro-id">Right margin</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>R_MARGIN</b> <kbd class="macro-args"><right margin></kbd> +</div> +<p class="requires"> +• Requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<div class="box-important"> +<p class="tip"> +<span class="important">IMPORTANT:</span> R_MARGIN, if used, must +come after +<a href="#paper">PAPER</a>, +<a href="#pagewidth">PAGEWIDTH</a>, +<a href="#l-margin">L_MARGIN</a> +and/or +<a href="#page">PAGE</a> +(if a right margin isn’t given to PAGE). The reason is that +R_MARGIN calculates line length from the overall page dimensions and +the left margin. Mom can’t make the calculation if +she doesn’t know the page width and the left margin. +</p> +</div> + +<p> +R_MARGIN establishes the amount of space you want between the end +of typeset lines and the right hand edge of the printer sheet. In +other words, it sets the line length. R_MARGIN requires a unit of +measure. Decimal fractions are allowed. +</p> + +<p> +The line length macro +(<a href="#linelength">LL</a>) +can be used in place of R_MARGIN. In either case, the last one +invoked sets the line length. The choice of which to use is up +to you. In some instances, you may find it easier to think of a +section of type as having a right margin. In others, giving a line +length may make more sense. +</p> + +<p> +For example, if you’re setting a page of type you know should +have 6-pica margins left and right, it makes sense to enter a left +and right margin, like this: +<br/> +<span class="pre-in-pp"> + .L_MARGIN 6P + .R_MARGIN 6P +</span> +That way, you don’t have to worry about calculating the line +length. On the other hand, if you know the line length for a patch +of type should be 17 picas and 3 points, entering the line length +with LL is much easier than calculating the right margin, e.g. +<br/> +<span class="pre-in-pp"> + .LL 17P+3p +</span> +If you use the macros +<a href="#page">PAGE</a>, +<a href="#pagewidth">PAGEWIDTH</a> +or +<a href="#paper">PAPER</a> +without invoking <kbd>.R_MARGIN</kbd> afterwards, mom automatically +sets R_MARGIN to 1 inch. If you set a line length after these +macros (with +<a href="#linelength">LL</a>), +the line length calculated by R_MARGIN is, of course, overridden. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> R_MARGIN behaves in a special way when you’re +using the +<a href="docprocessing.html#docprocessing">document processing macros</a>. +See +<a href="docprocessing.html#behaviour">Typesetting macros during document processing</a> +for an explanation. +</p> +</div> + +<!-- -T_MARGIN- --> + +<div class="macro-id-overline"> +<h3 id="t-margin" class="macro-id">Top margin</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>T_MARGIN</b> <kbd class="macro-args"><top margin></kbd> +</div> +<p class="requires"> +• Requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +T_MARGIN establishes the distance from the top of the printer +sheet at which you want your type to start. It requires a unit of +measure, and decimal fractions are allowed. To set a top margin of +2-1/2 centimetres, you’d enter +<br/> +<span class="pre-in-pp"> + .T_MARGIN 2.5c +</span> +T_MARGIN calculates the vertical position of the first line of type +on a page by treating the top edge of the printer sheet as a +<a href="definitions.html#baseline">baseline</a>. Therefore, +<br/> +<span class="pre-in-pp"> + .T_MARGIN 1.5i +</span> +puts the baseline of the first line of type 1-1/2 inches beneath the +top of the page. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> T_MARGIN means something slightly +different when you’re using the +<a href="docprocessing.html#docprocessing">document processing macros</a>. +See +<a href="docprocessing.html#tb-margins">Top and bottom margins in document processing</a> +for an explanation. +</p> +</div> + +<div class="box-important"> +<p class="tip"> +<span class="important">IMPORTANT:</span> T_MARGIN does two +things: it establishes the top margin for pages that come after +it <i>and</i> it moves to that position on the current page. +Therefore, T_MARGIN should only be used at the top of a file (prior +to entering text) or after +<a href="#newpage">NEWPAGE</a>, +like this: +<br/> +<span class="pre-in-pp" style="margin-bottom: -1em;"> + .NEWPAGE + .T_MARGIN 6P + <text> +</span> +</p> +</div> + +<!-- -B_MARGIN- --> + +<div class="macro-id-overline"> +<h3 id="b-margin" class="macro-id">Bottom margin</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>B_MARGIN</b> <kbd class="macro-args"><bottom margin></kbd> +</div> +<p class="requires"> +• Requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +B_MARGIN sets a nominal position at the bottom of the page beyond +which you don’t want your type to go. When the bottom margin +is reached, mom starts a new page. B_MARGIN requires a unit of +measure. Decimal fractions are allowed. To set a nominal bottom +margin of 3/4 inch, enter +<br/> +<span class="pre-in-pp"> + .B_MARGIN .75i +</span> +Obviously, if you haven’t spaced the type on your pages so +that the last lines fall perfectly at the bottom margin, the margin +will vary from page to page. Usually, but not always, the last line +of type that fits on a page before the bottom margin causes mom to +start a new page. +</p> + +<p> +Occasionally, owing to a peculiarity in groff, an extra line will +fall below the nominal bottom margin. If you’re using the +<a href="docprocessing.html#docprocessing">document processing macros</a>, +this is unlikely to happen; the document processing macros are very +hard-nosed about aligning bottom margins. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> The meaning of B_MARGIN is slightly +different when you’re using the document processing macros. +See +<a href="docprocessing.html#tb-margins">Top and bottom margins in document processing</a> +for an explanation. +</p> +</div> + +<!-- -PAGE- --> + +<div class="macro-id-overline"> +<h3 id="page" class="macro-id">Page</h3> +</div> + +<div class="box-macro-args" style="overflow: auto;"> +Macro: <b>PAGE</b> <kbd class="macro-args"><width> [ <length> [ <lm> [ <rm> [ <tm> [ <bm> ] ] ] ] ]</kbd> +</div> +<p class="requires"> +• All arguments require a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<div class="box-important"> +<p class="tip"> +<span class="important">IMPORTANT:</span> If you’re using the +<a href="docprocessing.html#docprocessing">document processing macros</a>, +PAGE must come after +<a href="docprocessing.html#printstyle">PRINTSTYLE</a>. +Otherwise, it should go at the top of a document, prior to any +text. And remember, when you’re using the document processing +macros, top margin and bottom margin mean something slightly +different than when you’re using just the typesetting macros +(see +<a href="docprocessing.html#tb-margins">Top and bottom margins in document processing</a>). +</p> +</div> + +<p> +PAGE lets you establish paper dimensions and page margins with a +single macro. The only required argument is page width. The rest +are optional, but they must appear in order and you can’t +skip over any. <kbd><lm>, <rm>, <tm></kbd>, and +<kbd><bm></kbd> refer to the left, right, top and bottom +margins respectively. +</p> + +<p> +Assuming your page dimensions are 11 inches by 17 inches, and +that’s all you want to set, enter +<br/> +<span class="pre-in-pp"> + .PAGE 11i 17i +</span> +If you want to set the left margin as well, say, at 1 inch, PAGE +would look like this: +<br/> +<span class="pre-in-pp"> + .PAGE 11i 17i 1i +</span> +Now suppose you also want to set the top margin, say, at 1-1/2 +inches. <tm> comes after <rm> in the optional arguments, +but you can’t skip over any arguments, therefore to set the +top margin, you must also give a right margin. The PAGE macro would +look like this: +<br/> +<span class="pre-in-pp"> + .PAGE 11i 17i 1i 1i 1.5i + | | + required right---+ +---top margin + margin +</span> +Clearly, PAGE is best used when you want a convenient way to tell +mom just the dimensions of your printer sheet (width and length), or +when you want to tell her everything about the page (dimensions and +all the margins), for example +<br/> +<span class="pre-in-pp"> + .PAGE 8.5i 11i 45p 45p 45p 45p +</span> +This sets up an 8-1/2 by 11 inch page with margins of 45 points +(5/8-inch) all around. +</p> + +<p> +Additionally, if you are not using the +<a href="docprecessing.html">document processing macros</a> +and invoke PAGE with a top margin argument, any macro you invoke +after PAGE will likely move the +<a href="definitions.html#baseline">baseline</a> +of the first line of text down by one linespace. To compensate, do +<br/> +<span class="pre-in-pp"> + .RLD 1v +</span> +immediately before entering any text. +</p> + +<p> +Please read the +<a href="#page-setup-note">Important note on page dimensions and papersize</a> +for information on ensuring groff respects your PAGE dimensions and +margins. +</p> + +<!-- -NEWPAGE- --> + +<div class="macro-id-overline"> +<h3 id="newpage" class="macro-id">Start a new page</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>NEWPAGE</b> +</div> + +<p> +Whenever you want to start a new page, use NEWPAGE, by itself with +no argument. Mom will finish up processing the current page and move +you to the top of a new one (subject to the top margin set with +<a href="#t-margin">T_MARGIN</a>). +</p> + +<div class="rule-short" style="margin-bottom: 24px;"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="basic-params-intro" class="macro-group">Basic typesetting parameters</h2> + +<p> +The basic typesetting parameter macros deal with fundamental +requirements for setting type: family, font, point size, leading, +and line length. +</p> + +<p> +If you’re using the typesetting macros only, the arguments +passed to the basic parameter macros remain in effect until +you change them. The document processing macros handle things +differently. See +<a href="docprocessing.html#behaviour">Typesetting macros during document processing</a> +for an explanation. +</p> + +<div id="index-basic" class="macro-list-container"> +<h3 class="macro-list">Basic parameter macros</h3> +<ul class="macro-list"> + <li><a href="#family">FAMILY</a> – type family</li> + <li><a href="#font">FT</a> – font</li> + <li><a href="#fallback-font">FALLBACK_FONT</a> – for invalid fonts</li> + <li><a href="#ps">PT_SIZE</a> – point size of type</li> + <li><a href="#leading">LS</a> – line spacing/leading</li> + <li><a href="#autolead">AUTOLEAD</a> – automatic line spacing</li> + <li><a href="#linelength">LL</a> – line length</li> +</ul> +</div> + +<!-- -FAMILY- --> + +<div class="macro-id-overline"> +<h3 id="family" class="macro-id">Type family</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>FAMILY</b> <kbd class="macro-args"><family></kbd> +</div> +<p class="alias"> +<i>Alias:</i> <b>FAM</b> +</p> + +<p> +FAMILY takes one argument: the name of the +<a href="definitions.html#family">family</a> +you want. Groff comes with a small set of basic families, each +identified by a 1-, 2-or 3-letter mnemonic. The standard families +are: +<br/> +<span class="pre-in-pp"> + A = Avant Garde + BM = Bookman + H = Helvetica + HN = Helvetica Narrow + N = New Century Schoolbook + P = Palatino + T = Times Roman + ZCM = Zapf Chancery +</span> +The argument you pass to FAMILY is the identifier at left, above. +For example, if you want Helvetica, enter +<br/> +<span class="pre-in-pp"> + .FAMILY H +</span> +</p> + +<div class="box-tip" style="margin-top: -1em;"> +<p class="tip-top"> +<span class="note">Note:</span> The font macro +(<a href="#font">FT</a>) +lets you specify both the type family and the desired font with +a single macro. While this saves a few keystrokes, I recommend +using FAMILY for family, and FT for font, except where doing +so is genuinely inconvenient. <kbd>ZCM</kbd>, for example, +only exists in one style: Italic (<kbd>I</kbd>). Therefore, +<kbd>.FT ZCMI</kbd> makes more sense than setting the family to +<kbd>ZCM</kbd>, then setting the font to <kbd>I</kbd>. +</p> + +<p> +Furthermore, if you need to access a character from groff's Zapf +Dingbats font directly, use <kbd>.FT ZD</kbd> or the +<a href="definitions.html#inlines">inline escape</a> +<kbd>\f[ZD]</kbd>. Commonly-used dingbats are +available without changing to the ZD font by using groff's +pre-defined character escapes, e.g. <kbd>\[rh]</kbd> for a pointing +right hand; see <kbd>man groff_char</kbd> for a complete list. +Dingbats that have not been pre-defined must be accessed with the +<kbd>\N</kbd> escape. For example, <kbd>\f[ZD]\N'37'</kbd> prints +the (undefined) telephone dingbat. +</p> + +<p id="fam-add-note" class="tip-bottom"> +<span class="additional-note">Additional note:</span> +If you are running a version of groff lower than 1.19.2, you must +follow all FAMILY requests with a FT request, otherwise mom will set +all type up to the next FT request in the +<a href="#fallback-font">fallback font</a>. +</p> +</div> + +<p style="margin-top: -.5em;"> +If you are running a version of groff greater than or +equal to 1.19.2, when you invoke the FAMILY macro, mom +“remembers” the font style (Roman, Italic, etc) +currently in use (if the font style exists in the new family) and +will continue to use the same font style in the new family. For +example: +<br/> +<span class="pre-in-pp"> + .FAMILY BM \" Bookman family + .FT I \" Medium Italic + <some text> \" Bookman Medium Italic + .FAMILY H \" Helvetica family + <more text> \" Helvetica Medium Italic +</span> +However, if the font style does not exist in the new family, mom +will set all subsequent type in the +<a href="#fallback-font">fallback font</a> +(by default, Courier Medium Roman) until she encounters a +<a href="#font">FT</a> +request that’s valid for the family. For example, assuming +you don’t have the font “Medium Condensed Roman” +(mom extension “CD”) in the Helvetica family: +<br/> +<span class="pre-in-pp"> + .FAMILY UN \" Univers family + .FT CD \" Medium Condensed + <some text> \" Univers Medium Condensed + .FAMILY H \" Helvetica family + <more text> \" Courier Medium Roman! +</span> +In the above example, you must follow +<kbd>.FAMILY H</kbd> with a FT request +that’s valid for Helvetica. +</p> + +<p> +Please see the Appendices, +<a href="appendices.html#fonts">Adding fonts to groff</a>, +for information on adding fonts and families to groff, as well as +to see a list of the extensions mom provides to groff’s basic +<b>R</b>, <b>I</b>, <b>B</b>, <b>BI</b> styles. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="tip">Suggestion:</span> When adding +families to groff, I recommend following the established standard +for the naming families and fonts. For example, if you add the +Garamond family, name the font files +<br/> +<span class="pre-in-pp"> + GARAMONDR + GARAMONDI + GARAMONDB + GARAMONDBI +</span> +GARAMOND then becomes a valid family name you can pass to FAMILY. +(You could, of course, shorten GARAMOND to just G, or GD.) <b>R</b>, +<b>I</b>, <b>B</b>, and <b>BI</b> after GARAMOND are the roman, +italic, bold and bold-italic fonts respectively. +</p> +</div> + +<!-- -FT- --> + +<div class="macro-id-overline"> +<h3 id="font" class="macro-id">FT</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>FT</b> <kbd class="macro-args">R | I | B | BI | <any other valid font style></kbd> +</div> +<p class="alias"> +<i>Alias:</i> <b>FONT</b> +</p> + +<p> +By default, groff permits FT to take one of four possible arguments +specifying the desired font: +<br/> +<span class="pre-in-pp"> + R = (Medium) Roman + I = (Medium) Italic + B = Bold (Roman) + BI = Bold Italic +</span> +For example, if your +<a href="definitions.html#family">family</a> +is Helvetica, entering +<br/> +<span class="pre-in-pp"> + .FT B +</span> +will give you the Helvetica bold +<a href="definitions.html#font">font</a>. +If your family were Palatino, you’d get the Palatino bold +font. +</p> + +<p> +Mom considerably extends the range of arguments you can pass to FT, +making it more convenient to add and access fonts of differing +<a href="definitions.html#weight">weights</a> +and +<a href="definitions.html#shape">shapes</a> +within the same family. Have a look +<a href="appendices.html#style-extensions">here</a> +for a list of the weight/style arguments mom allows. Be aware, +though, that you must have the fonts, correctly installed and named, +in order to use the arguments. (See +<a href="appendices.html#fonts">Adding fonts to groff</a> +for instructions and information.) Please also read the +<a href="#fam-add-note">Additional note</a> +found in the description of the FAMILY macro. +</p> + +<p> +How mom reacts to an invalid argument to FT depends on which version +of groff you’re using. If your groff version is greater than +or equal to 1.19.2, mom will issue a warning and, depending on how +you’ve set up the +<a href="#fallback-font">fallback font</a>, +either continue processing using the fallback font, or abort +(allowing you to correct the problem). If your groff version is +less than 1.19.2, mom will silently continue processing, using +either the fallback font or the font that was in effect prior to the +invalid FT call. +</p> + +<p> +FT will also accept, as an argument, a full family+font name. For +example, +<br/> +<span class="pre-in-pp"> + .FT HB +</span> +will set subsequent type in Helvetica Bold. However, I strongly +recommend keeping family and font separate except where doing so is +genuinely inconvenient. +</p> + +<p> +For inline control of fonts, see +<a href="inlines.html#inline-fonts-mom">Inline Escapes, font control</a>. +</p> + + +<!-- -FALLBACK_FONT- --> + +<div class="macro-id-overline"> +<h3 id="fallback-font" class="macro-id">Fallback font</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>FALLBACK_FONT</b> <kbd class="macro-args"><fallback font> [ ABORT | WARN ]</kbd> +</div> + +<p> +In the event that you pass an invalid argument to +<a href="#font">.FAMILY</a> +(i.e. a non-existent family), mom, by default, uses the fallback +font, Courier Medium Roman (CR), in order to continue processing +your file. +</p> + +<p> +If you’d prefer another fallback font, pass FALLBACK_FONT the +full family+font name of the font you’d like. For example, if +you’d rather the fallback font were Times Roman Medium Roman, +<br/> +<span class="pre-in-pp"> + .FALLBACK_FONT TR +</span> +would do the trick. +</p> + +<p> +Mom issues a warning whenever a font style set with +<a href="#font">FT</a> +does not exist, either because you haven’t registered the +style (see +<a href="appendices.html#register-style">here</a> +for instructions on registering styles), or because the font style +does not exist in the current family set with +<a href="#family">FAMILY</a>. +By default, mom then aborts, which allows you to correct the +problem. +</p> + +<p> +If you’d prefer that mom not abort on non-existent fonts, +but rather continue processing using a fallback font, you can pass +FALLBACK_FONT the argument <kbd>WARN</kbd>, either by itself, or in +conjunction with your chosen fallback font. +</p> + +<p> +Some examples of invoking FALLBACK_FONT: +</p> + +<ul class="no-enumerator" style="margin-left: -1em;"> +<li style="margin-top: -.5em;"> +<kbd>.FALLBACK_FONT WARN</kbd> +<br/> +mom will issue a warning whenever you try to access a non-existent +font but will continue processing your file with the default +fallback font, Courier Medium Roman. +<br/> +</li> +<li style="margin-top: .5em;"> +<kbd>.FALLBACK_FONT TR WARN</kbd> +<br/> +mom will issue a warning whenever you try to access a non-existent +font but will continue processing your file with a fallback font of +Times Roman Medium Roman; additionally, “TR” will be +the fallback font whenever you try to access a family that does not +exist. +</li> +<li style="margin-top: .5em;"> +<kbd>.FALLBACK_FONT TR ABORT</kbd> +<br/> +mom will abort whenever you try to access a non-existent font, and +will use the fallback font “TR” whenever you try to +access a family that does not exist. +</li> +</ul> + +<p> +If, for some reason, you want to revert to ABORT, just enter +<kbd>.FALLBACK_FONT ABORT</kbd> and mom will once again abort +on font errors. +</p> + +<!-- -PT_SIZE- --> + +<div class="macro-id-overline"> +<h3 id="ps" class="macro-id">Point size of type</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>PT_SIZE</b> <kbd class="macro-args"><size of type in points></kbd> +</div> +<p class="requires"> +• Does not require a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +PT_SIZE (Point Size) takes one argument: the size of type in points. +Unlike most other macros that establish the size or measure of +something, PT_SIZE does not require that you supply a unit of +measure since it’s a near universal convention that type size +is measured in points. Therefore, to change the type size to, say, +11 points, enter +<br/> +<span class="pre-in-pp"> + .PT_SIZE 11 +</span> +Point sizes may be fractional (e.g. 10.25 or 12.5). +</p> + +<p> +If you invoke PT_SIZE without an argument, it reverts to its former +value. For example, if your point size is 10 and you change it to +12 with <kbd>.PT_SIZE 12</kbd>, entering <kbd>.PT_SIZE</kbd> +(i.e. without an argument) resets the point size to 10. +</p> + +<p> +You can prepend a plus or a minus sign to the argument to PT_SIZE, +in which case the point size will be changed by + or - the original +value. For example, if the point size is 12, and you want 14, you +can do +<br/> +<span class="pre-in-pp"> + .PT_SIZE +2 +</span> +then later reset it to 12 with +<span class="pre-in-pp"> + .PT_SIZE -2 +</span> +or, more simply, just +<span class="pre-in-pp"> + .PT_SIZE +</span> +The size of type can also be changed inline. See +<a href="inlines.html#inline-size-mom">Inline Escapes, changing point size</a>. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> It is unfortunate that the +<kbd>pic</kbd> preprocessor has already taken the name, +<kbd>PS</kbd>, and thus mom’s macro for setting point +sizes can’t use it. However, if you aren’t using +<kbd>pic</kbd>, you might want to +<a href="goodies.html#alias">alias</a> +PT_SIZE as PS, since there’d be no conflict. For example +<br/> +<span class="pre-in-pp"> + .ALIAS PS PT_SIZE +</span> +would allow you to set point sizes with <kbd>.PS</kbd>. +</p> +</div> + +<!-- -LS- --> + +<div class="macro-id-overline"> +<h3 id="leading" class="macro-id">Line spacing / leading</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>LS</b> <kbd class="macro-args"><distance between lines></kbd> +</div> +<p class="requires"> +• Does not require a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +LS (Line Space) takes one argument: the distance you want, typically +in points, from baseline to baseline of type. The argument may be +fractional (e.g. 12.25 or 14.5). Like PT_SIZE, LS does not require +a unit of measure, since +<a href="definitions.html#leading">leading</a> +is most often given in points. Therefore, to set the linespace to +14 points, you would enter +<br/> +<span class="pre-in-pp"> + .LS 14 +</span> +However, if you wish, you may specify a unit of measure by appending +it directly to the argument passed to LS. For example, if you want +a linespace of 1/4 of an inch, enter +<br/> +<span class="pre-in-pp"> + .LS .25i +</span> +You can prepend a plus or a minus sign to the argument to LS, in +which case the line spacing will be changed by + or - the original +value. For example, if the line spacing is 14 points, and you want +17 points, you can do +<br/> +<span class="pre-in-pp"> + .LS +3 +</span> +then later reset it to 14 points with +<br/> +<span class="pre-in-pp"> + .LS -3 +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="experts">Experts:</span> LS should not be confused with +the groff primitive <kbd>.ls</kbd>. LS acts like +<kbd>.vs</kbd>. mom does not provide a macro analogous to +<kbd>.ls</kbd>. +</p> +</div> + +<!-- -AUTOLEAD- --> + +<div class="macro-id-overline"> +<h3 id="autolead" class="macro-id">Automatic line spacing</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>AUTOLEAD</b> <kbd class="macro-args"><amount of automatic leading> [FACTOR]</kbd> +</div> +<p class="requires"> +• Does not require a <a href="definitions.html#unitofmeasure">unit of measure</a> +<br/> +(Please see +<a href="docprocessing.html#autolead">here</a> +for information on using +<span style="font-style: normal">AUTOLEAD</span> during document +processing.) +</p> + +<p> +Without the <kbd>FACTOR</kbd> argument, AUTOLEAD calculates the +linespace for you by adding its argument to the current point size +of type. All subsequent +<a href="#ps">PT_SIZE</a> +requests automatically update the linespacing by the autolead amount. +</p> + +<p> +Used in this way, AUTOLEAD does not require a unit of measure; +points is assumed. However, you may use an alternate unit of +measure by appending it to the argument. The argument may be a +decimal fraction (e.g. .5 or 2.75). +</p> + +<p> +As an example, if your current point size of type is 12, entering +<br/> +<span class="pre-in-pp"> + .AUTOLEAD 2 +</span> +changes the linespace to 14 points, regardless any linespacing +already in effect. From here on, every change to the size of type +(with PT_SIZE, not +<a href="definitions.html#inlines">inline</a>) +changes the linespace as well. If you decrease the type size to 9 +points, the leading decreases to 11 points. If you increase the +type size to 16 points, the leading increases to 18 points. +</p> + +<p> +Automatic updating of the linespacing continues until you enter a +“manual” line space value with +<a href="#leading">LS</a>. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="experts">Experts:</span> Please note that the groff +<a href="definitions.html#primitives">primitives</a>, +<kbd>.vs</kbd> and <kbd>.ps</kbd>, are unaffected by, and have no +effect, on AUTOLEAD. +</p> +</div> + +<p> +If you give AUTOLEAD the optional FACTOR argument, AUTOLEAD +calculates the line space as a factor of the +<a href="definitions.html#numericargument">numeric argument</a> +you gave AUTOLEAD. For example, if your point size is 12, +<br/> +<span class="pre-in-pp"> + .AUTOLEAD 1.125 FACTOR +</span> +sets the leading at 13.5 points. If you change the point size to +14, the leading automatically changes to 15.75 (14 x 1.125). +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> There’s no need to prepend a +plus sign +(<kbd>+</kbd>) +to AUTOLEAD’s argument, although you may do so if you wish. +</p> +</div> + +<!-- -LL- --> + +<div class="macro-id-overline"> +<h3 id="linelength" class="macro-id">Line length</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>LL</b> <kbd class="macro-args"><line length></kbd> +</div> +<p class="requires"> +• Requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +LL (Line Length) takes one argument: the distance from the left +margin of the page to the maximum allowable point on the right at +which groff should place type. The line length, in other words, as +the macro suggests. +</p> + +<p> +LL requires a unit of measure. Therefore, to set the line length to +39 picas, you would enter +<br/> +<span class="pre-in-pp"> + .LL 39P +</span> +As with other macros that require a unit of measure, the argument to +LL may be fractional. For example, +<br/> +<span class="pre-in-pp"> + .LL 4.5i +</span> +sets the line length to 4-1/2 inches. +</p> + +<p> +Additionally, you may express a new line length relative to the +current line length by prepending a plus or minus sign to the +argument. Thus, if you wanted to increase the line length by 3 +<a href="definitions.html#picaspoints">points</a>, you could +do +<br/> +<span class="pre-in-pp"> + .LL +3p +</span> +This is especially handy when you want to “hang” +punctuation outside the right margin since you can pass +groff’s +<a href="inlines.html#inline-stringwidth-groff"><kbd>\w</kbd></a> +escape as the argument to LL, like this: +<br/> +<span class="pre-in-pp"> + .LL +\w'.'u +</span> +The above example increases the current line length by the width of +a period. Notice that you must append the +<a href="definitions.html#unitofmeasure">unit of measure</a>, +<b>u</b>, to the escape since LL requires a unit of measure. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> The right margin macro +<a href="#r-margin">(R_MARGIN)</a> +can also be used to set line length. +</p> +</div> + +<div class="rule-short"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="justification-intro" class="macro-group">Justification and quadding/breaking and joining lines</h2> + +<p> +The justification and quadding macros deal with how type aligns +along the left and right margins. In a nutshell, type either aligns +at the left margin, at the right margin, at both margins, or at +neither margin (centred). +</p> + +<p> +These macros also determine whether or not +<a href="definitions.html#inputline">input lines</a> +are joined and +<a href="definitions.html#filled">filled</a> +during output. +</p> + +<p> +Additionally, macros that deal with how to break +<a href="definitions.html#outputline">output lines</a> +are covered in this section, as is the +<a href="definitions.html#inlines">inline escape</a> +for joining input lines. +</p> + +<p> +You may encounter some words here that are unfamiliar. Refer to +<a href="definitions.html#typesetting">Typesetting terms</a> +and +<a href="definitions.html#groff">Groff terms</a> +for an explanation. +</p> + +<div id="index-justification" class="macro-list-container"> +<h3 class="macro-list">Justification and quadding/breaking and joining lines macros</h3> +<ul class="macro-list"> + <li>Fill modes + <ul style="list-style-type: none; margin-left: -1em;"> + <li><a href="#justify">JUSTIFY</a> – set lines justified</li> + <li><a href="#quad">QUAD</a> – set filled lines flush left, right or centred</li> + </ul></li> + <li>Nofill modes + <ul style="list-style-type: none; margin-left: -1em;"> + <li><a href="#lrc">LEFT</a> – set non-filled lines flush left</li> + <li><a href="#lrc">RIGHT</a> – set non-filled lines flush right</li> + <li><a href="#lrc">CENTER</a> – set non-filled lines centred</li> + </ul></li> + <li>Breaking lines + <ul style="list-style-type: none; margin-left: -1em;"> + <li><a href="#br">BR</a> – manually break an output line</li> + <li><a href="#el">EL</a> – break a line without advancing to the next output line</li> + <li><a href="#space">SPACE</a> – break a line and add space before the next output line</li> + <li><a href="#spread">SPREAD</a> – break and force-justify an output line</li> + </ul></li> + <li>Joining input lines in <a href="definitions.html#filled">nofill mode</a> + <ul style="list-style-type: none; margin-left: -1em;"> + <li><a href="#join">\c</a> inline escape</li> + </ul></li> +</ul> +</div> + +<!-- -JUSTIFY- --> + +<div class="macro-id-overline"> +<h3 id="justify" class="macro-id">Justify lines</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>JUSTIFY</b> +</div> + +<p class="requires"> +(See +<a href="definitions.html#filled">fill mode</a> +for a definition of the difference between “fill” and +“no-fill” modes.) +</p> + +<p> +JUSTIFY doesn’t take an argument. +<a href="definitions.html#inputline">Input lines</a> +after JUSTIFY are +<a href="definitions.html#filled">filled</a> +and +<a href="definitions.html#just">justified</a> +upon output. +</p> + +<p> +To break lines and prevent them from being filled and justified, use +the +<a href="#br">BR</a> +macro. +</p> + +<!-- -QUAD- --> + +<div class="macro-id-overline"> +<h3 id="quad" class="macro-id">Quad lines left, right, or centre</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>QUAD</b> <kbd class="macro-args">L | LEFT | R | RIGHT | C | CENTER | J | JUSTIFY</kbd> +</div> + +<p class="alias" style="margin-bottom: 0;"> +<i>Alias:</i> <b>FILL</b> +</p> + +<p class="requires">(See +<a href="definitions.html#filled">fill mode</a> +for a definition of the difference between “fill” and +“no-fill” modes.) +</p> + +<p> +QUAD takes one argument: the direction in which lines should be +<a href="definitions.html#quad">quadded</a>. +<a href="definitions.html#inputline">Input lines</a> +after QUAD are +<a href="definitions.html#filled">filled</a> +upon output. +</p> + +<p> +If <kbd>L</kbd> or <kbd>LEFT</kbd>, type is set flush along the left +margin. +</p> + +<p> +If <kbd>R</kbd> or <kbd>RIGHT</kbd>, type is set flush along the +right margin. +</p> + +<p> +If <kbd>C</kbd> or <kbd>CENTER</kbd> type is set centred on the +current line length. +</p> + +<p> +<kbd>J</kbd> and <kbd>JUSTIFY</kbd> justify text, and are +included as a convenience only. Obviously, if text is +justified, it isn’t quadded. <kbd>.QUAD J</kbd> and +<kbd>.QUAD JUSTIFY</kbd> have exactly the same effect as +<a href="#justify">JUSTIFY</a>. +</p> + +<p> +To break lines and prevent them from being filled, use the +<a href="#br">BR</a> +macro. +</p> + +<!-- -LEFT, RIGHT, CENTER- --> + +<div class="macro-id-overline"> +<h3 id="lrc" class="macro-id">Set lines flush left, right or centered in no-fill mode</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>LEFT</b> +<br/> +Macro: <b>RIGHT</b> +<br/> +Macro: <b>CENTER</b> (alias CENTRE) +</div> + +<p class="requires"> +(See +<a href="definitions.html#filled">no-fill mode</a> +for a definition of the difference between “fill” and +“no-fill” modes.) +</p> + +<p> +LEFT, RIGHT, and CENTER let you enter text on a line for line basis +without having to use the +<a href="#br">BR</a> +macro after each line. Consider the following: +<br/> +<span class="pre-in-pp"> + .QUAD LEFT + So runs my dream, but what am I? + .BR + An infant crying in the night + .BR + An infant crying for the light + .BR + And with no language but a cry. + .BR +</span> +Because text after <kbd>.QUAD LEFT</kbd> is +<a href="definitions.html#filled">filled</a>, +you have to use the +<a href="#br">BR</a> +macro to prevent the lines from running together. Not only is this +annoying to type, it’s awkward to read in a text editor. Much +better to do +<br/> +<span class="pre-in-pp"> + .LEFT + So runs my dream, but what am I? + An infant crying in the night + An infant crying for the light + And with no language but a cry. +</span> +</p> + +<div class="box-important" style="margin-top: -.5em;"> +<p class="tip"> +<span class="important">IMPORTANT:</span> Because LEFT, +RIGHT, and CENTER are nofill modes, groff does not always respect the +current line length. +<a href="definitions.html#inputline">Input lines</a> +that run long may exceed it, or get broken in undesirable ways. +Therefore, when using these three macros, you should preview your +work to ensure that all lines fit as expected. +</p> +</div> + +<!-- -BR- --> + +<div class="macro-id-overline"> +<h3 id="br" class="macro-id">Manually break lines</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>BR</b> +</div> + +<p> +When using +<a href="#justify">JUSTIFY</a> +or +<a href="#quad">QUAD</a>, +BR tells mom about partial lines that you want broken (as opposed to +<a href="definitions.html#filled">filled</a>). +Any partial +<a href="definitions.html#outputline">output line</a> +that immediately precedes BR will be +<a href="definitions.html#quad">quadded</a> +in the direction of the current quad, or set flush left if text is +<a href="definitions.html#just">justified</a>. +</p> + +<p> +Most of the time, you won’t need the BR macro. In fill modes, +mom tries to be sensible about where breaks are needed. If the +nature of a macro is such that under most circumstances you’d +expect a break, mom puts it in herself. Equally, in macros where a +break isn’t normally desirable, no break occurs. This means +text files don’t get cluttered with annoying BR’s. +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="note">Note:</span> Lines of text in +<a href="definitions.html#filled">nofill mode</a> +never require a BR. Furthermore, in nofill mode, ALL macros cause a +break. If a break is not desired, use the +<a href="#join"><kbd>\c</kbd></a> +<a href="definitions.html#inlines">inline escape</a>. +</p> + +<p class="tip-bottom" style="margin-top: -1em"> +<span class="experts">Experts:</span> BR is an alias for +<kbd>.br</kbd>. You can use either, or mix +’n’ match with impunity. +</p> +</div> + +<!-- -EL- --> + +<div class="macro-id-overline"> +<h3 id="el" class="macro-id">Manually break a line without advancing on the page</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>EL</b> +</div> + +<p class="requires"> +In nofill modes +<span style="font-style: normal;"> +(<a href="#left">LEFT</a>, +<a href="#right">RIGHT</a>, +<a href="#center">CENTER</a>) +</span> +you must terminate the line input preceding +<span style="font-style: normal;">EL</span> +with the +<span style="font-style: normal;"> +<kbd>\c</kbd> inline escape. +</span> +</p> + +<p style="margin-top: -.5em"> +<i><b>Suggestion:</b> If you find remembering whether to put in the</i> +<kbd>\c</kbd> +<i>bothersome, you may prefer to use the</i> +<a href="definitions.html#inlines">inline escape</a> +<i>alternative to</i> EL, +<a href="inlines.html#b"><kbd><span class="nobr">\*[B]</span></kbd></a>, +<i>which works consistently regardless of the fill mode. +</i>EL <i>does not work after the</i> +<a href="goodies.html#pad">PAD</a> +<i>macro. See</i> +<a href="goodies.html#nobreak"><kbd>.PAD NOBREAK</kbd></a> +<i>for the way around this.</i> +</p> + +<p id="el-example"> +EL (“<span style="text-decoration: underline;">E</span>nd <span style="text-decoration: underline;">L</span>ine”) +is conceptually equivalent to the notion of a carriage return with +no linefeed. Its function is simple: it breaks a line without +advancing on the page. As an example of where you might use it, +imagine that you’re working from marked-up copy. The markup +indicates 24 points of space between two given lines, but the +prevailing line spacing is 12.5 points. You may find it more +convenient to break the first line with EL and instruct mom to +advance 24 points to the next line instead of calculating the lead +that needs to be added to 12.5 to get 24. To demonstrate: +<br/> +<span class="pre-in-pp"> + .LEFT + .LS 12.5 + A line of text.\c + .EL + .ALD 24p + The next line of text. +</span> +may be more intuitive than +<br/> +<span class="pre-in-pp"> + .LEFT + .LS 12.5 + A line of text. + .ALD 11.5p + The next line of text. +</span> +The first example has the further advantage that should you wish to +change the prevailing line space but keep the 24 points lead, you +don’t have to recalculate the extra space. +</p> + +<p> +ALD in the above examples stands for +“<span style="text-decoration: underline;">A</span>dvance +<span style="text-decoration: underline;">L</span>ea<span style="text-decoration: underline;">D</span>”, +which is covered in the section +<a href="#aldrld-intro">Vertical movements</a>. +</p> + +<!-- -SP- --> + +<div class="macro-id-overline"> +<h3 id="space" class="macro-id">Break lines and add space between</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>SPACE</b> <kbd class="macro-args">[<space to add between lines>]</kbd> +</div> +<p class="alias"> +<i>Alias:</i> <b>SP</b> +</p> + +<p> +SPACE breaks a line, just like +<a href="#br">BR</a>, +then adds space after the line. With no argument, it adds an extra +line space. If you pass it a numeric argument without supplying a +<a href="definitions.html#unitofmeasure">unit of measure</a>, +it advances that number of extra line spaces. For example: +<br/> +<span class="pre-in-pp"> + .SPACE +</span> +breaks the line then adds an extra linespace, whereas +<br/> +<span class="pre-in-pp"> + .SPACE 2 +</span> +breaks the line and adds two extra linespaces. +</p> + +<p> +If you supply a unit of measure, SPACE breaks the line and advances +the specified vertical distance, as in +<br/> +<span class="pre-in-pp"> + .SPACE 6p +</span> +which breaks the line and advances six points further. +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="tip">Tip:</span> SPACE and +<a href="#ald">ALD</a> +can be used interchangeably (<kbd>.SPACE 6p</kbd> and +<kbd>.ALD 6p</kbd> are equivalent). However, ALD without an +argument does nothing, whereas SPACE without an argument adds an +extra line space. I recommend using SPACE when you want an extra +line space (or multiple thereof), and ALD whenever you want some +other value of space after a line. +</p> + +<p> +<span class="experts">Experts:</span> SPACE is an alias of +<kbd>.sp</kbd>. You can use either, or mix ’n’ match +with impunity. Because SPACE aliases <kbd>.sp</kbd>, it may be used +with groff’s absolute position modifier +“<kbd>|</kbd>” (the pipe +character) to move to a specified vertical location on the page. +Consult +<span class="pre-in-pp"> + info groff “Manipulating Spacing” +</span> +or, more simply, +<span class="pre-in-pp"> + info groff sp. +</span> +</p> +</div> + +<!-- -SPREAD- --> + +<div class="macro-id-overline"> +<h3 id="spread" class="macro-id">Break and force justify (spread) lines</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>SPREAD</b> +</div> + +<p> +Sometimes, you need to break a line of +<a href="definitions.html#just">justified</a> +text and have it come out fully justified, not +<a href="definitions.html#quad">quadded</a> +left the way it would be with the +<a href="#br">BR</a> +macro. An example of where you’d do this would be when you +want to prevent a word at the end of a line from being hyphenated +(say, a proper name). SPREAD is the macro that lets you break the +line and have it came out fully justified. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="experts">Experts:</span> SPREAD is an alias for +<kbd>.brp</kbd> You can use either, or mix ’n’ match +with impunity. +</p> +</div> + +<!-- -JOIN- --> + +<div class="macro-id-overline"> +<h3 id="join" class="macro-id">Join input lines</h3> +</div> + +<div class="box-macro-args"> +Inline: <kbd class="macro-args">\c</kbd> +</div> + +<p> +Sometimes, especially when in one of the +<a href="definitions.html#filled">nofill modes</a>, +a macro will cause a break where you don’t want one. In order +to prevent this from happening (in other words, to join +<a href="definitions.html#inputline">input lines</a> +together, forming one +<a href="definitions.html#outputline">output line</a>), +use the groff +<a href="definitions.html#inlines">inline escape</a> +<kbd>\c</kbd> at the end of each input line to be +joined to another, like this: +<br/> +<span class="pre-in-pp"> + .LEFT + .FAMILY T + .FT R + Some lines of text to be \c + .FAMILY H + .FT B + joined \c + .FAMILY T + .FT R + together. +</span> +Upon output, the lines will be joined together to read +<br/> +<span class="pre-in-pp"> + Some lines of text to be joined together. +</span> +with the word “joined” in Helvetica bold. Note the +spaces before <kbd>\c</kbd>. Without them, the last three words of +the output line would read +<br/> +<span class="pre-in-pp"> + bejoinedtogether +</span> +Please also note that had the example been in one of the +<a href="definitions.html#filled">fill modes</a>, +there’d have been no need for the <kbd>\c</kbd>. +</p> + +<div class="box-tip"> +<p class="tip"> +<b>Addendum:</b> The example, above, is designed to demonstrate the +use of <kbd>\c</kbd>. An easier and more intuitive way +to accomplish the family/font change in the example would be with +the groff +<a href="definitions.html#inlines">inline escape</a>, +<kbd><a href="inlines.html#inline-fonts-groff">\f</a></kbd>, +like this: +<br/> +<span class="pre-in-pp" style="padding-bottom: 0px;"> + Some lines of text to be \f[HB]joined\*[PREV] together. +</span> +</p> +</div> + +<div class="rule-short" style="margin-bottom: 24px;"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="refinements-intro" class="macro-group">Typographic refinements</h2> + +<p> +The macros in this section help you tweak groff’s behaviour, +ensuring that your documents look typographically professional. +</p> + +<div id="index-refinements" class="macro-list-container"> +<h3 class="macro-list">Typographic refinements macros</h3> + +<ul class="macro-list"> + <li>Word and sentence spacing + <ul style="list-style-type: none; margin-left: -1em;"> + <li><a href="#ws">WS</a> – word spacing</li> + <li><a href="#ss">SS</a> – sentence space</li> + </ul></li> + <li>Letter spacing (track kerning) + <ul style="list-style-type: none; margin-left: -1em;"> + <li><a href="#rw">RW</a> – reduce whitespace</li> + <li><a href="#ew">EW</a> – expand whitespace</li> + <li><a href="#br-at-line-kern">BR_AT_LINE_KERN</a></li> + </ul></li> + <li>Hyphenation + <ul style="list-style-type: none; margin-left: -1em;"> + <li><a href="#hy">HY</a> – turn auto hyphenation on/off, or set specific hyphenation parameters</li> + <li><a href="#hy-set">HY_SET</a> – set all hyphenation parameters</li> + </ul></li> + <li>Automatic kerning and ligatures + <ul style="list-style-type: none; margin-left: -1em;"> + <li><a href="#kern">KERN</a> – turn automatic pairwise kerning on or off</li> + <li><a href="#ligatures">LIGATURES</a> – turn automatic generation of ligatures on or off</li> + </ul></li> +</ul> +</div> + +<!-- -WS- --> + +<div class="macro-id-overline"> +<h3 id="ws" class="macro-id">Word spacing</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>WS</b> <kbd class="macro-args"><+|-wordspace> | DEFAULT</kbd> +</div> + +<p> +WS (Word Space) increases or decreases the amount of space between +words. In +<a href="definitions.html#filled">nofill modes</a>, +or if +<a href="#quad">QUAD</a> +is in effect, the space between words is fixed. Therefore, if you +change the word spacing with WS, the change applies uniformly to the +space between every word on every line. However, when text is +<a href="definitions.html#just">justified</a>, +the space between words varies from line to line (in order to +justify the text). Consequently, the change you make with WS +represents the minimum (and ideal) space groff will try to put +between words before deciding whether to hyphenate a final word or +to stretch the word spacing. +</p> + +<p> +Word space is relative to point size. Generally, in/decreasing the +word space by a value of 1 or 2 produces a difference that in many +cases is scarcely visible. In/decreasing by a value between 3 and 5 +produces a subtle but noticeable difference. In/decreasing by a +value greater than 6 is almost always apparent. You should preview +your work to assess the effect of WS. +</p> + +<p id="ws-usage"> +WS takes as its argument a whole number preceded by a plus or minus +sign. Therefore, to decrease the word space slightly, you might +enter +<br/> +<span class="pre-in-pp"> + .WS -2 +</span> +To increase it by a noticeable amount, you might enter +<br/> +<span class="pre-in-pp"> + .WS +6 +</span> +You can reset the word spacing to its previous value by switching +the plus or minus sign, like this: +<br/> +<span class="pre-in-pp"> + .WS +2 + A line of text + .WS -2 +</span> +The <kbd>.WS -2</kbd> undoes the effect of +<kbd>.WS +2</kbd>. You can also reset WS to its groff default +by entering +<br/> +<span class="pre-in-pp"> + .WS DEFAULT +</span> +This can be particularly useful if you’ve been playing around +with plus and minus values, and can’t remember by how much to +in/decrease the word space to get it back to normal. +</p> + +<!-- -SS- --> + +<div class="macro-id-overline"> +<h3 id="ss" class="macro-id">Sentence space</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>SS</b> <kbd class="macro-args"><+sentence space> | 0 | DEFAULT</kbd> +</div> + +<p> +SS (Sentence Space) tells groff how to treat double spaces it +encounters between sentences in +<a href="definitions.html#inputline">input lines</a>. +If you use SS, input sentences with two spaces after them <i>and</i> +input sentences that fall at the end of input lines all receive a +normal word space plus an additional amount of space whose size is +determined by the + value passed as an argument to SS. Thus, +<br/> +<span class="pre-in-pp"> + .SS +2 +</span> +means that input sentences with two spaces after them receive a +normal word space PLUS the +2 value passed to SS. +</p> + +<p> +Like +<a href="#ws">WS</a>, +increasing the sentence space by a value of 1 or 2 produces a +difference that in many cases is scarcely visible. Increasing by a +value of 5 or so produces a subtle but noticeable difference (i.e., +the space between double-spaced input sentences will be slightly +but visibly greater than the space between words). Increasing by a +value greater than 10 is always apparent. You should preview your +work to assess the effect of SS. +</p> + +<p> +There’s an additional argument you can pass SS: the number +zero (without the plus sign). It’s the argument you’ll +use most often. Typeset copy should never have two spaces between +sentences, and the "zero" argument tells groff to give the extra +spaces no space at all (effectively removing them). Therefore, if +you double-space your sentences (as you should when writing in a +text editor), get in the habit of putting +<br/> +<span class="pre-in-pp"> + .SS 0 +</span> +at the top of your files. +</p> + +<p> +If you do use SS for something other than ensuring that you +don’t get unwanted sentence spaces in output copy, you can set +or reset the sentence space to the groff default (the same width +as a word space, i.e., double-spaced input sentences will appear +double-spaced on output as well) with +<br/> +<span class="pre-in-pp"> + .SS DEFAULT +</span> +If you’re using the +<a href="docprocessing.html">document processing macros</a> +and your +<a href="docprocessing.html#printstyle">PRINTSTYLE</a> +is <kbd>TYPEWRITE</kbd>, <kbd>.SS DEFAULT</kbd> is the +default, because you do want double spaces between sentences in copy +that imitates the look of a typewritten document. +</p> + +<div class="box-important"> +<p class="tip"> +<span class="important">IMPORTANT:</span> SS with an argument other +than <kbd>0</kbd> (zero) should only be used if you’re of +the old (and wise) school of typists that puts two spaces between +sentences. If you ignore this advice and use SS when you habitually +put only one space between sentences, you risk producing output +where the space between sentences is not equal. +</p> +</div> + +<!-- -HY- --> + +<div class="macro-id-overline"> +<h3 id="hy" class="macro-id">Automatic hyphenation control</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>HY</b> <kbd class="macro-args">LINES <max. number of consecutive hyphenated lines></kbd> + <br/> +Macro: <b>HY</b> <kbd class="macro-args">MARGIN <size of hyphenation margin></kbd> + <br/> +Macro: <b>HY</b> <kbd class="macro-args">SPACE <extra interword spacing to prevent hyphenation></kbd> + <br/> +Macro: <b>HY</b> <kbd class="macro-args">DEFAULT</kbd> + <br/> +Macro: <b>HY</b> <kbd class="macro-args">toggle</kbd> +</div> +<p class="alias"> +<i>Aliases:</i> <b>HYPHENATE, HYPHENATION</b> +</p> + +<p> +HY, as you can see, can be invoked with a number of arguments. In +all cases, the aliases HYPHENATE or HYPHENATION can be used in place +of HY. To aid in understanding the various arguments you can pass +to HY, I’ve broken them down into separate sections. +</p> + +<h3 class="docs">1. HY</h3> + +<p> +HY by itself (i.e. with no argument) simply turns automatic +hyphenation on. Any argument other than LINES, MARGIN, SPACE, or +DEFAULT, turns automatic hyphenation off. For example, as explained +in +<a href="intro.html#macro-args">How to read macro arguments</a>, +you could turn HY off by entering +<br/> +<span class="pre-in-pp"> + .HY OFF +</span> +or +<span class="pre-in-pp"> + .HY X +</span> +or +<span class="pre-in-pp"> + .HY END +</span> +A subsequent call to HY restores hyphenation with the parameters for +LINES, MARGIN, or SPACE that were formerly in effect (see below). +</p> + +<p> +HY observes the following default hyphenation rules: +</p> +<ul style="margin-top: -.5em; margin-left: 18px;"> + <li>Last lines (i.e. ones that will spring a trap—typically + the last line on a page) will not be hyphenated. + </li> + <li>The first and last two characters of a word are never + split off. + </li> +</ul> + +<h3 class="docs numbered">2. HY LINES</h3> + +<p> +HY LINES sets the maximum number of consecutive hyphenated lines +that will appear in output copy. 2 is a very good choice, and +you’d set it with +<br/> +<span class="pre-in-pp"> + .HY LINES 2 +</span> +By default, when you turn automatic hyphenation on, there is no +limit to the number of consecutive hyphenated lines. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> +<a href="definitions.html#discretionaryhyphen">Discretionary hyphens</a> +count when groff is figuring out how many lines to hyphenate; +explicit hyphens (i.e. the actual hyphen character) do not. +</p> +</div> + +<h3 class="docs numbered">3. HY MARGIN</h3> + +<p> +HY MARGIN sets the amount of room allowed at the end of a line +before hyphenation is tripped (e.g., if there’s only 6 points +left at the end of a line, groff won’t try to hyphenate the +next word). HY MARGIN only applies if you’re using +<a href="#quad">QUAD</a>, +and is really only useful if you’re using QUAD LEFT. +</p> + +<p> +As an example, if you don’t want groff to hyphenate words +when there’s only 18 points of space left at the end of a +left-quadded line, you’d enter +<br/> +<span class="pre-in-pp" style="margin-bottom: -1em"> + .HY MARGIN 18p +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> The numeric argument after HY +MARGIN requires a +<a href="definitions.html#unitofmeasure">unit of measure</a>. +</p> +</div> + +<h3 class="docs numbered">4. HY SPACE</h3> + +<p> +HY SPACE sets an amount of extra interword space that groff will +try to put between words on a line in order to <i>prevent</i> +hyphenation. HY SPACE applies only to +<a href="definitions.html#just">justified lines</a>. +Generally speaking, you’ll want this value to be quite small, +since too big a value will result in lines with gaping holes between +the words. A reasonable value might be half a point, or one point, +which you’d set with +<br/> +<span class="pre-in-pp"> + .HY SPACE .5p +</span> +or +<span class="pre-in-pp" style="margin-bottom: -1em"> + .HY SPACE 1p +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> The numeric argument after HY SPACE +requires a +<a href="definitions.html#unitofmeasure">unit of measure</a>. +</p> +</div> + +<h3 class="docs numbered">5. HY DEFAULT</h3> + +<p> +HY DEFAULT resets automatic hyphenation to its default behaviour, +cancelling any changes made with HY <kbd>LINES</kbd>, HY +<kbd>MARGIN</kbd>, and/or HY <kbd>SPACE</kbd>. +</p> + +<div class="box-notes"> +<h3 id="hyphenation-thoughts" class="docs notes">Thoughts on hyphenation in general</h3> + +<p style="margin-top: .5em"> +Hyphenation is a necessary evil. If it can be avoided, it +should be. If it can’t be, it should occur infrequently. +That’s the reason for the number of parameters you can set +with HY. +</p> + +<p class="tip-bottom"> +Furthermore, hyphenation in +<a href="definitions.html#rag">rag</a> +copy requires a great deal of attention. At best, it should be +avoided completely by individually adjusting the number of words +on consecutive lines to achieve a pleasing, natural-looking rag. +Since such adjustments are often too fussy for document processing, +I recommend playing around with HY MARGIN a bit if your copy looks +hyphen-heavy. +</p> +</div> + +<!-- -HY_SET- --> + +<div class="macro-id-overline"> +<h3 id="hy-set" class="macro-id">Set hyphenation parameters all at once</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>HY_SET</b> <kbd class="macro-args"><lines> [ <margin> [ <space> ] ]</kbd> +</div> + +<p class="alias"> +<i>Alias:</i> <b>HYSET</b> +</p> + +<p> +HY_SET lets you set the parameters for hyphenation +with a single macro. <kbd><lines>,</kbd> +<kbd><margin></kbd>, and +<kbd><space></kbd> correspond to the numeric +values required by <kbd>LINES</kbd>, +<kbd>MARGIN</kbd>, and <kbd>SPACE</kbd> as described +<a href="#hy">above</a>. +</p> + +<p> +To set just the maximum number of consecutive hyphenated lines, +you’d enter +<br/> +<span class="pre-in-pp"> + .HY_SET 2 +</span> +If you wanted the same number of maximum consecutive hyphenated +lines and a hyphenation margin for use with +<a href="definitions.html#rag">rag</a> +copy, +<br/> +<span class="pre-in-pp"> + .HY_SET 2 36p +</span> +would set the hyphenation margin to 36 points. +</p> + +<p> +If you wanted the same number of maximum consecutive hyphenated +lines and a hyphenation space of 2 points for use with +<a href="definitions.html#just">justified</a> +copy, +<br/> +<span class="pre-in-pp"> + .HYSET 2 0 2p +</span> +is how you’d do it. +</p> + +<!-- -RW- --> + +<div class="macro-id-overline"> +<h3 id="rw" class="macro-id">Reduce whitespace</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>RW</b> <kbd class="macro-args"><amount of whitespace reduction between letters></kbd> +</div> + +<p> +RW (<span style="text-decoration: underline;">R</span>educe <span style="text-decoration: underline;">W</span>hitespace) +and its corresponding macro +EW (<span style="text-decoration: underline;">E</span>xpand <span style="text-decoration: underline;">W</span>hitespace), +allow you to tighten (or loosen) +<a href="definitions.html#outputline">output lines</a> +by uniformly reducing or expanding the space between characters. +This is particularly useful when you want to squeeze or stretch +lines on a narrow measure. +</p> + +<p> +The value passed to RW may be a whole number or a decimal fraction. +Since a value of 1 produces a noticeable reduction in the space +between letters at text sizes, you’ll most likely use small +decimal values when tightening lines. For example, +<br/> +<span class="pre-in-pp"> + .RW .1 +</span> +or +<span class="pre-in-pp"> + .RW .2 +</span> +may be just enough to squeeze an extra character or two on a line +without the change in letter spacing being obvious. I highly +recommend previewing your work to assess the effect of RW. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> By default, RW does not deposit a +<a href="#br">break</a> +when it’s invoked if you’re in one of the +<a href="definitions.html#fill">fill</a> +modes (i.e. +<a href="#quad">QUAD</a> +L, R, C, J, or +<a href="#justify">JUSTIFY</a>). +If you want +RW to break at the ends of the previous +<a href="definitions.html#inputline">input lines</a> +while you’re in a fill mode, tell mom +that’s what you want by invoking +<kbd><a href="#br-at-line-kern">.BR_AT_LINE_KERN</a></kbd>. +</p> +</div> + +<div class="box-important"> +<p class="tip"> +<span class="important">IMPORTANT:</span> +RW (and its complement, EW, see below) only affects the current +font, and remains in effect for that font every time it’s +called, hence it must be reset to zero to cancel its effect +(<kbd>.RW 0</kbd>). +</p> +</div> + +<!-- -EW- --> + +<div class="macro-id-overline"> +<h3 id="ew" class="macro-id">Expand whitespace</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>EW</b> <kbd class="macro-args"><amount of whitespace expansion between letters></kbd> +</div> + +<p> +EW (<span style="text-decoration: underline;">E</span>xpand <span style="text-decoration: underline;">W</span>hitespace) +expands the amount of whitespace between letters, effectively +“loosening” lines of type. +</p> + +<p> +The value passed to EW may be a whole number or a decimal fraction. +Since a value of 1 produces a noticeable expansion in the space +between letters at text sizes, you’ll most likely use small +decimal values when loosening lines. For example, +<br/> +<span class="pre-in-pp"> + .EW .1 +</span> +or +<span class="pre-in-pp"> + .EW .2 +</span> +may be just enough to open up a line without the change in letter +spacing being obvious. I highly recommend previewing your work to +assess the effect of EW. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> By default, EW does not deposit a +<a href="#br">break</a> +when it’s invoked if you’re in one of the +<a href="definitions.html#fill">fill</a> +modes (i.e. +<a href="#quad">QUAD</a> +L, R, C, J, or +<a href="#justify">JUSTIFY</a>). +If you want +EW to break at the ends of the previous +<a href="definitions.html#inputline">input lines</a> +while you’re in a fill mode, tell mom that’s what you +want by invoking the +<kbd><a href="#br-at-line-kern">.BR_AT_LINE_KERN</a></kbd> +toggle macro. +</p> +</div> + +<div class="box-important"> +<p class="tip"> +<span class="important">IMPORTANT:</span> +EW (and its complement, RW, see above) only affects the current +font, and remains in effect for that font every time it’s +called, hence it must be reset to zero to cancel its effect +(<kbd>.RW 0</kbd>). +</p> +</div> + +<!-- -BR_AT_LINE_KERN- --> + +<div class="macro-id-overline"> +<h3 id="br-at-line-kern" class="macro-id">Break before line kerning</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>BR_AT_LINE_KERN</b> <kbd class="macro-args">toggle</kbd> +</div> + +<p> +By default, in +<a href="definitions.html#filled">fill</a> +modes (i.e. +<a href="#quad">QUAD</a> +L, R, C, J, or +<a href="#justify">JUSTIFY</a>) +mom does not break +<a href="definitions.html#inputline">input lines</a> +when you invoke +<a href="#rw">RW</a> +or +<a href="#ew">EW</a>. +If you’d like her to break input lines prior to RW or EW, +invoke <kbd>.BR_AT_INPUT_LINE</kbd> without any argument. To +disable the breaks, invoke <kbd>.BR_AT_INPUT_LINE</kbd> with any +argument (<kbd>OFF</kbd>, <kbd>QUIT</kbd>, <kbd>END</kbd>, +<kbd>X</kbd>...), like this +<br/> +<span class="pre-in-pp"> + .BR_AT_LINE_KERN OFF +</span> +or +<span class="pre-in-pp"> + .BR_AT_LINE_KERN X +</span> +With QUAD L, R, or C, mom simply breaks the line. With QUAD J (or +just JUSTIFY, which is the same thing), she breaks and +<a href="definitions.html#force">force justifies</a> +the line prior to <kbd>.EW</kbd> or <kbd>.RW</kbd>. +</p> + +<!-- -KERN- --> + +<div class="macro-id-overline"> +<h3 id="kern" class="macro-id">Automatic kerning</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>KERN</b> <kbd class="macro-args">toggle</kbd> +</div> + +<p> +By itself (i.e. with no argument), KERN turns automatic pairwise +<a href="definitions.html#kern">kerning</a> +on. With any argument (e.g. <kbd>OFF</kbd>, <kbd>Q</kbd>, +<kbd>X</kbd>), pairwise kerning is turned off. +</p> + +<p> +Kerning of individual character pairs can be controlled with the two +<a href="definitions.html#inlines">inline escapes</a> +<br/> +<kbd>\*[BU <n>]</kbd> and +<kbd>\*[FU <n>]</kbd>. See +<a href="inlines.html#inline-kerning-mom">Inline Escapes, kerning</a>. +</p> + +<!-- -LIGATURES- --> + +<div class="macro-id-overline"> +<h3 id="ligatures" class="macro-id">Automatic ligature generation</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>LIGATURES</b> <kbd class="macro-args">toggle</kbd> +</div> +<p class="alias"> +<i>Alias:</i> <b>LIG</b> +</p> + +<p> +Provided your current font has +<a href="definitions.html#ligatures">ligatures</a>, +LIGATURES, by itself, turns on automatic generation of ligatures. +When automatic ligature generation is on, simply typing the letters +of a ligature combination will produce the correct ligature upon +output. For example, if you type the word “finally”, +the fi combination will be output as an fi ligature. Generally +speaking, ligatures are A Good Thing, hence mom has them on by +default. +</p> + +<p> +LIGATURES with any argument turns automatic ligature generation off. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> Not all fonts support ligatures. +</p> +</div> + +<div class="rule-short"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="modifications-intro" class="macro-group">Type modifications (pseudo font styles)</h2> + +<p> +It sometimes happens that a +<a href="definitions.html#family">family</a> +doesn’t contain all the fonts you need. You might, for +example, be missing an italic font, or a bold font. Or you might +not be able to get your hands on the condensed version. That’s +where these macros and inline escapes come in. With them, you +can fake the fonts you’re missing. A word of caution, +though: “faked” fonts are just that—faked. You +should only use them as a last resort, and then only sparingly. A +word or two or a line or two in a faked font will pass unnoticed; +large patches of type in a faked font look typographically cheap. +</p> + +<div id="index-modifications" class="macro-list-container"> +<h3 class="macro-list">Type modifications macros</h3> + +<ul class="macro-list"> + <li>Pseudo italic + <ul style="list-style: none; margin-left: -1em;"> + <li><a href="#setslant">SETSLANT</a> – degree of pseudo-italicizing</li> + <li><a href="#slant-inline">\*[SLANT]</a> – inline escape for pseudo-italicizing type</li> + </ul></li> + <li>Pseudo bold + <ul style="list-style: none; margin-left: -1em;"> + <li><a href="#setbolder">SETBOLDER</a> – amount of emboldening</li> + <li><a href="#bolder-inline">\*[BOLDER]</a> – inline escape for emboldening type</li> + </ul></li> + <li>Pseudo condensed + <ul style="list-style: none; margin-left: -1em;"> + <li><a href="#condense">CONDENSE</a> – percentage for pseudo-condensed type</li> + <li><a href="#cond-inline">\*[COND]</a> – inline escape for pseudo-condensed type</li> + </ul></li> + <li>Pseudo extended + <ul style="list-style: none; margin-left: -1em;"> + <li><a href="#extend">EXTEND</a> – percentage for pseudo-extended type</li> + <li><a href="#ext-inline">\*[EXT]</a> – inline escape for pseudo-extending</li> + </ul></li> + <li>Smallcaps + <ul style="list-style: none; margin-left: -1em;"> + <li><a href="#smallcaps">SMALLCAPS</a> – enable smallcaps</li> + <li><a href="#smallcaps-style">SMALLCAPS_STYLE</a> – size, weight, and width of smallcaps</li> + </ul></li> +</ul> +</div> + +<!-- -SETSLANT- --> + +<div class="macro-id-overline"> +<h3 id="setslant" class="macro-id">Set degree of slant for pseudo-italicizing</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>SETSLANT</b> <kbd class="macro-args"><degrees to slant type> | RESET</kbd> +</div> + +<p> +Pseudo-italicizing of type is accomplished by slanting a roman font +a certain number of degrees to the right. SETSLANT lets you fix the +number of degrees. Mom’s default is 15, which produces an +acceptable approximation of an italic font. If you want another +value—say, 13 degrees—you’d set it by entering +<br/> +<span class="pre-in-pp"> + .SETSLANT 13 +</span> +If you change the degree of slant and later want to set it back to +the mom default, do +<br/> +<span class="pre-in-pp"> + .SETSLANT RESET +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> By itself, SETSLANT will not start +pseudo-italicizing type; it merely tells mom what degree of slant +you want. To start pseudo-italicizing, use the +<a href="definitions.html#inlines">inline escape</a> +<kbd>\*[SLANT]</kbd>. +</p> +</div> + +<!-- -\*[SLANT]- --> + +<div class="macro-id-overline"> +<h3 id="slant-inline" class="macro-id">Pseudo italic on/off</h3> +</div> + +<div class="box-macro-args"> +Inline: <kbd class="macro-args">\*[SLANT]</kbd> +<br/> +Inline: <kbd class="macro-args">\*[SLANTX</kbd>] +</div> + +<p> +<kbd class="macro-args">\*[SLANT]</kbd> begins pseudo-italicizing. <kbd class="macro-args"><span class="nobr">\*[SLANTX]</span></kbd> turns +the feature off. Both are <a href="definitions.html#inlines">inline +escapes</a>, +therefore they should not appear as separate lines, but rather be +embedded in text lines, like this: +<br/> +<span class="pre-in-pp"> + Not \*[SLANT]everything\*[SLANTX] is as it seems. +</span> +Alternatively, if you wanted the whole line pseudo-italicized, +you’d do +<br/> +<span class="pre-in-pp"> + \*[SLANT]Not everything is as it seems.\*[SLANTX] +</span> +Once <kbd><span class="nobr">\*[SLANT]</span></kbd> is invoked, it remains in +effect until turned off. +</p> + +<div class="box-tip" style="margin-top: .5em;"> +<p class="tip"> +<span class="note">Note:</span> If you’re using the +<a href="docprocessing.html#docprocessing">document processing macros</a> +with +<a href="docprocessing.html#printstyle">PRINTSTYLE TYPEWRITE</a>, +mom underlines pseudo-italics by default. To change this behaviour, +use the special macro +<a href="docprocessing.html#typewrite-control">SLANT_MEANS_SLANT</a>. +</p> +</div> + +<!-- -SETBOLDER- --> + +<div class="macro-id-overline"> +<h3 id="setbolder" class="macro-id">Set amount of emboldening</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>SETBOLDER</b> <kbd class="macro-args"><amount of emboldening, in machine units> | RESET</kbd> +</div> + +<p> +Emboldening of type is accomplished by printing characters twice; +the second printing is slightly offset from the first, effectively +“thickening” the character. SETBOLDER lets you set the +number of +<a href="definitions.html#units">machine units</a> +for the offset. Mom’s default is 700 units, which produces an +acceptable approximation of a bold font. If you want another +value—say, 500 units—you’d set it by entering +<br/> +<span class="pre-in-pp"> + .SETBOLDER 500 +</span> +If you change the emboldening offset and later want to set it back +to the mom default, do +<br/> +<span class="pre-in-pp"> + .SETBOLDER RESET +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> By itself, SETBOLDER will not start +emboldening type; it merely tells mom what you want the emboldening +offset to be. To start emboldening, use the +<a href="definitions.html#inlines">inline escape</a> +<kbd><span class="nobr">\*[BOLDER]</span></kbd>. +</p> +</div> + +<!-- -\*[BOLDER]- --> + +<div class="macro-id-overline"> +<h3 id="bolder-inline" class="macro-id">Emboldening on/off</h3> +</div> + +<div class="box-macro-args"> +Inline: <kbd class="macro-args">\*[BOLDER]</kbd> +<br/> +Inline: <kbd class="macro-args">\*[BOLDERX]</kbd> +</div> + +<p> +<kbd class="macro-args">\*[BOLDER]</kbd> begins emboldening type. +<kbd class="macro-args"><span class="nobr">\*[BOLDERX]</span></kbd> turns the +feature off. Both are +<a href="definitions.html#inlines">inline escapes</a>, +therefore they should not appear as separate lines, but rather be +embedded in text lines, like this: +<br/> +<span class="pre-in-pp"> + Not \*[BOLDER]everything\*[BOLDERX] is as it seems. +</span> +Alternatively, if you wanted the whole line emboldened, +you’d do +<br/> +<span class="pre-in-pp"> + \*[BOLDER]Not everything is as it seems.\*[BOLDERX] +</span> +Once <kbd><span class="nobr">\*[BOLDER]</span></kbd> is invoked, it remains in +effect until turned off. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> If you’re using the +<a href="docprocessing.html#docprocessing">document processing macros</a> +with +<a href="docprocessing.html#printstyle">PRINTSTYLE TYPEWRITE</a>, +mom ignores <kbd>\*[BOLDER]</kbd> requests. +</p> +</div> + +<!-- -CONDENSE- --> + +<div class="macro-id-overline"> +<h3 id="condense" class="macro-id">Set percentage for pseudo-condensed type</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>CONDENSE</b> <kbd class="macro-args"><pseudo-condense percentage></kbd> +</div> + +<p> +Pseudo-condensing of type is accomplished by reducing the width of +characters at a given point size without reducing their height, +effectively narrowing them so they look like condensed type. +CONDENSE tells mom what percentage of the normal character width you +want the characters to be condensed. +</p> + +<p> +Mom has no default value for CONDENSE, therefore you must set it +before using the +<a href="definitions.html#inlines">inline escape</a> +<kbd><a href="#cond-inline"><span class="nobr">\*[COND]</span></a></kbd>. +80 percent of the normal character width is a good value, and +you’d set it like this: +<br/> +<span class="pre-in-pp"> + .CONDENSE 80 +</span> +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="note">Note:</span> By itself, CONDENSE will not start +pseudo-condensing type; it merely tells mom what percentage of the +normal character width you want characters to be condensed. To +start pseudo-condensing, use the +<a href="definitions.html#inlines">inline escape</a> +<kbd><span class="nobr">\*[COND]</span></kbd>. +</p> + +<p class="tip-bottom"> +<span class="additional-note">Additional note:</span> Make sure that +pseudo-condensing is off (with +<kbd><a href="#cond-inline"><span class="nobr">\*[CONDX]</span></a></kbd>) +before making any changes to the pseudo-condense percentage +with CONDENSE. +</p> +</div> + +<!-- -\*[COND]- --> + +<div class="macro-id-overline"> +<h3 id="cond-inline" class="macro-id">Pseudo-condensing on/off</h3> +</div> + +<div class="box-macro-args"> +Inline: <kbd class="macro-args">\*[COND]</kbd> +<br/> +Inline: <kbd class="macro-args">\*[CONDX]</kbd> +</div> + +<p> +<kbd>\*[COND]</kbd> begins pseudo-condensing type. +<kbd><span class="nobr">\*[CONDX]</span></kbd> turns the feature off. Both are +<a href="definitions.html#inlines">inline escapes</a>, +therefore they should not appear as separate lines, but rather be +embedded in text lines, like this: +<br/> +<span class="pre-in-pp"> + \*[COND]Not everything is as it seems.\*[CONDX] +</span> +<kbd><span class="nobr">\*[COND]</span></kbd> remains in effect until you turn it +off with <kbd><span class="nobr">\*[CONDX]</span></kbd>. +</p> + +<div class="box-important"> +<p class="tip"> +<span class="important">IMPORTANT:</span> You must turn +<kbd><span class="nobr">\*[COND]</span></kbd> off before making any changes to +the point size of your type, either via the +<a href="#ps">PT_SIZE</a> +macro or with the <kbd>\s</kbd> inline escape. If you wish +the new point size to be pseudo-condensed, simply re-invoke +<kbd><span class="nobr">\*[COND]</span></kbd> afterwards. Equally, +<kbd><span class="nobr">\*[COND]</span></kbd> must be turned off before changing +the condense percentage with +<kbd><a href="#condense">.CONDENSE</a></kbd>. +</p> +</div> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> If you’re using the +<a href="docprocessing.html#docprocessing">document processing macros</a> +with +<a href="docprocessing.html#printstyle">PRINTSTYLE TYPEWRITE</a>, +mom ignores <kbd>\*[COND]</kbd> requests. +</p> +</div> + +<!-- -EXTEND- --> + +<div class="macro-id-overline"> +<h3 id="extend" class="macro-id">Set percentage for pseudo-extended type</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>EXTEND</b> <kbd class="macro-args"><pseudo-extend percentage></kbd> +</div> + +<p> +Pseudo-extending of type is accomplished by increasing the width of +characters at a given point size without increasing their height, +effectively widening them so they look like extended type. EXTEND +tells mom what percentage of the normal character width you want the +characters to be extended. +</p> + +<p> +Mom has no default value for EXTEND, therefore you must set it +before using the +<a href="definitions.html#inlines">inline escape</a> +<kbd><a href="#ext-inline"><span class="nobr">\*[EXT]</span></a></kbd>. 120% of +the normal character width is a good value, and you’d set it +like this: +<br/> +<span class="pre-in-pp"> + .EXTEND 120 +</span> +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="note">Note:</span> By itself, EXTEND will not start +pseudo-extending type; it merely tells mom what percentage of the +normal character width you want characters to be extended. To start +pseudo-extending, use the +<a href="definitions.html#inlines">inline escape</a> +<kbd><span class="nobr">\*[EXT]</span></kbd>. +</p> + +<p class="tip-bottom"> +<span class="additional-note">Additional note:</span> Make sure that +pseudo-extending is off (with +<a href="#ext-inline"><kbd>\*[EXTX]</kbd></a>) +before making any changes to the pseudo-extend percentage +with EXTEND. +</p> +</div> + +<!-- -\*[EXT]- --> + +<div class="macro-id-overline"> +<h3 id="ext-inline" class="macro-id">Pseudo-extending on/off</h3> +</div> + +<div class="box-macro-args"> +Inline: <kbd class="macro-args">\*[EXT]</kbd> +<br/> +Inline: <kbd class="macro-args">\*[EXTX]</kbd> +</div> + +<p> +<kbd>\*[EXT]</kbd> begins pseudo-extending type. +<kbd><span class="nobr">\*[EXTX]</span></kbd> turns the feature off. Both are +<a href="definitions.html#inlines">inline escapes</a>, +therefore they should not appear as separate lines, but rather be +embedded in text lines, like this: +<br/> +<span class="pre-in-pp"> + \*[EXT]Not everything is as it seems.\*[EXTX] +</span> +<kbd>\*[EXT]</kbd> remains in effect until you turn it off with +<kbd><span class="nobr">\*[EXTX]</span></kbd>. +</p> <div class="box-important"> <p class="tip"> +<span class="important">IMPORTANT:</span> You must turn +<kbd><span class="nobr">\*[EXT]</span></kbd> off before making any changes to the +point size of your type, either via the +<a href="#ps">PT_SIZE</a> +macro or with the <kbd>\s</kbd> inline escape. If you wish +the new point size to be pseudo-extended, simply re-invoke +<kbd><span class="nobr">\*[EXT]</span></kbd> afterwards. Equally, +<kbd><span class="nobr">\*[EXT]</span></kbd> must be turned off before changing +the extend percentage with +<a href="#extend">EXTEND</a>. +</p> +</div> +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> If you’re using the +<a href="docprocessing.html#docprocessing">document processing macros</a> +with +<a href="docprocessing.html#printstyle">PRINTSTYLE TYPEWRITE</a>, +mom ignores <kbd><span class="nobr">\*[EXT]</span></kbd> requests. +</p> +</div> + +<!-- SMALLCAPS --> + +<div class="macro-id-overline"> +<h3 id="smallcaps" class="macro-id">Smallcaps</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>SMALLCAPS</b> <kbd class="macro-args"><toggle></kbd> +</div> + +<p> +To begin setting type in pseudo-smallcaps, simply invoke +<kbd>.SMALLCAPS</kbd>. When you no longer want them, invoke +<kbd>SMALLCAPS OFF</kbd> (or <kbd>END</kbd>, <kbd>STOP</kbd>, +<kbd>DONE</kbd>, etc). If you are currently in a +<a href="definitions.html#filled">no-fill mode</a>, +(i.e. +<a href="#lrc">LEFT</a>, +<a href="#lrc">CENTER</a>, +or +<a href="#lrc">RIGHT</a>) +and you want the smallcaps to continue on the same line, +append a <kbd>\c</kbd> to the line, like this +<br/> +<span class="pre-in-pp"> + A line of type\c + .SMALLCAPS + with a few words in smallcaps. + .SMALLCAPS OFF +</span> +The line preceding <kbd>.SMALLCAPS OFF</kbd> should also have a +<kbd>\c</kbd> appended to it if you wish it to continue unbroken. +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="note">Note:</span> +SMALLCAPS does not have an inline equivalent to +<a href="inlines.html#uc-lc"> +<span class="nobr"><kbd>\*[UC]</kbd> / <kbd>\*[LC]</kbd></span> +</a>. +Furthermore, if you’re using the +<a href="docprocessing.html#docprocessing">document processing macros</a> +with +<a href="docprocessing.html#printstyle">PRINTSTYLE TYPEWRITE</a>, +mom ignores SMALLCAPS. +</p> + +<p class="tip-bottom"> +Additionally, be aware that no automatic +<a href="definitions.html#kern">kerning</a> +takes place while pseudo-smallcaps are in effect. +</p> +</div> + +<div class="macro-id-overline"> +<h3 id="smallcaps-style" class="macro-id">Set size, weight, and width of smallcaps</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>SMALLCAPS_STYLE</b> <kbd class="macro-args">SIZE <percentage> WEIGHT_ADJ <percentage> EXTEND <percentage></kbd> +</div> + +<p> +True smallcaps are not a font effect, but, like designer cuts of +bold, condensed, and extended, actual fonts provided with some +families. It is highly recommended that you acquire real smallcaps +fonts rather than relying on mom’s pseudo version. +</p> + +<p> +To achieve a reasonable facsimile of designer-cut smallcaps fonts, +mom needs to know the percentage of regular caps at a given point +size by which to reduce the small caps. To make adjustments for +the difference in weight and width of the smaller caps, she also +needs to know by how much to embolden (“fatten”) the +smallcaps, and by how much to increase their width. +</p> + +<p> +All three arguments to SMALLCAPS_STYLE reflect a +percentage of the point size in effect when +<a href="#smallcaps">SMALLCAPS</a> +is invoked. Mom’s defaults for pseudo-smallcaps are: +<br/> +<span class="pre-in-pp"> + SIZE = 74% + WEIGHT_ADJ = .3% + EXTEND = 5% +</span> +To change any or all of the defaults, you might enter +<br/> +<span class="pre-in-pp"> + .SMALLCAPS_STYLE SIZE 80 WEIGHT_ADJ .25 EXTEND 3 +</span> +or, more readably, +<br/> +<span class="pre-in-pp"> + .SMALLCAPS_STYLE + SIZE 80 \ + WEIGHT_ADJ .25 \ + EXTEND 3 +</span> +Note that you do not have to give SMALLCAPS_STYLE all three +arguments, and that the arguments may be entered in any order. Any +arguments you omit will remain at their former value. +</p> + +<div class="rule-short" style="margin-bottom: 24px;"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="aldrld-intro" class="macro-group">Vertical movements</h2> + +The two macros in this section allow you to move down or up on the +page relative to the current +<a href="definitions.html#baseline">baseline</a>. + +<div id="index-aldrld" class="macro-list-container"> +<h3 class="macro-list">Vertical movements macros</h3> +<ul class="macro-list"> + <li><a href="#ald">ALD</a> – Advance Lead</li> + <li><a href="#rld">RLD</a> – Reverse Lead</li> + <li>(see also <a href="#space">SPACE</a>)</li> +</ul> +</div> + +<!-- -ALD- --> + +<div class="macro-id-overline"> +<h3 id="ald" class="macro-id">Advance Lead (move downward)</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>ALD</b> <kbd class="macro-args"><distance to move downward></kbd> +</div> +<p class="requires"> +• Requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +ALD takes one argument: the distance to move downward on the page +relative to the current vertical position. +</p> + +<p> +ALD causes a line break, which means the argument is added to the +current +<a href="definitions.html#leading">leading</a>. +For example, if your current leading is 12 points, a line of type +after <kbd>.ALD 6p</kbd> will be 18 points distant from the previous +line. +</p> + +<p> +If you wish to advance the argument's distance <i>from the +current baseline,</i> it should be preceded by +<a href="#el">EL</a>. +For example, +<br/> +<span class="pre-in-pp"> + .LEFT + .LS 12 + First line. + Second line.\c + .EL + .ALD 15p + Third line. +</span> +would place the third line exactly 15 points beneath the second. +</p> + +<p> +ALD requires a unit of measure. Decimal fractions are allowed, and +values may be combined. Therefore, to move down on the page by 1/4 +of an inch, you could enter either +<br/> +<span class="pre-in-pp"> + .ALD .25i +</span> +or +<br/> +<span class="pre-in-pp"> + .ALD 1P+6p +</span> +As the mnemonic +(<span style="text-decoration: underline;">A</span>dvance <span style="text-decoration: underline;">L</span>ea<span style="text-decoration: underline;">D</span>) +suggests, you’ll most often use ALD with +<a href="definitions.html#picaspoints">points</a> +of lead. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> if you want to use ALD at the top +of a page (i.e. to advance to the starting position of type on a +page), combine the value you want with <kbd>-1v</kbd> (minus one +line space), like this: +<br/> +<span class="pre-in-pp"> + .ALD 1i-1v +</span> +At the top of a page, this will advance one inch from the top edge +of the paper. Without the -1v, the same command would advance one +inch from the top of the page plus the distance of one line space. +</p> +</div> + +<!-- -RLD- --> + +<div class="macro-id-overline"> +<h3 id="rld" class="macro-id">Reverse Lead (move upward)</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>RLD</b> <kbd class="macro-args"><distance to move upward></kbd> +</div> +<p class="requires"> +• Requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +RLD takes one argument: the distance to move upward on the page +relative to the current vertical position. +</p> + +<p> +RLD causes a line break, which means the argument is subtracted from +the current +<a href="definitions.html#leading">leading</a>. +For example, if your current leading is 12 points, a line of type +after <kbd>.RLD 6p</kbd> will be 6 points distant from the previous +line. +</p> + +<p> +If you wish to move upward <i>from the current baseline</i> by the +argument's distance, RLD should be preceded by +<a href="#el">EL</a>. +For example, +<br/> +<span class="pre-in-pp"> + .LEFT + .LS 18 + First line. + Second line.\c + .EL + .RLD 3p + Third line. +</span> +would raise the third line by 3 points relative to the baseline of +the second line. Put another way, if the <kbd>.RLD</kbd> in the +example were 18p, the third line would fall on the same baseline as +the second. +</p> + +<p> +RLD requires a unit of measure. Decimal fractions are allowed, and +values may be combined. Therefore, to move up on the page by 1/4 of +an inch, you could enter either +<br/> +<span class="pre-in-pp"> + .RLD .25i +</span> +or +<span class="pre-in-pp"> + .RLD 1P+6p +</span> +As the mnemonic +(<span style="text-decoration: underline;">R</span>everse <span style="text-decoration: underline;">L</span>ea<span style="text-decoration: underline;">D</span>) +suggests, you’ll most often use RLD with +<a href="definitions.html#picaspoints">points</a> +of lead. +</p> + +<div class="rule-short" style="margin-bottom: 24px;"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="tabs-intro" class="macro-group">Tabs</h2> + +<p> +Mom provides two different kinds of tab setup: typesetting tabs +and string tabs. Neither one has anything to do with the tab key +on your keyboard, and both are utterly divorced from groff’s +notion of tabs. I recommend reading this section carefully in order +to understand how mom handles tabs. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> see the section +<a href="docprocessing.html#behaviour">Typesetting macros during document processing</a> +for reassuring information on the use of tabs during +<a href="docprocessing.html#docprocessing">document processing</a>. +</p> +</div> + +<h3 id="typesetting-tabs" class="docs">Typesetting tabs</h3> + +<p> +Typesetting tabs are defined by both an indent from the left margin +and a line length. This is quite different from typewriter-style +tab stops (the groff norm) that only define the left indent. In +conjunction with the +<a href="#multicolumns-intro">multi-column macros</a>, +typesetting tabs significantly facilitate tabular and columnar work. +</p> + +<p> +Typesetting tabs are created with the +<a href="#tab-set">TAB_SET</a> +macro. TAB_SET identifies the tab (by number), establishes its left +indent and line length, and optionally sets a quad direction and +fill mode. After tabs have been created with TAB_SET, they can be +called at any time with the +<a href="#tab">TAB</a> +macro. +</p> + +<div class="examples-container"> +<h3 id="typesetting-tabs-tut" class="docs notes">Quickie tutorial on typesetting tabs</h3> + +<p style="margin-top: .5em;"> +Say you want to set up three tabs to produce an employee evaluation +that looks something like this: +</p> + +<div class="box-code" style="padding-bottom: 0;"> +<span id="typsetting-tabs-sample" class="pre-in-pp" style="color: #302419"> +CRITERION EVALUATION COMMENTS + +Service Good Many clients specifically request + support from Joe by name. + +Punctuality Satisfactory Tends to arrive after 8:00am, but + often works through lunch hour. + +Team spirit Needs work Persistently gives higher priority + to helping clients than respecting + organizational hierarchy. +</span> +</div> + +<p> +You want the first tab, CRITERION, +</p> +<ul style="margin-top: -.5em; margin-bottom: -.5em;"> +<li>to begin at the left margin of the page – i.e. no indent</li> +<li>to have a line length of 5 picas</li> +<li>to be set flush left</li> +</ul> + +<p> +Tabs must be numbered, and each has to be set up with a separate +<a href="#tab-set">TAB_SET</a> +line. Therefore, to set up tab 1, you enter +<br/> +<span class="pre-in-pp"> + .TAB_SET 1 0 5P L + | | | | + tab #--+ | | +--direction + | | + indent--+ +--length +</span> +You want the second tab, EVALUATION, +</p> +<ul style="margin-top: -.5em; margin-bottom: -.5em;"> +<li>to begin 8 picas from the left margin</li> +<li>to have a length of 9 picas</li> +<li>to be set centered</li> +</ul> + +<p> +You set it up like this: +<br/> +<span class="pre-in-pp"> + .TAB_SET 2 8P 9P C + | | | | + tab #--+ | | +--direction + | | + indent--+ +--length +</span> +You want the third tab, COMMENTS, +</p> +<ul style="margin-top: -.5em; margin-bottom: -.5em;"> +<li>to begin 19 picas from the left margin</li> +<li>to have a length of 17 picas</li> +<li>to be set flush left, <a href="definitions.html#filled">filled</a></li> +</ul> + +<p> +The setup looks like this: +<br/> +<span class="pre-in-pp"> + .TAB_SET 3 19P 17P L QUAD + | | | | | + | | | | +--fill output lines + | | | | + tab #--+ | | +--direction + | | + indent--+ +--length +</span> +Once the tabs are set up, you can call them in one of two ways: +</p> +<ul style="margin-top: -.5em; margin-bottom: -.5em;"> +<li>with <kbd><a href="#tab">.TAB</a></kbd> (passing the tab + number as an argument), which breaks the current line, + advances one linespace and calls the tab.</li> +<li>with <kbd><a href="#tn">.TN</a></kbd> (Tab Next), which keeps + you on the current line and moves over to the next + tab in sequence (i.e. from 1 to 2, 2 to 3, etc.), or, more + conveniently, with the + <kbd><a href="#tn">\*[TB+]</a></kbd> + <a href="definitions.html#inlines">inline escape</a></li> +</ul> + +<p> +To exit from tabs and restore your original left margin, line +length, quad direction and fill mode, use +<kbd><a href="#tq">.TQ</a></kbd> +(Tab Quit). +</p> + +<p> +Here’s how the input for our sample employee evaluation looks +(with some introductory parameters): +</p> + +<div class="examples" style="margin-bottom: 0px;">Code:</div> +<div class="box-code" style="height: 324px; padding-bottom: 18px; overflow: auto;"> +<span class="pre-in-pp"> +.PAGE 8.5i 11i 1i 1i 1i +.FAMILY T +.FT R +.PT_SIZE 14 +.LS 16 +.QUAD LEFT +.KERN +.HY OFF +.SS 0 +.TAB_SET 1 0 5P L +.TAB_SET 2 8P 9P C +.TAB_SET 3 19P 17P L QUAD +.TAB 1 +CRITERION\*[TB+] +EVALUATION\*[TB+] +COMMENTS +.SP +.TAB 1 +Service\*[TB+] +Good\*[TB+] +Many clients specifically request support from Joe by name. +.SP +.TAB 1 +Punctuality\*[TB+] +Satisfactory\*[TB+] +Tends to arrive after 8:00am, but often works through lunch hour. +.SP +.TAB 1 +Team spirit\*[TB+] +Needs work\*[TB+] +Persistently gives higher priority to helping clients +than respecting organizational hierarchy. +.TQ +</span> +</div> + +<p> +Try setting this up and processing it with +<br/> +<span class="pre-in-pp"> + pdfmom filename.mom > filename.pdf +</span> +then previewing the .pdf file. Notice how <kbd>.TN</kbd> +simply moves over to the next tab, while the combination +<kbd>.SP/.TAB 1</kbd> breaks the line, advances by one extra +linespace, and calls the first tab. +</p> + +<p> +Notice, too, how the <kbd>QUAD</kbd> argument passed to tab 3 means +you don’t have to worry about the length of +<a href="definitions.html#inputline">input lines</a>; +mom +<a href="definitions.html#filled">fills</a> +the tab and sets the type flush left. +</p> +</div> + +<h3 id="string-tabs" class="docs">String tabs (autotabs)</h3> + +<p> +String tabs let you mark off tab positions with +<a href="definitions.html#inlines">inline escapes</a> +embedded in +<a href="definitions.html#inputline">input lines</a>. +Left indents and line lengths are calculated from the beginning and +end positions of the marks. This is especially useful when tab +indents and lengths need to be determined from the text that goes in +each tab. +</p> + +<p> +Setting up string tabs is a two-step procedure. First, you enter an +input line in which you mark off where you want tabs to begin and +end. (This is often best done in conjunction with the +<a href="goodies.html#silent">SILENT</a> +macro.) +</p> + +<p> +Next, you invoke the +<a href="#st">ST</a> +macro for every string tab you defined, and optionally pass quad and +fill information to it. That done, string tabs are called with the +<a href="#tab">TAB</a> +macro, just like typesetting tabs. +</p> + +<p> +In combination with the +<a href="goodies.html#pad">PAD</a> +macro and the groff inline escape +<kbd><a href="inlines.html#inline-horizontal-groff">\h</a></kbd> +(move horizontally across the page) or mom’s +<kbd><a href="inlines.html#inline-horizontal-mom">\*[FWD <distance>]</a></kbd> +(move forward) inline, string tabs provide tremendous flexibility in +setting up complex tab structures. +</p> + +<div class="examples-container"> +<h3 id="string-tabs-tut" class="docs notes">Quickie tutorial on string tabs</h3> +<p style="margin-top: .5em;"> +Say you want to set up tabs for the +<a href="#typsetting-tabs-sample">employee evaluation form</a> +used as an example in the +<a href="#typesetting-tabs-tut">typesetting tabs tutorial</a>. +This time, though, you want to play around with the point size of +type, so you can’t know exactly how long the tabs will be or +where they should start. All you know is +</p> +<ul style="margin-top: -.5em; margin-bottom: -.5em;"> +<li>CRITERION is the longest line in tab 1</li> +<li>EVALUATION is the longest line in tab 2</li> +<li>tab 3 should extend to the current right margin</li> +<li>you want a 1 pica gutter between each tab</li> +</ul> + +<p> +This is an ideal job for string tabs. +</p> + +<p> +The first thing you need for string tabs is an +<a href="definitions.html#inputline">input line</a> +with tab positions marked on it. Tabs are marked with the +<a href="definitions.html#inlines">inline escapes</a> +<a href="#inline-st"><kbd><span class="nobr">\*[ST<n>]</span></kbd></a> +and +<a href="#inline-st"><kbd><span class="nobr">\*[ST<n>X]</span></kbd></a>, +where <kbd><n></kbd> +is the number you want the tab to have. (In this example, we +enclose the input line with the +<a href="goodies.html#silent">SILENT</a> +macro so the line doesn’t print. We also use the +<a href="goodies.html#pad">PAD</a> +macro to permit defining tab 3 as simply “the amount of space +remaining on the input line.”) +</p> + +<p> +The setup looks like this: +</p> + +<div class="examples" style="margin-bottom: 0px;">Code:</div> + +<div class="box-code"> +<span class="pre-in-pp"> +.SILENT +.PAD "\*[ST1]CRITERION\*[ST1X]\*[FWD 12p]\*[ST2]EVALUATION\*[ST2X]\*[FWD 12p]\*[ST3]#\*[ST3X]" +.SILENT OFF +</span> +</div> + +<p> +The long line after <kbd>.PAD</kbd> looks scary, but +it isn’t really. Here’s what it means when broken down +into its component parts: +</p> +<ul style="margin-bottom: -1em;"> +<li>The longest line in tab 1 is “CRITERION”, so we + enclose CRITERION with begin/end markers for string tab 1: +<br/> +<span class="pre-in-pp" style="margin-bottom: -.25em;"> + \*[ST1]CRITERION\*[ST1X] +</span> +</li> +<li>We want a 1 pica (12 points) gutter between tab 1 and 2, + so we insert 12 points of space with <span class="nobr">\*[FWD 12p]:</span> +<br/> +<span class="pre-in-pp" style="margin-bottom: -.25em;"> + \*[FWD 12p] +</span> +</li> +<li>The longest line in tab 2 is “EVALUATION”, so + we enclose EVALUATION with begin/end markers for string + tab 2: +<span class="pre-in-pp" style="margin-bottom: -.25em;"> + \*[ST2]EVALUATION\*[ST2X] +</span> +</li> +<li>We want 1 pica (12 points) between tab 2 and 3, so we + insert it with: +<br/> +<span class="pre-in-pp" style="margin-bottom: -.25em;"> + \*[FWD 12p] +</span> +</li> +<li>We want tab 3 to be as long as whatever space remains on + the current line length, so we enclose the + <a href="goodies.html#pad-marker">pad marker</a> + (#) with begin/end markers for string tab 3: +<span class="pre-in-pp"> + \*[ST3]#\*[ST3X] +</span> + </li> +</ul> + +<p> +The tabs are now defined, but they require +<a href="definitions.html#quad">quad direction</a> +and +<a href="definitions.html#filled">fill</a> +information. For each string tab defined above, enter a separate +<kbd><a href="#st">.ST</a></kbd> +line, like this: +<br/> +<span class="pre-in-pp"> + .ST 1 L + .ST 2 L + .ST 3 L QUAD + | | | + | | +--fill output lines + | | +tab #--+ +--direction +</span> +From here on in, you call the tabs with +<kbd><a href="#tab">.TAB</a></kbd>, +<kbd><a href="#tn">.TN</a></kbd>, +or +<a href="#tn"><kbd><span class="nobr">\*[TB+]</span></kbd></a> +just like typesetting tabs (see +<a href="#typesetting-tabs-tut">typesetting tabs tutorial</a>). +</p> + +<p> +Here’s the complete setup and entry for the sample employee +evaluation form utilizing string tabs. +</p> + +<div class="examples" style="margin-bottom: 0px;">Code:</div> +<div class="box-code" style="height: 324px; padding-bottom: 18px; overflow: scroll;"> +<span class="pre-in-pp"> +.PAGE 8.5i 11i 1i 1i 1i +.FAMILY T +.FT R +.PT_SIZE 14 +.LS 16 +.QUAD LEFT +.KERN +.HY OFF +.SS 0 +.SILENT +.PAD "\*[ST1]CRITERION\*[ST1X]\*[FWD 12p]\*[ST2]EVALUATION\*[ST2X]\*[FWD 12p]\*[ST3]#\*[ST3X]" +.SILENT OFF +.ST 1 L +.ST 2 L +.ST 3 L QUAD +.TAB 1 +CRITERION\*[TB+] +EVALUATION\*[TB+] +COMMENTS +.SP +.TAB 1 +Service\*[TB+] +Good\*[TB+] +Many clients specifically request support from Joe by name. +.SP +.TAB 1 +Punctuality\*[TB+] +Satisfactory\*[TB+] +Tends to arrive after 8:00am, but often works through lunch hour. +.SP +.TAB 1 +Team spirit\*[TB+] +Needs work\*[TB+] +Persistently gives higher priority to helping clients +than respecting organizational hierarchy. +.TQ +</span> +</div> + +<p> +Try setting this up and processing it with +<br/> +<span class="pre-in-pp"> + pdfmom filename.mom > filename.pdf +</span> +and previewing the .pdf file. +</p> + +<p> +Now, change the point size of the above sample to 12 and preview it +again. You’ll see that the tab structure remains identical +(tab 1=CRITERION, tab 2=EVALUATION, tab 3=space remaining, and the +gutter between tabs is still 1 pica), while the position and length +of the tabs have altered because of the new point size. +</p> + +<p> +Now try increasing the gutters to 2 picas +(<kbd><span class="nobr">\*[FWD 24p]</span></kbd> or +<kbd><span class="nobr">\*[FWD 2P]</span></kbd> instead of +<kbd><span class="nobr">\*[FWD 12p]</span></kbd>). Preview the file again, +and notice how the tab structure remains the same, but the gutters +are wider. +</p> +</div> + +<div id="index-tabs" class="macro-list-container"> +<h3 class="macro-list">Tabs macros</h3> + +<ul class="macro-list"> + <li><a href="#tab-set">TAB_SET</a> – create typesetting tabs</li> + <li><a href="#inline-st">\*[ST]...\*[STX]</a> – inline escapes for marking String Tabs</li> + <li><a href="#st">ST</a> – set String Tabs</li> + <li><a href="#tab">TAB</a> – call tabs</li> + <li><a href="#tn">TN</a> – Tab Next; call next tab in sequence</li> + <li><a href="#tn">\*[TB+]</a> – inline escape to call next tab in sequence</li> + <li><a href="#tq">TQ</a> – Tab Quit</li> +</ul> + +</div> + +<!-- -TAB_SET- --> + +<div class="macro-id-overline"> +<h3 id="tab-set" class="macro-id">Set up typesetting tabs</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>TAB_SET</b> <kbd class="macro-args"><tab number> <indent> <length> L | R | C | J [ QUAD ]</kbd> +</div> +<p class="requires"> +• <kbd style="font-style: normal;"><indent></kbd> and <kbd style="font-style: normal;"><length></kbd> require a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p style="margin-bottom: -.5em;"> +TAB_SET creates typesetting tabs that later can be called with +<kbd><a href="#tab">.TAB</a></kbd>. +Typesetting tabs are numbered, and defined by an indent, a length, +and a quad direction, hence TAB_SET has four required arguments: +</p> +<ul style="margin-top: .5em; margin-bottom: -.5em;"> +<li>a tab number</li> +<li>an indent (measured from the left margin of the page, + or, if you’re already in a tab, from the left margin of the tab)</li> +<li>a length</li> +<li>a direction</li> +</ul> + +<p> +To set up a centred tab 6 picas long and 9 points from the left +margin, you’d enter +<br/> +<span class="pre-in-pp"> + .TAB_SET 1 9p 6P C +</span> +The tab number in the above (”1”) is simply an +identifier. It could have been 4, or 17, or 296. There’s no +need to set up tabs in numerical sequence. +</p> + +<p> +By default, tabs are in +<a href="definitions.html#filled">nofill</a> +mode, meaning you can enter text in tabs on a line-for-line basis +without having to use the +<a href="#br">BR</a> +macro. If you want a tab to be +<a href="definitions.html#filled">filled</a>, +pass the optional argument <kbd>QUAD</kbd>, +which will make the tab behave as if you’d entered +<kbd class="bold">.QUAD L | R | C</kbd>. +</p> + +<p> +For +<a href="definitions.html#just">justified</a> +tabs, simply pass the argument J (without the QUAD argument), like +this: +<br/> +<span class="pre-in-pp"> + .TAB 1 9p 6P J +</span> +Once tabs are set, they can be called at any time with the +<a href="#tab">TAB <n></a> +macro, where <n> is the number of the desired tab. +</p> + +<p> +You can set up any number of typesetting tabs. However, be aware +that +<a href="#string-tabs">string tabs</a> +are also called with TAB <n>, so be careful that you +don’t set up a typesetting tab numbered, say, 4, when you +already have a string tab numbered 4. Every tab, typesetting or +string, must have a unique numeric identifier. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> If you use TAB_SET while +you’re currently inside a tab, the indent argument is the +distance from the tab’s left margin, not the left margin of +the page. Therefore, you should exit tabs (with +<kbd><a href="#tq">.TQ</a></kbd>) +before creating new tabs (unless, of course, you want to set up a +tab structure within the confines of an existing tab). +</p> +</div> + +<div class="box-important"> +<p class="tip"> +<span class="important">IMPORTANT:</span> Turn all indents off (see +<a href="#indents">Indents</a>) +before setting up tabs with TAB_SET, or mom may get confused. +</p> +</div> + +<!-- -INLINE_ST- --> + +<div class="macro-id-overline"> +<h3 id="inline-st" class="macro-id">Mark positions of string tabs</h3> +</div> + +<div class="box-macro-args"> +Inlines: <kbd class="macro-args">\*[ST<number>]...\*[ST<number>X]</kbd> +</div> + +<p class="requires"> +The <a href="definitions.html#quad">quad</a> +direction must be +<span style="font-style: normal">LEFT</span> +or +<span style="font-style: normal">JUSTIFY</span> +(see +<a href="#quad"><span style="font-style: normal">QUAD</span></a> +and +<a href="#justify"><span style="font-style: normal">JUSTIFY</span></a>) +or the +<a href="definitions.html#filled">no-fill mode</a> +set to +<a href="#lrc"><span style="font-style: normal">LEFT</span></a> +in order for these inlines to function properly. Please see +<a href="#important1"><span style="font-style: normal">IMPORTANT</span></a>, +below. +</p> + +<p> +String tabs need to be marked off with +<a href="definitions.html#inlines">inline escapes</a> +before being set up with the +<a href="#st">ST</a> +macro. Any input line may contain string tab markers. <kbd +class="bold"><number></kbd>, above, means the numeric +identifier of the tab. The following shows a sample input line with +string tab markers. +<br/> +<span class="pre-in-pp"> + \*[ST1]Now is the time\*[ST1X] for all \*[ST2]good men\*ST2X] to come to the aid of the party. +</span> +String tab 1 begins at the start of the line and ends after the word +“time”. String tab 2 starts at “good” and +ends after “men”. Inline escapes (e.g. font or point +size changes, or horizontal movements, including +<a href="goodies.html#pad">padding</a>) +are taken into account when mom determines the position and length +of string tabs. +</p> + +<p> +Up to nineteen string tabs may be marked (not necessarily all on the +same line, of course), and they must be numbered between 1 and 19. +</p> + +<p> +Once string tabs have been marked in input lines, they have to be +“set” with +<kbd><a href="#st">.ST</a></kbd>, +after which they may be called, by number, with +<kbd><a href="#tab">.TAB</a></kbd>. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> Lines with string tabs marked off +in them are normal input lines, i.e., they get printed, just like +any input line. If you want to set up string tabs without the line +printing, use the +<a href="goodies.html#silent">SILENT</a> +macro. +</p> +</div> + +<div class="box-important"> +<p class="tip-top"> +<span id="important1" class="important">IMPORTANT:</span> +Owing to the way groff processes +<a href="definitions.html#inputline">input lines</a> +and turns them into +<a href="definitions.html#outputline">output lines</a>, +it is not possible for mom to “guess” the correct +starting position of string tabs marked off in lines that are +centered or set flush right. +</p> + +<p> +Equally, she cannot guess the starting position if a line is fully +justified and broken with +<a href="#spread">SPREAD</a>. +</p> + +<p> +In other words, in order to use string tabs, +<a href="#lrc">LEFT</a> +must be active, or, if +<a href="#quad">QUAD LEFT</a> +or +<a href="#justify">JUSTIFY</a> +are active, the line on which the string tabs are marked must be +broken “manually” with +<kbd><a href="#br">.BR</a></kbd> +(but not +<kbd><a href="#spread">.SPREAD</a></kbd>). +</p> + +<p class="tip-bottom"> +To circumvent this behaviour, I recommend using the +<a href="goodies.html#pad">PAD</a> +to set up string tabs in centered or flush right lines. Say, for +example, you want to use a string tab to underscore the text of a +centered line with a rule. Rather than this, +<br/> +<span class="pre-in-pp"> + .CENTER + \*[ST1]A line of text\*[ST1X]\c + .EL + .ST 1 + .TAB 1 + .PT_SIZE 24 + .ALD 3p + \*[RULE] + .RLD 3p + .TQ +</span> +you should do: +<br/> +<span class="pre-in-pp"> + .QUAD CENTER + .PAD "#\*[ST1]A line of text\*[ST1X]#" + .EL + .ST 1 + .TAB 1 + .PT_SIZE 24 + .ALD 3p + \*[RULE] \" Note that you can’t use \*[UP ] or \*[DOWN] with \*[RULE] + .RLD 3p + .TQ +</span> +</p> +</div> + +<!-- -ST- --> + +<div class="macro-id-overline"> +<h3 id="st" class="macro-id">Set string tabs</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>ST</b> <kbd class="macro-args"><tab number> L | R | C | J [ QUAD ]</kbd> +</div> + +<p> +After string tabs have been marked off on an input line (see +<a href="#inline-st"><kbd><span class="nobr">\*[ST]...\*[STX]</span></kbd></a>), +you need to “set” them by giving them a direction and, +optionally, the <kbd>QUAD</kbd> argument. In this respect, ST is +like +<a href="#tab-set">TAB_SET</a> +except that you don’t have to give ST an indent or a +line length (that’s already taken care of, inline, by +<kbd><span class="nobr">\*[ST]...\*[STX]</span></kbd>). If you want string tab 1 +to be left, enter +<br/> +<span class="pre-in-pp"> + .ST 1 L +</span> +If you want it to be left and +<a href="definitions.html#filled">filled</a>, enter +<br/> +<span class="pre-in-pp"> + .ST 1 L QUAD +</span> +If you want it to be justified, enter +<br/> +<span class="pre-in-pp"> + .ST 1 J +</span> +See the +<a href="#string-tabs-tut">Quickie tutorial on string tabs</a> +for a full explanation of setting up string tabs. +</p> + +<!-- -TAB- --> + +<div class="macro-id-overline"> +<h3 id="tab" class="macro-id">Call tabs</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>TAB</b> <kbd class="macro-args"><tab number></kbd> +</div> +<p class="alias"> +<i>Alias:</i> <b>TB</b> +</p> + +<p> +After tabs have been defined (either with +<a href="#tab-set">TAB_SET</a> +or +<a href="#st">ST</a>), +TAB moves to whatever tab number you pass it as an argument. For +example, +<br/> +<span class="pre-in-pp"> + .TAB 3 +</span> +moves you to tab 3. +</p> + +<div id="note-tn" class="box-tip"> +<p class="tip-top"> +<span class="note">Note:</span> TAB breaks the line preceding it and +advances 1 linespace. Hence, +<br/> +<span class="pre-in-pp"> + .TAB 1 + A line of text in tab 1. + .TAB 2 + A line of text in tab 2. +</span> +produces, on output +<br/> +<span class="pre-in-pp"> + A line of text in tab 1. + A line of text in tab 2. +</span> +If you want the tabs to line up, use +<a href="#tn">TN</a> +(Tab Next) +or, more conveniently, the inline escape +<a href="#tn"><span class="nobr">\*[TB+]</span></a>: +<br/> +<span class="pre-in-pp"> + .TAB 1 + A line of text in tab 1.\*[TB+] + A line of text in tab 2. +</span> +which produces +<br/> +<span class="pre-in-pp"> + A line of text in tab 1. A line of text in tab 2. +</span> +If the text in your tabs runs to several lines, and you want the +first lines of each tab to align, you must use the +<a href="#multicolumns-intro">multi-column</a> macros. +</p> + +<p id="tab-add-note" class="tip-bottom"> +<span class="additional-note">Additional note:</span> Any indents +in effect prior to calling a tab are automatically turned off by +TAB. If you were happily zipping down the page with a left indent +of 2 picas turned on, and you call a tab whose indent from the left +margin is 6 picas, your new distance from the left margin will be 6 +picas, not 6 picas plus the 2 pica indent. +</p> +</div> + +<!-- -TN- --> + +<div class="macro-id-overline"> +<h3 id="tn" class="macro-id">Tab Next</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>TN</b> +<br/>Inline escape: <b>\*[TB+]</b> +</div> + +<p> +TN moves over to the next tab in numeric sequence (tab n+1) without +advancing on the page. See the +<a href="#note-tn">NOTE</a> +in the description of the TAB macro for an example of how TN works. +</p> + +<p> +In tabs that aren’t given the <kbd class="normal">QUAD</kbd> +argument when they’re set up with +<a href="#tab-set" class="normal">TAB SET</a> +or +<a href="#st" class="normal">ST</a>, +you must terminate the line preceding <kbd class="normal">.TN</kbd> +with the <kbd class="normal">\c</kbd> inline escape. Conversely, +if you did give a <kbd>QUAD</kbd> argument to TAB_SET or ST, the +<kbd>\c</kbd> must not be used. +</p> + +<p> +If you find remembering whether to put in the +<kbd class="normal">\c</kbd> bothersome, you may prefer to use the +<a href="definitions.html#inlines" class="normal">inline escape</a> +alternative to +<kbd class="normal">.TN</kbd>, +<a href="inlines.html#tb-plus-mom"><kbd class="normal"><span class="nobr">\*[TB+]</span></kbd></a>, +which works consistently regardless of the fill mode. +</p> + +<div id="tn-note" class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> You must put text in the +<a href="definitions.html#inputline">input line</a> +immediately after TN. Stacking of TN’s is not +allowed. In other words, you cannot do +<br/> +<span class="pre-in-pp"> + .TAB 1 + Some text\c + .TN + Some more text\c + .TN + .TN + Yet more text +</span> +The above example, assuming tabs numbered from 1 to 4, should be entered +<br/> +<span class="pre-in-pp"> + .TAB 1 + Some text\c + .TN + Some more text\c + .TN + \&\c + .TN + Yet more text +</span> + +<kbd>\&</kbd> is a zero-width, non-printing character that groff +recognizes as valid input, hence meets the requirement for input +text following <kbd>.TN</kbd>. +</p> +</div> + +<!-- -TQ- --> + +<div class="macro-id-overline"> +<h3 id="tq" class="macro-id">Tab Quit</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>TQ</b> +</div> + +<p> +TQ takes you out of whatever tab you were in, advances 1 linespace, +and restores the left margin, line length, quad direction and +<a href="definitions.html#filled">fill mode</a> +that were in effect prior to invoking any tabs. +</p> + +<div class="rule-short" style="margin-bottom: 24px;"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="multicolumns-intro" class="macro-group">Multiple columns</h2> + +<p> +Tabs are not by nature columnar, which is to say that if the text +inside a tab runs to several lines, calling another tab does not +automatically move to the +<a href="definitions.html#baseline">baseline</a> +of the first line in the previous tab. To demonstrate: +<br/> +<span class="pre-in-pp"> + .TAB 1 + Carrots + Potatoes + Broccoli + .TAB 2 + $1.99/5 lbs + $0.25/lb + $0.99/bunch +</span> +produces, on output +<br/> +<span class="pre-in-pp"> + Carrots + Potatoes + Broccoli + $1.99/5 lbs + $0.25/lb + $0.99/bunch +</span> +The multi-column macros allow you to set tabs in columnar fashion, +rather than line by line. When you invoke multi-column mode (with +<kbd><a href="#mco">.MCO</a></kbd> – +<span style="text-decoration: underline">M</span>ulti-<span style="text-decoration: underline">C</span>olumn <span style="text-decoration: underline">O</span>n), +mom saves the position of the current baseline. +<kbd><a href="#mcr">.MCR</a></kbd> +(<span style="text-decoration: underline">M</span>ulti-<span style="text-decoration: underline">C</span>olumn <span style="text-decoration: underline">R</span>eturn) +at any point while multi-columns are on returns you to the saved +position. Exiting multi-columns +(<kbd><a href="#mcx">.MCX</a></kbd> – +<span style="text-decoration: underline">M</span>ulti-<span style="text-decoration: underline">C</span>olumn e<span style="text-decoration: underline">X</span>it) +quits the current tab (if you’re in one) and moves you to the +bottom of the longest column. (Note that you do not have to use +multi-columns in conjunction with tabs.) +</p> + +<p> +Using our example above, but setting it in multi-column mode, +<br/> +<span class="pre-in-pp"> + .MCO + .TAB 1 + Carrots + Potatoes + Broccoli + .MCR + .TAB 2 + $1.99/5 lbs + $0.25/lb + $0.99/bunch + .MCX +</span> +produces +<br/> +<span class="pre-in-pp"> + Carrots $1.99/5 lbs + Potatoes $0.25/lb + Broccoli $0.99/bunch +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> Do not confuse MCO with +the +<a href="docprocessing.html#columns">COLUMNS</a> +macro in the +<a href="docprocessing.html#docprocessing">document processing macros</a>. +</p> +</div> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Additional Note:</span> +Do not use multi-columns with +<a href="docprocessing.html#slide">DOCTYPE SLIDES</a> +because MCX uses the lowest line on the page to determine column +depth. Owing to the fact that both headers and footers are printed +prior to slides receiving text, MCX will always go to the +footer position. If you need functionality similar to MCO/MCX, use +the groff requests <kbd>.mk</kbd> and <kbd>.rt</kbd>. See +<kbd>info groff mk</kbd>. +</p> +</div> + +<div id="index-multicolumns" class="macro-list-container"> +<h3 class="macro-list">Multi-columns macros</h3> + +<ul class="macro-list"> + <li><a href="#mco">MCO</a> – begin multi-column setting</li> + <li><a href="#mcr">MCR</a> – return to top of column</li> + <li><a href="#mcx">MCX</a> – exit multi-columns</li> +</ul> +</div> + +<!-- -MCO- --> + +<div class="macro-id-overline"> +<h3 id="mco" class="macro-id">Begin multi-column setting</h3> +</div> + +<div class="box-macro-args"> + Macro: <b>MCO</b> +</div> + +<p> +MCO (<span style="text-decoration: underline;">M</span>ulti-<span style="text-decoration: underline;">C</span>olumn <span style="text-decoration: underline;">O</span>n) is the macro you use to begin multi-column +setting. It marks the current +<a href="definitions.html#baseline">baseline</a> +as the top of your columns, for use later with +<a href="#mcr">MCR</a>. +See the +<a href="#multicolumns-intro">introduction to columns</a> +for an explanation of multi-columns and some sample +input. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> Do not confuse MCO with +the +<a href="docprocessing.html#columns">COLUMNS</a> +macro in the +<a href="docprocessing.html#docprocessing">document processing macros</a>. +</p> +</div> + +<!-- -MCR- --> + +<div class="macro-id-overline"> +<h3 id="mcr" class="macro-id">Return to top of column</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>MCR</b> +</div> + +<p> +Once you’ve turned multi-columns on (with +<kbd><a href="#mco">.MCO</a></kbd>), +<kbd>.MCR</kbd>, at any time, returns you to the top of +your columns. +</p> + +<!-- -MCX- --> + +<div class="macro-id-overline"> +<h3 id="mcx" class="macro-id">Exit multi-columns</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>MCX</b> <kbd class="macro-args">[ <distance to advance below longest column> ]</kbd> +</div> +<p class="requires"> +• Optional argument requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +MCX takes you out of any tab you were in (by silently invoking +<kbd><a href="#tq">.TQ</a></kbd>) +and advances to the bottom of the longest column. +</p> + +<p> +Without an argument, MCX advances 1 linespace below the longest +column. Linespace, in this instance, is the +<a href="definitions.html#leading">leading</a> +in effect at the moment MCX is invoked. +</p> + +<p> +If you pass the <kbd><distance></kbd> argument to MCX, it +advances 1 linespace below the longest column (see above) PLUS the +distance specified by the argument. The argument requires a unit +of measure; therefore, to advance an extra 6 points below where MCX +would normally place you, you’d enter +<br/> +<span class="pre-in-pp"> + .MCX 6p +</span> +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> If you wish to advance a precise +distance below the +<a href="definitions.html#baseline">baseline</a> +of the longest column, use MCX with an argument of 0 (zero; no unit +of measure required) in conjunction with the +<a href="#ald">ALD</a> +macro, like this: +<br/> +<span class="pre-in-pp" style="margin-bottom: -12px;"> + .MCX 0 + .ALD 24p +</span> +</p> +</div> + +<p> +The above advances to precisely 24 points below the baseline +of the longest column. +</p> + +<div class="rule-short" style="margin-bottom: 24px;"><hr/></div> + +<!-- ==================================================================== --> + +<h2 id="indents-intro" class="macro-group">Indents</h2> + +<p> +With mom’s indents, you can indent from the left, the right, +or both margins. In addition, mom provides temporary left indents +(i.e., only one line is indented, as at the start of a paragraph) +and “hanging” left indents (the reverse of a temporary +indent; the first line isn’t indented, subsequent lines are). +</p> + +<h3 id="indents-handling" class="docs">How mom handles indents</h3> + +<p> +Mom provides five kinds of indents: left, right, both, temporary, +and hanging. Each is invoked by its own name: +</p> +<ul style="margin-top: -.5em; margin-bottom: -.5em;"> +<li>IL – Indent Left</li> +<li>IR – Indent Right</li> +<li>IB – Indent Both</li> +<li>HI – Hanging Indent</li> +<li>TI – Temporary Indent</li> +</ul> + +<p> +In addition, there are four macros to control exiting from +indents: +</p> +<ul style="margin-top: -.5em; margin-bottom: -.5em;"> +<li>IQ – quit all active indents</li> +<li>ILX – exit indent style left</li> +<li>IRX – exit indent style right</li> +<li>IBX – exit indent style both</li> +</ul> + +<p> +This section deals exclusively with IL, IR, and IB. For an +explanation of hanging and temporary indents—how they work and +how to use them—see +<a href="#hi">Hanging indents</a> +and +<a href="#ti">Temporary indents</a>. +</p> + +<p> +The first time you invoke any of mom’s indents, you must +supply a measure. For example, +<br/> +<span class="pre-in-pp"> + .IL 2P +</span> +indents text 2 picas from the left margin (or current tab indent). +</p> + +<p> +When you want to exit the above indent, use either +<br/> +<span class="pre-in-pp" style="margin-bottom: -1em;"> + .IQ +</span> +or +<span class="pre-in-pp" style="margin-top: -.5em;"> + .ILX +</span> +The next time you want the same indent, invoke it without the +argument, like this: +<br/> +<span class="pre-in-pp"> + .IL +</span> +As you can see, once you’ve supplied a measure to an indent +macro, mom stores the value, obviating the need to repeat it on +subsequent invocations. And mom doesn’t just store the +measure—she hangs on to it tenaciously. Arguments passed to +IL, IR, and IB are additive. Consider the following: +<br/> +<span class="pre-in-pp"> + .LL 20P + .IR 2P \"Indent right by 2 picas + A first block of text... + ... + ... + .IQ \"Turn indent off + A second block of text... + ... + ... + .IR 2P \"Indent right by an additional 2 picas (i.e. 4 picas) + A third block of text... + ... + ... +</span> +The first block of text is right indented by 2 picas (i.e. the line +length is shortened by 2 picas to 18 picas). The second block of +text, after IQ, is, as you’d expect, set to the full measure. +The third block of text—the one to pay attention to—is +not right indented by 2 picas, but rather by 4 picas. Mom adds +the value of arguments to IL, IR, and IB to whatever value is already +in effect. +</p> + +<p> +If you wanted the third block of text in the example above to be +right indented by just 2 picas (the original measure given to IR), +you would enter <kbd>.IR</kbd> without an argument. +</p> + +<p> +Because indent arguments are additive, putting a minus sign in front +of the argument can be used to subtract from the current value. +In the following example, the first line is indented 18 points, +the second is indented 36 points (18 + 18), and the third is again +indented 18 points (36 - 18). +<br/> +<span class="pre-in-pp"> + .IL 18p \"Indent left by 18 points = 18 points + Now is the time + .IL 18p \"Indent left by 18 points more = 36 points + for all good men to come + .IL -18p \"Indent left by 18 points less = 18 points + to the aid of the party. +</span> +Sometimes, you may want to clear out the stored indent +values—let mom start indenting with a clean slate, as it +were. Giving the optional argument <kbd>CLEAR</kbd> to any of the +“indent quit” macros resets them to zero. +</p> +<ul style="margin-top: -.5em; margin-bottom: -.5em;"> + <li>IQ CLEAR – quit and clear all indents</li> + <li>ILX CLEAR – quit and clear indent style left</li> + <li>IRX CLEAR – quit and clear indent style right</li> + <li>IBX CLEAR – quit and clear indent style both</li> +</ul> + +<p> +Indent styles may be combined and manipulated separately. You +could, for example, have a left indent of 4 picas and a right indent +of 6 picas and control each separately, as in the following example. +<br/> +<span class="pre-in-pp"> + .IL 4P \"Indent left 4 picas + .IR 6P \"Indent right 6 picas + Some text + .IRX \"Turn off the right indent only + More text \"Text is still indented 4 picas left +</span> +If, at <kbd>.IRX</kbd>, you wanted the text afterwards to have no +indents (either left or right), you would enter <kbd>.IQ</kbd>, +which exits all indent styles at once. +</p> + +<p> +A word of advice: Indents are best used only when you have a +compelling reason not to change the current left margin or line +length. In many instances where indents might seem expedient, +it’s better to use tabs, or actually change the left margin +or the line length. Mom’s indenting macros are flexible and +powerful, but easy to get tangled up in. +</p> + +<div class="box-tip"> +<p class="tip"> +<span class="note">Note:</span> see the section +<a href="docprocessing.html#behaviour">Typesetting macros during document processing</a> +for information and advice on using indents with the +<a href="docprocessing.html#docprocessing">document processing macros</a>. +</p> +</div> + +<div id="index-indents" class="macro-list-container"> +<h3 class="macro-list">Indents macros</h3> + +<ul class="macro-list"> + <li><a href="#il">IL</a> – Indent left</li> + <li><a href="#ir">IR</a> – Indent right</li> + <li><a href="#ib">IB</a> – Indent both</li> + <li><a href="#ti">TI</a> – Temporary indent, left</li> + <li><a href="#hi">HI</a> – Hanging Indent + <ul style="margin-left: -.5em; list-style-type: disc;"> + <li><a href="#num-lists">Recipe: a numbered list using hanging indents</a></li> + </ul></li> + <li><a href="#iq">IQ</a> – Quit indents, all</li> + <li><a href="#iq">ILX</a> – Exit indent style left</li> + <li><a href="#iq">IRX</a> – Exit indent style right</li> + <li><a href="#iq">IBX</a> – Exit indent style both</li> +</ul> +</div> + +<!-- -IL- --> + +<div class="macro-id-overline"> +<h3 id="il" class="macro-id">Indent left</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>IL</b> <kbd class="macro-args">[ <measure> ]</kbd> +</div> +<p class="requires"> +• The optional argument requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +IL indents text from the left margin of the page, or if you’re +in a tab, from the left edge of the tab. Once IL is on, the left +indent is applied uniformly to every subsequent line of text, even +if you change the line length. +</p> + +<p> +The first time you invoke <kbd>.IL</kbd>, you must give it a +measure. Subsequent invocations with a measure add to the previous +measure. A minus sign may be prepended to the argument to subtract +from the current measure. The +<kbd><a href="inlines.html#inline-stringwidth-groff">\w</a></kbd> +<a href="definitions.html#inlines">inline escape</a> +may be used to specify a text-dependent measure, in which case no +unit of measure is required. For example, +<br/> +<span class="pre-in-pp"> + .IL \w'margarine' +</span> +indents text by the width of the word “margarine”. +</p> + +<p> +With no argument, IL after an ILX indents by its last active value. See the +<a href="#indents-handling">explanation of how mom handles indents</a> +for more details. +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="note">Note:</span> Calling a tab (with +<kbd><a href="#tab">.TAB <n></a></kbd>) +automatically cancels any active indents. +</p> + +<p class="tip-bottom"> +<span class="additional-note">Additional note:</span> Invoking IL +automatically turns off IB. +</p> +</div> + +<!-- -IR- --> + +<div class="macro-id-overline"> +<h3 id="ir" class="macro-id">Indent right</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>IR</b> <kbd class="macro-args">[ <measure> ]</kbd> +</div> +<p class="requires"> +• The optional argument requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +IR indents text from the right margin of the page, or if +you’re in a tab, from the end of the tab. +</p> + +<p> +The first time you invoke <kbd>.IR</kbd>, you must give it a +measure. Subsequent invocations with a measure add to the previous +indent measure. A minus sign may be prepended to the argument to +subtract from the current indent measure. The +<kbd><a href="inlines.html#inline-stringwidth-groff">\w</a></kbd> +<a href="definitions.html#inlines">inline escape</a> +may be used to specify a text-dependent measure, in which case no +unit of measure is required. For example, <br/> +<span class="pre-in-pp"> + .IR \w'jello' +</span> +indents text by the width of the word “jello”. +</p> + +<p> +With no argument, IR after an IRX indents by its last active value. See the +<a href="#indents-handling">explanation of how mom handles indents</a> +for more details. +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="note">Note:</span> Calling a tab (with +<kbd><a href="#tab">.TAB <n></a></kbd>) +automatically cancels any active indents. +</p> + +<p class="tip-bottom"> +<span class="additional-note">Additional note:</span> Invoking IR +automatically turns off IB. +</p> +</div> + +<!-- -IB- --> + +<div class="macro-id-overline"> +<h3 id="ib" class="macro-id">Indent both</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>IB</b> <kbd class="macro-args">[ <indent-1> <indent-2> ]</kbd> +</div> +<p class="requires"> +• The optional arguments require a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +IB allows you to set or invoke a left and a right indent at the same +time. +</p> + +<p> +If you supply only an <kbd>indent-1</kbd> argument, the argument is +the amount to indent from both the left and right margins. If you +give both <kbd>indent-1</kbd> and <kbd>indent-2</kbd>, the first is +the indent from the left margin and the second is the indent from +the right margin. +</p> + +<p> +As with IL and IR, the measures are added to the values previously +passed to the macro. Hence, if you wish to change just one of the +values, you must give an argument of zero to the other. (A word of +advice: If you need to manipulate left and right indents separately, +use a combination of IL and IR instead of IB. You’ll save +yourself a lot of grief.) +</p> + +<p> +A minus sign may be prepended to the arguments to subtract from +their current values. The +<a href="inlines.html#inline-stringwidth-groff"><kbd>\w</kbd></a> +<a href="definitions.html#inlines">inline escape</a> +may be used to specify text-dependent measures, in which case no +unit of measure is required. For example, +<br/> +<span class="pre-in-pp"> + .IB \w’margarine’ \w'jello' +</span> +left indents text by the width of the word “margarine” +and right indents by the width of “jello”. +</p> + +<p> +Like IL and IR, IB with no argument after an IBX indents by its +last active values. See the +<a href="#indents-handling">explanation of how mom handles indents</a> +for more details. +</p> + +<div class="box-tip"> +<p class="tip-top"> +<span class="note">Note:</span> Calling a tab (with +<a href="#tab"><kbd>.TAB <n></kbd></a>) +automatically cancels any active indents. +</p> + +<p class="tip-bottom"> +<span class="additional-note">Additional note:</span> Invoking IB +automatically turns off IL and IR. +</p> +</div> + +<!-- -TI- --> + +<div class="macro-id-overline"> +<h3 id="ti" class="macro-id">Temporary (left) indent</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>TI</b> <kbd class="macro-args">[ <measure> ]</kbd> +</div> +<p class="requires"> +• The optional argument requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +A temporary indent is one that applies only to the first line of +text that comes after it. Its chief use is indenting the first line +of paragraphs. (Mom’s +<a href="docelement.html#pp">PP</a> +macro, for example, uses a temporary indent.) +</p> + +<p> +The first time you invoke <kbd>.TI</kbd>, you must give +it a measure. If you want to indent the first line of a paragraph +by, say, 2 +<a href="definitions.html#em">ems</a>, +do +<br/> +<span class="pre-in-pp"> + .TI 2m +</span> +Subsequent invocations of TI do not require you to supply a measure; +mom keeps track of the last measure you gave it. +</p> + +<p> +Because temporary indents are temporary, there’s no need to +turn them off. +</p> + +<div class="box-important"> +<p class="tip"> +<span class="important">IMPORTANT:</span> Unlike IL, IR, and IB, +measures given to TI are <i>not</i> additive. In the following +example, the second <kbd>.TI 2P</kbd> is exactly 2 picas. +<br/> +<span class="pre-in-pp" style="margin-bottom: -18px;"> + .TI 1P + The beginning of a paragraph... + .TI 2P + The beginning of another paragraph... +</span> +</p> +</div> + +<!-- -HI- --> + +<div class="macro-id-overline"> +<h3 id="hi" class="macro-id">Hanging indent</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>HI</b> <kbd class="macro-args">[ <measure> ]</kbd> +</div> +<p class="requires"> +• The optional argument requires a <a href="definitions.html#unitofmeasure">unit of measure</a> +</p> + +<p> +A hanging indent looks like this: +<br/> +<span class="pre-in-pp"> + The thousand injuries of Fortunato I had borne as best I + could, but when he ventured upon insult, I vowed + revenge. You who so well know the nature of my soul + will not suppose, however, that I gave utterance to a + threat, at length I would be avenged... +</span> +The first line of text “hangs” outside the left margin. +</p> + +<p> +In order to use hanging indents, you must first have a left indent +active (set with either +<kbd><a href="#il">.IL</a></kbd> +or +<kbd><a href="#ib">.IB</a></kbd>). +Mom will not hang text outside the left margin set with +<kbd><a href="#l-margin">.L_MARGIN</a></kbd> +or outside the left margin of a tab. +</p> + +<p> +The first time you invoke <kbd>.HI</kbd>, you must give +it a measure. If you want the first line of a paragraph to hang by, +say, 1 pica, do +<br/> +<span class="pre-in-pp"> + .IL 1P + .HI 1P +</span> +Subsequent invocations of HI do not require you to supply a measure; +mom keeps track of the last measure you gave it. +</p> + +<p> +Generally speaking, you should invoke HI immediately prior to the +line you want hung (i.e. without any intervening +<a href="definitions.html#controllines">control lines</a>). +And because hanging indents affect only one line, there’s no +need to turn them off. +</p> + +<div class="box-important"> +<p class="tip"> +<span class="important">IMPORTANT:</span> Unlike IL, IR, and IB, +measures given to HI are NOT additive. Each time you pass a measure +to HI, the measure is treated literally. +</p> +</div> + +<h4 id="num-lists" class="macro-id">Recipe: A numbered list using hanging indents</h4> + +<div class="box-tip" style="margin-top: -.5em; margin-bottom: -.5em;"> +<p class="tip"> +<span class="note">Note:</span> mom has macros for setting lists (see +<a href="docelement.html#list-intro">Nested lists</a>). +This recipe exists to demonstrate the use of hanging indents only. +</p> +</div> + +<p style="margin-top: 1.5em;"> +<span class="pre-in-pp"> + .PAGE 8.5i 11i 1i 1i 1i 1i + .FAMILY T + .FT R + .PT_SIZE 12 + .LS 14 + .JUSTIFY + .KERN + .SS 0 + .IL \w'\0\0.' + .HI \w'\0\0.' + 1.\0The most important point to be considered is whether the + answer to the meaning of Life, the Universe, and Everything + really is 42. We have no-one’s word on the subject except + Mr. Adams’. + .HI + 2.\0If the answer to the meaning of Life, the Universe, + and Everything is indeed 42, what impact does this have on + the politics of representation? 42 is, after all not a + prime number. Are we to infer that prime numbers don’t + deserve equal rights and equal access in the universe? + .HI + 3.\0If 42 is deemed non-exclusionary, how do we present it + as the answer and, at the same time, forestall debate on its + exclusionary implications? +</span> +First, we invoke a left indent with a measure equal to the width of +2 +<a href="definitions.html#figurespace">figures spaces</a> +plus a period (using the +<a href="inlines.html#inline-stringwidth-groff"><kbd>\w</kbd></a> +inline escape). At this point, the left indent is active; text +afterwards would normally be indented. However, we invoke a +hanging indent of exactly the same width, which hangs the first +line (and first line only!) to the left of the indent by the +same distance (in this case, that means “out to the left +margin”). Because we begin the first line with a number, +a period, and a figure space, the actual text (“The most +important point...”) starts at exactly the same spot as the +indented lines that follow. +</p> + +<p> +Notice that subsequent invocations of <kbd>.HI</kbd> don’t +require a measure to be given. +</p> + +<p> +Paste the example above into a file and preview it with +<br/> +<span class="pre-in-pp"> + pdfmom filename.mom > filename.pdf +</span> +to see hanging indents in action. +</p> + +<!-- -IX- --> + +<div class="macro-id-overline"> +<h3 id="iq" class="macro-id">Quitting indents</h3> +</div> + +<div class="box-macro-args"> +Macro: <b>IQ</b> <kbd class="macro-args">[ CLEAR ]</kbd> (quit any/all indents — see IMPORTANT NOTE) +</div> +<br/> + +Macro: <b>ILX</b> <kbd class="macro-args">[ CLEAR ]</kbd> (exit Indent Left) +<br/> + +Macro: <b>IRX</b> <kbd class="macro-args">[ CLEAR ]</kbd> (exit Indent Right) +<br/> + +Macro: <b>IBX</b> <kbd class="macro-args">[ CLEAR ]</kbd> (exit Indent Both) + +<div class="box-important"> +<p class="tip-top"> +<span class="important">IMPORTANT NOTE:</span> The original macro +for quitting all indents was IX. This usage has been deprecated in +favour of IQ. IX will continue to behave as before, but mom will +issue a warning to stderr indicating that you should update your +documents. +</p> + +<p class="tip-bottom"> +As a consequence of this change, ILX, IRX and IBX may now also be +invoked as ILQ, IRQ and IBQ. Both forms are acceptable. +</p> +</div> + +<p> +Without an argument, the macros to quit indents merely restore your +original margins and line length. The measures stored in the indent +macros themselves are saved so you can call them again without +having to supply a measure. +</p> + +<p> +If you pass these macros the optional argument <kbd>CLEAR</kbd>, +they not only restore your original left margin and line length, but +also clear any values associated with a particular indent style. +The next time you need an indent of the same style, you have to +supply a measure again. +</p> + +<p> +<kbd>.IQ CLEAR</kbd>, as you’d suspect, +quits and clears the values for all indent styles at once. +</p> + +<div class="rule-long"><hr/></div> + +<!-- Navigation links --> +<table style="width: 100%; margin-top: 12px;"> +<tr> + <td style="width: 33%;"><a href="toc.html">Back to Table of Contents</a></td> + <td style="width: 33%; text-align: center;"><a href="#top">Top</a></td> + <td style="width: 33%; text-align: right;"><a href="goodies.html#top">Next: Goodies</a></td> +</tr> +</table> + +</div> + +<div class="bottom-spacer"><br/></div> + +</body> +</html> diff --git a/contrib/mom/momdoc/using.html b/contrib/mom/momdoc/using.html new file mode 100644 index 0000000..c93e385 --- /dev/null +++ b/contrib/mom/momdoc/using.html @@ -0,0 +1,319 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004-2020 Free Software Foundation, Inc. +Written by Peter Schaffter (peter@schaffter.ca). + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"/> + <title>Using mom</title> + <link rel="stylesheet" type="text/css" href="stylesheet.css" /> +</head> + +<body style="background-color: #f5faff;"> + +<!-- ==================================================================== --> + +<div id="top" class="page"> + +<!-- Navigation links --> +<table style="width: 100%;"> + <tr> + <td><a href="toc.html">Back to Table of Contents</a></td> + <td style="text-align: right;"><a href="typesetting.html#top">Next: The typesetting macros</a></td> + </tr> + </table> + +<h1 id="using" class="docs">Using mom</h1> + +<div style="text-align: left; margin-left: 33%"> +<ul class="no-enumerator" style="margin-left: -2.5em;"> + <li><a href="#using-intro">Introduction</a></li> + <li><a href="#using-macros">How to input mom’s macros</a></li> + <li><a href="#viewing">Processing and viewing documents</a> + <ul> + <li class="item"><a href="#pdf">Mom and PDF</a></li> + <li class="item"><a href="#pdfmom">pdfmom</a></li> + </ul></li> + <li><a href="#previewing">Automatic previewing of documents</a></li> +</ul> +</div> + +<div class="rule-short" style="margin-top: 18px;"><hr/></div> + +<h2 id="using-intro" class="docs">Introduction</h2> + +<p> +As explained in the section +<a href="intro.html#top">What is mom?</a>, +mom can be used in two ways: for straightforward typesetting or for +document processing. The difference between the two is that in +straightforward typesetting, every macro is a literal instruction +that determines precisely how text following it will look. Document +processing, on the other hand, uses markup tags (e.g. <kbd>.PP</kbd> +for paragraphs, <kbd>.HEADING</kbd> for different levels of heads, +<kbd>.FOOTNOTE</kbd> for footnotes, etc.) that perform typesetting +operations automatically. +</p> + +<p> +You tell mom that you want to use the document processing macros +with the +<a href="docprocessing.html#start">START</a> +macro. After START, mom determines the appearance of +text following the markup tags automatically, although you, the +user, can easily change how the tags are interpreted. +</p> + +<h2 id="using-macros" class="docs">How to input mom’s macros</h2> + +<p> +Regardless of whether you’re preparing a term paper or making a +flyer for your lost dog, the following apply. +</p> + +<ol style="margin-top: -.5em; margin-bottom: -.5em;"> + <li> + You need a good text editor for inputting mom files. + <br/> + <span style="display: block; margin-top: .25em; margin-bottom: .5em;"> + I cannot recommend highly enough that you use an editor that + lets you write syntax highlighting rules for mom’s + macros and + <a href="definitions.html#inlines">inline escapes</a>. + Simply colourizing macros and inlines to half-intensity can be + enough to make text stand out clearly from formatting commands. + Mom herself comes with a complete set of syntax highlighting + rules for the vim editor. A number of freely available editors + come with groff syntax highlighting rules, which are sufficient + for mom files, though not as colourful or complete as the vim + rules that ship with mom. + </span> + </li> + <li> + Macros begin with a period (dot) at the left margin of your text + editor’s screen, and must be entered in upper case (capital) + letters. + </li> + <li> + Macro + <a href="definitions.html#arguments">arguments</a> + are separated from the macro itself by spaces. Multiple + arguments to the same macro are separated from each + other by spaces. Any number of spaces may be used. + </li> + <li> + Arguments to a macro must appear on the same line as the + macro. + <br/> + <span style="display: block; margin-top: .25em; margin-bottom: .5em;"> + If the argument list is very long, you may use the + backslash character (<kbd>\</kbd>) to break the line visually. + From groff’s point of view, the backslash and newline are + invisible. Thus, for example, + <span class="pre" style="margin-bottom: -2.25em"> + .HEADING_STYLE 1 FAMILY Garamond FONT B SIZE +2 + </span> + and + <span class="pre" style="margin-bottom: -2.25em"> + .HEADING_STYLE 1 \ + FAMILY Garamond \ + FONT B \ + SIZE +2 + </span> + </span> + are exactly equivalent. + </li> + <li> + Any argument (except a + <a href="definitions.html#stringargument">string argument</a>) + that is not a digit must be entered in upper case + (capital) letters. + </li> + <li> + Any argument that requires a plus or minus sign must + have the plus or minus sign prepended to the argument + with no intervening space (e.g. <kbd>+2</kbd>). + </li> + <li> + Any argument that requires a + <a href="definitions.html#unitofmeasure">unit of measure</a> + must have the unit appended directly to the argument, with no + intervening space (e.g. <kbd>.5i</kbd>). + </li> + <li> + <a href="definitions.html#stringargument">String arguments</a>, + in the sense of this manual, must be surrounded by double-quotes + (e.g. <kbd>"text"</kbd>). Multiple + string arguments are separated from each other by spaces (with + each argument surrounded by double-quotes). + <br/> + <span style="display: block; margin-top: .25em; margin-bottom: .5em;"> + If a string argument becomes + uncomfortably long, you may break it into two or more lines + with the backslash character. + <span class="pre"> + .SUBTITLE "An In-Depth Consideration of the \ + Implications of Forty-Two as the Answer to Life, \ + The Universe, and Everything" + </span> + </span> + </li> +</ol> + +<div class="box-tip"> +<p class="tip"> +<span class="tip">Tip:</span> +It’s important that your documents be easy to read and +understand in a text editor. One way to achieve this is to group +macros that serve a similar purpose together, and separate them from +other groups of macros with a comment line. In groff, that’s +done with <kbd>\#</kbd> (backslash-pound) or <kbd>.\"</kbd> +(period-backslash-doublequote) on a line by itself. Either +instructs groff to ignore the remainder of the line, which may or +may not contain text. Consider the following, which is a template +for starting the chapter of a book. +<br/> +<span class="pre-in-pp"> + \# Reference/meta-data + .TITLE "My Pulitzer Novel" + .AUTHOR "Joe Blow" + .CHAPTER 1 + \# Template + .DOCTYPE CHAPTER + .PRINTSTYLE TYPESET + \# Type style + .FAM P + .PT_SIZE 10 + .LS 12 + \# + .START +</span> +You may also, if you wish, add a comment to the end of a line with +<kbd>\"</kbd> (no period), like this: +<br/> +<span class="pre-in-pp"> + .FAMILY P \" Maybe Garamond instead? +</span> +</p> +</div> + +<h2 id="viewing" class="docs">Processing and viewing documents</h2> + +<p> +The most basic command-line usage for processing a file formatted +with the mom macros is +<br/> +<span class="pre-in-pp"> + groff -mom filename.mom > filename.ps +</span> +which processes the .mom file and dumps the output into a +viewable/printable PostScript file. +</p> + +<h3 id="pdf" class="docs">Mom and PDF</h3> + +<p> +Adobe’s Portable Document Format (PDF) has largely supplanted +PostScript, of which it is a subset, as the standard for typeset +documents. While printed versions of documents in either format +will be identical, PDF documents, when viewed at the screen, may +also contain clickable links and a number of other special features. +</p> + +<p> +As of version 2.0, mom supports full PDF integration. The creation +and processing of mom files into PostScript documents remains +unchanged from 1.x, but the expected and recommended format of final +documents is now PDF. +</p> + +<p> +The manual, +<a href="http://www.schaffter.ca/mom/pdf/mom-pdf.pdf"><span class="book-title">Producing PDFs with groff and mom</span></a>, +explains and demonstrates the PDF-specific macros that are available +in mom, as well as the use of <strong>pdfmom</strong>, the +recommended way to process mom files. +</p> + +<h4 id="pdfmom" class="docs">pdfmom</h4> + +<p> +Groff provides more than one way to generate PDF documents, +but when processing files formatted with the mom macros, +<strong>pdfmom</strong> is the recommended and most robust way to do +it: +<br/> +<span class="pre-in-pp"> + pdfmom filename.mom > filename.pdf +</span> +<strong>pdfmom</strong> is a wrapper around groff, and accepts all +groff’s command-line options as listed in the groff manpage. +Full usage is explained in the manual, +<a href="http://www.schaffter.ca/mom/pdf/mom-pdf.pdf"><span class="book-title">Producing PDFs with groff and mom</span></a>. +</p> + +<p> +PDF links in a document, including linked entries in the +Table of Contents, are identified by colour. When printing +documents with links, you will most likely not want the link +text coloured. The groff option, <kbd>-c</kbd>, disables colour +throughout a document; thus, when preparing a document for printing, +you should use: +<br/> +<span class="pre-in-pp"> + pdfmom -c filename.mom > filename.pdf +</span> +<strong>pdfmom</strong> tends to produce large files. You may +reduce their size by piping them through ps2pdf: +<br/> +<span class="pre-in-pp"> + pdfmom -c filename.mom | ps2pdf - filename.pdf +</span> +Be aware, though, that files piped through ps2pdf will lose some pdf +metadata, notably the document window title set with PDF_TITLE. +</p> + +<h2 id="previewing" class="docs">Automatic previewing of documents</h2> + +<p> +Most PDF viewers have a “Watch File” option, which +automatically updates a displayed document whenever there’s +a change. This is useful when preparing documents that require +judgment calls. I recommend creating a keymapping in your +text editor that both saves the mom file and processes it with +<strong>pdfmom</strong>. The displayed PDF then automatically +reflects whatever changes you save to the mom file. +</p> + +<div class="rule-long"><hr/></div> + +<!-- Navigation links --> +<table style="width: 100%; margin-top: 12px;"> + <tr> + <td style="width: 33%;"><a href="toc.html">Back to Table of Contents</a></td> + <td style="width: 33%; text-align: center;"><a href="#top">Top</a></td> + <td style="width: 33%; text-align: right;"><a href="typesetting.html#top">Next: The typesetting macros</a></td> +</tr> +</table> + +</div> + +<div class="bottom-spacer"><br/></div> + +</body> +</html> diff --git a/contrib/mom/momdoc/version-2.html b/contrib/mom/momdoc/version-2.html new file mode 100644 index 0000000..bd1cb8d --- /dev/null +++ b/contrib/mom/momdoc/version-2.html @@ -0,0 +1,424 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004-2020 Free Software Foundation, Inc. +Written by Peter Schaffter (peter@schaffter.ca). + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"/> + <title>Mom -- Version 2.0 notes</title> + <link rel="stylesheet" type="text/css" href="stylesheet.css" /> +</head> + +<body style="background-color: #f5faff;"> + +<!-- ==================================================================== --> + +<div id="top" class="page"> + +<!-- Navigation links --> +<table style="width: 100%;"> +<tr> + <td><a href="toc.html">Back to Table of Contents</a></td> + <td style="text-align: right;"><a href="intro.html#top">Next: Introduction to mom</a></td> +</tr> +</table> + +<h1 class="docs">Version 2.0 notes</h1> + +<div style="width: 70%; margin: auto;"> +<ol style="margin-left: -1em;"> + <li><a href="#prefatory">Prefatory comments</a></li> + <li><a href="#differences">Differences between 2.0 and 1.x</a> + <ul class="no-enumerator" style="padding-left: 0"> + <li><a href="#pdf-support">2.1 PDF support</a> + <ul class="no-enumerator" style="padding-left: 1em"> + <li><a href="#mom-pdf">2.1.1 The manual, <span class="book-title">Producing PDFs with groff and mom</span></a></li> + <li><a href="#pdf-image">2.1.2 PDF_IMAGE</a></li> + </ul></li> + <li><a href="#covers">2.2 Covers</a></li> + <li><a href="#headings">2.3 Headings</a></li> + <li><a href="#margin-notes">2.4 Margin notes</a></li> + <li><a href="#floats">2.5 Floats</a></li> + <li><a href="#table-of-contents">2.5 Tables of contents</a></li> + </ul></li> + <li><a href="#v2.1-changes">Version 2.1 changes</a></li> + <li><a href="#v2.2-changes">Version 2.2 changes</a></li> + <li><a href="#v2.5-changes">Version 2.5 changes</a></li> + <li><a href="#pdfmom">The <strong>pdfmom</strong> wrapper around groff</a></li> + <li><a href="#install-font">The <strong>install-font.sh</strong> script</a></li> +</ol> +</div> + +<div class="rule-medium"><hr/></div> + +<h2 id="prefatory" class="docs">1. Prefatory comments</h2> + +<p> +Version 2.0 comes about as a result of Deri James’ +contribution of <strong>gropdf</strong> to <strong>groff</strong>, +and his subsequent work integrating the device with +<strong>mom</strong>. +</p> + +<p> +Whereas the 1.x releases were oriented toward PostScript output, +2.0 focuses on PDF output, a bias reflected throughout this +documentation. Users are strongly encouraged to process their files +with +<a href="#pdfmom"><strong>pdfmom</strong></a>, +a wrapper around <strong>groff -Tpdf</strong>, in order to take +full advantage of all PDF has to offer. +</p> + +<p> +While portions of mom have been rewritten, and new features +introduced, 2.0 is backwardly compatible with 1.x releases. Changes +are either transparent, or accompanied by notifications on stderr. +</p> + +<p> +The implementation of nested heads has been completely rethought, +as has the manner of styling of them. There are no limits on +how deep the nesting can go. The 1.x macros <kbd>HEAD</kbd>, +<kbd>SUBHEAD</kbd>, and <kbd>SUBSUBHEAD</kbd> may still be used, but +must be re-designed with the new <kbd>HEADING_STYLE</kbd> macro +if their 1.x defaults are not desired. +</p> + +<p> +In conjunction with the changes to nested heads, Table of Contents +generation has also been rethought. Greater flexibility in the +inclusion of toc entry numbering been added. Like nested heads, +there’s a new macro <kbd>TOC_ENTRY_STYLE</kbd> that permits +styling of each level in the toc hierarchy separately. The default +overall layout has also been significantly improved, achieving a +level of typographical elegance formerly lacking. Best of all, the +Table of Contents can now be repositioned to the correct spot at the +top of a document from within the mom source file. +</p> + +<p> +When mom files are processed with <strong>pdfmom</strong>, a PDF +outline for the Contents panel of PDF viewers is automatically +generated. In addition, entries in the Table of Contents +are clickable links when a document is viewed at the screen. +<strong>pdfmom</strong> also permits setting a document’s +papersize within the source file without the corresponding need for +<kbd>-P-p<papersize></kbd> on the command line. +</p> + +<p> +Lastly, while not strictly part of mom, a bash script, +<strong>install-font.sh</strong>, has been posted at the +<a href="https://www.schaffter.ca/mom/">mom site</a>. +The script significantly eases the installation of new +groff families and fonts, with conversion to .pfa +and .t42 being performed by <strong>fontforge</strong>. +</p> + +<h2 id="differences" class="docs">2. Differences between v2.0 and v1.x</h2> + +<h3 id="pdf-support" class="docs">2.1. PDF support</h3> + +<p> +PDF support has been added, with features including the automatic +generation of PDF outlines, embedding of images in PDF format (via +the +<a href="images.html#pdf-image">PDF_IMAGE</a> +macro) and PDF linking (internal and external). +</p> + +<h4 id="mom-pdf" class="docs">2.1.1. Producing PDFs with groff and mom</h4> + +<p> +A manual in PDF format, +<span class="book-title">Producing PDFs with groff and mom</span>, +has been added to the documentation. The file, +<strong>mom-pdf.pdf</strong> can be found in +<br/> +<span class="pre-in-pp"> + /usr/local/share/doc/groff-<version>/pdf/ +</span> +or +<br/> +<span class="pre-in-pp"> + /usr/share/doc/groff-base/pdf/ +</span> +or at +<br/> +<span class="pre-in-pp"> + <a href="http://www.schaffter.ca/mom/momdoc/mom-pdf.pdf">http://www.schaffter.ca/mom/momdoc/mom-pdf.pdf</a> +</span> +PDF usage, and all associated macros except +<a href="#pdf-image">PDF_IMAGE</a>, +are fully explained in the manual, which should be considered an +integral part of the present documentation. In addition, the mom +source file for the manual can be found in +<br/> +<span class="pre-in-pp"> + /usr/local/share/doc/groff-<version>/examples/mom +</span> +or +<br/> +<span class="pre-in-pp"> + /usr/share/doc/groff-base/examples/mom/ +</span> +and provides an excellent demonstration of mom usage. +</p> + +<h4 id="pdf-image" class="docs">2.1.2. PDF_IMAGE</h4> + +<p> +A new macro for embedding PDF images has been added, +<a href="images.html#pdf-image">PDF_IMAGE</a>. +</p> + +<p> +PDF_IMAGE functions similarly to PSPIC and accepts the same +arguments. Differences in implementation are that PDF_IMAGE +requires the image dimensions (the bounding box) to be supplied. +Instructions for getting the bounding box are included in the +documentation entry for PDF_IMAGE. Two additional options, +<kbd>SCALE</kbd> and <kbd>ADJUST</kbd>, allow scaling of the image +and optical centering. +</p> + +<h3 id="covers" class="docs">2.2. Covers</h3> + +<p> +Arguments to +<a href="cover.html#cover">COVER</a> +and +<a href="cover.html#doc-cover">DOC_COVER</a> +may now be given in any order. +</p> + +<h3 id="headings" class="docs">2.3. Headings</h3> + +<p> +The 1.x macros HEAD, SUBHEAD, SUBSUBHEAD, are now deprecated and +have been replaced by the single macro +<a href="docelement.html#heading">HEADING <kbd><n></kbd></a>, +where <kbd><n></kbd> is the heading level. The deprecated +macros may still be used, and conform in style to their original +defaults; they are, however, wrappers around HEADING levels 1 +– 3. Both the wrappers and HEADING itself can take a +<kbd>NAMED <id></kbd> argument, specifying a PDF link +destination. +</p> + +<p> +Styling of headings is managed by the single macro <a +href="docelement.html#heading">HEADING_STYLE <n></a> where +<kbd><n></kbd> conforms to a heading level. The control +macros for HEAD, SUBHEAD and SUBSUBHEAD have been removed. Users +wishing to style the wrappers must use HEADING_STYLE. +</p> + +<p> +PARAHEAD is no longer valid. Paragraph heads in 2.0 are created +by passing the <kbd>PARAHEAD</kbd> argument to HEADING. Mom +will abort with an informational message whenever she encounters +<kbd>.PARAHEAD</kbd>. +</p> + +<h3 id="margin-notes" class="docs">2.4. Margin notes</h3> + +<p> +The macro for setting margin note parameters, +<a href="docelement.html#mn-init">MN_INIT</a>, +has been re-written such that each parameter now has the form +<kbd><PARAMETER> <value></kbd>. This differs +from 1.x where parameters were entered without a preceding +<kbd><PARAMETER></kbd> flag. Parameters may be entered in any +order. Any that are skipped are set to default values. Documents +created with 1.x will have to have their <kbd>MN_INIT</kbd> updated +accordingly. +</p> + +<h3 id="floats" class="docs">2.5. Floats</h3> + +<p> +A +<a href="images.html#floats-intro">FLOAT</a> +macro has been added, which functions similarly to the <kbd>ms</kbd> +macros’ <kbd>.KF/.KE</kbd>, i.e., the contents of the float are +output immediately if there’s room on the page, otherwise +normal text processing continues and the contents are output at the +top of the next page. An <kbd>ADJUST</kbd> argument to FLOAT allows +for optical centering. +</p> + +<h3 id="table-of-contents" class="docs">2.6. Tables of contents</h3> + +<p> +The default look of the Table of Contents has been overhauled to +produce a more typographically pleasing result. All control macros +for TOC title and entry styles have been removed, replaced by +<a href="tables-of-contents.html#toc-title-style">TOC_TITLE_STYLE</a> +and +<a href="tables-of-contents.html#toc-title-style">TOC_ENTRY_STYLE <kbd><n></kbd></a> +where <kbd><n></kbd> corresponds to a heading level. Both +macros permit setting any or all of the style parameters for TOC +titles (i.e. chapters or major sections/divisions of a collated +document) and TOC entries (nested heading levels) at once. +Documents created with 1.x that contain TOCs will need to have their +TOC style updated if the new defaults are unsatisfactory. +</p> + +<p> +Two new TOC control macros have been added, +<a href="tables-of-contents.html#space-toc-items">SPACE_TOC_ITEMS</a> +and +<a href="tables-of-contents.html#auto-relocate-toc">AUTO_RELOCATE_TOC</a>. +SPACE_TOC_ITEMS groups TOC entry levels and separates them with a +discrete amount of whitespace. This leads to improved legibility, +and is highly recommended even though it is not mom’s +default. AUTO_RELOCATE_TOC intelligently repositions the Table +of Contents to the top of a document when the mom source file is +processed with +<a href="pdfmom">pdfmom</a>. +</p> + +<h2 id="v2.1-changes" class="docs">3. Version 2.1 changes</h2> +<p> Version 2.1 adds these features: </p> <ul style="margin-top: -.5em; width: 90%"> + <li>expansion of cover, docheader, page header, and heading + control macros to permit caps, smallcaps, color, and + underscoring</li> + <li>the ability to style every element appearing in docheaders and + automatically-generated cover/title pages separately</li> + <li>macros to place images on cover/title pages</li> + <li>a new macro COVERTEXT that allows adding text (e.g. an + Abstract) to automatically-generated cover/title pages or to + create cover/title pages entirely by hand</li> + <li>separate indent control macros for QUOTES and BLOCKQUOTES</li> + <li>pseudo-smallcaps, including a control macro to choose the + size, weight, and width of the small caps</li> + <li>new <element>_STYLE macros that allow setting + parameters for <element> with a single macro using + keyword/value pairs</li> +</ul> + +<p> +The following changes have been made: +</p> + +<ul style="margin-top: -.5em; width: 90%"> + <li>MISC_AUTOLEAD (including COVER_MISC_AUTOLEAD and + DOC_COVER_MISC_AUTOLEAD) has been replaced in favour of MISC_LEAD, + which takes an absolute leading value rather than one derived + from the point size.</li> + <li>COVER_UNDERLINE and DOC_COVER_UNDERLINE have been + removed in favour of COVER_DOCTYPE_UNDERLINE and + DOC_COVER_DOCTYPE_UNDERLINE.</li> + <li>DOCTYPE NAMED <kbd><string></kbd> no longer accepts a + <kbd>color</kbd> argument; setting the colour for + <kbd><string></kbd> is accomplished with DOCTYPE_COLOR + <kbd><color></kbd>. In addition, the string now has a + complete set of control macros.</li> + <li>Default underscoring of the DOCTYPE NAMED string has been + removed, both in the docheader and on cover/title pages.</li> + <li>No cover/title page data persists, however formatting for the + elements on them does.</li> +</ul> + +<h2 id="v2.2-changes" class="docs">4. Version 2.2 changes</h2> + +<p> +Version 2.2 adds these features: +</p> +<ul style="margin-top: -.5em; width: 90%"> + <li>flex-spacing, an alternative to mom’s default shimming + policy; flex-spacing balances vertical whitespace on the page by + distributing any excess equally at sensible points so that running + text always fills the page to the bottom margin (see + <a href="docprocessing.html#vertical-whitespace-management"> + vertical whitespace management</a>) + </li> + <li>improvements to auto-labelling, such that it is now possible + to link symbolically to auto-labelled preprocessor material and + PDF images (note that you must be running groff 1.22.4 or higher + for this feature) + </li> +</ul> + +<h2 id="v2.5-changes" class="docs">5. Version 2.5 changes</h2> + +<p> +Version 2.5 adds shaded backgrounds and frames that span pages +appropriately when necessary, and a macro to set page or slide +background colour. +</p> + +<h2 id="pdfmom" class="docs">6. pdfmom</h2> + +<p> +Deri James has provided <strong>pdfmom</strong>, a wrapper around +groff that processes mom source files with all the PDF bells and +whistles. Its use is highly recommended. Usage is explained in the +manual, +<a href="http://www.schaffter.ca/mom/pdf/mom-pdf.pdf"> + <span class="book-title">Producing PDFs with groff and mom</span> +</a>. +A significant convenience of pdfmom is that it can, with the +<kbd>-Tps</kbd> flag, be used to pass processing over to Keith +Marshall’s <strong>pdfroff</strong>. This is useful when +processing files that contain PostScript images embedded with +<a href="images.html#pspic">PSPIC</a>. +pdfmom, without the flag, uses groff’s PDF device +(<strong>gropdf</strong>), which only recognizes PDF images that +have been embedded with +<a href="images.html#pdf-image">PDF_IMAGE</a>. +</p> + +<h2 id="install-font" class="docs">7. install-font.sh</h2> + +<p> +A bash script, <strong>install-font.sh</strong>, has been posted at the +<a href="http://www.schaffter.ca/mom/mom-01.html">mom site</a>. +There’s nothing mom-specific about the script, and it is not +an official part of groff. +</p> + +<p> +Installing groff fonts is a multi-step procedure, which, while not +difficult, can be a nuisance. install-font.sh takes +care of all the details, including converting fonts to formats +acceptable to <strong>grops</strong> and <strong>gropdf</strong>, +creating and installing the groff fonts in the appropriate +directories, updating the download files, and installing the +original fonts in a system-wide directory, if desired. +</p> + +<div class="rule-long"><hr/></div> + +<!-- Navigation links --> +<table style="width: 100%; margin-top: 12px;"> +<tr> + <td style="width: 33%;"><a href="toc.html">Back to Table of Contents</a></td> + <td style="width: 20%; text-align: center;"><a href="#top">Top</a></td> + <td style="width: 46%; text-align: right;"><a href="intro.html">Next: Introduction to mom</a></td> +</tr> +</table> + +</div> + +<div class="bottom-spacer"><br/></div> + +</body> +</html> diff --git a/contrib/mom/om.tmac b/contrib/mom/om.tmac new file mode 100644 index 0000000..adb7508 --- /dev/null +++ b/contrib/mom/om.tmac @@ -0,0 +1,24571 @@ +.ig +Mom -- a typesetting/document-processing macro set for groff. + +Copyright (C) 2002-2020 Free Software Foundation, Inc. + Written by Peter Schaffter <peter@schaffter.ca> + PDF integration contributed by Deri James <deri.james@chuzzlewit.co.uk> + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. + +Version 2.5_d +------------- +Antoine de St-Exupéry asserted that elegance in engineering is +achieved not when there is nothing left to add, but when there is +nothing left to take away. + +By those standards, mom is a Rube Goldberg contraption. She was +created over the years while groff, and my understanding of it, +changed and evolved. However, I'm a firm believer in "if it ain't +broke, don't fix it." Version 2.0 removed some of the redundancies +and cruft, but mom still needs some nip and tuck. + +"<anything>" in the description of arguments that can be passed +to a macro means that any argument turns the feature off. + +Thanks to everyone who has contributed suggestions and patches, +and to those whose GPL'd work has been plundered. Special thanks +to Werner Lemberg (margin notes), Tadziu Hoffman (underlining), +Deri James (pdf integration), Robin Haberkorn (tbl integration, eqn +extensions, and float management). +.. +\# +\# ==================================================================== +\# +.if \n(.C \ +. ab [mom]: The groff mom macros do not work in compatibility mode. +\# Check that GNU troff is being run +.if !\n[.g]=1 \ +. ab [mom]: The mom macros require that you be running GNU troff. +\# Check which version of groff is being run +.if (\n[.x]\n[.y] < 118) \ +. ab [mom]: You need GNU troff version 1.18 or higher to run this version of mom. +\# Mom version +.ds version 2.5_d +.if dVERSION \{\ +. ab [mom]: Version \*[version] +.\} +\# Groff revision +.ds short_revision \n[.Y] +.substring short_revision 0 0 +\# +\# Add supplementary styles +.sty \n[.fp] UL \" Ultra Light +.sty \n[.fp] ULI \" Ultra Light Italic +.sty \n[.fp] ULCD \" Ultra Light Condensed +.sty \n[.fp] ULCDI \" Ultra Light Condensed Italic +.sty \n[.fp] ULEX \" Ultra Light Extended +.sty \n[.fp] ULEXI \" Ultra Light Extended Italic +\# +.sty \n[.fp] XL \" Extra Light +.sty \n[.fp] XLI \" Extra Light Italic +.sty \n[.fp] XLCD \" Extra Light Condensed +.sty \n[.fp] XLCDI \" Extra Light Condensed Italic +.sty \n[.fp] XLEX \" Extra Light Extended +.sty \n[.fp] XLEXI \" Extra Light Extended Italic +\# +.sty \n[.fp] TH \" Thin +.sty \n[.fp] THI \" Thin Italic +.sty \n[.fp] THCD \" Thin Condensed +.sty \n[.fp] THCDI \" Thin Condensed Italic +.sty \n[.fp] THEX \" Thin Extended +.sty \n[.fp] THEXI \" Thin Extended Italic +\# +.sty \n[.fp] L \" Light Roman +.sty \n[.fp] LI \" Light Italic +.sty \n[.fp] LCD \" Light Condensed +.sty \n[.fp] LCDI \" Light Condensed Italic +.sty \n[.fp] LEX \" Light Extended +.sty \n[.fp] LEXI \" Light Extended Italic +\# +.sty \n[.fp] BK \" Book Roman +.sty \n[.fp] BKI \" Book Italic +.sty \n[.fp] BKCD \" Book Condensed +.sty \n[.fp] BKCDI \" Book Condensed Italic +.sty \n[.fp] BKEX \" Book Extended +.sty \n[.fp] BKEXI \" Book Extended Italic +\# +.sty \n[.fp] CD \" Medium Condensed +.sty \n[.fp] CDI \" Medium Condensed Italic +.sty \n[.fp] EX \" Medium Extended +.sty \n[.fp] EXI \" Medium Extended Italic +\# +.sty \n[.fp] DB \" DemiBold Roman +.sty \n[.fp] DBI \" DemiBold Italic +.sty \n[.fp] DBCD \" DemiBold Condensed +.sty \n[.fp] DBCDI \" DemiBold Condensed Italic +.sty \n[.fp] DBEX \" DemiBold Extended +.sty \n[.fp] DBEXI \" DemiBold Extended Italic +\# +.sty \n[.fp] SB \" SemiBold Roman +.sty \n[.fp] SBI \" SemiBold Italic +.sty \n[.fp] SBCD \" SemiBold Condensed +.sty \n[.fp] SBCDI \" SemiBold Condensed Italic +.sty \n[.fp] SBEX \" SemiBold Extended +.sty \n[.fp] SBEXI \" SemiBold Extended Italic +\# +.sty \n[.fp] BCD \" Bold Condensed +.sty \n[.fp] BCDI \" Bold Condensed Italic +.sty \n[.fp] BEX \" Bold Extended +.sty \n[.fp] BEXI \" Bold Extended Italic +.sty \n[.fp] BO \" Bold Outline +\# +.sty \n[.fp] XB \" Extra Bold +.sty \n[.fp] XBI \" Extra Bold Italic +.sty \n[.fp] XBCD \" Extra Bold Condensed +.sty \n[.fp] XBCDI \" Extra Bold Condensed Italic +.sty \n[.fp] XBEX \" Extra Bold Extended +.sty \n[.fp] XBEXI \" Extra Bold Extended Italic +\# +.sty \n[.fp] UB \" Ultra Bold +.sty \n[.fp] UBI \" Ultra Bold Italic +.sty \n[.fp] UBCD \" Ultra Bold Condensed +.sty \n[.fp] UBCDI \" Ultra Bold Condensed Italic +.sty \n[.fp] UBEX \" Ultra Bold Extended +.sty \n[.fp] UBEXI \" Ultra Bold Extended Italic +\# +.sty \n[.fp] HV \" Heavy +.sty \n[.fp] HVI \" Heavy Italic +.sty \n[.fp] HVCD \" Heavy Condensed +.sty \n[.fp] HVCDI \" Heavy Condensed Italic +.sty \n[.fp] HVEX \" Heavy Extended +.sty \n[.fp] HVEXI \" Heavy Extended Italic +\# +.sty \n[.fp] BL \" Black +.sty \n[.fp] BLI \" Black Italic +.sty \n[.fp] BLCD \" Black Condensed +.sty \n[.fp] BLCDI \" Black Condensed Italic +.sty \n[.fp] BLEX \" Black Extended +.sty \n[.fp] BLEXI \" Black Extended Italic +.sty \n[.fp] BLO \" Black Outline +\# +.sty \n[.fp] XBL \" Extra Black +.sty \n[.fp] XBLI \" Extra Black Italic +.sty \n[.fp] XBLCD \" Extra Black +.sty \n[.fp] XBLCDI \" Extra Black +.sty \n[.fp] XBLEX \" Extra Black Italic +.sty \n[.fp] XBLEXI \" Extra Black Italic +\# +.sty \n[.fp] UBL \" Ultra Black +.sty \n[.fp] UBLI \" Ultra Black Italic +.sty \n[.fp] UBLCD \" Ultra Black Condensed +.sty \n[.fp] UBLCDI \" Ultra Black Condensed Italic +.sty \n[.fp] UBLEX \" Ultra Black Extended +.sty \n[.fp] UBLEXI \" Ultra Black Extended Italic +\# +.sty \n[.fp] SC \" Small Caps Roman +.sty \n[.fp] SCI \" Small Caps Italic +.sty \n[.fp] SCDB \" Small Caps Demibold +.sty \n[.fp] SCDBI \" Small Caps Demibold Italic +.sty \n[.fp] SCSB \" Small Caps Semibold +.sty \n[.fp] SCSBI \" Small Caps Semibold Italic +\# +\# Instruct grops to use square linecaps and joins. +\# This instruction is also executed in DO_B_MARGIN, NEWPAGE, and HEADER +\# +.if !n \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap' +\# +\# The following PostScript, provided by Tadziu Hoffmann, permits +\# no-fail underlining +\# +.de ul*ps +ps: def +grops begin +/decornone { grops begin /X { } def /Y { } def /y2 -1 def end } def +/decorline { grops begin u neg /uld exch def u /ulw exch def + /X { currentpoint /y0 exch def /x0 exch def } def + /Y { currentpoint /y1 exch def /x1 exch def + drawline /x2 x1 def /y2 y1 def } def end } def +/drawline { gsave ulw setlinewidth 0 setlinecap x1 y1 uld sub moveto + y2 y0 eq { x2 y2 } { x0 y0 } ifelse uld sub lineto stroke + grestore } def +decornone +/uld 0 def +/ulw 0 def +/A { X show Y } def +/B { 0 SC 3 -1 roll X widthshow Y } def +/C { 0 exch X ashow Y } def +/D { 0 exch 0 SC 5 2 roll X awidthshow Y } def +/E { 0 rmoveto X show Y } def +/F { 0 rmoveto 0 SC 3 -1 roll X widthshow Y } def +/G { 0 rmoveto 0 exch X ashow Y } def +/H { 0 rmoveto 0 exch 0 SC 5 2 roll X awidthshow Y } def +/I { 0 exch rmoveto X show Y } def +/J { 0 exch rmoveto 0 SC 3 -1 roll X widthshow Y } def +/K { 0 exch rmoveto 0 exch X ashow Y } def +/L { 0 exch rmoveto 0 exch 0 SC 5 2 roll X awidthshow Y } def +/M { rmoveto X show Y } def +/N { rmoveto 0 SC 3 -1 roll X widthshow Y } def +/O { rmoveto 0 exch X ashow Y } def +/P { rmoveto 0 exch 0 SC 5 2 roll X awidthshow Y } def +/Q { moveto X show Y } def +/R { moveto 0 SC 3 -1 roll X widthshow Y } def +/S { moveto 0 exch X ashow Y } def +/T { moveto 0 exch 0 SC 5 2 roll X awidthshow Y } def +end +.. +\# +.if !n \Y[ul*ps] +.if n .color 0 +.nr TOC.RELOCATE 0 \" TOC.RELOCATE is off by default +.ds PDFHREF.TEXTCOL.DEFAULT 0.0 0.3 0.9 +.nr PDFHREF.VIEW.LEADING.C 3i +.nr PDFHREF.VIEW.LEADING.T 1i +.nr PDFHREF.VIEW.LEADING 0 +.nr PDFHREF.VIEW.LEADING.H \n[PDFHREF.VIEW.LEADING] +\# +\# ==================================================================== +\# +\# TYPESETTING MACROS, STRINGS, AND ALIASES +\# ======================================== +\# +\# +++ALIASES+++ +\# +\# Alias .als as ALIAS, and .aln (number registers) as ALIASN +\# +.als ALIAS als +.als ALIASN aln +\# +\# ALIASES FOR GROFF REQUESTS +\# -------------------------- +\# +.ALIAS MAC de +.ALIAS BR br +.ALIAS SPREAD brp +.ALIAS ESC_CHAR ec +.ALIAS STRING ds +.ALIAS INCLUDE so +\# +\# ALIASES FOR NUMBER REGISTERS +\# ---------------------------- +\# +.ALIASN #PT_SIZE .ps \"fractional point size in units +.ALIASN #DIVER_DEPTH dn \"diversion depth +.ALIASN #DIVER_WIDTH dl \"diversion width +.ALIASN #TRAP_DISTANCE .t \"distance to next trap +.ALIASN #LEAD .v \"line space +.ALIASN #PAGE_LENGTH .p \"page length +.ALIASN #NUM_ARGS .$ \"number of arguments passed to a macro +.ALIASN #INDENT .i \"value of current indent +\# +\# ==================================================================== +\# +\# MISCELLANEOUS +\# ============= +.nr #L_MARGIN \n[.o] \" Tabs, etc require #L_MARGIN +.cflags 4 /\[en] \" So slash and en-dashes get broken +\# +\# 'END' is used throughout as the 2nd arg to 'MAC' (alias of .de) +\# Defining it as a macro here prevents groff from complaining +\# that 'END' isn't defined. +\# +.de END +.. +\# +\# ==================================================================== +\# +\# +++PAGE LAYOUT+++ +\# +\# Macros that control the physical layout of the page: paper size +\# and margins. +\# +\# PAGE WIDTH +\# ---------- +\# *Argument: +\# <width of printer sheet> +\# *Function: +\# Stores user supplied page width in register #PAGE_WIDTH. +\# *Notes: +\# #PAGE_WIDTH is used to establish the default LL (and right margin). +\# Requires unit of measure. +\# +.MAC PAGEWIDTH END +. br +. nr #PAGE_WIDTH \\$1 +. if !r#L_MARGIN .L_MARGIN \\n[.o] +. if !r#R_MARGIN .R_MARGIN 1i +. if '\\*[.T]'pdf' \X'papersize=\\n[#PAGE_WIDTH]z,\\n[#PAGE_LENGTH]z'\c +.END +\# +\# L_MARGIN +\# -------- +\# *Argument: +\# <offset from page left> +\# *Function: +\# Stores user supplied page offset in register #L_MARGIN. +\# Sets .po to user supplied offset. +\# *Notes: +\# Requires unit of measure. +\# +.MAC L_MARGIN END +. br +. nr #L_MARGIN (\\$1) +. po \\n[#L_MARGIN]u +.END +\# +\# R_MARGIN +\# -------- +\# *Argument: +\# <width of right margin> +\# *Function: +\# Stores user supplied right margin in register #R_MARGIN. +\# *Notes: +\# This is a pseudo-margin. Right margin is actually a function of +\# line length. The macro calculates line length from the page offset +\# and the value plugged into #R_MARGIN. +\# +\# N.B. -- PAGEWIDTH and L_MARGIN have to be defined before R_MARGIN. +\# +\# Requires unit of measure. +\# +.MAC R_MARGIN END +. br +. nr #R_MARGIN (\\$1) +. ll \\n[#PAGE_WIDTH]u-\\n[#L_MARGIN]u-\\n[#R_MARGIN]u +. ta \\n[.l]u +. nr #L_LENGTH \\n[.l] +.END +\# +\# T_MARGIN +\# -------- +\# *Argument: +\# <distance to advance from top of page> +\# *Function: +\# Stores the user supplied top margin in register #T_MARGIN. +\# Advances user supplied depth from the top of the page. +\# *Notes: +\# Requires unit of measure. +\# +.MAC T_MARGIN END +. nr #T_MARGIN (\\$1) +. if !\\n[#DOCS] .sp |\\n[#T_MARGIN]u-1v +. wh 0i DO_T_MARGIN +.END +\# +\# B_MARGIN +\# -------- +\# *Argument: +\# <space to leave at the bottom of the page> +\# *Function: +\# Stores the user supplied bottom margin in register #B_MARGIN. +\# *Notes: +\# Requires unit of measure. +\# +.MAC B_MARGIN END +. br +. nr #B_MARGIN (\\$1) +. nr #ORIGINAL_B_MARGIN \\n[#B_MARGIN] +. nr #B_MARGIN_SET 1 +. wh -\\n[#B_MARGIN]u DO_B_MARGIN +.END +\# +\# PAGE +\# ---- +\# *Arguments: +\# <pagewidth> [pagelength [leftmargin [rightmargin [topmargin [bottommargin]]]]] +\# *Function: +\# Page set-up. Collects arguments and passes them to the appropriate +\# macros. +\# *Notes: +\# All arguments after pagewidth are optional, but must appear +\# in the order given above. (User can fill in as much or as +\# little as desired.) +\# +\# All arguments require a unit of measure. +\# +.MAC PAGE END +. br +. PAGEWIDTH \\$1 +. PAGELENGTH \\$2 +. ie '\\$3'' .L_MARGIN \\n[.o] +. el .L_MARGIN \\$3 +. ie '\\$4'' .R_MARGIN 1i +. el .R_MARGIN \\$4 +. if !'\\$5'' .T_MARGIN \\$5 +. if !'\\$6'' .B_MARGIN \\$6 +.END +\# +\# gropdf: pass pagelength to postprocessor; no need for -P-p +\# +.MAC PAGELENGTH END +. pl \\$* +. if '\\*[.T]'pdf' \X'papersize=\\n[#PAGE_WIDTH]z,\\n[#PAGE_LENGTH]z'\c +.END +\# +\# ===================================================================== +\# +\# +++PAGE CONTROL+++ +\# +\# Generic macros for breaking pages. +\# +\# DO_T_MARGIN +\# ----------- +\# *Argument: +\# <none> +\# *Function: +\# Plants the top margin at the top of each page. +\# *Notes: +\# The trap is set in .T_MARGIN or .PAGE +\# +.MAC DO_T_MARGIN END +. ev T_MARGIN +. sp |\\n[#T_MARGIN]u-1v +. ev +.END +\# +\# DO_B_MARGIN +\# ----------- +\# *Argument: +\# <none> +\# *Function: +\# Plants the bottom margin at the bottom of each page. +\# *Notes: +\# The trap is set in .B_MARGIN or .PAGE. +\# +.MAC DO_B_MARGIN END +. nr #T_MARGIN_LEAD_ADJ \\n[#LEAD]-12000 +. ev B_MARGIN +. if !n .nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap' +. ie \\n[#DOCS] \ +. if !\\n[#NEWPAGE] .bp +. el .bp +. ev +.END +\# +\# NEWPAGE +\# ------- +\# *Argument: +\# <none> +\# *Function: +\# Breaks to a new page. +\# *Notes: +\# If a B_MARGIN has been set, processes that, otherwise, just +\# breaks to a new page. +\# +.MAC NEWPAGE END +. br +. if \\n[#DOC_TYPE]=5 \{\ +. if \\n[#NUM_ARGS]>0 \ +. pdftransition PAGE \\$1 +. \} +. if !\\n[defer] \{\ +. nr #NEWPAGE 1 +. rr tbl*no-print-header +. \} +. ie !\\n[#DOCS]=1 \ +. if \\n[#B_MARGIN_SET]=1 .DO_B_MARGIN +. el \{\ +. if (\\n[#COLUMNS]=1):(\\n[#COLUMNS]=2) .nr #COL_NUM \\n[#NUM_COLS] +. if !\\n[#FN_DEPTH] \{\ +. ch FN_OVERFLOW_TRAP +. nr #RESET_FN_OVERFLOW_TRAP 1 +. \} +. \} +. if dPDF.EXPORT \ +. if \\n[#FLEX_ACTIVE] \ +. if !\\n[#NO_FLEX] \ +. tm .ds pre-newpage-\\n% \\n%@\\n[#COL_NUM] +. ie \\n[#DOCS]=1 \{\ +. if (\\n[@TOP]=0):(\\n[#END_COVER]=1) .bp +. rr #END_COVER +. if \\n[#RESET_FN_OVERFLOW_TRAP] \{\ +. wh -\\n[#FN_OVERFLOW_TRAP_POS]u FN_OVERFLOW_TRAP +. rr #RESET_FN_OVERFLOW_TRAP_POS +. \} +. \} +. el .if !\\n[#B_MARGIN_SET]=1 .bp +.END +\# +.ALIAS NEWSLIDE NEWPAGE +\# +\# ===================================================================== +\# +\# +++GENERAL STYLE MACROS+++ +\# +\# LINE LENGTH +\# ----------- +\# *Argument: +\# <line length> +\# *Function: +\# Stores user supplied line length in register #L_LENGTH. +\# Sets .ll to #L_LENGTHu +\# *Notes: +\# Requires unit of measure. +\# +.MAC LL END +. nr #USER_SET_L_LENGTH 1 +. ll \\$1 +. nr #L_LENGTH \\n[.l] +. ta \\n[.l]u +.END +\# +\# +++FAMILY AND FONT+++ +\# +\# FALLBACK FONT +\# ------------- +\# *Argument: +\# <fallback font> [ ABORT | WARN ] | ABORT | WARN +\# *Function: +\# Sets register #ABORT_FT_ERRORS to 1, or defines a fallback font +\# called "dummy" at font position 0. +\# *Notes: +\# Calls to non-existent families cause mom to continue processing +\# files using the fallback font until a valid family is entered. +\# +\# Calls to non-existent fonts generate warnings. If ABORT is passed +\# to FALLBACK_FONT, mom stops processing files after the warning. +\# Otherwise, she continues to process files using the fallback font +\# after the warning is issued. The default fallback font is CR; the +\# default for font warnings is to abort. +\# +.MAC FALLBACK_FONT END +. if \\n[#NUM_ARGS]=1 \{\ +. if '\\$1'ABORT' .nr #ABORT_FT_ERRORS 1 +. if '\\$1'WARN' \ +. if r #ABORT_FT_ERRORS .nr #ABORT_FT_ERRORS 0 +. if !'\\$1'ABORT' \ +. if !'\\$1'WARN' .fp 0 dummy \\$1 +. \} +. if \\n[#NUM_ARGS]=2 \{\ +. fp 0 dummy \\$1 +. if '\\$2'ABORT' .nr #ABORT_FT_ERRORS 1 +. if '\\$2'WARN' .nr #ABORT_FT_ERRORS 0 +. \} +.END +\# +.FALLBACK_FONT CR ABORT +\# +\# FAMILY +\# ------ +\# *Argument: +\# <font family> +\# *Function: +\# Stores user supplied font family in string $FAMILY. Sets .fam +\# to $FAMILY. +\# +.MAC FAMILY END +. if '\\n[.ev]'COVER_TEXT' .ds $SAVED_DOC_FAM \\n[.fam] +. if \\n[#COLLATE] .rm $SAVED_DOC_FAM +. ds $FAMILY \\$1 +. if \\n[#PRINT_STYLE]=1 \{\ +. fam \\*[$TYPEWRITER_FAM] +. return +. \} +. if \\n[#IGNORE] \{\ +. fam \\*[$TYPEWRITER_FAM] +. return +. \} +. if (\\n[.x]\\n[.y]\\*[short_revision] >= 1192) .ds $SAVED_STYLE \\n[.sty] +. ft 0 +. fam \\*[$FAMILY] +. if (\\n[.x]\\n[.y]\\*[short_revision] >= 1192) \{\ +. ft \\*[$SAVED_STYLE] +. if !F\\n[.fn] .ft 0 +. \} +. ie \\n[#PRE_COLLATE]=1 . +. el \{\ +. if \\n[#COLLATE]=1 \ +. if !r#START .ds $DOC_FAM \\*[$FAMILY] +. \} +.END +\# +\# FONT +\# ---- +\# *Argument: +\# R | I | B | BI | <other style extension> +\# *Function: +\# Stores user supplied font in $FONT and sets .ft to $FONT. +\# +.MAC FT END +. ds $FONT \\$1 +. if \\n[#PRINT_STYLE]=1 \{\ +. ie '\\$1'I' \{\ +. if \\n[#UNDERLINE_ITALIC]=1 \{\ +. UNDERLINE +. return +. \} +. if \\n[#ITALIC_MEANS_ITALIC]=1 \{\ +. ds $FONT \\$1 +. ft \\*[$FONT] +. return +. \} +. \} +. el .UNDERLINE OFF +. return +. \} +. ft 0 +. ft \\*[$FONT] +. if (\\n[.x]\\n[.y]\\*[short_revision] >= 1192) \{\ +. if '\\n[.sty]'' \{\ +. if !F\\n[.fn] \{\ +. if !S\\*[$FONT] \{\ +. tm1 "[mom]: Font style "\\*[$FONT]" at line \\n[.c] has not been registered. +. ie \\n[#ABORT_FT_ERRORS]=0 \ +. tm1 " Continuing to process using fallback font. +. el .ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +. \} +. if \\n[.f]=0 \{\ +. tm1 "[mom]: Either font style "\\*[$FONT]" at line \\n[.c] does not exist in family "\\n[.fam]", +. tm1 " or family "\\n[.fam]" has not been installed. +. ie \\n[#ABORT_FT_ERRORS]=0 \ +. tm1 " Continuing to process using fallback font. +. el .ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +. \} +. \} +. \} +. \} +.END +\# +\# POINT SIZE +\# ---------- +\# *Arguments: +\# <point size of type> +\# *Function: +\# Sets point size to user supplied value in scaled points. +\# If #AUTO_LEAD is on, resets lead accordingly. +\# *Notes: +\# Must NOT use a unit of measure. +\# +.MAC PT_SIZE END +. if \\n[#PRINT_STYLE]=1 .return +. if \\n[#IGNORE] .return +. ps \\$1 +. nr #PT_SIZE_IN_UNITS \\n[.ps] +. ie '\\$0'DOC_PT_SIZE' \{\ +. if !\\n[#DOCS] .DOC_MACRO_ERROR \\$0 +. br +. nr #NEW_DOC_PT_SIZE \\n[.ps] +. if \\n[#DOC_AUTOLEAD] \{\ +. ie !\\n[#DOC_AUTOLEAD_FACTOR] .nr #AUTOLEADING \\n[#DOC_AUTOLEAD] +. el .nr #AUTOLEADING \\n[.ps]*\\n[#DOC_AUTOLEAD]/1000-\\n[.ps] +. nr #DOC_LEAD \\n[.ps]+\\n[#AUTOLEADING] +. nr #RESET_TRAPS 1 +. \} +. \} +. el \{\ +. if \\n[#AUTO_LEAD] \{\ +. nr #SAVED_VS \\n[.v] +. vs \\n[.ps]u+\\n[#AUTOLEADING]u +. \} +. \} +. if \\n[pdfbx-running]=1 \{\ +. nr #VS_DIFF \\n[#SAVED_VS]-\\n[.v] +. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u+\\n[#VS_DIFF]u +. \} +.END +\# +\# SIZE (inline) +\# ------------- +\# *Arguments: +\# <point size of type> +\# *Function: +\# Sets point size to user supplied value in scaled points. +\# Intended to be called inline with \*[SIZE <n><unit>] +\# *Notes: +\# Can be used with a unit of measure or not. +\# +.MAC SIZE END +\c +.ps \\$1 +.END +\# +\# LEADING +\# ------- +\# *Argument: +\# <leading between lines of text> +\# *Function: +\# Turns off #AUTOLEAD if it's on. +\# Sets .vs to user supplied value. +\# *Notes: +\# Does not require unit of measure. LS automatically turns off AUTOLEAD. +\# +.MAC LS END +. br +. if \\n[#PRINT_STYLE]=1 .return +. if \\n[#IGNORE] .return +. if \\n[#AUTO_LEAD] \{\ +. rr #AUTO_LEAD +. rr #AUTOLEAD_VALUE +. rr #AUTOLEADING +. \} +. nr #SAVED_VS \\n[.v] +. vs \\$1 +. if \\n[pdfbx-running]=1 \{\ +. nr #VS_DIFF \\n[#SAVED_VS]-\\n[.v] +. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u+\\n[#VS_DIFF]u +. \} +. if !\\n[#START] \ +. if \\n[.t]<\\n[.v] 'bp +.END +\# +\# AUTOLEAD +\# -------- +\# *Argument: +\# <leading value to add to #PT_SIZE> [FACTOR] +\# *Function: +\# Stores user supplied auto-lead value in register #AUTOLEAD_VALUE. +\# Adds #AUT0LEAD_VALUE to #PT_SIZE when invoked to set leading. +\# All subsequent PT_SIZE requests reset the leading in the same way until +\# AUTOLEAD is turned off. +\# *Notes: +\# With the optional FACTOR argument, the current point size is +\# multiplied by #AUTOLEAD_VALUE/1000 instead of the two being added +\# together. +\# +.MAC AUTOLEAD END +. if \\n[#PRINT_STYLE]=1 .return +. if \\n[#IGNORE] .return +. nr #AUTO_LEAD 1 \" autolead on or off +. nr #AUTOLEAD_VALUE (p;\\$1) \" arg x 1000 +. ie '\\$2'FACTOR' \{\ +. if !\\n[#DOCS] .nr #DOC_AUTOLEAD_FACTOR \\n[#AUTOLEAD_VALUE] \" save for DOC_PT_SIZE +. nr #AUTOLEADING \\n[.ps]*\\n[#AUTOLEAD_VALUE]/1000-\\n[.ps] +. \} +. el .nr #AUTOLEADING \\n[#AUTOLEAD_VALUE] +. vs \\n[.ps]u+\\n[#AUTOLEADING]u +.END +\# +\# STRINGS FOR INLINE CONTROL OF GENERAL TYPE STYLE +\# ------------------------------------------------ +.ds ROM \Ef[R] +.ds IT \Ef[I] +.ds BD \Ef[B] +.ds BDI \Ef[BI] +.ds PREV \Ef[] +.ds S \Es +\# +\# ===================================================================== +\# +\# +++KERNING+++ +\# +\# AUTOMATIC PAIRWISE KERNING +\# -------------------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Turns automatic pairwise kerning on or off. +\# +.MAC KERN END +. ie '\\$1'' \{\ +. kern +. nr #KERN 1 +. \} +. el \{\ +. kern 0 +. nr #KERN 0 +. \} +.END +\# +\# INLINE KERNING AND HORIZONTAL MOVEMENT +\# -------------------------------------- +\# +\# Inline kerning provides a simple way to adjust the amount of +\# space between any two letters. It's predicated on a unit of +\# measure "U", which, by default, is 1/36 of the current point +\# size as returned by \n[.ps]; e.g., if the current point size is +\# 18, \n[.ps] returns 18000u, therefore U=500u. Since U remains +\# proportional relative to the current point size, the amount of +\# kerning between two letters as expressed in Us remains visually +\# similar regardless of changes in point size. +\# +\# The default value for U may be changed or reset with the +\# KERN_UNIT macro. +\# +.MAC KERN_UNIT END +. ie '\\$1'DEFAULT' .ds $KERN_UNIT 36 +. el .ds $KERN_UNIT \\$1 +.END +\# +.ds $KERN_UNIT 36 +.ds BU \h'-(\En[.ps]u/\E*[$KERN_UNIT]u*\\$1u)' +.ds FU \h'(\En[.ps]u/\E*[$KERN_UNIT]u*\\$1u)' +\# +\# Initialize strings for pre-1.1.3c-style BU and FU +\# +.nr #LOOP 0 1 +.while \n+[#LOOP]<37 \{\ +. ds BU\n[#LOOP] \h'-(\En[.ps]u/\E*[$KERN_UNIT]u*\n[#LOOP]u)' +. ds FU\n[#LOOP] \h'(\En[.ps]u/\E*[$KERN_UNIT]u*\n[#LOOP]u)' +.\} +\# +\# Horizontal movements +\# -------------------- +\# BP1...12.75 and FP1...12.75 move backwards or forwards inline by the +\# specified number of points. +\# +.ds BCK \h'-\\$1' +.ds FWD \h'\\$1' +\# +.ds BP.25 \h'-.25' +.ds BP.5 \h'-.5' +.ds BP.75 \h'-.75' +.ds BP1 \h'-1p' +.ds BP1.25 \h'-1.25p' +.ds BP1.5 \h'-1.5p' +.ds BP1.75 \h'-1.75p' +.ds BP2 \h'-2p' +.ds BP2.25 \h'-2.25p' +.ds BP2.5 \h'-2.5p' +.ds BP2.75 \h'-2.75p' +.ds BP3 \h'-3p' +.ds BP3.25 \h'-3.25p' +.ds BP3.5 \h'-3.5p' +.ds BP3.75 \h'-3.75p' +.ds BP4 \h'-4p' +.ds BP4.25 \h'-4.25p' +.ds BP4.5 \h'-4.5p' +.ds BP4.75 \h'-4.75p' +.ds BP5 \h'-5p' +.ds BP5.25 \h'-5.25p' +.ds BP5.5 \h'-5.5p' +.ds BP5.75 \h'-5.75p' +.ds BP6 \h'-6p' +.ds BP6.25 \h'-6.25p' +.ds BP6.5 \h'-6.5p' +.ds BP6.75 \h'-6.75p' +.ds BP7 \h'-7p' +.ds BP7.25 \h'-7.25p' +.ds BP7.5 \h'-7.5p' +.ds BP7.75 \h'-7.75p' +.ds BP8 \h'-8p' +.ds BP8.25 \h'-8.25p' +.ds BP8.5 \h'-8.5p' +.ds BP8.75 \h'-8.75p' +.ds BP9 \h'-9p' +.ds BP9.25 \h'-9.25p' +.ds BP9.5 \h'-9.5p' +.ds BP9.75 \h'-9.75p' +.ds BP10 \h'-10p' +.ds BP10.25 \h'-10.25p' +.ds BP10.5 \h'-10.5p' +.ds BP10.75 \h'-10.75p' +.ds BP11 \h'-11p' +.ds BP11.25 \h'-11.25p' +.ds BP11.5 \h'-11.5p' +.ds BP11.75 \h'-11.75p' +.ds BP12 \h'-12p' +.ds BP12.25 \h'-12.25p' +.ds BP12.5 \h'-12.5p' +.ds BP12.75 \h'-12.75p' +\# +.ds FP.25 \h'.25' +.ds FP.5 \h'.5' +.ds FP.75 \h'.75' +.ds FP1 \h'1p' +.ds FP1.25 \h'1.25p' +.ds FP1.5 \h'1.5p' +.ds FP1.75 \h'1.75p' +.ds FP2 \h'2p' +.ds FP2.25 \h'2.25p' +.ds FP2.5 \h'2.5p' +.ds FP2.75 \h'2.75p' +.ds FP3 \h'3p' +.ds FP3.25 \h'3.25p' +.ds FP3.5 \h'3.5p' +.ds FP3.75 \h'3.75p' +.ds FP4 \h'4p' +.ds FP4.25 \h'4.25p' +.ds FP4.5 \h'4.5p' +.ds FP4.75 \h'4.75p' +.ds FP5 \h'5p' +.ds FP5.25 \h'5.25p' +.ds FP5.5 \h'5.5p' +.ds FP5.75 \h'5.75p' +.ds FP6 \h'6p' +.ds FP6.25 \h'6.25p' +.ds FP6.5 \h'6.5p' +.ds FP6.75 \h'6.75p' +.ds FP7 \h'7p' +.ds FP7.25 \h'7.25p' +.ds FP7.5 \h'7.5p' +.ds FP7.75 \h'7.75p' +.ds FP8 \h'8p' +.ds FP8.25 \h'8.25p' +.ds FP8.5 \h'8.5p' +.ds FP8.75 \h'8.75p' +.ds FP9 \h'9p' +.ds FP9.25 \h'9.25p' +.ds FP9.5 \h'9.5p' +.ds FP9.75 \h'9.75p' +.ds FP10 \h'10p' +.ds FP10.25 \h'10.25p' +.ds FP10.5 \h'10.5p' +.ds FP10.75 \h'10.75p' +.ds FP11 \h'11p' +.ds FP11.25 \h'11.25p' +.ds FP11.5 \h'11.5p' +.ds FP11.75 \h'11.75p' +.ds FP12 \h'12p' +.ds FP12.25 \h'12.25p' +.ds FP12.5 \h'12.5p' +.ds FP12.75 \h'12.75p' +\# +\# WHOLE LINE (TRACK) KERNING +\# -------------------------- +\# *Argument: +\# <amount of track kerning> +\# *Function: +\# Invokes .tkf (track kerning) for the current font with +\# 1 as both the upper and lower point size limits, so that +\# the value entered by the user applies regardless of point +\# size. RW ("Reduce Whitespace") reduces the amount of space +\# between all characters by an equal amount. EW ("Extra +\# Whitespace") increases the amount of space. +\# *Notes: +\# Decimal values are acceptable. +\# +\# A value of 1 will produce an unacceptably tight or loose line +\# at most text point sizes; therefore, effective use of RW and +\# EW is in the fractional range below 1. +\# +\# \n[.f] holds the current font number, which is acceptable to .tkf. +\# +\# RW and EW must be reset to 0 to cancel their effect on subsequent +\# output lines. +\# +.MAC RW END +. if \\n[#BR_AT_LINE_KERN] \{\ +. ie \\n[#JUSTIFY]=1 .brp +. el .br +. \} +. rr #EW +. rm $EW +. nr #RW 1 +. ds $RW \\$1 +. tkf \\n[.f] 1 -\\$1 1 -\\$1 +.END +\# +.MAC EW END +. if \\n[#BR_AT_LINE_KERN] \{\ +. ie \\n[#JUSTIFY]=1 .brp +. el .br +. \} +. rr #RW +. rm $RW +. nr #EW 1 +. ds $EW \\$1 +. tkf \\n[.f] 1 \\$1 1 \\$1 +.END +\# +\# BREAK AT LINE KERN +\# ------------------ +\# *Arguments: +\# toggle +\# *Function: +\# Enables/disables .br's before .RW and .EW +\# *Notes: +\# Mostly, users will want .br's before any kind of line kerning, but +\# there may be cases where they don't. BR_AT_LINE_KERN is off by +\# default and must be invoked explicitly. +\# +.MAC BR_AT_LINE_KERN END +. ie '\\$1'' .nr #BR_AT_LINE_KERN 1 +. el .rr #BR_AT_LINE_KERN +.END +\# +\# ===================================================================== +\# +\# +++HYPHENATION+++ +\# +\# AUTO HYPHENATION +\# ---------------- +\# *Arguments: +\# <none> | <anything> | DEFAULT +\# or +\# LINES <n> | MARGIN <n> | SPACE <n> +\# *Function: +\# Turns auto hyphenation on or off, resets the hyphenation style +\# to default, or permits the setting of various hyphenation +\# parameters. +\# *Notes: +\# HY, by itself, defaults to .hy 14, i.e. no hyphens after the +\# first two or before the last two characters of a word, and no +\# hyphenation of the last line prior to a trap (e.g., at the +\# bottom of a page). +\# +\# HY DEFAULT resets the hyphenation style to .hy 14 (see +\# above) if that behaviour is desired after changes have been +\# made to LINES, MARGIN, or SPACE. +\# +\# HY LINES <n> sets the number of allowable consecutive hyphenated lines. +\# +\# HY MARGIN <n> sets the amount of space (ipPcm) allowed at the end +\# of a line in QUAD mode before hyphenation is tripped (e.g. if there's +\# only 6 points left, groff won't try to hyphenate the next word). +\# +\# HY SPACE sets the amount of extra interword space (ipPcm) that can +\# be added in JUSTIFY mode to prevent a line from being hyphenated. +\# +.MAC HY END +. ie '\\$1'' \{\ +. hy 14 +. if \\n[#LINES] .hlm \\n[#LINES] +. if \\n[#MARGIN] .hym \\n[#MARGIN]] +. if \\n[#SPACE] .hys \\n[#SPACE] +. nr #HYPHENATE 1 +. \} +. el \{\ +. if !'\\$1'LINES' \{\ +. nh +. nr #HYPHENATE 0 +. \} +. if !'\\$1'MARGIN' \{\ +. nh +. nr #HYPHENATE 0 +. \} +. if !'\\$1'SPACE' \{\ +. nh +. nr #HYPHENATE 0 +. \} +. if !'\\$1'DEFAULT' \{\ +. nh +. nr #HYPHENATE 0 +. \} +. if '\\$1'LINES' \{\ +. hlm \\$2 +. nr #HY_LINES \\$2 +. \} +. if '\\$1'MARGIN' \{\ +. hym \\$2 +. nr #HY_MARGIN \\$2 +. \} +. if '\\$1'SPACE' \{\ +. hys \\$2 +. nr #HY_SPACE \\$2 +. \} +. if '\\$1'DEFAULT' \{\ +. hlm -1 +. hym 0 +. hys 0 +. rr #HY_LINES +. rr #HY_SPACE +. rr #HY_MARGIN +. \} +. \} +.END +\# +\# HYPHENATION PARAMETERS +\# ---------------------- +\# *Arguments: +\# <# of lines> | <size of margin> | <amount of interword space> +\# *Function: +\# Allows user to specify .HY LINES, MARGIN, and SPACE with a single command. +\# +.MAC HY_SET END +. nr #HY_SET 1 +. hlm \\$1 +. hym \\$2 +. hys \\$3 +.END +\# +\# ===================================================================== +\# +\# +++VERTICAL SPACING+++ +\# +\# ADVANCE LEAD +\# ------------ +\# *Argument: +\# <user supplied lead to advance below current baseline> +\# *Function: +\# Creates or modifies register #ALD. Adds user supplied lead +\# below current baseline. +\# *Notes: +\# Requires a unit of measure. +\# +.MAC ALD END +. if '\\$0'ALD' \{\ +. nr #ALD (u;\\$1) +. sp \\n[#ALD]u +. \} +. if '\\$0'ADD_SPACE' \{\ +. vpt 0 +. nr #ALD \\$1 +. rs +. nop \& +. br +. sp |\\n[#T_MARGIN]u-1v+\\n[#ALD]u +. rr @TOP +. nr #SPACE_ADDED 1 +. vpt +. \} +. if '\\$0'SPACE' .sp \\$1 +. if '\\$0'SP' .sp \\$1 +.END +\# +\# REVERSE LEAD +\# ------------ +\# *Argument: +\# <user supplied lead to reverse above current baseline> +\# *Function: +\# Creates or modifies register #RLD. Reverses user supplied +\# lead above current baseline. +\# *Notes: +\# Requires a unit of measure. +\# +.MAC RLD END +. br +. nr #RLD (u;\\$1) +. sp -\\n[#RLD]u +.END +\# +\# ALD/RLD STRINGS +\# --------------- +\# The strings \*[ALD.25]...\*[ALD12.75] and their corresponding +\# \*[RLD] forms have been left in for backward compatibility with +\# documents created using mom-1.1.3c or earlier. The preferred methods +\# of advancing and reversing on the page inline are \*[UP <n><unit>] +\# and \*[DOWN <n><unit>]. +\# +.ds DOWN \v'\\$1' +.ds UP \v'-\\$1' +\# +.ds ALD.25 \v'.25p' +.ds ALD.5 \v'.5p' +.ds ALD.75 \v'.75p' +.ds ALD1 \v'1p' +.ds ALD1.25 \v'1.25p' +.ds ALD1.5 \v'1.5p' +.ds ALD1.75 \v'1.75p' +.ds ALD2 \v'2p' +.ds ALD2.25 \v'2.25p' +.ds ALD2.5 \v'2.5p' +.ds ALD2.75 \v'2.75p' +.ds ALD3 \v'3p' +.ds ALD3.25 \v'3.25p' +.ds ALD3.5 \v'3.5p' +.ds ALD3.75 \v'3.75p' +.ds ALD4 \v'4p' +.ds ALD4.25 \v'4.25p' +.ds ALD4.5 \v'4.5p' +.ds ALD4.75 \v'4.75p' +.ds ALD5 \v'5p' +.ds ALD5.25 \v'5.25p' +.ds ALD5.5 \v'5.5p' +.ds ALD5.75 \v'5.75p' +.ds ALD6 \v'6p' +.ds ALD6.25 \v'6.25p' +.ds ALD6.5 \v'6.5p' +.ds ALD6.75 \v'6.75p' +.ds ALD7 \v'7p' +.ds ALD7.25 \v'7.25p' +.ds ALD7.5 \v'7.5p' +.ds ALD7.75 \v'7.75p' +.ds ALD8 \v'8p' +.ds ALD8.25 \v'8.25p' +.ds ALD8.5 \v'8.5p' +.ds ALD8.75 \v'8.75p' +.ds ALD9 \v'9p' +.ds ALD9.25 \v'9.25p' +.ds ALD9.5 \v'9.5p' +.ds ALD9.75 \v'9.75p' +.ds ALD10 \v'10p' +.ds ALD10.25 \v'10.25p' +.ds ALD10.5 \v'10.5p' +.ds ALD10.75 \v'10.75p' +.ds ALD11 \v'11p' +.ds ALD11.25 \v'11.25p' +.ds ALD11.5 \v'11.5p' +.ds ALD11.75 \v'11.75p' +.ds ALD12 \v'12p' +.ds ALD12.25 \v'12.5p' +.ds ALD12.5 \v'12.5p' +.ds ALD12.75 \v'12.75p' +\# +.ds RLD.25 \v'-.25p' +.ds RLD.5 \v'-.5p' +.ds RLD.75 \v'-.75p' +.ds RLD1 \v'-1p' +.ds RLD1.25 \v'-1.25p' +.ds RLD1.5 \v'-1.5p' +.ds RLD1.75 \v'-1.75p' +.ds RLD2 \v'-2p' +.ds RLD2.25 \v'-2.25p' +.ds RLD2.5 \v'-2.5p' +.ds RLD2.75 \v'-2.75p' +.ds RLD3 \v'-3p' +.ds RLD3.25 \v'-3.25p' +.ds RLD3.5 \v'-3.5p' +.ds RLD3.75 \v'-3.75p' +.ds RLD4 \v'-4p' +.ds RLD4.25 \v'-4.25p' +.ds RLD4.5 \v'-4.5p' +.ds RLD4.75 \v'-4.75p' +.ds RLD5 \v'-5p' +.ds RLD5.25 \v'-5.25p' +.ds RLD5.5 \v'-5.5p' +.ds RLD5.75 \v'-5.75p' +.ds RLD6 \v'-6p' +.ds RLD6.25 \v'-6.25p' +.ds RLD6.5 \v'-6.5p' +.ds RLD6.75 \v'-6.75p' +.ds RLD7 \v'-7p' +.ds RLD7.25 \v'-7.25p' +.ds RLD7.5 \v'-7.5p' +.ds RLD7.75 \v'-7.75p' +.ds RLD8 \v'-8p' +.ds RLD8.25 \v'-8.25p' +.ds RLD8.5 \v'-8.5p' +.ds RLD8.75 \v'-8.75p' +.ds RLD9 \v'-9p' +.ds RLD9.25 \v'-9.25p' +.ds RLD9.5 \v'-9.5p' +.ds RLD9.75 \v'-9.75p' +.ds RLD10 \v'-10p' +.ds RLD10.25 \v'-10.25p' +.ds RLD10.5 \v'-10.5p' +.ds RLD10.75 \v'-10.75p' +.ds RLD11 \v'-11p' +.ds RLD11.25 \v'-11.25p' +.ds RLD11.5 \v'-11.5p' +.ds RLD11.75 \v'-11.75p' +.ds RLD12 \v'-12p' +.ds RLD12.25 \v'-12.5p' +.ds RLD12.5 \v'-12.5p' +.ds RLD12.75 \v'-12.75p' +\# +\# ===================================================================== +\# +\# +++REFINEMENTS+++ +\# +\# AUTOMATIC LIGATURES +\# ------------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Turns automatic ligature generation on or off. +\# *Notes: +\# Ligatures may be supplied manually with \[fi], \[fl], etc. +\# +.MAC LIGATURES END +. ie '\\$1'' \{\ +. lg +. nr #LIGATURES 1 +. \} +. el \{\ +. lg 0 +. nr #LIGATURES 0 +. \} +.END +\# +\# SMARTQUOTES +\# ----------- +\# *Arguments: +\# [ ,, ] | [ << ] | [ >> ] | <anything> +\# or +\# [ DA | DE | EN | ES | FR | IT | NL | NO | PT | SV ] | <anything> +\# *Function: +\# Turns smartquotes on (optionally with a quoting style from the +\# argument list, or off). +\# If no quoting style is given, then EN (English) is used by default. +\# If no quoting style is given and smart quotes have been turned off +\# previously, the old quoting style will be restored. +\# *Notes: +\# The " character is read outside the macro when mom is +\# processed. The strings for open/close ($QUOTE<n>) are then +\# defined in the macro. +\# +.char " \\*[$QUOTE\\n[#OPEN_CLOSE]]\R'#OPEN_CLOSE (1-\\n[#OPEN_CLOSE])' +.nr #SQ_ON 0 +\# +.MAC SMARTQUOTES END +.\" First " will be translated to $QUOTE0 +. nr #OPEN_CLOSE 0 +. if '\\$1'' \{\ +. if !'\\*[$RESTORE_SQ]'' \{\ +. SMARTQUOTES \\*[$RESTORE_SQ] +. return +. \} +.\" Default smart quotes (English) +. ds $QUOTE0 \[lq] +. ds $QUOTE1 \[rq] +. ds $RESTORE_SQ EN +. nr #SQ_ON 1 +. return +. \} +. if '\\$1',,' \{\ +. ds $QUOTE0 \[Bq] +. ds $QUOTE1 \[lq] +. ds $RESTORE_SQ \\$1 +. nr #SQ_ON 1 +. return +. \} +. if '\\$1'<<' \{\ +. ds $QUOTE0 \[Fo] +. ds $QUOTE1 \[Fc] +. ds $RESTORE_SQ \\$1 +. nr #SQ_ON 1 +. return +. \} +. if '\\$1'>>' \{\ +. ds $QUOTE0 \[Fc] +. ds $QUOTE1 \[Fo] +. ds $RESTORE_SQ \\$1 +. nr #SQ_ON 1 +. return +. \} +. if '\\$1'DA' \{\ +. ds $QUOTE0 \[Fc] +. ds $QUOTE1 \[Fo] +. ds $RESTORE_SQ \\$1 +. nr #SQ_ON 1 +. return +. \} +. if '\\$1'DE' \{\ +. ds $QUOTE0 \[Bq] +. ds $QUOTE1 \[lq] +. ds $RESTORE_SQ \\$1 +. nr #SQ_ON 1 +. return +. \} +. if '\\$1'EN' \{\ +. ds $QUOTE0 \[lq] +. ds $QUOTE1 \[rq] +. ds $RESTORE_SQ \\$1 +. nr #SQ_ON 1 +. return +. \} +. if '\\$1'ES' \{\ +. ds $QUOTE0 \[lq] +. ds $QUOTE1 \[rq] +. ds $RESTORE_SQ \\$1 +. nr #SQ_ON 1 +. return +. \} +. if '\\$1'FR' \{\ +. ds $QUOTE0 \[Fo]\| +. ds $QUOTE1 \|\[Fc] +. ds $RESTORE_SQ \\$1 +. nr #SQ_ON 1 +. return +. \} +. if '\\$1'IT' \{\ +. ds $QUOTE0 \[Fo]\| +. ds $QUOTE1 \|\[Fc] +. ds $RESTORE_SQ \\$1 +. nr #SQ_ON 1 +. return +. \} +. if '\\$1'NL' \{\ +. ds $QUOTE0 \[rq] +. ds $QUOTE1 \[rq] +. ds $RESTORE_SQ \\$1 +. nr #SQ_ON 1 +. return +. \} +. if '\\$1'NO' \{\ +. ds $QUOTE0 \[Fo] +. ds $QUOTE1 \[Fc] +. ds $RESTORE_SQ \\$1 +. nr #SQ_ON 1 +. return +. \} +. if '\\$1'PT' \{\ +. ds $QUOTE0 \[Fo] +. ds $QUOTE1 \[Fc] +. ds $RESTORE_SQ \\$1 +. nr #SQ_ON 1 +. return +. \} +. if '\\$1'SV' \{\ +. ds $QUOTE0 \[Fc] +. ds $QUOTE1 \[Fc] +. ds $RESTORE_SQ \\$1 +. nr #SQ_ON 1 +. return +. \} +.\" None of the above -> turn smartquotes off +. ds $QUOTE0 \[dq] +. ds $QUOTE1 \[dq] +. nr #SQ_ON 0 +.END +\# +.ds $QUOTE0 \[lq] +.ds $QUOTE1 \[rq] +\# +\# Strings for foot and inch marks +\# +.ds FOOT \[fm] +.ds INCH \[fm]\[fm] +\# +\# ===================================================================== +\# +\# +++LINE BREAKS+++ +\# +\# NO-SPACE BREAK +\# -------------- +\# *Argument: +\# <none> +\# *Function: +\# Breaks a line without advancing. +\# *Notes: +\# EL is the mnemonic used on older, dedicated typesetting machines +\# to indicate "process the line, without advancing the galley +\# medium." It stands for End Line. +\# +\# The \c inline must be appended to the end of input lines when in +\# nofill mode; in fill modes, the \c inline must not be used. +\# +.MAC EL END +. TRAP OFF +. if \\n[#PSEUDO_FILL]=1 \& +. br +. sp -1v +. TRAP +.END +\# +\# An inline escape to accomplish the same thing. +\# Preferable, since it works with filled and non-filled copy and +\# doesn't require the user to remember whether to use (or not use) +\# \c. +\# +.ds B \h'|0'\R'#NO_ADVANCE 1'\c +\# +\# ===================================================================== +\# +\# +++FILLING/QUADDING/JUSTIFYING+++ +\# +\# JUSTIFY +\# ------- +\# *Argument: +\# <none> +\# *Function: +\# Turns fill on and sets .ad to b. +\# *Notes: +\# Justifies text left and right. +\# +.MAC JUSTIFY END +\#. if r pdfbx-top 'sp -1 +. if \\n[#TAB_ACTIVE]=0 \{\ +. nr #QUAD 1 +. ds $RESTORE_QUAD_VALUE \\*[$QUAD_VALUE] +. \} +' ce 0 +. QUAD J +. if \\n[#PRINT_STYLE]=1 .QUAD L +. nr #PSEUDO_FILL 0 +.END +\# +\# QUAD +\# ---- +\# *Arguments: +\# L | LEFT | R | RIGHT | C | CENTER/CENTRE +\# *Function: +\# Turns fill on and sets .ad to l, r, or c. +\# *Notes: +\# Terminology is a problem here. Some people call quad left +\# left justified, flush left, or flush left/rag right (and the +\# reverse for quad right). Quad center is sometimes called rag +\# both. For our purposes, all "quad" modes mean that groff fill +\# mode is enabled. +\# +.MAC QUAD END +. if r pdfbx-top \{\ +' sp -1 +. rr pdfbx-top +. \} +.\" The QUAD in PP adds an unwanted linespace after a HEADING at the +.\" top of a pdf box because of this .br, so HEADING assigns the +.\" tmp register "bx-top\n[stack]" to inhibit it. +. ie !r pdfbx-top\\n[stack] .br +. el .rr pdfbx-top\\n[stack] +. if \\n[#COVERTEXT_PP] \ +. ds $RESTORE_DOC_QUAD \\*[$QUAD_VALUE] +. ds $QUAD_VALUE \\$1 +. substring $QUAD_VALUE 0 0 +. if \\n[#TAB_ACTIVE]=0 \{\ +. nr #QUAD 1 +. ds $RESTORE_QUAD_VALUE \\*[$QUAD_VALUE] +. \} +' ce 0 +' fi +. if '\\*[$QUAD_VALUE]'L' \{\ +. nr #JUSTIFY 0 +. ad l +. \} +. if '\\*[$QUAD_VALUE]'R' \{\ +. nr #JUSTIFY 0 +. ad r +. \} +. if '\\*[$QUAD_VALUE]'C' \{\ +. nr #JUSTIFY 0 +. ad c +. \} +. if '\\*[$QUAD_VALUE]'J' \{\ +. nr #JUSTIFY 1 +. ad b +. \} +. nr #PSEUDO_FILL 0 +.END +\# +\# LEFT, RIGHT, AND CENTER +\# ----------------------- +\# The purpose of these macros is to allow the user to enter lines +\# of text that will be quadded LRC without having to stick .BR +\# or .br between lines. For the sake of consistency, all three +\# appear to behave similarly (from the point of view of the user), +\# although the underlying primitives don't. For this reason, LEFT, +\# RIGHT, and CENTER must be followed by .QUAD [L R C J] or .JUSTIFY +\# to restore text to fill mode. +\# +\# LEFT +\# ---- +\# *Argument: +\# <none> +\# *Function: +\# Turns fill mode off. Allows user to quad lines left without +\# requiring the .BR or .br macro. +\# *Notes: +\# LEFT simply turns fill off. Lines that exceed the current LL +\# will not be broken. Note that this behaviour differs from the +\# RIGHT and CENTER macros. +\# +.MAC LEFT END +. if \\n[#TAB_ACTIVE]=0 \{\ +. rr #QUAD +. ds $RESTORE_QUAD_VALUE LEFT +. \} +. ce 0 +. nf +. nr #PSEUDO_FILL 1 +.\" Fix for a little conflict with DOCTYPE LETTER +. if '\\n[.z]'LETTERHEAD1' .rr #DATE_FIRST +.END +\# +\# RIGHT +\# ----- +\# *Argument: +\# <none> +\# *Function: +\# Turns fill on. Allows user to quad lines right without +\# requiring the .BR or .br macro. +\# *Notes: +\# Lines that exceed the current LL will be broken, with the excess +\# text quadded right. +\# +.MAC RIGHT END +. if \\n[#TAB_ACTIVE]=0 \{\ +. rr #QUAD +. ds $RESTORE_QUAD_VALUE RIGHT +. \} +. nf +. rj 100000 +. nr #PSEUDO_FILL 1 +.END +\# +\# CENTER +\# ------ +\# *Argument: +\# <none> +\# *Function: +\# Turns fill off. Allows user to center lines without +\# requiring the .BR or .br macro. +\# *Notes: +\# Lines that exceed the current LL will be broken, with the excess +\# text centered. +\# +.MAC CENTER END +. if \\n[#TAB_ACTIVE]=0 \{\ +. rr #QUAD +. ds $RESTORE_QUAD_VALUE CENTER +. \} +. nf +. ce 100000 +. nr #PSEUDO_FILL 1 +.END +\# +\# CENTER BLOCKS OF TYPE +\# --------------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Allows users to centre blocks of type on the page without +\# altering their quad. +\# +.MAC CENTER_BLOCK END +. br +. ie !\\n[.$] .di CENTER*BLOCK +. el \{\ +. di +. in \\n[.l]u-\\n[dl]u/2u +. if \\n[.u] .nr #FILLED 1 +. nf +. CENTER*BLOCK +. if \\n[#FILLED] .fi +. rr #FILLED +. in +. \} +.END +\# +.ALIAS CENTRE_BLOCK CENTER_BLOCK +\# +\# ===================================================================== +\# +\# +++TABS+++ +\# +\# There are two different kinds of tabs: typesetting tabs and +\# string tabs. +\# +\# Typesetting tabs are set with TAB_SET, which requires a tab number, +\# an indent (offset) from the left margin and a length (optionally +\# with a quad direction and an instruction to fill lines). After tabs +\# are set with TAB_SET, they are called with .TAB n, where "n" +\# corresponds to the number passed to TAB_SET as a valid tab number. +\# +\# String tabs allow the user to mark off tab positions inline. Tab +\# indents and lengths are calculated from the beginning and end +\# positions of the marks. Up to 19 string tabs may be created, +\# numbered 1-19. Once created, they are called with .TAB n, +\# just like typesetting tabs. +\# +\# Setting up string tabs is a two-step procedure. First, the user +\# enters an input line in which s/he wants to mark off string tabs. +\# The beginning of a tab is marked with \*[STn], where "n" is +\# the desired number of the tab. The end of the tab is marked +\# with \*[STnX]. All ST's must have a matching STX. String tabs +\# may be nested. +\# +\# Next, the user invokes .ST n for every string tab defined, and +\# optionally passes quad information to it. That done, string tabs +\# can be called just like typesetting tabs. +\# +\# Strings for string tab inlines +\# ------------------------------ +\# Initialize string tab markers numbered 1 to 19. +\# +.nr #LOOP 0 1 +.while \n+[#LOOP]<20 \{\ +. ds ST\n[#LOOP] \Ek[#ST\n[#LOOP]_OFFSET] +.\} +\# +.nr #LOOP 0 1 +.while \n+[#LOOP]<20 \{\ +. ds ST\n[#LOOP]X \Ek[#ST\n[#LOOP]_MARK] +.\} +.rr #LOOP +\# +\# These are reserved ST numbers for internal use +.ds ST100 \Ek[#ST100_OFFSET] +.ds ST100X \Ek[#ST100_MARK] +.ds ST101 \Ek[#ST101_OFFSET] +.ds ST101X \Ek[#ST101_MARK] +.ds ST102 \Ek[#ST102_OFFSET] +.ds ST102X \Ek[#ST102_MARK] +.ds ST103 \Ek[#ST103_OFFSET] +.ds ST103X \Ek[#ST103_MARK] +\# +\# QUAD AND SET STRING TABS +\# ------------------------ +\# *Arguments: +\# <stringtab number> L | R | C | J [QUAD] +\# *Function: +\# Creates strings $ST<#>_QUAD_DIR and $ST<#>_FILL, then sets up a +\# tab based on the collected information. +\# *Notes: +\# Like TAB_SET, ST invoked without a quad direction will default to LEFT. +\# If lines should be filled and quadded, use the optional argument QUAD. +\# N.B. -- indents *must* be turned off before setting string tabs +\# inside .PAD +\# +.MAC ST END +. ds $ST\\$1_QUAD_DIR \\$2 +. if \\n[#NUM_ARGS]=3 .ds $ST\\$1_FILL QUAD +. nr #ST\\$1_LENGTH \\n[#ST\\$1_MARK]-\\n[#ST\\$1_OFFSET] +. ie \\n[#IN_TAB] \ +. TAB_SET \\$1 \\n[#ST\\$1_OFFSET]u+\\n[#ST_OFFSET]u \ + \\n[#ST\\$1_LENGTH]u \\*[$ST\\$1_QUAD_DIR] \\*[$ST\\$1_FILL] +. el \ +. TAB_SET \\$1 \\n[#ST\\$1_OFFSET]u \\n[#ST\\$1_LENGTH]u \ + \\*[$ST\\$1_QUAD_DIR] \\*[$ST\\$1_FILL] +.END +\# +\# TAB SET +\# ------- +\# *Arguments: +\# <n> ident(ipPcm) length(ipPcm) [L | R | C | J [QUAD]] +\# *Function: +\# Creates macros TABn and TAB n, where "n" is any arbitrary number. +\# TABn is a typesetting tab (i.e. a tab defined as an indent +\# from the page left offset plus a line length.) +\# *Notes: +\# n = arbitrary digit to identify the tab +\# indent = indent from left margin; unit of measure required +\# length = length of tab (unit of measure required; can be +\# \w'<string>'u--if more than one word in string, surround +\# with double quotes "\w'<three word string>'" +\# LRCJ = quad for tab (left, right, center, justified) +\# If option QUAD afterwards is not given, quad is line for line +\# (no fill mode), meaning that there's no need for .BR or .br +\# between lines. +\# QUAD = fill tab (so it behaves as if .QUAD LRC or .JUSTIFY +\# had been given). +\# +\# N.B. -- indents *must* be turned off before setting tabs +\# +\# Tabs are not columnar in behaviour. .TN and \*[TB+] permit +\# bottom-line to bottom-line tab movement. +\# +\# When resetting tabs, .TQ must be invoked before .TAB_SET. +\# +\# Indents are turned off automatically whenever a new tab is called +\# with TAB <n>. +\# +\# Generally, it's a good idea to make sure all indents are off +\# before setting tabs. +\# +.MAC TAB_SET END +. br +. nr #TAB_NUMBER \\$1 +. ds $CURRENT_TAB \\n[#TAB_NUMBER] +. nr #TAB_OFFSET (\\$2) +. nr #TAB_LENGTH (\\$3) +. MAC TAB\\n[#TAB_NUMBER] +. if !\\\\n[#TB+]=1 .br +. if \\\\n[#TB+]=1 \{\ +. EL +. vpt 0 +. rr #TB+ +. \} +. in 0 +. nr #TAB_ACTIVE 1 +. nr #CURRENT_TAB \\n[#TAB_NUMBER] +. ds $CURRENT_TAB \\*[$CURRENT_TAB] +. nr #TAB_OFFSET\\*[$CURRENT_TAB] \\n[#TAB_OFFSET] +. nr #ST_OFFSET \\n[#TAB_OFFSET] +. ie !'\\\\n[.z]'' \ +\!. po \\\\\\\\n[#L_MARGIN]u+\\\\n[#TAB_OFFSET\\\\*[$CURRENT_TAB]]u +. el \ +. po \\\\n[#L_MARGIN]u+\\\\n[#TAB_OFFSET\\\\*[$CURRENT_TAB]]u +. ll \\n[#TAB_LENGTH]u +. ta \En[.l]u +. ie '\\$5'QUAD' \{\ +. if '\\$4'L' .QUAD L +. if '\\$4'R' .QUAD R +. if '\\$4'C' .QUAD C +. if '\\$4'J' .JUSTIFY +. \} +. el \{\ +. if '\\$4'' .LEFT +. if '\\$4'L' .LEFT +. if '\\$4'R' .RIGHT +. if '\\$4'C' .CENTER +. if '\\$4'J' .JUSTIFY +. \} +. if \\\\n[#TN]=1 \{\ +. TRAP +. rr #TN +. \} +.. +. rr #TAB_ACTIVE +.END +\# +\# TAB +\# --- +\# *Arguments: +\# <tab number to tab into> +\# *Function: +\# Moves to tab number passed as an argument. +\# +.MAC TAB END +. ds $TAB_NUMBER \\$1 +. TAB\\*[$TAB_NUMBER] +. nr #IN_TAB 1 +.END +\# +\# TAB NEXT +\# -------- +\# *Argument: +\# <none> +\# *Function: +\# Automatically moves to TAB<n+1> on the same line as the last +\# line of the previous tab. +\# *Notes: +\# The \c inline must be appended to the end of input lines when in +\# nofill mode; in fill modes, the \c inline must not be used. +\# +.MAC TN END +. nr #TN 1 +. vpt 0 +. sp -1v +. nr #NEXT_TAB \\n[#CURRENT_TAB]+1 +. TAB\\n[#NEXT_TAB] +. vpt +.END +\# +\# An inline escape to accomplish the same thing. Preferable, since +\# it works with filled and non-filled copy and doesn't require the +\# user to remember to use (or not use) the \c. +\# +.ds TB+ \ +"\c\R'#TB+ 1'\R'#TN 1'\R'#NEXT_TAB \\n[#CURRENT_TAB]+1'\\*[TAB\\n[#NEXT_TAB]]\c +\# +\# TAB QUIT +\# -------- +\# *Argument: +\# <none> +\# *Function: +\# Sets #TAB_ACTIVE to "0" (off). +\# Resets left margin to value in effect prior to tabs. +\# Resets line length to value in effect prior to tabs. +\# Checks #QUAD to see if we were in flush or quad mode +\# prior to tabs (0=off, 1=on). +\# Resets QUAD [ L|R|C ], LEFT, RIGHT, CENTER, or JUSTIFY +\# in effect prior to tabs. +\# *Notes: +\# TQ must precede setting new tabs to get the tabs' indents +\# measured from page left. Otherwise, the tabs' indents are +\# measured from the left margin of the currently active tab. +\# +.MAC TQ END +. br +. rr #TAB_ACTIVE +. rr #IN_TAB +. nr #LOOP 0 1 +. while \\n+[#LOOP]<20 \{\ +. rm $ST\\n[#LOOP]_FILL +. \} +. rr #LOOP +. ie !'\\n[.z]'' \{\ +\!. po \\n[#L_MARGIN]u +\!. ll \\n[#L_LENGTH]u +. \} +. el \{\ +. po \\n[#L_MARGIN]u +. ll \\n[#L_LENGTH]u +. \} +. ll \\n[#L_LENGTH]u +. ta \\n[.l]u +. ie \\n[#QUAD] \{\ +. ie '\\*[$RESTORE_QUAD_VALUE]'J' .JUSTIFY +. el .QUAD \\*[$RESTORE_QUAD_VALUE] +. \} +. el \{\ +. if '\\*[$RESTORE_QUAD_VALUE]'LEFT' .LEFT +. if '\\*[$RESTORE_QUAD_VALUE]'RIGHT' .RIGHT +. if '\\*[$RESTORE_QUAD_VALUE]'CENTER' .CENTER +. \} +.END +\# +\# ==================================================================== +\# +\# COLOR HANDLING +\# ============== +\# +\# COLOR +\# ----- +\# *Arguments: +\# <pre-defined NEWCOLOR or XCOLOR> +\# *Function: +\# Allows the inline escape for setting color to be called +\# as a macro. +\# +.MAC COLOR END +. ie \\n[.u]=1 \{\ +\c +\\*[\\$1]\c +. \} +. el \\*[\\$1] +.END +\# +\# NEWCOLOR +\# -------- +\# *Arguments: +\# <color name> [<color scheme>] <color definition> +\# *Function: +\# Based on .defcolor, allows users to name and define colors using +\# one of the four color schemes rgb, cmy, cmyk and grey. The new +\# color is then defined as a string so that it can be called inline +\# with \*[COLORNAME] or with .COLOR. +\# *Notes: +\# With only two args, the default color scheme is rgb. +\# +\# It is highly recommended that users define new colors as +\# all-cap strings, to differentiate them from x colors, which must +\# be in lower case. +\# +.MAC NEWCOLOR END +. if \\n[#NUM_ARGS]=2 .defcolor \\$1 rgb \\$2 +. if \\n[#NUM_ARGS]=3 \{\ +. if '\\$2'RGB' .ds $COLOR_SCHEME rgb +. if '\\$2'CYM' .ds $COLOR_SCHEME cym +. if '\\$2'CMYK' .ds $COLOR_SCHEME cmyk +. if '\\$2'GRAY' .ds $COLOR_SCHEME gray +. if '\\$2'GREY' .ds $COLOR_SCHEME gray +. defcolor \\$1 \\*[$COLOR_SCHEME] \\$3 +. \} +. ds \\$1 \\m[\\$1] +.END +\# +\# XCOLOR +\# ------ +\# *Arguments: +\# <x color name> [<alias>] +\# *Function: +\# Defines a string of x color name (i.e. a predefined x +\# color). If <alias> is given, creates a string of <alias name> +\# that references the x color name of the first argument. +\# *Notes: +\# The color name must be a valid color name from rgb.txt, and +\# must be given entirely in lower case, all one word. +\# +.MAC XCOLOR END +. ds \\$1 \m[\\$1] +. if \\n[#NUM_ARGS]=2 \{\ +. ds \\$2 \m[\\$1] +. ds $\\$2_FILL \\$1 +. ds COLAL_\\$2 \\$1 +. \} +.END +\# +\# Pre-define xcolors black and white +\# +.ds black \m[black] +.ds BLACK \m[black] +.ds white \m[white] +.ds WHITE \m[white] +.ds default black +\# +\# ===================================================================== +\# +\# +++MISCELLANEOUS USEFUL MACROS AND STRINGS+++ +\# +.nr _w 500 +.nr _d 1250 +\# +\# These string are used for creating aliases within loops that set +\# style for doc-cover, cover, and docheader items. They're defined +\# here because underscoring needs them. +\# +.ds TITLE_TYPE_1 ATTRIBUTE +.ds TITLE_TYPE_2 AUTHOR +.ds TITLE_TYPE_3 CHAPTER +.ds TITLE_TYPE_4 CHAPTER_TITLE +.ds TITLE_TYPE_5 COVERTITLE +.ds TITLE_TYPE_6 DOCTITLE +.ds TITLE_TYPE_7 DOCTYPE +.ds TITLE_TYPE_8 DOC_COVERTITLE +.ds TITLE_TYPE_9 SUBTITLE +.ds TITLE_TYPE_10 TITLE +.ds TITLE_TYPE_11 MISC +.ds TITLE_TYPE_12 COPYRIGHT +.ds TITLE_TYPE_13 DOC_COVER_TITLE +.ds TITLE_TYPE_14 COVER_TITLE +\# +\# UNDERLINE +\# --------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Simulates typewriter-style underlining of italic passages. +\# *Notes: +\# Defaults for rule weight and distance from baseline are below. +\# UNDERLINE_SPECS lets user change them +\# +.MAC UNDERLINE_SPECS END +. ie \B'\\$1' .nr _w (u;\\$1) +. el \{\ +. ie '\\$1'DEFAULT' .nr _w 500 +. el \{\ +. nr _w 500 +. tm1 "[mom]: The first argument to \\$0 must be a numeric +. tm1 " argument with a unit of measure appended, or DEFAULT. +. tm1 " Setting underline weight to DEFAULT. +. \} +. \} +. shift +. ie \B'\\$1' .nr _d (u;\\$1) +. el \{\ +. ie '\\$1'DEFAULT' .nr _d 1250 +. el \{\ +. nr _d 1250 +. tm1 "[mom]: The second argument to \\$0 must be a numeric +. tm1 " argument with a unit of measure appended, or DEFAULT. +. tm1 " Setting underline distance from baseline to DEFAULT. +. \} +. \} +.END +\# +.MAC UNDERLINE END +. ds $SAVED_SS_VAR \\*[$SS_VAR] +. ie '\\$1'' \{\ +. nr #UNDERLINE_ON 1 +. ss \\n[.ss] 0 +. ie !n .nop \X'ps: exec \\n[_w] \\n[_d] decorline'\c +. el .cu 1000 +. \} +. el \{\ +. nr #UNDERLINE_ON 0 +. if !'\\*[$SAVED_SS_VAR]'' .SS \\*[$SAVED_SS_VAR] +. ie !n .nop \X'ps: exec decornone'\c +. el .cu 0 +. \} +.END +\# +\# UL/ULX +\# ------ +\# *Arguments: +\# <none> +\# *Function: +\# Simulates typewriter-style underlining of italic passages. +\# *Notes: +\# Intended to be called with inline escapes \*[UL] (underline +\# on) and \*[ULX] (underline off). +\# +.MAC UL END +\c +. ds $SAVED_SS_VAR \\*[$SS_VAR] +. ss \\n[.ss] 0 +. ie !'\\n[.z]'' \{\ +\c +. ie !n \{\ +. if !\\n[.k]=0 \?\h'-\w'\\n[.ss]'u'\? +\?\R'#UNDERLINE_ON 1'\X'ps: exec \\n[_w] \\n[_d] decorline'\?\c +. \} +. el \{\ +\?\R'#UNDERLINE_ON 1'\?\c +. cu 1000 +. \} +. \} +. el \{\ +. ie !n \{\ +. nr #UNDERLINE_ON 1 +. nop \X'ps: exec \\n[_w] \\n[_d] decorline'\c +. \} +. el \{\ +\R'#UNDERLINE_ON 1'\c +. cu 1000 +. \} +. \} +.END +\# +.MAC ULX END +\c +. SS \\*[$SAVED_SS_VAR] +. rm $SAVED_SS_VAR +. ie !'\\n[.z]'' \{\ +\c +. ie !n \{\ +\?\R'#UNDERLINE_ON 0'\X'ps: exec decornone'\?\c +. \} +. el \{\ +\?\R'#UNDERLINE_ON 0'\?\c +. cu 0 +. \} +. \} +. el \{\ +. ie !n \{\ +. nr #UNDERLINE_ON 0 +. nop \X'ps: exec decornone'\c +. \} +. el \{\ +. nr #UNDERLINE_ON 0 +. cu 0 +. \} +. \} +.END +\# +\# UNDERSCORE +\# ---------- +\# *Arguments: +\# [<points below baseline>] "text" +\# *Function: +\# Places an underscore 2 points under the string if no lead given, +\# otherwise places underscore under string by user specified amount. +\# *Notes: +\# When using this macro, the string to be underscored must begin +\# with double-quotes ("), regardless of whether it's the sole +\# argument or the second. +\# E.g.: +\# .UNDERSCORE "Text to be underscored +\# or +\# .UNDERSCORE 2p "Text to be underscored +\# +\# UNDERSCORE does not work across line breaks. Each line of text +\# must be entered separately. If the UNDERSCORE begins in the +\# middle of a line and crosses over a break, the portion before +\# the break and the portion afterwards must be entered +\# separately. +\# +.MAC UNDERSCORE END +. nr #SAVED_UNDERSCORE_WEIGHT \\n[#UNDERSCORE_WEIGHT] +. nr #SAVED_UNDERSCORE_WEIGHT_ADJ \\n[#UNDERSCORE_WEIGHT_ADJ] +. ds $SAVED_UNDERSCORE_GAP \\*[$UNDERSCORE_GAP] +. if \\n[#NUM_ARGS]>=2 \{\ +. if \B'\\$1' \{\ +. ds $UNDERSCORE_GAP \\$1 +. shift +. \} +. if '\\$1'PREFIX' \{\ +. ds $PREFIX \\$2 +. shift 2 +. \} +. if '\\$1'SUFFIX' \{\ +. ds $SUFFIX \\$2 +. shift 2 +. \} +. \} +. if !'\\*[$TITLE_TYPE]'' \{\ +. nr #UNDERSCORE_WEIGHT \\n[#\\*[$TITLE_TYPE]_UNDERLINE_WEIGHT] +. nr #UNDERSCORE_WEIGHT_ADJ \\n[#\\*[$TITLE_TYPE]_UNDERLINE_WEIGHT_ADJ] +. ds $UNDERSCORE_GAP \\*[$\\*[$TITLE_TYPE]_UNDERLINE_GAP] +. \} +. nr #TEXT_WIDTH \w'\\$1' +. ie \\n[.u]=1 \{\ +\\*[$PREFIX]\Z'\\$1'\ +\Z'\D't \\n[#UNDERSCORE_WEIGHT]''\ +\v'\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\ +\D'l \\n[#TEXT_WIDTH]u 0'\ +\Z'\D't \\n[#RULE_WEIGHT]''\ +\v'-(\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u)'\\*[$SUFFIX]\c +. nop +. \} +. el \{\ +\\*[$PREFIX]\Z'\\$1'\ +\Z'\D't \\n[#UNDERSCORE_WEIGHT]''\ +\v'\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\ +\D'l \\n[#TEXT_WIDTH]u 0'\ +\Z'\D't \\n[#RULE_WEIGHT]''\ +\v'-(\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u)'\\*[$SUFFIX] +. \} +. nr #UNDERSCORE_WEIGHT \\n[#SAVED_UNDERSCORE_WEIGHT] +. nr #UNDERSCORE_WEIGHT_ADJ \\n[#SAVED_UNDERSCORE_WEIGHT_ADJ] +. ds $UNDERSCORE_GAP \\*[$SAVED_UNDERSCORE_GAP] +. rr #SAVED_UNDERSCORE_WEIGHT +. rr #SAVED_UNDERSCORE_WEIGHT_ADJ +. rm $SAVED_UNDERSCORE_GAP +. rm $PREFIX +. rm $SUFFIX +. rm $TITLE_TYPE +.END +\# +\# DOUBLE UNDERSCORE +\# ----------------- +\# *Arguments: +\# [points below baseline] [points distance between rules] "text" +\# *Function: +\# Same as UNDERSCORE, except it produces a double underscore. The default +\# distance between the rules is 2 points. +\# *Notes: +\# The same double-quote requirement as UNDERSCORE. +\# +.MAC UNDERSCORE2 END +. nr #SAVED_UNDERSCORE_WEIGHT \\n[#UNDERSCORE_WEIGHT] +. nr #SAVED_UNDERSCORE_WEIGHT_ADJ \\n[#UNDERSCORE_WEIGHT_ADJ] +. ds $SAVED_UNDERSCORE_GAP \\*[$UNDERSCORE_GAP] +. ds $SAVED_RULE_GAP \\*[$RULE_GAP] +. if \\n[#NUM_ARGS]>=2 \{\ +. if \B'\\$1' \{\ +. ds $UNDERSCORE_GAP \\$1 +. shift +. \} +. if \B'\\$1' \{\ +. ds $RULE_GAP \\$1 +. shift +. \} +. if '\\$1'PREFIX' \{\ +. ds $PREFIX \\$2 +. shift 2 +. \} +. if '\\$1'SUFFIX' \{\ +. ds $SUFFIX \\$2 +. shift 2 +. \} +. if \\n[#NUM_ARGS]=3 \{\ +. ds $UNDERSCORE_GAP \\$1 +. ds $RULE_GAP \\$2 +. shift 2 +. \} +. if !'\\*[$TITLE_TYPE]'' \{\ +. nr #UNDERSCORE_WEIGHT \\n[#\\*[$TITLE_TYPE]_UNDERLINE_WEIGHT] +. nr #UNDERSCORE_WEIGHT_ADJ \\n[#\\*[$TITLE_TYPE]_UNDERLINE_WEIGHT_ADJ] +. ds $UNDERSCORE_GAP \\*[$\\*[$TITLE_TYPE]_UNDERLINE_GAP] +. ds $RULE_GAP \\*[$\\*[$TITLE_TYPE]_RULE_GAP] +. \} +. nr #TEXT_WIDTH \w'\\$1' +. ie \\n[.u]=1 \{\ +\\*[$PREFIX]\Z'\\$1'\ +\Z'\D't \\n[#UNDERSCORE_WEIGHT]''\ +\v'\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\ +\Z'\D'l \\n[#TEXT_WIDTH]u 0''\ +\v'\\*[$RULE_GAP]+\\n[#UNDERSCORE_WEIGHT]u'\ +\D'l \\n[#TEXT_WIDTH]u 0'\ +\Z'\D't \\n[#RULE_WEIGHT]''\ +\v'-(\\*[$UNDERSCORE_GAP]+\\*[$RULE_GAP])-(\\n[#UNDERSCORE_WEIGHT]u*2u)'\\*[$SUFFIX]\c +. \} +. el \{\ +\\*[$PREFIX]\Z'\\$1'\ +\Z'\D't \\n[#UNDERSCORE_WEIGHT]''\ +\v'\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\ +\Z'\D'l \\n[#TEXT_WIDTH]u 0''\ +\v'\\*[$RULE_GAP]+\\n[#UNDERSCORE_WEIGHT]u'\ +\D'l \\n[#TEXT_WIDTH]u 0'\ +\Z'\D't \\n[#RULE_WEIGHT]''\ +\v'-(\\*[$UNDERSCORE_GAP]+\\*[$RULE_GAP])-(\\n[#UNDERSCORE_WEIGHT]u*2u)'\\*[$SUFFIX] +. \} +. nr #UNDERSCORE_WEIGHT \\n[#SAVED_UNDERSCORE_WEIGHT] +. nr #UNDERSCORE_WEIGHT_ADJ \\n[#SAVED_UNDERSCORE_WEIGHT_ADJ] +. ds $UNDERSCORE_GAP \\*[$SAVED_UNDERSCORE_GAP] +. rr #SAVED_UNDERSCORE_WEIGHT +. rr #SAVED_UNDERSCORE_WEIGHT_ADJ +. rm $PREFIX +. rm $SUFFIX +. rm $SAVED_UNDERSCORE_GAP +. rm $SAVED_RULE_GAP +. rm $TITLE_TYPE +.END +\# +\# Default underscoring underline and rule gaps +\# +.ds $BIB_STRING_RULE_GAP 2p +.ds $BIB_STRING_UNDERLINE_GAP 2p +.ds $EN_STRING_RULE_GAP 2p +.ds $EN_STRING_UNDERLINE_GAP 2p +.ds $EN_TITLE_UNDERLINE_GAP 2p +.ds $RULE_GAP 2p +.ds $TOC_HEADER_RULE_GAP 2p +.ds $TOC_HEADER_UNDERLINE_GAP 2p +.ds $UNDERSCORE_GAP 2p +\# +.nr #LOOP 0 1 +.while \n+[#LOOP]<=14 \{\ +. ds $\*[TITLE_TYPE_\n[#LOOP]]_RULE_GAP 2p +. ds $COVER_\*[TITLE_TYPE_\n[#LOOP]]_RULE_GAP 2p +. ds $DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_RULE_GAP 2p +. ds $\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_GAP 2p +. ds $COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_GAP 2p +. ds $DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_GAP 2p +.\} +\# +\# SUPERSCRIPT +\# ----------- +\# *Function: +\# Prints everything after inline invocation as superscript. +\# *Notes: +\# \*[SUP] and \*[SUPX] turn superscript on and off respectively. +\# If running type is pseudo-condensed/expanded, invoke the superscript +\# strings as \*[CONDSUP] or \*[EXTSUP] and turn off with \*[CONDSUPX] +\# and \*[EXTSUPX] respectively. +\# +\# Default raise/lower amount +.ds $SUP_RAISE \v'-.3m' +.ds $SUP_LOWER \v'.3m' +\# +\# SUPERSCRIPT RAISE +\# ----------------- +\# *Argument: +\# <amount to raise superscript> +\# *Function: +\# Defines strings $SUP_RAISE and $SUP_LOWER for use with \*[SUP], +\# \*[CONDSUP] and \*[EXTSUP]. +\# +.MAC SUPERSCRIPT_RAISE_AMOUNT END +. ds $SUP_RAISE_AMOUNT \\$1 +. ds $SUP_RAISE \v'-\\*[$SUP_RAISE_AMOUNT]' +. ds $SUP_LOWER \v'\\*[$SUP_RAISE_AMOUNT]' +.END +\# +.ds SUP \ +\R'#PT_SIZE_IN_UNITS \En[.ps]'\ +\R'#SUP_PT_SIZE \En[#PT_SIZE_IN_UNITS]u*6u/10u'\ +\s[\En[#PT_SIZE_IN_UNITS]u]\E*[$SUP_RAISE]\s[\En[#SUP_PT_SIZE]u] +\# +.ds SUPX \s[\En[#PT_SIZE_IN_UNITS]u]\E*[$SUP_LOWER] +\# +.ds CONDSUP \ +\R'#PT_SIZE_IN_UNITS \En[.ps]'\ +\R'#SUP_PT_SIZE \En[#PT_SIZE_IN_UNITS]u*6u/10u'\ +\s[\En[#PT_SIZE_IN_UNITS]u]\E*[$SUP_RAISE]\s[\En[#SUP_PT_SIZE]u]\E*[COND_FOR_SUP] +\# +.ds CONDSUPX \s[\En[#PT_SIZE_IN_UNITS]u]\E*[$SUP_LOWER]\E*[COND] +\# +.ds EXTSUP \ +\R'#PT_SIZE_IN_UNITS \En[.ps]'\ +\R'#SUP_PT_SIZE \En[#PT_SIZE_IN_UNITS]u*6u/10u'\ +\s[\En[#PT_SIZE_IN_UNITS]u]\E*[$SUP_RAISE]\s[\En[#SUP_PT_SIZE]u]\E*[EXT_FOR_SUP] +\# +.ds EXTSUPX \s[\En[#PT_SIZE_IN_UNITS]u]\E*[$SUP_LOWER]\E*[EXT] +\# +\# SLANT +\# ----- +\# +\# SETSLANT +\# -------- +\# *Arguments: +\# <number of degrees> | RESET +\# *Function: +\# Modifies register #DEGREES for use with \*[SLANT], or resets +\# it to the default. Defines string \*[SLANTX] +\# *Notes: +\# \*[SLANT] permits pseudo-italicizing of a font in cases where +\# no italic font exists in a particular family. +\# +\# Default # of degrees is 15. +\# +\# Do not use unit of measure with arg to SETSLANT. +\# +\# It may be necessary to adjust the spacing on either side of +\# [SLANT] and [SLANTX]. +\# +\# In docs, SLANT carries over from para to para. +\# +.nr #DEGREES 15 +.ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]' +.ds SLANTX \ER'#SLANT_ON 0'\ES'0' +\# +.MAC SETSLANT END +. ie '\\$1'RESET' \{\ +. nr #DEGREES 15 +. if \\n[#PRINT_STYLE]=1 \ +. if \\n[#UNDERLINE_SLANT] .return +. ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]' +. \} +. el \{\ +. nr #DEGREES \\$1 +. if \\n[#PRINT_STYLE]=1 \ +. if \\n[#UNDERLINE_SLANT] .return +. ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]' +. \} +. ds SLANTX \ER'#SLANT_ON 0'\ES'0' +.END +\# +\# BOLDER +\# ------ +\# +\# SETBOLDER +\# --------- +\# *Arguments: +\# <amount of emboldening> | RESET +\# *Function: +\# Modifies register #BOLDER_UNITS for use with \*[BOLDER], or resets +\# it to the default 700 units. +\# *Notes: +\# \*[BOLDER] allows pseudo-emboldening of a font where no bold +\# font exists in a particular family. +\# +\# Default for SETBOLDER is 700 units. Do not use unit of measure +\# with arg to SETBOLDER. +\# +.nr #BOLDER_UNITS 700 +\# +.MAC SETBOLDER END +. if \\n[#IGNORE]=1 .return +. ie '\\$1'RESET' .nr #BOLDER_UNITS 700 +. el .nr #BOLDER_UNITS \\$1 +.END +\# +.MAC BOLDER END +\c +.bd \\n[.f] \\n[#BOLDER_UNITS] +.END +\# +.MAC BOLDERX END +\c +.bd \\n[.f] +.END +\# +\# +++CONDENSE/EXTEND+++ +\# +\# CONDENSE/EXTEND +\# --------------- +\# *Arguments: +\# <percentage to condense/expand type size> +\# *Function: +\# Stores current point size in z's in #PT_SIZE_IN_UNITS, figures out +\# new point size (for character width) from arg, and defines string +\# COND or EXT, which set the type size to the new character width, +\# and sets the height of type to the value stored in CURRENT_PT_SIZE +\# *Notes: +\# CONDENSE_OR_EXTEND is invoked from the aliases +\# CONDENSE and EXTEND. CONDENSE implies <100, EXTEND +\# implies >100. Do not use a percent sign in the argument. +\# +\# There is no default setting for CONDENSE or EXTEND. +\# 80 is a good approximation of condensed type, 120 is okay +\# for extended. +\# +\# The value set by CONDENSE or EXTEND applies to all +\# subsequent \*[COND] or \*[EXT] escapes until a new value is set. +\# +\# \*[COND] or \*[EXT] must be turned off before all changes of point +\# size, and reinvoked afterwards (if so desired). This refers to +\# changes of point size via control lines AND via inlines. +\# +.MAC CONDENSE_OR_EXTEND END +. if '\\$0'CONDENSE' \{\ +. ds $COND_PERCENT \\$1 +. if \\n[#PRINT_STYLE]=1 \{\ +. rm $COND_PERCENT +. ds $COND_PERCENT 100 +. \} +. ds COND \ +\R'#PT_SIZE_IN_UNITS \En[.ps]'\ +\R'#CONDENSE 1'\ +\R'#COND_WIDTH (\En[#PT_SIZE_IN_UNITS]u*\E*[$COND_PERCENT]u)/100'\ +\Es[\En[#COND_WIDTH]u]\EH'\En[#PT_SIZE_IN_UNITS]u' +. ds COND_FOR_SUP \ +\R'#COND_WIDTH (\En[#SUP_PT_SIZE]u*\E*[$COND_PERCENT]u)/100'\ +\Es[\En[#COND_WIDTH]u]\H'\En[#SUP_PT_SIZE]u' +. \} +. if '\\$0'EXTEND' \{\ +. ds $EXT_PERCENT \\$1 +. if \\n[#PRINT_STYLE]=1 \{\ +. rm $EXT_PERCENT +. ds $EXT_PERCENT 100 +. \} +. ds EXT \ +\R'#PT_SIZE_IN_UNITS \En[.ps]'\ +\R'#EXTEND 1'\ +\R'#EXT_WIDTH (\En[#PT_SIZE_IN_UNITS]u*\E*[$EXT_PERCENT]u)/100'\ +\Es[\En[#EXT_WIDTH]u]\EH'\En[#PT_SIZE_IN_UNITS]u' +. ds EXT_FOR_SUP \ +\R'#EXT_WIDTH (\En[#SUP_PT_SIZE]u*\E*[$EXT_PERCENT]u)/100'\ +\Es[\En[#EXT_WIDTH]u]\H'\En[#EXT_PT_SIZE]u' +. \} +.END +\# +.ds CONDX \ +\ER'#CONDENSE 0'\Es[0]\R'#PT_SIZE_IN_UNITS \En[.ps]'\H'\En[#PT_SIZE_IN_UNITS]u' +.ds EXTX \ +\ER'#EXTEND 0'\Es[0]\R'#PT_SIZE_IN_UNITS \En[.ps]'\H'\En[#PT_SIZE_IN_UNITS]u' +\# +\# +++PAD LINES+++ (insert space) +\# +\# PAD MARKER +\# ---------- +\# *Arguments: +\# <character to use for marking pad points> +\# *Function: +\# Defines string $PAD_MARKER, used in PAD +\# *Notes: +\# $PAD_MARKER is normally # (the pound sign). +\# +.MAC PAD_MARKER END +. ds $PAD_MARKER \\$1 +.END +\# +\# PAD +\# --- +\# *Arguments: +\# "<string of text with padding markers inserted>" +\# "<id of bookmark created by .PDF_BOOKMARK>" +\# *Function: +\# Defines and redefines padding character (default=pound sign +\# unless padding character has been set with PAD_MARKER) +\# several times so that when the string is output at the end +\# of the macro, every # has been converted to an equal-sized +\# amount of padding (blank space) on a line. +\# *Notes: +\# String tabs may be marked off during PAD. +\# +.MAC PAD END +. if \\n[.u]=1 .nr fill 1 +. nf +. if !d$PAD_MARKER .ds $PAD_MARKER # +. char \\*[$PAD_MARKER] \R'#PAD_COUNT \En[#PAD_COUNT]+1' +. ds $FAMILY_FOR_PAD \\n[.fam] +.\" .if !n .fp \\n[.fp] \\n[.sty] +. ds $FONT_FOR_PAD \\n[.sty] +. nr #SIZE_FOR_PAD \\n[.ps] +. ds $PAD_STRING \\$1 +. as $PAD_STRING \Ekp +. di PAD_STRING +. fam \\*[$FAMILY_FOR_PAD] +\f[\\*[$FONT_FOR_PAD]]\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING] +. br +. di +. if \\n[#INDENT_ACTIVE] \{\ +. if \\n[#INDENT_LEFT_ACTIVE] .ll -\\n[#L_INDENT]u +. if \\n[#INDENT_RIGHT_ACTIVE] .ll -\\n[#R_INDENT]u +. if \\n[#INDENT_BOTH_ACTIVE] .ll -\\n[#BR_INDENT]u +. \} +. char \\*[$PAD_MARKER] \ +\R'#SPACE_TO_END \En[.l]-\En[p]'\R'#PAD_SPACE \En[#SPACE_TO_END]/\En[#PAD_COUNT]' +. di PAD_STRING +. fam \\*[$FAMILY_FOR_PAD] +\f[\\*[$FONT_FOR_PAD]]\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING] +. br +. di +. if \\n[#INDENT_ACTIVE] \ +. if (\\n[#INDENT_LEFT_ACTIVE]=1):(\\n[#INDENT_BOTH_ACTIVE]) .ll +. char \\*[$PAD_MARKER] \h'\En[#PAD_SPACE]u' +. if \\n[#SILENT] .SILENT +. fam \\*[$FAMILY_FOR_PAD] +\f[\\*[$FONT_FOR_PAD]]\s[\\n[#SIZE_FOR_PAD]u] +. ie '\\$2'' .nop \\*[$PAD_STRING] +. el \{\ +. ie !'\\$2'NOBREAK' .pdfhref L -D "\\$2" -E -- \&\\*[$PAD_STRING] +. el .nop \\*[$PAD_STRING] +. \} +. if \\n[#SILENT] .SILENT OFF +. br +. if \\n[fill] \{\ +. fi +. rr fill +. \} +. rr #PAD_COUNT +. rr #SPACE_TO_END +. rr #PAD_SPACE +. rm $PAD_STRING +. rm PAD_STRING +. rchar \\*[$PAD_MARKER] +. if '\\$2'NOBREAK' \{\ +. TRAP OFF +. EOL +. TRAP +. \} +.END +\# +\# +++LEADERS+++ +\# +\# The leader mechanism is primitive, but it works. Basically, every +\# macro in this set that includes a line length also sets a single +\# groff tab stop at the right hand end of the line. That way, +\# whenever Ctrl-A is invoked (always at the end of an input line), +\# leader of the correct length gets deposited. Ctrl-A is accessed by +\# the string LEADER (i.e. inline, as \*[LEADER]). Leaders within tabs +\# get their length from the tab line length. +\# +\# SET LEADER CHARACTER +\# -------------------- +\# *Arguments: +\# <character to use whenever \*[LEADER] is invoked> +\# *Function: +\# Set leader character. +\# +.MAC LEADER_CHARACTER END +. lc \\$1 +.END +\# +.ds LEADER +\# +\# +++DROP CAPS+++ +\# +\# DROP CAP FAMILY +\# --------------- +\# *Argument: +\# <family of drop cap> +\# *Function: +\# Creates or modifies string $DC_FAM. +\# +.MAC DROPCAP_FAMILY END +. ds $DC_FAM \\$1 +.END +\# +\# DROP CAP FONT +\# ------------- +\# *Argument: +\# <font of drop cap> +\# *Function: +\# Creates or modifies string $DC_FT. +\# +.MAC DROPCAP_FONT END +. ds $DC_FT \\$1 +.END +\# +\# DROPCAP COLOR +\# ------------- +\# *Arguments: +\# <pre-defined XCOLOR or NEWCOLOR> +\# *Function: +\# Defines string $DC_COLOR to argument. +\# *Notes: +\# User must define an XCOLOR or NEWCOLOR before using +\# DC_COLOR. +\# +.MAC DROPCAP_COLOR END +. if \\n[#PRINT_STYLE]=1 .return +. nr #DC_COLOR 1 +. ds $DC_COLOR \\$1 +.END +\# +\# DROP CAP GUTTER +\# --------------- +\# *Argument: +\# <width of gutter between drop cap and indented text> +\# *Function: +\# Creates or modifies register #DC_GUT. +\# *Notes: +\# Requires unit of measure. Default is 3p. +\# +.MAC DROPCAP_GUTTER END +. nr #DC_GUT (\\$1) +.END +\# +\# DROP CAP ADJUST +\# --------------- +\# *Argument: +\# <+|- # of points to in/decrease point size of drop cap letter> +\# *Function: +\# Creates or modifies string $DC_ADJUST. +\# *Notes: +\# Despite its best efforts, DROPCAP doesn't always get the point +\# size of the drop cap critically perfect. DROPCAP_ADJUST lets +\# the user add or subtract points (or fractions of points) to +\# get the size right. +\# +\# Requires the + or - sign. +\# +.MAC DROPCAP_ADJUST END +. ds $DC_ADJUST \\$1 +.END +\# +\# DROP CAP +\# -------- +\# *Arguments: +\# <dropcap letter> <# of lines> [COND <% to condense> | EXT <% to extend>] +\# *Function: +\# Calculates point size of dropcap based on # of lines passed as +\# arg 2. Sets indent for text based on dropcap width+gutter. +\# Advances and prints dropcap; reverses and prints indented text +\# to bottom of dropcap, then resets indent to left margin (plus +\# any indent that was in effect prior to invoking DROPCAP). +\# *Notes: +\# Drop caps when using the doc processing macro PP only work with +\# initial paragraphs (i.e. at doc start, or after heads), only when +\# DROPCAPS comes immediately after PP, and only when the PRINTSTYLE +\# is TYPESET. If these conditions aren't met, DROPCAPS is silently +\# ignored. +\# +\# The COND or EXT argument are processed separately from all +\# other COND or EXT inlines or macros, hence passing COND or +\# EXT has no effect on running type. +\# +.MAC DROPCAP END +. if \\n[#IGNORE]=1 \{\ +. PRINT \\$1\c +. return +. \} +. br +. if n \{\ +. PRINT \\$1\c +. return +. \} +. if \\n[#DOCS] \{\ +. if \\n[#PRINT_STYLE]=1 \{\ +. PRINT \\$1\c +. return +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. sp -1 +. if \\n[#PP_STYLE]=2 \{\ +. PRINT \\$1\c +. return +. \} +. if \\n[#PP]>1 \{\ +. if \\n[#PP_INDENT] .ti \\n[#PP_INDENT]u +. PRINT \\$1\c +. return +. \} +. ti 0 +. \} +. \} +. ds $DROPCAP \\$1 +. nr #DC_LINES \\$2-1 +. if \\n[#CONDENSE]=1 \{\ +. ds $RESTORE_COND \\*[$COND_PERCENT] +\\*[CONDX] +. nr #CONDENSE_WAS_ON 1 +. \} +. if \\n[#EXTEND]=1 \{\ +. ds $RESTORE_EXT \\*[$EXT_PERCENT] +\\*[EXTX] +. nr #EXTEND_WAS_ON 1 +. \} +. if '\\$3'COND' .CONDENSE \\$4 +. if '\\$3'EXT' .EXTEND \\$4 +. if !r#DC_GUT .nr #DC_GUT 3p +. ie \\n[#DOCS] .ds $RESTORE_FAM \\*[$DOC_FAM] +. el .ds $RESTORE_FAM \\n[.fam] +. ie \\n[#DOCS] .ds $RESTORE_FT \\*[$PP_FT] +. el .ds $RESTORE_FT \\*[$FONT] +. nr #RESTORE_PT_SIZE \\n[#PT_SIZE] +. nr #RESTORE_INDENT \\n[.i] +. SIZESPECS +. nr #DC_HEIGHT \\n[#DC_LINES]*\\n[#LEAD]+\\n[#CAP_HEIGHT] +. ie !d$DC_FAM .FAM \\n[.fam] +. el .FAM \\*[$DC_FAM] +. ie !d$DC_FT .FT \\*[$FONT] +. el .FT \\*[$DC_FT] +. while \\n[#GET_DC_HEIGHT]<\\n[#DC_HEIGHT] \{\ +. ps \\n[#PT_SIZE]u+100u +. SIZESPECS +. nr #GET_DC_HEIGHT \\n[#CAP_HEIGHT] +. \} +. if d$DC_ADJUST .ps \\*[$DC_ADJUST]p +. nr #DC_LINES +1 +. if (\\n[#DC_LINES]v-1v)>(\\n[.t]-1) \{\ +. nr pgnum \\n%+\\n[#PAGE_NUM_ADJ] 1 +. if \\n[#COLUMNS]=1 .ds col-num ", column \\n[#COL_NUM] +. tm1 \ +"[mom]: Dropcap at line \\n[.c] does not fit on page \\n[pgnum]\\*[col-num]. +. tm1 \ +" Shifting paragraph to next page or column. +. ie \\n[#COLUMNS] .COL_NEXT +. el .NEWPAGE +. \} +. ie \\n[#DC_COLOR]=1 \{\ +. ie !'\\$3'' \{\ +. ie '\\$3'COND' \ +. PRINT \ +\\*[DOWN \\n[#DC_LINES]v]\ +\m[\\*[$DC_COLOR]]\\*[COND]\\*[$DROPCAP]\\*[CONDX]\m[]\\*[UP \\n[#DC_LINES]v] +. el \ +. PRINT \ +\\*[DOWN \\n[#DC_LINES]v]\ +\m[\\*[$DC_COLOR]]\\*[EXT]\\*[$DROPCAP]\\*[EXTX]\m[]\\*[UP \\n[#DC_LINES]v] +. \} +. el .PRINT \ +\\*[DOWN \\n[#DC_LINES]v]\ +\m[\\*[$DC_COLOR]]\\*[$DROPCAP]\m[]\\*[UP \\n[#DC_LINES]v] +. \} +. el \{\ +. ie !'\\$3'' \{\ +. ie '\\$3'COND' \ +. PRINT \ +\\*[DOWN \\n[#DC_LINES]v]\ +\\*[COND]\\*[$DROPCAP]\\*[CONDX]\\*[UP \\n[#DC_LINES]v] +. el \ +. PRINT \ +\\*[DOWN \\n[#DC_LINES]v]\ +\\*[EXT]\\*[$DROPCAP]\\*[EXTX]\\*[UP \\n[#DC_LINES]v] +. \} +. el .PRINT \ +\\*[DOWN \\n[#DC_LINES]v]\ +\\*[$DROPCAP]\\*[UP \\n[#DC_LINES]v] +. \} +. if '\\$3'COND' \E*[COND] +. if '\\$3'EXT' \E*[EXT] +. ie \\n[.i] \{\ +. vs 0 +. br +. in +\w'\\*[$DROPCAP]'u+\\n[#DC_GUT]u +. vs +. \} +. el \{\ +. vs 0 +. br +. in \w'\\*[$DROPCAP]'u+\\n[#DC_GUT]u +. vs +. \} +. if '\\$3'COND' \E*[CONDX]\c +. if '\\$3'EXT' \E*[EXTX]\c +. FAM \\*[$RESTORE_FAM] +. FT \\*[$RESTORE_FT] +. ps \\n[#RESTORE_PT_SIZE]u +. if \\n[#CONDENSE_WAS_ON] \{\ +. CONDENSE \\*[$RESTORE_COND] +\\*[COND]\c +. \} +. if \\n[#EXTEND_WAS_ON] \{\ +. EXTEND \\*[$RESTORE_EXT] +\\*[EXT]\c +. \} +. ie \\n[.u] .wh \\n[.d]u+\\n[#DC_HEIGHT]u-1v DROPCAP_OFF +. el .wh \\n[.d]u+\\n[#DC_HEIGHT]u DROPCAP_OFF +. rr #CONDENSE_WAS_ON +. rr #EXTEND_WAS_ON +. rm $DROPCAP +. rr #DC_LINES +. rm $RESTORE_COND +. rm $RESTORE_EXT +. rm $RESTORE_FAM +. rm $RESTORE_FT +. rr #RESTORE_PT_SIZE +. rr #RESTORE_INDENT +. rr #DC_HEIGHT +. rr #GET_DC_HEIGHT +. rr x +.END +\# +.MAC DROPCAP_OFF END +' in \\n[#RESTORE_INDENT]u +. ch DROPCAP_OFF +.END +\# +\# ===================================================================== +\# +\# +++GRAPHICAL OBJECTS+++ +\# +\# Set params for graphical objects. +\# +.MAC GRAPHICAL_OBJ END +. rr #FILLED +. rr #FILL_MODE +. rr #NOFILL +. rr #NOFILL_MODE +. if \\n[.vpt]=1 \{\ +. vpt 0 +. nr #RESTORE_TRAP 1 +. \} +. ie !\\n[#NO_ADVANCE]=1 .br +. el \{\ +. sp -1v +. rr #NO_ADVANCE +. \} +. ie \\n[.u]=1 \{\ +. nr #FILLED 1 +. nr #FILL_MODE \\n[.j] +. \} +. el \{\ +. nr #NOFILL 1 +. if \\n[.ce]>0 .nr #NOFILL_MODE 3 +. if \\n[.rj]>0 .nr #NOFILL_MODE 5 +. ce 0 +. rj 0 +. \} +. nf +.END +\# +\# HORIZONTAL RULE - DRH +\# --------------------- +\# *Arguments: +\# <none> | <rule weight> <indent> <length> [ <color> ] +\# *Function: +\# With no arg, draws a full measure rule. With args, draws +\# described horizontal rule. +\# *Notes: +\# Rules are drawn left-to-right, from the baseline down, and +\# return to their point of origin. If no arg given (full measure +\# rule), the rule weight is the one set by RULE_WEIGHT. +\# +.MAC DRH END +. GRAPHICAL_OBJ +. ds $RL_WEIGHT \\$1 +. ds $RL_INDENT \\$2 +. ds $RL_LENGTH \\$3 +. ie !'\\$4'' .ds $RL_COLOR \\$4 +. el \{\ +. ie '\\n[.m]'' .ds $RL_COLOR \\*[default] +. el .ds $RL_COLOR \\n[.m] +. \} +. nr #SAVED_WEIGHT \\n[#RULE_WEIGHT] +. nr #SAVED_WEIGHT_ADJ \\n[#RULE_WEIGHT_ADJ] +. di NULL +. if \\n[#NUM_ARGS]>=1 .RULE_WEIGHT \\*[$RL_WEIGHT] +. di +. COLOR \\*[$RL_COLOR] +. ie \\n[#NUM_ARGS]=0 \{\ +. ie \\n[#INDENT_ACTIVE] \{\ +. nr #RESTORE_L_LENGTH \\n[.l] +. if \\n[#INDENT_BOTH_ACTIVE] .ll \\n[.l]u-\\n[#BL_INDENT]u +. if \\n[#INDENT_LEFT_ACTIVE] .ll \\n[.l]u-\\n[#L_INDENT]u +\Z'\D't \\n[#RULE_WEIGHT]''\ +\h'\\*[$RL_INDENT]+\\n[#RULE_WEIGHT_ADJ]u'\ +\v'\\n[#RULE_WEIGHT_ADJ]u'\ +\D'l \En[.l]u 0'\v'-\\n[#RULE_WEIGHT_ADJ]u'\ +\v'-\\n[#RULE_WEIGHT_ADJ]u'\ +\Z'\D't \\n[#SAVED_RULE_WEIGHT]'' +. ll \\n[#RESTORE_L_LENGTH]u +. rr #RESTORE_L_LENGTH +. \} +. el \{\ +\Z'\D't \\n[#RULE_WEIGHT]''\ +\h'\\*[$RL_INDENT]+\\n[#RULE_WEIGHT_ADJ]u'\ +\v'\\n[#RULE_WEIGHT_ADJ]u'\ +\D'l \En[.l]u 0'\v'-\\n[#RULE_WEIGHT_ADJ]u'\ +\v'-\\n[#RULE_WEIGHT_ADJ]u'\ +\Z'\D't \\n[#SAVED_RULE_WEIGHT]'' +. \} +. \} +. el \{\ +\Z'\D't \\n[#RULE_WEIGHT]''\ +\h'\\*[$RL_INDENT]+\\n[#RULE_WEIGHT_ADJ]u'\ +\v'\\n[#RULE_WEIGHT_ADJ]u'\ +\D'l \\*[$RL_LENGTH] 0'\ +\v'-\\n[#RULE_WEIGHT_ADJ]u'\ +\Z'\D't \\n[#SAVED_RULE_WEIGHT]'' +. rr #RESTORE_L_LENGTH +. \} +. if \\n[#FILLED]=1 \{\ +. if \\n[#FILL_MODE]=0 .QUAD LEFT +. if \\n[#FILL_MODE]=1 .JUSTIFY +. if \\n[#FILL_MODE]=3 .QUAD CENTER +. if \\n[#FILL_MODE]=5 .QUAD RIGHT +. rr #FILLED +. \} +. sp -1v +. if \\n[#NOFILL]=1 \{\ +. if \\n[#NOFILL_MODE]=3 .CENTER +. if \\n[#NOFILL_MODE]=5 .RIGHT +. \} +. gcolor +. nr #RULE_WEIGHT \\n[#SAVED_WEIGHT] +. nr #RULE_WEIGHT_ADJ \\n[#SAVED_WEIGHT_ADJ] +. rr #SAVED_WEIGHT +. rr #SAVED_WEIGHT_ADJ +. if \\n[#RESTORE_TRAP]=1 \{\ +. vpt +. rr #RESTORE_TRAP +. \} +. if '\\n[.z]'FLOAT*DIV' \ +. if !(\\n[.d]+\\n[#WEIGHT])<\\n[D-float] .nr D-float \\n[.d]+\\n[#WEIGHT] +.END +\# +\# RULE +\# ---- +\# *Argument: +\# <none> +\# *Function: +\# Draws a rule the length of the current measure. +\# *Notes: +\# A convenience macro. DRH with no argument does the same thing. +\# Kept in for backward compatibility. +\# +.MAC RULE END +. if \\n[.u]=1 \{\ +. nr fill 1 +. ds $CURRENT_QUAD \\*[$QUAD_VALUE] +. nf +. \} +. ie \\n[#INDENT_ACTIVE] \{\ +. if \\n[#INDENT_BOTH_ACTIVE] .ll \\n[.l]u-\\n[#BL_INDENT]u +. if \\n[#INDENT_LEFT_ACTIVE] .ll \\n[.l]u-\\n[#L_INDENT]u +. PRINT \ +\Z'\D't \\n[#RULE_WEIGHT]''\ +\v'\\n[#RULE_WEIGHT_ADJ]u'\ +\h'\\n[#RULE_WEIGHT_ADJ]u'\ +\D'l \En[.l]u 0'\v'-\\n[#RULE_WEIGHT_ADJ]u'\h'|0'\c +. ll +. rr #RESTORE_L_LENGTH +. \} +. el \{\ +. PRINT \ +\Z'\D't \\n[#RULE_WEIGHT]''\ +\v'\\n[#RULE_WEIGHT_ADJ]u'\ +\h'\\n[#RULE_WEIGHT_ADJ]u'\ +\D'l \En[.l]u 0'\v'-\\n[#RULE_WEIGHT_ADJ]u'\h'|0'\c +. \} +. if \\n[fill] \{\ +. fi +. rr fill +. QUAD \\*[$CURRENT_QUAD] +. rm $CURRENT_QUAD +. \} +. EOL +.END +\# +\# VERTICAL RULE - DRV +\# ------------------- +\# *Arguments: +\# <rule weight> <indent> <depth> [ <color> ] +\# *Function: +\# Draws described vertical rule. +\# *Notes: +\# Rules are drawn left-to-right, from the baseline down, and +\# return to their point of origin. +.MAC DRV END +. GRAPHICAL_OBJ +. ds $RL_WEIGHT \\$1 +. ds $RL_INDENT \\$2 +. ds $RL_DEPTH \\$3 +. ie !'\\$4'' \ +. ds $RL_COLOR \\$4 +. el \{\ +. ie '\\n[.m]'' .ds $RL_COLOR \\*[default] +. el .ds $RL_COLOR \\n[.m] +. \} +. nr #SAVED_WEIGHT \\n[#RULE_WEIGHT] +. nr #SAVED_WEIGHT_ADJ \\n[#RULE_WEIGHT_ADJ] +. RULE_WEIGHT \\*[$RL_WEIGHT] +. COLOR \\*[$RL_COLOR] +\Z'\D't \\n[#RULE_WEIGHT]''\ +\h'\\*[$RL_INDENT]+\\n[#RULE_WEIGHT]u+\\n[#RULE_WEIGHT_ADJ]u'\ +\D'l 0 \\*[$RL_DEPTH]'\ +\D't \\n[#SAVED_RULE_WEIGHT]' +. if \\n[#FILLED]=1 \{\ +. if \\n[#FILL_MODE]=0 .QUAD LEFT +. if \\n[#FILL_MODE]=1 .JUSTIFY +. if \\n[#FILL_MODE]=3 .QUAD CENTER +. if \\n[#FILL_MODE]=5 .QUAD RIGHT +. rr #FILLED +. \} +. sp -1v +. if \\n[#NOFILL]=1 \{\ +. if \\n[#NOFILL_MODE]=3 .CENTER +. if \\n[#NOFILL_MODE]=5 .RIGHT +. \} +. gcolor +. nr #RULE_WEIGHT \\n[#SAVED_WEIGHT] +. nr #RULE_WEIGHT_ADJ \\n[#SAVED_WEIGHT_ADJ] +. if \\n[#RESTORE_TRAP]=1 \{\ +. vpt +. rr #RESTORE_TRAP +. \} +. if '\\n[.z]'FLOAT*DIV' \ +. if !(\\n[.d]+\\*[$RL_DEPTH])<\\n[D-float] .nr D-float \\n[.d]+\\*[$RL_DEPTH] +.END +\# +\# BOXES - DBX +\# ----------- +\# *Arguments: +\# <rule weight>|SOLID <indent> <width>|FULL_MEASURE <depth> [ <color> ] +\# *Function: +\# Draws described box. +\# *Notes: +\# Boxes are drawn left-to-right, from the baseline down, and +\# return to their point of origin. Box rules are drawn from the +\# perimeter inwards. +\# +.MAC DBX END +. GRAPHICAL_OBJ +. ie '\\$1'SOLID' .nr #BX_SOLID 1 +. el .ds $BX_WEIGHT \\$1 +. ds $BX_INDENT \\$2 +. ie '\\$3'FULL_MEASURE' \{\ +. ie (\\n[#INDENT_LEFT_ACTIVE]+\\n[#INDENT_RIGHT_ACTIVE]+\\n[#INDENT_BOTH_ACTIVE])=0 \{\ +. nr #WIDTH \\n[.l] +. ds $BX_WIDTH \\n[#WIDTH]u +. \} +. el \{\ +. if \\n[#INDENT_LEFT_ACTIVE] \{\ +. nr #WIDTH \\n[.l]-\\n[#L_INDENT] +. ds $BX_WIDTH \\n[#WIDTH]u +. \} +. if \\n[#INDENT_RIGHT_ACTIVE] \{\ +. nr #WIDTH \\n[.l] +. ds $BX_WIDTH \\n[#WIDTH]u +. \} +. if \\n[#INDENT_BOTH_ACTIVE] \{\ +. nr #WIDTH \\n[.l]-(\\n[#BL_INDENT]) +. ds $BX_WIDTH \\n[#WIDTH]u +. \} +. \} +. \} +. el .ds $BX_WIDTH \\$3 +. ds $BX_DEPTH \\$4 +. ie !'\\$5'' \{\ +. ie d$\\$5_FILL .ds $BX_COLOR \\*[$\\$5_FILL] +. el .ds $BX_COLOR \\$5 +. \} +. el \{\ +. ie '\\n[.m]'' .ds $BX_COLOR \\*[default] +. el .ds $BX_COLOR \\n[.m] +. \} +. nr #SAVED_WEIGHT \\n[#RULE_WEIGHT] +. nr #SAVED_WEIGHT_ADJ \\n[#WEIGHT_ADJ] +. if !'\\$1'SOLID' .RULE_WEIGHT \\*[$BX_WEIGHT] +. ds $BX_INDENT \\*[$BX_INDENT]-\\n[#WEIGHT_ADJ]u +. ie \\n[#BX_SOLID]=1 \{\ +. fcolor \\*[$BX_COLOR] +\h'\\*[$BX_INDENT]+\\n[#BOX_WEIGHT_ADJ]u+\\n[#RULE_WEIGHT]u'\ +\D'P \\*[$BX_WIDTH] 0 0 \\*[$BX_DEPTH] -\\*[$BX_WIDTH] 0 0 -\\*[$BX_DEPTH]' +. fcolor +. rr #BX_SOLID +. \} +. el \{\ +. COLOR \\*[$BX_COLOR] +\Z'\D't \\n[#RULE_WEIGHT]''\ +\h'\\*[$BX_INDENT]+\\n[#RULE_WEIGHT]u+\\n[#RULE_WEIGHT_ADJ]u'\ +\v'\\n[#WEIGHT_ADJ]u'\ +\D'p \\*[$BX_WIDTH]-\\n[#RULE_WEIGHT]u 0 0 \\*[$BX_DEPTH]-\\n[#RULE_WEIGHT]u -\\*[$BX_WIDTH]+\\n[#RULE_WEIGHT]u 0 0 -\\*[$BX_DEPTH]+\\n[#RULE_WEIGHT]u'\ +\v'-\\n[#WEIGHT_ADJ]u'\ +\Z'\D't \\n[#SAVED_RULE_WEIGHT]'' +. gcolor +. \} +. sp -1v +. if \\n[#FILLED]=1 \{\ +. if \\n[#FILL_MODE]=0 .QUAD LEFT +. if \\n[#FILL_MODE]=1 .JUSTIFY +. if \\n[#FILL_MODE]=3 .QUAD CENTER +. if \\n[#FILL_MODE]=5 .QUAD RIGHT +. \} +. if \\n[#NOFILL]=1 \{\ +. if \\n[#NOFILL_MODE]=3 .CENTER +. if \\n[#NOFILL_MODE]=5 .RIGHT +. \} +. nr #RULE_WEIGHT \\n[#SAVED_WEIGHT] +. nr #WEIGHT_ADJ \\n[#SAVED_WEIGHT_ADJ] +. rr #SAVED_WEIGHT +. rr #SAVED_WEIGHT_ADJ +. if \\n[#RESTORE_TRAP]=1 \{\ +. vpt +. rr #RESTORE_TRAP +. \} +. if '\\n[.z]'FLOAT*DIV' \ +. if !(\\n[.d]+\\*[$BX_DEPTH])<\\n[D-float] .nr D-float \\n[.d]+\\*[$BX_DEPTH] +.END +\# +\# ELLIPSES - DCL +\# -------------- +\# *Arguments: +\# <rule weight>|SOLID <indent> <width>|FULL_MEASURE <depth> [ <color> ] +\# *Function: +\# Draws described ellipses. +\# *Notes: +\# Ellipses (circles) are drawn left-to-right, from the baseline +\# down, and return to their point of origin. Ellipse rules are +\# drawn from the perimeter inwards. +\# +.MAC DCL END +. GRAPHICAL_OBJ +. ie '\\$1'SOLID' .nr #CL_SOLID 1 +. el .ds $CL_WEIGHT \\$1 +. ds $CL_INDENT \\$2 +. ds $CL_WIDTH \\$3 +. ie '\\$3'FULL_MEASURE' \{\ +. ie (\\n[#INDENT_LEFT_ACTIVE]+\\n[#INDENT_RIGHT_ACTIVE]+\\n[#INDENT_BOTH_ACTIVE])=0 \ +. nr #WIDTH \\n[.l] +. ds $CL_WIDTH \\n[#WIDTH]u +. el \{\ +. if \\n[#INDENT_LEFT_ACTIVE] \{\ +. nr #WIDTH \\n[.l]-\\n[#L_INDENT] +. ds $CL_WIDTH \\n[#WIDTH]u +. \} +. if \\n[#INDENT_RIGHT_ACTIVE] \{\ +. nr #WIDTH \\n[.l] +. ds $CL_WIDTH \\n[#WIDTH]u +. \} +. if \\n[#INDENT_BOTH_ACTIVE] \{\ +. nr #WIDTH \\n[.l]-(\\n[#BL_INDENT]) +. ds $CL_WIDTH \\n[#WIDTH]u +. \} +. \} +. \} +. el .ds $CL_WIDTH \\$3 +. ds $CL_DEPTH \\$4 +. ie !'\\$5'' \{\ +. ie d$\\$5_FILL .ds $CL_COLOR \\*[$\\$5_FILL] +. el .ds $CL_COLOR \\$5 +. \} +. el \{\ +. ie '\\n[.m]'' .ds $CL_COLOR \\*[default] +. el .ds $CL_COLOR \\n[.m] +. \} +. nr #SAVED_WEIGHT \\n[#RULE_WEIGHT] +. nr #SAVED_WEIGHT_ADJ \\n[#WEIGHT_ADJ] +. if !'\\$1'SOLID' .RULE_WEIGHT \\*[$CL_WEIGHT] +. ds $CL_INDENT \\*[$CL_INDENT]-\\n[#WEIGHT_ADJ]u +. ie \\n[#CL_SOLID]=1 \{\ +. fcolor \\*[$CL_COLOR] +\h'\\*[$CL_INDENT]+\\n[#RULE_WEIGHT]u'\ +\v'\\*[$CL_DEPTH]/2u'\ +\D'E \\*[$CL_WIDTH]-\\n[#RULE_WEIGHT]u \\*[$CL_DEPTH]-\\n[#RULE_WEIGHT]u'\ +\v'-\\*[$CL_DEPTH]/2u' +. fcolor +. rr #CL_SOLID +. \} +. el \{\ +. COLOR \\*[$CL_COLOR] +\Z'\D't \\n[#RULE_WEIGHT]''\ +\h'\\*[$CL_INDENT]+\\n[#RULE_WEIGHT]u+\\n[#RULE_WEIGHT_ADJ]u'\ +\v'\\*[$CL_DEPTH]/2u'\ +\D'e \\*[$CL_WIDTH]-\\n[#RULE_WEIGHT]u \\*[$CL_DEPTH]-\\n[#RULE_WEIGHT]u'\ +\v'-(\\*[$CL_DEPTH]/2u)'\ +\Z'\D't \\n[#SAVED_RULE_WEIGHT]'' +. gcolor +. \} +. sp -1v +. if \\n[#FILLED]=1 \{\ +. if \\n[#FILL_MODE]=0 .QUAD LEFT +. if \\n[#FILL_MODE]=1 .JUSTIFY +. if \\n[#FILL_MODE]=3 .QUAD CENTER +. if \\n[#FILL_MODE]=5 .QUAD RIGHT +. rr #FILLED +. \} +. if \\n[#NOFILL]=1 \{\ +. if \\n[#NOFILL_MODE]=3 .CENTER +. if \\n[#NOFILL_MODE]=5 .RIGHT +. \} +. nr #RULE_WEIGHT \\n[#SAVED_WEIGHT] +. nr #WEIGHT_ADJ \\n[#SAVED_WEIGHT_ADJ] +. rr #SAVED_WEIGHT +. rr #SAVED_WEIGHT_ADJ +. if \\n[#RESTORE_TRAP]=1 \{\ +. vpt +. rr #RESTORE_TRAP +. \} +. if '\\n[.z]'FLOAT*DIV' \ +. if !(\\n[.d]+\\*[$CL_DEPTH])<\\n[D-float] .nr D-float \\n[.d]+\\*[$CL_DEPTH] +.END +\# +\# RULE WEIGHT +\# ----------- +\# *Argument: +\# <weight of rules in points> +\# *Function: +\# Sets \D't <n>' to the correct number of machine units for the +\# argument given in points. +\# *Notes: +\# Decimal fractions are allowed. Rule weight must be < 100. +\# +.MAC RULE_WEIGHT END +. di NULL \" Diverted so there's no problem with breaks, spacing, etc. +. ds $ARG \\$1 +. substring $ARG -1 +. if !\B'\\*[$ARG]' \{\ +. tm1 "[mom]: The argument to \\$0 must not have a unit of measure appended. +. ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +. \} +. length #STR_LENGTH \\$1 +. ds $ARG \\$1 +. substring $ARG 0 0 +. ie '\\*[$ARG]'.' \{\ +. ds $ARG \\$1 +. substring $ARG 1 \\n[#STR_LENGTH]-1 +. nr #WEIGHT \\*[$ARG]*100 +. if (\\n[#WEIGHT]>=1000) \{\ +. while (\\n[#WEIGHT]>=1000) \{\ +. nr #WEIGHT \\n[#WEIGHT]/10 +. \} +. \} +. \} +. el \{\ +. ds $ARG \\$1 +. length #ARG_LENGTH \\*[$ARG] +. if \\n[#ARG_LENGTH]>1 .substring $ARG 1 1 +. ie '\\*[$ARG]'.' \{\ +. ds $LHS \\$1 +. substring $LHS 0 0 +. ds $RHS \\$1 +. substring $RHS 2 +. nr #WEIGHT \\*[$LHS]\\*[$RHS]*100 +. if (\\n[#WEIGHT]>=10000) \{\ +. while (\\n[#WEIGHT]>=10000) \{\ +. nr #WEIGHT \\n[#WEIGHT]/10 +. \} +. \} +. \} +. el \{\ +. ie \\n[#STR_LENGTH]<=2 .nr #WEIGHT \\$1*1000 +. el \{\ +. ds $ARG \\$1 +. substring $ARG 2 2 +. ie !'\\*[$ARG]'.' \{\ +. tm1 "[mom]: Invalid argument given to macro \\$0 at line \\n[.c]. +. tm1 " Rule weight must be < 100 points. +. tm1 " Falling back to default weight .5 points. +. nr #WEIGHT 500 +. \} +. el \{\ +. ds $LHS \\$1 +. substring $LHS 0 1 +. ds $RHS \\$1 +. substring $RHS 3 +. nr #WEIGHT \\*[$LHS]\\*[$RHS]*1000 +. if (\\n[#WEIGHT]>=100000) \{\ +. while (\\n[#WEIGHT]>=100000) \{\ +. nr #WEIGHT \\n[#WEIGHT]/10 +. \} +. \} +. \} +. \} +. \} +. \} +. nr #WEIGHT_ADJ \\n[#WEIGHT]/2 +. if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT' \ +. ds $TITLE_TYPE BIB_STRING_ +. if '\\$0'ENDNOTE_TITLE_UNDERLINE_WEIGHT' \ +. ds $TITLE_TYPE EN_TITLE_ +. if '\\$0'EN_HEADER_UNDERLINE_WEIGHT' \ +. ds $TITLE_TYPE EN_STRING_ +. if !'\\*[$TITLE_TYPE]'BIB_STRING' \ +. if !'\\*[$TITLE_TYPE]'EN_TITLE' \ +. if !'\\*[$TITLE_TYPE]'EN_STRING' \ +. ds _TYPE \\$0 +. length type-len _TYPE +. if \\n[type-len]>17 \{\ +. substring _TYPE 0 -17 +. ds $TITLE_TYPE \\*[_TYPE] +. \} +. if !'\\*[$TITLE_TYPE]'' \{\ +. nr #\\*[$TITLE_TYPE]UNDERLINE_WEIGHT \\n[#WEIGHT] +. nr #\\*[$TITLE_TYPE]UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ] +. \} +. if '\\$0'RULE_WEIGHT' \{\ +. nr #RULE_WEIGHT \\n[#WEIGHT] +. nr #RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ] +. \} +. if '\\$0'UNDERSCORE_WEIGHT' \{\ +. nr #UNDERSCORE_WEIGHT \\n[#WEIGHT] +. nr #UNDERSCORE_WEIGHT_ADJ \\n[#WEIGHT_ADJ] +. \} +. if '\\$0'FOOTER_RULE_WEIGHT' \{\ +. nr #FOOTER_RULE_WEIGHT \\n[#WEIGHT] +. nr #FOOTER_RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ] +. \} +. if '\\$0'FOOTNOTE_RULE_WEIGHT' \{\ +. nr #FN_RULE_WEIGHT \\n[#WEIGHT] +. nr #FN_RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ] +. \} +. if '\\$0'HEADER_RULE_WEIGHT' \{\ +. nr #HEADER_RULE_WEIGHT \\n[#WEIGHT] +. nr #HEADER_RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ] +. \} +. di +.END +\# +\# Aliases for RULE_WEIGHT +\# +.ALIAS BIB_STRING_UNDERLINE_WEIGHT RULE_WEIGHT +.ALIAS DOCTYPE_UNDERLINE_WEIGHT RULE_WEIGHT +.ALIAS EN_STRING_UNDERLINE_WEIGHT RULE_WEIGHT +.ALIAS EN_TITLE_UNDERLINE_WEIGHT RULE_WEIGHT +.ALIAS FN_RULE_WEIGHT RULE_WEIGHT +.ALIAS FOOTER_RULE_WEIGHT RULE_WEIGHT +.ALIAS FOOTNOTE_RULE_WEIGHT RULE_WEIGHT +.ALIAS HEADER_RULE_WEIGHT RULE_WEIGHT +.ALIAS RULE_WEIGHT RULE_WEIGHT +.ALIAS TOC_HEADER_UNDERLINE_WEIGHT RULE_WEIGHT +.ALIAS UNDERSCORE_WEIGHT RULE_WEIGHT +\# +\# Default rule weights +\# +.nr #BIB_STRING_UNDERLINE_WEIGHT 500 +.nr #DOCTYPE_UNDERLINE_WEIGHT 500 +.nr #EN_STRING_UNDERLINE_WEIGHT 500 +.nr #EN_TITLE_UNDERLINE_WEIGHT 500 +.nr #FN_RULE_WEIGHT 500 +.nr #FOOTER_RULE_WEIGHT 500 +.nr #HEADER_RULE_WEIGHT 500 +.nr #RULE_WEIGHT 500 +.nr #TOC_HEADER_UNDERLINE_WEIGHT 500 +.nr #UNDERSCORE_WEIGHT 500 +\# +.nr #BIB_STRING_UNDERLINE_WEIGHT_ADJ \n[#BIB_STRING_UNDERLINE_WEIGHT]/2 +.nr #DOCTYPE_UNDERLINE_WEIGHT_ADJ \n[#DOCTYPE_UNDERLINE_WEIGHT]/2 +.nr #EN_STRING_UNDERLINE_WEIGHT_ADJ \n[#EN_STRING_UNDERLINE_WEIGHT]/2 +.nr #EN_TITLE_UNDERLINE_WEIGHT_ADJ \n[#EN_TITLE_UNDERLINE_WEIGHT]/2 +.nr #FN_RULE_WEIGHT_ADJ \n[#FN_RULE_WEIGHT]/2 +.nr #FOOTER_RULE_WEIGHT_ADJ \n[#FOOTER_RULE_WEIGHT]/2 +.nr #HEADER_RULE_WEIGHT_ADJ \n[#HEADER_RULE_WEIGHT]/2 +.nr #RULE_WEIGHT_ADJ \n[#RULE_WEIGHT]/2 +.nr #TOC_HEADER_UNDERLINE_WEIGHT_ADJ \n[#TOC_HEADER_UNDERLINE_WEIGHT]/2 +.nr #UNDERSCORE_WEIGHT_ADJ \n[#UNDERSCORE_WEIGHT]/2 +\# +\# Read in remaining aliases and default rule weights +\# +.nr #LOOP 0 1 +.while \n+[#LOOP]<=14 \{\ +. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT RULE_WEIGHT +. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT RULE_WEIGHT +. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT RULE_WEIGHT +. nr #\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT 500 +. nr #COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT 500 +. nr #DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT 500 +. nr #\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT_ADJ \ + \n[#\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT]/2 +. nr #COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT_ADJ \ + \n[#COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT]/2 +. nr #DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT_ADJ \ + \n[#DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT]/2 +.\} +\# +\# Set default rule weight +\# +.di NULL +\D't 500' +.di +\# +\# ===================================================================== +\# +\# +++WORD AND SENTENCE SPACING+++ +\# +\# WORD SPACE CONTROL +\# ------------------ +\# *Argument: +\# <+|->wordspace | DEFAULT +\# *Function: +\# Increases or decreases interword space by user supplied amount. +\# If DEFAULT, value is set to 12 (groff default). +\# *Notes: +\# $WS_CONSTANT is the groff default word space. +\# $WS_VAR is the user supplied amount by which to in/decrease word space. +\# $WS is a concatenation of WS_CONSTANT and WS_VAR. +\# +\# \n[.sss] holds the current sentence space value. +\# +.MAC WS END +. ds $WS_CURR \\n[.ss] +. ds $WS_VAR \\$1 +. ie '\\$1'DEFAULT' .ss 12 \\n[.sss] +. el \{\ +. ds $WS (\\*[$WS_CURR]+\\*[$WS_VAR]) +. ie \\n[.sss]=12 .ss \\*[$WS] 12 +. el \{\ +. ss \\*[$WS] (\\*[$WS]+\\*[$SS_VAR]) +. SS \\*[$SS_VAR] +. \} +. \} +.END +\# +\# SENTENCE SPACE CONTROL +\# ---------------------- +\# *Argument: +\# <+-sentencespace> | 0 | DEFAULT +\# *Function: +\# Increases or decreases sentence space by user supplied amount. +\# If 0, sentence spaces are ignored. If DEFAULT, value is +\# set to 12 (groff default). +\# *Notes: +\# Because the user supplied value requires a literal + or - sign, +\# the macro argument is stored in a string. +\# +\# Sentence space applies only to input where sentences are separated +\# by two spaces (and/or, in fill mode [FLUSH L|R|C or JUSTIFY], an EOL). +\# Changing .SS when sentences are separated by only one space has +\# no effect on the space between sentences. +\# +\# \n[.ss] holds the current wordspace value. +\# \n[.sss] holds the current sentence space value. +\# +.MAC SS END +. ds $SS_VAR \\$1 +. ie '\\$1'0' .ss \\n[.ss] 0 +. el \{\ +. ie '\\$1'DEFAULT' .ss \\n[.ss] +. el .ss \\n[.ss] \\*[$SS_VAR] +. \} +.END +\# +\# ===================================================================== +\# +\# INDENTS +\# ------- +\# +\# +++INDENT LEFT+++ +\# +.MAC IL END +. if \\n[#INDENT_STYLE_BOTH] .IBX +. nr #INDENT_STYLE_LEFT 1 +. nr #INDENT_ACTIVE 1 +. nr #INDENT_LEFT_ACTIVE 1 +. ie '\\$1'' \{\ +. br +. in \\n[#L_INDENT]u +. ta \\n[.l]u-\\n[#L_INDENT]u +. if \\n[#IN_ITEM] .nr #IN_ITEM_L_INDENT 0 +. \} +. el \{\ +. br +. nr #L_INDENT +(u;\\$1) +. in \\n[#L_INDENT]u +. ta \\n[.l]u-\\n[#L_INDENT]u +. if \\n[#IN_ITEM] .nr #IN_ITEM_L_INDENT +(u;\\$1) +. \} +.END +\# +\# +++INDENT RIGHT+++ +\# +.MAC IR END +. if \\n[#INDENT_STYLE_BOTH] .IBX +. nr #INDENT_STYLE_RIGHT 1 +. nr #INDENT_ACTIVE 1 +. nr #INDENT_RIGHT_ACTIVE 1 +. ie '\\$1'' \{\ +. br +. ie \\n[#TAB_ACTIVE] \{\ +. ll \\n[.l]u-\\n[#R_INDENT]u +. ta \\n[.l]u-\\n[#L_INDENT]u +. \} +. el \{\ +. ll \\n[.l]u-\\n[#R_INDENT]u +. ta \\n[.l]u-\\n[#L_INDENT]u +. \} +. \} +. el \{\ +. br +. nr #R_INDENT (u;\\$1) +. ie \\n[#TAB_ACTIVE] \{\ +. ll \\n[.l]u-\\n[#R_INDENT]u +. ta \\n[.l]u-\\n[#L_INDENT]u +. \} +. el \{\ +. ll \\n[.l]u-\\n[#R_INDENT]u +. ta \\n[.l]u-\\n[#L_INDENT]u +. \} +. \} +.END +\# +\# +++INDENT BOTH+++ +\# +.MAC IB END +. br +. if \\n[#INDENT_STYLE_LEFT] .ILX +. if \\n[#INDENT_STYLE_RIGHT] .IRX +. nr #INDENT_STYLE_BOTH 1 +. nr #INDENT_ACTIVE 1 +. nr #INDENT_BOTH_ACTIVE 1 +. ie '\\$1'' \{\ +. ie \\n[#DOCS] \ +. ll \\n[#DOC_L_LENGTH]u-\\n[#BR_INDENT]u +. el .ll \\n[.l]u-\\n[#BR_INDENT]u +. in \\n[#BL_INDENT]u +. ta \\n[.l]u +. \} +. el \{\ +. nr #BL_INDENT (\\n[#INDENT]+\\$1) +. ie \\n[#NUM_ARGS]=2 .nr #BR_INDENT +(\\$2) +. el .nr #BR_INDENT \\n[#BL_INDENT] +. if '\\n[.z]'' .ll +. ll \\n[.l]u-\\n[#BR_INDENT]u +. in \\n[#BL_INDENT]u +. ta \\n[.l]u-\\n[#BR_INDENT]u +. \} +.END +\# +\# +++TEMPORARY INDENT+++ +\# +.MAC TI END +. br +. ie '\\$1'' \{\ +. ti \\n[#T_INDENT]u +. if \\n[#INDENT_LEFT_ACTIVE] .ti \\n[#T_INDENT]u+\\n[#L_INDENT]u +. if \\n[#INDENT_BOTH_ACTIVE] .ti \\n[#T_INDENT]u+\\n[#BL_INDENT]u +. \} +. el \{\ +. nr #T_INDENT (\\$1) +. ti \\n[#T_INDENT]u +. \} +.END +\# +\# +++HANGING INDENT+++ +\# +.MAC HI END +. ie '\\$1'' .ti -\\n[#HL_INDENT]u +. el \{\ +. nr #HL_INDENT (\\$1) +. ti -\\n[#HL_INDENT]u +. \} +.END +\# +\# +++INDENTS OFF+++ +\# +.MAC ILX END +. ie \\n[#IN_ITEM] .nr #L_INDENT -\\n[#IN_ITEM_L_INDENT] +. el \{\ +. br +. ie \\n[pdfbx-running]=1 \ +. ie !r pdfbx-clear \{\ +. in \\*[wt\\n[stack]]+\\*[gap\\n[stack]]u+\\n[#IL_ACTIVE]u +. el .in \\*[wt\\n[stack]]+\\*[gap\\n[stack]]u +. \} +. el .in 0 +. rr #INDENT_LEFT_ACTIVE +. nr #L_INDENT_ILX \\n[#L_INDENT] +. \} +. if '\\$1'CLEAR' \{\ +. if \\n[pdfbx-running]=1 \ +. if !r pdfbx-clear \ +. in \\*[wt\\n[stack]]+\\*[gap\\n[stack]]u +. rr #L_INDENT +. rr #INDENT_STYLE_LEFT +. rr #L_INDENT_ILX +. rr #INDENT_ACTIVE +. \} +.END +\# +.MAC IRX END +. br +. rr #INDENT_RIGHT_ACTIVE +. ie \\n[#TAB_ACTIVE] .TAB\\n[#CURRENT_TAB] +. el \{\ +. ie \\n[#COLUMNS] \{\ +. ll \\n[#COL_L_LENGTH]u +. ta \\n[.l]u +. \} +. el \{\ +. ie \\n[pdfbx-running]=1 \{\ +. if !r pdfbx-clear \ +. ll \\n[pdfbx-ll]u +. \} +. el .ll \\n[#DOC_L_LENGTH]u +. ta \\n[.l]u +. \} +. \} +. if '\\$1'CLEAR' \{\ +. if \\n[pdfbx-running]=1 \{\ +. if !r pdfbx-clear \ +. ll \\n[#L_LENGTH]u-(\\*[wt\\n[stack]]+\\*[gap\\n[stack]]u) +. \} +. rr #R_INDENT +. rr #INDENT_STYLE_RIGHT +. \} +.END +\# +.MAC IBX END +. br +. in 0 +. rr #INDENT_ACTIVE +. rr #INDENT_BOTH_ACTIVE +. ie \\n[#TAB_ACTIVE] .TAB\\n[#CURRENT_TAB] +. el \{\ +. ie \\n[#COLUMNS] \{\ +. ll \\n[#COL_L_LENGTH]u +. ta \\n[.l]u +. \} +. el \{\ +. ll \\n[#L_LENGTH]u +. ta \\n[.l]u +. \} +. \} +. if '\\$1'CLEAR' \{\ +. rr #BL_INDENT +. rr #BR_INDENT +. rr #INDENT_STYLE_BOTH +. \} +.END +\# +.MAC IX END +. if '\\$0'IX' \{\ +. if !\\n[#IX_WARN] \{\ +. tm1 "[mom]: Use of .IX is deprecated. Use .IQ instead. +. tm1 " .IX will continue to behave as before, but to +. tm1 " avoid this message, please update your document. +. nr #IX_WARN 1 +. \} +. \} +. br +. in 0 +. rr #INDENT_LEFT_ACTIVE +. rr #INDENT_RIGHT_ACTIVE +. rr #INDENT_BOTH_ACTIVE +. rr #INDENT_ACTIVE +. if \\n[#INDENT_STYLE_RIGHT] \{\ +. ie \\n[#TAB_ACTIVE] .TAB\\n[#CURRENT_TAB] +. el \{\ +. ie \\n[#COLUMNS] \{\ +. ll \\n[#COL_L_LENGTH]u +. ta \\n[.l]u +. \} +. el \{\ +. ll \\n[#L_LENGTH]u +. ta \\n[.l]u +. \} +. \} +. \} +. if \\n[#INDENT_STYLE_BOTH] \{\ +. ie \\n[#TAB_ACTIVE] .TAB\\n[#CURRENT_TAB] +. el \{\ +. ie \\n[#COLUMNS] \{\ +. ll \\n[#COL_L_LENGTH]u +. ta \\n[.l]u +. \} +. el \{\ +. ll \\n[#L_LENGTH]u +. ta \\n[.l]u +. \} +. \} +. \} +. if '\\$1'CLEAR' \{\ +. if \\n[#INDENT_STYLE_RIGHT] \{\ +. ie \\n[#TAB_ACTIVE] .TAB\\n[#CURRENT_TAB] +. el \{\ +. ie \\n[#COLUMNS] \{\ +. ll \\n[#COL_L_LENGTH]u +. ta \\n[.l]u +. \} +. el \{\ +. ll \\n[#L_LENGTH]u +. ta \\n[.l]u +. \} +. \} +. \} +. if \\n[#INDENT_STYLE_BOTH] \{\ +. ie \\n[#TAB_ACTIVE] .TAB\\n[#CURRENT_TAB] +. el \{\ +. ie \\n[#COLUMNS] \{\ +. ll \\n[#COL_L_LENGTH]u +. ta \\n[.l]u +. \} +. el \{\ +. ll \\n[#L_LENGTH]u +. ta \\n[.l]u +. \} +. \} +. \} +. rr #L_INDENT +. rr #R_INDENT +. rr #BL_INDENT +. rr #BR_INDENT +. rr #T_INDENT +. rr #H_INDENT +. rr #INDENT_STYLE_LEFT +. rr #INDENT_STYLE_RIGHT +. rr #INDENT_STYLE_BOTH +. \} +.END +\# +\# ===================================================================== +\# +\# +++HANGING CHARACTERS+++ +\# +\# LEFT_HANG hangs its argument to the left of the left margin. +\# If enclosed in double-quotes, the argument may contain local +\# horizontal motions. Input text after LEFT_HANG must begin +\# by repeating the text of the argument including horizontal +\# motions. If the hung character is a left double-quote, +\# \[lq] must be used in the argument and the usual keyboard +\# double-quote (") used for the input text (so as not to confuse +\# SMARTQUOTES). +\# +\# HANG is called inline with \*[HANG <character>]. Hangs its +\# single-character argument, typically a punctuation mark, to the +\# right of the right margin in justified copy. Unlike LEFT_HANG, +\# does not require repeating the character as part of input text. +\# +\# Except for hung hyphens, HANG may be used mid-line in input +\# text. Hung hyphens must come at the end of input lines. If +\# the hung character is a right double-quote, "\[rq]" must be +\# used as the argument (that is, the rq character surrounded by +\# double-quotes). The double-quotes are required for all special +\# characters that have the form \[c]. +\# +.MAC LEFT_HANG END +. nr hang-char-width \w'\\$1' +. ds hang-char-gutter \\$2 +. ie '\\*[hang-char-gutter]'' \ +. nr hang-char \\n[hang-char-width] +. el \ +. nr hang-char \\n[hang-char-width]+\\*[hang-char-gutter] +\h'-\\n[hang-char]u'\c +.END +\# +.MAC HANG END +\c +.if '\\$1'\[rq]' .nr #OPEN_CLOSE 0 +\c +\&\\$1\c +\h'-\w'\\$1'u'\c +.END +\# +\# ===================================================================== +\# +\# +++MULTIPLE COLUMNS+++ +\# +\# MULTIPLE COLUMNS ON +\# ------------------- +\# *Arguments: +\# <none> +\# *Function: +\# Marks the top of a column set +\# +.MAC MCO END +. mk c +.END +\# +\# MULTIPLE COLUMN RETURN +\# ---------------------- +\# *Arguments: +\# <none> +\# *Function: +\# Returns to the top of a column set +\# +.MAC MCR END +. vpt 0 +. sp |\\n[c]u +. vpt +.END +\# +\# MULTIPLE COLUMNS OFF +\# -------------------- +\# *Arguments: +\# <none> | <lead to advance beneath bottom of deepest column> +\# *Function: +\# Advances to the end of a column set +\# *Notes: +\# With no argument, advances to the next baseline (at the current +\# leading value) beneath the longest column. With an argument +\# (which requires a unit of measure), advances arg distance +\# beneath the baseline of the deepest column. If the argument +\# is zero, advances to the baseline of the deepest column. +\# +.MAC MCX END +. vpt 0 +. ie '\\$1'' \{\ +. if '\\n[.z]'FLOAT*DIV' \!.TQ +. TQ +. sp |\\n[.h]u +. \} +. el \{\ +. nr #MCX_ALD (\\$1) +. TQ +. ie \\n[#MCX_ALD]=0 .sp |\\n[.h]u-1v +. el .sp |\\n[.h]u+\\n[#MCX_ALD]u +. rr #MCX_ALD +. \} +. vpt +.END +\# +\# ===================================================================== +\# +\# +++TYPESETTING SUPPORT MACROS+++ +\# +\# TRAP +\# ---- +\# *Arguments: +\# toggle +\# *Function: +\# Enables/disables traps. +\# *Notes: +\# EL and TN don't function as advertised on the last line before +\# a trap (when they break the preceding line, they spring the +\# trap, and groff won't back up to the line preceding the trap). +\# TRAP is a kludge to get EL and TN work properly on last lines. +\# The user simply encloses the offending lines in TRAP OFF/TRAP. +\# +.MAC TRAP END +. ie '\\$1'' .vpt +. el .vpt 0 +.END +\# +\# SILENT +\# ------ +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Diverts text so that it doesn't print, or turns the function off. +\# *Notes: +\# Useful for setting up autotabs where you don't want the line with +\# the tab marks to print. +\# +\# Also aliased as COMMENT, in case user wants to input a batch of +\# text that doesn't print. +\# +.MAC SILENT END +. nr #SILENT 1 +. if \\n[#QUAD] .br +. ie '\\$1'' .di NO_FLASH +. el \{\ +. br +. di +. rm NO_FLASH +. rr #SILENT +. \} +.END +\# +\# PRINT +\# ----- +\# *Function: +\# Prints anything. A macro that helps keep my code nicely indented. +\# +.MAC PRINT END +. nop \\$* +.END +\# +\# Numbered strings for while loop in SMALLCAPS. +\# +.ds $c1 a +.ds $c2 b +.ds $c3 c +.ds $c4 d +.ds $c5 e +.ds $c6 f +.ds $c7 g +.ds $c8 h +.ds $c9 i +.ds $c10 j +.ds $c11 k +.ds $c12 l +.ds $c13 m +.ds $c14 n +.ds $c15 o +.ds $c16 p +.ds $c17 q +.ds $c18 r +.ds $c19 s +.ds $c20 t +.ds $c21 u +.ds $c22 v +.ds $c23 w +.ds $c24 x +.ds $c25 y +.ds $c26 z +.ds $c27 \[`a] +.ds $c28 \[^a] +.ds $c29 \['a] +.ds $c30 \[:a] +.ds $c31 \[oa] +.ds $c32 \[~a] +.ds $c33 \[ae] +.ds $c34 \[`e] +.ds $c35 \[^e] +.ds $c36 \['e] +.ds $c37 \[:e] +.ds $c38 \[`i] +.ds $c39 \[^i] +.ds $c40 \['i] +.ds $c41 \[:i] +.ds $c42 \[`o] +.ds $c43 \[^o] +.ds $c44 \['o] +.ds $c45 \[:o] +.ds $c46 \[~o] +.ds $c47 \[/o] +.ds $c48 \[`u] +.ds $c49 \[^u] +.ds $c50 \['u] +.ds $c51 \[:u] +.ds $c52 \[,c] +.ds $c53 \[Sd] +.ds $c54 \[~n] +.ds $c55 \[Sd] +.ds $c56 \[Tp] +.ds $c57 \['y] +.ds $c58 \[:y] +\# +.ds $C1 A +.ds $C2 B +.ds $C3 C +.ds $C4 D +.ds $C5 E +.ds $C6 F +.ds $C7 G +.ds $C8 H +.ds $C9 I +.ds $C10 J +.ds $C11 K +.ds $C12 L +.ds $C13 M +.ds $C14 N +.ds $C15 O +.ds $C16 P +.ds $C17 Q +.ds $C18 R +.ds $C19 S +.ds $C20 T +.ds $C21 U +.ds $C22 V +.ds $C23 W +.ds $C24 X +.ds $C25 Y +.ds $C26 Z +.ds $C27 \[`A] +.ds $C28 \[^A] +.ds $C29 \['A] +.ds $C30 \[:A] +.ds $C31 \[oA] +.ds $C32 \[~A] +.ds $C33 \[AE] +.ds $C34 \[`E] +.ds $C35 \[^E] +.ds $C36 \['E] +.ds $C37 \[:E] +.ds $C38 \[`I] +.ds $C39 \[^I] +.ds $C40 \['I] +.ds $C41 \[:I] +.ds $C42 \[`O] +.ds $C43 \[^O] +.ds $C44 \['O] +.ds $C45 \[:O] +.ds $C46 \[~O] +.ds $C47 \[/O] +.ds $C48 \[`U] +.ds $C49 \[^U] +.ds $C50 \['U] +.ds $C51 \[:U] +.ds $C52 \[,C] +.ds $C53 \[-D] +.ds $C54 \[~N] +.ds $C55 \[-D] +.ds $C56 \[TP] +.ds $C57 \['Y] +.ds $C58 \[:Y] +\# +\# CAPS +\# ---- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Converts text to caps, or, if OFF, reverts to normal caps/lc. +\# *Notes: +\# For inline control of capitalization style, use \*[UC] and +\# \*[LC]. +\# +.MAC CAPS END +. ie '\\$1'' \{\ +. LC_TO_CAPS +. nr #CAPS_ON 1 +. \} +. el \{\ +. CAPS_TO_LC +. rr #CAPS_ON +. \} +.END +\# +.MAC UC END +\c +. LC_TO_CAPS +. nr #CAPS_ON 1 +.END +\# +.MAC LC END +\c +. CAPS_TO_LC +. rr #CAPS_ON +.END +\# +\# Perform lowercase conversion to caps or revert to lowercase +\# +.MAC CONVERT_CASE END +. if '\\$0'LC_TO_CAPS' \{\ +. nr #LOOP 0 1 +. while \\n+[#LOOP]<=58 \{\ +. tr \\*[$c\\n[#LOOP]]\\*[$C\\n[#LOOP]] +. \} +. \} +. if '\\$0'CAPS_TO_LC' \{\ +. nr #LOOP 0 1 +. while \\n+[#LOOP]<=58 \{\ +. tr \\*[$c\\n[#LOOP]]\\*[$c\\n[#LOOP]] +. \} +. \} +.END +. +.ALIAS LC_TO_CAPS CONVERT_CASE +.ALIAS CAPS_TO_LC CONVERT_CASE +. +\# +\# SMALLCAPS +\# --------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Converts text to smallcaps, or, if <anything>, reverts to normal +\# caps/lc. +\# *Notes: +\# SMALLCAPS has no inline escape eqiv. to \*[UC]. +\# +.MAC SMALLCAPS END +. if \\n[#PRINT_STYLE]=2 \{\ +. if !\\n[.u] \ +. if \\n[.int] .nop \& \c +. nr sc*size \\n[.ps]*\\n[sc*factor]/1000 +. if \\n[sc*wt-adj] .nr sc*wt-adj-factor \\n[sc*size]*\\n[sc*wt-adj]/1000 +. if \\n[sc*extend] .nr sc*extend-factor \\n[sc*size]*\\n[sc*extend]/1000 +. ie '\\$1'' \{\ +. nr #SMALLCAPS_ON 1 +. nr #LOOP 0 1 +. while \\n+[#LOOP]<=58 \{\ +. char \\*[$c\\n[#LOOP]] \ +\Z'\s[\\n[sc*size]u+\\n[sc*extend-factor]u]\H'-\\n[sc*extend-factor]u'\ +\\*[$C\\n[#LOOP]]'\ +\h'\\n[sc*wt-adj-factor]u'\\*[$C\\n[#LOOP]]\s[0] +. \} +. \} +. el \{\ +. nr #LOOP 0 1 +. while \\n+[#LOOP]<=58 \{\ +. rchar \\*[$c\\n[#LOOP]] +. \} +. rr sc*wt-adj-factor +. rr sc*extend-factor +. rr #SMALLCAPS_ON +. \} +. \} +.END +\# +\# SMALLCAPS_SIZE +\# -------------- +\# *Arguments: +\# <size> [ <weight adjustment> +\# *Function: +\# Sets registers 'sc*factor', 'sc*wt-adj', and sc*extend. +\# *Notes: +\# Weight adjustment pseudo-emboldens small caps to visually match the +\# weight of the larger real caps. +\# +\# Both sc*factor (size) and sc*wt-adj (weight adjustment) args are +\# expressed as percentages of type size. +\# +.MAC SMALLCAPS_STYLE END +. nr #LOOP 0 1 +. while \\n+[#LOOP]<=\\n[#NUM_ARGS] \{\ +. if '\\$1'SIZE' \{\ +. shift +. nr sc*factor (z;\\$1)/100 +. shift +. \} +. if '\\$1'WEIGHT_ADJ' \{\ +. shift +. nr sc*wt-adj (z;\\$1)/100 +. shift +. \} +. if '\\$1'EXTEND' \{\ +. shift +. nr sc*extend (z;\\$1)/100 +. shift +. \} +. \} +. if \\n[sc*wt-adj]=0 .rr sc*wt-adj +. if \\n[sc*extend]=0 .rr sc*extend +.END +. +.SMALLCAPS_STYLE \ +SIZE 74 \ +WEIGHT_ADJ .3 \ +EXTEND 5 +\# +\# SIZESPECS +\# --------- +\# Argument: +\# <none> +\# Function: +\# Gets cap-height, x-height, and descender depth of the +\# current font at the current point size. +\# *Notes: +\# The routine is diverted so it remains invisible to output. +\# +.MAC SIZESPECS END +. if !'\\n[.z]'' \ +. if \\n[dn] .nr saved-dn \\n[dn] +. di TYPESIZE +E\R'#CAP_HEIGHT \\n[.cht]' +e\R'#X_HEIGHT \\n[.cht]' +y\R'#DESCENDER \\n[.cdp]' +. br +. ds $CAP_HEIGHT \\n[#CAP_HEIGHT]u +. ds $X_HEIGHT \\n[#X_HEIGHT]u +. ds $DESCENDER \\n[#DESCENDER]u +. di +. if !'\\n[.z]'' \ +. nr dn \\n[saved-dn] +.END +\# +\# ===================================================================== +\# +\# +++TYPESETTING ALIASES+++ +\# +.ALIAS ADD_SPACE ALD +.ALIAS CENTRE CENTER +.ALIAS COLOUR COLOR +.ALIAS COMMENT SILENT +.ALIAS CONDENSE CONDENSE_OR_EXTEND +.ALIAS EXTEND CONDENSE_OR_EXTEND +.ALIAS FAM FAMILY +.ALIAS FONT FT +.ALIAS HYPHENATE HY +.ALIAS HYPHENATION HY +.ALIAS HYSET HY_SET +.ALIAS IBQ IBX +.ALIAS ILQ ILX +.ALIAS IQ IX +.ALIAS IRQ IRX +.ALIAS LIG LIGATURES +.ALIAS NEWCOLOUR NEWCOLOR +.ALIAS PADMARKER PAD_MARKER +.ALIAS SP ALD +.ALIAS SPACE ALD +.ALIAS TABSET TAB_SET +.ALIAS TB TAB +.ALIAS UNDERSCORE_2 UNDERSCORE2 +.ALIAS XCOLOUR XCOLOR +\# +\# ==================================================================== +\# +\# DOCUMENT PROCESSING MACROS, STRINGS AND ALIASES +\# =============================================== +\# +\# DOC_MACRO_ERROR +\# --------------- +\# *Arguments: +\# None. +\# *Function: +\# Warning message if DOC_<PARAMETER> called before START. +\# +.MAC DOC_MACRO_ERROR END +. if '\\$1'DOC_L_MARGIN' .ds $REPLACEMENT L_MARGIN +. if '\\$1'DOC_R_MARGIN' .ds $REPLACEMENT R_MARGIN +. if '\\$1'DOC_LINE_LENGTH' .ds $REPLACEMENT LL +. if '\\$1'DOC_FAMILY' .ds $REPLACEMENT "FAMILY or FAM +. if '\\$1'DOC_PT_SIZE' .ds $REPLACEMENT PT_SIZE +. if '\\$1'DOC_LEAD' .ds $REPLACEMENT LS +. if '\\$1'DOC_QUAD' .ds $REPLACEMENT QUAD +. tm1 "[mom]: \\$1 at line \\n[.c] of '\\n[.F]' should not be used before START. +. tm1 " Use \\*[$REPLACEMENT] instead. +. ab [mom]: Aborting. +.END +\# +\# +++PAGE DIMENSIONS+++ +\# +\# PAPER SIZE +\# ---------- +\# *Arguments: +\# LETTER | LEGAL | STATEMENT | TABLOID | LEDGER | FOLIO | QUARTO | 10x14 | EXECUTIVE | A3 | A4 | A5 | B4 | B5 +\# *Function: +\# Sets up dimensions for different paper sizes. +\# *Notes: +\# LANDSCAPE may be given after papersize arg. +\# +.MAC PAPER END +. vs 0 +. ds $PAPER \\$1 +. if '\\*[$PAPER]'LETTER' \{\ +. PAGEWIDTH 8.5i +. PAGELENGTH 11i +. \} +. if '\\*[$PAPER]'LEGAL' \{\ +. PAGEWIDTH 8.5i +. PAGELENGTH 14i +. \} +. if '\\*[$PAPER]'STATEMENT' \{\ +. PAGEWIDTH 5.5i +. PAGELENGTH 8.5i +. \} +. if '\\*[$PAPER]'TABLOID' \{\ +. PAGEWIDTH 11i +. PAGELENGTH 17i +. \} +. if '\\*[$PAPER]'LEDGER' \{\ +. PAGEWIDTH 17i +. PAGELENGTH 11i +. \} +. if '\\*[$PAPER]'FOLIO' \{\ +. PAGEWIDTH 8.5i +. PAGELENGTH 13i +. \} +. if '\\*[$PAPER]'QUARTO' \{\ +. PAGEWIDTH 610p +. PAGELENGTH 780p +. \} +. if '\\*[$PAPER]'10x14' \{\ +. PAGEWIDTH 10i +. PAGELENGTH 14i +. \} +. if '\\*[$PAPER]'EXECUTIVE' \{\ +. PAGEWIDTH 7.25i +. PAGELENGTH 10.5i +. \} +. if '\\*[$PAPER]'A3' \{\ +. PAGEWIDTH 842p +. PAGELENGTH 1190p +. \} +. if '\\*[$PAPER]'A4' \{\ +. PAGEWIDTH 595p +. PAGELENGTH 842p +. \} +. if '\\*[$PAPER]'A5' \{\ +. PAGEWIDTH 421p +. PAGELENGTH 595p +. \} +. if '\\*[$PAPER]'B4' \{\ +. PAGEWIDTH 709p +. PAGELENGTH 1002p +. \} +. if '\\*[$PAPER]'B5' \{\ +. PAGEWIDTH 501p +. PAGELENGTH 709p +. \} +. if '\\$2'LANDSCAPE' \{\ +. nr #PAGE_WIDTH_TMP \\n[#PAGE_WIDTH] +. PAGEWIDTH \\n[#PAGE_LENGTH]u +. PAGELENGTH \\n[#PAGE_WIDTH_TMP]u +. as $PAPER " LANDSCAPE\" +. \} +. if !r#L_MARGIN .L_MARGIN \\n[.o] +. if !r#R_MARGIN .R_MARGIN \\n[#PAGE_WIDTH]u-\\n[#L_MARGIN]u-1i +. if '\\*[.T]'pdf' .br +. vs +.END +\# +\# ==================================================================== +\# +\# +++PRINTSTYLE -- TYPEWRITE OR TYPESET+++ +\# +\# PRINTSTYLE +\# ---------- +\# *Arguments: +\# TYPESET | TYPEWRITE [SINGLESPACE] +\# *Function: +\# Sets type specs for typewriter-style or typeset output. +\# *Notes: +\# Number registers: TYPEWRITE=1, TYPESET=2. +\# +.MAC PRINTSTYLE END +. if n \{\ +. if '\\$1'TYPESET' \{\ +. pl 1 +. ab [mom]: Terminal output requires PRINTSTYLE TYPEWRITE. Aborting. +. \} +. \} +. if !\\n[#COLLATE]=1 \{\ +. if !d$PAPER \{\ +. PAGELENGTH 11i +. PAGEWIDTH 8.5i +. \} +. if '\\$1'TYPEWRITE' \{\ +. nr #PRINT_STYLE 1 +. if !\\n[#DOC_TYPE]=4 \{\ +. L_MARGIN 6P +. R_MARGIN 6P +. \} +. ds $TYPEWRITER_FAM C +. ds $TYPEWRITER_PS 12 +. TYPEWRITER +. color 0 +. ie '\\$2'SINGLESPACE' \{\ +. nr #SINGLE_SPACE 1 +. vs 12 +. ie \\n[#DOC_TYPE]=4 .nr #FOOTER_ADJ \\n[.v] +. el .nr #FOOTER_ADJ \\n[.v] +. nr #ORIGINAL_DOC_LEAD \\n[.v] +. \} +. el \{\ +. if !\\n[#DOC_TYPE]=4 \{\ +. vs 24 +. nr #FOOTER_ADJ \\n[.v]/2 +. nr #ORIGINAL_DOC_LEAD \\n[.v] +. \} +. \} +. QUAD L +. HY OFF +. SMARTQUOTES OFF +. if !\\n[#PP_INDENT] .nr #PP_INDENT 3P +. HDRFTR_RIGHT_CAPS +. nr #BOLDER_UNITS 0 +. nr #CONDENSE 0 +. nr #EXTEND 0 +. if !\\n[#ITALIC_MEANS_ITALIC] \{\ +. rm IT +. rm PREV +. UNDERLINE_ITALIC +. \} +. rm BD +. rm BDI +. if !\\n[#SLANT_MEANS_SLANT] .UNDERLINE_SLANT +. if !\\n[#UNDERLINE_QUOTES] .UNDERLINE_QUOTES +. nr #IGNORE_COLUMNS 1 +. nr #RULE_WEIGHT 500 +. char \[em] -- +. tr `' +. tr \[lq]" +. tr \[rq]" +. \} +. if '\\$1'TYPESET' \{\ +. nr #PRINT_STYLE 2 +. if !\\n[#DOC_TYPE]=5 \{\ +. if !\\n[#DOC_TYPE]=4 \{\ +. L_MARGIN 6P +. R_MARGIN 6P +. \} +. \} +. FAMILY T +. FT R +. if !\\n[#DOC_TYPE]=4 .ps 12.5 +. if !\\n[#DOC_TYPE]=4 .vs 16 +.\" In DEFAULTS, TRAPS is run with this leading, so we need a register to +.\" hold it for use with the .sp in FOOTER +. nr #FOOTER_ADJ 12000 +. JUSTIFY +. HY +. HY_SET 2 36p 1p +. KERN +. LIG +. SS 0 +. SMARTQUOTES +. if !\\n[#PP_INDENT] \{\ +. in 2m \"Set indent +. nr #PP_INDENT \\n[.i] \"Read into #PP_INDENT +. in 0 \"Remove indent +. \} +. HDRFTR_RIGHT_CAPS +. rr #IGNORE_COLUMNS +. \} +.\" Set up default style for nine levels of headings +. nr #HD_LEVEL 0 1 \" loop step +. nr #LOOP 9 \" loop count +. while \\n+[#HD_LEVEL]<=\\n[#LOOP] \{\ +. HEADING_STYLE \\n[#HD_LEVEL] \ + FONT B \ + SIZE +0 \ + QUAD L \ + NEEDS 1 \ + COLOR black +.\" Set up default style for nine levels of TOC headings +. TOC_ENTRY_STYLE \\n[#HD_LEVEL] \ + FONT R \ + SIZE +0 \ + COLOR black +. \} +.\" Set up decreasing sizes for headings levels 1 - 3, starting at +3 +. nr #HD_LEVEL 0 1 \" loop step +. nr #LOOP 3 \" loop count +. nr #HD_SIZE 4 1 +. while \\n+[#HD_LEVEL]<=\\n[#LOOP] \{\ +. nr #HD_SIZE_CHANGE \\n-[#HD_SIZE] +. ds $HEAD_\\n[#HD_LEVEL]_SIZE +\\n[#HD_SIZE_CHANGE] +. \} +.\" Set up TOC title style +. TOC_TITLE_STYLE FONT R SIZE +0 INDENT 0 +.\" Set up captions, labels, sources +. LABELS ALL FONT B AUTOLEAD 2 +. LABELS EQN FONT R QUAD RIGHT +. CAPTIONS ALL AUTOLEAD 2 +. CAPTIONS EQN QUAD CENTER +. SOURCES TBL AUTOLEAD 2 +. \} +.END +\# +\# Set limited parameters to TYPEWRITE. +\# +.MAC TYPEWRITER_FAMILY END +. ds $TYPEWRITER_FAM \\$1 +.END +\# +.ALIAS TYPEWRITER_FAM TYPEWRITER_FAMILY +\# +.MAC TYPEWRITER_SIZE END +. ds $TYPEWRITER_PS \\$1 +.END +\# +.MAC TYPEWRITER END +. fam \\*[$TYPEWRITER_FAM] +. ft R +. ps \\*[$TYPEWRITER_PS] +.END +\# +\# ITALIC MEANS ITALIC +\# ------------------- +\# *Argument: +\# <none> +\# *Function: +\# Instructs TYPEWRITE to treat italics as italics, whether +\# invoked via control lines or inline. +\# *Notes: +\# ITALIC_MEANS_ITALIC and UNDERLINE_ITALIC are mutually exclusive, +\# hence invoking the one automatically turns off the other. +\# +.MAC ITALIC_MEANS_ITALIC END +. if \\n[#PRINT_STYLE]=1 \{\ +. nr #ITALIC_MEANS_ITALIC 1 +. rr #UNDERLINE_ITALIC +. rm ROM +. rm IT +. rm PREV +. ds ROM \Ef[R] +. ds IT \Ef[I] +. ds PREV \Ef[] +. \} +.END +\# +\# UNDERLINE ITALIC +\# ---------------- +\# *Argument: +\# <none> +\# *Function: +\# Instructs TYPEWRITE to underline italics, whether invoked +\# via control lines or inline. +\# *Notes: +\# UNDERLINE_ITALIC and ITALIC_MEANS_ITALIC are mutually exclusive, +\# hence invoking the one automatically turns off the other. +\# +\# UNDERLINE_ITALIC is the default for TYPEWRITE. +\# +.MAC UNDERLINE_ITALIC END +. if \\n[#PRINT_STYLE]=1 \{\ +. nr #UNDERLINE_ITALIC 1 +. rr #ITALIC_MEANS_ITALIC +. rm ROM +. rm IT +. rm PREV +. ds ROM \E*[ULX] +. ds IT \E*[UL] +. ds PREV \f[P]\E*[ULX] +. \} +.END +\# +\# UNDERLINE SLANT +\# --------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Instructs TYPEWRITE to underline occurrences of \*[SLANT], or +\# turns feature off. +\# *Notes: +\# Users may want \*[SLANT] to mean slant in TYPEWRITE, although +\# most of the time, \*[SLANT] most likely means the user wanted +\# italic but didn't have it, ergo the need to tell TYPEWRITE to +\# treat \*[SLANT] as italic (i.e. underlined). +\# +\# UNDERLINE_SLANT and SLANT_MEANS_SLANT are mutually exclusive, +\# hence invoking the one automatically turns off the other. +\# +\# UNDERLINE_SLANT is the default for TYPEWRITE. +\# +.MAC UNDERLINE_SLANT END +. if \\n[#PRINT_STYLE]=1 \{\ +. rr #SLANT_MEANS_SLANT +. nr #UNDERLINE_SLANT 1 +. rm SLANT +. rm SLANTX +. ds SLANT \ER'#SLANT_ON 1'\E*[UL] +. ds SLANTX \ER'#SLANT_ON 0'\E*[ULX] +. \} +.END +\# +.MAC SLANT_MEANS_SLANT END +. if \\n[#PRINT_STYLE]=1 \{\ +. rr #UNDERLINE_SLANT +. nr #SLANT_MEANS_SLANT 1 +. rm SLANT +. rm SLANTX +. ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]' +. ds SLANTX \ER'#SLANT_ON 0'\ES'0' +. \} +.END +\# +.MAC IGNORE_COLUMNS END +. if \\n[#PRINT_STYLE]=1 .nr #NO_COLUMNS 1 +.END +\# +\# ==================================================================== +\# +\# +++COPY STYLE -- DRAFT OR FINAL+++ +\# +\# COPY STYLE +\# ---------- +\# *Arguments: +\# DRAFT | FINAL +\# *Function: +\# Sets registers that are used to determine what to put +\# in the default header, and how to number pages. +\# *Notes: +\# DOCTYPE must come before COPYSTYLE. +\# +.MAC COPYSTYLE END +. ds $COPY_STYLE \\$1 +. if '\\*[$COPY_STYLE]'DRAFT' \{\ +. nr #COPY_STYLE 1 +. if !d$DRAFT .DRAFT 1 +. \} +. if '\\*[$COPY_STYLE]'FINAL' .nr #COPY_STYLE 2 +. if '\\*[$CHAPTER_STRING]'' .CHAPTER_STRING "Chapter" +. if '\\*[$DRAFT_STRING]'' .DRAFT_STRING "Draft" +. if '\\*[$REVISION_STRING]'' .REVISION_STRING "Rev." +.\" Default +. if \\n[#DOC_TYPE]=1 \{\ +. ie \\n[#COPY_STYLE]=1 \{\ +. ie \\n[#PAGENUM_STYLE_SET] .PAGENUM_STYLE \\*[$PAGENUM_STYLE] +. el .PAGENUM_STYLE roman +. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\ +. ie \\n[#DRAFT_WITH_PAGENUM] .ds $HDRFTR_CENTER +. el \{\ +. ie '\\*[$REVISION]'' \{\ +. ds $HDRFTR_CENTER \ + \\*[$DRAFT_STRING]\\*[$DRAFT] +. \} +. el \{\ +. ds $HDRFTR_CENTER \ + \\*[$DRAFT_STRING]\\*[$DRAFT], \ + \\*[$REVISION_STRING] \\*[$REVISION] +. \} +. \} +. \} +. \} +. el \{\ +. ie \\n[#PAGENUM_STYLE_SET] .PAGENUM_STYLE \\*[$PAGENUM_STYLE] +. el .PAGENUM_STYLE DIGIT +. if \\n[#DRAFT_WITH_PAGENUM] .rr #DRAFT_WITH_PAGENUM +. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\ +. ds $HDRFTR_CENTER +. rr #USER_DEF_HDRFTR_CENTER +. \} +. \} +. \} +.\" Chapter +. if \\n[#DOC_TYPE]=2 \{\ +.\" Copystyle DRAFT +. ie \\n[#COPY_STYLE]=1 \{\ +. ie \\n[#PAGENUM_STYLE_SET] \ +. PAGENUM_STYLE \\*[$PAGENUM_STYLE] +. el \ +. PAGENUM_STYLE roman +. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\ +. ie \\n[#DRAFT_WITH_PAGENUM] \{\ +. ie '\\*[$CHAPTER]'' \{\ +. ie !'\\*[$CHAPTER_TITLE_1]'' \ +. ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE] +. el .ds $HDRFTR_CENTER \\*[$CHAPTER_STRING] +. \} +. el \{\ +. ie !'\\*[$CHAPTER_TITLE_1]'' \ +. ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE] +. el .ds $HDRFTR_CENTER \\*[$CHAPTER_STRING] \\*[$CHAPTER] +. \} +. \} +. el \{\ +. ie '\\*[$REVISION]'' \{\ +. ie '\\*[$CHAPTER]'' \{\ +. ie !'\\*[$CHAPTER_TITLE_1]'' \{\ +. ie '\\*[$DRAFT]'' \ +. ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE] +. el \{\ +. ds $HDRFTR_CENTER \ + \\*[$CHAPTER_TITLE], \ + \\*[$DRAFT_STRING]\\*[$DRAFT] +. \} +. \} +. el \{\ +. ie '\\*[$DRAFT]'' \{\ +. ds $HDRFTR_CENTER \ + \\*[$CHAPTER_STRING] +. \} +. el \{\ +. ds $HDRFTR_CENTER \ + \\*[$CHAPTER_STRING], \ + \\*[$DRAFT_STRING]\\*[$DRAFT] +. \} +. \} +. \} +. el \{\ +. ie !'\\*[$CHAPTER_TITLE_1]'' \{\ +. ie '\\*[$DRAFT]'' \ +. ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE] +. el \{\ +. ds $HDRFTR_CENTER \ + \\*[$CHAPTER_TITLE_1], \ + \\*[$DRAFT_STRING]\\*[$DRAFT] +. \} +. \} +. el \{\ +. ie '\\*[$DRAFT]'' \{\ +. ds $HDRFTR_CENTER \ + \\*[$CHAPTER_STRING] \\*[$CHAPTER] +. \} +. el \{\ +. ds $HDRFTR_CENTER \ + \\*[$CHAPTER_STRING] \\*[$CHAPTER], \ + \\*[$DRAFT_STRING]\\*[$DRAFT] +. \} +. \} +. \} +. \} +. el \{\ +. ie '\\*[$CHAPTER]'' \{\ +. ie !'\\*[$CHAPTER_TITLE_1]'' \{\ +. ie '\\*[$DRAFT]'' \{\ +. ds $HDRFTR_CENTER \ + \\*[$CHAPTER_TITLE], \ + \\*[$REVISION_STRING] \\*[$REVISION] +. \} +. el \{\ +. ds $HDRFTR_CENTER \ + \\*[$CHAPTER_TITLE], \ + \\*[$DRAFT_STRING]\\*[$DRAFT], \ + \\*[$REVISION_STRING] \\*[$REVISION] +. \} +. \} +. el \{\ +. ie '\\*[$DRAFT]'' \{\ +. ds $HDRFTR_CENTER \ + \\*[$CHAPTER_STRING], \ + \\*[$REVISION_STRING] \\*[$REVISION] +. \} +. el \{\ +. ds $HDRFTR_CENTER \ + \\*[$CHAPTER_STRING], \ + \\*[$DRAFT_STRING]\\*[$DRAFT], \ + \\*[$REVISION_STRING] \\*[$REVISION] +. \} +. \} +. \} +. el \{\ +. ie !'\\*[$CHAPTER_TITLE_1]'' \{\ +. ie '\\*[$DRAFT]'' \{\ +. ds $HDRFTR_CENTER \ + \\*[$CHAPTER_TITLE], \ + \\*[$REVISION_STRING] \\*[$REVISION] +. \} +. el \{\ +. ds $HDRFTR_CENTER \ + \\*[$CHAPTER_TITLE], \ + \\*[$DRAFT_STRING]\\*[$DRAFT], \ + \\*[$REVISION_STRING] \\*[$REVISION] +. \} +. \} +. el \{\ +. ie '\\*[$DRAFT]'' \{\ +. ds $HDRFTR_CENTER \ + \\*[$CHAPTER_STRING] \\*[$CHAPTER], \ + \\*[$REVISION_STRING] \\*[$REVISION] +. \} +. el \{\ +. ds $HDRFTR_CENTER \ + \\*[$CHAPTER_STRING] \\*[$CHAPTER], \ + \\*[$DRAFT_STRING]\\*[$DRAFT], \ + \\*[$REVISION_STRING] \\*[$REVISION] +. \} +. \} +. \} +. \} +. \} +. \} +. \} +.\" Copystyle FINAL +. el \{\ +. if \\n[#DRAFT_WITH_PAGENUM] .rr #DRAFT_WITH_PAGENUM +. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\ +. ie \\n[#PAGENUM_STYLE_SET] \ +. PAGENUM_STYLE \\*[$PAGENUM_STYLE] +. el .PAGENUM_STYLE DIGIT +. ie '\\*[$CHAPTER]'' \{\ +. ie !'\\*[$CHAPTER_TITLE_1]'' \ +. ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE] +. el \ +. ds $HDRFTR_CENTER \\*[$CHAPTER_STRING] +. \} +. el \{\ +. ie !'\\*[$CHAPTER_TITLE_1]'' \ +. ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE] +. el \ +. ds $HDRFTR_CENTER \\*[$CHAPTER_STRING] \\*[$CHAPTER] +. \} +. \} +. \} +. \} +.\" Named +. if \\n[#DOC_TYPE]=3 \{\ +. ie \\n[#COPY_STYLE]=1 \{\ +. ie \\n[#PAGENUM_STYLE_SET] .PAGENUM_STYLE \\*[$PAGENUM_STYLE] +. el .PAGENUM_STYLE roman +. ie \\n[#DRAFT_WITH_PAGENUM] \ +. ds $HDRFTR_CENTER \\*[$DOC_TYPE] +. el \{\ +. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\ +. ie '\\*[$REVISION]'' \{\ +. ie '\\*[$DRAFT]'' \ +. ds $HDRFTR_CENTER \\*[$DOC_TYPE] +. el \{\ +. ds $HDRFTR_CENTER \ + \\*[$DOC_TYPE], \ + \\*[$DRAFT_STRING]\\*[$DRAFT] +. \} +. \} +. el \{\ +. ie '\\*[$DRAFT]'' \{\ +. ds $HDRFTR_CENTER \ + \\*[$DOC_TYPE], \ + \\*[$REVISION_STRING] \\*[$REVISION] +. \} +. el \{\ +. ds $HDRFTR_CENTER \ + \\*[$DOC_TYPE], \ + \\*[$DRAFT_STRING]\\*[$DRAFT], \ + \\*[$REVISION_STRING] \\*[$REVISION] +. \} +. \} +. \} +. \} +. \} +. el \{\ +. if \\n[#DRAFT_WITH_PAGENUM] .rr #DRAFT_WITH_PAGENUM +. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\ +. ie \\n[#PAGENUM_STYLE_SET] .PAGENUM_STYLE \\*[$PAGENUM_STYLE] +. el .PAGENUM_STYLE DIGIT +. ds $HDRFTR_CENTER \\*[$DOC_TYPE] +. \} +. \} +. \} +.END +\# +\# ==================================================================== +\# +\# +++COLLECT DOC INFO (reference macros, metadata)+++ +\# +\# *Arguments: +\# various string/register arguments +\# *Function: +\# Set strings and registers for covers, docheaders, page headers. +\# +.MAC DOCTITLE END +. rr #DOCTITLE_NUM +. nr #DOCTITLE_NUM 0 1 +. while \\n[#NUM_ARGS]>\\n[#DOCTITLE_NUM] \{\ +. ds $DOCTITLE_\\n+[#DOCTITLE_NUM] \\$\\n[#DOCTITLE_NUM] +. \} +. ds $DOCTITLE \\$* +. PDF_TITLE \\*[$DOCTITLE] +.END +\# +.MAC TITLE END \"Document title +. if '\\$1'DOC_COVER' \{\ +. shift +. DOC_COVERTITLE \\$@ +. return +. \} +. if '\\$1'COVER' \{\ +. shift +. COVERTITLE \\$@ +. return +. \} +. ie \\n[#NUM_ARGS]=0 \{\ +. if \\n[#TITLE_NUM] \{\ +. nr #ITEM 0 1 +. while \\n[#TITLE_NUM]>\\n[#ITEM] \{\ +. rm $TITLE_\\n+[#ITEM] +. \} +. rr #TITLE_NUM +. \} +. \} +. el \{\ +. nr #TITLE_NUM 0 1 +. while \\n[#NUM_ARGS]>\\n[#TITLE_NUM] \{\ +. ds $TITLE_\\n+[#TITLE_NUM] \\$\\n[#TITLE_NUM] +. \} +. ds $TITLE \\$* +. \} +.END +\# +.MAC SUBTITLE END \"Document sub-title +. ie \\n[#NUM_ARGS]=0 \{\ +. if \\n[#DOC_COVER_SUBTITLE_NUM] \ +. ds COVER_ DOC_COVER_ +. if \\n[#COVER_SUBTITLE_NUM] \ +. ds COVER_ COVER_ +. if \\n[#\\*[COVER_]SUBTITLE_NUM] \{\ +. nr #ITEM 0 1 +. while \\n[#\\*[COVER_]SUBTITLE_NUM]>\\n[#ITEM] \{\ +. rm $\\*[COVER_]SUBTITLE_\\n+[#ITEM] +. \} +. rr #\\*[COVER_]SUBTITLE_NUM +. rm $SUBTITLE +. \} +. \} +. el \{\ +. if '\\$1'DOC_COVER' \{\ +. ds COVER_ DOC_COVER_ +. shift +. \} +. if '\\$1'COVER' \{\ +. ds COVER_ COVER_ +. shift +. \} +. nr #\\*[COVER_]SUBTITLE_NUM 0 1 +. while \\n[#NUM_ARGS]>\\n[#\\*[COVER_]SUBTITLE_NUM] \{\ +. ds $\\*[COVER_]SUBTITLE_\\n+[#\\*[COVER_]SUBTITLE_NUM] \ +\\$\\n[#\\*[COVER_]SUBTITLE_NUM] +. \} +. rm COVER_ +. ds $SUBTITLE \\$* +. \} +.END +\# +.MAC CHAPTER END \"If document is a chapter, the chapter number +. nr #CHAPTER_CALLED 1 +. ds $CHAPTER \\$1 +. if \B'\\*[$CHAPTER]' .nr #CH_NUM \\*[$CHAPTER] +. if !r #CH_NUM .nr #CH_NUM 1 +.END +. +.MAC CHAPTER_NUMBER END +. nr #CH_NUM \\$1 +.END +\# +.MAC CHAPTER_TITLE END \" This defines what comes after Chapter # +. ie \\n[#NUM_ARGS]=0 \{\ +. if \\n[#CHAPTER_TITLE_NUM] \{\ +. nr #ITEM 0 1 +. while \\n[#CHAPTER_TITLE_NUM]>\\n[#ITEM] \{\ +. rm $CHAPTER_TITLE_\\n+[#ITEM] +. \} +. rr #CHAPTER_TITLE_NUM +. rm $CHAPTER_TITLE +. \} +. \} +. el \{\ +. rr #CHAPTER_TITLE_NUM +. nr #CHAPTER_TITLE_NUM 0 1 +. while \\n[#NUM_ARGS]>\\n[#CHAPTER_TITLE_NUM] \{\ +. ds $CHAPTER_TITLE_\\n+[#CHAPTER_TITLE_NUM] \ +\\$\\n[#CHAPTER_TITLE_NUM] +. \} +. ds $CHAPTER_TITLE \\$* +. \} +.END +\# +.MAC DRAFT END \"Draft number +. ie '\\$1'' .ds $DRAFT +. el .ds $DRAFT " \\$1 +.END +\# +.MAC REVISION END \"Revision number +. ds $REVISION \\$1 +.END +\# +.MAC DRAFT_WITH_PAGENUMBER END \"Attach draft/revision strings to page number +. nr #DRAFT_WITH_PAGENUM 1 +.END +\# +.MAC AUTHOR END \"Author. Enclose all args fully in double quotes. +. rr #NO_PRINT_AUTHOR +. if '\\$1'DOC_COVER' \{\ +. ds COVER_ DOC_COVER_ +. shift +. \} +. if '\\$1'COVER' \{\ +. ds COVER_ COVER_ +. shift +. \} +. nr #\\*[COVER_]AUTHOR_NUM 0 1 +. while \\n[#NUM_ARGS]>\\n[#\\*[COVER_]AUTHOR_NUM] \{\ +. ds $\\*[COVER_]AUTHOR_\\n+[#\\*[COVER_]AUTHOR_NUM] \ +\\$\\n[#\\*[COVER_]AUTHOR_NUM] +. if !'\\*[$\\*[COVER_]AUTHOR_\\n[#\\*[COVER_]AUTHOR_NUM]]'' \ +. as $AUTHORS \ +"\\*[$\\*[COVER_]AUTHOR_\\n[#\\*[COVER_]AUTHOR_NUM]], \" +. \} +. ds $AUTHOR \\*[$AUTHOR_1] +. substring $AUTHORS 0 -2 +. ds PDF_AUTHORS \\*[$AUTHORS] +. pdfmomclean PDF_AUTHORS +. nop \!x X ps:exec [/Author (\\*[PDF_AUTHORS]) /DOCINFO pdfmark +.END +. +.ALIAS EDITOR AUTHOR +\# +.MAC COPYRIGHT END \"For use on cover pages only +. ie \\n[#NUM_ARGS]=1 \ +. ds $COVER_COPYRIGHT \[co]\\$1 +. el \{\ +. if '\\$1'COVER' .ds $COVER_COPYRIGHT \[co]\\$2 +. if '\\$1'DOC_COVER' .ds $DOC_COVER_COPYRIGHT \[co]\\$2 +. \} +.END +\# +.MAC COPYRIGHT_V_ADJUST END +. ds $COPYRIGHT_V_ADJ \\$1 +.END +\# +.MAC MISC END \"Doc cover and cover pages only; enclose all args in double quotes +. rm COVER_ +. ie \\n[#NUM_ARGS]=0 \{\ +. if \\n[#DOC_COVER_MISC_LINES] \ +. ds COVER_ DOC_COVER_ +. if \\n[#COVER_MISC_LINES] \ +. ds COVER_ COVER_ +. if \\n[#\\*[COVER_]MISC_LINES] \{\ +. nr #LINE 0 1 +. while \\n[#\\*[COVER_]MISC_LINES]>\\n[#LINE] \{\ +. rm $\\*[COVER_]MISC_\\n+[#LINE] +. \} +. rr #\\*[COVER_]MISC_LINES +. \} +. \} +. el \{\ +. if '\\$1'DOC_COVER' \{\ +. ds COVER_ DOC_COVER_ +. shift +. \} +. if '\\$1'COVER' \{\ +. ds COVER_ COVER_ +. shift +. \} +. nr #\\*[COVER_]MISC_LINE 0 1 +. while \\n[#NUM_ARGS]>\\n[#\\*[COVER_]MISC_LINE] \{\ +. ds $\\*[COVER_]MISC_\\n+[#\\*[COVER_]MISC_LINE] \ +\\$[\\n[#\\*[COVER_]MISC_LINE]] +. \} +. nr #\\*[COVER_]MISC_LINES \\n[#NUM_ARGS] +. rm COVER_ +. \} +.END +\# +\# Page number that appears on page one. +.MAC PAGENUMBER END +. nr #n%_AT_PAGENUM_SET \\n% +. nr #PAGE_NUM_ADJ \\$1-\\n[#n%_AT_PAGENUM_SET] +. rr #n%_AT_PAGENUM_SET +. nr #PAGE_NUM_SET 1 +.END +\# +\# Replacement string for pagenumber. +.MAC PAGENUMBER_STRING END +. ds $PAGENUM_STRING \\$1 +.END +\# +\# ==================================================================== +\# +\# +++TYPE OF DOCUMENT+++ +\# +\# DOCUMENT TYPE +\# ------------- +\# *Argument: +\# DEFAULT | CHAPTER | NAMED "<whatever> | LETTER +\# *Function: +\# Creates strings and sets registers for document types. +\# *Notes: +\# Number registers: DEFAULT=1, CHAPTER=2, NAMED=3, LETTER=4, +\# SLIDES=5 +\# +.MAC DOCTYPE END +. if '\\$1'DEFAULT' .nr #DOC_TYPE 1 +. if '\\$1'CHAPTER' .nr #DOC_TYPE 2 +. if '\\$1'NAMED' \{\ +. rr #NO_PRINT_DOCTYPE +. ds $DOC_TYPE \\$2 +. nr #DOC_TYPE 3 +. \} +. if '\\$1'LETTER' \{\ +. nr #DOC_TYPE 4 +. L_MARGIN 1.125i +. R_MARGIN 1.125i +. ps 12 +. vs 13.5 +. nr #FOOTER_ADJ \\n[.v] +. DOCHEADER OFF +. PARA_INDENT 3m +. INDENT_FIRST_PARAS +. PARA_SPACE +. ds $SUITE \En[#SUITE] +. HEADER_MARGIN 3P+6p +. HEADER_GAP 3P +. FOOTERS +. FOOTER_RULE OFF +. FOOTER_LEFT "" +. FOOTER_CENTER "" +. FOOTER_RIGHT_SIZE +0 +. FOOTER_RIGHT "\&.../\E*[$SUITE] +. FOOTER_ON_FIRST_PAGE +. em ALL_DONE +. \} +. if '\\$1'SLIDES' \{\ +. shift +. nr #DOC_TYPE 5 +. PRINTSTYLE TYPESET +. FAMILY H +. QUAD CENTER +. QUOTE_STYLE QUAD CENTER +. BLOCKQUOTE_STYLE \ + QUAD J \ + INDENT \\n[.l]u/5u +. PARA_INDENT 0 +. NO_SHIM +. NO_FLEX +. HEADING_STYLE 1 \ + SIZE +8 \ + QUAD CENTER +. HEADING_STYLE 2 \ + SIZE +4 \ + QUAD CENTER +. HEADING_STYLE 3 \ + SIZE +2 \ + QUAD CENTER +. DOCHEADER off +. PAGINATION off +. PAGENUM_HYPHENS off +. HEADERS off +. FOOTERS off +. HEADERS_PLAIN +. FOOTERS_PLAIN +. nr loop-count 0 1 +. nr loop-counter \\n[#NUM_ARGS] +.\" Default 16:9 setup if no ASPECT +. PAGE 11i 6.1875i 36p 36p 80p 72p +. PT_SIZE 14 +. AUTOLEAD 4 +. HEADER_SIZE -2 +. while \\n+[loop-count]<=\\n[loop-counter] \{\ +. if '\\$1'ASPECT' \{\ +. if '\\$2'4:3' \{\ +. PAGE 11i 8.25i 36p 36p 90p 84p +. PT_SIZE 16 +. AUTOLEAD 6 +. HEADER_SIZE -3 +. \} +. if '\\$2'16:9' \{\ +. PAGE 11i 6.1875i 36p 36p 80p 72p +. PT_SIZE 14 +. AUTOLEAD 4 +. HEADER_SIZE -2 +. \} +. shift 2 +. \} +. if '\\$1'HEADER' \{\ +. shift 1 +. nr #SLIDE_HEADERS 1 +. ds $SLIDE_HDR_L \\$1 +. ds $SLIDE_HDR_C \\$2 +. ds $SLIDE_HDR_R \\$3 +. HEADER_MARGIN 45p +. shift 3 +. \} +. if '\\$1'FOOTER' \{\ +. shift 1 +. nr #SLIDE_FOOTERS 1 +. ds $SLIDE_FTR_L \\$1 +. ds $SLIDE_FTR_C \\$2 +. ds $SLIDE_FTR_R \\$3 +. shift 3 +. \} +. if '\\$1'TRANSITION' \{\ +. shift 1 +. ds $TRANS_TYPE \\$1 +. shift 1 +. \} +. if '\\$1'PAUSE' \{\ +. shift 1 +. ds $PAUSE_TYPE \\$1 +. shift 1 +. \} +. \} +. if d $TRANS_TYPE \ +. pdftransition PAGE \\*[$TRANS_TYPE] +. if d $PAUSE_TYPE \ +. pdftransition BLOCK \\*[$PAUSE_TYPE] +. \} +. ie \\n[#SLIDE_HEADERS]+\\n[#SLIDE_FOOTERS]=2 \{\ +. HEADERS_AND_FOOTERS L "^\\*[$SLIDE_HDR_L]#\\*[$SLIDE_HDR_C]#\\*[$SLIDE_HDR_R]^" \ + L "^\\*[$SLIDE_FTR_L]#\\*[$SLIDE_FTR_C]#\\*[$SLIDE_FTR_R]^" +. \} +. el \{\ +. if \\n[#SLIDE_HEADERS] \{\ +. HEADERS +. HEADER_RECTO L "^\\*[$SLIDE_HDR_L]#\\*[$SLIDE_HDR_C]#\\*[$SLIDE_HDR_R]^" \ +. \} +. if \\n[#SLIDE_FOOTERS] \{\ +. FOOTERS +. FOOTER_RECTO L "^\\*[$SLIDE_FTR_L]#\\*[$SLIDE_FTR_C]#\\*[$SLIDE_FTR_R]^" +. \} +. \} +.END +\# +\# +++LETTER MACROS+++ +\# +\# First, create a register to hold incrementing numbers to be +\# appended to LETTERHEAD. +\# +.nr #FIELD 0 1 +\# +\# DATE +\# ---- +\# *Arguments: +\# <none> +\# *Function: +\# Stores date (entered on the line after .DATE) in diversion +\# LETTERHEAD<n> +\# +.MAC DATE END +. if !'\\n[.z]'' .di +. di LETTERHEAD\\n+[#FIELD] +. ie \\n[#FIELD]=1 \{\ +. nr #DATE_FIRST 1 +. RIGHT +. \} +. el .LEFT +.END +\# +\# TO +\# -- +\# *Arguments: +\# <none> +\# *Function: +\# Stores addressee address (entered on the line after .TO) in +\# diversion LETTERHEAD<n> +\# +.MAC TO END +. if !'\\n[.z]'' .di +. di LETTERHEAD\\n+[#FIELD] +. LEFT +.END +\# +\# FROM +\# ---- +\# *Arguments: +\# <none> +\# *Function: +\# Stores addresser address (entered on the line after .FROM) in +\# diversion LETTERHEAD<n> +\# +.MAC FROM END +. if !'\\n[.z]'' .di +. di LETTERHEAD\\n+[#FIELD] +. LEFT +.END +\# +\# GREETING +\# -------- +\# *Arguments: +\# <none> +\# *Function: +\# Stores greeting (entered on the line after .GREETING) in +\# diversion LETTERHEAD<n> +\# +.MAC GREETING END +. if !'\\n[.z]'' .di +. di LETTERHEAD\\n+[#FIELD] +. LEFT +.END +\# +\# CLOSING +\# ------- +\# *Arguments: +\# <closing string> +\# *Function: +\# Stores greeting in diversion CLOSING. +\# +.MAC CLOSING END +. if '\\*[$SIG_SPACE]'' .ds $SIG_SPACE 3v +. ie ( (2v+\\*[$SIG_SPACE]) > \\n[.t] ) \{\ +. ie !\\n[@TOP] \{\ +. ch HEADER +. ch FOOTER +. br +. tm1 "[mom]: Insufficient room for \\$0 and signature line. +. ab [mom]: Terminating '\\n[.F]' before closing. +. \} +. el .sp +. \} +. el .br +. nr #CLOSING 1 +. di CLOSING_TEXT +.END +\# +\# CLOSING INDENT +\# -------------- +\# *Argument: +\# <amount to indent closing from left margin> +\# *Function: +\# Defines string $CLOSE_INDENT for use in macro, ALL_DONE. +\# +.MAC CLOSING_INDENT END +. ds $CLOSE_INDENT \\$1 +.END +\# +\# SIGNATURE_SPACE +\# --------------- +\# *Argument: +\# <amount of space to leave for signature> +\# *Function: +\# Defines string $SIG_SPACE for use in macro, ALL_DONE. +\# +.MAC SIGNATURE_SPACE END +. ds $SIG_SPACE \\$1 +.END +\# +\# NO SUITE +\# -------- +\# *Arguments: +\# <none> +\# *Function: +\# Redefines $FOOTER_RIGHT to blank so that a suite number doesn't +\# appear at the bottom of letter pages. +\# +.MAC NO_SUITE END +. FOOTER_RIGHT "" +.END +\# +\# ==================================================================== +\# +\# +++DEFAULTS FOR DOCUMENT PROCESSING+++ +\# +\# TYPE-STYLE CONTROL MACROS +\# ------------------------- +\# The control macros for family, font, size, color and quad are +\# here grouped together. Each (e.g., _FAMILY) uses the calling alias +\# to determine the document element to which the style parameter +\# applies. Defaults for all these guys are set in DEFAULTS, and +\# listed in the "Control Macros" section of the documentation +\# pertinent to the element whose style is to be changed. +\# +.MAC _FAMILY END +. ds PARAM FAM +. ds ELEMENT \\$0 +. if '\\$0'COPYRIGHT_FAMILY' \ +. ds ELEMENT COVER_COPYRIGHT_FAMILY +. ds FROM_ALIAS \\$0 +. substring ELEMENT 0 -4 \" Strip 'ILY' from FAMILY +. ASSIGN_ELEMENT \\$1 +.END +\# +.MAC _FONT END +. ds PARAM FT +. ds ELEMENT \\$0 +. ds FROM_ALIAS \\$0 +. if '\\$0'COPYRIGHT_FONT' \ +. ds ELEMENT COVER_COPYRIGHT_FONT +. substring ELEMENT 0 -5 +. ds ELEMENT \\*[ELEMENT]FT \" ELEMENT is now \\$0_FT +. ASSIGN_ELEMENT \\$1 +.END +\# +.MAC _SIZE END +. ds PARAM SIZE_CHANGE +. ds ELEMENT \\$0_CHANGE +. if '\\$0'CODE_SIZE' \{\ +. ds PARAM SIZE_ADJ +. ds ELEMENT \\$0_ADJ +. \} +. if '\\$0'COPYRIGHT_SIZE' \ +. ds ELEMENT COVER_COPYRIGHT_SIZE_CHANGE +. ds FROM_ALIAS \\$0 +. ASSIGN_ELEMENT \\$1 +.END +\# +.MAC _COLOR END +. if \\n[#PRINT_STYLE]=1 .return +. ds PARAM COLOR +. ds ELEMENT \\$0 +. if '\\$0'COPYRIGHT_COLOR' \ +. ds ELEMENT COVER_COPYRIGHT_COLOR +. ds FROM_ALIAS \\$0 +. ASSIGN_ELEMENT \\$1 +.END +\# +.MAC _CAPS END +. ds CAPS_TYPE \\$0 +. substring CAPS_TYPE 0 7 +. ds CALLED_AS \\$0 +. substring CALLED_AS -7 +. ie '\\*[CALLED_AS]'NO_CAPS' \{\ +. ie '\\*[CAPS_TYPE]'BIBLIOGR' \{\ +. if '\\$0'BIBLIOGRAPHY_HEADER_NO_CAPS' .rr #BIB_STRING_CAPS +. if '\\$0'BIBLIOGRAPHY_STRING_NO_CAPS' .rr #BIB_STRING_CAPS +. \} +. el \{\ +. ie '\\*[CAPS_TYPE]'ENDNOTES' \{\ +. if '\\$0'ENDNOTES_HEADER_NO_CAPS' .rr #EN_STRING_CAPS +. if '\\$0'ENDNOTES_STRING_NO_CAPS' .rr #EN_STRING_CAPS +. \} +. el \{\ +. ie '\\$0'TOC_HEADER_NO_CAPS' .rr #TOC_STRING_CAPS +. el \{\ +. ds REGISTER_TYPE \\$0 +. substring REGISTER_TYPE 0 -8 +. as REGISTER_TYPE CAPS +. rr #\\*[REGISTER_TYPE] +. \} +. \} +. \} +. \} +. el \{\ +. ie '\\*[CAPS_TYPE]'BIBLIOGR' \{\ +. if '\\$0'BIBLIOGRAPHY_HEADER_CAPS' .nr #BIB_STRING_CAPS 1 +. if '\\$0'BIBLIOGRAPHY_STRING_CAPS' .nr #BIB_STRING_CAPS 1 +. \} +. el .nr #\\$0 1 +. \} +.END +. +.ALIAS _NO_CAPS _CAPS +\# +.MAC _SMALLCAPS END +. ds SMALLCAPS_TYPE \\$0 +. substring SMALLCAPS_TYPE 0 7 +. ds CALLED_AS \\$0 +. substring CALLED_AS -12 +. ie '\\*[CALLED_AS]'NO_SMALLCAPS' \{\ +. ie '\\*[SMALLCAPS_TYPE]'BIBLIOGR' \{\ +. if '\\$0'BIBLIOGRAPHY_HEADER_NO_SMALLCAPS' .rr #BIB_STRING_SMALLCAPS +. if '\\$0'BIBLIOGRAPHY_STRING_NO_SMALLCAPS' .rr #BIB_STRING_SMALLCAPS +. \} +. el \{\ +. ie '\\*[SMALLCAPS_TYPE]'ENDNOTES' \{\ +. if '\\$0'ENDNOTES_HEADER_NO_SMALLCAPS' .rr #EN_STRING_SMALLCAPS +. if '\\$0'ENDNOTES_STRING_NO_SMALLCAPS' .rr #EN_STRING_SMALLCAPS +. \} +. el \{\ +. ie '\\$0'TOC_HEADER_NO_SMALLCAPS' .rr #TOC_STRING_SMALLCAPS +. el \{\ +. ds REGISTER_TYPE \\$0 +. substring REGISTER_TYPE 0 -13 +. as REGISTER_TYPE SMALLCAPS +. rr #\\*[REGISTER_TYPE] +. \} +. \} +. \} +. \} +. el \{\ +. ie '\\*[SMALLCAPS_TYPE]'BIBLIOGR' \{\ +. if '\\$0'BIBLIOGRAPHY_HEADER_SMALLCAPS' .nr #BIB_STRING_SMALLCAPS 1 +. if '\\$0'BIBLIOGRAPHY_STRING_SMALLCAPS' .nr #BIB_STRING_SMALLCAPS 1 +. \} +. el .nr #\\$0 1 +. \} +.END +. +.ALIAS _NO_SMALLCAPS _SMALLCAPS +\# +.MAC _QUAD END +. if '\\$0'BIBLIOGRAPHY_QUAD' \{\ +. if '\\$1'R' .QUAD-ERROR \\$0 +. if '\\$1'C' .QUAD-ERROR \\$0 +. \} +. if '\\$0'ENDNOTE_QUAD' \{\ +. if '\\$1'R' .QUAD-ERROR \\$0 +. if '\\$1'C' .QUAD-ERROR \\$0 +. \} +. if '\\$0'DOC_QUAD' \ +. if !\\n[#DOCS] .DOC_MACRO_ERROR \\$0 +. ds PARAM QUAD +. ds ELEMENT \\$0 +. if '\\$0'COPYRIGHT_QUAD' \ +. ds ELEMENT COVER_COPYRIGHT_QUAD +. ds FROM_ALIAS \\$0 +. ASSIGN_ELEMENT \\$1 +.END +\# +\# Special handling for QUOTE quadding +\# +.MAC QUOTE_QUAD END +. ds $Q_QUAD \\$0 +. substring $Q_QUAD 6 +.END +. +.ALIAS QUOTE_LEFT QUOTE_QUAD +.ALIAS QUOTE_CENTER QUOTE_QUAD +.ALIAS QUOTE_RIGHT QUOTE_QUAD +\# +.MAC QUAD-ERROR END +. tm1 "[mom]: \\$1 at line \\n[.c] of '\\n[.F]' must be set to either L or J. +. ab [mom]: Aborting. +.END +\# +.MAC ASSIGN_ELEMENT END +. rm $\\*[ELEMENT] \" Clear this first +.\" HDRFTR_<POSITION>_<PARAMETER> need special handling. +. ds hdrftr \\*[FROM_ALIAS] +. substring hdrftr 0 5 +. if '\\*[hdrftr]'HDRFTR' \{\ +. ds hdrftr-pos-element \\*[ELEMENT] +.\" See if ELEMENT is of the form HDRFTR_<pos>_<param> +. substring hdrftr-pos-element 0 7 +. substring hdrftr-pos-element -1 +. if !'\\*[ELEMENT]'HDRFTR_COLOR' \{\ +. if '\\*[hdrftr-pos-element]'L' .nr hdrftr-pos-element 1 +. if '\\*[hdrftr-pos-element]'C' .nr hdrftr-pos-element 1 +. if '\\*[hdrftr-pos-element]'R' .nr hdrftr-pos-element 1 +. \} +. \} +. if !\\n[hdrftr-pos-element] \{\ +. ds c1-c5 \\*[ELEMENT] +. substring c1-c5 0 4 \" Grab first five letters of the alias +. \} +.\" If none of the following, convert the substring of the +.\" calling alias, ie \*[ELEMENT], into the parameter string, e.g., +.\" $TITLE_FAM, assign arg, and set register. +. if !'\\*[c1-c5]'BIBLI' \ +. if !'\\*[c1-c5]'BLOCK' \ +. if !'\\*[c1-c5]'CITAT' \ +. if !'\\*[c1-c5]'ENDNO' \ +. if !'\\*[c1-c5]'EPIGR' \ +. if !'\\*[c1-c5]'FOOTN' \ +. if !'\\*[c1-c5]'HDRFT' \ +. if !'\\*[c1-c5]'LINEN' \ +. if !'\\*[c1-c5]'PAGEN' \{\ +. ie '\\*[ELEMENT]'CODE_SIZE_ADJ' .nr #\\*[ELEMENT] \\$1 +. el \{\ +. ds $\\*[ELEMENT] \\$1 +. nr #\\*[ELEMENT] 1 +. \} +. \} +. if '\\*[$\\*[ELEMENT]]'' \{\ +. if '\\*[c1-c5]'BIBLI' .ASSIGN_PARAM BIB \\$1 +. if '\\*[c1-c5]'BLOCK' .ASSIGN_PARAM BQUOTE_ \\$1 +. if '\\*[c1-c5]'CITAT' .ASSIGN_PARAM BQUOTE_ \\$1 +. if '\\*[c1-c5]'ENDNO' .ASSIGN_PARAM EN \\$1 +. if '\\*[c1-c5]'EPIGR' .ASSIGN_PARAM EPI_ \\$1 +. if '\\*[c1-c5]'FOOTN' .ASSIGN_PARAM FN_ \\$1 +. if '\\*[c1-c5]'HDRFT' .ASSIGN_PARAM HDRFTR_ \\$1 +. if '\\*[c1-c5]'LINEN' .ASSIGN_PARAM LN_ \\$1 +. if '\\*[c1-c5]'PAGEN' .ASSIGN_PARAM PAGE_NUM_ \\$1 +. \} +. if \\n[hdrftr-pos-element] \{\ +. if '\\*[hdrftr-pos-element]'L' .ds hdrftr-pos-element LEFT +. if '\\*[hdrftr-pos-element]'C' .ds hdrftr-pos-element CENTER +. if '\\*[hdrftr-pos-element]'R' .ds hdrftr-pos-element RIGHT +. if '\\*[ELEMENT]'HDRFTR_\\*[hdrftr-pos-element]_FAM' \ +. ds $HDRFTR_\\*[hdrftr-pos-element]_FAM \\$1 +. \} +. rr hdrftr-pos-element +. rm hdrftr-pos-element +.END +\# +.MAC ASSIGN_PARAM END +. if '\\*[PARAM]'FAM' .nr substr-index -7 +. if '\\*[PARAM]'FT' .nr substr-index -5 +. if '\\*[PARAM]'SIZE_CHANGE' .nr substr-index -5 +. if '\\*[PARAM]'COLOR' .nr substr-index -6 +. if '\\*[PARAM]'QUAD' .nr substr-index -5 +. if '\\$1'BIB' \{\ +. ds ELEMENT \\*[FROM_ALIAS] +. substring ELEMENT 12 \\n[substr-index] +. if '\\*[ELEMENT]'_HEADER_' \ +. ds ELEMENT _STRING_ +. \} +. if '\\$1'BQUOTE_' .rm ELEMENT +. if '\\$1'EN' \{\ +. ds ELEMENT \\*[FROM_ALIAS] +. substring ELEMENT 7 \\n[substr-index] +. if '\\*[ELEMENT]'S_HEADER_' \ +. ds ELEMENT _STRING_ +. if '\\*[ELEMENT]'_LINENUMBER_' \ +. ds ELEMENT _LN_ +. \} +. if '\\$1'EPI_' .rm ELEMENT +. if '\\$1'FN_' .rm ELEMENT +. if '\\$1'HDRFTR_' \{\ +. if '\\*[ELEMENT]'HDRFTR_FAM' \{\ +. nr #HDRFTR 1 +. ds $HDRFTR_FAM \\$2 +. ds $HDRFTR_LEFT_FAM \\$2 +. ds $HDRFTR_CENTER_FAM \\$2 +. ds $HDRFTR_RIGHT_FAM \\$2 +. \} +. if '\\*[ELEMENT]'HDRFTR_COLOR' \{\ +. nr #HDRFTR 1 +. nr #HDRFTR_COLOR 1 +. ds $HDRFTR_COLOR \\$2 +. \} +. if '\\*[ELEMENT]'HDRFTR_SIZE_CHANGE' \{\ +. nr #HDRFTR 1 +. ds $HDRFTR_SIZE_CHANGE \\$2 +. \} +. if '\\*[PARAM]'SIZE_CHANGE' \{\ +. nr #HDRFTR 1 +. if '\\*[hdrftr-pos-element]'L' \ +. ds $HDRFTR_LEFT_SIZE_CHANGE \\$2 +. if '\\*[hdrftr-pos-element]'C' \ +. ds $HDRFTR_CENTER_SIZE_CHANGE \\$2 +. if '\\*[hdrftr-pos-element]'R' \ +. ds $HDRFTR_RIGHT_SIZE_CHANGE \\$2 +. \} +. if !r #HDRFTR \{\ +. substring ELEMENT 7 \\n[substr-index] +. if '\\*[ELEMENT]'_LEFT' .ds ELEMENT _STRING_ +. \} +. \} +. if '\\$1'LN_' .rm ELEMENT +. if '\\$1'PAGE_NUM_' .rm ELEMENT +. if !r #HDRFTR \{\ +. ds $\\$1\\*[ELEMENT]\\*[PARAM] \\$2 +. nr #\\$1\\*[ELEMENT]\\*[PARAM] 1 +. \} +. rr #HDRFTR +. rm hdrftr-pos-element +. rr substr-index +. rm FROM_ALIAS +. rm ELEMENT +.END +\# +.MAC TITLE_LEAD END +. ds $TYPE \\$0 +. substring $TYPE 0 2 +. if '\\*[$TYPE]'DOC' .nr DOC_ 1 +. ds $TYPE \\$0 +. ie '\\*[$TYPE]'MISC_LEAD' .ds $TYPE COVER_MISC +. el .substring $TYPE -6 0 +. ds $\\*[$TYPE]_LEAD \\$1 +. nr #\\*[$TYPE]_LEAD 1 +. rm $TYPE +.END +\# +\# The _STYLE macro, called by various aliases, allows grouping +\# style parameters for most document elements in a single macro +\# using 'KEYWORD value' pairs. +\# +.MAC _STYLE END +. SILENT \" Some of the invoked macros cause unwanted breaks +. ds $STYLE_TYPE \\$0 +. substring $STYLE_TYPE 0 -7 +. ds $HDR_FTR \\*[$STYLE_TYPE] +. length #HDR_FTR_STRING $HDR_FTR +. if \\n[#HDR_FTR_STRING]<=5 .substring $HDR_FTR 0 5 \" HEADER or FOOTER +. if '\\*[$HDR_FTR]'HEADER' .ds $HDR_FTR HEADER +. if '\\*[$HDR_FTR]'FOOTER' .ds $HDR_FTR FOOTER +. ds $POS \\$0 +. substring $POS 7 7 +. if '\\*[$POS]'L' .ds $POS LEFT +. if '\\*[$POS]'C' .ds $POS CENTER +. if '\\*[$POS]'R' .ds $POS RIGHT +. if '\\*[$STYLE_TYPE]'\\*[$HDR_FTR]_\\*[$POS]' \{\ +. ds $\\*[$HDR_FTR]_\\*[$POS] \\*[$HDR_FTR]_\\*[$POS] +. ds $STYLE_TYPE HDRFTR_\\*[$POS] +. \} +. if '\\*[$STYLE_TYPE]'ENDNOTES_HEADER' \ +. ds $BIB-EN-TOC EN_STRING +. if '\\*[$STYLE_TYPE]'ENDNOTE_STRING' \ +. ds $BIB-EN-TOC EN_STRING +. if '\\*[$STYLE_TYPE]'BIBLIOGRAPHY_HEADER' \ +. ds $BIB-EN-TOC BIB_STRING +. if '\\*[$STYLE_TYPE]'BIBLIOGRAPHY_STRING' \ +. ds $BIB-EN-TOC BIB_STRING +. if '\\*[$STYLE_TYPE]'TOC_HEADER' \ +. ds $BIB-EN-TOC TOC_STRING +. if '\\*[$STYLE_TYPE]'PAGENUMBER' \ +. ds $STYLE_TYPE PAGENUM +. nr #LOOP 0 1 +. nr #STYLE_PARAMS \\n[#NUM_ARGS] +. while \\n+[#LOOP]<=\\n[#STYLE_PARAMS] \{\ +. if '\\$1'FAMILY' \{\ +. shift +. \\*[$STYLE_TYPE]_FAMILY \\$1 +. shift +. \} +. if '\\$1'FONT' \{\ +. shift +. \\*[$STYLE_TYPE]_FONT \\$1 +. shift +. \} +. if '\\$1'SIZE' \{\ +. shift +. \\*[$STYLE_TYPE]_SIZE \\$1 +. shift +. \} +. if '\\$1'COLOR' \{\ +. shift +. \\*[$STYLE_TYPE]_COLOR \\$1 +. shift +. \} +. if '\\$1'CAPS' \{\ +. if \\n[#\\*[$STYLE_TYPE]_SMALLCAPS] \{\ +. tm1 \ +"[mom]: '\\*[$STYLE_TYPE]_STYLE' contains CAPS and SMALLCAPS. \ +CAPS takes precedence. +. rr #\\*[$STYLE_TYPE]_SMALLCAPS +. \} +. \\*[$STYLE_TYPE]_CAPS +. if d $\\*[$HDR_FTR]_LEFT .HEADER_LEFT_CAPS +. if d $\\*[$HDR_FTR]_CENTER .HEADER_CENTER_CAPS +. if d $\\*[$HDR_FTR]_CENTRE .HEADER_CENTER_CAPS +. if d $\\*[$HDR_FTR]_RIGHT .HEADER_RIGHT_CAPS +. shift +. \} +. if '\\$1'NO_CAPS' \{\ +. nr #\\*[$STYLE_TYPE]_CAPS 0 +. if !'\\*[$BIB-EN-TOC]'' \ +. rr #\\*[$BIB-EN-TOC]_CAPS +. shift +. \} +. if '\\$1'SMALLCAPS' \{\ +. if \\n[#\\*[$STYLE_TYPE]_CAPS] \{\ +. tm1 \ +"[mom]: '\\*[$STYLE_TYPE]_STYLE' contains CAPS and SMALLCAPS. \ +SMALLCAPS takes precedence. +. rr #\\*[$STYLE_TYPE]_CAPS +. \} +. \\*[$STYLE_TYPE]_SMALLCAPS +. shift +. \} +. if '\\$1'NO_SMALLCAPS' \{\ +. rr #\\*[$STYLE_TYPE]_SMALLCAPS +. if !'\\*[$BIB-EN-TOC]'' \ +. rr #\\*[$BIB-EN-TOC]_SMALLCAPS +. shift +. \} +. if '\\$1'LEAD' \{\ +. shift +. \\*[$STYLE_TYPE]_LEAD \\$1 +. shift +. \} +. if '\\$1'AUTOLEAD' \{\ +. shift +. \\*[$STYLE_TYPE]_AUTOLEAD \\$1 +. shift +. \} +. if '\\$1'SPACE' \{\ +. shift +. \\*[$STYLE_TYPE]_SPACE \\$1 +. shift +. \} +. if '\\$1'QUAD' \{\ +. shift +. ie '\\*[$STYLE_TYPE]'QUOTE' \{\ +. ds $QUAD_TYPE \\$1 +. substring $QUAD_TYPE 0 0 +. if '\\*[$QUAD_TYPE]'L' .QUOTE_LEFT +. if '\\*[$QUAD_TYPE]'C' .QUOTE_CENTER +. if '\\*[$QUAD_TYPE]'R' .QUOTE_RIGHT +. \} +. el .\\*[$STYLE_TYPE]_QUAD \\$1 +. shift +. \} +. if '\\$1'INDENT' \{\ +. shift +. \\*[$STYLE_TYPE]_INDENT \\$1 +. shift +. \} +.\" UNDERLINE and UNDERSCORE are identical but we can't use : or & +.\" in string comparisons. +. if '\\$1'UNDERLINE' \{\ +. shift +. if '\\$1'DOUBLE' \{\ +. as ul-args \\$1 \" +. shift +. \} +. nr #COUNT 0 1 +. while \\n+[#COUNT]<=3 \{\ +. if \B'\\$1' \{\ +. as ul-args \\$1 \" +. shift +. \} +. \} +. \\*[$STYLE_TYPE]_UNDERSCORE \\*[ul-args] +. \} +. if '\\$1'UNDERSCORE' \{\ +. shift +. if '\\$1'DOUBLE' \{\ +. as ul-args \\$1 \" +. shift +. \} +. nr #COUNT 0 1 +. while \\n+[#COUNT]<=3 \{\ +. if \B'\\$1' \{\ +. as ul-args \\$1 \" +. shift +. \} +. \} +. \\*[$STYLE_TYPE]_UNDERSCORE \\*[ul-args] +. \} +. if '\\$1'NO_UNDERSCORE' \{\ +. rr #\\*[$STYLE_TYPE]_UNDERLINE +. if !'\\*[$BIB-EN-TOC]'' \ +. rr #\\*[$BIB-EN-TOC]_UNDERLINE +. shift +. \} +. if '\\$1'NO_UNDERLINE' \{\ +. rr #\\*[$STYLE_TYPE]_UNDERLINE +. if !'\\*[$BIB-EN-TOC]'' \ +. rr #\\*[$BIB-EN-TOC]_UNDERLINE +. shift +. \} +. if '\\$1'V_ADJUST' \{\ +. shift +. COPYRIGHT_V_ADJUST \\$1 +. shift +. \} +. \} +. rm $STYLE_TYPE +. rm $HDR_FTR +. rm $POS +. rm $HEADER_LEFT +. rm $HEADER_CENTER +. rm $HEADER_RIGHT +. rm $BIB-EN-TOC +. rm ul-args +. SILENT off +.END +. +.ds STYLE_TYPE_1 ATTRIBUTE +.ds STYLE_TYPE_2 AUTHOR +.ds STYLE_TYPE_3 BIBLIOGRAPHY_HEADER +.ds STYLE_TYPE_4 BIBLIOGRAPHY_STRING +.ds STYLE_TYPE_5 BLOCKQUOTE +.ds STYLE_TYPE_6 CHAPTER +.ds STYLE_TYPE_7 CHAPTER_TITLE +.ds STYLE_TYPE_8 CODE +.ds STYLE_TYPE_9 COPYRIGHT +.ds STYLE_TYPE_10 COVER +.ds STYLE_TYPE_11 COVERTITLE +.ds STYLE_TYPE_12 DOC_COVERTITLE +.ds STYLE_TYPE_13 DOCHEADER +.ds STYLE_TYPE_14 DOCTITLE +.ds STYLE_TYPE_15 DOCTYPE +.ds STYLE_TYPE_16 ENDNOTE_TITLE +.ds STYLE_TYPE_17 ENDNOTES_HEADER +.ds STYLE_TYPE_18 ENDNOTE_STRING +.ds STYLE_TYPE_19 EPIGRAPH +.ds STYLE_TYPE_20 FINIS +.ds STYLE_TYPE_21 FOOTER_LEFT +.ds STYLE_TYPE_22 FOOTER_CENTER +.ds STYLE_TYPE_23 FOOTER_CENTRE +.ds STYLE_TYPE_24 FOOTER_RIGHT +.ds STYLE_TYPE_25 FOOTNOTE +.ds STYLE_TYPE_26 HEADER_LEFT +.ds STYLE_TYPE_27 HEADER_CENTER +.ds STYLE_TYPE_28 HEADER_CENTRE +.ds STYLE_TYPE_29 HEADER_RIGHT +.ds STYLE_TYPE_30 LEAD +.ds STYLE_TYPE_31 LINENUMBER +.ds STYLE_TYPE_32 MISC +.ds STYLE_TYPE_33 QUOTE +.ds STYLE_TYPE_34 PAGENUMBER +.ds STYLE_TYPE_35 SUBTITLE +.ds STYLE_TYPE_36 TITLE +.ds STYLE_TYPE_37 TOC_HEADER +. +.nr #LOOP 0 1 +.while \n+[#LOOP]<=37 \{\ +. ALIAS \*[STYLE_TYPE_\n[#LOOP]]_STYLE _STYLE +. ALIAS COVER_\*[STYLE_TYPE_\n[#LOOP]]_STYLE _STYLE +. ALIAS DOC_COVER_\*[STYLE_TYPE_\n[#LOOP]]_STYLE _STYLE +.\} +\# +\# UNDERLINE CONTROL +\# ----------------- +\# *Arguments: +\# [ DOUBLE ] [ <underline weight> [<underline gap>] ] | <none> | <anything> +\# *Function: +\# Toggles underlining of the element indicated by the calling alias +\# on or off. Uses #<element>_UNDERLINE_WEIGHT to set the weight, +\# and defines string $<element>_UNDERLINE_GAP. +\# +.MAC _UNDERLINE END +. ds $GET_TITLE_TYPE \\$0 +. substring $GET_TITLE_TYPE -2 +. ie '\\*[$GET_TITLE_TYPE]'NE' \{\ +.\" Called as _UNDERLINE +. ds $GET_TITLE_TYPE \\$0 +. substring $GET_TITLE_TYPE 0 -10 +. ds $TITLE_TYPE \\*[$GET_TITLE_TYPE] +. \} +. el \{\ +.\" Called as _UNDERSCORE +. ds $GET_TITLE_TYPE \\$0 +. substring $GET_TITLE_TYPE 0 -11 +. ds $TITLE_TYPE \\*[$GET_TITLE_TYPE] +. \} +. ds $GET_TITLE_TYPE \\$0 +. substring $GET_TITLE_TYPE 0 2 +. if '\\*[$GET_TITLE_TYPE]'BIB' .ds $TITLE_TYPE BIB_STRING_ +. if '\\*[$GET_TITLE_TYPE]'SUB' .ds $TITLE_TYPE SUBTITLE_ +. ds $GET_TITLE_TYPE \\$0 +. substring $GET_TITLE_TYPE 0 7 +. if '\\*[$GET_TITLE_TYPE]'ENDNOTES' .ds $TITLE_TYPE EN_STRING_ +. ds $GET_TITLE_TYPE \\$0 +. substring $GET_TITLE_TYPE 0 10 +. if '\\*[$GET_TITLE_TYPE]'ENDNOTE_STR' .ds $TITLE_TYPE EN_STRING_ +. if '\\*[$GET_TITLE_TYPE]'ENDNOTE_TIT' .ds $TITLE_TYPE EN_TITLE_ +. ie '\\$1'' .nr #\\*[$TITLE_TYPE]UNDERLINE 1 +. el \{\ +. ie \\n[#NUM_ARGS]=1 \{\ +. ie \B'\\$1' \{\ +. if !\\n[#PRINT_STYLE]=1 \{\ +. \\*[$TITLE_TYPE]UNDERLINE_WEIGHT \\$1 +. nr #\\*[$TITLE_TYPE]UNDERLINE 1 +. \} +. \} +. el \{\ +. ie '\\$1'DOUBLE' .nr #\\*[$TITLE_TYPE]UNDERLINE 2 +. el .nr #\\*[$TITLE_TYPE]UNDERLINE 0 +. \} +. \} +. el \{\ +. if !\\n[#PRINT_STYLE]=1 \{\ +. nr #\\*[$TITLE_TYPE]UNDERLINE 1 +. if '\\$1'DOUBLE' \{\ +. nr #\\*[$TITLE_TYPE]UNDERLINE 2 +. shift +. \} +. \\*[$TITLE_TYPE]UNDERLINE_WEIGHT \\$1 +. if !'\\$2'' \ +. ds $\\*[$TITLE_TYPE]UNDERLINE_GAP \\$2 +. if !'\\$3'' \ +. ds $\\*[$TITLE_TYPE]RULE_GAP \\$3 +. \} +. \} +. \} +. rm $TITLE_TYPE +.END +. +.ALIAS ENDNOTE_STRING_UNDERLINE _UNDERLINE +.ALIAS ENDNOTE_STRING_UNDERSCORE _UNDERLINE +\# +\# DEFAULTS +\# -------- +\# *Arguments: +\# <none> +\# *Function: +\# Sets up defaults if no values are entered prior to START. +\# *Notes: +\# The defaults for $CHAPTER_STRING, $DRAFT_STRING, and +\# $REVISION_STRING are in the COPYSTYLE macro. +\# +.MAC DEFAULTS END +. if !\\n[#DOC_TYPE]=5 \{\ +. ie !d $PAPER \{\ +. PAGEWIDTH \\n[#PAGE_WIDTH]u +. PAGELENGTH \\n[.p]u +. \} +. el .PAPER \\*[$PAPER] +. \} +. if !\\n[#DOC_TYPE] .DOCTYPE DEFAULT +. if !r #CH_NUM .nr #CH_NUM 1 +. ie \\n[#PAGENUM_STYLE_SET] .PAGENUM_STYLE \\*[$PAGENUM_STYLE] +. el \ +. if !\\n[#COPY_STYLE]=1 .PAGENUM_STYLE DIGIT +. if !\\n[#COPY_STYLE] .COPYSTYLE FINAL +. if \\n[#DRAFT_WITH_PAGENUM] .COPYSTYLE \\*[$COPY_STYLE] +. if \\n[#DOC_TYPE]=4 \{\ +. if !\\n[#USER_SET_L_LENGTH] \{\ +. R_MARGIN \\n[#R_MARGIN]u +. rr #USER_SET_L_LENGTH +. \} +. if \\n[#PRINT_STYLE]=1 .PRINTSTYLE TYPEWRITE SINGLESPACE +. \} +. if \\n[#COPY_STYLE]=1 \{\ +. COPYSTYLE DRAFT +. PAGENUMBER 1 +. \} +. if !r #DOC_HEADER .DOCHEADER +. if !r #HEADERS_ON .HEADERS +. if !r #PAGINATE .PAGINATE +. if !r #HEADER_MARGIN .HEADER_MARGIN 4P+6p +. if !r #HEADER_GAP .HEADER_GAP 3P +. if \\n[#FOOTERS_ON] \{\ +. HEADERS OFF +. ie \\n[#PAGINATE] \ +. if \\n[#PAGE_NUM_POS_SET]=0 .PAGENUM_POS TOP CENTER +. el \ +. if !\\n[#T_MARGIN] .T_MARGIN 6P +. \} +. if !\\n[#HEADERS_ON] \{\ +. if !\\n[#FOOTERS_ON] \{\ +. ie \\n[#PAGE_NUM_V_POS]=1 \{\ +. HEADER_MARGIN \\n[#HEADER_MARGIN] +. HEADER_GAP \\n[#HEADER_GAP] +. \} +. el .if !r #T_MARGIN .T_MARGIN 6P +. \} +. \} +. if !r #T_MARGIN \ +. T_MARGIN \\n[#HEADER_MARGIN]+\\n[#HEADER_GAP] +. if !r #DOCHEADER_ADVANCE \ +. nr #DOCHEADER_ADVANCE \\n[#T_MARGIN] +. if !r #FOOTER_MARGIN .FOOTER_MARGIN 3P +. if !r #FOOTER_GAP .FOOTER_GAP 3P +. if !r #B_MARGIN \ +. B_MARGIN \\n[#FOOTER_MARGIN]u+\\n[#FOOTER_GAP]u +. if !\\n[#HEADER_RULE_GAP] .HEADER_RULE_GAP 4p +. if !\\n[#FOOTER_RULE_GAP] .FOOTER_RULE_GAP 4p +. if !r #HDRFTR_RULE .HDRFTR_RULE +. if !r #PAGE_NUM_SET .PAGENUMBER 1 +.\" Read in number registers and strings for type parameters +. nr #DOC_L_MARGIN \\n[#L_MARGIN] +. nr #DOC_L_LENGTH \\n[#L_LENGTH] +. nr #DOC_R_MARGIN \\n[#PAGE_WIDTH]-(\\n[#DOC_L_MARGIN]+\\n[#L_LENGTH]) +. ie !'\\*[$SAVED_DOC_FAM]'' \{\ +. ds $DOC_FAM \\*[$SAVED_DOC_FAM] +. rm $SAVED_DOC_FAM +. \} +. el .ds $DOC_FAM \\*[$FAMILY] +. ie !r #DOC_PT_SIZE .nr #DOC_PT_SIZE \\n[#PT_SIZE] +. el \ +. if !\\n[#DOC_PT_SIZE]=\\n[#PT_SIZE] \ +. nr #DOC_PT_SIZE \\n[#PT_SIZE] +. if \\n[#TOC] .nr #DOC_PT_SIZE \\n[#TOC_PS] +. if \\n[#ENDNOTES] .nr #DOC_PT_SIZE \\n[#EN_PS] +. if \\n[#BIBLIOGRAPHY] .nr #DOC_PT_SIZE \\n[#BIB_PS] +. if \ +(\\n[#TOC]=0)&\ +(\\n[#LIST_OF_FIGURES]=0)&\ +(\\n[#LIST_OF_TABLES]=0)&\ +(\\n[#LIST_OF_EQUATIONS]=0) \ +. nr #DOC_LEAD \\n[.v] +. nr #DOC@LEAD \\n[#DOC_LEAD] +. if \\n[#AUTO_LEAD] .nr #DOC_AUTOLEAD \\n[#AUTOLEAD_VALUE] +.\" #SAVED_DOC_LEAD is set in COLLATE +. if \\n[#SAVED_DOC_LEAD] \{\ +. if \ +(\\n[#TOC]=0)&\ +(\\n[#LIST_OF_FIGURES]=0)&\ +(\\n[#LIST_OF_TABLES]=0)&\ +(\\n[#LIST_OF_EQUATIONS]=0) \{\ +. ie !\\n[#DOC_LEAD]=\\n[#SAVED_DOC_LEAD] .nr #RERUN_TRAPS 1 +. el .nr #SKIP_TRAPS 1 +. \} +. \} +. ie \\n[#ADJ_DOC_LEAD]=1 . +. el \ +. if !\\n[#DOC_LEAD_ADJUST_OFF] .DOC_LEAD_ADJUST +. ie d$RESTORE_DOC_QUAD \{\ +. ds $DOC_QUAD \\*[$RESTORE_DOC_QUAD] +. rm $RESTORE_DOC_QUAD +. \} +. el .ds $DOC_QUAD \\*[$QUAD_VALUE] +. if '\\*[$FONT]'' .FT R +. if '\\*[$PP_FT]'' .ds $PP_FT \\*[$FONT] +. FT \\*[$PP_FT] +.\" Counters +. nr #PP 0 +. nr #FN_NUMBER 0 1 +. nr #EN_NUMBER 0 1 +. nr #FN_COUNT_FOR_COLS 0 1 +. nr #DONE_ONCE 0 1 +.\" Enable shimming if user hasn't turned it off +. if \\n[#NO_SHIM]=2 \{\ +. rr #NO_SHIM +. nr #NO_FLEX 1 +. \} +.\" General style defaults for both PRINTSTYLEs +. nr #PP_STYLE 1 +. PARA_INDENT \\n[#PP_INDENT]u +. if !d $HDRFTR_FAM .ds $HDRFTR_FAM \\*[$DOC_FAM] +. if !d $HDRFTR_SIZE_CHANGE .HDRFTR_SIZE +0 +. if !d $PAGE_NUM_FAM .PAGENUM_FAMILY \\*[$DOC_FAM] +. if !d $PAGE_NUM_FT .PAGENUM_FONT R +. if !d $PAGE_NUM_SIZE_CHANGE .PAGENUM_SIZE +0 +. if !r #PAGE_NUM_POS_SET .PAGENUM_POS BOTTOM CENTER +. ie \\n[#PAGE_NUM_HYPHENS_SET] \{\ +. if \\n[#PAGE_NUM_HYPHENS]=0 .PAGENUM_HYPHENS OFF +. if \\n[#PAGE_NUM_HYPHENS]=1 .PAGENUM_HYPHENS +. \} +. el \ +. if !d$PAGENUM_STRING .PAGENUM_HYPHENS +. if !d $FN_FAM .FOOTNOTE_FAMILY \\*[$DOC_FAM] +. if !d $FN_FT .FOOTNOTE_FONT R +. if !d $FN_QUAD .FOOTNOTE_QUAD \\*[$DOC_QUAD] +. if !r #FN_RULE .FOOTNOTE_RULE +. if !r #FN_MARKERS .FOOTNOTE_MARKERS +. if \\n[#FN_MARKERS]=1 \{\ +. if \\n[#FN_REF]=1 \ +. if !\\n[#FN_MARKER_STYLE] .FOOTNOTE_MARKER_STYLE NUMBER +. if !\\n[#FN_MARKER_STYLE] .FOOTNOTE_MARKER_STYLE STAR +. \} +. if !r #EN_MARKER_STYLE .ENDNOTE_MARKER_STYLE SUPERSCRIPT +. if !d $EN_PN_STYLE .ENDNOTES_PAGENUM_STYLE digit +. if !d $EN_FAM .ENDNOTE_FAMILY \\*[$DOC_FAM] +. if !d $EN_FT .ENDNOTE_FONT R +. if !d $EN_QUAD \{\ +. ds quad-check \\*[$DOC_QUAD] +. substring quad-check 0 0 +. if '\\*[$DOC_QUAD]'C' .nr quad-check 1 +. if '\\*[$DOC_QUAD]'R' .nr quad-check 1 +. ie \\n[quad-check] .ENDNOTE_QUAD J +. el .ENDNOTE_QUAD \\*[$DOC_QUAD] +. rr quad-check +. \} +. if !d $EN_STRING .ENDNOTES_HEADER_STRING "Endnotes" +. if !d $EN_STRING_FAM .ENDNOTES_HEADER_FAMILY \\*[$EN_FAM] +. if !d $EN_STRING_QUAD .ENDNOTES_HEADER_QUAD CENTER +. if !d $EN_TITLE \{\ +. ie \\n[#DOC_TYPE]=2 \{\ +. ie !'\\*[$CHAPTER_TITLE_1]'' \{\ +. ie '\\*[$CHAPTER]'' .ENDNOTE_TITLE "\\*[$CHAPTER_TITLE]" +. el .ENDNOTE_TITLE \ +"\\*[$CHAPTER_STRING] \\*[$CHAPTER]: \\*[$CHAPTER_TITLE]" +. \} +. el \{\ +. ie '\\*[$CHAPTER]'' .ENDNOTE_TITLE "\\*[$CHAPTER_STRING]" +. el .ENDNOTE_TITLE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]" +. \} +. \} +. el .ENDNOTE_TITLE "\\*[$TITLE]" +. \} +. if !d $EN_TITLE_FAM .ENDNOTE_TITLE_FAMILY \\*[$EN_FAM] +. if !d $EN_TITLE_QUAD .ENDNOTE_TITLE_QUAD LEFT +. if !d $EN_NUMBER_FAM .ENDNOTE_NUMBER_FAMILY \\*[$EN_FAM] +. if !d $EN_LN_FAM .ENDNOTE_LINENUMBER_FAMILY \\*[$EN_FAM] +. if !r #EN_NUMBERS_ALIGN_LEFT \{\ +. if !r #EN_NUMBERS_ALIGN_RIGHT \{\ +. ie !\\n[#EN_MARKER_STYLE]=2 .ENDNOTE_NUMBERS_ALIGN RIGHT 2 +. el .ENDNOTE_NUMBERS_ALIGN RIGHT 4 +. \} +. \} +. if !r #EN_LN_GAP .ENDNOTE_LINENUMBER_GAP 1m +. if !r #EN_ALLOWS_HEADERS .ENDNOTES_ALLOWS_HEADERS +. if !d $BIB_PN_STYLE .BIBLIOGRAPHY_PAGENUM_STYLE digit +. if !d $BIB_FAM .BIBLIOGRAPHY_FAMILY \\*[$DOC_FAM] +. if !d $BIB_FT .BIBLIOGRAPHY_FONT R +. if !d $BIB_QUAD \{\ +. ds quad-check \\*[$DOC_QUAD] +. substring quad-check 0 0 +. if '\\*[$DOC_QUAD]'C' .nr quad-check 1 +. if '\\*[$DOC_QUAD]'R' .nr quad-check 1 +. ie \\n[quad-check] .BIBLIOGRAPHY_QUAD J +. el .BIBLIOGRAPHY_QUAD \\*[$DOC_QUAD] +. rr quad-check +. \} +. if !d $BIB_STRING .BIBLIOGRAPHY_STRING "Bibliography" +. if !d $BIB_STRING_FAM .BIBLIOGRAPHY_STRING_FAMILY \\*[$BIB_FAM] +. if !d $BIB_STRING_QUAD .BIBLIOGRAPHY_STRING_QUAD CENTER +. if !d $TOC_HEADER_STRING .TOC_HEADER_STRING "Contents" +. if !d $TOC_HEADER_QUAD .TOC_HEADER_QUAD LEFT +. if !d $TOC_PN_STYLE .TOC_PAGENUM_STYLE roman +. if !r #TOC_PN_PADDING .TOC_PADDING 3 +.\" Line numbering +. if !r #LN_GUTTER .nr #LN_GUTTER 2 +. if !r #Q_LN_GUTTER .nr #Q_LN_GUTTER 2 +. if !r #BQ_LN_GUTTER .nr #BQ_LN_GUTTER 2 +. if !d $LN_FAM .ds $LN_FAM \\*[$DOC_FAM] +. if !d $LN_FT .ds $LN_FT R +. if !d $LN_SIZE_CHANGE .ds $LN_SIZE_CHANGE +0 +. if !d $LN_COLOR .ds $LN_COLOR black +.\" PDF link colour +. if !\\n[PDFHREF_COLOR_SET] .PDF_LINK_COLOR 0.0 0.3 0.9 +.\" PDF frame +. if !d pdf-img:frame-weight .ds pdf-img:frame-weight .5 +. if !d pdf-img:frame-color .ds pdf-img:frame-color black +.\" Captions, labels, sources +.\" All at default doc specs except leading, which is autolead 2 +. nr label-type-counter 0 1 +. while \\n+[label-type-counter]<=5 \{\ +. if \\n[label-type-counter]=1 .ds label-type eqn +. if \\n[label-type-counter]=2 .ds label-type pdf-img +. if \\n[label-type-counter]=3 .ds label-type pic +. if \\n[label-type-counter]=4 .ds label-type tbl +. if \\n[label-type-counter]=5 .ds label-type floating +. nr spec-type-counter 0 1 +. while \\n+[spec-type-counter]<=3 \{\ +. if \\n[spec-type-counter]=1 .ds spec-type label +. if \\n[spec-type-counter]=2 .ds spec-type caption +. if \\n[spec-type-counter]=3 .ds spec-type source +. set-defaults +. set-inline-specs +. \} +. rm label-type +. rm spec-type +. \} +.\" String defaults for both PRINTSTYLEs +. ie \\n[#DOC_TYPE]=1 \{\ +. ie '\\*[$DOCTITLE]'' \{\ +. if \\n[#USER_DEF_HDRFTR_LEFT]=0 .ds $HDRFTR_LEFT \\*[$AUTHOR_1] +. if \\n[#USER_DEF_HDRFTR_RIGHT]=0 .ds $HDRFTR_RIGHT \\*[$TITLE] +. \} +. el \{\ +. if \\n[#COPY_STYLE]=1 .DRAFT_WITH_PAGENUMBER +. if \\n[#USER_DEF_HDRFTR_LEFT]=0 .ds $HDRFTR_LEFT \\*[$AUTHOR_1] +. if \\n[#USER_DEF_HDRFTR_CENTER]=0 .ds $HDRFTR_CENTER \\*[$TITLE] +. if \\n[#USER_DEF_HDRFTR_RIGHT]=0 .ds $HDRFTR_RIGHT \\*[$DOCTITLE] +. \} +. \} +. el \{\ +. if \\n[#USER_DEF_HDRFTR_LEFT]=0 .ds $HDRFTR_LEFT \\*[$AUTHOR_1] +. if \\n[#USER_DEF_HDRFTR_RIGHT]=0 .ds $HDRFTR_RIGHT \\*[$TITLE] +. \} +. if !d $ATTRIBUTE_STRING .ds $ATTRIBUTE_STRING by +. if !d $FINIS_STRING .FINIS_STRING "End" +. if !r #FINIS_STRING_CAPS .nr #FINIS_STRING_CAPS 1 +.\" Covers +. if !r #DOC_COVERS_OFF .nr #DOC_COVERS 1 +. if !r #COVERS_OFF .nr #COVERS 1 +. if !d $COVER_COPYRIGHT_QUAD .COVER_COPYRIGHT_QUAD R +. if !d $COVER_MISC_QUAD .COVER_MISC_QUAD L +. if !d $MISC_QUAD .MISC_QUAD L +. if !d $DOC_COVER_COPYRIGHT_QUAD .DOC_COVER_COPYRIGHT_QUAD R +. if !d $DOC_COVER_MISC_QUAD .DOC_COVER_MISC_QUAD L +.\" Defaults for printstyle TYPEWRITE +. if \\n[#PRINT_STYLE]=1 \{\ +. TYPEWRITER +. SS DEFAULT +. if \\n[#UNDERLINE_QUOTES]=1 .UNDERLINE_QUOTES +. if \\n[#UNDERLINE_QUOTES]=0 .UNDERLINE_QUOTES OFF +. if !\\n[#HDRFTR_PLAIN] \{\ +. if !r #HDRFTR_RIGHT_CAPS .nr #HDRFTR_RIGHT_CAPS 1 +. if \\n[#HDRFTR_RIGHT_CAPS]=0 \ +. if !d $HDRFTR_RIGHT_SIZE_CHANGE .HDRFTR_RIGHT_SIZE +0 +. \} +.\" +Doctype underlining (if NAMED) +. if !r #DOCTYPE_UNDERLINE .nr #DOCTYPE_UNDERLINE 1 +.\" +Quotes and blockquotes +. if !r #Q_OFFSET_VALUE \ +. if '\\*[$Q_OFFSET_VALUE]'' \ +. QUOTE_INDENT \\n[#PP_INDENT]u+(\\n[#PP_INDENT]u/2u) +. if !d $Q_QUAD .QUOTE_LEFT +. if !d $BQUOTE_QUAD .BLOCKQUOTE_QUAD LEFT +. if !r #BQ_OFFSET_VALUE \ +. if '\\*[$BQ_OFFSET_VALUE]'' \ +. BLOCKQUOTE_INDENT \\n[#PP_INDENT]u+(\\n[#PP_INDENT]u/2u) +.\" +Epigraphs +. if !r #EPI_OFFSET_VALUE \ +. if '\\*[$EPI_OFFSET_VALUE]'' .EPIGRAPH_INDENT 2 +.\" +Linebreaks +. if !d $LINEBREAK_CHAR .LINEBREAK_CHAR * 3 2p +.\" +Footnotes +. if !d $FN_SIZE_CHANGE .FOOTNOTE_SIZE +0 +. if !r #FN_RULE_LENGTH .FOOTNOTE_RULE_LENGTH 2i +.\" +Endnotes +. if !r #EN_PP_INDENT .ENDNOTE_PARA_INDENT \\n[#PP_INDENT] +. if !r #EN_STRING_CAPS .ENDNOTES_HEADER_CAPS +. if !r #EN_STRING_UNDERLINE .nr #EN_STRING_UNDERLINE 2 +.\" +Footnotes +. if !r #FN_RULE_ADJ .FOOTNOTE_RULE_ADJ 6p +.\" +Slant stuff +. if !r #SLANT_MEANS_SLANT \{\ +. ie \\n[#UNDERLINE_SLANT]=1 .UNDERLINE_SLANT +. el .UNDERLINE_SLANT OFF +. \} +.\" +Bibliography +. if !r #BIB_STRING_UNDERLINE .nr #BIB_STRING_UNDERLINE 2 +. if !r #BIB_STRING_CAPS .BIBLIOGRAPHY_STRING_CAPS +. \} +.\" Defaults for printstyle TYPESET +. if \\n[#PRINT_STYLE]=2 \{\ +. if !d $DOCHEADER_LEAD_ADJ .DOCHEADER_LEAD +0 +.\" +Cover +. if !d $COVER_LEAD_ADJ .COVER_LEAD +0 +. if !d $COVER_FAM .COVER_FAMILY \\*[$DOC_FAM] +.\" (title) +. if !d $COVER_TITLE_FAM \{\ +. ie !d $COVER_FAM .COVER_TITLE_FAMILY \\*[$DOC_FAM] +. el .COVER_TITLE_FAMILY \\*[$COVER_FAM] +. \} +. if !d $COVER_TITLE_FT .COVER_TITLE_FONT B +. if !d $COVER_TITLE_SIZE_CHANGE .COVER_TITLE_SIZE +3.5 +.\" (doctitle) +. if !d $COVER_DOCTITLE_FAM \{\ +. ie !d $DOC_COVER_FAM .COVER_DOCTITLE_FAMILY \\*[$DOC_FAM] +. el .COVER_DOCTITLE_FAMILY \\*[$COVER_FAM] +. \} +. if !d $COVER_DOCTITLE_FT .COVER_DOCTITLE_FONT B +. if !d $COVER_DOCTITLE_SIZE_CHANGE .COVER_DOCTITLE_SIZE +3.5 +.\" (covertitle) +. if !d $COVER_COVERTITLE_FAM \{\ +. ie !d $COVER_FAM .COVER_COVERTITLE_FAMILY \\*[$DOC_FAM] +. el .COVER_COVERTITLE_FAMILY \\*[$COVER_FAM] +. \} +. if !d $COVER_COVERTITLE_FT .COVER_COVERTITLE_FONT B +. if !d $COVER_COVERTITLE_SIZE_CHANGE .COVER_COVERTITLE_SIZE +3.5 +.\" (doc_covertitle) +. if !d $COVER_DOC_COVERTITLE_FAM \{\ +. ie !d $COVER_FAM .COVER_DOC_COVERTITLE_FAMILY \\*[$DOC_FAM] +. el .COVER_DOC_COVERTITLE_FAMILY \\*[$COVER_FAM] +. \} +. if !d $COVER_DOC_COVERTITLE_FT .COVER_DOC_COVERTITLE_FONT B +. if !d $COVER_DOC_COVERTITLE_SIZE_CHANGE .COVER_DOC_COVERTITLE_SIZE +3.5 +.\" (chapter) +. if !d $COVER_CHAPTER_FAM \{\ +. ie !d $COVER_FAM .COVER_CHAPTER_FAMILY \\*[$DOC_FAM] +. el .COVER_CHAPTER_FAMILY \\*[$COVER_FAM] +. \} +. if !d $COVER_CHAPTER_FT .COVER_CHAPTER_FONT B +. if !d $COVER_CHAPTER_SIZE_CHANGE .COVER_CHAPTER_SIZE +3.5 +.\" (chapter title) +. if !d $COVER_CHAPTER_TITLE_FAM \{\ +. ie !d $COVER_FAM .COVER_CHAPTER_TITLE_FAMILY \\*[$DOC_FAM] +. el .COVER_CHAPTER_TITLE_FAMILY \\*[$COVER_FAM] +. \} +. if !d $COVER_CHAPTER_TITLE_FT .COVER_CHAPTER_TITLE_FONT BI +. if !d $COVER_CHAPTER_TITLE_SIZE_CHANGE .COVER_CHAPTER_TITLE_SIZE +4 +.\" (subtitle) +. if !d $COVER_SUBTITLE_FAM \{\ +. ie !d $COVER_FAM .COVER_SUBTITLE_FAMILY \\*[$DOC_FAM] +. el .COVER_SUBTITLE_FAMILY \\*[$COVER_FAM] +. \} +. if !d $COVER_SUBTITLE_FT .COVER_SUBTITLE_FONT R +. if !d $COVER_SUBTITLE_SIZE_CHANGE .COVER_SUBTITLE_SIZE +0 +.\" (attribution and author[s]) +. if !d $COVER_ATTRIBUTE_FAM \{\ +. ie !d $COVER_FAM .COVER_ATTRIBUTE_FAMILY \\*[$DOC_FAM] +. el .COVER_ATTRIBUTE_FAMILY \\*[$COVER_FAM] +. \} +. if !d $COVER_ATTRIBUTE_FT .COVER_ATTRIBUTE_FONT I +. if !d $COVER_ATTRIBUTE_SIZE_CHANGE .COVER_ATTRIBUTE_SIZE +0 +. if !d $COVER_AUTHOR_FAM \{\ +. ie !d $COVER_FAM .COVER_AUTHOR_FAMILY \\*[$DOC_FAM] +. el .COVER_AUTHOR_FAMILY \\*[$COVER_FAM] +. \} +. if !d $COVER_AUTHOR_FT .COVER_AUTHOR_FONT I +. if !d $COVER_AUTHOR_SIZE_CHANGE .COVER_AUTHOR_SIZE +0 +.\" (doctype if "named") +. if !d $COVER_DOCTYPE_FAM \{\ +. ie !d $COVER_FAM .COVER_DOCTYPE_FAMILY \\*[$DOC_FAM] +. el .COVER_DOCTYPE_FAMILY \\*[$COVER_FAM] +. \} +. if !d $COVER_DOCTYPE_FT .COVER_DOCTYPE_FONT BI +. if !d $COVER_DOCTYPE_SIZE_CHANGE .COVER_DOCTYPE_SIZE +3 +.\" (copyright) +. if !d $COVER_COPYRIGHT_FAM \{\ +. ie !d $COVER_FAM .COVER_COPYRIGHT_FAMILY \\*[$DOC_FAM] +. el .COVER_COPYRIGHT_FAMILY \\*[$COVER_FAM] +. \} +. if !d $COVER_COPYRIGHT_FT .COVER_COPYRIGHT_FONT R +. if !d $COVER_COPYRIGHT_SIZE_CHANGE .COVER_COPYRIGHT_SIZE -2 +.\" (misc) +. if !d $COVER_MISC_FAM .COVER_MISC_FAMILY \\*[$DOC_FAM] +. if !d $COVER_MISC_FT .COVER_MISC_FONT R +. if !d $COVER_MISC_SIZE_CHANGE .COVER_MISC_SIZE -2 +. if !r #COVER_MISC_LEAD .COVER_MISC_LEAD 14.5 +.\" +Doc cover +. if !d $DOC_COVER_LEAD_ADJ .DOC_COVER_LEAD +0 +. if !d $DOC_COVER_FAM .DOC_COVER_FAMILY \\*[$DOC_FAM] +.\" (title) +. if !d $DOC_COVER_TITLE_FAM \{\ +. ie !d $DOC_COVER_FAM .DOC_COVER_TITLE_FAMILY \\*[$DOC_FAM] +. el .DOC_COVER_TITLE_FAMILY \\*[$DOC_COVER_FAM] +. \} +. if !d $DOC_COVER_TITLE_FT .DOC_COVER_TITLE_FONT B +. if !d $DOC_COVER_TITLE_SIZE_CHANGE .DOC_COVER_TITLE_SIZE +3.5 +.\" (doctitle) +. if !d $DOC_COVER_DOCTITLE_FAM \{\ +. ie !d $DOC_COVER_FAM .DOC_COVER_DOCTITLE_FAMILY \\*[$DOC_FAM] +. el .DOC_COVER_DOCTITLE_FAMILY \\*[$DOC_COVER_FAM] +. \} +. if !d $DOC_COVER_DOCTITLE_FT .DOC_COVER_DOCTITLE_FONT B +. if !d $DOC_COVER_DOCTITLE_SIZE_CHANGE .DOC_COVER_DOCTITLE_SIZE +3.5 +.\" (covertitle) +. if !d $DOC_COVER_COVERTITLE_FAM \{\ +. ie !d $COVER_FAM .DOC_COVER_COVERTITLE_FAMILY \\*[$DOC_FAM] +. el .DOC_COVER_COVERTITLE_FAMILY \\*[$COVER_FAM] +. \} +. if !d $DOC_COVER_COVERTITLE_FT .DOC_COVER_COVERTITLE_FONT B +. if !d $DOC_COVER_COVERTITLE_SIZE_CHANGE .DOC_COVER_COVERTITLE_SIZE +3.5 +.\" (doc_covertitle) +. if !d $DOC_COVER_DOC_COVERTITLE_FAM \{\ +. ie !d $COVER_FAM .DOC_COVER_DOC_COVERTITLE_FAMILY \\*[$DOC_FAM] +. el .DOC_COVER_DOC_COVERTITLE_FAMILY \\*[$COVER_FAM] +. \} +. if !d $DOC_COVER_DOC_COVERTITLE_FT .DOC_COVER_DOC_COVERTITLE_FONT B +. if !d $DOC_COVER_DOC_COVERTITLE_SIZE_CHANGE .DOC_COVER_DOC_COVERTITLE_SIZE +3.5 +.\" (chapter) +. if !d $DOC_COVER_CHAPTER_FAM \{\ +. ie !d $DOC_COVER_FAM .DOC_COVER_CHAPTER_FAMILY \\*[$DOC_FAM] +. el .DOC_COVER_CHAPTER_FAMILY \\*[$DOC_COVER_FAM] +. \} +. if !d $DOC_COVER_CHAPTER_FT .DOC_COVER_CHAPTER_FONT B +. if !d $DOC_COVER_CHAPTER_SIZE_CHANGE .DOC_COVER_CHAPTER_SIZE +3.5 +.\" (chapter title) +. if !d $DOC_COVER_CHAPTER_TITLE_FAM \{\ +. ie !d $DOC_COVER_FAM .DOC_COVER_CHAPTER_TITLE_FAMILY \\*[$DOC_FAM] +. el .DOC_COVER_CHAPTER_TITLE_FAMILY \\*[$DOC_COVER_FAM] +. \} +. if !d $DOC_COVER_CHAPTER_TITLE_FT .DOC_COVER_CHAPTER_TITLE_FONT BI +. if !d $DOC_COVER_CHAPTER_TITLE_SIZE_CHANGE .DOC_COVER_CHAPTER_TITLE_SIZE +4 +.\" (subtitle) +. if !d $DOC_COVER_SUBTITLE_FAM \{\ +. ie !d $DOC_COVER_FAM .DOC_COVER_SUBTITLE_FAMILY \\*[$DOC_FAM] +. el .DOC_COVER_SUBTITLE_FAMILY \\*[$DOC_COVER_FAM] +. \} +. if !d $DOC_COVER_SUBTITLE_FT .DOC_COVER_SUBTITLE_FONT R +. if !d $DOC_COVER_SUBTITLE_SIZE_CHANGE .DOC_COVER_SUBTITLE_SIZE +0 +.\" (attribution and author[s]) +. if !d $DOC_COVER_ATTRIBUTE_FAM \{\ +. ie !d $DOC_COVER_FAM .DOC_COVER_ATTRIBUTE_FAMILY \\*[$DOC_FAM] +. el .DOC_COVER_ATTRIBUTE_FAMILY \\*[$DOC_COVER_FAM] +. \} +. if !d $DOC_COVER_ATTRIBUTE_FT .DOC_COVER_ATTRIBUTE_FONT I +. if !d $DOC_COVER_ATTRIBUTE_SIZE_CHANGE .DOC_COVER_ATTRIBUTE_SIZE +0 +. if !d $DOC_COVER_AUTHOR_FAM \{\ +. ie !d $DOC_COVER_FAM .DOC_COVER_AUTHOR_FAMILY \\*[$DOC_FAM] +. el .DOC_COVER_AUTHOR_FAMILY \\*[$DOC_COVER_FAM] +. \} +. if !d $DOC_COVER_AUTHOR_FT .DOC_COVER_AUTHOR_FONT I +. if !d $DOC_COVER_AUTHOR_SIZE_CHANGE .DOC_COVER_AUTHOR_SIZE +0 +.\" (doctype if "named") +. if !d $DOC_COVER_DOCTYPE_FAM \{\ +. ie !d $DOC_COVER_FAM .DOC_COVER_DOCTYPE_FAMILY \\*[$DOC_FAM] +. el .DOC_COVER_DOCTYPE_FAMILY \\*[$DOC_COVER_FAM] +. \} +. if !d $DOC_COVER_DOCTYPE_FT .DOC_COVER_DOCTYPE_FONT BI +. if !d $DOC_COVER_DOCTYPE_SIZE_CHANGE .DOC_COVER_DOCTYPE_SIZE +3 +.\" (copyright) +. if !d $DOC_COVER_COPYRIGHT_FAM \{\ +. ie !d $DOC_COVER_FAM .DOC_COVER_COPYRIGHT_FAMILY \\*[$DOC_FAM] +. el .DOC_COVER_COPYRIGHT_FAMILY \\*[$DOC_COVER_FAM] +. \} +. if !d $DOC_COVER_COPYRIGHT_FT .DOC_COVER_COPYRIGHT_FONT R +. if !d $DOC_COVER_COPYRIGHT_SIZE_CHANGE .DOC_COVER_COPYRIGHT_SIZE -2 +.\" (misc) +. if !d $DOC_COVER_MISC_FAM .DOC_COVER_MISC_FAMILY \\*[$DOC_FAM] +. if !d $DOC_COVER_MISC_FT .DOC_COVER_MISC_FONT R +. if !d $DOC_COVER_MISC_SIZE_CHANGE .DOC_COVER_MISC_SIZE -2 +. if !r #DOC_COVER_MISC_LEAD .DOC_COVER_MISC_LEAD 14.5 +.\" +Docheader +. if !d $DOCHEADER_FAM .DOCHEADER_FAMILY \\*[$DOC_FAM] +. if !d $TITLE_FAM \{\ +. ie !d $DOCHEADER_FAM .TITLE_FAMILY \\*[$DOC_FAM] +. el .TITLE_FAMILY \\*[$DOCHEADER_FAM] +. \} +. if !d $TITLE_FT .TITLE_FONT B +.\" Title size change +. if !d $TITLE_SIZE_CHANGE \{\ +. ie \\n[#DOC_TYPE]=2 .TITLE_SIZE +4 +. el .TITLE_SIZE +3.5 +. \} +. if !d $CHAPTER_FAM \{\ +. ie !d $DOCHEADER_FAM .CHAPTER_FAMILY \\*[$DOC_FAM] +. el .CHAPTER_FAMILY \\*[$DOCHEADER_FAM] +. \} +. if !d $CHAPTER_FT .CHAPTER_FONT B +. if !d $CHAPTER_SIZE_CHANGE .CHAPTER_SIZE +4 +. if !d $CHAPTER_TITLE_FAM \{\ +. ie !d $DOCHEADER_FAM .CHAPTER_TITLE_FAMILY \\*[$DOC_FAM] +. el .CHAPTER_TITLE_FAMILY \\*[$DOCHEADER_FAM] +. \} +. if !d $CHAPTER_TITLE_FT .CHAPTER_TITLE_FONT BI +. if !d $CHAPTER_TITLE_SIZE_CHANGE .CHAPTER_TITLE_SIZE +4 +. if !d $SUBTITLE_FAM \{\ +. ie !d $DOCHEADER_FAM .SUBTITLE_FAMILY \\*[$DOC_FAM] +. el .SUBTITLE_FAMILY \\*[$DOCHEADER_FAM] +. \} +. if !d $SUBTITLE_FT .SUBTITLE_FONT R +. if !d $SUBTITLE_SIZE_CHANGE .SUBTITLE_SIZE +0 +. if !d $ATTRIBUTE_FAM \{\ +. ie !d $DOCHEADER_FAM .ATTRIBUTE_FAMILY \\*[$DOC_FAM] +. el .ATTRIBUTE_FAMILY \\*[$DOCHEADER_FAM] +. \} +. if !d $ATTRIBUTE_FT .ATTRIBUTE_FONT I +. if !d $ATTRIBUTE_SIZE_CHANGE .ATTRIBUTE_SIZE +0 +. if !d $AUTHOR_FAM \{\ +. ie !d $DOCHEADER_FAM .AUTHOR_FAMILY \\*[$DOC_FAM] +. el .AUTHOR_FAMILY \\*[$DOCHEADER_FAM] +. \} +. if !d $AUTHOR_FT .AUTHOR_FONT I +. if !d $AUTHOR_SIZE_CHANGE .AUTHOR_SIZE +0 +. if !d $DOCTYPE_FAM \{\ +. ie !d $DOCHEADER_FAM .DOCTYPE_FAMILY \\*[$DOC_FAM] +. el .DOCTYPE_FAMILY \\*[$DOCHEADER_FAM] +. \} +. if !d $DOCTYPE_FT .DOCTYPE_FONT BI +. if !d $DOCTYPE_SIZE_CHANGE .DOCTYPE_SIZE +3 +.\" +Headers and footers +. if !\\n[#HDRFTR_PLAIN] \{\ +. if !d $HDRFTR_LEFT_FAM \ +. HDRFTR_LEFT_FAMILY \\*[$DOC_FAM] +. if !d $HDRFTR_LEFT_FT \ +. HDRFTR_LEFT_FONT R +. if \\n[#HDRFTR_LEFT_CAPS] \ +. if !d $HDRFTR_LEFT_SIZE_CHANGE \ +. HDRFTR_LEFT_SIZE -2 +. if !d $HDRFTR_LEFT_SIZE_CHANGE \ +. HDRFTR_LEFT_SIZE -.5 +. if !d $HDRFTR_CENTER_FAM \ +. HDRFTR_CENTER_FAMILY \\*[$DOC_FAM] +. if !d $HDRFTR_CENTER_FT .HDRFTR_CENTER_FONT I +. if \\n[#HDRFTR_CENTER_CAPS] \ +. if !d $HDRFTR_CENTER_SIZE_CHANGE \ +. HDRFTR_CENTER_SIZE -2 +. if !d $HDRFTR_CENTER_SIZE_CHANGE \ +. HDRFTR_CENTER_SIZE -.5 +. if !d $HDRFTR_RIGHT_FAM \ +. HDRFTR_RIGHT_FAMILY \\*[$DOC_FAM] +. if !d $HDRFTR_RIGHT_FT .HDRFTR_RIGHT_FONT R +. ie !r #HDRFTR_RIGHT_CAPS \{\ +. nr #HDRFTR_RIGHT_CAPS 1 +. if !d $HDRFTR_RIGHT_SIZE_CHANGE \ +. HDRFTR_RIGHT_SIZE -2 +. \} +. el \{\ +. if \\n[#HDRFTR_RIGHT_CAPS]=0 \ +. if !d $HDRFTR_RIGHT_SIZE_CHANGE \ +. HDRFTR_RIGHT_SIZE -.5 +. \} +. ie !\\n[#HDRFTR_RIGHT_SMALLCAPS] \{\ +. if \\n[#HDRFTR_RIGHT_CAPS] \ +. if !d $HDRFTR_RIGHT_SIZE_CHANGE \ +. HDRFTR_RIGHT_SIZE -2 +. \} +. el \{\ +. nr #SKIP_CAPS_SMALLCAPS_WARNING 1 +. if \\n[#HDRFTR_RIGHT_CAPS] .HDRFTR_RIGHT_CAPS OFF +. \} +. if !d $HDRFTR_RIGHT_SIZE_CHANGE .HDRFTR_RIGHT_SIZE -.5 +. \} +.\" +Quotes +. if !d $QUOTE_FAM .QUOTE_FAMILY \\*[$DOC_FAM] +. if !d $QUOTE_FT .QUOTE_FONT I +. if !d $QUOTE_SIZE_CHANGE .QUOTE_SIZE +0 +. if !r #Q_OFFSET_VALUE \ +. if '\\*[$Q_OFFSET_VALUE]'' .QUOTE_INDENT 3 +. if !d $Q_QUAD .QUOTE_LEFT +.\" +Blockquotes +.\" Note: the leading for quotes and blockquotes is set after .DEFAULTS in START +. if !d $BQUOTE_FAM .BLOCKQUOTE_FAMILY \\*[$DOC_FAM] +. if !d $BQUOTE_FT .BLOCKQUOTE_FONT R +. if !d $BQUOTE_SIZE_CHANGE .BLOCKQUOTE_SIZE -1 +. if !d $BQUOTE_QUAD .BLOCKQUOTE_QUAD LEFT +. if !r #BQ_OFFSET_VALUE \ +. if '\\*[$BQ_OFFSET_VALUE]'' .BLOCKQUOTE_INDENT 3 +.\" +Epigraphs +. if !d $EPI_FAM .EPIGRAPH_FAMILY \\*[$DOC_FAM] +. if !d $EPI_FT .EPIGRAPH_FONT R +. if !d $EPI_SIZE_CHANGE .EPIGRAPH_SIZE -1.5 +. if !r #EPI_AUTOLEAD .EPIGRAPH_AUTOLEAD 2 +. if !d $EPI_QUAD .EPIGRAPH_QUAD \\*[$DOC_QUAD] +. if !r #EPI_OFFSET_VALUE \ +. if '\\*[$EPI_OFFSET_VALUE]'' .EPIGRAPH_INDENT 3 +.\" +Linebreaks +. if !d $LINEBREAK_CHAR .LINEBREAK_CHAR * 3 3p +. if !d $LINEBREAK_COLOR .LINEBREAK_COLOR black +.\" +Footnotes +. if !r #FN_RULE_LENGTH .FOOTNOTE_RULE_LENGTH 4P +. if !r #FN_RULE_ADJ .FOOTNOTE_RULE_ADJ 3p +. if !d $FN_SIZE_CHANGE .FOOTNOTE_SIZE -2 +. if !r #FN_AUTOLEAD .FOOTNOTE_AUTOLEAD 2 +.\" +Endnotes +. if !r #EN_PS .ENDNOTE_PT_SIZE (\\n[#DOC_PT_SIZE]u) +. if !d $EN_STRING_FT .ENDNOTES_HEADER_FONT B +. if !d $EN_STRING_SIZE_CHANGE .ENDNOTES_HEADER_SIZE +3.5 +. if !d $EN_TITLE_FT .ENDNOTE_TITLE_FONT B +. if !d $EN_TITLE_SIZE_CHANGE .ENDNOTE_TITLE_SIZE +0 +. if !d $EN_NUMBER_FT .ENDNOTE_NUMBER_FONT B +. if !d $EN_LN_FT .ENDNOTE_LINENUMBER_FONT R +. if !d $EN_NUMBER_SIZE_CHANGE .ENDNOTE_NUMBER_SIZE +0 +. if !d $EN_LN_SIZE_CHANGE .ENDNOTE_LINENUMBER_SIZE +0 +. if !r #EN_PP_INDENT .ENDNOTE_PARA_INDENT 1.5m +. if !d $EN_SPACE .ENDNOTE_SPACING 0 +.\" +Bibliography +. if !r #BIB_LIST .BIBLIOGRAPHY_TYPE PLAIN +. if !r #BIB_PS .BIBLIOGRAPHY_PT_SIZE (\\n[#DOC_PT_SIZE]u) +. if !d $BIB_STRING_FT .BIBLIOGRAPHY_STRING_FONT B +. if !d $BIB_STRING_SIZE_CHANGE .BIBLIOGRAPHY_STRING_SIZE +3.5 +.\" +Table of contents +. if !d $TOC_FAM .TOC_FAMILY \\*[$DOC_FAM] +. if !r #TOC_PS .TOC_PT_SIZE (\\n[#DOC_PT_SIZE]u) +. if '\\*[$TOC_LEAD]'' .TOC_LEAD \\n[#DOC@LEAD]u ADJUST +. if !d $TOC_HEADER_FAM .TOC_HEADER_FAMILY \\*[$TOC_FAM] +. if !d $TOC_HEADER_SIZE_CHANGE .TOC_HEADER_SIZE +3.5 +. if !d $TOC_HEADER_FT .TOC_HEADER_FONT B +. if !d $TOC_PN_FAM .TOC_PN_FAMILY \\*[$TOC_FAM] +. if !d $TOC_PN_FT .TOC_PN_FONT R +. if !d $TOC_PN_SIZE_CHANGE .TOC_PN_SIZE +0 +. if !d $TOC_TITLE_FAM .TOC_TITLE_FAMILY \\*[$TOC_FAM] +. \} +.\" +Refer support +. if !r #EN_REF .nr #FN_REF 1 +. if !d $REF_FN_INDENT \{\ +. if \\n[#PRINT_STYLE]=1 .INDENT_REFS FOOTNOTE .5i +. if \\n[#PRINT_STYLE]=2 .INDENT_REFS FOOTNOTE 2m +. \} +. if !d $REF_EN_INDENT \{\ +. if \\n[#PRINT_STYLE]=1 .INDENT_REFS ENDNOTE .5i +. if \\n[#PRINT_STYLE]=2 .INDENT_REFS ENDNOTE 2m +. \} +. if !d $REF_BIB_INDENT \{\ +. if \\n[#PRINT_STYLE]=1 .INDENT_REFS BIBLIO .5i +. if \\n[#PRINT_STYLE]=2 .INDENT_REFS BIBLIO 2m +. \} +.\" Define strings for idem entries +. if \\n[#PRINT_STYLE]=1 .char \[idem] \[hy]\[hy]\[hy] +. if \\n[#PRINT_STYLE]=2 .char \[idem] \v'-.3m'\l'3m'\v'.3m' +.\" Adjust doc leading for PRINTSTYLE TYPESET +. if \\n[#PRINT_STYLE]=2 \ +. if \\n[#ADJ_DOC_LEAD]=1 .DOC_LEAD_ADJUST +.\" This diversion is to get a value for #FN_AUTOLEAD +. di NULL +. if \\n[#AUTO_LEAD] \{\ +. nr #RESTORE_AUTO_LEAD 1 +. nr #SAVED_AUTOLEAD_VALUE \\n[#AUTOLEAD_VALUE] +. \} +. ev NULL +. if \\n[#PRINT_STYLE]=1 \{\ +. ps \\*[$TYPEWRITER_PS] +. ie \\n[#SINGLE_SPACE]=1 .vs \\n[#ORIGINAL_DOC_LEAD]u +. el .vs \\n[#ORIGINAL_DOC_LEAD]u/2u +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. ps \\n[#DOC_PT_SIZE]u\\*[$FN_SIZE_CHANGE] +. vs \\n[.ps]u+\\n[#FN_AUTOLEAD]u +. \} +. nr #FN_LEAD \\n[#LEAD] +. ev +. di +. if \\n[#RESTORE_AUTO_LEAD] \{\ +. nr #AUTO_LEAD 1 +. nr #AUTOLEAD_VALUE \\n[#SAVED_AUTOLEAD_VALUE] +. \} +. if !\\n[#SKIP_TRAPS] .TRAPS +. rr #SKIP_TRAPS +. if \\n[#REMOVE_ADJ] .DOC_LEAD \\n[#DOC_LEAD]u-\\n[#DOC_LEAD_ADJ]u +. if (\\n[#FOOTER_MARGIN]+\\n[.v]>=\\n[#B_MARGIN]) \{\ +. tm1 "[mom]: Your chosen bottom margin for running text is too close to the footer margin. +. tm1 " No footers or bottom-of-page page numbers will be printed. +. tm1 " Please reset B_MARGIN or FOOTER_MARGIN to allow enough space. +. tm1 " If no footers or bottom-of-page page numbers are required, +. tm1 " invoke .FOOTER_MARGIN 0 before .START +. nr #SKIP_FOOTER 1 +. \} +.\" Endnote, bibliography and toc leading +. nr #OK_PROCESS_LEAD 1 +. nr #RESTORE_DOC_LEAD \\n[.v] +. nr #RESTORE_B_MARGIN \\n[#B_MARGIN] +. if \\n[#PRINT_STYLE]=1 \{\ +. ie \\n[#SINGLE_SPACE] \{\ +. ENDNOTE_LEAD 12 ADJUST +. BIBLIOGRAPHY_LEAD 12 ADJUST +. \} +. el \{\ +. ie \\n[#EN_SINGLESPACE] .ENDNOTE_LEAD 12 ADJUST +. el .ENDNOTE_LEAD 24 ADJUST +. ie \\n[#BIB_SINGLESPACE] .BIBLIOGRAPHY_LEAD 12 ADJUST +. el .BIBLIOGRAPHY_LEAD 24 ADJUST +. \} +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. ie !d $EN_LEAD .ENDNOTE_LEAD \\n[#UNADJUSTED_DOC_LEAD]u ADJUST +. el .ENDNOTE_LEAD \\*[$EN_LEAD] \\*[$ADJUST_EN_LEAD] +. ie !d $BIB_LEAD .BIBLIOGRAPHY_LEAD \\n[#UNADJUSTED_DOC_LEAD]u ADJUST +. el .BIBLIOGRAPHY_LEAD \\*[$BIB_LEAD] \\*[$ADJUST_BIB_LEAD] +. ie !d $TOC_LEAD .TOC_LEAD \\n[#UNADJUSTED_DOC_LEAD]u \\*[$ADJUST_TOC_LEAD] +. el .TOC_LEAD \\*[$TOC_LEAD] \\*[$ADJUST_TOC_LEAD] +. \} +. ie !d $BIB_SPACE .BIBLIOGRAPHY_SPACING 0 +. el \{\ +. if \\n[#DEFER_BIB_SPACING]=1 \{\ +. BIBLIOGRAPHY_SPACING \\*[$BIB_SPACE] +. rr #DEFER_BIB_SPACING +. \} +. \} +. nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]u +. nr #B_MARGIN \\n[#RESTORE_B_MARGIN] +. vs \\n[#DOC_LEAD]u +. if !\\n[#PRINT_STYLE]=1 \{\ +. if \\n[#RERUN_TRAPS] \{\ +. TRAPS +. rr #RERUN_TRAPS +. \} +. \} +.\" Set default heading and toc-entry family if not done already +. nr #HD_LEVEL 0 1 \" loop step +. nr #LOOP 9 \" loop count +. while \\n+[#HD_LEVEL]<=\\n[#LOOP] \{\ +. if '\\*[$HEAD_\\n[#HD_LEVEL]_FAM]'' \ +. ds $HEAD_\\n[#HD_LEVEL]_FAM \\*[$DOC_FAM] +. if '\\*[$HEAD_\\n[#HD_LEVEL]_BASELINE_ADJ]'' \ +. ds $HEAD_\\n[#HD_LEVEL]_BASELINE_ADJ \\n[.v]/10 +. if '\\*[$TOC_HEAD_\\n[#HD_LEVEL]_FAM]'' \ +. ds $TOC_HEAD_\\n[#HD_LEVEL]_FAM \\*[$TOC_FAM] +. \} +. if '\\*[$TOC_TITLE_FAM]'' .TOC_TITLE_FAMILY \\*[$DOC_FAM] +.\" TOC heading (single, non-pagenumbered line insertion) +. if !d $TOC_HEADING_FAM .ds $TOC_HEADING_FAM \\*[$DOC_FAM] +. if !d $TOC_HEADING_FT .ds $TOC_HEADING_FT R +. if !d $TOC_HEADING_SIZE .ds $TOC_HEADING_SIZE +0 +. if !d $TOC_HEADING_COLOR .ds $TOC_HEADING_COLOR black +. if !d $TOC_HEADING_QUAD .ds $TOC_HEADING_QUAD L +. if !d $SPACE_ABOVE .ds $SPACE_ABOVE .75v +. if !d $SPACE_BENEATH .ds $SPACE_BENEATH .25v +.\" Re-run MNinit to capture strings and registers set in DEFAULTS. +. if !'\\*[$MN-arg1]'' \{\ +. MNinit \ +\\*[$MN-arg1] \\*[$MN-arg2] \ +\\*[$MN-arg3] \\*[$MN-arg4] \ +\\*[$MN-arg5] \\*[$MN-arg6] \ +\\*[$MN-arg7] \\*[$MN-arg8] \ +\\*[$MN-arg9] +. \} +. if \\n[#PRINT_STYLE]=1 .nr #IGNORE 1 +. if \\n[#AUTO_LEAD] \{\ +. rr #AUTO_LEAD +. rr #AUTOLEAD_VALUE +. \} +.END +\# +\# ================================================================= +\# +\# Macros and aliases needed for doccover, cover, and docheader in +\# START. +\# +.MAC DOC_HEADER_QUAD END +. if '\\$0'DOC_HEADER_QUAD' .ds $CALLING_MACRO DOCHEADER +. if '\\$0'COVER_H_POS' .ds $CALLING_MACRO COVER +. if '\\$0'DOC_COVER_H_POS' .ds $CALLING_MACRO DOC_COVER +. ie !'\\*[$\\*[$CALLING_MACRO]_QUAD]'' \{\ +. substring $\\*[$CALLING_MACRO]_QUAD 0 0 +. if '\\*[$\\*[$CALLING_MACRO]_QUAD]'L' .LEFT +. if '\\*[$\\*[$CALLING_MACRO]_QUAD]'C' .CENTER +. if '\\*[$\\*[$CALLING_MACRO]_QUAD]'C' .RIGHT +. \} +. el .CENTER +.END +. +.ALIAS COVER_H_POS DOC_HEADER_QUAD +.ALIAS DOC_COVER_H_POS DOC_HEADER_QUAD +\# +.MAC DO_TITLE_OR_AUTHOR END +. ie '\\$0'DO_AUTHORS' .ds $TTL_AUTH AUTHOR +. el .ds $TTL_AUTH TITLE +. if '\\*[$\\*[$PRFX]\\*[$TTL_AUTH]_1]'' \{\ +. if !'\\*[$\\*[$PRFX]DOC\\*[$TTL_AUTH]_1]'' \ +. ds $\\*[$PRFX]\\*[$TTL_AUTH]_1 "\&" +. if !'\\*[$AUTHOR_1]'' .rm $PRFX +. \} +. if !'\\*[$\\*[$PRFX]\\*[$TTL_AUTH]_1]'' \{\ +. if '\\$0'DO_SUBTITLE' \{\ +. if '\\*[$PRFX]'\\*[DOC_]COVER_SUB' \{\ +. ds $PRFX SUB +. nr #\\*[DOC_]COVER_SUB 1 +. \} +. \} +. if !\\n[#PRINT_STYLE]=1 \{\ +. if (\\n[#COVER]=1):(\\n[#DOC_COVER]=1) \ +. if !'\\*[$PRFX]'SUB' \ +. rn $PRFX $PRFX_SAVED +. fam \\*[$\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_FAM] +. ft \\*[$\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_FT] +. ps \ +\\n[#DOC_PT_SIZE]u\\*[$\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_SIZE_CHANGE] +. if '\\*[$COVER_TYPE]'' .vs \\n[#DOCHEADER_LEAD]u +. if !'\\*[$\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_LEAD]'' \{\ +. vs \\*[$\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_LEAD] +. if \\n[#DOCHEADER] .sp |\\n[#T_MARGIN]u-1v +. \} +. if \\n[#CHAPTER+TITLE]=1 .ALD \\n[.v]u/4u \" A little space before the chapter title +. if \\n[#\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_COLOR]=1 \ +. COLOR \\*[$\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_COLOR] +. if \\n[#\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_CAPS]=1 .CAPS +. if \\n[#\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_SMALLCAPS]=1 .SMALLCAPS +. if (\\n[#COVER]=1):(\\n[#DOC_COVER]=1) \ +. rn $PRFX_SAVED $PRFX +. if \\n[#\\*[DOC_]COVER_TITLE]=2 \ +. ds $PRFX DOC +. \} +. if \\n[#\\*[DOC_]COVER_SUB] \{\ +. rr #\\*[DOC_]COVER_SUB +. ds $PRFX \\*[DOC_]COVER_SUB +. ds $SAVED_COVER_TYPE \\*[$COVER_TYPE] +. rm $COVER_TYPE +. \} +. nr #ARG_NUM 0 1 +. while \\n[#\\*[$PRFX]\\*[$TTL_AUTH]_NUM]>=\\n+[#ARG_NUM] \{\ +. ie \\n[#\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_UNDERLINE] \{\ +. ds $TITLE_TYPE \\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH] +. ie \\n[#\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_UNDERLINE]=2 \{\ +. ie !\\n[#PRINT_STYLE]=1 \ +. UNDERSCORE2 \\*[$\\*[$PRFX]\\*[$TTL_AUTH]_UNDERLINE_GAP] \ +\\*[$\\*[$PRFX]\\*[$TTL_AUTH]_RULE_GAP] \ +"\\*[$\\*[$PRFX]\\*[$TTL_AUTH]_\\n[#ARG_NUM]] +. el .UNDERSCORE "\\*[$\\*[$PRFX]\\*[$TTL_AUTH]_\\n[#ARG_NUM]] +. \} +. el \{\ +. ie !\\n[#PRINT_STYLE]=1 \ +. UNDERSCORE "\\*[$\\*[$PRFX]\\*[$TTL_AUTH]_\\n[#ARG_NUM]] +. el .PRINT "\\*[$\\*[$PRFX]\\*[$TTL_AUTH]_\\n[#ARG_NUM]] +. \} +. \} +. el \{\ +. PRINT "\\*[$\\*[$PRFX]\\*[$TTL_AUTH]_\\n[#ARG_NUM]] +. \} +. if \\n[#ARG_NUM]>1 .as PDF_BM " \" +. as PDF_BM \\*[$\\*[$PRFX]\\*[$TTL_AUTH]_\\n[#ARG_NUM]] +. \} +. rm $TITLE_TYPE +. if \\n[#PRINT_STYLE]=2 .vs +. if \\n[#\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_COLOR]=1 \ +. gcolor +. SMALLCAPS off +. CAPS off +. \} +. if !'\\*[$SAVED_COVER_TYPE]'' \{\ +. ds $COVER_TYPE \\*[$SAVED_COVER_TYPE] +. rm $SAVED_COVER_TYPE +. \} +.END +. +.ALIAS DO_TITLE DO_TITLE_OR_AUTHOR +.ALIAS DO_SUBTITLE DO_TITLE_OR_AUTHOR +.ALIAS DO_AUTHORS DO_TITLE_OR_AUTHOR +\# +.MAC DO_CHAPTER END +. fam \\*[$\\*[DOC_]COVER_CHAPTER_FAM] +. ft \\*[$\\*[DOC_]COVER_CHAPTER_FT] +. ps \\n[#DOC_PT_SIZE]u\\*[$\\*[DOC_]COVER_CHAPTER_SIZE_CHANGE] +. if \\n[#\\*[DOC_]COVER_CHAPTER_COLOR]=1 \ +. COLOR \\*[$\\*[DOC_]COVER_CHAPTER_COLOR] +. if \\n[#\\*[DOC_]COVER_CHAPTER_CAPS]=1 .CAPS +. if \\n[#\\*[DOC_]COVER_CHAPTER_SMALLCAPS]=1 .SMALLCAPS +. ie \\n[#\\*[DOC_]COVER_CHAPTER_UNDERLINE] \{\ +. ds $TITLE_TYPE \\*[$COVER_TYPE]CHAPTER +. ie \\n[#\\*[DOC_]COVER_CHAPTER_UNDERLINE]=2 \ +. UNDERSCORE2 \\*[$\\*[DOC_]COVER_CHAPTER_UNDERLINE_GAP] \ +\\*[$\\*[DOC_]COVER_CHAPTER_RULE_GAP] "\\*[$CHAPTER_STRING] \\*[$CHAPTER]" +. el .UNDERSCORE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]" +. \} +. el .PRINT "\\*[$CHAPTER_STRING] \\*[$CHAPTER]" +. gcolor +. SMALLCAPS off +. CAPS off +.END +. +.ALIAS DO_TITLE DO_TITLE_OR_AUTHOR +.ALIAS DO_SUBTITLE DO_TITLE_OR_AUTHOR +.ALIAS DO_AUTHORS DO_TITLE_OR_AUTHOR +\# +.MAC DO_CHAPTER END +. fam \\*[$\\*[DOC_]COVER_CHAPTER_FAM] +. ft \\*[$\\*[DOC_]COVER_CHAPTER_FT] +. ps \\n[#DOC_PT_SIZE]u\\*[$\\*[DOC_]COVER_CHAPTER_SIZE_CHANGE] +. if \\n[#\\*[DOC_]COVER_CHAPTER_COLOR]=1 \ +. COLOR \\*[$\\*[DOC_]COVER_CHAPTER_COLOR] +. if \\n[#\\*[DOC_]COVER_CHAPTER_CAPS]=1 .CAPS +. if \\n[#\\*[DOC_]COVER_CHAPTER_SMALLCAPS]=1 .SMALLCAPS +. ie \\n[#\\*[DOC_]COVER_CHAPTER_UNDERLINE] \{\ +. ds $TITLE_TYPE \\*[$COVER_TYPE]CHAPTER +. ie \\n[#\\*[DOC_]COVER_CHAPTER_UNDERLINE]=2 \ +. UNDERSCORE2 \\*[$\\*[DOC_]COVER_CHAPTER_UNDERLINE_GAP] \ +\\*[$\\*[DOC_]COVER_CHAPTER_RULE_GAP] "\\*[$CHAPTER_STRING] \\*[$CHAPTER]" +. el .UNDERSCORE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]" +. \} +. el .PRINT "\\*[$CHAPTER_STRING] \\*[$CHAPTER]" +. gcolor +. SMALLCAPS off +. CAPS off +.END +\# +\# Spacing adjustments for (doc)cover and docheader elements +\# +.MAC _SPACE END +. ds $\\$0R \\$1 +.END +. +.ds SPACER_TYPE_1 SUBTITLE +.ds SPACER_TYPE_2 ATTRIBUTE +.ds SPACER_TYPE_3 AUTHOR +.ds SPACER_TYPE_4 CHAPTER_TITLE +.ds SPACER_TYPE_5 DOCTYPE +. +.nr #LOOP 0 1 +.while \n+[#LOOP]<=5 \{\ +. ALIAS \*[SPACER_TYPE_\n[#LOOP]]_SPACE _SPACE +. ALIAS COVER_\*[SPACER_TYPE_\n[#LOOP]]_SPACE _SPACE +. ALIAS DOC_COVER_\*[SPACER_TYPE_\n[#LOOP]]_SPACE _SPACE +.\} +\# +.MAC DEFAULT_DOCHEADER END +. nr #DOCHEADER 1 +. DOC_HEADER_QUAD +. vs \\n[#DOCHEADER_LEAD]u +. if \\n[#PRINT_STYLE]=2 \ +. if \\n[#DOCHEADER_COLOR]=1 \ +. COLOR \\*[$DOCHEADER_COLOR] +. DO_TITLE +. rr #DOCHEADER +. if !'\\*[$SUBTITLE_1]'' \{\ +. ds $PRFX SUB +. if !'\\*[$SUBTITLE_SPACER]'' .sp \\*[$SUBTITLE_SPACER] +. if \\n[#PRINT_STYLE]=2 \ +. if \\n[#DOCHEADER_COLOR]=1 \ +. COLOR \\*[$DOCHEADER_COLOR] +. DO_SUBTITLE +. rm $PRFX +. \} +. if !\\n[#NO_PRINT_AUTHOR] \{\ +. if !'\\*[$AUTHOR_1]'' \{\ +. ie \\n[#PRINT_STYLE]=1 \{\ +. TYPEWRITER +. ie \\n[#SINGLE_SPACE]=1 .vs \\n[#DOC_LEAD]u +. el .vs \\n[#DOC_LEAD]u/2u +. sp +. \} +. el .vs \\n[#DOC_LEAD]u\\*[$DOCHEADER_LEAD_ADJ] +. if d$ATTRIBUTE_STRING \{\ +. FAMILY \\*[$ATTRIBUTE_FAM] +. FT \\*[$ATTRIBUTE_FT] +. ps \ +\\n[#DOC_PT_SIZE]u\\*[$ATTRIBUTE_SIZE_CHANGE] +. if \\n[#DOCHEADER_COLOR]=1 \ +. COLOR \\*[$DOCHEADER_COLOR] +. if \\n[#ATTRIBUTE_COLOR]=1 \ +. COLOR \\*[$ATTRIBUTE_COLOR] +. if \\n[#ATTRIBUTE_CAPS]=1 .CAPS +. if !'\\*[$ATTRIBUTE_SPACER]'' \ +. sp \\*[$ATTRIBUTE_SPACER] +. ie \\n[#ATTRIBUTE_UNDERLINE] \{\ +. ds $TITLE_TYPE ATTRIBUTE +. ie \\n[#ATTRIBUTE_UNDERLINE]=2 \ +. UNDERSCORE2 \\*[$ATTRIBUTE_UNDERLINE_GAP] \ +\\*[$ATTRIBUTE_RULE_GAP] "\\*[$ATTRIBUTE_STRING]" +. el .UNDERSCORE "\\*[$ATTRIBUTE_STRING]" +. \} +. el .PRINT "\\*[$ATTRIBUTE_STRING]" +. if \\n[#ATTRIBUTE_COLOR]=1 .gcolor +. CAPS off +. \} +. if !'\\*[$AUTHOR_SPACER]'' .sp \\*[$AUTHOR_SPACER] +. if \\n[#DOCHEADER_COLOR]=1 \ +. COLOR \\*[$DOCHEADER_COLOR] +. DO_AUTHORS +. \} +. \} +. FAMILY \\*[$DOC_FAM] +. FT R +.END +\# +.MAC DEFAULT_DOCHEADER_TYPEWRITE END +. CENTER +. TYPEWRITER +. if !\\n[#SINGLE_SPACE] \{\ +. vs \\n[#DOC_LEAD]u/2u +. sp |\\n[#T_MARGIN]u-1v +. \} +. if !'\\*[$TITLE_1]'' \{\ +. ie \\n[#SINGLE_SPACE] \ +. vs \\n[#DOC_LEAD]u+(\\n[#DOC_LEAD]u/4u) +. el .vs (\\n[#DOC_LEAD]u/2u)+(\\n[#DOC_LEAD]u/4u) +. CAPS +. DO_TITLE +. CAPS OFF +. vs +. \} +. if !'\\*[$SUBTITLE]'' \{\ +. ds $PRFX SUB +. sp +. DO_SUBTITLE +. rm $PRFX +. \} +. if !\\n[#NO_PRINT_AUTHOR] \{\ +. if !'\\*[$AUTHOR_1]'' \{\ +. sp +. if d$ATTRIBUTE_STRING .PRINT "\\*[$ATTRIBUTE_STRING] +. sp +. DO_AUTHORS +. \} +. \} +.END +\# +.MAC CHAPTER_DOCHEADER END +. DOC_HEADER_QUAD +. FAMILY \\*[$CHAPTER_FAM] +. FT \\*[$CHAPTER_FT] +. ps \\n[#DOC_PT_SIZE]u\\*[$CHAPTER_SIZE_CHANGE] +. vs \\n[#DOCHEADER_LEAD]u +.\" Chapter title only +. ie '\\*[$CHAPTER]'' \{\ +. if \\n[#PRINT_STYLE]=2 \ +. if \\n[#DOCHEADER_COLOR]=1 \ +. COLOR \\*[$DOCHEADER_COLOR] +. if !'\\*[$CHAPTER_TITLE_1]'' \{\ +. ds $PRFX CHAPTER_ +. nr #DOCHEADER 1 +. DO_TITLE +. rr #DOCHEADER +. rm $PRFX +. \} +. \} +.\" Chapter string, possibly with a chapter title +. el \{\ +. if \\n[#PRINT_STYLE]=2 \{\ +. if \\n[#DOCHEADER_COLOR]=1 \ +. COLOR \\*[$DOCHEADER_COLOR] +. if \\n[#CHAPTER_COLOR]=1 \ +. COLOR \\*[$CHAPTER_COLOR] +. \} +. if \\n[#CHAPTER_CAPS]=1 .CAPS +. ie \\n[#CHAPTER_UNDERLINE] \{\ +. ds $TITLE_TYPE CHAPTER +. ie \\n[#CHAPTER_UNDERLINE]=2 \ +. UNDERSCORE2 \\*[$CHAPTER_UNDERLINE_GAP] \ +\\*[$CHAPTER_RULE_GAP] "\\*[$CHAPTER_STRING] \\*[$CHAPTER]" +. el .UNDERSCORE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]" +. \} +. el .PRINT "\\*[$CHAPTER_STRING] \\*[$CHAPTER]" +. rm $TITLE_TYPE +. if \\n[#PRINT_STYLE]=2 \ +. if \\n[#CHAPTER_COLOR]=1 .gcolor +. CAPS off +. if !'\\*[$CHAPTER_TITLE_1]'' \{\ +. ds $PRFX CHAPTER_ +. if \\n[#PRINT_STYLE]=2 \{\ +. nr #CHAPTER+TITLE 1 +. if \\n[#DOCHEADER_COLOR]=1 \ +. COLOR \\*[$DOCHEADER_COLOR] +. \} +. if !'\\*[$CHAPTER_TITLE_SPACER]'' \ +. sp \\*[$CHAPTER_TITLE_SPACER] +. DO_TITLE +. rm $PRFX +. rr #CHAPTER+TITLE +. \} +. \} +. FAMILY \\*[$DOC_FAM] +. FT R +.END +\# +.MAC CHAPTER_DOCHEADER_TYPEWRITE END +. CENTER +. TYPEWRITER +. if !\\n[#SINGLE_SPACE] \{\ +. vs \\n[#DOC_LEAD]u/2u +. sp |\\n[#T_MARGIN]u-1v +. \} +. ie '\\*[$CHAPTER]'' \{\ +. CAPS +. ie !'\\*[$CHAPTER_TITLE]'' \{\ +. vs \\n[.v]u+(\\n[.v]u/3u) +. nr #ARG_NUM 0 1 +. while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. UNDERSCORE 3p "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]" +. \} +. vs +. \} +. el \{\ +. CAPS +. UNDERSCORE 3p "\\*[$CHAPTER_STRING]" +. \} +. CAPS OFF +. RLD 1v +. \} +. el \{\ +. CAPS +. UNDERSCORE 3p "\\*[$CHAPTER_STRING] \\*[$CHAPTER] +. CAPS OFF +. if !'\\*[$CHAPTER_TITLE]'' \{\ +. sp +. nr #ARG_NUM 0 1 +. while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. PRINT "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]] +. \} +. \} +. sp -1 +. \} +. vs \\n[#DOC_LEAD]u +. if \\n[#SINGLE_SPACE] .sp 2 +.END +\# +.MAC NAMED_DOCHEADER END +. DEFAULT_DOCHEADER +. if !\\n[#NO_PRINT_DOCTYPE] \{\ +. FAMILY \\*[$DOCTYPE_FAM] +. FT \\*[$DOCTYPE_FT] +. ps \\n[#DOC_PT_SIZE]u\\*[$DOCTYPE_SIZE_CHANGE] +. vs \\n[#DOCHEADER_LEAD]u +. ALD \\n[#DOCHEADER_LEAD]u +. if \\n[#DOCHEADER_COLOR]=1 \ +. COLOR \\*[$DOCHEADER_COLOR] +. if \\n[#DOCTYPE_COLOR]=1 \ +. COLOR \\*[$DOCTYPE_COLOR] +. if \\n[#DOCTYPE_CAPS]=1 .CAPS +. if !'\\*[$DOCTYPE_SPACER]'' .sp \\*[$DOCTYPE_SPACER] +. ie \\n[#DOCTYPE_UNDERLINE] \{\ +. ds $TITLE_TYPE DOCTYPE +. ie \\n[#DOCTYPE_UNDERLINE]=2 \ +. UNDERSCORE2 \\*[$DOCTYPE_UNDERLINE_GAP] \ +\\*[$DOCTYPE_RULE_GAP] "\\*[$DOC_TYPE] +. el .UNDERSCORE "\\*[$DOC_TYPE] +. \} +. el .PRINT "\\*[$DOC_TYPE] +. gcolor +. CAPS off +. \} +. FAMILY \\*[$DOC_FAM] +. FT R +.END +\# +\# COVER PAGE +\# ---------- +\# *Arguments: +\# TITLE | DOCTITLE | CHAPTER | CHAPTER_TITLE | CHAPTER+TITLE | COVERTITLE \ +\# [ SUBTITLE AUTHOR DOCTYPE COPYRIGHT MISC BLANKPAGE PDF_OUTLINE_LABEL ] +\# *Function: +\# Toggles the number register for each cover page element +\# passed as an argument. +\# *Notes: +\# TITLE, DOCTITLE, CHAPTER, CHAPTER_TITLE or CHAPTER+TITLE must +\# be supplied. After that, users may enter as many or as few of +\# the arguments as they like. BLANKPAGE inserts a blank page +\# after the cover. +\# +\# If called as DOC_COVER, performs the same operations, but +\# applies everything to a doc cover. +\# +.MAC COVER END +. rm DOC_ +. ie '\\$0'DOC_COVER' \{\ +. nr #DOC_COVER 1 +. ds DOC_ DOC_ +. \} +. el .nr #COVER 1 +. if \\n[#NUM_ARGS]=1 \{\ +. if '\\$1'\\*[DOC_]COVERTEXT' \ +. nr #\\*[DOC_]COVERTEXT_ONLY 1 +. \} +. if \\n[#NUM_ARGS]=3 \{\ +. if '\\$1'\\*[DOC_]COVERTEXT' \ +. if '\\$2'PDF_OUTLINE_LABEL' \ +. nr #\\*[DOC_]COVERTEXT_ONLY 1 +. if '\\$1'PDF_OUTLINE_LABEL' \ +. if '\\$2'\\*[DOC_]COVERTEXT' \ +. nr #\\*[DOC_]COVERTEXT_ONLY 1 +. \} +. nr #ARG_NUM 0 1 +. nr #COVER_ITEM \\n[#NUM_ARGS] \"loop count +. while \\n+[#ARG_NUM]<=\\n[#COVER_ITEM] \{\ +. if '\\$1'DOCTITLE' \{\ +. nr #\\*[DOC_]COVER_TITLE 2 +. shift +. \} +. if '\\$1'TITLE' \{\ +. nr #\\*[DOC_]COVER_TITLE 1 +. if \\n[#FROM_\\*[DOC_]COVERTITLE] \{\ +. nr #\\*[DOC_]COVER_TITLE 7 +. rr #FROM_\\*[DOC_]COVERTITLE +. \} +. shift +. \} +. if '\\$1'CHAPTER' \{\ +. nr #\\*[DOC_]COVER_TITLE 3 +. shift +. \} +. if '\\$1'CHAPTER_TITLE' \{\ +. nr #\\*[DOC_]COVER_TITLE 4 +. shift +. \} +. if '\\$1'CHAPTER+TITLE' \{\ +. nr #\\*[DOC_]COVER_TITLE 5 +. shift +. \} +. if '\\$1'COVERTITLE' \{\ +. nr #COVERTITLE 1 +. nr #\\*[DOC_]COVER_TITLE 6 +. shift +. \} +. if '\\$1'DOC_COVERTITLE' \{\ +. nr #DOC_COVERTITLE 1 +. nr #\\*[DOC_]COVER_TITLE 7 +. shift +. \} +. if '\\$1'SUBTITLE' \{\ +. nr #\\*[DOC_]COVER_SUBTITLE 1 +. shift +. \} +. if '\\$1'AUTHOR' \{\ +. nr #\\*[DOC_]COVER_AUTHOR 1 +. shift +. \} +. if '\\$1'EDITOR' \{\ +. nr #\\*[DOC_]COVER_AUTHOR 1 +. shift +. \} +. if '\\$1'DOCTYPE' \{\ +. nr #\\*[DOC_]COVER_DOCTYPE 1 +. shift +. \} +. if '\\$1'COPYRIGHT' \{\ +. nr #\\*[DOC_]COVER_COPYRIGHT 1 +. shift +. \} +. if '\\$1'MISC' \{\ +. nr #\\*[DOC_]COVER_MISC 1 +. shift +. \} +. if '\\$1'\\*[DOC_]COVERTEXT' \{\ +. nr #\\*[DOC_]COVERTEXT 1 +. shift +. \} +. if '\\$1'\\*[DOC_]COVER_IMAGE' \{\ +. nr #\\*[DOC_]COVER_IMAGE 1 +. shift +. \} +. if '\\$1'PDF_OUTLINE_LABEL' \{\ +. shift +. ds $PDF_\\*[DOC_]COVER_LABEL \\$1 +. shift +. \} +. if '\\$1'BLANKPAGE' \{\ +. nr #\\*[DOC_]COVER_BLANKPAGE 1 +. shift +. \} +. \} +. if '\\$0'DOC_COVER' .rm DOC_ +.END +\# +\# COVER TITLE +\# ----------- +\# *Arguments: +\# <covertitle> +\# *Function: +\# Stores cover title in string(s) for output on cover pages. +\# +.MAC COVERTITLE END +. rm DOC_ +. if '\\$0'DOC_COVERTITLE' \ +. ds DOC_ DOC_ +. nr #FROM_\\*[DOC_]COVERTITLE 1 +. ie \\n[#NUM_ARGS]=0 \{\ +. nr argc 0 1 +. while \\n+[argc]<=3 \{\ +. if \\n[#\\*[DOC_]COVER_TITLE_NUM] \{\ +. nr #ITEM 0 1 +. while \\n[#\\*[DOC_]COVERTITLE_NUM]>\\n[#ITEM] \{\ +. rm $\\*[DOC_]COVERTITLE_\\n+[#ITEM] +. \} +. rr #\\*[DOC_]COVERTITLE_NUM +. rm $\\*[DOC_]COVERTITLE +. \} +. \} +. \} +. el \{\ +. nr #\\*[DOC_]COVERTITLE_NUM 0 1 +. while \\n[#NUM_ARGS]>\\n[#\\*[DOC_]COVERTITLE_NUM] \{\ +. ds \ +$\\*[DOC_]COVERTITLE_\\n+[#\\*[DOC_]COVERTITLE_NUM] \\$\\n[#\\*[DOC_]COVERTITLE_NUM] +. nr #\\*[DOC_]COVERTITLE_NUM \\n[#\\*[DOC_]COVERTITLE_NUM] +. \} +. ds $\\*[DOC_]COVERTITLE \\$* +. \} +.END +\# +.MAC COVER_ATTRIBUTE_STRING END +. if '\\$0'DOC_COVER_ATTRIBUTE_STRING' \ +. ds DOC_ DOC_ +. ds $\\*[DOC_]COVER_ATTRIBUTE_STRING \\$1 +. rm DOC_ +.END +. +.ALIAS DOC_COVER_ATTRIBUTE_STRING COVER_ATTRIBUTE_STRING +\# +\# COVER TEXT +\# ---------- +\# *Arguments: +\# [ START <vertical pos> ] | <anything> +\# *Function: +\# With no arg, begins a diversion holding the cover text for +\# output on the cover page. With START <pos>, sets a vertical +\# starting position relative to the top edge of the page. With +\# any other arg, ends the diversion. +\# *Notes: +\# Aliased as DOC_COVERTEXT. +\# +\# If no other items assigned to cover pages, starts 1/3 of the +\# way down the cover page unless START pos is given, otherwise +\# starts underneath the last of title, subtitle, author(s) or +\# doctype, preceded by a blank line. +\# +\# Does not persist. +\# +.MAC COVERTEXT END +. rm DOC_ +. if '\\$0'DOC_COVERTEXT' .ds DOC_ DOC_ +. if '\\$1'START' \{\ +. shift +. nr #\\*[DOC_]COVERTEXT_START_POS (u;\\$1) +. shift +. \} +. ie '\\$1'' \{\ +. nr #COVERTEXT_PP 1 +. di \\*[DOC_]COVER_TEXT +. ev COVER_TEXT +. evc 0 +\!. if \\\\n[#\\*[DOC_]COVERTEXT_ONLY] \ +. sp |\\\\n[#T_MARGIN]u-\\\\n[#DOC_LEAD]u +\!. ie !\\n[#\\*[DOC_]COVERTEXT_START_POS] \{\ +\!. sp |\\n[.p]u/3u-1v +\!. \} +\!. el \{\ +\!. vs 0 +\!. sp |0i +\!. vs \\\\n[#DOC_LEAD]u+\\\\*[$\\*[DOC_]COVER_LEAD_ADJ] +\!. sp |\\n[#\\*[DOC_]COVERTEXT_START_POS]u-1 +\!. \} +\!. vpt +. \} +. el \{\ +. br +\!. vpt 0 +. ev +. di +. rm $FONT +. rr #COVERTEXT_PP +. IQ CLEAR +. \} +. rm DOC_ +.END +. +.ALIAS DOC_COVERTEXT COVERTEXT +\# +\# COVER IMAGE +\# ----------- +\#*Arguments: +\# <image file> <width> <height> [ -L|-C|-R|-I <ind> Y-pos [ X-pos ] ] +\#*Function: +\# Places an image on doccovers and covers. +\#*Notes: +\# Aliased as DOC_COVER_IMAGE. +\# +\# <width> and <height> are required. With no further args, images +\# are set at 0,0 by default so that full page images fill the entire +\# printer sheet. +\# +\# Positioning args are the same as PDF_IMAGE. -L, -R, -C and -I <ind> +\# observe the left and right margins. +\# +\# Y-pos is required for all but full page images; without it, images +\# are flush with the top of the page. X-pos is only needed if the +\# user prefers to give absolute X,Y positioning. +\# +\# Note that Y-pos comes before X-pos in the args. +\# +.MAC COVER_IMAGE END +. if '\\$0'DOC_COVER_IMAGE' .ds DOC_ DOC_ +. ds \\*[DOC_]COVER_IMG_FILE \\$1 +. nr \\*[DOC_]COVER_IMG_W (z;\\$2) +. nr \\*[DOC_]COVER_IMG_H (z;\\$3) +. if !'\\$4'' \{\ +. ie !\B'\\$4' \{\ +. if '\\$4'-L' .nr \\*[DOC_]COVER_IMG_IND \ + \\n[#L_MARGIN]u +. if '\\$4'-C' .nr \\*[DOC_]COVER_IMG_IND \ + \\n[#PAGE_WIDTH]u-\\n[\\*[DOC_]COVER_IMG_W]u/2 +. if '\\$4'-R' .nr \\*[DOC_]COVER_IMG_IND \ + \\n[#L_MARGIN]+\\n[.l]u-\\n[\\*[DOC_]COVER_IMG_W]u +. if '\\$4'-I' \{\ +. nr \\*[DOC_]COVER_IMG_IND \\n[#L_MARGIN]+\\$5 +. if !'\\$6'' .nr \\*[DOC_]COVER_IMG_Y (u;\\$6) +. shift \\n[#NUM_ARGS] +. \} +. if \B'\\$5' .nr \\*[DOC_]COVER_IMG_Y (u;\\$5) +. \} +. el \{\ +. nr \\*[DOC_]COVER_IMG_Y (u;\\$4) +. if \B'\\$5' .nr \\*[DOC_]COVER_IMG_X (u;\\$5) +. \} +. \} +. rm DOC_ +.END +. +.ALIAS DOC_COVER_IMAGE COVER_IMAGE +\# +.MAC DO_COVER_IMAGE END +. ll \\n[#PAGE_WIDTH]u +. po 0 +. vs 0 +. sp |0i +. if \\n[\\*[DOC_]COVER_IMG_Y] .sp \\n[\\*[DOC_]COVER_IMG_Y]u +. if \\n[\\*[DOC_]COVER_IMG_X] .in \\n[\\*[DOC_]COVER_IMG_X]u +. if \\n[\\*[DOC_]COVER_IMG_IND] .in \\n[\\*[DOC_]COVER_IMG_IND]u +. if \\n[.u]=1 .nf +. nop \X'pdf: pdfpic \\*[\\*[DOC_]COVER_IMG_FILE] -L \ +\\n[\\*[DOC_]COVER_IMG_W]z \\n[\\*[DOC_]COVER_IMG_H]z' +. in +. vs +. po +. ll +.END +. +.ALIAS DO_DOC_COVER_IMAGE DO_COVER_IMAGE +\# +\# COVER PAGE LEADING +\# ------------------ +\# *Arguments: +\# <+|- amount by which to in/decrease leading of cover/doc cover> +\# *Function: +\# Stores user supplied lead in/decrease in string $COVER_LEAD_ADJ +\# or $DOC_COVER_LEAD_ADJ, depending on whether the macro was called +\# with an alias (DOC_COVER_LEAD). +\# *Notes: +\# A unit of measure must be supplied. Decimal fractions OK. +\# Default is +0, i.e. same as DOC_LEAD. +\# +.MAC COVER_LEAD END +. ie '\\$0'DOC_COVER_LEAD' .ds $DOC_COVER_LEAD_ADJ \\$1 +. el .ds $COVER_LEAD_ADJ \\$1 +.END +\# +\# MISC_AUTOLEAD functionality has been removed. Leading for MISCs +\# is now entered as an absolute value. The macro emits a warning. +\# +.MAC MISC_AUTOLEAD END +. ds replacement \\$0 +. substring replacement 0 -9 +. ds replacement \\*[replacement]LEAD +. ds cover-type \\$0 +. substring cover-type 0 2 +. ie '\\*[cover-type]'COV' .ds cover-type cover +. el .ds cover-type doc-cover +. tm1 "[mom]: \\$0 at line \\n[.c] of '\\n[.F]' is no longer valid. +. tm1 " Leading of \\*[cover-type] MISC items is now set with \\*[replacement], which +. tm1 " takes an absolute leading value. Please update your document. +. ab [mom]: Aborting. +.END +. +.ALIAS DOC_COVER_MISC_AUTOLEAD MISC_AUTOLEAD +.ALIAS COVER_MISC_AUTOLEAD MISC_AUTOLEAD +\# +\# COVER PAGE START POSITION +\# ------------------------- +\# *Arguments: +\# <distance from page top at which to start cover/doc cover> +\# *Function: +\# Stores user supplied lead in/decrease in #COVER_START_POS +\# or #DOC_COVER_START_POS, depending on whether the macro was +\# called by an alias (DOC_COVER_ADVANCE). +\# *Notes: +\# A unit of measure must be supplied. Decimal fractions OK. +\# If user doesn't invoke this macro, the default starting +\# position for both covers and doc covers is 1/3 of the way +\# down the page (setup in DO_COVER). +\# +.MAC COVER_ADVANCE END +. ds COVER_TYPE \\$0 +. substring COVER_TYPE 0 2 +. ie 'COVER_TYPE'DOC' .nr #DOC_COVER_START_POS (\\$1) +. el .nr #COVER_START_POS (\\$1) +.END +. +.ALIAS DOC_COVER_ADVANCE COVER_ADVANCE +.ALIAS DOC_COVER_START_POS COVER_ADVANCE +.ALIAS COVER_ADVANCE COVER_ADVANCE +.ALIAS COVER_START_POS COVER_ADVANCE +\# +\# COVERS - WHETHER TO PRINT +\# ------------------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Creates or removes registers #COVERS and #COVERS_OFF, checked for +\# in DEFAULTS (in START) prior to printing +\# +.MAC COVERS END +. ie '\\$0'DOC_COVERS' \{\ +. ie '\\$1'' \{\ +. rr #DOC_COVERS_OFF +. nr #DOC_COVERS 1 +. \} +. el \{\ +. rr #DOC_COVERS +. nr #DOC_COVERS_OFF 1 +. \} +. \} +. el \{\ +. ie '\\$1'' \{\ +. rr #COVERS_OFF +. nr #COVERS 1 +. \} +. el \{\ +. rr #COVERS +. nr #COVERS_OFF 1 +. \} +. \} +.END +\# +\# COVER_COUNTS_PAGES +\# ------------------ +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Creates or removes registers #COVERS_COUNT or #DOCCOVERS_COUNT, +\# used in END_COVER to determine whether to increment the page +\# number silently when doc covers or covers are output. +\# +.MAC COVER_COUNTS_PAGES END +. if '\\$0'DOC_COVER_COUNTS_PAGES' \{\ +. ie '\\$1'' .nr #DOCCOVERS_COUNT 1 +. el .rr #DOCCOVERS_COUNT +. return +. \} +. if '\\$0'COVER_COUNTS_PAGES' \{\ +. ie '\\$1'' .nr #COVERS_COUNT 1 +. el .rr #COVERS_COUNT +. return +. \} +.END +\# +.MAC DO_COVER END +. nr #DOING_COVER 1 +. ev COVER +. evc 0 +. vpt 0 +. if \\n[#PAGINATE]=1 \{\ +. nr #PAGINATION_WAS_ON 1 +. rr #PAGINATE +. \} +. if \\n[#HEADERS_ON]=1 \{\ +. nr #HEADERS_WERE_ON 1 +. HEADERS OFF +. \} +. if \\n[#FOOTERS_ON]=1 \{\ +. nr #FOOTERS_WERE_ON 1 +. FOOTERS OFF +. \} +. if \\n[#COLUMNS]=1 \{\ +. nr #COLUMNS_WERE_ON 1 +. rr #COLUMNS +. \} +. ds PDF_BM +. ie '\\$0'DO_DOC_COVER' \{\ +. ds DOC_ DOC_ +. nr #DOC_COVER_DONE 1 +. if '\\*[$PDF_DOC_COVER_LABEL]'' \ +. ds $PDF_DOC_COVER_LABEL Cover: +. \} +. el \ +. if '\\*[$PDF_COVER_LABEL]'' \ +. ds $PDF_COVER_LABEL Title Page: +. ds $COVER_TYPE \\*[DOC_]COVER_ +. if !r#\\*[DOC_]COVER_START_POS \ +. nr #\\*[DOC_]COVER_START_POS \\n[#PAGE_LENGTH]/3 +. if \\n[#PRINT_STYLE]=1 \ +. if !\\n[#SINGLE_SPACE]=1 .vs \\n[#DOC_LEAD]u/2u +. if \\n[#PRINT_STYLE]=2 \{\ +. vs \\n[#DOC_LEAD]u\\*[$\\*[DOC_]COVER_LEAD_ADJ] +. nr #\\*[DOC_]COVER_LEAD \\n[.v] +. \} +. if \\n[.ns] .rs +. if '\\$0'DO_COVER' \{\ +. if \\n[TOC.RELOCATE]==5 \ +. if !rTOC_BH .TOC_BEFORE_HERE +. \} +. if '\\$0'DO_DOC_COVER' \{\ +. if \\n[TOC.RELOCATE]==3 \ +. if !rTOC_BH .TOC_BEFORE_HERE +. \} +. RV_HARD_SET_MARGINS +.\" Cover image +. if \\n[#\\*[DOC_]COVER_IMAGE]=1 \{\ +. DO_\\*[DOC_]COVER_IMAGE +. rr #\\*[DOC_]COVER_IMAGE +. \} +.\" Start cover +. sp |\\n[#\\*[DOC_]COVER_START_POS]u-1v +. if !\\n[#PRINT_STYLE]=1 \ +. if \\n[#\\*[DOC_]COVER_COLOR]=1 \ +. COLOR \\*[$\\*[DOC_]COVER_COLOR] +. \\*[DOC_]COVER_H_POS +. if (\\n[#\\*[DOC_]COVER_TITLE]=1):(\\n[#\\*[DOC_]COVER_TITLE]=2) .ds DOC DOC +. fam \\*[$\\*[DOC_]COVER_\\*[DOC]TITLE_FAM] +. ft \\*[$\\*[DOC_]COVER_\\*[DOC]TITLE_FT] +. ps \\*[$\\*[DOC_]COVER_\\*[DOC]TITLE_SIZE_CHANGE] +. ie \\n[#PRINT_STYLE]=1 .TYPEWRITER +. el .vs \\n[#\\*[DOC_]COVER_LEAD]u +. nr PDFHREF.VIEW.LEADING \\n[PDFHREF.VIEW.LEADING.C] +.\" Title and/or doctitle +. if (\\n[#\\*[DOC_]COVER_TITLE]=1):(\\n[#\\*[DOC_]COVER_TITLE]=2) \{\ +. ie \\n[#PRINT_STYLE]=1 \{\ +. vs \\n[.v]u*2u +. sp -1.5 +. CAPS +. nr #ARG_NUM 0 1 +. while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. UNDERSCORE "\\*[$TITLE_\\n[#ARG_NUM]]" +. if \\n[#ARG_NUM]>1 .as PDF_BM " \" +. as PDF_BM \\*[$TITLE_\\n[#ARG_NUM]] +. \} +. CAPS OFF +. vs +. \} +. el \{\ +. DO_TITLE +. rm $PRFX +. \} +. PDF_BOOKMARK 1 \\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[PDF_BM] +. \} +.\" Chapter +. if \\n[#\\*[DOC_]COVER_TITLE]=3 \{\ +. ie \\n[#PRINT_STYLE]=1 \{\ +. CAPS +. UNDERSCORE "\\*[$CHAPTER_STRING] \\*[$CHAPTER] +. CAPS OFF +. \} +. el .DO_CHAPTER +. PDF_BOOKMARK 1 \ +\\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[$CHAPTER_STRING] \\*[$CHAPTER] +. if \\n[#\\*[DOC_]COVER_CHAPTER_CAPS]=1 .CAPS off +. \} +.\" Chapter title +. if \\n[#\\*[DOC_]COVER_TITLE]=4 \{\ +. ie \\n[#PRINT_STYLE]=1 \{\ +. CAPS +. nr #ARG_NUM 0 1 +. vs \\n[.v]u*2u +. sp -1.5 +. while \\n[#CHAPTER_TITLE_NUM]>=\\n[#ARG_NUM] \{\ +. UNDERSCORE "\\*[$CHAPTER_TITLE_\\n+[#ARG_NUM]]" +. if \\n[#ARG_NUM]>1 .as PDF_BM " \" +. as PDF_BM \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]] +. \} +. CAPS OFF +. vs +. \} +. el \{\ +. ds $PRFX CHAPTER_ +. DO_TITLE +. rm $PRFX +. \} +. PDF_BOOKMARK 1 \\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[PDF_BM] +. \} +.\" Chapter + chapter title +. if \\n[#\\*[DOC_]COVER_TITLE]=5 \{\ +. ie \\n[#PRINT_STYLE]=1 \{\ +. CAPS +. UNDERSCORE "\\*[$CHAPTER_STRING] \\*[$CHAPTER] +. CAPS OFF +. \} +. el .DO_CHAPTER +. if !'\\*[$CHAPTER_TITLE_1]'' \{\ +. ie \\n[#PRINT_STYLE]=1 \{\ +. ie \\n[#SINGLE_SPACE]=0 .vs \\n[#DOC_LEAD]u/2u +. el .vs \\n[#DOC_LEAD]u +. sp +. nr #ARG_NUM 0 1 +. while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. PRINT "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]" +. if \\n[#ARG_NUM]>1 .as PDF_BM " \" +. as PDF_BM \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]] +. \} +. if \\n[#SINGLE_SPACE]=0 .vs \\n[#DOC_LEAD]u +. \} +. el \{\ +. ds $PRFX CHAPTER_ +. if \\n[#PRINT_STYLE]=2 .nr #CHAPTER+TITLE 1 +. if !'\\*[$\\*[DOC_]COVER_CHAPTER_TITLE_SPACER]'' \ +. sp \\*[$\\*[DOC_]COVER_CHAPTER_TITLE_SPACER] +. DO_TITLE +. rr #CHAPTER+TITLE +. rm $PRFX +. \} +. \} +. PDF_BOOKMARK 1 \\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[PDF_BM] +. \} +.\" (Doc)covertitle +.\" Titles to (doc)covers that are entered with +.\" .TITLE DOC_COVER title +.\" and included in (DOC)COVER with TITLE get treated as +.\" (DOC_)COVERTITLEs, so we define the appropriate strings and +.\" registers from their (DOC_)COVER_TITLE equivalents. +.\" +. if (\\n[#\\*[DOC_]COVER_TITLE]=6):(\\n[#\\*[DOC_]COVER_TITLE]=7) \{\ +. ds $\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_FAM \ +\\*[$\\*[DOC_]COVER_TITLE_FAM] +. ds $\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_FT \ +\\*[$\\*[DOC_]COVER_TITLE_FT] +. ds $\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_COLOR \ +\\*[$\\*[DOC_]COVER_TITLE_COLOR] +. nr #\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_COLOR \ +\\n[#\\*[DOC_]COVER_TITLE_COLOR] +. nr #\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_CAPS \ +\\n[#\\*[DOC_]COVER_TITLE_CAPS] +. nr #\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_SMALLCAPS \ +\\n[#\\*[DOC_]COVER_TITLE_SMALLCAPS] +. ds $\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_LEAD \ +\\*[$\\*[DOC_]COVER_TITLE_LEAD] +. ds $\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_SIZE_CHANGE \ +\\*[$\\*[DOC_]COVER_TITLE_SIZE_CHANGE] +. nr #\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_UNDERLINE \ +\\n[#\\*[DOC_]COVER_TITLE_UNDERLINE] +. nr #\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_UNDERLINE_WEIGHT \ +\\n[#\\*[DOC_]COVER_TITLE_UNDERLINE_WEIGHT] +. nr #\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_UNDERLINE_WEIGHT_ADJ \ +\\n[#\\*[DOC_]COVER_TITLE_UNDERLINE_WEIGHT_ADJ] +. ds $\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_UNDERLINE_GAP \ +\\*[$\\*[DOC_]COVER_TITLE_UNDERLINE_GAP] +. ds $\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_RULE_GAP \ +\\*[$\\*[DOC_]COVER_TITLE_RULE_GAP] +. ie \\n[#PRINT_STYLE]=1 \{\ +. CAPS +. vs \\n[.v]u*2u +. nr #ARG_NUM 0 1 +. while \\n[#\\*[DOC_]COVERTITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. UNDERSCORE "\\*[$\\*[DOC_]COVERTITLE_\\n[#ARG_NUM]]" +. if \\n[#ARG_NUM]>1 .as PDF_BM " \" +. as PDF_BM \\*[$\\*[DOC_]COVERTITLE_\\n[#ARG_NUM]] +. \} +. vs +. CAPS OFF +. \} +. el \{\ +. ds $PRFX \\*[DOC_]COVER +. DO_TITLE +. rm $PRFX +. \} +. PDF_BOOKMARK 1 \\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[PDF_BM] +. \} +. ie !'\\*[DOC_]'' \{\ +. if !\\n[#DOC_COVER_TITLE] \ +. if '\\*[$PDF_\\*[DOC_]COVER_LABEL]'' \ +. PDF_BOOKMARK 1 Cover page +. \} +. el \{\ +. if !\\n[#COVER_TITLE] \ +. if '\\*[$PDF_\\*[DOC_]COVER_LABEL]'' \ +. PDF_BOOKMARK 1 Title page +. \} +. rr #\\*[DOC_]COVER_TITLE +.\" Subtitle +. if \\n[#\\*[DOC_]COVER_SUBTITLE]=1 \{\ +. ie \\n[#PRINT_STYLE]=1 \{\ +. if !'\\*[$\\*[DOC_]COVER_SUBTITLE_1]'' \ +. ds $PRFX \\*[DOC_]COVER_ +. sp 2 +. nr #ARG_NUM 0 1 +. while \\n[#\\*[$PRFX]SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. PRINT "\\*[$\\*[$PRFX]SUBTITLE_\\n[#ARG_NUM]]" +. \} +. rm $PRFX +. \} +. el \{\ +. ie !'\\*[$\\*[DOC_]COVER_SUBTITLE_1]'' .ds $PRFX \\*[DOC_]COVER_SUB +. el .ds $PRFX SUB +. if !'\\*[$\\*[DOC_]COVER_SUBTITLE_SPACER]'' \ +. sp \\*[$\\*[DOC_]COVER_SUBTITLE_SPACER] +. DO_SUBTITLE +. rm $PRFX +. \} +. \} +. if \\n[#PRINT_STYLE]=1 \ +. if !r#\\*[DOC_]COVER_SUBTITLE .sp +.\" Author (plus attribution) +. if \\n[#\\*[DOC_]COVER_AUTHOR]=1 \{\ +. ie \\n[#PRINT_STYLE]=1 \ +. sp +. el \{\ +. ie !'\\*[$\\*[DOC_]COVER_AUTHOR_LEAD]'' \ +. vs \\*[$\\*[DOC_]COVER_AUTHOR_LEAD] +. el .vs \\n[#\\*[DOC_]COVER_LEAD]u +. \} +. if '\\*[$\\*[DOC_]COVER_ATTRIBUTE_STRING]'' \ +. ds $\\*[DOC_]COVER_ATTRIBUTE_STRING \ + \\*[$ATTRIBUTE_STRING] +. ie !\\n[#PRINT_STYLE]=1 \{\ +. fam \\*[$\\*[DOC_]COVER_ATTRIBUTE_FAM] +. ft \\*[$\\*[DOC_]COVER_ATTRIBUTE_FT] +. ps \ +\\n[#DOC_PT_SIZE]u\\*[$\\*[DOC_]COVER_ATTRIBUTE_SIZE_CHANGE] +. if \\n[#\\*[DOC_]COVER_ATTRIBUTE_COLOR]=1 \ +. COLOR \\*[$\\*[DOC_]COVER_ATTRIBUTE_COLOR] +. if \\n[#\\*[DOC_]COVER_ATTRIBUTE_CAPS]=1 .CAPS +. if \\n[#\\*[DOC_]COVER_ATTRIBUTE_SMALLCAPS]=1 .SMALLCAPS +. if !'\\*[$\\*[DOC_]COVER_ATTRIBUTE_SPACER]'' \ +. sp \\*[$\\*[DOC_]COVER_ATTRIBUTE_SPACER] +. ie \\n[#\\*[DOC_]COVER_ATTRIBUTE_UNDERLINE] \{\ +. ds $TITLE_TYPE \\*[DOC_]COVER_ATTRIBUTE +. ie \\n[#\\*[DOC_]COVER_ATTRIBUTE_UNDERLINE]=2 \ +. UNDERSCORE2 \\*[$\\*[DOC_]COVER_ATTRIBUTE_UNDERLINE_GAP] \ +\\*[$\\*[DOC_]COVER_ATTRIBUTE_RULE_GAP] "\\*[$\\*[DOC_]COVER_ATTRIBUTE_STRING]" +. el .UNDERSCORE \\*[$\\*[DOC_]COVER_ATTRIBUTE_STRING] +. \} +. el .PRINT "\\*[$\\*[DOC_]COVER_ATTRIBUTE_STRING]" +. SMALLCAPS off +. CAPS off +. if \\n[#\\*[DOC_]COVER_ATTRIBUTE_COLOR]=1 \ +. gcolor +. \} +. el \ +. PRINT "\\*[$\\*[DOC_]COVER_ATTRIBUTE_STRING]" +. ie \\n[#PRINT_STYLE]=1 .sp +. el \{\ +. if !'\\*[$\\*[DOC_]COVER_AUTHOR_SPACER]'' \ +. sp \\*[$\\*[DOC_]COVER_AUTHOR_SPACER] +. \} +. if '\\$0'DO_COVER' \ +. ds $PRFX COVER_ +. if '\\$0'DO_DOC_COVER' \ +. ds $PRFX DOC_COVER_ +. DO_AUTHORS +. rm $PRFX +. \} +.\" Named doctype string +. if \\n[#DOC_TYPE]=3 \{\ +. if \\n[#\\*[DOC_]COVER_DOCTYPE]=1 \{\ +. ie \\n[#PRINT_STYLE]=1 \{\ +. TYPEWRITER +. sp 1.5 +. UNDERSCORE2 3p 2p "\\*[$DOC_TYPE] +. \} +. el \{\ +. fam \\*[$\\*[DOC_]COVER_DOCTYPE_FAM] +. ft \\*[$\\*[DOC_]COVER_DOCTYPE_FT] +. ps \ +\\n[#DOC_PT_SIZE]u\\*[$\\*[DOC_]COVER_DOCTYPE_SIZE_CHANGE] +. if \\n[#\\*[DOC_]COVER_DOCTYPE_COLOR]=1 \ +. COLOR \\*[$\\*[DOC_]COVER_DOCTYPE_COLOR] +. sp +. if \\n[#\\*[DOC_]COVER_DOCTYPE_CAPS]=1 .CAPS +. if \\n[#\\*[DOC_]COVER_DOCTYPE_SMALLCAPS]=1 .SMALLCAPS +. if !'\\*[$\\*[DOC_]COVER_DOCTYPE_SPACER]'' \ +. sp \\*[$\\*[DOC_]COVER_DOCTYPE_SPACER] +. ie \\n[#\\*[DOC_]COVER_DOCTYPE_UNDERLINE] \{\ +. ds $TITLE_TYPE \\*[DOC_]COVER_DOCTYPE +. ie \\n[#\\*[DOC_]COVER_DOCTYPE_UNDERLINE]=2 \ +. UNDERSCORE2 \\*[$\\*[DOC_]COVER_DOCTYPE_UNDERLINE_GAP] \ +\\*[$\\*[DOC_]COVER_DOCTYPE_RULE_GAP] "\\*[$DOC_TYPE]" +. el .UNDERSCORE "\\*[$DOC_TYPE]" +. \} +. el .PRINT "\\*[$DOC_TYPE]" +. SMALLCAPS off +. CAPS off +. if \\n[#\\*[DOC_]COVER_DOCTYPE_COLOR]=1 \ +. gcolor +. \} +. \} +. \} +.\" Covertext +. if \\n[#\\*[DOC_]COVERTEXT]=1 \{\ +. nr #DOING_COVERTEXT 1 +. if !\\n[#\\*[DOC_]COVERTEXT_START_POS] .sp +. if \\n[#\\*[DOC_]COVERTEXT]=1 \{\ +. ev \\*[DOC_]COVERTEXT +. nf +. \\*[DOC_]COVER_TEXT +. ev +. \} +. if \\n[#\\*[DOC_]COVERTEXT_ONLY] \ +. PDF_BOOKMARK 1 \\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[PDF_BM] +. rr #\\*[DOC_]COVERTEXT +. rm \\*[DOC_]COVER_TEXT +. rr #DOING_COVERTEXT +. rr #\\*[DOC_]COVERTEXT_START_POS +. \} +. sp |\\n[#VISUAL_B_MARGIN]u +.\" Copyright +. ie \\n[#PRINT_STYLE]=1 \ +. if !\\n[#SINGLE_SPACE] .sp +. el \{\ +. fam \\*[$\\*[DOC_]COVER_COPYRIGHT_FAM] +. ft \\*[$\\*[DOC_]COVER_COPYRIGHT_FT] +. ps \\n[#DOC_PT_SIZE]u\\*[$\\*[DOC_]COVER_COPYRIGHT_SIZE_CHANGE] +. nr #COPYRIGHT_V_POS \\n[#DOC_LEAD]-\\n[.v] +. sp \\n[#COPYRIGHT_V_POS]u +. rr #COPYRIGHT_V_POS +. \} +. if \\n[#\\*[DOC_]COVER_COPYRIGHT]=1 \{\ +. if '\\*[$\\*[DOC_]COVER_COPYRIGHT]'' \ +. ds $\\*[DOC_]COVER_COPYRIGHT \\*[$COVER_COPYRIGHT] +. QUAD \\*[$\\*[DOC_]COVER_COPYRIGHT_QUAD] +. if \\n[#\\*[DOC_]COVER_COPYRIGHT_COLOR]=1 \ +. COLOR \\*[$\\*[DOC_]COVER_COPYRIGHT_COLOR] +. ie !'\\*[$COPYRIGHT_V_ADJ]'' \ +. PRINT \v'\\*[$COPYRIGHT_V_ADJ]'\\*[$\\*[DOC_]COVER_COPYRIGHT] +. el \ +. PRINT \\*[$\\*[DOC_]COVER_COPYRIGHT] +. if \\n[#\\*[DOC_]COVER_COPYRIGHT_COLOR]=1 \ +. gcolor +. \} +. sp |\\n[#VISUAL_B_MARGIN]u +.\" Misc +. if \\n[#\\*[DOC_]COVER_MISC]=1 \{\ +. if \\n[#PRINT_STYLE]=2 \{\ +. fam \\*[$\\*[DOC_]COVER_MISC_FAM] +. ft \\*[$\\*[DOC_]COVER_MISC_FT] +. ps \\n[#DOC_PT_SIZE]u\\*[$\\*[DOC_]COVER_MISC_SIZE_CHANGE] +. vs \\*[$\\*[DOC_]COVER_MISC_LEAD] +. if \\n[#\\*[DOC_]COVER_MISC_COLOR]=1 \ +. COLOR \\*[$\\*[DOC_]COVER_MISC_COLOR] +. \} +. ie !'\\*[$\\*[DOC_]COVER_MISC_1]'' \{\ +. QUAD \\*[$\\*[DOC_]COVER_MISC_QUAD] +. da MISC_DIV +. nr #NEXT_MISC 0 1 +. while \\n[#\\*[DOC_]COVER_MISC_LINES]>=\\n+[#NEXT_MISC] \{\ +. nop \\*[$\\*[DOC_]COVER_MISC_\\n[#NEXT_MISC]] +. br +. \} +. da +. \} +. el \{\ +. QUAD \\*[$MISC_QUAD] +. da MISC_DIV +. nr #NEXT_MISC 0 1 +. while \\n[#MISC_LINES]>=\\n+[#NEXT_MISC] \{\ +. nop \\*[$MISC_\\n[#NEXT_MISC]] +. br +. \} +. da +. \} +. nr #MISC_V_ADJ \\n[#DOC_LEAD]-\\n[.v] +. sp \\n[#MISC_V_ADJ]u +. sp -\\n[dn]u+1 +. nf +. MISC_DIV +. if \\n[#MISC_COLOR]=1 .gcolor +. if \\n[#\\*[DOC_]COVER_MISC_COLOR]=1 .gcolor +. rm MISC_DIV +. rr #MISC_DEPTH +. \} +. if \\n[TOC.RELOCATE]==1 \{\ +. if !\\n[#COVER_BLANKPAGE] \ +. if !rTOC_BH .TOC_AFTER_HERE +. \} +. if '\\$0'DO_COVER' \{\ +. if \\n[TOC.RELOCATE]==6 \ +. if !rTOC_BH .TOC_AFTER_HERE +. \} +. if '\\$0'DO_DOC_COVER' \{\ +. if \\n[TOC.RELOCATE]==4 \ +. if !rTOC_BH .TOC_AFTER_HERE +. \} +. END_COVER +.END +\# +\# Macro to terminate (doc)cover processing +\# +.MAC END_COVER END +. EOL +. vpt +. rr #\\*[DOC_]COVERTEXT_ONLY +. rr #\\*[DOC_]COVER_TITLE +. rr #\\*[DOC_]COVERTITLE +. rr #\\*[DOC_]COVER_SUBTITLE +. rr #\\*[DOC_]COVER_AUTHOR +. rr #\\*[DOC_]COVER_DOCTYPE +. rr #\\*[DOC_]COVER_COPYRIGHT +. rr #\\*[DOC_]COVER_MISC +. rr #\\*[DOC_]COVERTEXT +. rr #\\*[DOC_]COVER_IMAGE +. rr #\\*[DOC_]COVER_BLANKPAGE +. rm $PDF_\\*[DOC_]COVER_LABEL +. rr #\\*[DOC_]COVER +. if '\\*[$COVER_TYPE]'DOC_COVER_' .ds DOC DOC +. rm $COVER_TYPE +. if \\n[#DOC_TYPE]=5 .nr #SKIP 1 +. nr #END_COVER 1 +. NEWPAGE +. rr #NEWPAGE +. rr #SKIP +. if \\n[#PAGINATION_WAS_ON]=1 .nr % +1 +. ie \\n[#\\*[DOC_]COVER_BLANKPAGE]=1 \{\ +. if \\n[TOC.RELOCATE] \ +. if !\\n[#TOC_BH] .TOC_AFTER_HERE +.\" Without the empty PDF_BOOKMARK, (doc)cover BLANKPAGE causes +.\" the PDF outline to place the first doc or chapter before the TOC, +.\" even though PDF output is correct. +. PDF_BOOKMARK 1 +. nop \& +. bp +. rr #\\*[DOC_]COVER_BLANKPAGE +. if !\\n[#\\*[DOC]COVERS_COUNT]=1 .nr % -2 +. rm DOC_ +. \} +. el \ +. if !\\n[#\\*[DOC]COVERS_COUNT]=1 .nr #PAGE_NUM_ADJ -1 +. if !'\\n[.ev]'0' .ev +. if \\n[#PAGINATION_WAS_ON] \{\ +. rr #PAGINATION_WAS_ON +. PAGINATE +. PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]-1 +. \} +. if \\n[#HEADERS_WERE_ON] \{\ +. rr #HEADERS_WERE_ON +. HEADERS +. \} +. if \\n[#FOOTERS_WERE_ON] \{\ +. rr #FOOTERS_WERE_ON +. FOOTERS +. \} +. if \\n[#COLUMNS_WERE_ON]=1 \{\ +. rr #COLUMNS_WERE_ON 1 +. nr #COLUMNS 1 +. \} +. rr #DOING_COVER +. if \\n[.ns] .nop \& +. if \\n[#RECTO_VERSO] .nr #RV_POST_COVER 1 +. rm DOC_ +.END +\# +\# +++START THE DOCUMENT+++ +\# +\# THE START MACRO +\# --------------- +\# *Arguments: +\# <none> +\# *Function: +\# Macro to start document processing. Reads in default document +\# style parameters and any parameters the user has changed before +\# issuing START. Using the information gathered in the opening +\# macros, prints appropriate title (or chapter #), subtitle, +\# author and document type (if appropriate). +\# *Notes: +\# The .PRINT \& (zero-width character) is required to get the +\# subsequent .sp request to work as advertised. +\# +\# The overall document line length, family, and point-size +\# are stored in #DOC_L_LENGTH, $DOC_FAM, and #DOC_PT_SIZE for +\# use in the HEADER and FOOTER macros. +\# +.MAC START END +. nr #DOCS 1 +. if \\n[TOC.RELOCATE]==2 \ +. if !\\n[TOC_BH] .TOC_BEFORE_HERE +. if !n .nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap' +. if !\\n[#PRINT_STYLE] \{\ +. PRINTSTYLE TYPEWRITE +. PRINT \& +. po 6P +. ll 39P +. ta \\n[.l]u +. sp |1i-1v +. CENTER +. PRINT "You neglected to enter a PRINTSTYLE." +. ab [mom]: PRINTSTYLE missing. Aborting '\\n[.F]'. +. \} +. if \\n[#LINENUMBERS]=1 \{\ +. nm +. NUMBER_LINES OFF +. nr #LINENUMBERS 2 +. \} +. if \\n[#COLLATE] \{\ +. COPYSTYLE \\*[$COPY_STYLE] +. nr #HEADERS_ON \\n[#HEADER_STATE] +. if \\n[#PAGE_NUM_V_POS]=1 .nr #PAGINATE \\n[#PAGINATION_STATE] +. PRINT \& +. if !'\\*[$RESTORE_PAGENUM_STYLE]'' \{\ +. PAGENUM_STYLE \\*[$RESTORE_PAGENUM_STYLE] +. rm $RESTORE_PAGENUM_STYLE +. \} +. if \\n[#PAGINATE_WAS_ON] \{\ +. PAGINATE +. rr #PAGINATE_WAS_ON +. \} +. \} +. DEFAULTS +. nr #PAGE_TOP \\n[#T_MARGIN]u-\\n[#DOC_LEAD]u +. rr #RESET_TRAPS +. if !r#EN_Q_AUTOLEAD .nr #EN_Q_LEAD \\n[#EN_LEAD] +. if !r#EN_BQ_AUTOLEAD .nr #EN_BQ_LEAD \\n[#EN_LEAD] +.\" TOC/recto-verso stuff +. nr @L_MARGIN \\n[#DOC_L_MARGIN] +. nr @R_MARGIN \\n[#DOC_R_MARGIN] +.\" Covers and doc covers +. if \\n[#DOC_COVERS]=1 \{\ +. if \\n[#DOC_COVER]=1 .DO_DOC_COVER +. \} +. if \\n[#COVERS]=1 \{\ +. if \\n[#COVER]=1 .DO_COVER +. \} +. nr PDFHREF.VIEW.LEADING \\n[PDFHREF.VIEW.LEADING.T] +. if !\\n[#TOC] .RV_HARD_SET_MARGINS +. if \\n[#COLUMNS] .COLUMNS \\n[#NUM_COLS] \\n[#GUTTER]u +. sp |\\n[#DOCHEADER_ADVANCE]u-\\n[#DOC_LEAD]u +.\" Collect TITLE for TOC. +. if !\\n[#TOC]=1 \{\ +. nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ] +. af #TOC_ENTRY_PN \\g[#PAGENUMBER] +. ie \\n[#USER_SET_TITLE_ITEM] \{\ +. ds $TOC_TITLE_ITEM \\*[$USER_SET_TITLE_ITEM] +. rr #USER_SET_TITLE_ITEM +. rm $USER_SET_TITLE_ITEM +. \} +. el \{\ +. ie \\n[#DOC_TYPE]=2 \{\ +. ie '\\*[$CHAPTER_TITLE]'' \ +. ds $TOC_TITLE_ITEM \\*[$CHAPTER_STRING] \\*[$CHAPTER] +. el \{\ +. ie '\\*[$CHAPTER]'' \ +. ds $TOC_TITLE_ITEM \\*[$CHAPTER_TITLE] +. el \ +. ds $TOC_TITLE_ITEM \ +\\*[$CHAPTER_STRING] \\*[$CHAPTER]: \\*[$CHAPTER_TITLE] +. \} +. \} +. el \ +. ds $TOC_TITLE_ITEM \\*[$TITLE] +. \} +. if \\n[#TOC_AUTHORS]=1 \{\ +. ie '\\*[$TOC_AUTHORS]'' \ +. as $TOC_TITLE_ITEM / \\*[$AUTHOR_1] +. el \{\ +. as $TOC_TITLE_ITEM / \\*[$TOC_AUTHORS] +. rm $TOC_AUTHORS +. \} +. \} +. as $TOC_TITLE_ITEM \| +. if \\n[#PREFIX_CH_NUM] \ +. ds $TOC_CH_NUM \ + \\n[#CH_NUM].\[toc-hd-num-spacer] +. if \\n[#TOC_PREFIX_CH_NUM] \{\ +. rn $TOC_TITLE_ITEM $TOC_TITLE_ITEM_OLD +. ds $TOC_CH_NUM \ + \\n[#CH_NUM].\[toc-hd-num-spacer] +. if (\\n[#PAD_TOC_CH_NUM]=2)&(\\n[#CH_NUM]<10) \ +. ds $TOC_CH_NUM \h'\w'\0'u'\\*[$TOC_CH_NUM] +. if \\n[#PAD_TOC_CH_NUM]=3 \{\ +. if \\n[#CH_NUM]<10 \ +. ds $TOC_CH_NUM \h'\w'\0'u*2u'\\*[$TOC_CH_NUM] +. if (\\n[#CH_NUM]>=10)&(\\n[#CH_NUM]<100) \ +. ds $TOC_CH_NUM \h'\w'\0'u'\\*[$TOC_CH_NUM] +. \} +. if \\n[#PAD_TOC_CH_NUM]=4 \{\ +. if \\n[#CH_NUM]<10 \ +. ds $TOC_CH_NUM \h'\w'\0'u*3u'\\*[$TOC_CH_NUM] +. if (\\n[#CH_NUM]>=10)&(\\n[#CH_NUM]<100) \ +. ds $TOC_CH_NUM \h'\w'\0'u*2u'\\*[$TOC_CH_NUM] +. if (\\n[#CH_NUM]>=100)&(\\n[#CH_NUM]<1000) \ +. ds $TOC_CH_NUM \h'\w'\0'u'\\*[$TOC_CH_NUM] +. \} +. ds $TOC_TITLE_ITEM \\*[$TOC_CH_NUM]\\*[$TOC_TITLE_ITEM_OLD] +. rm $TOC_TITLE_ITEM_OLD +. \} +. \} +. if !'\\*[$TOC_HEADING]'' \{\ +. HEADING_TO_TOC +. rm $TOC_HEADING +. \} +. if !\\n[#TOC] \{\ +. if !'\\*[$TOC_TITLE_ITEM]'' \{\ +. PDF_BOOKMARK 1 \\*[$TOC_TITLE_ITEM] +. if !r #NO_TOC_ENTRY .TITLE_TO_TOC +. if r #NO_TOC_ENTRY .rr #NO_TOC_ENTRY +. \} +. \} +. if !\\n[#TOC] .nr #POST_TOP 1 +.\" End TITLE collection +. if \\n[#PRINT_PAGENUM_ON_PAGE_1] \{\ +. if \\n[#PAGE_NUM_V_POS]=1 \{\ +. br +. sp |\\n[#HEADER_MARGIN]u +. PRINT_PAGE_NUMBER +. \} +. \} +. rr #COLLATE +. rr #PAGINATION_STATE +.\" End collate stuff +. if \\n[#DOC_TYPE]=5 \{\ +. rr @TOP +. ch RR_@TOP +. \} +. sp |\\n[#DOCHEADER_ADVANCE]u-\\n[#DOC_LEAD]u +. ie \\n[#DOC_HEADER]=0 \{\ +. if \\n[.ns] .rs +. if \\n[#DOC_TYPE]=4 \ +. if !'\\n[.z]'' .di +. nr #STORED_PP_INDENT \\n[#PP_INDENT] +. PARA_INDENT 0 +. PP +. PARA_INDENT \\n[#STORED_PP_INDENT]u +. rr #STORED_PP_INDENT +. ie r #ADVANCE_FROM_TOP \{\ +. br +. sp |\\n[#ADVANCE_FROM_TOP]u-1v +. if \\n[#ADJ_DOC_LEAD]=1 \ +. if !\\n[#DOCHEADER_NO_SHIM] .SHIM_1 +. \} +. el \{\ +. br +. sp |\\n[#T_MARGIN]u-1v +. \} +. if \\n[#COLUMNS] \{\ +. mk dc +. nr #COL_NUM 0 1 +. po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u +. nr #L_MARGIN \\n[.o] +. ll \\n[#COL_L_LENGTH]u +. \} +. nr #PP 0 +. \} +. el \{\ +. if \\n[#AUTO_LEAD] .nr #RESTORE_AUTO_LEAD 1 +. nr #CURRENT_LEAD \\n[.v] +. if \\n[#PRINT_STYLE]=2 .vs \\n[#DOC_LEAD]u\\*[$DOCHEADER_LEAD_ADJ] +. nr #DOCHEADER_LEAD_DIFF \\n[#CURRENT_LEAD]-\\n[.v] +. sp +\\n[#DOCHEADER_LEAD_DIFF]u +. if \\n[#RESTORE_AUTO_LEAD] \{\ +. nr #AUTO_LEAD 1 +. nr #AUTOLEAD_VALUE \\n[#SAVED_AUTOLEAD_VALUE] +. \} +. nr #DOCHEADER_LEAD \\n[.v] +. vpt 0 +.\" Default doctype +. if \\n[#DOC_TYPE]=1 \{\ +. if \\n[.ns] \{\ +. rs +. nop \& +. sp -1 +. \} +. ev DOCHEADER +. evc 0 +. L_MARGIN \\n[#DOC_L_MARGIN]u +. LL \\n[#DOC_L_LENGTH]u +. ta \\n[.l]u +. if \\n[#PRINT_STYLE]=1 .DEFAULT_DOCHEADER_TYPEWRITE +. if \\n[#PRINT_STYLE]=2 .DEFAULT_DOCHEADER +. ev +. \} +.\" Chapter doctype +. if \\n[#DOC_TYPE]=2 \{\ +. if \\n[.ns] .rs +. ev DOCHEADER +. evc 0 +. if \\n[#DOCHEADER_COLOR]=1 \ +. COLOR \\*[$DOCHEADER_COLOR] +. L_MARGIN \\n[#DOC_L_MARGIN]u +. LL \\n[#DOC_L_LENGTH]u +. ta \\n[.l]u +. if \\n[#PRINT_STYLE]=1 .CHAPTER_DOCHEADER_TYPEWRITE +. if \\n[#PRINT_STYLE]=2 .CHAPTER_DOCHEADER +. ev +. \} +.\" Named +. if \\n[#DOC_TYPE]=3 \{\ +. if \\n[.ns] \{\ +. rs +. nop \& +. sp -1 +. \} +. ev DOCHEADER +. evc 0 +. if \\n[#DOCHEADER_COLOR]=1 \ +. COLOR \\*[$DOCHEADER_COLOR] +. L_MARGIN \\n[#DOC_L_MARGIN]u +. LL \\n[#DOC_L_LENGTH]u +. ta \\n[.l]u +. if \\n[#PRINT_STYLE]=1 \{\ +. DEFAULT_DOCHEADER_TYPEWRITE +. if !\\n[#NO_PRINT_DOCTYPE] \{\ +. sp +. UNDERSCORE2 3p 2p "\\*[$DOC_TYPE]" +. \} +. \} +. if \\n[#PRINT_STYLE]=2 .NAMED_DOCHEADER +. ev +. \} +. if !\\n[#DOC_TYPE]=4 \{\ +. if \\n[#PRINT_STYLE]=1 .sp +. if \\n[#PRINT_STYLE]=2 .sp \\n[#DOC_LEAD]u*2u +. if \\n[#COLUMNS] \{\ +. nr #COL_NUM 0 1 +. nr #L_LENGTH_FOR_EPI \\n[#L_LENGTH] +. ie \\n[#RV_POST_COVER] \{\ +. nr #COL_\\n+[#COL_NUM]_L_MARGIN \\n[#DOC_L_MARGIN] +. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u +. nr #L_MARGIN \\n[.o] +. rr #RV_POST_COVER +. \} +. el \{\ +. po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u +. nr #L_MARGIN \\n[.o] +. \} +. LL \\n[#COL_L_LENGTH]u +. ta \\n[.l]u +. \} +. \} +. nr #NO_PRINT_AUTHOR 1 +. nr #NO_PRINT_DOCTYPE 1 +. \} +. vs \\n[#DOC_LEAD]u +. if \\n[#PRINT_STYLE]=1 \ +. if \\n[#SINGLE_SPACE]=1 .sp +. if \\n[#ADJ_DOC_LEAD]=1 \ +. if \\n[#ADVANCE_FROM_TOP]=0 \ +. if \\n[#DOC_HEADER]=1 \ +. if !\\n[#DOCHEADER_NO_SHIM] .SHIM_1 +. if \\n[#COLUMNS] .mk dc +. FAMILY \\*[$DOC_FAM] +. QUAD \\*[$DOC_QUAD] +. CLEANUP_DEFAULTS +. nr #START_FOR_FOOTERS 1 +. if !\\n[#DOC_TYPE]=4 .em TERMINATE +. if \\n[#LINENUMBERS]=2 \{\ +. ie \\n[#PER_SECTION] .NUMBER_LINES 1 +. el .NUMBER_LINES RESUME +. nr #LINENUMBERS 1 +. \} +. if \\n[#RUN_ON]=1 \{\ +. if \\n[#FN_MARKER_STYLE]=1 .RUNON_WARNING +. if \\n[#FN_MARKER_STYLE]=2 .RUNON_WARNING +. \} +. nr PDFHREF.VIEW.LEADING \\n[PDFHREF.VIEW.LEADING.H] +. vpt +. if !r flex .nr flex 1 +. nr flex-spaces 0 +.\" If one-page, don't flex. +. if !dPDF.EXPORT \{\ +. if \\n[#FLEX_ACTIVE] \{\ +. if !\\n[#NO_FLEX] \{\ +. if d pre-toc-\\n%@\\n[#COL_NUM] \ +. nr #NO_FLEX 1 +. if d pre-list-\\n%@\\n[#COL_NUM] \ +. nr #NO_FLEX 1 +. if d page-\\n%@\\n[#COL_NUM] \ +. nr #NO_FLEX 1 +. if '\\*[last-page]'\\n%@\\n[#COL_NUM]' \ +. nr #NO_FLEX 1 +. \} +. \} +. \} +. if \\n[#DOC_TYPE]=5 \{\ +. if \\n[#HDRFTR_BOTH] \ +. HEADER_RECTO \\*[$HDR_RECTO_QUAD] "\\*[$HDR_RECTO_STRING]" +. if \\n[#SLIDE_HEADERS] .HEADER +. if \\n[#HDRFTR_BOTH] \ +. FOOTER_RECTO \\*[$FTR_RECTO_QUAD] "\\*[$FTR_RECTO_STRING]" +. if \\n[#SLIDE_FOOTERS] \ +. PRINT_FOOTER +. sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u +. vpt +. \} +.END +\# +.MAC RR_ADVANCE_FROM_TOP END +. rr #ADVANCE_FROM_TOP +. ch RR_ADVANCE_FROM_TOP +.END +\# +.MAC CLEANUP_DEFAULTS END +. nr #START 1 +. if \\n[#DOC_HEADER]=1 .nr #DOC_HEADER 2 +. rm $TOC_TITLE_ITEM +. rr #MISC_NUM +. rr #MISCS +. rr #NEXT_AUTHOR +. rr #NEXT_MISC +. wh \\n[nl]u+1u RR_ADVANCE_FROM_TOP +. rr #DOCHEADER_NO_SHIM +.END +\# +\# ==================================================================== +\# +\# +++MACROS TO CHANGE SOME DEFAULTS+++ +\# +\# DOCUMENT HEADER +\# --------------- +\# *Argument: +\# <none> | <anything> [distance to advance from top of page] [NO_SHIM] +\# *Function: +\# Turns printing of document header on or off. If a second +\# numeric argument with units of measure is given, advances that +\# distance from the top of the page without printing the document +\# header. +\# *Notes: +\# Default is on. If the 1st argument is <anything> (which turns +\# document headers off), the optional 2nd argument may be given +\# (with a unit of measure). +\# +.MAC DOCHEADER END +. if \\n[#NUM_ARGS]=0 .nr #DOC_HEADER 1 +. if \\n[#NUM_ARGS]=1 \{\ +. ie '\\$1'NO_SHIM' .nr #DOCHEADER_NO_SHIM 1 +. el .nr #DOC_HEADER 0 +. \} +. if \\n[#NUM_ARGS]>1 \{\ +. nr #DOC_HEADER 0 +. if \B'\\$2' .nr #ADVANCE_FROM_TOP \\$2 +. if '\\$3'NO_SHIM' .nr #DOCHEADER_NO_SHIM 1 +. \} +.END +\# +\# DOCUMENT HEADER LEADING +\# ----------------------- +\# *Arguments: +\# <+|- amount by which to in/decrease leading of doc header> +\# *Function: +\# Stores user supplied lead in/decrease in string $DOCHEADER_LEAD_ADJ. +\# *Notes: +\# A unit of measure must be supplied. Decimal fractions OK. +\# Default is +0, i.e. same as DOC_LEAD. +\# +.MAC DOCHEADER_LEAD END +. ds $DOCHEADER_LEAD_ADJ \\$1 +.END +\# +\# DOCHEADER ADVANCE +\# ----------------- +\# *Arguments: +\# <docheader start position> +\# *Function: +\# Creates register #DOCHEADER_ADVANCE, used in START. +\# *Notes: +\# Unit of measure required. +\# Default is same as T_MARGIN. +\# +.MAC DOCHEADER_ADVANCE END +. nr #DOCHEADER_ADVANCE \\$1 +.END +\# +\# DOCUMENT LEFT MARGIN +\# -------------------- +\# *Argument: +\# <left margin of document> +\# *Function: +\# Creates or modifies register #DOC_L_MARGIN. +\# *Notes: +\# Affects everything on the page. +\# +.MAC DOC_LEFT_MARGIN END +. if !\\n[#DOCS] .DOC_MACRO_ERROR \\$0 +. br +. nr #DOC_L_MARGIN (\\$1) +. L_MARGIN \\n[#DOC_L_MARGIN]u +.END +\# +\# DOCUMENT RIGHT MARGIN +\# --------------------- +\# *Argument: +\# <right margin of document> +\# *Function: +\# Creates or modifies register #DOC_R_MARGIN. +\# *Notes: +\# Affects everything on the page. +\# +.MAC DOC_RIGHT_MARGIN END +. br +. nr #DOC_R_MARGIN (\\$1) +. R_MARGIN \\n[#DOC_R_MARGIN] +. nr #DOC_L_LENGTH \\n[#L_LENGTH] +.END +\# +\# DOCUMENT LINE LENGTH +\# -------------------- +\# *Argument: +\# <line length of document> +\# *Function: +\# Creates or modifies register #DOC_L_LENGTH. +\# *Notes: +\# Affects everything on the page. +\# +.MAC DOC_LINE_LENGTH END +. if !\\n[DOCS] .DOC_MACRO_ERROR \\$0 +. br +. nr #DOC_L_LENGTH (\\$1) +. LL \\n[#DOC_L_LENGTH]u +. ta \\n[.l]u +.END +\# +\# DOCUMENT FAMILY +\# --------------- +\# *Argument: +\# <family of running text> +\# *Function: +\# Creates or modifies string $DOC_FAM. +\# *Notes: +\# Affects everything except headers and footers. +\# +.MAC DOC_FAMILY END +. if !\\n[DOCS] .DOC_MACRO_ERROR \\$0 +. br +. ds $DOC_FAM \\$1 +. ds $FAMILY \\*[$DOC_FAM] +. AUTHOR_FAMILY \\*[$DOC_FAM] +. BLOCKQUOTE_FAMILY \\*[$DOC_FAM] +. DOCHEADER_FAMILY \\*[$DOC_FAM] +. DOCTYPE_FAMILY \\*[$DOC_FAM] +. EPIGRAPH_FAMILY \\*[$DOC_FAM] +. FOOTNOTE_FAMILY \\*[$DOC_FAM] +. HDRFTR_FAMILY \\*[$DOC_FAM] +. LINENUMBER_FAMILY \\*[$DOC_FAM] +. QUOTE_FAMILY \\*[$DOC_FAM] +. SUBTITLE_FAMILY \\*[$DOC_FAM] +. TITLE_FAMILY \\*[$DOC_FAM] +.END +\# +\# DOCUMENT POINT SIZE +\# ------------------- +\# *Argument: +\# <point size of running text> +\# *Function: +\# Creates or modifies register #DOC_PT_SIZE. +\# *Notes: +\# DOC_PT_SIZE is the basis for calculating all type sizes in +\# a document. Ignored if PRINTSTYLE TYPEWRITE. +\# +.ALIAS DOC_PT_SIZE PT_SIZE +\# +\# DOCUMENT LEAD +\# ------------- +\# *Argument: +\# <lead (".vs") of running text> [ADJUST] +\# *Function: +\# Creates or modifies register #DOC_LEAD. If the optional +\# ADJUST argument is given, adjusts leading so that the last +\# line of text falls exactly on #B_MARGIN. +\# *Notes: +\# DOC_LEAD is the basis for calculating all leading changes in +\# a document. Default for TYPESET is 16; 24 for TYPEWRITE. +\# +\# Because the visible bottom or footer margin of a page depends +\# on the overall document lead supplied by the register #DOC_LEAD, +\# DOC_LEAD, in the body of a document, should always be associated +\# with the start of a new page (in other words, just before or +\# just after a manual NEWPAGE). Ignored if PRINTSTYLE TYPEWRITE. +\# +.MAC DOC_LEAD END +. if \\n[#IGNORE] .return +. if !\\n[#DOCS] .DOC_MACRO_ERROR \\$0 +. br +. if '\\$0'DOC_LEAD' \{\ +. vs \\$1 +. rr #DOC_AUTOLEAD +. rr #DOC_AUTOLEAD_FACTOR +. nr #DOC_LEAD \\n[.v] +. \} +. nr #RESET_TRAPS 1 +. if !\\n[#ADJ_DOC_LEAD] .nr #REMOVE_ADJ 1 +. if !'\\$0'DOC_LEAD' \{\ +. if '\\$0'EN_LEAD' .nr #DOC_LEAD \\n[#EN_LEAD] +. if '\\$0'BIB_LEAD' .nr #DOC_LEAD \\n[#BIB_LEAD] +. if '\\$0'TOC_LEAD' .nr #DOC_LEAD \\n[#TOC_LEAD] +. if '\\$2'ADJUST' .TRAPS +. rr #RESET_TRAPS +. \} +.END +\# +\# ADJUST DOCUMENT LEAD +\# -------------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Adjusts document lead so that the last line of text falls exactly +\# on #B_MARGIN. +\# +.MAC DOC_LEAD_ADJUST END +. ie '\\$1'' \{\ +. nr #ADJ_DOC_LEAD 1 +. rr #DOC_LEAD_ADJUST_OFF +. \} +. el \{\ +. nr #ADJ_DOC_LEAD 0 +. nr #DOC_LEAD_ADJUST_OFF 1 +. \} +.END +\# +\# SHIM +\# ---- +\# *Argument: +\# None +\# *Function: +\# Advances to the next valid baseline. +\# *Notes: +\# If a user plays around with spacing in a doc (say, with ALD), +\# it isn't easy to get mom back on track so she can achieve +\# perfectly flush bottom margins. Any time SHIM is used, it +\# ensures that the next output line falls on a valid baseline. +\# +\# First, a little convenience macro +\# +.MAC PROCESS_SHIM END +. if !\\n[nl]=\\n[#VALID_BASELINE] \{\ +. while \\n+[#VALID_BASELINE]<\\n[#CURRENT_V_POS] . +. nr #SHIM \\n[#VALID_BASELINE]-\\n[#CURRENT_V_POS] +. \} +.END +\# +\# And a macro to disable SHIM +\# +.MAC NO_SHIM END +. ie '\\$1'' \{\ +. nr #NO_SHIM 1 +. nr #FLEX_ACTIVE 1 +. \} +. el \{\ +. rr #NO_SHIM +. rr #SHIM +. rr #FLEX_ACTIVE +. \} +.END +\# +.nr #NO_SHIM 2 \" Restored to 1 in DEFAULTS. +\# +.MAC SHIM END +. if \\n[#NO_SHIM] \ +. if !'\\$0'SHIM_1' .return +. if !\\n[#NO_FLEX] \{\ +. if !'\\$0'SHIM_1' \{\ +. tm1 "[mom]: \ +SHIM, line \\n[.c], is incompatible with flex-spacing, which is enabled. +. tm1 " \ +Flex-spacing must be disabled with NO_FLEX before using SHIM. +. ab [mom]: Aborting '\\n[.F]', line \\n[.c]. +. \} +. \} +. nr #VALID_BASELINE \\n[#T_MARGIN]-\\n[#DOC_LEAD] \\n[#DOC_LEAD] +. if !r#CURRENT_V_POS .nr #CURRENT_V_POS \\n[.d] +. ie \\n[#ADVANCE_FROM_TOP] \{\ +. ie \\n[#CURRENT_V_POS]<(\\n[#T_MARGIN]-1v) \{\ +. while \\n-[#VALID_BASELINE]>\\n[#CURRENT_V_POS] . +. nr #VALID_BASELINE +\\n[#DOC_LEAD] +. nr #SHIM \\n[#VALID_BASELINE]-\\n[#CURRENT_V_POS] +. \} +. el .PROCESS_SHIM +. \} +. el .PROCESS_SHIM +. nr #SHIM_MAX \\n[#DOC_LEAD]*10/15 +. if !\\n[#CALCULATE_ONLY] \{\ +. if !\\n[defer-count] \ +. if \\n[#SHIM]>\\n[#SHIM_MAX] .sp -1 +' sp \\n[#SHIM]u +. \} +. rr #CURRENT_V_POS +.END +\# +.ALIAS SHIM_1 SHIM +\# +\# ==================================================================== +\# +\# +++FLEX SPACING+++ +\# +\# INSERT FLEX SPACE +\# ----------------- +\# *Arguments: +\# FORCE +\# *Function: +\# Inserts flexible whitespace ("flex-space"). +\# *Notes: +\# FORCE restores flex-spacing if an .ns is preventing it. +\# Useful in conjunction with deferred floated material that +\# plants an .ns after outputting the last deferred float. +\# +.MAC FLEX END +. if !\\n[#NO_SHIM] \{\ +. if \\n[#NO_FLEX] \{\ +. tm1 "[mom]: \ +FLEX, line \\n[.c], is incompatible with shimming, which is presently enabled. +. tm1 " \ +Shimming must be disabled with NO_SHIM before using FLEX. +. ab [mom]: Aborting '\\n[.F]', line \\n[.c]. +. \} +. \} +. if '\\$1'FORCE' \{\ +. nr flex:force 1 +. return +. \} +. if !\\n[#NO_FLEX] \{\ +. if !\\n[.ns] \{\ +. if !\\n[.t]<=\\n[.v] \{\ +. nr flex-spaces +1 +. if dflex-space:\\n[flex]@\\n[#COL_NUM] \{\ +. sp \\*[flex-space:\\n[flex]@\\n[#COL_NUM]] +. \} +. \} +. \} +. \} +.END +\# +.MAC NO_FLEX END +. rr flexed +. ie '\\$1'' \{\ +. nr #NO_FLEX 1 +. if \\n[#FLEX_ACTIVE] .rr #FLEX_ACTIVE +. \} +. el \ +. if !\\n[#DOC_TYPE]=5 .rr #NO_FLEX +.END +\# +\# CALCULATE FLEX SPACES +\# --------------------- +\# *Function: +\# Derives flex-space size by dividing the space remaining before +\# FOOTER by the number of times FLEX was used on the page/col. +\# *Notes: +\# .h is reliable for determining space remaining, but can't be used +\# for columns because it can't be zeroed from one col to the +\# next. Workaround is to use nl for columns and compensate for +\# .br's, .sp's, and .ne's. Here be dragons. +\# +.MAC CALCULATE_FLEX END +. nr flex:target-pos \\n[.p]+\\n[#VARIABLE_FOOTER_POS]-1 +. nr flex:current-pos \\n[.h]-\\n[.v] +. if \\n[#COLUMNS] \{\ +. ie \\n[.trunc] \ +. nr flex:current-pos \\n[nl]-\\n[.v]-(\\n[.trunc]-1) +. el .nr flex:current-pos \\n[nl]-\\n[.v] +. if '\\n[.ev]'tbl*end' \{\ +. nr flex:current-pos \\n[nl]-(\\n[.trunc]-1) +. if \\n[tbl*boxed] .nr flex:current-pos -.65v +. \} +. ie \\n[nl-from-heading] \{\ +. nr flex:current-pos \\n[nl-from-heading]-\\n[.v] +. rr nl-from-heading +. \} +. el \{\ +. if !\\n[.pe] \{\ +. if \\n[nl]=(\\n[.p]+(\\n[#VARIABLE_FOOTER_POS]-1)) \ +. nr flex-spaces -1 +. \} +. \} +. \} +. nr flex:space-remaining \ + \\n[flex:target-pos]-\\n[flex:current-pos] +. if \\n[flex-spaces] \{\ +. nr flex-space:\\n[flex]@\\n[#COL_NUM] \ + \\n[flex:space-remaining]/\\n[flex-spaces] +. if dPDF.EXPORT \{\ +. tm .ds flex-space:\\n[flex]@\\n[#COL_NUM] \ + \\n[flex-space:\\n[flex]@\\n[#COL_NUM]]u +.\" For debugging: catch edge-cases that result in negative +.\" flex-spacing and don't apply flex to the page/column. +. if \\n[flex-space:\\n[flex]@\\n[#COL_NUM]]<0 \{\ +. tm .ds flex-space:\\n[flex]@\\n[#COL_NUM] 0 +. tm .ds Negative flex space \\n%@\\n[#COL_NUM] (\\n[flex-space:\\n[flex]@\\n[#COL_NUM]]) +. \} +. \} +. \} +.END +\# +\# ==================================================================== +\# +\# +++INTERNATIONALIZATION+++ +\# +\# ATTRIBUTE STRING +\# ---------------- +\# *Argument: +\# <what goes in the "by" slot before author in the document header> +\# *Function: +\# Creates or modifies string $ATTRIBUTE_STRING. +\# *Notes: +\# Default is "by". A blank string ("") may be used if no +\# attribution is desired. Blank line results. +\# +.MAC ATTRIBUTE_STRING END +. if !'\\$1'DOC_COVER' \ +. if !'\\$1'COVER' .nr #NEITHER 1 +. if !'\\$1'COVER' \ +. if !'\\$1'DOC_COVER' .nr #NEITHER 1 +. if '\\$1'DOC_COVER' \{\ +. ds $DOC_COVER_ATTRIBUTE_STRING \\$2 +. if '\\*[$DOC_COVER_ATTRIBUTE_STRING]'' \ +. ds $DOC_COVER_ATTRIBUTE_STRING \& +. \} +. if '\\$1'COVER' \{\ +. ds $COVER_ATTRIBUTE_STRING \\$2 +. if '\\*[$COVER_ATTRIBUTE_STRING]'' \ +. ds $COVER_ATTRIBUTE_STRING \& +. \} +. if \\n[#NEITHER]=1 \{\ +. ds $ATTRIBUTE_STRING \\$1 +. rr #NEITHER +. \} +.END +\# +\# CHAPTER STRING +\# -------------- +\# *Argument: +\# <what to print any time the word "chapter" is required> +\# *Function: +\# Creates or modifies string $CHAPTER_STRING. +\# *Notes: +\# Default is "chapter". +\# +.MAC CHAPTER_STRING END +. ds $CHAPTER_STRING \\$1 +.END +\# +\# DRAFT STRING +\# ------------ +\# *Argument: +\# <what to print any time the word "draft" is required> +\# *Function: +\# Creates or modifies string $DRAFT_STRING. +\# *Notes: +\# Default is "draft". +\# +.MAC DRAFT_STRING END +. ds $DRAFT_STRING \\$1 +.END +\# +\# REVISION STRING +\# --------------- +\# *Argument: +\# <what to print any time the word "revision" is required> +\# *Function: +\# Creates or modifies string $REVISION_STRING. +\# *Notes: +\# Default is "revision". +\# +.MAC REVISION_STRING END +. ds $REVISION_STRING \\$1 +.END +\# +\# FINIS STRING +\# ------------ +\# *Argument: +\# <what to print with the finis macro> +\# *Function: +\# Creates or modifies string $FINIS_STRING. +\# *Notes: +\# Default is "END". +\# +.MAC FINIS_STRING END +. ds $FINIS_STRING \\$1 +.END +\# +\# ==================================================================== +\# +\# +++RECTO/VERSO+++ +\# +\# RECTO_VERSO +\# ----------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Switches HDRFTR_LEFT and HDRFTR_RIGHT on alternate pages. Also +\# switches page numbers left and right if either is chosen rather +\# than the default centered page numbers. Switches left and right +\# margins if differing values have been entered. +\# *Notes: +\# Default is OFF. +\# +.MAC RECTO_VERSO END +. ie '\\$1'' .nr #RECTO_VERSO 1 +. el .nr #RECTO_VERSO 0 +.END +\# +\# FORCE RECTO +\# ----------- +\# *Function: +\# Forces doccover and cover pages to recto +\# +.MAC FORCE_RECTO END +. ie '\\$1'' \{\ +. nr #FORCE_RECTO 1 +. nr #DOC_COVER_BLANKPAGE 1 +. nr #COVER_BLANKPAGE 1 +. \} +. el \{\ +. rr #FORCE_RECTO +. rr #DOC_COVER_BLANKPAGE +. rr #COVER_BLANKPAGE +. \} +.END +\# +.MAC RV_HARD_SET_MARGINS END +. DOC_LEFT_MARGIN \\n[@L_MARGIN]u +. DOC_RIGHT_MARGIN \\n[@R_MARGIN]u +. po \\n[#DOC_L_MARGIN]u +. LL \\n[#DOC_L_LENGTH]u +.END +\# +\# ==================================================================== +\# +\# +++EPIGRAPHS+++ +\# +\# EPIGRAPH INDENT +\# --------------- +\# *Argument: +\# <value by which to multiply PP_INDENT for block epigraphs> +\# *Function: +\# Creates or modifies register #EPI_OFFSET_VALUE. +\# *Notes: +\# Default is 2 for TYPEWRITE, 3 for TYPESET. +\# +.MAC EPIGRAPH_INDENT END +. rr #EPI_OFFSET_VALUE +. rm $EPI_OFFSET_VALUE +. ds $EVAL_EI_ARG \\$1 +. substring $EVAL_EI_ARG -1 +. ie \B'\\*[$EVAL_EI_ARG]' .nr #EPI_OFFSET_VALUE \\$1 +. el .ds $EPI_OFFSET_VALUE \\$1 +. rm $EVAL_EI_ARG +.END +\# +\# EPIGRAPH AUTOLEAD +\# ----------------- +\# *Argument: +\# <amount of lead to add to the epigraph ps for epigraph leading> +\# *Function: +\# Creates or modifies register #EPI_AUTOLEAD. +\# *Notes: +\# Default is 2 (for TYPESET; TYPEWRITE doesn't require this). +\# +.MAC EPIGRAPH_AUTOLEAD END +. nr #EPI_AUTOLEAD (p;\\$1) +.END +\# +\# EPIGRAPH +\# -------- +\# *Arguments: +\# BLOCK | <anything> +\# *Function: +\# Places an epigraph before the document's text, after the +\# document header, or after a HEAD. +\# *Notes: +\# #EPIGRAPH 1 = centered; 2 = block +\# +\# By default, epigraphs are centered, allowing the user +\# to input them on a line per line basis. To change this +\# behaviour, the user can supply the argument BLOCK, which +\# will produce indented, filled text similar to BLOCKQUOTE. +\# +\# If a block epigraph contains more than one para, ALL paras of +\# the epigraph must be preceded by PP. Otherwise, PP is optional. +\# +.MAC EPIGRAPH END +. nr #PP_STYLE 2 +. nr #Q_PP 0 +. if \\n[#LINENUMBERS]=1 \{\ +. NUMBER_LINES OFF +. nr #LINENUMBERS 2 +. \} +. if \\n[#START] \{\ +. if \\n[#PRINT_STYLE]=1 \ +. if \\n[#AUTHOR_LINES]=1 .sp \\n[#DOC_LEAD]u +. \} +. ie '\\$1'' \{\ +. nr #EPIGRAPH 1 +. ev EPIGRAPH +. nr #IN_DIVER 1 +. ll \\n[#L_LENGTH]u +. ta \\n[.l]u +. CHECK_INDENT +. if \\n[#COLUMNS] \{\ +. ie \\n[#START] \{\ +. ll \\n[#DOC_L_LENGTH]u +. ta \\n[.l]u +. \} +. el \{\ +. ll \\n[#COL_L_LENGTH]u +. ta \\n[.l]u +. \} +. \} +. CENTER +. if \\n[#PRINT_STYLE]=1 \{\ +. fam \\*[$TYPEWRITER_FAM] +. ft R +. if '\\*[$EPI_FT]'I' .FT I +. ps \\*[$TYPEWRITER_PS] +. ie \\n[#SINGLE_SPACE] .vs \\n[#DOC_LEAD]u +. el .vs \\n[#DOC_LEAD]u/2u +. nr #EPI_LEAD \\n[#LEAD] +. nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD] +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. FAMILY \\*[$EPI_FAM] +. FT \\*[$EPI_FT] +. ps \\n[#DOC_PT_SIZE]u\\*[$EPI_SIZE_CHANGE] +. if \\n[#EPI_COLOR]=1 \{\ +. nf +\m[\\*[$EPI_COLOR]] +. EOL +. \} +. vs \\n[.ps]u+\\n[#EPI_AUTOLEAD]u +. nr #EPI_LEAD \\n[#LEAD] +. nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD] +. \} +. di EPI_TEXT +. nr #DIVERSIONS_HY_MARGIN (p;\\n[.ps]u*2.75)/1000 +. HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p +. hy 14 +. nr #EPI_ACTIVE 1 +. \} +. el \{\ +. ie '\\$1'BLOCK' \{\ +. nr #EPIGRAPH 2 +. ev EPIGRAPH +. evc 0 +. ie \\n[#START] \{\ +. ie \\n[#COLUMNS] \{\ +. ie r#EPI_OFFSET_VALUE \ +. ll \ +\\n[#L_LENGTH_FOR_EPI]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u)) +. el \ +. ll \ +\\n[#L_LENGTH_FOR_EPI]u-(\\*[$EPI_OFFSET_VALUE]u*2u) +. ta \\n[.l]u +. \} +. el \{\ +. ie r#EPI_OFFSET_VALUE \ +. ll \ +\\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u)) +. el \ +. ll \\n[#L_LENGTH]u-(\\*[$EPI_OFFSET_VALUE]*2u) +. ta \\n[.l]u +. \} +. \} +. el \{\ +. ie r#EPI_OFFSET_VALUE \ +. ll \ +\\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u)) +. el \ +. ll \\n[#L_LENGTH]u-(\\*[$EPI_OFFSET_VALUE]*2u) +. ta \\n[.l]u +. if \\n[#COLUMNS] \{\ +. ie r#EPI_OFFSET_VALUE \ +. ll \ +\\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u)) +. el \ +. ll \\n[#COL_L_LENGTH]u-(\\*[$EPI_OFFSET_VALUE]*2u) +. ta \\n[.l]u +. \} +. CHECK_INDENT +. \} +. if \\n[#PRINT_STYLE]=1 \{\ +. fam \\*[$TYPEWRITER_FAM] +. ft R +. if '\\*[$EPI_FT]'I' .FT I +. ps \\*[$TYPEWRITER_PS] +. ie \\n[#SINGLE_SPACE] .vs \\n[#DOC_LEAD]u +. el .vs \\n[#DOC_LEAD]u/2u +. QUAD LEFT +. HY OFF +. nr #EPI_LEAD \\n[#LEAD] +. nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD] +. di EPI_TEXT +. nr #EPI_ACTIVE 1 +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. FAMILY \\*[$EPI_FAM] +. FT \\*[$EPI_FT] +. ps \\n[#DOC_PT_SIZE]u\\*[$EPI_SIZE_CHANGE] +. if \\n[#EPI_COLOR]=1 \{\ +. nf +\m[\\*[$EPI_COLOR]] +. EOL +. \} +. vs \\n[.ps]u+\\n[#EPI_AUTOLEAD]u +. QUAD \\*[$EPI_QUAD] +. nr #DIVERSIONS_HY_MARGIN (p;\\n[.ps]u*2.75)/1000 +. HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p +. hy 14 +. nr #EPI_LEAD \\n[#LEAD] +. nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD] +. di EPI_TEXT +. nr #EPI_ACTIVE 1 +. \} +. \} +. el .DO_EPIGRAPH +. \} +.END +\# +\# DO EPIGRAPH +\# ----------- +\# *Arguments: +\# <none> +\# *Function: +\# Ends diversion started in EPIGRAPH. Makes spacing +\# adjustments to compensate for the difference between epigraph +\# leading and overall document leading, so that the bottom of +\# the pages remain flush. +\# *Notes: +\# In addition to its usual place at the beginning of a +\# document, EPIGRAPH may also be used after HEAD. +\# +.MAC DO_EPIGRAPH END +. br +. di +. rr #IN_DIVER +. if \\n[#RESET_FN_COUNTERS]=2 \{\ +. if !\\n[#FN_COUNT]=1 \{\ +. if ((\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS])+\\n[#DIVER_DEPTH])>(\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS]) \{\ +. DIVER_FN_2_POST +. rr #RESET_FN_COUNTERS +. \} +. \} +. \} +. nr #SAVED_FN_NUMBER \\n[#FN_NUMBER] +. nr #DONE_ONCE 0 1 +. REMOVE_INDENT +. ev +. nr #EPI_DEPTH \\n[#DIVER_DEPTH]-\\n[#EPI_LEAD] +. nr #EPI_LINES \\n[#EPI_DEPTH]/\\n[#EPI_LEAD] +. ie \\n[#START] \{\ +. if !\\n[#NO_SHIM] .RLD \\n[#SHIM]u +. nr #EPI_WHITESPACE (\\n[#DOC_LEAD]*\\n[#EPI_LINES])-\\n[#EPI_DEPTH] +. while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\ +. nr #EPI_WHITESPACE -\\n[#DOC_LEAD] +. \} +. if \\n[#PRINT_STYLE]=1 \ +. if !\\n[#SINGLE_SPACE]=1 .ALD \\n[#DOC_LEAD]u +. if \\n[#PRINT_STYLE]=2 \{\ +. ie !\\n[#DOC_TYPE]=2 .RLD \\n[#DOC_LEAD]u +. el \{\ +. ie '\\*[$CHAPTER_TITLE]'' .RLD \\n[#DOC_LEAD]u +. el .if '\\*[$CHAPTER]'' .RLD \\n[#DOC_LEAD]u +. \} +. if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \ +. ALD \\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u) +. if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \ +. ALD \ +\\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u +. \} +. \} +. el \{\ +. ie \\n[#EPI_DEPTH]<\\n[#TRAP_DISTANCE] \{\ +. nr #EPI_FITS 1 +. nr #EPI_WHITESPACE (\\n[#DOC_LEAD]*\\n[#EPI_LINES])-\\n[#EPI_DEPTH] +. while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\ +. nr #EPI_WHITESPACE -\\n[#DOC_LEAD] +. \} +. ie \\n[#PRINT_STYLE]=1 \ +. ALD \\n[#DOC_LEAD]u/2u +. el \{\ +. if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \ +. ALD \ +\\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u) +. if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \ +. ALD \ +\\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u +. \} +. if \\n[#DIVER_FN]=2 .rr #DIVER_FN +. \} +. el \{\ +. nr #EPI_LINES_TO_TRAP 0 1 +. while \\n[#EPI_LEAD]*\\n+[#EPI_LINES_TO_TRAP]<\\n[#TRAP_DISTANCE] \{\ +. nr #LOOP 1 +. \} +. nr #EPI_LINES_TO_TRAP -1 +. nr #EPI_WHITESPACE \ +(\\n[#EPI_LINES_TO_TRAP]*\\n[#DOC_LEAD])-(\\n[#EPI_LINES_TO_TRAP]*\\n[#EPI_LEAD]) +. while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\ +. nr #EPI_WHITESPACE -\\n[#DOC_LEAD] +. \} +. if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \ +. ALD \\n[#EPI_WHITESPACE]u +. if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \ +. ALD \\n[#EPI_WHITESPACE]u-\\n[#DOC_LEAD]u +. \} +. \} +. SET_EPI_OFFSET +. nf +. EPI_TEXT +. br +. ie \\n[#START] \{\ +. if \\n[#PRINT_STYLE]=1 .SHIM_1 +. if \\n[#PRINT_STYLE]=2 \{\ +. if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \ +. ALD \\n[#EPI_WHITESPACE]u/2u +. if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \ +. ALD (\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u +. SHIM +. \} +. \} +. el \{\ +. rr #EPI_ACTIVE +. ie \\n[#EPI_FITS] \{\ +. ie \\n[#FN_FOR_EPI] \{\ +. nr #EPI_LINES_TO_END 1 +. nr #EPI_WHITESPACE \ +(\\n[#EPI_LINES_TO_END]*\\n[#DOC_LEAD])-(\\n[#EPI_LINES_TO_END]*\\n[#EPI_LEAD]) +. while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\ +. nr #EPI_WHITESPACE -\\n[#DOC_LEAD] +. \} +. ALD \\n[#EPI_WHITESPACE]u-(\\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u) +. \} +. el \{\ +. ie \\n[#PRINT_STYLE]=1 \ +. SHIM_1 +. el \{\ +. if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \ +. ALD \\n[#EPI_WHITESPACE]u/2u +. if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \ +. ALD (\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u +. \} +. \} +. SHIM +. \} +. el \{\ +. nr #EPI_LINES_TO_END \\n[#EPI_LINES]-\\n[#EPI_LINES_TO_TRAP] +. if \\n[#LOOP] .nr #EPI_LINES_TO_END +1 +. rr #LOOP +. nr #EPI_WHITESPACE \ +(\\n[#EPI_LINES_TO_END]*\\n[#DOC_LEAD])-(\\n[#EPI_LINES_TO_END]*\\n[#EPI_LEAD]) +. while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\ +. nr #EPI_WHITESPACE -\\n[#DOC_LEAD] +. \} +. ALD \\n[#EPI_WHITESPACE]u-(\\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u) +. if \\n[#PRINT_STYLE]=1 \{\ +. if !\\n[#SINGLE_SPACE] \{\ +. nr #EPI_LINES_EVEN \\n[#EPI_LINES_TO_END]%2 +. ie \\n[#EPI_LINES_EVEN] .ALD .5v +. el .RLD .5v +. rr #EPI_LINES_EVEN +. \} +. \} +. \} +. \} +. nr #PP_STYLE 1 +. rr #EPI_FITS +. ALD \\n[#DOC_LEAD]u +. QUAD \\*[$DOC_QUAD] +. po \\n[#L_MARGIN]u +. if \\n[#COLUMNS] \{\ +. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u +. nr #L_MARGIN \\n[.o] +. \} +. if \\n[#START] \{\ +. if \\n[#COLUMNS] \{\ +. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u +. nr #L_MARGIN \\n[.o] +. mk dc +. \} +. \} +. if \\n[#LINENUMBERS]=2 \{\ +. NUMBER_LINES RESUME +. nr #LINENUMBERS 1 +. \} +.END +\# +.MAC SET_EPI_OFFSET END +. if \\n[#EPIGRAPH]=1 \{\ +. po \\n[#L_MARGIN]u +. if \\n[#COLUMNS] \{\ +. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u +. nr #L_MARGIN \\n[.o] +. \} +. \} +. if \\n[#EPIGRAPH]=2 \{\ +. ie !\\n[#EPI_OFFSET_VALUE]=0 \ +. nr #EPI_OFFSET \ +\\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE]) +. el \ +. if !'\\*[$EPI_OFFSET_VALUE]'' \ +. nr #EPI_OFFSET \\n[#L_MARGIN]+\\*[$EPI_OFFSET_VALUE] +. if \\n[#COLUMNS] \{\ +. ie !\\n[#EPI_OFFSET_VALUE]=0 \ +. nr #EPI_OFFSET \ +\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE]) +. el \ +. if !'\\*[$EPI_OFFSET_VALUE]'' \ +. nr #EPI_OFFSET \ +\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$EPI_OFFSET_VALUE] +. \} +. if !'\\$0'GET_EPI_OFFSET' \ +. if !\\n[#EPI_OFFSET]=0 .po \\n[#EPI_OFFSET]u +. \} +.END +. +.ALIAS GET_EPI_OFFSET SET_EPI_OFFSET +\# +\# ==================================================================== +\# +\# +++FINIS MACRO+++ +\# +\# FINIS +\# ----- +\# *Arguments: +\# <none> +\# *Function: +\# Deposits --END-- at the end of a document. +\# +.MAC FINIS END +. if !\\n[@TOP] \{\ +. if \\n[.t]<=2v \{\ +. tm1 "[mom]: '\\n[.F]': Insufficient room to print \\$0 on last page. +. return +. \} +. \} +. br +. ev FINIS +. evc 0 +. if \\n[#TAB_ACTIVE] .TQ +. if \\n[#INDENT_ACTIVE] .IQ CLEAR +. nr #EM_ADJUST (1m/8) +. if \\n[#COLUMNS] \{\ +. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u +. nr #L_MARGIN \\n[.o] +. \} +. ALD \\n[#DOC_LEAD]u +. CENTER +. if \\n[#FINIS_STRING_CAPS]=1 .CAPS +. if \\n[#PRINT_STYLE]=1 \{\ +. ie !\\n[#FINIS_NO_DASHES] .PRINT "--\\*[$FINIS_STRING]-- +. el .PRINT "\\*[$FINIS_STRING] +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. if \\n[#FINIS_COLOR]=1 .COLOR \\*[$FINIS_COLOR] +. ie !\\n[#FINIS_NO_DASHES] .ds $FINIS_DASH \ +\v'-\\n[#EM_ADJUST]u'\[em]\v'+\\n[#EM_ADJUST]u' +. el .rm $FINIS_DASH +. PRINT \ +\\*[$FINIS_DASH]\\*[$FINIS_STRING]\\*[$FINIS_DASH]\c +. \} +. EL +. if \\n[#FINIS_COLOR]=1 .gcolor +. if \\n[#FINIS_STRING_CAPS]=1 .CAPS OFF +. ev +. pdfsync +.END +\# +.MAC FINIS_STRING_CAPS END +. ie '\\$1'' .nr #FINIS_STRING_CAPS 1 +. el .nr #FINIS_STRING_CAPS 0 +.END +. +.ALIAS FINIS_CAPS FINIS_STRING_CAPS +\# +.MAC FINIS_NO_DASHES END +. nr #FINIS_NO_DASHES 1 +.END +\# +\# ==================================================================== +\# +\# +++HEADERS/FOOTERS+++ +\# +\# Define a string so that the current page number can be incorporated +\# into the strings for hdrftr left, right, and center. NOTE: This is +\# not the same thing as using the shortform # in hdrftr strings. +\# +.ds PAGE# \En[#PAGENUMBER] +.ALIAS SLIDE# PAGE# +\# +.MAC RESTORE_SPACE END +. if !\\n[#START] .vpt 0 +. if \\n[@TOP] \{\ +. ch RR_@TOP +. rr @TOP +. \} +. if \\n[#NEWPAGE] .rr #NEWPAGE +. if \\n[.u]=1 .nr #FILLED 1 +. nf +. rs +. nop \& +. sp -1 +. if \\n[#FILLED] \{\ +. fi +. rr #FILLED +. \} +. if !\\n[#START] .vpt +.END +\# +\# HDRFTR RULE GAP +\# --------------- +\# *Argument: +\# <amount of space between header/footer and header/footer rule> +\# *Function: +\# Creates or modifies register #HDRFTR_RULE_GAP to hold amount +\# of space between header/footer and header/footer rule. +\# *Notes: +\# Default is 4p. +\# +.MAC HDRFTR_RULE_GAP END +. nr #HDRFTR_RULE_GAP (\\$1) +. if '\\$0'HEADER_RULE_GAP' \ +. nr #HEADER_RULE_GAP \\n[#HDRFTR_RULE_GAP] +. if '\\$0'FOOTER_RULE_GAP' \ +. nr #FOOTER_RULE_GAP \\n[#HDRFTR_RULE_GAP] +.END +\# +\# HDRFTR LEFT +\# ----------- +\# *Argument: +\# <what to put in the left position of page header/footers> +\# *Function: +\# Creates or modifies string $HDRFTR_LEFT. +\# Creates register #USER_DEF_HDRFTR_LEFT, which, if 1, +\# overrides the $HDRFTR_LEFT string created by default +\# in DEFAULTS. +\# *Notes: +\# Especially useful if doc has more than one author, and a list +\# of authors by last name is desired in header/footers. +\# Default is author. +\# +\# If the argument is the # character, simply prints the current +\# page number. +\# +\# If the user wants to incorporate the page number into the string, +\# \*[PAGE#] must be used. For example, if the user wants to put +\# an ellipsis before the page number in the string, s/he should use +\# ...\*[PAGE#], not ...# +\# +.MAC HDRFTR_LEFT END +. nr #USER_DEF_HDRFTR_LEFT 1 +. ds $HDRFTR_LEFT \\$1 +.END +\# +\# HDRFTR <POSITION> CAPS AND SMALLCAPS +\# ------------------------------------ +\# *Argument: +\# <none> | <anything> +\# *Function: +\# Turns capitalisation of $HDRFTR_<POSITION> on or off. +\# *Notes: +\# Default for RIGHT (ie AUTHOR) is on. +\# +.MAC CAPS_SMALLCAPS_WARNING END +. tm1 "[mom]: At line \\n[.c], both CAPS and SMALLCAPS have been enabled for HEADER_\\$1. +. tm1 " CAPS takes precedence. +.END +. +.MAC _HDRFTR_CAPS END +. ds $HDR_FTR \\$0 +. substring $HDR_FTR 0 5 \" HEADER or FOOTER +. ds POSITION \\$0 +. substring POSITION 7 7 +. if '\\*[POSITION]'L' .ds POSITION LEFT +. if '\\*[POSITION]'C' .ds POSITION CENTER +. if '\\*[POSITION]'R' .ds POSITION RIGHT +. if \\n[#HDRFTR_\\*[POSITION]_SMALLCAPS]=1 \ +. CAPS_SMALLCAPS_WARNING \\*[POSITION] +. ie '\\$1'' .nr #HDRFTR_\\*[POSITION]_CAPS 1 +. el \{\ +. nr #HDRFTR_\\*[POSITION]_CAPS 0 +. ds $HDRFTR_\\*[POSITION]_SIZE_CHANGE +0 +. \} +.END +. +.MAC _HDRFTR_SMALLCAPS END +. ds $HDR_FTR \\$0 +. substring $HDR_FTR 0 5 \" HEADER or FOOTER +. ds POSITION \\$0 +. substring POSITION 7 7 +. if '\\*[POSITION]'L' .ds POSITION LEFT +. if '\\*[POSITION]'C' .ds POSITION CENTER +. if '\\*[POSITION]'R' .ds POSITION RIGHT +. if \\n[#HDRFTR_\\*[POSITION]_CAPS]=1 \ +. CAPS_SMALLCAPS_WARNING \\*[POSITION] +. ie '\\$1'' .nr #HDRFTR_\\*[POSITION]_SMALLCAPS 1 +. el \ +. nr #HDRFTR_\\*[POSITION]_SMALLCAPS 0 +.END +\# +\# HDRFTR CENTER +\# ------------- +\# *Argument: +\# <what to put in the centre position of page header/footers> +\# *Function: +\# Creates or modifies string $HDRFTR_CENTER. +\# Creates register #USER_DEF_HDRFTR_CENTER, which, if 1, +\# overrides the $HDRFTR_CENTER string created by default +\# in COPYSTYLE. +\# *Notes: +\# Default is document type if DOCTYPE NAMED, Chapter # if DOCTYPE +\# CHAPTER, draft and revision number if COPYSTYLE DRAFT. +\# +\# If the argument is the # character, simply prints the current +\# page number. +\# +\# If the user wants to incorporate the page number into the string, +\# \*[PAGE#] must be used. For example, if the user wants to put +\# an ellipsis before the page number in the string, s/he should use +\# ...\*[PAGE#], not ...# +\# +.MAC HDRFTR_CENTER END +. nr #USER_DEF_HDRFTR_CENTER 1 +. if '\\$0'HEADER_CENTER' \{\ +. ds $HDRFTR_CENTER_OLD \\*[$HDRFTR_CENTER] +. ds $HDRFTR_CENTER_NEW \\$1 +. \} +. if '\\$0'FOOTER_CENTRE' \{\ +. ds $HDRFTR_CENTER_OLD \\*[$HDRFTR_CENTER] +. ds $HDRFTR_CENTER_NEW \\$1 +. \} +. ie '\\$1'TOC' .ds $TOC_HDRFTR_CENTER \\$2 +. el .ds $HDRFTR_CENTER \\$1 +.END +\# +\# HDRFTR CENTER CAPS AND SMALLCAPS +\# -------------------------------- +\# *Argument: +\# <none> | <anything> +\# *Function: +\# Turns capitalisation of $HDRFTR_CENTER (typically, doctype of +\# the document) on or off. +\# *Notes: +\# Default is on. +\# +.MAC HDRFTR_CENTER_SMALLCAPS END +. if \\n[#HDRFTR_CENTER_SMALLCAPS]=1 \ +. CAPS_SMALLCAPS_WARNING CENTER +. ie '\\$1'' .nr #HDRFTR_CENTER_SMALLCAPS 1 +. el \ +. nr #HDRFTR_CENTER_SMALLCAPS 0 +.END +\# +\# HDRFTR CENTER PADDING +\# --------------------- +\# *Argument: +\# LEFT | RIGHT <amount of padding to put left or right of hdrftr +\# center string> +\# *Function: +\# Creates or modifies registers #HDRFTR_CTR_PAD_LEFT or +\# #HDRFTR_CTR_PAD_RIGHT. +\# *Notes: +\# By default, the HDRFTR_CENTER string is centered on the doc +\# line length. Long titles or long author names can screw up +\# visual centering, or create overprints. This macro allows the +\# user to pad the center string by the specified amount of space +\# to fix these problems. +\# +\# A unit of measure is required. +\# +.MAC HDRFTR_CENTER_PAD END +. if '\\$1'LEFT' .nr #HDRFTR_CTR_PAD_LEFT (\\$2) +. if '\\$1'RIGHT' .nr #HDRFTR_CTR_PAD_RIGHT (\\$2) +.END +\# +\# SWITCH HDRFTR CENTER PADDING SIDE (support macro) +\# ------------------------------------------------- +\# *Argument: +\# <none> +\# *Function: +\# Switches the padding side of hdrftr center padding. +\# *Notes: +\# Required to keep spacing around hdrftr string constant +\# in recto/verso documents. +\# +.MAC SWITCH_HDRFTR_CENTER_PAD END +. nr #HDRFTR_CTR_PAD_TMP \\n[#HDRFTR_CTR_PAD_LEFT] +. HDRFTR_CENTER_PAD LEFT \\n[#HDRFTR_CTR_PAD_RIGHT]u +. HDRFTR_CENTER_PAD RIGHT \\n[#HDRFTR_CTR_PAD_TMP]u +.END +\# +\# HDRFTR RIGHT +\# ------------ +\# *Argument: +\# <what to put in the right position of page header/footers> +\# *Function: +\# Creates or modifies string $HDRFTR_RIGHT. +\# Creates register #USER_DEF_HDRFTR_RIGHT, which, if 1, +\# overrides the $HDRFTR_RIGHT string created by default +\# in DEFAULTS. +\# *Notes: +\# Default is document title. +\# +\# If the argument is the # character, simply prints the current +\# page number. +\# +\# If the user wants to incorporate the page number into the string, +\# \*[PAGE#] must be used. For example, if the user wants to put +\# an ellipsis before the page number in the string, s/he should use +\# ...\*[PAGE#], not ...# +\# +.MAC HDRFTR_RIGHT END +. nr #USER_DEF_HDRFTR_RIGHT 1 +. ds $HDRFTR_RIGHT \\$1 +.END +\# +\# HDRFTR RIGHT CAPS AND SMALLCAPS +\# ------------------------------- +\# *Argument: +\# <none> | <anything> +\# *Function: +\# Turns capitalisation of $HDRFTR_RIGHT (typically, the title of +\# the document) on or off. +\# *Notes: +\# Default is on. +\# +.MAC HDRFTR_RIGHT_SMALLCAPS END +. if \\n[#HDRFTR_RIGHT_SMALLCAPS]=1 \ +. CAPS_SMALLCAPS_WARNING RIGHT +. ie '\\$1'' .nr #HDRFTR_RIGHT_SMALLCAPS 1 +. el \ +. nr #HDRFTR_RIGHT_SMALLCAPS 0 +.END +\# +\# HDRFTR RULE +\# ----------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# If invoked via the alias HDRFTR_RULE_INTERNAL in HDRFTR, prints a rule +\# under the header/over the footer. Otherwise, turns HDRFTR_RULE +\# on or off. +\# +.MAC HDRFTR_RULE END +. if r #HEADERS_ON \ +. if \\n[#HEADERS_ON]=1 .nr #HDRFTR_RULE_GAP \\n[#HEADER_RULE_GAP] +. if r #FOOTERS_ON \ +. if \\n[#FOOTERS_ON]=1 .nr #HDRFTR_RULE_GAP \\n[#FOOTER_RULE_GAP] +. if '\\$0'HDRFTR_RULE_INTERNAL' \{\ +. ie \\n[#USERDEF_HDRFTR] \{\ +. nr #CAP_HEIGHT_ADJUST \\n[#HDRFTR_HEIGHT] +. if \\n[#HEADERS_ON] \{\ +. rt \\n[y]u +. ALD \\n[#HDRFTR_RULE_GAP]u +. nr #HDRFTR_RULE_WEIGHT \\n[#HEADER_RULE_WEIGHT] +. nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#HEADER_RULE_WEIGHT_ADJ] +. \} +. if \\n[#FOOTERS_ON] \{\ +. rt \\n[y]u +. RLD \ +\\n[#HDRFTR_RULE_GAP]u+\\n[#CAP_HEIGHT_ADJUST]u+\\n[#FOOTER_RULE_WEIGHT]u +. nr #HDRFTR_RULE_WEIGHT \\n[#FOOTER_RULE_WEIGHT] +. nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#FOOTER_RULE_WEIGHT_ADJ] +. \} +. ie \\n[#HDRFTR_RULE_COLOR]=1 \{\ +\m[\\*[$HDRFTR_RULE_COLOR]]\ +\D't \\n[#HDRFTR_RULE_WEIGHT]u'\ +\h'|0'\ +\v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\ +\D'l \\n[#DOC_L_LENGTH]u 0'\ +\D't \\n[#RULE_WEIGHT]u'\ +\h'-\\n[#RULE_WEIGHT]u'\ +\m[] +. \} +. el \{\ +\D't \\n[#HDRFTR_RULE_WEIGHT]u'\ +\h'|0'\ +\v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\ +\D'l \\n[#DOC_L_LENGTH]u 0'\ +\D't \\n[#RULE_WEIGHT]u'\ +\h'-\\n[#RULE_WEIGHT]u' +. \} +. br +. \} +. el \{\ +. if \\n[#PRINT_STYLE]=1 .nr #CAP_HEIGHT_ADJUST \\n[#CAP_HEIGHT] +. if \\n[#PRINT_STYLE]=2 \{\ +. ie \\n[#LEFT_CAP_HEIGHT]>\\n[#CENTER_CAP_HEIGHT] \ +. nr #CAP_HEIGHT_ADJUST \\n[#LEFT_CAP_HEIGHT] +. el .nr #CAP_HEIGHT_ADJUST \\n[#CENTER_CAP_HEIGHT] +. ie \\n[#CAP_HEIGHT_ADJUST]>\\n[#RIGHT_CAP_HEIGHT] \ +. nr #CAP_HEIGHT_ADJUST \\n[#CAP_HEIGHT_ADJUST] +. el .nr #CAP_HEIGHT_ADJUST \\n[#RIGHT_CAP_HEIGHT] +. \} +. if \\n[#HEADERS_ON] \{\ +. rt \\n[y]u +. ALD \\n[#HDRFTR_RULE_GAP]u +. nr #HDRFTR_RULE_WEIGHT \\n[#HEADER_RULE_WEIGHT] +. nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#HEADER_RULE_WEIGHT_ADJ] +. \} +. if \\n[#FOOTERS_ON] \{\ +. rt \\n[y]u +. RLD \ +\\n[#HDRFTR_RULE_GAP]u+\\n[#CAP_HEIGHT_ADJUST]u+\\n[#FOOTER_RULE_WEIGHT]u +. nr #HDRFTR_RULE_WEIGHT \\n[#FOOTER_RULE_WEIGHT] +. nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#FOOTER_RULE_WEIGHT_ADJ] +. \} +. ie \\n[#HDRFTR_RULE_COLOR]=1 \{\ +\m[\\*[$HDRFTR_RULE_COLOR]]\ +\D't \\n[#HDRFTR_RULE_WEIGHT]u'\ +\h'|0'\ +\v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\ +\D'l \\n[#DOC_L_LENGTH]u 0'\ +\D't \\n[#RULE_WEIGHT]u'\ +\h'-\\n[#RULE_WEIGHT]u'\ +\m[] +. \} +. el \{\ +\D't \\n[#HDRFTR_RULE_WEIGHT]u'\ +\h'|0'\ +\v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\ +\D'l \\n[#DOC_L_LENGTH]u 0'\ +\D't \\n[#RULE_WEIGHT]u'\ +\h'-\\n[#RULE_WEIGHT]u' +. \} +. br +. \} +. \} +. if '\\$0'HEADER_RULE' \{\ +. ie '\\$1'' \{\ +. nr #HEADER_RULE 1 +. nr #HDRFTR_RULE 1 +. \} +. el \{\ +. nr #HEADER_RULE 0 +. nr #HDRFTR_RULE 0 +. \} +. \} +. if '\\$0'FOOTER_RULE' \{\ +. ie '\\$1'' \{\ +. nr #FOOTER_RULE 1 +. nr #HDRFTR_RULE 1 +. \} +. el \{\ +. nr #FOOTER_RULE 0 +. nr #HDRFTR_RULE 0 +. \} +. \} +. if '\\$0'HDRFTR_RULE' \{\ +. ie '\\$1'' .nr #HDRFTR_RULE 1 +. el .nr #HDRFTR_RULE 0 +. \} +.END +. +.ALIAS HDRFTR_RULE_INTERNAL HDRFTR_RULE +\# +\# HDRFTR PLAIN +\# ------------ +\# *Arguments: +\# <none> +\# *Function: +\# Sets the family, font, and point size of all strings in +\# header/footers to the same family and point size as running +\# text. Font for the header/footer becomes roman throughout. +\# +.MAC HDRFTR_PLAIN END +. nr #HDRFTR_PLAIN 1 +. rm $HDRFTR_FAMILY +. rm #HDRFTR_PT_SIZE +. rm $HDRFTR_COLOR +. rm $HDRFTR_LEFT_FAMILY +. rm $HDRFTR_LEFT_FONT +. rm $HDRFTR_LEFT_SIZE_CHANGE +. rr #HDRFTR_LEFT_CAPS +. rr #HDRFTR_LEFT_SMALLCAPS +. rr #HDRFTR_LEFT_COLOR +. rm $HDRFTR_CENTER_FAMILY +. rm $HDRFTR_CENTER_FONT +. rm $HDRFTR_CENTER_SIZE_CHANGE +. rr #HDRFTR_CENTER_CAPS +. rr #HDRFTR_CENTER_SMALLCAPS +. rr #HDRFTR_CENTER_COLOR +. rm $HDRFTR_RIGHT_FAMILY +. rm $HDRFTR_RIGHT_FONT +. rm $HDRFTR_RIGHT_SIZE_CHANGE +. rr #HDRFTR_RIGHT_CAPS +. rr #HDRFTR_RIGHT_SMALLCAPS +. rr #HDRFTR_RIGHT_COLOR +.END +\# +\# SWITCH HDRFTR +\# ------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Creates or modifies register #SWITCH_HDRFTR, used to switch +\# default location of HDRFTR_LEFT and HDRFTR_RIGHT. +\# *Notes: +\# Default is OFF. +\# +\# Typically, the author string appears at the left of header/footers, +\# and the title string appears at the right. This switches the +\# location of the two. Useful in conjunction with RECTO_VERSO to tweak +\# switches on alternate pages to come out as the user wishes. The +\# assumption of RECTO_VERSO is that the first page of the document +\# (recto) is odd, and even though it has no header/footer, if it did +\# have one, it would print as AUTHOR...CENTER...TITLE (or whatever +\# strings the user has supplied for HDRFTR_LEFT/RIGHT), meaning that +\# the next page, which does have a header/footer, will come out as +\# TITLE...CENTER...AUTHOR (or whatever strings the user has supplied +\# for HDRFTR_LEFT/RIGHT). SWITCH_HDRFTRS allows the user to get the +\# desired string in the desired place on the desired recto/verso page. +\# +.MAC SWITCH_HDRFTR END +. ie '\\$1'' .nr #SWITCH_HDRFTR 1 +. el .nr #SWITCH_HDRFTR 0 +.END +\# +\# USER DEFINED HDRFTR RECTO +\# ------------------------- +\# *Arguments: +\# L | LEFT | C | CENTER | CENTER | R | RIGHT <hdrftr_recto_string> +\# *Function: +\# Toggles #USERDEF_HDRFTR on, stores quad as #USERDEF_HDRFTR_RECTO_QUAD, +\# stores string in $USERDEF_HDRFTR_RECTO. +\# *Notes: +\# For use when users don't want 3-part headers/footers, but rather +\# want to design their own headers/footers and need different +\# headers/footers on recto and verso pages. Using just +\# HEADER_RECTO or FOOTER_RECTO, even when recto/verso is not on, +\# allows users to design their own headers/footers for doc pages. +\# +.MAC HDRFTR_RECTO END +. nr #USERDEF_HDRFTR 1 +. ds $QUAD_TYPE \\$1 +. substring $QUAD_TYPE 0 0 +. if '\\*[$QUAD_TYPE]'L' .nr #USERDEF_HDRFTR_RECTO_QUAD 1 +. if '\\*[$QUAD_TYPE]'C' .nr #USERDEF_HDRFTR_RECTO_QUAD 2 +. if '\\*[$QUAD_TYPE]'R' .nr #USERDEF_HDRFTR_RECTO_QUAD 3 +. shift +. ie '\\$1'CAPS' \{\ +. nr #HDRFTR_RECTO_CAPS 1 +. ds $USERDEF_HDRFTR_RECTO \\$2 +. \} +. el .ds $USERDEF_HDRFTR_RECTO \\$1 +.END +\# +\# USER DEFINED HDRFTR VERSO +\# ------------------------- +\# *Arguments: +\# L | LEFT | C | CENTER | CENTER | R | RIGHT <hdrftr_verso_string> +\# *Function: +\# Toggles #USERDEF_HDRFTR on, stores quad as #USERDEF_HDRFTR_VERSO_QUAD, +\# stores string in $USERDEF_HDRFTR_VERSO. +\# *Notes: +\# For use when users don't want 3-part headers/footers, but rather +\# want to design their own headers/footers and need different +\# headers/footers on recto and verso pages. +\# +.MAC HDRFTR_VERSO END +. nr #USERDEF_HDRFTR 1 +. ds $QUAD_TYPE \\$1 +. if !'\\*[$QUAD_TYPE]'' .substring $QUAD_TYPE 0 0 +. if '\\*[$QUAD_TYPE]'L' .nr #USERDEF_HDRFTR_VERSO_QUAD 1 +. if '\\*[$QUAD_TYPE]'C' .nr #USERDEF_HDRFTR_VERSO_QUAD 2 +. if '\\*[$QUAD_TYPE]'R' .nr #USERDEF_HDRFTR_VERSO_QUAD 3 +. shift +. ie '\\$1'CAPS' \{\ +. nr #HDRFTR_VERSO_CAPS 1 +. ds $USERDEF_HDRFTR_VERSO \\$2 +. \} +. el .ds $USERDEF_HDRFTR_VERSO \\$1 +.END +\# +\# PRINT FOOTER ON FIRST PAGE +\# -------------------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Toggles register #PRINT_FOOTER_ON_PAGE_1 +\# *Notes: +\# Lets user choose whether to print footer on first +\# page of doc. +\# +.MAC FOOTER_ON_FIRST_PAGE END +. ie '\\$1'' .nr #PRINT_FOOTER_ON_PAGE_1 1 +. el .rr #PRINT_FOOTER_ON_PAGE_1 +.END +\# +\# PRINT PAGE NUMBER ON FIRST PAGE +\# ------------------------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Toggles register #PRINT_PAGENUM_ON_PAGE_1 +\# *Notes: +\# Lets user choose whether to print page number on first +\# page of doc and after collate when footers are on or page numbering +\# has been user set at top of page. +\# +.MAC PAGENUM_ON_FIRST_PAGE END +. ie '\\$1'' .nr #PRINT_PAGENUM_ON_PAGE_1 1 +. el .rr #PRINT_PAGENUM_ON_PAGE_1 +.END +\# +\# PRINT HEADER/FOOTER +\# ------------------- +\# *Arguments: +\# <none> +\# *Function: +\# Based on defaults or values entered by user, prints a +\# three-part title at either the top or the bottom of the page. +\# *Notes: +\# Called from within either HEADER or FOOTER. +\# +.MAC PRINT_HDRFTR END +. if \\n[#DOC_TYPE]=4 .nr #SUITE \En[.pn] +. if \\n[#FOOTERS_ON] \{\ +. if \\n[#START_FOR_FOOTERS] \{\ +. rr #START_FOR_FOOTERS +. if \\n[#DOC_TYPE]=5 \{\ +. if !\\n[#HDRFTR_BOTH] .PRINT_USERDEF_HDRFTR +. return +. \} +. if !\\n[#PRINT_FOOTER_ON_PAGE_1] \{\ +. ie !\\n[#HDRFTR_BOTH] .return +. el \{\ +. rr #FOOTERS_ON +. if !\\n[#COLLATE] .nr #HEADERS_ON 1 +. ie \\n[#HEADER_RULE]=1 .HEADER_RULE +. el .HEADER_RULE OFF +. ie \\n[#HDRFTR_BOTH] .HEADER_VERSO \\*[$HDR_VERSO_QUAD] "\\*[$HDR_VERSO_STRING]" +. el .HEADER_RECTO \\*[$HDR_RECTO_QUAD] "\\*[$HDR_RECTO_STRING]" +. return +. \} +. \} +. \} +. \} +. if \\n[#USERDEF_HDRFTR] \{\ +. PRINT_USERDEF_HDRFTR +. return +. \} +. if \\n[#SWITCH_HDRFTR] \{\ +. ds $HDRFTR_TMP_SWITCH \\*[$HDRFTR_LEFT] +. ds $HDRFTR_LEFT \\*[$HDRFTR_RIGHT] +. ds $HDRFTR_RIGHT \\*[$HDRFTR_TMP_SWITCH] +. ds $HDRFTR_TMP_SIZE_CHANGE_SWITCH \\*[$HDRFTR_LEFT_SIZE_CHANGE] +. ds $HDRFTR_LEFT_SIZE_CHANGE \\*[$HDRFTR_RIGHT_SIZE_CHANGE] +. ds $HDRFTR_RIGHT_SIZE_CHANGE \\*[$HDRFTR_TMP_SIZE_CHANGE_SWITCH] +. nr #HDRFTR_TMP_CAPS_SWITCH \\n[#HDRFTR_LEFT_CAPS] +. nr #HDRFTR_LEFT_CAPS \\n[#HDRFTR_RIGHT_CAPS] +. nr #HDRFTR_TMP_SMALLCAPS_SWITCH \\n[#HDRFTR_LEFT_SMALLCAPS] +. nr #HDRFTR_LEFT_SMALLCAPS \\n[#HDRFTR_RIGHT_SMALLCAPS] +. nr #HDRFTR_RIGHT_CAPS \\n[#HDRFTR_TMP_CAPS_SWITCH] +. ds $HDRFTR_TMP_COLOR_SWITCH \\*[$HDRFTR_LEFT_COLOR] +. ds $HDRFTR_LEFT_COLOR \\*[$HDRFTR_RIGHT_COLOR] +. ds $HDRFTR_RIGHT_COLOR \\*[$HDRFTR_TMP_COLOR_SWITCH] +. rr #HDRFTR_TMP_CAPS_SWITCH +. rm $HDRFTR_TMP_SWITCH +. rm $HDRFTR_TMP_SIZE_CHANGE_SWITCH +. rm $HDRFTR_TMP_COLOR_SWITCH +. nr #SWITCH_HDRFTR 0 +. \} +. nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ] +. if \\n[#ENDNOTES] .PAGENUM_STYLE \\*[$EN_PN_STYLE] +. if \\n[#PRINT_STYLE]=1 \{\ +. if \\n[#FOOTERS_ON] \{\ +. di NULL +. SIZESPECS +. nr #LEFT_CAP_HEIGHT \\n[#CAP_HEIGHT] +. di +. \} +. if o .RIGHT +. if e .LEFT +. if \\n[#RECTO_VERSO]=0 .LEFT +. if \\n[#HDRFTR_LEFT_CAPS] .CAPS +. ie '\\*[$HDRFTR_LEFT]'#' .PRINT \\n[#PAGENUMBER] +. el \{\ +. ie !'\\*[$HDRFTR_LEFT]'' .PRINT \\*[$HDRFTR_LEFT] +. el .PRINT \& +. \} +. if \\n[#HDRFTR_LEFT_CAPS] .CAPS OFF +. CENTER +. if \\n[#HDRFTR_CENTER_CAPS] .CAPS +. rt \\n[y]u +. ie '\\*[$HDRFTR_CENTER]'#' .PRINT \ +\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\n[#PAGENUMBER]\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u' +. el \{\ +. ie !'\\*[$HDRFTR_CENTER]'' .PRINT \ +\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\*[$HDRFTR_CENTER]\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u' +. el .PRINT \& +. \} +. if \\n[#HDRFTR_CENTER_CAPS] .CAPS OFF +. if o .LEFT +. if e .RIGHT +. if \\n[#RECTO_VERSO]=0 .RIGHT +. if \\n[#HDRFTR_RIGHT_CAPS] .CAPS +. rt \\n[y]u +. ie '\\*[$HDRFTR_RIGHT]'#' .PRINT \\n[#PAGENUMBER] +. el \{\ +. ie !'\\*[$HDRFTR_RIGHT]'' .PRINT \\*[$HDRFTR_RIGHT] +. el .PRINT \& +. \} +. if \\n[#HDRFTR_RIGHT_CAPS] .CAPS OFF +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. if \\n[#HDRFTR_COLOR]=1 \{\ +. nf +\m[\\*[$HDRFTR_COLOR]] +. \} +. fam \\*[$HDRFTR_LEFT_FAM] +. ft \\*[$HDRFTR_LEFT_FT] +. ps \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_LEFT_SIZE_CHANGE] +. if \\n[#FOOTERS_ON] \{\ +. di NULL +. SIZESPECS +. nr #LEFT_CAP_HEIGHT \\n[#CAP_HEIGHT] +. di +. \} +. if o .LEFT +. if e .RIGHT +. if \\n[#RECTO_VERSO]=0 .LEFT +. if \\n[#HDRFTR_LEFT_SMALLCAPS] .SMALLCAPS +. if \\n[#HDRFTR_LEFT_CAPS] .CAPS +. ie '\\*[$HDRFTR_LEFT]'#' \{\ +. ie \\n[#HDRFTR_LEFT_COLOR]=1 \ +. PRINT \m[\\*[$HDRFTR_LEFT_COLOR]]\\n[#PAGENUMBER]\m[] +. el \ +. PRINT \\n[#PAGENUMBER] +. \} +. el \{\ +. ie !'\\*[$HDRFTR_LEFT]'' \{\ +. ie \\n[#HDRFTR_LEFT_COLOR]=1 \ +. PRINT \m[\\*[$HDRFTR_LEFT_COLOR]]\\*[$HDRFTR_LEFT]\m[] +. el \ +. PRINT \\*[$HDRFTR_LEFT] +. \} +. el .nop \& +. \} +. if \\n[#HDRFTR_LEFT_CAPS] .CAPS OFF +. if \\n[#HDRFTR_LEFT_SMALLCAPS] .SMALLCAPS OFF +. fam \\*[$HDRFTR_CENTER_FAM] +. ft \\*[$HDRFTR_CENTER_FT] +. ps \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_CENTER_SIZE_CHANGE] +. if \\n[#FOOTERS_ON] \{\ +. di NULL +. SIZESPECS +. nr #CENTER_CAP_HEIGHT \\n[#CAP_HEIGHT] +. di +. \} +. CENTER +. if \\n[#HDRFTR_CENTER_SMALLCAPS] .SMALLCAPS +. if \\n[#HDRFTR_CENTER_CAPS] .CAPS +. rt \\n[y]u +. ie '\\*[$HDRFTR_CENTER]'#' \{\ +. ie \\n[#HDRFTR_CENTER_COLOR]=1 .PRINT \ +\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\m[\\*[$HDRFTR_CENTER_COLOR]]\ +\\n[#PAGENUMBER]\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'\m[] +. el .PRINT \ +\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\n[#PAGENUMBER]\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u' +. \} +. el \{\ +. ie !'\\*[$HDRFTR_CENTER]'' \{\ +. ie \\n[#HDRFTR_CENTER_COLOR]=1 .PRINT \ +\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\m[\\*[$HDRFTR_CENTER_COLOR]]\ +\\*[$HDRFTR_CENTER]\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'\m[] +. el .PRINT \ +\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\*[$HDRFTR_CENTER]\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u' +. \} +. el .PRINT \& +. \} +. if \\n[#HDRFTR_CENTER_CAPS] .CAPS OFF +. if \\n[#HDRFTR_CENTER_SMALLCAPS] .SMALLCAPS OFF +. fam \\*[$HDRFTR_RIGHT_FAM] +. ft \\*[$HDRFTR_RIGHT_FT] +. ps \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_RIGHT_SIZE_CHANGE] +. if \\n[#FOOTERS_ON] \{\ +. di NULL +. SIZESPECS +. nr #RIGHT_CAP_HEIGHT \\n[#CAP_HEIGHT] +. di +. \} +. if o .RIGHT +. if e .LEFT +. if \\n[#RECTO_VERSO]=0 .RIGHT +. if \\n[#HDRFTR_RIGHT_SMALLCAPS] .SMALLCAPS +. if \\n[#HDRFTR_RIGHT_CAPS] .CAPS +. rt \\n[y]u +. ie '\\*[$HDRFTR_RIGHT]'#' \{\ +. ie \\n[#HDRFTR_RIGHT_COLOR]=1 \ +. PRINT \m[\\*[$HDRFTR_RIGHT_COLOR]]\\n[#PAGENUMBER]\m[] +. el \ +. PRINT \\n[#PAGENUMBER] +. \} +. el \{\ +. ie !'\\*[$HDRFTR_RIGHT]'' \{\ +. ie \\n[#HDRFTR_RIGHT_COLOR]=1 \ +. PRINT \m[\\*[$HDRFTR_RIGHT_COLOR]]\\*[$HDRFTR_RIGHT]\m[] +. el \ +. PRINT \\*[$HDRFTR_RIGHT] +. \} +. el .PRINT \& +. \} +. if \\n[#HDRFTR_RIGHT_CAPS] .CAPS OFF +. if \\n[#HDRFTR_RIGHT_SMALLCAPS] .SMALLCAPS OFF +. \} +. if \\n[#HDRFTR_RULE] .HDRFTR_RULE_INTERNAL +. br +.END +\# +\# PRINT USER DEFINED HEADER/FOOTER +\# -------------------------------- +\# *Arguments: +\# <none> +\# *Function: +\# Based on defaults or values entered by user, prints a single part +\# (i.e. not 3-part) title at either the top or the bottom of the page. +\# *Notes: +\# Called from within PRINT_HDRFTR. +\# +.MAC PRINT_USERDEF_HDRFTR END +. nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ] +. fc ^ # +. if \\n[#PRINT_STYLE]=2 \{\ +. fam \\*[$HDRFTR_FAM] +. ft R +. ps \\n[#HDRFTR_PT_SIZE]u +. if \\n[#HDRFTR_COLOR]=1 \{\ +. nf +. COLOR \\*[$HDRFTR_COLOR] +. \} +. \} +. ie \\n[#RECTO_VERSO] \{\ +. if o \{\ +. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 .LEFT +. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 .CENTER +. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 .RIGHT +. if \\n[#HDRFTR_RECTO_CAPS]=1 .CAPS +. if '\\n[.ev]'FOOTER' .vs 0 +. PRINT \\*[$USERDEF_HDRFTR_RECTO] +. if '\\n[.ev]'FOOTER' .vs +. if \\n[#HDRFTR_RECTO_CAPS]=1 .CAPS OFF +. EOL +. if \\n[#FOOTERS_ON] \{\ +. di NULL +. SIZESPECS +. nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT] +. di +. \} +. \} +. if e \{\ +. ie !'\\*[$USERDEF_HDRFTR_VERSO]'' \{\ +. if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=1 .LEFT +. if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=2 .CENTER +. if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=3 .RIGHT +. if \\n[#HDRFTR_VERSO_CAPS]=1 .CAPS +. if '\\n[.ev]'FOOTER' .vs 0 +. PRINT \\*[$USERDEF_HDRFTR_VERSO] +. if '\\n[.ev]'FOOTER' .vs +. if \\n[#HDRFTR_VERSO_CAPS]=1 .CAPS OFF +. EOL +. if \\n[#FOOTERS_ON] \{\ +. di NULL +. SIZESPECS +. nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT] +. di +. \} +. \} +. el \{\ +. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 .LEFT +. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 .CENTER +. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 .RIGHT +. if \\n[#HDRFTR_RECTO_CAPS]=1 .CAPS +. if '\\n[.ev]'FOOTER' .vs 0 +. PRINT \\*[$USERDEF_HDRFTR_RECTO] +. if '\\n[.ev]'FOOTER' .vs +. if \\n[#HDRFTR_RECTO_CAPS]=1 .CAPS OFF +. EOL +. if \\n[#FOOTERS_ON] \{\ +. di NULL +. SIZESPECS +. nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT] +. di +. \} +. \} +. \} +. \} +. el \{\ +. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 .LEFT +. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 .CENTER +. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 .RIGHT +. if \\n[#HDRFTR_RECTO_CAPS]=1 .CAPS +. if '\\n[.ev]'FOOTER' .vs 0 +. if !r #SKIP .PRINT \\*[$USERDEF_HDRFTR_RECTO] +. if '\\n[.ev]'FOOTER' .vs +. if \\n[#HDRFTR_RECTO_CAPS]=1 .CAPS OFF +. EOL +. if \\n[#FOOTERS_ON] \{\ +. di NULL +. SIZESPECS +. nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT] +. di +. \} +. \} +. fc +. if \\n[#PRINT_STYLE]=2 \{\ +. ie \\n[#HDRFTR_COLOR]=1 \m[\\*[$HDRFTR_COLOR]] +. el \m[black] +. \} +. if \\n[#HDRFTR_RULE] \ +. HDRFTR_RULE_INTERNAL +.END +\# +\# +++HEADERS+++ +\# +\# HEADERS (off or on) +\# ------------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Turns headers at the top of the page off or on. +\# *Notes: +\# Default is on. +\# +.MAC HEADERS END +. ie '\\$1'' .nr #HEADERS_ON 1 +. el .nr #HEADERS_ON 0 +.END +\# +\# HEADER MARGIN +\# ------------- +\# *Argument: +\# <amount of space between top of page and header> +\# *Function: +\# Creates or modifies register #HEADER_MARGIN to hold amount +\# of space between top of page and header. +\# *Notes: +\# Requires unit of measure. Default is 4P+6p, measured top-of-page +\# to baseline. +\# +.MAC HEADER_MARGIN END +. nr #HEADER_MARGIN (\\$1) +.END +\# +\# HEADER GAP +\# ---------- +\# *Argument: +\# <amount of space between header and running text> +\# *Function: +\# Creates or modifies register #HEADER_GAP to hold amount +\# of space between header and running text. +\# *Notes: +\# Default is 1P+6p. +\# +.MAC HEADER_GAP END +. nr #HEADER_GAP (\\$1) +.END +\# +\# HEADER +\# ------ +\# *Arguments: +\# <none> +\# *Function: +\# Resets margin notes, processes footnote and margin note +\# leftover, takes care of recto-verso, prepares for columns after +\# first, determines whether to flex-space the page,,outputs +\# deferred floats, and does some tbl magic. If headers are +\# enabled, prints header appropriate to DOC_TYPE, PRINTSTYLE, and +\# COPYSTYLE. +\# +.MAC HEADER END +. vpt 0 +. if \\n[#DOC_TYPE]=5 \{\ +. if \\n[#SLIDE_FOOTERS] \{\ +. PRINT_FOOTER +. if \\n[#HDRFTR_BOTH] \ +. HEADER_RECTO \\*[$HDR_RECTO_QUAD] "\\*[$HDR_RECTO_STRING]" +. \} +. \} +. nr flex-spaces 0 +. nr flex +1 +. if \\n[#NEW_DOC_PT_SIZE] .nr #DOC_PT_SIZE \\n[#NEW_DOC_PT_SIZE] +. rr #NEW_DOC_PT_SIZE +. if \\n[#RESET_TRAPS] \{\ +. TRAPS +. if \\n[#REMOVE_ADJ] .nr #DOC_LEAD -\\n[#DOC_LEAD_ADJ] +. \} +. rr #REMOVE_ADJ +. rr #RESET_TRAPS +. MNtop +. rr #FROM_FOOTER +. nr #FROM_HEADER 1 +. nr #LAST_FN_COUNT_FOR_COLS \\n[#FN_COUNT_FOR_COLS] +. if \\n[#FN_DEPTH] .PROCESS_FN_LEFTOVER +. rr #RULED +. if \\n[#RESET_FN_NUMBER] .nr #FN_NUMBER 0 1 +. if !\\n[#DIVERTED] .rr #PREV_FN_DEFERRED +. po \\n[#DOC_L_MARGIN]u +. if \\n[#RECTO_VERSO] \{\ +. if !\\n[#TOC_RV_SWITCH]=2 \{\ +. nr #DOC_LR_MARGIN_TMP \\n[#DOC_L_MARGIN] +. DOC_LEFT_MARGIN \\n[#DOC_R_MARGIN]u +. if \\n[#CROPS] .DOC_LEFT_MARGIN \\n[#DOC_R_MARGIN]u+\\n[cropmarks]u +. DOC_RIGHT_MARGIN \\n[#DOC_LR_MARGIN_TMP]u +. if \\n[#CROPS] .DOC_RIGHT_MARGIN \\n[#DOC_LR_MARGIN_TMP]u-\\n[cropmarks]u +. SWITCH_HDRFTR_CENTER_PAD +. \} +. \} +. ev HEADER +. if \\n[#PAGE_NUM_V_POS]=1 .vs 0 +. sp |\\n[#HEADER_MARGIN]u-1v +. mk y +. ll \\n[#DOC_L_LENGTH]u +. ta \\n[.l]u +. if \\n[#PRINT_STYLE]=1 \{\ +. fam \\*[$TYPEWRITER_FAM] +. ft R +. ps \\*[$TYPEWRITER_PS]\\*[$HDRFTR_SIZE_CHANGE] +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. fam \\*[$HDRFTR_FAM] +. ft R +. ps \\n[#DOC_PT_SIZE]u\\*[$HDRFTR_SIZE_CHANGE] +. \} +. nr #HDRFTR_PT_SIZE \\n[#PT_SIZE] +. if \\n[#CAPS_ON] \{\ +. nr #CAPS_WAS_ON 1 +. CAPS OFF +. \} +. if \\n[#PRINT_STYLE]=1 \{\ +. if \\n[#ENDNOTES]=1 \{\ +.\" Single-spaced endnotes have a different lead +. if \\n[#EN_SINGLESPACE] \{\ +. nr #RESTORE_DOC_LEAD \\n[#DOC_LEAD] +. nr #DOC_LEAD \\n[#EN_LEAD]u +. \} +. \} +. \} +. if !n .nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap' +. sp -1v +. if \\n[#DOC_TYPE]=5 \{\ +. if \\n[#SLIDE_HEADERS] \{\ +. HEADERS +. if \\n[#SLIDE_FOOTERS] \{\ +. FOOTERS off +.\" So rule prints after header on first page +. if !r #SKIP_RULE \{\ +. sp +. if \\n[#HEADER_RULE] .HEADER_RULE +. nr #SKIP_RULE 1 +. \} +. \} +. \} +. \} +. ie \\n[#HEADERS_ON] .PRINT_HDRFTR +. el \{\ +. if \\n[#PAGE_NUM_V_POS]=1 \ +. if \\n[#PAGINATE] .PRINT_PAGE_NUMBER +. \} +. sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u +. if \\n[#PRINT_STYLE]=1 \{\ +. if \\n[#ENDNOTES]=1 \{\ +. if \\n[#EN_SINGLESPACE] \{\ +. nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]u +. rr #RESTORE_DOC_LEAD +. \} +. \} +. \} +. nr #PAGE_TOP \\n[nl] +. ev +.\" PDF boxes +. if \\n[pdfbx-running]=1 \{\ +. if !\\n[pdfbx-div-start] \{\ +. ps \\n[#SIZE_AT_FOOTER]u +. SIZESPECS +. ds pdfbx-cap-adj \\*[$CAP_HEIGHT] +. ps +. sp |\\n[t]u-\\n[#LEAD_AT_FOOTER]u +. sp (\\*[wt\\n[stack]]/2u)+\\*[pdfbx-cap-adj]+\\*[gap\\n[stack]]u +. ch FOOTER \\n[#VFP\\n[stack]]u +. \} +. \} +. po \\n[#L_MARGIN]u +. if \\n[#RECTO_VERSO] .nr #L_MARGIN +\\n[#L_MARGIN_DIFF] +. if \\n[#CAPS_WAS_ON] \{\ +. CAPS +. rr #CAPS_WAS_ON +. \} +. if \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB] +. if \\n[#QUOTE] \{\ +. ie \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB] +. el \{\ +. ie r #\\*[BQ]_OFFSET_VALUE .nr #\\*[BQ]_OFFSET \ +\\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#\\*[BQ]_OFFSET_VALUE]) +. el .nr #\\*[BQ]_OFFSET \\n[#L_MARGIN]+\\*[$\\*[BQ]_OFFSET_VALUE] +. ie \\n[#QUOTE]=1 \{\ +. if !'\\*[$Q_QUAD]'CENTER' \ +. if !'\\*[$Q_QUAD]'RIGHT' \ +. po \\n[#Q_OFFSET]u +. \} +. el .po \\n[#\\*[BQ]_OFFSET]u +. \} +. if !\\n[pdfbx-running]=0 \{\ +. if \\n[#PRINT_STYLE]=2 .sp \\n[#Q_LEAD_DIFF]u +. \} +. \} +. if \\n[#IN_LIST] \ +. po +\\n[#LIST_OFFSET_VALUE]u +. if \\n[#RESET_FN_COUNTERS]=1 \{\ +. rr #RESET_FN_COUNTERS +. PROCESS_FN_IN_DIVER +. nr #FN_COUNT \\n[#SAVED_FN_COUNT] 1 +. if \\n[#COLUMNS]=1 .nr #FN_COUNT_FOR_COLS \\n[#SAVED_FN_COUNT_FOR_COLS] 1 +. ie \\n[#RESET_FN_NUMBER]=1 .nr #FN_NUMBER \\n[#SAVED_FN_NUMBER] 1 +. el .nr #FN_NUMBER \\n[#FN_NUMBER] 1 +. rm FN_IN_DIVER +. if dRUNON_FN_IN_DIVER .rm RUNON_FN_IN_DIVER +. \} +. if \\n[#EPIGRAPH] \{\ +. ie \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB] +. el \{\ +. ie r#EPI_OFFSET_VALUE \ +. nr #EPI_OFFSET \ +\\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE]) +. el \ +. nr #EPI_OFFSET \\n[#L_MARGIN]+\\*[$EPI_OFFSET_VALUE] +. po \\n[#EPI_OFFSET]u +. \} +. \} +. ie \\n[#EPIGRAPH] \{\ +. ie !\\n[#EPI_ACTIVE] \{\ +. ns +. rr #EPI_ACTIVE +. \} +. el \{\ +. ie \\n[#EPI_FITS] .ns +. el .sp \\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u +. \} +. \} +. el .ns +. if \\n[#COLUMNS] \{\ +. nr #FN_COUNT_FOR_COLS 0 1 +. nr #L_MARGIN \\n[#DOC_L_MARGIN] +. if \\n[#RECTO_VERSO] .COLUMNS \\n[#NUM_COLS] \\n[#GUTTER]u +. nr #COL_NUM 0 1 +. mk dc +. po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u +. nr #L_MARGIN \\n[.o] +. if \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB] +. ll \\n[#COL_L_LENGTH]u +. ta \\n[.l]u +. if \\n[#QUOTE] \{\ +. ie \\n[#\\*[BQ]_OFFSET_VALUE] \ +. po +(\\n[#PP_INDENT]u*\\n[#\\*[BQ]_OFFSET_VALUE]u) +. el \ +. po +\\*[$\\*[BQ]_OFFSET_VALUE] +. \} +. if \\n[#EPIGRAPH] \{\ +. if \\n[#EPI_ACTIVE] \{\ +. ie \\n[#EPI_FITS] . +. el .nr dc -\\n[#EPI_LEAD_DIFF] +. \} +. ie r#EPI_OFFSET_VALUE \{\ +. po \ +\\n[#COL_\\n[#COL_NUM]_L_MARGIN]u+(\\n[#PP_INDENT]u*\\n[#EPI_OFFSET_VALUE]u) +. \} +. el .po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u+\\*[$EPI_OFFSET_VALUE] +. \} +. \} +. rr #FROM_HEADER +. rr #DEFER_SPACE_ADDED +. if !\\n[#FN_DEPTH] .if r #DIVERTED .rr #DIVERTED +. if \\n[#MN_OVERFLOW_LEFT]=1 \{\ +. MN LEFT +. nf +. MN_OVERFLOW_LEFT +. MN +. \} +. if \\n[#MN_OVERFLOW_RIGHT]=1 \{\ +. MN RIGHT +. nf +. MN_OVERFLOW_RIGHT +. MN +. \} +. rm MN_OVERFLOW_LEFT +. rr #MN_OVERFLOW_LEFT +. rr #no-repeat-MN-left +. rm MN_OVERFLOW_RIGHT +. rr #MN_OVERFLOW_RIGHT +. rr #no-repeat-MN-right +. if \\n[#PRE_COLLATE]=1 .rr #PRE_COLLATE +. if \\n[#UNDERLINE_WAS_ON]=1 \{\ +. vs 0 +. ie !n \ +. nop \R'#UNDERLINE_ON 1'\X'ps: exec \\n[_w] \\n[_d] decorline' +. el .cu 1000 +. br +. ns +. rr #UNDERLINE_WAS_ON +. \} +. if \\n[#RESTORE_PAGINATION] \{\ +. PAGINATE +. rr #RESTORE_PAGINATION +. \} +. ch RR_@TOP +. ie \\n[tbl*have-header] .rr @TOP +. el .wh \\n[nl]u+1u RR_@TOP +. if \\n[#FLEX_ACTIVE] \{\ +. if \\n[#RESTORE_FLEX] \{\ +. rr #NO_FLEX +. rr #RESTORE_FLEX +. \} +. if \\n[#RESTORE_COL_FLEX] \{\ +. rr #NO_FLEX +. rr #RESTORE_COL_FLEX +. \} +. \} +.\" Don't flex the last page/col, or the page/col before a COLLATE, +.\" NEWPAGE, COL_NEXT, or BLANKPAGE. +. if !dPDF.EXPORT \{\ +. if \\n[#FLEX_ACTIVE] \ +. if !\\n[#NO_FLEX] \ +. nr #RESTORE_FLEX 1 +. if '\\*[last-page]'\\n%@\\n[#COL_NUM]' \ +. if !\\n[#NO_FLEX] .nr #NO_FLEX 1 +. if '\\*[pre-collate-\\n%]'\\n%@\\n[#COL_NUM]' \ +. if !\\n[#NO_FLEX] .nr #NO_FLEX 1 +. if '\\*[pre-newpage-\\n%]'\\n%@\\n[#COL_NUM]' \ +. if !\\n[#NO_FLEX] .nr #NO_FLEX 1 +. if d page-\\n%@\\n[#COL_NUM] .nr #NO_FLEX 1 +. \} +. ie \\n[defer] .PROCESS_FLOATS +. el \{\ +.\" These two sets of conditions only occur if the .br in .TS causes +.\" a page break. +. if !\\n[doing-tbl] \{\ +. if (\\n[tbl*have-caption]=1)&(\\n[tbl*caption-after-label]=0) \{\ +. RESTORE_SPACE +. if !\\n[span] \{\ +. ie \\n[#MLA] .sp \\n[tbl*label-lead-diff]u +. el .sp \\n[tbl*caption-lead-diff]u +. \} +. \} +. \} +. \} +.\" So tables without TH that don't fit don't overprint first row +.\" at top of page +. ie \\n[tbl*no-header] \{\ +. rs +. nop \& +. vpt +. rr \\n[tbl*no-header] +. SHIM_1 +. \} +. el .vpt +. if \\n[span] \{\ +. ev FLOAT +. if \\n[#INDENT_LEFT_ACTIVE] .in \\n[#L_INDENT]u/2u +. nf +. RESTORE_SPACE +. if !\\n[tbl*no-top-hook] \ +. if \\n[tbl*have-header:1] .tbl*print-header +. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u +. ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u +. \} +. if !\\n[begin-tbl] \ +. if !r tbl*no-top-hook .tbl@top-hook +. rr tbl*no-top-hook +. if r flex:force .rr flex:force +. rr ref*last +. if !\\n[float*defer] .ev 0 +. if (\\n[pdfbx-running]=1):(\\n[#DOC_TYPE]=5) \{\ +. rr @TOP +. ch RR_@TOP +. \} +. if \\n[pdfbx-running]=1 \ +. ch FOOTER \\n[#VFP\\n[stack]]u +.END +\# +\# ==================================================================== +\# +\# +++FOOTERS+++ +\# +\# FOOTERS (off or on) +\# ------------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Turns footers at the bottom of the page off or on. +\# *Notes: +\# Default is off. If on, page numbers automatically go at +\# the top, centered, unless pagination has been turned off, +\# or the pagenumber position has been changed to left or right. +\# +.MAC FOOTERS END +. ie '\\$1'' \{\ +. rr #HEADERS_ON +. nr #FOOTERS_ON 1 +. PAGENUM_POS TOP CENTER +. \} +. el .nr #FOOTERS_ON 0 +.END +\# +\# FOOTER MARGIN +\# ------------- +\# *Argument: +\# <footer margin> +\# *Function: +\# Creates or modifies register #FOOTER_MARGIN which holds the +\# amount of space to leave between the page number and the bottom +\# of the page. +\# *Notes: +\# Unit of measure required. Default is 3P. +\# +.MAC FOOTER_MARGIN END +. ie \\n%>0 .nr #FOOTER_MARGIN (\\$1) +. el . +.END +\# +\# FOOTER GAP +\# ---------- +\# *Argument: +\# <distance from end of running text to page # or footer> +\# *Function: +\# Creates or modifies register #FOOTER_GAP which holds the +\# amount of space to leave between running text and the page number. +\# *Notes: +\# Requires unit of measure. Default is 3P. Measured baseline to +\# baseline. +\# +.MAC FOOTER_GAP END +. ie \\n%>0 .nr #FOOTER_GAP (\\$1) +. el . +.END +\# +\# FOOTER +\# ------ +\# *Arguments: +\# <none> +\# *Function: +\# Gathers strings for flex-spacing, processes margin notes and +\# footnotes, prepares for move to next column or page. Places +\# footer at bottom of page if #FOOTERS=1, otherwise places page +\# number at bottom of page (if #PAGINATE=1). Page numbers are +\# in arabic or roman according to COPYSTYLE. DRAFT starts the +\# document at page 1 regardless of PAGENUMBER. FINAL respects +\# PAGENUMBER. +\# +.MAC FOOTER END +. if r #START .rr #START +. if \\n[pdfbx-running] \{\ +. if \\n[#FN_COUNT] \{\ +. nr pdfbx-fn-trap \\n[nl]+\\*[wt\\n[stack]]+\\*[gap\\n[stack]] +. nop \!x X pdf: background footnote \\n[pdfbx-fn-trap]z +. rr pdfbx-fn-trap +. \} +. \} +. CALCULATE_FLEX +. if \\n[#DOING_COVERTEXT] \{\ +. tm1 "[mom]: COVERTEXT exceeds cover page depth. +. ab [mom]: Aborting '\\n[.F]'. +. \} +. vpt 0 +. rr #LB_4_HD +. rr #QUOTE_4_HD +. nr #LEAD_AT_FOOTER \\n[.v] +. nr #SIZE_AT_FOOTER \\n[.ps] +. if !r pg-trans .nr pg-trans 0 1 +. ev PAGE_TRANSITION\\n+[pg-trans] +. pdfmarksuspend +. ie !n .nop \X'ps: exec decornone' +. el .cu 0 +. br +. if \\n[#UNDERLINE_ON]=1 .nr #UNDERLINE_WAS_ON 1 +. if \\n[MN-left]>0 \{\ +. if !\\n[#no-repeat-MN-left]=1 \{\ +. MNbottom-left +. nr #no-repeat-MN-left 1 +. \} +. if '\\n[.z]'MN_OVERFLOW_LEFT' \{\ +. di +. nr #MN_OVERFLOW_LEFT 1 +. rr #OVERFLOW_LEFT +. \} +. \} +. if \\n[MN-right]>0 \{\ +. if !\\n[#no-repeat-MN-right]=1 .MNbottom-right +. if '\\n[.z]'MN_OVERFLOW_RIGHT' \{\ +. di +. nr #MN_OVERFLOW_RIGHT 1 +. rr #OVERFLOW_RIGHT +. \} +. \} +\# Table bottom hook, draws the table borders in +\# multipage boxed tables. +. tbl@bottom-hook +. ch MN_OVERFLOW_TRAP +. nr #L_MARGIN_DIFF \\n[#L_MARGIN]-\\n[#DOC_L_MARGIN] +. if !\\n[#FN_DEFER] \{\ +. nr #DIVER_DEPTH 0 +. if \\n[#FN_DEPTH] \{\ +. if \\n[#DIVERTED]=3 .nr #FN_DEPTH +\\n[#VFP_DIFF] +. vpt 0 +. sp \ +|\\n[#PAGE_LENGTH]u-(\\n[#B_MARGIN]u+\\n[#FN_DEPTH]u-\\n[#DOC_LEAD]u) +. vpt +. po \\n[#DOC_L_MARGIN]u +. if \\n[#COLUMNS] \{\ +. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u +. nr #L_MARGIN \\n[.o] +. nr #FROM_FOOTER 1 +. \} +. nf +. ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u +. FOOTNOTES +. rm FOOTNOTES +. if d RUNON_FOOTNOTES .rm RUNON_FOOTNOTES +. if \\n[#PRINT_STYLE]=1 .vs \\n[#LEAD_AT_FOOTER]u +. if \\n[#PRINT_STYLE]=2 .vs \\n[#LEAD_AT_FOOTER]u +. if '\\n[.z]'FN_OVERFLOW' \{\ +. di +. nr #FN_OVERFLOW_DEPTH \\n[#DIVER_DEPTH] +. \} +. nr #FN_COUNT_AT_FOOTER \\n[#FN_COUNT] +. nr #FN_COUNT 0 +. if \\n[#COL_NEXT] \{\ +. ie !\\n[#COL_NUM]=\\n[#NUM_COLS] .nr #COL_NUM \\n-[#COL_NUM] +. el .nr #COL_NUM \\n[#NUM_COLS] 1 +. \} +. \} +. rr #DIVERTED +. \} +. nr @TOP 1 +. ie \\n[#COLUMNS]=1 \{\ +. ie (\\n[#COL_NUM]=\\n[#NUM_COLS]):(\\n[#NEWPAGE]=1) \{\ +. rr #NEWPAGE +. DO_FOOTER +. \} +. el \{\ +. ie (\\n[#ENDNOTES]=1):(\\n[#BIBLIOGRAPHY]=1) \{\ +. if \\n[#ENDNOTES] .sp |\\n[ec]u-\\n[#EN_LEAD]u +. if \\n[#BIBLIOGRAPHY] .sp |\\n[bc]u-\\n[#BIB_LEAD]u +. \} +. el \{\ +. vs \\n[#LEAD_AT_FOOTER]u +. rt \\n[dc]u +. nr flex-spaces 0 +. \} +. if d page-\\n%@\\n[#COL_NUM] \{\ +. rr #NO_FLEX +. rr #RESTORE_COL_FLEX +. \} +. po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u +. if !dPDF.EXPORT \{\ +. if \\n[#FLEX_ACTIVE] \{\ +. if !\\n[#NO_FLEX] \{\ +. if '\\*[last-page]'\\n%@\\n[#COL_NUM]' \ +. nr #NO_FLEX 1 +. if '\\*[pre-collate]'\\n%@\\n[#COL_NUM]' \ +. nr #NO_FLEX 1 +. if '\\*[pre-newpage-\\n%]'\\n%@\\n[#COL_NUM]' \{\ +. nr #NO_FLEX 1 +. nr #RESTORE_FLEX 1 +. \} +. if d page-\\n%@\\n[#COL_NUM] \{\ +. nr #NO_FLEX 1 +. nr #RESTORE_COL_FLEX 1 +. \} +. \} +. \} +. \} +. nr #L_MARGIN \\n[.o] +. if \\n[#FN_DEPTH] .PROCESS_FN_LEFTOVER +. vs \\n[#LEAD_AT_FOOTER]u +. if \\n[#PREV_FN_DEFERRED] .nr #PREV_FN_DEFERRED 2 +. rr #RULED +. if !\\n[#EPIGRAPH] .rr #COL_NEXT +. if !\\n[#QUOTE] .rr #COL_NEXT +. if \\n[#RESET_FN_COUNTERS]=1 \{\ +. rr #RESET_FN_COUNTERS +. PROCESS_FN_IN_DIVER +. LS \\n[#LEAD_AT_FOOTER]u +. nr #FN_COUNT \\n[#FN_COUNT] 1 +. nr #FN_COUNT_FOR_COLS \\n[#FN_COUNT_FOR_COLS] 1 +. rm FN_IN_DIVER +. if dRUNON_FN_IN_DIVER .rm RUNON_FN_IN_DIVER +. \} +. rr #DEFER_SPACE_ADDED +. if \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB] +. if \\n[#QUOTE] \{\ +. ie \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB] +. el \{\ +. ie \\n[#Q_OFFSET_VALUE] \ +. nr #Q_OFFSET \ +\\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) +. el \ +. nr #Q_OFFSET \\n[#L_MARGIN]+\\*[$Q_OFFSET_VALUE] +. if \\n[#COLUMNS] \{\ +. ie \\n[#Q_OFFSET_VALUE] .nr #Q_OFFSET \ +\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) +. el .nr #Q_OFFSET \ +\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$Q_OFFSET_VALUE] +. \} +. po \\n[#Q_OFFSET]u +. \} +. \} +. if \\n[#EPIGRAPH] \{\ +. ie \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB] +. el \{\ +. ie r#EPI_OFFSET_VALUE .nr #EPI_OFFSET \ +\\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE]) +. el .nr #EPI_OFFSET \ +\\n[#L_MARGIN]+\\*[$EPI_OFFSET_VALUE] +. if \\n[#COLUMNS] \{\ +. ie r#EPI_OFFSET_VALUE .nr #EPI_OFFSET \ +\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE]) +. el .nr #EPI_OFFSET \ +\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$EPI_OFFSET_VALUE] +. \} +. po \\n[#EPI_OFFSET]u +. \} +. \} +. ie \\n[tbl*interrupted] \{\ +. tbl*print-header +. rr tbl*interrupted +. \} +. el .if !r tbl*no-top-hook .tbl@top-hook +. rr tbl*no-top-hook +. ie \\n[#EPIGRAPH] \{\ +. ie !\\n[#EPI_ACTIVE] \{\ +. ns +. rr #EPI_ACTIVE +. \} +. el \{\ +. sp |\\n[dc]u+(\\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u) +. rr #EPI_ACTIVE +. \} +. \} +. el .ns +. ev +. \} +. ns +. rr #DIVERTED +. ch RR_@TOP +. wh \\n[nl]u+1u RR_@TOP +. if \\n[tbl*have-header] .tbl@bottom-hook +. if \\n[defer] .PROCESS_FLOATS +. ie \\n[tbl*no-header] \{\ +. rs +. nop \& +. vpt +. rr \\n[tbl*no-header] +. SHIM_1 +. \} +. el .vpt +. if '\\n[.ev]'caption' .rs +. if \\n[tbl*interrupted] .tbl*print-header +. rr tbl*interrupted +. \} +. el .DO_FOOTER +. pdfmarkrestart +.END +\# +\# PROCESS FOOTER +\# -------------- +\# *Arguments: +\# <none> +\# *Function: +\# Prints footer (page number, or 3-part footer). +\# Resets CAPS and UNDERLINE if they were on. +\# +.MAC DO_FOOTER END +.\" Kill pdfbackground if BoxStop causes a page break +. if r pdfbxstop \{\ +. pdfbackground off +. rr pdfbx-running +. \} +.\" Part of workaround for refer spitting out a blank page if the +.\" last reference falls on the bottom line. +. if \\n[num*refs] \{\ +. if \\n[ref*num]=\\n[num*refs] \{\ +. rr num*refs +. nr ref*last 1 +. \} +. \} +. ie !\\n[#DOC_TYPE]=5 .PRINT_FOOTER +. el .vpt +. if !\\n[ref*last] \{\ +. ie \\n[defer]>0 \{\ +\c +' bp +. \} +. el 'bp +. \} +.END +\# +.MAC PRINT_FOOTER END +. if r #SAVED_FOOTER_POS .ch FOOTER \\n[#SAVED_FOOTER_POS]u +. rr #SAVED_FOOTER_POS +. vpt 0 +. sp -1 +. ev FOOTER +. ie n \ +. sp |\\n[#PAGE_LENGTH]u-\\n[#FOOTER_MARGIN]u +. el \ +. sp |\\n[#PAGE_LENGTH]u-\\n[#FOOTER_MARGIN]u-\\n[#FOOTER_ADJ]u +. mk y +. UNDERLINE OFF +. po \\n[#DOC_L_MARGIN]u +. ll \\n[#DOC_L_LENGTH]u +. ta \\n[.l]u +. if \\n[#PRINT_STYLE]=1 .TYPEWRITER +. if \\n[#PRINT_STYLE]=2 \{\ +. fam \\*[$HDRFTR_FAM] +. ft R +. ps \\n[#DOC_PT_SIZE]u\\*[$HDRFTR_SIZE_CHANGE] +. \} +. nr #HDRFTR_PT_SIZE \\n[#PT_SIZE] +. if \\n[#CAPS_ON] \{\ +. nr #CAPS_WAS_ON 1 +. CAPS OFF +. \} +. ie \\n[#FOOTERS_ON] \{\ +. if !\\n[#SKIP_FOOTER]>0 .PRINT_HDRFTR +. if \\n[#HDRFTR_BOTH] \ +. HEADER_RECTO \\*[$HDR_RECTO_QUAD] "\\*[$HDR_RECTO_STRING]" +. if \\n[#DOC_TYPE]=5 .FOOTERS +. \} +. el \{\ +. if \\n[#PAGINATE] \{\ +. if \\n[#PAGE_NUM_V_POS]=2 \ +. if !\\n[#SKIP_FOOTER]>0 .PRINT_PAGE_NUMBER +. \} +. \} +. rr #SKIP_FOOTER +. if \\n[#CAPS_WAS_ON] \{\ +. CAPS +. rr #CAPS_WAS_ON +. \} +. ev +. vpt +.END +\# +\# ==================================================================== +\# +\# +++HEADERS AND FOOTERS+++ +\# +\# HEADERS_AND_FOOTERS +\# ------------------- +\# *Arguments: +\# HEADER_RECTO_QUAD \ +\# HEADER_RECTO_STRING \ +\# FOOTER_RECTO_QUAD \ +\# FOOTER_RECTO_STRING \ +\# HEADER_VERSO_QUAD \ +\# HEADER_VERSO_STRING \ +\# FOOTER_VERSO_QUAD \ +\# FOOTER_VERSO_STRING +\# | <anything> +\# *Function: +\# Allows having both headers and footers. Sets register +\# #HDRFTR_BOTH to 1; collects HEADER/FOOTER_RECTO/VERSO +\# information; appends FOOTER_RECTO and FOOTER_VERSO to +\# START and turns off pagination; appends to macros +\# PRINT_USERDEF_HDRFTR and HEADER the necessary number +\# register manipulations and redefinitions of the +\# HEADER/FOOTER_RECTO/VERSO strings so that both +\# headers and footers get printed, with the appropriate +\# strings for each +\# *Notes: +\# Works in conjunction with HDRFTR_RECTO and HDRFTR_VERSO (qqv.), +\# ergo all style changes must be done inline in the strings +\# passed as arguments. +\# +.MAC HEADERS_AND_FOOTERS END +. ie \\n[#NUM_ARGS]>1 \{\ +. nr #HDRFTR_BOTH 1 +. nr #FOOTERS_ON 1 +. if !r#HEADER_RULE .nr #HEADER_RULE 1 +. if !r#FOOTER_RULE .nr #FOOTER_RULE 1 +. ds $HDR_RECTO_QUAD \\$1 +. ds $HDR_RECTO_STRING \\$2 +. ds $FTR_RECTO_QUAD \\$3 +. ds $FTR_RECTO_STRING \\$4 +. ds $HDR_VERSO_QUAD \\$5 +. ds $HDR_VERSO_STRING \\$6 +. ds $FTR_VERSO_QUAD \\$7 +. ds $FTR_VERSO_STRING \\$8 +.am START DONE +. if \\\\n[#HDRFTR_BOTH]=1 \{\ +. FOOTER_RECTO \\\\*[$FTR_RECTO_QUAD] "\\\\*[$FTR_RECTO_STRING]" +. FOOTER_VERSO \\\\*[$FTR_VERSO_QUAD] "\\\\*[$FTR_VERSO_STRING]" +. if \\\\n[#HEADER_RULE]=1 .HEADER_RULE +. ie \\\\n[#FOOTER_RULE]=1 .FOOTER_RULE +. el .FOOTER_RULE OFF +. if r #PAGINATE .rr #PAGINATE +. if r #PAGE_NUM_V_POS .rr #PAGE_NUM_V_POS +. \} +.DONE +.am PRINT_USERDEF_HDRFTR DONE +. if \\\\n[#HDRFTR_BOTH]=1 \{\ +. if \\n[#FOOTERS_ON]=1 \{\ +. if !\\\\n[#COLLATE]=1 \{\ +. HEADER_RECTO \\*[$HDR_RECTO_QUAD] "\\*[$HDR_RECTO_STRING]" +. HEADER_VERSO \\*[$HDR_VERSO_QUAD] "\\*[$HDR_VERSO_STRING]" +. rr #FOOTERS_ON +. nr #HEADERS_ON 1 +. ie \\\\n[#HEADER_RULE]=1 .HEADER_RULE +. el .HEADER_RULE OFF +. \} +. \} +. if \\n[#HEADERS_ON]=1 \{\ +. FOOTER_RECTO \\*[$FTR_RECTO_QUAD] "\\*[$FTR_RECTO_STRING]" +. FOOTER_VERSO \\*[$FTR_VERSO_QUAD] "\\*[$FTR_VERSO_STRING]" +. \} +. \} +.DONE +.am HEADER DONE +. if \\\\n[#HDRFTR_BOTH]=1 \{\ +. if r #START_FOR_FOOTERS .rr #START_FOR_FOOTERS +. rr #HEADERS_ON +. nr #FOOTERS_ON 1 +. FOOTER_RECTO \\*[$FTR_RECTO_QUAD] "\\*[$FTR_RECTO_STRING]" +. FOOTER_VERSO \\*[$FTR_VERSO_QUAD] "\\*[$FTR_VERSO_STRING]" +. ie \\\\n[#FOOTER_RULE]=1 .FOOTER_RULE +. el .FOOTER_RULE OFF +. \} +.DONE +. \} +. el \{\ +. rr #HDRFTR_BOTH +. rr #USERDEF_HDRFTR +. rm $USERDEF_HDRFTR_RECTO +. rm $USERDEF_HDRFTR_VERSO +. FOOTERS OFF +. HEADERS +. if \\n[#COLLATE]=1 \{\ +. nr #HEADER_STATE 1 +. nr #PAGINATION_STATE 1 +. \} +. PAGINATE +. PAGENUM_POS BOTTOM CENTER +. nr #HF_OFF 1 +. \} +.END +\# +\# ==================================================================== +\# +\# +++HEADINGS+++ +\# +.char \[hd-num-spacer] \0 +.char \[parahead-spacer] \~\~ +.char \[toc-hd-num-spacer] \h'\w'\[en]'u' +.ds toc-word-space \ \" ie an unbreakable space +\# +\# HEADING +\# ------- +\# *Arguments: +\# <heading level> [PARAHEAD] [NAMED <pdf-id>] <heading text> +\# *Function: +\# Assigns a heading level to the heading text and prints heading +\# in the style set up for that level. If PARAHEAD given, the +\# heading is attached to the body of the paragraph. If NAMED +\# given, creates a target for pdf links. Collects the heading +\# for the TOC and sets TOC indenting appropriate for the level. +\# *Notes: +\# If PARAHEAD given, HEADING must come after PP. +\# +.MAC HEADING END +. ie !r pdfbx-top \{\ +' br +. if \\n[@TOP] .br +. \} +. el \{\ +. if r pdfbx-running .nr pdfbx-top 1 +. \} +. if !\B'\\$1' \{\ +. tm1 "[mom]: The first argument to \\$0 must be a numeric heading level. +. ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +. \} +. if r #QUOTE .rr #QUOTE +. if r #END_QUOTE .rr #END_QUOTE +. if r #EPIGRAPH .rr #EPIGRAPH +. vs \\n[#DOC_LEAD]u +. if \\$1<\\n[#LEVEL] \ +. nr #ACTIVE_LEVELS \\n[#LEVEL] \" loop count for resetting numbering registers +. nr #LAST_LEVEL \\n[#LEVEL] \" used during TOC collection, if SPACE_TOC_ITEMS +. nr #LEVEL \\$1 \" resets #LEVEL to arg +. shift +. nr #ARG_NUM 0 1 +. while \\n+[#ARG_NUM]<=2 \{\ +. if '\\$1'NAMED' \{\ +. ds PDF_NM "\\$1 \\$2 +. shift 2 \" \\$1 is now heading text +. \} +. if '\\$1'PARAHEAD' \{\ +. nr #PARAHEAD 1 +. shift \" \\$1 is now NAMED, if we have it; otherwise heading text +. \} +. \} +.\" Spacing +. if \\n[#Q_LEAD_DIFF_CHECK] .sp -1 +. if \\n[.t]<\\n[.v] .nr nl-from-heading \\n[nl] +. ie !\\n[#PARAHEAD] \{\ +. if !\\n[@TOP] \{\ +. nr #HEAD 1 +. ie !\\n[#START] \{\ +. nr #HEADING_NEEDS \\n[#NUM_ARGS]v+\\*[$HEAD_\\n[#LEVEL]_NEEDS]v+1v +. if \\n[#HEAD_\\n[#LEVEL]_SPACE_AFTER] .nr #HEADING_NEEDS +1v +. if \\n[.t]<\\n[#HEADING_NEEDS] .sp \\n[.t]u +. vpt 0 +. if !r pdfbx-top \ +. if !\\n[#SPACE_ADDED] .if !\\n[#LINEBREAK] .sp +. \} +. el \{\ +. ie !\\n[#PP] \{\ +. rr #START +. RESTORE_SPACE +. if !\\n[#SPACE_ADDED] \ +. if !\\n[#COLUMNS] .sp +. \} +. el .sp +. \} +. if \\n[#EPIGRAPH] \ +. if \\n[#SINGLE_SPACE] .sp +. \} +. if \\n[#PP_SPACE] \ +. if \\n[#QUOTE_4_HD] .sp .5v +. ie !\\n[#SPACE_ADDED] \{\ +. if !\\n[.ns] \{\ +. ie !\\n[#NO_SHIM] \ +. if !\\n[#HEAD_\\n[#LEVEL]_NO_SHIM] \ +. if !r pdfbx-top .SHIM +. el \{\ +. if !\\n[#NO_FLEX] \ +. if !\\n[#HEAD_\\n[#LEVEL]_NO_FLEX] \ +. if !r pdfbx-top .FLEX +. \} +. \} +. \} +. el .rr #SPACE_ADDED +. vpt +. \} +. el \{\ +. if \\n[#NUM_ARGS]>1 \{\ +. tm1 "[mom]: Error at line \\n[.c], \\$0. +. tm1 " PARAHEAD may not be given more than 1 line of text. +. ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +. \} +. vpt 0 +. if !(\\n[#PRINT_STYLE]=1)&(\\n[#SINGLE_SPACE]=1) .sp -1v +. if \\n[#QUOTE_4_HD] \{\ +. sp -1v +. if \\n[#PP_SPACE] \{\ +. sp .5v +. SHIM +. \} +. \} +. if (\\n[#QUOTE_4_HD]=0)&(\\n[#LB_4_HD]=0)&(\\n[#START]=0) \ +. if !\\n[#LB_4_PARAHEAD] .sp -1v +. \} +. ev HEADING +. evc 0 +.\" Style +. if \\n[#PRINT_STYLE]=2 \{\ +. fam \\*[$HEAD_\\n[#LEVEL]_FAM] +. ft \\*[$HEAD_\\n[#LEVEL]_FT] +. ps \\n[#DOC_PT_SIZE]u\\*[$HEAD_\\n[#LEVEL]_SIZE] +. if r pdfbx-top \{\ +. SIZESPECS +. ie \\n[#PP]=0 \{\ +. rt +. ds pdfbx-cap-adj \\*[$CAP_HEIGHT] +. sp (\\*[wt\\n[stack]]/2u)+\\*[pdfbx-cap-adj]+\\*[gap\\n[stack]]u +. \} +. el \{\ +. nr pdfbx-cap-adj \\*[$CAP_HEIGHT]-\\*[pdfbx-cap-adj] +. sp \\n[pdfbx-cap-adj]u +. \} +. \} +. nf +. \} +.\" Numbering +. ds $TOC_HD_NUM_PREV \\*[$TOC_HD_NUM] +. rm $TOC_HD_NUM +. rm $PDF_HD_NUM +. ie \\n[#NUMBER_HEAD_\\n[#LEVEL]] \{\ +. if \\n[#PREFIX_CH_NUM] .ds $HD_NUM \\n[#CH_NUM]. +. nr #HEAD_\\n[#LEVEL]_NUM +1 \" incremented manually here; still auto-increments +.\" Reset numbering registers for headings beneath current level +. nr @LEVEL \\n[#LEVEL] 1 \" loop step +. nr #LOOP \\n[#ACTIVE_LEVELS] \" loop count +. while \\n+[@LEVEL]<=\\n[#LOOP] \ +. if \\n[#HEAD_\\n[@LEVEL]_NUM] \ +. nr #HEAD_\\n[@LEVEL]_NUM 0 1 +.\" Build numbering strings for body and toc +. nr @LEVEL 0 1 \" loop step +. nr #LOOP \\n[#LEVEL] \" loop count +. while \\n+[@LEVEL]<=\\n[#LOOP] \ +. if \\n[#HEAD_\\n[@LEVEL]_NUM] \ +. as $HD_NUM \\n[#HEAD_\\n[@LEVEL]_NUM]. +. ie \\n[#TRUNC_TOC_HD_NUM] \ +. ds $TOC_HD_NUM \\n[#HEAD_\\n[#LEVEL]_NUM]. +. el .ds $TOC_HD_NUM \\*[$HD_NUM] +. if \\n[#LEVEL]=1 \ +. ds $TOC_HD_NUM_PREV \\*[$TOC_HD_NUM] +. if \\n[#TOC_NO_HD_NUM] .rm $TOC_HD_NUM +. if !\\n[#HEAD_\\n[#LEVEL]_NUM]] .rm $TOC_HD_NUM +. as $HD_NUM \[hd-num-spacer] +. ds $PDF_HD_NUM \\*[$TOC_HD_NUM] +. if !'\\*[$TOC_HD_NUM]'' .as $TOC_HD_NUM \[toc-hd-num-spacer] +. if !'\\*[$PDF_HD_NUM]'' .as $PDF_HD_NUM " " +. \} +. el .nr @LEVEL \\n[#LEVEL] 1 +.\" TOC collection and formatting +. nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ] +. af #TOC_ENTRY_PN \\g[#PAGENUMBER] +. nr #ARG_NUM 0 1 +. while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\ +. as $TOC_HEAD_\\n[#LEVEL]_ITEM "\\$[\\n+[#ARG_NUM]] +. if \\n[#NUM_ARGS]>\\n[#ARG_NUM] \ +. as $TOC_HEAD_\\n[#LEVEL]_ITEM "\\*[toc-word-space] +. \} +. PDF_BOOKMARK \ + \\*[PDF_NM] \\n[#LEVEL]+1 \ + \\*[$PDF_HD_NUM] \\*[$TOC_HEAD_\\n[#LEVEL]_ITEM] +. rm PDF_NM +. rm $PDF_HD_NUM +. ev TOC_EV +. ie \\n[#PRINT_STYLE]=1 \{\ +. fam \\*[$TYPEWRITER_FAM] +. ft R +. ps \\*[$TYPEWRITER_PS] +. \} +. el \{\ +. FAMILY \\*[$TOC_HEAD_\\n[#LEVEL]_FAM] +. FT \\*[$TOC_HEAD_\\n[#LEVEL]_FT] +. ps \\n[#TOC_PS]u\\*[$TOC_HEAD_\\n[#LEVEL]_SIZE] +. \} +.\" Indents for TOC heading levels. +.\" First, numbered heads. @LEVEL here is #LEVEL+1 +. ie \\n[#NUMBER_HEAD_\\n[#LEVEL]] \{\ +. ie !\\n[#TOC_NO_HD_NUM] \{\ +. ie \\n[#TRUNC_TOC_HD_NUM] \{\ +. if !\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT_SET] \{\ +. ie !\\n[#FROM_STYLE_\\n[@LEVEL]] \{\ +. ie !\\n[#NUMBER_HEAD_\\n[@LEVEL]] \ +. nr #TOC_HEAD_\\n[@LEVEL]_INDENT \ +\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\ +\w'\\*[$TOC_HD_NUM]'+\ +1.5m +. el \ +. nr #TOC_HEAD_\\n[@LEVEL]_INDENT \ +\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\ +\w'\\*[$TOC_HD_NUM]' +. \} +. el \ +. nr #TOC_HEAD_\\n[@LEVEL]_INDENT \ + \\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT] +. \} +. \} +. el \{\ +. if !\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT_SET] \{\ +. ie !\\n[#FROM_STYLE_\\n[@LEVEL]] \{\ +. ie \\n[#NUMBER_HEAD_\\n-[@LEVEL]] \{\ +. ie !\\n[#NUMBER_HEAD_\\n+[@LEVEL]] \ +. nr #TOC_HEAD_\\n[@LEVEL]_INDENT \ +\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\ +\w'\\*[$TOC_HD_NUM_PREV]'+\ +1.5m +. el \{\ +.\" Get the number of digits in the chapter number +. ds ch-num-width \\n[#CH_NUM] +. length ch-num-width \\*[ch-num-width] +. nr ch-num-width -1 +. nr num-ch-digits \w'\0'*\\n[ch-num-width] +. nr #TOC_HEAD_\\n[@LEVEL]_INDENT \ +\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\ +\\n[num-ch-digits]+\ +\w'.\[toc-hd-num-spacer]' +. \} +. \} +. el \ +. nr #TOC_HEAD_\\n[@LEVEL]_INDENT \ +\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\ +\w'\\n[#TOC_HD_NUM].' +. ie \\n[#LEVEL]=1 \ +. nr #TOC_HEAD_\\n+[@LEVEL]_INDENT +\w'\0' +. el \{\ +. if !\\n[#NUMBER_HEAD_\\n[@LEVEL]] \{\ +. nr @LEVEL \\n+[@LEVEL] 1 +. nr #TOC_HEAD_\\n+[@LEVEL]_INDENT +\w'\0' +. \} +. \} +. \} +. el \ +. nr #TOC_HEAD_\\n[@LEVEL]_INDENT \ +\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\ +\\n[#TOC_HEAD_\\n+[@LEVEL]_INDENT] +. \} +. if \\n[#LEVEL]=1 \{\ +. if \\n[#NUMBER_HEAD_\\n[@LEVEL]] \{\ +. if \\n[#PREFIX_CH_NUM] \ +. nr #TOC_HEAD_\\n[@LEVEL]_INDENT \ +\w'\\*[$TOC_HD_NUM]' +. \} +. \} +. \} +. \} +. el \{\ +. ie !\\n[#FROM_STYLE_\\n[@LEVEL]] \{\ +. if !\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT_SET] \ +. nr #TOC_HEAD_\\n[@LEVEL]_INDENT \ + \\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+1.5m +. \} +. el \{\ +. if !\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT_SET] \ +. nr #TOC_HEAD_\\n[@LEVEL]_INDENT \ +\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\ +\\n[#TOC_HEAD_\\n+[@LEVEL]_INDENT] +. \} +. \} +. \} +.\" Non-numbered heads +. el \{\ +. nr @LEVEL \\n[#LEVEL] 1 +.\" increments @LEVEL even if false +. ie \\n[#FROM_STYLE_\\n+[@LEVEL]] \{\ +. if !\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT_SET] \{\ +. nr #TOC_HEAD_\\n[@LEVEL]_INDENT \ +\\n[#TOC_HEAD_\\n[#LEVEL]_INDENT]+\ +\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT] +. if !\\n[#LEVEL]=\\n[#LAST_LEVEL] \{\ +. if \\n[#NUMBER_HEAD_\\n[@LEVEL]] \ +. nr #TOC_HEAD_\\n[#LEVEL]_INDENT \ +\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT]+\ +\w'\\*[$TOC_HD_NUM_PREV]' +. \} +. \} +. \} +. el \{\ +. nr #TOC_HEAD_\\n[@LEVEL]_INDENT \ + \\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+1.5m +. if \\n[#LEVEL]=1 \{\ +. if !\\n[#FROM_STYLE_1] \ +. nr #TOC_HEAD_1_INDENT 0 +. \} +. \} +. \} +. nr #TOC_HEAD_\\n[@LEVEL]_INDENT_SET 1 +. HD_TO_TOC +. rm $TOC_HEAD_\\n[#LEVEL]_ITEM +.\" Print heading +. if !\\n[#PARAHEAD] .\\*[$HEAD_\\n[#LEVEL]_QUAD] +. if \\n[#CAPS_ON] \{\ +. CAPS OFF +. nr #CAPS_RESTORE 1 +. \} +. if \\n[#HEAD_\\n[#LEVEL]_CAPS] \{\ +. CAPS +. nr #CAPS_OFF 1 +. \} +. if \\n[#SMALLCAPS_ON] \{\ +. SMALLCAPS OFF +. nr #SMALLCAPS_RESTORE 1 +. \} +. if \\n[#HEAD_\\n[#LEVEL]_SMALLCAPS] \{\ +. SMALLCAPS +. nr #SMALLCAPS_OFF 1 +. \} +. if !'\\*[$HEAD_\\n[#LEVEL]_COLOR]'' \ +. COLOR \\*[$HEAD_\\n[#LEVEL]_COLOR] +. nop \X'ps: exec decornone'\c +. if r pdfbx-top \{\ +. ds $RESTORE_ADJ \\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ] +. ds $HEAD_\\n[#LEVEL]_BASELINE_ADJ 0 +. \} +. nr #ARG_NUM 0 1 +. while \\n+[#ARG_NUM]<=\\n[#NUM_ARGS] \{\ +. if \\n[#PARAHEAD] \ +. nr #PP_TEXT_OFFSET \ + \w'\\*[$HD_NUM]\\$[\\n[#ARG_NUM]]'+\w'\[parahead-spacer]' +. if (\\n[#HEAD_\\n[#LEVEL]_UNDERSCORE]=0)&(\\n[#HEAD_\\n[#LEVEL]_UNDERSCORE2]=0) \{\ +. ie \\n[#HD_NUM_INDENT] \{\ +. if !'\\*[$HEAD_\\n[#LEVEL]_QUAD]'CENTER' \ +. ti \\n[#HD_NUM_INDENT]u +. PRINT \ +"\v'-\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]'\\$[\\n[#ARG_NUM]] +. br +. \} +. el \{\ +. ie !\\n[#PARAHEAD] \{\ +. PRINT \ +"\v'-\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]'\\*[$HD_NUM]\\$[\\n[#ARG_NUM]] +. br +. \} +. el \{\ +. if (\\n[#PP]>0):(\\n[#INDENT_FIRST_PARAS]) \{\ +. if !\\n[#LB_4_PARAHEAD] \{\ +. if !\\n[#START] \{\ +. if \\n[#PP_ACTIVE] \{\ +. ie \\n[#PP]=1 .br +. el \{\ +. nr #PP_TEXT_OFFSET +\\n[#PP_INDENT] +. ie !\\n[pdfbx-running] .ti \\n[#PP_INDENT]u +. el .ti \\n[#PP_INDENT]u+\\*[wt\\n[stack]]+\\*[gap\\n[stack]]u +. \} +. \} +. \} +. \} +. \} +. ie \\n[#PRINT_STYLE]=1 \ +. PRINT "\\*[UL]\\*[$HD_NUM]\\$[\\n[#ARG_NUM]]\\*[ULX] +. el .PRINT "\\*[$HD_NUM]\\$[\\n[#ARG_NUM]] +. rr #LB_4_PARAHEAD +. sp -1v +. \} +. \} +. \} +. if \\n[#HEAD_\\n[#LEVEL]_UNDERSCORE] \{\ +. nr #SAVED_UL_WEIGHT \\n[#UNDERSCORE_WEIGHT] +. UNDERSCORE_WEIGHT \\*[$HEAD_\\n[#LEVEL]_UL_WEIGHT] +. ie \\n[#HD_NUM_INDENT] \{\ +. if !'\\*[$HEAD_\\n[#LEVEL]_QUAD]'CENTER' \ +. ti \\n[#HD_NUM_INDENT]u +. UNDERSCORE \\*[$HEAD_\\n[#LEVEL]_UL_GAP] \ + "\v'-\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]'\\$[\\n[#ARG_NUM]] +. br +. \} +. el \{\ +. ie !\\n[#PARAHEAD] \{\ +. UNDERSCORE \\*[$HEAD_\\n[#LEVEL]_UL_GAP] \ +"\v'-\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]'\\*[$HD_NUM]\\$[\\n[#ARG_NUM]] +. br +. \} +. el \{\ +. if (\\n[#PP]>0):(\\n[#INDENT_FIRST_PARAS]) \{\ +. if !\\n[#LB_4_HD] \{\ +. if !\\n[#START] \{\ +. if \\n[#PP_ACTIVE] \{\ +. nr #PP_TEXT_OFFSET +\\n[#PP_INDENT] +. if (\\n[#PRINT_STYLE]=1)&(\\n[#SINGLE_SPACE]=1) .sp -1v +. ti \\n[#PP_INDENT]u +. \} +. \} +. \} +. \} +. UNDERSCORE \\*[$HEAD_\\n[#LEVEL]_UL_GAP] \ + "\\*[$HD_NUM]\\$[\\n[#ARG_NUM]] +. sp -1v +. \} +. \} +. nr #UNDERSCORE_WEIGHT \\n[#SAVED_UL_WEIGHT] +. \} +. if \\n[#HEAD_\\n[#LEVEL]_UNDERSCORE2] \{\ +. nr #SAVED_UL2_WEIGHT \\n[#UNDERSCORE_WEIGHT] +. UNDERSCORE_WEIGHT \\*[$HEAD_\\n[#LEVEL]_UL2_WEIGHT] +. ie \\n[#HD_NUM_INDENT] \{\ +. if !'\\*[$HEAD_\\n[#LEVEL]_QUAD]'CENTER' \ +. ti \\n[#HD_NUM_INDENT]u +. UNDERSCORE2 \\*[$HEAD_\\n[#LEVEL]_UL2_GAP_1] \ + \\*[$HEAD_\\n[#LEVEL]_UL2_GAP_2] \ + "\v'-\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]'\\$[\\n[#ARG_NUM]] +. br +. \} +. el \{\ +. ie !\\n[#PARAHEAD] \{\ +. UNDERSCORE2 \\*[$HEAD_\\n[#LEVEL]_UL2_GAP_1] \ + \\*[$HEAD_\\n[#LEVEL]_UL2_GAP_2] \ +"\v'-\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]'\\*[$HD_NUM]\\$[\\n[#ARG_NUM]] +. br +. \} +. el \{\ +. if (\\n[#PP]>0):(\\n[#INDENT_FIRST_PARAS]) \{\ +. if !\\n[#LB_4_HD] \{\ +. if !\\n[#START] \{\ +. if \\n[#PP_ACTIVE] \{\ +. nr #PP_TEXT_OFFSET +\\n[#PP_INDENT] +. if (\\n[#PRINT_STYLE]=1)&(\\n[#SINGLE_SPACE]=1) \ +. sp -1v +. ti \\n[#PP_INDENT]u +. \} +. \} +. \} +. \} +. UNDERSCORE2 \\*[$HEAD_\\n[#LEVEL]_UL2_GAP_1] \ +\\*[$HEAD_\\n[#LEVEL]_UL2_GAP_2] "\\*[$HD_NUM]\\$[\\n[#ARG_NUM]] +. sp -1v +. \} +. \} +. nr #UNDERSCORE_WEIGHT \\n[#SAVED_UL2_WEIGHT] +. \} +. if !\\n[#HD_NUM_INDENT] .nr #HD_NUM_INDENT \w'\\*[$HD_NUM]' +. \} +. if r pdfbx-top \{\ +. ds $HEAD_\\n[#LEVEL]_BASELINE_ADJ \\*[$RESTORE_ADJ] +. if !\\n[#PARAHEAD] .sp \\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ] +. \} +. if !\\n[#PARAHEAD] \ +. if \\n[#HEAD_\\n[#LEVEL]_SPACE_AFTER] .sp +. if \\n[#CAPS_OFF] \{\ +. CAPS OFF +. rr #CAPS_OFF +. \} +. if \\n[#CAPS_RESTORE] \{\ +. CAPS +. rr #CAPS_RESTORE +. \} +. if \\n[#SMALLCAPS_OFF] \{\ +. SMALLCAPS OFF +. rr #SMALLCAPS_OFF +. \} +. if \\n[#SMALLCAPS_RESTORE] \{\ +. SMALLCAPS +. rr #SMALLCAPS_RESTORE +. \} +. ev +. rm $HD_NUM +. rr #HD_NUM_INDENT +. if \\n[@TOP] \{\ +. ch RR_@TOP +. rr @TOP +. rs +. nop \& +. sp -1 +. \} +. if \\n[#PARAHEAD] \{\ +. ie !\\n[pdfbx-running] .ti \\n[#PP_TEXT_OFFSET]u +. el .ti \\n[#PP_TEXT_OFFSET]u+\\*[wt\\n[stack]]+\\*[gap\\n[stack]]u +. \} +. if !\\n[#PARAHEAD] .nr #PP 0 +. rr #PARAHEAD +. if \\n[#LB_4_HD] .rr #LB_4_HD +. if \\n[#QUOTE_4_HD] .rr #QUOTE_4_HD +. vpt +. rr nl-from-heading +. if r pdfbx-top \{\ +. rr pdfbx-top +. nr pdfbx-top\\n[stack] 1 +. \} +.END +\# +\# HEADING_STYLE +\# ------------- +\# *Arguments: +\# <level> +\# FAMILY <family> +\# FONT <font> +\# SIZE <+|-n> +\# COLOR <color> +\# CAPS | NO_CAPS +\#---when called as HEADING_STYLE, these are also available--- +\# QUAD <direction> +\# NUMBER | NO_NUMBER +\# SPACE_AFTER | NO_SPACE_AFTER +\# UNDERSCORE <weight> <gap> | UNDERSCORE2 <weight> <gap1> <gap2> +\# NO_UNDERSCORE | NO_UNDERSCORE2 +\# BASELINE_ADJUST +\#---when called as TOC_ENTRY_STYLE this is also available--- +\# INDENT +\# *Function: +\# Sets up complete style parameters for HEADING <level>. If +\# invoked as TOC_ENTRY_STYLE, sets up parameters for the +\# corresponding TOC entry at <level>. +\# *Notes: +\# Arguments may be given in any order. Any not given retain +\# their current values. Defaults for an initial 9 levels of +\# heading are set up in PRINTSTYLE. +\# +\# NUMBER indicates that hierarchic numbering of <level> should be +\# prepended to heading text. If invoked as TOC_ENTRY_STYLE, +\# prepend numbering to TOC entries at <level> (only works if +\# NUMBER is given to the corresponding HEADING <level>). +\# +\# INDENT refers to the indent for <level> in the TOC. It is +\# measured from the left offset of the entry level above it +\# (including numbering, if present). TOC entry levels beneath +\# <level> will have their indents adjusted accordingly. +\# +.MAC HEADING_STYLE END +. if !'\\$0'TOC_HEADING_STYLE' \{\ +. if !\B'\\$1' \{\ +. tm1 "[mom]: The first argument to \\$0 must be a numeric heading level. +. ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +. \} +. nr #LEVEL \\$1 +. if \\n[#FROM_OLDSTYLE] .nr #LEVEL_\\n[#LEVEL]_SET 1 +. shift +.\" Prepend TOC_ to style strings if called as TOC_ENTRY_STYLE +. \} +. if '\\$0'TOC_ENTRY_STYLE' .ds $TOC TOC_ +. nr #ARG_NUM 0 1 +. nr #ATTRIB \\n[#NUM_ARGS] +. while \\n+[#ARG_NUM]<=\\n[#ATTRIB] \{\ +. if '\\$1'UNDERSCORE' \{\ +. nr #HEAD_\\n[#LEVEL]_UNDERSCORE 1 +. shift +. if '\\$1'' \{\ +. tm1 "[mom]: The UNDERSCORE argument to \\$0 requires a rule weight. +. ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +. \} +. ds $HEAD_\\n[#LEVEL]_UL_WEIGHT \\$1 +. shift +. if '\\$1'' \{\ +. tm1 "[mom]: The UNDERSCORE argument to \\$0 requires a rule gap. +. ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +. \} +. ds $HEAD_\\n[#LEVEL]_UL_GAP \\$1 +. shift +. \} +. if '\\$1'NO_UNDERSCORE' \{\ +. rr #HEAD_\\n[#LEVEL]_UNDERSCORE +. shift +. \} +. if '\\$1'UNDERSCORE2' \{\ +. nr #HEAD_\\n[#LEVEL]_UNDERSCORE2 1 +. shift +. if '\\$1'' \{\ +. tm1 "[mom]: The UNDERSCORE2 argument to \\$0 requires a rule weight. +. ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +. \} +. ds $HEAD_\\n[#LEVEL]_UL2_WEIGHT \\$1 +. shift +. if '\\$1'' \{\ +. tm1 "[mom]: The UNDERSCORE2 argument to \\$0 requires a rule gap. +. ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +. \} +. ds $HEAD_\\n[#LEVEL]_UL2_GAP_1 \\$1 +. shift +. if '\\$1'' \{\ +. tm1 "[mom]: The UNDERSCORE2 argument to \\$0 requires an inter-rule gap. +. ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +. \} +. ds $HEAD_\\n[#LEVEL]_UL2_GAP_2 \\$1 +. shift +. \} +. if '\\$1'NO_UNDERSCORE2' \{\ +. rr #HEAD_\\n[#LEVEL]_UNDERSCORE2 +. shift +. \} +. if '\\$1'SPACE_ABOVE' \{\ +. shift +. ds $SPACE_ABOVE \\$1 +. shift +. \} +. if '\\$1'SPACE_BENEATH' \{\ +. shift +. ds $SPACE_BENEATH \\$1 +. shift +. \} +. if '\\$1'SPACE_AFTER' \{\ +. nr #HEAD_\\n[#LEVEL]_SPACE_AFTER 1 +. shift +. \} +. if '\\$1'NO_SPACE_AFTER' \{\ +. rr #HEAD_\\n[#LEVEL]_SPACE_AFTER +. shift +. \} +. if '\\$1'FAMILY' \{\ +. shift +. ds $\\*[$TOC]HEAD_\\n[#LEVEL]_FAM \\$1 +. if '\\$0'TOC_HEADING_STYLE' .ds $TOC_HEADING_FAM \\$1 +. shift +. \} +. if '\\$1'FONT' \{\ +. shift +. ds $\\*[$TOC]HEAD_\\n[#LEVEL]_FT \\$1 +. if '\\$0'TOC_HEADING_STYLE' .ds $TOC_HEADING_FT \\$1 +. shift +. \} +. if '\\$1'SIZE' \{\ +. shift +. ds $\\*[$TOC]HEAD_\\n[#LEVEL]_SIZE \\$1 +. if '\\$0'TOC_HEADING_STYLE' .ds $TOC_HEADING_SIZE \\$1 +. shift +. \} +. if '\\$1'QUAD' \{\ +. shift +. ds $QUAD_TYPE \\$1 +. substring $QUAD_TYPE 0 0 +. ie !'\\$0'TOC_HEADING_STYLE' \{\ +. if '\\*[$QUAD_TYPE]'L' .ds $HEAD_\\n[#LEVEL]_QUAD LEFT +. if '\\*[$QUAD_TYPE]'C' .ds $HEAD_\\n[#LEVEL]_QUAD CENTER +. if '\\*[$QUAD_TYPE]'R' .ds $HEAD_\\n[#LEVEL]_QUAD RIGHT +. \} +. el \{\ +. if '\\*[$QUAD_TYPE]'L' .ds $TOC_HEADING_QUAD LEFT +. if '\\*[$QUAD_TYPE]'C' .ds $TOC_HEADING_QUAD CENTER +. if '\\*[$QUAD_TYPE]'R' .ds $TOC_HEADING_QUAD RIGHT +. \} +. shift +. \} +. if '\\$1'COLOR' \{\ +. shift +. ds $\\*[$TOC]HEAD_\\n[#LEVEL]_COLOR \\$1 +. if '\\$0'TOC_HEADING_STYLE' .ds $TOC_HEADING_COLOR \\$1 +. shift +. \} +. if '\\$1'BASELINE_ADJUST' \{\ +. shift +. ds $HEAD_\\n[#LEVEL]_BASELINE_ADJ \\$1 +. shift +. \} +. if '\\$1'CAPS' \{\ +. nr #\\*[$TOC]HEAD_\\n[#LEVEL]_CAPS 1 +. shift +. \} +. if '\\$1'NO_CAPS' \{\ +. rr #HEAD_\\n[#LEVEL]_CAPS +. shift +. \} +. if '\\$1'SMALLCAPS' \{\ +. nr #\\*[$TOC]HEAD_\\n[#LEVEL]_SMALLCAPS 1 +. shift +. \} +. if '\\$1'NO_SMALLCAPS' \{\ +. rr #HEAD_\\n[#LEVEL]_SMALLCAPS +. shift +. \} +. if '\\$1'NUMBER' \{\ +. nr #NUMBER_HEAD_\\n[#LEVEL] 1 +. nr #HEAD_\\n[#LEVEL]_NUM 0 1 +. shift +. \} +. if '\\$1'NO_NUMBER' \{\ +. rr #NUMBER_HEAD_\\n[#LEVEL] +. shift +. \} +. if '\\$1'PREFIX_CHAPTER' \{\ +. shift +. ie \B'\\$1' \{\ +. PREFIX_CHAPTER_NUMBER \\$1 +. \} +. el .PREFIX_CHAPTER_NUMBER +. \} +. if '\\$1'INDENT' \{\ +. shift +. nr #TOC_HEAD_\\n[#LEVEL]_INDENT \\$1 +. nr #FROM_STYLE_\\n[#LEVEL] 1 +. shift +. \} +. if '\\$1'NEEDS' \{\ +. shift +. ds $HEAD_\\n[#LEVEL]_NEEDS \\$1 +. shift +. \} +. if '\\$1'SHIM' \{\ +. rr #HEAD_\\n[#LEVEL]_NO_SHIM +. shift +. \} +. if '\\$1'NO_SHIM' \{\ +. nr #HEAD_\\n[#LEVEL]_NO_SHIM 1 +. shift +. \} +. if '\\$1'FLEX' \{\ +. rr #HEAD_\\n[#LEVEL]_NO_FLEX +. shift +. \} +. if '\\$1'NO_FLEX' \{\ +. nr #HEAD_\\n[#LEVEL]_NO_FLEX 1 +. shift +. \} +. \} +. rr #LEVEL +. if d$TOC .rm $TOC +.END +. +.ALIAS TOC_ENTRY_STYLE HEADING_STYLE +.ALIAS TOC_HEADING_STYLE HEADING_STYLE +\# +\# OLDSTYLE HEADINGS +\# ----------------- +\# *Arguments: +\# None. +\# *Function: +\# Called from HEAD, SUBHEAD, and SUBSUBHEAD, sets style +\# parameters for HEADINGs 1-3 to former mom defaults for those macros. +\# Any styles already assigned to those levels are retained. +\# +\# Called by user with no argument, allows use of old style HEAD, +\# SUBHEAD, and SUBSUBHEAD without generating the deprecated msg. +\# *Notes: +\# For backward compatibility, and to ease the transition to +\# the HEADING scheme for heads. +\# +\# Paraheads must be set with .HEADING <level> PARAHEAD; attempts +\# to call PARAHEAD abort with an instructive message. +\# +.MAC OLDSTYLE_HEADINGS END +. if '\\$1'' .nr #SKIP_MSG 1 +. nr #FROM_OLDSTYLE 1 \" Used in HEADING +. if \\n[#PRINT_STYLE]=1 \{\ +. if !\\n[#LEVEL_1_SET] \{\ +. HEADING_STYLE 1 \ + FONT R \ + SIZE +0 \ + QUAD C \ + CAPS \ + UNDERSCORE .5 2p \ + BASELINE_ADJUST 0 \ + SPACE_AFTER +. nr #OLDSTYLE_HD 1 +. return +. \} +. if !\\n[#LEVEL_2_SET] \{\ +. HEADING_STYLE 2 \ + FONT R \ + SIZE +0 \ + UNDERSCORE .5 2p \ + BASELINE_ADJUST \\n[.v]/8 +. nr #OLDSTYLE_SH 1 +. return +. \} +. if !\\n[#LEVEL_3_SET] \{\ +. HEADING_STYLE 3 \ + FONT R \ + SIZE +0 \ + BASELINE_ADJUST \\n[.v]/8 +. nr #OLDSTYLE_SSH 1 +. return +. \} +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. if !\\n[#LEVEL_1_SET] \{\ +. HEADING_STYLE 1 \ + FAMILY \E*[$DOC_FAM] \ + FONT B \ + SIZE +1 \ + QUAD C \ + CAPS \ + UNDERSCORE .5 2p \ + BASELINE_ADJUST 0 \ + SPACE_AFTER +. nr #OLDSTYLE_HD 1 +. return +. \} +. if !\\n[#LEVEL_2_SET] \{\ +. HEADING_STYLE 2 \ + FAMILY \E*[$DOC_FAM] \ + FONT B \ + SIZE +.5 \ + BASELINE_ADJUST \\n[.v]/8 +. nr #OLDSTYLE_SH 1 +. return +. \} +. if !\\n[#LEVEL_3_SET] \{\ +. HEADING_STYLE 3 \ + FAMILY \E*[$DOC_FAM] \ + FONT I \ + SIZE +.5 \ + BASELINE_ADJUST \\n[.v]/8 +. nr #OLDSTYLE_SSH 1 +. return +. \} +. \} +. rr #FROM_OLDSTYLE +.END +\# +\# "Deprecated" message +\# +.MAC DEPRECATED END +. if !\\n[#SKIP_MSG] \{\ +. tm1 "[mom]: Macro '\\$1' at line \\n[.c] is deprecated. +. tm1 " Invoking HEADING \\$2 instead and assigning style defaults +. tm1 " from former \\$1 as described in the documentation. +. tm1 " If another style is desired, use HEADING_STYLE \\$2 to +. tm1 " create it (see docs). +. tm1 " Further warnings will not be emitted for \\$1. +. tm1 " To avoid this message when using the deprecated HEAD, +. tm1 " SUBHEAD, and SUBSUBHEAD macros, add '.OLDSTYLE_HEADINGS' +. tm1 " after PRINTSTYLE before START. +. rm $MACRO +. \} +.END +\# +\# Wrappers around old-style headings. +\# +.MAC HEAD END +. if !\\n[#OLDSTYLE_HD] \{\ +. DEPRECATED HEAD 1 +. OLDSTYLE_HEADINGS HEAD +. \} +. HEADING 1 \\$@ +.END +\# +.MAC SUBHEAD END +. if !\\n[#OLDSTYLE_SH] \{\ +. DEPRECATED SUBHEAD 2 +. OLDSTYLE_HEADINGS SUBHEAD +. \} +. HEADING 2 \\$@ +.END +\# +.MAC SUBSUBHEAD END +. if !\\n[#OLDSTYLE_SSH] \{\ +. DEPRECATED SUBSUBHEAD 3 +. OLDSTYLE_HEADINGS SUBSUBHEAD +. \} +. HEADING 3 \\$@ +.END +\# +.MAC PARAHEAD END +. tm1 "[mom]: \\$0 is no longer a valid macro. +. tm1 " Use 'HEADING <level> PARAHEAD <text>' instead. +. tm1 " You will probably want to invoke HEADING_STYLE to set +. tm1 " the type parameters for the parahead. See docs. +. ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +.END +\# +\# Wrapper macro for oldstyle NUMBER_HEADS, NUMBER_SUBHEADS... +\# +.MAC HEADING_NUMBERS END +. if '\\$0'NUMBER_PARAHEADS' \{\ +. tm1 "[mom]: \\$0 is no longer a valid macro. +. tm1 " Use 'HEADING_STYLE <level> NUMBER' instead. See docs. +. ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +. return +. \} +. if '\\$0'NUMBER_HEADS' .nr level 1 +. if '\\$0'NUMBER_SUBHEADS' .nr level 2 +. if '\\$0'NUMBER_SUBSUBHEADS' .nr level 3 +. ds mom "[mom]:\" +. ie '\\$1'' .ds $PARAM NUMBER +. el \{\ +. ds $PARAM NO_NUMBER +. ds $SWITCH " \\$1 +. \} +. HEADING_STYLE \\n[level] \\*[$PARAM] +. if (\\n[#OLDSTYLE_HD]=1):(\\n[#OLDSTYLE_SH]=1):(\\n[#OLDSTYLE_SSH]=1) \{\ +. tm1 "\\*[mom] OLDSTYLE_HEADINGS detected. +. ds mom " \" +. \} +. tm1 "\\*[mom] Setting HEADING_STYLE \\n[level] to '\\*[$PARAM]' at '\\$0\\*[$SWITCH]', line \\n[.c]. +. rm $PARAM +. rm $SWITCH +.END +. +.ALIAS NUMBER_HEADS HEADING_NUMBERS +.ALIAS NUMBER_SUBHEADS HEADING_NUMBERS +.ALIAS NUMBER_SUBSUBHEADS HEADING_NUMBERS +.ALIAS NUMBER_PARAHEADS HEADING_NUMBERS +\# +\# PREFIX CHAPTER NUMBERS TO HEADINGS/TOC ENTRIES +\# ---------------------------------------------- +\# *Arguments: +\# <none> | <chapter number> | <anything> +\# *Function: +\# Toggles register #PREFIX_CH_NUM. Uses $CHAPTER to set #CH_NUM +\# if $CHAPTER is a digit; if <chapter number> given, sets #CH_NUM +\# to arg. +\# *Notes: +\# Default is OFF. +\# +.MAC PREFIX_CHAPTER_NUMBER END +. if \\n[#NUM_ARGS]=0 \{\ +. if !'\\*[$CHAPTER]'' \{\ +. if !\B'\\*[$CHAPTER]' \{\ +. tm1 "[mom]: \\$0 at line \\n[.c] cannot determine a chapter number. +. tm1 " Enter the current chapter number as a digit after PREFIX_CHAPTER. +. ab [mom]: Aborting '\\n[.F]', line \\n[.c]. +. \} +. \} +. \} +. ie '\\$1'' .nr #PREFIX_CH_NUM 1 +. el \{\ +. ie \B'\\$1' \{\ +. nr #PREFIX_CH_NUM 1 +. nr #CH_NUM \\$1 +. \} +. el .rr #PREFIX_CH_NUM +. \} +.END +\# +\# ==================================================================== +\# +\# +++LINE BREAKS+++ +\# +\# LINEBREAK CHARACTER +\# ------------------- +\# *Arguments: +\# [character] [iterations] [vertical adjustment] +\# *Function: +\# Allows user to specify a line break character and the number +\# of times to repeat it horizontally. +\# *Notes: +\# Without an argument, LINEBREAK_CHAR will deposit a blank line. +\# +\# Vertical adjustment requires a unit of measure (most likely +\# "p"), and has to be preceded by +|- +\# +.MAC LINEBREAK_CHAR END +. nr #REPEAT 1 +. ds $LINEBREAK_CHAR \\$1 +. if !'\\$2'' .nr #LB_CHAR_ITERATIONS \\$2 +. if !'\\$3'' .ds $LINEBREAK_CHAR_V_ADJ \\$3 +. if '\\*[$LINEBREAK_CHAR_V_ADJ]'' .ds $LINEBREAK_CHAR_V_ADJ +0 +. if \\n[#LB_CHAR_ITERATIONS] \{\ +. while (\\n[#LB_CHAR_ITERATIONS]>\\n[#REPEAT]) \{\ +. as $LINEBREAK_CHAR "\\ \\$1 +. nr #REPEAT \\n[#REPEAT]+1 +. \} +. \} +. rr #REPEAT +. rr #LB_CHAR_ITERATIONS +.END +\# +\# LINE BREAK +\# ---------- +\# *Arguments: +\# <none> +\# *Function: +\# Deposits line break character. +\# *Notes: +\# If $LINEBREAK_CHAR is blank, simply advances 2 line spaces. +\# +.MAC LINEBREAK END +. if r #Q_AT_TOP .rr #Q_AT_TOP +. if \\n[@TOP] .RESTORE_SPACE +. ie '\\*[$LINEBREAK_CHAR]'' \{\ +. br +. nop \& +. sp +. \} +. el \{\ +. ie \\n[#END_QUOTE] . +. el .sp +. ev LINEBREAK +. evc 0 +. CENTER +. PRINT \ +\m[\\*[$LINEBREAK_COLOR]]\v'\\*[$LINEBREAK_CHAR_V_ADJ]'\ +\\*[$LINEBREAK_CHAR]\m[] +. sp +. ev +. QUAD \\*[$DOC_QUAD] +. \} +. nr #LINEBREAK 1 +. if r #QUOTE .rr #QUOTE +. if r #END_QUOTE .rr #END_QUOTE +. nr #PP 0 +. nr #LB_4_HD 1 +. nr #LB_4_PARAHEAD 1 +.END +\# +\# ==================================================================== +\# +\# +++PARAGRAPHS+++ +\# +\# PARAGRAPH FONT +\# -------------- +\# *Argument: +\# <font of running text> +\# *Function: +\# Creates or modifies string $PP_FT. +\# *Notes: +\# Affects all paragraphs. +\# +.MAC PP_FONT END +. if \\n[#PRINT_STYLE]=1 \{\ +. ie \\n[#ITALIC_MEANS_ITALIC] .nop +. el .return +. \} +. if \\n[#COLLATE]=1 \ +. if !'\\*[$SAVED_PP_FT]'' .rm $SAVED_PP_FT +. ds $PP_FT \\$1 +. FT \\*[$PP_FT] +.END +\# +\# PARAGRAPH INDENT +\# ---------------- +\# *Argument: +\# <amount to indent paragraphs in running text (ipPcm)> +\# *Function: +\# Allows user to change the default para indent. The change will +\# affect the indent of QUOTEs and BLOCKQUOTEs as well. +\# *Notes: +\# Default for printstyle TYPEWRITE is 1/2-inch. Default for +\# printstyle TYPESET is 2 ems. The defaults are set in +\# PRINTSTYLE, not DEFAULTS. +\# +.MAC PARA_INDENT END +. ie \B'\\$1' \{\ +. nr #PP_INDENT (\\$1) +. nr #SAVED_PP_INDENT \\n[#PP_INDENT] +. \} +. el \{\ +. ie '\\$1'' \{\ +. nr #PP_INDENT \\n[#SAVED_PP_INDENT] +. rr #SAVED_PP_INDENT +. \} +. el \{\ +. nr #SAVED_PP_INDENT \\n[#PP_INDENT] +. rr #PP_INDENT +. \} +. \} +.END +\# +\# INDENT FIRST PARAGRAPHS +\# ----------------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# By default, the first para of a document, as well as the first +\# paras of blockquotes and block-style epigraphs are not indented. +\# When invoked, this macro will indent all paras. +\# *Notes: +\# Default is OFF. +\# +.MAC INDENT_FIRST_PARAS END +. ie '\\$1'' .nr #INDENT_FIRST_PARAS 1 +. el .rr #INDENT_FIRST_PARAS +.END +\# +\# INTER-PARAGRAPH SPACING +\# ----------------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Adds a line space between paragraphs in body text. Block quotes +\# are unaffected. +\# *Notes: +\# Default is OFF. PARA_SPACE is not recommended for use with +\# PRINTSTYLE TYPEWRITE without SINGLESPACE. +\# +.MAC PARA_SPACE END +. ie '\\$1'' \ +. nr #PP_SPACE 1 +. el \{\ +. ie \B'\\$1' \{\ +. nr #PP_SPACE 1 +. ds $PP_SPACE_AMOUNT \\$1 +. \} +. el .rr #PP_SPACE +. \} +.END +\# +\# PARAGRAPH +\# --------- +\# *Arguments: +\# <none> +\# *Function: +\# Figures out what to do with paragraphs under differing conditions. +\# *Notes: +\# Note the use of transparent line break (\!.br) to get +\# PP to work within blockquotes and epigraphs. +\# +\# PP_STYLE 1 = regular paras; 2 = blockquotes, epigraphs +\# +.MAC PP END +. if \\n[#COVERTEXT_PP] \{\ +. ie \\n[#INDENT_ACTIVE] .ti \\n[#INDENT]u+\\n[#PP_INDENT]u +. el .ti \\n[#PP_INDENT]u +. return +. \} +. if \\n[#PP]>0 .br +. if \\n[#DOC_TYPE]=4 \{\ +. if !'\\n[.z]'' .di +. nr #TOTAL_FIELDS \\n[#FIELD] +. nr #FIELD 0 1 +. nr #NUM_FIELDS 0 1 +. if \\n[#TOTAL_FIELDS]>0 \{\ +. while \\n+[#NUM_FIELDS]<=\\n[#TOTAL_FIELDS] \{\ +. nf +. LETTERHEAD\\n+[#FIELD] +. QUAD \\*[$DOC_QUAD] +. ALD \\n[#DOC_LEAD]u +. if \\n[#DATE_FIRST]=1 .ALD \\n[#DOC_LEAD]u +. rr #DATE_FIRST +. rm LETTERHEAD\\n[#FIELD] +. \} +. rr #FIELD +. rr #NUM_FIELDS +. rr #TOTAL_FIELDS +. \} +. \} +. rr #PP_ACTIVE +. if r #Q_AT_TOP .rr #Q_AT_TOP +. if \\n[#PP_STYLE]=1 \{\ +. if \\n[#ENDNOTE] \{\ +. nr #RESET_PARA_SPACE \\n[#PP_SPACE] +. ie \\n[#EN_PP_SPACE] .PARA_SPACE +. el .PARA_SPACE OFF +. \} +. if !\\n[#ENDNOTE] .po \\n[#L_MARGIN]u +. if \\n[#COLUMNS] \{\ +. if !\\n[#ENDNOTE] \{\ +. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u +. nr #L_MARGIN \\n[.o] +. \} +. \} +. if \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB] +. ie \\n[#PRINT_STYLE]=1 \{\ +. TYPEWRITER +. ie \\n[#ENDNOTE] .vs \\n[#EN_LEAD]u +. el .vs \\n[#DOC_LEAD]u +. QUAD \\*[$DOC_QUAD] +. if \\n[#SLANT_ON] \ +. if \\n[#UNDERLINE_SLANT] .UNDERLINE +. if '\\*[$PP_FT]'I' \ +. if \\n[#ITALIC_MEANS_ITALIC] .FT I +. \} +. el \{\ +. ie \\n[#ENDNOTE] \{\ +. FAMILY \\*[$EN_FAM] +. FT \\*[$EN_FT] +. ps \\n[#EN_PS]u +. vs \\n[#EN_LEAD]u +. QUAD \\*[$EN_QUAD] +. \} +. el \{\ +. FAMILY \\*[$DOC_FAM] +. if !'\\*[$SAVED_PP_FT]'' \{\ +. ds $PP_FT \\*[$SAVED_PP_FT] +. rm $SAVED_PP_FT +. \} +. FT \\*[$PP_FT] +. ps \\n[#DOC_PT_SIZE]u +. vs \\n[#DOC_LEAD]u +. QUAD \\*[$DOC_QUAD] +. \} +. \} +. ie \\n[#PP]=0 \{\ +. if \\n[#INDENT_FIRST_PARAS] \{\ +. ie \\n[#INDENT_ACTIVE] .ti \\n[#INDENT]u+\\n[#PP_INDENT]u +. el .ti \\n[#PP_INDENT]u +. if '\\n[.z]'END_NOTES' \ +. ti \\n[#EN_PP_INDENT]u+\\n[#EN_TEXT_INDENT]u +. \} +. if r #END_QUOTE \{\ +. if \\n[#END_QUOTE] \{\ +. if !\\n[#LINEBREAK] \{\ +. ie \\n[#INDENT_ACTIVE] .ti \\n[#INDENT]u+\\n[#PP_INDENT]u +. el .ti \\n[#PP_INDENT]u +. if '\\n[.z]'END_NOTES' \ +. ti \\n[#EN_PP_INDENT]u+\\n[#EN_TEXT_INDENT]u +. \} +. \} +. \} +. \} +. el \{\ +. if \\n[#PP_SPACE] \{\ +. ie \\n[#END_QUOTE] \{\ +. ie !'\\*[$PP_SPACE_AMOUNT]'' .sp \\*[$PP_SPACE_AMOUNT] +. el .sp +. rr #END_QUOTE +. nr #NO_SPACE 1 +. nr #BASELINE_MARK \\n[nl] +. \} +. el \{\ +. if \\n[#NO_SPACE]=1 .rr #NO_SPACE +. if \\n[post-float] \{\ +. if (\\n[.t]-1)<\\*[$PP_SPACE_AMOUNT] \{\ +. ie \\n[#COLS] .COL_NEXT +. el .NEWPAGE +. \} +. rr post-float +. \} +. if !\\n[nl]=\\n[#BASELINE_MARK] \{\ +. ie !'\\*[$PP_SPACE_AMOUNT]'' .sp \\*[$PP_SPACE_AMOUNT] +. el .sp +. rr #BASELINE_MARK +. \} +. \} +. \} +. if \\n[restore-pp-space] \{\ +. rr restore-pp-space +. PARA_SPACE +. \} +. ie \\n[#INDENT_ACTIVE] .ti \\n[#INDENT]u+\\n[#PP_INDENT]u +. el .ti \\n[#PP_INDENT]u +. if '\\n[.z]'END_NOTES' \ +. ti \\n[#EN_PP_INDENT]u+\\n[#EN_TEXT_INDENT]u +. \} +. if r #START .rr #START +. if r #QUOTE .rr #QUOTE +. if r #END_QUOTE .rr #END_QUOTE +. if r #HEAD .rr #HEAD +. if r #SUBHEAD .rr #SUBHEAD +. if r #EPIGRAPH .rr #EPIGRAPH +. if r #Q_FITS .rr #Q_FITS +. if r #LINEBREAK .rr #LINEBREAK +. if \\n[#ENDNOTE] \{\ +. ie \\n[#RESET_PARA_SPACE] .PARA_SPACE +. el .PARA_SPACE OFF +. \} +. if \\n[#CONDENSE] \{\ +\E*[COND]\c +. \} +. if \\n[#EXTEND]=1 \{\ +\E*[EXT]\c +. \} +. nr #PP +1 +. \} +. if \\n[#PP_STYLE]=2 \{\ +\!. br +. ie \\n[#Q_PP]=0 \{\ +. if \\n[#INDENT_FIRST_PARAS] \ +. ti \\n[#PP_INDENT]u/2u +. if \\n[#ENDNOTE] \{\ +. ie \\n[#INDENT_FIRSTS] .ti \\n[#PP_INDENT]u/2u +. el .ti 0 +. \} +. \} +. el \{\ +. ti \\n[#PP_INDENT]u/2u +. if \\n[#PP_SPACE]=1 \{\ +. ie !'\\*[$PP_SPACE_AMOUNT]'' .ALD \\*[$PP_SPACE_AMOUNT] +. el .sp +. \} +. \} +. if \\n[#CONDENSE] \{\ +\E*[COND]\c +. \} +. if \\n[#EXTEND]=1 \{\ +\E*[EXT]\c +. \} +. nr #Q_PP +1 +. \} +.\" This takes care of multi-paragraph dialogue, where each para +.\" is introduced by an open quote whereas the previous para has +.\" no close quote. +. if \\n[#OPEN_CLOSE]=1 .nr #OPEN_CLOSE 0 +. nr #PP_ACTIVE 1 +. UNDERLINE OFF +. if r #QUOTE_4_HD .rr #QUOTE_4_HD +. if r #LB_4_HD .rr #LB_4_HD +.END +\# +\# ==================================================================== +\# +\# +++QUOTES+++ +\# +\# ---Line for line quotes, e.g. poetry or code snippets--- +\# +\# UNDERLINE QUOTES +\# ---------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Creates or modifies register #UNDERLINE_QUOTES (toggle). +\# If on, line for line quotes are underlined when printstyle +\# is TYPEWRITE. +\# *Notes: +\# Default is ON for printstyle TYPEWRITE. +\# +.MAC UNDERLINE_QUOTES END +. ie '\\$1'' .nr #UNDERLINE_QUOTES 1 +. el .rr #UNDERLINE_QUOTES +.END +\# +\# QUOTE INDENT +\# ------------ +\# *Argument: +\# <integer> | <integer with unit of measure appended> +\# *Function: +\# Creates or modifies register #Q_OFFSET_VALUE or string +\# $Q_OFFSET_VALUE. +\# *Notes: +\# If just an integer given, value by which to multiply PARA_INDENT +\# to get quote indent. If integer with a unit of measure appended, +\# absolute value of quote indent. +\# +\# Default is 3 for typeset; 2 for typewrite. +\# +.MAC QUOTE_INDENT END +. if '\\$0'BLOCKQUOTE_INDENT' .ds BQ BQ +. if '\\$0'QUOTE_INDENT' .ds BQ Q +. rr #\\*[BQ]_OFFSET_VALUE +. rm $\\*[BQ]_OFFSET_VALUE +. ds $EVAL_QI_ARG \\$1 +. substring $EVAL_QI_ARG -1 +. ie \B'\\*[$EVAL_QI_ARG]' .nr #\\*[BQ]_OFFSET_VALUE \\$1 +. el .ds $\\*[BQ]_OFFSET_VALUE \\$1 +. rm BQ +.END +. +.ALIAS BLOCKQUOTE_INDENT QUOTE_INDENT +\# +\# QUOTE_AUTOLEAD +\# -------------- +\# *Arguments: +\# <autolead value> +\# *Function: +\# Sets autolead for quotes and/or blockquotes. +\# +.MAC QUOTE_AUTOLEAD END +. rr #\\$0_DEFAULT +. if '\\$0'QUOTE_AUTOLEAD' .nr #Q_AUTOLEAD (p;\\$1) +. if '\\$0'BLOCKQUOTE_AUTOLEAD' .nr #BQ_AUTOLEAD (p;\\$1) +. if '\\$0'ENDNOTE_QUOTE_AUTOLEAD' .nr #EN_Q_AUTOLEAD (p;\\$1) +. if '\\$0'ENDNOTE_BLOCKQUOTE_AUTOLEAD' .nr #EN_BQ_AUTOLEAD (p;\\$1) +.END +. +.ALIAS BLOCKQUOTE_AUTOLEAD QUOTE_AUTOLEAD +.ALIAS ENDNOTE_QUOTE_AUTOLEAD QUOTE_AUTOLEAD +.ALIAS ENDNOTE_BLOCKQUOTE_AUTOLEAD QUOTE_AUTOLEAD +\# +\# ALWAYS FULLSPACE QUOTES +\# ----------------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Toggles register #FULLSPACE_QUOTES. +\# *Notes: +\# If user doesn't like the default 1/2 line space above and below +\# quotes, s/he can turn it off here. Has no effect in TYPEWRITE. +\# +.MAC ALWAYS_FULLSPACE_QUOTES END +. if '\\$1'' .nr #FULLSPACE_QUOTES 1 +. el .rr #FULLSPACE_QUOTES +.END +\# +\# QUOTE +\# ----- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Indents quoted text on a line for line basis, or turns QUOTE off. +\# *Notes: +\# Owing to the need to bottom align TYPESET pages, quoted text gets +\# diverted so its depth can be measured (in DO_QUOTE) for determining +\# how much space to put before and after. +\# +.MAC QUOTE END +. ie \\n[@TOP] \ +. br +. el 'br +. if \\n[#PP]>0 .rr #START +. if '\\n[.z]'FLOAT*DIV' .nr Q-float 1 +. if \\n[#LINENUMBERS]=1 \{\ +. nr #LINENUMBERS 2 +. nr #NEXT_LN \\n[ln] +. nm +. \} +. if '\\$1'ADJUST' \{\ +. ds $Q_SPACE_ADJUST \\$2 +. shift 2 +. \} +. ie '\\$1'' \{\ +. ev QUOTE +. evc 0 +. if \\n[.i] .in 0 +. if \\n[#LINENUMBERS]=2 \ +. if \\n[#SILENT_QUOTE_LN]=1 .nm \\n[#NEXT_LN] 1000 -4 +. nr #IN_DIVER 1 +. nr #QUOTE 1 +. di P_QUOTE +. if '\\*[$Q_QUAD]'RIGHT' \{\ +. ie !'\\*[$Q_OFFSET_VALUE]'' .ll \\n[#L_LENGTH]u-\\*[$Q_OFFSET_VALUE] +. el .ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u) +. \} +. ta \\n[.l]u +. if \\n[#COLUMNS] \{\ +. ie \\n[#Q_OFFSET_VALUE] \ +. ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u) +. el .ll \\n[#COL_L_LENGTH]u-\\*[$Q_OFFSET_VALUE] +. ta \\n[.l]u +. \} +. if \\n[#PRINT_STYLE]=1 \{\ +. TYPEWRITER +. vs \\n[#DOC_LEAD]u +. LEFT +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. FAMILY \\*[$QUOTE_FAM] +. FT \\*[$QUOTE_FT] +. ps \\n[#DOC_PT_SIZE]u\\*[$QUOTE_SIZE_CHANGE] +. ie !r #Q_AUTOLEAD .vs \\n[#DOC_LEAD]u +. el \{\ +. vs \\n[.ps]u+\\n[#Q_AUTOLEAD]u +. nr #Q_LEAD \\n[.v] +. \} +. if \\n[#ENDNOTE] \{\ +. ps \\n[#EN_PS]u\\*[$QUOTE_SIZE_CHANGE] +. ie !r #EN_Q_AUTOLEAD .vs \\n[#EN_Q_LEAD]u +. el \{\ +. vs \\n[.ps]u+\\n[#EN_Q_AUTOLEAD]u +. nr #EN_Q_LEAD \\n[.v] +. \} +. \} +. nr #Q_LEAD_REAL \\n[.v] +. if \\n[#QUOTE_COLOR]=1 \{\ +. nf +. COLOR \\*[$QUOTE_COLOR] +. \} +. \\*[$Q_QUAD] +. \} +. if \\n[#LINENUMBERS]=2 \{\ +. ie \\n[#QUOTE_LN]=1 \{\ +. if '\\n[#Q_LN_GUTTER]'' .nr #Q_LN_GUTTER \\n[#LN_GUTTER] +. LN_PARAMS +. nm \\n[ln] "" \\n[#Q_LN_GUTTER] -3-\\n[#Q_LN_GUTTER] +. RESTORE_PARAMS +. \} +. el \ +. if !\\n[#SILENT_QUOTE_LN] .NUMBER_LINES OFF +. \} +. nr #Q_TOP \\n[nl] +. if \\n[#PRINT_STYLE]=1 \ +. if \\n[#UNDERLINE_QUOTES] .FT I +. \} +. el .DO_QUOTE +.END +\# +\# CODE +\# ---- +\# *Arguments: +\# <none> [ BR | BREAK | SPREAD ] +\# or +\# <anything> [ BR | BREAK | SPREAD ] +\# *Function: +\# Takes care of administrivia associated with setting code snippets. +\# +.MAC CODE END +\c +. if '\\$1'BR' \{\ +. ie '\\n[.z]'FLOAT*DIV' 'br +. el .br +. shift +. \} +. if '\\$1'BREAK' \{\ +. ie '\\n[.z]'FLOAT*DIV' 'br +. el .br +. shift +. \} +. if '\\$1'SPREAD' \{\ +. ie '\\n[.z]'FLOAT*DIV' 'brp +. el .brp +. shift +. \} +. ie '\\$1'' \{\ +. ds $RESTORE_FAM \\n[.fam] +. ds $RESTORE_FT \\n[.sty] +. ie \\n[#PRINT_STYLE]=1 \{\ +. CODE_FAMILY C +. ie \\n[#CODE_FT]=1 .ft \\*[$CODE_FT] +. el \{\ +. CODE_FONT R +. ft R +. char ' \[aq] +. \} +. if \\n[#UNDERLINE_QUOTES]=1 \{\ +. nr #RESTORE_UNDERLINE 1 +. UNDERLINE_QUOTES OFF +. FT \\*[$CODE_FT] +. char ' \[aq] +. \} +. \} +. el \{\ +. ie \\n[#CODE_FAM]=1 .fam \\*[$CODE_FAM] +. el \{\ +. CODE_FAMILY C +. fam \\*[$CODE_FAM] +. \} +. ie \\n[#CODE_FT]=1 .ft \\*[$CODE_FT] +. el \{\ +. CODE_FONT R +. ft \\*[$CODE_FT] +. \} +. if \\n[#CODE_COLOR]=1 .COLOR \\*[$CODE_COLOR] +. char ' \[aq] +. if !\\n[#CODE_SIZE_ADJ]=0 \{\ +. ds $RESTORE_SIZE \\n[.s] +. ps \\n[#PT_SIZE]u*\\n[#CODE_SIZE_ADJ]u/100u +. \} +. if \\n[#SQ_ON] \{\ +. nr #SQ_WAS_ON 1 +. SMARTQUOTES OFF +. \} +. \} +. \} +. el \{\ +. fam \\*[$RESTORE_FAM] +. ft \\*[$RESTORE_FT] +. if !\\n[#CODE_SIZE_ADJ]=0 .ps \\*[$RESTORE_SIZE] +. rm $RESTORE_FAM +. rm $RESTORE_FT +. rm $RESTORE_SIZE +. if \\n[#PRINT_STYLE]=2 .char ' \[cq] +. if !'\\n[.z]'' \ +. if \\n[#LINENUMBERS] .nn +. if \\n[#CODE_COLOR]=1 .gcolor +. if \\n[#RESTORE_UNDERLINE]=1 \{\ +. rr #RESTORE_UNDERLINE +. UNDERLINE_QUOTES +. \} +. if \\n[#SQ_WAS_ON]=1 \{\ +. rr #SQ_WAS_ON +. SMARTQUOTES +. \} +. if \\n[#QUOTE] .sp -1 +. if \\n[pdfbx-end] .if !\\n[#QUOTE] .sp -1 +. \} +.END +\# +\# ---Blockquotes--- +\# +\# BLOCKQUOTE +\# ---------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Indents quoted text in fill mode and shortens line length +\# equivalently, or turns BLOCKQUOTE off. +\# *Notes: +\# Owing to the need to bottom align TYPESET pages, quoted text gets +\# diverted so its depth can be measured (in DO_QUOTE) for determining +\# how much space to put before and after. +\# +\# .PP after blockquote is optional if there's only one para, +\# but required if there's more than one. +\# +.MAC BLOCKQUOTE END +. ie \\n[@TOP] \ +. br +. el 'br +. if \\n[#PP]>0 .rr #START +. if '\\n[.z]'FLOAT*DIV' .nr Q-float 1 +. if \\n[#LINENUMBERS]=1 \{\ +. nr #LINENUMBERS 2 +. nr #NEXT_LN \\n[ln] +. nm +. \} +. if '\\$1'ADJUST' \{\ +. ds $BQ_SPACE_ADJUST \\$2 +. shift 2 +. \} +. ie '\\$1'' \{\ +. ev BLOCKQUOTE +. evc 0 +. if \\n[.i] .in 0 +. if \\n[#LINENUMBERS]=2 \ +. if \\n[#SILENT_BQUOTE_LN]=1 .nm \\n[#NEXT_LN] 1000 -4 +. nr #IN_DIVER 1 +. nr #QUOTE 2 +. nr #PP_STYLE 2 +. nr #Q_PP 0 +. di B_QUOTE +. ie !'\\*[$BQ_OFFSET_VALUE]'' .ll \\n[#L_LENGTH]u-(\\*[$BQ_OFFSET_VALUE]*2u) +. el .ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#BQ_OFFSET_VALUE]u*2u)) +. if \\n[#ENDNOTE] \{\ +. if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\ +. ie r#BQ_OFFSET_VALUE \ +. ll \ +\\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\n[#EN_PP_INDENT]u*(\\n[#BQ_OFFSET_VALUE]u*2u)) +. el \ +. ll \ +\\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\*[$BQ_OFFSET_VALUE]*2u) +. \} +. if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\ +. ie r#BQ_OFFSET_VALUE \ +. ll \\n[#L_LENGTH]u-(\\n[#EN_PP_INDENT]u*(\\n[#BQ_OFFSET_VALUE]u*2u)) +. el \ +. ll \\n[#L_LENGTH]u-(\\*[$BQ_OFFSET_VALUE]u*2u) +. \} +. \} +. ta \\n[.l]u +. CHECK_INDENT +. if \\n[#COLUMNS] \{\ +. ie r#BQ_OFFSET_VALUE \ +. ll \ +\\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#BQ_OFFSET_VALUE]u*2u)) +. el \ +. ll \\n[#COL_L_LENGTH]u-(\\*[$BQ_OFFSET_VALUE]*2u) +. if \\n[#ENDNOTE] \{\ +. if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\ +. ie r#BQ_OFFSET_VALUE \ +. ll \ +\\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\n[#EN_PP_INDENT]u*(\\n[#BQ_OFFSET_VALUE]u*2u)) +. el \ +. ll \ +\\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\*[$BQ_OFFSET_VALUE]*2u) +. \} +. if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\ +. ie r#BQ_OFFSET_VALUE \ +. ll \ +\\n[#COL_L_LENGTH]u-(\\n[#EN_PP_INDENT]u*(\\n[#BQ_OFFSET_VALUE]u*2u)) +. el \ +. ll \\n[#COL_L_LENGTH]u-(\\*[$BQ_OFFSET_VALUE]*2u) +. \} +. \} +. ta \\n[.l]u +. \} +. if \\n[#PRINT_STYLE]=1 \{\ +. TYPEWRITER +. vs \\n[#DOC_LEAD]u +. QUAD LEFT +. HY OFF +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. FAMILY \\*[$BQUOTE_FAM] +. FT \\*[$BQUOTE_FT] +. ps \\n[#DOC_PT_SIZE]u\\*[$BQUOTE_SIZE_CHANGE] +. ie !r #BQ_AUTOLEAD .vs \\n[#DOC_LEAD]u +. el \{\ +. vs \\n[.ps]u+\\n[#BQ_AUTOLEAD]u +. nr #BQ_LEAD \\n[.v] +. \} +. if \\n[#ENDNOTE] \{\ +. ps \\n[#EN_PS]u\\*[$BQUOTE_SIZE_CHANGE] +. ie !r#EN_BQ_AUTOLEAD .vs \\n[#EN_BQ_LEAD]u +. el \{\ +. vs \\n[.ps]u+\\n[#EN_BQ_AUTOLEAD]u +. nr #EN_BQ_LEAD \\n[.v] +. \} +. \} +. nr #BQ_LEAD_REAL \\n[.v] +. if \\n[#BQUOTE_COLOR]=1 \{\ +. nf +. COLOR \\*[$BQUOTE_COLOR] +. \} +. QUAD \\*[$BQUOTE_QUAD] +. nr #DIVERSIONS_HY_MARGIN (p;\\n[.ps]u*2.75)/1000 +. HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p +. hy 14 +. \} +. if \\n[#LINENUMBERS]=2 \{\ +. ie \\n[#BQUOTE_LN]=1 \{\ +. if '\\n[#BQ_LN_GUTTER]'' .nr #BQ_LN_GUTTER \\n[#LN_GUTTER] +. LN_PARAMS +. nm \\n[ln] "" \\n[#BQ_LN_GUTTER] -3-\\n[#BQ_LN_GUTTER] +. RESTORE_PARAMS +. \} +. el \ +. if !\\n[#SILENT_BQUOTE_LN] .NUMBER_LINES OFF +. \} +. nr #Q_TOP \\n[nl] +. if \\n[#INDENT_FIRST_PARAS] \{\ +. ie !\\n[#ENDNOTE] \{\ +. if \\n[#PRINT_STYLE]=1 .ti \\n[#PP_INDENT]u/2u +. if \\n[#PRINT_STYLE]=2 .ti \\n[#PP_INDENT]u/2u +. \} +. el \{\ +. if \\n[#INDENT_FIRSTS]=1 \{\ +. if \\n[#PRINT_STYLE]=1 .ti \\n[#EN_PP_INDENT]u/2u +. if \\n[#PRINT_STYLE]=2 .ti \\n[#EN_PP_INDENT]u/2u +. \} +. \} +. \} +. \} +. el .DO_BLOCKQUOTE +.END +\# +\# DO QUOTE +\# -------- +\# *Arguments: +\# <none> +\# *Function: +\# Ends the diversion P_QUOTE or B_QUOTE. Spaces them according to +\# PRINTSTYLE, whether there's inter-paragraph spacing, and page +\# position. TYPEWRITE treats spacing the same way in all circumstance +\# (viz. an extra line space). TYPESET puts in only half +\# line spaces if the entire quote plus 1 line of body under the quote +\# fits on the page; otherwise it puts in a full extra blank +\# line. (This is to ensure the page remains bottom aligned). +\# +.MAC DO_QUOTE END +. br +. if \\n[#DIVER_LN_OFF] \{\ +\!. NUMBER_LINES OFF +. rr #DIVER_LN_OFF +. \} +. nr #Q_DEPTH \\n[.d] +. di +. if '\\$0'DO_BLOCKQUOTE' .ds BQ BQ +. if '\\$0'DO_QUOTE' .ds BQ Q +. rr #IN_DIVER +. if \\n[#RESET_FN_COUNTERS]=2 \{\ +. if !\\n[#FN_COUNT]=1 \{\ +. if ((\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS])+\\n[#DIVER_DEPTH])>(\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS]) \{\ +. DIVER_FN_2_POST +. rr #RESET_FN_COUNTERS +. \} +. \} +. \} +. nr #SAVED_FN_NUMBER \\n[#FN_NUMBER] +. nr #DONE_ONCE 0 1 +. REMOVE_INDENT +. ev +. nr #Q_LEAD_DIFF \\n[#LEAD]-\\n[#\\*[BQ]_LEAD_REAL] +. nr q-lead-diff \\n[#Q_LEAD_DIFF] +. if !\\n[pdfbx-running] \{\ +. if !'\\n[.z]'FLOAT*DIV' \{\ +. br +. nr #CALCULATE_ONLY 1 +. nr #CURRENT_V_POS \\n[nl]+\\n[#Q_DEPTH] +. SHIM +. rr #CALCULATE_ONLY +. nr #Q_SPACE_EQ (\\n[#SHIM]/2) +. nr #TRAP \\n[.t]-1 +. \} +. \} +. if \\n[#ENDNOTE] \{\ +. nr #RESET_QUOTE_SPACING \\n[#FULLSPACE_QUOTES] +. ALWAYS_FULLSPACE_QUOTES +. \} +. if \\n[#PRINT_STYLE]=1 \{\ +. if \\n[#START]=1 . +. if \\n[#START]=0 \ +. if !\\n[#LINEBREAK] .ALD \\n[#DOC_LEAD]u +. if \\n[#HEAD] \ +. if \\n[#HEAD]=1 .RLD \\n[#DOC_LEAD]u +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. ie \\n[#PP_SPACE] \{\ +. ie \\n[#HEAD] . +. el \{\ +. ie \\n[#START] . +. el \{\ +. ie \\n[#FULLSPACE_QUOTES] .ALD \\n[#DOC_LEAD]u +. el .ALD \\n[#DOC_LEAD]u/2u +. \} +. \} +. \} +. el \{\ +. if !\\n[nl]=\\n[#PAGE_TOP] \{\ +. ie \\n[#Q_DEPTH]<(\\n[#TRAP_DISTANCE]-1) \{\ +. ie ((\\n[#TRAP_DISTANCE]-1)-\\n[#Q_DEPTH])<\\n[#DOC_LEAD] \ +. Q_NOFIT +. el \{\ +. ie (\\n[#TRAP_DISTANCE]-\\n[#DOC_LEAD])<\\n[#DOC_LEAD] \ +. Q_NOFIT +. el \{\ +. ie (\\n[#Q_DEPTH]+\\n[.v])=(\\n[#TRAP_DISTANCE]-1) \ +. Q_NOFIT +. el .Q_FITS +. \} +. \} +. \} +. el .Q_NOFIT +. \} +. \} +. if \\n[#LINEBREAK] \{\ +. vpt 0 +. ie !\\n[@TOP] .sp -\\n[#DOC_LEAD]u +. el \{\ +. nop +. sp |\\n[#T_MARGIN]u-\\n[#BQ_LEAD]u +. \} +. vpt +. \} +. \} +. ie !'\\*[$\\*[BQ]_OFFSET_VALUE]'' \ +. nr #\\*[BQ]_OFFSET \\n[#L_MARGIN]+(\\*[$\\*[BQ]_OFFSET_VALUE]) +. el \ +. nr #\\*[BQ]_OFFSET \ +\\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#\\*[BQ]_OFFSET_VALUE]) +. if \\n[#COLUMNS] \{\ +. ie r#\\*[BQ]_OFFSET_VALUE \ +. nr #\\*[BQ]_OFFSET \ +\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#\\*[BQ]_OFFSET_VALUE]) +. el .nr #\\*[BQ]_OFFSET \ +\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$\\*[BQ]_OFFSET_VALUE] +. \} +. if !\\n[#ENDNOTE] \{\ +. ie '\\*[BQ]'Q' \{\ +. if '\\*[$Q_QUAD]'LEFT' \{\ +. po \\n[#Q_OFFSET]u +. if '\\n[.z]'FLOAT*DIV' \!.po \\n[#Q_OFFSET]u +. \} +. \} +. el \{\ +. po \\n[#\\*[BQ]_OFFSET]u +. if '\\n[.z]'FLOAT*DIV' \!.po \\n[#\\*[BQ]_OFFSET]u +. \} +. \} +. if \\n[#ENDNOTE] \{\ +. ie \\n[#\\*[BQ]_OFFSET_VALUE] \ +. in +\\n[#EN_PP_INDENT]u*\\n[#\\*[BQ]_OFFSET_VALUE]u +. el .in +\\*[$\\*[BQ]_OFFSET_VALUE] +. \} +. ie \\n[#START]=1 \ +. RLD 0-\\n[#Q_LEAD_DIFF]u +. el \{\ +. if \\n[#PRINT_STYLE]=2 \{\ +. ie !\\n[pdfbx-post-q] \{\ +. ie !\\n[#NO_SHIM] \ +. sp \\n[#Q_SPACE_EQ]u+(\\n[#Q_LEAD_DIFF]u/2u) +. el .if !\\n[#NO_FLEX] .FLEX +. \} +. el .sp -.5 +. \} +. \} +. if \\n[#QUOTE]=1 \{\ +. if !'\\*[$Q_SPACE_ADJUST]'' .sp +\\*[$Q_SPACE_ADJUST] +. nf +. P_QUOTE +. if !'\\*[$Q_SPACE_ADJUST]'' \{\ +. sp -\\*[$Q_SPACE_ADJUST] +. rm $Q_SPACE_ADJUST +. \} +. \} +. if \\n[#QUOTE]=2 \{\ +. if !'\\*[$BQ_SPACE_ADJUST]'' .sp +\\*[$BQ_SPACE_ADJUST] +. nf +. B_QUOTE +. if !'\\*[$BQ_SPACE_ADJUST]'' \{\ +. sp -\\*[$BQ_SPACE_ADJUST] +. rm $BQ_SPACE_ADJUST +. \} +. \} +. if !\\n[#START] .rr #QUOTE +. rr delay-ev-pop +. if !'\\n[.z]'FLOAT*DIV' \{\ +. if \\n[#PRINT_STYLE]=1 \{\ +. if !\\n[.v]=\\n[#DOC_LEAD] \{\ +. if !r pdfbx-post-q \{\ +. ie !\\n[#NO_SHIM] .SHIM +. el \ +. if !\\n[#NO_FLEX] .FLEX +. \} +. \} +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. ie \\n[#START] \{\ +. ie \\n[#PP_SPACE] . +. el \{\ +. sp \\n[#DOC_LEAD]u/2u +. if !r pdfbx-post-q \{\ +. ie !\\n[#NO_SHIM] .SHIM +. el \ +. if !\\n[#NO_FLEX] .FLEX +. \} +. \} +. \} +. el \{\ +. ie \\n[#HEAD]=1 \{\ +. sp \\n[#DOC_LEAD]u +. if !r pdfbx-post-q \{\ +. ie !\\n[#NO_SHIM] .SHIM +. el \ +. if !\\n[#NO_FLEX] .FLEX +. \} +. \} +. el \{\ +. ie \\n[#FULLSPACE_QUOTES] \{\ +. ie \\n[#ENDNOTE] .ALD \\n[#EN_LEAD]u +. el .if !'\\n[.z]'FLOAT*DIV' .ALD \\n[#DOC_LEAD]u +. \} +. el \ +. if !'\\n[.z]'FLOAT*DIV' .ALD \\n[#DOC_LEAD]u/2u +. ie \\n[#Q_FITS] \{\ +. ie (\\n[#Q_TOP]=\\n[#PAGE_TOP]):(\\n[@TOP]=1) \{\ +. if \\n[has-label] .sp \\n[#DOC_LEAD]u/2u +. if !'\\n[.z]'FLOAT*DIV' \{\ +. nr #Q_AT_TOP 1 +. nr #DELAY_SHIM 1 +. \} +. \} +. el \{\ +. ie !\\n[#NO_SHIM] .SHIM +. el .if !\\n[#NO_FLEX] .FLEX +. \} +. \} +. el \{\ +. ie r pdfbx-post-q \{\ +. if \\n[.t]>1v \{\ +. ie !\\n[#NO_SHIM] .SHIM +. el \ +. if !\\n[#NO_FLEX] .FLEX +. \} +. \} +. el \{\ +. ie !\\n[#NO_SHIM] .SHIM +. el \ +. if !\\n[#NO_FLEX] .FLEX +. \} +.\" Make sure that Q_LEAD_DIFF is not added to the first line of +.\" normal text at the top of any page following output of a quote +.\" whose last line falls on B_MARGIN of the previous page. +. if \\n[#Q_LEAD_DIFF] \{\ +. if \\n[nl]=(\\n[#T_MARGIN]-\\n[#DOC_LEAD]+\\n[#Q_LEAD_DIFF]) \{\ +. PRINT \& +. br +. sp -1v-\\n[#Q_LEAD_DIFF]u +. nr #Q_LEAD_DIFF_CHECK 1 +. \} +. \} +. \} +. \} +. \} +. \} +. \} +. if \\n[#RESTORE_NO_SHIM] .nr #NO_SHIM 1 +. rr #Q_SPACE_EQ +. if \\n[#LINENUMBERS]=2 \{\ +. nr #LINENUMBERS 1 +. if !\\n[#ENDNOTE] \{\ +. ie \\n[#RESTORE_LN_NUM]=1 \{\ +. LN_PARAMS +. nm \\n[#NEXT_LN] +. RESTORE_PARAMS +. \} +. el \{\ +. LN_PARAMS +. nm +0 +. RESTORE_PARAMS +. \} +. \} +. \} +. if \\n[#ENDNOTE] \ +. nr #FULLSPACE_QUOTES \\n[#RESET_QUOTE_SPACING] +. if r #HEAD .rr #HEAD +. if r #EPIGRAPH .rr #EPIGRAPH +. rr #Q_PP +. rr #LINEBREAK +. nr #PP_STYLE 1 +. nr #END_QUOTE 1 +. if !\\n[#ENDNOTE] \ +. po \\n[#L_MARGIN]u +. if \\n[#ENDNOTE] .in \\n[#EN_TEXT_INDENT]u +. if \\n[#COLUMNS] \{\ +. if !\\n[#ENDNOTE] \{\ +. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u +. nr #L_MARGIN \\n[.o] +. \} +. if \\n[#ENDNOTE] .in \\n[#EN_TEXT_INDENT]u +. \} +. ie !\\n[#ENDNOTE] .QUAD \\*[$DOC_QUAD] +. el .QUAD \\*[EN_QUAD] +. if r #DELAY_SHIM \{\ +. ie !\\n[#NO_SHIM] .SHIM +. el \ +. if !\\n[#NO_FLEX] .FLEX +. rr #DELAY_SHIM +. \} +. if \\n[#PRINT_STYLE]=1 \ +. if \\n[#UNDERLINE_QUOTES] .FT R +. nr #QUOTE_4_HD 1 +. rr #\\*[BQ]_LEAD_REAL +. rm BQ +. if \\n[#DOC_TYPE]=5 .NO_SHIM +. if '\\n[.z]'FLOAT*DIV' \!.po \\n[#L_MARGIN]u +.END +. +.ALIAS DO_BLOCKQUOTE DO_QUOTE +\# +\# Utility macros for DO_QUOTE +\# --------------------------- +\# +.MAC Q_FITS END +. nr #Q_FITS 1 +. ie \\n[#HEAD]=1 .ALD \\n[#Q_LEAD_DIFF]u +. el \{\ +. ie \\n[#START] . +. el \{\ +. ie \\n[#FULLSPACE_QUOTES] \{\ +. ie \\n[#ENDNOTE] .ALD \\n[#EN_LEAD]u+\\n[#Q_LEAD_DIFF]u +. el .ALD \\n[#DOC_LEAD]u+\\n[#Q_LEAD_DIFF]u +. \} +. el \{\ +.\" This seems to be the only way to get the baseline of quotes that +.\" start at the top of the page to fall on the first line of the +.\" grid (ie. on the first valid baseline of the page). +. ie \\n[#Q_TOP]=\\n[#PAGE_TOP] \{\ +. if \\n[#QUOTE]=1 .ds $QUOTE_TYPE Q +. if \\n[#QUOTE]=2 .ds $QUOTE_TYPE B +. rn \\*[$QUOTE_TYPE]_QUOTE Q_TEMP +. di \\*[$QUOTE_TYPE]_QUOTE +. nf +. if \\n[#QUOTE]=1 .vs \\n[#Q_LEAD]u +. if \\n[#QUOTE]=2 .vs \\n[#BQ_LEAD]u +. PRINT \& +. sp -1v+\\n[#Q_LEAD_DIFF]u +. Q_TEMP +. di +. rm Q_TEMP +. sp \\n[#DOC_LEAD]u/2u +. \} +. el \ +. sp \\n[#DOC_LEAD]u/2u +. \} +. \} +. if \\n[#DIVER_FN]=2 .rr #DIVER_FN +. if !\\n[#NO_FLEX] .FLEX +. \} +. rm $QUOTE_TYPE +.END +\# +.MAC Q_NOFIT END +. rr #Q_FITS +. if \\n[#QUOTE]=1 \{\ +. ds $QUOTE_TYPE Q +. ds quote-type quote +. \} +. if \\n[#QUOTE]=2 \{\ +. ds $QUOTE_TYPE B +. ds quote-type blockquote +. \} +. if \\n[has-caption] \{\ +. if !\\n[@TOP] \ +. if !\\n[nl]=\\n[#PAGE_TOP] \ +. if (\\n[.t]-1)<\ +\\n[#DOC_LEAD]+(\\n[#DOC_LEAD]/4)\ ++\\n[#\\*[QUOTE_TYPE]_LEAD] \{\ +. tm1 "[mom]: Insufficient room for caption and at least one line of \\*[quote-type] +. tm1 " on page \\n[%] (line \\n[.c]). Moving quote to next page or column. +. ie \\n[#COLUMNS] .COL_NEXT +. el .NEWPAGE +. \} +. \} +. ie r#HEAD \ +. if \\n[#HEAD]=1 . +. el \{\ +. if \\n[#Q_DEPTH]=0 \ +. if \\n[.ns] .rs +. ie \\n[#FULLSPACE_QUOTES] \{\ +. ie \\n[#ENDNOTE] .sp \\n[#EN_LEAD]u+\\n[#Q_LEAD_DIFF]u +. el .sp \\n[#DOC_LEAD]u+\\n[#Q_LEAD_DIFF]u +. \} +. el \{\ +. sp .5 +. if \\n[@TOP] .rs +. \} +. ie \\n[#Q_LEAD_REAL] \ +. nr #Q_PARTIAL_DEPTH 0 \\n[#Q_LEAD_REAL] +. el .nr #Q_PARTIAL_DEPTH 0 \\n[#BQ_LEAD_REAL] +. while \\n+[#Q_PARTIAL_DEPTH]<(\\n[#TRAP_DISTANCE]-1) \{\ +. +. \} +. if !\\n[#Q_LEAD_REAL]=\\n[#DOC_LEAD] \{\ +. ie \\n[#Q_LEAD_REAL] \ +. nr #Q_PARTIAL_DEPTH -\\n[#Q_LEAD_REAL] +. el .nr #Q_PARTIAL_DEPTH -\\n[#BQ_LEAD_REAL] +. \} +. nr #Q_SPACE_EQ \ +(\\n[#TRAP_DISTANCE]-1)-\\n[#Q_PARTIAL_DEPTH]+(\\n[#Q_LEAD_DIFF]u/2u) +. if \\n[#FN_COUNT]>0 .nr #Q_SPACE_EQ (\\n[#Q_SPACE_EQ] / 2u) +.\" Hack to deal with the fact that even though the above routine +.\" makes the bottom line of the quote fall exactly on the bottom +.\" margin when traps are disabled, it refuses to do so when traps +.\" are on. The difference by which it's off is #Q_LEAD_DIFF +.\" (the +\\n[#Q_LEAD_DIFF] at the end of the line, above). Hack +.\" solution: temporarily lower the FOOTER trap position. +. if !\\n[pdfbx-running] \{\ +. if !\\n[#Q_DEPTH]=0 \{\ +. nr #SAVED_FOOTER_POS \\n[#VARIABLE_FOOTER_POS] +. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u+.25v +. \} +. \} +.\} +.END +\# +\# ==================================================================== +\# +\# +++PAGINATION+++ +\# +\# PAGINATE +\# -------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Turns page numbering off or on during document processing. +\# *Notes: +\# Default is on. +\# +.MAC PAGINATE END +. ie '\\$1'' \{\ +. nr #PAGINATE 1 +. if \\n[#SAVED_V_POS] \{\ +. nr #PAGE_NUM_V_POS \\n[#SAVED_V_POS] +. rr #SAVED_V_POS +. \} +. \} +. el \{\ +. nr #PAGINATE 0 +. nr #SAVED_V_POS \\n[#PAGE_NUM_V_POS] +. rr #PAGE_NUM_V_POS +. \} +. if \\n[#HF_OFF]=1 \{\ +. rr #PAGINATION_STATE +. rr #HF_OFF +. \} +.END +\# +\# SUSPEND PAGINATION (before ENDNOTES) +\# ------------------ +\# *Argument: +\# <none> +\# *Function: +\# Creates register #SUSPEND_PAGINATION +\# *Notes: +\# Useful only to suspend pagination before outputting endnotes. +\# +.MAC SUSPEND_PAGINATION END +. nr #SUSPEND_PAGINATION 1 +.END +\# +\# RESTORE PAGINATION (after ENDNOTES) +\# ------------------ +\# *Argument: +\# <none> +\# *Function: +\# Removes register #SUSPEND_PAGINATION. Creates register +\# #DEFER_PAGINATION +\# *Notes: +\# Useful only to restore pagination after outputting endnotes. +\# +.MAC RESTORE_PAGINATION END +. rr #SUSPEND_PAGINATION +. if \\n[#PAGE_NUM_V_POS]=1 .PAGINATE +. if \\n[#PAGE_NUM_V_POS]=2 .nr #DEFER_PAGINATION 1 +.END +\# +\# PAGE NUMBER FORMAT +\# ------------------ +\# *Arguments: +\# DIGIT | ROMAN | roman | ALPHA | alpha +\# *Function: +\# Assigns user entered format to #PAGENUMBER. +\# +.MAC PAGENUM_STYLE END +. nr #PAGENUM_STYLE_SET 1 +. if '\\$1'DIGIT' \{\ +. ds $PAGENUM_STYLE \\$1 +. af #PAGENUMBER 1 +. \} +. if '\\$1'ROMAN' \{\ +. ds $PAGENUM_STYLE \\$1 +. af #PAGENUMBER I +. \} +. if '\\$1'roman' \{\ +. ds $PAGENUM_STYLE \\$1 +. af #PAGENUMBER i +. \} +. if '\\$1'ALPHA' \{\ +. ds $PAGENUM_STYLE \\$1 +. af #PAGENUMBER A +. \} +. if '\\$1'alpha' \{\ +. ds $PAGENUM_STYLE \\$1 +. af #PAGENUMBER a +. \} +.END +\# +\# HYPHENS AROUND PAGE NUMBERS +\# --------------------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Creates or modifies register #PAGE_NUM_HYPHENS. +\# Used to dis/enable hyphens on either side of page numbers. +\# *Notes: +\# Default is on. +\# +.MAC PAGENUM_HYPHENS END +. nr #PAGE_NUM_HYPHENS_SET 1 +. ie '\\$1'' .nr #PAGE_NUM_HYPHENS 1 +. el .rr #PAGE_NUM_HYPHENS +.END +\# +\# PAGENUMBER POSITION +\# ------------------- +\# *Arguments: +\# TOP | BOTTOM LEFT | CENTER | RIGHT +\# *Function: +\# Creates or modifies various PAGE_NUM_H | V_POS registers. +\# Used to position page numbers. +\# *Notes: +\# Default is center/bottom. +\# +.MAC PAGENUM_POS END +. nr #PAGE_NUM_POS_SET 1 +. if '\\$1'TOP' .nr #PAGE_NUM_V_POS 1 +. if '\\$1'BOTTOM' .nr #PAGE_NUM_V_POS 2 +. if '\\$2'LEFT' .nr #PAGE_NUM_H_POS 1 +. if '\\$2'CENTER' .nr #PAGE_NUM_H_POS 2 +. if '\\$2'CENTRE' .nr #PAGE_NUM_H_POS 2 +. if '\\$2'RIGHT' .nr #PAGE_NUM_H_POS 3 +.END +\# +.MAC PN_WITH_HYPHENS END +. nr #HYPHEN_ADJ \\n[#CAP_HEIGHT]/12 +. ds $HYPHEN \v'-\En[#HYPHEN_ADJ]u'-\v'\En[#HYPHEN_ADJ]u' +. ds $PN_FOR_KN \\n[#PAGENUMBER] +.\" Check for initial or terminal 1's or 7's, and apply a little kerning +. substring $PN_FOR_KN 0 0 \" 1st digit +. if '\\*[$PN_FOR_KN]'1' .ds $PRE_HY_KN \*[BU3] +. if '\\*[$PN_FOR_KN]'7' .ds $PRE_HY_KN \*[BU3] +. ds $PN_FOR_KN \\n[#PAGENUMBER] +. substring $PN_FOR_KN -1 -1 \" last digit +. if '\\*[$PN_FOR_KN]'1' .ds $POST_HY_KN \*[BU3] +. if '\\*[$PN_FOR_KN]'7' .ds $POST_HY_KN \*[BU3] +. PRINT \ +\m[\\*[$PAGE_NUM_COLOR]]\ +\\*[$HYPHEN]\|\\*[$PRE_HY_KN]\\n[#PAGENUMBER]\\*[$POST_HY_KN]\|\\*[$HYPHEN] +. br +. rm $PRE_HY_KERN +. rm $POST_HY_KERN +.END +\# +\# PRINT PAGE NUMBER +\# ----------------- +\# *Arguments: +\# <none> +\# *Function: +\# Prints page number if PAGINATE=1. +\# +.MAC PRINT_PAGE_NUMBER END +. ev PAGENUMBER +. nf +. po \\n[#DOC_L_MARGIN]u +. ll \\n[#DOC_L_LENGTH]u +. ta \\n[.l]u +. fam \\*[$PAGE_NUM_FAM] +. ft \\*[$PAGE_NUM_FT] +. ps \\n[#DOC_PT_SIZE]u\\*[$PAGE_NUM_SIZE_CHANGE] +. if \\n[#PRINT_STYLE]=1 .TYPEWRITER +. if \\n[#PAGE_NUM_V_POS]=1 .vs 0 +. if o \{\ +. ie \\n[#PAGE_NUM_H_POS]=1 .LEFT +. el .RIGHT +. \} +. if e \{\ +. ie \\n[#PAGE_NUM_H_POS]=1 .RIGHT +. el .LEFT +. \} +. if \\n[#PAGE_NUM_H_POS]=2 .CENTER +. if \\n[#RECTO_VERSO]=0 \{\ +. if \\n[#PAGE_NUM_H_POS]=1 .LEFT +. if \\n[#PAGE_NUM_H_POS]=2 .CENTER +. if \\n[#PAGE_NUM_H_POS]=3 .RIGHT +. \} +. nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ] +. if \\n[#EN_FIRST_PAGE] \{\ +. if \\n[#EN_FIRST_PN] .PAGENUMBER \\n[#EN_FIRST_PN] +. rr #EN_FIRST_PAGE +. \} +. if \\n[#BIB_FIRST_PAGE] \{\ +. if \\n[#BIB_FIRST_PN] .PAGENUMBER \\n[#BIB_FIRST_PN] +. rr #BIB_FIRST_PAGE +. \} +. ie \\n[#DRAFT_WITH_PAGENUM] \{\ +. ie '\\*[$REVISION]'' \ +. PRINT "\\*[$DRAFT_STRING]\\*[$DRAFT] / \\n[#PAGENUMBER]" +. el \{\ +. ie '\\*[$DRAFT]'' \ +. PRINT "\\*[$REVISION_STRING] \\*[$REVISION] / \\n[#PAGENUMBER]" +. el \ +. PRINT \ +"\\*[$DRAFT_STRING]\\*[$DRAFT], \\*[$REVISION_STRING] \\*[$REVISION] / \ +\\n[#PAGENUMBER]" +. \} +. \} +. el \{\ +. ie \\n[#PAGE_NUM_HYPHENS] \{\ +. if '\\*[$PAGENUM_STYLE]'DIGIT' \{\ +. di NULL +1\\R'#CAP_HEIGHT \\n[.cht]' +. di +. PN_WITH_HYPHENS +. \} +. if '\\*[$PAGENUM_STYLE]'ROMAN' \{\ +. di NULL +I\\R'#CAP_HEIGHT \\n[.cht]' +. di +. PN_WITH_HYPHENS +. \} +. if '\\*[$PAGENUM_STYLE]'ALPHA' \{\ +. di NULL +E\\R'#CAP_HEIGHT \\n[.cht]' +. di +. PN_WITH_HYPHENS +. \} +. if '\\*[$PAGENUM_STYLE]'roman' \ +. PRINT \m[\\*[$PAGE_NUM_COLOR]]-\|\\n[#PAGENUMBER]\|- +. if '\\*[$PAGENUM_STYLE]'alpha' \ +. PRINT \m[\\*[$PAGE_NUM_COLOR]]-\|\\n[#PAGENUMBER]\|- +. \} +. el \{\ +. ie !d$PAGENUM_STRING .PRINT \m[\\*[$PAGE_NUM_COLOR]]\\n[#PAGENUMBER] +. el .PRINT \m[\\*[$PAGE_NUM_COLOR]]\\*[$PAGENUM_STRING] +. \} +. \} +. ev +. nr #DIVER_DEPTH 0 +.END +\# +\# ==================================================================== +\# +\# +++FOOTNOTES+++ +\# +\# Mom's footnote handling is baroque, to say the least. There are +\# redundancies in a number of the macros involved, as well as some +\# registers that probably don't get used anymore. The baggage is left +\# in in case some new footnote oddity/challenge gets thrown at her. +\# +\# The macros are heavily commented. +\# +\# FOOTNOTE AUTOLEAD +\# ----------------- +\# *Arguments: +\# <autolead value for footnotes> +\# *Function: +\# Creates or modifies register #FN_AUTOLEAD. +\# *Notes: +\# Default is #DOC_LEAD/2 for TYPEWRITE; 2 for TYPESET +\# +.MAC FOOTNOTE_AUTOLEAD END +. nr #FN_AUTOLEAD (p;\\$1) +.END +\# +\# FOOTNOTE MARKERS +\# ---------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Turns generation of footnote markers on or off. +\# *Notes: +\# Default is on. +\# +.MAC FOOTNOTE_MARKERS END +. ie '\\$1'' .nr #FN_MARKERS 1 +. el .nr #FN_MARKERS 0 +.END +\# +\# FOOTNOTE MARKER STYLE +\# --------------------- +\# *Arguments: +\# STAR | NUMBER | LINE +\# *Function: +\# Sets register #FN_MARKER_STYLE, used in FOOTNOTE to determine +\# the style of footnote markers. +\# *Notes: +\# 1=STAR; 2=NUMBER; 3=LINE. LINE means "use output line numbers". +\# Default is STAR. +\# +.MAC FOOTNOTE_MARKER_STYLE END +. if '\\$1'STAR' \{\ +. if \\n[#FN_MARKER_STYLE]=3 \{\ +. if !\\n[#NEWPAGE]=1 \{\ +. tm1 "[mom]: Your current FOOTNOTE_MARKER STYLE is LINE. +. tm1 " You cannot change footnote marker style without +. tm1 " first breaking to a new page with NEWPAGE. +. tm1 " Ignoring request FOOTNOTE_MARKER_STYLE STAR at line \\n[.c]. +. return +. \} +. \} +. if \\n[#RUN_ON]=1 \{\ +. tm1 "[mom]: FOOTNOTE_MARKER_STYLE STAR at line \\n[.c] is incompatible +. tm1 " with RUN_ON footnotes. Ignoring request. +. return +. \} +. nr #FN_MARKER_STYLE 1 +. if \\n[#NEWPAGE]=1 .rr #NEWPAGE +. FOOTNOTE_MARKERS +. \} +. if '\\$1'NUMBER' \{\ +. if \\n[#FN_MARKER_STYLE]=3 \{\ +. if !\\n[#NEWPAGE]=1 \{\ +. tm1 "[mom]: Your current FOOTNOTE_MARKER STYLE is NUMBER. +. tm1 " You cannot change footnote marker style without +. tm1 " first breaking to a new page with NEWPAGE. +. tm1 " Ignoring request FOOTNOTE_MARKER_STYLE NUMBER at line \\n[.c]. +. return +. \} +. \} +. if \\n[#RUN_ON]=1 \{\ +. tm1 "[mom]: FOOTNOTE_MARKER_STYLE NUMBER at line \\n[.c] is incompatible +. tm1 " with RUN_ON footnotes. Ignoring request. +. return +. \} +. nr #FN_MARKER_STYLE 2 +. shift +. if '\\$1'NO_SUPERSCRIPT' .nr #NO_SUPERSCRIPT 1 +. if \\n[#NEWPAGE]=1 .rr #NEWPAGE +. FOOTNOTE_MARKERS +. \} +. if '\\$1'LINE' \{\ +. nr #FN_MARKER_STYLE 3 +. FOOTNOTE_MARKERS OFF +. if !\\n[#FN_LN_SEP] \ +. if !\\n[#FN_LN_BRACKETS] .FOOTNOTE_LINENUMBER_BRACKETS SQUARE +. \} +.END +\# +\# FOOTNOTE NUMBER PLACEHOLDERS +\# ---------------------------- +\# *Argument: +\# <number of placeholders> +\# *Function: +\# Sets register #FN_NUMBER_PLACEHOLDERS, used to establish whether to +\# right pad a footnote number (in the footnote itself, not body copy). +\# *Notes: +\# No default is set for this; user must determine if, and where, it's +\# required +\# +.MAC FOOTNOTE_NUMBER_PLACEHOLDERS END +. nr #FN_NUMBER_PLACEHOLDERS \\$1 +.END +\# +\# FOOTNOTE LINENUMBER MARK +\# ------------------------ +\# *Function: +\# This string, when called inline, stores the current output line +\# number in register #FN_MARK for use with FOOTNOTE. +\# +.ds FN_MARK \R'#FN_MARK \En[ln]' +\# +\# FOOTNOTE LINENUMBER SEPARATOR +\# ----------------------------- +\# *Argument: +\# <user-defined separator> +\# *Function: +\# Stores user-defined separator (for use then +\# FOOTNOTE_MARKER_STYLE is LINE) in string $FN_LN_SEP. The +\# separator is intended to be used when the user wishes a +\# separator, rather than the choice of brackets offered by +\# FOOTNOTE_LINENUMBER_BRACKETS. +\# +.MAC FOOTNOTE_LINENUMBER_SEPARATOR END +. rr #FN_LN_BRACKETS +. nr #FN_LN_SEP 1 +. ds $FN_LN_SEP "\\$1 +.END +\# +\# FOOTNOTE LINENUMBER BRACKETS +\# ---------------------------- +\# *Argument: +\# PARENS | SQUARE | BRACES or ( | [ | { +\# *Function: +\# Sets register #FN_LN_BRACKETS to 1, and creates strings +\# $FN_OPEN_BRACKET and $FN_CLOSE_BRACKET according to the given +\# argument. +\# +.MAC FOOTNOTE_LINENUMBER_BRACKETS END +. rr #FN_LN_SEP +. nr #FN_LN_BRACKETS 1 +. if '\\$1'PARENS' \{\ +. ds $FN_OPEN_BRACKET ( +. ds $FN_CLOSE_BRACKET ) +. \} +. if '\\$1'(' \{\ +. ds $FN_OPEN_BRACKET ( +. ds $FN_CLOSE_BRACKET ) +. \} +. if '\\$1'SQUARE' \{\ +. ds $FN_OPEN_BRACKET [ +. ds $FN_CLOSE_BRACKET ] +. \} +. if '\\$1'[' \{\ +. ds $FN_OPEN_BRACKET [ +. ds $FN_CLOSE_BRACKET ] +. \} +. if '\\$1'BRACES' \{\ +. ds $FN_OPEN_BRACKET { +. ds $FN_CLOSE_BRACKET } +. \} +. if '\\$1'{' \{\ +. ds $FN_OPEN_BRACKET { +. ds $FN_CLOSE_BRACKET } +. \} +.END +\# +\# RESET FOOTNOTE NUMBER +\# --------------------- +\# *Arguments: +\# <none> | PAGE +\# *Function: +\# Resets register #FN_NUMBER to 1. If argument is PAGE, creates +\# toggle #RESET_FN_NUMBER which is checked in HEADER. If 1, +\# numbered footnotes on every page start at 1. +\# +.MAC RESET_FOOTNOTE_NUMBER END +. ie '\\$1'' .nr #FN_NUMBER 0 1 +. el .nr #RESET_FN_NUMBER 1 +.END +\# +\# FOOTNOTE RULE LENGTH +\# -------------------- +\# *Arguments: +\# <length of rule used to separate footnotes from running text> +\# *Function: +\# Creates or modifies registers #FN_RULE_LENGTH. +\# *Notes: +\# Requires unit of measure (iPpcm). +\# Default is 4P for both PRINTSTYLEs. +\# +.MAC FOOTNOTE_RULE_LENGTH END +. nr #FN_RULE_LENGTH (\\$1) +.END +\# +\# FOOTNOTE_RULE_ADJ +\# ----------------- +\# *Arguments: +\# <number of points to raise footnote rule from it's baseline position> +\# *Function: +\# Creates or modifies register #FN_RULE_ADJ. +\# *Notes: +\# Default is 3p for both TYPESTYLES. +\# +\# Requires unit of measure. +\# +.MAC FOOTNOTE_RULE_ADJ END +. nr #FN_RULE_ADJ (\\$1) +.END +\# +\# FOOTNOTE RULE +\# ------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Turns printing of footnote separator rule on or off. If invoked as +\# PRINT_FOOTNOTE_RULE, prints footnote separator rule. +\# *Notes: +\# Default is on. +\# +\# Invoked in FOOTNOTE (as PRINT_FOOTNOTE_RULE) as 1st line of a footnote +\# if the footnote number (#FN_COUNT) is 1. +\# +.MAC FOOTNOTE_RULE END +. ie '\\$0'PRINT_FOOTNOTE_RULE' \{\ +. if \\n[#FN_RULE]=0 .RLD 1v +. RLD 1v +. LEFT +\v'-\\n[#FN_RULE_ADJ]u-\\n[#FN_RULE_WEIGHT_ADJ]u'\ +\D't \\n[#FN_RULE_WEIGHT]'\ +\h'-\\n[#FN_RULE_WEIGHT]u'\ +\D'l \\n[#FN_RULE_LENGTH]u 0'\ +\v'+\\n[#FN_RULE_ADJ]u+\\n[#FN_RULE_WEIGHT_ADJ]u' +\!. ps \\n[#DOC_PT_SIZE]u\\*$[FN_SIZE_CHANGE] +. QUAD \\*[$FN_QUAD] +. \} +. el \{\ +. ie '\\$1'' .nr #FN_RULE 1 +. el .nr #FN_RULE 0 +. \} +.END +\# +\# FOOTNOTE SPACING +\# ---------------- +\# *Arguments: +\# <per item post footnote spacing> | <anything> +\# *Function: +\# Enables printing of post footnote spacing. +\# *Notes: +\# Default is no space. +\# +.MAC FOOTNOTE_SPACING END +. ie \B'\\$1' .ds $FN_SPACE \\$1 +. el .rm $FN_SPACE +.END +\# +\# FOOTNOTE FIRST LINE INDENT +\# -------------------------- +\# *Arguments: +\# <indent> +\# *Function: +\# Indents first line of footnotes. +\# *Notes: +\# Default is no indent. +\# +.MAC FOOTNOTE_INDENT END +. nr #FN_INDENT \\$1 +.END +\# +\# RUN ON FOOTNOTES +\# ---------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Toggles run-on footnotes on or off. +\# +.MAC FOOTNOTES_RUN_ON END +. ie '\\$1'' \{\ +. if \\n[#FN_COUNT]>0 \{\ +. tm1 "[mom]: Switching to run-on footnotes at line \\n[.c] will cause +. tm1 " you to loose footnotes already formatted for this page. +. tm1 " Ignoring request FOOTNOTES_RUN_ON. +. rr #RUN_ON +. return +. \} +. nr #RUN_ON 1 +. if \\n[#FN_MARKER_STYLE]=1 .RUNON_WARNING +. if \\n[#FN_MARKER_STYLE]=2 .RUNON_WARNING +. \} +. el \{\ +. if \\n[#FN_COUNT]>0 \{\ +. if \\n[#RUN_ON]=1 \{\ +. tm1 "[mom]: Switching off run-on footnotes at line \\n[.c] will cause +. tm1 " you to loose footnotes already formatted for this page. +. tm1 " Ignoring request FOOTNOTES_RUN_ON \\$1. +. return +. \} +. \} +. rr #RUN_ON +. \} +.END +\# +.MAC RUNON_WARNING END +. if \\n[#FN_MARKER_STYLE]=1 \{\ +. tm1 "[mom]: The footnote marker style active at line \\n[.c] is STAR, +. tm1 " which is incompatible with run-on footnotes. Please change +. tm1 " the footnote marker style to LINE. Continuing to process, +. tm1 " but ignoring request FOOTNOTES_RUN_ON. +. rr #RUN_ON +. \} +. if \\n[#FN_MARKER_STYLE]=2 \{\ +. tm1 "[mom]: The footnote marker style active at line \\n[.c] is NUMBER, +. tm1 " which is incompatible with run-on footnotes. Please change +. tm1 " the footnote marker style to LINE. Continuing to process, +. tm1 " but ignoring request FOOTNOTES_RUN_ON. +. rr #RUN_ON +. \} +.END +\# +\# FOOTNOTE +\# -------- +\# *Arguments: +\# <none> | INDENT L|LEFT|R|RIGHT|B|BOTH <indent value> | <anything> +\# *Function: +\# Begins collecting and diverting footnote text if no argument +\# given. Otherwise, ends diversion FOOTNOTES, measures footnote +\# depth, and sets footnote trap. +\# *Notes: +\# The input line preceding a footnote call MUST terminate with \c +\# or the footnote marker will be spaced away from the word it +\# should be joined to. +\# +\# If FOOTNOTE is invoked with INDENT, the footnote will +\# be indented. An indent style and an indent value must be given. +\# Subsequent footnotes will NOT be indented; INDENT must be given +\# for each footnote the user wants indented. +\# +.MAC FOOTNOTE END +. ie '\\$1'' \{\ +. if \\n[#UNDERLINE_ON] \{\ +. UNDERLINE OFF +. nr #UNDERLINE_WAS_ON_FN 1 +. \} +. if \\n[#FN_MARKER_STYLE]=3 \{\ +. if !\\n[#LINENUMBERS] \{\ +. tm1 "[mom]: Line numbering must be enabled with NUMBER_LINES when +. tm1 " FOOTNOTE_MARKER_STYLE is LINE. +. ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +. \} +. if \\n[#FN_MARK]=0 .nr #FN_MARK \\n[ln] +. nr #FN_MARK_2 \\n[ln] +. if '\\n[.z]'P_QUOTE' \{\ +. nr #FN_MARK -1 +. nr #FN_MARK_2 -1 +. \} +. if \\n[#IN_DIVER]=1 \{\ +. if '\\n[.z]'P_QUOTE' \{\ +. if !\\n[#QUOTE_LN]=1 \{\ +. if !\\n[#SILENT_QUOTE_LN]=1 \{\ +. tm1 "[mom]: You have requested a line-numbered footnote inside a +. tm1 " QUOTE at line \\n[.c], but line-numbering has not been enabled +. tm1 " for QUOTES. Printing footnote with label "0". +. rr #FN_MARK +. rr #FN_MARK_2 +. \} +. \} +. \} +. if '\\n[.z]'B_QUOTE' \{\ +. if !\\n[#BQUOTE_LN]=1 \{\ +. if !\\n[#SILENT_BQUOTE_LN]=1 \{\ +. tm1 "[mom]: You have requested a line-numbered footnote inside a +. tm1 " BLOCKQUOTE at line \\n[.c], but line-numbering has not been enabled +. tm1 " for BLOCKQUOTES. Printing footnote with label "0". +. rr #FN_MARK +. rr #FN_MARK_2 +. \} +. \} +. \} +. \} +. \} +.\" Begin processing footnotes that occur inside QUOTE, BLOCKQUOTE +.\" or EPIGRAPH. +. if \\n[#IN_DIVER]=1 \{\ +. nr #PAGE_POS \\n[nl]+\\n[.d]+\\n[#DOC_LEAD] +. nr #FOOTER_POS \\n[#PAGE_LENGTH]+(\\n[#VARIABLE_FOOTER_POS]-1) +. nr #SPACE_TO_FOOTER \\n[#FOOTER_POS]-\\n[#PAGE_POS] +.\" Are we on a "defer" line? If so, defer the text of the footnote. +. ie \\n[#SPACE_TO_FOOTER]<=\\n[#DOC_LEAD] \ +. nr #DIVER_FN 2 \" treat like a normal deferred footnote +. el \ +. nr #DIVER_FN 2 \" treat like a normal footnote +. if \\n[#PAGE_POS]>\\n[#FOOTER_POS] \ +. nr #DIVER_FN 1 \" move this footnote +.\" Test for situation where, because a final line of QUOTE, BLOCKQUOTE +.\" or EPIGRAPH isn't yet adjusted at this point, the last word on the +.\" line may *seem* to belong to the final line of the page, but will, +.\" in fact, become the first word of the subsequent page. In such +.\" circumstances, we want the footnote to be treated as a "moved" +.\" diversion footnote. +. if \\n[.k]>\\n[.l] .nr #DIVER_FN 1 +. if r #DIVER_FN \{\ +. if !\\n[#DIVER_FN]=2 .\\n+[#DONE_ONCE] +.\" A footnote inside a diversion will become the 1st footnote on the +.\" following page/column. +. if \\n[#DIVER_FN]=1 .DIVER_FN_1_PRE +.\" A footnote inside a diversion that should be treated like a +.\" normal footnote (including defers.) +. if \\n[#DIVER_FN]=2 .DIVER_FN_2_PRE +. \} +. nr #SAVED_FN_COUNT \\n[#FN_COUNT]+1 +. nr #SAVED_FN_COUNT_FOR_COLS \\n[#FN_COUNT_FOR_COLS]+1 +. \} +.\" End processing footnotes that occur inside QUOTE, BLOCKQUOTE or +.\" EPIGRAPH. +.\" +.\" Test for situation where, because a final line of running text +.\" isn't yet adjusted at this point, the last word on the line may +.\" *seem* to belong to the final line of the page, but will, in +.\" fact, become the first word of the subsequent page. In such +.\" circumstances, we want the footnote marker in running text to +.\" be the correct one for the 1st footnote on the page. +. if \\n[.k]>\\n[.l] \{\ +. if (\\n[nl]+\\n[#DOC_LEAD])>(\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS]) \{\ +. ie \\n[#COLUMNS]=1 \{\ +. if \\n[#COL_NUM]=\\n[#NUM_COLS] \{\ +. if \\n[#FN_MARKER_STYLE]=1 .nr #FN_COUNT_FOR_COLS 0 1 +. if \\n[#FN_MARKER_STYLE]=2 \{\ +. if \\n[#RESET_FN_NUMBER] \{\ +. nr #FN_NUMBER 0 1 +. nr #NOT_YET_ADJUSTED 1 +. \} +. \} +. \} +. \} +. el \{\ +. if \\n[#FN_MARKER_STYLE]=1 .nr #FN_COUNT 0 1 +. if \\n[#FN_MARKER_STYLE]=2 \{\ +. if \\n[#RESET_FN_NUMBER] \{\ +. nr #FN_NUMBER 0 1 +. nr #NOT_YET_ADJUSTED 1 +. \} +. \} +. \} +. \} +. \} +. if \\n[#FN_MARKERS] \{\ +.\" Housekeeping +. if \\n[#CONDENSE] \*[CONDX]\c +. if \\n[#EXTEND] \*[EXTX]\c +.\" Add footnote markers to running text... +. if !\\n[#NO_FN_MARKER] \{\ +.\" ...but not if TERMINATE has not been called +. if !r#TERMINATE \{\ +.\" Marker style star/dagger/double-dagger +. if \\n[#FN_MARKER_STYLE]=1 \{\ +.\" Columnar docs either move col to col, or last col to next page. +.\" They require their own special FN_COUNT because regular FN_COUNT +.\" is used to figure out things like whether or not to put a rule +.\" above footnotes (in addition to keeping track of the footnote +.\" count in non-columnar docs). +. ie \\n[#COLUMNS]=1 \{\ +. if \\n[#FN_COUNT_FOR_COLS]=0 .PRINT \*[BU2]*\c +. if \\n[#FN_COUNT_FOR_COLS]=1 .PRINT \*[BU1]\[dg]\c +. if \\n[#FN_COUNT_FOR_COLS]=2 .PRINT \[dd]\c +. if \\n[#FN_COUNT_FOR_COLS]=3 .PRINT \*[BU2]**\c +. if \\n[#FN_COUNT_FOR_COLS]=4 .PRINT \*[BU1]\[dg]\[dg]\c +. if \\n[#FN_COUNT_FOR_COLS]=5 .PRINT \[dd]\[dd]\c +. if \\n[#FN_COUNT_FOR_COLS]=6 .PRINT \*[BU2]***\c +. if \\n[#FN_COUNT_FOR_COLS]=7 .PRINT \*[BU1]\[dg]\[dg]\[dg]\c +. if \\n[#FN_COUNT_FOR_COLS]=8 .PRINT \[dd]\[dd]\[dd]\c +. if \\n[#FN_COUNT_FOR_COLS]=9 .PRINT \*[BU2]****\c +. \} +. el \{\ +. if \\n[#FN_COUNT]=0 .PRINT \*[BU2]*\c +. if \\n[#FN_COUNT]=1 .PRINT \*[BU1]\[dg]\c +. if \\n[#FN_COUNT]=2 .PRINT \[dd]\c +. if \\n[#FN_COUNT]=3 .PRINT \*[BU2]**\c +. if \\n[#FN_COUNT]=4 .PRINT \*[BU1]\[dg]\[dg]\c +. if \\n[#FN_COUNT]=5 .PRINT \[dd]\[dd]\c +. if \\n[#FN_COUNT]=6 .PRINT \*[BU2]***\c +. if \\n[#FN_COUNT]=7 .PRINT \*[BU1]\[dg]\[dg]\[dg]\c +. if \\n[#FN_COUNT]=8 .PRINT \[dd]\[dd]\[dd]\c +. if \\n[#FN_COUNT]=9 .PRINT \*[BU2]****\c +. \} +. \} +.\" Marker style superscript numbers +. if \\n[#FN_MARKER_STYLE]=2 \{\ +. if \\n[#PRINT_STYLE]=1 \ +. PRINT \ +"\s-2\v'-\\n[#DOC_LEAD]u/5u'\\n+[#FN_NUMBER]\v'+\\n[#DOC_LEAD]u/5u'\s+2\c" +. if \\n[#PRINT_STYLE]=2 \ +. PRINT \ +"\*[SUP]\\n+[#FN_NUMBER]\*[SUPX]\c" +. \} +. \} +. \} +. \} +.\" More housekeeping +.\" +.\" #SPACE_REMAINING is the space left between where we are +.\" on the page and the bottom margin. It's used to determine whether +.\" or not the footnote will overflow, and how many lines of +.\" footnotes will fit on the page if some have to overflow. +. ie \\n[#DIVER_FN]=2 \ +. nr #SPACE_REMAINING (\\n[#PAGE_LENGTH]-\\n[#B_MARGIN])-(\\n[#PAGE_POS]) +. el \ +. nr #SPACE_REMAINING (\\n[#PAGE_LENGTH]-\\n[#B_MARGIN])-\\n[nl] +. if \\n[#FROM_DIVERT_FN]=1 \{\ +. nr #SPACE_REMAINING \\n[#PAGE_LENGTH]-\\n[#B_MARGIN] +. rr #FROM_DIVERT_FN +. \} +. nr #PP_STYLE_PREV \\n[#PP_STYLE] +. nr #PP_STYLE 2 +. if \\n[#INDENT_FIRST_PARAS] .nr #INDENT_FIRSTS 1 +. INDENT_FIRST_PARAS +.\" Prepare FOOTNOTE to receive footnote text. +. if \\n[.hy] .nr #RESTORE_HY_PARAMS \\n[.hy] +. ev FOOTNOTES +. ll \\n[#DOC_L_LENGTH]u +. ta \\n[.l]u +. if \\n[#COLUMNS]=1 \{\ +. ll \\n[#COL_L_LENGTH]u +. ta \\n[.l]u +. \} +. if \\n[#FN_R_INDENT] \{\ +. ll -\\n[#FN_R_INDENT]u +. ta \\n[.l]u +. \} +. if \\n[#FN_BR_INDENT] \{\ +. ll -\\n[#FN_BR_INDENT]u +. ta \\n[.l]u +. \} +. FAMILY \\*[$FN_FAM] +. FT \\*[$FN_FT] +. ps \\n[#DOC_PT_SIZE]u\\*[$FN_SIZE_CHANGE] +. vs \\n[.ps]u+\\n[#FN_AUTOLEAD]u +. QUAD \\*[$FN_QUAD] +. if \\n[#PRINT_STYLE]=1 \{\ +. TYPEWRITER +. ie \\n[#SINGLE_SPACE] .vs \\n[#ORIGINAL_DOC_LEAD]u +. el .vs \\n[#ORIGINAL_DOC_LEAD]u/2u +. QUAD LEFT +. HY OFF +. \} +. nr #FN_LEAD \\n[#LEAD] +.\" Begin diversion FOOTNOTES or FN_IN_DIVER +. ie r#COUNTERS_RESET \{\ +. ie \\n[#DONE_ONCE]=1 \{\ +. ie \\n[#RUN_ON] \{\ +. di RUNON_FN_IN_DIVER +. nr #RUNON_FN_IN_DIVER 1 +. \} +. el .di FN_IN_DIVER +. \} +. el \{\ +. ie \\n[#RUN_ON] \{\ +. da RUNON_FN_IN_DIVER +. nr #RUNON_FN_IN_DIVER 1 +. \} +. el .da FN_IN_DIVER +. \} +. \\n+[#DONE_ONCE] +. \} +. el \{\ +. ie \\n[#RUN_ON] \{\ +. nh +. da RUNON_FOOTNOTES +. nr #RUNON_FOOTNOTES 1 +. \} +. el .da FOOTNOTES +. \} +. if \\n[#FOOTNOTE_COLOR]=1 \{\ +. TRAP OFF +. nf +\m[\\*[$FOOTNOTE_COLOR]] +. EOL +. fi +. TRAP +. \} +. if \\n[#EPIGRAPH] .nr #FN_FOR_EPI 1 +.\" When a deferred footnote is also the 1st footnote on the page, +.\" and when the page it's output on also has footnotes, some +.\" whitespace is needed between the deferred footnote and the +.\" first footnote belonging to the output page so that there's +.\" no confusion when two stars (or two number 1s) appear in +.\" footnotes... +. if \\n[#FN_DEFER_SPACE] \{\ +.\" ...but only add the extra space if TERMINATE has not been called +. if !r#TERMINATE \{\ +.\" ...and not if defer space has already been added +. if !\\n[#DEFER_SPACE_ADDED] \{\ +.\" ...and not if the footnote count the last time we checked for +.\" a defer situation inside a diversion is greater than 1. +. if !\\n[#SAVED_DIVER_FN_COUNT]>1 \{\ +. if \\n[#FN_MARKER_STYLE]=1 .ALD 1v +. if \\n[#RESET_FN_NUMBER] .ALD 1v +. nr #DEFER_SPACE_ADDED 1 +. \} +. \} +. \} +. rr #FN_DEFER_SPACE +. rr #SAVED_DIVER_FN_COUNT +. \} +. if \\n[#DIVERTED]=3 \{\ +. if \\n[#FN_COUNT]>0 \{\ +\!. RLD 1v +. \} +. \} +.\" Add footnote rule (or, if no rule, some whitespace). +.\" N.B.- this line increments #FN_COUNT each and every time FOOTNOTE +.\" is run. +. if \\n+[#FN_COUNT]=1 \{\ +.\" If a footnote is called in a diversion, and the footnote has to +.\" be moved, don't put in the rule now (it's taken care of when +.\" FN_IN_DIVER is output into FOOTNOTE in PROCESS_FN_IN_DIVER). +. if !\\n[#DONT_RULE_ME]=1 \{\ +. if !\\n[#FN_DEPTH] \{\ +. if \\n[#PRINT_STYLE]=1 \ +. if !\\n[#RUN_ON] .sp \\n[#DOC_LEAD]u +. ie \\n[#FN_RULE]=1 \{\ +. if !\\n[#RUN_ON] \{\ +. if \\n[#SINGLE_SPACE] .sp \\n[#DOC_LEAD]u +. PRINT_FOOTNOTE_RULE +. if !'\\*[$FN_SPACE]'' .sp -\\*[$FN_SPACE] +. \} +. \} +. el .sp +. nr #RULED 1 +. \} +. \} +. \} +. rr #DONT_RULE_ME +. ds $RESTORE_SS_VAR \\*[$SS_VAR] +. SS 0 +.\" Add footnote markers to footnote text... +. ie \\n[#FN_MARKERS] \{\ +. if !'\\*[$FN_SPACE]'' \ +. if \\n[#FN_COUNT]>0 .ALD \\*[$FN_SPACE] +. if !\\n[#NO_FN_MARKER] \{\ +.\" ...but not if TERMINATE has been called. +. if !r#TERMINATE \{\ +. if \\n[#REF]=1 \{\ +. nr #REF_FN_INDENT (u;\\*[$REF_FN_INDENT]) +. ti \\n[#REF_FN_INDENT]u +. \} +. if \\n[#FN_MARKER_STYLE]=1 \{\ +. ie \\n[#COLUMNS]=1 \{\ +. \\n+[#FN_COUNT_FOR_COLS] +. if \\n[#FN_COUNT_FOR_COLS]=1 .PRINT \h'0+\\n[#FN_INDENT]u'*\c +. if \\n[#FN_COUNT_FOR_COLS]=2 .PRINT \h'0+\\n[#FN_INDENT]u'\[dg]\c +. if \\n[#FN_COUNT_FOR_COLS]=3 .PRINT \h'0+\\n[#FN_INDENT]u'\[dd]\c +. if \\n[#FN_COUNT_FOR_COLS]=4 .PRINT \h'0+\\n[#FN_INDENT]u'**\c +. if \\n[#FN_COUNT_FOR_COLS]=5 .PRINT \h'0+\\n[#FN_INDENT]u'\[dg]\[dg]\c +. if \\n[#FN_COUNT_FOR_COLS]=6 .PRINT \h'0+\\n[#FN_INDENT]u'\[dd]\[dd]\c +. if \\n[#FN_COUNT_FOR_COLS]=7 .PRINT \h'0+\\n[#FN_INDENT]u'***\c +. if \\n[#FN_COUNT_FOR_COLS]=8 .PRINT \h'0+\\n[#FN_INDENT]u'\[dg]\[dg]\[dg]\c +. if \\n[#FN_COUNT_FOR_COLS]=9 .PRINT \h'0+\\n[#FN_INDENT]u'\[dd]\[dd]\[dd]\c +. if \\n[#FN_COUNT_FOR_COLS]=10 .PRINT \h'0+\\n[#FN_INDENT]u'****\c +. \} +. el \{\ +. if \\n[#FN_COUNT]=1 .PRINT \h'0+\\n[#FN_INDENT]u'*\c +. if \\n[#FN_COUNT]=2 .PRINT \h'0+\\n[#FN_INDENT]u'\[dg]\c +. if \\n[#FN_COUNT]=3 .PRINT \h'0+\\n[#FN_INDENT]u'\[dd]\c +. if \\n[#FN_COUNT]=4 .PRINT \h'0+\\n[#FN_INDENT]u'**\c +. if \\n[#FN_COUNT]=5 .PRINT \h'0+\\n[#FN_INDENT]u'\[dg]\[dg]\c +. if \\n[#FN_COUNT]=6 .PRINT \h'0+\\n[#FN_INDENT]u'\[dd]\[dd]\c +. if \\n[#FN_COUNT]=7 .PRINT \h'0+\\n[#FN_INDENT]u'***\c +. if \\n[#FN_COUNT]=8 .PRINT \h'0+\\n[#FN_INDENT]u'\[dg]\[dg]\[dg]\c +. if \\n[#FN_COUNT]=9 .PRINT \h'0+\\n[#FN_INDENT]u'\[dd]\[dd]\[dd]\c +. if \\n[#FN_COUNT]=10 .PRINT \h'0+\\n[#FN_INDENT]u'****\c +. \} +. \} +. if \\n[#FN_MARKER_STYLE]=2 \{\ +. ds $FN_NUMBER \\n[#FN_NUMBER] +. length #FN_NUMBER_LENGTH \\*[$FN_NUMBER] +. if \\n[#COLUMNS]=1 \ +. \\n+[#FN_COUNT_FOR_COLS] +. if \\n[#NOT_YET_ADJUSTED]=1 \{\ +. nr #FN_NUMBER 1 1 +. rr #NOT_YET_ADJUSTED +. \} +. if \\n[#PRINT_STYLE]=1 \{\ +. ie \\n[#NO_SUPERSCRIPT] \{\ +. ie \\n[#FN_NUMBER_LENGTH]<\\n[#FN_NUMBER_PLACEHOLDERS] \ +. PRINT "\h'0+\\n[#FN_INDENT]u'\0(\\n[#FN_NUMBER])\|\c" +. el \ +. PRINT "\h'0+\\n[#FN_INDENT]u'(\\n[#FN_NUMBER])\|\c" +. \} +. el \{\ +. ie \\n[#FN_NUMBER_LENGTH]<\\n[#FN_NUMBER_PLACEHOLDERS] \ +. PRINT \ +"\h'0+\\n[#FN_INDENT]u'\s-2\v'-\\n[.v]u/5u'\0\\n[#FN_NUMBER]\|\v'+\\n[.v]u/5u'\s+2\|\c" +. el \ +. PRINT \ +"\h'0+\\n[#FN_INDENT]u'\s-2\v'-\\n[.v]u/5u'\\n[#FN_NUMBER]\|\v'+\\n[.v]u/5u'\s+2\|\c" +. \} +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. ie \\n[#FN_NUMBER_LENGTH]<\\n[#FN_NUMBER_PLACEHOLDERS] \ +. PRINT "\h'0+\\n[#FN_INDENT]u'\*[SUP]\0\\n[#FN_NUMBER]\*[SUPX]\*[FU 3]\c" +. el \ +. PRINT "\h'0+\\n[#FN_INDENT]u'\*[SUP]\\n[#FN_NUMBER]\*[SUPX]\*[FU 3]\c" +. \} +. \} +. \} +. \} +. \} +. el \{\ +.\" Line-numbered footnotes handling +. if \\n[#FN_MARKER_STYLE]=3 \{\ +. if \\n[#FN_SPACE]>0 \{\ +. if !\\n[#RUN_ON]=1 \ +. if \\n[#FN_COUNT]>0 .ALD \\n[#FN_SPACE]u +. \} +. if \\n[#REF]=1 \{\ +. if !\\n[#RUN_ON]=1 \{\ +\!. ti +\\n[#REF_FN_INDENT]uu +. \} +. \} +. ie \\n[#FN_LN_BRACKETS]=1 \{\ +. ds $FN_LINENUMBER \h'0+\\n[#FN_INDENT]u'\v'-.085m'\\*[$FN_OPEN_BRACKET]\v'.085m' +. ie \\n[#FN_MARK_2]=\\n[#FN_MARK] \ +. as $FN_LINENUMBER \ +\\n[#FN_MARK]\v'-.085m'\\*[$FN_CLOSE_BRACKET]\v'.085m'\h'.25m' +. el \ +. as $FN_LINENUMBER \ +\\n[#FN_MARK]\v'-.1m'-\v'.1m'\\n[#FN_MARK_2]\v'-.085m'\ +\\*[$FN_CLOSE_BRACKET]\v'.085m'\h'.25m' +. \} +. el \{\ +. ie \\n[#FN_MARK_2]=\\n[#FN_MARK] \ +. ds $FN_LINENUMBER \\n[#FN_MARK]\\*[$FN_LN_SEP] +. el \ +. ds $FN_LINENUMBER \ +\h'0+\\n[#FN_INDENT]u'\\n[#FN_MARK]\v'-.1m'-\v'.1m'\\n[#FN_MARK_2]\\*[$FN_LN_SEP] +. \} +. \} +. if !\\n[#NO_FN_MARKER] \ +. PRINT \\*[$FN_LINENUMBER]\c +. rm $FN_LINENUMBER +. nr #FN_MARK 0 +. \} +. \} +. el \{\ +.\" If INDENT arg is passed to FOOTNOTE, calculate the indent... +. ie '\\$1'INDENT' \{\ +. ev FOOTNOTES +. if '\\$2'L' .in (\\$3) +. if '\\$2'LEFT' .in (\\$3) +. if '\\$2'R' .nr #FN_R_INDENT (\\$3) +. if '\\$2'RIGHT' .nr #FN_R_INDENT (\\$3) +. if '\\$2'B' \{\ +. nr #FN_BL_INDENT (\\$3) +. ie '\\$4'' .nr #FN_BR_INDENT \\n[#FN_BL_INDENT] +. el .nr #FN_BR_INDENT (\\$4) +. in \\n[#FN_BL_INDENT]u +. \} +. if '\\$2'BOTH' \{\ +. nr #FN_BL_INDENT (\\$3) +. ie '\\$4'' .nr #FN_BR_INDENT \\n[#FN_BL_INDENT] +. el .nr #FN_BR_INDENT (\\$4) +. in \\n[#FN_BL_INDENT]u +. \} +. ev +.\" ...then re-run FOOTNOTE without an argument. +. FOOTNOTE +. \} +. el \{\ +. br +.\" Add "defer space" if the previously diverted footnote was the +.\" 1st footnote proper to its page (i.e. it looks like a deferred +.\" footnote but it's really an overflow). +. if \\n[#DIVERTED] \{\ +. if \\n[#PREV_FN_DEFERRED]=1 \{\ +. if \\n[#FN_MARKER_STYLE]=1 .ALD \\n[#FN_LEAD]u +. if \\n[#RESET_FN_NUMBER] .ALD \\n[#FN_LEAD]u +. nr #PREV_FN_DEFERRED 2 +. \} +. \} +. if \\n[#REF]=1 \{\ +\!. in +. \} +.\" Terminate FOOTNOTES or FN_IN_DIVER diversion +. di +. HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p +. if \\n[#RESTORE_HY_PARAMS] .hy \\n[#RESTORE_HY_PARAMS] +.\" More housekeeping +.\" Turn off indent possibly set by FOOTNOTE INDENT +. in 0 +. ev +. if \\n[#UNDERLINE_WAS_ON_FN] \{\ +. UNDERLINE +. rr #UNDERLINE_WAS_ON_FN +. \} +.\" Restore sentence spacing +. if \\n[#PRINT_STYLE]=2 \{\ +. if d $RESTORE_SS_VAR .SS \\*[$RESTORE_SS_VAR] +. rm $RESTORE_SS_VAR +. \} +. rr #FN_R_INDENT +. rr #FN_BR_INDENT +. nr #PP_STYLE \\n[#PP_STYLE_PREV] +. if !\\n[#INDENT_FIRSTS] .INDENT_FIRST_PARAS OFF +. rr #INDENT_FIRSTS +.\" Calculate footnote depth, but not if #COUNTERS_RESET (created in +.\" DIVER_FN_1_PRE) to instruct FOOTNOTES to skip this step for now +.\" (it's taken care of when FN_IN_DIVER is output into FOOTNOTES in +.\" PROCESS_FN_IN_DIVER). +. ie r#COUNTERS_RESET .rr #COUNTERS_RESET +. el \{\ +. nr #GET_DEPTH 1 +.\" If the footnote is the 1st on the page and it falls too close +.\" to the bottom margin, defer the footnote text to the next page... +. if (\\n[#SPACE_REMAINING]-1)<=(\\n[.v]) \{\ +.\" ...but not if PROCESS_FN_LEFTOVER has set #PREV_FN_DEFERRED to 1 +. if !\\n[#PREV_FN_DEFERRED]=1 \{\ +. nr #FN_DEFER 1 +. nr #FN_DEPTH +\\n[#DIVER_DEPTH] +. rr #GET_DEPTH +.\" This is required so that the defer space clause can distinguish +.\" a real #FN_COUNT=1 from one generated if FOOTNOTE is run inside +.\" QUOTE, BLOCKQUOTE or EPIGRAPH +. if \\n[#DIVER_FN]=2 \{\ +. nr #SAVED_DIVER_FN_COUNT \\n[#FN_COUNT] +. rr #DIVER_FN +. \} +. \} +. \} +.\" Calculate the footnote depth. +. if \\n[#GET_DEPTH]=1 \{\ +.\" Save the previous footnote depth (for use when there will be +.\" some overflowed footnote text). +. nr #SAVED_FN_DEPTH_1 \\n[#FN_DEPTH] +.\" Add the depth of the current footnote to any already existent +.\" footnotes. +. nr #FN_DEPTH +\\n[#DIVER_DEPTH] +.\" Special handling for run-on footnotes +. if \\n[#RUN_ON]=1 \{\ +. if \\n[#RUNON_FOOTNOTES] .unformat RUNON_FOOTNOTES +. if \\n[#RUNON_FN_IN_DIVER] .unformat RUNON_FN_IN_DIVER +. ev FOOTNOTES +.\" Recreate FOOTNOTES with rule followed by text of unformatted +.\" run-on footnotes. +. di FOOTNOTES +. ie \\n[#FN_RULE]=0 .RLD 1v +. el \{\ +\v'-\\n[#FN_RULE_ADJ]u-\\n[#FN_RULE_WEIGHT_ADJ]u'\ +\D't \\n[#FN_RULE_WEIGHT]'\ +\h'-\\n[#FN_RULE_WEIGHT]u'\ +\D'l \\n[#FN_RULE_LENGTH]u 0'\ +\v'+\\n[#FN_RULE_ADJ]u+\\n[#FN_RULE_WEIGHT_ADJ]u' +. \} +. br +. if \\n[#RUNON_FOOTNOTES] \{\ +. RUNON_FOOTNOTES +. rr #RUNON_FOOTNOTES +. \} +. if \\n[#RUNON_FN_IN_DIVER] \{\ +. RUNON_FN_IN_DIVER +. rr #RUNON_FN_IN_DIVER +. \} +. br +. di +. ev +. nr #FN_DEPTH \\n[#DIVER_DEPTH] +. nr #SAVED_VFP 0+\\n[#VARIABLE_FOOTER_POS] +. nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]u +. \} +.\" Save the new depth +. nr #SAVED_FN_DEPTH_2 \\n[#FN_DEPTH] +.\" Signal that defer space should be added when PROCESS_FN_LEFTOVER +.\" processes deferred footnotes. +. if \\n[#FN_DEFER] \{\ +. if \\n[#FN_COUNT]=2 \{\ +. ie \\n[#COLUMNS] \{\ +. if !\\n[#FROM_FOOTER] \{\ +. if \\n[#FN_DEFER]=1 .nr #FN_DEFER_SPACE 1 +. if \\n[#FN_COUNT_FOR_COLS]>=1 .rr #FN_DEFER_SPACE +. if \\n[#FROM_HEADER] .nr #FN_DEFER_SPACE 1 +. \} +. \} +. el .nr #FN_DEFER_SPACE 1 +. \} +. rr #FN_DEFER +. \} +.\" If the depth of the whole footnote won't fit in the space +.\" between where we are on the page and the bottom margin, calculate +.\" how much of it will fit. +. if \\n[#FN_DEPTH]>\\n[#SPACE_REMAINING] \{\ +. nr #FN_LINES 0 1 +. while (\\n+[#FN_LINES]*\\n[#FN_LEAD])<\\n[#SPACE_REMAINING] \{\ +. nr #FN_DEPTH (\\n[#FN_LINES]*\\n[#FN_LEAD]) +. \} +. nr #VFP_DIFF \\n[#FN_DEPTH]-\\n[#SAVED_FN_DEPTH_1] +. nr #OVERFLOW 1 +.\" Very occasionally, #VFP_DIFF, on a 1st footnote that isn't to +.\" be deferred, comes up with a depth equal to exactly 1 line +.\" of footnotes, i.e. enough room to print the rule and nothing +.\" else. The following tests for such a condition, and rather than +.\" attempting to treat the footnote as an overflow, it tells mom to +.\" treat it as a special kind of deferred footnote (#FN_DEFER 2). +. if \\n[#SAVED_FN_DEPTH_1]=0 \{\ +. if \\n[#FN_DEPTH]=\\n[#FN_LEAD] \{\ +. nr #FN_DEFER 2 +. nr #FN_DEPTH \\n[#SAVED_FN_DEPTH_2] +. rr #OVERFLOW +. \} +. \} +. \} +.\" Calculate VFP based on whether the footnote overflows, or is to +.\" be treated normally. +. ie \\n[#OVERFLOW]=1 \{\ +. if \\n[#RUN_ON] \{\ +. rr #VARIABLE_FOOTER_POS +. nr #VARIABLE_FOOTER_POS \\n[#SAVED_VFP] +. \} +. ie \\n[#FN_COUNT]=1 \{\ +. ie \\n[#RULED]=1 \{\ +. ie \\n[#COLUMNS]=1 \{\ +. ie \\n[#COL_NUM]=\\n[#NUM_COLS] \{\ +. ie \\n[#FROM_FOOTER] \{\ +. ie \\n[#FN_COUNT_FOR_COLS]>1 \{\ +. nr #FN_DEPTH -\\n[#FN_DEPTH] +. if \\n[#DIVERTED]=1 .nr #DIVERTED 3 +. if !\\n[#PREV_FN_DEFERRED]=1 \ +. nr #FN_DEPTH -\\n[#VFP_DIFF] +. \} +. el \{\ +. nr #VARIABLE_FOOTER_POS -\\n[#FN_DEPTH] +. if \\n[#DIVERTED]=1 .nr #DIVERTED 3 +. \} +. \} +. el .nr #VARIABLE_FOOTER_POS -(\\n[#FN_DEPTH]) +. \} +. el .nr #VARIABLE_FOOTER_POS -(\\n[#FN_DEPTH]) +. \} +. el .nr #VARIABLE_FOOTER_POS -(\\n[#FN_DEPTH]) +. \} +. el \{\ +. nr #VARIABLE_FOOTER_POS -\\n[#VFP_DIFF] +. if \\n[#DIVERTED]=1 .nr #DIVERTED 3 +. if !\\n[#PREV_FN_DEFERRED]=1 \{\ +. ie \\n[#COLUMNS]=1 \ +. if !\\n[#FROM_FOOTER] . +. el .nr #FN_DEPTH -\\n[#VFP_DIFF] +. \} +. if \\n[#DIVERTED]=3 \{\ +. if !\\n[#PREV_FN_DEFERRED] \{\ +. if !\\n[#FROM_FOOTER] \{\ +. if \\n[#FN_COUNT]=1 \{\ +. if !\\n[#VFP_DIFF] \{\ +. if \\n[#FN_MARKER_STYLE]=1 \{\ +. da FOOTNOTES +\!. ALD \\n[#FN_LEAD]u +. di +. \} +. if \\n[#RESET_FN_NUMBER] \{\ +. da FOOTNOTES +\!. ALD \\n[#FN_LEAD]u +. di +. \} +. \} +. \} +. \} +. \} +. \} +. \} +. nr #FN_DEPTH \\n[#SAVED_FN_DEPTH_1]+\\n[#VFP_DIFF] +. \} +. el \{\ +. nr #VARIABLE_FOOTER_POS -\\n[#VFP_DIFF] +. nr #FN_DEPTH \\n[#SAVED_FN_DEPTH_1]+\\n[#VFP_DIFF] +. \} +. rr #OVERFLOW +. rr #RULED +. \} +. el \{\ +. nr #VARIABLE_FOOTER_POS -\\n[#DIVER_DEPTH] +. if \\n[#PREV_FN_DEFERRED]=1 \{\ +. if \\n[#DIVERTED] \{\ +. if !\\n[#FN_DEPTH]=\\n[#SAVED_FN_DEPTH_1] \{\ +. nr #FN_DEPTH +\\n[#FN_LEAD] +. nr #VARIABLE_FOOTER_POS -\\n[#FN_LEAD] +. rr #PREV_FN_DEFERRED +. \} +. \} +. \} +. if \\n[#FN_COUNT]>1 \{\ +. nr #NO_BACK_UP 1 +. rr #DIVERTED +. rr #RULED +. \} +. \} +. \} +. \} +. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u +.\" If we have a footnote whose text has to be deferred to the next +.\" page, reset the FOOTER trap to its original location. +. if \\n[#FN_DEFER] \{\ +. nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]u +. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u +. \} +. \} +. nr #NO_FN_MARKER 0 +. \} +. if \\n[#NUM_ARGS]=2 \{\ +. if '\\$2'BREAK' .BR +. if '\\$2'BR' .BR +. \} +.END +\# +\# Utility macros to manage footnotes that occur inside diversions +\# --------------------------------------------------------------- +\# +\# There are some redundancies here; they're left in in case unforeseen +\# footnote situations crop up in the future that might require +\# manipulation of them. +\# +\# 1. Pre-footnote processing for footnotes in diversions +\# +\# a) A footnote inside a diversion will be moved entirely (marker +\# in running text and text of footnote) to the next page/column. +\# +.MAC DIVER_FN_1_PRE END +. nr #RESET_FN_COUNTERS 1 +. nr #COUNTERS_RESET 1 +. if \\n[#DONE_ONCE]=1 \{\ +. if \\n[#FN_DEFER] \{\ +. if \\n[#SAVED_DIVER_FN_COUNT]=1 \{\ +. ie \\n[#COLUMNS]=1 \ +. if \\n[#COL_NUM]=\\n[#NUM_COLS] .nr #FN_DEFER_SPACE 1 +. el .nr #FN_DEFER_SPACE 1 +. \} +. \} +. if \\n[#FN_MARKER_STYLE]=1 \{\ +. if \\n[#FN_COUNT]>0 .nr #FN_COUNT 0 1 +. if \\n[#COLUMNS]=1 \ +. if \\n[#COL_NUM]=\\n[#NUM_COLS] .nr #FN_COUNT_FOR_COLS 0 1 +. \} +. if \\n[#FN_MARKER_STYLE]=2 \{\ +. if \\n[#RESET_FN_NUMBER]=1 \{\ +. ie \\n[#COLUMNS]=1 \ +. if \\n[#COL_NUM]=\\n[#NUM_COLS] .nr #FN_NUMBER 0 1 +. el .nr #FN_NUMBER 0 1 +. \} +. \} +. \} +.END +\# +\# b) Treat as a normal footnote, including defers. +\# +.MAC DIVER_FN_2_PRE END +. nr #RESET_FN_COUNTERS 2 +.END +\# +\# 2. Post-footnote processing for footnotes in diversions +\# +\# Even when a footnote inside a diversion is treated as +\# "normal," some manipulation of registers is required. The +\# macro is called in DO_QUOTE (i.e. at the termination of +\# quotes and blockquotes) and in DO_EPIGRAPH. +\# +.MAC DIVER_FN_2_POST END +. if \\n[#DONE_ONCE]=1 \{\ +. if \\n[#FN_MARKER_STYLE]=1 \{\ +. if \\n[#FN_COUNT]=0 .nr #DONT_RULE_ME 1 +. if \\n[#FN_COUNT]>0 .nr #FN_COUNT 0 1 +. if \\n[#COLUMNS]=1 \{\ +. if \\n[#COL_NUM]=\\n[#NUM_COLS] .nr #FN_COUNT_FOR_COLS 0 1 +. if !\\n[#COL_NUM]=\\n[#NUM_COLS] . +. \} +. \} +. if \\n[#FN_MARKER_STYLE]=2 \{\ +. if \\n[#FN_COUNT]=0 .nr #DONT_RULE_ME 1 +. if \\n[#FN_COUNT]>0 .nr #FN_COUNT 0 1 +. if \\n[#RESET_FN_NUMBER]=1 \{\ +. ie \\n[#COLUMNS]=1 \ +. if \\n[#COL_NUM]=\\n[#NUM_COLS] .nr #FN_NUMBER 0 1 +. el .nr #FN_NUMBER 0 1 +. \} +. \} +. \} +.END +\# +\# The main macros that handle footnote processing. +\# ----------------------------------------------- +\# +\# FN_OVERFLOW_TRAP starts off "underneath" FOOTER, but is revealed +\# as #VARIABLE_FOOTER_POSITION changes the position of FOOTER. +\# FN_OVERFLOW_TRAP simply starts diversion FN_OVERFLOW to "catch" +\# the overflow. The diversion is ended in FOOTER, immediately after +\# FOOTER outputs the diversion, FOOTNOTES, before PROCESS_FN_LEFTOVER +\# is run (either in HEADER, or in FOOTER if moving col to col). +\# +.MAC FN_OVERFLOW_TRAP END +. if \\n[#FN_COUNT] \{\ +. di FN_OVERFLOW +. ie !\\n[#NO_BACK_UP]=1 \{\ +. if \\n[#PREV_FN_DEFERRED] \{\ +. ie \\n[#COLUMNS]=1 \{\ +. if \\n[#FROM_FOOTER] \{\ +. if \\n[#PREV_FN_DEFERRED] \{\ +. if !\\n[#COL_NUM]=\\n[#NUM_COLS] \ +. rr #PREV_FN_DEFERRED +. \} +. \} +. if !\\n[#FROM_FOOTER] \{\ +. if !\\n[#COL_NUM]=\\n[#NUM_COLS] \{\ +. if !\\n[#LAST_FN_COUNT_FOR_COLS]>1 \{\ +\!. RLD \\n[#FN_LEAD]u +. \} +. \} +. \} +. \} +. el \{\ +\!. RLD \\n[#FN_LEAD]u +. \} +. \} +. \} +. el \{\ +. rr #NO_BACK_UP +. rr #PREV_FN_DEFERRED +. \} +. \} +.\" When #FROM_DIVERT_FN is 1, it signals to FOOTNOTE, when run from +.\" within DIVERT_FN_LEFTOVER, to set #SPACE_REMAINING to the total +.\" area allowable for running text. +. nr #FROM_DIVERT_FN 1 +.END +\# +\# PROCESS_FN_LEFTOVER is called at the top of HEADER, and in +\# FOOTER if we're moving from one column to the next (i.e. after +\# outputting FOOTNOTES). It checks for whether we have a "deferred +\# footnote" situation, and resets counters and number registers +\# accordingly. Lastly, if we have some footnote overflow, it calls +\# DIVERT_FN_LEFTOVER. +\# +.MAC PROCESS_FN_LEFTOVER END +. if \\n[#PREV_FN_DEFERRED]=2 \ +. if \\n[#FN_COUNT_AT_FOOTER]>1 .rr #PREV_FN_DEFERRED +. ie !\\n[#FN_DEFER] \{\ +. nr #FN_COUNT 0 1 +. nr #FN_DEPTH 0 +. nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN] +. \} +. el \{\ +. if \\n[#FN_DEFER]=1 .nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN] +. if \\n[#FN_DEFER]=2 \{\ +. nr #FN_DEPTH 0 +. nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN] +. \} +. \} +. nr #SPACE_REMAINING 0 +. ch FOOTER -\\n[#B_MARGIN]u +. if \\n[#FN_DEFER] \{\ +. nr #NO_FN_MARKER 1 +. rn FOOTNOTES DEFERRED-FOOTNOTE +. nr #FN_DEPTH 0 +. FOOTNOTE +. nf +. DEFERRED-FOOTNOTE +. FOOTNOTE OFF +. ie \\n[#COLUMNS]=1 \{\ +. if \\n[#COL_NUM]=\\n[#NUM_COLS] \{\ +. if !\\n[#FROM_FOOTER] \ +. if \\n[#FN_COUNT_FOR_COLS]=1 .nr #PREV_FN_DEFERRED 1 +. \} +. \} +. el .nr #PREV_FN_DEFERRED 1 +. \} +. if !\\n[#FN_DEFER] \ +. if \\n[#FN_OVERFLOW_DEPTH] .DIVERT_FN_LEFTOVER +. ie \\n[#COLUMNS]=1 \{\ +. if \\n[#COL_NUM]>1 \ +. if \\n[#COL_NUM]=\\n[#NUM_COLS] .nr #FN_COUNT 0 1 +. \} +. el .nr #FN_COUNT 0 1 +. if \\n[#DIVER_FN]=2 .rr #DIVER_FN +. rr #FROM_DIVERT_FN +.END +\# +\# DIVERT_FN_LEFTOVER is called in PROCESS_FN_LEFTOVER (at +\# the top of HEADER, and in FOOTER if we're moving from one column +\# to the next). +\# +.MAC DIVERT_FN_LEFTOVER END +. nr #NO_FN_MARKER 1 +. nr #DIVERTED 1 +. FOOTNOTE +. nf +. FN_OVERFLOW +. FOOTNOTE OFF +. if \\n[#PREV_FN_DEFERRED] \{\ +. nr #FN_DEPTH -\\n[#FN_LEAD] +. nr #VARIABLE_FOOTER_POS +\\n[#FN_LEAD] +. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u +. if \\n[#PREV_FN_DEFERRED]=2 \{\ +. nr #PREV_FN_DEFERRED 1 +. rr #DIVERTED +. \} +. \} +. rr #FN_OVERFLOW_DEPTH +.END +\# +\# This is a special macro to deal with footnotes that are set inside +\# diversions (QUOTE, BLOCKQUOTE and EPIGRAPH). It's called in HEADER +\# (and in FOOTER, if we're moving from column to column), and comes +\# after PROCESS_FOOTNOTE_LEFTOVER in those two macros. +\# +.MAC PROCESS_FN_IN_DIVER END +. nr #SPACE_REMAINING 0 +. ch FOOTER -\\n[#B_MARGIN]u +. nr #NO_FN_MARKER 1 +. if !\\n[#RESET_FN_COUNTERS]=2 .rr #RESET_FN_COUNTERS +. FOOTNOTE +. if \\n[#FN_OVERFLOW_DEPTH] .nf +. ie dRUNON_FN_IN_DIVER \{\ +. RUNON_FN_IN_DIVER +. rm RUNON_FN_IN_DIVER +. \} +. el \{\ +. nf +. FN_IN_DIVER +. \} +. FOOTNOTE OFF +. rr #DIVER_FN +.END +\# +\# ==================================================================== +\# +\# +++ENDNOTES+++ +\# +\# When endnotes are output, the spacing between the notes is always +\# 1 extra linespace. This can have bottom margin consequences. If +\# this doesn't bother you, don't worry about it. If it does bother +\# you, and you want to adjust the spacing between any two endnotes (as +\# they're output), make the spacing adjustments (.ALD/.RLD) at the +\# *end* of endnotes (i.e. just before .ENDNOTE OFF), not at the top. +\# +\# Endnotes must be output manually with .ENDNOTES. This allows user +\# the flexibility to output endnotes at the end of each collated +\# document, or to output them at the end of the entire document. +\# +\# Control macros +\# -------------- +\# +\# ENDNOTE POINT SIZE +\# ------------------ +\# *Argument: +\# <base point size for endnotes> +\# *Function: +\# Creates or modifies register #EN_PS. +\# *Notes: +\# Default is same as running text in body of document. +\# +\# This size control macro differs from other size control macros +\# in that it sets an absolute point size, not a relative one. This +\# is because a) endnotes always appear separate from the body of +\# a document and therefore don't need to be relative to the body +\# of the document, and b) there are quite a few elements of the +\# endnotes page(s) that need to be relative to the base point size +\# of that page. If the base endnote point size were relative to +\# the body of the document (i.e. a _SIZE macro taking a +|- value) +\# getting the rest of the endnote elements sized properly could +\# become very confusing. +\# +.MAC ENDNOTE_PT_SIZE END +. nr #EN_PS (p;\\$1) +.END +\# +\# ENDNOTE SPACING +\# ---------------- +\# *Arguments: +\# <per item endnote spacing> | <anything> +\# *Function: +\# Enables space between endnotes items. +\# *Notes: +\# Default is no space. +\# +.MAC ENDNOTE_SPACING END +. ie \B'\\$1' .ds $EN_SPACE \\$1 +. el .rm $EN_SPACE +.END +\# +\# ENDNOTES_HDRFTR_CENTER +\# ---------------------- +\# *Argument: +\# toggle +\# *Function: +\# Creates or removes toggle register #EN_HDRFTR_CENTER, used to +\# determine whether mom should print a/the hdrftr center string +\# on the endnotes page. Primarily to enable/disable printing of the +\# chapter name in hdrftrs when DOCTYPE CHAPTER. +\# *Notes: +\# Default is OFF +\# +.MAC ENDNOTES_HDRFTR_CENTER END +. ie '\\$1'' .nr #EN_HDRFTR_CENTER 1 +. el .rr #EN_HDRFTR_CENTER +.END +\# +\# ENDNOTE STRING +\# -------------- +\# *Argument: +\# <title for endnotes page> +\# *Function: +\# Creates or modifies string $EN_STRING. +\# *Notes: +\# Default is "Endnotes" +\# +.MAC ENDNOTES_HEADER_STRING END +. ds $EN_STRING \\$1 +.END +. +.ALIAS ENDNOTE_STRING ENDNOTES_HEADER_STRING +\# +\# ENDNOTE STRING START POSITION +\# ---------------------------- +\# *Argument: +\# <distance from page top> +\# *Function: +\# Creates or modifies register #EN_STRING_V_POS +\# +.MAC ENDNOTES_HEADER_V_POS END +. nr #EN_STRING_V_POS (\\$1) +.END +. +.ALIAS ENDNOTE_STRING_ADVANCE ENDNOTES_HEADER_V_POS +.ALIAS ENDNOTE_STRING_V_POS ENDNOTES_HEADER_V_POS +.ALIAS ENDNOTES_HEADER_V_POS ENDNOTES_HEADER_V_POS +\# +\# ENDNOTE HEADER CAPS and SMALLCAPS +\# --------------------------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Turns capitalization or smallcaps style of the endnotes pages +\# title string "Endnotes" on or off. +\# *Notes: +\# Users may want the endnotes pages title string to be in +\# caps, but the toc entry for endnotes in lower case. If the +\# argument to ENDNOTES_HEADER_STRING is in lower case and +\# ENDNOTES_HEADER_CAPS is turned on, this is exactly what will +\# happen. Ditto for smallcaps. +\# +\# Default for CAPS is on. +\# +.MAC ENDNOTES_HEADER_CAPS END +. ie '\\$1'' .nr #EN_STRING_CAPS 1 +. el .nr #EN_STRING_CAPS 0 +.END +. +.ALIAS ENDNOTE_STRING_CAPS ENDNOTES_HEADER_CAPS +. +.MAC ENDNOTES_HEADER_SMALLCAPS END +. ie '\\$1'' .nr #EN_STRING_SMALLCAPS 1 +. el .nr #EN_STRING_SMALLCAPS 0 +.END +. +.ALIAS ENDNOTE_STRING_SMALLCAPS ENDNOTES_HEADER_SMALLCAPS +\# +\# ENDNOTE TITLE +\# ------------- +\# *Argument: +\# <string that appears before the first endnote pertaining to any document> +\# *Function: +\# Creates string $EN_TITLE. +\# *Notes: +\# Default is the document title, or, if doc is a chapter, "Chapter #" +\# +.MAC ENDNOTE_TITLE END +. ds $EN_TITLE \\$1 +.END +\# +\# ENDNOTE MARKER STYLE +\# -------------------- +\# *Arguments: +\# NUMBER | LINE | SUPERSCRIPT +\# *Function: +\# Sets register #EN_MARKER_STYLE, used in ENDNOTE to determine +\# the style of endnote markers (labels). +\# *Notes: +\# 1=NUMBER; 2=LINE. LINE means "use output line numbers". +\# Default is NUMBER. +\# +.MAC ENDNOTE_MARKER_STYLE END +. if '\\$1'NUMBER' .nr #EN_MARKER_STYLE 1 +. if '\\$1'LINE' \{\ +. nr #EN_MARKER_STYLE 2 +. if !\\n[#EN_LN_SEP] \ +. if !\\n[#EN_LN_BRACKETS] .ENDNOTE_LINENUMBER_BRACKETS SQUARE +. \} +. if '\\$1'SUPERSCRIPT' .nr #EN_MARKER_STYLE 3 +.END +\# +\# ENDNOTE LINENUMBER MARK +\# ----------------------- +\# *Function: +\# This string, when called inline, stores the current output line +\# number in register #EN_MARK for use with ENDNOTE. +\# +.ds EN_MARK \R'#EN_MARK \En[ln]' +\# +\# ENDNOTE LINENUMBER SEPARATOR +\# ---------------------------- +\# *Argument: +\# <user-defined separator> +\# *Function: +\# Stores user-defined separator (for use then +\# ENDNOTE_MARKER_STYLE is LINE) in string $EN_LN_SEP. The +\# separator is intended to be used when the user wishes a +\# separator, rather than the choice of brackets offered by +\# ENDNOTE_LINENUMBER_BRACKETS. +\# +.MAC ENDNOTE_LINENUMBER_SEPARATOR END +. rr #EN_LN_BRACKETS +. nr #EN_LN_SEP 1 +. ds $EN_LN_SEP "\\$1 +.END +\# +\# ENDNOTE LINENUMBER BRACKETS +\# --------------------------- +\# *Argument: +\# PARENS | SQUARE | BRACES or ( | [ | { +\# *Function: +\# Sets register #EN_LN_BRACKETS to 1, and creates strings +\# $EN_OPEN_BRACKET and $EN_CLOSE_BRACKET according to the given argument. +\# +.MAC ENDNOTE_LINENUMBER_BRACKETS END +. rr #EN_LN_SEP +. nr #EN_LN_BRACKETS 1 +. if '\\$1'PARENS' \{\ +. ds $EN_OPEN_BRACKET ( +. ds $EN_CLOSE_BRACKET ) +. \} +. if '\\$1'(' \{\ +. ds $EN_OPEN_BRACKET ( +. ds $EN_CLOSE_BRACKET ) +. \} +. if '\\$1'SQUARE' \{\ +. ds $EN_OPEN_BRACKET [ +. ds $EN_CLOSE_BRACKET ] +. \} +. if '\\$1'[' \{\ +. ds $EN_OPEN_BRACKET [ +. ds $EN_CLOSE_BRACKET ] +. \} +. if '\\$1'BRACES' \{\ +. ds $EN_OPEN_BRACKET { +. ds $EN_CLOSE_BRACKET } +. \} +. if '\\$1'{' \{\ +. ds $EN_OPEN_BRACKET { +. ds $EN_CLOSE_BRACKET } +. \} +.END +\# +\# ENDNOTE LINENUMBER GAP +\# ---------------------- +\# *Argument: +\# <space between line-number labels and endnotes text> +\# *Function: +\# Defines string $EN_LN_GAP, used during printing of line-number +\# labels in ENDNOTE. +\# +.MAC ENDNOTE_LINENUMBER_GAP END +. nr #EN_LN_GAP (u;\\$1) +.END +\# +\# ENDNOTE NUMBERS ALIGNMENT +\# ------------------------- +\# *Argument: +\# LEFT | RIGHT <max. number of digit placeholders that will appear in endnotes> +\# *Function: +\# Creates registers for _LEFT or _RIGHT; creates register +\# #EN_NUMBER_PLACEHOLDERS. +\# *Notes: +\# Default is for endnote numbers to be right aligned to 2 placeholders. +\# +.MAC ENDNOTE_NUMBERS_ALIGN END +. if '\\$1'LEFT' \{\ +. rr #EN_NUMBERS_ALIGN_RIGHT +. nr #EN_NUMBERS_ALIGN_LEFT 1 +. \} +. if '\\$1'RIGHT' \{\ +. rr #EN_NUMBERS_ALIGN_LEFT +. nr #EN_NUMBERS_ALIGN_RIGHT 1 +. \} +. nr #EN_NUMBER_PLACEHOLDERS \\$2 +.END +\# +\# ENDNOTE PARAGRAPH INDENT +\# ------------------------ +\# *Argument: +\# <first line indent of paras subsequent to 1st in endnotes> +\# *Function: +\# Creates register #EN_PP_INDENT for use in .PP. +\# *Notes: +\# Requires a unit of measure. +\# +\# Default is 1.5m for TYPESET; same indent as PARA_INDENT for TYPEWRITE. +\# +.MAC ENDNOTE_PARA_INDENT END +. nr #EN_PP_INDENT (\\$1) +.END +\# +\# TURN OFF COLUMN MODE FOR ENDNOTES +\# --------------------------------- +\# *Argument: +\# <none> | <anything> +\# *Function: +\# Creates or removes register #EN_NO_COLS +\# *Notes: +\# Allows user to tell mom not to set endnotes in columnar +\# documents in columns. Default is to set endnotes in columns. +\# +.MAC ENDNOTES_NO_COLUMNS END +. ie '\\$1'' .nr #EN_NO_COLS 1 +. el .rr #EN_NO_COLS +.END +\# +\# NO FIRST PAGE NUMBER ON ENDNOTES FIRST PAGE +\# ------------------------------------------- +\# *Argument: +\# <none> | <anything> +\# *Function: +\# Creates or removes register #EN_NO_FIRST_PN +\# *Notes: +\# For use if FOOTERS are on. Tells ENDNOTES not to put a page +\# number on the first endnotes page. Some users may want this. +\# Default is to print a page number at the top of the first +\# endnotes page when footers are on. +\# +.MAC ENDNOTES_NO_FIRST_PAGENUM END +. ie '\\$1'' .nr #EN_NO_FIRST_PN 1 +. el .rr #EN_NO_FIRST_PN +.END +\# +\# PAGE HEADERS ON ENDNOTES PAGES +\# ------------------------------ +\# *Argument: +\# <none> | ALL +\# *Function: +\# Creates or removes register #EN_ALLOWS_HEADERS or +\# #EN_ALLOWS_HEADERS_ALL +\# *Notes: +\# Whether ENDNOTES puts a page header at the top of endnotes +\# pages if page headers are used throughout the document. +\# Default is to insert the page headers, but not on the first +\# page. If the optional argument ALL is given, ENDNOTES puts a +\# page header on the first page as well. +\# +.MAC ENDNOTES_ALLOWS_HEADERS END +. ie '\\$1'' .nr #EN_ALLOWS_HEADERS 1 +. el \{\ +. ie '\\$1'ALL' \{\ +. nr #EN_ALLOWS_HEADERS 1 +. nr #EN_ALLOWS_HEADERS_ALL 1 +. \} +. el \{\ +. nr #EN_ALLOWS_HEADERS 0 +. nr #EN_ALLOWS_HEADERS_ALL 0 +. \} +. \} +.END +\# +\# ENDNOTES PAGES PAGE NUMBERING STYLE +\# ----------------------------------- +\# *Argument: +\# DIGIT | ROMAN | roman | ALPHA | alpha +\# *Function: +\# Creates or modifies $EN_PN_STYLE. +\# *Notes: +\# Allows user to define what style should be used for endnotes +\# pages page numbering. Arguments are the same as for +\# PAGENUM_STYLE. +\# +\# Default is DIGIT. +\# +.MAC ENDNOTES_PAGENUM_STYLE END +. ds $EN_PN_STYLE \\$1 +.END +\# +\# FIRST PAGE NUMBER FOR ENDNOTES +\# ------------------------------ +\# *Argument: +\# <page number that appears on page 1 of endnotes pages> +\# *Function: +\# Creates or modifies string $EN_FIRST_PN +\# *Notes: +\# To be used with caution, only if all endnotes +\# are to be output at once, i.e. not at the end of the separate +\# docs of a collated doc +\# +.MAC ENDNOTES_FIRST_PAGENUMBER END +. nr #EN_FIRST_PN \\$1 +.END +\# +\# SINGLESPACE ENDNOTES +\# -------------------- +\# *Argument: +\# <none> | <anything> +\# *Function: +\# Sets lead of endnotes pages in TYPEWRITE to 12 points, +\# adjusted. +\# *Notes: +\# Default is to double-space endnotes pages. +\# +.MAC SINGLESPACE_ENDNOTES END +. if \\n[#PRINT_STYLE]=1 \{\ +. ie \\n[#SINGLE_SPACE] \{\ +. nr #EN_SINGLESPACE 1 +. rr #IGNORE +. if \\n[#OK_PROCESS_LEAD] \{\ +. ENDNOTE_LEAD 12 ADJUST +. nr #IGNORE 1 +. \} +. \} +. el \{\ +. ie '\\$1'' \{\ +. nr #EN_SINGLESPACE 1 +. rr #IGNORE +. if \\n[#OK_PROCESS_LEAD] \{\ +. ENDNOTE_LEAD 12 ADJUST +. nr #IGNORE 1 +. \} +. \} +. el \{\ +. rr #EN_SINGLESPACE +. rr #IGNORE +. if \\n[#OK_PROCESS_LEAD] \{\ +. ENDNOTE_LEAD 24 ADJUST +. nr #IGNORE 1 +. \} +. \} +. \} +. \} +.END +\# +\# ENDNOTE PARAGRAPH SPACE +\# ----------------------- +\# *Argument: +\# toggle +\# *Function: +\# Creates toggle register #EN_PP_SPACE for use in .PP. +\# *Notes: +\# Like PARA_SPACE. Default is not to space endnote paras. +\# +.MAC ENDNOTE_PARA_SPACE END +. ie '\\$1'' .nr #EN_PP_SPACE 1 +. el .rr #EN_PP_SPACE +.END +\# +\# ENDNOTE +\# ------- +\# *Argument: +\# toggle +\# *Function: +\# Places superscript endnote number in text, then collects and +\# processes endnote in diversion END_NOTES. +\# *Notes: +\# \c must be appended to the word immediately preceding .ENDNOTE +\# when ENDNOTE_MARKER_STYLE is NUMBER. +\# +.MAC ENDNOTE END +. ie '\\$1'' \{\ +. nr #ENDNOTE 1 +. ie !\\n[#EN_MARKER_STYLE]=2 \{\ +. if \\n[#CONDENSE] .nop \*[CONDX]\c +. if \\n[#EXTEND] .nop \*[EXTX]\c +. if \\n[#UNDERLINE_ON] \{\ +. nr #UNDERLINE_WAS_ON 1 +. UNDERLINE OFF +. \} +. if \\n[#PRINT_STYLE]=1 \{\ +. if \\n[#SLANT_ON] \{\ +. nr #SLANT_WAS_ON 1 +. nop \*[SLANTX]\c +. \} +.\" Vertical raise amount here is more than when the same string is printed in +.\" the endnotes so bottom of number aligns with top of bowl. +. PRINT \ +"\s-2\v'-\\n[#DOC_LEAD]u/5u'\\n+[#EN_NUMBER]\v'+\\n[#DOC_LEAD]u/5u'\s+2\c" +. \} +. if \\n[#PRINT_STYLE]=2 .PRINT \*[SUP]\\n+[#EN_NUMBER]\*[SUPX]\c +. \} +. el \{\ +. ie r#EN_NUMBER .nr #EN_NUMBER \\n[#EN_NUMBER]+1 +. el .nr #EN_NUMBER 1 1 +. if !\\n[#LINENUMBERS] \{\ +. tm1 "[mom]: Line numbering must be enabled with NUMBER_LINES when +. tm1 " ENDNOTE_MARKER_STYLE is LINE. +. ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +. \} +. if \\n[#EN_MARK]=0 .nr #EN_MARK \\n[ln] +. nr #EN_MARK_2 \\n[ln] +. if '\\n[.z]'P_QUOTE' \{\ +. nr #EN_MARK -1 +. nr #EN_MARK_2 -1 +. \} +. \} +. nr #PP_STYLE_PREV \\n[#PP_STYLE] +. nr #PP_STYLE 1 +. if \\n[#INDENT_FIRST_PARAS] .nr #INDENT_FIRSTS 1 +. INDENT_FIRST_PARAS +. ev EN +. da END_NOTES +. LL \\n[#DOC_L_LENGTH]u +. ta \\n[.l]u +. if \\n[#COLUMNS] \{\ +. ie \\n[#EN_NO_COLS] .LL \\n[#DOC_L_LENGTH]u +. el .LL \\n[#COL_L_LENGTH]u +. ta \\n[.l]u +. \} +\!. if \\\\n[.vpt]=0 .vpt +\!. ne 3 +. vs \\n[#EN_LEAD]u +.\" Print identifying doc title (e.g., Chapter n) +. if \\n[#EN_NUMBER]=1 \{\ +. if \\n[#PRINT_STYLE]=1 .TYPEWRITER +. if \\n[#PRINT_STYLE]=2 \{\ +. FAMILY \\*[$EN_TITLE_FAM] +. FT \\*[$EN_TITLE_FT] +. ps \\n[#EN_PS]u\\*[$EN_TITLE_SIZE_CHANGE] +. if \\n[#EN_TITLE_COLOR] .COLOR \\*[$EN_TITLE_COLOR] +. if \\n[#ENDNOTE_TITLE_SMALLCAPS] .SMALLCAPS +. if \\n[#ENDNOTE_TITLE_CAPS] .CAPS +. \} +. ie \\n[#SINGLE_SPACE]=1 .sp 2 +. el .sp +. if !'\\*[$EN_TITLE]'' \{\ +. substring $EN_TITLE_QUAD 0 0 +. if '\\*[$EN_TITLE_QUAD]'L' .LEFT +. if '\\*[$EN_TITLE_QUAD]'C' .CENTER +. if '\\*[$EN_TITLE_QUAD]'R' .RIGHT +\!. vpt 0 +. sp -.25v +. ie \\n[#EN_TITLE_UNDERLINE] \ +. UNDERSCORE "\\*[$EN_TITLE]" +. el \{\ +. ie \\n[#PRINT_STYLE]=1 \ +. UNDERSCORE "\\*[$EN_TITLE]" +. el .PRINT "\\*[$EN_TITLE]" +. \} +. sp .25v +\!. vpt +. \} +. if \\n[#EN_TITLE_COLOR] .gcolor +. if \\n[#ENDNOTE_TITLE_SMALLCAPS] .SMALLCAPS OFF +. if \\n[#ENDNOTE_TITLE_CAPS] .CAPS OFF +. \} +.\" Get indent from endnotes point size; convert string to reg in +.\" case indent string is, e.g., m or n +. ps \\n[#EN_PS]u +. nr #REF_EN_INDENT (u;\\*[$REF_EN_INDENT]) +. if \\n[#PRINT_STYLE]=1 \{\ +. TYPEWRITER +. if \\n[#EN_NUMBER]=1 \{\ +. ie \\n[#SINGLE_SPACE]=1 .sp +. el .sp .25 +. \} +. if \\n[#EN_MARKER_STYLE]=3 .ps -2 +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. if \\n[#EN_MARKER_STYLE]=1 \{\ +. FAMILY \\*[$EN_NUMBER_FAM] +. FT \\*[$EN_NUMBER_FT] +. ps \\n[#EN_PS]u\\*[$EN_NUMBER_SIZE_CHANGE] +. \} +. if \\n[#EN_MARKER_STYLE]=2 \{\ +. FAMILY \\*[$EN_LN_FAM] +. FT \\*[$EN_LN_FT] +. ps \\n[#EN_PS]u\\*[$EN_LN_SIZE_CHANGE] +. \} +. if \\n[#EN_MARKER_STYLE]=3 \{\ +. FAMILY \\*[$EN_NUMBER_FAM] +. FT \\*[$EN_NUMBER_FT] +. ps \\n[#PT_SIZE_IN_UNITS]u*6u/10u +. \} +. \} +.\" Build string for line-numbered endnotes +. if \\n[#EN_MARKER_STYLE]=2 \{\ +. ie \\n[#EN_LN_BRACKETS]=1 \{\ +. ds $EN_LINENUMBER \v'-.085m'\\*[$EN_OPEN_BRACKET]\v'.085m' +. ie \\n[#EN_MARK_2]=\\n[#EN_MARK] .as $EN_LINENUMBER \ +\\n[#EN_MARK]\v'-.085m'\\*[$EN_CLOSE_BRACKET]\v'.085m'\" +. el .as $EN_LINENUMBER \ +\\n[#EN_MARK]\v'-.1m'-\v'.1m'\\n[#EN_MARK_2]\v'-.085m'\ +\\*[$EN_CLOSE_BRACKET]\v'.085m'\" +. \} +. el \{\ +. ie \\n[#EN_MARK_2]=\\n[#EN_MARK] \ +. ds $EN_LINENUMBER \ +\\n[#EN_MARK]\\*[$EN_LN_SEP] +. el \ +. ds $EN_LINENUMBER \ +\\n[#EN_MARK]\v'-.1m'-\v'.1m'\\n[#EN_MARK_2]\\*[$EN_LN_SEP] +. \} +. nr #EN_MARK 0 +. \} +. vpt 0 +. ie \\n[#EN_NUMBERS_ALIGN_RIGHT] .RIGHT +. el .LEFT +. if \\n[#EN_MARKER_STYLE]=1 \ +. nr #EN_NUMBER_L_LENGTH \w'\0'*\\n[#EN_NUMBER_PLACEHOLDERS]+\w'.' +. if \\n[#EN_MARKER_STYLE]=2 \{\ +. ie \\n[#EN_LN_BRACKETS]=1 .nr #EN_NUMBER_L_LENGTH \ +(\w'\0'*(\\n[#EN_NUMBER_PLACEHOLDERS]*2))+\w'-[]' +. el .nr #EN_NUMBER_L_LENGTH \ +(\w'\0'*(\\n[#EN_NUMBER_PLACEHOLDERS]*2))+\w'-\\*[$EN_LN_SEP]' +. RIGHT +. \} +. if \\n[#EN_MARKER_STYLE]=3 \{\ +. nr #EN_NUMBER_L_LENGTH \ +\w'\0'*\\n[#EN_NUMBER_PLACEHOLDERS]+.15m +. RIGHT +. \} +. ie \\n[#REF]=1 \ +. ll \\n[#EN_NUMBER_L_LENGTH]u+\\n[#REF_EN_INDENT]u +. el .ll \\n[#EN_NUMBER_L_LENGTH]u +. if \\n[#EN_MARKER_STYLE]=1 \{\ +. if \\n[#REF]=1 .ti \\n[#REF_EN_INDENT]u +. nop \En[#EN_NUMBER]. +. \} +. if \\n[#EN_MARKER_STYLE]=2 \{\ +. nop \\*[$EN_LINENUMBER] +. rm $EN_LINENUMBER +. \} +. if \\n[#EN_MARKER_STYLE]=3 \{\ +\!. vpt 0 +. ps \" Reset ps changed to get width of s-script numbers +. ie \\n[#PRINT_STYLE]=1 \{\ +.\" Vertical raise amount here is less than when the same string is printed in +.\" the body of the text because number precedes a cap. +. nop \ +\s-2\v'-\\n[#DOC_LEAD]u/7u'\\n[#EN_NUMBER]\|\v'+\\n[#DOC_LEAD]u/7u'\s+2 +. \} +. el .nop \E*[SUP]\\n[#EN_NUMBER]\E*[SUPX]\h'.15m' +. \} +. EOL +. ll +\!. vpt +. nr #EN_FIGURE_SPACE \w'\0' +. if \\n[#EN_MARKER_STYLE]=1 \{\ +. ie \\n[#REF]=1 .ti \ +\\n[#EN_NUMBER_L_LENGTH]u+\\n[#REF_EN_INDENT]u+\\n[#EN_FIGURE_SPACE]u +. el .in \ +\\n[#EN_NUMBER_L_LENGTH]u+\\n[#EN_FIGURE_SPACE]u +. \} +. if \\n[#EN_MARKER_STYLE]=2 \{\ +. ie \\n[#REF]=1 .ti \ +\\n[#EN_NUMBER_L_LENGTH]u+\\n[#REF_EN_INDENT]u+\\n[#EN_LN_GAP]u +. el .ti \ +\\n[#EN_NUMBER_L_LENGTH]u+\\n[#EN_LN_GAP]u +. \} +. if \\n[#EN_MARKER_STYLE]=3 \{\ +. ie \\n[#REF]=1 .ti \ +\\n[#EN_NUMBER_L_LENGTH]u+\\n[#REF_EN_INDENT]u+\w'\|'u +. el .in \ +\\n[#EN_NUMBER_L_LENGTH]u +. \} +. nr #EN_TEXT_INDENT \\n[.i] +. QUAD \\*[$EN_QUAD] +. vpt +. if \\n[#PRINT_STYLE]=1 .TYPEWRITER +. if \\n[#PRINT_STYLE]=2 \{\ +. FAMILY \\*[$EN_FAM] +. FT \\*[$EN_FT] +. ps \\n[#EN_PS]u +. \} +. \} +. el \{\ +\!. ie \\n[#EN_NUMBER]=\\\\n[#LAST_EN] .vpt 0 +\!. el .br +. if \\n[#PRINT_STYLE]=2 .sp \\*[$EN_SPACE] +. in 0 +. if \\n[#EN_MARKER_STYLE]=2 \{\ +\!. in 0 +. \} +. da +.\" Restore sentence spacing +. if \\n[#PRINT_STYLE]=2 \{\ +. if d$RESTORE_SS_VAR .SS \\*[$RESTORE_SS_VAR] +. rm $RESTORE_SS_VAR +. \} +. ev +.\" Restore lead -- need +. nr #PP_STYLE \\n[#PP_STYLE_PREV] +. if !\\n[#INDENT_FIRSTS] .INDENT_FIRST_PARAS OFF +. rr #INDENT_FIRSTS +. rr #ENDNOTE +. if \\n[#UNDERLINE_WAS_ON] \{\ +. rr #UNDERLINE_WAS_ON +. UNDERLINE +. \} +. if \\n[#SLANT_WAS_ON] \{\ +. rr #SLANT_WAS_ON +\*[SLANT]\c +. \} +. \} +. if \\n[#NUM_ARGS]=2 \{\ +. if '\\$2'BREAK' .BR +. if '\\$2'BR' .BR +. \} +.END +\# +\# Endnotes (user space macro) +\# --------------------------- +\# +\# ENDNOTES +\# -------- +\# *Arguments: +\# none +\# *Function: +\# Sets new document leading from #EN_LEAD, breaks to a new page, +\# sets up an endnotes page based on registers and strings associated +\# with endnotes, then outputs diversion END_NOTES. +\# +.MAC ENDNOTES END +. if \\n[defer] .NEWPAGE +. nr #LAST_EN \\n[#EN_NUMBER] +. nr #ENDNOTES 1 +. nr #EN_FIRST_PAGE 1 +. SETUP_ENDNOTES +. if !\\n[#PRINT_STYLE]=1 .chop END_NOTES +. nf +. END_NOTES +. rm END_NOTES +. ps \\n[#DOC_PT_SIZE]u +. if \\n[#PRINT_STYLE]=1 .vs \\n[#DOC_LEAD]u +. if \\n[#PRINT_STYLE]=2 \{\ +. ie \\n[#ADJ_EN_LEAD] \ +. nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD] +. el .DOC_LEAD \\n[#RESTORE_DOC_LEAD]u +. rr #RESTORE_DOC_LEAD +. \} +. if \\n[#COLUMNS_WERE_ON] .nr #COLUMNS 1 +. if \\n[#HEADER_STATE]=1 .HEADERS +. if \\n[#LINENUMBERS]=2 \{\ +. NUMBER_LINES RESUME +. nr #LINENUMBERS 1 +. \} +. rr #ENDNOTES +.END +\# +\# Macros common to endnotes, bibliography, and toc +\# ------------------------------------------------ +\# +.MAC SETUP_BIB_EN END +. if '\\$0'SETUP_BIBLIOGRAPHY' .ds EN-OR-BIB BIB +. if '\\$0'SETUP_ENDNOTES' .ds EN-OR-BIB EN +. nr #HEADER_STATE \\n[#HEADERS_ON] +. ds $RESTORE_PAGENUM_STYLE \\*[$PAGENUM_STYLE] +. if \\n[#LINENUMBERS]=1 \{\ +. NUMBER_LINES OFF +. nr #LINENUMBERS 2 +. \} +. if \\n[#HEADERS_ON]=1 \ +. if !\\n[#\\*[EN-OR-BIB]_ALLOWS_HEADERS_ALL] .HEADERS OFF +. if \\n[#HEADER_STATE]=1 \{\ +. ie \\n[#\\*[EN-OR-BIB]_HDRFTR_CENTER]=1 . +. el .rm $HDRFTR_CENTER +. \} +. ie !\\n[#SUSPEND_PAGINATION] \{\ +. if \\n[#PAGINATE]=1 \{\ +. if \\n[#PAGE_NUM_V_POS]=1 \{\ +. PAGENUM_STYLE \\*[$\\*[EN-OR-BIB]_PN_STYLE] +. if \\n[#\\*[EN-OR-BIB]_FIRST_PN] .PAGENUMBER \\n[#\\*[EN-OR-BIB]_FIRST_PN]-1 +. if r #\\*[EN-OR-BIB]_NO_FIRST_PN .nr #PAGINATE 0 +. \} +. \} +. \} +. el \{\ +. ie \\n[#PAGE_NUM_V_POS]=2 .nr #PAGINATE 1 +. el .nr #PAGINATE 0 +. \} +. if \\n[#FOOTERS_ON]=1 \{\ +. if !'\\*[$HDRFTR_CENTER_OLD]'' \ +. ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD] +. \} +. NEWPAGE +. if \\n[#FOOTERS_ON]=1 \{\ +. ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_NEW] +. rm $HDRFTR_CENTER_OLD +. rm $HDRFTR_CENTER_NEW +. \} +. ie !\\n[#SUSPEND_PAGINATION] \{\ +. if \\n[#PAGE_NUM_V_POS]=1 \{\ +. if r #\\*[EN-OR-BIB]_NO_FIRST_PN \ +. if \\n[#PAGINATION_STATE]=1 .nr #PAGINATE 1 +. \} +. \} +. el \ +. if \\n[#PAGE_NUM_V_POS]=2 .nr #PAGINATE 0 +. rr #PAGINATION_STATE +. PAGENUM_STYLE \\*[$\\*[EN-OR-BIB]_PN_STYLE] +. if \\n[#\\*[EN-OR-BIB]_FIRST_PN] .PAGENUMBER \\n[#\\*[EN-OR-BIB]_FIRST_PN] +. if \\n[#HEADER_STATE]=1 \ +. if \\n[#\\*[EN-OR-BIB]_ALLOWS_HEADERS] .HEADERS +.\" Collect endnotes title string for TOC +. nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ] +. af #TOC_ENTRY_PN \\g[#PAGENUMBER] +. ds $TOC_TITLE_ITEM \\*[$\\*[EN-OR-BIB]_STRING]\| +. PDF_BOOKMARK 1 \\*[$\\*[EN-OR-BIB]_STRING] +. TITLE_TO_TOC +.\" End collection of endnotes title string for TOC +.\" Process endnotes +. if \\n[#PRINT_STYLE]=1 .vs \\n[#\\*[EN-OR-BIB]_LEAD]u +. if \\n[#PRINT_STYLE]=2 \{\ +. if \\n[#\\*[EN-OR-BIB]_NO_COLS] \{\ +. if \\n[#COLUMNS] .nr #COLUMNS_WERE_ON 1 +. nr #COLUMNS 0 +. \} +. nr #RESTORE_DOC_LEAD \\n[#DOC_LEAD] +. ie \\n[#ADJ_\\*[EN-OR-BIB]_LEAD] .nr #DOC_LEAD \\n[#\\*[EN-OR-BIB]_LEAD] +. el .DOC_LEAD \\n[#\\*[EN-OR-BIB]_LEAD]u +. \} +. vpt 0 +. RESTORE_SPACE +. ie r#\\*[EN-OR-BIB]_STRING_V_POS .sp |\\n[#\\*[EN-OR-BIB]_STRING_V_POS]u-1v +. el .sp |\\n[#T_MARGIN]u-\\n[#\\*[EN-OR-BIB]_LEAD]u +. vpt +. mk ec +. if \\n[#SLANT_ON] \{\ +\*[SLANTX]\c +. \} +. sp +. if !'\\*[$\\*[EN-OR-BIB]_STRING]'' \{\ +. if \\n[#PRINT_STYLE]=1 \{\ +. TYPEWRITER +. vs \\n[#\\*[EN-OR-BIB]_LEAD]u +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. LL \\n[#DOC_L_LENGTH]u +. ta \\n[.l]u +. if \\n[#COLUMNS] \{\ +. ie \\n[#\\*[EN-OR-BIB]_NO_COLS] .LL \\n[#DOC_L_LENGTH]u +. el .LL \\n[#COL_L_LENGTH]u +. ta \\n[.l]u +. \} +. FAMILY \\*[$\\*[EN-OR-BIB]_STRING_FAM] +. FT \\*[$\\*[EN-OR-BIB]_STRING_FT] +. ps \\n[#\\*[EN-OR-BIB]_PS]u\\*[$\\*[EN-OR-BIB]_STRING_SIZE_CHANGE] +. vs \\n[#\\*[EN-OR-BIB]_LEAD]u +. \} +. substring $\\*[EN-OR-BIB]_STRING_QUAD 0 0 +. if '\\*[$\\*[EN-OR-BIB]_STRING_QUAD]'L' .LEFT +. if '\\*[$\\*[EN-OR-BIB]_STRING_QUAD]'C' .CENTER +. if '\\*[$\\*[EN-OR-BIB]_STRING_QUAD]'R' .RIGHT +. EOL +. if \\n[#\\*[EN-OR-BIB]_STRING_COLOR]=1 .COLOR \\*[$\\*[EN-OR-BIB]_STRING_COLOR] +. if \\n[#\\*[EN-OR-BIB]_STRING_CAPS] .CAPS +. if \\n[#\\*[EN-OR-BIB]_STRING_SMALLCAPS] .SMALLCAPS +. ie \\n[#\\*[EN-OR-BIB]_STRING_UNDERLINE] \{\ +. if \\n[#PRINT_STYLE]=2 .ds $TITLE_TYPE \\*[EN-OR-BIB]_STRING +. ie \\n[#PRINT_STYLE]=1 \ +. UNDERSCORE2 3p 2p "\\*[$\\*[EN-OR-BIB]_STRING]" +. el \{\ +. ie \\n[#\\*[EN-OR-BIB]_STRING_UNDERLINE]=2 \ +. UNDERSCORE2 \\*[$\\*[EN-OR-BIB]_UNDERLINE_GAP] \\*[$\\*[EN-OR-BIB]_RULE_GAP] "\\*[$\\*[EN-OR-BIB]_STRING]" +. el .UNDERSCORE "\\*[$\\*[EN-OR-BIB]_STRING]" +. \} +. \} +. el .PRINT "\\*[$\\*[EN-OR-BIB]_STRING] +. \} +. SMALLCAPS OFF +. if \\n[#\\*[EN-OR-BIB]_STRING_COLOR]=1 .gcolor +. CAPS OFF +. FAMILY \\*[$\\*[EN-OR-BIB]_FAMILY] +. FT \\*[$\\*[EN-OR-BIB]_FT] +. ps -\\*[$\\*[EN-OR-BIB]_STRING_SIZE_CHANGE] +. ie \\n[#PRINT_STYLE]=1 \{\ +. ie \\n[#SINGLE_SPACE]=1 .sp +. el \{\ +. ie \\n[#\\*[EN-OR-BIB]_SINGLESPACE]=1 .sp +. el . +. \} +. \} +. el \{\ +. ie '\\*[EN-OR-BIB]'BIB' .sp 2 +. el .sp +. \} +. SHIM +. QUAD \\*[$\\*[EN-OR-BIB]_QUAD] +.END +. +.ALIAS SETUP_BIBLIOGRAPHY SETUP_BIB_EN +.ALIAS SETUP_ENDNOTES SETUP_BIB_EN +\# +\# ENDNOTES, BIBLIOGRAPHY and TOC LEADING +\# -------------------------------------- +\# *Argument: +\# <leading> [ ADJUST ] +\# *Function: +\# Depending on the name by which it's called, creates or modifies +\# register #<type>_LEAD, where <type> is BIB, EN, or TOC. Creates or removes +\# register #ADJ_<type>_LEAD. Stores arguments in strings if BIB, +\# EN, or TOC leading are set before START. +\# *Notes: +\# Default is same as doc lead for TYPESET, adjusted; 24 for TYPEWRITE. +\# +.MAC _LEAD END +. if '\\$0'BIBLIOGRAPHY_LEAD' .ds $SECTION BIB +. if '\\$0'ENDNOTE_LEAD' .ds $SECTION EN +. if '\\$0'TOC_LEAD' .ds $SECTION TOC +. rr #ADJ_\\*[$SECTION]_LEAD +. ds $\\*[$SECTION]_LEAD \\$1 +. rm $ADJUST_\\*[$SECTION]_LEAD +. if '\\$2'ADJUST' \{\ +. nr #ADJ_\\*[$SECTION]_LEAD 1 +. ds $ADJUST_\\*[$SECTION]_LEAD ADJUST +. \} +. if !\\n[#OK_PROCESS_LEAD] .return +. nr #\\*[$SECTION]_LEAD (p;\\$1) +.END +. +.ALIAS BIBLIOGRAPHY_LEAD _LEAD +.ALIAS ENDNOTE_LEAD _LEAD +.ALIAS TOC_LEAD _LEAD +\# +\# ==================================================================== +\# +\# +++BIBLIOGRAPHY+++ +\# +\# Mom treats bibliographies and endnotes very similarly. The chief +\# difference is that endnotes are collected and formatted inside a +\# diversion, while bibliographies are built "by hand." ENDNOTES sets +\# up the endnotes page and outputs the formatted diversion. +\# BIBLIOGRAPHY sets up the bibliography page, then awaits refer +\# commands. +\# +\# All of the bibliography control macros have their exact +\# counterparts in the endnotes control macros. See, therefore, +\# Arguments, Functions, and Notes in the Endnotes section. +\# +\# Bibliography control macros +\# +.MAC BIBLIOGRAPHY_PT_SIZE END +. nr #BIB_PS (p;\\$1) +.END +\# +.MAC BIBLIOGRAPHY_HDRFTR_CENTER END +. ie '\\$1'' .nr #BIB_HDRFTR_CENTER 1 +. el .rr #BIB_HDRFTR_CENTER +.END +\# +.MAC BIBLIOGRAPHY_STRING END +. ds $BIB_STRING \\$1 +.END +\# +.MAC BIBLIOGRAPHY_STRING_ADVANCE END +. nr #BIB_STRING_V_POS (u;\\$1) +.END +\# +.MAC BIBLIOGRAPHY_STRING_V_POS END +. nr #BIB_STRING_V_POS (u;\\$1) +.END +. +.ALIAS BIBLIOGRAPHY_HEADER_V_POS BIBLIOGRAPHY_STRING_V_POS +\# +.MAC BIBLIOGRAPHY_NO_COLUMNS END +. ie '\\$1'' .nr #BIB_NO_COLS 1 +. el .rr #BIB_NO_COLS +.END +\# +.MAC BIBLIOGRAPHY_NO_FIRST_PAGENUM END +. ie '\\$1'' .nr #BIB_NO_FIRST_PN 1 +. el .rr #BIB_NO_FIRST_PN +.END +\# +.MAC BIBLIOGRAPHY_ALLOWS_HEADERS END +. ie '\\$1'' .nr #BIB_ALLOWS_HEADERS 1 +. el \{\ +. ie '\\$1'ALL' \{\ +. nr #BIB_ALLOWS_HEADERS 1 +. nr #BIB_ALLOWS_HEADERS_ALL 1 +. \} +. el \{\ +. rr #BIB_ALLOWS_HEADERS +. rr #BIB_ALLOWS_HEADERS_ALL +. \} +. \} +.END +\# +.MAC BIBLIOGRAPHY_PAGENUM_STYLE END +. ds $BIB_PN_STYLE \\$1 +.END +\# +.MAC BIBLIOGRAPHY_FIRST_PAGENUMBER END +. nr #BIB_FIRST_PN \\$1 +.END +\# +.MAC SINGLESPACE_BIBLIOGRAPHY END +. if \\n[#PRINT_STYLE]=1 \{\ +. ie \\n[#SINGLE_SPACE] \{\ +. nr #BIB_SINGLESPACE 1 +. rr #IGNORE +. if \\n[#OK_PROCESS_LEAD] \{\ +. BIBLIOGRAPHY_LEAD 12 ADJUST +. nr #IGNORE 1 +. \} +. \} +. el \{\ +. ie '\\$1'' \{\ +. nr #BIB_SINGLESPACE 1 +. rr #IGNORE +. if \\n[#OK_PROCESS_LEAD] \{\ +. BIBLIOGRAPHY_LEAD 12 ADJUST +. nr #IGNORE 1 +. \} +. \} +. el \{\ +. rr #BIB_SINGLESPACE +. rr #IGNORE +. if \\n[#OK_PROCESS_LEAD] \{\ +. BIBLIOGRAPHY_LEAD 24 ADJUST +. nr #IGNORE 1 +. \} +. \} +. \} +. \} +.END +\# +\# Style for outputting collected bibliographic references +\# ------------------------------------------------------- +\# *Argument: +\# LIST | PLAIN [ <list separator> ] [ <list prefix> ] +\# *Function: +\# Sets #BIB_LIST to 1 for numbered list style, 0 for plain output +\# *Notes: +\# Technically, user is supposed to enter PLAIN if s/he wants an +\# unnumbered bibliography, but the el clause says "any arg but +\# LIST means unnumbered." Effectively, any arg but LIST produces +\# a "plain" bibliographic list. +\# +\# The 2nd and 3rd args have the same options as the 2nd and 3rd +\# args to LIST. +\# +.MAC BIBLIOGRAPHY_TYPE END +. ie '\\$1'LIST' \{\ +. nr #BIB_LIST 1 +. ie '\\$2'' \ +. if '\\*[$BIB_LIST_SEPARATOR]'' .ds $BIB_LIST_SEPARATOR . +. el .ds $BIB_LIST_SEPARATOR \\$2 +. ie '\\$3'' .ds $BIB_LIST_PREFIX +. el .ds $BIB_LIST_PREFIX \\$3 +. \} +. el .nr #BIB_LIST 0 +.END +\# +\# Spacing between items in bibliographies +\# --------------------------------------- +\# *Argument: +\# <amount of space> +\# *Function: +\# Gets value for $BIB_SPACE. +\# *Notes: +\# Requires a unit of measure. +\# +.MAC BIBLIOGRAPHY_SPACING END +. ds $BIB_SPACE \\$1 +.END +\# +\# Bibliography (user space macro) +\# ------------------------------- +\# *Function: +\# Sets up a new page, with title, ready to accept the output +\# of refer's $LIST$ or .R1 bibliography .R2 +\# *Notes: +\# Bibliography pages are set up almost identically to endnotes pages. +\# +.MAC BIBLIOGRAPHY END +. if \\n[defer] .NEWPAGE +. ie '\\$1'' \{\ +. rr #FN_REF +. rr #EN_REF +. nr #BIBLIOGRAPHY 1 +. nr #BIB_FIRST_PAGE 1 +\#. nr #SKIP_FOOTER +1 +. SETUP_BIBLIOGRAPHY +\#. nr #SKIP_FOOTER -1 +. if \\n[#PRINT_STYLE]=1 \{\ +. ie \\n[#SINGLE_SPACE]=1 .vs \\n[#BIB_LEAD]u +. el \{\ +. ie \\n[#BIB_SINGLESPACE]=1 .vs \\n[#BIB_LEAD]u +. el .vs \\n[#BIB_LEAD]u +. \} +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. ie \\n[#ADJ_BIB_LEAD] \ +. nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD] +. el .DOC_LEAD \\n[#RESTORE_DOC_LEAD]u +. rr #RESTORE_DOC_LEAD +. \} +. if \\n[#COLUMNS_WERE_ON] .nr #COLUMNS 1 +. if \\n[#HEADER_STATE]=1 .HEADERS +. if \\n[#LINENUMBERS]=2 \{\ +. NUMBER_LINES RESUME +. nr #LINENUMBERS 1 +. \} +. di BIB +. \} +. el \{\ +. br +. di +.\" Part of workaround for refer spitting out a blank page if the +.\" last ref falls on the bottom line. +. nr num*refs \\n[ref*num*first-pass] +. nf +. chop BIB +. BIB +. \} +. rr #BIBLIOGRAPHY +.END +\# +\# ==================================================================== +\# +\# +++TABLE OF CONTENTS+++ +\# +\# Strings to allocate space for leaders and entry page numbers +\# +.ds $TOC_PN \\*[ST102]\F[\\*[$TOC_PN_FAM]]\f[\\*[$TOC_PN_FT]]\ +\s[\\n[#TOC_PS]u]^\\*[ST102X]\\*[ST103]\s[\\*[$TOC_PN_SIZE_CHANGE]]\ +\h'.2n'\h'\w'0'u*\\n[#TOC_PN_PADDING]u'\\*[ST103X] +\# +.ds $TOC_PN_TYPEWRITE \\*[ST102]^\\*[ST102X]\\*[ST103]\ +\h'\w'0'u*\\n[#TOC_PN_PADDING]u'\\*[ST103X] +\# +\# Macro to remove titles from the TOC. +\# Primarily to remove the copyright page from the TOC. +\# +.MAC NO_TOC_ENTRY END +. nr #NO_TOC_ENTRY 1 +.END +\# +\# USER-INSERTED HEADING IN TOC +\# ---------------------------- +\# *Arguments: +\# <text> +\# *Function: +\# Inserts a single line of non-pagenumbered text into the TOC. +\# +.MAC TOC_HEADING END +. ds $TOC_HEADING \\$1 +.END +\# +\# TOC collector +\# +.MAC TO_TOC END +. if !'\\n[.ev]'TOC_EV' .ev TOC_EV +. nr #TOC_CH_NUM_INDENT \w'\\*[$TOC_CH_NUM]' +. da TOC_ENTRIES +\!. ie \\\\n[#SKIP_ENTRY]=1 \{\ +. rr #SKIP_ENTRY +\!. \} +\!. el \{\ +. TQ +. ie \\n[#PRINT_STYLE]=1 \{\ +\!. fam \\*[$TYPEWRITER_FAM] +\!. ft R +\!. ps \\*[$TYPEWRITER_PS] +. ds _TYPEWRITE _TYPEWRITE +. \} +. el \{\ +. ie '\\$0'HD_TO_TOC' \{\ +\!. ps \\n[#TOC_PS]u\\*[$TOC_HEAD_\\n[#LEVEL]_SIZE] +. \} +. el \{\ +\!. FAMILY \\*[$TOC_TITLE_FAM] +\!. FT \\*[$TOC_TITLE_FT] +\!. ps \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE] +. \} +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. rm _TYPEWRITE +. if \\n[#SPACE_TOC_ITEMS] \{\ +. if \\n[#POST_TOP]=1 \{\ +. ie !\\n[#LEVEL]=\\n[#LAST_LEVEL] \{\ +. ie \\n[#LEVEL]>\\n[#LAST_LEVEL] \!.sp .2v +. el \!.sp .4v +. \} +. el \{\ +. if \\n[#COLLATED_DOC] \ +. if '\\$0'TITLE_TO_TOC' \!.sp .4v +. \} +. \} +. \} +. \} +\!. vpt 0 +\!. PAD_MARKER ^ +. if !'\\$0'HD_TO_TOC' \{\ +\!. if \\n[#TOC_TITLE_CAPS]=1 .CAPS +. \} +. if '\\$0'HD_TO_TOC' \{\ +. nr #POST_TOP 1 +\!. if \\n[#TOC_HEAD_\\n[#LEVEL]_CAPS]=1 .CAPS +. \} +. ie '\\$0'HD_TO_TOC' \{\ +. if \\n[#PRINT_STYLE]=1 \{\ +. ds $TOC_HEAD_\\n[#LEVEL]_FAM] \\*[$TYPEWRITER_FAM] +. ds $TOC_HEAD_\\n[#LEVEL]_FT] R +. \} +\!. PAD \ +"\f[\\*[$TOC_HEAD_\\n[#LEVEL]_FAM]\ +\\*[$TOC_HEAD_\\n[#LEVEL]_FT]]\ +\h'\\\\n[#TOC_INDENT_ADJ]u'\h'\\n[#TOC_HEAD_\\n[#LEVEL]_INDENT]u'\ +\\*[$TOC_HD_NUM]\\*[$TOC_HEAD_\\n[#LEVEL]_ITEM]\\*[$TOC_PN\\*[_TYPEWRITE]]" \ +"\\*[PDFBOOKMARK.NAME]" +. \} +. el \{\ +. ie '\\$0'HEADING_TO_TOC' \{\ +. if \\n[#PRINT_STYLE]=1 \{\ +. ds $TOC_TITLE_FAM \\*[$TYPEWRITER_FAM] +. ds $TOC_TITLE_FT R +. \} +. if !'\\*[$TOC_HEADING_QUAD]'' \{\ +. substring $TOC_HEADING_QUAD 0 0 +. if '\\*[$TOC_HEADING_QUAD]'L' \!.LEFT +. if '\\*[$TOC_HEADING_QUAD]'C' \!.CENTER +. if '\\*[$TOC_HEADING_QUAD]'R' \!.RIGHT +. \} +\!. vpt +\!. ne \\*[$SPACE_ABOVE]+\\*[$SPACE_BENEATH]+2v +\!. vpt 0 +. if \\n[#PRINT_STYLE]=2 \ +. if \\n[#POST_TOP] \!.sp \\*[$SPACE_ABOVE] +. ie \\n[#PRINT_STYLE]=1 \!.nop \\*[$TOC_HEADING] +. el \{\ +\!. nop \ +\f[\\*[$TOC_HEADING_FAM]\\*[$TOC_HEADING_FT]]\ +\s[\\*[$TOC_HEADING_SIZE]]\ +\m[\\*[$TOC_HEADING_COLOR]]\ +\\*[$TOC_HEADING]\ +\m[]\s[0]\f[P] +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. ie \\n[#SPACE_TOC_ITEMS] \ +. if \\n[#POST_TOP]=0 \!.sp \\*[$SPACE_BENEATH] +. el \!.sp \\*[$SPACE_BENEATH] +. \} +\!. vpt +. da +. ev +. return +. \} +. el \{\ +\!. PAD \ +"\f[\\*[$TOC_TITLE_FAM]\\*[$TOC_TITLE_FT]]\ +\h'\\n[#TOC_TITLE_INDENT]u'\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN\\*[_TYPEWRITE]]" \ +"\\*[PDFBOOKMARK.NAME]" +. \} +. \} +. ie '\\$0'HD_TO_TOC' \ +\!. if \\n[#TOC_HEAD_\\n[#LEVEL]_CAPS]=1 .CAPS OFF +. el \ +\!. if \\n[#TOC_TITLE_CAPS]=1 .CAPS OFF +\!. PAD_MARKER # +\!. EOL +\!. ST 102 L +\!. ST 103 R QUAD +. if \\n[#PRINT_STYLE]=2 \{\ +\!. FAMILY \\*[$TOC_PN_FAM] +\!. FT \\*[$TOC_PN_FT] +\!. ps \\n[#TOC_PS]u +. \} +\!. TAB 102 +\!. PRINT \fR\\*[LEADER]\f[] +\!. TN +. if \\n[#PRINT_STYLE]=2 \{\ +\!. ps \\*[$TOC_PN_SIZE_CHANGE] +. \} +\!. PRINT \\n[#TOC_ENTRY_PN] +\!. \} +. da +. ev +.END +. +.ALIAS HD_TO_TOC TO_TOC +.ALIAS TITLE_TO_TOC TO_TOC +.ALIAS HEADING_TO_TOC TO_TOC +\# +\# Control macros for toc +\# ---------------------- +\# +\# TOC TITLE STYLE +\# --------------- +\# *Arguments: +\# FAMILY <family> +\# FONT <font> +\# SIZE <+|-n> +\# COLOR <color> +\# CAPS +\# INDENT +\# *Function: +\# Assigns complete style parameters to TITLEs (doc titles, +\# chapter titles, etc) in the TOC. +\# *Notes: +\# TITLEs are not headings, therefore they require their own style +\# macro. Otherwise, the same as TOC_ENTRY_STYLE. +\# +.MAC TOC_TITLE_STYLE END +. nr #ARG_NUM 0 1 +. nr #ATTRIB \\n[#NUM_ARGS] +. while \\n+[#ARG_NUM]<=\\n[#ATTRIB] \{\ +. if '\\$1'FAMILY' \{\ +. shift +. ds $TOC_TITLE_FAM \\$1 +. shift +. \} +. if '\\$1'FONT' \{\ +. shift +. ds $TOC_TITLE_FT \\$1 +. shift +. \} +. if '\\$1'SIZE' \{\ +. shift +. ds $TOC_TITLE_SIZE \\$1 +. shift +. \} +. if '\\$1'CAPS' \{\ +. nr #TOC_TITLE_CAPS 1 +. shift +. \} +. if '\\$1'NO_CAPS' \{\ +. rr #TOC_TITLE_CAPS +. shift +. \} +. if '\\$1'SMALLCAPS' \{\ +. nr #TOC_TITLE_SMALLCAPS 1 +. shift +. \} +. if '\\$1'NO_SMALLCAPS' \{\ +. rr #TOC_TITLE_SMALLCAPS +. shift +. \} +. if '\\$1'INDENT' \{\ +. shift +. nr #TOC_TITLE_INDENT \\$1 +. shift +. \} +. \} +.END +\# +\# TOC HEADER STRING +\# ----------------- +\# *Argument: +\# <string for "doc header" of first toc page> +\# *Function: +\# Creates or modifies string $TOC_HEADER_STRING +\# *Notes: +\# Default is "Contents". +\# +.MAC TOC_HEADER_STRING END +. ds $TOC_HEADER_STRING \\$1 +.END +\# +\# TOC HEADER CAPS and SMALLCAPS +\# ----------------------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Turns capitalization or smallcaps style of the toc title string +\# on or off. +\# *Notes: +\# Users may want the toc title string to be in +\# caps, but the page header to be in lower case. If the +\# argument to TOC_HEADER_STRING is in lower case and +\# TOC_HEADER_CAPS is turned on, this is exactly what will +\# happen. Ditto for SMALLCAPS. +\# +.MAC TOC_HEADER_CAPS END +. ie '\\$1'' .nr #TOC_STRING_CAPS 1 +. el .nr #TOC_STRING_CAPS 0 +.END +. +.MAC TOC_HEADER_SMALLCAPS END +. ie '\\$1'' .nr #TOC_STRING_SMALLCAPS 1 +. el .nr #TOC_STRING_SMALLCAPS 0 +.END +. +\# +\# TOC VERTICAL PLACEMENT +\# ---------------------- +\# *Argument: +\# <distance from page top> +\# *Function: +\# Creates register #TOC_HEADER_V_POS. +\# *Notes: +\# Default is same as normal docheader position. +\# +.MAC TOC_HEADER_V_POS END +. nr #TOC_HEADER_V_POS (u;\\$1) +.END +\# +\# +\# TOC POINT SIZE +\# -------------- +\# *Argument: +\# <base point size for toc pages> +\# *Function: +\# Creates or modifies register #TOC_PS. +\# *Notes: +\# This size control macro differs from other size control macros +\# in that it sets an absolute point size, not a relative one. +\# See notes for ENDNOTE_PT_SIZE for explanation. +\# +\# No unit of measure required (points assumed). Default is 12.5 +\# for TYPESET. +\# +.MAC TOC_PT_SIZE END +. nr #TOC_PS (p;\\$1) +.END +\# +\# TOC ENTRIES PAGE NUMBERS PADDING +\# -------------------------------- +\# *Argument: +\# <number of placeholders for toc entries page numbers> +\# *Function: +\# Creates or modifies register #TOC_PN_PADDING. +\# *Notes: +\# "Placeholders" is the maximum number of digits in a page +\# number numeral. +\# +\# Default is 3. +\# +.MAC TOC_PADDING END +. nr #TOC_PN_PADDING \\$1 +.END +\# +\# PAGINATE TOC +\# ------------ +\# *Argument: +\# <none> | <anything> +\# *Function: +\# Creates or removes register #PAGINATE_TOC. +\# *Notes: +\# Default is to paginate toc. +\# +.MAC PAGINATE_TOC END +. ie '\\$1'' .nr #PAGINATE_TOC 1 +. el .nr #PAGINATE_TOC 0 +.END +\# +.MAC TOC_FIRST_PAGENUM END +. nr #TOC_START_PAGENUM \\$1 +.END +\# +\# TOC PAGES PAGE-NUMBERING STYLE +\# ------------------------------ +\# *Argument: +\# DIGIT | ROMAN | roman | ALPHA | alpha +\# *Function: +\# Creates or modifies string $TOC_PN_STYLE +\# *Notes: +\# Page numbering style for page numbers that appear in the +\# headers/footers of toc pages. See notes for PAGENUM_STYLE. +\# +\# Default is roman. +\# +.MAC TOC_PAGENUM_STYLE END +. ds $TOC_PN_STYLE \\$1 +.END +\# +\# TOC RECTO_VERSO SWITCH +\# ---------------------- +\# *Argument: +\# <none> | <anything> +\# *Function: +\# Creates or removes register #TOC_RV_SWITCH +\# *Notes: +\# Allows switching of L/R margins if a doc is recto/verso and +\# the first toc page happens to fall the wrong way +\# +.MAC TOC_RV_SWITCH END +. ie '\\$1'' .nr #TOC_RV_SWITCH 1 +. el .rr #TOC_RV_SWITCH +.END +\# +\# TOC ENTRY SPACING +\# ----------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Toggles whether a small amount of space is inserted between TOC +\# entries for greater legibility. +\# +.MAC SPACE_TOC_ITEMS END +. ie !'\\$1'' .rr #SPACE_TOC_ITEMS +. el .nr #SPACE_TOC_ITEMS 1 +.END +\# +\# NUMBERING OF TOC CHAPTER/SECTION ENTRIES +\# ---------------------------------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Determines whether chapter numbers are prefixed to title +\# entries in the TOC (title here means chapter/chapter-title +\# or, if the doctype is DEFAULT or NAMED, the section title. +\# *Notes: +\# Aliased as TOC_PREFIX_SECTION_NUMBER. +\# +.MAC TOC_PREFIX_CHAPTER_NUMBER END +. ie '\\$1'' .nr #TOC_PREFIX_CH_NUM 1 +. el .rr #TOC_PREFIX_CH_NUM +.END +. +.ALIAS TOC_PREFIX_SECTION_NUMBER TOC_PREFIX_CHAPTER_NUMBER +\# +\# PADDING OF TOC CHAPTER/SECTION NUMBERS +\# -------------------------------------- +\# *Arguments: +\# <amount of padding> | <anything> +\# *Function: +\# Insert figure spaces before toc chapter numbers so they +\# right align. +\# *Notes: +\# Aliased as PAD_TOC_SECTION_NUMBERS. +\# +.MAC PAD_TOC_CHAPTER_NUMBERS END +. ie !'\\$1'' .nr #PAD_TOC_CH_NUM \\$1 +. el .rr #PAD_TOC_CH_NUM +.END +. +.ALIAS PAD_TOC_SECTION_NUMBERS PAD_TOC_CHAPTER_NUMBERS +\# +\# NUMBERING OF TOC HEAD ENTRIES +\# ----------------------------- +\# *Arguments: +\# FULL | TRUNCATE | NONE +\# *Function: +\# Determines how, or whether, to prepend heading numbers to TOC +\# entries. +\# *Notes: +\# FULL means the complete numbering string (default). +\# +\# TRUNCATE means prepend a single digit sufficient to identify +\# an entry's place in the numbering scheme with reference to the +\# level above it. Thus, if a HEADING 1 is the second HEADING 1 +\# and therefore numbered "2.", a HEADING 2 beneath it (in the TOC) +\# will have only "1." prepended to the entry; TOC indenting makes it +\# evident under which level the HEADING 2 belongs. +\# +\# Note that TRUNCATE also removes chapter numbers, if +\# PREFIX_CHAPTER_NUMBER is on. +\# +.MAC TOC_ENTRY_NUMBERS END +. if '\\$1'TRUNCATE' .nr #TRUNC_TOC_HD_NUM 1 +. if '\\$1'FULL' .nr #TRUNC_TOC_HD_NUM 0 +. if '\\$1'NONE' .nr #TOC_NO_HD_NUM 1 +.END +\# +\# User defined TITLE entry string +\# +.MAC TOC_TITLE_ENTRY END +. nr #USER_SET_TITLE_ITEM 1 +. ds $USER_SET_TITLE_ITEM \\$1 +.END +\# +\# APPEND AUTHOR(S) TO TOC DOC TITLE ENTRIES +\# ----------------------------------------- +\# *Argument: +\# <none> | <name(s) of author(s) as they should appear in toc doc title entries> +\# *Function: +\# Creates register #TOC_AUTHORS (to tell TOC to append authors +\# to toc doc title entries). Optionally creates string +\# $TOC_AUTHORS. +\# *Notes: +\# Normally, TOC does not append the author(s) to a toc doc title +\# entry. This special macro instructs TOC to do so. +\# +\# If user has multiple authors for each doc when collating, +\# TOC_APPENDS_AUTHOR "<string>" must be inserted somewhere between +\# COLLATE and START in each doc. Otherwise, mom prints only the +\# first author given to AUTHOR. +\# +.MAC TOC_APPENDS_AUTHOR END +. nr #TOC_AUTHORS 1 +. if !'\\$1'' .ds $TOC_AUTHORS \\$1 +.END +\# +\# TABLE OF CONTENTS PAGE SETUP +\# ---------------------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Some changes to the TOC layout (e.g. margins and page headers) +\# are not covered by the TOC and endnotes control macros. This +\# macro permits access to any and all page setup macros not so +\# covered. +\# *Notes +\# Wraps a diversion that ends when the macro is invoked with an +\# argument. The contained formatting macros must be preceded by +\# '\!'. The diversion is output before START in TOC. +\# +.MAC TOC_PAGE_SETTINGS END +. nr #TOC_PAGE_PARAMS 1 +. ie '\\$1'' \ +. di TOC_PAGE_PARAMS +. el .di +.END +\# +\# TABLE OF CONTENTS +\# ----------------- +\# *Arguments: +\# none +\# *Function: +\# Takes care of the administrivia of setting up the TOC as if +\# it's a collated doc, then outputs the formatted TOC_ENTRIES +\# diversion. +\# +.MAC TOC END +. ie (\\n[@TOP]=0)&(\\n[.t]<=\\n[.v]) \ +' br \" When last line of text is on or near b-margin. +. el .br \" All other cases +. if dPDF.EXPORT \ +. if \\n[#FLEX_ACTIVE] \ +. if !\\n[#NO_FLEX] \ +. tm .ds pre-toc-\\n%@\\n[#COL_NUM] 1 +. if \\n[#TOC_RV_SWITCH]=1 .nr #TOC_RV_SWITCH 2 +. char \[leader] " . +. LEADER_CHARACTER \[leader] +. if !\\n[#TOC_HEAD_1_INDENT] \ +. nr #TOC_INDENT_ADJ 1.5m +. if \\n[#TOC_PREFIX_CH_NUM] \ +. nr #TOC_INDENT_ADJ \\n[#TOC_CH_NUM_INDENT] +. if !\\n[#DOC_TYPE]=2 \{\ +. if !'\\$1'INCLUDE_TITLE' \{\ +. if r #LEVEL .nr #SKIP_ENTRY 1 +. nr #TOC_INDENT_ADJ 0 +. \} +. \} +. nr #TOC 1 +. nr TOC.RELOCATE 0 +. if \\n[#LINENUMBERS]=1 \{\ +. NUMBER_LINES OFF +. nr #LINENUMBERS 2 +. \} +. if !r #PAGINATE_TOC .PAGINATE_TOC +. nr #TOC_FIRST_PAGE 1 +. if \\n[#FINIS] \{\ +. if \\n[#FOOTERS_WERE_ON] \ +. FOOTERS \" Have to turn FOOTERS on for next bit to work, so we can't skip this step +. \} +. if \\n[#FOOTERS_ON]=1 \{\ +. if !'\\*[$HDRFTR_CENTER_OLD]'' \ +. ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD] +. ie \\n[#PAGINATE_TOC]=1 .PAGINATE +. el .PAGINATION OFF +. \} +. if \\n[#FOOTERS_WERE_ON] .FOOTERS OFF \" But have to turn FOOTERS off again so they don't print when FINIS was called +. rr #COLUMNS +. COLLATE +. if \\n[#PRINT_STYLE]=1 \{\ +. rr #IGNORE +. if \\n[#SINGLE_SPACE] .DOC_LEAD 24 +. DOC_LEAD_ADJUST +. TRAPS +. nr #IGNORE 1 +. \} +. if \\n[#FINIS] \{\ +. if \\n[#FOOTERS_WERE_ON] .FOOTERS \" Finally, turn footers on if they were on +. rr #FOOTERS_WERE_ON +. if \\n[#PAGINATION_WAS_ON] \{\ +. nr #PAGINATE 1 +. rr #PAGINATION_WAS_ON +. \} +. rr #FINIS +. \} +. ie \\n[#PAGINATE_TOC]=1 .PAGINATE +. el .PAGINATION OFF +. ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_NEW] +. rm $HDRFTR_CENTER_OLD +. rm $HDRFTR_CENTER_NEW +. rr #COLLATED_DOC +. if !r #TOC_START_PAGENUM .nr #TOC_START_PAGENUM 1 +. PAGENUMBER \\n[#TOC_START_PAGENUM] +. if \\n[#LINENUMBERS]=2 .nr #LINENUMBERS 3 +. L_MARGIN \\n[#DOC_L_MARGIN]u +. LL \\n[#DOC_L_LENGTH]u +. HEADER_CENTER "\\*[$TOC_HEADER_STRING] +. if \\n[#SLANT_ON] .nop \\*[SLANTX] +. PAGENUM_STYLE \\*[$TOC_PN_STYLE] +. PAGENUM_FAMILY \\*[$TOC_PN_FAM] +. if r #TOC_PAGE_PARAMS .TOC_PAGE_PARAMS +. ie \\n[#ADJ_TOC_LEAD] \{\ +. DOC_LEAD \\*[$TOC_LEAD] ADJUST +. TRAPS +. \} +. el .DOC_LEAD \\*[$TOC_LEAD] +. ie \\n[#TOC_HEADER_V_POS] \ +. DOCHEADER OFF \\n[#TOC_HEADER_V_POS]u-\\n[#DOC_LEAD]u +. el .DOCHEADER OFF \\n[#T_MARGIN]u-\\n[#DOC_LEAD]u +. if (\\n[#PRINT_STYLE]=1)&(\\n[#SINGLE_SPACE]=1) \ +. DOCHEADER OFF \\n[#T_MARGIN]u-(\\n[#DOC_LEAD]u*2u) +. START +. PDF_BOOKMARK 1 \\*[$TOC_HEADER_STRING] +. if \\n[#PRINT_STYLE]=1 .TYPEWRITER +. if \\n[#PRINT_STYLE]=2 \{\ +. FAMILY \\*[$TOC_HEADER_FAM] +. FT \\*[$TOC_HEADER_FT] +. ps \\n[#TOC_PS]u\\*[$TOC_HEADER_SIZE_CHANGE] +. if \\n[#TOC_HEADER_COLOR]=1 \ +. COLOR \\*[$TOC_HEADER_COLOR] +. \} +. QUAD \\*[$TOC_HEADER_QUAD] +. if \\n[#TOC_STRING_CAPS] .CAPS +. if \\n[#TOC_STRING_SMALLCAPS] .SMALLCAPS +. if \\n[#PRINT_STYLE]=1 \ +. UNDERSCORE 3p "\\*[$TOC_HEADER_STRING]" +. if \\n[#PRINT_STYLE]=2 \{\ +. ie \\n[#TOC_HEADER_UNDERLINE] \{\ +. ds $TITLE_TYPE TOC_HEADER +. ie \\n[#TOC_HEADER_UNDERLINE]=2 \ +. UNDERSCORE2 \\*[$TOC_UNDERLINE_GAP] \\*[$TOC_RULE_GAP] "\\*[$TOC_HEADER_STRING]" +. el .UNDERSCORE "\\*[$TOC_HEADER_STRING]" +. \} +. el .PRINT \\*[$TOC_HEADER_STRING] +. \} +. SMALLCAPS OFF +. CAPS OFF +. if \\n[#TOC_HEADER_COLOR]=1 .gcolor +. br +. sp +. SHIM_1 +. nf +. TOC_ENTRIES +. if \\n[#LINENUMBERS]=3 \{\ +. NUMBER_LINES RESUME +. nr #LINENUMBERS 1 +. nn 1 +. \} +. rr #TOC +. rr #TOC_RV_SWITCH +. pdfsync +.END +\# +\# ==================================================================== +\# +\# +++COLUMNS+++ +\# +\# COLUMNS +\# ------- +\# *Arguments: +\# <number of columns> <width of gutters> +\# *Function: +\# Creates registers associated with setting docs in columns. +\# Calculates column line lengths and offsets +\# *Notes: +\# COLUMNS, if used, s/b the last macro invoked before START. +\# +.MAC COLUMNS END +. if \\n[#IGNORE_COLUMNS]=1 .return +. nr #COLUMNS 1 +. nr #NUM_COLS \\$1 +. nr #GUTTER (\\$2) +. nr #COL_L_LENGTH \\n[#L_LENGTH]-(\\n[#GUTTER]*(\\n[#NUM_COLS]-1))/\\n[#NUM_COLS] +. nr #COL_TOTAL 0 \\n[#COL_L_LENGTH]+\\n[#GUTTER] +. nr #COL_NUM 0 1 +. while !\\n[#COL_NUM]=\\n[#NUM_COLS] \{\ +. nr #COL_\\n+[#COL_NUM]_L_MARGIN \\n[#L_MARGIN]+\\n[#COL_TOTAL] +. nr #COL_TOTAL \\n+[#COL_TOTAL] +. \} +. if \\n[#NUM_COLS]=1 \ +. if !\\n[#COLLATE]=1 .MN_INIT +. rr #COL_TOTAL +. rr #COL_NUM +.END +\# +\# MARK COL V-POSITION AFTER DOCHEADER +\# ----------------------------------- +\# *Arguments: +\# none +\# *Function: +\# Sets 1st page dc register. +\# *Notes: +\# Only required if manual spacing, positive or negative, precedes +\# start of columns on first page of doc. +\# +.MAC COL_MARK END +. mk dc +.END +\# +\# NEXT COLUMN +\# ----------- +\# *Arguments: +\# <none> +\# *Function: +\# Breaks current column and moves to next column. +\# If current column is the last on the page, breaks +\# to a new page. +\# +.MAC COL_NEXT END +. if \\n[#COLUMNS] \{\ +. nr #COL_NEXT 1 +. vpt 0 +. if !'\\$1'internal' \ +. if dPDF.EXPORT \ +. if \\n[#FLEX_ACTIVE] \ +. if !\\n[#NO_FLEX] \ +. if \\n[#COL_NUM]>1 \ +. tm .ds page-\\n%@\\n[#COL_NUM] 1 +. ie '\\$0'COL_NEXT' .br +. el \{\ +. brp +. RLD 1v +. \} +. vpt +. ie \\n[#COL_NUM]=\\n[#NUM_COLS] .NEWPAGE +. el .FOOTER +. \} +.END +\# +\# ==================================================================== +\# +\# +++LISTS+++ +\# +\# LIST +\# ---- +\# *Arguments: +\# [ BULLET | DASH | DIGIT | alpha | ALPHA | roman | ROMAN | USER ] \ +\# [ <separator> | NONE ] [ <prefix> ] [ <anything> ] +\# *Function: +\# Stores indent information in effect prior to invocation and +\# initializes a list with the supplied enumerator (and separator). +\# *Notes: +\# Default enumerator is a bullet. +\# +\# Enumerator *must* be supplied for every list that's to the +\# right of another list, every time, unless the default bullet is +\# desired. +\# +\# <anything> moves back one list level intuitively, or exits lists +\# completely if the level in which it's invoked is the first. +\# +.MAC LIST END +. br +. if r pdfbx-top 'sp -1 +. ds $1ST_LETTER \\$1 +. if !'\\*[$1ST_LETTER]'' .substring $1ST_LETTER 0 0 +. if '\\*[$1ST_LETTER]'r' .ds $1ST_LETTER R +. ie '\\*[$1ST_LETTER]'R' \{\ +. if r #ROMAN_LIST .rr #ROMAN_LIST +. if '\\$1'ROMAN' .nr #ROMAN_LIST 1 +. if '\\$1'roman' .nr #ROMAN_LIST 1 +. ds $LAST_CHAR \\$1 +. substring $LAST_CHAR -1 +. if !\B'\\*[$LAST_CHAR]' \{\ +. if !r #ROMAN_LIST \{\ +. LIST OFF +. return +. \} +. tm1 "[mom]: You must append a number to the '\\$1' argument to \\$0. +. tm1 " The number should be the total number of items in this list. +. tm1 " See the documentation. +. ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +. \} +. ds $ROMAN_WIDTH \\$1 +. substring $ROMAN_WIDTH 1 +. while !\B'\\*[$ROMAN_WIDTH]' \{\ +. substring $ROMAN_WIDTH 1 +. \} +. length #ROMAN_LENGTH \\*[$ROMAN_WIDTH] +. ds $LIST_ARG_1 \\$1 +. substring $LIST_ARG_1 0 -(\\n[#ROMAN_LENGTH]+1) +. \} +. el .ds $LIST_ARG_1 \\$1 +. if !r#DEPTH \{\ +. if \\n[#INDENT_ACTIVE] \{\ +. nr #STORED_HL_INDENT \\n[#HL_INDENT] +. nr #STORED_T_INDENT \\n[#T_INDENT] +. if \\n[#INDENT_STYLE_LEFT] \ +. nr #STORED_L_INDENT \\n[#L_INDENT] +. if \\n[#INDENT_STYLE_RIGHT] \ +. nr #STORED_R_INDENT \\n[#R_INDENT] +. if \\n[#INDENT_STYLE_BOTH] \{\ +. nr #STORED_BL_INDENT \\n[#BL_INDENT] +. nr #STORED_BR_INDENT \\n[#BR_INDENT] +. \} +. \} +. nr #CURRENT_L_LENGTH \\n[.l] +. nr #DEPTH 0 1 +. if \\n[#INDENT_ACTIVE]=1 \{\ +. if \\n[#INDENT_LEFT_ACTIVE]=1 \ +. nr #RESTORE_PREV_INDENT 1 +. if \\n[#INDENT_BOTH_ACTIVE]=1 \{\ +. ie \\n[#DOC_TYPE]=5 .IBX CLEAR +. el .IBX +. nr #ORIG_L_LENGTH \\n[.l] +. IB +. nr #RESTORE_PREV_INDENT 2 +. \} +. if \\n[#INDENT_RIGHT_ACTIVE]=1 \{\ +. ie \\n[#DOC_TYPE]=5 .IRX CLEAR +. el .IRX +. nr #ORIG_L_LENGTH \\n[.l] +. IR +. nr #RESTORE_PREV_INDENT 3 +. if \\n[#INDENT_LEFT_ACTIVE]=1 \ +. nr #RESTORE_PREV_INDENT 4 +. \} +. \} +. \} +. ds pre-list-quad \\*[$QUAD_VALUE] +. substring pre-list-quad 0 0 +. if '\\*[pre-list-quad]'C' \{\ +. if !'\\n[.z]'LIST*DIV' \{\ +. nr #PRE_LIST_QUAD \\n[.j] +. nr #LIST_CENTER 1 +. if !'\\n[.z]'LIST*DIV' .di LIST*DIV +\!. nr #IN_LIST 1 +. ad l +. \} +. \} +. if '\\*[pre-list-quad]'R' \{\ +. if !'\\n[.z]'LIST*DIV' \{\ +. nr #PRE_LIST_QUAD \\n[.j] +. nr #LIST_RIGHT 1 +. if !'\\n[.z]'LIST*DIV' .di LIST*DIV +\!. nr #IN_LIST 1 +. ad l +. \} +. \} +. ie \\n[#NUM_ARGS]=0 \{\ +. nr #ARGS_TO_LIST 1 \" So default behaves as if LIST BULLET +. ds $ENUMERATOR\\n+[#DEPTH] \[bu] +. ds $ENUMERATOR_TYPE\\n[#DEPTH] other +. ds $SEPARATOR +. ds $PREFIX +. ds $SEPARATOR\\n[#DEPTH] +. ds $PREFIX\\n[#DEPTH] +. \} +. el \{\ +. rr #ARGS_TO_LIST \" Clear this before processing arg 1. +. if '\\*[$LIST_ARG_1]'DASH' \{\ +. nr #ARGS_TO_LIST 1 +. ds $ENUMERATOR\\n+[#DEPTH] \[en] +. ds $ENUMERATOR_TYPE\\n[#DEPTH] other +. ds $SEPARATOR\\n[#DEPTH] +. ds $PREFIX\\n[#DEPTH] +. \} +. if '\\*[$LIST_ARG_1]'BULLET' \{\ +. nr #ARGS_TO_LIST 1 +. ds $ENUMERATOR\\n+[#DEPTH] \[bu] +. ds $ENUMERATOR_TYPE\\n[#DEPTH] other +. ds $SEPARATOR\\n[#DEPTH] +. ds $PREFIX\\n[#DEPTH] +. \} +. if '\\*[$LIST_ARG_1]'DIGIT' \{\ +. nr #ARGS_TO_LIST 1 +. nr #ENUMERATOR\\n+[#DEPTH] 0 1 +. ds $ENUMERATOR_TYPE\\n[#DEPTH] register +. ds $SEPARATOR\\n[#DEPTH] . +. ds $PREFIX\\n[#DEPTH] +. if \\n[#NUM_ARGS]>=2 \{\ +. ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH] +. el .ds $SEPARATOR\\n[#DEPTH] \\$2 +. if \\n[#NUM_ARGS]=3 .ds $PREFIX\\n[#DEPTH] \\$3 +. \} +. \} +. if '\\*[$LIST_ARG_1]'alpha' \{\ +. nr #ARGS_TO_LIST 1 +. nr #ENUMERATOR\\n+[#DEPTH] 0 1 +. af #ENUMERATOR\\n[#DEPTH] a +. ds $ENUMERATOR_TYPE\\n[#DEPTH] register +. ds $SEPARATOR\\n[#DEPTH] ) +. ds $PREFIX\\n[#DEPTH] +. if \\n[#NUM_ARGS]>=2 \{\ +. ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH] +. el .ds $SEPARATOR\\n[#DEPTH] \\$2 +. if \\n[#NUM_ARGS]=3 .ds $PREFIX\\n[#DEPTH] \\$3 +. \} +. \} +. if '\\*[$LIST_ARG_1]'ALPHA' \{\ +. nr #ARGS_TO_LIST 1 +. nr #ENUMERATOR\\n+[#DEPTH] 0 1 +. af #ENUMERATOR\\n[#DEPTH] A +. ds $ENUMERATOR_TYPE\\n[#DEPTH] register +. ds $SEPARATOR\\n[#DEPTH] ) +. ds $PREFIX\\n[#DEPTH] +. if \\n[#NUM_ARGS]>=2 \{\ +. ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH] +. el .ds $SEPARATOR\\n[#DEPTH] \\$2 +. if \\n[#NUM_ARGS]=3 \ +. ds $PREFIX\\n[#DEPTH] \\$3 +. \} +. \} +. if '\\*[$1ST_LETTER]'R' \{\ +. nr #ARGS_TO_LIST 1 +. nr #ENUMERATOR\\n+[#DEPTH] 0 1 +. if '\\*[$LIST_ARG_1]'roman' .af #ENUMERATOR\\n[#DEPTH] i +. if '\\*[$LIST_ARG_1]'ROMAN' .af #ENUMERATOR\\n[#DEPTH] I +. ds $ENUMERATOR_TYPE\\n[#DEPTH] roman +. ds $SEPARATOR\\n[#DEPTH] ) +. ds $PREFIX\\n[#DEPTH] +. if \\n[#NUM_ARGS]>=2 \{\ +. ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH] +. el .ds $SEPARATOR\\n[#DEPTH] \\$2 +. if \\n[#NUM_ARGS]=3 .ds $PREFIX\\n[#DEPTH] \\$3 +. \} +. \} +. if '\\*[$LIST_ARG_1]'USER' \{\ +. nr #ARGS_TO_LIST 1 +. ds $ENUMERATOR\\n+[#DEPTH] \\$2 +. ds $ENUMERATOR_TYPE\\n[#DEPTH] other +. ds $SEPARATOR\\n[#DEPTH] +. ds $PREFIX\\n[#DEPTH] +. \} +. if '\\*[$LIST_ARG_1]'VARIABLE' \{\ +. if \\n[#NUM_ARGS]<2 \{\ +. tm1 "[mom]: You must follow the \\$1 argument to \\$0 with the widest +. tm1 " enumerator to be used. See the documentation. +. ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +. \} +. nr #ARGS_TO_LIST 1 +. ds $ENUMERATOR\\n+[#DEPTH] +. ds $ENUMERATOR_TYPE\\n[#DEPTH] variable +. ds $ENUMERATOR_WIDTH\\n[#DEPTH] \w'\\$2\ ' +. ds $SEPARATOR\\n[#DEPTH] +. ds $PREFIX\\n[#DEPTH] +. \} +. if '\\*[$LIST_ARG_1]'PLAIN' \{\ +. nr #ARGS_TO_LIST 1 +. ds $ENUMERATOR\\n+[#DEPTH] +. ds $ENUMERATOR_TYPE\\n[#DEPTH] plain +. ds $SEPARATOR\\n[#DEPTH] +. ds $PREFIX\\n[#DEPTH] +. \} +. if \\n[#NUM_ARGS]=1 \{\ +. if !r#ARGS_TO_LIST \{\ +. ie \\n[#DEPTH]=1 \{\ +. ie \\n[#NEXT_DEPTH_BACK]=0 \{\ +. SET_LIST_INDENT +. if \\n[#QUIT]=1 \{\ +. QUIT_LISTS +. return +. \} +. return +. \} +. el \{\ +. QUIT_LISTS +. return +. \} +. \} +. el \{\ +. SET_LIST_INDENT +. return +. \} +. \} +. \} +. \} +. nr #TOTAL_LISTS \\n[#DEPTH] +. if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'register' \{\ +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]m\\*[$SEPARATOR\\n[#DEPTH]]\ ' +. if '\\*[$LIST_ARG_1]'ALPHA' .nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]M\\*[$SEPARATOR\\n[#DEPTH]]\ ' +. \} +. if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'roman' \ +. GET_ROMAN_INDENT +. if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'other' \ +. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$ENUMERATOR\\n[#DEPTH]]\ ' +. if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'variable' \ +. nr #LIST_INDENT\\n[#DEPTH] \\*[$ENUMERATOR_WIDTH\\n[#DEPTH]] +. ll \\n[#CURRENT_L_LENGTH]u +. ie \\n[#DEPTH]=1 \{\ +. ie \\n[#INDENT_ACTIVE]=1 \{\ +. if \\n[#INDENT_STYLE_LEFT]=1 \{\ +. if \\n[#L_INDENT_ILX] \{\ +. rr #L_INDENT +. rr #L_INDENT_ILX +. \} +. nr #L_INDENT \\n[#L_INDENT]+\\n[#LIST_INDENT\\n[#DEPTH]] +. nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]] +. nr #LIST_INDENT\\n[#DEPTH] \\n[#L_INDENT] +. \} +. if \\n[#INDENT_BOTH_ACTIVE]=1 \{\ +. nr #L_INDENT \\n[#BL_INDENT]+\\n[#LIST_INDENT\\n[#DEPTH]] +. nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]] +. nr #LIST_INDENT\\n[#DEPTH] \\n[#L_INDENT] +. \} +. if \\n[#INDENT_RIGHT_ACTIVE]=1 \{\ +. ie \\n[#INDENT_LEFT_ACTIVE]=1 \{\ +. \" Don't do anything; we already have a left indent +. \} +. el \{\ +. nr #L_INDENT +\\n[#LIST_INDENT\\n[#DEPTH]] +. nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]] +. \} +. \} +. \} +. el \{\ +. nr #L_INDENT +\\n[#LIST_INDENT\\n[#DEPTH]] +. nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]] +. \} +. \} +. el \{\ +. nr #L_INDENT +\\n[#LIST_INDENT\\n[#DEPTH]] +. nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]] +. \} +.END +\# +\# ITEM +\# ---- +\# *Arguments: +\# <none> | <space before item> +\# *Function: +\# Prints enumerator for a given list depth and prepares mom to +\# receive the text of an item. +\# +.MAC ITEM END +. ie \\n[#NUM_ARGS]=2 .sp \\$2 +. el \ +. if \B'\\$1' .sp \\$1 +. if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'plain' .nop +. if !r#DEPTH .return +. if \\n[#LINENUMBERS]=1 \{\ +. NUMBER_LINES OFF +. nr #LINENUMBERS 2 +. \} +. if \\n[#KERN]=1 \{\ +. nr #KERN_WAS_ON 1 +. KERN OFF +. \} +. rr #IN_ITEM +. IL +. nr #IN_ITEM 1 +. ll \\n[#CURRENT_L_LENGTH]u \" Set ll again because IL turns IB off. +. ie !'\\n[.z]'' \!.TRAP OFF +. el .TRAP OFF +. HI \\n[#HL_INDENT\\n[#DEPTH]]u +. if '\\*[$SEPARATOR\\n[#DEPTH]]')' .nr #SEP_TYPE 1 +. if '\\*[$SEPARATOR\\n[#DEPTH]]']' .nr #SEP_TYPE 1 +. if '\\*[$SEPARATOR\\n[#DEPTH]]'}' .nr #SEP_TYPE 1 +. ie \\n[#IN_BIB_LIST]=1 \{\ +. ie \\n[#ENUMERATOR\\n[#DEPTH]]<9 \{\ +. ie \\n[#SEP_TYPE]=1 .PRINT \ +\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\ +\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m' +. el .PRINT \ +\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]] +. \} +. el \{\ +. ie \\n[#SEP_TYPE]=1 .PRINT \ +\h'-\w'\0'u'\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\ +\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m' +. el .PRINT \ +\h'-\w'\0'u'\ +\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]] +. \} +. \} +. el \{\ +. ie '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'register' \{\ +.\" DIGIT +. ie '\\g[#ENUMERATOR\\n[#DEPTH]]'0' \{\ +. ie \\n[#PAD_LIST_DIGITS\\n[#DEPTH]]=1 \{\ +. ie \\n[#ENUMERATOR\\n[#DEPTH]]<9 \{\ +. ie \\n[#SEP_TYPE]=1 .PRINT \ +\0\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\ +\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m' +. el .PRINT \ +\0\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]] +. \} +. el \{\ +. ie \\n[#SEP_TYPE]=1 .PRINT \ +\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\ +\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m' +. el .PRINT \ +\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]] +. \} +. \} +. el \{\ +. ie \\n[#SEP_TYPE]=1 .PRINT \ +\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\ +\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m' +. el .PRINT \ +\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]] +. \} +. \} +. el \{\ +.\" ALPHA +. ie '\\g[#ENUMERATOR\\n[#DEPTH]]'A' \{\ +. ie \\n[#SEP_TYPE]=1 .PRINT \ +\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\ +\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m' +. el .PRINT \ +\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]] +. \} +.\" alpha +. el .PRINT \ +\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]] +. \} +. \} +. if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'roman' \{\ +. ie \\n[#PAD_LIST_DIGITS\\n[#DEPTH]]=1 \{\ +.\" ROMAN I, padded +. ie '\\g[#ENUMERATOR\\n[#DEPTH]]'I' \{\ +. ie \\n[#SEP_TYPE]=1 .PRINT \ +\h'\\n[#HL_INDENT\\n[#DEPTH]]u'\h'-\w'\\*[$PREFIX\\n[#DEPTH]]\ +\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]\0'u'\ +\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n[#ENUMERATOR\\n[#DEPTH]]\ +\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m' +. el .PRINT \ +\h'\\n[#HL_INDENT\\n[#DEPTH]]u'\h'-\w'\\*[$PREFIX\\n[#DEPTH]]\ +\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]\ +\0'u'\\*[$PREFIX\\n[#DEPTH]]\\n[#ENUMERATOR\\n[#DEPTH]]\ +\\*[$SEPARATOR\\n[#DEPTH]] +. \} +.\" roman i, padded +. el .PRINT \ +\h'\\n[#HL_INDENT\\n[#DEPTH]]u'\h'-\w'\\*[$PREFIX\\n[#DEPTH]]\ +\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]\0'u'\ +\\*[$PREFIX\\n[#DEPTH]]\\n[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]] +. \} +.\" No pad +. el \{\ +.\" ROMAN I, no pad +. ie '\\g[#ENUMERATOR\\n[#DEPTH]]'I' \{\ +. ie \\n[#SEP_TYPE]=1 .PRINT \ +\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\ +\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m' +. el .PRINT \ +\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]] +. \} +.\" roman i, no pad +. el .PRINT \ +\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]] +. \} +. \} +. if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'other' \ +. PRINT \\*[$ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]] +. if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'variable' \ +. PRINT \\$1 +. \} +. rr #SEP_TYPE +. EOL +. if \\n[#REF]=1 \{\ +. IL +\\n[#REF_BIB_INDENT]u +. ti \\n[#L_INDENT]u-\\n[#REF_BIB_INDENT]u +. \} +. ie !'\\n[.z]'' \!.TRAP +. el .TRAP +. if \\n[#KERN_WAS_ON]=1 \{\ +. KERN +. rr #KERN_WAS_ON +. \} +. if \\n[#LINENUMBERS]=2 \{\ +. NUMBER_LINES RESUME +. nr #LINENUMBERS 1 +. \} +.END +\# +\# A utility macro that determines the space to reserve for +\# roman numeral enumerated lists. Limit is 20 roman numerals +\# per list. If this isn't enough, the user can add to the +\# macro. +\# +.MAC GET_ROMAN_INDENT END +. if '\\*[$LIST_ARG_1]'roman' \{\ +. if '\\*[$ROMAN_WIDTH]'1' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 1 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]i\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'2' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 2 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]ii\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'3' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 3 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'4' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 4 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'5' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 5 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'6' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 6 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'7' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 7 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]vii\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'8' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 8 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'9' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 9 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'10' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 10 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'11' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 11 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'12' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 12 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'13' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 13 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'14' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 14 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'15' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 15 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'16' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 16 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'17' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 17 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]xvii\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'18' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 18 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]xviii\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'19' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 19 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]xviii\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'20' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 20 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]xviii\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. \} +. if '\\*[$LIST_ARG_1]'ROMAN' \{\ +. if '\\*[$ROMAN_WIDTH]'1' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 1 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]I\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'2' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 2 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]II\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'3' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 3 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]III\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'4' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 4 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]IV\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'5' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 5 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]IV\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'6' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 6 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]IV\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'7' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 7 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]VII\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'8' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 8 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'9' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 9 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'10' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 10 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'11' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 11 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'12' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 12 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'13' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 13 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]XIII\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'14' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 14 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]XIV\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'15' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 15 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]XIV\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'16' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 16 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]XIV\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'17' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 17 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]XVII\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'18' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 18 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]XVIII\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'19' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 19 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]XVIII\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. if '\\*[$ROMAN_WIDTH]'20' \{\ +. ds $ROMAN_WIDTH\\n[#DEPTH] 20 +. nr #LIST_INDENT\\n[#DEPTH] \ +\w'\\*[$PREFIX\\n[#DEPTH]]XVIII\\*[$SEPARATOR\\n[#DEPTH]]\0' +. \} +. \} +.END +\# +\# SHIFT LIST +\# ---------- +\# *Arguments: +\# <amount by which to indent a list to the right> +\# *Function: +\# Adds the value of the arg to the current list's indent. +\# *Notes: +\# Requires a unit of measure. +\# +.MAC SHIFT_LIST END +. nr #SHIFT_LIST\\n[#DEPTH] (\\$1) +. nr #L_INDENT +\\n[#SHIFT_LIST\\n[#DEPTH]] +.END +\# +\# PAD LIST DIGITS +\# --------------- +\# *Arguments: +\# [ LEFT ] +\# *Function: +\# Adds a figure space to a list's hanging and left indent. If +\# LEFT is given, sets reg. #PAD_LIST_DIGITS to 1 for use in ITEM. +\# +.MAC PAD_LIST_DIGITS END +. if '\\g[#ENUMERATOR\\n[#DEPTH]]'0' \{\ +. nr #LIST_INDENT\\n[#DEPTH] +\\w'\\0' +. nr #L_INDENT \\n[#LIST_INDENT\\n[#DEPTH]]+\\n[#LIST_INDENT\\n-[#DEPTH]] +. nr #HL_INDENT\\n+[#DEPTH] +\\w'\\n[#ENUMERATOR\\n[#DEPTH]]' +. if '\\$1'LEFT' .nr #PAD_LIST_DIGITS\\n[#DEPTH] 1 +. \} +. if '\\g[#ENUMERATOR\\n[#DEPTH]]'i' \ +. if '\\$1'LEFT' .nr #PAD_LIST_DIGITS\\n[#DEPTH] 1 +. if '\\g[#ENUMERATOR\\n[#DEPTH]]'I' \ +. if '\\$1'LEFT' .nr #PAD_LIST_DIGITS\\n[#DEPTH] 1 +.END +\# +\# RESET LIST +\# ---------- +\# *Arguments: +\# none +\# *Function: +\# Resets register enumerators to 1, a, i... +\# +.MAC RESET_LIST END +. ie '\\$1'' .nr #ENUMERATOR\\n[#DEPTH] 0 1 +. el .nr #ENUMERATOR\\n[#DEPTH] \\$1-1 1 +.END +\# +\# QUIT LISTS +\# ---------- +\# *Arguments: +\# none +\# *Function: +\# Exits lists cleanly and restores any indents that were in +\# effect prior to LIST. +\# +.MAC QUIT_LISTS END +. br +. if '\\n[.z]'LIST*DIV' \{\ +\!. rr #IN_LIST +. di +. \} +. IQ CLEAR +. nr #HL_INDENT \\n[#STORED_HL_INDENT] +. nr #T_INDENT \\n[#STORED_T_INDENT] +. nr #L_INDENT \\n[#STORED_L_INDENT] +. nr #R_INDENT \\n[#STORED_R_INDENT] +. nr #BL_INDENT \\n[#STORED_BL_INDENT] +. nr #BR_INDENT \\n[#STORED_BR_INDENT] +. rr #STORED_HL_INDENT +. if \\n[#LIST_CENTER] \ +. nr #LIST_OFFSET_VALUE \\n[.l]-\\n[dl]/2 +. if \\n[#LIST_RIGHT] \{\ +. nr #LIST_OFFSET_VALUE \\n[.l]-\\n[dl] +. if r pdfbx-running \ +. nr #LIST_OFFSET_VALUE \ +\\n[.l]-\\n[dl]-\\*[gap\\n[stack]]-(\\*[wt\\n[stack]]/2) +. \} +. po +\\n[#LIST_OFFSET_VALUE]u +. if \\n[.u] .nr #FILLED 1 +. nf +. if dLIST*DIV \{\ +. LIST*DIV +. rm LIST*DIV +. \} +. if \\n[#FILLED] .fi +. if !\\n[#PRE_LIST_QUAD]=\\n[.j] .ad \\n[#PRE_LIST_QUAD] +. rr #FILLED +. po +. rr #PRE_LIST_QUAD +. if \\n[#RESTORE_PREV_INDENT]=1 \ +. IL +. if \\n[#RESTORE_PREV_INDENT]=2 \{\ +. ll \\n[#ORIG_L_LENGTH]u +. IB +. \} +. if \\n[#RESTORE_PREV_INDENT]=3 \{\ +. ll \\n[#ORIG_L_LENGTH]u +. IR +. \} +. if \\n[#RESTORE_PREV_INDENT]=4 \{\ +. nr #R_INDENT \\n[#STORED_R_INDENT] +. nr #L_INDENT \\n[#STORED_L_INDENT] +. ll \\n[#ORIG_L_LENGTH]u +. IR +. IL +. \} +.\" Clean up after exiting last depth of list +. nr #REMOVE 0 1 +. while \\n+[#REMOVE]<=\\n[#TOTAL_LISTS] \{\ +. rr #LIST_INDENT\\n[#REMOVE] +. rr #ENUMERATOR\\n[#REMOVE] +. rm $ENUMERATOR\\n[#REMOVE] +. rm $SEPARATOR\\n[#REMOVE] +. rm $ENUMERATOR_TYPE\\n[#REMOVE] +. rr #PAD_LIST_DIGITS\\n[#REMOVE] +. rr #SHIFT_LIST\\n[#REMOVE] +. \} +. rr #STORED_L_INDENT +. rr #STORED_BL_INDENT +. rr #STORED_BR_INDENT +. rr #STORED_R_INDENT +. rr #STORED_R_INDENT +. rr #REMOVE +. rr #TOTAL_LISTS +. rr #QUIT +. rr #DEPTH +. rr #NEXT_DEPTH_BACK +. rr #RESTORE_PREV_INDENT +. rr #ORIG_L_LENGTH +. rr #CURRENT_L_LENGTH +. rr #IN_ITEM +. rr #IN_ITEM_L_INDENT +.END +\# +\# SET LIST INDENT +\# --------------- +\# *Arguments: +\# none +\# *Function: +\# Restores indent of prev. list in nested lists. Also sets the +\# #QUIT register if an invocation of LIST OFF applies to the first +\# level of list. +\# +.MAC SET_LIST_INDENT END +. nr #NEXT_DEPTH_BACK \\n[#DEPTH]-1 +. if \\n[#NEXT_DEPTH_BACK]=0 \{\ +. nr #QUIT 1 +. if \\n[#INDENT_ACTIVE]=1 \{\ +. if \\n[#INDENT_STYLE_BOTH]=1 \{\ +. ie \\n[#DOCS] \ +. ll \\n[#DOC_L_LENGTH]u-\\n[#STORED_BR_INDENT]u +. el \ +. ll \\n[#L_LENGTH]u-\\n[#STORED_BR_INDENT]u +. in \\n[#BL_INDENT]u +. \} +. if \\n[#INDENT_STYLE_LEFT] \{\ +. in \\n[#STORED_L_INDENT]u +. \} +. if \\n[#INDENT_STYLE_RIGHT] \{\ +. ie \\n[#DOCS] \ +. ll \\n[#DOC_L_LENGTH]u-\\n[#STORED_R_INDENT]u +. el \ +. ll \\n[#L_LENGTH]u-\\n[#STORED_R_INDENT]u +. \} +. \} +. return +. \} +. nr #L_INDENT -\\n[#LIST_INDENT\\n[#DEPTH]]+\\n[#SHIFT_LIST\\n[#DEPTH]] +. nr #HL_INDENT \\n[#HL_INDENT\\n-[#DEPTH]] +.END +\# +\# ==================================================================== +\# +\# +++DOCUMENT PROCESSING MISC AND SUPPORT MACROS+++ +\# +\# COLLATE +\# ------- +\# *Arguments: +\# <none> +\# *Function: +\# Turns headers off (if on) and saves header state, sets register +\# #COLLATE to 1 (toggle), and breaks to a new page. +\# *Notes: +\# COLLATE exists primarily to allow putting multiple chapters in +\# a single file, although it can be used for any document type. After +\# COLLATE, any of the macros that normally precede START may be +\# used, and should behave as expected. +\# +\# N.B.--the START macro must be used after every COLLATE +\# +.MAC COLLATE END +. if dPDF.EXPORT .tm .ds pre-collate-\\n% \\n%@\\n[#COL_NUM] +. if \\n[defer] \{\ +. nr #BLANKPAGE_AFTER_DEFER 1 +. bp +. \} +. nr #HEADER_STATE \\n[#HEADERS_ON] +. if (\\n[defer]=0)&(\\n[float*defer]=0) .HEADERS OFF +. if \\n[#LINENUMBERS] \{\ +. NUMBER_LINES off +. nr #LINENUMBERS 2 +. \} +. if \\n[#BLANKPAGE] \{\ +. if \\n[nl]=\\n[#PAGE_TOP] \{\ +. nr #NO_NEWPAGE 1 +. RESTORE_SPACE +. \} +. rr #BLANKPAGE +. \} +. if \\n[defer] \ +. DO_FOOTER +. EOL +. ds $SAVED_DOC_FAM \\*[$DOC_FAM] +. ds $SAVED_PP_FT \\*[$PP_FT] +. nr #COLLATE 1 +. nr #PRE_COLLATE 1 +. nr #POST_TOP 1 +. nr #HEAD_1_NUM 0 1 +. if !\\n[#LISTS] \{\ +. if \\n[eqn*label-with-chapter]=1 .nr eqn*label-num 0 1 +. if \\n[float*label-with-chapter]=1 .nr fig*label-num 0 1 +. if \\n[pdf-img*label-with-chapter]=1 .nr fig*label-num 0 1 +. if \\n[pic*label-with-chapter]=1 .nr fig*label-num 0 1 +. if \\n[tbl*label-with-chapter]=1 .nr tbl*label-num 0 1 +. \} +. if \\n[#DOC_HEADER]=2 .nr #DOC_HEADER 1 +. if \\n[#PAGE_NUM_V_POS]=1 \{\ +. nr #PAGINATION_STATE \\n[#PAGINATE] +. PAGINATION OFF +. \} +. IQ CLEAR +. TQ +. LL \\n[#DOC_L_LENGTH]u +. PT_SIZE \\n[#DOC_PT_SIZE]u +. QUAD \\*[$DOC_QUAD] +. nr #SAVED_DOC_LEAD \\n[#DOC_LEAD] +. nr #COLLATED_DOC 1 +. vs \\n[#DOC_LEAD]u +\*[SLANTX] +\*[CONDX] +\*[EXTX] +. if \\n[#TOC] \{\ +. if \\n[TOC_BH]=1 .pdfswitchtopage before MOM:TOC +. if \\n[TOC_BH]=2 .pdfswitchtopage after MOM:TOC +. \} +. if !\\n[#NO_NEWPAGE] .NEWPAGE +. if !\\n[#TOC] \{\ +. if \\n[#FORCE_RECTO] \{\ +. ds $PN_FORMAT_CURR \\g[#PAGENUMBER] +. af #PAGENUMBER 1 +. if \\n[#PAGENUMBER]%2=1 .nr #ODD_PAGENUM 1 +. af #PAGENUMBER \\*[$PN_FORMAT_CURR] +. if \\n[#ODD_PAGENUM] .BLANKPAGE 1 DIVIDER +. rr #ODD_PAGENUM +. rr #BLANKPAGE_AFTER_DEFER +. \} +. \} +. rr #NO_NEWPAGE +. ch RR_@TOP +. rr @TOP +. if \\n[.ns] \{\ +. rs +. nop \& +. \} +. if '\\n[.ev]'PAGE_TRANSITION\\n[pg-trans]' .ev +. if \\n[#DEFER_PAGINATION] .PAGINATE +. if !'\\*[$RESTORE_PAGENUM_STYLE]'' \{\ +. PAGENUM_STYLE \\*[$RESTORE_PAGENUM_STYLE] +. rm $RESTORE_PAGENUM_STYLE +. \} +. if \\n[#CH_NUM] \ +. if \\n[#TOC]=0 .nr #CH_NUM +1 +. rm $EN_TITLE +. COVERTITLE +. DOC_COVERTITLE +. TITLE +. CHAPTER +. CHAPTER_TITLE +. SUBTITLE +. MISC +. rr #COVER_TITLE +. rr #DOC_COVER_TITLE +. rr #FROM_COVERTITLE +. rr #FROM_DOC_COVERTITLE +. rr #MISC +. rr #COVER_MISC +. rr #DOC_COVER_MISC +. rr #COPYRIGHT +. rr #COVER_COPYRIGHT +. rr #DOC_COVER_COPYRIGHT +. rr #COVER_AUTHOR +. rr #DOC_COVER_AUTHOR +. rm COVER_TEXT +. rm DOC_COVER_TEXT +. rm $COPYRIGHT +. rm $COVER_COPYRIGHT +. rm $DOC_COVER_COPYRIGHT +. rr #END_QUOTE +. rr #PAGENUM_STYLE_SET +. rr #DOC_COVER +. rr #COVER +. rr #LAST_LEVEL +. rr #LEVEL +. if \\n[#RESTORE_PN_V_POS] \{\ +. nr #PAGE_NUM_V_POS \\n[#RESTORE_PN_V_POS] +. rr #RESTORE_PN_V_POS +. \} +. nr #LOOP 0 1 +. while \\n+[#LOOP]<=\\n[@LEVEL] \ +. rr #TOC_HEAD_\\n[#LOOP]_INDENT_SET +. if \\n[#FLEX_ACTIVE] .rr #NO_FLEX +.END +\# +\# NUMBER_LINES +\# ------------ +\# *Arguments: +\# <starting line number> [ <increment> [ <gutter> ] ] +\# or +\# <anything> | RESUME +\# *Function: +\# Begin, suspend/turn off, or resume numbering of output lines. +\# +.MAC NUMBER_LINES END +. if '\\n[.z]'EPI_TEXT' .return +. if '\\$1'' \{\ +. tm1 "[mom]: NUMBER_LINES at line \\n[.c] has no argument. +. tm1 " You have forgotten to give a starting line number or 'RESUME'. +. ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +. \} +. if !\\n[#LINENUMBERS]=2 .nr #LINENUMBERS 1 +.\" Test whether the first arg is a digit. +. if \B'\\$1' \{\ +. if \\n[#QUOTE] \{\ +. if \\n[#QUOTE]=1 .ds macro QUOTE +. if \\n[#QUOTE]=2 .ds macro BLOCKQUOTE +. tm1 "[mom]: \\$0 at line \\n[.c] may not be used inside \\*[macro]. +. tm1 " Please set NUMBER_LINES before \\*[macro], followed by +. tm1 " NUMBER_\\*[macro]_LINES. +. ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +. \} +. nr #LN \\$1 +. ds $LN_NUM \\$1 +. if !'\\n[.z]'' .nr #RESTORE_LN_NUM 1 +. ie '\\$2'' \ +. if '\\*[$LN_INC]'' .ds $LN_INC 1 +. el .ds $LN_INC \\$2 +. ie '\\$3'' \ +. if !\\n[#LN_GUTTER] .nr #LN_GUTTER 2 +. el .nr #LN_GUTTER \\$3 +. \} +. ie !\\n[#LN] \{\ +.\" In other words, the first arg was not a digit. +. rr #LN +. ie '\\$1'RESUME' \{\ +. LN_PARAMS +. nm \\*[$LN_NUM] +. RESTORE_PARAMS +. \} +. el \{\ +. nm +.\" Register ln is still set and may confuse preprocessors like tbl. +.\" Still, resuming line numbering must be possible, so save ln in +.\" $LN_NUM +. ds $LN_NUM \\n[ln] +. if !\\n[#QUOTE] .nr ln 0 +. if !\\n[#LINENUMBERS]=2 .rr #LINENUMBERS +. \} +. \} +. el \{\ +. LN_PARAMS +. nm \\*[$LN_NUM] \\*[$LN_INC] \\n[#LN_GUTTER] -3-\\n[#LN_GUTTER] +. RESTORE_PARAMS +. if !'\\n[.z]'' .nr #DIVER_LN_OFF 1 +. \} +. rr #LN +.END +\# +\# LINENUMBER STYLE PARAMETERS +\# --------------------------- +\# *Arguments: +\# none +\# *Function: +\# LN_PARAMS sets parameters for line numbers. +\# RESTORE_PARAMS restores them after internal calls to .nm +\# *Notes: +\# It's not documented, but groff's linenumbering is processed +\# in a unique environment reserved for the numbers, such that +\# whatever style params were in effect prior to the invocation +\# of .nm remain in effect for the numbers even if the running +\# text has different params. Eg, If you set .gcolor to 'purple' +\# before .nm then set it back to what it was, the numbers will be +\# purple while the text remains at the default color. +\# +.MAC LN_PARAMS END +. ie d$LN_FAM .fam \\*[$LN_FAM] +. el .fam \\n[.fam] +. ie d$LN_FT .ft \\*[$LN_FT] +. el .ft \\n[.sty] +. ie d$LN_SIZE_CHANGE .ps \\*[$LN_SIZE_CHANGE] +. el .ps \\n[.s] +. ie d$LN_COLOR .COLOR \\*[$LN_COLOR] +. el .gcolor \\n[.m] +.END +\# +.MAC RESTORE_PARAMS END +. fam +. ft +. ps +. gcolor +.END +\# +\# Whether, at COLLATE, to reset line number to 1. +\# +\# NUMBER LINES PER SECTION +\# ------------------------ +\# *Argument: +\# none +\# *Function: +\# Sets register that determines whether, at COLLATE, to reset +\# line number to 1. +\# *Notes: +\# The default is to continue the line numbering from where it +\# left off. +\# +.MAC NUMBER_LINES_PER_SECTION END +. nr #PER_SECTION 1 +.END +\# +\# NUMBER QUOTE AND BLOCKQUOTE LINES AS PART OF RUNNING TEXT +\# --------------------------------------------------------- +\# *Argument: +\# <gutter> | <anything> +\# *Function: +\# Sets #(B)QUOTE_LN to 1 if no argument, or a single numeric +\# argument, is given; otherwise, turns (BLOCK)QUOTE linenumbering +\# off. +\# *Notes: +\# #(B)QUOTE is checked for in QUOTE and BLOCKQUOTE. +\# The single numeric argument allows establishing a different gutter from +\# the one used for line numbers in running text. +\# +.MAC NUMBER_QUOTE_LINES END +. ie \\n[#NUM_ARGS]=0 .nr #QUOTE_LN 1 +. el \{\ +. ie \B'\\$1' \{\ +. nr #QUOTE_LN 1 +. nr #Q_LN_GUTTER \\$1 +. \} +. el \{\ +. ie '\\$1'SILENT' .nr #SILENT_QUOTE_LN 1 +. el \{\ +. rr #QUOTE_LN +. rr #SILENT_QUOTE_LN +. \} +. \} +. \} +.END +\# +.MAC NUMBER_BLOCKQUOTE_LINES END +. ie \\n[#NUM_ARGS]=0 .nr #BQUOTE_LN 1 +. el \{\ +. ie \B'\\$1' \{\ +. nr #BQUOTE_LN 1 +. nr #BQ_LN_GUTTER \\$1 +. \} +. el \{\ +. ie '\\$1'SILENT' .nr #SILENT_BQUOTE_LN 1 +. el \{\ +. rr #BQUOTE_LN +. rr #SILENT_BQUOTE_LN +. \} +. \} +. \} +.END +\# +\# OUTPUT BLANK PAGES +\# ------------------ +\# *Argument: +\# <number of blank pages to output> [ DIVIDER [ NULL ] ] +\# *Function: +\# Outputs blank pages. +\# *Notes: +\# If recto/verso, each page is recto/verso, even if there's +\# nothing on it. +\# +\# The 1st argument to BLANKPAGE is non-optional. DIVIDER is for +\# blank pages before endnotes, bibliographies, tocs, new chapters. +\# +.MAC BLANKPAGE END +. nr #BLANKPAGE 1 +. nr #HOW_MANY \\$1 +. shift +. nr #PAGES 0 1 +. if \\n[#LINENUMBERS] \{\ +. nr #LINENUMBERS_WERE_ON 1 +. NUMBER_LINES OFF +. \} +. while \\n+[#PAGES]<=\\n[#HOW_MANY] \{\ +. if \\n[#HEADERS_ON]=1 \{\ +. nr #HEADERS_WERE_ON 1 +. HEADERS OFF +. \} +. if \\n[#PAGE_NUM_V_POS]=1 \{\ +. if \\n[#PAGINATE]=1 .nr #PAGINATE_WAS_ON 1 +. nr #RESTORE_PN_V_POS \\n[#PAGE_NUM_V_POS] +. PAGINATION OFF +. \} +. if \\n[#COLUMNS]=1 .nr #COLUMNS +1 +. NEWPAGE \" Break to blank page +. nop \& +. br +. if \\n[#FOOTERS_ON]=1 \{\ +. nr #FOOTERS_WERE_ON 1 +. FOOTERS OFF +. \} +. if \\n[#PAGE_NUM_V_POS]=2 \{\ +. if \\n[#PAGINATE]=1 .nr #PAGINATE_WAS_ON 1 +. nr #RESTORE_PN_V_POS \\n[#PAGE_NUM_V_POS] +. PAGINATION OFF +. \} +. if !'\\$1'DIVIDER' .if \\n[#HEADERS_WERE_ON] .HEADERS +. \} +. if \\n[#COLUMNS]=2 .nr #COLUMNS -1 +. NEWPAGE \" Break to text page +. ie '\\$1'DIVIDER' \{\ +. if \\n[#BLANKPAGE_AFTER_DEFER] .bp +. if \\n[#FOOTERS_WERE_ON] .FOOTERS +. if \\n[#RESTORE_PN_V_POS] \{\ +. if \\n[#PAGINATE_WAS_ON] .PAGINATE +. nr #PAGE_NUM_V_POS \\n[#RESTORE_PN_V_POS] +. \} +. if \\n[#HEADERS_WERE_ON] .HEADERS +. shift +. if '\\$1'NULL' .nr #PAGE_NUM_ADJ -\\n[#HOW_MANY] +. \} +. el \{\ +. if '\\$1'' \{\ +. if \\n[#FOOTERS_WERE_ON] .FOOTERS +. if \\n[#RESTORE_PN_V_POS] \{\ +. if \\n[#PAGINATE_WAS_ON] .PAGINATE +. nr #PAGE_NUM_V_POS \\n[#RESTORE_PN_V_POS] +. \} +. \} +. if '\\$1'NULL' \{\ +. if \\n[#FOOTERS_WERE_ON] .FOOTERS +. if \\n[#RESTORE_PN_V_POS]=2 \ +. nr #PAGE_NUM_V_POS \\n[#RESTORE_PN_V_POS] +. if \\n[#PAGE_NUM_V_POS]=2 \ +. if \\n[#PAGINATE_WAS_ON] .PAGINATE +. nr #PAGE_NUM_ADJ -\\n[#HOW_MANY] +. \} +. \} +. if \\n[#PAGINATE]=1 \ +. if \\n[#RESTORE_PN_V_POS]=1 \{\ +. RESTORE_SPACE +. sp |\\n[#HEADER_MARGIN]u +. PRINT_PAGE_NUMBER +. \} +. if \\n[#LINENUMBERS_WERE_ON] .NUMBER_LINES RESUME +. rr #HOW_MANY +. rr #HEADERS_WERE_ON +. rr #FOOTERS_WERE_ON +. rr #PAGINATE_WAS_ON +. rr #RESTORE_PN_V_POS +.END +\# +\# FLOATS +\# ------ +\# +.am PSPIC \" Need to do this for PSPIC inside a float +. vpt 0 +\h'(\\n[ps-offset]u + \\n[ps-deswid]u)' +. sp -1 +. vpt +.. +\# +.MAC PROCESS_FLOATS END +. if \\n[#TAB_ACTIVE] \{\ +. nr #RESTORE_TAB 1 +. TQ +. \} +. if !\\n[tbl*no-top-hook] .tbl@top-hook +. rr tbl*no-top-hook +. sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u +. if r pdfbx-defer \{\ +. nr lead-diff \\n[#LEAD_AT_FOOTER]-\\n[.v] +. sp |\\n[t]u-\\n[.v]u+\\n[lead-diff]u +. rr pdfbx-defer +. \} +. nr defer-count \\n[defer] +. nr #TMP_PAGE_OFFSET \\n[.o] +. po \\n[#L_MARGIN]u +. ev protect +. evc FLOAT +. nf +. RESTORE_SPACE +. if '\\*[float*type:\\n[defer]]'boxed-tbl:\\n[defer]' \{\ +. ch RR_@TOP +.\" Get depth of the first deferred float when there's more than one. +. if (\\n[.t] >= 1)&(\\n[float-depth:\\n[defer]] > (\\n[.t]+\\n[#DOC_LEAD])) \ +. tbl*float-warning +. if \\n[#MLA] .sp \\n[tbl*label-lead-diff]u +. if (\\n[tbl*have-caption:\\n[defer]]=1)&(\\n[tbl*caption-after-label]=0) \ +. sp \\n[tbl*caption-lead-diff]u +. if \\n[tbl*caption-after-label] \ +. sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u +. \} +. if \\n[float*pic:1] \{\ +. if (\\n[pic*have-caption]=1)&(\\n[pic*caption-after-label]=0) \{\ +. ie \\n[#COLUMNS] \ +. sp |\\n[dc]u+\\n[pic*caption-lead-diff]u +. el .sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u+\\n[pic*caption-lead-diff]u +. \} +. rr pic*caption-lead-diff +. rr pic*top-lead-diff +. rr float*pic +. \} +. if \\n[float*img:1] \{\ +. ie \\n[#COLUMNS] \ +. sp |\\n[dc]u +. el \ +. sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u +. if \\n[pdf-img:frame] \{\ +. sp -(\\*[pdf-img:frame-weight]p*2u) +. rr pdf-img:frame +. \} +. \} +. if \\n[defers] .rr defers +. nr loop-count 0 1 +. nr new-defer 0 1 +. while \\n+[loop-count]<=\\n[defer-count] \{\ +. nr tbl*no-top-hook 1 +. rnn defer float*defer \" So '.if \n[defer]' is skipped during float output +. vpt +. ch RR_@TOP +. rr @TOP +. if \\n[pdf-img*have-caption] \ +. if !\\n[pdf-img*caption-after-label] .sp -.5v +. rr pdf-img*have-caption +. rr pic*have-caption +. if '\\*[float*type:\\n[loop-count]]'table:\\n[loop-count]' \{\ +. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u +. ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u +. \} +. ie !\\n[float-span:\\n[loop-count]] \{\ +. ie ((\\n[float-depth:\\n[loop-count]]-\\n[.v])>\\n[.t]):(\\n[D-float:\\n[loop-count]]>\\n[.t]):(\\n[defers]=1) \{\ +.\" Insufficient space, defer to next page +. nr defers 1 +. rn FLOAT*DIV:\\n[loop-count] NEW*FLOAT*DIV:\\n+[new-defer] +. rnn float-depth:\\n[loop-count] new-float-depth:\\n[new-defer] +. rnn D-float:\\n[loop-count] new-D-float:\\n[new-defer] +. \} +. el \{\ +. output-float +. ie !r pdfboxed \{\ +. ie (\\n[.t]-2)<(\\n[#DOC_LEAD]u/2) .SHIM_1 +. el .sp .5 +. \} +. el .rr pdfboxed +. \} +. \} +. el \{\ +. rr tbl*no-top-hook +. if \\n[float-span:\\n[loop-count]] \ +. rn tbl*header-div:\\n[loop-count] tbl*header-div:span +. ie !r pdfboxed \{\ +. output-float +. sp .5 +. \} +. el .rr pdfboxed +. \} +. if !\\n[loop-count]=\\n[defer-count] .rr flexed +. rr float-span:\\n[loop-count] +. rr float*tbl:\\n[loop-count] +. rr tbl*have-caption:\\n[loop-count] +. rr float*tbl*center:\\n[loop-count] +. rr tbl*have-header:\\n[loop-count] +. rm float*div:\\n[loop-count] +. rr float-depth:\\n[loop-count] +. rm tbl*header-div:\\n[loop-count] +. rm float*type:\\n[loop-count] +. \} +. if !\\n[float*defer]=1 \{\ +. if !(\\n[loop-count]-1)=1 \{\ +. if !\\n[.t]=1 .sp -.5 +. \} +. \} +. if !\\n[@no-shim] \ +. if !\\n[q-float] \ +. if !\\n[#NO_SHIM] .SHIM +.\" FLOAT arrays are empty now +.\" Rename new arrays (FLOATs deferred to next page) to proper names +. rr float*defer +. rnn new-defer defer +. nr loop-count 0 1 +. while \\n+[loop-count]<=\\n[defer] \{\ +. rn NEW*FLOAT*DIV:\\n[loop-count] FLOAT*DIV:\\n[loop-count] +. rnn new-float-depth:\\n[loop-count] float-depth:\\n[loop-count] +. rnn new-D-float:\\n[loop-count] D-float:\\n[loop-count] +. \} +. if !\\n[#TMP_PAGE_OFFSET]=\\n[.o] .po \\n[#TMP_PAGE_OFFSET]u +. rr #TMP_PAGE_OFFSET +. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u +. ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u +. if \\n[float-depth:1]>\\n[.t] .bp +. ie !\\n[#NO_SHIM] .SHIM +. el \{\ +. if !\\n[#NO_FLEX] \ +. if !\\n[flexed] .FLEX +. \} +. if !\\n[#NO_SHIM] \ +. if \\n[#SHIM]>(\\n[#DOC_LEAD]-(\\n[#DOC_LEAD]/4)) \ +' sp -\\n[#DOC_LEAD]u +. ie !\\n[flex:force] .ns +. el \{\ +. rr flex:force +. if !\\n[#NO_FLEX] .FLEX +. \} +. nr tbl*have-header 0 +. rr tbl*have-caption +. rr loop-count +. rr defer-count +. rr float*before-shim +. rr float*after-shim +. rm float-adj +. rr check-indent +. if \\n[#NEWPAGE] \{\ +. vpt +' bp +. rr #NEWPAGE +. \} +. rr float*img +. rr float*eqn +. rr float*tbl +. rr float*pic +. if \\n[#RESTORE_TAB] \{\ +. TAB \\n[#CURRENT_TAB] +. rr #RESTORE_TAB +. \} +.END +\# +.MAC output-float END +. if \\n[float*img] \{\ +. if \\n[loop-count]=1 .nr no-top-space:1 1 +. \} +. vpt 0 +. if \\n[.ns] \{\ +. rs +. nop \& +. sp -1 +. \} +. if \\n[no-top-space:1] \{\ +. ie !\\n[#COLUMNS] \{\ +. sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u +. ns +. \} +. el .sp |\\n[dc]u +. if \\n[float*tbl:1] \{\ +. if !\\n[no-top-space:1] .RESTORE_SPACE +. ie \\n[tbl*caption-top-lead-diff] \{\ +. sp \\n[tbl*caption-top-lead-diff]u +. rr tbl*caption-top-lead-diff +. \} +. el \{\ +. if '\\*[float*type:1]'boxed-tbl:1' \{\ +. ie (\\n[tbl*have-caption]=1)&(\\n[tbl*caption-after-label]=0) .sp .3n +. el .sp (\\n[#DOC_LEAD]u/2u)+.3n +. \} +. \} +. rr float*tbl:1 +. \} +. if \\n[float*img:1] \{\ +. RESTORE_SPACE +. if \\n[pdf-img*caption-top-lead-diff] \{\ +. sp \\n[pdf-img*caption-top-lead-diff]u +. rr pdf-img*caption-top-lead-diff +. \} +. \} +. \} +. if \\n[float*pic] \{\ +. nr pic*top-space-adj \\n[#DOC_LEAD]-\\n[pic@text-lead] +. if (\\n[pic*have-caption]=0):(\\n[pic*caption-after-label]=1) \ +. sp \\n[pic*top-space-adj]u +. if \\n[#COLUMNS] \ +. if !'\\*[pic*space-adj:\\n[loop-count]]'' \ +. sp \\*[pic*space-adj:\\n[loop-count]] +. \} +. nf +. if \\n[q-float] \ +. if !\\n[has-caption] .sp \\n[#Q_LEAD_DIFF]u +. if \\n[Q-float]=2 .sp |\\n[t]u-.5v +. ns +. vpt +. if \\n[check-indent] \{\ +. if \\n[#INDENT_LEFT_ACTIVE] \{\ +. in \\n[#L_INDENT]u/2u +. \} +. \} +. rr no-top-space:1 +. if \\n[loop-count]>1 \{\ +. if !'\\*[float-adj:\\n[loop-count]]'' \{\ +. rs +. sp \\*[float-adj:\\n[loop-count]] +. ns +. nr restore-v-pos 1 +. \} +. \} +. nr check-indent 1 +. FLOAT*DIV:\\n[loop-count] +. if \\n[no-top-space:1] \ +. RESTORE_SPACE +. if \\n[restore-v-pos] \{\ +. sp -\\*[float-adj:\\n[loop-count]] +. rm float-adj:\\n[loop-count] +. rr restore-v-pos +. \} +. if r float*img:1 \{\ +. sp .5 +. rr float*img:1 +. \} +. if r Q-float:1 \{\ +. if !\\n[#FULLSPACE_QUOTES] .sp -.5 +. rr Q-float:1 +. \} +. if \\n[#COLUMNS] \ +. if !'\\*[pic*space-adj:\\n[loop-count]]'' \ +. sp -\\*[pic*space-adj:\\n[loop-count]] +. rm pic*space-adj:\\n[loop-count] +. if \\n[D-float:1] .rr D-float:1 +. rr D-float +. rr @no-shim +. rr q-float +. rm B_QUOTE +. rm P_QUOTE +.END +\# +\# FLOAT +\# ----- +\# *Arguments: +\# [ ADJUST +|-<amount> ] [ FORCE] [ SPAN] [ NO_SHIM] | [ NO_FLEX ] [ TARGET ] | <anything> +\# *Function: +\# Captures input in a diversion, which is output immediately if +\# there's room on the page; otherwise outputs diversion at top of +\# next page. +\# *Notes: +\# ADJUST allows for raising or lowering the contents of +\# the diversion within the space allotted. FORCE breaks to +\# a new page immediately. +\# +\# +.MAC FLOAT END +. nr ll-pre-float \\n[.l] +. if \\n[#NUM_ARGS]>0 \{\ +. nr loop-count 0 1 +. nr loop-counter \\n[#NUM_ARGS] +. while \\n+[loop-count]<=\\n[loop-counter] \{\ +. if '\\$1'FORCE' \{\ +. nr #FORCE 1 +. shift +. \} +. if '\\$1'SPAN' \{\ +. nr float-span 1 +. shift +. \} +. if '\\$1'ADJUST' \{\ +. shift +. ds float-adj \\$1 +. shift +. \} +. if '\\$1'CENTER' \{\ +. nr center-float 1 +. shift +. \} +. if '\\$1'CENTRE' \{\ +. nr center-float 1 +. shift +. \} +. if '\\$1'INDENT' \{\ +. shift +. nr indent-float \\$1 +. shift +. \} +. if '\\$1'RIGHT' \{\ +. nr right-float 1 +. shift +. \} +. if '\\$1'NO_SHIM' \{\ +. nr @no-shim 1 +. shift +. \} +. if '\\$1'NO_FLEX' \{\ +. nr @no-flex 1 +. shift 1 +. \} +. if '\\$1'TARGET' \{\ +. shift +. ds float*target "\\$1 +. shift 1 +. \} +. \} +. \} +. ie \\n[float*started] .rr float*started +. el \{\ +. while !'\\$1'' .shift 1 +. nr float*started 1 +. \} +. ie '\\$1'' \{\ +.\" Harmonize floats treated as defers and floats proper to the top +.\" of the next page between passes when flex is enabled. +.\" +.\" Without this, floats near the bottom of the page may be deferred +.\" on the first pass, but when flex-spacing moves the line just +.\" before the float to the bottom of the page, the upcoming .br +.\" causes the float to be proper to the next page instead of +.\" deferred to it. +. nr floatnum +1 +. ie !\\n[#NO_FLEX] \{\ +.\" Only on 2nd pass +. if !dPDF.EXPORT \{\ +. ie d float\\n[floatnum]:no-defer .br +. el \{\ +.\" .v in the following is arbitrary. Groff rounds down decimal +.\" fractions so flex-spacing may be slightly short. Since there +.\" are no conditions under which a .t-1 (bottom margin) < .v +.\" on the 1st pass doesn't cause a float to be deferred, all floats +.\" on the second pass that meet the condition are also, correctly, +.\" deferred. +. if (\\n[.t]-1)<\\n[.v] \ +. if !\\n[@TOP] .nr no-break 1 +. \} +. \} +.\" Only on 1st pass +. ie !\\n[no-break] \{\ +. ds pre-float:page@col \\n%@\\n[#COL_NUM] +. br +. ds post-float:page@col \\n%@\\n[#COL_NUM] +. if dPDF.EXPORT \{\ +. if !'\\*[pre-float:page@col]'\\*[post-float:page@col]' \ +. tm .ds float\\n[floatnum]:no-defer 1 +. \} +. \} +. el .rr no-break +. \} +. el .br +. if \\n[nl]=\\n[#PAGE_TOP] \ +. RESTORE_SPACE +. ds ev-pre-float \\n[.ev] +. ev FLOAT +. evc \\*[ev-pre-float] +. if \\n[.u] .nr fill-pre-float 1 \" Needed for tbl +. di FLOAT*DIV +. if !'\\*[float*target]'' .PDF_TARGET "\\*[float*target] +. rm float*target +. nf +. \} +. el \{\ +. br +.\" So @no-shim persists if float output with output-float +. if r @no-shim .nr float*no-shim 1 +. if \\n[float-span] \{\ +. nr span 1 +\!. rr span +. \} +\!. rm tbl*header-div:span +\!. nr tbl*no-print-header 1 +. di +. if \\n[float-span] \{\ +. nr dn-save \\n[dn] +. da FLOAT*DIV +\!. rr float-span +. da +. nr dn \\n[dn-save] +. rr dn-save +. \} +. ie \\n[float*tbl] \ +. if !\\n[tbl*have-header] .ev 0 +. el .ev 0 +. if \\n[tbl*boxed] \{\ +. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u+\\n[#DOC_LEAD]u +. ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u+\\n[#DOC_LEAD]u +. ie !\\n[#MLA] \{\ +. ie (\\n[tbl@label]=1):(\\n[tbl@source]=1):(\\n[tbl*autolabel]=1) .nr dn -.65v +. el .nr dn +.65v +. rr tbl@label +. rr tbl@source +. \} +. el .if !\\n[tbl@source] .nr dn -1.65v +. \} +.\" Defer float +. if (\\n[dn]>\\n[.t]):(\\n[D-float]>\\n[.t]):(\\n[defer]>0) \{\ +. if !\\n[float-span] \{\ +. if (\\n[dn]+(\\n[.v]*2)>(\\n[.p]-\\n[#TOP_MARGIN]-\\n[#DOC_LEAD]-\\n[#B_MARGIN])) \{\ +. tm1 "[mom]: Floated element exceeds page depth. +. ab [mom]: Aborting '\\n[.F]' at line \\n[.c]. +. \} +. \} +.\" Save depth of diversion here. The .da zeroes it. +. nr dn-save \\n[dn] +. if \\n[#FLEX_ACTIVE] \{\ +. if !\\n[@no-flex] \{\ +. da FLOAT*DIV +\!. FLEX +\!. nr flexed 1 +. da +. \} +. \} +. nr dn \\n[dn-save] +. rr dn-save +. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u +. ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u +. ev 0 +. ie \\n[@TOP] \{\ +. br +. if \\n[tbl*boxed] .rs +. rr tbl*boxed +. \} +. el \{\ +. if !\\n[defer] .nr defer 0 1 +. rn FLOAT*DIV FLOAT*DIV:\\n+[defer] +. if !'\\*[float-adj]'' \ +. rn float-adj float-adj:\\n[defer] +. if \\n[float-span] \ +. if !\\n[tbl*boxed] .rnn float-span float-span:\\n[defer] +. if \\n[float*tbl] \{\ +. if \\n[defer]>0 \{\ +. nr no-top-space:\\n[defer] 1 +. nr float*tbl:\\n[defer] 1 +. if \\n[tbl*have-caption] \ +. nr tbl*have-caption:\\n[defer] 1 +. \} +. ie \\n[tbl*boxed] \ +. ds float*type:\\n[defer] boxed-tbl:\\n[defer] +. el .ds float*type:\\n[defer] table:\\n[defer] +. if \\n[tbl*center] .nr float*tbl-center:\\n[defer] 1 +. if \\n[tbl*have-header] .rnn tbl*have-header tbl*have-header:\\n[defer] +. rn tbl*header-div tbl*header-div:\\n[defer] +. rr tbl*center +. \} +. if \\n[float*eqn] \{\ +. if \\n[defer]=1 .nr no-top-space:\\n[defer] 1 +. ds float*type:\\n[defer] eqn +. \} +. if \\n[float*pic] \{\ +. ds float*type:\\n[defer] pic +. nr float*pic:\\n[defer] 1 +. rn pic*space-adj pic*space-adj:\\n[defer] +. \} +. if \\n[float*img] \{\ +. ds float*type:\\n[defer] img +. nr float*img:\\n[defer] 1 +. nr no-top-space:\\n[defer] 1 +. \} +. if \\n[D-float] .nr D-float:\\n[defer] \\n[D-float] +. if \\n[Q-float] .nr Q-float:\\n[defer] \\n[#Q-float] +. nr float-depth:\\n[defer] \\n[dn] +. if \\n[#FORCE] \{\ +. ie \\n[#COLUMNS] .COL_NEXT +. el .NEWPAGE +. rr #FORCE +. \} +. if \\n[tbl*boxed] .rr tbl*boxed +. if \\n[table] .rr table +. br +. return \" output div after header +. \} +. \} +. nr dn-save \\n[dn] +. if \\n[#FLEX_ACTIVE] \{\ +. if !\\n[@no-flex] \{\ +. da FLOAT*DIV +\!. FLEX +\!. nr flexed 1 +. da +. \} +. \} +. nr dn \\n[dn-save] +. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u +. ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u +. vpt 0 +. if !'\\*[float-adj]'' .sp \\*[float-adj] +. if \\n[.u] .nr fill 1 +. if \\n[@TOP] \{\ +. nr no-adjust 1 +. rr @TOP +. \} +. if \\n[float*tbl] \{\ +. if (\\n[#MLA]=1)&(\\n[tbl@source]=0) \ +. chop FLOAT*DIV +. if \\n[nl]=\\n[#PAGE_TOP] \{\ +. ie (\\n[tbl*have-caption]=1)&(\\n[tbl*caption-after-label]=0) \{\ +. ie !\\n[#MLA] .sp \\n[tbl*caption-lead-diff]u +. el .ch RR_@TOP +. \} +. el \{\ +. ev protect +. evc FLOAT +. nf +. rs +. ie \\n[tbl*boxed] .sp |\\n[#PAGE_TOP]u+.3n +. el .sp |\\n[#PAGE_TOP]u-.25v +. \} +. \} +. \} +. if \\n[float*img] \ +. if \\n[pdf-img:frame] \ +. sp -(\\*[pdf-img:frame-weight]p*2u) +. if !'\\n[.ev]'protect' \{\ +. ev protect +. evc FLOAT +' nf +. \} +. if \\n[float*tbl] \{\ +. if \\n[tbl*boxed] \ +. if \\n[tbl*center] \ +. if \\n[#L_INDENT] \ +. in -\\n[#L_INDENT]u/2u +. \} +. if \\n[center-float] \ +. in (\\n[.l]u-\\n[dl]u)/2u +. if \\n[indent-float] \ +. in \\n[indent-float]u +. if \\n[right-float] \ +. in \\n[.l]u-\\n[dl]u +. FLOAT*DIV +. if (\\n[center-float]>0):(\\n[indent-float]>0):(\\n[right-float]>0) \ +. in +. ev +. if \\n[float*tbl] \{\ +. rr tbl*no-print-header +. ie \\n[tbl*boxed] \{\ +. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u +. ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u +. ie \\n[nl]>(\\n[.p]+\\n[#VARIABLE_FOOTER_POS]) \{\ +. ie \\n[#COLUMNS] .COL_NEXT +. el .NEWPAGE +. \} +. el \{\ +. if \\n[dn-save]=\\n[bx-tbl-depth] .sp .35v +. rr dn-save +. if !\\n[tbl*plain-boxed] \{\ +. if !\\n[tbl*autolabel] \{\ +. if !\\n[#MLA] \{\ +. if \\n[tbl@label]=1 .sp .5 +. \} +. \} +. \} +. rr tbl*boxed +. rr bx-tbl-depth +. \} +. \} +. el \{\ +. if !'\\*[tbl*label]'' \ +. if \\n[tbl*autolabel]=0 .sp .5 +. \} +. rr float*tbl +. rr tbl*center +. rm tbl*header-div +. rr tbl*have-caption +. rr tbl*have-label +. rr tbl*have-source +. rm tbl*caption +. rm tbl*label +. rm tbl*source +. \} +. if \\n[float*img] \ +. if (\\n[.t]-1)>(\\n[#DOC_LEAD]u/2u) .sp .5 +. if \\n[D-float] \{\ +. ie \\n[dn]=0 .sp \\n[D-float]u+\\n[#DOC_LEAD]u +. el \ +. if \\n[dn]<\\n[D-float] \ +. sp \\n[D-float]u+\\n[#DOC_LEAD]u-\\n[dn]u +.\" Flex won't grab .h of D-floats without a dummy text line. +. vpt 0 +. nop \& +. sp -1 +. vpt 1 +. \} +. if \\n[fill] \{\ +. fi +. rr fill +. \} +. rm FLOAT*DIV +. if !'\\*[float-adj]'' \ +. if !\\n[no-adjust] .sp -\\*[float-adj] +. vpt +. if \\n[Q-float] \{\ +. sp .5 +. rr Q-float +. \} +. if !\\n[#NO_SHIM] \ +. if !\\n[@no-shim] .SHIM +. rm float-adj +. rm no-adjust +. rr center-float +. rr indent-float +. rr right-float +. rr D-float +. rr @no-shim +. rr @no-flex +. rr #FORCE +. rm P_QUOTE +. rm B_QUOTE +. if \\n[float*img] .rr float*img +. if \\n[float*pic] .rr float*pic +. if \\n[float*eqn] .rr float*eqn +. rr float*target +. rm float*target +. if \\n[#NO_SHIM] \ +. if !\\n[#NO_FLEX] .nr post-float 1 +. ev \\*[ev-pre-float] +. rr fill-pre-float +. rm ev-pre-float +. \} +.END +\# +\# SET TRAPS FOR HEADERS/FOOTERS/FOOTNOTES +\# --------------------------------------- +\# *Arguments: +\# <none> +\# *Function: +\# Sets header/footer/footnotes/etc... traps. +\# +\# TRAPS calculates the number of lines that actually fit on a +\# page based on #B_MARGIN and resets page bottom trap to coincide +\# with the depth of that number of lines, or, if #ADJ_DOC_LEAD=1, +\# adjusts #DOC_LEAD so that the last line of text on a page falls +\# exactly on #B_MARGIN. +\# +.MAC RR_@TOP END \" Trap-invoked after first line of text on a new page +. rr @TOP +. if \\n[.ns] \{\ +. vpt 0 +. rs +. if \\n[.u] .nr fill 1 +. nf +. nop \& +. sp -1 +. if \\n[fill] .fi +. if r #NEWPAGE .rr #NEWPAGE +. \} +. if \\n[.vpt]=0 .vpt +.END +\# +.MAC TRAPS END +. if !\\n[#UNADJUSTED_DOC_LEAD] .nr #UNADJUSTED_DOC_LEAD \\n[#DOC@LEAD] +.\" Remove all header/footer traps +. if !\\n[#NO_TRAP_RESET] \{\ +. ch DO_T_MARGIN +. ch DO_B_MARGIN +. ch HEADER +. ch FOOTER +. ch FN_OVERFLOW_TRAP +.\" Plant header trap +. wh 0 HEADER +. \} +.\" Adjust lead so last line of text falls on B_MARGIN +. nr #LINES_PER_PAGE 0 1 +. nr #DOC_LEAD_ADJ 0 1 +. nr #DEPTH_TO_B_MARGIN \\n[#PAGE_LENGTH]-\\n[#ORIGINAL_B_MARGIN]-\\n[#DOC_LEAD] +.\" Get the number of unadjusted lines that fit on the page; always a +.\" bit short of the bottom margin +. while \\n[#T_MARGIN]+(\\n[#DOC_LEAD]*\\n+[#LINES_PER_PAGE])<\\n[#DEPTH_TO_B_MARGIN] \{\ +. +. \} +. nr #LINES_PER_PAGE -1 +.\" Add machine units, 1 at a time, increasing the leading until the +.\" new leading fills the page properly +. while \\n[#T_MARGIN]+(\\n[#DOC_LEAD]+\\n+[#DOC_LEAD_ADJ]*\\n[#LINES_PER_PAGE])<=\\n[#DEPTH_TO_B_MARGIN] \{\ +. +. \} +. DOC_LEAD \\n[#DOC_LEAD]u+\\n[#DOC_LEAD_ADJ]u +.\" The "visual" bottom margin is what \n[nl] would report on the +.\" last line before the FOOTER trap is sprung +. nr #VISUAL_B_MARGIN \\n[#T_MARGIN]+(\\n[#LINES_PER_PAGE]*\\n[#DOC_LEAD]) +.\" Get the difference between #B_MARGIN and #VISUAL_B_MARGIN +. nr #FOOTER_DIFF (\\n[#PAGE_LENGTH]-\\n[#B_MARGIN])-\\n[#VISUAL_B_MARGIN] +.\" Set #B_MARGIN to 1 machine unit lower on the page than #VISUAL_B_MARGIN +. nr #B_MARGIN \\n[#B_MARGIN]+(\\n[#FOOTER_DIFF]-1) +.\" Set the FN_OVERFLOW_TRAP position +. nr #FN_OVERFLOW_TRAP_POS \\n[#B_MARGIN]-\\n[#FN_LEAD] +. if \\n[#PRINT_STYLE]=1 .nr #FN_OVERFLOW_TRAP_POS \\n[#ORIGINAL_B_MARGIN]u +.\" Set footer and footnote overflow traps +. if !\\n[#NO_TRAP_RESET] \{\ +. nr #FN_COUNT 0 1 +. nr #SPACE_REMAINING 0 +. nr #FN_DEPTH 0 +. nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]u +. wh \\n[.p]u FOOTER +. wh -(\\n[#FN_OVERFLOW_TRAP_POS]u) FN_OVERFLOW_TRAP +. ch FOOTER -\\n[#B_MARGIN]u +. \} +.END +\# +\# CHECK INDENT +\# ------------ +\# *Arguments: +\# <none> +\# *Function: +\# Adds left, right, or both indent values to document elements +\# like heads and subheads that are processed in environments. +\# +.MAC CHECK_INDENT END +. if \\n[#INDENT_LEFT_ACTIVE] \{\ +. in \\n[#L_INDENT]u +. if \\n[#QUOTE] \{\ +. in -\\n[#L_INDENT]u \"Because we added an indent in 2nd line of macro +. ll -\\n[#L_INDENT]u +. ta \\n[.l]u +. \} +. if \\n[#EPIGRAPH] \{\ +. in -\\n[#L_INDENT]u +. ll -\\n[#L_INDENT]u +. ta \\n[.l]u +. \} +. \} +. if \\n[#INDENT_RIGHT_ACTIVE] \{\ +. ll -\\n[#R_INDENT]u +. ta \\n[.l]u +. \} +. if \\n[#INDENT_BOTH_ACTIVE] \{\ +. in \\n[#BL_INDENT]u +. ll -\\n[#BR_INDENT]u +. ta \\n[.l]u +. if \\n[#QUOTE] \{\ +. in -\\n[#BL_INDENT]u +. ie \\n[#BR_INDENT]=\\n[#BL_INDENT] \{\ +. ll -\\n[#BR_INDENT]u +. ta \\n[.l]u +. \} +. el \{\ +. ll -(\\n[#BR_INDENT]u/2u) +. ta \\n[.l]u +. \} +. \} +. if \\n[#EPIGRAPH] \{\ +. in -\\n[#BL_INDENT]u +. ie \\n[#BR_INDENT]=\\n[#BL_INDENT] \{\ +. ll -\\n[#BR_INDENT]u +. ta \\n[.l]u +. \} +. el \{\ +. ll -(\\n[#BR_INDENT]u/2u) +. ta \\n[.l]u +. \} +. \} +. \} +.END +\# +\# REMOVE INDENT +\# ------------- +\# *Arguments: +\# <none> +\# *Function: +\# Removes left, right, or both indent values from document elements +\# like heads and subheads that are processed in environments. +\# +.MAC REMOVE_INDENT END +. in 0 +. ll \\n[#L_LENGTH]u +. ta \\n[.l]u +.END +\# +\# This .em (for all DOC_TYPEs, except 4 [LETTER]) ensures that +\# deferred footnotes and floats that happen on the 2nd to last page +\# get output, and the last page/col isn't flexed. +\# +.MAC TERMINATE END +. if dPDF.EXPORT .tm .ds last-page \\n%@\\n[#COL_NUM] +. ie \\n[#FN_DEPTH] \{\ +. ie \\n[#FN_DEFER] \{\ +. br +. nr #TERMINATE 1 +. FOOTNOTE +. nf +. FOOTNOTE OFF +. \} +. el \{\ +. br +. ch FN_OVERFLOW_TRAP +. FOOTER +. \} +. \} +. el \{\ +. br +. ch FN_OVERFLOW_TRAP +. FOOTER +. \} +. if \\n[defer] \ +' bp +.END +\# +\# END MACRO FOR LETTERS +\# --------------------- +\# *Arguments: +\# none +\# *Function: +\# The .em macro executed at the end of letters. Turns footers +\# and pagination off, terminates and outputs diversion CLOSING +\# (indented with the author's name underneath). +\# +.MAC ALL_DONE END +. ch FOOTER +. ch HEADER +. br +. if \\n[#DOC_TYPE]=4 \{\ +. if !'\\n[.z]'' \{\ +. br +. ALD \\*[$SIG_SPACE] +. di +. \} +. IQ CLEAR +. TQ +. LEFT +. ie !'\\*[$CLOSE_INDENT]'' .IL \\*[$CLOSE_INDENT] +. el .IL \\n[#DOC_L_LENGTH]u/2u +. sp +. if \\n[#CLOSING] \{\ +. CLOSING_TEXT +. br +. \} +. PRINT \\*[$AUTHOR_1] +. \} +.END +\# +\# Set up a default papersize of US letter +\# +.PAGEWIDTH 8.5i +.PAGELENGTH 11i +\# +\# ==================================================================== +\# +\# +++DOCUMENT PROCESSING ALIASES+++ +\# +\# Create aliases to make life easier for users: synonyms, short forms +\# and alternate spellings. +\# +.ALIAS CITATION BLOCKQUOTE +.ALIAS CITE BLOCKQUOTE +.ALIAS DOC_R_MARGIN DOC_RIGHT_MARGIN +.ALIAS DOC_L_MARGIN DOC_LEFT_MARGIN +.ALIAS DOC_L_LENGTH DOC_LINE_LENGTH +.ALIAS DOC_RMARGIN DOC_RIGHT_MARGIN +.ALIAS DOC_LMARGIN DOC_LEFT_MARGIN +.ALIAS DOC_LLENGTH DOC_LINE_LENGTH +.ALIAS DOC_FAM DOC_FAMILY +.ALIAS DOC_LS DOC_LEAD +.ALIAS DOC_PS DOC_PT_SIZE +.ALIAS FILL QUAD +.ALIAS PAGENUM PAGENUMBER +.ALIAS PAGINATION PAGINATE +.ALIAS PP_FT PP_FONT +.ALIAS TOC_PS TOC_PT_SIZE +\# +\# HEADER and FOOTER macros +\# ------------------------ +\# Because the type-style of headers and footers are managed +\# identically, and the type-style macros (_<type parameter>) all +\# require the correct name of the calling macro, it's necessary +\# to create HEADER_ and FOOTER_ macros here that are basically +\# aliases with an argument. +\# +.MAC FOOTER_CENTER_COLOR END +. HDRFTR_CENTER_COLOR \\$1 +.END +\# +.MAC FOOTER_CENTER_COLOUR END +. HDRFTR_CENTER_COLOR \\$1 +.END +\# +.MAC FOOTER_CENTER_FAM END +. HDRFTR_CENTER_FAMILY \\$1 +.END +\# +.MAC FOOTER_CENTER_FAMILY END +. HDRFTR_CENTER_FAMILY \\$1 +.END +\# +.MAC FOOTER_CENTER_FONT END +. HDRFTR_CENTER_FONT \\$1 +.END +\# +.MAC FOOTER_CENTER_FT END +. HDRFTR_CENTER_FONT \\$1 +.END +\# +.MAC FOOTER_CENTER_PS END +. HDRFTR_CENTER_SIZE \\$1 +.END +\# +.MAC FOOTER_CENTER_SIZE END +. HDRFTR_CENTER_SIZE \\$1 +.END +\# +.MAC FOOTER_CENTRE_CAPS END +. HDRFTR_CENTER_CAPS \\$1 +.END +\# +.MAC FOOTER_CENTRE_COLOR END +. HDRFTR_CENTER_COLOR \\$1 +.END +\# +.MAC FOOTER_CENTRE_COLOUR END +. HDRFTR_CENTER_COLOR \\$1 +.END +\# +.MAC FOOTER_CENTRE_FAM END +. HDRFTR_CENTER_FAMILY \\$1 +.END +\# +.MAC FOOTER_CENTRE_FAMILY END +. HDRFTR_CENTER_FAMILY \\$1 +.END +\# +.MAC FOOTER_CENTRE_FONT END +. HDRFTR_CENTER_FONT \\$1 +.END +\# +.MAC FOOTER_CENTRE_FT END +. HDRFTR_CENTER_FONT \\$1 +.END +\# +.MAC FOOTER_CENTRE_PS END +. HDRFTR_CENTER_SIZE \\$1 +.END +\# +.MAC FOOTER_CENTRE_SIZE END +. HDRFTR_CENTER_SIZE \\$1 +.END +\# +.MAC FOOTER_COLOR END +. HDRFTR_COLOR \\$1 +.END +\# +.MAC FOOTER_COLOUR END +. HDRFTR_COLOR \\$1 +.END +\# +.MAC FOOTER_FAM END +. HDRFTR_FAMILY \\$1 +.END +\# +.MAC FOOTER_FAMILY END +. HDRFTR_FAMILY \\$1 +.END +\# +.MAC FOOTER_LEFT_COLOR END +. HDRFTR_LEFT_COLOR \\$1 +.END +\# +.MAC FOOTER_LEFT_COLOUR END +. HDRFTR_LEFT_COLOR \\$1 +.END +\# +.MAC FOOTER_LEFT_FAM END +. HDRFTR_LEFT_FAMILY \\$1 +.END +\# +.MAC FOOTER_LEFT_FAMILY END +. HDRFTR_LEFT_FAMILY \\$1 +.END +\# +.MAC FOOTER_LEFT_FONT END +. HDRFTR_LEFT_FONT \\$1 +.END +\# +.MAC FOOTER_LEFT_FT END +. HDRFTR_LEFT_FONT \\$1 +.END +\# +.MAC FOOTER_LEFT_PS END +. HDRFTR_LEFT_SIZE \\$1 +.END +\# +.MAC FOOTER_LEFT_SIZE END +. HDRFTR_LEFT_SIZE \\$1 +.END +\# +.MAC FOOTER_RIGHT_COLOR END +. HDRFTR_RIGHT_COLOR \\$1 +.END +\# +.MAC FOOTER_RIGHT_COLOUR END +. HDRFTR_RIGHT_COLOR \\$1 +.END +\# +.MAC FOOTER_RIGHT_FAM END +. HDRFTR_RIGHT_FAMILY \\$1 +.END +\# +.MAC FOOTER_RIGHT_FAMILY END +. HDRFTR_RIGHT_FAMILY \\$1 +.END +\# +.MAC FOOTER_RIGHT_FONT END +. HDRFTR_RIGHT_FONT \\$1 +.END +\# +.MAC FOOTER_RIGHT_FT END +. HDRFTR_RIGHT_FONT \\$1 +.END +\# +.MAC FOOTER_RIGHT_PS END +. HDRFTR_RIGHT_SIZE \\$1 +.END +\# +.MAC FOOTER_RIGHT_SIZE END +. HDRFTR_RIGHT_SIZE \\$1 +.END +\# +.MAC FOOTER_RULE_COLOR END +. HDRFTR_RULE_COLOR \\$1 +.END +\# +.MAC FOOTER_SIZE END +. HDRFTR_SIZE \\$1 +.END +\# +.MAC HEADER_CENTER_COLOR END +. HDRFTR_CENTER_COLOR \\$1 +.END +\# +.MAC HEADER_CENTER_COLOUR END +. HDRFTR_CENTER_COLOR \\$1 +.END +\# +.MAC HEADER_CENTER_FAM END +. HDRFTR_CENTER_FAMILY \\$1 +.END +\# +.MAC HEADER_CENTER_FAMILY END +. HDRFTR_CENTER_FAMILY \\$1 +.END +\# +.MAC HEADER_CENTER_FONT END +. HDRFTR_CENTER_FONT \\$1 +.END +\# +.MAC HEADER_CENTER_FT END +. HDRFTR_CENTER_FONT \\$1 +.END +\# +.MAC HEADER_CENTER_PS END +. HDRFTR_CENTER_SIZE \\$1 +.END +\# +.MAC HEADER_CENTER_SIZE END +. HDRFTR_CENTER_SIZE \\$1 +.END +\# +.MAC HEADER_CENTRE_COLOR END +. HDRFTR_CENTER_COLOR \\$1 +.END +\# +.MAC HEADER_CENTRE_COLOUR END +. HDRFTR_CENTER_COLOR \\$1 +.END +\# +.MAC HEADER_CENTRE_FAM END +. HDRFTR_CENTER_FAMILY \\$1 +.END +\# +.MAC HEADER_CENTRE_FAMILY END +. HDRFTR_CENTER_FAMILY \\$1 +.END +\# +.MAC HEADER_CENTRE_FONT END +. HDRFTR_CENTER_FONT \\$1 +.END +\# +.MAC HEADER_CENTRE_FT END +. HDRFTR_CENTER_FONT \\$1 +.END +\# +.MAC HEADER_CENTRE_PS END +. HDRFTR_CENTER_SIZE \\$1 +.END +\# +.MAC HEADER_CENTRE_SIZE END +. HDRFTR_CENTER_SIZE \\$1 +.END +\# +.MAC HEADER_COLOR END +. HDRFTR_COLOR \\$1 +.END +\# +.MAC HEADER_COLOUR END +. HDRFTR_COLOR \\$1 +.END +\# +.MAC HEADER_FAM END +. HDRFTR_FAMILY \\$1 +.END +\# +.MAC HEADER_FAMILY END +. HDRFTR_FAMILY \\$1 +.END +\# +.MAC HEADER_LEFT_COLOR END +. HDRFTR_LEFT_COLOR \\$1 +.END +\# +.MAC HEADER_LEFT_COLOUR END +. HDRFTR_LEFT_COLOR \\$1 +.END +\# +.MAC HEADER_LEFT_FAM END +. HDRFTR_LEFT_FAMILY \\$1 +.END +\# +.MAC HEADER_LEFT_FAMILY END +. HDRFTR_LEFT_FAMILY \\$1 +.END +\# +.MAC HEADER_LEFT_FONT END +. HDRFTR_LEFT_FONT \\$1 +.END +\# +.MAC HEADER_LEFT_FT END +. HDRFTR_LEFT_FONT \\$1 +.END +\# +.MAC HEADER_LEFT_PS END +. HDRFTR_LEFT_SIZE \\$1 +.END +\# +.MAC HEADER_LEFT_SIZE END +. HDRFTR_LEFT_SIZE \\$1 +.END +\# +.MAC HEADER_RIGHT_COLOR END +. HDRFTR_RIGHT_COLOR \\$1 +.END +\# +.MAC HEADER_RIGHT_COLOUR END +. HDRFTR_RIGHT_COLOR \\$1 +.END +\# +.MAC HEADER_RIGHT_FAM END +. HDRFTR_RIGHT_FAMILY \\$1 +.END +\# +.MAC HEADER_RIGHT_FAMILY END +. HDRFTR_RIGHT_FAMILY \\$1 +.END +\# +.MAC HEADER_RIGHT_FONT END +. HDRFTR_RIGHT_FONT \\$1 +.END +\# +.MAC HEADER_RIGHT_FT END +. HDRFTR_RIGHT_FONT \\$1 +.END +\# +.MAC HEADER_RIGHT_PS END +. HDRFTR_RIGHT_SIZE \\$1 +.END +\# +.MAC HEADER_RIGHT_SIZE END +. HDRFTR_RIGHT_SIZE \\$1 +.END +\# +.MAC HEADER_RULE_COLOR END +. HDRFTR_RULE_COLOR \\$1 +.END +\# +.MAC HEADER_SIZE END +. HDRFTR_SIZE \\$1 +.END +\# +\# Aliases for other HEADER and FOOTER macros. +\# +.ALIAS BIBLIOGRAPHY_FOOTER_CENTER BIBLIOGRAPHY_HDRFTR_CENTER +.ALIAS BIBLIOGRAPHY_FOOTER_CENTRE BIBLIOGRAPHY_HDRFTR_CENTER +.ALIAS BIBLIOGRAPHY_HEADER_CENTER BIBLIOGRAPHY_HDRFTR_CENTER +.ALIAS BIBLIOGRAPHY_HEADER_CENTRE BIBLIOGRAPHY_HDRFTR_CENTER +. +.ALIAS ENDNOTES_FOOTER_CENTER ENDNOTES_HDRFTR_CENTER +.ALIAS ENDNOTES_FOOTER_CENTRE ENDNOTES_HDRFTR_CENTER +.ALIAS ENDNOTES_HEADER_CENTER ENDNOTES_HDRFTR_CENTER +.ALIAS ENDNOTES_HEADER_CENTRE ENDNOTES_HDRFTR_CENTER +. +.ALIAS FOOTER_CENTER HDRFTR_CENTER +.ALIAS TOC_PAGEFOOTER_CENTER HDRFTR_CENTER +.ALIAS TOC_PAGEFOOTER_CENTRE HDRFTR_CENTER +.ALIAS FOOTER_CENTER_CAPS _HDRFTR_CAPS +.ALIAS FOOTER_CENTER_PAD HDRFTR_CENTER_PAD +.ALIAS FOOTER_CENTER_SMALLCAPS _HDRFTR_SMALLCAPS +.ALIAS FOOTER_CENTRE HDRFTR_CENTER +.ALIAS FOOTER_CENTRE_CAPS _HDRFTR_CAPS +.ALIAS FOOTER_CENTRE_PAD HDRFTR_CENTER_PAD +.ALIAS FOOTER_CENTRE_SMALLCAPS _HDRFTR_SMALLCAPS +.ALIAS FOOTER_LEFT HDRFTR_LEFT +.ALIAS FOOTER_LEFT_CAPS _HDRFTR_CAPS +.ALIAS FOOTER_LEFT_SMALLCAPS _HDRFTR_SMALLCAPS +.ALIAS FOOTER_PLAIN HDRFTR_PLAIN +.ALIAS FOOTER_RECTO HDRFTR_RECTO +.ALIAS FOOTER_RIGHT HDRFTR_RIGHT +.ALIAS FOOTER_RIGHT_CAPS _HDRFTR_CAPS +.ALIAS FOOTER_RIGHT_SMALLCAPS _HDRFTR_SMALLCAPS +.ALIAS FOOTER_RULE HDRFTR_RULE +.ALIAS FOOTER_RULE_GAP HDRFTR_RULE_GAP +.ALIAS FOOTER_VERSO HDRFTR_VERSO +. +.ALIAS HEADER_CENTER HDRFTR_CENTER +.ALIAS TOC_PAGEHEADER_CENTER HDRFTR_CENTER +.ALIAS TOC_PAGEHEADER_CENTRE HDRFTR_CENTER +.ALIAS HEADER_CENTER_CAPS _HDRFTR_CAPS +.ALIAS HEADER_CENTER_PAD HDRFTR_CENTER_PAD +.ALIAS HEADER_CENTER_SMALLCAPS _HDRFTR_SMALLCAPS +.ALIAS HEADER_CENTRE HDRFTR_CENTER +.ALIAS HEADER_CENTRE_CAPS _HDRFTR_CAPS +.ALIAS HEADER_CENTRE_PAD HDRFTR_CENTER_PAD +.ALIAS HEADER_CENTRE_SMALLCAPS _HDRFTR_SMALLCAPS +.ALIAS HEADER_LEFT HDRFTR_LEFT +.ALIAS HEADER_LEFT_CAPS _HDRFTR_CAPS +.ALIAS HEADER_LEFT_SMALLCAPS _HDRFTR_SMALLCAPS +.ALIAS HEADER_PLAIN HDRFTR_PLAIN +.ALIAS HEADER_RECTO HDRFTR_RECTO +.ALIAS HEADER_RIGHT HDRFTR_RIGHT +.ALIAS HEADER_RIGHT_CAPS _HDRFTR_CAPS +.ALIAS HEADER_RIGHT_SMALLCAPS _HDRFTR_SMALLCAPS +.ALIAS HEADER_RULE HDRFTR_RULE +.ALIAS HEADER_RULE_GAP HDRFTR_RULE_GAP +.ALIAS HEADER_VERSO HDRFTR_VERSO +. +.ALIAS SWITCH_FOOTERS SWITCH_HDRFTR +.ALIAS SWITCH_HEADERS SWITCH_HDRFTR +\# +\# Create type-style aliases for tags, titles, and page elements +\# +\# These are used for creating aliases with while loops +\# +.ds ELEMENT_TYPE_1 BIBLIOGRAPHY_STRING +.ds ELEMENT_TYPE_2 BIBLIOGRAPHY_HEADER +.ds ELEMENT_TYPE_3 BLOCKQUOTE +.ds ELEMENT_TYPE_4 CITATION +.ds ELEMENT_TYPE_5 CITE +.ds ELEMENT_TYPE_6 ENDNOTES_HEADER +.ds ELEMENT_TYPE_7 ENDNOTE_STRING +.ds ELEMENT_TYPE_8 EPIGRAPH +.ds ELEMENT_TYPE_9 HDRFTR_CENTER +.ds ELEMENT_TYPE_10 HDRFTR_LEFT +.ds ELEMENT_TYPE_11 HDRFTR_RIGHT +.ds ELEMENT_TYPE_12 LINENUMBER +.ds ELEMENT_TYPE_13 PAGENUM +.ds ELEMENT_TYPE_14 QUOTE +.ds ELEMENT_TYPE_15 TOC_HEADER +.ds ELEMENT_TYPE_16 CODE +.ds ELEMENT_TYPE_17 FINIS +.ds ELEMENT_TYPE_18 COPYRIGHT +\# +\# Create aliases for _FAMILY +.ALIAS BIBLIOGRAPHY_FAMILY _FAMILY +.ALIAS COVER_FAMILY _FAMILY +.ALIAS DOCHEADER_FAMILY _FAMILY +.ALIAS DOC_COVER_FAMILY _FAMILY +.ALIAS ENDNOTE_FAMILY _FAMILY +.ALIAS ENDNOTE_LINENUMBER_FAMILY _FAMILY +.ALIAS ENDNOTE_NUMBER_FAMILY _FAMILY +.ALIAS ENDNOTE_STRING_FAMILY _FAMILY +.ALIAS ENDNOTE_TITLE_FAMILY _FAMILY +.ALIAS FOOTNOTE_FAMILY _FAMILY +.ALIAS HDRFTR_FAMILY _FAMILY +.ALIAS PAGENUMBER_FAMILY _FAMILY +.ALIAS TOC_FAMILY _FAMILY +.ALIAS TOC_PAGENUMBER_FAMILY _FAMILY +.ALIAS TOC_PN_FAMILY _FAMILY +.ALIAS TOC_TITLE_FAMILY _FAMILY +\# +.nr #LOOP 0 1 +.while \n+[#LOOP]<=18 \{\ +. ALIAS \*[ELEMENT_TYPE_\n[#LOOP]]_FAMILY _FAMILY +.\} +\# Covers, docheader +.nr #LOOP 0 1 +.while \n+[#LOOP]<=12 \{\ +. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_FAMILY _FAMILY +. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_FAMILY _FAMILY +. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_FAMILY _FAMILY +.\} +\# +\# Create aliases for _FONT +.ALIAS BIBLIOGRAPHY_FONT _FONT +.ALIAS ENDNOTE_FONT _FONT +.ALIAS ENDNOTE_LINENUMBER_FONT _FONT +.ALIAS ENDNOTE_NUMBER_FONT _FONT +.ALIAS ENDNOTE_TITLE_FONT _FONT +.ALIAS FOOTNOTE_FONT _FONT +.ALIAS TOC_PN_FONT _FONT +\# +.nr #LOOP 0 1 +.while \n+[#LOOP]<=18 \{\ +. ALIAS \*[ELEMENT_TYPE_\n[#LOOP]]_FONT _FONT +.\} +\# Covers, docheader +.nr #LOOP 0 1 +.while \n+[#LOOP]<=12 \{\ +. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_FONT _FONT +. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_FONT _FONT +. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_FONT _FONT +.\} +\# +\# Create aliases for _SIZE +.ALIAS ENDNOTE_LINENUMBER_SIZE _SIZE +.ALIAS ENDNOTE_NUMBER_SIZE _SIZE +.ALIAS ENDNOTE_TITLE_SIZE _SIZE +.ALIAS FOOTNOTE_SIZE _SIZE +.ALIAS HDRFTR_SIZE _SIZE +.ALIAS TOC_PN_SIZE _SIZE +\# +.nr #LOOP 0 1 +.while \n+[#LOOP]<=18 \{\ +. ALIAS \*[ELEMENT_TYPE_\n[#LOOP]]_SIZE _SIZE +.\} +\# Covers, docheader +.nr #LOOP 0 1 +.while \n+[#LOOP]<=12 \{\ +. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_SIZE _SIZE +. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_SIZE _SIZE +. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_SIZE _SIZE +.\} +\# +\# Create aliases for TITLE_LEAD +.nr #LOOP 0 1 +.while \n+[#LOOP]<=12 \{\ +. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_LEAD TITLE_LEAD +. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_LEAD TITLE_LEAD +. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_LEAD TITLE_LEAD +.\} +\# +\# Create aliases for _UNDERLINE +.ALIAS BIBLIOGRAPHY_HEADER_UNDERLINE _UNDERLINE +.ALIAS BIBLIOGRAPHY_HEADER_UNDERSCORE _UNDERLINE +.ALIAS BIBLIOGRAPHY_STRING_UNDERLINE _UNDERLINE +.ALIAS BIBLIOGRAPHY_STRING_UNDERSCORE _UNDERLINE +.ALIAS BIB_STRING_UNDERLINE _UNDERLINE +.ALIAS ENDNOTES_HEADER_UNDERLINE _UNDERLINE +.ALIAS ENDNOTES_HEADER_UNDERSCORE _UNDERLINE +.ALIAS ENDNOTES_STRING_UNDERLINE _UNDERLINE +.ALIAS ENDNOTES_STRING_UNDERSCORE _UNDERLINE +.ALIAS ENDNOTE_TITLE_UNDERLINE _UNDERLINE +.ALIAS ENDNOTE_TITLE_UNDERSCORE _UNDERLINE +.ALIAS EN_STRING_UNDERLINE _UNDERLINE +.ALIAS EN_STRING_UNDERSCORE _UNDERLINE +.ALIAS TOC_HEADER_UNDERLINE _UNDERLINE +.ALIAS TOC_HEADER_UNDERSCORE _UNDERLINE +\# +.nr #LOOP 0 1 +.while \n+[#LOOP]<=12 \{\ +. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE _UNDERLINE +. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_UNDERSCORE _UNDERLINE +. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE _UNDERLINE +. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERSCORE _UNDERLINE +. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE _UNDERLINE +. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERSCORE _UNDERLINE +.\} +\# +\# Create aliases for _COLOR +.ALIAS BIBLIOGRAPHY_HEADER_COLOR _COLOR +.ALIAS COVER_COLOR _COLOR +.ALIAS DOCHEADER_COLOR _COLOR +.ALIAS ENDNOTE_TITLE_COLOR _COLOR +.ALIAS FINIS_COLOR _COLOR +.ALIAS FOOTNOTE_COLOR _COLOR +.ALIAS HDRFTR_COLOR _COLOR +.ALIAS HDRFTR_RULE_COLOR _COLOR +.ALIAS LINEBREAK_COLOR _COLOR +.ALIAS SECTION_COLOR _COLOR +\# +.nr #LOOP 0 1 +.while \n+[#LOOP]<=18 \{\ +. ALIAS \*[ELEMENT_TYPE_\n[#LOOP]]_COLOR _COLOR +.\} +\# Covers, docheader +.nr #LOOP 0 1 +.while \n+[#LOOP]<=12 \{\ +. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_COLOR _COLOR +. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_COLOR _COLOR +. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_COLOR _COLOR +.\} +\# +\# Create aliases for _CAPS +.ALIAS BIBLIOGRAPHY_HEADER_CAPS _CAPS +.ALIAS BIBLIOGRAPHY_STRING_CAPS _CAPS +.ALIAS ENDNOTE_TITLE_CAPS _CAPS +\# +.nr #LOOP 0 1 +.while \n+[#LOOP]<=12 \{\ +. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_CAPS _CAPS +. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_CAPS _CAPS +. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_CAPS _CAPS +.\} +\# +\# Create aliases for _SMALLCAPS +.ALIAS BIBLIOGRAPHY_HEADER_SMALLCAPS _SMALLCAPS +.ALIAS BIBLIOGRAPHY_STRING_SMALLCAPS _SMALLCAPS +.ALIAS ENDNOTE_TITLE_SMALLCAPS _SMALLCAPS +.ALIAS HDRFTR_CENTER_SMALLCAPS _SMALLCAPS +.ALIAS HDRFTR_LEFT_SMALLCAPS _SMALLCAPS +.ALIAS HDRFTR_RIGHT_SMALLCAPS _SMALLCAPS +\# +.nr #LOOP 0 1 +.while \n+[#LOOP]<=12 \{\ +. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_SMALLCAPS _SMALLCAPS +. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_SMALLCAPS _SMALLCAPS +. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_SMALLCAPS _SMALLCAPS +.\} +\# +\# Create aliases for _QUAD +.ALIAS BIBLIOGRAPHY_HEADER_QUAD _QUAD +.ALIAS BIBLIOGRAPHY_QUAD _QUAD +.ALIAS BIBLIOGRAPHY_STRING_QUAD _QUAD +.ALIAS BLOCKQUOTE_QUAD _QUAD +.ALIAS COPYRIGHT_QUAD _QUAD +.ALIAS COVER_COPYRIGHT_QUAD _QUAD +.ALIAS COVER_MISC_QUAD _QUAD +.ALIAS COVER_QUAD _QUAD +.ALIAS DOCHEADER_QUAD _QUAD +.ALIAS DOC_COVER_COPYRIGHT_QUAD _QUAD +.ALIAS DOC_COVER_MISC_QUAD _QUAD +.ALIAS DOC_COVER_QUAD _QUAD +.ALIAS DOC_QUAD _QUAD +.ALIAS ENDNOTES_HEADER_QUAD _QUAD +.ALIAS ENDNOTE_QUAD _QUAD +.ALIAS ENDNOTE_STRING_QUAD _QUAD +.ALIAS ENDNOTE_TITLE_QUAD _QUAD +.ALIAS EPIGRAPH_QUAD _QUAD +.ALIAS FOOTNOTE_QUAD _QUAD +.ALIAS MISC_QUAD _QUAD +.ALIAS TOC_HEADER_QUAD _QUAD +\# +\# Support aliases +\# +.ALIAS COL_BREAK COL_NEXT +.ALIAS DOC_COVER COVER +.ALIAS DOC_COVERS COVERS +.ALIAS DOC_COVERTITLE COVERTITLE +.ALIAS DOC_COVER_COUNTS_PAGES COVER_COUNTS_PAGES +.ALIAS DOC_COVER_LEAD COVER_LEAD +.ALIAS DOC_DOC_COVERTITLE COVERTITLE +.ALIAS DO_DOC_COVER DO_COVER +.ALIAS PRINT_FOOTNOTE_RULE FOOTNOTE_RULE +\# +\# Miscellaneous aliases +.ALIAS SECTION LINEBREAK +.ALIAS SECTION_CHAR LINEBREAK_CHAR +\# +\# Miscellaneous macros to take care of backward compatibility +\# ----------------------------------------------------------- +\# +\# As of 1.1.9, EL and TN got changed to make TRAP...TRAP OFF +\# unnecessary for users. However, I used both macros extensively +\# throughout this file (in conjunction with TRAP...TRAP OFF). +\# EOL is the old EL; used only in om.tmac. +\# +.MAC EOL END +. if \\n[.vpt] \{\ +. vpt 0 +. nr #RESTORE_TRAP 1 +. \} +. br +. sp -1v +. if \\n[#RESTORE_TRAP] \{\ +. vpt +. rr #RESTORE_TRAP +. \} +.END +\# +\# PREPROCESSOR SUPPORT +\# ==================== +\# +\# Utility macros--label and caption styles, lists collector, lists +\# generator. +\# +.nr lists*target 0 1 +. +.MAC get-label-type END +. if \\n[all]=1 .ds label-type eqn +. if \\n[all]=2 .ds label-type pdf-img +. if \\n[all]=3 .ds label-type pic +. if \\n[all]=4 .ds label-type tbl +. if \\n[all]=5 .ds label-type floating +.END +\# +.MAC set-defaults END +. if '\\*[\\*[label-type]*\\*[spec-type]-family]'' \ +. ds \\*[label-type]*\\*[spec-type]-family \\*[$DOC_FAM]\" +. if '\\*[\\*[label-type]*\\*[spec-type]-font]'' \ +. ds \\*[label-type]*\\*[spec-type]-font R\" +. if '\\*[\\*[label-type]*\\*[spec-type]-size-change]'' \ +. ds \\*[label-type]*\\*[spec-type]-size-change +0\" +. if !r \\*[label-type]*\\*[spec-type]-autolead \ +. nr \\*[label-type]*\\*[spec-type]-autolead 2 +. if '\\*[\\*[label-type]*\\*[spec-type]-space]'' \ +. ds \\*[label-type]*\\*[spec-type]-space +0\" +. if '\\*[\\*[label-type]*\\*[spec-type]-color]'' \ +. ds \\*[label-type]*\\*[spec-type]-color black\" +. if '\\*[\\*[label-type]*\\*[spec-type]-quad]'' \{\ +. ie '\\*[label-type]'eqn' \{\ +. if '\\*[spec-type]'caption' \ +. ds \\*[label-type]*\\*[spec-type]-quad C\" +. \} +. el .ds \\*[label-type]*\\*[spec-type]-quad L\" +. \} +. if '\\n[\\*[label-type]*\\*[spec-type]-quad-on-ll]'' \ +. nr \\*[label-type]*\\*[spec-type]-quad-on-ll 1 +. if '\\*[spec-type]'caption' \ +. nr default-left 1 +.END +\# +.MAC set-inline-specs END +. ds \\*[label-type]*\\*[spec-type]-specs \ +\f[\\*[\\*[label-type]*\\*[spec-type]-family]\\*[\\*[label-type]*\\*[spec-type]-font]]\ +\s[\\*[\\*[label-type]*\\*[spec-type]-size-change]]\ +\m[\\*[\\*[label-type]*\\*[spec-type]-color]] +.END +\# +\# Line lengths, indents, and quads for captions and labels. +\# Aliased for eqn, pic, pdf-image, and tbl. +\# +.MAC SET_QUAD END +. ds label-type \\$0 +. substring label-type 0 2 +. if '\\*[label-type]'PDF' .ds label-type pdf-img +. if '\\*[label-type]'TBL' .ds label-type tbl +. if '\\*[label-type]'PIC' .ds label-type pic +. if '\\*[label-type]'EQN' .ds label-type eqn +. ds spec-type \\$0 +. substring spec-type -6 -10 +. if '\\*[spec-type]'PTION' .ds spec-type caption +. if '\\*[spec-type]'LABEL' .ds spec-type label +. if '\\*[spec-type]'OURCE' .ds spec-type source +. QUAD \\$1 +. ds \\*[label-type]*\\*[spec-type]-quad \\$1 +. substring \\*[label-type]*\\*[spec-type]-quad 0 0 +. if '\\*[label-type]'pdf-img' \{\ +. if '\\*[\\*[label-type]*\\*[spec-type]-quad]'L' \{\ +. if !\\n[pdf-img*\\*[spec-type]-quad-on-ll] \{\ +. ie !'\\*[pdf-img:pos]'-R' \ +. ll \\n[pdf-img:ind]u+\\n[pdf-img:width]u+\\n[pdf-img:frame-inset]u +. el .ll -\\n[ind-pre-img]u +. if '\\*[pdf-img:pos]'-C' \ +. in \\n[pdf-img:ind]u-\\n[pdf-img:frame-inset]u +. if '\\*[pdf-img:pos]'-R' \ +. in \\n[.l]u-(\\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u)) +. if '\\*[pdf-img:pos]'-I' \ +. in \\n[pdf-img:ind]u +. \} +. \} +. if '\\*[\\*[label-type]*\\*[spec-type]-quad]'C' \{\ +. if !\\n[pdf-img*\\*[spec-type]-quad-on-ll] \{\ +. if '\\*[pdf-img:pos]'-L' \ +. ll \\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u) +. if '\\*[pdf-img:pos]'-C' \{\ +. ll (\\n[ll-pre-img]u-\\n[pdf-img:width]u/2u+(\\n[pdf-img:frame-inset]u))+\\n[pdf-img:width]u +. in \\n[.l]u-(\\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u)) +. \} +. if '\\*[pdf-img:pos]'-R' \{\ +. ll -\\n[ind-pre-img]u +. in \\n[.l]u-(\\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u)) +. \} +. if '\\*[pdf-img:pos]'-I' \{\ +. ll \\n[pdf-img:ind]u+\\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u) +. in \\n[pdf-img:ind]u +. \} +. \} +. \} +. if '\\*[\\*[label-type]*\\*[spec-type]-quad]'R' \{\ +. if !\\n[pdf-img*\\*[spec-type]-quad-on-ll] \{\ +. if '\\*[pdf-img:pos]'-L' \ +. ll \\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u] +. if '\\*[pdf-img:pos]'-C' \{\ +. ll (\\n[.l]u-\\n[ind-pre-img]u-\\n[pdf-img:width]u/2u)+\\n[pdf-img:width]u+\\n[pdf-img:frame-inset]u +. in \\n[pdf-img:ind]u +. \} +. if '\\*[pdf-img:pos]'-R' \{\ +. ll -\\n[ind-pre-img]u +. in \\n[.l]u-\\n[pdf-img:width]u +. \} +. if '\\*[pdf-img:pos]'-I' \{\ +. ll \\n[pdf-img:ind]u+\\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u) +. in \\n[pdf-img:ind]u +. \} +. \} +. \} +. \} +. if '\\*[label-type]'pic' \{\ +. if !\\n[pic*\\*[spec-type]-quad-on-ll] \{\ +. ie \\n[pic*left] .ll \\n[pic*div-width]u +. el \{\ +. ll \\n[pic*div-width]u +. in (\\n[ll-pre-float]u-\\n[pic*div-width]u)/2u +. \} +. \} +. \} +. if '\\*[label-type]'tbl' \{\ +. if !\\n[tbl*\\*[spec-type]-quad-on-ll] \{\ +. ie \\n[tbl*center] \{\ +. ie '\\*[spec-type]'label' \{\ +.\" Differentiate between a tbl label and a float label +. ie !'\\*[ev-current]'FLOAT' \{\ +. ll \\n[ll-pre-tbl]u-\\n[TW]u/2u+\\n[TW]u +. if \\n[tbl*have-header] \ +. in (\\n[ll-pre-tbl]u-\\n[.i]u)-\\n[TW]u/2u+\\n[.i]u +. \} +. el \{\ +. in \\n[ll-pre-tbl]u+\\n[.i]u-\\n[TW]u/2u +. ll \\n[.l]u-\\n[.i]u +. \} +. \} +. el \{\ +. if '\\*[spec-type]'source' \{\ +. ie \\n[float*tbl] \{\ +. ll \\n[TW]u +\!. in \\n[ll-pre-tbl]u-\\n[TW]u/2u+\\n[tmp-ind]u +. \} +. el \{\ +. ll \\n[TW]u+\\n[ind-pre-tbl]u +. ie \\n[ind-pre-tbl] \ +\!. in \\n[ll-pre-tbl]u-\\n[TW]u/2u +. el \ +\!. in \\n[ll-pre-tbl]u-\\n[TW]u/2u+\\n[tmp-ind]u +. \} +\!. ti -\\n[tmp-ind]u +. \} +. if '\\*[spec-type]'caption' \{\ +. ll \\n[ll-pre-tbl]u+\\n[.i]u-\\n[TW]u/2u+\\n[TW]u +. in \\n[ll-pre-tbl]u+\\n[.i]u-\\n[TW]u/2u +. \} +. \} +. \} +. el \{\ +. ll \\n[TW]u+\\n[.i]u +.\" Check the effect of setting a source in non-MLA mode. +. if '\\*[spec-type]'source' \{\ +. if \\n[#MLA] \{\ +. ie \\n[float*tbl] \{\ +\!. ll \\n[TW]u+\\n[ind-pre-tbl]u +\!. in \\n[tmp-ind]u+\\n[ind-pre-tbl]u +\!. ti -\\n[tmp-ind]u +. \} +. el \{\ +. ll \\n[TW]u+\\n[ind-pre-tbl]u +\!. in \\n[tmp-ind]u +\!. ti -\\n[tmp-ind]u +. \} +. \} +. \} +. \} +. \} +. \} +.END +\# +.ALIAS TBL*SET_CAPTION_QUAD SET_QUAD +.ALIAS TBL*SET_LABEL_QUAD SET_QUAD +.ALIAS TBL*SET_SOURCE_QUAD SET_QUAD +.ALIAS PDF_IMG*SET_CAPTION_QUAD SET_QUAD +.ALIAS PDF_IMG*SET_LABEL_QUAD SET_QUAD +.ALIAS PIC*SET_CAPTION_QUAD SET_QUAD +.ALIAS PIC*SET_LABEL_QUAD SET_QUAD +\# +.MAC style END +. ds label-type \\$0 +. substring label-type 0 2 +. if '\\*[label-type]'img' .ds label-type pdf-img +. if '\\*[label-type]'tbl' .ds label-type tbl +. if '\\*[label-type]'pic' .ds label-type pic +. ds spec-type \\$0 +. substring spec-type 4 6 +. if '\\*[spec-type]'cap' .ds spec-type caption +. if '\\*[spec-type]'lab' .ds spec-type label +. if '\\*[spec-type]'sou' .ds spec-type source +. ie \\n[#PRINT_STYLE]=1 .TYPEWRITER +. el \{\ +' fam \\*[\\*[label-type]*\\*[spec-type]-family] +' ft \\*[\\*[label-type]*\\*[spec-type]-font] +' ps \\n[#DOC_PT_SIZE]u\\*[\\*[label-type]*\\*[spec-type]-size-change] +. \m[\\*[\\*[label-type]*\\*[spec-type]-color]] +. \} +.END +\# +.ALIAS tbl*caption-style style +.ALIAS tbl*label-style style +.ALIAS tbl*source-style style +.ALIAS img*caption-style style +.ALIAS img*label-style style +.ALIAS img*source-style style +.ALIAS pic*caption-style style +.ALIAS pic*label-style style +.ALIAS pic*source-style style +\# +\# User style macros +\# +\# TYPE SPECS FOR LABELS, CAPTIONS, AND SOURCES +\# -------------------------------------------- +\# Aliased as CAPTIONS and LABELS for eqn, pic, tbl, and pdf images. +\# *Arguments: +\# EQN | IMG | PIC | TBL | FLOATING \ +\# Remaining arguments are optional +\# FAMILY fam \ +\# FONT sty \ +\# SIZE +|-size \ +\# QUAD LEFT | CENTRE | RIGHT [ ON_LL ] \ +\# COLOR color \ +\# AUTOLEAD n \ +\# ADJUST +|-n +\# *Function: +\# Sets type specs for captions, labels, and sources according to +\# calling alias name +\# *Notes: +\# SIZE is relative to running text. +\# QUAD optional arg says quad on full line length rather than +\# pdf-img or pre-processor output. +\# +.MAC CAPTION_LABEL_SPECS END +. if '\\$0'CAPTIONS' .ds spec-type caption +. if '\\$0'LABELS' .ds spec-type label +. if '\\$0'SOURCES' .ds spec-type source +. ds $LABEL-TYPE \\$1 +. if '\\$1'EQN' .ds label-type eqn +. if '\\$1'FLOATING' .ds label-type floating +. if '\\$1'IMG' .ds label-type pdf-img +. if '\\$1'PIC' .ds label-type pic +. if '\\$1'TBL' .ds label-type tbl +. if '\\$1'ALL' .nr all 1 +. shift +. nr loop-counter \\n[#NUM_ARGS] +. nr loop-count 0 1 +. while \\n+[loop-count]<=\\n[loop-counter] \{\ +. if '\\$1'FAMILY' \{\ +. shift +. ie r all \{\ +. nr all 0 1 +. while \\n+[all]<=5 \{\ +. get-label-type +. ds \\*[label-type]*\\*[spec-type]-family \\$1 +. \} +. \} +. el .ds \\*[label-type]*\\*[spec-type]-family \\$1 +. if \\n[#PRINT_STYLE]=1 \ +. ds \\*[label-type]*\\*[spec-type]-family \\*[$TYPEWRITER_FAM] +. shift +. \} +. if '\\$1'FONT' \{\ +. shift +. ie r all \{\ +. nr all 0 1 +. while \\n+[all]<=5 \{\ +. get-label-type +. ds \\*[label-type]*\\*[spec-type]-font \\$1 +. \} +. \} +. el .ds \\*[label-type]*\\*[spec-type]-font \\$1 +. if \\n[#PRINT_STYLE]=1 \ +. ds \\*[label-type]*\\*[spec-type]-font R +. shift +. \} +. if '\\$1'SIZE' \{\ +. shift +. ie r all \{\ +. nr all 0 1 +. while \\n+[all]<=5 \{\ +. get-label-type +. ds \\*[label-type]*\\*[spec-type]-size-change \\$1 +. \} +. \} +. el .ds \\*[label-type]*\\*[spec-type]-size-change \\$1 +. if \\n[#PRINT_STYLE]=1 \ +. ds \\*[label-type]*\\*[spec-type]-size-change +0 +. shift +. \} +. if '\\$1'AUTOLEAD' \{\ +. shift +. ie r all \{\ +. nr all 0 1 +. while \\n+[all]<=5 \{\ +. get-label-type +. nr \\*[label-type]*\\*[spec-type]-autolead (p;\\$1) +. \} +. \} +. el .nr \\*[label-type]*\\*[spec-type]-autolead (p;\\$1) +. shift +. \} +. if '\\$1'QUAD' \{\ +. shift +. ie r all \{\ +. nr all 0 1 +. while \\n+[all]<=5 \{\ +. get-label-type +. ds \\*[label-type]*\\*[spec-type]-quad \\$1 +. substring \\*[label-type]*\\*[spec-type]-quad 0 0 +. if '\\$2'ON_LL' \ +. nr \\*[label-type]*\\*[spec-type]-quad-on-ll 1 +. \} +. \} +. el \{\ +. ds \\*[label-type]*\\*[spec-type]-quad \\$1 +. substring \\*[label-type]*\\*[spec-type]-quad 0 0 +. if \\n[\\*[label-type]*\\*[spec-type]-quad-on-ll] \ +. rr \\*[label-type]*\\*[spec-type]-quad-on-ll +. if '\\$2'ON_LL' \ +. nr \\*[label-type]*\\*[spec-type]-quad-on-ll 1 +. \} +. ie '\\$2'ON_LL' .shift 2 +. el .shift +. \} +. if '\\$1'COLOR' \{\ +. shift +. ie r all \{\ +. nr all 0 1 +. while \\n+[all]<=5 \{\ +. get-label-type +. ds \\*[label-type]*\\*[spec-type]-color \\$1 +. \} +. \} +. el .ds \\*[label-type]*\\*[spec-type]-color \\$1 +. if \\n[#PRINT_STYLE]=1 \ +. ds \\*[label-type]*\\*[spec-type]-color black +. shift +. \} +. if '\\$1'ADJUST' \{\ +. shift +. ie r all \{\ +. nr all 0 1 +. while \\n+[all]<=5 \{\ +. get-label-type +. ds \\*[label-type]*\\*[spec-type]-space \\$1 +. \} +. \} +. el .ds \\*[label-type]*\\*[spec-type]-space \\$1 +. if \\n[#PRINT_STYLE]=1 \ +. ds \\*[label-type]*\\*[spec-type]-space +0 +. shift +. \} +. if '\\$1'INDENT' \{\ +. shift +. ie '\\*[label-type]'floating' \{\ +. ie \B'\\$1' \{\ +. nr \\*[label-type]*\\*[spec-type]-indent-l \\$1 +. shift +. \} +. el \{\ +. ie '\\$1'RIGHT' \{\ +. shift +. nr \\*[label-type]*\\*[spec-type]-indent-r \\$1 +. shift +. \} +. el \{\ +. tm1 \ +"[mom]: Missing value for INDENT in macro '\\$0' at line \\n[.c]. +. ab \ +[mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +. \} +. \} +. \} +. el \{\ +. shift +. if !\\n[#SKIP_INDENT_WARNING] \{\ +. tm1 \ +"[mom]: '\\$0 \\*[$LABEL-TYPE]' at line \\n[.c] does not take an indent. +. tm1 \ +" No indent(s) will be applied. +. nr #SKIP_INDENT_WARNING 1 +. \} +. if '\\$1'INDENT' .shift +. if '\\$1'RIGHT' .shift +. if \B'\\$1' .shift +. \} +. \} +. \} +. ie r all \{\ +. nr all 0 1 +. while \\n+[all]<=5 \{\ +. get-label-type +. set-defaults +. set-inline-specs +. \} +. \} +. el \{\ +. set-defaults +. set-inline-specs +. \} +. ds revert-specs \f[]\s[0]\m[] +. rr #SKIP_INDENT_WARNING +. rr all +.END +. +.ALIAS CAPTIONS CAPTION_LABEL_SPECS +.ALIAS LABELS CAPTION_LABEL_SPECS +.ALIAS SOURCES CAPTION_LABEL_SPECS +\# +\# LABELS and CAPTIONS (floats and [block]quotes) +\# ---------------------------------------------- +\# *Arguments: +\# <text of label or caption> [ CAPTION <text of caption> ] \ +\# [ TO_LIST FIGURES | EQUATIONS | TABLES ] +\# *Function: +\# Add label/caption to float, quotes, and blockquotes +\# *Notes: +\# Aliased as CAPTION. If called as CAPTION, prints all +\# double-quoted text strings including ".br" or ".sp"; +\# may come at top or bottom of labelled object, or both. +\# If called as LABEL, optional arg CAPTION attaches caption +\# text to the label; may only come at bottom of object and +\# can only take one double-quoted text string. +\# +\# These strings allow users to create labels of the form +\# 'Fig. \*[chapter].\*[fig-label]', e.g. 'Fig. 1.1' +\# +.ds chapter \\n[#CH_NUM] +.ds fig-label \\n+[fig*label-num] +.ds tbl-label \\n+[tbl*label-num] +.ds eqn-label \\n+[eqn*label-num] +\# +\# +.MAC LABEL END +. br +. if \\n[.ns] \{\ +. vpt 0 +. rs +. nop \& +. sp -1 +. vpt +. \} +. if r chop-space .sp -1 +. rr chop-space +. if \\n[#QUOTE] .nr q-float 1 +. if '\\$0'CAPTION' \{\ +. ds labelcap caption +. ds $FLOATING_CAPTION \\$* +. \} +. if '\\$0'LABEL' \{\ +. ds labelcap label +. ds $FLOATING_LABEL \\$1 +. shift +. nr loop-counter 0 1 +. nr loop-count \\n[#NUM_ARGS] +. while \\n+[loop-counter]<=\\n[loop-count] \{\ +. if '\\$1'CAPTION' \{\ +. nr with-caption 1 +. ds $FLOATING_CAPTION \\$2 +. shift 2 +. \} +. if '\\$1'SHORT_CAPTION' \{\ +. ds $LIST_CAPTION \\$2 +. shift 2 +. \} +. if '\\$1'TO_LIST' \{\ +. nr to-list 1 +. if '\\$2'FIGURES' .ds $LIST_OF FIGURES +. if '\\$2'EQUATIONS' .ds $LIST_OF EQUATIONS +. if '\\$2'TABLES' .ds $LIST_OF TABLES +. shift 2 +. \} +. \} +. \} +. if \\n[D-float] \ +. if \\n[.d]>\\n[D-float] \ +. sp \\n[.d]u-\\n[D-float]u +. rr has-\\*[labelcap] +. nr has-\\*[labelcap] 1 +. rr @bottom +. if !\\n[.d]=0 .nr @bottom 1 +. ds ev-current \\n[.ev] +. ev floating*labelcap +. evc \\*[ev-current] +. ps \\n[#DOC_PT_SIZE]u +. if \\n[floating*\\*[labelcap]-indent-l] \ +. in \\n[floating*\\*[labelcap]-indent-l]u +. if \\n[floating*\\*[labelcap]-indent-r] \ +. ll -\\n[floating*\\*[labelcap]-indent-r]u +. ds $QUAD_PREV \\*[$QUAD_VALUE] +. QUAD \\*[floating*\\*[labelcap]-quad] +.\" 1/4 space before both captions and labels +\!. if \\\\n[nl]=\\\\n[#PAGE_TOP] .nr deferred-float 1 +. if !\\n[deferred-float] \{\ +. ie !\\n[@bottom] \{\ +. ie '\\n[.z]'' \ +. sp \\n[#DOC_LEAD]u/4u +. el \ +. if '\\n[.z]'FLOAT*DIV' .sp \\n[#DOC_LEAD]u/4u +. \} +. el \{\ +. sp \\n[#DOC_LEAD]u/4u +. rr @bottom +. \} +. \} +\!. if \\\\n[deferred-float] \{\ +. if !\\n[#QUOTE] .sp -(\\n[#DOC_LEAD]u/4u) +\!. \} +. nr floating*\\*[labelcap]-lead-diff \\n[.v] +. vs \\n[.ps]u+\\n[floating*\\*[labelcap]-autolead]u +. nr floating*\\*[labelcap]-lead-diff \ + \\n[floating*\\*[labelcap]-lead-diff]-\\n[.v] +. if !\\n[deferred-float] \ +. RESTORE_SPACE +. ie '\\*[labelcap]'label' \{\ +. if \\n[to-list] \{\ +.\" Strip prefix from label if list-type is being autolabelled +.\" Becomes $LIST_LABEL +. if '\\*[$LIST_OF]'FIGURES' \ +. if r fig*label-num .STRIP_PRFX_SFFX "\\*[$FLOATING_LABEL]" +. if '\\*[$LIST_OF]'TABLES' \ +. if r tbl*label-num .STRIP_PRFX_SFFX "\\*[$FLOATING_LABEL]" +. if '\\*[$LIST_OF]'EQUATIONS' \ +. if r eqn*label-num .STRIP_PRFX_SFFX "\\*[$FLOATING_LABEL]" +. \} +. ds $FLOATING_LABEL \ +\F[\\\\*[floating*label-family]]\ +\f[\\\\*[floating*label-font]]\ +\s[\\\\*[floating*label-size-change]]\ +\m[\\\\*[floating*label-color]]\ +\\*[$FLOATING_LABEL] +. \} +. el \{\ +. if !\\n[deferred-float] \ +. sp \\n[floating*caption-lead-diff]u +. if !'\\*[floating*caption-space]'' \ +. sp \\*[floating*caption-space] +. while !'\\$1'' \{\ +. nop \ +\F[\\*[floating*caption-family]]\ +\f[\\*[floating*caption-font]]\ +\s[\\*[floating*caption-size-change]]\ +\m[\\*[floating*caption-color]]\ +\\$1 +. if \\n[.u]=1 .br +. shift +. \} +. if !'\\*[floating*caption-space]'' \ +. sp -\\*[floating*caption-space] +. \} +. if \\n[with-caption] \{\ +. nr width-label \w'\\*[$FLOATING_LABEL]' +. if !\\n[width-label]=0 \ +. as $FLOATING_LABEL \0 +. as $FLOATING_LABEL \ +\F[\\\\*[floating*caption-family]]\ +\f[\\\\*[floating*caption-font]]\ +\s[\\\\*[floating*caption-size-change]]\ +\m[\\\\*[floating*caption-color]]\ +\\*[$FLOATING_CAPTION] +. if '\\*[$LIST_CAPTION]'' \ +. ds $LIST_CAPTION \\*[$FLOATING_CAPTION] +. \} +. if !'\\*[$FLOATING_LABEL]'' \{\ +. sp \\n[floating*label-lead-diff]u +. if !'\\*[floating*label-space]'' \ +. sp \\*[floating*label-space] +. nop \\*[$FLOATING_LABEL] +. if \\n[.u]=1 .br +. if !'\\*[floating*label-space]'' \ +. sp -\\*[floating*label-space] +. \} +.\" 1/4 space after captions and labels +. ie !\\n[@bottom] \ +. sp \\n[#DOC_LEAD]u/4u +. el \{\ +. if '\\n[.z]'FLOAT*DIV' \{\ +. sp \\n[#DOC_LEAD]u/4u +\!. if \\\\n[deferred-float] \ +. sp -(\\n[#DOC_LEAD]u/4u) +. \} +. \} +\!. rr deferred-float +. ll +. vs +. QUAD \\*[$QUAD_PREV] +. in +. ev +. if \\n[to-list] \{\ +. nr loop-counter 0 1 +. nr loop-count 2 +. ds labelcap label +. while \\n+[loop-counter]<=\\n[loop-count] \{\ +. ds \\*[labelcap]-family \\*[floating*\\*[labelcap]-family] +. ds \\*[labelcap]-font \\*[floating*\\*[labelcap]-font] +. ds \\*[labelcap]-size-change \\*[floating*\\*[labelcap]-size-change] +. ds \\*[labelcap]-color \\*[floating*\\*[labelcap]-color] +. ie '\\*[$LISTS_FAM]'' \ +. ds floating*\\*[labelcap]-family \\*[$DOC_FAM] +. el \ +. ds floating*\\*[labelcap]-family \\*[$LISTS_FAM] +. if '\\*[$LISTS_FT]'' \ +. ds floating*\\*[labelcap]-font R +. ds floating*\\*[labelcap]-size-change +0 +. ds floating*\\*[labelcap]-color pdf:href.colour +. ds labelcap caption +. \} +. ie '\\*[$LIST_LABEL]'' .TO_\\*[$LIST_OF] "\\*[$FLOATING_LABEL] +. el .TO_\\*[$LIST_OF] "\\*[$LIST_LABEL]" "\\*[$LIST_CAPTION] +. rr to-list +. nr loop-counter 0 1 +. nr loop-count 2 +. ds labelcap label +. while \\n+[loop-counter]<=\\n[loop-count] \{\ +. ds floating*\\*[labelcap]-family \\*[\\*[labelcap]-family] +. ds floating*\\*[labelcap]-font \\*[\\*[labelcap]-font] +. ds floating*\\*[labelcap]-size-change \\*[\\*[labelcap]-size-change] +. ds floating*\\*[labelcap]-color \\*[\\*[labelcap]-color] +. ds labelcap caption +. \} +. \} +. rr with-caption +. rm $FLOATING_CAPTION +. rm $FLOATING_LABEL +. rm $LIST_LABEL +. rm $LIST_CAPTION +.END +. +.ALIAS CAPTION LABEL +. +.MAC STRIP_PRFX_SFFX END +.\" Strip suffix from label string +. ds suffix \\$1 +. substring suffix -1 +.\" If suffix is '.' ',' ':' or ')', remove it. +. if '\\*[suffix]'.' .nr strip-suffix 1 +. if '\\*[suffix]',' .nr strip-suffix 1 +. if '\\*[suffix]':' .nr strip-suffix 1 +. if '\\*[suffix]')' .nr strip-suffix 1 +. if \\n[strip-suffix] \{\ +. ds $LIST_LABEL \\$1 +. substring $LIST_LABEL 0 -2 +. \} +. rr strip-suffix +. if '\\*[$LIST_LABEL]'' .ds $LIST_LABEL \\$1 +.\" Remove prefix (e.g. "Fig. ") by looping through $LIST_LABEL +.\" until a digit is encountered +. nr loop-counter 100 \" arbitrary +. nr loop-count 0 1 +. while \\n+[loop-count]<=\\n[loop-counter] \{\ +. substring $LIST_LABEL 1 +. if \B'\\*[$LIST_LABEL]' .break +. \} +. substring $LIST_LABEL 1 +.END +\# +\# CAPTION_AFTER_LABEL +\# ------------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Sets register indicating non-MLA captions should come after labels. +\# +.MAC CAPTION_AFTER_LABEL END +. if '\\$1'IMG' .ds type pdf-img +. if '\\$1'PIC' .ds type pic +. if '\\$1'TBL' .ds type tbl +. if !\\n[#MLA] \{\ +. nr \\*[type]*caption-after-label 1 +. if '\\$1'ALL' \{\ +. nr pdf-img*caption-after-label 1 +. nr tbl*caption-after-label 1 +. nr pic*caption-after-label 1 +. \} +. if !'\\$2'' \{\ +. ie !'\\$1'ALL' .rr \\*[type]*caption-after-label +. el \{\ +. rr pdf-img*caption-after-label +. rr tbl*caption-after-label +. rr pic*caption-after-label +. \} +. \} +. \} +.END +\# +\# AUTOLABELLING +\# ------------- +\# *Argument: +\# [ PREFIX <prefix> SUFFIX <suffix> ] | <anything> +\# *Function: +\# Turns label autonumbering on of off; optionally lets user set +\# prefix and suffix for labels. +\# *Notes: +\# Aliased for images (pdf), tbl, pic, and eqn. +\# +.MAC AUTOLABEL END +. if '\\$0'AUTOLABEL_EQUATIONS' .ds label-type eqn +. if '\\$0'AUTOLABEL_TABLES' .ds label-type tbl +. if '\\$0'AUTOLABEL_PIC' \{\ +. ds label-type pic +. nr fig*autolabel 1 +. \} +. if '\\$0'AUTOLABEL_IMAGES' \{\ +. ds label-type pdf-img +. nr fig*autolabel 1 +. \} +. if !'\\$1'' \{\ +. ds \\*[label-type]-label-args \\$1 +. substring \\*[label-type]-label-args -1 -3 +. \} +. if '\\*[\\*[label-type]-label-args]'FIX' .nr \\*[label-type]-label-args 1 +. if '\\*[\\*[label-type]-label-args]'TER' .nr \\*[label-type]-label-args 1 +. if !\\n[\\*[label-type]*label-num] \ +. nr \\*[label-type]*label-num 0 1 +. if '\\*[label-type]'pdf-img' \ +. if !\\n[fig*label-num] .nr fig*label-num 0 1 +. if '\\*[label-type]'pic' \ +. if !\\n[pic*label-num] .nr fig*label-num 0 1 +. nr \\*[label-type]*autolabel 1 +. nr loop-counter 0 1 +. nr loop-count \\n[#NUM_ARGS] +. while \\n+[loop-counter]<=\\n[loop-count] \{\ +. if '\\$1'PREFIX' \{\ +. ds \\*[label-type]*label-prfx \\$2 +. nr \\*[label-type]*label-prfx-set 1 +. shift 2 +. \} +. if '\\$1'SUFFIX' \{\ +. ds \\*[label-type]*label-sffx \\$2 +. nr \\*[label-type]*label-sffx-set 1 +. shift 2 +. \} +. if '\\$1'PREFIX_CHAPTER' \{\ +. if \\n[fig*autolabel] .nr fig*label-with-chapter 1 +. nr \\*[label-type]*label-with-chapter 1 +. shift 1 +. if \B'\\$1' \{\ +. nr #CH_NUM \\$1 +. shift +. \} +. \} +. \} +. if '\\*[\\*[label-type]*label-prfx]'' \{\ +. if '\\*[label-type]'eqn' \ +. if !\\n[\\*[label-type]*label-prfx-set] \ +. ds \\*[label-type]*label-prfx (\" +. if '\\*[label-type]'pic' \ +. if !\\n[\\*[label-type]*label-prfx-set] \ +. ds \\*[label-type]*label-prfx Fig. \" +. if '\\*[label-type]'pdf-img' \ +. if !\\n[\\*[label-type]*label-prfx-set] \ +. ds \\*[label-type]*label-prfx Fig. \" +. if '\\*[label-type]'tbl' \ +. if !\\n[\\*[label-type]*label-prfx-set] \ +. ds \\*[label-type]*label-prfx Table \" +. \} +. if '\\*[\\*[label-type]*label-sffx]'' \{\ +. if '\\*[label-type]'eqn' \ +. if !\\n[\\*[label-type]*label-sffx-set] \ +. ds \\*[label-type]*label-sffx )\" +. if '\\*[label-type]'pic' \ +. if !\\n[\\*[label-type]*label-sffx-set] \ +. ds \\*[label-type]*label-sffx .\" +. if '\\*[label-type]'pdf-img' \ +. if !\\n[\\*[label-type]*label-sffx-set] \ +. ds \\*[label-type]*label-sffx .\" +. if '\\*[label-type]'tbl' \ +. if !\\n[\\*[label-type]*label-sffx-set] \ +. ds \\*[label-type]*label-sffx .\" +. \} +. if \\n[\\*[label-type]-label-args]>0 \{\ +. if \\n[\\*[label-type]*label-prfx-set]+\\n[\\*[label-type]*label-sffx-set]=1 \{\ +. ie (\\n[\\*[label-type]*label-prfx-set]=1)&(\\n[\\*[label-type]*label-sffx-set]=0) \ +. ds missing-arg SUFFIX +. el .ds missing-arg PREFIX +. tm1 "[mom]: You must supply a \\*[missing-arg] argument to \\$0. +. tm1 " If you wish the \\*[missing-arg] to be blank, use \\*[missing-arg] "". +. ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +. \} +. \} +. if \\n[#NUM_ARGS]=1 \{\ +. rr fig*autolabel +. rr \\*[label-type]*autolabel +. rr \\*[label-type]*label-prfx-set +. rr \\*[label-type]*label-sffx-set +. \} +. rr \\*[label-type]-label-args +.END +\# +.ALIAS AUTOLABEL_EQUATIONS AUTOLABEL +.ALIAS AUTOLABEL_IMAGES AUTOLABEL +.ALIAS AUTOLABEL_PIC AUTOLABEL +.ALIAS AUTOLABEL_TABLES AUTOLABEL +\# +\# SET AUTOLABEL NUMBER +\# -------------------- +\# *Argument: +\# FIG | TBL | PIC | EQN <n> +\# *Function: +\# Sets the autolabel number for the corresponding label type. +\# *Notes: +\# Used to set autolabel number when manual labelling of floats +\# (in conjunction with TO_LIST) disrupts auto-incrementing. +\# +.MAC SET_AUTOLABEL END +. rm labelnum-type +. if '\\$1'FIG' .ds labelnum-type fig +. if '\\$1'TBL' .ds labelnum-type tbl +. if '\\$1'PIC' .ds labelnum-type pic +. if '\\$1'EQN' .ds labelnum-type eqn +. nr labelnum \\$2-1 +. nr \\*[labelnum-type]*label-num \\n[labelnum] 1 +.END +\# +\# MLA STYLE +\# --------- +\# *Argument: +\# <none> | <anything> +\# *Function: +\# Sets or removes register #MLA. +\# *Notes: +\# MLA formatting differs from other styles wrt caption and +\# label placement. +\# +.MAC MLA END +. ie '\\$1'' \{\ +. nr #MLA 1 +. nr pdf-img*caption-after-label 1 +. nr pic*caption-after-label 1 +. rr tbl*caption-after-label +. \} +. el \ +. rr #MLA +.END +\# +.MAC mla@error END +. tm1 "[mom]: MLA style enabled, but \\$1 has no corresponding \\$2. +. ab [mom]: Aborting '\\$3' at \\$4, line \\$5. +.END +\# +\# LISTS_OF +\# -------- +\# *Aliases: +\# LIST_OF_EQUATIONS +\# LIST_OF_FIGURES +\# LIST_OF_TABLES +\# *Arguments: +\# [ TITLE_STRING <string> ] [ START_PAGENUM <pagenumber> ] +\# *Function: +\# Generates lists-of based on calling alias. +\# *Notes: +\# Called at end of file. +\# If after TOC, and TOC is being auto-relocated, lists are also +\# relocated. If called before, lists are output at end of file. +\# +.MAC LISTS_OF END +. EOL +. ds $LIST_TYPE \\$0 +. nr #LISTS 1 +. substring $LIST_TYPE -1 -4 +. if '\\*[$LIST_TYPE]'URES' \{\ +. ds $LIST_TYPE FIGURES +. ds list-type fig +. ds label-type fig +. ds \\*[$LIST_TYPE]_TITLE_STRING "List of Figures +. \} +. if '\\*[$LIST_TYPE]'BLES' \{\ +. ds $LIST_TYPE TABLES +. ds list-type tbl +. ds label-type tbl +. ds \\*[$LIST_TYPE]_TITLE_STRING "List of Tables +. \} +. if '\\*[$LIST_TYPE]'IONS' \{\ +. ds $LIST_TYPE EQUATIONS +. ds list-type eqn +. ds label-type eqn +. ds \\*[$LIST_TYPE]_TITLE_STRING "List of Equations +. \} +. nr #LIST_OF_\\*[$LIST_TYPE] 1 +. nr loop-count 0 1 +. nr loop-counter \\n[#NUM_ARGS] +. while \\n+[loop-count]<=\\n[loop-counter] \{\ +. if '\\$1'TITLE_STRING' \{\ +. ds \\*[$LIST_TYPE]_TITLE_STRING \\$2 +. shift 2 +. \} +. if '\\$1'START_PAGENUM' \{\ +. nr #\\*[$LIST_TYPE]_START_PAGENUM \\$2 +. shift 2 +. \} +. \} +. if dPDF.EXPORT \ +. if \\n[#FLEX_ACTIVE] \ +. if !\\n[#NO_FLEX] \ +. tm .ds pre-list-\\n%@\\n[#COL_NUM] 1 +. char \[leader] " . +. LEADER_CHARACTER \[leader] +. if \\n[#LINENUMBERS]=1 \{\ +. NUMBER_LINES OFF +. nr #LINENUMBERS 2 +. \} +. if \\n[#FINIS] \{\ +. if \\n[#FOOTERS_WERE_ON] \ +. FOOTERS +. \} +. if \\n[#FOOTERS_ON]=1 \{\ +. if !'\\*[$HDRFTR_CENTER_OLD]'' .ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD] +. ie \\n[#LISTS_NO_PAGENUM]=1 .PAGINATION OFF +. el .PAGINATE +. \} +. if \\n[#FOOTERS_WERE_ON] \ +. if !\\n[#FINIS] .FOOTERS OFF +. rr #COLUMNS +. COLLATE +. if \\n[#PRINT_STYLE]=1 \{\ +. if \\n[#SINGLE_SPACE] .LS 24 +. DOC_LEAD_ADJUST +. \} +. if \\n[#FINIS] \{\ +. if \\n[#FOOTERS_WERE_ON] .FOOTERS +. rr #FOOTERS_WERE_ON +. if \\n[#PAGINATION_WAS_ON] \{\ +. nr #PAGINATE 1 +. rr #PAGINATION_WAS_ON +. \} +. rr #FINIS +. \} +. ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_NEW] +. rm $HDRFTR_CENTER_OLD +. rm $HDRFTR_CENTER_NEW +. rr #COLLATED_DOC +. DOCTYPE DEFAULT +. DOCHEADER +. rr #DOCHEADER_ADVANCE +. TITLE "\\*[\\*[$LIST_TYPE]_TITLE_STRING] +. AUTHOR "" +. L_MARGIN \\n[#DOC_L_MARGIN]u +. LL \\n[#DOC_L_LENGTH]u +. if '\\*[$LISTS_FAM]'' \ +. ds $LISTS_FAM \\*[$TOC_FAM] +. if '\\*[$LISTS_FT]'' \ +. ds $LISTS_FT \\*[$TOC_TITLE_FT] +. if !\\n[#LISTS_PS] \ +. nr #LISTS_PS \\n[#TOC_PS] +. ps \\n[#LISTS_PS]u +. if !\\n[#LISTS_LEAD] \ +. nr #LISTS_LEAD \\n[#TOC_LEAD] +. if \\n[#PRINT_STYLE]=2 \{\ +. ie \\n[#LISTS_LEAD_ADJUST]=1 \{\ +. nr #DOC_LEAD \\n[#LISTS_LEAD] +. DOC_LEAD_ADJUST +. TRAPS +. \} +. el \{\ +. nr #DOC_LEAD \\n[#LISTS_LEAD] +. DOC_LEAD_ADJUST OFF +. \} +. \} +. ie !'\\*[$LISTS_TITLE_QUAD]'' \ +. DOCHEADER_QUAD \\*[$LISTS_TITLE_QUAD] +. el .DOCHEADER_QUAD \\*[$TOC_HEADER_QUAD] +. if !'\\*[$LISTS_TITLE_FAM]'' \ +. TITLE_FAMILY \\*[$LISTS_TITLE_FAM] +. if !'\\*[$LISTS_TITLE_FT]'' \ +. TITLE_FONT \\*[$LISTS_TITLE_FT] +. if !'\\*[$LISTS_TITLE_SIZE]'' \ +. TITLE_SIZE \\*[$LISTS_TITLE_SIZE] +. if !'\\*[$LISTS_TITLE_COLOR]'' \ +. TITLE_COLOR \\*[$LISTS_TITLE_COLOR] +. if \\n[#LISTS_TITLE_CAPS] \ +. TITLE_CAPS +. if \\n[#LISTS_TITLE_SMALLCAPS] \ +. TITLE_SMALLCAPS +. if \\n[#LISTS_TITLE_UNDERSCORE] \{\ +. TITLE_UNDERSCORE \ +\\*[DOUBLE] \ +\\*[$LISTS_OF_UL_WT] \ +\\*[$LISTS_OF_UL_GAP] \ +\\*[$LISTS_OF_RULE_GAP] +. \} +. if '\\*[$LISTS_PN_FAM]'' \ +. ds $LISTS_PN_FAM \\*[$TOC_PN_FAM] +. if '\\*[$LISTS_PN_FT]'' \ +. ds $LISTS_PN_FT \\*[$TOC_PN_FT] +. if '\\*[$LISTS_PN_SIZE_CHANGE]'' \ +. ds $LISTS_PN_SIZE_CHANGE \\*[$TOC_PN_SIZE_CHANGE] +. if !\\n[#EQN_PN_PADDING] \ +. nr #EQN_PN_PADDING \\n[#TOC_PN_PADDING] +. if !\\n[#FIG_PN_PADDING] \ +. nr #FIG_PN_PADDING \\n[#TOC_PN_PADDING] +. if !\\n[#TBL_PN_PADDING] \ +. nr #TBL_PN_PADDING \\n[#TOC_PN_PADDING] +. ie '\\*[$LISTS_PAGENUM_STYLE]'' \ +. PAGENUM_STYLE \\*[$TOC_PAGENUM_STYLE] +. el \ +. PAGENUM_STYLE \\*[$LISTS_PAGENUM_STYLE] +. if r #\\*[$LIST_TYPE]_START_PAGENUM \ +. PAGENUMBER \\n[#\\*[$LIST_TYPE]_START_PAGENUM] +. if r #LISTS_NO_PAGENUM .PAGINATION off +. HEADER_LEFT "\\*[$HDRFTR_LEFT] +. HEADER_RIGHT "\\*[$HDRFTR_RIGHT] +. HEADER_CENTER "\\*[\\*[$LIST_TYPE]_TITLE_STRING] +. if \\n[#LINENUMBERS]=2 .nr #LINENUMBERS 3 +.\" Get num placeholders for ch. num and label num. +. if \\n[\\*[list-type]*autolabel] \{\ +. if \\n[\\*[label-type]*label-with-chapter] \{\ +. if \\n[#CH_NUM]<1000 .nr chapno-width 3 +. if \\n[#CH_NUM]<100 .nr chapno-width 2 +. if \\n[#CH_NUM]<10 .nr chapno-width 1 +. \} +. if \\n[\\*[list-type]*label-num]<1000 .nr label-width 3 +. if \\n[\\*[list-type]*label-num]<100 .nr label-width 2 +. if \\n[\\*[list-type]*label-num]<10 .nr label-width 1 +.\" Calculate width of label-num tab +. nr label-width \\n[\\*[list-type]*label-width] +. \} +. if \\n[#SLANT_ON] .nop \\*[SLANTX] +. if \\n[#COLUMNS]=1 .nr #COLUMNS 0 +. START +. if \\n[#PRINT_STYLE]=2 .sp -1 +. if '\\*[$LIST_TYPE]'FIGURES' .LIST_OF_FIG +. if '\\*[$LIST_TYPE]'TABLES' .LIST_OF_TBL +. if '\\*[$LIST_TYPE]'EQUATIONS' .LIST_OF_EQN +. if \\n[#LINENUMBERS]=3 \{\ +. NUMBER_LINES RESUME +. nr #LINENUMBERS 1 +. nn 1 +. \} +. rr #LISTS +. pdfsync +.END +.\" +.ALIAS LIST_OF_EQUATIONS LISTS_OF +.ALIAS LIST_OF_FIGURES LISTS_OF +.ALIAS LIST_OF_TABLES LISTS_OF +\# +\# LISTS-OF STYLE +\# -------------- +\# *Arguments: +\# FAMILY fam \ +\# FONT sty \ +\# PT_SIZE size \ +\# LEAD leading [ADJUST] \ +\# TITLE_FAMILY fam \ +\# TITLE_FONT sty \ +\# TITLE_SIZE +|-size \ +\# TITLE_QUAD LEFT | CENTER | RIGHT \ +\# TITLE_COLOR color \ +\# TITLE_CAPS \ +\# TITLE_NO_CAPS \ +\# TITLE_SMALLCAPS \ +\# TITLE_NO_SMALLCAPS \ +\# TITLE_UNDERSCORE [ DOUBLE] <wt> <gap> (dbl-rule-gap) \ +\# NO_PAGINATION \ +\# PAGENUM_STYLE format \ +\# PN_FAMILY fam \ +\# PN_FONT sty \ +\# PN_SIZE +|-size \ +\# PN_PADDING n +\# *Function: +\# Allows setting of all style parameters for lists-of. +\# *Notes: +\# Assumption is that lists-of will all have the same style. +\# TOC style is used if LISTS_STYLE is omitted. +\# +.MAC LISTS_STYLE END +. nr loop-count 0 1 +. nr loop-counter \\n[#NUM_ARGS] +. while \\n+[loop-count]<=\\n[loop-counter] \{\ +. if '\\$1'FAMILY' \{\ +. ds $LISTS_FAM \\$2 +. shift 2 +. \} +. if '\\$1'FONT' \{\ +. ds $LISTS_FT \\$2 +. shift 2 +. \} +. if '\\$1'TITLE_FAMILY' \{\ +. ds $LISTS_TITLE_FAM \\$2 +. shift 2 +. \} +. if '\\$1'TITLE_FONT' \{\ +. ds $LISTS_TITLE_FT \\$2 +. shift 2 +. \} +. if '\\$1'TITLE_SIZE' \{\ +. ds $LISTS_TITLE_SIZE \\$2 +. shift 2 +. \} +. if '\\$1'TITLE_QUAD' \{\ +. ds $LISTS_TITLE_QUAD \\$2 +. shift 2 +. \} +. if '\\$1'TITLE_COLOR' \{\ +. ds $LISTS_TITLE_COLOR \\$2 +. shift 2 +. \} +. if '\\$1'TITLE_CAPS' \{\ +. nr #LISTS_TITLE_CAPS 1 +. shift 1 +. \} +. if '\\$1'TITLE_NO_CAPS' \{\ +. rr #LISTS_TITLE_CAPS +. shift 1 +. \} +. if '\\$1'TITLE_SMALLCAPS' \{\ +. nr #LISTS_TITLE_SMALLCAPS 1 +. shift 1 +. \} +. if '\\$1'TITLE_NO_SMALLCAPS' \{\ +. rr #LISTS_TITLE_NO_SMALLCAPS +. shift 1 +. \} +.\" UNDERSCORE and UNDERLINE are identical, but we can't evaluate +.\" the results of two string comparisons. +. if '\\$1'TITLE_UNDERSCORE' \{\ +. nr #LISTS_TITLE_UNDERSCORE 1 +. shift +. ie '\\$1'DOUBLE' \{\ +. ds DOUBLE DOUBLE +. shift +. if \B'\\$1' \{\ +. ds $LISTS_OF_UL_WT \\$1 +. shift +. \} +. if \B'\\$1' \{\ +. ds $LISTS_OF_UL_GAP \\$1 +. shift +. \} +. if \B'\\$1' \{\ +. ds $LISTS_OF_RULE_GAP \\$1 +. shift +. \} +. \} +. el \{\ +. if \B'\\$1' \{\ +. ds $LISTS_OF_UL_WT \\$1 +. shift +. \} +. if \B'\\$1' \{\ +. ds $LISTS_OF_UL_GAP \\$1 +. shift +. \} +. \} +. \} +. if '\\$1'TITLE_UNDERLINE' \{\ +. nr #LISTS_TITLE_UNDERSCORE 1 +. shift +. ie '\\$1'DOUBLE' \{\ +. ds DOUBLE DOUBLE +. shift +. if \B'\\$1' \{\ +. ds $LISTS_OF_UL_WT \\$1 +. shift +. \} +. if \B'\\$1' \{\ +. ds $LISTS_OF_UL_GAP \\$1 +. shift +. \} +. if \B'\\$1' \{\ +. ds $LISTS_OF_RULE_GAP \\$1 +. shift +. \} +. \} +. el \{\ +. if \B'\\$1' \{\ +. ds $LISTS_OF_UL_WT \\$1 +. shift +. \} +. if \B'\\$1' \{\ +. ds $LISTS_OF_UL_GAP \\$1 +. shift +. \} +. \} +. \} +. if '\\$1'TITLE_NO_UNDERSCORE' \{\ +. rr #LISTS_TITLE_UNDERSCORE 1 +. rm DOUBLE +. rm $LISTS_OF_UL_WT +. rm $LISTS_OF_UL_GAP +. rm $LISTS_OF_RULE_GAP +. shift +. \} +. if '\\$1'TITLE_NO_UNDERLINE' \{\ +. rr #LISTS_TITLE_UNDERSCORE 1 +. rm DOUBLE +. rm $LISTS_OF_UL_WT +. rm $LISTS_OF_UL_GAP +. rm $LISTS_OF_RULE_GAP +. shift +. \} +. if '\\$1'PT_SIZE' \{\ +. nr #LISTS_PS (p;\\$2) +. shift 2 +. \} +. if '\\$1'LEAD' \{\ +. nr #LISTS_LEAD (p;\\$2) +. ie !'\\$3'ADJUST' \{\ +. nr #LISTS_LEAD_ADJUST 0 +. shift 2 +. \} +. el \{\ +. nr #LISTS_LEAD_ADJUST 1 +. shift 3 +. \} +. \} +. if '\\$1'NO_PAGINATION' \{\ +. nr #LISTS_NO_PAGENUM 1 +. shift 1 +. \} +. if '\\$1'PAGENUM_STYLE' \{\ +. ds $LISTS_PAGENUM_STYLE \\$2 +. shift 2 +. \} +. if '\\$1'PN_FAMILY' \{\ +. ds $LISTS_PN_FAM \\$2 +. shift 2 +. \} +. if '\\$1'PN_FONT' \{\ +. ds $LISTS_PN_FT \\$2 +. shift 2 +. \} +. if '\\$1'PN_SIZE' \{\ +. ds $LISTS_PN_SIZE_CHANGE \\$2 +. shift 2 +. \} +. if '\\$1'EQN_PN_PADDING' \{\ +. nr #EQN_PN_PADDING \\$2 +. shift 2 +. \} +. if '\\$1'FIG_PN_PADDING' \{\ +. nr #FIG_PN_PADDING \\$2 +. shift 2 +. \} +. if '\\$1'TBL_PN_PADDING' \{\ +. nr #TBL_PN_PADDING \\$2 +. shift 2 +. \} +. \} +.END +\# +\# Lists-of collector +\# Strings to allocate space for leaders and entry page numbers +\# +.ds $LISTS_PN \\*[ST102]\F[\\*[$LISTS_PN_FAM]]\f[\\*[$LISTS_PN_FT]]\ +\s[\\n[#LISTS_PS]u]^\\*[ST102X]\\*[ST103]\s[\\\\*[$LISTS_PN_SIZE_CHANGE]]\ +\h'.5m'\h'\w'0'u*\\\\n[#LISTS_PN_PADDING]u'\\*[ST103X] +\# +.ds $LISTS_PN_TYPEWRITE \\*[ST102]^\\*[ST102X]\\*[ST103]\|\ +\h'\w'\0'u*\\\\n[#LISTS_PN_PADDING]u'\\*[ST103X] +\# +.MAC LISTS_COLLECTOR END +. nr #LISTS_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ] +. if \\n[#KERN] .nr #RESTORE_KERN 1 +. KERN OFF +. if '\\$0'TO_EQUATIONS' \{\ +. ds list-type eqn +. ds label-type eqn +. da LIST_OF_EQN +\!. nr #LISTS_PN_PADDING \\\\n[#EQN_PN_PADDING] +. \} +. if '\\$0'TO_FIGURES' \{\ +. ds list-type fig +. ds label-type fig +. if (\\n[pdf-img*have-label]=1):(\\n[pdf-img*autolabel]=1):\ +(\\n[pic*autolabel]=1):(\\n[pic*have-label]=1) \{\ +. nr \\*[label-type]*have-label 1 +. if !'\\*[pdf-img*label]'' .rn pdf-img*label \\*[label-type]*label +. if !'\\*[pic*label]'' .rn pic*label \\*[label-type]*label +. \} +. da LIST_OF_FIG +\!. nr #LISTS_PN_PADDING \\\\n[#FIG_PN_PADDING] +. \} +. if '\\$0'TO_TABLES' \{\ +. ds list-type tbl +. ds label-type tbl +. da LIST_OF_TBL +\!. nr #LISTS_PN_PADDING \\\\n[#TBL_PN_PADDING] +. \} +. br +. ie \\n[#PRINT_STYLE]=1 \{\ +\!. fam \\*[$TYPEWRITER_FAM] +\!. ft R +\!. ps \\*[$TYPEWRITER_PS] +. ds _TYPEWRITE _TYPEWRITE +. \} +. el \{\ +\!. FAMILY \\\\*[$LISTS_FAM] +\!. FONT \\\\*[$LISTS_FT] +\!. ps \\\\n[#LISTS_PS]u +. \} +. if \\n[#PRINT_STYLE]=2 .rm _TYPEWRITE +\!. PAD_MARKER ^ +\!. vpt 0 +. ie !\\n[\\*[label-type]*autolabel] \{\ +.\" If there is a label... +. if !'\\*[\\*[label-type]*label]'' \ +\!. PAD \ +"\\*[ST100]\h'\w'\\*[\\*[label-type]*label]'u'\\*[ST100X]\0\\*[ST101]\h'\w'\\$2'u'\\*[ST101X]\\\\*[$LISTS_PN\\*[_TYPEWRITE]]" \ +"\*[PDFBOOKMARK.NAME]" +.\" If there is no label... +. if '\\*[\\*[label-type]*label]'' \ +\!. PAD \ +"\\*[ST100]\\*[ST100X]\\*[ST101]\h'\w'\\$1'u'\0\\*[ST101X]\\\\*[$LISTS_PN\\*[_TYPEWRITE]]" \ +"\*[PDFBOOKMARK.NAME]" +. \} +.\" If autolabelling... +. el \ +\!. PAD \ +"\\*[ST100]\h'\\\\n[label-width]u'\\*[ST100X]\ \ \ \\*[ST101]\h'\w'\\$2'u'\\*[ST101X]\\\\*[$LISTS_PN\\*[_TYPEWRITE]]" \ +"\*[PDFBOOKMARK.NAME]" +\!. PAD_MARKER # +\!. EOL +. ie !\\n[\\*[label-type]*autolabel] \ +\!. ST 100 L +. el \ +\!. ST 100 R +\!. ST 101 L +\!. ST 102 L +\!. ST 103 R +. if \\n[#PRINT_STYLE]=2 \{\ +\!. FAMILY \\\\*[$LISTS_FAM] +\!. FT \\\\*[$LISTS_FT] +\!. ps \\\\n[#LISTS_PS]u +. \} +\!. TAB 100 +\!. PDF_LINK \\*[list-type]:\\n[lists*target] "\\$1" +\!. TN +\!. vpt 0 +\!. PDF_LINK \\*[list-type]:\\n[lists*target] "\\$2" +\!. TN +\!. vpt 0 +\!. PRINT \fR\\*[LEADER]\f[] +\!. TN +. if \\n[#PRINT_STYLE]=2 \{\ +\!. FAMILY \\\\*[$LISTS_PN_FAM] +\!. FT \\\\*[$LISTS_PN_FT] +\!. ps \\\\*[$LISTS_PN_SIZE_CHANGE] +. \} +\!. PRINT \\n[#LISTS_ENTRY_PN] +\!. TQ +\!. vpt +. da +. if \\n[#RESTORE_KERN] .KERN +.END +. +.ALIAS TO_EQUATIONS LISTS_COLLECTOR +.ALIAS TO_FIGURES LISTS_COLLECTOR +.ALIAS TO_TABLES LISTS_COLLECTOR +\# +\# ***tbl*** +\# +\# Support for multipage tables with headers borrowed from ms and +\# mommified by Robin Haberkorn <robin.haberkorn@googlemail.com> +\# with extensions by Peter Schaffter. +\# +.nr tbl*have-header 0 +.ds T& +\# +.MAC TS END +. if \\n[.t]<\\n[#DOC_LEAD] .nr begin-tbl 1 +. br +. rr tbl*pdfbx +. if r pdfbx-top \{\ +. rt +. sp (\\*[wt\\n[stack]]/2u)+\\*[gap\\n[stack]]u +. \} +. rr begin-tbl +. rm tbl*caption +. rm tbl*label +. rr tbl*have-caption +. rr tbl*have-label +. rr tbl*have-header +. rr float*tbl +. rr tbl*boxed +. nr ind-pre-tbl \\n[.i] +. nr ll-pre-tbl \\n[.l] +. nr lead-pre-tbl \\n[.v] +. nr tbl*needs 1 +. nr doing-tbl 1 +. nf +. if '\\n[.z]'FLOAT*DIV' .nr float*tbl 1 +. if !'\\n[.z]'FLOAT*DIV' \{\ +. if \\n[.t]=1 \{\ +. if (\\n[@TOP]=0)&(\\n[#START]=0) \{\ +. ie \\n[#COLUMNS] .COL_NEXT internal +. el .NEWPAGE +. \} +. \} +. \} +. nr loop-count 0 1 +. nr loop-counter \\n[#NUM_ARGS] +. ie \\n[#NUM_ARGS]=1 \{\ +. if '\\$1'H' \{\ +. nr tbl*have-header 1 +. nr tbl*plain 1 +. \} +. \} +. el \{\ +. while \\n+[loop-count]<=\\n[loop-counter] \{\ +. if '\\$1'H' \{\ +. nr tbl*have-header 1 +. shift +. \} +. if '\\$1'BOXED' \{\ +. nr tbl*boxed 1 +. shift +. \} +. if '\\$1'CENTER' \{\ +. if \\n[#INDENT_BOTH_ACTIVE] \{\ +. IBX +. nr #RESTORE_INDENT_BOTH 1 +. \} +. nr tbl*center 1 +. shift +. \} +. if '\\$1'CENTRE' \{\ +. if \\n[#INDENT_BOTH_ACTIVE] \{\ +. IBX +. nr #RESTORE_INDENT_BOTH 1 +. \} +. nr tbl*center 1 +. shift +. \} +. if '\\$1'NEEDS' \{\ +. nr tbl*needs \\$2 +. shift 2 +. \} +. if '\\$1'NO_SHIM' \{\ +. nr tbl*no-shim 1 +. shift +. \} +. if '\\$1'NO_FLEX' \{\ +. nr tbl*no-flex 1 +. shift +. \} +. if '\\$1'ADJUST' \{\ +. ds tbl*space-adj \\$2 +. shift 2 +. \} +. if '\\$1'CAPTION' \{\ +. nr tbl*have-caption 1 +. ds tbl*caption \\$2 +. shift 2 +. \} +. if '\\$1'SHORT_CAPTION' \{\ +. ds tbl*caption-short \\$2 +. shift 2 +. \} +. if '\\$1'LABEL' \{\ +. nr tbl*have-label 1 +. ds tbl*label \\$2 +. shift 2 +. \} +. if '\\$1'TARGET' \{\ +. ds target "\\$2 +. PDF_TARGET "\\*[target] +. shift 2 +. \} +. \} +. \} +. if (\\n[tbl*have-caption]=0):(\\n[tbl*caption-after-label]=1) \{\ +. rr pdfbx-top +. if \\n[tbl*boxed] .sp -1p +. \} +. if \\n[tbl*have-header] .nr tbl*needs +1 +. if (\\n[tbl*have-label]=1):(\\n[tbl*autolabel]=1) \ +. ds label-type tbl +. if (\\n[tbl*have-caption]=1)&(\\n[tbl*have-header]=0) \ +. tbl*caption-warning +. if \\n[tbl*boxed] \{\ +. if (\\n[tbl*have-label]=0)&(\\n[tbl*have-caption]=0)&\ +(\\n[tbl*autolabel]=0)&(\\n[tbl*have-source]=0) \ +. nr tbl*plain-boxed 1 +. \} +. if !\\n[tbl*have-header] .nr tbl*no-header 1 +. ds tbl*label-sffx-tmp \\*[tbl*label-sffx] +. if !'\\*[tbl*label-sffx-tmp]'' .substring tbl*label-sffx-tmp -1 +. if '\\*[tbl*label-sffx-tmp]'.' \ +. if (\\n[tbl*caption-after-label]=0):(\\n[#MLA]=1) .chop tbl*label-sffx +. if \\n[tbl*caption-after-label] \{\ +. if !'\\*[tbl*label-sffx]'' \ +. if '\\*[tbl*caption]'' .chop tbl*label-sffx +. \} +. if !'\\*[tbl*caption-short]'' .ds short -short +. if \\n[tbl*autolabel] \{\ +. if \\n[tbl*label-with-chapter] \ +. ds chapno \\n[#CH_NUM]. +. ds tbl*label \ +\\*[tbl*label-prfx]\\*[chapno]\\n+[tbl*label-num]\\*[tbl*label-sffx]\" +. nr tbl*label-width \w'\\*[tbl*label]' +. \} +. ie \\n[@TOP] \{\ +. if !'\\n[.z]'FLOAT*DIV' \{\ +. RESTORE_SPACE +. nr @TOP 1 +. if \\n[#COLUMNS] \ +. if !'\\*[tbl*space-adj]'' \ +. sp \\*[tbl*space-adj]-1v +. if \\n[tbl*boxed] .nr tbl*boxed 2 +. vpt +. \} +. \} +. el \ +. if !'\\*[tbl*space-adj]'' .sp \\*[tbl*space-adj]u +. if !\\n[#MLA] \{\ +. if (\\n[tbl*have-caption]=0):(\\n[tbl*caption-after-label]=1) \{\ +. ie !'\\n[.z]'FLOAT*DIV' \{\ +. ie !\\n[tbl*boxed]=2 \{\ +. if \\n[tbl*have-header] .nr tbl*restore-header 1 +. if !\\n[@TOP] .sp .5v +. if \\n[tbl*boxed] .sp .25v +. if \\n[tbl*restore-header]=1 .nr tbl*have-header 1 +. \} +. el \{\ +. if !\\n[tbl*boxed] .ns +. sp .25v +. \} +. \} +. el .sp .5v +. \} +. \} +. if \\n[nl]=\\n[#PAGE_TOP] .ns +. if '\\n[.z]'FLOAT*DIV' \{\ +. ie \\n[defer]>0 .sp .5v +. el .sp .25v +. \} +. if \\n[@TOP] .rr @TOP +. ds ev-current \\n[.ev] +. if (\\n[nl]=\\n[#PAGE_TOP]):(\\n[nl]=\\n[dc]) \ +. nr tbl*caption-lead-diff-adj 1 +. if \\n[#MLA] \ +. if \\n[tbl*have-label]+\\n[tbl*have-caption]=0 \ +. sp .5v +. if \\n[tbl*boxed]=2 \{\ +. if \\n[#MLA]=0 \ +. if (\\n[tbl*caption-after-label]=1):(\\n[tbl*have-caption]=0) \ +. sp 1n +. \} +. fi +. if \\n[tbl*have-header] \{\ +. di tbl*header-div +. ev table-header +. evc \\*[ev-current] +. if !\\n[float-span] \{\ +. ie '\\*[ev-current]'FLOAT' \{\ +. ie !\\n[tbl*center] \ +. in 0 +. el \{\ +. in 0 +\!. in 0 +. \} +. \} +. el \!.in 0 +. \} +. \} +.END +\# +.MAC TH END +. ie '\\n[.z]'tbl*header-div' \{\ +. nr T. 0 +. T# +. di +. ev +. if \\n[#PDF_BOOKMARKS] \{\ +. ie !'\\n[.z]'' \{\ +. if (\\n[float*img]=0)&(\\n[float*pic]=0)&(\\n[float*eqn]=0) \{\ +\!. PDF_TARGET tbl:\\\\n+[lists*target] +. ie !'\\*[tbl*label]'' \ +\!. TO_TABLES "\\*[tbl*label]" "\\*[tbl*caption\\*[short]]" +. el \ +\!. TO_TABLES "\\*[tbl*caption\\*[short]]" +. \} +. \} +. el \{\ +. if '\\n[.z]'' .PDF_TARGET tbl:\\n+[lists*target] +. ie !'\\*[tbl*label]'' \ +. TO_TABLES "\\*[tbl*label]" "\\*[tbl*caption\\*[short]]" +. el \ +. TO_TABLES "\\*[tbl*caption\\*[short]]" +. \} +. \} +. if \\n[#MLA] .if !\\n[tbl*have-caption] \ +. mla@error label caption \\n[.F] \\$0 \\n[.c] +. if !'\\n[.z]'FLOAT*DIV' \{\ +. ie !\\n[tbl*boxed] \{\ +. nr th*needs (u;\\n[dn]+\\n[tbl*needs]v) +. if \\n[th*needs]>\\n[.t] \{\ +. if dPDF.EXPORT \ +. if \\n[#FLEX_ACTIVE] \ +. if !\\n[#NO_FLEX] \ +. tm .ds pre-newpage-\\n% \\n%@\\n[#COL_NUM] +. ne \\n[dn]u+\\n[tbl*needs]v +. nr tbl@needs 1 +. \} +. \} +. el \{\ +. nr th*needs (u;\\n[dn]+.3n+\\n[tbl*needs]v) +. if \\n[th*needs]>\\n[.t] \{\ +. if \\n[#COLUMNS] \ +. if !\\n[#COL_NUM]=\\n[#NUM_COLS] \ +. nr tbl*no-top-hook 1 +. nr tbl*no-print-header 1 +. if dPDF.EXPORT \ +. if \\n[#FLEX_ACTIVE] \ +. if !\\n[#NO_FLEX] \ +. tm .ds pre-newpage-\\n% \\n%@\\n[#COL_NUM] +. ne \\n[dn]u+\\n[tbl*needs]v +. nr tbl@needs 1 +. \} +. \} +. \} +. ie (\\n[dn]-\\n[.v])>\\n[.t] \{\ +. if !\\n[@TOP] .@error ridiculously long table header +. if \\n[tbl@needs] \{\ +. if \\n[tbl*boxed] \{\ +. RESTORE_SPACE +. sp -1n +. \} +. rr tbl@needs +. \} +. if \\n[tbl*have-caption] .TBL*CAPTION +. \} +. el \{\ +. nr tbl*header-ht \\n[dn] +. if \\n[tbl@needs] \{\ +. if \\n[tbl*boxed] \{\ +. RESTORE_SPACE +. if !\\n[#MLA] \{\ +. if (\\n[tbl*have-caption]=0):(\\n[tbl*caption-after-label]=1) \ +. nop \& +. sp -1n +. \} +. \} +. rr tbl@needs +. \} +. if (\\n[tbl*have-caption]=1)&(\\n[tbl*caption-after-label]=0) \{\ +. TBL*CAPTION +. vs +. \} +. tbl*print-header +. \} +. \} +. el \{\ +. if \\n[tbl*have-caption] \{\ +. TBL*CAPTION +. nr skip-th-warning 1 +. \} +. if !\\n[skip-th-warning] .@error .TH without .TS H +. rr skip-th-warning +. \} +.\" When centering a boxed table inside a float, .T# won't place +.\" vertical rules in the correct horizontal position unless .ll is +.\" given a nominal value (can be anything) and an indent is set +.\" manually. +. if '\\n[.z]'FLOAT*DIV' \{\ +. if \\n[tbl*center] \{\ +. nr float*ll \\n[.l] +. ll 0 +. in \\n[float*ll]u-\\n[TW]u/2u +. \} +. \} +.END +\# +.MAC TE END +. if !r TW \{\ +. tm1 "[mom]: '\\n[.F]' contains tbl(1) data but '-t' flag is missing from +. tm1 " the command line. +. ab Aborting. +. \} +. ev tbl*end \" Needed because of .ad changes +. evc \\*[ev-current] +. nh +. nf +. rr tbl*no-header +. if !'\\$1'' \{\ +. if '\\$1'SOURCE' \{\ +. ie !\\n[#MLA] \{\ +. tm1 "[mom]: \\$1 argument to \\$0 at line \\n[.c], but MLA style not enabled. +. tm1 " Ignoring \\$1, but continuing to process. +. \} +. el \{\ +. nr tbl*have-source 1 +. shift +. \} +. \} +. \} +. if (\\n[#MLA]=1)&(\\n[tbl*have-source]=0) .tbl*source-warning +. if !'\\n[.z]'FLOAT*DIV' \{\ +. if \\n[.t]<(\\n[.v]/2u) \{\ +. ie (\\n[tbl*have-label]=1):\ +(\\n[tbl*caption-after-label]=1):\ +(\\n[tbl*have-source]=1):\ +(\\n[tbl*autolabel]=1) \{\ +. rm tbl*header-div +. nr tbl*no-top-hook 1 +. ie \\n[tbl*autolabel] \ +. if \\n[#MLA] \ +. if !\\n[tbl*have-source] . +. el \{\ +. nr pgnum \\n%+\\n[#PAGE_NUM_ADJ] +. if \\n[#COLUMNS]=1 .ds col-num ", column \\n[#COL_NUM] +. tm1 "[mom]: '\\n[.F]', macro \\$0, line \\n[.c]: +. tm1 " Insufficient room for label, caption, and/or source after +. tm1 " table on page \\n[pgnum]\\*[col-num]. Omitting, but continuing to process table. +. \} +. nr tbl*skip-source 1 +. nr tbl*skip-label 1 +. rr tbl*have-caption +. ie \\n[#COLUMNS] \ +. COL_NEXT internal +. el .NEWPAGE +. \} +. el \{\ +.\" Don't print tbl-header at top of next page or column if tbl +.\" finishes without room for further input at bottom of page +. rm tbl*header-div +. nr tbl*no-print-header 1 +. nr tbl*no-top-hook 1 +. ie \\n[#COLUMNS] \ +. COL_NEXT internal +. el .NEWPAGE +. \} +. \} +. \} +. if !\\n[#MLA] \{\ +. if (\\n[tbl*have-label]=1):(\\n[tbl*autolabel]=1):(\\n[tbl*caption-after-label]=1) \{\ +. ev label +. if '\\*[ev-current]'FLOAT' .evc 0 +. ie \\n[#PRINT_STYLE]=1 .TYPEWRITER +. el \{\ +. tbl*label-style +. vs \\n[.ps]u+\\n[tbl*label-autolead]u +. \} +. SIZESPECS +. if \\n[tbl*label-with-chapter] \ +. ds chapno \\n[#CH_NUM]. +. TBL*SET_LABEL_QUAD \\*[tbl*label-quad] +. di tbl*label-div +. ie \\n[tbl*boxed] .sp \\n[#CAP_HEIGHT]u +. el .sp \\n[#DOC_LEAD]u/4u +. if (\\n[tbl*have-label]=1):(\\n[tbl*autolabel]=1) \{\ +. if !'\\*[tbl*label-space]'' .sp \\*[tbl*label-space] +. ie \\n[tbl*autolabel] \{\ +. ie !\\n[tbl*caption-after-label] .nop \ +\\*[tbl*label] +. el \{\ +. nop \ +\\*[tbl*label]\| +. tbl*caption-style +. vs \\n[.ps]u+\\n[tbl*caption-autolead]u +. ds tbl*caption-old \\*[tbl*caption] +. ds tbl*caption " \\*[tbl*caption] +. nop \\*[tbl*caption] +. ds tbl*caption \\*[tbl*caption-old] +. \} +. \} +. el \{\ +. ie !\\n[tbl*caption-after-label] .nop \\*[tbl*label] +. el \{\ +. nop \\*[tbl*label]\ \|\c +. tbl*caption-style +. vs \\n[.ps]u+\\n[tbl*caption-autolead]u +. ds tbl*caption " \\*[tbl*caption] +. nop \\*[tbl*caption] +. \} +. \} +. \} +. br +. di +. in 0 +. ev +. nr pgnum \\n%+\\n[#PAGE_NUM_ADJ] +. ie !'\\n[.z]'FLOAT*DIV' \{\ +. rr tbl*have-header +. rr tbl*have-caption +. ie (\\n[dn]-\\n[.v])>\\n[.t] \{\ +. if \\n[#COLUMNS]=1 .ds col-num ", column \\n[#COL_NUM] +. tm1 "[mom]: '\\n[.F]', macro \\$0, line \\n[.c]: +. tm1 " Insufficient room for label, caption, and/or source after +. tm1 " table on page \\n[pgnum]\\*[col-num]. Omitting, but continuing to process. +. ie \\n[#COLUMNS] \ +. COL_NEXT internal +. el .NEWPAGE +. if d tbl*header-div .rm tbl*header-div +. rr tbl*caption-top-lead-diff +. nr tbl*skip-source 1 +. nr tbl*skip-label 1 +. \} +. el .print-label +. \} +. el .print-label +. \} +. \} +. if \\n[tbl*autolabel] \{\ +. ds tbl*label \\*[chapno]\\n[tbl*label-num] +. if dLABEL.REFS \ +. tm .ds \\*[target] \\*[chapno]\\n[tbl*label-num] +. rm target +. \} +. if !\\n[tbl*skip-source] \{\ +. if \\n[tbl*have-source] \{\ +. ds tbl*source \\$1 +. SIZESPECS +. ev source +. evc \\*[ev-current] +. nf +. nh +. ie \\n[#PRINT_STYLE]=1 \{\ +. TYPEWRITER +. sp +. \} +. el \{\ +. tbl*source-style +. vs \\n[.ps]u+\\n[tbl*source-autolead]u +. \} +. di tbl*source-div +. TBL*SET_SOURCE_QUAD \\*[tbl*source-quad] +. if (\\n[tbl*have-label]=0)&(\\n[#MLA]=0) \ +. if !\\n[tbl*autolabel] .sp \\n[#CAP_HEIGHT]u +. if \\n[#MLA] \ +. sp \\n[#CAP_HEIGHT]u +. if !'\\*[tbl*source-space]'' .sp \\*[tbl*source-space] +. nop \\*[tbl*source] +. br +. di +. nf +. tbl*source-div +. ev +. \} +. \} +. if '\\n[.z]'FLOAT*DIV' .nr bx-tbl-depth \\n[.d]-1v +. if '\\n[.z]'tbl*header-div' \{\ +. @error .TS with 'H' flag but no corresponding .TH +. ab Aborting. +. \} +. ev +. if !\\n[tbl*plain] \{\ +. ie \\n[tbl*plain-boxed] \{\ +. ie \\n[#MLA] .if !\\n[tbl*have-source] .sp .6v +. el .sp +. \} +. el \{\ +. if !\\n[tbl*have-source] \{\ +. if (\\n[tbl*have-label]=0)&\ +(\\n[tbl*caption-after-label]=0)&(\\n[tbl*autolabel]=0) \ +. sp 1v +. if (\\n[tbl*have-label]=1):(\\n[tbl*autolabel]=1) \ +. sp .5v +. \} +. if '\\n[.z]'FLOAT*DIV' .nr chop-space 1 +. \} +. \} +. ll \\n[ll-pre-tbl]u +. if (\\n[nl]=\\n[dc]):(\\n[nl]=\\n[#PAGE_TOP]) .ns +. if !'\\*[tbl*space-adj]'' .sp -\\*[tbl*space-adj]u +. if \\n[#MLA] \ +. sp .5v +. if !r pdfbx-running \{\ +. ie !\\n[tbl*no-shim] \{\ +. ie !\\n[#NO_SHIM] \ +. if !'\\n[.z]'FLOAT*DIV' .SHIM +. el \ +. if !\\n[tbl*no-flex] \ +. if !\\n[#NO_FLEX] \ +. if !'\\n[.z]'FLOAT*DIV' .FLEX +. \} +. el \ +. if !\\n[tbl*no-flex] \ +. if !\\n[#NO_FLEX] \ +. if !'\\n[.z]'FLOAT*DIV' .FLEX +. \} +. ie \\n[tbl*boxed] \{\ +. nr tbl*pdfbx 2 +. if \\n[tbl*have-label] .nr tbl*pdfbx 3 +. \} +. el .nr tbl*pdfbx 1 +. TBL*CLEANUP +. it 2 rr-tbl*pdfbx +.END +\# +\# Utility macros for tbl +\# +.MAC TBL*CAPTION END +. ev caption +. evc \\*[ev-current] +. vs \\n[.ps]u+\\n[tbl*caption-autolead]u +. nr caption-lead \\n[.v] +. nr tbl*caption-lead-diff \\n[lead-pre-tbl]-\\n[.v] +. nr tbl*caption-top-lead-diff \\n[tbl*caption-lead-diff] +. ie !\\n[#MLA] \{\ +. if \\n[tbl*have-caption] \{\ +.\" Get rid of these guys when you're sure you don't need them. +\#. if !'\\n[.z]'FLOAT*DIV' \{\ +. if !\\n[tbl*caption-after-label] \{\ +. ie (\\n[nl]=\\n[#PAGE_TOP]):(\\n[nl]=\\n[dc]) \{\ +. RESTORE_SPACE +. ie \\n[#COLUMNS] .sp |\\n[dc]u +. el .sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u +. sp \\n[tbl*caption-lead-diff]u +. \} +. el \{\ +. if \\n[.ns] .if !(\\n[nl]=\\n[#PAGE_TOP]) .rs +. if !\\n[pdfbx-top] .sp \\n[#DOC_LEAD]u/2u +. \} +. if \\n[pdfbx-top] \{\ +. ps \\*[tbl*caption-size-change] +. SIZESPECS +. ps +. nr pdfbx-top 1 \" SIZESPECS trips rr-pdfbx-top +. rt +. sp \\*[gap\\n[stack]]u+\\*[wt\\n[stack]]\ ++\\n[tbl*caption-top-lead-diff]u+\\*[$CAP_HEIGHT]+.5p +. \} +. \} +\#. \} +. nh +. \} +. \} +. el \{\ +. if !\\n[tbl*autolabel] \{\ +. ie !\\n[tbl*have-label] \ +. mla@error caption label \\n[.F] \\$0 \\n[.c] +. el .ev label +. \} +. \} +. ie \\n[#PRINT_STYLE]=1 .nr tmp-ind 2m +. el .nr tmp-ind 1.25m +. ie \\n[#PRINT_STYLE]=1 .TYPEWRITER +. el \{\ +. if !\\n[#MLA] \{\ +. tbl*caption-style +. nr lead-current \\n[.v] +. \} +. \} +. ie !\\n[#MLA] \{\ +. ie !\\n[tbl*caption-after-label] \{\ +. di tbl*caption-div +. ie \\n[tbl*center] \!.in -\\n[ind-pre-tbl]u +. el \!.in 0 +. TBL*SET_CAPTION_QUAD \\*[tbl*caption-quad] +. nop \\*[tbl*caption] +. br +. di +. evc 0 +. if !'\\n[.z]'FLOAT*DIV' \{\ +. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u+\\n[#DOC_LEAD]u +. ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u+\\n[#DOC_LEAD]u +. nr caption-needs 2 +. ie \\n[tbl*boxed] .nr tbl*lead \\n[.v]+3n +. el .nr tbl*lead \\n[.v] +. if \ +(\\n[dn]+(\\n[tbl*lead]*(\\n[tbl*needs]+1)))>=\\n[.t] \{\ +. nr pgnum \\n%+\\n[#PAGE_NUM_ADJ] +. if \\n[#COLUMNS]=1 .ds col-num ", column \\n[#COL_NUM] +. tm1 \ +"[mom]: Table with caption at line \\n[.c] \ +does not fit on page \\n[pgnum]\\*[col-num]. +. tm1 \ +" Shifting table to next page or column. +. ie (\\n[#COLUMNS]=1)&(\\n[#COL_NUM]=\\n[#NUM_COLS]) \{\ +. rr tbl*no-header +. NEWPAGE +. \} +. el \{\ +. nr tbl*no-top-hook -1 +. sp \\n[.t]u +. ie \\n[#COLUMNS] \ +. sp |\\n[dc]u+\\n[tbl*caption-lead-diff]u +. el .sp |\\n[#PAGE_TOP]u+\\n[tbl*caption-lead-diff]u +. \} +. \} +. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u +. ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u +. \} +. if \\n[.u] .nr fill 1 +. nf +. if \\n[.ns] .RESTORE_SPACE +. tbl*caption-div +. if \\n[#PRINT_STYLE]=1 .sp .5v +. if !'\\*[tbl*caption-space]'' \ +. sp \\*[tbl*caption-space] +. if \\n[tbl*caption-lead-diff-adj] \{\ +. sp -\\n[tbl*caption-lead-diff]u +. rr tbl*caption-lead-diff-adj +. \} +. if \\n[fill-pre-float] .fi +. \} +. el \{\ +. if (\\n[tbl*have-label]=0) \{\ +. if !\\n[tbl*autolabel] \{\ +. tm1 "[mom]: CAPTION_AFTER_LABEL enabled, but no label given +. tm1 " for table at line \\n[.c]. +. tm1 " Skipping caption but continuing to process. +. \} +. \} +. \} +. \} +. el \{\ +. if (\\n[tbl*have-label]=1):(\\n[tbl*autolabel]=1) \{\ +. ie !\\n[tbl*have-caption] \ +. mla@error label caption \\n[.F] \\$0 \\n[.c] +. el \{\ +. ie !'\\n[.z]'FLOAT*DIV' \{\ +. ie (\\n[nl]=\\n[#PAGE_TOP]):(\\n[nl]=\\n[dc]) \{\ +. ie !\\n[#COLUMNS] \ +. sp |\\n[#PAGE_TOP]u+\\n[tbl*caption-lead-diff]u +. el .sp |\\n[dc]u+\\n[tbl*caption-lead-diff]u +. \} +. el .sp .5v +. \} +. el .sp .5v +. \} +. ev label +. evc \\*[ev-current] +. nh +. ie \\n[#PRINT_STYLE]=1 .TYPEWRITER +. el \{\ +. tbl*label-style +. vs \\n[.ps]u+\\n[tbl*label-autolead]u +. nr tbl*label-lead-diff \\n[lead-pre-tbl]-\\n[.v] +. \} +. if \\n[tbl*label-with-chapter] \ +. ds chapno \\n[#CH_NUM]. +. if r pdfbx-top \ +. if \\n[#MLA] .nr pdfbx-mla-tbl-top 1 +. TBL*SET_LABEL_QUAD \\*[tbl*label-quad] +. if \\n[pdfbx-mla-tbl-top] \{\ +. sp +. sp \\n[tbl*label-lead-diff]u +. rr pdfbx-mla-tbl-top +. \} +. di tbl*mla-label-caption +\!. in 0 +. ie \\n[tbl*autolabel] \{\ +. ds label \ +\\*[tbl*label-prfx]\\*[chapno]\\n[tbl*label-num]\\*[tbl*label-sffx]\" +. nop \\*[label] +. nr tbl*label-width \w'\\*[label]' +. rr label +. \} +. el \{\ +. if !'\\*[tbl*label]'' \{\ +. nop \\*[tbl*label] +. nr tbl*label-width \w'\\*[tbl*label]' +. \} +. \} +. if \\n[tbl*autolabel] \ +. ds tbl*label \\*[chapno]\\n[tbl*label-num] +. br +. di +. \} +. da tbl*mla-label-caption +. ie \\n[#PRINT_STYLE]=1 .TYPEWRITER +. el .tbl*caption-style +. if '\\*[tbl*caption-quad]'L' \{\ +. EOL +. ie \\n[float*tbl] \{\ +. ie \\n[tbl*center] \ +. ll \\n[ll-pre-tbl]u-\\n[TW]u/2u+\\n[TW]u-\\n[tmp-ind]u +. el \ +. ll \\n[TW]u+\\n[.i]u-\\n[tmp-ind]u +\!. in \\n[tmp-ind]u +. ti -\\n[tmp-ind]u +. \} +. el \{\ +. ie \\n[tbl*center] \{\ +. if '\\*[tbl*label-quad]'L' \{\ +. ll \\n[ll-pre-tbl]u-\\n[TW]u/2u+\\n[TW]u +\!. in \\n[tmp-ind]u +. \} +. \} +. el \ +. in \\n[tmp-ind]u+\\n[ind-pre-tbl]u +. \} +. ti -\\n[tmp-ind]u +. \} +. nop \\*[tbl*caption] +. br +\!. in +. da +. if !'\\n[.z]'FLOAT*DIV' \{\ +. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u+\\n[#DOC_LEAD]u +. ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u+\\n[#DOC_LEAD]u +. ie \\n[#MLA] .nr caption-needs 3 +. el .nr caption-needs 2 +. if \ +(\\n[dn]+(\\n[#DOC_LEAD]*\\n[tbl*needs])+(\\n[caption-needs]*\\n[caption-lead]))>\\n[.t] \{\ +. nr pgnum \\n%+\\n[#PAGE_NUM_ADJ] +. if \\n[#COLUMNS] .ds col-num ", column \\n[#COL_NUM] +. tm1 \ +"[mom]: Table with caption at line \\n[.c] \ +does not fit on page \\n[pgnum]\\*[col-num]. +. tm1 \ +" Shifting table to next column or page. +. ie (\\n[#COLUMNS]=1)&(\\n[#COL_NUM]=\\n[#NUM_COLS]) \{\ +. rr tbl*no-header +. if \\n[defer] .nr skip-th-warning 1 +. NEWPAGE +. \} +. el \{\ +. nr tbl*no-top-hook 1 +. sp \\n[.t]u +. if (\\n[tbl*caption-after-label]=1):(\\n[tbl*plain]=1) \ +. sp 1n-.3n +. \} +. \} +. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u +. ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u +. \} +. nf +. if (\\n[nl]=\\n[#PAGE_TOP]):(\\n[nl]=\\n[dc]) \ +. nr tbl*label-lead-diff-adj 1 +. ie (\\n[.t]>1)&(\\n[@TOP]=0) \{\ +. if !\\n[#NO_FLEX] \{\ +. NO_FLEX +. nr #RESTORE_FLEX 1 +. \} +. if \\n[.ns] .rs +. sp \\n[tbl*label-lead-diff]u +. \} +. el \{\ +. if \\n[.t]=1 .sp \\n[.t]u +. ie \\n[#COL_NUM]>1 \ +. ie (\\n[nl]=\\n[#PAGE_TOP]):(\\n[nl]=\\n[dc]) \ +. sp |\\n[dc]u+\\n[tbl*label-lead-diff]u +. el .sp .5v +. \} +. tbl*mla-label-caption +. \} +. ie \\n[#PRINT_STYLE]=1 .sp .5v +. el .sp .5n +. if \\n[tbl*label-lead-diff-adj] \{\ +. sp -\\n[tbl*label-lead-diff]u +. rr tbl*label-lead-diff-adj +. \} +. br +. if !'\\*[tbl*caption-space]'' .sp \\*[tbl*caption-space] +. ie \\n[float*tbl] .ev FLOAT +. el .ev \\*[ev-current] +.END +\# +.MAC TBL*CLEANUP END +. if !'\\n[.z]'FLOAT*DIV' \{\ +. rm tbl*header-div +. rm short +. rm tbl*caption +. rm tbl*caption-short +. rm tbl*label +. rr tbl*center +. rr tbl*caption-top-lead-diff +. rr tbl*have-header +. rr tbl*no-print-header +. rr tbl*have-caption +. rr tbl*have-label +. rr tbl*plain-boxed +. rr tbl*boxed +. \} +. rr doing-tbl +. rm tbl*space-adj +. rr tbl*skip-label +. rr tbl*skip-source +. rr tbl*label-warning +. rr tbl*no-shim +. rr tbl*no-flex +. rr tbl*plain +. rr tbl*caption-top-lead-diff +. rnn tbl*have-label tbl@label +. rnn tbl*have-source tbl@source +. if '\\*[tbl*label-sffx-tmp]'.' .ds tbl*label-sffx . +. if \\n[#RESTORE_INDENT_BOTH] \{\ +. IB +. rr #RESTORE_INDENT_BOTH +. \} +. if \\n[#RESTORE_INDENT_LEFT] \{\ +. IL +. rr #RESTORE_INDENT_LEFT +. \} +. if \\n[#RESTORE_FLEX] \{\ +. NO_FLEX off +. rr #RESTORE_FLEX +. \} +.END +\# +.MAC print-label END +. if \\n[.u] .nr fill 1 +. nf +. if \\n[tbl*center] \{\ +. if '\\n[.z]'' \{\ +. ll \\n[.l]u-\\n[TW]u/2u+\\n[TW]u +. if \\n[ind-pre-tbl] \ +. in \\n[ind-pre-tbl]u-(\\n[ind-pre-tbl]u/2u) +. \} +. \} +. if !\\n[tbl*skip-label] \ +. tbl*label-div +. if \\n[tbl*center] \{\ +. if '\\n[.z]'' \{\ +. ll +. in 0 +. \} +. \} +. if \\n[fill] .fi +. rr fill +.END +\# +.MAC tbl@top-hook END +. if (\\n[tbl*have-header:1]=1):(\\n[tbl*have-header]=1) \{\ +. if !r tbl*no-print-header \{\ +. nf +. rr @TOP +. ch RR_@TOP +. ev top-hook +. evc 0 +. rs +. nop \& +. ie !\\n[tbl*boxed] .sp -1 +. el .sp -1n +. tbl*print-header +. ev +. \} +. \} +.END +\# +.MAC tbl*print-header END +. if \\n[.u]=1 \{\ +. nf +. nr fill 1 +. \} +. if \\n[#COL_NUM]>1 \ +. if !\\n[tbl*have-caption] \ +. if (\\n[@TOP]=1):(\\n[nl]=\\n[dc]) \ +. sp .3n +. if \\n[tbl*center] \!.in \\n[ind-pre-tbl]u/2u +. ie d tbl*header-div:span .tbl*header-div:span +. el .tbl*header-div +. if '\\n[.z]'FLOAT*DIV' \ +. if \\n[tbl*center] .ce 1000 +. mk #T +.END +\# +.MAC tbl@bottom-hook END +. rr #DIVERTED +. rr @TOP +. ch RR_@TOP +.END +\# +.MAC tbl*float-warning END +. tm1 "[mom]: Table in FLOAT, output page \\n[#PAGENUMBER], exceeds page vertical limits. +. tm1 " Multipage boxed tables cannot be contained within floats. +. ab [mom]: Aborting '\\n[.F]', approx. line \\n[.c]. +.END +\# +.MAC tbl*caption-warning END +. tm1 "[mom]: TS at line \\n[.c] has CAPTION but no H argument. +. tm1 " CAPTION requires H with a corresponding .TH. +. ab [mom]: Aborting '\\n[.F]'. +.END +\# +.MAC tbl*source-warning END +. tm1 "[mom]: MLA enabled, but TE at line \\n[.c] has no SOURCE. +. tm1 " MLA style for tables requires that a source be cited. +. ab [mom]: Aborting '\\n[.F]'. +.END +\# +.MAC ds@need END \" Move vertically until there is enough space for \$1 +. if '\\n(.z'' \{\ +. while \\n[.t]<=(\\$1)&(\\n[nl]>\\n[#PAGE_TOP]) \{\ +. rs +' sp \\n[.t]u +. \} +. \} +.END +\# +\# ***eqn*** +\# +\# EQ/EN macros borrowed from ms, mommified by Robin Haberkorn +\# <robin.haberkorn@googlemail.com>, expanded by Peter Schaffter. +\# +\# EQ [ -L | -C | -I <indent> ] [label] +\# EN [ CONT | CONTINUED | ... ] +\# +\# Equations are centered by default, but can be left-justified +\# (EQ -L), explicitly centered, or indented (EQ -I). +\# +\# Each eqn block for multi-line equations aligned with 'mark' and +\# 'lineup' should be terminated by passing 'CONT' or 'CONTINUED' +\# or '...' to EN. +\# +\# Note that geqn mark and lineup work correctly in centered equations. +\# +.MAC EQ END +. if \\n[eqn*copy-in]=1 \{\ +. if !\\n[eqn-linenum] .nr eqn-linenum \\n[.c] +. if !\\n[pgnum] .nr pgnum \\n%+\\n[#PAGE_NUM_ADJ] +. br +. if \\n[.u] .nr fill 1 +. rr float*eqn +. if '\\n[.z]'FLOAT*DIV' .nr float*eqn 1 +. nr eqn*restore-adj \\n[.j] +. na +. if !\\n[continued] \{\ +. PDF_TARGET eqn:\\n+[lists*target] +. rr eqn*type +. nr loop-counter \\n[#NUM_ARGS] +. nr loop-count 0 1 +. while \\n+[loop-count]<=\\n[loop-counter] \{\ +. if '\\$1'-L' \{\ +. nr eqn*left 1 +. nr eqn*type 1 +. shift +. \} +. if '\\$1'-I' \{\ +. nr eqn*ind 1 +. nr eqn*type 2 +. shift +. ds DI \\$1 +. ds DI@cont \\*[DI] +. shift +. \} +. if '\\$1'-C' \{\ +. nr eqn*center 1 +. nr eqn*type 3 +. shift +. \} +. if '\\$1'ADJUST' \{\ +. ds eqn*space-adj \\$2 +. shift 2 +. \} +. if '\\$1'LABEL' \{\ +. ds eqn*label \\$2 +. shift 2 +. \} +. if '\\$1'SHIFT_LABEL' \{\ +. ds eqn*shift-label \\$2 +. shift 2 +. \} +. if '\\$1'CAPTION' \{\ +. ds eqn*caption \\$2 +. shift 2 +. \} +. if '\\$1'SHORT_CAPTION' \{\ +. ds eqn*caption-short \\$2 +. shift 2 +. \} +. if '\\$1'TARGET' \{\ +. ds target "\\$2 +. PDF_TARGET "\\*[target] +. shift 2 +. \} +. if '\\$1'NO_SHIM' \{\ +. nr @no-shim 1 +. shift 1 +. \} +. if '\\$1'NO_FLEX' \{\ +. nr eqn*no-flex +. shift +. \} +. \} +. \} +. if (\\n[eqn*have-label]=1):(\\n[eqn*autolabel]=1) \ +. ds label-type eqn +. if '\\*[eqn*shift-label]'' .ds eqn*shift-label 0 +. if !\\n[eqn*type] \{\ +. nr eqn*center 1 +. nr eqn*type 3 +. shift +. \} +. if !'\\*[eqn*caption]'' \{\ +. if '\\*[caption-quad]'L' \{\ +. if \\n[default-left] .ds caption-quad R +. rr default-left +. \} +. \} +. if !\\n[continued] \{\ +. if !'\\*[eqn*caption-short]'' .ds short -short +. if \\n[eqn*autolabel] \{\ +. if \\n[eqn*label-with-chapter] \ +. ds chapno \\n[#CH_NUM]. +. ds eqn*label \\*[chapno]\\n+[eqn*label-num] +. nr eqn*label-width \w'\\*[eqn*label]' +. if dLABEL.REFS \ +. tm .ds \\*[target] \\*[chapno]\\n[eqn*label-num] +. rm target +. nr eqn*label-num -1 +. \} +. ie !'\\n[.z]'' \{\ +. if (\\n[float*img]=0)&(\\n[float*pic]=0)&(\\n[float*tbl]=0) \{\ +\!. PDF_TARGET eqn:\\\\n+[lists*target] +. ie !'\\*[eqn*label]'' \ +\!. TO_EQUATIONS "\\*[eqn*label]" "\\*[eqn*caption\\*[short]]" +. el \ +\!. TO_EQUATIONS "\\*[eqn*caption\\*[short]]" +. \} +. \} +. el \{\ +. PDF_TARGET eqn:\\n+[lists*target] +. ie !'\\*[eqn*label]'' \ +. TO_EQUATIONS "\\*[eqn*label]" "\\*[eqn*caption\\*[short]]" +. el \ +. TO_EQUATIONS "\\*[eqn*caption\\*[short]]" +. \} +. \} +. if \\n[continued] \{\ +. rm continued +. rr continued +. \} +. if \\n[eqn@left*cont] .nr eqn*type 1 +. if \\n[eqn@ind*cont] \{\ +. nr eqn*type 2 +. ds DI \\*[DI@cont] +. \} +. \} +. if \\n[eqn@center*cont] .nr eqn*type 3 +. ev EQN +. evc 0 +. di eqn*div +. in 0 +. nf +.END +\# +.MAC EN END +. if !'\\n[.z]'eqn*div' \{\ +. @error mismatched EN +. return +. \} +. br +. di +. ev +. if !'\\*[eqn*label]'' .nr eqn*have-label 1 +. if !'\\*[eqn*caption]'' .nr eqn*have-caption 1 +. if !'\\$1'' \{\ +. ie '\\$1'...' .ds continued CONT +. el .ds continued \\$1 +. substring continued 0 3 +. ie '\\*[continued]'CONT' \{\ +. nr continued 1 +. rm continued +. if \\n[eqn*ind] .nr eqn@ind*cont 1 +. if \\n[eqn*left] .nr eqn@left*cont 1 +. if \\n[eqn*center] .nr eqn@center*cont 1 +. \} +. el \{\ +. tm1 "[mom]: Invalid argument \\$1 to \\$0. +. tm1 " Must be 'CONTINUED', 'CONT', or '...' +. ab [mom]: Aborting '\\n[.F]' at line \\n[.c]. +. \} +. \} +. if \\n[dl]:\\n[eqn*have-label] \{\ +. ds eqn*tabs \\n[.tabs] +. ie \\n[dl] \{\ +. if !'\\n[.z]'FLOAT*DIV' \{\ +. ie \\n[eqn*have-caption] .ne \\n[dn]u-\\n[.V] +. el .ne \\n[dn]u-1v-\\n[.V] +. \} +. chop eqn*div +. if '\\*[DD]'' \{\ +. ds DD .5v +. if !\\n[@TOP] \{\ +. ie r pdfbx-top \{\ +. SIZESPECS +. rt +. sp (\\*[wt\\n[stack]]/2u)+\\*[gap\\n[stack]]u+\\*[$CAP_HEIGHT] +. \} +. el .sp \\*[DD] +. if !'\\*[eqn*space-adj]'' .sp \\*[eqn*space-adj]u +. \} +. \} +. ie \\n[eqn*type]=1 \{\ +. ta (u;\\n[.l]-\\n[.i])R +. ie \\n[continued] .nop \\*[eqn*div] +. el \{\ +. ie \\n[eqn*autolabel] \ +.nop \ +\\*[eqn*div]\ +\\*[eqn*label-specs]\ +\t\v'+\\*[eqn*shift-label]'\ +\\*[eqn*label-prfx]\\*[chapno]\\n+[eqn*label-num]\\*[eqn*label-sffx]\ +\v'-\\*[eqn*shift-label]'\ +\\*[revert-specs] +. el \ +.nop \ +\\*[eqn*div]\ +\\*[eqn*label-specs]\ +\t\v'+\\*[eqn*shift-label]'\ +\\*[eqn*label]\ +\v'-\\*[eqn*shift-label]'\ +\\*[revert-specs] +. \} +. if !\\n[continued] \{\ +. if \\n[eqn*have-caption] \ +. ADD_CAPTION +. \} +. \} +. el \{\ +. ie \\n[eqn*type]=2 \{\ +. ie '\\*[eqn*label-quad]'L' \{\ +. ta \\*[DI] +. ie \\n[continued] .nop \t\\*[eqn*div] +. el \{\ +. ie \\n[eqn*autolabel] \ +.nop \ +\\*[eqn*label-specs]\ +\v'+\\*[eqn*shift-label]'\ +\\*[eqn*label-prfx]\\*[chapno]\\n+[eqn*label-num]\\*[eqn*label-sffx]\ +\v'-\\*[eqn*shift-label]'\ +\t\\*[eqn*div]\ +\\*[revert-specs] +. el \ +.nop \ +\\*[eqn*label-specs]\ +\v'+\\*[eqn*shift-label]'\ +\\*[eqn*label]\ +\v'-\\*[eqn*shift-label]'\ +\\*[revert-specs]\ +\t\\*[eqn*div] +. \} +. \} +. el \{\ +. ta \\*[DI] (u;\\n[.l]-\\n[.i])R +. ie \\n[continued] .nop \t\\*[eqn*div] +. el \{\ +. ie \\n[eqn*autolabel] \ +.nop \ +\t\\*[eqn*div]\ +\\*[eqn*label-specs]\ +\t\v'+\\*[eqn*shift-label]'\ +\\*[eqn*label-prfx]\\*[chapno]\\n+[eqn*label-num]\\*[eqn*label-sffx]\ +\v'-\\*[eqn*shift-label]'\ +\\*[revert-specs] +. el \ +.nop \ +\t\\*[eqn*div]\ +\\*[eqn*label-specs]\ +\t\v'+\\*[eqn*shift-label]'\ +\\*[eqn*label]\ +\v'-\\*[eqn*shift-label]'\ +\\*[revert-specs] +. \} +. \} +. if !\\n[continued] \{\ +. if \\n[eqn*have-caption] \ +. ADD_CAPTION +. \} +. \} +. el \{\ +. ie '\\*[eqn*label-quad]'L' \{\ +. ta (u;\\n[.l]-\\n[.i]/2)C +. ie \\n[continued] .nop \t\\*[eqn*div] +. el \{\ +. ie \\n[eqn*autolabel] \ +.nop \ +\\*[eqn*label-specs]\ +\v'+\\*[eqn*shift-label]'\ +\\*[eqn*label-prfx]\\*[chapno]\\n+[eqn*label-num]\\*[eqn*label-sffx]\ +\v'-\\*[eqn*shift-label]'\ +\t\\*[eqn*div]\ +\\*[revert-specs] +. el \ +.nop \ +\\*[eqn*label-specs]\ +\v'+\\*[eqn*shift-label]'\ +\\*[eqn*label]\ +\v'-\\*[eqn*shift-label]'\ +\\*[revert-specs]\ +\t\\*[eqn*div] +. \} +. \} +. el \{\ +. ta (u;\\n[.l]-\\n[.i]/2)C (u;\\n[.l]-\\n[.i])R +. ie \\n[continued] .nop \t\\*[eqn*div] +. el \{\ +. ie \\n[eqn*autolabel] \ +.nop \ +\t\\*[eqn*div]\ +\\*[eqn*label-specs]\ +\t\v'+\\*[eqn*shift-label]'\ +\\*[eqn*label-prfx]\\*[chapno]\\n+[eqn*label-num]\\*[eqn*label-sffx]\ +\v'-\\*[eqn*shift-label]'\ +\\*[revert-specs] +. el \ +.nop \ +\t\\*[eqn*div]\ +\\*[eqn*label-specs]\ +\t\v'+\\*[eqn*shift-label]'\ +\\*[eqn*label]\ +\v'-\\*[eqn*shift-label]'\ +\\*[revert-specs] +. \} +. \} +. if !\\n[continued] \{\ +. if \\n[eqn*have-caption] \ +. ADD_CAPTION +. \} +. \} +. \} +. \} +. el \{\ +. ta (u;\\n[.l]-\\n[.i])R +.nop \ +\\*[eqn*label-specs]\ +\t\v'+\\*[eqn*shift-label]'\ +\t\\*[eqn*label]\ +\v'-\\*[eqn*shift-label]'\ +\\*[revert-specs] +. \} +. ta \\*[eqn*tabs] +.\" if continuing (ie is a multi-line equation), don't space and SHIM +. if !\\n[continued] \{\ +. br +. if !\\n[@TOP] \{\ +. if !\\n[.t]<(\\*[DD]+1) \{\ +. sp \\*[DD] +. ie !\\n[eqn*have-caption] \{\ +. sp .25v +. if \\n[pdfbx-running] .nr eqn*pdfbx 1 +. \} +. el .if \\n[pdfbx-running] .nr eqn*pdfbx 2 +. \} +. \} +. if !'\\*[eqn*space-adj]'' .sp -\\*[eqn*space-adj]u +. ie !\\n[eqn*no-shim] \{\ +. ie !\\n[#NO_SHIM] \ +. if !'\\n[.z]'FLOAT*DIV' .SHIM +. el \ +. if !\\n[eqn*no-flex] \ +. if !\\n[#NO_FLEX] \ +. if !'\\n[.z]'FLOAT*DIV' .FLEX +. \} +. el \ +. if !\\n[eqn*no-flex] \ +. if !\\n[#NO_FLEX] \ +. if !'\\n[.z]'FLOAT*DIV' .FLEX +. rm DD +. rm eqn*caption +. rm eqn*caption-short +. rm eqn*label +. rm short +. rr eqn*copy-in +. \} +. rm DI@cont +. rr eqn*center +. rr eqn@center*cont +. rr eqn*have-label +. rr eqn*have-caption +. rr eqn*ind +. rr eqn@ind*cont +. rr eqn*left +. rr eqn@left*cont +. \} +. nr eqn*copy-in 1 +. ad \\n[eqn*restore-adj] +. if \\n[fill] .fi +. rr fill +.END +\# +.MAC ADD_CAPTION END +. ie \\n[.t]<\\n[.v] \{\ +. if !'\\n[.z]'FLOAT*DIV' \{\ +. if \\n[#COLUMNS]=1 .ds col-num ", column \\n[#COL_NUM] +. tm1 "[mom]: '\\n[.F]', macro EQ, line \\n[eqn-linenum]: +. tm1 " Insufficient room for equation caption on page \\n[pgnum]\\*[col-num]. +. tm1 " Skipping caption but continuing to process. +. if !\\n[@TOP] \{\ +. ie \\n[#COLUMNS] \ +. COL_NEXT internal +. el .NEWPAGE +. \} +. rr eqn-linenum +. rr pgnum +. \} +. \} +. el \{\ +. if \\n[#PRINT_STYLE]=2 \{\ +. ps \\*[eqn*caption-size-change] +. nr lead-curr \\n[.v] +. sp .5v +. vs \\n[.ps]u+\\n[eqn*caption-autolead]u +. nr eqn*caption-lead-diff \\n[lead-curr]-\\n[.v] +. sp \\n[eqn*caption-lead-diff]u +. ps +. if !'\\*[eqn*caption-space]'' \ +. sp \\*[eqn*caption-space] +. \} +. if '\\*[eqn*caption-quad]'L' \{\ +. fi +. ad l +. nop \ +\\*[eqn*caption-specs]\ +\\*[eqn*caption]\ +\\*[revert-specs] +. nf +. \} +. if '\\*[eqn*caption-quad]'C' \{\ +. fi +. ad c +. nop \ +\\*[eqn*caption-specs]\ +\\*[eqn*caption]\ +\\*[revert-specs] +. nf +. \} +. if '\\*[eqn*caption-quad]'R' \{\ +. fi +. ad r +. nop \ +\\*[eqn*caption-specs]\ +\\*[eqn*caption]\ +\\*[revert-specs] +. nf +. \} +. if !'\\*[eqn*caption-space]'' \ +. sp -\\*[eqn*caption-space] +. vs +. \} +.END +\# +\# ***pic*** +\# +.MAC have-adjust END +. nr #ARGS 0 1 +. nr #COUNT \\n[#NUM_ARGS] +. while \\n+[#ARGS]<=\\n[#COUNT] \{\ +. if '\\$1'ADJUST' \{\ +. ds pic*space-adj \\$2 +. break +. \} +. shift +. \} +.END +\# +\# User settable text style for pic +\# +\# PIC_TEXT_STYLE +\# -------------- +\# *Argument: +\# <offset from page left> +\# *Function: +\# Stores user supplied page offset in register #L_MARGIN. +\# Sets .po to user supplied offset. +\# *Notes: +\# Requires unit of measure. +\# +.MAC PIC_TEXT_STYLE END +. nr #ARGS 0 1 +. nr #COUNT \\n[#NUM_ARGS] +. while \\n+[#ARGS]<=\\n[#COUNT] \{\ +. if '\\$1'FAMILY' \{\ +. shift +. ds pic*text-family \\$1 +. shift +. \} +. if '\\$1'FONT' \{\ +. shift +. ds pic*text-font \\$1 +. shift +. \} +. if '\\$1'SIZE' \{\ +. shift +. ds pic*text-size-change \\$1 +. shift +. \} +. if '\\$1'AUTOLEAD' \{\ +. shift +. nr pic*text-autolead \\$1 +. shift +. \} +. \} +.END +\# +\# Main macros +\# +.MAC PS END +. if \\n[pdfbx-running] \{\ +. ie !r pdfbx-top .nr pic*pdfbx 2 +. el .nr pic*pdfbx 1 +. \} +. if !\\n[#PP] .nop +. br +. have-adjust \\$@ \" Adjusting is handled by FLOAT +. if !'\\n[.z]'FLOAT*DIV' \ +. FLOAT ADJUST \\*[pic*space-adj] +. PDF_TARGET fig:\\n+[lists*target] +. ds ev-current \\n[.ev] +. rr float*pic +. rr pic*have-label +. rr grap +. nr float*pic 1 +. nr ind-pre-pic \\n[.i] +. nr lead-pre-pic \\n[.v] +. if \\n[#MLA] \ +. if !\\n[pdfbx-running] .sp .5v +. in 0 +. ev PIC +. evc \\n[ev-current] +. nf +. ie \\n[#NUM_ARGS]<2 .@error bad arguments to PS (not preprocessed with pic?) +. el \{\ +. if \B'\\$1' \{\ +. ie !\B'\\$2' .ds pic*scale-width \\$1 +. el .ds pic*scale-width \\$2 +. \} +. \} +.\" This is a bit confusing. pic is decorated with 2 args (width +.\" and height), which are read during pre-processing but have to be +.\" ignored when parsing args during main processing. We shift pic's +.\" args out of the way, then pop them off the arg stack because +.\" they're not needed during macro processing. +. while \B'\\$1' .shift +. nr loop-counter \\n[#NUM_ARGS] +. nr loop-count 0 1 +. while \\n+[loop-count]<=\\n[loop-counter] \{\ +. if '\\$1'LEFT' \{\ +. nr pic*left 1 +. shift 1 +. \} +. if '\\$1'CAPTION' \{\ +. nr pic*have-caption 1 +. ds pic*caption \\$2 +. shift 2 +. \} +. if '\\$1'SHORT_CAPTION' \{\ +. ds pic*caption-short \\$2 +. shift 2 +. \} +. if '\\$1'LABEL' \{\ +. nr pic*have-label 1 +. ds pic*label \\$2 +. shift 2 +. \} +. if '\\$1'TARGET' \{\ +. ds target "\\$2 +. PDF_TARGET "\\*[target] +. shift 2 +. \} +. if '\\$1'NO_SHIM' \{\ +. nr @no-shim 1 +. shift 1 +. \} +. if '\\$1'NO_FLEX' \{\ +. nr @no-flex 1 +. shift 1 +. \} +. if '\\$1'GRAP' \{\ +. nr grap 1 +. shift 1 +. \} +. \} +. if (\\n[pic*have-label]=1):(\\n[pic*autolabel]=1) \ +. ds label-type pic +. ds pic*label-sffx-tmp \\*[pic*label-sffx] +. if !'\\*[pic*label-sffx-tmp]'' \ +. substring pic*label-sffx-tmp -1 +. if '\\*[pic*label-sffx-tmp]'.' \ +. if \\n[pic*caption-after-label]=0 .chop pic*label-sffx +. if \\n[#MLA] \{\ +. if (\\n[pic*have-label]=1):(\\n[pic*autolabel]=1) \{\ +. if !\\n[pic*have-caption] \ +. mla@error label caption \\n[.F] \\$0 \\n[.c] +. \} +. if \\n[pic*have-caption] \{\ +. if !\\n[pic*have-label] \{\ +. if !\\n[pic*autolabel] \ +. mla@error caption label \\n[.F] \\$0 \\n[.c] +. \} +. \} +. \} +. if !'\\*[pic*text-family]'' \ +. fam \\*[pic*text-family] +. if !'\\*[pic*text-font]'' \ +. ft \\*[pic*text-font] +. if !'\\*[pic*text-size-change]'' \ +. ps \\n[#DOC_PT_SIZE]u\\*[pic*text-size-change] +. nr lead-current \\n[.v] +. ie \\n[pic*text-autolead] \ +. vs \\n[.ps]u+(\\n[pic*text-autolead]u*1000u) +. el .vs \\n[.ps]u +. nr pic@text-lead \\n[.v] +. nr pic@text-size \\n[.ps] +. if !'\\*[pic*text-color]'' .COLOR \\*[pic*text-color] +. if \\n[@TOP] \{\ +. RESTORE_SPACE +. nr pic*top-lead-adj 1 +. \} +. nr pic*top-lead-diff \\n[lead-pre-pic]u-\\n[.v]u +. if (\\n[pic*have-caption]=0):(\\n[pic*caption-after-label]=1) \{\ +. ie \\n[pic*top-lead-adj] \{\ +. sp \\n[pic*top-lead-diff]u +. rr pic*top-lead-adj +. \} +. el .if (\\n[pic*caption-after-label]=0):(\\n[#MLA]=0) \ +. sp \\n[lead-pre-pic]u/2u +. \} +. if \\n[pic*label-with-chapter] \ +. ds chapno \\n[#CH_NUM]. +. if \\n[pic*autolabel] \ +. ds pic*label \\*[pic*label-prfx]\\*[chapno]\\n+[fig*label-num]\\*[pic*label-sffx] +. nr fig*label-width \w'\\*[pic*label]' +. if !'\\*[pic*caption-short]'' .ds short -short +. if \\n[#PDF_BOOKMARKS] \{\ +. ie !'\\*[pic*label]'' \ +\!. TO_FIGURES "\\*[pic*label]" "\\*[pic*caption\\*[short]]" +. el \ +\!. TO_FIGURES "\\*[pic*caption\\*[short]]" +. \} +. di pic*div +.END +\# +.MAC PE END +. di +. nr pic*div-width \\n[dl] +. if \\n[@TOP] \ +. RESTORE_SPACE +. if !\\n[nl]=\\n[#PAGE_TOP] .sp \\n[lead-pre-pic]u/2u +. if (\\n[pic*have-caption]=1)&(\\n[pic*caption-after-label]=0) \{\ +. ev caption +. evc \\*[ev-current] +. nh +. ie \\n[#PRINT_STYLE]=1 .TYPEWRITER +. el \{\ +. if \\n[.u] \{\ +. nr fill 1 +. nf +. \} +. pic*caption-style +. if \\n[fill] .fi +. rr fill +. nr lead-current \\n[.v] +. vs \\n[.ps]u+\\n[pic*caption-autolead]u +. nr pic*caption-lead-diff \\n[lead-current]-\\n[.v] +. in \\n[ind-pre-pic]u +. \} +. PIC*SET_CAPTION_QUAD \\*[pic*caption-quad] +. if \\n[@TOP] .RESTORE_SPACE +\!. in -\\n[ind-pre-pic]u +. sp \\n[pic*caption-lead-diff]u +\!. if \\\\n[.ns] .rs +. if \\n[pic*pdfbx]=1 \{\ +. SIZESPECS +. if \\n[PIC]=1 \!.rt +. if \\n[PIC]=2 .rt +. sp \\n[pic*caption-lead-diff]u +. sp \\*[wt\\n[stack]]+\\*[gap\\n[stack]]u+\\*[$CAP_HEIGHT] +. nr pic*pdfbx 2 +. \} +. nop \\*[pic*caption] +. if \\n[#PRINT_STYLE]=1 .sp .5 +. if !'\\*[pic*caption-space]'' \ +. sp \\*[pic*caption-space]-\\n[pic*text-autolead]p +. br +. ev +. \} +. if \\n[pic*pdfbx]=1 \{\ +. if (\\n[pic*have-caption]=0):(\\n[pic*caption-after-label]=1) \{\ +. if \\n[PIC]=1 \!.rt +. if \\n[PIC]=2 .rt +. sp \\n[#DOC_LEAD]u/2u +. sp \\*[wt\\n[stack]]+\\*[gap\\n[stack]]u +.\" Correct for wandering top of pic +. sp -\\n[pic*text-autolead]p +. \} +. \} +. if !\\n[pic*left] \ +. in (\\n[ll-pre-float]u-\\n[pic*div-width]u)/2u +. if \\n[grap] \ +\!. sp -2 +. if (\\n[grap]=1)&(\\n[pic*caption-after-label]=1) \ +\!. sp -2 +. if \\n[pdfbx-running] \{\ +. if \\n[pdfbx-top] \{\ +. ie !\\n[pic*left] \!.in -\\*[gap\\n[stack]]u*2u +. el .in -\\*[wt\\n[stack]] +. \} +. \} +. if (\\n[pic*pdfbx]=0):(\\n[pic*pdfbx]=2) \ +. if (\\n[pic*have-caption]=0)&(\\n[pic*caption-after-label]=0) \ +\!. sp -.5-\\n[pic*text-autolead]p +. pic*div +. br +. if (\\n[pic*have-label]=1):(\\n[pic*autolabel]=1):(\\n[pic*caption-after-label]=1) \{\ +. nr lead-pre-label \\n[.v] +. ev label +. evc \\*[ev-current] +. ie \\n[#PRINT_STYLE]=1 .TYPEWRITER +. el \{\ +. pic*label-style +. nr lead-current \\n[.v] +. vs \\n[.ps]u+\\n[pic*label-autolead]u +. in \\n[ind-pre-pic]u +. sp \\n[lead-current]u-\\n[.v]u +. \} +. PIC*SET_LABEL_QUAD \\*[pic*label-quad] +\!. in -\\n[ind-pre-pic]u +. if !'\\*[pic*label-space]'' .sp \\*[pic*label-space] +. if \\n[#PRINT_STYLE]=1 .sp .5v +. if \\n[#PRINT_STYLE]=2 \{\ +. SIZESPECS +. if !\\n[pic*pdfbx] \{\ +. ie !\\n[grap] .sp -1 +. el .sp -1.5 +. \} +. sp \\*[$CAP_HEIGHT]+.5 +. if \\n[grap] .if !\\n[pic*have-label] .sp -.5 +. \} +. ie \\n[pic*autolabel] \ +. nop \ +\\*[pic*label-prfx]\\*[chapno]\\n[fig*label-num]\\*[pic*label-sffx]\| +. el \ +. if !'\\*[pic*label]'' .nop \\*[pic*label] +. if dLABEL.REFS \{\ +. if \\n[pic*autolabel] \ +. tm .ds \\*[target] \\*[chapno]\\n[fig*label-num] +. if \\n[pic*have-label] \ +. tm .ds \\*[target] \\*[pic*label] +. \} +. rm target +. fam +. ft +. ps +. gcolor +. ie !\\n[pic*caption-after-label] .br +. el \{\ +. if !'\\*[pic*caption]'' .nop \ +\\*[pic*caption-specs]\\*[pic*caption]\\*[revert-specs] +. br +. \} +. ev +. in 0 +. \} +. if \\n[pic*pdfbx] .nr pic*pdfbx 2 +. ev +. if !\\n[pdfbx-running] \ +. sp .5 +. if \\n[pic*pdfbx]=2 .if !\\n[grap] .sp .5 +. ie \\n[pdfbx-running] \ +. if \\n[PIC]=1 .FLOAT off +. el .FLOAT off +. it 1 rr-pic*pdfbx +. in \\n[ind-pre-pic]u +. if !\\n[defer] .rr pic*have-caption +. rm pic*left +. rm short +. rr float*pic +. if '\\*[pic*label-sffx-tmp]'.' .ds pic*label-sffx . +. if \\n[pdfbx-running]=0 .rr pdfbx-running +. if r pdfbx-top .rr pdfbx-top +. if '\\*[pic*label-sffx-tmp]'.' .ds pic*label-sffx . +.END +\# +\# ***refer*** +\# +\# Footnote references +\# ------------------- +\# *Function: +\# Instruct REF to put references in footnotes. +\# +.MAC FOOTNOTE_REFS END +. ie !'\\$1'' .rr #FN_REF +. el \{\ +. if r #EN_REF .rr #EN_REF +. nr #FN_REF 1 +. \} +.END +\# +\# Endnote references +\# ------------------ +\# *Function: +\# Instruct REF to collect references for endnotes output. +\# +.MAC ENDNOTE_REFS END +. ie !'\\$1'' .rr #EN_REF +. el \{\ +. if r #FN_REF .rr #FN_REF +. nr #EN_REF 1 +. if !r#EN_MARKER_STYLE .ENDNOTE_MARKER_STYLE SUPERSCRIPT +. \} +.END +\# +\# Prepare mom for a reference +\# --------------------------- +\# *Argument: +\# <none> | INDENT L|LEFT|R|RIGHT|B|BOTH <indent value> +\# *Function: +\# Calls FOOTNOTE or ENDNOTE, depending on whether #REF_FN or +\# #REF_EN is set to 1. +\# *Notes: +\# For convenience, REF is a toggle. +\# +\# REF optionally takes the same arguments as FOOTNOTE, allowing +\# users to indent references that go in footnotes when footnote +\# indenting is required. FOOTNOTE_REFS must be on for this. +\# +.MAC REF END +. ie \\n[#FN_REF]+\\n[#EN_REF]=0 \{\ +. if !\\n[#REF_WARNING]=1 \{\ +. tm1 "[mom]: Before REF at line \\n[.c], neither FOOTNOTE_REFS nor ENDNOTE_REFS +. tm1 " has been selected. If "sort" and "accumulate" are in your refer +. tm1 " commands, references will be collected for later output with $LIST$. +. tm1 " Otherwise, they will disappear. +. nr #REF_WARNING 1 +. \} +. \} +. el \{\ +. ie \\n[#REF]=1 \{\ +. if \\n[#FN_REF]=1 .FOOTNOTE OFF +. if \\n[#EN_REF]=1 .ENDNOTE OFF +. rr #REF +. \} +. el \{\ +. rr #REF_WARNING +. nr #REF 1 +. if \\n[#FN_REF]=1 .FOOTNOTE \\$1 \\$2 \\$3 +. if \\n[#EN_REF]=1 .ENDNOTE +. \} +. \} +.END +\# +\# Embedded references in text (with brackets) +\# ------------------------------------------- +\# +.MAC REF_BRACKETS_NOTICE END +. tm1 "[mom]: \\$1 has been removed from mom. See the mom documentation 'refer.html' +. tm1 " for instructions on parenthetical insertions of references into text. +. ie '\\$1'REF_STYLE' .tm1 " Continuing to process '\\n[.F]' from line \\n[.c]. +. el .ab [mom]: Aborting '\\n[.F]' at \\$1, line \\n[.c]. +.END +\# +.MAC REF_BRACKETS_START END +. REF_BRACKETS_NOTICE \\$0 +.END +\# +.MAC REF_BRACKETS_END END +. REF_BRACKETS_NOTICE \\$0 +.END +\# +\# These four pairs of aliases used to allow users to embed +\# references in text and have them surrounded by (), [], {} or <>. +\# bracket-label should be used in the refer block instead. +\# +.ALIAS REF( REF_BRACKETS_START +.ALIAS REF) REF_BRACKETS_END +\# +.ALIAS REF[ REF_BRACKETS_START +.ALIAS REF] REF_BRACKETS_END +\# +.ALIAS REF{ REF_BRACKETS_START +.ALIAS REF} REF_BRACKETS_END +\# +.ALIAS REF< REF_BRACKETS_START +.ALIAS REF> REF_BRACKETS_END +\# +\# Refer indenting +\# --------------- +\# *Argument: +\# FOOTNOTE | ENDNOTE | BIBLIO <indent for 2nd and subsequent lines of discrete reference entries> +\# *Function: +\# Sets registers #REF_FN_INDENT, #REF_EN_INDENT or #REF_BIB_INDENT. +\# *Notes: +\# Indent value requires a unit of measure. If refs are going +\# into footnotes or endnotes, first lines get indented; if going +\# into a bibliography, second lines get indented +\# +.MAC INDENT_REFS END +. if '\\$1'FOOTNOTE' .ds $REF_FN_INDENT \\$2 +. if '\\$1'ENDNOTE' .ds $REF_EN_INDENT \\$2 +. if '\\$1'BIBLIO' .ds $REF_BIB_INDENT \\$2 +.END +\# +.ALIAS REF_INDENT INDENT_REFS +\# +\# Hyphenation of references +\# ------------------------- +\# *Argument: +\# <none> | <anything> +\# *Function: +\# Sets register #REF_HY +\# +.MAC HYPHENATE_REFS END +. ie '\\$1'' .nr #REF_HY 1 +. el \ +. if r #REF_HY .rr #REF_HY +.END +\# +\# The remainder of the definitions in this section are modified +\# versions of the definitions found in the refer module of s.tmac. +\# +.de @error +.tm [mom]: '\\n[.F]', line \\n[.c]: \\$* +.. +\# +\# Underlining unavoidably turns off sentence spacing. +\# +.de ref*restore-ss +\c +.SS \\*[$SAVED_SS_VAR] +.if '\\n[.z]'END_NOTES' \{\ +\c +\E*[PREV]\c +.\} +.. +\# The following strings define the order of entries for different +\# types of references. Each letter in the string refers to a database +\# field (A for author, T1/T2 for article and book titles, etc). +\# +.de ref*specs +.if \\n[#PRINT_STYLE]=1 \{\ +. char ' \[aq] +. char \[oq] \[aq] +.\} +.\" Internet site - type 0 +.ds ref*spec!0 i Q A m p T2 s o D c a u n +.\" Journal article - type 1 +.ds ref*spec!1 i Q A m p T2 q O J V S N D P n +.\" Book - type 2 +.ds ref*spec!2 i Q A m p T1 q b d l r E S e V O C I D P t n +.\" Article within book - type 3 +.ds ref*spec!3 i Q A m p T2 B b d l r E S e V O C I D P t n +.\" Tech report - type 4 +.ds ref*spec!4 i Q A m p T1 R G O C I D P n +.\" Magazine or newspaper article - type 5 +.ds ref*spec!5 i Q A m p T2 O M V S N D P n +.. +\# +\# Refer's "1st" macro. Since it is possible to define database +\# fields using any single letter, we remove all possible string +\# definitions of the form [X and [x. Also, reset ref*spec!<n> +\# strings to their defaults. +\# +.de ]- +.ref*specs +.rm [A [B [C [D [E [F [G [H [I [J [K [L [M \ + [N [O [P [Q [R [S [T [U [V [W [X [Y [Z \ + [a [b [c [d [e [f [g [h [i [j [k [l [m \ + [n [o [p [q [r [s [t [u [v [w [x [y [z +.if r [e .rr [e \" [e persists if %e field is last +.rr ref*type +.rm ref*string +.. +\# +\# Refer's "2nd" macro; builds up a reference with ref*build, and +\# prints it with ref*print. +\# +.de ][ +.nr ref*type \\$1 +.if \\n[ref*type]=0 \{\ +. ie d [C \{\ +. if !d [I \{\ +. nr pre-1900 1 \" If pre-1900, MLA allows excluding publisher +. nr ref*type 2 +. \} +. \} +. el .nr ref*type 2 +. if d [q .nr ref*type 2 +.\} +.if d [u .nr ref*type 0 \" If %u exists, always treat as Internet ref +.if \\n[ref*type]=3 \{\ +. if !'\\*([R'' \{\ +. nr ref*type 4 +. ds ref*spec!4 i Q A m p T2 B R O C I D P n +. \} +. if !'\\*([G'' \{\ +. nr ref*type 4 +. ds ref*spec!4 i A m p T2 B G O C I D P O n +. \} +.\} +.if r [T \{\ +. als [T1 [T +. als [T2 [T +.\} +.ie d ref*spec!\\n[ref*type] .ref*build \\*[ref*spec!\\n[ref*type]] +.el \{\ +. @error unknown reference type '\\n[ref*type]' +. ref*build \\*[ref*spec!0] +.\} +.if !\\n[.hy]=0 \{\ +.nr #RESTORE_HY \\n[.hy] +.if !r#REF_HY .nh +.\} +.ref*print +.if !\\n[#RESTORE_HY]=0 .hy \\n[#RESTORE_HY] +.rr #RESTORE_HY +.rm ref*string +.rm [F [T1 [T2 +.. +\# +\# Refer's "3rd" macros, which set up and terminate the output +\# of collected references +\# +.de ]< +.rm author \" If not, persists over multiple 'bibliography' commands +.als ref*print ref*end-print +.nr #REF 1 +.if \\n[#BIB_LIST]=1 \{\ +. nr #IN_BIB_LIST 1 +. LIST DIGIT \\*[$BIB_LIST_SEPARATOR] \\*[$BIB_LIST_PREFIX] +.\} +.. +\# +.de ]> +.LIST OFF +.rr #REF +.rr #IN_BIB_LIST +.als ref*print ref*normal-print +.. +\# +\# Output +\# ------ +\# +\# Output normal, non-collected refs +\# +.de ref*normal-print +.nr #CURRENT_HY \\n[.hy] +\\*[ref*string] +.. +\# +\# Output collected refs +\# +.de ref*end-print +.\" 10 is arbitrary +.nn 10 +.nr #REF_BIB_INDENT (u;\\*[$REF_BIB_INDENT]) +.ie \\n[#BIB_LIST]=0 \{\ +. in +\\n[#REF_BIB_INDENT]u +. ti -\\n[#REF_BIB_INDENT]u +.\} +.el .ITEM +.\" Part of workaround for refer spitting out a blank page if the +.\" last ref falls on the bottom line. +\\*[ref*string]\R'ref*num*first-pass +1'\?\R'ref*num +1'\? +.sp \\*[$BIB_SPACE] +.ie \\n[#BIB_LIST]=0 .in +.el .IL -\\n[#REF_BIB_INDENT]u +.nn 0 +.. +\# +.als ref*print ref*normal-print +\# +\# Build up the ref*string +\# +\# Correct MLA "typewritten" style (printstyle TYPEWRITE) demands +\# two spaces after each period. The spaces are hardwired into the +\# string definitions (ref*add-<x>), so we have to make sure that there +\# aren't two spaces when the printstyle is TYPESET. Since I find that +\# references look a bit crowded with 0 sentence space, I've bumped it +\# up to +8. User's sentence spacing is reset in FOOTNOTES and ENDNOTES. +\# +.de ref*build +.if \\n[#PRINT_STYLE]=2 \ +. if (\\n[#FN_REF]+\\n[#EN_REF])>0 .SS +8 +.rm ref*string +.while \\n[.$] \{\ +. if d [\\$1 \{\ +. ie d ref*add-\\$1 .ref*add-\\$1 +. el .ref*add-dflt \\$1 +. \} +. shift +.\} +.\" now add a final period +.ie d ref*string \{\ +. if !\\n[ref*suppress-period] .as ref*string . +. if d ref*post-punct \{\ +. as ref*string "\\*[ref*post-punct] +. rm ref*post-punct +. \} +.\} +.el .ds ref*string +.. +\# +\# The following macros determine how entries are formatted WRT +\# punctuation, type style, additional strings, etc. +\# +\# o First argument is the database field letter. +\# o Second argument is the punctuation character to use to separate this +\# field from the previous field. +\# o Third argument is a string with which to prefix this field. +\# o Fourth argument is a string with which to postfix this field. +\# o Fifth argument is a string to add after the punctuation character +\# supplied by the next field. +\# +\# %A Author(s) +.de ref*add-A +.ds eval*[A \\*([A +.substring eval*[A -1 +.if !\\n[skip-[A] \{\ +. if '\\*[eval*[A]'.' \ +. if !\\n[#FN_REF]+\\n[#EN_REF] .chop [A +.\" Per MLA, footnotes and endnotes should not use idem, therefore +.\" if %i contains other than idem (e.g., ed., trans.), transpose it +.\" to after author's name +. ie \\n[#FN_REF]+\\n[#EN_REF]=1 \{\ +. ie !'\\*[idem]'' .ref*field A "" "" "? \\*[idem]" +. el .ref*field A +. rm idem +. el .ref*field A +. \} +.\} +.if \\n([A .nr ref*suppress-period 1 +.rr skip-[A +.. +\# %i Idem. +\# +\# In bibliographies, per MLA, replace %A with long dash after +\# first entry with author's name; if %i field contains other than +\# the word 'idem', appends it to the dash. +\# In foot/endnotes, idem is ignored; MLA requires full name for +\# each foot/endnote entry. +\# +.de ref*add-i +.\" Is a foot/endnote. +.ie \\n[#FN_REF]+\\n[#EN_REF]=1 \{\ +. ie '\\*([i'idem' .rm [i +. el .ds idem \\*([i +.\} +.el \{\ +. rr skip-[A +.\" %i is idem +. ie '\\*([i'idem' \{\ +.\" If [A (%A) is the same as the last [A, captured in 'author'. +. if '\\*([A'\\*[author]' \{\ +. rm [i +. ref*field i "" \[idem] "" " " +. nr skip-[A 1 +. \} +. ds author \\*([A +. \} +.\" %i is not 'idem'; attach to long dash +. el \{\ +. ds eval*[i \\*([i +. substring eval*[i -1 +. if '\\*[eval*[i]'.' \{\ +. chop [i +. ds idem \\*([i +. \} +. rm [i +. rm [A +. ref*field i "" \[idem] ", \\*[idem]" " " +. \} +.\} +.. +\# %m Multiple authors (et al.) +.de ref*add-m +.if !\\n[#FN_REF]+\\n[#EN_REF] \{\ +. ds eval*[m \\*([m +. substring eval*[m -1 +. if '\\*[eval*[m]'.' .chop [m +.\} +.ref*field m , +.. +\# %p Post-author string (e.g., Preface, Foreword, etc) +.de ref*add-p +.\" Convert first letter to uppercase, per MLA, if BIBLIO +.if !\\n[#FN_REF]+\\n[#EN_REF] \{\ +. ds initial*cap \\*([p +. substring initial*cap 0 0 +. ds [p*string \\*([p +. substring [p*string 1 +. ds [p \E*[UC]\\*[initial*cap]\E*[LC]\\*[[p*string] +.\} +.ie \\n[#FN_REF]+\\n[#EN_REF] .ref*field p , +.el .ref*field p . " " +.. +\# %Q Author(s) when author is not a person +.de ref*add-Q +.ie \\n[#FN_REF]+\\n[#EN_REF] .ref*field Q +.el .ref*field Q +.. +\# %T Title (generic) +.de ref*add-T1 +.ie \\n[#FN_REF]+\\n[#EN_REF] .ref*field T , \E*[IT] \E*[ref*restore-ss] +.el \{\ +. ie !'\\*([A'' .ref*field T . " \E*[IT]" \E*[ref*restore-ss] +. el \{\ +. ie !'\\*([Q'' .ref*field T . " \E*[IT]" \E*[ref*restore-ss] +. el .ref*field T . \E*[IT] \E*[ref*restore-ss] +. \} +.\} +.if \\n([T .nr ref*suppress-period \\n([T +.. +\# %T Title of a chapter or article +.de ref*add-T2 +.ie \\n[#FN_REF]+\\n[#EN_REF] \ +. ref*field T , \[lq] "" \[rq] +.el \{\ +. ie '\\*([A'' \{\ +. ref*field T . \[lq] "" \[rq] +. if !'\\*([Q''.ref*field T . " \[lq]" "" \[rq] +. \} +. el .ref*field T . " \[lq]" "" \[rq] +.\} +.if \\n([T .nr ref*suppress-period \\n([T +.. +\# %B Book title (when citing an article from a book) +.de ref*add-B +.ie \\n[#FN_REF]+\\n[#EN_REF] \{\ +. ie \\n([T .ref*field B "" \E*[IT] \E*[ref*restore-ss] +. el .ref*field B , \E*[IT] \E*[ref*restore-ss] +.\} +.el \{\ +. ie \\n([T .ref*field B "" ".\E*[IT]" \E*[ref*restore-ss] +. el .ref*field B . " \E*[IT]" \E*[ref*restore-ss] +.\} +\# refer doesn't set reg [T to 1 for these book titles, so we do it here +.ds eval*[B \\*([B +.substring eval*[B -1 +.rr [T +.if '\\*[eval*[B]'!' .nr [T 1 +.if '\\*[eval*[B]'?' .nr [T 1 +.rm eval*[B +.. +\# %q Titles that must go in quotes (e.g. an unpublished dissertation) +.de ref*add-q +.ie \\n[#FN_REF]+\\n[#EN_REF] .ref*field q , \[lq] "" \[rq] +.el \{\ +. ie !'\\*([A'' .ref*field q . " \[lq]" "" \[rq] +. el \{\ +. ie !'\\*([Q'' .ref*field q . " \[lq]" "" \[rq] +. el .ref*field q . \[lq] "" \[rq] +. \} +.\} +.. +\# %R Report number for technical reports +.de ref*add-R +.ref*field R . " " +.. +\# %J Journal name +.de ref*add-J +.ie \\n[#FN_REF]+\\n[#EN_REF] \{\ +. ie \\n([T .ref*field J "" "\E*[IT]" \E*[ref*restore-ss] +. el .ref*field J , "\E*[IT]" \E*[ref*restore-ss] +.\} +.el \{\ +. ie \\n([T .ref*field J "" " \E*[IT]" \E*[ref*restore-ss] +. el .ref*field J . " \E*[IT]" \E*[ref*restore-ss] +.\} +.. +\# %M Magazine or newspaper name +.de ref*add-M +.ie \\n[#FN_REF]+\\n[#EN_REF] \{\ +. ie \\n([T .ref*field M "" "\E*[IT]" \E*[ref*restore-ss] +. el .ref*field M , "\E*[IT]" \E*[ref*restore-ss] +.\} +.el \{\ +. ie \\n([T .ref*field M "" " \E*[IT]" \E*[ref*restore-ss] +. el .ref*field M . " \E*[IT]" \E*[ref*restore-ss] +.\} +.. +\# %E Editor(s) +.de ref*add-E +.ds eval*[E \\*([E +.substring eval*[E -1 +.if '\\*[eval*[E]'.' \{\ +. if !\\n[#FN_REF]+\\n[#EN_REF] .chop [E +. rm eval*[E +.\} +.\" Workaround for join-authors also joining editors. MLA style +.\" requires a comma after first editor only if there are more than +.\" two, whereas join-authors always puts a comma after the first if +.\" there's more than one. +.rm eval*[E +.nr position 1 1 +.nr counter 1 1 +.while !'\\*[eval*[E]',' \{\ +. ds eval*[E \\*([E +. substring eval*[E \\n+[position] \\n[position] +. if \\n+[counter]>30 .break \" 30 is arbitrary +.\} +.\" Check for " and" +.if '\\*[eval*[E]',' \{\ +. ds eval*[E \\*([E +. nr and-check \\n[position]+4 +. substring eval*[E \\n+[position] \\n[and-check] +.\} +.if '\\*[eval*[E]' and' \{\ +. nr counter 1 1 +. nr start-range -1 1 +. nr end-range 3 1 +. while !'\\*[eval*[E]', and' \{\ +. ds eval*[E \\*([E +. substring eval*[E \\n+[start-range] \\n+[end-range] +. if \\n+[counter]>50 .break \" just in case; 50 is arbitrary +. \} +. if '\\*[eval*[E]', and' \{\ +. length len*[E \\*([E +. nr rhs \\n[len*[E]-\\n[start-range] +. ds lhs \\*([E +. ds rhs \\*([E +. substring lhs 0 \\n[start-range]-1 +. substring rhs -(\\n[rhs]-1) +. ds [E \\*[lhs]\\*[rhs] +. \} +. rm lhs +. rm rhs +. rr and-check +. rr counter +. rr start-range +. rr end-range +. rr len*[E +.\} +.\" End workaround +.ie !\\n[ref*type]=0 \{\ +. ie \\n([E>0 \{\ +. ie \\n[#FN_REF]+\\n[#EN_REF] \{\ +. ie \\n([T .ref*field E "" "ed. " +. el .ref*field E , "ed. " +. \} +. el \{\ +. ie \\n([T .ref*field E "" " Eds. " +. el .ref*field E . " Eds. " +. \} +. \} +. el \{\ +. ie \\n[#FN_REF]+\\n[#EN_REF] \{\ +. ie \\n([T .ref*field E "" "ed. " +. el .ref*field E , "ed. " +. \} +. el \{\ +. ie \\n([T .ref*field E "" " Ed. " +. el .ref*field E . " Ed. " +. \} +. \} +.\} +.el \{\ +. ie \\n([T .ref*field E "" " " +. el .ref*field E . " " +.\} +.rr [T +.rr [E +.. +\# %e Edition +.de ref*add-e +.ie \\n([T .ref*field e "" "" " ed." +.el \{\ +. ie \\n[#FN_REF]+\\n[#EN_REF] .ref*field e , "" " ed." +. el .ref*field e . " " " ed." +.\} +.nr ref*suppress-period 1 +.nr [e 1 +.rr [T +.. +\# %V Volume (of a journal, or series of books); for journals, %N may be preferable +.de ref*add-V +.if \\n[ref*type]=1 \ +. ref*field V +.if \\n[ref*type]=2 \{\ +. ie \\n[#FN_REF]+\\n[#EN_REF] .ref*field V , "vol. " +. el \{\ +. ie \\n([T .ref*field V "" " Vol. " +. el .ref*field V . " Vol. " +. \} +.\} +.if \\n[ref*type]=3 \{\ +. ie \\n([T .ref*field V "" " " +. el .ref*field V . " " +.\} +.rr [T +.. +\# %N Journal number +.de ref*add-N +.ref*field N +.. +\# %S Series (books or journals) +.de ref*add-S +.if \\n[ref*type]=1 \ +. ref*field S +.if \\n[ref*type]=2 \{\ +. ie \\n[#FN_REF]+\\n[#EN_REF] \{\ +. ie \\n([T .ref*field S +. el .ref*field S , +. \} +. el \{\ +. ie \\n([T .ref*field S "" " " +. el .ref*field S . " " +. \} +.\} +.if \\n[ref*type]=3 \{\ +. ie \\n([T .ref*field S "" " " +. el .ref*field S . " " +.\} +.rr [T +\# refer doesn't set reg [T to 1 for series titles, so we do it here +.ds eval*[S \\*([S +.substring eval*[S -1 +.if '\\*[eval*[S]'!' .nr [T 1 +.if '\\*[eval*[S]'?' .nr [T 1 +.rm eval*[S +.. +\# %C City +.de ref*add-C +.ie \\n[#FN_REF]+\\n[#EN_REF] \{\ +. ie r [d \{\ +. ref*field C +. rr [d +. \} +. el \ +. ref*field C "" \*[FU 2]( +. if \\n([T .nr ref*suppress-period \\n([T +.\} +.el \{\ +. ie \\n([T .ref*field C "" " " +. el \{\ +. ie r [e .ref*field C "" " " +. el .ref*field C . " " +. \} +.\} +.rr [T +.rr [e +.. +\# %I Publisher (I stands for Issuer) +.de ref*add-I +.ie \\n[#FN_REF]+\\n[#EN_REF] \{\ +. ie !'\\*([C'' .ref*field I : +. el .ref*field I "" ( +.\} +.el \{\ +. ie !'\\*([C'' .ref*field I : +. el \{\ +. ie \\n([T .ref*field I "" " " +. el .ref*field I . " " +. \} +.\} +.rr [T +.. +\# %D Date of publication +.de ref*add-D +.if \\n[ref*type]=0 \{\ +. ie \\n[#FN_REF]+\\n[#EN_REF] .ref*field D , +. el .ref*field D . " " +.\} +.if \\n[ref*type]=1 \ +. ref*field D "" "(" ")" +.if \\n[ref*type]=2 \{\ +. ie \\n[#FN_REF]+\\n[#EN_REF] .ref*field D , "" ) +. el .ref*field D , +.\} +.if \\n[ref*type]=3 \{\ +. ie !'\\*([C'' \{\ +. ie \\n[#FN_REF]+\\n[#EN_REF] .ref*field D , "" ) +. el .ref*field D , +. \} +. el \{\ +. if '\\*([I'' \{\ +. ds eval*[D \\*([D +. substring eval*[D 0 -4 +. ie '\\*[eval*[D]'1' .ds kern \*[BU3] +. el .ds kern \*[BU2] +. ie \\n[#PRINT_STYLE]=2 \ +. if \\n[#FN_REF]+\\n[#EN_REF] .ref*field D "" (\\*[kern] ) +. el .ref*field D +. \} +. rm eval*[D +. rm kern +. \} +.\} +.if \\n[ref*type]=4 .ref*field D , +.if \\n[ref*type]=5 .ref*field D +.ds eval*[D \\*([D +.substring eval*[D -1 +.if '\\*[eval*[D]'.' .nr ref*suppress-period 1 +.. +\# %P Page number(s) +.de ref*add-P +.if \\n[ref*type]=5 .nr ref*type 1 +.ie \\n[#FN_REF]+\\n[#EN_REF] \{\ +. ie \\n[ref*type]=1 .ref*field P : "" . +. el .ref*field P "" "\|" +. if \\n[ref*type]=1 .nr ref*suppress-period 1 +.\} +.el \{\ +. ie \\n[ref*type]=1 .ref*field P \|: +. el \{\ +. ie d [n .ref*field P . \| . +. el .ref*field P . " " +. \} +.\} +.. +\# %G Gov't. ordering number +.de ref*add-G +.ie \\n[#FN_REF]+\\n[#EN_REF] ref*field G , +.el .ref*field G . " " +.. +\# %O Other (info that goes after %T [or %B] but is hard to categorize; e.g., a dissertation) +.de ref*add-O +.ds eval*[O \\*([O +.substring eval*[O -1 +.if '\\*[eval*[O]'.' .nr [O 1 +.ds initial*cap \\*([O +.substring initial*cap 0 0 +.ds [O*string \\*([O +.substring [O*string 1 +.if !\\n[#FN_REF]+\\n[#EN_REF] \ +. ds [O \E*[UC]\\*[initial*cap]\E*[LC]\\*[[O*string] +.ie \\n[#FN_REF]+\\n[#EN_REF] .ref*field O , +.el \{\ +. if \\n([O=1 .chop [O +. ie r [e .ref*field O "" " " +. el \{\ +. ie !d [A .ref*field O +. el .ref*field O . " " +. \} +.\} +.rr [O +.rr [e +.. +\# %n Annotations (after ref) +.de ref*add-n +.ds eval*[n \\*([n +.substring eval*[n -1 +.if '\\*[eval*[n]'.' .chop [n +.if '\\*[eval*[n]'?' .nr [n 1 +.if '\\*[eval*[n]'!' .nr [n 1 +.ie \\n[#FN_REF]+\\n[#EN_REF] .ref*field n , +.el \{\ +. ie !'\\*([P'' .ref*field n "" " " +. el .ref*field n . " " +.\} +.if r [n .nr ref*suppress-period 1 +.rr [n +.. +\# +.de ref*add-dflt +.ref*field \\$1 , +.. +\# +\# Book reprints +\# ------------- +\# %d date of publication (the original date of publication) +.de ref*add-d +.ie \\n[#FN_REF]+\\n[#EN_REF] \{\ +. ref*field d "" ( ; +. nr [d 1 +.\} +.el \{\ +. ie \\n([T .ref*field d "" " " +. el .ref*field d . " " +.\} +.rr [T +.. +\# %b main author when citing from a preface, introduction, foreword +\# or afterword +.de ref*add-b +.ie \\n[#FN_REF]+\\n[#EN_REF] \{\ +. ie \\n([T .ref*field b "" "by" +. el .ref*field b , "by " +.\} +.el \{\ +. ie \\n([T .ref*field b "" " By " +. el .ref*field b . " By " +.\} +.rr [T +.. +\# %t title, if different from original title (the T field, which s/b +\# the original title) +.de ref*add-t +.ie \\n[#FN_REF]+\\n[#EN_REF] .ref*field t , "rpt. of \E*[IT] " \E*[ref*restore-ss] +.el \{\ +. ie \\n([T .ref*field t "" " Rpt. of \E*[IT] " \E*[ref*restore-ss] +. el .ref*field t . " Rpt. of \E*[IT] " \E*[ref*restore-ss] +.\} +.rr [T +.. +\# +\# Translated works +\# ---------------- +\# %l Trans(l)ator +.de ref*add-l +.ie \\n[#FN_REF]+\\n[#EN_REF] \{\ +. ie \\n([T .ref*field l "" "trans. " +. el .ref*field l , "trans. " +.\} +.el \{\ +. ie \\n([T .ref*field l "" " Trans. " +. el .ref*field l . " Trans. " +.\} +.rr [T +.. +\# %r Translato(r) and edito(r) +.de ref*add-r +.ie \\n[#FN_REF]+\\n[#EN_REF] .ref*field r , "trans. and ed. " +.el \{\ +. ie \\n([T .ref*field r "" " Trans. and ed. " +. el .ref*field r . " Trans. and ed. " +.\} +.rr [T +.. +\# +\# Internet +\# -------- +\# %s Site name +.de ref*add-s +.ie \\n[#FN_REF]+\\n[#EN_REF] .ref*field s , \E*[IT] \E*[ref*restore-ss] +.el \{\ +.ie \\n([s .ref*field s "" ".\E*[IT]" \E*[ref*restore-ss] +.el .ref*field s . " \E*[IT]" \E*[ref*restore-ss] +.\} +.\" refer doesn't set reg [T to 1 for these titles, so we do it here +.if !\\n[#FN_REF]+\\n[#EN_REF] \{\ +. ds eval*[s \\*([s +. substring eval*[s -1 +. rr [T +. if '\\*[eval*[s]'.' .nr [T 1 +. if '\\*[eval*[s]'!' .nr [T 1 +. if '\\*[eval*[s]'?' .nr [T 1 +. rm eval*[s +.\} +.. +\# %c content of site (ie. Web, Online posting, etc) +.de ref*add-c +.ie \\n[#FN_REF]+\\n[#EN_REF] .ref*field c , +.el \{\ +. ie \\n([T .ref*field c "" " " +. el .ref*field c . " " +.\} +.rr [T +.. +\# %o organization, group or sponsor of site +.de ref*add-o +.ie \\n[#FN_REF]+\\n[#EN_REF] .ref*field o , +.el \{\ +. ie \\n([T .ref*field o "" " " +. el .ref*field o . " " +.\} +.rr [T +.. +\# %a access date, i.e. the date you read it +.de ref*add-a +.ie \\n[#FN_REF]+\\n[#EN_REF] .ref*field a , +.el \{\ +. ie \\n([T .ref*field a "" " " +. el .ref*field a . " " +.\} +.rr [T +.. +\# %u URL +.de ref*add-u +.ref*field u "" < > +.rr [T +.. +.de ref*add-z +.ref*field z +.. +\# +\# Build up reference string from ref*add-<x> macros. +\# +\# First, a string to ensure next field's font is reset to roman +\# (TYPESET) or non-underlined (TYPEWRITE) +\# +.ie !n .ds ref*roman \f[R]\X'ps: exec decornone'\?\R'#UNDERLINE_ON 0'\? +.el .ds ref*roman \f[R]\?\R'#UNDERLINE_ON 0'\? +\# +.de ref*field +.if d ref*string \{\ +. ie d ref*post-punct \{\ +. as ref*string "\\$2\\*[ref*post-punct] \" +. rm ref*post-punct +. \} +. el .as ref*string "\\$2 \" +.\} +.as ref*string "\\$3\\*([\\$1\\$4\E*[ref*roman] +.if \\n[.$]>4 .ds ref*post-punct "\\$5\E*[ref*roman] +.nr ref*suppress-period 0 +.. +\# +\# MARGIN NOTES +\# ------------ +\# +\# Wrapper for MNinit. +\# +.MAC MN_INIT END +. if \B'\\$2' \{\ +. tm1 "[mom]: 1.x-style \\$0 detected, but you are using v2.x. +. tm1 " v2.x requires flags before arguments to \\$0. +. tm1 " Please read docelement.html#mn-init and update your file. +. ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +. \} +. nr #ARGS 0 1 +. nr #COUNT 9 +. while \\n+[#ARGS]<=\\n[#COUNT] \ +. ds $MN-arg\\n[#ARGS] @ +. nr #FLAG 0 1 +. nr #COUNT \\n[#NUM_ARGS] +. while \\n+[#FLAG]<=\\n[#COUNT] \{\ +. if '\\$1'RAGGED' \{\ +. ds $MN-arg1 \\$1 +. shift +. \} +. if '\\$1'SYMMETRIC' \{\ +. ds $MN-arg1 \\$1 +. shift +. \} +. if '\\$1'L_WIDTH' \{\ +. shift +. ds $MN-arg2 \\$1 +. shift +. \} +. if '\\$1'R_WIDTH' \{\ +. shift +. ds $MN-arg3 \\$1 +. shift +. \} +. if '\\$1'GUTTER' \{\ +. shift +. ds $MN-arg4 \\$1 +. shift +. \} +. if '\\$1'FONTSTYLE' \{\ +. shift +. ds $MN-arg5 \\$1 +. shift +. \} +. if '\\$1'SIZE' \{\ +. shift +. ds $MN-arg6 \\$1 +. shift +. \} +. if '\\$1'LEAD' \{\ +. shift +. ds $MN-arg7 \\$1 +. shift +. \} +. if '\\$1'COLOR' \{\ +. shift +. ds $MN-arg8 \\$1 +. shift +. \} +. if '\\$1'HY' \{\ +. shift +. ds $MN-arg9 \\$1 +. shift +. \} +. \} +. if '\\*[$MN-arg5]'@' .ds $MN-arg5 \E*[$DOC_FAM]R +. MNinit \ +\\*[$MN-arg1] \\*[$MN-arg2] \ +\\*[$MN-arg3] \\*[$MN-arg4] \ +\\*[$MN-arg5] \\*[$MN-arg6] \ +\\*[$MN-arg7] \\*[$MN-arg8] \ +\\*[$MN-arg9] +.END +\# +.MAC MN_OVERFLOW_TRAP END +. if \\n[#OVERFLOW_LEFT]=1 \{\ +. nr #no-repeat-MN-left 1 +. di MN_OVERFLOW_LEFT +. \} +. if \\n[#OVERFLOW_RIGHT]=1 \{\ +. nr #no-repeat-MN-right 1 +. di MN_OVERFLOW_RIGHT +. \} +. rr #OVERFLOW_LEFT +. rr #OVERFLOW_RIGHT +.END +\# +\# The remainder of the margin notes macros and routines are adapted +\# from Werner Lemberg's MN.tmac. +\# +\# MNinit +\# ------ +\# Usage: +\# MNinit [ragged|symmetric] \ +\# left-width right-width separation \ +\# font fontsize vertical-spacing \ +\# color hyphenation-flags +\# +\# Initialize margin notes. Empty arguments (denoted with "") set +\# default values. If the first argument is the string 'ragged', +\# left and right margin notes are printed ragged-right. If it is +\# 'symmetric', left margin notes are printed ragged-left and right +\# margin notes ragged-right. If omitted, margin notes are left +\# and right adjusted. +\# +.de MNinit +. nr #MNinit 1 +. ds MN-left-ad b\" +. ds MN-right-ad b\" +. if '\\$1'@' .shift +. if '\\$1'RAGGED' \{\ +. ds MN-left-ad l\" +. ds MN-right-ad l\" +. shift +. \} +. if '\\$1'SYMMETRIC' \{\ +. ds MN-left-ad r\" +. ds MN-right-ad l\" +. shift +. \} +. ie \B'\\$3' .nr MN-sep (n;\\$3) +. el .nr MN-sep 1m +. if ((\\n[.o] - \\n[MN-sep]) < 1n) \ +. ab MN: Left margin too small (<1n) for requested margin notes separation. +. ie \B'\\$1' \{\ +. nr MN-left-width (n;\\$1) +. nr MN-left-start (\\n[.o] - \\n[MN-sep] - \\n[MN-left-width]) +. \} +. el \{\ +. nr MN-left-width (\\n[.o] - \\n[MN-sep]) +. nr MN-left-start 0 +. \} +. if (\\n[MN-left-start] < 0) \ +. ab MN: Left margin too small for requested margin notes settings. +. if (\\n[MN-left-width] < 1n) \ +. ab MN: Left margin notes width too small (<1n). +. ie \B'\\$2' \{\ +. nr MN-right-width (n;\\$2) +. nr MN-right-start (\\n[.o] + \\n[.l] + \\n[MN-sep]) +. if \\n[#COLUMNS]=1 \{\ +. if !\\n[#NUM_COLS]=1 \ +. nr MN-right-start (\\n[#COL_2_L_MARGIN] + \\n[#COL_L_LENGTH] + \\n[MN-sep]) +. \} +. \} +. el \{\ +. nr MN-right-width \\n[MN-left-width] +. nr MN-right-start (\\n[.o] + \\n[.l] + \\n[MN-sep]) +. if \\n[#COLUMNS]=1 \{\ +. if !\\n[#NUM_COLS]=1 \ +. nr MN-right-start (\\n[#COL_2_L_MARGIN] + \\n[#COL_L_LENGTH] + \\n[MN-sep]) +. \} +. \} +. ie \A'\\$4' \{\ +. ds MN-font \\$4\" +. if \\n[#PRINT_STYLE]=1 .ds MN-font CR +. \} +. el \{\ +. ds MN-font \\*[$PP_FT] +. if \\n[#PRINT_STYLE]=1 .ds MN-font CR +. \} +. ie \B'\\$5' \{\ +. ps \\$5 +. nr MN-size \\n[.ps] +. ps +. if \\n[#PRINT_STYLE]=1 \{\ +. ps \\*[$TYPEWRITER_PS] +. nr MN-size \\n[.ps] +. ps +. \} +. \} +. el \ +. nr MN-size \\n[#DOC_PT_SIZE] +. ie \B'\\$6' \{\ +' vs \\$6 +. nr MN-spacing \\n[.v] +' vs +. if \\n[#PRINT_STYLE]=1 \ +. nr MN-spacing \\n[#DOC_LEAD] +. \} +. el .nr MN-spacing \\n[#DOC_LEAD] +. ie \A'\\$7' \ +. if !\\n[#PRINT_STYLE]=1 .ds MN-color \\$7\" +. el \ +. if !\\n[#PRINT_STYLE]=1 .ds MN-color +. ie \B'\\$8' .nr MN-hy \\$8 +. el .nr MN-hy \\n[.hy] +. ev MNbottom-left-env +. if \A'\\*[MN-font]' .ft \\*[MN-font] +. if \\n[MN-size] .ps \\n[MN-size]u +. if \\n[MN-spacing] .vs \\n[MN-spacing]u +. ll \\n[MN-left-width]u +. ad \\*[MN-left-ad] +. hy \\n[MN-hy] +' in 0 +. nop \m[\\*[MN-color]]\c +. ev +. ev MNbottom-right-env +. if \A'\\*[MN-font]' .ft \\*[MN-font] +. if \\n[MN-size] .ps \\n[MN-size]u +. if \\n[MN-spacing] .vs \\n[MN-spacing]u +. ll \\n[MN-right-width]u +. ad \\*[MN-right-ad] +. hy \\n[MN-hy] +' in 0 +. nop \m[\\*[MN-color]]\c +. ev +. nr MN-active 0 +.. +\# MN +\# -- +\# Usage: +\# +\# MN LEFT|RIGHT +\# margin note text +\# MN +\# +\# With a parameter, start a margin note, otherwise end a margin note. +\# If the parameter is the string 'left', define a left margin note, +\# otherwise define a right margin note. +\# +.de MN +. ds MN-dir \\$1 +. if !'\\$1'LEFT' \{\ +. if !'\\$1'RIGHT' \{\ +. MN_QUIT +. return +. \} +. \} +. if \\n[#COLUMNS]=1 \{\ +. if \\n[#NUM_COLS]>2 \{\ +. tm [mom]: Macro MN: More than two columns. Ignoring margin notes. +. return +. \} +. if !\\n[#NUM_COLS]=1 \{\ +. ie \\n[#COL_NUM]=1 .ds MN-dir LEFT +. el .ds MN-dir RIGHT +. \} +. \} +. if !\\n[#MNinit]=1 \{\ +. tm1 "[mom]: Macro MN: You must set parameters with MN_INIT before using MN. +. ab [mom]: Aborting '\\n[.F]' at MN, line \\n[.c]. +. \} +. ie !'\\$1'' \{\ +. if \\n[MN-active] \{\ +. tm [mom]: Macro MN: Can't handle nested margin notes, line \\n[.c]. +. return +. \} +. nr MN-active 1 +. ev MN-env +. ie '\\*[MN-dir]'LEFT' \{\ +. nr MN-left +1 +. ds MN-curr l-\\n[MN-left]\" +. evc MNbottom-left-env +. \} +. el \{\ +. nr MN-right +1 +. ds MN-curr r-\\n[MN-right]\" +. evc MNbottom-right-env +. \} +. mk MN-mk-\\*[MN-curr] +. di MN-div-\\*[MN-curr] +. \} +. el .MN_QUIT +.. +\# +\# MN_QUIT +\# ------- +\# Utility macro to handle .MN OFF | QUIT | X etc +\# +.de MN_QUIT +. if \\n[MN-active] \{\ +. br +. di +. nr MN-div-\\*[MN-curr]-depth \\n[dn] +. ev +. \} +. nr MN-active 0 +.. +\# +\# MNtop +\# ----- +\# Resets these registers (called in HEADER) +.de MNtop +. nr MN-left 0 +. nr MN-right 0 +. nr MN-active 0 +. rr MN-shifted +. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u +.. +\# +\# MNbottom +\# -------- +\# Executed in FOOTER. +\# +.de MNbottom +. if '\\$0'MNbottom-left' \{\ +. ds MN-pos left +. ds l-r l +. ds Left-Right Left +. \} +. if '\\$0'MNbottom-right' \{\ +. ds MN-pos right +. ds l-r r +. ds Left-Right Right +. \} +. nr MN-curr 0 +. nr MN-last-pos 0 +. nr MN-lead-adj \\n[#DOC_LEAD]-\\n[MN-spacing] +. vpt 0 +. if \\n[MN-active] \{\ +. di +. tm [mom]: Macro MN: Margin note finished by new page. Ignored. +. \} +. if \\n[#RECTO_VERSO] \{\ +. if e \{\ +. if '\\*[MN-pos]'right' \ +. nr MN-\\*[MN-pos]-start (\\n[.o]+\\n[.l]+\\n[MN-sep]) +. if '\\*[MN-pos]'left' \ +. nr MN-\\*[MN-pos]-start (\\n[.o]-\\n[MN-sep]-\\n[MN-left-width]) +. \} +. \} +. po \\n[MN-\\*[MN-pos]-start]u +. ev MNbottom-\\*[MN-pos]-env +. nr #P \\n%+\\n[#PAGE_NUM_ADJ] +. while (\\n[MN-curr] < \\n[MN-\\*[MN-pos]]) \{\ +. nr MN-curr +1 +. ie (\\n[MN-last-pos] < \\n[MN-mk-\\*[l-r]-\\n[MN-curr]]) \ +. sp |\\n[MN-mk-\\*[l-r]-\\n[MN-curr]]u+\\n[MN-lead-adj]u +. el \{\ +. nr MN-shifted 1 +. sp 1v +. SHIM +. if \\n[#SHIM]>\\n[MN-spacing] .sp -(1v+\\n[MN-lead-adj]u) +. tm [mom]: Macro MN: Warning: \\*[Left-Right] margin note #\\n[MN-curr] on page \\n[#P] shifted down. +. \} +.\" If last margin note doesn't fit +. if ( (\\n[nl]+\\n[MN-div-\\*[l-r]-\\n[MN-curr]-depth]) > (\\n[.p]+\\n[#VARIABLE_FOOTER_POS]-1) ) \{\ +. if \\n[MN-shifted]=1 \{\ +. sp -(1v+\\n[#SHIM]u) +. rm MN-div-\\*[l-r]-\\n[MN-curr] +. tm1 "[mom]: \ +No room to start \\*[MN-pos] margin note #\\n[MN-curr] on page \\n[#P]. +. tm1 " Ignoring margin note. +. rr MN-shifted +. \} +. nr #no-repeat-MN-\\*[MN-pos] 1 +. if '\\*[MN-pos]'left' .nr #OVERFLOW_LEFT 1 +. if '\\*[MN-pos]'right' .nr #OVERFLOW_RIGHT 1 +. ie \\n[#FN_COUNT]=0 \{\ +. ch FOOTER \\n[.p]u +. wh \\n[#VARIABLE_FOOTER_POS]u+\\n[MN-lead-adj]u+1u MN_OVERFLOW_TRAP +. \} +. el \ +. wh \\n[.p]u+\\n[#VARIABLE_FOOTER_POS]u-1u MN_OVERFLOW_TRAP +. vpt +. \} +. nf +. MN-div-\\*[l-r]-\\n[MN-curr] +. fi +. br +. nr MN-last-pos \\n[nl] +. \} +. ev +. po +. if !\\n[#no-repeat-MN-\\*[MN-pos]]=1 .vpt +.. +. +.ALIAS MNbottom-right MNbottom +.ALIAS MNbottom-left MNbottom +\# +\# PDF SUPPORT +\# =========== +\# +\# Initial setup +\# +.nr CURRENT_LEVEL 0 +.nr VIRTUAL_LEVEL 0 +.nr #PDF_BOOKMARKS 1 +.nr #PDF_BOOKMARKS_OPEN 1 +.pdfview /PageMode /UseOutlines +\# +\# TOC_BEFORE_HERE +\# --------------- +\# +\# Call this and the TOC will be placed preceding this page +\# +.MAC TOC_BEFORE_HERE END +. nr TOC_BH 1 +. pdfpagename MOM:TOC +.END +\# +\# TOC_AFTER_HERE +\# --------------- +\# +\# Call this and the TOC will be placed after this page +\# +.MAC TOC_AFTER_HERE END +. nr TOC_BH 2 +. pdfpagename MOM:TOC +.END +\# +\# PDF_LINK_COLOR +\# ----------------- +\# +\# Arguments:- +\# <name defined by previous call to XCOLOR or NEWCOLOR> or +\# <red> <green> <blue> all 0.0 -> 1.0 +\# Notes +\# Should be called before START but can also be called at any time to change colour +\# The colour assigned at the end of the document is used for all links in the TOC +\# +.MAC PDF_LINK_COLOR END +. ie \\n[.$]==3 \{\ +. ds PDFHREF.COLOUR \\$* +. if !(\B'\\$1' & \B'\\$2' & \B'\\$3') \{\ +. tm1 "[mom]: All three arguments to \\$0 at line \\n[.c] must be decimal. +. tm1 " Continuing to process using default link color. +. ds PDFHREF.COLOUR 0.0 0.3 0.9 +. \} +. defcolor pdf:href.colour rgb \\*[PDFHREF.COLOUR] +. ds PDFHREF.TEXT.COLOUR pdf:href.colour +. \} +. el \{\ +. ie \\n[.$]==0 \{\ +. if dPDFHREF.TEXTCOL.DEFAULT \ +. PDF_LINK_COLOR \\*[PDFHREF.TEXTCOL.DEFAULT] +. \} +. el \{\ +. ds ARG_1 \\$1 +. substring ARG_1 0 0 +. ie '\\*[ARG_1]'#' \{\ +. defcolor pdf:href.colour rgb \\$1 +. ds PDFHREF.TEXT.COLOUR pdf:href.colour +. \} +. el \{\ +. ie dCOLAL_\\$1 .ds PDFHREF.TEXT.COLOUR \\*[COLAL_\\$1] +. el .ds PDFHREF.TEXT.COLOUR \\$1 +. \} +. \} +. \} +. if !\\n[PDFHREF_COLOR_SET]=1 \ +. nr PDFHREF_COLOR_SET 1 +.END +\# +.ALIAS PDF_LINK_COLOUR PDF_LINK_COLOR +\# +\# AUTO_RELOCATE_TOC +\# ----------------- +\# +\# Call before START to have TOC automatically relocated to after the +\# DOC COVER (if there is one) or the COVER if there isn't +\# +.MAC AUTO_RELOCATE_TOC END +. if '\\$1'' .nr TOC.RELOCATE 1 +. if '\\$1'TOP' .nr TOC.RELOCATE 2 +. if '\\$1'BEFORE_DOCCOVER' .nr TOC.RELOCATE 3 \" Same as TOP unless no DOCCOVER +. if '\\$1'AFTER_DOCCOVER' .nr TOC.RELOCATE 4 +. if '\\$1'BEFORE_COVER' .nr TOC.RELOCATE 5 +. if '\\$1'AFTER_COVER' .nr TOC.RELOCATE 6 +.END +\# +.ALIAS AUTO_TOC_RELOCATE AUTO_RELOCATE_TOC +\# +\# PDF_BOOKMARK +\# ------------ +\# *Argument: +\# Hierarchy Level +\# Bookmark Text +\# *Function: +\# Creates a bookmark using the given text +\# The level controls the hierarchy of the bookmarks +\# *Notes +\# Bookmarks can be turned off (will not be added to document outline) by calling +\# "PDF_BOOKMARKS NO" and turned on with "PDF_BOOKMARKS". +\# +\# Bookmarks can be open or closed by calling PDF_BOOKMARKS_OPEN +\# +.MAC PDF_BOOKMARK END +. if \\n[#PDF_BOOKMARKS] \{\ +. ie '\\$1'NAMED' \{\ +. ds PDF_NM -T \\$2 +. ds PDF_NM2 \\$2 +. shift 2 +. \} +. el .ds PDF_NM +. nr LEVEL_REQ \\$1 +. shift +. ie \\n[LEVEL_REQ]>\\n[VIRTUAL_LEVEL] \{\ +. nr VIRTUAL_LEVEL \\n[LEVEL_REQ] +. nr LEVEL_REQ \\n[CURRENT_LEVEL]+1 +. \} +. el \{\ +. ie \\n[LEVEL_REQ]<\\n[VIRTUAL_LEVEL] \{\ +. nr VIRTUAL_DIFF \\n[VIRTUAL_LEVEL]-\\n[LEVEL_REQ] +. nr VIRTUAL_LEVEL \\n[LEVEL_REQ] +. nr LEVEL_REQ (\\n[CURRENT_LEVEL]-\\n[VIRTUAL_DIFF])>?1 +. \} +. el .nr LEVEL_REQ \\n[CURRENT_LEVEL] +. \} +. ds PDF_TX \\$* +. pdfmomclean PDF_TX +. nr PDF_LEV (\\n[LEVEL_REQ]*\\n[#PDF_BOOKMARKS_OPEN]) +. ie '\\*[.T]'ps' \{\ +. if !'\\*[PDF_NM]'' \{\ +. pdfhref M -N \\*[PDF_NM2] -- \\*[PDF_TX] +. if !dpdf:href.map .tm gropdf-info:href \\*[PDF_NM2] \\*[PDF_TX] +. \} +. pdfbookmark \\n[PDF_LEV] \\*[PDF_TX] +. \} +. el .pdfbookmark \\*[PDF_NM] \\n[PDF_LEV] \\$* +. nr CURRENT_LEVEL \\n[LEVEL_REQ] +. rr LEVEL_REQ +. rr PDF_LEV +. rr VIRTUAL_DIFF +. rm PDF_NM +. \} +.END +\# +\# PDF_TITLE +\# --------- +\# *Argument: +\# Title Text +\# *Function +\# Set the PDF title (this is often used by PDF readers to title the main window) +\# +.MAC PDF_TITLE END +. ds pdftitle \\$* +. pdfmomclean pdftitle +. nop \!x X ps:exec [/Title (\\*[pdftitle]) /DOCINFO pdfmark +.END +\# +\# PDF_BOOKMARKS +\# ------------- +\# *Argument: +\# <nothing> | <anything> +\# *Function: +\# With no parameter turns on outline bookmarks +\# With any parameter turns off outline bookmarks +\# +.MAC PDF_BOOKMARKS END +. ie '\\$1'' .nr #PDF_BOOKMARKS 1 +. el .nr #PDF_BOOKMARKS 0 +.END +\# +\# PDF_BOOKMARKS_OPEN +\# ------------------ +\# *Argument: +\# <number> | <nothing> | <text> +\# *Function: +\# If arg is numeric all Bookmark levels > arg are closed +\# If arg is empty all bookmarks are open +\# If arg is any text then any following bookmarks are closed +\# +.MAC PDF_BOOKMARKS_OPEN END +. ie \B'\\$1' \{\ +. nr PDFOUTLINE.FOLDLEVEL \\$1 +. nr #PDF_BOOKMARKS_OPEN 1 +. \} +. el .if '\\*[.T]'pdf' \{\ +. nr PDFOUTLINE.FOLDLEVEL 10000 +. ie '\\$1'' .nr #PDF_BOOKMARKS_OPEN 1 +. el .nr #PDF_BOOKMARKS_OPEN 0-1 +. \} +.END +\# +\# PDF_LINK +\# -------- +\# *Arguments: +\# $1 = named link +\# [PREFIX text] : text to prefix link +\# [SUFFIX text] : text after link +\# text +\# *Notes +\# Text is output as a hotspot link to named destination. +\# If text has final '*' it is replaced with the text associated with the link +\# +.MAC PDF_LINK END +. ds PDF_NM \\$1 +. shift +. ie '\\$1'PREFIX' \{\ +. ds PDF_PRE -P "\&\\$2" +. shift 2 +. \} +. el .ds PDF_PRE +. ie '\\$1'SUFFIX' \{\ +. ds PDF_POST -A "\\$2" +. shift 2 +. \} +. el .ds PDF_POST +. ds PDF_AST_Q +. ds PDF_TXT \&\\$1 +. ds PDF_AST \\*[PDF_TXT] +. substring PDF_AST -1 -1 +. if '\\*[PDF_AST]'+' \{\ +. ds PDF_AST * +. ds PDF_AST_Q "" +. \} +. if '\\*[PDF_AST]'*' \{\ +. chop PDF_TXT +. ie '\\*[.T]'pdf' \{\ +. ie d pdf:look(\\*[PDF_NM]) \ +. as PDF_TXT \&\\*[PDF_AST_Q]\\*[pdf:look(\\*[PDF_NM])]\\*[PDF_AST_Q] +. el \{\ +. as PDF_TXT Unknown +. if !rPDF_UNKNOWN .tm \ +\\n[.F]:\\n[.c]: forward reference detected (please run using 'pdfmom') +. nr PDF_UNKNOWN 1 +. \} +. \} +. el \{\ +. ie d pdf:href(\\*[PDF_NM]).info \ +. as PDF_TXT \&\\*[PDF_AST_Q]\\*[pdf:href(\\*[PDF_NM]).info]\\*[PDF_AST_Q] +. el .as PDF_TXT Unknown +. \} +. \} +. pdfhref L \\*[PDF_PRE] \\*[PDF_POST] -D \\*[PDF_NM] -- \\*[PDF_TXT] +. rm PDF_NM +. rm PDF_PRE +. rm PDF_POST +. rm PDF_TXT +. rm PDF_AST +. rm PDF_AST_Q +.END +\# +.MAC PDF_WWW_LINK END +. ds PDF_NM \\$1 +. shift +. ie '\\$1'PREFIX' \{\ +. ds PDF_PRE -P "\\$2" +. shift 2 +. \} +. el .ds PDF_PRE +. ie '\\$1'SUFFIX' \{\ +. ds PDF_POST -A "\\$2" +. shift 2 +. \} +. el .ds PDF_POST +. ds PDF_AST_Q +. ds PDF_TXT \\$1 +. ie !'\\*[PDF_TXT]'' \{\ +. ds PDF_AST \\*[PDF_TXT] +. substring PDF_AST -1 -1 +. if '\\*[PDF_AST]'+' \{\ +. ds PDF_AST * +. ds PDF_AST_Q "" +. \} +. if '\\*[PDF_AST]'*' \{\ +. chop PDF_TXT +. as PDF_TXT \&\\*[PDF_AST_Q]\\*[PDF_NM]\\*[PDF_AST_Q] +. \} +. \} +. el .ds PDF_TXT \\*[PDF_NM] +. pdfhref W -D "\\*[PDF_NM]" \\*[PDF_PRE] \\*[PDF_POST] -- \\*[PDF_TXT] +. rm PDF_NM +. rm PDF_PRE +. rm PDF_POST +. rm PDF_TXT +. rm PDF_AST PDF_AST_Q +.END +\# +.MAC PDF_TARGET END +. ds ARG_1 \\$1 +. shift +. ie '\\$*'' .pdfhref M -N \\*[ARG_1] -- \\$* +. el .pdfhref M -N \\*[ARG_1] -E -- \\$* +. if '\\*[.T]'ps' .if !dpdf:href.map .tm gropdf-info:href \\*[ARG_1] \\$* +.END +\# +\# PDF_IMAGE +\# --------- +\# *Arguments: +\# [ -L -| -R | -C | -I <indent> ] \ +\# <image file> <width> <height> \ +\# [ SCALE <factor> ] [ ADJUST +|-<vertical shift> ] [ TARGET <pdf target> ] \ +\# [ NO_SHIM ] [ NO_FLEX ] +\# *Function: +\# Allows embedding of PDF images with the same arguments as PSPIC +\# plus SCALE and ADJUST options. +\# *Notes: +\# <image file> <width> <height> are required. +\# +.MAC PDF_IMAGE END +. br +. if !'\\n[.z]'FLOAT*DIV' \{\ +. nr pdf-img:float 1 +. FLOAT +. \} +. PDF_TARGET fig:\\n+[lists*target] +. nr float*img 1 +. ds ev-current \\n[.ev] +. ev IMG +. evc \\*[ev-current] +. if \\n[#HYPHENATE] .nh +. nr ind-pre-img \\n[.i] +. nr ll-pre-img \\n[.l] +. in 0 +. ds pos:tmp \\$1 +. substring pos:tmp 0 0 +. ie !'\\*[pos:tmp]'-' .ds pdf-img:pos -C +. el \{\ +. ds pdf-img:pos \\$1 +. shift +. \} +. if '\\*[pdf-img:pos]'-I' \{\ +. nr pdf-img:ind \\$1 +. shift +. \} +. ds pdf-img:file \\$1 +. ds pdf-img@file \\$1 +. substring pdf-img@file -1 -3 +. if !'\\*[pdf-img@file]'pdf' \{\ +. tm1 "[mom]: Image file '\\*[pdf-img:file]' at line \\n[.c] not found, or not a PDF image. +. ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. +. \} +. nr pdf-img:width \\$2 +. nr pdf-img:depth \\$3 +. shift 3 +. nr loop-counter \\n[#NUM_ARGS] +. nr loop-count 0 1 +. while \\n+[loop-count]<=\\n[loop-counter] \{\ +. if '\\$1'SCALE' \{\ +. shift +. nr pdf-img:scale \\$1 +. shift +. nr pdf-img:width \\n[pdf-img:width]*\\n[pdf-img:scale]/100 +. nr pdf-img:depth \\n[pdf-img:depth]*\\n[pdf-img:scale]/100 +. \} +. if '\\$1'ADJUST' \{\ +. shift +. ds pdf-img:adj \\$1 +. shift +. \} +. if '\\$1'FRAME' \{\ +. nr pdf-img:frame 1 +. if !r pdf-img:frame-inset .nr pdf-img:frame-inset 6p +. shift +. \} +. if '\\$1'CAPTION' \{\ +. nr pdf-img*have-caption 1 +. ds pdf-img*caption \\$2 +. shift 2 +. \} +. if '\\$1'SHORT_CAPTION' \{\ +. ds pdf-img*caption-short \\$2 +. shift 2 +. \} +. if '\\$1'LABEL' \{\ +. nr pdf-img*have-label 1 +. ds pdf-img*label \\$2 +. ds label-type pdf-img +. shift 2 +. \} +. if '\\$1'TARGET' \{\ +. ds target "\\$2 +. PDF_TARGET "\\*[target] +. shift 2 +. \} +. if '\\$1'NO_SHIM' \{\ +. if !'\\n[.z]'FLOAT*DIV' .nr pdf-img*no-shim 1 +. nr @no-shim 1 +. shift 1 +. \} +. if '\\$1'NO_FLEX' \{\ +. nr pdf-img*no-flex 1 +. nr @no-flex 1 +. shift 1 +. \} +. \} +. if (\\n[pdf-img*have-label]=1):(\\n[pdf-img*autolabel]=1) \ +. ds label-type pdf-img +. if !'\\*[pdf-img*label-sffx]'' \{\ +. ds pdf-img*label-sffx-tmp \\*[pdf-img*label-sffx] +. substring pdf-img*label-sffx-tmp -1 +. if '\\*[pdf-img*label-sffx-tmp]'.' \ +. if \\n[pdf-img*caption-after-label]=0 .chop pdf-img*label-sffx +. \} +. if '\\*[pdf-img:pos]'-C' \ +. nr pdf-img:ind (\\n[.ll]-\\n[ind-pre-img]-\\n[pdf-img:width])/2 +. if '\\*[pdf-img:pos]'-R' \ +. nr pdf-img:ind \\n[.ll]-\\n[pdf-img:width]-\\n[ind-pre-img] +. if \\n[pdf-img*label-with-chapter] \ +. ds chapno \\n[#CH_NUM]. +. if \\n[pdf-img*autolabel] \{\ +. ds pdf-img*label \\*[pdf-img*label-prfx]\\*[chapno]\\n+[fig*label-num]\\*[pdf-img*label-sffx] +. nr fig*label-width \w'\\*[pdf-img*label]' +. nr fig*label-num -1 +. \} +. if !'\\*[pdf-img*caption-short]'' .ds short -short +. if \\n[#PDF_BOOKMARKS] \{\ +. ie (\\n[pdf-img*have-label]=1):(\\n[pdf-img*autolabel]=1) \{\ +\!. TO_FIGURES "\\*[pdf-img*label]" "\\*[pdf-img*caption\\*[short]]" +. \} +. el \{\ +\!. if !'\\*[pdf-img*caption\\*[short]]'' \ +\!. TO_FIGURES "\\*[pdf-img*caption\\*[short]]" +. \} +. \} +. if r IMG \{\ +. if \\n[pdfbx-top] \ +. rt +. sp (\\*[wt\\n[stack]]/2u)+\\*[gap\\n[stack]]u +. nr img*pdfbx 1 +. \} +. di PDF*IMAGE +. if \\n[@TOP] \{\ +. ch RR_@TOP +. rs +. nop \& +. sp -1v +. \} +. if \\n[pdf-img*have-caption] \{\ +. if !\\n[pdf-img*autolabel] \{\ +. if !\\n[pdf-img*have-label] \{\ +. if \\n[#MLA] \ +. mla@error caption label \\n[.F] \\$0 \\n[.c] +. \} +. \} +. if !\\n[pdf-img*caption-after-label] \{\ +. if !r pdfbx-top \ +. if !\\n[@TOP] \!.sp .5v +. nr lead-pre-caption \\n[.v] +. ev caption +. evc IMG +. ie \\n[#PRINT_STYLE]=1 .TYPEWRITER +. el \{\ +. img*caption-style +. vs \\n[.ps]u+\\n[pdf-img*caption-autolead]u +. \} +. if r pdfbx-top .nr restore-pdfbx-top 1 +. PDF_IMG*SET_CAPTION_QUAD \\*[pdf-img*caption-quad] +. if r restore-pdfbx-top \{\ +. nr pdfbx-top 1 +. rr restore-pdfbx-top +. \} +. nr pdf-img*caption-top-lead-diff \\n[lead-pre-caption]-\\n[.v] +. if r pdfbx-top \{\ +. SIZESPECS +. rt +. sp \\n[pdf-img*caption-top-lead-diff]u +. sp (\\*[wt\\n[stack]])+\\*[gap\\n[stack]]u+\\*[$CAP_HEIGHT] +. rr pdfbx-top +. \} +. if \\n[pdfbx-running] \{\ +. in -(\\*[wt\\n[stack]])+\\*[gap\\n[stack]]u +. ll -(\\*[wt\\n[stack]])+\\*[gap\\n[stack]]u +. \} +. nop \\*[pdf-img*caption] +. if r pdfbx-running \{\ +. in +. ll +. \} +. br +. if !'\\*[pdf-img*caption-space]'' .sp \\*[pdf-img*caption-space] +. ev +. in 0 +. sp -.5v +. \} +. \} +. nf +. if \\n[pdf-img:frame] \{\ +. nr frame-width \\n[pdf-img:width]+(\\n[pdf-img:frame-inset]*2) +. nr frame-depth \\n[pdf-img:depth]+(\\n[pdf-img:frame-inset]*2) +. if '\\*[pdf-img:pos]'-L' \{\ +. nr pdf-img:ind \\n[pdf-img:frame-inset] +. nr pdf-img:dbx-ind 0 +. \} +. if '\\*[pdf-img:pos]'-C' \{\ +. nr pdf-img:dbx-ind \ +\\n[.ll]-\\n[ind-pre-img]-\\n[pdf-img:width]/2-\\n[pdf-img:frame-inset] +. \} +. if '\\*[pdf-img:pos]'-R' \{\ +. nr pdf-img:ind -\\n[pdf-img:frame-inset] +. nr pdf-img:dbx-ind \ +\\n[.l]u-(\\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u)+\\n[ind-pre-img]u) +. \} +. if '\\*[pdf-img:pos]'-I' \{\ +. nr pdf-img:ind +\\n[pdf-img:frame-inset] +. nr pdf-img:dbx-ind \\n[pdf-img:ind]-\\n[pdf-img:frame-inset] +. \} +. DBX \\*[pdf-img:frame-weight] \ + \\n[pdf-img:dbx-ind]u \ + \\n[frame-width]u \ + \\n[frame-depth]u \ + \\*[pdf-img:frame-color] +. sp \\n[pdf-img:frame-inset]u +. nr pdf-img:ind -\\n[pdf-img:frame-inset] +. \} +. ti \\n[pdf-img:ind]u+\\n[pdf-img:frame-inset]u +. nop \X'pdf: pdfpic \\*[pdf-img:file] -L \\n[pdf-img:width]z \\n[pdf-img:depth]z' +. if r pdfbx-top .rr pdfbx-top +. if '\\*[pdf-img:pos]'-C' .nr pdf-img:ind +\\n[pdf-img:frame-inset] +. sp \\n[pdf-img:depth]u +. if \\n[pdf-img:frame] .sp \\n[pdf-img:frame-inset]u +. if (\\n[pdf-img*have-label]=1):(\\n[pdf-img*autolabel]=1):(\\n[pdf-img*caption-after-label]=1) \{\ +. if \\n[#MLA] \{\ +. if (\\n[pdf-img*have-label]=1):(\\n[pdf-img*autolabel]=1) \{\ +. if !\\n[pdf-img*have-caption] \ +. mla@error label caption \\n[.F] \\$0 \\n[.c] +. \} +. \} +. nr lead-pre-label \\n[.v] +. ev label +. evc IMG +. ie \\n[#PRINT_STYLE]=1 .TYPEWRITER +. el \{\ +. img*label-style +. vs \\n[.ps]u+\\n[pdf-img*label-autolead]u +. \} +. if \\n[pdf-img*label-with-chapter] \ +. ds chapno \\n[#CH_NUM]. +. PDF_IMG*SET_LABEL_QUAD \\*[pdf-img*label-quad] +. SIZESPECS +. nr pdf-img*label-lead-diff \\n[lead-pre-label]-\\n[.v] +. sp -.5+\\*[$CAP_HEIGHT]+\\n[pdf-img*label-lead-diff]u +. if !'\\*[pdf-img*label-space]'' .sp \\*[pdf-img*label-space] +. if \\n[pdfbx-running] \{\ +. in -(\\*[wt\\n[stack]])+\\*[gap\\n[stack]]u +. ll -(\\*[wt\\n[stack]])+\\*[gap\\n[stack]]u +. \} +. ie \\n[pdf-img*autolabel] \{\ +. nop \ +\\*[pdf-img*label-prfx]\\*[chapno]\\n+[fig*label-num]\\*[pdf-img*label-sffx]\| +. ds pdf-img*label \\*[chapno]\\n[fig*label-num] +. if dLABEL.REFS \ +. tm .ds \\*[target] \\*[chapno]\\n[fig*label-num] +. rm target +. \} +. el .if !'\\*[pdf-img*label]'' .nop \\*[pdf-img*label] +. fam +. ft +. ps +. if r pdfbx-running \{\ +. in +. ll +. \} +. gcolor +. if !'\\*[pdf-img*caption]'' \{\ +. if \\n[pdf-img*caption-after-label] \{\ +. ds pdf-img*caption-old \\*[pdf-img*caption] +. ds pdf-img*caption " \\*[pdf-img*caption] +. nop \\*[pdf-img*caption-specs]\\*[pdf-img*caption]\\*[revert-specs] +. ds pdf-img*caption \\*[pdf-img*caption-old] +. \} +. \} +. br +. ev +. in 0 +. \} +\!. in +. di +. nf +. vpt 0 +. if !'\\*[pdf-img:adj]'' \{\ +. if \\n[@TOP] \ +. if \\n[#COLUMNS]>1 \ +\!. rs +\!. sp \\*[pdf-img:adj] +. \} +. PDF*IMAGE +. if !'\\*[pdf-img:adj]'' \ +. if !\\n[@TOP] \!.sp -\\*[pdf-img:adj] +. vpt +. ev +. if \\n[pdf-img:float] \{\ +. FLOAT off +. nr dl \\n[pdf-img:width] +. \} +. if \\n[img*pdfbx] \{\ +. sp .5 +. nr img*pdfbx 2 +. \} +. if !\\n[pdf-img:float] \{\ +. ie !\\n[#NO_SHIM] \ +. if !\\n[pdf-img*no-shim] .SHIM +. el \ +. if !\\n[#NO_FLEX] \ +. if !\\n[pdf-img*no-flex] .FLEX +. \} +. PDF_IMAGE_CLEAN +.END +\# +\# PDF_IMAGE_FRAME +\# --------------- +\# *Arguments: +\# [ <inset> ] [ <rule weight> ] [ <color> ] +\# *Function: +\# Sets parameters for pdf image frames. +\# *Notes: +\# Defaults are '6p' '.5' 'black'. Arguments to be left at default +\# must be entered as "". +\# +.MAC PDF_IMAGE_FRAME END +. ie !'\\$1''\{\ +. ds frame-arg \\$1 +. substring frame-arg -1 +. ie \B'\\*[frame-arg]' \{\ +. tm1 "[mom]: \\$0 inset argument at line \\n[.c] +. tm1 " of '\\n[.F]' requires a unit of measure. +. tm1 " Default 6 point inset will be used instead. +. \} +. el \{\ +. nr pdf-img:frame-inset \\$1 +. shift +. \} +. \} +. el .shift +. ie !'\\$1'' \{\ +. ds frame-arg \\$1 +. substring frame-arg -1 +. ie \B'\\*[frame-arg]' \{\ +. ds pdf-img:frame-weight \\$1 +. shift +. \} +. el \{\ +. ds frame-arg \\$1 +. substring frame-arg -1 +. length arg-len \\*[frame-arg] +. if \\n[arg-len]=1 \{\ +. tm1 "[mom]: \\$0 rule weight argument at line \\n[.c] +. tm1 " of '\\n[.F]' must not have a unit of measure appended. +. tm1 " Default .5 rule weight will be used instead. +. shift +. \} +. \} +. \} +. el .shift +. if !'\\$1'' \{\ +. ie m \\$1 .ds pdf-img:frame-color \\$1 +. el \{\ +. tm1 "[mom]: \\$0 color argument '\\$1' at line \\n[.c] +. tm1 " of '\\n[.F]' is not a valid color. +. tm1 " Default black will be used instead. +. \} +. \} +.END +\# +.MAC PDF_IMAGE_CLEAN END +. rm PDF*IMAGE +. rm pdf-img:adj +. rm pdf-img*caption +. rm pdf-img*caption-short +. rm pdf-img:file +. rm pdf-img*label +. rm pdf-img:pos +. rm short +. rr ind-pre-img +. rr pdf-img:depth +. rr pdf-img:float +. if !\\n[pdf-img:frame] \ +. rr pdf-img:frame +. rr pdf-img:ind +. rr pdf-img:no-shim +. rr pdf-img:no-flex +. rr pdf-img:scale +. if !\\n[defer] \ +. rr pdf-img*have-caption +. rr pdf-img:frame-inset +. rr pdf-img:width +. if '\\*[pdf-img*label-sffx-tmp]'.' .ds pdf-img*label-sffx . +. it 1 rr-img*pdfbx +.END +\# +.de pdfmomclean +. ie '\\n[.z]'' \{\ +. ds pdfcleaned \\$* +. ev pdfcln +. tr \[em]- +. nf +. box pdf:clean +. nop \\*[\\*[pdfcleaned]] +. fl +. box +. chop pdf:clean +. asciify pdf:clean +. ev +. ds \\*[pdfcleaned] "\\*[pdf:clean] +. rm pdf:clean +. tr \[em]\[em] +. \} +. el .nop \!.pdfmomclean \\$@ +.. +\# +.MAC PAUSE END +. nr pdfbx-inhibit-space 1 +. if \\n[pdfbx-running] \{\ +. nr pdfbx-pause 1 +. rr pdfbx-inhibit-space +. BoxStop +. \} +. vpt 0 +. br +. vpt +. ie !'\\n[.z]'' \{\ +\!. pdfpause +\!. pdftransition BLOCK \\$1 +. \} +. el \{\ +. pdfpause +. pdftransition BLOCK \\$1 +. \} +. if \\n[pdfbx-pause] \{\ +. BoxStart \\*[pdfbx-args] +. rr pdfbx-pause +. rr pdfbx-inhibit-space +. \} +.END +\# +.MAC TRANSITION END +. ie !'\\n[.z]'' \ +\!. pdftransition PAGE \\$1 +. el .pdftransition PAGE \\$1 +.END +\# +\# Shaded backgrounds and frames (pdf boxes), page colour +\# +\# BOX +\# --- +\# *Arguments: +\# SHADED <color> | OUTLINED <color> \ +\# [ WEIGHT <wt> ] [ INSET <dist> ] \ +\# [ ADJUST +|-<amount> ] \ +\# [ EQN | PIC | GRAP | IMG ] +\# *Function: +\# Calls BoxStart with the supplied arguments or stops a running +\# box. +\# *Notes: +\# If OUTLINED given but no WEIGHT, the default weight is .5p. +\# Otherwise, args have no defaults. +\# +.MAC BOX END +. nr #FROM_BOX 1 +. ie \\n[#NUM_ARGS]=0 \ +. BoxStart SHADED grey85 INSET 1P +. el \{\ +. ie \\n[#NUM_ARGS]=1 .BoxStop +. el .BoxStart \\$* +. \} +. rr #FROM_BOX +.END +\# +\# PAGE COLOUR +\# ----------- +\# *Arguments: +\# <color> | OFF | off +\# *Function: +\# Sets pagefill to <color> or stops pagefill. +\# *Notes: +\# OFF|off is required instead of the usual <anything>. +\# +.MAC PAGE_COLOR END +. ie !'\\$1'OFF' \{\ +. ie !'\\$1'off' \{\ +. fcolor \\$1 +. device pdf: background pagefill +. \} +. el .device pdf: background off +. \} +. el .device pdf: background off +.END +\# +.ALIAS PAGE_COLOUR PAGE_COLOR +.ALIAS SLIDE_COLOR PAGE_COLOR +.ALIAS SLIDE_COLOUR PAGE_COLOR +\# +\# Begin or end a box; called from BoxStart +\# +.de pdfbackground +. device pdf: background \\$* +. if '\\$1'off' \{\ +. ie (\\n[stack]-1)=0 \{\ +. if \\n[.t]>(1.6v+(\\*[wt\\n[stack]]/2u)) \ +. sp \\*[wt\\n[stack]]/2u +. \} +. el \{\ +. nr pdfbx-container \\n[stack]-1 +. if \\n[.t]>=((\\*[wt\\n[stack]]/2u)+(\\*[gap\\n[pdfbx-container]])+(\\*[wt\\n[pdfbx-container]])) \ +. sp \\*[wt\\n[stack]]/2u +. \} +. \} +.. +\# +\# Input trap macros +\# +.de rr-pdfbx-top +. rr pdfbx-top +.. +\# +.de rr-pdfbx-end +. rr pdfbx-end +.. +\# +.de rr-pdfbxstop +. rr pdfbxstop +.. +\# +.de rr-pic*pdfbx +. rr pic*pdfbx +.. +\# +.de rr-tbl*pdfbx +. rr tbl*pdfbx +.. +\# +.de rr-img*pdfbx +. rr img*pdfbx +.. +\# +.de rr-pdfbx-post-q +. rr pdfbx-post-q +.. +\# +.de rr-pdfbx-div-start +. rr pdfbx-div-start +.. +\# +\# Heavy lifting macros called from BOX. +\# +.de BoxStart +. ds pdfbx-args \\$* +. if \\n[pdfbx-inhibit-space] .sp -1 +. rr pdfbx-inhibit-space +. if \\n[#PP_SPACE] \{\ +. nr restore-pp-space 1 +. PARA_SPACE off +. \} +. if \\n[#PRINT_STYLE]=1 \{\ +. tm1 "[mom]: PRINTSTYLE TYPEWRITE does not permit shaded backgrounds and frames. +. tm1 " Continuing to process without backgrounds or frames. +. return +. \} +. if \\n[#COLUMNS] \{\ +. tm1 "[mom]: Shaded backgrounds and frames are not available when COLUMNS are enabled. +. tm1 " Continuing to process without backgrounds or frames. +. return +. \} +. if \\n[Q-float]=1 .nr Q-float 2 +. if !'\\n[.z]'' \{\ +. nr pdfbx-div-start 1 +\!. it 1 rr-pdfbx-div-start +. \} +. if !\\n[#NO_SHIM] \{\ +. NO_SHIM +. nr pdfbx-restore-shim 1 +. \} +. if !\\n[#NO_FLEX] \{\ +. NO_FLEX +. nr pdfbx-restore-flex 1 +. \} +. if (\\n[#NO_SHIM]=0)&(\\n[#NO_FLEX]=1) .nr pdfbx-restore-shim 1 +. if (\\n[#NO_SHIM]=1)&(\\n[#NO_FLEX]=0) .nr pdfbx-restore-flex 1 +. rr shad +. rr outl +. rm wt +. rm pdfbx-adj +. nr pdfbx-running 1 +. nr pdfbx-top 1 +. nr stack +1 +. nr pdfbx-prev \\n[stack]-1 +. ds type " " +. ie r #FROM_BOX .ds calling-macro BOX +. el .ds calling-macro \\$0 +. while \\n[.$] \{\ +. if !'\\$1'SHADED' \ +. if !'\\$1'OUTLINED' \ +. if !'\\$1'WEIGHT' \ +. if !'\\$1'INSET' \ +. if !'\\$1'PIC' \ +. if !'\\$1'GRAP' \ +. if !'\\$1'EQN' \ +. if !'\\$1'IMG' \ +. if !'\\$1'ADJUST' \{\ +. tm [mom]: Invalid argument '\\$1' to \\*[calling-macro], line \\n[.c]. +. shift 1 +. \} +. if '\\$1'SHADED' \{\ +. nop \\M[\\$2]\c +. nr shad 1 +. chop type +. as type "fill" +. shift 2 +. \} +. if '\\$1'OUTLINED' \{\ +. nop \\m[\\$2]\c +. nr outl 1 +. chop type +. as type "box" +. shift 2 +. \} +. if '\\$1'WEIGHT' \{\ +. ds wt \\$2 +. shift 2 +. \} +. if '\\$1'INSET' \{\ +. nr gap \\$2 +. shift 2 +. \} +. if '\\$1'ADJUST' \{\ +. ds pdfbx-adj \\$2 +. shift 2 +. \} +. if '\\$1'PIC' \{\ +. ie '\\n[.z]'FLOAT*DIV' .nr PIC 2 +. el .nr PIC 1 +. shift 1 +. \} +. if '\\$1'GRAP' \{\ +. ie '\\n[.z]'FLOAT*DIV' .nr PIC 2 +. el .nr PIC 1 +. shift 1 +. \} +. if '\\$1'EQN' \{\ +. nr EQN 1 +. shift 1 +. \} +. if '\\$1'IMG' \{\ +. nr IMG 1 +. shift 1 +. \} +. \} +. if '\\*[type]' ' .ds type "fill " +. chop type +. if !r gap .nr gap 1P +. ie \\n[outl] \ +. if '\\*[wt]'' .ds wt .5p +. el .ds wt 0 +. if d pdfbx-adj .sp \\*[pdfbx-adj] +. if \\n[@TOP] \{\ +. RESTORE_SPACE +. sp -1 +. nr @TOP 1 +. \} +. nr pdfbxstop 1 \" Stop box in footer if .br causes a page break +. br +. if \\n[Q-float]=2 .sp -.5 +. rr pdfbxstop +. fl +. SIZESPECS +. ds pdfbx-cap-adj \\*[$CAP_HEIGHT] +.\" Top spacing +. if \\n[#EPIGRAPH]+\\n[#QUOTE]=0 \ +. if \\n[#START] .sp -2 +. if \\n[#EPIGRAPH] \{\ +. ie \\n[#START] \!.sp -2 +. el \!.sp -1.5 +. \} +. if \\n[#QUOTE] \{\ +. if !\\n[@TOP] \!.sp -.5-\\*[pdfbx-cap-adj] +. if \\n[#START] \!.sp .5+\\*[wt] +. rr @TOP +. \} +. if '\\n[.z]'FLOAT*DIV' \{\ +. if !\\n[#START] \!.sp -1 +. nr no-top-space:1 1 +. nr pdfboxed 1 +. \} +. if \\n[stack]=1 \{\ +. if \\n[#INDENT_LEFT_ACTIVE] .nr #IL_ACTIVE \\n[#L_INDENT] +. if \\n[#INDENT_RIGHT_ACTIVE] .nr #IR_ACTIVE \\n[#R_INDENT] +. if \\n[#INDENT_BOTH_ACTIVE] \{\ +. nr #IBL_ACTIVE \\n[#BL_INDENT] +. nr #IBR_ACTIVE \\n[#BR_INDENT] +. \} +. if \\n[#IN_ITEM] \ +. if \\n[#BR_INDENT] .nr #IBR_ACTIVE \\n[#BR_INDENT] +. \} +.\" Set l +. nr pdfbx-l \\n[#L_MARGIN] +. if \\n[#EPIGRAPH]=2 \{\ +. GET_EPI_OFFSET +. nr pdfbx-l \\n[#EPI_OFFSET] +. \} +. if \\n[#QUOTE]=2 \{\ +. ie \\n[#BQ_OFFSET_VALUE] \ +. nr pdfbx-l \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#BQ_OFFSET_VALUE]) +. el \ +. nr pdfbx-l \\n[#L_MARGIN]+(\\*[$BQ_OFFSET_VALUE]) +. \} +. ie \\n[stack]=1 \ +. nr l \\n[pdfbx-l]+(\\*[wt]/2)+\\n[#IL_ACTIVE]+\\n[#IBL_ACTIVE] +. el .nr l +(\\*[wt\\n[pdfbx-prev]]/2)+\\*[gap\\n[pdfbx-prev]]+(\\*[wt]/2) +.\" Set r +. nr r \\n[pdfbx-l]+\\n[.l]-(\\*[wt]/2u) +. if \\n[#QUOTE]=1 .nr r \\n[pdfbx-l]+\\n[#L_LENGTH]-(\\*[wt]/2) +. if \\n[#IR_ACTIVE] .nr r \\n[pdfbx-l]+\\n[#L_LENGTH]-\\n[#IR_ACTIVE]-(\\*[wt]/2) +. if \\n[#IBR_ACTIVE] .nr r \\n[pdfbx-l]+\\n[#L_LENGTH]-\\n[#IBR_ACTIVE]-(\\*[wt]/2) +.\" Set t +. ie \\n[stack]=1 .nr t \\n[#T_MARGIN]+(\\*[wt]/2) +. el .nr t +(\\*[wt\\n[pdfbx-prev]]/2)+\\*[gap\\n[pdfbx-prev]]+(\\*[wt]/2) +.\" Set b +. nr b \\n[.p]+\\n[#VARIABLE_FOOTER_POS]-(\\*[wt]/2)+\\n[#DOC_LEAD]u +.\" Clear indents +. if \\n[stack]=1 \{\ +. nr pdfbx-clear 1 +. ILX CLEAR +. IRX CLEAR +. if !\\n[#QUOTE]=2 \ +. if !\\n[#EPIGRAPH]=2 \ +. IBX CLEAR +. if \\n[#IR_ACTIVE] .nr pdfbx-pre-ll \\n[#L_LENGTH] +. rr pdfbx-clear +. \} +.\" See if box fits +.\" PIC and IMG are in floats, which take care of fit/defer. +. if (\\n[PIC]=0)&(\\n[IMG]=0) \{\ +. if '\\n[.z]'' \{\ +. nr pdfbx-min \ + (\\*[wt]*2)+\\*[pdfbx-cap-adj]+(\\n[gap]*2) +. if r EQN .nr pdfbx-min +1v +. if \\n[.t]<\\n[pdfbx-min] \{\ +. rr pdfbx-running +. bp +. nr pdfbx-running 1 +. RESTORE_SPACE +. \} +. \} +. \} +.\" FOOTER trap +. if !r #VFP0 .nr #VFP0 \\n[#VARIABLE_FOOTER_POS] +. nr #VFP\\n[stack] 0\\n[#VFP\\n[pdfbx-prev]]-\\*[wt]-\\n[gap] +. nr #VARIABLE_FOOTER_POS 0\\n[#VFP\\n[stack]] +. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u +. mk +. sp \\*[wt]/2u +. +. pdfbackground \\*[type] \\n[l]z \\n[t]z \\n[r]z \\n[b]z \\*[wt] +. +.\" Always start at wt+gap +. ie \\n[#IL_ACTIVE]:\\n[#IBL_ACTIVE] \ +. IL \\n[gap]u+\\*[wt]+\\n[#IL_ACTIVE]u+\\n[#IBL_ACTIVE]u +. el .IL \\n[gap]u+\\*[wt] +. ie \\n[#IR_ACTIVE]:\\n[#IBR_ACTIVE] \ +. IR \\n[gap]u+\\*[wt]+\\n[#IR_ACTIVE]u+\\n[#IBR_ACTIVE]u +. el .IR \\n[gap]u+\\*[wt] +. nr pdfbx-ll \\n[.l] +. rt +. sp \\*[wt]+\\*[pdfbx-cap-adj]+\\n[gap]u +. if (\\n[shad]=1) .nop \\M[]\c +. if (\\n[outl]=1) .nop \\m[]\c +. ds gap\\n[stack] \\n[gap] +. ds wt\\n[stack] \\*[wt] +. rm wt type +. it 2 rr-pdfbx-top +.. +\# +.de BoxStop +. if \\n[#PRINT_STYLE]=1 .return +. if \\n[#COLUMNS]=1 .return +. if \\n[#QUOTE]=1 .nr pdfboxed 1 +. if \\n[pdfbx-end]=\\n[nl] \{\ +. ie !'\\n[.z]'FLOAT*DIV' .nr pdfbxstop-consec 1 +. el \ +\!. if '\\n[.z]'FLOAT*DIV' .nr pdfbxstop-consec 1 +. rr pdfbx-end +. \} +. nr pdfbxstop 1 \" Stop box in footer if EOL causes a page break +. if !'\\n[.z]'' \!.nr pdfbxstop 1 +. EOL +. rr pdfbxstop +. if (\\n[.ns]+\\n[@TOP])>0 .RESTORE_SPACE +. nr pdfbx-prev \\n[stack]-1 +. nr #VARIABLE_FOOTER_POS 0\\n[#VFP\\n[pdfbx-prev]] +. if \\n[stack]=1 \{\ +. if !\\n[#FN_COUNT] .nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN] +. \} +. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u +. if !'\\n[.z]'' \!.ch FOOTER \\n[#VARIABLE_FOOTER_POS]u +. ie !r pdfbxstop-consec \{\ +. sp \\*[gap\\n[stack]]u+(\\*[wt\\n[stack]]/2u) +. if r tbl*pdfbx \{\ +. if \\n[tbl*pdfbx]=1 .sp -.6 +. if \\n[tbl*pdfbx]=2 .sp -.6-1p +. if \\n[tbl*pdfbx]=3 .sp -.6+1.5p +. \} +. if r eqn*pdfbx \{\ +. if \\n[eqn*pdfbx]=1 .sp -.75 +. if \\n[eqn*pdfbx]=2 .sp -.5 +. rr eqn*pdfbx +. \} +. \} +. el \{\ +. sp +. if r pdfbx-post-space .sp -\\n[pdfbx-post-space]u +. rr pdfbx-post-space +. sp (\\*[wt\\n[stack]]/2u)+\\*[gap\\n[stack]]u +. if \\n[.t]<(\\*[wt\\n[stack]]+\\*[gap\\n[stack]]) \{\ +. nr pdfbx-container \\n[stack]+1 +. sp \\*[wt\\n[pdfbx-container]]/2u +. \} +. \} +. if \\n[pic*pdfbx]=2 \ +. sp -.5 +. if \\n[grap] \ +. if \\n[pic*have-label] \ +. sp .5 +. if \\n[img*pdfbx]=2 \ +. sp -.5 +. +. pdfbackground off +. +. EOL +. if \\n[.t]<1v \{\ +. nr pdfbxstop 1 \" Stop box in footer if .br causes a page break +. br +. \} +. if \\n[pdfbx-pause] .sp -2 +. if \\n[pic*pdfbx] \ +. if \\n[pic*have-label] .sp .5 +. IL -(\\*[gap\\n[stack]]u+\\*[wt\\n[stack]]) +. IR -(\\*[gap\\n[stack]]u+\\*[wt\\n[stack]]) +.\" Bottom spacing +.\" If the .sp or .br in the ie/el clause causes a break, tell +.\" HEADER to skip the PDF boxes stanza. +. nr pdfbxstop 1 +. if !'\\n[.z]'' \!.nr pdfbxstop 1 +. if '\\n[.z]'FLOAT*DIV' .if \\n[float*tbl] .sp -.5 +. ie \\n[.t]>1v \{\ +. nr pdfbx-post-space 1.6v +. if \\n[#EPIGRAPH] \ +. nr pdfbx-post-space .6v +. \} +. el .br +. rr pdfbxstop +. if '\\n[.z]'FLOAT*DIV' \!.rr pdfbxstop +. sp \\n[pdfbx-post-space]u +. if \\n[pic*pdfbx] \ +. sp -.5 +. if \\n[img*pdfbx] \ +. sp -.5 +. if \\n[#QUOTE] .sp -.5+(\\*[wt\\n[stack]]/2u) +. nr pdfbx-end \\n[nl] +. it 2 rr-pdfbx-end +. rr pdfbxstop-consec +. ie '\\n[.z]'' .rr pdfbx-running +. el \{\ +\!. rr pdfbx-running +\!. nr pdfbx-defer 1 +. \} +. ie '\\n[.z]'' .nr stack \\n[stack]-1 +. el \{\ +\!.nr stack-for-float \\n[stack] +\!.nr stack \\n[stack]-1 +. \} +. if \\n[pic*pdfbx] .rr pic*pdfbx +. if \\n[tbl*pdfbx] .rr tbl*pdfbx +. if \\n[img*pdfbx] .rr img*pdfbx +. if \\n[stack]=0 \{\ +. ILX CLEAR +. IRX CLEAR +. IBX CLEAR +. if \\n[#IL_ACTIVE] \{\ +. nr #L_INDENT \\n[#IL_ACTIVE] +. IL +. rr #IL_ACTIVE +. \} +. if \\n[#IR_ACTIVE] \{\ +. nr #R_INDENT \\n[#IR_ACTIVE] +. ll \\n[pdfbx-pre-ll]u +. IR +. rr pdfbx-pre-ll +. rr #IR_ACTIVE +. \} +. if \\n[#IBR_ACTIVE] \{\ +. ll \\n[pdfbx-pre-ll]u +. IB \\n[#IBL_ACTIVE]u \\n[#IBR_ACTIVE]u +. rr pdfbx-pre-ll +. rr #IBR_ACTIVE +. rr #IBL_ACTIVE +. \} +. if r PIC \{\ +. rr pic*pdfbx +. rr PIC +. \} +. if r EQN \{\ +. rr eqn*pdfbx +. rr EQN +. \} +. if r IMG \{\ +. rr img*pdfbx +. rr IMG +. \} +. \} +. if '\\n[.z]'P_QUOTE' \{\ +. nr pdfbx-post-q 1 +. it 2 rr-pdfbx-post-q +. \} +. if d pdfbx-adj .rm pdfbx-adj +. if \\n[restore-pp-space] \{\ +. rr restore-pp-space +. PARA_SPACE +. \} +. if \\n[pdfbx-restore-shim] \{\ +. NO_SHIM off +. rr pdfbx-restore-shim +. \} +. if \\n[pdfbx-restore-flex] \{\ +. NO_FLEX off +. rr pdfbx-restore-flex +. \} +. ie '\\n[.z]'' \{\ +. if \\n[stack]=0 \{\ +. rr #VFP0 +. if !\\n[#NO_SHIM] .SHIM +. if !\\n[#NO_FLEX] .FLEX +. \} +. \} +. el \{\ +\!. if (\\\\n[stack]=0) \{\ +. rr #VFP0 +. if !r #EPIGRAPH \!.SHIM +. \} +. \} +.. +\# +\# Local Variables: +\# mode: nroff +\# End: +\# vim: filetype=groff: |