diff options
Diffstat (limited to 'man/groff_tmac.5.man')
-rw-r--r-- | man/groff_tmac.5.man | 1474 |
1 files changed, 1474 insertions, 0 deletions
diff --git a/man/groff_tmac.5.man b/man/groff_tmac.5.man new file mode 100644 index 0000000..fac78f5 --- /dev/null +++ b/man/groff_tmac.5.man @@ -0,0 +1,1474 @@ +.TH groff_tmac @MAN5EXT@ "@MDATE@" "groff @VERSION@" +.SH Name +groff_tmac \- macro files in the GNU +.I roff +typesetting system +. +. +.\" ==================================================================== +.\" Legal Terms +.\" ==================================================================== +.\" +.\" Copyright (C) 2000-2022 Free Software Foundation, Inc. +.\" +.\" This file is part of groff, the GNU roff typesetting system. +.\" +.\" Permission is granted to copy, distribute and/or modify this +.\" document under the terms of the GNU Free Documentation License, +.\" Version 1.3 or any later version published by the Free Software +.\" Foundation; with no Invariant Sections, with no Front-Cover Texts, +.\" and with no Back-Cover Texts. +.\" +.\" A copy of the Free Documentation License is included as a file +.\" called FDL in the main directory of the groff source package. +. +. +.\" Save and disable compatibility mode (for, e.g., Solaris 10/11). +.do nr *groff_groff_tmac_5_man_C \n[.cp] +.cp 0 +. +.\" Define fallback for groff 1.23's MR macro if the system lacks it. +.nr do-fallback 0 +.if !\n(.f .nr do-fallback 1 \" mandoc +.if \n(.g .if !d MR .nr do-fallback 1 \" older groff +.if !\n(.g .nr do-fallback 1 \" non-groff *roff +.if \n[do-fallback] \{\ +. de MR +. ie \\n(.$=1 \ +. I \%\\$1 +. el \ +. IR \%\\$1 (\\$2)\\$3 +. . +.\} +.rr do-fallback +. +. +.\" TODO: Consider parallelizing with our Texinfo node "Macro Packages". +.\" ==================================================================== +.SH Description +.\" ==================================================================== +. +Definitions of macros, +strings, +and registers for use in a +.MR roff @MAN7EXT@ +document can be collected into +.IR "macro files" , +.I roff +input files designed to produce no output themselves but instead ease +the preparation of other +.I roff +documents. +. +There is no syntactical difference between a macro file and any other +.I roff +document; +only its purpose distinguishes it. +. +When a macro file is installed at a standard location, +named according to a certain convention, +and suitable for use by a general audience, +it is termed a +.IR "macro package" . +. +Macro packages can be loaded by supplying the +.B \-m +option to +.MR @g@troff @MAN1EXT@ +or a +.I groff +front end. +. +. +.P +Each macro package stores its macro, +string, +and register definitions in one or more +.I tmac +files. +. +This name originated in early Unix culture as an abbreviation of +.RI \[lq] troff \" generic +macros\[rq]. +. +. +.P +A macro file must have a name in the form +.RI name .tmac +(or +.IR tmac. name) +and be placed in a +.RI \[lq] tmac +directory\[rq] to be loadable with the +.BI \-m name +option. +. +Section \[lq]Environment\[rq] of +.MR @g@troff @MAN1EXT@ +lists these directories. +. +Alternatively, +a +.I groff +document requiring a macro file can load it with the +.B mso +(\[lq]macro source\[rq]) request. +. +. +.P +Like any other +.I roff +document, +a macro file can use the +.RB \[lq] so \[rq] +request (\[lq]source\[rq]) to load further files relative to its own +location. +. +. +.P +Macro files are named for their most noteworthy application, +but a macro file need not define any macros. +. +It can restrict itself to defining registers and strings or invoking +other +.I groff +requests. +. +It can even be empty. +. +. +.\" ==================================================================== +.SH "Macro packages" +.\" ==================================================================== +. +Macro packages come in two varieties; +those which assume responsibility for page layout and other critical +functions +(\[lq]major\[rq] or \[lq]full-service\[rq]) +and those which do not +(\[lq]supplemental\[rq] or \[lq]auxiliary\[rq]). +. +GNU +.I roff +provides most major macro packages found in AT&T and BSD Unix systems, +an additional full-service package, +and many supplemental packages. +. +Multiple full-service macro packages cannot be used by the same +document. +. +Auxiliary packages can generally be freely combined, +though attention to their use of the +.I groff +language name spaces for identifiers +(particularly registers, +macros, +strings, +and diversions) +should be paid. +. +Name space management was a significant challenge in AT&T +.IR troff ; +.IR groff 's +support for arbitrarily long identifiers affords few excuses for name +collisions, +apart from attempts at compatibility with the demands of historical +documents. +. +. +.\" ==================================================================== +.SS "Man pages" +.\" ==================================================================== +. +.TP +.I an +.TQ +.I man +.I an +is used to compose man pages in the format originating in Version\~7 +Unix (1979). +. +It has a small macro interface and is widely used; +see +.MR groff_man @MAN7EXT@ . +. +. +.TP +.I doc +.TQ +.I mdoc +.I doc +is used to compose man pages in the format originating in 4.3BSD-Reno +(1990). +. +It provides many more features than +.IR an , +but is also larger, +more complex, +and not as widely adopted; +see +.MR groff_mdoc @MAN7EXT@ . +. +. +.P +Because readers of man pages often do not know in advance which macros +are used to format a given document, +a wrapper is available. +. +. +.TP +.I \%andoc +.TQ +.I mandoc +This macro file, +specific to +.IR groff , +recognizes whether a document uses +.I man +or +.I mdoc +format and loads the corresponding macro package. +. +Multiple man pages, +in either format, +can be handled; +.I \%andoc +reloads each macro package as necessary. +. +. +.\" ==================================================================== +.SS "Full-service packages" +.\" ==================================================================== +. +The packages in this section provide a complete set of macros for +writing documents of any kind, up to whole books. +. +They are similar in functionality; it is a matter of taste which one +to use. +. +. +.TP +.I me +The classical +.I me +macro package; see +.MR groff_me @MAN7EXT@ . +. +. +.TP +.I mm +The semi-classical +.I mm +macro package; see +.MR groff_mm @MAN7EXT@ . +. +. +.TP +.I mom +The +.I mom +macro package, only available in groff. +. +As this was not based on other packages, it was freely designed as +quite a nice, modern macro package. +. +See +.MR groff_mom @MAN7EXT@ . +. +. +.TP +.I ms +The classical +.I ms +macro package; see +.MR groff_ms @MAN7EXT@ . +. +. +.\" ==================================================================== +.SS "Localization packages" +.\" ==================================================================== +. +For Western languages, +the localization file sets the hyphenation mode and loads hyphenation +patterns and exceptions. +. +Localization files can also adjust the date format and provide +translations of strings used by some of the full-service macro packages; +alter the input encoding +(see the next section); +and change the amount of additional inter-sentence space. +. +For Eastern languages, +the localization file defines character classes and sets flags on them. +. +By default, +.I troffrc +loads the localization file for English. +. +. +.TP +.I trans +loads localized strings used by various macro packages after their +localized forms have been prepared by a localization macro file. +. +. +.P +.I groff +provides the following localization files. +. +. +.TP +.I cs +Czech; +localizes +.IR man , +.IR me , +.IR mm , +.IR mom , +and +.IR ms . +. +Sets the input encoding to Latin-2 by loading +.IR latin2.tmac . +. +. +.TP +.I de +.TQ +.I den +German; +localizes +.IR man , +.IR me , +.IR mm , +.IR mom , +and +.IR ms . +. +Sets the input encoding to Latin-1 by loading +.IR latin1.tmac . +. +. +.IP +.I de.tmac +selects hyphenation patterns for traditional orthography, +and +.I den.tmac +does the same for the new orthography +(\[lq]Recht\%schreib\%reform\[rq]). +. +. +.TP +.I en +English. +. +. +.TP +.I fr +French; +localizes +.IR man , +.IR me , +.IR mm , +.IR mom , +and +.IR ms . +. +Sets the input encoding to Latin-9 by loading +.IR latin9.tmac . +. +. +.TP +.I it +Italian; +localizes +.IR man , +.IR me , +.IR mm , +.IR mom , +and +.IR ms . +. +. +.TP +.I ja +Japanese. +. +. +.TP +.I sv +Swedish; +localizes +.IR man , +.IR me , +.IR mm , +.IR mom , +and +.IR ms . +. +Sets the input encoding to Latin-1 by loading +.IR latin1.tmac . +. +Some of the localization of the +.I mm +package is handled separately; +see +.MR groff_mmse @MAN7EXT@ . +. +. +.TP +.I zh +Chinese. +. +. +.\" ==================================================================== +.SS "Input encodings" +.\" ==================================================================== +. +.TP +.I latin1 +.TQ +.I latin2 +.TQ +.I latin5 +.TQ +.I latin9 +are various ISO\~8859 input encodings supported by +.IR groff . +. +On systems using ISO character encodings, +.I groff +loads +.I latin1.tmac +automatically at startup. +. +A document that uses Latin-2, +Latin-5, +or Latin-9 +can specify one of these alternative encodings. +. +. +.TP +.I cp1047 +provides support for EBCDIC-based systems. +. +On those platforms, +.I groff +loads +.I cp1047.tmac +automatically at startup. +. +. +.P +Because different input character codes constitute valid GNU +.I troff \" GNU +input on ISO and EBCDIC systems, +the +.I latin +macro files cannot be used on EBCDIC systems, +and +.I cp1047 +cannot be used on ISO systems. +. +. +.\" ==================================================================== +.SS "Auxiliary packages" +.\" ==================================================================== +. +The macro packages in this section are not intended for stand-alone +use, +but can add functionality to any other macro package or to plain +(\[lq]raw\[rq]) +.I groff +documents. +. +. +.\" TODO: +.\" a4 +.\" devtag +.\" doc-old +.\" europs +.\" psatk +.\" psfig +.TP +.I 62bit +provides macros for addition, +multiplication, +and division of 62-bit integers +(allowing safe multiplication of signed 31-bit integers, +for example). +. +. +.TP +.I hdtbl +allows the generation of tables using a syntax similar to the HTML table +model. +. +This Heidelberger table macro package is not a preprocessor, +which can be useful if the contents of table entries are determined by +macro calls or string interpolations. +. +Compare to +.MR @g@tbl @MAN1EXT@ . +. +It works only with the +.B ps +and +.B pdf +output devices. +. +See +.MR groff_hdtbl @MAN7EXT@ . +. +. +.TP +.I papersize +enables the paper format to be set on the command line by giving a +.RB \[lq] \-d +.BI \%paper= format\c +\[rq] +option to +.IR @g@troff . +. +Possible values for +.I format +are the ISO and DIN formats +.RB \[lq] A0 \[en] A6 \[rq], +.RB \[lq] B0 \[en] B6 \[rq], +.RB \[lq] C0 \[en] C6 \[rq], +and +.RB \[lq] D0 \[en] D6 \[rq]; +.\" XXX: src/libs/libgroff/paper.cpp also supports [ABCD]7. +the U.S.\& formats +.RB \%\[lq] letter \[rq], +.RB \%\[lq] legal \[rq], +.RB \%\[lq] tabloid \[rq], +.RB \%\[lq] ledger \[rq], +.RB \%\[lq] statement \[rq], +and +.RB \%\[lq] executive \[rq]; +and the envelope formats +.RB \%\[lq] com10 \[rq], +.RB \%\[lq] monarch \[rq], +and +.RB \%\[lq] DL \[rq]. +. +All formats, +even those for envelopes, +are in portrait orientation: +the length measurement is vertical. +. +Appending \[lq]l\[rq] (ell) to any of these denotes landscape +orientation instead. +. +This macro file assumes one-inch horizontal margins, +and sets registers recognized by the +.I groff +.IR man , +.IR mdoc , +.IR mm , +.IR mom , +and +.I ms +packages to configure them accordingly. +. +If you want different margins, +you will need to use those packages' facilities, +or +.I @g@troff +.B ll +and/or +.B po +requests to adjust them. +. +An output device typically requires command-line options +.B \-p +and +.B \-l +to override the paper dimensions and orientation, +respectively, +defined in its +.I DESC +file; +see subsection \[lq]Paper format\[rq] +of +.MR groff @MAN1EXT@ . +. +This macro file is normally loaded at startup by the +.I troffrc +file when formatting for a typesetting device +(but not a terminal). +. +. +.TP +.I pdfpic +provides a single macro, +.BR PDFPIC , +to include a PDF graphic in a document using features of the +.B pdf +output driver. +. +For other output devices, +.B PDFPIC +calls +.BR PSPIC , +with which it shares an interface +(see below). +. +This macro file is normally loaded at startup by the +.I troffrc +file. +. +. +.TP +.I pic +supplies definitions of the macros +.BR PS , +.BR PE , +and +.BR PF , +usable with the +.MR @g@pic @MAN1EXT@ +preprocessor. +. +They center each picture. +. +Use it if your document does not use a full-service macro package, +or that package does not supply working +.I pic +macro definitions. +. +Except for +.I man +and +.IR mdoc , +those provided with +.I groff +already do so +(exception: +.I mm +employs the name +.B PF +for a different purpose). +. +. +.TP +.I pspic +provides a macro, +.BR PSPIC , +that includes a PostScript graphic in a document. +. +The +.BR ps , +.BR dvi , +.BR html , +and +.B xhtml +output devices support such inclusions; +for all other drivers, +the image is replaced with a rectangular border of the same size. +. +.I pspic.tmac +is loaded at startup by the +.I troffrc +file. +. +. +.IP +Its syntax is as follows. +.RS +.IP +\&\fB.PSPIC\fP \ +[\fB\-L\fP\|\ +|\|\fB\-R\fP\|\ +|\|\fB\-C\fP\|\ +|\|\fB\-I\fP\~\fIn\fP] \ +\fI\|file\fP [\fIwidth\fP [\,\fIheight\/\fP]] +.RE +. +. +.IP +.I file +is the name of the PostScript file; +.I width +and +.I height +give the desired width and height of the image. +. +If neither a +.I width +nor a +.I height +argument is specified, +the image's natural width +(as given in the file's bounding box) +or the current line length is used as the width, +whatever is smaller. +. +The +.I width +and +.I height +arguments may have scaling units attached; +the default scaling unit +.RB is\~ i . +. +.B PSPIC +scales the graphic uniformly in the horizontal and vertical directions +so that it is no more than +.I width +wide +and +.I height +high. +. +Option +.B \-C +centers the graphic horizontally; +this is the default. +. +.B \-L +and +.B \-R +left- and right-align the graphic, +respectively. +. +.B \-I +indents the graphic +.RI by\~ n +(with a default scaling unit +.RB of\~ m ). +. +. +.IP +To use +.B PSPIC +within a diversion, +we recommend extending it with the following code, +assuring that the diversion's width completely covers the image's width. +. +. +.RS +.IP +.EX +\&.am PSPIC +\&.\~\~vpt 0 +\&\[rs]h\[aq](\[rs]\[rs]n[ps\-offset]u + \[rs]\[rs]n[ps\-deswid]u)\[aq] +\&.\~\~sp \-1 +\&.\~\~vpt 1 +\&.. +.EE +.RE +. +. +.IP +Failure to load +.BR PSPIC 's +image argument is not an error. +. +(The +.B psbb +request does issue an error diagnostic.) +. +To make such a failure fatal, +append to the +.B pspic*error\-hook +macro. +. +. +.RS +.IP +.EX +\&.am pspic*error\-hook +\&.\~\~ab +\&.. +.EE +.RE +. +. +.TP +.I ptx +provides a macro, +.BR xx , +to format permuted index entries as produced by the GNU +.MR ptx 1 +program. +. +If your formatting needs differ, +copy the macro into your document and adapt it to your needs. +. +. +.TP +.I rfc1345 +defines special character escape sequences named for the glyph mnemonics +specified in RFC\~1345 and the digraph table of the Vim text editor. +. +See +.MR groff_rfc1345 @MAN7EXT@ . +. +. +.TP +.I sboxes +offers an interface to the +.RB \[lq] "pdf: background" \[rq] +device control command supported by +.MR gropdf @MAN1EXT@ . +. +Using this package, +.I groff ms +documents can draw colored rectangles beneath any output. +. +.RS +.TP +.BI \%.BOXSTART\~SHADED\~ color\~\c +.BI \%OUTLINED\~ color\~\c +.BI \%INDENT\~ size\~\c +.BI \%WEIGHT\~ size +begins a box, +where the argument after +.B \%SHADED +gives the fill color and that after +.B \%OUTLINED +the border color. +. +Omit the former to get a borderless filled box and the latter for a +border with no fill. +. +The specified +.B \%WEIGHT +is used if the box is +.BR \%OUTLINED . +. +. +.IP +.B \%INDENT +precedes a value which leaves a gap between the border and the contents +inside the box. +. +. +.IP +Each +.I color +must be a defined +.I groff +color name, +and each +.I size +a valid +.I groff +numeric expression. +. +The keyword/value pairs can be specified in any order. +.RE +. +. +.IP +Boxes can be stacked, +so you can start a box within another box; +usually the later boxes would be smaller than the containing box, +but this is not enforced. +. +When using +.BR \%BOXSTART , +the left position is the current indent minus the +.B \%INDENT +in the command, +and the right position is the left position +(calculated above) +plus the current line length and twice the indent. +. +. +.RS +.TP +.B \%.BOXSTOP +takes no parameters. +. +It closes the most recently started box at the current vertical position +after adding its +.B \%INDENT +spacing. +.RE +. +. +.IP +Your +.I groff +documents can conditionally exercise the +.I sboxes +macros. +. +The register +.B \%GSBOX +is defined if the package is loaded, +and interpolates a true value if the +.B pdf +output device is in use. +. +. +.IP +.I sboxes +furthermore hooks into the +.MR groff_ms @MAN7EXT@ +package to receive notifications when footnotes are growing, +so that it can close boxes on a page before footnotes are printed. +. +When that condition obtains, +.I sboxes +will close open boxes two points +above the footnote separator and re-open them on the next page. +. +(This amount probably will not match the box's +.BR \%INDENT .) +. +. +.IP +See +.UR file://@DOCDIR@/\:\%msboxes\:.pdf +\[lq]Using PDF boxes with +.I groff +and the +.I ms +macros\[rq] +.UE +for a demonstration. +. +. +.TP +.I trace +aids the debugging of +.I groff +documents by tracing macro calls. +. +See +.MR groff_trace @MAN7EXT@ . +. +. +.TP +.I www +defines macros corresponding to HTML elements. +. +See +.MR groff_www @MAN7EXT@ . +. +. +.\" ==================================================================== +.SH Naming +.\" ==================================================================== +. +AT&T +.I nroff \" AT&T +and +.I troff \" AT&T +were implemented before the conventions of the modern C +.MR getopt 3 +call evolved, +and used a naming scheme for macro packages that looks odd to modern +eyes. +. +Macro packages were typically loaded using the +.B \-m +option to the formatter; +when directly followed by its argument without an intervening space, +this looked like a long option preceded by a single minus\[em]a +sensation in the computer stone age. +. +Macro packages therefore came to be known by names that started with the +letter \[lq]m\[rq], +which was omitted from the name of the macro file as stored on disk. +. +For example, +the manuscript macro package was stored as +.I tmac.s +and loaded with the option +.BR \-ms . +. +. +.P +.I groff +commands permit space between an option and its argument. +. +The syntax +.RB \[lq] "groff \-m s" \[rq] +makes the macro file name more clear but may surprise users familiar +with the original convention, +unaware that the package's \[lq]real\[rq] name was \[lq]s\[rq] all +along. +. +For such packages of long pedigree, +.I groff +accommodates different users' expectations by supplying wrapper macro +files that load the desired file with +.B mso +requests. +. +Thus, +all of +.RB \[lq] "groff \-m s" \[rq], +.RB \[lq] "groff \-m ms" \[rq], +.RB \[lq] "groff \-ms" \[rq], +and +.RB \[lq] "groff \-mms" \[rq] +serve to load the manuscript macros. +. +. +.P +Wrappers are not provided for packages of more recent vintage, +like +.IR www.tmac . +. +. +.P +As noted in passing above, +AT&T +.I troff \" AT&T +named macro files in the form +.IR tmac. name. +. +It has since become conventional in operating systems to use a suffixed +file name extension to suggest a file type or format. +. +. +.\" ==================================================================== +.SH Inclusion +.\" ==================================================================== +. +The traditional method of employing a macro package is to specify the +.B \-m +.I package +option to the formatter, +which then reads +.IR package 's +macro file prior to any input files. +. +Historically, +.I package +was sought in a file named +.IR tmac. package +(that is, +with a +.RB \[lq] tmac.\& \[rq] +prefix). +. +GNU +.I troff \" GNU +searches for +.RI package .tmac +in the macro path; +if not found, +it looks for +.IR tmac. package +instead, +and vice versa. +. +. +.P +Alternatively, +one could include a macro file by using the request +.RB \[lq] .so +.IR file-name \[rq] +in the document; +.I file-name +is resolved relative to the location of the input document. +. +GNU +.I troff \" GNU +offers an improved feature in the similar request +.RB \[lq] mso +.IR package-file-name \[rq], +which searches the macro path for +.IR package-file-name . +. +Because its argument is a file name, +its +.RB \[lq] .tmac \[rq] +component must be included for the file to be found; +however, +as a convenience, +if opening it fails, +.B mso +strips any such suffix and tries again with a +.RB \[lq] tmac.\& \[rq] +prefix, +and vice versa. +. +. +.P +If a sourced file requires preprocessing, +for example if it includes +.I tbl \" generic +tables +or +.I eqn \" generic +equations, +the preprocessor +.MR @g@soelim @MAN1EXT@ +must be used. +. +This can be achieved with a pipeline or, +in +.IR groff , +by specifying +the +.B \-s +option to the formatter +(or front end). +. +.MR man 1 +librarian programs generally call +.I @g@soelim +automatically. +. +(Macro packages themselves generally do not require preprocessing.) +. +. +.ig +.\" ==================================================================== +.SH Convention +.\" ==================================================================== +. +.\" This section does not fit into the framework of this document. +. +There is a convention that is supported by many modern roff +typesetters and +.MR man 1 +programs, the +.I preprocessor word +described in the following. +. +.P +If the first line in a document is a comment, the first word (after the +comment characters and a blank) constitutes the +.B preprocessor +.BR word . +That means that the letters of this word are interpreted as +abbreviations for those preprocessor commands that should be run +when formatting the document. +. +Mostly, only the letters corresponding to the options for the +preprocessors are recognized, +\[oq]e\[cq] +(for +.IR eqn ), +.\" \[oq]G\[cq], +.\" \[oq]g\[cq], +\[oq]p\[cq] +(for +.IR pic ), +\[oq]R\[cq] +(for +.IR refer ), +\[oq]s\[cq] +(for +.IR soelim ), +and +\[oq]t\[cq] +(for +.IR tbl ). +(see +.MR roff @MAN7EXT@ ). +. +. +.P +Besides being a good reminder for the user, some formatters (like the +.MR man 1 +program) are even able to automatically start the preprocessors +specified in the preprocessor word, but do not bet on this. +. +. +.P +The +.I man +program handles some preprocessors automatically, such that in +man\~pages only the following characters should be used: +\[oq]e\[cq], \[oq]p\[cq], and \[oq]t\[cq]. +. +. +.. +.\" ==================================================================== +.SH "Writing macros" +.\" ==================================================================== +. +A +.MR roff @MAN7EXT@ +document is a text file that is enriched by predefined formatting +constructs, such as requests, escape sequences, strings, numeric +registers, and macros from a macro package. +. +These elements are described in +.MR roff @MAN7EXT@ . +. +. +.P +To give a document a personal style, it is most useful to extend the +existing elements by defining some macros for repeating tasks; the best +place for this is near the beginning of the document or in a separate +file. +. +. +.P +Macros without arguments are just like strings. +. +But the full power of macros occurs when arguments are passed with a +macro call. +. +Within the macro definition, the arguments are available as the escape +sequences +.BR \[rs]$1 , +\&.\|.\|., +.BR \[rs]$9 , +.BR \[rs]$[ .\|.\|. ] , +.BR \[rs]$* , +and +.BR \[rs]$@ , +the name under which the macro was called is in +.BR \[rs]$0 , +and the number of arguments is in register +.BR \[rs]n[.$] ; +see +.MR groff @MAN7EXT@ . +. +. +.\" ==================================================================== +.SS "Draft mode" +.\" ==================================================================== +. +Writing groff macros is easy when the escaping mechanism is temporarily +disabled. +. +In groff, this is done by enclosing the macro definition(s) within a +pair of +.B .eo +and +.B .ec +requests. +. +Then the body in the macro definition is just like a normal part of +the document \[em] text enhanced by calls of requests, macros, +strings, registers, etc. +. +For example, the code above can be written in a simpler way by +. +. +.IP +.ds @1 \[rs]f[I]\[rs]$0\[rs]f[]\" +.ds @2 arguments:\" +.EX +\&.eo +\&.ds midpart was called with the following +\&.de print_args +\&\*[@1]\ \[rs]*[midpart]\ \[rs]n[.$]\ \*[@2] +\&\[rs]$* +\&.. +\&.ec +.EE +.rm @1 +.rm @2 +. +. +.P +Unfortunately, draft mode cannot be used universally. +. +Although it is good enough for defining normal macros, draft mode +fails with advanced applications, such as indirectly defined +strings, registers, etc. +. +An optimal way is to define and test all macros in draft mode and then +do the backslash doubling as a final step; do not forget to remove the +.I .eo +request. +. +. +.\" ==================================================================== +.SS "Tips for macro definitions" +.\" ==================================================================== +. +.IP \(bu +Start every line with a dot, for example, by using the groff request +.B .nop +for text lines, or write your own macro that handles also text lines +with a leading dot. +. +.RS +.IP +.EX +\&.de Text +\&.\ \ if (\[rs]\[rs]n[.$] == 0)\ \[rs] +\&.\ \ \ \ return +\&.\ \ nop\ \[rs])\[rs]\[rs]$*\[rs]) +\&.. +.EE +.RE +. +.IP \(bu +Write a comment macro that works both for copy and draft modes; +since the escape character is off in draft mode, +trouble might occur when comment escape sequences are used. +. +For example, the following macro just ignores its arguments, so it +acts like a comment line: +. +.RS +.IP +.EX +\&.de\ c +\&.. +\&.c\ This\ is\ like\ a\ comment\ line. +.EE +.RE +. +.IP \(bu +In long macro definitions, make ample use of comment lines or +almost-empty lines (this is, lines which have a leading dot +and nothing else) for a better structuring. +. +.IP \(bu +To increase readability, use groff's indentation facility for +requests and macro calls (arbitrary whitespace after the leading dot). +. +. +.\" ==================================================================== +.SS Diversions +.\" ==================================================================== +. +Diversions can be used to implement quite advanced programming +constructs. +. +They are comparable to pointers to large data structures in the +C\~programming language, but their usage is quite different. +. +. +.P +In their simplest form, diversions are multi-line strings, but +diversions get their power when used dynamically within macros. +. +The (formatted) information stored in a diversion can be retrieved by +calling the diversion just like a macro. +. +. +.P +Most of the problems arising with diversions can be avoided if you +remember that diversions always store complete lines. +. +Using diversions when the line buffer has not been flushed produces +strange results; not knowing this, many people get desperate about +diversions. +. +To ensure that a diversion works, add line breaks at the right +places. +. +To be safe, enclose everything that has to do with diversions within +a pair of line breaks; for example, by explicitly using +.B .br +requests. +. +This rule should be applied to diversion definition, both inside and +outside, and to all calls of diversions. +. +This is a bit of overkill, but it works nicely. +. +. +.P +(If you really need diversions which should ignore the current partial +line, use environments to save the current partial line and/\:or use the +.B .box +request.) +. +. +.P +The most powerful feature using diversions is to start a diversion +within a macro definition and end it within another macro. +. +Then everything between each call of this macro pair is stored within +the diversion and can be manipulated from within the macros. +. +. +.\" ==================================================================== +.SH Authors +.\" ==================================================================== +. +This document was written by +.MT groff\-bernd\:.warken\-72@\:web\:.de +Bernd Warken +.ME , +.MT wl@\:gnu\:.org +Werner Lemberg +.ME , +and +.MT g.branden\:.robinson@\:gmail\:.com +G.\& Branden Robinson +.ME . +. +. +.\" ==================================================================== +.SH "See also" +.\" ==================================================================== +. +.IR "Groff: The GNU Implementation of troff" , +by Trent A.\& Fisher and Werner Lemberg, +is the primary +.I groff +manual. +. +You can browse it interactively with \[lq]info groff\[rq]. +. +. +.LP +The +.UR https://\:wiki\:.linuxfoundation\:.org/\:lsb/\:fhs +Filesystem Hierarchy Standard +.UE +is maintained by the Linux Foundation. +. +. +.TP +.MR groff @MAN1EXT@ +is an overview of the +.I groff +system. +. +. +.TP +.MR groff_man @MAN7EXT@ , +.TQ +.MR groff_mdoc @MAN7EXT@ , +.TQ +.MR groff_me @MAN7EXT@ , +.TQ +.MR groff_mm @MAN7EXT@ , +.TQ +.MR groff_mom @MAN7EXT@ , +.TQ +.MR groff_ms @MAN7EXT@ , +.TQ +.MR groff_rfc1345 @MAN7EXT@ , +.TQ +.MR groff_trace @MAN7EXT@ , +\~and +.TQ +.MR groff_www @MAN7EXT@ +are +.I groff +macro packages. +. +. +.TP +.MR groff @MAN7EXT@ +summarizes the language recognized by GNU +.IR troff . \" GNU +. +. +.TP +.MR troff @MAN1EXT@ +documents the default macro file search path. +. +. +.\" Restore compatibility mode (for, e.g., Solaris 10/11). +.cp \n[*groff_groff_tmac_5_man_C] +.do rr *groff_groff_tmac_5_man_C +. +. +.\" Local Variables: +.\" fill-column: 72 +.\" mode: nroff +.\" End: +.\" vim: set filetype=groff textwidth=72: |