.\" 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: