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