\"      @(#)tmac.n      6.1 (Berkeley) 5/26/86
\"
\" The News macro package
\"
\" This  is  the macro package that is used to format news documents.  It
\" was written because many sites do not have one of the -mm or -ms pack-
\" ages that the documents use.   This is NOT compatible with EITHER, but
\" (I hope) will become the standard for all news  documents  (man  pages
\" excepted, since everyone seems to have -man.)
\"
\" This package was written using  only  the  "NROFF/TROFF Users' Guide",
\" and  therefore  if  you  can run NROFF/TROFF, you can legitimately use
\" this package.  However, because NROFF/TROFF are proprietary  programs,
\" I  cannot  place  this  package in the public domain.  This should not
\" matter, because if you legitimately have  NROFF/TROFF,  you  have  the
\" documentation; if not, you can't run off the documentation anyway.
\"
\" This  package may be circulated freely with the news documentation; it
\" may not be sold, but is to be distributed with  the  unformatted  news
\" documents.  However,  the name of the author and the place at which it
\" was written (in the author's own  time,  of  course)  are  not  to  be
\" removed  from the package regardless of how it is modified or altered.
\" Further, please do not distribute this package if you make any changes
\" because  I  don't want to get bug reports of macros I haven't written;
\" if you have a goodie you want me to add, send it to me and we'll talk.
\" (I really do like feedback!)  I'd really appreciate your cooperation.
\"
\" Author:      Matt Bishop
\"              Research Institute for Advanced Computer Science
\"              Mail Stop 230-5
\"              NASA Ames Research Center
\"              Moffett Field, CA  94035
\"
\" version 1.0          September 28, 1985      [email protected]
\"      initial version
\" version 1.1          October 25, 1985        [email protected]
\"      fixed an incredibly obscure footnote bug (that occurred twice in
\"      the news documentation!) which put footnoted words on  one  page
\"      and the footnote on the next if the word was in the next-to-last
\"      or last line; commented it, and generally cleaned up
\" Version 1.2          October 27, 1985        [email protected]
\"      Added a few more comments and a check to keep footnotes lined up
\"      with the bottom margin.
\" Version 1.3          February 12, 1986       [email protected]
\"      Added an error check to catch unmatched ef's and ed's
\"
\" **********
\" these preserve and restore various things
\" they are used to shorten other macros
de yf                                   \" restore fonts
ft \\n(f2                               \" previous font
ft \\n(f1                               \" current font
.
de yi                                   \" restore indents
'in \\n(i2u                             \" previous indent
'in \\n(i1u                             \" current indent
.
de ys                                   \" restore point sizes
ps \\n(s2                               \" previous point size
ps \\n(s1                               \" current point size
.
de yv                                   \" restore vertical spacings
vs \\n(v2u                              \" previous vertical spacing
vs \\n(v1u                              \" current vertical spacing
.
de ya                                   \" restore everything
yf                                      \" restore fonts
yi                                      \" restore indents
ys                                      \" restore point sizes
yv                                      \" restore vertical spacing
.
de zf                                   \" preserve fonts
nr f1 \\n(.f                            \" current font
ft                                      \" switch to previous font
nr f2 \\n(.f                            \" previous font
ft                                      \" back to current font
.
de zi                                   \" preserve indents
nr i1 \\n(.iu                           \" current indent
'in                                     \" switch to previous indent
nr i2 \\n(.iu                           \" previous indent
'in                                     \" back to current indent
.
de zs                                   \" preserve point sizes
nr s1 \\n(.su                           \" current point size
ps                                      \" switch to previous point size
nr s2 \\n(.su                           \" previous point size
ps                                      \" back to current point size
.
de zv                                   \" preserve vertical spacings
nr v1 \\n(.vu                           \" current vertical spacing
vs                                      \" switch to previous vertical spacing
nr v2 \\n(.vu                           \" previous vertical spacing
vs                                      \" back to current vertical spacing
.
de za                                   \" save everything
zf                                      \" save fonts
zi                                      \" save indents
zs                                      \" save point sizes
zv                                      \" save vertical spacings
.
\" **********
\" these actually print the header and footer titles
\" they are defined separately from the "hd" and "fo" macros
\" to make user redefinition easy
de pt                                   \" print header title
                                       \" omit header on first page
if \\n%>1 \{\
'       sp |\\$1u                       \" move to proper position
       ft 1                            \" change to default font
       ps \\n(ps                       \" change to default point size
       vs \\n(vs                       \" change to default spacing
       if \\n% .if o .tl '\\*(h0'\\*(h1'\\*(h2'        \" odd page title
       if \\n% .if e .tl '\\*(h2'\\*(h1'\\*(h0'        \" even page title
       vs                              \" restore current vertical spacing
       ps                              \" restore current point size
       ft                              \" restore current font
\}
.
de pf                                   \" print footer title
ft 1                                    \" change to default font
ps \\n(ps                               \" change to default point size
vs \\n(vs                               \" change to default spacing
ie \\n%=1 .tl '\\*(h0'\\*(h1'\\*(h2'    \" on first page, print the header here
el        .tl '\\*(f0'\\*(f1'\\*(f2'    \" on other pages, print the footer
vs                                      \" restore current vertical spacing
ps                                      \" restore current point size
ft                                      \" restore current font
.
\" **********
\" these are the top of page (header) and bottom of page (footer) macros
\" they don't actually print anything, just call the right macros
de hd                                   \" header -- do top of page processing
if t .if \\n(cm .tl '\(rn'''            \" drop cut mark if needed
pt \\n(ttu                              \" print header
nr fc 0 1                               \" init footnote count
nr fs \\n(.pu-\\n(bmu-1u                \" if any footnotes, start print here
nr fp 0-\\n(bmu                 \" reset current footer place
ch fo -\\n(bmu                          \" reset footer trap
if \\n(dn .fz                           \" put leftover footnotes st bottom
ya                                      \" restore font, etc.
'sp |\\n(tmu                            \" move to top of body
ns                                      \" don't allow any more space
.
de fo                                   \" footer -- do bottom of page processing
za                                      \" save font, etc.
rs                                      \" you want motions here
nr dn 0                         \" clobber diversion size register
if \\n(fc .fd                           \" now print the footnotes, if any
'bp                                     \" force out page
.
\" **********
\" these are the footnote macros
\" here's an overview:
\"      Footnotes are processed in environment #1, which is  initialized
\"      at the bottom of this package.  When "fn" is called, nroff/troff
\"      switches to this environment.  The body of the footnote is saved
\"      in  the  diversion  "tf" (for "temporary footnote"), so you will
\"      NEVER spring a trap during the first reading of a footnote. When
\"      "ef" ("end footnote" is called,  the  diversion  is  closed.  If
\"      this  is the first footnote on the page (ie, the number register
\"      "fc" is 1), and the footnote height (plus the height of 1  line)
\"      crosses  the  bottom  margin,  you get the footnoted word on one
\"      page and the footnote on the other.  In this case we  just  call
\"      "fo"  manually  (taking case it cannot be re-invoked on the same
\"      page!)  If this situation does not occur,  we  just  adjust  the
\"      footer  trap's  position upwards (we'll get to how far in a min-
\"      ute); if this puts the trap above the current line,  we  reposi-
\"      tion  the trap just beneath the current line to be sure of trig-
\"      triggering it once the current line is forced out.
\"       To reposition the footer trap, we proceed as  follows.  Because
\"      the  trap  may be sprung in the middle of a line, it is possible
\"      that the footnote will not fit on the page (regardless of  where
\"      on the page the footnoted word occurs -- really!) if we move the
\"      trap up by the size of  the  footnote  diversion  "tf".  So,  we
\"      fudge things a little bit -- for the first footnote on each page
\"      we move the footer trap up 1 extra line ("line" being 1v in env-
\"      ironment  #0).   Unless  the point size and vertical spacing are
\"      increased between the first footnote and the footer trap's being
\"      sprung,  this  will  keep  the footnotes on the same page as the
\"      footnoted word.  But as there may be now as much as 1v of  space
\"      between the footnote and the bottom margin, which looks HIDEOUS,
\"      we use the number register "fs" to mark where  the  footer  trap
\"      would  REALLY go, and just space to it when it comes time to put
\"      out the footnotes.
de fd                                   \" dump footnotes
nr gs 1v                                \" get a measure of 1 line in env #0
ev 1                                    \" switch to footnote environment
nr gs +2v                               \" min of 2 lines of footnotes
                                       \" if the number register ns > 0,
                                       \" the last text line may contain a
                                       \" footnote that is too big to fit;
                                       \" this checks for such a note and
                                       \" if so, forces the footnote into
                                       \" the "fy" diversion that carries
                                       \" it onto the next text page
ie (\\n(nsu>0)&(\\n(gsu>=\\n(.tu) 'sp \\n(gsu   \" be sure you can get it down
el .if \\n(fsu>\\n(nlu 'sp \\n(fsu-\\n(nlu      \" move to footnote start position
'nf                                     \" don't reprocess footnotes
'in 0                                   \" don't indent them any more either
tf                                      \" drop text of footnotes
rm tf
if '\\n(.z'fy' .di                      \" end overflow diversion, if any
nr fc 0                         \" re-init footnote count
ev                                      \" return to usual environment
.
de fn                                   \" start footnote
                                       \" look for nested footnotes -- ILLEGAL
ie \\n(if>0 .er "footnote within footnote"
el .da tf                               \" append footnote to footnote diversion
nr if +1                                \" increment level of footnoting
nr fc +1                                \" one more footnote on this page
if \\n(fc=1 .nr fp -1v                  \" The reason for this "fudge factor"
                                       \" is that there is no way to force
                                       \" NROFF/TROFF to invoke a macro at
                                       \" the end of each line.  At times,
                                       \" the trap boundary will not match up
                                       \" with the bottom of a line, so the
                                       \" "fo" trap which is set at 2320 may
                                       \" not be triggered until 2340 -- and
                                       \" then the footnote won't fit.  This
                                       \" gives some slack so the footnote is
                                       \" more likely to fit. *sigh*
ev 1                                    \" enter footnote environment
if \\n(fc=1 .fs                 \" drop separator if first footnote
br                                      \" flush out any previous line in footnote
fi                                      \" process footnote in fill mode
.
de ef                                   \" end footnote
br                                      \" flush out the line in footnote
ie \\n(if<=0 .er "end footnote has no corresponding begin footnote"
el \{\
       nr if -1                        \" decrement level of footnoting
       nr fg 2v                        \" remember this for repositioning fo
       ev                              \" back to usual environment
       if \\n(if=0 \{\
               di                      \" end of footnote proper
               nr fp -\\n(dnu          \" "fo" will be moved at least up this far
               nr fs -\\n(dnu          \" increase size of footnote
               ch fo \\n(fpu           \" reposition "fo" trap (first guess)
                                       \" the first part of the "ie" clause
                                       \" is taken in the special case
                                       \" described above
               ie (\\n(fc=1)&((\\n(nlu+1v+\\n(fgu)>=(\\n(.pu-\\n(bmu)) \{\
                       nr ns \\n(dnu   \" suppress footnote separator
                                       \" since this footnote contains it
                                       \" keep "fo" from being invoked twice
                       ch fo \\n(.pu+1i
                       fo              \" force the page out AT ONCE
                       nr ns 0         \" re-enable footnote separator
               \}
                                       \" footnote won't fit completely
               el .if (\\n(nlu+1v)>=(\\n(.pu+\\n(fpu) .ch fo \\n(nlu+1u
       \}
\}
.
de fs                                   \" drop footnote separator
                                       \" only if not already dropped
if \\n(ns=0 \l'1i'
nr ns 0                         \" in case footnotes are over 1 page long
.
de fx                                   \" process footnote overflow
if \\n(fc .di fy                        \" stuff them in the right place
.
de fz                                   \" deposit footnote overflow
fn                                      \" treat it as a footnote
nf                                      \" it's already been processed
in 0                                    \"   and indented
fy                                      \" "fx" put it here
ef                                      \" end the footnote
.
\" **********
\" the ones after here are user-invoked (like "fn" and "ef" above)
\" title, author, etc.
de mt                                   \" main title
\&
sp |\\n(mtu                             \" space
ft 3                                    \" in bold
ps \\n(ps+2p                            \" large point size and
vs \\n(vs+2p                            \" vertical spacing
ce 1000                         \" center the title
nr t2 1                         \" space it
.
de au                                   \" author
nr t2 0                         \" spacing here
sp 2v                                   \" space
ft 2                                    \" in italics
ps \\n(ps                               \" usual point size and
vs \\n(vs                               \" vertical spacing
ce 1000                         \" center the name(s)
.
de ai                                   \" author's institution
if \\n(t2 .sp 2v                        \" space after a title
nr t2 0                         \" institution
ft 2                                    \" in italics
ps \\n(ps                               \" usual point size and
vs \\n(vs                               \" vertical spacing
ce 1000                         \" center the name(s)
.
de bt                                   \" begin text macro
nr t2 0                         \" hold it here
nr it +1                                \" mark as called
ce 0                                    \" end any centering
sn 3v                                   \" a little bit of space
.
\" paragraph
de si                                   \" start indented section
nr lo \\n(lm                            \" remember the current level
nr lm +1                                \" go to the next level
ie '\\$1'' .nr l\\n(lm \\n(l\\n(lo+5n   \" if no arg, indent 5n
el         .nr l\\n(lm \\$1n            \" otherwise, indent that much
.
de ei                                   \" end indent
nr lm -1                                \" down one level
if \\n(lm<0 .nr lm 0                    \" make sure you don't go too far
.
de pg                                   \" plain old paragraph
if !\\n(it .bt                          \" end the title and such
sn \\n(pdu                              \" inter-paragraph spacing
ft 1                                    \" reset a few things (paranoia)
                                       \" these ONLY if not in footnote
ie \\n(if=0 \{\
       ps \\n(ps                       \" reset point size
       vs \\n(vs                       \" reset vertical spacing
       ne 1v+\\n(.Vu                   \" slightly more than 1 line
\}
el \{\
       ps \\n(ps-2p                    \" reset point size
       vs \\n(vs-2p                    \" reset vertical spacing
\}
in \\n(l\\n(lmu                 \" stop any indenting
ce 0                                    \" stop any centering
if !'\\$1'L' .if !'\\$1'l' .ti +\\n(piu \" indent the sucker
.
de lp                                   \" labelled paragraph
pg l                                    \" reset paragraph
if \\n(.$>1 .nr li \\$2n                \" if indent given use it
in +\\n(liu                             \" indent for paragraph
ti -\\n(liu                             \" force first line NOT to indent
ta +\\n(liu                             \" for the label
\&\\$1\t\c
if \\w'\\$1'u>=(\\n(l\\n(lmu+\\n(liu) .br       \" don't overwrite
.
\" section
de hu                                   \" header, unnumbered
if !\\n(it .bt                          \" end the title and such
br                                      \" force out previous line
b
ps \\n(ps
vs \\n(vs
in \\n(l\\n(lmu                 \" stop any indenting
sn \\n(hsu                              \" inter-section spacing
ne 3v+\\n(.Vu                           \" slightly more than 3 lines
fi                                      \" process the text, too
.
de hn                                   \" header, numbered
hu
ie !'\\$1'' .nr hn \\$1
el          .nr hn 1
ie \\n(hn>0 .nr hn -1
el          .nr hn 0
ie \\n(hn=0 \{\
       nr h0 +1                        \" add 1 to main section header
       nr h1 0                         \" zap remaining section numbers
       nr h2 0                         \" zap remaining section numbers
       nr h3 0                         \" zap remaining section numbers
\\n(h0.
\}
el .ie \\n(hn=1 \{\
       nr h1 +1                        \" add 1 to the section header
       nr h2 0                         \" zap remaining section numbers
       nr h3 0                         \" zap remaining section numbers
\\n(h0.\\n(h1.
\}
el .ie \\n(hn=2 \{\
       nr h2 +1                        \" add 1 to the section header
       nr h3 0                         \" zap remaining section numbers
\\n(h0.\\n(h1.\\n(h2.
\}
el \{\
       nr h3 +1                        \" add 1 to the section number
\\n(h0.\\n(h1.\\n(h2.\\n(h3.
\}
if \\n(.$=2 \\$2
.
\" displays (no floats, thank God!)
de sd                                   \" start display
                                       \" look for nested displays -- ILLEGAL
ie \\n(id>0 .er "display within display"
el \{\
       ie '\\$1'c' .nr sf 1            \" center the sucker
       el          .nr sf 0            \" don't center it
\}
sn \\n(pdu                              \" a little bit of space
ev 2                                    \" switch to display environment
nf                                      \" what you type is what you get
if \\n(id=0 .di dd                      \" start saving text
rs                                      \" don't eat leading space
nr id +1                                \" increment level of display
.
de ed                                   \" end display
br                                      \" flush line
ie \\n(id<=0 .er "end display has no corresponding begin display"
el \{\
       nr id -1                        \" decrement level of display
       if \\n(id=0 \{\
               di                      \" end diversion
               fi                      \" resume filling
               in -\\n(piu             \" dedent
               ev                      \" pop environment
               ne \\n(dnu              \" be sure you have room
               nf                      \" don't reprocess display
               rs                      \" don't eat leading space
               zi                      \" save indents
               ie \\n(sf .in (\\n(llu-\\n(dlu)/2u      \" center on the line length
               el .in +\\n(piu         \" indent the sucker
               dd                      \" drop display
               yi                      \" restore indents
       \}
\}
fi                                      \" resume filling
sn \\n(pdu                              \" a little bit of space
.
\" **********
\" fonts -- if argument(s), apply only to first
de b                                    \" bold (font 3)
ie \\n(.$>0 \\&\\$3\\f3\\$1\\fP\\$2
el .ft 3
.
de i                                    \" italics (font 2)
ie \\n(.$>0 \\&\\$3\\f2\\$1\\fP\\$2
el .ft 2
.
de r                                    \" roman (font 1)
ft 1                                    \" just restore it
.
de bi                                   \" bold italics (embolden font 2)
\\&\\$3\c
\\kb\\f2\\$1\\fP\\h'|\\nbu+2u'\\f2\\$1\\fP\\$2
.
\" **********
\" point sizes -- if argument(s), apply only to first
de sm                                   \" reduce point size by 2
ie \\n(.$>0 \\&\\$3\\s-2\\$1\\s0\\$2
el .ps -2
.
de is                                   \" increase point size by 2
ie \\n(.$>0 \\&\\$3\\s+2\\$1\\s0\\$2
el .ps +2
.
de nl                                   \" return to normal size
ps \\n(ps                               \" just reset the point size
.
\" **********
\" handy force space/inhibit more space macros
de sn                                   \" space, then turn on nospace mode
sp \\$1                         \" space
ns                                      \" ignore any more space requests
.
de sr                                   \" force out space
rs                                      \" turn on spacing mode
sp \\$1                         \" space
.
\" **********
\" end of text and error macros
de et                                   \" end of text macro
br                                      \" flush out remaining line
tf                                      \" dump any footnotes
                                       \" check for open displays or footnotes
if \\n(id>0 .er "unfinished display"
if \\n(if>0 .er "unfinished footnote"
                                       \" this one means an -mn bug (*sigh*)
if !'\\n(.z'' .er "diversion \\n(.z not closed"
.
de er                                   \" print error message
                                       \" flag it as an error
ds ws "** ERROR **
                                       \" if you have it, give the file name
if !'\\*(.f'' .as ws " file \\*(.f,
                                       \" put out the line number
as ws " line \\n(.c
                                       \" and finally the error message
tm \\*(ws: \\$1
.
\" **********
\" macros in this section are VERY specific to the news documentation
de pa                                   \" protocol appellation (darn names!)
\\&\\$3\\f2\\$1\\fP\\$2
.
de ng                                   \" news group name
\\&\\$3\\f3\\$1\\fP\\$2
.
de cn                                   \" computer name
\\&\\$3\\f2\\$1\\fP\\$2
.
de hf                                   \" header field
\\&\\$3\\*(lq\\$1\\*(rq\\$2
.
de cf                                   \" contents of field
\\&\\$3\\*(lq\\$1\\*(rq\\$2
.
de qc                                   \" quote control char (command)
\\&\\$3\\f3<\\s-2\\$1\\s0>\\fP\\$2
.
de qp                                   \" quote printing char (command)
\\&\\$3\\f3\\$1\\fP\\$2
.
de op                                   \" option
\\&\\$3\\f3\\$1\\fP\\$2
.
\" **********
\" trademarked names
de pd                                   \" print "PDP-11"
ie \\n(p1 \\&\\$2\\s-1PDP\\s0-11\\$1
el \{\
       nr p1 +1                        \" mark footnote as dropped
\\&\\$2\\s-1PDP\\s0-11\\*(dg\\$1
       fn                              \" put out the footnote
\\&\\*(dgPDP-11 is a trademark of Digital Equipment Corporation.
       ef                              \" short and sweet ...
\}
.
de ux                                   \" print "UNIX"
ie \\n(ux \\&\\$2\\s-1UNIX\\s0\\$1
el \{\
       nr ux +1                        \" mark footnote as dropped
\\&\\$2\\s-1UNIX\\s0\\*(dg\\$1
       fn                              \" put out the footnote
\\&\\*(dgUNIX is a trademark of AT&T Bell Laboratories.
       ef                              \" short and sweet ...
\}
.
de vx                                   \" print "VAX"
ie \\n(vx \\&\\$2\\s-1VAX\\s0\\$1
el \{\
       nr vx +1                        \" mark footnote as dropped
\\&\\$2\\s-1VAX\\s0\\*(dg\\$1
       fn                              \" put out the footnote
\\&\\*(dgVAX is a trademark of Digital Equipment Corporation.
       ef                              \" short and sweet ...
\}
.
\" **********
\" set up string and number registers
                                       \" set up for the date
if \n(mo=1  .ds mo January
if \n(mo=2  .ds mo February
if \n(mo=3  .ds mo March
if \n(mo=4  .ds mo April
if \n(mo=5  .ds mo May
if \n(mo=6  .ds mo June
if \n(mo=7  .ds mo July
if \n(mo=8  .ds mo August
if \n(mo=9  .ds mo September
if \n(mo=10 .ds mo October
if \n(mo=11 .ds mo November
if \n(mo=12 .ds mo December
ds dy "\*(mo \n(dy, 19\n(yr
if \n(dw=1  .ds dw Sunday
if \n(dw=2  .ds dw Monday
if \n(dw=3  .ds dw Tuesday
if \n(dw=4  .ds dw Wednesday
if \n(dw=5  .ds dw Thursday
if \n(dw=6  .ds dw Friday
if \n(dw=7  .ds dw Saturday
                                       \" NROFF dependencies
if n \{\
                                       \" string registers
       ds dg *
       ds lq ""
       ds rq ""
       ds f1 "\*(dy
                                       \" number registers
       nr hs 1v                        \" space before section header
       nr pd 1v                        \" inter-paragraph spacing
       nr bm 1.0i                      \" height of bottom margin
\}
if t \{\
                                       \" string registers
       ds dg \(dg
       ds lq ``
       ds rq ''
                                       \" number registers
       nr hs 1v                        \" space before section header
       nr pd 0.3v                      \" inter-paragraph spacing
       nr bm 1.0i+1v                   \" height of bottom margin (wacky laser)
\}
                                       \" these are the same for [NT]ROFF
ds vr "News Version B2.10.3
ds h1 - % -
nr bt 0.5i+1v                           \" bottom of page to footer
nr cm 0                         \" no cut marks
nr fc 0 1                               \" init footnote count
nr fl 5.5i                              \" footnote line length
nr fp 0-\n(bmu                          \" fo macro trap location
nr h0 0                         \" init section header level 0
nr h1 0                         \" init section header level 1
nr h2 0                         \" init section header level 2
nr h3 0                         \" init section header level 3
nr id 0                         \" 1 in display
nr if 0                         \" 1 in keep
nr it 0                         \" 1 when beyond title, etc.
nr li 5n                                \" indent for labelled paragraph
nr ll 6.5i                              \" line length
nr lm 0                         \" left margin
nr l0 0                         \" first indent level
nr mt 1.5i+1v                           \" title goes down this far
nr pi 5n                                \" regular paragraph indent
nr po 1.0i                              \" page offset
nr ps 10                                \" point size
nr tm 1.0i                              \" height of top margin
nr tt 0.5i-0.5v                 \" top of page to header
nr p1 0                         \" no PDP-TM message yet
nr ux 0                         \" no UNIX-TM message yet
nr vx 0                         \" no VAX-TM message yet
nr vs 12                                \" vertical spacing
\" set things up
po \n(pou                               \" set page offset
ps \n(ps                                \" set previous, current
ps \n(ps                                \"   point sizes
vs \n(vs                                \" set previous, current
vs \n(vs                                \"   vertical spacings
ll \n(llu                               \" set line length
lt \n(llu                               \" set title line length
ev 1                                    \" *** footnote environment
ps \n(ps-2p                             \" set previous, current
ps \n(ps-2p                             \"   point sizes
vs \n(vs-2p                             \" set previous, current
vs \n(vs-2p                             \"   vertical spacings
ll \n(flu                               \" set line length
lt \n(flu                               \" set title line length
ev                                      \" *** pop environment
ev 2                                    \" *** footnote environment
ps \n(ps                                \" set previous, current
ps \n(ps                                \"   point sizes
vs \n(vs                                \" set previous, current
vs \n(vs                                \"   vertical spacings
ll \n(llu                               \" set line length
lt \n(llu                               \" set title line length
ev                                      \" *** pop environment
\" install traps
wh 0i hd                                \" position header trap
wh -\n(bmu fo                           \" position footer trap
wh \n(.pu+1i fx                 \" put footnote overflow trap here
ch fx -\n(bmu                           \" move it over fo
wh -\n(btu pf                           \" print the bottom margin here
em et                                   \" at end of file, call et
\" couple of miscellaneous requests
bd S 3 3                                \" embolden special font chars if B
hy 2                                    \" don't hyphenate last lines