Annotation of researchv10dc/vol2/troff/tut.ms, revision 1.1.1.1

1.1       root        1: .so ../ADM/mac
                      2: .XX trofftut 223 "A Troff Tutorial"
                      3: .nr PI .2i
                      4: .nr PD 2u
                      5: .de UC
                      6: \\$3\s-1\\$1\s+1\\$2
                      7: ..
                      8: .de BD
                      9: \&\\$3\f1\\$1\h'-\w'\\$1'u+3u'\\$1\fP\\$2
                     10: ..
                     11: .....TM 76-1273-7 39199 39199-11
                     12: .TL
                     13: A Troff Tutorial\(dg
                     14: .AU
                     15: Brian W. Kernighan
                     16: .AI
                     17: .MH
                     18: .AB
                     19: .PP
                     20: .IT Troff
                     21: is a text-formatting program for typesetters and laser printers.
                     22: Such devices normally provide multiple fonts,
                     23: and a substantial number of mathematical symbols
                     24: and other special characters.
                     25: Characters can be printed in a range of sizes,
                     26: and placed anywhere on the page.
                     27: .PP
                     28: .IT Troff
                     29: allows the user full control over fonts,
                     30: sizes, and character positions,
                     31: as well as the usual features of a formatter \(em
                     32: right-margin justification, automatic hyphenation,
                     33: page titling and numbering, and so on.
                     34: It also provides macros, arithmetic variables and operations,
                     35: and conditional testing, for complicated formatting tasks.
                     36: .PP
                     37: This document is an introduction to the most basic use of
                     38: .IT troff .
                     39: It presents just enough information to enable the user
                     40: to do simple formatting
                     41: tasks like making viewgraphs,
                     42: and to make incremental changes to existing packages
                     43: of
                     44: .IT troff
                     45: commands.
                     46: .AE
                     47: .2C
                     48: .NH
                     49: Introduction
                     50: .tr ^.
                     51: .PP
                     52: .FS
                     53: \(dg This is a version of |reference(troff tutorial v7man) revised by B. W. Kernighan.
                     54: .FE
                     55: .IT Troff
                     56: is a text-formatting program,
                     57: written by J. F. Ossanna,
                     58: for producing
                     59: high-quality printed output from phototypesetters and laser printers.
                     60: This document is an example of
                     61: .IT troff
                     62: output.
                     63: .PP
                     64: The single most important rule
                     65: of using
                     66: .IT troff
                     67: is
                     68: not to use it directly, but through some intermediary.
                     69: In many ways,
                     70: .IT troff
                     71: resembles an assembly language \(em
                     72: a remarkably powerful and flexible one \(em
                     73: but nonetheless such that many operations must be specified
                     74: at a level of detail and in a form that is too hard 
                     75: for most people to use effectively.
                     76: .PP
                     77: For some special applications, there are programs that provide
                     78: an interface to
                     79: .IT troff
                     80: for the majority of users.
                     81: For example,
                     82: .IT eqn 
                     83: |reference(latest eqn)
                     84: provides an easy to learn language for typesetting mathematics;
                     85: the 
                     86: .IT eqn
                     87: user
                     88: need know no 
                     89: .IT troff
                     90: whatsoever
                     91: to typeset mathematics.
                     92: .IT Tbl
                     93: |reference(latest tbl)
                     94: provides the same convenience for producing tables.
                     95: .PP
                     96: For producing straight text (which may well contain mathematics or tables), there are a number of ``macro packages''
                     97: that define formatting rules and operations for specific styles
                     98: of documents,
                     99: and reduce the amount of
                    100: direct contact with 
                    101: .IT troff .
                    102: In particular, the
                    103: .CW -ms ,
                    104: .CW -mpm
                    105: and
                    106: .CW -mm
                    107: packages
                    108: for Bell Labs internal memoranda and external papers
                    109: provide most of the facilities needed
                    110: for a wide range of document preparation.
                    111: (This paper was prepared with
                    112: .CW -mpm .)
                    113: There are also packages for viewgraphs,
                    114: various journals,
                    115: and other special applications.
                    116: Typically you will find these packages easier to use
                    117: than
                    118: .IT troff
                    119: once you get beyond the most trivial operations;
                    120: you should always consider them first.
                    121: .PP
                    122: In the few cases where existing packages don't do the whole job,
                    123: the solution is
                    124: .ul
                    125: not
                    126: to write an entirely new set of
                    127: .IT troff
                    128: instructions from scratch, but to make small changes
                    129: to adapt packages that already exist.
                    130: .PP
                    131: In accordance with this philosophy of letting someone else
                    132: do the work,
                    133: the part of
                    134: .IT troff
                    135: described here is only a small part of the whole,
                    136: although it tries to concentrate on the more useful parts.
                    137: In any case, there is no attempt to be complete.
                    138: Rather, the emphasis is on showing how to do simple things,
                    139: and how to make incremental changes to what already exists.
                    140: The contents of the remaining sections are:
                    141: .SP .5
                    142: .nf
                    143: .in .1i
                    144: .ta .3i
                    145: \02.   Point sizes; line spacing
                    146: \03.   Fonts and special characters
                    147: \04.   Indents and line lengths
                    148: \05.   Tabs
                    149: \06.   Local motions: drawing lines and characters
                    150: \07.   Strings
                    151: \08.   Introduction to macros
                    152: \09.   Titles, pages and numbering
                    153: 10.    Number registers and arithmetic
                    154: 11.    Macros with arguments
                    155: 12.    Conditionals
                    156: 13.    Environments
                    157: 14.    Diversions
                    158:        Appendix A:  Character set
                    159: .SP .5
                    160: .in 0
                    161: .fi
                    162: .PP
                    163: To use
                    164: .IT troff
                    165: you have to prepare not only the actual text you want printed,
                    166: but some information that tells
                    167: .ul
                    168: how
                    169: you want it printed.
                    170: For
                    171: .IT troff
                    172: the text
                    173: and
                    174: the formatting information are often intertwined quite intimately.
                    175: Most commands to
                    176: .IT troff
                    177: are placed on a line separate from the text itself,
                    178: beginning with a period (one command per line).
                    179: For example,
                    180: .P1
                    181: Some text.
                    182: ^ps 14
                    183: Some more text.
                    184: .P2
                    185: will change the `point size',
                    186: that is,
                    187: the size of the letters being printed,
                    188: to `14 point' (one point is 1/72 inch) like this:
                    189: .P1
                    190: .ft 1
                    191: .fi
                    192: Some text.
                    193: .ps 14
                    194: Some more text.
                    195: .ps 10
                    196: .P2
                    197: .PP
                    198: Occasionally, though,
                    199: something special occurs in the middle of a line \(em
                    200: to produce
                    201: .P1
                    202: .ft 1
                    203: Area = \(*p\fIr\fR\|\s8\u2\d\s0
                    204: .P2
                    205: you have to type
                    206: .P1
                    207: Area = \e(*p\efIr\efR\e\^|\^\es8\eu2\ed\es0
                    208: .P2
                    209: (which we will explain shortly).
                    210: The backslash character
                    211: .CW  \e 
                    212: is used 
                    213: to introduce
                    214: .IT troff
                    215: commands and special characters within a line of text.
                    216: .NH
                    217: Point Sizes; Line Spacing
                    218: .PP
                    219: As mentioned above,
                    220: the command
                    221: .CW .ps
                    222: sets the point size.
                    223: One point is 1/72 inch,
                    224: so 6-point characters are at most 1/12 inch high,
                    225: and 36-point characters are \(12 inch.
                    226: Different devices provide different sets of sizes;
                    227: a representative set is shown below.
                    228: .P1 1
                    229: .ft 1
                    230: .ps 6
                    231: 6 point: Pack my box with five dozen liquor jugs.
                    232: .ps 7
                    233: .vs 8p
                    234: 7 point: Pack my box with five dozen liquor jugs.
                    235: .vs 9p
                    236: .ps 8
                    237: 8 point: Pack my box with five dozen liquor jugs.
                    238: .vs 10p
                    239: .ps 9
                    240: 9 point: Pack my box with five dozen liquor jugs.
                    241: .vs 11p
                    242: .ps 10
                    243: 10 point: Pack my box with five dozen liquor
                    244: .vs 12p
                    245: .ps 11
                    246: 11 point: Pack my box with five dozen 
                    247: .vs 14p
                    248: .ps 12
                    249: 12 point: Pack my box with five dozen
                    250: .vs 16p
                    251: .ps 14
                    252: 14 point: Pack my box with five
                    253: .vs 24p
                    254: \s1616 point\s18 18 point\s20 20 point
                    255: .vs 40p
                    256: \s2222\s24 24\s28 28\s36 36
                    257: .ps 10
                    258: .vs 12p
                    259: .P2
                    260: .PP
                    261: If the number after
                    262: .CW .ps 
                    263: is not a
                    264: legal size,
                    265: it is rounded up to the next valid value.
                    266: If no number follows
                    267: .CW .ps ,
                    268: .IT troff
                    269: reverts to the previous size, whatever it was.
                    270: .IT troff
                    271: begins with point size 10,
                    272: which is usually fine.
                    273: This document is printed in \n(.s point.
                    274: .PP
                    275: The point size can also be changed in the middle of a line
                    276: or even a word
                    277: with the in-line command
                    278: .CW \es .
                    279: To produce
                    280: .P1
                    281: .ft 1
                    282: \s8UNIX\s10 ran on a \s8PDP-\s1011/45
                    283: .P2
                    284: type
                    285: .P1 0
                    286: \es8UNIX\es10 ran on a \es8PDP-\es1011/45
                    287: .P2
                    288: As above,
                    289: .CW \es 
                    290: should be followed by a legal point size,
                    291: except that
                    292: .CW \es0 
                    293: causes the size to revert to
                    294: its previous value.
                    295: Notice that
                    296: .CW \es1011
                    297: can be understood correctly as `size 10, followed by an 11', if the size is legal,
                    298: but not otherwise.
                    299: Be cautious with similar constructions.
                    300: .PP
                    301: Relative size changes are also legal and useful:
                    302: .P1
                    303: \es-2UNIX\es+2
                    304: .P2
                    305: temporarily decreases the size, whatever it is, by two points, then
                    306: restores it, producing \s-2UNIX\s+2.
                    307: Relative size changes have the advantage that the size difference
                    308: is independent of the starting size of the document.
                    309: The amount of the relative change is restricted
                    310: to a single digit.
                    311: .PP
                    312: The other parameter that determines what the type looks like
                    313: is the spacing between lines,
                    314: which is set independently of the point size.
                    315: Vertical spacing is measured from the bottom of one line to
                    316: the bottom of the next.
                    317: The command to control vertical spacing is
                    318: .CW .vs .
                    319: For running text, it is usually best to set the vertical spacing
                    320: about 20% bigger than the character size.
                    321: For example, so far in this document, we have used
                    322: ``10 on 12'', that is,
                    323: .P1
                    324: ^ps 10
                    325: ^vs 12p
                    326: .P2
                    327: If we changed to
                    328: .P1
                    329: ^ps 10
                    330: ^vs 10p
                    331: .P2
                    332: .vs 10p
                    333: .ne 3
                    334: the running text would look like this.
                    335: After a few lines, you will agree it looks a little cramped.
                    336: The right vertical spacing is partly a matter of taste, depending on how
                    337: much text you want to squeeze into a given space,
                    338: and partly a matter of traditional printing style.
                    339: By default,
                    340: .IT troff
                    341: uses 10 on 12.
                    342: .PP
                    343: .vs 14p
                    344: .ps 12
                    345: Point size and vertical spacing make a substantial difference in the amount of text
                    346: per square inch.
                    347: This is 12 on 14.
                    348: .ne 2
                    349: .PP
                    350: .ne 2
                    351: .ps 6
                    352: .vs 7p
                    353: Point size and vertical spacing make a substantial difference in the amount of text
                    354: per square inch.
                    355: For example,
                    356: 10 on 12 uses about twice as much space as 7 on 8.
                    357: This is 6 on 7, which is even smaller.
                    358: It packs a lot more words per line,
                    359: but you can go blind trying to read it.
                    360: .PP
                    361: When used without arguments,
                    362: .CW .ps
                    363: and
                    364: .CW .vs
                    365: revert to the previous size and vertical spacing
                    366: respectively.
                    367: .PP
                    368: The command
                    369: .CW .sp
                    370: is used to get extra vertical space.
                    371: Unadorned, 
                    372: it gives you one extra blank line (one
                    373: .CW .vs ,
                    374: whatever that has been set to).
                    375: Typically, that's more or less than you want,
                    376: so
                    377: .CW .sp
                    378: can be followed by
                    379: information about how much space you want \(em
                    380: .P1
                    381: ^sp 2i
                    382: .P2
                    383: means `two inches of vertical space'.
                    384: .P1
                    385: ^sp 2p
                    386: .P2
                    387: means `two points of vertical space';
                    388: and
                    389: .P1
                    390: ^sp 2
                    391: .P2
                    392: means `two vertical spaces' \(em two of whatever
                    393: .CW .vs
                    394: is set to
                    395: (this can also be made explicit with
                    396: .CW .sp\ 2v );
                    397: .IT troff
                    398: also understands decimal fractions in most places,
                    399: so
                    400: .P1
                    401: ^sp 1.5i
                    402: .P2
                    403: is a space of 1.5 inches.
                    404: These same scale factors can be used after
                    405: .CW .vs
                    406: to define line spacing, and in fact after most commands
                    407: that deal with physical dimensions.
                    408: .PP
                    409: It should be noted that all size numbers are converted internally
                    410: to `machine units', which are much smaller, reflecting the finer
                    411: resolution of particular output devices.
                    412: Many laser printers run at 300 units/inch;
                    413: typesetters are often more than 1000 units/inch.
                    414: .NH
                    415: Fonts and Special Characters
                    416: .PP
                    417: .IT Troff
                    418: allows many different fonts at any one time.
                    419: Normally a family of serif fonts (Times roman, italic and bold),
                    420: a family of san-serif fonts (Helvetica), and a collection of special characters
                    421: are available.
                    422: .P1 .2i
                    423: .ft R
                    424: abcdefghijklmnopqrstuvwxyz 0123456789
                    425: ABCDEFGHIJKLMNOPQRSTUVWXYZ
                    426: .ft I
                    427: abcdefghijklmnopqrstuvwxyz 0123456789
                    428: ABCDEFGHIJKLMNOPQRSTUVWXYZ
                    429: .ft B
                    430: abcdefghijklmnopqrstuvwxyz 0123456789
                    431: ABCDEFGHIJKLMNOPQRSTUVWXYZ
                    432: .ft BI
                    433: abcdefghijklmnopqrstuvwxyz 0123456789
                    434: ABCDEFGHIJKLMNOPQRSTUVWXYZ
                    435: .sp 3p
                    436: .ft H
                    437: abcdefghijklmnopqrstuvwxyz 0123456789
                    438: ABCDEFGHIJKLMNOPQRSTUVWXYZ
                    439: .ft HI
                    440: abcdefghijklmnopqrstuvwxyz 0123456789
                    441: ABCDEFGHIJKLMNOPQRSTUVWXYZ
                    442: .ft HB
                    443: abcdefghijklmnopqrstuvwxyz 0123456789
                    444: ABCDEFGHIJKLMNOPQRSTUVWXYZ
                    445: .P2
                    446: A representative collection of
                    447: greek, mathematical symbols and miscellaneous other characters are
                    448: listed in Appendix A.
                    449: Appendix B shows the font families commonly available on Postscript printers;
                    450: your mileage may vary.
                    451: .PP
                    452: .IT Troff
                    453: prints in roman unless told otherwise.
                    454: To switch into bold, use
                    455: the
                    456: .CW .ft
                    457: command
                    458: .P1
                    459: ^ft B
                    460: .P2
                    461: and for italics,
                    462: .P1
                    463: ^ft I
                    464: .P2
                    465: To return to roman, use
                    466: .CW .ft\ R ;
                    467: to return to the previous font,
                    468: whatever it was,
                    469: use either
                    470: .CW .ft\ P
                    471: or just
                    472: .CW .ft  .
                    473: The `underline' command
                    474: .P1
                    475: ^ul
                    476: .P2
                    477: causes the next input line to print in italics.
                    478: .CW .ul
                    479: can be followed by a count to
                    480: indicate that more than one line is to be italicized.
                    481: .PP
                    482: Fonts can also be changed within a line or word
                    483: with the in-line command
                    484: .CW \ef :
                    485: .P1
                    486: \fBbold\fIface\fR text
                    487: .P2
                    488: is produced by
                    489: .P1
                    490: \efBbold\efIface\efR text
                    491: .P2
                    492: If you want to do this so the previous font, whatever it was,
                    493: is left undisturbed, insert extra
                    494: .CW \efP
                    495: commands, like this:
                    496: .P1
                    497: \efBbold\efP\efIface\efP\efR text\efP
                    498: .P2
                    499: Because only the immediately previous font is remembered,
                    500: you have to restore the previous font after each change
                    501: or you can lose it.
                    502: The same is true of 
                    503: .CW .ps
                    504: and
                    505: .CW .vs
                    506: when used without an argument.
                    507: .PP
                    508: There are many other fonts available besides the standard set.
                    509: Normally you can just use a font by naming it,
                    510: but if an entire document is to be printed
                    511: in a non-standard set of fonts,
                    512: it is best to mount the fonts explicitly.
                    513: This tells 
                    514: .IT troff
                    515: which fonts you will make the most use of.
                    516: The
                    517: .CW .fp
                    518: command
                    519: .P1
                    520: ^fp 3 PB
                    521: .P2
                    522: says that the Palatino Bold font
                    523: .ft PB
                    524: (which looks like this)
                    525: .ft
                    526: is mounted on position 3.
                    527: .PP
                    528: It is possible to make a document relatively independent
                    529: of the actual fonts used to print it
                    530: by using font numbers instead of names;
                    531: for example,
                    532: .CW \ef3
                    533: and
                    534: .CW ".ft 3
                    535: mean `whatever font is mounted at position 3',
                    536: and thus work for any setting.
                    537: The standard macro packages assume that fonts 1 through 4 contain
                    538: roman, italic, bold, and bold italic members of a family.
                    539: .PP
                    540: There is also a way to get synthetic bold fonts
                    541: by overstriking letters with a slight offset,
                    542: with the
                    543: .CW .bd
                    544: command;
                    545: it is illustrated in Section 11.
                    546: .PP
                    547: Special characters have four-character names beginning with
                    548: .CW \e( ;
                    549: they may be inserted anywhere.
                    550: For example,
                    551: .P1
                    552: .ft 1
                    553: \(14 + \(12 = \(34
                    554: .P2
                    555: is produced by
                    556: .P1
                    557: \e(14 + \e(12 = \e(34
                    558: .P2
                    559: In particular,
                    560: greek letters are all of the form
                    561: .CW  \e(*\- ,
                    562: where
                    563: .CW -
                    564: is an upper or lower case roman letter
                    565: reminiscent of the greek.
                    566: Thus
                    567: to get
                    568: .P1
                    569: .ft 1
                    570: \(*S(\(*a\(mu\(*b) \(-> \(if
                    571: .P2
                    572: in bare
                    573: .IT troff
                    574: we have to type
                    575: .P1
                    576: \e(*S(\e(*a\e(mu\e(*b) \e(\(mi> \e(if
                    577: .P2
                    578: That line is unscrambled as follows:
                    579: .P1
                    580: .ta 1i 2i 3i
                    581: \e(*S  \(*S
                    582: (      (
                    583: \e(*a  \(*a
                    584: \e(mu  \(mu
                    585: \e(*b  \(*b
                    586: )      )
                    587: \e(\(mi>       \(->
                    588: \e(if  \(if
                    589: .P2
                    590: Appendix A contains a sample of special names.
                    591: .PP
                    592: In
                    593: .IT eqn 
                    594: the same effect can be achieved with the input
                    595: .P1
                    596: SIGMA ( alpha times beta ) \-> inf
                    597: .P2
                    598: which is less concise, but clearer to the uninitiated.
                    599: .PP
                    600: Notice that
                    601: each
                    602: four-character name is a single character
                    603: as far as
                    604: .IT troff
                    605: is concerned \(em
                    606: the
                    607: `translate' command
                    608: .P1
                    609: ^tr \e(mi\e(em
                    610: .P2
                    611: is perfectly clear, meaning
                    612: .P1
                    613: ^tr \f1\(mi\h'.1m'\(em
                    614: .P2
                    615: that is, to translate \(mi into \(em.
                    616: .PP
                    617: Some characters are automatically translated into others:
                    618: grave  \(ga  and acute  \(aa  accents (apostrophes) become open and close single quotes
                    619: `\0';
                    620: the combination of ``...'' is generally preferable to the double quotes "...".
                    621: Similarly a typed minus sign becomes a hyphen -.
                    622: To print an explicit \- sign, use
                    623: .CW \e- .
                    624: To print a backslash, use
                    625: .CW \ee .
                    626: .NH
                    627: Indents and Line Lengths
                    628: .PP
                    629: .IT Troff
                    630: starts with a line length of 6.5 inches,
                    631: too wide for 8\(12\(mu11 paper.
                    632: To reset the line length,
                    633: use
                    634: the
                    635: .CW .ll
                    636: command:
                    637: .P1
                    638: ^ll 6i
                    639: .P2
                    640: As with
                    641: .CW .sp ,
                    642: the actual length can be specified in several ways;
                    643: inches are probably the most intuitive.
                    644: .PP
                    645: Output is normally positioned an inch from the left edge of the paper.
                    646: To reset the default physical left margin (``page offset''),
                    647: use the
                    648: .CW .po
                    649: command.
                    650: .P1
                    651: ^po 0
                    652: .P2
                    653: sets the offset as far to the left as it will go.
                    654: .PP
                    655: The indent command
                    656: .CW .in
                    657: causes the left margin to be indented
                    658: by some specified amount from the page offset.
                    659: If we use
                    660: .CW .in
                    661: to move the left margin in,
                    662: and
                    663: .CW .ll
                    664: to move the right margin to the left,
                    665: we can
                    666: make offset blocks of text:
                    667: .P1
                    668: ^in 0.3i
                    669: ^ll \(mi0.3i
                    670: text to be set into a block
                    671: ^ll +0.3i
                    672: ^in \(mi0.3i
                    673: .P2
                    674: will create a block that looks like this:
                    675: .P1
                    676: .fi
                    677: .ll -0.3i
                    678: .ft 1
                    679: Pater noster qui est in caelis sanctificetur nomen tuum;
                    680: adveniat regnum tuum; fiat voluntas tua, sicut in caelo,
                    681: et in terra. ...
                    682: Amen.
                    683: .ll +0.3i
                    684: .P2
                    685: Notice the use of `+' and `\(mi'
                    686: to specify the amount of change.
                    687: These change the previous setting by the specified amount,
                    688: rather than just overriding it.
                    689: The distinction is quite important:
                    690: .CW .ll\ +1i
                    691: makes lines one inch longer;
                    692: .CW .ll\ 1i
                    693: makes them one inch
                    694: .ul
                    695: long.
                    696: .PP
                    697: With 
                    698: .CW .in ,
                    699: .CW .ll
                    700: and
                    701: .CW .po ,
                    702: the previous value is used if no argument is specified.
                    703: .PP
                    704: To indent a single line, use the `temporary indent'
                    705: command
                    706: .CW .ti .
                    707: For example, all paragraphs in this memo
                    708: effectively begin with the command
                    709: .P1
                    710: ^ti 3
                    711: .P2
                    712: Three of what?
                    713: The default unit for
                    714: .CW .ti ,
                    715: as for most horizontally oriented commands
                    716: .CW .ll , (
                    717: .CW .in ,
                    718: .CW .po ),
                    719: is ems;
                    720: an em is roughly the width of the letter `m'
                    721: in the current point size.
                    722: (Precisely, a em in size
                    723: .ul
                    724: p
                    725: is
                    726: .ul
                    727: p
                    728: points.)
                    729: Although inches are usually clearer than ems to people who don't set type
                    730: for a living,
                    731: ems have a place:
                    732: they are a measure of size that is proportional to the current point size.
                    733: If you want to make text that keeps its proportions
                    734: regardless of point size,
                    735: you should use ems for all dimensions.
                    736: Ems can be specified as scale factors directly,
                    737: as in
                    738: .CW .ti\ 2.5m .
                    739: .PP
                    740: Lines can also be indented negatively
                    741: if the indent is already positive:
                    742: .P1
                    743: ^ti \(mi0.3i
                    744: .P2
                    745: causes the next line to be moved back three tenths of an inch.
                    746: Thus to make a decorative initial capital,
                    747: we indent the whole paragraph, then move the letter `P' back with
                    748: a
                    749: .CW .ti
                    750: command:
                    751: .KS
                    752: .SP .5
                    753: .ll -0.3i
                    754: .fi
                    755: .in +.6i
                    756: .ti -0.3i
                    757: .ft 1
                    758: \s36\v'2'P\v'-2'\s0ater noster qui est in caelis sanctificetur
                    759: nomen tuum;
                    760: adveniat regnum tuum;
                    761: 'in -.3i
                    762: fiat voluntas tua,
                    763: sicut in caelo, et in terra. ...
                    764: Amen.
                    765: .ll +0.3i
                    766: .in 0
                    767: .br
                    768: .SP .5
                    769: .KE
                    770: .LP
                    771: Of course, there is also some trickery to make the `P'
                    772: bigger (just a
                    773: .CW \es36P\es0 ),
                    774: and to move it
                    775: down from its normal position
                    776: (see the section on local motions).
                    777: .NH
                    778: Tabs
                    779: .PP
                    780: Tabs
                    781: (the \s8ASCII\s0 `horizontal tab' character)
                    782: can be used to produce output in columns,
                    783: or to set the horizontal position of output.
                    784: Typically
                    785: tabs are used only in unfilled text.
                    786: Tab stops are set by default every half inch from the
                    787: current indent,
                    788: but
                    789: can be changed by the
                    790: .CW .ta
                    791: command.
                    792: To set stops every inch, for example,
                    793: .P1
                    794: ^ta 1i 2i 3i 4i 5i 6i
                    795: .P2
                    796: .PP
                    797: By default the stops are left-justified
                    798: (as on a typewriter),
                    799: but there are also centering and right-adjusting tabs.
                    800: .PP
                    801: For a handful of numeric columns, use right-adjusting tabs:
                    802: .P1
                    803: ^nf
                    804: ^ta .5iR 1iR 1.5iR
                    805: \fItab\f(CW 1\fI tab \f(CW2\fI tab \f(CW3
                    806: \fItab \f(CW40\fI tab \f(CW50\fI tab \f(CW60
                    807: \fItab \f(CW700\fI tab \f(CW800\fI tab \f(CW900\f(CW
                    808: ^fi
                    809: .P2
                    810: The 
                    811: .CW R
                    812: means ``right adjust.''
                    813: When printed, this will produce
                    814: .P1 0
                    815: .ft 1
                    816: .ta .5iR 1iR 1.5iR
                    817:        1       2       3
                    818:        40      50      60
                    819:        700     800     900
                    820: .P2
                    821: If you have many numbers,
                    822: or if you need more complicated table layout,
                    823: don't
                    824: use
                    825: .IT troff 
                    826: directly;
                    827: use
                    828: .IT tbl .
                    829: .PP
                    830: It is also possible to fill up tabbed-over space with
                    831: some character other than blanks by setting the `tab replacement character'
                    832: with the
                    833: .CW .tc
                    834: command:
                    835: .P1
                    836: ^ta 1.5i 2.5i
                    837: ^tc \e(ru      (\e(ru is "\(ru")
                    838: Name \fItab\fR Age \fItab\fR 
                    839: .P2
                    840: produces
                    841: .P1 3
                    842: .ft 1
                    843: .ta 1.5i 2.5i
                    844: .tc \(ru
                    845: Name    Age    
                    846: .tc
                    847: .P2
                    848: To reset the tab replacement character to a blank, use
                    849: .CW .tc
                    850: with no argument.
                    851: (Lines can also be drawn with the
                    852: .CW \el
                    853: command, described in Section 6.)
                    854: .PP
                    855: .IT Troff
                    856: also provides a very general mechanism called `fields'
                    857: for setting up complicated columns.
                    858: (This is used by
                    859: .IT tbl .)
                    860: We will not go into it in this paper.
                    861: .NH
                    862: Local Motions: Drawing lines and characters
                    863: .PP
                    864: .sp 10p
                    865: Remember `Area = \(*pr\u2\d' and the big `P'
                    866: in the Paternoster.
                    867: How are they done?
                    868: .IT Troff
                    869: provides a host of commands for placing characters of any size
                    870: at any place.
                    871: You can use them to draw special characters 
                    872: or to tune your output for a particular appearance.
                    873: Most of these commands are straightforward, but messy to read
                    874: and tough to type correctly.
                    875: .PP
                    876: If you won't use 
                    877: .IT eqn ,
                    878: subscripts and superscripts are most easily done with
                    879: the half-line local motions
                    880: .CW \eu
                    881: and
                    882: .CW \ed .
                    883: To go back up the page half a point-size, insert a
                    884: .CW \eu
                    885: at the desired place;
                    886: to go down, insert a
                    887: .CW \ed .
                    888: .CW \eu \& (
                    889: and
                    890: .CW \ed
                    891: should always
                    892: be used in pairs, as explained below.)
                    893: Thus
                    894: .P1
                    895: Area = \e(*pr\eu2\ed
                    896: .P2
                    897: produces
                    898: .P1
                    899: .ft 1
                    900: Area = \(*pr\u2\d
                    901: .P2
                    902: To make the `2' smaller, bracket it with
                    903: .CW \es\-2
                    904: and
                    905: .CW \es0 .
                    906: Since
                    907: .CW \eu
                    908: and
                    909: .CW \ed
                    910: refer to the current point size,
                    911: be sure to put them either both inside or both outside
                    912: the size changes,
                    913: or you will get an unbalanced vertical motion.
                    914: .PP
                    915: Sometimes the space given by
                    916: .CW \eu
                    917: and
                    918: .CW \ed
                    919: isn't the right amount.
                    920: The 
                    921: .CW \ev
                    922: command can be used to request an arbitrary amount of vertical motion.
                    923: The in-line command
                    924: .P1
                    925: \ev'\f2amount\fP'
                    926: .P2
                    927: causes motion up or down the page by the amount specified in
                    928: `\f2amount\fP'.
                    929: For example, to move the `P' down, we used
                    930: .P1 2
                    931: .ta 1i
                    932: ^in +0.6i      (move paragraph in)
                    933: ^ll \-0.3i     (shorten lines)
                    934: ^ti \-0.3i     (move P back)
                    935: \ev'2'\es36P\es0\ev'\-2'ater noster qui est
                    936: in caelis ...
                    937: .P2
                    938: A minus sign causes upward motion, while
                    939: no sign or a plus sign means down the page.
                    940: Thus
                    941: .CW \ev'\-2'
                    942: causes an upward vertical motion 
                    943: of two line spaces.
                    944: .PP
                    945: There are many other ways to specify the amount of motion \(em
                    946: .P1
                    947: \ev'0.1i'
                    948: \ev'3p'
                    949: \ev'\-0.5m'
                    950: .P2
                    951: and so on are all legal.
                    952: Notice that the scale specifier
                    953: .CW i
                    954: or
                    955: .CW p
                    956: or
                    957: .CW m
                    958: goes inside the quotes.
                    959: Any character can be used in place of the quotes;
                    960: this is also true of all other
                    961: .IT troff
                    962: commands described in this section.
                    963: .PP
                    964: Since
                    965: .IT troff
                    966: does not take within-the-line vertical motions into account
                    967: when figuring out where it is on the page,
                    968: output lines can have unexpected positions
                    969: if the left and right ends aren't at the same
                    970: vertical position.
                    971: Thus
                    972: .CW \ev ,
                    973: like
                    974: .CW \eu
                    975: and
                    976: .CW \ed ,
                    977: should always balance upward vertical motion in a line with
                    978: the same amount in the downward direction.
                    979: .PP
                    980: Arbitrary horizontal motions are also available \(em
                    981: .CW \eh
                    982: is like
                    983: .CW \ev ,
                    984: except that the default scale factor is ems instead of line spaces.
                    985: As an example,
                    986: .P1
                    987: \eh'\-0.1i'
                    988: .P2
                    989: causes a backwards motion of a tenth of an inch.
                    990: Consider printing the mathematical symbol
                    991: `>>'.
                    992: The default spacing is a bit too wide, so
                    993: .IT eqn
                    994: replaces this by
                    995: .P1
                    996: >\eh'\-0.1m'>
                    997: .P2
                    998: to produce >\h'-.1m'>.
                    999: .PP
                   1000: Frequently
                   1001: .CW \eh
                   1002: is used with the `width function'
                   1003: .CW \ew
                   1004: to generate motions equal to the width
                   1005: of some character string.
                   1006: The construction
                   1007: .P1
                   1008: \ew'thing'
                   1009: .P2
                   1010: is a number equal to the width of `thing' in machine units.
                   1011: All
                   1012: .IT troff
                   1013: computations are ultimately done in these units.
                   1014: To move horizontally the width of an `x',
                   1015: we can say
                   1016: .P1
                   1017: \eh'\ew'x'u'
                   1018: .P2
                   1019: As we mentioned above,
                   1020: the default scale factor for
                   1021: all horizontal dimensions is
                   1022: .CW m ,
                   1023: ems, so here we must have the
                   1024: .CW u
                   1025: for machine units,
                   1026: or the motion produced will be far too large.
                   1027: .IT Troff
                   1028: is quite happy with the nested quotes, by the way,
                   1029: so long as you don't leave any out.
                   1030: .SP
                   1031: .PP
                   1032: There are also several special-purpose
                   1033: .IT troff
                   1034: commands for local motion.
                   1035: .CW \e0
                   1036: is an unpaddable white space
                   1037: of the same width as a digit.
                   1038: `Unpaddable' means that it will never be widened
                   1039: or split across a line by line justification and filling.
                   1040: There is also
                   1041: .CW \e (blank),
                   1042: .tr ^^
                   1043: which is an unpaddable character the width of a space,
                   1044: .CW \e| ,
                   1045: which is half that width,
                   1046: .CW \e^ ,
                   1047: which is one quarter of the width of a space,
                   1048: and
                   1049: .CW \e& ,
                   1050: which has zero width.
                   1051: .tr ^.
                   1052: (This last one is useful, for example, in entering
                   1053: a text line which would otherwise begin with a `.'.)
                   1054: .PP
                   1055: The command
                   1056: .CW \eo ,
                   1057: used like
                   1058: .P1
                   1059: \eo'set of characters'
                   1060: .P2
                   1061: causes (up to 9)
                   1062: characters to be overstruck,
                   1063: centered on the widest.
                   1064: This is nice for accents, as in
                   1065: .P1
                   1066: m\eo"e\e(aa"long\eo"e\e(ga"ne
                   1067: .P2
                   1068: which makes
                   1069: .P1
                   1070: .ft 1
                   1071: m\o"e\(aa"long\o"e\(ga"ne
                   1072: .P2
                   1073: The accents are
                   1074: .CW \e(ga
                   1075: and
                   1076: .CW \e(aa ,
                   1077: or
                   1078: .CW \e\` 
                   1079: and
                   1080: .CW \e\' ;
                   1081: remember that each is just one character to
                   1082: .IT troff .
                   1083: .SP
                   1084: .PP
                   1085: You can make your own overstrikes with another special convention,
                   1086: .CW \ez ,
                   1087: the zero-motion command.
                   1088: .CW \ezx
                   1089: suppresses the normal horizontal motion
                   1090: after printing the single character
                   1091: .CW x ,
                   1092: so another character can be laid on top of it.
                   1093: Although sizes can be changed within
                   1094: .CW \eo ,
                   1095: it centers the characters on the widest,
                   1096: and
                   1097: there can be no horizontal or vertical motions,
                   1098: so
                   1099: .CW \ez
                   1100: may be the only way to get what you want:
                   1101: .P1
                   1102: .sp 2
                   1103: \s8\z\(sq\s14\z\(sq\s22\z\(sq\s36\(sq
                   1104: .P2
                   1105: is produced by
                   1106: .P1 0
                   1107: ^sp 2
                   1108: \es8\ez\e(sq\es14\ez\e(sq\es22\ez\e(sq\es36\e(sq
                   1109: .P2
                   1110: The
                   1111: .CW .sp
                   1112: is needed to leave room for the result.
                   1113: .PP
                   1114: As another example, an extra-heavy semicolon
                   1115: that looks like
                   1116: .P1
                   1117: .ft 1
                   1118: \s+6\z,\v'-0.25m'.\v'0.25m'\s0  instead of  ;  or  \s+6;\s0
                   1119: .P2
                   1120: can be constructed with a big comma and a big period above it:
                   1121: .P1
                   1122: \es+6\ez,\ev'\(mi0.25m'.\ev'0.25m'\es0 
                   1123: .P2
                   1124: `0.25m' is an empirical constant.
                   1125: .SP
                   1126: .PP
                   1127: A more ornate overstrike is given by the bracketing function
                   1128: .CW \eb ,
                   1129: which piles up characters vertically,
                   1130: centered on the current baseline.
                   1131: Thus we can get big brackets,
                   1132: constructing them with piled-up smaller pieces:
                   1133: .P1
                   1134: .sp
                   1135: .ne 3
                   1136: \b'\(lt\(lk\(lb' \b'\(lc\(lf' x \b'\(rc\(rf' \b'\(rt\(rk\(rb'
                   1137: .sp
                   1138: .P2
                   1139: by typing in only this:
                   1140: .P1 0
                   1141: .ps -2
                   1142: \&^sp
                   1143: \eb'\e(lt\e(lk\e(lb' \eb'\e(lc\e(lf' x \e
                   1144: \eb'\e(rc\e(rf' \eb'\e(rt\e(rk\e(rb'
                   1145: .P2
                   1146: .PP
                   1147: .IT Troff
                   1148: also provides a convenient facility for drawing horizontal and vertical
                   1149: lines of arbitrary length with arbitrary characters.
                   1150: .CW \el'1i'
                   1151: draws a line one inch long, like this:
                   1152: \l'1i'\|.
                   1153: The length can be followed by
                   1154: the character to use if the \(ru isn't appropriate;
                   1155: .CW \el'0.5i.'\&
                   1156: draws a half-inch line of dots: \l'.5i.'.
                   1157: The construction
                   1158: .CW \eL
                   1159: is analogous to
                   1160: .CW \el ,
                   1161: except that it draws a vertical line instead of horizontal.
                   1162: .NH
                   1163: Strings
                   1164: .PP
                   1165: Obviously if a paper contains a large number of occurrences
                   1166: of an acute accent over a letter `e',
                   1167: typing
                   1168: .CW \eo"e\e\'"
                   1169: for each \*e
                   1170: would be a great nuisance.
                   1171: .PP
                   1172: Fortunately,
                   1173: .IT troff
                   1174: provides a way in which you can store an arbitrary
                   1175: collection of text in a `string',
                   1176: and thereafter use the string name as a shorthand
                   1177: for its contents.
                   1178: Strings are one of several
                   1179: .IT troff
                   1180: mechanisms whose judicious use
                   1181: lets you type a document
                   1182: with less effort and organize
                   1183: it
                   1184: so that extensive format changes
                   1185: can be made with few editing changes.
                   1186: .PP
                   1187: Strings are defined with the command
                   1188: .CW .ds .
                   1189: The line
                   1190: .P1
                   1191: \&^ds e \eo"e\e'"
                   1192: .P2
                   1193: defines the string
                   1194: .CW e
                   1195: to have the value
                   1196: .CW \eo"e\e\'" .
                   1197: .PP
                   1198: A reference to a string is replaced by whatever
                   1199: text
                   1200: the string was defined as.
                   1201: String names may be either one or two characters long,
                   1202: and are referred to by
                   1203: .CW \e*x
                   1204: for one character names or
                   1205: .CW \e*(xy
                   1206: for two character names.
                   1207: Thus to get
                   1208: .ds e \o"e\*'"
                   1209: t\*el\*ephone,
                   1210: given the definition of the string
                   1211: .CW e
                   1212: as above,
                   1213: we can type
                   1214: .CW t\e*el\e*ephone ,
                   1215: to produce t\*el\*ephone.
                   1216: .PP
                   1217: If a string must begin with blanks, define it as
                   1218: .P1
                   1219: \&.ds xx "      text
                   1220: .P2
                   1221: The double quote signals the beginning of the definition.
                   1222: There is no trailing quote;
                   1223: the end of the line terminates the string.
                   1224: .PP
                   1225: A string may actually be several lines long;
                   1226: if
                   1227: .IT troff
                   1228: encounters a 
                   1229: .CW \e
                   1230: at the end of
                   1231: .ul
                   1232: any
                   1233: line, it is thrown away and the next line
                   1234: added to the current one.
                   1235: So you can make a long string simply by ending each line
                   1236: but the last with a backslash:
                   1237: .P1
                   1238: \&^ds xx this \e
                   1239: is a very \e
                   1240: long string
                   1241: .P2
                   1242: .PP
                   1243: Strings may be defined in terms of other strings, or even in terms of themselves;
                   1244: we will discuss some of these possibilities later.
                   1245: .NH
                   1246: Introduction to Macros
                   1247: .PP
                   1248: Before we can go much further in
                   1249: .IT troff ,
                   1250: we need to learn a bit about the
                   1251: macro
                   1252: facility.
                   1253: In its simplest form, a macro is just a shorthand notation
                   1254: quite similar to a string.
                   1255: Suppose we want every paragraph to start
                   1256: in exactly the same way \(em
                   1257: with a space and a temporary indent of two ems:
                   1258: .P1
                   1259: ^sp
                   1260: ^ti +2m
                   1261: .P2
                   1262: Then to save typing, we would like to collapse these into
                   1263: one shorthand line,
                   1264: a
                   1265: .IT troff
                   1266: `command' like
                   1267: .P1
                   1268: ^PP
                   1269: .P2
                   1270: that would be treated by
                   1271: .IT troff
                   1272: exactly as
                   1273: .P1
                   1274: ^sp
                   1275: ^ti +2m
                   1276: .P2
                   1277: .CW .PP
                   1278: is called a
                   1279: .ul
                   1280: macro.
                   1281: The way we tell
                   1282: .IT troff
                   1283: what
                   1284: .CW .PP
                   1285: means is to
                   1286: .ul
                   1287: define
                   1288: it with the
                   1289: .CW .de
                   1290: command:
                   1291: .P1
                   1292: ^de PP
                   1293: ^sp
                   1294: ^ti +2m
                   1295: ^^
                   1296: .P2
                   1297: The first line names the macro
                   1298: (we used
                   1299: .CW .PP ' `
                   1300: for `paragraph',
                   1301: and upper case so it wouldn't conflict with
                   1302: any name that
                   1303: .IT troff
                   1304: might
                   1305: already know about).
                   1306: The last line
                   1307: .CW ..\&
                   1308: marks the end of the definition.
                   1309: In between is the text,
                   1310: which is simply inserted whenever
                   1311: .IT troff
                   1312: sees the `command'
                   1313: or macro call
                   1314: .P1
                   1315: ^PP
                   1316: .P2
                   1317: A macro
                   1318: can contain any mixture of text and formatting commands.
                   1319: .PP
                   1320: The definition of
                   1321: .CW .PP
                   1322: has to precede its first use;
                   1323: undefined macros are simply ignored.
                   1324: Names are restricted to one or two characters.
                   1325: .PP
                   1326: Using macros for commonly occurring sequences of commands
                   1327: is critically important.
                   1328: Not only does it save typing,
                   1329: but it makes later changes much easier.
                   1330: Suppose we decide that the paragraph indent is too small,
                   1331: the vertical space is much too big,
                   1332: and roman font should be forced.
                   1333: Instead of changing the whole document,
                   1334: we need only change the definition of
                   1335: .CW .PP
                   1336: to
                   1337: something like
                   1338: .P1
                   1339: ^de PP \e" paragraph macro
                   1340: ^sp 2p
                   1341: ^ti +3m
                   1342: ^ft R
                   1343: ^^
                   1344: .P2
                   1345: and the change takes
                   1346: effect everywhere we used
                   1347: .CW .PP .
                   1348: .PP
                   1349: .CW \e"
                   1350: is a
                   1351: .IT troff
                   1352: command that causes the rest of the line to be ignored.
                   1353: We use it here to add comments to the macro
                   1354: definition
                   1355: (a wise idea once definitions get complicated).
                   1356: .PP
                   1357: As another example of macros,
                   1358: consider these two which start and end a block of offset,
                   1359: unfilled text, like most of the examples in this paper:
                   1360: .P1
                   1361: ^de BS \e" start indented block
                   1362: ^sp
                   1363: ^nf
                   1364: ^in +0.3i
                   1365: ^ft CW  \e" constant width font
                   1366: ^^
                   1367: ^de BE \e" end indented block
                   1368: ^sp
                   1369: ^ft 1
                   1370: ^fi
                   1371: ^in \(mi0.3i
                   1372: ^^
                   1373: .P2
                   1374: Now we can surround text like
                   1375: .P1
                   1376: Copy to
                   1377: John Doe
                   1378: Richard Roberts
                   1379: Stanley Smith
                   1380: .P2
                   1381: by the commands
                   1382: .CW .BS
                   1383: and
                   1384: .CW .BE ,
                   1385: and it will come out as it did above.
                   1386: Notice that we indented by
                   1387: .CW .in
                   1388: .CW +0.3i
                   1389: instead of
                   1390: .CW .in
                   1391: .CW 0.3i .
                   1392: This way we can nest our uses of
                   1393: .CW .BS
                   1394: and
                   1395: .CW .BE
                   1396: to get blocks within blocks.
                   1397: .PP
                   1398: If later on we decide that the indent
                   1399: should be 0.5i, then it is only necessary to
                   1400: change the definitions of
                   1401: .CW .BS
                   1402: and
                   1403: .CW .BE ,
                   1404: not the whole paper.
                   1405: .NH
                   1406: Titles, Pages and Numbering
                   1407: .PP
                   1408: This is an area where things get tougher,
                   1409: because nothing is done for you automatically.
                   1410: Of necessity, some of this section is a cookbook,
                   1411: to be copied literally until you get some experience.
                   1412: .PP
                   1413: Suppose you want a title at the top of each page,
                   1414: saying just
                   1415: .sp 3p
                   1416: .lt 2.8i
                   1417: .tl '\ \ \ \ left top'center top'right top\ \ \ \ '
                   1418: .lt
                   1419: .sp 3p
                   1420: Unfortunately, this requires work.
                   1421: .PP
                   1422: You have to say what the actual title is (easy);
                   1423: when to print it (easy enough);
                   1424: and what to do at and around the title line (harder).
                   1425: Taking these in reverse order,
                   1426: first we define a macro
                   1427: .CW .NP
                   1428: (for `new page') to process
                   1429: titles and the like at the end of one page
                   1430: and the beginning of the next:
                   1431: .P1 .2i
                   1432: ^de NP
                   1433: \&'bp
                   1434: \&'sp 0.5i
                   1435: \&\&.tl 'left top'center top'right top'
                   1436: \&'sp 0.3i
                   1437: \&^^
                   1438: .P2
                   1439: To make sure we're at the top of a page,
                   1440: we issue a `begin page' command
                   1441: .CW 'bp ,
                   1442: which causes a skip to top-of-page
                   1443: (we'll explain the
                   1444: .CW '
                   1445: shortly).
                   1446: Then we space down half an inch,
                   1447: print the title
                   1448: (the use of
                   1449: .CW .tl
                   1450: should be self explanatory; later we will discuss parameterizing the titles),
                   1451: space another 0.3 inches,
                   1452: and we're done.
                   1453: .PP
                   1454: To ask for
                   1455: .CW .NP
                   1456: at the bottom of each page,
                   1457: we have to say something like
                   1458: `when the text is within an inch
                   1459: of the bottom of the page,
                   1460: start the processing
                   1461: for a new page.'
                   1462: This is done with a `when' command
                   1463: .CW .wh :
                   1464: .P1
                   1465: ^wh \-1i NP
                   1466: .P2
                   1467: (No `.' is used before
                   1468: .CW NP ;
                   1469: this is simply the name of a macro, not a macro call.)
                   1470: The minus sign means
                   1471: `measure up from the bottom of the page',
                   1472: so
                   1473: .CW -1i
                   1474: means `one inch from the bottom'.
                   1475: .PP
                   1476: The
                   1477: .CW .wh
                   1478: command appears in the input outside the definition of
                   1479: .CW .NP ;
                   1480: typically the input would be
                   1481: .P1
                   1482: ^de NP
                   1483: ^^^
                   1484: ^^
                   1485: ^wh \-1i NP
                   1486: .P2
                   1487: .PP
                   1488: Now what happens?
                   1489: As text is actually being output,
                   1490: .IT troff 
                   1491: keeps track of its vertical position on the page,
                   1492: and after a line is printed within one inch from the bottom,
                   1493: the
                   1494: .CW .NP
                   1495: macro is activated.
                   1496: (In the jargon, the
                   1497: .CW .wh
                   1498: command sets a
                   1499: .ul
                   1500: trap
                   1501: at the specified place,
                   1502: which is `sprung' when that point is passed.)
                   1503: .CW .NP
                   1504: causes a skip to the top of the next page
                   1505: (that's what the
                   1506: .CW 'bp
                   1507: was for),
                   1508: then prints the title with the appropriate margins.
                   1509: .PP
                   1510: Why
                   1511: .CW 'bp
                   1512: and
                   1513: .CW 'sp 
                   1514: instead of
                   1515: .CW .bp
                   1516: and
                   1517: .CW .sp ?
                   1518: The answer is that
                   1519: .CW .sp
                   1520: and
                   1521: .CW .bp ,
                   1522: like several other commands,
                   1523: cause a
                   1524: .ul
                   1525: break
                   1526: to take place.
                   1527: That is, all the input text collected but not yet printed
                   1528: is flushed out as soon as possible,
                   1529: and the next input line is guaranteed to start
                   1530: a new line of output.
                   1531: If we had used
                   1532: .CW .sp
                   1533: or
                   1534: .CW .bp
                   1535: in the
                   1536: .CW .NP
                   1537: macro,
                   1538: this would cause a break in the middle
                   1539: of the current output line when a new page is started.
                   1540: The effect would be to print the left-over part of that line
                   1541: at the top of the page, followed by the next input line on a new output line.
                   1542: This is
                   1543: .ul
                   1544: not
                   1545: what we want.
                   1546: Using
                   1547: .CW '
                   1548: instead of
                   1549: .CW . \&
                   1550: for a command
                   1551: tells
                   1552: .IT troff 
                   1553: that
                   1554: no break is to take place \(em
                   1555: the output line
                   1556: currently being filled
                   1557: should
                   1558: .ul
                   1559: not
                   1560: be forced out before the space or new page.
                   1561: .PP
                   1562: The list of commands that cause a break 
                   1563: is short and natural:
                   1564: .P1 .1i
                   1565: ^bp  ^br  ^ce  ^fi  ^nf  ^sp  ^in  ^ti
                   1566: .P2
                   1567: All others cause
                   1568: .ul
                   1569: no
                   1570: break,
                   1571: regardless of whether you use a
                   1572: .CW . \&
                   1573: or a 
                   1574: .CW ' .
                   1575: If you really need a break, add a
                   1576: .CW .br 
                   1577: command at the appropriate place.
                   1578: .PP
                   1579: One other thing to beware of \(em
                   1580: if you're changing fonts or point sizes a lot,
                   1581: you may find that
                   1582: if you cross a page boundary
                   1583: in an unexpected font or size,
                   1584: your titles come out in that size and font
                   1585: instead of what you intended.
                   1586: Furthermore, the length of a title is independent of the current line length,
                   1587: so titles will come out at the default length of 6.5 inches
                   1588: unless you change it,
                   1589: which is done with the
                   1590: .CW .lt
                   1591: command.
                   1592: .PP
                   1593: There are several ways to fix the problems of point sizes
                   1594: and fonts in titles.
                   1595: For the simplest applications, we can change
                   1596: .CW .NP 
                   1597: to set the proper size and font for the title,
                   1598: then restore the previous values as shown below.
                   1599: .KF
                   1600: .P1 .2i
                   1601: .ta .8i
                   1602: ^de NP
                   1603: \&'bp
                   1604: \&'sp 0.5i
                   1605: ^ft R  \e" set title font to roman
                   1606: ^ps 10 \e" and size to 10 point
                   1607: ^lt 6i \e" and length to 6 inches
                   1608: ^tl 'left'center'right'
                   1609: ^ps    \e" revert to previous size
                   1610: ^ft P  \e" and to previous font
                   1611: \&'sp 0.3i
                   1612: ^^
                   1613: .P2
                   1614: .KE
                   1615: .PP
                   1616: This version of
                   1617: .CW .NP
                   1618: does
                   1619: .ul
                   1620: not
                   1621: work if the fields in the
                   1622: .CW .tl
                   1623: command contain size or font changes.
                   1624: To cope with that
                   1625: requires
                   1626: .IT troff 's
                   1627: `environment' mechanism,
                   1628: which we will discuss in Section 13.
                   1629: .PP
                   1630: To get a footer at the bottom of a page,
                   1631: you can modify
                   1632: .CW .NP
                   1633: so it does
                   1634: some processing before
                   1635: the
                   1636: .CW 'bp
                   1637: command,
                   1638: or split the job into a footer macro invoked
                   1639: at the bottom margin and a header macro invoked
                   1640: at the top of the page.
                   1641: These variations are left as exercises.
                   1642: .SP
                   1643: .PP
                   1644: Output page numbers are computed automatically
                   1645: as each page is produced (starting at 1),
                   1646: but no numbers are printed unless you ask for them explicitly.
                   1647: To get page numbers printed,
                   1648: include the character
                   1649: .CW %
                   1650: in the
                   1651: .CW .tl
                   1652: line at
                   1653: the position where you want the number to appear.
                   1654: For example
                   1655: .P1
                   1656: ^tl ''- % -''
                   1657: .P2
                   1658: centers the page number inside hyphens, as on this page.
                   1659: You can set the page number at any time
                   1660: with either
                   1661: .CW .bp\ n ,
                   1662: which immediately starts a new page numbered
                   1663: .CW n ,
                   1664: or with
                   1665: .CW .pn\ n ,
                   1666: which sets the page number for the next page
                   1667: but doesn't cause a skip to the new page.
                   1668: Again,
                   1669: .CW .bp\ +n
                   1670: sets the page number to
                   1671: .CW n
                   1672: more than its current value;
                   1673: .CW .bp
                   1674: means
                   1675: .CW .bp\ +1 .
                   1676: .NH
                   1677: Number Registers and Arithmetic
                   1678: .PP
                   1679: .IT Troff
                   1680: has a facility for doing arithmetic,
                   1681: and for defining and using variables with numeric values,
                   1682: called
                   1683: .ul
                   1684: number registers.
                   1685: Number registers, like strings and macros, can be useful in setting up a document
                   1686: so it is easy to change later.
                   1687: And of course they serve for any sort of arithmetic computation.
                   1688: .PP
                   1689: Like strings, number registers have one or two character names.
                   1690: They are set by the
                   1691: .CW .nr
                   1692: command,
                   1693: and are referenced anywhere by
                   1694: .CW \enx
                   1695: (one character name) or
                   1696: .CW \en(xy
                   1697: (two character name).
                   1698: .PP
                   1699: There are quite a few pre-defined number registers maintained by
                   1700: .IT troff ,
                   1701: among them
                   1702: .CW %
                   1703: for the current page number;
                   1704: .CW nl
                   1705: for the current vertical position on the page;
                   1706: .CW dy ,
                   1707: .CW mo
                   1708: and
                   1709: .CW yr
                   1710: for the current day, month and year; and
                   1711: .CW .s
                   1712: and
                   1713: .CW .f
                   1714: for the current size and font.
                   1715: (The font is a number from 1 to typically around 10.)
                   1716: Any of these can be used in computations like any other register,
                   1717: but some, like
                   1718: .CW .s
                   1719: and
                   1720: .CW .f ,
                   1721: cannot be changed with
                   1722: .CW .nr .
                   1723: .PP
                   1724: As an example of the use of number registers,
                   1725: in the
                   1726: .CW -ms
                   1727: macro package,
                   1728: most significant parameters are defined in terms of the values
                   1729: of a handful of number registers.
                   1730: These include the point size for text, the vertical spacing,
                   1731: and the line and title lengths.
                   1732: To set the point size and vertical spacing for the following paragraphs, for example, a user may say
                   1733: .P1
                   1734: ^nr PS 9
                   1735: ^nr VS 11
                   1736: .P2
                   1737: The paragraph macro
                   1738: .CW .PP
                   1739: is defined (roughly) as follows:
                   1740: .P1
                   1741: .ta  1i
                   1742: ^de PP
                   1743: ^ps \e\en(PS   \e" reset size
                   1744: ^vs \e\en(VSp  \e" spacing
                   1745: ^ft 1  \e" font
                   1746: ^sp 0.5v       \e" half a line
                   1747: ^ti +3m
                   1748: ^^
                   1749: .P2
                   1750: This sets the font to font 1 and the point size and line spacing
                   1751: to whatever values are stored in the number registers
                   1752: .CW PS
                   1753: and
                   1754: .CW VS .
                   1755: .PP
                   1756: Why are there two backslashes?
                   1757: This is the eternal problem of how to quote a quote.
                   1758: When
                   1759: .IT troff
                   1760: originally reads the macro definition,
                   1761: it peels off one backslash
                   1762: to see what's coming next.
                   1763: To ensure that another is left in the definition when the 
                   1764: macro is
                   1765: .ul
                   1766: used,
                   1767: we have to put in two backslashes in the definition.
                   1768: If only one backslash is used, 
                   1769: point size and vertical spacing will be frozen at the time the macro
                   1770: is defined, not when it is used.
                   1771: .PP
                   1772: Protecting by an extra layer of backslashes
                   1773: is only needed for
                   1774: .CW \en ,
                   1775: .CW \e* ,
                   1776: .CW \e$
                   1777: (which we haven't come to yet),
                   1778: and
                   1779: .CW \e
                   1780: itself.
                   1781: Things like
                   1782: .CW \es ,
                   1783: .CW \ef ,
                   1784: .CW \eh ,
                   1785: .CW \ev ,
                   1786: and so on do not need an extra backslash,
                   1787: since they are converted by
                   1788: .IT troff
                   1789: to an internal code immediately upon being seen.
                   1790: .SP
                   1791: .PP
                   1792: Arithmetic expressions can appear anywhere that
                   1793: a number is expected.
                   1794: As a trivial example,
                   1795: .P1
                   1796: ^nr PS \e\en(PS\-2
                   1797: .P2
                   1798: decrements
                   1799: .CW PS
                   1800: by 2.
                   1801: Expressions can use the arithmetic operators +, \-, *, /, % (mod),
                   1802: the relational operators >, >=, <, <=, =, and != (not equal),
                   1803: and parentheses.
                   1804: .PP
                   1805: Although the arithmetic we have done so far
                   1806: has been straightforward,
                   1807: more complicated things are somewhat tricky.
                   1808: First,
                   1809: number registers hold only integers.
                   1810: .IT troff
                   1811: arithmetic uses truncating integer division, just like Fortran.
                   1812: Second, in the absence of parentheses,
                   1813: evaluation is done left-to-right
                   1814: without any operator precedence
                   1815: (including relational operators).
                   1816: Thus
                   1817: .P1
                   1818: 7*\-4+3/13
                   1819: .P2
                   1820: becomes `\-1'.
                   1821: Number registers can occur anywhere in an expression,
                   1822: and so can scale indicators like
                   1823: .CW p ,
                   1824: .CW i ,
                   1825: .CW m ,
                   1826: and so on (but no spaces).
                   1827: Although integer division causes truncation,
                   1828: each number and its scale indicator is converted
                   1829: to machine units before any arithmetic is done,
                   1830: so
                   1831: .CW 1i/2u
                   1832: evaluates to
                   1833: 0.5i
                   1834: correctly.
                   1835: .PP
                   1836: The scale indicator
                   1837: .CW u
                   1838: often has to appear
                   1839: when you wouldn't expect it \(em
                   1840: in particular, when arithmetic is being done
                   1841: in a context that implies horizontal or vertical dimensions.
                   1842: For example,
                   1843: .P1
                   1844: ^ll 7/2i
                   1845: .P2
                   1846: would seem obvious enough \(em
                   1847: 3\(12 inches.
                   1848: Sorry.
                   1849: Remember that the default units for horizontal parameters like
                   1850: .CW .ll
                   1851: are ems.
                   1852: That's really `7 ems / 2 inches',
                   1853: and when translated into machine units, it becomes zero.
                   1854: How about
                   1855: .P1
                   1856: ^ll 7i/2
                   1857: .P2
                   1858: Sorry, still no good \(em
                   1859: the `2' is `2 ems', so `7i/2' is small,
                   1860: although not zero.
                   1861: You
                   1862: .ul
                   1863: must
                   1864: use
                   1865: .P1
                   1866: ^ll 7i/2u
                   1867: .P2
                   1868: So again, a safe rule is to
                   1869: attach a scale indicator to every number,
                   1870: even constants.
                   1871: .PP
                   1872: For arithmetic done within a
                   1873: .CW .nr
                   1874: command,
                   1875: there is no implication of horizontal or vertical dimension,
                   1876: so the default units are `units',
                   1877: and
                   1878: .CW 7i/2
                   1879: and
                   1880: .CW 7i/2u
                   1881: mean the same thing.
                   1882: Thus
                   1883: .P1
                   1884: ^nr ll 7i/2
                   1885: ^ll \e\en(llu
                   1886: .P2
                   1887: does just what you want,
                   1888: so long as you
                   1889: don't forget the
                   1890: .CW u
                   1891: on the
                   1892: .CW .ll
                   1893: command.
                   1894: .NH
                   1895: Macros with arguments
                   1896: .PP
                   1897: The next step is to define macros that can change from one
                   1898: use to the next
                   1899: according to parameters supplied as arguments.
                   1900: To make this work, we need two things.
                   1901: First, when we define the macro, we have to indicate that some
                   1902: parts of it will be provided as arguments when the macro is called.
                   1903: Then when the macro is 
                   1904: called
                   1905: we have to provide actual arguments
                   1906: to be plugged into the definition.
                   1907: .PP
                   1908: Let us illustrate by defining a macro
                   1909: .CW .SM
                   1910: that will print its argument two points
                   1911: smaller than the surrounding text.
                   1912: That is, the macro call
                   1913: .P1
                   1914: ^SM UNIX
                   1915: .P2
                   1916: will produce
                   1917: \s-2UNIX\s0
                   1918: instead of UNIX.
                   1919: .PP
                   1920: The definition of
                   1921: .CW .SM
                   1922: is
                   1923: .P1
                   1924: ^de SM
                   1925: \es\-2\e\e$1\es+2
                   1926: ^^
                   1927: .P2
                   1928: Within a macro definition,
                   1929: the symbol
                   1930: .CW \e\e$n
                   1931: refers to the
                   1932: .CW n th
                   1933: argument
                   1934: that the macro was called with.
                   1935: Thus
                   1936: .CW \e\e$1
                   1937: is the string to be placed in a smaller point
                   1938: size when
                   1939: .CW .SM
                   1940: is called.
                   1941: .PP
                   1942: As a slightly more complicated version, the following definition of
                   1943: .CW .SM
                   1944: permits optional second and third arguments
                   1945: that will be printed in the normal size:
                   1946: .P1
                   1947: ^de SM
                   1948: \e\e$3\es\-2\e\e$1\es+2\e\e$2
                   1949: ^^
                   1950: .P2
                   1951: Arguments not provided when the macro is called are treated
                   1952: as empty,
                   1953: so
                   1954: .P1
                   1955: ^SM UNIX ),
                   1956: .P2
                   1957: produces
                   1958: .UC UNIX ),
                   1959: while
                   1960: .P1
                   1961: ^SM UNIX ). (
                   1962: .P2
                   1963: produces
                   1964: .UC UNIX ). (
                   1965: It is convenient to reverse 
                   1966: the order of arguments because trailing punctuation
                   1967: is much more common than leading.
                   1968: .PP
                   1969: By the way, the number of arguments that a macro was called with
                   1970: is available in number register
                   1971: .CW .$ .
                   1972: .PP
                   1973: The following macro
                   1974: .CW ^BD
                   1975: is used to make
                   1976: `bold roman',
                   1977: .BD like
                   1978: .BD this
                   1979: .BD phrase.
                   1980: It combines horizontal motions, width computations,
                   1981: and argument rearrangement.
                   1982: .P1 .05i
                   1983: \&.de BD
                   1984: \e&\e\e$3\ef1\e\e$1\eh'-\ew'\e\e$1'u+3u'\e\e$1\efP\e\e$2
                   1985: \&..
                   1986: .P2
                   1987: The
                   1988: .CW \eh
                   1989: and
                   1990: .CW \ew
                   1991: commands need no extra backslash, as we discussed above.
                   1992: The
                   1993: .CW \e&
                   1994: is there in case the argument begins with a period.
                   1995: .SP
                   1996: .PP
                   1997: Two backslashes are needed with the
                   1998: .CW \e\e$n
                   1999: commands, though,
                   2000: to protect one of them when the macro is
                   2001: being defined.
                   2002: Perhaps a second example will make this clearer.
                   2003: Consider a macro called
                   2004: .CW .NH
                   2005: which
                   2006: produces numbered headings rather like those in this paper,
                   2007: with the sections numbered automatically,
                   2008: and the title in bold in a smaller size.
                   2009: The use is
                   2010: .P1
                   2011: ^NH "Section title ..."
                   2012: .P2
                   2013: (If the argument to a macro is to contain blanks,
                   2014: then it must be
                   2015: .ul
                   2016: surrounded
                   2017: by double quotes,
                   2018: unlike a string, where only one leading quote is permitted.)
                   2019: .PP
                   2020: Here is the definition of the
                   2021: .CW .NH
                   2022: macro:
                   2023: .P1 .1i
                   2024: .ta .75i 1.15i
                   2025: ^nr NH 0  \e" initialize section number
                   2026: ^de NH
                   2027: ^sp 0.3i
                   2028: ^ft B
                   2029: ^nr NH \e\en(NH+1      \e" increment number
                   2030: ^ps \e\en(PS\-1        \e" decrease PS
                   2031: \e\en(NH.  \e\e$1      \e" number. title
                   2032: ^ps \e\en(PS           \e" restore PS
                   2033: ^sp 0.3i
                   2034: ^ft R
                   2035: ^^
                   2036: .P2
                   2037: The section number is kept in number register
                   2038: .CW NH ,
                   2039: which is incremented each
                   2040: time just before it is used.
                   2041: (A number register, but not a string, may have the same name as a macro
                   2042: without conflict.)
                   2043: .PP
                   2044: We used
                   2045: .CW \e\en(NH
                   2046: instead of
                   2047: .CW \en(NH
                   2048: and
                   2049: .CW \e\en(PS
                   2050: instead of
                   2051: .CW \en(PS .
                   2052: If we had used
                   2053: .CW \en(NH ,
                   2054: we would get the value of the register at the time the macro was
                   2055: .ul
                   2056: defined,
                   2057: not at the time it was
                   2058: .ul
                   2059: used.
                   2060: If that's what you want, fine,
                   2061: but not here.
                   2062: Similarly,
                   2063: by using
                   2064: .CW \e\en(PS ,
                   2065: we get the point size at the time the macro is called.
                   2066: .SP
                   2067: .PP
                   2068: As an example that does not involve numbers,
                   2069: recall our
                   2070: .CW .NP
                   2071: macro which had a
                   2072: .P1
                   2073: ^tl 'left'center'right'
                   2074: .P2
                   2075: We could make these into parameters by using instead
                   2076: .P1
                   2077: ^tl '\e\e*(LT'\e\e*(CT'\e\e*(RT'
                   2078: .P2
                   2079: so the title comes from three strings called
                   2080: .CW LT ,
                   2081: .CW CT
                   2082: and 
                   2083: .CW RT .
                   2084: If these are empty, then the title will be a blank line.
                   2085: Normally
                   2086: .CW CT
                   2087: would be set with something like
                   2088: .P1
                   2089: \&^ds CT - % -
                   2090: .P2
                   2091: to give just the page number between hyphens,
                   2092: but a user could supply private definitions for
                   2093: any of the strings.
                   2094: .NH
                   2095: Conditionals
                   2096: .PP
                   2097: Suppose we want the
                   2098: .CW .NH
                   2099: macro to leave two extra inches of space just before section 1,
                   2100: but nowhere else.
                   2101: The cleanest way to do that is to test inside the
                   2102: .CW .NH
                   2103: macro
                   2104: whether
                   2105: the section number is 1,
                   2106: and add some space if it is.
                   2107: The
                   2108: .CW .if
                   2109: command provides the conditional test
                   2110: that we can add
                   2111: just before the heading line is output:
                   2112: .P1 0
                   2113:  ^if \e\en(NH=1 ^sp 2i \e" 1st section only
                   2114: .P2
                   2115: .PP
                   2116: The condition after the
                   2117: .CW .if
                   2118: can be any arithmetic or logical expression.
                   2119: If the condition is logically true, or arithmetically greater than zero,
                   2120: the rest of the line is treated as if
                   2121: it were text \(em
                   2122: here a command.
                   2123: If the condition is false, or zero or negative,
                   2124: the rest of the line is skipped.
                   2125: .PP
                   2126: It is possible to do more than one command if a condition is true.
                   2127: Suppose several operations are to be done before section 1.
                   2128: One possibility is to define a macro 
                   2129: .CW .S1
                   2130: and invoke it
                   2131: if we are about to do section 1
                   2132: (as determined by an
                   2133: .CW .if ).
                   2134: .P1
                   2135: ^de S1
                   2136: ---  processing for section 1 ---
                   2137: ^^
                   2138: ^de NH
                   2139: ^^^
                   2140: ^if \e\en(NH=1 ^S1
                   2141: ^^^
                   2142: ^^
                   2143: .P2
                   2144: .PP
                   2145: An alternate way is to use the
                   2146: extended form of the
                   2147: .CW .if ,
                   2148: like this:
                   2149: .P1
                   2150: ^if \e\en(NH=1 \e{--- processing
                   2151: for section 1 ----\e}
                   2152: .P2
                   2153: The braces
                   2154: .CW \e{
                   2155: and
                   2156: .CW \e}
                   2157: must occur in the positions shown
                   2158: or you will get unexpected extra lines in your output.
                   2159: .IT Troff
                   2160: also provides
                   2161: an `if-else' construction,
                   2162: which we will not go into here.
                   2163: .PP
                   2164: A condition can be negated by preceding it with
                   2165: .CW ! ;
                   2166: we get the same effect as above (but less clearly) by using
                   2167: .P1
                   2168: ^if !\e\en(NH>1 ^S1
                   2169: .P2
                   2170: .PP
                   2171: There are a handful of 
                   2172: other conditions that can be tested with
                   2173: .CW .if .
                   2174: For example, is the current page even or odd?
                   2175: .P1
                   2176: ^if e ^tl ''even page title''
                   2177: ^if o ^tl ''odd page title''
                   2178: .P2
                   2179: gives facing pages different titles
                   2180: when used inside an appropriate new page macro.
                   2181: .PP
                   2182: Two other conditions
                   2183: are
                   2184: .CW t
                   2185: and
                   2186: .CW n ,
                   2187: which tell you whether the formatter is
                   2188: .IT troff
                   2189: or
                   2190: .IT nroff . 
                   2191: .P1
                   2192: ^if t troff stuff ...
                   2193: ^if n nroff stuff ...
                   2194: .P2
                   2195: .PP
                   2196: Finally, string comparisons may be made in an
                   2197: .CW .if :
                   2198: .P1
                   2199: ^if 'string1'string2' stuff
                   2200: .P2
                   2201: does `stuff' if
                   2202: .CW string1
                   2203: is the same as
                   2204: .CW string2 .
                   2205: The character separating the strings can be anything
                   2206: reasonable that is
                   2207: not contained in either string.
                   2208: The strings themselves can reference strings with
                   2209: .CW \e* ,
                   2210: arguments with 
                   2211: .CW \e$ ,
                   2212: and so on.
                   2213: .NH
                   2214: Environments
                   2215: .PP
                   2216: As we mentioned, there is a potential problem
                   2217: when going across a page boundary:
                   2218: parameters like size and font
                   2219: for a page title may well be different from those
                   2220: in effect in the text when the page boundary occurs.
                   2221: .IT Troff
                   2222: provides a very general way to deal with this and
                   2223: similar situations.
                   2224: There are three `environments',
                   2225: each of which has independently settable versions of
                   2226: many of the parameters associated with processing,
                   2227: including size, font, line and title lengths,
                   2228: fill/nofill mode, tab stops, and even partially collected lines.
                   2229: Thus the titling problem may be readily solved by processing the main text
                   2230: in one environment and titles in a separate one
                   2231: with its own suitable parameters.
                   2232: .PP
                   2233: The command
                   2234: .CW .ev\ n
                   2235: shifts to environment
                   2236: .CW n ;
                   2237: .CW n
                   2238: must be 0, 1 or 2.
                   2239: The command
                   2240: .CW .ev
                   2241: with no argument returns to the
                   2242: previous environment.
                   2243: Environment names are maintained in a stack, so calls
                   2244: for different environments may be nested and unwound consistently.
                   2245: .PP
                   2246: Suppose we say that the main text is processed in environment 0,
                   2247: which is where 
                   2248: .IT troff
                   2249: begins by default.
                   2250: Then we can modify the new page macro
                   2251: .CW .NP
                   2252: to process titles in environment 1 like this:
                   2253: .P1 2
                   2254: ^de NP
                   2255: ^ev 1  \e" shift to new environment
                   2256: ^lt 6i \e" set parameters here
                   2257: ^ft 1
                   2258: ^ps 10
                   2259: \&... any other processing ...
                   2260: ^ev    \e" return to prev environment
                   2261: ^^
                   2262: .P2
                   2263: It is also possible to initialize the parameters for an environment
                   2264: outside the
                   2265: .CW .NP
                   2266: macro,
                   2267: but the version shown keeps all the processing in one place
                   2268: and is thus easier to understand and change.
                   2269: .NH
                   2270: Diversions
                   2271: .PP
                   2272: There are numerous occasions in page layout when it is necessary to store some text
                   2273: for a period of time without actually printing it.
                   2274: Footnotes are one obvious example:
                   2275: the text of the footnote usually appears in the input well before the place
                   2276: on the page where it is to be printed is reached.
                   2277: In fact,
                   2278: the place where it is output normally depends on how big it is,
                   2279: which implies that there must be a way
                   2280: to process the footnote at least
                   2281: enough to decide its size
                   2282: without printing it.
                   2283: .PP
                   2284: .IT Troff
                   2285: provides a mechanism called a diversion
                   2286: for doing this processing.
                   2287: Any part of the output may be diverted into a macro instead
                   2288: of being printed,
                   2289: and then at some convenient time the macro may be put back into
                   2290: the input.
                   2291: .PP
                   2292: The command
                   2293: .CW .di\ xy
                   2294: begins a diversion \(em all subsequent output is collected into the macro
                   2295: .CW xy
                   2296: until the command
                   2297: .CW .di
                   2298: with no arguments is encountered.
                   2299: This terminates the diversion.
                   2300: The processed text is available at any time thereafter, simply
                   2301: by giving the command
                   2302: .P1
                   2303: ^xy
                   2304: .P2
                   2305: The vertical size of the last finished diversion is contained in
                   2306: the built-in number register
                   2307: .CW dn .
                   2308: .PP
                   2309: As a simple example,
                   2310: suppose we want to implement a `keep-release'
                   2311: operation,
                   2312: so that text between the commands
                   2313: .CW .KS 
                   2314: and
                   2315: .CW .KE
                   2316: will not be split across a page boundary
                   2317: (as for a figure or table).
                   2318: Clearly, when a
                   2319: .CW .KS
                   2320: is encountered, we have to begin diverting
                   2321: the output so we can find out how big it is.
                   2322: Then when a
                   2323: .CW .KE
                   2324: is seen, we decide
                   2325: whether the diverted text will fit on the current page,
                   2326: and print it either there if it fits, or at the top of the next page if it doesn't.
                   2327: So:
                   2328: .P1 2
                   2329: .ta .6i
                   2330: ^de KS \e" start keep
                   2331: ^br    \e" start fresh line
                   2332: ^ev 1  \e" collect in new environment
                   2333: ^fi    \e" make it filled text
                   2334: ^di XX \e" collect in XX
                   2335: ^^
                   2336: .P2
                   2337: .P1 2
                   2338: .ta .6i
                   2339: ^de KE \e" end keep
                   2340: ^br    \e" get last partial line
                   2341: ^di    \e" end diversion
                   2342: ^if \e\en(dn>=\e\en(.t .bp \e" bp if too big
                   2343: ^nf    \e" bring it back in no-fill
                   2344: ^XX    \e" text
                   2345: ^ev    \e" return to normal environment
                   2346: ^^
                   2347: .P2
                   2348: Recall that number register
                   2349: .CW nl
                   2350: is the current position
                   2351: on the output page.
                   2352: Since output was being diverted, this remains
                   2353: at its value when the diversion started.
                   2354: .CW dn
                   2355: is the amount of text in the diversion;
                   2356: .CW .t
                   2357: (another built-in register)
                   2358: is the distance to the next trap,
                   2359: which we assume is at the bottom margin of the page.
                   2360: If the diversion is large enough to go past the trap,
                   2361: the
                   2362: .CW .if
                   2363: is satisfied, and
                   2364: a
                   2365: .CW .bp
                   2366: is issued.
                   2367: In either case, the diverted output is then brought back with
                   2368: .CW .XX .
                   2369: It is essential to bring it back in no-fill mode so
                   2370: .IT troff
                   2371: will do no further processing on it.
                   2372: .PP
                   2373: This is not the most general keep-release,
                   2374: nor is it robust in the face of all conceivable inputs,
                   2375: but it would require more space than we have here to write it
                   2376: in full generality.
                   2377: This section is not intended
                   2378: to teach everything about diversions,
                   2379: but to sketch out enough that you can read
                   2380: existing macro packages with some comprehension.
                   2381: .NH
                   2382: Acknowledgements
                   2383: .PP
                   2384: I am deeply indebted to the late J. F. Ossanna,
                   2385: the author of
                   2386: .IT troff ,
                   2387: for his repeated patient explanations
                   2388: of
                   2389: fine points,
                   2390: and for his continuing willingness to
                   2391: adapt
                   2392: .IT troff
                   2393: to make other uses easier.
                   2394: .PP
                   2395: I am also grateful to Jim Blinn, Ted Dolotta,
                   2396: Doug McIlroy, Mike Lesk and Joel Sturman
                   2397: for helpful comments on this paper.
                   2398: .NH
                   2399: References
                   2400: .LP
                   2401: |reference_placement
                   2402: .sp 100
                   2403: .BP
                   2404: .1C
                   2405: .........
                   2406: .SH
                   2407: Appendix A: Character Set
                   2408: .SP .5
                   2409: .PP
                   2410: Different output devices support different character sets,
                   2411: although there is considerable commonality.
                   2412: To get the one on the left, type the
                   2413: four-character name on the right.
                   2414: .TS
                   2415: center;
                   2416: l l6fCW l l6fCW l l6fCW l l6fCW.
                   2417: \(ff   \e(ff   \(fi    \e(fi   \(fl    \e(fl   \(Fi    \e(Fi   \(Fl    \e(Fl
                   2418: \(ru   \e(ru   \(em    \e(em   \(14    \e(14   \(12    \e(12   \(34    \e(34
                   2419: \(co   \e(co   \(de    \e(de   \(dg    \e(dg   \(fm    \e(fm   \(ct    \e(ct   
                   2420: \(rg   \e(rg   \(bu    \e(bu   \(sq    \e(sq   \(hy    \e(hy
                   2421: .TE
                   2422: .PP
                   2423: The following are special-font characters:
                   2424: .TS
                   2425: center;
                   2426: l l6fCW l l6fCW l l6fCW l l6fCW.
                   2427: \(pl   \e(pl   \(mi    \e(mi   \(mu    \e(mu   \(di    \e(di   
                   2428: \(eq   \e(eq   \(==    \e(==   \(>=    \e(>=   \(<=    \e(<=   
                   2429: \(!=   \e(!=   \(+-    \e(+-   \(no    \e(no   \(sl    \e(sl   
                   2430: \(ap   \e(ap   \(~=    \e(~=   \(pt    \e(pt   \(gr    \e(gr   
                   2431: \(->   \e(->   \(<-    \e(<-   \(ua    \e(ua   \(da    \e(da   
                   2432: \(is   \e(is   \(pd    \e(pd   \(if    \e(if   \(sr    \e(sr   
                   2433: \(sb   \e(sb   \(sp    \e(sp   \(cu    \e(cu   \(ca    \e(ca   
                   2434: \(ib   \e(ib   \(ip    \e(ip   \(mo    \e(mo   \(es    \e(es   
                   2435: \(aa   \e(aa   \(ga    \e(ga   \(ci    \e(ci   \(L1    \e(L1   
                   2436: \(sc   \e(sc   \(dd    \e(dd   \(lh    \e(lh   \(rh    \e(rh   
                   2437: \(lt   \e(lt   \(rt    \e(rt   \(lc    \e(lc   \(rc    \e(rc   
                   2438: \(lb   \e(lb   \(rb    \e(rb   \(lf    \e(lf   \(rf    \e(rf   
                   2439: \(lk   \e(lk   \(rk    \e(rk   \(bv    \e(bv   \(ts    \e(ts   
                   2440: \(br   \e(br   \(or    \e(or   \(ul    \e(ul   \(rn    \e(rn   
                   2441: \(**   \e(**
                   2442: .TE
                   2443: .PP
                   2444: These
                   2445: four
                   2446: characters also have two-character names. 
                   2447: The \' is the apostrophe on terminals;
                   2448: the \` is the other quote mark.
                   2449: .TS
                   2450: center;
                   2451: l l6fCW l l6fCW l l6fCW l l6fCW.
                   2452: \'     \e\(aa  \`      \e\(ga  \(mi    \e\(mi  \(em    \e(em
                   2453: .TE
                   2454: .PP
                   2455: For greek, precede the roman letter by
                   2456: .CW \e(*
                   2457: to get the corresponding greek;
                   2458: for example, 
                   2459: .CW \e(*a
                   2460: is
                   2461: \(*a.
                   2462: .sp
                   2463: .in 0.5i
                   2464: .nf
                   2465: .cs R 36
                   2466: abgdezyhiklmncoprstufxqw
                   2467: \(*a\(*b\(*g\(*d\(*e\(*z\(*y\(*h\(*i\(*k\(*l\(*m\(*n\(*c\(*o\(*p\(*r\(*s\(*t\(*u\(*f\(*x\(*q\(*w
                   2468: .sp
                   2469: ABGDEZYHIKLMNCOPRSTUFXQW
                   2470: \(*A\(*B\(*G\(*D\(*E\(*Z\(*Y\(*H\(*I\(*K\(*L\(*M\(*N\(*C\(*O\(*P\(*R\(*S\(*T\(*U\(*F\(*X\(*Q\(*W
                   2471: .cs R
                   2472: .in 0
                   2473: .fi
                   2474: .BP
                   2475: .2C
                   2476: .SH
                   2477: Appendix B: Some Common Fonts
                   2478: .LP
                   2479: The following fonts are currently available on our Laserwriter II printers.
                   2480: The magic
                   2481: .I troff
                   2482: short name is given as well as the name in the font catalog.
                   2483: .de XX
                   2484: .KS
                   2485: .SP .5
                   2486: \f1\\$1 (\f(CW\\$2\f1)
                   2487: .br
                   2488: .nf
                   2489: .ft \\$2
                   2490: abcdefghijklmnopqrstuvwxyz 0123456789
                   2491: ABCDEFGHIJKLMNOPQRSTUVWXYZ
                   2492: .ft
                   2493: .KE
                   2494: ..
                   2495: .XX AvantGarde-BookOblique AI
                   2496: .XX AvantGarde-Book AR
                   2497: .XX AvantGarde-DemiOblique AX
                   2498: .XX AvantGarde-Demi AB
                   2499: .XX Bookman-DemiItalic KX
                   2500: .XX Bookman-Demi KB
                   2501: .XX Bookman-LightItalic KI
                   2502: .XX Bookman-Light KR
                   2503: .XX Courier-BoldOblique CX
                   2504: .XX Courier-Bold CB
                   2505: .XX Courier-Oblique CI
                   2506: .XX Courier CW
                   2507: .XX Helvetica-BoldOblique HX
                   2508: .XX Helvetica-Bold HB
                   2509: .XX Helvetica-Narrow-BoldOblique Hx
                   2510: .XX Helvetica-Narrow-Bold Hb
                   2511: .XX Helvetica-Narrow-Oblique Hi
                   2512: .XX Helvetica-Narrow Hr
                   2513: .XX Helvetica-Oblique HI
                   2514: .XX Helvetica H
                   2515: .XX NewCenturySchlbk-BoldItalic NX
                   2516: .XX NewCenturySchlbk-Bold NB
                   2517: .XX NewCenturySchlbk-Italic NI
                   2518: .XX NewCenturySchlbk-Roman NR
                   2519: .XX Palatino-BoldItalic PX
                   2520: .XX Palatino-Bold PB
                   2521: .XX Palatino-Italic PI
                   2522: .XX Palatino-Roman PA
                   2523: .XX Times-BoldItalic BI
                   2524: .XX Times-Bold B
                   2525: .XX Times-Italic I
                   2526: .XX Times-Roman R
                   2527: .XX ZapfChancery-MediumItalic ZI
                   2528: .ig
                   2529: show dingbats here
                   2530: ..

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.