3 .\" @(#)e.tmac 2.31 (Berkeley) 5/21/88
4 .\" Modified by James Clark for use with groff.
6 .\" Copyright (c) 1988 Regents of the University of California.
7 .\" All rights reserved.
9 .\" Redistribution and use in source and binary forms are permitted
10 .\" provided that this notice is preserved and that due credit is given
11 .\" to the University of California at Berkeley. The name of the University
12 .\" may not be used to endorse or promote products derived from this
13 .\" software without specific prior written permission. This software
14 .\" is provided ``as is'' without express or implied warranty.
17 .\"**********************************************************************
19 .\"* ****** - M E N R O F F / T R O F F M A C R O S ****** *
21 .\"* Produced for your edification and enjoyment by: *
23 .\"* Electronics Research Laboratory *
25 .\"* current address: *
26 .\"* Britton-Lee, Inc. *
27 .\"* 1919 Addison Street Suite 105 *
28 .\"* Berkeley, California 94704 *
30 .\"* VERSION 2.31 First Release: 11 Sept 1978 *
32 .\"* Documentation is available. *
34 .\"**********************************************************************
36 .\" Code on .de commands:
37 .\" *** a user interface macro.
38 .\" &&& a user interface macro which is redefined
39 .\" when used to be the real thing.
40 .\" $$$ a macro which may be redefined by the user
41 .\" to provide variant functions.
42 .\" --- an internal macro.
52 .de @R \" --- initialize number register to 0, if undefined
56 .\" --- check whether grohtml needs end of title/heading
57 .de @html_check_need_title
58 .do if (\\n[need_eo_tl] == 1) \
63 .do if (\\n[need_tl] == 1) \
69 .do if \\n[need_eo_h]>0 .do DEVTAG-EO-H
77 . do als check_need_title @html_check_need_title
79 . do als check_need_title @check_need_title
85 .de @S \" --- initialize string/macro to empty, if undefined
86 .if !d\\$1 .ds \\$1 \" empty
89 .@R @\" \" debugging level
92 .\" *** INTERNAL GP MACROS ***
95 .de @C \" --- change ev's, taking info with us
120 .de @D \" --- determine display type (Indent, Left, Center)
139 .de @z \" --- end macro
140 .if \n@>1 .tm >> @z, .z=\\n(.z ?a=\\n(?a
143 . tm Line \\n(c. -- Unclosed block, footnote, or other diversion (\\n(.z)
148 . bp \" force out final table
150 .ds @b\" \" don't start another page
156 .\" *** STANDARD HEADERS AND FOOTERS ***
159 .ie \n(.g .ds $* \\\\$*
160 .el .ds $* \\\\$1 \\\\$2 \\\\$3 \\\\$4 \\\\$5 \\\\$6 \\\\$7 \\\\$8 \\\\$9
162 .de he \" *** define header
175 .de eh \" *** define even header
182 .de oh \" *** define odd header
189 .de fo \" *** define footer
202 .de ef \" *** define even foot
209 .de of \" *** define odd footer
216 .de ep \" *** end page (must always be followed by a .bp)
226 .\" *** INTERNAL HEADER AND FOOTER MACROS ***
230 .if \n@>1 .tm >> @h %=\\n% ?a=\\n(?a ?b=\\n(?b ?w=\\n(?w
231 .if (\\n(.i+\\n(.o)>=\\n(.l \
232 . tm Line \\n(c. -- Offset + indent exceeds line length
233 .\" initialize a pile of junk
234 .nr ?h \\n(?H \" transfer "next page" to "this page"
242 .nr _w 0 \" reset max footnote width
243 .nr ?W 0 \" no wide floats this page (yet)
245 .\" begin actual header stuff
250 . sp |\\n(hmu \" move to header position
251 .@t $h\" \" output header title
255 . sp |\\n(tmu \" move to top of text
257 .mk _k \" for columned output
258 .if \\n(?n=1 .nm 1 \" restore line numbering if n1 mode
259 .nr $c 1 \" set first column
260 .if \n@>4 .tm -- @h >> .ns nl=\\n(nl %=\\n% _k=\\n(_k tm=\\n(tm
268 . @n\" \" begin the column
272 .de @n \" --- new column or page
273 .if \n@>3 .tm >> @n nl=\\n(nl %=\\n% ?f=\\n(?f ?o=\\n(?o
276 .if (\\n(_w<=\\n($l)&(\\n(?W=0) \
278 . nr _b (\\n(ppp*\\n($vu)/200u \" compute fudge factor (must be < 1P)
279 . if \\n(_bu>((\\n(bmu-\\n(fmu-((\\n(tpp*\\n($vu)/100u))/2u) \
280 . nr _b (\\n(ppp*\\n($vu)/100u-\n(.Vu
286 .nr _b +(\\n(ppp*\\n($vu)/100u \" add 1 paragraph v in case of sweep past
287 .if \n@>2 .tm @n .p=\\n(.p bm=\\n(bm _b=\\n(_b _B=\\n(_B
288 .nr ?f 0 \" reset footnote flag
291 . (f _\" \" reprocess footnotes which run off page
305 . |h\" \" output the table header
310 . mk #T \" for tbl commands
313 .if (\\n(?a)&((\\n($c<2):(\\n(?w=0)) \
315 . nr ?a 0 \" output floating keep
318 . mk _k \" don't overstrike wide keeps
322 .$H\" \" special column header macro
327 .if \n@>1 .tm >> @f %=\\n% nl=\\n(nl ?a=\\n(?a ?b=\\n(?b ?f=\\n(?f
328 .if \n@>2 .nr VL \\n(.pu-\\n(nlu
329 .if \n@>2 .tm @f bm=\\n(bm _B=\\n(_B _b=\\n(_b .p-nl=\\n(VL
333 . nr T. 1 \" for tbl commands (to output bottom line)
334 . T# 1\" \" output the sides and bottom lines
342 . @k |b\" \" output bottom of page tables
345 . @o\" \" output footnote if present
347 . @c\" \" handle new column
354 .de @o \" --- output footnote
358 .if \n@>2 .tm @o last printed text = \\n(nl placing @r trap at -\\n(_B
366 .if \n@>2 .tm @o triggered @r (?o) = \\n(?o
369 . di \" just in case triggered @r
382 .de @c \" --- new column
383 .if \n@>2 .tm >> @c %=\\n%
391 .de @e \" --- end page
395 .sp |\\n(.pu-\\n(fmu-((\\n(tpp*\\n($vu)/100u) \" move to footer position
396 .@t $f\" \" output footer title
401 .de @t \" --- output header or footer title
404 . sz \\n(tp\" \" set header/footer type fonts, etc.
406 . lt \\n(_Lu \" make title span entire page
417 .de $h \" $$$ print header
421 . if e .ds |z "\\*(|0
422 . if o .ds |z "\\*(|1
424 .if !\(ts\\*(|z\(ts\(ts \
429 .de $f \" $$$ print footer
433 . if e .ds |z "\\*(|0
434 . if o .ds |z "\\*(|1
436 .if \(ts\\*(|z\(ts\(ts \
438 . if e .ds |z "\\*(|2
439 . if o .ds |z "\\*(|3
441 .if !\(ts\\*(|z\(ts\(ts \
446 .de @r \" --- reprocess overflow footnotes
447 .if \n@>3 .tm >> @r .z=\\n(.z ?f=\\n(?f ?a=\\n(?a ?b=\\n(?b _b=\\n(_b
448 .di |o \" save overflow footnote
455 .\" *** COMMANDS WITH VARIANT DEFINITIONS ***
458 .if !'\*(.T'html' .rn bp @b \" --- begin page
460 .de bp \" *** begin new page (overrides columns)
461 .nr $c \\n($m \" force new page, not new column
469 . @h\" \" 'spring' the header trap
472 .wh 0 @h \" reset header
475 .rn ll xl \" *** special line length (local)
476 .de ll \" *** line length (global to environments)
480 .if (\\n($m<=1):(\\n($l>\\n(_L) \
484 .rn po @O \" --- local page offset
486 .de po \" *** page offset
491 .\" Redefine the fam request to set the family in
492 .\" environment 2 as well as the current environment.
494 .do rn fam @fam \" --- set family in current environment
495 .do de fam \" *** set font family in ev 2 and current ev
503 .\" *** MISCELLANEOUS ROFF COMMANDS ***
506 .de hx \" *** suppress headers and footers next page
510 .de ix \" *** indent, no break
514 .de bl \" *** contiguous blank lines
520 .de @s \" --- diversion-surviving space test
523 .if !'\\n(.z'' \!.@s \\$1
526 .de n1 \" *** line numbering 1
532 .de n2 \" *** line numbering 2
543 . do substring |i 0 0 \" pick off leading char and rest to check
544 . do substring |j 1 \" for +N / -N
546 . nr ln (\\n[_ln])+\\*(|j
549 . nr ln (\\n[_ln])-\\*(|j
551 . nr ln \\$1 \" unsigned N
557 . tm Line \\n(.c -- Bad .n2 value
570 .de pa \" *** new page
574 .de ro \" *** roman page numbers
578 .de ar \" *** arabic page numbers
582 .de m1 \" *** position one space
585 .nr tm +\\n(hmu-\\n(_0u
589 .de m2 \" *** position two space
590 .nr tm \\n(hmu+\\n(tpp+\\$1v
593 .de m3 \" *** position three space
594 .nr bm \\n(fmu+\\n(tpp+\\$1v
597 .de m4 \" *** position four space
600 .nr bm +\\n(fmu-\\n(_0u
603 .de sk \" *** leave a blank page (next page)
605 . tm Line \\n(c. -- I cannot skip multiple pages
610 .\" *** MISCELLANEOUS USER SUPPORT COMMANDS ***
614 .de re \" *** reset tabs (TROFF defines 15 stops default)
620 .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
623 .de ba \" *** set base indent
627 . nr $i \\n(siu*\\n($0u
630 .de hl \" *** draw horizontal line
637 .ie \n(.g .do nr _I \\n[.in]
644 .\" *** PARAGRAPHING ***
647 .de pp \" *** paragraph
651 .de lp \" *** left aligned paragraph
658 .de ip \" *** indented paragraph w/ optional tag
659 .if (\\n(ii>0)&(\\n(ii<1n) \
676 . ie \\w"\\*(|j">=\\n(_0 \
680 . do DEVTAG-COL-NEXT 2
695 .de np \" *** numbered paragraph
696 .\" use string comparison in case user has changed format of $p
698 . nr $p 0 \" reset number after .bu
699 .nr $p +1 \" increment paragraph number
702 \0(\\n($p)\h'|\w'\0(000)\0'u'\c
705 .de bu \" *** bulleted paragraph
707 .\" use string comparison in case user has changed format of $p
709 . ns \" don't space between .bu paragraphs
710 .nr $p 0-1 \" mark "bulleted paragraph" mode
716 .de @p \" --- initialize for paragraph
718 .if "\\n(.z"|e" .tm Line \\n(c. -- Unmatched continued equation
732 .\" *** SECTION HEADINGS ***
735 .de sh \" *** section heading
738 .if (\\n(si>0)&(\\n(si<1n) \
740 .if '\*(.T'html' .nr si 0
747 .@d "\\$1" +1 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
751 . $p "\\*(|n" "\\*($n" \\n($0
752 . $0 "\\*(|n" "\\*($n" \\n($0
755 .nr $p 0 1 \" reset .np count
758 .de @d \" --- change section depth
761 .if \\n($0&(\\n(.$>1) \
768 . if (\\n(.$>=3) .if !"\\$3"-" \
778 . if (\\n(.$>=4) .if !"\\$4"-" \
788 . if (\\n(.$>=5) .if !"\\$5"-" \
798 . if (\\n(.$>=6) .if !"\\$6"-" \
808 . if (\\n(.$>=7) .if !"\\$7"-" \
818 . if (\\n(.$>=8) .if !"\\$8"-" \
826 .de sx \" *** heading up, no increment (2.1.1 -> 2.1)
831 .if \\n(.$ .nr _0 \\$1
835 .nr $p 0 1 \" reset .np count
838 .de uh \" *** unnumbered section heading
843 .de $p \" $$$ print section heading
844 .if (\\n(si>0)&(\\n(.$>2) \
849 . sp \\n(ssu \" one of them is non-null
850 . ne \\n(.Lv+\\n(.Vu+\\n(psu+((\\n(spp*\\n($vu*\\n(.Lu)/100u)
851 . \" exdent if \\$3 > 0
853 . ti -(\\n(siu-\\n(sou)
860 . if \w"\\$2">0 \\$2.
861 . if \w"\\$1">0 \\$1\f1\ \ \&
870 .\" *** COLUMNED OUTPUT ***
873 .de 2c \" *** double columned output
876 . 1c\" \" revert to 1c if already 2c
882 . nr $s \\$1n \" param 1: column separation
883 .nr $l (\\n(.l-((\\n($m-1)*\\n($s))/\\n($m
889 .de 1c \" *** single columned output
893 .ll \\n(_Lu \" return to normal output
898 .de bc \" *** begin column
903 .\" *** FLOATING TABLES AND NONFLOATING BLOCKS ***
906 .de (z \" *** begin floating keep
907 .if \n@>4 .tm >> (z, .z=\n(.z
912 .de )z \" *** end floating keep
913 .if \n@>4 .tm >> )z, .z=\n(.z
916 .if \n@>4 .tm -- )z << @), .z=\n(.z
919 . nr dn +(\\n(ppp*\\n($vu)/200u+\\n(zsu
920 .nr dl -\n(.H \" fudge factor necessary to make it work
921 .ie ((\\n(dn+\n(.V)>=\\n(.t):(\\n(?a):((\\n(dl>\\n($l)&(\\n($c>1)) \
924 . if (\\n(dl>\\n($l)&(\\n($m>1) \
925 . nr ?w 1 \" mark wider than one column (top)
931 . if (\\n(dl>\\n($l)&(\\n($m>1) \
932 . nr ?W 1 \" mark wider than one column (bottom)
934 . \" avoid moving @f back past the current position
935 . if \\n(.p-\\n(nl-\n(.V<\\n(_b \
936 . nr _b \\n(.p-\\n(nl-\n(.V
940 .da \\*(|x \" copy to save macro
944 .if \n@>4 .tm -- )z >> \\*(|x
945 \!.if \\\\n(nl>(\\\\n(tm+2v) .ne \\n(dnu-\\n(zsu
946 .|k\" \" and the body
948 .if \n@>4 .tm -- )z << \\*(|x, .z=\\n(.z
950 .rm |k\" \" remove the temp macro
956 .if \n@>4 .tm << )z, .z=\\n(.z
959 .de @k \" --- output floating keep
960 .if \n@>4 .tm >> @k, $1=\\$1, .z=\\n(.z
977 .de (t \" XXX temp ref to (z
981 .de )t \" XXX temp ref to )t
985 .de (b \" *** begin block
990 .if '\*(.T'html' .sp \\n(bsu
993 .de )b \" *** end block
996 .if (\\n(bt=0):(\\n(.t<\\n(bt) \
997 . ne \\n(dnu \" make it all on one page
999 .ev \" return from display environment
1000 .sp \\n(bsu+\\n(.Lv-1v
1003 .de @( \" --- begin keep
1004 .if !"\\n(.z"" .tm Line \\n(c. -- Invalid nested keep \\n(.z
1010 .de @M \" --- set modes for display
1015 .vs \\n(.sp*\\n($Vu/100u
1018 . fi \" set fill mode if "F" parameter
1030 .de @) \" --- end keep
1032 .if !"\\n(.z"|k" .tm Line \\n(c. -- Close of a keep which has never been opened
1039 .de (c \" *** begin block centered text
1041 .if "\\n(.z"|c" .tm Line \\n(c. -- Nested .(c requests
1046 .de )c \" *** end block centered text
1047 .if !"\\n(.z"|c" .tm Line \\n(c. -- Unmatched .)c
1048 .br \" force out final line
1050 .if \n@>4 .tm >> .)c .l=\\n(.l .i=\\n(.i $i=\\n($i dl=\\n(dl
1053 .in (\\n(.lu-\\n(.iu-\\n(dlu)/2u
1054 .if \n@>4 .tm -- .)c << .in .l=\\n(.l .i=\\n(.i dl=\\n(dl
1069 .\" *** BLOCK QUOTES (OR WHATEVER) AND LISTS ***
1072 .de (q \" *** begin block quote
1084 .de )q \" *** end block quote
1089 .sp \\n(qsu+\\n(.Lv-1v
1093 .de (l \" *** begin list
1100 .if '\*(.T'html' .sp \\n(bsu
1103 .de )l \" *** end list
1108 .sp \\n(bsu+\\n(.Lv-1v
1113 .\" *** PREPROCESSOR SUPPORT ***
1119 .de EQ \" *** equation start
1120 .do if \\n[need_eo_h]>0 .do DEVTAG-EO-H
1125 . do nr e-EQ-ll \\n(.l
1131 . if "\\n(.z"|e" .tm Line \\n(c. -- Nested .EQ request
1132 . @D 1 "\\$1" "\\$2"
1141 .de EN \" *** equation end
1145 . do ll \\n[e-EQ-ll]u
1156 . @q\" \" actual equation output
1162 .de @q \" --- equation output
1165 .sp \\n(esu \" output rest of preceding text
1166 .if !"\\n(.z"" \!.ne \\n(_Qu
1167 .ne \\n(_Qu+\n(.Vu \" keep it on one page
1168 .@C 2\" \" .ev 2 may be jumbled from header
1170 . in (\\n(.lu+\\n($iu-\\n(dlu)/2u
1174 . in \\n(biu+\\n($iu
1178 .if \n@>1 .tm --@e: _Q=\\n(_Q _q=\\n(_q nl=\\n(nl |p=\\*(|p
1182 . sp (\\n(_Qu-\\n(.vu)/2u
1191 .sp |\\n(_qu+\\n(_Qu
1192 .sp \\n(esu+\\n(.Lv-1v
1200 .de TS \" *** table start
1204 . do nr e-TS-ll \\n(.l
1209 .fi \" drop into fill mode for text boxes
1212 . di |h \" save header part
1216 .ch @f -(\\n(_bu+1v) \" set pseudo-trap for bottom line
1217 .if \\n(.p-\\n(_b-1v<=\\n(nl \
1218 . ch @f \\n(nlu+\n(.Vu
1221 .de TH \" *** end header part of table
1231 .if \\n(?n .nm \\n(ln
1233 .|h\" \" put in the initial header
1239 .de TE \" *** table end
1241 .ch @f -\\n(_bu \" reset pseudo-trap
1242 .if \\n(.p-\\n(_b<=\\n(nl \
1243 . ch @f \\n(nlu+\n(.Vu
1247 . do ll \\n[e-TS-ll]u
1248 .sp \\n(bsu+\\n(.Lv-1v
1263 .de IS \" *** start ideal picture
1273 .de IE \" *** end ideal picture
1281 .de PS \" *** start picture: $1=height, $2=width in units or inches
1285 .in (u;\\n(.l-\\n(g7>?0/2)
1291 . de PS_nm_check && \" define macro to emit .nm at top diversion
1292 . if \n@>4 .tm -- PS: \\\\$1 \\\\$2 .z=\\\\n(.z PS_nm_cnt=\\\\n[PS_nm_cnt]
1293 . \" \" multiple .PS/.PE in a keep.
1294 . if `\\\\$2`init` \
1295 . do nr PS_nm_cnt \\\\n[PS_nm_cnt]+1
1298 . if `\\\\$1`suspend` \
1300 . if `\\\\$1`resume` \
1303 . do nr PS_nm_cnt \\\\n[PS_nm_cnt]-1
1304 . do if !\\\\n[PS_nm_cnt] \
1311 .el \!.PS_nm_check \\\\$1
1313 . mk _q \" emit a single numbered line for PS picture
1318 . PS_nm_check suspend init
1322 .de PE \" *** end picture
1323 .if \\n(?n .PS_nm_check resume
1334 .de GS \" *** start gremlin picture
1337 . ie "\\$1"L" .do HTML-IMAGE-LEFT
1338 . el .ie "\\$1"R" .do HTML-IMAGE-RIGHT
1343 . nr g7 (\\n(.lu-\\n(g1u)/2u
1344 . if "\\$1"L" .nr g7 \\n(.iu
1345 . if "\\$1"R" .nr g7 \\n(.lu-\\n(g1u
1354 .de GE \" *** end gremlin picture
1355 .ie '\*(.T'html' .do HTML-IMAGE-END
1363 .de GF \" *** finish gremlin picture; stay at top
1370 .\" *** FONT AIDS ***
1373 .de sz \" *** set point size and vertical spacing
1376 .vs \\n(.sp*\\n($vu/100u \" default vs at pointsize + 20%
1379 .de @v \" --- possibly set $v from $r
1380 .if (1i>=240u)&(1p<=\\n($r)&(\\n($r<=4p) .nr $v \\n($r00/1p
1383 .de @V \" --- possibly set $V from $R
1384 .if (1i>=240u)&(1p<=\\n($R)&(\\n($R<=4p) .nr $V \\n($R00/1p
1387 .de @E \" --- store in _F argument to \f for restoring font
1392 . ie \\n(.f<100&\n(.g \
1399 .de r \" *** enter roman font
1400 .do check_need_title
1403 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1404 .do check_need_title
1407 .de i \" *** enter italic
1408 .do check_need_title
1411 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1412 .do check_need_title
1415 .de b \" *** enter boldface
1416 .do check_need_title
1419 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1420 .do check_need_title
1423 .de rb \" *** enter real boldface
1424 .do check_need_title
1427 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1428 .do check_need_title
1431 .de bi \" *** enter bold italic
1432 .do check_need_title
1435 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1436 .do check_need_title
1439 .de u \" *** enter underlined word
1440 \&\\$1\l'|0\(ul'\\$2
1443 .\" a better version of u
1446 \Z'\\$1'\v'.25m'\D'l \w'\\$1'u 0'\v'-.25m'\\$2
1449 .de q \" *** enter quoted word
1450 \&\\*(lq\\$1\\*(rq\\$2
1453 .de bx \" *** enter boxed word
1454 .ie '\*(.T'html' \\$1\\$2
1455 .el \k~\(br\|\\$1\|\(br\l'|\\n~u\(rn'\l'|\\n~u\(ul'\^\\$2
1458 .de sm \" *** print in smaller font
1462 .de @F \" --- change font (0 -> no change)
1470 .\" *** FOOTNOTING ***
1473 .de (f \" *** begin footnote
1475 .if "\\n(.z"|f" .tm Line \\n(c. -- Invalid footnote nesting
1484 . xl \\n($lu-\\n(fuu
1487 . vs \\n(.sp*\\n($Vu/100u
1490 . nr _b +1v \" allow space for $s
1494 . if \\n(.p-\\n(_b-\\n(_0-\\n(.h-1v-\\n(fs<0 \
1496 . da\" \" won't fit on page at all
1501 .\" next five lines could be dropped if headers had their own environment
1502 . in 0 \" reset everything from .bc
1503 . xl \\n($lu-\\n(fuu
1506 . vs \\n(.sp*\\n($Vu/100u
1517 . if \n@>2 .tm << (f $f=\\n($f
1524 . xl \\n($lu-\\n(fuu
1527 . vs \\n(.sp*\\n($Vu/100u
1534 .de @N \" --- set no fill mode in the top-level diversion
1539 .de )f \" *** end footnote
1544 . ds * \\*{\\n($f\\*}\k*
1549 . if \\n(_w<\\n(dl \
1550 . nr _w \\n(dl \" compute maximum fn width
1553 . if \\n(.p-\\n(_b<=\\n(nl \
1554 . ch @f \\n(nlu+\n(.Vu
1568 . nr ff 1 \" footnote font: Times Roman
1571 . nr fp 8 \" footnote pointsize
1573 .de $s \" $$$ footnote separator
1578 .\" *** DELAYED TEXT ***
1581 .de (d \" *** begin delayed text
1586 .de )d \" *** end delayed text
1593 .de pd \" *** print delayed text
1601 .\" *** INDEXES (TABLE OF CONTENTS) ***
1608 .de (x \" *** begin index entry
1609 .if \n@>4 .tm >> (x, .z=\\n(.z
1620 .de @0 \" --- finish (x if no current diversion
1626 .de @1 \" --- finish (x if current diversion
1627 .if "\\n(_x"z" .nr _x 0
1631 .de )x \" *** end index entry
1632 .if \n@>4 .tm >> )x, .z=\\n(.z
1641 . if \w"\\$2">(\\n(.l-\\n(.i-\\n(.k) \
1643 \\\\a\\\\t\\$2\\*(|x
1657 .de xp \" *** print the index
1661 .vs \\n(.sp*\\n($Vu/100u
1667 .xl -(\\n(xuu+\w'...'u)
1678 .ta \\n(.lu-\\n(xuuR \\n(.luR
1686 .\" *** HTML VERSIONS OF .x(, .x), AND .xp ***
1689 .de (x-html \" --- create TAG and divert text
1698 .de )x-html \" --- end diversion
1703 .de xp-html \" --- create list of links
1709 .do while \\n[_xx]<=\\n[_xn] \
1712 . do unformat |x\\n[_xx]
1720 . do asciify xp-html-div
1722 . do as xp-html-as #
1723 . do as xp-html-as _x\\n[_xx]
1726 . do URL \\*[xp-html-as] "\\*[xp-html-div]
1746 .\" *** CHAPTERS AND TITLES ***
1749 .de +c \" *** begin chapter
1750 .ep\" \" force out footnotes
1753 . bp \" force out a table or more footnote
1763 .in \\n($iu \" reset the indent
1771 .de ++ \" *** declare chapter type
1774 . nr _0 1 \" chapter
1776 . nr _0 11 \" renumbered chapter
1778 . nr _0 2 \" appendix
1780 . nr _0 12 \" renumbered appendix
1782 . nr _0 3 \" preliminary material
1784 . nr _0 4 \" bibliographic material
1786 . nr _0 5 \" abstract
1788 . tm Line \\n(c. -- Bad mode to .++
1796 .if (\\n(_0=3):(\\n(_0=5) \
1797 . pn 1 \" must do before .ep
1798 .if !\\n(_0=\\n(_M .if \\n(_M=3 \
1799 . pn 1 \" must do before .ep
1800 .ep\" \" end page for correct page number types
1823 .de $c \" $$$ print chapter title
1829 .ie \\n(_M=1 CHAPTER\ \ \\n(ch
1830 .el .if \\n(_M=2 APPENDIX\ \ \\n(ch
1831 .if \w"\\$1" .sp 3-\\n(.L
1833 .if (\\n(_M<3):(\w"\\$1") \
1839 . $C Chapter \\n(ch "\\$1"
1841 . $C Appendix \\n(ch "\\$1"
1844 .de tp \" *** title page
1853 .if \n(mo=1 .ds mo January
1854 .if \n(mo=2 .ds mo February
1855 .if \n(mo=3 .ds mo March
1856 .if \n(mo=4 .ds mo April
1857 .if \n(mo=5 .ds mo May
1858 .if \n(mo=6 .ds mo June
1859 .if \n(mo=7 .ds mo July
1860 .if \n(mo=8 .ds mo August
1861 .if \n(mo=9 .ds mo September
1862 .if \n(mo=10 .ds mo October
1863 .if \n(mo=11 .ds mo November
1864 .if \n(mo=12 .ds mo December
1865 .if \n(dw=1 .ds dw Sunday
1866 .if \n(dw=2 .ds dw Monday
1867 .if \n(dw=3 .ds dw Tuesday
1868 .if \n(dw=4 .ds dw Wednesday
1869 .if \n(dw=5 .ds dw Thursday
1870 .if \n(dw=6 .ds dw Friday
1871 .if \n(dw=7 .ds dw Saturday
1875 .ds td \*(mo \n(dy, \n(y4
1878 .\" *** PARAMETRIC INITIALIZATIONS ***
1882 .nr $v \n(.v00+\n(.sp-1/\n(.sp \" vs as percentage of ps for .sz request
1883 .nr $V \n($v \" same for displays & footnotes
1884 .nr hm 4v \" header margin
1885 .nr tm 7v \" top margin
1886 .nr bm 6v \" bottom margin
1887 .nr fm 3v \" footer margin
1888 .nr tf 3 \" title font: (real) Times Bold
1889 .nr tp 10 \" title point size
1891 .nr bi 4m \" indent for blocks
1892 .nr pi 5n \" indent for paragraphs
1893 .nr pf 1 \" normal text font
1894 .nr pp 10 \" normal text point size
1895 .nr qi 4n \" indent for quotes
1896 .nr qp -1 \" down one point
1897 .nr ii 5n \" indent for .ip's and .np's
1898 .nr $m 1 \" max number of columns
1899 .nr $s 4n \" column separation
1900 .nr sf 3 \" section font -- Times Bold
1901 .nr sp 10 \" section title pointsize
1902 .nr ss 12p \" section prespacing
1903 .nr si 0 \" section indent
1906 .\" *** OTHER INITIALIZATION ***
1909 .\" GNU pic sets this register to 1, to indicate that \x should not be used.
1911 .ds { \v'-0.4m'\x'\\n(0x=0*-0.2m'\s-3
1913 .\" for compatibility with traditional -me
1914 .\" (the first will work only in compatibility mode)
1917 .ds < \v'0.4m'\x'\\n(0x=0*0.2m'\s-3
1920 .\" Avoid warnings from groff -ww.
1938 .@R po\" \" simulated page offset
1939 .@R $0\" \" section depth
1940 .@R $i\" \" paragraph base indent
1941 .@R $p\" \" numbered paragraph number
1942 .@R $r\" \" ratio of vs to ps (may override $v)
1943 .@R $R\" \" same for displays (may override $V)
1944 .@R df\" \" display font: same as surrounding text
1945 .@R so\" \" additional section title offset
1946 .@R fu\" \" footnote undent
1947 .@R bt\" \" block keep threshold
1948 .@R *\" \" has \** been referenced?
1949 .@R ?a\" \" pending floating keep at page top?
1950 .@R ?b\" \" pending floating keep at page bottom?
1951 .@R ?C\" \" at chapter header?
1952 .@R ?e\" \" in equation?
1953 .@R ?H\" \" suppress headers and footers next page?
1954 .@R ?I\" \" has the header trap been sprung?
1955 .@R ?n\" \" n1 mode?
1956 .@R ?o\" \" footnote overflow?
1957 .@R ?R\" \" renumbered chapter?
1958 .@R ?s\" \" skip next page?
1959 .@R ?T\" \" inside .TS H?
1960 .@R ?W\" \" wide floating keep at page bottom?
1961 .@R ?w\" \" wide floating keep at page top?
1967 .if \n(ps<\n(.V .nr ps \n(.V
1968 .nr bs \n(ps \" block pre/post spacing
1969 .nr qs \n(ps \" quote pre/post spacing
1970 .nr zs 1v \" float-block pre/postspacing
1971 .nr xs 0.2v \" index prespacing
1972 .nr xu 0.5i \" index undent
1973 .nr fs 0.2v \" footnote prespacing
1974 .nr es 0.5v \" equation pre/postspacing
1975 .if \n(es<\n(.V .nr es \n(.V
1976 .wh 0 @h \" set header
1977 .nr $l \n(.lu \" line length
1978 .nr _L \n(.lu \" line length of page
1979 .nr $c 1 \" current column number
1980 .nr $f 1 1 \" footnote number
1981 .ds * \*{1\*}\k*\" \" footnote "name"
1982 .nr $d 1 1 \" delayed text number
1983 .ds # [1]\k#\" \" delayed text "name"
1984 .nr _M 1 \" chapter mode is chapter
1985 .ds lq \(lq\" \" left quote
1986 .ds rq \(rq\" \" right quote
1990 .\" *** FOREIGN LETTERS AND SPECIAL CHARACTERS ***
1993 .ds #h ((1u-(\\\\n(.fu%2u))*0.13m)
1997 .ds ' \k_\h'-(\\n(.wu*8/10-\*(#h)'\(aa\h'|\\n_u'
1998 .ds ` \k_\h'-(\\n(.wu*7/10-\*(#h)'\(ga\h'|\\n_u'
2001 .ds : \k_\h'-(\\n(.wu*8/10-\*(#h+0.1m)'\v'-\*(#v'\z.\h'0.2m'.\h'|\\n_u'\v'\*(#v'
2003 .\" \" circumflex and tilde
2004 .ds ^ \k_\h'-(\\n(.wu-\*(#h-0.05m)'^\h'|\\n_u'
2005 .ds ~ \k_\h'-(\\n(.wu-\*(#h-0.05m)'~\h'|\\n_u'
2007 .\" \" cedilla and czech
2008 .ds , \k_\h'-(\\n(.wu)',\h'|\\n_u'
2009 .ds v \k_\h'-(\\n(.wu*9/10-\*(#h)'\v'-\*(#v'\s-4v\s0\v'\*(#v'\h'|\\n_u'
2011 .\" \" Norwegian A or angstrom
2012 .ds o \k_\h'-(\\n(.wu+\w'\(de'u-\*(#h)/2u'\v'-0.4n'\z\(de\v'0.4n'\h'|\\n_u'
2014 .\" \" there exists, for all
2015 .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'
2016 .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'
2022 .tm The \\$1 macro has been removed from this version of the -me macros.