* src/roff/troff/TODO: Mention local variables.
[s-roff.git] / tmac / e.tmac
blobab13d560f181c2d4a47b12d940320039f79e70ae
1 .\"     @(#)e.tmac      2.31 (Berkeley) 5/21/88
2 .\"     Modified by James Clark for use with groff.
3 .\"
4 .\" Copyright (c) 1988 Regents of the University of California.
5 .\" All rights reserved.
6 .\"
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.
13 .\"     %beginstrip%
14 .\"
15 .\"**********************************************************************
16 .\"*                                                                    *
17 .\"*    ******  - M E   N R O F F / T R O F F   M A C R O S  ******     *
18 .\"*                                                                    *
19 .\"*    Produced for your edification and enjoyment by:                 *
20 .\"*            Eric Allman                                             *
21 .\"*            Electronics Research Laboratory                         *
22 .\"*            U.C. Berkeley.                                          *
23 .\"*    current address:                                                *
24 .\"*            Britton-Lee, Inc.                                       *
25 .\"*            1919 Addison Street Suite 105                           *
26 .\"*            Berkeley, California  94704                             *
27 .\"*                                                                    *
28 .\"*    VERSION 2.31    First Release: 11 Sept 1978                     *
29 .\"*                                                                    *
30 .\"*    Documentation is available.                                     *
31 .\"*                                                                    *
32 .\"**********************************************************************
33 .\"
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.
41 .\"
43 .do nr need_eo_h 0
44 .do nr need_eo_tl 0
45 .do nr need_tl 1
47 .do mso devtag.tmac
49 .if !\n(.g .ig
50 .de @R                  \" --- initialize number register to 0, if undefined
51 .if !r\\$1 .nr \\$1 0
54 .\" --- check whether grohtml needs end of title/heading
55 .de @html_check_need_title
56 .do if (\\n[need_eo_tl] == 1) \
57 \{\
58 .       do nr need_eo_tl 0
59 .       do DEVTAG-EO-TL
60 .\}
61 .do if (\\n[need_tl] == 1) \
62 \{\
63 .       do DEVTAG-TL
64 .       do nr need_tl 0
65 .       do nr need_eo_tl 1
66 .\}
67 .do if \\n[need_eo_h]>0 .do DEVTAG-EO-H
68 .do nr need_eo_h 0
71 .de @check_need_title
74 .ie '\*(.T'html' \
75 .       do als check_need_title @html_check_need_title
76 .el \
77 .       do als check_need_title @check_need_title
79 .@R pf
80 .if \n(pf .nx
82 .if !\n(.g .ig
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
94 .nr _S \\n(.s
95 .nr _V \\n(.v
96 .nr _F \\n(.f
97 .nr _J \\n(.j
98 .do ds _A \\n[.fam]
99 .nr _I \\n(.i
100 .ev \\$1
101 .ps \\n(_S
102 .vs \\n(_Vu
103 .ft \\n(_F
104 .ad \\n(_J
105 .do @fam \\*(_A
106 'in \\n(_Iu
107 .xl \\n($lu
108 .lt \\n($lu
109 .rr _S
110 .rr _V
111 .rr _F
112 .rr _I
113 .rr _J
114 .ls 1
115 'ce 0
118 .de @D                  \" --- determine display type (Indent, Left, Center)
119 .ds |p "\\$3
120 .nr _d 0
121 .if "\\$2"C" \
122 .       nr _d 1
123 .if "\\$2"L" \
124 .       nr _d 2
125 .if "\\$2"I" \
126 .       nr _d 3
127 .if "\\$2"M" \
128 .       nr _d 4
129 .if !\\n(_d \
131 .       nr _d \\$1
132 .       ds |p "\\$2
137 .de @z                  \" --- end macro
138 .if \n@>1 .tm >> @z, .z=\\n(.z ?a=\\n(?a
139 .if !"\\n(.z"" \
141 .       tm Line \\n(c. -- Unclosed block, footnote, or other diversion (\\n(.z)
142 .       di
143 .       ex
145 .if \\n(?a \
146 .       bp                      \" force out final table
147 .ds bp
148 .ds @b\"                        \" don't start another page
150 .if \n@>1 .tm << @z
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
161 .ie !\\n(.$ \
163 .       rm |4
164 .       rm |5
166 .el \
168 .       ds |4 "\*($*
169 .       ds |5 "\*($*
173 .de eh                  \" *** define even header
174 .ie !\\n(.$ \
175 .       rm |4
176 .el \
177 .       ds |4 "\*($*
180 .de oh                  \" *** define odd header
181 .ie !\\n(.$ \
182 .       rm |5
183 .el \
184 .       ds |5 "\*($*
187 .de fo                  \" *** define footer
188 .ie !\\n(.$ \
190 .       rm |6
191 .       rm |7
193 .el \
195 .       ds |6 "\*($*
196 .       ds |7 "\*($*
200 .de ef                  \" *** define even foot
201 .ie !\\n(.$ \
202 .       rm |6
203 .el \
204 .       ds |6 "\*($*
207 .de of                  \" *** define odd footer
208 .ie !\\n(.$ \
209 .       rm |7
210 .el \
211 .       ds |7 "\*($*
214 .de ep                  \" *** end page (must always be followed by a .bp)
215 .if \\n(nl>0 \
217 .       wh 0
218 .       rs
219 .       @b
224 .\"             *** INTERNAL HEADER AND FOOTER MACROS ***
227 .de @h                  \" --- header
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"
233 .nr ?H 0
234 .nr ?c \\n(?C
235 .nr ?C 0
236 .rn |4 |0
237 .rn |5 |1
238 .rn |6 |2
239 .rn |7 |3
240 .nr _w 0                        \" reset max footnote width
241 .nr ?W 0                        \" no wide floats this page (yet)
242 .nr ?I 1
243 .\" begin actual header stuff
244 .ev 2
246 .if \\n(hm>0 \
247 .       if !'\*(.T'html' \
248 .               sp |\\n(hmu     \" move to header position
249 .@t $h\"                        \" output header title
250 .if \\n(tm<=0 \
251 .       nr tm \n(.Vu
252 .if !'\*(.T'html' \
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
259 .ie \\n(?s \
261 .       nr ?s 0
262 .       rs
263 '       @b
265 .el \
266 .       @n\"                    \" begin the column
267 .if \n@>2 .tm << @h
270 .de @n                  \" --- new column or page
271 .if \n@>3 .tm >> @n nl=\\n(nl %=\\n% ?f=\\n(?f ?o=\\n(?o
272 .if \\n(bm<=0 \
273 .       nr bm \\n(.Vu
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
279 .       nr _b +\\n(bmu
281 .nr _B \\n(_bu
282 .ch @f
283 .wh -\\n(_bu @f
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
287 .if \\n(?o \
289 .       (f _\"                  \" reprocess footnotes which run off page
290 .       nf
291 .       |o
292 .       fi
293 .       )f
294 .       rm |o
296 .nr ?o 0
297 .if \\n(?T \
299 .       nr _i \\n(.i
300 .       in 0
301 .       |h\"                    \" output the table header
302 .       in \\n(_iu
303 .       rr _i
304 .       mk #T                   \" for tbl commands
305 .       ns
307 .if (\\n(?a)&((\\n($c<2):(\\n(?w=0)) \
309 .       nr ?a 0                 \" output floating keep
310 .       @k |t
311 .       if \\n(?w \
312 .               mk _k           \" don't overstrike wide keeps
313 .       nr ?w 0
316 .$H\"                           \" special column header macro
320 .de @f                  \" --- footer
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
325 .if \\n(?T \
327 .       nr T. 1                 \" for tbl commands (to output bottom line)
328 .       T# 1\"                  \" output the sides and bottom lines
329 .       br
331 .ev 2
332 .ce 0
333 .if \\n(?b \
335 .       nr ?b 0
336 .       @k |b\"                 \" output bottom of page tables
338 .if \\n(?f \
339 .       @o\"                    \" output footnote if present
340 .ie \\n($c<\\n($m \
341 .       @c\"                    \" handle new column
342 .el \
343 .       @e\"                    \" new page
345 .if \n@>2 .tm << @f
348 .de @o                  \" --- output footnote
350 .ls 1
351 .in 0
352 .if \n@>2 .tm @o last printed text = \\n(nl placing @r trap at -\\n(_B
353 .wh -\\n(_Bu @r
356 .if \n@>2 .tm @o triggered @r (?o) = \\n(?o
357 .if \\n(?o \
359 .       di                      \" just in case triggered @r
360 .       if \\n(dn=0 \
362 .               rm |o
363 .               nr ?o 0
364 .       \}
365 .       nr dn \\n(_D
366 .       rr _D
368 .rm |f
369 .ch @r
372 .de @c                  \" --- new column
373 .if \n@>2 .tm   >> @c %=\\n%
375 .sp |\\n(_ku
376 .@O +\\n($lu+\\n($su
377 .nr $c +1
381 .de @e                  \" --- end page
382 .if \n@>2 .tm   >> @e
383 .@O \\n(_ou
385 .sp |\\n(.pu-\\n(fmu-((\\n(tpp*\\n($vu)/100u)   \" move to footer position
386 .@t $f\"                        \" output footer title
387 .nr ?h 0
391 .de @t                  \" --- output header or footer title
392 .if !\\n(?h \
394 .       sz \\n(tp\"             \" set header/footer type fonts, etc.
395 .       @F \\n(tf
396 .       lt \\n(_Lu              \" make title span entire page
397 .       nf
398 .       \\$1
399 .       br
403 .de $h                  \" $$$ print header
404 .ds |z
405 .if !\\n(?c \
407 .       if e .ds |z "\\*(|0
408 .       if o .ds |z "\\*(|1
410 .if !\(ts\\*(|z\(ts\(ts \
411 '       tl \\*(|z
412 .rm |z
415 .de $f                  \" $$$ print footer
416 .ds |z
417 .if \\n(?c \
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 \
428 '       tl \\*(|z
429 .rm |z
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
435 .nr ?o 1
436 .nr _D \\n(dn
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
448 .ie \\n(nl>0 \
449 .       @b \\$1
450 .el \
452 .       if \\n(.$>0 \
453 .               pn \\$1
454 .       if \\n(?I \
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)
463 .xl \\$1
464 .lt \\$1
465 .nr $l \\n(.l
466 .if (\\n($m<=1):(\\n($l>\\n(_L) \
467 .       nr _L \\n(.l
470 .rn po @O               \" --- local page offset
472 .de po                  \" *** page offset
473 .@O \\$1
474 .nr _o \\n(.o
477 .\" Redefine the fam request to set the family in
478 .\" environment 2 as well as the current environment.
479 .if !\n(.g .ig
480 .do rn fam @fam         \" --- set family in current environment
481 .do de fam              \" *** set font family in ev 2 and current ev
482 .do @fam \\$1
483 .ev 2
484 .do @fam \\$1
489 .\"             *** MISCELLANEOUS ROFF COMMANDS ***
492 .de hx                  \" *** suppress headers and footers next page
493 .nr ?H 1
496 .de ix                  \" *** indent, no break
497 'in \\$1
500 .de bl                  \" *** contiguous blank lines
502 .ne \\$1
504 .sp \\$1
507 .de n1                  \" *** line numbering 1
508 .nm 1
509 .xl -\w'0000'u
510 .nr ?n 1
513 .de n2                  \" *** line numbering 2
514 .nm \\$1
515 .ie \\n(.$ \
516 .       xl -\w'0000'u
517 .el \
518 .       xl \\n($lu
521 .de pa                  \" *** new page
522 .bp \\$1
525 .de ro                  \" *** roman page numbers
526 .af % i
529 .de ar                  \" *** arabic page numbers
530 .af % 1
533 .de m1                  \" *** position one space
534 .nr _0 \\n(hmu
535 .nr hm \\$1v
536 .nr tm +\\n(hmu-\\n(_0u
537 .rr _0
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
549 .nr _0 \\n(fmu
550 .nr fm \\$1v
551 .nr bm +\\n(fmu-\\n(_0u
554 .de sk                  \" *** leave a blank page (next page)
555 .if \\n(.$>0 \
556 .       tm Line \\n(c. -- I cannot skip multiple pages
557 .nr ?s 1
561 .\"             *** MISCELLANEOUS USER SUPPORT COMMANDS ***
564 .if !\n(.g .ig
565 .de re                  \" *** reset tabs (TROFF defines 15 stops default)
566 .ta T 0.5i
569 .if \n(.g .ig
570 .de re
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
575 .ie \\n(.$ \
576 .       nr $i \\$1n
577 .el \
578 .       nr $i \\n(siu*\\n($0u
581 .de hl                  \" *** draw horizontal line
583 .if '\*(.T'html' \
585 .       HR
586 .       do return
588 .ie \n(.g .do nr _I \\n[.in]
589 .el .nr _I \\n(.i
590 \l'\\n(.lu-\\n(_Iu'
595 .\"             *** PARAGRAPHING ***
598 .de pp                  \" *** paragraph
599 .lp \\n(piu
602 .de lp                  \" *** left aligned paragraph
604 .if \\n(.$ \
605 .       ti +\\$1
606 .nr $p 0 1
609 .de ip                  \" *** indented paragraph w/ optional tag
610 .if (\\n(ii>0)&(\\n(ii<1n) \
611 .       nr ii \\n(iin
612 .nr _0 \\n(ii
613 .if \\n(.$>1 \
614 .       nr _0 \\$2n
615 .@p \\n(_0u
616 .nr _I \\n(.iu
617 .in 0
618 .di |i
619 \&\\$1
622 .in \\n(_Iu
623 .ds |j \\*(|i\\
624 .ie \\w"\\*(|j" \
626 .       ti -\\n(_0u
627 .       ie \\w"\\*(|j">=\\n(_0 \
629 .               do DEVTAG-COL 1
630 \\*(|j
631 .               do DEVTAG-COL-NEXT 2
632 .               br
633 .       \}
634 .       el \
636 .               do DEVTAG-COL 1
637 \\*(|j\h'|\\n(_0u'\c
638 .               do DEVTAG-COL 2
639 .       \}
641 .el .do DEVTAG-COL 2
642 .rr _0
643 .rm |i |j
646 .de np                  \" *** numbered paragraph
647 .\" use string comparison in case user has changed format of $p
648 .if '\\n($p'-1' \
649 .       nr $p 0                 \" reset number after .bu
650 .nr $p +1                       \" increment paragraph number
651 .@p \w'\0(000)\0'u
652 .ti -\w'\0(000)\0'u
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
659 .if '\\n($p'-1' \
660 .       ns                      \" don't space between .bu paragraphs
661 .nr $p 0-1                      \" mark "bulleted paragraph" mode
662 .@p \w'\0\(bu\0'u
663 .ti -\w'\0\(bu\0'u
664 \0\(bu\0\c
667 .de @p                  \" --- initialize for paragraph
668 .do check_need_title
669 .if "\\n(.z"|e" .tm Line \\n(c. -- Unmatched continued equation
670 .in \\n($iu+\\n(pou
671 .if \\n(.$ \
672 .       in +\\$1n
673 .ce 0
675 .@F \\n(pf
676 .sz \\n(pp
677 .sp \\n(psu
678 .ne \\n(.Lv+\\n(.Vu
683 .\"             *** SECTION HEADINGS ***
686 .de sh                  \" *** section heading
688 .do check_need_title
689 .if (\\n(si>0)&(\\n(si<1n) \
690 .       nr si \\n(sin
691 .if '\*(.T'html' .nr si 0
692 .ce 0
693 .if '\*(.T'html' \
695 .       do DEVTAG-SH \\$1
696 .       do nr need_eo_h 1
698 .@d "\\$1" +1 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
699 .if !"\\$2"_" \
701 .       ds |n \&\\$2
702 .       $p "\\*(|n" "\\*($n" \\n($0
703 .       $0 "\\*(|n" "\\*($n" \\n($0
704 .       rm |n
706 .nr $p 0 1                      \" reset .np count
709 .de @d                  \" --- change section depth
710 .if !""\\$1" \
711 .       nr $0 \\$1
712 .if \\n($0&(\\n(.$>1) \
713 .       nr $\\n($0 \\$2
714 .ds $n \&\"
715 .ie \\n($0>=1 \
717 .       if '\\n($1'0' \
718 .               nr $1 1
719 .       if (\\n(.$>=3) .if !"\\$3"-" \
720 .               nr $1 \\$3
721 .       as $n \\n($1
723 .el \
724 .       nr $1 0
725 .ie \\n($0>=2 \
727 .       if '\\n($2'0' \
728 .               nr $2 1
729 .       if (\\n(.$>=4) .if !"\\$4"-" \
730 .               nr $2 \\$4
731 .       as $n .\\n($2
733 .el \
734 .       nr $2 0
735 .ie \\n($0>=3 \
737 .       if '\\n($3'0' \
738 .               nr $3 1
739 .       if (\\n(.$>=5) .if !"\\$5"-" \
740 .               nr $3 \\$5
741 .       as $n .\\n($3
743 .el \
744 .       nr $3 0
745 .ie \\n($0>=4 \
747 .       if '\\n($4'0' \
748 .               nr $4 1
749 .       if (\\n(.$>=6) .if !"\\$6"-" \
750 .               nr $4 \\$6
751 .       as $n .\\n($4
753 .el \
754 .       nr $4 0
755 .ie \\n($0>=5 \
757 .       if '\\n($5'0' \
758 .               nr $5 1
759 .       if (\\n(.$>=7) .if !"\\$7"-" \
760 .               nr $5 \\$7
761 .       as $n .\\n($5
763 .el \
764 .       nr $5 0
765 .ie \\n($0>=6 \
767 .       if '\\n($6'0' \
768 .               nr $6 1
769 .       if (\\n(.$>=8) .if !"\\$8"-" \
770 .               nr $6 \\$8
771 .       as $n .\\n($6
773 .el \
774 .       nr $6 0
777 .de sx                  \" *** heading up, no increment (2.1.1 -> 2.1)
778 .ce 0
779 .ul 0
780 .nr _0 \\n($0-1
781 .if \\n(.$ .nr _0 +1
782 .if \\n(.$ .nr _0 \\$1
783 .@d \\n(_0
784 .rr _0
785 .$p "" "" \\n($0
786 .nr $p 0 1                      \" reset .np count
789 .de uh                  \" *** unnumbered section heading
790 .$p "\\$1"
791 .$0 "\\$1"
794 .de $p                  \" $$$ print section heading
795 .if (\\n(si>0)&(\\n(.$>2) \
796 .       nr $i \\$3*\\n(si
797 .in \\n($iu
798 .ie !"\\$1\\$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
803 .       ie 0\\$3 \
804 .               ti -(\\n(siu-\\n(sou)
805 .       el \
806 .               ti +\\n(sou
807 .       @F \\n(sf
808 .       sz \\n(sp
809 .       if 0\\$3 \
810 .               $\\$3
811 .       if \w"\\$2">0 \\$2.
812 .       if \w"\\$1">0 \\$1\f1\ \ \&
814 .el \
815 .       sp \\n(psu
816 .@F \\n(pf
817 .sz \\n(pp
821 .\"             *** COLUMNNED OUTPUT ***
824 .de 2c                  \" *** double columned output
826 .if \\n($m>1 \
827 .       1c\"                    \" revert to 1c if already 2c
828 .nr $c 1
829 .nr $m 2
830 .if \\n(.$>1 \
831 .       nr $m \\$2
832 .if \\n(.$>0 \
833 .       nr $s \\$1n             \" param 1: column seperation
834 .nr $l (\\n(.l-((\\n($m-1)*\\n($s))/\\n($m
835 .xl \\n($lu
836 .mk _k
840 .de 1c                  \" *** single columned output
842 .nr $c 1
843 .nr $m 1
844 .ll \\n(_Lu                     \" return to normal output
845 .sp |\\n(.hu
846 .@O \\n(_ou
849 .de bc                  \" *** begin column
850 .sp 24i
854 .\"             *** FLOATING TABLES AND NONFLOATING BLOCKS ***
857 .de (z                  \" *** begin floating keep
858 .if \n@>4 .tm >> (z, .z=\n(.z
859 .@D 4 \\$1 \\$2
863 .de )z                  \" *** end floating keep
864 .if \n@>4 .tm >> )z, .z=\n(.z
865 .sp \\n(zsu
867 .if \n@>4 .tm -- )z << @), .z=\n(.z
868 .rr _0
869 .if !\\n(?b \
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)) \
874 .       nr ?a 1
875 .       if (\\n(dl>\\n($l)&(\\n($m>1) \
876 .               nr ?w 1         \" mark wider than one column (top)
877 .       ds |x |t
879 .el \
881 .       nr ?b 1
882 .       if (\\n(dl>\\n($l)&(\\n($m>1) \
883 .               nr ?W 1         \" mark wider than one column (bottom)
884 .       nr _b +\\n(dnu
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
888 .       ch @f -\\n(_bu
889 .       ds |x |b
891 .da \\*(|x                      \" copy to save macro
893 .ls 1
894 .nr ?k 1
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
900 .nr ?k 0
901 .rm |k\"                        \" remove the temp macro
903 .in 0
904 .ls 1
905 .xl \\n($lu
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
912 .ev 1
914 .ls 1
915 .in 0
916 .sp \\n(zsu
917 .\\$1
920 .rm \\$1
924 .de (t                  \" XXX temp ref to (z
925 .(z \\$1 \\$2
928 .de )t                  \" XXX temp ref to )t
929 .)z \\$1 \\$2
932 .de (b                  \" *** begin block
934 .@D 3 \\$1 \\$2
935 .sp \\n(bsu
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
945 .ls 1
950 .in 0
951 .xl \\n($lu
953 .rm |k
954 .sp \\n(bsu+\\n(.Lv-1v
957 .de @(                  \" --- begin keep
958 .if !"\\n(.z"" .tm Line \\n(c. -- Invalid nested keep \\n(.z
960 .di |k
961 \!'rs
964 .de @M                  \" --- set modes for display
965 .nr ?k 1
966 .@C 1
967 .@F \\n(df
968 .if \\n($R .@V
969 .vs \\n(.sp*\\n($Vu/100u
971 .if "\\*(|p"F" \
972 .       fi                      \" set fill mode if "F" parameter
973 .if \\n(_d=4 \
974 .       in 0
975 .if \\n(_d=3 \
977 .       in +\\n(biu
978 .       xl -\\n(biu
980 .if \\n(_d=1 \
981 .       ce 10000
984 .de @)                  \" --- end keep
986 .if !"\\n(.z"|k" .tm Line \\n(c. -- Close of a keep which has never been opened
987 .nr ?k 0
989 .in 0
990 .ce 0
993 .de (c                  \" *** begin block centered text
994 .if "\\n(.z"|c" .tm Line \\n(c. -- Nested .(c requests
995 .di |c
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
1003 .ev 1
1004 .ls 1
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
1013 .rm |c
1017 .\"             *** BLOCK QUOTES (OR WHATEVER) AND LISTS ***
1020 .de (q                  \" *** begin block quote
1022 .@C 1
1024 .sp \\n(qsu
1025 .in +\\n(qiu
1026 .xl -\\n(qiu
1027 .sz \\n(qp
1030 .de )q                  \" *** end block quote
1033 .sp \\n(qsu+\\n(.Lv-1v
1034 .nr ?k 0
1037 .de (l                  \" *** begin list
1039 .sp \\n(bsu
1040 .@D 3 \\$1 \\$2
1042 .if '\*(.T'html' .sp \\n(bsu
1045 .de )l                  \" *** end list
1048 .sp \\n(bsu+\\n(.Lv-1v
1049 .nr ?k 0
1053 .\"             *** PREPROCESSOR SUPPORT ***
1057 .\"     EQN
1059 .de EQ                  \" *** equation start
1060 .do if \\n[need_eo_h]>0 .do DEVTAG-EO-H
1061 .do nr need_eo_h 0
1063 .do HTML-IMAGE
1064 .if !\\n(?e \
1066 .       if "\\n(.z"|e" .tm Line \\n(c. -- Nested .EQ request
1067 .       @D 1 "\\$1" "\\$2"
1068 .       @C 2
1069 .       di |e
1071 .ls 1
1072 .in 0
1076 .de EN                  \" *** equation end
1078 .do HTML-IMAGE-END
1079 .ie "\\$1"C" \
1081 .       nr ?e 1
1082 .       sp \\n(esu
1084 .el \
1086 .       nr ?e 0
1087 .       di
1088 .       if \\n(dn \
1089 .               @q\"            \" actual equation output
1090 .       rm |e
1091 .       ev
1095 .de @q                  \" --- equation output
1096 .nr _Q \\n(dnu
1098 .sp \\n(esu                     \" output rest of preceeding text
1099 .if !"\\n(.z"" \!.ne \\n(_Qu
1100 .ne \\n(_Qu+\n(.Vu              \" keep it on one page
1101 .@C 2\"                         \" .ev 2 may be jumbled from header
1102 .if \\n(_d=1 \
1103 .       in (\\n(.lu+\\n($iu-\\n(dlu)/2u
1104 .if \\n(_d=2 \
1105 .       in \\n($iu
1106 .if \\n(_d=3 \
1107 .       in \\n(biu+\\n($iu
1108 .if \\n(_d=4 \
1109 .       in 0
1110 .mk _q
1111 .if \n@>1 .tm --@e: _Q=\\n(_Q _q=\\n(_q nl=\\n(nl |p=\\*(|p
1112 .if !"\\*(|p"" \
1114 .       rs
1115 .       sp (\\n(_Qu-\\n(.vu)/2u
1116 .       tl """\\*(|p"
1117 .       rt \\n(_qu
1120 .sp |\\n(_qu+\\n(_Qu
1121 .sp \\n(esu+\\n(.Lv-1v
1122 .rr _q
1123 .rr _Q
1127 .\"     TBL
1129 .de TS                  \" *** table start
1130 .sp \\n(bsu
1131 .do HTML-IMAGE
1132 .@C 1
1133 .fi                             \" drop into fill mode for text boxes
1134 .if "\\$1"H" \
1136 .       di |h                   \" save header part
1137 .       nr ?T 1
1139 .ls 1
1140 .ch @f -(\\n(_bu+1v)            \" set pseudo-trap for bottom line
1141 .if \\n(.p-\\n(_b-1v<=\\n(nl \
1142 .       ch @f \\n(nlu+\n(.Vu
1145 .de TH                  \" *** end header part of table
1146 .nr T. 0
1147 .T# 0
1149 .nr _T \\n(?T
1150 .nr ?T 0
1151 .ne \\n(dnu+1v
1152 .nr ?T \\n(_T
1153 .nr _i \\n(.i
1154 .in 0
1155 .|h\"                           \" put in the initial header
1156 .in \\n(_iu
1157 .rr _i
1158 .mk #T
1161 .de TE                  \" *** table end
1162 .nr ?T 0
1163 .ch @f -\\n(_bu                 \" reset pseudo-trap
1164 .if \\n(.p-\\n(_b<=\\n(nl \
1165 .       ch @f \\n(nlu+\n(.Vu
1167 .do HTML-IMAGE-END
1168 .sp \\n(bsu+\\n(.Lv-1v
1172 .de T&
1176 .\"     REFER
1178 .de ][                          \" *** refer output
1179 .if \\$1>5 .tm Bad arg to []
1180 .[\\$1
1183 .de [0                          \" --- other
1185 .ip "\\*([F.\0"
1186 .if !"\\*([A"" \\*([A,
1187 .if !"\\*([T"" \\f2\\*([T\\f1\c
1188 .if !"\\*([T"" .if !"\\*([O"" ,\ \"
1189 .ie !"\\*([O"" \\*([O
1190 .el .if !"\\*([T"" \&.
1191 .if !"\\*([D"" \\*([D.
1196 .de [1                          \" --- journal article
1198 .ip "\\*([F.\0"
1199 \\*([A,
1200 .if !"\\*([T"" \\*(lq\\*([T,\\*(rq
1201 .if "\\*([V"" \\f2\\*([J\\f1,
1202 .if !"\\*([V"" \\f2\\*([J\\f1
1203 .if !"\\*([V"" \\f3\\*([V\\f1\c
1204 .if !"\\*([N"" (\\*([N)\c
1205 .if !"\\*([P"" \
1207 .       ie \\n([P>0 \ pp.\&
1208 .       el \ p.\&
1209 \\*([P
1211 .if !"\\*([I"" .if "\\*([R"" \\*([I,
1212 (\\*([D).
1213 .if !"\\*([O"" \\*([O
1217 .de [2                          \" --- book
1219 .ip "\\*([F.\0"
1220 \\*([A, \\f2\\*([T,\\f1
1221 \\*([I\c
1222 .if !"\\*([C"" , \\*([C\c
1223  (\\*([D).
1224 .if !"\\*([G"" Gov't. ordering no. \\*([G
1225 .if !"\\*([O"" \\*([O
1229 .de [3                          \" --- article in book
1231 .ip "\\*([F.\0"
1232 \\*([A, \\*(lq\\*([T,\\*(rq
1233 .if !"\\*([P"" pp. \\*([P
1234 in \\f2\\*([B\\f1, \c
1235 .if !"\\*([E"" ed. \\*([E, \c
1236 .if !"\\*([I"" \\*([I\c
1237 .if !"\\*([C"" , \\*([C\c
1238  (\\*([D).
1239 .if !"\\*([O"" \\*([O
1243 .de [4                          \" --- report
1245 .ip "\\*([F.\0"
1246 \\*([A, \\*(lq\\*([T,\\*(rq
1247 \\*([R\c
1248 .if !"\\*([G"" \& (\\*([G)\c
1249 .if !"\\*([I"" , \\*([I\c
1250 .if !"\\*([C"" , \\*([C\c
1251  (\\*([D).
1252 .if !"\\*([O"" \\*([O
1256 .de [5                          \" --- tm style
1258 .ip "\\*([F.\0"
1259 \\*([A, \\f2\\*([T\\f1,
1260 .ie \\n(TN \\*([M.
1261 .el Bell Laboratories internal memorandum (\\*([D).
1265 .de ]<
1266 .$p References
1268 .rm (f )f
1271 .de ]>
1275 .de ]-
1276 .rm [V [P [A [T [N [C [B [O [R [I [E [D
1279 .ie \n(.V<1v \
1281 .       ds [. \s-2\v'-.4m'\f1
1282 .       ds .] \v'.4m'\s+2\fP
1284 .el \
1286 .       ds [. " [
1287 .       ds .] ]
1291 .\"     IDEAL
1293 .de IS                  \" *** start ideal picture
1294 .nr g7 \\n(.u
1295 .ls 1
1298 .de IF
1299 .if \\n(g7 .fi
1303 .de IE                  \" *** end ideal picture
1304 .if \\n(g7 .fi
1309 .\"     PIC
1311 .de PS          \" *** start picture: $1=height, $2=width in units or inches
1312 .sp 0.3
1313 .do HTML-IMAGE
1314 .nr g7 \\$2
1315 .in (u;\\n(.l-\\n(g7>?0/2)
1316 .ne \\$1u
1317 .nr g7 \\n(.u
1318 .ls 1
1321 .de PE                  \" *** end picture
1324 .if \\n(g7 .fi
1325 .do HTML-IMAGE-END
1326 .sp .6
1330 .\"     GREMLIN
1332 .de GS                  \" *** start gremlin picture
1333 .ie '\*(.T'html' \
1335 .       ie "\\$1"L" .do HTML-IMAGE-LEFT
1336 .       el .ie "\\$1"R" .do HTML-IMAGE-RIGHT
1337 .       el .do HTML-IMAGE
1339 .el \
1341 .       nr g7 (\\n(.lu-\\n(g1u)/2u
1342 .       if "\\$1"L" .nr g7 \\n(.iu
1343 .       if "\\$1"R" .nr g7 \\n(.lu-\\n(g1u
1344 .       in \\n(g7u
1345 .       nr g7 \\n(.u
1346 .       ls 1
1347 .       nf
1348 .       ne \\n(g2u
1352 .de GE                  \" *** end gremlin picture
1353 .ie '\*(.T'html' .do HTML-IMAGE-END
1354 .el \
1356 .       GF
1357 .       sp .6
1361 .de GF                  \" *** finish gremlin picture; stay at top
1364 .if \\n(g7 .fi
1368 .\"             *** FONT AIDS ***
1371 .de sz                  \" *** set point size and vertical spacing
1372 .ps \\$1
1373 .if \\n($r .@v
1374 .vs \\n(.sp*\\n($vu/100u        \" default vs at pointsize + 20%
1377 .de @v                  \" --- possibly set $v from $r
1378 .if (1i>=240u)&(1p<=\\n($r)&(\\n($r<=4p) .nr $v \\n($r00/1p
1381 .de @V                  \" --- possibly set $V from $R
1382 .if (1i>=240u)&(1p<=\\n($R)&(\\n($R<=4p) .nr $V \\n($R00/1p
1385 .de @E                  \" --- store in _F argument to \f for restoring font
1386 .ie \\n(.f<10 \
1387 .       ds _F \\n(.f
1388 .el \
1390 .       ie \\n(.f<100&\n(.g \
1391 .               ds _F (\\n(.f
1392 .       el \
1393 .               ds _F P
1397 .de r                   \" *** enter roman font
1398 .do check_need_title
1400 .ft 1
1401 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1402 .do check_need_title
1405 .de i                   \" *** enter italic
1406 .do check_need_title
1408 .ft 2
1409 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1410 .do check_need_title
1413 .de b                   \" *** enter boldface
1414 .do check_need_title
1416 .ft 3
1417 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1418 .do check_need_title
1421 .de rb                  \" *** enter real boldface
1422 .do check_need_title
1424 .ft 3
1425 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1426 .do check_need_title
1429 .de bi                  \" *** enter bold italic
1430 .do check_need_title
1432 .ft 4
1433 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1434 .do check_need_title
1437 .de u                   \" *** enter underlined word
1438 \&\\$1\l'|0\(ul'\\$2
1441 .\" a better version of u
1442 .if !\n(.g .ig
1443 .de u
1444 \Z'\\$1'\v'.25m'\D'l \w'\\$1'u 0'\v'-.25m'\\$2
1447 .de q                   \" *** enter quoted word
1448 \&\\*(lq\\$1\\*(rq\\$2
1451 .de bx                  \" *** enter boxed word
1452 .ie '\*(.T'html' \\$1\\$2
1453 .el \k~\(br\|\\$1\|\(br\l'|\\n~u\(rn'\l'|\\n~u\(ul'\^\\$2
1456 .de sm                  \" *** print in smaller font
1457 \s-1\\$1\\s0\\$2
1460 .de @F                  \" --- change font (0 -> no change)
1461 .nr ~ \\$1
1462 .if \\n~>0 \
1463 .       ft \\n~
1464 .rr ~
1468 .\"             *** FOOTNOTING ***
1471 .de (f                  \" *** begin footnote
1473 .if "\\n(.z"|f" .tm Line \\n(c. -- Invalid footnote nesting
1474 .ie "\\n(.z"" \
1476 .       nr _D \\n(dn
1477 .       nr _0 1v+\\n(nlu
1478 .       ev 2
1479 .       da |f
1480 .       in 0
1481 .       xl \\n($lu-\\n(fuu
1482 .       @F \\n(ff
1483 .       sz \\n(fp
1484 .       vs \\n(.sp*\\n($Vu/100u
1485 .       if !\\n(?f \
1487 .               nr _b +1v       \" allow space for $s
1488 .               $s
1489 .       \}
1490 .       br
1491 .       if \\n(.p-\\n(_b-\\n(_0-\\n(.h-1v-\\n(fs<0 \
1493 .               da\"            \" won't fit on page at all
1494 .               bc
1495 .               if !\\n(?f \
1496 .                       rm |f
1497 .               da |f
1498 .\" next five lines could be dropped if headers had their own environment
1499 .               in 0            \" reset everything from .bc
1500 .               xl \\n($lu-\\n(fuu
1501 .               @F \\n(ff
1502 .               sz \\n(fp
1503 .               vs \\n(.sp*\\n($Vu/100u
1504 .               if !\\n(?f \
1505 .                       $s
1506 .               br
1507 .       \}
1508 .       rr _0
1509 .       sp \\n(fsu
1510 .       nr ?f 1
1511 .       fi
1512 .       if !"\\$1"_" \
1513 .               ti \\n(fiu
1514 .       if \n@>2 .tm    << (f $f=\\n($f
1516 .el \
1518 .       ev 2
1519 .       in 0
1520 .       xl \\n($lu-\\n(fuu
1521 .       @F \\n(ff
1522 .       sz \\n(fp
1523 .       vs \\n(.sp*\\n($Vu/100u
1524 .       fi
1525 \!.(f \\$1
1526 \!.@N
1530 .de @N                  \" --- set no fill mode in the top-level diversion
1531 .ie "\\n(.z"" .nf
1532 .el \!.@N
1535 .de )f                  \" *** end footnote
1536 .ie "\\n(.z"|f" \
1538 .       if \\n* \
1539 .               nr $f +1
1540 .       ds * \\*{\\n($f\\*}\k*
1541 .       nr * 0
1542 .       in 0
1543 .       da
1544 .       ev
1545 .       if \\n(_w<\\n(dl \
1546 .               nr _w \\n(dl    \" compute maximum fn width
1547 .       nr _b +\\n(dn
1548 .       ch @f -\\n(_bu
1549 .       if \\n(.p-\\n(_b<=\\n(nl \
1550 .               ch @f \\n(nlu+\n(.Vu
1551 .       nr dn \\n(_D
1552 .       rr _D
1554 .el \
1556 .       br
1557 \!.)f
1558 .       ev
1562 .@R ff
1563 .if \n(ff<=0 \
1564 .       nr ff 1                 \" footnote font: Times Roman
1565 .@R fp
1566 .if \n(fp<=0 \
1567 .       nr fp 8                 \" footnote pointsize
1569 .de $s                  \" $$$ footnote separator
1570 \l'2i'
1574 .\"             *** DELAYED TEXT ***
1577 .de (d                  \" *** begin delayed text
1578 .am |d )d
1579 .sp \\n(bsu
1582 .de )d                  \" *** end delayed text
1583 .if \\n# \
1584 .       nr $d +1
1585 .ds # [\\n($d]\k#
1586 .rr #
1589 .de pd                  \" *** print delayed text
1591 .rm |d
1592 .nr $d 1 1
1593 .ds # [1]\k#
1597 .\"             *** INDEXES (TABLE OF CONTENTS) ***
1600 .nr _x 0 1
1601 .do nr _xn 0
1602 .af _x a
1604 .de (x                  \" *** begin index entry
1605 .if \n@>4 .tm >> (x, .z=\\n(.z
1606 .ds |X x
1607 .if \\n(.$>0 \
1608 .       ds |X \\$1
1609 .ie "\\n(.z"" \
1610 .       nr _z 0
1611 .el \
1612 .       nr _z 1
1613 .@\\n(_z
1616 .de @0                  \" --- finish (x if no current diversion
1617 .am %\\*(|X )x
1618 .sp \\n(xsu
1619 .ti -\\n(piu
1622 .de @1                  \" --- finish (x if current diversion
1623 .if "\\n(_x"z" .nr _x 0
1624 .de =\\n+(_x )x
1627 .de )x                  \" *** end index entry
1628 .if \n@>4 .tm >> )x, .z=\\n(.z
1629 .ie "\\n(.z"" \
1631 .       ds |x \\n%
1632 .       if \\n(.$>0 \
1633 .               ds |x \\$1
1634 .       if "\\*(|x"_" \
1635 .               ig ..
1636 .       am %\\*(|X ..
1637 .       if \w"\\$2">(\\n(.l-\\n(.i-\\n(.k) \
1638 .               ti +\\n(xuu
1639 \\\\a\\\\t\\$2\\*(|x
1641 .       rm |x
1642 .       rm |X
1644 .el \
1646 \!.(x \\*(|X
1647 \!\\\\*(=\\n(_x\\\\
1648 \!.)x \\$1 \\$2
1649 \!.rm =\\n(_x
1653 .de xp                  \" *** print the index
1655 .@C 2
1656 .ls 1
1657 .vs \\n(.sp*\\n($Vu/100u
1659 .in +\\n(piu
1660 .ds |X x
1661 .if \\n(.$>0 \
1662 .       ds |X \\$1
1663 .xl -(\\n(xuu+\w'...'u)
1664 .di |x
1665 .%\\*(|X
1668 .rm %\\*(|X
1669 .xl \\n($lu
1670 .rm |X
1673 .in 0
1674 .ta \\n(.lu-\\n(xuuR \\n(.luR
1678 .rm |x
1682 .\"             *** HTML VERSIONS OF .x(, .x), AND .xp ***
1685 .de (x-html    \" --- create TAG and divert text
1686 .nr _x +1
1687 .do nr _xn +1
1688 .do TAG "_x\\n[_x]
1690 .do di |x\\n[_xn]
1694 .de )x-html    \" --- end diversion
1699 .de xp-html    \" --- create list of links
1700 .do nr _xx 1
1702 .do ev xp-html-ev
1704 .do ULS
1705 .do while \\n[_xx]<=\\n[_xn] \
1707 .       br
1708 .       do unformat |x\\n[_xx]
1709 .       do di xp-html-div
1710 .       br
1711 .       ll 100i
1712 .       fi
1713 .       do |x\\n[_xx]
1714 .       br
1715 .       di
1716 .       do asciify xp-html-div
1717 .       do rm xp-html-as
1718 .       do as xp-html-as #
1719 .       do as xp-html-as _x\\n[_xx]
1720 .       ll
1721 .       LI
1722 .       do URL \\*[xp-html-as] "\\*[xp-html-div]
1723 .       do rm xp-html-as
1724 .       do nr _xx +1
1726 .do ULE
1731 .if '\*(.T'html' \
1733 .       rm (x
1734 .       do als (x (x-html
1735 .       rm )x
1736 .       do als )x )x-html
1737 .       rm xp
1738 .       do als xp xp-html
1742 .\"             *** CHAPTERS AND TITLES ***
1745 .de +c                          \" *** begin chapter
1746 .ep\"                           \" force out footnotes
1747 .if \\n(?o:\\n(?a \
1749 .       bp                      \" force out a table or more footnote
1750 .       rs
1751 .       ep
1753 .nr ?C 1
1754 .nr $f 1 1
1755 .ds * \\*{1\\*}\k*
1756 .if \\n(?R \
1757 .       pn 1
1759 .in \\n($iu                     \" reset the indent
1761 .ie \\n(.$ \
1762 .       $c "\\$1"
1763 .el \
1764 .       sp 3
1767 .de ++                  \" *** declare chapter type
1768 .nr _0 0
1769 .if "\\$1"C" \
1770 .       nr _0 1                 \" chapter
1771 .if "\\$1"RC" \
1772 .       nr _0 11                \" renumbered chapter
1773 .if "\\$1"A" \
1774 .       nr _0 2                 \" appendix
1775 .if "\\$1"RA" \
1776 .       nr _0 12                \" renumbered appendix
1777 .if "\\$1"P" \
1778 .       nr _0 3                 \" preliminary material
1779 .if "\\$1"B" \
1780 .       nr _0 4                 \" bibliographic material
1781 .if "\\$1"AB" \
1782 .       nr _0 5                 \" abstract
1783 .if \\n(_0=0 \
1784 .       tm Line \\n(c. -- Bad mode to .++
1785 .nr ?R 0
1786 .if \\n(_0>10 \
1788 .       nr ?R 1
1789 .       nr _0 -10
1791 .nr ch 0 1
1792 .if (\\n(_0=3):(\\n(_0=5) \
1793 .       pn 1                    \" must do before .ep
1794 .if !\\n(_0=\\n(_M .if \\n(_M=3 \
1795 .       pn 1                    \" must do before .ep
1796 .ep\"                           \" end page for correct page number types
1797 .if \\n(_0=1 \
1799 .       af ch 1
1800 .       af % 1
1802 .if \\n(_0=2 \
1804 .       af ch A
1805 .       af % 1
1807 .if \\n(_0=3 \
1808 .       af % i
1809 .if \\n(_0=4 \
1810 .       af % 1
1811 .if \\n(_0=5 \
1812 .       af % 1
1813 .if \\n(.$>1 \
1814 .       he \\$2
1815 .nr _M \\n(_0
1816 .rr _0
1819 .de $c                  \" $$$ print chapter title
1820 .sz 12
1821 .ft 3
1822 .ce 1000
1823 .if \\n(_M<3 \
1824 .       nr ch +1
1825 .ie \\n(_M=1 CHAPTER\ \ \\n(ch
1826 .el .if \\n(_M=2 APPENDIX\ \ \\n(ch
1827 .if \w"\\$1" .sp 3-\\n(.L
1828 .if \w"\\$1" \\$1
1829 .if (\\n(_M<3):(\w"\\$1") \
1830 .       sp 4-\\n(.L
1831 .ce 0
1834 .ie \\n(_M=1 \
1835 .       $C Chapter \\n(ch "\\$1"
1836 .el .if \\n(_M=2 \
1837 .       $C Appendix \\n(ch "\\$1"
1840 .de tp                  \" *** title page
1845 .pn \\n%
1848 .\"             *** DATES ***
1849 .if \n(mo=1 .ds mo January
1850 .if \n(mo=2 .ds mo February
1851 .if \n(mo=3 .ds mo March
1852 .if \n(mo=4 .ds mo April
1853 .if \n(mo=5 .ds mo May
1854 .if \n(mo=6 .ds mo June
1855 .if \n(mo=7 .ds mo July
1856 .if \n(mo=8 .ds mo August
1857 .if \n(mo=9 .ds mo September
1858 .if \n(mo=10 .ds mo October
1859 .if \n(mo=11 .ds mo November
1860 .if \n(mo=12 .ds mo December
1861 .if \n(dw=1 .ds dw Sunday
1862 .if \n(dw=2 .ds dw Monday
1863 .if \n(dw=3 .ds dw Tuesday
1864 .if \n(dw=4 .ds dw Wednesday
1865 .if \n(dw=5 .ds dw Thursday
1866 .if \n(dw=6 .ds dw Friday
1867 .if \n(dw=7 .ds dw Saturday
1868 .nr y2 \n(yr%100
1869 .af y2 00
1870 .nr y4 \n(yr+1900
1871 .ds td \*(mo \n(dy, \n(y4
1874 .\"             *** PARAMETRIC INITIALIZATIONS ***
1877 .rr x
1878 .nr $v \n(.v00+\n(.sp-1/\n(.sp  \" vs as percentage of ps for .sz request
1879 .nr $V \n($v                    \" same for displays & footnotes
1880 .nr hm 4v                       \" header margin
1881 .nr tm 7v                       \" top margin
1882 .nr bm 6v                       \" bottom margin
1883 .nr fm 3v                       \" footer margin
1884 .nr tf 3                        \" title font: (real) Times Bold
1885 .nr tp 10                       \" title point size
1886 .hy 14
1887 .nr bi 4m                       \" indent for blocks
1888 .nr pi 5n                       \" indent for paragraphs
1889 .nr pf 1                        \" normal text font
1890 .nr pp 10                       \" normal text point size
1891 .nr qi 4n                       \" indent for quotes
1892 .nr qp -1                       \" down one point
1893 .nr ii 5n                       \" indent for .ip's and .np's
1894 .nr $m 1                        \" max number of columns
1895 .nr $s 4n                       \" column separation
1896 .nr sf 3                        \" section font -- Times Bold
1897 .nr sp 10                       \" section title pointsize
1898 .nr ss 12p                      \" section prespacing
1899 .nr si 0                        \" section indent
1902 .\"             *** OTHER INITIALIZATION ***
1905 .\" GNU pic sets this register to 1, to indicate that \x should not be used.
1906 .@R 0x
1907 .ds { \v'-0.4m'\x'\\n(0x=0*-0.2m'\s-3
1908 .ds } \s0\v'0.4m'
1909 .\" for compatibility with traditional -me
1910 .\" (the first will work only in compatibility mode)
1911 .ds [ \*{
1912 .ds ] \*}
1913 .ds < \v'0.4m'\x'\\n(0x=0*0.2m'\s-3
1914 .ds > \s0\v'-0.4m'
1915 .ds - \(em
1916 .\" Avoid warnings from groff -ww.
1917 .@S |0
1918 .@S |1
1919 .@S |2
1920 .@S |3
1921 .@S $H
1922 .@S $0
1923 .@S $1
1924 .@S $2
1925 .@S $3
1926 .@S $4
1927 .@S $5
1928 .@S $6
1929 .@S $7
1930 .@S $8
1931 .@S $9
1932 .@S ..
1934 .@R po\"                        \" simulated page offset
1935 .@R $0\"                        \" section depth
1936 .@R $i\"                        \" paragraph base indent
1937 .@R $p\"                        \" numbered paragraph number
1938 .@R $r\"                        \" ratio of vs to ps (may override $v)
1939 .@R $R\"                        \" same for displays (may override $V)
1940 .@R df\"                        \" display font: same as surrounding text
1941 .@R so\"                        \" additional section title offset
1942 .@R fu\"                        \" footnote undent
1943 .@R bt\"                        \" block keep threshold
1944 .@R *\"                         \" has \** been referenced?
1945 .@R ?a\"                        \" pending floating keep at page top?
1946 .@R ?b\"                        \" pending floating keep at page bottom?
1947 .@R ?C\"                        \" at chapter header?
1948 .@R ?e\"                        \" in equation?
1949 .@R ?H\"                        \" suppress headers and footers next page?
1950 .@R ?I\"                        \" has the header trap been sprung?
1951 .@R ?n\"                        \" n1 mode?
1952 .@R ?o\"                        \" footnote overflow?
1953 .@R ?R\"                        \" renumbered chapter?
1954 .@R ?s\"                        \" skip next page?
1955 .@R ?T\"                        \" inside .TS H?
1956 .@R ?W\"                        \" wide floating keep at page bottom?
1957 .@R ?w\"                        \" wide floating keep at page top?
1959 .nr fi 0.3i
1960 .nr _o \n(.o
1961 .nr $b 3                        \" bold
1962 .nr ps 0.35v
1963 .if \n(ps<\n(.V .nr ps \n(.V
1964 .nr bs \n(ps                    \" block pre/post spacing
1965 .nr qs \n(ps                    \" quote pre/post spacing
1966 .nr zs 1v                       \" float-block pre/postspacing
1967 .nr xs 0.2v                     \" index prespacing
1968 .nr xu 0.5i                     \" index undent
1969 .nr fs 0.2v                     \" footnote prespacing
1970 .nr es 0.5v                     \" equation pre/postspacing
1971 .if \n(es<\n(.V .nr es \n(.V
1972 .wh 0 @h                        \" set header
1973 .nr $l \n(.lu                   \" line length
1974 .nr _L \n(.lu                   \" line length of page
1975 .nr $c 1                        \" current column number
1976 .nr $f 1 1                      \" footnote number
1977 .ds * \*{1\*}\k*\"              \" footnote "name"
1978 .nr $d 1 1                      \" delayed text number
1979 .ds # [1]\k#\"                  \" delayed text "name"
1980 .nr _M 1                        \" chapter mode is chapter
1981 .ds lq \(lq\"                   \" left quote
1982 .ds rq \(rq\"                   \" right quote
1983 .em @z
1986 .\"             *** FOREIGN LETTERS AND SPECIAL CHARACTERS ***
1989 .ds #h ((1u-(\\\\n(.fu%2u))*0.13m)
1990 .ds #v 0.6m
1992 .\"                     \" accents
1993 .ds ' \k_\h'-(\\n(.wu*8/10-\*(#h)'\(aa\h'|\\n_u'
1994 .ds ` \k_\h'-(\\n(.wu*7/10-\*(#h)'\(ga\h'|\\n_u'
1996 .\"                     \" umlaut
1997 .ds : \k_\h'-(\\n(.wu*8/10-\*(#h+0.1m)'\v'-\*(#v'\z.\h'0.2m'.\h'|\\n_u'\v'\*(#v'
1999 .\"                     \" circumflex and tilde
2000 .ds ^ \k_\h'-(\\n(.wu-\*(#h-0.05m)'^\h'|\\n_u'
2001 .ds ~ \k_\h'-(\\n(.wu-\*(#h-0.05m)'~\h'|\\n_u'
2003 .\"                     \" cedilla and czech
2004 .ds , \k_\h'-(\\n(.wu)',\h'|\\n_u'
2005 .ds v \k_\h'-(\\n(.wu*9/10-\*(#h)'\v'-\*(#v'\s-4v\s0\v'\*(#v'\h'|\\n_u'
2007 .\"                     \" Norwegian A or angstrom
2008 .ds o \k_\h'-(\\n(.wu+\w'\(de'u-\*(#h)/2u'\v'-0.4n'\z\(de\v'0.4n'\h'|\\n_u'
2010 .\"                     \" there exists, for all
2011 .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'
2012 .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'
2013 .rm #h #v
2014 .ll 6.0i
2015 .lt 6.0i
2017 .de @U
2018 .tm The \\$1 macro has been removed from this version of the -me macros.
2021 .de lo
2022 .@U lo
2025 .de th
2026 .@U th
2029 .de ac
2030 .@U ac
2033 .\" EOF