diff options
Diffstat (limited to 'contrib/mom/om.tmac')
-rw-r--r-- | contrib/mom/om.tmac | 8120 |
1 files changed, 8120 insertions, 0 deletions
diff --git a/contrib/mom/om.tmac b/contrib/mom/om.tmac new file mode 100644 index 00000000..e8a85d87 --- /dev/null +++ b/contrib/mom/om.tmac @@ -0,0 +1,8120 @@ +.\" om.tmac +.\" +.\" Copyright (C) 2002 Free Software Foundation, Inc. +.\" Written by Peter Schaffter (df191@ncf.ca) +.\" +.\" 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 2, 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 groff; see the file COPYING. If not, write to the Free Software +.\" Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +. +. +\# Inasmuch as possible, macros that turn a feature on or off follow +\# a similar style. Invoking the macro without an argument turns +\# the feature on. Invoking it with any other argument turns it off. +\# Use of the argument OFF is recommended, but not required; users +\# may find other conventions preferable (e.g. NO, X, END, QUIT, etc.). +\# +\# "<anything>" in the description of arguments that can be passed +\# to a macro means that any argument turns the feature off. +\# +\# ==================================================================== +\# +\# TYPESETTING MACROS, STRINGS, AND ALIASES +\# ======================================== +\# +\# +++ALIASES+++ +\# +.als ALIAS als \"Alias .als as ALIAS +.als ALIASN aln \"Alias .aln (number registers) as ALIASN +\# +.ALIAS MAC de +.ALIAS BR br +.ALIAS SPACE sp +.ALIAS SP sp +.ALIAS PAGELENGTH pl +.ALIAS NEWPAGE bp +.ALIAS SPREAD brp +.ALIAS STRING ds +\# +\# 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 (.vs, not .ls) +.ALIASN #PAGE_LENGTH .p \"page length +.ALIASN #NUM_ARGS .$ \"number of arguments passed to a macro +.ALIASN #INDENT .i \"value of current indent +\# +\# +\# ==================================================================== +\# +\# END MACRO +\# --------- +\# *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 +. br +. FOOTERS OFF +. PAGINATION OFF +. if \\n[#DOC_TYPE]=4 \{\ +. br +. if !'\\n(.z'' \{ .di \} +. IX CLEAR +. TQ +. TS 1 \\n[#DOC_L_LENGTH]u/2u \\n[#DOC_L_LENGTH]u/2u LEFT +. ALD \\n[#DOC_LEAD]u*2u +. TAB 1 +. if \\n[#CLOSING] \{\ +. nf +. CLOSING +. \} +. ALD \\n[#DOC_LEAD]u*3u +. PRINT \\*[$AUTHOR_1] +. \} +.DO_FOOTER +.END +\# +\# +\# ===================================================================== +\# +\# +++PAGE LAYOUT+++ +\# +\# Macros that control the physical layout of the page: paper size +\# and margins. +\# +\# PAGE WIDTH +\# ---------- +\# *Argument: +\# <width of printer sheet (ipPc)> +\# *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 \} +.END +\# +\# +\# L_MARGIN +\# -------- +\# *Argument: +\# <offset from page left (ipPc)> +\# *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 (ipPc)> +\# *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(.lu +. nr #L_LENGTH \\n(.l +.END +\# +\# +\# T_MARGIN +\# -------- +\# *Argument: +\# <distance to advance from top of page (ipPcv)> +\# *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 +. br +. nr #T_MARGIN (\\$1) +. nr #T_MARGIN_SET 1 +. if !\\n[#DOCS] \{\ +. PRINT \& +. sp |\\n[#T_MARGIN]u-1v +. \} +. wh 0i DO_T_MARGIN +.END +\# +\# +\# B_MARGIN +\# -------- +\# *Argument: +\# <space to leave at the bottom of the page (ipPcv)> +\# *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) +. 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 +\# +\# ===================================================================== +\# +\# +++PAGE CONTROL+++ +\# +\# Generic macros for breaking pages. +\# +\# DO_HEADER +\# --------- +\# *Argument: +\# <none> +\# *Function: +\# Plants the top margin (set in .PAGE) at the top of each page. +\# *Notes: +\# The trap is set in .PAGE +\# +.MAC DO_T_MARGIN END +. ev 1 +. sp |\\n[#T_MARGIN]u-1v +. ev +.END +\# +\# +\# DO_FOOTER +\# --------- +\# *Argument: +\# <none> +\# *Function: +\# Plants the bottom margin (set in .PAGE) at the bottom of each page. +\# *Notes: +\# The trap is set in .PAGE. +\# +.MAC DO_B_MARGIN END +.ev 1 +. bp +.ev +.END +\# +\# ===================================================================== +\# +\# +++GENERAL STYLE MACROS+++ +\# +\# Macros that are likely to appear together to define general +\# type style: line length, family, font, point size, and line +\# spacing. +\# +\# LINE LENGTH +\# ----------- +\# *Argument: +\# <line length (iPpc)> +\# *Function: +\# Stores user supplied line length in register #L_LENGTH. +\# Sets .ll to #L_LENGTHu +\# *Notes: +\# Requires unit of measure. +\# +.MAC LL END +. nr #L_LENGTH (\\$1) +. nr #USER_SET_L_LENGTH 1 +. ll \\n[#L_LENGTH]u +. ta \\n(.lu +.END +\# +\# +\# FAMILY +\# ------ +\# *Argument: +\# <font family> +\# *Function: +\# Stores user supplied font family in string $FAMILY. Sets .fam +\# to $FAMILY. +\# +.MAC FAMILY END +. if \\n[#PRINT_STYLE]=1 \{ .return \} +. if \\n[#IGNORE] \{ .return \} +. ds $FAMILY \\$1 +. fam \\*[$FAMILY] +.END +\# +\# +\# FONT +\# ---- +\# *Argument: +\# R | I | B | BI +\# *Function: +\# Stores user supplied font in $FONT and sets .ft to $FONT. +\# +.MAC FT END +. 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 +. \} +. ds $FONT \\$1 +. ft \\*[$FONT] +.END +\# +\# +\# POINT SIZE +\# ---------- +\# *Arguments: +\# <point size of type> +\# *Function: +\# Sets point size to user supplied value in scaled points. +\# If #AUTO_LEAD is on, sets .vs to #AUTOLEAD_VALUE+#PT_SIZE. +\# *Notes: +\# Must NOT use a unit of measure. +\# +.MAC PS END +. if \\n[#PRINT_STYLE]=1 \{ .return \} +. if \\n[#IGNORE] \{ .return \} +. nr #PT_SIZE_SET 1 +. ps \\$1 +. if \\n[#AUTO_LEAD] \{\ +. ie \\n[#AUTOLEAD_FACTOR] \{ .vs \\n[#PT_SIZE]u*\\n[#AUTOLEAD_VALUE]u/1000u \} +. el \{ .vs \\n[#PT_SIZE]u+\\n[#AUTOLEAD_VALUE]u \} +. \} +. nr #PT_SIZE_IN_UNITS \\n[.ps] +.END +\# +\# +\# LEADING +\# ------- +\# *Argument: +\# <leading between lines of text> +\# *Function: +\# Turns off #AUTO_LEAD if it's on. +\# Sets .vs to user supplied value. +\# *Notes: +\# Does not require unit of measure. LEAD automatically turns off AUTOLEAD. +\# +.MAC LS END +. if \\n[#PRINT_STYLE]=1 \{ .return \} +. if \\n[#IGNORE] \{ .return \} +. nr #LEAD_SET 1 +. if \\n[#AUTO_LEAD] \{\ +. rr #AUTO_LEAD +. rr #AUTOLEAD_FACTOR +. \} +. vs \\$1 +. if \\n[#T_MARGIN_SET]=1 \{\ +. sp |\\n[#T_MARGIN]u-1v +. rr #T_MARGIN_SET +. \} +.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 PS 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 instead of the two being added +\# together. +\# +\# When AUTOLEAD is turned off, the leading reverts to the leading value +\# in effect prior to invoking AUTOLEAD. +\# +.MAC AUTOLEAD END +. if \\n[#PRINT_STYLE]=1 \{ .return \} +. if \\n[#IGNORE] \{ .return \} +. nr #AUTO_LEAD 1 +. nr #AUTOLEAD_VALUE (p;\\$1) +. ie \\n[#NUM_ARGS]=2 \{\ +. if '\\$2'FACTOR' \{ +. nr #AUTOLEAD_FACTOR 1 +. vs \\n[#PT_SIZE]u*\\n[#AUTOLEAD_VALUE]u/1000u +. \} +. \} +. el \{\ +. vs \\n[#PT_SIZE]u+\\n[#AUTOLEAD_VALUE]u +. \} +. if \\n[#T_MARGIN_SET] \{\ +. sp |\\n[#T_MARGIN]u-1v +. rr #T_MARGIN_SET +. \} +.END +\# +\# +\# STRINGS FOR INLINE CONTROL OF GENERAL TYPE STYLE +\# ------------------------------------------------ +.ds ROM \EfR +.ds IT \EfI +.ds BD \EfB +.ds BDI \Ef(BI +.ds PREV \EfP +.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 +\# -------------- +\# Inline kerning provides a simple method for users to adjust the +\# amount of space between any two letters. It's predicated on a +\# unit of measure "U", which 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. +\# +\# N.B.--the amount of inline kerning supplied by \*[BU#] or +\# \*[FU#] is added to or subtracted from any kerning that already +\# takes place between two characters when automatice kerning is +\# turned on. +\# +\# Owing to some stupidities of groff, it is not possible +\# pass arguments to macros that are executed with inline +\# escapes, nor thence to evaluate conditional expressions. +\# Consequently, each pseudo-escape \[BU#] must be defined +\# separately with ".char". I'd have prefered something like +\# this +\# +\# .de BU +\# \c +\# \\h'-(\\n[#PT_SIZE]u/\\n[#KERN_UNIT]u*\\$1u)'\c +\# .. +\# +\# with the BU escape looking like "\*[BU #]", but that's +\# just not possible. Bottom line? The user can only BU or FU +\# up to 36 Us, and there are too many lines of code for +\# such a simple function. +\# +\# BP and FP do the same thing as BU and FU, except that the +\# unit is points, and it only goes up to FP12/BP12 (1 pica) +\# +\# +.nr #KERN_UNIT 36 +.ds BU1 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*1u)' +.ds BU2 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*2u)' +.ds BU3 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*3u)' +.ds BU4 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*4u)' +.ds BU5 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*5u)' +.ds BU6 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*6u)' +.ds BU7 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*7u)' +.ds BU8 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*8u)' +.ds BU9 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*9u)' +.ds BU10 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*10u)' +.ds BU11 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*11u)' +.ds BU12 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*12u)' +.ds BU13 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*13u)' +.ds BU14 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*14u)' +.ds BU15 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*15u)' +.ds BU16 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*16u)' +.ds BU17 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*17u)' +.ds BU18 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*18u)' +.ds BU19 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*19u)' +.ds BU20 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*20u)' +.ds BU21 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*21u)' +.ds BU22 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*22u)' +.ds BU23 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*23u)' +.ds BU24 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*24u)' +.ds BU25 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*25u)' +.ds BU26 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*26u)' +.ds BU27 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*27u)' +.ds BU28 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*28u)' +.ds BU29 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*29u)' +.ds BU30 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*30u)' +.ds BU31 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*31u)' +.ds BU32 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*32u)' +.ds BU33 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*33u)' +.ds BU34 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*34u)' +.ds BU35 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*35u)' +.ds BU36 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*36u)' +\# +.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 FU1 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*1u)' +.ds FU2 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*2u)' +.ds FU3 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*3u)' +.ds FU4 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*4u)' +.ds FU5 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*5u)' +.ds FU6 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*6u)' +.ds FU7 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*7u)' +.ds FU8 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*8u)' +.ds FU9 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*9u)' +.ds FU10 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*10u)' +.ds FU11 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*11u)' +.ds FU12 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*12u)' +.ds FU13 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*13u)' +.ds FU14 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*14u)' +.ds FU15 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*15u)' +.ds FU16 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*16u)' +.ds FU17 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*17u)' +.ds FU18 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*18u)' +.ds FU19 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*19u)' +.ds FU20 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*20u)' +.ds FU21 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*21u)' +.ds FU22 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*22u)' +.ds FU23 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*23u)' +.ds FU24 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*24u)' +.ds FU25 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*25u)' +.ds FU26 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*26u)' +.ds FU27 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*27u)' +.ds FU28 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*28u)' +.ds FU29 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*29u)' +.ds FU30 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*30u)' +.ds FU31 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*31u)' +.ds FU32 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*32u)' +.ds FU33 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*33u)' +.ds FU34 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*34u)' +.ds FU35 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*35u)' +.ds FU36 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*36u)' +\# +.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 KERNING (RW and EW) +\# ----------------------------- +\# The line kerning macros are special instances of track kerning, +\# used where a complete line needs to be tightened (or relaxed) in +\# order to accomodate or remove one or two more characters +\# than the default justification permits. +\# +\# *Argument: +\# <amount of overall "kerning" (letter spacing) to apply to the line> +\# *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. +\# +\# The groff documentation is a tad confusing about what unit of +\# measure is used in track kerning, only that the width of each +\# character is increased or decreased by the amount(s) passed as +\# arguments to .tkf, and something about linear function of point +\# size. In fact, with the way I've put this macro together, it +\# doesn't matter. All the user needs to know is that a value +\# of one 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 (e.g. .25, .5). Given that RW +\# and EW are for massaging type, a certain amount of +\# experimentation and previewing is expected and necessary. +\# +\# \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] \{ .br \} +. tkf 1 1 -\\$1 1 -\\$1 +. tkf 2 1 -\\$1 1 -\\$1 +. tkf 3 1 -\\$1 1 -\\$1 +. tkf 4 1 -\\$1 1 -\\$1 +.END +\# +\# +.MAC EW END +. if \\n[#BR_AT_LINE_KERN] \{ .br \} +. tkf 1 1 \\$1 1 \\$1 +. tkf 2 1 \\$1 1 \\$1 +. tkf 3 1 \\$1 1 \\$1 +. tkf 4 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_BEFORE_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 <#> | MARGIN <#> | SPACE <#> +\# *Function: +\# Turns auto hyphenation on or off, resets the hyphenation style +\# to default, or permits the setting of various hyphenation +\# parameters. +\# *Notes: +\# HY ON 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 <#> sets the number of allowable consecutive hyphenated lines. +\# +\# HY MARGIN <#> 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 +. 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 \} +. if '\\$1'MARGIN' \{ .hym \\$2 \} +. if '\\$1'SPACE' \{ .hys \\$2 \} +. if '\\$1'DEFAULT' \{\ +. hlm -1 +. hym 0 +. hys 0 +. \} +. \} +.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 (ipPc) to advance below current baseline> +\# *Function: +\# Creates or modifies register #ALD. Adds user supplied lead +\# below current baseline. +\# *Notes: +\# Requires unit of measure ipPcmv. +\# +.MAC ALD END +. nr #ALD (\\$1) +. sp \\n[#ALD]u +.END +\# +\# +\# REVERSE LEAD +\# ------------ +\# *Argument: +\# <user supplied lead (ipPc) to reverse above current baseline> +\# *Function: +\# Creates or modifies register #RLD. Reverses user supplied +\# lead above current baseline. +\# *Notes: +\# Requires unit of measure ipPcm. +\# +.MAC RLD END +. nr #RLD (\\$1) +. sp -\\n[#RLD]u +.END +\# +\# ALD/RLD STRINGS +\# --------------- +\# *Notes: +\# If user needs to ALD/RLD more than 12 points, \v'<distance>' must be used +\# instead +\# +.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: +\# <none> | <anything> +\# *Function: +\# Turns smartquotes on or off. +\# *Notes: +\# The " character is read outside the macro when mymacs is +\# processed. The strings for open/close ($QUOTE#) are then +\# defined in the macro. \N'34' is the ASCII code for ". If +\# incompatibilities arise, find the code for " that applies +\# to your system and plug in that code instead. +\# +.char " \\*[$QUOTE\\n[#OPEN_CLOSE]]\R'#OPEN_CLOSE (1-\\n[#OPEN_CLOSE])' +\# +.MAC SMARTQUOTES END +. ie '\\$1'' \{\ +. nr #OPEN_CLOSE 0 +. ds $QUOTE0 `` +. ds $QUOTE1 '' +. nr #SMART_QUOTES 1 +. \} +. el \{\ +. ds $QUOTE0 \\N'34' +. ds $QUOTE1 \\N'34' +. nr #SMART_QUOTES 0 +. \} +.END +\# +.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, then return to the left margin +\# without advancing the galley medium." It stands for End Line. +\# +\# Sadly, EL is only a fake. It will work in all instances EXCEPT +\# when the line to be EL'd is the last line before a footer trap. +\# +.MAC EL END +. br +. sp -1v +.END +\# +\# ===================================================================== +\# +\# +++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 \\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 #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 +. ds $QUAD_VALUE \\$1 +. if \\n[#TAB_ACTIVE]=0 \{\ +. nr #QUAD 1 +. ds $RESTORE_QUAD_VALUE \\*[$QUAD_VALUE] +. \} +' ce 0 +' fi +. if '\\*[$QUAD_VALUE]'L' \{ .ad l \} +. if '\\*[$QUAD_VALUE]'LEFT' \{ .ad l \} +. if '\\*[$QUAD_VALUE]'R' \{ .ad r \} +. if '\\*[$QUAD_VALUE]'RIGHT' \{ .ad r \} +. if '\\*[$QUAD_VALUE]'C' \{ .ad c \} +. if '\\*[$QUAD_VALUE]'CENTER' \{ .ad c \} +. if '\\*[$QUAD_VALUE]'CENTRE' \{ .ad c \} +. if '\\*[$QUAD_VALUE]'J' \{ .ad b \} +. if '\\*[$QUAD_VALUE]'JUSTIFY' \{ .ad b \} +. nr #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* the user having to +\# enter .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 groff 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, simply continued (indefinitely) until a return is +\# encountered. 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 #FILL 1 +.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 +. \} +. fi +. rj 100000 +. nr #FILL 1 +.END +\# +\# +\# CENTER +\# ------ +\# *Argument: +\# <none> +\# *Function: +\# Turns fill on. 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 \{\ +. ds $RESTORE_QUAD_VALUE CENTER +. \} +. fi +. ce 100000 +. nr #FILL 1 +.END +\# +\# ===================================================================== +\# +\# +++TABS+++ +\# +\# There are two different kinds of tabs available: 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 TS, they are called with .TAB <#>, where <#> +\# 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 <#>, +\# 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 \*[ST<#>], where <#> is +\# the desired number of the tab. The end of the the tab is marked +\# with \*[ST<#>X]. All ST's must have a matching STX. String tabs +\# may be nested. +\# +\# Next, the user invokes .ST <#> for every string tab defined, and +\# optionally passes quad information to it. That done, string tabs +\# can be called just like typesetting tabs. +\# +\# String tabs don't preview properly with gxditview. Use gv instead. +\# +\# Strings for string tab inlines +\# ------------------------------ +\# +.ds ST1 \Ek[#ST1_OFFSET] +.ds ST2 \Ek[#ST2_OFFSET] +.ds ST3 \Ek[#ST3_OFFSET] +.ds ST4 \Ek[#ST4_OFFSET] +.ds ST5 \Ek[#ST5_OFFSET] +.ds ST6 \Ek[#ST6_OFFSET] +.ds ST7 \Ek[#ST7_OFFSET] +.ds ST8 \Ek[#ST8_OFFSET] +.ds ST9 \Ek[#ST9_OFFSET] +.ds ST10 \Ek[#ST10_OFFSET] +.ds ST11 \Ek[#ST11_OFFSET] +.ds ST12 \Ek[#ST12_OFFSET] +.ds ST13 \Ek[#ST13_OFFSET] +.ds ST14 \Ek[#ST14_OFFSET] +.ds ST15 \Ek[#ST15_OFFSET] +.ds ST16 \Ek[#ST16_OFFSET] +.ds ST17 \Ek[#ST17_OFFSET] +.ds ST18 \Ek[#ST18_OFFSET] +.ds ST19 \Ek[#ST19_OFFSET] +.ds ST1X \Ek[#ST1_MARK] +.ds ST2X \Ek[#ST2_MARK] +.ds ST3X \Ek[#ST3_MARK] +.ds ST4X \Ek[#ST4_MARK] +.ds ST5X \Ek[#ST5_MARK] +.ds ST6X \Ek[#ST6_MARK] +.ds ST7X \Ek[#ST7_MARK] +.ds ST8X \Ek[#ST8_MARK] +.ds ST9X \Ek[#ST9_MARK] +.ds ST10X \Ek[#ST10_MARK] +.ds ST11X \Ek[#ST11_MARK] +.ds ST12X \Ek[#ST12_MARK] +.ds ST13X \Ek[#ST13_MARK] +.ds ST14X \Ek[#ST14_MARK] +.ds ST15X \Ek[#ST15_MARK] +.ds ST16X \Ek[#ST16_MARK] +.ds ST17X \Ek[#ST17_MARK] +.ds ST18X \Ek[#ST18_MARK] +.ds ST19X \Ek[#ST19_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 TS, 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] \{\ +. TS \\$1 \\n[#ST\\$1_OFFSET]u+\\n[#ST_OFFSET]u \\n[#ST\\$1_LENGTH]u \\*[$ST\\$1_QUAD_DIR] \\*[$ST\\$1_FILL] +. \} +. el \{\ +. TS \\$1 \\n[#ST\\$1_OFFSET]u \\n[#ST\\$1_LENGTH]u \\*[$ST\\$1_QUAD_DIR] \\*[$ST\\$1_FILL] +. \} +.END +\# +\# +\# TAB SET +\# ------- +\# *Arguments: +\# <#> ident(ipPcm) length(ipPcm) [L | R | C | J [QUAD]] +\# *Function: +\# Creates macros TAB<#> and TAB <#>, where # is any arbitrary number. +\# TAB# is a typesetting tab (i.e. a tab defined as an indent +\# from the page left offset plus a line length.) +\# *Notes: +\# <#> = 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 +\# +\# Examples: +\# +\# .TS 1 2P+6p 12P C +\# +\# means "create a tab numbered 1 that starts 2 picas and 6 points from +\# the left margin, is 12 picas long, and centre each input line." +\# +\# .TS 1 2P+6P 12P C QUAD +\# +\# means exactly the same thing, except that input lines are joined and +\# the area delimted by the tab filled with centered text. +\# +\# TAB <#> can be called at any time after being set. +\# +\# Tabs are NOT columnar in behaviour. If the text inside a +\# tab runs to several lines, when you call the next tab a break +\# occurs, meaning that the new tab starts one line below the last +\# line in the previous tab. For columnar behaviour, you must +\# use the multi-column macros in addition to tabs. +\# +\# If you want tabs to line up bottom-line to bottom-line (most likely +\# single line tabs), use .TN (provided the tabs are numbered sequentially). +\# Otherwise, you must use .EL then .TAB # if you want them to align. +\# +\# If you want to reset tabs, you must use .TQ before .TS. +\# +\# Note that indents are turned off automatically whenever a new +\# tab is called with TAB #. +\# +\# Tabs themselves are user-invoked using the TAB macro with a numeric +\# argument, e.g. TAB 1. +\# +\# Generally, in order not to get confused, 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] DONE \"Define TAB macro +. br +. in 0 +. nr #TAB_ACTIVE 1 +. nr #CURRENT_TAB \\n[#TAB_NUMBER] +. po \\n[#L_MARGIN]u+\\n[#TAB_OFFSET]u +. nr #ST_OFFSET \\n[#TAB_OFFSET] +. nr #TAB_OFFSET\\*[$CURRENT_TAB] \\n[#TAB_OFFSET] +. ll \\n[#TAB_LENGTH]u +. ta \En(.lu +. 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 \} +. \} +.DONE +. 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 +. po \\n[#L_MARGIN]u+\\n[#TAB_OFFSET\\*[$TAB_NUMBER]]u +.END +\# +\# +\# TAB NEXT +\# -------- +\# *Argument: +\# <none> +\# *Function: +\# Automagically moves to TAB#+1 on the same line as the last +\# line of the previous tab. +\# *Notes: +\# If the tabs being aligned fall too close to the footer +\# trap, the line entered after .TN will appear on the next page. +\# +.MAC TN END +. br +. nr #NEXT_TAB \\n[#CURRENT_TAB]+1 +. TAB\\n[#NEXT_TAB] +. sp -1v +.END +\# +\# +\# 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* come before setting any new tabs if you want the +\# tabs' indents measured from page left. Otherwise, the tabs' +\# indents are measured from the left margin of the tab you're +\# currently in. +\# +.MAC TQ END +. br +. rr #TAB_ACTIVE +. rr #IN_TAB +. po \\n[#L_MARGIN]u +. ll \\n[#L_LENGTH]u +. ta \\n(.lu +. 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 +\# +\# ===================================================================== +\# +\# +++MISCELLANEOUS USEFUL MACROS AND STRINGS+++ +\# +\# UNDERLINE +\# --------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# When on, underlines all letters, words, and digits in a passage, +\# ignoring punctuation and spaces. +\# *Notes: +\# Only for use when the font family is COURIER, to simulate +\# typewriter-style underlining of italic passages. +\# +.MAC UNDERLINE END +. ie '\\$1'' \{\ +. nr #UNDERLINE_ON 1 +. char A _A +. char B _B +. char C _C +. char D _D +. char E _E +. char F _F +. char G _G +. char H _H +. char I _I +. char J _J +. char K _K +. char L _L +. char M _M +. char N _N +. char O _O +. char P _P +. char Q _Q +. char R _R +. char S _S +. char T _T +. char U _U +. char V _V +. char W _W +. char X _X +. char Y _Y +. char Z _Z +. char À _À +. char  _ +. char Á _Á +. char Ä _Ä +. char Å _Å +. char È _È +. char Ê _Ê +. char É _É +. char Ë _Ë +. char Ì _Ì +. char Î _Î +. char Í _Í +. char Ï _Ï +. char Ñ _Ñ +. char Ò _Ò +. char Ô _Ô +. char Ó _Ó +. char Ö _Ö +. char Ø _Ø +. char Ù _Ù +. char Û _Û +. char Ú _Ú +. char Ü _Ü +. char a _a +. char b _b +. char c _c +. char d _d +. char e _e +. char f _f +. char g _g +. char h _h +. char i _i +. char j _j +. char k _k +. char l _l +. char m _m +. char n _n +. char o _o +. char p _p +. char q _q +. char r _r +. char s _s +. char t _t +. char u _u +. char v _v +. char w _w +. char x _x +. char y _y +. char z _z +. char à _à +. char â _â +. char á _á +. char ä _ä +. char å _å +. char è _è +. char ê _ê +. char é _é +. char ë _ë +. char ì _ì +. char î _î +. char í _í +. char ï _ï +. char ñ _ñ +. char ò _ò +. char ô _ô +. char ó _ó +. char ö _ö +. char ø _ø +. char ß _ß +. char ù _ù +. char û _û +. char ú _ú +. char ü _ü +. char ' _' +. char 1 _1 +. char 2 _2 +. char 3 _3 +. char 4 _4 +. char 5 _5 +. char 6 _6 +. char 7 _7 +. char 8 _8 +. char 9 _9 +. char 0 _0 +. \} +. el \{\ +. nr #UNDERLINE_ON 0 +. rchar 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 \ + à â á ä å è ê é ë ì î í ï ñ ò ô ó ö ø ß ù û ú ü ' \ + 1 2 3 4 5 6 7 8 9 0 +. \} +.END +\# +\# +\# UL/ULX +\# ------ +\# *Arguments: +\# <none> +\# *Function: +\# Underscores all letters, words, and digits in a passage, +\# ignoring punctuation and spaces. +\# *Notes: +\# Intended to be called with inline escapes \*[UL] (underline +\# on) and \*[ULX] (underline off). Only works when the font family +\# is COURIER, to simulate typewriter-style underlining of italic +\# passages. +\# +.MAC UL END +\c\R'#UNDERLINE_ON 1' +. char A _A +. char B _B +. char C _C +. char D _D +. char E _E +. char F _F +. char G _G +. char H _H +. char I _I +. char J _J +. char K _K +. char L _L +. char M _M +. char N _N +. char O _O +. char P _P +. char Q _Q +. char R _R +. char S _S +. char T _T +. char U _U +. char V _V +. char W _W +. char X _X +. char Y _Y +. char Z _Z +. char À _À +. char  _ +. char Á _Á +. char Ä _Ä +. char Å _Å +. char È _È +. char Ê _Ê +. char É _É +. char Ë _Ë +. char Ì _Ì +. char Î _Î +. char Í _Í +. char Ï _Ï +. char Ñ _Ñ +. char Ò _Ò +. char Ô _Ô +. char Ó _Ó +. char Ö _Ö +. char Ø _Ø +. char Ù _Ù +. char Û _Û +. char Ú _Ú +. char Ü _Ü +. char a _a +. char b _b +. char c _c +. char d _d +. char e _e +. char f _f +. char g _g +. char h _h +. char i _i +. char j _j +. char k _k +. char l _l +. char m _m +. char n _n +. char o _o +. char p _p +. char q _q +. char r _r +. char s _s +. char t _t +. char u _u +. char v _v +. char w _w +. char x _x +. char y _y +. char z _z +. char à _à +. char â _â +. char á _á +. char ä _ä +. char å _å +. char è _è +. char ê _ê +. char é _é +. char ë _ë +. char ì _ì +. char î _î +. char í _í +. char ï _ï +. char ñ _ñ +. char ò _ò +. char ô _ô +. char ó _ó +. char ö _ö +. char ø _ø +. char ß _ß +. char ù _ù +. char û _û +. char ú _ú +. char ü _ü +. char ' _' +. char 1 _1 +. char 2 _2 +. char 3 _3 +. char 4 _4 +. char 5 _5 +. char 6 _6 +. char 7 _7 +. char 8 _8 +. char 9 _9 +. char 0 _0 +.END +\# +\# +.MAC ULX END +\c\R'#UNDERLINE_ON 0' +. rchar 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 \ + à â á ä å è ê é ë ì î í ï ñ ò ô ó ö ø ß ù û ú ü ' \ + 1 2 3 4 5 6 7 8 9 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 +\# +\# All text is underscored (including punctuation and spaces). +\# This is the primary difference between UNDERLINE and UNDERSCORE, +\# aside from the fact the UNDERLINE only works with Courier. +\# +\# UNDERSCORE does not work across line breaks. Each line of +\# text must be entered separately with UNDERSCORE. If the +\# UNDERSCORE begins in the middle of a line and crosses over a +\# break, the portion before the break must be entered in its own +\# UNDERSCORE, as must the portion that comes after the break. +\# +.MAC UNDERSCORE END +. nr #RESTORE_PT_SIZE \\n[#PT_SIZE] +. ie \\n[#NUM_ARGS]=1 \{ \\$1\\s(12\\v'+2p'\\l'|0'\\v'-2p'\\s[\\n[#RESTORE_PT_SIZE]u] \} +. el \{ \\$2\\s(12\\v'+(\\$1)'\\l'|0'\\v'-(\\$1)'\\s[\\n[#RESTORE_PT_SIZE]u] \} +. rr #RESTORE_PT_SIZE +.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 #RESTORE_PT_SIZE \\n[#PT_SIZE] +. if \\n[#NUM_ARGS]=1 \{\ +. PRINT \\$1\\s(12\\v'+2p'\\l'|0'\\v'+2p'\\l'|0'\\v'-4p'\\s[\\n[#RESTORE_PT_SIZE]u] +. \} +. if \\n[#NUM_ARGS]=2 \{\ +. PRINT \\$2\\s(12\\v'+\\$1'\\l'|0'\\v'+2p'\\l'|0'\\v'-(2p+\\$1)'\\s[\\n[#RESTORE_PT_SIZE]u] +. \} +. if \\n[#NUM_ARGS]=3 \{\ +. PRINT \\$3\\s(12\\v'+\\$1'\\l'|0'\\v'+\\$2'\\l'|0'\\v'-(\\$2+\\$1)'\\s[\\n[#RESTORE_PT_SIZE]u] +. \} +. rr #RESTORE_PT_SIZE +.END +\# +\# +\# SUPERSCRIPT INLINES +\# ------------------- +\# *Function: +\# Prints everything after 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. +\# +.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]\v'-.3m'\s[\En[#SUP_PT_SIZE]u] +\# +.ds SUPX \s[\En[#PT_SIZE_IN_UNITS]u]\v'.3m' +\# +.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]\v'-.3m'\s[\En[#SUP_PT_SIZE]u]\E*[COND_FOR_SUP] +\# +.ds CONDSUPX \s[\En[#PT_SIZE_IN_UNITS]u]\v'.3m'\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]\v'-.3m'\s[\En[#SUP_PT_SIZE]u]\E*[EXT_FOR_SUP] +\# +.ds EXTSUPX \s[\En[#PT_SIZE_IN_UNITS]u]\v'.3m'\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 with 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'\Es0\R'#PT_SIZE_IN_UNITS \En[.ps]'\H'\En[#PT_SIZE_IN_UNITS]u' +.ds EXTX \ER'#EXTEND 0'\Es0\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 +\# --- +\# *Argments: +\# "<string of text with padding markers inserted>" +\# *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. # is equivalent to CompuGraphic's old <IS>. +\# *Notes: +\# String tabs may be marked off during PAD. +\# +.MAC PAD END +. if !d$PAD_MARKER \{ .ds $PAD_MARKER # \} +. char \\*[$PAD_MARKER] \R'#PAD_COUNT \En[#PAD_COUNT]+1' +. ds $PAD_STRING \\$1 +. as $PAD_STRING \Ekp +. di PAD_STRING +\\*[$PAD_STRING] +. br +. di +. char \\*[$PAD_MARKER] \R'#SPACE_TO_END \En(.l-\Enp'\R'#PAD_SPACE \En[#SPACE_TO_END]/\En[#PAD_COUNT]' +. di PAD_STRING +\\*[$PAD_STRING] +. br +. di +. char \\*[$PAD_MARKER] \h'\En[#PAD_SPACE]u' +. ie \\n[#SILENT] \{\ +. SILENT +\\*[$PAD_STRING] +. br +. SILENT OFF +. \} +. el \{\ +\\*[$PAD_STRING] +. br +. \} +. rr #PAD_COUNT +. rr #SPACE_TO_END +. rr #PAD_SPACE +. rm $PAD_STRING +. rm PAD_STRING +. rchar # +.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 +\# +\# +\# 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 put a strain on on resource-challenged systems. +\# +\# 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 #IGNORE \{ .return \} +. br +. if \\n[#DOCS] \{\ +. if \\n[#PRINT_STYLE]=1 \{ .return \} +. if \\n[#PRINT_STYLE]=2 \{\ +. if \\n[#PP_STYLE]=2 \{ .return \} +. if \\n[#PP]>1 \{ .return \} +. ti 0 +. \} +. \} +. ds $DROPCAP \\$1 +. nr #DC_LINES \\$2-1 +. ds $RESTORE_COND \\*[$COND_PERCENT] +. ds $RESTORE_EXT \\*[$EXT_PERCENT] +. if '\\$3'COND' \{ .CONDENSE \\$4 \} +. if '\\$3'EXT' \{ .EXTEND \\$4 \} +. if !r#DC_GUT \{ .nr #DC_GUT (3p) \} +. ds $RESTORE_FAM \\n[.fam] +. nr #RESTORE_FT \\n(.f +. 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 \\n(.f \} +. 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 \} +. mk x +. sp \\n[#DC_LINES]v +. ie '\\$3'COND' \{ .PRINT \\*[COND]\\*[$DROPCAP]\\*[CONDX] \} +. el \{ .PRINT \\*[$DROPCAP] \} +. if '\\$3'COND' \{ \E*[COND] \} +. if '\\$3'EXT' \{ \E*[EXT] \} +. ie \\n(.i \{ .in +\w'\\*[$DROPCAP]'u+\\n[#DC_GUT]u \} +. el \{ .in \w'\\*[$DROPCAP]'u+\\n[#DC_GUT]u \} +. if '\\$3'COND' \{ \E*[CONDX]\c \} +. if '\\$3'EXT' \{ \E*[EXTX]\c \} +. rt \\nxu +. FAM \\*[$RESTORE_FAM] +. FT \\n[#RESTORE_FT] +. ps \\n[#RESTORE_PT_SIZE]u +. CONDENSE \\*[$RESTORE_COND] +. EXTEND \\*[$RESTORE_EXT] +. ie \\n(.u \{ .wh \\n(.du+\\n[#DC_HEIGHT]u-1v DROPCAP_OFF \} +. el \{ .wh \\n(.du+\\n[#DC_HEIGHT]u DROPCAP_OFF \} +. rm $DROPCAP +. rr #DC_LINES +. rm $RESTORE_COND +. rm $RESTORE_EXT +. rm $RESTORE_FAM +. rr #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 +.END +\# +\# +\# ===================================================================== +\# +\# +++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. +\# +\# Because the user supplied value requires a literal + or - sign, +\# the macro argument is stored in a string. +\# +\# \n[.sss] holds the current sentence space value. +\# +.MAC WS END +. ds $WS_CONSTANT 12 +. ds $WS_VAR \\$1 +. ie '\\$1'DEFAULT' \{ .ds $WS_VAR +0 \} +. el \{ .ds $WS (\\*[$WS_CONSTANT]\\*[$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 +. ie '\\$1'0' \{ .ss \\n[.ss] (\\n[.ss]-\\n[.ss]) \} +. el \{\ +. ie '\\$1'DEFAULT' \{ .ss \\n[.ss] \} +. el \{\ +. ds $SS_VAR \\$1 +. ss \\n[.ss] (0\\*[$SS_VAR]) +. \} +. \} +.END +\# +\# +\# ===================================================================== +\# +\# +++INDENTS+++ +\# +\# There are five styles of indents: left, right, both, temporary, +\# and hanging. Each is set/invoked with a different macro. +\# Indent macros begin with the letter "I", hence .IL means "indent left," +\# .IR means "indent right," and so on. +\# +\# The first time any of the indent macros is used, it requires an +\# argument--the size of the indent in ipPcm. The size may also +\# be entered using the \w'#' function--very useful for numbered +\# lists using HI). The unit of measure is required. Subsequent +\# invocations don't require the argument; the indent measure remains the +\# same until it's changed by invoking the macro with an argument again. +\# +\# If no indents are in effect, the arguments passed to indent macros are +\# measured from the left and right margins of the page. If a left indent +\# or a right indent is already in effect, the arguments passed to +\# the indent macros are calculated from the current values; in other words, +\# the arguments are additive. If you quit an indent and later return +\# to it, its value will be the value last in effect, unless you pass +\# it an argument. If you do pass an argument, it is added to the last +\# value in effect, unless you cleared the indent with one of +\# .I<LRB>X macros. +\# +\# Example +\# ------- +\# +\# .IL 2P +\# ...some text... +\# .IL 2P +\# ...some text... +\# .IX +\# ...some text... +\# .IL +\# ...some text... +\# +\# The first .IL 2P indents text 2P from the left margin. The second +\# .IL 2P indents text by an additional 2P, i.e. 4P from the left margin. +\# .IX turns the indent off. The last .IL (which has no argument) +\# takes its value from the total of all arguments passed to .IL (in +\# this case, 2P and 2P), therefore it indents 2P+2P from the left +\# margin, i.e. 4P. If you wanted the last .IL to indent just 2P, +\# you'd either have to reset the .IL prior to .IX (.IL -2P), or pass +\# the last .IL the argument 2P. +\# +\# To reverse the sense of an indent added to an indent, you may use +\# negative values. +\# +\# Indents can be turned off individually with ILX, IRX, and IBX. +\# LEFT and RIGHT indents may be combined and manipulated +\# separately, (e.g. you can have an IL of 2P and an IR of 4P +\# operative at the same time, and then change, say, the IL to +\# 4P--thereby left indenting 6P--while the IR remains at 4P. +\# +\# IB automatically turns off IL and IR. They have to be reinvoked +\# again when needed. IL and IR automatically turn IB off; it, too, +\# has to be reinvoked with needed. +\# +\# All indents can be turned off at once with IX. The ILX, IRX, IBX, +\# and IX macros simply turn the indents off; the values stored in +\# the respective indent macros (IL, IR, IB) remain in effect. If +\# the user wishes to clear the values, the I<LRB>X macros should be +\# invoked with the single argument CLEAR. IX CLEAR clears out +\# the values stored for all indent styles. +\# +\# Indents *must* be turned off before settting string tabs +\# inside PAD. Generally, in order not to get confused, it's a +\# good idea to turn all indents off before setting any tabs. +\# +\# TI and HI are special cases. There's no need to turn them off, +\# since they affect only one line--the first after their +\# invocation. Like the other indent styles, the first time +\# they're invoked, they require a value in iPpcm; each subsequent +\# invocation without an argument will use the same value. To +\# change the value, simply pass a new value. Values for TI and HI +\# are *not* additive. +\# +\# HI presupposes that you already have a left or both indent +\# on. HI will never hang a line outside the left margin of a +\# document. In other words, you must have IL or IB on before you +\# can use HI. +\# +\# 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(.lu-\\n[#L_INDENT]u +. \} +. el \{\ +. br +. nr #L_INDENT +(\\$1) +. in \\n[#L_INDENT]u +. ta \\n(.lu-\\n[#L_INDENT]u +. \} +.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(.lu-\\n[#R_INDENT]u +. ta \\n(.lu-\\n[#L_INDENT]u +. \} +. el \{\ +. ll \\n[#L_LENGTH]u-\\n[#R_INDENT]u +. ta \\n(.lu-\\n[#L_INDENT]u +. \} +. \} +. el \{\ +. br +. nr #R_INDENT +(\\$1) +. ie \\n[#TAB_ACTIVE] \{\ +. ll \\n(.lu-\\n[#R_INDENT]u +. ta \\n(.lu-\\n[#L_INDENT]u +. \} +. el \{\ +. ll \\n[#L_LENGTH]u-\\n[#R_INDENT]u +. ta \\n(.lu-\\n[#L_INDENT]u +. \} +. \} +.END +\# +\# +\# +++INDENT BOTH+++ +\# +.MAC IB END +. 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'' \{\ +. br +. in \\n[#BL_INDENT]u +. ie \\n[#TAB_ACTIVE] \{\ +. ll \\n(.lu-\\n[#BR_INDENT]u +. ta \\n(.lu-\\n[#BR_INDENT]u +. \} +. el \{\ +. ll \\n[#L_LENGTH]u-\\n[#BR_INDENT]u +. ta \\n(.lu-\\n[#BR_INDENT]u +. \} +. \} +. el \{\ +. br +. nr #BL_INDENT (\\n[#INDENT]+\\$1) +. ie \\n[#NUM_ARGS]=2 \{ .nr #BR_INDENT +(\\$2) \} +. el \{ .nr #BR_INDENT \\n[#BL_INDENT] \} +. ie \\n[#TAB_ACTIVE] \{\ +. in \\n[#BL_INDENT]u +. ll \\n(.lu-\\n[#BR_INDENT]u +. ta \\n(.lu-\\n[#BL_INDENT]u +. \} +. el \{\ +. in \\n[#BL_INDENT]u +. ll \\n[#L_LENGTH]u-\\n[#BR_INDENT]u +. ta \\n(.lu-\\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 +. br +. in 0 +. rr #INDENT_LEFT_ACTIVE +. if '\\$1'CLEAR' \{ +. rr #L_INDENT +. rr #INDENT_STYLE_LEFT +. \} +.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(.lu +. \} +. el \{\ +. ll \\n[#L_LENGTH]u +. ta \\n(.lu +. \} +. \} +. if '\\$1'CLEAR' \{\ +. rr #R_INDENT +. rr #INDENT_STYLE_RIGHT +. \} +.END +\# +\# +.MAC IBX END +. br +. in 0 +. rr #INDENT_BOTH_ACTIVE +. ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \} +. el \{\ +. ie \\n[#COLUMNS] \{\ +. ll \\n[#COL_L_LENGTH]u +. ta \\n(.lu +. \} +. el \{\ +. ll \\n[#L_LENGTH]u +. ta \\n(.lu +. \} +. \} +. if '\\$1'CLEAR' \{\ +. rr #BL_INDENT +. rr #BR_INDENT +. rr #INDENT_STYLE_BOTH +. \} +.END +\# +\# +.MAC IX END +. br +. in 0 +. rr #INDENT_LEFT_ACTIVE +. rr #INDENT_RIGHT_ACTIVE +. rr #INDENT_BOTH_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(.lu +. \} +. el \{\ +. ll \\n[#L_LENGTH]u +. ta \\n(.lu +. \} +. \} +. \} +. 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(.lu +. \} +. el \{\ +. ll \\n[#L_LENGTH]u +. ta \\n(.lu +. \} +. \} +. \} +. 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(.lu +. \} +. el \{\ +. ll \\n[#L_LENGTH]u +. ta \\n(.lu +. \} +. \} +. \} +. 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(.lu +. \} +. el \{\ +. ll \\n[#L_LENGTH]u +. ta \\n(.lu +. \} +. \} +. \} +. 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 +. \} +. rr #INDENT_ACTIVE +.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 +. sp |\\ncu +.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 +. ie '\\$1'' \{\ +. TQ +. sp |\\n(.hu +. \} +. el \{\ +. nr #MCX_ALD (\\$1) +. TQ +. ie \\n[#MCX_ALD]=0 \{ .sp |\\n(.hu-1v \} +. el \{ .sp |\\n(.hu+\\n[#MCX_ALD]u \} +. rr #MCX_ALD (\\$1) +. \} +.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 enloses +\# the offending lines in TRAP OFF/TRAP. +\# +.MAC TRAP END +. ie '\\$1'' \{ .vpt 1 \} +. el \{ .vpt 0 \} +.END +\# +\# +\# SILENT +\# ------ +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Diverts text so that it doesn't print, or turns to 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 +\# ----- +\# *Arguments: +\# <anything> +\# *Function: +\# Prints anything. A macro that helps keep my code nicely indented. +\# +.MAC PRINT END +\\$* +.END +\# +\# +\# CAPS +\# ---- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Converts text to caps, or, if OFF, reverts to normal caps/lc. +\# +.MAC CAPS END +. ie '\\$1'' \{\ +. tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ +. tr àÀâÂáÁäÄåÅèÈêÊéÉëËìÌîÎíÍïÏòÒôÔóÓöÖùÙûÛúÚüÜ +. tr çÇñÑ +. nr #CAPS_ON 1 +. \} +. el \{\ +. tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz +. tr ààââááääååèèêêééëëììîîííïïòòôôóóööùùûûúúüü +. tr ççññ +. rr #CAPS_ON +. \} +.END +\# +\# 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 +. di TYPESIZE +E\\R'#CAP_HEIGHT \\n[.cht]' +e\\R'#X_HEIGHT \\n[.cht]' +y\\R'#DESCENDER \\n[.cdp]' +. br +. di +.END +\# +\# ===================================================================== +\# +\# +++TYPESETTING ALIASES+++ +\# +.ALIAS CENTRE CENTER +.ALIAS COMMENT SILENT +.ALIAS CONDENSE CONDENSE_OR_EXTEND +.ALIAS EXTEND CONDENSE_OR_EXTEND +.ALIAS FAM FAMILY +.ALIAS HYPHENATE HY +.ALIAS HYPHENATION HY +.ALIAS HYSET HY_SET +.ALIAS LIG LIGATURES +.ALIAS PADMARKER PAD_MARKER +.ALIAS TABSET TAB_SET +.ALIAS TB TAB +.ALIAS TS TAB_SET +.ALIAS UNDERSCORE_2 UNDERSCORE2 +\# +\# +\# ==================================================================== +\# +\# DOCUMENT PROCESSING MACROS, STRINGS AND ALIASES +\# =============================================== +\# +\# +++PAGE DIMENSIONS+++ +\# +\# PAPER SIZE +\# ---------- +\# *Arguments: +\# LETTER | LEGAL | STATEMENT | TABLOID | LEDGER | FOLIO | QUARTO | 10x14 | EXECUTIVE | A3 | A4 | A5 | B4 | B5 +\# *Function: +\# Sets up margins for different paper sizes. +\# +.MAC PAPER END +. 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 !r#L_MARGIN \{ .L_MARGIN \\n(.o \} +. if !r#R_MARGIN \{ .R_MARGIN 1i \} +.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 !d$PAPER \{ .PAPER LETTER \} +. if '\\$1'TYPEWRITE' \{\ +. nr #PRINT_STYLE 1 +. if !\\n[#DOC_TYPE]=4 \{ .L_MARGIN 6P \} +. if !\\n[#DOC_TYPE]=4 \{ .R_MARGIN 6P \} +. fam C +. ft R +. ps 12 +. ie '\\$2'SINGLESPACE' \{\ +. nr #SINGLE_SPACE 1 +. vs 12 +. \} +. el \{ .vs 24 \} +. QUAD L +. HY OFF +. SMARTQUOTES OFF +. if !\\n[#PP_INDENT] \{\ +. in 3P \"Set indent +. nr #PP_INDENT \\n(.i \"Read into #PP_INDENT +. in 0 \"Remove indent +. \} +. HDRFTR_RIGHT_CAPS +. nr #BOLDER_UNITS 0 +. nr #CONDENSE 0 +. nr #EXTEND 0 +. rm IT +. rm BD +. rm BDI +. rm PREV +. UNDERLINE_SLANT +. UNDERLINE_ITALIC +. UNDERLINE_QUOTES +. nr #IGNORE_COLUMNS 1 +. \} +. if '\\$1'TYPESET' \{\ +. nr #PRINT_STYLE 2 +. if !\\n[#DOC_TYPE]=4 \{ .L_MARGIN 6P \} +. if !\\n[#DOC_TYPE]=4 \{ .R_MARGIN 6P \} +. FAMILY T +. FT R +. if !\\n[#DOC_TYPE]=4 \{ .PS 12.5 \} +. if !\\n[#DOC_TYPE]=4 \{ .LS 16 \} +. 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 +. \} +.END +\# +\# +\# Macros to control behaviour of PRINTSTYLE TYPEWRITE +\# +\# 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 mututally 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 \EfR +. ds IT \EfI +. ds PREV \EfR +. \} +.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 mututally 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 \E*[ULX] +. \} +.END +\# +\# +\# UNDERLINE SLANT +\# --------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Instructs TYPEWRITE to underline occurences 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 mututally 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 !r#DRAFT \{ .DRAFT 1 \} +. \} +. if '\\*[$COPY_STYLE]'FINAL' \{ .nr #COPY_STYLE 2 \} +. if !d$CHAPTER_STRING \{ .CHAPTER_STRING "Chapter" \} +. if !d$DRAFT_STRING \{ .DRAFT_STRING "Draft" \} +. if !d$REVISION_STRING \{ .REVISION_STRING "Rev." \} +\# Default +. if \\n[#DOC_TYPE]=1 \{\ +. ie \\n[#COPY_STYLE]=1 \{\ +. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\ +. ds $HDRFTR_CENTER \ + \\*[$DRAFT_STRING] \\n[#DRAFT], \ + \\*[$REVISION_STRING] \\n[#REVISION] +. PAGENUM_STYLE roman +. \} +. \} +. el \{\ +. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{ .ds $HDRFTR_CENTER \} +. PAGENUM_STYLE DIGIT +. \} +. \} +\# Chapter +. if \\n[#DOC_TYPE]=2 \{\ +. ie \\n[#COPY_STYLE]=1 \{\ +. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\ +. ds $HDRFTR_CENTER \ + \\*[$CHAPTER_STRING] \\*[$CHAPTER], \ + \\*[$DRAFT_STRING] \\n[#DRAFT], \ + \\*[$REVISION_STRING] \\n[#REVISION] +. PAGENUM_STYLE roman +. \} +. \} +. el \{\ +. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\ +. ds $HDRFTR_CENTER \\*[$CHAPTER_STRING] \\*[$CHAPTER] +. PAGENUM_STYLE DIGIT +. \} +. \} +. \} +\# Named +. if \\n[#DOC_TYPE]=3 \{\ +. ie \\n[#COPY_STYLE]=1 \{\ +. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\ +. ds $HDRFTR_CENTER \ + \\*[$DOC_TYPE], \ + \\*[$DRAFT_STRING] \\n[#DRAFT], \ + \\*[$REVISION_STRING] \\n[#REVISION] +. PAGENUM_STYLE roman +. \} +. \} +. el \{\ +. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{ +. ds $HDRFTR_CENTER \\*[$DOC_TYPE] +. PAGENUM_STYLE DIGIT +. \} +. \} +. \} +.END +\# +\# ==================================================================== +\# +\# +++COLLECT DOC INFO -- STRINGS AND NUMBER REGISTERS+++ +\# +\# *Arguments: +\# various string/register arguments +\# *Function: +\# Collect information about documents. +\# +.MAC TITLE END \"Document title +. ds $TITLE \\$1 +.END +\# +\# +.MAC SUBTITLE END \"Document sub-title +. ds $SUBTITLE \\$1 +.END +\# +\# +.MAC CHAPTER END \"If document is a chapter, the chapter number +. ds $CHAPTER \\$1 +.END +\# +\# +.MAC DRAFT END \"Draft number +. nr #DRAFT \\$1 +.END +\# +\# +.MAC REVISION END \"Revision number +. nr #REVISION \\$1 +.END +\# +\# +.MAC AUTHOR END \"Author. Use "..." with this macro. +. nr #AUTHOR_NUM -1 1 +. while \\n[#NUM_ARGS]>\\n[#AUTHOR_NUM] \{\ +. ds $AUTHOR_\\n+[#AUTHOR_NUM] \\$\\n[#AUTHOR_NUM] +. \} +. nr #NUM_AUTHORS \\n[#NUM_ARGS]%2 \"Use mod 2 to test if odd or even # of authors +. ie \\n[#NUM_AUTHORS]=1 \{ .nr #AUTHOR_LINES 0 \} +. el \{ .nr #AUTHOR_LINES 1 \} +.END +\# +\# +.MAC PAGENUMBER END \"Page # that appears on page one. +. nr #n%_AT_PAGENUM_SET \\n% +. 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 +\# +\# ==================================================================== +\# +\# +++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 +\# +.MAC DOCTYPE END +. if '\\$1'DEFAULT' \{\ +. nr #DOC_TYPE 1 +. \} +. if '\\$1'CHAPTER' \{\ +. nr #DOC_TYPE 2 +. \} +. if '\\$1'NAMED' \{\ +. 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 +. LS 13.5 +. 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 ".../\E*[$SUITE] +. FOOTER_ON_FIRST_PAGE +. em ALL_DONE +. \} +.END +\# +\# +++LETTER MACROS+++ +\# +\# DATE +\# ---- +\# *Arguments: +\# <date string> +\# *Function: +\# Stores date string in string $DATE. +\# +.MAC DATE END +. nr #DATE 1 +. di DATE +. RIGHT +.END +\# +\# +\# TO +\# -- +\# *Arguments: +\# <none> +\# *Function: +\# Stores "to" info in diversion TO_ADDRESS. +\# +.MAC TO END +. if !'\\n(.z'' \{ .di \} +. nr #TO 1 +. di TO_ADDRESS +. LEFT +.END +\# +\# +\# FROM +\# ---- +\# *Arguments: +\# <none> +\# *Function: +\# Stores "from" info in diversion FROM_ADDRESS. +\# +.MAC FROM END +. if !'\\n(.z'' \{ .di \} +. nr #FROM 1 +. di FROM_ADDRESS +. LEFT +.END +\# +\# +\# GREETING +\# -------- +\# *Arguments: +\# <greeting string> +\# *Function: +\# Stores greeting in string $GREETING. +\# +.MAC GREETING END +. if !'\\n(.z'' \{ .di \} +. nr #GREETING 1 +. di GREETING +. LEFT +.END +\# +\# +\# CLOSING +\# ------- +\# *Arguments: +\# <closing string> +\# *Function: +\# Stores greeting in string $CLOSING. +\# +.MAC CLOSING END +. br +. nr #CLOSING 1 +. di CLOSING +.END +\# +\# +\# NO SUITE +\# -------- +\# *Arguments: +\# <none> +\# *Function: +\# Redefines $SUITE to blank so that a suite number doesn't +\# appear at the bottom of letter pages. +\# +.MAC NO_SUITE END +. FOOTER_RIGHT "" +.END +\# +\# ==================================================================== +\# +\# +++DEFAULTS+++ +\# +\# 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 !d$PAPER \{ .PAPER LETTER \} +. if !\\n[#DOC_TYPE] \{ .DOCTYPE DEFAULT \} +. if !\\n[#COPY_STYLE] \{ .COPYSTYLE FINAL \} +. 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 \\n[#FOOTERS_ON] \{\ +. HEADERS OFF +. if \\n[#PAGE_NUM_POS_SET]=0 \{ .PAGENUM_POS TOP CENTER \} +. \} +. if !r#HEADER_MARGIN \{ .HEADER_MARGIN 4P+6p \} +. if !r#HEADER_GAP \{ .HEADER_GAP 3P \} +. if \\n[#FOOTERS_ON] \{\ +. if \\n[#PAGINATE]=0 \{\ +. if !r#T_MARGIN \{ .T_MARGIN 6P \} +. \} +. \} +. if \\n[#HEADERS_ON]=0 \{\ +. if \\n[#FOOTERS_ON]=0 \{\ +. if !r#T_MARGIN \{ .T_MARGIN 6P \} +. \} +. \} +. if !r#T_MARGIN \{ .T_MARGIN \\n[#HEADER_MARGIN]+\\n[#HEADER_GAP] \} +. if !r#DOCHEADER_ADVANCE \{ .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 !r#HDRFTR_RULE_GAP \{\ +. if \\n[#HEADERS_ON] \{ .HDRFTR_RULE_GAP 4p \} +. if \\n[#FOOTERS_ON] \{ .HDRFTR_RULE_GAP 4p \} +. \} +. if !r#HDRFTR_RULE \{ .HDRFTR_RULE \} +. if !r#PAGE_NUM_SET \{ .PAGENUMBER 1 \} +. ie r#ADJ_DOC_LEAD \{ . \} +. el \{ .DOC_LEAD_ADJUST \} +\# 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]) +. ds $DOC_FAM \\*[$FAMILY] +. nr #DOC_PT_SIZE \\n[#PT_SIZE] +. nr #DOC_LEAD \\n[#LEAD] +. ds $DOC_QUAD \\*[$QUAD_VALUE] +. ds $PP_FT \\*[$FONT] +\# Counters +. nr #PP 0 +. nr #FN_NUMBER 0 1 +. nr #FN_COUNT_FOR_COLS 0 1 +. RESET_HEAD_NUMBER +. RESET_SUBHEAD_NUMBER +. RESET_PARAHEAD_NUMBER +\# General style defaults for both PRINTSTYLEs +. nr #PP_STYLE 1 +. PARA_INDENT \\n[#PP_INDENT]u +. if !d$HDRFTR_FAM \{ .HDRFTR_FAMILY \\*[$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 \{ .PAGENUM_HYPHENS \} +. if !d$HEAD_QUAD \{ .HEAD_QUAD CENTER \} +. if !r#HEAD_CAPS \{ .HEAD_CAPS \} +. if !r#HEAD_UNDERLINE \{ .HEAD_UNDERLINE \} +. if !d$SH_QUAD \{ .SUBHEAD_QUAD LEFT \} +. if !r#HDRFTR_RIGHT_CAPS \{ .HDRFTR_RIGHT_CAPS \} +. if \\n[#HDRFTR_RIGHT_CAPS]=0 \{\ +. if !d$HDRFTR_RIGHT_SIZE_CHANGE \{ .HDRFTR_RIGHT_SIZE +0 \} +. \} +. 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 !r#FN_MARKER_STYLE \{ .FOOTNOTE_MARKER_STYLE STAR \} +\# String defaults for both PRINTSTYLEs +. if !d$ATTRIBUTE_STRING \{ .ATTRIBUTE_STRING "by" \} +. if \\n[#USER_DEF_HDRFTR_LEFT]=0 \{ .ds $HDRFTR_LEFT \\*[$AUTHOR_1] \} +. rr #USER_DEF_HDRFTR_LEFT +. if \\n[#USER_DEF_HDRFTR_RIGHT]=0 \{ .ds $HDRFTR_RIGHT \\*[$TITLE] \} +. rr #USER_DEF_HDRFTR_RIGHT +. if !d$FINIS_STRING \{ .FINIS_STRING "END" \} +\# Defaults for printstyle TYPEWRITE +. if \\n[#PRINT_STYLE]=1 \{\ +. if \\n[#UNDERLINE_QUOTES]=1 \{ .UNDERLINE_QUOTES \} +. if \\n[#UNDERLINE_QUOTES]=0 \{ .UNDERLINE_QUOTES OFF \} +. if !r#Q_OFFSET_VALUE \{ .QUOTE_INDENT 2 \} +. if !r#EPI_OFFSET_VALUE \{ .EPIGRAPH_INDENT 2 \} +. if !d$LINEBREAK_CHAR \{ .LINEBREAK_CHAR * 3 2p \} +. if !d$FN_SIZE_CHANGE \{ .FOOTNOTE_SIZE +0 \} +. if !r#FN_RULE_LENGTH \{ .FOOTNOTE_RULE_LENGTH 2i \} +. if !r#FN_RULE_ADJ \{ .FOOTNOTE_RULE_ADJ 6p \} +. if !r#SLANT_MEANS_SLANT \{\ +. ie \\n[#UNDERLINE_SLANT]=1 \{ .UNDERLINE_SLANT \} +. el \{ .UNDERLINE_SLANT OFF \} +. \} +. if !r#PH_INDENT \{ .PARAHEAD_INDENT \\n[#PP_INDENT]u/2u \} +. \} +\# Defaults for printstyle TYPESET +. if \\n[#PRINT_STYLE]=2 \{\ +. if !#DOCHEADER_LEAD \{ .DOCHEADER_LEAD +0 \} +. if !d$TITLE_FAM \{ .TITLE_FAMILY \\*[$DOC_FAM] \} +. if !d$TITLE_FT \{ .TITLE_FONT B \} +. if !d$TITLE_SIZE_CHANGE \{\ +. ie \\n[#DOC_TYPE]=2 \{ .TITLE_SIZE +4 \} +. el \{ .TITLE_SIZE +3.5 \} +. \} +. if !d$SUBTITLE_FAM \{ .SUBTITLE_FAMILY \\*[$DOC_FAM] \} +. if !d$SUBTITLE_FT \{ .SUBTITLE_FONT R \} +. if !d$SUBTITLE_SIZE_CHANGE \{ .SUBTITLE_SIZE +0 \} +. if !d$AUTHOR_FAM \{ .AUTHOR_FAMILY \\*[$DOC_FAM] \} +. if !d$AUTHOR_FT \{ .AUTHOR_FONT I \} +. if !d$AUTHOR_SIZE_CHANGE \{ .AUTHOR_SIZE +0 \} +. if !d$DOCTYPE_FAM \{ .DOCTYPE_FAMILY \\*[$DOC_FAM] \} +. if !d$DOCTYPE_FT \{ .DOCTYPE_FONT BI \} +. if !d$DOCTYPE_SIZE_CHANGE \{ .DOCTYPE_SIZE +3 \} +. 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 \} +. if \\n[#HDRFTR_RIGHT_CAPS] \{\ +. if !d$HDRFTR_RIGHT_SIZE_CHANGE \{ .HDRFTR_RIGHT_SIZE -2 \} +. \} +. if !d$HDRFTR_RIGHT_SIZE_CHANGE \{ .HDRFTR_RIGHT_SIZE -.5 \} +. if !r#FN_RULE_LENGTH \{ .FOOTNOTE_RULE_LENGTH 4P \} +. if !r#FN_RULE_ADJ \{ .FOOTNOTE_RULE_ADJ 3p \} +. if !d$HEAD_FAM \{ .HEAD_FAMILY \\*[$DOC_FAM] \} +. if !d$HEAD_FT \{ .HEAD_FONT B \} +. if !d$HEAD_SIZE_CHANGE \{ .HEAD_SIZE +1 \} +. if !r#HEAD_SPACE \{ .HEAD_SPACE \} +. if !d$SH_FAM \{ .SUBHEAD_FAMILY \\*[$DOC_FAM] \} +. if !d$SH_FT \{ .SUBHEAD_FONT B \} +. if !d$SH_SIZE_CHANGE \{ .SUBHEAD_SIZE +.5 \} +. if !d$PH_FAM \{ .PARAHEAD_FAMILY \\*[$DOC_FAM] \} +. if !d$PH_FT \{ .PARAHEAD_FONT BI \} +. if !d$PH_SIZE_CHANGE \{ .PARAHEAD_SIZE -.25 \} +. if !r#PH_INDENT \{ .PARAHEAD_INDENT \\n[#PP_INDENT]u/2u \} +. 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 \{ .QUOTE_INDENT 3 \} +. 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 !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 \{ .EPIGRAPH_INDENT 3 \} +. if !d$LINEBREAK_CHAR \{ .LINEBREAK_CHAR * 3 3p \} +. if !d$FN_SIZE_CHANGE \{ .FOOTNOTE_SIZE -2 \} +. if !r#FN_AUTOLEAD \{ .FOOTNOTE_AUTOLEAD 2 \} +. \} +. TRAPS +. if \\n[#PRINT_STYLE]=1 \{ .nr #IGNORE 1 \} +.END +\# +\# ==================================================================== +\# +\# +++START THE DOCUMENT+++ +\# +\# THE START MACRO +\# --------------- +\# *Arguments: +\# <none> +\# *Function: +\# Reads in default document style parameters and any parameter +\# 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 +. if !\\n[#PRINT_STYLE] \{\ +. PRINTSTYLE TYPEWRITE +. PRINT \& +. po 6P +. ll 39P +. ta \\n(.lu +. sp |1i-1v +. CENTER +. PRINT "You neglected to enter a PRINTSTYLE" +. fl +. ab PRINTSTYLE missing +. \} +. nr #DOCS 1 +. DEFAULTS +. if \\n[#COLLATE] \{\ +. COPYSTYLE \\*[$COPY_STYLE] +. nr #HEADERS_ON \\n[#HEADER_STATE] +. if \\n[#PAGE_NUM_V_POS]=1 \{ .nr #PAGINATE \\n[#PAGINATION_STATE] \} +. sp |\\n[#HEADER_MARGIN]u +. PRINT \& +. \} +\# +. if \\n[#PRINT_PAGENUM_ON_PAGE_1] \{\ +. sp |\\n[#HEADER_MARGIN]u +. PRINT_PAGE_NUMBER +. \} +. rr #COLLATE +. rr #PAGINATION_STATE +\# +. ie \\n[#DOC_HEADER]=0 \{\ +. PRINT \& +. if \\n[#DOC_TYPE]=4 \{\ +. if !'\\n(.z'' \{ .di \} +. \} +. ie r#ADVANCE_FROM_TOP \{ .sp |\\n[#ADVANCE_FROM_TOP]u-1v \} +. el \{ .sp |\\n[#T_MARGIN]u-1v \} +. PP +. nr #PP 0 +. rr #DOC_HEADER +. if r#ADVANCE_FROM_TOP \{ .rr #ADVANCE_FROM_TOP \} +. \} +. el \{\ +. nr #DOCHEADER_LINES 0 1 +. if \\n[#PRINT_STYLE]=2 \{ .LS \\n[#DOC_LEAD]u+\\n[#DOCHEADER_LEAD_ADJ]u \} +. nr #DOCHEADER_LEAD \\n[#LEAD] +\# Default +. if \\n[#DOC_TYPE]=1 \{\ +. PRINT \& +. sp |\\n[#DOCHEADER_ADVANCE]u-1v +. ev TITLE +. CENTER +. L_MARGIN \\n[#DOC_L_MARGIN]u +. LL \\n[#DOC_L_LENGTH]u +. ta \\n(.lu +. if \\n[#PRINT_STYLE]=1 \{\ +. fam C +. ft R +. ps 12 +. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u*2u \} +. el \{ .vs \\n[#DOC_LEAD]u \} +. CAPS +. if !'\\*[$TITLE]'' \{ .UNDERSCORE "\\*[$TITLE]\} +. CAPS OFF +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. FAMILY \\*[$TITLE_FAM] +. FT \\*[$TITLE_FT] +. PS \\n[#DOC_PT_SIZE]u\\*[$TITLE_SIZE_CHANGE] +. LS \\n[#DOCHEADER_LEAD]u +. PRINT \\*[$TITLE] +. \\n+[#DOCHEADER_LINES] +. CAPS OFF +. \} +. ev +. ev SUBTITLE +. CENTER +. L_MARGIN \\n[#DOC_L_MARGIN]u +. LL \\n[#DOC_L_LENGTH]u +. ta \\n(.lu +. if !'\\*[$SUBTITLE]'' \{\ +. if \\n[#PRINT_STYLE]=1 \{\ +. fam C +. ft R +. ps 12 +. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u*2u \} +. el \{ .vs \\n[#DOC_LEAD]u \} +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. FAMILY \\*[$SUBTITLE_FAM] +. FT \\*[$SUBTITLE_FT] +. PS \\n[#DOC_PT_SIZE]u\\*[$SUBTITLE_SIZE_CHANGE] +. LS \\n[#DOCHEADER_LEAD]u +. \} +. PRINT \\*[$SUBTITLE] +. \\n+[#DOCHEADER_LINES] +. \} +. if '\\*[$SUBTITLE]'' \{\ +. if \\n[#PRINT_STYLE]=1 \{\ +. ALD \\n[#DOC_LEAD]u +. \} +. \} +. ev +. ev AUTHOR +. CENTER +. L_MARGIN \\n[#DOC_L_MARGIN]u +. LL \\n[#DOC_L_LENGTH]u +. ta \\n(.lu +. if !'\\*[$AUTHOR_1]'' \{\ +. if \\n[#PRINT_STYLE]=1 \{\ +. fam C +. ft R +. ps 12 +. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u \} +. el \{ .vs \\n[#DOC_LEAD]u/2u \} +. if !d$SUBTITLE \{\ +. ie \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \} +. el \{ .ALD \\n[#DOC_LEAD]u*2u \} +. \} +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. FAMILY \\*[$AUTHOR_FAM] +. FT \\*[$AUTHOR_FT] +. PS \\n[#DOC_PT_SIZE]u\\*[$AUTHOR_SIZE_CHANGE] +. LS \\n[#DOCHEADER_LEAD]u +. \} +. PRINT \\*[$ATTRIBUTE_STRING] +. \\n+[#DOCHEADER_LINES] +. nr #AUTHORS \\n[#AUTHOR_NUM] +. nr #NEXT_AUTHOR 0 1 +. while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\ +. PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]] +. \\n+[#DOCHEADER_LINES] +. \} +. if \\n[#PRINT_STYLE]=1 \{\ +. if \\n[#AUTHOR_LINES]=1 \{ +. ie \\n[#SINGLE_SPACE] \{ .RLD \\n[#DOC_LEAD]u \} +. el \{ .RLD \\n[#DOC_LEAD]u \} +. \} +. \} +. \} +. ev +. \} +\# Chapter +. if \\n[#DOC_TYPE]=2 \{\ +. PRINT \& +. sp |\\n[#DOCHEADER_ADVANCE]u-1v +. ev TITLE +. L_MARGIN \\n[#DOC_L_MARGIN]u +. LL \\n[#DOC_L_LENGTH]u +. ta \\n(.lu +. CENTER +. if \\n[#PRINT_STYLE]=1 \{\ +. fam C +. ft R +. ps 12 +. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u*2u \} +. el \{ .vs \\n[#DOC_LEAD]u \} +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. FAMILY \\*[$TITLE_FAM] +. FT \\*[$TITLE_FT] +. PS \\n[#DOC_PT_SIZE]u\\*[$TITLE_SIZE_CHANGE] +. LS \\n[#DOC_LEAD]u +. \} +. if \\n[#PRINT_STYLE]=1 \{\ +. CAPS +. PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] +. CAPS OFF +. \} +. if \\n[#PRINT_STYLE]=2 \{ .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] \} +. ev +. \} +\# Named +. if \\n[#DOC_TYPE]=3 \{\ +. PRINT \& +. sp |\\n[#DOCHEADER_ADVANCE]u-1v +. ev TITLE +. CENTER +. L_MARGIN \\n[#DOC_L_MARGIN]u +. LL \\n[#DOC_L_LENGTH]u +. ta \\n(.lu +. if \\n[#PRINT_STYLE]=1 \{\ +. fam C +. ft R +. ps 12 +. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u*2u \} +. el \{ .vs \\n[#DOC_LEAD]u \} +. CAPS +. if !'\\*[$TITLE]'' \{ .UNDERSCORE "\\*[$TITLE]\} +. CAPS OFF +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. FAMILY \\*[$TITLE_FAM] +. FT \\*[$TITLE_FT] +. PS \\n[#DOC_PT_SIZE]u\\*[$TITLE_SIZE_CHANGE] +. LS \\n[#DOCHEADER_LEAD]u +. PRINT \\*[$TITLE] +. \\n+[#DOCHEADER_LINES] +. CAPS OFF +. \} +. ev +. ev SUBTITLE +. CENTER +. L_MARGIN \\n[#DOC_L_MARGIN]u +. LL \\n[#DOC_L_LENGTH]u +. ta \\n(.lu +. if !'\\*[$SUBTITLE]'' \{\ +. if \\n[#PRINT_STYLE]=1 \{\ +. fam C +. ft R +. ps 12 +. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u*2u \} +. el \{ .vs \\n[#DOC_LEAD]u \} +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. FAMILY \\*[$SUBTITLE_FAM] +. FT \\*[$SUBTITLE_FT] +. PS \\n[#DOC_PT_SIZE]u\\*[$SUBTITLE_SIZE_CHANGE] +. LS \\n[#DOCHEADER_LEAD]u +. \} +. PRINT \\*[$SUBTITLE] +. \\n+[#DOCHEADER_LINES] +. \} +. if '\\*[$SUBTITLE]'' \{\ +. if \\n[#PRINT_STYLE]=1 \{\ +. ALD \\n[#DOC_LEAD]u +. \} +. \} +. ev +. ev AUTHOR +. CENTER +. L_MARGIN \\n[#DOC_L_MARGIN]u +. LL \\n[#DOC_L_LENGTH]u +. ta \\n(.lu +. if !'\\*[$AUTHOR_1]'' \{\ +. if \\n[#PRINT_STYLE]=1 \{\ +. fam C +. ft R +. ps 12 +. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u \} +. el \{ .vs \\n[#DOC_LEAD]u/2u \} +. if !d$SUBTITLE \{\ +. ie \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \} +. el \{ .ALD \\n[#DOC_LEAD]u*2u \} +. \} +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. FAMILY \\*[$AUTHOR_FAM] +. FT \\*[$AUTHOR_FT] +. PS \\n[#DOC_PT_SIZE]u\\*[$AUTHOR_SIZE_CHANGE] +. LS \\n[#DOCHEADER_LEAD]u +. \} +. PRINT \\*[$ATTRIBUTE_STRING] +. \\n+[#DOCHEADER_LINES] +. nr #AUTHORS \\n[#AUTHOR_NUM] +. nr #NEXT_AUTHOR 0 1 +. while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\ +. PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]] +. \\n+[#DOCHEADER_LINES] +. \} +. if \\n[#PRINT_STYLE]=1 \{\ +. if \\n[#AUTHOR_LINES]=1 \{ +. ie \\n[#SINGLE_SPACE] \{ .RLD \\n[#DOC_LEAD]u \} +. el \{ .RLD \\n[#DOC_LEAD]u \} +. \} +. \} +. \} +. ev +. ev DOCTYPE +. CENTER +. L_MARGIN \\n[#DOC_L_MARGIN]u +. LL \\n[#DOC_L_LENGTH]u +. ta \\n(.lu +. if \\n[#PRINT_STYLE]=1 \{\ +. fam C +. ft R +. ps 12 +. vs \\n[#DOC_LEAD]u +. if '\\*[$AUTHOR_1]'' \{\ +. ie !d$SUBTITLE \{\ +. ie \\n[#SINGLE_SPACE] \{ .RLD \\n[#DOC_LEAD]u*2u \} +. el \{ .RLD \\n[#DOC_LEAD]u \} +. \} +. el \{ +. ie \\n[#SINGLE_SPACE] \{ .RLD \\n[#DOC_LEAD]u*2u \} +. el \{ .RLD \\n[#DOC_LEAD]u \} +. \} +. \} +. ie \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u*2u \} +. el \{ .ALD \\n[#DOC_LEAD]u \} +. UNDERSCORE2 "\\*[$DOC_TYPE] +. if \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \} +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. FAMILY \\*[$DOCTYPE_FAM] +. FT \\*[$DOCTYPE_FT] +. PS \\n[#DOC_PT_SIZE]u\\*[$DOCTYPE_SIZE_CHANGE] +. LS \\n[#DOCHEADER_LEAD]u +. ALD \\n[#DOCHEADER_LEAD]u +. \\n+[#DOCHEADER_LINES] +. UNDERSCORE "\\*[$DOC_TYPE] +. \\n+[#DOCHEADER_LINES] +. \} +. ev +. \} +. if !\\n[#DOC_TYPE]=4 \{\ +. if \\n[#PRINT_STYLE]=2 \{\ +. nr #DEPTH_1 \\n[#DOCHEADER_LINES]*\\n[#DOCHEADER_LEAD] +. nr #DEPTH_2 \\n[#DOCHEADER_LINES]*\\n[#DOC_LEAD] +. ie \\n[#DEPTH_1]<\\n[#DEPTH_2] \{\ +. nr #DOCHEADER_SPACE_ADJ \\n[#DEPTH_2]-\\n[#DEPTH_1] +. \} +. el \{\ +. nr #DOCHEADER_SPACE_ADJ \\n[#DEPTH_1]-\\n[#DEPTH_2] +. \} +. nr #DOCHEADER_EXTRA_SPACE \\n[#DOCHEADER_SPACE_ADJ] \\n[#DOC_LEAD] +. while \\n[#DOCHEADER_EXTRA_SPACE]>\\n[#DOC_LEAD] \{\ +. \\n-[#DOCHEADER_EXTRA_SPACE] +. \} +. if \\n[#DOCHEADER_EXTRA_SPACE]>0 \{\ +. ie \\n[#DOCHEADER_LEAD_ADJ]<0 \{\ +. ALD \\n[#DOCHEADER_EXTRA_SPACE]u +. \} +. el \{ .ALD \\n[#DOC_LEAD]u-\\n[#DOCHEADER_EXTRA_SPACE]u \} +. \} +. \} +. if \\n[#PRINT_STYLE]=1 \{ .ALD \\n[#DOC_LEAD]u \} +. if \\n[#PRINT_STYLE]=2 \{ .ALD \\n[#DOC_LEAD]u*2u \} +. if \\n[#COLUMNS] \{\ +. nr #COL_NUM 0 1 +. nr #L_LENGTH_FOR_EPI \\n[#L_LENGTH] +. po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u +. LL \\n[#COL_L_LENGTH]u +. ta \\n(.lu +. mk dc +. \} +. \} +. \} +. rr #DOCHEADER_LEAD +. rr #DOCHEADER_LEAD_ADJ +. rr #DEPTH_1 +. rr #DEPTH_2 +. rr #DOCHEADER_ADVANCE +. rr #ADVANCE_FROM_TOP +. rr #DOCHEADER_SPACE_ADJ +. rr #DOCHEADER_LINES +. rr #DOCHEADER_EXTRA_SPACE +. rr #AUTHORS +. rr #NEXT_AUTHOR +. rr #AUTHOR_NUM +. rr #NUM_AUTHORS +. nr #START 1 +. nr #START_FOR_FOOTERS 1 +.END +\# +\# ==================================================================== +\# +\# +++MACROS TO CHANGE SOME DEFAULTS+++ +\# +\# DOCUMENT HEADER +\# --------------- +\# *Argument: +\# <none> | <anything> [distance to advance from top of page] +\# *Function: +\# Turns printing of document header on or off. If a second argument +\# in 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 +. ie '\\$1'' \{ .nr #DOC_HEADER 1 \} +. el \{\ +. if \\$2 \{ .nr #ADVANCE_FROM_TOP (\\$2) \} +. nr #DOC_HEADER 0 +. \} +.END +\# +\# +\# DOCUMENT HEADER LEADING +\# ----------------------- +\# *Arguments: +\# <+|- amount by which to in/decrease leading of doc header> +\# *Function: +\# Stores user supplied lead in/decrease in register #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 +. nr #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 +\# +\# +\# TITLE FAMILY +\# ------------ +\# *Argument: +\# <family to use for the document header title> +\# *Function: +\# Creates or modifies string $TITLE_FAM. +\# *Notes: +\# Default is same as running text. +\# +.MAC TITLE_FAMILY END +. ds $TITLE_FAM \\$1 +.END +\# +\# +\# TITLE FONT +\# ---------- +\# *Argument: +\# <font to use for the document header title> +\# *Function: +\# Creates or modifies string $TITLE_FT. +\# *Notes: +\# Default is bold. +\# +.MAC TITLE_FONT END +. ds $TITLE_FT \\$1 +.END +\# +\# +\# TITLE SIZE +\# ---------- +\# *Argument: +\# <+|- number of points by which to in/decrease title at start +\# of the document (relative to running text)> +\# *Function: +\# Creates string $TITLE_SIZE_CHANGE. +\# *Notes: +\# Must be preceded by a +|- sign, with no space afterwards. +\# Fractional point sizes are allowed. +\# Default is +3.5 for printstyle TYPESET DEFAULT | STORY | NAMED; +\# 4 for TYPESET CHAPTER; +0 for TYPEWRITE. +\# +.MAC TITLE_SIZE END +. ds $TITLE_SIZE_CHANGE \\$1 +.END +\# +\# +\# SUBTITLE FAMILY +\# --------------- +\# *Argument: +\# <family to use for the document header title> +\# *Function: +\# Creates or modifies string $SUBTITLE_FAM. +\# *Notes: +\# Default is same as running text. +\# +.MAC SUBTITLE_FAMILY END +. ds $SUBTITLE_FAM \\$1 +.END +\# +\# +\# SUBTITLE FONT +\# ------------- +\# *Argument: +\# <font to use for the document header title> +\# *Function: +\# Creates or modifies string $SUBTITLE_FT. +\# *Notes: +\# Default is same as running text. +\# +.MAC SUBTITLE_FONT END +. ds $SUBTITLE_FT \\$1 +.END +\# +\# +\# SUBTITLE SIZE +\# ------------- +\# *Argument: +\# <+|- number of points by which to in/decrease subtitle at start +\# of the document (relative to running text)> +\# *Function: +\# Creates or modifies string $SUBTITLE_SIZE_CHANGE. +\# *Notes: +\# Must be preceded by a +|- sign with no space afterwards. +\# Fractional point sizes are allowed. +\# Default is +0. +\# +.MAC SUBTITLE_SIZE END +. ds $SUBTITLE_SIZE_CHANGE \\$1 +.END +\# +\# +\# AUTHOR FAMILY +\# ------------- +\# *Argument: +\# <family to use for author in document header> +\# *Function: +\# Creates or modifies string $AUTHOR_FAM. +\# *Notes: +\# Default is same as running text. +\# +.MAC AUTHOR_FAMILY END +. ds $AUTHOR_FAM \\$1 +.END +\# +\# +\# AUTHOR FONT +\# ----------- +\# *Argument: +\# <font to use for author in document header> +\# *Function: +\# Creates or modifies string $AUTHOR_FT. +\# *Notes: +\# Default is italic. +\# +.MAC AUTHOR_FONT END +. ds $AUTHOR_FT \\$1 +.END +\# +\# +\# AUTHOR SIZE +\# ----------- +\# *Argument: +\# <+|- number of points by which to in/decrease author at start +\# of the document> +\# *Function: +\# Creates or modifies string $AUTHOR_SIZE_CHANGE. +\# *Notes: +\# Must be preceded by a +|- sign with no space afterwards. +\# Fractional point sizes are allowed. +\# Default is same as running text. +\# +.MAC AUTHOR_SIZE END +. ds $AUTHOR_SIZE_CHANGE \\$1 +.END +\# +\# +\# DOCTYPE FAMILY +\# -------------- +\# *Argument: +\# <family to use for the document type string> +\# *Function: +\# Creates or modifies string $DOCTYPE_FAM. +\# *Notes: +\# Default is same as running text. +\# +.MAC DOCTYPE_FAMILY END +. ds $DOCTYPE_FAM \\$1 +.END +\# +\# +\# DOCTYPE FONT +\# ------------ +\# *Argument: +\# <font to use for the document type string> +\# *Function: +\# Creates or modifies string $DOCTYPE_FT. +\# *Notes: +\# Default is bold italic. +\# +.MAC DOCTYPE_FONT END +. ds $DOCTYPE_FT \\$1 +.END +\# +\# +\# DOCTYPE SIZE +\# ------------- +\# *Argument: +\# <+|- number of points by which to in/decrease the document +\# type string (relative to running text)> +\# *Function: +\# Creates or modifies string $DOCTYPE_SIZE_CHANGE. +\# *Notes: +\# Must be preceded by a +|- sign with no space afterwards. +\# Fractional point sizes are allowed. +\# Default is +3 for TYPESET; 0 for TYPEWRITE. +\# +.MAC DOCTYPE_SIZE END +. ds $DOCTYPE_SIZE_CHANGE \\$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 +. 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 string $DOC_L_LENGTH. +\# *Notes: +\# Affects EVERYTHING on the page. +\# +.MAC DOC_LINE_LENGTH END +. br +. nr #DOC_L_LENGTH (\\$1) +. LL \\n[#DOC_L_LENGTH]u +. ta \\n(.lu +.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 +. br +. ds $DOC_FAM \\$1 +. FAMILY \\*[$DOC_FAM] +. TITLE_FAMILY \\*[$DOC_FAM] +. SUBTITLE_FAMILY \\*[$DOC_FAM] +. AUTHOR_FAMILY \\*[$DOC_FAM] +. DOCTYPE_FAMILY \\*[$DOC_FAM] +. HEAD_FAMILY \\*[$DOC_FAM] +. SUBHEAD_FAMILY \\*[$DOC_FAM] +. QUOTE_FAMILY \\*[$DOC_FAM] +. BLOCKQUOTE_FAMILY \\*[$DOC_FAM] +. EPIGRAPH_FAMILY \\*[$DOC_FAM] +. HDRFTR_FAMILY \\*[$DOC_FAM] +. PAGENUM_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. +\# +.MAC DOC_PT_SIZE END +. if \\n[#IGNORE] \{ .return \} +. br +. PS \\$1 +. nr #DOC_PT_SIZE \\n[#PT_SIZE] +.END +\# +\# +\# 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). +\# +.MAC DOC_LEAD END +. if \\n[#IGNORE] \{ .return \} +. br +. vs \\$1 +. nr #DOC_LEAD \\n[#LEAD] +. if '\\$2'ADJUST' \{ .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 \} +. el \{ .nr #ADJ_DOC_LEAD 0 \} +.END +\# +\# +\# DOCUMENT QUAD +\# ------------- +\# *Arguments: +\# L | LEFT | R | RIGHT | C | CENTER | CENTRE | J | JUSTIFY +\# *Function: +\# Creates or modifies string $DOC_QUAD. +\# *Notes: +\# While QUAD (from the typesetting macros) can be used before START +\# to change the default document quad, DOC_QUAD *must* be used after +\# the START macro has been invoked. +\# +\# Default is LEFT for printstyle TYPEWRITE, JUSTIFY for printstyle +\# TYPESET. +\# +.MAC DOC_QUAD END +. ds $DOC_QUAD \\$1 +. QUAD \\*[$DOC_QUAD] +.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. +\# +.MAC ATTRIBUTE_STRING END +. ds $ATTRIBUTE_STRING \\$1 +.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 +. nr #FINIS 1 +. CAPS +. ds $FINIS_STRING \\$1 +. CAPS OFF +.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 +\# +\# ==================================================================== +\# +\# +++EPIGRAPHS+++ +\# +\# EPIGRAPH FAMILY +\# --------------- +\# *Argument: +\# <family to use for epigraphs> +\# *Function: +\# Creates or modifies string $EPI_FAM. +\# *Notes: +\# Default is same as running text. +\# +.MAC EPIGRAPH_FAMILY END +. ds $EPI_FAM \\$1 +.END +\# +\# +\# EPIGRAPH FONT +\# ------------- +\# *Argument: +\# <font to use for epigraphs> +\# *Function: +\# Creates or modifies string $EPI_FT. +\# *Notes: +\# Default is same as running text. +\# +.MAC EPIGRAPH_FONT END +. ds $EPI_FT \\$1 +.END +\# +\# +\# EPIGRAPH SIZE +\# ------------- +\# *Argument: +\# <-|+ number of points by which to de/increase point size of epigraphs +\# (relative to running text)> +\# *Function: +\# Creates or modifies string $EPI_SIZE_CHANGE. +\# *Notes: +\# Must be preceded by a - or + sign with no space afterwards. +\# Fractional point sizes are allowed. Default -1.5 for printstyle +\# TYPESET; +0 for TYPEWRITE. +\# +.MAC EPIGRAPH_SIZE END +. ds $EPI_SIZE_CHANGE \\$1 +.END +\# +\# +\# EPIGRAPH QUAD +\# ------------- +\# *Arguments: +\# L | LEFT | J | JUSTIFY +\# *Function: +\# Creates or modifies string $EPI_QUAD. +\# *Notes: +\# Default is $DOC_QUAD when BLOCK argument is passed to EPIGRAPH. +\# +.MAC EPIGRAPH_QUAD END +. ds $EPI_QUAD \\$1 +.END +\# +\# +\# 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 +. nr #EPI_OFFSET_VALUE \\$1 +.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 \\$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[#START] \{\ +. if \\n[#PRINT_STYLE]=1 \{\ +. if \\n[#AUTHOR_LINES]=1 \{ .ALD \\n[#DOC_LEAD]u \} +. \} +. \} +. ie '\\$1'' \{\ +. nr #EPIGRAPH 1 +. ev EPIGRAPH +. ll \\n[#L_LENGTH]u +. ta \\n(.lu +. CHECK_INDENT +. if \\n[#COLUMNS] \{\ +. ie \\n[#START] \{\ +. ll \\n[#DOC_L_LENGTH]u +. ta \\n(.lu +. \} +. el \{\ +. ll \\n[#COL_L_LENGTH]u +. ta \\n(.lu +. \} +. \} +. CENTER +. if \\n[#PRINT_STYLE]=1 \{\ +. fam C +. ft R +. if '\\*[$EPI_FT]'I' \{\ +. FT I +. \} +. ps 12 +. 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] +. AUTOLEAD \\n[#EPI_AUTOLEAD] +. nr #EPI_LEAD \\n[#LEAD] +. nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD] +. \} +. di EPI_TEXT +. nr #EPI_ACTIVE 1 +. \} +. el \{\ +. ie '\\$1'BLOCK' \{\ +. nr #EPIGRAPH 2 +. ev EPIGRAPH +. ie \\n[#START] \{\ +. ie \\n[#COLUMNS] \{\ +. ll \\n[#L_LENGTH_FOR_EPI]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u)) +. ta \\n(.lu +. \} +. el \{\ +. ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u)) +. ta \\n(.lu +. \} +. \} +. el \{\ +. ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u)) +. ta \\n(.lu +. if \\n[#COLUMNS] \{\ +. ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u)) +. ta \\n(.lu +. \} +. CHECK_INDENT +. \} +. if \\n[#PRINT_STYLE]=1 \{\ +. fam C +. ft R +. if '\\*[$EPI_FT]'I' \{\ +. FT I +. \} +. ps 12 +. 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] +. AUTOLEAD \\n[#EPI_AUTOLEAD] +. QUAD \\*[$EPI_QUAD] +. HY +. 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 +. REMOVE_INDENT +. ev +. nr #EPI_DEPTH \\n[#DIVER_DEPTH]-\\n[#EPI_LEAD] +. nr #EPI_LINES \\n[#EPI_DEPTH]/\\n[#EPI_LEAD] +. ie \\n[#START] \{\ +. 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] \} +. RLD \\n[#DOC_LEAD]u +. ie \\n[#PRINT_STYLE]=1 \{\ +. if \\n[#EPI_WHITESPACE]=\\n[#DOC_LEAD] \{ .ALD \\n[#EPI_WHITESPACE]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 +. \} +. \} +. \} +. 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 \{\ +. if \\n[#EPI_WHITESPACE]=\\n[#DOC_LEAD] \{ .ALD \\n[#EPI_WHITESPACE]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 +. \} +. \} +. \} +. 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 \} +. \} +. \} +. if \\n[#EPIGRAPH]=1 \{\ +. po \\n[#L_MARGIN]u +. if \\n[#COLUMNS] \{ .po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u \} +. \} +. if \\n[#EPIGRAPH]=2 \{\ +. nr #EPI_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE]) +. if \\n[#COLUMNS] \{\ +. nr #EPI_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE]) +. \} +. po \\n[#EPI_OFFSET]u +. \} +. nf +. EPI_TEXT +. br +. ie \\n[#START] \{\ +. 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 +. \} +. \} +. 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 \{\ +. if \\n[#EPI_WHITESPACE]=\\n[#DOC_LEAD] \{ .ALD \\n[#EPI_WHITESPACE]u \} +. \} +. 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 +. \} +. \} +. \} +. \} +. 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 \} +. if \\n[#START] \{\ +. if \\n[#COLUMNS] \{\ +. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u +. mk dc +. \} +. \} +.END +\# +\# ==================================================================== +\# +\# +++FINIS MACRO+++ +\# +\# FINIS +\# ----- +\# *Arguments: +\# <none> +\# *Function: +\# Deposits --END-- at the end of a document. +\# +.MAC FINIS END +. if \\n[#TAB_ACTIVE] \{ .TQ \} +. if \\n[#INDENT_ACTIVE] \{ .IX CLEAR \} +. FOOTERS OFF +. PAGINATION OFF +. nr #EM_ADJUST (1m/8) +. if \\n[#COLUMNS] \{ .po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u \} +. ALD \\n[#DOC_LEAD]u +. CENTER +. if \\n[#PRINT_STYLE]=1 \{ .PRINT "--\\*[$FINIS_STRING]--\} +. if \\n[#PRINT_STYLE]=2 \{\ +. PRINT "\v'-\\n[#EM_ADJUST]u'\(em\v'+\\n[#EM_ADJUST]u'\\*[$FINIS_STRING]\v'-\\n[#EM_ADJUST]u'\*[FU1]\(em +. \} +.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] +\# +\# +\# HDRFTR FAMILY +\# ------------- +\# *Argument: +\# <family to use in header/footers> +\# *Function: +\# Creates or modifies string $HDRFTR_FAM. +\# *Notes: +\# Default is same as running text. +\# +.MAC HDRFTR_FAMILY END +. ds $HDRFTR_FAM \\$1 +.END +\# +\# +\# HDRFTR SIZE +\# ----------- +\# *Argument: +\# <+|-number of points by which to in/decrease point size of +\# header/footers (relative to running text)> +\# *Function: +\# Creates or modifies string $HDRFTR_SIZE_CHANGE. +\# *Notes: +\# Must be preceded by a +|- sign. No space afterwards. +\# Fractional point sizes are allowed. Default is +0. +\# +\# By default, header/footers print the author .5 points smaller +\# than the base point size of running text, center titles +\# (Chapter, Draft, Revision, etc.) .5 points smaller +\# than running text (in italics), and the document title 2 full +\# points smaller than running text (in caps). The HDRFTR_SIZE +\# macro changes the overall size for all three parts while +\# maintaining the internal size changes. +\# +\# In other words, if the user likes the header/footers but wants +\# them a bit bigger or a bit smaller, s/he should use HDRFTR_SIZE. +\# +.MAC HDRFTR_SIZE END +. ds $HDRFTR_SIZE_CHANGE \\$1 +.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) +.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 elipsis 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 LEFT FAMILY +\# ------------------ +\# *Argument: +\# <family of header/footer left string> +\# *Function: +\# Creates or modifies string $HDRFTR_LEFT_FAM. +\# +.MAC HDRFTR_LEFT_FAMILY END +. ds $HDRFTR_LEFT_FAM \\$1 +.END +\# +\# +\# HDRFTR LEFT FONT +\# ---------------- +\# *Argument: +\# <font of header/footer left string> +\# *Function: +\# Creates or modifies string $HDRFTR_LEFT_FT. +\# +.MAC HDRFTR_LEFT_FONT END +. ds $HDRFTR_LEFT_FT \\$1 +.END +\# +\# +\# HDRFTR LEFT SIZE +\# ---------------- +\# *Argument: +\# <+|- number of points to in/decrease size of left string in +\# header/footers (relative to running text)> +\# *Function: +\# Creates or modifies string HDRFTR_LEFT_SIZE_CHANGE. +\# *Notes: +\# Must be preceded by a +|- sign. No space afterwards. +\# Fractional point sizes are allowed. +\# Default is -.5 for printstyle TYPESET; if all caps, -2 +\# Has no effect in TYPEWRITE. +\# +.MAC HDRFTR_LEFT_SIZE END +. ds $HDRFTR_LEFT_SIZE_CHANGE \\$1 +.END +\# +\# +\# HDRFTR LEFT CAPS +\# ---------------- +\# *Argument: +\# <none> | <anything> +\# *Function: +\# Turns capitalisation of $HDRFTR_LEFT (typically, the author of +\# the document) on or off. +\# *Notes: +\# Default is on. +\# +.MAC HDRFTR_LEFT_CAPS END +. ie '\\$1'' \{\ +. nr #HDRFTR_LEFT_CAPS 1 +. \} +. el \{\ +. nr #HDRFTR_LEFT_CAPS 0 +. ds $HDRFTR_RIGHT_SIZE_CHANGE +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 elipsis before the page number in the string, s/he should use +\# ...\*[PAGE#], not ...# +\# +.MAC HDRFTR_CENTER END +. nr #USER_DEF_HDRFTR_CENTER 1 +. ds $HDRFTR_CENTER \\$1 +.END +\# +\# +\# HDRFTR CENTER FAMILY +\# -------------------- +\# *Argument: +\# <family of header/footer center string> +\# *Function: +\# Creates or modifies string $HDRFTR_CENTER_FAM. +\# +.MAC HDRFTR_CENTER_FAMILY END +. ds $HDRFTR_CENTER_FAM \\$1 +.END +\# +\# +\# HDRFTR CENTER FONT +\# ------------------ +\# *Argument: +\# <font of header/footer center string> +\# *Function: +\# Creates or modifies string $HDRFTR_CENTER_FT. +\# +.MAC HDRFTR_CENTER_FONT END +. ds $HDRFTR_CENTER_FT \\$1 +.END +\# +\# +\# HDRFTR CENTER SIZE +\# ------------------ +\# *Argument: +\# <+|- number of points to in/decrease size of centre string in +\# header/footers (relative to header/footer size)> +\# *Function: +\# Creates string HDRFTR_CENTER_SIZE_CHANGE. +\# *Notes: +\# Must be preceded by a +|- sign. No space afterwards. +\# Fractional point sizes are allowed. +\# Default is -.5 for printstyle TYPESET; if all caps, -2 +\# Has no effect in TYPEWRITE. +\# +.MAC HDRFTR_CENTER_SIZE END +. ds $HDRFTR_CENTER_SIZE_CHANGE \\$1 +.END +\# +\# +\# HDRFTR CENTER CAPS +\# ------------------ +\# *Argument: +\# <none> | <anything> +\# *Function: +\# Turns capitalisation of $HDRFTR_CENTER (typically, doctype of +\# the document) on or off. +\# *Notes: +\# Default is on. +\# +.MAC HDRFTR_CENTER_CAPS END +. ie '\\$1'' \{\ +. nr #HDRFTR_CENTER_CAPS 1 +. \} +. el \{\ +. nr #HDRFTR_CENTER_CAPS 0 +. ds $HDRFTR_CENTER_SIZE_CHANGE +0 +. \} +.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 elipsis 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 FAMILY +\# ------------------- +\# *Argument: +\# <family of header/footer right string> +\# *Function: +\# Creates or modifies string $HDRFTR_RIGHT_FAM. +\# +.MAC HDRFTR_RIGHT_FAMILY END +. ds $HDRFTR_RIGHT_FAM \\$1 +.END +\# +\# +\# HDRFTR RIGHT FONT +\# ----------------- +\# *Argument: +\# <font of header/footer right string> +\# *Function: +\# Creates or modifies string $HDRFTR_RIGHT_FT. +\# +.MAC HDRFTR_RIGHT_FONT END +. ds $HDRFTR_RIGHT_FT \\$1 +.END +\# +\# +\# HDRFTR RIGHT SIZE +\# ----------------- +\# *Argument: +\# <+|- number of points to in/decrease size of right string in +\# header/footers (relative to header/footer size)> +\# *Function: +\# Creates or modifies string HDRFTR_RIGHT_SIZE_CHANGE. +\# *Notes: +\# Must be preceded by a +|- sign. No space afterwards. +\# Fractional point sizes are allowed. +\# Default is -2 for printstyle TYPESET if all caps; otherwise -.5 +\# Has no effect in TYPEWRITE. +\# +.MAC HDRFTR_RIGHT_SIZE END +. ds $HDRFTR_RIGHT_SIZE_CHANGE \\$1 +.END +\# +\# +\# HDRFTR RIGHT CAPS +\# ----------------- +\# *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_CAPS END +. ie '\\$1'' \{\ +. nr #HDRFTR_RIGHT_CAPS 1 +. \} +. el \{\ +. nr #HDRFTR_RIGHT_CAPS 0 +. ds $HDRFTR_RIGHT_SIZE_CHANGE +0 +. \} +.END +\# +\# HDRFTR RULE +\# ----------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# If invoked via the alias HDRFTR_RULE_INTERNAL in HDRFTR, prints a rule +\# under the header/footer. Otherwise, turns HDRFTR_RULE on or off. +\# +.MAC HDRFTR_RULE END \"To print rule under header/over footer. +. ie '\\$0'HDRFTR_RULE_INTERNAL' \{\ +. 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] \} +. \} +. PS 12 +. if \\n[#HEADERS_ON] \{ .ALD \\n[#HDRFTR_RULE_GAP]u \} +. if \\n[#FOOTERS_ON] \{\ +. RLD \\n[#LEAD]u*3u+\\n[#HDRFTR_RULE_GAP]u+\\n[#CAP_HEIGHT_ADJUST]u +. \} +. PRINT \\l'\\n[#DOC_L_LENGTH]u' +. br +. \} +. el \{\ +. 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 +. HDRFTR_FAMILY \\*[$DOC_FAM] +. HDRFTR_PT_SIZE \\n[#DOC_PT_SIZE] +. HDRFTR_LEFT_FAMILY \\*[$DOC_FAM] +. HDRFTR_LEFT_FONT R +. HDRFTR_LEFT_SIZE +0 +. HDRFTR_LEFT_CAPS OFF +. HDRFTR_CENTER_FAMILY \\*[$DOC_FAM] +. HDRFTR_CENTER_FONT R +. HDRFTR_CENTER_SIZE +0 +. HDRFTR_CENTER_CAPS OFF +. HDRFTR_RIGHT_FAMILY \\*[$DOC_FAM] +. HDRFTR_RIGHT_FONT R +. HDRFTR_RIGHT_SIZE +0 +. HDRFTR_RIGHT_CAPS OFF +.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: +\# 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 conjuction 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. +\# +\# Default is OFF. +\# +.MAC SWITCH_HDRFTR END +. ie '\\$1'' \{ .nr #SWITCH_HDRFTR 1 \} +. el \{ .nr #SWITCH_HDRFTR 0 \} +.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[#PRINT_FOOTER_ON_PAGE_1] \{ .return \} +. \} +. \} +. if \\n[#HEADERS_ON] \{ .vs 0 \} +. 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_RIGHT_CAPS \\n[#HDRFTR_TMP_CAPS_SWITCH] +. rr #HDRFTR_TMP_CAPS_SWITCH +. rm $HDRFTR_TMP_SWITCH +. rm $HDRFTR_TMP_SIZE_CHANGE_SWITCH +. nr #SWITCH_HDRFTR 0 +. \} +. nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ] +. 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 \} +. ie '\\*[$HDRFTR_CENTER]'#' \{\ +. PRINT \\v'-(\\n[#LEAD]u*1u)'\\n[#PAGENUMBER] +. \} +. el \{\ +. ie !'\\*[$HDRFTR_CENTER]'' \{ .PRINT \\v'-(\\n[#LEAD]u*1u)'\\*[$HDRFTR_CENTER] \} +. 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 \} +. ie '\\*[$HDRFTR_RIGHT]'#' \{\ +. PRINT \\v'-(\\n[#LEAD]u*2u)'\\n[#PAGENUMBER] +. \} +. el \{\ +. ie !'\\*[$HDRFTR_RIGHT]'' \{ .PRINT \v'-(\\n[#LEAD]u*2u)'\\*[$HDRFTR_RIGHT] \} +. el \{ .PRINT \& \} +. \} +. if \\n[#HDRFTR_RIGHT_CAPS] \{ .CAPS OFF \} +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. FAMILY \\*[$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_CAPS] \{ .CAPS \} +. ie '\\*[$HDRFTR_LEFT]'#' \{ .PRINT \\n[#PAGENUMBER] \} +. el \{\ +. ie !'\\*[$HDRFTR_LEFT]'' \{ . PRINT \\*[$HDRFTR_LEFT] \} +. el \{ .PRINT \& \} +. \} +. if \\n[#HDRFTR_LEFT_CAPS] \{ .CAPS OFF \} +. FAMILY \\*[$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_CAPS] \{ .CAPS \} +. ie '\\*[$HDRFTR_CENTER]'#' \{\ +. PRINT \\v'-(\\n[#LEAD]u*1u)'\\n[#PAGENUMBER] +. \} +. el \{\ +. ie !'\\*[$HDRFTR_CENTER]'' \{ .PRINT \\v'-(\\n[#LEAD]u*1u)'\\*[$HDRFTR_CENTER] \} +. el \{ .PRINT \& \} +. \} +. if \\n[#HDRFTR_CENTER_CAPS] \{ .CAPS OFF \} +. FAMILY \\*[$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_CAPS] \{ .CAPS \} +. ie '\\*[$HDRFTR_RIGHT]'#' \{\ +. PRINT \\v'-(\\n[#LEAD]u*2u)'\\n[#PAGENUMBER] +. \} +. el \{\ +. ie !'\\*[$HDRFTR_RIGHT]'' \{ .PRINT \v'-(\\n[#LEAD]u*2u)'\\*[$HDRFTR_RIGHT] \} +. el \{ .PRINT \& \} +. \} +. if \\n[#HDRFTR_RIGHT_CAPS] \{ .CAPS OFF \} +. \} +. 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: +\# Prints header appropriate to DOC_TYPE, PRINTSTYLE, and COPYSTYLE. +\# *Notes: +\# In order to convert the title string to caps in the header (in the +\# event that the user enters .TITLE in caps/lc), I've used +\# quad left, quad centre, and quad right to arrange the three bits +\# of the header, rather than .tl. This allows the use of the CAPS macro. +\# The downside is that I have to add \\v'-(\\n[#LEAD]u*#) in order +\# for -Tlatin1 output to align the header/footer strings on the baseline. +\# The console output still isn't brilliant, but at least it's +\# comprehensible. +\# +.MAC HEADER END +. PROCESS_FN_LEFTOVER +. nr #FN_COUNT_FOR_COLS 0 1 +. if \\n[#RESET_FN_NUMBER] \{ .nr #FN_NUMBER 0 1 \} +. po \\n[#DOC_L_MARGIN]u +. if \\n[#RECTO_VERSO] \{\ +. nr #DOC_LR_MARGIN_TMP \\n[#DOC_L_MARGIN] +. DOC_LEFT_MARGIN \\n[#DOC_R_MARGIN]u +. DOC_RIGHT_MARGIN \\n[#DOC_LR_MARGIN_TMP]u +. \} +. ev HEADER +. if \\n[#PRINT_STYLE]=1 \{ .vs 0 \} +. if \\n[#PRINT_STYLE]=2 \{ .LS 0 \} +. sp |\\n[#HEADER_MARGIN]u-1v +. ll \\n[#DOC_L_LENGTH]u +. ta \\n(.lu +. if \\n[#PRINT_STYLE]=2 \{\ +. FAMILY \\*[$HDRFTR_FAM] +. FT R +. PS \\n[#DOC_PT_SIZE]u\\*[$HDRFTR_SIZE_CHANGE] +. \} +. if \\n[#PRINT_STYLE]=1 \{\ +. fam C +. ft R +. ps 12\\*[$HDRFTR_SIZE_CHANGE] +. \} +. nr #HDRFTR_PT_SIZE \\n[#PT_SIZE] +. if \\n[#CAPS_ON] \{\ +. nr #CAPS_WAS_ON 1 +. CAPS OFF +. \} +. if \\n[#UNDERLINE_ON] \{\ +. nr #UNDERLINE_WAS_ON 1 +. UNDERLINE OFF +. \} +. ie \\n[#HEADERS_ON] \{\ +. PRINT_HDRFTR +. sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u +. \} +. el \{\ +. ie \\n[#PAGE_NUM_V_POS]=1 \{\ +. ie \\n[#PAGINATE] \{\ +. PRINT_PAGE_NUMBER +. sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u +. \} +. el \{ .sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u \} +. \} +. el \{ .sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u \} +. \} +. nr #PAGE_TOP \\n(nl +. ev +. po \\n[#L_MARGIN]u +. if \\n[#RECTO_VERSO] \{\ +. nr #L_MARGIN +\\n[#L_MARGIN_DIFF] +. po \\n[#L_MARGIN]u +. \} +. if \\n[#CAPS_WAS_ON] \{\ +. CAPS +. rr #CAPS_WAS_ON +. \} +. if \\n[#UNDERLINE_WAS_ON] \{\ +. UNDERLINE +. rr #UNDERLINE_WAS_ON +. \} +. if \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \} +. if \\n[#QUOTE] \{\ +. ie \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \} +. el \{\ +. nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) +. po \\n[#Q_OFFSET]u +. \} +. \} +. if \\n[#EPIGRAPH] \{\ +. ie \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \} +. el \{\ +. nr #EPI_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#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 \{ .ALD \\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u \} +. \} +. \} +. el \{ .ns \} +. ns +. if \\n[#COLUMNS] \{\ +. 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 +. ll \\n[#COL_L_LENGTH]u +. ta \\n(.lu +. if \\n[#QUOTE] \{\ +. po +(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u) +. \} +. if \\n[#EPIGRAPH] \{\ +. if \\n[#EPI_ACTIVE] \{\ +. ie \\n[#EPI_FITS] \{ . \} +. el \{ .nr dc -\\n[#EPI_LEAD_DIFF] \} +. \} +. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u+(\\n[#PP_INDENT]u*\\n[#EPI_OFFSET_VALUE]u) +. \} +. \} +. if \\n[#PRINT_STYLE]=1 \{\ +. if \\n[#SLANT_ON] \{\ +. if \\n[#UNDERLINE_SLANT] \{ .UNDERLINE \} +. \} +. \} +.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'' \{\ +. nr #FOOTERS_ON 1 +. PAGE_NUM_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: +\# 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 +. ev PAGE_BOTTOM +. nr #L_MARGIN_DIFF \\n[#L_MARGIN]-\\n[#DOC_L_MARGIN] +. nr #RESTORE_OFFSET \\n(.o +. if !\\n[#FN_DEFER] \{\ \"i.e. no defer (do not defer footnote processing to next page or column) +. nr #DIVER_DEPTH 0 +. if \\n[#FN_COUNT] \{\ +. sp |\\n[#PAGE_LENGTH]u-(\\n[#B_MARGIN]u+\\n[#FN_DEPTH]u) +. po \\n[#DOC_L_MARGIN]u +. if \\n[#COLUMNS] \{ .po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u \} +. nf +. FOOTNOTES +. rm FOOTNOTES +. if '\\n(.z'FN_OVERFLOW' \{\ +. di +. nr #FN_OVERFLOW_DEPTH \\n[#DIVER_DEPTH] +. \} +. nr #FN_COUNT 0 +. if \\n[#COL_NEXT] \{ .nr #COL_NUM \\n-[#COL_NUM] \} +. \} +. \} +. ie \\n[#COLUMNS] \{\ +. ie \\n[#COL_NUM]=\\n[#NUM_COLS] \{ .DO_FOOTER \} +. el \{\ +. sp |\\n(dcu +. po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u +. PROCESS_FN_LEFTOVER +. if !\\n[#EPIGRAPH] \{ .rr #COL_NEXT \} +. if !\\n[#QUOTE] \{ .rr #COL_NEXT \} +. if \\n[#QUOTE] \{\ +. nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) +. if \\n[#COLUMNS] \{ .nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) \} +. po \\n[#Q_OFFSET]u +. \} +. if \\n[#EPIGRAPH] \{\ +. nr #EPI_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE]) +. if \\n[#COLUMNS] \{ .nr #EPI_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE]) \} +. po \\n[#EPI_OFFSET]u +. \} +. ie \\n[#EPIGRAPH] \{\ +. ie !\\n[#EPI_ACTIVE] \{\ +. ns +. rr #EPI_ACTIVE +. \} +. el \{\ +. sp |\\n(dcu+(\\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u) +. rr #EPI_ACTIVE +. \} +. \} +. el \{ .ns \} +. ev +. \} +. ns +. \} +. el \{ .DO_FOOTER \} +.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 +. sp |\\n[#PAGE_LENGTH]u-\\n[#FOOTER_MARGIN]u-1v +. ev FOOTER +. po \\n[#DOC_L_MARGIN]u +. ll \\n[#DOC_L_LENGTH]u +. ta \\n(.lu +. FAMILY \\*[$HDRFTR_FAM] +. FT R +. PS \\n[#DOC_PT_SIZE]u\\*[$HDRFTR_SIZE_CHANGE] +. if \\n[#PRINT_STYLE]=1 \{\ +. fam C +. ft R +. ps 12 +. \} +. nr #HDRFTR_PT_SIZE \\n[#PT_SIZE] +. if \\n[#CAPS_ON] \{\ +. nr #CAPS_WAS_ON 1 +. CAPS OFF +. \} +. if \\n[#UNDERLINE_ON] \{\ +. nr #UNDERLINE_WAS_ON 1 +. UNDERLINE OFF +. \} +. ie \\n[#FOOTERS_ON] \{\ +. PRINT_HDRFTR +. \} +. el \{\ +. if \\n[#PAGINATE] \{\ +. if \\n[#PAGE_NUM_V_POS]=2 \{ .PRINT_PAGE_NUMBER \} +. \} +. \} +. if \\n[#CAPS_WAS_ON] \{\ +. CAPS +. rr #CAPS_WAS_ON +. \} +. if \\n[#UNDERLINE_WAS_ON] \{\ +. UNDERLINE +. rr #UNDERLINE_WAS_ON +. \} +. ev +. bp +. ev +.END +\# +\# ==================================================================== +\# +\# +++HEADS+++ +\# +\# ---Head numbers--- +\# +\# NUMBER HEADS +\# ------------ +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Toggles register #NUMBER_HEAD; sets incrementing register #HEAD_NUM. +\# *Notes: +\# Default is OFF. +\# +.MAC NUMBER_HEADS END +. ie '\\$1'' \{\ +. nr #NUMBER_HEAD 1 +. if !\\n[#HEAD_NUM] \{ .nr #HEAD_NUM 0 1 \} +. \} +. el \{ .rr #NUMBER_HEAD \} +.END +\# +\# +\# RESET HEAD NUMBER +\# ----------------- +\# *Arguments: +\# <none> | <desired head number> +\# *Function: +\# Resets incrementing register #HEAD_NUM to 1 or, if there's +\# an argument, to user supplied number. +\# *Notes: +\# Also resets subhead and parahead numbers. If this is not +\# desired, subhead and parahead numbers may be reset individually. +\# +.MAC RESET_HEAD_NUMBER END +. ie '\\$1'' \{\ +. nr #HEAD_NUM 0 1 +. nr #SH_NUM 0 1 +. nr #PH_NUM 0 1 +. \} +. el \{\ +. nr #HEAD_NUM \\$1-1 1 +. nr #SH_NUM 0 1 +. nr #PH_NUM 0 1 +. \} +.END +\# +\# +\# NUMBER SUBHEADS +\# --------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Toggles register #NUMBER_SH; sets incrementing register #SH_NUM. +\# *Notes: +\# Default is OFF. +\# +.MAC NUMBER_SUBHEADS END +. ie '\\$1'' \{\ +. nr #NUMBER_SH 1 +. if !\\n[#SH_NUM] \{ .nr #SH_NUM 0 1 \} +. \} +. el \{ .rr #NUMBER_SH \} +.END +\# +\# +\# RESET SUBHEAD NUMBER +\# -------------------- +\# *Arguments: +\# <none> | <desired subhead number> +\# *Function: +\# Resets incrementing register #SH_NUM to 1 or, if there's +\# an argument, to user supplied number. +\# *Notes: +\# When the subhead number is reset, it resets the parahead number as +\# well. If this behaviour is not what's wanted, RESET_SUBHEAD_NUMBER +\# allows the user to set the parahead number to whatever s/he desires. +\# +.MAC RESET_SUBHEAD_NUMBER END +. ie '\\$1'' \{ .nr #SH_NUM 0 1 \} +. el \{\ +. nr #SH_NUM \\$1-1 1 +. nr #PH_NUM 0 1 +. \} +.END +\# +\# +\# NUMBER PARAHEADS +\# ---------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Toggles register #NUMBER_PH; sets incrementing register #PH_NUM. +\# *Notes: +\# Default is OFF. +\# +.MAC NUMBER_PARAHEADS END +. ie '\\$1'' \{\ +. nr #NUMBER_PH 1 +. if !\\n[#PH_NUM] \{ .nr #PH_NUM 0 1 \} +. \} +. el \{ .rr #NUMBER_PH \} +.END +\# +\# +\# RESET PARAHEAD NUMBER +\# --------------------- +\# *Arguments: +\# <none> | <desired parahead number> +\# *Function: +\# Resets incrementing register #PH_NUM to 1 or, if there's +\# an argument, to user supplied number. +\# *Notes: +\# Resetting the parahead number resets the parahead number +\# only. +\# +.MAC RESET_PARAHEAD_NUMBER END +. ie '\\$1'' \{ .nr #PH_NUM 0 1 \} +. el \{ nr #SH_NUM \\$1-1 1 \} +.END +\# +\# +\# ---Main heads--- +\# +\# HEAD FAMILY +\# ----------- +\# *Argument: +\# <family to use for section titles (main heads)> +\# *Function: +\# Creates or modifies string $HEAD_FAM. +\# *Notes: +\# Default is same as running text. +\# +.MAC HEAD_FAMILY END +. ds $HEAD_FAM \\$1 +.END +\# +\# +\# HEAD FONT +\# --------- +\# *Argument: +\# <font to use for section titles (main heads)> +\# *Function: +\# Creates or modifies string $HEAD_FT. +\# *Notes: +\# Default is bold. +\# +.MAC HEAD_FONT END +. ds $HEAD_FT \\$1 +.END +\# +\# +\# HEAD SIZE +\# --------- +\# *Argument: +\# <+|- number of points by which to in/decrease point size of +\# section titles (relative to running text)> +\# *Function: +\# Creates or modifies string $HEAD_SIZE_CHANGE. +\# *Notes: +\# Must be preceded by a - or + sign with no space afterwards. +\# Fractional point sizes are allowed. +\# Default +1 for printstyle TYPESET; +0 for TYPEWRITE. +\# +.MAC HEAD_SIZE END +. ds $HEAD_SIZE_CHANGE \\$1 +.END +\# +\# +\# HEAD QUAD +\# --------- +\# *Arguments: +\# L | LEFT | R | RIGHT | C | CENTER | CENTRE +\# *Function: +\# Creates or modifies string $HEAD_QUAD. +\# *Notes: +\# Default is CENTER. +\# +.MAC HEAD_QUAD END +. ds $HEAD_QUAD \\$1 +.END +\# +\# +\# HEAD CAPS +\# --------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Creates or modifies register #HEAD_CAPS. +\# *Notes: +\# Default is on. +\# +.MAC HEAD_CAPS END +. ie '\\$1'' \{ .nr #HEAD_CAPS 1 \} +. el \{ .nr #HEAD_CAPS 0 \} +.END +\# +\# +\# HEAD SPACE +\# ---------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Creates register #HEAD_SPACE, which toggles whether the space +\# before heads is 1 extra line space ("off") or 2 ("on"). Used only +\# in PRINTSTYLE TYPESET. +\# *Notes: +\# Default is on. +\# +.MAC HEAD_SPACE END +. ie '\\$1'' \{ .nr #HEAD_SPACE 1 \} +. el \{ .nr #HEAD_SPACE 0 \} +.END +\# +\# +\# HEAD UNDERLINE +\# -------------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Creates or modifies register #HEAD_UNDERLINE. +\# *Notes: +\# Default is on. +\# +.MAC HEAD_UNDERLINE END +. ie '\\$1'' \{ .nr #HEAD_UNDERLINE 1 \} +. el \{ .nr #HEAD_UNDERLINE 0 \} +.END +\# +\# +\# MAIN HEAD +\# --------- +\# *Arguments: +\# "text of main head" ["text of main head"] ... +\# *Function: +\# In TYPEWRITE, prints main heads centered, all caps, underlined. +\# In TYPESET, prints bold main heads 1 point larger than running +\# text, all caps, underlined. +\# *Notes: +\# The HEAD macro requires that double-quotes (") surround +\# each line of text. +\# +.MAC HEAD END +. br +. nr #ARG_NUM 0 1 +. nr #HEAD 1 +. ev HEAD +. ll \\n[#L_LENGTH]u +. ta \\n(.lu +. if \\n[#COLUMNS] \{\ +. ll \\n[#COL_L_LENGTH]u +. ta \\n(.lu +. \} +. CHECK_INDENT +. QUAD \\*[$HEAD_QUAD] +. if \\n[#PRINT_STYLE]=1 \{\ +. fam C +. ft R +. ps 12 +. vs \\n[#DOC_LEAD]u +. UNDERLINE OFF +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. FAMILY \\*[$HEAD_FAM] +. FT \\*[$HEAD_FT] +. PS \\n[#DOC_PT_SIZE]u\\*[$HEAD_SIZE_CHANGE] +. LS \\n[#DOC_LEAD]u +. \} +. if r#QUOTE \{ .rr #QUOTE \} +. if r#EPIGRAPH \{ .rr #EPIGRAPH \} +. if \\n[#PRINT_STYLE]=1 \{ .ne 3 \} +. if \\n[#PRINT_STYLE]=2 \{\ +. ie \\n[#HEAD_SPACE] \{ .ne 5 \} +. el \{ .ne 3 \} +. \} +. ie \\n[#START] \{\ +. if \\n[#DOC_HEADER]=0 \{ . \} +. \} +. el \{\ +. if \\n[#PRINT_STYLE]=1 \{\ +. if !\\n[#LINEBREAK] \{\ +. ALD \\n[#DOC_LEAD]u +. if \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \} +. \} +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. ie \\n[#PP_SPACE] \{\ +. ie \\n[#END_QUOTE] \{ . \} +. el \{\ +. if !\\n[#LINEBREAK] \{ +. if \\n[#HEAD_SPACE] \{ .ALD \\n[#DOC_LEAD]u \} +. \} +. \} +. \} +. el \{\ +. ie \\n[#HEAD_SPACE] \{ .ALD \\n[#DOC_LEAD]u*2u \} +. el \{ .ALD \\n[#DOC_LEAD]u \} +. \} +. if \\n[#END_QUOTE] \{\ +. if !\\n[#Q_FITS] \{\ +. RLD \\n[#DOC_LEAD]u +. if \\n[#PP_ACTIVE] \{ .ALD \\n[#DOC_LEAD]u \} +. \} +. if \\n[#Q_AT_TOP] \{\ +. RLD \\n[#DOC_LEAD]u +. if \\n[#Q_AT_TOP] \{ .ALD \\n[#DOC_LEAD]u \} +. \} +. \} +. if \\n[#LINEBREAK] \{\ +. if \\n[#HEAD_SPACE] \{ .RLD \\n[#DOC_LEAD]u \} +. \} +. \} +. \} +. if \\n[#HEAD_CAPS] \{ .CAPS \} +. while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\ +. ie \\n[#NUMBER_HEAD] \{\ +. ie \\n[#ARG_NUM]=0 \{\ +. br +. ie \\n[#HEAD_UNDERLINE]=0 \{ .PRINT "\\n+[#HEAD_NUM].\0\\$[\\n+[#ARG_NUM]]\} +. el \{ .UNDERSCORE "\\n+[#HEAD_NUM].\0\\$[\\n+[#ARG_NUM]]\} +. br +. \} +. el \{\ +. br +. ie \\n[#HEAD_UNDERLINE]=0 \{ .PRINT "\\$[\\n+[#ARG_NUM]]\} +. el \{ .UNDERSCORE "\\$[\\n+[#ARG_NUM]]\} +. br +. \} +. \} +. el \{\ +. br +. ie \\n[#HEAD_UNDERLINE]=0 \{ .PRINT "\\$[\\n+[#ARG_NUM]]\} +. el \{ .UNDERSCORE "\\$[\\n+[#ARG_NUM]]\} +. br +. \} +. \} +. REMOVE_INDENT +. CAPS OFF +. ev +. ALD \\n[#DOC_LEAD]u +. RESET_SUBHEAD_NUMBER +. RESET_PARAHEAD_NUMBER +. if r#START \{ .rr #START \} +. if r#EPIGRAPH \{ .rr #EPIGRAPH \} +. if r#QUOTE \{ .rr #QUOTE \} +. if r#Q_FITS \{ .rr #Q_FITS \} +. if r#END_QUOTE \{ .rr #END_QUOTE \} +. if r#LINEBREAK \{ .rr #LINEBREAK \} +. if r#Q_AT_TOP \{ .rr #Q_AT_TOP \} +. if r#PP_ACTIVE \{ .rr #PP_ACTIVE \} +. rr #ARG_NUM +. nr #PP 0 +.END +\# +\# +\# ---Subheads--- +\# +\# SUBHEAD FAMILY +\# -------------- +\# *Argument: +\# <family to use in subheads> +\# *Function: +\# Creates or modifies string $SH_FAM. +\# *Notes: +\# Default is same as running text. +\# +.MAC SUBHEAD_FAMILY END +. ds $SH_FAM \\$1 +.END +\# +\# +\# SUBHEAD FONT +\# -------------- +\# *Argument: +\# <font to use in subheads> +\# *Function: +\# Creates or modifies string $SH_FT. +\# *Notes: +\# Default is bold. +\# +.MAC SUBHEAD_FONT END +. ds $SH_FT \\$1 +.END +\# +\# +\# SUBHEAD SIZE +\# ------------ +\# *Argument: +\# <+|- number of points by which to in/decrease point size of subheads +\# (relative to running text)> +\# *Function: +\# Creates or modifies string $SH_SIZE_CHANGE. +\# *Notes: +\# Must be preceded by a +|- sign. No space afterwards. +\# Fractional point sizes are allowed. +\# Default is +.5 for printstyle TYPESET; +0 for TYPEWRITE. +\# +.MAC SUBHEAD_SIZE END +. ds $SH_SIZE_CHANGE \\$1 +.END +\# +\# +\# SUBHEAD QUAD +\# ------------ +\# *Argument: +\# L | LEFT | R | RIGHT | C | CENTER | CENTRE +\# *Function: +\# Creates or modifies string $SH_QUAD. +\# *Notes: +\# Default is LEFT for both TYPESET and TYPEWRITE. +\# +.MAC SUBHEAD_QUAD END +. ds $SH_QUAD \\$1 +.END +\# +\# +\# SUBHEAD +\# ------- +\# *Arguments: +\# "text of subhead" ["text of subhead"] ... +\# *Function: +\# In TYPEWRITE, prints subheads underlined. +\# In TYPESET, prints subheads bold, .5 points larger than running +\# text. +\# In both styles, a line space precedes the subhead, and a small +\# amount of lead comes after. +\# *Notes: +\# As with the HEAD macro, double-quotes (") must surround +\# each line of text. +\# +.MAC SUBHEAD END +. br +. nr #ARG_NUM 0 1 +. if r#QUOTE \{ .rr #QUOTE \} +. if r#Q_AT_TOP \{ .rr #Q_AT_TOP \} +. ev SUBHEAD +. ll \\n[#L_LENGTH]u +. ta \\n(.lu +. if \\n[#COLUMNS] \{\ +. ll \\n[#COL_L_LENGTH]u +. ta \\n(.lu +. \} +. CHECK_INDENT +. if \\n[#PRINT_STYLE]=1 \{\ +. fam C +. ft R +. ps 12 +. vs \\n[#DOC_LEAD]u +. QUAD \\*[$SH_QUAD] +. UNDERLINE OFF +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. FAMILY \\*[$SH_FAM] +. FT \\*[$SH_FT] +. PS \\n[#DOC_PT_SIZE]u\\*[$SH_SIZE_CHANGE] +. LS \\n[#DOC_LEAD]u +. QUAD \\*[$SH_QUAD] +. \} +. if \\n[#PRINT_STYLE]=1 \{ .nr #SH_LEAD_ADJUST \\n[#LEAD]/5 \} +. if \\n[#PRINT_STYLE]=2 \{ .nr #SH_LEAD_ADJUST \\n[#LEAD]/8 \} +. ie \\n[#START] \{ . \} +. el \{\ +. ie ( \\n[#TRAP_DISTANCE] < (\\n[#DOC_LEAD]u*2u) ) \{\ +. ie \\n[#COLUMNS] \{ .COL_NEXT \} +. el \{ .bp \} +. \} +. el \{\ +. ie \\n[#HEAD]=1 \{ . \} +. el \{\ +. if \\n[#PRINT_STYLE]=1 \{\ +. if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \} +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. ie \\n[#PP_SPACE]=1 \{\ +. ie !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \} +. el \{ .RLD \\n[#DOC_LEAD]u \} +. \} +. el \{\ +. if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \} +. \} +. \} +. \} +. \} +. \} +. if \\n[#PRINT_STYLE]=1 \{\ +. while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\ +. ie \\n[#NUMBER_SH] \{\ +. ie \\n[#ARG_NUM]=0 \{\ +. ie \\n[#NUMBER_HEAD] \{\ +. br +. UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\n[#HEAD_NUM].\\n+[#SH_NUM]\0\\$[\\n+[#ARG_NUM]] +. br +. \} +. el \{\ +. br +. UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]] +. br +. \} +. \} +. el \{\ +. br +. ie \\n[#HEAD_UNDERLINE]=0 \{ .PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]\} +. el \{ .UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]\} +. br +. \} +. \} +. el \{\ +. br +. UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]] +. br +. \} +. \} +. \} +. if \\n[#PRINT_STYLE]=1 \{\ +. if \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \} +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. ie \\n[#PP_SPACE]=0 \{\ +. while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\ +. ie \\n[#NUMBER_SH] \{\ +. ie \\n[#ARG_NUM]=0 \{\ +. ie \\n[#NUMBER_HEAD] \{\ +. br +. PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\n[#HEAD_NUM].\\n+[#SH_NUM]\0\\$[\\n+[#ARG_NUM]] +. br +. \} +. el \{\ +. br +. PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]] +. br +. \} +. \} +. el \{\ +. br +. PRINT "\\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]] +. br +. \} +. \} +. el \{\ +. br +. PRINT "\\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]] +. br +. \} +. \} +. \} +. el \{\ +. ALD \\n[#DOC_LEAD]u +. if \\n[#HEAD]=1 \{ .RLD \\n[#DOC_LEAD]u \} +. if \\n[#END_QUOTE] \{ .RLD \\n[#DOC_LEAD]u \} +. if \\n[#EPIGRAPH] \{ .RLD \\n[#DOC_LEAD]u \} +. while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\ +. PRINT "\\$[\\n+[#ARG_NUM]] +. \} +. ALD \\n[#DOC_LEAD]u +. \} +. \} +. REMOVE_INDENT +. ev +. RESET_PARAHEAD_NUMBER +. if r#START \{ .rr #START \} +. if r#EPIGRAPH \{ .rr #EPIGRAPH \} +. if r#Q_FITS \{ .rr #Q_FITS \} +. if r#END_QUOTE \{ .rr #END_QUOTE \} +. if r#LINEBREAK \{ .rr #LINEBREAK \} +. nr #PP 0 +. nr #HEAD 2 +.END +\# +\# ---Paragraph heads--- +\# +\# PARAHEAD FAMILY +\# --------------- +\# *Argument: +\# <family to use in paraheads> +\# *Function: +\# Creates or modifies string $PH_FAM. +\# *Notes: +\# Default is same as running text. +\# +.MAC PARAHEAD_FAMILY END +. ds $PH_FAM \\$1 +.END +\# +\# +\# PARAHEAD FONT +\# ------------- +\# *Argument: +\# <font to use in paraheads> +\# *Function: +\# Creates or modifies string $PH_FT. +\# *Notes: +\# Default is bold italic for TYPESET; underlined for TYPEWRITE. +\# +.MAC PARAHEAD_FONT END +. ds $PH_FT \\$1 +.END +\# +\# +\# PARAHEAD SIZE +\# ------------- +\# *Argument: +\# <+|- number of points by which to in/decrease point size of subheads +\# (relative to running text)> +\# *Function: +\# Creates or modifies string $PH_SIZE_CHANGE. +\# *Notes: +\# Must be preceded by a +|- sign. No space afterwards. +\# Fractional point sizes are allowed. No unit of measure, please. +\# Default is +.5 for printstyle TYPESET; +0 for TYPEWRITE. +\# +.MAC PARAHEAD_SIZE END +. ds $PH_SIZE_CHANGE \\$1 +.END +\# +\# +\# PARAHEAD INDENT +\# --------------- +\# *Argument: +\# <size of indent> +\# *Function: +\# Creates or modifies register #PH_INDENT. +\# *Notes: +\# Default is 1/2 #PP_INDENT for TYPESET and TYPEWRITE. +\# +.MAC PARAHEAD_INDENT END +. nr #PH_INDENT (\\$1) +.END +\# +\# +\# PARAHEAD +\# -------- +\# *Arguments: +\# "<para head>" +\# *Function: +\# Deposits a paragraph head at the start and into the body of a +\# paragraph. +\# *Notes: +\# PARAHEAD *must* come after PP. +\# +.MAC PARAHEAD END +. if \\n[#SLANT_ON] \{\ +. nr #SLANT_WAS_ON 1 +. \\*[SLANTX]\c +. \} +. ie \\n[#PP]=1 \{\ +. if \\n[#INDENT_FIRST_PARAS] \{\ +. ti \\n[#PH_INDENT]u +. \} +. \} +. el \{ .ti \\n[#PH_INDENT]u \} +. if \\n[#PRINT_STYLE]=1 \{\ +. fam C +. ft R +. ps 12 +. UNDERLINE OFF +. ie \\n[#NUMBER_PH] \{\ +. if \\n[#NUMBER_HEAD] \{\ +. ie \\n[#NUMBER_SH] \{\ +. UNDERSCORE "\R'#NUMBERED 1'\\n[#HEAD_NUM].\\n[#SH_NUM].\\n+[#PH_NUM].\\ \\$1" +\0 +. \} +. el \{\ +. UNDERSCORE "\R'#NUMBERED 1'\\n[#HEAD_NUM].\\n+[#PH_NUM].\\ \\$1 +\0 +. \} +. \} +. ie \\n[#NUMBER_SH] \{\ +. if !\\n[#NUMBERED] \{\ +. UNDERSCORE "\\n[#SH_NUM].\\n+[#PH_NUM].\\ \\$1 +\0 +. \} +. \} +. el \{\ +. if !\\n[#NUMBERED] \{\ +. UNDERSCORE "\\n+[#PH_NUM].\\ \\$1 +\0 +. \} +. \} +. \} +. el \{\ +. UNDERSCORE "\\$1 +\0 +. \} +. if \\n[#SLANT_WAS_ON] \{\ +. if \\n[#UNDERLINE_SLANT] \{ .UNDERLINE \} +. if \\n[#SLANT_MEANS_SLANT] \{\ +. \\*[SLANT]\c +. \} +. rr #SLANT_WAS_ON +. \} +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. FAM \\*[$PH_FAM] +. FT \\*[$PH_FT] +. PS \\*[$PH_SIZE_CHANGE] +. ie \\n[#NUMBER_PH] \{\ +. if \\n[#NUMBER_HEAD] \{\ +. ie \\n[#NUMBER_SH] \{\ +. PRINT "\R'#NUMBERED 1'\\n[#HEAD_NUM].\\n[#SH_NUM].\\n+[#PH_NUM].\0\\$1\h'.6m'\c" +. \} +. el \{\ +. PRINT "\R'#NUMBERED 1'\\n[#HEAD_NUM].\\n+[#PH_NUM].\0\\$1\h'.6m'\c" +. \} +. \} +. ie \\n[#NUMBER_SH] \{\ +. if !\\n[#NUMBERED] \{\ +. PRINT "\\n[#SH_NUM].\\n+[#PH_NUM].\0\\$1\h'.6m'\c" +. \} +. \} +. el \{\ +. if !\\n[#NUMBERED] \{\ +. PRINT "\\n+[#PH_NUM].\0\\$1\h'.6m'\c" +. \} +. \} +. \} +. el \{\ +. PRINT "\\$1\h'.6m'\c" +. \} +. FAMILY \\*[$DOC_FAM] +. FT \\*[$PP_FT] +. PS \\n[#DOC_PT_SIZE]u +. if \\n[#SLANT_WAS_ON] \{\ +. rr #SLANT_WAS_ON 1 +. \\*[SLANT]\c +. \} +. \} +. rr #NUMBERED +.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 horiontally. +\# *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 +. ds $LINEBREAK_CHAR_V_ADJ \\$3 +. if '\\*[$LINEBREAK_CHAR_V_ADJ]'' \{\ +. ds $LINEBREAK_CHAR_V_ADJ +0 +. \} +. while \\$2>\\n[#REPEAT] \{\ +. as $LINEBREAK_CHAR "\\ \\$1 +. nr #REPEAT \\n[#REPEAT]+1 +. \} +. rr #REPEAT +.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 \} +. po \\n[#DOC_L_MARGIN]u +. ie '\\*[$LINEBREAK_CHAR]'' \{ .ALD \\n[#DOC_LEAD]u*2 \} +. el \{\ +. if \\n[#PRINT_STYLE]=1 \{\ +. ie \\n[#END_QUOTE] \{ . \} +. el \{ .ALD \\n[#DOC_LEAD]u \} +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. ie \\n[#END_QUOTE] \{ . \} +. el \{ .ALD \\n[#DOC_LEAD]u \} +. \} +. CENTER +. PRINT \\v'\\*[$LINEBREAK_CHAR_V_ADJ]'\\*[$LINEBREAK_CHAR]\\v'\\*[$LINEBREAK_CHAR_V_ADJ]' +. if \\n[#PRINT_STYLE]=1 \{ .ALD \\n[#DOC_LEAD]u \} +. if \\n[#PRINT_STYLE]=2 \{ .ALD \\n[#DOC_LEAD]u \} +. QUAD \\*[$DOC_QUAD] +. \} +. nr #LINEBREAK 1 +. if r#QUOTE \{ .rr #QUOTE \} +. if r#END_QUOTE \{ .rr #END_QUOTE \} +. nr #PP 0 +.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[#IGNORE] \{ .return \} +. br +. 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 +\# ydocs_printstyle, not in ydocs_defaults. +\# +.MAC PARA_INDENT END +. nr #PP_INDENT (\\$1) +.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 ON is not recommended for use +\# with PRINTSTYLE TYPEWRITE. +\# +.MAC PARA_SPACE END +. ie '\\$1'' \{ .nr #PP_SPACE 1 \} +. el \{ .rr #PP_SPACE \} +.END +\# +\# +\# PARAGRAPH +\# --------- +\# *Arguments: +\# <none> +\# *Function: +\# Figures out what to do with paragraphs under differing conditions. +\# *Notes: +\# For the time being, there's no automatic widow/orphan control. +\# Controlling them isn't just a matter of establishing an arbitrary +\# number of lines needed for a para, since groff doesn't then +\# handle single line paragraphs gracefully. Usually, the whole +\# page needs to be tweaked. +\# +\# 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 +. br +. if \\n[#DOC_TYPE]=4 \{\ +. if !'\\n(.z'' \{ .di \} +. if \\n[#DATE] \{\ +. nf +. DATE +. QUAD \\*[$DOC_QUAD] +. ALD \\n[#DOC_LEAD]u*2u +. rr #DATE +. \} +. if \\n[#TO] \{\ +. nf +. TO_ADDRESS +. ALD \\n[#DOC_LEAD]u +. rr #TO +. \} +. if \\n[#FROM] \{\ +. nf +. FROM_ADDRESS +. ALD \\n[#DOC_LEAD]u +. rr #FROM +. \} +. if \\n[#GREETING] \{\ +. nf +. GREETING +. ALD \\n[#DOC_LEAD]u +. rr #GREETING +. \} +. \} +. rr #PP_ACTIVE +. if r#Q_AT_TOP \{ .rr #Q_AT_TOP \} +. if \\n[#PP_STYLE]=1 \{\ +. br +. po \\n[#L_MARGIN]u +. if \\n[#COLUMNS] \{\ +. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u +. \} +. if \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \} +. ie \\n[#PRINT_STYLE]=1 \{\ +. fam C +. ft R +. ps 12 +. vs \\n[#DOC_LEAD]u +. QUAD \\*[$DOC_QUAD] +. UNDERLINE OFF +. if \\n[#SLANT_ON] \{\ +. if \\n[#UNDERLINE_SLANT] \{ .UNDERLINE \} +. \} +. \} +. el \{\ +. FAMILY \\*[$DOC_FAM] +. FT \\*[$PP_FT] +. PS \\n[#DOC_PT_SIZE]u +. LS \\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 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 \} +. \} +. \} +. \} +. \} +. el \{\ +. br +. if \\n[#PP_SPACE] \{\ +. if \\n[#PRINT_STYLE]=2 \{\ +. ie \\n[#END_QUOTE] \{\ +. rr #END_QUOTE +. \} +. el \{ .ALD \\n[#DOC_LEAD]u \} +. \} +. \} +. ie \\n[#INDENT_ACTIVE] \{ .ti \\n[#INDENT]u+\\n[#PP_INDENT]u \} +. el \{ .ti \\n[#PP_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#EPIGRAPH \{ .rr #EPIGRAPH \} +. if r#Q_FITS \{ .rr #Q_FITS \} +. if r#LINEBREAK \{ .rr #LINEBREAK \} +. if \\n[#CONDENSE] \{\ +\E*[COND]\c +. \} +. if \\n[#EXTEND]=1 \{\ +\E*[EXT]\c +. \} +. nr #PP +1 +. \} +. if \\n[#PP_STYLE]=2 \{\ +\!. br +. if \\n[#BROKEN_QUOTE] \{\ +. ie \\n(nl=\\n[#PAGE_TOP] \{ .nr #Q_PP 1\} +. el \{ .nr #Q_PP 0 \} +. rr #BROKEN_QUOTE +. \} +. ie \\n[#Q_PP]=0 \{\ +. if \\n[#INDENT_FIRST_PARAS] \{\ +. ti \\n[#PP_INDENT]u/2u +. \} +. \} +. el \{\ +. ti \\n[#PP_INDENT]u/2u +. \} +. if \\n[#CONDENSE] \{\ +\E*[COND]\c +. \} +. if \\n[#EXTEND]=1 \{\ +\E*[EXT]\c +. \} +. nr #Q_PP +1 +. \} +. nr #PP_ACTIVE 1 +.END +\# +\# ==================================================================== +\# +\# +++QUOTES+++ +\# +\# ---Line for line (poetic) quotes--- +\# +\# QUOTE FAMILY +\# ------------ +\# *Argument: +\# <family to use in line for line quotes> +\# *Function: +\# Creates or modifies string $QUOTE_FAM. +\# *Notes: +\# Default is same as running text. +\# +.MAC QUOTE_FAMILY END +. ds $QUOTE_FAM \\$1 +.END +\# +\# +\# QUOTE FONT +\# ---------- +\# *Argument: +\# <font to use in line for line quotes> +\# *Function: +\# Creates or modifies string $QUOTE_FT. +\# *Notes: +\# Default is italic for TYPESET. +\# +.MAC QUOTE_FONT END +. ds $QUOTE_FT \\$1 +.END +\# +\# +\# QUOTE SIZE +\# ---------- +\# *Argument: +\# <-|+ number of points by which to de/increase point size of +\# line for line quotes (relative to running text)> +\# *Function: +\# Creates or modifies string $QUOTE_SIZE_CHANGE. +\# *Notes: +\# Must be preceded by a - or + sign with no space afterwards. +\# Fractional point sizes are allowed. +\# Default is +0. +\# +.MAC QUOTE_SIZE END +. ds $QUOTE_SIZE_CHANGE \\$1 +.END +\# +\# +\# 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: +\# <value by which to multiply PP_INDENT for indented quoted text> +\# *Function: +\# Creates or modifies register #Q_OFFSET_VALUE. +\# *Notes: +\# Default is 3 for typeset; 2 for typewrite +\# +.MAC QUOTE_INDENT END +. nr #Q_OFFSET_VALUE \\$1 +.END +\# +\# +\# 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 +. br +\# **Uncomment the next line to prevent orphaned quote lines. +\#. ne 1 +. ie '\\$1'' \{\ +. ev QUOTE +. nr #QUOTE 1 +. di P_QUOTE +. ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u) +. ta \\n(.lu +. if \\n[#COLUMNS] \{\ +. ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u) +. ta \\n(.lu +. \} +. if \\n[#PRINT_STYLE]=1 \{\ +. fam C +. ft R +. ps 12 +. 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] +. LS \\n[#DOC_LEAD]u +. LEFT +. \} +. nr #Q_TOP \\n(nl +. if \\n[#PRINT_STYLE]=1 \{\ +. if \\n[#UNDERLINE_QUOTES] \{\ +\#. UNDERLINE +. FT I +. \} +. \} +. \} +. el \{ .DO_QUOTE \} +.END +\# +\# +\# ---Blockquotes--- +\# +\# BLOCKQUOTE FAMILY +\# ----------------- +\# *Argument: +\# <family to use in blockquotes> +\# *Function: +\# Creates or modifies string $BQUOTE_FAM. +\# *Notes: +\# Default is same as running text. +\# +.MAC BLOCKQUOTE_FAMILY END +. ds $BQUOTE_FAM \\$1 +.END +\# +\# +\# BLOCKQUOTE FONT +\# --------------- +\# *Argument: +\# <font to use in blockquotes> +\# *Function: +\# Creates or modifies string $BQUOTE_FT. +\# *Notes: +\# Default is same as running text. +\# +.MAC BLOCKQUOTE_FONT END +. ds $BQUOTE_FT \\$1 +.END +\# +\# +\# BLOCKQUOTE SIZE +\# --------------- +\# *Argument: +\# <-|+ number of points by which to de/increase point size of blockquotes +\# (relative to running text)> +\# *Function: +\# Creates or modifies string $BQUOTE_SIZE_CHANGE. +\# *Notes: +\# Must be preceded by a - or + sign with no space afterwards. +\# Fractional point sizes are allowed. +\# Default is -1 for printstyle TYPESET; +0 for TYPEWRITE. +\# +.MAC BLOCKQUOTE_SIZE END +. ds $BQUOTE_SIZE_CHANGE \\$1 +.END +\# +\# +\# BLOCKQUOTE QUAD +\# --------------- +\# *Arguments: +\# <quad to use in blockquotes> +\# *Function: +\# Creates or modifies string $BQUOTE_QUAD. +\# *Notes: +\# Default is LEFT. +\# +.MAC BLOCKQUOTE_QUAD END +. ds $BQUOTE_QUAD \\$1 +.END +\# +\# +\# BLOCKQUOTE +\# ---------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Indents quoted text in fill mode and shortens line length +\# accordingly, 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 +. br +. ie '\\$1'' \{\ +. ev BLOCKQUOTE +. nr #QUOTE 2 +. nr #PP_STYLE 2 +. nr #Q_PP 0 +. di B_QUOTE +. ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u)) +. ta \\n(.lu +. CHECK_INDENT +. if \\n[#COLUMNS] \{\ +. ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u)) +. ta \\n(.lu +. \} +. if \\n[#PRINT_STYLE]=1 \{\ +. fam C +. ft R +. ps 12 +. 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] +. LS \\n[#DOC_LEAD]u +. QUAD \\*[$BQUOTE_QUAD] +. HY +. \} +. nr #Q_TOP \\n(nl +. if \\n[#INDENT_FIRST_PARAS] \{\ +. if \\n[#PRINT_STYLE]=1 \{ .ti \\n[#PP_INDENT]u/2u \} +. if \\n[#PRINT_STYLE]=2 \{ .ti \\n[#PP_INDENT]u/2u \} +. \} +. \} +. el \{ .DO_QUOTE \} +.END +\# +\# +\# DO QUOTE +\# -------- +\# *Arguments: +\# <none> +\# *Function: +\# Ends the diversion P_QUOTE or B_QUOTE. Spaces them according to +\# PRINT_STYLE, 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 the page; otherwise it puts in a full extra blank +\# line. (This is to ensure the page remains bottom aligned). +\# +.MAC DO_QUOTE END +. di +. REMOVE_INDENT +. ev +\# **Change *1 to *2 in next line to prevent orphans after quotes +. nr #Q_DEPTH \\n[#DIVER_DEPTH]+(\\n[#LEAD]*1) +. 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]=1 \{ . \} +. el \{\ +. if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \} +. \} +. \} +. el \{\ +. ie \\n[#Q_DEPTH]<\\n[#TRAP_DISTANCE] \{\ +. nr #Q_FITS 1 +. ie \\n[#HEAD] \{\ +. if \\n[#HEAD]=1 \{ . \} +. \} +. el \{\ +. ie \\n[#START] \{ . \} +. el \{\ +. ie \\n[#HEAD] \{\ +. if \\n[#HEAD]=1 \{ . \} +. \} +. el \{\ +. ie \\n[#FULLSPACE_QUOTES] \{ .ALD \\n[#LEAD]u \} +. el \{ .ALD \\n[#LEAD]u/2u \} +. \} +. \} +. \} +. \} +. el \{\ +. rr #Q_FITS +. ie r#HEAD \{\ +. if \\n[#HEAD]=1 \{ . \} +. \} +. el \{ .ALD \\n[#DOC_LEAD]u \} +. \} +. \} +. \} +. nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) +. if \\n[#COLUMNS] \{ .nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) \} +. po \\n[#Q_OFFSET]u +. if \\n[#QUOTE]=1 \{\ +. nf +. P_QUOTE +. if !\\n[#START] \{ .rr #QUOTE \} +. \} +. if \\n[#QUOTE]=2 \{\ +. nf +. B_QUOTE +. \} +. if \\n[#PRINT_STYLE]=1 \{\ +. ALD \\n[#DOC_LEAD]u +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. ie \\n[#START] \{\ +. ie \\n[#PP_SPACE] \{ .ALD \\n[#DOC_LEAD]u \} +. el \{\ +. ie r#HEAD \{\ +. if \\n[#HEAD]=1 \{ .ALD \\n[#DOC_LEAD]u \} +. \} +. el \{ .ALD \\n[#DOC_LEAD]u \} +. \} +. \} +. el \{\ +. ie \\n[#PP_SPACE] \{ .ALD \\n[#DOC_LEAD]u \} +. el \{\ +. ie \\n[#HEAD]=1 \{ .ALD \\n[#DOC_LEAD]u \} +. el \{\ +. ie \\n[#Q_FITS] \{\ +. ie \\n[#Q_TOP]=\\n[#PAGE_TOP] \{\ +. nr #Q_AT_TOP 1 +. ALD \\n[#DOC_LEAD]u +. \} +. el \{\ +. ie \\n[#FULLSPACE_QUOTES] \{ .ALD \\n[#LEAD]u \} +. el \{ .ALD \\n[#LEAD]u/2u \} +. \} +. \} +. el \{ .ALD \\n[#DOC_LEAD]u \} +. \} +. \} +. \} +. \} +. 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[#PRINT_STYLE]=1 \{\ +\#. if \\n[#UNDERLINE_QUOTES] \{\ +\#. UNDERLINE OFF +\#. \} +\#. \} +. po \\n[#L_MARGIN]u +. if \\n[#COLUMNS] \{ .po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u \} +. nr #RESET_PP_INDENT \\n[#PP_INDENT] +. PARA_INDENT 0 +. PP +. PARA_INDENT \\n[#RESET_PP_INDENT] +. QUAD \\*[$DOC_QUAD] +.END +\# +\# ==================================================================== +\# +\# BREAK QUOTE +\# ----------- +\# *Arguments: +\# <none> +\# *Function: +\# Ends the diversion P_QUOTE or B_QUOTE, breaks to a new +\# page, and reinvokes BLOCKQUOTE. +\# *Notes: +\# Because quotes go into a diversion before they're output, +\# footnotes in quotes that cross pages behave erratically. The footnote +\# isn't processed until the diversion ends, hence the footnote +\# marker in the quote isn't always correct for the new page (it's +\# picked up from the old one). BREAK_QUOTE is a workaround for +\# this problem. +\# +.MAC BREAK_QUOTE END +. br +. di +. nr #BROKEN_QUOTE 1 +. REMOVE_INDENT +. ev +. nr #Q_DEPTH \\n[#DIVER_DEPTH]+(\\n[#LEAD]*1) +. if \\n[#PRINT_STYLE]=1 \{\ +. 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]=1 \{ . \} +. el \{\ +. if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \} +. \} +. \} +. el \{\ +. rr #Q_FITS +. ie r#HEAD \{\ +. if \\n[#HEAD]=1 \{ . \} +. \} +. el \{ .ALD \\n[#DOC_LEAD]u \} +. \} +. \} +. nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) +. if \\n[#COLUMNS] \{ .nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) \} +. po \\n[#Q_OFFSET]u +. if \\n[#QUOTE]=1 \{\ +. nf +. P_QUOTE +. if !\\n[#START] \{ .rr #QUOTE \} +. \} +. if \\n[#QUOTE]=2 \{\ +. nf +. B_QUOTE +. \} +. 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[#PRINT_STYLE]=1 \{\ +. if \\n[#UNDERLINE_QUOTES] \{\ +. UNDERLINE OFF +. \} +. \} +. po \\n[#L_MARGIN]u +. if \\n[#COLUMNS] \{ .po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u \} +. QUAD \\*[$DOC_QUAD] +. sp |\\n[#PAGE_LENGTH]u \" To trip footer/header +. BLOCKQUOTE +.END +\# +\# ==================================================================== +\# +\# +++PAGINATION+++ +\# +\# PAGINATE +\# -------- +\# *Arguments: +\# <none> | <anything> +\# *Function: +\# Turns page numbering off or on. +\# *Notes: +\# Page numbering is on by default with .PAPER. +\# Default is on. +\# +.MAC PAGINATE END +. ie '\\$1'' \{ .nr #PAGINATE 1 \} +. el \{ .nr #PAGINATE 0 \} +.END +\# +\# +\# PAGENUMBER FAMILY +\# ----------------- +\# *Argument: +\# <family to use for page numbers> +\# *Function: +\# Creates or modifies string $PAGE_NUM_FAM. +\# *Notes: +\# Default is same as running text. +\# +.MAC PAGENUM_FAMILY END +. ds $PAGE_NUM_FAM \\$1 +.END +\# +\# +\# PAGE NUMBER FONT +\# ---------------- +\# *Arguments: +\# <font to use for page numbers> +\# *Function: +\# Creates or modifies string $PAGE_NUM_FT. +\# *Notes: +\# Default is same as running text. +\# +.MAC PAGENUM_FONT END +. ds $PAGE_NUM_FT \\$1 +.END +\# +\# +\# PAGE NUMBER SIZE +\# ---------------- +\# *Argument: +\# <+|- number of points by which to in/decrease point size of +\# page numbers (relative to running text)> +\# *Function: +\# Creates or modifies string $PAGE_NUM_SIZE_CHANGE. +\# *Notes: +\# Must be preceded by a +|- sign with no space afterward. +\# Fractional point sizes are allowed. +\# Default is +0. +\# +.MAC PAGENUM_SIZE END +. ds $PAGE_NUM_SIZE_CHANGE \\$1 +.END +\# +\# +\# PAGE NUMBER FORMAT +\# ------------------ +\# *Arguments: +\# ARABIC | ROMAN | roman | ALPHA | alpha +\# *Function: +\# Assigns user entered format to #PAGENUMBER. +\# +.MAC PAGENUM_STYLE END +. if '\\$1'DIGIT' \{ .af #PAGENUMBER 1 \} +. if '\\$1'ROMAN' \{ .af #PAGENUMBER I \} +. if '\\$1'roman' \{ .af #PAGENUMBER i \} +. if '\\$1'ALPHA' \{ .af #PAGENUMBER A \} +. if '\\$1'alpha' \{ .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 +\# +\# +\# PRINT PAGE NUMBER +\# ----------------- +\# *Arguments: +\# <none> +\# *Function: +\# Prints page number if PAGEINATE=1. +\# +.MAC PRINT_PAGE_NUMBER END +. ev PAGENUMBER +. po \\n[#DOC_L_MARGIN]u +. ll \\n[#DOC_L_LENGTH]u +. ta \\n(.lu +. FAMILY \\*[$PAGE_NUM_FAM] +. FT \\*[$PAGE_NUM_FT] +. PS \\n[#DOC_PT_SIZE]u\\*[$PAGE_NUM_SIZE_CHANGE] +. if \\n[#PRINT_STYLE]=1 \{\ +. fam C +. ft R +. ps 12 +. \} +. 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] +. ie \\n[#PAGE_NUM_HYPHENS] \{ .PRINT "- \\n[#PAGENUMBER] -" \} +. el \{ .PRINT "\\n[#PAGENUMBER]" \} +. ev +.END +\# +\# ==================================================================== +\# +\# +++FOOTNOTES+++ +\# +\# FOOTNOTE FAMILY +\# -------------- +\# *Argument: +\# <family to use in footnotes> +\# *Function: +\# Creates or modifies string $FN_FAM. +\# *Notes: +\# Default is same as running text. +\# +.MAC FOOTNOTE_FAMILY END +. ds $FN_FAM \\$1 +.END +\# +\# +\# FOOTNOTE FONT +\# -------------- +\# *Argument: +\# <font to use in footnotes> +\# *Function: +\# Creates or modifies string $FN_FT. +\# *Notes: +\# Default is roman. +\# +.MAC FOOTNOTE_FONT END +. ds $FN_FT \\$1 +.END +\# +\# +\# FOOTNOTE SIZE +\# ------------ +\# *Argument: +\# <+|- number of points by which to in/decrease point size of footnotes +\# (relative to running text)> +\# *Function: +\# Creates or modifies string $FN_SIZE_CHANGE. +\# *Notes: +\# Must be preceded by a +|- sign. No space afterwards. +\# Fractional point sizes are allowed. +\# Default is -2 for printstyle TYPESET; +0 for TYPEWRITE. +\# +.MAC FOOTNOTE_SIZE END +. ds $FN_SIZE_CHANGE \\$1 +.END +\# +\# +\# 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 \\$1 +.END +\# +\# +\# FOOTNOTE QUAD +\# ------------- +\# *Arguments: +\# <quad to use in footnotes> +\# *Function: +\# Creates or modifies string $FN_QUAD. +\# *Notes: +\# Default is same as running text. +\# +.MAC FOOTNOTE_QUAD END +. ds $FN_QUAD \\$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 +\# *Function: +\# Sets register #FN_MARKER_STYLE, used in FOOTNOTE to determine +\# the style of footnote markers. +\# *Notes: +\# 1=STAR; 2=NUMBER. Default is STAR. +\# +.MAC FOOTNOTE_MARKER_STYLE END +. if '\\$1'STAR' \{\ +. nr #FN_MARKER_STYLE 1 +. \} +. if '\\$1'NUMBER' \{\ +. nr #FN_MARKER_STYLE 2 +. \} +.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 \} +\!. PS 12 \"Not sure why these have to be transparently embedded, but they do. +. RLD 1v +. LEFT +. PRINT \\v'-\\n[#FN_RULE_ADJ]u'\\l'\\n[#FN_RULE_LENGTH]u'\\v'+\\n[#FN_RULE_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 +\# -------- +\# *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 FOOTNOTES 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[#FN_MARKERS] \{\ +. if \\n[#CONDENSE] \{ \*[CONDX]\c \} +. if \\n[#EXTEND] \{ \*[EXTX]\c \} +. if !\\n[#NO_FN_MARKER] \{\ +. if \\n[#FN_MARKER_STYLE]=1 \{\ +. ie \\n[#FN_COUNT_FOR_COLS] \{\ +. if \\n[#FN_COUNT_FOR_COLS]=0 \{ .PRINT \*[BU3]* \} +. if \\n[#FN_COUNT_FOR_COLS]=1 \{ .PRINT \*[BU3]\(dg \} +. if \\n[#FN_COUNT_FOR_COLS]=2 \{ .PRINT \*[BU3]** \} +. if \\n[#FN_COUNT_FOR_COLS]=3 \{ .PRINT \*[BU3]\(dg\(dg \} +. if \\n[#FN_COUNT_FOR_COLS]=4 \{ .PRINT \*[BU3]*** \} +. if \\n[#FN_COUNT_FOR_COLS]=5 \{ .PRINT \*[BU3]\(dg\(dg\(dg \} +. if \\n[#FN_COUNT_FOR_COLS]=6 \{ .PRINT \*[BU3]**** \} +. if \\n[#FN_COUNT_FOR_COLS]=7 \{ .PRINT \*[BU3]\(dg\(dg\(dg\(dg \} +. if \\n[#FN_COUNT_FOR_COLS]=8 \{ .PRINT \*[BU3]***** \} +. if \\n[#FN_COUNT_FOR_COLS]=9 \{ .PRINT \*[BU3]\(dg\(dg\(dg\(dg\(dg \} +. \} +. el \{\ +. if \\n[#FN_COUNT]=0 \{ .PRINT \*[BU3]* \} +. if \\n[#FN_COUNT]=1 \{ .PRINT \*[BU3]\(dg \} +. if \\n[#FN_COUNT]=2 \{ .PRINT \*[BU3]** \} +. if \\n[#FN_COUNT]=3 \{ .PRINT \*[BU3]\(dg\(dg \} +. if \\n[#FN_COUNT]=4 \{ .PRINT \*[BU3]*** \} +. if \\n[#FN_COUNT]=5 \{ .PRINT \*[BU3]\(dg\(dg\(dg \} +. if \\n[#FN_COUNT]=6 \{ .PRINT \*[BU3]**** \} +. if \\n[#FN_COUNT]=7 \{ .PRINT \*[BU3]\(dg\(dg\(dg\(dg \} +. if \\n[#FN_COUNT]=8 \{ .PRINT \*[BU3]***** \} +. if \\n[#FN_COUNT]=9 \{ .PRINT \*[BU3]\(dg\(dg\(dg\(dg\(dg\(dg \} +. \} +. \} +. 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" \} +. if \\n[#PRINT_STYLE]=2 \{ .PRINT "\*[SUP]\\n+[#FN_NUMBER]\*[SUPX]" \} +. \} +. \} +. \} +. nr #SPACE_REMAINING \\n[#PAGE_LENGTH]-\\n[#B_MARGIN]-(\\n(nl+1v) +. nr #PP_STYLE_PREV \\n[#PP_STYLE] +. nr #PP_STYLE 2 +. if \\n[#INDENT_FIRST_PARAS] \{ .nr #INDENT_FIRSTS 1 \} +. INDENT_FIRST_PARAS +. ev FOOTNOTES +. ll \\n[#DOC_L_LENGTH]u +. ta \\n(.lu +. if \\n[#COLUMNS] \{\ +. ll \\n[#COL_L_LENGTH]u +. ta \\n(.lu +. \} +. if \\n[#FN_R_INDENT] \{\ +. ll -\\n[#FN_R_INDENT]u +. ta \\n(.lu +. \} +. if \\n[#FN_BR_INDENT] \{\ +. ll -\\n[#FN_BR_INDENT]u +. ta \\n(.lu +. \} +. FAMILY \\*[$FN_FAM] +. FT \\*[$FN_FT] +. PS \\n[#DOC_PT_SIZE]u\\*[$FN_SIZE_CHANGE] +. AUTOLEAD \\n[#FN_AUTOLEAD] +. QUAD \\*[$FN_QUAD] +. if \\n[#PRINT_STYLE]=1 \{\ +. fam C +. ft R +. ps 12 +. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u \} +. el \{ .vs \\n[#DOC_LEAD]u/2u \} +. QUAD LEFT +. HY OFF +. \} +. nr #FN_LEAD \\n[#LEAD] +. da FOOTNOTES +. if \\n[#EPIGRAPH] \{ .nr #FN_FOR_EPI 1 \} +. if \\n[#FN_DEFER_SPACE] \{\ +. if \\n[#FN_MARKER_STYLE]=1 \{ .ALD 1v \} +. if \\n[#RESET_FN_NUMBER] \{ .ALD 1v \} +. rr #FN_DEFER_SPACE +. \} +. if \\n+[#FN_COUNT]=1 \{\ +. if !\\n[#FN_DEPTH] \{\ +. if \\n[#PRINT_STYLE]=1 \{ .ALD \\n[#DOC_LEAD]u \} +. ie \\n[#FN_RULE] \{ .PRINT_FOOTNOTE_RULE \} +. el \{ .ALD 1v \} +. \} +. \} +. if \\n[#FN_MARKERS] \{\ +. if !\\n[#NO_FN_MARKER] \{\ +. if \\n[#FN_MARKER_STYLE]=1 \{\ +. ie \\n+[#FN_COUNT_FOR_COLS] \{\ +. if \\n[#FN_COUNT_FOR_COLS]=1 \{ .PRINT *\c \} +. if \\n[#FN_COUNT_FOR_COLS]=2 \{ .PRINT \(dg\c \} +. if \\n[#FN_COUNT_FOR_COLS]=3 \{ .PRINT **\c \} +. if \\n[#FN_COUNT_FOR_COLS]=4 \{ .PRINT \(dg\(dg\c \} +. if \\n[#FN_COUNT_FOR_COLS]=5 \{ .PRINT ***\c \} +. if \\n[#FN_COUNT_FOR_COLS]=6 \{ .PRINT \(dg\(dg\(dg\c \} +. if \\n[#FN_COUNT_FOR_COLS]=7 \{ .PRINT ****\c \} +. if \\n[#FN_COUNT_FOR_COLS]=8 \{ .PRINT \(dg\(dg\(dg\(dg\c \} +. if \\n[#FN_COUNT_FOR_COLS]=9 \{ .PRINT *****\c \} +. if \\n[#FN_COUNT_FOR_COLS]=10 \{ .PRINT \(dg\(dg\(dg\(dg\(dg\c \} +. \} +. el \{\ +. if \\n[#FN_COUNT]=1 \{ .PRINT *\c \} +. if \\n[#FN_COUNT]=2 \{ .PRINT \(dg\c \} +. if \\n[#FN_COUNT]=3 \{ .PRINT **\c \} +. if \\n[#FN_COUNT]=4 \{ .PRINT \(dg\(dg\c \} +. if \\n[#FN_COUNT]=5 \{ .PRINT ***\c \} +. if \\n[#FN_COUNT]=6 \{ .PRINT \(dg\(dg\(dg\c \} +. if \\n[#FN_COUNT]=7 \{ .PRINT ****\c \} +. if \\n[#FN_COUNT]=8 \{ .PRINT \(dg\(dg\(dg\(dg\c \} +. if \\n[#FN_COUNT]=9 \{ .PRINT *****\c \} +. if \\n[#FN_COUNT]=10 \{ .PRINT \(dg\(dg\(dg\(dg\(dg\c \} +. \} +. \} +. if \\n[#FN_MARKER_STYLE]=2 \{\ +. if \\n[#PRINT_STYLE]=1 \{ .PRINT "(\\n[#FN_NUMBER])\c" \} +. if \\n[#PRINT_STYLE]=2 \{ .PRINT "\*[SUP]\\n[#FN_NUMBER]\*[SUPX]\c" \} +. \} +. \} +. \} +. \} +. el \{\ +. 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 +. FOOTNOTE +. \} +. el \{\ +. br +. di +. in 0 \"Turn off indent possibly set by FOOTNOTE INDENT... +. ev +. 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 +. nr #FN_DEPTH +\\n[#DIVER_DEPTH] +. if \\n[#FN_DEFER] \{\ +. nr #FN_DEFER_SPACE 1 +. rr #FN_DEFER +. \} +. if \\n[#FN_DEPTH]>\\n[#SPACE_REMAINING] \{\ +. ie \\n[#SPACE_REMAINING]<(\\n[#LEAD]*2) \{ .nr #FN_DEFER 1 \} +. el \{\ +. 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 #VARIABLE_FOOTER_POS -\\n[#DIVER_DEPTH] +. if \\n[#FN_COUNT]=1 \{ .nr #VARIABLE_FOOTER_POS -1v \} +. \} +. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u +. if (\\n(nl+1v)>(\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS]) \{\ +. ch FOOTER \\n(nlu+1v +. \} +. 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[#PRINT_STYLE]=1 \{\ +. if \\n[#SLANT_ON] \{\ +. if \\n[#UNDERLINE_SLANT] \{ .UNDERLINE \} +. \} +. \} +.END +\# +\# +.MAC FN_OVERFLOW_TRAP END +. if \\n[#FN_COUNT] \{\ +. di FN_OVERFLOW +. \} +.END +\# +\# +.MAC DIVERT_FN_LEFTOVER END +. nr #NO_FN_MARKER 1 +. nr #OVERFLOW 1 +. FOOTNOTE +. nf +. FN_OVERFLOW +. FOOTNOTE OFF +. rr #FN_OVERFLOW_DEPTH +.END +\# +\# +.MAC PROCESS_FN_LEFTOVER END +. if !\\n[#FN_DEFER] \{\ +. nr #FN_COUNT 0 1 +. nr #FN_DEPTH 0 +. nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN] +. \} +. if \\n[#FN_DEFER] \{\ +. nr #VARIABLE_FOOTER_POS -(\\n[#FN_DEPTH]+\\n[#DOC_LEAD]) +. \} +. nr #SPACE_REMAINING 0 +. ch FOOTER -\\n[#B_MARGIN]u +. if \\n[#FN_DEFER] \{\ +. nr #NO_FN_MARKER 1 +. da FOOTNOTES +. di +. FOOTNOTE +. nf +. FOOTNOTE OFF +. \} +. if !\\n[#FN_DEFER] \{\ +. if \\n[#FN_OVERFLOW_DEPTH] \{\ +. DIVERT_FN_LEFTOVER +. \} +. \} +. nr #FN_COUNT 0 1 +.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] +. \} +. rr #COL_TOTAL +. rr #COL_NUM +.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 +. ie '\\$0'COL_NEXT' \{ .br \} +. el \{\ +. brp +. RLD 1v +. \} +. ie \\n[#COL_NUM]=\\n[#NUM_COLS] \{\ +. bp +. \} +. el \{ .FOOTER \} +. \} +.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 COLLATE (and any other +\# macros that alter mom's behaviour). +\# +.MAC COLLATE END +. nr #COLLATE 1 +. nr #HEADER_STATE \\n[#HEADERS_ON] +. HEADERS OFF +. if \\n[#PAGE_NUM_V_POS]=1 \{\ +. nr #PAGINATION_STATE \\n[#PAGINATE] +. PAGINATION OFF +. \} +. IX CLEAR +. TQ +. LL \\n[#DOC_L_LENGTH]u +. QUAD $DOC_QUAD +. LS \\n[#DOC_LEAD]u +. NEWPAGE +.END +\# +\# +\# SET TRAPS FOR HEADERS/FOOTERS/FOOTNOTES +\# --------------------------------------- +\# *Arguments: +\# <none> +\# *Function: +\# Sets header/footer/footnotes/etc... 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 TRAPS END +\# *Remove all header/footer traps +. ch DO_T_MARGIN +. ch DO_B_MARGIN +. ch HEADER +. ch FOOTER +\# *Plant header trap +. wh 0 HEADER +\# *Adjust lead so last line of text falls on B_MARGIN,... +. ie \\n[#ADJ_DOC_LEAD] \{\ +. nr #LINES_PER_PAGE 0 1 +. nr #DOC_LEAD_ADJ 0 1 +. nr #DEPTH_TO_B_MARGIN \\n[#PAGE_LENGTH]-\\n[#B_MARGIN]-1v +. while \\n[#T_MARGIN]+(\\n[#DOC_LEAD]*\\n+[#LINES_PER_PAGE])<\\n[#DEPTH_TO_B_MARGIN] \{ . \} +. nr #LINES_PER_PAGE -1 +. 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 +. \} +\# *...or calculate new B_MARGIN based on # of lines (at #DOC_LEAD) that fit +\# *on the page. +. el \{\ +. nr #LINES_PER_PAGE 0 1 +. nr #DEPTH_TO_B_MARGIN \\n[#PAGE_LENGTH]-\\n[#B_MARGIN]-1v +. while \\n[#T_MARGIN]+(\\n[#DOC_LEAD]*\\n+[#LINES_PER_PAGE])<\\n[#DEPTH_TO_B_MARGIN] \{ . \} +. nr #B_MARGIN \\n[#PAGE_LENGTH]-(\\n[#T_MARGIN]+(\\n[#DOC_LEAD]*\\n[#LINES_PER_PAGE])) +. \} +\# *Set footer and footnote overflow traps +. nr #FN_COUNT 0 1 +. nr #SPACE_REMAINING 0 +. nr #FN_DEPTH 0 +. nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]u +. wh 12i FOOTER +. wh -\\n[#B_MARGIN]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 you added an indent in 2nd line of macro +. ll -\\n[#L_INDENT]u +. ta \\n(.lu +. \} +. if \\n[#EPIGRAPH] \{\ +. in -\\n[#L_INDENT]u +. ll -\\n[#L_INDENT]u +. ta \\n(.lu +. \} +. \} +. if \\n[#INDENT_RIGHT_ACTIVE] \{\ +. ll -\\n[#R_INDENT]u +. ta \\n(.lu +. \} +. if \\n[#INDENT_BOTH_ACTIVE] \{\ +. in \\n[#BL_INDENT]u +. ll -\\n[#BR_INDENT]u +. ta \\n(.lu +. if \\n[#QUOTE] \{\ +. in -\\n[#BL_INDENT]u +. ie \\n[#BR_INDENT]=\\n[#BL_INDENT] \{\ +. ll -\\n[#BR_INDENT]u +. ta \\n(.lu +. \} +. el \{\ +. ll -(\\n[#BR_INDENT]u/2u) +. ta \\n(.lu +. \} +. \} +. if \\n[#EPIGRAPH] \{\ +. in -\\n[#BL_INDENT]u +. ie \\n[#BR_INDENT]=\\n[#BL_INDENT] \{\ +. ll -\\n[#BR_INDENT]u +. ta \\n(.lu +. \} +. el \{\ +. ll -(\\n[#BR_INDENT]u/2u) +. ta \\n(.lu +. \} +. \} +. \} +.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(.lu +.END +\# +\# +\# +\# +\# ==================================================================== +\# +\# +++DOCUMENT PROCESSING ALIASES+++ +\# +\# Aliases to make life easier for users: synonyms, short forms +\# and alternate spellings. +\# +\# Macros +\# ------ +.ALIAS BREAK_BLOCKQUOTE BREAK_QUOTE +.ALIAS BREAK_CITATION BREAK_QUOTE +.ALIAS BREAK_CITE BREAK_QUOTE +.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 FILL QUAD +.ALIAS PP_FT PP_FONT +.ALIAS DOC_PS DOC_PT_SIZE +.ALIAS DOC_LS DOC_LEAD +.ALIAS PAGENUM PAGENUMBER +.ALIAS PAGINATION PAGINATE +\# +\# HEADER and FOOTER aliases for HDRFTR macros. +\# +.ALIAS HEADER_FAMILY HDRFTR_FAMILY +.ALIAS HEADER_FAM HDRFTR_FAMILY +.ALIAS HEADER_SIZE HDRFTR_SIZE +.ALIAS HEADER_PLAIN HDRFTR_PLAIN +.ALIAS HEADER_RULE_GAP HDRFTR_RULE_GAP +.ALIAS HEADER_RULE HDRFTR_RULE +.ALIAS HEADER_LEFT HDRFTR_LEFT +.ALIAS HEADER_LEFT_FAMILY HDRFTR_LEFT_FAMILY +.ALIAS HEADER_LEFT_FAM HDRFTR_LEFT_FAMILY +.ALIAS HEADER_LEFT_FONT HDRFTR_LEFT_FONT +.ALIAS HEADER_LEFT_FT HDRFTR_LEFT_FONT +.ALIAS HEADER_LEFT_SIZE HDRFTR_LEFT_SIZE +.ALIAS HEADER_LEFT_PS HDRFTR_LEFT_SIZE +.ALIAS HEADER_LEFT_CAPS HDRFTR_LEFT_CAPS +.ALIAS HEADER_CENTER HDRFTR_CENTER +.ALIAS HEADER_CENTRE HDRFTR_CENTER +.ALIAS HEADER_CENTER_FAMILY HDRFTR_CENTER_FAMILY +.ALIAS HEADER_CENTRE_FAMILY HDRFTR_CENTER_FAMILY +.ALIAS HEADER_CENTER_FAM HDRFTR_CENTER_FAMILY +.ALIAS HEADER_CENTRE_FAM HDRFTR_CENTER_FAMILY +.ALIAS HEADER_CENTER_FONT HDRFTR_CENTER_FONT +.ALIAS HEADER_CENTRE_FONT HDRFTR_CENTER_FONT +.ALIAS HEADER_CENTER_FT HDRFTR_CENTER_FONT +.ALIAS HEADER_CENTRE_FT HDRFTR_CENTER_FONT +.ALIAS HEADER_CENTER_SIZE HDRFTR_CENTER_SIZE +.ALIAS HEADER_CENTRE_SIZE HDRFTR_CENTER_SIZE +.ALIAS HEADER_CENTER_PS HDRFTR_CENTER_SIZE +.ALIAS HEADER_CENTRE_PS HDRFTR_CENTER_SIZE +.ALIAS HEADER_CENTER_CAPS HDRFTR_CENTER_CAPS +.ALIAS HEADER_CENTRE_CAPS HDRFTR_CENTER_CAPS +.ALIAS HEADER_RIGHT HDRFTR_RIGHT +.ALIAS HEADER_RIGHT_FAMILY HDRFTR_RIGHT_FAMILY +.ALIAS HEADER_RIGHT_FAM HDRFTR_RIGHT_FAMILY +.ALIAS HEADER_RIGHT_FONT HDRFTR_RIGHT_FONT +.ALIAS HEADER_RIGHT_FT HDRFTR_RIGHT_FONT +.ALIAS HEADER_RIGHT_SIZE HDRFTR_RIGHT_SIZE +.ALIAS HEADER_RIGHT_PS HDRFTR_RIGHT_SIZE +.ALIAS HEADER_RIGHT_CAPS HDRFTR_RIGHT_CAPS +.ALIAS FOOTER_FAMILY HDRFTR_FAMILY +.ALIAS FOOTER_FAM HDRFTR_FAMILY +.ALIAS FOOTER_SIZE HDRFTR_SIZE +.ALIAS FOOTER_PLAIN HDRFTR_PLAIN +.ALIAS FOOTER_RULE_GAP HDRFTR_RULE_GAP +.ALIAS FOOTER_RULE HDRFTR_RULE +.ALIAS FOOTER_LEFT HDRFTR_LEFT +.ALIAS FOOTER_LEFT_FAMILY HDRFTR_LEFT_FAMILY +.ALIAS FOOTER_LEFT_FAM HDRFTR_LEFT_FAMILY +.ALIAS FOOTER_LEFT_FONT HDRFTR_LEFT_FONT +.ALIAS FOOTER_LEFT_FT HDRFTR_LEFT_FONT +.ALIAS FOOTER_LEFT_SIZE HDRFTR_LEFT_SIZE +.ALIAS FOOTER_LEFT_PS HDRFTR_LEFT_SIZE +.ALIAS FOOTER_LEFT_CAPS HDRFTR_LEFT_CAPS +.ALIAS FOOTER_CENTER HDRFTR_CENTER +.ALIAS FOOTER_CENTRE HDRFTR_CENTER +.ALIAS FOOTER_CENTER_FAMILY HDRFTR_CENTER_FAMILY +.ALIAS FOOTER_CENTRE_FAMILY HDRFTR_CENTER_FAMILY +.ALIAS FOOTER_CENTER_FAM HDRFTR_CENTER_FAMILY +.ALIAS FOOTER_CENTRE_FAM HDRFTR_CENTER_FAMILY +.ALIAS FOOTER_CENTER_FONT HDRFTR_CENTER_FONT +.ALIAS FOOTER_CENTRE_FONT HDRFTR_CENTER_FONT +.ALIAS FOOTER_CENTER_FT HDRFTR_CENTER_FONT +.ALIAS FOOTER_CENTRE_FT HDRFTR_CENTER_FONT +.ALIAS FOOTER_CENTER_SIZE HDRFTR_CENTER_SIZE +.ALIAS FOOTER_CENTRE_SIZE HDRFTR_CENTER_SIZE +.ALIAS FOOTER_CENTER_PS HDRFTR_CENTER_SIZE +.ALIAS FOOTER_CENTRE_PS HDRFTR_CENTER_SIZE +.ALIAS FOOTER_CENTER_CAPS HDRFTR_CENTER_CAPS +.ALIAS FOOTER_CENTRE_CAPS HDRFTR_CENTER_CAPS +.ALIAS FOOTER_RIGHT HDRFTR_RIGHT +.ALIAS FOOTER_RIGHT_FAMILY HDRFTR_RIGHT_FAMILY +.ALIAS FOOTER_RIGHT_FAM HDRFTR_RIGHT_FAMILY +.ALIAS FOOTER_RIGHT_FONT HDRFTR_RIGHT_FONT +.ALIAS FOOTER_RIGHT_FT HDRFTR_RIGHT_FONT +.ALIAS FOOTER_RIGHT_SIZE HDRFTR_RIGHT_SIZE +.ALIAS FOOTER_RIGHT_PS HDRFTR_RIGHT_SIZE +.ALIAS FOOTER_RIGHT_CAPS HDRFTR_RIGHT_CAPS +.ALIAS SWITCH_HEADERS SWITCH_HDRFTR +.ALIAS SWITCH_FOOTERS SWITCH_HDRFTR +\# +\# SUPPORT ALIASES +\# +.ALIAS COL_BREAK COL_NEXT +.ALIAS PRINT_FOOTNOTE_RULE FOOTNOTE_RULE +\# +\# |