summaryrefslogtreecommitdiffstats
path: root/contrib/mom/om.tmac
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/mom/om.tmac')
-rw-r--r--contrib/mom/om.tmac24571
1 files changed, 24571 insertions, 0 deletions
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: