xref: /plan9/sys/doc/troff.ms (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
1219b2ee8SDavid du Colombier.nr *% \n(%#u+7u
2219b2ee8SDavid du Colombier.ds NR "\f2nroff\fP
3219b2ee8SDavid du Colombier.ds TR "\f2troff\|\fP
4219b2ee8SDavid du Colombier.ds Tr \f2Troff\|\fP
5219b2ee8SDavid du Colombier.ds Nr \f2Nroff\fP
6219b2ee8SDavid du Colombier.		\" CW - constant width font not from -ms
7219b2ee8SDavid du Colombier.de T&
8219b2ee8SDavid du Colombier.X "END US
9219b2ee8SDavid du Colombier.X "US T&
10219b2ee8SDavid du Colombier..
11219b2ee8SDavid du Colombier.de CW
12219b2ee8SDavid du Colombier.nr PQ \\n(.f
13219b2ee8SDavid du Colombier.if \\n(.$=0 .ft CW
14219b2ee8SDavid du Colombier.if \\n(.$>0 \%\&\\$3\f(CW\\$1\\f\\n(PQ\\$2
15219b2ee8SDavid du Colombier..
16219b2ee8SDavid du Colombier.de BI
17219b2ee8SDavid du Colombier.nr PQ \\n(.f
18219b2ee8SDavid du Colombier.if \\n(.$=0 .ft 4
19219b2ee8SDavid du Colombier.if \\n(.$>0 \%\&\\$3\f2\\$1\\f\\n(PQ\\$2
20219b2ee8SDavid du Colombier..
21219b2ee8SDavid du Colombier.de UC
22219b2ee8SDavid du Colombier\\$3\s-2\\$1\s+2\\$2
23219b2ee8SDavid du Colombier..
24219b2ee8SDavid du Colombier.am NH
25219b2ee8SDavid du Colombier.nr p \\np+1
26219b2ee8SDavid du Colombier.nr s 0 1
27219b2ee8SDavid du Colombier..
28219b2ee8SDavid du Colombier.fp 4 BI LucidaSansI
29219b2ee8SDavid du Colombier.bd 4 3
30219b2ee8SDavid du Colombier.de sc
31219b2ee8SDavid du Colombier.LP
32219b2ee8SDavid du Colombier\f4\\np.\\n+s.\ \ \\$1\f1\0
33219b2ee8SDavid du Colombier..
34219b2ee8SDavid du Colombier.de bt
35219b2ee8SDavid du Colombier.SP .25
36219b2ee8SDavid du Colombier.LP
37219b2ee8SDavid du Colombier.NE 2.1
38219b2ee8SDavid du Colombier.ta 1.5i 2.5i 3.5i 4.5i
39219b2ee8SDavid du Colombier\\$1	\\$2	\\$3	\\$4
40219b2ee8SDavid du Colombier.IP "" 0.8i
41219b2ee8SDavid du Colombier....br
42219b2ee8SDavid du Colombier\\$5
43219b2ee8SDavid du Colombier..
44219b2ee8SDavid du Colombier.
45219b2ee8SDavid du Colombier.
46219b2ee8SDavid du Colombier.
47219b2ee8SDavid du Colombier.
48219b2ee8SDavid du Colombier.
49219b2ee8SDavid du Colombier.
50219b2ee8SDavid du Colombier.
51219b2ee8SDavid du Colombier.TL
52219b2ee8SDavid du ColombierTroff User's Manual
53219b2ee8SDavid du Colombier.AU
54219b2ee8SDavid du ColombierJoseph F. Ossanna
55219b2ee8SDavid du ColombierBrian W. Kernighan
56219b2ee8SDavid du Colombier.sp
57*7dd7cddfSDavid du Colombierbwk@research.bell-labs.com
58219b2ee8SDavid du Colombier.EQ
59219b2ee8SDavid du Colombierdelim @@
60219b2ee8SDavid du Colombierdefine cw % "\&" font CW %
61219b2ee8SDavid du Colombier.EN
62219b2ee8SDavid du Colombier.SH
63219b2ee8SDavid du ColombierIntroduction
64219b2ee8SDavid du Colombier.PP
65219b2ee8SDavid du Colombier\*(Tr and \*(NR are text processors
66219b2ee8SDavid du Colombierthat format text for typesetter- and
67219b2ee8SDavid du Colombiertypewriter-like terminals, respectively.
68219b2ee8SDavid du ColombierThey accept lines of text interspersed with lines of
69219b2ee8SDavid du Colombierformat control information and
70219b2ee8SDavid du Colombierformat the text into a printable, paginated document
71219b2ee8SDavid du Colombierhaving a user-designed style.
72219b2ee8SDavid du Colombier\*(Tr and \*(NR offer
73219b2ee8SDavid du Colombierunusual freedom in document styling:
74219b2ee8SDavid du Colombierarbitrary style headers and footers;
75219b2ee8SDavid du Colombierarbitrary style footnotes;
76219b2ee8SDavid du Colombiermultiple automatic sequence numbering for paragraphs, sections, etc;
77219b2ee8SDavid du Colombiermultiple column output;
78219b2ee8SDavid du Colombierdynamic font and point-size control;
79219b2ee8SDavid du Colombierarbitrary horizontal and vertical local motions at any point;
80219b2ee8SDavid du Colombierand
81219b2ee8SDavid du Colombiera family of automatic overstriking, bracket construction, and
82219b2ee8SDavid du Colombierline-drawing functions.
83219b2ee8SDavid du Colombier.
84219b2ee8SDavid du Colombier.de TL
85219b2ee8SDavid du Colombier.LP
86219b2ee8SDavid du Colombier.ce
87219b2ee8SDavid du Colombier.ps +2
88219b2ee8SDavid du Colombier.ft B
89219b2ee8SDavid du Colombier..
90219b2ee8SDavid du Colombier.
91219b2ee8SDavid du Colombier.PP
92219b2ee8SDavid du Colombier.I Troff
93219b2ee8SDavid du Colombierproduces its output in a device-independent form,
94219b2ee8SDavid du Colombieralthough parameterized for a specific device;
95219b2ee8SDavid du Colombier\*(TR output must be processed by a driver for that
96219b2ee8SDavid du Colombierdevice to produce printed output.
97219b2ee8SDavid du Colombier.PP
98219b2ee8SDavid du Colombier\*(Tr and \*(NR are highly compatible with each other and it is almost always
99219b2ee8SDavid du Colombierpossible to prepare input acceptable to both.
100219b2ee8SDavid du ColombierConditional input is provided to enable
101219b2ee8SDavid du Colombierthe user to embed input expressly destined for either program.
102219b2ee8SDavid du Colombier\*(Nr can prepare output directly for a variety of terminal types and
103219b2ee8SDavid du Colombieris capable of utilizing the full resolution of each terminal.
104219b2ee8SDavid du Colombier\*(Nr is the same program as \*(TR; in fact, on Plan 9
105219b2ee8SDavid du Colombier\*(NR is a shell script that calls \*(TR with the
106219b2ee8SDavid du Colombier.CW -N
107219b2ee8SDavid du Colombierargument.
108219b2ee8SDavid du Colombier.SH
109219b2ee8SDavid du ColombierBackground to the Plan 9 Edition
110219b2ee8SDavid du Colombier.PP
111219b2ee8SDavid du ColombierThe primary change to \*(TR and \*(NR for Plan 9 is
112219b2ee8SDavid du Colombiersupport of the Unicode Standard, which was added during
113219b2ee8SDavid du Colombier1992 and 1993.  There are two results.  First, there is much
114219b2ee8SDavid du Colombierless need for the myriad of two-character names that are so
115219b2ee8SDavid du Colombiermuch a part of \*(TR lore; in Plan 9, for example, one naturally uses the
116219b2ee8SDavid du ColombierUnicode character ½ instead of \*(TR\|'s
117219b2ee8SDavid du Colombier.CW \\e(12 .
118219b2ee8SDavid du ColombierSecond, the output device, though called
119219b2ee8SDavid du Colombier.CW utf ,
120219b2ee8SDavid du Colombieris almost always a form of PostScript printer;
121219b2ee8SDavid du Colombierthe panoply of special drivers for different typesetters
122219b2ee8SDavid du Colombierhas largely disappeared.
123219b2ee8SDavid du ColombierUnfortunately, not all PostScript printers can cope
124219b2ee8SDavid du Colombierwith Unicode characters, so there remains a need for
125219b2ee8SDavid du Colombierprograms that synthesize PostScript characters from bitmaps;
126219b2ee8SDavid du Colombierthis is especially true for Asian languages.
127219b2ee8SDavid du Colombier.SH
128219b2ee8SDavid du ColombierBackground to the Second Edition
129219b2ee8SDavid du Colombier.PP
130219b2ee8SDavid du Colombier\*(Tr
131219b2ee8SDavid du Colombierwas originally written by the late Joe Ossanna
132219b2ee8SDavid du Colombierin about 1973, in assembly language for the
133219b2ee8SDavid du Colombier.UC PDP -11,
134219b2ee8SDavid du Colombierto drive the Graphic Systems CAT typesetter.
135219b2ee8SDavid du ColombierIt was rewritten in C around 1975,
136219b2ee8SDavid du Colombierand underwent slow but steady evolution until
137219b2ee8SDavid du ColombierOssanna's death late in 1977.
138219b2ee8SDavid du Colombier.PP
139219b2ee8SDavid du ColombierIn 1979, Brian Kernighan
140219b2ee8SDavid du Colombiermodified
141219b2ee8SDavid du Colombier\*(TR
142219b2ee8SDavid du Colombierso that it would produce output for a variety of typesetters,
143219b2ee8SDavid du Colombierwhile retaining its input specifications.
144219b2ee8SDavid du ColombierOver the decade from 1979 to 1989,
145219b2ee8SDavid du Colombierthe internals
146219b2ee8SDavid du Colombierhave been modestly revised,
147219b2ee8SDavid du Colombierthough much of the code remains as it was when Ossanna wrote it.
148219b2ee8SDavid du Colombier.PP
149219b2ee8SDavid du Colombier\*(Tr
150219b2ee8SDavid du Colombierreads parameter files
151219b2ee8SDavid du Colombiereach time it is invoked, to
152219b2ee8SDavid du Colombierset values for machine resolution,
153219b2ee8SDavid du Colombierlegal type sizes and fonts, and character names,
154219b2ee8SDavid du Colombiercharacter widths
155219b2ee8SDavid du Colombierand the like.
156219b2ee8SDavid du Colombier\*(Tr
157219b2ee8SDavid du Colombieroutput is
158219b2ee8SDavid du Colombier.UC ASCII
159219b2ee8SDavid du Colombiercharacters
160219b2ee8SDavid du Colombierin a simple language
161219b2ee8SDavid du Colombierthat describes where each character is to be placed
162219b2ee8SDavid du Colombierand in what size and font.
163219b2ee8SDavid du ColombierA post-processor must be written for each device
164219b2ee8SDavid du Colombierto convert this typesetter-independent language
165219b2ee8SDavid du Colombierinto specific instructions for that device.
166219b2ee8SDavid du Colombier.PP
167219b2ee8SDavid du ColombierThe output language contains information that was not readily
168219b2ee8SDavid du Colombieridentifiable in the older output.
169219b2ee8SDavid du ColombierIn the newer language, the beginning of each page, line, and word
170219b2ee8SDavid du Colombieris marked,
171219b2ee8SDavid du Colombierso post-processors can do device-specific optimizations
172219b2ee8SDavid du Colombiersuch as sorting the data vertically or printing it boustrophedonically,
173219b2ee8SDavid du Colombierindependent of
174219b2ee8SDavid du Colombier\*(TR.
175219b2ee8SDavid du Colombier.PP
176219b2ee8SDavid du ColombierCapabilities for graphics have been added:
177219b2ee8SDavid du Colombier\*(TR
178219b2ee8SDavid du Colombierrecognizes commands for drawing diagonal lines,
179219b2ee8SDavid du Colombiercircles, ellipses, circular arcs,
180219b2ee8SDavid du Colombierand quadratic B-splines.
181219b2ee8SDavid du ColombierThere are also ways to pass arbitrary information to the output,
182219b2ee8SDavid du Colombierunprocessed by
183219b2ee8SDavid du Colombier\*(TR.
184219b2ee8SDavid du Colombier.PP
185219b2ee8SDavid du ColombierA number of limitations have been eased or eliminated.
186219b2ee8SDavid du ColombierA document may have an arbitrary number of fonts on any page
187219b2ee8SDavid du Colombier(if the output device permits it, of course).
188219b2ee8SDavid du ColombierFonts may be accessed merely by naming them;
189219b2ee8SDavid du Colombier``mounting'' is no longer necessary.
190219b2ee8SDavid du ColombierThere are no limits on the number of characters.
191219b2ee8SDavid du Colombier\H'8'Character height\H'10' and \S'-1'sl\S'0'a\S'1'nt\S'0' may be set
192219b2ee8SDavid du Colombierindependently of width.
193219b2ee8SDavid du Colombier.PP
194219b2ee8SDavid du ColombierThe remainder of this document contains a description of
195219b2ee8SDavid du Colombierusage and command-line options;
196219b2ee8SDavid du Colombiera summary of requests, escape sequences, and pre-defined number registers;
197219b2ee8SDavid du Colombiera reference manual;
198219b2ee8SDavid du Colombiertutorial examples;
199219b2ee8SDavid du Colombierand a list of commonly-available characters.
200219b2ee8SDavid du Colombier.SH
201219b2ee8SDavid du ColombierAcknowledgements
202219b2ee8SDavid du Colombier.PP
203219b2ee8SDavid du ColombierJoe Ossanna's
204219b2ee8SDavid du Colombier\*(TR
205219b2ee8SDavid du Colombierremains a remarkable accomplishment.
206219b2ee8SDavid du ColombierFor more than twenty years, it has proven a robust tool,
207219b2ee8SDavid du Colombiertaking unbelievable abuse from a variety of preprocessors
208219b2ee8SDavid du Colombierand being forced into uses that were never conceived of
209219b2ee8SDavid du Colombierin the original design,
210219b2ee8SDavid du Colombierall with considerable grace under fire.
211219b2ee8SDavid du Colombier.PP
212219b2ee8SDavid du ColombierRecent versions of \*(TR have profited from
213219b2ee8SDavid du Colombiersignificant code improvements by
214219b2ee8SDavid du ColombierJaap Akkerhuis, Dennis Ritchie, Ken Thompson, and Molly Wagner.
215219b2ee8SDavid du ColombierUTF facilities owe much to Jaap Akkerhuis.
216219b2ee8SDavid du ColombierAndrew Hume, Doug McIlroy, Peter Nelson and Ravi Sethi made valuable suggestions on the manual.
217219b2ee8SDavid du ColombierI fear that the remaining bugs are my fault.
218219b2ee8SDavid du Colombier.sp 100
219219b2ee8SDavid du Colombier.BP
220219b2ee8SDavid du Colombier.TL
221219b2ee8SDavid du ColombierUsage
222219b2ee8SDavid du Colombier.SP
223219b2ee8SDavid du Colombier.PP
224219b2ee8SDavid du Colombier\*(Tr or \*(NR is invoked as
225219b2ee8SDavid du Colombier.P1
226219b2ee8SDavid du Colombiertroff  \fIoptions  files\fP
227219b2ee8SDavid du Colombiernroff  \fIoptions  files\fP
228219b2ee8SDavid du Colombier.P2
229219b2ee8SDavid du Colombierwhere @options@ represents any of a number of option arguments
230219b2ee8SDavid du Colombierand @files@ represents the list of files containing the document
231219b2ee8SDavid du Colombierto be formatted.
232219b2ee8SDavid du ColombierAn argument consisting of a single minus
233219b2ee8SDavid du Colombier.CW - ' `
234219b2ee8SDavid du Colombierrepresents standard input.
235219b2ee8SDavid du ColombierIf no filenames are given input is taken from the standard input.
236219b2ee8SDavid du ColombierThe options, which may appear in any order so long as they appear
237219b2ee8SDavid du Colombierbefore the files, are:
238219b2ee8SDavid du Colombier.TS
239219b2ee8SDavid du Colombiercenter;
240219b2ee8SDavid du ColombierlfCW lw(4.5i).
241219b2ee8SDavid du Colombier-m@name@	T{
242219b2ee8SDavid du ColombierRead the macro file
243219b2ee8SDavid du Colombier@cw /sys/lib/tmac. name@
244219b2ee8SDavid du Colombierbefore the input @files@.
245219b2ee8SDavid du ColombierT}
246219b2ee8SDavid du Colombier-T@name@	T{
247219b2ee8SDavid du ColombierSpecifies
248219b2ee8SDavid du Colombierthe type of the output device.
249219b2ee8SDavid du ColombierSpecific devices are site-dependent.
250219b2ee8SDavid du ColombierFor
251219b2ee8SDavid du Colombier\*(TR,
252219b2ee8SDavid du Colombierthe most useful name is
253219b2ee8SDavid du Colombier.CW utf .
254219b2ee8SDavid du ColombierFor
255219b2ee8SDavid du Colombier\*(NR,
256219b2ee8SDavid du Colombieruseful names include
257219b2ee8SDavid du Colombier@cw "37"@ for the (default) Model 37 Teletype,
258219b2ee8SDavid du Colombier@cw lp@ for ``dumb'' line printer terminals (no half-line motions,
259219b2ee8SDavid du Colombierno reverse motions),
260219b2ee8SDavid du Colombierand @cw think@ for the HP ThinkJet printer.
261219b2ee8SDavid du ColombierT}
262219b2ee8SDavid du Colombier-i	T{
263219b2ee8SDavid du ColombierRead standard input after the input files are exhausted.
264219b2ee8SDavid du ColombierT}
265219b2ee8SDavid du Colombier-o@list@	T{
266219b2ee8SDavid du ColombierPrint only pages whose page numbers appear in @list@,
267219b2ee8SDavid du Colombierwhich consists of comma-separated numbers and number ranges.
268219b2ee8SDavid du ColombierA number range has the form @N-M@
269219b2ee8SDavid du Colombierand means pages @N@ through @M@;
270219b2ee8SDavid du Colombiera initial @-N@ means
271219b2ee8SDavid du Colombierfrom the beginning to page @N@; and a final @N-@ means
272219b2ee8SDavid du Colombierfrom @N@ to the end.
273219b2ee8SDavid du ColombierT}
274219b2ee8SDavid du Colombier-n@N@	T{
275219b2ee8SDavid du ColombierNumber first generated page @N@.
276219b2ee8SDavid du ColombierT}
277219b2ee8SDavid du Colombier-r@aN@	T{
278219b2ee8SDavid du ColombierSet number register @a@ (one-character) to @N@.
279219b2ee8SDavid du ColombierT}
280219b2ee8SDavid du Colombier-s@N@	T{
281219b2ee8SDavid du ColombierStop every @N@ pages.
282219b2ee8SDavid du Colombier\*(Nr will halt prior to every @N@ pages (default @N=1@)
283219b2ee8SDavid du Colombierto allow paper loading or
284219b2ee8SDavid du Colombierchanging, and will resume upon receipt of a newline.
285219b2ee8SDavid du Colombier\*(Tr will include a ``pause'' code every @N@ pages;
286219b2ee8SDavid du Colombierits meaning, if any, depends on the output device.
287219b2ee8SDavid du ColombierT}
288219b2ee8SDavid du Colombier-u@N@	T{
289219b2ee8SDavid du ColombierSet amount of emboldening for the
290219b2ee8SDavid du Colombier.CW bd
291219b2ee8SDavid du Colombierrequest to @N@.
292219b2ee8SDavid du ColombierT}
293219b2ee8SDavid du Colombier-F@path@	T{
294219b2ee8SDavid du ColombierLook in directory @path@ for font information;
295219b2ee8SDavid du Colombierthe defaults are
296219b2ee8SDavid du Colombier.CW /sys/lib/troff/font
297219b2ee8SDavid du Colombierand
298219b2ee8SDavid du Colombier.CW /sys/lib/troff/term
299219b2ee8SDavid du Colombierfor \*(TR
300219b2ee8SDavid du Colombierand \*(NR respectively.
301219b2ee8SDavid du ColombierT}
302219b2ee8SDavid du Colombier.sp .5
303219b2ee8SDavid du Colombier	T{
304219b2ee8SDavid du Colombier                  \*(TR Only
305219b2ee8SDavid du ColombierT}
306219b2ee8SDavid du Colombier-a	T{
307219b2ee8SDavid du ColombierSend a printable approximation
308219b2ee8SDavid du Colombierof the results to the standard output.
309219b2ee8SDavid du ColombierT}
310219b2ee8SDavid du Colombier.sp .5
311219b2ee8SDavid du Colombier	T{
312219b2ee8SDavid du Colombier                  \*(NR Only
313219b2ee8SDavid du ColombierT}
314219b2ee8SDavid du Colombier-e	T{
315219b2ee8SDavid du ColombierProduce equally-spaced words in adjusted
316219b2ee8SDavid du Colombierlines, using full terminal resolution.
317219b2ee8SDavid du ColombierT}
318219b2ee8SDavid du Colombier-h	T{
319219b2ee8SDavid du ColombierUse tabs instead of spaces
320219b2ee8SDavid du Colombierto speed up printing.
321219b2ee8SDavid du ColombierT}
322219b2ee8SDavid du Colombier-q	T{
323219b2ee8SDavid du ColombierInvoke the simultaneous input-output mode of the @cw rd@ request.
324219b2ee8SDavid du ColombierT}
325219b2ee8SDavid du Colombier.TE
326219b2ee8SDavid du Colombier.PP
327219b2ee8SDavid du ColombierEach option is a separate argument;
328219b2ee8SDavid du Colombierfor example,
329219b2ee8SDavid du Colombier.P1
330219b2ee8SDavid du Colombiertroff -Tutf -ms -mpictures -o4,6,8-10 \f2file1 file2\fP
331219b2ee8SDavid du Colombier.P2
332219b2ee8SDavid du Colombierrequests formatting of pages 4, 6, and 8 through 10 of a document contained in the files
333219b2ee8SDavid du Colombiernamed \f2file1\fP and \f2file2\fP,
334219b2ee8SDavid du Colombierspecifies the output in UTF,
335219b2ee8SDavid du Colombierand invokes the macro packages
336219b2ee8SDavid du Colombier.CW -ms
337219b2ee8SDavid du Colombierand
338219b2ee8SDavid du Colombier.CW -mpictures .
339219b2ee8SDavid du Colombier.PP
340219b2ee8SDavid du ColombierVarious pre- and post-processors are available for use with \*(NR and \*(TR.
341219b2ee8SDavid du ColombierThese include the equation preprocessor
342219b2ee8SDavid du Colombier.I eqn
343219b2ee8SDavid du Colombier(for \*(TR only),
344219b2ee8SDavid du Colombierthe table-construction preprocessor
345219b2ee8SDavid du Colombier.I tbl ,
346219b2ee8SDavid du Colombierand
347219b2ee8SDavid du Colombier.I pic
348219b2ee8SDavid du Colombierand
349219b2ee8SDavid du Colombier.I grap
350219b2ee8SDavid du Colombierfor various forms of graphics.
351219b2ee8SDavid du Colombier.sp 100
352219b2ee8SDavid du Colombier.BP
353219b2ee8SDavid du Colombier.TL
354219b2ee8SDavid du ColombierRequest Summary
355219b2ee8SDavid du Colombier.PP
356219b2ee8SDavid du ColombierIn the following table,
357219b2ee8SDavid du Colombierthe notation @+- N@ in the
358219b2ee8SDavid du Colombier.BI "Request Form
359219b2ee8SDavid du Colombiercolumn means that the forms @N@, @+N@, or @-N@ are permitted,
360219b2ee8SDavid du Colombierto set the parameter to @N@, increment it by @N@, or decrement it by @N@,
361219b2ee8SDavid du Colombierrespectively.
362219b2ee8SDavid du ColombierPlain @N@ means that the value is used to set the parameter.
363219b2ee8SDavid du Colombier.BI "Initial Values
364219b2ee8SDavid du Colombierseparated by
365219b2ee8SDavid du Colombier.CW ;
366219b2ee8SDavid du Colombierare for
367219b2ee8SDavid du Colombier\*(TR
368219b2ee8SDavid du Colombierand
369219b2ee8SDavid du Colombier\*(NR
370219b2ee8SDavid du Colombierrespectively.
371219b2ee8SDavid du ColombierIn the
372219b2ee8SDavid du Colombier.BI Notes
373219b2ee8SDavid du Colombiercolumn,
374219b2ee8SDavid du Colombier.TS
375219b2ee8SDavid du Colombiercenter;
376219b2ee8SDavid du Colombierc lw(4.5i).
377219b2ee8SDavid du ColombierB	T{
378219b2ee8SDavid du ColombierRequest normally causes a break.
379219b2ee8SDavid du ColombierThe use of
380219b2ee8SDavid du Colombier.CW ' \&
381219b2ee8SDavid du Colombieras control character (instead of
382219b2ee8SDavid du Colombier.CW . )\&
383219b2ee8SDavid du Colombiersuppresses the break function.
384219b2ee8SDavid du ColombierT}
385219b2ee8SDavid du ColombierD	T{
386219b2ee8SDavid du ColombierMode or relevant parameters associated with current diversion level.
387219b2ee8SDavid du ColombierT}
388219b2ee8SDavid du ColombierE	T{
389219b2ee8SDavid du ColombierRelevant parameters are a part of the current environment.
390219b2ee8SDavid du ColombierT}
391219b2ee8SDavid du ColombierO	T{
392219b2ee8SDavid du ColombierMust stay in effect until logical output.
393219b2ee8SDavid du ColombierT}
394219b2ee8SDavid du ColombierP	T{
395219b2ee8SDavid du ColombierMode must be still or again in effect at the time of physical output.
396219b2ee8SDavid du ColombierT}
397219b2ee8SDavid du ColombierT	T{
398219b2ee8SDavid du Colombier\*(TR only; no effect in \*(NR.
399219b2ee8SDavid du ColombierT}
400219b2ee8SDavid du Colombier@bold v@, @bold p@, @bold m@, @bold u@	T{
401219b2ee8SDavid du ColombierDefault scale indicator; if not specified, scale indicators are ignored.
402219b2ee8SDavid du ColombierT}
403219b2ee8SDavid du Colombier.TE
404219b2ee8SDavid du Colombier.sp
405219b2ee8SDavid du Colombier.tr &.
406219b2ee8SDavid du Colombier.ps 9
407219b2ee8SDavid du Colombier.vs 11
408219b2ee8SDavid du Colombier.nr z 0 1
409219b2ee8SDavid du Colombier.TS
410219b2ee8SDavid du Colombierlf2 lf2 lf2 lf2 lf2
411219b2ee8SDavid du Colombierlf2 lf2 lf2 lf2 lf2
412219b2ee8SDavid du ColombierlfCW l l l l.
413219b2ee8SDavid du ColombierRequest	Initial	If No
414219b2ee8SDavid du ColombierForm	Value	Argument	Notes	Explanation
415219b2ee8SDavid du Colombier.sp .5
416219b2ee8SDavid du Colombier.T&
417219b2ee8SDavid du Colombierlf3 s s s s.
418219b2ee8SDavid du Colombier\\n+z.  General Information
419219b2ee8SDavid du Colombier.sp .5
420219b2ee8SDavid du Colombier.T&
421219b2ee8SDavid du Colombierlf3 s s s s
422219b2ee8SDavid du ColombierlfCW l l l l.
423219b2ee8SDavid du Colombier\\n+z.  Font and Character Size Control
424219b2ee8SDavid du Colombier.sp .5
425219b2ee8SDavid du Colombier&ps @+- N@	10 point	previous	E,T	Point size; also @cw "\es" +- N@.
426219b2ee8SDavid du Colombier&ss @N@	12/36\fBm\fP	ignored	E,T	Space-character size set to @N/36@ em.
427219b2ee8SDavid du Colombier&cs @ F~N~ M@	off	-	P,T	Constant character space (width) mode (font @F@).
428219b2ee8SDavid du Colombier&bd @F~N@	off	-	P,T	Embolden font @F@ by @N-1@ units.
429219b2ee8SDavid du Colombier&bd S@~F~N@	off	-	P,T	Embolden Special Font when current font is @F@.
430219b2ee8SDavid du Colombier&ft@~F@	Roman	previous	E	Change to font @F@; also @cw "\ef" x@, @cw "\ef(" xx@, @cw "\ef" N@.
431219b2ee8SDavid du Colombier&fp@~N~F~L@	R,I,B,...,S	ignored	-	Mount font named @F@ on physical position @N <= 1@;
432219b2ee8SDavid du Colombier				  long name is @L@ if given.
433219b2ee8SDavid du Colombier.sp .5
434219b2ee8SDavid du Colombier.T&
435219b2ee8SDavid du Colombierlf3 s s s s
436219b2ee8SDavid du ColombierlfCW l l l l.
437219b2ee8SDavid du Colombier\\n+z.  Page Control
438219b2ee8SDavid du Colombier&pl @+- N@	11i	11i	@bold v@	Page length.
439219b2ee8SDavid du Colombier&bp @+- N@	@N=1@	-	B,@bold v@	Eject current page; next page number @N@.
440219b2ee8SDavid du Colombier&pn @+- N@	@N=1@	ignored	-	Next page number @N@.
441219b2ee8SDavid du Colombier&po @+- N@	1i; 0	previous	@bold v@	Page offset.
442219b2ee8SDavid du Colombier&ne @N@	-	@N=1 roman v@	D,@bold v@	Need @N@ vertical space.
443219b2ee8SDavid du Colombier&mk @R@	none	internal	D	Mark current vertical place in register @R@.
444219b2ee8SDavid du Colombier&rt @+- N@	none	internal	D,@bold v@	Return (upward only) to marked vertical place.
445219b2ee8SDavid du Colombier.sp .5
446219b2ee8SDavid du Colombier.T&
447219b2ee8SDavid du Colombierlf3 s s s s
448219b2ee8SDavid du ColombierlfCW l l l l.
449219b2ee8SDavid du Colombier\\n+z.  Text Filling, Adjusting, and Centering
450219b2ee8SDavid du Colombier&br	-	-	B	Break.
451219b2ee8SDavid du Colombier&fi	fill	-	B,E	Fill output lines.
452219b2ee8SDavid du Colombier&nf	fill	-	B,E	No filling or adjusting of output lines.
453219b2ee8SDavid du Colombier&ad @c@	adj, both	adjust	E	Adjust output lines with mode @c@;  @c = cw l , cw r , cw c , cw b , none@
454219b2ee8SDavid du Colombier&na	adjust	-	E	No output line adjusting.
455219b2ee8SDavid du Colombier&ce @N@	off	@N=1@	B,E	Center next @N@ input text lines.
456219b2ee8SDavid du Colombier.sp .5
457219b2ee8SDavid du Colombier.T&
458219b2ee8SDavid du Colombierlf3 s s s s
459219b2ee8SDavid du ColombierlfCW l l l l.
460219b2ee8SDavid du Colombier\\n+z.  Vertical Spacing
461219b2ee8SDavid du Colombier&vs @N@	12p; 1/6i	previous	E,@bold p@	Vertical baseline spacing (@V@).
462219b2ee8SDavid du Colombier&ls @N@	@N=1@	previous	E	Output @N-1@ @bold v@'s after each text output line.
463219b2ee8SDavid du Colombier&sp @N@	-	@N=1@v	B,@bold v@	Space vertical distance @N@ in either direction.
464219b2ee8SDavid du Colombier&sv @N@	-	@N=1@v	@bold v@	Save vertical distance @N@.
465219b2ee8SDavid du Colombier&os	-	-	-	Output saved vertical distance.
466219b2ee8SDavid du Colombier&ns	space	-	D	Turn no-space mode on.
467219b2ee8SDavid du Colombier&rs	-	-	D	Restore spacing; turn no-space mode off.
468219b2ee8SDavid du Colombier.sp .5
469219b2ee8SDavid du Colombier.T&
470219b2ee8SDavid du Colombierlf3 s s s s
471219b2ee8SDavid du ColombierlfCW l l l l.
472219b2ee8SDavid du Colombier\\n+z.  Line Length and Indenting
473219b2ee8SDavid du Colombier&ll @+- N@	6.5i	previous	E,@bold m@	Line length.
474219b2ee8SDavid du Colombier&in @+- N@	@N=0@	previous	B,E,@bold m@	Indent.
475219b2ee8SDavid du Colombier&ti @+- N@	-	ignored	B,E,@bold m@	Temporary indent.
476219b2ee8SDavid du Colombier.sp .5
477219b2ee8SDavid du Colombier.ne 2.1
478219b2ee8SDavid du Colombier.T&
479219b2ee8SDavid du Colombierlf3 s s s s
480219b2ee8SDavid du ColombierlfCW l l l l.
481219b2ee8SDavid du Colombier\\n+z.  Macros, Strings, Diversion, and Position Traps
482219b2ee8SDavid du Colombier&de @xx~yy@	-	@.yy= cw ".."@	-	Define or redefine macro @xx@; end at call of @yy@.
483219b2ee8SDavid du Colombier&am @xx~yy@	-	@.yy= cw ".."@	-	Append to a macro.
484219b2ee8SDavid du Colombier&ds @xx~string@	-	ignored	-	Define a string @xx@ containing @string@.
485219b2ee8SDavid du Colombier&as @xx~string@	-	ignored	-	Append @string@ to string @xx@.
486219b2ee8SDavid du Colombier&rm @xx@	-	ignored	-	Remove request, macro, or string.
487219b2ee8SDavid du Colombier&rn @xx~yy@	-	ignored	-	Rename request, macro, or string @xx@ to @yy@.
488219b2ee8SDavid du Colombier&di @xx@	-	end	D	Divert output to macro @xx@.
489219b2ee8SDavid du Colombier&da @xx@	-	end	D	Divert and append to @xx@.
490219b2ee8SDavid du Colombier&wh @N~xx@	-	-	@bold v@	Set location trap; negative is w.r.t. page bottom.
491219b2ee8SDavid du Colombier&ch @xx~N@	-	-	@bold v@	Change trap location.
492219b2ee8SDavid du Colombier&dt @N~xx@	-	off	D,@bold v@	Set a diversion trap.
493219b2ee8SDavid du Colombier&it @N~xx@	-	off	E	Set an input-line count trap.
494219b2ee8SDavid du Colombier&em @xx@	none	none	-	End macro is @xx@.
495219b2ee8SDavid du Colombier.sp .5
496219b2ee8SDavid du Colombier.T&
497219b2ee8SDavid du Colombierlf3 s s s s
498219b2ee8SDavid du ColombierlfCW l l l l.
499219b2ee8SDavid du Colombier\\n+z.  Number Registers
500219b2ee8SDavid du Colombier&nr @R~+- N~M@		-	@bold u@	Define and set number register @R@;
501219b2ee8SDavid du Colombier				  auto-increment by @M@.
502219b2ee8SDavid du Colombier&af @R~c@	arabic	-	-	Assign format to register @R@ (@c= cw "1" , cw i , cw I , cw a , cw A@).
503219b2ee8SDavid du Colombier&rr @R@	-	-	-	Remove register @R@.
504219b2ee8SDavid du Colombier.sp .5
505219b2ee8SDavid du Colombier.T&
506219b2ee8SDavid du Colombierlf3 s s s s
507219b2ee8SDavid du ColombierlfCW l l l l.
508219b2ee8SDavid du Colombier\\n+z.  Tabs, Leaders, and Fields
509219b2ee8SDavid du Colombier&ta@~Nt~. . .@	0.5i; 0.8n	none	E,@bold m@	Tab settings; left-adjusting, unless
510219b2ee8SDavid du Colombier				  @t= cw R@ (right), @cw C@ (centered).
511219b2ee8SDavid du Colombier&tc@~c@	none	none	E	Tab repetition character.
512219b2ee8SDavid du Colombier&lc@~c@	@cw "."@	none	E	Leader repetition character.
513219b2ee8SDavid du Colombier&fc@~a~b@	off	off	-	Set field delimiter @a@ and pad character @b@.
514219b2ee8SDavid du Colombier.sp .5
515219b2ee8SDavid du Colombier.T&
516219b2ee8SDavid du Colombierlf3 s s s s
517219b2ee8SDavid du ColombierlfCW l l l l.
518219b2ee8SDavid du Colombier\\n+z.  Input and Output Conventions and Character Translations
519219b2ee8SDavid du Colombier&ec@~c@	\e	\e	-	Set escape character.
520219b2ee8SDavid du Colombier&eo	on	-	-	Turn off escape character mechanism.
521219b2ee8SDavid du Colombier&lg@~N@	on; -	on	T	Ligature mode on if @N>0@.
522219b2ee8SDavid du Colombier&ul@~N@	off	@N=1@	E	Underline (italicize in \*(TR\^) @N@ input lines.
523219b2ee8SDavid du Colombier&cu@~N@	off	@N=1@	E	Continuous underline in \*(NR; in \*(TR, like @cw ul@.
524219b2ee8SDavid du Colombier&uf@~F@	Italic	Italic	-	Underline font set to @F@ (to be switched to by @cw ul@).
525219b2ee8SDavid du Colombier&cc@~c@	@cw .@	@cw .@	E	Set control character to @c@.
526219b2ee8SDavid du Colombier&c2@~c@	@cw "'"@	@cw "'"@	E	Set no-break control character to @c@.
527219b2ee8SDavid du Colombier&tr@~abcd....@	none	-	O	Translate @a@ to @b@, etc., on output.
528219b2ee8SDavid du Colombier.sp .5
529219b2ee8SDavid du Colombier.T&
530219b2ee8SDavid du Colombierlf3 s s s s.
531219b2ee8SDavid du Colombier\\n+z.  Local Horizontal and Vertical Motions, and the Width Function
532219b2ee8SDavid du Colombier.sp .5
533219b2ee8SDavid du Colombier.T&
534219b2ee8SDavid du Colombierlf3 s s s s.
535219b2ee8SDavid du Colombier\\n+z.  Overstrike, Bracket, Line-drawing, Graphics, and Zero-width Functions
536219b2ee8SDavid du Colombier.sp .5
537219b2ee8SDavid du Colombier.T&
538219b2ee8SDavid du Colombierlf3 s s s s
539219b2ee8SDavid du ColombierlfCW l l l l.
540219b2ee8SDavid du Colombier\\n+z.  Hyphenation.
541219b2ee8SDavid du Colombier&nh	hyphenate	-	E	No hyphenation.
542219b2ee8SDavid du Colombier&hy@~N@	hyphenate	hyphenate	E	Hyphenate; @N =@ mode.
543219b2ee8SDavid du Colombier&hc@~c@	@cw "\e%"@	@cw "\e%"@	E	Hyphenation indicator character @c@.
544219b2ee8SDavid du Colombier&hw@~word~. . .@		ignored	-	Add words to hyphenation dictionary.
545219b2ee8SDavid du Colombier.sp .5
546219b2ee8SDavid du Colombier.T&
547219b2ee8SDavid du Colombierlf3 s s s s
548219b2ee8SDavid du ColombierlfCW l l l l.
549219b2ee8SDavid du Colombier\\n+z.  Three-Part Titles.
550219b2ee8SDavid du Colombier&tl@~'l'c'r'@		-	-	Three-part title; delimiter may be any character.
551219b2ee8SDavid du Colombier&pc@~c@	@cw %@	off	-	Page number character.
552219b2ee8SDavid du Colombier&lt@~+- N@	6.5i	previous	E,@bold m@	Length of title.
553219b2ee8SDavid du Colombier.sp .5
554219b2ee8SDavid du Colombier.T&
555219b2ee8SDavid du Colombierlf3 s s s s
556219b2ee8SDavid du ColombierlfCW l l l l.
557219b2ee8SDavid du Colombier\\n+z.  Output Line Numbering.
558219b2ee8SDavid du Colombier&nm@~+- N^M^S^I@		off	E	Number mode on or off, set parameters.
559219b2ee8SDavid du Colombier&nn@~N@	-	@N=1@	E	Do not number next @N@ lines.
560219b2ee8SDavid du Colombier.sp .5
561219b2ee8SDavid du Colombier.ne 2
562219b2ee8SDavid du Colombier.T&
563219b2ee8SDavid du Colombierlf3 s s s s
564219b2ee8SDavid du ColombierlfCW l l l l.
565219b2ee8SDavid du Colombier\\n+z.  Conditional Acceptance of Input
566219b2ee8SDavid du Colombier&if@~c~any@		-	-	If condition @c@ true, accept @any@ as input;
567219b2ee8SDavid du Colombier				  for multi-line, use @cw "\e{" any cw "\e}"@.
568219b2ee8SDavid du Colombier&if !@c~any@		-	-	If condition @c@ false, accept @any@.
569219b2ee8SDavid du Colombier&if@~N~any@		-	@bold u@	If expression @N > 0@, accept @any@.
570219b2ee8SDavid du Colombier&if !@N~any@		-	@bold u@	If expression @N <= 0@ [sic], accept @any@.
571219b2ee8SDavid du Colombier&if@~ 's1 's2 '~any@		-	-	If string @s1@ identical to @s2@, accept @any@.
572219b2ee8SDavid du Colombier&if !@ 's1 's2 '~any@		-	-	If string @s1@ not identical to @s2@, accept @any@.
573219b2ee8SDavid du Colombier&ie@~c~any@		-	@bold u@	If portion of if-else; all above forms (like @cw "if"@).
574219b2ee8SDavid du Colombier&el@~any@		-	-	Else portion of if-else.
575219b2ee8SDavid du Colombier.sp .5
576219b2ee8SDavid du Colombier.T&
577219b2ee8SDavid du Colombierlf3 s s s s
578219b2ee8SDavid du ColombierlfCW l l l l.
579219b2ee8SDavid du Colombier\\n+z.  Environment Switching
580219b2ee8SDavid du Colombier&ev@~N@	@N=0@	previous	-	Environment switch (push down).
581219b2ee8SDavid du Colombier.sp .5
582219b2ee8SDavid du Colombier.T&
583219b2ee8SDavid du Colombierlf3 s s s s
584219b2ee8SDavid du ColombierlfCW l l l l.
585219b2ee8SDavid du Colombier\\n+z.  Insertions from the Standard Input
586219b2ee8SDavid du Colombier&rd@~prompt@	-	@prompt@=\s-1BEL\s+1	-	Read insertion.
587219b2ee8SDavid du Colombier&ex	-	-	-	Exit.
588219b2ee8SDavid du Colombier.sp .5
589219b2ee8SDavid du Colombier.T&
590219b2ee8SDavid du Colombierlf3 s s s s
591219b2ee8SDavid du ColombierlfCW l l l l.
592219b2ee8SDavid du Colombier\\n+z.  Input/Output File Switching
593219b2ee8SDavid du Colombier&so@~filename@		-	-	Switch source file (push down).
594219b2ee8SDavid du Colombier&nx@~filename@		end-of-file	-	Next file.
595219b2ee8SDavid du Colombier&sy@~string@		-	-	Execute program @string@.  Output not interpolated.
596219b2ee8SDavid du Colombier&pi@~string@		-	-	Pipe output to program @string@.
597219b2ee8SDavid du Colombier&cf@~filename@		-	-	Copy file contents to \*(TR output.
598219b2ee8SDavid du Colombier.sp .5
599219b2ee8SDavid du Colombier.T&
600219b2ee8SDavid du Colombierlf3 s s s s
601219b2ee8SDavid du ColombierlfCW l l l l.
602219b2ee8SDavid du Colombier\\n+z.  Miscellaneous
603219b2ee8SDavid du Colombier&mc@~c~N@	-	off	E,@bold m@	Set margin character @c@ and separation @N@.
604219b2ee8SDavid du Colombier&tm@~string@	-	newline	-	Print @string@ on terminal (standard error).
605219b2ee8SDavid du Colombier&ab@~string@	-	newline	-	Print @string@ on standard error, exit program.
606219b2ee8SDavid du Colombier&ig@~yy@	-	@.yy= cw ".."@	-	Ignore input until call of @yy@.
607219b2ee8SDavid du Colombier&lf@~N ~f@		-	-	Set input line number to @N@ and filename to @f@.
608219b2ee8SDavid du Colombier&pm@~t@	-	all	-	Print macro names, sizes; if @t@ present, print total.
609219b2ee8SDavid du Colombier&fl	-	-	B	Flush output buffer.
610219b2ee8SDavid du Colombier.sp .5
611219b2ee8SDavid du Colombier.T&
612219b2ee8SDavid du Colombierlf3 s s s s.
613219b2ee8SDavid du Colombier\\n+z.  Output and Error Messages
614219b2ee8SDavid du Colombier.sp .5
615219b2ee8SDavid du Colombier\\n+z.  Output Language
616219b2ee8SDavid du Colombier.sp .5
617219b2ee8SDavid du Colombier\\n+z.  Device and Font Description Files
618219b2ee8SDavid du Colombier.TE
619219b2ee8SDavid du Colombier.br
620219b2ee8SDavid du Colombier.nr zz 9
621219b2ee8SDavid du Colombier.de cl
622219b2ee8SDavid du Colombier.ie \\n+(cl<\n(zz \{\
623219b2ee8SDavid du Colombier.	po +\\n(.lu/\n(zzu
624219b2ee8SDavid du Colombier.	rt\}
625219b2ee8SDavid du Colombier.el \{.po 1i\}
626219b2ee8SDavid du Colombier..
627219b2ee8SDavid du Colombier.nr cl 0 1
628219b2ee8SDavid du Colombier.di zz
629219b2ee8SDavid du Colombier.ta .45iR
630219b2ee8SDavid du Colombier... was .35
631219b2ee8SDavid du Colombier.nf
632219b2ee8SDavid du Colombier.ps 9
633219b2ee8SDavid du Colombier.vs 10.5
634219b2ee8SDavid du Colombier\f(CWab\fP	20
635219b2ee8SDavid du Colombier\f(CWad\fP	4
636219b2ee8SDavid du Colombier\f(CWaf\fP	8
637219b2ee8SDavid du Colombier\f(CWam\fP	7
638219b2ee8SDavid du Colombier\f(CWas\fP	7
639219b2ee8SDavid du Colombier\f(CWbd\fP	2
640219b2ee8SDavid du Colombier\f(CWbp\fP	3
641219b2ee8SDavid du Colombier\f(CWbr\fP	4
642219b2ee8SDavid du Colombier\f(CWc2\fP	10
643219b2ee8SDavid du Colombier\f(CWcc\fP	10
644219b2ee8SDavid du Colombier\f(CWce\fP	4
645219b2ee8SDavid du Colombier\f(CWcf\fP	19
646219b2ee8SDavid du Colombier\f(CWch\fP	7
647219b2ee8SDavid du Colombier\f(CWcs\fP	2
648219b2ee8SDavid du Colombier\f(CWcu\fP	10
649219b2ee8SDavid du Colombier\f(CWda\fP	7
650219b2ee8SDavid du Colombier\f(CWde\fP	7
651219b2ee8SDavid du Colombier\f(CWdi\fP	7
652219b2ee8SDavid du Colombier\f(CWds\fP	7
653219b2ee8SDavid du Colombier\f(CWdt\fP	7
654219b2ee8SDavid du Colombier\f(CWec\fP	10
655219b2ee8SDavid du Colombier\f(CWel\fP	16
656219b2ee8SDavid du Colombier\f(CWem\fP	7
657219b2ee8SDavid du Colombier\f(CWeo\fP	10
658219b2ee8SDavid du Colombier\f(CWev\fP	17
659219b2ee8SDavid du Colombier\f(CWex\fP	18
660219b2ee8SDavid du Colombier\f(CWfc\fP	9
661219b2ee8SDavid du Colombier\f(CWfi\fP	4
662219b2ee8SDavid du Colombier\f(CWfl\fP	20
663219b2ee8SDavid du Colombier\f(CWfp\fP	2
664219b2ee8SDavid du Colombier\f(CWft\fP	2
665219b2ee8SDavid du Colombier\f(CWhc\fP	13
666219b2ee8SDavid du Colombier\f(CWhw\fP	13
667219b2ee8SDavid du Colombier\f(CWhy\fP	13
668219b2ee8SDavid du Colombier\f(CWie\fP	16
669219b2ee8SDavid du Colombier\f(CWif\fP	16
670219b2ee8SDavid du Colombier\f(CWig\fP	20
671219b2ee8SDavid du Colombier\f(CWin\fP	6
672219b2ee8SDavid du Colombier\f(CWit\fP	7
673219b2ee8SDavid du Colombier\f(CWlc\fP	9
674219b2ee8SDavid du Colombier\f(CWlg\fP	10
675219b2ee8SDavid du Colombier\f(CWlf\fP	20
676219b2ee8SDavid du Colombier\f(CWll\fP	6
677219b2ee8SDavid du Colombier\f(CWls\fP	5
678219b2ee8SDavid du Colombier\f(CWlt\fP	14
679219b2ee8SDavid du Colombier\f(CWmc\fP	20
680219b2ee8SDavid du Colombier\f(CWmk\fP	3
681219b2ee8SDavid du Colombier\f(CWna\fP	4
682219b2ee8SDavid du Colombier\f(CWne\fP	3
683219b2ee8SDavid du Colombier\f(CWnf\fP	4
684219b2ee8SDavid du Colombier\f(CWnh\fP	13
685219b2ee8SDavid du Colombier\f(CWnm\fP	15
686219b2ee8SDavid du Colombier\f(CWnn\fP	15
687219b2ee8SDavid du Colombier\f(CWnr\fP	8
688219b2ee8SDavid du Colombier\f(CWns\fP	5
689219b2ee8SDavid du Colombier\f(CWnx\fP	19
690219b2ee8SDavid du Colombier\f(CWos\fP	5
691219b2ee8SDavid du Colombier\f(CWpc\fP	14
692219b2ee8SDavid du Colombier\f(CWpi\fP	19
693219b2ee8SDavid du Colombier\f(CWpl\fP	3
694219b2ee8SDavid du Colombier\f(CWpm\fP	20
695219b2ee8SDavid du Colombier\f(CWpn\fP	3
696219b2ee8SDavid du Colombier\f(CWpo\fP	3
697219b2ee8SDavid du Colombier\f(CWps\fP	2
698219b2ee8SDavid du Colombier\f(CWrd\fP	18
699219b2ee8SDavid du Colombier\f(CWrm\fP	7
700219b2ee8SDavid du Colombier\f(CWrn\fP	7
701219b2ee8SDavid du Colombier\f(CWrr\fP	8
702219b2ee8SDavid du Colombier\f(CWrs\fP	5
703219b2ee8SDavid du Colombier\f(CWrt\fP	3
704219b2ee8SDavid du Colombier\f(CWso\fP	19
705219b2ee8SDavid du Colombier\f(CWsp\fP	5
706219b2ee8SDavid du Colombier\f(CWss\fP	2
707219b2ee8SDavid du Colombier\f(CWsv\fP	5
708219b2ee8SDavid du Colombier\f(CWsy\fP	19
709219b2ee8SDavid du Colombier\f(CWta\fP	9
710219b2ee8SDavid du Colombier\f(CWtc\fP	9
711219b2ee8SDavid du Colombier\f(CWti\fP	6
712219b2ee8SDavid du Colombier\f(CWtl\fP	14
713219b2ee8SDavid du Colombier\f(CWtm\fP	20
714219b2ee8SDavid du Colombier\f(CWtr\fP	10
715219b2ee8SDavid du Colombier\f(CWuf\fP	10
716219b2ee8SDavid du Colombier\f(CWul\fP	10
717219b2ee8SDavid du Colombier\f(CWvs\fP	5
718219b2ee8SDavid du Colombier\f(CWwh\fP	7
719219b2ee8SDavid du Colombier.di
720219b2ee8SDavid du Colombier.nr aa \n(dn/\n(zz
721219b2ee8SDavid du Colombier.ne \\n(aau+10p
722219b2ee8SDavid du Colombier.sp
723219b2ee8SDavid du Colombier.SP 2
724219b2ee8SDavid du Colombier.TL
725219b2ee8SDavid du ColombierAlphabetical Request and Section Number Cross Reference
726219b2ee8SDavid du Colombier.SP .5
727219b2ee8SDavid du Colombier.LP
728219b2ee8SDavid du Colombier.sp .5
729219b2ee8SDavid du Colombier.nf
730219b2ee8SDavid du Colombier.wh \n(nlu+\n(aau cl
731219b2ee8SDavid du Colombier.nr qq \n(nlu+\n(aau
732219b2ee8SDavid du Colombier.ps
733219b2ee8SDavid du Colombier.vs
734219b2ee8SDavid du Colombier.mk
735219b2ee8SDavid du Colombier.zz
736219b2ee8SDavid du Colombier.rt
737219b2ee8SDavid du Colombier.sp \n(.tu
738219b2ee8SDavid du Colombier.ch cl 12i
739219b2ee8SDavid du Colombier.sp 100
740219b2ee8SDavid du Colombier.BP
741219b2ee8SDavid du Colombier.TL
742219b2ee8SDavid du ColombierEscape Sequences for Characters, Indicators, and Functions
743219b2ee8SDavid du Colombier.SP .5
744219b2ee8SDavid du Colombier.LP
745219b2ee8SDavid du Colombier.ps -1
746219b2ee8SDavid du Colombier.vs -1
747219b2ee8SDavid du Colombier.TS
748219b2ee8SDavid du Colombiercenter;
749219b2ee8SDavid du Colombierc2 l
750219b2ee8SDavid du Colombierc2 l2 l
751219b2ee8SDavid du Colombiern2 l2fCW l.
752219b2ee8SDavid du Colombier.ft 4
753219b2ee8SDavid du ColombierSection	Escape
754219b2ee8SDavid du ColombierReference	Sequence	Meaning
755219b2ee8SDavid du Colombier.ft
756219b2ee8SDavid du Colombier.sp .5
757219b2ee8SDavid du Colombier10.1	\e\e	\&\f(CW\e\fP prevents or delays the interpretation of \&\f(CW\e\fP
758219b2ee8SDavid du Colombier10.1	\ee	Printable version of the current escape character.
759219b2ee8SDavid du Colombier2.1	\e'	\' (acute accent); equivalent to \&\f(CW\e(aa\fP
760219b2ee8SDavid du Colombier2.1	\e`	\` (grave accent); equivalent to \&\f(CW\e(ga\fP
761219b2ee8SDavid du Colombier2.1	\e\-	\- Minus sign in the current font
762219b2ee8SDavid du Colombier7.	\e\^.	Period (dot) (see \&\f(CWde\fP)
763219b2ee8SDavid du Colombier11.1	\e\f2space\fP	Unpaddable space-size space character
764219b2ee8SDavid du Colombier11.1	\e0	Digit width space
765219b2ee8SDavid du Colombier11.1	\e|	1/6 em narrow space character (zero width in \*(NR\^)
766219b2ee8SDavid du Colombier11.1	\e^	1/12 em half-narrow space character (zero width in \*(NR\^)
767219b2ee8SDavid du Colombier.tr &&
768219b2ee8SDavid du Colombier4.1	\e&	Non-printing, zero width character
769219b2ee8SDavid du Colombier.tr &.
770219b2ee8SDavid du Colombier10.6	\e!	Transparent line indicator
771219b2ee8SDavid du Colombier10.8	\e"	Beginning of comment; continues to end of line
772219b2ee8SDavid du Colombier13.	\e%	Default optional hyphenation character
773219b2ee8SDavid du Colombier2.1	\e(@xx@	Character named @xx@
774219b2ee8SDavid du Colombier7.1	\e*@x,~@\e*(@xx@	Interpolate string @x@ or @xx@
775219b2ee8SDavid du Colombier7.3	\e$@N@	Interpolate argument @1 <= N <= 9@
776219b2ee8SDavid du Colombier9.1	\ea	Non-interpreted leader character
777219b2ee8SDavid du Colombier12.3	\eb'@abc...@'	Bracket building function
778219b2ee8SDavid du Colombier4.2	\ec	Connect to next input text
779219b2ee8SDavid du Colombier2.1	\eC'@xyz@'	Character named @xyz@
780219b2ee8SDavid du Colombier11.1	\ed	Downward 1/2 em vertical motion (1/2 line in \*(NR\^)
781219b2ee8SDavid du Colombier12.5	\eD'@c...@'	Draw graphics function @c@ with parameters @. . .@; @c= cw l , cw c , cw e , cw a , cw "~"@
782219b2ee8SDavid du Colombier2.2	\ef@x,~@\ef(@xx,~@\ef@N@	Change to font named @x@ or @xx@, or position @N@
783219b2ee8SDavid du Colombier8.	\eg@x,~@\eg(@xx@	Format of number register @x@ or @xx@
784219b2ee8SDavid du Colombier11.1	\eh'@N@'	Local horizontal motion; move right @N@ (negative left)
785219b2ee8SDavid du Colombier2.3	\eH'@N@'	Height of current font is @N@
786219b2ee8SDavid du Colombier11.3	\ek@x@	Mark horizontal input place in register @x@
787219b2ee8SDavid du Colombier12.4	\el'@Nc@'	Horizontal line drawing function (optionally with @c@ )
788219b2ee8SDavid du Colombier12.4	\eL'@Nc@'	Vertical line drawing function (optionally with @c@ )
789219b2ee8SDavid du Colombier8.	\en@x,~@\en(@xx@	Contents of number register @x@ or @xx@
790219b2ee8SDavid du Colombier2.1	\eN'@N@'	Character number @N@ on current font
791219b2ee8SDavid du Colombier12.1	\eo'@abc...@'	Overstrike characters @a,~ b,~ c@, ...
792219b2ee8SDavid du Colombier4.1	\ep	Break and spread output line
793219b2ee8SDavid du Colombier11.1	\er	Reverse 1 em vertical motion (reverse line in \*(NR\^)
794219b2ee8SDavid du Colombier2.3	\es@N,~@\es@+- N@	Point-size change function; also @cw "\es(" nn@, @cw "\es" +- cw "(" nn@
795219b2ee8SDavid du Colombier2.2	\eS'@N@'	Slant output @N@ degrees
796219b2ee8SDavid du Colombier9.1	\et	Non-interpreted horizontal tab
797219b2ee8SDavid du Colombier11.1	\eu	Reverse (up) 1/2 em vertical motion (1/2 line in \*(NR\^)
798219b2ee8SDavid du Colombier11.1	\ev'@N@'	Local vertical motion; move down N (negative up)
799219b2ee8SDavid du Colombier11.2	\ew'@string@'	Width of @string@
800219b2ee8SDavid du Colombier5.2	\ex'@N@'	Extra line-space function (negative before, positive after)
801219b2ee8SDavid du Colombier10.7	\eX'@string@'	Output @string@ as device control function
802219b2ee8SDavid du Colombier12.2	\ez@c@	Print @c@ with zero width (without spacing)
803219b2ee8SDavid du Colombier16.	\e{	Begin conditional input
804219b2ee8SDavid du Colombier16.	\e}	End conditional input
805219b2ee8SDavid du Colombier10.8	\e@newline@	Concealed (ignored) newline
806219b2ee8SDavid du Colombier-	\e@Z@	@Z@, any character not listed above
807219b2ee8SDavid du Colombier.TE
808219b2ee8SDavid du Colombier.ps +1
809219b2ee8SDavid du Colombier.vs +1
810219b2ee8SDavid du Colombier.LP
811219b2ee8SDavid du ColombierThe escape sequences
812219b2ee8SDavid du Colombier.CW \e\e ,
813219b2ee8SDavid du Colombier.CW \e\^. ,
814219b2ee8SDavid du Colombier.CW \e" ,
815219b2ee8SDavid du Colombier.CW \e$ ,
816219b2ee8SDavid du Colombier.CW \e* ,
817219b2ee8SDavid du Colombier.CW \ea ,
818219b2ee8SDavid du Colombier.CW \en ,
819219b2ee8SDavid du Colombier.CW \et ,
820219b2ee8SDavid du Colombier.CW \eg ,
821219b2ee8SDavid du Colombierand
822219b2ee8SDavid du Colombier.CW \e@newline@
823219b2ee8SDavid du Colombierare interpreted in copy mode (§7.2).
824219b2ee8SDavid du Colombier.SP .5i
825219b2ee8SDavid du Colombier\0
826219b2ee8SDavid du Colombier.sp 100
827219b2ee8SDavid du Colombier.BP
828219b2ee8SDavid du Colombier.TL
829219b2ee8SDavid du ColombierPredefined Number Registers
830219b2ee8SDavid du Colombier.LP
831219b2ee8SDavid du Colombier.ps -1
832219b2ee8SDavid du Colombier.vs -1
833219b2ee8SDavid du Colombier.TS
834219b2ee8SDavid du Colombierc2l
835219b2ee8SDavid du Colombierc2 l2 l
836219b2ee8SDavid du Colombiern2 l2fCW l.
837219b2ee8SDavid du Colombier.ft 4
838219b2ee8SDavid du ColombierSection	Register
839219b2ee8SDavid du ColombierReference	Name	Description
840219b2ee8SDavid du Colombier.ft
841219b2ee8SDavid du Colombier.sp .5
842219b2ee8SDavid du Colombier3.	%	Current page number.
843219b2ee8SDavid du Colombier11.2	ct	Character type (set by \&\f(CW\ew\fP function).
844219b2ee8SDavid du Colombier7.4	dl	Width (maximum) of last completed diversion.
845219b2ee8SDavid du Colombier7.4	dn	Height (vertical size) of last completed diversion.
846219b2ee8SDavid du Colombier-	dw	Current day of the week (1-7).
847219b2ee8SDavid du Colombier-	dy	Current day of the month (1-31).
848219b2ee8SDavid du Colombier15.	ln	Output line number.
849219b2ee8SDavid du Colombier-	mo	Current month (1-12).
850219b2ee8SDavid du Colombier4.1	nl	Vertical position of last printed text baseline.
851219b2ee8SDavid du Colombier11.2	sb	Depth of string below baseline (generated by \&\f(CW\ew\fP function).
852219b2ee8SDavid du Colombier11.2	st	Height of string above baseline (generated by \&\f(CW\ew\fP function).
853219b2ee8SDavid du Colombier-	yr	Last two digits of current year.
854219b2ee8SDavid du Colombier.TE
855219b2ee8SDavid du Colombier.ps +1
856219b2ee8SDavid du Colombier.vs +1
857219b2ee8SDavid du Colombier
858219b2ee8SDavid du Colombier
859219b2ee8SDavid du Colombier.TL
860219b2ee8SDavid du ColombierPredefined Read-Only Number Registers
861219b2ee8SDavid du Colombier.LP
862219b2ee8SDavid du Colombier.ps -1
863219b2ee8SDavid du Colombier.vs -1
864219b2ee8SDavid du Colombier.TS
865219b2ee8SDavid du Colombierc2 l
866219b2ee8SDavid du Colombierc2 l2 l
867219b2ee8SDavid du Colombiern2 l2fCW l.
868219b2ee8SDavid du Colombier.ft 4
869219b2ee8SDavid du ColombierSection	Register
870219b2ee8SDavid du ColombierReference	Name	Description
871219b2ee8SDavid du Colombier.ft
872219b2ee8SDavid du Colombier.sp .5
873219b2ee8SDavid du Colombier19.	$$	Process id of \*(TR or \*(NR.
874219b2ee8SDavid du Colombier7.3	&$	Number of arguments available at the current macro level.
875219b2ee8SDavid du Colombier5.2	&a	Post-line extra line-space most recently used in @cw "\ex'" N cw "'" @.
876219b2ee8SDavid du Colombier-	&A	Set to 1 in \*(TR, if @cw -a@ option used; always 1 in \*(NR.
877219b2ee8SDavid du Colombier2.3	&b	Emboldening level.
878219b2ee8SDavid du Colombier20.	&c	Number of lines read from current input file.
879219b2ee8SDavid du Colombier7.4	&d	Current vertical place in current diversion; equal to @cw nl@, if no diversion.
880219b2ee8SDavid du Colombier2.2	&f	Current font number.
881219b2ee8SDavid du Colombier20.	&F	Current input file name [sic].
882219b2ee8SDavid du Colombier4.	&h	Text baseline high-water mark on current page or diversion.
883219b2ee8SDavid du Colombier11.1	&H	Available horizontal resolution in basic units.
884219b2ee8SDavid du Colombier6.	&i	Current indent.
885219b2ee8SDavid du Colombier4.2	&j	Current @cw ad@ mode.
886219b2ee8SDavid du Colombier4.1	&k	Current output horizontal position.
887219b2ee8SDavid du Colombier6.	&l	Current line length.
888219b2ee8SDavid du Colombier5.1	&L	Current @cw ls@ value.
889219b2ee8SDavid du Colombier4.	&n	Length of text portion on previous output line.
890219b2ee8SDavid du Colombier3.	&o	Current page offset.
891219b2ee8SDavid du Colombier3.	&p	Current page length.
892219b2ee8SDavid du Colombier7.5	.R	Number of unused number registers.
893219b2ee8SDavid du Colombier-	&T	Set to 1 in \*(NR, if \&\f(CW-T\fP option used; always 0 in \*(TR.
894219b2ee8SDavid du Colombier2.3	&s	Current point size.
895219b2ee8SDavid du Colombier7.5	&t	Distance to the next trap.
896219b2ee8SDavid du Colombier4.1	&u	Equal to 1 in fill mode and 0 in nofill mode.
897219b2ee8SDavid du Colombier5.1	&v	Current vertical line spacing.
898219b2ee8SDavid du Colombier11.1	&V	Available vertical resolution in basic units.
899219b2ee8SDavid du Colombier11.2	&w	Width of previous character.
900219b2ee8SDavid du Colombier-	&x	Reserved version-dependent register.
901219b2ee8SDavid du Colombier-	&y	Reserved version-dependent register.
902219b2ee8SDavid du Colombier7.4	&z	Name [sic] of current diversion.
903219b2ee8SDavid du Colombier.TE
904219b2ee8SDavid du Colombier.ps +1
905219b2ee8SDavid du Colombier.vs +1
906219b2ee8SDavid du Colombier.sp 100
907219b2ee8SDavid du Colombier.BP
908219b2ee8SDavid du Colombier.TL
909219b2ee8SDavid du ColombierReference Manual
910219b2ee8SDavid du Colombier.NH
911219b2ee8SDavid du ColombierGeneral Explanation
912219b2ee8SDavid du Colombier.sc "Form of input.
913219b2ee8SDavid du ColombierInput consists of \fItext lines\fR, which are destined to be printed,
914219b2ee8SDavid du Colombierinterspersed with \fIcontrol lines\fR,
915219b2ee8SDavid du Colombierwhich set parameters or otherwise control subsequent processing.
916219b2ee8SDavid du ColombierControl lines begin with a \fIcontrol character\fR\(em\
917219b2ee8SDavid du Colombiernormally \&\f(CW.\fR (period) or \&\f(CW'\fR (single quote)\(em\
918219b2ee8SDavid du Colombierfollowed by a one or two character name that specifies
919219b2ee8SDavid du Colombiera basic \fIrequest\fR or the substitution of
920219b2ee8SDavid du Colombiera user-defined \fImacro\fR in place of the control line.
921219b2ee8SDavid du ColombierThe control character \&\f(CW'\fR suppresses the \fIbreak\fR function\(em\
922219b2ee8SDavid du Colombierthe forced output of a partially filled line\(em\
923219b2ee8SDavid du Colombiercaused by certain requests.
924219b2ee8SDavid du ColombierThe control character may be separated from the request/macro name by
925219b2ee8SDavid du Colombierwhite space (spaces and/or tabs) for aesthetic reasons.
926219b2ee8SDavid du ColombierNames should be followed by either
927219b2ee8SDavid du Colombierspace or newline.
928219b2ee8SDavid du ColombierControl lines with unrecognized names are ignored.
929219b2ee8SDavid du Colombier.PP
930219b2ee8SDavid du ColombierVarious special functions may be introduced anywhere in the input by
931219b2ee8SDavid du Colombiermeans of an \fIescape\fR character, normally \&\f(CW\e\fR.
932219b2ee8SDavid du ColombierFor example, the function
933219b2ee8SDavid du Colombier.CW \en@R@
934219b2ee8SDavid du Colombiercauses the interpolation of the contents of the
935219b2ee8SDavid du Colombier\fInumber register R\fR
936219b2ee8SDavid du Colombierin place of the function;
937219b2ee8SDavid du Colombierhere @R@ is either a single character name
938219b2ee8SDavid du Colombieras in \&\f(CW\en\fIx\fR,
939219b2ee8SDavid du Colombieror a two-character name introduced by
940219b2ee8SDavid du Colombiera left-parenthesis, as in \&\f(CW\en(\fIxx\fR.
941219b2ee8SDavid du Colombier.sc "Formatter and device resolution.
942219b2ee8SDavid du Colombier\*(Tr internally stores and processes dimensions in units that correspond to
943219b2ee8SDavid du Colombierthe particular device for which output is being prepared;
944219b2ee8SDavid du Colombiervalues from 300 to 1200/inch are typical.
945219b2ee8SDavid du ColombierSee §23.
946219b2ee8SDavid du Colombier\*(Nr internally uses 240 units/inch,
947219b2ee8SDavid du Colombiercorresponding to the least common multiple of the
948219b2ee8SDavid du Colombierhorizontal and vertical resolutions of various
949219b2ee8SDavid du Colombiertypewriter-like output devices.
950219b2ee8SDavid du Colombier\*(Tr rounds horizontal/vertical numerical parameter input to the actual
951219b2ee8SDavid du Colombierhorizontal/vertical resolution of the output device indicated by the \&\f(CW-T\fR option
952219b2ee8SDavid du Colombier(default
953219b2ee8SDavid du Colombier.CW post ).
954219b2ee8SDavid du Colombier\*(Nr similarly rounds numerical input to the actual resolution
955219b2ee8SDavid du Colombierof its output device
956219b2ee8SDavid du Colombier(default Model 37 Teletype).
957219b2ee8SDavid du Colombier.sc "Numerical parameter input.
958219b2ee8SDavid du ColombierBoth \*(NR and \*(TR
959219b2ee8SDavid du Colombieraccept numerical input with the appended scale
960219b2ee8SDavid du Colombierindicators
961219b2ee8SDavid du Colombiershown in the following table,
962219b2ee8SDavid du Colombierwhere
963219b2ee8SDavid du Colombier\fIS\fR is the current type size in points and
964219b2ee8SDavid du Colombier\fIV\fR is the current vertical line spacing in
965219b2ee8SDavid du Colombierbasic units.
966219b2ee8SDavid du Colombier.TS
967219b2ee8SDavid du Colombiercenter box;
968219b2ee8SDavid du Colombierc|c
969219b2ee8SDavid du Colombierc|c
970219b2ee8SDavid du Colombierc|l.
971219b2ee8SDavid du ColombierScale
972219b2ee8SDavid du ColombierIndicator	Meaning
973219b2ee8SDavid du Colombier_
974219b2ee8SDavid du Colombier\&\f(CWi\fR	Inch
975219b2ee8SDavid du Colombier\&\f(CWc\fR	Centimeter
976219b2ee8SDavid du Colombier\&\f(CWP\fR	Pica = 1/6 inch
977219b2ee8SDavid du Colombier\&\f(CWm\fR	Em = \fIS\fR points
978219b2ee8SDavid du Colombier\&\f(CWn\fR	En = Em/2
979219b2ee8SDavid du Colombier\&\f(CWp\fR	Point = 1/72 inch
980219b2ee8SDavid du Colombier\&\f(CWu\fR	Basic unit
981219b2ee8SDavid du Colombier\&\f(CWv\fR	Vertical line space \fIV\fR
982219b2ee8SDavid du Colombiernone	Default, see below
983219b2ee8SDavid du Colombier.TE
984219b2ee8SDavid du ColombierIn \*(NR, both the em and the en are taken to be equal to the
985219b2ee8SDavid du Colombiernominal character width,
986219b2ee8SDavid du Colombierwhich is output-device dependent;
987219b2ee8SDavid du Colombiercommon values are 1/10 and 1/12 inch.
988219b2ee8SDavid du ColombierActual character widths in \*(NR need not be all the same and constructed characters
989219b2ee8SDavid du Colombiersuch as -> (→) are often extra wide.
990219b2ee8SDavid du ColombierThe default scaling is
991219b2ee8SDavid du Colombier.CW m
992219b2ee8SDavid du Colombierfor the horizontally-oriented requests
993219b2ee8SDavid du Colombierand functions
994219b2ee8SDavid du Colombier.CW ll ,
995219b2ee8SDavid du Colombier.CW in ,
996219b2ee8SDavid du Colombier.CW ti ,
997219b2ee8SDavid du Colombier.CW ta ,
998219b2ee8SDavid du Colombier.CW lt ,
999219b2ee8SDavid du Colombier.CW po ,
1000219b2ee8SDavid du Colombier.CW mc ,
1001219b2ee8SDavid du Colombier.CW \eh ,
1002219b2ee8SDavid du Colombier.CW \el ,
1003219b2ee8SDavid du Colombierand horizontal coordinates of
1004219b2ee8SDavid du Colombier.CW \eD ;
1005219b2ee8SDavid du Colombier.CW v
1006219b2ee8SDavid du Colombierfor the vertically-oriented requests and functions
1007219b2ee8SDavid du Colombier.CW pl ,
1008219b2ee8SDavid du Colombier.CW wh ,
1009219b2ee8SDavid du Colombier.CW ch ,
1010219b2ee8SDavid du Colombier.CW dt ,
1011219b2ee8SDavid du Colombier.CW sp ,
1012219b2ee8SDavid du Colombier.CW sv ,
1013219b2ee8SDavid du Colombier.CW ne ,
1014219b2ee8SDavid du Colombier.CW rt ,
1015219b2ee8SDavid du Colombier.CW \ev ,
1016219b2ee8SDavid du Colombier.CW \ex ,
1017219b2ee8SDavid du Colombier.CW \eL ,
1018219b2ee8SDavid du Colombierand vertical coordinates of
1019219b2ee8SDavid du Colombier.CW \eD ;
1020219b2ee8SDavid du Colombier.CW p
1021219b2ee8SDavid du Colombierfor the
1022219b2ee8SDavid du Colombier.CW vs
1023219b2ee8SDavid du Colombierrequest;
1024219b2ee8SDavid du Colombierand
1025219b2ee8SDavid du Colombier.CW u
1026219b2ee8SDavid du Colombierfor the requests
1027219b2ee8SDavid du Colombier.CW nr ,
1028219b2ee8SDavid du Colombier.CW if ,
1029219b2ee8SDavid du Colombierand
1030219b2ee8SDavid du Colombier.CW ie .
1031219b2ee8SDavid du Colombier\fIAll\fR other requests ignore any scale indicators.
1032219b2ee8SDavid du ColombierWhen a number register containing an already appropriately scaled number
1033219b2ee8SDavid du Colombieris interpolated to provide numerical input,
1034219b2ee8SDavid du Colombierthe unit scale indicator
1035219b2ee8SDavid du Colombier\&\f(CWu\fR may need to be appended to prevent
1036219b2ee8SDavid du Colombieran additional inappropriate default scaling.
1037219b2ee8SDavid du ColombierThe number, @N@, may be specified in decimal-fraction form
1038219b2ee8SDavid du Colombierbut the parameter finally stored is rounded to an integer number of basic units.
1039219b2ee8SDavid du ColombierInternal computations are performed in integer arithmetic.
1040219b2ee8SDavid du Colombier.PP
1041219b2ee8SDavid du ColombierThe \fIabsolute position\fR indicator \&\f(CW|\fR may be prefixed
1042219b2ee8SDavid du Colombierto a number @N@
1043219b2ee8SDavid du Colombierto generate the distance to the vertical or horizontal place @N@.
1044219b2ee8SDavid du ColombierFor vertically-oriented requests and functions, \&\f(CW|\fP@N@
1045219b2ee8SDavid du Colombierbecomes the distance in basic units from the current vertical place on the page or in a \fIdiversion\fR (§7.4)
1046219b2ee8SDavid du Colombierto the vertical place @N@.
1047219b2ee8SDavid du ColombierFor \fIall\fR other requests and functions,
1048219b2ee8SDavid du Colombier\&\f(CW|\fP@N@
1049219b2ee8SDavid du Colombierbecomes the distance from
1050219b2ee8SDavid du Colombierthe current horizontal place on the \fIinput\fR line to the horizontal place @N@.
1051219b2ee8SDavid du ColombierFor example,
1052219b2ee8SDavid du Colombier.P1
1053219b2ee8SDavid du Colombier\&.sp |3.2c
1054219b2ee8SDavid du Colombier.P2
1055219b2ee8SDavid du Colombierwill space in the required direction to 3.2 centimeters from the top of the page.
1056219b2ee8SDavid du Colombier.sc "Numerical expressions.
1057219b2ee8SDavid du Colombier.tr &&
1058219b2ee8SDavid du ColombierWherever numerical input is expected,
1059219b2ee8SDavid du Colombieran expression involving parentheses,
1060219b2ee8SDavid du Colombierthe arithmetic operators \&\f(CW+\fR, \&\f(CW-\fR, \&\f(CW/\fR, \&\f(CW\(**\fR, \&\f(CW%\fR (mod),
1061219b2ee8SDavid du Colombierand the logical operators
1062219b2ee8SDavid du Colombier\&\f(CW<\fR,
1063219b2ee8SDavid du Colombier\&\f(CW>\fR,
1064219b2ee8SDavid du Colombier\&\f(CW<=\fR,
1065219b2ee8SDavid du Colombier\&\f(CW>=\fR,
1066219b2ee8SDavid du Colombier\&\f(CW=\fR (or \&\f(CW==\fR),
1067219b2ee8SDavid du Colombier\&\f(CW&\fR\ (and),
1068219b2ee8SDavid du Colombier\&\f(CW:\fR\ (or)
1069219b2ee8SDavid du Colombiermay be used.
1070219b2ee8SDavid du ColombierExcept where controlled by parentheses, evaluation of expressions is left-to-right;
1071219b2ee8SDavid du Colombierthere is no operator precedence.
1072219b2ee8SDavid du ColombierIn the case of certain requests, an initial \&\f(CW+\fR or \&\f(CW-\fR is stripped
1073219b2ee8SDavid du Colombierand interpreted as an increment or decrement indicator respectively.
1074219b2ee8SDavid du ColombierIn the presence of default scaling, the desired scale indicator must be
1075219b2ee8SDavid du Colombierattached to \fIevery\fR number in an expression
1076219b2ee8SDavid du Colombierfor which the desired and default scaling differ.
1077219b2ee8SDavid du ColombierFor example,
1078219b2ee8SDavid du Colombierif the number register \&\f(CWx\fR contains 2
1079219b2ee8SDavid du Colombierand the current point size is 10,
1080219b2ee8SDavid du Colombierthen
1081219b2ee8SDavid du Colombier.P1
1082219b2ee8SDavid du Colombier\&.ll (4.25i+\enxP+3)/2u
1083219b2ee8SDavid du Colombier.P2
1084219b2ee8SDavid du Colombierwill set the line length to 1/2 the sum of 4.25 inches + 2 picas + 3 ems.
1085219b2ee8SDavid du Colombier.sc "Notation.
1086219b2ee8SDavid du ColombierNumerical parameters are indicated in this manual in two ways.
1087219b2ee8SDavid du Colombier@+- N@ means that the argument may take the forms @N@, @+N@, or @-N@ and
1088219b2ee8SDavid du Colombierthat the corresponding effect is to set the parameter
1089219b2ee8SDavid du Colombierto @N@, to increment it by @N@, or to decrement it by @N@ respectively.
1090219b2ee8SDavid du ColombierPlain @N@ means that an initial algebraic sign is \fInot\fR
1091219b2ee8SDavid du Colombieran increment indicator,
1092219b2ee8SDavid du Colombierbut merely the sign of @N@.
1093219b2ee8SDavid du ColombierGenerally, unreasonable numerical input is either ignored
1094219b2ee8SDavid du Colombieror truncated to a reasonable value.
1095219b2ee8SDavid du ColombierFor example,
1096219b2ee8SDavid du Colombiermost requests expect to set parameters to non-negative
1097219b2ee8SDavid du Colombiervalues;
1098219b2ee8SDavid du Colombierexceptions are
1099219b2ee8SDavid du Colombier.CW sp ,
1100219b2ee8SDavid du Colombier.CW wh ,
1101219b2ee8SDavid du Colombier.CW ch ,
1102219b2ee8SDavid du Colombier.CW nr ,
1103219b2ee8SDavid du Colombierand
1104219b2ee8SDavid du Colombier.CW if .
1105219b2ee8SDavid du ColombierThe requests
1106219b2ee8SDavid du Colombier.CW ps ,
1107219b2ee8SDavid du Colombier.CW ft ,
1108219b2ee8SDavid du Colombier.CW po ,
1109219b2ee8SDavid du Colombier.CW vs ,
1110219b2ee8SDavid du Colombier.CW ls ,
1111219b2ee8SDavid du Colombier.CW ll ,
1112219b2ee8SDavid du Colombier.CW in ,
1113219b2ee8SDavid du Colombierand
1114219b2ee8SDavid du Colombier.CW lt
1115219b2ee8SDavid du Colombierrestore the previous parameter value in the absence
1116219b2ee8SDavid du Colombierof an argument.
1117219b2ee8SDavid du Colombier.PP
1118219b2ee8SDavid du ColombierSingle character arguments are indicated by single lower case letters
1119219b2ee8SDavid du Colombierand
1120219b2ee8SDavid du Colombierone/two character arguments are indicated by a pair of lower case letters.
1121219b2ee8SDavid du ColombierCharacter string arguments are indicated by multi-character mnemonics.
1122219b2ee8SDavid du Colombier.NH
1123219b2ee8SDavid du ColombierFont and Character Size Control
1124219b2ee8SDavid du Colombier.sc "Character set.
1125219b2ee8SDavid du ColombierThe \*(TR character set is defined by a description file specific to each output device (§23).
1126219b2ee8SDavid du ColombierThere are normally several regular fonts and one or more special fonts.
1127219b2ee8SDavid du ColombierCharacters are input as themselves,
1128219b2ee8SDavid du Colombieras @cw "\e(" xx@, as @cw "\eC'" name cw "'"@,
1129219b2ee8SDavid du Colombieror as
1130219b2ee8SDavid du Colombier.CW \eN'@n@' .
1131219b2ee8SDavid du ColombierThe form
1132219b2ee8SDavid du Colombier.CW \eC'@name@'
1133219b2ee8SDavid du Colombierpermits a name of any length;
1134219b2ee8SDavid du Colombierthe form
1135219b2ee8SDavid du Colombier.CW \eN'@n@'
1136219b2ee8SDavid du Colombierrefers to the @n@-th character on the current font,
1137219b2ee8SDavid du Colombierwhether named or not.
1138219b2ee8SDavid du Colombier.PP
1139219b2ee8SDavid du ColombierNormally the input characters
1140219b2ee8SDavid du Colombier.CW ` ,
1141219b2ee8SDavid du Colombier.CW ' ,
1142219b2ee8SDavid du Colombierand
1143219b2ee8SDavid du Colombier.CW -
1144219b2ee8SDavid du Colombierare printed as `, ', and - respectively;
1145219b2ee8SDavid du Colombier.CW \e` ,
1146219b2ee8SDavid du Colombier.CW \e' ,
1147219b2ee8SDavid du Colombierand
1148219b2ee8SDavid du Colombier.CW \e-
1149219b2ee8SDavid du Colombierproduce \`, \', and \-.
1150219b2ee8SDavid du ColombierIf the character does not exist in the font, \*(TR assumes the width is 1 em and
1151219b2ee8SDavid du Colombieroutputs the character with a
1152219b2ee8SDavid du Colombier.CW C
1153219b2ee8SDavid du Colombiername as defined in Section 22.
1154219b2ee8SDavid du Colombier(This is independent of how the device handles characters unknown to it.)
1155219b2ee8SDavid du Colombier.PP
1156219b2ee8SDavid du Colombier\*(Nr has an analogous, but different, mechanism for defining legal characters
1157219b2ee8SDavid du Colombierand how to print them.
1158219b2ee8SDavid du ColombierBy default all characters are valid.
1159219b2ee8SDavid du ColombierThere are such
1160219b2ee8SDavid du Colombieradditional characters as may be available on
1161219b2ee8SDavid du Colombierthe output device,
1162219b2ee8SDavid du Colombiersuch characters as may be constructed
1163219b2ee8SDavid du Colombierby overstriking or other combination,
1164219b2ee8SDavid du Colombierand those that can reasonably be mapped
1165219b2ee8SDavid du Colombierinto other printable characters.
1166219b2ee8SDavid du ColombierThe exact behavior is determined by a driving
1167219b2ee8SDavid du Colombiertable prepared for each device.
1168219b2ee8SDavid du Colombier.sc "Fonts.
1169219b2ee8SDavid du Colombier\*(Tr
1170219b2ee8SDavid du Colombierbegins execution by reading information for a set of defaults fonts,
1171219b2ee8SDavid du Colombiersaid to be
1172219b2ee8SDavid du Colombier.I mounted ;
1173219b2ee8SDavid du Colombierconventionally, the first four are
1174219b2ee8SDavid du ColombierTimes Roman (\&\f(CWR\fR),
1175219b2ee8SDavid du ColombierTimes Italic
1176219b2ee8SDavid du Colombier(\&\f(CWI\fR),
1177219b2ee8SDavid du ColombierTimes Bold
1178219b2ee8SDavid du Colombier(\&\f(CWB\fR),
1179219b2ee8SDavid du Colombierand
1180219b2ee8SDavid du ColombierTimes Bold Italic
1181219b2ee8SDavid du Colombier(\&\f(CWBI\fR) ,
1182219b2ee8SDavid du Colombierand the last is a Special font
1183219b2ee8SDavid du Colombier.CW S ) (
1184219b2ee8SDavid du Colombiercontaining miscellaneous characters.
1185219b2ee8SDavid du Colombier(This document uses Lucida Sans in place of Times.)
1186219b2ee8SDavid du ColombierThe set of fonts and positions is determined by the device description file,
1187219b2ee8SDavid du Colombierdescribed in §23.
1188219b2ee8SDavid du Colombier.PP
1189219b2ee8SDavid du ColombierThe current font, initially Roman, may be changed
1190219b2ee8SDavid du Colombierby the \&\f(CWft\fR request,
1191219b2ee8SDavid du Colombieror by embedding at any desired point
1192219b2ee8SDavid du Colombier\&\f(CW\ef\fIx\fR, \&\f(CW\ef(\fIxx\fR, or \&\f(CW\ef\fP@N@,
1193219b2ee8SDavid du Colombierwhere
1194219b2ee8SDavid du Colombier\fIx\fR and \fIxx\fR are the name of a font
1195219b2ee8SDavid du Colombierand @N@ is a numerical font position.
1196219b2ee8SDavid du Colombier.PP
1197219b2ee8SDavid du ColombierIt is not necessary to change to the Special font;
1198219b2ee8SDavid du Colombiercharacters on that font are automatically handled
1199219b2ee8SDavid du Colombieras if they were physically part of the current font.
1200219b2ee8SDavid du ColombierThe Special font may actually be several fonts;
1201219b2ee8SDavid du Colombierthe name
1202219b2ee8SDavid du Colombier.CW S
1203219b2ee8SDavid du Colombieris reserved and is generally used for one of these.
1204219b2ee8SDavid du ColombierAll special fonts must be mounted after regular fonts.
1205219b2ee8SDavid du Colombier.PP
1206219b2ee8SDavid du Colombier\*(Tr can be informed that any particular font is mounted
1207219b2ee8SDavid du Colombierby use of the \&\f(CWfp\fR request.
1208219b2ee8SDavid du ColombierThe list of known fonts is installation dependent.
1209219b2ee8SDavid du ColombierIn the subsequent discussion of font-related requests,
1210219b2ee8SDavid du Colombier@F@ represents either a one/two-character
1211219b2ee8SDavid du Colombierfont name or the numerical font position.
1212219b2ee8SDavid du ColombierThe current font is available (as a numerical position) in the read-only number register \&\f(CW.f\fR.
1213219b2ee8SDavid du Colombier.PP
1214219b2ee8SDavid du ColombierA request for a named but not-mounted font is honored
1215219b2ee8SDavid du Colombierif the font description information exists.
1216219b2ee8SDavid du ColombierIn this way, there is no limit on the number of fonts that may be printed
1217219b2ee8SDavid du Colombierin any part of a document.
1218219b2ee8SDavid du ColombierMounted fonts may be handled more efficiently,
1219219b2ee8SDavid du Colombierand they may be referred to by their mount positions,
1220219b2ee8SDavid du Colombierbut there is no other difference.
1221219b2ee8SDavid du ColombierMention of an unmounted font loads it temporarily at font position
1222219b2ee8SDavid du Colombierzero, which serves as a one-font cache.
1223219b2ee8SDavid du Colombier.PP
1224219b2ee8SDavid du ColombierThe function
1225219b2ee8SDavid du Colombier.CW \eS'@+- N@'
1226219b2ee8SDavid du Colombiercauses the current font to be slanted by
1227219b2ee8SDavid du Colombier@+- N@
1228219b2ee8SDavid du Colombierdegrees.
1229219b2ee8SDavid du ColombierNot all devices support slanting.
1230219b2ee8SDavid du Colombier.PP
1231219b2ee8SDavid du Colombier\*(Nr understands font control
1232219b2ee8SDavid du Colombierand normally underlines italic characters (see §10.5).
1233219b2ee8SDavid du Colombier.sc "Character size.
1234219b2ee8SDavid du ColombierCharacter point sizes available depend on the specific output device;
1235219b2ee8SDavid du Colombiera typical (historical) set of values is
1236219b2ee8SDavid du Colombier6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 28, and 36.
1237219b2ee8SDavid du ColombierThis is a range of 1/12 inch to 1/2 inch.
1238219b2ee8SDavid du ColombierThe \&\f(CWps\fR request is used to change or restore the point size.
1239219b2ee8SDavid du ColombierAlternatively the point size may be changed between any two characters
1240219b2ee8SDavid du Colombierby embedding a
1241219b2ee8SDavid du Colombier.CW \es@N@
1242219b2ee8SDavid du Colombierat the desired point
1243219b2ee8SDavid du Colombierto set the size to @N@,
1244219b2ee8SDavid du Colombieror a
1245219b2ee8SDavid du Colombier.CW "\&\f(CW\es@+- N@
1246219b2ee8SDavid du Colombier(@1 <= N <= 9@)
1247219b2ee8SDavid du Colombierto increment/decrement the size by @N@;
1248219b2ee8SDavid du Colombier.CW \es0
1249219b2ee8SDavid du Colombierrestores the previous size.
1250219b2ee8SDavid du ColombierRequested point size values that are between two valid
1251219b2ee8SDavid du Colombiersizes yield the larger of the two.
1252219b2ee8SDavid du Colombier.PP
1253219b2ee8SDavid du ColombierNote that through an accident of history, a construction like
1254219b2ee8SDavid du Colombier.CW \es39
1255219b2ee8SDavid du Colombieris parsed as size 39, and thus converted to size 36 (given the sizes above),
1256219b2ee8SDavid du Colombierwhile
1257219b2ee8SDavid du Colombier.CW \es40
1258219b2ee8SDavid du Colombieris parsed as size 4 followed by
1259219b2ee8SDavid du Colombier.CW 0 .
1260219b2ee8SDavid du ColombierThe forms
1261219b2ee8SDavid du Colombier@cw "\es(" nn@ and @cw "\es" +- cw "(" nn@
1262219b2ee8SDavid du Colombierpermit specification of sizes that would otherwise be ambiguous.
1263219b2ee8SDavid du Colombier.PP
1264219b2ee8SDavid du ColombierThe current size is available in the \&\f(CW.s\fR register.
1265219b2ee8SDavid du Colombier\*(Nr ignores type size requests.
1266219b2ee8SDavid du Colombier.PP
1267219b2ee8SDavid du ColombierThe function
1268219b2ee8SDavid du Colombier.CW "\eH'@+- N@'
1269219b2ee8SDavid du Colombiersets \H'+2'the height of the current font\H'0' to
1270219b2ee8SDavid du Colombier@N@, or increments it by @+N@, or decrements it by @-N@;
1271219b2ee8SDavid du Colombierif @N=0@, the height is restored to the current point size.
1272219b2ee8SDavid du ColombierIn each case, the width is unchanged.
1273219b2ee8SDavid du ColombierNot all devices support independent height and width for characters.
1274219b2ee8SDavid du Colombier.FS
1275219b2ee8SDavid du Colombier*The fields have the same meaning as described earlier in the Request Summary.
1276219b2ee8SDavid du Colombier.FE
1277219b2ee8SDavid du Colombier.SP .5
1278219b2ee8SDavid du Colombier.LP
1279219b2ee8SDavid du Colombier.ne 2.1
1280219b2ee8SDavid du Colombier.ta 1.5i 2.5i 3.5i 4.5i
1281219b2ee8SDavid du Colombier\f2Request\fR	\f2Initial\fR	\f2If\ No\fR
1282219b2ee8SDavid du Colombier.br
1283219b2ee8SDavid du Colombier\f2Form\fR	\f2Value\fR	\f2Argument\fR	\f2Notes\fR
1284219b2ee8SDavid du Colombier.bt "\&\f(CW.ps\fI \(+-N\fR*" "10\|point" "previous" "E" "Point size
1285219b2ee8SDavid du Colombierset to @+- N@.
1286219b2ee8SDavid du ColombierAlternatively, embed
1287219b2ee8SDavid du Colombier.CW \es@N@
1288219b2ee8SDavid du Colombieror
1289219b2ee8SDavid du Colombier.CW "\&\f(CW\es@+- N@" .
1290219b2ee8SDavid du ColombierAny positive size value may be requested;
1291219b2ee8SDavid du Colombierif invalid, the next larger valid size will result, with a
1292219b2ee8SDavid du Colombiermaximum of 36.
1293219b2ee8SDavid du ColombierA paired sequence
1294219b2ee8SDavid du Colombier@+N@, @-N@
1295219b2ee8SDavid du Colombierwill work because the previous requested value is also remembered.
1296219b2ee8SDavid du ColombierIgnored in \*(NR.
1297219b2ee8SDavid du Colombier.bt "\&\f(CW.ss\fI N\fR" "12/36\|em" "ignored" "E" "Space-character size
1298219b2ee8SDavid du Colombier(i.e., inter-word gap)
1299219b2ee8SDavid du Colombieris set to @N@/36 ems.
1300219b2ee8SDavid du ColombierThis size is the minimum word spacing in adjusted text.
1301219b2ee8SDavid du ColombierIgnored in \*(NR.
1302219b2ee8SDavid du Colombier.bt "\&\f(CW.cs\fI\|F\|N\|M\fR" "off" "-" "P" "Constant character space
1303219b2ee8SDavid du Colombier(width) mode is
1304219b2ee8SDavid du Colombierset on for font @F@ (if mounted); the width of every character will be
1305219b2ee8SDavid du Colombiertaken to be @N@/36 ems.
1306219b2ee8SDavid du ColombierIf @M@ is absent,
1307219b2ee8SDavid du Colombierthe em is that of the character's point size;
1308219b2ee8SDavid du Colombierif @M@ is given,
1309219b2ee8SDavid du Colombierthe em is @M@ points.
1310219b2ee8SDavid du ColombierAll affected characters
1311219b2ee8SDavid du Colombierare centered in this space, including those with an actual width
1312219b2ee8SDavid du Colombierlarger than this space.
1313219b2ee8SDavid du ColombierSpecial Font characters occurring while the current font
1314219b2ee8SDavid du Colombieris @F@ are also so treated.
1315219b2ee8SDavid du ColombierIf @N@ is absent, the mode is turned off.
1316219b2ee8SDavid du ColombierThe mode must be in effect when the characters are physically printed.
1317219b2ee8SDavid du ColombierIgnored in \*(NR.
1318219b2ee8SDavid du Colombier.bt "\&\f(CW.bd\fI F N\fR" "off" "-" "P" "The characters in font @F@ will be artificially
1319219b2ee8SDavid du Colombieremboldened by printing each one twice, separated by @N-1@ basic units.
1320219b2ee8SDavid du ColombierA reasonable value for @N@ is 3 when the character size is near 10 points.
1321219b2ee8SDavid du ColombierIf @N@ is missing the embolden mode is turned off.
1322219b2ee8SDavid du ColombierThe emboldening value @N@ is in the \&\f(CW.b\fP register.
1323219b2ee8SDavid du Colombier.IP
1324219b2ee8SDavid du Colombier.bd R 3
1325219b2ee8SDavid du ColombierThis paragraph is printed with \&\f(CW.bd R 3\fR.
1326219b2ee8SDavid du ColombierThe mode must be in effect when the characters are physically printed.
1327219b2ee8SDavid du ColombierIgnored in \*(NR.
1328219b2ee8SDavid du Colombier.br
1329219b2ee8SDavid du Colombier.bd R
1330219b2ee8SDavid du Colombier.bt "\&\f(CW.bd S \fIF N\fR" "off" "-" "P" "The characters in the Special font
1331219b2ee8SDavid du Colombierwill be emboldened whenever the current font is @F@.
1332219b2ee8SDavid du ColombierThe mode must be in effect when the characters are physically printed.
1333219b2ee8SDavid du ColombierIgnored in \*(NR.
1334219b2ee8SDavid du Colombier.bt "\&\f(CW.ft\fP @F@" "Roman" "previous" "E" "Font changed to
1335219b2ee8SDavid du Colombier@F@.
1336219b2ee8SDavid du ColombierAlternatively, embed
1337219b2ee8SDavid du Colombier.CW \ef@F@ .
1338219b2ee8SDavid du ColombierThe font name \&\f(CWP\fR is reserved to mean the previous font,
1339219b2ee8SDavid du Colombierand the name
1340219b2ee8SDavid du Colombier.CW S
1341219b2ee8SDavid du Colombierfor the special font.
1342219b2ee8SDavid du Colombier.bt "\&\f(CW.fp \fIN F L\fR" "R,I,B,...,S" "ignored" "-" "Font position.
1343219b2ee8SDavid du ColombierThis is a statement
1344219b2ee8SDavid du Colombierthat a font named @F@ is associated with position @N@.
1345219b2ee8SDavid du ColombierIt is a fatal error if @F@ is not known.
1346219b2ee8SDavid du ColombierFor fonts with names longer than two characters,
1347219b2ee8SDavid du Colombier.I L
1348219b2ee8SDavid du Colombierrefers to the long name,
1349219b2ee8SDavid du Colombierand
1350219b2ee8SDavid du Colombier.I F
1351219b2ee8SDavid du Colombierbecomes a synonym.
1352219b2ee8SDavid du ColombierThere is generally a limit of about 10 mounted fonts.
1353219b2ee8SDavid du Colombier.NH
1354219b2ee8SDavid du ColombierPage control
1355219b2ee8SDavid du Colombier.PP
1356219b2ee8SDavid du ColombierTop and bottom margins are not automatically provided;
1357219b2ee8SDavid du Colombierit is conventional to define two \fImacros\fR and to set \fItraps\fR
1358219b2ee8SDavid du Colombierfor them at vertical positions 0 (top) and @-N@ (distance @N@ up from the bottom).
1359219b2ee8SDavid du ColombierSee §7 and Tutorial Examples §T2.
1360219b2ee8SDavid du ColombierA pseudo-page transition onto the first page occurs
1361219b2ee8SDavid du Colombiereither when the first \fIbreak\fR occurs or
1362219b2ee8SDavid du Colombierwhen the first \fInon-diverted\fR text processing occurs.
1363219b2ee8SDavid du ColombierArrangements
1364219b2ee8SDavid du Colombierfor a trap to occur at the top of the first page
1365219b2ee8SDavid du Colombiermust be completed before this transition.
1366219b2ee8SDavid du ColombierIn the following, references to the \fIcurrent diversion\fR (§7.4)
1367219b2ee8SDavid du Colombiermean that the mechanism being described works during both
1368219b2ee8SDavid du Colombierordinary and diverted output (the former considered as the top diversion level).
1369219b2ee8SDavid du Colombier.PP
1370219b2ee8SDavid du ColombierThe limitations on \*(TR and \*(NR output dimensions
1371219b2ee8SDavid du Colombierare device dependent.
1372219b2ee8SDavid du Colombier.bt "\&\f(CW.pl\fI \(+-N\fR" "11\|in" "11\|in" "\fBv\fR" "Page length set to @+- N@.
1373219b2ee8SDavid du ColombierThe current page length is available in the \&\f(CW.p\fR register.
1374219b2ee8SDavid du Colombier.bt "\&\f(CW.bp\fI \(+-N\fR" "\fIN\(eq\fR1" "-" "B,\fBv\fR" "Begin page.
1375219b2ee8SDavid du ColombierThe current page is ejected and a new page is begun.
1376219b2ee8SDavid du ColombierIf @+- N@ is given, the new page number will be @+- N@.
1377219b2ee8SDavid du ColombierAlso see request \&\f(CWns\fR.
1378219b2ee8SDavid du Colombier.bt "\&\f(CW.pn\fI \(+-N\fR" "@N@\(eq1" "ignored" "-" "Page number.
1379219b2ee8SDavid du ColombierThe next page (when it occurs) will have the page number @+- N@.
1380219b2ee8SDavid du ColombierA \&\f(CWpn\fR must occur before the initial pseudo-page transition
1381219b2ee8SDavid du Colombierto affect the page number of the first page.
1382219b2ee8SDavid du ColombierThe current page number is in the \&\f(CW%\fR register.
1383219b2ee8SDavid du Colombier.bt "\&\f(CW.po\fI \(+-N\fR" "1\|in; 0" "previous" "\fBv\fR" "Page offset.
1384219b2ee8SDavid du ColombierThe current \fIleft margin\fR is set to @+- N@.
1385219b2ee8SDavid du ColombierThe \*(TR initial value provides 1 inch of paper margin
1386219b2ee8SDavid du Colombieron a typical device.
1387219b2ee8SDavid du ColombierThe current page offset is available in the \&\f(CW.o\fR register.
1388219b2ee8SDavid du Colombier.bt "\&\f(CW.ne\fI N\fR" "-" "\fIN\(eq\fR1\|\fIV\fR" "D,\fBv\fR" "Need @N@ vertical space.
1389219b2ee8SDavid du ColombierIf the distance \fID\fR to the next trap position (see §7.5) is less than @N@,
1390219b2ee8SDavid du Colombiera forward vertical space of size \fID\fR occurs,
1391219b2ee8SDavid du Colombierwhich will spring the trap.
1392219b2ee8SDavid du ColombierIf there are no remaining
1393219b2ee8SDavid du Colombiertraps on the page,
1394219b2ee8SDavid du Colombier\fID\fR is the distance to the bottom of the page.
1395219b2ee8SDavid du ColombierIf @D<V@, another line could still be output
1396219b2ee8SDavid du Colombierand spring the trap.
1397219b2ee8SDavid du ColombierIn a diversion, \fID\fR is the distance to the \fIdiversion trap\fR, if any,
1398219b2ee8SDavid du Colombieror is very large.
1399219b2ee8SDavid du Colombier.bt "\&\f(CW.mk\fI R\fR" "none" "internal" "D" "Mark the current vertical place
1400219b2ee8SDavid du Colombierin an internal register (both associated with the current diversion level),
1401219b2ee8SDavid du Colombieror in register @R@, if given.
1402219b2ee8SDavid du ColombierSee \&\f(CWrt\fR request.
1403219b2ee8SDavid du Colombier.bt "\&\f(CW.rt\fI \(+-N\fR" "none" "internal" "D,\fBv\fR" "Return \fIupward only\fR to a marked vertical place
1404219b2ee8SDavid du Colombierin the current diversion.
1405219b2ee8SDavid du ColombierIf @+- N@ (with respect to current place) is given,
1406219b2ee8SDavid du Colombierthe place is @+- N@ from the top of the page or diversion
1407219b2ee8SDavid du Colombieror, if @N@ is absent, to a
1408219b2ee8SDavid du Colombierplace marked by a previous \&\f(CWmk\fR.
1409219b2ee8SDavid du ColombierThe \&\f(CWsp\fR request (§5.3) may be used
1410219b2ee8SDavid du Colombierinstead of \&\f(CWrt\fR
1411219b2ee8SDavid du Colombierby spacing to the absolute place stored in a explicit register,
1412219b2ee8SDavid du Colombiere.g., using
1413219b2ee8SDavid du Colombier.CW ".mk
1414219b2ee8SDavid du Colombier@R@ ...\&
1415219b2ee8SDavid du Colombier.CW ".sp
1416219b2ee8SDavid du Colombier.CW |\en@R@u ;
1417219b2ee8SDavid du Colombierthis also works when the motion is downwards.
1418219b2ee8SDavid du Colombier.NH
1419219b2ee8SDavid du ColombierText Filling, Adjusting, and Centering
1420219b2ee8SDavid du Colombier.sc "Filling and adjusting.
1421219b2ee8SDavid du ColombierNormally,
1422219b2ee8SDavid du Colombierwords are collected from input text lines
1423219b2ee8SDavid du Colombierand assembled into a output text line
1424219b2ee8SDavid du Colombieruntil some word does not fit.
1425219b2ee8SDavid du ColombierAn attempt is then made
1426219b2ee8SDavid du Colombierto hyphenate the word to put part
1427219b2ee8SDavid du Colombierof it into the output line.
1428219b2ee8SDavid du ColombierThe spaces between the words on the output line
1429219b2ee8SDavid du Colombierare then increased to spread out the line
1430219b2ee8SDavid du Colombierto the current \fIline length\fR
1431219b2ee8SDavid du Colombierminus any current \fIindent\fR.
1432219b2ee8SDavid du ColombierA \fIword\fR is any string of characters delimited by
1433219b2ee8SDavid du Colombierthe \fIspace\fR character or the beginning/end of the input line.
1434219b2ee8SDavid du ColombierAny adjacent pair of words that must be kept together
1435219b2ee8SDavid du Colombier(neither split across output lines nor spread apart
1436219b2ee8SDavid du Colombierin the adjustment process)
1437219b2ee8SDavid du Colombiercan be tied together by separating them with the
1438219b2ee8SDavid du Colombier\fIunpaddable space\fR character
1439219b2ee8SDavid du Colombier``\&\f(CW\e\ \fR'' (backslash-space).
1440219b2ee8SDavid du ColombierThe adjusted word spacings are uniform in \*(TR
1441219b2ee8SDavid du Colombierand the minimum interword spacing can be controlled
1442219b2ee8SDavid du Colombierwith the \&\f(CWss\fR request (§2).
1443219b2ee8SDavid du ColombierIn \*(NR, they are normally nonuniform because of
1444219b2ee8SDavid du Colombierquantization to character-size spaces;
1445219b2ee8SDavid du Colombierhowever,
1446219b2ee8SDavid du Colombierthe command line option \&\f(CW-e\fR causes uniform
1447219b2ee8SDavid du Colombierspacing with full output device resolution.
1448219b2ee8SDavid du ColombierFilling, adjustment, and hyphenation (§13) can all be
1449219b2ee8SDavid du Colombierprevented or controlled.
1450219b2ee8SDavid du ColombierThe text length on the last line output is available in the \&\f(CW.n\fR register,
1451219b2ee8SDavid du Colombierand text baseline position on the page for this line is in the \&\f(CWnl\fR register.
1452219b2ee8SDavid du ColombierThe text baseline high-water mark (lowest place) on the current page is in
1453219b2ee8SDavid du Colombierthe \&\f(CW.h\fR register.
1454219b2ee8SDavid du ColombierThe current horizontal output position is in the \&\f(CW.k\fP register.
1455219b2ee8SDavid du Colombier.PP
1456219b2ee8SDavid du ColombierAn input text line
1457219b2ee8SDavid du Colombier.I ending
1458219b2ee8SDavid du Colombierwith \&\f(CW.\fR\^, \&\f(CW?\fR, or \&\f(CW!\fR,
1459219b2ee8SDavid du Colombieroptionally followed by any number of
1460219b2ee8SDavid du Colombier.CW \&" ,
1461219b2ee8SDavid du Colombier.CW ' ,
1462219b2ee8SDavid du Colombier.CW ) ,
1463219b2ee8SDavid du Colombier.CW ] ,
1464219b2ee8SDavid du Colombier.CW * ,
1465219b2ee8SDavid du Colombieror
1466219b2ee8SDavid du Colombier†,
1467219b2ee8SDavid du Colombieris taken
1468219b2ee8SDavid du Colombierto be the end of a sentence, and an additional space character is
1469219b2ee8SDavid du Colombierautomatically provided during filling.
1470219b2ee8SDavid du ColombierTo prevent this, add
1471219b2ee8SDavid du Colombier.CW \e&
1472219b2ee8SDavid du Colombierto the end of the input line.
1473219b2ee8SDavid du ColombierMultiple inter-word space characters found in the input are retained,
1474219b2ee8SDavid du Colombierexcept for trailing spaces;
1475219b2ee8SDavid du Colombierinitial spaces also cause a break.
1476219b2ee8SDavid du Colombier.PP
1477219b2ee8SDavid du ColombierWhen filling is in effect, a \&\f(CW\ep\fR may be embedded or attached to a word to
1478219b2ee8SDavid du Colombiercause a break at the end of the word and have the resulting output
1479219b2ee8SDavid du Colombierline spread out to fill the current line length.
1480219b2ee8SDavid du Colombier.PP
1481219b2ee8SDavid du Colombier.tr &&
1482219b2ee8SDavid du ColombierA text input line that happens to begin
1483219b2ee8SDavid du Colombierwith a control character can
1484219b2ee8SDavid du Colombierbe made not to look like a control line
1485219b2ee8SDavid du Colombierby prefixing it with
1486219b2ee8SDavid du Colombierthe non-printing, zero-width filler character \&\f(CW\e&\fR.
1487219b2ee8SDavid du ColombierStill another way is to specify output translation of some
1488219b2ee8SDavid du Colombierconvenient character into the control character
1489219b2ee8SDavid du Colombierusing \&\f(CWtr\fR (§10.5).
1490219b2ee8SDavid du Colombier.tr &.
1491219b2ee8SDavid du Colombier.sc "Interrupted text.
1492219b2ee8SDavid du ColombierThe copying of a input line in \fInofill\f (non-fill) mode can be interrupted
1493219b2ee8SDavid du Colombierby terminating
1494219b2ee8SDavid du Colombierthe partial line with a \&\f(CW\ec\fR.
1495219b2ee8SDavid du ColombierThe next encountered input text line will be considered to be a continuation
1496219b2ee8SDavid du Colombierof the same line of input text.
1497219b2ee8SDavid du ColombierSimilarly,
1498219b2ee8SDavid du Colombiera word within \fIfilled\fR text may be interrupted by terminating the
1499219b2ee8SDavid du Colombierword (and line) with \&\f(CW\ec\fR;
1500219b2ee8SDavid du Colombierthe next encountered text will be taken as a continuation of the
1501219b2ee8SDavid du Colombierinterrupted word.
1502219b2ee8SDavid du ColombierIf the intervening control lines cause a break,
1503219b2ee8SDavid du Colombierany partial line will be forced out along with any partial word.
1504219b2ee8SDavid du Colombier.bt "\&\f(CW.br\fR" "-" "-" "B" "Break.
1505219b2ee8SDavid du ColombierThe filling of the line currently
1506219b2ee8SDavid du Colombierbeing collected is stopped and
1507219b2ee8SDavid du Colombierthe line is output without adjustment.
1508219b2ee8SDavid du ColombierText lines beginning with space characters
1509219b2ee8SDavid du Colombier(but not tabs)
1510219b2ee8SDavid du Colombierand empty text lines (blank lines) also cause a break.
1511219b2ee8SDavid du Colombier.bt "\&\f(CW.fi\fR" "fill on" - B,E "Fill subsequent output lines.
1512219b2ee8SDavid du ColombierThe register \&\f(CW.u\fR is 1 in fill mode and 0 in nofill mode.
1513219b2ee8SDavid du Colombier.bt "\&\f(CW.nf\fR" "fill on" "-" "B,E" "Nofill.
1514219b2ee8SDavid du ColombierSubsequent output lines are neither filled nor adjusted.
1515219b2ee8SDavid du ColombierInput text lines are copied directly to output lines
1516219b2ee8SDavid du Colombierwithout regard for the current line length.
1517219b2ee8SDavid du Colombier.bt "\&\f(CW.ad\fI c\fR" "adj, both" "adjust" "E" "Line adjustment is begun.
1518219b2ee8SDavid du ColombierIf fill mode is not on, adjustment will be deferred until
1519219b2ee8SDavid du Colombierfill mode is back on.
1520219b2ee8SDavid du ColombierIf the type indicator @c@ is present,
1521219b2ee8SDavid du Colombierthe adjustment type is changed as shown in the following table.
1522219b2ee8SDavid du Colombier.TS
1523219b2ee8SDavid du Colombiercenter box;
1524219b2ee8SDavid du Colombierc|c
1525219b2ee8SDavid du Colombierc|l.
1526219b2ee8SDavid du ColombierIndicator	Adjust Type
1527219b2ee8SDavid du Colombier_
1528219b2ee8SDavid du Colombier\&\f(CWl\fR	adjust left margin only
1529219b2ee8SDavid du Colombier\&\f(CWr\fR	adjust right margin only
1530219b2ee8SDavid du Colombier\&\f(CWc\fR	center
1531219b2ee8SDavid du Colombier\&\f(CWb\fR or \&\f(CWn\fR	adjust both margins
1532219b2ee8SDavid du Colombierabsent	unchanged
1533219b2ee8SDavid du Colombier.TE
1534219b2ee8SDavid du ColombierThe number register
1535219b2ee8SDavid du Colombier.CW .j
1536219b2ee8SDavid du Colombiercontains the current value of the
1537219b2ee8SDavid du Colombier.CW ad
1538219b2ee8SDavid du Colombiersetting;
1539219b2ee8SDavid du Colombierits value can be recorded and used subsequently to set adjustment.
1540219b2ee8SDavid du Colombier.bt "\&\f(CW.na\fR" "adjust" "-" "E" "Noadjust.
1541219b2ee8SDavid du ColombierAdjustment is turned off;
1542219b2ee8SDavid du Colombierthe right margin will be ragged.
1543219b2ee8SDavid du ColombierThe adjustment type for \&\f(CWad\fR is not changed.
1544219b2ee8SDavid du ColombierOutput line filling still occurs if fill mode is on.
1545219b2ee8SDavid du Colombier.bt "\&\f(CW.ce\fI N\fR" "off" "@N=1@" "B,E" "Center the next @N@ input text lines
1546219b2ee8SDavid du Colombierwithin the current available horizontal space (line-length minus indent).
1547219b2ee8SDavid du ColombierIf @N=0@, any residual count is cleared.
1548219b2ee8SDavid du ColombierA break occurs after each of the @N@ input lines.
1549219b2ee8SDavid du ColombierIf the input line is too long,
1550219b2ee8SDavid du Colombierit will be left adjusted.
1551219b2ee8SDavid du Colombier.NH
1552219b2ee8SDavid du ColombierVertical Spacing
1553219b2ee8SDavid du Colombier.sc "Baseline spacing.
1554219b2ee8SDavid du ColombierThe vertical spacing @(V)@ between the baselines of successive
1555219b2ee8SDavid du Colombieroutput lines can be set
1556219b2ee8SDavid du Colombierusing the \&\f(CWvs\fR request.
1557219b2ee8SDavid du Colombier\fIV\fR should be large enough to accommodate the character sizes
1558219b2ee8SDavid du Colombieron the affected output lines.
1559219b2ee8SDavid du ColombierFor the common type sizes (9-12 points),
1560219b2ee8SDavid du Colombierusual typesetting practice is to set \fIV\fR to 2 points greater than the
1561219b2ee8SDavid du Colombierpoint size;
1562219b2ee8SDavid du Colombier\*(TR default is 10-point type on a 12-point spacing
1563219b2ee8SDavid du Colombier(as in this document).
1564219b2ee8SDavid du ColombierThe current \fIV\fR is available in the \&\f(CW.v\fR register.
1565219b2ee8SDavid du ColombierMultiple-\fIV\|\fR line separation (e.g., double spacing) may be requested
1566219b2ee8SDavid du Colombierwith \&\f(CWls\fR,
1567219b2ee8SDavid du Colombierbut it is better to use a large
1568219b2ee8SDavid du Colombier.CW vs
1569219b2ee8SDavid du Colombierinstead;
1570219b2ee8SDavid du Colombiercertain preprocessors assume single spacing.
1571219b2ee8SDavid du ColombierThe current line spacing is available in the \&\f(CW.L\fP register.
1572219b2ee8SDavid du Colombier.sc "Extra line-space.
1573219b2ee8SDavid du ColombierIf a word contains a tall construct requiring
1574219b2ee8SDavid du Colombierthe output line containing it to have extra vertical space
1575219b2ee8SDavid du Colombierbefore and/or after it,
1576219b2ee8SDavid du Colombierthe \fIextra-line-space\fR function \&\f(CW\ex'\fIN\fP'\fR
1577219b2ee8SDavid du Colombiercan be embedded in or attached to that word.
1578219b2ee8SDavid du ColombierIf @N@ is negative,
1579219b2ee8SDavid du Colombierthe output line containing the word will
1580219b2ee8SDavid du Colombierbe preceded by @N@ extra vertical space;
1581219b2ee8SDavid du Colombierif @N@ is positive,
1582219b2ee8SDavid du Colombierthe output line containing the word
1583219b2ee8SDavid du Colombierwill be followed by @N@ extra vertical space.
1584219b2ee8SDavid du ColombierIf successive requests for extra space apply to the same line,
1585219b2ee8SDavid du Colombierthe maximum values are used.
1586219b2ee8SDavid du ColombierThe most recently utilized post-line extra line-space is available in the \&\f(CW.a\fR register.
1587219b2ee8SDavid du Colombier.PP
1588219b2ee8SDavid du ColombierIn
1589219b2ee8SDavid du Colombier.CW \ex'\f2...\fP'
1590219b2ee8SDavid du Colombierand other functions having a pair of delimiters around
1591219b2ee8SDavid du Colombiertheir parameter,
1592219b2ee8SDavid du Colombierthe delimiter choice (here
1593219b2ee8SDavid du Colombier.CW ' )
1594219b2ee8SDavid du Colombieris arbitrary,
1595219b2ee8SDavid du Colombierexcept that it can not look like the continuation of a number expression for @N@.
1596219b2ee8SDavid du Colombier.sc "Blocks of vertical space.
1597219b2ee8SDavid du ColombierA block of vertical space is ordinarily requested using \&\f(CWsp\fR,
1598219b2ee8SDavid du Colombierwhich honors the \fIno-space\fR mode and which does
1599219b2ee8SDavid du Colombiernot space past a trap.
1600219b2ee8SDavid du ColombierA contiguous block of vertical space may be reserved using \&\f(CWsv\fR.
1601219b2ee8SDavid du Colombier.bt "\&\f(CW.vs \fIN\fR" "12pts; 1/6in" "previous" "E,\fBp\fR" "Set vertical baseline spacing size \fIV\fR.
1602219b2ee8SDavid du ColombierTransient extra vertical space is available with \&\f(CW\ex\fI'N\|'\fR (see above).
1603219b2ee8SDavid du Colombier.bt "\&\f(CW.ls \fIN\fR" "@N=1@" "previous" "E" "\fILine\fR spacing
1604219b2ee8SDavid du Colombierset to @+- N@.
1605219b2ee8SDavid du Colombier@N-1@ \fIV\fR\^s (blank lines) are
1606219b2ee8SDavid du Colombierappended to each output text line.
1607219b2ee8SDavid du ColombierAppended blank lines are omitted, if the text or previous appended blank line reached a trap position.
1608219b2ee8SDavid du Colombier.bt "\&\f(CW.sp \fIN\fR" "-" "@N=1~V@" "B,\fBv\fR" "Space vertically in either direction.
1609219b2ee8SDavid du ColombierIf @N@ is negative, the motion is backward (upward)
1610219b2ee8SDavid du Colombierand is limited to the distance to the top of the page.
1611219b2ee8SDavid du ColombierForward (downward) motion is truncated to the distance to the
1612219b2ee8SDavid du Colombiernearest trap.
1613219b2ee8SDavid du Colombier(Recall the use of
1614219b2ee8SDavid du Colombier.CW ".sp |\f2N\fP
1615219b2ee8SDavid du Colombierfrom §1.3.)
1616219b2ee8SDavid du ColombierIf the no-space mode is on,
1617219b2ee8SDavid du Colombierno spacing occurs (see \&\f(CWns\fR and \&\f(CWrs\fR below).
1618219b2ee8SDavid du Colombier.bt "\&\f(CW.sv\fI N\fR" "-" "@N=1~V@" "\fBv\fR" "Save a contiguous vertical block of size @N@.
1619219b2ee8SDavid du ColombierIf the distance to the next trap is greater
1620219b2ee8SDavid du Colombierthan @N@, @N@ vertical space is output.
1621219b2ee8SDavid du ColombierNo-space mode has no effect.
1622219b2ee8SDavid du ColombierIf this distance is less than @N@,
1623219b2ee8SDavid du Colombierno vertical space is immediately output,
1624219b2ee8SDavid du Colombierbut @N@ is remembered for later output (see \&\f(CWos\fR).
1625219b2ee8SDavid du ColombierSubsequent \&\f(CWsv\fR requests will overwrite any still remembered @N@.
1626219b2ee8SDavid du Colombier.bt "\&\f(CW.os\fR" "-" "-" "-" "Output saved vertical space.
1627219b2ee8SDavid du ColombierNo-space mode has no effect.
1628219b2ee8SDavid du ColombierUsed to finally output a block of vertical space requested
1629219b2ee8SDavid du Colombierby an earlier \&\f(CWsv\fR request.
1630219b2ee8SDavid du Colombier.bt "\&\f(CW.ns\fR" "space" "-" "D" "No-space mode turned on.
1631219b2ee8SDavid du ColombierWhen on, no-space mode inhibits \&\f(CWsp\fR requests and
1632219b2ee8SDavid du Colombier\&\f(CWbp\fR requests \fIwithout\fR a next page number.
1633219b2ee8SDavid du ColombierNo-space mode is turned off when a line of
1634219b2ee8SDavid du Colombieroutput occurs, or with \&\f(CWrs\fR.
1635219b2ee8SDavid du Colombier.bt "\&\f(CW.rs\fR" "space" "-" "D" "Restore spacing.
1636219b2ee8SDavid du ColombierThe no-space mode is turned off.
1637219b2ee8SDavid du Colombier.bt "\&Blank text line." "" "-" "B" "Causes a break and
1638219b2ee8SDavid du Colombieroutput of a blank line exactly like \&\f(CWsp 1\fR.
1639219b2ee8SDavid du Colombier.NH
1640219b2ee8SDavid du ColombierLine Length and Indenting
1641219b2ee8SDavid du Colombier.PP
1642219b2ee8SDavid du ColombierThe maximum line length for fill mode may be set with \&\f(CWll\fR.
1643219b2ee8SDavid du ColombierThe indent may be set with \&\f(CWin\fR;
1644219b2ee8SDavid du Colombieran indent applicable to only the next output line may be set with \&\f(CWti\fR.
1645219b2ee8SDavid du ColombierThe line length includes indent space but not
1646219b2ee8SDavid du Colombierpage offset space.
1647219b2ee8SDavid du ColombierThe line length minus the indent is the basis for centering with \&\f(CWce\fR.
1648219b2ee8SDavid du ColombierThe effect of \&\f(CWll\fR, \&\f(CWin\fR, or \&\f(CWti\fR
1649219b2ee8SDavid du Colombieris delayed, if a partially collected line exists,
1650219b2ee8SDavid du Colombieruntil after that line is output.
1651219b2ee8SDavid du ColombierIn fill mode the length of text on an output line is less than or equal to
1652219b2ee8SDavid du Colombierthe line length minus the indent.
1653219b2ee8SDavid du ColombierThe current line length and indent are available in registers \&\f(CW.l\fR and \&\f(CW.i\fR respectively.
1654219b2ee8SDavid du ColombierThe length of \fIthree-part titles\fR produced by \&\f(CWtl\fR
1655219b2ee8SDavid du Colombier(see §14) is independently set by \&\f(CWlt\fR.
1656219b2ee8SDavid du Colombier.bt "\&\f(CW.ll\fI \(+-N\fR" "6.5\|in" "previous" "E,\fBm\fR" "Line length is set to \(+-@N@.
1657219b2ee8SDavid du Colombier.bt "\&\f(CW.in\fI \(+-N\fR" "\fIN\(eq\^\fR0" "previous" "B,E,\fBm\fR" "Indent is set to @+- N@.
1658219b2ee8SDavid du ColombierThe indent is prefixed to each output line.
1659219b2ee8SDavid du Colombier.bt "\&\f(CW.ti\fI \(+-N\fR" "-" "ignored" "B,E,\fBm\fR" "Temporary indent.
1660219b2ee8SDavid du ColombierThe next output text line will be indented a distance @+- N@
1661219b2ee8SDavid du Colombierwith respect to the current indent.
1662219b2ee8SDavid du ColombierThe resulting total indent may not be negative.
1663219b2ee8SDavid du ColombierThe current indent is not changed.
1664219b2ee8SDavid du Colombier.NH
1665219b2ee8SDavid du ColombierMacros, Strings, Diversion, and Position Traps
1666219b2ee8SDavid du Colombier.sc "Macros and strings.
1667219b2ee8SDavid du ColombierA \fImacro\fR is a named set of arbitrary \fIlines\fR that may be invoked by name or
1668219b2ee8SDavid du Colombierwith a \fItrap\fR.
1669219b2ee8SDavid du ColombierA \fIstring\fR is a named string of \fIcharacters\fR,
1670219b2ee8SDavid du Colombiernot including a newline character,
1671219b2ee8SDavid du Colombierthat may be interpolated by name at any point.
1672219b2ee8SDavid du ColombierRequest, macro, and string names share the same name list.
1673219b2ee8SDavid du ColombierMacro and string names
1674219b2ee8SDavid du Colombiermay be one or two characters long and may usurp previously defined
1675219b2ee8SDavid du Colombierrequest, macro, or string names;
1676219b2ee8SDavid du Colombierthis implies that built-in operations may be (irrevocably) redefined.
1677219b2ee8SDavid du ColombierAny of these entities may be renamed with \&\f(CWrn\fR
1678219b2ee8SDavid du Colombieror removed with \&\f(CWrm\fR.
1679219b2ee8SDavid du Colombier.PP
1680219b2ee8SDavid du ColombierMacros are created by \&\f(CWde\fR and \&\f(CWdi\fR, and appended to by \&\f(CWam\fR and \&\f(CWda\fR;
1681219b2ee8SDavid du Colombier\&\f(CWdi\fR and \&\f(CWda\fR cause normal output to be stored in a macro.
1682219b2ee8SDavid du ColombierA macro is invoked in the same way as a request;
1683219b2ee8SDavid du Colombiera control line beginning \&\f(CW.\fIxx\fR will interpolate the contents of macro \fIxx\fR.
1684219b2ee8SDavid du ColombierThe remainder of the line may contain up to nine \fIarguments\fR.
1685219b2ee8SDavid du Colombier.PP
1686219b2ee8SDavid du ColombierStrings are created by \&\f(CWds\fR and appended to by \&\f(CWas\fR.
1687219b2ee8SDavid du ColombierThe strings \fIx\fR and \fIxx\fR are interpolated at any desired point with
1688219b2ee8SDavid du Colombier\&\f(CW\e\(**\fIx\fR and \&\f(CW\e\(**(\fIxx\fR respectively.
1689219b2ee8SDavid du ColombierString references and macro invocations may be nested.
1690219b2ee8SDavid du Colombier.sc "Copy mode input interpretation.
1691219b2ee8SDavid du ColombierDuring the definition and extension
1692219b2ee8SDavid du Colombierof strings and macros (not by diversion)
1693219b2ee8SDavid du Colombierthe input is read in \fIcopy mode\fR.
1694219b2ee8SDavid du ColombierIn copy mode, input is copied without interpretation
1695219b2ee8SDavid du Colombierexcept that:
1696219b2ee8SDavid du Colombier.IP
1697219b2ee8SDavid du Colombier.ds + \v'-.1m'\s-4\(bu\s+4\v'+.1m'
1698219b2ee8SDavid du Colombier.nf
1699219b2ee8SDavid du Colombier\*+ The contents of number registers indicated by \&\f(CW\en\fR are interpolated.
1700219b2ee8SDavid du Colombier\*+ Strings indicated by \&\f(CW\e\(**\fR are interpolated.
1701219b2ee8SDavid du Colombier\*+ Arguments indicated by \&\f(CW\e$\fR are interpolated.
1702219b2ee8SDavid du Colombier\*+ Concealed newlines indicated by \&\f(CW\e\fP\f2newline\fP are eliminated.
1703219b2ee8SDavid du Colombier\*+ Comments indicated by \&\f(CW\e"\fR are eliminated.
1704219b2ee8SDavid du Colombier\*+ \&\f(CW\et\fR and \&\f(CW\ea\fR are interpreted as \s-1ASCII\s+1 horizontal tab and \s-1SOH\s+1 respectively (§9).
1705219b2ee8SDavid du Colombier\*+ \&\f(CW\e\e\fR is interpreted as \&\f(CW\e\fR.
1706219b2ee8SDavid du Colombier\*+ \&\f(CW\e.\fR is interpreted as ``\&\f(CW.\fR''.
1707219b2ee8SDavid du Colombier.LP
1708219b2ee8SDavid du ColombierThese interpretations can be suppressed by
1709219b2ee8SDavid du Colombierprefixing
1710219b2ee8SDavid du Colombiera \&\f(CW\e\fR.
1711219b2ee8SDavid du ColombierFor example, since \&\f(CW\e\e\fR maps into a \&\f(CW\e\fR, \&\f(CW\e\en\fR will copy as \&\f(CW\en\fR, which
1712219b2ee8SDavid du Colombierwill be interpreted as a number register indicator when the
1713219b2ee8SDavid du Colombiermacro or string is reread.
1714219b2ee8SDavid du Colombier.sc "Arguments.
1715219b2ee8SDavid du ColombierWhen a macro is invoked by name, the remainder of the line is
1716219b2ee8SDavid du Colombiertaken to contain up to nine arguments.
1717219b2ee8SDavid du ColombierThe argument separator is the space character (not tab), and arguments
1718219b2ee8SDavid du Colombiermay be surrounded by double quotes to permit embedded space characters.
1719219b2ee8SDavid du ColombierPairs of double quotes may be embedded in double-quoted arguments to
1720219b2ee8SDavid du Colombierrepresent a single double-quote character.
1721219b2ee8SDavid du ColombierThe argument
1722219b2ee8SDavid du Colombier.CW \&""
1723219b2ee8SDavid du Colombieris explicitly null.
1724219b2ee8SDavid du ColombierIf the desired arguments won't fit on a line,
1725219b2ee8SDavid du Colombiera concealed newline may be used to continue on the next line.
1726219b2ee8SDavid du ColombierA trailing double quote may be omitted.
1727219b2ee8SDavid du Colombier.PP
1728219b2ee8SDavid du ColombierWhen a macro is invoked the \fIinput level\fR is \fIpushed down\fR and
1729219b2ee8SDavid du Colombierany arguments available at the previous level become unavailable
1730219b2ee8SDavid du Colombieruntil the macro is completely read and the previous level is restored.
1731219b2ee8SDavid du ColombierA macro's own arguments can be interpolated at any point
1732219b2ee8SDavid du Colombierwithin the macro with
1733219b2ee8SDavid du Colombier.CW \e$@N@ ,
1734219b2ee8SDavid du Colombierwhich interpolates the @N@\^th
1735219b2ee8SDavid du Colombierargument
1736219b2ee8SDavid du Colombier(@1 <= N <= 9@).
1737219b2ee8SDavid du ColombierIf an invoked argument does not exist,
1738219b2ee8SDavid du Colombiera null string results.
1739219b2ee8SDavid du ColombierFor example, the macro \fIxx\fR may be defined by
1740219b2ee8SDavid du Colombier.P1
1741219b2ee8SDavid du Colombier.ta .75i
1742219b2ee8SDavid du Colombier&de xx	\e" begin definition
1743219b2ee8SDavid du ColombierToday is \e\e$1 the \e\e$2.
1744219b2ee8SDavid du Colombier&.	\e" end definition
1745219b2ee8SDavid du Colombier.P2
1746219b2ee8SDavid du Colombierand called by
1747219b2ee8SDavid du Colombier.P1
1748219b2ee8SDavid du Colombier&xx Monday 14th
1749219b2ee8SDavid du Colombier.P2
1750219b2ee8SDavid du Colombierto produce the text
1751219b2ee8SDavid du Colombier.P1
1752219b2ee8SDavid du ColombierToday is Monday the 14th.
1753219b2ee8SDavid du Colombier.P2
1754219b2ee8SDavid du ColombierNote that each \&\f(CW\e$\fR
1755219b2ee8SDavid du Colombierwas concealed in the definition with a prefixed \&\f(CW\e\fR.
1756219b2ee8SDavid du ColombierThe number of
1757219b2ee8SDavid du Colombierarguments is in the \&\f(CW.$\fR register.
1758219b2ee8SDavid du Colombier.PP
1759219b2ee8SDavid du ColombierNo arguments are available at the top (non-macro) level,
1760219b2ee8SDavid du Colombierwithin a string, or within a trap-invoked macro.
1761219b2ee8SDavid du Colombier.PP
1762219b2ee8SDavid du ColombierArguments are copied in copy mode onto a stack
1763219b2ee8SDavid du Colombierwhere they are available for reference.
1764219b2ee8SDavid du ColombierIt is advisable to
1765219b2ee8SDavid du Colombierconceal string references (with an extra \&\f(CW\e\fR\|)
1766219b2ee8SDavid du Colombierto delay interpolation until argument reference time.
1767219b2ee8SDavid du Colombier.sc "Diversions.
1768219b2ee8SDavid du ColombierProcessed output may be diverted into a macro for purposes
1769219b2ee8SDavid du Colombiersuch as footnote processing (see Tutorial §T5)
1770219b2ee8SDavid du Colombieror determining the horizontal and vertical size of some text for
1771219b2ee8SDavid du Colombierconditional changing of pages or columns.
1772219b2ee8SDavid du ColombierA single diversion trap may be set at a specified vertical position.
1773219b2ee8SDavid du ColombierThe number registers \&\f(CWdn\fR and \&\f(CWdl\fR respectively contain the
1774219b2ee8SDavid du Colombiervertical and horizontal size of the most
1775219b2ee8SDavid du Colombierrecently ended diversion.
1776219b2ee8SDavid du ColombierProcessed text that is diverted into a macro
1777219b2ee8SDavid du Colombierretains the vertical size of each of its lines when reread
1778219b2ee8SDavid du Colombierin \fInofill\fR mode
1779219b2ee8SDavid du Colombierregardless of the current \fIV\fR.
1780219b2ee8SDavid du ColombierConstant-spaced (\&\f(CWcs\fR) or emboldened (\&\f(CWbd\fR) text that is diverted
1781219b2ee8SDavid du Colombiercan be reread correctly only if these modes are again or still in effect
1782219b2ee8SDavid du Colombierat reread time.
1783219b2ee8SDavid du ColombierOne way to do this is to embed in the diversion the appropriate
1784219b2ee8SDavid du Colombier\&\f(CWcs\fR or \&\f(CWbd\fR requests with the \fItransparent\fR
1785219b2ee8SDavid du Colombiermechanism described in §10.6.
1786219b2ee8SDavid du Colombier.PP
1787219b2ee8SDavid du ColombierDiversions may be nested
1788219b2ee8SDavid du Colombierand certain parameters and registers
1789219b2ee8SDavid du Colombierare associated
1790219b2ee8SDavid du Colombierwith the current diversion level
1791219b2ee8SDavid du Colombier(the top non-diversion level may be thought of as the
1792219b2ee8SDavid du Colombier0th diversion level).
1793219b2ee8SDavid du ColombierThese are the diversion trap and associated macro,
1794219b2ee8SDavid du Colombierno-space mode,
1795219b2ee8SDavid du Colombierthe internally-saved marked place (see \&\f(CWmk\fR and \&\f(CWrt\fR),
1796219b2ee8SDavid du Colombierthe current vertical place (\&\f(CW.d\fR register),
1797219b2ee8SDavid du Colombierthe current high-water text baseline (\&\f(CW.h\fR register),
1798219b2ee8SDavid du Colombierand the current diversion name (\&\f(CW.z\fR register).
1799219b2ee8SDavid du Colombier.sc "Traps.
1800219b2ee8SDavid du ColombierThree types of trap mechanisms are available\(empage traps, a diversion trap, and
1801219b2ee8SDavid du Colombieran input-line-count trap.
1802219b2ee8SDavid du ColombierMacro-invocation traps may be planted using \&\f(CWwh\fR at any page position including the top.
1803219b2ee8SDavid du ColombierThis trap position may be changed using \&\f(CWch\fR.
1804219b2ee8SDavid du ColombierTrap positions at or below the bottom of the page
1805219b2ee8SDavid du Colombierhave no effect unless or until
1806219b2ee8SDavid du Colombiermoved to within the page or rendered effective by an increase in page length.
1807219b2ee8SDavid du ColombierTwo traps may be planted at the same position only by first planting them at different
1808219b2ee8SDavid du Colombierpositions and then moving one of the traps;
1809219b2ee8SDavid du Colombierthe first planted trap will conceal the second unless and until the first one is moved
1810219b2ee8SDavid du Colombier(see Tutorial Examples).
1811219b2ee8SDavid du ColombierIf the first one is moved back, it again conceals the second trap.
1812219b2ee8SDavid du ColombierThe macro associated with a page trap is automatically
1813219b2ee8SDavid du Colombierinvoked when a line of text is output whose vertical size reaches
1814219b2ee8SDavid du Colombieror sweeps past the trap position.
1815219b2ee8SDavid du ColombierReaching the bottom of a page springs the top-of-page trap, if any,
1816219b2ee8SDavid du Colombierprovided there is a next page.
1817219b2ee8SDavid du ColombierThe distance to the next trap position is available in the \&\f(CW.t\fR register;
1818219b2ee8SDavid du Colombierif there are no traps between the current position and the bottom of the page,
1819219b2ee8SDavid du Colombierthe distance returned is the distance to the page bottom.
1820219b2ee8SDavid du Colombier.PP
1821219b2ee8SDavid du ColombierA macro-invocation trap effective in the current diversion may be planted using \&\f(CWdt\fR.
1822219b2ee8SDavid du ColombierThe \&\f(CW.t\fR register works in a diversion; if there is no subsequent trap a large
1823219b2ee8SDavid du Colombierdistance is returned.
1824219b2ee8SDavid du ColombierFor a description of input-line-count traps, see \&\f(CWit\fR below.
1825219b2ee8SDavid du Colombier.bt "\&\f(CW&de\fI xx yy\fR" "-" "\fI.yy=\&\f(CW..\fR" "-" "Define or redefine the macro \fIxx\fR.
1826219b2ee8SDavid du ColombierThe contents of the macro begin on the next input line.
1827219b2ee8SDavid du ColombierInput lines are copied in \fIcopy mode\fR until the definition is terminated by a
1828219b2ee8SDavid du Colombierline beginning with \&\f(CW.\fIyy\fR,
1829219b2ee8SDavid du Colombierwhereupon the macro \fIyy\fR is called.
1830219b2ee8SDavid du ColombierIn the absence of \fIyy\fR, the definition
1831219b2ee8SDavid du Colombieris terminated by a
1832219b2ee8SDavid du Colombierline beginning with ``\&\f(CW..\fR''.
1833219b2ee8SDavid du ColombierA macro may contain \&\f(CWde\fR requests
1834219b2ee8SDavid du Colombierprovided the terminating macros differ
1835219b2ee8SDavid du Colombieror the contained definition terminator is concealed.
1836219b2ee8SDavid du Colombier\&``\&\f(CW..\fR'' can be concealed as
1837219b2ee8SDavid du Colombier\&\f(CW\e\e..\fR which will copy as \&\f(CW\e..\fR and be reread as ``\&\f(CW..\fR''.
1838219b2ee8SDavid du Colombier.bt "\&\f(CW&am\fI xx yy\fR" "-" "\fI.yy=\&\f(CW..\fR" "-" "Append to macro
1839219b2ee8SDavid du Colombier.I xx
1840219b2ee8SDavid du Colombier(append version of \&\f(CWde\fR).
1841219b2ee8SDavid du Colombier.bt "\&\f(CW&ds\fI xx string\fR" "-" "ignored" "-" "Define a string
1842219b2ee8SDavid du Colombier\fIxx\fR containing \fIstring\fR.
1843219b2ee8SDavid du ColombierAny initial double quote in \fIstring\fR is stripped off to permit
1844219b2ee8SDavid du Colombierinitial blanks.
1845219b2ee8SDavid du Colombier.bt "\&\f(CW&as\fI xx string\fR" "-" "ignored" "-" "Append
1846219b2ee8SDavid du Colombier\fIstring\fR to string \fIxx\fR
1847219b2ee8SDavid du Colombier(append version of \&\f(CWds\fR).
1848219b2ee8SDavid du Colombier.bt "\&\f(CW&rm\fI xx\fR" "-" "ignored" "-" "Remove
1849219b2ee8SDavid du Colombierrequest, macro, or string.
1850219b2ee8SDavid du ColombierThe name \fIxx\fR is removed from the name list and
1851219b2ee8SDavid du Colombierany related storage space is freed.
1852219b2ee8SDavid du ColombierSubsequent references will have no effect.
1853219b2ee8SDavid du ColombierIf many macros and strings are being created dynamically, it
1854219b2ee8SDavid du Colombiermay become necessary to remove unused ones
1855219b2ee8SDavid du Colombierto recapture internal storage space for newer registers.
1856219b2ee8SDavid du Colombier.bt "\&\f(CW&rn\fI xx yy\fR" "-" "ignored" "-" "Rename request, macro, or string
1857219b2ee8SDavid du Colombier\fIxx\fR to \fIyy\fR.
1858219b2ee8SDavid du ColombierIf \fIyy\fR exists, it is first removed.
1859219b2ee8SDavid du Colombier.bt "\&\f(CW&di\fI xx\fR" "-" "end" "D" "Divert output to macro \fIxx\fR.
1860219b2ee8SDavid du ColombierNormal text processing occurs during diversion
1861219b2ee8SDavid du Colombierexcept that page offsetting is not done.
1862219b2ee8SDavid du ColombierThe diversion ends when the request \&\f(CWdi\fR or \&\f(CWda\fR is encountered without an argument;
1863219b2ee8SDavid du Colombierextraneous
1864219b2ee8SDavid du Colombierrequests of this type should not appear when nested diversions are being used.
1865219b2ee8SDavid du Colombier.bt "\&\f(CW&da \fIxx\fR" "-" "end" "D" "Divert, appending to macro \fIxx\fR
1866219b2ee8SDavid du Colombier(append version of \&\f(CWdi\fR).
1867219b2ee8SDavid du Colombier.bt "\&\f(CW&wh\fI N xx\fR" "-" "-" "\fBv\fR" "Install
1868219b2ee8SDavid du Colombiera trap to invoke \fIxx\fR at page position \fIN\fR;
1869219b2ee8SDavid du Colombiera negative N will be interpreted as a distance from the
1870219b2ee8SDavid du Colombierpage bottom.
1871219b2ee8SDavid du ColombierAny macro previously planted at @N@ is replaced by \fIxx\fR.
1872219b2ee8SDavid du ColombierA zero @N@ refers to the top of a page.
1873219b2ee8SDavid du ColombierIn the absence of \fIxx\fR, the first trap found at @N@, if any, is removed.
1874219b2ee8SDavid du Colombier.bt "\&\f(CW&ch\fI xx N\fR" "-" "-" "\fBv\fR" "Change
1875219b2ee8SDavid du Colombierthe trap position for macro \fIxx\fR to be @N@.
1876219b2ee8SDavid du ColombierIn the absence of @N@, the trap, if any, is removed.
1877219b2ee8SDavid du Colombier.bt "\&\f(CW&dt\fI N xx\fR" "-" "off" "D,\fBv\fR" "Install a diversion trap
1878219b2ee8SDavid du Colombierat position @N@ in the \fIcurrent\fR diversion to invoke
1879219b2ee8SDavid du Colombiermacro \fIxx\fR.
1880219b2ee8SDavid du ColombierAnother \&\f(CWdt\fR will redefine the diversion trap.
1881219b2ee8SDavid du ColombierIf no arguments are given, the diversion trap is removed.
1882219b2ee8SDavid du Colombier.bt "\&\f(CW&it\fI N xx\fR" "-" "off" "E" "Set an input-line-count trap
1883219b2ee8SDavid du Colombierto invoke the macro \fIxx\fR after @N@ lines of \fItext\fR input
1884219b2ee8SDavid du Colombierhave been read
1885219b2ee8SDavid du Colombier(control or request lines do not count).
1886219b2ee8SDavid du ColombierThe text may be inline text or
1887219b2ee8SDavid du Colombiertext interpolated by inline or trap-invoked macros.
1888219b2ee8SDavid du Colombier.bt "\&\f(CW&em\fI xx\fR" "none" "none" "-" "The
1889219b2ee8SDavid du Colombiermacro \fIxx\fR will be invoked
1890219b2ee8SDavid du Colombierwhen all input has ended.
1891219b2ee8SDavid du ColombierThe effect is almost as if the contents of \fIxx\fR had been at the end
1892219b2ee8SDavid du Colombierof the last file processed,
1893219b2ee8SDavid du Colombierbut all processing ceases at the next page eject.
1894219b2ee8SDavid du Colombier.NH
1895219b2ee8SDavid du ColombierNumber Registers
1896219b2ee8SDavid du Colombier.PP
1897219b2ee8SDavid du ColombierA variety of parameters are available to the user as
1898219b2ee8SDavid du Colombierpredefined \fInumber registers\fR (see Summary, page \n(*%).
1899219b2ee8SDavid du ColombierIn addition, users may define their own registers.
1900219b2ee8SDavid du ColombierRegister names are one or two characters long and do not conflict
1901219b2ee8SDavid du Colombierwith request, macro, or string names.
1902219b2ee8SDavid du ColombierExcept for certain predefined read-only registers,
1903219b2ee8SDavid du Colombiera number register can be read, written, automatically
1904219b2ee8SDavid du Colombierincremented or decremented, and interpolated
1905219b2ee8SDavid du Colombierinto the input in a variety of formats.
1906219b2ee8SDavid du ColombierOne common use of user-defined registers is to
1907219b2ee8SDavid du Colombierautomatically number sections, paragraphs, lines, etc.
1908219b2ee8SDavid du ColombierA number register may be used any time numerical input is expected or desired
1909219b2ee8SDavid du Colombierand may be used in numerical \fIexpressions\fR (§1.4).
1910219b2ee8SDavid du Colombier.PP
1911219b2ee8SDavid du ColombierNumber registers are created and modified using \&\f(CWnr\fR, which
1912219b2ee8SDavid du Colombierspecifies the name, numerical value, and the auto-increment size.
1913219b2ee8SDavid du ColombierRegisters are also modified, if accessed
1914219b2ee8SDavid du Colombierwith an auto-incrementing sequence.
1915219b2ee8SDavid du ColombierIf the registers \fIx\fR and \fIxx\fR both contain
1916219b2ee8SDavid du Colombier@N@ and have the auto-increment size @M@,
1917219b2ee8SDavid du Colombierthe following access sequences have the effect shown:
1918219b2ee8SDavid du Colombier.TS
1919219b2ee8SDavid du Colombiercenter box;
1920219b2ee8SDavid du Colombierc2|c2|c
1921219b2ee8SDavid du Colombierc2|c2|c2
1922219b2ee8SDavid du Colombierl2|c2|c2
1923219b2ee8SDavid du Colombierl2|c2|c2
1924219b2ee8SDavid du Colombierl2|l2|c2.
1925219b2ee8SDavid du Colombier	Effect on	Value
1926219b2ee8SDavid du ColombierSequence	Register	Interpolated
1927219b2ee8SDavid du Colombier_
1928219b2ee8SDavid du Colombier\&\f(CW\en\fIx\fR	none	@N@
1929219b2ee8SDavid du Colombier\&\f(CW\en(\fIxx\fR	none	@N@
1930219b2ee8SDavid du Colombier\&\f(CW\en+\fIx\fR	\fIx\fR incremented by @M@	\fIN+M\fR
1931219b2ee8SDavid du Colombier\&\f(CW\en-\fIx\fR	\fIx\fR decremented by @M@	\fIN-M\fR
1932219b2ee8SDavid du Colombier\&\f(CW\en+(\fIxx\fR	\fIxx\fR incremented by @M@	\fIN+M\fR
1933219b2ee8SDavid du Colombier\&\f(CW\en-(\fIxx\fR	\fIxx\fR decremented by @M@	\fIN-M\fR
1934219b2ee8SDavid du Colombier.TE
1935219b2ee8SDavid du ColombierWhen interpolated, a number register is converted to
1936219b2ee8SDavid du Colombierdecimal (default),
1937219b2ee8SDavid du Colombierdecimal with leading zeros,
1938219b2ee8SDavid du Colombierlower-case Roman,
1939219b2ee8SDavid du Colombierupper-case Roman,
1940219b2ee8SDavid du Colombierlower-case sequential alphabetic,
1941219b2ee8SDavid du Colombieror
1942219b2ee8SDavid du Colombierupper-case sequential alphabetic
1943219b2ee8SDavid du Colombieraccording to the format specified by \&\f(CWaf\fR.
1944219b2ee8SDavid du Colombier.bt "\&\f(CW&nr\fI R \(+-N M\fR" "" "-" "\fBu\fR" "The number register
1945219b2ee8SDavid du Colombier@R@ is assigned the value @+- N@
1946219b2ee8SDavid du Colombierwith respect to the previous value, if any.
1947219b2ee8SDavid du ColombierThe increment for auto-incrementing is set to @M@.
1948219b2ee8SDavid du Colombier.bt "\&\f(CW&af\fI R c\fR" "arabic" "-" "-" "Assign
1949219b2ee8SDavid du Colombierformat @c@ to register @R@.
1950219b2ee8SDavid du ColombierThe available formats are:
1951219b2ee8SDavid du Colombier.Tm number register format	s
1952219b2ee8SDavid du Colombier.TS
1953219b2ee8SDavid du Colombiercenter box;
1954219b2ee8SDavid du Colombierc2|c
1955219b2ee8SDavid du Colombierc2|c
1956219b2ee8SDavid du Colombierc2|l.
1957219b2ee8SDavid du Colombier	Numbering
1958219b2ee8SDavid du ColombierFormat	Sequence
1959219b2ee8SDavid du Colombier_
1960219b2ee8SDavid du Colombier\&\f(CW1\fR	0, 1, 2, 3, 4, 5, ...
1961219b2ee8SDavid du Colombier\&\f(CW001\fR	000, 001, 002, 003, 004, 005, ...
1962219b2ee8SDavid du Colombier\&\f(CWi\fR	0, i, ii, iii, iv, v, ...
1963219b2ee8SDavid du Colombier\&\f(CWI\fR	0, I, II, III, IV, V, ...
1964219b2ee8SDavid du Colombier\&\f(CWa\fR	0, a, b, c, ..., z, aa, ab, ..., zz, aaa, ...
1965219b2ee8SDavid du Colombier\&\f(CWA\fR	0, A, B, C, ..., Z, AA, AB, ..., ZZ, AAA, ...
1966219b2ee8SDavid du Colombier.TE
1967219b2ee8SDavid du ColombierAn arabic format having @N@ digits
1968219b2ee8SDavid du Colombierspecifies a field width of @N@ digits (example 2 above).
1969219b2ee8SDavid du ColombierThe read-only registers and the width function
1970219b2ee8SDavid du Colombier.CW \ew
1971219b2ee8SDavid du Colombier(§11.2)
1972219b2ee8SDavid du Colombierare always arabic.
1973219b2ee8SDavid du ColombierWarning: the value of a number register in a non-Arabic format
1974219b2ee8SDavid du Colombieris not numeric, and will not produce the expected results in expressions.
1975219b2ee8SDavid du Colombier.IP
1976219b2ee8SDavid du ColombierThe function
1977219b2ee8SDavid du Colombier.CW \eg@x@
1978219b2ee8SDavid du Colombieror
1979219b2ee8SDavid du Colombier.CW \eg(@xx@
1980219b2ee8SDavid du Colombierreturns the format of a number register in a form suitable for
1981219b2ee8SDavid du Colombier.CW af ;
1982219b2ee8SDavid du Colombierit returns nothing if the register has not been used.
1983219b2ee8SDavid du Colombier.bt "\&\f(CW&rr\fI R\fR" "-" "ignored" "-" "Remove number register @R@.
1984219b2ee8SDavid du ColombierIf many registers are being created dynamically, it
1985219b2ee8SDavid du Colombiermay become necessary to remove unused registers
1986219b2ee8SDavid du Colombierto recapture internal storage space for newer registers.
1987219b2ee8SDavid du ColombierThe register
1988219b2ee8SDavid du Colombier.CW .R
1989219b2ee8SDavid du Colombiercontains the number of number registers still available.
1990219b2ee8SDavid du Colombier.NH
1991219b2ee8SDavid du ColombierTabs, Leaders, and Fields
1992219b2ee8SDavid du Colombier.sc "Tabs and leaders.
1993219b2ee8SDavid du ColombierThe \s-1ASCII\s+1 horizontal tab character and the \s-1ASCII\s+1
1994219b2ee8SDavid du Colombier\s-1SOH\s+1 (control-A, hereafter called the \fIleader\fR character)
1995219b2ee8SDavid du Colombiercan both be used to generate either horizontal motion or
1996219b2ee8SDavid du Colombiera string of repeated characters.
1997219b2ee8SDavid du ColombierThe length of the generated entity is governed
1998219b2ee8SDavid du Colombierby internal \fItab stops\fR specifiable
1999219b2ee8SDavid du Colombierwith \&\f(CWta\fR.
2000219b2ee8SDavid du ColombierThe default difference is that tabs generate motion and leaders generate
2001219b2ee8SDavid du Colombiera string of periods;
2002219b2ee8SDavid du Colombier\&\f(CWtc\fR and \&\f(CWlc\fR
2003219b2ee8SDavid du Colombieroffer the choice of repeated character or motion.
2004219b2ee8SDavid du ColombierThere are three types of internal tab stops\(em\
2005219b2ee8SDavid du Colombier\fIleft\fR adjusting, \fIright\fR adjusting,
2006219b2ee8SDavid du Colombierand \fIcentering\fR.
2007219b2ee8SDavid du ColombierIn the following table,
2008219b2ee8SDavid du Colombier\fID\fR is the distance from the current position on the \fIinput\fR line
2009219b2ee8SDavid du Colombier(where a tab or leader was found)
2010219b2ee8SDavid du Colombierto the next tab stop,
2011219b2ee8SDavid du Colombier\fInext-string\fR consists
2012219b2ee8SDavid du Colombierof the input characters following the tab (or leader) up to the next tab (or leader) or end of line,
2013219b2ee8SDavid du Colombierand
2014219b2ee8SDavid du Colombier\fIW\fR is the width of \fInext-string\fR.
2015219b2ee8SDavid du Colombier.TS
2016219b2ee8SDavid du Colombiercenter box;
2017219b2ee8SDavid du Colombierc2|c2|c
2018219b2ee8SDavid du Colombierc2|c2|c
2019219b2ee8SDavid du Colombierc2|c2|l.
2020219b2ee8SDavid du ColombierTab	Length of motion or	Location of
2021219b2ee8SDavid du Colombiertype	repeated characters	\fInext-string\fR
2022219b2ee8SDavid du Colombier_
2023219b2ee8SDavid du ColombierLeft	\fID\fR	Following \fID\fR
2024219b2ee8SDavid du ColombierRight	\fID-W\fR	Right adjusted within \fID\fR
2025219b2ee8SDavid du ColombierCentered	\fID-W/\fR2	Centered on right end of \fID\fR
2026219b2ee8SDavid du Colombier.TE
2027219b2ee8SDavid du ColombierThe length of generated motion is allowed to be negative, but
2028219b2ee8SDavid du Colombierthat of a repeated character string cannot be.
2029219b2ee8SDavid du ColombierRepeated character strings contain an integer number of characters, and
2030219b2ee8SDavid du Colombierany residual distance is prepended as motion.
2031219b2ee8SDavid du ColombierTabs or leaders found after the last tab stop are ignored, but may be used
2032219b2ee8SDavid du Colombieras \fInext-string\fR terminators.
2033219b2ee8SDavid du Colombier.PP
2034219b2ee8SDavid du ColombierTabs and leaders are not interpreted in copy mode.
2035219b2ee8SDavid du Colombier\&\f(CW\et\fR and \&\f(CW\ea\fR always generate a non-interpreted
2036219b2ee8SDavid du Colombiertab and leader respectively, and
2037219b2ee8SDavid du Colombierare equivalent to actual tabs and leaders in copy mode.
2038219b2ee8SDavid du Colombier.sc "Fields.
2039219b2ee8SDavid du ColombierA \fIfield\fR is contained between
2040219b2ee8SDavid du Colombiera pair of \fIfield delimiter\fR characters,
2041219b2ee8SDavid du Colombierand consists of substrings
2042219b2ee8SDavid du Colombierseparated by \fIpadding\fR indicator characters.
2043219b2ee8SDavid du ColombierThe field length is the distance on the
2044219b2ee8SDavid du Colombier\fIinput\fR line from the position where the field begins to the next tab stop.
2045219b2ee8SDavid du ColombierThe difference between the total length of all the substrings
2046219b2ee8SDavid du Colombierand the field length is incorporated as horizontal
2047219b2ee8SDavid du Colombierpadding space that is divided among the indicated
2048219b2ee8SDavid du Colombierpadding places.
2049219b2ee8SDavid du ColombierThe incorporated padding is allowed to be negative.
2050219b2ee8SDavid du ColombierFor example,
2051219b2ee8SDavid du Colombierif the field delimiter is \&\f(CW#\fR and the padding indicator is \&\f(CW^\fR,
2052219b2ee8SDavid du Colombier\&\f(CW#^\fIxxx\&\f(CW^\fIright\|\&\f(CW#\fR
2053219b2ee8SDavid du Colombierspecifies a right-adjusted string with the string \fIxxx\fR centered
2054219b2ee8SDavid du Colombierin the remaining space.
2055219b2ee8SDavid du Colombier.h1
2056219b2ee8SDavid du Colombier.bt "\&\f(CW&ta\fI Nt ...\fR" "0.8; 0.5in" "none" "E,\fBm\fR" "Set tab stops and types.
2057219b2ee8SDavid du Colombier\fIt=\&\f(CWR\fR, right adjusting;
2058219b2ee8SDavid du Colombier\fIt=\&\f(CWC\fR, centering;
2059219b2ee8SDavid du Colombier\fIt\fR absent, left adjusting.
2060219b2ee8SDavid du Colombier\*(Tr tab stops are preset every 0.5in.,
2061219b2ee8SDavid du Colombier\*(NR every 0.8in.
2062219b2ee8SDavid du ColombierThe stop values are separated by spaces, and
2063219b2ee8SDavid du Colombiera value preceded by \&\f(CW+\fR
2064219b2ee8SDavid du Colombieris treated as an increment to the previous stop value.
2065219b2ee8SDavid du Colombier.bt "\&\f(CW&tc\fI c\fR" "none" "none" "E" "The tab repetition character
2066219b2ee8SDavid du Colombierbecomes @c@,
2067219b2ee8SDavid du Colombieror is removed, thus specifying motion.
2068219b2ee8SDavid du Colombier.bt "\&\f(CW&lc\fI c\fR" "\&\f(CW.\fR" "none" "E" "The leader repetition character
2069219b2ee8SDavid du Colombierbecomes @c@,
2070219b2ee8SDavid du Colombieror is removed, thus specifying motion.
2071219b2ee8SDavid du Colombier.bt "\&\f(CW&fc\fI a b\fR" "off" "off" "-" "The field delimiter
2072219b2ee8SDavid du Colombieris set to \fIa\fR;
2073219b2ee8SDavid du Colombierthe padding indicator is set to the space character or to
2074219b2ee8SDavid du Colombier\fIb\fR, if given.
2075219b2ee8SDavid du ColombierIn the absence of arguments the field mechanism is turned off.
2076219b2ee8SDavid du Colombier.NH
2077219b2ee8SDavid du ColombierInput and Output Conventions and Character Translations
2078219b2ee8SDavid du Colombier.sc "Input character translations.
2079219b2ee8SDavid du ColombierWays of inputting the valid character set were
2080219b2ee8SDavid du Colombierdiscussed in §2.1.
2081219b2ee8SDavid du ColombierThe \s-1ASCII\s+1 control characters horizontal tab (§9.1),
2082219b2ee8SDavid du Colombier\s-1SOH\s+1 (§9.1), and backspace (§10.3) are discussed elsewhere.
2083219b2ee8SDavid du ColombierThe newline delimits input lines.
2084219b2ee8SDavid du ColombierIn addition,
2085219b2ee8SDavid du Colombier\s-1STX\s+1, \s-1ETX\s+1, \s-1ENQ\s+1, \s-1ACK\s+1, and \s-1BEL\s+1
2086219b2ee8SDavid du Colombierare accepted,
2087219b2ee8SDavid du Colombierand may be used as delimiters or translated into a graphic with \&\f(CWtr\fR (§10.5).
2088219b2ee8SDavid du ColombierAll others are ignored.
2089219b2ee8SDavid du Colombier.PP
2090219b2ee8SDavid du ColombierThe \fIescape\fR character \&\f(CW\e\fR
2091219b2ee8SDavid du Colombierintroduces \fIescape sequences\fR,
2092219b2ee8SDavid du Colombierwhich cause the following character to mean
2093219b2ee8SDavid du Colombieranother character, or to indicate
2094219b2ee8SDavid du Colombiersome function.
2095219b2ee8SDavid du Colombier.nr %% \n(*%-1
2096219b2ee8SDavid du ColombierA complete list of such sequences is given in the Summary on page \n(*%.
2097219b2ee8SDavid du ColombierThe escape character \&\f(CW\e\fR
2098219b2ee8SDavid du Colombiershould not be confused with the \s-1ASCII\s+1 control character \s-1ESC\s+1.
2099219b2ee8SDavid du ColombierThe escape character \&\f(CW\e\fR can be input with the sequence \&\f(CW\e\e\fR.
2100219b2ee8SDavid du ColombierThe escape character can be changed with \&\f(CWec\fR,
2101219b2ee8SDavid du Colombierand all that has been said about the default \&\f(CW\e\fR becomes true
2102219b2ee8SDavid du Colombierfor the new escape character.
2103219b2ee8SDavid du Colombier\&\f(CW\ee\fR can be used to print whatever the current escape character is.
2104219b2ee8SDavid du ColombierThe escape mechanism may be turned off with \&\f(CWeo\fR,
2105219b2ee8SDavid du Colombierand restored with \&\f(CWec\fR.
2106219b2ee8SDavid du Colombier.h1
2107219b2ee8SDavid du Colombier.bt "\&\f(CW&ec\fI c\fR" "\&\f(CW\e\fR" "\&\f(CW\e\fR" "-" "Set escape character
2108219b2ee8SDavid du Colombierto \&\f(CW\e\fR, or to @c@, if given.
2109219b2ee8SDavid du Colombier.bt "\&\f(CW&eo\fR" "on" "-" "-" "Turn escape mechanism off.
2110219b2ee8SDavid du Colombier.sc "Ligatures.
2111219b2ee8SDavid du Colombier.lg0
2112219b2ee8SDavid du ColombierThe set of available ligatures is device and font dependent,
2113219b2ee8SDavid du Colombierbut is often a subset of
2114219b2ee8SDavid du Colombier\&\fBfi\fR, \&\fBfl\fR, \&\fBff\fR, \&\fBffi\fR, and \&\fBffl\fR.
2115219b2ee8SDavid du ColombierThey may be input by
2116219b2ee8SDavid du Colombier\&\f(CW\e(fi\fR, \&\f(CW\e(fl\fR, \&\f(CW\e(ff\fR, \&\f(CW\e(Fi\fR, and \&\f(CW\e(Fl\fR respectively.
2117219b2ee8SDavid du Colombier.lg
2118219b2ee8SDavid du ColombierThe ligature mode is normally on in \*(TR, and automatically invokes
2119219b2ee8SDavid du Colombierligatures during input.
2120219b2ee8SDavid du Colombier.h1
2121219b2ee8SDavid du Colombier.bt "\&\f(CW&lg\fI N\fR" "on; off" "on" "-" "Ligature mode
2122219b2ee8SDavid du Colombieris turned on if @N@ is absent or non-zero,
2123219b2ee8SDavid du Colombierand turned off if @N=0@.
2124219b2ee8SDavid du ColombierIf @N=2@, only the two-character ligatures are automatically invoked.
2125219b2ee8SDavid du ColombierLigature mode is inhibited for
2126219b2ee8SDavid du Colombierrequest, macro, string, register, or file names,
2127219b2ee8SDavid du Colombierand in copy mode.
2128219b2ee8SDavid du ColombierNo effect in \*(NR.
2129219b2ee8SDavid du Colombier.sc "Backspacing, underlining, overstriking, etc.
2130219b2ee8SDavid du ColombierUnless in copy mode, the \s-1ASCII\s+1 backspace character is replaced
2131219b2ee8SDavid du Colombierby a backward horizontal motion having the width of the
2132219b2ee8SDavid du Colombierspace character.
2133219b2ee8SDavid du ColombierUnderlining as a form of line-drawing is discussed in §12.4.
2134219b2ee8SDavid du ColombierA generalized overstriking function is described in §12.1.
2135219b2ee8SDavid du Colombier.PP
2136219b2ee8SDavid du Colombier\*(Nr automatically underlines
2137219b2ee8SDavid du Colombiercharacters in the \fIunderline\fR font,
2138219b2ee8SDavid du Colombierspecifiable with \&\f(CWuf\fR,
2139219b2ee8SDavid du Colombiernormally that on font position 2.
2140219b2ee8SDavid du ColombierIn addition to \&\f(CWft\fR and
2141219b2ee8SDavid du Colombier.CW \ef@F@ ,
2142219b2ee8SDavid du Colombierthe underline font may be selected by \&\f(CWul\fR and \&\f(CWcu\fR.
2143219b2ee8SDavid du ColombierUnderlining is restricted to an output-device-dependent
2144219b2ee8SDavid du Colombiersubset of reasonable characters.
2145219b2ee8SDavid du Colombier.bt "\&\f(CW&ul\fI N\fR" "off" "@N=1@" "E" "Italicize in \*(TR
2146219b2ee8SDavid du Colombier(underline in \*(NR) the next @N@
2147219b2ee8SDavid du Colombierinput text lines.
2148219b2ee8SDavid du ColombierActually, switch to underline font, saving the
2149219b2ee8SDavid du Colombiercurrent font for later restoration;
2150219b2ee8SDavid du Colombierother font changes within the span of a \&\f(CWul\fR
2151219b2ee8SDavid du Colombierwill take effect,
2152219b2ee8SDavid du Colombierbut the restoration will undo the last change.
2153219b2ee8SDavid du ColombierOutput generated by \&\f(CWtl\fR (§14) is affected by the
2154219b2ee8SDavid du Colombierfont change, but does not decrement @N@.
2155219b2ee8SDavid du ColombierIf @N>1@, there is the risk that
2156219b2ee8SDavid du Colombiera trap interpolated macro may provide text
2157219b2ee8SDavid du Colombierlines within the span;
2158219b2ee8SDavid du Colombierenvironment switching can prevent this.
2159219b2ee8SDavid du Colombier.bt "\&\f(CW&cu\fI N\fR" "off" "@N=1@" "E" "Continuous underline.
2160219b2ee8SDavid du ColombierA variant
2161219b2ee8SDavid du Colombierof \&\f(CWul\fR that causes \fIevery\fR character to be underlined in \*(NR.
2162219b2ee8SDavid du ColombierIdentical to \&\f(CWul\fR in \*(TR.
2163219b2ee8SDavid du Colombier.bt "\&\f(CW&uf\fI F\fR" "Italic" "Italic" "-" "Underline font set to @F@.
2164219b2ee8SDavid du ColombierIn \*(NR,
2165219b2ee8SDavid du Colombier@F@ may not be on position 1.
2166219b2ee8SDavid du Colombier.sc "Control characters.
2167219b2ee8SDavid du ColombierBoth the control character \&\f(CW.\fR and the \fIno-break\fR
2168219b2ee8SDavid du Colombiercontrol character \&\f(CW'\fR may be changed.
2169219b2ee8SDavid du ColombierSuch a change must be compatible with the design
2170219b2ee8SDavid du Colombierof any macros used in the span of the change,
2171219b2ee8SDavid du Colombierand
2172219b2ee8SDavid du Colombierparticularly of any trap-invoked macros.
2173219b2ee8SDavid du Colombier.bt "\&\f(CW&cc\fI c\fR" "\&\f(CW.\fR" "\&\f(CW.\fR" "E" "The basic control character
2174219b2ee8SDavid du Colombieris set to @c@,
2175219b2ee8SDavid du Colombieror reset to ``\&\f(CW.\fR''.
2176219b2ee8SDavid du Colombier.bt "\&\f(CW&c2\fI c\fR" "\&\f(CW'" "'\fR" "E" "The \fIno-break\fR control character is set
2177219b2ee8SDavid du Colombierto @c@, or reset to ``\&\f(CW'\fR''.
2178219b2ee8SDavid du Colombier.sc "Output translation.
2179219b2ee8SDavid du ColombierOne character can be made a stand-in for another character using \&\f(CWtr\fR.
2180219b2ee8SDavid du ColombierAll text processing (e.g., character comparisons) takes place
2181219b2ee8SDavid du Colombierwith the input (stand-in) character, which appears to have the width of the final
2182219b2ee8SDavid du Colombiercharacter.
2183219b2ee8SDavid du ColombierThe graphic translation occurs at the moment of output
2184219b2ee8SDavid du Colombier(including diversion).
2185219b2ee8SDavid du Colombier.bt "\&\f(CW&tr\fI abcd....\fR" "none" "-" "O" "Translate
2186219b2ee8SDavid du Colombier\fIa\fR into \fIb\fR, @c@ into \fId\fR, etc.
2187219b2ee8SDavid du ColombierIf an odd number of characters is given,
2188219b2ee8SDavid du Colombierthe last one will be mapped into the space character.
2189219b2ee8SDavid du ColombierTo be consistent, a particular translation
2190219b2ee8SDavid du Colombiermust stay in effect from \fIinput\fR to \fIoutput\fR time.
2191219b2ee8SDavid du Colombier.sc "Transparent throughput.
2192219b2ee8SDavid du ColombierAn input line beginning with a \&\f(CW\e!\fR is read in copy mode and \fItrans\%parently\fR output
2193219b2ee8SDavid du Colombier(without the initial \&\f(CW\e!\fR);
2194219b2ee8SDavid du Colombierthe text processor is otherwise unaware of the line's presence.
2195219b2ee8SDavid du ColombierThis mechanism may be used to pass control information to a post-processor
2196219b2ee8SDavid du Colombieror to embed control lines in a macro created by a diversion.
2197219b2ee8SDavid du Colombier.sc "Transparent output
2198219b2ee8SDavid du ColombierThe sequence
2199219b2ee8SDavid du Colombier.CW \eX'@anything@'
2200219b2ee8SDavid du Colombiercopies
2201219b2ee8SDavid du Colombier.I anything
2202219b2ee8SDavid du Colombierto the output, as a device control function of the form
2203219b2ee8SDavid du Colombier.CW x
2204219b2ee8SDavid du Colombier.CW X
2205219b2ee8SDavid du Colombier.I anything
2206219b2ee8SDavid du Colombier(§22).
2207219b2ee8SDavid du ColombierEscape sequences in
2208219b2ee8SDavid du Colombier.I anything
2209219b2ee8SDavid du Colombierare processed.
2210219b2ee8SDavid du Colombier.sc "Comments and concealed newlines.
2211219b2ee8SDavid du ColombierAn uncomfortably long input line that must stay
2212219b2ee8SDavid du Colombierone line (e.g., a string definition, or nofilled text)
2213219b2ee8SDavid du Colombiercan be split into several physical lines by ending all but
2214219b2ee8SDavid du Colombierthe last one with the escape \&\f(CW\e\fR.
2215219b2ee8SDavid du ColombierThe sequence \&\f(CW\e\fR@newline@ is always ignored,
2216219b2ee8SDavid du Colombierexcept in a comment.
2217219b2ee8SDavid du ColombierComments may be embedded at the end of any line by
2218219b2ee8SDavid du Colombierprefacing them with \&\f(CW\e"\fR.
2219219b2ee8SDavid du ColombierThe newline at the end of a comment cannot be concealed.
2220219b2ee8SDavid du ColombierA line beginning with \&\f(CW\e"\fR will appear as a blank line and
2221219b2ee8SDavid du Colombierbehave like
2222219b2ee8SDavid du Colombier.CW ".sp\ 1" ;
2223219b2ee8SDavid du Colombiera comment can be on a line by itself by beginning the line with \&\f(CW.\e"\fR.
2224219b2ee8SDavid du Colombier.NH
2225219b2ee8SDavid du ColombierLocal Horizontal and Vertical Motions, and the Width Function
2226219b2ee8SDavid du Colombier.sc "Local Motions.
2227219b2ee8SDavid du ColombierThe functions \&\f(CW\ev'\fIN\&\f(CW'\fR and
2228219b2ee8SDavid du Colombier\&\f(CW\eh'\fIN\&\f(CW'\fR
2229219b2ee8SDavid du Colombiercan be used for \fIlocal\fR vertical and horizontal motion respectively.
2230219b2ee8SDavid du ColombierThe distance @N@ may be negative; the positive directions
2231219b2ee8SDavid du Colombierare rightward and downward.
2232219b2ee8SDavid du ColombierA local motion is one contained within a line.
2233219b2ee8SDavid du ColombierTo avoid unexpected vertical dislocations, it is necessary that
2234219b2ee8SDavid du Colombierthe net vertical local motion within a word in filled text
2235219b2ee8SDavid du Colombierand otherwise within a line balance to zero.
2236219b2ee8SDavid du ColombierThe escape sequences providing local motion are
2237219b2ee8SDavid du Colombiersummarized in the following table.
2238219b2ee8SDavid du Colombier.ds Y \0\0\0
2239219b2ee8SDavid du Colombier.KS
2240219b2ee8SDavid du Colombier.TS
2241219b2ee8SDavid du Colombiercenter box;
2242219b2ee8SDavid du Colombierc2|cs2||c2|cs2
2243219b2ee8SDavid du Colombierc1|c2c2||c2|c2c2.
2244219b2ee8SDavid du ColombierVertical	Effect in	Horizontal	Effect in
2245219b2ee8SDavid du ColombierLocal Motion	\*(TR	\*(NR	Local Motion	\*(TR	\*(NR
2246219b2ee8SDavid du Colombier_
2247219b2ee8SDavid du Colombier.sp.4
2248219b2ee8SDavid du Colombier.TC
2249219b2ee8SDavid du Colombierl2|ls2||l2|ls2.
2250219b2ee8SDavid du Colombier\&\f(CW\*Y\ev'\fIN\|\f(CW'\fR	Move distance @N@	\
2251219b2ee8SDavid du Colombier\&\f(CW\*Y\eh'\fIN\|\f(CW'\fR	Move distance @N@
2252219b2ee8SDavid du Colombier.TC
2253219b2ee8SDavid du Colombier_2|_2_2||l2|ls2.
2254219b2ee8SDavid du Colombierx	x	x	\&\f(CW\*Y\e\fP\f2space\fP	Unpaddable space-size space
2255219b2ee8SDavid du Colombier.TC
2256219b2ee8SDavid du Colombierl2|l2|l2||l2|ls2.
2257219b2ee8SDavid du Colombier\&\f(CW\*Y\eu\fR	½ em up	½ line up	\&\f(CW\*Y\e0\fR	Digit-size space
2258219b2ee8SDavid du Colombier.TC
2259219b2ee8SDavid du Colombierl2|l2|l2||_2|_2_2.
2260219b2ee8SDavid du Colombier\&\f(CW\*Y\ed\fR	½ em down	½ line down	x	x	x
2261219b2ee8SDavid du Colombier.TC
2262219b2ee8SDavid du Colombierl2|l2|l2||l2|l2|l2.
2263219b2ee8SDavid du Colombier\&\f(CW\*Y\er\fR	1 em up	1 line up	\&\f(CW\*Y\e|\fR	1/6 em space	ignored
2264219b2ee8SDavid du Colombier			\&\f(CW\*Y\e^\fR	1/12 em space	ignored
2265219b2ee8SDavid du Colombier.sp.4
2266219b2ee8SDavid du Colombier.TE
2267219b2ee8SDavid du Colombier.KE
2268219b2ee8SDavid du ColombierAs an example,
2269219b2ee8SDavid du Colombier\&\f(CWE\s-2\v'-.4m'2\v'.4m'\s+2\fR
2270219b2ee8SDavid du Colombiercould be generated by a sequence of size changes and motions:
2271219b2ee8SDavid du Colombier\&\f(CWE\es-2\ev'-0.4m'2\ev'0.4m'\es+2\fR;
2272219b2ee8SDavid du Colombiernote that
2273219b2ee8SDavid du Colombierthe 0.4 em vertical motions are at the smaller size.
2274219b2ee8SDavid du Colombier.sc "Width Function.
2275219b2ee8SDavid du ColombierThe \fIwidth\fR function \&\f(CW\ew'\fIstring\&\f(CW'\fR
2276219b2ee8SDavid du Colombiergenerates the numerical width of \fIstring\fR (in basic units).
2277219b2ee8SDavid du ColombierSize and font changes may be embedded in \fIstring\fR,
2278219b2ee8SDavid du Colombierand will not affect the current environment.
2279219b2ee8SDavid du ColombierFor example,
2280219b2ee8SDavid du Colombier\&\&\f(CW.ti\ -\ew'\efB1.\ 'u\fR could be used to
2281219b2ee8SDavid du Colombiertemporarily indent leftward a distance equal to the
2282219b2ee8SDavid du Colombiersize of the string ``\&\f(CW1.\ \fR'' in font
2283219b2ee8SDavid du Colombier.CW B .
2284219b2ee8SDavid du Colombier.PP
2285219b2ee8SDavid du ColombierThe width function also sets three number registers.
2286219b2ee8SDavid du ColombierThe registers \&\f(CWst\fR and \&\f(CWsb\fR are set respectively to the highest and
2287219b2ee8SDavid du Colombierlowest extent of \fIstring\fR relative to the baseline;
2288219b2ee8SDavid du Colombierthen, for example,
2289219b2ee8SDavid du Colombierthe total height of the string is \&\f(CW\en(stu-\en(sbu\fR.
2290219b2ee8SDavid du ColombierIn \*(TR the number register \&\f(CWct\fR is set to a value
2291219b2ee8SDavid du Colombierbetween 0 and 3.
2292219b2ee8SDavid du ColombierThe value
2293219b2ee8SDavid du Colombier0 means that all of the characters in \fIstring\fR were short lower
2294219b2ee8SDavid du Colombiercase characters without descenders (like \&\f(CWe\fR);
2295219b2ee8SDavid du Colombier1 means that at least one character has a descender (like \&\f(CWy\fR);
2296219b2ee8SDavid du Colombier2 means that at least one character is tall (like \&\f(CWH\fR);
2297219b2ee8SDavid du Colombierand 3 means that both tall characters and characters with
2298219b2ee8SDavid du Colombierdescenders are present.
2299219b2ee8SDavid du Colombier.sc "Mark horizontal place.
2300219b2ee8SDavid du ColombierThe function \&\f(CW\ek\fIx\fR causes the current horizontal
2301219b2ee8SDavid du Colombierposition in the \fIinput line\fR to be stored in register \fIx\fR.
2302219b2ee8SDavid du ColombierFor example,
2303219b2ee8SDavid du Colombierthe construction \&\f(CW\ekx\fIword\f(CW\eh'|\enxu+3u'\fIword\&\f(CW\fR
2304219b2ee8SDavid du Colombierwill embolden \fIword\fR by backing up to almost its beginning and overprinting it,
2305219b2ee8SDavid du Colombierresulting in \kz\fIword\fR\h'|\nzu+3u'\fIword\fR.
2306219b2ee8SDavid du Colombier.NH
2307219b2ee8SDavid du ColombierOverstrike, Bracket, Line-drawing, Graphics, and Zero-width Functions
2308219b2ee8SDavid du Colombier.sc "Overstriking.
2309219b2ee8SDavid du ColombierAutomatically centered overstriking of up to nine characters
2310219b2ee8SDavid du Colombieris provided by the \fIoverstrike\fR function
2311219b2ee8SDavid du Colombier\&\f(CW\eo'\fIstring\&\f(CW\|'\fR.
2312219b2ee8SDavid du ColombierThe characters in \fIstring\fR are overprinted with centers aligned; the total width
2313219b2ee8SDavid du Colombieris that of the widest character.
2314219b2ee8SDavid du Colombier\fIstring\fR may not contain local vertical motion.
2315219b2ee8SDavid du ColombierAs examples,
2316219b2ee8SDavid du Colombier\&\f(CW\eo'e\e''\fR produces \o'e\'', and
2317219b2ee8SDavid du Colombier\&\f(CW\eo'\e(mo\e(sl'\fR produces \o'\(mo\(sl'.
2318219b2ee8SDavid du Colombier.sc "Zero-width characters.
2319219b2ee8SDavid du ColombierThe function
2320219b2ee8SDavid du Colombier.CW \ez@c@
2321219b2ee8SDavid du Colombierwill output @c@ without spacing over
2322219b2ee8SDavid du Colombierit, and can be used to produce left-aligned overstruck
2323219b2ee8SDavid du Colombiercombinations.
2324219b2ee8SDavid du ColombierAs examples,
2325219b2ee8SDavid du Colombier\&\f(CW\ez□+\fR will produce \z□+, and
2326219b2ee8SDavid du Colombier\&\f(CW\e(br\ez\e(rn\e(ul\e(br\fR will produce a small
2327219b2ee8SDavid du Colombierbadly constructed box \&\(br\z\(rn\(ul\(br\|.
2328219b2ee8SDavid du Colombier.sc "Large Brackets.
2329219b2ee8SDavid du ColombierThe Special Font usually contains a number of bracket construction pieces
2330219b2ee8SDavid du Colombier\|\|\(lt\|\|\(lb\|\|\(rt\|\|\(rb\|\|\(lk\|\|\(rk\|\|\(bv\|\|\(lf\|\|\(rf\|\|\(lc\|\|\(rc\|\|
2331219b2ee8SDavid du Colombierthat can be combined into various bracket styles.
2332219b2ee8SDavid du ColombierThe function \&\f(CW\eb'\fIstring\&\f(CW\|'\fR may be used to pile
2333219b2ee8SDavid du Colombierup vertically the characters in \fIstring\fR
2334219b2ee8SDavid du Colombier(the first character on top and the last at the bottom);
2335219b2ee8SDavid du Colombierthe characters are vertically separated by 1 em and the total
2336219b2ee8SDavid du Colombierpile is centered 1/2 em above the current baseline
2337219b2ee8SDavid du Colombier(½ line in \*(NR).
2338219b2ee8SDavid du ColombierFor example,
2339219b2ee8SDavid du Colombier.P1
2340219b2ee8SDavid du Colombier\eb'\e(lc\e(lf'E\eb'\e(rc\e(rf'\ex'-0.5m'\ex'0.5m'
2341219b2ee8SDavid du Colombier.P2
2342219b2ee8SDavid du Colombierproduces
2343219b2ee8SDavid du Colombier\x'-.5m'\x'.5m'\b'\(lc\(lf'E\b'\(rc\(rf'.
2344219b2ee8SDavid du Colombier.sc "Line drawing.
2345219b2ee8SDavid du Colombier.tr &&
2346219b2ee8SDavid du ColombierThe function \&\f(CW\el'\fINc\f(CW'\fR (backslash-ell) draws a string of repeated @c@'s towards the right for a distance @N@.
2347219b2ee8SDavid du ColombierIf @c@ looks like a continuation of
2348219b2ee8SDavid du Colombieran expression for @N@, it may be insulated from @N@ with \&\f(CW\e&\fR.
2349219b2ee8SDavid du ColombierIf @c@ is not specified, the \&\f(CW\(ru\fR (baseline rule) is used
2350219b2ee8SDavid du Colombier(underline character in \*(NR).
2351219b2ee8SDavid du ColombierIf @N@ is negative, a backward horizontal motion
2352219b2ee8SDavid du Colombierof size @N@ is made before drawing the string.
2353219b2ee8SDavid du ColombierAny space resulting from @N@/(size of @c@) having a remainder is put at the beginning (left end)
2354219b2ee8SDavid du Colombierof the string.
2355219b2ee8SDavid du ColombierIf @N@ is less than the width of @c@,
2356219b2ee8SDavid du Colombiera single @c@ is centered on a distance @N@.
2357219b2ee8SDavid du ColombierIn the case of characters
2358219b2ee8SDavid du Colombierthat are designed to be connected, such as
2359219b2ee8SDavid du Colombierbaseline-rule\ \&\f(CW\(ru\fR\|,
2360219b2ee8SDavid du Colombierunder-rule\ \&\f(CW\(ul\fR\|,
2361219b2ee8SDavid du Colombierand
2362219b2ee8SDavid du Colombierroot-en\ \&\f(CW\(rn\fR\|,
2363219b2ee8SDavid du Colombierthe remainder space is covered by overlapping.
2364219b2ee8SDavid du ColombierAs an example, a macro to underscore a string can be written
2365219b2ee8SDavid du Colombier.tr &.
2366219b2ee8SDavid du Colombier.P1
2367219b2ee8SDavid du Colombier.ne 2.1
2368219b2ee8SDavid du Colombier&de us
2369219b2ee8SDavid du Colombier\e\e$1\e\|l\|'|0\e(ul'
2370219b2ee8SDavid du Colombier&&
2371219b2ee8SDavid du Colombier.P2
2372219b2ee8SDavid du Colombier.ne2.1
2373219b2ee8SDavid du Colombier.de xu
2374219b2ee8SDavid du Colombier\\$1\l'|0\(ul'
2375219b2ee8SDavid du Colombier..
2376219b2ee8SDavid du Colombieror one to draw a box around a string
2377219b2ee8SDavid du Colombier.P1
2378219b2ee8SDavid du Colombier&de bx
2379219b2ee8SDavid du Colombier\e(br\e|\e\e$1\e|\e(br\e\|l\|'|0\e(rn'\e\|l\|'|0\e(ul'
2380219b2ee8SDavid du Colombier&&
2381219b2ee8SDavid du Colombier.P2
2382219b2ee8SDavid du Colombier.de bx
2383219b2ee8SDavid du Colombier\(br\|\\$1\|\(br\l'|0\(rn'\l'|0\(ul'
2384219b2ee8SDavid du Colombier..
2385219b2ee8SDavid du Colombiersuch that
2386219b2ee8SDavid du Colombier.P1
2387219b2ee8SDavid du Colombier&ul "underlined words"
2388219b2ee8SDavid du Colombier.P2
2389219b2ee8SDavid du Colombierand
2390219b2ee8SDavid du Colombier.P1
2391219b2ee8SDavid du Colombier&bx "words in a box"
2392219b2ee8SDavid du Colombier.P2
2393219b2ee8SDavid du Colombieryield
2394219b2ee8SDavid du Colombier.xu "underlined words"
2395219b2ee8SDavid du Colombierand
2396219b2ee8SDavid du Colombier.bx "words in a box"
2397219b2ee8SDavid du Colombier\h'-\w'.'u'.
2398219b2ee8SDavid du Colombier.PP
2399219b2ee8SDavid du ColombierThe function \&\f(CW\eL'\fINc\&\f(CW'\fR draws a vertical line consisting
2400219b2ee8SDavid du Colombierof the (optional) character @c@ stacked vertically apart 1\|em
2401219b2ee8SDavid du Colombier(1 line in \*(NR),
2402219b2ee8SDavid du Colombierwith the first two characters overlapped,
2403219b2ee8SDavid du Colombierif necessary, to form a continuous line.
2404219b2ee8SDavid du ColombierThe default character is the \fIbox rule\fR \|\(br\| (\&\f(CW\|\e(br\fR);
2405219b2ee8SDavid du Colombierthe other suitable character is the \fIbold vertical\fR \|\(bv\| (\&\f(CW\|\e(bv\fR).
2406219b2ee8SDavid du ColombierThe line is begun without any initial motion relative to the
2407219b2ee8SDavid du Colombiercurrent baseline.
2408219b2ee8SDavid du ColombierA positive @N@ specifies a line drawn downward and
2409219b2ee8SDavid du Colombiera negative @N@ specifies a line drawn upward.
2410219b2ee8SDavid du ColombierAfter the line is drawn no compensating
2411219b2ee8SDavid du Colombiermotions are made;
2412219b2ee8SDavid du Colombierthe instantaneous baseline is at the end of the line.
2413219b2ee8SDavid du Colombier.PP
2414219b2ee8SDavid du Colombier.de eb
2415219b2ee8SDavid du Colombier.sp -1
2416219b2ee8SDavid du Colombier.nf
2417219b2ee8SDavid du Colombier\h'-.5n'\L'|\\nzu-1'\l'\\n(.lu+1n\(ul'\L'-|\\nzu+1'\l'|0u-.5n\(ul'
2418219b2ee8SDavid du Colombier.fi
2419219b2ee8SDavid du Colombier..
2420219b2ee8SDavid du Colombier.ne 2i
2421219b2ee8SDavid du Colombier.mk z
2422219b2ee8SDavid du Colombier.nr z \nz+1
2423219b2ee8SDavid du ColombierThe horizontal and vertical line drawing functions may be used
2424219b2ee8SDavid du Colombierin combination to produce large boxes.
2425219b2ee8SDavid du ColombierThe zero-width \fIbox-rule\fR and the ½-em wide \fIunder-rule\fR
2426219b2ee8SDavid du Colombierwere designed to form corners when using 1-em vertical
2427219b2ee8SDavid du Colombierspacings.
2428219b2ee8SDavid du ColombierFor example the macro
2429219b2ee8SDavid du Colombier.nr x \n(DV
2430219b2ee8SDavid du Colombier.nr DV 0
2431219b2ee8SDavid du Colombier.P1 .15i
2432219b2ee8SDavid du Colombier.ps -1
2433219b2ee8SDavid du Colombier\&.de eb
2434219b2ee8SDavid du Colombier\&.sp -1	\e"compensate for next automatic baseline spacing
2435219b2ee8SDavid du Colombier\&.nf	\e"avoid possibly overflowing word buffer
2436219b2ee8SDavid du Colombier\&\eh'-.5n'\eL'|\e\enau-1'\el'\e\en(.lu+1n\e(ul'\eL'-|\e\enau+1'\el'|0u-.5n\e(ul'
2437219b2ee8SDavid du Colombier\&.fi
2438219b2ee8SDavid du Colombier\&..
2439219b2ee8SDavid du Colombier.ps +1
2440219b2ee8SDavid du Colombier.P2
2441219b2ee8SDavid du Colombier.nr DV \nx
2442219b2ee8SDavid du Colombierwill draw a box around some text whose beginning vertical place was
2443219b2ee8SDavid du Colombiersaved in number register \fIa\fR
2444219b2ee8SDavid du Colombier(e.g., using \&\f(CW.mk\ a\fR)
2445219b2ee8SDavid du Colombieras was done for this paragraph.
2446219b2ee8SDavid du Colombier.eb
2447219b2ee8SDavid du Colombier.sc "Graphics.
2448219b2ee8SDavid du ColombierThe function
2449219b2ee8SDavid du Colombier.CW \eD'@c...@'
2450219b2ee8SDavid du Colombierdraws a graphic object of type @c@
2451219b2ee8SDavid du Colombieraccording to a sequence of parameters,
2452219b2ee8SDavid du Colombierwhich are generally pairs of numbers.
2453219b2ee8SDavid du Colombier.IP
2454219b2ee8SDavid du Colombier.nf
2455219b2ee8SDavid du Colombier.ta 1.7i
2456219b2ee8SDavid du Colombier\f(CW\eD'l @dh~ dv@'	\f1draw line from current position by @dh,~dv@\f(CW
2457219b2ee8SDavid du Colombier\f(CW\eD'c @d@'	\f1draw circle of diameter @d@ with left side at current position\f(CW
2458219b2ee8SDavid du Colombier\f(CW\eD'e @d sub 1 d sub 2@'	\f1draw ellipse of diameters @d sub 1@ and @d sub 2@\f(CW
2459219b2ee8SDavid du Colombier\f(CW\eD'a @dh sub 1~ dv sub 1~ dh sub 2~ dv sub 2@'\f(CW	\f1draw arc from current position to @dh sub 1 +dh sub 2@, @dv sub 1 +dv sub 2@,\f(CW
2460219b2ee8SDavid du Colombier	   \f1with center at @dh sub 1 ,~ dv sub 1@ from current position\f(CW
2461219b2ee8SDavid du Colombier\f(CW\eD'~ @dh sub 1 dv sub 1 dh sub 2 dv sub 2 "..."@'\f(CW	\f1draw B-spline from current position by @dh sub 1, dv sub 1@,\f(CW
2462219b2ee8SDavid du Colombier	   \f1then by @dh sub 2 , dv sub 2@, then by @dh sub 2 , dv sub 2@, then ...\f(CW
2463219b2ee8SDavid du Colombier.LP
2464219b2ee8SDavid du ColombierFor example,
2465219b2ee8SDavid du Colombier.CW "\eD'e0.2i 0.1i'"
2466219b2ee8SDavid du Colombierdraws the ellipse
2467219b2ee8SDavid du Colombier\D'e.2i .1i'\|,
2468219b2ee8SDavid du Colombierand
2469219b2ee8SDavid du Colombier.CW "\eD'l.2i -.1i'\eD'l.1i .1i'"
2470219b2ee8SDavid du Colombierthe line
2471219b2ee8SDavid du Colombier\D'l.2i -.1i'\D'l.1i .1i'\|.
2472219b2ee8SDavid du ColombierA
2473219b2ee8SDavid du Colombier.CW \\eD
2474219b2ee8SDavid du Colombierwith an unknown @c@ is processed and copied through to the output
2475219b2ee8SDavid du Colombierfor unspecified interpretation;
2476219b2ee8SDavid du Colombiercoordinates are interpreted alternately as horizontal and vertical
2477219b2ee8SDavid du Colombiervalues.
2478219b2ee8SDavid du Colombier.PP
2479219b2ee8SDavid du ColombierNumbers taken as horizontal (first, third, etc.) have default scaling of ems;
2480219b2ee8SDavid du Colombiervertical numbers (second, fourth, etc.) have default scaling of @V^@s (§1.3).
2481219b2ee8SDavid du ColombierThe position after a graphical object has been drawn is
2482219b2ee8SDavid du Colombierat its end; for circles and ellipses, the ``end''
2483219b2ee8SDavid du Colombieris at the right side.
2484219b2ee8SDavid du Colombier.NH
2485219b2ee8SDavid du ColombierHyphenation.
2486219b2ee8SDavid du Colombier.PP
2487219b2ee8SDavid du ColombierAutomatic hyphenation may be switched off and on.
2488219b2ee8SDavid du ColombierWhen switched on with \&\f(CWhy\fR,
2489219b2ee8SDavid du Colombierseveral variants may be set.
2490219b2ee8SDavid du ColombierA \fIhyphenation indicator\fR character may be embedded in a word to
2491219b2ee8SDavid du Colombierspecify desired hyphenation points,
2492219b2ee8SDavid du Colombieror may be prefixed to suppress hyphenation.
2493219b2ee8SDavid du ColombierIn addition,
2494219b2ee8SDavid du Colombierthe user may specify a small list of exception words.
2495219b2ee8SDavid du Colombier.PP
2496219b2ee8SDavid du ColombierOnly words that consist of a central alphabetic string
2497219b2ee8SDavid du Colombiersurrounded by (usually null) non-alphabetic strings
2498219b2ee8SDavid du Colombierare candidates for automatic hyphenation.
2499219b2ee8SDavid du ColombierWords that contain hyphens
2500219b2ee8SDavid du Colombier(minus),
2501219b2ee8SDavid du Colombierem-dashes (\&\f(CW\e(em\fR),
2502219b2ee8SDavid du Colombieror hyphenation indicator characters
2503219b2ee8SDavid du Colombierare always subject to splitting after those characters,
2504219b2ee8SDavid du Colombierwhether automatic hyphenation is on or off.
2505219b2ee8SDavid du Colombier.bt "\&\f(CW&nh\fR" "hyphenate" "-" "E" "Automatic hyphenation is turned off.
2506219b2ee8SDavid du Colombier.bt "\&\f(CW&hy\fP@~N@" "on, @N=1@" "on, @N=1@" "E" "Automatic hyphenation is turned on
2507219b2ee8SDavid du Colombierfor @N >= 1@, or off for @N=0@.
2508219b2ee8SDavid du ColombierIf @N=2@, last lines (ones that will cause a trap)
2509219b2ee8SDavid du Colombierare not hyphenated.
2510219b2ee8SDavid du ColombierFor @N=4@ and 8, the last and first two characters
2511219b2ee8SDavid du Colombierrespectively of a word are not split off.
2512219b2ee8SDavid du ColombierThese values are additive;
2513219b2ee8SDavid du Colombieri.e., @N=14@ will invoke all three restrictions.
2514219b2ee8SDavid du Colombier.bt "\&\f(CW&hc\fI c\fR" "\&\f(CW\e%" "\e%\fR" "E" "Hyphenation indicator character is set
2515219b2ee8SDavid du Colombierto @c@ or to the default \&\f(CW\e%\fR.
2516219b2ee8SDavid du ColombierThe indicator does not appear in the output.
2517219b2ee8SDavid du Colombier.bt "\&\f(CW&hw\fI word ...\fR" "" "ignored" "-" "Specify
2518219b2ee8SDavid du Colombierhyphenation points in words
2519219b2ee8SDavid du Colombierwith embedded minus signs.
2520219b2ee8SDavid du ColombierVersions of a word with terminal \fIs\fR are implied;
2521219b2ee8SDavid du Colombieri.e.,
2522219b2ee8SDavid du Colombier.CW dig-it
2523219b2ee8SDavid du Colombierimplies
2524219b2ee8SDavid du Colombier.CW dig-its .
2525219b2ee8SDavid du ColombierThis list is examined initially and after
2526219b2ee8SDavid du Colombiereach suffix stripping.
2527219b2ee8SDavid du ColombierThe space available is small.
2528219b2ee8SDavid du Colombier.NH
2529219b2ee8SDavid du ColombierThree-Part Titles.
2530219b2ee8SDavid du Colombier.PP
2531219b2ee8SDavid du ColombierThe titling function \&\f(CWtl\fR provides for automatic placement
2532219b2ee8SDavid du Colombierof three fields at the left, center, and right of a line
2533219b2ee8SDavid du Colombierwith a title length
2534219b2ee8SDavid du Colombierspecifiable with \&\f(CWlt\fR.
2535219b2ee8SDavid du Colombier\&\f(CWtl\fR may be used anywhere, and is independent of the
2536219b2ee8SDavid du Colombiernormal text collecting process.
2537219b2ee8SDavid du ColombierA common use is in header and footer macros.
2538219b2ee8SDavid du Colombier.h1
2539219b2ee8SDavid du Colombier.bt "\&\f(CW&tl '\fIleft\fP'\fIcenter\fP'\fIright\fP'\fR" "-" "-" "" "The strings
2540219b2ee8SDavid du Colombier\fIleft\fR, \fIcenter\fR, and \fIright\fR are
2541219b2ee8SDavid du Colombierrespectively left-adjusted, centered, and right-adjusted
2542219b2ee8SDavid du Colombierin the current title length.
2543219b2ee8SDavid du ColombierAny of the strings may be empty,
2544219b2ee8SDavid du Colombierand overlapping is permitted.
2545219b2ee8SDavid du ColombierIf the page-number character (initially \&\f(CW%\fR) is found within any of the fields it is replaced
2546219b2ee8SDavid du Colombierby the current page number in the format assigned to register \&\f(CW%\fR.
2547219b2ee8SDavid du ColombierAny character may be used in place of
2548219b2ee8SDavid du Colombier.CW '
2549219b2ee8SDavid du Colombieras the string delimiter.
2550219b2ee8SDavid du Colombier.bt "\&\f(CW&pc\fI c\fR" "\&\f(CW%\fR" "off" "-" "The page number character is set to @c@,
2551219b2ee8SDavid du Colombieror removed.
2552219b2ee8SDavid du ColombierThe page number register remains \&\f(CW%\fR.
2553219b2ee8SDavid du Colombier.bt "\&\f(CW&lt\fI \(+-N\fR" "6.5\|in" "previous" "E,\fBm\fR" "Length of title
2554219b2ee8SDavid du Colombieris set to @+- N@.
2555219b2ee8SDavid du ColombierThe line length and the title length are independent.
2556219b2ee8SDavid du ColombierIndents do not apply to titles; page offsets do.
2557219b2ee8SDavid du Colombier.NH
2558219b2ee8SDavid du ColombierOutput Line Numbering.
2559219b2ee8SDavid du Colombier.PP
2560219b2ee8SDavid du Colombier.ll -\w'0000'u
2561219b2ee8SDavid du Colombier.nm 1 3
2562219b2ee8SDavid du ColombierAutomatic sequence numbering of output lines may be
2563219b2ee8SDavid du Colombierrequested with \&\f(CWnm\fR.
2564219b2ee8SDavid du ColombierWhen in effect,
2565219b2ee8SDavid du Colombiera three-digit, arabic number plus a digit-space
2566219b2ee8SDavid du Colombieris prefixed to output text lines.
2567219b2ee8SDavid du ColombierThe text lines are thus offset by four digit-spaces,
2568219b2ee8SDavid du Colombierand otherwise retain their line length;
2569219b2ee8SDavid du Colombiera reduction in line length may be desired to keep the right margin
2570219b2ee8SDavid du Colombieraligned with an earlier margin.
2571219b2ee8SDavid du ColombierBlank lines, other vertical spaces, and lines generated by \&\f(CWtl\fR
2572219b2ee8SDavid du Colombierare not numbered.
2573219b2ee8SDavid du ColombierNumbering can be temporarily suspended with \&\f(CWnn\fR,
2574219b2ee8SDavid du Colombieror with an \&\f(CW.nm\fR followed by a later \&\f(CW.nm +0\fR.
2575219b2ee8SDavid du ColombierIn addition,
2576219b2ee8SDavid du Colombiera line number indent \fII\fR, and the number-text separation \fIS\fR
2577219b2ee8SDavid du Colombiermay be specified in digit-spaces.
2578219b2ee8SDavid du ColombierFurther, it can be specified that only those line numbers that are
2579219b2ee8SDavid du Colombiermultiples of some number @M@ are to be printed (the others will appear
2580219b2ee8SDavid du Colombieras blank number fields).
2581219b2ee8SDavid du Colombier.br
2582219b2ee8SDavid du Colombier.nm
2583219b2ee8SDavid du Colombier.ll
2584219b2ee8SDavid du Colombier.bt "\&\f(CW&nm\fI \(+-N M S I\fR" "" "off" "E" "Line number mode.
2585219b2ee8SDavid du ColombierIf @+- N@ is given,
2586219b2ee8SDavid du Colombierline numbering is turned on,
2587219b2ee8SDavid du Colombierand the next output line numbered is numbered @+- N@.
2588219b2ee8SDavid du ColombierDefault values are @M=1@, @S=1@, and @I=0@.
2589219b2ee8SDavid du ColombierParameters corresponding to missing arguments are unaffected;
2590219b2ee8SDavid du Colombiera non-numeric argument is considered missing.
2591219b2ee8SDavid du ColombierIn the absence of all arguments, numbering is turned off;
2592219b2ee8SDavid du Colombierthe next line number is preserved for possible further use
2593219b2ee8SDavid du Colombierin number register \&\f(CWln\fR.
2594219b2ee8SDavid du Colombier.bt "\&\f(CW&nn\fI N\fR" "-" "@N=1@" "E" "The next @N@ text output lines are not
2595219b2ee8SDavid du Colombiernumbered.
2596219b2ee8SDavid du Colombier.PP
2597219b2ee8SDavid du Colombier.ll -\w'0000'u
2598219b2ee8SDavid du Colombier.nm +0
2599219b2ee8SDavid du ColombierAs an example, the paragraph portions of this section
2600219b2ee8SDavid du Colombierare numbered with \fIM=\fR\|3:
2601219b2ee8SDavid du Colombier\&\&\f(CW.nm\ 1\ 3\fR was placed at the beginning;
2602219b2ee8SDavid du Colombier\&\&\f(CW.nm\fR was placed at the end of the first paragraph;
2603219b2ee8SDavid du Colombierand \&\f(CW.nm\ +0\fR was placed in front of this paragraph;
2604219b2ee8SDavid du Colombierand \&\f(CW.nm\fR finally placed at the end.
2605219b2ee8SDavid du ColombierLine lengths were also changed (by \&\f(CW\ew'0000'u\fR) to keep the right side aligned.
2606219b2ee8SDavid du ColombierAnother example is
2607219b2ee8SDavid du Colombier.CW .nm
2608219b2ee8SDavid du Colombier.CW +5
2609219b2ee8SDavid du Colombier.CW 5
2610219b2ee8SDavid du Colombier.CW x
2611219b2ee8SDavid du Colombier.CW 3 ,
2612219b2ee8SDavid du Colombierwhich turns on numbering with the line number of the next
2613219b2ee8SDavid du Colombierline to be 5 greater than the last numbered line,
2614219b2ee8SDavid du Colombierwith @M=5@, with spacing \fIS\fR untouched, and with the indent \fII\fR set to 3.
2615219b2ee8SDavid du Colombier.br
2616219b2ee8SDavid du Colombier.ll
2617219b2ee8SDavid du Colombier.nm
2618219b2ee8SDavid du Colombier.NH
2619219b2ee8SDavid du ColombierConditional Acceptance of Input
2620219b2ee8SDavid du Colombier.PP
2621219b2ee8SDavid du ColombierIn the following,
2622219b2ee8SDavid du Colombier@c@ is a one-character built-in \fIcondition\fR name,
2623219b2ee8SDavid du Colombier\&\f(CW!\fR signifies \fInot\fR,
2624219b2ee8SDavid du Colombier@N@ is a numerical expression,
2625219b2ee8SDavid du Colombier\fIstring1\fR and \fIstring2\fR are strings delimited by any non-blank, non-numeric character not in the strings,
2626219b2ee8SDavid du Colombierand
2627219b2ee8SDavid du Colombier\fIanything\fR represents what is conditionally accepted.
2628219b2ee8SDavid du Colombier.bt "\&\f(CW&if\fI c anything\fR" "-" "-" "" "If condition
2629219b2ee8SDavid du Colombier@c@ true, accept \fIanything\fR as input;
2630219b2ee8SDavid du Colombierin multi-line case use \e{\fIanything\|\fR\e}.
2631219b2ee8SDavid du Colombier.bt "\&\f(CW&if !\fIc anything\fR" "-" "-" "" "If condition @c@ false, accept \fIanything\fR.
2632219b2ee8SDavid du Colombier.bt "\&\f(CW&if\fI N anything\fR" "" "-" "\fBu\fR" "If expression @N@ > 0, accept \fIanything\fR.
2633219b2ee8SDavid du Colombier.bt "\&\f(CW&if !\fIN anything\fR" "" "-" "\fBu\fR" "If expression @N@ ≤ 0 [sic], accept \fIanything\fR.
2634219b2ee8SDavid du Colombier.bt "\&\f(CW&if '\fIstring1\f(CW'\fIstring2\f(CW'\fI anything\fR" "-" "" "" "If \fIstring1\fR identical to \fIstring2\fR,
2635219b2ee8SDavid du Colombieraccept \fIanything\fR.
2636219b2ee8SDavid du Colombier.bt "\&\f(CW&if !'\fIstring1\f(CW'\fIstring2\f(CW'\fI anything\fR" "-" "" "" "If \fIstring1\fR not identical to \fIstring2\fR,
2637219b2ee8SDavid du Colombieraccept \fIanything\fR.
2638219b2ee8SDavid du Colombier.bt "\&\f(CW&ie\fI c anything\fR" "" "-" "\fBu\fR" "If portion of if-else;
2639219b2ee8SDavid du Colombierall of the forms for \&\f(CWif\fR above are valid.
2640219b2ee8SDavid du Colombier.bt "\&\f(CW&el\fI anything\fR" "-" "-" "" "Else portion of if-else.
2641219b2ee8SDavid du Colombier.PP
2642219b2ee8SDavid du ColombierThe built-in condition names are:
2643219b2ee8SDavid du Colombier.TS
2644219b2ee8SDavid du Colombiercenter box;
2645219b2ee8SDavid du Colombierc2|c2
2646219b2ee8SDavid du Colombierc2|c2
2647219b2ee8SDavid du Colombierc2|l2.
2648219b2ee8SDavid du ColombierCondition
2649219b2ee8SDavid du ColombierName	True If
2650219b2ee8SDavid du Colombier_
2651219b2ee8SDavid du Colombier\&\f(CWo\fR	Current page number is odd
2652219b2ee8SDavid du Colombier\&\f(CWe\fR	Current page number is even
2653219b2ee8SDavid du Colombier\&\f(CWt\fR	Formatter is \*(TR
2654219b2ee8SDavid du Colombier\&\f(CWn\fR	Formatter is \*(NR
2655219b2ee8SDavid du Colombier.TE
2656219b2ee8SDavid du ColombierIf the condition @c@ is true, or if the number @N@ is greater than zero,
2657219b2ee8SDavid du Colombieror if the strings compare identically (including motions and character size and font),
2658219b2ee8SDavid du Colombier\fIanything\fR is accepted as input.
2659219b2ee8SDavid du ColombierIf a \&\f(CW!\fR precedes the condition, number, or string comparison,
2660219b2ee8SDavid du Colombierthe sense of the acceptance is reversed.
2661219b2ee8SDavid du Colombier.PP
2662219b2ee8SDavid du ColombierAny spaces between the condition and the beginning of \fIanything\fR are skipped over.
2663219b2ee8SDavid du ColombierThe \fIanything\fR can be either a single input line (text, macro, or whatever)
2664219b2ee8SDavid du Colombieror a number of input lines.
2665219b2ee8SDavid du ColombierIn the multi-line case,
2666219b2ee8SDavid du Colombierthe first line must begin with a left delimiter \&\f(CW\e{\fR and
2667219b2ee8SDavid du Colombierthe last line must end with a right delimiter \&\f(CW\e}\fR.
2668219b2ee8SDavid du Colombier.PP
2669219b2ee8SDavid du ColombierThe request \&\f(CWie\fR (if-else) is identical to \&\f(CWif\fR
2670219b2ee8SDavid du Colombierexcept that the acceptance state is remembered.
2671219b2ee8SDavid du ColombierA subsequent and matching \&\f(CWel\fR (else) request then uses the reverse sense of that state.
2672219b2ee8SDavid du Colombier\&\f(CWie\fR-\&\f(CWel\fR pairs may be nested.
2673219b2ee8SDavid du Colombier.PP
2674219b2ee8SDavid du ColombierSome examples are:
2675219b2ee8SDavid du Colombier.P1
2676219b2ee8SDavid du Colombier&if e .tl '\|Even Page %'''
2677219b2ee8SDavid du Colombier.P2
2678219b2ee8SDavid du Colombierwhich outputs a title if the page number is even; and
2679219b2ee8SDavid du Colombier.P1
2680219b2ee8SDavid du Colombier&ie \en%>1 \e{\e
2681219b2ee8SDavid du Colombier\&'	sp 0.5i
2682219b2ee8SDavid du Colombier&	tl 'Page %'''
2683219b2ee8SDavid du Colombier\&'	sp |1.2i \e}
2684219b2ee8SDavid du Colombier&el .sp |2.5i
2685219b2ee8SDavid du Colombier.P2
2686219b2ee8SDavid du Colombierwhich treats page 1 differently from other pages.
2687219b2ee8SDavid du Colombier.NH
2688219b2ee8SDavid du ColombierEnvironment Switching.
2689219b2ee8SDavid du Colombier.PP
2690219b2ee8SDavid du ColombierA number of the parameters that
2691219b2ee8SDavid du Colombiercontrol the text processing are gathered together into an
2692219b2ee8SDavid du Colombier\fIenvironment\fR, which can be switched by the user.
2693219b2ee8SDavid du ColombierThe environment parameters are those associated
2694219b2ee8SDavid du Colombierwith requests noting E in their \fINotes\fR column;
2695219b2ee8SDavid du Colombierin addition, partially collected lines and words are in the environment.
2696219b2ee8SDavid du ColombierEverything else is global; examples are page-oriented parameters,
2697219b2ee8SDavid du Colombierdiversion-oriented parameters, number registers, and macro and string definitions.
2698219b2ee8SDavid du ColombierAll environments are initialized with default parameter values.
2699219b2ee8SDavid du Colombier.bt "\&\f(CW&ev\fI N\fR" "@N=0@" "previous" "-" "Environment switched to
2700219b2ee8SDavid du Colombierenvironment @0 <= N <= 2@.
2701219b2ee8SDavid du ColombierSwitching is done in push-down fashion so that
2702219b2ee8SDavid du Colombierrestoring a previous environment \fImust\fR be done with \&\f(CW.ev\fR
2703219b2ee8SDavid du Colombierrather than specific reference.
2704219b2ee8SDavid du ColombierNote that what is pushed down and restored is the environment
2705219b2ee8SDavid du Colombier.I number,
2706219b2ee8SDavid du Colombiernot its contents.
2707219b2ee8SDavid du Colombier.NH
2708219b2ee8SDavid du ColombierInsertions from the Standard Input
2709219b2ee8SDavid du Colombier.PP
2710219b2ee8SDavid du ColombierThe input can be temporarily switched to the system standard input
2711219b2ee8SDavid du Colombierwith \&\f(CWrd\fR,
2712219b2ee8SDavid du Colombierwhich will switch back when two consecutive newlines
2713219b2ee8SDavid du Colombierare found (the extra blank line is not used).
2714219b2ee8SDavid du ColombierThis mechanism is intended for insertions in form-letter-like documentation.
2715219b2ee8SDavid du ColombierThe standard input can be the user's keyboard,
2716219b2ee8SDavid du Colombiera pipe, or a file.
2717219b2ee8SDavid du Colombier.bt "\&\f(CW&rd\fI prompt\fR" "-" "\fIprompt=\fR\s-1BEL\s+1" "-" "Read insertion
2718219b2ee8SDavid du Colombierfrom the standard input until two newlines in a row are found.
2719219b2ee8SDavid du ColombierIf the standard input is the user's keyboard, \fIprompt\fR (or a \s-1BEL\s+1)
2720219b2ee8SDavid du Colombieris written onto the standard output.
2721219b2ee8SDavid du Colombier\&\f(CWrd\fR behaves like a macro,
2722219b2ee8SDavid du Colombierand arguments may be placed after \fIprompt\fR.
2723219b2ee8SDavid du Colombier.bt "\&\f(CW&ex\fR" "-" "-" "-" "Exit from \*(NR/\*(TR.
2724219b2ee8SDavid du ColombierText processing is terminated exactly as if all input had ended.
2725219b2ee8SDavid du Colombier.PP
2726219b2ee8SDavid du ColombierIf insertions are to be
2727219b2ee8SDavid du Colombiertaken from the terminal keyboard while output is being printed
2728219b2ee8SDavid du Colombieron the terminal, the command line option \&\f(CW-q\fR will turn off the echoing
2729219b2ee8SDavid du Colombierof keyboard input and prompt only with \s-1BEL\s+1.
2730219b2ee8SDavid du ColombierThe regular input and insertion input cannot
2731219b2ee8SDavid du Colombiersimultaneously come from the standard input.
2732219b2ee8SDavid du Colombier.PP
2733219b2ee8SDavid du ColombierAs an example,
2734219b2ee8SDavid du Colombiermultiple copies of a form letter may be prepared by entering the insertions
2735219b2ee8SDavid du Colombierfor all the copies in one file to be used as the standard input,
2736219b2ee8SDavid du Colombierand causing the file containing the letter to reinvoke itself with \&\f(CWnx\fR (§19);
2737219b2ee8SDavid du Colombierthe process would ultimately be ended by an \&\f(CWex\fR in the insertion file.
2738219b2ee8SDavid du Colombier.NH
2739219b2ee8SDavid du ColombierInput/Output File Switching
2740219b2ee8SDavid du Colombier.bt "\&\f(CW&so\fI filename\fR" "" "-" "-" "Switch source file.
2741219b2ee8SDavid du ColombierThe top input (file reading) level is switched to \fIfilename\fR.
2742219b2ee8SDavid du ColombierWhen the new file ends,
2743219b2ee8SDavid du Colombierinput is again taken from the original file.
2744219b2ee8SDavid du Colombier\&\f(CWso\fR's may be nested.
2745219b2ee8SDavid du Colombier.bt "\&\f(CW&nx\fI filename\fR" "" "end-of-file" "-" "Next file is \fIfilename\fR.
2746219b2ee8SDavid du ColombierThe current file is considered ended, and the input is immediately switched
2747219b2ee8SDavid du Colombierto \fIfilename\fR.
2748219b2ee8SDavid du Colombier.bt "\&\f(CW&sy\fI string\fR" "" "-" "-" "Execute program from \fIstring\fR,
2749219b2ee8SDavid du Colombierwhich is the rest of the input line.
2750219b2ee8SDavid du ColombierThe output is not collected automatically.
2751219b2ee8SDavid du ColombierThe number register
2752219b2ee8SDavid du Colombier.CW $$ ,
2753219b2ee8SDavid du Colombierwhich contains the process id of the \*(TR process,
2754219b2ee8SDavid du Colombiermay be useful in generating unique filenames for output.
2755219b2ee8SDavid du Colombier.bt "\&\f(CW&pi\fI string\fR" "" "-" "-" "Pipe output to \fIstring\fR,
2756219b2ee8SDavid du Colombierwhich is the rest of the input line.
2757219b2ee8SDavid du ColombierThis request must occur before any printing occurs;
2758219b2ee8SDavid du Colombiertypically it is the first line of input.
2759219b2ee8SDavid du Colombier.bt "\&\f(CW&cf\fI filename\fR" "" "-" "-" "Copy
2760219b2ee8SDavid du Colombiercontents of file
2761219b2ee8SDavid du Colombier.I filename
2762219b2ee8SDavid du Colombierto output, completely unprocessed.
2763219b2ee8SDavid du ColombierThe file is assumed to contain something meaningful
2764219b2ee8SDavid du Colombierto subsequent processes.
2765219b2ee8SDavid du Colombier.NH
2766219b2ee8SDavid du ColombierMiscellaneous
2767219b2ee8SDavid du Colombier.br
2768219b2ee8SDavid du Colombier.mc \s12\(br\s0
2769219b2ee8SDavid du Colombier.bt "\&\f(CW.mc\fI c N\fR" - off E,\fBm\fR "Specifies
2770219b2ee8SDavid du Colombierthat a \fImargin\fR character @c@ appear a distance
2771219b2ee8SDavid du Colombier@N@ to the right of the right margin
2772219b2ee8SDavid du Colombierafter each non-empty text line (except those produced by \&\f(CWtl\fR).
2773219b2ee8SDavid du ColombierIf the output line is too long (as can happen in nofill mode)
2774219b2ee8SDavid du Colombierthe character will be appended to the line.
2775219b2ee8SDavid du ColombierIf @N@ is not given, the previous @N@ is used; the initial @N@ is
2776219b2ee8SDavid du Colombier0.2 inches in \*(NR and 1 em in \*(TR.
2777219b2ee8SDavid du ColombierThe margin character used with this paragraph was a 12-point box-rule.
2778219b2ee8SDavid du Colombier.br
2779219b2ee8SDavid du Colombier.mc
2780219b2ee8SDavid du Colombier.bt "\&\f(CW.tm\fI string\fR" "-" "newline" "-" "After skipping initial blanks,
2781219b2ee8SDavid du Colombier\fIstring\fR (rest of the line) is read in copy mode
2782219b2ee8SDavid du Colombierand written on the standard error.
2783219b2ee8SDavid du Colombier.bt "\&\f(CW&ab\fI string\fR" "-" "newline" "-" "After skipping initial blanks,
2784219b2ee8SDavid du Colombier\fIstring\fR (rest of the line) is read in copy mode
2785219b2ee8SDavid du Colombierand written on the standard error.
2786219b2ee8SDavid du Colombier\*(Tr or \*(NR then exit.
2787219b2ee8SDavid du Colombier.bt "\&\f(CW.ig\fI yy\fR" "-" "\fI.yy=\&\f(CW..\fR" "-" "Ignore
2788219b2ee8SDavid du Colombierinput lines.
2789219b2ee8SDavid du Colombier\&\f(CWig\fR behaves exactly like \&\f(CWde\fR (§7) except that the
2790219b2ee8SDavid du Colombierinput is discarded.
2791219b2ee8SDavid du ColombierThe input is read in copy mode, and any auto-incremented
2792219b2ee8SDavid du Colombierregisters will be affected.
2793219b2ee8SDavid du Colombier.bt "\&\f(CW.lf\fI N filename\fR" "" "-" "-" "Set
2794219b2ee8SDavid du Colombierline number to @N@ and filename to @filename@
2795219b2ee8SDavid du Colombierfor purposes of subsequent error messages, etc.
2796219b2ee8SDavid du ColombierThe number register [sic]
2797219b2ee8SDavid du Colombier.CW .F
2798219b2ee8SDavid du Colombiercontains the name of the current input file,
2799219b2ee8SDavid du Colombieras set by command line argument,
2800219b2ee8SDavid du Colombier.CW so ,
2801219b2ee8SDavid du Colombier.CW nx ,
2802219b2ee8SDavid du Colombieror
2803219b2ee8SDavid du Colombier.CW lf .
2804219b2ee8SDavid du ColombierThe number register
2805219b2ee8SDavid du Colombier.CW .c
2806219b2ee8SDavid du Colombiercontains the number of input lines read from the current file,
2807219b2ee8SDavid du Colombieragain perhaps as modified by
2808219b2ee8SDavid du Colombier.CW lf .
2809219b2ee8SDavid du Colombier.CW
2810219b2ee8SDavid du Colombier.bt "\&\f(CW.pm\fI t\fR" "-" "all" "-" "Print macros.
2811219b2ee8SDavid du ColombierThe names and sizes of all of the defined macros and strings are printed
2812219b2ee8SDavid du Colombieron the standard error;
2813219b2ee8SDavid du Colombierif \fIt\fR is given, only the total of the sizes is printed.
2814219b2ee8SDavid du ColombierThe sizes is given in blocks
2815219b2ee8SDavid du Colombierof 128 characters.
2816219b2ee8SDavid du Colombier.bt "\&\f(CW.fl\fR" - - B "Flush output buffer.
2817219b2ee8SDavid du ColombierForce output, including any pending position information.
2818219b2ee8SDavid du Colombier......
2819219b2ee8SDavid du Colombier.NH
2820219b2ee8SDavid du ColombierOutput and Error Messages.
2821219b2ee8SDavid du Colombier.PP
2822219b2ee8SDavid du ColombierThe output from \&\f(CWtm\fR, \&\f(CWpm\fR, and the prompt from \&\f(CWrd\fR,
2823219b2ee8SDavid du Colombieras well as various error messages, are written onto
2824219b2ee8SDavid du Colombierthe standard error.
2825219b2ee8SDavid du ColombierThe latter is different from the standard output,
2826219b2ee8SDavid du Colombierwhere formatted text goes.
2827219b2ee8SDavid du ColombierBy default, both are written onto the user's terminal,
2828219b2ee8SDavid du Colombierbut they can be independently redirected.
2829219b2ee8SDavid du Colombier.PP
2830219b2ee8SDavid du ColombierVarious error conditions may occur during
2831219b2ee8SDavid du Colombierthe operation of \*(NR and \*(TR.
2832219b2ee8SDavid du ColombierCertain less serious errors having only local impact do not
2833219b2ee8SDavid du Colombiercause processing to terminate.
2834219b2ee8SDavid du ColombierTwo examples are \fIword overflow\fR, caused by a word that is too large
2835219b2ee8SDavid du Colombierto fit into the word buffer (in fill mode), and
2836219b2ee8SDavid du Colombier\fIline overflow\fR, caused by an output line that grew too large
2837219b2ee8SDavid du Colombierto fit in the line buffer.
2838219b2ee8SDavid du ColombierIn both cases, a message is printed, the offending excess
2839219b2ee8SDavid du Colombieris discarded,
2840219b2ee8SDavid du Colombierand the affected word or line is marked at the point of truncation
2841219b2ee8SDavid du Colombierwith a \(** in \*(NR and a \(lh in \*(TR.
2842219b2ee8SDavid du ColombierProcessing continues if possible,
2843219b2ee8SDavid du Colombieron the grounds that output useful for debugging may be produced.
2844219b2ee8SDavid du ColombierIf a serious error occurs, processing terminates,
2845219b2ee8SDavid du Colombierand a message is printed, along with a list of the macro names currently active.
2846219b2ee8SDavid du ColombierExamples of serious errors include the inability to create, read, or write files,
2847219b2ee8SDavid du Colombierand the exceeding of certain internal limits that
2848219b2ee8SDavid du Colombiermake future output unlikely to be useful.
2849219b2ee8SDavid du Colombier.NH
2850219b2ee8SDavid du ColombierOutput Language
2851219b2ee8SDavid du Colombier.PP
2852219b2ee8SDavid du Colombier\*(Tr
2853219b2ee8SDavid du Colombierproduces its output in a language that is independent of any
2854219b2ee8SDavid du Colombierspecific output device,
2855219b2ee8SDavid du Colombierexcept that the numbers in it have been computed on the basis
2856219b2ee8SDavid du Colombierof the resolution of the device,
2857219b2ee8SDavid du Colombierand the sizes, fonts, and characters that that device can print.
2858219b2ee8SDavid du ColombierNevertheless it is quite possible to interpret that output
2859219b2ee8SDavid du Colombieron a different device, within the latter's capabilities.
2860219b2ee8SDavid du Colombier.IP
2861219b2ee8SDavid du Colombier.nf
2862219b2ee8SDavid du Colombier.ta .7i
2863219b2ee8SDavid du Colombier@cw s n@	set point size to @n@
2864219b2ee8SDavid du Colombier@cw f n@	set font to @n@
2865219b2ee8SDavid du Colombier@cw c c@	print character @c@
2866219b2ee8SDavid du Colombier@cw C name@	print the character called @name@; terminate @name@ by white space
2867219b2ee8SDavid du Colombier@cw N n@	print character @n@ on current font
2868219b2ee8SDavid du Colombier@cw H n@	go to absolute horizontal position \f2n\fP (@n >= 0@)
2869219b2ee8SDavid du Colombier@cw V n@	go to absolute vertical position \f2n\fP (@n >= 0@, down is positive)
2870219b2ee8SDavid du Colombier@cw h n@	go \f2n\fP units horizontally; @n < 0@ is to the left
2871219b2ee8SDavid du Colombier@cw v n@	go \f2n\fP units vertically; @n < 0@ is up
2872219b2ee8SDavid du Colombier@nnc@	move right \f2nn\fP, then print \s-1UTF\s0 character \f2c\fP;  \f2nn\fP must be exactly 2 digits
2873219b2ee8SDavid du Colombier@cw p n@	new page \f2n\fP begins\(emset vertical position to 0
2874219b2ee8SDavid du Colombier@cw n b~a@	end of line (information only\(emno action);  \f2b\fP = space before line, \f2a\fP = after
2875219b2ee8SDavid du Colombier@cw w@	paddable word space (information only\(emno action)
2876219b2ee8SDavid du Colombier@cw D c@ ...\en	graphics function @c@; see below
2877219b2ee8SDavid du Colombier@cw x@ ...\en	device control functions; see below
2878219b2ee8SDavid du Colombier@cw "#"@ ...\en	comment
2879219b2ee8SDavid du Colombier.LP
2880219b2ee8SDavid du ColombierAll position values are in units.
2881219b2ee8SDavid du ColombierSequences that end in digits must be followed by a non-digit.
2882219b2ee8SDavid du ColombierBlanks, tabs and newlines may occur as separators
2883219b2ee8SDavid du Colombierin the input, and are mandatory to separate constructions
2884219b2ee8SDavid du Colombierthat would otherwise be confused.
2885219b2ee8SDavid du ColombierGraphics functions, device control functions, and comments extend to the
2886219b2ee8SDavid du Colombierend of the line they occur on.
2887219b2ee8SDavid du Colombier.PP
2888219b2ee8SDavid du ColombierThe device control and graphics commands are intended as open-ended
2889219b2ee8SDavid du Colombierfamilies, to be expanded as needed.
2890219b2ee8SDavid du ColombierThe graphics functions coincide directly with the
2891219b2ee8SDavid du Colombier.CW \eD
2892219b2ee8SDavid du Colombiersequences:
2893219b2ee8SDavid du Colombier.IP
2894219b2ee8SDavid du Colombier.nf
2895219b2ee8SDavid du Colombier.ta 1.7i
2896219b2ee8SDavid du Colombier@cw Dl@ \f2dh dv\fP	draw line from current position by @dh,~ dv@
2897219b2ee8SDavid du Colombier@cw Dc@ \f2d\fP	draw circle of diameter \f2d\fP with left side here
2898219b2ee8SDavid du Colombier@cw De@ @dh sub 1~dv sub 2@	draw ellipse of diameters @dh sub 1@ and @ dv sub 2@\fP
2899219b2ee8SDavid du Colombier@cw Da ~dh sub 1~ dv sub 1 ~ dh sub 2 ~dv sub 2@	draw arc from current position to @dh sub 1 +dh sub 2 ,~ dv sub 1 +dv sub 2@,
2900219b2ee8SDavid du Colombier		   center at @dh sub 1 ,~ dv sub 1@ from current position
2901219b2ee8SDavid du Colombier@cw "D~" ~dh sub 1 ~dv sub 1 ~dh sub 2 ~dv sub 2@ ...	draw B-spline from current position to @dh sub 1 ,~ dv sub 1@,
2902219b2ee8SDavid du Colombier		   then to @dh sub 2 , ~dv sub 2@, then to ...
2903219b2ee8SDavid du Colombier@cw "D"z ~dh sub 1 ~dv sub 1 ~dh sub 2 ~dv sub 2@ ...	for any other @z@ is uninterpreted
2904219b2ee8SDavid du Colombier.LP
2905219b2ee8SDavid du ColombierIn all of these, @dh, ~dv@ is an increment on the current horizontal and
2906219b2ee8SDavid du Colombiervertical position,
2907219b2ee8SDavid du Colombierwith down and right positive.
2908219b2ee8SDavid du ColombierAll distances and dimensions are in units.
2909219b2ee8SDavid du Colombier.PP
2910219b2ee8SDavid du ColombierThe device control functions begin with
2911219b2ee8SDavid du Colombier.CW x ,
2912219b2ee8SDavid du Colombierthen a command, then other parameters.
2913219b2ee8SDavid du Colombier.IP
2914219b2ee8SDavid du Colombier.ta .8i 1.2i
2915219b2ee8SDavid du Colombier.nf
2916219b2ee8SDavid du Colombier.ft CW
2917219b2ee8SDavid du Colombierx T \f2s\fP	\f1name of typesetter is @s@\f(CW
2918219b2ee8SDavid du Colombierx r \f2n h v\fP	\f1resolution is @n@ units/inch;\f(CW
2919219b2ee8SDavid du Colombier		\f1@h@ = minimum horizontal motion, @v@ = minimum vertical\f(CW
2920219b2ee8SDavid du Colombierx i	\f1initialize\fP
2921219b2ee8SDavid du Colombierx f \f2n s\fP	\f1mount font @s@ on font position @n@\f(CW
2922219b2ee8SDavid du Colombierx p	\f1pause\(emcan restart\f(CW
2923219b2ee8SDavid du Colombierx s	\f1stop\(emdone forever\f(CW
2924219b2ee8SDavid du Colombierx t	\f1generate trailer information, if any\f(CW
2925219b2ee8SDavid du Colombierx H \f2n\fP	\f1set character height to @n@\f(CW
2926219b2ee8SDavid du Colombierx S \f2n\fP	\f1set slant to @n@\f(CW
2927219b2ee8SDavid du Colombierx X \f2any\fP	\f1generated by the \&\f(CW\eX\fP function\f(CW
2928219b2ee8SDavid du Colombierx \f2any\fP	\f1to be ignored if not recognized\f(CW
2929219b2ee8SDavid du Colombier.LP
2930219b2ee8SDavid du ColombierSubcommands like
2931219b2ee8SDavid du Colombier.CW i '' ``
2932219b2ee8SDavid du Colombiermay be spelled out like
2933219b2ee8SDavid du Colombier.CW init ''. ``
2934219b2ee8SDavid du Colombier.PP
2935219b2ee8SDavid du ColombierThe commands
2936219b2ee8SDavid du Colombier.CW "x T" ,
2937219b2ee8SDavid du Colombier.CW "x r " ...,
2938219b2ee8SDavid du Colombierand
2939219b2ee8SDavid du Colombier.CW "x i"
2940219b2ee8SDavid du Colombiermust occur first;
2941219b2ee8SDavid du Colombierfonts must be mounted before they can be used;
2942219b2ee8SDavid du Colombier.CW "x s
2943219b2ee8SDavid du Colombiercomes last.
2944219b2ee8SDavid du ColombierThere are no other order requirements.
2945219b2ee8SDavid du Colombier.PP
2946219b2ee8SDavid du ColombierThe following is the output from
2947219b2ee8SDavid du Colombier.CW hello, "" ``
2948219b2ee8SDavid du Colombier.CW world ''
2949219b2ee8SDavid du Colombierfor a typical printer,
2950219b2ee8SDavid du Colombieras described in §23:
2951219b2ee8SDavid du Colombier.P1
2952219b2ee8SDavid du Colombierx T utf
2953219b2ee8SDavid du Colombierx res 720 1 1
2954219b2ee8SDavid du Colombierx init
2955219b2ee8SDavid du ColombierV0
2956219b2ee8SDavid du Colombierp1
2957219b2ee8SDavid du Colombier.P2
2958219b2ee8SDavid du Colombier.P1
2959219b2ee8SDavid du Colombierx font 1 R
2960219b2ee8SDavid du Colombierx font 2 I
2961219b2ee8SDavid du Colombierx font 3 B
2962219b2ee8SDavid du Colombierx font 4 BI
2963219b2ee8SDavid du Colombierx font 5 CW
2964219b2ee8SDavid du Colombierx font 6 H
2965219b2ee8SDavid du Colombierx font 7 HB
2966219b2ee8SDavid du Colombierx font 8 HX
2967219b2ee8SDavid du Colombierx font 9 S1
2968219b2ee8SDavid du Colombierx font 10 S
2969219b2ee8SDavid du Colombier.P2
2970219b2ee8SDavid du Colombier.P1
2971219b2ee8SDavid du Colombiers10
2972219b2ee8SDavid du Colombierf1
2973219b2ee8SDavid du ColombierH0
2974219b2ee8SDavid du Colombiers10
2975219b2ee8SDavid du Colombierf1
2976219b2ee8SDavid du ColombierV0
2977219b2ee8SDavid du ColombierH720
2978219b2ee8SDavid du ColombierV120
2979219b2ee8SDavid du Colombierch
2980219b2ee8SDavid du Colombier50e44l28l28o50,w58w72o50r33l28dn120 0
2981219b2ee8SDavid du Colombierx trailer
2982219b2ee8SDavid du ColombierV7920
2983219b2ee8SDavid du Colombierx stop
2984219b2ee8SDavid du Colombier.P2
2985219b2ee8SDavid du Colombier.PP
2986219b2ee8SDavid du Colombier\*(Tr output is normally not redundant;
2987219b2ee8SDavid du Colombiersize and font changes and position information are not included
2988219b2ee8SDavid du Colombierunless needed.
2989219b2ee8SDavid du ColombierNevertheless, each page is self-contained, for the benefit of postprocessors
2990219b2ee8SDavid du Colombierthat re-order pages or process only a subset.
2991219b2ee8SDavid du Colombier.NH
2992219b2ee8SDavid du ColombierDevice and Font Description Files
2993219b2ee8SDavid du Colombier.PP
2994219b2ee8SDavid du ColombierThe parameters that describe a output device
2995219b2ee8SDavid du Colombier.I name
2996219b2ee8SDavid du Colombierare read
2997219b2ee8SDavid du Colombierfrom the directory
2998219b2ee8SDavid du Colombier.CW /sys/lib/troff/font/dev@name@ ,
2999219b2ee8SDavid du Colombiereach time
3000219b2ee8SDavid du Colombier\*(TR
3001219b2ee8SDavid du Colombieris invoked.
3002219b2ee8SDavid du ColombierThe device name is provided by default,
3003219b2ee8SDavid du Colombierby the environment variable
3004219b2ee8SDavid du Colombier.CW TYPESETTER ,
3005219b2ee8SDavid du Colombieror by a command-line argument
3006219b2ee8SDavid du Colombier.CW -T@name@ .
3007219b2ee8SDavid du ColombierThe default device name is
3008219b2ee8SDavid du Colombier.CW utf ,
3009219b2ee8SDavid du Colombierfor \s-1UTF\s0-encoded Unicode characters.
3010219b2ee8SDavid du ColombierThe pre-defined string
3011219b2ee8SDavid du Colombier.CW .T
3012219b2ee8SDavid du Colombiercontains the name of the device.
3013219b2ee8SDavid du ColombierThe
3014219b2ee8SDavid du Colombier.CW -F
3015219b2ee8SDavid du Colombiercommand-line option may be used to change the default directory.
3016219b2ee8SDavid du Colombier.......
3017219b2ee8SDavid du Colombier.sc "Device description file.
3018219b2ee8SDavid du ColombierGeneral parameters of the device are stored, one per line, in
3019219b2ee8SDavid du Colombierthe file
3020219b2ee8SDavid du Colombier.CW /sys/lib/troff/font/dev@name@/DESC ,
3021219b2ee8SDavid du Colombieras a sequence of names and values.
3022219b2ee8SDavid du Colombier\*(Tr recognizes these parameters, and ignores any
3023219b2ee8SDavid du Colombierothers that may be present for specific drivers:
3024219b2ee8SDavid du Colombier.IP
3025219b2ee8SDavid du Colombier.nf
3026219b2ee8SDavid du Colombier.ta 1i
3027219b2ee8SDavid du Colombier@cw fonts ~ n ~ F sub 1  ~F sub 2  ~. . .~ F sub n@
3028219b2ee8SDavid du Colombier@cw sizes ~ s sub 1 ~ s sub 2 ~ . . . cw 0@
3029219b2ee8SDavid du Colombier@cw res ~n@
3030219b2ee8SDavid du Colombier@cw hor ~n@
3031219b2ee8SDavid du Colombier@cw vert ~n@
3032219b2ee8SDavid du Colombier@cw unitwidth ~n@
3033219b2ee8SDavid du Colombier@cw charset@
3034219b2ee8SDavid du Colombier\f2list of multi-character character names (optional)\fP
3035219b2ee8SDavid du Colombier.LP
3036219b2ee8SDavid du ColombierThe @F sub i@ are font names
3037219b2ee8SDavid du Colombierto be initially mounted.
3038219b2ee8SDavid du ColombierThe list of sizes is a set of integers representing
3039219b2ee8SDavid du Colombiersome or all of the legal sizes the device can produce,
3040219b2ee8SDavid du Colombierterminated by a zero.
3041219b2ee8SDavid du ColombierThe
3042219b2ee8SDavid du Colombier.CW res
3043219b2ee8SDavid du Colombierparameter gives the resolution of the machine in units per inch;
3044219b2ee8SDavid du Colombier.CW hor
3045219b2ee8SDavid du Colombierand
3046219b2ee8SDavid du Colombier.CW ver
3047219b2ee8SDavid du Colombiergive the minimum number of units that can be moved
3048219b2ee8SDavid du Colombierhorizontally and vertically.
3049219b2ee8SDavid du Colombier.PP
3050219b2ee8SDavid du ColombierCharacter widths for each font are assumed to be given in machine units
3051219b2ee8SDavid du Colombierat point size
3052219b2ee8SDavid du Colombier.CW unitwidth .
3053219b2ee8SDavid du Colombier(In other words, a character with a width of
3054219b2ee8SDavid du Colombier@n@ is @n@ units wide at size
3055219b2ee8SDavid du Colombier.CW unitwidth .)
3056219b2ee8SDavid du ColombierAll widths are integers at all sizes.
3057219b2ee8SDavid du Colombier.PP
3058219b2ee8SDavid du ColombierA list of valid character names may be introduced by
3059219b2ee8SDavid du Colombier.CW charset ;
3060219b2ee8SDavid du Colombierthe list of names is optional.
3061219b2ee8SDavid du Colombier.PP
3062219b2ee8SDavid du ColombierA line whose first non-blank character is
3063219b2ee8SDavid du Colombier.CW #
3064219b2ee8SDavid du Colombieris a comment.
3065219b2ee8SDavid du ColombierExcept that
3066219b2ee8SDavid du Colombier.CW charset
3067219b2ee8SDavid du Colombiermust occur last, parameters may appear in any order.
3068219b2ee8SDavid du Colombier.PP
3069219b2ee8SDavid du ColombierHere is a subset of the
3070219b2ee8SDavid du Colombier.CW DESC
3071219b2ee8SDavid du Colombierfile for a typical Postscript printer:
3072219b2ee8SDavid du Colombier.P1
3073219b2ee8SDavid du Colombier# Description file for Postscript printers.
3074219b2ee8SDavid du Colombier
3075219b2ee8SDavid du Colombierfonts 10 R I B BI CW H HB HX S1 S
3076219b2ee8SDavid du Colombiersizes 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
3077219b2ee8SDavid du Colombier   24 25 26 27 28 29 30 31 32 33 34 35 36 38 40 44 48 54 60 72 0
3078219b2ee8SDavid du Colombierres 720
3079219b2ee8SDavid du Colombierhor 1
3080219b2ee8SDavid du Colombiervert 1
3081219b2ee8SDavid du Colombierunitwidth 10
3082219b2ee8SDavid du Colombiercharset
3083219b2ee8SDavid du Colombierhy ct fi fl ff Fi Fl dg em 14 34 12 en aa
3084219b2ee8SDavid du Colombierga ru sc dd -> br Sl ps cs cy as os =. ld
3085219b2ee8SDavid du Colombierrd le ge pp -+ ob vr
3086219b2ee8SDavid du Colombiersq bx ci fa te ** pl mi eq ~= *A *B *X *D
3087219b2ee8SDavid du Colombier*E *F *G *Y *I *K *L *M *N *O *P *R *H *S *T *U *W
3088219b2ee8SDavid du Colombier*C *Q *Z ul rn *a *b *x *d *e *f *g *y *i *k
3089219b2ee8SDavid du Colombier*l *m *n *o *p *h *r *s *t *u *w *c *q *z
3090219b2ee8SDavid du Colombier.P2
3091219b2ee8SDavid du Colombier.sc "Font description files.
3092219b2ee8SDavid du ColombierEach font is described by an analogous description file,
3093219b2ee8SDavid du Colombierwhich begins with parameters of the font, one per line, followed by a
3094219b2ee8SDavid du Colombierlist of characters and widths.
3095219b2ee8SDavid du ColombierThe file for font
3096219b2ee8SDavid du Colombier.I f
3097219b2ee8SDavid du Colombieris
3098219b2ee8SDavid du Colombier.CW /sys/lib/troff/font/dev@name@/@f@ .
3099219b2ee8SDavid du Colombier.IP
3100219b2ee8SDavid du Colombier.ta 1.7i
3101219b2ee8SDavid du Colombier.nf
3102219b2ee8SDavid du Colombier@cw name ~str@	name of font is @str@
3103219b2ee8SDavid du Colombier@cw ligatures ~ ". . ." ~ cw "0"@	list of ligatures
3104219b2ee8SDavid du Colombier@cw spacewidth ~n@	width of a space on this font
3105219b2ee8SDavid du Colombier@cw special@	this is a special font
3106219b2ee8SDavid du Colombier@cw charset@
3107219b2ee8SDavid du Colombier\f2list of character name, width, ascender/descender, code\fP, tab separated
3108219b2ee8SDavid du Colombier.LP
3109219b2ee8SDavid du ColombierThe
3110219b2ee8SDavid du Colombier.CW name
3111219b2ee8SDavid du Colombierand
3112219b2ee8SDavid du Colombier.CW charset
3113219b2ee8SDavid du Colombierfields are mandatory;
3114219b2ee8SDavid du Colombier.CW charset
3115219b2ee8SDavid du Colombiermust be last.
3116219b2ee8SDavid du ColombierComments are permitted,
3117219b2ee8SDavid du Colombieras are other unrecognized parameters.
3118219b2ee8SDavid du Colombier.PP
3119219b2ee8SDavid du ColombierEach line following
3120219b2ee8SDavid du Colombier.CW charset
3121219b2ee8SDavid du Colombierdescribes one character: its name, its width in units as described above,
3122219b2ee8SDavid du Colombierascender/descender information, and a decimal, octal or hexadecimal value
3123219b2ee8SDavid du Colombierby which the output device knows it
3124219b2ee8SDavid du Colombier(the
3125219b2ee8SDavid du Colombier.CW \eN
3126219b2ee8SDavid du Colombier``number'' of the character).
3127219b2ee8SDavid du ColombierThe character name is arbitrary, except that
3128219b2ee8SDavid du Colombier.CW ---
3129219b2ee8SDavid du Colombiersignifies an unnamed character.
3130219b2ee8SDavid du ColombierIf the width field contains
3131219b2ee8SDavid du Colombier.CW \&" ,
3132219b2ee8SDavid du Colombierthe name is a synonym for the previous character.
3133219b2ee8SDavid du ColombierThe ascender/descender field is 1 if
3134219b2ee8SDavid du Colombierthe character has a descender (hangs below the baseline, like
3135219b2ee8SDavid du Colombier.CW y ),
3136219b2ee8SDavid du Colombieris 2 if it has an ascender (is tall, like
3137219b2ee8SDavid du Colombier.CW Y ),
3138219b2ee8SDavid du Colombieris 3 if both,
3139219b2ee8SDavid du Colombierand is 0 if neither.
3140219b2ee8SDavid du ColombierThe value is returned
3141219b2ee8SDavid du Colombierin the
3142219b2ee8SDavid du Colombier.CW ct
3143219b2ee8SDavid du Colombierregister, as computed by the
3144219b2ee8SDavid du Colombier.CW \ew
3145219b2ee8SDavid du Colombierfunction (§11.2).
3146219b2ee8SDavid du Colombier.PP
3147219b2ee8SDavid du ColombierHere are excerpts from a typical font description file
3148219b2ee8SDavid du Colombierfor the same Postscript printer.
3149219b2ee8SDavid du Colombier.P1
3150219b2ee8SDavid du Colombierhy	33	0	45	hyphen \e(hy
3151219b2ee8SDavid du Colombier-	"			- is a synonym for \e(hy
3152219b2ee8SDavid du Colombier.sp .3
3153219b2ee8SDavid du ColombierQ	72	3	81
3154219b2ee8SDavid du Colombier.sp .3
3155219b2ee8SDavid du Colombiera	44	0	97
3156219b2ee8SDavid du Colombierb	50	2	98
3157219b2ee8SDavid du Colombierc	44	0	99
3158219b2ee8SDavid du Colombierd	50	2	100
3159219b2ee8SDavid du Colombiery	50	1	121
3160219b2ee8SDavid du Colombier.sp .3
3161219b2ee8SDavid du Colombierem	100	0	208
3162219b2ee8SDavid du Colombier---	44	2	220	Pound symbol £, \eN'220'
3163219b2ee8SDavid du Colombier---	36	0	221	centered dot \eN'221'
3164219b2ee8SDavid du Colombier.P2
3165219b2ee8SDavid du ColombierThis says, for example, that the width of the letter
3166219b2ee8SDavid du Colombier.CW a
3167219b2ee8SDavid du Colombieris 44 units at point size 10,
3168219b2ee8SDavid du Colombierthe value of
3169219b2ee8SDavid du Colombier.CW unitwidth .
3170219b2ee8SDavid du ColombierPoint sizes are scaled linearly and rounded, so the width of
3171219b2ee8SDavid du Colombier.CW a
3172219b2ee8SDavid du Colombierwill be 44 at size 10, 40 at size 9, 35 at size 8,
3173219b2ee8SDavid du Colombierand so on.
3174219b2ee8SDavid du Colombier.sp 100
3175219b2ee8SDavid du Colombier.BP
3176219b2ee8SDavid du Colombier.fp 8 C CW
3177219b2ee8SDavid du Colombier.tr &.
3178219b2ee8SDavid du Colombier.tr |
3179219b2ee8SDavid du Colombier.tr ~|
3180219b2ee8SDavid du Colombier.TL
3181219b2ee8SDavid du ColombierTutorial Examples
3182219b2ee8SDavid du Colombier.SP
3183219b2ee8SDavid du Colombier....2C
3184219b2ee8SDavid du Colombier.sp .25i
3185219b2ee8SDavid du Colombier.SH
3186219b2ee8SDavid du ColombierIntroduction
3187219b2ee8SDavid du Colombier.PP
3188219b2ee8SDavid du ColombierIt is almost always necessary to
3189219b2ee8SDavid du Colombierprepare at least a small set of macro definitions
3190219b2ee8SDavid du Colombierto describe a document.
3191219b2ee8SDavid du ColombierSuch common formatting needs
3192219b2ee8SDavid du Colombieras page margins and footnotes
3193219b2ee8SDavid du Colombierare deliberately not built into \*(NR and \*(TR.
3194219b2ee8SDavid du ColombierInstead,
3195219b2ee8SDavid du Colombierthe macro and string definition, number register, diversion,
3196219b2ee8SDavid du Colombierenvironment switching, page-position trap, and conditional input mechanisms
3197219b2ee8SDavid du Colombierprovide the basis for user-defined implementations.
3198219b2ee8SDavid du Colombier.PP
3199219b2ee8SDavid du ColombierFor most uses, a standard package like
3200219b2ee8SDavid du Colombier.CW -ms
3201219b2ee8SDavid du Colombieror
3202219b2ee8SDavid du Colombier.CW -mm
3203219b2ee8SDavid du Colombieris the right choice.
3204219b2ee8SDavid du ColombierThe next stage is to augment that,
3205219b2ee8SDavid du Colombieror to selectively replace macros from the standard package.
3206219b2ee8SDavid du ColombierThe last stage, much harder,
3207219b2ee8SDavid du Colombieris to write one's own from scratch.
3208219b2ee8SDavid du ColombierThis is not a task for the novice.
3209219b2ee8SDavid du Colombier.PP
3210219b2ee8SDavid du ColombierThe examples discussed here are intended to be useful and somewhat realistic,
3211219b2ee8SDavid du Colombierbut will not necessarily cover all relevant contingencies.
3212219b2ee8SDavid du ColombierExplicit numerical parameters are used
3213219b2ee8SDavid du Colombierin the examples
3214219b2ee8SDavid du Colombierto make them easier to read and to
3215219b2ee8SDavid du Colombierillustrate typical values.
3216219b2ee8SDavid du ColombierIn many cases, number registers would be used
3217219b2ee8SDavid du Colombierto reduce the number of places where numerical
3218219b2ee8SDavid du Colombierinformation is kept,
3219219b2ee8SDavid du Colombierand to concentrate conditional parameter initialization
3220219b2ee8SDavid du Colombierlike that which depends on whether \*(TR or \*(NR is being used.
3221219b2ee8SDavid du Colombier.SH
3222219b2ee8SDavid du ColombierPage Margins
3223219b2ee8SDavid du Colombier.PP
3224219b2ee8SDavid du ColombierAs discussed in §3,
3225219b2ee8SDavid du Colombierheader and footer macros are usually defined
3226219b2ee8SDavid du Colombierto describe the top and bottom page margin areas respectively.
3227219b2ee8SDavid du ColombierA trap is planted at page position 0 for the header, and at
3228219b2ee8SDavid du Colombier\fI-N\fR (\fIN\fR from the page bottom) for the footer.
3229219b2ee8SDavid du ColombierThe simplest such definitions might be
3230219b2ee8SDavid du Colombier.P1 .1i
3231219b2ee8SDavid du Colombier&de hd	\e"define header
3232219b2ee8SDavid du Colombier\&'sp 1i
3233219b2ee8SDavid du Colombier&&	\e"end definition
3234219b2ee8SDavid du Colombier&de fo	\e"define footer
3235219b2ee8SDavid du Colombier\&'bp
3236219b2ee8SDavid du Colombier&&	\e"end definition
3237219b2ee8SDavid du Colombier&wh 0 hd
3238219b2ee8SDavid du Colombier&wh -1i fo
3239219b2ee8SDavid du Colombier.P2
3240219b2ee8SDavid du Colombierwhich provide blank 1 inch top and bottom margins.
3241219b2ee8SDavid du ColombierThe header will occur on the \fIfirst\fR page
3242219b2ee8SDavid du Colombieronly if the definition and trap exist prior to
3243219b2ee8SDavid du Colombierthe initial pseudo-page transition (§3).
3244219b2ee8SDavid du ColombierIn fill mode, the output line that springs the footer trap
3245219b2ee8SDavid du Colombierwas typically forced out because some part or whole word didn't fit on it.
3246219b2ee8SDavid du ColombierIf anything in the footer and header that follows causes a break,
3247219b2ee8SDavid du Colombierthat word or part word will be forced out.
3248219b2ee8SDavid du ColombierIn this and other examples,
3249219b2ee8SDavid du Colombierrequests like \&\f(CWbp\fR and \&\f(CWsp\fR that normally cause breaks are invoked using
3250219b2ee8SDavid du Colombierthe no-break control character \&\f(CW'\fR
3251219b2ee8SDavid du Colombierto avoid this.
3252219b2ee8SDavid du ColombierWhen the header/footer design contains material
3253219b2ee8SDavid du Colombierrequiring independent text processing, the
3254219b2ee8SDavid du Colombierenvironment may be switched, avoiding
3255219b2ee8SDavid du Colombiermost interaction with the running text.
3256219b2ee8SDavid du Colombier.PP
3257219b2ee8SDavid du ColombierA more realistic example would be
3258219b2ee8SDavid du Colombier.P1 .1i
3259219b2ee8SDavid du Colombier&de hd	\e"header
3260219b2ee8SDavid du Colombier&if \e\en%>1 \e{\e
3261219b2ee8SDavid du Colombier\&'sp ~0.5i-1	\e"tl base at 0.5i
3262219b2ee8SDavid du Colombier&tl ''- % -''	\e"centered page number
3263219b2ee8SDavid du Colombier&ps	\e"restore size
3264219b2ee8SDavid du Colombier&ft	\e"restore font
3265219b2ee8SDavid du Colombier&vs  \e}	\e"restore vs
3266219b2ee8SDavid du Colombier\&'sp ~1.0i  	\e"space to 1.0i
3267219b2ee8SDavid du Colombier&ns	\e"turn on no-space mode
3268219b2ee8SDavid du Colombier&&
3269219b2ee8SDavid du Colombier&de fo	\e"footer
3270219b2ee8SDavid du Colombier&ps 10	\e"set footer/header size
3271219b2ee8SDavid du Colombier&ft R	\e"set font
3272219b2ee8SDavid du Colombier&vs 12p	\e"set baseline spacing
3273219b2ee8SDavid du Colombier&if \e\en%=1 \e{\e
3274219b2ee8SDavid du Colombier\&'sp ~\e\en(.pu-0.5i-1  \e"tl base 0.5i up
3275219b2ee8SDavid du Colombier&tl ''- % -'' \e}  \e"first page number
3276219b2ee8SDavid du Colombier\&'bp
3277219b2ee8SDavid du Colombier&&
3278219b2ee8SDavid du Colombier&wh 0 hd
3279219b2ee8SDavid du Colombier&wh -1i fo
3280219b2ee8SDavid du Colombier.P2
3281219b2ee8SDavid du Colombierwhich sets the size, font, and baseline spacing for the
3282219b2ee8SDavid du Colombierheader/footer material, and ultimately restores them.
3283219b2ee8SDavid du ColombierThe material in this case is a page number at the bottom of the
3284219b2ee8SDavid du Colombierfirst page and at the top of the remaining pages.
3285219b2ee8SDavid du ColombierThe \&\f(CWsp\fR's refer to absolute positions to avoid
3286219b2ee8SDavid du Colombierdependence on the baseline spacing.
3287219b2ee8SDavid du ColombierAnother reason for doing this in the footer
3288219b2ee8SDavid du Colombieris that the footer is invoked by printing a line whose
3289219b2ee8SDavid du Colombiervertical spacing swept past the trap position by possibly
3290219b2ee8SDavid du Colombieras much as the baseline spacing.
3291219b2ee8SDavid du ColombierNo-space mode is turned on at the end of \&\f(CWhd\fR
3292219b2ee8SDavid du Colombierto render ineffective
3293219b2ee8SDavid du Colombieraccidental occurrences of \&\f(CWsp\fR at the top of the running text.
3294219b2ee8SDavid du Colombier.PP
3295219b2ee8SDavid du ColombierThis method of restoring size, font, etc., presupposes
3296219b2ee8SDavid du Colombierthat such requests (that set \fIprevious\fR value) are \fInot\fR
3297219b2ee8SDavid du Colombierused in the running text.
3298219b2ee8SDavid du ColombierA better scheme is to save and restore both the current \fIand\fR
3299219b2ee8SDavid du Colombierprevious values as shown for size in the following:
3300219b2ee8SDavid du Colombier.P1 .1i
3301219b2ee8SDavid du Colombier&de fo
3302219b2ee8SDavid du Colombier&nr s1 \e\en(.s	\e"current size
3303219b2ee8SDavid du Colombier&ps
3304219b2ee8SDavid du Colombier&nr s2 \e\en(.s	\e"previous size
3305219b2ee8SDavid du Colombier&  ---	\e"rest of footer
3306219b2ee8SDavid du Colombier&&
3307219b2ee8SDavid du Colombier&de hd
3308219b2ee8SDavid du Colombier&  ---	\e"header stuff
3309219b2ee8SDavid du Colombier&ps \e\en(s2  \e"restore previous size
3310219b2ee8SDavid du Colombier&ps \e\en(s1  \e"restore current size
3311219b2ee8SDavid du Colombier&&
3312219b2ee8SDavid du Colombier.P2
3313219b2ee8SDavid du ColombierPage numbers may be printed in the bottom margin
3314219b2ee8SDavid du Colombierby a separate macro triggered during the footer's
3315219b2ee8SDavid du Colombierpage ejection:
3316219b2ee8SDavid du Colombier.P1 .1i
3317219b2ee8SDavid du Colombier&de bn	\e"bottom number
3318219b2ee8SDavid du Colombier&tl ''- % -''	\e"centered page number
3319219b2ee8SDavid du Colombier&&
3320219b2ee8SDavid du Colombier&wh -0.5i-1v bn	 \e"tl base 0.5i up
3321219b2ee8SDavid du Colombier.P2
3322219b2ee8SDavid du Colombier.SH
3323219b2ee8SDavid du ColombierParagraphs and Headings
3324219b2ee8SDavid du Colombier.PP
3325219b2ee8SDavid du ColombierThe housekeeping
3326219b2ee8SDavid du Colombierassociated with starting a new paragraph should be collected
3327219b2ee8SDavid du Colombierin a paragraph macro
3328219b2ee8SDavid du Colombierthat, for example,
3329219b2ee8SDavid du Colombierdoes the desired preparagraph spacing,
3330219b2ee8SDavid du Colombierforces the correct font, size, baseline spacing, and indent,
3331219b2ee8SDavid du Colombierchecks that enough space remains for \fImore than one\fR line,
3332219b2ee8SDavid du Colombierand
3333219b2ee8SDavid du Colombierrequests a temporary indent.
3334219b2ee8SDavid du Colombier.P1 .1i
3335219b2ee8SDavid du Colombier&de pg    \e"paragraph
3336219b2ee8SDavid du Colombier&br       \e"break
3337219b2ee8SDavid du Colombier&ft R     \e"force font,
3338219b2ee8SDavid du Colombier&ps 10    \e"size,
3339219b2ee8SDavid du Colombier&vs 12p   \e"spacing,
3340219b2ee8SDavid du Colombier&in 0     \e"and indent
3341219b2ee8SDavid du Colombier&sp 0.4   \e"prespace
3342219b2ee8SDavid du Colombier&ne 1+\e\en(.Vu  \e"want more than 1 line
3343219b2ee8SDavid du Colombier&ti 0.2i         \e"temp indent
3344219b2ee8SDavid du Colombier&&
3345219b2ee8SDavid du Colombier.P2
3346219b2ee8SDavid du ColombierThe first break in \&\f(CWpg\fR
3347219b2ee8SDavid du Colombierwill force out any previous partial lines,
3348219b2ee8SDavid du Colombierand must occur before the \&\f(CWvs\fR.
3349219b2ee8SDavid du ColombierThe forcing of font, etc., is
3350219b2ee8SDavid du Colombierpartly a defense against prior error and
3351219b2ee8SDavid du Colombierpartly to permit
3352219b2ee8SDavid du Colombierthings like section heading macros to
3353219b2ee8SDavid du Colombierset parameters only once.
3354219b2ee8SDavid du ColombierThe prespacing parameter is suitable for \*(TR;
3355219b2ee8SDavid du Colombiera larger space, at least as big as the output device vertical resolution, would be
3356219b2ee8SDavid du Colombiermore suitable in \*(NR.
3357219b2ee8SDavid du ColombierThe choice of remaining space to test for in the \&\f(CWne\fR
3358219b2ee8SDavid du Colombieris the smallest amount greater than one line
3359219b2ee8SDavid du Colombier(the \&\f(CW.V\fR is the available vertical resolution).
3360219b2ee8SDavid du Colombier.PP
3361219b2ee8SDavid du ColombierA macro to automatically number section headings
3362219b2ee8SDavid du Colombiermight look like:
3363219b2ee8SDavid du Colombier.P1 .1i
3364219b2ee8SDavid du Colombier&de sc	\e"section
3365219b2ee8SDavid du Colombier&  ---	\e"force font, etc.
3366219b2ee8SDavid du Colombier&sp 0.4	\e"prespace
3367219b2ee8SDavid du Colombier&ne 2.4+\e\en(.Vu \e"want 2.4+ lines
3368219b2ee8SDavid du Colombier.lg 0
3369219b2ee8SDavid du Colombier&fi
3370219b2ee8SDavid du Colombier.lg
3371219b2ee8SDavid du Colombier\e\en+S.
3372219b2ee8SDavid du Colombier&&
3373219b2ee8SDavid du Colombier&nr S 0 1	\e"init S
3374219b2ee8SDavid du Colombier.P2
3375219b2ee8SDavid du ColombierThe usage is \&\f(CW.sc\fR,
3376219b2ee8SDavid du Colombierfollowed by the section heading text,
3377219b2ee8SDavid du Colombierfollowed by \&\f(CW.pg\fR.
3378219b2ee8SDavid du ColombierThe \&\f(CWne\fR test value includes one line of heading,
3379219b2ee8SDavid du Colombier0.4 line in the following \&\f(CWpg\fR, and
3380219b2ee8SDavid du Colombierone line of the paragraph text.
3381219b2ee8SDavid du ColombierA word consisting of the next section number and a period is
3382219b2ee8SDavid du Colombierproduced to begin the heading line.
3383219b2ee8SDavid du ColombierThe format of the number may be set by \&\f(CWaf\fR (§8).
3384219b2ee8SDavid du Colombier.PP
3385219b2ee8SDavid du ColombierAnother common form is the labeled, indented paragraph,
3386219b2ee8SDavid du Colombierwhere the label protrudes left into the indent space.
3387219b2ee8SDavid du Colombier.P1 .1i
3388219b2ee8SDavid du Colombier&de lp	\e"labeled paragraph
3389219b2ee8SDavid du Colombier&pg
3390219b2ee8SDavid du Colombier&in 0.5i	\e"paragraph indent
3391219b2ee8SDavid du Colombier&ta 0.2i 0.5i	\e"label, paragraph
3392219b2ee8SDavid du Colombier&ti 0
3393219b2ee8SDavid du Colombier\et\e\e$1\et\ec	\e"flow into paragraph
3394219b2ee8SDavid du Colombier&&
3395219b2ee8SDavid du Colombier.P2
3396219b2ee8SDavid du ColombierThe intended usage is ``\&\f(CW.lp\fR \fIlabel\fR\|'';
3397219b2ee8SDavid du Colombier\fIlabel\fR will begin at 0.2 inch, and
3398219b2ee8SDavid du Colombiercannot exceed a length of 0.3 inch without intruding into
3399219b2ee8SDavid du Colombierthe paragraph.
3400219b2ee8SDavid du ColombierThe label could be right adjusted against 0.4 inch by
3401219b2ee8SDavid du Colombiersetting the tabs instead with \&\f(CW.ta|0.4iR|0.5i\fR.
3402219b2ee8SDavid du ColombierThe last line of \&\f(CWlp\fR ends with \&\f(CW\ec\fR so that
3403219b2ee8SDavid du Colombierit will become a part of the first line of the text
3404219b2ee8SDavid du Colombierthat follows.
3405219b2ee8SDavid du Colombier.SH
3406219b2ee8SDavid du ColombierMultiple Column Output
3407219b2ee8SDavid du Colombier.PP
3408219b2ee8SDavid du ColombierThe production of multiple column pages requires
3409219b2ee8SDavid du Colombierthe footer macro to decide whether it was
3410219b2ee8SDavid du Colombierinvoked by other than the last column,
3411219b2ee8SDavid du Colombierso that it will begin a new column rather than
3412219b2ee8SDavid du Colombierproduce the bottom margin.
3413219b2ee8SDavid du ColombierThe header can initialize a column register that
3414219b2ee8SDavid du Colombierthe footer will increment and test.
3415219b2ee8SDavid du ColombierThe following is arranged for two columns, but
3416219b2ee8SDavid du Colombieris easily modified for more.
3417219b2ee8SDavid du Colombier.P1 .1i
3418219b2ee8SDavid du Colombier&de hd	\e"header
3419219b2ee8SDavid du Colombier&  ---
3420219b2ee8SDavid du Colombier&nr cl 0 1	\e"init column count
3421219b2ee8SDavid du Colombier&mk	\e"mark top of text
3422219b2ee8SDavid du Colombier&&
3423219b2ee8SDavid du Colombier.P2
3424219b2ee8SDavid du Colombier.P1 .1i
3425219b2ee8SDavid du Colombier&de fo	\e"footer
3426219b2ee8SDavid du Colombier&ie \e\en+(cl<2 \e{\e
3427219b2ee8SDavid du Colombier&po +3.4i	\e"next column; 3.1+0.3
3428219b2ee8SDavid du Colombier&rt	\e"back to mark
3429219b2ee8SDavid du Colombier&ns \e}	\e"no-space mode
3430219b2ee8SDavid du Colombier&el \e{\e
3431219b2ee8SDavid du Colombier&po \e\enMu	\e"restore left margin
3432219b2ee8SDavid du Colombier&  ---
3433219b2ee8SDavid du Colombier\&'bp \e}
3434219b2ee8SDavid du Colombier&&
3435219b2ee8SDavid du Colombier&ll 3.1i	\e"column width
3436219b2ee8SDavid du Colombier&nr M \e\en(.o	\e"save left margin
3437219b2ee8SDavid du Colombier.P2
3438219b2ee8SDavid du ColombierTypically a portion of the top of the first page
3439219b2ee8SDavid du Colombiercontains full width text;
3440219b2ee8SDavid du Colombierthe request for the narrower line length,
3441219b2ee8SDavid du Colombieras well as another \&\f(CW.mk\fR would
3442219b2ee8SDavid du Colombierbe made where the two column output was to begin.
3443219b2ee8SDavid du Colombier.SH
3444219b2ee8SDavid du ColombierFootnotes
3445219b2ee8SDavid du Colombier.PP
3446219b2ee8SDavid du ColombierThe footnote mechanism to be described is used by
3447219b2ee8SDavid du Colombierembedding the footnotes in the input text at the
3448219b2ee8SDavid du Colombierpoint of reference,
3449219b2ee8SDavid du Colombierdemarcated by an initial \&\f(CW.fn\fR and a terminal \&\f(CW.ef\fR:
3450219b2ee8SDavid du Colombier.P1 .1i
3451219b2ee8SDavid du Colombier&fn
3452219b2ee8SDavid du Colombier\fIFootnote text and control lines...\fP
3453219b2ee8SDavid du Colombier&ef
3454219b2ee8SDavid du Colombier.P2
3455219b2ee8SDavid du ColombierIn the following,
3456219b2ee8SDavid du Colombierfootnotes are processed in a separate environment and diverted
3457219b2ee8SDavid du Colombierfor later printing in the space immediately prior to the bottom
3458219b2ee8SDavid du Colombiermargin.
3459219b2ee8SDavid du ColombierThere is provision for the case where the last collected
3460219b2ee8SDavid du Colombierfootnote doesn't completely fit in the available space.
3461219b2ee8SDavid du Colombier.P1 .1i
3462219b2ee8SDavid du Colombier&de hd	\e"header
3463219b2ee8SDavid du Colombier&  ---
3464219b2ee8SDavid du Colombier&nr x 0 1	\e"init footnote count
3465219b2ee8SDavid du Colombier&nr y 0-\e\enb	\e"current footer place
3466219b2ee8SDavid du Colombier&ch fo -\e\enbu	\e"reset footer trap
3467219b2ee8SDavid du Colombier&if \e\en(dn .fz	\e"leftover footnote
3468219b2ee8SDavid du Colombier&&
3469219b2ee8SDavid du Colombier.P2
3470219b2ee8SDavid du Colombier.P1 .1i
3471219b2ee8SDavid du Colombier&de fo	\e"footer
3472219b2ee8SDavid du Colombier&nr dn 0  \e"zero last diversion size
3473219b2ee8SDavid du Colombier&if \e\enx \e{\e
3474219b2ee8SDavid du Colombier&ev 1	\e"expand footnotes in ev1
3475219b2ee8SDavid du Colombier&nf	\e"retain vertical size
3476219b2ee8SDavid du Colombier&FN	\e"footnotes
3477219b2ee8SDavid du Colombier&rm FN	\e"delete it
3478219b2ee8SDavid du Colombier.P2
3479219b2ee8SDavid du Colombier.P1 .1i
3480219b2ee8SDavid du Colombier&if "\e\en(.z"fy" .di  \e"end overflow di
3481219b2ee8SDavid du Colombier&nr x 0	\e"disable fx
3482219b2ee8SDavid du Colombier&ev  \e}	\e"pop environment
3483219b2ee8SDavid du Colombier&  ---
3484219b2ee8SDavid du Colombier\&'bp
3485219b2ee8SDavid du Colombier&&
3486219b2ee8SDavid du Colombier.P2
3487219b2ee8SDavid du Colombier.P1 .1i
3488219b2ee8SDavid du Colombier&de fx	\e"process footnote overflow
3489219b2ee8SDavid du Colombier&if \e\enx .di fy	\e"divert overflow
3490219b2ee8SDavid du Colombier&&
3491219b2ee8SDavid du Colombier.P2
3492219b2ee8SDavid du Colombier.P1 .1i
3493219b2ee8SDavid du Colombier&de fn	\e"start footnote
3494219b2ee8SDavid du Colombier&da FN	\e"divert (append) footnote
3495219b2ee8SDavid du Colombier&ev 1	\e"in environment 1
3496219b2ee8SDavid du Colombier&if \e\en+x=1 .fs   \e"if 1st, separator
3497219b2ee8SDavid du Colombier&fi	\e"fill mode
3498219b2ee8SDavid du Colombier&&
3499219b2ee8SDavid du Colombier.P2
3500219b2ee8SDavid du Colombier.P1 .1i
3501219b2ee8SDavid du Colombier&de ef	\e"end footnote
3502219b2ee8SDavid du Colombier&br	\e"finish output
3503219b2ee8SDavid du Colombier&nr z \e\en(.v	\e"save spacing
3504219b2ee8SDavid du Colombier&ev	\e"pop ev
3505219b2ee8SDavid du Colombier&di	\e"end diversion
3506219b2ee8SDavid du Colombier&nr y -\e\en(dn	\e"new footer position,
3507219b2ee8SDavid du Colombier&if \e\enx=1 .nr y -(\e\en(.v-\e\enz) \e
3508219b2ee8SDavid du Colombier	\e"uncertainty correction
3509219b2ee8SDavid du Colombier&ch fo \e\enyu	\e"y is negative
3510219b2ee8SDavid du Colombier&if (\e\en(nl+1v)>(\e\en(.p+\e\eny) \e
3511219b2ee8SDavid du Colombier&ch fo \e\en(nlu+1v	 \e"didn't fit
3512219b2ee8SDavid du Colombier&&
3513219b2ee8SDavid du Colombier.P2
3514219b2ee8SDavid du Colombier.P1 .1i
3515219b2ee8SDavid du Colombier&de fs	\e"separator
3516219b2ee8SDavid du Colombier\el'1i'	\e"1 inch rule
3517219b2ee8SDavid du Colombier&br
3518219b2ee8SDavid du Colombier&&
3519219b2ee8SDavid du Colombier.P2
3520219b2ee8SDavid du Colombier.P1 .1i
3521219b2ee8SDavid du Colombier&de fz	\e"get leftover footnote
3522219b2ee8SDavid du Colombier&fn
3523219b2ee8SDavid du Colombier&nf	\e"retain vertical size
3524219b2ee8SDavid du Colombier&fy	\e"where fx put it
3525219b2ee8SDavid du Colombier&ef
3526219b2ee8SDavid du Colombier&&
3527219b2ee8SDavid du Colombier.P2
3528219b2ee8SDavid du Colombier.P1 .1i
3529219b2ee8SDavid du Colombier&nr b 1.0i  \e"bottom margin size
3530219b2ee8SDavid du Colombier&wh 0 hd    \e"header trap
3531219b2ee8SDavid du Colombier&wh 12i fo  \e"footer trap->temp pos
3532219b2ee8SDavid du Colombier&wh -\e\enbu fx	\e"fx at footer position
3533219b2ee8SDavid du Colombier&ch fo -\e\enbu	\e"conceal fx with fo
3534219b2ee8SDavid du Colombier.P2
3535219b2ee8SDavid du Colombier.PP
3536219b2ee8SDavid du ColombierThe header \&\f(CWhd\fR initializes a footnote count register \&\f(CWx\fR,
3537219b2ee8SDavid du Colombierand sets both the current footer trap position register \&\f(CWy\fR and
3538219b2ee8SDavid du Colombierthe footer trap itself to a nominal position specified in
3539219b2ee8SDavid du Colombierregister \&\f(CWb\fR.
3540219b2ee8SDavid du ColombierIn addition, if the register \&\f(CWdn\fR indicates a leftover footnote,
3541219b2ee8SDavid du Colombier\&\f(CWfz\fR is invoked to reprocess it.
3542219b2ee8SDavid du ColombierThe footnote start macro \&\f(CWfn\fR begins a diversion (append) in environment 1,
3543219b2ee8SDavid du Colombierand increments the count \&\f(CWx\fR; if the count is one, the footnote separator \&\f(CWfs\fR
3544219b2ee8SDavid du Colombieris interpolated.
3545219b2ee8SDavid du ColombierThe separator is kept in a separate macro to permit user redefinition.
3546219b2ee8SDavid du Colombier.PP
3547219b2ee8SDavid du ColombierThe footnote end macro \&\f(CWef\fR restores
3548219b2ee8SDavid du Colombierthe previous environment and ends the diversion after saving the spacing size in register \&\f(CWz\fR.
3549219b2ee8SDavid du Colombier\&\f(CWy\fR is then decremented by the size of the footnote, available in \&\f(CWdn\fR;
3550219b2ee8SDavid du Colombierthen on the first footnote, \&\f(CWy\fR is further decremented by the difference
3551219b2ee8SDavid du Colombierin vertical baseline spacings of the two environments, to
3552219b2ee8SDavid du Colombierprevent the late triggering of the footer trap from causing the last
3553219b2ee8SDavid du Colombierline of the combined footnotes to overflow.
3554219b2ee8SDavid du ColombierThe footer trap is then set to the lower (on the page) of \&\f(CWy\fR or the current page position (\&\f(CWnl\fR)
3555219b2ee8SDavid du Colombierplus one line, to allow for printing the reference line.
3556219b2ee8SDavid du Colombier.PP
3557219b2ee8SDavid du ColombierIf indicated by \&\f(CWx\fR, the footer \&\f(CWfo\fR rereads the footnotes from \&\f(CWFN\fR in nofill mode
3558219b2ee8SDavid du Colombierin environment 1,
3559219b2ee8SDavid du Colombierand deletes \&\f(CWFN\fR.
3560219b2ee8SDavid du ColombierIf the footnotes were too large to fit, the macro \&\f(CWfx\fR will be trap-invoked to redivert
3561219b2ee8SDavid du Colombierthe overflow into \&\f(CWfy\fR,
3562219b2ee8SDavid du Colombierand the register \&\f(CWdn\fR will later indicate to the header whether \&\f(CWfy\fR is empty.
3563219b2ee8SDavid du Colombier.PP
3564219b2ee8SDavid du ColombierBoth \&\f(CWfo\fR and \&\f(CWfx\fR are planted in the nominal footer trap position in an order
3565219b2ee8SDavid du Colombierthat causes \&\f(CWfx\fR to be concealed unless the \&\f(CWfo\fR trap is moved.
3566219b2ee8SDavid du ColombierThe footer then terminates the overflow diversion, if necessary, and
3567219b2ee8SDavid du Colombierzeros \&\f(CWx\fR to disable \&\f(CWfx\fR,
3568219b2ee8SDavid du Colombierbecause the uncertainty correction
3569219b2ee8SDavid du Colombiertogether with a not-too-late triggering of the footer can result
3570219b2ee8SDavid du Colombierin the footnote rereading finishing before reaching the \&\f(CWfx\fR trap.
3571219b2ee8SDavid du Colombier.PP
3572219b2ee8SDavid du ColombierA good exercise for the student is to combine the multiple-column and footnote mechanisms.
3573219b2ee8SDavid du Colombier.SH
3574219b2ee8SDavid du ColombierThe Last Page
3575219b2ee8SDavid du Colombier.PP
3576219b2ee8SDavid du ColombierAfter the last input file has ended, \*(NR and \*(TR
3577219b2ee8SDavid du Colombierinvoke the \fIend macro\fR (§7), if any,
3578219b2ee8SDavid du Colombierand when it finishes, eject the remainder of the page.
3579219b2ee8SDavid du ColombierDuring the eject, any traps encountered are processed normally.
3580219b2ee8SDavid du ColombierAt the end of this last page, processing terminates
3581219b2ee8SDavid du Colombierunless a partial line, word, or partial word remains.
3582219b2ee8SDavid du ColombierIf it is desired that another page be started, the end-macro
3583219b2ee8SDavid du Colombier.P1 .1i
3584219b2ee8SDavid du Colombier&de en	\e"end-macro
3585219b2ee8SDavid du Colombier\ec
3586219b2ee8SDavid du Colombier\&'bp
3587219b2ee8SDavid du Colombier&&
3588219b2ee8SDavid du Colombier&em en
3589219b2ee8SDavid du Colombier.P2
3590219b2ee8SDavid du Colombierwill deposit a null partial word,
3591219b2ee8SDavid du Colombierand produce another last page.
3592219b2ee8SDavid du Colombier....1C
3593219b2ee8SDavid du Colombier.sp 100
3594219b2ee8SDavid du Colombier.BP
3595219b2ee8SDavid du Colombier........
3596219b2ee8SDavid du Colombier.TL
3597219b2ee8SDavid du ColombierSpecial Character Names
3598219b2ee8SDavid du Colombier.SP
3599219b2ee8SDavid du Colombier.PP
3600219b2ee8SDavid du ColombierThe following table lists names for a set of characters,
3601219b2ee8SDavid du Colombiermost of which have traditionally been provided by \*(TR using
3602219b2ee8SDavid du Colombierthe `special' or `symbol' font.
3603219b2ee8SDavid du ColombierMany of these sequences are old ways to get what are now Unicode
3604219b2ee8SDavid du Colombiercharacters;
3605219b2ee8SDavid du ColombierLucida Sans, for example, has glyphs corresponding to many of these
3606219b2ee8SDavid du Colombierbut does not have the special sequences.
3607219b2ee8SDavid du ColombierTherefore
3608219b2ee8SDavid du Colombierthe \*(TR sequence
3609219b2ee8SDavid du Colombier.CW \e(*F
3610219b2ee8SDavid du Colombiergives the character \(*F from the Times font instead of the
3611219b2ee8SDavid du Colombiercharacter Φ from the current font, in this case Lucida Sans.
3612219b2ee8SDavid du ColombierNot all sequences print on any particular device, including this one; Peter
3613219b2ee8SDavid du Colombierfaces appear in their place.
3614219b2ee8SDavid du Colombier.TS
3615219b2ee8SDavid du Colombiercenter;
3616219b2ee8SDavid du Colombierl l20fCW l l20fCW l l20fCW.
3617219b2ee8SDavid du Colombier\&\'	\e'	\(*m	\e(*m	\(~=	\e(~=
3618219b2ee8SDavid du Colombier\`	\e`	\(*n	\e(*n	\(ap	\e(ap
3619219b2ee8SDavid du Colombier\(em	\e(em	\(*c	\e(*c	\(!=	\e(!=
3620219b2ee8SDavid du Colombier\(en	\e(en	\(*o	\e(*o	\(->	\e(->
3621219b2ee8SDavid du Colombier\(hy	\e(hy	\(*p	\e(*p	\(<-	\e(<-
3622219b2ee8SDavid du Colombier\-	\e-	\(*r	\e(*r	\(ua	\e(ua
3623219b2ee8SDavid du Colombier\(bu	\e(bu	\(*s	\e(*s	\(da	\e(da
3624219b2ee8SDavid du Colombier\(sq	\e(sq	\(ts	\e(ts	\(mu	\e(mu
3625219b2ee8SDavid du Colombier\(ru	\e(ru	\(*t	\e(*t	\(di	\e(di
3626219b2ee8SDavid du Colombier\(14	\e(14	\(*u	\e(*u	\(+-	\e(+-
3627219b2ee8SDavid du Colombier\(12	\e(12	\(*f	\e(*f	\(cu	\e(cu
3628219b2ee8SDavid du Colombier\(34	\e(34	\(*x	\e(*x	\(ca	\e(ca
3629219b2ee8SDavid du Colombier\(fi	\e(fi	\(*q	\e(*q	\(sb	\e(sb
3630219b2ee8SDavid du Colombier\(fl	\e(fl	\(*w	\e(*w	\(sp	\e(sp
3631219b2ee8SDavid du Colombier\(ff	\e(ff	\(*A	\e(*A	\(ib	\e(ib
3632219b2ee8SDavid du Colombier\(Fi	\e(Fi	\(*B	\e(*B	\(ip	\e(ip
3633219b2ee8SDavid du Colombier\(Fl	\e(Fl	\(*G	\e(*G	\(if	\e(if
3634219b2ee8SDavid du Colombier\(de	\e(de	\(*D	\e(*D	\(pd	\e(pd
3635219b2ee8SDavid du Colombier\(dg	\e(dg	\(*E	\e(*E	\(gr	\e(gr
3636219b2ee8SDavid du Colombier\(fm	\e(fm	\(*Z	\e(*Z	\(no	\e(no
3637219b2ee8SDavid du Colombier\(ct	\e(ct	\(*Y	\e(*Y	\(is	\e(is
3638219b2ee8SDavid du Colombier\(rg	\e(rg	\(*H	\e(*H	\(pt	\e(pt
3639219b2ee8SDavid du Colombier\(co	\e(co	\(*I	\e(*I	\(es	\e(es
3640219b2ee8SDavid du Colombier\(pl	\e(pl	\(*K	\e(*K	\(mo	\e(mo
3641219b2ee8SDavid du Colombier\(mi	\e(mi	\(*L	\e(*L	\(br	\e(br
3642219b2ee8SDavid du Colombier\(eq	\e(eq	\(*M	\e(*M	\(dd	\e(dd
3643219b2ee8SDavid du Colombier\(**	\e(**	\(*N	\e(*N	\(rh	\e(rh
3644219b2ee8SDavid du Colombier\(sc	\e(sc	\(*C	\e(*C	\(lh	\e(lh
3645219b2ee8SDavid du Colombier\(aa	\e(aa	\(*O	\e(*O	\(L1	\e(bs
3646219b2ee8SDavid du Colombier\(ga	\e(ga	\(*P	\e(*P	\(or	\e(or
3647219b2ee8SDavid du Colombier\(ul	\e(ul	\(*R	\e(*R	\(ci	\e(ci
3648219b2ee8SDavid du Colombier\(sl	\e(sl	\(*S	\e(*S	\(lt	\e(lt
3649219b2ee8SDavid du Colombier\(*a	\e(*a	\(*T	\e(*T	\(lb	\e(lb
3650219b2ee8SDavid du Colombier\(*b	\e(*b	\(*U	\e(*U	\(rt	\e(rt
3651219b2ee8SDavid du Colombier\(*g	\e(*g	\(*F	\e(*F	\(rb	\e(rb
3652219b2ee8SDavid du Colombier\(*d	\e(*d	\(*X	\e(*X	\(lk	\e(lk
3653219b2ee8SDavid du Colombier\(*e	\e(*e	\(*Q	\e(*Q	\(rk	\e(rk
3654219b2ee8SDavid du Colombier\(*z	\e(*z	\(*W	\e(*W	\(bv	\e(bv
3655219b2ee8SDavid du Colombier\(*y	\e(*y	\(sr	\e(sr	\(lf	\e(lf
3656219b2ee8SDavid du Colombier\(*h	\e(*h	\(rn	\e(rn	\(rf	\e(rf
3657219b2ee8SDavid du Colombier\(*i	\e(*i	\(>=	\e(>=	\(lc	\e(lc
3658219b2ee8SDavid du Colombier\(*k	\e(*k	\(<=	\e(<=	\(rc	\e(rc
3659*7dd7cddfSDavid du Colombier\(*l	\e(*l	\(==	\e(==	\d\h'-5m'\(LH\u	\e(LH
3660219b2ee8SDavid du Colombier.TE
3661