1 .\" @(#)e.tmac 2.31 (Berkeley) 5/21/88
2 .\" Modified by James Clark for use with groff.
3 .\" Adapted to S-roff by Steffen (Daode) Nurpmeso <sdaoden@users.sf.net>.
5 .\" Copyright (c) 1988 Regents of the University of California.
6 .\" All rights reserved.
8 .\" Redistribution and use in source and binary forms are permitted
9 .\" provided that this notice is preserved and that due credit is given
10 .\" to the University of California at Berkeley. The name of the University
11 .\" may not be used to endorse or promote products derived from this
12 .\" software without specific prior written permission. This software
13 .\" is provided ``as is'' without express or implied warranty.
16 .\"**********************************************************************
18 .\"* ****** - M E N R O F F / T R O F F M A C R O S ****** *
20 .\"* Produced for your edification and enjoyment by: *
22 .\"* Electronics Research Laboratory *
24 .\"* current address: *
25 .\"* Britton-Lee, Inc. *
26 .\"* 1919 Addison Street Suite 105 *
27 .\"* Berkeley, California 94704 *
29 .\"* VERSION 2.31 First Release: 11 Sept 1978 *
31 .\"* Documentation is available. *
33 .\"**********************************************************************
35 .\" Code on .de commands:
36 .\" *** a user interface macro.
37 .\" &&& a user interface macro which is redefined
38 .\" when used to be the real thing.
39 .\" $$$ a macro which may be redefined by the user
40 .\" to provide variant functions.
41 .\" --- an internal macro.
51 .de @R \" --- initialize number register to 0, if undefined
55 .\" --- check whether grohtml needs end of title/heading
56 .de @html_check_need_title
57 .do if (\\n[need_eo_tl] == 1) \
62 .do if (\\n[need_tl] == 1) \
68 .do if \\n[need_eo_h]>0 .do DEVTAG-EO-H
76 . do als check_need_title @html_check_need_title
78 . do als check_need_title @check_need_title
84 .de @S \" --- initialize string/macro to empty, if undefined
85 .if !d\\$1 .ds \\$1 \" empty
88 .@R @\" \" debugging level
91 .\" *** INTERNAL GP MACROS ***
94 .de @C \" --- change ev's, taking info with us
119 .de @D \" --- determine display type (Indent, Left, Center)
138 .de @z \" --- end macro
139 .if \n@>1 .tm >> @z, .z=\\n(.z ?a=\\n(?a
142 . tm Line \\n(c. -- Unclosed block, footnote, or other diversion (\\n(.z)
147 . bp \" force out final table
149 .ds @b\" \" don't start another page
155 .\" *** STANDARD HEADERS AND FOOTERS ***
158 .ie \n(.g .ds $* \\\\$*
159 .el .ds $* \\\\$1 \\\\$2 \\\\$3 \\\\$4 \\\\$5 \\\\$6 \\\\$7 \\\\$8 \\\\$9
161 .de he \" *** define header
174 .de eh \" *** define even header
181 .de oh \" *** define odd header
188 .de fo \" *** define footer
201 .de ef \" *** define even foot
208 .de of \" *** define odd footer
215 .de ep \" *** end page (must always be followed by a .bp)
225 .\" *** INTERNAL HEADER AND FOOTER MACROS ***
229 .if \n@>1 .tm >> @h %=\\n% ?a=\\n(?a ?b=\\n(?b ?w=\\n(?w
230 .if (\\n(.i+\\n(.o)>=\\n(.l \
231 . tm Line \\n(c. -- Offset + indent exceeds line length
232 .\" initialize a pile of junk
233 .nr ?h \\n(?H \" transfer "next page" to "this page"
241 .nr _w 0 \" reset max footnote width
242 .nr ?W 0 \" no wide floats this page (yet)
244 .\" begin actual header stuff
249 . sp |\\n(hmu \" move to header position
250 .@t $h\" \" output header title
254 . sp |\\n(tmu \" move to top of text
256 .mk _k \" for columned output
257 .if \\n(?n .nm 1 \" restore line numbering if n1 mode
258 .nr $c 1 \" set first column
259 .if \n@>4 .tm -- @h >> .ns nl=\\n(nl %=\\n% _k=\\n(_k tm=\\n(tm
267 . @n\" \" begin the column
271 .de @n \" --- new column or page
272 .if \n@>3 .tm >> @n nl=\\n(nl %=\\n% ?f=\\n(?f ?o=\\n(?o
275 .if (\\n(_w<=\\n($l)&(\\n(?W=0) \
277 . nr _b (\\n(ppp*\\n($vu)/200u \" compute fudge factor (must be < 1P)
278 . if \\n(_bu>((\\n(bmu-\\n(fmu-((\\n(tpp*\\n($vu)/100u))/2u) \
279 . nr _b (\\n(ppp*\\n($vu)/100u-\n(.Vu
285 .nr _b +(\\n(ppp*\\n($vu)/100u \" add 1 paragraph v in case of sweep past
286 .if \n@>2 .tm @n .p=\\n(.p bm=\\n(bm _b=\\n(_b _B=\\n(_B
287 .nr ?f 0 \" reset footnote flag
290 . (f _\" \" reprocess footnotes which run off page
302 . |h\" \" output the table header
305 . mk #T \" for tbl commands
308 .if (\\n(?a)&((\\n($c<2):(\\n(?w=0)) \
310 . nr ?a 0 \" output floating keep
313 . mk _k \" don't overstrike wide keeps
317 .$H\" \" special column header macro
322 .if \n@>1 .tm >> @f %=\\n% nl=\\n(nl ?a=\\n(?a ?b=\\n(?b ?f=\\n(?f
323 .if \n@>2 .nr VL \\n(.pu-\\n(nlu
324 .if \n@>2 .tm @f bm=\\n(bm _B=\\n(_B _b=\\n(_b .p-nl=\\n(VL
328 . nr T. 1 \" for tbl commands (to output bottom line)
329 . T# 1\" \" output the sides and bottom lines
337 . @k |b\" \" output bottom of page tables
340 . @o\" \" output footnote if present
342 . @c\" \" handle new column
349 .de @o \" --- output footnote
353 .if \n@>2 .tm @o last printed text = \\n(nl placing @r trap at -\\n(_B
357 .if \n@>2 .tm @o triggered @r (?o) = \\n(?o
360 . di \" just in case triggered @r
373 .de @c \" --- new column
374 .if \n@>2 .tm >> @c %=\\n%
382 .de @e \" --- end page
386 .sp |\\n(.pu-\\n(fmu-((\\n(tpp*\\n($vu)/100u) \" move to footer position
387 .@t $f\" \" output footer title
392 .de @t \" --- output header or footer title
395 . sz \\n(tp\" \" set header/footer type fonts, etc.
397 . lt \\n(_Lu \" make title span entire page
404 .de $h \" $$$ print header
408 . if e .ds |z "\\*(|0
409 . if o .ds |z "\\*(|1
411 .if !\(ts\\*(|z\(ts\(ts \
416 .de $f \" $$$ print footer
420 . if e .ds |z "\\*(|0
421 . if o .ds |z "\\*(|1
423 .if \(ts\\*(|z\(ts\(ts \
425 . if e .ds |z "\\*(|2
426 . if o .ds |z "\\*(|3
428 .if !\(ts\\*(|z\(ts\(ts \
433 .de @r \" --- reprocess overflow footnotes
434 .if \n@>3 .tm >> @r .z=\\n(.z ?f=\\n(?f ?a=\\n(?a ?b=\\n(?b _b=\\n(_b
435 .di |o \" save overflow footnote
442 .\" *** COMMANDS WITH VARIANT DEFINITIONS ***
445 .if !'\*(.T'html' .rn bp @b \" --- begin page
447 .de bp \" *** begin new page (overrides columns)
448 .nr $c \\n($m \" force new page, not new column
456 . @h\" \" 'spring' the header trap
459 .wh 0 @h \" reset header
462 .rn ll xl \" *** special line length (local)
463 .de ll \" *** line length (global to environments)
467 .if (\\n($m<=1):(\\n($l>\\n(_L) \
471 .rn po @O \" --- local page offset
473 .de po \" *** page offset
478 .\" Redefine the fam request to set the family in
479 .\" environment 2 as well as the current environment.
481 .do rn fam @fam \" --- set family in current environment
482 .do de fam \" *** set font family in ev 2 and current ev
490 .\" *** MISCELLANEOUS ROFF COMMANDS ***
493 .de hx \" *** suppress headers and footers next page
497 .de ix \" *** indent, no break
501 .de bl \" *** contiguous blank lines
508 .de n1 \" *** line numbering 1
514 .de n2 \" *** line numbering 2
522 .de pa \" *** new page
526 .de ro \" *** roman page numbers
530 .de ar \" *** arabic page numbers
534 .de m1 \" *** position one space
537 .nr tm +\\n(hmu-\\n(_0u
541 .de m2 \" *** position two space
542 .nr tm \\n(hmu+\\n(tpp+\\$1v
545 .de m3 \" *** position three space
546 .nr bm \\n(fmu+\\n(tpp+\\$1v
549 .de m4 \" *** position four space
552 .nr bm +\\n(fmu-\\n(_0u
555 .de sk \" *** leave a blank page (next page)
557 . tm Line \\n(c. -- I cannot skip multiple pages
562 .\" *** MISCELLANEOUS USER SUPPORT COMMANDS ***
566 .de re \" *** reset tabs (TROFF defines 15 stops default)
572 .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
575 .de ba \" *** set base indent
579 . nr $i \\n(siu*\\n($0u
582 .de hl \" *** draw horizontal line
589 .ie \n(.g .do nr _I \\n[.in]
596 .\" *** PARAGRAPHING ***
599 .de pp \" *** paragraph
603 .de lp \" *** left aligned paragraph
610 .de ip \" *** indented paragraph w/ optional tag
611 .if (\\n(ii>0)&(\\n(ii<1n) \
628 . ie \\w"\\*(|j">=\\n(_0 \
632 . do DEVTAG-COL-NEXT 2
647 .de np \" *** numbered paragraph
648 .\" use string comparison in case user has changed format of $p
650 . nr $p 0 \" reset number after .bu
651 .nr $p +1 \" increment paragraph number
654 \0(\\n($p)\h'|\w'\0(000)\0'u'\c
657 .de bu \" *** bulleted paragraph
659 .\" use string comparison in case user has changed format of $p
661 . ns \" don't space between .bu paragraphs
662 .nr $p 0-1 \" mark "bulleted paragraph" mode
668 .de @p \" --- initialize for paragraph
670 .if "\\n(.z"|e" .tm Line \\n(c. -- Unmatched continued equation
684 .\" *** SECTION HEADINGS ***
687 .de sh \" *** section heading
690 .if (\\n(si>0)&(\\n(si<1n) \
692 .if '\*(.T'html' .nr si 0
699 .@d "\\$1" +1 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
703 . $p "\\*(|n" "\\*($n" \\n($0
704 . $0 "\\*(|n" "\\*($n" \\n($0
707 .nr $p 0 1 \" reset .np count
710 .de @d \" --- change section depth
713 .if \\n($0&(\\n(.$>1) \
720 . if (\\n(.$>=3) .if !"\\$3"-" \
730 . if (\\n(.$>=4) .if !"\\$4"-" \
740 . if (\\n(.$>=5) .if !"\\$5"-" \
750 . if (\\n(.$>=6) .if !"\\$6"-" \
760 . if (\\n(.$>=7) .if !"\\$7"-" \
770 . if (\\n(.$>=8) .if !"\\$8"-" \
778 .de sx \" *** heading up, no increment (2.1.1 -> 2.1)
783 .if \\n(.$ .nr _0 \\$1
787 .nr $p 0 1 \" reset .np count
790 .de uh \" *** unnumbered section heading
795 .de $p \" $$$ print section heading
796 .if (\\n(si>0)&(\\n(.$>2) \
801 . sp \\n(ssu \" one of them is non-null
802 . ne \\n(.Lv+\\n(.Vu+\\n(psu+((\\n(spp*\\n($vu*\\n(.Lu)/100u)
803 . \" exdent if \\$3 > 0
805 . ti -(\\n(siu-\\n(sou)
812 . if \w"\\$2">0 \\$2.
813 . if \w"\\$1">0 \\$1\f1\ \ \&
822 .\" *** COLUMNNED OUTPUT ***
825 .de 2c \" *** double columned output
828 . 1c\" \" revert to 1c if already 2c
834 . nr $s \\$1n \" param 1: column seperation
835 .nr $l (\\n(.l-((\\n($m-1)*\\n($s))/\\n($m
841 .de 1c \" *** single columned output
845 .ll \\n(_Lu \" return to normal output
850 .de bc \" *** begin column
855 .\" *** FLOATING TABLES AND NONFLOATING BLOCKS ***
858 .de (z \" *** begin floating keep
859 .if \n@>4 .tm >> (z, .z=\n(.z
864 .de )z \" *** end floating keep
865 .if \n@>4 .tm >> )z, .z=\n(.z
868 .if \n@>4 .tm -- )z << @), .z=\n(.z
871 . nr dn +(\\n(ppp*\\n($vu)/200u+\\n(zsu
872 .nr dl -\n(.H \" fudge factor necessary to make it work
873 .ie ((\\n(dn+\n(.V)>=\\n(.t):(\\n(?a):((\\n(dl>\\n($l)&(\\n($c>1)) \
876 . if (\\n(dl>\\n($l)&(\\n($m>1) \
877 . nr ?w 1 \" mark wider than one column (top)
883 . if (\\n(dl>\\n($l)&(\\n($m>1) \
884 . nr ?W 1 \" mark wider than one column (bottom)
886 . \" avoid moving @f back past the current position
887 . if \\n(.p-\\n(nl-\n(.V<\\n(_b \
888 . nr _b \\n(.p-\\n(nl-\n(.V
892 .da \\*(|x \" copy to save macro
896 .if \n@>4 .tm -- )z >> \\*(|x
897 \!.if \\\\n(nl>(\\\\n(tm+2v) .ne \\n(dnu-\\n(zsu
898 .|k\" \" and the body
900 .if \n@>4 .tm -- )z << \\*(|x, .z=\\n(.z
902 .rm |k\" \" remove the temp macro
908 .if \n@>4 .tm << )z, .z=\\n(.z
911 .de @k \" --- output floating keep
912 .if \n@>4 .tm >> @k, $1=\\$1, .z=\\n(.z
925 .de (t \" XXX temp ref to (z
929 .de )t \" XXX temp ref to )t
933 .de (b \" *** begin block
938 .if '\*(.T'html' .sp \\n(bsu
941 .de )b \" *** end block
944 .if (\\n(bt=0):(\\n(.t<\\n(bt) \
945 . ne \\n(dnu \" make it all on one page
955 .sp \\n(bsu+\\n(.Lv-1v
958 .de @( \" --- begin keep
959 .if !"\\n(.z"" .tm Line \\n(c. -- Invalid nested keep \\n(.z
965 .de @M \" --- set modes for display
970 .vs \\n(.sp*\\n($Vu/100u
973 . fi \" set fill mode if "F" parameter
985 .de @) \" --- end keep
987 .if !"\\n(.z"|k" .tm Line \\n(c. -- Close of a keep which has never been opened
994 .de (c \" *** begin block centered text
995 .if "\\n(.z"|c" .tm Line \\n(c. -- Nested .(c requests
999 .de )c \" *** end block centered text
1000 .if !"\\n(.z"|c" .tm Line \\n(c. -- Unmatched .)c
1001 .br \" force out final line
1003 .if \n@>4 .tm >> .)c .l=\\n(.l .i=\\n(.i $i=\\n($i dl=\\n(dl
1006 .in (\\n(.lu-\\n(.iu-\\n(dlu)/2u
1007 .if \n@>4 .tm -- .)c << .in .l=\\n(.l .i=\\n(.i dl=\\n(dl
1018 .\" *** BLOCK QUOTES (OR WHATEVER) AND LISTS ***
1021 .de (q \" *** begin block quote
1031 .de )q \" *** end block quote
1034 .sp \\n(qsu+\\n(.Lv-1v
1038 .de (l \" *** begin list
1043 .if '\*(.T'html' .sp \\n(bsu
1046 .de )l \" *** end list
1049 .sp \\n(bsu+\\n(.Lv-1v
1054 .\" *** PREPROCESSOR SUPPORT ***
1060 .de EQ \" *** equation start
1061 .do if \\n[need_eo_h]>0 .do DEVTAG-EO-H
1067 . if "\\n(.z"|e" .tm Line \\n(c. -- Nested .EQ request
1068 . @D 1 "\\$1" "\\$2"
1077 .de EN \" *** equation end
1090 . @q\" \" actual equation output
1096 .de @q \" --- equation output
1099 .sp \\n(esu \" output rest of preceeding text
1100 .if !"\\n(.z"" \!.ne \\n(_Qu
1101 .ne \\n(_Qu+\n(.Vu \" keep it on one page
1102 .@C 2\" \" .ev 2 may be jumbled from header
1104 . in (\\n(.lu+\\n($iu-\\n(dlu)/2u
1108 . in \\n(biu+\\n($iu
1112 .if \n@>1 .tm --@e: _Q=\\n(_Q _q=\\n(_q nl=\\n(nl |p=\\*(|p
1116 . sp (\\n(_Qu-\\n(.vu)/2u
1121 .sp |\\n(_qu+\\n(_Qu
1122 .sp \\n(esu+\\n(.Lv-1v
1130 .de TS \" *** table start
1134 .fi \" drop into fill mode for text boxes
1137 . di |h \" save header part
1141 .ch @f -(\\n(_bu+1v) \" set pseudo-trap for bottom line
1142 .if \\n(.p-\\n(_b-1v<=\\n(nl \
1143 . ch @f \\n(nlu+\n(.Vu
1146 .de TH \" *** end header part of table
1156 .|h\" \" put in the initial header
1162 .de TE \" *** table end
1164 .ch @f -\\n(_bu \" reset pseudo-trap
1165 .if \\n(.p-\\n(_b<=\\n(nl \
1166 . ch @f \\n(nlu+\n(.Vu
1169 .sp \\n(bsu+\\n(.Lv-1v
1179 .de ][ \" *** refer output
1180 .if \\$1>5 .tm Bad arg to []
1187 .if !"\\*([A"" \\*([A,
1188 .if !"\\*([T"" \\f2\\*([T\\f1\c
1189 .if !"\\*([T"" .if !"\\*([O"" ,\ \"
1190 .ie !"\\*([O"" \\*([O
1191 .el .if !"\\*([T"" \&.
1192 .if !"\\*([D"" \\*([D.
1197 .de [1 \" --- journal article
1201 .if !"\\*([T"" \\*(lq\\*([T,\\*(rq
1202 .if "\\*([V"" \\f2\\*([J\\f1,
1203 .if !"\\*([V"" \\f2\\*([J\\f1
1204 .if !"\\*([V"" \\f3\\*([V\\f1\c
1205 .if !"\\*([N"" (\\*([N)\c
1208 . ie \\n([P>0 \ pp.\&
1212 .if !"\\*([I"" .if "\\*([R"" \\*([I,
1214 .if !"\\*([O"" \\*([O
1221 \\*([A, \\f2\\*([T,\\f1
1223 .if !"\\*([C"" , \\*([C\c
1225 .if !"\\*([G"" Gov't. ordering no. \\*([G
1226 .if !"\\*([O"" \\*([O
1230 .de [3 \" --- article in book
1233 \\*([A, \\*(lq\\*([T,\\*(rq
1234 .if !"\\*([P"" pp. \\*([P
1235 in \\f2\\*([B\\f1, \c
1236 .if !"\\*([E"" ed. \\*([E, \c
1237 .if !"\\*([I"" \\*([I\c
1238 .if !"\\*([C"" , \\*([C\c
1240 .if !"\\*([O"" \\*([O
1244 .de [4 \" --- report
1247 \\*([A, \\*(lq\\*([T,\\*(rq
1249 .if !"\\*([G"" \& (\\*([G)\c
1250 .if !"\\*([I"" , \\*([I\c
1251 .if !"\\*([C"" , \\*([C\c
1253 .if !"\\*([O"" \\*([O
1257 .de [5 \" --- tm style
1260 \\*([A, \\f2\\*([T\\f1,
1262 .el Bell Laboratories internal memorandum (\\*([D).
1277 .rm [V [P [A [T [N [C [B [O [R [I [E [D
1282 . ds [. \s-2\v'-.4m'\f1
1283 . ds .] \v'.4m'\s+2\fP
1294 .de IS \" *** start ideal picture
1304 .de IE \" *** end ideal picture
1312 .de PS \" *** start picture: $1=height, $2=width in units or inches
1316 .in (u;\\n(.l-\\n(g7>?0/2)
1322 .de PE \" *** end picture
1333 .de GS \" *** start gremlin picture
1336 . ie "\\$1"L" .do HTML-IMAGE-LEFT
1337 . el .ie "\\$1"R" .do HTML-IMAGE-RIGHT
1342 . nr g7 (\\n(.lu-\\n(g1u)/2u
1343 . if "\\$1"L" .nr g7 \\n(.iu
1344 . if "\\$1"R" .nr g7 \\n(.lu-\\n(g1u
1353 .de GE \" *** end gremlin picture
1354 .ie '\*(.T'html' .do HTML-IMAGE-END
1362 .de GF \" *** finish gremlin picture; stay at top
1369 .\" *** FONT AIDS ***
1372 .de sz \" *** set point size and vertical spacing
1375 .vs \\n(.sp*\\n($vu/100u \" default vs at pointsize + 20%
1378 .de @v \" --- possibly set $v from $r
1379 .if (1i>=240u)&(1p<=\\n($r)&(\\n($r<=4p) .nr $v \\n($r00/1p
1382 .de @V \" --- possibly set $V from $R
1383 .if (1i>=240u)&(1p<=\\n($R)&(\\n($R<=4p) .nr $V \\n($R00/1p
1386 .de @E \" --- store in _F argument to \f for restoring font
1391 . ie \\n(.f<100&\n(.g \
1398 .de r \" *** enter roman font
1399 .do check_need_title
1402 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1403 .do check_need_title
1406 .de i \" *** enter italic
1407 .do check_need_title
1410 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1411 .do check_need_title
1414 .de b \" *** enter boldface
1415 .do check_need_title
1418 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1419 .do check_need_title
1422 .de rb \" *** enter real boldface
1423 .do check_need_title
1426 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1427 .do check_need_title
1430 .de bi \" *** enter bold italic
1431 .do check_need_title
1434 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1435 .do check_need_title
1438 .de u \" *** enter underlined word
1439 \&\\$1\l'|0\(ul'\\$2
1442 .\" a better version of u
1445 \Z'\\$1'\v'.25m'\D'l \w'\\$1'u 0'\v'-.25m'\\$2
1448 .de q \" *** enter quoted word
1449 \&\\*(lq\\$1\\*(rq\\$2
1452 .de bx \" *** enter boxed word
1453 .ie '\*(.T'html' \\$1\\$2
1454 .el \k~\(br\|\\$1\|\(br\l'|\\n~u\(rn'\l'|\\n~u\(ul'\^\\$2
1457 .de sm \" *** print in smaller font
1461 .de @F \" --- change font (0 -> no change)
1469 .\" *** FOOTNOTING ***
1472 .de (f \" *** begin footnote
1474 .if "\\n(.z"|f" .tm Line \\n(c. -- Invalid footnote nesting
1482 . xl \\n($lu-\\n(fuu
1485 . vs \\n(.sp*\\n($Vu/100u
1488 . nr _b +1v \" allow space for $s
1492 . if \\n(.p-\\n(_b-\\n(_0-\\n(.h-1v-\\n(fs<0 \
1494 . da\" \" won't fit on page at all
1499 .\" next five lines could be dropped if headers had their own environment
1500 . in 0 \" reset everything from .bc
1501 . xl \\n($lu-\\n(fuu
1504 . vs \\n(.sp*\\n($Vu/100u
1515 . if \n@>2 .tm << (f $f=\\n($f
1521 . xl \\n($lu-\\n(fuu
1524 . vs \\n(.sp*\\n($Vu/100u
1531 .de @N \" --- set no fill mode in the top-level diversion
1536 .de )f \" *** end footnote
1541 . ds * \\*{\\n($f\\*}\k*
1546 . if \\n(_w<\\n(dl \
1547 . nr _w \\n(dl \" compute maximum fn width
1550 . if \\n(.p-\\n(_b<=\\n(nl \
1551 . ch @f \\n(nlu+\n(.Vu
1565 . nr ff 1 \" footnote font: Times Roman
1568 . nr fp 8 \" footnote pointsize
1570 .de $s \" $$$ footnote separator
1575 .\" *** DELAYED TEXT ***
1578 .de (d \" *** begin delayed text
1583 .de )d \" *** end delayed text
1590 .de pd \" *** print delayed text
1598 .\" *** INDEXES (TABLE OF CONTENTS) ***
1605 .de (x \" *** begin index entry
1606 .if \n@>4 .tm >> (x, .z=\\n(.z
1617 .de @0 \" --- finish (x if no current diversion
1623 .de @1 \" --- finish (x if current diversion
1624 .if "\\n(_x"z" .nr _x 0
1628 .de )x \" *** end index entry
1629 .if \n@>4 .tm >> )x, .z=\\n(.z
1638 . if \w"\\$2">(\\n(.l-\\n(.i-\\n(.k) \
1640 \\\\a\\\\t\\$2\\*(|x
1654 .de xp \" *** print the index
1658 .vs \\n(.sp*\\n($Vu/100u
1664 .xl -(\\n(xuu+\w'...'u)
1675 .ta \\n(.lu-\\n(xuuR \\n(.luR
1683 .\" *** HTML VERSIONS OF .x(, .x), AND .xp ***
1686 .de (x-html \" --- create TAG and divert text
1695 .de )x-html \" --- end diversion
1700 .de xp-html \" --- create list of links
1706 .do while \\n[_xx]<=\\n[_xn] \
1709 . do unformat |x\\n[_xx]
1717 . do asciify xp-html-div
1719 . do as xp-html-as #
1720 . do as xp-html-as _x\\n[_xx]
1723 . do URL \\*[xp-html-as] "\\*[xp-html-div]
1743 .\" *** CHAPTERS AND TITLES ***
1746 .de +c \" *** begin chapter
1747 .ep\" \" force out footnotes
1750 . bp \" force out a table or more footnote
1760 .in \\n($iu \" reset the indent
1768 .de ++ \" *** declare chapter type
1771 . nr _0 1 \" chapter
1773 . nr _0 11 \" renumbered chapter
1775 . nr _0 2 \" appendix
1777 . nr _0 12 \" renumbered appendix
1779 . nr _0 3 \" preliminary material
1781 . nr _0 4 \" bibliographic material
1783 . nr _0 5 \" abstract
1785 . tm Line \\n(c. -- Bad mode to .++
1793 .if (\\n(_0=3):(\\n(_0=5) \
1794 . pn 1 \" must do before .ep
1795 .if !\\n(_0=\\n(_M .if \\n(_M=3 \
1796 . pn 1 \" must do before .ep
1797 .ep\" \" end page for correct page number types
1820 .de $c \" $$$ print chapter title
1826 .ie \\n(_M=1 CHAPTER\ \ \\n(ch
1827 .el .if \\n(_M=2 APPENDIX\ \ \\n(ch
1828 .if \w"\\$1" .sp 3-\\n(.L
1830 .if (\\n(_M<3):(\w"\\$1") \
1836 . $C Chapter \\n(ch "\\$1"
1838 . $C Appendix \\n(ch "\\$1"
1841 .de tp \" *** title page
1850 .if \n(mo=1 .ds mo January
1851 .if \n(mo=2 .ds mo February
1852 .if \n(mo=3 .ds mo March
1853 .if \n(mo=4 .ds mo April
1854 .if \n(mo=5 .ds mo May
1855 .if \n(mo=6 .ds mo June
1856 .if \n(mo=7 .ds mo July
1857 .if \n(mo=8 .ds mo August
1858 .if \n(mo=9 .ds mo September
1859 .if \n(mo=10 .ds mo October
1860 .if \n(mo=11 .ds mo November
1861 .if \n(mo=12 .ds mo December
1862 .if \n(dw=1 .ds dw Sunday
1863 .if \n(dw=2 .ds dw Monday
1864 .if \n(dw=3 .ds dw Tuesday
1865 .if \n(dw=4 .ds dw Wednesday
1866 .if \n(dw=5 .ds dw Thursday
1867 .if \n(dw=6 .ds dw Friday
1868 .if \n(dw=7 .ds dw Saturday
1872 .ds td \*(mo \n(dy, \n(y4
1875 .\" *** PARAMETRIC INITIALIZATIONS ***
1879 .nr $v \n(.v00+\n(.sp-1/\n(.sp \" vs as percentage of ps for .sz request
1880 .nr $V \n($v \" same for displays & footnotes
1881 .nr hm 4v \" header margin
1882 .nr tm 7v \" top margin
1883 .nr bm 6v \" bottom margin
1884 .nr fm 3v \" footer margin
1885 .nr tf 3 \" title font: (real) Times Bold
1886 .nr tp 10 \" title point size
1888 .nr bi 4m \" indent for blocks
1889 .nr pi 5n \" indent for paragraphs
1890 .nr pf 1 \" normal text font
1891 .nr pp 10 \" normal text point size
1892 .nr qi 4n \" indent for quotes
1893 .nr qp -1 \" down one point
1894 .nr ii 5n \" indent for .ip's and .np's
1895 .nr $m 1 \" max number of columns
1896 .nr $s 4n \" column separation
1897 .nr sf 3 \" section font -- Times Bold
1898 .nr sp 10 \" section title pointsize
1899 .nr ss 12p \" section prespacing
1900 .nr si 0 \" section indent
1903 .\" *** OTHER INITIALIZATION ***
1906 .\" GNU pic sets this register to 1, to indicate that \x should not be used.
1908 .ds { \v'-0.4m'\x'\\n(0x=0*-0.2m'\s-3
1910 .\" for compatibility with traditional -me
1911 .\" (the first will work only in compatibility mode)
1914 .ds < \v'0.4m'\x'\\n(0x=0*0.2m'\s-3
1917 .\" Avoid warnings from groff -ww.
1935 .@R po\" \" simulated page offset
1936 .@R $0\" \" section depth
1937 .@R $i\" \" paragraph base indent
1938 .@R $p\" \" numbered paragraph number
1939 .@R $r\" \" ratio of vs to ps (may override $v)
1940 .@R $R\" \" same for displays (may override $V)
1941 .@R df\" \" display font: same as surrounding text
1942 .@R so\" \" additional section title offset
1943 .@R fu\" \" footnote undent
1944 .@R bt\" \" block keep threshold
1945 .@R *\" \" has \** been referenced?
1946 .@R ?a\" \" pending floating keep at page top?
1947 .@R ?b\" \" pending floating keep at page bottom?
1948 .@R ?C\" \" at chapter header?
1949 .@R ?e\" \" in equation?
1950 .@R ?H\" \" suppress headers and footers next page?
1951 .@R ?I\" \" has the header trap been sprung?
1952 .@R ?n\" \" n1 mode?
1953 .@R ?o\" \" footnote overflow?
1954 .@R ?R\" \" renumbered chapter?
1955 .@R ?s\" \" skip next page?
1956 .@R ?T\" \" inside .TS H?
1957 .@R ?W\" \" wide floating keep at page bottom?
1958 .@R ?w\" \" wide floating keep at page top?
1964 .if \n(ps<\n(.V .nr ps \n(.V
1965 .nr bs \n(ps \" block pre/post spacing
1966 .nr qs \n(ps \" quote pre/post spacing
1967 .nr zs 1v \" float-block pre/postspacing
1968 .nr xs 0.2v \" index prespacing
1969 .nr xu 0.5i \" index undent
1970 .nr fs 0.2v \" footnote prespacing
1971 .nr es 0.5v \" equation pre/postspacing
1972 .if \n(es<\n(.V .nr es \n(.V
1973 .wh 0 @h \" set header
1974 .nr $l \n(.lu \" line length
1975 .nr _L \n(.lu \" line length of page
1976 .nr $c 1 \" current column number
1977 .nr $f 1 1 \" footnote number
1978 .ds * \*{1\*}\k*\" \" footnote "name"
1979 .nr $d 1 1 \" delayed text number
1980 .ds # [1]\k#\" \" delayed text "name"
1981 .nr _M 1 \" chapter mode is chapter
1982 .ds lq \(lq\" \" left quote
1983 .ds rq \(rq\" \" right quote
1987 .\" *** FOREIGN LETTERS AND SPECIAL CHARACTERS ***
1990 .ds #h ((1u-(\\\\n(.fu%2u))*0.13m)
1994 .ds ' \k_\h'-(\\n(.wu*8/10-\*(#h)'\(aa\h'|\\n_u'
1995 .ds ` \k_\h'-(\\n(.wu*7/10-\*(#h)'\(ga\h'|\\n_u'
1998 .ds : \k_\h'-(\\n(.wu*8/10-\*(#h+0.1m)'\v'-\*(#v'\z.\h'0.2m'.\h'|\\n_u'\v'\*(#v'
2000 .\" \" circumflex and tilde
2001 .ds ^ \k_\h'-(\\n(.wu-\*(#h-0.05m)'^\h'|\\n_u'
2002 .ds ~ \k_\h'-(\\n(.wu-\*(#h-0.05m)'~\h'|\\n_u'
2004 .\" \" cedilla and czech
2005 .ds , \k_\h'-(\\n(.wu)',\h'|\\n_u'
2006 .ds v \k_\h'-(\\n(.wu*9/10-\*(#h)'\v'-\*(#v'\s-4v\s0\v'\*(#v'\h'|\\n_u'
2008 .\" \" Norwegian A or angstrom
2009 .ds o \k_\h'-(\\n(.wu+\w'\(de'u-\*(#h)/2u'\v'-0.4n'\z\(de\v'0.4n'\h'|\\n_u'
2011 .\" \" there exists, for all
2012 .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'
2013 .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'
2019 .tm The \\$1 macro has been removed from this version of the -me macros.