|
|
1.1 ! root 1: .\" @(#)m2 6.2 (Berkeley) 4/21/86 ! 2: .\" ! 3: .tr | ! 4: .rm mx ! 5: .br ! 6: .mh ! 7: Line Length and Indenting ! 8: .pg ! 9: The maximum line length for fill mode may be set with \fBll\fR. ! 10: The indent may be set with \fBin\fR; ! 11: an indent applicable to \fIonly\fR the \fInext\fR output line may be set with \fBti\fR. ! 12: The line length includes indent space but \fInot\fR ! 13: page offset space. ! 14: The line-length minus the indent is the basis for centering with \fBce\fR. ! 15: The effect of \fBll\fR, \fBin\fR, or \fBti\fR ! 16: is delayed, if a partially collected line exists, ! 17: until after that line is output. ! 18: In fill mode the length of text on an output line is less than or equal to ! 19: the line length minus the indent. ! 20: The current line length and indent are available in registers \fB.l\fR and \fB.i\fR respectively. ! 21: The length of \fIthree-part titles\fR produced by \fBtl\fR ! 22: (see \(sc14) is \fIindependently\fR set by \fBlt\fR. ! 23: .h1 ! 24: .bt ! 25: \fB&ll\fI|\(+-N\fR 6.5\|in previous E,\fBm\fR Line length is set to \(+-\fIN\fR. ! 26: In \*(TR the maximum (line-length)+(page-offset) is about 7.54 inches. ! 27: .bt ! 28: \fB&in\fI|\(+-N\fR \fIN\(eq\^\fR0 previous B,E,\fBm\fR Indent is set to \fI\(+-N\fR. ! 29: The indent is prepended to each output line. ! 30: .bt ! 31: \fB&ti\fI|\(+-N\fR - ignored B,E,\fBm\fR Temporary indent. ! 32: The \fInext\fR output text line will be indented a distance \fI\(+-N\fR ! 33: with respect to the current indent. ! 34: The resulting total indent may not be negative. ! 35: The current indent is not changed. ! 36: .mh ! 37: Macros, Strings, Diversion, and Position Traps ! 38: .sc ! 39: Macros and strings. ! 40: A \fImacro\fR is a named set of arbitrary \fIlines\fR that may be invoked by name or ! 41: with a \fItrap\fR. ! 42: A \fIstring\fR is a named string of \fIcharacters\fR, ! 43: \fInot\fR including a newline character, ! 44: that may be interpolated by name at any point. ! 45: Request, macro, and string names share the \fIsame\fR name list. ! 46: Macro and string names ! 47: may be one or two characters long and may usurp previously defined ! 48: request, macro, or string names. ! 49: Any of these entities may be renamed with \fBrn\fR ! 50: or removed with \fBrm\fR. ! 51: Macros are created by \fBde\fR and \fBdi\fR, and appended to by \fBam\fR and \fBda\fR; ! 52: \fBdi\fR and \fBda\fR cause normal output to be stored in a macro. ! 53: Strings are created by \fBds\fR and appended to by \fBas\fR. ! 54: A macro is invoked in the same way as a request; ! 55: a control line beginning \fB.\fIxx\fR will interpolate the contents of macro \fIxx\fR. ! 56: The remainder of the line may contain up to nine \fIarguments\fR. ! 57: The strings \fIx\fR and \fIxx\fR are interpolated at any desired point with ! 58: \fB\e\(**\fIx\fR and \fB\e\(**(\fIxx\fR respectively. ! 59: String references and macro invocations may be nested. ! 60: .sc ! 61: Copy mode input interpretation. ! 62: During the definition and extension ! 63: of strings and macros (not by diversion) ! 64: the input is read in \fIcopy mode\fR. ! 65: The input is copied without interpretation ! 66: \fIexcept\fR that: ! 67: .x1 ! 68: .ds + \v'-.1m'\s-4\(bu\s+4\v'+.1m' ! 69: \*+ The contents of number registers indicated by \fB\en\fR are interpolated. ! 70: \*+ Strings indicated by \fB\e\(**\fR are interpolated. ! 71: \*+ Arguments indicated by \fB\e$\fR are interpolated. ! 72: \*+ Concealed newlines indicated by \fB\e\fR(newline) are eliminated. ! 73: \*+ Comments indicated by \fB\e"\fR are eliminated. ! 74: \*+ \fB\et\fR and \fB\ea\fR are interpreted as \s-1ASCII\s+1 horizontal tab and \s-1SOH\s+1 respectively (\(sc9). ! 75: \*+ \fB\e\e\fR is interpreted as \fB\e\fR. ! 76: \*+ \fB\e.\fR is interpreted as "\fB.\fR". ! 77: .x2 ! 78: These interpretations can be suppressed by ! 79: prepending ! 80: a \fB\e\fR. ! 81: For example, since \fB\e\e\fR maps into a \fB\e\fR, \fB\e\en\fR will copy as \fB\en\fR which ! 82: will be interpreted as a number register indicator when the ! 83: macro or string is reread. ! 84: .sc ! 85: Arguments. ! 86: When a macro is invoked by name, the remainder of the line is ! 87: taken to contain up to nine arguments. ! 88: The argument separator is the space character, and arguments ! 89: may be surrounded by double-quotes to permit imbedded space characters. ! 90: Pairs of double-quotes may be imbedded in double-quoted arguments to ! 91: represent a single double-quote. ! 92: If the desired arguments won't fit on a line, ! 93: a concealed newline may be used to continue on the next line. ! 94: .pg ! 95: When a macro is invoked the \fIinput level\fR is \fIpushed down\fR and ! 96: any arguments available at the previous level become unavailable ! 97: until the macro is completely read and the previous level is restored. ! 98: A macro's own arguments can be interpolated at \fIany\fR point ! 99: within the macro with \fB\e$\fIN\fR, which interpolates the \fIN\fR\^th ! 100: argument ! 101: (1\(<=\fIN\fR\^\(<=9). ! 102: If an invoked argument doesn't exist, ! 103: a null string results. ! 104: For example, the macro \fIxx\fR may be defined by ! 105: .x1 ! 106: .ftB ! 107: .ta .75i ! 108: &de xx \e"begin definition ! 109: Today is \e\e$1 the \e\e$2. ! 110: &. \e"end definition ! 111: .ftR ! 112: .x2 ! 113: and called by ! 114: .x1 ! 115: .ftB ! 116: &xx Monday 14th ! 117: .ftR ! 118: .x2 ! 119: to produce the text ! 120: .x1 ! 121: .ftB ! 122: Today is Monday the 14th. ! 123: .ftR ! 124: .x2 ! 125: Note that the \fB\e$\fR ! 126: was concealed in the definition with a prepended \fB\e\fR. ! 127: The number of currently available ! 128: arguments is in the \fB.$\fR register. ! 129: .pg ! 130: No arguments are available at the top (non-macro) level ! 131: in this implementation. ! 132: Because string referencing is implemented ! 133: as a input-level push down, ! 134: no arguments are available from \fIwithin\fR a string. ! 135: No arguments are available within a trap-invoked macro. ! 136: .pg ! 137: Arguments are copied in \fIcopy mode\fR onto a stack ! 138: where they are available for reference. ! 139: The mechanism does not allow an argument to contain ! 140: a direct reference to a \fIlong\fR string ! 141: (interpolated at copy time) and it is advisable to ! 142: conceal string references (with an extra \fB\e\fR\|) ! 143: to delay interpolation until argument reference time. ! 144: .sc ! 145: Diversions. ! 146: Processed output may be diverted into a macro for purposes ! 147: such as footnote processing (see Tutorial \(scT5) ! 148: or determining the horizontal and vertical size of some text for ! 149: conditional changing of pages or columns. ! 150: A single diversion trap may be set at a specified vertical position. ! 151: The number registers \fBdn\fR and \fBdl\fR respectively contain the ! 152: vertical and horizontal size of the most ! 153: recently ended diversion. ! 154: Processed text that is diverted into a macro ! 155: retains the vertical size of each of its lines when reread ! 156: in \fInofill\fR mode ! 157: regardless of the current \fIV\fR. ! 158: Constant-spaced (\fBcs\fR) or emboldened (\fBbd\fR) text that is diverted ! 159: can be reread correctly only if these modes are again or still in effect ! 160: at reread time. ! 161: One way to do this is to imbed in the diversion the appropriate ! 162: \fBcs\fR or \fBbd\fR requests with the \fItransparent\fR ! 163: mechanism described in \(sc10.6. ! 164: .pg ! 165: Diversions may be nested ! 166: and certain parameters and registers ! 167: are associated ! 168: with the current diversion level ! 169: (the top non-diversion level may be thought of as the ! 170: 0th diversion level). ! 171: These are the diversion trap and associated macro, ! 172: no-space mode, ! 173: the internally-saved marked place (see \fBmk\fR and \fBrt\fR), ! 174: the current vertical place (\fB.d\fR register), ! 175: the current high-water text base-line (\fB.h\fR register), ! 176: and the current diversion name (\fB.z\fR register). ! 177: .sc ! 178: Traps. ! 179: Three types of trap mechanisms are available\(empage traps, a diversion trap, and ! 180: an input-line-count trap. ! 181: Macro-invocation traps may be planted using \fBwh\fR at any page position including the top. ! 182: This trap position may be changed using \fBch\fR. ! 183: Trap positions at or below the bottom of the page ! 184: have no effect unless or until ! 185: moved to within the page or rendered effective by an increase in page length. ! 186: Two traps may be planted at the \fIsame\fR position only by first planting them at different ! 187: positions and then moving one of the traps; ! 188: the first planted trap will conceal the second unless and until the first one is moved ! 189: (see Tutorial Examples \(scT5). ! 190: If the first one is moved back, it again conceals the second trap. ! 191: The macro associated with a page trap is automatically ! 192: invoked when a line of text is output whose vertical size \fIreaches\fR ! 193: or \fIsweeps past\fR the trap position. ! 194: Reaching the bottom of a page springs the top-of-page trap, if any, ! 195: provided there is a next page. ! 196: The distance to the next trap position is available in the \fB.t\fR register; ! 197: if there are no traps between the current position and the bottom of the page, ! 198: the distance returned is the distance to the page bottom. ! 199: .pg ! 200: A macro-invocation trap effective in the current diversion may be planted using \fBdt\fR. ! 201: The \fB.t\fR register works in a diversion; if there is no subsequent trap a \fIlarge\fR ! 202: distance is returned. ! 203: For a description of input-line-count traps, see the \fBit\fR request below. ! 204: .h1 ! 205: .bt ! 206: \fB&de\fI|xx|yy\fR - \fI.yy=\fB..\fR - Define or redefine the macro \fIxx\fR. ! 207: The contents of the macro begin on the next input line. ! 208: Input lines are copied in \fIcopy mode\fR until the definition is terminated by a ! 209: line beginning with \fB.\fIyy\fR, ! 210: whereupon the macro \fIyy\fR is called. ! 211: In the absence of \fIyy\fR, the definition ! 212: is terminated by a ! 213: line beginning with "\fB..\fR". ! 214: A macro may contain \fBde\fR requests ! 215: provided the terminating macros differ ! 216: or the contained definition terminator is concealed. ! 217: \&"\fB..\fR" can be concealed as ! 218: \fB\e\e..\fR which will copy as \fB\e..\fR and be reread as "\fB..\fR". ! 219: .bt ! 220: \fB&am\fI|xx|yy\fR - \fI.yy=\fB..\fR - Append to macro (append version of \fBde\fR). ! 221: .bt ! 222: \fB&ds\fI|xx|string\fR - ignored - Define a string ! 223: \fIxx\fR containing \fIstring\fR. ! 224: Any initial double-quote in \fIstring\fR is stripped off to permit ! 225: initial blanks. ! 226: .bt ! 227: \fB&as\fI|xx|string\fR - ignored - Append ! 228: \fIstring\fR to string \fIxx\fR ! 229: (append version of \fBds\fR). ! 230: .bt ! 231: \fB&rm\fI|xx\fR - ignored - Remove ! 232: request, macro, or string. ! 233: The name \fIxx\fR is removed from the name list and ! 234: any related storage space is freed. ! 235: Subsequent references will have no effect. ! 236: .bt ! 237: \fB&rn\fI|xx|yy\fR - ignored - Rename request, macro, or string ! 238: \fIxx\fR to \fIyy\fR. ! 239: If \fIyy\fR exists, it is first removed. ! 240: .bt ! 241: \fB&di|\fIxx\fR - end D Divert output to macro \fIxx\fR. ! 242: Normal text processing occurs during diversion ! 243: except that page offsetting is not done. ! 244: The diversion ends when the request \fBdi\fR or \fBda\fR is encountered without an argument; ! 245: extraneous ! 246: requests of this type should not appear when nested diversions are being used. ! 247: .bt ! 248: \fB&da|\fIxx\fR - end D Divert, appending to \fIxx\fR ! 249: (append version of \fBdi\fR). ! 250: .bt ! 251: \fB&wh\fI|N|xx\fR - - \fBv\fR Install ! 252: a trap to invoke \fIxx\fR at page position \fIN;\fR ! 253: a \fInegative N\fR will be interpreted with respect to the ! 254: page \fIbottom\fR. ! 255: Any macro previously planted at \fIN\fR is replaced by \fIxx\fR. ! 256: A zero \fIN\fR refers to the \fItop\fR of a page. ! 257: In the absence of \fIxx\fR, the first found trap at \fIN\fR, if any, is removed. ! 258: .bt ! 259: \fB&ch\fI|xx|N\fR - - \fBv\fR Change ! 260: the trap position for macro \fIxx\fR to be \fIN\fR. ! 261: In the absence of \fIN\fR, the trap, if any, is removed. ! 262: .bt ! 263: \fB&dt\fI|N|xx\fR - off D,\fBv\fR Install a diversion trap ! 264: at position \fIN\fR in the \fIcurrent\fR diversion to invoke ! 265: macro \fIxx\fR. ! 266: Another \fBdt\fR will redefine the diversion trap. ! 267: If no arguments are given, the diversion trap is removed. ! 268: .bt ! 269: \fB&it\fI|N|xx\fR - off E Set an input-line-count trap ! 270: to invoke the macro \fIxx\fR after \fIN\fR lines of \fItext\fR input ! 271: have been read ! 272: (control or request lines don't count). ! 273: The text may be in-line text or ! 274: text interpolated by inline or trap-invoked macros. ! 275: .bt ! 276: \fB&em\fI|xx\fR none none - The ! 277: macro \fIxx\fR will be invoked ! 278: when all input has ended. ! 279: The effect is the same as if the contents of \fIxx\fR had been at the end ! 280: of the last file processed. ! 281: .mh ! 282: Number Registers ! 283: .pg ! 284: A variety of parameters are available to the user as ! 285: predefined, named \fInumber registers\fR (see Summary and Index, page 7). ! 286: In addition, the user may define his own named registers. ! 287: Register names are one or two characters long and \fIdo not\fR conflict ! 288: with request, macro, or string names. ! 289: Except for certain predefined read-only registers, ! 290: a number register can be read, written, automatically ! 291: incremented or decremented, and interpolated ! 292: into the input in a variety of formats. ! 293: One common use of user-defined registers is to ! 294: automatically number sections, paragraphs, lines, etc. ! 295: A number register may be used any time numerical input is expected or desired ! 296: and may be used in numerical \fIexpressions\fR (\(sc1.4). ! 297: .pg ! 298: Number registers are created and modified using \fBnr\fR, which ! 299: specifies the name, numerical value, and the auto-increment size. ! 300: Registers are also modified, if accessed ! 301: with an auto-incrementing sequence. ! 302: If the registers \fIx\fR and \fIxx\fR both contain ! 303: \fIN\fR and have the auto-increment size \fIM\fR, ! 304: the following access sequences have the effect shown: ! 305: .TS ! 306: center box; ! 307: c2|c2|c ! 308: c2|c2|c2 ! 309: l2|c2|c2 ! 310: l2|c2|c2 ! 311: l2|l2|c2. ! 312: Effect on Value ! 313: Sequence Register Interpolated ! 314: _ ! 315: \fB\en\fIx\fR none \fIN\fR ! 316: \fB\en(\fIxx\fR none \fIN\fR ! 317: \fB\en+\fIx\fR \fIx\fR incremented by \fIM\fR \fIN+M\fR ! 318: \fB\en\-\fIx\fR \fIx\fR decremented by \fIM\fR \fIN\-M\fR ! 319: \fB\en+(\fIxx\fR \fIxx\fR incremented by \fIM\fR \fIN+M\fR ! 320: \fB\en\-(\fIxx\fR \fIxx\fR decremented by \fIM\fR \fIN\-M\fR ! 321: .TE ! 322: When interpolated, a number register is converted to ! 323: decimal (default), ! 324: decimal with leading zeros, ! 325: lower-case Roman, ! 326: upper-case Roman, ! 327: lower-case sequential alphabetic, ! 328: or ! 329: upper-case sequential alphabetic ! 330: according to the format specified by \fBaf\fR. ! 331: .h1 ! 332: .bt ! 333: \fB&nr\fI|R|\(+-N|M\fR - - \fBu\fR \ ! 334: The number register \fIR\fR is assigned the value \fI\(+-N\fR ! 335: with respect to the previous value, if any. ! 336: The increment for auto-incrementing is set to \fIM\fR. ! 337: .bt ! 338: \fB&af\fI|R|c\fR arabic - - Assign format \fIc\fR to register \fIR\fR. ! 339: The available formats are: ! 340: .TS ! 341: center box; ! 342: c2|c ! 343: c2|c ! 344: c2|l. ! 345: Numbering ! 346: Format Sequence ! 347: _ ! 348: \fB1\fR 0,1,2,3,4,5,... ! 349: \fB001\fR 000,001,002,003,004,005,... ! 350: \fBi\fR 0,i,ii,iii,iv,v,... ! 351: \fBI\fR 0,I,II,III,IV,V,... ! 352: \fBa\fR 0,a,b,c,...,z,aa,ab,...,zz,aaa,... ! 353: \fBA\fR 0,A,B,C,...,Z,AA,AB,...,ZZ,AAA,... ! 354: .TE ! 355: An arabic format having \fIN\fR digits ! 356: specifies a field width of \fIN\fR digits (example 2 above). ! 357: The read-only registers and the \fIwidth\fR function (\(sc11.2) ! 358: are always arabic. ! 359: .bt ! 360: \fB&rr\fI|R\fR - ignored - Remove register \fIR\fR. ! 361: If many registers are being created dynamically, it ! 362: may become necessary to remove no longer used registers ! 363: to recapture internal storage space for newer registers.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.