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
10 .\" University may not be used to endorse or promote products derived
11 .\" from this software without specific prior written permission. This
12 .\" software 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 .rn nm @# \" --- rename to original command
139 .de nm \" --- turn on number mode preserving font info
146 . @# \\$1 \\$2 \\$3 \\$4
155 .de @z \" --- end macro
156 .if \n@>1 .tm >> @z, .z=\\n(.z ?a=\\n(?a
159 . tm Line \\n(c. -- Unclosed block, footnote, or other diversion (\\n(.z)
164 . bp \" force out final table
166 .ds @b\" \" don't start another page
172 .\" *** STANDARD HEADERS AND FOOTERS ***
175 .ie \n(.g .ds $* \\\\$*
176 .el .ds $* \\\\$1 \\\\$2 \\\\$3 \\\\$4 \\\\$5 \\\\$6 \\\\$7 \\\\$8 \\\\$9
178 .de he \" *** define header
191 .de eh \" *** define even header
198 .de oh \" *** define odd header
205 .de fo \" *** define footer
218 .de ef \" *** define even footer
225 .de of \" *** define odd footer
232 .de ep \" *** end page (must be followed by a .bp)
242 .\" *** INTERNAL HEADER AND FOOTER MACROS ***
246 .if \n@>1 .tm >> @h %=\\n% ?a=\\n(?a ?b=\\n(?b ?w=\\n(?w
247 .if (\\n(.i+\\n(.o)>=\\n(.l \
248 . tm Line \\n(c. -- Offset + indent exceeds line length
249 .\" initialize a pile of junk
250 .nr ?h \\n(?H \" transfer "next page" to "this page"
258 .nr _w 0 \" reset max footnote width
259 .nr ?W 0 \" no wide floats this page (yet)
261 .\" begin actual header stuff
266 . sp |\\n(hmu \" move to header position
267 .@t $h\" \" output header title
271 . sp |\\n(tmu \" move to top of text
273 .mk _k \" for columned output
274 .if \\n(?n=1 .nm 1 \" restore line numbering if n1 mode
275 .nr $c 1 \" set first column
276 .if \n@>4 .tm -- @h >> .ns nl=\\n(nl %=\\n% _k=\\n(_k tm=\\n(tm
284 . @n\" \" begin the column
288 .de @n \" --- new column or page
289 .if \n@>3 .tm >> @n nl=\\n(nl %=\\n% ?f=\\n(?f ?o=\\n(?o
292 .if (\\n(_w<=\\n($l)&(\\n(?W=0) \
294 . \" Compute fudge factor (must be < 1P).
295 . nr _b (\\n(ppp*\\n($vu)/200u
296 . if \\n(_bu>((\\n(bmu-\\n(fmu-((\\n(tpp*\\n($vu)/100u))/2u) \
297 . nr _b (\\n(ppp*\\n($vu)/100u-\n(.Vu
303 .nr _b +(\\n(ppp*\\n($vu)/100u \" add 1 paragraph v in case sweep past
304 .if \n@>2 .tm @n .p=\\n(.p bm=\\n(bm _b=\\n(_b _B=\\n(_B
305 .nr ?f 0 \" reset footnote flag
308 . (f _\" \" reprocess footnotes which run off page
322 . |h\" \" output the table header
327 . mk #T \" for tbl commands
330 .if (\\n(?a)&((\\n($c<2):(\\n(?w=0)) \
332 . nr ?a 0 \" output floating keep
335 . mk _k \" don't overstrike wide keeps
339 .$H\" \" special column header macro
344 .if \n@>1 .tm >> @f %=\\n% nl=\\n(nl ?a=\\n(?a ?b=\\n(?b ?f=\\n(?f
345 .if \n@>2 .nr VL \\n(.pu-\\n(nlu
346 .if \n@>2 .tm @f bm=\\n(bm _B=\\n(_B _b=\\n(_b .p-nl=\\n(VL
350 . nr T. 1 \" for tbl commands (to output bottom line)
351 . T# 1\" \" output the sides and bottom lines
359 . @k |b\" \" output bottom of page tables
362 . @o\" \" output footnote if present
364 . @c\" \" handle new column
371 .de @o \" --- output footnote
375 .if \n@>2 .tm @o last printed text = \\n(nl placing @r trap at -\\n(_B
383 .if \n@>2 .tm @o triggered @r (?o) = \\n(?o
386 . di \" just in case triggered @r
399 .de @c \" --- new column
400 .if \n@>2 .tm >> @c %=\\n%
408 .de @e \" --- end page
412 .\" Move to footer position.
413 .sp |\\n(.pu-\\n(fmu-((\\n(tpp*\\n($vu)/100u)
414 .@t $f\" \" output footer title
419 .de @t \" --- output header or footer title
422 . sz \\n(tp\" \" set header/footer type fonts, etc.
424 . lt \\n(_Lu \" make title span entire page
435 .de $h \" $$$ print header
439 . if e .ds |z "\\*(|0
440 . if o .ds |z "\\*(|1
442 .if !\(ts\\*(|z\(ts\(ts \
447 .de $f \" $$$ print footer
451 . if e .ds |z "\\*(|0
452 . if o .ds |z "\\*(|1
454 .if \(ts\\*(|z\(ts\(ts \
456 . if e .ds |z "\\*(|2
457 . if o .ds |z "\\*(|3
459 .if !\(ts\\*(|z\(ts\(ts \
464 .de @r \" --- reprocess overflow footnotes
465 .if \n@>3 .tm >> @r .z=\\n(.z ?f=\\n(?f ?a=\\n(?a ?b=\\n(?b _b=\\n(_b
466 .di |o \" save overflow footnote
473 .\" *** COMMANDS WITH VARIANT DEFINITIONS ***
476 .if !'\*(.T'html' .rn bp @b \" --- begin page
478 .de bp \" *** begin new page (overrides columns)
479 .nr $c \\n($m \" force new page, not new column
487 . @h\" \" 'spring' the header trap
490 .wh 0 @h \" reset header
493 .rn ll xl \" *** special line length (local)
494 .de ll \" *** line length (global to environments)
498 .if (\\n($m<=1):(\\n($l>\\n(_L) \
502 .rn po @O \" --- local page offset
504 .de po \" *** page offset
509 .\" Redefine the fam request to set the family in
510 .\" environment 2 as well as the current environment.
512 .do rn fam @fam \" --- set family in current environment
513 .do de fam \" *** set font family in ev 2 and current ev
521 .\" *** MISCELLANEOUS ROFF COMMANDS ***
524 .de hx \" *** suppress headers and footers next page
528 .de ix \" *** indent, no break
532 .de bl \" *** contiguous blank lines
538 .de @s \" --- diversion-surviving space test
541 .if !'\\n(.z'' \!.@s \\$1
544 .de n1 \" *** line numbering 1
552 .de n2 \" *** line numbering 2
563 . \" Pick off leading char and rest to check.
564 . do substring |i 0 0 \"
565 . do substring |j 1 \" for +N / -N
567 . nr ln (\\n[_ln])+\\*(|j
570 . nr ln (\\n[_ln])-\\*(|j
572 . nr ln \\$1 \" unsigned N
580 . tm Line \\n(.c -- Bad .n2 value
593 .de pa \" *** new page
597 .de ro \" *** roman page numbers
601 .de ar \" *** arabic page numbers
605 .de m1 \" *** position one space
608 .nr tm +\\n(hmu-\\n(_0u
612 .de m2 \" *** position two space
613 .nr tm \\n(hmu+\\n(tpp+\\$1v
616 .de m3 \" *** position three space
617 .nr bm \\n(fmu+\\n(tpp+\\$1v
620 .de m4 \" *** position four space
623 .nr bm +\\n(fmu-\\n(_0u
626 .de sk \" *** leave a blank page (next page)
628 . tm Line \\n(c. -- I cannot skip multiple pages
633 .\" *** MISCELLANEOUS USER SUPPORT COMMANDS ***
637 .de re \" *** reset tabs (TROFF defines 15 stops default)
643 .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
646 .de ba \" *** set base indent
650 . nr $i \\n(siu*\\n($0u
653 .de hl \" *** draw horizontal line
660 .ie \n(.g .do nr _I \\n[.in]
667 .\" *** PARAGRAPHING ***
670 .de pp \" *** paragraph
674 .de lp \" *** left aligned paragraph
681 .de ip \" *** indented paragraph w/ optional tag
682 .if (\\n(ii>0)&(\\n(ii<1n) \
702 . ie \\w"\\*(|j">=\\n(_0 \
706 . do DEVTAG-COL-NEXT 2
721 .de np \" *** numbered paragraph
722 .\" use string comparison in case user has changed format of $p
724 . nr $p 0 \" reset number after .bu
725 .nr $p +1 \" increment paragraph number
728 \0(\\n($p)\h'|\w'\0(000)\0'u'\c
731 .de bu \" *** bulleted paragraph
733 .\" use string comparison in case user has changed format of $p
735 . ns \" don't space between .bu paragraphs
736 .nr $p 0-1 \" mark "bulleted paragraph" mode
742 .de @p \" --- initialize for paragraph
744 .if "\\n(.z"|e" .tm Line \\n(c. -- Unmatched continued equation
758 .\" *** SECTION HEADINGS ***
761 .de sh \" *** section heading
764 .if (\\n(si>0)&(\\n(si<1n) \
766 .if '\*(.T'html' .nr si 0
773 .@d "\\$1" +1 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
777 . $p "\\*(|n" "\\*($n" \\n($0
778 . $0 "\\*(|n" "\\*($n" \\n($0
781 .nr $p 0 1 \" reset .np count
784 .de @d \" --- change section depth
787 .if \\n($0&(\\n(.$>1) \
794 . if (\\n(.$>=3) .if !"\\$3"-" \
804 . if (\\n(.$>=4) .if !"\\$4"-" \
814 . if (\\n(.$>=5) .if !"\\$5"-" \
824 . if (\\n(.$>=6) .if !"\\$6"-" \
834 . if (\\n(.$>=7) .if !"\\$7"-" \
844 . if (\\n(.$>=8) .if !"\\$8"-" \
852 .de sx \" *** heading up, no increment (2.1.1 -> 2.1)
857 .if \\n(.$ .nr _0 \\$1
861 .nr $p 0 1 \" reset .np count
864 .de uh \" *** unnumbered section heading
869 .de $p \" $$$ print section heading
870 .if (\\n(si>0)&(\\n(.$>2) \
875 . sp \\n(ssu \" one of them is non-null
876 . ne \\n(.Lv+\\n(.Vu+\\n(psu+((\\n(spp*\\n($vu*\\n(.Lu)/100u)
877 . \" exdent if \\$3 > 0
879 . ti -(\\n(siu-\\n(sou)
886 . if \w"\\$2">0 \\$2.
887 . if \w"\\$1">0 \\$1\f1\ \ \&
896 .\" *** COLUMNED OUTPUT ***
899 .de 2c \" *** double columned output
902 . 1c\" \" revert to 1c if already 2c
908 . nr $s \\$1n \" param 1: column separation
909 .nr $l (\\n(.l-((\\n($m-1)*\\n($s))/\\n($m
915 .de 1c \" *** single columned output
919 .ll \\n(_Lu \" return to normal output
924 .de bc \" *** begin column
929 .\" *** FLOATING TABLES AND NONFLOATING BLOCKS ***
932 .de (z \" *** begin floating keep
933 .if \n@>4 .tm >> (z, .z=\n(.z
938 .de )z \" *** end floating keep
939 .if \n@>4 .tm >> )z, .z=\n(.z
942 .if \n@>4 .tm -- )z << @), .z=\n(.z
945 . nr dn +(\\n(ppp*\\n($vu)/200u+\\n(zsu
946 .nr dl -\n(.H \" fudge factor necessary to make it work
947 .ie ((\\n(dn+\n(.V)>=\\n(.t):(\\n(?a):((\\n(dl>\\n($l)&(\\n($c>1)) \
950 . if (\\n(dl>\\n($l)&(\\n($m>1) \
951 . nr ?w 1 \" mark wider than one column (top)
957 . if (\\n(dl>\\n($l)&(\\n($m>1) \
958 . nr ?W 1 \" mark wider than one column (bottom)
960 . \" avoid moving @f back past the current position
961 . if \\n(.p-\\n(nl-\n(.V<\\n(_b \
962 . nr _b \\n(.p-\\n(nl-\n(.V
966 .da \\*(|x \" copy to save macro
970 .if \n@>4 .tm -- )z >> \\*(|x
971 \!.if \\\\n(nl>(\\\\n(tm+2v) .ne \\n(dnu-\\n(zsu
972 .|k\" \" and the body
974 .if \n@>4 .tm -- )z << \\*(|x, .z=\\n(.z
976 .rm |k\" \" remove the temp macro
982 .if \n@>4 .tm << )z, .z=\\n(.z
985 .de @k \" --- output floating keep
986 .if \n@>4 .tm >> @k, $1=\\$1, .z=\\n(.z
991 .if !`\\$2`ns` .sp \\n(zsu \" no pre-spacing if (b .. )b
1003 .de (t \" XXX temp ref to (z
1007 .de )t \" XXX temp ref to )t
1011 .de (b \" *** begin block
1016 .if '\*(.T'html' .sp \\n(bsu
1019 .de )b \" *** end block
1022 .if (\\n(bt=0):(\\n(.t<\\n(bt) \
1023 . ne \\n(dnu \" make it all on one page
1025 .ev \" return from display environment
1026 .sp \\n(bsu+\\n(.Lv-1v
1029 .de @( \" --- begin keep
1030 .if !"\\n(.z"" .tm Line \\n(c. -- Invalid nested keep \\n(.z
1036 .de @M \" --- set modes for display
1041 .vs \\n(.sp*\\n($Vu/100u
1044 . fi \" set fill mode if "F" parameter
1056 .de @) \" --- end keep
1058 .if !"\\n(.z"|k" .tm Line \\n(c. -- Close of a keep which has never been opened
1065 .de (c \" *** begin block centered text
1067 .if "\\n(.z"|c" .tm Line \\n(c. -- Nested .(c requests
1071 . @C 1 \" Ensure env. set up for centering in open text
1077 .de )c \" *** end block centered text
1078 .if !"\\n(.z"|c" .tm Line \\n(c. -- Unmatched .)c
1079 .br \" force out final line
1081 .if \n@>4 .tm >> .)c .l=\\n(.l .i=\\n(.i $i=\\n($i dl=\\n(dl
1084 .in (\\n(.lu-\\n(.iu-\\n(dlu)/2u
1085 .if \n@>4 .tm -- .)c << .in .l=\\n(.l .i=\\n(.i dl=\\n(dl
1102 .\" *** BLOCK QUOTES (OR WHATEVER) AND LISTS ***
1105 .de (q \" *** begin block quote
1117 .de )q \" *** end block quote
1122 .sp \\n(qsu+\\n(.Lv-1v
1126 .de (l \" *** begin list
1133 .if '\*(.T'html' .sp \\n(bsu
1136 .de )l \" *** end list
1141 .sp \\n(bsu+\\n(.Lv-1v
1146 .\" *** PREPROCESSOR SUPPORT ***
1152 .de EQ \" *** equation start
1153 .do if \\n[need_eo_h]>0 .do DEVTAG-EO-H
1158 . do nr e-EQ-ll \\n(.l
1164 . if "\\n(.z"|e" .tm Line \\n(c. -- Nested .EQ request
1165 . @D 1 "\\$1" "\\$2"
1174 .de EN \" *** equation end
1178 . do ll \\n[e-EQ-ll]u
1189 . @q\" \" actual equation output
1195 .de @q \" --- equation output
1198 .sp \\n(esu \" output rest of preceding text
1199 .if !"\\n(.z"" \!.ne \\n(_Qu
1200 .ne \\n(_Qu+\n(.Vu \" keep it on one page
1201 .@C 2\" \" .ev 2 may be jumbled from header
1203 . in (\\n(.lu+\\n($iu-\\n(dlu)/2u
1207 . in \\n(biu+\\n($iu
1211 .if \n@>1 .tm --@e: _Q=\\n(_Q _q=\\n(_q nl=\\n(nl |p=\\*(|p
1215 . sp (\\n(_Qu-\\n(.vu)/2u
1224 .sp |\\n(_qu+\\n(_Qu
1225 .sp \\n(esu+\\n(.Lv-1v
1233 .de TS \" *** table start
1237 . do nr e-TS-ll \\n(.l
1242 .fi \" drop into fill mode for text boxes
1245 . di |h \" save header part
1249 .ch @f -(\\n(_bu+1v) \" set pseudo-trap for bottom line
1250 .if \\n(.p-\\n(_b-1v<=\\n(nl \
1251 . ch @f \\n(nlu+\n(.Vu
1254 .de TH \" *** end header part of table
1264 .if \\n(?n .nm \\n(ln
1266 .|h\" \" put in the initial header
1272 .de TE \" *** table end
1274 .ch @f -\\n(_bu \" reset pseudo-trap
1275 .if \\n(.p-\\n(_b<=\\n(nl \
1276 . ch @f \\n(nlu+\n(.Vu
1280 . do ll \\n[e-TS-ll]u
1281 .sp \\n(bsu+\\n(.Lv-1v
1296 .de IS \" *** start ideal picture
1306 .de IE \" *** end ideal picture
1314 .de PS \" *** start picture: $1=height, $2=width in units or inches
1318 .in (u;\\n(.l-\\n(g7>?0/2)
1324 . de PS_nm_check && \" define macro to emit .nm at top diversion
1325 . if \n@>4 .tm -- PS: \\\\$1 \\\\$2 .z=\\\\n(.z PS_nm_cnt=\\\\n[PS_nm_cnt]
1326 . \" Multiple .PS/.PE in a keep.
1327 . if `\\\\$2`init` \
1328 . do nr PS_nm_cnt \\\\n[PS_nm_cnt]+1
1331 . if `\\\\$1`suspend` \
1333 . if `\\\\$1`resume` \
1336 . do nr PS_nm_cnt \\\\n[PS_nm_cnt]-1
1337 . do if !\\\\n[PS_nm_cnt] \
1344 .el \!.PS_nm_check \\\\$1
1346 . mk _q \" emit a single numbered line for PS picture
1351 . PS_nm_check suspend init
1355 .de PE \" *** end picture
1356 .if \\n(?n .PS_nm_check resume
1367 .de GS \" *** start gremlin picture
1370 . ie "\\$1"L" .do HTML-IMAGE-LEFT
1371 . el .ie "\\$1"R" .do HTML-IMAGE-RIGHT
1376 . nr g7 (\\n(.lu-\\n(g1u)/2u
1377 . if "\\$1"L" .nr g7 \\n(.iu
1378 . if "\\$1"R" .nr g7 \\n(.lu-\\n(g1u
1387 .de GE \" *** end gremlin picture
1388 .ie '\*(.T'html' .do HTML-IMAGE-END
1396 .de GF \" *** finish gremlin picture; stay at top
1403 .\" *** FONT AIDS ***
1406 .de sz \" *** set point size and vertical spacing
1409 .vs \\n(.sp*\\n($vu/100u \" default vs at pointsize + 20%
1412 .de @v \" --- possibly set $v from $r
1413 .if (1i>=240u)&(1p<=\\n($r)&(\\n($r<=4p) .nr $v \\n($r00/1p
1416 .de @V \" --- possibly set $V from $R
1417 .if (1i>=240u)&(1p<=\\n($R)&(\\n($R<=4p) .nr $V \\n($R00/1p
1420 .de @E \" --- store in _F argument to \f for restoring font
1425 . ie \\n(.f<100&\n(.g \
1432 .de r \" *** enter roman font
1433 .do check_need_title
1436 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1437 .do check_need_title
1440 .de i \" *** enter italic
1441 .do check_need_title
1444 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1445 .do check_need_title
1448 .de b \" *** enter boldface
1449 .do check_need_title
1452 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1453 .do check_need_title
1456 .de rb \" *** enter real boldface
1457 .do check_need_title
1460 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1461 .do check_need_title
1464 .de bi \" *** enter bold italic
1465 .do check_need_title
1468 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1469 .do check_need_title
1472 .de u \" *** enter underlined word
1473 \&\\$1\l'|0\(ul'\\$2
1476 .\" a better version of u
1479 \Z'\\$1'\v'.25m'\D'l \w'\\$1'u 0'\v'-.25m'\\$2
1482 .de q \" *** enter quoted word
1483 \&\\*(lq\\$1\\*(rq\\$2
1486 .de bx \" *** enter boxed word
1487 .ie '\*(.T'html' \\$1\\$2
1488 .el \k~\(br\|\\$1\|\(br\l'|\\n~u\(rn'\l'|\\n~u\(ul'\^\\$2
1491 .de sm \" *** print in smaller font
1495 .de @F \" --- change font (0 -> no change)
1503 .\" *** FOOTNOTING ***
1506 .de (f \" *** begin footnote
1508 .if "\\n(.z"|f" .tm Line \\n(c. -- Invalid footnote nesting
1517 . xl \\n($lu-\\n(fuu
1520 . vs \\n(.sp*\\n($Vu/100u
1523 . nr _b +1v \" allow space for $s
1527 . if \\n(.p-\\n(_b-\\n(_0-\\n(.h-1v-\\n(fs<0 \
1529 . da\" \" won't fit on page at all
1534 .\" Next 5 lines could be dropped if headers had their own environment.
1535 . in 0 \" reset everything from .bc
1536 . xl \\n($lu-\\n(fuu
1539 . vs \\n(.sp*\\n($Vu/100u
1550 . if \n@>2 .tm << (f $f=\\n($f
1557 . xl \\n($lu-\\n(fuu
1560 . vs \\n(.sp*\\n($Vu/100u
1567 .de @N \" --- set no fill mode in the top-level diversion
1572 .de )f \" *** end footnote
1577 . ds * \\*{\\n($f\\*}\k*
1582 . if \\n(_w<\\n(dl \
1583 . nr _w \\n(dl \" compute maximum fn width
1586 . if \\n(.p-\\n(_b<=\\n(nl \
1587 . ch @f \\n(nlu+\n(.Vu
1601 . nr ff 1 \" footnote font: Times Roman
1604 . nr fp 8 \" footnote pointsize
1606 .de $s \" $$$ footnote separator
1611 .\" *** DELAYED TEXT ***
1614 .de (d \" *** begin delayed text
1619 .de )d \" *** end delayed text
1626 .de pd \" *** print delayed text
1634 .\" *** INDEXES (TABLE OF CONTENTS) ***
1641 .de (x \" *** begin index entry
1642 .if \n@>4 .tm >> (x, .z=\\n(.z
1653 .de @0 \" --- finish (x if no current diversion
1659 .de @1 \" --- finish (x if current diversion
1660 .if "\\n(_x"z" .nr _x 0
1664 .de )x \" *** end index entry
1665 .if \n@>4 .tm >> )x, .z=\\n(.z
1674 . if \w"\\$2">(\\n(.l-\\n(.i-\\n(.k) \
1676 \\\\a\\\\t\\$2\\*(|x
1690 .de xp \" *** print the index
1694 .vs \\n(.sp*\\n($Vu/100u
1700 .xl -(\\n(xuu+\w'...'u)
1711 .ta \\n(.lu-\\n(xuuR \\n(.luR
1719 .\" *** HTML VERSIONS OF .x(, .x), AND .xp ***
1722 .de (x-html \" --- create TAG and divert text
1731 .de )x-html \" --- end diversion
1736 .de xp-html \" --- create list of links
1742 .do while \\n[_xx]<=\\n[_xn] \
1745 . do unformat |x\\n[_xx]
1753 . do asciify xp-html-div
1755 . do as xp-html-as #
1756 . do as xp-html-as _x\\n[_xx]
1759 . do URL \\*[xp-html-as] "\\*[xp-html-div]
1779 .\" *** CHAPTERS AND TITLES ***
1782 .de +c \" *** begin chapter
1783 .ep\" \" force out footnotes
1786 . bp \" force out a table or more footnote
1796 .in \\n($iu \" reset the indent
1804 .de ++ \" *** declare chapter type
1807 . nr _0 1 \" chapter
1809 . nr _0 11 \" renumbered chapter
1811 . nr _0 2 \" appendix
1813 . nr _0 12 \" renumbered appendix
1815 . nr _0 3 \" preliminary material
1817 . nr _0 4 \" bibliographic material
1819 . nr _0 5 \" abstract
1821 . tm Line \\n(c. -- Bad mode to .++
1829 .if (\\n(_0=3):(\\n(_0=5) \
1830 . pn 1 \" must do before .ep
1831 .if !\\n(_0=\\n(_M .if \\n(_M=3 \
1832 . pn 1 \" must do before .ep
1833 .ep\" \" end page for correct page number types
1856 .de $c \" $$$ print chapter title
1862 .ie \\n(_M=1 CHAPTER\ \ \\n(ch
1863 .el .if \\n(_M=2 APPENDIX\ \ \\n(ch
1864 .if \w"\\$1" .sp 3-\\n(.L
1866 .if (\\n(_M<3):(\w"\\$1") \
1872 . $C Chapter \\n(ch "\\$1"
1874 . $C Appendix \\n(ch "\\$1"
1877 .de tp \" *** title page
1886 .if \n(mo=1 .ds mo January
1887 .if \n(mo=2 .ds mo February
1888 .if \n(mo=3 .ds mo March
1889 .if \n(mo=4 .ds mo April
1890 .if \n(mo=5 .ds mo May
1891 .if \n(mo=6 .ds mo June
1892 .if \n(mo=7 .ds mo July
1893 .if \n(mo=8 .ds mo August
1894 .if \n(mo=9 .ds mo September
1895 .if \n(mo=10 .ds mo October
1896 .if \n(mo=11 .ds mo November
1897 .if \n(mo=12 .ds mo December
1898 .if \n(dw=1 .ds dw Sunday
1899 .if \n(dw=2 .ds dw Monday
1900 .if \n(dw=3 .ds dw Tuesday
1901 .if \n(dw=4 .ds dw Wednesday
1902 .if \n(dw=5 .ds dw Thursday
1903 .if \n(dw=6 .ds dw Friday
1904 .if \n(dw=7 .ds dw Saturday
1908 .ds td \*(mo \n(dy, \n(y4
1911 .\" *** PARAMETRIC INITIALIZATIONS ***
1915 .nr $v \n(.v00+\n(.sp-1/\n(.sp \" vs as % of ps for .sz request
1916 .nr $V \n($v \" same for displays & footnotes
1917 .nr hm 4v \" header margin
1918 .nr tm 7v \" top margin
1919 .nr bm 6v \" bottom margin
1920 .nr fm 3v \" footer margin
1921 .nr tf 3 \" title font: (real) Times Bold
1922 .nr tp 10 \" title point size
1924 .nr bi 4m \" indent for blocks
1925 .nr pi 5n \" indent for paragraphs
1926 .nr pf 1 \" normal text font
1927 .nr pp 10 \" normal text point size
1928 .nr qi 4n \" indent for quotes
1929 .nr qp -1 \" down one point
1930 .nr ii 5n \" indent for .ip's and .np's
1931 .nr $m 1 \" max number of columns
1932 .nr $s 4n \" column separation
1933 .nr sf 3 \" section font -- Times Bold
1934 .nr sp 10 \" section title pointsize
1935 .nr ss 12p \" section prespacing
1936 .nr si 0 \" section indent
1939 .\" *** OTHER INITIALIZATION ***
1942 .\" GNU pic sets this register to 1 to indicate that \x should not be
1945 .ds { \v'-0.4m'\x'\\n(0x=0*-0.2m'\s-3
1947 .\" for compatibility with traditional -me
1948 .\" (the first will work only in compatibility mode)
1951 .ds < \v'0.4m'\x'\\n(0x=0*0.2m'\s-3
1954 .\" Avoid warnings from groff -ww.
1972 .@R po\" \" simulated page offset
1973 .@R $0\" \" section depth
1974 .@R $i\" \" paragraph base indent
1975 .@R $p\" \" numbered paragraph number
1976 .@R $r\" \" ratio of vs to ps (may override $v)
1977 .@R $R\" \" same for displays (may override $V)
1978 .@R df\" \" display font: same as surrounding text
1979 .@R so\" \" additional section title offset
1980 .@R fu\" \" footnote undent
1981 .@R bt\" \" block keep threshold
1982 .@R *\" \" has \** been referenced?
1983 .@R ?a\" \" pending floating keep at page top?
1984 .@R ?b\" \" pending floating keep at page bottom?
1985 .@R ?C\" \" at chapter header?
1986 .@R ?e\" \" in equation?
1987 .@R ?H\" \" suppress headers and footers next page?
1988 .@R ?I\" \" has the header trap been sprung?
1989 .@R ?n\" \" n1 mode?
1990 .@R ?o\" \" footnote overflow?
1991 .@R ?R\" \" renumbered chapter?
1992 .@R ?s\" \" skip next page?
1993 .@R ?T\" \" inside .TS H?
1994 .@R ?W\" \" wide floating keep at page bottom?
1995 .@R ?w\" \" wide floating keep at page top?
2001 .if \n(ps<\n(.V .nr ps \n(.V
2002 .nr bs \n(ps \" block pre/post spacing
2003 .nr qs \n(ps \" quote pre/post spacing
2004 .nr zs 1v \" float-block pre/postspacing
2005 .nr xs 0.2v \" index prespacing
2006 .nr xu 0.5i \" index undent
2007 .nr fs 0.2v \" footnote prespacing
2008 .nr es 0.5v \" equation pre/postspacing
2009 .if \n(es<\n(.V .nr es \n(.V
2010 .wh 0 @h \" set header
2011 .nr $l \n(.lu \" line length
2012 .nr _L \n(.lu \" line length of page
2013 .nr $c 1 \" current column number
2014 .nr $f 1 1 \" footnote number
2015 .ds * \*{1\*}\k*\" \" footnote "name"
2016 .nr $d 1 1 \" delayed text number
2017 .ds # [1]\k#\" \" delayed text "name"
2018 .nr _M 1 \" chapter mode is chapter
2019 .ds lq \(lq\" \" left quote
2020 .ds rq \(rq\" \" right quote
2024 .\" *** FOREIGN LETTERS AND SPECIAL CHARACTERS ***
2027 .ds #h ((1u-(\\\\n(.fu%2u))*0.13m)
2031 .ds ' \h'0'\k_\h'-(\\n(.wu*8/10-\*(#h)'\(aa\h'|\\n_u'
2032 .ds ` \h'0'\k_\h'-(\\n(.wu*7/10-\*(#h)'\(ga\h'|\\n_u'
2035 .ds : \h'0'\k_\h'-(\\n(.wu*8/10-\*(#h+0.1m)'\v'-\*(#v'\z.\h'0.2m'.\h'|\\n_u'\v'\*(#v'
2037 .\" \" circumflex and tilde
2038 .ds ^ \h'0'\k_\h'-(\\n(.wu-\*(#h-0.05m)'^\h'|\\n_u'
2039 .ds ~ \h'0'\k_\h'-(\\n(.wu-\*(#h-0.05m)'~\h'|\\n_u'
2041 .\" \" cedilla and czech
2042 .ds , \h'0'\k_\h'-(\\n(.wu)',\h'|\\n_u'
2043 .ds v \h'0'\k_\h'-(\\n(.wu*9/10-\*(#h)'\v'-\*(#v'\s-4v\s0\v'\*(#v'\h'|\\n_u'
2045 .\" \" Norwegian A or angstrom
2046 .ds o \h'0'\k_\h'-(\\n(.wu+\w'\(de'u-\*(#h)/2u'\v'-0.4n'\z\(de\v'0.4n'\h'|\\n_u'
2048 .\" \" there exists, for all
2049 .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'
2050 .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'
2056 .tm The \\$1 macro has been removed from this version of the -me macros.
2071 .\" ====================================================================
2073 .\" ====================================================================
2075 .\" Local Variables:
2079 .\" vim: set filetype=nroff textwidth=72: