/
usr
/
share
/
groff
/
1.18.1.4
/
tmac
/
/usr/share/groff/1.18.1.4/tmac
mkdir
upload
Name
Size
Mode
Actions
mdoc/
-
0755
rm
mm/
-
0755
rm
a4.tmac
323
0644
edit
dl
rm
an-old.tmac
11589
0644
edit
dl
rm
an.tmac
35
0644
edit
dl
rm
andoc.tmac
284
0644
edit
dl
rm
andocj.tmac
166
0644
edit
dl
rm
cp1047.tmac
2795
0644
edit
dl
rm
doc-old.tmac
36437
0644
edit
dl
rm
doc.tmac
71837
0644
edit
dl
rm
docj.tmac
71837
0644
edit
dl
rm
dvi.tmac
22315
0644
edit
dl
rm
e.tmac
19504
0644
edit
dl
rm
ec.tmac
820
0644
edit
dl
rm
eqnrc
1364
0644
edit
dl
rm
euc-jp.tmac
168
0644
edit
dl
rm
gm.tmac
77025
0644
edit
dl
rm
gmse.tmac
3538
0644
edit
dl
rm
gs.tmac
36805
0644
edit
dl
rm
html.tmac
20634
0644
edit
dl
rm
hyphen.cs
36026
0644
edit
dl
rm
hyphen.us
27667
0644
edit
dl
rm
latin1.tmac
2816
0644
edit
dl
rm
lbp.tmac
206
0644
edit
dl
rm
lj4.tmac
440
0644
edit
dl
rm
m.tmac
77025
0644
edit
dl
rm
man.tmac
36
0644
edit
dl
rm
mandoc.tmac
39
0644
edit
dl
rm
mdoc.tmac
35
0644
edit
dl
rm
me.tmac
31
0644
edit
dl
rm
mm.tmac
31
0644
edit
dl
rm
mmse.tmac
35
0644
edit
dl
rm
mom.tmac
33
0644
edit
dl
rm
ms.tmac
31
0644
edit
dl
rm
mse.tmac
3538
0644
edit
dl
rm
om.tmac
264890
0644
edit
dl
rm
pic.tmac
117
0644
edit
dl
rm
ps.tmac
18871
0644
edit
dl
rm
psatk.tmac
1080
0644
edit
dl
rm
psold.tmac
1806
0644
edit
dl
rm
pspic.tmac
2757
0644
edit
dl
rm
s.tmac
36805
0644
edit
dl
rm
safer.tmac
196
0644
edit
dl
rm
trace.tmac
1047
0644
edit
dl
rm
troffrc
1217
0644
edit
dl
rm
troffrc-end
694
0644
edit
dl
rm
tty-char.tmac
4775
0644
edit
dl
rm
tty.tmac
1309
0644
edit
dl
rm
www.tmac
14327
0644
edit
dl
rm
X.tmac
1501
0644
edit
dl
rm
Xps.tmac
1452
0644
edit
dl
rm
Edit:
/usr/share/groff/1.18.1.4/tmac/s.tmac
(36805B)
.\" -*- nroff -*- .ig s.tmac Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with groff; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. .. .if !\n(.g .ab These ms macros require groff. .if \n(.C \ . ab The groff ms macros do not work in compatibility mode. .\" Enable warnings (only if none are given on the command line). .\" You can delete this if you want. .if (\n[.warn] == 65543) .warn .\" See if already loaded. .if r GS .nx .nr GS 1 .de @error .tm \\n(.F:\\n(.c: macro error: \\$* .. .de @warning .tm \\n(.F:\\n(.c: macro warning: \\$* .. .de @fatal .ab \\n(.F:\\n(.c: fatal macro error: \\$* .. .de @not-implemented .@error sorry, \\$0 not implemented .als \\$0 @nop .. .als TM @not-implemented .als CT @not-implemented .de @nop .. .de @init .nr PO \\n(.o .\" a non-empty environment .ev ne \c .ev .ev nf 'nf .ev .. .ds REFERENCES References .ds ABSTRACT ABSTRACT .ds TOC Table of Contents .ds MONTH1 January .ds MONTH2 February .ds MONTH3 March .ds MONTH4 April .ds MONTH5 May .ds MONTH6 June .ds MONTH7 July .ds MONTH8 August .ds MONTH9 September .ds MONTH10 October .ds MONTH11 November .ds MONTH12 December .ds MO \\*[MONTH\n[mo]] .ds DY \n[dy] \*[MO] \n[year] .de ND .if \\n[.$] .ds DY "\\$* .. .de DA .if \\n[.$] .ds DY "\\$* .ds CF \\*[DY] .. .\" indexing .de IX .tm \\$1\t\\$2\t\\$3\t\\$4 ... \\n[PN] .. .\" print an error message and then try to recover .de @error-recover .@error \\$@ (recovering) .nr *pop-count 0 .while !'\\n(.z'' \{\ . \"@warning automatically terminating diversion \\n(.z . ie d @div-end!\\n(.z .@div-end!\\n(.z . el .*div-end-default . nr *pop-count +1 . \" ensure that we don't loop forever . if \\n[*pop-count]>20 .@fatal recovery failed .\} .while !'\\n[.ev]'0' .ev .par@reset-env .par@reset .. .de *div-end-default .ds *last-div \\n(.z .br .di .ev nf .\\*[*last-div] .ev .. .\" **************************** .\" ******** module cov ******** .\" **************************** .\" Cover sheet and first page. .de cov*err-not-after-first-page .@error \\$0 is not allowed after the first page has started .. .de cov*err-not-before-tl .@error \\$0 is not allowed before TL .. .de cov*err-not-again .@error \\$0 is not allowed more than once .. .de cov*err-not-after-ab .@error \\$0 is not allowed after first AB, LP, PP, IP, SH or NH .. .als AU cov*err-not-before-tl .als AI cov*err-not-before-tl .als AB cov*err-not-before-tl .de cov*first-page-init .rm cov*first-page-init .par@init .als RP cov*err-not-after-first-page .@init .ie \\n[cov*rp-format] \{\ . pg@cs-top . als FS cov*FS . als FE cov*FE .\} .el \{\ . pg@top . als FS @FS . als FE @FE .\} .wh 0 pg@top .CHECK-FOOTER-AND-KEEP .. .wh 0 cov*first-page-init .\" This handles the case where FS occurs before TL or LP. .de FS .br \\*[FS]\\ .. .nr cov*rp-format 0 .nr cov*rp-no 0 .\" released paper format .de RP .nr cov*rp-format 1 .if \\n[.$] .if '\\$1'no' .nr cov*rp-no 1 .pn 0 .. .de TL .br .als TL cov*err-not-again .rn @AB AB .rn @AU AU .rn @AI AI .if !'\*(.T'html' .di cov*tl-div .par@reset .ft B .ps +2 .vs +3p .ll (u;\\n[LL]*5/6) .nr cov*n-au 0 .HTML-TAG ".tl" .. .de @AU .par@reset .if !'\\n(.z'' \{\ . br . di .\} .nr cov*n-au +1 .di cov*au-div!\\n[cov*n-au] .nf .ft I .ps \\n[PS] .. .de @AI .if !'\*(.T'html' .par@reset .if !'\\n(.z'' \{\ . br . di .\} .ie !\\n[cov*n-au] .@error AI before AU .el \{\ . di cov*ai-div!\\n[cov*n-au] . nf . ft R . ps \\n[PS] .\} .. .de LP .if !'\\n[.z]'' \{\ . br . di .\} .br .cov*ab-init .cov*print \\*[\\$0]\\ .. .als IP LP .als PP LP .als XP LP .als QP LP .als RS LP .als NH LP .als SH LP .als MC LP .als RT LP .als XS LP .de cov*ab-init .als cov*ab-init @nop .als LP @LP .als IP @IP .als PP @PP .als XP @XP .als RT @RT .als XS @XS .als SH @SH .als NH @NH .als QP @QP .als RS @RS .als RE @RE .als QS @QS .als QE @QE .als MC @MC .als EQ @EQ .als EN @EN .als TS @TS .als AB cov*err-not-after-ab .als AU par@AU .als AI par@AI .als TL par@TL .. .de @AB .if !'\\n(.z'' \{\ . br . di .\} .cov*ab-init .if !'\*(.T'html' .di cov*ab-div .par@ab-indent .par@reset .if !'\\$1'no' \{\ . ft I . ce 1 \\*[ABSTRACT] . sp . ft R .\} .ns .@PP .if '\*(.T'html' \{\ . cov*tl-au-print . als cov*tl-au-print @nop . par@reset-env . par@reset . cov*print .\} .. .de AE .ie '\*(.T'html' \{\ . als AE cov*err-not-again .\} .el \{\ . ie '\\n(.z'cov*ab-div' \{\ . als AE cov*err-not-again . br . di .\" nr cov*ab-height \\n[dn] . par@reset-env . par@reset . cov*print . \} . el .@error AE without AB .\} .. .de @div-end!cov*ab-div .AE .. .de cov*print .als cov*print @nop .ie d cov*tl-div \{\ . ie \\n[cov*rp-format] .cov*rp-print . el .cov*draft-print .\} .el \{\ . if \\n[cov*rp-format] \{\ . @warning RP format but no TL . bp 1 . als FS @FS . als FE @FE . CHECK-FOOTER-AND-KEEP . \} . br .\} .. .de cov*rp-print .nr cov*page-length \\n[.p] .pl 1000i .cov*tl-au-print .sp 3 .if d cov*ab-div \{\ . if !'\*(.T'html' . nf . cov*ab-div .\} .sp 3 .par@reset \\*[DY] .br .if \\n[cov*fn-height] \{\ . sp |(u;\\n[cov*page-length]-\\n[FM]\ -\\n[cov*fn-height]-\\n[fn@sep-dist]>?\\n[nl]) . fn@print-sep . ev nf . cov*fn-div . ev . ie \\n[cov*rp-no] .rm cov*fn-div . el \{\ . rn cov*fn-div fn@overflow-div . nr fn@have-overflow 1 . \} .\} .als FS @FS .als FE @FE .CHECK-FOOTER-AND-KEEP .\" If anything was printed below where the footer line is normally printed, .\" then that's an overflow. .if -\\n[FM]/2+1v+\\n[cov*page-length]<\\n[nl] .@error cover sheet overflow .pl \\n[cov*page-length]u .bp 1 .if !\\n[cov*rp-no] .cov*tl-au-print .rs .sp 1 .. .de cov*draft-print .cov*tl-au-print .if d cov*ab-div \{\ . nf . sp 2 . cov*ab-div .\} .sp 1 .. .de cov*tl-au-print .par@reset .nf .rs .sp 3 .ce 9999 .if d cov*tl-div .cov*tl-div .nr cov*i 1 .nr cov*sp 1v .while \\n[cov*i]<=\\n[cov*n-au] \{\ . sp \\n[cov*sp]u . cov*au-div!\\n[cov*i] . ie d cov*ai-div!\\n[cov*i] \{\ . sp .5v . cov*ai-div!\\n[cov*i] . nr cov*sp 1v . \} . el .nr cov*sp .5v . nr cov*i +1 .\} .ce 0 .. .nr cov*fn-height 0 .nr cov*in-fn 0 .\" start of footnote on cover .de cov*FS .if \\n[cov*in-fn] \{\ . @error nested FS . FE .\} .nr cov*in-fn 1 .ev fn .par@reset-env .da cov*fn-div .if !\\n[cov*fn-height] .ns .ie \\n[.$] .FP "\\$1" no .el .@LP .. .de @div-end!cov*fn-div .cov*FE .. .\" end of footnote on cover .de cov*FE .ie '\\n(.z'cov*fn-div' \{\ . br . ev . di . nr cov*in-fn 0 . nr cov*fn-height +\\n[dn] .\} .el .@error FE without matching FS .. .\" *************************** .\" ******** module pg ******** .\" *************************** .\" Page-level formatting. .\" > 0 if we have a footnote on the current page .nr pg@fn-flag 0 .nr pg@colw 0 .nr pg@fn-colw 0 .nr HM 1i .nr FM 1i .ds LF .ds CF .ds RF .ds LH .ds CH -\\n[PN]- .ds RH .ds pg*OH '\\*[LH]'\\*[CH]'\\*[RH]' .ds pg*EH '\\*[LH]'\\*[CH]'\\*[RH]' .ds pg*OF '\\*[LF]'\\*[CF]'\\*[RF]' .ds pg*EF '\\*[LF]'\\*[CF]'\\*[RF]' .de OH .ds pg*\\$0 "\\$* .. .als EH OH .als OF OH .als EF OH .de PT .ie \\n%=1 .if \\n[pg*P1] .tl \\*[pg*OH] .el \{\ . ie o .tl \\*[pg*OH] . el .tl \\*[pg*EH] .\} .. .de BT .ie o .tl \\*[pg*OF] .el .tl \\*[pg*EF] .. .nr pg*P1 0 .de P1 .nr pg*P1 1 .. .wh -\n[FM]u pg@bottom .wh -\n[FM]u/2u pg*footer .nr MINGW 2n .nr pg@ncols 1 .de @MC .if !'\\n(.z'' .error-recover MC while diversion open .br .ie \\n[pg@ncols]>1 .pg@super-eject .el \{\ . \" flush out any floating keeps . while \\n[kp@tail]>\\n[kp@head] \{\ . rs . bp . \} .\} .ie !\\n(.$ \{\ . nr pg@colw \\n[LL]*7/15 . nr pg*gutw \\n[LL]-(2*\\n[pg@colw]) . nr pg@ncols 2 .\} .el \{\ . nr pg@colw (n;\\$1)<?\\n[LL] . ie \\n[.$]<2 .nr pg*gutw \\n[MINGW] . el .nr pg*gutw (n;\\$2) . nr pg@ncols \\n[LL]-\\n[pg@colw]/(\\n[pg@colw]+\\n[pg*gutw])+1 . ie \\n[pg@ncols]>1 \ . nr pg*gutw \\n[LL]-(\\n[pg@ncols]*\\n[pg@colw])/(\\n[pg@ncols]-1) . el .nr pg*gutw 0 .\} .HTML-TAG ".mc \\n[pg@ncols] \\n[pg@colw] \\n[pg*gutw]" .mk pg*col-top .ns .nr pg*col-num 0 .nr pg@fn-colw \\n[pg@colw]*5/6 .par@reset .. .de 2C .MC .. .de 1C .MC \\n[LL]u .. .\" top of page macro .de pg@top .ch pg*footer -\\n[FM]u/2u .nr PN \\n% .nr pg*col-num 0 .nr pg@fn-bottom-margin 0 .nr pg*saved-po \\n[PO] .po \\n[PO]u .ev h .par@reset .sp (u;\\n[HM]/2) .PT .sp |\\n[HM]u .if d HD .HD .mk pg@header-bottom .ev .mk pg*col-top .pg*start-col .. .de pg*start-col .\" Handle footnote overflow before floating keeps, because the keep .\" might contain an embedded footnote. .fn@top-hook .kp@top-hook .tbl@top-hook .ns .. .de pg@cs-top .sp \\n[HM]u .\" move pg@bottom and pg*footer out of the way .ch pg@bottom \\n[.p]u*2u .ch pg*footer \\n[.p]u*2u .ns .. .de pg@bottom .tbl@bottom-hook .if \\n[pg@fn-flag] .fn@bottom-hook .nr pg*col-num +1 .ie \\n[pg*col-num]<\\n[pg@ncols] .pg*end-col .el .pg*end-page .. .de pg*end-col 'sp |\\n[pg*col-top]u .po (u;\\n[pg*saved-po]+(\\n[pg@colw]+\\n[pg*gutw]*\\n[pg*col-num])) .\"po +(u;\\n[pg@colw]+\\n[pg*gutw]) .pg*start-col .. .de pg*end-page .po \\n[pg*saved-po]u .\" Make sure we don't exit if there are still floats or footnotes left-over. .ie \\n[kp@head]<\\n[kp@tail]:\\n[fn@have-overflow] \{\ . \" Switching environments ensures that we don't get an unnecessary . \" blank line at the top of the page. . ev ne ' bp . ev .\} .el \{\ . \" If the text has ended and there are no more footnotes or keeps, exit. . if \\n[pg@text-ended] .ex . if r pg*next-number \{\ . pn \\n[pg*next-number] . rr pg*next-number . if d pg*next-format \{\ . af PN \\*[pg*next-format] . rm pg*next-format . \} . \} ' bp .\} .. .\" pg@begin number format .de pg@begin .ie \\n[.$]>0 \{\ . nr pg*next-number (;\\$1) . ie \\n[.$]>1 .ds pg*next-format \\$2 . el .rm pg*next-format .\} .el .rr pg*next-number .pg@super-eject .. .\" print the footer line .de pg*footer .ev h .par@reset .BT .ev .. .\" flush out any keeps or footnotes .de pg@super-eject .br .if !'\\n(.z'' .@error-recover diversion open while ejecting page .\" Make sure we stay in the end macro while there is still footnote overflow .\" left, or floating keeps. .while \\n[kp@tail]>\\n[kp@head]:\\n[pg@fn-flag] \{\ . rs . bp .\} .bp .. .nr pg@text-ended 0 .de pg@end-text .br .nr pg@text-ended 1 .pg@super-eject .. .em pg@end-text .\" *************************** .\" ******** module fn ******** .\" *************************** .\" Footnotes. .nr fn@sep-dist 8p .ev fn .\" Round it vertically .vs \n[fn@sep-dist]u .nr fn@sep-dist \n[.v] .ev .nr fn*text-num 0 1 .nr fn*note-num 0 1 .ds * \\*[par@sup-start]\En+[fn*text-num]\\*[par@sup-end] .nr fn*open 0 .\" normal FS .de @FS .ie \\n[.$] .fn*do-FS "\\$1" no .el \{\ . ie \\n[fn*text-num]>\\n[fn*note-num] .fn*do-FS \\n+[fn*note-num] . el .fn*do-FS .\} .. .\" Second argument of `no' means don't embellish the first argument. .de fn*do-FS .if \\n[fn*open] .@error-recover nested FS .nr fn*open 1 .if \\n[.u] \{\ . \" Ensure that the first line of the footnote is on the same page . \" as the reference. I think this is minimal. . ev fn . nr fn*need 1v . ev . ie \\n[pg@fn-flag] .nr fn*need +\\n[fn:PD] . el .nr fn*need +\\n[fn@sep-dist] . ne \\n[fn*need]u+\\n[.V]u>?0 .\} .ev fn .par@reset-env .fn*start-div .par@reset .ie \\n[.$] .FP \\$@ .el .@LP .. .de @FE .ie !\\n[fn*open] .@error FE without FS .el \{\ . nr fn*open 0 . br . ev . fn*end-div .\} .. .nr fn@have-overflow 0 .\" called at the top of each column .de fn@top-hook .nr fn*max-width 0 .nr fn*page-bottom-pos 0-\\n[FM]-\\n[pg@fn-bottom-margin] .ch pg@bottom \\n[fn*page-bottom-pos]u .if \\n[fn@have-overflow] \{\ . nr fn@have-overflow 0 . fn*start-div . ev nf . fn@overflow-div . ev . fn*end-div .\} .. .\" This is called at the bottom of the column if pg@fn-flag is set. .de fn@bottom-hook .nr pg@fn-flag 0 .nr fn@have-overflow 0 .nr fn@bottom-pos \\n[.p]-\\n[FM]-\\n[pg@fn-bottom-margin]+\\n[.v] .ev fn .nr fn@bottom-pos -\\n[.v] .ev .ie \\n[nl]+\\n[fn@sep-dist]+\n[.V]>\\n[fn@bottom-pos] \{\ . rn fn@div fn@overflow-div . nr fn@have-overflow 1 .\} .el \{\ . if \\n[pg@ncols]>1 \ . if \\n[fn*max-width]>\\n[pg@fn-colw] \ . nr pg@fn-bottom-margin \\n[.p]-\\n[FM]-\\n[nl]+1v . wh \\n[fn@bottom-pos]u fn*catch-overflow . fn@print-sep . ev nf . fn@div . rm fn@div . ev . if '\\n(.z'fn@overflow-div' \{\ . di . nr fn@have-overflow \\n[dn]>0 . \} . ch fn*catch-overflow .\} .. .de fn*catch-overflow .di fn@overflow-div .. .nr fn*embed-count 0 .de @div-end!fn@div .br .if '\\n[.ev]'fn' .ev .fn*end-div .nr fn*open 0 .. .als @div-end!fn*embed-div @div-end!fn@div .de fn*start-div .ie '\\n(.z'' \{\ . da fn@div . if !\\n[pg@fn-flag] .ns .\} .el .di fn*embed-div .. .de fn*end-div .ie '\\n(.z'fn@div' \{\ . di . nr fn*page-bottom-pos -\\n[dn] . nr fn*max-width \\n[fn*max-width]>?\\n[dl] . if !\\n[pg@fn-flag] .nr fn*page-bottom-pos -\\n[fn@sep-dist] . nr pg@fn-flag 1 . nr fn*page-bottom-pos \\n[nl]-\\n[.p]+\n[.V]>?\\n[fn*page-bottom-pos] . ch pg@bottom \\n[fn*page-bottom-pos]u .\} .el \{\ . ie '\\n(.z'fn*embed-div' \{\ . di . rn fn*embed-div fn*embed-div!\\n[fn*embed-count] \!. fn*embed-start \\n[fn*embed-count] . rs ' sp (u;\\n[dn]+\\n[fn@sep-dist]+\\n[.V]) \!. fn*embed-end . nr fn*embed-count +1 . \} . el \{\ . ev fn . @error-recover unclosed diversion within footnote . \} .\} .. .de fn*embed-start .ie '\\n(.z'' \{\ . fn*start-div . ev nf . fn*embed-div!\\$1 . rm fn*embed-div!\\$1 . ev . fn*end-div . di fn*null .\} .el \{\ \!. fn*embed-start \\$1 . rs .\} .. .de fn*embed-end .ie '\\n(.z'fn*null' \{\ . di . rm fn*null .\} .el \!.fn*embed-end .. .\" It's important that fn@print-sep use up exactly fn@sep-dist vertical space. .de fn@print-sep .ev fn .in 0 .vs \\n[fn@sep-dist]u \D'l 1i 0' .br .ev .. .\" *************************** .\" ******** module kp ******** .\" *************************** .\" Keeps. .de KS .br .di kp*div .. .de KF .if !'\\n(.z'' .@error-recover KF while open diversion .di kp*fdiv .ev k .par@reset-env .par@reset .. .de KE .ie '\\n(.z'kp*div' .kp*end .el \{\ . ie '\\n(.z'kp*fdiv' .kp*fend . el .@error KE without KS or KF .\} .. .de @div-end!kp*div .kp*end .. .de @div-end!kp*fdiv .kp*fend .. .de kp*need .ie '\\n(.z'' .ds@need \\$1 .el \!.kp*need \\$1 .. .\" end non-floating keep .de kp*end .br .di .kp*need \\n[dn] .ev nf .kp*div .ev .rm kp*div .. .\" Floating keeps. .nr kp@head 0 .nr kp@tail 0 .\" end floating keep .de kp*fend .br .ev .di .ie \\n[.t]-(\\n[.k]>0*1v)>\\n[dn] \{\ . br . ev nf . kp*fdiv . rm kp*fdiv . ev .\} .el \{\ . rn kp*fdiv kp*div!\\n[kp@tail] . nr kp*ht!\\n[kp@tail] 0\\n[dn] . nr kp@tail +1 .\} .. .\" top of page processing for KF .nr kp*doing-top 0 .de kp@top-hook .if !\\n[kp*doing-top] \{\ . nr kp*doing-top 1 . kp*do-top . nr kp*doing-top 0 .\} .. .de kp*do-top .\" If the first keep won't fit, only force it out if we haven't had a footnote .\" and we're at the top of the page. .nr kp*force \\n[pg@fn-flag]=0&(\\n[nl]<=\\n[pg@header-bottom]) .nr kp*fits 1 .while \\n[kp@tail]>\\n[kp@head]&\\n[kp*fits] \{\ . ie \\n[.t]>\\n[kp*ht!\\n[kp@head]]:\\n[kp*force] \{\ . nr kp*force 0 . \" It's important to advance kp@head before bringing . \" back the keep, so that if the last line of the . \" last keep springs the bottom of page trap, a new . \" page will not be started unnecessarily. . rn kp*div!\\n[kp@head] kp*temp . nr kp@head +1 . ev nf . kp*temp . ev . rm kp*temp . \} . el .nr kp*fits 0 .\} .. .\" *************************** .\" ******** module ds ******** .\" *************************** .\" Displays and non-floating keeps. .de DE .ds*end!\\n[\\n[.ev]:ds-type] .nr \\n[.ev]:ds-type 0 .. .de ds@auto-end .if \\n[\\n[.ev]:ds-type] \{\ . @error automatically terminating display . DE .\} .. .de @div-end!ds*div .ie \\n[\\n[.ev]:ds-type] .DE .el .ds*end!2 .. .de ds*end!0 .@error DE without DS, ID, CD, LD or BD .. .de LD .br .nr \\n[.ev]:ds-type 1 .par@reset .nf .sp \\n[DD]u .. .de ID .LD .ie \\n[.$] .in +(n;\\$1) .el .in +\\n[DI]u .. .de CD .LD .ce 9999 .. .de RD .LD .rj 9999 .. .de ds*common-end .par@reset .sp \\n[DD]u .. .als ds*end!1 ds*common-end .de BD .LD .nr \\n[.ev]:ds-type 2 .di ds*div .. .de ds*end!2 .br .ie '\\n(.z'ds*div' \{\ . di . nf . in (u;\\n[.l]-\\n[dl]/2>?0) . ds*div . rm ds*div . ds*common-end .\} .el .@error-recover mismatched DE .. .de DS .br .di ds*div .ie '\\$1'B' \{\ . LD . nr \\n[.ev]:ds-type 4 .\} .el \{\ . ie '\\$1'L' .LD . el \{\ . ie '\\$1'C' .CD . el \{\ . ie '\\$1'R' .RD . el \{\ . ie '\\$1'I' .ID \\$2 . el .ID \\$1 . \} . \} . \} . nr \\n[.ev]:ds-type 3 .\} .. .de ds@need .if '\\n(.z'' \{\ . while \\n[.t]<=(\\$1)&(\\n[nl]>\\n[pg@header-bottom]) \{\ . rs ' sp \\n[.t]u . \} .\} .. .de ds*end!3 .br .ie '\\n(.z'ds*div' \{\ . di . ds@need \\n[dn] . ev nf . ds*div . ev . rm ds*div . ds*common-end .\} .el .@error-recover mismatched DE .. .de ds*end!4 .ie '\\n(.z'ds*div' \{\ . br . di . nf . in (u;\\n[.l]-\\n[dl]/2>?0) . ds@need \\n[dn] . ds*div . rm ds*div . ds*common-end .\} .el .@error-recover mismatched DE .. .\" **************************** .\" ******** module par ******** .\" **************************** .\" Paragraph-level formatting. .\" Load time initialization. .de par@load-init .\" PS and VS might have been set on the command-line .if !rPS .nr PS 10 .if !rLL .nr LL 6i .ll \\n[LL]u .\" don't set LT so that it can be defaulted from LL .ie rLT .lt \\n[LT]u .el .lt \\n[LL]u .ps \\n[PS] .\" don't set VS so that it can be defaulted from PS .ie rVS .par*vs \\n[VS] .el .par*vs \\n[PS]+2 .if dFAM .fam \\*[FAM] .if !rHY .nr HY 14 .hy \\n[HY] .TA .CHECK-FOOTER-AND-KEEP .. .de par*vs .\" If it's too big to be in points, treat it as units. .ie (p;\\$1)>=40p .vs (u;\\$1) .el .vs (p;\\$1) .. .de par@ab-indent .nr 0:li (u;\\n[LL]/12) .nr 0:ri \\n[0:li] .. .de par*env-init .aln \\n[.ev]:PS PS .aln \\n[.ev]:VS VS .aln \\n[.ev]:LL LL .aln \\n[.ev]:MCLL LL .aln \\n[.ev]:LT LT .aln \\n[.ev]:MCLT LT .aln \\n[.ev]:PI PI .aln \\n[.ev]:PD PD .ad \\n[par*adj] .par@reset-env .. .\" happens when the first page begins .de par@init .if !rLT .nr LT \\n[LL] .if !rFL .nr FL \\n[LL]*5/6 .if !rVS .nr VS \\n[PS]+2 .if !rDI .nr DI .5i .if !rFPS .nr FPS \\n[PS]-2 .if !rFVS .nr FVS \\n[FPS]+2 .\" don't change environment 0 .ev h .ps \\n[PS] .if !rQI .nr QI 5n .if !rPI .nr PI 5n .par*vs \\n[VS] .if !rPD .nr PD .3v>?\n(.V .if !rDD .nr DD .5v>?\n(.V .if !rFI .nr FI 2n .if !rFPD .nr FPD \\n[PD]/2 .ev .if !dFAM .ds FAM \\n[.fam] .nr par*adj \\n[.j] .par*env-init .ev h .par*env-init .ev .ev fn .par*env-init .ev .ev k .par*env-init .ev .aln 0:MCLL pg@colw .aln 0:MCLT pg@colw .aln k:MCLL pg@colw .aln k:MCLT pg@colw .aln fn:PS FPS .aln fn:VS FVS .aln fn:LL FL .aln fn:LT FL .aln fn:PI FI .aln fn:PD FPD .aln fn:MCLL pg@fn-colw .aln fn:MCLT pg@fn-colw .. .de par@reset-env .nr \\n[.ev]:il 0 .nr \\n[.ev]:li 0 .nr \\n[.ev]:ri 0 .nr \\n[.ev]:ai \\n[\\n[.ev]:PI] .nr \\n[.ev]:pli 0 .nr \\n[.ev]:pri 0 .nr \\n[.ev]:ds-type 0 .. .\" par@reset .de par@reset .br .ce 0 .rj 0 .ul 0 .fi .ie \\n[pg@ncols]>1 \{\ . ll (u;\\n[\\n[.ev]:MCLL]-\\n[\\n[.ev]:ri]-\\n[\\n[.ev]:pri]) . lt \\n[\\n[.ev]:MCLT]u .\} .el \{\ . ll (u;\\n[\\n[.ev]:LL]-\\n[\\n[.ev]:ri]-\\n[\\n[.ev]:pri]) . lt \\n[\\n[.ev]:LT]u .\} .in (u;\\n[\\n[.ev]:li]+\\n[\\n[.ev]:pli]) .ft 1 .fam \\*[FAM] .ps \\n[\\n[.ev]:PS] .par*vs \\n[\\n[.ev]:VS] .ls 1 .TA .hy \\n[HY] .. .de @RT .nr \\n[.ev]:pli 0 .nr \\n[.ev]:pri 0 .par@reset .. .\" This can be redefined by the user. .de TA .ta T 5n .. .de par*start .ds@auto-end .nr \\n[.ev]:pli \\$1 .nr \\n[.ev]:pri \\$2 .par@reset .sp \\n[\\n[.ev]:PD]u .ne 1v+\\n(.Vu .. .de par@finish .nr \\n[.ev]:pli 0 .nr \\n[.ev]:pri 0 .par@reset .. .\" normal LP .de @LP .par*start 0 0 .nr \\n[.ev]:ai \\n[\\n[.ev]:PI] .. .de @PP .par*start 0 0 .nr \\n[.ev]:ai \\n[\\n[.ev]:PI] .if !'\*(.T'html' .ti +\\n[\\n[.ev]:ai]u .. .de @QP .nr \\n[.ev]:ai \\n[\\n[.ev]:PI] .par*start \\n[QI] \\n[QI] .. .de @XP .par*start \\n[\\n[.ev]:PI] 0 .ti -\\n[\\n[.ev]:PI]u .. .de @IP .if \\n[.$]>1 .nr \\n[.ev]:ai (n;\\$2) .par*start \\n[\\n[.ev]:ai] 0 .if !'\\$1'' \{\ . \" Divert the label so as to freeze any spaces. . di par*label . par*push-tag-env \&\\$1 . par*pop-tag-env . di . chop par*label . ti -\\n[\\n[.ev]:ai]u . ie \\n[dl]+1n<=\\n[\\n[.ev]:ai] \\*[par*label]\h'|\\n[\\n[.ev]:ai]u'\c . el \{\ \\*[par*label] . br . \} . rm par*label .\} .. .de @IP-html .if \\n[.$]>1 .nr \\n[.ev]:ai (n;\\$2) .par*start \\n[\\n[.ev]:ai] 0 .if !'\\$1'' \{\ . \" Divert the label so as to freeze any spaces. . di par*label . par*push-tag-env \&\\$1 . par*pop-tag-env . di . chop par*label . ti -\\n[\\n[.ev]:ai]u . ie \\n[dl]+1n<=\\n[\\n[.ev]:ai] \{\ . HTML-TAG-NS ".col 1" \\$1\h'|\\n[\\n[.ev]:ai]u'\c . HTML-TAG-NS ".col 2" . \} . el \{\ \\$1 . br . \} . rm par*label .\} .. .\" We don't want margin characters to be attached when we divert .\" the tag. Since there's no way to save and restore the current .\" margin character, we have to switch to a new environment, taking .\" what we need of the old environment with us. .de par*push-tag-env .nr par*saved-font \\n[.f] .nr par*saved-size \\n[.s]z .nr par*saved-ss \\n[.ss] .ds par*saved-fam \\n[.fam] .ev par .nf .TA .ft \\n[par*saved-font] .ps \\n[par*saved-size]u .ss \\n[par*saved-ss] .fam \\*[par*saved-fam] .. .de par*pop-tag-env .ev .. .de @RS .br .nr \\n[.ev]:li!\\n[\\n[.ev]:il] \\n[\\n[.ev]:li] .nr \\n[.ev]:ri!\\n[\\n[.ev]:il] \\n[\\n[.ev]:ri] .nr \\n[.ev]:ai!\\n[\\n[.ev]:il] \\n[\\n[.ev]:ai] .nr \\n[.ev]:pli!\\n[\\n[.ev]:il] \\n[\\n[.ev]:pli] .nr \\n[.ev]:pri!\\n[\\n[.ev]:il] \\n[\\n[.ev]:pri] .nr \\n[.ev]:il +1 .nr \\n[.ev]:li +\\n[\\n[.ev]:ai] .nr \\n[.ev]:ai \\n[\\n[.ev]:PI] .par@reset .. .de @RE .br .ie \\n[\\n[.ev]:il] \{\ . nr \\n[.ev]:il -1 . nr \\n[.ev]:ai \\n[\\n[.ev]:ai!\\n[\\n[.ev]:il]] . nr \\n[.ev]:li \\n[\\n[.ev]:li!\\n[\\n[.ev]:il]] . nr \\n[.ev]:ri \\n[\\n[.ev]:ri!\\n[\\n[.ev]:il]] . nr \\n[.ev]:pli \\n[\\n[.ev]:pli!\\n[\\n[.ev]:il]] . nr \\n[.ev]:pri \\n[\\n[.ev]:pri!\\n[\\n[.ev]:il]] .\} .el .@error unbalanced \\$0 .par@reset .. .de @QS .br .nr \\n[.ev]:li!\\n[\\n[.ev]:il] \\n[\\n[.ev]:li] .nr \\n[.ev]:ri!\\n[\\n[.ev]:il] \\n[\\n[.ev]:ri] .nr \\n[.ev]:ai!\\n[\\n[.ev]:il] \\n[\\n[.ev]:ai] .nr \\n[.ev]:pli!\\n[\\n[.ev]:il] \\n[\\n[.ev]:pli] .nr \\n[.ev]:pri!\\n[\\n[.ev]:il] \\n[\\n[.ev]:pri] .nr \\n[.ev]:il +1 .nr \\n[.ev]:li +\\n[QI] .nr \\n[.ev]:ri +\\n[QI] .nr \\n[.ev]:ai \\n[\\n[.ev]:PI] .par@reset .. .als @QE @RE .\" start boxed text .de B1 .br .HTML-IMAGE .di par*box-div .nr \\n[.ev]:li +1n .nr \\n[.ev]:ri +1n .nr par*box-in \\n[.in] .\" remember what 1n is, just in case the point size changes .nr par*box-n 1n .in +1n .ll -1n .lt -1n .ti \\n[par*box-in]u+1n .. .de @div-end!par*box-div .B2 .. .\" end boxed text .\" Postpone the drawing of the box until we're in the top-level diversion, .\" in case there's a footnote inside the box. .de B2 .ie '\\n(.z'par*box-div' \{\ . br . if \n[.V]>.25m .sp . di . if \n[.V]>.25m .sp . ds@need \\n[dn] . par*box-mark-top . ev nf . par*box-div . ev . nr \\n[.ev]:ri -\\n[par*box-n] . nr \\n[.ev]:li -\\n[par*box-n] . in -\\n[par*box-n]u . ll +\\n[par*box-n]u . lt +\\n[par*box-n]u . par*box-draw \\n[.i]u \\n[.l]u-(\\n[.H]u==1n*1n) .\} .el .@error B2 without B1 .HTML-IMAGE-END .. .de par*box-mark-top .ie '\\n[.z]'' \{\ . rs . mk par*box-top .\} .el \!.par*box-mark-top .. .de par*box-draw .ie '\\n[.z]'' \{\ . nr par*box-in \\n[.i] . nr par*box-ll \\n[.l] . nr par*box-vpt \\n[.vpt] . nr par*box-ad \\n[.j] . ad l . vpt 0 . in \\$1 . ll \\$2 \v'-1v+.25m'\ \D'l (u;\\n[.l]-\\n[.i]) 0'\ \D'l 0 |\\n[par*box-top]u'\ \D'l -(u;\\n[.l]-\\n[.i]) 0'\ \D'l 0 -|\\n[par*box-top]u' . br . sp -1 . in \\n[par*box-in]u . ll \\n[par*box-ll]u . vpt \\n[par*box-vpt] . ad \\n[par*box-ad] .\} .el \!.par*box-draw \\$1 \\$2 .. .de @SH .par@finish .\" Keep together the heading and the first two lines of the next paragraph. .ne 3v+\\n[\\n[.ev]:PD]u+\\n(.Vu .sp 1 .ft B .HTML-TAG ".SH 1" .. .\" TL, AU, and AI are aliased to these in cov*ab-init. .de par@TL .par@finish .sp 1 .ft B .ps +2 .vs +3p .ce 9999 .HTML-TAG ".tl" .. .de par@AU .par@finish .sp 1 .ft I .ce 9999 .. .de par@AI .par@finish .sp .5 .ce 9999 .. .\" In paragraph macros. .de NL .ps \\n[\\n[.ev]:PS] .. .de SM .ps -2 .. .de LG .ps +2 .. .de R .ft R .. .\" par*define-font-macro macro font .de par*define-font-macro .de \\$1 .ie \\\\n[.$] \{\ . nr par*prev-font \\\\n[.f] \&\\\\$3\f[\\$2]\\\\$1\f[\\\\n[par*prev-font]]\\\\$2 .\} .el .ft \\$2 \\.. .. .par*define-font-macro B B .par*define-font-macro I I .par*define-font-macro BI BI .par*define-font-macro CW CR .\" underline a word .de UL \Z'\\$1'\v'.25m'\D'l \w'\\$1'u 0'\v'-.25m'\\$2 .. .\" box a word .de BX .nr par*bxw \w'\\$1'+.4m \Z'\v'.25m'\D'l 0 -1m'\D'l \\n[par*bxw]u 0'\D'l 0 1m'\D'l -\\n[par*bxw]u 0''\ \Z'\h'.2m'\\$1'\ \h'\\n[par*bxw]u' .. .\" The first time UX is used, put a registered mark after it. .ds par*ux-rg \(rg .de UX \s[\\n[.s]*8u/10u]UNIX\s0\\$1\\*[par*ux-rg] .ds par*ux-rg .. .ds par@sup-start \v'-.9m\s'\En[.s]*7u/10u'+.7m' .als { par@sup-start .ds par@sup-end \v'-.7m\s0+.9m' .als } par@sup-end .\" footnote paragraphs .\" FF is the footnote format .nr FF 0 .\" This can be redefined. It gets a second argument of `no' if the first .\" argument was supplied by the user, rather than automatically. .de FP .br .if !d par*fp!\\n[FF] \{\ . @error unknown footnote format `\\n[FF]' . nr FF 0 .\} .ie '\\$2'no' .par*fp!\\n[FF]-no "\\$1" .el .par*fp!\\n[FF] "\\$1" .. .de par*fp!0 .@PP \&\\*[par@sup-start]\\$1\\*[par@sup-end]\ \c .. .de par*fp!0-no .@PP \&\\$1\ \c .. .de par*fp!1 .@PP \&\\$1.\ \c .. .de par*fp!1-no .@PP \&\\$1\ \c .. .de par*fp!2 .@LP \&\\$1.\ \c .. .de par*fp!2-no .@LP \&\\$1\ \c .. .de par*fp!3 .@IP "\\$1." (u;\\n[\\n[.ev]:PI]*2) .. .de par*fp!3-no .@IP "\\$1" (u;\\n[\\n[.ev]:PI]*2) .. .\" *************************** .\" ******** module nh ******** .\" *************************** .\" Numbered headings. .\" nh*hl is the level of the last heading .nr nh*hl 0 .\" numbered heading .de @NH .HTML-TAG ".NH \\$1" .ie '\\$1'S' \{\ . shift . nr nh*hl 0 . while \\n[.$] \{\ . nr nh*hl +1 . nr H\\n[nh*hl] 0\\$1 . shift . \} . if !\\n[nh*hl] \{\ . nr H1 1 . nr nh*hl 1 . @error missing arguments to .NH S . \} .\} .el \{\ . nr nh*ohl \\n[nh*hl] . ie \\n[.$] \{\ . nr nh*hl 0\\$1 . ie \\n[nh*hl]<=0 \{\ . nr nh*ohl 0 . nr nh*hl 1 . \} . el \{\ . if \\n[nh*hl]-\\n[nh*ohl]>1 \ . @warning .NH \\n[nh*ohl] followed by .NH \\n[nh*hl] . \} . \} . el .nr nh*hl 1 . while \\n[nh*hl]>\\n[nh*ohl] \{\ . nr nh*ohl +1 . nr H\\n[nh*ohl] 0 . \} . nr H\\n[nh*hl] +1 .\} .ds SN .nr nh*i 0 .while \\n[nh*i]<\\n[nh*hl] \{\ . nr nh*i +1 . as SN \\n[H\\n[nh*i]]. .\} .SH \\*[SN] .. .\" **************************** .\" ******** module toc ******** .\" **************************** .\" Table of contents generation. .de @XS .da toc*div .ev h .ie \\n[.$] .XA "\\$1" .el .XA .. .de @div-end!toc*div .XE .. .de XA .ie '\\n(.z'toc*div' \{\ . if d toc*num .toc*end-entry . ie \\n[.$] \{\ . ie '\\$1'no' .ds toc*num . el .ds toc*num "\\$1 . \} . el .ds toc*num \\n[PN] . br . par@reset . na . ll -8n . in (n;0\\$2) .\} .el .@error XA without XS .. .de XE .ie '\\n(.z'toc*div' \{\ . if d toc*num .toc*end-entry . ev . di .\} .el .@error XS without XE .. .de toc*end-entry \\a\\t\\*[toc*num] .br .rm toc*num .. .de PX .1C .if !'\\$1'no' \{\ . ce 1 . ps \\n[PS]+2 . ft B \\*[TOC] . ft . ps .\} .nf .char \[toc*leader-char] .\h'1m' .lc \[toc*leader-char] .ta (u;\\n[.l]-\\n[.i]-\w'000') (u;\\n[.l]-\\n[.i])R .sp 2 .toc*div .par@reset .. .\" print the table of contents on page i .de TC .P1 .pg@begin 1 i .PX \\$1 .. .\" **************************** .\" ******** module eqn ******** .\" **************************** .\" Eqn support. .de EQ .. .de EN .. .de @EQ .br .ds eqn*num "\\$2 .ie '\\$1'L' .nr eqn*type 0 .el \{\ . ie '\\$1'I' .nr eqn*type 1 . el \{\ . nr eqn*type 2 . if !'\\$1'C' .ds eqn*num "\\$1 . \} .\} .di eqn*div .in 0 .if \\n[eqn*type]=0 .HTML-IMAGE-LEFT .if \\n[eqn*type]=1 \{\ . if '\*(.T'html' .RS . HTML-IMAGE-INLINE .\} .if \\n[eqn*type]=2 .HTML-IMAGE .if !'\*(.T'html' .nf .. .de @div-end!eqn*div .@EN .. .\" Note that geqn mark and lineup work correctly in centered equations. .de @EN .ie !'\\n(.z'eqn*div' .@error-recover mismatched EN .el \{\ . br . di . nr eqn*have-num 0 . if !'\\*[eqn*num]'' .nr eqn*have-num 1 . ie \\n[dl]:\\n[eqn*have-num] \{\ . if !'\*(.T'html' .sp \\n[DD]u . par@reset . ds eqn*tabs \\n[.tabs] . nf . ie \\n[dl] \{\ .\" --fixme-- this really should not be necessary .\" and indicates that there is extra space creeping into .\" an equation when ps4html is enabled.. . ie r ps4html .ds@need \\n[dn]u-1v+\n[.V]u+1i . el .ds@need \\n[dn]u-1v+\n[.V]u . chop eqn*div . ie \\n[eqn*type]=0 \{\ . ta (u;\\n[.l]-\\n[.i])R \\*[eqn*div]\t\\*[eqn*num] . \} . el \{\ . ie \\n[eqn*type]=1 .ta \\n[DI]u \ (u;\\n[.l]-\\n[.i])R . el .ta (u;\\n[.l]-\\n[.i]/2)C \ (u;\\n[.l]-\\n[.i])R \t\\*[eqn*div]\t\\*[eqn*num] . \} . \} . el \{\ . ta (u;\\n[.l]-\\n[.i])R \t\\*[eqn*num] . \} . if !'\*(.T'html' .sp \\n[DD]u . ta \\*[eqn*tabs] . \} . el \{ .\" must terminate empty equations in html and ps4html as they contain .\" the HTML-IMAGE-END suppression nodes . if \\n[dl] .chop eqn*div . if '\*(.T'html' \\*[eqn*div] . if r ps4html \\*[eqn*div] . \} . if !'\*(.T'html' .fi . if \\n[eqn*type]=0 .HTML-IMAGE-END . if \\n[eqn*type]=1 \{\ . HTML-IMAGE-END . if '\*(.T'html' .RE . \} . if \\n[eqn*type]=2 .HTML-IMAGE-END .\} .. .\" **************************** .\" ******** module tbl ******** .\" **************************** .\" Tbl support. .nr tbl*have-header 0 .\" This gets called if TS occurs before the first paragraph. .de TS .LP .\" cov*ab-init aliases TS to @TS \\*[TS]\\ .. .de @TS .sp \\n[DD]u .\" .if !'\*(.T'html' .sp \\n[DD]u .if '\\$1'H' .di tbl*header-div .HTML-IMAGE .. .de tbl@top-hook .if \\n[tbl*have-header] \{\ . ie \\n[.t]-\\n[tbl*header-ht]-1v .tbl*print-header . el .sp \\n[.t]u .\} .. .de tbl*print-header .ev nf .tbl*header-div .ev .mk #T .. .de TH .ie '\\n[.z]'tbl*header-div' \{\ . nr T. 0 . T# . br . di . ie \\n[dn]+\\n[FM]+\\n[HM]+2v>=\\n[.p] \{\ . @error ridiculously long table header . ds@need \\n[dn] . tbl*print-header . \} . el \{\ . nr tbl*header-ht \\n[dn] . ds@need \\n[dn]u+1v . tbl*print-header . nr tbl*have-header 1 . \} .\} .el .@error-recover .TH without .TS H .. .de @div-end!tbl*header-div .TH .TE .. .de TE .ie '\\n(.z'tbl*header-div' .@error-recover .TS H but no .TH before .TE .el \{\ . nr tbl*have-header 0 . if !'\*(.T'html' .sp \\n[DD]u .\} . HTML-IMAGE-END .\" reset tabs .TA .. .de tbl@bottom-hook .if \\n[tbl*have-header] \{\ . nr T. 1 . T# .\} .. .de T& .. .\" **************************** .\" ******** module pic ******** .\" **************************** .\" Pic support. .\" PS height width .de PS .br .sp \\n[DD]u .ie \\n[.$]<2 .@error bad arguments to PS (not preprocessed with pic?) .el \{\ . ds@need (u;\\$1)+1v . in +(u;\\n[.l]-\\n[.i]-\\$2/2>?0) .\} .HTML-IMAGE .. .de PE .HTML-IMAGE-END .par@reset .sp \\n[DD]u+.5m .. .\" **************************** .\" ******** module ref ******** .\" **************************** .\" Refer support. .de ]- .rm [A [B [C [D [E [G [I [J [N [O [P [Q [R [S [T [V .rm ref*string .. .\" Other .ds ref*spec!0 Q A T1 S V N P I C D O .\" Journal article .ds ref*spec!1 Q A T2 J S V N P I C D O .\" Book .ds ref*spec!2 Q A T1 S V P I C D O .\" Article within book .ds ref*spec!3 Q A T2 B E S V P I C D O .\" Tech report .ds ref*spec!4 Q A T2 R G P I C D O .\" ][ type .de ][ .if r [T \{\ . als [T1 [T . als [T2 [T .\} .ie d ref*spec!\\$1 .ref*build \\*[ref*spec!\\$1] .el \{\ . @error unknown reference type `\\$1' . ref*build \\*[ref*spec!0] .\} .ref*print .rm ref*string .rm [F [T1 [T2 .. .\" start of reference number .ds [. \\*[par@sup-start] .\" end of reference number .ds .] \\*[par@sup-end] .\" period before reference .ds <. . .\" period after reference .ds >. \" empty .\" comma before reference .ds <, , .\" comma after reference .ds >, \" empty .\" start collected references .de ]< .als ref*print ref*end-print .SH \&\\*[REFERENCES] .par@reset .. .\" end collected references .de ]> .par@finish .als ref*print ref*normal-print .. .de ref*normal-print .ie d [F .FS "\\*([.\\*([F\\*(.]" .el .FS \& \\*[ref*string] .FE .. .de ref*end-print .ie d [F .IP "\\*([F." .el .XP \\*[ref*string] .. .als ref*print ref*normal-print .de ref*build .rm ref*string ref*post-punct .nr ref*suppress-period 1 .while \\n[.$] \{\ . if d [\\$1 \{\ . ie d ref*add-\\$1 .ref*add-\\$1 . el .ref*add-dflt \\$1 . \} . shift .\} .\" now add a final period .ie d ref*string \{\ . if !\\n[ref*suppress-period] .as ref*string . . if d ref*post-punct \{\ . as ref*string "\\*[ref*post-punct] . rm ref*post-punct . \} .\} .el .ds ref*string .. .de ref*add-T1 .ref*field T , "\fI" "" "\fP" .if r [T .nr ref*suppress-period \\n([T .. .de ref*add-T2 .ref*field T , "\\*Q" "" "\\*U" .if r [T .nr ref*suppress-period \\n([T .. .de ref*add-P .ie \\n([P>0 .ref*field P , "pp. " .el .ref*field P , "p. " .. .de ref*add-J .ref*field J , \fI "" \fP .. .de ref*add-D .ref*field D "" ( ) .. .de ref*add-E .ref*field E , "ed. " .. .de ref*add-G .ref*field G "" ( ) .. .de ref*add-B .ref*field B "" "in \fI" "" \fP .. .de ref*add-O .ref*field O . .ie r [O .nr ref*suppress-period \\n([O .el .nr ref*suppress-period 1 .. .de ref*add-A .ref*field A , .if r [A .nr ref*suppress-period \\n([A .. .de ref*add-dflt .ref*field \\$1 , .. .\" First argument is the field letter. .\" Second argument is the punctuation character to use to separate this field .\" from the previous field. .\" Third argument is a string with which to prefix this field. .\" Fourth argument is a string with which to postfix this field. .\" Fifth argument is a string to add after the punctuation character supplied .\" by the next field. .de ref*field .if d ref*string \{\ . ie d ref*post-punct \{\ . as ref*string "\\$2\\*[ref*post-punct] \" . rm ref*post-punct . \} . el .as ref*string "\\$2 \" .\} .as ref*string "\\$3\\*([\\$1\\$4 .if \\n[.$]>4 .ds ref*post-punct "\\$5 .nr ref*suppress-period 0 .. .\" **************************** .\" ******** module acc ******** .\" **************************** .\" Accents and special characters. .ds Q \(lq .ds U \(rq .ds - \(em .\" Characters .\" The idea of this definition is for the top of the 3 to be at the x-height. .if !c\[yogh] .char \[yogh] \Z'\v'\w'x'*0-\En[rst]u'\s[\En[.s]*8u/10u]\ \v'\w'3'*0+\En[rst]u'3\s0'\h'\w'\s[\En[.s]*8u/10u]3'u' .\" Accents .de acc*over-def .ds \\$1 \Z'\v'(u;\w'x'*0+\En[rst]-\En[.cht])'\ \h'(u;-\En[skw]+(-\En[.w]-\w'\\$2'/2)+\En[.csk])'\\$2' .. .de acc*under-def .ds \\$1 \Z'\v'\En[.cdp]u'\h'(u;-\En[.w]-\w'\\$2'/2)'\\$2' .. .de acc*slash-def .ds \\$1 \Z'\h'(u;-\En[.w]-\w'\\$2'/2)'\ \v'(u;\En[.cdp]-\En[.cht]+\En[rst]+\En[rsb]/2)'\\$2' .. .de acc*prefix-def .ds \\$1 \Z'\h'(u;\w'x'-\w'\\$2'/2)'\\$2' .. .acc*prefix-def ' \' .acc*prefix-def ` \` .acc*prefix-def ^ ^ .acc*prefix-def , \(ac .acc*prefix-def : \(ad .acc*prefix-def ~ ~ .\" improved accent marks .de AM .acc*over-def ' \' .acc*over-def ` \` .acc*over-def ^ ^ .acc*over-def ~ ~ .acc*over-def : \(ad .acc*over-def v \(ah .acc*over-def _ \(a- .acc*over-def o \(ao .acc*under-def , \(ac .acc*under-def . \s[\En[.s]*8u/10u]\v'.2m'.\v'-.2m'\s0 .acc*under-def hook \(ho .acc*slash-def / / .char \[hooko] o\\\\*[hook] .ds q \[hooko] .ds 3 \[yogh] .ds D- \(-D\" Icelandic uppercase eth .ds d- \(Sd\" Icelandic lowercase eth .ds Th \(TP\" Icelandic uppercase thorn .ds th \(Tp\" Icelandic lowercase thorn .ds 8 \(ss\" German double s .ds Ae \(AE\" AE ligature .ds ae \(ae\" ae ligature .ds Oe \(OE\" OE ligature .ds oe \(oe\" oe ligature .ds ? \(r?\" upside down ? .ds ! \(r!\" upside down ! .. .de CHECK-FOOTER-AND-KEEP .\" it might be better to als FS -> B1 and FE -> B2 .\" however this produced wierd results, so I've moved back to a more reliable .\" but less interesting solution --fixme-- . if '\*(.T'html' \{\ . rm KF . als KF KS . rm FS . de FS . br . HTML-IMAGE \\.. . rm FE . de FE . br . HTML-IMAGE-END \\.. . \} . if r ps4html \{\ . rm FS . de FS . br . HTML-IMAGE \\.. . rm FE . de FE . br . HTML-IMAGE-END \\.. . \} .. .par@load-init .if '\*(.T'html' \{\ . rm @IP . als @IP @IP-html .\} .\" Make sure that no blank lines creep in at the end of this file.
Save
cmd:
run