diff options
Diffstat (limited to 'contrib/groff/doc/groff-2')
-rw-r--r-- | contrib/groff/doc/groff-2 | 5755 |
1 files changed, 4549 insertions, 1206 deletions
diff --git a/contrib/groff/doc/groff-2 b/contrib/groff/doc/groff-2 index 052ac12..1861ac7 100644 --- a/contrib/groff/doc/groff-2 +++ b/contrib/groff/doc/groff-2 @@ -1,9 +1,9 @@ -This is groff, produced by makeinfo version 4.3d from ./groff.texinfo. +This is groff, produced by makeinfo version 4.8 from ./groff.texinfo. -This manual documents GNU `troff' version 1.19. + This manual documents GNU `troff' version 1.19.2. - Copyright (C) 1994-2000, 2001, 2002, 2003 Free Software Foundation, -Inc. + Copyright (C) 1994-2000, 2001, 2002, 2003, 2004, 2005 Free Software +Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, @@ -16,1552 +16,4895 @@ Inc. (a) The FSF's Back-Cover Text is: `You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise funds for GNU development." - + INFO-DIR-SECTION Typesetting START-INFO-DIR-ENTRY * Groff: (groff). The GNU troff document formatting system. END-INFO-DIR-ENTRY -File: groff, Node: Man options, Next: Man usage, Prev: man, Up: man +File: groff, Node: Drawing Requests, Next: Traps, Prev: Page Motions, Up: gtroff Reference + +5.23 Drawing Requests +===================== + +`gtroff' provides a number of ways to draw lines and other figures on +the page. Used in combination with the page motion commands (see *Note +Page Motions::, for more info), a wide variety of figures can be drawn. +However, for complex drawings these operations can be quite +cumbersome, and it may be wise to use graphic preprocessors like `gpic' +or `ggrn'. *Note gpic::, and *Note ggrn::, for more information. + + All drawing is done via escapes. + + -- Escape: \l'l' + -- Escape: \l'lg' + Draw a line horizontally. L is the length of the line to be + drawn. If it is positive, start the line at the current location + and draw to the right; its end point is the new current location. + Negative values are handled differently: The line starts at the + current location and draws to the left, but the current location + doesn't move. + + L can also be specified absolutely (i.e. with a leading `|') which + draws back to the beginning of the input line. Default scaling + indicator is `m'. + + The optional second parameter G is a glyph to draw the line with. + If this second argument is not specified, `gtroff' uses the + underscore glyph, `\[ru]'. + + To separate the two arguments (to prevent `gtroff' from + interpreting a drawing glyph as a scaling indicator if the glyph is + represented by a single character) use `\&'. + + Here a small useful example: + + + .de box + \[br]\\$*\[br]\l'|0\[rn]'\l'|0\[ul]' + .. + + Note that this works by outputting a box rule (a vertical line), + then the text given as an argument and then another box rule. + Finally, the line drawing escapes both draw from the current + location to the beginning of the _input_ line - this works because + the line length is negative, not moving the current point. + + -- Escape: \L'l' + -- Escape: \L'lg' + Draw vertical lines. Its parameters are similar to the `\l' + escape, except that the default scaling indicator is `v'. The + movement is downwards for positive values, and upwards for + negative values. The default glyph is the box rule glyph, + `\[br]'. As with the vertical motion escapes, text processing + blindly continues where the line ends. + + + This is a \L'3v'test. + + Here the result, produced with `grotty'. + + + This is a + | + | + |test. + + + -- Escape: \D'command arg ...' + The `\D' escape provides a variety of drawing functions. Note + that on character devices, only vertical and horizontal lines are + supported within `grotty'; other devices may only support a subset + of the available drawing functions. + + The default scaling indicator for all subcommands of `\D' is `m' + for horizontal distances and `v' for vertical ones. Exceptions + are `\D'f ...'' and `\D't ...'' which use `u' as the default, and + `\D'FX ...'' which arguments are treated similar to the `defcolor' + request. + + `\D'l DX DY'' + Draw a line from the current location to the relative point + specified by (DX,DY), where positive values mean down and + right, respectively. The end point of the line is the new + current location. + + The following example is a macro for creating a box around a + text string; for simplicity, the box margin is taken as a + fixed value, 0.2m. + + + .de BOX + . nr @wd \w'\\$1' + \h'.2m'\ + \h'-.2m'\v'(.2m - \\n[rsb]u)'\ + \D'l 0 -(\\n[rst]u - \\n[rsb]u + .4m)'\ + \D'l (\\n[@wd]u + .4m) 0'\ + \D'l 0 (\\n[rst]u - \\n[rsb]u + .4m)'\ + \D'l -(\\n[@wd]u + .4m) 0'\ + \h'.2m'\v'-(.2m - \\n[rsb]u)'\ + \\$1\ + \h'.2m' + .. + + First, the width of the string is stored in register `@wd'. + Then, four lines are drawn to form a box, properly offset by + the box margin. The registers `rst' and `rsb' are set by the + `\w' escape, containing the largest height and depth of the + whole string. + + `\D'c D'' + Draw a circle with a diameter of D with the leftmost point at + the current position. After drawing, the current location is + positioned at the rightmost point of the circle. + + `\D'C D'' + Draw a solid circle with the same parameters and behaviour as + an outlined circle. No outline is drawn. + + `\D'e X Y'' + Draw an ellipse with a horizontal diameter of X and a vertical + diameter of Y with the leftmost point at the current position. + After drawing, the current location is positioned at the + rightmost point of the ellipse. + + `\D'E X Y'' + Draw a solid ellipse with the same parameters and behaviour + as an outlined ellipse. No outline is drawn. + + `\D'a DX1 DY1 DX2 DY2'' + Draw an arc clockwise from the current location through the + two specified relative locations (DX1,DY1) and (DX2,DY2). + The coordinates of the first point are relative to the + current position, and the coordinates of the second point are + relative to the first point. After drawing, the current + position is moved to the final point of the arc. + + `\D'~ DX1 DY1 DX2 DY2 ...'' + Draw a spline from the current location to the relative point + (DX1,DY1) and then to (DX2,DY2), and so on. The current + position is moved to the terminal point of the drawn curve. + + `\D'f N'' + Set the shade of gray to be used for filling solid objects + to N; N must be an integer between 0 and 1000, where 0 + corresponds solid white and 1000 to solid black, and values + in between correspond to intermediate shades of gray. This + applies only to solid circles, solid ellipses, and solid + polygons. By default, a level of 1000 is used. + + Despite of being silly, the current point is moved + horizontally to the right by N. + + Don't use this command! It has the serious drawback that it + will be always rounded to the next integer multiple of the + horizontal resolution (the value of the `hor' keyword in the + `DESC' file). Use `\M' (*note Colors::) or `\D'Fg ...'' + instead. + + `\D'p DX1 DY1 DX2 DY2 ...'' + Draw a polygon from the current location to the relative + position (DX1,DY1) and then to (DX2,DY2) and so on. When the + specified data points are exhausted, a line is drawn back to + the starting point. The current position is changed by + adding the sum of all arguments with odd index to the actual + horizontal position and the even ones to the vertical + position. + + `\D'P DX1 DY1 DX2 DY2 ...'' + Draw a solid polygon with the same parameters and behaviour + as an outlined polygon. No outline is drawn. + + Here a better variant of the box macro to fill the box with + some color. Note that the box must be drawn before the text + since colors in `gtroff' are not transparent; the filled + polygon would hide the text completely. + + + .de BOX + . nr @wd \w'\\$1' + \h'.2m'\ + \h'-.2m'\v'(.2m - \\n[rsb]u)'\ + \M[lightcyan]\ + \D'P 0 -(\\n[rst]u - \\n[rsb]u + .4m) \ + (\\n[@wd]u + .4m) 0 \ + 0 (\\n[rst]u - \\n[rsb]u + .4m) \ + -(\\n[@wd]u + .4m) 0'\ + \h'.2m'\v'-(.2m - \\n[rsb]u)'\ + \M[]\ + \\$1\ + \h'.2m' + .. + + `\D't N'' + Set the current line thickness to N machine units. A value of + zero selects the smallest available line thickness. A + negative value makes the line thickness proportional to the + current point size (this is the default behaviour of AT&T + `troff'). + + Despite of being silly, the current point is moved + horizontally to the right by N. + + `\D'FSCHEME COLOR_COMPONENTS'' + Change current fill color. SCHEME is a single letter + denoting the color scheme: `r' (rgb), `c' (cmy), `k' (cmyk), + `g' (gray), or `d' (default color). The color components use + exactly the same syntax as in the `defcolor' request (*note + Colors::); the command `\D'Fd'' doesn't take an argument. + + _No_ position changing! + + Examples: + + + \D'Fg .3' \" same gray as \D'f 700' \D'Fr #0000ff' \" + blue + + *Note Graphics Commands::. + + -- Escape: \b'string' + "Pile" a sequence of glyphs vertically, and center it vertically + on the current line. Use it to build large brackets and braces. + + Here an example how to create a large opening brace: + + + \b'\[lt]\[bv]\[lk]\[bv]\[lb]' + + The first glyph is on the top, the last glyph in STRING is at the + bottom. Note that `gtroff' separates the glyphs vertically by 1m, + and the whole object is centered 0.5m above the current baseline; + the largest glyph width is used as the width for the whole object. + This rather unflexible positioning algorithm doesn't work with + `-Tdvi' since the bracket pieces vary in height for this device. + Instead, use the `eqn' preprocessor. + + *Note Manipulating Spacing::, how to adjust the vertical spacing + with the `\x' escape. + + +File: groff, Node: Traps, Next: Diversions, Prev: Drawing Requests, Up: gtroff Reference -Options -------- +5.24 Traps +========== - The command line format for using the `man' macros with `groff' is: +"Traps" are locations, which, when reached, call a specified macro. +These traps can occur at a given location on the page, at a given +location in the current diversion, at a blank line, after a certain +number of input lines, or at the end of input. + Setting a trap is also called "planting". It is also said that a +trap is "sprung" if the associated macro is executed. - groff -m man [ -rLL=LENGTH ] [ -rLT=LENGTH ] [ -rFT=DIST ] - [ -rcR=1 ] [ -rC1 ] [ -rD1 ] [-rHY=FLAGS ] - [ -rPNNN ] [ -rSXX ] [ -rXNNN ] - [ -rIN=LENGTH ] [ -rSN=LENGTH ] [ FILES... ] +* Menu: -It is possible to use `-man' instead of `-m man'. +* Page Location Traps:: +* Diversion Traps:: +* Input Line Traps:: +* Blank Line Traps:: +* End-of-input Traps:: -`-rcR=1' - This option (the default if a TTY output device is used) creates a - single, very long page instead of multiple pages. Use `-rcR=0' to - disable it. + +File: groff, Node: Page Location Traps, Next: Diversion Traps, Prev: Traps, Up: Traps -`-rC1' - If more than one manual page is given on the command line, number - the pages continuously, rather than starting each at 1. - -`-rD1' - Double-sided printing. Footers for even and odd pages are - formatted differently. - -`-rFT=DIST' - Set the position of the footer text to DIST. If positive, the - distance is measured relative to the top of the page, otherwise it - is relative to the bottom. The default is -0.5i. - -`-rHY=FLAGS' - Set hyphenation flags. Possible values are 1 to hyphenate without - restrictions, 2 to not hyphenate the last word on a page, 4 to - not hyphenate the last two characters of a word, and 8 to not - hyphenate the first two characters of a word. These values are - additive; the default is 14. - -`-rIN=LENGTH' - Set the body text indent to LENGTH. If not specified, the indent - defaults to 7n (7 characters) in nroff mode and 7.2n otherwise. - For nroff, this value should always be an integer multiple of unit - `n' to get consistent indentation. - -`-rLL=LENGTH' - Set line length to LENGTH. If not specified, the line length - defaults to 78 en in nroff mode (this is 78 characters per line) - and 6.5 inch otherwise. - -`-rLT=LENGTH' - Set title length to LENGTH. If not specified, the title length - defaults to the line length. - -`-rPNNN' - Page numbering starts with NNN rather than with 1. - -`-rSXX' - Use XX (which can be 10, 11, or 12pt) as the base document font - size instead of the default value of 10pt. - -`-rSN=LENGTH' - Set the indent for sub-subheadings to LENGTH. If not specified, - the indent defaults to 3n. - -`-rXNNN' - After page NNN, number pages as NNNa, NNNb, NNNc, etc. For - example, the option `-rX2' produces the following page numbers: 1, - 2, 2a, 2b, 2c, etc. - - -File: groff, Node: Man usage, Next: Man font macros, Prev: Man options, Up: man - -Usage ------ - - This section describes the available macros for manual pages. For -further customization, put additional macros and requests into the file -`man.local' which is loaded immediately after the `man' package. - - - Macro: .TH title section [extra1 [extra2 [extra3]]] - Set the title of the man page to TITLE and the section to SECTION, - which must have a value between 1 and 8. The value of SECTION may - also have a string appended, e.g. `.pm', to indicate a specific - subsection of the man pages. - - Both TITLE and SECTION are positioned at the left and right in the - header line (with SECTION in parentheses immediately appended to - TITLE. EXTRA1 is positioned in the middle of the footer line. - EXTRA2 is positioned at the left in the footer line (or at the - left on even pages and at the right on odd pages if double-sided - printing is active). EXTRA3 is centered in the header line. - - For HTML output, headers and footers are completely suppressed. - - Additionally, this macro starts a new page; the new line number - is 1 again (except if the `-rC1' option is given on the command - line) - this feature is intended only for formatting multiple man - pages; a single man page should contain exactly one `TH' macro at - the beginning of the file. - - - Macro: .SH [heading] - Set up an unnumbered section heading sticking out to the left. - Prints out all the text following `SH' up to the end of the line - (or the text in the next line if there is no argument to `SH') in - bold face (or the font specified by the string `HF'), one size - larger than the base document size. Additionally, the left margin - and the indentation for the following text is reset to its default - value. - - - Macro: .SS [heading] - Set up an unnumbered (sub)section heading. Prints out all the text - following `SS' up to the end of the line (or the text in the next - line if there is no argument to `SS') in bold face (or the font - specified by the string `HF'), at the same size as the base - document size. Additionally, the left margin and the indentation - for the following text is reset to its default value. - - - Macro: .TP [nnn] - Set up an indented paragraph with label. The indentation is set to - NNN if that argument is supplied (the default unit is `n' if - omitted), otherwise it is set to the previous indentation value - specified with `TP', `IP', or `HP' (or to the default value if - none of them have been used yet). - - The first line of text following this macro is interpreted as a - string to be printed flush-left, as it is appropriate for a label. - It is not interpreted as part of a paragraph, so there is no - attempt to fill the first line with text from the following input - lines. Nevertheless, if the label is not as wide as the - indentation the paragraph starts at the same line (but indented), - continuing on the following lines. If the label is wider than the - indentation the descriptive part of the paragraph begins on the - line following the label, entirely indented. Note that neither - font shape nor font size of the label is set to a default value; - on the other hand, the rest of the text has default font settings. - - - Macro: .LP - - Macro: .PP - - Macro: .P - These macros are mutual aliases. Any of them causes a line break - at the current position, followed by a vertical space downwards by - the amount specified by the `PD' macro. The font size and shape - are reset to the default value (10pt roman if no `-rS' option is - given on the command line). Finally, the current left margin and - the indentation is restored. - - - Macro: .IP [designator [nnn]] - Set up an indented paragraph, using DESIGNATOR as a tag to mark - its beginning. The indentation is set to NNN if that argument is - supplied (default unit is `n'), otherwise it is set to the - previous indentation value specified with `TP', `IP', or `HP' (or - the default value if none of them have been used yet). Font size - and face of the paragraph (but not the designator) are reset to - their default values. - - To start an indented paragraph with a particular indentation but - without a designator, use `""' (two double quotes) as the first - argument of `IP'. - - For example, to start a paragraph with bullets as the designator - and 4 en indentation, write - - - .IP \(bu 4 - - - - Macro: .HP [nnn] - Set up a paragraph with hanging left indentation. The indentation - is set to NNN if that argument is supplied (default unit is `n'), - otherwise it is set to the previous indentation value specified - with `TP', `IP', or `HP' (or the default value if non of them have - been used yet). Font size and face are reset to their default - values. - - - Macro: .RS [nnn] - Move the left margin to the right by the value NNN if specified - (default unit is `n'); otherwise it is set to the previous - indentation value specified with `TP', `IP', or `HP' (or to the - default value if none of them have been used yet). The - indentation value is then set to the default. - - Calls to the `RS' macro can be nested. - - - Macro: .RE [nnn] - Move the left margin back to level NNN, restoring the previous left - margin. If no argument is given, it moves one level back. The - first level (i.e., no call to `RS' yet) has number 1, and each call - to `RS' increases the level by 1. - - To summarize, the following macros cause a line break with the -insertion of vertical space (which amount can be changed with the `PD' -macro): `SH', `SS', `TP', `LP' (`PP', `P'), `IP', and `HP'. - - The macros `RS' and `RE' also cause a break but do not insert -vertical space. - - Finally, the macros `SH', `SS', `LP' (`PP', `P'), and `RS' reset the -indentation to its default value. - - -File: groff, Node: Man font macros, Next: Miscellaneous man macros, Prev: Man usage, Up: man - -Macros to set fonts -------------------- +5.24.1 Page Location Traps +-------------------------- - The standard font is roman; the default text size is 10 point. If -command line option `-rS=N' is given, use Npt as the default text size. +"Page location traps" perform an action when `gtroff' reaches or passes +a certain vertical location on the page. Page location traps have a +variety of purposes, including: + + * setting headers and footers + + * setting body text in multiple columns + + * setting footnotes + + -- Request: .vpt flag + -- Register: \n[.vpt] + Enable vertical position traps if FLAG is non-zero, or disables + them otherwise. Vertical position traps are traps set by the `wh' + or `dt' requests. Traps set by the `it' request are not vertical + position traps. The parameter that controls whether vertical + position traps are enabled is global. Initially vertical position + traps are enabled. The current setting of this is available in the + `.vpt' read-only number register. + + Note that a page can't be ejected if `vpt' is set to zero. + + -- Request: .wh dist [macro] + Set a page location trap. Non-negative values for DIST set the + trap relative to the top of the page; negative values set the trap + relative to the bottom of the page. Default scaling indicator is + `v'. + + MACRO is the name of the macro to execute when the trap is sprung. + If MACRO is missing, remove the first trap (if any) at DIST. + + The following is a simple example of how many macro packages set + headers and footers. + + + .de hd \" Page header + ' sp .5i + . tl 'Title''date' + ' sp .3i + .. + . + .de fo \" Page footer + ' sp 1v + . tl ''%'' + ' bp + .. + . + .wh 0 hd \" trap at top of the page + .wh -1i fo \" trap one inch from bottom + + A trap at or below the bottom of the page is ignored; it can be + made active by either moving it up or increasing the page length + so that the trap is on the page. + + It is possible to have more than one trap at the same location; to + do so, the traps must be defined at different locations, then + moved together with the `ch' request; otherwise the second trap + would replace the first one. Earlier defined traps hide later + defined traps if moved to the same position (the many empty lines + caused by the `bp' request are omitted in the following example): + + + .de a + . nop a + .. + .de b + . nop b + .. + .de c + . nop c + .. + . + .wh 1i a + .wh 2i b + .wh 3i c + .bp + => a b c + + + .ch b 1i + .ch c 1i + .bp + => a + + + .ch a 0.5i + .bp + => a b + + + -- Register: \n[.t] + A read-only number register holding the distance to the next trap. + + If there are no traps between the current position and the bottom + of the page, it contains the distance to the page bottom. In a + diversion, the distance to the page bottom is infinite (the + returned value is the biggest integer which can be represented in + `groff') if there are no diversion traps. + + -- Request: .ch macro [dist] + Change the location of a trap. The first argument is the name of + the macro to be invoked at the trap, and the second argument is + the new location for the trap (note that the parameters are + specified in opposite order as in the `wh' request). This is + useful for building up footnotes in a diversion to allow more + space at the bottom of the page for them. + + Default scaling indicator for DIST is `v'. If DIST is missing, + the trap is removed. + + + -- Register: \n[.ne] + The read-only number register `.ne' contains the amount of space + that was needed in the last `ne' request that caused a trap to be + sprung. Useful in conjunction with the `.trunc' register. *Note + Page Control::, for more information. + + Since the `.ne' register is only set by traps it doesn't make much + sense to use it outside of trap macros. + + -- Register: \n[.trunc] + A read-only register containing the amount of vertical space + truncated by the most recently sprung vertical position trap, or, + if the trap was sprung by an `ne' request, minus the amount of + vertical motion produced by the `ne' request. In other words, at + the point a trap is sprung, it represents the difference of what + the vertical position would have been but for the trap, and what + the vertical position actually is. + + Since the `.trunc' register is only set by traps it doesn't make + much sense to use it outside of trap macros. + + -- Register: \n[.pe] + A read-only register which is set to 1 while a page is ejected with + the `bp' request (or by the end of input). + + Outside of traps this register is always zero. In the following + example, only the second call to `x' is caused by `bp'. + + + .de x + \&.pe=\\n[.pe] + .br + .. + .wh 1v x + .wh 4v x + A line. + .br + Another line. + .br + => A line. + .pe=0 + Another line. + + .pe=1 + + + An important fact to consider while designing macros is that +diversions and traps do not interact normally. For example, if a trap +invokes a header macro (while outputting a diversion) which tries to +change the font on the current page, the effect will not be visible +before the diversion has completely been printed (except for input +protected with `\!' or `\?') since the data in the diversion is already +formatted. In most cases, this is not the expected behaviour. - - Macro: .SM [text] - Set the text on the same line or the text on the next line in a - font that is one point size smaller than the default font. + +File: groff, Node: Diversion Traps, Next: Input Line Traps, Prev: Page Location Traps, Up: Traps - - Macro: .SB [text] - Set the text on the same line or the text on the next line in bold - face font, one point size smaller than the default font. +5.24.2 Diversion Traps +---------------------- - - Macro: .BI text - Set its arguments alternately in bold face and italic, without a - space between the arguments. Thus, + -- Request: .dt [dist macro] + Set a trap _within_ a diversion. DIST is the location of the trap + (identical to the `wh' request; default scaling indicator is `v') + and MACRO is the name of the macro to be invoked. If called + without arguments, the diversion trap is removed. + Note that there exists only a single diversion trap. - .BI this "word and" that + The number register `.t' still works within diversions. *Note + Diversions::, for more information. - produces "thisword andthat" with "this" and "that" in bold face, - and "word and" in italics. + +File: groff, Node: Input Line Traps, Next: Blank Line Traps, Prev: Diversion Traps, Up: Traps - - Macro: .IB text - Set its arguments alternately in italic and bold face, without a - space between the arguments. +5.24.3 Input Line Traps +----------------------- - - Macro: .RI text - Set its arguments alternately in roman and italic, without a space - between the arguments. + -- Request: .it n macro + -- Request: .itc n macro + Set an input line trap. N is the number of lines of input which + may be read before springing the trap, MACRO is the macro to be + invoked. Request lines are not counted as input lines. - - Macro: .IR text - Set its arguments alternately in italic and roman, without a space - between the arguments. + For example, one possible use is to have a macro which prints the + next N lines in a bold font. - - Macro: .BR text - Set its arguments alternately in bold face and roman, without a - space between the arguments. - - Macro: .RB text - Set its arguments alternately in roman and bold face, without a - space between the arguments. + .de B + . it \\$1 B-end + . ft B + .. + . + .de B-end + . ft R + .. - - Macro: .B [text] - Set TEXT in bold face. If no text is present on the line where - the macro is called, then the text of the next line appears in bold - face. + The `itc' request is identical except that an interrupted text + line (ending with `\c') is not counted as a separate line. - - Macro: .I [text] - Set TEXT in italic. If no text is present on the line where the - macro is called, then the text of the next line appears in italic. + Both requests are associated with the current environment (*note + Environments::); switching to another environment disables the + current input trap, and going back reactivates it, restoring the + number of already processed lines. -File: groff, Node: Miscellaneous man macros, Next: Predefined man strings, Prev: Man font macros, Up: man +File: groff, Node: Blank Line Traps, Next: End-of-input Traps, Prev: Input Line Traps, Up: Traps -Miscellaneous macros --------------------- +5.24.4 Blank Line Traps +----------------------- - The default indentation is 7.2n in troff mode and 7n in nroff mode -except for `grohtml' which ignores indentation. + -- Request: .blm macro + Set a blank line trap. `gtroff' executes MACRO when it encounters + a blank line in the input file. - - Macro: .DT - Set tabs every 0.5 inches. Since this macro is always executed - during a call to the `TH' macro, it makes sense to call it only if - the tab positions have been changed. + +File: groff, Node: End-of-input Traps, Prev: Blank Line Traps, Up: Traps - - Macro: .PD [nnn] - Adjust the empty space before a new paragraph (or section). The - optional argument gives the amount of space (default unit is `v'); - without parameter, the value is reset to its default value (1 line - in nroff mode, 0.4v otherwise). +5.24.5 End-of-input Traps +------------------------- - This affects the macros `SH', `SS', `TP', `LP' (as well as `PP' - and `P'), `IP', and `HP'. + -- Request: .em macro + Set a trap at the end of input. MACRO is executed after the last + line of the input file has been processed. - The following two macros are included for BSD compatibility. + For example, if the document had to have a section at the bottom + of the last page for someone to approve it, the `em' request could + be used. - - Macro: .AT [system [release]] - Alter the footer for use with AT&T manpages. This command exists - only for compatibility; don't use it. The first argument SYSTEM - can be: - `3' - 7th Edition (the default) + .de approval + . ne 5v + . sp |(\\n[.t] - 6v) + . in +4i + . lc _ + . br + Approved:\t\a + . sp + Date:\t\t\a + .. + . + .em approval - `4' - System III - `5' - System V + +File: groff, Node: Diversions, Next: Environments, Prev: Traps, Up: gtroff Reference + +5.25 Diversions +=============== + +In `gtroff' it is possible to "divert" text into a named storage area. +Due to the similarity to defining macros it is sometimes said to be +stored in a macro. This is used for saving text for output at a later +time, which is useful for keeping blocks of text on the same page, +footnotes, tables of contents, and indices. + + For orthogonality it is said that `gtroff' is in the "top-level +diversion" if no diversion is active (i.e., the data is diverted to the +output device). + + -- Request: .di macro + -- Request: .da macro + Begin a diversion. Like the `de' request, it takes an argument of + a macro name to divert subsequent text into. The `da' macro + appends to an existing diversion. + + `di' or `da' without an argument ends the diversion. + + -- Request: .box macro + -- Request: .boxa macro + Begin (or appends to) a diversion like the `di' and `da' requests. + The difference is that `box' and `boxa' do not include a + partially-filled line in the diversion. + + Compare this: + + + Before the box. + .box xxx + In the box. + .br + .box + After the box. + .br + => Before the box. After the box. + .xxx + => In the box. + + with this: + + + Before the diversion. + .di yyy + In the diversion. + .br + .di + After the diversion. + .br + => After the diversion. + .yyy + => Before the diversion. In the diversion. + + `box' or `boxa' without an argument ends the diversion. + + -- Register: \n[.z] + -- Register: \n[.d] + Diversions may be nested. The read-only number register `.z' + contains the name of the current diversion (this is a string-valued + register). The read-only number register `.d' contains the current + vertical place in the diversion. If not in a diversion it is the + same as register `nl'. + + -- Register: \n[.h] + The "high-water mark" on the current page. It corresponds to the + text baseline of the lowest line on the page. This is a read-only + register. + + + .tm .h==\n[.h], nl==\n[nl] + => .h==0, nl==-1 + This is a test. + .br + .sp 2 + .tm .h==\n[.h], nl==\n[nl] + => .h==40, nl==120 + + As can be seen in the previous example, empty lines are not + considered in the return value of the `.h' register. + + -- Register: \n[dn] + -- Register: \n[dl] + After completing a diversion, the read-write number registers `dn' + and `dl' contain the vertical and horizontal size of the diversion. + Note that only the just processed lines are counted: For the + computation of `dn' and `dl', the requests `da' and `boxa' are + handled as if `di' and `box' had been used - lines which have been + already stored in a macro are not taken into account. + + + .\" Center text both horizontally & vertically + . + .\" Enclose macro definitions in .eo and .ec + .\" to avoid the doubling of the backslash + .eo + .\" macro .(c starts centering mode + .de (c + . br + . ev (c + . evc 0 + . in 0 + . nf + . di @c + .. + + + .\" macro .)c terminates centering mode + .de )c + . br + . ev + . di + . nr @s (((\n[.t]u - \n[dn]u) / 2u) - 1v) + . sp \n[@s]u + . ce 1000 + . @c + . ce 0 + . sp \n[@s]u + . br + . fi + . rr @s + . rm @s + . rm @c + .. + .\" End of macro definitions, restore escape mechanism + .ec + + + -- Escape: \! + -- Escape: \?anything\? + Prevent requests, macros, and escapes from being interpreted when + read into a diversion. Both escapes take the given text and + "transparently" embed it into the diversion. This is useful for + macros which shouldn't be invoked until the diverted text is + actually output. + + The `\!' escape transparently embeds text up to and including the + end of the line. The `\?' escape transparently embeds text until + the next occurrence of the `\?' escape. Example: + + + \?ANYTHING\? + + ANYTHING may not contain newlines; use `\!' to embed newlines in + a diversion. The escape sequence `\?' is also recognized in copy + mode and turned into a single internal code; it is this code that + terminates ANYTHING. Thus the following example prints 4. + + + .nr x 1 + .nf + .di d + \?\\?\\\\?\\\\\\\\nx\\\\?\\?\? + .di + .nr x 2 + .di e + .d + .di + .nr x 3 + .di f + .e + .di + .nr x 4 + .f + + Both escapes read the data in copy mode. + + If `\!' is used in the top-level diversion, its argument is + directly embedded into the `gtroff' intermediate output. This can + be used for example to control a postprocessor which processes the + data before it is sent to the device driver. + + The `\?' escape used in the top-level diversion produces no output + at all; its argument is simply ignored. + + -- Request: .output string + Emit STRING directly to the `gtroff' intermediate output (subject + to copy-mode interpretation); this is similar to `\!' used at the + top level. An initial double quote in STRING is stripped off to + allow initial blanks. + + This request can't be used before the first page has started - if + you get an error, simply insert `.br' before the `output' request. + + Without argument, `output' is ignored. + + Use with caution! It is normally only needed for mark-up used by a + postprocessor which does something with the output before sending + it to the output device, filtering out STRING again. + + -- Request: .asciify div + "Unformat" the diversion specified by DIV in such a way that ASCII + characters, characters translated with the `trin' request, space + characters, and some escape sequences that were formatted and + diverted are treated like ordinary input characters when the + diversion is reread. It can be also used for gross hacks; for + example, the following sets register `n' to 1. + + + .tr @. + .di x + @nr n 1 + .br + .di + .tr @@ + .asciify x + .x + + *Note Copy-in Mode::. + + -- Request: .unformat div + Like `asciify', unformat the specified diversion. However, + `unformat' only unformats spaces and tabs between words. + Unformatted tabs are treated as input tokens, and spaces are + stretchable again. + + The vertical size of lines is not preserved; glyph information + (font, font size, space width, etc.) is retained. - An optional second argument RELEASE to `AT' specifies the release - number (such as "System V Release 3"). + +File: groff, Node: Environments, Next: Suppressing output, Prev: Diversions, Up: gtroff Reference - - Macro: .UC [version] - Alters the footer for use with BSD manpages. This command exists - only for compatibility; don't use it. The argument can be: +5.26 Environments +================= - `3' - 3rd Berkeley Distribution (the default) +It happens frequently that some text should be printed in a certain +format regardless of what may be in effect at the time, for example, in +a trap invoked macro to print headers and footers. To solve this +`gtroff' processes text in "environments". An environment contains +most of the parameters that control text processing. It is possible to +switch amongst these environments; by default `gtroff' processes text +in environment 0. The following is the information kept in an +environment. - `4' - 4th Berkeley Distribution + * font parameters (size, family, style, glyph height and slant, space + and sentence space size) - `5' - 4.2 Berkeley Distribution + * page parameters (line length, title length, vertical spacing, line + spacing, indentation, line numbering, centering, right-justifying, + underlining, hyphenation data) - `6' - 4.3 Berkeley Distribution + * fill and adjust mode - `7' - 4.4 Berkeley Distribution + * tab stops, tab and leader characters, escape character, no-break + and hyphen indicators, margin character data - -File: groff, Node: Predefined man strings, Next: Preprocessors in man pages, Prev: Miscellaneous man macros, Up: man + * partially collected lines + + * input traps + + * drawing and fill colours + + These environments may be given arbitrary names (see *Note +Identifiers::, for more info). Old versions of `troff' only had +environments named `0', `1', and `2'. + + -- Request: .ev [env] + -- Register: \n[.ev] + Switch to another environment. The argument ENV is the name of + the environment to switch to. With no argument, `gtroff' switches + back to the previous environment. There is no limit on the number + of named environments; they are created the first time that they + are referenced. The `.ev' read-only register contains the name or + number of the current environment. This is a string-valued + register. + + Note that a call to `ev' (with argument) pushes the previously + active environment onto a stack. If, say, environments `foo', + `bar', and `zap' are called (in that order), the first `ev' + request without parameter switches back to environment `bar' + (which is popped off the stack), and a second call switches back + to environment `foo'. + + Here is an example: + + + .ev footnote-env + .fam N + .ps 6 + .vs 8 + .ll -.5i + .ev + + ... -Predefined strings ------------------- + .ev footnote-env + \(dg Note the large, friendly letters. + .ev - The following strings are defined: - - String: \*[S] - Switch back to the default font size. + -- Request: .evc env + Copy the environment ENV into the current environment. - - String: \*[HF] - The typeface used for headings. The default is `B'. + The following environment data is not copied: - - String: \*[R] - The `registered' sign. + * Partially filled lines. - - String: \*[Tm] - The `trademark' sign. + * The status whether the previous line was interrupted. - - String: \*[lq] - - String: \*[rq] - Left and right quote. This is equal to `\(lq' and `\(rq', - respectively. + * The number of lines still to center, or to right-justify, or + to underline (with or without underlined spaces); they are + set to zero. + + * The status whether a temporary indentation is active. + + * Input traps and its associated data. + + * Line numbering mode is disabled; it can be reactivated with + `.nm +0'. + + * The number of consecutive hyphenated lines (set to zero). + + -- Register: \n[.w] + -- Register: \n[.cht] + -- Register: \n[.cdp] + -- Register: \n[.csk] + The `\n[.w]' register contains the width of the last glyph added + to the current environment. + + The `\n[.cht]' register contains the height of the last glyph + added to the current environment. + + The `\n[.cdp]' register contains the depth of the last glyph added + to the current environment. It is positive for glyphs extending + below the baseline. + + The `\n[.csk]' register contains the "skew" (how far to the right + of the glyph's center that `gtroff' should place an accent) of the + last glyph added to the current environment. + + -- Register: \n[.n] + The `\n[.n]' register contains the length of the previous output + line in the current environment. -File: groff, Node: Preprocessors in man pages, Next: Optional man extensions, Prev: Predefined man strings, Up: man +File: groff, Node: Suppressing output, Next: Colors, Prev: Environments, Up: gtroff Reference + +5.27 Suppressing output +======================= + + -- Escape: \Onum + Disable or enable output depending on the value of NUM: -Preprocessors in `man' pages ----------------------------- + `\O0' + Disable any glyphs from being emitted to the device driver, + provided that the escape occurs at the outer level (see + `\O[3]' and `\O[4]'). Motion is not suppressed so + effectively `\O[0]' means _pen up_. - If a preprocessor like `gtbl' or `geqn' is needed, it has become -common usage to make the first line of the man page look like this: + `\O1' + Enable output of glyphs, provided that the escape occurs at + the outer level. + `\O0' and `\O1' also reset the four registers `opminx', `opminy', + `opmaxx', and `opmaxy' to -1. *Note Register Index::. These four + registers mark the top left and bottom right hand corners of a box + which encompasses all written glyphs. - '\" WORD + For example the input text: -Note the single space character after the double quote. WORD consists -of letters for the needed preprocessors: `e' for `geqn', `r' for -`grefer', `t' for `gtbl'. Modern implementations of the `man' program -read this first line and automatically call the right preprocessor(s). + + Hello \O[0]world \O[1]this is a test. + + produces the following output: + + + Hello this is a test. + + `\O2' + Provided that the escape occurs at the outer level, enable + output of glyphs and also write out to `stderr' the page + number and four registers encompassing the glyphs previously + written since the last call to `\O'. + + `\O3' + Begin a nesting level. At start-up, `gtroff' is at outer + level. + + `\O4' + End a nesting level. + + `\O[5PFILENAME]' + This escape is `grohtml' specific. Provided that this escape + occurs at the outer nesting level write the `filename' to + `stderr'. The position of the image, P, must be specified + and must be one of `l', `r', `c', or `i' (left, right, + centered, inline). FILENAME will be associated with the + production of the next inline image. -File: groff, Node: Optional man extensions, Prev: Preprocessors in man pages, Up: man +File: groff, Node: Colors, Next: I/O, Prev: Suppressing output, Up: gtroff Reference -Optional `man' extensions -------------------------- +5.28 Colors +=========== - Use the file `man.local' for local extensions to the `man' macros or -for style changes. + -- Request: .color [n] + -- Register: \n[.color] + If N is missing or non-zero, activate colors (this is the default); + otherwise, turn it off. -Custom headers and footers -.......................... + The read-only number register `.color' is 1 if colors are active, + 0 otherwise. - In groff versions 1.18.2 and later, you can specify custom headers -and footers by redefining the following macros in `man.local'. + Internally, `color' sets a global flag; it does not produce a + token. Similar to the `cp' request, you should use it at the + beginning of your document to control color output. - - Macro: .PT - Control the content of the headers. Normally, the header prints - the command name and section number on either side, and the - optional fifth argument to `TH' in the center. + Colors can be also turned off with the `-c' command line option. - - Macro: .BT - Control the content of the footers. Normally, the footer prints - the page number and the third and fourth arguments to `TH'. + -- Request: .defcolor ident scheme color_components + Define color with name IDENT. SCHEME can be one of the following + values: `rgb' (three components), `cmy' (three components), `cmyk' + (four components), and `gray' or `grey' (one component). - Use the `FT' number register to specify the footer position. The - default is -0.5i. + Color components can be given either as a hexadecimal string or as + positive decimal integers in the range 0-65535. A hexadecimal + string contains all color components concatenated. It must start + with either `#' or `##'; the former specifies hex values in the + range 0-255 (which are internally multiplied by 257), the latter + in the range 0-65535. Examples: `#FFC0CB' (pink), `##ffff0000ffff' + (magenta). The default color name value is device-specific + (usually black). It is possible that the default color for `\m' + and `\M' is not identical. -Ultrix-specific man macros -.......................... + A new scaling indicator `f' has been introduced which multiplies + its value by 65536; this makes it convenient to specify color + components as fractions in the range 0 to 1 (1f equals 65536u). + Example: - The `groff' source distribution includes a file named `man.ultrix', -containing macros compatible with the Ultrix variant of `man'. Copy -this file into `man.local' (or use the `mso' request to load it) to -enable the following macros. - - Macro: .CT key - Print `<CTRL/KEY>'. + .defcolor darkgreen rgb 0.1f 0.5f 0.2f - - Macro: .CW - Print subsequent text using the constant width (Courier) typeface. + Note that `f' is the default scaling indicator for the `defcolor' + request, thus the above statement is equivalent to - - Macro: .Ds - Begin a non-filled display. - - Macro: .De - End a non-filled display started with `Ds'. + .defcolor darkgreen rgb 0.1 0.5 0.2 - - Macro: .EX [indent] - Begins a non-filled display using the constant width (Courier) - typeface. Use the optional INDENT argument to indent the display. - - Macro: .EE - End a non-filled display started with `EX'. + -- Request: .gcolor [color] + -- Escape: \mc + -- Escape: \m(co + -- Escape: \m[color] + -- Register: \n[.m] + Set (glyph) drawing color. The following examples show how to + turn the next four words red. - - Macro: .G [text] - Sets TEXT in Helvetica. If no text is present on the line where - the macro is called, then the text of the next line appears in - Helvetica. - - Macro: .GL [text] - Sets TEXT in Helvetica Oblique. If no text is present on the line - where the macro is called, then the text of the next line appears - in Helvetica Oblique. + .gcolor red + these are in red + .gcolor + and these words are in black. - - Macro: .HB [text] - Sets TEXT in Helvetica Bold. If no text is present on the line - where the macro is called, then all text up to the next `HB' - appears in Helvetica Bold. - - Macro: .TB [text] - Identical to `HB'. + \m[red]these are in red\m[] and these words are in black. - - Macro: .MS title sect [punct] - Set a manpage reference in Ultrix format. The TITLE is in Courier - instead of italic. Optional punctuation follows the section - number without an intervening space. + The escape `\m[]' returns to the previous color, as does a call to + `gcolor' without an argument. - - Macro: .NT [`C'] [title] - Begin a note. Print the optional title, or the word "Note", - centered on the page. Text following the macro makes up the body - of the note, and is indented on both sides. If the first argument - is `C', the body of the note is printed centered (the second - argument replaces the word "Note" if specified). + The name of the current drawing color is available in the + read-only, string-valued number register `.m'. - - Macro: .NE - End a note begun with `NT'. + The drawing color is associated with the current environment + (*note Environments::). - - Macro: .PN path [punct] - Set the path name in constant width (Courier), followed by - optional punctuation. + Note that `\m' doesn't produce an input token in `gtroff'. As a + consequence, it can be used in requests like `mc' (which expects a + single character as an argument) to change the color on the fly: - - Macro: .Pn [punct] path [punct] - When called with two arguments, identical to `PN'. When called - with three arguments, set the second argument in constant width - (Courier), bracketed by the first and third arguments in the - current font. - - Macro: .R - Switch to roman font and turn off any underlining in effect. + .mc \m[red]x\m[] - - Macro: .RN - Print the string `<RETURN>'. - - Macro: .VS [`4'] - Start printing a change bar in the margin if the number `4' is - specified. Otherwise, this macro does nothing. + -- Request: .fcolor [color] + -- Escape: \Mc + -- Escape: \M(co + -- Escape: \M[color] + -- Register: \n[.M] + Set fill (background) color for filled objects drawn with the + `\D'...'' commands. - - Macro: .VE - End printing the change bar begun by `VS'. + A red ellipse can be created with the following code: -Simple example -.............. - The following example `man.local' file alters the `SH' macro to add -some extra vertical space before printing the heading. Headings are -printed in Helvetica Bold. + \M[red]\h'0.5i'\D'E 2i 1i'\M[] + The escape `\M[]' returns to the previous fill color, as does a + call to `fcolor' without an argument. - .\" Make the heading fonts Helvetica - .ds HF HB - . - .\" Put more whitespace in front of headings. - .rn SH SH-orig - .de SH - . if t .sp (u;\\n[PD]*2) - . SH-orig \\$* - .. + The name of the current fill (background) color is available in the + read-only, string-valued number register `.M'. + + The fill color is associated with the current environment (*note + Environments::). + + Note that `\M' doesn't produce an input token in `gtroff'. -File: groff, Node: mdoc, Next: ms, Prev: man, Up: Macro Packages +File: groff, Node: I/O, Next: Postprocessor Access, Prev: Colors, Up: gtroff Reference + +5.29 I/O +======== + +`gtroff' has several requests for including files: + + -- Request: .so file + Read in the specified FILE and includes it in place of the `so' + request. This is quite useful for large documents, e.g. keeping + each chapter in a separate file. *Note gsoelim::, for more + information. + + Since `gtroff' replaces the `so' request with the contents of + `file', it makes a difference whether the data is terminated with + a newline or not: Assuming that file `xxx' contains the word `foo' + without a final newline, this + + + This is + .so xxx + bar + + yields `This is foobar'. + + The search path for FILE can be controlled with the `-I' command + line option. + + -- Request: .pso command + Read the standard output from the specified COMMAND and includes + it in place of the `pso' request. + + This request causes an error if used in safer mode (which is the + default). Use `groff''s or `troff''s `-U' option to activate + unsafe mode. + + The comment regarding a final newline for the `so' request is valid + for `pso' also. + + -- Request: .mso file + Identical to the `so' request except that `gtroff' searches for + the specified FILE in the same directories as macro files for the + the `-m' command line option. If the file name to be included has + the form `NAME.tmac' and it isn't found, `mso' tries to include + `tmac.NAME' and vice versa. + + -- Request: .trf file + -- Request: .cf file + Transparently output the contents of FILE. Each line is output as + if it were preceded by `\!'; however, the lines are not subject to + copy mode interpretation. If the file does not end with a newline, + then a newline is added (`trf' only). For example, to define a + macro `x' containing the contents of file `f', use + + + .di x + .trf f + .di + + Both `trf' and `cf', when used in a diversion, embeds an object in + the diversion which, when reread, causes the contents of FILE to + be transparently copied through to the output. In UNIX `troff', + the contents of FILE is immediately copied through to the output + regardless of whether there is a current diversion; this behaviour + is so anomalous that it must be considered a bug. + + While `cf' copies the contents of FILE completely unprocessed, + `trf' disallows characters such as NUL that are not valid `gtroff' + input characters (*note Identifiers::). + + Both requests cause a line break. + + -- Request: .nx [file] + Force `gtroff' to continue processing of the file specified as an + argument. If no argument is given, immediately jump to the end of + file. + + -- Request: .rd [prompt [arg1 arg2 ...]] + Read from standard input, and include what is read as though it + were part of the input file. Text is read until a blank line is + encountered. + + If standard input is a TTY input device (keyboard), write PROMPT + to standard error, followed by a colon (or send BEL for a beep if + no argument is given). + + Arguments after PROMPT are available for the input. For example, + the line + + + .rd data foo bar + + with the input `This is \$2.' prints + + + This is bar. + + + Using the `nx' and `rd' requests, it is easy to set up form letters. +The form letter template is constructed like this, putting the +following lines into a file called `repeat.let': + + + .ce + \*(td + .sp 2 + .nf + .rd + .sp + .rd + .fi + Body of letter. + .bp + .nx repeat.let + +When this is run, a file containing the following lines should be +redirected in. Note that requests included in this file are executed +as though they were part of the form letter. The last block of input +is the `ex' request which tells `groff' to stop processing. If this +was not there, `groff' would not know when to stop. + + + Trent A. Fisher + 708 NW 19th Av., #202 + Portland, OR 97209 + + Dear Trent, + + Len Adollar + 4315 Sierra Vista + San Diego, CA 92103 + + Dear Mr. Adollar, + + .ex + + -- Request: .pi pipe + Pipe the output of `gtroff' to the shell command(s) specified by + PIPE. This request must occur before `gtroff' has a chance to + print anything. + + `pi' causes an error if used in safer mode (which is the default). + Use `groff''s or `troff''s `-U' option to activate unsafe mode. + + Multiple calls to `pi' are allowed, acting as a chain. For + example, + + + .pi foo + .pi bar + ... -`mdoc' -====== + is the same as `.pi foo | bar'. - See the `groff_mdoc(7)' man page (type `man groff_mdoc' at the -command line). + Note that the intermediate output format of `gtroff' is piped to + the specified commands. Consequently, calling `groff' without the + `-Z' option normally causes a fatal error. + + -- Request: .sy cmds + -- Register: \n[systat] + Execute the shell command(s) specified by CMDS. The output is not + saved anyplace, so it is up to the user to do so. + + This request causes an error if used in safer mode (which is the + default). Use `groff''s or `troff''s `-U' option to activate + unsafe mode. + + For example, the following code fragment introduces the current + time into a document: + + + .sy perl -e 'printf ".nr H %d\\n.nr M %d\\n.nr S %d\\n",\ + (localtime(time))[2,1,0]' > /tmp/x\n[$$] + .so /tmp/x\n[$$] + .sy rm /tmp/x\n[$$] + \nH:\nM:\nS + + Note that this works by having the `perl' script (run by `sy') + print out the `nr' requests which set the number registers `H', + `M', and `S', and then reads those commands in with the `so' + request. + + For most practical purposes, the number registers `seconds', + `minutes', and `hours' which are initialized at start-up of + `gtroff' should be sufficient. Use the `af' request to get a + formatted output: + + + .af hours 00 + .af minutes 00 + .af seconds 00 + \n[hours]:\n[minutes]:\n[seconds] + + The `systat' read-write number register contains the return value + of the `system()' function executed by the last `sy' request. + + -- Request: .open stream file + -- Request: .opena stream file + Open the specified FILE for writing and associates the specified + STREAM with it. + + The `opena' request is like `open', but if the file exists, append + to it instead of truncating it. + + Both `open' and `opena' cause an error if used in safer mode + (which is the default). Use `groff''s or `troff''s `-U' option to + activate unsafe mode. + + -- Request: .write stream data + -- Request: .writec stream data + Write to the file associated with the specified STREAM. The + stream must previously have been the subject of an open request. + The remainder of the line is interpreted as the `ds' request reads + its second argument: A leading `"' is stripped, and it is read in + copy-in mode. + + The `writec' request is like `write', but only `write' appends a + newline to the data. + + -- Request: .writem stream xx + Write the contents of the macro or string XX to the file + associated with the specified STREAM. + + XX is read in copy mode, i.e., already formatted elements are + ignored. Consequently, diversions must be unformatted with the + `asciify' request before calling `writem'. Usually, this means a + loss of information. + + -- Request: .close stream + Close the specified STREAM; the stream is no longer an acceptable + argument to the `write' request. + + Here a simple macro to write an index entry. + + + .open idx test.idx + . + .de IX + . write idx \\n[%] \\$* + .. + . + .IX test entry + . + .close idx + + + -- Escape: \Ve + -- Escape: \V(ev + -- Escape: \V[env] + Interpolate the contents of the specified environment variable ENV + (one-character name E, two-character name EV) as returned by the + function `getenv'. `\V' is interpreted in copy-in mode. -File: groff, Node: ms, Next: me, Prev: mdoc, Up: Macro Packages +File: groff, Node: Postprocessor Access, Next: Miscellaneous, Prev: I/O, Up: gtroff Reference -`ms' -==== +5.30 Postprocessor Access +========================= - The `-ms' macros are suitable for reports, letters, books, user -manuals, and so forth. The package provides macros for cover pages, -section headings, paragraphs, lists, footnotes, pagination, and a table -of contents. +There are two escapes which give information directly to the +postprocessor. This is particularly useful for embedding POSTSCRIPT +into the final document. -* Menu: + -- Escape: \X'xxx' + Embeds its argument into the `gtroff' output preceded with `x X'. + + The escapes `\&', `\)', `\%', and `\:' are ignored within `\X', + `\ ' and `\~' are converted to single space characters. All other + escapes (except `\\' which produces a backslash) cause an error. + + If the `use_charnames_in_special' keyword is set in the `DESC' + file, special characters no longer cause an error; the name XX is + represented as `\(XX)' in the `x X' output command. Additionally, + the backslash is represented as `\\'. -* ms Intro:: -* General ms Structure:: -* ms Document Control Registers:: -* ms Cover Page Macros:: -* ms Body Text:: -* ms Page Layout:: -* Differences from AT&T ms:: + `use_charnames_in_special' is currently used by `grohtml' only. + + -- Escape: \Yn + -- Escape: \Y(nm + -- Escape: \Y[name] + This is approximately equivalent to `\X'\*[NAME]'' (one-character + name N, two-character name NM). However, the contents of the + string or macro NAME are not interpreted; also it is permitted for + NAME to have been defined as a macro and thus contain newlines (it + is not permitted for the argument to `\X' to contain newlines). + The inclusion of newlines requires an extension to the UNIX `troff' + output format, and confuses drivers that do not know about this + extension (*note Device Control Commands::). + + *Note Output Devices::. -File: groff, Node: ms Intro, Next: General ms Structure, Prev: ms, Up: ms +File: groff, Node: Miscellaneous, Next: Gtroff Internals, Prev: Postprocessor Access, Up: gtroff Reference + +5.31 Miscellaneous +================== + +This section documents parts of `gtroff' which cannot (yet) be +categorized elsewhere in this manual. + + -- Request: .nm [start [inc [space [indent]]]] + Print line numbers. START is the line number of the _next_ output + line. INC indicates which line numbers are printed. For example, + the value 5 means to emit only line numbers which are multiples + of 5; this defaults to 1. SPACE is the space to be left between + the number and the text; this defaults to one digit space. The + fourth argument is the indentation of the line numbers, defaulting + to zero. Both SPACE and INDENT are given as multiples of digit + spaces; they can be negative also. Without any arguments, line + numbers are turned off. + + `gtroff' reserves three digit spaces for the line number (which is + printed right-justified) plus the amount given by INDENT; the + output lines are concatenated to the line numbers, separated by + SPACE, and _without_ reducing the line length. Depending on the + value of the horizontal page offset (as set with the `po' + request), line numbers which are longer than the reserved space + stick out to the left, or the whole line is moved to the right. + + Parameters corresponding to missing arguments are not changed; any + non-digit argument (to be more precise, any argument starting with + a character valid as a delimiter for identifiers) is also treated + as missing. + + If line numbering has been disabled with a call to `nm' without an + argument, it can be reactivated with `.nm +0', using the + previously active line numbering parameters. + + The parameters of `nm' are associated with the current environment + (*note Environments::). The current output line number is + available in the number register `ln'. + + + .po 1m + .ll 2i + This test shows how line numbering works with groff. + .nm 999 + This test shows how line numbering works with groff. + .br + .nm xxx 3 2 + .ll -\w'0'u + This test shows how line numbering works with groff. + .nn 2 + This test shows how line numbering works with groff. + + And here the result: + + + This test shows how + line numbering works + 999 with groff. This + 1000 test shows how line + 1001 numbering works with + 1002 groff. + This test shows how + line numbering + works with groff. + This test shows how + 1005 line numbering + works with groff. + + + -- Request: .nn [skip] + Temporarily turn off line numbering. The argument is the number + of lines not to be numbered; this defaults to 1. + + -- Request: .mc glyph [dist] + Print a "margin character" to the right of the text.(1) (*note + Miscellaneous-Footnote-1::) The first argument is the glyph to be + printed. The second argument is the distance away from the right + margin. If missing, the previously set value is used; default is + 10pt). For text lines that are too long (that is, longer than the + text length plus DIST), the margin character is directly appended + to the lines. + + With no arguments the margin character is turned off. If this + occurs before a break, no margin character is printed. + + For compatibility with AT&T `troff', a call to `mc' to set the + margin character can't be undone immediately; at least one line + gets a margin character. Thus + + + .ll 1i + .mc \[br] + .mc + xxx + .br + xxx + + produces + + + xxx | + xxx + + For empty lines and lines produced by the `tl' request no margin + character is emitted. + + The margin character is associated with the current environment + (*note Environments::). + + This is quite useful for indicating text that has changed, and, in + fact, there are programs available for doing this (they are called + `nrchbar' and `changebar' and can be found in any + `comp.sources.unix' archive). + + + .ll 3i + .mc | + This paragraph is highlighted with a margin + character. + .sp + Note that vertical space isn't marked. + .br + \& + .br + But we can fake it with `\&'. + + Result: + + + This paragraph is highlighted | + with a margin character. | + + Note that vertical space isn't | + marked. | + | + But we can fake it with `\&'. | + + + -- Request: .psbb filename + -- Register: \n[llx] + -- Register: \n[lly] + -- Register: \n[urx] + -- Register: \n[ury] + Retrieve the bounding box of the PostScript image found in + FILENAME. The file must conform to Adobe's "Document Structuring + Conventions" (DSC); the command searches for a `%%BoundingBox' + comment and extracts the bounding box values into the number + registers `llx', `lly', `urx', and `ury'. If an error occurs (for + example, `psbb' cannot find the `%%BoundingBox' comment), it sets + the four number registers to zero. -Introduction to `ms' --------------------- + The search path for FILENAME can be controlled with the `-I' + command line option. - The original `-ms' macros were included with AT&T `troff' as well as -the `man' macros. While the `man' package is intended for brief -documents that can be read on-line as well as printed, the `ms' macros -are suitable for longer documents that are meant to be printed rather -than read on-line. + +File: groff, Node: Miscellaneous-Footnotes, Up: Miscellaneous - The `ms' macro package included with `groff' is a complete, -bottom-up re-implementation. Several macros (specific to AT&T or -Berkeley) are not included, while several new commands are. *Note -Differences from AT&T ms::, for more information. + (1) "Margin character" is a misnomer since it is an output glyph. -File: groff, Node: General ms Structure, Next: ms Document Control Registers, Prev: ms Intro, Up: ms +File: groff, Node: Gtroff Internals, Next: Debugging, Prev: Miscellaneous, Up: gtroff Reference + +5.32 `gtroff' Internals +======================= + +`gtroff' processes input in three steps. One or more input characters +are converted to an "input token".(1) (*note Gtroff +Internals-Footnote-1::) Then, one or more input tokens are converted +to an "output node". Finally, output nodes are converted to the +intermediate output language understood by all output devices. + + Actually, before step one happens, `gtroff' converts certain escape +sequences into reserved input characters (not accessible by the user); +such reserved characters are used for other internal processing also - +this is the very reason why not all characters are valid input. *Note +Identifiers::, for more on this topic. + + For example, the input string `fi\[:u]' is converted into a +character token `f', a character token `i', and a special token `:u' +(representing u umlaut). Later on, the character tokens `f' and `i' +are merged to a single output node representing the ligature glyph `fi' +(provided the current font has a glyph for this ligature); the same +happens with `:u'. All output glyph nodes are `processed' which means +that they are invariably associated with a given font, font size, +advance width, etc. During the formatting process, `gtroff' itself +adds various nodes to control the data flow. + + Macros, diversions, and strings collect elements in two chained +lists: a list of input tokens which have been passed unprocessed, and a +list of output nodes. Consider the following the diversion. + + + .di xxx + a + \!b + c + .br + .di + +It contains these elements. + +node list token list element number +line start node -- 1 +glyph node `a' -- 2 +word space node -- 3 +-- `b' 4 +-- `\n' 5 +glyph node `c' -- 6 +vertical size node -- 7 +vertical size node -- 8 +-- `\n' 9 + +Elements 1, 7, and 8 are inserted by `gtroff'; the latter two (which +are always present) specify the vertical extent of the last line, +possibly modified by `\x'. The `br' request finishes the current +partial line, inserting a newline input token which is subsequently +converted to a space when the diversion is reread. Note that the word +space node has a fixed width which isn't stretchable anymore. To +convert horizontal space nodes back to input tokens, use the `unformat' +request. + + Macros only contain elements in the token list (and the node list is +empty); diversions and strings can contain elements in both lists. -General structure of an `ms' document -------------------------------------- + Note that the `chop' request simply reduces the number of elements +in a macro, string, or diversion by one. Exceptions are "compatibility +save" and "compatibility ignore" input tokens which are ignored. The +`substring' request also ignores those input tokens. - The `ms' macro package expects a certain amount of structure, but -not as much as packages such as `man' or `mdoc'. + Some requests like `tr' or `cflags' work on glyph identifiers only; +this means that the associated glyph can be changed without destroying +this association. This can be very helpful for substituting glyphs. +In the following example, we assume that glyph `foo' isn't available by +default, so we provide a substitution using the `fchar' request and map +it to input character `x'. - The simplest documents can begin with a paragraph macro (such as -`LP' or `PP'), and consist of text separated by paragraph macros or -even blank lines. Longer documents have a structure as follows: -*Document type* - If you invoke the `RP' (report) macro on the first line of the - document, `groff' prints the cover page information on its own - page; otherwise it prints the information on the first page with - your document text immediately following. Other document formats - found in AT&T `troff' are specific to AT&T or Berkeley, and are - not supported in `groff'. + .fchar \[foo] foo + .tr x \[foo] -*Format and layout* - By setting number registers, you can change your document's type - (font and size), margins, spacing, headers and footers, and - footnotes. *Note ms Document Control Registers::, for more - details. +Now let us assume that we install an additional special font `bar' +which has glyph `foo'. -*Cover page* - A cover page consists of a title, the author's name and - institution, an abstract, and the date. (1) (*note General ms - Structure-Footnote-1::) *Note ms Cover Page Macros::, for more - details. -*Body* - Following the cover page is your document. You can use the `ms' - macros to write reports, letters, books, and so forth. The - package is designed for structured documents, consisting of - paragraphs interspersed with headings and augmented by lists, - footnotes, tables, and other common constructs. *Note ms Body - Text::, for more details. + .special bar + .rchar \[foo] -*Table of contents* - Longer documents usually include a table of contents, which you - can invoke by placing the `TC' macro at the end of your document. - The `ms' macros have minimal indexing facilities, consisting of the - `IX' macro, which prints an entry on standard error. Printing the - table of contents at the end is necessary since `groff' is a - single-pass text formatter, thus it cannot determine the page - number of each section until that section has actually been set - and printed. Since `ms' output is intended for hardcopy, you can - manually relocate the pages containing the table of contents - between the cover page and the body text after printing. +Since glyphs defined with `fchar' are searched before glyphs in special +fonts, we must call `rchar' to remove the definition of the fallback +glyph. Anyway, the translation is still active; `x' now maps to the +real glyph `foo'. + + Macro and request arguments preserve the compatibility mode: + + + .cp 1 \" switch to compatibility mode + .de xx + \\$1 + .. + .cp 0 \" switch compatibility mode off + .xx caf\['e] + => café + +Since compatibility mode is on while `de' is called, the macro `xx' +activates compatibility mode while executing. Argument `$1' can still +be handled properly because it inherits the compatibility mode status +which was active at the point where `xx' is called. + + After expansion of the parameters, the compatibility save and restore +tokens are removed. -File: groff, Node: General ms Structure-Footnotes, Up: General ms Structure +File: groff, Node: Gtroff Internals-Footnotes, Up: Gtroff Internals - (1) Actually, only the title is required. + (1) Except the escapes `\f', `\F', `\H', `\m', `\M', `\R', `\s', and +`\S' which are processed immediately if not in copy-in mode. -File: groff, Node: ms Document Control Registers, Next: ms Cover Page Macros, Prev: General ms Structure, Up: ms +File: groff, Node: Debugging, Next: Implementation Differences, Prev: Gtroff Internals, Up: gtroff Reference -Document control registers --------------------------- +5.33 Debugging +============== - The following is a list of document control number registers. For -the sake of consistency, set registers related to margins at the -beginning of your document, or just after the `RP' macro. You can set -other registers later in your document, but you should keep them -together at the beginning to make them easy to find and edit as -necessary. +`gtroff' is not easy to debug, but there are some useful features and +strategies for debugging. -Margin Settings -............... + -- Request: .lf line [filename] + Change the line number and optionally the file name `gtroff' shall + use for error and warning messages. LINE is the input line number + of the _next_ line. - - Register: \n[PO] - Defines the page offset (i.e. the left margin). There is no - explicit right margin setting; the combination of the `PO' and - `LL' registers implicitly define the right margin width. + Without argument, the request is ignored. - Effective: next page. + This is a debugging aid for documents which are split into many + files, then put together with `soelim' and other preprocessors. + Usually, it isn't invoked manually. - Default value: 1i. + Note that other `troff' implementations (including the original + AT&T version) handle `lf' differently. For them, LINE changes the + line number of the _current_ line. - - Register: \n[LL] - Defines the line length (i.e. the width of the body text). + -- Request: .tm string + -- Request: .tm1 string + -- Request: .tmc string + Send STRING to the standard error output; this is very useful for + printing debugging messages among other things. - Effective: next paragraph. + STRING is read in copy mode. - Default: 6i. + The `tm' request ignores leading spaces of STRING; `tm1' handles + its argument similar to the `ds' request: a leading double quote + in STRING is stripped to allow initial blanks. - - Register: \n[LT] - Defines the title length (i.e. the header and footer width). This - is usually the same as `LL', but not necessarily. + The `tmc' request is similar to `tm1' but does not append a + newline (as is done in `tm' and `tm1'). - Effective: next paragraph. + -- Request: .ab [string] + Similar to the `tm' request, except that it causes `gtroff' to + stop processing. With no argument it prints `User Abort.' to + standard error. - Default: 6i. + -- Request: .ex + The `ex' request also causes `gtroff' to stop processing; see also + *Note I/O::. - - Register: \n[HM] - Defines the header margin height at the top of the page. + When doing something involved it is useful to leave the debugging +statements in the code and have them turned on by a command line flag. - Effective: next page. - Default: 1i. + .if \n(DB .tm debugging output - - Register: \n[FM] - Defines the footer margin height at the bottom of the page. +To activate these statements say - Effective: next page. - Default: 1i. + groff -rDB=1 file -Text Settings -............. + If it is known in advance that there will be many errors and no +useful output, `gtroff' can be forced to suppress formatted output with +the `-z' flag. - - Register: \n[PS] - Defines the point size of the body text. + -- Request: .pm + Print the entire symbol table on `stderr'. Names of all defined + macros, strings, and diversions are print together with their size + in bytes. Since `gtroff' sometimes adds nodes by itself, the + returned size can be larger than expected. - Effective: next paragraph. + This request differs from UNIX `troff': `gtroff' reports the sizes + of diversions, ignores an additional argument to print only the + total of the sizes, and the size isn't returned in blocks of 128 + characters. - Default: 10p. + -- Request: .pnr + Print the names and contents of all currently defined number + registers on `stderr'. - - Register: \n[VS] - Defines the space between lines (line height plus leading). + -- Request: .ptr + Print the names and positions of all traps (not including input + line traps and diversion traps) on `stderr'. Empty slots in the + page trap list are printed as well, because they can affect the + priority of subsequently planted traps. - Effective: next paragraph. + -- Request: .fl + Instruct `gtroff' to flush its output immediately. The intent is + for interactive use, but this behaviour is currently not + implemented in `gtroff'. Contrary to UNIX `troff', TTY output is + sent to a device driver also (`grotty'), making it non-trivial to + communicate interactively. - Default: 12p. + This request causes a line break. -Paragraph Settings -.................. + -- Request: .backtrace + Print a backtrace of the input stack to the standard error stream. + + Consider the following in file `test': + + + .de xxx + . backtrace + .. + .de yyy + . xxx + .. + . + .yyy - - Register: \n[PI] - Defines the initial indent of a `.PP' paragraph. + On execution, `gtroff' prints the following: - Effective: next paragraph. - Default: 5n. + test:2: backtrace: macro `xxx' + test:5: backtrace: macro `yyy' + test:8: backtrace: file `test' - - Register: \n[PD] - Defines the space between paragraphs. + The option `-b' of `gtroff' internally calls a variant of this + request on each error and warning. - Effective: next paragraph. + -- Register: \n[slimit] + Use the `slimit' number register to set the maximum number of + objects on the input stack. If `slimit' is less than or equal + to 0, there is no limit set. With no limit, a buggy recursive + macro can exhaust virtual memory. - Default: 0.3v. + The default value is 1000; this is a compile-time constant. - - Register: \n[QI] - Defines the indent on both sides of a quoted (`.QP') paragraph. + -- Request: .warnscale si + Set the scaling indicator used in warnings to SI. Valid values for + SI are `u', `i', `c', `p', and `P'. At startup, it is set to `i'. - Effective: next paragraph. + -- Request: .spreadwarn [limit] + Make `gtroff' emit a warning if the additional space inserted for + each space between words in an output line is larger or equal to + LIMIT. A negative value is changed to zero; no argument toggles + the warning on and off without changing LIMIT. The default scaling + indicator is `m'. At startup, `spreadwarn' is deactivated, and + LIMIT is set to 3m. - Default: 5n. + For example, -Footnote Settings -................. - - Register: \n[FL] - Defines the length of a footnote. + .spreadwarn 0.2m - Effective: next footnote. + will cause a warning if `gtroff' must add 0.2m or more for each + interword space in a line. - Default: `\n[LL]' * 5 / 6. + This request is active only if text is justified to both margins + (using `.ad b'). - - Register: \n[FI] - Defines the footnote indent. + `gtroff' has command line options for printing out more warnings +(`-w') and for printing backtraces (`-b') when a warning or an error +occurs. The most verbose level of warnings is `-ww'. - Effective: next footnote. + -- Request: .warn [flags] + -- Register: \n[.warn] + Control the level of warnings checked for. The FLAGS are the sum + of the numbers associated with each warning that is to be enabled; + all other warnings are disabled. The number associated with each + warning is listed below. For example, `.warn 0' disables all + warnings, and `.warn 1' disables all warnings except that about + missing glyphs. If no argument is given, all warnings are enabled. - Default: 2n. + The read-only number register `.warn' contains the current warning + level. - - Register: \n[FF] - The footnote format: - `0' - Prints the footnote number as a superscript; indents the - footnote (default). +* Menu: + +* Warnings:: - `1' - Prints the number followed by a period (like 1.) and indents - the footnote. + +File: groff, Node: Warnings, Prev: Debugging, Up: Debugging + +5.33.1 Warnings +--------------- + +The warnings that can be given to `gtroff' are divided into the +following categories. The name associated with each warning is used by +the `-w' and `-W' options; the number is used by the `warn' request and +by the `.warn' register. + +`char' +`1' + Non-existent glyphs.(1) (*note Warnings-Footnote-1::) This is + enabled by default. + +`number' +`2' + Invalid numeric expressions. This is enabled by default. *Note + Expressions::. + +`break' +`4' + In fill mode, lines which could not be broken so that their length + was less than the line length. This is enabled by default. + +`delim' +`8' + Missing or mismatched closing delimiters. + +`el' +`16' + Use of the `el' request with no matching `ie' request. *Note + if-else::. + +`scale' +`32' + Meaningless scaling indicators. + +`range' +`64' + Out of range arguments. + +`syntax' +`128' + Dubious syntax in numeric expressions. + +`di' +`256' + Use of `di' or `da' without an argument when there is no current + diversion. + +`mac' +`512' + Use of undefined strings, macros and diversions. When an undefined + string, macro, or diversion is used, that string is automatically + defined as empty. So, in most cases, at most one warning is given + for each name. + +`reg' +`1024' + Use of undefined number registers. When an undefined number + register is used, that register is automatically defined to have a + value of 0. So, in most cases, at most one warning is given for + use of a particular name. + +`tab' +`2048' + Use of a tab character where a number was expected. + +`right-brace' +`4096' + Use of `\}' where a number was expected. + +`missing' +`8192' + Requests that are missing non-optional arguments. + +`input' +`16384' + Invalid input characters. + +`escape' +`32768' + Unrecognized escape sequences. When an unrecognized escape + sequence `\X' is encountered, the escape character is ignored, and + X is printed. + +`space' +`65536' + Missing space between a request or macro and its argument. This + warning is given when an undefined name longer than two characters + is encountered, and the first two characters of the name make a + defined name. The request or macro is not invoked. When this + warning is given, no macro is automatically defined. This is + enabled by default. This warning never occurs in compatibility + mode. + +`font' +`131072' + Non-existent fonts. This is enabled by default. + +`ig' +`262144' + Invalid escapes in text ignored with the `ig' request. These are + conditions that are errors when they do not occur in ignored text. + +`color' +`524288' + Color related warnings. + +`all' + All warnings except `di', `mac' and `reg'. It is intended that + this covers all warnings that are useful with traditional macro + packages. + +`w' + All warnings. - `2' - Like 1, without an indent. + +File: groff, Node: Warnings-Footnotes, Up: Warnings - `3' - Like 1, but prints the footnote number as a hanging paragraph. + (1) `char' is a misnomer since it reports missing glyphs - there +aren't missing input characters, only invalid ones. - Effective: next footnote. + +File: groff, Node: Implementation Differences, Prev: Debugging, Up: gtroff Reference - Default: 0. +5.34 Implementation Differences +=============================== -Miscellaneous Number Registers -.............................. +GNU `troff' has a number of features which cause incompatibilities with +documents written with old versions of `troff'. - - Register: \n[MINGW] - Defines the minimum width between columns in a multi-column - document. + Long names cause some incompatibilities. UNIX `troff' interprets + + + .dsabcd + +as defining a string `ab' with contents `cd'. Normally, GNU `troff' +interprets this as a call of a macro named `dsabcd'. Also UNIX `troff' +interprets `\*[' or `\n[' as references to a string or number register +called `['. In GNU `troff', however, this is normally interpreted as +the start of a long name. In compatibility mode GNU `troff' interprets +long names in the traditional way (which means that they are not +recognized as names). + + -- Request: .cp [n] + -- Request: .do cmd + -- Register: \n[.C] + If N is missing or non-zero, turn on compatibility mode; + otherwise, turn it off. + + The read-only number register `.C' is 1 if compatibility mode is + on, 0 otherwise. + + Compatibility mode can be also turned on with the `-C' command line + option. - Effective: next page. + The `do' request turns off compatibility mode while executing its + arguments as a `gtroff' command. - Default: 2n. + + .do fam T + + executes the `fam' request when compatibility mode is enabled. + + `gtroff' restores the previous compatibility setting before + interpreting any files sourced by the CMD. + + Two other features are controlled by `-C'. If not in compatibility +mode, GNU `troff' preserves the input level in delimited arguments: + + + .ds xx ' + \w'abc\*(xxdef' + +In compatibility mode, the string `72def'' is returned; without `-C' +the resulting string is `168' (assuming a TTY output device). + + Finally, the escapes `\f', `\H', `\m', `\M', `\R', `\s', and `\S' +are transparent for recognizing the beginning of a line only in +compatibility mode (this is a rather obscure feature). For example, +the code + + + .de xx + Hallo! + .. + \fB.xx\fP + +prints `Hallo!' in bold face if in compatibility mode, and `.xx' in +bold face otherwise. + + GNU `troff' does not allow the use of the escape sequences `\|', +`\^', `\&', `\{', `\}', `\<SP>', `\'', `\`', `\-', `\_', `\!', `\%', +and `\c' in names of strings, macros, diversions, number registers, +fonts or environments; UNIX `troff' does. The `\A' escape sequence +(*note Identifiers::) may be helpful in avoiding use of these escape +sequences in names. + + Fractional point sizes cause one noteworthy incompatibility. In +UNIX `troff' the `ps' request ignores scale indicators and thus + + + .ps 10u + +sets the point size to 10 points, whereas in GNU `troff' it sets the +point size to 10 scaled points. *Note Fractional Type Sizes::, for +more information. + + In GNU `troff' there is a fundamental difference between +(unformatted) input characters and (formatted) output glyphs. +Everything that affects how a glyph is output is stored with the glyph +node; once a glyph node has been constructed it is unaffected by any +subsequent requests that are executed, including `bd', `cs', `tkf', +`tr', or `fp' requests. Normally glyphs are constructed from input +characters at the moment immediately before the glyph is added to the +current output line. Macros, diversions and strings are all, in fact, +the same type of object; they contain lists of input characters and +glyph nodes in any combination. A glyph node does not behave like an +input character for the purposes of macro processing; it does not +inherit any of the special properties that the input character from +which it was constructed might have had. For example, + + + .di x + \\\\ + .br + .di + .x + +prints `\\' in GNU `troff'; each pair of input backslashes is turned +into one output backslash and the resulting output backslashes are not +interpreted as escape characters when they are reread. UNIX `troff' +would interpret them as escape characters when they were reread and +would end up printing one `\'. The correct way to obtain a printable +backslash is to use the `\e' escape sequence: This always prints a +single instance of the current escape character, regardless of whether +or not it is used in a diversion; it also works in both GNU `troff' and +UNIX `troff'.(1) (*note Implementation Differences-Footnote-1::) To +store, for some reason, an escape sequence in a diversion that will be +interpreted when the diversion is reread, either use the traditional +`\!' transparent output facility, or, if this is unsuitable, the new +`\?' escape sequence. + + *Note Diversions::, and *Note Gtroff Internals::, for more +information. + + +File: groff, Node: Implementation Differences-Footnotes, Up: Implementation Differences + + (1) To be completely independent of the current escape character, +use `\(rs' which represents a reverse solidus (backslash) glyph. -File: groff, Node: ms Cover Page Macros, Next: ms Body Text, Prev: ms Document Control Registers, Up: ms +File: groff, Node: Preprocessors, Next: Output Devices, Prev: gtroff Reference, Up: Top -Cover page macros ------------------ +6 Preprocessors +*************** - Use the following macros to create a cover page for your document in -the order shown. +This chapter describes all preprocessors that come with `groff' or +which are freely available. - - Macro: .RP [`no'] - Specifies the report format for your document. The report format - creates a separate cover page. The default action (no `.RP' - macro) is to print a subset of the cover page on page 1 of your - document. +* Menu: - If you use the word `no' as an optional argument, `groff' prints a - title page but does not repeat any of the title page information - (title, author, abstract, etc.) on page 1 of the document. - - - Macro: .DA [...] - (optional) Print the current date, or the arguments to the macro - if any, on the title page (if specified) and in the footers. This - is the default for `nroff'. - - - Macro: .ND [...] - (optional) Print the current date, or the arguments to the macro - if any, on the title page (if specified) but not in the footers. - This is the default for `troff'. - - - Macro: .TL - Specifies the document title. `groff' collects text following the - `.TL' macro into the title, until reaching the author name or - abstract. - - - Macro: .AU - Specifies the author's name, which appears on the line (or lines) - immediately following. You can specify multiple authors as - follows: - - - .AU - John Doe - .AI - University of West Bumblefuzz - .AU - Martha Buck - .AI - Monolithic Corporation - - ... +* geqn:: +* gtbl:: +* gpic:: +* ggrn:: +* grap:: +* grefer:: +* gsoelim:: + +File: groff, Node: geqn, Next: gtbl, Prev: Preprocessors, Up: Preprocessors - - Macro: .AI - Specifies the author's institution. You can specify multiple - institutions in the same way that you specify multiple authors. - - - Macro: .AB [`no'] - Begins the abstract. The default is to print the word ABSTRACT, - centered and in italics, above the text of the abstract. The word - `no' as an optional argument suppresses this heading. - - - Macro: .AE - End the abstract. - - The following is example mark-up for a title page. - - - .RP - .TL - The Inevitability of Code Bloat - in Commercial and Free Software - .AU - J. Random Luser - .AI - University of West Bumblefuzz - .AB - This report examines the long-term growth - of the code bases in two large, popular software - packages; the free Emacs and the commercial - Microsoft Word. - While differences appear in the type or order - of features added, due to the different - methodologies used, the results are the same - in the end. - .PP - The free software approach is shown to be - superior in that while free software can - become as bloated as commercial offerings, - free software tends to have fewer serious - bugs and the added features are in line with - user demand. - .AE - - ... the rest of the paper follows ... - - -File: groff, Node: ms Body Text, Next: ms Page Layout, Prev: ms Cover Page Macros, Up: ms - -Body text ---------- - - This section describes macros used to mark up the body of your -document. Examples include paragraphs, sections, and other groups. +6.1 `geqn' +========== * Menu: -* Paragraphs in ms:: -* Headings in ms:: -* Highlighting in ms:: -* Lists in ms:: -* Indents in ms:: -* Tabstops in ms:: -* ms Displays and Keeps:: -* ms Insertions:: -* Example multi-page table:: -* ms Footnotes:: +* Invoking geqn:: -File: groff, Node: Paragraphs in ms, Next: Headings in ms, Prev: ms Body Text, Up: ms Body Text +File: groff, Node: Invoking geqn, Prev: geqn, Up: geqn -Paragraphs -.......... +6.1.1 Invoking `geqn' +--------------------- - The following paragraph types are available. + +File: groff, Node: gtbl, Next: gpic, Prev: geqn, Up: Preprocessors - - Macro: .PP - Sets a paragraph with an initial indent. +6.2 `gtbl' +========== - - Macro: .LP - Sets a paragraph with no initial indent. +* Menu: - - Macro: .QP - Sets a paragraph that is indented at both left and right margins. - The effect is identical to the HTML `<BLOCKQUOTE>' element. The - next paragraph or heading returns margins to normal. +* Invoking gtbl:: - - Macro: .XP - Sets a paragraph whose lines are indented, except for the first - line. This is a Berkeley extension. + +File: groff, Node: Invoking gtbl, Prev: gtbl, Up: gtbl - The following markup uses all four paragraph macros. +6.2.1 Invoking `gtbl' +--------------------- + +File: groff, Node: gpic, Next: ggrn, Prev: gtbl, Up: Preprocessors - .NH 2 - Cases used in the study - .LP - The following software and versions were - considered for this report. - .PP - For commercial software, we chose - .B "Microsoft Word for Windows" , - starting with version 1.0 through the - current version (Word 2000). - .PP - For free software, we chose - .B Emacs , - from its first appearance as a standalone - editor through the current version (v20). - See [Bloggs 2002] for details. - .QP - Franklin's Law applied to software: - software expands to outgrow both - RAM and disk space over time. - .LP - Bibliography: - .XP - Bloggs, Joseph R., - .I "Everyone's a Critic" , - Underground Press, March 2002. - A definitive work that answers all questions - and criticisms about the quality and usability of - free software. +6.3 `gpic' +========== + +* Menu: + +* Invoking gpic:: -File: groff, Node: Headings in ms, Next: Highlighting in ms, Prev: Paragraphs in ms, Up: ms Body Text +File: groff, Node: Invoking gpic, Prev: gpic, Up: gpic + +6.3.1 Invoking `gpic' +--------------------- -Headings -........ + +File: groff, Node: ggrn, Next: grap, Prev: gpic, Up: Preprocessors - Use headings to create a hierarchical structure for your document. -The `ms' macros print headings in *bold*, using the same font family -and point size as the body text. +6.4 `ggrn' +========== - The following describes the heading macros: +* Menu: - - Macro: .NH curr-level - - Macro: .NH S level0 ... - Numbered heading. The argument is either a numeric argument to - indicate the level of the heading, or the letter `S' followed by - numeric arguments to set the heading level explicitly. +* Invoking ggrn:: - If you specify heading levels out of sequence, such as invoking - `.NH 3' after `.NH 1', `groff' prints a warning on standard error. + +File: groff, Node: Invoking ggrn, Prev: ggrn, Up: ggrn - - Macro: .SH - Unnumbered subheading. +6.4.1 Invoking `ggrn' +--------------------- -File: groff, Node: Highlighting in ms, Next: Lists in ms, Prev: Headings in ms, Up: ms Body Text +File: groff, Node: grap, Next: grefer, Prev: ggrn, Up: Preprocessors -Highlighting -............ +6.5 `grap' +========== - The `ms' macros provide a variety of methods to highlight or -emphasize text: +A free implementation of `grap', written by Ted Faber, is available as +an extra package from the following address: - - Macro: .B [txt [post [pre]]] - Sets its first argument in *bold type*. If you specify a second - argument, `groff' prints it in the previous font after the bold - text, with no intervening space (this allows you to set - punctuation after the highlighted text without highlighting the - punctuation). Similarly, it prints the third argument (if any) in - the previous font *before* the first argument. For example, + `http://www.lunabase.org/~faber/Vault/software/grap/' + +File: groff, Node: grefer, Next: gsoelim, Prev: grap, Up: Preprocessors - .B foo ) ( +6.6 `grefer' +============ - prints (*foo*). +* Menu: - If you give this macro no arguments, `groff' prints all text - following in bold until the next highlighting, paragraph, or - heading macro. +* Invoking grefer:: - - Macro: .R [txt [post [pre]]] - Sets its first argument in roman (or regular) type. It operates - similarly to the `B' macro otherwise. + +File: groff, Node: Invoking grefer, Prev: grefer, Up: grefer - - Macro: .I [txt [post [pre]]] - Sets its first argument in _italic type_. It operates similarly - to the `B' macro otherwise. +6.6.1 Invoking `grefer' +----------------------- - - Macro: .CW [txt [post [pre]]] - Sets its first argument in a `constant width face'. It operates - similarly to the `B' macro otherwise. + +File: groff, Node: gsoelim, Prev: grefer, Up: Preprocessors - - Macro: .BI [txt [post [pre]]] - Sets its first argument in bold italic type. It operates - similarly to the `B' macro otherwise. +6.7 `gsoelim' +============= - - Macro: .BX [txt] - Prints its argument and draws a box around it. If you want to box - a string that contains spaces, use a digit-width space (`\0'). +* Menu: - - Macro: .UL [txt [post]] - Prints its first argument with an underline. If you specify a - second argument, `groff' prints it in the previous font after the - underlined text, with no intervening space. +* Invoking gsoelim:: - - Macro: .LG - Prints all text following in larger type (two points larger than - the current point size) until the next font size, highlighting, - paragraph, or heading macro. You can specify this macro multiple - times to enlarge the point size as needed. + +File: groff, Node: Invoking gsoelim, Prev: gsoelim, Up: gsoelim - - Macro: .SM - Prints all text following in smaller type (two points smaller than - the current point size) until the next type size, highlighting, - paragraph, or heading macro. You can specify this macro multiple - times to reduce the point size as needed. +6.7.1 Invoking `gsoelim' +------------------------ - - Macro: .NL - Prints all text following in the normal point size (that is, the - value of the `PS' register). + +File: groff, Node: Output Devices, Next: File formats, Prev: Preprocessors, Up: Top + +7 Output Devices +**************** + +* Menu: + +* Special Characters:: +* grotty:: +* grops:: +* grodvi:: +* grolj4:: +* grolbp:: +* grohtml:: +* gxditview:: -File: groff, Node: Lists in ms, Next: Indents in ms, Prev: Highlighting in ms, Up: ms Body Text +File: groff, Node: Special Characters, Next: grotty, Prev: Output Devices, Up: Output Devices -Lists -..... +7.1 Special Characters +====================== - The `.IP' macro handles duties for all lists. +*Note Font Files::. - - Macro: .IP [marker [width]] - The MARKER is usually a bullet glyph (`\[bu]') for unordered - lists, a number (or auto-incrementing number register) for - numbered lists, or a word or phrase for indented (glossary-style) - lists. + +File: groff, Node: grotty, Next: grops, Prev: Special Characters, Up: Output Devices - The WIDTH specifies the indent for the body of each list item; its - default unit is `n'. Once specified, the indent remains the same - for all list items in the document until specified again. +7.2 `grotty' +============ - The following is an example of a bulleted list. +* Menu: +* Invoking grotty:: - A bulleted list: - .IP \[bu] 2 - lawyers - .IP \[bu] - guns - .IP \[bu] - money + +File: groff, Node: Invoking grotty, Prev: grotty, Up: grotty - Produces: +7.2.1 Invoking `grotty' +----------------------- + +File: groff, Node: grops, Next: grodvi, Prev: grotty, Up: Output Devices - A bulleted list: - - o lawyers - - o guns - - o money +7.3 `grops' +=========== +* Menu: - The following is an example of a numbered list. +* Invoking grops:: +* Embedding PostScript:: + +File: groff, Node: Invoking grops, Next: Embedding PostScript, Prev: grops, Up: grops - .nr step 1 1 - A numbered list: - .IP \n[step] 3 - lawyers - .IP \n+[step] - guns - .IP \n+[step] - money +7.3.1 Invoking `grops' +---------------------- - Produces: + +File: groff, Node: Embedding PostScript, Prev: Invoking grops, Up: grops +7.3.2 Embedding POSTSCRIPT +-------------------------- - A numbered list: - - 1. lawyers - - 2. guns - - 3. money + +File: groff, Node: grodvi, Next: grolj4, Prev: grops, Up: Output Devices - Note the use of the auto-incrementing number register in this -example. +7.4 `grodvi' +============ +* Menu: - The following is an example of a glossary-style list. +* Invoking grodvi:: + +File: groff, Node: Invoking grodvi, Prev: grodvi, Up: grodvi - A glossary-style list: - .IP lawyers 0.4i - Two or more attorneys. - .IP guns - Firearms, preferably - large-caliber. - .IP money - Gotta pay for those - lawyers and guns! +7.4.1 Invoking `grodvi' +----------------------- - Produces: + +File: groff, Node: grolj4, Next: grolbp, Prev: grodvi, Up: Output Devices +7.5 `grolj4' +============ - A glossary-style list: - - lawyers - Two or more attorneys. - - guns Firearms, preferably large-caliber. - - money - Gotta pay for those lawyers and guns! +* Menu: - In the last example, the `IP' macro places the definition on the -same line as the term if it has enough space; otherwise, it breaks to -the next line and starts the definition below the term. This may or -may not be the effect you want, especially if some of the definitions -break and some do not. The following examples show two possible ways -to force a break. +* Invoking grolj4:: - The first workaround uses the `br' request to force a break after -printing the term or label. + +File: groff, Node: Invoking grolj4, Prev: grolj4, Up: grolj4 +7.5.1 Invoking `grolj4' +----------------------- - A glossary-style list: - .IP lawyers 0.4i - Two or more attorneys. - .IP guns - .br - Firearms, preferably large-caliber. - .IP money - Gotta pay for those lawyers and guns! + +File: groff, Node: grolbp, Next: grohtml, Prev: grolj4, Up: Output Devices + +7.6 `grolbp' +============ + +* Menu: + +* Invoking grolbp:: + + +File: groff, Node: Invoking grolbp, Prev: grolbp, Up: grolbp + +7.6.1 Invoking `grolbp' +----------------------- + + +File: groff, Node: grohtml, Next: gxditview, Prev: grolbp, Up: Output Devices + +7.7 `grohtml' +============= + +* Menu: +* Invoking grohtml:: +* grohtml specific registers and strings:: - The second workaround uses the `\p' escape to force the break. Note -the space following the escape; this is important. If you omit the -space, `groff' prints the first word on the same line as the term or -label (if it fits) *then* breaks the line. + +File: groff, Node: Invoking grohtml, Next: grohtml specific registers and strings, Prev: grohtml, Up: grohtml + +7.7.1 Invoking `grohtml' +------------------------ + +File: groff, Node: grohtml specific registers and strings, Prev: Invoking grohtml, Up: grohtml - A glossary-style list: - .IP lawyers 0.4i - Two or more attorneys. - .IP guns - \p Firearms, preferably large-caliber. - .IP money - Gotta pay for those lawyers and guns! +7.7.2 `grohtml' specific registers and strings +---------------------------------------------- + -- Register: \n[ps4html] + -- String: \*[www-image-template] + The registers `ps4html' and `www-image-template' are defined by + the `pre-grohtml' preprocessor. `pre-grohtml' reads in the + `troff' input, marks up the inline equations and passes the result + firstly to - To set nested lists, use the `RS' and `RE' macros. *Note Indents in -ms::, for more information. - For example: + troff -Tps -rps4html=1 -dwww-image-template=TEMPLATE + and secondly to - .IP \[bu] 2 - Lawyers: - .RS - .IP \[bu] - Dewey, - .IP \[bu] - Cheatham, - .IP \[bu] - and Howe. - .RE - .IP \[bu] - Guns - Produces: + troff -Thtml + The PostScript device is used to create all the image files, and + the register `ps4html' enables the macro sets to ignore floating + keeps, footers, and headings. - o Lawyers: - - o Dewey, - - o Cheatham, - - o and Howe. - - o Guns + The register `www-image-template' is set to the user specified + template name or the default name. -File: groff, Node: Indents in ms, Next: Tabstops in ms, Prev: Lists in ms, Up: ms Body Text +File: groff, Node: gxditview, Prev: grohtml, Up: Output Devices -Indents -....... +7.8 `gxditview' +=============== - In many situations, you may need to indent a section of text while -still wrapping and filling. *Note Lists in ms::, for an example of -nested lists. +* Menu: + +* Invoking gxditview:: - - Macro: .RS - - Macro: .RE - These macros begin and end an indented section. The `PI' register - controls the amount of indent, allowing the indented text to line - up under hanging and indented paragraphs. + +File: groff, Node: Invoking gxditview, Prev: gxditview, Up: gxditview - *Note ms Displays and Keeps::, for macros to indent and turn off -filling. +7.8.1 Invoking `gxditview' +-------------------------- -File: groff, Node: Tabstops in ms, Next: ms Displays and Keeps, Prev: Indents in ms, Up: ms Body Text +File: groff, Node: File formats, Next: Installation, Prev: Output Devices, Up: Top + +8 File formats +************** -Tab Stops -......... +All files read and written by `gtroff' are text files. The following +two sections describe their format. - Use the `ta' request to define tab stops as needed. *Note Tabs and -Fields::. +* Menu: - - Macro: .TA - Use this macro to reset the tab stops to the default for `ms' - (every 5n). You can redefine the `TA' macro to create a different - set of default tab stops. +* gtroff Output:: +* Font Files:: -File: groff, Node: ms Displays and Keeps, Next: ms Insertions, Prev: Tabstops in ms, Up: ms Body Text +File: groff, Node: gtroff Output, Next: Font Files, Prev: File formats, Up: File formats + +8.1 `gtroff' Output +=================== + +This section describes the intermediate output format of GNU `troff'. +This output is produced by a run of `gtroff' before it is fed into a +device postprocessor program. + + As `groff' is a wrapper program around `gtroff' that automatically +calls a postprocessor, this output does not show up normally. This is +why it is called "intermediate". `groff' provides the option `-Z' to +inhibit postprocessing, such that the produced intermediate output is +sent to standard output just like calling `gtroff' manually. + + Here, the term "troff output" describes what is output by `gtroff', +while "intermediate output" refers to the language that is accepted by +the parser that prepares this output for the postprocessors. This +parser is smarter on whitespace and implements obsolete elements for +compatibility, otherwise both formats are the same.(1) (*note gtroff +Output-Footnote-1::) + + The main purpose of the intermediate output concept is to facilitate +the development of postprocessors by providing a common programming +interface for all devices. It has a language of its own that is +completely different from the `gtroff' language. While the `gtroff' +language is a high-level programming language for text processing, the +intermediate output language is a kind of low-level assembler language +by specifying all positions on the page for writing and drawing. + + The intermediate output produced by `gtroff' is fairly readable, +while output from AT&T `troff' is rather hard to understand because of +strange habits that are still supported, but not used any longer by +`gtroff'. + +* Menu: + +* Language Concepts:: +* Command Reference:: +* Intermediate Output Examples:: +* Output Language Compatibility:: -Displays and keeps + +File: groff, Node: gtroff Output-Footnotes, Up: gtroff Output + + (1) The parser and postprocessor for intermediate output can be +found in the file +`GROFF-SOURCE-DIR/src/libs/libdriver/input.cpp'. + + +File: groff, Node: Language Concepts, Next: Command Reference, Prev: gtroff Output, Up: gtroff Output + +8.1.1 Language Concepts +----------------------- + +During the run of `gtroff', the input data is cracked down to the +information on what has to be printed at what position on the intended +device. So the language of the intermediate output format can be quite +small. Its only elements are commands with and without arguments. In +this section, the term "command" always refers to the intermediate +output language, and never to the `gtroff' language used for document +formatting. There are commands for positioning and text writing, for +drawing, and for device controlling. + +* Menu: + +* Separation:: +* Argument Units:: +* Document Parts:: + + +File: groff, Node: Separation, Next: Argument Units, Prev: Language Concepts, Up: Language Concepts + +8.1.1.1 Separation .................. - Use displays to show text-based examples or figures (such as code -listings). - - Displays turn off filling, so lines of code are displayed as-is -without inserting `br' requests in between each line. Displays can be -"kept" on a single page, or allowed to break across pages. - - - Macro: .DS L - - Macro: .LD - - Macro: .DE - Left-justified display. The `.DS L' call generates a page break, - if necessary, to keep the entire display on one page. The `LD' - macro allows the display to break across pages. The `DE' macro - ends the display. - - - Macro: .DS I - - Macro: .ID - - Macro: .DE - Indents the display as defined by the `DI' register. The `.DS I' - call generates a page break, if necessary, to keep the entire - display on one page. The `ID' macro allows the display to break - across pages. The `DE' macro ends the display. - - - Macro: .DS B - - Macro: .BD - - Macro: .DE - Sets a block-centered display: the entire display is - left-justified, but indented so that the longest line in the - display is centered on the page. The `.DS B' call generates a - page break, if necessary, to keep the entire display on one page. - The `BD' macro allows the display to break across pages. The `DE' - macro ends the display. - - - Macro: .DS C - - Macro: .CD - - Macro: .DE - Sets a centered display: each line in the display is centered. - The `.DS C' call generates a page break, if necessary, to keep the - entire display on one page. The `CD' macro allows the display to - break across pages. The `DE' macro ends the display. - - - Macro: .DS R - - Macro: .RD - - Macro: .DE - Right-justifies each line in the display. The `.DS R' call - generates a page break, if necessary, to keep the entire display - on one page. The `RD' macro allows the display to break across - pages. The `DE' macro ends the display. - - - On occasion, you may want to "keep" other text together on a page. -For example, you may want to keep two paragraphs together, or a -paragraph that refers to a table (or list, or other item) immediately -following. The `ms' macros provide the `KS' and `KE' macros for this -purpose. - - - Macro: .KS - - Macro: .KE - The `KS' macro begins a block of text to be kept on a single page, - and the `KE' macro ends the block. - - - Macro: .KF - - Macro: .KE - Specifies a "floating keep"; if the keep cannot fit on the current - page, `groff' holds the contents of the keep and allows text - following the keep (in the source file) to fill in the remainder of - the current page. When the page breaks, whether by an explicit - `bp' request or by reaching the end of the page, `groff' prints - the floating keep at the top of the new page. This is useful for - printing large graphics or tables that do not need to appear - exactly where specified. - - You can also use the `ne' request to force a page break if there is -not enough vertical space remaining on the page. - - - Use the following macros to draw a box around a section of text -(such as a display). - - - Macro: .B1 - - Macro: .B2 - Marks the beginning and ending of text that is to have a box drawn - around it. The `B1' macro begins the box; the `B2' macro ends it. - Text in the box is automatically placed in a diversion (keep). - - -File: groff, Node: ms Insertions, Next: Example multi-page table, Prev: ms Displays and Keeps, Up: ms Body Text - -Tables, figures, equations, and references -.......................................... - - The `ms' macros support the standard `groff' preprocessors: `tbl', -`pic', `eqn', and `refer'. You mark text meant for preprocessors by -enclosing it in pairs of tags as follows. - - - Macro: .TS [`H'] - - Macro: .TE - Denotes a table, to be processed by the `tbl' preprocessor. The - optional argument `H' to `TS' instructs `groff' to create a - running header with the information up to the `TH' macro. `groff' - prints the header at the beginning of the table; if the table runs - onto another page, `groff' prints the header on the next page as - well. - - - Macro: .PS - - Macro: .PE - Denotes a graphic, to be processed by the `pic' preprocessor. You - can create a `pic' file by hand, using the AT&T `pic' manual - available on the Web as a reference, or by using a graphics - program such as `xfig'. - - - Macro: .EQ [align] - - Macro: .EN - Denotes an equation, to be processed by the `eqn' preprocessor. - The optional ALIGN argument can be `C', `L', or `I' to center (the - default), left-justify, or indent the equation. - - - Macro: .[ - - Macro: .] - Denotes a reference, to be processed by the `refer' preprocessor. - The GNU `refer(1)' man page provides a comprehensive reference to - the preprocessor and the format of the bibliographic database. +AT&T `troff' output has strange requirements on whitespace. The +`gtroff' output parser, however, is smart about whitespace by making it +maximally optional. The whitespace characters, i.e., the tab, space, +and newline characters, always have a syntactical meaning. They are +never printable because spacing within the output is always done by +positioning commands. + + Any sequence of space or tab characters is treated as a single +"syntactical space". It separates commands and arguments, but is only +required when there would occur a clashing between the command code and +the arguments without the space. Most often, this happens when +variable-length command names, arguments, argument lists, or command +clusters meet. Commands and arguments with a known, fixed length need +not be separated by syntactical space. + + A line break is a syntactical element, too. Every command argument +can be followed by whitespace, a comment, or a newline character. Thus +a "syntactical line break" is defined to consist of optional +syntactical space that is optionally followed by a comment, and a +newline character. + + The normal commands, those for positioning and text, consist of a +single letter taking a fixed number of arguments. For historical +reasons, the parser allows to stack such commands on the same line, but +fortunately, in `gtroff''s intermediate output, every command with at +least one argument is followed by a line break, thus providing +excellent readability. + + The other commands - those for drawing and device controlling - have +a more complicated structure; some recognize long command names, and +some take a variable number of arguments. So all `D' and `x' commands +were designed to request a syntactical line break after their last +argument. Only one command, `x X', has an argument that can stretch +over several lines; all other commands must have all of their arguments +on the same line as the command, i.e., the arguments may not be +splitted by a line break. + + Empty lines (these are lines containing only space and/or a +comment), can occur everywhere. They are just ignored. + + +File: groff, Node: Argument Units, Next: Document Parts, Prev: Separation, Up: Language Concepts + +8.1.1.2 Argument Units +...................... + +Some commands take integer arguments that are assumed to represent +values in a measurement unit, but the letter for the corresponding +scale indicator is not written with the output command arguments. Most +commands assume the scale indicator `u', the basic unit of the device, +some use `z', the scaled point unit of the device, while others, such +as the color commands, expect plain integers. + + Note that single characters can have the eighth bit set, as can the +names of fonts and special characters. The names of characters and +fonts can be of arbitrary length. A character that is to be printed +will always be in the current font. + + A string argument is always terminated by the next whitespace +character (space, tab, or newline); an embedded `#' character is +regarded as part of the argument, not as the beginning of a comment +command. An integer argument is already terminated by the next +non-digit character, which then is regarded as the first character of +the next argument or command. + + +File: groff, Node: Document Parts, Prev: Argument Units, Up: Language Concepts + +8.1.1.3 Document Parts +...................... + +A correct intermediate output document consists of two parts, the +"prologue" and the "body". + + The task of the prologue is to set the general device parameters +using three exactly specified commands. `gtroff''s prologue is +guaranteed to consist of the following three lines (in that order): + + + x T DEVICE + x res N H V + x init + +with the arguments set as outlined in *Note Device Control Commands::. +Note that the parser for the intermediate output format is able to +swallow additional whitespace and comments as well even in the prologue. + + The body is the main section for processing the document data. +Syntactically, it is a sequence of any commands different from the ones +used in the prologue. Processing is terminated as soon as the first +`x stop' command is encountered; the last line of any `gtroff' +intermediate output always contains such a command. + + Semantically, the body is page oriented. A new page is started by a +`p' command. Positioning, writing, and drawing commands are always +done within the current page, so they cannot occur before the first `p' +command. Absolute positioning (by the `H' and `V' commands) is done +relative to the current page; all other positioning is done relative to +the current location within this page. + + +File: groff, Node: Command Reference, Next: Intermediate Output Examples, Prev: Language Concepts, Up: gtroff Output + +8.1.2 Command Reference +----------------------- + +This section describes all intermediate output commands, both from AT&T +`troff' as well as the `gtroff' extensions. * Menu: -* Example multi-page table:: +* Comment Command:: +* Simple Commands:: +* Graphics Commands:: +* Device Control Commands:: +* Obsolete Command:: -File: groff, Node: Example multi-page table, Next: ms Footnotes, Prev: ms Insertions, Up: ms Body Text +File: groff, Node: Comment Command, Next: Simple Commands, Prev: Command Reference, Up: Command Reference -An example multi-page table -........................... +8.1.2.1 Comment Command +....................... - The following is an example of how to set up a table that may print -across two or more pages. +`#ANYTHING<end of line>' + A comment. Ignore any characters from the `#' character up to the + next newline character. + This command is the only possibility for commenting in the + intermediate output. Each comment can be preceded by arbitrary + syntactical space; every command can be terminated by a comment. - .TS H - allbox expand; - cb | cb . - Text ...of heading... - _ - .TH - .T& - l | l . - ... the rest of the table follows... - .CW - .TE + +File: groff, Node: Simple Commands, Next: Graphics Commands, Prev: Comment Command, Up: Command Reference + +8.1.2.2 Simple Commands +....................... + +The commands in this subsection have a command code consisting of a +single character, taking a fixed number of arguments. Most of them are +commands for positioning and text writing. These commands are smart +about whitespace. Optionally, syntactical space can be inserted +before, after, and between the command letter and its arguments. All +of these commands are stackable, i.e., they can be preceded by other +simple commands or followed by arbitrary other commands on the same +line. A separating syntactical space is only necessary when two +integer arguments would clash or if the preceding argument ends with a +string argument. + +`C XXX<whitespace>' + Print a special character named XXX. The trailing syntactical + space or line break is necessary to allow glyph names of arbitrary + length. The glyph is printed at the current print position; the + glyph's size is read from the font file. The print position is + not changed. + +`c G' + Print glyph G at the current print position;(1) (*note Simple + Commands-Footnote-1::) the glyph's size is read from the font + file. The print position is not changed. + +`f N' + Set font to font number N (a non-negative integer). + +`H N' + Move right to the absolute vertical position N (a non-negative + integer in basic units `u' relative to left edge of current page. + +`h N' + Move N (a non-negative integer) basic units `u' horizontally to + the right. The original UNIX troff manual allows negative values + for N also, but `gtroff' doesn't use this. + +`m COLOR-SCHEME [COMPONENT ...]' + Set the color for text (glyphs), line drawing, and the outline of + graphic objects using different color schemes; the analoguous + command for the filling color of graphic objects is `DF'. The + color components are specified as integer arguments between 0 and + 65536. The number of color components and their meaning vary for + the different color schemes. These commands are generated by + `gtroff''s escape sequence `\m'. No position changing. These + commands are a `gtroff' extension. + + `mc CYAN MAGENTA YELLOW' + Set color using the CMY color scheme, having the 3 color + components CYAN, MAGENTA, and YELLOW. + + `md' + Set color to the default color value (black in most cases). + No component arguments. + + `mg GRAY' + Set color to the shade of gray given by the argument, an + integer between 0 (black) and 65536 (white). + + `mk CYAN MAGENTA YELLOW BLACK' + Set color using the CMYK color scheme, having the 4 color + components CYAN, MAGENTA, YELLOW, and BLACK. + + `mr RED GREEN BLUE' + Set color using the RGB color scheme, having the 3 color + components RED, GREEN, and BLUE. + +`N N' + Print glyph with index N (a non-negative integer) of the current + font. This command is a `gtroff' extension. + +`n B A' + Inform the device about a line break, but no positioning is done by + this command. In AT&T `troff', the integer arguments B and A + informed about the space before and after the current line to make + the intermediate output more human readable without performing any + action. In `groff', they are just ignored, but they must be + provided for compatibility reasons. + +`p N' + Begin a new page in the outprint. The page number is set to N. + This page is completely independent of pages formerly processed + even if those have the same page number. The vertical position on + the outprint is automatically set to 0. All positioning, writing, + and drawing is always done relative to a page, so a `p' command + must be issued before any of these commands. + +`s N' + Set point size to N scaled points (this is unit `z'). AT&T + `troff' used the unit points (`p') instead. *Note Output Language + Compatibility::. + +`t XXX<whitespace>' +`t XXX DUMMY-ARG<whitespace>' + Print a word, i.e., a sequence of characters XXX representing + output glyphs which names are single characters, terminated by a + space character or a line break; an optional second integer + argument is ignored (this allows the formatter to generate an even + number of arguments). The first glyph should be printed at the + current position, the current horizontal position should then be + increased by the width of the first glyph, and so on for each + glyph. The widths of the glyphs are read from the font file, + scaled for the current point size, and rounded to a multiple of + the horizontal resolution. Special characters cannot be printed + using this command (use the `C' command for special characters). + This command is a `gtroff' extension; it is only used for devices + whose `DESC' file contains the `tcommand' keyword (*note DESC File + Format::). + +`u N XXX<whitespace>' + Print word with track kerning. This is the same as the `t' + command except that after printing each glyph, the current + horizontal position is increased by the sum of the width of that + glyph and N (an integer in basic units `u'). This command is a + `gtroff' extension; it is only used for devices whose `DESC' file + contains the `tcommand' keyword (*note DESC File Format::). + +`V N' + Move down to the absolute vertical position N (a non-negative + integer in basic units `u') relative to upper edge of current page. + +`v N' + Move N basic units `u' down (N is a non-negative integer). The + original UNIX troff manual allows negative values for N also, but + `gtroff' doesn't use this. + +`w' + Informs about a paddable white space to increase readability. The + spacing itself must be performed explicitly by a move command. -File: groff, Node: ms Footnotes, Prev: Example multi-page table, Up: ms Body Text +File: groff, Node: Simple Commands-Footnotes, Up: Simple Commands + + (1) `c' is actually a misnomer since it outputs a glyph. -Footnotes -......... + +File: groff, Node: Graphics Commands, Next: Device Control Commands, Prev: Simple Commands, Up: Command Reference + +8.1.2.3 Graphics Commands +......................... + +Each graphics or drawing command in the intermediate output starts with +the letter `D', followed by one or two characters that specify a +subcommand; this is followed by a fixed or variable number of integer +arguments that are separated by a single space character. A `D' +command may not be followed by another command on the same line (apart +from a comment), so each `D' command is terminated by a syntactical +line break. + + `gtroff' output follows the classical spacing rules (no space +between command and subcommand, all arguments are preceded by a single +space character), but the parser allows optional space between the +command letters and makes the space before the first argument optional. +As usual, each space can be any sequence of tab and space characters. + + Some graphics commands can take a variable number of arguments. In +this case, they are integers representing a size measured in basic +units `u'. The arguments called H1, H2, ..., HN stand for horizontal +distances where positive means right, negative left. The arguments +called V1, V2, ..., VN stand for vertical distances where positive +means down, negative up. All these distances are offsets relative to +the current location. + + Each graphics command directly corresponds to a similar `gtroff' +`\D' escape sequence. *Note Drawing Requests::. + + Unknown `D' commands are assumed to be device-specific. Its +arguments are parsed as strings; the whole information is then sent to +the postprocessor. + + In the following command reference, the syntax element <line +break> means a syntactical line break as defined above. + +`D~ H1 V1 H2 V2 ... HN VN<line break>' + Draw B-spline from current position to offset (H1,V1), then to + offset (H2,V2), if given, etc. up to (HN,VN). This command takes + a variable number of argument pairs; the current position is moved + to the terminal point of the drawn curve. + +`Da H1 V1 H2 V2<line break>' + Draw arc from current position to (H1,V1)+(H2,V2) with center at + (H1,V1); then move the current position to the final point of the + arc. + +`DC D<line break>' +`DC D DUMMY-ARG<line break>' + Draw a solid circle using the current fill color with diameter D + (integer in basic units `u') with leftmost point at the current + position; then move the current position to the rightmost point of + the circle. An optional second integer argument is ignored (this + allows the formatter to generate an even number of arguments). + This command is a `gtroff' extension. + +`Dc D<line break>' + Draw circle line with diameter D (integer in basic units `u') with + leftmost point at the current position; then move the current + position to the rightmost point of the circle. + +`DE H V<line break>' + Draw a solid ellipse in the current fill color with a horizontal + diameter of H and a vertical diameter of V (both integers in basic + units `u') with the leftmost point at the current position; then + move to the rightmost point of the ellipse. This command is a + `gtroff' extension. + +`De H V<line break>' + Draw an outlined ellipse with a horizontal diameter of H and a + vertical diameter of V (both integers in basic units `u') with the + leftmost point at current position; then move to the rightmost + point of the ellipse. + +`DF COLOR-SCHEME [COMPONENT ...]<line break>' + Set fill color for solid drawing objects using different color + schemes; the analoguous command for setting the color of text, line + graphics, and the outline of graphic objects is `m'. The color + components are specified as integer arguments between 0 and 65536. + The number of color components and their meaning vary for the + different color schemes. These commands are generated by + `gtroff''s escape sequences `\D'F ...'' and `\M' (with no other + corresponding graphics commands). No position changing. This + command is a `gtroff' extension. + + `DFc CYAN MAGENTA YELLOW<line break>' + Set fill color for solid drawing objects using the CMY color + scheme, having the 3 color components CYAN, MAGENTA, and + YELLOW. + + `DFd<line break>' + Set fill color for solid drawing objects to the default fill + color value (black in most cases). No component arguments. + + `DFg GRAY<line break>' + Set fill color for solid drawing objects to the shade of gray + given by the argument, an integer between 0 (black) and 65536 + (white). + + `DFk CYAN MAGENTA YELLOW BLACK<line break>' + Set fill color for solid drawing objects using the CMYK color + scheme, having the 4 color components CYAN, MAGENTA, YELLOW, + and BLACK. + + `DFr RED GREEN BLUE<line break>' + Set fill color for solid drawing objects using the RGB color + scheme, having the 3 color components RED, GREEN, and BLUE. + +`Df N<line break>' + The argument N must be an integer in the range -32767 to 32767. + + 0 <= N <= 1000 + Set the color for filling solid drawing objects to a shade of + gray, where 0 corresponds to solid white, 1000 (the default) + to solid black, and values in between to intermediate shades + of gray; this is obsoleted by command `DFg'. + + N < 0 or N > 1000 + Set the filling color to the color that is currently being + used for the text and the outline, see command `m'. For + example, the command sequence + + + mg 0 0 65536 + Df -1 + + sets all colors to blue. + + No position changing. This command is a `gtroff' extension. + +`Dl H V<line break>' + Draw line from current position to offset (H,V) (integers in basic + units `u'); then set current position to the end of the drawn line. + +`Dp H1 V1 H2 V2 ... HN VN<line break>' + Draw a polygon line from current position to offset (H1,V1), from + there to offset (H2,V2), etc. up to offset (HN,VN), and from there + back to the starting position. For historical reasons, the + position is changed by adding the sum of all arguments with odd + index to the actual horizontal position and the even ones to the + vertical position. Although this doesn't make sense it is kept + for compatibility. This command is a `gtroff' extension. + +`Dp H1 V1 H2 V2 ... HN VN<line break>' + Draw a solid polygon in the current fill color rather than an + outlined polygon, using the same arguments and positioning as the + corresponding `Dp' command. This command is a `gtroff' extension. + +`Dt N<line break>' + Set the current line thickness to N (an integer in basic units + `u') if N>0; if N=0 select the smallest available line thickness; + if N<0 set the line thickness proportional to the point size (this + is the default before the first `Dt' command was specified). For + historical reasons, the horizontal position is changed by adding + the argument to the actual horizontal position, while the vertical + position is not changed. Although this doesn't make sense it is + kept for compatibility. This command is a `gtroff' extension. + + +File: groff, Node: Device Control Commands, Next: Obsolete Command, Prev: Graphics Commands, Up: Command Reference - The `ms' macro package has a flexible footnote system. You can -specify either numbered footnotes or symbolic footnotes (that is, using -a marker such as a dagger symbol). +8.1.2.4 Device Control Commands +............................... - - String: \*[*] - Specifies the location of a numbered footnote marker in the text. +Each device control command starts with the letter `x', followed by a +space character (optional or arbitrary space or tab in `gtroff') and a +subcommand letter or word; each argument (if any) must be preceded by a +syntactical space. All `x' commands are terminated by a syntactical +line break; no device control command can be followed by another +command on the same line (except a comment). - - Macro: .FS - - Macro: .FE - Specifies the text of the footnote. The default action is to - create a numbered footnote; you can create a symbolic footnote by - specifying a "mark" glyph (such as `\[dg]' for the dagger glyph) - in the body text and as an argument to the `FS' macro, followed by - the text of the footnote and the `FE' macro. + The subcommand is basically a single letter, but to increase +readability, it can be written as a word, i.e., an arbitrary sequence +of characters terminated by the next tab, space, or newline character. +All characters of the subcommand word but the first are simply ignored. +For example, `gtroff' outputs the initialization command `x i' as +`x init' and the resolution command `x r' as `x res'. - You can control how `groff' prints footnote numbers by changing the -value of the `FF' register. *Note ms Document Control Registers::. + In the following, the syntax element <line break> means a +syntactical line break (*note Separation::). + +`xF NAME<line break>' + The `F' stands for FILENAME. + + Use NAME as the intended name for the current file in error + reports. This is useful for remembering the original file name + when `gtroff' uses an internal piping mechanism. The input file is + not changed by this command. This command is a `gtroff' extension. + +`xf N S<line break>' + The `f' stands for FONT. + + Mount font position N (a non-negative integer) with font named S + (a text word). *Note Font Positions::. + +`xH N<line break>' + The `H' stands for HEIGHT. + + Set glyph height to N (a positive integer in scaled points `z'). + AT&T `troff' uses the unit points (`p') instead. *Note Output + Language Compatibility::. + +`xi<line break>' + The `i' stands for INIT. + + Initialize device. This is the third command of the prologue. + +`xp<line break>' + The `p' stands for PAUSE. + + Parsed but ignored. The original UNIX troff manual writes + + pause device, can be restarted + +`xr N H V<line break>' + The `r' stands for RESOLUTION. + + Resolution is N, while H is the minimal horizontal motion, and V + the minimal vertical motion possible with this device; all + arguments are positive integers in basic units `u' per inch. This + is the second command of the prologue. + +`xS N<line break>' + The `S' stands for SLANT. + + Set slant to N (an integer in basic units `u'). + +`xs<line break>' + The `s' stands for STOP. + + Terminates the processing of the current file; issued as the last + command of any intermediate troff output. + +`xt<line break>' + The `t' stands for TRAILER. + + Generate trailer information, if any. In GTROFF, this is actually + just ignored. + +`xT XXX<line break>' + The `T' stands for TYPESETTER. + + Set name of device to word XXX, a sequence of characters ended by + the next white space character. The possible device names coincide + with those from the `groff' `-T' option. This is the first + command of the prologue. + +`xu N<line break>' + The `u' stands for UNDERLINE. + + Configure underlining of spaces. If N is 1, start underlining of + spaces; if N is 0, stop underlining of spaces. This is needed for + the `cu' request in nroff mode and is ignored otherwise. This + command is a `gtroff' extension. + +`xX ANYTHING<line break>' + The `x' stands for X-ESCAPE. + + Send string ANYTHING uninterpreted to the device. If the line + following this command starts with a `+' character this line is + interpreted as a continuation line in the following sense. The + `+' is ignored, but a newline character is sent instead to the + device, the rest of the line is sent uninterpreted. The same + applies to all following lines until the first character of a line + is not a `+' character. This command is generated by the `gtroff' + escape sequence `\X'. The line-continuing feature is a `gtroff' + extension. + + +File: groff, Node: Obsolete Command, Prev: Device Control Commands, Up: Command Reference + +8.1.2.5 Obsolete Command +........................ + +In AT&T `troff' output, the writing of a single glyph is mostly done by +a very strange command that combines a horizontal move and a single +character giving the glyph name. It doesn't have a command code, but +is represented by a 3-character argument consisting of exactly 2 digits +and a character. + +DDG + Move right DD (exactly two decimal digits) basic units `u', then + print glyph G (represented as a single character). + + In `gtroff', arbitrary syntactical space around and within this + command is allowed to be added. Only when a preceding command on + the same line ends with an argument of variable length a + separating space is obligatory. In AT&T `troff', large clusters + of these and other commands are used, mostly without spaces; this + made such output almost unreadable. + + For modern high-resolution devices, this command does not make sense +because the width of the glyphs can become much larger than two decimal +digits. In `gtroff', this is only used for the devices `X75', +`X75-12', `X100', and `X100-12'. For other devices, the commands `t' +and `u' provide a better functionality. -File: groff, Node: ms Page Layout, Next: Differences from AT&T ms, Prev: ms Body Text, Up: ms +File: groff, Node: Intermediate Output Examples, Next: Output Language Compatibility, Prev: Command Reference, Up: gtroff Output + +8.1.3 Intermediate Output Examples +---------------------------------- + +This section presents the intermediate output generated from the same +input for three different devices. The input is the sentence `hell +world' fed into `gtroff' on the command line. + +High-resolution device `ps' + This is the standard output of `gtroff' if no `-T' option is given. + + shell> echo "hell world" | groff -Z -T ps + + x T ps + x res 72000 1 1 + x init + p1 + x font 5 TR + f5 + s10000 + V12000 + H72000 + thell + wh2500 + tw + H96620 + torld + n12000 0 + x trailer + V792000 + x stop + + This output can be fed into `grops' to get its representation as a + PostScript file. + +Low-resolution device `latin1' + This is similar to the high-resolution device except that the + positioning is done at a minor scale. Some comments (lines + starting with `#') were added for clarification; they were not + generated by the formatter. + + shell> echo "hell world" | groff -Z -T latin1 + + # prologue + x T latin1 + x res 240 24 40 + x init + # begin a new page + p1 + # font setup + x font 1 R + f1 + s10 + # initial positioning on the page + V40 + H0 + # write text `hell' + thell + # inform about space, and issue a horizontal jump + wh24 + # write text `world' + tworld + # announce line break, but do nothing because ... + n40 0 + # ... the end of the document has been reached + x trailer + V2640 + x stop + + This output can be fed into `grotty' to get a formatted text + document. + +AT&T `troff' output + Since a computer monitor has a very low resolution compared to + modern printers the intermediate output for the X Window devices + can use the jump-and-write command with its 2-digit displacements. + + shell> echo "hell world" | groff -Z -T X100 + + x T X100 + x res 100 1 1 + x init + p1 + x font 5 TR + f5 + s10 + V16 + H100 + # write text with jump-and-write commands + ch07e07l03lw06w11o07r05l03dh7 + n16 0 + x trailer + V1100 + x stop + + This output can be fed into `xditview' or `gxditview' for + displaying in X. + + Due to the obsolete jump-and-write command, the text clusters in + the AT&T `troff' output are almost unreadable. + + +File: groff, Node: Output Language Compatibility, Prev: Intermediate Output Examples, Up: gtroff Output + +8.1.4 Output Language Compatibility +----------------------------------- + +The intermediate output language of AT&T `troff' was first documented +in the UNIX troff manual, with later additions documented in `A +Typesetter-indenpendent TROFF', written by Brian Kernighan. + + The `gtroff' intermediate output format is compatible with this +specification except for the following features. -Page layout ------------ + * The classical quasi device independence is not yet implemented. - The default output from the `ms' macros provides a minimalist page -layout: it prints a single column, with the page number centered at the -top of each page. It prints no footers. + * The old hardware was very different from what we use today. So the + `groff' devices are also fundamentally different from the ones in + AT&T `troff'. For example, the AT&T PostScript device is called + `post' and has a resolution of only 720 units per inch, suitable + for printers 20 years ago, while `groff''s `ps' device has a + resolution of 72000 units per inch. Maybe, by implementing some + rescaling mechanism similar to the classical quasi device + independence, `groff' could emulate AT&T's `post' device. - You can change the layout by setting the proper number registers and -strings. + * The B-spline command `D~' is correctly handled by the intermediate + output parser, but the drawing routines aren't implemented in some + of the postprocessor programs. + + * The argument of the commands `s' and `x H' has the implicit unit + scaled point `z' in `gtroff', while AT&T `troff' has point (`p'). + This isn't an incompatibility but a compatible extension, for both + units coincide for all devices without a `sizescale' parameter in + the `DESC' file, including all postprocessors from AT&T and + `groff''s text devices. The few `groff' devices with a + `sizescale' parameter either do not exist for AT&T `troff', have a + different name, or seem to have a different resolution. So + conflicts are very unlikely. + + * The position changing after the commands `Dp', `DP', and `Dt' is + illogical, but as old versions of `gtroff' used this feature it is + kept for compatibility reasons. + + + +File: groff, Node: Font Files, Prev: gtroff Output, Up: File formats + +8.2 Font Files +============== + +The `gtroff' font format is roughly a superset of the `ditroff' font +format (as used in later versions of AT&T `troff' and its descendants). +Unlike the `ditroff' font format, there is no associated binary +format; all files are text files.(1) (*note Font Files-Footnote-1::) +The font files for device NAME are stored in a directory `devNAME'. +There are two types of file: a device description file called `DESC' +and for each font F a font file called `F'. * Menu: -* ms Headers and Footers:: -* ms Margins:: -* ms Multiple Columns:: -* ms TOC:: -* ms Strings and Special Characters:: +* DESC File Format:: +* Font File Format:: -File: groff, Node: ms Headers and Footers, Next: ms Margins, Prev: ms Page Layout, Up: ms Page Layout +File: groff, Node: Font Files-Footnotes, Up: Font Files -Headers and footers -................... + (1) Plan 9 `troff' has also abandoned the binary format. - For documents that do not distinguish between odd and even pages, -set the following strings: + +File: groff, Node: DESC File Format, Next: Font File Format, Prev: Font Files, Up: Font Files + +8.2.1 `DESC' File Format +------------------------ + +The `DESC' file can contain the following types of line. Except for +the `charset' keyword which must comes last (if at all), the order of +the lines is not important. + +`res N' + There are N machine units per inch. + +`hor N' + The horizontal resolution is N machine units. All horizontal + quantities are rounded to be multiples of this value. + +`vert N' + The vertical resolution is N machine units. All vertical + quantities are rounded to be multiples of this value. + +`sizescale N' + The scale factor for point sizes. By default this has a value + of 1. One scaled point is equal to one point/N. The arguments to + the `unitwidth' and `sizes' commands are given in scaled points. + *Note Fractional Type Sizes::, for more information. + +`unitwidth N' + Quantities in the font files are given in machine units for fonts + whose point size is N scaled points. + +`prepro PROGRAM' + Call PROGRAM as a preprocessor. Currently, this keyword is used + by `groff' with option `-Thtml' only. + +`postpro PROGRAM' + Call PROGRAM as a postprocessor. For example, the line + + + postpro grodvi + + in the file `devdvi/DESC' makes `groff' call `grodvi' if option + `-Tdvi' is given (and `-Z' isn't used). + +`tcommand' + This means that the postprocessor can handle the `t' and `u' + intermediate output commands. + +`sizes S1 S2 ... SN 0' + This means that the device has fonts at S1, S2, ... SN scaled + points. The list of sizes must be terminated by 0 (this is digit + zero). Each SI can also be a range of sizes M-N. The list can + extend over more than one line. + +`styles S1 S2 ... SM' + The first M font positions are associated with styles S1 ... SM. + +`fonts N F1 F2 F3 ... FN' + Fonts F1 ... FN are mounted in the font positions M+1, ..., M+N + where M is the number of styles. This command may extend over + more than one line. A font name of 0 means no font is mounted on + the corresponding font position. + +`family FAM' + The default font family is FAM. + +`use_charnames_in_special' + This command indicates that `gtroff' should encode special + characters inside special commands. Currently, this is only used + by the HTML output device. *Note Postprocessor Access::. + +`papersize STRING ...' + Select a paper size. Valid values for STRING are the ISO paper + types `A0'-`A7', `B0'-`B7', `C0'-`C7', `D0'-`D7', `DL', and the US + paper types `letter', `legal', `tabloid', `ledger', `statement', + `executive', `com10', and `monarch'. Case is not significant for + STRING if it holds predefined paper types. Alternatively, STRING + can be a file name (e.g. `/etc/papersize'); if the file can be + opened, `groff' reads the first line and tests for the above paper + sizes. Finally, STRING can be a custom paper size in the format + `LENGTH,WIDTH' (no spaces before and after the comma). Both + LENGTH and WIDTH must have a unit appended; valid values are `i' + for inches, `C' for centimeters, `p' for points, and `P' for + picas. Example: `12c,235p'. An argument which starts with a + digit is always treated as a custom paper format. `papersize' + sets both the vertical and horizontal dimension of the output + medium. + + More than one argument can be specified; `groff' scans from left to + right and uses the first valid paper specification. + +`pass_filenames' + Tell `gtroff' to emit the name of the source file currently being + processed. This is achieved by the intermediate output command + `F'. Currently, this is only used by the HTML output device. + +`print PROGRAM' + Use PROGRAM as a spooler program for printing. If omitted, the + `-l' and `-L' options of `groff' are ignored. + +`charset' + This line and everything following in the file are ignored. It is + allowed for the sake of backwards compatibility. + + The `res', `unitwidth', `fonts', and `sizes' lines are mandatory. +Other commands are ignored by `gtroff' but may be used by +postprocessors to store arbitrary information about the device in the +`DESC' file. + + Here a list of obsolete keywords which are recognized by `groff' but +completely ignored: `spare1', `spare2', `biggestfont'. - - String: \*[LH] - - String: \*[CH] - - String: \*[RH] - Sets the left, center, and right headers. + +File: groff, Node: Font File Format, Prev: DESC File Format, Up: Font Files + +8.2.2 Font File Format +---------------------- + +A "font file", also (and probably better) called a "font description +file", has two sections. The first section is a sequence of lines each +containing a sequence of blank delimited words; the first word in the +line is a key, and subsequent words give a value for that key. + +`name F' + The name of the font is F. + +`spacewidth N' + The normal width of a space is N. + +`slant N' + The glyphs of the font have a slant of N degrees. (Positive means + forward.) + +`ligatures LIG1 LIG2 ... LIGN [0]' + Glyphs LIG1, LIG2, ..., LIGN are ligatures; possible ligatures are + `ff', `fi', `fl', `ffi' and `ffl'. For backwards compatibility, + the list of ligatures may be terminated with a 0. The list of + ligatures may not extend over more than one line. + +`special' + The font is "special"; this means that when a glyph is requested + that is not present in the current font, it is searched for in any + special fonts that are mounted. + + Other commands are ignored by `gtroff' but may be used by +postprocessors to store arbitrary information about the font in the font +file. + + The first section can contain comments which start with the `#' +character and extend to the end of a line. + + The second section contains one or two subsections. It must contain +a `charset' subsection and it may also contain a `kernpairs' +subsection. These subsections can appear in any order. Each +subsection starts with a word on a line by itself. + + The word `charset' starts the character set subsection.(1) (*note +Font File Format-Footnote-1::) The `charset' line is followed by a +sequence of lines. Each line gives information for one glyph. A line +comprises a number of fields separated by blanks or tabs. The format is + + NAME METRICS TYPE CODE [ENTITY-NAME] [`--' COMMENT] + +NAME identifies the glyph name(2) (*note Font File Format-Footnote-2::): +If NAME is a single character C then it corresponds to the `gtroff' +input character C; if it is of the form `\C' where C is a single +character, then it corresponds to the special character `\[C]'; +otherwise it corresponds to the special character `\[NAME]'. If it is +exactly two characters XX it can be entered as `\(XX'. Note that +single-letter special characters can't be accessed as `\C'; the only +exception is `\-' which is identical to `\[-]'. + + `gtroff' supports 8-bit input characters; however some utilities +have difficulties with eight-bit characters. For this reason, there is +a convention that the entity name `charN' is equivalent to the single +input character whose code is N. For example, `char163' would be +equivalent to the character with code 163 which is the pounds sterling +sign in the ISO Latin-1 character set. You shouldn't use `charN' +entities in font description files since they are related to input, not +output. Otherwise, you get hard-coded connections between input and +output encoding which prevents use of different (input) character sets. + + The name `---' is special and indicates that the glyph is unnamed; +such glyphs can only be used by means of the `\N' escape sequence in +`gtroff'. + + The TYPE field gives the glyph type: + +`1' + the glyph has a descender, for example, `p'; + +`2' + the glyph has an ascender, for example, `b'; + +`3' + the glyph has both an ascender and a descender, for example, `('. + + The CODE field gives the code which the postprocessor uses to print +the glyph. The glyph can also be input to `gtroff' using this code by +means of the `\N' escape sequence. CODE can be any integer. If it +starts with `0' it is interpreted as octal; if it starts with `0x' or +`0X' it is interpreted as hexadecimal. Note, however, that the `\N' +escape sequence only accepts a decimal integer. + + The ENTITY-NAME field gives an ASCII string identifying the glyph +which the postprocessor uses to print the `gtroff' glyph NAME. This +field is optional and has been introduced so that the HTML device +driver can encode its character set. For example, the glyph `\[Po]' is +represented as `£' in HTML 4.0. + + Anything on the line after the ENTITY-NAME field resp. after `--' +will be ignored. + + The METRICS field has the form: + + WIDTH[`,'HEIGHT[`,'DEPTH[`,'ITALIC-CORRECTION + [`,'LEFT-ITALIC-CORRECTION[`,'SUBSCRIPT-CORRECTION]]]]] + +There must not be any spaces between these subfields (it has been split +here into two lines for better legibility only). Missing subfields are +assumed to be 0. The subfields are all decimal integers. Since there +is no associated binary format, these values are not required to fit +into a variable of type `char' as they are in `ditroff'. The WIDTH +subfield gives the width of the glyph. The HEIGHT subfield gives the +height of the glyph (upwards is positive); if a glyph does not extend +above the baseline, it should be given a zero height, rather than a +negative height. The DEPTH subfield gives the depth of the glyph, that +is, the distance from the baseline to the lowest point below the +baseline to which the glyph extends (downwards is positive); if a glyph +does not extend below the baseline, it should be given a zero depth, +rather than a negative depth. The ITALIC-CORRECTION subfield gives the +amount of space that should be added after the glyph when it is +immediately to be followed by a glyph from a roman font. The +LEFT-ITALIC-CORRECTION subfield gives the amount of space that should +be added before the glyph when it is immediately to be preceded by a +glyph from a roman font. The SUBSCRIPT-CORRECTION gives the amount of +space that should be added after a glyph before adding a subscript. +This should be less than the italic correction. + + A line in the `charset' section can also have the format + + + NAME " + +This indicates that NAME is just another name for the glyph mentioned +in the preceding line. + + The word `kernpairs' starts the kernpairs section. This contains a +sequence of lines of the form: + + + C1 C2 N + +This means that when glyph C1 appears next to glyph C2 the space +between them should be increased by N. Most entries in the kernpairs +section have a negative value for N. - - String: \*[LF] - - String: \*[CF] - - String: \*[RF] - Sets the left, center, and right footers. + +File: groff, Node: Font File Format-Footnotes, Up: Font File Format + (1) This keyword is misnamed since it starts a list of ordered +glyphs, not characters. - For documents that need different information printed in the even -and odd pages, use the following macros: + (2) The distinction between input, characters, and output, glyphs, +is not clearly separated in the terminology of `groff'; for example, +the `char' request should be called `glyph' since it defines an output +entity. - - Macro: .OH 'left'center'right' - - Macro: .EH 'left'center'right' - - Macro: .OF 'left'center'right' - - Macro: .EF 'left'center'right' - The `OH' and `EH' macros define headers for the odd and even pages; - the `OF' and `EF' macros define footers for the odd and even pages. - This is more flexible than defining the individual strings. + +File: groff, Node: Installation, Next: Copying This Manual, Prev: File formats, Up: Top - You can replace the quote (`'') marks with any character not - appearing in the header or footer text. +9 Installation +************** -File: groff, Node: ms Margins, Next: ms Multiple Columns, Prev: ms Headers and Footers, Up: ms Page Layout +File: groff, Node: Copying This Manual, Next: Request Index, Prev: Installation, Up: Top -Margins -....... +Appendix A Copying This Manual +****************************** - You control margins using a set of number registers. *Note ms -Document Control Registers::, for details. +* Menu: + +* GNU Free Documentation License:: License for copying this manual. -File: groff, Node: ms Multiple Columns, Next: ms TOC, Prev: ms Margins, Up: ms Page Layout +File: groff, Node: GNU Free Documentation License, Up: Copying This Manual + +A.1 GNU Free Documentation License +================================== + + Version 1.2, November 2002 + + Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. + We recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it + can be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You + accept the license if you copy, modify or distribute the work in a + way requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in + the notice that says that the Document is released under this + License. If a section does not fit the above definition of + Secondary then it is not allowed to be designated as Invariant. + The Document may contain zero Invariant Sections. If the Document + does not identify any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images + composed of pixels) generic paint programs or (for drawings) some + widely available drawing editor, and that is suitable for input to + text formatters or for automatic translation to a variety of + formats suitable for input to text formatters. A copy made in an + otherwise Transparent file format whose markup, or absence of + markup, has been arranged to thwart or discourage subsequent + modification by readers is not Transparent. An image format is + not Transparent if used for any substantial amount of text. A + copy that is not "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and + standard-conforming simple HTML, PostScript or PDF designed for + human modification. Examples of transparent image formats include + PNG, XCF and JPG. Opaque formats include proprietary formats that + can be read and edited only by proprietary word processors, SGML or + XML for which the DTD and/or processing tools are not generally + available, and the machine-generated HTML, PostScript or PDF + produced by some word processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow + the conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the + title equally prominent and visible. You may add other material + on the covers in addition. Copying with changes limited to the + covers, as long as they preserve the title of the Document and + satisfy these conditions, can be treated as verbatim copying in + other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a + machine-readable Transparent copy along with each Opaque copy, or + state in or with each Opaque copy a computer-network location from + which the general network-using public has access to download + using public-standard network protocols a complete Transparent + copy of the Document, free of added material. If you use the + latter option, you must take reasonably prudent steps, when you + begin distribution of Opaque copies in quantity, to ensure that + this Transparent copy will remain thus accessible at the stated + location until at least one year after the last time you + distribute an Opaque copy (directly or through your agents or + retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of + copies, to give them a chance to provide you with an updated + version of the Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with + the Modified Version filling the role of the Document, thus + licensing distribution and modification of the Modified Version to + whoever possesses a copy of it. In addition, you must do these + things in the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of + previous versions (which should, if there were any, be listed + in the History section of the Document). You may use the + same title as a previous version if the original publisher of + that version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on + the Title Page. If there is no section Entitled "History" in + the Document, create one stating the title, year, authors, + and publisher of the Document as given on its Title Page, + then add an item describing the Modified Version as stated in + the previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in + the "History" section. You may omit a network location for a + work that was published at least four years before the + Document itself, or if the original publisher of the version + it refers to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the + section all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section + titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option + designate some or all of these sections as invariant. To do this, + add their titles to the list of Invariant Sections in the Modified + Version's license notice. These titles must be distinct from any + other section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end + of the list of Cover Texts in the Modified Version. Only one + passage of Front-Cover Text and one of Back-Cover Text may be + added by (or through arrangements made by) any one entity. If the + Document already includes a cover text for the same cover, + previously added by you or by arrangement made by the same entity + you are acting on behalf of, you may not add another; but you may + replace the old one, on explicit permission from the previous + publisher that added the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination + all of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the + documents in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow + this License in all other respects regarding verbatim copying of + that document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of + a storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided for under this License. Any other + attempt to copy, modify, sublicense or distribute the Document is + void, and will automatically terminate your rights under this + License. However, parties who have received copies, or rights, + from you under this License will not have their licenses + terminated so long as such parties remain in full compliance. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + `http://www.gnu.org/copyleft/'. + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If + the Document does not specify a version number of this License, + you may choose any version ever published (not as a draft) by the + Free Software Foundation. + +A.1.1 ADDENDUM: How to use this License for your documents +---------------------------------------------------------- + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.2 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, to +permit their use in free software. -Multiple columns -................ + +File: groff, Node: Request Index, Next: Escape Index, Prev: Copying This Manual, Up: Top - The `ms' macros can set text in as many columns as will reasonably -fit on the page. The following macros are available; all of them force -a page break if a multi-column mode is already set. However, if the -current mode is single-column, starting a multi-column mode does *not* -force a page break. +Appendix B Request Index +************************ - - Macro: .1C - Single-column mode. +Requests appear without the leading control character (normally either +`.' or `''). - - Macro: .2C - Two-column mode. + +* Menu: - - Macro: .MC [width [gutter]] - Multi-column mode. If you specify no arguments, it is equivalent - to the `2C' macro. Otherwise, WIDTH is the width of each column - and GUTTER is the space between columns. The `MINGW' number - register controls the default gutter width. +* ab: Debugging. (line 40) +* ad: Manipulating Filling and Adjusting. + (line 52) +* af: Assigning Formats. (line 13) +* aln: Setting Registers. (line 79) +* als: Strings. (line 224) +* am: Writing Macros. (line 107) +* am1: Writing Macros. (line 108) +* ami: Writing Macros. (line 109) +* ami1: Writing Macros. (line 110) +* as: Strings. (line 170) +* as1: Strings. (line 171) +* asciify: Diversions. (line 195) +* backtrace: Debugging. (line 94) +* bd: Artificial Fonts. (line 96) +* blm: Blank Line Traps. (line 7) +* box: Diversions. (line 25) +* boxa: Diversions. (line 26) +* bp: Page Control. (line 7) +* br: Manipulating Filling and Adjusting. + (line 12) +* break: while. (line 73) +* brp: Manipulating Filling and Adjusting. + (line 112) +* c2: Character Translations. + (line 16) +* cc: Character Translations. + (line 10) +* ce: Manipulating Filling and Adjusting. + (line 189) +* cf: I/O. (line 49) +* cflags: Using Symbols. (line 241) +* ch: Page Location Traps. (line 106) +* char: Using Symbols. (line 281) +* chop: Strings. (line 231) +* close: I/O. (line 230) +* color: Colors. (line 7) +* composite: Using Symbols. (line 197) +* continue: while. (line 77) +* cp: Implementation Differences. + (line 23) +* cs: Artificial Fonts. (line 127) +* cu: Artificial Fonts. (line 87) +* da: Diversions. (line 18) +* de: Writing Macros. (line 10) +* de1: Writing Macros. (line 11) +* defcolor: Colors. (line 21) +* dei: Writing Macros. (line 12) +* dei1: Writing Macros. (line 13) +* di: Diversions. (line 17) +* do: Implementation Differences. + (line 24) +* ds: Strings. (line 11) +* ds1: Strings. (line 12) +* dt: Diversion Traps. (line 7) +* ec: Character Translations. + (line 47) +* ecr: Character Translations. + (line 59) +* ecs: Character Translations. + (line 58) +* el: if-else. (line 28) +* em: End-of-input Traps. (line 7) +* eo: Character Translations. + (line 22) +* ev: Environments. (line 38) +* evc: Environments. (line 72) +* ex: Debugging. (line 45) +* fam: Font Families. (line 19) +* fc: Fields. (line 18) +* fchar: Using Symbols. (line 282) +* fcolor: Colors. (line 85) +* fi: Manipulating Filling and Adjusting. + (line 30) +* fl: Debugging. (line 85) +* fp: Font Positions. (line 11) +* fschar: Using Symbols. (line 283) +* fspecial: Special Fonts. (line 18) +* ft <1>: Font Positions. (line 58) +* ft: Changing Fonts. (line 7) +* ftr: Changing Fonts. (line 53) +* gcolor: Colors. (line 51) +* hc: Manipulating Hyphenation. + (line 105) +* hcode: Manipulating Hyphenation. + (line 174) +* hla: Manipulating Hyphenation. + (line 253) +* hlm: Manipulating Hyphenation. + (line 45) +* hpf: Manipulating Hyphenation. + (line 114) +* hpfa: Manipulating Hyphenation. + (line 115) +* hpfcode: Manipulating Hyphenation. + (line 116) +* hw: Manipulating Hyphenation. + (line 61) +* hy: Manipulating Hyphenation. + (line 9) +* hym: Manipulating Hyphenation. + (line 209) +* hys: Manipulating Hyphenation. + (line 224) +* ie: if-else. (line 27) +* if: if-else. (line 10) +* ig: Comments. (line 67) +* in: Line Layout. (line 91) +* it: Input Line Traps. (line 7) +* itc: Input Line Traps. (line 8) +* kern: Ligatures and Kerning. + (line 41) +* lc: Leaders. (line 23) +* length: Strings. (line 204) +* lf: Debugging. (line 10) +* lg: Ligatures and Kerning. + (line 23) +* linetabs: Tabs and Fields. (line 147) +* ll: Line Layout. (line 145) +* ls: Manipulating Spacing. + (line 51) +* lt: Page Layout. (line 60) +* mc: Miscellaneous. (line 76) +* mk: Page Motions. (line 10) +* mso: I/O. (line 41) +* na: Manipulating Filling and Adjusting. + (line 104) +* ne: Page Control. (line 34) +* nf: Manipulating Filling and Adjusting. + (line 41) +* nh: Manipulating Hyphenation. + (line 37) +* nm: Miscellaneous. (line 10) +* nn: Miscellaneous. (line 72) +* nop: if-else. (line 24) +* nr <1>: Auto-increment. (line 11) +* nr: Setting Registers. (line 9) +* nroff: Troff and Nroff Mode. + (line 32) +* ns: Manipulating Spacing. + (line 113) +* nx: I/O. (line 74) +* open: I/O. (line 198) +* opena: I/O. (line 199) +* os: Page Control. (line 55) +* output: Diversions. (line 180) +* pc: Page Layout. (line 89) +* pi: I/O. (line 138) +* pl: Page Layout. (line 10) +* pm: Debugging. (line 64) +* pn: Page Layout. (line 77) +* pnr: Debugging. (line 75) +* po: Line Layout. (line 61) +* ps: Changing Type Sizes. (line 7) +* psbb: Miscellaneous. (line 141) +* pso: I/O. (line 30) +* ptr: Debugging. (line 79) +* pvs: Changing Type Sizes. (line 133) +* rchar: Using Symbols. (line 340) +* rd: I/O. (line 79) +* return: Writing Macros. (line 143) +* rfschar: Using Symbols. (line 341) +* rj: Manipulating Filling and Adjusting. + (line 238) +* rm: Strings. (line 219) +* rn: Strings. (line 216) +* rnn: Setting Registers. (line 75) +* rr: Setting Registers. (line 71) +* rs: Manipulating Spacing. + (line 114) +* rt: Page Motions. (line 11) +* schar: Using Symbols. (line 284) +* shc: Manipulating Hyphenation. + (line 240) +* shift: Parameters. (line 30) +* sizes: Changing Type Sizes. (line 69) +* so: I/O. (line 9) +* sp: Manipulating Spacing. + (line 7) +* special: Special Fonts. (line 17) +* spreadwarn: Debugging. (line 131) +* ss: Manipulating Filling and Adjusting. + (line 134) +* sty: Font Families. (line 61) +* substring: Strings. (line 188) +* sv: Page Control. (line 54) +* sy: I/O. (line 160) +* ta: Tabs and Fields. (line 14) +* tc: Tabs and Fields. (line 139) +* ti: Line Layout. (line 117) +* tkf: Ligatures and Kerning. + (line 60) +* tl: Page Layout. (line 35) +* tm: Debugging. (line 25) +* tm1: Debugging. (line 26) +* tmc: Debugging. (line 27) +* tr: Character Translations. + (line 153) +* trf: I/O. (line 48) +* trin: Character Translations. + (line 154) +* trnt: Character Translations. + (line 245) +* troff: Troff and Nroff Mode. + (line 24) +* uf: Artificial Fonts. (line 91) +* ul: Artificial Fonts. (line 65) +* unformat: Diversions. (line 215) +* vpt: Page Location Traps. (line 17) +* vs: Changing Type Sizes. (line 84) +* warn: Debugging. (line 154) +* warnscale: Debugging. (line 127) +* wh: Page Location Traps. (line 29) +* while: while. (line 10) +* write: I/O. (line 210) +* writec: I/O. (line 211) +* writem: I/O. (line 221) -File: groff, Node: ms TOC, Next: ms Strings and Special Characters, Prev: ms Multiple Columns, Up: ms Page Layout +File: groff, Node: Escape Index, Next: Operator Index, Prev: Request Index, Up: Top -Creating a table of contents -............................ +Appendix C Escape Index +*********************** - The facilities in the `ms' macro package for creating a table of -contents are semi-automated at best. Assuming that you want the table -of contents to consist of the document's headings, you need to repeat -those headings wrapped in `XS' and `XE' macros. +Any escape sequence `\X' with X not in the list below emits a warning, +printing glyph X. - - Macro: .XS [page] - - Macro: .XA [page] - - Macro: .XE - These macros define a table of contents or an individual entry in - the table of contents, depending on their use. The macros are - very simple; they cannot indent a heading based on its level. The - easiest way to work around this is to add tabs to the table of - contents string. The following is an example: + +* Menu: +* \: Using Symbols. (line 139) +* \!: Diversions. (line 133) +* \": Comments. (line 10) +* \#: Comments. (line 50) +* \$: Parameters. (line 19) +* \$*: Parameters. (line 38) +* \$0: Parameters. (line 48) +* \$@: Parameters. (line 39) +* \%: Manipulating Hyphenation. + (line 84) +* \&: Ligatures and Kerning. + (line 102) +* \': Using Symbols. (line 229) +* \): Ligatures and Kerning. + (line 131) +* \*: Strings. (line 13) +* \,: Ligatures and Kerning. + (line 92) +* \-: Using Symbols. (line 238) +* \.: Character Translations. + (line 126) +* \/: Ligatures and Kerning. + (line 80) +* \0: Page Motions. (line 139) +* \<colon>: Manipulating Hyphenation. + (line 85) +* \<RET>: Line Control. (line 43) +* \<SP>: Page Motions. (line 123) +* \?: Diversions. (line 134) +* \\: Character Translations. + (line 68) +* \^: Page Motions. (line 135) +* \`: Using Symbols. (line 234) +* \a: Leaders. (line 18) +* \A: Identifiers. (line 55) +* \b: Drawing Requests. (line 223) +* \B: Expressions. (line 65) +* \C: Using Symbols. (line 191) +* \c: Line Control. (line 44) +* \D: Drawing Requests. (line 71) +* \d: Page Motions. (line 109) +* \E: Character Translations. + (line 70) +* \e: Character Translations. + (line 69) +* \f: Font Positions. (line 59) +* \F: Font Families. (line 21) +* \f: Changing Fonts. (line 8) +* \g: Assigning Formats. (line 75) +* \h: Page Motions. (line 112) +* \H: Artificial Fonts. (line 13) +* \k: Page Motions. (line 203) +* \L: Drawing Requests. (line 50) +* \l: Drawing Requests. (line 16) +* \M: Colors. (line 86) +* \m: Colors. (line 52) +* \N: Using Symbols. (line 207) +* \n <1>: Auto-increment. (line 19) +* \n: Interpolating Registers. + (line 9) +* \O: Suppressing output. (line 7) +* \o: Page Motions. (line 218) +* \p: Manipulating Filling and Adjusting. + (line 113) +* \r: Page Motions. (line 103) +* \R: Setting Registers. (line 10) +* \s: Changing Type Sizes. (line 10) +* \S: Artificial Fonts. (line 45) +* \t: Tabs and Fields. (line 10) +* \u: Page Motions. (line 106) +* \V: I/O. (line 248) +* \v: Page Motions. (line 87) +* \w: Page Motions. (line 147) +* \X: Postprocessor Access. + (line 11) +* \x: Manipulating Spacing. + (line 71) +* \Y: Postprocessor Access. + (line 25) +* \Z: Page Motions. (line 226) +* \z: Page Motions. (line 222) +* \{: if-else. (line 38) +* \|: Page Motions. (line 131) +* \}: if-else. (line 38) +* \~: Page Motions. (line 127) - .NH 1 - Introduction - .XS - Introduction - .XE - .LP - ... - .CW - .NH 2 - Methodology - .XS - Methodology - .XE - .LP - ... + +File: groff, Node: Operator Index, Next: Register Index, Prev: Escape Index, Up: Top - You can manually create a table of contents by beginning with the - `XS' macro for the first entry, specifying the page number for - that entry as the argument to `XS'. Add subsequent entries using - the `XA' macro, specifying the page number for that entry as the - argument to `XA'. The following is an example: +Appendix D Operator Index +************************* + +* Menu: - .XS 1 - Introduction - .XA 2 - A Brief History of the Universe - .XA 729 - Details of Galactic Formation - ... - .XE +* !: Expressions. (line 21) +* %: Expressions. (line 8) +* &: Expressions. (line 19) +* (: Expressions. (line 41) +* ): Expressions. (line 41) +* *: Expressions. (line 8) +* +: Expressions. (line 8) +* -: Expressions. (line 8) +* /: Expressions. (line 8) +* <: Expressions. (line 15) +* <=: Expressions. (line 15) +* <?: Expressions. (line 26) +* <colon>: Expressions. (line 19) +* =: Expressions. (line 15) +* ==: Expressions. (line 15) +* >: Expressions. (line 15) +* >=: Expressions. (line 15) +* >?: Expressions. (line 26) + + +File: groff, Node: Register Index, Next: Macro Index, Prev: Operator Index, Up: Top + +Appendix E Register Index +************************* + +The macro package or program a specific register belongs to is appended +in brackets. + + A register name `x' consisting of exactly one character can be +accessed as `\nx'. A register name `xx' consisting of exactly two +characters can be accessed as `\n(xx'. Register names `xxx' of any +length can be accessed as `\n[xxx]'. + + +* Menu: + +* $$: Built-in Registers. (line 96) +* % <1>: Page Control. (line 10) +* %: Page Layout. (line 89) +* .$: Parameters. (line 10) +* .a: Manipulating Spacing. + (line 72) +* .A: Built-in Registers. (line 103) +* .b: Artificial Fonts. (line 98) +* .C: Implementation Differences. + (line 25) +* .c: Built-in Registers. (line 73) +* .cdp: Environments. (line 96) +* .ce: Manipulating Filling and Adjusting. + (line 190) +* .cht: Environments. (line 95) +* .color: Colors. (line 8) +* .csk: Environments. (line 97) +* .d: Diversions. (line 62) +* .ev: Environments. (line 39) +* .f: Font Positions. (line 12) +* .F: Built-in Registers. (line 12) +* .fam: Font Families. (line 20) +* .fn: Font Families. (line 24) +* .fp: Font Positions. (line 13) +* .g: Built-in Registers. (line 99) +* .h: Diversions. (line 69) +* .H: Built-in Registers. (line 15) +* .height: Artificial Fonts. (line 16) +* .hla: Manipulating Hyphenation. + (line 254) +* .hlc: Manipulating Hyphenation. + (line 47) +* .hlm: Manipulating Hyphenation. + (line 46) +* .hy: Manipulating Hyphenation. + (line 10) +* .hym: Manipulating Hyphenation. + (line 210) +* .hys: Manipulating Hyphenation. + (line 225) +* .i: Line Layout. (line 94) +* .in: Line Layout. (line 120) +* .int: Line Control. (line 45) +* .j: Manipulating Filling and Adjusting. + (line 53) +* .k: Page Motions. (line 214) +* .kern: Ligatures and Kerning. + (line 42) +* .l: Line Layout. (line 148) +* .L: Manipulating Spacing. + (line 52) +* .lg: Ligatures and Kerning. + (line 24) +* .linetabs: Tabs and Fields. (line 148) +* .ll: Line Layout. (line 149) +* .lt: Page Layout. (line 63) +* .M: Colors. (line 89) +* .m: Colors. (line 55) +* .n: Environments. (line 112) +* .ne: Page Location Traps. (line 118) +* .ns: Manipulating Spacing. + (line 115) +* .o: Line Layout. (line 64) +* .p: Page Layout. (line 13) +* .P: Built-in Registers. (line 108) +* .pe: Page Location Traps. (line 139) +* .pn: Page Layout. (line 80) +* .ps: Fractional Type Sizes. + (line 35) +* .psr: Fractional Type Sizes. + (line 42) +* .pvs: Changing Type Sizes. (line 136) +* .rj: Manipulating Filling and Adjusting. + (line 239) +* .s: Changing Type Sizes. (line 11) +* .slant: Artificial Fonts. (line 46) +* .sr: Fractional Type Sizes. + (line 43) +* .ss: Manipulating Filling and Adjusting. + (line 135) +* .sss: Manipulating Filling and Adjusting. + (line 136) +* .sty: Changing Fonts. (line 11) +* .t: Page Location Traps. (line 97) +* .T: Built-in Registers. (line 114) +* .tabs: Tabs and Fields. (line 15) +* .trunc: Page Location Traps. (line 127) +* .u: Manipulating Filling and Adjusting. + (line 31) +* .v: Changing Type Sizes. (line 87) +* .V: Built-in Registers. (line 23) +* .vpt: Page Location Traps. (line 18) +* .w: Environments. (line 94) +* .warn: Debugging. (line 155) +* .x: Built-in Registers. (line 85) +* .Y: Built-in Registers. (line 93) +* .y: Built-in Registers. (line 89) +* .z: Diversions. (line 61) +* c.: Built-in Registers. (line 74) +* ct: Page Motions. (line 152) +* dl: Diversions. (line 87) +* dn: Diversions. (line 86) +* dw: Built-in Registers. (line 39) +* dy: Built-in Registers. (line 42) +* FAM [ms]: ms Document Control Registers. + (line 110) +* FF [ms]: ms Document Control Registers. + (line 184) +* FI [ms]: ms Document Control Registers. + (line 177) +* FL [ms]: ms Document Control Registers. + (line 170) +* FM [ms]: ms Document Control Registers. + (line 47) +* FPD [ms]: ms Document Control Registers. + (line 221) +* FPS [ms]: ms Document Control Registers. + (line 204) +* FVS [ms]: ms Document Control Registers. + (line 212) +* GROWPS [ms]: ms Document Control Registers. + (line 88) +* GS [ms]: Differences from AT&T ms. + (line 46) +* HM [ms]: ms Document Control Registers. + (line 40) +* HORPHANS [ms]: ms Document Control Registers. + (line 154) +* hours: Built-in Registers. (line 35) +* hp: Page Motions. (line 211) +* HY [ms]: ms Document Control Registers. + (line 101) +* LL [ms]: ms Document Control Registers. + (line 25) +* llx: Miscellaneous. (line 142) +* lly: Miscellaneous. (line 143) +* ln: Built-in Registers. (line 79) +* LT [ms]: ms Document Control Registers. + (line 32) +* MINGW [ms] <1>: Additional ms Macros. + (line 28) +* MINGW [ms]: ms Document Control Registers. + (line 231) +* minutes: Built-in Registers. (line 31) +* mo: Built-in Registers. (line 45) +* nl: Page Control. (line 68) +* opmaxx: Suppressing output. (line 19) +* opmaxy: Suppressing output. (line 19) +* opminx: Suppressing output. (line 19) +* opminy: Suppressing output. (line 19) +* PD [ms]: ms Document Control Registers. + (line 127) +* PI [ms]: ms Document Control Registers. + (line 120) +* PO [ms]: ms Document Control Registers. + (line 16) +* PORPHANS [ms]: ms Document Control Registers. + (line 142) +* PS [ms]: ms Document Control Registers. + (line 57) +* ps4html [grohtml]: grohtml specific registers and strings. + (line 7) +* PSINCR [ms]: ms Document Control Registers. + (line 77) +* QI [ms]: ms Document Control Registers. + (line 134) +* rsb: Page Motions. (line 151) +* rst: Page Motions. (line 150) +* sb: Page Motions. (line 149) +* seconds: Built-in Registers. (line 26) +* skw: Page Motions. (line 154) +* slimit: Debugging. (line 119) +* ssc: Page Motions. (line 153) +* st: Page Motions. (line 148) +* systat: I/O. (line 161) +* urx: Miscellaneous. (line 144) +* ury: Miscellaneous. (line 145) +* VS [ms]: ms Document Control Registers. + (line 67) +* year: Built-in Registers. (line 48) +* yr: Built-in Registers. (line 51) + + +File: groff, Node: Macro Index, Next: String Index, Prev: Register Index, Up: Top + +Appendix F Macro Index +********************** + +The macro package a specific macro belongs to is appended in brackets. +They appear without the leading control character (normally `.'). + +* Menu: + +* 1C [ms]: ms Multiple Columns. (line 13) +* 2C [ms]: ms Multiple Columns. (line 16) +* [ [ms]: ms Insertions. (line 33) +* ] [ms]: ms Insertions. (line 34) +* AB [ms]: ms Cover Page Macros. + (line 60) +* AE [ms]: ms Cover Page Macros. + (line 65) +* AI [ms]: ms Cover Page Macros. + (line 56) +* AM [ms] <1>: Additional ms Macros. + (line 10) +* AM [ms]: ms Strings and Special Characters. + (line 51) +* AT [man]: Miscellaneous man macros. + (line 26) +* AU [ms]: ms Cover Page Macros. + (line 38) +* B [man]: Man font macros. (line 48) +* B [ms]: Highlighting in ms. (line 10) +* B1 [ms]: ms Displays and Keeps. + (line 94) +* B2 [ms]: ms Displays and Keeps. + (line 95) +* BD [ms]: ms Displays and Keeps. + (line 31) +* BI [man]: Man font macros. (line 18) +* BI [ms]: Highlighting in ms. (line 39) +* BR [man]: Man font macros. (line 40) +* BT [man]: Optional man extensions. + (line 21) +* BX [ms]: Highlighting in ms. (line 43) +* CD [ms]: ms Displays and Keeps. + (line 41) +* CT [man]: Optional man extensions. + (line 36) +* CW [man]: Optional man extensions. + (line 39) +* CW [ms] <1>: Additional ms Macros. + (line 19) +* CW [ms]: Highlighting in ms. (line 35) +* DA [ms]: ms Cover Page Macros. + (line 23) +* De [man]: Optional man extensions. + (line 45) +* De [ms]: ms Displays and Keeps. + (line 57) +* DE [ms]: ms Displays and Keeps. + (line 16) +* Ds [man]: Optional man extensions. + (line 42) +* DS [ms]: Additional ms Macros. + (line 14) +* Ds [ms]: ms Displays and Keeps. + (line 56) +* DS [ms]: ms Displays and Keeps. + (line 14) +* DT [man]: Miscellaneous man macros. + (line 10) +* EE [man]: Optional man extensions. + (line 52) +* EF [ms]: ms Headers and Footers. + (line 26) +* EH [ms]: ms Headers and Footers. + (line 24) +* EN [ms]: ms Insertions. (line 28) +* EQ [ms]: ms Insertions. (line 27) +* EX [man]: Optional man extensions. + (line 48) +* FE [ms]: ms Footnotes. (line 15) +* FS [ms]: ms Footnotes. (line 14) +* G [man]: Optional man extensions. + (line 55) +* GL [man]: Optional man extensions. + (line 60) +* HB [man]: Optional man extensions. + (line 65) +* HP [man]: Man usage. (line 98) +* I [man]: Man font macros. (line 53) +* I [ms]: Highlighting in ms. (line 31) +* IB [man]: Man font macros. (line 28) +* ID [ms]: ms Displays and Keeps. + (line 23) +* IP [man]: Man usage. (line 78) +* IP [ms]: Lists in ms. (line 9) +* IR [man]: Man font macros. (line 36) +* IX [ms]: Additional ms Macros. + (line 22) +* KE [ms]: ms Displays and Keeps. + (line 73) +* KF [ms]: ms Displays and Keeps. + (line 77) +* KS [ms]: ms Displays and Keeps. + (line 72) +* LD [ms]: ms Displays and Keeps. + (line 15) +* LG [ms]: Highlighting in ms. (line 52) +* LP [man]: Man usage. (line 68) +* LP [ms]: Paragraphs in ms. (line 10) +* MC [ms]: ms Multiple Columns. (line 19) +* MS [man]: Optional man extensions. + (line 73) +* ND [ms]: ms Cover Page Macros. + (line 28) +* NE [man]: Optional man extensions. + (line 85) +* NH [ms]: Headings in ms. (line 13) +* NL [ms]: Highlighting in ms. (line 64) +* NT [man]: Optional man extensions. + (line 78) +* OF [ms]: ms Headers and Footers. + (line 25) +* OH [ms]: ms Headers and Footers. + (line 23) +* P [man]: Man usage. (line 70) +* P1 [ms]: ms Cover Page Macros. + (line 19) +* PD [man]: Miscellaneous man macros. + (line 15) +* PE [ms]: ms Insertions. (line 21) +* Pn [man]: Optional man extensions. + (line 92) +* PN [man]: Optional man extensions. + (line 88) +* PP [man]: Man usage. (line 69) +* PP [ms]: Paragraphs in ms. (line 9) +* PS [ms]: ms Insertions. (line 20) +* PT [man]: Optional man extensions. + (line 16) +* PX [ms]: ms TOC. (line 65) +* QP [ms]: Paragraphs in ms. (line 13) +* R [man]: Optional man extensions. + (line 98) +* R [ms]: Highlighting in ms. (line 27) +* RB [man]: Man font macros. (line 44) +* RD [ms]: ms Displays and Keeps. + (line 49) +* RE [man]: Man usage. (line 115) +* RE [ms]: Indentation values in ms. + (line 12) +* RI [man]: Man font macros. (line 32) +* RN [man]: Optional man extensions. + (line 101) +* RP [ms]: ms Cover Page Macros. + (line 10) +* RS [man]: Man usage. (line 106) +* RS [ms]: Indentation values in ms. + (line 11) +* SB [man]: Man font macros. (line 14) +* SH [man]: Man usage. (line 32) +* SH [ms]: Headings in ms. (line 43) +* SM [man]: Man font macros. (line 10) +* SM [ms]: Highlighting in ms. (line 58) +* SS [man]: Man usage. (line 41) +* TA [ms]: Tabstops in ms. (line 10) +* TB [man]: Optional man extensions. + (line 70) +* TC [ms]: ms TOC. (line 55) +* TE [ms]: ms Insertions. (line 12) +* TH [man]: Man usage. (line 11) +* TL [ms]: ms Cover Page Macros. + (line 33) +* TP [man]: Man usage. (line 49) +* TS [ms]: ms Insertions. (line 11) +* UC [man]: Miscellaneous man macros. + (line 43) +* UL [ms]: Highlighting in ms. (line 47) +* VE [man]: Optional man extensions. + (line 108) +* VS [man]: Optional man extensions. + (line 104) +* XA [ms]: ms TOC. (line 13) +* XE [ms]: ms TOC. (line 14) +* XP [ms]: Paragraphs in ms. (line 18) +* XS [ms]: ms TOC. (line 12) + + +File: groff, Node: String Index, Next: Glyph Name Index, Prev: Macro Index, Up: Top + +Appendix G String Index +*********************** + +The macro package or program a specific string belongs to is appended in +brackets. + + A string name `x' consisting of exactly one character can be +accessed as `\*x'. A string name `xx' consisting of exactly two +characters can be accessed as `\*(xx'. String names `xxx' of any +length can be accessed as `\*[xxx]'. + + +* Menu: + +* ! [ms]: ms Strings and Special Characters. + (line 101) +* ' [ms]: ms Strings and Special Characters. + (line 65) +* * [ms]: ms Footnotes. (line 11) +* , [ms]: ms Strings and Special Characters. + (line 74) +* - [ms]: ms Strings and Special Characters. + (line 41) +* . [ms]: ms Strings and Special Characters. + (line 89) +* .T: Built-in Registers. (line 119) +* 3 [ms]: ms Strings and Special Characters. + (line 107) +* 8 [ms]: ms Strings and Special Characters. + (line 104) +* ? [ms]: ms Strings and Special Characters. + (line 98) +* \*[<colon>] [ms]: ms Strings and Special Characters. + (line 80) +* ^ [ms]: ms Strings and Special Characters. + (line 71) +* _ [ms]: ms Strings and Special Characters. + (line 86) +* ` [ms]: ms Strings and Special Characters. + (line 68) +* ABSTRACT [ms]: ms Strings and Special Characters. + (line 15) +* Ae [ms]: ms Strings and Special Characters. + (line 128) +* ae [ms]: ms Strings and Special Characters. + (line 125) +* CF [ms]: ms Headers and Footers. + (line 16) +* CH [ms]: ms Headers and Footers. + (line 11) +* d- [ms]: ms Strings and Special Characters. + (line 119) +* D- [ms]: ms Strings and Special Characters. + (line 116) +* HF [man]: Predefined man strings. + (line 12) +* LF [ms]: ms Headers and Footers. + (line 15) +* LH [ms]: ms Headers and Footers. + (line 10) +* lq [man]: Predefined man strings. + (line 21) +* MONTH1 [ms]: ms Strings and Special Characters. + (line 23) +* MONTH10 [ms]: ms Strings and Special Characters. + (line 32) +* MONTH11 [ms]: ms Strings and Special Characters. + (line 33) +* MONTH12 [ms]: ms Strings and Special Characters. + (line 34) +* MONTH2 [ms]: ms Strings and Special Characters. + (line 24) +* MONTH3 [ms]: ms Strings and Special Characters. + (line 25) +* MONTH4 [ms]: ms Strings and Special Characters. + (line 26) +* MONTH5 [ms]: ms Strings and Special Characters. + (line 27) +* MONTH6 [ms]: ms Strings and Special Characters. + (line 28) +* MONTH7 [ms]: ms Strings and Special Characters. + (line 29) +* MONTH8 [ms]: ms Strings and Special Characters. + (line 30) +* MONTH9 [ms]: ms Strings and Special Characters. + (line 31) +* o [ms]: ms Strings and Special Characters. + (line 92) +* q [ms]: ms Strings and Special Characters. + (line 122) +* Q [ms]: ms Strings and Special Characters. + (line 44) +* R [man]: Predefined man strings. + (line 15) +* REFERENCES [ms]: ms Strings and Special Characters. + (line 11) +* RF [ms]: ms Headers and Footers. + (line 17) +* RH [ms]: ms Headers and Footers. + (line 12) +* rq [man]: Predefined man strings. + (line 22) +* S [man]: Predefined man strings. + (line 9) +* SN [ms]: Headings in ms. (line 22) +* SN-DOT [ms]: Headings in ms. (line 23) +* SN-NO-DOT [ms]: Headings in ms. (line 24) +* th [ms]: ms Strings and Special Characters. + (line 113) +* Th [ms]: ms Strings and Special Characters. + (line 110) +* Tm [man]: Predefined man strings. + (line 18) +* TOC [ms]: ms Strings and Special Characters. + (line 19) +* U [ms]: ms Strings and Special Characters. + (line 45) +* v [ms]: ms Strings and Special Characters. + (line 83) +* www-image-template [grohtml]: grohtml specific registers and strings. + (line 8) +* { [ms]: Highlighting in ms. (line 68) +* } [ms]: Highlighting in ms. (line 69) +* ~ [ms]: ms Strings and Special Characters. + (line 77) + + +File: groff, Node: Glyph Name Index, Next: Font File Keyword Index, Prev: String Index, Up: Top + +Appendix H Glyph Name Index +*************************** + +A glyph name `xx' consisting of exactly two characters can be accessed +as `\(xx'. Glyph names `xxx' of any length can be accessed as `\[xxx]'. - - Macro: .TC [`no'] - Prints the table of contents on a new page, setting the page - number to *i* (Roman numeral one). You should usually place this - macro at the end of the file, since `groff' is a single-pass - formatter and can only print what has been collected up to the - point that the `TC' macro appears. + +File: groff, Node: Font File Keyword Index, Next: Program and File Index, Prev: Glyph Name Index, Up: Top - The optional argument `no' suppresses printing the title specified - by the string register `TOC'. +Appendix I Font File Keyword Index +********************************** - - Macro: .PX [`no'] - Prints the table of contents on a new page, using the current page - numbering sequence. Use this macro to print a manually-generated - table of contents at the beginning of your document. + +* Menu: - The optional argument `no' suppresses printing the title specified - by the string register `TOC'. +* #: Font File Format. (line 36) +* ---: Font File Format. (line 51) +* biggestfont: DESC File Format. (line 109) +* charset <1>: Font File Format. (line 44) +* charset: DESC File Format. (line 101) +* family <1>: DESC File Format. (line 64) +* family <2>: Font Positions. (line 61) +* family: Changing Fonts. (line 11) +* fonts <1>: DESC File Format. (line 58) +* fonts <2>: Special Fonts. (line 18) +* fonts: Using Symbols. (line 15) +* hor: DESC File Format. (line 14) +* kernpairs: Font File Format. (line 135) +* ligatures: Font File Format. (line 22) +* name: Font File Format. (line 12) +* papersize: DESC File Format. (line 72) +* pass_filenames: DESC File Format. (line 92) +* postpro: DESC File Format. (line 36) +* prepro: DESC File Format. (line 32) +* print: DESC File Format. (line 97) +* res: DESC File Format. (line 11) +* sizes: DESC File Format. (line 49) +* sizescale: DESC File Format. (line 22) +* slant: Font File Format. (line 18) +* spacewidth: Font File Format. (line 15) +* spare1: DESC File Format. (line 109) +* spare2: DESC File Format. (line 109) +* special <1>: Font File Format. (line 28) +* special: Artificial Fonts. (line 116) +* styles <1>: DESC File Format. (line 55) +* styles <2>: Font Positions. (line 61) +* styles <3>: Font Families. (line 76) +* styles: Changing Fonts. (line 11) +* tcommand: DESC File Format. (line 45) +* unitwidth: DESC File Format. (line 28) +* use_charnames_in_special <1>: DESC File Format. (line 67) +* use_charnames_in_special: Postprocessor Access. + (line 17) +* vert: DESC File Format. (line 18) - The `Groff and Friends HOWTO' includes a `sed' script that -automatically inserts `XS' and `XE' macro entries after each heading in -a document. + +File: groff, Node: Program and File Index, Next: Concept Index, Prev: Font File Keyword Index, Up: Top - Altering the `NH' macro to automatically build the table of contents -is perhaps initially more difficult, but would save a great deal of -time in the long run if you use `ms' regularly. +Appendix J Program and File Index +********************************* + +* Menu: + +* an.tmac: man. (line 6) +* changebar: Miscellaneous. (line 111) +* composite.tmac: Using Symbols. (line 197) +* cp1047.tmac: Input Encodings. (line 9) +* DESC <1>: Special Fonts. (line 18) +* DESC <2>: Using Symbols. (line 15) +* DESC <3>: Font Positions. (line 61) +* DESC <4>: Font Families. (line 76) +* DESC: Changing Fonts. (line 11) +* DESC file format: DESC File Format. (line 6) +* DESC, and font mounting: Font Positions. (line 37) +* DESC, and use_charnames_in_special: Postprocessor Access. + (line 17) +* ditroff: History. (line 58) +* ec.tmac: Input Encodings. (line 41) +* eqn: ms Insertions. (line 7) +* freeeuro.pfa: Input Encodings. (line 41) +* geqn: Groff Options. (line 6) +* geqn, invocation in manual pages: Preprocessors in man pages. + (line 12) +* ggrn: Groff Options. (line 6) +* gpic: Groff Options. (line 6) +* grap: Groff Options. (line 6) +* grefer: Groff Options. (line 6) +* grefer, invocation in manual pages: Preprocessors in man pages. + (line 12) +* groff: Groff Options. (line 6) +* grog: grog. (line 6) +* grohtml: Miscellaneous man macros. + (line 6) +* gsoelim: Groff Options. (line 6) +* gtbl: Groff Options. (line 6) +* gtbl, invocation in manual pages: Preprocessors in man pages. + (line 12) +* gtroff: Groff Options. (line 6) +* hyphen.us: Manipulating Hyphenation. + (line 161) +* hyphenex.us: Manipulating Hyphenation. + (line 161) +* latin1.tmac: Input Encodings. (line 14) +* latin2.tmac: Input Encodings. (line 18) +* latin9.tmac: Input Encodings. (line 23) +* makeindex: Indices. (line 10) +* man, invocation of preprocessors: Preprocessors in man pages. + (line 12) +* man-old.tmac: man. (line 6) +* man.local <1>: Optional man extensions. + (line 6) +* man.local: Man usage. (line 6) +* man.tmac: man. (line 6) +* man.ultrix: Optional man extensions. + (line 30) +* nrchbar: Miscellaneous. (line 111) +* papersize.tmac: Paper Size. (line 16) +* perl: I/O. (line 171) +* pic: ms Insertions. (line 7) +* post-grohtml: Groff Options. (line 165) +* pre-grohtml: Groff Options. (line 165) +* refer: ms Insertions. (line 7) +* soelim: Debugging. (line 10) +* tbl: ms Insertions. (line 7) +* trace.tmac: Writing Macros. (line 101) +* troffrc <1>: Line Layout. (line 64) +* troffrc <2>: Troff and Nroff Mode. + (line 24) +* troffrc <3>: Manipulating Hyphenation. + (line 161) +* troffrc <4>: Paper Size. (line 16) +* troffrc: Groff Options. (line 80) +* troffrc-end <1>: Troff and Nroff Mode. + (line 24) +* troffrc-end <2>: Manipulating Hyphenation. + (line 161) +* troffrc-end: Groff Options. (line 80) +* tty.tmac: Troff and Nroff Mode. + (line 32) + + + +Local Variables: +coding: iso-8859-1 +End: |