diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 19:44:05 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 19:44:05 +0000 |
commit | d318611dd6f23fcfedd50e9b9e24620b102ba96a (patch) | |
tree | 8b9eef82ca40fdd5a8deeabf07572074c236095d /contrib/mom/om.tmac | |
parent | Initial commit. (diff) | |
download | groff-d318611dd6f23fcfedd50e9b9e24620b102ba96a.tar.xz groff-d318611dd6f23fcfedd50e9b9e24620b102ba96a.zip |
Adding upstream version 1.23.0.upstream/1.23.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | contrib/mom/om.tmac | 24571 |
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: |