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