.\"                                          "/.
.\"        mg macro package for troff        "/.
.\"        created by John Ankarström        "/.
.\"                                          "/.
.\" Permission to use, copy, modify and/or   "/.
.\" distribute this software for any purpose "/.
.\" with or without fee is hereby granted.   "/.
.\"                                          "/.
.\" For an index of the macros defined in    "/.
.\" this file, issue `grep -n [-]- g.tmac'.  "/.
.\"                                          "/.
.\" Place new macros in alphabetical order.  "/.
.\"                                          "/.
.\" Do not use .ev and .evc outside wrapper  "/.
.\" macros like _e and _ec.                  "/.
.\"                                          "/.
.
.eo \" disable backslash escapes
.
.\" Internal macros ----------------------------
.
.\" _a -- setup document
.de _a
.
. \" configure initial options
. _nr mt 1i \" top margin
. _nr mb 1i \" bottom margin
. _ds tt '''' \" text in top margin
. _ds tb ''%'' \" text in bottom margin
.
. \" initialize document
. wh 0 _th
. wh -\n(mbu _tf
. sp 1u \" trigger header
.
. \" configure environments
. _e d \" date
.  _ec 0
.  nr sp 0.4v
.  ad c
. _e h \" heading
.  _ec 0
.  nr sp 1.2v
.  ps +1p
.  ft B
. _e l \" literal display
.  _ec 0
.  nr sp 0.3v
.  nf
.  in 18p
.  fam C
.  ps -1p
.  vs -1p
. _e n \" name (of author)
.  _ec 0
.  nr sp 0.4v
.  ad c
. _e p \" paragraph
.  _ec 0
.  nr sp 0.3v
.  nr ti 18p
.  ad b
. _e q \" quotation
.  _ec 0
.  nr sp 0.3v
.  nr ti 1c
.  in 18p
.  ps -1p
.  vs -1p
. _e s \" section heading
.  _ec 0
.  nr sp 1v
.  ft B
. _e t \" title
.  _ec 0
.  ps +4p
.  vs +2p
.  ft B
.  ad c
. _e
.
. \" configure special environments
. _E _f \" footnote
.  _ec 0
.  ps -2p
.  vs -1p
. _E _m \" margins (header, footer)
.  _ec 0
. _E
..
.
.\" _ds -- set default string value
.de _ds
. if '\*[\$1]'' .ds \$1 \$2
..
.
.\" _E -- just set environment
.de _E
. ev \$1
..
.
.\" _e -- set environment
.de _e
.
. \" initialize document?
. if '\n(_a'0' \{\
.  nr _a 1
.  _a
. \}
.
. \" save special environment variables
. if !'\n[.ev]'0' \{\
.  nr \n[.ev]_sp \n(sp \" vertical space before any environment
.  nr \n[.ev]_sq \n(sq \" vertical space before different environment
.  nr \n[.ev]_ti \n(ti \" first line indentation
.  ev
. \}
.
. \" keep track of previous and new environment
. ds _penv \*[_env]
. ds _env \$1
.
. \" post-environment operations
. if !'\$1'' \{\
.  \" add small space after title
.  if '\*[_penv]'t' .if '\*[_env]'d' .sp 0.1v
.
.  \" add space after title block (including date)
.  if !'\*[_env]'n' .if !'\*[_env]'d' \{\
.   nr _tb 0
.   ie '\*[_penv]'t' .nr _tb 1
.   el .if '\*[_penv]'d' .nr _tb 1
.   if \n[_tb]==1 \{\
.    sp 0.5i
.    ns
.   \}
.  \}
. \}
.
. \" activate new environment
. if !'\$1'' \{\
.  ev \$1
.  nr sp \n[\n[.ev]_sp]
.  nr sq \n[\n[.ev]_sq]
.  nr ti \n[\n[.ev]_ti]
.  sp \n(spu
.  if !'\*[_env]'\*[_penv]' .sp \n(squ
. \}
..
.
. \" _ec -- copy environment
.de _ec
. evc \$1
. nr sp \n[\$1_sp]
. nr sq \n[\$1_sq]
. nr ti \n[\$1_ti]
..
.
.\" _nr -- set default numeric value
.de _nr
. if \n[\$1]=0 .nr \$1 \$2
..
.
.\" _tf -- footer trap
.de _tf
.
. \" print footer
. _E _m
. rt \n(.pu-\n(mbu \" return to correct position?
. sp \n(mbu-2v-24p
. tl \*(tb
' bp
..
.
.\" _th -- header trap
.de _th
. _E _m
. rt 0
. sp 24p
. tl \*(tt
. rt 0
. sp \n(mtu
. _E \*[_env]
. ns
..
.
.\" _tn -- footnote trap
.de _tn
.
. \" override footer
. ch _tf
.
. \" print collected footnotes
. _E _m
___________________
. br
. sp 1p
. _E _f
. _n
. br
.
. \" clear footnotes
. ch _tn
. nr _dn 0
. rm _n
.
. \" trigger and restore footer
. _tf
. wh -\n(mbu _tf
..
.
.
.\" Inline macros ------------------------------
.
.\" b -- bold font
.de b
\&\$3\fB\$1\fP\$2
..
.
.\" c -- constant-width font
.de c
.
. \" copy family and (relative) point size from l environment
. _E 0
. nr _S \n(.s
. _E
. _E l
. ds _fam \n[.fam]
. nr _s \n(.s
. _E
.
\&\$3\c
. fam \*[_fam]
. ps +(\n(_s-\n(_S)u
. nr _s \n[.ss]
. ss 7
\&\$1\c
. fam
. ps
. ss \n(_s
\&\$2
..
.
.\" i -- italic font
.de i
\&\$3\fI\$1\fP\$2
..
.
.\" x -- bold italic font
.de x
\&\$3\f(BI\$1\fP\$2
..
.
.
.\" Hybrid macros ------------------------------
.
.\" q -- quotation
.de q
.
. \" inline
. ie !'\$1'' \&\$3\(lq\$1\(rq\$2
.
. \" block
. el \{\
.  br
.  _e q
.  ti \n(tiu
. \}
..
.
.
.\" Environment macros -------------------------
.
.
.\" d -- date
.de d
. br
. _e d
. af mo 00
. af dy 00
. ie '\$1'' \n[year]-\n(mo-\n(dy
. el .if !'\$1'\&' \$1
. af mo 1
. af dy 1
..
.\" h -- heading
.de h
. br
. w h p
. _e h
.
..
.\" l -- literal display
.de l
. br
. _e l
..
.
.\" p -- paragraph
.de p
. br
. _e p
. if '\*[_penv]'p' .ti \n(tiu
..
.
.\" s -- subheading
.de s
. br
. w s p
. _e s
..
.
.\" t -- title
.de t
. br
. _e t
..
.
.
.\" Other macros -------------------------------
.
.\" ( -- begin footnote
.de (
. if !'\$1'' \&\$1\c
.
. \" increment and print number
. nr _n \n(_n+1
\v'-.3m'\s'\En(.s*80/100'\n(_n\s0\v'.3m'\c
.
. \" switch environment and capture footnote
. _E _f
. ti 9p
. boxa _n
\v'-.3m'\s'\En(.s*80/100'\n(_n\s0\v'.3m'\h'2p'\c
..
.
.\" ) -- end footnote
.de )
. br
\!.br
. boxa
. _E \*[_env]
. ie !'\$1'' \&\$1
. el \&
.
. \" print footnote at bottom of page
. ch _tn
. nr _dn +\n(dnu
. if !'\n(dn'0' .wh -\n[_dn]u-\n(mbu-12p _tn
..
.
. \" w -- want space
.de w
. *w 0 \$@
..
.de *w
. nr s \$1 \" accumulated space
. length n \$2 \" number of lines in environment
. ds __e \$2 \" environment
. nr n -1
. substring __e 0 0
.
. \" add environment sp/sq
. nr s +\n[\*[__e]_sp]
. nr s +\n[\*[__e]_sq]
.
. \" add environment vs
. _E \*[__e]
. nr _v \n(.v
. _E
. nr s +(\nn*\n(_v)
. shift 2
.
. \" request space or recurse
. ie \n(.$=0 \{\
.  nr S \ns-\n(_v+1u \" do not request too much
.  if (\nSu)>\n(.tu \{\
.   br
.   bp
.  \}
. \}
. el .*w \ns \$@
..
.
.ec \" re-enable backslash escapes