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<@~+- 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<\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