diff options
Diffstat (limited to 'tmac/e.tmac')
-rw-r--r-- | tmac/e.tmac | 2255 |
1 files changed, 2255 insertions, 0 deletions
diff --git a/tmac/e.tmac b/tmac/e.tmac new file mode 100644 index 0000000..b30a614 --- /dev/null +++ b/tmac/e.tmac @@ -0,0 +1,2255 @@ +.\" Copyright (c) 1988, 1993 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. [Deleted. See +.\" ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change] +.\" 4. Neither the name of the University nor the names of its +.\" contributors may be used to endorse or promote products derived +.\" from this software without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" +.\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +.\" PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR +.\" CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)e.tmac 8.1 (Berkeley) 06/05/93 +.\" +.\" Modified by James Clark for use with groff. +.\" Further modifications by Werner Lemberg, George Helffrich, and +.\" G. Branden Robinson. +.\" +.\"************************************************************** +.\"* * +.\"* **** - M E N R O F F / T R O F F M A C R O S **** * +.\"* * +.\"* Produced for your edification and enjoyment by: * +.\"* Eric Allman * +.\"* Electronics Research Laboratory * +.\"* U.C. Berkeley. * +.\"* * +.\"* VERSION 8.1 First Release: 11 Sept 1978 * +.\"* * +.\"* Documentation is available. * +.\"* * +.\"************************************************************** +.\" +.\" Macro definitions are annotated with a code: +.\" *** user interface macro +.\" $$$ macro which may be redefined by the user +.\" to provide variant functions +.\" --- internal macro; not to be called by user +.\" +. +.do nr devtag-needs-end-of-heading 0 +.do nr devtag-needs-end-of-title 0 +.do nr devtag-needs-title 1 +. +.do mso devtag.tmac +. +.if !\n(.g .ig +.de @R \" --- initialize number register to 0, if undefined +.do if !r\\$1 .nr \\$1 0 +.. +. +.ds _e e.tmac\" name of macro package, for diagnostic messages +. +.\" emit error diagnostic +.do de1 @err +.ds @file \" empty +.ds @line \" empty +.if !'\\n[.F]'' .ds @file \\n[.F]:\" +.if !'\\n[.c]'0' .ds @line \\n[.c]:\" +.tm \\*(_e:\\*[@file]\\*[@line] \\$* +.rm @file +.rm @line +.. +. +.\" --- check whether grohtml needs end of title/heading +.do de1 @html_check_need_title +.if \\n[devtag-needs-end-of-title] \ +\{\ +. nr devtag-needs-end-of-title 0 +. DEVTAG-EO-TL +.\} +.if \\n[devtag-needs-title] \ +\{\ +. DEVTAG-TL +. nr devtag-needs-title 0 +. nr devtag-needs-end-of-title 1 +.\} +.if \\n[devtag-needs-end-of-heading] .DEVTAG-EO-H +.nr devtag-needs-end-of-heading 0 +.. +. +.\" If this macro were non-empty, we'd want to define it with .de1. +.do de @check_need_title +.. +. +.ie '\*(.T'html' \ +. do als check_need_title @html_check_need_title +.el \ +. do als check_need_title @check_need_title +. +.@R pf +.if \n(pf .nx +. +.if !\n(.g .ig +.de @S \" --- initialize string/macro to empty, if undefined +.do if !d\\$1 .ds \\$1\" empty +.. +. +.@R @\" \" debugging level +. +. +.\" *** INTERNAL GP MACROS *** +. +. +.de @C \" --- change environments, taking info with us +.nr _S \\n(.s +.nr _V \\n(.v +.nr _F \\n(.f +.nr _J \\n(.j +.do ds _A \\n[.fam] +.nr _I \\n(.i +.ev \\$1 +.ps \\n(_S +.vs \\n(_Vu +.ft \\n(_F +.ad \\n(_J +.do @fam \\*(_A +'in \\n(_Iu +.xl \\n($lu +.lt \\n($lu +.rr _S +.rr _V +.rr _F +.rr _I +.rr _J +.ls 1 +'ce 0 +.. +. +.de @D \" --- determine display type (Indent, Left, Center) +.ds |p "\\$3 +.nr _d 0 +.if "\\$2"C" \ +. nr _d 1 +.if "\\$2"L" \ +. nr _d 2 +.if "\\$2"I" \ +. nr _d 3 +.if "\\$2"M" \ +. nr _d 4 +.if !\\n(_d \ +\{\ +. nr _d \\$1 +. ds |p "\\$2 +.\} +. +.. +. +.rn nm @# \" --- save troff request +.de nm \" --- turn on number mode, preserving font info +.ie \\n(.$ \ +\{\ +. nr _S \\n(.s +. nr _F \\n(.f +. do if r _#p .do ps \\n[_#p] +. do if r _#f .do ft \\n[_#f] +. @# \\$1 \\$2 \\$3 \\$4 +. ft \\n(_F +. ps \\n(_S +. rr _F +. rr _S +.\} +.el .@# +.. +. +.de @z \" --- end macro +.if \n@>1 .tm >> @z, .z=\\n(.z ?a=\\n(?a +.if !"\\n(.z"" \ +\{\ +. do @err unclosed block, footnote, or other diversion (\\n(.z) +. di +. ex +.\} +.if \\n(?a \ +. bp\" \" force out final table +.ds bp +.ds @b\" \" don't start another page +.br +.if \n@>1 .tm << @z +.. +. +. +.\" *** STANDARD HEADERS AND FOOTERS *** +. +. +.ie \n(.g .ds $* \\\\$* +.el .ds $* \\\\$1 \\\\$2 \\\\$3 \\\\$4 \\\\$5 \\\\$6 \\\\$7 \\\\$8 \\\\$9 +. +.de he \" *** define header +.ie !\\n(.$ \ +\{\ +. rm |4 +. rm |5 +.\} +.el \ +\{\ +. ds |4 "\*($* +. ds |5 "\*($* +.\} +.. +. +.de eh \" *** define even header +.ie !\\n(.$ \ +. rm |4 +.el \ +. ds |4 "\*($* +.. +. +.de oh \" *** define odd header +.ie !\\n(.$ \ +. rm |5 +.el \ +. ds |5 "\*($* +.. +. +.de fo \" *** define footer +.ie !\\n(.$ \ +\{\ +. rm |6 +. rm |7 +.\} +.el \ +\{\ +. ds |6 "\*($* +. ds |7 "\*($* +.\} +.. +. +.de ef \" *** define even footer +.ie !\\n(.$ \ +. rm |6 +.el \ +. ds |6 "\*($* +.. +. +.de of \" *** define odd footer +.ie !\\n(.$ \ +. rm |7 +.el \ +. ds |7 "\*($* +.. +. +.de ep \" *** end page (must be followed by a .bp) +.if \\n(nl>0 \ +\{\ +. wh 0 +. rs +. @b +.\} +.. +. +. +.\" *** INTERNAL HEADER AND FOOTER MACROS *** +. +. +.de @h \" --- header +.if \n@>1 .tm >> @h %=\\n% ?a=\\n(?a ?b=\\n(?b ?w=\\n(?w +.do if (u;\\n(tm+\\n(bm+\\n(.V>\\n(.p) \{\ +. do @err insufficient page length; aborting +. pl \\n(nlu +. ab +.\} +.do if (u;\\n(.i+\\n(.o>=\\n(.l) \ +. do @err page offset plus indentation exceeds line length +.\" initialize a pile of junk +.nr ?h \\n(?H \" transfer "next page" to "this page" +.nr ?H 0 +.nr ?c \\n(?C +.nr ?C 0 +.do if d |4 .rn |4 |0 +.do if d |5 .rn |5 |1 +.do if d |6 .rn |6 |2 +.do if d |7 .rn |7 |3 +.nr _w 0 \" reset max footnote width +.nr ?W 0 \" no wide floats this page (yet) +.nr ?I 1 +.\" begin actual header stuff +.ev 2 +.rs +.if \\n(hm>0 \ +. if !'\*(.T'html' \ +. sp |\\n(hmu \" move to header position +.@t $h\" \" output header title +.if \\n(tm<=0 \ +. nr tm \n(.Vu +.if !'\*(.T'html' \ +. sp |\\n(tmu \" move to top of text +.ev +.mk _k \" for columned output +.if \\n(?n=1 .nm 1\" restore line numbering if n1 mode +.nr $c 1 \" set first column +.if \n@>4 .tm -- @h >> .ns nl=\\n(nl %=\\n% _k=\\n(_k tm=\\n(tm +.ie \\n(?s \ +\{\ +. nr ?s 0 +. rs +' @b +.\} +.el \ +. @n\" \" begin the column +.if \n@>2 .tm << @h +.. +. +.de @n \" --- new column or page +.if \n@>3 .tm >> @n nl=\\n(nl %=\\n% ?f=\\n(?f ?o=\\n(?o +.if \\n(bm<=0 \ +. nr bm \\n(.Vu +.if (\\n(_w<=\\n($l)&(\\n(?W=0) \ +\{\ +. \" Compute fudge factor (must be < 1P). +. nr _b (\\n(ppp*\\n(tvu)/200u +. if \\n(_bu>((\\n(bmu-\\n(fmu-((\\n(tpp*\\n(tvu)/100u))/2u) \ +. nr _b (\\n(ppp*\\n(tvu)/100u-\n(.Vu +. nr _b +\\n(bmu +.\} +.nr _B \\n(_bu +.ch @f +.wh -\\n(_bu @f +.nr _b +(\\n(ppp*\\n(tvu)/100u \" add 1 paragraph v in case sweep past +.if \n@>2 .tm @n .p=\\n(.p bm=\\n(bm _b=\\n(_b _B=\\n(_B +.nr ?f 0 \" reset footnote flag +.if \\n(?o \ +\{\ +. (f _\" \" reprocess footnotes which run off page +. nf +. |o +. fi +. )f +. rm |o +.\} +.nr ?o 0 +.if \\n(?T \ +\{\ +. nr _i \\n(.i +. if \\n(?n \ +. nm \\n(ln +. in 0 +. |h\" \" output the table header +. in \\n(_iu +. if \\n(?n \ +. nm +. rr _i +. mk #T \" for tbl commands +. ns +.\} +.if (\\n(?a)&((\\n($c<2):(\\n(?w=0)) \ +\{\ +. nr ?a 0 \" output floating keep +. @k |t +. if \\n(?w \ +. mk _k \" don't overstrike wide keeps +. nr ?w 0 +.\} +.os +.$H\" \" special column header macro +.ns +.. +. +.de @f \" --- footer +.if \n@>1 .tm >> @f %=\\n% nl=\\n(nl ?a=\\n(?a ?b=\\n(?b ?f=\\n(?f +.if \n@>2 .nr __ \\n(.pu-\\n(nlu +.if \n@>2 .tm @f bm=\\n(bm _B=\\n(_B _b=\\n(_b .p-nl=\\n(__ +.if \n@>2 .rr __ +.if \\n(?T \ +\{\ +. nr T. 1 \" for tbl commands (to output bottom line) +. T# 1\" \" output the sides and bottom lines +. br +.\} +.ev 2 +.ce 0 +.if \\n(?b \ +\{\ +. nr ?b 0 +. @k |b\" \" output bottom of page tables +.\} +.if \\n(?f \ +. @o\" \" output footnote if present +.ie \\n($c<\\n($m \ +. @c\" \" handle new column +.el \ +. @e\" \" new page +.ev +.if \n@>2 .tm << @f +.. +. +.de @o \" --- output footnote +.nf +.ls 1 +.in 0 +.if \n@>2 .tm @o last printed text = \\n(nl placing @r trap at -\\n(_B +.wh -\\n(_Bu @r +.if \\n(?n \ +. nm \\n(ln +.if \\n(_f \ +. if !\\n(_f=\\n($m \ +. do @err writing \\n($m-column footnote in \ +\\n(_f-column layout +.|f +.nr _f 0 +.if \\n(?n \ +. nm +.fi +.if \n@>2 .tm @o triggered @r (?o) = \\n(?o +.if \\n(?o \ +\{\ +. di \" just in case triggered @r +. if \\n(dn=0 \ +\{\ +. rm |o +. nr ?o 0 +. \} +. nr dn \\n(_D +. rr _D +.\} +.rm |f +.ch @r +.. +. +.de @c \" --- new column +.if \n@>2 .tm >> @c %=\\n% +.rs +.sp |\\n(_ku +.@O +\\n($lu+\\n($su +.nr $c +1 +.@n +.. +. +.de @e \" --- end page +.if \n@>2 .tm >> @e +.@O \\n(_ou +.rs +.\" Move to footer position. +.sp |\\n(.pu-\\n(fmu-((\\n(tpp*\\n(tvu)/100u) +.@t $f\" \" output footer title +.nr ?h 0 +.bp +.. +. +.de @t \" --- output header or footer title +.if !\\n(?h \ +\{\ +. sz \\n(tp\" \" set header/footer type fonts, etc. +. @F \\n(tf +. lt \\n(_Lu \" make title span entire page +. if \\n(?n \ +. nm \\n(ln +. nf +. \\$1 +. br +. if \\n(?n \ +. nm +.\} +.. +. +.de $h \" $$$ print header +.ds |z +.if !\\n(?c \ +\{\ +. if e .ds |z "\\*(|0 +. if o .ds |z "\\*(|1 +.\} +.if !\(ts\\*(|z\(ts\(ts \ +' tl \\*(|z +.rm |z +.. +. +.de $f \" $$$ print footer +.ds |z +.if \\n(?c \ +\{\ +. if e .ds |z "\\*(|0 +. if o .ds |z "\\*(|1 +.\} +.if \(ts\\*(|z\(ts\(ts \ +\{\ +. if e .ds |z "\\*(|2 +. if o .ds |z "\\*(|3 +.\} +.if !\(ts\\*(|z\(ts\(ts \ +' tl \\*(|z +.rm |z +.. +. +.de @r \" --- reprocess overflow footnotes +.if \n@>3 .tm >> @r .z=\\n(.z ?f=\\n(?f ?a=\\n(?a ?b=\\n(?b _b=\\n(_b +.di |o \" save overflow footnote +.nr ?o 1 +.nr _D \\n(dn +.ns +.. +. +. +.\" *** COMMANDS WITH VARIANT DEFINITIONS *** +. +. +.ie '\*(.T'html' .ds @b \" empty +.el .rn bp @b \" --- begin page +. +.de bp \" *** begin new page (overrides columns) +.nr $c \\n($m \" force new page, not new column +.ie \\n(nl>0 \ +. @b \\$1 +.el \ +\{\ +. if \\n(.$>0 \ +. pn \\$1 +. if \\n(?I \ +. @h\" \" 'spring' the header trap +.\} +.br +.wh 0 @h \" reset header +.. +. +.rn ll xl \" *** special line length (local) +.de ll +.xl \\$1 +.lt \\$1 +.nr $l \\n(.l \" *** line length (copied among ev 0, 1, and 2) +.if (\\n($m<=1):(\\n($l>\\n(_L) \ +. nr _L \\n(.l +.. +. +.rn po @O \" --- local page offset +. +.de po \" *** page offset +.@O \\$1 +.if \\n(.o<0 \ +. do @err page offset is negative (\\n(.ou) +.nr _o \\n(.o +.. +. +.\" Redefine the groff fam request to set the family in +.\" environment 2 as well as the current environment. +.if !\n(.g .ig +.do rn fam @fam \" --- set family in current environment +.do de fam \" *** set font family in ev 2 and current ev +.do @fam \\$1 +.ev 2 +.do @fam \\$1 +.ev +.. +. +. +.\" *** MISCELLANEOUS ROFF COMMANDS *** +. +. +.de hx \" *** suppress headers and footers next page +.nr ?H 1 +.. +. +.de ix \" *** indent, no break +'in \\$1 +.. +. +.de bl \" *** contiguous blank lines +.br +.@s \\$1 +.sp \\$1 +.. +. +.de @s \" --- diversion-surviving space test +.ne \\$1 +.rs +.if !'\\n(.z'' \!.@s \\$1 +.. +. +.\" Even with the following facilities, this package's simulation of +.\" roff(1) line numbering features does not exhibit complete fidelity +.\" to that program's Unix V7 behavior. roff(1) always increased the +.\" page offset by 5n and set a three-digit line number, leaving _two_ +.\" spaces between the number and the start of unindented text. This +.\" package indents by \n(no instead. Further, roff(1) did _not_ reduce +.\" the line length to compensate for the increase in page offset. GBR +.\" presumes that the document author was expected to use an `ll` +.\" request to perform that action if desired, but has no corpus of +.\" idiomatic, line-numbered roff(1) documents to examine. +.\" +.de n1 \" *** line numbering 1 +.ie \\n(.$ \ +. if '\\$1'C' \ +\{\ +. nr ?N 1 +. nr _l \\n(.l +. ll -\\n(nou +.\} +.if !\\n(?N \ +. po -\\n(nou +.nr ?n 1 +.do nr _#p \\n(.s +.do nr _#f \\n(.f +.nm 1 +.. +. +.de n2 \" *** line numbering 2 +.nr _n \\n(ln-1\" save last line number that may have been output +.ie \\n(.$ \ +\{\ +. do ie \\B`\\$1` \ +\{\ +. ds |i \\$1 +. ds |j \\$1 +. nr |l 0 +. \" Pick off leading char and rest to check. +. do substring |i 0 0 \" +. do length |l \\$1 +. if \\n(|l>1 .do substring |j 1\" \" for +N / -N +. ie `\\*(|i`+` \ +. nr ln (\\n(_n)+\\*(|j +.\" This file's brace style doesn't permit indentation of \{. --GBR +. el \ +\{\ +. ie `\\*(|i`-` \ +. nr ln (\\n(_n)-\\*(|j +. el \ +. nr ln \\$1 \" unsigned N +. \} +. do nr _#p \\n(.s +. do nr _#f \\n(.f +. nm \\n(ln +. nr ?n 2 +. rm |i |j +. rr |l +.\} +. el \ +. do @err invalid numeric argument to 'n2': '\\$1' +.\} +.el \ +\{\ +. nm +. ie \\n(?N \ +\{\ +. ll \\n(_lu +. rr _l +. nr ?N 0 +.\} +. el \ +. po +\\n(nou +. nr ?n 0 +. nr ln 0 +.\} +.rr _n +.. +. +.de pa \" *** new page +.bp \\$1 +.. +. +.de ro \" *** roman page numbers +.af % i +.. +. +.de ar \" *** arabic page numbers +.af % 1 +.. +. +.de m1 \" *** position one space +.nr _0 \\n(hmu +.nr hm \\$1v +.nr tm +\\n(hmu-\\n(_0u +.rr _0 +.. +. +.de m2 \" *** position two space +.nr tm \\n(hmu+\\n(tpp+\\$1v +.. +. +.de m3 \" *** position three space +.nr bm \\n(fmu+\\n(tpp+\\$1v +.. +. +.de m4 \" *** position four space +.nr _0 \\n(fmu +.nr fm \\$1v +.nr bm +\\n(fmu-\\n(_0u +.. +. +.de sk \" *** leave a blank page (next page) +.if \\n(.$>0 \ +. do @err ignoring argument(s) to 'sk' +.nr ?s 1 +.. +. +. +.\" *** MISCELLANEOUS USER SUPPORT COMMANDS *** +. +. +.if !\n(.g .ig +.de re \" *** reset tabs (TROFF defines 15 stops default) +.ta T 0.5i +.. +. +.if \n(.g .ig +.de re +.ta 0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +.. +. +.de ba \" *** set base indent +.ie \\n(.$ \ +. nr $i \\$1n +.el \ +. nr $i \\n(siu*\\n($0u +.. +. +.de hl \" *** draw horizontal line +.br +.if '\*(.T'html' \ +\{\ +. HR +. do return +.\} +.ie \n(.g .do nr _I \\n[.in] +.el .nr _I \\n(.i +\l'\\n(.lu-\\n(_Iu' +.sp +.. +. +. +.\" *** PARAGRAPHING *** +. +. +.de pp \" *** paragraph +.lp \\n(piu +.. +. +.de lp \" *** left aligned paragraph +.@p +.if \\n(.$ \ +. ti +\\$1 +.nr $p 0 1 +.. +. +.de ip \" *** indented paragraph w/ optional tag +.if (\\n(ii>0)&(\\n(ii<1n) \ +. nr ii \\n(iin +.nr _0 \\n(ii +.if \\n(.$>1 \ +. nr _0 \\$2n +.@p \\n(_0u +.nr _I \\n(.iu +.in 0 +.nm +.di |i +\&\\$1 +.br +.di +.if \\n(?n \ +. nm \\n(ln +.in \\n(_Iu +.ds |j \\*(|i\\ +.ie \\w"\\*(|j" \ +\{\ +. ti -\\n(_0u +. ie \\w"\\*(|j">=\\n(_0 \ +\{\ +. do DEVTAG-COL 1 +\\*(|j +. do DEVTAG-COL-NEXT 2 +. br +. \} +. el \ +\{\ +. do DEVTAG-COL 1 +\\*(|j\h'|\\n(_0u'\c +. do DEVTAG-COL 2 +. \} +.\} +.el .do DEVTAG-COL 2 +.rr _0 +.rm |i |j +.. +. +.de np \" *** numbered paragraph +.\" use output comparison in case user has changed format of $p +.if '\\n($p'-1' \ +. nr $p 0 \" reset number after .bu +.nr $p +1 \" increment paragraph number +.@p \w'\0(000)\0'u +.ti -\w'\0(000)\0'u +\0(\\n($p)\h'|\w'\0(000)\0'u'\c +.. +. +.de bu \" *** bulleted paragraph +.br +.\" use output comparison in case user has changed format of $p +.if '\\n($p'-1' \ +. ns \" don't space between .bu paragraphs +.nr $p 0-1 \" mark "bulleted paragraph" mode +.@p \w'\0\(bu\0'u +.ti -\w'\0\(bu\0'u +\0\(bu\0\c +.. +. +.de @p \" --- initialize for paragraph +.do check_need_title +.if "\\n(.z"|e" .do @err eqn equation continuation unfulfilled +.in \\n($iu+\\n(pou +.if \\n(.$ \ +. in +\\$1n +.ce 0 +.rj 0 +.fi +.@F \\n(pf +.sz \\n(pp +.sp \\n(psu +.ne \\n(.Lv+\\n(.Vu +.ns +.. +. +. +.\" *** SECTION HEADINGS *** +. +. +.de sh \" *** section heading +.fi +.do check_need_title +.if (\\n(si>0)&(\\n(si<1n) \ +. nr si \\n(sin +.if '\*(.T'html' .nr si 0 +.ce 0 +.if '\*(.T'html' \ +\{\ +. do DEVTAG-SH \\$1 +. do nr devtag-needs-end-of-heading 1 +.\} +.@d "\\$1" +1 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 +.if !"\\$2"_" \ +\{\ +. ds |n \&\\$2 +. $p "\\*(|n" "\\*($n" \\n($0 +. $0 "\\*(|n" "\\*($n" \\n($0 +. rm |n +.\} +.nr $p 0 1 \" reset .np count +.. +. +.de @d \" --- change section depth +.if !""\\$1" \ +. nr $0 \\$1 +.if \\n($0&(\\n(.$>1) \ +. nr $\\n($0 \\$2 +.ds $n \&\" +.ie \\n($0>=1 \ +\{\ +. if '\\n($1'0' \ +. nr $1 1 +. if (\\n(.$>=3) .if !"\\$3"-" \ +. nr $1 \\$3 +. as $n \\n($1 +.\} +.el \ +. nr $1 0 +.ie \\n($0>=2 \ +\{\ +. if '\\n($2'0' \ +. nr $2 1 +. if (\\n(.$>=4) .if !"\\$4"-" \ +. nr $2 \\$4 +. as $n .\\n($2 +.\} +.el \ +. nr $2 0 +.ie \\n($0>=3 \ +\{\ +. if '\\n($3'0' \ +. nr $3 1 +. if (\\n(.$>=5) .if !"\\$5"-" \ +. nr $3 \\$5 +. as $n .\\n($3 +.\} +.el \ +. nr $3 0 +.ie \\n($0>=4 \ +\{\ +. if '\\n($4'0' \ +. nr $4 1 +. if (\\n(.$>=6) .if !"\\$6"-" \ +. nr $4 \\$6 +. as $n .\\n($4 +.\} +.el \ +. nr $4 0 +.ie \\n($0>=5 \ +\{\ +. if '\\n($5'0' \ +. nr $5 1 +. if (\\n(.$>=7) .if !"\\$7"-" \ +. nr $5 \\$7 +. as $n .\\n($5 +.\} +.el \ +. nr $5 0 +.ie \\n($0>=6 \ +\{\ +. if '\\n($6'0' \ +. nr $6 1 +. if (\\n(.$>=8) .if !"\\$8"-" \ +. nr $6 \\$8 +. as $n .\\n($6 +.\} +.el \ +. nr $6 0 +.. +. +.de sx \" *** heading up, no increment (2.1.1 -> 2.1) +.ce 0 +.ul 0 +.nr _0 \\n($0-1 +.if \\n(.$ .nr _0 +1 +.if \\n(.$ .nr _0 \\$1 +.@d \\n(_0 +.rr _0 +.$p "" "" \\n($0 +.nr $p 0 1 \" reset .np count +.. +. +.de uh \" *** unnumbered section heading +.$p "\\$1" +.$0 "\\$1" +.. +. +.de $p \" $$$ print section heading +.if (\\n(si>0)&(\\n(.$>2) \ +. nr $i \\$3*\\n(si +.in \\n($iu +.ie !"\\$1\\$2"" \ +\{\ +. sp \\n(ssu \" one of them is non-null +. ne \\n(.Lv+\\n(.Vu+\\n(psu+((\\n(spp*\\n(tvu*\\n(.Lu)/100u) +. \" exdent if \\$3 > 0 +. ie 0\\$3 \ +. ti -(\\n(siu-\\n(sou) +. el \ +. ti +\\n(sou +. @F \\n(sf +. sz \\n(sp +. if 0\\$3 \ +. $\\$3 +. if \w"\\$2">0 \\$2. +. if \w"\\$1">0 \\$1\f1\ \ \& +.\} +.el \ +. sp \\n(psu +.@F \\n(pf +.sz \\n(pp +.. +. +. +.\" *** COLUMNED OUTPUT *** +. +. +.de 2c \" *** double columned output +.do if d |f .do @err changing columnation with footnote pending +.br +.if \\n($m>1 \ +. 1c\" \" revert to 1c if already 2c +.nr $c 1 +.nr $m 2 +.if \\n(.$>1 \ +. nr $m \\$2 \" param 2: column quantity +.if \\n(.$>0 \ +. if !'\\$1'' \ +. nr $s \\$1n \" param 1: column separation +.nr $l (\\n(.l-((\\n($m-1)*\\n($s))/\\n($m +.xl \\n($lu +.mk _k +.ns +.. +. +.de 1c \" *** single columned output +.do if d |f .do @err changing columnation with footnote pending +.br +.nr $c 1 +.nr $m 1 +.ll \\n(_Lu\" return to normal output +.sp |\\n(.hu +.@O \\n(_ou +.. +. +.de bc \" *** begin column +.sp \\n(.pu +.. +. +. +.\" *** FLOATING TABLES AND NONFLOATING BLOCKS *** +. +. +.de (z \" *** begin floating keep +.if \n@>4 .tm >> (z, .z=\n(.z +.@D 4 \\$1 \\$2 +.@( +.. +. +.de )z \" *** end floating keep +.if \n@>4 .tm >> )z, .z=\n(.z +.sp \\n(zsu +.@) +.if \n@>4 .tm -- )z << @), .z=\n(.z +.rr _0 +.if !\\n(?b \ +. nr dn +(\\n(ppp*\\n(tvu)/200u+\\n(zsu +.nr dl -\n(.H \" fudge factor necessary to make it work +.ie ((\\n(dn+\n(.V)>=\\n(.t):(\\n(?a):((\\n(dl>\\n($l)&(\\n($c>1)) \ +\{\ +. nr ?a 1 +. if (\\n(dl>\\n($l)&(\\n($m>1) \ +. nr ?w 1 \" mark wider than one column (top) +. ds |x |t +.\} +.el \ +\{\ +. nr ?b 1 +. if (\\n(dl>\\n($l)&(\\n($m>1) \ +. nr ?W 1 \" mark wider than one column (bottom) +. nr _b +\\n(dnu +. \" avoid moving @f back past the current position +. if \\n(.p-\\n(nl-\n(.V<\\n(_b \ +. nr _b \\n(.p-\\n(nl-\n(.V +. ch @f -\\n(_bu +. ds |x |b +.\} +.da \\*(|x \" copy to save macro +.nf +.ls 1 +.nr ?k 1 +.if \n@>4 .tm -- )z >> \\*(|x +\!.if \\\\n(nl>(\\\\n(tm+2v) .ne \\n(dnu-\\n(zsu +.|k\" \" and the body +.if \n@>4 .tm -- )z << \\*(|x, .z=\\n(.z +.nr ?k 0 +.rm |k\" \" remove the temp macro +.da +.in 0 +.ls 1 +.xl \\n($lu +.ev +.if \n@>4 .tm << )z, .z=\\n(.z +.. +. +.de @k \" --- output keep +.if \n@>4 .tm >> @k, $1=\\$1, .z=\\n(.z +.ev 1 +.nf +.ls 1 +.in 0 +.if !`\\$2`ns` .sp \\n(zsu \" no pre-spacing if (b .. )b +.if \\n(?n \ +. nm \\n(ln +.\\$1 +.if \\n(?n \ +. nm +.br +.rm \\$1 +.ev +.. +. +.de (t \" XXX temp ref to (z +.(z \\$1 \\$2 +.. +. +.de )t \" XXX temp ref to )t +.)z \\$1 \\$2 +.. +. +.de (b \" *** begin block +.br +.@D 3 \\$1 \\$2 +.sp \\n(bsu +.@( +.if '\*(.T'html' .sp \\n(bsu +.. +. +.de )b \" *** end block +.br +.@) +.if (\\n(bt=0):(\\n(.t<\\n(bt) \ +. ne \\n(dnu \" make it all on one page +.@k |k ns +.ev \" return from display environment +.sp \\n(bsu+\\n(.Lv-1v +.. +. +.de @( \" --- begin keep +.if !"\\n(.z"" .do @err invalid nested keep (\\n(.z) +.@M +.di |k +\!'rs +.. +. +.de @M \" --- set modes for display +.nr ?k 1 +.@C 1 +.@F \\n(df +.if \\n($R .@V +.vs \\n(.sp*\\n(dvu/100u +.nf +.if "\\*(|p"F" \ +. fi \" set fill mode if "F" parameter +.if \\n(_d=4 \ +. in 0 +.if \\n(_d=3 \ +\{\ +. in +\\n(biu +. xl -\\n(biu +.\} +.if \\n(_d=1 \ +. ce 10000 +.. +. +.de @) \" --- end keep +.br +.if !"\\n(.z"|k" .do @err attempted close of never-opened keep +.nr ?k 0 +.di +.in 0 +.ce 0 +.. +. +.de (c \" *** begin block centered text +.br +.if "\\n(.z"|c" .do @err block centering calls cannot be nested +.if \\n(?n .nm +.if ``\\n(.z` \ +\{\ +. @C 1\" \" Ensure env. set up for centering in open text +. ev +.\} +.di |c +.. +. +.de )c \" *** end block centered text +.if !"\\n(.z"|c" .do @err unmatched block centering call +.br \" force out final line +.di +.if \n@>4 .tm >> .)c .l=\\n(.l .i=\\n(.i $i=\\n($i dl=\\n(dl +.ev 1 +.ls 1 +.nr __ (\\n(.lu-\\n(.iu-\\n(dlu)/2u +.if \\n(__u<0 .nr __ 0 +.in \\n(__u +.rr __ +.if \n@>4 .tm -- .)c << .in .l=\\n(.l .i=\\n(.i dl=\\n(dl +.if \\n(?n \ +. nm \\n(ln +.nf +.|c +.in +.ls +.if \\n(?n \ +. nm +.ev +.rm |c +.if \\n(?n \ +. nm \\n(ln +.. +. +. +.\" *** BLOCK QUOTES (OR WHATEVER) AND LISTS *** +. +. +.de (q \" *** begin block quote +.br +.@C 1 +.fi +.sp \\n(qsu +.in +\\n(qiu +.xl -\\n(qiu +.sz \\n(qp +.if \\n(?n \ +. nm \\n(ln +.. +. +.de )q \" *** end block quote +.br +.if \\n(?n \ +. nm +.ev +.sp \\n(qsu+\\n(.Lv-1v +.nr ?k 0 +.. +. +.de (l \" *** begin list +.br +.sp \\n(bsu +.@D 3 \\$1 \\$2 +.@M +.if \\n(?n \ +. nm \\n(ln +.if '\*(.T'html' .sp \\n(bsu +.. +. +.de )l \" *** end list +.\" XXX: Check for keep underflow here. +.br +.ev +.if \\n(?n \ +. nm \\n(ln +.sp \\n(bsu+\\n(.Lv-1v +.nr ?k 0 +.. +. +. +.\" *** PREPROCESSOR SUPPORT *** +. +. +.\" +.\" EQN +.\" +.de EQ \" *** equation start +.do if \\n[devtag-needs-end-of-heading] .do DEVTAG-EO-H +.do nr devtag-needs-end-of-heading 0 +.if "\*(.T"html" \ +\{\ +. do nr e-EQ-ll \\n(.l +. ll 1000n +.\} +.do HTML-IMAGE +.if !\\n(?e \ +\{\ +. if "\\n(.z"|e" .do @err nested eqn equation start +. @D 1 "\\$1" "\\$2" +. @C 2 +. di |e +.\} +.ls 1 +.in 0 +.nf +.. +. +.de EN \" *** equation end +.br +.do HTML-IMAGE-END +.if "\*(.T"html" \ +. do ll \\n[e-EQ-ll]u +.ie "\\$1"C" \ +\{\ +. nr ?e 1 +. sp \\n(esu +.\} +.el \ +\{\ +. nr ?e 0 +. di +. if \\n(dn \ +. @q\" \" actual equation output +. rm |e +. ev +.\} +.. +. +.de @q \" --- equation output +.nr _Q \\n(dnu +.ev +.sp \\n(esu \" output rest of preceding text +.if !"\\n(.z"" \!.ne \\n(_Qu +.ne \\n(_Qu+\n(.Vu \" keep it on one page +.@C 2\" \" .ev 2 may be jumbled from header +.if \\n(_d=1 \ +. in (\\n(.lu+\\n($iu-\\n(dlu)/2u +.if \\n(_d=2 \ +. in \\n($iu +.if \\n(_d=3 \ +. in \\n(biu+\\n($iu +.if \\n(_d=4 \ +. in 0 +.mk _q +.if \n@>1 .tm --@q: _Q=\\n(_Q _q=\\n(_q nl=\\n(nl |p=\\*(|p +.if !"\\*(|p"" \ +\{\ +. rs +. sp (\\n(_Qu-\\n(.vu)/2u +. tl """\\*(|p" +. rt \\n(_qu +.\} +.if \\n(?n \ +. nm \\n(ln +.|e +.if \\n(?n \ +. nm +.sp |\\n(_qu+\\n(_Qu +.sp \\n(esu+\\n(.Lv-1v +.rr _q +.rr _Q +.. +. +.\" +.\" TBL +.\" +.de TS \" *** table start +.sp \\n(bsu +.if "\*(.T"html" \ +\{\ +. do nr e-TS-ll \\n(.l +. ll 1000n +.\} +.do HTML-IMAGE +.@C 1 +.fi \" drop into fill mode for text boxes +.if "\\$1"H" \ +\{\ +. di |h \" save header part +. nr ?T 1 +.\} +.ls 1 +.ch @f -(\\n(_bu+1v) \" set pseudo-trap for bottom line +.if \\n(.p-\\n(_b-1v<=\\n(nl \ +. ch @f \\n(nlu+\n(.Vu +.. +. +.de TH \" *** end header part of table +.nr T. 0 +.T# 0 +.if \\n(?n \!.nm +.di +.nr _T \\n(?T +.nr ?T 0 +.ne \\n(dnu+1v +.nr ?T \\n(_T +.nr _i \\n(.i +.if \\n(?n .nm \\n(ln +.in 0 +.|h\" \" put in the initial header +.in \\n(_iu +.rr _i +.mk #T +.. +. +.de TE \" *** table end +.nr ?T 0 +.ch @f -\\n(_bu \" reset pseudo-trap +.if \\n(.p-\\n(_b<=\\n(nl \ +. ch @f \\n(nlu+\n(.Vu +.ev +.do HTML-IMAGE-END +.if "\*(.T"html" \ +. do ll \\n[e-TS-ll]u +.sp \\n(bsu+\\n(.Lv-1v +.re +.. +. +.de T& +.. +. +.\" +.\" REFER +.\" +.do mso refer-me.tmac +. +.\" +.\" IDEAL +.\" +.de IS \" *** start ideal picture +.nr g7 \\n(.u +.ls 1 +.. +. +.de IF +.if \\n(g7 .fi +.ls +.. +. +.de IE \" *** end ideal picture +.if \\n(g7 .fi +.ls +.. +. +.de && \" no-op so we can define and end one macro inside another +.. +. +.\" +.\" PIC +.\" +.de PS \" *** start picture: $1=height, $2=width in units or inches +.sp 0.3 +.do HTML-IMAGE +.nr g7 \\$2 +.in (u;\\n(.l-\\n(g7>?0/2) +.ne \\$1u +.nr g7 \\n(.u +.ls 1 +.ie \\n(?n \ +\{\ +. do nr PS_nm_cnt 0 +. do de PS_nm_check && \" define macro to emit .nm at top diversion +. if \n@>4 .tm -- PS: \\\\$1 \\\\$2 .z=\\\\n(.z PS_nm_cnt=\\\\n[PS_nm_cnt] +. \" Multiple .PS/.PE in a keep. +. if `\\\\$2`init` \ +. do nr PS_nm_cnt \\\\n[PS_nm_cnt]+1 +. ie `\\\\n(.z`` \ +\{\ +. if `\\\\$1`suspend` \ +. nm +. if `\\\\$1`resume` \ +\{\ +. nm \\\\n(ln +. do nr PS_nm_cnt \\\\n[PS_nm_cnt]-1 +. do if !\\\\n[PS_nm_cnt] \ +\{\ +. do rm PS_nm_check +. do rr PS_nm_cnt +.\} +.\} +.\} +.el \!.PS_nm_check \\\\$1 +. && +. mk _q \" emit a single numbered line for PS picture +. rs +\&\ \" space +. br +. rt \\n(_qu +. do PS_nm_check suspend init +.\} +.. +. +.rm && +. +.de PF \" *** end picture; "fly back" to top +.if \\n(?n .do PS_nm_check resume +.ls +.in +.if \\n(g7 .fi +.do HTML-IMAGE-END +.. +. +.de PE \" *** end picture +.PF +.sp .6 +.. +. +.\" +.\" GREMLIN +.\" +.de GS \" *** start gremlin picture +.ie '\*(.T'html' \ +\{\ +. ie "\\$1"L" .do HTML-IMAGE-LEFT +. el .ie "\\$1"R" .do HTML-IMAGE-RIGHT +. el .do HTML-IMAGE +.\} +.el \ +\{\ +. nr g7 (\\n(.lu-\\n(g1u)/2u +. if "\\$1"L" .nr g7 \\n(.iu +. if "\\$1"R" .nr g7 \\n(.lu-\\n(g1u +. in \\n(g7u +. nr g7 \\n(.u +. ls 1 +. nf +. ne \\n(g2u +.\} +.. +. +.de GE \" *** end gremlin picture +.ie '\*(.T'html' .do HTML-IMAGE-END +.el \ +\{\ +. GF +. sp .6 +.\} +.. +. +.de GF \" *** finish gremlin picture; stay at top +.ls +.in +.if \\n(g7 .fi +.. +. +. +.\" *** FONT AIDS *** +. +. +.de sz \" *** set point size and vertical spacing +.ps \\$1 +.if \\n($r .@v +.vs \\n(.sp*\\n(tvu/100u \" default vs at pointsize + 20% +.. +. +.de @v \" --- possibly set tv from $r +.if (1i>=240u)&(1p<=\\n($r)&(\\n($r<=4p) .nr tv \\n($r00/1p +.. +. +.de @V \" --- possibly set dv from $R +.if (1i>=240u)&(1p<=\\n($R)&(\\n($R<=4p) .nr dv \\n($R00/1p +.. +. +.de @E \" --- store in _F argument to \f for restoring font +.ie \\n(.f<10 \ +. ds _F \\n(.f +.el \ +\{\ +. ie \\n(.f<100&\n(.g \ +. ds _F (\\n(.f +. el \ +. ds _F P +.\} +.. +. +.de r \" *** enter roman font +.do check_need_title +.@E +.ft 1 +.if \\n(.$ \&\\$1\f\\*(_F\\$2 +.do check_need_title +.. +. +.de i \" *** enter italic +.do check_need_title +.@E +.ft 2 +.if \\n(.$ \&\,\\$1\/\f\\*(_F\\$2 +.do check_need_title +.. +. +.de b \" *** enter boldface +.do check_need_title +.@E +.ft 3 +.if \\n(.$ \&\\$1\f\\*(_F\\$2 +.do check_need_title +.. +. +.de rb \" *** enter real boldface +.do check_need_title +.@E +.ft 3 +.if \\n(.$ \&\\$1\f\\*(_F\\$2 +.do check_need_title +.. +. +.de bi \" *** enter bold italic +.do check_need_title +.@E +.ft 4 +.if \\n(.$ \&\,\\$1\/\f\\*(_F\\$2 +.do check_need_title +.. +. +.de u \" *** enter underlined word +.\" If the first argument would break, then (in troff mode), this +.\" underlines only the words appearing only the last output line, with +.\" the underline extending all the way into the left margin. +.ie t \\$1\l'|0\(ul'\\$2 +.el \(ul\\$1\(ul\\$2 +.. +. +.\" This alternative version of the `u` macro uses the groff \Z +.\" extension to get the underlining to accurately fit under the words +.\" at the expense of no longer adjusting them. If the first argument +.\" would break, the output line is overset. +.if !\n(.g .ig +.de u +.ie t .do nop \Z'\\$1'\v'.25m'\D'l \w'\\$1'u 0'\v'-.25m'\\$2 +.el \(ul\\$1\(ul\\$2 +.. +. +.de q \" *** enter quoted word +\&\\*(lq\\$1\\*(rq\\$2 +.. +. +.de bx \" *** enter boxed word +.ie t \ +\{\ +. ie '\\*(.T'html' \\$1\\$2 +. el \k~\(br\|\\$1\|\(br\l'|\\n~u\(rn'\l'|\\n~u\(ul'\^\\$2 +.\} +.el \ +\{\ +. ie \\n(.g .do nop \m[black]\M[white]\Z'\\$1'\h'\w'\\$1'u'\ +\m[]\M[]\\$2 +. el |\\$1|\\$2 +.\} +.. +. +.de sm \" *** print in smaller font +\s-1\\$1\\s+1\\$2 +.. +. +.de @F \" --- change font (0 -> no change) +.nr ~ \\$1 +.if \\n~>0 \ +. ft \\n~ +.rr ~ +.. +. +. +.\" *** FOOTNOTING *** +. +. +.de (f \" *** begin footnote +.if "\\n(.z"|f" .do @err footnotes cannot be nested +.if \\n(_f \ +. if !\\n(_f=\\n($m \ +. do @err queueing \\n($m-column footnote after \ +\\n(_f-column footnote +.nr _f \\n($m +.ie "\\n(.z"" \ +\{\ +. nr _D \\n(dn +. nr _0 1v+\\n(nlu +. ev 2 +. nm +. da |f +. in 0 +. xl \\n($lu-\\n(fuu +. @F \\n(ff +. sz \\n(fp +. vs \\n(.sp*\\n(dvu/100u +. if !\\n(?f \ +\{\ +. nr _b +1v \" allow space for $s +. $s +. \} +. br +. if \\n(.p-\\n(_b-\\n(_0-\\n(.h-1v-\\n(fs<0 \ +\{\ +. da\" \" won't fit on page at all +. bc +. if !\\n(?f \ +. rm |f +. da |f +.\" Next 5 lines could be dropped if headers had their own environment. +. in 0 \" reset everything from .bc +. xl \\n($lu-\\n(fuu +. @F \\n(ff +. sz \\n(fp +. vs \\n(.sp*\\n(dvu/100u +. if !\\n(?f \ +. $s +. br +. \} +. rr _0 +. sp \\n(fsu +. nr ?f 1 +. fi +. if !"\\$1"_" \ +. ti \\n(fiu +. if \n@>2 .tm << (f $f=\\n($f +.\} +.el \ +\{\ +. ev 2 +. nm +. in 0 +. xl \\n($lu-\\n(fuu +. @F \\n(ff +. sz \\n(fp +. vs \\n(.sp*\\n(dvu/100u +. fi +\!.(f \\$1 +\!.@N +.\} +.. +. +.de @N \" --- set no fill mode in the top-level diversion +.ie "\\n(.z"" .nf +.el \!.@N +.. +. +.de )f \" *** end footnote +.ie "\\n(.z"|f" \ +\{\ +. if \\n* .nr $f +1 +. nr * 0 +. in 0 +. da +. ev +. if \\n(_w<\\n(dl \ +. nr _w \\n(dl \" compute maximum fn width +. nr _b +\\n(dn +. ch @f -\\n(_bu +. if \\n(.p-\\n(_b<=\\n(nl \ +. ch @f \\n(nlu+\n(.Vu +. nr dn \\n(_D +. rr _D +.\} +.el \ +\{\ +. br +\!.)f +. ev +.\} +.. +. +.@R ff +.if \n(ff<=0 \ +. nr ff 1 \" footnote font: Times Roman +.@R fp +.if \n(fp<=0 \ +. nr fp 8 \" footnote pointsize +. +.de $s \" $$$ footnote separator +.nr __ 2i +.if \\n($lu<\\n(__u .nr __ \\n($lu +\l'\\n(__u' +.rr __ +.. +. +. +.\" *** DELAYED TEXT *** +. +. +.de (d \" *** begin delayed text +.am |d )d +.sp \\n(bsu +.vs \\n(.sp*\\n(dvu/100u +.. +. +.de )d \" *** end delayed text +.vs \\n(.sp*\\n(tvu/100u +.nr $d +1 +.. +. +.de pd \" *** print delayed text +.|d +.rm |d +.nr $d 1 +.. +. +. +.\" *** INDEXES (TABLE OF CONTENTS) *** +. +. +.nr _x 0 1 +.do nr _xn 0 +.af _x a +. +.de (x \" *** begin index entry +.if \n@>4 .tm >> (x, .z=\\n(.z +.ds |X x +.if \\n(.$>0 \ +. ds |X \\$1 +.ie "\\n(.z"" \ +. nr _z 0 +.el \ +. nr _z 1 +.@\\n(_z +.. +. +.de @0 \" --- finish (x if no current diversion +.am %\\*(|X )x +.sp \\n(xsu +.ti -\\n(piu +.. +. +.de @1 \" --- finish (x if current diversion +.if "\\n(_x"z" .nr _x 0 +.de =\\n+(_x )x +.. +. +.de )x \" *** end index entry +.if \n@>4 .tm >> )x, .z=\\n(.z +.ie "\\n(.z"" \ +\{\ +. ds |x \\n% +. if \\n(.$>0 \ +. ds |x \\$1 +. if "\\*(|x"_" \ +. ig .. +. am %\\*(|X .. +. if \w"\\$2">(\\n(.l-\\n(.i-\\n(.k) \ +. ti +\\n(xuu +\\\\a\\\\t\\$2\\*(|x +... +. rm |x +. rm |X +.\} +.el \ +\{\ +\!.(x \\*(|X +\!\\\\*(=\\n(_x\\\\ +\!.)x \\$1 \\$2 +\!.rm =\\n(_x +.\} +.. +. +.de xp \" *** print the index +.br +.@C 2 +.ls 1 +.vs \\n(.sp*\\n(dvu/100u +.fi +.in +\\n(piu +.ds |X x +.if \\n(.$>0 \ +. ds |X \\$1 +.xl -(\\n(xuu+\w'...'u) +.di |x +.%\\*(|X +.br +.di +.rm %\\*(|X +.xl \\n($lu +.rm |X +.ev +.nf +.in 0 +.ta \\n(.lu-\\n(xuuR \\n(.luR +.|x +.fi +.in +.rm |x +.. +. +. +.\" *** HTML VERSIONS OF .x(, .x), AND .xp *** +. +. +.do de1 (x-html \" --- create TAG and divert text +.nr _x +1 +.nr _xn +1 +.TAG "_x\\n[_x] +.br +.di |x\\n[_xn] +.br +.. +. +.do de1 )x-html \" --- end diversion +.br +.di +.. +. +.do de1 xp-html \" --- create list of links +.nr _xx 1 +.br +.ev xp-html-ev +.sp +.ULS +.while \\n[_xx]<=\\n[_xn] \ +\{\ +. br +. unformat |x\\n[_xx] +. di xp-html-div +. br +. ll 100i +. fi +. |x\\n[_xx] +. br +. di +. asciify xp-html-div +. rm xp-html-as +. as xp-html-as # +. as xp-html-as _x\\n[_xx] +. ll +. LI +. URL \\*[xp-html-as] "\\*[xp-html-div] +. rm xp-html-as +. nr _xx +1 +.\} +.ULE +.sp +.ev +.. +. +.if '\*(.T'html' \ +\{\ +. rm (x +. do als (x (x-html +. rm )x +. do als )x )x-html +. rm xp +. do als xp xp-html +.\} +. +. +.\" *** CHAPTERS AND TITLES *** +. +. +.de +c \" *** begin chapter +.ep\" \" force out footnotes +.if \\n(?o:\\n(?a \ +\{\ +. bp \" force out a table or more footnote +. rs +. ep +.\} +.nr ?C 1 +.nr $f 1 +.if \\n(?R \ +. pn 1 +.bp +.in \\n($iu \" reset the indent +.rs +.ie \\n(.$ \ +. $c "\\$1" +.el \ +. sp 3 +.. +. +.de ++ \" *** declare chapter type +.nr _0 0 +.if "\\$1"C" \ +. nr _0 1 \" chapter +.if "\\$1"RC" \ +. nr _0 11 \" renumbered chapter +.if "\\$1"A" \ +. nr _0 2 \" appendix +.if "\\$1"RA" \ +. nr _0 12 \" renumbered appendix +.if "\\$1"P" \ +. nr _0 3 \" preliminary material +.if "\\$1"B" \ +. nr _0 4 \" bibliographic material +.if "\\$1"AB" \ +. nr _0 5 \" abstract +.if \\n(_0=0 \ +. do @err invalid segment type to '++': '\\$1' +.nr ?R 0 +.if \\n(_0>10 \ +\{\ +. nr ?R 1 +. nr _0 -10 +.\} +.nr ch 0 1 +.if (\\n(_0=3):(\\n(_0=5) \ +. pn 1 \" must do before .ep +.if !\\n(_0=\\n(_M .if \\n(_M=3 \ +. pn 1 \" must do before .ep +.ep\" \" end page for correct page number types +.if \\n(_0=1 \ +\{\ +. af ch 1 +. af % 1 +.\} +.if \\n(_0=2 \ +\{\ +. af ch A +. af % 1 +.\} +.if \\n(_0=3 \ +. af % i +.if \\n(_0=4 \ +. af % 1 +.if \\n(_0=5 \ +. af % 1 +.if \\n(.$>1 \ +. he \\$2 +.nr _M \\n(_0 +.rr _0 +.. +. +.de $c \" $$$ print chapter title +.sz 12 +.ft 3 +.ce 1000 +.if \\n(_M<3 \ +. nr ch +1 +.ie \\n(_M=1 \\*(wc\~\\n(ch +.el .if \\n(_M=2 \\*(wa\~\\n(ch +.if \w"\\$1" .sp 3-\\n(.L +.if \w"\\$1" \\$1 +.if (\\n(_M<3):(\w"\\$1") \ +. sp 4-\\n(.L +.ce 0 +.ft +.sz +.ie \\n(_M=1 \ +. $C "\\*(wc" \\n(ch "\\$1" +.el .if \\n(_M=2 \ +. $C "\\*(wa" \\n(ch "\\$1" +.. +. +.de tp \" *** title page +.hx +.bp +.br +.rs +.pn \\n% +.. +. +.\" *** DATE AND LOCALIZATION *** +.ds wa Appendix\" +.ds wc Chapter\" +.do ds _mo1 January\" +.do ds _mo2 February\" +.do ds _mo3 March\" +.do ds _mo4 April\" +.do ds _mo5 May\" +.do ds _mo6 June\" +.do ds _mo7 July\" +.do ds _mo8 August\" +.do ds _mo9 September\" +.do ds _mo10 October\" +.do ds _mo11 November\" +.do ds _mo12 December\" +.do ds _dw1 Sunday\" +.do ds _dw2 Monday\" +.do ds _dw3 Tuesday\" +.do ds _dw4 Wednesday\" +.do ds _dw5 Thursday\" +.do ds _dw6 Friday\" +.do ds _dw7 Saturday\" +.do ds _td_format \\*(mo \\n(dy, \\n(y4\" +. +.de ld \" *** (re-)initialize date and localization +.\" Work around troff `yr` register's y2k problem. +.nr y2 \\n(yr%100 +.af y2 00 +.nr y4 \\n(yr+1900 +. +.do ds dw \\*[_dw\\n(dw] +.do ds mo \\*[_mo\\n(mo] +.do ds td \\*[_td_format] +. +.\" Set package default hyphenation mode, but override it with groff's +.\" localized value if available. +.hy 6 +.do if r \\*[locale]*hyphenation-mode-trap \ +. do hy \\n[\\*[locale]*hyphenation-mode-trap] +.. +. +.ld +. +.\" *** PARAMETRIC INITIALIZATIONS *** +. +. +.\" In groff 1.23, we keep $v and $V to maintain 30 years of continuity, +.\" but expose new names `tv` and `dv`, respectively, making it more +.\" obvious that user alteration of these register values is supported. +.\" See discussion of `$R` and `$r` below. +.nr tv \n(.v00+\n(.sp-1/\n(.sp \" vs as % of ps for .sz request +.nr dv \n(tv \" same for displays & footnotes +.do aln $v tv +.do aln $V dv +.nr hm 4v \" header margin +.nr tm 7v \" top margin +.nr bm 6v \" bottom margin +.nr fm 3v \" footer margin +.nr tf 3 \" title font: (real) Times Bold +.nr tp 10 \" title point size +.nr bi 4m \" indent for blocks +.nr pi 5n \" indent for paragraphs +.nr pf 1 \" normal text font +.nr pp 10 \" normal text point size +.nr qi 4n \" indent for quotes +.nr qp -1 \" down one point +.nr ii 5n \" indent for .ip's and .np's +.nr $m 1 \" max number of columns +.nr $s 4n \" column separation +.nr sf 3 \" section font -- Times Bold +.nr sp 10 \" section title pointsize +.nr ss 12p \" section prespacing +.nr si 0 \" section indent +.nr sx 0.2m \" super/subscript x-height adjustment +.nr no \w'0000'u \" offset for line numbers +. +.@R 0x\" set by GNU pic to _disable_ \x in super/scripting +. +.\" *** OTHER INITIALIZATION *** +. +.\" Define strings for super- and subscripting. groff me does not +.\" bother with half-line motions in nroff mode, since we have no output +.\" driver (for that mode) that supports them; consequently we don't +.\" emit \x escape sequences in that case either. If someone implements +.\" a Model 37 or line printer emulator we can target, this decision +.\" could be revisited. +.\" +.\" Adjust the line height with \x if the `0x` register is zero (a +.\" pic(1) convention) by the amount in `sx` (a groff 1.23 extension). +.ie t \ +\{\ +.ds { \v'-0.4m'\x'\\n(0x=0*-1u*\\n(sxu'\s-3 +.ds } \s+3\v'0.4m' +.\} +.el \ +\{\ +.ds { [\" +.ds } ]\" +.\} +.\" for compatibility with traditional -me +.\" (the first will work only in compatibility mode) +.ds [ \*{ +.ds ] \*} +.ds @< <\" +.ds @> >\" +.if \n(.g \ +\{\ +.do if c \(la .ds @< \(la\" +.do if c \(ra .ds @> \(ra\" +.\} +.ie t \ +\{\ +.ds < \v'0.4m'\x'\\n(0x=0*\\n(sxu'\s-3 +.ds > \s+3\v'-0.4m' +.\} +.el \ +\{\ +.ds < \*(@< +.ds > \*(@> +.\} +.ds - \(em +.\" Avoid warnings from groff -ww. +.@S |0 +.@S |1 +.@S |2 +.@S |3 +.@S $C +.@S $H +.@S $0 +.@S $1 +.@S $2 +.@S $3 +.@S $4 +.@S $5 +.@S $6 +.@S $7 +.@S $8 +.@S $9 +.@S .. +. +.@R po\" \" simulated page offset +.@R $0\" \" section depth +.@R $1\" \" section numbers a.b.c.d.e.f +.@R $2\" +.@R $3\" +.@R $4\" +.@R $5\" +.@R $6\" +.@R $i\" \" paragraph base indent +.@R $p\" \" numbered paragraph number +.\" [Before groff 1.06] the groff -me macros treated the $r and $R +.\" number registers in a way that was incompatible with the BSD -me +.\" macros. The reason for this was that the approach used by the BSD +.\" -me macros does not work with low resolution devices such as -TX75 +.\" and -TX100. However, this caused problems with existing -me +.\" documents. In [groff 1.06], the vertical spacing is controlled by +.\" the $v and $V registers which have the same meaning as $r and $R in +.\" earlier groff releases. In addition, if the $r or $R register is +.\" set to a value that would be correct for the BSD -me macros and a +.\" low resolution device is not being used, then an appropriate value +.\" for the $v or $V register is derived from the $r or $R register. +.\" +.\" Thirty years later, we rename `$v` to `tv` and `$V` to `dv`. +.@R $r\" \" ratio of vs to ps (may override tv) +.@R $R\" \" same for displays (may override dv) +.@R df\" \" display font: same as surrounding text +.@R so\" \" additional section title offset +.@R fu\" \" footnote undent +.@R bt\" \" block keep threshold +.@R *\" \" has \** been referenced? +.@R ?a\" \" pending floating keep at page top? +.@R ?b\" \" pending floating keep at page bottom? +.@R ?C\" \" at chapter header? +.@R ?e\" \" in equation? +.@R ?f\" \" inside footnote? +.@R _f\" \" column count of previous footnote +.@R ?H\" \" suppress headers and footers next page? +.@R ?I\" \" has the header trap been sprung? +.@R ?N\" \" numbering with shorter line length? +.@R ?n\" \" n1 mode? +.@R ?o\" \" footnote overflow? +.@R ?R\" \" renumbered chapter? +.@R ?s\" \" skip next page? +.@R ?T\" \" inside .TS H? +.@R ?W\" \" wide floating keep at page bottom? +.@R ?w\" \" wide floating keep at page top? +. +.nr fi 0.3i +.nr _o \n(.o +.nr $b 3 \" bold +.nr ps 0.35v +.if \n(ps<\n(.V .nr ps \n(.V +.nr bs \n(ps \" block pre/post spacing +.nr qs \n(ps \" quote pre/post spacing +.nr zs 1v \" float-block pre/postspacing +.nr xs 0.2v \" index prespacing +.nr xu 0.5i \" index undent +.nr fs 0.2v \" footnote prespacing +.nr es 0.5v \" equation pre/postspacing +.if \n(es<\n(.V .nr es \n(.V +.wh 0 @h \" set header +.nr $l \n(.lu \" line length (of column) +.nr _L \n(.lu \" line length of page +.nr $c 1 \" current column number +.nr $f 1 \" footnote number +.ds * \\*{\\n($f\\*}\k*\" \" footnote mark +.nr $d 1 \" delayed text number +.ds # [\\n($d]\" \" delayed text mark +.nr _M 1 \" encoded document segment type +.ds lq \(lq\" \" left quote +.ds rq \(rq\" \" right quote +.em @z +. +.\" Set line length and get .lt side effect. +.if t .ll \n(_Lu +.if n .ll 6.0i +. +.\" *** FOREIGN LETTERS AND SPECIAL CHARACTERS *** +. +. +.ds #h ((1u-(\\\\n(.fu%2u))*0.13m) +.ds #v 0.6m +. +.\" \" accents +.ds ' \h'0'\k_\h'-(\\n(.wu*8/10-\*(#h)'\(aa\h'|\\n_u' +.ds ` \h'0'\k_\h'-(\\n(.wu*7/10-\*(#h)'\(ga\h'|\\n_u' +. +.\" \" umlaut +.ds : \h'0'\k_\h'-(\\n(.wu*8/10-\*(#h+0.1m)'\v'-\*(#v'\z.\h'0.2m'.\h'|\\n_u'\v'\*(#v' +. +.\" \" circumflex and tilde +.ds ^ \h'0'\k_\h'-(\\n(.wu-\*(#h-0.05m)'^\h'|\\n_u' +.ds ~ \h'0'\k_\h'-(\\n(.wu-\*(#h-0.05m)'~\h'|\\n_u' +. +.\" \" cedilla and czech +.ds , \h'0'\k_\h'-(\\n(.wu)',\h'|\\n_u' +.ds v \h'0'\k_\h'-(\\n(.wu*9/10-\*(#h)'\v'-\*(#v'\s-4v\s0\v'\*(#v'\h'|\\n_u' +. +.\" \" Norwegian A or angstrom +.ds o \h'0'\k_\h'-(\\n(.wu+\w'\(de'u-\*(#h)/2u'\v'-0.4n'\z\(de\v'0.4n'\h'|\\n_u' +. +.\" \" there exists, for all +.ds qe \s-2\v'0.45m'\z\(em\v'-0.625m'\z\(em\v'-0.625m'\(em\v'0.8m'\s0\h'-0.1m'\v'-0.05m'\(br\v'0.05m'\h'0.1m' +.ds qa \z\e\h'0.35m'\z\(sl\h'-0.33m'\v'-0.3m'\s-4\(em\s0\v'0.3m'\h'0.15m' +.rm #h #v +. +.de @U +.do @err the '\\$1' macro is not supported by this version of 'me' +.. +. +.de lo +.@U lo +.. +. +.de th +.@U th +.. +. +.de ac +.@U ac +.. +. +.\" Local Variables: +.\" mode: nroff +.\" fill-column: 72 +.\" End: +.\" vim: set filetype=nroff textwidth=72: |