1 .\" @(#)e.tmac 2.31 (Berkeley) 5/21/88
2 .\" Modified by James Clark for use with groff.
4 .\" Copyright (c) 1988 Regents of the University of California.
5 .\" All rights reserved.
7 .\" Redistribution and use in source and binary forms are permitted
8 .\" provided that this notice is preserved and that due credit is given
9 .\" to the University of California at Berkeley. The name of the University
10 .\" may not be used to endorse or promote products derived from this
11 .\" software without specific prior written permission. This software
12 .\" is provided ``as is'' without express or implied warranty.
15 .\"**********************************************************************
17 .\"* ****** - M E N R O F F / T R O F F M A C R O S ****** *
19 .\"* Produced for your edification and enjoyment by: *
21 .\"* Electronics Research Laboratory *
23 .\"* current address: *
24 .\"* Britton-Lee, Inc. *
25 .\"* 1919 Addison Street Suite 105 *
26 .\"* Berkeley, California 94704 *
28 .\"* VERSION 2.31 First Release: 11 Sept 1978 *
30 .\"* Documentation is available. *
32 .\"**********************************************************************
34 .\" Code on .de commands:
35 .\" *** a user interface macro.
36 .\" &&& a user interface macro which is redefined
37 .\" when used to be the real thing.
38 .\" $$$ a macro which may be redefined by the user
39 .\" to provide variant functions.
40 .\" --- an internal macro.
50 .de @R \" --- initialize number register to 0, if undefined
54 .\" --- check whether grohtml needs end of title/heading
55 .de @html_check_need_title
56 .do if (\\n[need_eo_tl] == 1) \
61 .do if (\\n[need_tl] == 1) \
67 .do if \\n[need_eo_h]>0 .do DEVTAG-EO-H
75 . do als check_need_title @html_check_need_title
77 . do als check_need_title @check_need_title
83 .de @S \" --- initialize string/macro to empty, if undefined
84 .if !d\\$1 .ds \\$1 \" empty
87 .@R @\" \" debugging level
90 .\" *** INTERNAL GP MACROS ***
93 .de @C \" --- change ev's, taking info with us
118 .de @D \" --- determine display type (Indent, Left, Center)
137 .de @z \" --- end macro
138 .if \n@>1 .tm >> @z, .z=\\n(.z ?a=\\n(?a
141 . tm Line \\n(c. -- Unclosed block, footnote, or other diversion (\\n(.z)
146 . bp \" force out final table
148 .ds @b\" \" don't start another page
154 .\" *** STANDARD HEADERS AND FOOTERS ***
157 .ie \n(.g .ds $* \\\\$*
158 .el .ds $* \\\\$1 \\\\$2 \\\\$3 \\\\$4 \\\\$5 \\\\$6 \\\\$7 \\\\$8 \\\\$9
160 .de he \" *** define header
173 .de eh \" *** define even header
180 .de oh \" *** define odd header
187 .de fo \" *** define footer
200 .de ef \" *** define even foot
207 .de of \" *** define odd footer
214 .de ep \" *** end page (must always be followed by a .bp)
224 .\" *** INTERNAL HEADER AND FOOTER MACROS ***
228 .if \n@>1 .tm >> @h %=\\n% ?a=\\n(?a ?b=\\n(?b ?w=\\n(?w
229 .if (\\n(.i+\\n(.o)>=\\n(.l \
230 . tm Line \\n(c. -- Offset + indent exceeds line length
231 .\" initialize a pile of junk
232 .nr ?h \\n(?H \" transfer "next page" to "this page"
240 .nr _w 0 \" reset max footnote width
241 .nr ?W 0 \" no wide floats this page (yet)
243 .\" begin actual header stuff
248 . sp |\\n(hmu \" move to header position
249 .@t $h\" \" output header title
253 . sp |\\n(tmu \" move to top of text
255 .mk _k \" for columned output
256 .if \\n(?n .nm 1 \" restore line numbering if n1 mode
257 .nr $c 1 \" set first column
258 .if \n@>4 .tm -- @h >> .ns nl=\\n(nl %=\\n% _k=\\n(_k tm=\\n(tm
266 . @n\" \" begin the column
270 .de @n \" --- new column or page
271 .if \n@>3 .tm >> @n nl=\\n(nl %=\\n% ?f=\\n(?f ?o=\\n(?o
274 .if (\\n(_w<=\\n($l)&(\\n(?W=0) \
276 . nr _b (\\n(ppp*\\n($vu)/200u \" compute fudge factor (must be < 1P)
277 . if \\n(_bu>((\\n(bmu-\\n(fmu-((\\n(tpp*\\n($vu)/100u))/2u) \
278 . nr _b (\\n(ppp*\\n($vu)/100u-\n(.Vu
284 .nr _b +(\\n(ppp*\\n($vu)/100u \" add 1 paragraph v in case of sweep past
285 .if \n@>2 .tm @n .p=\\n(.p bm=\\n(bm _b=\\n(_b _B=\\n(_B
286 .nr ?f 0 \" reset footnote flag
289 . (f _\" \" reprocess footnotes which run off page
301 . |h\" \" output the table header
304 . mk #T \" for tbl commands
307 .if (\\n(?a)&((\\n($c<2):(\\n(?w=0)) \
309 . nr ?a 0 \" output floating keep
312 . mk _k \" don't overstrike wide keeps
316 .$H\" \" special column header macro
321 .if \n@>1 .tm >> @f %=\\n% nl=\\n(nl ?a=\\n(?a ?b=\\n(?b ?f=\\n(?f
322 .if \n@>2 .nr VL \\n(.pu-\\n(nlu
323 .if \n@>2 .tm @f bm=\\n(bm _B=\\n(_B _b=\\n(_b .p-nl=\\n(VL
327 . nr T. 1 \" for tbl commands (to output bottom line)
328 . T# 1\" \" output the sides and bottom lines
336 . @k |b\" \" output bottom of page tables
339 . @o\" \" output footnote if present
341 . @c\" \" handle new column
348 .de @o \" --- output footnote
352 .if \n@>2 .tm @o last printed text = \\n(nl placing @r trap at -\\n(_B
356 .if \n@>2 .tm @o triggered @r (?o) = \\n(?o
359 . di \" just in case triggered @r
372 .de @c \" --- new column
373 .if \n@>2 .tm >> @c %=\\n%
381 .de @e \" --- end page
385 .sp |\\n(.pu-\\n(fmu-((\\n(tpp*\\n($vu)/100u) \" move to footer position
386 .@t $f\" \" output footer title
391 .de @t \" --- output header or footer title
394 . sz \\n(tp\" \" set header/footer type fonts, etc.
396 . lt \\n(_Lu \" make title span entire page
403 .de $h \" $$$ print header
407 . if e .ds |z "\\*(|0
408 . if o .ds |z "\\*(|1
410 .if !\(ts\\*(|z\(ts\(ts \
415 .de $f \" $$$ print footer
419 . if e .ds |z "\\*(|0
420 . if o .ds |z "\\*(|1
422 .if \(ts\\*(|z\(ts\(ts \
424 . if e .ds |z "\\*(|2
425 . if o .ds |z "\\*(|3
427 .if !\(ts\\*(|z\(ts\(ts \
432 .de @r \" --- reprocess overflow footnotes
433 .if \n@>3 .tm >> @r .z=\\n(.z ?f=\\n(?f ?a=\\n(?a ?b=\\n(?b _b=\\n(_b
434 .di |o \" save overflow footnote
441 .\" *** COMMANDS WITH VARIANT DEFINITIONS ***
444 .if !'\*(.T'html' .rn bp @b \" --- begin page
446 .de bp \" *** begin new page (overrides columns)
447 .nr $c \\n($m \" force new page, not new column
455 . @h\" \" 'spring' the header trap
458 .wh 0 @h \" reset header
461 .rn ll xl \" *** special line length (local)
462 .de ll \" *** line length (global to environments)
466 .if (\\n($m<=1):(\\n($l>\\n(_L) \
470 .rn po @O \" --- local page offset
472 .de po \" *** page offset
477 .\" Redefine the fam request to set the family in
478 .\" environment 2 as well as the current environment.
480 .do rn fam @fam \" --- set family in current environment
481 .do de fam \" *** set font family in ev 2 and current ev
489 .\" *** MISCELLANEOUS ROFF COMMANDS ***
492 .de hx \" *** suppress headers and footers next page
496 .de ix \" *** indent, no break
500 .de bl \" *** contiguous blank lines
507 .de n1 \" *** line numbering 1
513 .de n2 \" *** line numbering 2
521 .de pa \" *** new page
525 .de ro \" *** roman page numbers
529 .de ar \" *** arabic page numbers
533 .de m1 \" *** position one space
536 .nr tm +\\n(hmu-\\n(_0u
540 .de m2 \" *** position two space
541 .nr tm \\n(hmu+\\n(tpp+\\$1v
544 .de m3 \" *** position three space
545 .nr bm \\n(fmu+\\n(tpp+\\$1v
548 .de m4 \" *** position four space
551 .nr bm +\\n(fmu-\\n(_0u
554 .de sk \" *** leave a blank page (next page)
556 . tm Line \\n(c. -- I cannot skip multiple pages
561 .\" *** MISCELLANEOUS USER SUPPORT COMMANDS ***
565 .de re \" *** reset tabs (TROFF defines 15 stops default)
571 .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
574 .de ba \" *** set base indent
578 . nr $i \\n(siu*\\n($0u
581 .de hl \" *** draw horizontal line
588 .ie \n(.g .do nr _I \\n[.in]
595 .\" *** PARAGRAPHING ***
598 .de pp \" *** paragraph
602 .de lp \" *** left aligned paragraph
609 .de ip \" *** indented paragraph w/ optional tag
610 .if (\\n(ii>0)&(\\n(ii<1n) \
627 . ie \\w"\\*(|j">=\\n(_0 \
631 . do DEVTAG-COL-NEXT 2
646 .de np \" *** numbered paragraph
647 .\" use string comparison in case user has changed format of $p
649 . nr $p 0 \" reset number after .bu
650 .nr $p +1 \" increment paragraph number
653 \0(\\n($p)\h'|\w'\0(000)\0'u'\c
656 .de bu \" *** bulleted paragraph
658 .\" use string comparison in case user has changed format of $p
660 . ns \" don't space between .bu paragraphs
661 .nr $p 0-1 \" mark "bulleted paragraph" mode
667 .de @p \" --- initialize for paragraph
669 .if "\\n(.z"|e" .tm Line \\n(c. -- Unmatched continued equation
683 .\" *** SECTION HEADINGS ***
686 .de sh \" *** section heading
689 .if (\\n(si>0)&(\\n(si<1n) \
691 .if '\*(.T'html' .nr si 0
698 .@d "\\$1" +1 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
702 . $p "\\*(|n" "\\*($n" \\n($0
703 . $0 "\\*(|n" "\\*($n" \\n($0
706 .nr $p 0 1 \" reset .np count
709 .de @d \" --- change section depth
712 .if \\n($0&(\\n(.$>1) \
719 . if (\\n(.$>=3) .if !"\\$3"-" \
729 . if (\\n(.$>=4) .if !"\\$4"-" \
739 . if (\\n(.$>=5) .if !"\\$5"-" \
749 . if (\\n(.$>=6) .if !"\\$6"-" \
759 . if (\\n(.$>=7) .if !"\\$7"-" \
769 . if (\\n(.$>=8) .if !"\\$8"-" \
777 .de sx \" *** heading up, no increment (2.1.1 -> 2.1)
782 .if \\n(.$ .nr _0 \\$1
786 .nr $p 0 1 \" reset .np count
789 .de uh \" *** unnumbered section heading
794 .de $p \" $$$ print section heading
795 .if (\\n(si>0)&(\\n(.$>2) \
800 . sp \\n(ssu \" one of them is non-null
801 . ne \\n(.Lv+\\n(.Vu+\\n(psu+((\\n(spp*\\n($vu*\\n(.Lu)/100u)
802 . \" exdent if \\$3 > 0
804 . ti -(\\n(siu-\\n(sou)
811 . if \w"\\$2">0 \\$2.
812 . if \w"\\$1">0 \\$1\f1\ \ \&
821 .\" *** COLUMNNED OUTPUT ***
824 .de 2c \" *** double columned output
827 . 1c\" \" revert to 1c if already 2c
833 . nr $s \\$1n \" param 1: column seperation
834 .nr $l (\\n(.l-((\\n($m-1)*\\n($s))/\\n($m
840 .de 1c \" *** single columned output
844 .ll \\n(_Lu \" return to normal output
849 .de bc \" *** begin column
854 .\" *** FLOATING TABLES AND NONFLOATING BLOCKS ***
857 .de (z \" *** begin floating keep
858 .if \n@>4 .tm >> (z, .z=\n(.z
863 .de )z \" *** end floating keep
864 .if \n@>4 .tm >> )z, .z=\n(.z
867 .if \n@>4 .tm -- )z << @), .z=\n(.z
870 . nr dn +(\\n(ppp*\\n($vu)/200u+\\n(zsu
871 .nr dl -\n(.H \" fudge factor necessary to make it work
872 .ie ((\\n(dn+\n(.V)>=\\n(.t):(\\n(?a):((\\n(dl>\\n($l)&(\\n($c>1)) \
875 . if (\\n(dl>\\n($l)&(\\n($m>1) \
876 . nr ?w 1 \" mark wider than one column (top)
882 . if (\\n(dl>\\n($l)&(\\n($m>1) \
883 . nr ?W 1 \" mark wider than one column (bottom)
885 . \" avoid moving @f back past the current position
886 . if \\n(.p-\\n(nl-\n(.V<\\n(_b \
887 . nr _b \\n(.p-\\n(nl-\n(.V
891 .da \\*(|x \" copy to save macro
895 .if \n@>4 .tm -- )z >> \\*(|x
896 \!.if \\\\n(nl>(\\\\n(tm+2v) .ne \\n(dnu-\\n(zsu
897 .|k\" \" and the body
899 .if \n@>4 .tm -- )z << \\*(|x, .z=\\n(.z
901 .rm |k\" \" remove the temp macro
907 .if \n@>4 .tm << )z, .z=\\n(.z
910 .de @k \" --- output floating keep
911 .if \n@>4 .tm >> @k, $1=\\$1, .z=\\n(.z
924 .de (t \" XXX temp ref to (z
928 .de )t \" XXX temp ref to )t
932 .de (b \" *** begin block
937 .if '\*(.T'html' .sp \\n(bsu
940 .de )b \" *** end block
943 .if (\\n(bt=0):(\\n(.t<\\n(bt) \
944 . ne \\n(dnu \" make it all on one page
954 .sp \\n(bsu+\\n(.Lv-1v
957 .de @( \" --- begin keep
958 .if !"\\n(.z"" .tm Line \\n(c. -- Invalid nested keep \\n(.z
964 .de @M \" --- set modes for display
969 .vs \\n(.sp*\\n($Vu/100u
972 . fi \" set fill mode if "F" parameter
984 .de @) \" --- end keep
986 .if !"\\n(.z"|k" .tm Line \\n(c. -- Close of a keep which has never been opened
993 .de (c \" *** begin block centered text
994 .if "\\n(.z"|c" .tm Line \\n(c. -- Nested .(c requests
998 .de )c \" *** end block centered text
999 .if !"\\n(.z"|c" .tm Line \\n(c. -- Unmatched .)c
1000 .br \" force out final line
1002 .if \n@>4 .tm >> .)c .l=\\n(.l .i=\\n(.i $i=\\n($i dl=\\n(dl
1005 .in (\\n(.lu-\\n(.iu-\\n(dlu)/2u
1006 .if \n@>4 .tm -- .)c << .in .l=\\n(.l .i=\\n(.i dl=\\n(dl
1017 .\" *** BLOCK QUOTES (OR WHATEVER) AND LISTS ***
1020 .de (q \" *** begin block quote
1030 .de )q \" *** end block quote
1033 .sp \\n(qsu+\\n(.Lv-1v
1037 .de (l \" *** begin list
1042 .if '\*(.T'html' .sp \\n(bsu
1045 .de )l \" *** end list
1048 .sp \\n(bsu+\\n(.Lv-1v
1053 .\" *** PREPROCESSOR SUPPORT ***
1059 .de EQ \" *** equation start
1060 .do if \\n[need_eo_h]>0 .do DEVTAG-EO-H
1065 . do nr e-EQ-ll \\n(.l
1071 . if "\\n(.z"|e" .tm Line \\n(c. -- Nested .EQ request
1072 . @D 1 "\\$1" "\\$2"
1081 .de EN \" *** equation end
1085 . do ll \\n[e-EQ-ll]u
1096 . @q\" \" actual equation output
1102 .de @q \" --- equation output
1105 .sp \\n(esu \" output rest of preceeding text
1106 .if !"\\n(.z"" \!.ne \\n(_Qu
1107 .ne \\n(_Qu+\n(.Vu \" keep it on one page
1108 .@C 2\" \" .ev 2 may be jumbled from header
1110 . in (\\n(.lu+\\n($iu-\\n(dlu)/2u
1114 . in \\n(biu+\\n($iu
1118 .if \n@>1 .tm --@e: _Q=\\n(_Q _q=\\n(_q nl=\\n(nl |p=\\*(|p
1122 . sp (\\n(_Qu-\\n(.vu)/2u
1127 .sp |\\n(_qu+\\n(_Qu
1128 .sp \\n(esu+\\n(.Lv-1v
1136 .de TS \" *** table start
1140 . do nr e-TS-ll \\n(.l
1145 .fi \" drop into fill mode for text boxes
1148 . di |h \" save header part
1152 .ch @f -(\\n(_bu+1v) \" set pseudo-trap for bottom line
1153 .if \\n(.p-\\n(_b-1v<=\\n(nl \
1154 . ch @f \\n(nlu+\n(.Vu
1157 .de TH \" *** end header part of table
1167 .|h\" \" put in the initial header
1173 .de TE \" *** table end
1175 .ch @f -\\n(_bu \" reset pseudo-trap
1176 .if \\n(.p-\\n(_b<=\\n(nl \
1177 . ch @f \\n(nlu+\n(.Vu
1181 . do ll \\n[e-TS-ll]u
1182 .sp \\n(bsu+\\n(.Lv-1v
1192 .de ][ \" *** refer output
1193 .if \\$1>5 .tm Bad arg to []
1200 .if !"\\*([A"" \\*([A,
1201 .if !"\\*([T"" \\f2\\*([T\\f1\c
1202 .if !"\\*([T"" .if !"\\*([O"" ,\ \"
1203 .ie !"\\*([O"" \\*([O
1204 .el .if !"\\*([T"" \&.
1205 .if !"\\*([D"" \\*([D.
1210 .de [1 \" --- journal article
1214 .if !"\\*([T"" \\*(lq\\*([T,\\*(rq
1215 .if "\\*([V"" \\f2\\*([J\\f1,
1216 .if !"\\*([V"" \\f2\\*([J\\f1
1217 .if !"\\*([V"" \\f3\\*([V\\f1\c
1218 .if !"\\*([N"" (\\*([N)\c
1221 . ie \\n([P>0 \ pp.\&
1225 .if !"\\*([I"" .if "\\*([R"" \\*([I,
1227 .if !"\\*([O"" \\*([O
1234 \\*([A, \\f2\\*([T,\\f1
1236 .if !"\\*([C"" , \\*([C\c
1238 .if !"\\*([G"" Gov't. ordering no. \\*([G
1239 .if !"\\*([O"" \\*([O
1243 .de [3 \" --- article in book
1246 \\*([A, \\*(lq\\*([T,\\*(rq
1247 .if !"\\*([P"" pp. \\*([P
1248 in \\f2\\*([B\\f1, \c
1249 .if !"\\*([E"" ed. \\*([E, \c
1250 .if !"\\*([I"" \\*([I\c
1251 .if !"\\*([C"" , \\*([C\c
1253 .if !"\\*([O"" \\*([O
1257 .de [4 \" --- report
1260 \\*([A, \\*(lq\\*([T,\\*(rq
1262 .if !"\\*([G"" \& (\\*([G)\c
1263 .if !"\\*([I"" , \\*([I\c
1264 .if !"\\*([C"" , \\*([C\c
1266 .if !"\\*([O"" \\*([O
1270 .de [5 \" --- tm style
1273 \\*([A, \\f2\\*([T\\f1,
1275 .el Bell Laboratories internal memorandum (\\*([D).
1290 .rm [V [P [A [T [N [C [B [O [R [I [E [D
1295 . ds [. \s-2\v'-.4m'\f1
1296 . ds .] \v'.4m'\s+2\fP
1307 .de IS \" *** start ideal picture
1317 .de IE \" *** end ideal picture
1325 .de PS \" *** start picture: $1=height, $2=width in units or inches
1329 .in (u;\\n(.l-\\n(g7>?0/2)
1335 .de PE \" *** end picture
1346 .de GS \" *** start gremlin picture
1349 . ie "\\$1"L" .do HTML-IMAGE-LEFT
1350 . el .ie "\\$1"R" .do HTML-IMAGE-RIGHT
1355 . nr g7 (\\n(.lu-\\n(g1u)/2u
1356 . if "\\$1"L" .nr g7 \\n(.iu
1357 . if "\\$1"R" .nr g7 \\n(.lu-\\n(g1u
1366 .de GE \" *** end gremlin picture
1367 .ie '\*(.T'html' .do HTML-IMAGE-END
1375 .de GF \" *** finish gremlin picture; stay at top
1382 .\" *** FONT AIDS ***
1385 .de sz \" *** set point size and vertical spacing
1388 .vs \\n(.sp*\\n($vu/100u \" default vs at pointsize + 20%
1391 .de @v \" --- possibly set $v from $r
1392 .if (1i>=240u)&(1p<=\\n($r)&(\\n($r<=4p) .nr $v \\n($r00/1p
1395 .de @V \" --- possibly set $V from $R
1396 .if (1i>=240u)&(1p<=\\n($R)&(\\n($R<=4p) .nr $V \\n($R00/1p
1399 .de @E \" --- store in _F argument to \f for restoring font
1404 . ie \\n(.f<100&\n(.g \
1411 .de r \" *** enter roman font
1412 .do check_need_title
1415 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1416 .do check_need_title
1419 .de i \" *** enter italic
1420 .do check_need_title
1423 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1424 .do check_need_title
1427 .de b \" *** enter boldface
1428 .do check_need_title
1431 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1432 .do check_need_title
1435 .de rb \" *** enter real boldface
1436 .do check_need_title
1439 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1440 .do check_need_title
1443 .de bi \" *** enter bold italic
1444 .do check_need_title
1447 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1448 .do check_need_title
1451 .de u \" *** enter underlined word
1452 \&\\$1\l'|0\(ul'\\$2
1455 .\" a better version of u
1458 \Z'\\$1'\v'.25m'\D'l \w'\\$1'u 0'\v'-.25m'\\$2
1461 .de q \" *** enter quoted word
1462 \&\\*(lq\\$1\\*(rq\\$2
1465 .de bx \" *** enter boxed word
1466 .ie '\*(.T'html' \\$1\\$2
1467 .el \k~\(br\|\\$1\|\(br\l'|\\n~u\(rn'\l'|\\n~u\(ul'\^\\$2
1470 .de sm \" *** print in smaller font
1474 .de @F \" --- change font (0 -> no change)
1482 .\" *** FOOTNOTING ***
1485 .de (f \" *** begin footnote
1487 .if "\\n(.z"|f" .tm Line \\n(c. -- Invalid footnote nesting
1495 . xl \\n($lu-\\n(fuu
1498 . vs \\n(.sp*\\n($Vu/100u
1501 . nr _b +1v \" allow space for $s
1505 . if \\n(.p-\\n(_b-\\n(_0-\\n(.h-1v-\\n(fs<0 \
1507 . da\" \" won't fit on page at all
1512 .\" next five lines could be dropped if headers had their own environment
1513 . in 0 \" reset everything from .bc
1514 . xl \\n($lu-\\n(fuu
1517 . vs \\n(.sp*\\n($Vu/100u
1528 . if \n@>2 .tm << (f $f=\\n($f
1534 . xl \\n($lu-\\n(fuu
1537 . vs \\n(.sp*\\n($Vu/100u
1544 .de @N \" --- set no fill mode in the top-level diversion
1549 .de )f \" *** end footnote
1554 . ds * \\*{\\n($f\\*}\k*
1559 . if \\n(_w<\\n(dl \
1560 . nr _w \\n(dl \" compute maximum fn width
1563 . if \\n(.p-\\n(_b<=\\n(nl \
1564 . ch @f \\n(nlu+\n(.Vu
1578 . nr ff 1 \" footnote font: Times Roman
1581 . nr fp 8 \" footnote pointsize
1583 .de $s \" $$$ footnote separator
1588 .\" *** DELAYED TEXT ***
1591 .de (d \" *** begin delayed text
1596 .de )d \" *** end delayed text
1603 .de pd \" *** print delayed text
1611 .\" *** INDEXES (TABLE OF CONTENTS) ***
1618 .de (x \" *** begin index entry
1619 .if \n@>4 .tm >> (x, .z=\\n(.z
1630 .de @0 \" --- finish (x if no current diversion
1636 .de @1 \" --- finish (x if current diversion
1637 .if "\\n(_x"z" .nr _x 0
1641 .de )x \" *** end index entry
1642 .if \n@>4 .tm >> )x, .z=\\n(.z
1651 . if \w"\\$2">(\\n(.l-\\n(.i-\\n(.k) \
1653 \\\\a\\\\t\\$2\\*(|x
1667 .de xp \" *** print the index
1671 .vs \\n(.sp*\\n($Vu/100u
1677 .xl -(\\n(xuu+\w'...'u)
1688 .ta \\n(.lu-\\n(xuuR \\n(.luR
1696 .\" *** HTML VERSIONS OF .x(, .x), AND .xp ***
1699 .de (x-html \" --- create TAG and divert text
1708 .de )x-html \" --- end diversion
1713 .de xp-html \" --- create list of links
1719 .do while \\n[_xx]<=\\n[_xn] \
1722 . do unformat |x\\n[_xx]
1730 . do asciify xp-html-div
1732 . do as xp-html-as #
1733 . do as xp-html-as _x\\n[_xx]
1736 . do URL \\*[xp-html-as] "\\*[xp-html-div]
1756 .\" *** CHAPTERS AND TITLES ***
1759 .de +c \" *** begin chapter
1760 .ep\" \" force out footnotes
1763 . bp \" force out a table or more footnote
1773 .in \\n($iu \" reset the indent
1781 .de ++ \" *** declare chapter type
1784 . nr _0 1 \" chapter
1786 . nr _0 11 \" renumbered chapter
1788 . nr _0 2 \" appendix
1790 . nr _0 12 \" renumbered appendix
1792 . nr _0 3 \" preliminary material
1794 . nr _0 4 \" bibliographic material
1796 . nr _0 5 \" abstract
1798 . tm Line \\n(c. -- Bad mode to .++
1806 .if (\\n(_0=3):(\\n(_0=5) \
1807 . pn 1 \" must do before .ep
1808 .if !\\n(_0=\\n(_M .if \\n(_M=3 \
1809 . pn 1 \" must do before .ep
1810 .ep\" \" end page for correct page number types
1833 .de $c \" $$$ print chapter title
1839 .ie \\n(_M=1 CHAPTER\ \ \\n(ch
1840 .el .if \\n(_M=2 APPENDIX\ \ \\n(ch
1841 .if \w"\\$1" .sp 3-\\n(.L
1843 .if (\\n(_M<3):(\w"\\$1") \
1849 . $C Chapter \\n(ch "\\$1"
1851 . $C Appendix \\n(ch "\\$1"
1854 .de tp \" *** title page
1863 .if \n(mo=1 .ds mo January
1864 .if \n(mo=2 .ds mo February
1865 .if \n(mo=3 .ds mo March
1866 .if \n(mo=4 .ds mo April
1867 .if \n(mo=5 .ds mo May
1868 .if \n(mo=6 .ds mo June
1869 .if \n(mo=7 .ds mo July
1870 .if \n(mo=8 .ds mo August
1871 .if \n(mo=9 .ds mo September
1872 .if \n(mo=10 .ds mo October
1873 .if \n(mo=11 .ds mo November
1874 .if \n(mo=12 .ds mo December
1875 .if \n(dw=1 .ds dw Sunday
1876 .if \n(dw=2 .ds dw Monday
1877 .if \n(dw=3 .ds dw Tuesday
1878 .if \n(dw=4 .ds dw Wednesday
1879 .if \n(dw=5 .ds dw Thursday
1880 .if \n(dw=6 .ds dw Friday
1881 .if \n(dw=7 .ds dw Saturday
1885 .ds td \*(mo \n(dy, \n(y4
1888 .\" *** PARAMETRIC INITIALIZATIONS ***
1892 .nr $v \n(.v00+\n(.sp-1/\n(.sp \" vs as percentage of ps for .sz request
1893 .nr $V \n($v \" same for displays & footnotes
1894 .nr hm 4v \" header margin
1895 .nr tm 7v \" top margin
1896 .nr bm 6v \" bottom margin
1897 .nr fm 3v \" footer margin
1898 .nr tf 3 \" title font: (real) Times Bold
1899 .nr tp 10 \" title point size
1901 .nr bi 4m \" indent for blocks
1902 .nr pi 5n \" indent for paragraphs
1903 .nr pf 1 \" normal text font
1904 .nr pp 10 \" normal text point size
1905 .nr qi 4n \" indent for quotes
1906 .nr qp -1 \" down one point
1907 .nr ii 5n \" indent for .ip's and .np's
1908 .nr $m 1 \" max number of columns
1909 .nr $s 4n \" column separation
1910 .nr sf 3 \" section font -- Times Bold
1911 .nr sp 10 \" section title pointsize
1912 .nr ss 12p \" section prespacing
1913 .nr si 0 \" section indent
1916 .\" *** OTHER INITIALIZATION ***
1919 .\" GNU pic sets this register to 1, to indicate that \x should not be used.
1921 .ds { \v'-0.4m'\x'\\n(0x=0*-0.2m'\s-3
1923 .\" for compatibility with traditional -me
1924 .\" (the first will work only in compatibility mode)
1927 .ds < \v'0.4m'\x'\\n(0x=0*0.2m'\s-3
1930 .\" Avoid warnings from groff -ww.
1948 .@R po\" \" simulated page offset
1949 .@R $0\" \" section depth
1950 .@R $i\" \" paragraph base indent
1951 .@R $p\" \" numbered paragraph number
1952 .@R $r\" \" ratio of vs to ps (may override $v)
1953 .@R $R\" \" same for displays (may override $V)
1954 .@R df\" \" display font: same as surrounding text
1955 .@R so\" \" additional section title offset
1956 .@R fu\" \" footnote undent
1957 .@R bt\" \" block keep threshold
1958 .@R *\" \" has \** been referenced?
1959 .@R ?a\" \" pending floating keep at page top?
1960 .@R ?b\" \" pending floating keep at page bottom?
1961 .@R ?C\" \" at chapter header?
1962 .@R ?e\" \" in equation?
1963 .@R ?H\" \" suppress headers and footers next page?
1964 .@R ?I\" \" has the header trap been sprung?
1965 .@R ?n\" \" n1 mode?
1966 .@R ?o\" \" footnote overflow?
1967 .@R ?R\" \" renumbered chapter?
1968 .@R ?s\" \" skip next page?
1969 .@R ?T\" \" inside .TS H?
1970 .@R ?W\" \" wide floating keep at page bottom?
1971 .@R ?w\" \" wide floating keep at page top?
1977 .if \n(ps<\n(.V .nr ps \n(.V
1978 .nr bs \n(ps \" block pre/post spacing
1979 .nr qs \n(ps \" quote pre/post spacing
1980 .nr zs 1v \" float-block pre/postspacing
1981 .nr xs 0.2v \" index prespacing
1982 .nr xu 0.5i \" index undent
1983 .nr fs 0.2v \" footnote prespacing
1984 .nr es 0.5v \" equation pre/postspacing
1985 .if \n(es<\n(.V .nr es \n(.V
1986 .wh 0 @h \" set header
1987 .nr $l \n(.lu \" line length
1988 .nr _L \n(.lu \" line length of page
1989 .nr $c 1 \" current column number
1990 .nr $f 1 1 \" footnote number
1991 .ds * \*{1\*}\k*\" \" footnote "name"
1992 .nr $d 1 1 \" delayed text number
1993 .ds # [1]\k#\" \" delayed text "name"
1994 .nr _M 1 \" chapter mode is chapter
1995 .ds lq \(lq\" \" left quote
1996 .ds rq \(rq\" \" right quote
2000 .\" *** FOREIGN LETTERS AND SPECIAL CHARACTERS ***
2003 .ds #h ((1u-(\\\\n(.fu%2u))*0.13m)
2007 .ds ' \k_\h'-(\\n(.wu*8/10-\*(#h)'\(aa\h'|\\n_u'
2008 .ds ` \k_\h'-(\\n(.wu*7/10-\*(#h)'\(ga\h'|\\n_u'
2011 .ds : \k_\h'-(\\n(.wu*8/10-\*(#h+0.1m)'\v'-\*(#v'\z.\h'0.2m'.\h'|\\n_u'\v'\*(#v'
2013 .\" \" circumflex and tilde
2014 .ds ^ \k_\h'-(\\n(.wu-\*(#h-0.05m)'^\h'|\\n_u'
2015 .ds ~ \k_\h'-(\\n(.wu-\*(#h-0.05m)'~\h'|\\n_u'
2017 .\" \" cedilla and czech
2018 .ds , \k_\h'-(\\n(.wu)',\h'|\\n_u'
2019 .ds v \k_\h'-(\\n(.wu*9/10-\*(#h)'\v'-\*(#v'\s-4v\s0\v'\*(#v'\h'|\\n_u'
2021 .\" \" Norwegian A or angstrom
2022 .ds o \k_\h'-(\\n(.wu+\w'\(de'u-\*(#h)/2u'\v'-0.4n'\z\(de\v'0.4n'\h'|\\n_u'
2024 .\" \" there exists, for all
2025 .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'
2026 .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'
2032 .tm The \\$1 macro has been removed from this version of the -me macros.