* tmac/s.tmac (De, Ds): New aliases for .DE and .DS, respectively.
[s-roff.git] / doc / groff.texinfo
blobec30a5bb3984c802a9e04af73da108f2aa80536d
1 \input texinfo   @c -*-texinfo-*-
3 @c
4 @c Please convert this manual with `texi2dvi -e groff.texinfo' due to
5 @c problems in texinfo regarding expansion of user-defined macros.
6 @c
7 @c You need texinfo 4.3 or newer to format this document!
8 @c
10 @c %**start of header (This is for running Texinfo on a region.)
11 @setfilename groff
12 @settitle The GNU Troff Manual
13 @setchapternewpage odd
14 @footnotestyle separate
15 @c %**end of header (This is for running Texinfo on a region.)
18 @smallbook
20 @finalout
23 @copying
24 This manual documents GNU @code{troff} version 1.19.
26 Copyright @copyright{} 1994-2000, 2001, 2002, 2003
27 Free Software Foundation, Inc.
29 @quotation
30 Permission is granted to copy, distribute and/or modify this document
31 under the terms of the GNU Free Documentation License, Version 1.1 or
32 any later version published by the Free Software Foundation; with no
33 Invariant Sections, with the Front-Cover texts being `A GNU Manual,''
34 and with the Back-Cover Texts as in (a) below.  A copy of the
35 license is included in the section entitled `GNU Free Documentation
36 License.''
38 (a) The FSF's Back-Cover Text is: `You have freedom to copy and modify
39 this GNU Manual, like GNU software.  Copies published by the Free
40 Software Foundation raise funds for GNU development.''
41 @end quotation
42 @end copying
45 @c We use the following indices:
47 @c   cindex: concepts
48 @c   rqindex: requests
49 @c   esindex: escapes
50 @c   vindex: registers
51 @c   kindex: commands in font files
52 @c   pindex: programs and files
53 @c   tindex: environment variables
54 @c   maindex: macros
55 @c   stindex: strings
56 @c   opindex: operators
58 @c tindex and cindex are merged.
60 @defcodeindex rq
61 @defcodeindex es
62 @defcodeindex ma
63 @defcodeindex st
64 @defcodeindex op
65 @syncodeindex tp cp
68 @c To avoid uppercasing in @deffn while converting to info, we define
69 @c our special @Var{}.
71 @c Due to a (not officially documented) `feature' in makeinfo 4.0,
72 @c macros are not expanded in @deffn (but the macro definition is
73 @c properly removed), so we have to define @Var{} directly in TeX also.
75 @macro Var{arg}
76 \arg\
77 @end macro
78 @tex
79 \gdef\Var#1{\var{#1}}
80 @end tex
83 @c To assure correct HTML translation, some ugly hacks are necessary.
84 @c While processing a @def... request, the HTML translator looks at the
85 @c next line to decide whether it should start indentation or not.  If
86 @c it is something starting with @def... (e.g. @deffnx), it doesn't.
87 @c So we must assure during macro expansion that a @def... is seen.
89 @c The following macros have to be used:
91 @c One item:
93 @c   @Def...
95 @c Two items:
97 @c   @Def...List
98 @c   @Def...ListEnd
100 @c More than two:
102 @c   @Def...List
103 @c   @Def...Item
104 @c   @Def...Item
105 @c   ...
106 @c   @Def...ListEnd
108 @c The definition block must end with
110 @c   @endDef...
112 @c The above is valid for texinfo 4.0f and above.
115 @c a dummy macro to assure the `@def...'
117 @macro defdummy
118 @end macro
121 @c definition of requests
123 @macro Defreq{name, arg}
124 @deffn Request @t{.\name\} \arg\
125 @rqindex \name\
126 @end macro
128 @macro DefreqList{name, arg}
129 @deffn Request @t{.\name\} \arg\
130 @defdummy
131 @rqindex \name\
132 @end macro
134 @macro DefreqItem{name, arg}
135 @deffnx Request @t{.\name\} \arg\
136 @defdummy
137 @rqindex \name\
138 @end macro
140 @macro DefreqListEnd{name, arg}
141 @deffnx Request @t{.\name\} \arg\
142 @rqindex \name\
143 @end macro
145 @macro endDefreq
146 @end deffn
147 @end macro
150 @c definition of escapes
152 @macro Defesc{name, delimI, arg, delimII}
153 @deffn Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
154 @esindex \name\
155 @end macro
157 @macro DefescList{name, delimI, arg, delimII}
158 @deffn Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
159 @defdummy
160 @esindex \name\
161 @end macro
163 @macro DefescItem{name, delimI, arg, delimII}
164 @deffnx Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
165 @defdummy
166 @esindex \name\
167 @end macro
169 @macro DefescListEnd{name, delimI, arg, delimII}
170 @deffnx Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
171 @esindex \name\
172 @end macro
174 @macro endDefesc
175 @end deffn
176 @end macro
179 @c definition of registers
181 @macro Defreg{name}
182 @deffn Register @t{\\n[\name\]}
183 @vindex \name\
184 @end macro
186 @macro DefregList{name}
187 @deffn Register @t{\\n[\name\]}
188 @defdummy
189 @vindex \name\
190 @end macro
192 @macro DefregItem{name}
193 @deffnx Register @t{\\n[\name\]}
194 @defdummy
195 @vindex \name\
196 @end macro
198 @macro DefregListEnd{name}
199 @deffnx Register @t{\\n[\name\]}
200 @vindex \name\
201 @end macro
203 @macro endDefreg
204 @end deffn
205 @end macro
208 @c definition of registers specific to macro packages, preprocessors, etc.
210 @macro Defmpreg{name, package}
211 @deffn Register @t{\\n[\name\]}
212 @vindex \name\ @r{[}\package\@r{]}
213 @end macro
215 @macro DefmpregList{name, package}
216 @deffn Register @t{\\n[\name\]}
217 @defdummy
218 @vindex \name\ @r{[}\package\@r{]}
219 @end macro
221 @macro DefmpregItem{name, package}
222 @deffnx Register @t{\\n[\name\]}
223 @defdummy
224 @vindex \name\ @r{[}\package\@r{]}
225 @end macro
227 @macro DefmpregListEnd{name, package}
228 @deffnx Register @t{\\n[\name\]}
229 @vindex \name\ @r{[}\package\@r{]}
230 @end macro
232 @macro endDefmpreg
233 @end deffn
234 @end macro
237 @c definition of macros
239 @macro Defmac{name, arg, package}
240 @defmac @t{.\name\} \arg\
241 @maindex \name\ @r{[}\package\@r{]}
242 @end macro
244 @macro DefmacList{name, arg, package}
245 @defmac @t{.\name\} \arg\
246 @defdummy
247 @maindex \name\ @r{[}\package\@r{]}
248 @end macro
250 @macro DefmacItem{name, arg, package}
251 @defmacx @t{.\name\} \arg\
252 @defdummy
253 @maindex \name\ @r{[}\package\@r{]}
254 @end macro
256 @macro DefmacListEnd{name, arg, package}
257 @defmacx @t{.\name\} \arg\
258 @maindex \name\ @r{[}\package\@r{]}
259 @end macro
261 @macro endDefmac
262 @end defmac
263 @end macro
266 @c definition of strings
268 @macro Defstr{name, package}
269 @deffn String @t{\\*[\name\]}
270 @stindex \name\ @r{[}\package\@r{]}
271 @end macro
273 @macro DefstrList{name, package}
274 @deffn String @t{\\*[\name\]}
275 @defdummy
276 @stindex \name\ @r{[}\package\@r{]}
277 @end macro
279 @macro DefstrItem{name, package}
280 @deffnx String @t{\\*[\name\]}
281 @defdummy
282 @stindex \name\ @r{[}\package\@r{]}
283 @end macro
285 @macro DefstrListEnd{name, package}
286 @deffnx String @t{\\*[\name\]}
287 @stindex \name\ @r{[}\package\@r{]}
288 @end macro
290 @macro endDefstr
291 @end deffn
292 @end macro
295 @c our example macro
297 @macro Example
298 @example
299 @group
300 @end macro
302 @macro endExample
303 @end group
304 @end example
305 @end macro
308 @c <text>
310 @tex
311 \gdef\angles#1{\angleleft{}\r{#1}\angleright{}}
312 @end tex
314 @macro angles{text}
315 <\text\>
316 @end macro
319 @c a <= sign
321 @tex
322 \gdef\LE{\le}
323 @end tex
325 @macro LE
327 @end macro
330 @c We need special parentheses and brackets:
332 @c . Real parentheses in @deffn produce an error while compiling with
333 @c   TeX.
334 @c . Real brackets use the wrong font in @deffn, overriding @t{}.
336 @c Since macros aren't expanded in @deffn during -E, the following
337 @c definitions are for non-TeX only.
339 @c This is true for texinfo 4.0.
341 @macro lparen
343 @end macro
344 @macro rparen
346 @end macro
347 @macro lbrack
349 @end macro
350 @macro rbrack
352 @end macro
355 @tex
356 \gdef\gobblefirst#1#2{#2}
357 \gdef\putwordAppendix{\gobblefirst}
358 @end tex
361 @c Note: We say `Roman numerals' but `roman font'.
364 @dircategory Typesetting
365 @direntry
366 * Groff: (groff).               The GNU troff document formatting system.
367 @end direntry
370 @titlepage
371 @title groff
372 @subtitle The GNU implementation of @code{troff}
373 @subtitle Edition 1.19
374 @subtitle Spring 2003
375 @author by Trent A.@tie{}Fisher
376 @author and Werner Lemberg (@email{bug-groff@@gnu.org})
378 @page
379 @vskip 0pt plus 1filll
380 @insertcopying
381 @end titlepage
384 @contents
386 @ifinfo
387 @node Top, Introduction, (dir), (dir)
388 @top GNU troff
390 @insertcopying
391 @end ifinfo
393 @ifhtml
394 @node Top, Introduction, (dir), (dir)
395 @top GNU troff
397 @insertcopying
398 @end ifhtml
400 @menu
401 * Introduction::
402 * Invoking groff::
403 * Tutorial for Macro Users::
404 * Macro Packages::
405 * gtroff Reference::
406 * Preprocessors::
407 * Output Devices::
408 * File formats::
409 * Installation::
410 * Copying This Manual::
411 * Request Index::
412 * Escape Index::
413 * Operator Index::
414 * Register Index::
415 * Macro Index::
416 * String Index::
417 * Glyph Name Index::
418 * Font File Keyword Index::
419 * Program and File Index::
420 * Concept Index::
421 @end menu
425 @c =====================================================================
426 @c =====================================================================
428 @node Introduction, Invoking groff, Top, Top
429 @chapter Introduction
430 @cindex introduction
432 GNU @code{troff} (or @code{groff}) is a system for typesetting
433 documents.  @code{troff} is very flexible and has been in existence (and
434 use) for about 3@tie{}decades.  It is quite widespread and firmly
435 entrenched in the @acronym{UNIX} community.
437 @menu
438 * What Is groff?::
439 * History::
440 * groff Capabilities::
441 * Macro Package Intro::
442 * Preprocessor Intro::
443 * Output device intro::
444 * Credits::
445 @end menu
448 @c =====================================================================
450 @node What Is groff?, History, Introduction, Introduction
451 @section What Is @code{groff}?
452 @cindex what is @code{groff}?
453 @cindex @code{groff} -- what is it?
455 @code{groff} belongs to an older generation of document preparation
456 systems, which operate more like compilers than the more recent
457 interactive @acronym{WYSIWYG}@footnote{What You See Is What You Get}
458 systems.  @code{groff} and its contemporary counterpart, @TeX{}, both
459 work using a @dfn{batch} paradigm: The input (or @dfn{source}) files are
460 normal text files with embedded formatting commands.  These files can
461 then be processed by @code{groff} to produce a typeset document on a
462 variety of devices.
464 Likewise, @code{groff} should not be confused with a @dfn{word
465 processor}, since that term connotes an integrated system that includes
466 an editor and a text formatter.  Also, many word processors follow the
467 @acronym{WYSIWYG} paradigm discussed earlier.
469 Although @acronym{WYSIWYG} systems may be easier to use, they have a
470 number of disadvantages compared to @code{troff}:
472 @itemize @bullet
473 @item
474 They must be used on a graphics display to work on a document.
476 @item
477 Most of the @acronym{WYSIWYG} systems are either non-free or are not
478 very portable.
480 @item
481 @code{troff} is firmly entrenched in all @acronym{UNIX} systems.
483 @item
484 It is difficult to have a wide range of capabilities available within
485 the confines of a GUI/window system.
487 @item
488 It is more difficult to make global changes to a document.
489 @end itemize
491 @quotation
492 ``GUIs normally make it simple to accomplish simple actions and
493 impossible to accomplish complex actions.''  --Doug Gwyn (22/Jun/91 in
494 @code{comp.unix.wizards})
495 @end quotation
498 @c =====================================================================
500 @node History, groff Capabilities, What Is groff?, Introduction
501 @section History
502 @cindex history
504 @cindex @code{runoff}, the program
505 @cindex @code{rf}, the program
506 @code{troff} can trace its origins back to a formatting program called
507 @code{runoff}, written by J.@tie{}E.@tie{}Saltzer, which ran on MIT's CTSS
508 operating system in the mid-sixties.  This name came from the common
509 phrase of the time ``I'll run off a document.''  Bob Morris ported it to
510 the 635 architecture and called the program @code{roff} (an abbreviation
511 of @code{runoff}).  It was rewritten as @code{rf} for the @w{PDP-7}
512 (before having @acronym{UNIX}), and at the same time (1969), Doug
513 McIllroy rewrote an extended and simplified version of @code{roff} in
514 the @acronym{BCPL} programming language.
516 @cindex @code{roff}, the program
517 The first version of @acronym{UNIX} was developed on a @w{PDP-7} which
518 was sitting around Bell Labs.  In 1971 the developers wanted to get a
519 @w{PDP-11} for further work on the operating system.  In order to
520 justify the cost for this system, they proposed that they would
521 implement a document formatting system for the @acronym{AT&T} patents
522 division.  This first formatting program was a reimplementation of
523 McIllroy's @code{roff}, written by J.@tie{}F.@tie{}Ossanna.
525 @cindex @code{nroff}, the program
526 When they needed a more flexible language, a new version of @code{roff}
527 called @code{nroff} (``Newer @code{roff}'') was written.  It had a much
528 more complicated syntax, but provided the basis for all future versions.
529 When they got a Graphic Systems CAT Phototypesetter, Ossanna wrote a
530 version of @code{nroff} that would drive it.  It was dubbed
531 @code{troff}, for ``typesetter @code{roff}'', although many people have
532 speculated that it actually means ``Times @code{roff}'' because of the
533 use of the Times font family in @code{troff} by default.  As such, the
534 name @code{troff} is pronounced `@w{t-roff}' rather than `trough'.
536 With @code{troff} came @code{nroff} (they were actually the same program
537 except for some @samp{#ifdef}s), which was for producing output for line
538 printers and character terminals.  It understood everything @code{troff}
539 did, and ignored the commands which were not applicable (e.g.@: font
540 changes).
542 Since there are several things which cannot be done easily in
543 @code{troff}, work on several preprocessors began.  These programs would
544 transform certain parts of a document into @code{troff}, which made a
545 very natural use of pipes in @acronym{UNIX}.
547 The @code{eqn} preprocessor allowed mathematical formul@ae{} to be
548 specified in a much simpler and more intuitive manner.  @code{tbl} is a
549 preprocessor for formatting tables.  The @code{refer} preprocessor (and
550 the similar program, @code{bib}) processes citations in a document
551 according to a bibliographic database.
553 Unfortunately, Ossanna's @code{troff} was written in @w{PDP-11} assembly
554 language and produced output specifically for the CAT phototypesetter.
555 He rewrote it in C, although it was now 7000@tie{}lines of uncommented
556 code and still dependent on the CAT.  As the CAT became less common, and
557 was no longer supported by the manufacturer, the need to make it support
558 other devices became a priority.  However, before this could be done,
559 Ossanna was killed in a car accident.
561 @pindex ditroff
562 @cindex @code{ditroff}, the program
563 So, Brian Kernighan took on the task of rewriting @code{troff}.  The
564 newly rewritten version produced device independent code which was
565 very easy for postprocessors to read and translate to the appropriate
566 printer codes.  Also, this new version of @code{troff} (called
567 @code{ditroff} for ``device independent @code{troff}'') had several
568 extensions, which included drawing functions.
570 Due to the additional abilities of the new version of @code{troff},
571 several new preprocessors appeared.  The @code{pic} preprocessor
572 provides a wide range of drawing functions.  Likewise the @code{ideal}
573 preprocessor did the same, although via a much different paradigm.  The
574 @code{grap} preprocessor took specifications for graphs, but, unlike
575 other preprocessors, produced @code{pic} code.
577 James Clark began work on a GNU implementation of @code{ditroff} in
578 early@tie{}1989.  The first version, @code{groff}@tie{}0.3.1, was released
579 June@tie{}1990.  @code{groff} included:
581 @itemize @bullet
582 @item
583 A replacement for @code{ditroff} with many extensions.
585 @item
586 The @code{soelim}, @code{pic}, @code{tbl}, and @code{eqn} preprocessors.
588 @item
589 Postprocessors for character devices, @sc{PostScript}, @TeX{} DVI, and
590 X@tie{}Windows.  GNU @code{troff} also eliminated the need for a
591 separate @code{nroff} program with a postprocessor which would produce
592 @acronym{ASCII} output.
594 @item
595 A version of the @file{me} macros and an implementation of the
596 @file{man} macros.
597 @end itemize
599 Also, a front-end was included which could construct the, sometimes
600 painfully long, pipelines required for all the post- and preprocessors.
602 Development of GNU @code{troff} progressed rapidly, and saw the
603 additions of a replacement for @code{refer}, an implementation of the
604 @file{ms} and @file{mm} macros, and a program to deduce how to format a
605 document (@code{grog}).
607 It was declared a stable (i.e.@: non-beta) package with the release of
608 version@tie{}1.04 around November@tie{}1991.
610 Beginning in@tie{}1999, @code{groff} has new maintainers (the package was
611 an orphan for a few years).  As a result, new features and programs like
612 @code{grn}, a preprocessor for gremlin images, and an output device to
613 produce @acronym{HTML} output have been added.
616 @c =====================================================================
618 @node groff Capabilities, Macro Package Intro, History, Introduction
619 @section @code{groff} Capabilities
620 @cindex @code{groff} capabilities
621 @cindex capabilities of @code{groff}
623 So what exactly is @code{groff} capable of doing?  @code{groff} provides
624 a wide range of low-level text formatting operations.  Using these, it
625 is possible to perform a wide range of formatting tasks, such as
626 footnotes, table of contents, multiple columns, etc.  Here's a list of
627 the most important operations supported by @code{groff}:
629 @itemize @bullet
630 @item
631 text filling, adjusting, and centering
633 @item
634 hyphenation
636 @item
637 page control
639 @item
640 font and glyph size control
642 @item
643 vertical spacing (e.g.@: double-spacing)
645 @item
646 line length and indenting
648 @item
649 macros, strings, diversions, and traps
651 @item
652 number registers
654 @item
655 tabs, leaders, and fields
657 @item
658 input and output conventions and character translation
660 @item
661 overstrike, bracket, line drawing, and zero-width functions
663 @item
664 local horizontal and vertical motions and the width function
666 @item
667 three-part titles
669 @item
670 output line numbering
672 @item
673 conditional acceptance of input
675 @item
676 environment switching
678 @item
679 insertions from the standard input
681 @item
682 input/output file switching
684 @item
685 output and error messages
686 @end itemize
689 @c =====================================================================
691 @node Macro Package Intro, Preprocessor Intro, groff Capabilities, Introduction
692 @section Macro Packages
693 @cindex macro packages
695 Since @code{groff} provides such low-level facilities, it can be quite
696 difficult to use by itself.  However, @code{groff} provides a
697 @dfn{macro} facility to specify how certain routine operations
698 (e.g.@tie{}starting paragraphs, printing headers and footers, etc.)@:
699 should be done.  These macros can be collected together into a @dfn{macro
700 package}.  There are a number of macro packages available; the most
701 common (and the ones described in this manual) are @file{man},
702 @file{mdoc}, @file{me}, @file{ms}, and @file{mm}.
705 @c =====================================================================
707 @node Preprocessor Intro, Output device intro, Macro Package Intro, Introduction
708 @section Preprocessors
709 @cindex preprocessors
711 Although @code{groff} provides most functions needed to format a
712 document, some operations would be unwieldy (e.g.@: to draw pictures).
713 Therefore, programs called @dfn{preprocessors} were written which
714 understand their own language and produce the necessary @code{groff}
715 operations.  These preprocessors are able to differentiate their own
716 input from the rest of the document via markers.
718 To use a preprocessor, @acronym{UNIX} pipes are used to feed the output
719 from the preprocessor into @code{groff}.  Any number of preprocessors
720 may be used on a given document; in this case, the preprocessors are
721 linked together into one pipeline.  However, with @code{groff}, the user
722 does not need to construct the pipe, but only tell @code{groff} what
723 preprocessors to use.
725 @code{groff} currently has preprocessors for producing tables
726 (@code{tbl}), typesetting equations (@code{eqn}), drawing pictures
727 (@code{pic} and @code{grn}), and for processing bibliographies
728 (@code{refer}).  An associated program which is useful when dealing with
729 preprocessors is @code{soelim}.
731 A free implementation of @code{grap}, a preprocessor for drawing graphs,
732 can be obtained as an extra package; @code{groff} can use @code{grap}
733 also.
735 There are other preprocessors in existence, but, unfortunately, no free
736 implementations are available.  Among them are preprocessors for drawing
737 mathematical pictures (@code{ideal}) and chemical structures
738 (@code{chem}).
741 @c =====================================================================
743 @node Output device intro, Credits, Preprocessor Intro, Introduction
744 @section Output Devices
745 @cindex postprocessors
746 @cindex output devices
747 @cindex devices for output
749 @code{groff} actually produces device independent code which may be
750 fed into a postprocessor to produce output for a particular device.
751 Currently, @code{groff} has postprocessors for @sc{PostScript}
752 devices, character terminals, X@tie{}Windows (for previewing), @TeX{}
753 DVI format, HP LaserJet@tie{}4 and Canon LBP printers (which use
754 @acronym{CAPSL}), and @acronym{HTML}.
757 @c =====================================================================
759 @node Credits,  , Output device intro, Introduction
760 @section Credits
761 @cindex credits
763 Large portions of this manual were taken from existing documents, most
764 notably, the manual pages for the @code{groff} package by James Clark,
765 and Eric Allman's papers on the @file{me} macro package.
767 The section on the @file{man} macro package is partly based on
768 Susan@tie{}G.@: Kleinmann's @file{groff_man} manual page written for the
769 Debian GNU/Linux system.
771 Larry Kollar contributed the section in the @file{ms} macro package.
775 @c =====================================================================
776 @c =====================================================================
778 @node Invoking groff, Tutorial for Macro Users, Introduction, Top
779 @chapter Invoking @code{groff}
780 @cindex invoking @code{groff}
781 @cindex @code{groff} invocation
783 This section focuses on how to invoke the @code{groff} front end.  This
784 front end takes care of the details of constructing the pipeline among
785 the preprocessors, @code{gtroff} and the postprocessor.
787 It has become a tradition that GNU programs get the prefix @samp{g} to
788 distinguish it from its original counterparts provided by the host (see
789 @ref{Environment}, for more details).  Thus, for example, @code{geqn} is
790 GNU @code{eqn}.  On operating systems like GNU/Linux or the Hurd, which
791 don't contain proprietary versions of @code{troff}, and on
792 MS-DOS/MS-Windows, where @code{troff} and associated programs are not
793 available at all, this prefix is omitted since GNU @code{troff} is the
794 only used incarnation of @code{troff}.  Exception: @samp{groff} is never
795 replaced by @samp{roff}.
797 In this document, we consequently say @samp{gtroff} when talking about
798 the GNU @code{troff} program.  All other implementations of @code{troff}
799 are called @acronym{AT&T} @code{troff} which is the common origin of
800 all @code{troff} derivates (with more or less compatible changes).
801 Similarly, we say @samp{gpic}, @samp{geqn}, etc.
803 @menu
804 * Groff Options::
805 * Environment::
806 * Macro Directories::
807 * Font Directories::
808 * Paper Size::
809 * Invocation Examples::
810 @end menu
813 @c =====================================================================
815 @node Groff Options, Environment, Invoking groff, Invoking groff
816 @section Options
817 @cindex options
819 @pindex groff
820 @pindex gtroff
821 @pindex gpic
822 @pindex geqn
823 @pindex ggrn
824 @pindex grap
825 @pindex gtbl
826 @pindex grefer
827 @pindex gsoelim
828 @code{groff} normally runs the @code{gtroff} program and a postprocessor
829 appropriate for the selected device.  The default device is @samp{ps}
830 (but it can be changed when @code{groff} is configured and built).  It
831 can optionally preprocess with any of @code{gpic}, @code{geqn},
832 @code{gtbl}, @code{ggrn}, @code{grap}, @code{grefer}, or @code{gsoelim}.
834 This section only documents options to the @code{groff} front end.  Many
835 of the arguments to @code{groff} are passed on to @code{gtroff},
836 therefore those are also included.  Arguments to pre- or postprocessors
837 can be found in @ref{Invoking gpic}, @ref{Invoking geqn}, @ref{Invoking
838 gtbl}, @ref{Invoking ggrn}, @ref{Invoking grefer}, @ref{Invoking
839 gsoelim}, @ref{Invoking grotty}, @ref{Invoking grops}, @ref{Invoking
840 grohtml}, @ref{Invoking grodvi}, @ref{Invoking grolj4}, @ref{Invoking
841 grolbp}, and @ref{Invoking gxditview}.
843 The command line format for @code{groff} is:
845 @Example
846 groff [ -abceghilpstvzCEGNRSUVXZ ] [ -F@var{dir} ] [ -m@var{name} ]
847       [ -T@var{def} ] [ -f@var{fam} ] [ -w@var{name} ] [ -W@var{name} ]
848       [ -M@var{dir} ] [ -d@var{cs} ] [ -r@var{cn} ] [ -n@var{num} ]
849       [ -o@var{list} ] [ -P@var{arg} ] [ -L@var{arg} ] [ -I@var{dir} ]
850       [ @var{files}@dots{} ]
851 @endExample
853 The command line format for @code{gtroff} is as follows.
855 @Example
856 gtroff [ -abcivzCERU ] [ -w@var{name} ] [ -W@var{name} ] [ -d@var{cs} ]
857        [ -f@var{fam} ] [ -m@var{name} ] [ -n@var{num} ]
858        [ -o@var{list} ] [ -r@var{cn} ] [ -T@var{name} ]
859        [ -F@var{dir} ] [ -M@var{dir} ] [ @var{files}@dots{} ]
860 @endExample
862 @noindent
863 Obviously, many of the options to @code{groff} are actually passed on to
864 @code{gtroff}.
866 Options without an argument can be grouped behind a single@tie{}@option{-}.
867 A filename of@tie{}@file{-} denotes the standard input.  It is possible to
868 have whitespace between an option and its parameter.
870 The @code{grog} command can be used to guess the correct @code{groff}
871 command to format a file.
873 Here's the description of the command-line options:
875 @cindex command-line options
876 @table @samp
877 @item -h
878 Print a help message.
880 @item -e
881 Preprocess with @code{geqn}.
883 @item -t
884 Preprocess with @code{gtbl}.
886 @item -g
887 Preprocess with @code{ggrn}.
889 @item -G
890 Preprocess with @code{grap}.
892 @item -p
893 Preprocess with @code{gpic}.
895 @item -s
896 Preprocess with @code{gsoelim}.
898 @item -c
899 Suppress color output.
901 @item -R
902 Preprocess with @code{grefer}.  No mechanism is provided for passing
903 arguments to @code{grefer} because most @code{grefer} options have
904 equivalent commands which can be included in the file.  @xref{grefer},
905 for more details.
907 @pindex troffrc
908 @pindex troffrc-end
909 Note that @code{gtroff} also accepts a @option{-R} option, which is not
910 accessible via @code{groff}.  This option prevents the loading of the
911 @file{troffrc} and @file{troffrc-end} files.
913 @item -v
914 Make programs run by @code{groff} print out their version number.
916 @item -V
917 Print the pipeline on @code{stdout} instead of executing it.
919 @item -z
920 Suppress output from @code{gtroff}.  Only error messages are printed.
922 @item -Z
923 Do not postprocess the output of @code{gtroff}.  Normally @code{groff}
924 automatically runs the appropriate postprocessor.
926 @item -P@var{arg}
927 Pass @var{arg} to the postprocessor.  Each argument should be passed
928 with a separate @option{-P} option.  Note that @code{groff} does not
929 prepend @samp{-} to @var{arg} before passing it to the postprocessor.
931 @item -l
932 Send the output to a spooler for printing.  The command used for this is
933 specified by the @code{print} command in the device description file
934 (see @ref{Font Files}, for more info).  If not present, @option{-l} is
935 ignored.
937 @item -L@var{arg}
938 Pass @var{arg} to the spooler.  Each argument should be passed with a
939 separate @option{-L} option.  Note that @code{groff} does not prepend
940 a @samp{-} to @var{arg} before passing it to the postprocessor.
941 If the @code{print} keyword in the device description file is missing,
942 @option{-L} is ignored.
944 @item -T@var{dev}
945 Prepare output for device @var{dev}.  The default device is @samp{ps},
946 unless changed when @code{groff} was configured and built.  The
947 following are the output devices currently available:
949 @table @code
950 @item ps
951 For @sc{PostScript} printers and previewers.
953 @item dvi
954 For @TeX{} DVI format.
956 @item X75
957 For a 75@dmn{dpi} X11 previewer.
959 @item X75-12
960 For a 75@dmn{dpi} X11 previewer with a 12@dmn{pt} base font in the
961 document.
963 @item X100
964 For a 100@dmn{dpi} X11 previewer.
966 @item X100-12
967 For a 100@dmn{dpi} X11 previewer with a 12@dmn{pt} base font in the
968 document.
970 @item ascii
971 @cindex encoding, output, @acronym{ASCII}
972 @cindex @acronym{ASCII}, output encoding
973 @cindex output encoding, @acronym{ASCII}
974 For typewriter-like devices using the (7-bit) @acronym{ASCII}
975 character set.
977 @item latin1
978 @cindex encoding, output, @w{latin-1} (ISO @w{8859-1})
979 @cindex @w{latin-1} (ISO @w{8859-1}), output encoding
980 @cindex ISO @w{8859-1} (@w{latin-1}), output encoding
981 @cindex output encoding, @w{latin-1} (ISO @w{8859-1})
982 For typewriter-like devices that support the @w{Latin-1}
983 (ISO@tie{}@w{8859-1}) character set.
985 @item utf8
986 @cindex encoding, output, @w{utf-8}
987 @cindex @w{utf-8}, output encoding
988 @cindex output encoding, @w{utf-8}
989 For typewriter-like devices which use the Unicode (ISO@tie{}10646)
990 character set with @w{UTF-8} encoding.
992 @item cp1047
993 @cindex encoding, output, @acronym{EBCDIC}
994 @cindex @acronym{EBCDIC}, output encoding
995 @cindex output encoding, @acronym{EBCDIC}
996 @cindex encoding, output, cp1047
997 @cindex cp1047, output encoding
998 @cindex output encoding, cp1047
999 @cindex IBM cp1047 output encoding
1000 For typewriter-like devices which use the @acronym{EBCDIC} encoding IBM
1001 cp1047.
1003 @item lj4
1004 For HP LaserJet4-compatible (or other PCL5-compatible) printers.
1006 @item lbp
1007 For Canon @acronym{CAPSL} printers (@w{LBP-4} and @w{LBP-8} series laser
1008 printers).
1010 @pindex pre-grohtml
1011 @pindex post-grohtml
1012 @cindex @code{grohtml}, the program
1013 @item html
1014 To produce @acronym{HTML} output.  Note that the @acronym{HTML} driver
1015 consists of two parts, a preprocessor (@code{pre-grohtml}) and a
1016 postprocessor (@code{post-grohtml}).
1017 @end table
1019 @cindex output device name string register (@code{.T})
1020 @cindex output device usage number register (@code{.T})
1021 The predefined @code{gtroff} string register @code{.T} contains the
1022 current output device; the read-only number register @code{.T} is set
1023 to@tie{}1 if this option is used (which is always true if @code{groff} is
1024 used to call @code{gtroff}).  @xref{Built-in Registers}.
1026 The postprocessor to be used for a device is specified by the
1027 @code{postpro} command in the device description file.  (@xref{Font
1028 Files}, for more info.)  This can be overridden with the @option{-X}
1029 option.
1031 @item -X
1032 Preview with @code{gxditview} instead of using the usual postprocessor.
1033 This is unlikely to produce good results except with @option{-Tps}.
1035 Note that this is not the same as using @option{-TX75} or
1036 @option{-TX100} to view a document with @code{gxditview}: The former
1037 uses the metrics of the specified device, whereas the latter uses
1038 X-specific fonts and metrics.
1040 @item -N
1041 Don't allow newlines with @code{eqn} delimiters.  This is the same as
1042 the @option{-N} option in @code{geqn}.
1044 @item -S
1045 @cindex @code{open} request, and safer mode
1046 @cindex @code{opena} request, and safer mode
1047 @cindex @code{pso} request, and safer mode
1048 @cindex @code{sy} request, and safer mode
1049 @cindex @code{pi} request, and safer mode
1050 @cindex safer mode
1051 @cindex mode, safer
1052 Safer mode.  Pass the @option{-S} option to @code{gpic} and disable the
1053 @code{open}, @code{opena}, @code{pso}, @code{sy}, and @code{pi}
1054 requests.  For security reasons, this is enabled by default.
1056 @item -U
1057 @cindex mode, unsafe
1058 @cindex unsafe mode
1059 Unsafe mode.  This enables the @code{open}, @code{opena}, @code{pso},
1060 @code{sy}, and @code{pi} requests.
1062 @item -a
1063 @cindex @acronym{ASCII} approximation output register (@code{.A})
1064 Generate an @acronym{ASCII} approximation of the typeset output.  The
1065 read-only register @code{.A} is then set to@tie{}1.  @xref{Built-in
1066 Registers}.  A typical example is
1068 @Example
1069 groff -a -man -Tdvi troff.man | less
1070 @endExample
1072 @noindent
1073 which shows how lines are broken for the DVI device.  Note that this
1074 option is rather useless today since graphic output devices are
1075 available virtually everywhere.
1077 @item -b
1078 Print a backtrace with each warning or error message.  This backtrace
1079 should help track down the cause of the error.  The line numbers given
1080 in the backtrace may not always be correct: @code{gtroff} can get
1081 confused by @code{as} or @code{am} requests while counting line numbers.
1083 @item -i
1084 Read the standard input after all the named input files have been
1085 processed.
1087 @item -w@var{name}
1088 Enable warning @var{name}.  Available warnings are described in
1089 @ref{Debugging}.  Multiple @option{-w} options are allowed.
1091 @item -W@var{name}
1092 Inhibit warning @var{name}.  Multiple @option{-W} options are allowed.
1094 @item -E
1095 Inhibit all error messages.
1097 @item -C
1098 Enable compatibility mode.  @xref{Implementation Differences}, for the
1099 list of incompatibilities between @code{groff} and @acronym{AT&T}
1100 @code{troff}.
1102 @item -d@var{c}@var{s}
1103 @itemx -d@var{name}=@var{s}
1104 Define @var{c} or @var{name} to be a string@tie{}@var{s}.  @var{c}@tie{}must
1105 be a one-letter name; @var{name} can be of arbitrary length.  All string
1106 assignments happen before loading any macro file (including the start-up
1107 file).
1109 @item -f@var{fam}
1110 Use @var{fam} as the default font family.  @xref{Font Families}.
1112 @item -m@var{name}
1113 Read in the file @file{@var{name}.tmac}.  Normally @code{groff} searches
1114 for this in its macro directories.  If it isn't found, it tries
1115 @file{tmac.@var{name}} (searching in the same directories).
1117 @item -n@var{num}
1118 Number the first page @var{num}.
1120 @item -o@var{list}
1121 @cindex print current page register (@code{.P})
1122 Output only pages in @var{list}, which is a comma-separated list of page
1123 ranges; @samp{@var{n}} means print page@tie{}@var{n}, @samp{@var{m}-@var{n}}
1124 means print every page between @var{m} and@tie{}@var{n}, @samp{-@var{n}}
1125 means print every page up to@tie{}@var{n}, @samp{@var{n}-} means print every
1126 page beginning with@tie{}@var{n}.  @code{gtroff} exits after printing the
1127 last page in the list.  All the ranges are inclusive on both ends.
1129 Within @code{gtroff}, this information can be extracted with the
1130 @samp{.P} register.  @xref{Built-in Registers}.
1132 If your document restarts page numbering at the beginning of each
1133 chapter, then @code{gtroff} prints the specified page range for each
1134 chapter.
1136 @item -r@var{c}@var{n}
1137 @itemx -r@var{name}=@var{n}
1138 Set number register@tie{}@var{c} or @var{name} to the value@tie{}@var{n}.
1139 @var{c}@tie{}must be a one-letter name; @var{name} can be of arbitrary
1140 length.  @var{n}@tie{}can be any @code{gtroff} numeric expression.  All
1141 register assignments happen before loading any macro file (including
1142 the start-up file).
1144 @item -F@var{dir}
1145 Search @file{@var{dir}} for subdirectories @file{dev@var{name}}
1146 (@var{name} is the name of the device), for the @file{DESC} file, and
1147 for font files before looking in the standard directories (@pxref{Font
1148 Directories}).  This option is passed to all pre- and postprocessors
1149 using the @env{GROFF_FONT_PATH} environment variable.
1151 @item -M@var{dir}
1152 Search directory @file{@var{dir}} for macro files before the standard
1153 directories (@pxref{Macro Directories}).
1155 @item -I@var{dir}
1156 This option is as described in @ref{gsoelim}.  It implies the
1157 @option{-s} option.
1158 @end table
1161 @c =====================================================================
1163 @node Environment, Macro Directories, Groff Options, Invoking groff
1164 @section Environment
1165 @cindex environment variables
1166 @cindex variables in environment
1168 There are also several environment variables (of the operating system,
1169 not within @code{gtroff}) which can modify the behavior of @code{groff}.
1171 @table @code
1172 @item GROFF_COMMAND_PREFIX
1173 @tindex GROFF_COMMAND_PREFIX@r{, environment variable}
1174 @cindex command prefix
1175 @cindex prefix, for commands
1176 If this is set to@tie{}@var{X}, then @code{groff} runs @code{@var{X}troff}
1177 instead of @code{gtroff}.  This also applies to @code{tbl}, @code{pic},
1178 @code{eqn}, @code{grn}, @code{refer}, and @code{soelim}.  It does not
1179 apply to @code{grops}, @code{grodvi}, @code{grotty}, @code{pre-grohtml},
1180 @code{post-grohtml}, @code{grolj4}, and @code{gxditview}.
1182 The default command prefix is determined during the installation process.
1183 If a non-GNU troff system is found, prefix @samp{g} is used, none
1184 otherwise.
1186 @item GROFF_TMAC_PATH
1187 @tindex GROFF_TMAC_PATH@r{, environment variable}
1188 A colon-separated list of directories in which to search for macro files
1189 (before the default directories are tried).  @xref{Macro Directories}.
1191 @item GROFF_TYPESETTER
1192 @tindex GROFF_TYPESETTER@r{, environment variable}
1193 The default output device.
1195 @item GROFF_FONT_PATH
1196 @tindex GROFF_FONT_PATH@r{, environment variable}
1197 A colon-separated list of directories in which to search for the
1198 @code{dev}@var{name} directory (before the default directories are
1199 tried).  @xref{Font Directories}.
1201 @item GROFF_BIN_PATH
1202 @tindex GROFF_BIN_PATH@r{, environment variable}
1203 This search path, followed by @code{PATH}, is used for commands executed
1204 by @code{groff}.
1206 @item GROFF_TMPDIR
1207 @tindex GROFF_TMPDIR@r{, environment variable}
1208 @tindex TMPDIR@r{, environment variable}
1209 The directory in which @code{groff} creates temporary files.  If this is
1210 not set and @env{TMPDIR} is set, temporary files are created in that
1211 directory.  Otherwise temporary files are created in a system-dependent
1212 default directory (on Unix and GNU/Linux systems, this is usually
1213 @file{/tmp}).  @code{grops}, @code{grefer}, @code{pre-grohtml}, and
1214 @code{post-grohtml} can create temporary files in this directory.
1215 @end table
1217 Note that MS-DOS and MS-Windows ports of @code{groff} use semi-colons,
1218 rather than colons, to separate the directories in the lists described
1219 above.
1222 @c =====================================================================
1224 @node Macro Directories, Font Directories, Environment, Invoking groff
1225 @section Macro Directories
1226 @cindex macro directories
1227 @cindex directories for macros
1228 @cindex searching macros
1229 @cindex macros, searching
1231 All macro file names must be named @code{@var{name}.tmac} or
1232 @code{tmac.@var{name}} to make the @option{-m@var{name}} command line
1233 option work.  The @code{mso} request doesn't have this restriction; any
1234 file name can be used, and @code{gtroff} won't try to append or prepend
1235 the @samp{tmac} string.
1237 @cindex tmac, directory
1238 @cindex directory, for tmac files
1239 @cindex tmac, path
1240 @cindex path, for tmac files
1241 @cindex searching macro files
1242 @cindex macro files, searching
1243 @cindex files, macro, searching
1244 Macro files are kept in the @dfn{tmac directories}, all of which
1245 constitute the @dfn{tmac path}.  The elements of the search path for
1246 macro files are (in that order):
1248 @itemize @bullet
1249 @item
1250 The directories specified with @code{gtroff}'s or @code{groff}'s
1251 @option{-M} command line option.
1253 @item
1254 @tindex GROFF_TMAC_PATH@r{, environment variable}
1255 The directories given in the @env{GROFF_TMAC_PATH} environment
1256 variable.
1258 @item
1259 @cindex safer mode
1260 @cindex mode, safer
1261 @cindex unsafe mode
1262 @cindex mode, unsafe
1263 @cindex current directory
1264 @cindex directory, current
1265 The current directory (only if in unsafe mode using the @option{-U}
1266 command line switch).
1268 @item
1269 @cindex home directory
1270 @cindex directory, home
1271 The home directory.
1273 @item
1274 @cindex site-specific directory
1275 @cindex directory, site-specific
1276 @cindex platform-specific directory
1277 @cindex directory, platform-specific
1278 A platform-dependent directory, a site-specific (platform-independent)
1279 directory, and the main tmac directory; the default locations are
1281 @Example
1282 /usr/local/lib/groff/site-tmac
1283 /usr/local/share/groff/site-tmac
1284 /usr/local/share/groff/1.18.2/tmac
1285 @endExample
1287 @noindent
1288 assuming that the version of @code{groff} is 1.18.2, and the installation
1289 prefix was @file{/usr/local}.  It is possible to fine-tune those
1290 directories during the installation process.
1291 @end itemize
1294 @c =====================================================================
1296 @node Font Directories, Paper Size, Macro Directories, Invoking groff
1297 @section Font Directories
1298 @cindex font directories
1299 @cindex directories for fonts
1300 @cindex searching fonts
1301 @cindex fonts, searching
1303 Basically, there is no restriction how font files for @code{groff} are
1304 named and how long font names are; however, to make the font family
1305 mechanism work (@pxref{Font Families}), fonts within a family should
1306 start with the family name, followed by the shape.  For example, the
1307 Times family uses @samp{T} for the family name and @samp{R}, @samp{B},
1308 @samp{I}, and @samp{BI} to indicate the shapes `roman', `bold',
1309 `italic', and `bold italic', respectively.  Thus the final font names
1310 are @samp{TR}, @samp{TB}, @samp{TI}, and @samp{TBI}.
1312 @cindex font path
1313 @cindex path, for font files
1314 All font files are kept in the @dfn{font directories} which constitute
1315 the @dfn{font path}.  The file search functions will always append the
1316 directory @code{dev}@var{name}, where @var{name} is the name of the
1317 output device.  Assuming, say, DVI output, and @file{/foo/bar} as a
1318 font directory, the font files for @code{grodvi} must be in
1319 @file{/foo/bar/devdvi}.
1321 The elements of the search path for font files are (in that order):
1323 @itemize @bullet
1324 @item
1325 The directories specified with @code{gtroff}'s or @code{groff}'s
1326 @option{-F} command line option.  All device drivers and some
1327 preprocessors also have this option.
1329 @item
1330 @tindex GROFF_FONT_PATH@r{, environment variable}
1331 The directories given in the @env{GROFF_FONT_PATH} environment
1332 variable.
1334 @item
1335 @cindex site-specific directory
1336 @cindex directory, site-specific
1337 A site-specific directory and the main font directory; the default
1338 locations are
1340 @Example
1341 /usr/local/share/groff/site-font
1342 /usr/local/share/groff/1.18.2/font
1343 @endExample
1345 @noindent
1346 assuming that the version of @code{groff} is 1.18.2, and the installation
1347 prefix was @file{/usr/local}.  It is possible to fine-tune those
1348 directories during the installation process.
1349 @end itemize
1352 @c =====================================================================
1354 @node Paper Size, Invocation Examples, Font Directories, Invoking groff
1355 @section Paper Size
1356 @cindex paper size
1357 @cindex size, paper
1358 @cindex landscape page orientation
1359 @cindex orientation, landscape
1360 @cindex page orientation, landscape
1362 In groff, the page size for @code{gtroff} and for output devices are
1363 handled separately.  @xref{Page Layout}, for vertical manipulation of
1364 the page size.  @xref{Line Layout}, for horizontal changes.
1366 A default paper size can be set in the device's @file{DESC} file.  Most
1367 output devices also have a command line option @option{-p} to override
1368 the default paper size and option @option{-l} to use landscape
1369 orientation.  @xref{DESC File Format}, for a description of the
1370 @code{papersize} keyword which takes the same argument as @option{-p}.
1372 @pindex papersize.tmac
1373 @pindex troffrc
1374 A convenient shorthand to set a particular paper size for @code{gtroff}
1375 is command line option @option{-dpaper=@var{size}}.  This defines string
1376 @code{paper} which is processed in file @file{papersize.tmac} (loaded in
1377 the start-up file @file{troffrc} by default).  Possible values for
1378 @var{size} are the same as the predefined values for the
1379 @code{papersize} keyword (but only in lowercase) except
1380 @code{a7}-@code{d7}.  An appended @samp{l} (ell) character denotes
1381 landscape orientation.
1383 For example, use the following for PS output on A4 paper in landscape
1384 orientation:
1386 @Example
1387 groff -Tps -dpaper=a4l -P-pa4 -P-l -ms foo.ms > foo.ps
1388 @endExample
1390 Note that it is up to the particular macro package to respect default
1391 page dimensions set in this way (most do).
1394 @c =====================================================================
1396 @node Invocation Examples,  , Paper Size, Invoking groff
1397 @section Invocation Examples
1398 @cindex invocation examples
1399 @cindex examples of invocation
1401 This section lists several common uses of @code{groff} and the
1402 corresponding command lines.
1404 @Example
1405 groff file
1406 @endExample
1408 @noindent
1409 This command processes @file{file} without a macro package or a
1410 preprocessor.  The output device is the default, @samp{ps}, and the
1411 output is sent to @code{stdout}.
1413 @Example
1414 groff -t -mandoc -Tascii file | less
1415 @endExample
1417 @noindent
1418 This is basically what a call to the @code{man} program does.
1419 @code{gtroff} processes the manual page @file{file} with the
1420 @file{mandoc} macro file (which in turn either calls the @file{man} or
1421 the @file{mdoc} macro package), using the @code{tbl} preprocessor and
1422 the @acronym{ASCII} output device.  Finally, the @code{less} pager
1423 displays the result.
1425 @Example
1426 groff -X -m me file
1427 @endExample
1429 @noindent
1430 Preview @file{file} with @code{gxditview}, using the @file{me} macro
1431 package.  Since no @option{-T} option is specified, use the default
1432 device (@samp{ps}).  Note that you can either say @w{@samp{-m me}} or
1433 @w{@samp{-me}}; the latter is an anachronism from the early days of
1434 @acronym{UNIX}.@footnote{The same is true for the other main macro
1435 packages that come with @code{groff}: @file{man}, @file{mdoc},
1436 @file{ms}, @file{mm}, and @file{mandoc}.  This won't work in general;
1437 for example, to load @file{trace.tmac}, either @samp{-mtrace} or
1438 @w{@samp{-m trace}} must be used.}
1440 @Example
1441 groff -man -rD1 -z file
1442 @endExample
1444 @noindent
1445 Check @file{file} with the @file{man} macro package, forcing
1446 double-sided printing -- don't produce any output.
1448 @menu
1449 * grog::
1450 @end menu
1452 @c ---------------------------------------------------------------------
1454 @node grog,  , Invocation Examples, Invocation Examples
1455 @subsection @code{grog}
1457 @pindex grog
1458 @code{grog} reads files, guesses which of the @code{groff} preprocessors
1459 and/or macro packages are required for formatting them, and prints the
1460 @code{groff} command including those options on the standard output.  It
1461 generates one or more of the options @option{-e}, @option{-man},
1462 @option{-me}, @option{-mm}, @option{-mom}, @option{-ms}, @option{-mdoc},
1463 @option{-mdoc-old}, @option{-p}, @option{-R}, @option{-g}, @option{-G},
1464 @option{-s}, and @option{-t}.
1466 A special file name@tie{}@file{-} refers to the standard input.  Specifying
1467 no files also means to read the standard input.  Any specified options
1468 are included in the printed command.  No space is allowed between
1469 options and their arguments.  The only options recognized are
1470 @option{-C} (which is also passed on) to enable compatibility mode, and
1471 @option{-v} to print the version number and exit.
1473 For example,
1475 @Example
1476 grog -Tdvi paper.ms
1477 @endExample
1479 @noindent
1480 guesses the appropriate command to print @file{paper.ms} and then prints
1481 it to the command line after adding the @option{-Tdvi} option.  For
1482 direct execution, enclose the call to @code{grog} in backquotes at the
1483 @acronym{UNIX} shell prompt:
1485 @Example
1486 `grog -Tdvi paper.ms` > paper.dvi
1487 @endExample
1489 @noindent
1490 As seen in the example, it is still necessary to redirect the output to
1491 something meaningful (i.e.@: either a file or a pager program like
1492 @code{less}).
1496 @c =====================================================================
1497 @c =====================================================================
1499 @node Tutorial for Macro Users, Macro Packages, Invoking groff, Top
1500 @chapter Tutorial for Macro Users
1501 @cindex tutorial for macro users
1502 @cindex macros, tutorial for users
1503 @cindex user's tutorial for macros
1504 @cindex user's macro tutorial
1506 Most users tend to use a macro package to format their papers.  This
1507 means that the whole breadth of @code{groff} is not necessary for most
1508 people.  This chapter covers the material needed to efficiently use a
1509 macro package.
1511 @menu
1512 * Basics::
1513 * Common Features::
1514 @end menu
1517 @c =====================================================================
1519 @node Basics, Common Features, Tutorial for Macro Users, Tutorial for Macro Users
1520 @section Basics
1521 @cindex basics of macros
1522 @cindex macro basics
1524 This section covers some of the basic concepts necessary to understand
1525 how to use a macro package.@footnote{This section is derived from
1526 @cite{Writing Papers with nroff using -me} by Eric P.@tie{}Allman.}
1527 References are made throughout to more detailed information, if desired.
1529 @code{gtroff} reads an input file prepared by the user and outputs a
1530 formatted document suitable for publication or framing.  The input
1531 consists of text, or words to be printed, and embedded commands
1532 (@dfn{requests} and @dfn{escapes}), which tell @code{gtroff} how to
1533 format the output.  For more detail on this, see @ref{Embedded
1534 Commands}.
1536 The word @dfn{argument} is used in this chapter to mean a word or number
1537 which appears on the same line as a request, and which modifies the
1538 meaning of that request.  For example, the request
1540 @Example
1542 @endExample
1544 @noindent
1545 spaces one line, but
1547 @Example
1548 .sp 4
1549 @endExample
1551 @noindent
1552 spaces four lines.  The number@tie{}4 is an argument to the @code{sp}
1553 request which says to space four lines instead of one.  Arguments are
1554 separated from the request and from each other by spaces (@emph{no}
1555 tabs).  More details on this can be found in @ref{Request and Macro
1556 Arguments}.
1558 The primary function of @code{gtroff} is to collect words from input
1559 lines, fill output lines with those words, justify the right-hand margin
1560 by inserting extra spaces in the line, and output the result.  For
1561 example, the input:
1563 @Example
1564 Now is the time
1565 for all good men
1566 to come to the aid
1567 of their party.
1568 Four score and seven
1569 years ago, etc.
1570 @endExample
1572 @noindent
1573 is read, packed onto output lines, and justified to produce:
1575 @quotation
1576 Now is the time for all good men to come to the aid of their party.
1577 Four score and seven years ago, etc.
1578 @end quotation
1580 @cindex break
1581 @cindex line break
1582 Sometimes a new output line should be started even though the current
1583 line is not yet full; for example, at the end of a paragraph.  To do
1584 this it is possible to cause a @dfn{break}, which starts a new output
1585 line.  Some requests cause a break automatically, as normally do blank
1586 input lines and input lines beginning with a space.
1588 Not all input lines are text to be formatted.  Some input lines are
1589 requests which describe how to format the text.  Requests always have a
1590 period (@samp{.}) or an apostrophe (@samp{'}) as the first character of
1591 the input line.
1593 The text formatter also does more complex things, such as automatically
1594 numbering pages, skipping over page boundaries, putting footnotes in the
1595 correct place, and so forth.
1597 Here are a few hints for preparing text for input to @code{gtroff}.
1599 @itemize @bullet
1600 @item
1601 First, keep the input lines short.  Short input lines are easier to
1602 edit, and @code{gtroff} packs words onto longer lines anyhow.
1604 @item
1605 In keeping with this, it is helpful to begin a new line after every
1606 comma or phrase, since common corrections are to add or delete sentences
1607 or phrases.
1609 @item
1610 End each sentence with two spaces -- or better, start each sentence on a
1611 new line.  @code{gtroff} recognizes characters that usually end a
1612 sentence, and inserts sentence space accordingly.
1614 @item
1615 Do not hyphenate words at the end of lines -- @code{gtroff} is smart
1616 enough to hyphenate words as needed, but is not smart enough to take
1617 hyphens out and join a word back together.  Also, words such as
1618 ``mother-in-law'' should not be broken over a line, since then a space
1619 can occur where not wanted, such as ``@w{mother- in}-law''.
1620 @end itemize
1622 @cindex double-spacing (@code{ls})
1623 @cindex spacing
1624 @code{gtroff} double-spaces output text automatically if you use the
1625 request @w{@samp{.ls 2}}.  Reactivate single-spaced mode by typing
1626 @w{@samp{.ls 1}}.@footnote{If you need finer granularity of the
1627 vertical space, use the @code{pvs} request (@pxref{Changing Type
1628 Sizes}).}
1630 A number of requests allow to change the way the output looks,
1631 sometimes called the @dfn{layout} of the output page.  Most of these
1632 requests adjust the placing of @dfn{whitespace} (blank lines or
1633 spaces).
1635 @cindex new page (@code{bp})
1636 The @code{bp} request starts a new page, causing a line break.
1638 @cindex blank line (@code{sp})
1639 @cindex empty line (@code{sp})
1640 @cindex line, empty (@code{sp})
1641 The request @w{@samp{.sp @var{N}}} leaves @var{N}@tie{}lines of blank
1642 space.  @var{N}@tie{}can be omitted (meaning skip a single line) or can
1643 be of the form @var{N}i (for @var{N}@tie{}inches) or @var{N}c (for
1644 @var{N}@tie{}centimeters).  For example, the input:
1646 @Example
1647 .sp 1.5i
1648 My thoughts on the subject
1650 @endExample
1652 @noindent
1653 leaves one and a half inches of space, followed by the line ``My
1654 thoughts on the subject'', followed by a single blank line (more
1655 measurement units are available, see @ref{Measurements}).
1657 @cindex centering lines (@code{ce})
1658 @cindex lines, centering (@code{ce})
1659 Text lines can be centered by using the @code{ce} request.  The line
1660 after @code{ce} is centered (horizontally) on the page.  To center more
1661 than one line, use @w{@samp{.ce @var{N}}} (where @var{N} is the number
1662 of lines to center), followed by the @var{N}@tie{}lines.  To center many
1663 lines without counting them, type:
1665 @Example
1666 .ce 1000
1667 lines to center
1668 .ce 0
1669 @endExample
1671 @noindent
1672 The @w{@samp{.ce 0}} request tells @code{groff} to center zero more
1673 lines, in other words, stop centering.
1675 @cindex line break (@code{br})
1676 @cindex break (@code{br})
1677 All of these requests cause a break; that is, they always start a new
1678 line.  To start a new line without performing any other action, use
1679 @code{br}.
1682 @c =====================================================================
1684 @node Common Features,  , Basics, Tutorial for Macro Users
1685 @section Common Features
1686 @cindex common features
1687 @cindex features, common
1689 @code{gtroff} provides very low-level operations for formatting a
1690 document.  There are many common routine operations which are done in
1691 all documents.  These common operations are written into @dfn{macros}
1692 and collected into a @dfn{macro package}.
1694 All macro packages provide certain common capabilities which fall into
1695 the following categories.
1697 @menu
1698 * Paragraphs::
1699 * Sections and Chapters::
1700 * Headers and Footers::
1701 * Page Layout Adjustment::
1702 * Displays::
1703 * Footnotes and Annotations::
1704 * Table of Contents::
1705 * Indices::
1706 * Paper Formats::
1707 * Multiple Columns::
1708 * Font and Size Changes::
1709 * Predefined Strings::
1710 * Preprocessor Support::
1711 * Configuration and Customization::
1712 @end menu
1714 @c ---------------------------------------------------------------------
1716 @node Paragraphs, Sections and Chapters, Common Features, Common Features
1717 @subsection Paragraphs
1718 @cindex paragraphs
1720 One of the most common and most used capability is starting a
1721 paragraph.  There are a number of different types of paragraphs, any
1722 of which can be initiated with macros supplied by the macro package.
1723 Normally, paragraphs start with a blank line and the first line
1724 indented, like the text in this manual.  There are also block style
1725 paragraphs, which omit the indentation:
1727 @Example
1728 Some   men  look   at  constitutions   with  sanctimonious
1729 reverence, and deem them like the ark of the covenant, too
1730 sacred to be touched.
1731 @endExample
1733 @noindent
1734 And there are also indented paragraphs which begin with a tag or label
1735 at the margin and the remaining text indented.
1737 @Example
1738 one   This is  the first paragraph.  Notice  how the first
1739       line of  the resulting  paragraph lines up  with the
1740       other lines in the paragraph.
1741 @endExample
1742 @Example
1743 longlabel
1744       This  paragraph   had  a  long   label.   The  first
1745       character of text on the first line does not line up
1746       with  the  text  on  second  and  subsequent  lines,
1747       although they line up with each other.
1748 @endExample
1750 A variation of this is a bulleted list.
1752 @Example
1753 .     Bulleted lists start with a bullet.   It is possible
1754       to use other glyphs instead of the bullet.  In nroff
1755       mode using the ASCII character set for output, a dot
1756       is used instead of a real bullet.
1757 @endExample
1759 @c ---------------------------------------------------------------------
1761 @node Sections and Chapters, Headers and Footers, Paragraphs, Common Features
1762 @subsection Sections and Chapters
1764 Most macro packages supply some form of section headers.  The simplest
1765 kind is simply the heading on a line by itself in bold type.  Others
1766 supply automatically numbered section heading or different heading
1767 styles at different levels.  Some, more sophisticated, macro packages
1768 supply macros for starting chapters and appendices.
1770 @c ---------------------------------------------------------------------
1772 @node Headers and Footers, Page Layout Adjustment, Sections and Chapters, Common Features
1773 @subsection Headers and Footers
1775 Every macro package gives some way to manipulate the @dfn{headers} and
1776 @dfn{footers} (also called @dfn{titles}) on each page.  This is text
1777 put at the top and bottom of each page, respectively, which contain
1778 data like the current page number, the current chapter title, and so
1779 on.  Its appearance is not affected by the running text.  Some packages
1780 allow for different ones on the even and odd pages (for material printed
1781 in a book form).
1783 The titles are called @dfn{three-part titles}, that is, there is a
1784 left-justified part, a centered part, and a right-justified part.  An
1785 automatically generated page number may be put in any of these fields
1786 with the @samp{%} character (see @ref{Page Layout}, for more details).
1788 @c ---------------------------------------------------------------------
1790 @node Page Layout Adjustment, Displays, Headers and Footers, Common Features
1791 @subsection Page Layout
1793 Most macro packages let the user specify top and bottom margins and
1794 other details about the appearance of the printed pages.
1796 @c ---------------------------------------------------------------------
1798 @node Displays, Footnotes and Annotations, Page Layout Adjustment, Common Features
1799 @subsection Displays
1800 @cindex displays
1802 @dfn{Displays} are sections of text to be set off from the body of
1803 the paper.  Major quotes, tables, and figures are types of displays, as
1804 are all the examples used in this document.
1806 @cindex quotes, major
1807 @cindex major quotes
1808 @dfn{Major quotes} are quotes which are several lines long, and hence
1809 are set in from the rest of the text without quote marks around them.
1811 @cindex list
1812 A @dfn{list} is an indented, single-spaced, unfilled display.  Lists
1813 should be used when the material to be printed should not be filled and
1814 justified like normal text, such as columns of figures or the examples
1815 used in this paper.
1817 @cindex keep
1818 A @dfn{keep} is a display of lines which are kept on a single page if
1819 possible.  An example for a keep might be a diagram.  Keeps differ from
1820 lists in that lists may be broken over a page boundary whereas keeps are
1821 not.
1823 @cindex keep, floating
1824 @cindex floating keep
1825 @dfn{Floating keeps} move relative to the text.  Hence, they are good for
1826 things which are referred to by name, such as ``See figure@tie{}3''.  A
1827 floating keep appears at the bottom of the current page if it fits;
1828 otherwise, it appears at the top of the next page.  Meanwhile, the
1829 surrounding text `flows' around the keep, thus leaving no blank areas.
1831 @c ---------------------------------------------------------------------
1833 @node Footnotes and Annotations, Table of Contents, Displays, Common Features
1834 @subsection Footnotes and Annotations
1835 @cindex footnotes
1836 @cindex annotations
1838 There are a number of requests to save text for later printing.
1840 @dfn{Footnotes} are printed at the bottom of the current page.
1842 @cindex delayed text
1843 @dfn{Delayed text} is very similar to a footnote except that it is
1844 printed when called for explicitly.  This allows a list of references to
1845 appear (for example) at the end of each chapter, as is the convention in
1846 some disciplines.
1848 Most macro packages which supply this functionality also supply a means
1849 of automatically numbering either type of annotation.
1851 @c ---------------------------------------------------------------------
1853 @node Table of Contents, Indices, Footnotes and Annotations, Common Features
1854 @subsection Table of Contents
1855 @cindex table of contents
1856 @cindex contents, table of
1858 @dfn{Tables of contents} are a type of delayed text having a tag
1859 (usually the page number) attached to each entry after a row of dots.
1860 The table accumulates throughout the paper until printed, usually after
1861 the paper has ended.  Many macro packages provide the ability to have
1862 several tables of contents (e.g.@: a standard table of contents, a list
1863 of tables, etc).
1865 @c ---------------------------------------------------------------------
1867 @node Indices, Paper Formats, Table of Contents, Common Features
1868 @subsection Indices
1869 @cindex index, in macro package
1871 While some macro packages use the term @dfn{index}, none actually
1872 provide that functionality.  The facilities they call indices are
1873 actually more appropriate for tables of contents.
1875 @pindex makeindex
1876 To produce a real index in a document, external tools like the
1877 @code{makeindex} program are necessary.
1879 @c ---------------------------------------------------------------------
1881 @node Paper Formats, Multiple Columns, Indices, Common Features
1882 @subsection Paper Formats
1883 @cindex paper formats
1885 Some macro packages provide stock formats for various kinds of
1886 documents.  Many of them provide a common format for the title and
1887 opening pages of a technical paper.  The @file{mm} macros in particular
1888 provide formats for letters and memoranda.
1890 @c ---------------------------------------------------------------------
1892 @node Multiple Columns, Font and Size Changes, Paper Formats, Common Features
1893 @subsection Multiple Columns
1895 Some macro packages (but not @file{man}) provide the ability to have two
1896 or more columns on a page.
1898 @c ---------------------------------------------------------------------
1900 @node Font and Size Changes, Predefined Strings, Multiple Columns, Common Features
1901 @subsection Font and Size Changes
1903 The built-in font and size functions are not always intuitive, so all
1904 macro packages provide macros to make these operations simpler.
1906 @c ---------------------------------------------------------------------
1908 @node Predefined Strings, Preprocessor Support, Font and Size Changes, Common Features
1909 @subsection Predefined Strings
1911 Most macro packages provide various predefined strings for a variety of
1912 uses; examples are sub- and superscripts, printable dates, quotes and
1913 various special characters.
1915 @c ---------------------------------------------------------------------
1917 @node Preprocessor Support, Configuration and Customization, Predefined Strings, Common Features
1918 @subsection Preprocessor Support
1920 All macro packages provide support for various preprocessors and may
1921 extend their functionality.
1923 For example, all macro packages mark tables (which are processed with
1924 @code{gtbl}) by placing them between @code{TS} and @code{TE} macros.
1925 The @file{ms} macro package has an option, @samp{.TS@tie{}H}, that prints
1926 a caption at the top of a new page (when the table is too long to fit on
1927 a single page).
1929 @c ---------------------------------------------------------------------
1931 @node Configuration and Customization,  , Preprocessor Support, Common Features
1932 @subsection Configuration and Customization
1934 Some macro packages provide means of customizing many of the details of
1935 how the package behaves.  This ranges from setting the default type size
1936 to changing the appearance of section headers.
1940 @c =====================================================================
1941 @c =====================================================================
1943 @node Macro Packages, gtroff Reference, Tutorial for Macro Users, Top
1944 @chapter Macro Packages
1945 @cindex macro packages
1946 @cindex packages, macros
1948 This chapter documents the main macro packages that come with
1949 @code{groff}.
1951 Different main macro packages can't be used at the same time; for example
1953 @Example
1954 groff -m man foo.man -m ms bar.doc
1955 @endExample
1957 @noindent
1958 doesn't work.  Note that option arguments are processed before non-option
1959 arguments; the above (failing) sample is thus reordered to
1961 @Example
1962 groff -m man -m ms foo.man bar.doc
1963 @endExample
1965 @menu
1966 * man::
1967 * mdoc::
1968 * ms::
1969 * me::
1970 * mm::
1971 @end menu
1974 @c =====================================================================
1976 @node man, mdoc, Macro Packages, Macro Packages
1977 @section @file{man}
1978 @cindex manual pages
1979 @cindex man pages
1980 @pindex an.tmac
1981 @pindex man.tmac
1982 @pindex man-old.tmac
1984 This is the most popular and probably the most important macro package
1985 of @code{groff}.  It is easy to use, and a vast majority of manual pages
1986 are based on it.
1988 @menu
1989 * Man options::
1990 * Man usage::
1991 * Man font macros::
1992 * Miscellaneous man macros::
1993 * Predefined man strings::
1994 * Preprocessors in man pages::
1995 * Optional man extensions::
1996 @end menu
1998 @c ---------------------------------------------------------------------
2000 @node Man options, Man usage, man, man
2001 @subsection Options
2003 The command line format for using the @file{man} macros with
2004 @code{groff} is:
2006 @Example
2007 groff -m man [ -rLL=@var{length} ] [ -rLT=@var{length} ] [ -rFT=@var{dist} ]
2008       [ -rcR=1 ] [ -rC1 ] [ -rD1 ] [-rHY=@var{flags} ]
2009       [ -rP@var{nnn} ] [ -rS@var{xx} ] [ -rX@var{nnn} ]
2010       [ -rIN=@var{length} ] [ -rSN=@var{length} ] [ @var{files}@dots{} ]
2011 @endExample
2013 @noindent
2014 It is possible to use @samp{-man} instead of @w{@samp{-m man}}.
2016 @table @code
2017 @item -rcR=1
2018 This option (the default if a TTY output device is used) creates a
2019 single, very long page instead of multiple pages.  Use @code{-rcR=0}
2020 to disable it.
2022 @item -rC1
2023 If more than one manual page is given on the command line, number the
2024 pages continuously, rather than starting each at@tie{}1.
2026 @item -rD1
2027 Double-sided printing.  Footers for even and odd pages are formatted
2028 differently.
2030 @item -rFT=@var{dist}
2031 Set the position of the footer text to @var{dist}.  If positive, the
2032 distance is measured relative to the top of the page, otherwise it is
2033 relative to the bottom.  The default is @minus{}0.5@dmn{i}.
2035 @item -rHY=@var{flags}
2036 Set hyphenation flags.  Possible values are 1@tie{}to hyphenate without
2037 restrictions, 2@tie{} to not hyphenate the last word on a page,
2038 4@tie{}to not hyphenate the last two characters of a word, and
2039 8@tie{}to not hyphenate the first two characters of a word.  These
2040 values are additive; the default is@tie{}14.
2042 @item -rIN=@var{length}
2043 Set the body text indent to @var{length}.
2044 If not specified, the indent defaults to 7@dmn{n}
2045 (7@tie{}characters) in nroff mode and 7.2@dmn{n} otherwise.
2046 For nroff, this value should always be an integer multiple of unit @samp{n}
2047 to get consistent indentation.
2049 @item -rLL=@var{length}
2050 Set line length to @var{length}.  If not specified, the line length
2051 defaults to 78@tie{}en in nroff mode (this is 78@tie{}characters per
2052 line) and 6.5@tie{}inch otherwise.
2054 @item -rLT=@var{length}
2055 Set title length to @var{length}.  If not specified, the title length
2056 defaults to the line length.
2058 @item -rP@var{nnn}
2059 Page numbering starts with @var{nnn} rather than with@tie{}1.
2061 @item -rS@var{xx}
2062 Use @var{xx} (which can be 10, 11, or@tie{}12@dmn{pt}) as the base
2063 document font size instead of the default value of@tie{}10@dmn{pt}.
2065 @item -rSN=@var{length}
2066 Set the indent for sub-subheadings to @var{length}.
2067 If not specified, the indent defaults to 3@dmn{n}.
2069 @item -rX@var{nnn}
2070 After page @var{nnn}, number pages as @var{nnn}a, @var{nnn}b,
2071 @var{nnn}c, etc.  For example, the option @option{-rX2} produces the
2072 following page numbers: 1, 2, 2a, 2b, 2c, etc.
2073 @end table
2075 @c ---------------------------------------------------------------------
2077 @node Man usage, Man font macros, Man options, man
2078 @subsection Usage
2079 @cindex @code{man} macros
2080 @cindex macros for manual pages [@code{man}]
2082 @pindex man.local
2083 This section describes the available macros for manual pages.  For
2084 further customization, put additional macros and requests into the file
2085 @file{man.local} which is loaded immediately after the @file{man}
2086 package.
2088 @Defmac {TH, title section [@Var{extra1} [@Var{extra2} [@Var{extra3}]]], man}
2089 Set the title of the man page to @var{title} and the section to
2090 @var{section}, which must have a value between 1 and@tie{}8.  The value
2091 of @var{section} may also have a string appended, e.g.@: @samp{.pm},
2092 to indicate a specific subsection of the man pages.
2094 Both @var{title} and @var{section} are positioned at the left and right
2095 in the header line (with @var{section} in parentheses immediately
2096 appended to @var{title}.  @var{extra1} is positioned in the middle of
2097 the footer line.  @var{extra2} is positioned at the left in the footer
2098 line (or at the left on even pages and at the right on odd pages if
2099 double-sided printing is active).  @var{extra3} is centered in the
2100 header line.
2102 For @acronym{HTML} output, headers and footers are completely suppressed.
2104 Additionally, this macro starts a new page; the new line number is@tie{}1
2105 again (except if the @option{-rC1} option is given on the command line)
2106 -- this feature is intended only for formatting multiple man pages; a
2107 single man page should contain exactly one @code{TH} macro at the
2108 beginning of the file.
2109 @endDefmac
2111 @Defmac {SH, [@Var{heading}], man}
2112 Set up an unnumbered section heading sticking out to the left.  Prints
2113 out all the text following @code{SH} up to the end of the line (or the
2114 text in the next line if there is no argument to @code{SH}) in bold
2115 face (or the font specified by the string @code{HF}), one size larger than
2116 the base document size.  Additionally, the left margin and the indentation
2117 for the following text is reset to its default value.
2118 @endDefmac
2120 @Defmac {SS, [@Var{heading}], man}
2121 Set up an unnumbered (sub)section heading.  Prints out all the text
2122 following @code{SS} up to the end of the line (or the text in the next
2123 line if there is no argument to @code{SS}) in bold face (or the font
2124 specified by the string @code{HF}), at the same size as the base document
2125 size.  Additionally, the left margin and the indentation for the
2126 following text is reset to its default value.
2127 @endDefmac
2129 @Defmac {TP, [@Var{nnn}], man}
2130 Set up an indented paragraph with label.  The indentation is set to
2131 @var{nnn} if that argument is supplied (the default unit is @samp{n}
2132 if omitted), otherwise it is set to the previous indentation value
2133 specified with @code{TP}, @code{IP}, or @code{HP} (or to the default
2134 value if none of them have been used yet).
2136 The first line of text following this macro is interpreted as a string
2137 to be printed flush-left, as it is appropriate for a label.  It is not
2138 interpreted as part of a paragraph, so there is no attempt to fill the
2139 first line with text from the following input lines.  Nevertheless, if
2140 the label is not as wide as the indentation the paragraph starts
2141 at the same line (but indented), continuing on the following lines.
2142 If the label is wider than the indentation the descriptive part
2143 of the paragraph begins on the line following the label, entirely
2144 indented.  Note that neither font shape nor font size of the label is
2145 set to a default value; on the other hand, the rest of the text has
2146 default font settings.
2147 @endDefmac
2149 @DefmacList {LP, , man}
2150 @DefmacItem {PP, , man}
2151 @DefmacListEnd {P, , man}
2152 These macros are mutual aliases.  Any of them causes a line break at
2153 the current position, followed by a vertical space downwards by the
2154 amount specified by the @code{PD} macro.  The font size and shape are
2155 reset to the default value (10@dmn{pt} roman if no @option{-rS} option
2156 is given on the command line).  Finally, the current left margin and the
2157 indentation is restored.
2158 @endDefmac
2160 @Defmac {IP, [@Var{designator} [@Var{nnn}]], man}
2161 Set up an indented paragraph, using @var{designator} as a tag to mark
2162 its beginning.  The indentation is set to @var{nnn} if that argument
2163 is supplied (default unit is @samp{n}), otherwise it is set to the
2164 previous indentation value specified with @code{TP}, @code{IP}, or
2165 @code{HP} (or the default value if none of them have been used yet).
2166 Font size and face of the paragraph (but not the designator) are reset
2167 to their default values.
2169 To start an indented paragraph with a particular indentation but without
2170 a designator, use @samp{""} (two double quotes) as the first argument of
2171 @code{IP}.
2173 For example, to start a paragraph with bullets as the designator and
2174 4@tie{}en indentation, write
2176 @Example
2177 .IP \(bu 4
2178 @endExample
2179 @endDefmac
2181 @Defmac {HP, [@Var{nnn}], man}
2182 @cindex hanging indentation [@code{man}]
2183 @cindex @code{man} macros, hanging indentation
2184 Set up a paragraph with hanging left indentation.  The indentation is
2185 set to @var{nnn} if that argument is supplied (default unit is
2186 @samp{n}), otherwise it is set to the previous indentation value
2187 specified with @code{TP}, @code{IP}, or @code{HP} (or the default
2188 value if non of them have been used yet).  Font size and face are reset
2189 to their default values.
2190 @endDefmac
2192 @Defmac {RS, [@Var{nnn}], man}
2193 @cindex left margin, how to move [@code{man}]
2194 @cindex @code{man} macros, moving left margin
2195 Move the left margin to the right by the value @var{nnn} if specified
2196 (default unit is @samp{n}); otherwise it is set to the previous
2197 indentation value specified with @code{TP}, @code{IP}, or @code{HP}
2198 (or to the default value if none of them have been used yet).  The
2199 indentation value is then set to the default.
2201 Calls to the @code{RS} macro can be nested.
2202 @endDefmac
2204 @Defmac {RE, [@Var{nnn}], man}
2205 Move the left margin back to level @var{nnn}, restoring the previous left
2206 margin.  If no argument is given, it moves one level back.  The first
2207 level (i.e., no call to @code{RS} yet) has number@tie{}1, and each call
2208 to @code{RS} increases the level by@tie{}1.
2209 @endDefmac
2211 @cindex line breaks, with vertical space [@code{man}]
2212 @cindex @code{man} macros, line breaks with vertical space
2213 To summarize, the following macros cause a line break with the insertion
2214 of vertical space (which amount can be changed with the @code{PD}
2215 macro): @code{SH}, @code{SS}, @code{TP}, @code{LP} (@code{PP},
2216 @code{P}), @code{IP}, and @code{HP}.
2218 @cindex line breaks, without vertical space [@code{man}]
2219 @cindex @code{man} macros, line breaks without vertical space
2220 The macros @code{RS} and @code{RE} also cause a break but do not insert
2221 vertical space.
2223 @cindex default indentation, resetting [@code{man}]
2224 @cindex indentaion, resetting to default [@code{man}]
2225 @cindex @code{man} macros, resetting default indentation
2226 Finally, the macros @code{SH}, @code{SS}, @code{LP} (@code{PP}, @code{P}),
2227 and @code{RS} reset the indentation to its default value.
2229 @c ---------------------------------------------------------------------
2231 @node Man font macros, Miscellaneous man macros, Man usage, man
2232 @subsection Macros to set fonts
2233 @cindex font selection [@code{man}]
2234 @cindex @code{man} macros, how to set fonts
2236 The standard font is roman; the default text size is 10@tie{}point.
2237 If command line option @option{-rS=@var{n}} is given, use
2238 @var{n}@dmn{pt} as the default text size.
2240 @Defmac {SM, [@Var{text}], man}
2241 Set the text on the same line or the text on the next line in a font
2242 that is one point size smaller than the default font.
2243 @endDefmac
2245 @Defmac {SB, [@Var{text}], man}
2246 @cindex bold face [@code{man}]
2247 @cindex @code{man} macros, bold face
2248 Set the text on the same line or the text on the next line in bold face
2249 font, one point size smaller than the default font.
2250 @endDefmac
2252 @Defmac {BI, text, man}
2253 Set its arguments alternately in bold face and italic, without a space
2254 between the arguments.  Thus,
2256 @Example
2257 .BI this "word and" that
2258 @endExample
2260 @noindent
2261 produces ``thisword andthat'' with ``this'' and ``that'' in bold face,
2262 and ``word and'' in italics.
2263 @endDefmac
2265 @Defmac {IB, text, man}
2266 Set its arguments alternately in italic and bold face, without a space
2267 between the arguments.
2268 @endDefmac
2270 @Defmac {RI, text, man}
2271 Set its arguments alternately in roman and italic, without a space between
2272 the arguments.
2273 @endDefmac
2275 @Defmac {IR, text, man}
2276 Set its arguments alternately in italic and roman, without a space between
2277 the arguments.
2278 @endDefmac
2280 @Defmac {BR, text, man}
2281 Set its arguments alternately in bold face and roman, without a space
2282 between the arguments.
2283 @endDefmac
2285 @Defmac {RB, text, man}
2286 Set its arguments alternately in roman and bold face, without a space
2287 between the arguments.
2288 @endDefmac
2290 @Defmac {B, [@Var{text}], man}
2291 Set @var{text} in bold face.  If no text is present on the line where
2292 the macro is called, then the text of the next line appears in bold
2293 face.
2294 @endDefmac
2296 @Defmac {I, [@Var{text}], man}
2297 @cindex italic fonts [@code{man}]
2298 @cindex @code{man} macros, italic fonts
2299 Set @var{text} in italic.  If no text is present on the line where the
2300 macro is called, then the text of the next line appears in italic.
2301 @endDefmac
2303 @c ---------------------------------------------------------------------
2305 @node Miscellaneous man macros, Predefined man strings, Man font macros, man
2306 @subsection Miscellaneous macros
2308 @pindex grohtml
2309 @cindex @code{man} macros, default indentation
2310 @cindex default indentation [@code{man}]
2311 The default indentation is 7.2@dmn{n} in troff mode and 7@dmn{n} in
2312 nroff mode except for @code{grohtml} which ignores indentation.
2314 @Defmac {DT, , man}
2315 @cindex tab stops [@code{man}]
2316 @cindex @code{man} macros, tab stops
2317 Set tabs every 0.5@tie{}inches.  Since this macro is always executed
2318 during a call to the @code{TH} macro, it makes sense to call it only if
2319 the tab positions have been changed.
2320 @endDefmac
2322 @Defmac {PD, [@Var{nnn}], man}
2323 @cindex empty space before a paragraph [@code{man}]
2324 @cindex @code{man} macros, empty space before a paragraph
2325 Adjust the empty space before a new paragraph (or section).  The
2326 optional argument gives the amount of space (default unit is
2327 @samp{v}); without parameter, the value is reset to its default value
2328 (1@tie{}line in nroff mode, 0.4@dmn{v}@tie{}otherwise).
2330 This affects the macros @code{SH}, @code{SS}, @code{TP}, @code{LP} (as
2331 well as @code{PP} and @code{P}), @code{IP}, and @code{HP}.
2332 @endDefmac
2334 The following two macros are included for
2335 BSD compatibility.
2337 @Defmac {AT, [@Var{system} [@Var{release}]], man}
2338 @cindex @code{man}macros, BSD compatibility
2339 Alter the footer for use with @acronym{AT&T} manpages.
2340 This command exists only for compatibility; don't use it.
2341 The first argument @var{system} can be:
2343 @table @code
2344 @item 3
2345 7th Edition (the default)
2347 @item 4
2348 System III
2350 @item 5
2351 System V
2352 @end table
2354 An optional second argument @var{release} to @code{AT} specifies the
2355 release number (such as ``System V Release 3'').
2356 @endDefmac
2358 @Defmac {UC, [@Var{version}], man}
2359 @cindex @code{man}macros, BSD compatibility
2360 Alters the footer for use with @acronym{BSD} manpages.
2361 This command exists only for compatibility; don't use it.
2362 The argument can be:
2364 @table @code
2365 @item 3
2366 3rd Berkeley Distribution (the default)
2368 @item 4
2369 4th Berkeley Distribution
2371 @item 5
2372 4.2 Berkeley Distribution
2374 @item 6
2375 4.3 Berkeley Distribution
2377 @item 7
2378 4.4 Berkeley Distribution
2379 @end table
2380 @endDefmac
2382 @c ---------------------------------------------------------------------
2384 @node Predefined man strings, Preprocessors in man pages, Miscellaneous man macros, man
2385 @subsection Predefined strings
2387 The following strings are defined:
2389 @Defstr {S, man}
2390 Switch back to the default font size.
2391 @endDefstr
2393 @Defstr {HF, man}
2394 The typeface used for headings.
2395 The default is @samp{B}.
2396 @endDefstr
2398 @Defstr {R, man}
2399 The `registered' sign.
2400 @endDefstr
2402 @Defstr {Tm, man}
2403 The `trademark' sign.
2404 @endDefstr
2406 @DefstrList {lq, man}
2407 @DefstrListEnd {rq, man}
2408 @cindex @code{lq} glyph, and @code{lq} string [@code{man}]
2409 @cindex @code{rq} glyph, and @code{rq} string [@code{man}]
2410 Left and right quote.  This is equal to @code{\(lq} and @code{\(rq},
2411 respectively.
2412 @endDefstr
2414 @c ---------------------------------------------------------------------
2416 @node Preprocessors in man pages, Optional man extensions, Predefined man strings, man
2417 @subsection Preprocessors in @file{man} pages
2419 @cindex preprocessor, calling convention
2420 @cindex calling convention of preprocessors
2421 If a preprocessor like @code{gtbl} or @code{geqn} is needed, it has
2422 become common usage to make the first line of the man page look like
2423 this:
2425 @Example
2426 '\" @var{word}
2427 @endExample
2429 @pindex geqn@r{, invocation in manual pages}
2430 @pindex grefer@r{, invocation in manual pages}
2431 @pindex gtbl@r{, invocation in manual pages}
2432 @pindex man@r{, invocation of preprocessors}
2433 @noindent
2434 Note the single space character after the double quote.  @var{word}
2435 consists of letters for the needed preprocessors: @samp{e} for
2436 @code{geqn}, @samp{r} for @code{grefer}, @samp{t} for @code{gtbl}.
2437 Modern implementations of the @code{man} program read this first line
2438 and automatically call the right preprocessor(s).
2440 @c ---------------------------------------------------------------------
2442 @node Optional man extensions,  , Preprocessors in man pages, man
2443 @subsection Optional @file{man} extensions
2445 @pindex man.local
2446 Use the file @file{man.local} for local extensions
2447 to the @code{man} macros or for style changes.
2449 @unnumberedsubsubsec Custom headers and footers
2450 @cindex @code{man} macros, custom headers and footers
2452 In groff versions 1.18.2 and later, you can specify custom
2453 headers and footers by redefining the following macros in
2454 @file{man.local}.
2456 @Defmac {PT, , man}
2457 Control the content of the headers.
2458 Normally, the header prints the command name
2459 and section number on either side, and the
2460 optional fifth argument to @code{TH} in the center.
2461 @endDefmac
2463 @Defmac {BT, , man}
2464 Control the content of the footers.
2465 Normally, the footer prints the page number
2466 and the third and fourth arguments to @code{TH}.
2468 Use the @code{FT} number register to specify the
2469 footer position.
2470 The default is @minus{}0.5@dmn{i}.
2471 @endDefmac
2473 @unnumberedsubsubsec Ultrix-specific man macros
2474 @cindex Ultrix-specific @code{man} macros
2475 @cindex @code{man} macros, Ultrix-specific
2477 @pindex man.ultrix
2478 The @code{groff} source distribution includes
2479 a file named @file{man.ultrix}, containing
2480 macros compatible with the Ultrix variant of
2481 @code{man}.
2482 Copy this file into @file{man.local} (or use the @code{mso} request to
2483 load it) to enable the following macros.
2485 @Defmac {CT, @Var{key}, man}
2486 Print @samp{<CTRL/@var{key}>}.
2487 @endDefmac
2489 @Defmac {CW, , man}
2490 Print subsequent text using the constant width (Courier) typeface.
2491 @endDefmac
2493 @Defmac {Ds, , man}
2494 Begin a non-filled display.
2495 @endDefmac
2497 @Defmac {De, , man}
2498 End a non-filled display started with @code{Ds}.
2499 @endDefmac
2501 @Defmac {EX, [@Var{indent}], man}
2502 Begins a non-filled display
2503 using the constant width (Courier) typeface.
2504 Use the optional @var{indent} argument to
2505 indent the display.
2506 @endDefmac
2508 @Defmac {EE, , man}
2509 End a non-filled display started with @code{EX}.
2510 @endDefmac
2512 @Defmac {G, [@Var{text}], man}
2513 Sets @var{text} in Helvetica.
2514 If no text is present on the line where
2515 the macro is called, then the text of the
2516 next line appears in Helvetica.
2517 @endDefmac
2519 @Defmac {GL, [@Var{text}], man}
2520 Sets @var{text} in Helvetica Oblique.
2521 If no text is present on the line where
2522 the macro is called, then the text of the
2523 next line appears in Helvetica Oblique.
2524 @endDefmac
2526 @Defmac {HB, [@Var{text}], man}
2527 Sets @var{text} in Helvetica Bold.
2528 If no text is present on the line where
2529 the macro is called, then all text up to
2530 the next @code{HB} appears in Helvetica Bold.
2531 @endDefmac
2533 @Defmac {TB, [@Var{text}], man}
2534 Identical to @code{HB}.
2535 @endDefmac
2537 @Defmac {MS, @Var{title} @Var{sect} [@Var{punct}], man}
2538 Set a manpage reference in Ultrix format.
2539 The @var{title} is in Courier instead of italic.
2540 Optional punctuation follows the section number without
2541 an intervening space.
2542 @endDefmac
2544 @Defmac {NT, [@code{C}] [@Var{title}], man}
2545 Begin a note.
2546 Print the optional @Var{title}, or the word ``Note'',
2547 centered on the page.
2548 Text following the macro makes up the body of the note,
2549 and is indented on both sides.
2550 If the first argument is @code{C}, the body of the
2551 note is printed centered (the second argument replaces
2552 the word ``Note'' if specified).
2553 @endDefmac
2555 @Defmac {NE, , man}
2556 End a note begun with @code{NT}.
2557 @endDefmac
2559 @Defmac {PN, @Var{path} [@Var{punct}], man}
2560 Set the path name in constant width (Courier),
2561 followed by optional punctuation.
2562 @endDefmac
2564 @Defmac {Pn, [@Var{punct}] @Var{path} [@Var{punct}], man}
2565 When called with two arguments, identical to @code{PN}.
2566 When called with three arguments,
2567 set the second argument in constant width (Courier),
2568 bracketed by the first and third arguments in the current font.
2569 @endDefmac
2571 @Defmac {R, , man}
2572 Switch to roman font and turn off any underlining in effect.
2573 @endDefmac
2575 @Defmac {RN, , man}
2576 Print the string @samp{<RETURN>}.
2577 @endDefmac
2579 @Defmac {VS, [@code{4}], man}
2580 Start printing a change bar in the margin if
2581 the number @code{4} is specified.
2582 Otherwise, this macro does nothing.
2583 @endDefmac
2585 @Defmac {VE, , man}
2586 End printing the change bar begun by @code{VS}.
2587 @endDefmac
2589 @unnumberedsubsubsec Simple example
2591 The following example @file{man.local} file
2592 alters the @code{SH} macro to add some extra
2593 vertical space before printing the heading.
2594 Headings are printed in Helvetica Bold.
2596 @Example
2597 .\" Make the heading fonts Helvetica
2598 .ds HF HB
2600 .\" Put more whitespace in front of headings.
2601 .rn SH SH-orig
2602 .de SH
2603 .  if t .sp (u;\\n[PD]*2)
2604 .  SH-orig \\$*
2606 @endExample
2608 @c =====================================================================
2610 @node mdoc, ms, man, Macro Packages
2611 @section @file{mdoc}
2612 @cindex @code{mdoc} macros
2614 @c XXX documentation
2615 @c XXX this is a placeholder until we get stuff knocked into shape
2616 See the @cite{groff_mdoc(7)} man page (type @command{man groff_mdoc}
2617 at the command line).
2620 @c =====================================================================
2622 @node ms, me, mdoc, Macro Packages
2623 @section @file{ms}
2624 @cindex @code{ms} macros
2626 The @file{-ms}
2627 macros are suitable for reports, letters, books,
2628 user manuals, and so forth.
2629 The package provides macros for cover pages, section headings,
2630 paragraphs, lists, footnotes, pagination,
2631 and a table of contents.
2633 @menu
2634 * ms Intro::
2635 * General ms Structure::
2636 * ms Document Control Registers::
2637 * ms Cover Page Macros::
2638 * ms Body Text::
2639 * ms Page Layout::
2640 * Differences from AT&T ms::
2641 @end menu
2643 @c ---------------------------------------------------------------------
2645 @node ms Intro, General ms Structure, ms, ms
2646 @subsection Introduction to @file{ms}
2648 The original @file{-ms} macros were included with
2649 @acronym{AT&T} @code{troff} as well as the
2650 @file{man} macros.
2651 While the @file{man} package is intended for brief documents
2652 that can be read on-line as well as printed, the @file{ms}
2653 macros are suitable for longer documents that are meant to be
2654 printed rather than read on-line.
2656 The @file{ms} macro package included with @code{groff}
2657 is a complete, bottom-up re-implementation.
2658 Several macros (specific to @acronym{AT&T}
2659 or Berkeley) are not included, while several new commands are.
2660 @xref{Differences from AT&T ms}, for more information.
2662 @c ---------------------------------------------------------------------
2664 @node General ms Structure, ms Document Control Registers, ms Intro, ms
2665 @subsection General structure of an @file{ms} document
2666 @cindex @code{ms} macros, general structure
2668 The @file{ms} macro package expects a certain amount of structure,
2669 but not as much as packages such as @file{man} or @file{mdoc}.
2671 The simplest documents can begin with a paragraph macro
2672 (such as @code{LP} or @code{PP}),
2673 and consist of text separated by paragraph macros
2674 or even blank lines.
2675 Longer documents have a structure as follows:
2677 @table @strong
2678 @item Document type
2679 If you invoke the @code{RP}
2680 (report) macro on the first line of the document,
2681 @code{groff} prints the cover page information on its own page;
2682 otherwise it prints the information on the
2683 first page with your document text immediately following.
2684 Other document formats found in @acronym{AT&T} @code{troff}
2685 are specific to @acronym{AT&T} or Berkeley, and are not supported in
2686 @code{groff}.
2688 @item Format and layout
2689 By setting number registers,
2690 you can change your document's type (font and size),
2691 margins, spacing, headers and footers, and footnotes.
2692 @xref{ms Document Control Registers}, for more details.
2694 @item Cover page
2695 A cover page consists of a title, the author's name and institution,
2696 an abstract, and the date.
2697 @footnote{Actually, only the title is required.}
2698 @xref{ms Cover Page Macros}, for more details.
2700 @item Body
2701 Following the cover page is your document.
2702 You can use the @file{ms}
2703 macros to write reports, letters, books, and so forth.
2704 The package is designed for structured documents,
2705 consisting of paragraphs interspersed with headings
2706 and augmented by lists, footnotes, tables, and other
2707 common constructs.
2708 @xref{ms Body Text}, for more details.
2710 @item Table of contents
2711 Longer documents usually include a table of contents,
2712 which you can invoke by placing the
2713 @code{TC}
2714 macro at the end of your document.
2715 The @file{ms}
2716 macros have minimal indexing facilities, consisting of the
2717 @code{IX} macro, which prints an entry on standard error.
2718 Printing the table of contents at the end is necessary since
2719 @code{groff} is a single-pass text formatter,
2720 thus it cannot determine the page number of each section
2721 until that section has actually been set and printed.
2722 Since @file{ms} output is intended for hardcopy,
2723 you can manually relocate the pages containing
2724 the table of contents between the cover page and the
2725 body text after printing.
2726 @end table
2728 @c ---------------------------------------------------------------------
2730 @node ms Document Control Registers, ms Cover Page Macros, General ms Structure, ms
2731 @subsection Document control registers
2732 @cindex @code{ms} macros, document control registers
2734 The following is a list of document control number registers.
2735 For the sake of consistency,
2736 set registers related to margins at the beginning of your document,
2737 or just after the @code{RP} macro.
2738 You can set other registers later in your document,
2739 but you should keep them together at the beginning
2740 to make them easy to find and edit as necessary.
2742 @unnumberedsubsubsec Margin Settings
2744 @Defmpreg {PO, ms}
2745 Defines the page offset (i.e.@: the left margin).
2746 There is no explicit right margin setting; the combination of
2747 the @code{PO} and @code{LL} registers implicitly define the
2748 right margin width.
2750 Effective: next page.
2752 Default value: 1@dmn{i}.
2753 @endDefmpreg
2755 @Defmpreg {LL, ms}
2756 Defines the line length (i.e.@: the width of the body text).
2758 Effective: next paragraph.
2760 Default: 6@dmn{i}.
2761 @endDefmpreg
2763 @Defmpreg {LT, ms}
2764 Defines the title length (i.e.@: the header and footer width).
2765 This is usually the same as @code{LL}, but not necessarily.
2767 Effective: next paragraph.
2769 Default: 6@dmn{i}.
2770 @endDefmpreg
2772 @Defmpreg {HM, ms}
2773 Defines the header margin height at the top of the page.
2775 Effective: next page.
2777 Default: 1@dmn{i}.
2778 @endDefmpreg
2780 @Defmpreg {FM, ms}
2781 Defines the footer margin height at the bottom of the page.
2783 Effective: next page.
2785 Default: 1@dmn{i}.
2786 @endDefmpreg
2788 @unnumberedsubsubsec Text Settings
2790 @Defmpreg {PS, ms}
2791 Defines the point size of the body text.
2793 Effective: next paragraph.
2795 Default: 10@dmn{p}.
2796 @endDefmpreg
2798 @Defmpreg {VS, ms}
2799 Defines the space between lines (line height plus leading).
2801 Effective: next paragraph.
2803 Default: 12@dmn{p}.
2804 @endDefmpreg
2806 @unnumberedsubsubsec Paragraph Settings
2808 @Defmpreg {PI, ms}
2809 Defines the initial indent of a @code{.PP} paragraph.
2811 Effective: next paragraph.
2813 Default: 5@dmn{n}.
2814 @endDefmpreg
2816 @Defmpreg {PD, ms}
2817 Defines the space between paragraphs.
2819 Effective: next paragraph.
2821 Default: 0.3@dmn{v}.
2822 @endDefmpreg
2824 @Defmpreg {QI, ms}
2825 Defines the indent on both sides of a quoted (@code{.QP}) paragraph.
2827 Effective: next paragraph.
2829 Default: 5@dmn{n}.
2830 @endDefmpreg
2832 @unnumberedsubsubsec Footnote Settings
2834 @Defmpreg {FL, ms}
2835 Defines the length of a footnote.
2837 Effective: next footnote.
2839 Default: @math{@code{@\n[LL]} * 5 / 6}.
2840 @endDefmpreg
2842 @Defmpreg {FI, ms}
2843 Defines the footnote indent.
2845 Effective: next footnote.
2847 Default: 2@dmn{n}.
2848 @endDefmpreg
2850 @Defmpreg {FF, ms}
2851 The footnote format:
2852 @table @code
2853 @item 0
2854 Prints the footnote number as a superscript; indents the footnote (default).
2856 @item 1
2857 Prints the number followed by a period (like 1.)
2858 and indents the footnote.
2860 @item 2
2861 Like 1, without an indent.
2863 @item 3
2864 Like 1, but prints the footnote number as a hanging paragraph.
2865 @end table
2867 Effective: next footnote.
2869 Default: 0.
2870 @endDefmpreg
2872 @Defmpreg {FPS, ms}
2873 Defines the footnote point size.
2875 Effective: next footnote.
2877 Default: @math{@code{@\n[PS]} - 2}.
2878 @endDefmpreg
2880 @Defmpreg {FVS, ms}
2881 Defines the footnote vertical spacing.
2883 Effective: next footnote.
2885 Default: @math{@code{@\n[FPS]} + 2}.
2886 @endDefmpreg
2888 @Defmpreg {FPD, ms}
2889 Defines the footnote paragraph spacing.
2891 Effective: next footnote.
2893 Default: @math{@code{@\n[PD]} / 2}.
2894 @endDefmpreg
2896 @unnumberedsubsubsec Miscellaneous Number Registers
2898 @Defmpreg {MINGW, ms}
2899 Defines the minimum width between columns in a multi-column document.
2901 Effective: next page.
2903 Default: 2@dmn{n}.
2904 @endDefmpreg
2906 @c ---------------------------------------------------------------------
2908 @node ms Cover Page Macros, ms Body Text, ms Document Control Registers, ms
2909 @subsection Cover page macros
2910 @cindex @code{ms} macros, cover page
2911 @cindex cover page macros, [@code{ms}]
2913 Use the following macros to create a cover page for your document
2914 in the order shown.
2916 @Defmac {RP, [@code{no}], ms}
2917 Specifies the report format for your document.
2918 The report format creates a separate cover page.
2919 The default action (no @code{.RP}
2920 macro) is to print a subset of the
2921 cover page on page 1 of your document.
2923 If you use the word @code{no} as an optional argument,
2924 @code{groff} prints a title page but
2925 does not repeat any of the title page information
2926 (title, author, abstract, etc.)
2927 on page 1 of the document.
2928 @endDefmac
2930 @Defmac {DA, [@dots{}], ms}
2931 (optional) Print the current date, or the arguments to the macro if any,
2932 on the title page (if specified) and in the footers.
2933 This is the default for @code{nroff}.
2934 @endDefmac
2936 @Defmac {ND, [@dots{}], ms}
2937 (optional) Print the current date, or the arguments to the macro if any,
2938 on the title page (if specified) but not in the footers.
2939 This is the default for @code{troff}.
2940 @endDefmac
2942 @Defmac {TL, , ms}
2943 Specifies the document title.
2944 @code{groff} collects text following the @code{.TL}
2945 macro into the title, until reaching the author name or abstract.
2946 @endDefmac
2948 @Defmac {AU, , ms}
2949 Specifies the author's name, which appears on the
2950 line (or lines) immediately following.
2951 You can specify multiple authors as follows:
2953 @Example
2955 John Doe
2957 University of West Bumblefuzz
2959 Martha Buck
2961 Monolithic Corporation
2964 @endExample
2965 @endDefmac
2967 @Defmac {AI, , ms}
2968 Specifies the author's institution.
2969 You can specify multiple institutions in the same way
2970 that you specify multiple authors.
2971 @endDefmac
2973 @Defmac {AB, [@code{no}], ms}
2974 Begins the abstract.
2975 The default is to print the word @acronym{ABSTRACT},
2976 centered and in italics, above the text of the abstract.
2977 The word @code{no} as an optional argument suppresses this heading.
2978 @endDefmac
2980 @Defmac {AE, , ms}
2981 End the abstract.
2982 @endDefmac
2984 The following is example mark-up for a title page.
2985 @cindex title page, example markup
2986 @cindex example markup, title page
2988 @Example
2989 @cartouche
2992 The Inevitability of Code Bloat
2993 in Commercial and Free Software
2995 J. Random Luser
2997 University of West Bumblefuzz
2999 This report examines the long-term growth
3000 of the code bases in two large, popular software
3001 packages; the free Emacs and the commercial
3002 Microsoft Word.
3003 While differences appear in the type or order
3004 of features added, due to the different
3005 methodologies used, the results are the same
3006 in the end.
3008 The free software approach is shown to be
3009 superior in that while free software can
3010 become as bloated as commercial offerings,
3011 free software tends to have fewer serious
3012 bugs and the added features are in line with
3013 user demand.
3016 ... the rest of the paper follows ...
3017 @end cartouche
3018 @endExample
3020 @c ---------------------------------------------------------------------
3022 @node ms Body Text, ms Page Layout, ms Cover Page Macros, ms
3023 @subsection Body text
3024 @cindex @code{ms} macros, body text
3026 This section describes macros used to mark up the body of your document.
3027 Examples include paragraphs, sections, and other groups.
3029 @menu
3030 * Paragraphs in ms::
3031 * Headings in ms::
3032 * Highlighting in ms::
3033 * Lists in ms::
3034 * Indents in ms::
3035 * Tabstops in ms::
3036 * ms Displays and Keeps::
3037 * ms Insertions::
3038 * Example multi-page table::
3039 * ms Footnotes::
3040 @end menu
3042 @c ---------------------------------------------------------------------
3044 @node Paragraphs in ms, Headings in ms, ms Body Text, ms Body Text
3045 @subsubsection Paragraphs
3046 @cindex @code{ms} macros, paragraph handling
3048 The following paragraph types are available.
3050 @Defmac {PP, , ms}
3051 Sets a paragraph with an initial indent.
3052 @endDefmac
3054 @Defmac {LP, , ms}
3055 Sets a paragraph with no initial indent.
3056 @endDefmac
3058 @Defmac {QP, , ms}
3059 Sets a paragraph that is indented at both left and right margins.
3060 The effect is identical to the @acronym{HTML} @code{<BLOCKQUOTE>} element.
3061 The next paragraph or heading returns margins to normal.
3062 @endDefmac
3064 @Defmac {XP, , ms}
3065 Sets a paragraph whose lines are indented,
3066 except for the first line.
3067 This is a Berkeley extension.
3068 @endDefmac
3070 The following markup uses all four paragraph macros.
3072 @Example
3073 @cartouche
3074 .NH 2
3075 Cases used in the study
3077 The following software and versions were
3078 considered for this report.
3080 For commercial software, we chose
3081 .B "Microsoft Word for Windows" ,
3082 starting with version 1.0 through the
3083 current version (Word 2000).
3085 For free software, we chose
3086 .B Emacs ,
3087 from its first appearance as a standalone
3088 editor through the current version (v20).
3089 See [Bloggs 2002] for details.
3091 Franklin's Law applied to software:
3092 software expands to outgrow both
3093 RAM and disk space over time.
3095 Bibliography:
3097 Bloggs, Joseph R.,
3098 .I "Everyone's a Critic" ,
3099 Underground Press, March 2002.
3100 A definitive work that answers all questions
3101 and criticisms about the quality and usability of
3102 free software.
3104 @end cartouche
3105 @endExample
3107 @c ---------------------------------------------------------------------
3109 @node Headings in ms, Highlighting in ms, Paragraphs in ms, ms Body Text
3110 @subsubsection Headings
3111 @cindex @code{ms} macros, headings
3113 Use headings to create a hierarchical structure for your document.
3114 The @file{ms} macros print headings in @strong{bold},
3115 using the same font family and point size as the body text.
3117 The following describes the heading macros:
3119 @DefmacList {NH, @Var{curr-level}, ms}
3120 @DefmacListEnd {NH, @t{S} @Var{level0} @dots{}, ms}
3121 Numbered heading.
3122 The argument is either a numeric argument to indicate the
3123 level of the heading, or the letter@tie{}@code{S} followed by numeric
3124 arguments to set the heading level explicitly.
3126 If you specify heading levels out of sequence, such as invoking
3127 @samp{.NH 3} after @samp{.NH 1}, @code{groff}
3128 prints a warning on standard error.
3129 @endDefmac
3131 @Defmac {SH, , ms}
3132 Unnumbered subheading.
3133 @endDefmac
3135 @c ---------------------------------------------------------------------
3137 @node Highlighting in ms, Lists in ms, Headings in ms, ms Body Text
3138 @subsubsection Highlighting
3139 @cindex @code{ms} macros, highlighting
3141 The @file{ms} macros provide a variety of methods to highlight
3142 or emphasize text:
3144 @Defmac {B, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
3145 Sets its first argument in @strong{bold type}.
3146 If you specify a second argument, @code{groff} prints it in the
3147 previous font after the bold text, with no intervening space
3148 (this allows you to set punctuation after the highlighted text
3149 without highlighting the punctuation).
3150 Similarly, it prints the third argument (if any) in the previous
3151 font @strong{before} the first argument.
3152 For example,
3154 @Example
3155 .B foo ) (
3156 @endExample
3158 prints (@strong{foo}).
3160 If you give this macro no arguments, @code{groff}
3161 prints all text following in bold until
3162 the next highlighting, paragraph, or heading macro.
3163 @endDefmac
3165 @Defmac {R, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
3166 Sets its first argument in roman (or regular) type.
3167 It operates similarly to the @code{B}@tie{}macro otherwise.
3168 @endDefmac
3170 @Defmac {I, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
3171 Sets its first argument in @emph{italic type}.
3172 It operates similarly to the @code{B}@tie{}macro otherwise.
3173 @endDefmac
3175 @Defmac {CW, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
3176 Sets its first argument in a @code{constant width face}.
3177 It operates similarly to the @code{B}@tie{}macro otherwise.
3178 @endDefmac
3180 @Defmac {BI, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
3181 Sets its first argument in bold italic type.
3182 It operates similarly to the @code{B}@tie{}macro otherwise.
3183 @endDefmac
3185 @Defmac {BX, [@Var{txt}], ms}
3186 Prints its argument and draws a box around it.
3187 If you want to box a string that contains spaces,
3188 use a digit-width space (@code{\0}).
3189 @endDefmac
3191 @Defmac {UL, [@Var{txt} [@Var{post}]], ms}
3192 Prints its first argument with an underline.
3193 If you specify a second argument, @code{groff}
3194 prints it in the previous font after
3195 the underlined text, with no intervening space.
3196 @endDefmac
3198 @Defmac {LG, , ms}
3199 Prints all text following in larger type
3200 (two points larger than the current point size) until
3201 the next font size, highlighting, paragraph, or heading macro.
3202 You can specify this macro multiple times
3203 to enlarge the point size as needed.
3204 @endDefmac
3206 @Defmac {SM, , ms}
3207 Prints all text following in smaller type
3208 (two points smaller than the current point size) until
3209 the next type size, highlighting, paragraph, or heading macro.
3210 You can specify this macro multiple times
3211 to reduce the point size as needed.
3212 @endDefmac
3214 @Defmac {NL, , ms}
3215 Prints all text following in the normal point size
3216 (that is, the value of the @code{PS} register).
3217 @endDefmac
3219 @c ---------------------------------------------------------------------
3221 @node Lists in ms, Indents in ms, Highlighting in ms, ms Body Text
3222 @subsubsection Lists
3223 @cindex @code{ms} macros, lists
3225 The @code{.IP} macro handles duties for all lists.
3227 @Defmac {IP, [@Var{marker} [@Var{width}]], ms}
3228 The @var{marker} is usually a bullet glyph (@code{\[bu]})
3229 for unordered lists, a number (or auto-incrementing number
3230 register) for numbered lists, or a word or phrase for indented
3231 (glossary-style) lists.
3233 The @var{width} specifies the indent for the body of each list item;
3234 its default unit is @samp{n}.
3235 Once specified, the indent remains the same for all
3236 list items in the document until specified again.
3237 @endDefmac
3239 The following is an example of a bulleted list.
3240 @cindex example markup, bulleted list [@code{ms}]
3241 @cindex bulleted list, example markup [@code{ms}]
3243 @Example
3244 A bulleted list:
3245 .IP \[bu] 2
3246 lawyers
3247 .IP \[bu]
3248 guns
3249 .IP \[bu]
3250 money
3251 @endExample
3253 Produces:
3255 @Example
3256 A bulleted list:
3258 o lawyers
3260 o guns
3262 o money
3263 @endExample
3265 @sp 1
3267 The following is an example of a numbered list.
3268 @cindex example markup, numbered list [@code{ms}]
3269 @cindex numbered list, example markup [@code{ms}]
3271 @Example
3272 .nr step 1 1
3273 A numbered list:
3274 .IP \n[step] 3
3275 lawyers
3276 .IP \n+[step]
3277 guns
3278 .IP \n+[step]
3279 money
3280 @endExample
3282 Produces:
3284 @Example
3285 A numbered list:
3287 1. lawyers
3289 2. guns
3291 3. money
3292 @endExample
3294 Note the use of the auto-incrementing number
3295 register in this example.
3297 @sp 1
3298 The following is an example of a glossary-style list.
3299 @cindex example markup, glossary-style list [@code{ms}]
3300 @cindex glossary-style list, example markup [@code{ms}]
3302 @Example
3303 A glossary-style list:
3304 .IP lawyers 0.4i
3305 Two or more attorneys.
3306 .IP guns
3307 Firearms, preferably
3308 large-caliber.
3309 .IP money
3310 Gotta pay for those
3311 lawyers and guns!
3312 @endExample
3314 Produces:
3316 @Example
3317 A glossary-style list:
3319 lawyers
3320       Two or more attorneys.
3322 guns  Firearms, preferably large-caliber.
3324 money
3325       Gotta pay for those lawyers and guns!
3326 @endExample
3328 In the last example, the @code{IP} macro places the definition
3329 on the same line as the term if it has enough space; otherwise,
3330 it breaks to the next line and starts the definition below the
3331 term.
3332 This may or may not be the effect you want, especially if some
3333 of the definitions break and some do not.
3334 The following examples show two possible ways to force a break.
3336 The first workaround uses the @code{br}
3337 request to force a break after printing the term or label.
3339 @Example
3340 @cartouche
3341 A glossary-style list:
3342 .IP lawyers 0.4i
3343 Two or more attorneys.
3344 .IP guns
3346 Firearms, preferably large-caliber.
3347 .IP money
3348 Gotta pay for those lawyers and guns!
3349 @end cartouche
3350 @endExample
3352 @sp 1
3353 The second workaround uses the @code{\p} escape to force the break.
3354 Note the space following the escape; this is important.
3355 If you omit the space, @code{groff} prints the first word on
3356 the same line as the term or label (if it fits) @strong{then}
3357 breaks the line.
3359 @Example
3360 @cartouche
3361 A glossary-style list:
3362 .IP lawyers 0.4i
3363 Two or more attorneys.
3364 .IP guns
3365 \p Firearms, preferably large-caliber.
3366 .IP money
3367 Gotta pay for those lawyers and guns!
3368 @end cartouche
3369 @endExample
3371 @sp 1
3372 To set nested lists, use the @code{RS} and @code{RE} macros.
3373 @xref{Indents in ms}, for more information.
3374 @cindex @code{ms} macros, nested lists
3375 @cindex nested lists [@code{ms}]
3377 For example:
3379 @Example
3380 @cartouche
3381 .IP \[bu] 2
3382 Lawyers:
3384 .IP \[bu]
3385 Dewey,
3386 .IP \[bu]
3387 Cheatham,
3388 .IP \[bu]
3389 and Howe.
3391 .IP \[bu]
3392 Guns
3393 @end cartouche
3394 @endExample
3396 Produces:
3398 @Example
3399 o Lawyers:
3401   o  Dewey,
3403   o  Cheatham,
3405   o  and Howe.
3407 o Guns
3408 @endExample
3410 @c ---------------------------------------------------------------------
3412 @node Indents in ms, Tabstops in ms, Lists in ms, ms Body Text
3413 @subsubsection Indents
3415 In many situations,
3416 you may need to indent a section of text
3417 while still wrapping and filling.
3418 @xref{Lists in ms},
3419 for an example of nested lists.
3421 @DefmacList {RS, , ms}
3422 @DefmacListEnd {RE, , ms}
3423 These macros begin and end an indented section.
3424 The @code{PI} register controls the amount of indent,
3425 allowing the indented text to line up under hanging
3426 and indented paragraphs.
3427 @endDefmac
3429 @xref{ms Displays and Keeps},
3430 for macros to indent and turn off filling.
3432 @c ---------------------------------------------------------------------
3434 @node Tabstops in ms, ms Displays and Keeps, Indents in ms, ms Body Text
3435 @subsubsection Tab Stops
3437 Use the @code{ta} request to define tab stops as needed.
3438 @xref{Tabs and Fields}.
3440 @Defmac{TA, , ms}
3441 Use this macro to reset the tab stops to the default for @file{ms}
3442 (every 5n).
3443 You can redefine the @code{TA} macro to create a different set
3444 of default tab stops.
3445 @endDefmac
3447 @c ---------------------------------------------------------------------
3449 @node ms Displays and Keeps, ms Insertions, Tabstops in ms, ms Body Text
3450 @subsubsection Displays and keeps
3451 @cindex @code{ms} macros, displays
3452 @cindex @code{ms} macros, keeps
3453 @cindex keeps [@code{ms}]
3454 @cindex displays [@code{ms}]
3456 Use displays to show text-based examples or figures
3457 (such as code listings).
3459 Displays turn off filling, so lines of code are displayed
3460 as-is without inserting @code{br} requests in between each line.
3461 Displays can be @dfn{kept} on a single page, or allowed
3462 to break across pages.
3464 @DefmacList {DS, @t{L}, ms}
3465 @DefmacItem {LD, , ms}
3466 @DefmacListEnd {DE, , ms}
3467 Left-justified display.
3468 The @samp{.DS L} call generates a page break, if necessary,
3469 to keep the entire display on one page.
3470 The @code{LD} macro allows the display to break across pages.
3471 The @code{DE} macro ends the display.
3472 @endDefmac
3474 @DefmacList {DS, @t{I}, ms}
3475 @DefmacItem {ID, , ms}
3476 @DefmacListEnd {DE, , ms}
3477 Indents the display as defined by the @code{DI} register.
3478 The @samp{.DS I} call generates a page break, if necessary,
3479 to keep the entire display on one page.
3480 The @code{ID} macro allows the display to break across pages.
3481 The @code{DE} macro ends the display.
3482 @endDefmac
3484 @DefmacList {DS, @t{B}, ms}
3485 @DefmacItem {BD, , ms}
3486 @DefmacListEnd {DE, , ms}
3487 Sets a block-centered display: the entire display is left-justified,
3488 but indented so that the longest line in the display is centered
3489 on the page.
3490 The @samp{.DS B} call generates a page break, if necessary,
3491 to keep the entire display on one page.
3492 The @code{BD} macro allows the display to break across pages.
3493 The @code{DE} macro ends the display.
3494 @endDefmac
3496 @DefmacList {DS, @t{C}, ms}
3497 @DefmacItem {CD, , ms}
3498 @DefmacListEnd {DE, , ms}
3499 Sets a centered display: each line in the display is centered.
3500 The @samp{.DS C} call generates a page break, if necessary,
3501 to keep the entire display on one page.
3502 The @code{CD} macro allows the display to break across pages.
3503 The @code{DE} macro ends the display.
3504 @endDefmac
3506 @DefmacList {DS, @t{R}, ms}
3507 @DefmacItem {RD, , ms}
3508 @DefmacListEnd {DE, , ms}
3509 Right-justifies each line in the display.
3510 The @samp{.DS R} call generates a page break, if necessary,
3511 to keep the entire display on one page.
3512 The @code{RD} macro allows the display to break across pages.
3513 The @code{DE} macro ends the display.
3514 @endDefmac
3516 @DefmacList {Ds, , ms}
3517 @DefmacListEnd {De, , ms}
3518 These two macros are aliases for @code{DS} and @code{DE}, respectively.
3519 @endDefmac
3521 @sp 1
3522 On occasion, you may want to @dfn{keep} other text together on a page.
3523 For example, you may want to keep two paragraphs together, or
3524 a paragraph that refers to a table (or list, or other item)
3525 immediately following.
3526 The @file{ms} macros provide the @code{KS} and @code{KE}
3527 macros for this purpose.
3529 @DefmacList {KS, , ms}
3530 @DefmacListEnd {KE, , ms}
3531 The @code{KS} macro begins a block of text to be kept on a
3532 single page, and the @code{KE} macro ends the block.
3533 @endDefmac
3535 @DefmacList {KF, , ms}
3536 @DefmacListEnd {KE, , ms}
3537 Specifies a @dfn{floating keep};
3538 if the keep cannot fit on the current page, @code{groff}
3539 holds the contents of the keep and allows text following
3540 the keep (in the source file) to fill in the remainder of
3541 the current page.
3542 When the page breaks, whether by an explicit @code{bp}
3543 request or by reaching the end of the page, @code{groff}
3544 prints the floating keep at the top of the new page.
3545 This is useful for printing large graphics or tables
3546 that do not need to appear exactly where specified.
3547 @endDefmac
3549 You can also use the @code{ne} request to force a page break if
3550 there is not enough vertical space remaining on the page.
3552 @sp 1
3553 Use the following macros to draw a box around a section of
3554 text (such as a display).
3556 @DefmacList {B1, , ms}
3557 @DefmacListEnd {B2, , ms}
3558 Marks the beginning and ending of text that is to have a
3559 box drawn around it.
3560 The @code{B1} macro begins the box; the @code{B2} macro ends it.
3561 Text in the box is automatically placed in a diversion (keep).
3562 @endDefmac
3564 @c ---------------------------------------------------------------------
3566 @node ms Insertions, Example multi-page table, ms Displays and Keeps, ms Body Text
3567 @subsubsection Tables, figures, equations, and references
3568 @cindex @code{ms} macros, tables
3569 @cindex @code{ms} macros, figures
3570 @cindex @code{ms} macros, equations
3571 @cindex @code{ms} macros, references
3572 @cindex tables [@code{ms}]
3573 @cindex figures [@code{ms}]
3574 @cindex equations [@code{ms}]
3575 @cindex references [@code{ms}]
3577 The @file{ms} macros support the standard
3578 @code{groff} preprocessors:
3579 @code{tbl}, @code{pic}, @code{eqn}, and @code{refer}.
3580 @pindex tbl
3581 @pindex pic
3582 @pindex eqn
3583 @pindex refer
3584 You mark text meant for preprocessors by enclosing it
3585 in pairs of tags as follows.
3587 @DefmacList {TS, [@code{H}], ms}
3588 @DefmacListEnd {TE, , ms}
3589 Denotes a table, to be processed by the @code{tbl} preprocessor.
3590 The optional argument@tie{}@code{H} to @code{TS} instructs @code{groff}
3591 to create a running header with the information
3592 up to the @code{TH} macro.
3593 @code{groff} prints the header at the beginning of the
3594 table; if the table runs onto another page, @code{groff}
3595 prints the header on the next page as well.
3596 @endDefmac
3598 @DefmacList {PS, , ms}
3599 @DefmacListEnd {PE, , ms}
3600 Denotes a graphic, to be processed by the @code{pic} preprocessor.
3601 You can create a @code{pic} file by hand, using the @acronym{AT&T}
3602 @code{pic} manual available on the Web as a reference, or by using
3603 a graphics program such as @code{xfig}.
3604 @endDefmac
3606 @DefmacList {EQ, [@Var{align}], ms}
3607 @DefmacListEnd {EN, , ms}
3608 Denotes an equation, to be processed by the @code{eqn} preprocessor.
3609 The optional @var{align} argument can be @code{C}, @code{L},
3610 or@tie{}@code{I} to center (the default), left-justify, or indent the
3611 equation.
3612 @endDefmac
3614 @DefmacList {[, , ms}
3615 @DefmacListEnd {], , ms}
3616 Denotes a reference, to be processed by the @code{refer} preprocessor.
3617 The @acronym{GNU} @cite{refer(1)} man page provides a comprehensive
3618 reference to the preprocessor and the format of the bibliographic
3619 database.
3620 @endDefmac
3622 @menu
3623 * Example multi-page table::
3624 @end menu
3626 @c ---------------------------------------------------------------------
3628 @node Example multi-page table, ms Footnotes, ms Insertions, ms Body Text
3629 @subsubsection An example multi-page table
3630 @cindex example markup, multi-page table [@code{ms}]
3631 @cindex multi-page table, example markup [@code{ms}]
3633 The following is an example of how to set up a
3634 table that may print across two or more pages.
3636 @Example
3637 @cartouche
3638 .TS H
3639 allbox expand;
3640 cb | cb .
3641 Text      ...of heading...
3645 l | l .
3646 ... the rest of the table follows...
3649 @end cartouche
3650 @endExample
3652 @c ---------------------------------------------------------------------
3654 @node ms Footnotes,  , Example multi-page table, ms Body Text
3655 @subsubsection Footnotes
3656 @cindex @code{ms} macros, footnotes
3657 @cindex footnotes [@code{ms}]
3659 The @file{ms} macro package has a flexible footnote system.
3660 You can specify either numbered footnotes or symbolic footnotes
3661 (that is, using a marker such as a dagger symbol).
3663 @Defstr {*, ms}
3664 Specifies the location of a numbered footnote marker in the text.
3665 @endDefesc
3667 @DefmacList {FS, , ms}
3668 @DefmacListEnd {FE, , ms}
3669 Specifies the text of the footnote.
3670 The default action is to create a numbered footnote;
3671 you can create a symbolic footnote by specifying
3672 a @dfn{mark} glyph
3673 (such as @code{\[dg]} for the dagger glyph)
3674 in the body text and as an argument to the @code{FS} macro,
3675 followed by the text of the footnote
3676 and the @code{FE} macro.
3677 @endDefmac
3679 You can control how @code{groff}
3680 prints footnote numbers by changing the value of the
3681 @code{FF} register.  @xref{ms Document Control Registers}.
3683 @c ---------------------------------------------------------------------
3685 @node ms Page Layout, Differences from AT&T ms, ms Body Text, ms
3686 @subsection Page layout
3687 @cindex @code{ms} macros, page layout
3688 @cindex page layout [@code{ms}]
3690 The default output from the @file{ms}
3691 macros provides a minimalist page layout:
3692 it prints a single column, with the page number centered at the top
3693 of each page.
3694 It prints no footers.
3696 You can change the layout by setting
3697 the proper number registers and strings.
3699 @menu
3700 * ms Headers and Footers::
3701 * ms Margins::
3702 * ms Multiple Columns::
3703 * ms TOC::
3704 * ms Strings and Special Characters::
3705 @end menu
3707 @c ---------------------------------------------------------------------
3709 @node ms Headers and Footers, ms Margins, ms Page Layout, ms Page Layout
3710 @subsubsection Headers and footers
3711 @cindex @code{ms} macros, headers
3712 @cindex @code{ms} macros, footers
3713 @cindex headers [@code{ms}]
3714 @cindex footers [@code{ms}]
3716 For documents that do not distinguish between odd and even pages,
3717 set the following strings:
3719 @DefstrList {LH, ms}
3720 @DefstrItem {CH, ms}
3721 @DefstrListEnd {RH, ms}
3722 Sets the left, center, and right headers.
3723 @endDefstr
3725 @DefstrList {LF, ms}
3726 @DefstrItem {CF, ms}
3727 @DefstrListEnd {RF, ms}
3728 Sets the left, center, and right footers.
3729 @endDefstr
3731 @sp 1
3732 For documents that need different information printed in the
3733 even and odd pages, use the following macros:
3735 @DefmacList {OH, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
3736 @DefmacItem {EH, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
3737 @DefmacItem {OF, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
3738 @DefmacListEnd {EF, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
3739 The @code{OH} and @code{EH} macros define headers for the odd and even pages;
3740 the @code{OF} and @code{EF} macros define footers for the odd and even pages.
3741 This is more flexible than defining the individual strings.
3743 You can replace the quote (@code{'}) marks with any character not
3744 appearing in the header or footer text.
3745 @endDefmac
3747 @c ---------------------------------------------------------------------
3749 @node ms Margins, ms Multiple Columns, ms Headers and Footers, ms Page Layout
3750 @subsubsection Margins
3751 @cindex @code{ms} macros, margins
3753 You control margins using a set of number registers.
3754 @xref{ms Document Control Registers}, for details.
3756 @c ---------------------------------------------------------------------
3758 @node ms Multiple Columns, ms TOC, ms Margins, ms Page Layout
3759 @subsubsection Multiple columns
3760 @cindex @code{ms} macros, multiple columns
3761 @cindex multiple columns [@code{ms}]
3763 The @file{ms} macros can set text in as many columns as will
3764 reasonably fit on the page.
3765 The following macros are available;
3766 all of them force a page break if a multi-column mode is already set.
3767 However, if the current mode is single-column, starting a multi-column
3768 mode does @strong{not} force a page break.
3770 @Defmac {1C, , ms}
3771 Single-column mode.
3772 @endDefmac
3774 @Defmac {2C, , ms}
3775 Two-column mode.
3776 @endDefmac
3778 @Defmac {MC, [@Var{width} [@Var{gutter}]], ms}
3779 Multi-column mode.
3780 If you specify no arguments, it is equivalent to the
3781 @code{2C} macro.
3782 Otherwise, @var{width} is the width of each column and
3783 @var{gutter} is the space between columns.
3784 The @code{MINGW} number register controls the default gutter width.
3785 @endDefmac
3787 @c ---------------------------------------------------------------------
3789 @node ms TOC, ms Strings and Special Characters, ms Multiple Columns, ms Page Layout
3790 @subsubsection Creating a table of contents
3791 @cindex @code{ms} macros, creating table of contents
3792 @cindex table of contents, creating [@code{ms}]
3794 The facilities in the @file{ms} macro package for creating
3795 a table of contents are semi-automated at best.
3796 Assuming that you want the table of contents to consist of
3797 the document's headings, you need to repeat those headings
3798 wrapped in @code{XS} and @code{XE} macros.
3800 @DefmacList {XS, [@Var{page}], ms}
3801 @DefmacItem {XA, [@Var{page}], ms}
3802 @DefmacListEnd {XE, , ms}
3803 These macros define a table of contents
3804 or an individual entry in the table of contents,
3805 depending on their use.
3806 The macros are very simple; they cannot indent a heading based on its level.
3807 The easiest way to work around this is to add tabs
3808 to the table of contents string.
3809 The following is an example:
3811 @Example
3812 @cartouche
3813 .NH 1
3814 Introduction
3816 Introduction
3821 .NH 2
3822 Methodology
3824 Methodology
3828 @end cartouche
3829 @endExample
3831 You can manually create a table of contents
3832 by beginning with the @code{XS} macro for the first entry,
3833 specifying the page number for that entry as the argument to @code{XS}.
3834 Add subsequent entries using the @code{XA} macro,
3835 specifying the page number for that entry as the argument to @code{XA}.
3836 The following is an example:
3838 @Example
3839 @cartouche
3840 .XS 1
3841 Introduction
3842 .XA 2
3843 A Brief History of the Universe
3844 .XA 729
3845 Details of Galactic Formation
3848 @end cartouche
3849 @endExample
3850 @endDefmac
3852 @Defmac {TC, [@code{no}], ms}
3853 Prints the table of contents on a new page,
3854 setting the page number to@tie{}@strong{i} (Roman numeral one).
3855 You should usually place this macro at the end of the
3856 file, since @code{groff} is a single-pass formatter and
3857 can only print what has been collected up to the point
3858 that the @code{TC} macro appears.
3860 The optional argument @code{no} suppresses printing
3861 the title specified by the string register @code{TOC}.
3862 @endDefmac
3864 @Defmac{PX, [@code{no}], ms}
3865 Prints the table of contents on a new page,
3866 using the current page numbering sequence.
3867 Use this macro to print a manually-generated table of contents
3868 at the beginning of your document.
3870 The optional argument @code{no} suppresses printing
3871 the title specified by the string register @code{TOC}.
3872 @endDefmac
3874 The @cite{Groff and Friends HOWTO}
3875 includes a @code{sed} script that automatically inserts
3876 @code{XS} and @code{XE} macro entries after each heading in a document.
3878 Altering the @code{NH} macro to automatically build the table
3879 of contents is perhaps initially more difficult, but would save
3880 a great deal of time in the long run if you use @file{ms} regularly.
3882 @c ---------------------------------------------------------------------
3884 @node ms Strings and Special Characters,  , ms TOC, ms Page Layout
3885 @subsubsection Strings and Special Characters
3886 @cindex @code{ms} macros, strings
3887 @cindex @code{ms} macros, special characters
3888 @cindex @code{ms} macros, accent marks
3889 @cindex accent marks [@code{ms}]
3890 @cindex special characters [@code{ms}]
3891 @cindex strings [@code{ms}]
3893 The @file{ms} macros provide the following predefined strings.
3894 You can change the string definitions to help in creating
3895 documents in languages other than English.
3897 @Defstr {REFERENCES, ms}
3898 Contains the string printed at the beginning of the
3899 references (bibliography) page.
3900 The default is @samp{References}.
3901 @endDefstr
3903 @Defstr {ABSTRACT, ms}
3904 Contains the string printed at the beginning of the abstract.
3905 The default is @samp{ABSTRACT}.
3906 @endDefstr
3908 @Defstr {TOC, ms}
3909 Contains the string printed at the beginning of the table of contents.
3910 @endDefstr
3912 @DefstrList {MONTH1, ms}
3913 @DefstrItem {MONTH2, ms}
3914 @DefstrItem {MONTH3, ms}
3915 @DefstrItem {MONTH4, ms}
3916 @DefstrItem {MONTH5, ms}
3917 @DefstrItem {MONTH6, ms}
3918 @DefstrItem {MONTH7, ms}
3919 @DefstrItem {MONTH8, ms}
3920 @DefstrItem {MONTH9, ms}
3921 @DefstrItem {MONTH10, ms}
3922 @DefstrItem {MONTH11, ms}
3923 @DefstrListEnd {MONTH12, ms}
3924 Prints the full name of the month in dates.
3925 The default is @samp{January}, @samp{February}, etc.
3926 @endDefstr
3928 The following special characters are available@footnote{For an
3929 explanation what special characters are see @ref{Special Characters}.}:
3931 @Defstr {-, ms}
3932 Prints an em dash.
3933 @endDefstr
3935 @DefstrList {*Q, ms}
3936 @DefstrListEnd {*U, ms}
3937 Prints typographer's quotes in troff,
3938 plain quotes in nroff.
3939 @code{*Q} is the left quote and @code{*U} is the right quote.
3940 @endDefstr
3942 Improved accent marks are available in the @file{ms} macros.
3944 @Defmac {AM, , ms}
3945 Specify this macro at the beginning of your document
3946 to enable extended accent marks and special characters.
3947 This is a Berkeley extension.
3949 To use the accent marks, place them @strong{after}
3950 the character being accented.
3951 @endDefmac
3953 The following accent marks are available
3954 after invoking the @code{AM} macro:
3956 @Defstr {\', ms}
3957 Acute accent.
3958 @endDefstr
3960 @Defstr {\`, ms}
3961 Grave accent.
3962 @endDefstr
3964 @Defstr {^, ms}
3965 Circumflex.
3966 @endDefstr
3968 @Defstr {\,, ms}
3969 Cedilla.
3970 @endDefstr
3972 @Defstr {~, ms}
3973 Tilde.
3974 @endDefstr
3976 @deffn String @t{\*[:]}
3977 @ifnotinfo
3978 @stindex : @r{[}ms@r{]}
3979 @end ifnotinfo
3980 @ifinfo
3981 @stindex \*[@r{<colon>}] @r{[}ms@r{]}
3982 @end ifinfo
3983 Umlaut.
3984 @end deffn
3986 @Defstr {v, ms}
3987 Hacek.
3988 @endDefstr
3990 @Defstr {_, ms}
3991 Macron (overbar).
3992 @endDefstr
3994 @Defstr {., ms}
3995 Underdot.
3996 @endDefstr
3998 @Defstr {o, ms}
3999 Ring above.
4000 @endDefstr
4002 The following are standalone characters
4003 available after invoking the @code{AM} macro:
4005 @Defstr {?, ms}
4006 Upside-down question mark.
4007 @endDefstr
4009 @Defstr {!, ms}
4010 Upside-down exclamation point.
4011 @endDefstr
4013 @Defstr {8, ms}
4014 German @ss{} ligature.
4015 @endDefstr
4017 @Defstr {3, ms}
4018 Yogh.
4019 @endDefstr
4021 @Defstr {Th, ms}
4022 Uppercase thorn.
4023 @endDefstr
4025 @Defstr {th, ms}
4026 Lowercase thorn.
4027 @endDefstr
4029 @Defstr {D-, ms}
4030 Uppercase eth.
4031 @endDefstr
4033 @Defstr {d-, ms}
4034 Lowercase eth.
4035 @endDefstr
4037 @Defstr {q, ms}
4038 Hooked o.
4039 @endDefstr
4041 @Defstr {ae, ms}
4042 Lowercase @ae{} ligature.
4043 @endDefstr
4045 @Defstr {Ae, ms}
4046 Uppercase @AE{} ligature.
4047 @endDefstr
4049 @c ---------------------------------------------------------------------
4051 @node Differences from AT&T ms,  , ms Page Layout, ms
4052 @subsection Differences from @acronym{AT&T} @file{ms}
4053 @cindex @code{ms} macros, differences from @acronym{AT&T}
4054 @cindex @acronym{AT&T} @code{troff}, @code{ms} macro package differences
4056 This section lists the (minor) differences between the
4057 @code{groff -ms} macros and @acronym{AT&T}
4058 @code{troff -ms} macros.
4060 @menu
4061 * Missing ms Macros::
4062 * Additional ms Macros::
4063 @end menu
4065 @c ---------------------------------------------------------------------
4067 @node Missing ms Macros, Additional ms Macros, Differences from AT&T ms, Differences from AT&T ms
4068 @subsubsection @code{troff} macros not appearing in @code{groff}
4070 Macros missing from @code{groff -ms}
4071 are cover page macros specific to Bell Labs.
4072 The macros known to be missing are:
4074 @table @code
4075 @item .TM
4076 Technical memorandum; a cover sheet style
4078 @item .IM
4079 Internal memorandum; a cover sheet style
4081 @item .MR
4082 Memo for record; a cover sheet style
4084 @item .MF
4085 Memo for file; a cover sheet style
4087 @item .EG
4088 Engineer's notes; a cover sheet style
4090 @item .TR
4091 Computing Science Tech Report; a cover sheet style
4093 @item .OK
4094 Other keywords
4096 @item .CS
4097 Cover sheet information
4099 @item .MH
4100 A cover sheet macro
4101 @end table
4103 @c ---------------------------------------------------------------------
4105 @node Additional ms Macros,  , Missing ms Macros, Differences from AT&T ms
4106 @subsubsection @code{groff} macros not appearing in @acronym{AT&T} @code{troff}
4108 The @code{groff -ms} macros have a few minor extensions
4109 compared to the @acronym{AT&T} @code{troff -ms} macros.
4111 @Defmac {AM, , ms}
4112 Improved accent marks.
4113 @xref{ms Strings and Special Characters}, for details.
4114 @endDefmac
4116 @Defmac {DS, @t{I}, ms}
4117 Indented display.
4118 The default behavior of @acronym{AT&T} @code{troff -ms}
4119 was to indent; the @code{groff} default prints displays
4120 flush left with the body text.
4121 @endDefmac
4123 @Defmac {CW, , ms}
4124 Print text in @code{constant width} (Courier) font.
4125 @endDefmac
4127 @Defmac {IX, , ms}
4128 Indexing term (printed on standard error).
4129 You can write a script to capture and process an index
4130 generated in this manner.
4131 @endDefmac
4133 @sp 1
4134 The following additional number registers
4135 appear in @code{groff -ms}:
4137 @Defmpreg {MINGW, ms}
4138 Specifies a minimum space
4139 between columns (for multi-column output); this takes the
4140 place of the @code{GW} register that was documented but apparently
4141 not implemented in @acronym{AT&T} @code{troff}.
4142 @endDefmpreg
4144 @sp 1
4145 Several new string registers are available as well.
4146 You can change these to handle (for example) the local language.
4147 @xref{ms Strings and Special Characters}, for details.
4150 @c =====================================================================
4152 @node me, mm, ms, Macro Packages
4153 @section @file{me}
4154 @cindex @code{me} macro package
4156 @c XXX documentation
4157 @c XXX this is a placeholder until we get stuff knocked into shape
4158 See the @file{meintro.me} and @file{meref.me} documents in
4159 groff's @file{doc} directory.
4162 @c =====================================================================
4164 @node mm,  , me, Macro Packages
4165 @section @file{mm}
4166 @cindex @code{mm} macro package
4168 @c XXX documentation
4169 @c XXX this is a placeholder until we get stuff knocked into shape
4170 See the @cite{groff_mm(7)} man page (type @command{man groff_mm} at
4171 the command line).
4174 @c =====================================================================
4175 @c =====================================================================
4177 @node gtroff Reference, Preprocessors, Macro Packages, Top
4178 @chapter @code{gtroff} Reference
4179 @cindex reference, @code{gtroff}
4180 @cindex @code{gtroff}, reference
4182 This chapter covers @strong{all} of the facilities of @code{gtroff}.
4183 Users of macro packages may skip it if not interested in details.
4186 @menu
4187 * Text::
4188 * Measurements::
4189 * Expressions::
4190 * Identifiers::
4191 * Embedded Commands::
4192 * Registers::
4193 * Manipulating Filling and Adjusting::
4194 * Manipulating Hyphenation::
4195 * Manipulating Spacing::
4196 * Tabs and Fields::
4197 * Character Translations::
4198 * Troff and Nroff Mode::
4199 * Line Layout::
4200 * Line Control::
4201 * Page Layout::
4202 * Page Control::
4203 * Fonts and Symbols::
4204 * Sizes::
4205 * Strings::
4206 * Conditionals and Loops::
4207 * Writing Macros::
4208 * Page Motions::
4209 * Drawing Requests::
4210 * Traps::
4211 * Diversions::
4212 * Environments::
4213 * Suppressing output::
4214 * Colors::
4215 * I/O::
4216 * Postprocessor Access::
4217 * Miscellaneous::
4218 * Gtroff Internals::
4219 * Debugging::
4220 * Implementation Differences::
4221 @end menu
4224 @c =====================================================================
4226 @node Text, Measurements, gtroff Reference, gtroff Reference
4227 @section Text
4228 @cindex text, @code{gtroff} processing
4230 @code{gtroff} input files contain text with control commands
4231 interspersed throughout.  But, even without control codes, @code{gtroff}
4232 still does several things with the input text:
4234 @itemize @bullet
4235 @item
4236 filling and adjusting
4238 @item
4239 adding additional space after sentences
4241 @item
4242 hyphenating
4244 @item
4245 inserting implicit line breaks
4246 @end itemize
4248 @menu
4249 * Filling and Adjusting::
4250 * Hyphenation::
4251 * Sentences::
4252 * Tab Stops::
4253 * Implicit Line Breaks::
4254 * Input Conventions::
4255 * Input Encodings::
4256 @end menu
4258 @c ---------------------------------------------------------------------
4260 @node Filling and Adjusting, Hyphenation, Text, Text
4261 @subsection Filling and Adjusting
4262 @cindex filling
4263 @cindex adjusting
4265 When @code{gtroff} reads text, it collects words from the input and fits
4266 as many of them together on one output line as it can.  This is known as
4267 @dfn{filling}.
4269 @cindex leading spaces
4270 @cindex spaces, leading and trailing
4271 @cindex extra spaces
4272 @cindex trailing spaces
4273 Once @code{gtroff} has a @dfn{filled} line, it tries to @dfn{adjust}
4274 it.  This means it widens the spacing between words until the text
4275 reaches the right margin (in the default adjustment mode).  Extra spaces
4276 between words are preserved, but spaces at the end of lines are ignored.
4277 Spaces at the front of a line cause a @dfn{break} (breaks are
4278 explained in @ref{Implicit Line Breaks}).
4280 @xref{Manipulating Filling and Adjusting}.
4282 @c ---------------------------------------------------------------------
4284 @node Hyphenation, Sentences, Filling and Adjusting, Text
4285 @subsection Hyphenation
4286 @cindex hyphenation
4288 Since the odds are not great for finding a set of words, for every
4289 output line, which fit nicely on a line without inserting excessive
4290 amounts of space between words, @code{gtroff} hyphenates words so
4291 that it can justify lines without inserting too much space between
4292 words.  It uses an internal hyphenation algorithm (a simplified version
4293 of the algorithm used within @TeX{}) to indicate which words can be
4294 hyphenated and how to do so.  When a word is hyphenated, the first part
4295 of the word is added to the current filled line being output (with
4296 an attached hyphen), and the other portion is added to the next
4297 line to be filled.
4299 @xref{Manipulating Hyphenation}.
4301 @c ---------------------------------------------------------------------
4303 @node Sentences, Tab Stops, Hyphenation, Text
4304 @subsection Sentences
4305 @cindex sentences
4307 Although it is often debated, some typesetting rules say there should be
4308 different amounts of space after various punctuation marks.  For
4309 example, the @cite{Chicago typsetting manual} says that a period at the
4310 end of a sentence should have twice as much space following it as would
4311 a comma or a period as part of an abbreviation.
4313 @c XXX exact citation of Chicago manual
4315 @cindex sentence space
4316 @cindex space between sentences
4317 @cindex french-spacing
4318 @code{gtroff} does this by flagging certain characters (normally
4319 @samp{!}, @samp{?}, and @samp{.}) as @dfn{end-of-sentence} characters.
4320 When @code{gtroff} encounters one of these characters at the end of a
4321 line, it appends a normal space followed by a @dfn{sentence space} in
4322 the formatted output.  (This justifies one of the conventions mentioned
4323 in @ref{Input Conventions}.)
4325 @cindex transparent characters
4326 @cindex character, transparent
4327 @cindex @code{dg} glyph, at end of sentence
4328 @cindex @code{rq} glyph, at end of sentence
4329 @cindex @code{"}, at end of sentence
4330 @cindex @code{'}, at end of sentence
4331 @cindex @code{)}, at end of sentence
4332 @cindex @code{]}, at end of sentence
4333 @cindex @code{*}, at end of sentence
4334 In addition, the following characters and symbols are treated
4335 transparently while handling end-of-sentence characters: @samp{"},
4336 @samp{'}, @samp{)}, @samp{]}, @samp{*}, @code{\[dg]}, and @code{\[rq]}.
4338 See the @code{cflags} request in @ref{Using Symbols}, for more details.
4340 @cindex @code{\&}, at end of sentence
4341 To prevent the insertion of extra space after an end-of-sentence
4342 character (at the end of a line), append @code{\&}.
4344 @c ---------------------------------------------------------------------
4346 @node Tab Stops, Implicit Line Breaks, Sentences, Text
4347 @subsection Tab Stops
4348 @cindex tab stops
4349 @cindex stops, tabulator
4350 @cindex tab character
4351 @cindex character, tabulator
4353 @cindex @acronym{EBCDIC} encoding
4354 @cindex encoding, @acronym{EBCDIC}
4355 @code{gtroff} translates @dfn{tabulator characters}, also called
4356 @dfn{tabs} (normally code point @acronym{ASCII} @code{0x09} or
4357 @acronym{EBCDIC} @code{0x05}), in the input into movements to the next
4358 tabulator stop.  These tab stops are initially located every half inch
4359 across the page.  Using this, simple tables can be made easily.
4360 However, it can often be deceptive as the appearance (and width) of the
4361 text on a terminal and the results from @code{gtroff} can vary greatly.
4363 Also, a possible sticking point is that lines beginning with tab
4364 characters are still filled, again producing unexpected results.
4365 For example, the following input
4367 @multitable {12345678} {12345678} {12345678} {12345678}
4368 @item
4369 @tab 1 @tab 2 @tab 3
4370 @item
4371 @tab   @tab 4 @tab 5
4372 @end multitable
4374 @noindent
4375 produces
4377 @multitable {12345678} {12345678} {12345678} {12345678} {12345678} {12345678} {12345678}
4378 @item
4379 @tab 1 @tab 2 @tab 3 @tab   @tab 4 @tab 5
4380 @end multitable
4382 @xref{Tabs and Fields}.
4384 @c ---------------------------------------------------------------------
4386 @node Implicit Line Breaks, Input Conventions, Tab Stops, Text
4387 @subsection Implicit Line Breaks
4388 @cindex implicit line breaks
4389 @cindex implicit breaks of lines
4390 @cindex line, implicit breaks
4391 @cindex break, implicit
4392 @cindex line break
4394 An important concept in @code{gtroff} is the @dfn{break}.  When a break
4395 occurs, @code{gtroff} outputs the partially filled line
4396 (unjustified), and resumes collecting and filling text on the next output
4397 line.
4399 @cindex blank line
4400 @cindex empty line
4401 @cindex line, blank
4402 @cindex blank line macro (@code{blm})
4403 There are several ways to cause a break in @code{gtroff}.  A blank
4404 line not only causes a break, but it also outputs a one-line vertical
4405 space (effectively a blank line).  Note that this behaviour can be
4406 modified with the blank line macro request @code{blm}.
4407 @xref{Blank Line Traps}.
4409 @cindex fill mode
4410 @cindex mode, fill
4411 A line that begins with a space causes a break and the space is
4412 output at the beginning of the next line.  Note that this space isn't
4413 adjusted, even in fill mode.
4415 The end of file also causes a break -- otherwise the last line of
4416 the document may vanish!
4418 Certain requests also cause breaks, implicitly or explicitly.  This is
4419 discussed in @ref{Manipulating Filling and Adjusting}.
4421 @c ---------------------------------------------------------------------
4423 @node Input Conventions, Input Encodings, Implicit Line Breaks, Text
4424 @subsection Input Conventions
4425 @cindex input conventions
4426 @cindex conventions for input
4428 Since @code{gtroff} does filling automatically, it is traditional in
4429 @code{groff} not to try and type things in as nicely formatted
4430 paragraphs.  These are some conventions commonly used when typing
4431 @code{gtroff} text:
4433 @itemize @bullet
4434 @item
4435 Break lines after punctuation, particularly at the end of a sentence
4436 and in other logical places.  Keep separate phrases on lines by
4437 themselves, as entire phrases are often added or deleted when editing.
4439 @item
4440 Try to keep lines less than 40-60@tie{}characters, to allow space for
4441 inserting more text.
4443 @item
4444 Do not try to do any formatting in a @acronym{WYSIWYG} manner (i.e.,
4445 don't try using spaces to get proper indentation).
4446 @end itemize
4448 @c ---------------------------------------------------------------------
4450 @node Input Encodings,  , Input Conventions, Text
4451 @subsection Input Encodings
4453 Currently, the following input encodings are available.
4455 @table @asis
4456 @item cp1047
4457 @cindex encoding, input, @acronym{EBCDIC}
4458 @cindex @acronym{EBCDIC}, input encoding
4459 @cindex input encoding, @acronym{EBCDIC}
4460 @cindex encoding, input, cp1047
4461 @cindex cp1047, input encoding
4462 @cindex input encoding, cp1047
4463 @cindex IBM cp1047 input encoding
4464 @pindex cp1047.tmac
4465 This input encoding works only on @acronym{EBCDIC} platforms (and vice
4466 versa, the other input encodings don't work with @acronym{EBCDIC}); the
4467 file @file{cp1047.tmac} is by default loaded at start-up.
4469 @item latin-1
4470 @cindex encoding, input, @w{latin-1} (ISO @w{8859-1})
4471 @cindex @w{latin-1} (ISO @w{8859-1}), input encoding
4472 @cindex ISO @w{8859-1} (@w{latin-1}), input encoding
4473 @cindex input encoding, @w{latin-1} (ISO @w{8859-1})
4474 @pindex latin1.tmac
4475 This is the default input encoding on non-@acronym{EBCDIC} platforms;
4476 the file @file{latin1.tmac} is loaded at start-up.
4478 @item latin-2
4479 @cindex encoding, input, @w{latin-2} (ISO @w{8859-2})
4480 @cindex @w{latin-2} (ISO @w{8859-2}), input encoding
4481 @cindex ISO @w{8859-2} (@w{latin-2}), input encoding
4482 @cindex input encoding, @w{latin-2} (ISO @w{8859-2})
4483 @pindex latin2.tmac
4484 To use this encoding, either say @w{@samp{.mso latin2.tmac}} at the very
4485 beginning of your document or use @samp{-mlatin2} as a command line
4486 argument for @code{groff}.
4488 @item latin-9 (latin-0)
4489 @cindex encoding, input, @w{latin-9} (@w{latin-0}, ISO @w{8859-15})
4490 @cindex @w{latin-9} (@w{latin-0}, ISO @w{8859-15}), input encoding
4491 @cindex ISO @w{8859-15} (@w{latin-9}, @w{latin-0}), input encoding
4492 @cindex input encoding, @w{latin-9} (@w{latin-9}, ISO @w{8859-15})
4493 @pindex latin9.tmac
4494 This encoding is intended (at least in Europe) to replace @w{latin-1}
4495 encoding.  The main difference to @w{latin-1} is that @w{latin-9}
4496 contains the Euro character.  To use this encoding, either say
4497 @w{@samp{.mso latin9.tmac}} at the very beginning of your document or
4498 use @samp{-mlatin9} as a command line argument for @code{groff}.
4499 @end table
4501 Note that it can happen that some input encoding characters are not
4502 available for a particular output device.  For example, saying
4504 @Example
4505 groff -Tlatin1 -mlatin9 ...
4506 @endExample
4508 @noindent
4509 will fail if you use the Euro character in the input.  Usually, this
4510 limitation is present only for devices which have a limited set of
4511 output glyphs (e.g.@: @option{-Tascii} and @option{-Tlatin1}); for other
4512 devices it is usually sufficient to install proper fonts which contain
4513 the necessary glyphs.
4515 @pindex freeeuro.pfa
4516 @pindex ec.tmac
4517 Due to the importance of the Euro glyph in Europe, the groff package now
4518 comes with a @sc{PostScript} font called @file{freeeuro.pfa} which
4519 provides various glyph shapes for the Euro.  With other words,
4520 @w{latin-9} encoding is supported for the @option{-Tps} device out of
4521 the box (@w{latin-2} isn't).
4523 By its very nature, @option{-Tutf8} supports all input encodings;
4524 @option{-Tdvi} has support for both @w{latin-2} and @w{latin-9} if the
4525 command line @option{-mec} is used also to load the file @file{ec.tmac}
4526 (which flips to the EC fonts).
4529 @c =====================================================================
4531 @node Measurements, Expressions, Text, gtroff Reference
4532 @section Measurements
4533 @cindex measurements
4535 @cindex units of measurement
4536 @cindex basic unit (@code{u})
4537 @cindex machine unit (@code{u})
4538 @cindex measurement unit
4539 @cindex @code{u} unit
4540 @cindex unit, @code{u}
4541 @code{gtroff} (like many other programs) requires numeric parameters to
4542 specify various measurements.  Most numeric parameters@footnote{those
4543 that specify vertical or horizontal motion or a type size} may have a
4544 @dfn{measurement unit} attached.  These units are specified as a single
4545 character which immediately follows the number or expression.  Each of
4546 these units are understood, by @code{gtroff}, to be a multiple of its
4547 @dfn{basic unit}.  So, whenever a different measurement unit is
4548 specified @code{gtroff} converts this into its @dfn{basic units}.  This
4549 basic unit, represented by a @samp{u}, is a device dependent measurement
4550 which is quite small, ranging from 1/75@dmn{th} to 1/72000@dmn{th} of an
4551 inch.  The values may be given as fractional numbers; however,
4552 fractional basic units are always rounded to integers.
4554 Some of the measurement units are completely independent of any of the
4555 current settings (e.g.@: type size) of @code{gtroff}.
4557 @table @code
4558 @item i
4559 @cindex inch unit (@code{i})
4560 @cindex @code{i} unit
4561 @cindex unit, @code{i}
4562 Inches.  An antiquated measurement unit still in use in certain
4563 backwards countries with incredibly low-cost computer equipment.  One
4564 inch is equal to@tie{}2.54@dmn{cm}.
4566 @item c
4567 @cindex centimeter unit (@code{c})
4568 @cindex @code{c} unit
4569 @cindex unit, @code{c}
4570 Centimeters.  One centimeter is equal to@tie{}0.3937@dmn{in}.
4572 @item p
4573 @cindex point unit (@code{p})
4574 @cindex @code{p} unit
4575 @cindex unit, @code{p}
4576 Points.  This is a typesetter's measurement used for measure type size.
4577 It is 72@tie{}points to an inch.
4579 @item P
4580 @cindex pica unit (@code{P})
4581 @cindex @code{P} unit
4582 @cindex unit, @code{P}
4583 Pica.  Another typesetting measurement.  6@tie{}Picas to an inch (and
4584 12@tie{}points to a pica).
4586 @item s
4587 @itemx z
4588 @cindex @code{s} unit
4589 @cindex unit, @code{s}
4590 @cindex @code{z} unit
4591 @cindex unit, @code{z}
4592 @xref{Fractional Type Sizes}, for a discussion of these units.
4594 @item f
4595 @cindex @code{f} unit
4596 @cindex unit, @code{f}
4597 Fractions. Value is 65536.
4598 @xref{Colors}, for usage.
4599 @end table
4601 The other measurements understood by @code{gtroff} depend on
4602 settings currently in effect in @code{gtroff}.  These are very useful
4603 for specifying measurements which should look proper with any size of
4604 text.
4606 @table @code
4607 @item m
4608 @cindex em unit (@code{m})
4609 @cindex @code{m} unit
4610 @cindex unit, @code{m}
4611 Ems.  This unit is equal to the current font size in points.  So called
4612 because it is @emph{approximately} the width of the letter@tie{}@samp{m}
4613 in the current font.
4615 @item n
4616 @cindex en unit (@code{n})
4617 @cindex @code{n} unit
4618 @cindex unit, @code{n}
4619 Ens.  In @code{groff}, this is half of an em.
4621 @item v
4622 @cindex vertical space unit (@code{v})
4623 @cindex space, vertical, unit (@code{v})
4624 @cindex @code{v} unit
4625 @cindex unit, @code{v}
4626 Vertical space.  This is equivalent to the current line spacing.
4627 @xref{Sizes}, for more information about this.
4629 @item M
4630 @cindex @code{M} unit
4631 @cindex unit, @code{M}
4632 100ths of an em.
4633 @end table
4635 @menu
4636 * Default Units::
4637 @end menu
4639 @c ---------------------------------------------------------------------
4641 @node Default Units,  , Measurements, Measurements
4642 @subsection Default Units
4643 @cindex default units
4644 @cindex units, default
4646 Many requests take a default unit.  While this can be helpful at times,
4647 it can cause strange errors in some expressions.  For example, the line
4648 length request expects em units.  Here are several attempts to get a
4649 line length of 3.5@tie{}inches and their results:
4651 @Example
4652 3.5i      @result{}   3.5i
4653 7/2       @result{}   0i
4654 7/2i      @result{}   0i
4655 (7 / 2)u  @result{}   0i
4656 7i/2      @result{}   0.1i
4657 7i/2u     @result{}   3.5i
4658 @endExample
4660 @noindent
4661 Everything is converted to basic units first.  In the above example it
4662 is assumed that 1@dmn{i} equals@tie{}240@dmn{u}, and 1@dmn{m}
4663 equals@tie{}10@dmn{p} (thus 1@dmn{m} equals@tie{}33@dmn{u}).  The value
4664 7@dmn{i}/2 is first handled as 7@dmn{i}/2@dmn{m}, then converted to
4665 1680@dmn{u}/66@dmn{u} which is 25@dmn{u}, and this is approximately
4666 0.1@dmn{i}.  As can be seen, a scaling indicator after a closing
4667 parenthesis is simply ignored.
4669 @cindex measurements, specifying safely
4670 Thus, the safest way to specify measurements is to always
4671 attach a scaling indicator.  If you want to multiply or divide by a
4672 certain scalar value, use @samp{u} as the unit for that value.
4675 @c =====================================================================
4677 @node Expressions, Identifiers, Measurements, gtroff Reference
4678 @section Expressions
4679 @cindex expressions
4681 @code{gtroff} has most arithmetic operators common to other languages:
4683 @itemize @bullet
4684 @item
4685 @cindex arithmetic operators
4686 @cindex operators, arithmetic
4687 @opindex +
4688 @opindex -
4689 @opindex /
4690 @opindex *
4691 @opindex %
4692 Arithmetic: @samp{+} (addition), @samp{-} (subtraction), @samp{/}
4693 (division), @samp{*} (multiplication), @samp{%} (modulo).
4695 @code{gtroff} only provides integer arithmetic.  The internal type used
4696 for computing results is @samp{int}, which is usually a 32@dmn{bit}
4697 signed integer.
4699 @item
4700 @cindex comparison operators
4701 @cindex operators, comparison
4702 @opindex <
4703 @opindex >
4704 @opindex >=
4705 @opindex <=
4706 @opindex =
4707 @opindex ==
4708 Comparison: @samp{<} (less than), @samp{>} (greater than), @samp{<=}
4709 (less than or equal), @samp{>=} (greater than or equal), @samp{=}
4710 (equal), @samp{==} (the same as @samp{=}).
4712 @item
4713 @cindex logical operators
4714 @cindex operators, logical
4715 @opindex &
4716 @ifnotinfo
4717 @opindex :
4718 @end ifnotinfo
4719 @ifinfo
4720 @opindex @r{<colon>}
4721 @end ifinfo
4722 Logical: @samp{&} (logical and), @samp{:} (logical or).
4724 @item
4725 @cindex unary operators
4726 @cindex operators, unary
4727 @opindex -
4728 @opindex +
4729 @opindex !
4730 @cindex @code{if} request, and the @samp{!} operator
4731 @cindex @code{while} request, and the @samp{!} operator
4732 Unary operators: @samp{-} (negating, i.e.@: changing the sign), @samp{+}
4733 (just for completeness; does nothing in expressions), @samp{!} (logical
4734 not; this works only within @code{if} and @code{while} requests).  See
4735 below for the use of unary operators in motion requests.
4737 @item
4738 @cindex extremum operators (@code{>?}, @code{<?})
4739 @cindex operators, extremum (@code{>?}, @code{<?})
4740 @opindex >?
4741 @opindex <?
4742 Extrema: @samp{>?} (maximum), @samp{<?} (minimum).
4744 Example:
4746 @Example
4747 .nr x 5
4748 .nr y 3
4749 .nr z (\n[x] >? \n[y])
4750 @endExample
4752 @noindent
4753 The register@tie{}@code{z} now contains@tie{}5.
4755 @item
4756 @cindex scaling operator
4757 @cindex operator, scaling
4758 Scaling: @code{(@var{c};@var{e})}.  Evaluate@tie{}@var{e} using@tie{}@var{c}
4759 as the default scaling indicator.  If @var{c} is missing, ignore scaling
4760 indicators in the evaluation of@tie{}@var{e}.
4761 @end itemize
4763 @cindex parentheses
4764 @cindex order of evaluation in expressions
4765 @cindex expression, order of evaluation
4766 @opindex (
4767 @opindex )
4768 Parentheses may be used as in any other language.  However, in
4769 @code{gtroff} they are necessary to ensure order of evaluation.
4770 @code{gtroff} has no operator precedence; expressions are evaluated left
4771 to right.  This means that @code{gtroff} evaluates @samp{3+5*4} as if it were
4772 parenthesized like @samp{(3+5)*4}, not as @samp{3+(5*4)}, as might be
4773 expected.
4775 @cindex @code{+}, and page motion
4776 @cindex @code{-}, and page motion
4777 @cindex motion operators
4778 @cindex operators, motion
4779 For many requests which cause a motion on the page, the unary operators
4780 @samp{+} and @samp{-} work differently if leading an expression.  They
4781 then indicate a motion relative to the current position (down or up,
4782 respectively).
4784 @cindex @code{|}, and page motion
4785 @cindex absolute position operator (@code{|})
4786 @cindex position, absolute, operator (@code{|})
4787 Similarly, a leading @samp{|} operator indicates an absolute position.
4788 For vertical movements, it specifies the distance from the top of the
4789 page; for horizontal movements, it gives the distance from the beginning
4790 of the @emph{input} line.
4792 @cindex @code{bp} request, using @code{+} and@tie{}@code{-}
4793 @cindex @code{in} request, using @code{+} and@tie{}@code{-}
4794 @cindex @code{ll} request, using @code{+} and@tie{}@code{-}
4795 @cindex @code{lt} request, using @code{+} and@tie{}@code{-}
4796 @cindex @code{nm} request, using @code{+} and@tie{}@code{-}
4797 @cindex @code{nr} request, using @code{+} and@tie{}@code{-}
4798 @cindex @code{pl} request, using @code{+} and@tie{}@code{-}
4799 @cindex @code{pn} request, using @code{+} and@tie{}@code{-}
4800 @cindex @code{po} request, using @code{+} and@tie{}@code{-}
4801 @cindex @code{ps} request, using @code{+} and@tie{}@code{-}
4802 @cindex @code{pvs} request, using @code{+} and@tie{}@code{-}
4803 @cindex @code{rt} request, using @code{+} and@tie{}@code{-}
4804 @cindex @code{ti} request, using @code{+} and@tie{}@code{-}
4805 @cindex @code{\H}, using @code{+} and@tie{}@code{-}
4806 @cindex @code{\R}, using @code{+} and@tie{}@code{-}
4807 @cindex @code{\s}, using @code{+} and@tie{}@code{-}
4808 @samp{+} and @samp{-} are also treated differently by the following
4809 requests and escapes: @code{bp}, @code{in}, @code{ll}, @code{lt},
4810 @code{nm}, @code{nr}, @code{pl}, @code{pn}, @code{po}, @code{ps},
4811 @code{pvs}, @code{rt}, @code{ti}, @code{\H}, @code{\R}, and @code{\s}.
4812 Here, leading plus and minus signs indicate increments and decrements.
4814 @xref{Setting Registers}, for some examples.
4816 @Defesc {\\B, ', anything, '}
4817 @cindex numeric expression, valid
4818 @cindex valid numeric expression
4819 Return@tie{}1 if @var{anything} is a valid numeric expression;
4820 or@tie{}0 if @var{anything} is empty or not a valid numeric expression.
4821 @endDefesc
4823 @cindex space characters, in expressions
4824 @cindex expressions, and space characters
4825 Due to the way arguments are parsed, spaces are not allowed in
4826 expressions, unless the entire expression is surrounded by parentheses.
4828 @xref{Request and Macro Arguments}, and @ref{Conditionals and Loops}.
4831 @c =====================================================================
4833 @node Identifiers, Embedded Commands, Expressions, gtroff Reference
4834 @section Identifiers
4835 @cindex identifiers
4837 Like any other language, @code{gtroff} has rules for properly formed
4838 @dfn{identifiers}.  In @code{gtroff}, an identifier can be made up of
4839 almost any printable character, with the exception of the following
4840 characters:
4842 @itemize @bullet
4843 @item
4844 @cindex whitespace characters
4845 @cindex newline character
4846 @cindex character, whitespace
4847 Whitespace characters (spaces, tabs, and newlines).
4849 @item
4850 @cindex character, backspace
4851 @cindex backspace character
4852 @cindex @acronym{EBCDIC} encoding of backspace
4853 Backspace (@acronym{ASCII}@tie{}@code{0x08} or
4854 @acronym{EBCDIC}@tie{}@code{0x16}) and character code @code{0x01}.
4856 @item
4857 @cindex invalid input characters
4858 @cindex input characters, invalid
4859 @cindex characters, invalid input
4860 @cindex Unicode
4861 The following input characters are invalid and are ignored if
4862 @code{groff} runs on a machine based on @acronym{ASCII}, causing a
4863 warning message of type @samp{input} (see @ref{Debugging}, for more
4864 details): @code{0x00}, @code{0x0B}, @code{0x0D}-@code{0x1F},
4865 @code{0x80}-@code{0x9F}.
4867 And here are the invalid input characters if @code{groff} runs on an
4868 @acronym{EBCDIC} host: @code{0x00}, @code{0x08}, @code{0x09},
4869 @code{0x0B}, @code{0x0D}-@code{0x14}, @code{0x17}-@code{0x1F},
4870 @code{0x30}-@code{0x3F}.
4872 Currently, some of these reserved codepoints are used internally, thus
4873 making it non-trivial to extend @code{gtroff} to cover Unicode or other
4874 character sets and encodings which use characters of these ranges.
4876 Note that invalid characters are removed before parsing; an
4877 identifier @code{foo}, followed by an invalid character, followed by
4878 @code{bar} is treated as @code{foobar}.
4879 @end itemize
4881 For example, any of the following is valid.
4883 @Example
4887 end-list
4889 @endExample
4891 @cindex @code{]}, as part of an identifier
4892 @noindent
4893 Note that identifiers longer than two characters with a closing bracket
4894 (@samp{]}) in its name can't be accessed with escape sequences which
4895 expect an identifier as a parameter.  For example, @samp{\[foo]]}
4896 accesses the glyph @samp{foo}, followed by @samp{]}, whereas
4897 @samp{\C'foo]'} really asks for glyph @samp{foo]}.
4899 @cindex @code{refer}, and macro names starting with @code{[} or @code{]}
4900 @cindex @code{[}, macro names starting with, and @code{refer}
4901 @cindex @code{]}, macro names starting with, and @code{refer}
4902 @cindex macro names, starting with @code{[} or @code{]}, and @code{refer}
4903 To avoid problems with the @code{refer} preprocessor, macro names
4904 should not start with @samp{[} or @samp{]}.  Due to backwards
4905 compatibility, everything after @samp{.[} and @samp{.]} is handled as
4906 a special argument to @code{refer}.  For example, @samp{.[foo} makes
4907 @code{refer} to start a reference, using @samp{foo} as a parameter.
4909 @Defesc {\\A, ', ident, '}
4910 Test whether an identifier @var{ident} is valid in @code{gtroff}.  It
4911 expands to the character@tie{}1 or@tie{}0 according to whether its
4912 argument (usually delimited by quotes) is or is not acceptable as the
4913 name of a string, macro, diversion, number register, environment, or
4914 font.  It returns@tie{}0 if no argument is given.  This is useful for
4915 looking up user input in some sort of associative table.
4917 @Example
4918 \A'end-list'
4919     @result{} 1
4920 @endExample
4921 @endDefesc
4923 @xref{Escapes}, for details on parameter delimiting characters.
4925 Identifiers in @code{gtroff} can be any length, but, in some contexts,
4926 @code{gtroff} needs to be told where identifiers end and text begins
4927 (and in different ways depending on their length):
4929 @itemize @bullet
4930 @item
4931 Single character.
4933 @cindex @code{(}, starting a two-character identifier
4934 @item
4935 Two characters.  Must be prefixed with @samp{(} in some situations.
4937 @cindex @code{[}, starting an identifier
4938 @cindex @code{]}, ending an identifier
4939 @item
4940 Arbitrary length (@code{gtroff} only).  Must be bracketed with @samp{[}
4941 and@tie{}@samp{]} in some situations.  Any length identifier can be put
4942 in brackets.
4943 @end itemize
4945 @cindex undefined identifiers
4946 @cindex identifiers, undefined
4947 Unlike many other programming languages, undefined identifiers are
4948 silently ignored or expanded to nothing.
4949 When @code{gtroff} finds an undefined identifier, it emits a
4950 warning, doing the following:
4952 @itemize @bullet
4953 @item
4954 If the identifier is a string, macro, or diversion,
4955 @code{gtroff} defines it as empty.
4957 @item
4958 If the identifier is a number register, @code{gtroff}
4959 defines it with a value of@tie{}0.
4960 @end itemize
4962 @xref{Warnings}., @ref{Interpolating Registers}, and @ref{Strings}.
4964 Note that macros, strings, and diversions share the same name space.
4966 @Example
4967 .de xxx
4968 .  nop foo
4971 .di xxx
4976 .xxx
4977     @result{} bar
4978 @endExample
4980 @noindent
4981 As can be seen in the previous example, @code{gtroff} reuses the
4982 identifier @samp{xxx}, changing it from a macro to a diversion.
4983 No warning is emitted!  The contents of the first macro definition is
4984 lost.
4986 @xref{Interpolating Registers}, and @ref{Strings}.
4989 @c =====================================================================
4991 @node Embedded Commands, Registers, Identifiers, gtroff Reference
4992 @section Embedded Commands
4993 @cindex embedded commands
4994 @cindex commands, embedded
4996 Most documents need more functionality beyond filling, adjusting and
4997 implicit line breaking.  In order to gain further functionality,
4998 @code{gtroff} allows commands to be embedded into the text, in two ways.
5000 The first is a @dfn{request} which takes up an entire line, and does
5001 some large-scale operation (e.g.@: break lines, start new pages).
5003 The other is an @dfn{escape} which can be usually embedded anywhere
5004 in the text; most requests can accept it even as an argument.
5005 Escapes generally do more minor operations like sub- and superscripts,
5006 print a symbol, etc.
5008 @menu
5009 * Requests::
5010 * Macros::
5011 * Escapes::
5012 @end menu
5014 @c ---------------------------------------------------------------------
5016 @node Requests, Macros, Embedded Commands, Embedded Commands
5017 @subsection Requests
5018 @cindex requests
5020 @cindex control character (@code{.})
5021 @cindex character, control (@code{.})
5022 @cindex no-break control character (@code{'})
5023 @cindex character, no-break control (@code{'})
5024 @cindex control character, no-break (@code{'})
5025 A request line begins with a control character, which is either a single
5026 quote (@samp{'}, the @dfn{no-break control character}) or a period
5027 (@samp{.}, the normal @dfn{control character}).  These can be changed;
5028 see @ref{Character Translations}, for details.  After this there may be
5029 optional tabs or spaces followed by an identifier which is the name of
5030 the request.  This may be followed by any number of space-separated
5031 arguments (@emph{no} tabs here).
5033 @cindex structuring source code of documents or macro packages
5034 @cindex documents, structuring the source code
5035 @cindex macro packages, structuring the source code
5036 Since a control character followed by whitespace only is ignored, it
5037 is common practice to use this feature for structuring the source code
5038 of documents or macro packages.
5040 @Example
5041 .de foo
5042 .  tm This is foo.
5046 .de bar
5047 .  tm This is bar.
5049 @endExample
5051 @cindex blank line
5052 @cindex blank line macro (@code{blm})
5053 Another possibility is to use the blank line macro request @code{blm}
5054 by assigning an empty macro to it.
5056 @Example
5057 .de do-nothing
5059 .blm do-nothing  \" activate blank line macro
5061 .de foo
5062 .  tm This is foo.
5066 .de bar
5067 .  tm This is bar.
5070 .blm             \" deactivate blank line macro
5071 @endExample
5073 @xref{Blank Line Traps}.
5075 @cindex zero width space character (@code{\&})
5076 @cindex character, zero width space (@code{\&})
5077 @cindex space character, zero width (@code{\&})
5078 @cindex @code{\&}, escaping control characters
5079 To begin a line with a control character without it being interpreted,
5080 precede it with @code{\&}.  This represents a zero width space, which
5081 means it does not affect the output.
5083 In most cases the period is used as a control character.  Several
5084 requests cause a break implicitly; using the single quote control
5085 character prevents this.
5087 @menu
5088 * Request and Macro Arguments::
5089 @end menu
5091 @node Request and Macro Arguments,  , Requests, Requests
5092 @subsubsection Request and Macro Arguments
5093 @cindex request arguments
5094 @cindex macro arguments
5095 @cindex arguments to requests and macros
5097 Arguments to requests and macros are processed much like the shell:
5098 The line is split into arguments according to
5099 spaces.@footnote{Plan@tie{}9's @code{troff} implementation also allows
5100 tabs for argument separation -- @code{gtroff} intentionally doesn't
5101 support this.}
5103 @cindex spaces, in a macro argument
5104 An argument to a macro which is intended to contain spaces can either be
5105 enclosed in double quotes, or have the spaces @dfn{escaped} with
5106 backslashes.  This is @emph{not} true for requests.
5108 Here are a few examples for a hypothetical macro @code{uh}:
5110 @Example
5111 .uh The Mouse Problem
5112 .uh "The Mouse Problem"
5113 .uh The\ Mouse\ Problem
5114 @endExample
5116 @cindex @code{\~}, difference to @code{\@key{SP}}
5117 @cindex @code{\@key{SP}}, difference to @code{\~}
5118 @noindent
5119 The first line is the @code{uh} macro being called with 3 arguments,
5120 @samp{The}, @samp{Mouse}, and @samp{Problem}.  The latter two have the
5121 same effect of calling the @code{uh} macro with one argument, @samp{The
5122 Mouse Problem}.@footnote{The last solution, i.e., using escaped spaces,
5123 is ``classical'' in the sense that it can be found in most @code{troff}
5124 documents.  Nevertheless, it is not optimal in all situations, since
5125 @w{@samp{\ }} inserts a fixed-width, non-breaking space character which
5126 can't stretch.  @code{gtroff} provides a different command @code{\~} to
5127 insert a stretchable, non-breaking space.}
5129 @cindex @code{"}, in a macro argument
5130 @cindex double quote, in a macro argument
5131 A double quote which isn't preceded by a space doesn't start a macro
5132 argument.  If not closing a string, it is printed literally.
5134 For example,
5136 @Example
5137 .xxx a" "b c" "de"fg"
5138 @endExample
5140 @noindent
5141 has the arguments @samp{a"}, @w{@samp{b c}}, @samp{de}, and @samp{fg"}.
5142 Don't rely on this obscure behaviour!
5144 There are two possibilities to get a double quote reliably.
5146 @itemize @bullet
5147 @item
5148 Enclose the whole argument with double quotes and use two consecutive double
5149 quotes to represent a single one.  This traditional solution has the
5150 disadvantage that double quotes don't survive argument expansion again if
5151 called in compatibility mode (using the @option{-C} option of @code{groff}):
5153 @Example
5154 .de xx
5155 .  tm xx: `\\$1' `\\$2' `\\$3'
5157 .  yy "\\$1" "\\$2" "\\$3"
5159 .de yy
5160 .  tm yy: `\\$1' `\\$2' `\\$3'
5162 .xx A "test with ""quotes""" .
5163     @result{} xx: `A' `test with "quotes"' `.'
5164     @result{} yy: `A' `test with ' `quotes""'
5165 @endExample
5167 @noindent
5168 If not in compatibility mode, you get the expected result
5170 @Example
5171 xx: `A' `test with "quotes"' `.'
5172 yy: `A' `test with "quotes"' `.'
5173 @endExample
5175 @noindent
5176 since @code{gtroff} preserves the input level.
5178 @item
5179 Use the double quote glyph @code{\(dq}.  This works with and without
5180 compatibility mode enabled since @code{gtroff} doesn't convert @code{\(dq}
5181 back to a double quote input character.
5183 Not that this method won't work with @acronym{UNIX} @code{troff} in general
5184 since the glyph `dq' isn't defined normally.
5185 @end itemize
5187 @cindex @code{ds} request, and double quotes
5188 Double quotes in the @code{ds} request are handled differently.
5189 @xref{Strings}, for more details.
5191 @c ---------------------------------------------------------------------
5193 @node Macros, Escapes, Requests, Embedded Commands
5194 @subsection Macros
5195 @cindex macros
5197 @code{gtroff} has a @dfn{macro} facility for defining a series of lines
5198 which can be invoked by name.  They are called in the same manner as
5199 requests -- arguments also may be passed basically in the same manner.
5201 @xref{Writing Macros}, and @ref{Request and Macro Arguments}.
5203 @c ---------------------------------------------------------------------
5205 @node Escapes,  , Macros, Embedded Commands
5206 @subsection Escapes
5207 @cindex escapes
5209 Escapes may occur anywhere in the input to @code{gtroff}.  They usually
5210 begin with a backslash and are followed by a single character which
5211 indicates the function to be performed.  The escape character can be
5212 changed; see @ref{Character Translations}.
5214 Escape sequences which require an identifier as a parameter accept three
5215 possible syntax forms.
5217 @itemize @bullet
5218 @item
5219 The next single character is the identifier.
5221 @cindex @code{(}, starting a two-character identifier
5222 @item
5223 If this single character is an opening parenthesis, take the following
5224 two characters as the identifier.  Note that there is no closing
5225 parenthesis after the identifier.
5227 @cindex @code{[}, starting an identifier
5228 @cindex @code{]}, ending an identifier
5229 @item
5230 If this single character is an opening bracket, take all characters
5231 until a closing bracket as the identifier.
5232 @end itemize
5234 @noindent
5235 Examples:
5237 @Example
5239 \n(XX
5240 \*[TeX]
5241 @endExample
5243 @cindex @code{'}, delimiting arguments
5244 @cindex argument delimiting characters
5245 @cindex characters, argument delimiting
5246 @cindex delimiting characters for arguments
5247 Other escapes may require several arguments and/or some special format.
5248 In such cases the argument is traditionally enclosed in single quotes
5249 (and quotes are always used in this manual for the definitions of escape
5250 sequences).  The enclosed text is then processed according to what that
5251 escape expects.  Example:
5253 @Example
5254 \l'1.5i\(bu'
5255 @endExample
5257 @cindex @code{\o}, possible quote characters
5258 @cindex @code{\b}, possible quote characters
5259 @cindex @code{\X}, possible quote characters
5260 Note that the quote character can be replaced with any other character
5261 which does not occur in the argument (even a newline or a space
5262 character) in the following escapes: @code{\o}, @code{\b}, and
5263 @code{\X}.  This makes e.g.
5265 @Example
5266 A caf
5271 in Paris
5272   @result{} A caf@'e in Paris
5273 @endExample
5275 @noindent
5276 possible, but it is better not to use this feature to avoid confusion.
5278 @cindex @code{\%}, used as delimiter
5279 @cindex @code{\@key{SP}}, used as delimiter
5280 @cindex @code{\|}, used as delimiter
5281 @cindex @code{\^}, used as delimiter
5282 @cindex @code{\@{}, used as delimiter
5283 @cindex @code{\@}}, used as delimiter
5284 @cindex @code{\'}, used as delimiter
5285 @cindex @code{\`}, used as delimiter
5286 @cindex @code{\-}, used as delimiter
5287 @cindex @code{\_}, used as delimiter
5288 @cindex @code{\!}, used as delimiter
5289 @cindex @code{\?}, used as delimiter
5290 @cindex @code{\@@}, used as delimiter
5291 @cindex @code{\)}, used as delimiter
5292 @cindex @code{\/}, used as delimiter
5293 @cindex @code{\,}, used as delimiter
5294 @cindex @code{\&}, used as delimiter
5295 @ifnotinfo
5296 @cindex @code{\:}, used as delimiter
5297 @end ifnotinfo
5298 @ifinfo
5299 @cindex @code{\@r{<colon>}}, used as delimiter
5300 @end ifinfo
5301 @cindex @code{\~}, used as delimiter
5302 @cindex @code{\0}, used as delimiter
5303 @cindex @code{\a}, used as delimiter
5304 @cindex @code{\c}, used as delimiter
5305 @cindex @code{\d}, used as delimiter
5306 @cindex @code{\e}, used as delimiter
5307 @cindex @code{\E}, used as delimiter
5308 @cindex @code{\p}, used as delimiter
5309 @cindex @code{\r}, used as delimiter
5310 @cindex @code{\t}, used as delimiter
5311 @cindex @code{\u}, used as delimiter
5312 The following escapes sequences (which are handled similarly to
5313 characters since they don't take a parameter) are also allowed as
5314 delimiters: @code{\%}, @w{@samp{\ }}, @code{\|}, @code{\^}, @code{\@{},
5315 @code{\@}}, @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!},
5316 @code{\?}, @code{\@@}, @code{\)}, @code{\/}, @code{\,}, @code{\&},
5317 @code{\:}, @code{\~}, @code{\0}, @code{\a}, @code{\c}, @code{\d},
5318 @code{\e}, @code{\E}, @code{\p}, @code{\r}, @code{\t}, and @code{\u}.
5319 Again, don't use these if possible.
5321 @cindex @code{\A}, allowed delimiters
5322 @cindex @code{\B}, allowed delimiters
5323 @cindex @code{\Z}, allowed delimiters
5324 @cindex @code{\C}, allowed delimiters
5325 @cindex @code{\w}, allowed delimiters
5326 No newline characters as delimiters are allowed in the following
5327 escapes: @code{\A}, @code{\B}, @code{\Z}, @code{\C}, and @code{\w}.
5329 @cindex @code{\D}, allowed delimiters
5330 @cindex @code{\h}, allowed delimiters
5331 @cindex @code{\H}, allowed delimiters
5332 @cindex @code{\l}, allowed delimiters
5333 @cindex @code{\L}, allowed delimiters
5334 @cindex @code{\N}, allowed delimiters
5335 @cindex @code{\R}, allowed delimiters
5336 @cindex @code{\s}, allowed delimiters
5337 @cindex @code{\S}, allowed delimiters
5338 @cindex @code{\v}, allowed delimiters
5339 @cindex @code{\x}, allowed delimiters
5340 Finally, the escapes @code{\D}, @code{\h}, @code{\H}, @code{\l},
5341 @code{\L}, @code{\N}, @code{\R}, @code{\s}, @code{\S}, @code{\v},
5342 and @code{\x} can't use the following characters as delimiters:
5344 @itemize @bullet
5345 @item
5346 @cindex numbers, and delimiters
5347 @cindex digits, and delimiters
5348 The digits @code{0}-@code{9}.
5350 @item
5351 @cindex operators, as delimiters
5352 @cindex @code{+}, as delimiter
5353 @cindex @code{-}, as delimiter
5354 @cindex @code{/}, as delimiter
5355 @cindex @code{*}, as delimiter
5356 @cindex @code{%}, as delimiter
5357 @cindex @code{<}, as delimiter
5358 @cindex @code{>}, as delimiter
5359 @cindex @code{=}, as delimiter
5360 @cindex @code{&}, as delimiter
5361 @ifnotinfo
5362 @cindex @code{:}, as delimiter
5363 @end ifnotinfo
5364 @ifinfo
5365 @cindex <colon>, as delimiter
5366 @end ifinfo
5367 @cindex @code{(}, as delimiter
5368 @cindex @code{)}, as delimiter
5369 @cindex @code{.}, as delimiter
5370 The (single-character) operators @samp{+-/*%<>=&:().}.
5372 @item
5373 @cindex space character
5374 @cindex character, space
5375 @cindex tab character
5376 @cindex character, tab
5377 @cindex newline character
5378 @cindex character, newline
5379 The space, tab, and newline characters.
5381 @item
5382 @cindex @code{\%}, used as delimiter
5383 @ifnotinfo
5384 @cindex @code{\:}, used as delimiter
5385 @end ifnotinfo
5386 @ifinfo
5387 @cindex @code{\@r{<colon>}}, used as delimiter
5388 @end ifinfo
5389 @cindex @code{\@{}, used as delimiter
5390 @cindex @code{\@}}, used as delimiter
5391 @cindex @code{\'}, used as delimiter
5392 @cindex @code{\`}, used as delimiter
5393 @cindex @code{\-}, used as delimiter
5394 @cindex @code{\_}, used as delimiter
5395 @cindex @code{\!}, used as delimiter
5396 @cindex @code{\@@}, used as delimiter
5397 @cindex @code{\/}, used as delimiter
5398 @cindex @code{\c}, used as delimiter
5399 @cindex @code{\e}, used as delimiter
5400 @cindex @code{\p}, used as delimiter
5401 All escape sequences except @code{\%}, @code{\:}, @code{\@{}, @code{\@}},
5402 @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!}, @code{\@@},
5403 @code{\/}, @code{\c}, @code{\e}, and @code{\p}.
5404 @end itemize
5406 @cindex printing backslash (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
5407 @cindex backslash, printing (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
5408 To have a backslash (actually, the current escape character) appear in the
5409 output several escapes are defined: @code{\\}, @code{\e} or @code{\E}.
5410 These are very similar, and only differ with respect to being used in
5411 macros or diversions.  @xref{Character Translations}, for an exact
5412 description of those escapes.
5414 @xref{Implementation Differences}, @ref{Copy-in Mode}, and @ref{Diversions},
5415 @ref{Identifiers}, for more information.
5417 @menu
5418 * Comments::
5419 @end menu
5421 @node Comments,  , Escapes, Escapes
5422 @subsubsection Comments
5423 @cindex comments
5425 Probably one of the most@footnote{Unfortunately, this is a lie.  But
5426 hopefully future @code{gtroff} hackers will believe it @code{:-)}}
5427 common forms of escapes is the comment.
5429 @Defesc {\\", , , }
5430 Start a comment.  Everything to the end of the input line is ignored.
5432 This may sound simple, but it can be tricky to keep the comments from
5433 interfering with the appearance of the final output.
5435 @cindex @code{ds}, @code{ds1} requests, and comments
5436 @cindex @code{as}, @code{as1} requests, and comments
5437 If the escape is to the right of some text or a request, that portion
5438 of the line is ignored, but the space leading up to it is noticed by
5439 @code{gtroff}.  This only affects the @code{ds} and @code{as}
5440 request and its variants.
5442 @cindex tabs, before comments
5443 @cindex comments, lining up with tabs
5444 One possibly irritating idiosyncracy is that tabs must not be used to
5445 line up comments.  Tabs are not treated as whitespace between the
5446 request and macro arguments.
5448 @cindex undefined request
5449 @cindex request, undefined
5450 A comment on a line by itself is treated as a blank line, because
5451 after eliminating the comment, that is all that remains:
5453 @Example
5454 Test
5455 \" comment
5456 Test
5457 @endExample
5459 @noindent
5460 produces
5462 @Example
5463 Test
5465 Test
5466 @endExample
5468 To avoid this, it is common to start the line with @code{.\"} which
5469 causes the line to be treated as an undefined request and thus ignored
5470 completely.
5472 @cindex @code{'}, as a comment
5473 Another commenting scheme seen sometimes is three consecutive single
5474 quotes (@code{'''}) at the beginning of a line.  This works, but
5475 @code{gtroff} gives a warning about an undefined macro (namely
5476 @code{''}), which is harmless, but irritating.
5477 @endDefesc
5479 @Defesc {\\#, , , }
5480 To avoid all this, @code{gtroff} has a new comment mechanism using the
5481 @code{\#} escape.  This escape works the same as @code{\"} except that
5482 the newline is also ignored:
5484 @Example
5485 Test
5486 \# comment
5487 Test
5488 @endExample
5490 @noindent
5491 produces
5493 @Example
5494 Test Test
5495 @endExample
5497 @noindent
5498 as expected.
5499 @endDefesc
5501 @Defreq {ig, [@Var{end}]}
5502 Ignore all input until @code{gtroff} encounters the macro named
5503 @code{.}@var{end} on a line by itself (or @code{..} if @var{end} is not
5504 specified).  This is useful for commenting out large blocks of text:
5506 @Example
5507 text text text...
5509 This is part of a large block
5510 of text that has been
5511 temporarily(?) commented out.
5513 We can restore it simply by removing
5514 the .ig request and the ".." at the
5515 end of the block.
5517 More text text text...
5518 @endExample
5520 @noindent
5521 produces
5523 @Example
5524 text text text@dots{}  More text text text@dots{}
5525 @endExample
5527 @noindent
5528 Note that the commented-out block of text does not
5529 cause a break.
5531 The input is read in copy-mode; auto-incremented registers @emph{are}
5532 affected (@pxref{Auto-increment}).
5533 @endDefreq
5536 @c =====================================================================
5538 @node Registers, Manipulating Filling and Adjusting, Embedded Commands, gtroff Reference
5539 @section Registers
5540 @cindex registers
5542 Numeric variables in @code{gtroff} are called @dfn{registers}.  There
5543 are a number of built-in registers, supplying anything from the date to
5544 details of formatting parameters.
5546 @xref{Identifiers}, for details on register identifiers.
5548 @menu
5549 * Setting Registers::
5550 * Interpolating Registers::
5551 * Auto-increment::
5552 * Assigning Formats::
5553 * Built-in Registers::
5554 @end menu
5556 @c ---------------------------------------------------------------------
5558 @node Setting Registers, Interpolating Registers, Registers, Registers
5559 @subsection Setting Registers
5560 @cindex setting registers (@code{nr}, @code{\R})
5561 @cindex registers, setting (@code{nr}, @code{\R})
5563 Define or set registers using the @code{nr} request or the
5564 @code{\R} escape.
5566 @DefreqList {nr, ident value}
5567 @DefescListEnd {\\R, ', ident value, '}
5568 Set number register @var{ident} to @var{value}.  If @var{ident}
5569 doesn't exist, @code{gtroff} creates it.
5571 The argument to @code{\R} usually has to be enclosed in quotes.
5572 @xref{Escapes}, for details on parameter delimiting characters.
5574 The @code{\R} escape doesn't produce an input token in @code{gtroff};
5575 with other words, it vanishes completely after @code{gtroff} has
5576 processed it.
5577 @endDefreq
5579 For example, the following two lines are equivalent:
5581 @Example
5582 .nr a (((17 + (3 * 4))) % 4)
5583 \R'a (((17 + (3 * 4))) % 4)'
5584     @result{} 1
5585 @endExample
5587 Both @code{nr} and @code{\R} have two additional special forms to
5588 increment or decrement a register.
5590 @DefreqList {nr, ident @t{+}@Var{value}}
5591 @DefreqItem {nr, ident @t{-}@Var{value}}
5592 @DefescItem {\\R, ', ident @t{+}value, '}
5593 @DefescListEnd {\\R, ', ident @t{-}value, '}
5594 Increment (decrement) register @var{ident} by @var{value}.
5596 @Example
5597 .nr a 1
5598 .nr a +1
5600     @result{} 2
5601 @endExample
5603 @cindex negating register values
5604 To assign the negated value of a register to another register, some care
5605 must be taken to get the desired result:
5607 @Example
5608 .nr a 7
5609 .nr b 3
5610 .nr a -\nb
5612     @result{} 4
5613 .nr a (-\nb)
5615     @result{} -3
5616 @endExample
5618 @noindent
5619 The surrounding parentheses prevent the interpretation of the minus sign
5620 as a decrementing operator.  An alternative is to start the assignment
5621 with a @samp{0}:
5623 @Example
5624 .nr a 7
5625 .nr b -3
5626 .nr a \nb
5628     @result{} 4
5629 .nr a 0\nb
5631     @result{} -3
5632 @endExample
5633 @endDefreq
5635 @Defreq {rr, ident}
5636 @cindex removing number register (@code{rr})
5637 @cindex number register, removing (@code{rr})
5638 @cindex register, removing (@code{rr})
5639 Remove number register @var{ident}.  If @var{ident} doesn't exist, the
5640 request is ignored.
5641 @endDefreq
5643 @Defreq {rnn, ident1 ident2}
5644 @cindex renaming number register (@code{rnn})
5645 @cindex number register, renaming (@code{rnn})
5646 @cindex register, renaming (@code{rnn})
5647 Rename number register @var{ident1} to @var{ident2}.  If either
5648 @var{ident1} or @var{ident2} doesn't exist, the request is ignored.
5649 @endDefreq
5651 @Defreq {aln, ident1 ident2}
5652 @cindex alias, number register, creating (@code{aln})
5653 @cindex creating alias, for number register (@code{aln})
5654 @cindex number register, creating alias (@code{aln})
5655 @cindex register, creating alias (@code{aln})
5656 Create an alias @var{ident1} for a number register @var{ident2}.  The
5657 new name and the old name are exactly equivalent.  If @var{ident1} is
5658 undefined, a warning of type @samp{reg} is generated, and the request
5659 is ignored.  @xref{Debugging}, for information about warnings.
5660 @endDefreq
5662 @c ---------------------------------------------------------------------
5664 @node Interpolating Registers, Auto-increment, Setting Registers, Registers
5665 @subsection Interpolating Registers
5666 @cindex interpolating registers (@code{\n})
5667 @cindex registers, interpolating (@code{\n})
5669 Numeric registers can be accessed via the @code{\n} escape.
5671 @DefescList {\\n, , i, }
5672 @DefescItem {\\n, @lparen{}, id, }
5673 @DefescListEnd {\\n, @lbrack{}, ident, @rbrack}
5674 @cindex nested assignments
5675 @cindex assignments, nested
5676 @cindex indirect assignments
5677 @cindex assignments, indirect
5678 Interpolate number register with name @var{ident} (one-character
5679 name@tie{}@var{i}, two-character name @var{id}).  This means that the value
5680 of the register is expanded in-place while @code{gtroff} is parsing the
5681 input line.  Nested assignments (also called indirect assignments) are
5682 possible.
5684 @Example
5685 .nr a 5
5686 .nr as \na+\na
5687 \n(as
5688     @result{} 10
5689 @endExample
5691 @Example
5692 .nr a1 5
5693 .nr ab 6
5694 .ds str b
5695 .ds num 1
5696 \n[a\n[num]]
5697     @result{} 5
5698 \n[a\*[str]]
5699     @result{} 6
5700 @endExample
5701 @endDefesc
5703 @c ---------------------------------------------------------------------
5705 @node Auto-increment, Assigning Formats, Interpolating Registers, Registers
5706 @subsection Auto-increment
5707 @cindex auto-increment
5708 @cindex increment, automatic
5710 Number registers can also be auto-incremented and auto-decremented.
5711 The increment or decrement value can be specified with a third
5712 argument to the @code{nr} request or @code{\R} escape.
5714 @Defreq {nr, ident value incr}
5715 @cindex @code{\R}, difference to @code{nr}
5716 Set number register @var{ident} to @var{value}; the increment for
5717 auto-incrementing is set to @var{incr}.  Note that the @code{\R}
5718 escape doesn't support this notation.
5719 @endDefreq
5721 To activate auto-incrementing, the escape @code{\n} has a special
5722 syntax form.
5724 @DefescList {\\n, +, i, }
5725 @DefescItem {\\n, -, i, }
5726 @DefescItem {\\n, @lparen{}+, id, }
5727 @DefescItem {\\n, @lparen{}-, id, }
5728 @DefescItem {\\n, +@lparen{}, id, }
5729 @DefescItem {\\n, -@lparen{}, id, }
5730 @DefescItem {\\n, @lbrack{}+, ident, @rbrack{}}
5731 @DefescItem {\\n, @lbrack{}-, ident, @rbrack{}}
5732 @DefescItem {\\n, +@lbrack{}, ident, @rbrack{}}
5733 @DefescListEnd {\\n, -@lbrack{}, ident, @rbrack{}}
5734 Before interpolating, increment or decrement @var{ident}
5735 (one-character name@tie{}@var{i}, two-character name @var{id}) by the
5736 auto-increment value as specified with the @code{nr} request (or the
5737 @code{\R} escape).  If no auto-increment value has been specified,
5738 these syntax forms are identical to @code{\n}.
5739 @endDefesc
5741 For example,
5743 @Example
5744 .nr a 0 1
5745 .nr xx 0 5
5746 .nr foo 0 -2
5747 \n+a, \n+a, \n+a, \n+a, \n+a
5749 \n-(xx, \n-(xx, \n-(xx, \n-(xx, \n-(xx
5751 \n+[foo], \n+[foo], \n+[foo], \n+[foo], \n+[foo]
5752 @endExample
5754 @noindent
5755 produces
5757 @Example
5758 1, 2, 3, 4, 5
5759 -5, -10, -15, -20, -25
5760 -2, -4, -6, -8, -10
5761 @endExample
5763 @cindex increment value without changing the register
5764 @cindex value, incrementing without changing the register
5765 To change the increment value without changing the value of a register
5766 (@var{a} in the example), the following can be used:
5768 @Example
5769 .nr a \na 10
5770 @endExample
5772 @c ---------------------------------------------------------------------
5774 @node Assigning Formats, Built-in Registers, Auto-increment, Registers
5775 @subsection Assigning Formats
5776 @cindex assigning formats (@code{af})
5777 @cindex formats, assigning (@code{af})
5779 When a register is used in the text of an input file (as opposed to
5780 part of an expression), it is textually replaced (or interpolated)
5781 with a representation of that number.  This output format can be
5782 changed to a variety of formats (numbers, Roman numerals, etc.).  This
5783 is done using the @code{af} request.
5785 @Defreq {af, ident format}
5786 Change the output format of a number register.  The first argument
5787 @var{ident} is the name of the number register to be changed, and the
5788 second argument @var{format} is the output format.  The following
5789 output formats are available:
5791 @table @code
5792 @item 1
5793 Decimal arabic numbers.  This is the default format: 0, 1, 2,
5794 3,@tie{}@enddots{}
5796 @item 0@dots{}0
5797 Decimal numbers with as many digits as specified.  So, @samp{00} would
5798 result in printing numbers as 01, 02, 03,@tie{}@enddots{}
5800 In fact, any digit instead of zero will do; @code{gtroff} only counts
5801 how many digits are specified.  As a consequence, @code{af}'s default
5802 format @samp{1} could be specified as @samp{0} also (and exactly this is
5803 returned by the @code{\g} escape, see below).
5805 @item I
5806 @cindex Roman numerals
5807 @cindex numerals, Roman
5808 Upper-case Roman numerals: 0, I, II, III, IV,@tie{}@enddots{}
5810 @item i
5811 Lower-case Roman numerals: 0, i, ii, iii, iv,@tie{}@enddots{}
5813 @item A
5814 Upper-case letters: 0, A, B, C, @dots{},@tie{}Z, AA, AB,@tie{}@enddots{}
5816 @item a
5817 Lower-case letters: 0, a, b, c, @dots{},@tie{}z, aa, ab,@tie{}@enddots{}
5818 @end table
5820 Omitting the number register format causes a warning of type
5821 @samp{missing}.  @xref{Debugging}, for more details.  Specifying a
5822 nonexistent format causes an error.
5824 The following example produces @samp{10, X, j, 010}:
5826 @Example
5827 .nr a 10
5828 .af a 1           \" the default format
5829 \na,
5830 .af a I
5831 \na,
5832 .af a a
5833 \na,
5834 .af a 001
5836 @endExample
5838 @cindex Roman numerals, maximum and minimum
5839 @cindex maximum values of Roman numerals
5840 @cindex minimum values of Roman numerals
5841 The largest number representable for the @samp{i} and @samp{I} formats
5842 is 39999 (or @minus{}39999); @acronym{UNIX} @code{troff} uses @samp{z}
5843 and @samp{w} to represent 10000 and 5000 in Roman numerals, and so does
5844 @code{gtroff}.  Currently, the correct glyphs of Roman numeral five
5845 thousand and Roman numeral ten thousand (Unicode code points
5846 @code{U+2182} and @code{U+2181}, respectively) are not available.
5848 If @var{ident} doesn't exist, it is created.
5850 @cindex read-only register, changing format
5851 @cindex changing format, and read-only registers
5852 Changing the output format of a read-only register causes an error.  It
5853 is necessary to first copy the register's value to a writeable register,
5854 then apply the @code{af} request to this other register.
5855 @endDefreq
5857 @DefescList {\\g, , i, }
5858 @DefescItem {\\g, @lparen{}, id, }
5859 @DefescListEnd {\\g, @lbrack{}, ident, @rbrack{}}
5860 @cindex format of register (@code{\g})
5861 @cindex register, format (@code{\g})
5862 Return the current format of the specified register @var{ident}
5863 (one-character name@tie{}@var{i}, two-character name @var{id}).  For
5864 example, @samp{\ga} after the previous example would produce the
5865 string @samp{000}.  If the register hasn't been defined yet, nothing
5866 is returned.
5867 @endDefesc
5869 @c ---------------------------------------------------------------------
5871 @node Built-in Registers,  , Assigning Formats, Registers
5872 @subsection Built-in Registers
5873 @cindex built-in registers
5874 @cindex registers, built-in
5876 The following lists some built-in registers which are not described
5877 elsewhere in this manual.  Any register which begins with a @samp{.} is
5878 read-only.  A complete listing of all built-in registers can be found in
5879 appendix@tie{}@ref{Register Index}.
5881 @table @code
5882 @item .F
5883 @cindex current input file name register (@code{.F})
5884 @cindex input file name, current, register (@code{.F})
5885 @vindex .F
5886 This string-valued register returns the current input file name.
5888 @item .H
5889 @cindex horizontal resolution register (@code{.H})
5890 @cindex resolution, horizontal, register (@code{.H})
5891 @vindex .H
5892 Horizontal resolution in basic units.
5894 @item .V
5895 @cindex vertical resolution register (@code{.V})
5896 @cindex resolution, vertical, register (@code{.V})
5897 @vindex .V
5898 Vertical resolution in basic units.
5900 @item seconds
5901 @cindex seconds, current time (@code{seconds})
5902 @cindex time, current, seconds (@code{seconds})
5903 @cindex current time, seconds (@code{seconds})
5904 @vindex seconds
5905 The number of seconds after the minute, normally in the range@tie{}0
5906 to@tie{}59, but can be up to@tie{}61 to allow for leap seconds.  Initialized
5907 at start-up of @code{gtroff}.
5909 @item minutes
5910 @cindex minutes, current time (@code{minutes})
5911 @cindex time, current, minutes (@code{minutes})
5912 @cindex current time, minutes (@code{minutes})
5913 @vindex minutes
5914 The number of minutes after the hour, in the range@tie{}0 to@tie{}59.
5915 Initialized at start-up of @code{gtroff}.
5917 @item hours
5918 @cindex hours, current time (@code{hours})
5919 @cindex time, current, hours (@code{hours})
5920 @cindex current time, hours (@code{hours})
5921 @vindex hours
5922 The number of hours past midnight, in the range@tie{}0 to@tie{}23.
5923 Initialized at start-up of @code{gtroff}.
5925 @item dw
5926 @cindex day of the week register (@code{dw})
5927 @cindex date, day of the week register (@code{dw})
5928 @vindex dw
5929 Day of the week (1-7).
5931 @item dy
5932 @cindex day of the month register (@code{dy})
5933 @cindex date, day of the month register (@code{dy})
5934 @vindex dy
5935 Day of the month (1-31).
5937 @item mo
5938 @cindex month of the year register (@code{mo})
5939 @cindex date, month of the year register (@code{mo})
5940 @vindex mo
5941 Current month (1-12).
5943 @item year
5944 @cindex date, year register (@code{year}, @code{yr})
5945 @cindex year, current, register (@code{year}, @code{yr})
5946 @vindex year
5947 The current year.
5949 @item yr
5950 @vindex yr
5951 The current year minus@tie{}1900.  Unfortunately, the documentation of
5952 @acronym{UNIX} Version@tie{}7's @code{troff} had a year@tie{}2000 bug: It
5953 incorrectly claimed that @code{yr} contains the last two digits of the
5954 year.  That claim has never been true of either @acronym{AT&T}
5955 @code{troff} or GNU @code{troff}.  Old @code{troff} input that looks
5956 like this:
5958 @Example
5959 '\" The following line stopped working after 1999
5960 This document was formatted in 19\n(yr.
5961 @endExample
5963 @noindent
5964 can be corrected as follows:
5966 @Example
5967 This document was formatted in \n[year].
5968 @endExample
5970 @noindent
5971 or, to be portable to older @code{troff} versions, as follows:
5973 @Example
5974 .nr y4 1900+\n(yr
5975 This document was formatted in \n(y4.
5976 @endExample
5978 @item .c
5979 @vindex .c
5980 @itemx c.
5981 @vindex c.
5982 @cindex input line number register (@code{.c}, @code{c.})
5983 @cindex line number, input, register (@code{.c}, @code{c.})
5984 The current @emph{input} line number.  Register @samp{.c} is read-only,
5985 whereas @samp{c.} (a @code{gtroff} extension) is writable also,
5986 affecting both @samp{.c} and @samp{c.}.
5988 @item ln
5989 @vindex ln
5990 @cindex output line number register (@code{ln})
5991 @cindex line number, output, register (@code{ln})
5992 The current @emph{output} line number after a call to the @code{nm}
5993 request to activate line numbering.
5995 @xref{Miscellaneous}, for more information about line numbering.
5997 @item .x
5998 @vindex .x
5999 @cindex major version number register (@code{.x})
6000 @cindex version number, major, register (@code{.x})
6001 The major version number.  For example, if the version number
6002 is 1.03 then @code{.x} contains@tie{}@samp{1}.
6004 @item .y
6005 @vindex .y
6006 @cindex minor version number register (@code{.y})
6007 @cindex version number, minor, register (@code{.y})
6008 The minor version number.  For example, if the version number
6009 is 1.03 then @code{.y} contains@tie{}@samp{03}.
6011 @item .Y
6012 @vindex .Y
6013 @cindex revision number register (@code{.Y})
6014 The revision number of @code{groff}.
6016 @item $$
6017 @vindex $$
6018 @cindex process ID of @code{gtroff} register (@code{$$})
6019 @cindex @code{gtroff}, process ID register (@code{$$})
6020 The process ID of @code{gtroff}.
6022 @item .g
6023 @vindex .g
6024 @cindex @code{gtroff}, identification register (@code{.g})
6025 @cindex GNU-specific register (@code{.g})
6026 Always@tie{}1.  Macros should use this to determine whether they are
6027 running under GNU @code{troff}.
6029 @item .A
6030 @vindex .A
6031 @cindex @acronym{ASCII} approximation output register (@code{.A})
6032 If the command line option @option{-a} is used to produce an
6033 @acronym{ASCII} approximation of the output, this is set to@tie{}1, zero
6034 otherwise.  @xref{Groff Options}.
6036 @item .P
6037 @vindex .P
6038 This register is set to@tie{}1 (and to@tie{}0 otherwise) if the current
6039 page is actually being printed, i.e., if the @option{-o} option is being
6040 used to only print selected pages.  @xref{Groff Options}, for more
6041 information.
6043 @item .T
6044 @vindex .T
6045 If @code{gtroff} is called with the @option{-T} command line option, the
6046 number register @code{.T} is set to@tie{}1, and zero otherwise.
6047 @xref{Groff Options}.
6049 @stindex .T
6050 @cindex output device name string register (@code{.T})
6051 Additionally, @code{gtroff} predefines a single read-write string
6052 register @code{.T} which contains the current output device (for
6053 example, @samp{latin1} or @samp{ps}).
6054 @end table
6057 @c =====================================================================
6059 @node Manipulating Filling and Adjusting, Manipulating Hyphenation, Registers, gtroff Reference
6060 @section Manipulating Filling and Adjusting
6061 @cindex manipulating filling and adjusting
6062 @cindex filling and adjusting, manipulating
6063 @cindex adjusting and filling, manipulating
6064 @cindex justifying text
6065 @cindex text, justifying
6067 @cindex break
6068 @cindex line break
6069 @cindex @code{bp} request, causing implicit linebreak
6070 @cindex @code{ce} request, causing implicit linebreak
6071 @cindex @code{cf} request, causing implicit linebreak
6072 @cindex @code{fi} request, causing implicit linebreak
6073 @cindex @code{fl} request, causing implicit linebreak
6074 @cindex @code{in} request, causing implicit linebreak
6075 @cindex @code{nf} request, causing implicit linebreak
6076 @cindex @code{rj} request, causing implicit linebreak
6077 @cindex @code{sp} request, causing implicit linebreak
6078 @cindex @code{ti} request, causing implicit linebreak
6079 @cindex @code{trf} request, causing implicit linebreak
6080 Various ways of causing @dfn{breaks} were given in @ref{Implicit Line
6081 Breaks}.  The @code{br} request likewise causes a break.  Several
6082 other requests also cause breaks, but implicitly.  These are
6083 @code{bp}, @code{ce}, @code{cf}, @code{fi}, @code{fl}, @code{in},
6084 @code{nf}, @code{rj}, @code{sp}, @code{ti}, and @code{trf}.
6086 @Defreq {br, }
6087 Break the current line, i.e., the input collected so far is emitted
6088 without adjustment.
6090 If the no-break control character is used, @code{gtroff} suppresses
6091 the break:
6093 @Example
6097     @result{} a b
6098 @endExample
6099 @endDefreq
6101 Initially, @code{gtroff} fills and adjusts text to both margins.
6102 Filling can be disabled via the @code{nf} request and re-enabled with
6103 the @code{fi} request.
6105 @DefreqList {fi, }
6106 @DefregListEnd {.u}
6107 @cindex fill mode (@code{fi})
6108 @cindex mode, fill (@code{fi})
6109 Activate fill mode (which is the default).  This request implicitly
6110 enables adjusting; it also inserts a break in the text currently being
6111 filled.  The read-only number register @code{.u} is set to@tie{}1.
6113 The fill mode status is associated with the current environment
6114 (@pxref{Environments}).
6116 See @ref{Line Control}, for interaction with the @code{\c} escape.
6117 @endDefreq
6119 @Defreq {nf, }
6120 @cindex no-fill mode (@code{nf})
6121 @cindex mode, no-fill (@code{nf})
6122 Activate no-fill mode.  Input lines are output as-is, retaining line
6123 breaks and ignoring the current line length.  This command implicitly
6124 disables adjusting; it also causes a break.  The number register
6125 @code{.u} is set to@tie{}0.
6127 The fill mode status is associated with the current environment
6128 (@pxref{Environments}).
6130 See @ref{Line Control}, for interaction with the @code{\c} escape.
6131 @endDefreq
6133 @DefreqList {ad, [@Var{mode}]}
6134 @DefregListEnd {.j}
6135 Set adjusting mode.
6137 Activation and deactivation of adjusting is done implicitly with
6138 calls to the @code{fi} or @code{nf} requests.
6140 @var{mode} can have one of the following values:
6142 @table @code
6143 @item l
6144 @cindex ragged-right
6145 Adjust text to the left margin.  This produces what is traditionally
6146 called ragged-right text.
6148 @item r
6149 @cindex ragged-left
6150 Adjust text to the right margin, producing ragged-left text.
6152 @item c
6153 @cindex centered text
6154 @cindex @code{ce} request, difference to @samp{.ad@tie{}c}
6155 Center filled text.  This is different to the @code{ce} request which
6156 only centers text without filling.
6158 @item b
6159 @itemx n
6160 Justify to both margins.  This is the default used by @code{gtroff}.
6161 @end table
6163 Finally, @var{mode} can be the numeric argument returned by the @code{.j}
6164 register.
6166 With no argument, @code{gtroff} adjusts lines in the same way it did
6167 before adjusting was deactivated (with a call to @code{na}, for
6168 example).
6170 @Example
6171 text
6172 .ad r
6173 .nr ad \n[.j]
6174 text
6175 .ad c
6176 text
6178 text
6179 .ad         \" back to centering
6180 text
6181 .ad \n[ad]  \" back to right justifying
6182 @endExample
6184 @cindex adjustment mode register (@code{.j})
6185 The current adjustment mode is available in the read-only number
6186 register @code{.j}; it can be stored and subsequently used to set
6187 adjustment.
6189 The adjustment mode status is associated with the current environment
6190 (@pxref{Environments}).
6191 @endDefreq
6193 @Defreq {na, }
6194 Disable adjusting.  This request won't change the current adjustment
6195 mode: A subsequent call to @code{ad} uses the previous adjustment
6196 setting.
6198 The adjustment mode status is associated with the current environment
6199 (@pxref{Environments}).
6200 @endDefreq
6202 @DefreqList {brp, }
6203 @DefescListEnd {\\p, , , }
6204 Adjust the current line and cause a break.
6206 In most cases this produces very ugly results since @code{gtroff}
6207 doesn't have a sophisticated paragraph building algorithm (as @TeX{}
6208 have, for example); instead, @code{gtroff} fills and adjusts a paragraph
6209 line by line:
6211 @Example
6212   This is an uninteresting sentence.
6213   This is an uninteresting sentence.\p
6214   This is an uninteresting sentence.
6215 @endExample
6217 @noindent
6218 is formatted as
6220 @Example
6221   This is  an uninteresting  sentence.   This  is an
6222   uninteresting                            sentence.
6223   This is an uninteresting sentence.
6224 @endExample
6225 @endDefreq
6227 @DefreqList {ss, word_space_size [@Var{sentence_space_size}]}
6228 @DefregItem {.ss}
6229 @DefregListEnd {.sss}
6230 @cindex word space size register (@code{.ss})
6231 @cindex size of word space register (@code{.ss})
6232 @cindex space between words register (@code{.ss})
6233 @cindex sentence space size register (@code{.sss})
6234 @cindex size of sentence space register (@code{.sss})
6235 @cindex space between sentences register (@code{.sss})
6236 Change the size of a space between words.  It takes its units as one
6237 twelfth of the space width parameter for the current font.
6238 Initially both the @var{word_space_size} and @var{sentence_space_size}
6239 are@tie{}12.  In fill mode, the values specify the minimum distance.
6241 @cindex fill mode
6242 @cindex mode, fill
6243 If two arguments are given to the @code{ss} request, the second
6244 argument sets the sentence space size.  If the second argument is not
6245 given, sentence space size is set to @var{word_space_size}.  The
6246 sentence space size is used in two circumstances: If the end of a
6247 sentence occurs at the end of a line in fill mode, then both an
6248 inter-word space and a sentence space are added; if two spaces follow
6249 the end of a sentence in the middle of a line, then the second space
6250 is a sentence space.  If a second argument is never given to the
6251 @code{ss} request, the behaviour of @acronym{UNIX} @code{troff} is the
6252 same as that exhibited by GNU @code{troff}.  In GNU @code{troff}, as
6253 in @acronym{UNIX} @code{troff}, a sentence should always be followed
6254 by either a newline or two spaces.
6256 The read-only number registers @code{.ss} and @code{.sss} hold the
6257 values of the parameters set by the first and second arguments of the
6258 @code{ss} request.
6260 The word space and sentence space values are associated with the current
6261 environment (@pxref{Environments}).
6263 Contrary to @acronym{AT&T} @code{troff}, this request is @emph{not}
6264 ignored if a TTY output device is used; the given values are then
6265 rounded down to a multiple of@tie{}12 (@pxref{Implementation Differences}).
6267 The request is ignored if there is no parameter.
6269 @cindex discardable horizontal space
6270 @cindex space, discardable, horizontal
6271 @cindex horizontal discardable space
6272 Another useful application of the @code{ss} request is to insert
6273 discardable horizontal space, i.e., space which is discarded at a line
6274 break.  For example, paragraph-style footnotes could be separated this
6275 way:
6277 @Example
6278 .ll 4.5i
6279 1.\ This is the first footnote.\c
6280 .ss 48
6281 .nop
6282 .ss 12
6283 2.\ This is the second footnote.
6284 @endExample
6286 @noindent
6287 The result:
6289 @Example
6290 1. This is the first footnote.        2. This
6291 is the second footnote.
6292 @endExample
6294 @noindent
6295 Note that the @code{\h} escape produces unbreakable space.
6296 @endDefreq
6298 @DefreqList {ce, [@Var{nnn}]}
6299 @DefregListEnd {.ce}
6300 @cindex centering lines (@code{ce})
6301 @cindex lines, centering (@code{ce})
6302 Center text.  While the @w{@samp{.ad c}} request also centers text,
6303 it fills the text as well.  @code{ce} does not fill the
6304 text it affects.  This request causes a break.  The number of lines
6305 still to be centered is associated with the current environment
6306 (@pxref{Environments}).
6308 The following example demonstrates the differences.
6309 Here the input:
6311 @Example
6312 .ll 4i
6313 .ce 1000
6314 This is a small text fragment which shows the differences
6315 between the `.ce' and the `.ad c' request.
6316 .ce 0
6318 .ad c
6319 This is a small text fragment which shows the differences
6320 between the `.ce' and the `.ad c' request.
6321 @endExample
6323 @noindent
6324 And here the result:
6326 @Example
6327   This is a small text fragment which
6328          shows the differences
6329 between the `.ce' and the `.ad c' request.
6331   This is a small text fragment which
6332 shows the differences between the `.ce'
6333         and the `.ad c' request.
6334 @endExample
6336 With no arguments, @code{ce} centers the next line of text.  @var{nnn}
6337 specifies the number of lines to be centered.  If the argument is zero
6338 or negative, centering is disabled.
6340 The basic length for centering text is the line length (as set with the
6341 @code{ll} request) minus the indentation (as set with the @code{in}
6342 request).  Temporary indentation is ignored.
6344 As can be seen in the previous example, it is a common idiom to turn
6345 on centering for a large number of lines, and to turn off centering
6346 after text to be centered.  This is useful for any request which takes
6347 a number of lines as an argument.
6349 The @code{.ce} read-only number register contains the number of lines
6350 remaining to be centered, as set by the @code{ce} request.
6351 @endDefreq
6353 @DefreqList {rj, [@Var{nnn}]}
6354 @DefregListEnd {.rj}
6355 @cindex justifying text (@code{rj})
6356 @cindex text, justifying (@code{rj})
6357 @cindex right-justifying (@code{rj})
6358 Justify unfilled text to the right margin.  Arguments are identical to
6359 the @code{ce} request.  The @code{.rj} read-only number register is
6360 the number of lines to be right-justified as set by the @code{rj}
6361 request.  This request causes a break.  The number of lines still to be
6362 right-justified is associated with the current environment
6363 (@pxref{Environments}).
6364 @endDefreq
6367 @c =====================================================================
6369 @node Manipulating Hyphenation, Manipulating Spacing, Manipulating Filling and Adjusting, gtroff Reference
6370 @section Manipulating Hyphenation
6371 @cindex manipulating hyphenation
6372 @cindex hyphenation, manipulating
6374 As discussed in @ref{Hyphenation}, @code{gtroff} hyphenates words.
6375 There are a number of ways to influence hyphenation.
6377 @DefreqList {hy, [@Var{mode}]}
6378 @DefregListEnd {.hy}
6379 Enable hyphenation.  The request has an optional numeric argument,
6380 @var{mode}, to restrict hyphenation if necessary:
6382 @table @code
6383 @item 1
6384 The default argument if @var{mode} is omitted.  Hyphenate without
6385 restrictions.  This is also the start-up value of @code{gtroff}.
6387 @item 2
6388 Do not hyphenate the last word on a page or column.
6390 @item 4
6391 Do not hyphenate the last two characters of a word.
6393 @item 8
6394 Do not hyphenate the first two characters of a word.
6395 @end table
6397 Values in the previous table are additive.  For example, the
6398 value@tie{}12 causes @code{gtroff} to neither hyphenate the last
6399 two nor the first two characters of a word.
6401 @cindex hyphenation restrictions register (@code{.hy})
6402 The current hyphenation restrictions can be found in the read-only
6403 number register @samp{.hy}.
6405 The hyphenation mode is associated with the current environment
6406 (@pxref{Environments}).
6407 @endDefreq
6409 @Defreq {nh, }
6410 Disable hyphenation (i.e., set the hyphenation mode to zero).  Note
6411 that the hyphenation mode of the last call to @code{hy} is not
6412 remembered.
6414 The hyphenation mode is associated with the current environment
6415 (@pxref{Environments}).
6416 @endDefreq
6418 @DefreqList {hlm, [@Var{nnn}]}
6419 @DefregItem {.hlm}
6420 @DefregListEnd {.hlc}
6421 @cindex explicit hyphen (@code{\%})
6422 @cindex hyphen, explicit (@code{\%})
6423 @cindex consecutive hyphenated lines (@code{hlm})
6424 @cindex lines, consecutive hyphenated (@code{hlm})
6425 @cindex hyphenated lines, consecutive (@code{hlm})
6426 Set the maximum number of consecutive hyphenated lines to @var{nnn}.
6427 If this number is negative, there is no maximum.  The default value
6428 is@tie{}@minus{}1 if @var{nnn} is omitted.  This value is associated
6429 with the current environment (@pxref{Environments}).  Only lines
6430 output from a given environment count towards the maximum associated
6431 with that environment.  Hyphens resulting from @code{\%} are counted;
6432 explicit hyphens are not.
6434 The current setting of @code{hlm} is available in the @code{.hlm}
6435 read-only number register.  Also the number of immediately preceding
6436 consecutive hyphenated lines are available in the read-only number
6437 register @samp{.hlc}.
6438 @endDefreq
6440 @Defreq {hw, word1 word2 @dots{}}
6441 Define how @var{word1}, @var{word2}, etc.@: are to be hyphenated.  The
6442 words must be given with hyphens at the hyphenation points.  For
6443 example:
6445 @Example
6446 .hw in-sa-lub-rious
6447 @endExample
6449 @noindent
6450 Besides the space character, any character whose hyphenation code value
6451 is zero can be used to separate the arguments of @code{hw} (see the
6452 documentation for the @code{hcode} request below for more information).
6453 In addition, this request can be used more than once.
6455 Hyphenation exceptions specified with the @code{hw} request are
6456 associated with the current hyphenation language; it causes an error
6457 if there is no current hyphenation language.
6459 This request is ignored if there is no parameter.
6461 In old versions of @code{troff} there was a limited amount of space to
6462 store such information; fortunately, with @code{gtroff}, this is no
6463 longer a restriction.
6464 @endDefreq
6466 @DefescList {\\%, , , }
6467 @deffnx Escape @t{\:}
6468 @ifnotinfo
6469 @esindex \:
6470 @end ifnotinfo
6471 @ifinfo
6472 @esindex \@r{<colon>}
6473 @end ifinfo
6474 @cindex hyphenation character (@code{\%})
6475 @cindex character, hyphenation (@code{\%})
6476 @cindex disabling hyphenation (@code{\%})
6477 @cindex hyphenation, disabling (@code{\%})
6478 To tell @code{gtroff} how to hyphenate words on the fly, use the
6479 @code{\%} escape, also known as the @dfn{hyphenation character}.
6480 Preceding a word with this character prevents it from being
6481 hyphenated; putting it inside a word indicates to @code{gtroff} that
6482 the word may be hyphenated at that point.  Note that this mechanism
6483 only affects that one occurrence of the word; to change the
6484 hyphenation of a word for the entire document, use the @code{hw}
6485 request.
6487 The @code{\:} escape inserts a zero-width break point
6488 (that is, the word breaks but without adding a hyphen).
6490 @Example
6491 ... check the /var/log/\:httpd/\:access_log file ...
6492 @endExample
6494 @cindex @code{\X}, followed by @code{\%}
6495 @cindex @code{\Y}, followed by @code{\%}
6496 @cindex @code{\%}, following @code{\X} or @code{\Y}
6497 Note that @code{\X} and @code{\Y} start a word, that is, the @code{\%}
6498 escape in (say) @w{@samp{\X'...'\%foobar}} and
6499 @w{@samp{\Y'...'\%foobar}} no longer prevents hyphenation but inserts
6500 a hyphenation point at the beginning of @samp{foobar}; most likely
6501 this isn't what you want to do.
6502 @endDefesc
6504 @Defreq {hc, [@Var{char}]}
6505 Change the hyphenation character to @var{char}.  This character then
6506 works the same as the @code{\%} escape, and thus, no longer appears in
6507 the output.  Without an argument, @code{hc} resets the hyphenation
6508 character to be @code{\%} (the default) only.
6510 The hyphenation character is associated with the current environment
6511 (@pxref{Environments}).
6512 @endDefreq
6514 @DefreqList {hpf, pattern_file}
6515 @DefreqItem {hpfa, pattern_file}
6516 @DefreqListEnd {hpfcode, a b [c d @dots{}]}
6517 @cindex hyphenation patterns (@code{hpf})
6518 @cindex patterns for hyphenation (@code{hpf})
6519 Read in a file of hyphenation patterns.  This file is searched for in
6520 the same way as @file{@var{name}.tmac} (or @file{tmac.@var{name}}) is
6521 searched for if the @option{-m@var{name}} option is specified.
6523 It should have the same format as (simple) @TeX{} patterns files.
6524 More specifically, the following scanning rules are implemented.
6526 @itemize @bullet
6527 @item
6528 A percent sign starts a comment (up to the end of the line)
6529 even if preceded by a backslash.
6531 @item
6532 No support for `digraphs' like @code{\$}.
6534 @item
6535 @code{^^@var{xx}} (@var{x} is 0-9 or a-f) and @code{^^@var{x}} (character
6536 code of @var{x} in the range 0-127) are recognized; other use of @code{^}
6537 causes an error.
6539 @item
6540 No macro expansion.
6542 @item
6543 @code{hpf} checks for the expression @code{\patterns@{@dots{}@}}
6544 (possibly with whitespace before and after the braces).
6545 Everything between the braces is taken as hyphenation patterns.
6546 Consequently, @code{@{} and @code{@}} are not allowed in patterns.
6548 @item
6549 Similarly, @code{\hyphenation@{@dots{}@}} gives a list of hyphenation
6550 exceptions.
6552 @item
6553 @code{\endinput} is recognized also.
6555 @item
6556 For backwards compatibility, if @code{\patterns} is missing,
6557 the whole file is treated as a list of hyphenation patterns
6558 (only recognizing the @code{%} character as the start of a comment).
6559 @end itemize
6561 If no @code{hpf} request is specified (either in the document or in a
6562 macro package), @code{gtroff} won't hyphenate at all.
6564 The @code{hpfa} request appends a file of patterns to the current list.
6566 The @code{hpfcode} request defines mapping values for character codes in
6567 hyphenation patterns.  @code{hpf} or @code{hpfa} then apply the mapping
6568 (after reading the patterns) before replacing or appending them to
6569 the current list of patterns.  Its arguments are pairs of character codes
6570 -- integers from 0 to@tie{}255.  The request maps character code@tie{}@var{a}
6571 to code@tie{}@var{b}, code@tie{}@var{c} to code@tie{}@var{d}, and so on.  You
6572 can use character codes which would be invalid otherwise.
6574 @pindex troffrc
6575 @pindex troffrc-end
6576 @pindex hyphen.us
6577 @pindex hyphenex.us
6578 The set of hyphenation patterns is associated with the current language
6579 set by the @code{hla} request.  The @code{hpf} request is usually
6580 invoked by the @file{troffrc} or @file{troffrc-end} file; by default,
6581 @file{troffrc} loads hyphenation patterns and exceptions for American
6582 English (in files @file{hyphen.us} and @file{hyphenex.us}).
6584 A second call to @code{hpf} (for the same language) will replace the
6585 hyphenation patterns with the new ones.
6587 Invoking @code{hpf} causes an error if there is no current hyphenation
6588 language.
6589 @endDefreq
6591 @Defreq {hcode, c1 code1 c2 code2 @dots{}}
6592 @cindex hyphenation code (@code{hcode})
6593 @cindex code, hyphenation (@code{hcode})
6594 Set the hyphenation code of character @var{c1} to @var{code1}, that of
6595 @var{c2} to @var{code2}, etc.  A hyphenation code must be a single
6596 input character (not a special character) other than a digit or a
6597 space.  Initially each lower-case letter (@samp{a}-@samp{z}) has its
6598 hyphenation code set to itself, and each upper-case letter
6599 (@samp{A}-@samp{Z}) has a hyphenation code which is the lower-case
6600 version of itself.
6602 This request is ignored if it has no parameter.
6603 @endDefreq
6605 @DefreqList {hym, [@Var{length}]}
6606 @DefregListEnd {.hym}
6607 @cindex hyphenation margin (@code{hym})
6608 @cindex margin for hyphenation (@code{hym})
6609 @cindex @code{ad} request, and hyphenation margin
6610 Set the (right) hyphenation margin to @var{length}.  If the current
6611 adjustment mode is not @samp{b} or @samp{n}, the line is not
6612 hyphenated if it is shorter than @var{length}.  Without an argument,
6613 the hyphenation margin is reset to its default value, which is@tie{}0.
6614 The default scaling indicator for this request is @samp{m}.  The
6615 hyphenation margin is associated with the current environment
6616 (@pxref{Environments}).
6618 A negative argument resets the hyphenation margin to zero, emitting
6619 a warning of type @samp{range}.
6621 @cindex hyphenation margin register (@code{.hym})
6622 The current hyphenation margin is available in the @code{.hym} read-only
6623 number register.
6624 @endDefreq
6626 @DefreqList {hys, [@Var{hyphenation_space}]}
6627 @DefregListEnd {.hys}
6628 @cindex hyphenation space (@code{hys})
6629 @cindex @code{ad} request, and hyphenation space
6630 Set the hyphenation space to @var{hyphenation_space}.  If the current
6631 adjustment mode is @samp{b} or @samp{n}, don't hyphenate the line
6632 if it can be justified by adding no more than @var{hyphenation_space}
6633 extra space to each word space.  Without argument, the hyphenation
6634 space is set to its default value, which is@tie{}0.  The default
6635 scaling indicator for this request is @samp{m}.  The hyphenation
6636 space is associated with the current environment
6637 (@pxref{Environments}).
6639 A negative argument resets the hyphenation space to zero, emitting a
6640 warning of type @samp{range}.
6642 @cindex hyphenation space register (@code{.hys})
6643 The current hyphenation space is available in the @code{.hys} read-only
6644 number register.
6645 @endDefreq
6647 @Defreq {shc, [@Var{glyph}]}
6648 @cindex soft hyphen character, setting (@code{shc})
6649 @cindex character, soft hyphen, setting (@code{shc})
6650 @cindex glyph, soft hyphen (@code{hy})
6651 @cindex soft hyphen glyph (@code{hy})
6652 @cindex @code{char} request, and soft hyphen character
6653 @cindex @code{tr} request, and soft hyphen character
6654 Set the @dfn{soft hyphen character} to @var{glyph}.@footnote{@dfn{Soft
6655 hyphen character} is a misnomer since it is an output glyph.}  If the
6656 argument is omitted, the soft hyphen character is set to the default
6657 glyph @code{\(hy} (this is the start-up value of @code{gtroff} also).
6658 The soft hyphen character is the glyph that is inserted when a word is
6659 hyphenated at a line break.  If the soft hyphen character does not
6660 exist in the font of the character immediately preceding a potential
6661 break point, then the line is not broken at that point.  Neither
6662 definitions (specified with the @code{char} request) nor translations
6663 (specified with the @code{tr} request) are considered when finding the
6664 soft hyphen character.
6665 @endDefreq
6667 @DefreqList {hla, language}
6668 @DefregListEnd {.hla}
6669 @cindex @code{hpf} request, and hyphenation language
6670 @cindex @code{hw} request, and hyphenation language
6671 @pindex troffrc
6672 @pindex troffrc-end
6673 Set the current hyphenation language to the string @var{language}.
6674 Hyphenation exceptions specified with the @code{hw} request and
6675 hyphenation patterns specified with the @code{hpf} and @code{hpfa}
6676 requests are both associated with the current hyphenation language.
6677 The @code{hla} request is usually invoked by the @file{troffrc} or the
6678 @file{troffrc-end} files; @file{troffrc} sets the default language to
6679 @samp{us}.
6681 @cindex hyphenation language register (@code{.hla})
6682 The current hyphenation language is available as a string in the
6683 read-only number register @samp{.hla}.
6685 @Example
6686 .ds curr_language \n[.hla]
6687 \*[curr_language]
6688     @result{} us
6689 @endExample
6690 @endDefreq
6693 @c =====================================================================
6695 @node Manipulating Spacing, Tabs and Fields, Manipulating Hyphenation, gtroff Reference
6696 @section Manipulating Spacing
6697 @cindex manipulating spacing
6698 @cindex spacing, manipulating
6700 @Defreq {sp, [@Var{distance}]}
6701 Space downwards @var{distance}.  With no argument it advances
6702 1@tie{}line.  A negative argument causes @code{gtroff} to move up the page
6703 the specified distance.  If the argument is preceded by a @samp{|}
6704 then @code{gtroff} moves that distance from the top of the page.  This
6705 request causes a line break.  The default scaling indicator is @samp{v}.
6707 If a vertical trap is sprung during execution of @code{sp}, the amount of
6708 vertical space after the trap is discarded.  For example, this
6710 @Example
6711 .de xxx
6714 .wh 0 xxx
6716 .pl 5v
6718 .sp 2
6720 .sp 50
6722 @endExample
6724 @noindent
6725 results in
6727 @Example
6734 @endExample
6736 @cindex @code{sp} request, and traps
6737 @cindex discarded space in traps
6738 @cindex space, discarded, in traps
6739 @cindex traps, and discarded space
6740 The amount of discarded space is available in the number register
6741 @code{.trunc}.
6743 To protect @code{sp} against vertical traps, use the @code{vpt} request:
6745 @Example
6746 .vpt 0
6747 .sp -3
6748 .vpt 1
6749 @endExample
6750 @endDefreq
6752 @DefreqList {ls, [@Var{nnn}]}
6753 @DefregListEnd {.L}
6754 @cindex double-spacing (@code{ls})
6755 Output @w{@var{nnn}@minus{}1} blank lines after each line of text.
6756 With no argument, @code{gtroff} uses the previous value before the
6757 last @code{ls} call.
6759 @Example
6760 .ls 2    \" This causes double-spaced output
6761 .ls 3    \" This causes triple-spaced output
6762 .ls      \" Again double-spaced
6763 @endExample
6765 The line spacing is associated with the current environment
6766 (@pxref{Environments}).
6768 @cindex line spacing register (@code{.L})
6769 The read-only number register @code{.L} contains the current line
6770 spacing setting.
6771 @endDefreq
6773 @xref{Changing Type Sizes}, for the requests @code{vs} and @code{pvs}
6774 as alternatives to @code{ls}.
6776 @DefescList {\\x, ', spacing, '}
6777 @DefregListEnd {.a}
6778 Sometimes, extra vertical spacing is only needed occasionally, e.g.@:
6779 to allow space for a tall construct (like an equation).  The @code{\x}
6780 escape does this.  The escape is given a numerical argument, usually
6781 enclosed in quotes (like @samp{\x'3p'}); the default scaling indicator
6782 is @samp{v}.  If this number is positive extra vertical space is
6783 inserted below the current line.  A negative number adds space above.
6784 If this escape is used multiple times on the same line, the maximum of
6785 the values is used.
6787 @xref{Escapes}, for details on parameter delimiting characters.
6789 @cindex extra post-vertical line space register (@code{.a})
6790 The @code{.a} read-only number register contains the most recent
6791 (nonnegative) extra vertical line space.
6793 Using @code{\x} can be necessary in combination with the @code{\b}
6794 escape, as the following example shows.
6796 @Example
6797 This is a test with the \[rs]b escape.
6799 This is a test with the \[rs]b escape.
6801 This is a test with \b'xyz'\x'-1m'\x'1m'.
6803 This is a test with the \[rs]b escape.
6805 This is a test with the \[rs]b escape.
6806 @endExample
6808 @noindent
6809 produces
6811 @Example
6812 This is a test with the \b escape.
6813 This is a test with the \b escape.
6814                     x
6815 This is a test with y.
6816                     z
6817 This is a test with the \b escape.
6818 This is a test with the \b escape.
6819 @endExample
6820 @endDefesc
6822 @DefreqList {ns, }
6823 @DefreqItem {rs, }
6824 @DefregListEnd {.ns}
6825 @cindex @code{sp} request, and no-space mode
6826 @cindex no-space mode (@code{ns})
6827 @cindex mode, no-space (@code{ns})
6828 @cindex blank lines, disabling
6829 @cindex lines, blank, disabling
6830 Enable @dfn{no-space mode}.  In this mode, spacing (either via
6831 @code{sp} or via blank lines) is disabled.  The @code{bp} request to
6832 advance to the next page is also disabled, except if it is accompanied
6833 by a page number (see @ref{Page Control}, for more information).  This
6834 mode ends when actual text is output or the @code{rs} request is
6835 encountered which ends no-space mode.  The read-only number register
6836 @code{.ns} is set to@tie{}1 as long as no-space mode is active.
6838 This request is useful for macros that conditionally
6839 insert vertical space before the text starts
6840 (for example, a paragraph macro could insert some space
6841 except when it is the first paragraph after a section header).
6842 @endDefreq
6845 @c =====================================================================
6847 @node Tabs and Fields, Character Translations, Manipulating Spacing, gtroff Reference
6848 @section Tabs and Fields
6849 @cindex tabs, and fields
6850 @cindex fields, and tabs
6852 @cindex @acronym{EBCDIC} encoding of a tab
6853 A tab character (@acronym{ASCII} char@tie{}9, @acronym{EBCDIC}
6854 char@tie{}5) causes a horizontal movement to the next tab stop (much
6855 like it did on a typewriter).
6857 @Defesc {\\t, , , }
6858 @cindex tab character, non-interpreted (@code{\t})
6859 @cindex character, tab, non-interpreted (@code{\t})
6860 This escape is a non-interpreted tab character.  In copy mode
6861 (@pxref{Copy-in Mode}), @code{\t} is the same as a real tab character.
6862 @endDefesc
6864 @DefreqList {ta, [@Var{n1} @Var{n2} @dots{} @Var{nn} @t{T} @Var{r1} @Var{r2} @dots{} @Var{rn}]}
6865 @DefregListEnd {.tabs}
6866 Change tab stop positions.  This request takes a series of tab
6867 specifiers as arguments (optionally divided into two groups with the
6868 letter @samp{T}) which indicate where each tab stop is to be
6869 (overriding any previous settings).
6871 Tab stops can be specified absolutely, i.e., as the distance from the
6872 left margin.  For example, the following sets 6@tie{}tab stops every
6873 one inch.
6875 @Example
6876 .ta 1i 2i 3i 4i 5i 6i
6877 @endExample
6879 Tab stops can also be specified using a leading @samp{+}
6880 which means that the specified tab stop is set relative to
6881 the previous tab stop.  For example, the following is equivalent to the
6882 previous example.
6884 @Example
6885 .ta 1i +1i +1i +1i +1i +1i
6886 @endExample
6888 @code{gtroff} supports an extended syntax to specify repeat values after
6889 the @samp{T} mark (these values are always taken as relative) -- this is
6890 the usual way to specify tabs set at equal intervals.  The following is,
6891 yet again, the same as the previous examples.  It does even more since
6892 it defines an infinite number of tab stops separated by one inch.
6894 @Example
6895 .ta T 1i
6896 @endExample
6898 Now we are ready to interpret the full syntax given at the beginning:
6899 Set tabs at positions @var{n1}, @var{n2}, @dots{}, @var{nn} and then set
6900 tabs at @var{nn}+@var{r1}, @var{nn}+@var{r2}, @dots{}, @var{nn}+@var{rn}
6901 and then at @var{nn}+@var{rn}+@var{r1}, @var{nn}+@var{rn}+@var{r2},
6902 @dots{}, @var{nn}+@var{rn}+@var{rn}, and so on.
6904 Example: @samp{4c +6c T 3c 5c 2c} is equivalent to @samp{4c 10c 13c 18c
6905 20c 23c 28c 30c @dots{}}.
6907 The material in each tab column (i.e., the column between two tab stops)
6908 may be justified to the right or left or centered in the column.  This
6909 is specified by appending @samp{R}, @samp{L}, or @samp{C} to the tab
6910 specifier.  The default justification is @samp{L}.  Example:
6912 @Example
6913 .ta 1i 2iC 3iR
6914 @endExample
6916 Some notes:
6918 @itemize @bullet
6919 @item
6920 The default unit of the @code{ta} request is @samp{m}.
6922 @item
6923 A tab stop is converted into a non-breakable horizontal movement which
6924 can be neither stretched nor squeezed.  For example,
6926 @Example
6927 .ds foo a\tb\tc
6928 .ta T 5i
6929 \*[foo]
6930 @endExample
6932 @noindent
6933 creates a single line which is a bit longer than 10@tie{}inches (a string
6934 is used to show exactly where the tab characters are).  Now consider the
6935 following:
6937 @Example
6938 .ds bar a\tb b\tc
6939 .ta T 5i
6940 \*[bar]
6941 @endExample
6943 @noindent
6944 @code{gtroff} first converts the tab stops of the line into unbreakable
6945 horizontal movements, then splits the line after the second @samp{b}
6946 (assuming a sufficiently short line length).  Usually, this isn't what
6947 the user wants.
6949 @item
6950 Superfluous tabs (i.e., tab characters which do not correspond to a tab
6951 stop) are ignored except the first one which delimits the characters
6952 belonging to the last tab stop for right-justifying or centering.
6953 Consider the following example
6955 @Example
6956 .ds Z   foo\tbar\tfoo
6957 .ds ZZ  foo\tbar\tfoobar
6958 .ds ZZZ foo\tbar\tfoo\tbar
6959 .ta 2i 4iR
6960 \*[Z]
6962 \*[ZZ]
6964 \*[ZZZ]
6966 @endExample
6968 @noindent
6969 which produces the following output:
6971 @Example
6972 foo                 bar              foo
6973 foo                 bar           foobar
6974 foo                 bar              foobar
6975 @endExample
6977 @noindent
6978 The first line right-justifies the second `foo' relative to the tab
6979 stop.  The second line right-justifies `foobar'.  The third line finally
6980 right-justifies only `foo' because of the additional tab character which
6981 marks the end of the string belonging to the last defined tab stop.
6983 @item
6984 Tab stops are associated with the current environment
6985 (@pxref{Environments}).
6987 @item
6988 Calling @code{ta} without an argument removes all tab stops.
6990 @item
6991 @cindex tab stops, for TTY output devices
6992 The start-up value of @code{gtroff} is @w{@samp{T 0.8i}}.
6993 @end itemize
6995 @cindex tab settings register (@code{.tabs})
6996 The read-only number register @code{.tabs} contains a string
6997 representation of the current tab settings suitable for use as an
6998 argument to the @code{ta} request.
7000 @Example
7001 .ds tab-string \n[.tabs]
7002 \*[tab-string]
7003     @result{} T120u
7004 @endExample
7006 @cindex @code{.S} register, Plan@tie{}9 alias for @code{.tabs}
7007 @cindex @code{.tabs} register, Plan@tie{}9 alias (@code{.S})
7008 The @code{troff} version of the Plan@tie{}9 operating system uses
7009 register @code{.S} for the same purpose.
7010 @endDefreq
7012 @Defreq {tc, [@Var{fill-glyph}]}
7013 @cindex tab repetition character (@code{tc})
7014 @cindex character, tab repetition (@code{tc})
7015 @cindex glyph, tab repetition (@code{tc})
7016 Normally @code{gtroff} fills the space to the next tab stop with
7017 whitespace.  This can be changed with the @code{tc} request.  With no
7018 argument @code{gtroff} reverts to using whitespace, which is the
7019 default.  The value of this @dfn{tab repetition character} is
7020 associated with the current environment
7021 (@pxref{Environments}).@footnote{@dfn{Tab repetition character} is a
7022 misnomer since it is an output glyph.}
7023 @endDefreq
7025 @DefreqList {linetabs, n}
7026 @DefregListEnd {.linetabs}
7027 @cindex tab, line-tabs mode
7028 @cindex line-tabs mode
7029 @cindex mode, line-tabs
7030 If @var{n} is missing or not zero, enable @dfn{line-tabs} mode,
7031 or disable it otherwise (the default).
7032 In line-tabs mode, @code{gtroff} computes tab distances
7033 relative to the (current) output line instead of the input line.
7035 For example, the following code:
7037 @Example
7038 .ds x a\t\c
7039 .ds y b\t\c
7040 .ds z c
7041 .ta 1i 3i
7045 @endExample
7047 @noindent
7048 in normal mode, results in the output
7050 @Example
7051 a         b         c
7052 @endExample
7054 @noindent
7055 in line-tabs mode, the same code outputs
7057 @Example
7058 a         b                   c
7059 @endExample
7061 Line-tabs mode is associated with the current environment.
7062 The read-only register @code{.linetabs} is set to@tie{}1 if in line-tabs
7063 mode, and 0 in normal mode.
7064 @endDefreq
7066 @menu
7067 * Leaders::
7068 * Fields::
7069 @end menu
7071 @c ---------------------------------------------------------------------
7073 @node Leaders, Fields, Tabs and Fields, Tabs and Fields
7074 @subsection Leaders
7075 @cindex leaders
7077 Sometimes it may may be desirable to use the @code{tc} request to fill a
7078 particular tab stop with a given glyph (for example dots in a table
7079 of contents), but also normal tab stops on the rest of the line.  For
7080 this @code{gtroff} provides an alternate tab mechanism, called
7081 @dfn{leaders} which does just that.
7083 @cindex leader character
7084 A leader character (character code@tie{}1) behaves similarly to a tab
7085 character: It moves to the next tab stop.  The only difference is that
7086 for this movement, the fill glyph defaults to a period character and
7087 not to space.
7089 @Defesc {\\a, , , }
7090 @cindex leader character, non-interpreted (@code{\a})
7091 @cindex character, leader, non-interpreted (@code{\a})
7092 This escape is a non-interpreted leader character.  In copy mode
7093 (@pxref{Copy-in Mode}), @code{\a} is the same as a real leader
7094 character.
7095 @endDefesc
7097 @Defreq {lc, [@Var{fill-glyph}]}
7098 @cindex leader repetition character (@code{lc})
7099 @cindex character, leader repetition (@code{lc})
7100 @cindex glyph, leader repetition (@code{lc})
7101 Declare the @dfn{leader repetition character}.@footnote{@dfn{Leader
7102 repetition character} is a misnomer since it is an output glyph.}
7103 Without an argument, leaders act the same as tabs (i.e., using
7104 whitespace for filling).  @code{gtroff}'s start-up value is a dot
7105 (@samp{.}).  The value of the leader repetition character is
7106 associated with the current environment (@pxref{Environments}).
7107 @endDefreq
7109 @cindex table of contents
7110 @cindex contents, table of
7111 For a table of contents, to name an example, tab stops may be defined so
7112 that the section number is one tab stop, the title is the second with
7113 the remaining space being filled with a line of dots, and then the page
7114 number slightly separated from the dots.
7116 @Example
7117 .ds entry 1.1\tFoo\a\t12
7118 .lc .
7119 .ta 1i 5i +.25i
7120 \*[entry]
7121 @endExample
7123 @noindent
7124 This produces
7126 @Example
7127 1.1  Foo..........................................  12
7128 @endExample
7130 @c ---------------------------------------------------------------------
7132 @node Fields,  , Leaders, Tabs and Fields
7133 @subsection Fields
7134 @cindex fields
7136 @cindex field delimiting character (@code{fc})
7137 @cindex delimiting character, for fields (@code{fc})
7138 @cindex character, field delimiting (@code{fc})
7139 @cindex field padding character (@code{fc})
7140 @cindex padding character, for fields (@code{fc})
7141 @cindex character, field padding (@code{fc})
7142 @dfn{Fields} are a more general way of laying out tabular data.  A field
7143 is defined as the data between a pair of @dfn{delimiting characters}.
7144 It contains substrings which are separated by @dfn{padding characters}.
7145 The width of a field is the distance on the @emph{input} line from the
7146 position where the field starts to the next tab stop.  A padding
7147 character inserts stretchable space similar to @TeX{}'s @code{\hss}
7148 command (thus it can even be negative) to make the sum of all substring
7149 lengths plus the stretchable space equal to the field width.  If more
7150 than one padding character is inserted, the available space is evenly
7151 distributed among them.
7153 @Defreq {fc, [@Var{delim-char} [@Var{padding-char}]]}
7154 Define a delimiting and a padding character for fields.  If the latter
7155 is missing, the padding character defaults to a space character.  If
7156 there is no argument at all, the field mechanism is disabled (which is
7157 the default).  Note that contrary to e.g.@: the tab repetition
7158 character, delimiting and padding characters are @emph{not} associated
7159 to the current environment (@pxref{Environments}).
7161 Example:
7163 @Example
7164 .fc # ^
7165 .ta T 3i
7166 #foo^bar^smurf#
7168 #foo^^bar^smurf#
7169 @endExample
7171 @noindent
7172 and here the result:
7174 @Example
7175 foo         bar          smurf
7176 foo            bar       smurf
7177 @endExample
7178 @endDefreq
7181 @c =====================================================================
7183 @node Character Translations, Troff and Nroff Mode, Tabs and Fields, gtroff Reference
7184 @section Character Translations
7185 @cindex character translations
7186 @cindex translations of characters
7188 @cindex control character, changing (@code{cc})
7189 @cindex character, control, changing (@code{cc})
7190 @cindex no-break control character, changing (@code{c2})
7191 @cindex character, no-break control, changing (@code{c2})
7192 @cindex control character, no-break, changing (@code{c2})
7193 The control character (@samp{.}) and the no-break control character
7194 (@samp{'}) can be changed with the @code{cc} and @code{c2} requests,
7195 respectively.
7197 @Defreq {cc, [@Var{c}]}
7198 Set the control character to@tie{}@var{c}.  With no argument the default
7199 control character @samp{.} is restored.  The value of the control
7200 character is associated with the current environment
7201 (@pxref{Environments}).
7202 @endDefreq
7204 @Defreq {c2, [@Var{c}]}
7205 Set the no-break control character to@tie{}@var{c}.  With no argument the
7206 default control character @samp{'} is restored.  The value of the
7207 no-break control character is associated with the current environment
7208 (@pxref{Environments}).
7209 @endDefreq
7211 @Defreq {eo, }
7212 @cindex disabling @code{\} (@code{eo})
7213 @cindex @code{\}, disabling (@code{eo})
7214 Disable the escape mechanism completely.  After executing this
7215 request, the backslash character @samp{\} no longer starts an escape
7216 sequence.
7218 This request can be very helpful in writing macros since it is not
7219 necessary then to double the escape character.  Here an example:
7221 @Example
7222 .\" This is a simplified version of the
7223 .\" .BR request from the man macro package
7225 .de BR
7226 .  ds result \&
7227 .  while (\n[.$] >= 2) \@{\
7228 .    as result \fB\$1\fR\$2
7229 .    shift 2
7230 .  \@}
7231 .  if \n[.$] .as result \fB\$1
7232 \*[result]
7233 .  ft R
7236 @endExample
7237 @endDefreq
7239 @Defreq {ec, [@Var{c}]}
7240 @cindex escape character, changing (@code{ec})
7241 @cindex character, escape, changing (@code{ec})
7242 Set the escape character to@tie{}@var{c}.  With no argument the default
7243 escape character @samp{\} is restored.  It can be also used to
7244 re-enable the escape mechanism after an @code{eo} request.
7246 Note that changing the escape character globally will likely break
7247 macro packages since @code{gtroff} has no mechanism to `intern' macros,
7248 i.e., to convert a macro definition into an internal form which is
7249 independent of its representation (@TeX{} has this mechanism).
7250 If a macro is called, it is executed literally.
7251 @endDefreq
7253 @DefreqList {ecs, }
7254 @DefreqListEnd {ecr, }
7255 The @code{ecs} request saves the current escape character
7256 in an internal register.
7257 Use this request in combination with the @code{ec} request to
7258 temporarily change the escape character.
7260 The @code{ecr} request restores the escape character
7261 saved with @code{ecs}.
7262 Without a previous call to @code{ecs}, this request
7263 sets the escape character to @code{\}.
7264 @endDefreq
7266 @DefescList {\\\\, , , }
7267 @DefescItem {\\e, , , }
7268 @DefescListEnd {\\E, , , }
7269 Print the current escape character (which is the backslash character
7270 @samp{\} by default).
7272 @code{\\} is a `delayed' backslash; more precisely, it is the default
7273 escape character followed by a backslash, which no longer has special
7274 meaning due to the leading escape character.  It is @emph{not} an escape
7275 sequence in the usual sense!  In any unknown escape sequence
7276 @code{\@var{X}} the escape character is ignored and @var{X} is printed.
7277 But if @var{X} is equal to the current escape character, no warning is
7278 emitted.
7280 As a consequence, only at top-level or in a diversion a backslash glyph is
7281 printed; in copy-in mode, it expands to a single backslash which then
7282 combines with the following character to an escape sequence.
7284 The @code{\E} escape differs from @code{\e} by printing an escape
7285 character that is not interpreted in copy mode.
7286 Use this to define strings with escapes that work
7287 when used in copy mode (for example, as a macro argument).
7288 The following example defines strings to begin and end
7289 a superscript:
7291 @Example
7292 .ds @{ \v'-.3m'\s'\En[.s]*60/100'
7293 .ds @} \s0\v'.3m'
7294 @endExample
7296 Another example to demonstrate the differences between the various escape
7297 sequences, using a strange escape character, @samp{-}.
7299 @Example
7300 .ec -
7301 .de xxx
7302 --A'123'
7304 .xxx
7305     @result{} -A'foo'
7306 @endExample
7308 @noindent
7309 The result is surprising for most users, expecting @samp{1} since
7310 @samp{foo} is a valid identifier.  What has happened?  As mentioned
7311 above, the leading escape character makes the following character
7312 ordinary.  Written with the default escape character the sequence
7313 @samp{--} becomes @samp{\-} -- this is the minus sign.
7315 If the escape character followed by itself is a valid escape sequence,
7316 only @code{\E} yields the expected result:
7318 @Example
7319 .ec -
7320 .de xxx
7321 -EA'123'
7323 .xxx
7324     @result{} 1
7325 @endExample
7326 @endDefesc
7328 @Defesc {\\., , , }
7329 Similar to @code{\\}, the sequence @code{\.} isn't a real escape sequence.
7330 As before, a warning message is suppressed if the escape character is
7331 followed by a dot, and the dot itself is printed.
7333 @Example
7334 .de foo
7335 .  nop foo
7337 .  de bar
7338 .    nop bar
7339 \\..
7342 .foo
7343 .bar
7344     @result{} foo bar
7345 @endExample
7347 @noindent
7348 The first backslash is consumed while the macro is read, and the second
7349 is swallowed while exexuting macro @code{foo}.
7350 @endDefesc
7352 A @dfn{translation} is a mapping of an input character to an output
7353 glyph.  The mapping occurs at output time, i.e., the input character
7354 gets assigned the metric information of the mapped output character
7355 right before input tokens are converted to nodes (@pxref{Gtroff
7356 Internals}, for more on this process).
7358 @DefreqList {tr, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
7359 @DefreqListEnd {trin, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
7360 Translate character @var{a} to glyph@tie{}@var{b}, character @var{c} to
7361 glyph@tie{}@var{d}, etc.  If there is an odd number of arguments, the
7362 last one is translated to an unstretchable space (@w{@samp{\ }}).
7364 The @code{trin} request is identical to @code{tr},
7365 but when you unformat a diversion with @code{asciify}
7366 it ignores the translation.
7367 @xref{Diversions}, for details about the @code{asciify} request.
7369 Some notes:
7371 @itemize @bullet
7372 @item
7373 @cindex @code{\(}, and translations
7374 @cindex @code{\[}, and translations
7375 @cindex @code{\'}, and translations
7376 @cindex @code{\`}, and translations
7377 @cindex @code{\-}, and translations
7378 @cindex @code{\_}, and translations
7379 @cindex @code{\C}, and translations
7380 @cindex @code{\N}, and translations
7381 @cindex @code{char} request, and translations
7382 @cindex special characters
7383 @cindex character, special
7384 @cindex numbered glyph (@code{\N})
7385 @cindex glyph, numbered (@code{\N})
7386 Special characters (@code{\(@var{xx}}, @code{\[@var{xxx}]},
7387 @code{\C'@var{xxx}'}, @code{\'}, @code{\`}, @code{\-}, @code{\_}),
7388 glyphs defined with the @code{char} request, and numbered glyphs
7389 (@code{\N'@var{xxx}'}) can be translated also.
7391 @item
7392 @cindex @code{\e}, and translations
7393 The @code{\e} escape can be translated also.
7395 @item
7396 @cindex @code{\%}, and translations
7397 @cindex @code{\~}, and translations
7398 Characters can be mapped onto the @code{\%} and @code{\~} escapes (but
7399 @code{\%} and @code{\~} can't be mapped onto another glyph).
7401 @item
7402 @cindex backspace character, and translations
7403 @cindex character, backspace, and translations
7404 @cindex leader character, and translations
7405 @cindex character, leader, and translations
7406 @cindex newline character, and translations
7407 @cindex character, newline, and translations
7408 @cindex tab character, and translations
7409 @cindex character, tab, and translations
7410 @cindex @code{\a}, and translations
7411 @cindex @code{\t}, and translations
7412 The following characters can't be translated: space (with one exception,
7413 see below), backspace, newline, leader (and @code{\a}), tab (and
7414 @code{\t}).
7416 @item
7417 @cindex @code{shc} request, and translations
7418 Translations are not considered for finding the soft hyphen character
7419 set with the @code{shc} request.
7421 @item
7422 @cindex @code{\&}, and translations
7423 The pair @samp{@var{c}\&} (this is an arbitrary character@tie{}@var{c}
7424 followed by the zero width space character) maps this character to nothing.
7426 @Example
7427 .tr a\&
7428 foo bar
7429     @result{} foo br
7430 @endExample
7432 @noindent
7433 It is even possible to map the space character to nothing:
7435 @Example
7436 .tr aa \&
7437 foo bar
7438     @result{} foobar
7439 @endExample
7441 @noindent
7442 As shown in the example, the space character can't be the first
7443 character/glyph pair as an argument of @code{tr}.  Additionally, it is
7444 not possible to map the space character to any other glyph; requests
7445 like @w{@samp{.tr aa x}} undo @w{@samp{.tr aa \&}} instead.
7447 If justification is active, lines are justified in spite of the
7448 `empty' space character (but there is no minimal distance, i.e.@: the
7449 space character, between words).
7451 @item
7452 After an output glyph has been constructed (this happens at the
7453 moment immediately before the glyph is appended to an output
7454 glyph list, either by direct output, in a macro, diversion, or
7455 string), it is no longer affected by @code{tr}.
7457 @item
7458 Translating character to glyphs where one of them or both are
7459 undefined is possible also; @code{tr} does not check whether the
7460 entities in its argument do exist.
7462 @xref{Gtroff Internals}.
7464 @item
7465 @code{troff} no longer has a hard-coded dependency on @w{Latin-1};
7466 all @code{char@var{XXX}} entities have been removed from the font
7467 description files.  This has a notable consequence which shows up in
7468 warnings like @code{can't find character with input code @var{XXX}}
7469 if the @code{tr} request isn't handled properly.
7471 Consider the following translation:
7473 @Example
7474 .tr @'e@'E
7475 @endExample
7477 @noindent
7478 This maps input character @code{@'e} onto glyph @code{@'E}, which is
7479 identical to glyph @code{char201}.  But this glyph intentionally
7480 doesn't exist!  Instead, @code{\[char201]} is treated as an input
7481 character entity and is by default mapped onto @code{\['E]}, and
7482 @code{gtroff} doesn't handle translations of translations.
7484 The right way to write the above translation is
7486 @Example
7487 .tr @'e\['E]
7488 @endExample
7490 @noindent
7491 With other words, the first argument of @code{tr} should be an input
7492 character or entity, and the second one a glyph entity.
7494 @item
7495 Without an argument, the @code{tr} request is ignored.
7496 @end itemize
7497 @endDefreq
7499 @Defreq {trnt, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
7500 @cindex @code{\!}, and @code{trnt}
7501 @code{trnt} is the same as the @code{tr} request except that the
7502 translations do not apply to text that is transparently throughput
7503 into a diversion with @code{\!}.  @xref{Diversions}, for more
7504 information.
7506 For example,
7508 @Example
7509 .tr ab
7510 .di x
7511 \!.tm a
7514 @endExample
7516 @noindent
7517 prints @samp{b} to the standard error stream; if @code{trnt} is used
7518 instead of @code{tr} it prints @samp{a}.
7519 @endDefreq
7522 @c =====================================================================
7524 @node Troff and Nroff Mode, Line Layout, Character Translations, gtroff Reference
7525 @section Troff and Nroff Mode
7526 @cindex troff mode
7527 @cindex mode, troff
7528 @cindex nroff mode
7529 @cindex mode, nroff
7531 Originally, @code{nroff} and @code{troff} were two separate programs,
7532 the former for TTY output, the latter for everything else.  With GNU
7533 @code{troff}, both programs are merged into one executable, sending
7534 its output to a device driver (@code{grotty} for TTY devices,
7535 @code{grops} for @sc{PostScript}, etc.) which interprets the
7536 intermediate output of @code{gtroff}.  For @acronym{UNIX} @code{troff}
7537 it makes sense to talk about @dfn{Nroff mode} and @dfn{Troff mode}
7538 since the differences are hardcoded.  For GNU @code{troff}, this
7539 distinction is not appropriate because @code{gtroff} simply takes the
7540 information given in the font files for a particular device without
7541 handling requests specially if a TTY output device is used.
7543 Usually, a macro package can be used with all output devices.
7544 Nevertheless, it is sometimes necessary to make a distinction between
7545 TTY and non-TTY devices: @code{gtroff} provides two built-in
7546 conditions @samp{n} and @samp{t} for the @code{if}, @code{ie}, and
7547 @code{while} requests to decide whether @code{gtroff} shall behave
7548 like @code{nroff} or like @code{troff}.
7550 @Defreq {troff, }
7551 @pindex troffrc
7552 @pindex troffrc-end
7553 Make the @samp{t} built-in condition true (and the @samp{n} built-in
7554 condition false) for @code{if}, @code{ie}, and @code{while}
7555 conditional requests.  This is the default if @code{gtroff}
7556 (@emph{not} @code{groff}) is started with the @option{-R} switch to
7557 avoid loading of the start-up files @file{troffrc} and
7558 @file{troffrc-end}.  Without @option{-R}, @code{gtroff} stays in troff
7559 mode if the output device is not a TTY (e.g.@: `ps').
7560 @endDefreq
7562 @Defreq {nroff, }
7563 @pindex tty.tmac
7564 Make the @samp{n} built-in condition true (and the @samp{t} built-in
7565 condition false) for @code{if}, @code{ie}, and @code{while}
7566 conditional requests.  This is the default if @code{gtroff} uses a TTY
7567 output device; the code for switching to nroff mode is in the file
7568 @file{tty.tmac} which is loaded by the start-up file @code{troffrc}.
7569 @endDefreq
7571 @xref{Conditionals and Loops}, for more details on built-in
7572 conditions.
7575 @c =====================================================================
7577 @node Line Layout, Line Control, Troff and Nroff Mode, gtroff Reference
7578 @section Line Layout
7579 @cindex line layout
7580 @cindex layout, line
7582 @cindex dimensions, line
7583 @cindex line dimensions
7584 The following drawing shows the dimensions which @code{gtroff} uses for
7585 placing a line of output onto the page.  They are labeled with the
7586 request which manipulates each dimension.
7588 @Example
7589                 -->| in |<--
7590                    |<-----------ll------------>|
7591               +----+----+----------------------+----+
7592               |    :    :                      :    |
7593               +----+----+----------------------+----+
7594            -->| po |<--
7595               |<--------paper width---------------->|
7596 @endExample
7598 @noindent
7599 These dimensions are:
7601 @ftable @code
7602 @item po
7603 @cindex left margin (@code{po})
7604 @cindex margin, left (@code{po})
7605 @cindex page offset (@code{po})
7606 @cindex offset, page (@code{po})
7607 @dfn{Page offset} -- this is the leftmost position of text on the final
7608 output, defining the @dfn{left margin}.
7610 @item in
7611 @cindex indentation (@code{in})
7612 @cindex line indentation (@code{in})
7613 @dfn{Indentation} -- this is the distance from the left margin where
7614 text is printed.
7616 @item ll
7617 @cindex line length (@code{ll})
7618 @cindex length of line (@code{ll})
7619 @dfn{Line length} -- this is the distance from the left margin to right
7620 margin.
7621 @end ftable
7623 A simple demonstration:
7625 @Example
7626 .ll 3i
7627 This is text without indentation.
7628 The line length has been set to 3\~inch.
7629 .in +.5i
7630 .ll -.5i
7631 Now the left and right margins are both increased.
7634 Calling .in and .ll without parameters restore
7635 the previous values.
7636 @endExample
7638 Result:
7640 @Example
7641 This  is text without indenta-
7642 tion.   The  line  length  has
7643 been set to 3 inch.
7644      Now   the  left  and
7645      right  margins   are
7646      both increased.
7647 Calling  .in  and  .ll without
7648 parameters restore the  previ-
7649 ous values.
7650 @endExample
7652 @DefreqList {po, [@Var{offset}]}
7653 @DefreqItem {po, @t{+}@Var{offset}}
7654 @DefreqItem {po, @t{-}@Var{offset}}
7655 @DefregListEnd {.o}
7656 @pindex troffrc
7657 Set horizontal page offset to @var{offset} (or increment or decrement
7658 the current value by @var{offset}).  Note that this request does not
7659 cause a break, so changing the page offset in the middle of text being
7660 filled may not yield the expected result.  The initial value is
7661 1@dmn{i}.  For TTY output devices, it is set to 0 in the startup file
7662 @file{troffrc}; the default scaling indicator is @samp{m} (and
7663 not @samp{v} as incorrectly documented in the original
7664 @acronym{UNIX} troff manual).
7666 The current page offset can be found in the read-only number register
7667 @samp{.o}.
7669 If @code{po} is called without an argument, the page offset is reset to
7670 the previous value before the last call to @code{po}.
7672 @Example
7673 .po 3i
7674 \n[.o]
7675     @result{} 720
7676 .po -1i
7677 \n[.o]
7678     @result{} 480
7680 \n[.o]
7681     @result{} 720
7682 @endExample
7683 @endDefreq
7685 @DefreqList {in, [@Var{indent}]}
7686 @DefreqItem {in, @t{+}@Var{indent}}
7687 @DefreqItem {in, @t{-}@Var{indent}}
7688 @DefregListEnd {.i}
7689 Set indentation to @var{indent} (or increment or decrement the
7690 current value by @var{indent}).  This request causes a break.
7691 Initially, there is no indentation.
7693 If @code{in} is called without an argument, the indentation is reset to
7694 the previous value before the last call to @code{in}.  The default
7695 scaling indicator is @samp{m}.
7697 The indentation is associated with the current environment
7698 (@pxref{Environments}).
7700 If a negative indentation value is specified (which is not allowed),
7701 @code{gtroff} emits a warning of type @samp{range} and sets the
7702 indentation to zero.
7704 The effect of @code{in} is delayed until a partially collected line (if
7705 it exists) is output.  A temporary indent value is reset to zero also.
7707 The current indentation (as set by @code{in}) can be found in the
7708 read-only number register @samp{.i}.
7709 @endDefreq
7711 @DefreqList {ti, offset}
7712 @DefreqItem {ti, @t{+}@Var{offset}}
7713 @DefreqItem {ti, @t{-}@Var{offset}}
7714 @DefregListEnd {.in}
7715 Temporarily indent the next output line by @var{offset}.  If an
7716 increment or decrement value is specified, adjust the temporary
7717 indentation relative to the value set by the @code{in} request.
7719 This request causes a break; its value is associated with the current
7720 environment (@pxref{Environments}).  The default scaling indicator
7721 is @samp{m}.  A call of @code{ti} without an argument is ignored.
7723 If the total indentation value is negative (which is not allowed),
7724 @code{gtroff} emits a warning of type @samp{range} and sets the
7725 temporary indentation to zero.  `Total indentation' is either
7726 @var{offset} if specified as an absolute value, or the temporary plus
7727 normal indentation, if @var{offset} is given as a relative value.
7729 The effect of @code{ti} is delayed until a partially collected line (if
7730 it exists) is output.
7732 The read-only number register @code{.in} is the indentation that applies
7733 to the current output line.
7735 The difference between @code{.i} and @code{.in} is that the latter takes
7736 into account whether a partially collected line still uses the old
7737 indentation value or a temporary indentation value is active.
7738 @endDefreq
7740 @DefreqList {ll, [@Var{length}]}
7741 @DefreqItem {ll, @t{+}@Var{length}}
7742 @DefreqItem {ll, @t{-}@Var{length}}
7743 @DefregItem {.l}
7744 @DefregListEnd {.ll}
7745 Set the line length to @var{length} (or increment or decrement the
7746 current value by @var{length}).  Initially, the line length is set to
7747 6.5@dmn{i}.  The effect of @code{ll} is delayed until a partially
7748 collected line (if it exists) is output.  The default scaling
7749 indicator is @samp{m}.
7751 If @code{ll} is called without an argument, the line length is reset to
7752 the previous value before the last call to @code{ll}.  If a negative
7753 line length is specified (which is not allowed), @code{gtroff} emits a
7754 warning of type @samp{range} and sets the line length to zero.
7756 The line length is associated with the current environment
7757 (@pxref{Environments}).
7759 @cindex line length register (@code{.l})
7760 The current line length (as set by @code{ll}) can be found in the
7761 read-only number register @samp{.l}.  The read-only number register
7762 @code{.ll} is the line length that applies to the current output line.
7764 Similar to @code{.i} and @code{.in}, the difference between @code{.l}
7765 and @code{.ll} is that the latter takes into account whether a partially
7766 collected line still uses the old line length value.
7767 @endDefreq
7770 @c =====================================================================
7772 @node Line Control, Page Layout, Line Layout, gtroff Reference
7773 @section Line Control
7774 @cindex line control
7775 @cindex control, line
7777 It is important to understand how @code{gtroff} handles input and output
7778 lines.
7780 Many escapes use positioning relative to the input line.  For example,
7781 this
7783 @Example
7784 This is a \h'|1.2i'test.
7786 This is a
7787 \h'|1.2i'test.
7788 @endExample
7790 @noindent
7791 produces
7793 @Example
7794 This is a   test.
7796 This is a             test.
7797 @endExample
7799 The main usage of this feature is to define macros which act exactly
7800 at the place where called.
7802 @Example
7803 .\" A simple macro to underline a word
7804 .de underline
7805 .  nop \\$1\l'|0\[ul]'
7807 @endExample
7809 @noindent
7810 In the above example, @samp{|0} specifies a negative distance from the
7811 current position (at the end of the just emitted argument @code{\$1}) back
7812 to the beginning of the input line.  Thus, the @samp{\l} escape draws a
7813 line from right to left.
7815 @cindex input line continuation (@code{\})
7816 @cindex line, input, continuation (@code{\})
7817 @cindex continuation, input line (@code{\})
7818 @cindex output line, continuation (@code{\c})
7819 @cindex line, output, continuation (@code{\c})
7820 @cindex continuation, output line (@code{\c})
7821 @cindex interrupted line
7822 @cindex line, interrupted
7823 @code{gtroff} makes a difference between input and output line
7824 continuation; the latter is also called @dfn{interrupting} a line.
7826 @DefescList {\\@key{RET}, , ,}
7827 @DefescItem {\\c, , ,}
7828 @DefregListEnd{.int}
7829 Continue a line.  @code{\@key{RET}} (this is a backslash at the end
7830 of a line immediately followed by a newline) works on the input level,
7831 suppressing the effects of the following newline in the input.
7833 @Example
7834 This is a \
7835 .test
7836     @result{} This is a .test
7837 @endExample
7839 The @samp{|} operator is also affected.
7841 @cindex @code{\R}, after @code{\c}
7842 @code{\c} works on the output level.  Anything after this escape on the
7843 same line is ignored, except @code{\R} which works as usual.  Anything
7844 before @code{\c} on the same line will be appended to the current partial
7845 output line.  The next non-command line after an interrupted line counts
7846 as a new input line.
7848 The visual results depend on whether no-fill mode is active.
7850 @itemize @bullet
7851 @item
7852 @cindex @code{\c}, and no-fill mode
7853 @cindex no-fill mode, and @code{\c}
7854 @cindex mode, no-fill, and @code{\c}
7855 If no-fill mode is active (using the @code{nf} request), the next input
7856 text line after @code{\c} will be handled as a continuation of the same
7857 input text line.
7859 @Example
7861 This is a \c
7862 test.
7863     @result{} This is a test.
7864 @endExample
7866 @item
7867 @cindex @code{\c}, and fill mode
7868 @cindex fill mode, and @code{\c}
7869 @cindex mode, fill, and @code{\c}
7870 If fill mode is active (using the @code{fi} request), a word interrupted
7871 with @code{\c} will be continued with the text on the next input text line,
7872 without an intervening space.
7874 @Example
7875 This is a te\c
7877     @result{} This is a test.
7878 @endExample
7879 @end itemize
7881 Note that an intervening control line which causes a break is stronger
7882 than @code{\c}, flushing out the current partial line in the usual way.
7884 @cindex interrupted line register (@code{.int})
7885 The @code{.int} register contains a positive value
7886 if the last output line was interrupted with @code{\c}; this is
7887 associated with the current environment (@pxref{Environments}).
7889 @endDefesc
7891 @c =====================================================================
7893 @node Page Layout, Page Control, Line Control, gtroff Reference
7894 @section Page Layout
7895 @cindex page layout
7896 @cindex layout, page
7898 @code{gtroff} provides some very primitive operations for controlling
7899 page layout.
7901 @DefreqList {pl, [@Var{length}]}
7902 @DefreqItem {pl, @t{+}@Var{length}}
7903 @DefreqItem {pl, @t{-}@Var{length}}
7904 @DefregListEnd {.p}
7905 @cindex page length (@code{pl})
7906 @cindex length of page (@code{pl})
7907 Set the @dfn{page length} to @var{length} (or increment or decrement
7908 the current value by @var{length}).  This is the length of the
7909 physical output page.  The default scaling indicator is @samp{v}.
7911 @cindex page length register (@code{.p})
7912 The current setting can be found in the read-only number register
7913 @samp{.p}.
7915 @cindex top margin
7916 @cindex margin, top
7917 @cindex bottom margin
7918 @cindex margin, bottom
7919 Note that this only specifies the size of the page, not the top and
7920 bottom margins.  Those are not set by @code{gtroff} directly.
7921 @xref{Traps}, for further information on how to do this.
7923 Negative @code{pl} values are possible also, but not very useful: No
7924 trap is sprung, and each line is output on a single page (thus
7925 suppressing all vertical spacing).
7927 If no argument or an invalid argument is given, @code{pl} sets the page
7928 length to 11@dmn{i}.
7929 @endDefreq
7931 @cindex headers
7932 @cindex footers
7933 @cindex titles
7934 @code{gtroff} provides several operations which help in setting up top
7935 and bottom titles (or headers and footers).
7937 @Defreq {tl, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}}
7938 @cindex title line (@code{tl})
7939 @cindex three-part title (@code{tl})
7940 @cindex page number character (@code{%})
7941 Print a @dfn{title line}.  It consists of three parts: a left
7942 justified portion, a centered portion, and a right justified portion.
7943 The argument separator @samp{'} can be replaced with any character not
7944 occurring in the title line.  The @samp{%} character is replaced with
7945 the current page number.  This character can be changed with the
7946 @code{pc} request (see below).
7948 Without argument, @code{tl} is ignored.
7950 Some notes:
7952 @itemize @bullet
7953 @item
7954 A title line is not restricted to the top or bottom of a page.
7956 @item
7957 @code{tl} prints the title line immediately, ignoring a partially filled
7958 line (which stays untouched).
7960 @item
7961 It is not an error to omit closing delimiters.  For example,
7962 @w{@samp{.tl /foo}} is equivalent to @w{@samp{.tl /foo///}}: It prints a
7963 title line with the left justified word @samp{foo}; the centered and
7964 right justfied parts are empty.
7966 @item
7967 @code{tl} accepts the same parameter delimiting characters as the
7968 @code{\A} escape; see @ref{Escapes}.
7969 @end itemize
7970 @endDefreq
7972 @DefreqList {lt, [@Var{length}]}
7973 @DefreqItem {lt, @t{+}@Var{length}}
7974 @DefreqItem {lt, @t{-}@Var{length}}
7975 @DefregListEnd {.lt}
7976 @cindex length of title line (@code{lt})
7977 @cindex title line, length (@code{lt})
7978 @cindex title line length register (@code{.lt})
7979 The title line is printed using its own line length, which is
7980 specified (or incremented or decremented) with the @code{lt} request.
7981 Initially, the title line length is set to 6.5@dmn{i}.  If a negative
7982 line length is specified (which is not allowed), @code{gtroff} emits a
7983 warning of type @samp{range} and sets the title line length to zero.
7984 The default scaling indicator is @samp{m}.  If @code{lt} is called
7985 without an argument, the title length is reset to the previous value
7986 before the last call to @code{lt}.
7988 The current setting of this is available in the @code{.lt} read-only
7989 number register; it is associated with the current environment
7990 (@pxref{Environments}).
7992 @endDefreq
7994 @DefreqList {pn, page}
7995 @DefreqItem {pn, @t{+}@Var{page}}
7996 @DefreqItem {pn, @t{-}@Var{page}}
7997 @DefregListEnd {.pn}
7998 @cindex page number (@code{pn})
7999 @cindex number, page (@code{pn})
8000 Change (increase or decrease) the page number of the @emph{next} page.
8001 The only argument is the page number; the request is ignored without a
8002 parameter.
8004 The read-only number register @code{.pn} contains the number of the next
8005 page: either the value set by a @code{pn} request, or the number of the
8006 current page plus@tie{}1.
8007 @endDefreq
8009 @Defreg {%}
8010 @cindex page number register (@code{%})
8011 A read-write register holding the current page number.
8012 @endDefreg
8014 @Defreq {pc, [@Var{char}]}
8015 @cindex changing the page number character (@code{pc})
8016 @cindex page number character, changing (@code{pc})
8017 @vindex %
8018 Change the page number character (used by the @code{tl} request) to a
8019 different character.  With no argument, this mechanism is disabled.
8020 Note that this doesn't affect the number register@tie{}@code{%}.
8021 @endDefreq
8023 @xref{Traps}.
8026 @c =====================================================================
8028 @node Page Control, Fonts and Symbols, Page Layout, gtroff Reference
8029 @section Page Control
8030 @cindex page control
8031 @cindex control, page
8033 @DefreqList {bp, [@Var{page}]}
8034 @DefreqItem {bp, @t{+}@Var{page}}
8035 @DefreqListEnd {bp, @t{-}@Var{page}}
8036 @cindex new page (@code{bp})
8037 @cindex page, new (@code{bp})
8038 Stop processing the current page and move to the next page.  This
8039 request causes a break.  It can also take an argument to set
8040 (increase, decrease) the page number of the next page.  The only
8041 difference between @code{bp} and @code{pn} is that @code{pn} does not
8042 cause a break or actually eject a page.
8044 @Example
8045 .de newpage                         \" define macro
8046 'bp                                 \" begin page
8047 'sp .5i                             \" vertical space
8048 .tl 'left top'center top'right top' \" title
8049 'sp .3i                             \" vertical space
8050 ..                                  \" end macro
8051 @endExample
8053 @cindex @code{bp} request, and top-level diversion
8054 @cindex top-level diversion, and @code{bp}
8055 @cindex diversion, top-level, and @code{bp}
8056 @code{bp} has no effect if not called within the top-level diversion
8057 (@pxref{Diversions}).
8059 The number register @code{.pe} is set to@tie{}1 while @code{bp} is
8060 active.  @xref{Page Location Traps}.
8061 @endDefreq
8063 @Defreq {ne, [@Var{space}]}
8064 @cindex orphan lines, preventing with @code{ne}
8065 @cindex conditional page break (@code{ne})
8066 @cindex page break, conditional (@code{ne})
8067 It is often necessary to force a certain amount of space before a new
8068 page occurs.  This is most useful to make sure that there is not a
8069 single @dfn{orphan} line left at the bottom of a page.  The @code{ne}
8070 request ensures that there is a certain distance, specified by the
8071 first argument, before the next page is triggered (see @ref{Traps},
8072 for further information).  The default scaling indicator for @code{ne}
8073 is @samp{v}; the default value of @var{space} is@tie{}1@dmn{v} if no
8074 argument is given.
8076 For example, to make sure that no fewer than 2@tie{}lines get orphaned,
8077 do the following before each paragraph:
8079 @Example
8080 .ne 2
8081 text text text
8082 @endExample
8084 @code{ne} will then automatically cause a page break if there is space
8085 for one line only.
8086 @endDefreq
8088 @DefreqList {sv, [@Var{space}]}
8089 @DefreqListEnd {os, }
8090 @cindex @code{ne} request, comparison with @code{sv}
8091 @code{sv} is similar to the @code{ne} request; it reserves the
8092 specified amount of vertical space.  If the desired amount of space
8093 exists before the next trap (or the bottom page boundary if no trap is
8094 set), the space is output immediately (ignoring a partially filled line
8095 which stays untouched).  If there is not enough space, it is stored for
8096 later output via the @code{os} request.  The default value is@tie{}1@dmn{v}
8097 if no argument is given; the default scaling indicator is @samp{v}.
8099 @cindex @code{sv} request, and no-space mode
8100 @cindex @code{os} request, and no-space mode
8101 Both @code{sv} and @code{os} ignore no-space mode.  While the @code{sv}
8102 request allows negative values for @var{space}, @code{os} will ignore
8103 them.
8104 @endDefreq
8106 @Defreg {nl}
8107 This register contains the current vertical position.  If the vertical
8108 position is zero and the top of page transition hasn't happened yet,
8109 @code{nl} is set to negative value.  @code{gtroff} itself does this at
8110 the very beginning of a document before anything has been printed, but
8111 the main usage is to plant a header trap on a page if this page has
8112 already started.
8114 Consider the following:
8116 @Example
8117 .de xxx
8118 .  sp
8119 .  tl ''Header''
8120 .  sp
8123 First page.
8125 .wh 0 xxx
8126 .nr nl (-1)
8127 Second page.
8128 @endExample
8130 @noindent
8131 Result:
8133 @Example
8134 First page.
8138                              Header
8140 Second page.
8143 @endExample
8145 @noindent
8146 Without resetting @code{nl} to a negative value, the just planted trap
8147 would be active beginning with the @emph{next} page, not the current
8148 one.
8150 @xref{Diversions}, for a comparison with the @code{.h} and @code{.d}
8151 registers.
8152 @endDefreg
8154 @c =====================================================================
8156 @node Fonts and Symbols, Sizes, Page Control, gtroff Reference
8157 @section Fonts and Symbols
8158 @cindex fonts
8160 @code{gtroff} can switch fonts at any point in the text.
8162 The basic set of fonts is @samp{R}, @samp{I}, @samp{B}, and @samp{BI}.
8163 These are Times Roman, Italic, Bold, and Bold Italic.  For non-TTY
8164 devices, there is also at least one symbol font which contains various
8165 special symbols (Greek, mathematics).
8167 @menu
8168 * Changing Fonts::
8169 * Font Families::
8170 * Font Positions::
8171 * Using Symbols::
8172 * Special Fonts::
8173 * Artificial Fonts::
8174 * Ligatures and Kerning::
8175 @end menu
8177 @c ---------------------------------------------------------------------
8179 @node Changing Fonts, Font Families, Fonts and Symbols, Fonts and Symbols
8180 @subsection Changing Fonts
8181 @cindex fonts
8183 @DefreqList {ft, [@Var{font}]}
8184 @DefescItem {\\f, , f, }
8185 @DefescItem {\\f, @lparen{}, fn, }
8186 @DefescListEnd {\\f, @lbrack{}, font, @rbrack}
8187 @cindex changing fonts (@code{ft}, @code{\f})
8188 @cindex fonts, changing (@code{ft}, @code{\f})
8189 @cindex @code{sty} request, and changing fonts
8190 @cindex @code{fam} request, and changing fonts
8191 @cindex @code{\F}, and changing fonts
8192 @kindex styles
8193 @kindex family
8194 @pindex DESC
8195 The @code{ft} request and the @code{\f} escape change the current font
8196 to @var{font} (one-character name@tie{}@var{f}, two-character name
8197 @var{fn}).
8199 If @var{font} is a style name (as set with the @code{sty} request or
8200 with the @code{styles} command in the @file{DESC} file), use it within
8201 the current font family (as set with the @code{fam} request, @code{\F}
8202 escape, or with the @code{family} command in the @file{DESC} file).
8204 @cindex previous font (@code{ft}, @code{\f[]}, @code{\fP})
8205 @cindex font, previous (@code{ft}, @code{\f[]}, @code{\fP})
8206 With no argument or using @samp{P} as an argument, @code{.ft} switches
8207 to the previous font.  Use @code{\f[]} to do this with the escape.  The
8208 old syntax forms @code{\fP} or @code{\f[P]} are also supported.
8210 Fonts are generally specified as upper-case strings, which are usually
8211 1@tie{}to 4 characters representing an abbreviation or acronym of the
8212 font name.  This is no limitation, just a convention.
8214 The example below produces two identical lines.
8216 @Example
8217 eggs, bacon,
8218 .ft B
8219 spam
8221 and sausage.
8223 eggs, bacon, \fBspam\fP and sausage.
8224 @endExample
8226 Note that @code{\f} doesn't produce an input token in @code{gtroff}.
8227 As a consequence, it can be used in requests like @code{mc} (which
8228 expects a single character as an argument) to change the font on
8229 the fly:
8231 @Example
8232 .mc \f[I]x\f[]
8233 @endExample
8235 @xref{Font Positions}, for an alternative syntax.
8236 @endDefreq
8238 @Defreq {ftr, f [@Var{g}]}
8239 @cindex @code{ft} request, and font translations
8240 @cindex @code{ul} request, and font translations
8241 @cindex @code{bd} request, and font translations
8242 @cindex @code{\f}, and font translations
8243 @cindex @code{cs} request, and font translations
8244 @cindex @code{tkf} request, and font translations
8245 @cindex @code{special} request, and font translations
8246 @cindex @code{fspecial} request, and font translations
8247 @cindex @code{fp} request, and font translations
8248 @cindex @code{sty} request, and font translations
8249 Translate font@tie{}@var{f} to font@tie{}@var{g}.  Whenever a font
8250 named@tie{}@var{f} is referred to in a @code{\f} escape sequence, or in the
8251 @code{ft}, @code{ul}, @code{bd}, @code{cs}, @code{tkf},
8252 @code{special}, @code{fspecial}, @code{fp}, or @code{sty} requests,
8253 font@tie{}@var{g} is used.  If @var{g} is missing or equal to@tie{}@var{f}
8254 the translation is undone.
8255 @endDefreq
8257 @c ---------------------------------------------------------------------
8259 @node Font Families, Font Positions, Changing Fonts, Fonts and Symbols
8260 @subsection Font Families
8261 @cindex font families
8262 @cindex families, font
8263 @cindex font styles
8264 @cindex styles, font
8266 Due to the variety of fonts available, @code{gtroff} has added the
8267 concept of @dfn{font families} and @dfn{font styles}.  The fonts are
8268 specified as the concatenation of the font family and style.  Specifying
8269 a font without the family part causes @code{gtroff} to use that style of
8270 the current family.
8272 @cindex PostScript fonts
8273 @cindex fonts, PostScript
8274 Currently, fonts for the devices @option{-Tps}, @option{-Tdvi}, and
8275 @option{-Tlbp} are set up to this mechanism.
8276 By default, @code{gtroff} uses the Times family with the four styles
8277 @samp{R}, @samp{I}, @samp{B}, and @samp{BI}.
8279 This way, it is possible to use the basic four fonts and to select a
8280 different font family on the command line (@pxref{Groff Options}).
8282 @DefreqList {fam, [@Var{family}]}
8283 @DefregItem {.fam}
8284 @DefescItem {\\F, , f, }
8285 @DefescItem {\\F, @lparen{}, fm, }
8286 @DefescItem {\\F, @lbrack{}, family, @rbrack}
8287 @DefregListEnd {.fn}
8288 @cindex changing font family (@code{fam}, @code{\F})
8289 @cindex font family, changing (@code{fam}, @code{\F})
8290 Switch font family to @var{family} (one-character name@tie{}@var{f},
8291 two-character name @var{fm}).  If no argument is given, switch
8292 back to the previous font family.  Use @code{\F[]} to do this with the
8293 escape.  Note that @code{\FP} doesn't work; it selects font family
8294 @samp{P} instead.
8296 The value at start-up is @samp{T}.
8297 The current font family is available in the read-only number register
8298 @samp{.fam} (this is a string-valued register); it is associated with
8299 the current environment.
8301 @Example
8302 spam,
8303 .fam H    \" helvetica family
8304 spam,     \" used font is family H + style R = HR
8305 .ft B     \" family H + style B = font HB
8306 spam,
8307 .fam T    \" times family
8308 spam,     \" used font is family T + style B = TB
8309 .ft AR    \" font AR (not a style)
8310 baked beans,
8311 .ft R     \" family T + style R = font TR
8312 and spam.
8313 @endExample
8315 Note that @code{\F} doesn't produce an input token in @code{gtroff}.
8316 As a consequence, it can be used in requests like @code{mc} (which
8317 expects a single character as an argument) to change the font family on
8318 the fly:
8320 @Example
8321 .mc \F[P]x\F[]
8322 @endExample
8324 The @samp{.fn} register contains the current @dfn{real font name}
8325 of the current font.
8326 This is a string-valued register.
8327 If the current font is a style, the value of @code{\n[.fn]}
8328 is the proper concatenation of family and style name.
8329 @endDefreq
8331 @Defreq {sty, n style}
8332 @cindex changing font style (@code{sty})
8333 @cindex font style, changing (@code{sty})
8334 @cindex @code{cs} request, and font styles
8335 @cindex @code{bd} request, and font styles
8336 @cindex @code{tkf} request, and font styles
8337 @cindex @code{uf} request, and font styles
8338 @cindex @code{fspecial} request, and font styles
8339 Associate @var{style} with font position@tie{}@var{n}.  A font position
8340 can be associated either with a font or with a style.  The current
8341 font is the index of a font position and so is also either a font or a
8342 style.  If it is a style, the font that is actually used is the font
8343 which name is the concatenation of the name of the current
8344 family and the name of the current style.  For example, if the current
8345 font is@tie{}1 and font position@tie{}1 is associated with style
8346 @samp{R} and the current font family is @samp{T}, then font
8347 @samp{TR} will be used.  If the current font is not a style, then the
8348 current family is ignored.  If the requests @code{cs}, @code{bd},
8349 @code{tkf}, @code{uf}, or @code{fspecial} are applied to a style,
8350 they will instead be applied to the member of the current family
8351 corresponding to that style.
8353 @var{n}@tie{}must be a non-negative integer value.
8355 @pindex DESC
8356 @kindex styles
8357 The default family can be set with the @option{-f} option
8358 (@pxref{Groff Options}).  The @code{styles} command in the @file{DESC}
8359 file controls which font positions (if any) are initially associated
8360 with styles rather than fonts.  For example, the default setting for
8361 @sc{PostScript} fonts
8363 @Example
8364 styles R I B BI
8365 @endExample
8367 @noindent
8368 is equivalent to
8370 @Example
8371 .sty 1 R
8372 .sty 2 I
8373 .sty 3 B
8374 .sty 4 BI
8375 @endExample
8377 @code{fam} and @code{\F} always check whether the current font position
8378 is valid; this can give surprising results if the current font position is
8379 associated with a style.
8381 In the following example, we want to access the @sc{PostScript} font
8382 @code{FooBar} from the font family @code{Foo}:
8384 @Example
8385 .sty \n[.fp] Bar
8386 .fam Foo
8387     @result{} warning: can't find font `FooR'
8388 @endExample
8390 @noindent
8391 The default font position at start-up is@tie{}1; for the
8392 @sc{PostScript} device, this is associated with style @samp{R}, so
8393 @code{gtroff} tries to open @code{FooR}.
8395 A solution to this problem is to use a dummy font like the following:
8397 @Example
8398 .fp 0 dummy TR    \" set up dummy font at position 0
8399 .sty \n[.fp] Bar  \" register style `Bar'
8400 .ft 0             \" switch to font at position 0
8401 .fam Foo          \" activate family `Foo'
8402 .ft Bar           \" switch to font `FooBar'
8403 @endExample
8405 @xref{Font Positions}.
8406 @endDefreq
8408 @c ---------------------------------------------------------------------
8410 @node Font Positions, Using Symbols, Font Families, Fonts and Symbols
8411 @subsection Font Positions
8412 @cindex font positions
8413 @cindex positions, font
8415 For the sake of old phototypesetters and compatibility with old versions
8416 of @code{troff}, @code{gtroff} has the concept of font @dfn{positions},
8417 on which various fonts are mounted.
8419 @DefreqList {fp, pos font [@Var{external-name}]}
8420 @DefregItem {.f}
8421 @DefregListEnd {.fp}
8422 @cindex mounting font (@code{fp})
8423 @cindex font, mounting (@code{fp})
8424 Mount font @var{font} at position @var{pos} (which must be a
8425 non-negative integer).  This numeric position can then be referred to
8426 with font changing commands.  When @code{gtroff} starts it is using
8427 font position@tie{}1 (which must exist; position@tie{}0 is unused
8428 usually at start-up).
8430 @cindex font position register (@code{.f})
8431 The current font in use, as a font position, is available in the
8432 read-only number register @samp{.f}.  This can be useful to remember the
8433 current font for later recall.  It is associated with the current
8434 environment (@pxref{Environments}).
8436 @Example
8437 .nr save-font \n[.f]
8438 .ft B
8439 ... text text text ...
8440 .ft \n[save-font]
8441 @endExample
8443 @cindex next free font position register (@code{.fp})
8444 The number of the next free font position is available in the read-only
8445 number register @samp{.fp}.  This is useful when mounting a new font,
8446 like so:
8448 @Example
8449 .fp \n[.fp] NEATOFONT
8450 @endExample
8452 @pindex DESC@r{, and font mounting}
8453 Fonts not listed in the @file{DESC} file are automatically mounted on
8454 the next available font position when they are referenced.  If a font
8455 is to be mounted explicitly with the @code{fp} request on an unused
8456 font position, it should be mounted on the first unused font position,
8457 which can be found in the @code{.fp} register.  Although @code{gtroff}
8458 does not enforce this strictly, it is not allowed to mount a font at a
8459 position whose number is much greater (approx.@: 1000 positions) than
8460 that of any currently used position.
8462 The @code{fp} request has an optional third argument.  This argument
8463 gives the external name of the font, which is used for finding the font
8464 description file.  The second argument gives the internal name of the
8465 font which is used to refer to the font in @code{gtroff} after it has
8466 been mounted.  If there is no third argument then the internal name is
8467 used as the external name.  This feature makes it possible to use
8468 fonts with long names in compatibility mode.
8469 @endDefreq
8471 Both the @code{ft} request and the @code{\f} escape have alternative
8472 syntax forms to access font positions.
8474 @DefreqList {ft, nnn}
8475 @DefescItem {\\f, , n, }
8476 @DefescItem {\\f, @lparen{}, nn, }
8477 @DefescListEnd {\\f, @lbrack{}, nnn, @rbrack}
8478 @cindex changing font position (@code{\f})
8479 @cindex font position, changing (@code{\f})
8480 @cindex @code{sty} request, and font positions
8481 @cindex @code{fam} request, and font positions
8482 @cindex @code{\F}, and font positions
8483 @kindex styles
8484 @kindex family
8485 @pindex DESC
8486 Change the current font position to @var{nnn} (one-digit
8487 position@tie{}@var{n}, two-digit position @var{nn}), which must be a
8488 non-negative integer.
8490 If @var{nnn} is associated with a style (as set with the @code{sty}
8491 request or with the @code{styles} command in the @file{DESC} file), use
8492 it within the current font family (as set with the @code{fam} request,
8493 the @code{\F} escape, or with the @code{family} command in the @file{DESC}
8494 file).
8496 @Example
8497 this is font 1
8498 .ft 2
8499 this is font 2
8500 .ft                   \" switch back to font 1
8501 .ft 3
8502 this is font 3
8504 this is font 1 again
8505 @endExample
8507 @xref{Changing Fonts}, for the standard syntax form.
8508 @endDefreq
8510 @c ---------------------------------------------------------------------
8512 @node Using Symbols, Special Fonts, Font Positions, Fonts and Symbols
8513 @subsection Using Symbols
8514 @cindex using symbols
8515 @cindex symbols, using
8517 @cindex glyph
8518 @cindex character
8519 @cindex ligature
8520 A @dfn{glyph} is a graphical representation of a @dfn{character}.
8521 While a character is an abstract entity containing semantic
8522 information, a glyph is something which can be actually seen on screen
8523 or paper.  It is possible that a character has multiple glyph
8524 representation forms (for example, the character `A' can be either
8525 written in a roman or an italic font, yielding two different glyphs);
8526 sometimes more than one character maps to a single glyph (this is a
8527 @dfn{ligature} -- the most common is `fi').
8529 @cindex symbol
8530 @cindex special fonts
8531 @kindex fonts
8532 @pindex DESC
8533 @cindex @code{special} request, and glyph search order
8534 @cindex @code{fspecial} request, and glyph search order
8535 A @dfn{symbol} is simply a named glyph.  Within @code{gtroff}, all
8536 glyph names of a particular font are defined in its font file.  If the
8537 user requests a glyph not available in this font, @code{gtroff} looks
8538 up an ordered list of @dfn{special fonts}.  By default, the
8539 @sc{PostScript} output device supports the two special fonts @samp{SS}
8540 (slanted symbols) and @samp{S} (symbols) (the former is looked up
8541 before the latter).  Other output devices use different names for
8542 special fonts.  Fonts mounted with the @code{fonts} keyword in the
8543 @file{DESC} file are globally available.  To install additional
8544 special fonts locally (i.e.@: for a particular font), use the
8545 @code{fspecial} request.
8547 Here the exact rules how @code{gtroff} searches a given symbol:
8549 @itemize @bullet
8550 @item
8551 If the symbol has been defined with the @code{char} request, use it.
8552 This hides a symbol with the same name in the current font.
8554 @item
8555 Check the current font.
8557 @item
8558 If the symbol has been defined with the @code{fchar} request, use it.
8560 @item
8561 Check whether the current font has a font-specific list of special fonts;
8562 test all fonts in the order of appearance in the last @code{fspecial}
8563 call if appropriate.
8565 @item
8566 If the symbol has been defined with the @code{fschar} request for the
8567 current font, use it.
8569 @item
8570 Check all fonts in the order of appearance in the last @code{special}
8571 call.
8573 @item
8574 If the symbol has been defined with the @code{schar} request, use it.
8576 @item
8577 As a last resort, consult all fonts loaded up to now for special fonts
8578 and check them, starting with the lowest font number.  Note that this can
8579 sometimes lead to surprising results since the @code{fonts} line in the
8580 @file{DESC} file often contains empty positions which are filled later
8581 on.  For example, consider the following:
8583 @Example
8584 fonts 3 0 0 FOO
8585 @endExample
8587 @noindent
8588 This mounts font @code{foo} at font position@tie{}3.  We assume that
8589 @code{FOO} is a special font, containing glyph @code{foo},
8590 and that no font has been loaded yet.  The line
8592 @Example
8593 .fspecial BAR BAZ
8594 @endExample
8596 @noindent
8597 makes font @code{BAZ} special only if font @code{BAR} is active.  We
8598 further assume that @code{BAZ} is really a special font, i.e., the font
8599 description file contains the @code{special} keyword, and that it
8600 also contains glyph @code{foo} with a special shape fitting to font
8601 @code{BAR}.  After executing @code{fspecial}, font @code{BAR} is loaded at
8602 font position@tie{}1, and @code{BAZ} at position@tie{}2.
8604 We now switch to a new font @code{XXX}, trying to access glyph @code{foo}
8605 which is assumed to be missing.  There are neither font-specific special
8606 fonts for @code{XXX} nor any other fonts made special with the
8607 @code{special} request, so @code{gtroff} starts the search for special
8608 fonts in the list of already mounted fonts, with increasing font
8609 positions.  Consequently, it finds @code{BAZ} before @code{FOO} even for
8610 @code{XXX} which is not the intended behaviour.
8611 @end itemize
8613 @xref{Font Files}, and @ref{Special Fonts}, for more details.
8615 @cindex list of available glyphs (@cite{groff_char(7)} man page)
8616 @cindex available glyphs, list (@cite{groff_char(7)} man page)
8617 @cindex glyphs, available, list (@cite{groff_char(7)} man page)
8618 The list of available symbols is device dependent; see the
8619 @cite{groff_char(7)} man page for a complete list of all glyphs.  For
8620 example, say
8622 @Example
8623 man -Tdvi groff_char > groff_char.dvi
8624 @endExample
8626 @noindent
8627 for a list using the default DVI fonts (not all versions of the
8628 @code{man} program support the @option{-T} option).  If you want to
8629 use an additional macro package to change the used fonts, @code{groff}
8630 must be called directly:
8632 @Example
8633 groff -Tdvi -mec -man groff_char.7 > groff_char.dvi
8634 @endExample
8636 @cindex composite glyph names
8637 @cindex glyph names, composite
8638 @cindex groff glyph list (GGL)
8639 @cindex GGL (groff glyph list)
8640 @cindex adobe glyph list (AGL)
8641 @cindex AGL (adobe glyph list)
8642 Glyph names not listed in groff_char(7) are derived algorithmically,
8643 using a simplified version of the Adobe Glyph List (AGL) algorithm
8644 described in
8645 @uref{http://partners.adobe.com/asn/developer/typeforum/unicodegn.html}.
8646 The (frozen) set of glyph names which can't be derived algorithmically
8647 is called @dfn{groff glyph list (GGL)}.
8649 @itemize @bullet
8650 @item
8651 A glyph for Unicode character U+@var{XXXX}[@var{X}[@var{X}]] which is
8652 not a composite character will be named
8653 @code{u@var{XXXX}@r{[}@var{X}@r{[}@var{X}@r{]]}}.  @var{X} must be an
8654 uppercase hexadecimal digit.  Examples: @code{u1234}, @code{u008E},
8655 @code{u12DB8}.  The largest Unicode value is 0x10FFFF.  There must be at
8656 least four @code{X} digits; if necessary, add leading zeroes (after the
8657 @samp{u}).  No zero padding is allowed for character codes greater than
8658 0xFFFF.  Surrogates (i.e., Unicode values greater than 0xFFFF
8659 represented with character codes from the surrogate area U+D800-U+DFFF)
8660 are not allowed too.
8662 @item
8663 A glyph representing more than a single input character will be named
8665 @display
8666 @samp{u} @var{component1} @samp{_} @var{component2} @samp{_} @var{component3} @dots{}
8667 @end display
8669 @noindent
8670 Example: @code{u0045_0302_0301}.
8672 For simplicity, all Unicode characters which are composites must be
8673 decomposed maximally (this is normalization form@tie{}D in the Unicode
8674 standard); for example, @code{u00CA_0301} is not a valid glyph name
8675 since U+00CA (@sc{latin capital letter e with circumflex}) can be
8676 further decomposed into U+0045 (@sc{latin capital letter e}) and U+0302
8677 (@sc{combining circumflex accent}).  @code{u0045_0302_0301} is thus the
8678 glyph name for U+1EBE, @sc{latin capital letter e with circumflex and
8679 acute}.
8681 @item
8682 groff maintains a table to decompose all algorithmically derived glyph
8683 names which are composites itself.  For example, @code{u0100} (@sc{latin
8684 letter a with macron}) will be automatically decomposed into
8685 @code{u0041_0304}.  Additionally, a glyph name of the GGL is preferred
8686 to an algorithmically derived glyph name; groff also automatically does
8687 the mapping.  Example: The glyph @code{u0045_0302} will be mapped to
8688 @code{^E}.
8690 @item
8691 glyph names of the GGL can't be used in composite glyph names; for
8692 example, @code{^E_u0301} is invalid.
8693 @end itemize
8695 @DefescList {\\, @lparen{}, nm, }
8696 @DefescItem {\\, @lbrack{}, name, @rbrack}
8697 @DefescListEnd {\\, @lbrack{}, component1 component2 @dots{}, @rbrack}
8698 Insert a symbol @var{name} (two-character name @var{nm}) or a composite
8699 glyph with component glyphs @var{component1}, @var{component2},
8700 @enddots{} There is no special syntax for one-character names -- the
8701 natural form @samp{\@var{n}} would collide with escapes.@footnote{Note
8702 that a one-character symbol is not the same as an input character, i.e.,
8703 the character @code{a} is not the same as @code{\[a]}.  By default,
8704 @code{groff} defines only a single one-character symbol, @code{\[-]}; it
8705 is usually accessed as @code{\-}.  On the other hand, @code{gtroff} has
8706 the special feature that @code{\[char@var{XXX}]} is the same as the
8707 input character with character code @var{XXX}.  For example,
8708 @code{\[char97]} is identical to the letter @code{a} if @acronym{ASCII}
8709 encoding is active.}
8711 If @var{name} is undefined, a warning of type @samp{char} is generated,
8712 and the escape is ignored.  @xref{Debugging}, for information about
8713 warnings.
8715 groff resolves @code{\[...]} with more than a single component as
8716 follows:
8718 @itemize @bullet
8719 @item
8720 Any component which is found in the GGL will be converted to the
8721 @code{u@var{XXXX}} form.
8723 @item
8724 Any component @code{u@var{XXXX}} which is found in the list of
8725 decomposable glyphs will be decomposed.
8727 @item
8728 The resulting elements are then concatenated with @samp{_} inbetween,
8729 dropping the leading @samp{u} in all elements but the first.
8730 @end itemize
8732 No check for the existence of any component (similar to @code{tr}
8733 request) will be done.
8735 Examples:
8737 @table @code
8738 @item \[A ho]
8739 @samp{A} maps to @code{u0041}, @samp{ho} maps to @code{u02DB}, thus the
8740 final glyph name would be @code{u0041_02DB}.  Note this is not the
8741 expected result: The ogonek glyph @samp{ho} is a spacing ogonek, but for
8742 a proper composite a non-spacing ogonek (U+0328) is necessary.  Looking
8743 into the file @file{composite.tmac} one can find @w{@samp{.composite ho
8744 u0328}} which changes the mapping of @samp{ho} while a composite glyph
8745 name is constructed, causing the final glyph name to be
8746 @code{u0041_0328}.
8748 @item \[^E u0301]
8749 @itemx \[^E aa]
8750 @itemx \[E a^ aa]
8751 @itemx \[E ^ ']
8752 @samp{^E} maps to @code{u0045_0302}, thus the final glyph name is
8753 @code{u0045_0302_0301} in all forms (assuming proper calls of the
8754 @code{composite} request).
8755 @end table
8757 It is not possible to define glyphs with names like @w{@samp{A ho}}
8758 within a groff font file.  This is not really a limitation; instead, you
8759 have to define @code{u0041_0328}.
8760 @endDefesc
8762 @Defesc {\\C, ', xxx, '}
8763 @cindex named character (@code{\C})
8764 @cindex character, named (@code{\C})
8765 Typeset the glyph named @var{xxx}.@footnote{@code{\C} is actually a
8766 misnomer since it accesses an output glyph.}  Normally it is more
8767 convenient to use @code{\[@var{xxx}]}, but @code{\C} has the advantage
8768 that it is compatible with newer versions of @acronym{AT&T}
8769 @code{troff} and is available in compatibility mode.
8770 @endDefesc
8772 @Defreq {composite, from to}
8773 @pindex composite.tmac
8774 Map glyph name @var{from} to glyph name @var{to} if it is used in
8775 @code{\[...]} with more than one component.  See above for examples.
8777 This mapping is based on glyph names only; no check for the existence of
8778 either glyph is done.
8780 A set of default mappings for many accents can be found in the file
8781 @file{composite.tmac} which is loaded at start-up.
8782 @endDefreq
8784 @Defesc {\\N, ', n, '}
8785 @cindex numbered glyph (@code{\N})
8786 @cindex glyph, numbered (@code{\N})
8787 @cindex @code{char} request, used with @code{\N}
8788 @cindex Unicode
8789 Typeset the glyph with code@tie{}@var{n} in the current font
8790 (@code{n}@tie{}is @strong{not} the input character code).  The
8791 number @var{n}@tie{}can be any non-negative decimal integer.  Most devices
8792 only have glyphs with codes between 0 and@tie{}255; the Unicode
8793 output device uses codes in the range 0--65535.  If the current
8794 font does not contain a glyph with that code, special fonts are
8795 @emph{not} searched.  The @code{\N} escape sequence can be
8796 conveniently used in conjunction with the @code{char} request:
8798 @Example
8799 .char \[phone] \f[ZD]\N'37'
8800 @endExample
8802 @noindent
8803 @pindex DESC
8804 @cindex unnamed glyphs
8805 @cindex glyphs, unnamed
8806 The code of each glyph is given in the fourth column in the font
8807 description file after the @code{charset} command.  It is possible to
8808 include unnamed glyphs in the font description file by using a
8809 name of @samp{---}; the @code{\N} escape sequence is the only way to
8810 use these.
8812 No kerning is applied to glyphs accessed with @code{\N}.
8813 @endDefesc
8815 Some escape sequences directly map onto special glyphs.
8817 @Defesc {\\', , , }
8818 This is a backslash followed by the apostrophe character, @acronym{ASCII}
8819 character @code{0x27} (@acronym{EBCDIC} character @code{0x7D}).  The same
8820 as @code{\[aa]}, the acute accent.
8821 @endDefesc
8823 @Defesc {\\`, , , }
8824 This is a backslash followed by @acronym{ASCII} character @code{0x60}
8825 (@acronym{EBCDIC} character @code{0x79} usually).  The same as
8826 @code{\[ga]}, the grave accent.
8827 @endDefesc
8829 @Defesc {\\-, , , }
8830 This is the same as @code{\[-]}, the minus sign in the current font.
8831 @endDefesc
8833 @Defreq {cflags, n c1 c2 @dots{}}
8834 @cindex glyph properties (@code{cflags})
8835 @cindex character properties (@code{cflags})
8836 @cindex properties of glyphs (@code{cflags})
8837 @cindex properties of characters (@code{cflags})
8838 Input characters and symbols have certain properties associated
8839 with it.@footnote{Note that the output glyphs themselves don't have
8840 such properties.  For @code{gtroff}, a glyph is a numbered box with
8841 a given width, depth, and height, nothing else.  All manipulations
8842 with the @code{cflags} request work on the input level.}  These
8843 properties can be modified with the @code{cflags} request.  The
8844 first argument is the sum of the desired flags and the remaining
8845 arguments are the characters or symbols to have those properties.
8846 It is possible to omit the spaces between the characters or symbols.
8848 @table @code
8849 @item 1
8850 @cindex end-of-sentence characters
8851 @cindex characters, end-of-sentence
8852 The character ends sentences (initially characters @samp{.?!} have this
8853 property).
8855 @item 2
8856 @cindex hyphenating characters
8857 @cindex characters, hyphenation
8858 Lines can be broken before the character (initially no characters have
8859 this property).
8861 @item 4
8862 @cindex @code{hy} glyph, and @code{cflags}
8863 @cindex @code{em} glyph, and @code{cflags}
8864 Lines can be broken after the character (initially the character
8865 @samp{-} and the symbols @samp{\[hy]} and @samp{\[em]} have this property).
8867 @item 8
8868 @cindex overlapping characters
8869 @cindex characters, overlapping
8870 @cindex @code{ul} glyph, and @code{cflags}
8871 @cindex @code{rn} glyph, and @code{cflags}
8872 @cindex @code{ru} glyph, and @code{cflags}
8873 @cindex @code{radicalex} glyph, and @code{cflags}
8874 @cindex @code{sqrtex} glyph, and @code{cflags}
8875 The character overlaps horizontally (initially the symbols
8876 @samp{\[ul]}, @samp{\[rn]}, @samp{\[ru]}, @samp{\[radicalex}, and
8877 @samp{\[sqrtex]} have this property).
8879 @item 16
8880 @cindex @code{br} glyph, and @code{cflags}
8881 The character overlaps vertically (initially symbol @samp{\[br]} has
8882 this property).
8884 @item 32
8885 @cindex transparent characters
8886 @cindex character, transparent
8887 @cindex @code{"}, at end of sentence
8888 @cindex @code{'}, at end of sentence
8889 @cindex @code{)}, at end of sentence
8890 @cindex @code{]}, at end of sentence
8891 @cindex @code{*}, at end of sentence
8892 @cindex @code{dg} glyph, at end of sentence
8893 @cindex @code{rq} glyph, at end of sentence
8894 An end-of-sentence character followed by any number of characters with
8895 this property is treated as the end of a sentence if followed by a
8896 newline or two spaces; in other words the character is
8897 @dfn{transparent} for the purposes of end-of-sentence recognition --
8898 this is the same as having a zero space factor in @TeX{} (initially
8899 characters @samp{"')]*} and the symbols @samp{\[dg]} and @samp{\[rq]} have
8900 this property).
8901 @end table
8902 @endDefreq
8904 @DefreqList {char, g [@Var{string}]}
8905 @DefreqItem {fchar, g [@Var{string}]}
8906 @DefreqItem {fschar, f g [@Var{string}]}
8907 @DefreqListEnd {schar, g [@Var{string}]}
8908 @cindex defining character (@code{char})
8909 @cindex defining fallback character (@code{fchar}, @code{fschar}, @code{schar})
8910 @cindex character, defining (@code{char})
8911 @cindex character, defining fallback (@code{fchar}, @code{fschar}, @code{schar})
8912 @cindex fallback character, defining (@code{fchar}, @code{fschar}, @code{schar})
8913 @cindex creating new characters (@code{char})
8914 @cindex defining symbol (@code{char})
8915 @cindex symbol, defining (@code{char})
8916 @cindex defining glyph (@code{char})
8917 @cindex glyph, defining (@code{char})
8918 @cindex escape character, while defining glyph
8919 @cindex character, escape, while defining glyph
8920 @cindex @code{tr} request, and glyph definitions
8921 @cindex @code{cp} request, and glyph definitions
8922 @cindex @code{rc} request, and glyph definitions
8923 @cindex @code{lc} request, and glyph definitions
8924 @cindex @code{\l}, and glyph definitions
8925 @cindex @code{\L}, and glyph definitions
8926 @cindex @code{\&}, and glyph definitions
8927 @cindex @code{\e}, and glyph definitions
8928 @cindex @code{hcode} request, and glyph definitions
8929 Define a new glyph@tie{}@var{g} to be @var{string} (which can be
8930 empty).@footnote{@code{char} is a misnomer since an output glyph is
8931 defined.}  Every time glyph@tie{}@var{g} needs to be printed,
8932 @var{string} is processed in a temporary environment and the result is
8933 wrapped up into a single object.  Compatibility mode is turned off and
8934 the escape character is set to @samp{\} while @var{string} is being
8935 processed.  Any emboldening, constant spacing or track kerning is
8936 applied to this object rather than to individual characters in
8937 @var{string}.
8939 A glyph defined by these requests can be used just
8940 like a normal glyph provided by the output device.  In particular,
8941 other characters can be translated to it with the @code{tr} or
8942 @code{trin} requests; it can be made the leader character by the
8943 @code{lc} request; repeated patterns can be drawn with the glyph
8944 using the @code{\l} and @code{\L} escape sequences; words containing
8945 the glyph can be hyphenated correctly if the @code{hcode} request
8946 is used to give the glyph's symbol a hyphenation code.
8948 There is a special anti-recursion feature: Use of @code{g} within
8949 the glyph's definition is handled like normal characters and symbols
8950 not defined with @code{char}.
8952 Note that the @code{tr} and @code{trin} requests take precedence if
8953 @code{char} accesses the same symbol.
8955 @Example
8956 .tr XY
8958     @result{} Y
8959 .char X Z
8961     @result{} Y
8962 .tr XX
8964     @result{} Z
8965 @endExample
8967 The @code{fchar} request defines a fallback glyph:
8968 @code{gtroff} only checks for glyphs defined with @code{fchar}
8969 if it cannot find the glyph in the current font.
8970 @code{gtroff} carries out this test before checking special fonts.
8972 @code{fschar} defines a fallback glyph for font@tie{}@var{f}: @code{gtroff}
8973 checks for glyphs defined with @code{fschar} after the list of fonts
8974 declared as font-specific special fonts with the @code{fspecial} request,
8975 but before the list of fonts declared as global special fonts with the
8976 @code{special} request.
8978 Finally, the @code{schar} request defines a global fallback glyph:
8979 @code{gtroff} checks for glyphs defined with @code{schar} after the list
8980 of fonts declared as global special fonts with the @code{special} request,
8981 but before the already mounted special fonts.
8983 @xref{Using Symbols}, for a detailed description of the glyph
8984 searching mechanism in @code{gtroff}.
8985 @endDefreq
8987 @DefreqList {rchar, c1 c2 @dots{}}
8988 @DefreqListEnd {rfschar, f c1 c2 @dots{}}
8989 @cindex removing glyph definition (@code{rchar}, @code{rfschar})
8990 @cindex glyph, removing definition (@code{rchar}, @code{rfschar})
8991 @cindex fallback glyph, removing definition (@code{rchar}, @code{rfschar})
8992 Remove the definitions of glyphs @var{c1}, @var{c2},@tie{}@enddots{}
8993 This undoes the effect of a @code{char}, @code{fchar}, or
8994 @code{schar} request.
8996 It is possible to omit the whitespace between arguments.
8998 The request @code{rfschar} removes glyph definitions defined with
8999 @code{fschar} for glyph@tie{}f.
9000 @endDefreq
9002 @xref{Special Characters}.
9004 @c ---------------------------------------------------------------------
9006 @node Special Fonts, Artificial Fonts, Using Symbols, Fonts and Symbols
9007 @subsection Special Fonts
9008 @cindex special fonts
9009 @cindex fonts, special
9011 Special fonts are those that @code{gtroff} searches
9012 when it cannot find the requested glyph in the current font.
9013 The Symbol font is usually a special font.
9015 @code{gtroff} provides the following two requests to add more special
9016 fonts.  @xref{Using Symbols}, for a detailed description of the glyph
9017 searching mechanism in @code{gtroff}.
9019 Usually, only non-TTY devices have special fonts.
9021 @DefreqList {special, [@Var{s1} @Var{s2} @dots{}]}
9022 @DefreqListEnd {fspecial, f [@Var{s1} @Var{s2} @dots{}]}
9023 @kindex fonts
9024 @pindex DESC
9025 Use the @code{special} request to define special fonts.  Initially, this
9026 list is empty.
9028 Use the @code{fspecial} request to designate special fonts only when
9029 font@tie{}@var{f} is active.  Initially, this list is empty.
9031 Previous calls to @code{special} or @code{fspecial} are overwritten;
9032 without arguments, the particular list of special fonts is set to empty.
9033 Special fonts are searched in the order they appear as arguments.
9035 All fonts which appear in a call to @code{special} or @code{fspecial} are
9036 loaded.
9038 @xref{Using Symbols}, for the exact search order of glyphs.
9039 @endDefreq
9041 @c ---------------------------------------------------------------------
9043 @node Artificial Fonts, Ligatures and Kerning, Special Fonts, Fonts and Symbols
9044 @subsection Artificial Fonts
9045 @cindex artificial fonts
9046 @cindex fonts, artificial
9048 There are a number of requests and escapes for artificially creating
9049 fonts.  These are largely vestiges of the days when output devices
9050 did not have a wide variety of fonts, and when @code{nroff} and
9051 @code{troff} were separate programs.  Most of them are no longer
9052 necessary in GNU @code{troff}.  Nevertheless, they are supported.
9054 @DefescList {\\H, ', height, '}
9055 @DefescItem {\\H, ', @t{+}height, '}
9056 @DefescItem {\\H, ', @t{-}height, '}
9057 @DefregListEnd {.height}
9058 @cindex changing the font height (@code{\H})
9059 @cindex font height, changing (@code{\H})
9060 @cindex height, font, changing (@code{\H})
9061 Change (increment, decrement) the height of the current font, but not
9062 the width.  If @var{height} is zero, restore the original height.
9063 Default scaling indicator is @samp{z}.
9065 The read-only number register @code{.height} contains the font height as
9066 set by @code{\H}.
9068 Currently, only the @option{-Tps} device supports this feature.
9070 Note that @code{\H} doesn't produce an input token in @code{gtroff}.
9071 As a consequence, it can be used in requests like @code{mc} (which
9072 expects a single character as an argument) to change the font on
9073 the fly:
9075 @Example
9076 .mc \H'+5z'x\H'0'
9077 @endExample
9079 In compatibility mode, @code{gtroff} behaves differently:  If an
9080 increment or decrement is used, it is always taken relative to the
9081 current point size and not relative to the previously selected font
9082 height.  Thus,
9084 @Example
9085 .cp 1
9086 \H'+5'test \H'+5'test
9087 @endExample
9089 @noindent
9090 prints the word @samp{test} twice with the same font height (five
9091 points larger than the current font size).
9092 @endDefesc
9094 @DefescList {\\S, ', slant, '}
9095 @DefregListEnd {.slant}
9096 @cindex changing the font slant (@code{\S})
9097 @cindex font slant, changing (@code{\S})
9098 @cindex slant, font, changing (@code{\S})
9099 Slant the current font by @var{slant} degrees.  Positive values slant
9100 to the right.  Only integer values are possible.
9102 The read-only number register @code{.slant} contains the font slant as
9103 set by @code{\S}.
9105 Currently, only the @option{-Tps} device supports this feature.
9107 Note that @code{\S} doesn't produce an input token in @code{gtroff}.
9108 As a consequence, it can be used in requests like @code{mc} (which
9109 expects a single character as an argument) to change the font on
9110 the fly:
9112 @Example
9113 .mc \S'20'x\S'0'
9114 @endExample
9116 This request is incorrectly documented in the original @acronym{UNIX}
9117 troff manual; the slant is always set to an absolute value.
9118 @endDefesc
9120 @Defreq {ul, [@Var{lines}]}
9121 @cindex underlining (@code{ul})
9122 The @code{ul} request normally underlines subsequent lines if a TTY
9123 output device is used.  Otherwise, the lines are printed in italics
9124 (only the term `underlined' is used in the following).  The single
9125 argument is the number of input lines to be underlined; with no
9126 argument, the next line is underlined.  If @var{lines} is zero or
9127 negative, stop the effects of @code{ul} (if it was active).  Requests
9128 and empty lines do not count for computing the number of underlined
9129 input lines, even if they produce some output like @code{tl}.  Lines
9130 inserted by macros (e.g.@: invoked by a trap) do count.
9132 At the beginning of @code{ul}, the current font is stored and the
9133 underline font is activated.  Within the span of a @code{ul} request,
9134 it is possible to change fonts, but after the last line affected by
9135 @code{ul} the saved font is restored.
9137 This number of lines still to be underlined is associated with the
9138 current environment (@pxref{Environments}).  The underline font can be
9139 changed with the @code{uf} request.
9141 @c XXX @xref should be changed to grotty
9143 @c @xref{Troff and Nroff Mode}, for a discussion how underlining is
9144 @c implemented in for TTY output devices, and which problems can arise.
9146 The @code{ul} request does not underline spaces.
9147 @endDefreq
9149 @Defreq {cu, [@Var{lines}]}
9150 @cindex continuous underlining (@code{cu})
9151 @cindex underlining, continuous (@code{cu})
9152 The @code{cu} request is similar to @code{ul} but underlines spaces as
9153 well (if a TTY output device is used).
9154 @endDefreq
9156 @Defreq {uf, font}
9157 @cindex underline font (@code{uf})
9158 @cindex font for underlining (@code{uf})
9159 Set the underline font (globally) used by @code{ul} and @code{cu}.  By
9160 default, this is the font at position@tie{}2.  @var{font} can be either
9161 a non-negative font position or the name of a font.
9162 @endDefreq
9164 @DefreqList {bd, font [@Var{offset}]}
9165 @DefreqItem {bd, font1 font2 [@Var{offset}]}
9166 @DefregListEnd {.b}
9167 @cindex imitating bold face (@code{bd})
9168 @cindex bold face, imitating (@code{bd})
9169 Artificially create a bold font by printing each glyph twice,
9170 slightly offset.
9172 Two syntax forms are available.
9174 @itemize @bullet
9175 @item
9176 Imitate a bold font unconditionally.  The first argument specifies the
9177 font to embolden, and the second is the number of basic units, minus
9178 one, by which the two glyphs are offset.  If the second argument is
9179 missing, emboldening is turned off.
9181 @var{font} can be either a non-negative font position or the name of a
9182 font.
9184 @var{offset} is available in the @code{.b} read-only register if a
9185 special font is active; in the @code{bd} request, its default unit is
9186 @samp{u}.
9188 @cindex @code{fspecial} request, and imitating bold
9189 @kindex special
9190 @cindex embolding of special fonts
9191 @cindex special fonts, emboldening
9192 @item
9193 Imitate a bold form conditionally.  Embolden @var{font1} by
9194 @var{offset} only if font @var{font2} is the current font.  This
9195 command can be issued repeatedly to set up different emboldening
9196 values for different current fonts.  If the second argument is
9197 missing, emboldening is turned off for this particular current font.
9199 This affects special fonts only (either set up with the @code{special}
9200 command in font files or with the @code{fspecial} request).
9201 @end itemize
9202 @endDefreq
9204 @Defreq {cs, font [@Var{width} [@Var{em-size}]]}
9205 @cindex constant glyph space mode (@code{cs})
9206 @cindex mode for constant glyph space (@code{cs})
9207 @cindex glyph, constant space
9208 @cindex @code{ps} request, and constant glyph space mode
9209 Switch to and from @dfn{constant glyph space mode}.  If activated, the
9210 width of every glyph is @math{@var{width}/36} ems.  The em size is
9211 given absolutely by @var{em-size}; if this argument is missing, the em
9212 value is taken from the current font size (as set with the @code{ps}
9213 request) when the font is effectively in use.  Without second and
9214 third argument, constant glyph space mode is deactivated.
9216 Default scaling indicator for @var{em-size} is @samp{z}; @var{width} is
9217 an integer.
9218 @endDefreq
9220 @c ---------------------------------------------------------------------
9222 @node Ligatures and Kerning,  , Artificial Fonts, Fonts and Symbols
9223 @subsection Ligatures and Kerning
9224 @cindex ligatures and kerning
9225 @cindex kerning and ligatures
9227 Ligatures are groups of characters that are run together, i.e, producing
9228 a single glyph.  For example, the letters `f' and `i' can form a
9229 ligature `fi' as in the word `file'.  This produces a cleaner look
9230 (albeit subtle) to the printed output.  Usually, ligatures are not
9231 available in fonts for TTY output devices.
9233 Most @sc{PostScript} fonts support the fi and fl ligatures.  The C/A/T
9234 typesetter that was the target of @acronym{AT&T} @code{troff} also
9235 supported `ff', `ffi', and `ffl' ligatures.  Advanced typesetters or
9236 `expert' fonts may include ligatures for `ft' and `ct', although GNU
9237 @code{troff} does not support these (yet).
9239 Only the current font is checked for ligatures and kerns; neither special
9240 fonts nor entities defined with the @code{char} request (and its siblings)
9241 are taken into account.
9243 @DefreqList {lg, [@Var{flag}]}
9244 @DefregListEnd {.lg}
9245 @cindex activating ligatures (@code{lg})
9246 @cindex ligatures, activating (@code{lg})
9247 @cindex ligatures enabled register (@code{.lg})
9248 Switch the ligature mechanism on or off; if the parameter is non-zero
9249 or missing, ligatures are enabled, otherwise disabled.  Default is on.
9250 The current ligature mode can be found in the read-only number register
9251 @code{.lg} (set to 1 or@tie{}2 if ligatures are enabled, 0@tie{}otherwise).
9253 Setting the ligature mode to@tie{}2 enables the two-character ligatures
9254 (fi, fl, and ff) and disables the three-character ligatures (ffi and
9255 ffl).
9256 @endDefreq
9258 @dfn{Pairwise kerning} is another subtle typesetting mechanism that
9259 modifies the distance between a glyph pair to improve readability.
9260 In most cases (but not always) the distance is decreased.
9261 @ifnotinfo
9262 For example, compare the combination of the letters `V' and `A'.  With
9263 kerning, `VA' is printed.  Without kerning it appears as `V@w{}A'.
9264 @end ifnotinfo
9265 Typewriter-like fonts and fonts for terminals where all glyphs
9266 have the same width don't use kerning.
9268 @DefreqList {kern, [@Var{flag}]}
9269 @DefregListEnd {.kern}
9270 @cindex activating kerning (@code{kern})
9271 @cindex kerning, activating (@code{kern})
9272 @cindex kerning enabled register (@code{.kern})
9273 Switch kerning on or off.  If the parameter is non-zero or missing,
9274 enable pairwise kerning, otherwise disable it.  The read-only number
9275 register @code{.kern} is set to@tie{}1 if pairwise kerning is enabled,
9276 0@tie{}otherwise.
9278 @cindex zero width space character (@code{\&})
9279 @cindex character, zero width space (@code{\&})
9280 @cindex space character, zero width (@code{\&})
9281 If the font description file contains pairwise kerning information,
9282 glyphs from that font are kerned.  Kerning between two glyphs
9283 can be inhibited by placing @code{\&} between them: @samp{V\&A}.
9285 @xref{Font File Format}.
9286 @endDefreq
9288 @cindex track kerning
9289 @cindex kerning, track
9290 @dfn{Track kerning} expands or reduces the space between glyphs.
9291 This can be handy, for example, if you need to squeeze a long word
9292 onto a single line or spread some text to fill a narrow column.  It
9293 must be used with great care since it is usually considered bad
9294 typography if the reader notices the effect.
9296 @Defreq {tkf, f s1 n1 s2 n2}
9297 @cindex activating track kerning (@code{tkf})
9298 @cindex track kerning, activating (@code{tkf})
9299 Enable track kerning for font@tie{}@var{f}.  If the current font
9300 is@tie{}@var{f} the width of every glyph is increased by an amount
9301 between @var{n1} and @var{n2} (@var{n1}, @var{n2} can be negative); if
9302 the current point size is less than or equal to @var{s1} the width is
9303 increased by @var{n1}; if it is greater than or equal to @var{s2} the
9304 width is increased by @var{n2}; if the point size is greater than or
9305 equal to @var{s1} and less than or equal to @var{s2} the increase in
9306 width is a linear function of the point size.
9308 The default scaling indicator is @samp{z} for @var{s1} and @var{s2},
9309 @samp{p} for @var{n1} and @var{n2}.
9311 Note that the track kerning amount is added even to the rightmost glyph
9312 in a line; for large values it is thus recommended to increase the line
9313 length by the same amount to compensate it.
9314 @endDefreq
9316 Sometimes, when typesetting letters of different fonts, more or less
9317 space at such boundaries are needed.  There are two escapes to help
9318 with this.
9320 @Defesc {\\/, , , }
9321 @cindex italic correction (@code{\/})
9322 @cindex correction, italic (@code{\/})
9323 @cindex correction between italic and roman glyph (@code{\/}, @code{\,})
9324 @cindex roman glyph, correction after italic glyph (@code{\/})
9325 @cindex italic glyph, correction before roman glyph (@code{\/})
9326 @cindex glyph, italic correction (@code{\/})
9327 Increase the width of the preceding glyph so that the spacing
9328 between that glyph and the following glyph is correct if the
9329 following glyph is a roman glyph.  For example, if an
9330 italic@tie{}@code{f} is immediately followed by a roman right
9331 parenthesis, then in many fonts the top right portion of the@tie{}@code{f}
9332 overlaps the top left of the right parenthesis.  Use this escape
9333 sequence whenever an italic glyph is immediately followed by a
9334 roman glyph without any intervening space.  This small amount of
9335 space is also called @dfn{italic correction}.
9337 @iftex
9338 @example
9339 @group
9340 \f[I]f\f[R])
9341     @result{} {@it f}@r{)}
9342 \f[I]f\/\f[R])
9343     @result{} @i{f}@r{)}
9344 @end group
9345 @end example
9346 @end iftex
9347 @endDefesc
9349 @Defesc {\\\,, , , }
9350 @cindex left italic correction (@code{\,})
9351 @cindex correction, left italic (@code{\,})
9352 @cindex glyph, left italic correction (@code{\,})
9353 @cindex roman glyph, correction before italic glyph (@code{\,})
9354 @cindex italic glyph, correction after roman glyph (@code{\,})
9355 Modify the spacing of the following glyph so that the spacing
9356 between that glyph and the preceding glyph is correct if the
9357 preceding glyph is a roman glyph.  Use this escape sequence
9358 whenever a roman glyph is immediately followed by an italic
9359 glyph without any intervening space.  In analogy to above, this
9360 space could be called @dfn{left italic correction}, but this term
9361 isn't used widely.
9363 @iftex
9364 @example
9365 @group
9366 q\f[I]f
9367     @result{} @r{q}@i{f}
9368 q\,\f[I]f
9369     @result{} @r{q}@math{@ptexcomma}@i{f}
9370 @end group
9371 @end example
9372 @end iftex
9373 @endDefesc
9375 @Defesc {\\&, , , }
9376 Insert a zero-width character, which is invisible.  Its intended use
9377 is to stop interaction of a character with its surrounding.
9379 @itemize @bullet
9380 @item
9381 It prevents the insertion of extra space after an end-of-sentence
9382 character.
9384 @Example
9385 Test.
9386 Test.
9387     @result{} Test.  Test.
9388 Test.\&
9389 Test.
9390     @result{} Test. Test.
9391 @endExample
9393 @item
9394 It prevents interpretation of a control character at the beginning of
9395 an input line.
9397 @Example
9398 .Test
9399     @result{} warning: `Test' not defined
9400 \&.Test
9401     @result{} .Test
9402 @endExample
9404 @item
9405 It prevents kerning between two glyphs.
9407 @ifnotinfo
9408 @example
9409 @group
9411     @result{} @r{VA}
9412 V\&A
9413     @result{} @r{V@w{}A}
9414 @end group
9415 @end example
9416 @end ifnotinfo
9418 @item
9419 It is needed to map an arbitrary character to nothing in the @code{tr}
9420 request (@pxref{Character Translations}).
9421 @end itemize
9422 @endDefesc
9424 @Defesc {\\), , , }
9425 This escape is similar to @code{\&} except that it behaves like a
9426 character declared with the @code{cflags} request to be transparent
9427 for the purposes of an end-of-sentence character.
9429 Its main usage is in macro definitions to protect against arguments
9430 starting with a control character.
9432 @Example
9433 .de xxx
9434 \)\\$1
9436 .de yyy
9437 \&\\$1
9439 This is a test.\c
9440 .xxx '
9441 This is a test.
9442     @result{}This is a test.'  This is a test.
9443 This is a test.\c
9444 .yyy '
9445 This is a test.
9446     @result{}This is a test.' This is a test.
9447 @endExample
9448 @endDefesc
9451 @c =====================================================================
9453 @node Sizes, Strings, Fonts and Symbols, gtroff Reference
9454 @section Sizes
9455 @cindex sizes
9457 @cindex baseline
9458 @cindex type size
9459 @cindex size of type
9460 @cindex vertical spacing
9461 @cindex spacing, vertical
9462 @code{gtroff} uses two dimensions with each line of text, type size
9463 and vertical spacing.  The @dfn{type size} is approximately the height
9464 of the tallest glyph.@footnote{This is usually the parenthesis.
9465 Note that in most cases the real dimensions of the glyphs in a font
9466 are @emph{not} related to its type size!  For example, the standard
9467 @sc{PostScript} font families `Times Roman', `Helvetica', and
9468 `Courier' can't be used together at 10@dmn{pt}; to get acceptable
9469 output, the size of `Helvetica' has to be reduced by one point, and
9470 the size of `Courier' must be increased by one point.}  @dfn{Vertical
9471 spacing} is the amount of space @code{gtroff} allows for a line of
9472 text; normally, this is about 20%@tie{}larger than the current type
9473 size.  Ratios smaller than this can result in hard-to-read text;
9474 larger than this, it spreads the text out more vertically (useful for
9475 term papers).  By default, @code{gtroff} uses 10@tie{}point type on
9476 12@tie{}point spacing.
9478 @cindex leading
9479 The difference between type size and vertical spacing is known, by
9480 typesetters, as @dfn{leading} (this is pronounced `ledding').
9482 @menu
9483 * Changing Type Sizes::
9484 * Fractional Type Sizes::
9485 @end menu
9487 @c ---------------------------------------------------------------------
9489 @node Changing Type Sizes, Fractional Type Sizes, Sizes, Sizes
9490 @subsection Changing Type Sizes
9492 @DefreqList {ps, [@Var{size}]}
9493 @DefreqItem {ps, @t{+}@Var{size}}
9494 @DefreqItem {ps, @t{-}@Var{size}}
9495 @DefescItem {\\s, , size, }
9496 @DefregListEnd {.s}
9497 @cindex changing type sizes (@code{ps}, @code{\s})
9498 @cindex type sizes, changing (@code{ps}, @code{\s})
9499 @cindex point sizes, changing (@code{ps}, @code{\s})
9500 Use the @code{ps} request or the @code{\s} escape to change (increase,
9501 decrease) the type size (in points).  Specify @var{size} as either an
9502 absolute point size, or as a relative change from the current size.
9503 The size@tie{}0, or no argument, goes back to the previous size.
9505 Default scaling indicator of @code{size} is @samp{z}.  If @code{size}
9506 is zero or negative, it is set to 1@dmn{u}.
9508 @cindex type size registers (@code{.s}, @code{.ps})
9509 @cindex point size registers (@code{.s}, @code{.ps})
9510 The read-only number register @code{.s} returns the point size in
9511 points as a decimal fraction.  This is a string.  To get the point
9512 size in scaled points, use the @code{.ps} register instead.
9514 @code{.s} is associated with the current environment
9515 (@pxref{Environments}).
9517 @Example
9518 snap, snap,
9519 .ps +2
9520 grin, grin,
9521 .ps +2
9522 wink, wink, \s+2nudge, nudge,\s+8 say no more!
9523 .ps 10
9524 @endExample
9526 The @code{\s} escape may be called in a variety of ways.  Much like
9527 other escapes there must be a way to determine where the argument ends
9528 and the text begins.  Any of the following forms are valid:
9530 @table @code
9531 @item \s@var{n}
9532 Set the point size to @var{n}@tie{}points.  @var{n}@tie{}must be either
9533 0 or in the range 4 to@tie{}39.
9535 @item \s+@var{n}
9536 @itemx \s-@var{n}
9537 Increase or decrease the point size by @var{n}@tie{}points.
9538 @var{n}@tie{}must be exactly one digit.
9540 @item \s(@var{nn}
9541 Set the point size to @var{nn}@tie{}points.  @var{nn} must be exactly
9542 two digits.
9544 @item \s+(@var{nn}
9545 @itemx \s-(@var{nn}
9546 @itemx \s(+@var{nn}
9547 @itemx \s(-@var{nn}
9548 Increase or decrease the point size by @var{nn}@tie{}points.  @var{nn}
9549 must be exactly two digits.
9550 @end table
9552 Note that @code{\s} doesn't produce an input token in @code{gtroff}.
9553 As a consequence, it can be used in requests like @code{mc} (which
9554 expects a single character as an argument) to change the font on
9555 the fly:
9557 @Example
9558 .mc \s[20]x\s[0]
9559 @endExample
9561 @xref{Fractional Type Sizes}, for yet another syntactical form of
9562 using the @code{\s} escape.
9563 @endDefreq
9565 @Defreq {sizes, s1 s2 @dots{} sn [0]}
9566 Some devices may only have certain permissible sizes, in which case
9567 @code{gtroff} rounds to the nearest permissible size.
9568 The @file{DESC} file specifies which sizes are permissible for the device.
9570 Use the @code{sizes} request to change the permissible sizes
9571 for the current output device.
9572 Arguments are in scaled points;
9573 the @code{sizescale} line in the
9574 @file{DESC} file for the output device
9575 provides the scaling factor.
9576 For example, if the scaling factor is 1000,
9577 then the value 12000 is 12@tie{}points.
9579 Each argument can be a single point size (such as @samp{12000}),
9580 or a range of sizes (such as @samp{4000-72000}).
9581 You can optionally end the list with a zero.
9582 @endDefreq
9584 @DefreqList {vs, [@Var{space}]}
9585 @DefreqItem {vs, @t{+}@Var{space}}
9586 @DefreqItem {vs, @t{-}@Var{space}}
9587 @DefregListEnd {.v}
9588 @cindex changing vertical line spacing (@code{vs})
9589 @cindex vertical line spacing, changing (@code{vs})
9590 @cindex vertical line spacing register (@code{.v})
9591 Change (increase, decrease) the vertical spacing by @var{space}.  The
9592 default scaling indicator is @samp{p}.
9594 If @code{vs} is called without an argument, the vertical spacing is
9595 reset to the previous value before the last call to @code{vs}.
9597 @cindex @code{.V} register, and @code{vs}
9598 @code{gtroff} creates a warning of type @samp{range} if @var{space} is
9599 negative; the vertical spacing is then set to the vertical
9600 resolution (as given in the @code{.V} register).
9602 The read-only number register @code{.v} contains the current vertical
9603 spacing; it is associated with the current environment
9604 (@pxref{Environments}).
9605 @endDefreq
9607 @cindex vertical line spacing, effective value
9608 The effective vertical line spacing consists of four components.
9610 @itemize @bullet
9611 @item
9612 The vertical line spacing as set with the @code{vs} request.
9614 @cindex post-vertical line spacing
9615 @cindex line spacing, post-vertical (@code{pvs})
9616 @item
9617 The @dfn{post-vertical line spacing} as set with the @code{pvs} request.
9618 This is vertical space which will be added after a line has been
9619 output.
9621 @cindex extra pre-vertical line space (@code{\x})
9622 @cindex line space, extra pre-vertical (@code{\x})
9623 @item
9624 The @dfn{extra pre-vertical line space} as set with the @code{\x} request,
9625 using a negative value.  This is vertical space which will be added once
9626 before the current line has been output.
9628 @cindex extra post-vertical line space (@code{\x})
9629 @cindex line space, extra post-vertical (@code{\x})
9630 @item
9631 The @dfn{extra post-vertical line space} as set with the @code{\x} request,
9632 using a positive value.  This is vertical space which will be added once
9633 after the current line has been output.
9634 @end itemize
9636 @cindex double-spacing (@code{vs}, @code{pvs})
9637 It is usually better to use @code{vs} or @code{pvs} instead of @code{ls}
9638 to produce double-spaced documents: @code{vs} and @code{pvs} have a finer
9639 granularity for the inserted vertical space compared to @code{ls};
9640 furthermore, certain preprocessors assume single-spacing.
9642 @xref{Manipulating Spacing}, for more details on the @code{\x} escape
9643 and the @code{ls} request.
9645 @DefreqList {pvs, [@Var{space}]}
9646 @DefreqItem {pvs, @t{+}@Var{space}}
9647 @DefreqItem {pvs, @t{-}@Var{space}}
9648 @DefregListEnd {.pvs}
9649 @cindex @code{ls} request, alternative to (@code{pvs})
9650 @cindex post-vertical line spacing, changing (@code{pvs})
9651 @cindex post-vertical line spacing register (@code{.pvs})
9652 Change (increase, decrease) the post-vertical spacing by
9653 @var{space}.  The default scaling indicator is @samp{p}.
9655 If @code{pvs} is called without an argument, the post-vertical spacing is
9656 reset to the previous value before the last call to @code{pvs}.
9658 @code{gtroff} creates a warning of type @samp{range} if @var{space} is
9659 zero or negative; the vertical spacing is then set to zero.
9661 The read-only number register @code{.pvs} contains the current
9662 post-vertical spacing; it is associated with the current environment
9663 (@pxref{Environments}).
9664 @endDefreq
9666 @c ---------------------------------------------------------------------
9668 @node Fractional Type Sizes,  , Changing Type Sizes, Sizes
9669 @subsection Fractional Type Sizes
9670 @cindex fractional type sizes
9671 @cindex fractional point sizes
9672 @cindex type sizes, fractional
9673 @cindex point sizes, fractional
9674 @cindex sizes, fractional
9676 @cindex @code{s} unit
9677 @cindex unit, @code{s}
9678 @cindex @code{z} unit
9679 @cindex unit, @code{z}
9680 @cindex @code{ps} request, with fractional type sizes
9681 @cindex @code{cs} request, with fractional type sizes
9682 @cindex @code{tkf} request, with fractional type sizes
9683 @cindex @code{\H}, with fractional type sizes
9684 @cindex @code{\s}, with fractional type sizes
9685 A @dfn{scaled point} is equal to @math{1/@var{sizescale}} points,
9686 where @var{sizescale} is specified in the @file{DESC} file (1@tie{}by
9687 default).  There is a new scale indicator @samp{z} which has the
9688 effect of multiplying by @var{sizescale}.  Requests and escape
9689 sequences in @code{gtroff} interpret arguments that represent a point
9690 size as being in units of scaled points, but they evaluate each such
9691 argument using a default scale indicator of @samp{z}.  Arguments
9692 treated in this way are the argument to the @code{ps} request, the
9693 third argument to the @code{cs} request, the second and fourth
9694 arguments to the @code{tkf} request, the argument to the @code{\H}
9695 escape sequence, and those variants of the @code{\s} escape sequence
9696 that take a numeric expression as their argument (see below).
9698 For example, suppose @var{sizescale} is@tie{}1000; then a scaled point
9699 is equivalent to a millipoint; the request @w{@samp{.ps 10.25}} is
9700 equivalent to @w{@samp{.ps 10.25z}} and thus sets the point size to
9701 10250@tie{}scaled points, which is equal to 10.25@tie{}points.
9703 @code{gtroff} disallows the use of the @samp{z} scale indicator in
9704 instances where it would make no sense, such as a numeric
9705 expression whose default scale indicator was neither @samp{u} nor
9706 @samp{z}.  Similarly it would make
9707 no sense to use a scaling indicator other than @samp{z} or @samp{u} in a
9708 numeric expression whose default scale indicator was @samp{z}, and so
9709 @code{gtroff} disallows this as well.
9711 There is also new scale indicator @samp{s} which multiplies by the
9712 number of units in a scaled point.  So, for example, @samp{\n[.ps]s} is
9713 equal to @samp{1m}.  Be sure not to confuse the @samp{s} and @samp{z}
9714 scale indicators.
9716 @Defreg {.ps}
9717 A read-only number register returning the point size in scaled points.
9719 @code{.ps} is associated with the current environment
9720 (@pxref{Environments}).
9721 @endDefreg
9723 @DefregList {.psr}
9724 @DefregListEnd {.sr}
9725 @cindex last-requested point size registers (@code{.psr}, @code{.sr})
9726 @cindex point size registers, last-requested (@code{.psr}, @code{.sr})
9727 @cindex @code{.ps} register, in comparison with @code{.psr}
9728 @cindex @code{.s} register, in comparison with @code{.sr}
9729 The last-requested point size in scaled points is contained in the
9730 @code{.psr} read-only number register.  The last requested point size
9731 in points as a decimal fraction can be found in @code{.sr}.  This is a
9732 string-valued read-only number register.
9734 Note that the requested point sizes are device-independent, whereas
9735 the values returned by the @code{.ps} and @code{.s} registers are not.
9736 For example, if a point size of 11@dmn{pt} is requested, and a
9737 @code{sizes} request (or a @code{sizescale} line in a @file{DESC} file)
9738 specifies 10.95@dmn{pt} instead, this value is actually used.
9740 Both registers are associated with the current environment
9741 (@pxref{Environments}).
9742 @endDefreg
9744 The @code{\s} escape has the following syntax for working with
9745 fractional type sizes:
9747 @table @code
9748 @item \s[@var{n}]
9749 @itemx \s'@var{n}'
9750 Set the point size to @var{n}@tie{}scaled points; @var{n}@tie{}is a numeric
9751 expression with a default scale indicator of @samp{z}.
9753 @item \s[+@var{n}]
9754 @itemx \s[-@var{n}]
9755 @itemx \s+[@var{n}]
9756 @itemx \s-[@var{n}]
9757 @itemx \s'+@var{n}'
9758 @itemx \s'-@var{n}'
9759 @itemx \s+'@var{n}'
9760 @itemx \s-'@var{n}'
9761 Increase or or decrease the point size by @var{n}@tie{}scaled points;
9762 @var{n}@tie{}is a numeric expression with a default scale indicator of
9763 @samp{z}.
9764 @end table
9766 @xref{Font Files}.
9769 @c =====================================================================
9771 @node Strings, Conditionals and Loops, Sizes, gtroff Reference
9772 @section Strings
9773 @cindex strings
9775 @code{gtroff} has string variables, which are entirely for user
9776 convenience (i.e.@: there are no built-in strings exept @code{.T}, but
9777 even this is a read-write string variable).
9779 @DefreqList {ds, name [@Var{string}]}
9780 @DefreqItem {ds1, name [@Var{string}]}
9781 @DefescItem {\\*, , n, }
9782 @DefescItem {\\*, @lparen{}, nm, }
9783 @DefescListEnd {\\*, @lbrack{}, name arg1 arg2 @dots{}, @rbrack{}}
9784 @cindex string interpolation (@code{\*})
9785 @cindex string expansion (@code{\*})
9786 @cindex interpolation of strings (@code{\*})
9787 @cindex expansion of strings (@code{\*})
9788 @cindex string arguments
9789 @cindex arguments, of strings
9790 Define and access a string variable @var{name} (one-character
9791 name@tie{}@var{n}, two-character name @var{nm}).  If @var{name} already
9792 exists, @code{ds} overwrites the previous definition.  Only the syntax form
9793 using brackets can take arguments which are handled identically to
9794 macro arguments; the single exception is that a closing bracket as an
9795 argument must be enclosed in double quotes.  @xref{Request and Macro
9796 Arguments}, and @ref{Parameters}.
9798 Example:
9800 @Example
9801 .ds foo a \\$1 test
9803 This is \*[foo nice].
9804     @result{} This is a nice test.
9805 @endExample
9807 The @code{\*} escape @dfn{interpolates} (expands in-place) a
9808 previously-defined string variable.  To be more precise, the stored
9809 string is pushed onto the input stack which is then parsed by
9810 @code{gtroff}.  Similar to number registers, it is possible to nest
9811 strings, i.e. string variables can be called within string variables.
9813 If the string named by the @code{\*} escape does not exist, it is
9814 defined as empty, and a warning of type @samp{mac} is emitted (see
9815 @ref{Debugging}, for more details).
9817 @cindex comments, with @code{ds}
9818 @cindex @code{ds} request, and comments
9819 @strong{Caution:} Unlike other requests, the second argument to the
9820 @code{ds} request takes up the entire line including trailing spaces.
9821 This means that comments on a line with such a request can introduce
9822 unwanted space into a string.
9824 @Example
9825 .ds UX \s-1UNIX\s0\u\s-3tm\s0\d \" UNIX trademark
9826 @endExample
9828 @noindent
9829 Instead the comment should be put on another line or have the comment
9830 escape adjacent with the end of the string.
9832 @Example
9833 .ds UX \s-1UNIX\s0\u\s-3tm\s0\d\"  UNIX trademark
9834 @endExample
9836 @cindex trailing quotes
9837 @cindex quotes, trailing
9838 @cindex leading spaces with @code{ds}
9839 @cindex spaces with @code{ds}
9840 @cindex @code{ds} request, and leading spaces
9841 To produce leading space the string can be started with a double
9842 quote.  No trailing quote is needed; in fact, any trailing quote is
9843 included in your string.
9845 @Example
9846 .ds sign "           Yours in a white wine sauce,
9847 @endExample
9849 @cindex multi-line strings
9850 @cindex strings, multi-line
9851 @cindex newline character, in strings, escaping
9852 @cindex escaping newline characters, in strings
9853 Strings are not limited to a single line of text.  A string can span
9854 several lines by escaping the newlines with a backslash.  The
9855 resulting string is stored @emph{without} the newlines.
9857 @Example
9858 .ds foo lots and lots \
9859 of text are on these \
9860 next several lines
9861 @endExample
9863 It is not possible to have real newlines in a string.  To put a single
9864 double quote character into a string, use two consecutive double quote
9865 characters.
9867 The @code{ds1} request turns off compatibility mode
9868 while interpreting a string.  To be more precise, a @dfn{compatibility
9869 save} input token is inserted at the beginning of  the string, and a
9870 @dfn{compatibility restore} input token at the end.
9872 @Example
9873 .nr xxx 12345
9874 .ds aa The value of xxx is \\n[xxx].
9875 .ds1 bb The value of xxx ix \\n[xxx].
9877 .cp 1
9879 \*(aa
9880     @result{} warning: number register `[' not defined
9881     @result{} The value of xxx is 0xxx].
9882 \*(bb
9883     @result{} The value of xxx ix 12345.
9884 @endExample
9886 @cindex name space, common, of macros, diversions, and strings
9887 @cindex common name space of macros, diversions, and strings
9888 @cindex macros, shared name space with strings and diversions
9889 @cindex strings, shared name space with macros and diversions
9890 @cindex diversions, shared name space with macros and strings
9891 Strings, macros, and diversions (and boxes) share the same name space.
9892 Internally, even the same mechanism is used to store them.  This has
9893 some interesting consequences.  For example, it is possible to call a
9894 macro with string syntax and vice versa.
9896 @Example
9897 .de xxx
9898 a funny test.
9900 This is \*[xxx]
9901     @result{} This is a funny test.
9903 .ds yyy a funny test
9904 This is
9905 .yyy
9906     @result{} This is a funny test.
9907 @endExample
9909 Diversions and boxes can be also called with string syntax.
9911 Another consequence is that you can copy one-line diversions or boxes
9912 to a string.
9914 @Example
9915 .di xxx
9916 a \fItest\fR
9919 .ds yyy This is \*[xxx]\c
9920 \*[yyy].
9921     @result{} @r{This is a }@i{test}.
9922 @endExample
9924 @noindent
9925 As the previous example shows, it is possible to store formatted
9926 output in strings.  The @code{\c} escape prevents the insertion of an
9927 additional blank line in the output.
9929 Copying diversions longer than a single output line produces
9930 unexpected results.
9932 @Example
9933 .di xxx
9934 a funny
9936 test
9939 .ds yyy This is \*[xxx]\c
9940 \*[yyy].
9941     @result{} test This is a funny.
9942 @endExample
9944 Usually, it is not predictable whether a diversion contains one or
9945 more output lines, so this mechanism should be avoided.  With
9946 @acronym{UNIX} @code{troff}, this was the only solution to strip off a
9947 final newline from a diversion.  Another disadvantage is that the
9948 spaces in the copied string are already formatted, making them
9949 unstretchable.  This can cause ugly results.
9951 @cindex stripping final newline in diversions
9952 @cindex diversion, stripping final newline
9953 @cindex final newline, stripping in diversions
9954 @cindex newline, final, stripping in diversions
9955 @cindex horizontal space, unformatting
9956 @cindex space, horizontal, unformatting
9957 @cindex unformatting horizontal space
9958 A clean solution to this problem is available in GNU @code{troff},
9959 using the requests @code{chop} to remove the final newline of a
9960 diversion, and @code{unformat} to make the horizontal spaces
9961 stretchable again.
9963 @Example
9964 .box xxx
9965 a funny
9967 test
9969 .box
9970 .chop xxx
9971 .unformat xxx
9972 This is \*[xxx].
9973     @result{} This is a funny test.
9974 @endExample
9976 @xref{Gtroff Internals}, for more information.
9977 @endDefreq
9979 @DefreqList {as, name [@Var{string}]}
9980 @DefreqListEnd {as1, name [@Var{string}]}
9981 @cindex appending to a string (@code{as})
9982 @cindex string, appending (@code{as})
9983 The @code{as} request is similar to @code{ds} but appends @var{string}
9984 to the string stored as @var{name} instead of redefining it.  If
9985 @var{name} doesn't exist yet, it is created.
9987 @Example
9988 .as sign " with shallots, onions and garlic,
9989 @endExample
9991 The @code{as1} request is similar to @code{as}, but compatibility mode
9992 is switched off while the appended string is interpreted.  To be more
9993 precise, a @dfn{compatibility save} input token is inserted at the
9994 beginning of the appended string, and a @dfn{compatibility restore}
9995 input token at the end.
9996 @endDefreq
9998 Rudimentary string manipulation routines are given with the next two
9999 requests.
10001 @Defreq {substring, str n1 [@Var{n2}]}
10002 @cindex substring (@code{substring})
10003 Replace the string named @var{str} with the substring
10004 defined by the indices @var{n1} and@tie{}@var{n2}.  The first character
10005 in the string has index@tie{}0.  If @var{n2} is omitted, it is taken to
10006 be equal to the string's length.  If the index value @var{n1} or
10007 @var{n2} is negative, it is counted from the end of the
10008 string, going backwards: The last character has index@tie{}@minus{}1, the
10009 character before the last character has index@tie{}@minus{}2, etc.
10011 @Example
10012 .ds xxx abcdefgh
10013 .substring xxx 1 -4
10014 \*[xxx]
10015     @result{} bcde
10016 @endExample
10017 @endDefreq
10019 @Defreq {length, reg str}
10020 @cindex length of a string (@code{length})
10021 @cindex string, length of (@code{length})
10022 Compute the number of characters of @var{str} and return it in the
10023 number register @var{reg}.  If @var{reg} doesn't exist, it is created.
10024 @code{str} is read in copy mode.
10026 @Example
10027 .ds xxx abcd\h'3i'efgh
10028 .length yyy \*[xxx]
10029 \n[yyy]
10030     @result{} 14
10031 @endExample
10032 @endDefreq
10034 @Defreq {rn, xx yy}
10035 @cindex renaming request (@code{rn})
10036 @cindex request, renaming (@code{rn})
10037 @cindex renaming macro (@code{rn})
10038 @cindex macro, renaming (@code{rn})
10039 @cindex renaming string (@code{rn})
10040 @cindex string, renaming (@code{rn})
10041 @cindex renaming diversion (@code{rn})
10042 @cindex diversion, renaming (@code{rn})
10043 Rename the request, macro, diversion, or string @var{xx} to @var{yy}.
10044 @endDefreq
10046 @Defreq {rm, xx}
10047 @cindex removing request (@code{rm})
10048 @cindex request, removing (@code{rm})
10049 @cindex removing macro (@code{rm})
10050 @cindex macro, removing (@code{rm})
10051 @cindex removing string (@code{rm})
10052 @cindex string, removing (@code{rm})
10053 @cindex removing diversion (@code{rm})
10054 @cindex diversion, removing (@code{rm})
10055 Remove the request, macro, diversion, or string @var{xx}.  @code{gtroff}
10056 treats subsequent invocations as if the object had never been defined.
10057 @endDefreq
10059 @Defreq {als, new old}
10060 @cindex alias, string, creating (@code{als})
10061 @cindex alias, macro, creating (@code{als})
10062 @cindex alias, diversion, creating (@code{als})
10063 @cindex creating alias, for string (@code{als})
10064 @cindex creating alias, for macro (@code{als})
10065 @cindex creating alias, for diversion (@code{als})
10066 @cindex string, creating alias (@code{als})
10067 @cindex macro, creating alias (@code{als})
10068 @cindex diversion, creating alias (@code{als})
10069 Create an alias named @var{new} for the request, string, macro, or
10070 diversion object named @var{old}.  The new name and the old name are
10071 exactly equivalent (it is similar to a hard rather than a soft
10072 link). If @var{old} is undefined, @code{gtroff} generates a warning of
10073 type @samp{mac} and ignores the request.
10074 @endDefreq
10076 @Defreq {chop, xx}
10077 Remove (chop) the last character from the macro, string, or diversion
10078 named @var{xx}.  This is useful for removing the newline from the end
10079 of diversions that are to be interpolated as strings.  This command
10080 can be used repeatedly; see @ref{Gtroff Internals}, for details on
10081 nodes inserted additionally by @code{gtroff}.
10082 @endDefreq
10084 @xref{Identifiers}, and @ref{Comments}.
10087 @c =====================================================================
10089 @node Conditionals and Loops, Writing Macros, Strings, gtroff Reference
10090 @section Conditionals and Loops
10091 @cindex conditionals and loops
10092 @cindex loops and conditionals
10094 @menu
10095 * Operators in Conditionals::
10096 * if-else::
10097 * while::
10098 @end menu
10100 @c ---------------------------------------------------------------------
10102 @node Operators in Conditionals, if-else, Conditionals and Loops, Conditionals and Loops
10103 @subsection Operators in Conditionals
10105 @cindex @code{if} request, operators to use with
10106 @cindex @code{while} request, operators to use with
10107 In @code{if} and @code{while} requests, there are several more
10108 operators available:
10110 @table @code
10111 @item e
10112 @itemx o
10113 True if the current page is even or odd numbered (respectively).
10115 @item n
10116 True if the document is being processed in nroff mode (i.e., the
10117 @code{.nroff} command has been issued).
10119 @item t
10120 True if the document is being processed in troff mode (i.e., the
10121 @code{.troff} command has been issued).
10123 @item v
10124 Always false.  This condition is for compatibility with other
10125 @code{troff} versions only.
10127 @item '@var{xxx}'@var{yyy}'
10128 True if the string @var{xxx} is equal to the string @var{yyy}.  Other
10129 characters can be used in place of the single quotes; the same set of
10130 delimiters as for the @code{\D} escape is used (@pxref{Escapes}).
10131 @code{gtroff} formats the strings before being compared:
10133 @Example
10134 .ie "|"\fR|\fP" \
10135 true
10136 .el \
10137 false
10138     @result{} true
10139 @endExample
10141 @noindent
10142 The resulting motions, glyph sizes, and fonts have to
10143 match,@footnote{The created output nodes must be identical.
10144 @xref{Gtroff Internals}.} and not the individual motion, size, and
10145 font requests.  In the previous example, @samp{|} and @samp{\fR|\fP}
10146 both result in a roman @samp{|} glyph with the same point size and
10147 at the same location on the page, so the strings are equal.  If
10148 @samp{.ft@tie{}I} had been added before the @samp{.ie}, the result
10149 would be ``false'' because (the first) @samp{|} produces an italic
10150 @samp{|} rather than a roman one.
10152 @item r @var{xxx}
10153 True if there is a number register named @var{xxx}.
10155 @item d @var{xxx}
10156 True if there is a string, macro, diversion, or request named @var{xxx}.
10158 @item m @var{xxx}
10159 True if there is a color named @var{xxx}.
10161 @item c @var{g}
10162 True if there is a glyph @var{g} available@footnote{The name of this
10163 conditional operator is a misnomer since it tests names of output
10164 glyphs.}; @var{g} is either an @acronym{ASCII} character or a special
10165 character (@code{\(@var{gg}} or @code{\[@var{ggg}]}); the condition
10166 is also true if @var{g} has been defined by the @code{char} request.
10167 @end table
10169 Note that these operators can't be combined with other operators like
10170 @samp{:} or @samp{&}; only a leading @samp{!} (without whitespace
10171 between the exclamation mark and the operator) can be used to negate
10172 the result.
10174 @Example
10175 .nr xxx 1
10176 .ie !r xxx \
10177 true
10178 .el \
10179 false
10180     @result{} false
10181 @endExample
10183 A whitespace after @samp{!} always evaluates to zero (this bizarre
10184 behaviour is due to compatibility with @acronym{UNIX} @code{troff}).
10186 @Example
10187 .nr xxx 1
10188 .ie ! r xxx \
10189 true
10190 .el \
10191 false
10192     @result{} r xxx true
10193 @endExample
10195 It is possible to omit the whitespace before the argument to the
10196 @samp{r}, @samp{d}, and @samp{c} operators.
10198 @xref{Expressions}.
10200 @c ---------------------------------------------------------------------
10202 @node if-else, while, Operators in Conditionals, Conditionals and Loops
10203 @subsection if-else
10204 @cindex if-else
10206 @code{gtroff} has if-then-else constructs like other languages, although
10207 the formatting can be painful.
10209 @Defreq {if, expr anything}
10210 Evaluate the expression @var{expr}, and executes @var{anything} (the
10211 remainder of the line) if @var{expr} evaluates to non-zero (true).
10212 @var{anything} is interpreted as though it was on a line by itself
10213 (except that leading spaces are swallowed).  @xref{Expressions}, for
10214 more info.
10216 @Example
10217 .nr xxx 1
10218 .nr yyy 2
10219 .if ((\n[xxx] == 1) & (\n[yyy] == 2)) true
10220     @result{} true
10221 @endExample
10222 @endDefreq
10224 @Defreq{nop, anything}
10225 Executes @var{anything}.
10226 This is similar to @code{.if@tie{}1}.
10227 @endDefreq
10229 @DefreqList {ie, expr anything}
10230 @DefreqListEnd {el, anything}
10231 Use the @code{ie} and @code{el} requests to write an if-then-else.
10232 The first request is the `if' part and the latter is the `else' part.
10234 @Example
10235 .ie n .ls 2 \" double-spacing in nroff
10236 .el   .ls 1 \" single-spacing in troff
10237 @endExample
10238 @endDefreq
10240 @c there is a bug in makeinfo <= 4.1a: you can't have `@{' as an argument
10241 @c to @deffn
10243 @c and in 4.2 you still can't use @{ in macros.
10245 @c @DefescList {\@{, , , }
10246 @c @DefescListEnd {\@}, , , }
10247 @deffn Escape @t{\@{}
10248 @deffnx Escape @t{\@}}
10249 @esindex \@{
10250 @esindex \@}
10251 @cindex begin of conditional block (@code{\@{})
10252 @cindex end of conditional block (@code{\@}})
10253 @cindex conditional block, begin (@code{\@{})
10254 @cindex conditional block, end (@code{\@}})
10255 @cindex block, conditional, begin (@code{\@{})
10256 @cindex block, condititional, end (@code{\@}})
10257 In many cases, an if (or if-else) construct needs to execute more than
10258 one request.  This can be done using the @code{\@{} and @code{\@}}
10259 escapes.  The following example shows the possible ways to use these
10260 escapes (note the position of the opening and closing braces).
10262 @Example
10263 .ie t \@{\
10264 .    ds lq ``
10265 .    ds rq ''
10266 .\@}
10267 .el \
10268 .\@{\
10269 .    ds lq "
10270 .    ds rq "\@}
10271 @endExample
10272 @c @endDefesc
10273 @end deffn
10275 @xref{Expressions}.
10277 @c ---------------------------------------------------------------------
10279 @node while,  , if-else, Conditionals and Loops
10280 @subsection while
10281 @cindex while
10283 @code{gtroff} provides a looping construct using the @code{while}
10284 request, which is used much like the @code{if} (and related) requests.
10286 @Defreq {while, expr anything}
10287 Evaluate the expression @var{expr}, and repeatedly execute
10288 @var{anything} (the remainder of the line) until @var{expr} evaluates
10289 to@tie{}0.
10291 @Example
10292 .nr a 0 1
10293 .while (\na < 9) \@{\
10294 \n+a,
10295 .\@}
10296 \n+a
10297     @result{} 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
10298 @endExample
10300 Some remarks.
10302 @cindex @code{de} request, and @code{while}
10303 @itemize @bullet
10304 @item
10305 The body of a @code{while} request is treated like the body of a
10306 @code{de} request: @code{gtroff} temporarily stores it in a macro
10307 which is deleted after the loop has been exited.  It can considerably
10308 slow down a macro if the body of the @code{while} request (within the
10309 macro) is large.  Each time the macro is executed, the @code{while}
10310 body is parsed and stored again as a temporary macro.
10312 @Example
10313 .de xxx
10314 .  nr num 10
10315 .  while (\\n[num] > 0) \@{\
10316 .    \" many lines of code
10317 .    nr num -1
10318 .  \@}
10320 @endExample
10322 @cindex recursive macros
10323 @cindex macros, recursive
10324 @noindent
10325 The traditional and ofter better solution (@acronym{UNIX} @code{troff}
10326 doesn't have the @code{while} request) is to use a recursive macro
10327 instead which is parsed only once during its definition.
10329 @Example
10330 .de yyy
10331 .  if (\\n[num] > 0) \@{\
10332 .    \" many lines of code
10333 .    nr num -1
10334 .    yyy
10335 .  \@}
10338 .de xxx
10339 .  nr num 10
10340 .  yyy
10342 @endExample
10344 @noindent
10345 Note that the number of available recursion levels is set to@tie{}1000
10346 (this is a compile-time constant value of @code{gtroff}).
10348 @item
10349 The closing brace of a @code{while} body must end a line.
10351 @Example
10352 .if 1 \@{\
10353 .  nr a 0 1
10354 .  while (\n[a] < 10) \@{\
10355 .    nop \n+[a]
10356 .\@}\@}
10357     @result{} unbalanced \@{ \@}
10358 @endExample
10359 @end itemize
10360 @endDefreq
10362 @Defreq {break, }
10363 @cindex @code{while} request, confusing with @code{br}
10364 @cindex @code{break} request, in a @code{while} loop
10365 @cindex @code{continue} request, in a @code{while} loop
10366 Break out of a @code{while} loop.  Be sure not to confuse this with
10367 the @code{br} request (causing a line break).
10368 @endDefreq
10370 @Defreq {continue, }
10371 Finish the current iteration of a @code{while} loop, immediately
10372 restarting the next iteration.
10373 @endDefreq
10375 @xref{Expressions}.
10378 @c =====================================================================
10380 @node Writing Macros, Page Motions, Conditionals and Loops, gtroff Reference
10381 @section Writing Macros
10382 @cindex writing macros
10383 @cindex macros, writing
10385 A @dfn{macro} is a collection of text and embedded commands which can
10386 be invoked multiple times.  Use macros to define common operations.
10388 @DefreqList {de, name [@Var{end}]}
10389 @DefreqItem {de1, name [@Var{end}]}
10390 @DefreqListEnd {dei, name [@Var{end}]}
10391 Define a new macro named @var{name}.  @code{gtroff} copies subsequent
10392 lines (starting with the next one) into an internal buffer until it
10393 encounters the line @samp{..} (two dots).  The optional second
10394 argument to @code{de} changes this to a macro to @samp{.@var{end}}.
10396 There can be whitespace after the first dot in the line containing the
10397 ending token (either @samp{.} or macro @samp{@var{end}}).
10399 Here a small example macro called @samp{P} which causes a break and
10400 inserts some vertical space.  It could be used to separate paragraphs.
10402 @Example
10403 .de P
10404 .  br
10405 .  sp .8v
10407 @endExample
10409 The following example defines a macro within another.  Remember that
10410 expansion must be protected twice; once for reading the macro and
10411 once for executing.
10413 @Example
10414 \# a dummy macro to avoid a warning
10415 .de end
10418 .de foo
10419 .  de bar end
10420 .    nop \f[B]Hallo \\\\$1!\f[]
10421 .  end
10424 .foo
10425 .bar Joe
10426     @result{} @b{Hallo Joe!}
10427 @endExample
10429 @noindent
10430 Since @code{\f} has no expansion, it isn't necessary to protect its
10431 backslash.  Had we defined another macro within @code{bar} which takes
10432 a parameter, eight backslashes would be necessary before @samp{$1}.
10434 The @code{de1} request turns off compatibility mode
10435 while executing the macro.  On entry, the current compatibility mode
10436 is saved and restored at exit.
10438 @Example
10439 .nr xxx 12345
10441 .de aa
10442 The value of xxx is \\n[xxx].
10444 .de1 bb
10445 The value of xxx ix \\n[xxx].
10448 .cp 1
10451     @result{} warning: number register \e' not defined
10452     @result{} The value of xxx is 0xxx].
10454     @result{} The value of xxx ix 12345.
10455 @endExample
10457 The @code{dei} request defines a macro indirectly.
10458 That is, it expands strings whose names
10459 are @var{name} or @var{end} before performing the append.
10461 This:
10463 @Example
10464 .ds xx aa
10465 .ds yy bb
10466 .dei xx yy
10467 @endExample
10469 @noindent
10470 is equivalent to:
10472 @Example
10473 .de aa bb
10474 @endExample
10476 @pindex trace.tmac
10477 Using @file{trace.tmac}, you can trace calls to @code{de} and @code{de1}.
10479 Note that macro identifiers are shared with identifiers for strings and
10480 diversions.
10481 @endDefreq
10483 @DefreqList {am, name [@Var{end}]}
10484 @DefreqItem {am1, name [@Var{end}]}
10485 @DefreqListEnd {ami, name [@Var{end}]}
10486 @cindex appending to a macro (@code{am})
10487 @cindex macro, appending (@code{am})
10488 Works similarly to @code{de} except it appends onto the macro named
10489 @var{name}.  So, to make the previously defined @samp{P} macro actually
10490 do indented instead of block paragraphs, add the necessary code to the
10491 existing macro like this:
10493 @Example
10494 .am P
10495 .ti +5n
10497 @endExample
10499 The @code{am1} request turns off compatibility mode
10500 while executing the appended macro piece.  To be more precise, a
10501 @dfn{compatibility save} input token is inserted at the beginning of
10502 the appended code, and a @dfn{compatibility restore} input token at
10503 the end.
10505 The @code{ami} request appends indirectly,
10506 meaning that @code{gtroff} expands strings whose names
10507 are @var{name} or @var{end} before performing the append.
10509 @pindex trace.tmac
10510 Using @file{trace.tmac}, you can trace calls to @code{am} and @code{am1}.
10511 @endDefreq
10513 @xref{Strings}, for the @code{als} request to rename a macro.
10515 The @code{de}, @code{am}, @code{di}, @code{da}, @code{ds}, and
10516 @code{as} requests (together with its variants) only create a new object
10517 if the name of the macro, diversion or string diversion is currently
10518 undefined or if it is defined to be a request; normally they modify the
10519 value of an existing object.
10521 @Defreq {return, [@Var{anything}]}
10522 Exit a macro, immediately returning to the caller.
10524 If called with an argument, exit twice, namely the current macro and the
10525 macro one level higher.  This is used to define a wrapper macro for
10526 @code{return} in @file{trace.tmac}.
10527 @endDefreq
10529 @menu
10530 * Copy-in Mode::
10531 * Parameters::
10532 @end menu
10534 @c ---------------------------------------------------------------------
10536 @node Copy-in Mode, Parameters, Writing Macros, Writing Macros
10537 @subsection Copy-in Mode
10538 @cindex copy-in mode
10539 @cindex mode, copy-in
10541 @cindex @code{\n}, when reading text for a macro
10542 @cindex @code{\$}, when reading text for a macro
10543 @cindex @code{\*}, when reading text for a macro
10544 @cindex @code{\\}, when reading text for a macro
10545 @cindex \@key{RET}, when reading text for a macro
10546 When @code{gtroff} reads in the text for a macro, string, or diversion,
10547 it copies the text (including request lines, but excluding escapes) into
10548 an internal buffer.  Escapes are converted into an internal form,
10549 except for @code{\n}, @code{\$}, @code{\*}, @code{\\} and
10550 @code{\@key{RET}} which are evaluated and inserted into the text where
10551 the escape was located.  This is known as @dfn{copy-in} mode or
10552 @dfn{copy} mode.
10554 What this means is that you can specify when these escapes are to be
10555 evaluated (either at copy-in time or at the time of use) by insulating
10556 the escapes with an extra backslash.  Compare this to the @code{\def}
10557 and @code{\edef} commands in @TeX{}.
10559 The following example prints the numbers 20 and@tie{}10:
10561 @Example
10562 .nr x 20
10563 .de y
10564 .nr x 10
10565 \&\nx
10566 \&\\nx
10569 @endExample
10571 @c ---------------------------------------------------------------------
10573 @node Parameters,  , Copy-in Mode, Writing Macros
10574 @subsection Parameters
10575 @cindex parameters
10577 The arguments to a macro or string can be examined using a variety of
10578 escapes.
10580 @Defreg {.$}
10581 @cindex number of arguments register (@code{.$})
10582 The number of arguments passed to a macro or string.  This is a read-only
10583 number register.
10584 @endDefreg
10586 Any individual argument can be retrieved with one of the following
10587 escapes:
10589 @DefescList {\\$, , n, }
10590 @DefescItem {\\$, @lparen{}, nn, }
10591 @DefescListEnd {\\$, @lbrack{}, nnn, @rbrack{}}
10592 @cindex copy-in mode, and macro arguments
10593 @cindex macro, arguments (@code{\$})
10594 @cindex arguments, macro (@code{\$})
10595 Retrieve the @var{n}@dmn{th}, @var{nn}@dmn{th} or @var{nnn}@dmn{th}
10596 argument.  As usual, the first form only accepts a single number
10597 (larger than zero), the second a two-digit number (larger or equal
10598 to@tie{}10), and the third any positive integer value (larger
10599 than zero).  Macros and strings can have an unlimited number of arguments.
10600 Note that due to copy-in mode, use two backslashes on these in actual use
10601 to prevent interpolation until the macro is actually invoked.
10602 @endDefesc
10604 @Defreq {shift, [@Var{n}]}
10605 Shift the arguments 1@tie{}position, or as
10606 many positions as specified by its argument.  After executing this
10607 request, argument@tie{}@var{i} becomes argument @math{@var{i}-@var{n}};
10608 arguments 1 to@tie{}@var{n} are no longer available.  Shifting by
10609 negative amounts is currently undefined.
10610 @endDefreq
10612 @DefescList {\\$*, , , }
10613 @DefescListEnd {\\$@@, , , }
10614 In some cases it is convenient to use all of the arguments at once (for
10615 example, to pass the arguments along to another macro).  The @code{\$*}
10616 escape concatenates all the arguments separated by spaces.  A
10617 similar escape is @code{\$@@}, which concatenates all the
10618 arguments with each surrounded by double quotes, and separated by
10619 spaces.  If not in compatibility mode, the input level of double quotes
10620 is preserved (see @ref{Request and Macro Arguments}).
10621 @endDefesc
10623 @Defesc {\\$0, , , }
10624 @cindex macro name register (@code{\$0})
10625 @cindex @code{als} request, and @code{\$0}
10626 The name used to invoke the current macro.
10627 The @code{als} request can make a macro have more than one name.
10629 @Example
10630 .de generic-macro
10631 .  ...
10632 .  if \\n[error] \@{\
10633 .    tm \\$0: Houston, we have a problem.
10634 .    return
10635 .  \@}
10638 .als foo generic-macro
10639 .als bar generic-macro
10640 @endExample
10641 @endDefesc
10643 @xref{Request and Macro Arguments}.
10646 @c =====================================================================
10648 @node Page Motions, Drawing Requests, Writing Macros, gtroff Reference
10649 @section Page Motions
10650 @cindex page motions
10651 @cindex motions, page
10653 @xref{Manipulating Spacing}, for a discussion of the main request for
10654 vertical motion, @code{sp}.
10656 @DefreqList {mk, [@Var{reg}]}
10657 @DefreqListEnd {rt, [@Var{dist}]}
10658 @cindex marking vertical page location (@code{mk})
10659 @cindex page location, vertical, marking (@code{mk})
10660 @cindex location, vertical, page, marking (@code{mk})
10661 @cindex vertical page location, marking (@code{mk})
10662 @cindex returning to marked vertical page location (@code{rt})
10663 @cindex page location, vertical, returning to marked (@code{rt})
10664 @cindex location, vertical, page, returning to marked (@code{rt})
10665 @cindex vertical page location, returning to marked (@code{rt})
10666 The request @code{mk} can be used to mark a location on a page, for
10667 movement to later.  This request takes a register name as an argument
10668 in which to store the current page location.  With no argument it
10669 stores the location in an internal register.  The results of this can
10670 be used later by the @code{rt} or the @code{sp} request (or the
10671 @code{\v} escape).
10673 The @code{rt} request returns @emph{upwards} to the location marked
10674 with the last @code{mk} request.  If used with an argument, return to
10675 a position which distance from the top of the page is @var{dist} (no
10676 previous call to @code{mk} is necessary in this case).  Default scaling
10677 indicator is @samp{v}.
10679 Here a primitive solution for a two-column macro.
10681 @Example
10682 .nr column-length 1.5i
10683 .nr column-gap 4m
10684 .nr bottom-margin 1m
10686 @endExample
10687 @Example
10688 .de 2c
10689 .  br
10690 .  mk
10691 .  ll \\n[column-length]u
10692 .  wh -\\n[bottom-margin]u 2c-trap
10693 .  nr right-side 0
10696 @endExample
10697 @Example
10698 .de 2c-trap
10699 .  ie \\n[right-side] \@{\
10700 .    nr right-side 0
10701 .    po -(\\n[column-length]u + \\n[column-gap]u)
10702 .    \" remove trap
10703 .    wh -\\n[bottom-margin]u
10704 .  \@}
10705 .  el \@{\
10706 .    \" switch to right side
10707 .    nr right-side 1
10708 .    po +(\\n[column-length]u + \\n[column-gap]u)
10709 .    rt
10710 .  \@}
10713 @endExample
10714 @Example
10715 .pl 1.5i
10716 .ll 4i
10717 This is a small test which shows how the
10718 rt request works in combination with mk.
10721 Starting here, text is typeset in two columns.
10722 Note that this implementation isn't robust
10723 and thus not suited for a real two-column
10724 macro.
10725 @endExample
10727 Result:
10729 @Example
10730 This is a small test which shows how the
10731 rt request works in combination with mk.
10733 Starting  here,    isn't    robust
10734 text is typeset    and   thus  not
10735 in two columns.    suited  for   a
10736 Note that  this    real two-column
10737 implementation     macro.
10738 @endExample
10739 @endDefreq
10741 The following escapes give fine control of movements about the page.
10743 @Defesc {\\v, ', e, '}
10744 @cindex vertical motion (@code{\v})
10745 @cindex motion, vertical (@code{\v})
10746 Move vertically, usually from the current location on the page (if no
10747 absolute position operator @samp{|} is used).  The
10748 argument@tie{}@var{e} specifies the distance to move; positive is
10749 downwards and negative upwards.  The default scaling indicator for this
10750 escape is @samp{v}.  Beware, however, that @code{gtroff} continues text
10751 processing at the point where the motion ends, so you should always
10752 balance motions to avoid interference with text processing.
10754 @code{\v} doesn't trigger a trap.  This can be quite useful; for example,
10755 consider a page bottom trap macro which prints a marker in the margin to
10756 indicate continuation of a footnote or something similar.
10757 @endDefesc
10759 There are some special-case escapes for vertical motion.
10761 @Defesc {\\r, , , }
10762 Move upwards@tie{}1@dmn{v}.
10763 @endDefesc
10765 @Defesc {\\u, , , }
10766 Move upwards@tie{}.5@dmn{v}.
10767 @endDefesc
10769 @Defesc {\\d, , , }
10770 Move down@tie{}.5@dmn{v}.
10771 @endDefesc
10773 @Defesc {\\h, ', e, '}
10774 @cindex inserting horizontal space (@code{\h})
10775 @cindex horizontal space (@code{\h})
10776 @cindex space, horizontal (@code{\h})
10777 @cindex horizontal motion (@code{\h})
10778 @cindex motion, horizontal (@code{\h})
10779 Move horizontally, usually from the current location (if no absolute
10780 position operator @samp{|} is used).  The expression@tie{}@var{e}
10781 indicates how far to move: positive is rightwards and negative
10782 leftwards.  The default scaling indicator for this escape is @samp{m}.
10784 This horizontal space is not discarded at the end of a line.  To insert
10785 discardable space of a certain length use the @code{ss} request.
10786 @endDefesc
10788 There are a number of special-case escapes for horizontal motion.
10790 @Defesc {\\@key{SP}, , , }
10791 @cindex space, unbreakable
10792 @cindex unbreakable space
10793 An unbreakable and unpaddable (i.e.@: not expanded during filling)
10794 space.  (Note: This is a backslash followed by a space.)
10795 @endDefesc
10797 @Defesc {\\~, , , }
10798 An unbreakable space that stretches like a normal inter-word space
10799 when a line is adjusted.
10800 @endDefesc
10802 @Defesc {\\|, , , }
10803 A 1/6@dmn{th} em space.  Ignored for TTY output devices (rounded to
10804 zero).
10805 @endDefesc
10807 @Defesc {\\^, , , }
10808 A 1/12@dmn{th} em space.  Ignored for TTY output devices (rounded to
10809 zero).
10810 @endDefesc
10812 @Defesc {\\0, , , }
10813 @cindex space, width of a digit (@code{\0})
10814 @cindex digit width space (@code{\0})
10815 A space the size of a digit.
10816 @endDefesc
10818 The following string sets the @TeX{} logo:
10820 @Example
10821 .ds TeX T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
10822 @endExample
10824 @DefescList {\\w, ', text, '}
10825 @DefregItem {st}
10826 @DefregItem {sb}
10827 @DefregItem {rst}
10828 @DefregItem {rsb}
10829 @DefregItem {ct}
10830 @DefregItem {ssc}
10831 @DefregListEnd {skw}
10832 @cindex width escape (@code{\w})
10833 Return the width of the specified @var{text} in basic units.
10834 This allows horizontal movement based on the width of some
10835 arbitrary text (e.g.@: given as an argument to a macro).
10837 @Example
10838 The length of the string `abc' is \w'abc'u.
10839     @result{} The length of the string `abc' is 72u.
10840 @endExample
10842 Font changes may occur in @var{text} which don't affect current
10843 settings.
10845 After use, @code{\w} sets several registers:
10847 @table @code
10848 @item st
10849 @itemx sb
10850 The highest and lowest point of the baseline, respectively, in @var{text}.
10852 @item rst
10853 @itemx rsb
10854 Like the @code{st} and @code{sb} registers, but takes account of the
10855 heights and depths of glyphs.  With other words, this gives the
10856 highest and lowest point of @var{text}.  Values below the baseline are
10857 negative.
10859 @item ct
10860 Defines the kinds of glyphs occurring in @var{text}:
10862 @table @asis
10863 @item 0
10864 only short glyphs, no descenders or tall glyphs.
10866 @item 1
10867 at least one descender.
10869 @item 2
10870 at least one tall glyph.
10872 @item 3
10873 at least one each of a descender and a tall glyph.
10874 @end table
10876 @item ssc
10877 The amount of horizontal space (possibly negative) that should be added
10878 to the last glyph before a subscript.
10880 @item skw
10881 How far to right of the center of the last glyph in the @code{\w}
10882 argument, the center of an accent from a roman font should be placed
10883 over that glyph.
10884 @end table
10885 @endDefesc
10887 @DefescList {\\k, , p, }
10888 @DefescItem {\\k, @lparen{}, ps, }
10889 @DefescListEnd {\\k, @lbrack{}, position, @rbrack}
10890 @cindex saving horizontal input line position (@code{\k})
10891 @cindex horizontal input line position, saving (@code{\k})
10892 @cindex input line position, horizontal, saving (@code{\k})
10893 @cindex position, horizontal input line, saving (@code{\k})
10894 @cindex line, input, horizontal position, saving (@code{\k})
10895 Store the current horizontal position in the @emph{input} line in
10896 number register with name @var{position} (one-character name@tie{}@var{p},
10897 two-character name @var{ps}).  Use this, for example, to return to the
10898 beginning of a string for highlighting or other decoration.
10899 @endDefesc
10901 @Defreg {hp}
10902 @cindex horizontal input line position register (@code{hp})
10903 @cindex input line, horizontal position, register (@code{hp})
10904 @cindex position, horizontal, in input line, register (@code{hp})
10905 @cindex line, input, horizontal position, register (@code{hp})
10906 The current horizontal position at the input line.
10907 @endDefreg
10909 @Defreg {.k}
10910 @cindex horizontal output line position register (@code{.k})
10911 @cindex output line, horizontal position, register (@code{.k})
10912 @cindex position, horizontal, in output line, register (@code{.k})
10913 @cindex line, output, horizontal position, register (@code{.k})
10914 A read-only number register containing the current horizontal output
10915 position.
10916 @endDefreg
10918 @Defesc {\\o, ', abc, '}
10919 @cindex overstriking glyphs (@code{\o})
10920 @cindex glyphs, overstriking (@code{\o})
10921 Overstrike glyphs @var{a}, @var{b}, @var{c}, @dots{}; the glyphs
10922 are centered, and the resulting spacing is the largest width of the
10923 affected glyphs.
10924 @endDefesc
10926 @Defesc {\\z, , g, , }
10927 @cindex zero-width printing (@code{\z}, @code{\Z})
10928 @cindex printing, zero-width (@code{\z}, @code{\Z})
10929 Print glyph @var{g} with zero width, i.e., without spacing.  Use
10930 this to overstrike glyphs left-aligned.
10931 @endDefesc
10933 @Defesc {\\Z, ', anything, '}
10934 @cindex zero-width printing (@code{\z}, @code{\Z})
10935 @cindex printing, zero-width (@code{\z}, @code{\Z})
10936 Print @var{anything}, then restore the horizontal and vertical position.
10937 The argument may not contain tabs or leaders.
10939 The following is an example of a strike-through macro:
10941 @Example
10942 .de ST
10943 .nr ww \w'\\$1'
10944 \Z@@\v'-.25m'\l'\\n[ww]u'@@\\$1
10947 This is
10948 .ST "a test"
10949 an actual emergency!
10950 @endExample
10951 @endDefesc
10954 @c =====================================================================
10956 @node Drawing Requests, Traps, Page Motions, gtroff Reference
10957 @section Drawing Requests
10958 @cindex drawing requests
10959 @cindex requests for drawing
10961 @code{gtroff} provides a number of ways to draw lines and other figures
10962 on the page.  Used in combination with the page motion commands (see
10963 @ref{Page Motions}, for more info), a wide variety of figures can be
10964 drawn.  However, for complex drawings these operations can be quite
10965 cumbersome, and it may be wise to use graphic preprocessors like
10966 @code{gpic} or @code{ggrn}.  @xref{gpic}, and @ref{ggrn}, for more
10967 information.
10969 All drawing is done via escapes.
10971 @DefescList {\\l, ', l, '}
10972 @DefescListEnd {\\l, ', lg, '}
10973 @cindex drawing horizontal lines (@code{\l})
10974 @cindex horizontal line, drawing (@code{\l})
10975 @cindex line, horizontal, drawing (@code{\l})
10976 Draw a line horizontally.  @var{l} is the length of the line to be
10977 drawn.  If it is positive, start the line at the current location and
10978 draw to the right; its end point is the new current location.  Negative
10979 values are handled differently: The line starts at the current location
10980 and draws to the left, but the current location doesn't move.
10982 @var{l} can also be specified absolutely (i.e.@: with a leading
10983 @samp{|}) which draws back to the beginning of the input line.
10984 Default scaling indicator is @samp{m}.
10986 @cindex underscore glyph (@code{\[ru]})
10987 @cindex glyph, underscore (@code{\[ru]})
10988 @cindex line drawing glyph
10989 @cindex glyph, for line drawing
10990 The optional second parameter@tie{}@var{g} is a glyph to draw the line
10991 with.  If this second argument is not specified, @code{gtroff} uses
10992 the underscore glyph, @code{\[ru]}.
10994 @cindex zero width space character (@code{\&})
10995 @cindex character, zero width space (@code{\&})
10996 @cindex space character, zero width (@code{\&})
10997 To separate the two arguments (to prevent @code{gtroff} from
10998 interpreting a drawing glyph as a scaling indicator if the glyph is
10999 represented by a single character) use @code{\&}.
11001 Here a small useful example:
11003 @Example
11004 .de box
11005 \[br]\\$*\[br]\l'|0\[rn]'\l'|0\[ul]'
11007 @endExample
11009 @noindent
11010 Note that this works by outputting a box rule (a vertical line), then
11011 the text given as an argument and then another box rule.  Finally, the
11012 line drawing escapes both draw from the current location to the
11013 beginning of the @emph{input} line -- this works because the line
11014 length is negative, not moving the current point.
11015 @endDefesc
11017 @DefescList {\\L, ', l, '}
11018 @DefescListEnd {\\L, ', lg, '}
11019 @cindex drawing vertical lines (@code{\L})
11020 @cindex vertical line drawing (@code{\L})
11021 @cindex line, vertical, drawing (@code{\L})
11022 @cindex line drawing glyph
11023 @cindex glyph for line drawing
11024 @cindex box rule glyph (@code{\[br]})
11025 @cindex glyph, box rule (@code{\[br]})
11026 Draw vertical lines.  Its parameters are
11027 similar to the @code{\l} escape, except that the default scaling
11028 indicator is @samp{v}.  The movement is downwards for positive values,
11029 and upwards for negative values.  The default glyph is the box rule
11030 glyph, @code{\[br]}.  As with the vertical motion escapes, text
11031 processing blindly continues where the line ends.
11033 @Example
11034 This is a \L'3v'test.
11035 @endExample
11037 @noindent
11038 Here the result, produced with @code{grotty}.
11040 @Example
11041 This is a
11042           |
11043           |
11044           |test.
11045 @endExample
11046 @endDefesc
11048 @Defesc {\\D, ', command arg @dots{}, '}
11049 The @code{\D} escape provides a variety of drawing functions.
11050 Note that on character devices, only vertical and horizontal lines are
11051 supported within @code{grotty}; other devices may only support a subset
11052 of the available drawing functions.
11054 The default scaling indicator for all subcommands of @code{\D} is
11055 @samp{m} for horizontal distances and @samp{v} for vertical ones.
11056 Exceptions are @w{@code{\D'f @dots{}'}} and @w{@code{\D't @dots{}'}}
11057 which use @code{u} as the default, and @w{@code{\D'F@var{x} @dots{}'}}
11058 which arguments are treated similar to the @code{defcolor} request.
11060 @table @code
11061 @item \D'l @var{dx} @var{dy}'
11062 @cindex line, drawing (@w{@code{\D'l @dots{}'}})
11063 @cindex drawing a line (@w{@code{\D'l @dots{}'}})
11064 Draw a line from the current location to the relative point specified by
11065 (@var{dx},@var{dy}).
11067 The following example is a macro for creating a box around a text string;
11068 for simplicity, the box margin is taken as a fixed value, 0.2@dmn{m}.
11070 @Example
11071 .de BOX
11072 .  nr @@wd \w'\\$1'
11073 \h'.2m'\
11074 \h'-.2m'\v'(.2m - \\n[rsb]u)'\
11075 \D'l 0 -(\\n[rst]u - \\n[rsb]u + .4m)'\
11076 \D'l (\\n[@@wd]u + .4m) 0'\
11077 \D'l 0 (\\n[rst]u - \\n[rsb]u + .4m)'\
11078 \D'l -(\\n[@@wd]u + .4m) 0'\
11079 \h'.2m'\v'-(.2m - \\n[rsb]u)'\
11080 \\$1\
11081 \h'.2m'
11083 @endExample
11085 @noindent
11086 First, the width of the string is stored in register @code{@@wd}.  Then,
11087 four lines are drawn to form a box, properly offset by the box margin.
11088 The registers @code{rst} and @code{rsb} are set by the @code{\w} escape,
11089 containing the largest height and depth of the whole string.
11091 @item \D'c @var{d}'
11092 @cindex circle, drawing (@w{@code{\D'c @dots{}'}})
11093 @cindex drawing a circle (@w{@code{\D'c @dots{}'}})
11094 Draw a circle with a diameter of@tie{}@var{d} with the leftmost point at the
11095 current position.  After drawing, the current location is positioned at the
11096 rightmost point of the circle.
11098 @item \D'C @var{d}'
11099 @cindex circle, solid, drawing (@w{@code{\D'C @dots{}'}})
11100 @cindex drawing a solid circle (@w{@code{\D'C @dots{}'}})
11101 @cindex solid circle, drawing (@w{@code{\D'C @dots{}'}})
11102 Draw a solid circle with the same parameters and behaviour as an outlined
11103 circle.  No outline is drawn.
11105 @item \D'e @var{x} @var{y}'
11106 @cindex drawing an ellipse (@w{@code{\D'e @dots{}'}})
11107 @cindex ellipse, drawing (@w{@code{\D'e @dots{}'}})
11108 Draw an ellipse with a horizontal diameter of @var{x} and a vertical
11109 diameter of @var{y} with the leftmost point at the current position.
11110 After drawing, the current location is positioned at the rightmost point of
11111 the ellipse.
11113 @item \D'E @var{x} @var{y}'
11114 @cindex ellipse, solid, drawing (@w{@code{\D'E @dots{}'}})
11115 @cindex drawing a solid ellipse (@w{@code{\D'E @dots{}'}})
11116 @cindex solid ellipse, drawing (@w{@code{\D'E @dots{}'}})
11117 Draw a solid ellipse with the same parameters and behaviour as an
11118 outlined ellipse.  No outline is drawn.
11120 @item \D'a @var{dx1} @var{dy1} @var{dx2} @var{dy2}'
11121 @cindex arc, drawing (@w{@code{\D'a @dots{}'}})
11122 @cindex drawing an arc (@w{@code{\D'a @dots{}'}})
11123 Draw an arc clockwise from the current location through the two
11124 specified relative locations (@var{dx1},@var{dy1}) and
11125 (@var{dx2},@var{dy2}).  The coordinates of the first point are relative
11126 to the current position, and the coordinates of the second point are
11127 relative to the first point.  After drawing, the current position is moved
11128 to the final point of the arc.
11130 @item \D'~ @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}'
11131 @cindex drawing a spline (@w{@code{\D'~ @dots{}'}})
11132 @cindex spline, drawing (@w{@code{\D'~ @dots{}'}})
11133 Draw a spline from the current location to the relative point
11134 (@var{dx1},@var{dy1}) and then to (@var{dx2},@var{dy2}), and so on.
11135 The current position is moved to the terminal point of the drawn curve.
11137 @item \D'f @var{n}'
11138 @cindex gray shading (@w{@code{\D'f @dots{}'}})
11139 @cindex shading filled objects (@w{@code{\D'f @dots{}'}})
11140 Set the shade of gray to be used for filling solid objects to@tie{}@var{n};
11141 @var{n}@tie{}must be an integer between 0 and@tie{}1000, where 0
11142 corresponds solid white and 1000 to solid black, and values in between
11143 correspond to intermediate shades of gray.  This applies only to solid
11144 circles, solid ellipses, and solid polygons.  By default, a level of
11145 1000 is used.
11147 Despite of being silly, the current point is moved horizontally to the
11148 right by@tie{}@var{n}.
11150 @cindex @w{@code{\D'f @dots{}'}} and horizontal resolution
11151 Don't use this command!  It has the serious drawback that it will be
11152 always rounded to the next integer multiple of the horizontal resolution
11153 (the value of the @code{hor} keyword in the @file{DESC} file).  Use
11154 @code{\M} (@pxref{Colors}) or @w{@code{\D'Fg @dots{}'}} instead.
11156 @item \D'p @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}'
11157 @cindex drawing a polygon (@w{@code{\D'p @dots{}'}})
11158 @cindex polygon, drawing (@w{@code{\D'p @dots{}'}})
11159 Draw a polygon from the current location to the relative position
11160 (@var{dx1},@var{dy1}) and then to (@var{dx2},@var{dy2}) and so on.
11161 When the specified data points are exhausted, a line is drawn back
11162 to the starting point.  The current position is changed by adding the
11163 sum of all arguments with odd index to the actual horizontal position and
11164 the even ones to the vertical position.
11166 @item \D'P @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}'
11167 @cindex polygon, solid, drawing (@w{@code{\D'P @dots{}'}})
11168 @cindex drawing a solid polygon (@w{@code{\D'P @dots{}'}})
11169 @cindex solid polygon, drawing (@w{@code{\D'P @dots{}'}})
11170 Draw a solid polygon with the same parameters and behaviour as an
11171 outlined polygon.  No outline is drawn.
11173 Here a better variant of the box macro to fill the box with some color.
11174 Note that the box must be drawn before the text since colors in
11175 @code{gtroff} are not transparent; the filled polygon would hide the
11176 text completely.
11178 @Example
11179 .de BOX
11180 .  nr @@wd \w'\\$1'
11181 \h'.2m'\
11182 \h'-.2m'\v'(.2m - \\n[rsb]u)'\
11183 \M[lightcyan]\
11184 \D'P 0 -(\\n[rst]u - \\n[rsb]u + .4m) \
11185      (\\n[@@wd]u + .4m) 0 \
11186      0 (\\n[rst]u - \\n[rsb]u + .4m) \
11187      -(\\n[@@wd]u + .4m) 0'\
11188 \h'.2m'\v'-(.2m - \\n[rsb]u)'\
11189 \M[]\
11190 \\$1\
11191 \h'.2m'
11193 @endExample
11195 @item \D't @var{n}'
11196 @cindex line thickness (@w{@code{\D't @dots{}'}})
11197 @cindex thickness of lines (@w{@code{\D't @dots{}'}})
11198 Set the current line thickness to @var{n}@tie{}machine units.  A value of
11199 zero selects the smallest available line thickness.  A negative value
11200 makes the line thickness proportional to the current point size (this is
11201 the default behaviour of @acronym{AT&T} @code{troff}).
11203 Despite of being silly, the current point is moved horizontally to the
11204 right by@tie{}@var{n}.
11206 @item \D'F@var{scheme} @var{color_components}'
11207 @cindex unnamed fill colors (@code{\D'F@dots{}'})
11208 @cindex fill colors, unnamed (@code{\D'F@dots{}'})
11209 @cindex colors, fill, unnamed (@code{\D'F@dots{}'})
11210 Change current fill color.  @var{scheme} is a single letter denoting the
11211 color scheme: @samp{r} (rgb), @samp{c} (cmy), @samp{k} (cmyk), @samp{g}
11212 (gray), or @samp{d} (default color).  The color components use exactly
11213 the same syntax as in the @code{defcolor} request (@pxref{Colors}); the
11214 command @code{\D'Fd'} doesn't take an argument.
11216 @emph{No} position changing!
11218 Examples:
11220 @Example
11221 @endExample
11222 \D'Fg .3'      \" same gray as \D'f 700'
11223 \D'Fr #0000ff' \" blue
11224 @end table
11225 @endDefesc
11227 @xref{Graphics Commands}.
11229 @Defesc {\\b, ', string, '}
11230 @cindex pile, glyph (@code{\b})
11231 @cindex glyph pile (@code{\b})
11232 @cindex stacking glyphs (@code{\b})
11233 @dfn{Pile} a sequence of glyphs vertically, and center it vertically
11234 on the current line.  Use it to build large brackets and braces.
11236 Here an example how to create a large opening brace:
11238 @Example
11239 \b'\[lt]\[bv]\[lk]\[bv]\[lb]'
11240 @endExample
11242 @cindex @code{\b}, limitations
11243 @cindex limitations of @code{\b} escape
11244 The first glyph is on the top, the last glyph in @var{string} is
11245 at the bottom.  Note that @code{gtroff} separates the glyphs
11246 vertically by 1@dmn{m}, and the whole object is centered 0.5@dmn{m}
11247 above the current baseline; the largest glyph width is used as the
11248 width for the whole object.  This rather unflexible positioning
11249 algorithm doesn't work with @option{-Tdvi} since the bracket pieces vary
11250 in height for this device.  Instead, use the @code{eqn} preprocessor.
11252 @xref{Manipulating Spacing}, how to adjust the vertical spacing with
11253 the @code{\x} escape.
11254 @endDefesc
11257 @c =====================================================================
11259 @node Traps, Diversions, Drawing Requests, gtroff Reference
11260 @section Traps
11261 @cindex traps
11263 @dfn{Traps} are locations, which, when reached, call a specified
11264 macro.  These traps can occur at a given location on the page, at a
11265 given location in the current diversion, at a blank line,
11266 after a certain number of input lines, or at the end of input.
11268 @cindex planting a trap
11269 @cindex trap, planting
11270 Setting a trap is also called @dfn{planting}.
11271 @cindex trap, springing
11272 @cindex springing a trap
11273 It is also said that a trap is @dfn{sprung} if the associated macro
11274 is executed.
11276 @menu
11277 * Page Location Traps::
11278 * Diversion Traps::
11279 * Input Line Traps::
11280 * Blank Line Traps::
11281 * End-of-input Traps::
11282 @end menu
11284 @c ---------------------------------------------------------------------
11286 @node Page Location Traps, Diversion Traps, Traps, Traps
11287 @subsection Page Location Traps
11288 @cindex page location traps
11289 @cindex traps, page location
11291 @dfn{Page location traps} perform an action when @code{gtroff}
11292 reaches or passes a certain vertical location on the page.  Page
11293 location traps have a variety of purposes, including:
11295 @itemize
11296 @item
11297 setting headers and footers
11299 @item
11300 setting body text in multiple columns
11302 @item
11303 setting footnotes
11304 @end itemize
11306 @DefreqList {vpt, flag}
11307 @DefregListEnd {.vpt}
11308 @cindex enabling vertical position traps (@code{vpt})
11309 @cindex vertical position traps, enabling (@code{vpt})
11310 @cindex vertical position trap enable register (@code{.vpt})
11311 Enable vertical position traps if @var{flag} is non-zero, or disables
11312 them otherwise.  Vertical position traps are traps set by the @code{wh}
11313 or @code{dt} requests.  Traps set by the @code{it} request are not
11314 vertical position traps.  The parameter that controls whether vertical
11315 position traps are enabled is global.  Initially vertical position traps
11316 are enabled.  The current setting of this is available in the
11317 @code{.vpt} read-only number register.
11319 Note that a page can't be ejected if @code{vpt} is set to zero.
11320 @endDefreq
11322 @Defreq {wh, dist [@Var{macro}]}
11323 Set a page location trap.  Non-negative values for @var{dist} set
11324 the trap relative to the top of the page; negative values set
11325 the trap relative to the bottom of the page.  Default scaling
11326 indicator is @samp{v}.
11328 @var{macro} is the name of the macro to execute when the
11329 trap is sprung.  If @var{macro} is missing, remove the first trap
11330 (if any) at @var{dist}.
11332 @cindex page headers
11333 @cindex page footers
11334 @cindex headers
11335 @cindex footers
11336 The following is a simple example of how many macro packages
11337 set headers and footers.
11339 @Example
11340 .de hd                \" Page header
11341 '  sp .5i
11342 .  tl 'Title''date'
11343 '  sp .3i
11346 .de fo                \" Page footer
11347 '  sp 1v
11348 .  tl ''%''
11349 '  bp
11352 .wh 0   hd            \" trap at top of the page
11353 .wh -1i fo            \" trap one inch from bottom
11354 @endExample
11356 A trap at or below the bottom of the page is ignored; it can be made
11357 active by either moving it up or increasing the page length so that the
11358 trap is on the page.
11360 It is possible to have more than one trap at the same location; to do so,
11361 the traps must be defined at different locations, then moved together with
11362 the @code{ch} request; otherwise the second trap would replace the first
11363 one.  Earlier defined traps hide later defined traps if moved to the same
11364 position (the many empty lines caused by the @code{bp} request are omitted
11365 in the following example):
11367 @Example
11368 .de a
11369 .  nop a
11371 .de b
11372 .  nop b
11374 .de c
11375 .  nop c
11378 .wh 1i a
11379 .wh 2i b
11380 .wh 3i c
11382     @result{} a b c
11383 @endExample
11384 @Example
11385 .ch b 1i
11386 .ch c 1i
11388     @result{} a
11389 @endExample
11390 @Example
11391 .ch a 0.5i
11393     @result{} a b
11394 @endExample
11395 @endDefreq
11397 @Defreg {.t}
11398 @cindex distance to next trap register (@code{.t})
11399 @cindex trap, distance, register (@code{.t})
11400 A read-only number register holding the distance to the next trap.
11402 If there are no traps between the current position and the bottom of the
11403 page, it contains the distance to the page bottom.  In a diversion, the
11404 distance to the page bottom is infinite (the returned value is the biggest
11405 integer which can be represented in @code{groff}) if there are no diversion
11406 traps.
11407 @endDefreg
11409 @Defreq {ch, macro [@Var{dist}]}
11410 @cindex changing trap location (@code{ch})
11411 @cindex trap, changing location (@code{ch})
11412 Change the location of a trap.
11413 The first argument is the name of the macro to be invoked at
11414 the trap, and the second argument is the new location for the trap
11415 (note that the parameters are specified in opposite order as in the
11416 @code{wh} request).  This is useful for building up footnotes in a
11417 diversion to allow more space at the bottom of the page for them.
11419 Default scaling indicator for @var{dist} is @samp{v}.  If @var{dist}
11420 is missing, the trap is removed.
11422 @c XXX
11424 @ignore
11425 @Example
11426 ... (simplified) footnote example ...
11427 @endExample
11428 @end ignore
11429 @endDefreq
11431 @Defreg {.ne}
11432 The read-only number register @code{.ne} contains the amount of space
11433 that was needed in the last @code{ne} request that caused a trap to be
11434 sprung.  Useful in conjunction with the @code{.trunc} register.
11435 @xref{Page Control}, for more information.
11437 Since the @code{.ne} register is only set by traps it doesn't make
11438 much sense to use it outside of trap macros.
11439 @endDefreg
11441 @Defreg {.trunc}
11442 @cindex @code{ne} request, and the @code{.trunc} register
11443 @cindex truncated vertical space register (@code{.trunc})
11444 A read-only register containing the amount of vertical space truncated
11445 by the most recently sprung vertical position trap, or, if the trap was
11446 sprung by an @code{ne} request, minus the amount of vertical motion
11447 produced by the @code{ne} request.  In other words, at the point a trap
11448 is sprung, it represents the difference of what the vertical position
11449 would have been but for the trap, and what the vertical position
11450 actually is.
11452 Since the @code{.trunc} register is only set by traps and it doesn't make
11453 much sense to use it outside of trap macros.
11454 @endDefreg
11456 @Defreg {.pe}
11457 @cindex @code{bp} request, and traps (@code{.pe})
11458 @cindex traps, sprung by @code{bp} request (@code{.pe})
11459 @cindex page ejecting register (@code{.pe})
11460 A read-only register which is set to@tie{}1 while a page is ejected with
11461 the @code{bp} request (or by the end of input).
11463 Outside of traps this register is always zero.  In the following example,
11464 only the second call to@tie{}@code{x} is caused by @code{bp}.
11466 @Example
11467 .de x
11468 \&.pe=\\n[.pe]
11471 .wh 1v x
11472 .wh 4v x
11473 A line.
11475 Another line.
11477     @result{} A line.
11478               .pe=0
11479               Another line.
11481               .pe=1
11482 @endExample
11483 @endDefreg
11485 @cindex diversions, and traps
11486 @cindex traps, and diversions
11487 An important fact to consider while designing macros is that diversions and
11488 traps do not interact normally.  For example, if a trap invokes a header
11489 macro (while outputting a diversion) which tries to change the font on the
11490 current page, the effect will not be visible before the diversion has
11491 completely been printed (except for input protected with @code{\!} or
11492 @code{\?}) since the data in the diversion is already formatted.  In most
11493 cases, this is not the expected behaviour.
11495 @c ---------------------------------------------------------------------
11497 @node Diversion Traps, Input Line Traps, Page Location Traps, Traps
11498 @subsection Diversion Traps
11499 @cindex diversion traps
11500 @cindex traps, diversion
11502 @Defreq {dt, dist macro}
11503 @cindex @code{.t} register, and diversions
11504 @cindex setting diversion trap (@code{dt})
11505 @cindex diversion trap, setting (@code{dt})
11506 @cindex trap, diversion, setting (@code{dt})
11507 Set a trap @emph{within} a diversion.
11508 @var{dist} is the location of the trap
11509 (identical to the @code{wh} request; default scaling indicator is
11510 @samp{v}) and @var{macro} is the name of the macro to be invoked.  The
11511 number register @code{.t} still works within diversions.
11512 @xref{Diversions}, for more information.
11513 @endDefreq
11515 @c ---------------------------------------------------------------------
11517 @node Input Line Traps, Blank Line Traps, Diversion Traps, Traps
11518 @subsection Input Line Traps
11519 @cindex input line traps
11520 @cindex traps, input line
11522 @DefreqList {it, n macro}
11523 @DefreqItem {itc, n macro}
11524 @cindex setting input line trap (@code{it})
11525 @cindex input line trap, setting (@code{it})
11526 @cindex trap, input line, setting (@code{it})
11527 Set an input line trap.
11528 @var{n}@tie{}is the number of lines of input which may be read before
11529 springing the trap, @var{macro} is the macro to be invoked.
11530 Request lines are not counted as input lines.
11532 For example, one possible use is to have a macro which prints the
11533 next @var{n}@tie{}lines in a bold font.
11535 @Example
11536 .de B
11537 .  it \\$1 B-end
11538 .  ft B
11541 .de B-end
11542 .  ft R
11544 @endExample
11546 @cindex input line traps and interrupted lines (@code{itc})
11547 @cindex interrupted lines and input line traps (@code{itc})
11548 @cindex traps, input line, and interrupted lines (@code{itc})
11549 @cindex lines, interrupted, and input line traps (@code{itc})
11550 The @code{itc} request is identical
11551 except that an interrupted text line (ending with @code{\c})
11552 is not counted as a separate line.
11554 Both requests are associated with the current environment
11555 (@pxref{Environments}); switching to another environment disables the
11556 current input trap, and going back reactivates it, restoring the number
11557 of already processed lines.
11558 @endDefreq
11560 @c ---------------------------------------------------------------------
11562 @node Blank Line Traps, End-of-input Traps, Input Line Traps, Traps
11563 @subsection Blank Line Traps
11564 @cindex blank line traps
11565 @cindex traps, blank line
11567 @Defreq {blm, macro}
11568 @cindex blank line macro (@code{blm})
11569 Set a blank line trap.
11570 @code{gtroff} executes @var{macro} when it encounters a blank line in
11571 the input file.
11572 @endDefreq
11574 @c ---------------------------------------------------------------------
11576 @node End-of-input Traps,  , Blank Line Traps, Traps
11577 @subsection End-of-input Traps
11578 @cindex end-of-input traps
11579 @cindex traps, end-of-input
11581 @Defreq {em, macro}
11582 @cindex setting end-of-input trap (@code{em})
11583 @cindex end-of-input trap, setting (@code{em})
11584 @cindex trap, end-of-input, setting (@code{em})
11585 @cindex end-of-input macro (@code{em})
11586 @cindex macro, end-of-input (@code{em})
11587 Set a trap at the end of input.  @var{macro} is executed after the
11588 last line of the input file has been processed.
11590 For example, if the document had to have a section at the bottom of the
11591 last page for someone to approve it, the @code{em} request could be
11592 used.
11594 @Example
11595 .de approval
11596 .  ne 5v
11597 .  sp |(\\n[.t] - 6v)
11598 .  in +4i
11599 .  lc _
11600 .  br
11601 Approved:\t\a
11602 .  sp
11603 Date:\t\t\a
11606 .em approval
11607 @endExample
11608 @endDefreq
11611 @c =====================================================================
11613 @node Diversions, Environments, Traps, gtroff Reference
11614 @section Diversions
11615 @cindex diversions
11617 In @code{gtroff} it is possible to @dfn{divert} text into a named
11618 storage area.  Due to the similarity to defining macros it is sometimes
11619 said to be stored in a macro.  This is used for saving text for output
11620 at a later time, which is useful for keeping blocks of text on the same
11621 page, footnotes, tables of contents, and indices.
11623 @cindex top-level diversion
11624 @cindex diversion, top-level
11625 For orthogonality it is said that @code{gtroff} is in the @dfn{top-level
11626 diversion} if no diversion is active (i.e., the data is diverted to the
11627 output device).
11629 @DefreqList {di, macro}
11630 @DefreqListEnd {da, macro}
11631 @cindex beginning diversion (@code{di})
11632 @cindex diversion, beginning (@code{di})
11633 @cindex ending diversion (@code{di})
11634 @cindex diversion, ending (@code{di})
11635 @cindex appending to a diversion (@code{da})
11636 @cindex diversion, appending (@code{da})
11637 Begin a diversion.  Like the @code{de}
11638 request, it takes an argument of a macro name to divert subsequent text
11639 into.  The @code{da} macro appends to an existing diversion.
11641 @code{di} or @code{da} without an argument ends the diversion.
11642 @endDefreq
11644 @DefreqList {box, macro}
11645 @DefreqListEnd {boxa, macro}
11646 Begin (or appends to) a diversion like the
11647 @code{di} and @code{da} requests.
11648 The difference is that @code{box} and @code{boxa}
11649 do not include a partially-filled line in the diversion.
11651 Compare this:
11653 @Example
11654 Before the box.
11655 .box xxx
11656 In the box.
11658 .box
11659 After the box.
11661     @result{} Before the box.  After the box.
11662 .xxx
11663     @result{} In the box.
11664 @endExample
11666 @noindent
11667 with this:
11669 @Example
11670 Before the diversion.
11671 .di yyy
11672 In the diversion.
11675 After the diversion.
11677     @result{} After the diversion.
11678 .yyy
11679     @result{} Before the diversion.  In the diversion.
11680 @endExample
11682 @code{box} or @code{boxa} without an argument ends the diversion.
11683 @endDefreq
11685 @DefregList {.z}
11686 @DefregListEnd {.d}
11687 @cindex @code{nl} register, and @code{.d}
11688 @cindex nested diversions
11689 @cindex diversion, nested
11690 @cindex diversion name register (@code{.z})
11691 @cindex vertical position in diversion register (@code{.d})
11692 @cindex position, vertical, in diversion, register (@code{.d})
11693 @cindex diversion, vertical position in, register (@code{.d})
11694 Diversions may be nested.  The read-only number register @code{.z}
11695 contains the name of the current diversion (this is a string-valued
11696 register).  The read-only number register @code{.d} contains the current
11697 vertical place in the diversion.  If not in a diversion it is the same
11698 as register @code{nl}.
11699 @endDefreg
11701 @Defreg {.h}
11702 @cindex high-water mark register (@code{.h})
11703 @cindex mark, high-water, register (@code{.h})
11704 @cindex position of lowest text line (@code{.h})
11705 @cindex text line, position of lowest (@code{.h})
11706 The @dfn{high-water mark} on the current page.  It corresponds to the
11707 text baseline of the lowest line on the page.  This is a read-only
11708 register.
11710 @Example
11711 .tm .h==\n[.h], nl==\n[nl]
11712     @result{} .h==0, nl==-1
11713 This is a test.
11715 .sp 2
11716 .tm .h==\n[.h], nl==\n[nl]
11717     @result{} .h==40, nl==120
11718 @endExample
11720 @cindex @code{.h} register, difference to @code{nl}
11721 @cindex @code{nl} register, difference to @code{.h}
11722 @noindent
11723 As can be seen in the previous example, empty lines are not considered
11724 in the return value of the @code{.h} register.
11725 @endDefreg
11727 @DefregList {dn}
11728 @DefregListEnd {dl}
11729 @cindex @code{dn} register, and @code{da} (@code{boxa})
11730 @cindex @code{dl} register, and @code{da} (@code{boxa})
11731 @cindex @code{da} request, and @code{dn} (@code{dl})
11732 @cindex @code{boxa} request, and @code{dn} (@code{dl})
11733 After completing a diversion, the read-write number registers @code{dn}
11734 and @code{dl} contain the vertical and horizontal size of the diversion.
11735 Note that only the just processed lines are counted: For the computation
11736 of @code{dn} and @code{dl}, the requests @code{da} and @code{boxa} are
11737 handled as if @code{di} and @code{box} had been used -- lines which have
11738 been already stored in a macro are not taken into account.
11740 @Example
11741 .\" Center text both horizontally & vertically
11743 .\" Enclose macro definitions in .eo and .ec
11744 .\" to avoid the doubling of the backslash
11746 .\" macro .(c starts centering mode
11747 .de (c
11748 .  br
11749 .  ev (c
11750 .  evc 0
11751 .  in 0
11752 .  nf
11753 .  di @@c
11755 @endExample
11756 @Example
11757 .\" macro .)c terminates centering mode
11758 .de )c
11759 .  br
11760 .  ev
11761 .  di
11762 .  nr @@s (((\n[.t]u - \n[dn]u) / 2u) - 1v)
11763 .  sp \n[@@s]u
11764 .  ce 1000
11765 .  @@c
11766 .  ce 0
11767 .  sp \n[@@s]u
11768 .  br
11769 .  fi
11770 .  rr @@s
11771 .  rm @@s
11772 .  rm @@c
11774 .\" End of macro definitions, restore escape mechanism
11776 @endExample
11777 @endDefreg
11779 @DefescList {\\!, , , }
11780 @DefescListEnd {\\?, , anything, \\?}
11781 @cindex transparent output (@code{\!}, @code{\?})
11782 @cindex output, transparent (@code{\!}, @code{\?})
11783 Prevent requests, macros, and escapes from being
11784 interpreted when read into a diversion.  Both escapes take the given text
11785 and @dfn{transparently} embed it into the diversion.  This is useful for
11786 macros which shouldn't be invoked until the diverted text is actually
11787 output.
11789 The @code{\!} escape transparently embeds text up to
11790 and including the end of the line.
11791 The @code{\?} escape transparently embeds text until the next
11792 occurrence of the @code{\?} escape.  Example:
11794 @Example
11795 \?@var{anything}\?
11796 @endExample
11798 @noindent
11799 @var{anything} may not contain newlines; use @code{\!}  to embed
11800 newlines in a diversion.  The escape sequence @code{\?} is also
11801 recognized in copy mode and turned into a single internal code; it is
11802 this code that terminates @var{anything}.  Thus the following example
11803 prints@tie{}4.
11805 @Example
11806 .nr x 1
11808 .di d
11809 \?\\?\\\\?\\\\\\\\nx\\\\?\\?\?
11811 .nr x 2
11812 .di e
11815 .nr x 3
11816 .di f
11819 .nr x 4
11821 @endExample
11823 Both escapes read the data in copy mode.
11825 @cindex @code{\!}, in top-level diversion
11826 @cindex top-level diversion, and @code{\!}
11827 @cindex diversion, top-level, and @code{\!}
11828 If @code{\!} is used in the top-level diversion, its argument is
11829 directly embedded into the @code{gtroff} intermediate output.  This can
11830 be used for example to control a postprocessor which processes the data
11831 before it is sent to the device driver.
11833 @cindex @code{\?}, in top-level diversion
11834 @cindex top-level diversion, and @code{\?}
11835 @cindex diversion, top-level, and @code{\?}
11836 The @code{\?} escape used in the top-level diversion produces no output
11837 at all; its argument is simply ignored.
11838 @endDefesc
11840 @cindex @code{\!}, and @code{output}
11841 @cindex @code{output} request, and @code{\!}
11842 @Defreq {output, string}
11843 Emit @var{string} directly to the @code{gtroff} intermediate output
11844 (subject to copy-mode interpretation); this is similar to @code{\!} used
11845 at the top level.  An initial double quote in @var{string} is stripped off
11846 to allow initial blanks.
11848 This request can't be used before the first page has started -- if you get
11849 an error, simply insert @code{.br} before the @code{output} request.
11851 Without argument, @code{output} is ignored.
11853 Use with caution!  It is normally only needed for mark-up used by a
11854 postprocessor which does something with the output before sending it to
11855 the output device, filtering out @var{string} again.
11856 @endDefreq
11858 @Defreq {asciify, div}
11859 @cindex unformatting diversions (@code{asciify})
11860 @cindex diversion, unformatting (@code{asciify})
11861 @cindex @code{trin} request, and @code{asciify}
11862 @dfn{Unformat} the diversion specified by @var{div}
11863 in such a way that @acronym{ASCII} characters, characters translated with
11864 the @code{trin} request, space characters, and some escape sequences that
11865 were formatted and diverted are treated like ordinary input
11866 characters when the diversion is reread.  It can be also used for gross
11867 hacks; for example, the following sets register@tie{}@code{n} to@tie{}1.
11869 @Example
11870 .tr @@.
11871 .di x
11872 @@nr n 1
11875 .tr @@@@
11876 .asciify x
11878 @endExample
11880 @xref{Copy-in Mode}.
11881 @endDefreq
11883 @Defreq {unformat, div}
11884 Like @code{asciify}, unformat the specified diversion.
11885 However, @code{unformat} only unformats spaces and tabs
11886 between words.
11887 Unformatted tabs are treated as input tokens,
11888 and spaces are stretchable again.
11890 The vertical size of lines is not preserved; glyph information (font,
11891 font size, space width, etc.)@: is retained.
11892 @endDefreq
11895 @c =====================================================================
11897 @node Environments, Suppressing output, Diversions, gtroff Reference
11898 @section Environments
11899 @cindex environments
11901 It happens frequently that some text should be printed in a certain
11902 format regardless of what may be in effect at the time, for example, in
11903 a trap invoked macro to print headers and footers.  To solve this
11904 @code{gtroff} processes text in @dfn{environments}.  An
11905 environment contains most of the parameters that control text
11906 processing.  It is possible to switch amongst these environments; by
11907 default @code{gtroff} processes text in environment@tie{}0.  The
11908 following is the information kept in an environment.
11910 @itemize @bullet
11911 @item
11912 font parameters (size, family, style, glyph height and slant, space
11913 and sentence space size)
11915 @item
11916 page parameters (line length, title length, vertical spacing,
11917 line spacing, indentation, line numbering, centering, right-justifying,
11918 underlining, hyphenation data)
11920 @item
11921 fill and adjust mode
11923 @item
11924 tab stops, tab and leader characters, escape character,
11925 no-break and hyphen indicators, margin character data
11927 @item
11928 partially collected lines
11930 @item
11931 input traps
11933 @item
11934 drawing and fill colours
11935 @end itemize
11937 These environments may be given arbitrary names (see @ref{Identifiers},
11938 for more info).  Old versions of @code{troff} only had environments
11939 named @samp{0}, @samp{1}, and @samp{2}.
11941 @DefreqList {ev, [@Var{env}]}
11942 @DefregListEnd {.ev}
11943 @cindex switching environments (@code{ev})
11944 @cindex environment, switching (@code{ev})
11945 @cindex environment number/name register (@code{.ev})
11946 Switch to another environment.  The argument @var{env} is the name of
11947 the environment to switch to.  With no argument, @code{gtroff} switches
11948 back to the previous environment.  There is no limit on the number of
11949 named environments; they are created the first time that they are
11950 referenced.  The @code{.ev} read-only register contains the name or
11951 number of the current environment.  This is a string-valued register.
11953 Note that a call to @code{ev} (with argument) pushes the previously
11954 active environment onto a stack.  If, say, environments @samp{foo},
11955 @samp{bar}, and @samp{zap} are called (in that order), the first
11956 @code{ev} request without parameter switches back to environment
11957 @samp{bar} (which is popped off the stack), and a second call
11958 switches back to environment @samp{foo}.
11960 Here is an example:
11962 @Example
11963 .ev footnote-env
11964 .fam N
11965 .ps 6
11966 .vs 8
11967 .ll -.5i
11972 .ev footnote-env
11973 \(dg Note the large, friendly letters.
11975 @endExample
11976 @endDefreq
11978 @Defreq {evc, env}
11979 @cindex copying environment (@code{evc})
11980 @cindex environment, copying (@code{evc})
11981 Copy the environment @var{env} into the current environment.
11983 The following environment data is not copied:
11985 @itemize @bullet
11986 @item
11987 Partially filled lines.
11989 @item
11990 The status whether the previous line was interrupted.
11992 @item
11993 The number of lines still to center, or to right-justify, or to underline
11994 (with or without underlined spaces); they are set to zero.
11996 @item
11997 The status whether a temporary indent is active.
11999 @item
12000 Input traps and its associated data.
12002 @item
12003 Line numbering mode is disabled; it can be reactivated with
12004 @w{@samp{.nm +0}}.
12006 @item
12007 The number of consecutive hyphenated lines (set to zero).
12008 @end itemize
12009 @endDefreq
12011 @DefregList {.w}
12012 @DefregItem {.cht}
12013 @DefregItem {.cdp}
12014 @DefregListEnd {.csk}
12015 @cindex environment, dimensions of last glyph (@code{.w}, @code{.cht}, @code{.cdp}, @code{.csk})
12016 @cindex width, of last glyph (@code{.w})
12017 @cindex height, of last glyph (@code{.cht})
12018 @cindex depth, of last glyph (@code{.cdp})
12019 @cindex skew, of last glyph (@code{.csk})
12020 @cindex last glyph, dimensions (@code{.w}, @code{.cht}, @code{.cdp}, @code{.csk})
12021 @cindex glyph, last, dimensions (@code{.w}, @code{.cht}, @code{.cdp}, @code{.csk})
12022 The @code{\n[.w]} register contains the
12023 width of the last glyph added to the current environment.
12025 The @code{\n[.cht]} register contains the
12026 height of the last glyph added to the current environment.
12028 The @code{\n[.cdp]} register contains the
12029 depth of the last glyph added to the current environment.
12030 It is positive for glyphs extending below the baseline.
12032 The @code{\n[.csk]} register contains the
12033 @dfn{skew} (how far to the right of the glyph's center
12034 that @code{gtroff} should place an accent)
12035 of the last glyph added to the current environment.
12036 @endDefreg
12038 @Defreg {.n}
12039 @cindex environment, previous line length (@code{.n})
12040 @cindex line length, previous (@code{.n})
12041 @cindex length of previous line (@code{.n})
12042 @cindex previous line length (@code{.n})
12043 The @code{\n[.n]} register contains the
12044 length of the previous output line in the current environment.
12045 @endDefreg
12048 @c =====================================================================
12050 @node Suppressing output, Colors, Environments, gtroff Reference
12051 @section Suppressing output
12053 @Defesc {\\O, , num, }
12054 @cindex suppressing output (@code{\O})
12055 @cindex output, suppressing (@code{\O})
12056 Disable or enable output depending on the value of @var{num}:
12058 @table @samp
12059 @item \O0
12060 Disable any glyphs from being emitted to the device driver, provided that
12061 the escape occurs at the outer level (see @code{\O[3]} and @code{\O[4]}).
12062 Motion is not suppressed so effectively @code{\O[0]} means @emph{pen up}.
12064 @item \O1
12065 Enable output of glyphs, provided that the escape occurs at the outer
12066 level.
12067 @end table
12069 @vindex opminx
12070 @vindex opminy
12071 @vindex opmaxx
12072 @vindex opmaxy
12073 @code{\O0} and @code{\O1} also reset the four registers @samp{opminx},
12074 @samp{opminy}, @samp{opmaxx}, and @samp{opmaxy} to @minus{}1.
12075 @xref{Register Index}.  These four registers mark the top left and
12076 bottom right hand corners of a box which encompasses all written glyphs.
12078 For example the input text:
12080 @Example
12081 Hello \O[0]world \O[1]this is a test.
12082 @endExample
12084 @noindent
12085 produces the following output:
12087 @Example
12088 Hello       this is a test.
12089 @endExample
12091 @table @samp
12092 @item \O2
12093 Provided that the escape occurs at the outer level, enable output of
12094 glyphs and also write out to @code{stderr} the page number and four
12095 registers encompassing the glyphs previously written since the last call
12096 to @code{\O}.
12098 @item \O3
12099 Begin a nesting level.  At start-up, @code{gtroff} is at outer level.
12101 @item \O4
12102 End a nesting level.
12104 @item \O[5@var{P}@var{filename}]
12105 This escape is @code{grohtml} specific.  Provided that this escape
12106 occurs at the outer nesting level write the @code{filename} to
12107 @code{stderr}.  The position of the image, @var{P}, must be specified
12108 and must be one of @code{l}, @code{r}, @code{c}, or@tie{}@code{i} (left,
12109 right, centered, inline).  @var{filename} will be associated with the
12110 production of the next inline image.
12111 @end table
12112 @endDefesc
12114 @c =====================================================================
12116 @node Colors, I/O, Suppressing output, gtroff Reference
12117 @section Colors
12118 @cindex colors
12120 @DefreqList {color, [@Var{n}]}
12121 @DefregListEnd {.color}
12122 If @var{n} is missing or non-zero, activate colors (this is the default);
12123 otherwise, turn it off.
12125 The read-only number register @code{.color} is@tie{}1 if colors are active,
12126 0@tie{}otherwise.
12128 Internally, @code{color} sets a global flag; it does not produce a token.
12129 Similar to the @code{cp} request, you should use it at the beginning of
12130 your document to control color output.
12132 Colors can be also turned off with the @option{-c} command line option.
12133 @endDefreq
12135 @Defreq {defcolor, ident scheme color_components}
12136 Define color with name @var{ident}.  @var{scheme} can be one of  the
12137 following values: @code{rgb} (three components), @code{cmy} (three
12138 components), @code{cmyk} (four components), and @code{gray} or
12139 @code{grey} (one component).
12141 @cindex default color
12142 @cindex color, default
12143 Color components can be given either as a hexadecimal string or as
12144 positive decimal integers in the range 0--65535.  A hexadecimal string
12145 contains all color components concatenated.  It must start with either
12146 @code{#} or @code{##}; the former specifies hex values in the range
12147 0--255 (which are internally multiplied by@tie{}257), the latter in the
12148 range 0--65535.  Examples: @code{#FFC0CB} (pink), @code{##ffff0000ffff}
12149 (magenta).  The default color name @c{default} can't be redefined; its
12150 value is device-specific (usually black).  It is possible that the
12151 default color for @code{\m} and @code{\M} is not identical.
12153 @cindex @code{f} unit, and colors
12154 @cindex unit, @code{f}, and colors
12155 A new scaling indicator@tie{}@code{f} has been introduced which multiplies
12156 its value by 65536; this makes it convenient to specify color components
12157 as fractions in the range 0 to@tie{}1 (1f equals 65536u).  Example:
12159 @Example
12160 .defcolor darkgreen rgb 0.1f 0.5f 0.2f
12161 @endExample
12163 Note that @code{f} is the default scaling indicator for the
12164 @code{defcolor} request, thus the above statement is equivalent to
12166 @Example
12167 .defcolor darkgreen rgb 0.1 0.5 0.2
12168 @endExample
12169 @endDefreq
12171 @DefescList {\\m, , c, }
12172 @DefescItem {\\m, @lparen{}, co, }
12173 @DefescListEnd {\\m, @lbrack{}, color, @rbrack}
12174 Set drawing color.  The following example shows how to turn the next four
12175 words red.
12177 @Example
12178 \m[red]these are in red\m[] and these words are in black.
12179 @endExample
12181 The escape @code{\m[]} returns to the previous color.
12183 The drawing color is associated with the current environment
12184 (@pxref{Environments}).
12186 Note that @code{\m} doesn't produce an input token in @code{gtroff}.
12187 As a consequence, it can be used in requests like @code{mc} (which
12188 expects a single character as an argument) to change the color on
12189 the fly:
12191 @Example
12192 .mc \m[red]x\m[]
12193 @endExample
12194 @endDefesc
12196 @DefescList {\\M, , c, }
12197 @DefescItem {\\M, @lparen{}, co, }
12198 @DefescListEnd {\\M, @lbrack{}, color, @rbrack}
12199 Set background color for filled objects drawn with the
12200 @code{\D'@dots{}'} commands.
12202 A red ellipse can be created with the following code:
12204 @Example
12205 \M[red]\h'0.5i'\D'E 2i 1i'\M[]
12206 @endExample
12208 The escape @code{\M[]} returns to the previous fill color.
12210 The fill color is associated with the current environment
12211 (@pxref{Environments}).
12213 Note that @code{\M} doesn't produce an input token in @code{gtroff}.
12214 @endDefesc
12217 @c =====================================================================
12219 @node I/O, Postprocessor Access, Colors, gtroff Reference
12220 @section I/O
12221 @cindex i/o
12222 @cindex input and output requests
12223 @cindex requests for input and output
12224 @cindex output and input requests
12226 @code{gtroff} has several requests for including files:
12228 @Defreq {so, file}
12229 @cindex including a file (@code{so})
12230 @cindex file, inclusion (@code{so})
12231 Read in the specified @var{file} and
12232 includes it in place of the @code{so} request.  This is quite useful for
12233 large documents, e.g.@: keeping each chapter in a separate file.
12234 @xref{gsoelim}, for more information.
12236 Since @code{gtroff} replaces the @code{so} request with the contents
12237 of @code{file}, it makes a difference whether the data is terminated with
12238 a newline or not: Assuming that file @file{xxx} contains the word
12239 @samp{foo} without a final newline, this
12241 @Example
12242 This is
12243 .so xxx
12245 @endExample
12247 @noindent
12248 yields @samp{This is foobar}.
12249 @endDefreq
12251 @Defreq {pso, command}
12252 Read the standard output from the specified @var{command}
12253 and includes it in place of the @code{pso} request.
12255 @cindex safer mode
12256 @cindex mode, safer
12257 @cindex unsafe mode
12258 @cindex mode, unsafe
12259 This request causes an error if used in safer mode (which is the default).
12260 Use @code{groff}'s or @code{troff}'s @option{-U} option to activate unsafe
12261 mode.
12263 The comment regarding a final newline for the @code{so} request is valid
12264 for @code{pso} also.
12265 @endDefreq
12267 @Defreq {mso, file}
12268 Identical to the @code{so} request except that @code{gtroff} searches for
12269 the specified @var{file} in the same directories as macro files for the
12270 the @option{-m} command line option.  If the file name to be included
12271 has the form @file{@var{name}.tmac} and it isn't found, @code{mso} tries
12272 to include @file{tmac.@var{name}} and vice versa.
12273 @endDefreq
12275 @DefreqList {trf, file}
12276 @DefreqListEnd {cf, file}
12277 @cindex transparent output (@code{cf}, @code{trf})
12278 @cindex output, transparent (@code{cf}, @code{trf})
12279 Transparently output the contents of @var{file}.  Each line is output
12280 as if it were preceded by @code{\!}; however, the lines are not subject
12281 to copy mode interpretation.  If the file does not end with a newline,
12282 then a newline is added (@code{trf} only).  For example, to define a
12283 macro@tie{}@code{x} containing the contents of file@tie{}@file{f}, use
12285 @Example
12286 .di x
12287 .trf f
12289 @endExample
12291 Both @code{trf} and @code{cf}, when used in a diversion,
12292 embeds an object in the diversion which, when reread, causes the
12293 contents of @var{file} to be transparently copied through to the
12294 output.  In @acronym{UNIX} @code{troff}, the contents of @var{file}
12295 is immediately copied through to the output regardless of whether there
12296 is a current diversion; this behaviour is so anomalous that it must be
12297 considered a bug.
12299 @cindex @code{trf} request, and invalid characters
12300 @cindex characters, invalid for @code{trf} request
12301 @cindex invalid characters for @code{trf} request
12302 While @code{cf} copies the contents of @var{file} completely unprocessed,
12303 @code{trf} disallows characters such as NUL that are not valid
12304 @code{gtroff} input characters (@pxref{Identifiers}).
12306 Both requests cause a line break.
12307 @endDefreq
12309 @Defreq {nx, [@Var{file}]}
12310 @cindex processing next file (@code{nx})
12311 @cindex file, processing next (@code{nx})
12312 @cindex next file, processing (@code{nx})
12313 Force @code{gtroff} to continue processing of
12314 the file specified as an argument.  If no argument is given, immediately
12315 jump to the end of file.
12316 @endDefreq
12318 @Defreq {rd, [@Var{prompt} [@Var{arg1} @Var{arg2} @dots{}]]}
12319 @cindex reading from standard input (@code{rd})
12320 @cindex standard input, reading from (@code{rd})
12321 @cindex input, standard, reading from (@code{rd})
12322 Read from standard input, and include what is read as though it
12323 were part of the input file.  Text is read until a blank line
12324 is encountered.
12326 If standard input is a TTY input device (keyboard), write @var{prompt}
12327 to standard error, followed by a colon (or send BEL for a beep if no
12328 argument is given).
12330 Arguments after @var{prompt} are available for the input.  For example,
12331 the line
12333 @Example
12334 .rd data foo bar
12335 @endExample
12337 with the input @w{@samp{This is \$2.}} prints
12339 @Example
12340 This is bar.
12341 @endExample
12342 @endDefreq
12344 @cindex form letters
12345 @cindex letters, form
12346 Using the @code{nx} and @code{rd} requests,
12347 it is easy to set up form letters.  The form
12348 letter template is constructed like this, putting the following lines
12349 into a file called @file{repeat.let}:
12351 @Example
12353 \*(td
12354 .sp 2
12360 Body of letter.
12362 .nx repeat.let
12363 @endExample
12365 @cindex @code{ex} request, used with @code{nx} and @code{rd}
12366 @noindent
12367 When this is run, a file containing the following lines should be
12368 redirected in.  Note that requests included in this file are executed
12369 as though they were part of the form letter.  The last block of input
12370 is the @code{ex} request which tells @code{groff} to stop processing.  If
12371 this was not there, @code{groff} would not know when to stop.
12373 @Example
12374 Trent A. Fisher
12375 708 NW 19th Av., #202
12376 Portland, OR  97209
12378 Dear Trent,
12380 Len Adollar
12381 4315 Sierra Vista
12382 San Diego, CA  92103
12384 Dear Mr. Adollar,
12387 @endExample
12389 @Defreq {pi, pipe}
12390 Pipe the output of @code{gtroff} to the shell command(s)
12391 specified by @var{pipe}.  This request must occur before
12392 @code{gtroff} has a chance to print anything.
12394 @cindex safer mode
12395 @cindex mode, safer
12396 @cindex unsafe mode
12397 @cindex mode, unsafe
12398 @code{pi} causes an error if used in safer mode (which is the default).
12399 Use @code{groff}'s or @code{troff}'s @option{-U} option to activate unsafe
12400 mode.
12402 Multiple calls to @code{pi} are allowed, acting as a chain.  For example,
12404 @Example
12405 .pi foo
12406 .pi bar
12408 @endExample
12410 is the same as @w{@samp{.pi foo | bar}}.
12412 @cindex @code{groff}, and @code{pi} request
12413 @cindex @code{pi} request, and @code{groff}
12414 Note that the intermediate output format of @code{gtroff} is piped to
12415 the specified commands.  Consequently, calling @code{groff} without the
12416 @option{-Z} option normally causes a fatal error.
12417 @endDefreq
12419 @DefreqList {sy, cmds}
12420 @DefregListEnd {systat}
12421 Execute the shell command(s) specified by @var{cmds}.  The output is not
12422 saved anyplace, so it is up to the user to do so.
12424 @cindex safer mode
12425 @cindex mode, safer
12426 @cindex unsafe mode
12427 @cindex mode, unsafe
12428 This request causes an error if used in safer mode (which is the default).
12429 Use @code{groff}'s or @code{troff}'s @option{-U} option to activate unsafe
12430 mode.
12432 For example, the following code fragment introduces the current time into a
12433 document:
12435 @cindex time, current
12436 @cindex current time
12437 @pindex perl
12438 @Example
12439 .sy perl -e 'printf ".nr H %d\\n.nr M %d\\n.nr S %d\\n",\
12440              (localtime(time))[2,1,0]' > /tmp/x\n[$$]
12441 .so /tmp/x\n[$$]
12442 .sy rm /tmp/x\n[$$]
12443 \nH:\nM:\nS
12444 @endExample
12446 @noindent
12447 Note that this works by having the @code{perl} script (run by @code{sy})
12448 print out the @code{nr} requests which set the number registers
12449 @code{H}, @code{M}, and @code{S}, and then reads those commands in with
12450 the @code{so} request.
12452 For most practical purposes, the number registers @code{seconds},
12453 @code{minutes}, and @code{hours} which are initialized at start-up of
12454 @code{gtroff} should be sufficient.  Use the @code{af} request to get a
12455 formatted output:
12457 @Example
12458 .af hours 00
12459 .af minutes 00
12460 .af seconds 00
12461 \n[hours]:\n[minutes]:\n[seconds]
12462 @endExample
12464 @cindex @code{system()} return value register (@code{systat})
12465 The @code{systat} read-write number register contains the return value
12466 of the @code{system()} function executed by the last @code{sy} request.
12467 @endDefreq
12469 @DefreqList {open, stream file}
12470 @DefreqListEnd {opena, stream file}
12471 @cindex opening file (@code{open})
12472 @cindex file, opening (@code{open})
12473 @cindex appending to a file (@code{opena})
12474 @cindex file, appending to (@code{opena})
12475 Open the specified @var{file} for writing and
12476 associates the specified @var{stream} with it.
12478 The @code{opena} request is like @code{open}, but if the file exists,
12479 append to it instead of truncating it.
12481 @cindex safer mode
12482 @cindex mode, safer
12483 @cindex unsafe mode
12484 @cindex mode, unsafe
12485 Both @code{open} and @code{opena} cause an error if used in safer mode
12486 (which is the default).  Use @code{groff}'s or @code{troff}'s @option{-U}
12487 option to activate unsafe mode.
12488 @endDefreq
12490 @DefreqList {write, stream data}
12491 @DefreqListEnd {writec, stream data}
12492 @cindex copy-in mode, and @code{write} requests
12493 @cindex mode, copy-in, and @code{write} requests
12494 @cindex writing to file (@code{write})
12495 @cindex file, writing to (@code{write})
12496 Write to the file associated with the specified @var{stream}.
12497 The stream must previously have
12498 been the subject of an open request.  The remainder of the line is
12499 interpreted as the @code{ds} request reads its second argument: A
12500 leading @samp{"} is stripped, and it is read in copy-in mode.
12502 The @code{writec} request is like @code{write}, but only
12503 @code{write} appends a newline to the data.
12504 @endDefreq
12506 @Defreq {writem, stream xx}
12507 @cindex @code{asciify} request, and @code{writem}
12508 Write the contents of the macro or string @var{xx}
12509 to the file associated with the specified @var{stream}.
12511 @var{xx} is read in copy mode, i.e., already formatted elements are
12512 ignored.  Consequently, diversions must be unformatted with the
12513 @code{asciify} request before calling @code{writem}.  Usually, this
12514 means a loss of information.
12515 @endDefreq
12517 @Defreq {close, stream}
12518 @cindex closing file (@code{close})
12519 @cindex file, closing (@code{close})
12520 Close the specified @var{stream};
12521 the stream is no longer an acceptable argument to the
12522 @code{write} request.
12524 Here a simple macro to write an index entry.
12526 @Example
12527 .open idx test.idx
12529 .de IX
12530 .  write idx \\n[%] \\$*
12533 .IX test entry
12535 .close idx
12536 @endExample
12537 @endDefreq
12539 @DefescList {\\V, , e, }
12540 @DefescItem {\\V, @lparen{}, ev, }
12541 @DefescListEnd {\\V, @lbrack{}, env, @rbrack}
12542 Interpolate the contents of the specified environment variable
12543 @var{env} (one-character name@tie{}@var{e}, two-character name @var{ev})
12544 as returned by the function @code{getenv}.  @code{\V} is interpreted
12545 in copy-in mode.
12546 @endDefesc
12549 @c =====================================================================
12551 @node Postprocessor Access, Miscellaneous, I/O, gtroff Reference
12552 @section Postprocessor Access
12553 @cindex postprocessor access
12554 @cindex access of postprocessor
12556 There are two escapes which give information directly to the
12557 postprocessor.  This is particularly useful for embedding
12558 @sc{PostScript} into the final document.
12560 @Defesc {\\X, ', xxx, '}
12561 Embeds its argument into the @code{gtroff}
12562 output preceded with @w{@samp{x X}}.
12564 @cindex @code{\&}, in @code{\X}
12565 @cindex @code{\)}, in @code{\X}
12566 @cindex @code{\%}, in @code{\X}
12567 @ifnotinfo
12568 @cindex @code{\:}, in @code{\X}
12569 @end ifnotinfo
12570 @ifinfo
12571 @cindex @code{\@r{<colon>}}, in @code{\X}
12572 @end ifinfo
12573 The escapes @code{\&}, @code{\)}, @code{\%}, and @code{\:} are ignored
12574 within @code{\X}, @w{@samp{\ }} and @code{\~} are converted to single
12575 space characters.  All other escapes (except @code{\\} which produces a
12576 backslash) cause an error.
12578 @kindex use_charnames_in_special
12579 @pindex DESC@r{, and @code{use_charnames_in_special}}
12580 @cindex @code{\X}, and special characters
12581 If the @samp{use_charnames_in_special} keyword is set in the @file{DESC}
12582 file, special characters no longer cause an error; the name @var{xx} is
12583 represented as @samp{\(@var{xx})} in the @w{@samp{x X}} output command.
12584 Additionally, the backslash is represented as @code{\\}.
12586 @samp{use_charnames_in_special} is currently used by @code{grohtml} only.
12587 @endDefesc
12589 @DefescList {\\Y, , n, }
12590 @DefescItem {\\Y, @lparen{}, nm, }
12591 @DefescListEnd {\\Y, @lbrack{}, name, @rbrack}
12592 This is approximately equivalent to @samp{\X'\*[@var{name}]'}
12593 (one-character name@tie{}@var{n}, two-character name @var{nm}).
12594 However, the contents of the string or macro @var{name} are not
12595 interpreted; also it is permitted for @var{name} to have been defined
12596 as a macro and thus contain newlines (it is not permitted for the
12597 argument to @code{\X} to contain newlines).  The inclusion of
12598 newlines requires an extension to the @acronym{UNIX} @code{troff}
12599 output format, and confuses drivers that do not know about this
12600 extension (@pxref{Device Control Commands}).
12601 @endDefesc
12603 @xref{Output Devices}.
12606 @c =====================================================================
12608 @node Miscellaneous, Gtroff Internals, Postprocessor Access, gtroff Reference
12609 @section Miscellaneous
12611 This section documents parts of @code{gtroff} which cannot (yet) be
12612 categorized elsewhere in this manual.
12614 @Defreq {nm, [@Var{start} [@Var{inc} [@Var{space} [@Var{indent}]]]]}
12615 @cindex printing line numbers (@code{nm})
12616 @cindex line numbers, printing (@code{nm})
12617 @cindex numbers, line, printing (@code{nm})
12618 Print line numbers.
12619 @var{start} is the line number of the @emph{next}
12620 output line.  @var{inc} indicates which line numbers are printed.
12621 For example, the value@tie{}5 means to emit only line numbers which
12622 are multiples of@tie{}5; this defaults to@tie{}1.  @var{space} is the
12623 space to be left between the number and the text; this defaults to
12624 one digit space.  The fourth argument is the indentation of the line
12625 numbers, defaulting to zero.  Both @var{space} and @var{indent} are
12626 given as multiples of digit spaces; they can be negative also.
12627 Without any arguments, line numbers are turned off.
12629 @code{gtroff} reserves three digit spaces for the line number (which is
12630 printed right-justified) plus the amount given by @var{indent}; the
12631 output lines are concatenated to the line numbers, separated by
12632 @var{space}, and @emph{without} reducing the line length.  Depending
12633 on the value of the horizontal page offset (as set with the
12634 @code{po} request), line numbers which are longer than the reserved
12635 space stick out to the left, or the whole line is moved to the right.
12637 Parameters corresponding to missing arguments are not changed; any
12638 non-digit argument (to be more precise, any argument starting with a
12639 character valid as a delimiter for identifiers) is also treated as
12640 missing.
12642 If line numbering has been disabled with a call to @code{nm} without
12643 an argument, it can be reactivated with @samp{.nm +0}, using the
12644 previously active line numbering parameters.
12646 The parameters of @code{nm} are associated with the current environment
12647 (@pxref{Environments}).  The current output line number is available
12648 in the number register @code{ln}.
12650 @Example
12651 .po 1m
12652 .ll 2i
12653 This test shows how line numbering works with groff.
12654 .nm 999
12655 This test shows how line numbering works with groff.
12657 .nm xxx 3 2
12658 .ll -\w'0'u
12659 This test shows how line numbering works with groff.
12660 .nn 2
12661 This test shows how line numbering works with groff.
12662 @endExample
12664 @noindent
12665 And here the result:
12667 @Example
12668  This  test shows how
12669  line numbering works
12670  999 with   groff.   This
12671 1000 test shows how  line
12672 1001 numbering works with
12673 1002 groff.
12674       This test shows how
12675       line      numbering
12676  works  with  groff.
12677  This test shows how
12678 1005  line      numbering
12679       works with groff.
12680 @endExample
12681 @endDefreq
12683 @Defreq {nn, [@Var{skip}]}
12684 Temporarily turn off line numbering.  The argument is the number
12685 of lines not to be numbered; this defaults to@tie{}1.
12686 @endDefreq
12688 @Defreq {mc, glyph [@Var{dist}]}
12689 @cindex margin glyph (@code{mc})
12690 @cindex glyph, for margins (@code{mc})
12691 Print a @dfn{margin character} to the right of the
12692 text.@footnote{@dfn{Margin character} is a misnomer since it is an
12693 output glyph.}  The first argument is the glyph to be
12694 printed.  The second argument is the distance away from the right
12695 margin.  If missing, the previously set value is used; default is
12696 10@dmn{pt}).  For text lines that are too long (that is, longer than
12697 the text length plus @var{dist}), the margin character is directly
12698 appended to the lines.
12700 With no arguments the margin character is turned off.
12701 If this occurs before a break, no margin character is printed.
12703 @cindex @code{tl} request, and @code{mc}
12704 For empty lines and lines produced by the @code{tl} request no margin
12705 character is emitted.
12707 The margin character is associated with the current environment
12708 (@pxref{Environments}).
12710 @pindex nrchbar
12711 @pindex changebar
12712 This is quite useful for indicating text that has changed, and, in fact,
12713 there are programs available for doing this (they are called
12714 @code{nrchbar} and @code{changebar} and can be found in any
12715 @samp{comp.sources.unix} archive.
12717 @Example
12718 .ll 3i
12719 .mc |
12720 This paragraph is highlighted with a margin
12721 character.
12723 Note that vertical space isn't marked.
12727 But we can fake it with `\&'.
12728 @endExample
12730 Result:
12732 @Example
12733 This  paragraph is highlighted |
12734 with a margin character.       |
12736 Note that vertical space isn't |
12737 marked.                        |
12738                                |
12739 But we can fake it with `\&'.  |
12740 @endExample
12741 @endDefreq
12743 @DefreqList {psbb, filename}
12744 @DefregItem {llx}
12745 @DefregItem {lly}
12746 @DefregItem {urx}
12747 @DefregListEnd {ury}
12748 @cindex PostScript, bounding box
12749 @cindex bounding box
12750 Retrieve the bounding box of the PostScript image
12751 found in @var{filename}.
12752 The file must conform to
12753 Adobe's @dfn{Document Structuring Conventions} (DSC);
12754 the command searches for a @code{%%BoundingBox} comment
12755 and extracts the bounding box values into the number registers
12756 @code{llx}, @code{lly}, @code{urx}, and @code{ury}.
12757 If an error occurs (for example, @code{psbb} cannot find
12758 the @code{%%BoundingBox} comment),
12759 it sets the four number registers to zero.
12760 @endDefreq
12763 @c =====================================================================
12765 @node Gtroff Internals, Debugging, Miscellaneous, gtroff Reference
12766 @section @code{gtroff} Internals
12768 @cindex input token
12769 @cindex token, input
12770 @cindex output node
12771 @cindex node, output
12772 @code{gtroff} processes input in three steps.  One or more input
12773 characters are converted to an @dfn{input token}.@footnote{Except the
12774 escapes @code{\f}, @code{\F}, @code{\H}, @code{\m}, @code{\M}, @code{\R},
12775 @code{\s}, and @code{\S} which are processed immediately if not in
12776 copy-in mode.}  Then, one or more input tokens are converted to an
12777 @dfn{output node}.  Finally, output nodes are converted to the
12778 intermediate output language understood by all output devices.
12780 Actually, before step one happens, @code{gtroff} converts certain
12781 escape sequences into reserved input characters (not accessible by
12782 the user); such reserved characters are used for other internal
12783 processing also -- this is the very reason why not all characters
12784 are valid input.  @xref{Identifiers}, for more on this topic.
12786 For example, the input string @samp{fi\[:u]} is converted into a
12787 character token @samp{f}, a character token @samp{i}, and a special
12788 token @samp{:u} (representing u@tie{}umlaut).  Later on, the character
12789 tokens @samp{f} and @samp{i} are merged to a single output node
12790 representing the ligature glyph @samp{fi} (provided the current font
12791 has a glyph for this ligature); the same happens with @samp{:u}.  All
12792 output glyph nodes are `processed' which means that they are invariably
12793 associated with a given font, font size, advance width, etc.  During
12794 the formatting process, @code{gtroff} itself adds various nodes to
12795 control the data flow.
12797 Macros, diversions, and strings collect elements in two chained lists:
12798 a list of input tokens which have been passed unprocessed, and a list
12799 of output nodes.  Consider the following the diversion.
12801 @Example
12802 .di xxx
12808 @endExample
12810 @noindent
12811 It contains these elements.
12813 @multitable {@i{vertical size node}} {token list} {element number}
12814 @item node list               @tab token list @tab element number
12816 @item @i{line start node}     @tab ---        @tab 1
12817 @item @i{glyph node @code{a}} @tab ---        @tab 2
12818 @item @i{word space node}     @tab ---        @tab 3
12819 @item ---                     @tab @code{b}   @tab 4
12820 @item ---                     @tab @code{\n}  @tab 5
12821 @item @i{glyph node @code{c}} @tab ---        @tab 6
12822 @item @i{vertical size node}  @tab ---        @tab 7
12823 @item @i{vertical size node}  @tab ---        @tab 8
12824 @item ---                     @tab @code{\n}  @tab 9
12825 @end multitable
12827 @cindex @code{\v}, internal representation
12828 @noindent
12829 Elements 1, 7, and@tie{}8 are inserted by @code{gtroff}; the latter two
12830 (which are always present) specify the vertical extent of the last
12831 line, possibly modified by @code{\x}.  The @code{br} request finishes
12832 the current partial line, inserting a newline input token which is
12833 subsequently converted to a space when the diversion is reread.  Note
12834 that the word space node has a fixed width which isn't stretchable
12835 anymore.  To convert horizontal space nodes back to input tokens, use
12836 the @code{unformat} request.
12838 Macros only contain elements in the token list (and the node list is
12839 empty); diversions and strings can contain elements in both lists.
12841 Note that the @code{chop} request simply reduces the number of elements in a
12842 macro, string, or diversion by one.  Exceptions are @dfn{compatibility save}
12843 and @dfn{compatibility ignore} input tokens which are ignored.  The
12844 @code{substring} request also ignores those input tokens.
12846 Some requests like @code{tr} or @code{cflags} work on glyph
12847 identifiers only; this means that the associated glyph can be changed
12848 without destroying this association.  This can be very helpful for
12849 substituting glyphs.  In the following example, we assume that
12850 glyph @samp{foo} isn't available by default, so we provide a
12851 substitution using the @code{fchar} request and map it to input
12852 character @samp{x}.
12854 @Example
12855 .fchar \[foo] foo
12856 .tr x \[foo]
12857 @endExample
12859 @noindent
12860 Now let us assume that we install an additional special font
12861 @samp{bar} which has glyph @samp{foo}.
12863 @Example
12864 .special bar
12865 .rchar \[foo]
12866 @endExample
12868 @noindent
12869 Since glyphs defined with @code{fchar} are searched before glyphs
12870 in special fonts, we must call @code{rchar} to remove the definition
12871 of the fallback glyph.  Anyway, the translation is still active;
12872 @samp{x} now maps to the real glyph @samp{foo}.
12875 @c =====================================================================
12877 @node Debugging, Implementation Differences, Gtroff Internals, gtroff Reference
12878 @section Debugging
12879 @cindex debugging
12881 @code{gtroff} is not easy to debug, but there are some useful features
12882 and strategies for debugging.
12884 @Defreq {lf, line [@Var{filename}]}
12885 @pindex soelim
12886 @cindex multi-file documents
12887 @cindex documents, multi-file
12888 @cindex setting input line number (@code{lf})
12889 @cindex input line number, setting (@code{lf})
12890 @cindex number, input line, setting (@code{lf})
12891 Change the line number and optionally the file name @code{gtroff} shall
12892 use for error and warning messages.  @var{line} is the input line number
12893 of the @emph{next} line.
12895 Without argument, the request is ignored.
12897 This is a debugging aid for documents which are split into many files,
12898 then put together with @code{soelim} and other preprocessors.  Usually,
12899 it isn't invoked manually.
12901 Note that other @code{troff} implementations (including the original
12902 @acronym{AT&T} version) handle @code{lf} differently.  For them,
12903 @var{line} changes the line number of the @emph{current} line.
12904 @endDefreq
12906 @DefreqList {tm, string}
12907 @DefreqItem {tm1, string}
12908 @DefreqListEnd {tmc, string}
12909 @cindex printing to stderr (@code{tm}, @code{tm1}, @code{tmc})
12910 @cindex stderr, printing to (@code{tm}, @code{tm1}, @code{tmc})
12911 Send @var{string} to the standard error output;
12912 this is very useful for printing debugging messages among other things.
12914 @var{string} is read in copy mode.
12916 The @code{tm} request ignores leading spaces of @var{string}; @code{tm1}
12917 handles its argument similar to the @code{ds} request: a leading double
12918 quote in @var{string} is stripped to allow initial blanks.
12920 The @code{tmc} request is similar to @code{tm1} but does
12921 not append a newline (as is done in @code{tm} and @code{tm1}).
12922 @endDefreq
12924 @Defreq {ab, [@Var{string}]}
12925 @cindex aborting (@code{ab})
12926 Similar to the @code{tm} request, except that
12927 it causes @code{gtroff} to stop processing.  With no argument it
12928 prints @samp{User Abort.} to standard error.
12929 @endDefreq
12931 @Defreq {ex, }
12932 @cindex @code{ex} request, use in debugging
12933 @cindex exiting (@code{ex})
12934 The @code{ex} request also causes @code{gtroff} to stop processing;
12935 see also @ref{I/O}.
12936 @endDefreq
12938 When doing something involved it is useful to leave the debugging
12939 statements in the code and have them turned on by a command line flag.
12941 @Example
12942 .if \n(DB .tm debugging output
12943 @endExample
12945 @noindent
12946 To activate these statements say
12948 @Example
12949 groff -rDB=1 file
12950 @endExample
12952 If it is known in advance that there will be many errors and no useful
12953 output, @code{gtroff} can be forced to suppress formatted output with
12954 the @option{-z} flag.
12956 @Defreq {pm, }
12957 @cindex dumping symbol table (@code{pm})
12958 @cindex symbol table, dumping (@code{pm})
12959 Print the entire symbol table on @code{stderr}.  Names of all defined
12960 macros, strings, and diversions are print together with their size in
12961 bytes.  Since @code{gtroff} sometimes adds nodes by itself, the
12962 returned size can be larger than expected.
12964 This request differs from @acronym{UNIX} @code{troff}: @code{gtroff}
12965 reports the sizes of diversions, ignores an additional argument to
12966 print only the total of the sizes, and the size isn't returned in
12967 blocks of 128 characters.
12968 @endDefreq
12970 @Defreq {pnr, }
12971 @cindex dumping number registers (@code{pnr})
12972 @cindex number registers, dumping (@code{pnr})
12973 Print the names and contents of all
12974 currently defined number registers on @code{stderr}.
12975 @endDefreq
12977 @Defreq {ptr, }
12978 @cindex dumping traps (@code{ptr})
12979 @cindex traps, dumping (@code{ptr})
12980 Print the names and positions of all traps
12981 (not including input line traps and diversion traps) on @code{stderr}.
12982 Empty slots in the page trap list are printed as well, because they can
12983 affect the priority of subsequently planted traps.
12984 @endDefreq
12986 @Defreq {fl, }
12987 @cindex flush output (@code{fl})
12988 @cindex output, flush (@code{fl})
12989 @cindex interactive use of @code{gtroff}
12990 @cindex @code{gtroff}, interactive use
12991 Instruct @code{gtroff} to flush its output immediately.  The intent
12992 is for interactive use, but this behaviour is currently not
12993 implemented in @code{gtroff}.  Contrary to @acronym{UNIX} @code{troff},
12994 TTY output is sent to a device driver also (@code{grotty}), making it
12995 non-trivial to communicate interactively.
12997 This request causes a line break.
12998 @endDefreq
13000 @Defreq {backtrace, }
13001 @cindex backtrace of input stack (@code{backtrace})
13002 @cindex input stack, backtrace (@code{backtrace})
13003 Print a backtrace of the input stack to the standard error stream.
13005 Consider the following in file @file{test}:
13007 @Example
13008 .de xxx
13009 .  backtrace
13011 .de yyy
13012 .  xxx
13015 .yyy
13016 @endExample
13018 @noindent
13019 On execution, @code{gtroff} prints the following:
13021 @Example
13022 test:2: backtrace: macro `xxx'
13023 test:5: backtrace: macro `yyy'
13024 test:8: backtrace: file `test'
13025 @endExample
13027 The option @option{-b} of @code{gtroff} internally calls a variant of
13028 this request on each error and warning.
13029 @endDefreq
13031 @Defreg {slimit}
13032 @cindex input stack, setting limit
13033 Use the @code{slimit} number register
13034 to set the maximum number of objects on the input stack.
13035 If @code{slimit} is less than or equal to@tie{}0,
13036 there is no limit set.
13037 With no limit, a buggy recursive macro can exhaust virtual memory.
13039 The default value is 1000; this is a compile-time constant.
13040 @endDefreg
13042 @Defreq {warnscale, si}
13043 Set the scaling indicator used in warnings to @var{si}.  Valid values for
13044 @var{si} are @samp{u}, @samp{i}, @samp{c}, @samp{p}, and @samp{P}.  At
13045 startup, it is set to @samp{i}.
13046 @endDefreq
13048 @Defreq {spreadwarn, [@Var{limit}]}
13049 Make @code{gtroff} emit a warning if the additional space inserted for
13050 each space between words in an output line is larger or equal to
13051 @var{limit}.  A negative value is changed to zero; no argument toggles the
13052 warning on and off without changing @var{limit}.  The default scaling
13053 indicator is @samp{m}.  At startup, @code{spreadwarn} is deactivated, and
13054 @var{limit} is set to 3@dmn{m}.
13056 For example,
13058 @Example
13059 .spreadwarn 0.2m
13060 @endExample
13062 @noindent
13063 will cause a warning if @code{gtroff} must add 0.2@dmn{m} or more for each
13064 interword space in a line.
13066 This request is active only if text is justified to both margins (using
13067 @w{@samp{.ad b}}).
13068 @endDefreq
13070 @cindex warnings
13071 @code{gtroff} has command line options for printing out more warnings
13072 (@option{-w}) and for printing backtraces (@option{-b}) when a warning
13073 or an error occurs.  The most verbose level of warnings is @option{-ww}.
13075 @DefreqList {warn, [@Var{flags}]}
13076 @DefregListEnd {.warn}
13077 @cindex level of warnings (@code{warn})
13078 @cindex warnings, level (@code{warn})
13079 Control the level of warnings checked for.  The @var{flags} are the sum
13080 of the numbers associated with each warning that is to be enabled; all
13081 other warnings are disabled.  The number associated with each warning is
13082 listed below.  For example, @w{@code{.warn 0}} disables all warnings,
13083 and @w{@code{.warn 1}} disables all warnings except that about missing
13084 glyphs.  If no argument is given, all warnings are enabled.
13086 The read-only number register @code{.warn} contains the current warning
13087 level.
13088 @endDefreq
13090 @menu
13091 * Warnings::
13092 @end menu
13094 @c ---------------------------------------------------------------------
13096 @node Warnings,  , Debugging, Debugging
13097 @subsection Warnings
13098 @cindex warnings
13100 The warnings that can be given to @code{gtroff} are divided into the
13101 following categories.  The name associated with each warning is used by
13102 the @option{-w} and @option{-W} options; the number is used by the
13103 @code{warn} request and by the @code{.warn} register.
13105 @table @samp
13106 @item char
13107 @itemx 1
13108 Non-existent glyphs.@footnote{@code{char} is a misnomer since it reports
13109 missing glyphs -- there aren't missing input characters, only invalid
13110 ones.}  This is enabled by default.
13112 @item number
13113 @itemx 2
13114 Invalid numeric expressions.  This is enabled by default.
13115 @xref{Expressions}.
13117 @item break
13118 @itemx 4
13119 @cindex fill mode
13120 @cindex mode, fill
13121 In fill mode, lines which could not be broken so that their length was
13122 less than the line length.  This is enabled by default.
13124 @item delim
13125 @itemx 8
13126 Missing or mismatched closing delimiters.
13128 @item el
13129 @itemx 16
13130 @cindex @code{ie} request, and warnings
13131 @cindex @code{el} request, and warnings
13132 Use of the @code{el} request with no matching @code{ie} request.
13133 @xref{if-else}.
13135 @item scale
13136 @itemx 32
13137 Meaningless scaling indicators.
13139 @item range
13140 @itemx 64
13141 Out of range arguments.
13143 @item syntax
13144 @itemx 128
13145 Dubious syntax in numeric expressions.
13147 @item di
13148 @itemx 256
13149 @cindex @code{di} request, and warnings
13150 @cindex @code{da} request, and warnings
13151 Use of @code{di} or @code{da} without an argument when there is no
13152 current diversion.
13154 @item mac
13155 @itemx 512
13156 @cindex @code{de}, @code{de1}, @code{dei} requests, and warnings
13157 @cindex @code{am}, @code{am1}, @code{ami} requests, and warnings
13158 @cindex @code{ds}, @code{ds1} requests, and warnings
13159 @cindex @code{as}, @code{as1} requests, and warnings
13160 @cindex @code{di} request, and warnings
13161 @cindex @code{da} request, and warnings
13162 @cindex @code{box}, @code{boxa} requests, and warnings
13163 @cindex @code{\*}, and warnings
13164 Use of undefined strings, macros and diversions.  When an undefined
13165 string, macro, or diversion is used, that string is automatically
13166 defined as empty.  So, in most cases, at most one warning is given
13167 for each name.
13169 @item reg
13170 @itemx 1024
13171 @cindex @code{nr} request, and warnings
13172 @cindex @code{\R}, and warnings
13173 @cindex @code{\n}, and warnings
13174 Use of undefined number registers.  When an undefined number register is
13175 used, that register is automatically defined to have a value of@tie{}0.
13176 So, in most cases, at most one warning is given for use of a particular
13177 name.
13179 @item tab
13180 @itemx 2048
13181 @cindex @code{\t}, and warnings
13182 Use of a tab character where a number was expected.
13184 @item right-brace
13185 @itemx 4096
13186 @cindex @code{\@}}, and warnings
13187 Use of @code{\@}} where a number was expected.
13189 @item missing
13190 @itemx 8192
13191 Requests that are missing non-optional arguments.
13193 @item input
13194 @itemx 16384
13195 Invalid input characters.
13197 @item escape
13198 @itemx 32768
13199 Unrecognized escape sequences.  When an unrecognized escape sequence
13200 @code{\@var{X}} is encountered, the escape character is ignored, and
13201 @var{X} is printed.
13203 @item space
13204 @itemx 65536
13205 @cindex compatibility mode
13206 Missing space between a request or macro and its argument.  This warning
13207 is given when an undefined name longer than two characters is
13208 encountered, and the first two characters of the name make a defined
13209 name.  The request or macro is not invoked.  When this warning is
13210 given, no macro is automatically defined.  This is enabled by default.
13211 This warning never occurs in compatibility mode.
13213 @item font
13214 @itemx 131072
13215 Non-existent fonts.  This is enabled by default.
13217 @item ig
13218 @itemx 262144
13219 Invalid escapes in text ignored with the @code{ig} request.  These are
13220 conditions that are errors when they do not occur in ignored text.
13222 @item color
13223 @itemx 524288
13224 Color related warnings.
13226 @item all
13227 All warnings except @samp{di}, @samp{mac} and @samp{reg}.  It is
13228 intended that this covers all warnings that are useful with traditional
13229 macro packages.
13231 @item w
13232 All warnings.
13233 @end table
13236 @c =====================================================================
13238 @node Implementation Differences,  , Debugging, gtroff Reference
13239 @section Implementation Differences
13240 @cindex implementation differences
13241 @cindex differences in implementation
13242 @cindex incompatibilities with @acronym{AT&T} @code{troff}
13243 @cindex compatibility mode
13244 @cindex mode, compatibility
13246 GNU @code{troff} has a number of features which cause incompatibilities
13247 with documents written with old versions of @code{troff}.
13249 @cindex long names
13250 @cindex names, long
13251 Long names cause some incompatibilities.  @acronym{UNIX} @code{troff}
13252 interprets
13254 @Example
13255 .dsabcd
13256 @endExample
13258 @cindex @code{\*}, incompatibilities with @acronym{AT&T} @code{troff}
13259 @cindex @code{\n}, incompatibilities with @acronym{AT&T} @code{troff}
13260 @noindent
13261 as defining a string @samp{ab} with contents @samp{cd}.  Normally, GNU
13262 @code{troff} interprets this as a call of a macro named
13263 @code{dsabcd}.  Also @acronym{UNIX} @code{troff} interprets
13264 @code{\*[} or @code{\n[} as references to a string or number register
13265 called @samp{[}.  In GNU @code{troff}, however, this is normally
13266 interpreted as the start of a long name.  In compatibility mode GNU
13267 @code{troff} interprets long names in the traditional way
13268 (which means that they are not recognized as names).
13270 @DefreqList {cp, [@Var{n}]}
13271 @DefreqItem {do, cmd}
13272 @DefregListEnd {.C}
13273 If @var{n} is missing or non-zero, turn on compatibility mode;
13274 otherwise, turn it off.
13276 The read-only number register @code{.C} is@tie{}1 if compatibility mode is
13277 on, 0@tie{}otherwise.
13279 Compatibility mode can be also turned on with the @option{-C} command line
13280 option.
13282 The @code{do} request turns off compatibility mode
13283 while executing its arguments as a @code{gtroff} command.
13285 @Example
13286 .do fam T
13287 @endExample
13289 @noindent
13290 executes the @code{fam} request when compatibility mode
13291 is enabled.
13293 @code{gtroff} restores the previous compatibility setting
13294 before interpreting any files sourced by the @var{cmd}.
13295 @endDefreq
13297 @cindex input level in delimited arguments
13298 @cindex delimited arguments, incompatibilities with @acronym{AT&T} @code{troff}
13299 Two other features are controlled by @option{-C}.  If not in
13300 compatibility mode, GNU @code{troff} preserves the input level in
13301 delimited arguments:
13303 @Example
13304 .ds xx '
13305 \w'abc\*(xxdef'
13306 @endExample
13308 @noindent
13309 In compatibility mode, the string @samp{72def'} is returned; without
13310 @option{-C} the resulting string is @samp{168} (assuming a TTY output
13311 device).
13313 @cindex @code{\f}, incompatibilities with @acronym{AT&T} @code{troff}
13314 @cindex @code{\H}, incompatibilities with @acronym{AT&T} @code{troff}
13315 @cindex @code{\s}, incompatibilities with @acronym{AT&T} @code{troff}
13316 @cindex @code{\S}, incompatibilities with @acronym{AT&T} @code{troff}
13317 Finally, the escapes @code{\f}, @code{\H}, @code{\m}, @code{\M},
13318 @code{\R}, @code{\s}, and @code{\S} are transparent for recognizing the
13319 beginning of a line only in compatibility mode (this is a rather obscure
13320 feature).  For example, the code
13322 @Example
13323 .de xx
13324 Hallo!
13326 \fB.xx\fP
13327 @endExample
13329 @noindent
13330 prints @samp{Hallo!} in bold face if in compatibility mode, and
13331 @samp{.xx} in bold face otherwise.
13333 @cindex @code{\A}, incompatibilities with @acronym{AT&T} @code{troff}
13334 @cindex @code{\|}, incompatibilities with @acronym{AT&T} @code{troff}
13335 @cindex @code{\^}, incompatibilities with @acronym{AT&T} @code{troff}
13336 @cindex @code{\&}, incompatibilities with @acronym{AT&T} @code{troff}
13337 @cindex @code{\@{}, incompatibilities with @acronym{AT&T} @code{troff}
13338 @cindex @code{\@}}, incompatibilities with @acronym{AT&T} @code{troff}
13339 @cindex @code{\@key{SP}}, incompatibilities with @acronym{AT&T} @code{troff}
13340 @cindex @code{\'}, incompatibilities with @acronym{AT&T} @code{troff}
13341 @cindex @code{\`}, incompatibilities with @acronym{AT&T} @code{troff}
13342 @cindex @code{\-}, incompatibilities with @acronym{AT&T} @code{troff}
13343 @cindex @code{\_}, incompatibilities with @acronym{AT&T} @code{troff}
13344 @cindex @code{\!}, incompatibilities with @acronym{AT&T} @code{troff}
13345 @cindex @code{\%}, incompatibilities with @acronym{AT&T} @code{troff}
13346 @cindex @code{\c}, incompatibilities with @acronym{AT&T} @code{troff}
13347 GNU @code{troff} does not allow the use of the escape sequences
13348 @code{\|}, @code{\^}, @code{\&}, @code{\@{}, @code{\@}},
13349 @code{\@key{SP}}, @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!},
13350 @code{\%}, and @code{\c} in names of strings, macros, diversions, number
13351 registers, fonts or environments; @acronym{UNIX} @code{troff} does.  The
13352 @code{\A} escape sequence (@pxref{Identifiers}) may be helpful in
13353 avoiding use of these escape sequences in names.
13355 @cindex fractional point sizes
13356 @cindex fractional type sizes
13357 @cindex point sizes, fractional
13358 @cindex type sizes, fractional
13359 @cindex sizes, fractional
13360 @cindex @code{ps} request, incompatibilities with @acronym{AT&T} @code{troff}
13361 Fractional point sizes cause one noteworthy incompatibility.  In
13362 @acronym{UNIX} @code{troff} the @code{ps} request ignores scale
13363 indicators and thus
13365 @Example
13366 .ps 10u
13367 @endExample
13369 @noindent
13370 sets the point size to 10@tie{}points, whereas in GNU @code{troff} it
13371 sets the point size to 10@tie{}scaled points.  @xref{Fractional Type
13372 Sizes}, for more information.
13374 @cindex @code{bd} request, incompatibilities with @acronym{AT&T} @code{troff}
13375 @cindex @code{cs} request, incompatibilities with @acronym{AT&T} @code{troff}
13376 @cindex @code{tr} request, incompatibilities with @acronym{AT&T} @code{troff}
13377 @cindex @code{fp} request, incompatibilities with @acronym{AT&T} @code{troff}
13378 @cindex input characters and output glyphs, compatibility with @acronym{AT&T} @code{troff}
13379 @cindex output glyphs, and input characters,compatibility with @acronym{AT&T} @code{troff}
13380 @cindex characters, input, and output glyphs, compatibility with @acronym{AT&T} @code{troff}
13381 @cindex glyphs, output, and input characters, compatibility with @acronym{AT&T} @code{troff}
13382 In GNU @code{troff} there is a fundamental difference between
13383 (unformatted) input characters and (formatted) output glyphs.
13384 Everything that affects how a glyph is output is stored
13385 with the glyph node; once a glyph node has been constructed it is
13386 unaffected by any subsequent requests that are executed, including
13387 @code{bd}, @code{cs}, @code{tkf}, @code{tr}, or @code{fp} requests.
13388 Normally glyphs are constructed from input characters at the
13389 moment immediately before the glyph is added to the current output
13390 line.  Macros, diversions and strings are all, in fact, the same type of
13391 object; they contain lists of input characters and glyph nodes in
13392 any combination.  A glyph node does not behave like an input
13393 character for the purposes of macro processing; it does not inherit any
13394 of the special properties that the input character from which it was
13395 constructed might have had.  For example,
13397 @Example
13398 .di x
13399 \\\\
13403 @endExample
13405 @cindex printing backslash (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
13406 @cindex backslash, printing (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
13407 @cindex @code{\e}, incompatibilities with @acronym{AT&T} @code{troff}
13408 @cindex @code{\!}, incompatibilities with @acronym{AT&T} @code{troff}
13409 @cindex @code{\?}, incompatibilities with @acronym{AT&T} @code{troff}
13410 @cindex transparent output, incompatibilities with @acronym{AT&T} @code{troff}
13411 @cindex output, transparent, incompatibilities with @acronym{AT&T} @code{troff}
13412 @noindent
13413 prints @samp{\\} in GNU @code{troff}; each pair of input backslashes
13414 is turned into one output backslash and the resulting output backslashes
13415 are not interpreted as escape characters when they are reread.
13416 @acronym{UNIX} @code{troff} would interpret them as escape characters
13417 when they were reread and would end up printing one @samp{\}.  The
13418 correct way to obtain a printable backslash is to use the @code{\e}
13419 escape sequence: This always prints a single instance of the current
13420 escape character, regardless of whether or not it is used in a
13421 diversion; it also works in both GNU @code{troff} and @acronym{UNIX}
13422 @code{troff}.@footnote{To be completely independent of the current
13423 escape character, use @code{\(rs} which represents a reverse solidus
13424 (backslash) glyph.}  To store, for some reason, an escape sequence in a
13425 diversion that will be interpreted when the diversion is reread, either
13426 use the traditional @code{\!} transparent output facility, or, if this
13427 is unsuitable, the new @code{\?} escape sequence.
13429 @xref{Diversions}, and @ref{Gtroff Internals}, for more information.
13433 @c =====================================================================
13434 @c =====================================================================
13436 @node Preprocessors, Output Devices, gtroff Reference, Top
13437 @chapter Preprocessors
13438 @cindex preprocessors
13440 This chapter describes all preprocessors that come with @code{groff} or
13441 which are freely available.
13443 @menu
13444 * geqn::
13445 * gtbl::
13446 * gpic::
13447 * ggrn::
13448 * grap::
13449 * grefer::
13450 * gsoelim::
13451 @end menu
13454 @c =====================================================================
13456 @node geqn, gtbl, Preprocessors, Preprocessors
13457 @section @code{geqn}
13458 @cindex @code{eqn}, the program
13459 @cindex @code{geqn}, the program
13461 @c XXX
13463 @menu
13464 * Invoking geqn::
13465 @end menu
13467 @c ---------------------------------------------------------------------
13469 @node Invoking geqn,  , geqn, geqn
13470 @subsection Invoking @code{geqn}
13471 @cindex invoking @code{geqn}
13472 @cindex @code{geqn}, invoking
13474 @c XXX
13477 @c =====================================================================
13479 @node gtbl, gpic, geqn, Preprocessors
13480 @section @code{gtbl}
13481 @cindex @code{tbl}, the program
13482 @cindex @code{gtbl}, the program
13484 @c XXX
13486 @menu
13487 * Invoking gtbl::
13488 @end menu
13490 @c ---------------------------------------------------------------------
13492 @node Invoking gtbl,  , gtbl, gtbl
13493 @subsection Invoking @code{gtbl}
13494 @cindex invoking @code{gtbl}
13495 @cindex @code{gtbl}, invoking
13497 @c XXX
13500 @c =====================================================================
13502 @node gpic, ggrn, gtbl, Preprocessors
13503 @section @code{gpic}
13504 @cindex @code{pic}, the program
13505 @cindex @code{gpic}, the program
13507 @c XXX
13509 @menu
13510 * Invoking gpic::
13511 @end menu
13513 @c ---------------------------------------------------------------------
13515 @node Invoking gpic,  , gpic, gpic
13516 @subsection Invoking @code{gpic}
13517 @cindex invoking @code{gpic}
13518 @cindex @code{gpic}, invoking
13520 @c XXX
13523 @c =====================================================================
13525 @node ggrn, grap, gpic, Preprocessors
13526 @section @code{ggrn}
13527 @cindex @code{grn}, the program
13528 @cindex @code{ggrn}, the program
13530 @c XXX
13532 @menu
13533 * Invoking ggrn::
13534 @end menu
13536 @c ---------------------------------------------------------------------
13538 @node Invoking ggrn,  , ggrn, ggrn
13539 @subsection Invoking @code{ggrn}
13540 @cindex invoking @code{ggrn}
13541 @cindex @code{ggrn}, invoking
13543 @c XXX
13546 @c =====================================================================
13548 @node grap, grefer, ggrn, Preprocessors
13549 @section @code{grap}
13550 @cindex @code{grap}, the program
13552 A free implementation of @code{grap}, written by Ted Faber,
13553 is available as an extra package from the following address:
13555 @display
13556 @uref{http://www.lunabase.org/~faber/Vault/software/grap/}
13557 @end display
13560 @c =====================================================================
13562 @node grefer, gsoelim, grap, Preprocessors
13563 @section @code{grefer}
13564 @cindex @code{refer}, the program
13565 @cindex @code{grefer}, the program
13567 @c XXX
13569 @menu
13570 * Invoking grefer::
13571 @end menu
13573 @c ---------------------------------------------------------------------
13575 @node Invoking grefer,  , grefer, grefer
13576 @subsection Invoking @code{grefer}
13577 @cindex invoking @code{grefer}
13578 @cindex @code{grefer}, invoking
13580 @c XXX
13583 @c =====================================================================
13585 @node gsoelim,  , grefer, Preprocessors
13586 @section @code{gsoelim}
13587 @cindex @code{soelim}, the program
13588 @cindex @code{gsoelim}, the program
13590 @c XXX
13592 @menu
13593 * Invoking gsoelim::
13594 @end menu
13596 @c ---------------------------------------------------------------------
13598 @node Invoking gsoelim,  , gsoelim, gsoelim
13599 @subsection Invoking @code{gsoelim}
13600 @cindex invoking @code{gsoelim}
13601 @cindex @code{gsoelim}, invoking
13603 @c XXX
13607 @c =====================================================================
13608 @c =====================================================================
13610 @node Output Devices, File formats, Preprocessors, Top
13611 @chapter Output Devices
13612 @cindex output devices
13613 @cindex devices for output
13615 @c XXX
13617 @menu
13618 * Special Characters::
13619 * grotty::
13620 * grops::
13621 * grodvi::
13622 * grolj4::
13623 * grolbp::
13624 * grohtml::
13625 * gxditview::
13626 @end menu
13629 @c =====================================================================
13631 @node Special Characters, grotty, Output Devices, Output Devices
13632 @section Special Characters
13633 @cindex special characters
13634 @cindex characters, special
13636 @c XXX
13638 @xref{Font Files}.
13641 @c =====================================================================
13643 @node grotty, grops, Special Characters, Output Devices
13644 @section @code{grotty}
13645 @cindex @code{grotty}, the program
13647 @c XXX
13649 @menu
13650 * Invoking grotty::
13651 @end menu
13653 @c ---------------------------------------------------------------------
13655 @node Invoking grotty,  , grotty, grotty
13656 @subsection Invoking @code{grotty}
13657 @cindex invoking @code{grotty}
13658 @cindex @code{grotty}, invoking
13660 @c XXX
13662 @c The following is no longer true; fix and extend it.
13664 @c @pindex less
13665 @c @cindex Teletype
13666 @c @cindex ISO 6249 SGR
13667 @c @cindex terminal control sequences
13668 @c @cindex control sequences, for terminals
13669 @c For TTY output devices, underlining is done by emitting sequences of
13670 @c @samp{_} and @samp{\b} (the backspace character) before the actual
13671 @c character.  Literally, this is printing an underline character, then
13672 @c moving back one character position, and printing the actual character
13673 @c at the same position as the underline character (similar to a
13674 @c typewriter).  Usually, a modern terminal can't interpret this (and the
13675 @c original Teletype machines for which this sequence was appropriate are
13676 @c no longer in use).  You need a pager program like @code{less} which
13677 @c translates this into ISO 6429 SGR sequences to control terminals.
13680 @c =====================================================================
13682 @node grops, grodvi, grotty, Output Devices
13683 @section @code{grops}
13684 @cindex @code{grops}, the program
13686 @c XXX
13688 @menu
13689 * Invoking grops::
13690 * Embedding PostScript::
13691 @end menu
13693 @c ---------------------------------------------------------------------
13695 @node Invoking grops, Embedding PostScript, grops, grops
13696 @subsection Invoking @code{grops}
13697 @cindex invoking @code{grops}
13698 @cindex @code{grops}, invoking
13700 @c XXX
13702 @c ---------------------------------------------------------------------
13704 @node Embedding PostScript,  , Invoking grops, grops
13705 @subsection Embedding @sc{PostScript}
13706 @cindex embedding PostScript
13707 @cindex PostScript, embedding
13709 @c XXX
13712 @c =====================================================================
13714 @node grodvi, grolj4, grops, Output Devices
13715 @section @code{grodvi}
13716 @cindex @code{grodvi}, the program
13718 @c XXX
13720 @menu
13721 * Invoking grodvi::
13722 @end menu
13724 @c ---------------------------------------------------------------------
13726 @node Invoking grodvi,  , grodvi, grodvi
13727 @subsection Invoking @code{grodvi}
13728 @cindex invoking @code{grodvi}
13729 @cindex @code{grodvi}, invoking
13731 @c XXX
13734 @c =====================================================================
13736 @node grolj4, grolbp, grodvi, Output Devices
13737 @section @code{grolj4}
13738 @cindex @code{grolj4}, the program
13740 @c XXX
13742 @menu
13743 * Invoking grolj4::
13744 @end menu
13746 @c ---------------------------------------------------------------------
13748 @node Invoking grolj4,  , grolj4, grolj4
13749 @subsection Invoking @code{grolj4}
13750 @cindex invoking @code{grolj4}
13751 @cindex @code{grolj4}, invoking
13753 @c XXX
13756 @c =====================================================================
13758 @node grolbp, grohtml, grolj4, Output Devices
13759 @section @code{grolbp}
13760 @cindex @code{grolbp}, the program
13762 @c XXX
13764 @menu
13765 * Invoking grolbp::
13766 @end menu
13768 @c ---------------------------------------------------------------------
13770 @node Invoking grolbp,  , grolbp, grolbp
13771 @subsection Invoking @code{grolbp}
13772 @cindex invoking @code{grolbp}
13773 @cindex @code{grolbp}, invoking
13775 @c XXX
13778 @c =====================================================================
13780 @node grohtml, gxditview, grolbp, Output Devices
13781 @section @code{grohtml}
13782 @cindex @code{grohtml}, the program
13784 @c XXX
13786 @menu
13787 * Invoking grohtml::
13788 * grohtml specific registers and strings::
13789 @end menu
13791 @c ---------------------------------------------------------------------
13793 @node Invoking grohtml, grohtml specific registers and strings, grohtml, grohtml
13794 @subsection Invoking @code{grohtml}
13795 @cindex invoking @code{grohtml}
13796 @cindex @code{grohtml}, invoking
13798 @c XXX
13800 @c ---------------------------------------------------------------------
13802 @node grohtml specific registers and strings,  , Invoking grohtml, grohtml
13803 @subsection @code{grohtml} specific registers and strings
13804 @cindex registers specific to @code{grohtml}
13805 @cindex strings specific to @code{grohtml}
13806 @cindex @code{grohtml}, registers and strings
13808 @DefmpregList {ps4html, grohtml}
13809 @DefstrListEnd {www-image-template, grohtml}
13810 The registers @code{ps4html} and @code{www-image-template} are defined
13811 by the @code{pre-grohtml} preprocessor.  @code{pre-grohtml} reads in
13812 the @code{troff} input, marks up the inline equations and passes the
13813 result firstly to
13815 @Example
13816 troff -Tps -rps4html=1 -dwww-image-template=@var{template}
13817 @endExample
13819 @noindent
13820 and secondly to
13822 @Example
13823 troff -Thtml
13824 @endExample
13826 The PostScript device is used to create all the image files, and the
13827 register @code{ps4html} enables the macro sets to ignore floating
13828 keeps, footers, and headings.
13830 The register @code{www-image-template} is set to the user specified
13831 template name or the default name.
13832 @endDefmpreg
13835 @c =====================================================================
13837 @node gxditview,  , grohtml, Output Devices
13838 @section @code{gxditview}
13839 @cindex @code{gxditview}, the program
13841 @c XXX
13843 @menu
13844 * Invoking gxditview::
13845 @end menu
13847 @c ---------------------------------------------------------------------
13849 @node Invoking gxditview,  , gxditview, gxditview
13850 @subsection Invoking @code{gxditview}
13851 @cindex invoking @code{gxditview}
13852 @cindex @code{gxditview}, invoking
13854 @c XXX
13855 @c X11's xditview
13859 @c =====================================================================
13860 @c =====================================================================
13862 @node File formats, Installation, Output Devices, Top
13863 @chapter File formats
13864 @cindex file formats
13865 @cindex formats, file
13867 All files read and written by @code{gtroff} are text files.  The
13868 following two sections describe their format.
13870 @menu
13871 * gtroff Output::
13872 * Font Files::
13873 @end menu
13876 @c =====================================================================
13878 @node gtroff Output, Font Files, File formats, File formats
13879 @section @code{gtroff} Output
13880 @cindex @code{gtroff}, output
13881 @cindex output, @code{gtroff}
13883 This section describes the intermediate output format of GNU
13884 @code{troff}.  This output is produced by a run of @code{gtroff}
13885 before it is fed into a device postprocessor program.
13887 As @code{groff} is a wrapper program around @code{gtroff} that
13888 automatically calls a postprocessor, this output does not show up
13889 normally.  This is why it is called @dfn{intermediate}.
13890 @code{groff} provides the option @option{-Z} to inhibit postprocessing,
13891 such that the produced intermediate output is sent to standard output
13892 just like calling @code{gtroff} manually.
13894 @cindex troff output
13895 @cindex output, troff
13896 @cindex intermediate output
13897 @cindex output, intermediate
13898 Here, the term @dfn{troff output} describes what is output by
13899 @code{gtroff}, while @dfn{intermediate output} refers to the language
13900 that is accepted by the parser that prepares this output for the
13901 postprocessors.  This parser is smarter on whitespace and implements
13902 obsolete elements for compatibility, otherwise both formats are the
13903 same.@footnote{The parser and postprocessor for intermediate output
13904 can be found in the file@*
13905 @file{@var{groff-source-dir}/src/libs/libdriver/input.cpp}.}
13907 The main purpose of the intermediate output concept is to facilitate
13908 the development of postprocessors by providing a common programming
13909 interface for all devices.  It has a language of its own that is
13910 completely different from the @code{gtroff} language.  While the
13911 @code{gtroff} language is a high-level programming language for text
13912 processing, the intermediate output language is a kind of low-level
13913 assembler language by specifying all positions on the page for writing
13914 and drawing.
13916 The intermediate output produced by @code{gtroff} is fairly readable,
13917 while output from @acronym{AT&T} @code{troff} is rather hard to
13918 understand because of strange habits that are still supported, but not
13919 used any longer by @code{gtroff}.
13921 @menu
13922 * Language Concepts::
13923 * Command Reference::
13924 * Intermediate Output Examples::
13925 * Output Language Compatibility::
13926 @end menu
13928 @c ---------------------------------------------------------------------
13930 @node Language Concepts, Command Reference, gtroff Output, gtroff Output
13931 @subsection Language Concepts
13933 During the run of @code{gtroff}, the input data is cracked down to the
13934 information on what has to be printed at what position on the intended
13935 device.  So the language of the intermediate output format can be quite
13936 small.  Its only elements are commands with and without arguments.
13937 In this section, the term @dfn{command} always refers to the intermediate
13938 output language, and never to the @code{gtroff} language used for document
13939 formatting.  There are commands for positioning and text writing, for drawing, and
13940 for device controlling.
13942 @menu
13943 * Separation::
13944 * Argument Units::
13945 * Document Parts::
13946 @end menu
13948 @node Separation, Argument Units, Language Concepts, Language Concepts
13949 @subsubsection Separation
13951 @acronym{AT&T} @code{troff} output has strange requirements on whitespace.
13952 The @code{gtroff} output parser, however, is smart about whitespace by
13953 making it maximally optional.  The whitespace characters, i.e., the
13954 tab, space, and newline characters, always have a syntactical meaning.
13955 They are never printable because spacing within the output is always
13956 done by positioning commands.
13958 Any sequence of space or tab characters is treated as a single
13959 @dfn{syntactical space}.  It separates commands and arguments, but is
13960 only required when there would occur a clashing between the command code
13961 and the arguments without the space.  Most often, this happens when
13962 variable-length command names, arguments, argument lists, or command
13963 clusters meet.  Commands and arguments with a known, fixed length need
13964 not be separated by syntactical space.
13966 A line break is a syntactical element, too.  Every command argument can be
13967 followed by whitespace, a comment, or a newline character.  Thus a
13968 @dfn{syntactical line break} is defined to consist of optional
13969 syntactical space that is optionally followed by a comment, and a
13970 newline character.
13972 The normal commands, those for positioning and text, consist of a
13973 single letter taking a fixed number of arguments.  For historical reasons,
13974 the parser allows to stack such commands on the same line, but
13975 fortunately, in @code{gtroff}'s intermediate output, every command with
13976 at least one argument is followed by a line break, thus providing
13977 excellent readability.
13979 The other commands -- those for drawing and device controlling --
13980 have a more complicated structure; some recognize long command names,
13981 and some take a variable number of arguments.  So all @samp{D} and
13982 @samp{x} commands were designed to request a syntactical line break
13983 after their last argument.  Only one command, @w{@samp{x X}},
13984 has an argument that can stretch over several lines; all other
13985 commands must have all of their arguments on the same line as the
13986 command, i.e., the arguments may not be splitted by a line break.
13988 Empty lines (these are lines containing only space and/or a comment), can
13989 occur everywhere.  They are just ignored.
13991 @node Argument Units, Document Parts, Separation, Language Concepts
13992 @subsubsection Argument Units
13994 Some commands take integer arguments that are assumed to represent
13995 values in a measurement unit, but the letter for the corresponding
13996 scale indicator is not written with the output command arguments.
13997 Most commands assume the scale indicator @samp{u}, the basic unit of
13998 the device, some use @samp{z}, the scaled point unit of the device,
13999 while others, such as the color commands, expect plain integers.
14001 Note that single characters can have the eighth bit set, as can the
14002 names of fonts and special characters.  The names of characters and
14003 fonts can be of arbitrary length.  A character that is to be printed
14004 will always be in the current font.
14006 A string argument is always terminated by the next whitespace
14007 character (space, tab, or newline); an embedded @samp{#} character is
14008 regarded as part of the argument, not as the beginning of a comment
14009 command.  An integer argument is already terminated by the next
14010 non-digit character, which then is regarded as the first character of
14011 the next argument or command.
14013 @node Document Parts,  , Argument Units, Language Concepts
14014 @subsubsection Document Parts
14016 A correct intermediate output document consists of two parts, the
14017 @dfn{prologue} and the @dfn{body}.
14019 The task of the prologue is to set the general device parameters
14020 using three exactly specified commands.  @code{gtroff}'s prologue
14021 is guaranteed to consist of the following three lines (in that order):
14023 @Example
14024 x T @var{device}
14025 x res @var{n} @var{h} @var{v}
14026 x init
14027 @endExample
14029 @noindent
14030 with the arguments set as outlined in @ref{Device Control Commands}.
14031 Note that the parser for the intermediate output format is able to
14032 swallow additional whitespace and comments as well even in the
14033 prologue.
14035 The body is the main section for processing the document data.
14036 Syntactically, it is a sequence of any commands different from the
14037 ones used in the prologue.  Processing is terminated as soon as the
14038 first @w{@samp{x stop}} command is encountered; the last line of any
14039 @code{gtroff} intermediate output always contains such a command.
14041 Semantically, the body is page oriented.  A new page is started by a
14042 @samp{p} command.  Positioning, writing, and drawing commands are
14043 always done within the current page, so they cannot occur before the
14044 first @samp{p} command.  Absolute positioning (by the @samp{H} and
14045 @samp{V} commands) is done relative to the current page; all other
14046 positioning is done relative to the current location within this page.
14048 @c ---------------------------------------------------------------------
14050 @node Command Reference, Intermediate Output Examples, Language Concepts, gtroff Output
14051 @subsection Command Reference
14053 This section describes all intermediate output commands, both from
14054 @acronym{AT&T} @code{troff} as well as the @code{gtroff} extensions.
14056 @menu
14057 * Comment Command::
14058 * Simple Commands::
14059 * Graphics Commands::
14060 * Device Control Commands::
14061 * Obsolete Command::
14062 @end menu
14064 @node Comment Command, Simple Commands, Command Reference, Command Reference
14065 @subsubsection Comment Command
14067 @table @code
14068 @item #@var{anything}@angles{end of line}
14069 A comment.  Ignore any characters from the @samp{#} character up to
14070 the next newline character.
14072 This command is the only possibility for commenting in the intermediate
14073 output.  Each comment can be preceded by arbitrary syntactical space;
14074 every command can be terminated by a comment.
14075 @end table
14077 @node Simple Commands, Graphics Commands, Comment Command, Command Reference
14078 @subsubsection Simple Commands
14080 The commands in this subsection have a command code consisting of a
14081 single character, taking a fixed number of arguments.  Most of them
14082 are commands for positioning and text writing.  These commands are
14083 smart about whitespace.  Optionally, syntactical space can be inserted
14084 before, after, and between the command letter and its arguments.
14085 All of these commands are stackable, i.e., they can be preceded by
14086 other simple commands or followed by arbitrary other commands on the
14087 same line.  A separating syntactical space is only necessary when two
14088 integer arguments would clash or if the preceding argument ends with a
14089 string argument.
14091 @table @code
14092 @ignore
14093 .if (\n[@USE_ENV_STACK] == 1) \{\
14094 .command {
14095 Open a new environment by copying the actual device configuration data
14096 to the environment stack.
14098 The current environment is setup by the device specification and
14099 manipulated by the setting commands.
14102 .command }
14103 Close the actual environment (opened by a preceding
14104 .BR { \~command)
14105 and restore the previous environment from the environment
14106 stack as the actual device configuration data.
14108 \}              \" endif @USE_ENV_STACK
14109 @end ignore
14111 @item C @var{xxx}@angles{whitespace}
14112 Print a special character named @var{xxx}.  The trailing
14113 syntactical space or line break is necessary to allow glyph names
14114 of arbitrary length.  The glyph is printed at the current print
14115 position; the glyph's size is read from the font file.  The print
14116 position is not changed.
14118 @item c @var{g}
14119 Print glyph@tie{}@var{g} at the current print position;@footnote{@samp{c}
14120 is actually a misnomer since it outputs a glyph.} the glyph's size is
14121 read from the font file.  The print position is not changed.
14123 @item f @var{n}
14124 Set font to font number@tie{}@var{n} (a non-negative integer).
14126 @item H @var{n}
14127 Move right to the absolute vertical position@tie{}@var{n} (a
14128 non-negative integer in basic units @samp{u} relative to left edge
14129 of current page.
14131 @item h @var{n}
14132 Move @var{n} (a non-negative integer) basic units @samp{u} horizontally
14133 to the right.  The original @acronym{UNIX} troff manual allows negative
14134 values for @var{n} also, but @code{gtroff} doesn't use this.
14136 @item m @var{color-scheme} @r{[}@var{component} @dots{}@r{]}
14137 Set the color for text (glyphs), line drawing, and the outline of
14138 graphic objects using different color schemes; the analoguous command
14139 for the filling color of graphic objects is @samp{DF}.  The color
14140 components are specified as integer arguments between 0 and 65536.
14141 The number of color components and their meaning vary for the
14142 different color schemes.  These commands are generated by
14143 @code{gtroff}'s escape sequence @code{\m}.  No position changing.
14144 These commands are a @code{gtroff} extension.
14146 @table @code
14147 @item mc @var{cyan} @var{magenta} @var{yellow}
14148 Set color using the CMY color scheme, having the 3@tie{}color components
14149 @var{cyan}, @var{magenta}, and @var{yellow}.
14151 @item md
14152 Set color to the default color value (black in most cases).
14153 No component arguments.
14155 @item mg @var{gray}
14156 Set color to the shade of gray given by the argument, an integer
14157 between 0 (black) and 65536 (white).
14159 @item mk @var{cyan} @var{magenta} @var{yellow} @var{black}
14160 Set color using the CMYK color scheme, having the 4@tie{}color components
14161 @var{cyan}, @var{magenta}, @var{yellow}, and @var{black}.
14163 @item mr @var{red} @var{green} @var{blue}
14164 Set color using the RGB color scheme, having the 3@tie{}color components
14165 @var{red}, @var{green}, and @var{blue}.
14167 @end table
14169 @item N @var{n}
14170 Print glyph with index@tie{}@var{n} (a non-negative integer) of the
14171 current font.  This command is a @code{gtroff} extension.
14173 @item n @var{b} @var{a}
14174 Inform the device about a line break, but no positioning is done by
14175 this command.  In @acronym{AT&T} @code{troff}, the integer arguments
14176 @var{b} and@tie{}@var{a} informed about the space before and after the
14177 current line to make the intermediate output more human readable
14178 without performing any action.  In @code{groff}, they are just ignored, but
14179 they must be provided for compatibility reasons.
14181 @item p @var{n}
14182 Begin a new page in the outprint.  The page number is set
14183 to@tie{}@var{n}.  This page is completely independent of pages formerly
14184 processed even if those have the same page number.  The vertical
14185 position on the outprint is automatically set to@tie{}0.  All
14186 positioning, writing, and drawing is always done relative to a page,
14187 so a @samp{p} command must be issued before any of these commands.
14189 @item s @var{n}
14190 Set point size to @var{n}@tie{}scaled points (this is unit @samp{z}).
14191 @acronym{AT&T} @code{troff} used the unit points (@samp{p}) instead.
14192 @xref{Output Language Compatibility}.
14194 @item t @var{xxx}@angles{whitespace}
14195 @itemx t @var{xxx} @var{dummy-arg}@angles{whitespace}
14196 Print a word, i.e., a sequence of characters @var{xxx} representing
14197 output glyphs which names are single characters, terminated by
14198 a space character or a line break; an optional second integer argument
14199 is ignored (this allows the formatter to generate an even number of
14200 arguments).  The first glyph should be printed at the current
14201 position, the current horizontal position should then be increased by
14202 the width of the first glyph, and so on for each glyph.
14203 The widths of the glyphs are read from the font file, scaled for the
14204 current point size, and rounded to a multiple of the horizontal
14205 resolution.  Special characters cannot be printed using this command
14206 (use the @samp{C} command for special characters).  This command is a
14207 @code{gtroff} extension; it is only used for devices whose @file{DESC}
14208 file contains the @code{tcommand} keyword (@pxref{DESC File Format}).
14210 @item u @var{n} @var{xxx}@angles{whitespace}
14211 Print word with track kerning.  This is the same as the @samp{t}
14212 command except that after printing each glyph, the current
14213 horizontal position is increased by the sum of the width of that
14214 glyph and@tie{}@var{n} (an integer in basic units @samp{u}).
14215 This command is a @code{gtroff} extension; it is only used for devices
14216 whose @file{DESC} file contains the @code{tcommand} keyword
14217 (@pxref{DESC File Format}).
14219 @item V @var{n}
14220 Move down to the absolute vertical position@tie{}@var{n} (a
14221 non-negative integer in basic units @samp{u}) relative to upper edge
14222 of current page.
14224 @item v @var{n}
14225 Move @var{n}@tie{}basic units @samp{u} down (@var{n} is a non-negative
14226 integer).  The original @acronym{UNIX} troff manual allows negative
14227 values for @var{n} also, but @code{gtroff} doesn't use this.
14229 @item w
14230 Informs about a paddable white space to increase readability.
14231 The spacing itself must be performed explicitly by a move command.
14233 @end table
14235 @node Graphics Commands, Device Control Commands, Simple Commands, Command Reference
14236 @subsubsection Graphics Commands
14238 Each graphics or drawing command in the intermediate output starts
14239 with the letter @samp{D}, followed by one or two characters that
14240 specify a subcommand; this is followed by a fixed or variable number
14241 of integer arguments that are separated by a single space character.
14242 A @samp{D} command may not be followed by another command on the same line
14243 (apart from a comment), so each @samp{D} command is terminated by a
14244 syntactical line break.
14246 @code{gtroff} output follows the classical spacing rules (no space
14247 between command and subcommand, all arguments are preceded by a
14248 single space character), but the parser allows optional space between
14249 the command letters and makes the space before the first argument
14250 optional.  As usual, each space can be any sequence of tab and space
14251 characters.
14253 Some graphics commands can take a variable number of arguments.
14254 In this case, they are integers representing a size measured in basic
14255 units @samp{u}.  The arguments called @var{h1}, @var{h2}, @dots{},
14256 @var{hn} stand for horizontal distances where positive means right,
14257 negative left.  The arguments called @var{v1}, @var{v2}, @dots{},
14258 @var{vn} stand for vertical distances where positive means down,
14259 negative up.  All these distances are offsets relative to the current
14260 location.
14262 Each graphics command directly corresponds to a similar @code{gtroff}
14263 @code{\D} escape sequence.  @xref{Drawing Requests}.
14265 Unknown @samp{D} commands are assumed to be device-specific.
14266 Its arguments are parsed as strings; the whole information is then
14267 sent to the postprocessor.
14269 In the following command reference, the syntax element
14270 @angles{line break} means a syntactical line break as defined above.
14272 @table @code
14273 @item D~ @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break}
14274 Draw B-spline from current position to offset (@var{h1},@var{v1}),
14275 then to offset (@var{h2},@var{v2}), if given, etc.@: up to
14276 (@var{hn},@var{vn}).  This command takes a variable number of argument
14277 pairs; the current position is moved to the terminal point of the drawn
14278 curve.
14280 @item Da @var{h1} @var{v1} @var{h2} @var{v2}@angles{line break}
14281 Draw arc from current position to
14282 (@var{h1},@var{v1})@math{+}(@var{h2},@var{v2}) with center at
14283 (@var{h1},@var{v1}); then move the current position to the final point
14284 of the arc.
14286 @item DC @var{d}@angles{line break}
14287 @itemx DC @var{d} @var{dummy-arg}@angles{line break}
14288 Draw a solid circle using the current fill color with
14289 diameter@tie{}@var{d} (integer in basic units @samp{u}) with leftmost
14290 point at the current position; then move the current position to the
14291 rightmost point of the circle.  An optional second integer argument is
14292 ignored (this allows the formatter to generate an even number of
14293 arguments).  This command is a @code{gtroff} extension.
14295 @item Dc @var{d}@angles{line break}
14296 Draw circle line with diameter@tie{}@var{d} (integer in basic units
14297 @samp{u}) with leftmost point at the current position; then move the
14298 current position to the rightmost point of the circle.
14300 @item DE @var{h} @var{v}@angles{line break}
14301 Draw a solid ellipse in the current fill color with a horizontal
14302 diameter of@tie{}@var{h} and a vertical diameter of@tie{}@var{v} (both
14303 integers in basic units @samp{u}) with the leftmost point at the
14304 current position; then move to the rightmost point of the ellipse.
14305 This command is a @code{gtroff} extension.
14307 @item De @var{h} @var{v}@angles{line break}
14308 Draw an outlined ellipse with a horizontal diameter of@tie{}@var{h}
14309 and a vertical diameter of@tie{}@var{v} (both integers in basic units
14310 @samp{u}) with the leftmost point at current position; then move to
14311 the rightmost point of the ellipse.
14313 @item DF @var{color-scheme} @r{[}@var{component} @dots{}@r{]}@angles{line break}
14314 Set fill color for solid drawing objects using different color
14315 schemes; the analoguous command for setting the color of text, line
14316 graphics, and the outline of graphic objects is @samp{m}.
14317 The color components are specified as integer arguments between 0 and
14318 65536.  The number of color components and their meaning vary for the
14319 different color schemes.  These commands are generated by @code{gtroff}'s
14320 escape sequences @w{@code{\D'F @dots{}'}} and @code{\M} (with no other
14321 corresponding graphics commands).  No position changing.  This command
14322 is a @code{gtroff} extension.
14324 @table @code
14325 @item DFc @var{cyan} @var{magenta} @var{yellow}@angles{line break}
14326 Set fill color for solid drawing objects using the CMY color scheme,
14327 having the 3@tie{}color components @var{cyan}, @var{magenta}, and
14328 @var{yellow}.
14330 @item DFd@angles{line break}
14331 Set fill color for solid drawing objects to the default fill color value
14332 (black in most cases).  No component arguments.
14334 @item DFg @var{gray}@angles{line break}
14335 Set fill color for solid drawing objects to the shade of gray given by
14336 the argument, an integer between 0 (black) and 65536 (white).
14338 @item DFk @var{cyan} @var{magenta} @var{yellow} @var{black}@angles{line break}
14339 Set fill color for solid drawing objects using the CMYK color scheme,
14340 having the 4@tie{}color components @var{cyan}, @var{magenta}, @var{yellow},
14341 and @var{black}.
14343 @item DFr @var{red} @var{green} @var{blue}@angles{line break}
14344 Set fill color for solid drawing objects using the RGB color scheme,
14345 having the 3@tie{}color components @var{red}, @var{green}, and @var{blue}.
14347 @end table
14349 @item Df @var{n}@angles{line break}
14350 The argument@tie{}@var{n} must be an integer in the range @math{-32767}
14351 to 32767.
14353 @table @asis
14354 @item @math{0 @LE @var{n} @LE 1000}
14355 Set the color for filling solid drawing objects to a shade of gray,
14356 where 0 corresponds to solid white, 1000 (the default) to solid black,
14357 and values in between to intermediate shades of gray; this is
14358 obsoleted by command @samp{DFg}.
14360 @item @math{@var{n} < 0} or @math{@var{n} > 1000}
14361 Set the filling color to the color that is currently being used for
14362 the text and the outline, see command @samp{m}.  For example, the
14363 command sequence
14365 @Example
14366 mg 0 0 65536
14367 Df -1
14368 @endExample
14370 @noindent
14371 sets all colors to blue.
14373 @end table
14375 @noindent
14376 No position changing.  This command is a @code{gtroff} extension.
14378 @item Dl @var{h} @var{v}@angles{line break}
14379 Draw line from current position to offset (@var{h},@var{v}) (integers
14380 in basic units @samp{u}); then set current position to the end of the
14381 drawn line.
14383 @item Dp @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break}
14384 Draw a polygon line from current position to offset (@var{h1},@var{v1}),
14385 from there to offset (@var{h2},@var{v2}), etc.@: up to offset
14386 (@var{hn},@var{vn}), and from there back to the starting position.
14387 For historical reasons, the position is changed by adding the sum of
14388 all arguments with odd index to the actual horizontal position and the
14389 even ones to the vertical position.  Although this doesn't make sense
14390 it is kept for compatibility.
14391 @ignore
14392 As the polygon is closed, the end of drawing is the starting point, so
14393 the position doesn't change.
14394 @end ignore
14395 This command is a @code{gtroff} extension.
14397 @item Dp @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break}
14398 Draw a solid polygon in the current fill color rather than an outlined
14399 polygon, using the same arguments and positioning as the corresponding
14400 @samp{Dp} command.
14401 @ignore
14402 No position changing.
14403 @end ignore
14404 This command is a @code{gtroff} extension.
14406 @item Dt @var{n}@angles{line break}
14407 Set the current line thickness to@tie{}@var{n} (an integer in basic
14408 units @samp{u}) if @math{@var{n}>0}; if @math{@var{n}=0} select the
14409 smallest available line thickness; if @math{@var{n}<0} set the line
14410 thickness proportional to the point size (this is the default before
14411 the first @samp{Dt} command was specified).  For historical reasons,
14412 the horizontal position is changed by adding the argument to the actual
14413 horizontal position, while the vertical position is not changed.
14414 Although this doesn't make sense it is kept for compatibility.
14415 @ignore
14416 No position changing.
14417 @end ignore
14418 This command is a @code{gtroff} extension.
14420 @end table
14422 @node Device Control Commands, Obsolete Command, Graphics Commands, Command Reference
14423 @subsubsection Device Control Commands
14425 Each device control command starts with the letter @samp{x},
14426 followed by a space character (optional or arbitrary space or tab in
14427 @code{gtroff}) and a subcommand letter or word; each argument (if any)
14428 must be preceded by a syntactical space.  All @samp{x} commands are
14429 terminated by a syntactical line break; no device control command can
14430 be followed by another command on the same line (except a comment).
14432 The subcommand is basically a single letter, but to increase
14433 readability, it can be written as a word, i.e., an arbitrary sequence
14434 of characters terminated by the next tab, space, or newline character.
14435 All characters of the subcommand word but the first are simply ignored.
14436 For example, @code{gtroff} outputs the initialization command
14437 @w{@samp{x i}} as @w{@samp{x init}} and the resolution command
14438 @w{@samp{x r}} as @w{@samp{x res}}.
14440 In the following, the syntax element @angles{line break} means a
14441 syntactical line break (@pxref{Separation}).
14443 @table @code
14444 @item xF @var{name}@angles{line break}
14445 The @samp{F} stands for @var{Filename}.
14447 Use @var{name} as the intended name for the current file in error
14448 reports.  This is useful for remembering the original file name when
14449 @code{gtroff} uses an internal piping mechanism.  The input file is
14450 not changed by this command.  This command is a @code{gtroff} extension.
14452 @item xf @var{n} @var{s}@angles{line break}
14453 The @samp{f} stands for @var{font}.
14455 Mount font position@tie{}@var{n} (a non-negative integer) with font
14456 named@tie{}@var{s} (a text word).  @xref{Font Positions}.
14458 @item xH @var{n}@angles{line break}
14459 The @samp{H} stands for @var{Height}.
14461 Set glyph height to@tie{}@var{n} (a positive integer in scaled
14462 points @samp{z}).  @acronym{AT&T} @code{troff} uses the unit points
14463 (@samp{p}) instead.  @xref{Output Language Compatibility}.
14465 @item xi@angles{line break}
14466 The @samp{i} stands for @var{init}.
14468 Initialize device.  This is the third command of the prologue.
14470 @item xp@angles{line break}
14471 The @samp{p} stands for @var{pause}.
14473 Parsed but ignored.  The original @acronym{UNIX} troff manual writes
14475 @display
14476 pause device, can be restarted
14477 @end display
14479 @item xr @var{n} @var{h} @var{v}@angles{line break}
14480 The @samp{r} stands for @var{resolution}.
14482 Resolution is@tie{}@var{n}, while @var{h} is the minimal horizontal
14483 motion, and @var{v} the minimal vertical motion possible with this
14484 device; all arguments are positive integers in basic units @samp{u}
14485 per inch.  This is the second command of the prologue.
14487 @item xS @var{n}@angles{line break}
14488 The @samp{S} stands for @var{Slant}.
14490 Set slant to@tie{}@var{n} (an integer in basic units @samp{u}).
14492 @item xs@angles{line break}
14493 The @samp{s} stands for @var{stop}.
14495 Terminates the processing of the current file; issued as the last
14496 command of any intermediate troff output.
14498 @item xt@angles{line break}
14499 The @samp{t} stands for @var{trailer}.
14501 Generate trailer information, if any.  In @var{gtroff}, this is
14502 actually just ignored.
14504 @item xT @var{xxx}@angles{line break}
14505 The @samp{T} stands for @var{Typesetter}.
14507 Set name of device to word @var{xxx}, a sequence of characters ended
14508 by the next white space character.  The possible device names coincide
14509 with those from the @code{groff} @option{-T} option.  This is the first
14510 command of the prologue.
14512 @item xu @var{n}@angles{line break}
14513 The @samp{u} stands for @var{underline}.
14515 Configure underlining of spaces.  If @var{n} is@tie{}1, start
14516 underlining of spaces; if @var{n} is@tie{}0, stop underlining of spaces.
14517 This is needed for the @code{cu} request in nroff mode and is ignored
14518 otherwise.  This command is a @code{gtroff} extension.
14520 @item xX @var{anything}@angles{line break}
14521 The @samp{x} stands for @var{X-escape}.
14523 Send string @var{anything} uninterpreted to the device.  If the line
14524 following this command starts with a @samp{+} character this line is
14525 interpreted as a continuation line in the following sense.  The
14526 @samp{+} is ignored, but a newline character is sent instead to the
14527 device, the rest of the line is sent uninterpreted.  The same applies
14528 to all following lines until the first character of a line is not a
14529 @samp{+} character.  This command is generated by the @code{gtroff}
14530 escape sequence @code{\X}.  The line-continuing feature is a
14531 @code{gtroff} extension.
14533 @end table
14535 @node Obsolete Command,  , Device Control Commands, Command Reference
14536 @subsubsection Obsolete Command
14537 In @acronym{AT&T} @code{troff} output, the writing of a single
14538 glyph is mostly done by a very strange command that combines a
14539 horizontal move and a single character giving the glyph name.  It
14540 doesn't have a command code, but is represented by a 3-character
14541 argument consisting of exactly 2@tie{}digits and a character.
14543 @table @asis
14544 @item @var{dd}@var{g}
14545 Move right @var{dd} (exactly two decimal digits) basic units @samp{u},
14546 then print glyph@tie{}@var{g} (represented as a single character).
14548 In @code{gtroff}, arbitrary syntactical space around and within this
14549 command is allowed to be added.  Only when a preceding command on the
14550 same line ends with an argument of variable length a separating space
14551 is obligatory.  In @acronym{AT&T} @code{troff}, large clusters of these
14552 and other commands are used, mostly without spaces; this made such output
14553 almost unreadable.
14555 @end table
14557 For modern high-resolution devices, this command does not make sense
14558 because the width of the glyphs can become much larger than two
14559 decimal digits.  In @code{gtroff}, this is only used for the devices
14560 @code{X75}, @code{X75-12}, @code{X100}, and @code{X100-12}.  For other
14561 devices, the commands @samp{t} and @samp{u} provide a better
14562 functionality.
14564 @c ---------------------------------------------------------------------
14566 @node Intermediate Output Examples, Output Language Compatibility, Command Reference, gtroff Output
14567 @subsection Intermediate Output Examples
14569 This section presents the intermediate output generated from the same
14570 input for three different devices.  The input is the sentence
14571 @samp{hell world} fed into @code{gtroff} on the command line.
14573 @table @asis
14574 @item High-resolution device @code{ps}
14576 This is the standard output of @code{gtroff} if no @option{-T} option
14577 is given.
14579 @example
14580 @group
14581 shell> echo "hell world" | groff -Z -T ps
14583 x T ps
14584 x res 72000 1 1
14585 x init
14586 @end group
14588 x font 5 TR
14590 s10000
14591 V12000
14592 H72000
14593 thell
14594 wh2500
14596 H96620
14597 torld
14598 n12000 0
14599 @group
14600 x trailer
14601 V792000
14602 x stop
14603 @end group
14604 @end example
14606 @noindent
14607 This output can be fed into @code{grops} to get its representation as
14608 a PostScript file.
14610 @item Low-resolution device @code{latin1}
14612 This is similar to the high-resolution device except that the
14613 positioning is done at a minor scale.  Some comments (lines starting
14614 with @samp{#}) were added for clarification; they were not generated
14615 by the formatter.
14617 @example
14618 @group
14619 shell> echo "hell world" | groff -Z -T latin1
14621 # prologue
14622 x T latin1
14623 x res 240 24 40
14624 x init
14625 @end group
14626 # begin a new page
14628 # font setup
14629 x font 1 R
14632 # initial positioning on the page
14635 # write text `hell'
14636 thell
14637 # inform about space, and issue a horizontal jump
14638 wh24
14639 # write text `world'
14640 tworld
14641 # announce line break, but do nothing because ...
14642 n40 0
14643 @group
14644 # ... the end of the document has been reached
14645 x trailer
14646 V2640
14647 x stop
14648 @end group
14649 @end example
14651 @noindent
14652 This output can be fed into @code{grotty} to get a formatted text
14653 document.
14655 @item @acronym{AT&T} @code{troff} output
14656 Since a computer monitor has a very low resolution compared to modern
14657 printers the intermediate output for the X@tie{}Window devices can use
14658 the jump-and-write command with its 2-digit displacements.
14660 @example
14661 @group
14662 shell> echo "hell world" | groff -Z -T X100
14664 x T X100
14665 x res 100 1 1
14666 x init
14667 @end group
14669 x font 5 TR
14673 H100
14674 # write text with jump-and-write commands
14675 ch07e07l03lw06w11o07r05l03dh7
14676 n16 0
14677 @group
14678 x trailer
14679 V1100
14680 x stop
14681 @end group
14682 @end example
14684 @noindent
14685 This output can be fed into @code{xditview} or @code{gxditview}
14686 for displaying in@tie{}X.
14688 Due to the obsolete jump-and-write command, the text clusters in the
14689 @acronym{AT&T} @code{troff} output are almost unreadable.
14691 @end table
14693 @c ---------------------------------------------------------------------
14695 @node Output Language Compatibility,  , Intermediate Output Examples, gtroff Output
14696 @subsection Output Language Compatibility
14698 The intermediate output language of @acronym{AT&T} @code{troff}
14699 was first documented in the @acronym{UNIX} troff manual, with later
14700 additions documented in @cite{A Typesetter-indenpendent TROFF},
14701 written by Brian Kernighan.
14703 The @code{gtroff} intermediate output format is compatible with this
14704 specification except for the following features.
14706 @itemize @bullet
14707 @item
14708 The classical quasi device independence is not yet implemented.
14710 @item
14711 The old hardware was very different from what we use today.  So the
14712 @code{groff} devices are also fundamentally different from the ones in
14713 @acronym{AT&T} @code{troff}.  For example, the @acronym{AT&T}
14714 PostScript device is called @code{post} and has a resolution of only
14715 720 units per inch, suitable for printers 20 years ago, while
14716 @code{groff}'s @code{ps} device has a resolution of
14717 72000 units per inch.  Maybe, by implementing some rescaling
14718 mechanism similar to the classical quasi device independence,
14719 @code{groff} could emulate @acronym{AT&T}'s @code{post} device.
14721 @item
14722 The B-spline command @samp{D~} is correctly handled by the
14723 intermediate output parser, but the drawing routines aren't
14724 implemented in some of the postprocessor programs.
14726 @item
14727 The argument of the commands @samp{s} and @w{@samp{x H}} has the
14728 implicit unit scaled point @samp{z} in @code{gtroff}, while
14729 @acronym{AT&T} @code{troff} has point (@samp{p}).  This isn't an
14730 incompatibility but a compatible extension, for both units coincide
14731 for all devices without a @code{sizescale} parameter in the @file{DESC}
14732 file, including all postprocessors from @acronym{AT&T} and
14733 @code{groff}'s text devices.  The few @code{groff} devices with
14734 a @code{sizescale} parameter either do not exist for @acronym{AT&T}
14735 @code{troff}, have a different name, or seem to have a different
14736 resolution.  So conflicts are very unlikely.
14738 @item
14739 The position changing after the commands @samp{Dp}, @samp{DP}, and
14740 @samp{Dt} is illogical, but as old versions of @code{gtroff} used this
14741 feature it is kept for compatibility reasons.
14743 @ignore
14744 Temporarily, there existed some confusion on the positioning after the
14745 @samp{D} commands that are groff extensions.  This has been clarified
14746 by establishing the classical rule for all @code{groff} drawing commands:
14748 @itemize
14749 @item
14750 The position after a graphic object has been drawn is at its end;
14751 for circles and ellipses, the `end' is at the right side.
14753 @item
14754 From this, the positionings specified for the drawing commands above
14755 follow quite naturally.
14756 @end itemize
14757 @end ignore
14759 @end itemize
14762 @c =====================================================================
14764 @node Font Files,  , gtroff Output, File formats
14765 @section Font Files
14766 @cindex font files
14767 @cindex files, font
14769 The @code{gtroff} font format is roughly a superset of the
14770 @code{ditroff} font format (as used in later versions of @acronym{AT&T}
14771 @code{troff} and its descendants).  Unlike the @code{ditroff} font
14772 format, there is no associated binary format; all files are text
14773 files.@footnote{Plan@tie{}9 @code{troff} has also abandoned the binary
14774 format.}  The font files for device @var{name} are stored in a directory
14775 @file{dev@var{name}}.  There are two types of file: a device description
14776 file called @file{DESC} and for each font@tie{}@var{f} a font file
14777 called@tie{}@file{@var{f}}.
14779 @menu
14780 * DESC File Format::
14781 * Font File Format::
14782 @end menu
14784 @c ---------------------------------------------------------------------
14786 @node DESC File Format, Font File Format, Font Files, Font Files
14787 @subsection @file{DESC} File Format
14788 @cindex @file{DESC} file, format
14789 @cindex font description file, format
14790 @cindex format of font description file
14791 @pindex DESC@r{ file format}
14793 The @file{DESC} file can contain the following types of line.  Except
14794 for the @code{charset} keyword which must comes last (if at all), the
14795 order of the lines is not important.
14797 @table @code
14798 @item res @var{n}
14799 @kindex res
14800 @cindex device resolution
14801 @cindex resolution, device
14802 There are @var{n}@tie{}machine units per inch.
14804 @item hor @var{n}
14805 @kindex hor
14806 @cindex horizontal resolution
14807 @cindex resolution, horizontal
14808 The horizontal resolution is @var{n}@tie{}machine units.  All horizontal
14809 quantities are rounded to be multiples of this value.
14811 @item vert @var{n}
14812 @kindex vert
14813 @cindex vertical resolution
14814 @cindex resolution, vertical
14815 The vertical resolution is @var{n}@tie{}machine units.  All vertical
14816 quantities are rounded to be multiples of this value.
14818 @item sizescale @var{n}
14819 @kindex sizescale
14820 The scale factor for point sizes.  By default this has a value of@tie{}1.
14821 One scaled point is equal to one point/@var{n}.  The arguments to the
14822 @code{unitwidth} and @code{sizes} commands are given in scaled points.
14823 @xref{Fractional Type Sizes}, for more information.
14825 @item unitwidth @var{n}
14826 @kindex unitwidth
14827 Quantities in the font files are given in machine units for fonts whose
14828 point size is @var{n}@tie{}scaled points.
14830 @item prepro @var{program}
14831 @kindex prepro
14832 Call @var{program} as a preprocessor.  Currently, this keyword is used
14833 by @code{groff} with option @option{-Thtml} only.
14835 @item postpro @var{program}
14836 @kindex postpro
14837 Call @var{program} as a postprocessor.  For example, the line
14839 @Example
14840 postpro grodvi
14841 @endExample
14843 @noindent
14844 in the file @file{devdvi/DESC} makes @code{groff} call @code{grodvi}
14845 if option @option{-Tdvi} is given (and @option{-Z} isn't used).
14847 @item tcommand
14848 @kindex tcommand
14849 This means that the postprocessor can handle the @samp{t} and @samp{u}
14850 intermediate output commands.
14852 @item sizes @var{s1} @var{s2} @dots{} @var{sn} 0
14853 @kindex sizes
14854 This means that the device has fonts at @var{s1}, @var{s2}, @dots{}
14855 @var{sn} scaled points.  The list of sizes must be terminated by@tie{}0
14856 (this is digit zero).  Each @var{si} can also be a range of sizes
14857 @var{m}-@var{n}.  The list can extend over more than one line.
14859 @item styles @var{S1} @var{S2} @dots{} @var{Sm}
14860 @kindex styles
14861 The first @var{m}@tie{}font positions are associated with styles
14862 @var{S1} @dots{} @var{Sm}.
14864 @item fonts @var{n} @var{F1} @var{F2} @var{F3} @dots{} @var{Fn}
14865 @kindex fonts
14866 Fonts @var{F1} @dots{} @var{Fn} are mounted in the font positions
14867 @var{m}+1, @dots{}, @var{m}+@var{n} where @var{m} is the number of
14868 styles.  This command may extend over more than one line.  A font name
14869 of@tie{}0 means no font is mounted on the corresponding font position.
14871 @item family @var{fam}
14872 @kindex family
14873 The default font family is @var{fam}.
14875 @item use_charnames_in_special
14876 @kindex use_charnames_in_special
14877 This command indicates that @code{gtroff} should encode special
14878 characters inside special commands.  Currently, this is only used
14879 by the @acronym{HTML} output device.  @xref{Postprocessor Access}.
14881 @item papersize @var{string} @dots{}
14882 @kindex papersize
14883 Select a paper size.  Valid values for @var{string} are the ISO paper
14884 types @code{A0}-@code{A7}, @code{B0}-@code{B7}, @code{C0}-@code{C7},
14885 @code{D0}-@code{D7}, @code{DL}, and the US paper types @code{letter},
14886 @code{legal}, @code{tabloid}, @code{ledger}, @code{statement},
14887 @code{executive}, @code{com10}, and @code{monarch}.  Case is not significant
14888 for @var{string} if it holds predefined paper types.  Alternatively,
14889 @var{string} can be a file name (e.g.@: @file{/etc/papersize}); if the file
14890 can be opened, @code{groff} reads the first line and tests for the above
14891 paper sizes.  Finally, @var{string} can be a custom paper size in the format
14892 @code{@var{length},@var{width}} (no spaces before and after the comma).
14893 Both @var{length} and @var{width} must have a unit appended; valid values
14894 are @samp{i} for inches, @samp{C} for centimeters, @samp{p} for points, and
14895 @samp{P} for picas.  Example: @code{12c,235p}.  An argument which starts
14896 with a digit is always treated as a custom paper format.  @code{papersize}
14897 sets both the vertical and horizontal dimension of the output medium.
14899 More than one argument can be specified; @code{groff} scans from left to
14900 right and uses the first valid paper specification.
14902 @item pass_filenames
14903 @kindex pass_filenames
14904 Tell @code{gtroff} to emit the name of the source file currently
14905 being processed.  This is achieved by the intermediate output command
14906 @samp{F}.  Currently, this is only used by the @acronym{HTML} output
14907 device.
14909 @item print @var{program}
14910 @kindex print
14911 Use @var{program} as a spooler program for printing.  If omitted,
14912 the @option{-l} and @option{-L} options of @code{groff} are ignored.
14914 @item charset
14915 @kindex charset
14916 This line and everything following in the file are ignored.  It is
14917 allowed for the sake of backwards compatibility.
14918 @end table
14920 The @code{res}, @code{unitwidth}, @code{fonts}, and @code{sizes} lines
14921 are mandatory.  Other commands are ignored by @code{gtroff} but may be
14922 used by postprocessors to store arbitrary information about the device
14923 in the @file{DESC} file.
14925 @kindex spare1
14926 @kindex spare2
14927 @kindex biggestfont
14928 Here a list of obsolete keywords which are recognized by @code{groff}
14929 but completely ignored: @code{spare1}, @code{spare2},
14930 @code{biggestfont}.
14932 @c ---------------------------------------------------------------------
14934 @node Font File Format,  , DESC File Format, Font Files
14935 @subsection Font File Format
14936 @cindex font file, format
14937 @cindex font description file, format
14938 @cindex format of font files
14939 @cindex format of font description files
14941 A @dfn{font file}, also (and probably better) called a @dfn{font
14942 description file}, has two sections.  The first section is a sequence
14943 of lines each containing a sequence of blank delimited words; the first
14944 word in the line is a key, and subsequent words give a value for that
14945 key.
14947 @table @code
14948 @item name @var{f}
14949 @kindex name
14950 The name of the font is@tie{}@var{f}.
14952 @item spacewidth @var{n}
14953 @kindex spacewidth
14954 The normal width of a space is@tie{}@var{n}.
14956 @item slant @var{n}
14957 @kindex slant
14958 The glyphs of the font have a slant of @var{n}@tie{}degrees.
14959 (Positive means forward.)
14961 @item ligatures @var{lig1} @var{lig2} @dots{} @var{lign} [0]
14962 @kindex ligatures
14963 Glyphs @var{lig1}, @var{lig2}, @dots{}, @var{lign} are ligatures;
14964 possible ligatures are @samp{ff}, @samp{fi}, @samp{fl}, @samp{ffi} and
14965 @samp{ffl}.  For backwards compatibility, the list of ligatures may be
14966 terminated with a@tie{}0.  The list of ligatures may not extend over more
14967 than one line.
14969 @item special
14970 @cindex special fonts
14971 @kindex special
14972 The font is @dfn{special}; this means that when a glyph is requested
14973 that is not present in the current font, it is searched for in any
14974 special fonts that are mounted.
14975 @end table
14977 Other commands are ignored by @code{gtroff} but may be used by
14978 postprocessors to store arbitrary information about the font in the font
14979 file.
14981 @cindex comments in font files
14982 @cindex font files, comments
14983 @kindex #
14984 The first section can contain comments which start with the @samp{#}
14985 character and extend to the end of a line.
14987 The second section contains one or two subsections.  It must contain a
14988 @code{charset} subsection and it may also contain a @code{kernpairs}
14989 subsection.  These subsections can appear in any order.  Each
14990 subsection starts with a word on a line by itself.
14992 @kindex charset
14993 The word @code{charset} starts the character set
14994 subsection.@footnote{This keyword is misnamed since it starts a list
14995 of ordered glyphs, not characters.}  The @code{charset} line is
14996 followed by a sequence of lines.  Each line gives information for one
14997 glyph.  A line comprises a number of fields separated by blanks or
14998 tabs.  The format is
15000 @quotation
15001 @var{name} @var{metrics} @var{type} @var{code}
15002 [@var{entity-name}] [@code{--} @var{comment}]
15003 @end quotation
15005 @cindex 8-bit input
15006 @cindex input, 8-bit
15007 @cindex accessing unnamed glyphs with @code{\N}
15008 @cindex unnamed glyphs, accessing with @code{\N}
15009 @cindex characters, unnamed, accessing with @code{\N}
15010 @cindex glyphs, unnamed, accessing with @code{\N}
15011 @kindex ---
15012 @noindent
15013 @var{name} identifies the glyph name@footnote{The distinction between
15014 input, characters, and output, glyphs, is not clearly separated in the
15015 terminology of @code{groff}; for example, the @code{char} request
15016 should be called @code{glyph} since it defines an output entity.}:
15017 If @var{name} is a single character@tie{}@var{c} then it corresponds
15018 to the @code{gtroff} input character@tie{}@var{c}; if it is of the form
15019 @samp{\@var{c}} where @var{c} is a single character, then it
15020 corresponds to the special character @code{\[@var{c}]}; otherwise it
15021 corresponds to the special character @samp{\[@var{name}]}.  If it
15022 is exactly two characters @var{xx} it can be entered as
15023 @samp{\(@var{xx}}.  Note that single-letter special characters can't
15024 be accessed as @samp{\@var{c}}; the only exception is @samp{\-} which
15025 is identical to @code{\[-]}.
15027 @code{gtroff} supports 8-bit input characters; however some utilities
15028 have difficulties with eight-bit characters.  For this reason, there is
15029 a convention that the entity name @samp{char@var{n}} is equivalent to
15030 the single input character whose code is@tie{}@var{n}.  For example,
15031 @samp{char163} would be equivalent to the character with code@tie{}163
15032 which is the pounds sterling sign in the ISO@tie{}@w{Latin-1} character set.
15033 You shouldn't use @samp{char@var{n}} entities in font description files
15034 since they are related to input, not output.  Otherwise, you get
15035 hard-coded connections between input and output encoding which
15036 prevents use of different (input) character sets.
15038 The name @samp{---} is special and indicates that the glyph is
15039 unnamed; such glyphs can only be used by means of the @code{\N}
15040 escape sequence in @code{gtroff}.
15042 The @var{type} field gives the glyph type:
15044 @table @code
15045 @item 1
15046 the glyph has a descender, for example, @samp{p};
15048 @item 2
15049 the glyph has an ascender, for example, @samp{b};
15051 @item 3
15052 the glyph has both an ascender and a descender, for example, @samp{(}.
15053 @end table
15055 The @var{code} field gives the code which the postprocessor uses to
15056 print the glyph.  The glyph can also be input to @code{gtroff}
15057 using this code by means of the @code{\N} escape sequence.  @var{code}
15058 can be any integer.  If it starts with @samp{0} it is interpreted as
15059 octal; if it starts with @samp{0x} or @samp{0X} it is interpreted as
15060 hexadecimal.  Note, however, that the @code{\N} escape sequence only
15061 accepts a decimal integer.
15063 The @var{entity-name} field gives an @acronym{ASCII} string
15064 identifying the glyph which the postprocessor uses to print the
15065 @code{gtroff} glyph @var{name}.  This field is optional and has been
15066 introduced so that the @acronym{HTML} device driver can encode its
15067 character set.  For example, the glyph @samp{\[Po]} is
15068 represented as @samp{&pound;} in @acronym{HTML} 4.0.
15070 Anything on the line after the @var{entity-name} field resp.@: after
15071 @samp{--} will be ignored.
15073 The @var{metrics} field has the form:
15075 @display
15076 @group
15077 @var{width}[@code{,}@var{height}[@code{,}@var{depth}[@code{,}@var{italic-correction}
15078   [@code{,}@var{left-italic-correction}[@code{,}@var{subscript-correction}]]]]]
15079 @end group
15080 @end display
15082 @noindent
15083 There must not be any spaces between these subfields (it has been split
15084 here into two lines for better legibility only).  Missing subfields are
15085 assumed to be@tie{}0.  The subfields are all decimal integers.  Since
15086 there is no associated binary format, these values are not required to
15087 fit into a variable of type @samp{char} as they are in @code{ditroff}.
15088 The @var{width} subfield gives the width of the glyph.  The @var{height}
15089 subfield gives the height of the glyph (upwards is positive); if a
15090 glyph does not extend above the baseline, it should be given a zero
15091 height, rather than a negative height.  The @var{depth} subfield gives
15092 the depth of the glyph, that is, the distance from the baseline to the
15093 lowest point below the baseline to which the glyph extends (downwards is
15094 positive); if a glyph does not extend below the baseline, it should be
15095 given a zero depth, rather than a negative depth.  The
15096 @var{italic-correction} subfield gives the amount of space that should
15097 be added after the glyph when it is immediately to be followed by a
15098 glyph from a roman font.  The @var{left-italic-correction} subfield
15099 gives the amount of space that should be added before the glyph when it
15100 is immediately to be preceded by a glyph from a roman font.  The
15101 @var{subscript-correction} gives the amount of space that should be
15102 added after a glyph before adding a subscript.  This should be less
15103 than the italic correction.
15105 A line in the @code{charset} section can also have the format
15107 @Example
15108 @var{name} "
15109 @endExample
15111 @noindent
15112 This indicates that @var{name} is just another name for the glyph
15113 mentioned in the preceding line.
15115 @kindex kernpairs
15116 The word @code{kernpairs} starts the kernpairs section.  This contains a
15117 sequence of lines of the form:
15119 @Example
15120 @var{c1} @var{c2} @var{n}
15121 @endExample
15123 @noindent
15124 This means that when glyph @var{c1} appears next to glyph @var{c2}
15125 the space between them should be increased by@tie{}@var{n}.  Most
15126 entries in the kernpairs section have a negative value for@tie{}@var{n}.
15130 @c =====================================================================
15131 @c =====================================================================
15133 @node Installation, Copying This Manual, File formats, Top
15134 @chapter Installation
15135 @cindex installation
15137 @c XXX
15141 @c =====================================================================
15142 @c =====================================================================
15144 @node Copying This Manual, Request Index, Installation, Top
15145 @appendix Copying This Manual
15147 @menu
15148 * GNU Free Documentation License::  License for copying this manual.
15149 @end menu
15151 @include fdl.texi
15155 @c =====================================================================
15156 @c =====================================================================
15158 @node Request Index, Escape Index, Copying This Manual, Top
15159 @appendix Request Index
15161 Requests appear without the leading control character (normally either
15162 @samp{.} or @samp{'}).
15164 @printindex rq
15168 @c =====================================================================
15169 @c =====================================================================
15171 @node Escape Index, Operator Index, Request Index, Top
15172 @appendix Escape Index
15174 Any escape sequence @code{\@var{X}} with @var{X} not in the list below
15175 emits a warning, printing glyph @var{X}.
15177 @printindex es
15181 @c =====================================================================
15182 @c =====================================================================
15184 @node Operator Index, Register Index, Escape Index, Top
15185 @appendix Operator Index
15187 @printindex op
15191 @c =====================================================================
15192 @c =====================================================================
15194 @node Register Index, Macro Index, Operator Index, Top
15195 @appendix Register Index
15197 The macro package or program a specific register belongs to is appended in
15198 brackets.
15200 A register name@tie{}@code{x} consisting of exactly one character can be
15201 accessed as @samp{\nx}.  A register name @code{xx} consisting of exactly
15202 two characters can be accessed as @samp{\n(xx}.  Register names @code{xxx}
15203 of any length can be accessed as @samp{\n[xxx]}.
15205 @printindex vr
15209 @c =====================================================================
15210 @c =====================================================================
15212 @node Macro Index, String Index, Register Index, Top
15213 @appendix Macro Index
15215 The macro package a specific macro belongs to is appended in brackets.
15216 They appear without the leading control character (normally @samp{.}).
15218 @printindex ma
15222 @c =====================================================================
15223 @c =====================================================================
15225 @node String Index, Glyph Name Index, Macro Index, Top
15226 @appendix String Index
15228 The macro package or program a specific string belongs to is appended in
15229 brackets.
15231 A string name@tie{}@code{x} consisting of exactly one character can be
15232 accessed as @samp{\*x}.  A string name @code{xx} consisting of exactly
15233 two characters can be accessed as @samp{\*(xx}.  String names @code{xxx}
15234 of any length can be accessed as @samp{\*[xxx]}.
15237 @printindex st
15241 @c =====================================================================
15242 @c =====================================================================
15244 @node Glyph Name Index, Font File Keyword Index, String Index, Top
15245 @appendix Glyph Name Index
15247 A glyph name @code{xx} consisting of exactly two characters can be
15248 accessed as @samp{\(xx}.  Glyph names @code{xxx} of any length can be
15249 accessed as @samp{\[xxx]}.
15251 @c XXX
15255 @c =====================================================================
15256 @c =====================================================================
15258 @node Font File Keyword Index, Program and File Index, Glyph Name Index, Top
15259 @appendix Font File Keyword Index
15261 @printindex ky
15265 @c =====================================================================
15266 @c =====================================================================
15268 @node Program and File Index, Concept Index, Font File Keyword Index, Top
15269 @appendix Program and File Index
15271 @printindex pg
15275 @c =====================================================================
15276 @c =====================================================================
15278 @node Concept Index,  , Program and File Index, Top
15279 @appendix Concept Index
15281 @printindex cp
15284 @bye