diff options
Diffstat (limited to 'contrib/groff/doc/groff-7')
-rw-r--r-- | contrib/groff/doc/groff-7 | 1460 |
1 files changed, 0 insertions, 1460 deletions
diff --git a/contrib/groff/doc/groff-7 b/contrib/groff/doc/groff-7 deleted file mode 100644 index edf7290..0000000 --- a/contrib/groff/doc/groff-7 +++ /dev/null @@ -1,1460 +0,0 @@ -This is groff, produced by makeinfo version 4.3d from ./groff.texinfo. - -This manual documents GNU `troff' version 1.19. - - Copyright (C) 1994-2000, 2001, 2002, 2003 Free Software Foundation, -Inc. - - Permission is granted to copy, distribute and/or modify this - document under the terms of the GNU Free Documentation License, - Version 1.1 or any later version published by the Free Software - Foundation; with no Invariant Sections, with the Front-Cover texts - being `A GNU Manual," and with the Back-Cover Texts as in (a) - below. A copy of the license is included in the section entitled - `GNU Free Documentation License." - - (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: Page Location Traps, Next: Diversion Traps, Prev: Traps, Up: Traps - -Page Location Traps -------------------- - - "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 and 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. - - -File: groff, Node: Diversion Traps, Next: Input Line Traps, Prev: Page Location Traps, Up: Traps - -Diversion Traps ---------------- - - - 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. The number - register `.t' still works within diversions. *Note Diversions::, - for more information. - - -File: groff, Node: Input Line Traps, Next: Blank Line Traps, Prev: Diversion Traps, Up: Traps - -Input Line Traps ----------------- - - - 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. - - For example, one possible use is to have a macro which prints the - next N lines in a bold font. - - - .de B - . it \\$1 B-end - . ft B - .. - . - .de B-end - . ft R - .. - - The `itc' request is identical except that an interrupted text - line (ending with `\c') is not counted as a separate line. - - 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: Blank Line Traps, Next: End-of-input Traps, Prev: Input Line Traps, Up: Traps - -Blank Line Traps ----------------- - - - Request: .blm macro - Set a blank line trap. `gtroff' executes MACRO when it encounters - a blank line in the input file. - - -File: groff, Node: End-of-input Traps, Prev: Blank Line Traps, Up: Traps - -End-of-input Traps ------------------- - - - 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. - - 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. - - - .de approval - . ne 5v - . sp |(\\n[.t] - 6v) - . in +4i - . lc _ - . br - Approved:\t\a - . sp - Date:\t\t\a - .. - . - .em approval - - - -File: groff, Node: Diversions, Next: Environments, Prev: Traps, Up: gtroff Reference - -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. - - -File: groff, Node: Environments, Next: Suppressing output, Prev: Diversions, Up: gtroff Reference - -Environments -============ - - 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. - - * font parameters (size, family, style, glyph height and slant, space - and sentence space size) - - * page parameters (line length, title length, vertical spacing, line - spacing, indentation, line numbering, centering, right-justifying, - underlining, hyphenation data) - - * fill and adjust mode - - * tab stops, tab and leader characters, escape character, no-break - and hyphen indicators, margin character data - - * 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 - - ... - - .ev footnote-env - \(dg Note the large, friendly letters. - .ev - - - - Request: .evc env - Copy the environment ENV into the current environment. - - The following environment data is not copied: - - * Partially filled lines. - - * The status whether the previous line was interrupted. - - * 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 indent 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: Suppressing output, Next: Colors, Prev: Environments, Up: gtroff Reference - -Suppressing output -================== - - - Escape: \Onum - Disable or enable output depending on the value of NUM: - - `\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_. - - `\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. - - For example the input text: - - - 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: Colors, Next: I/O, Prev: Suppressing output, Up: gtroff Reference - -Colors -====== - - - Request: .color [n] - - Register: \n[.color] - If N is missing or non-zero, activate colors (this is the default); - otherwise, turn it off. - - The read-only number register `.color' is 1 if colors are active, - 0 otherwise. - - 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. - - Colors can be also turned off with the `-c' command line option. - - - 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). - - 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. - - 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: - - - .defcolor darkgreen rgb 0.1f 0.5f 0.2f - - Note that `f' is the default scaling indicator for the `defcolor' - request, thus the above statement is equivalent to - - - .defcolor darkgreen rgb 0.1 0.5 0.2 - - - - Escape: \mc - - Escape: \m(co - - Escape: \m[color] - Set drawing color. The following example shows how to turn the - next four words red. - - - \m[red]these are in red\m[] and these words are in black. - - The escape `\m[]' returns to the previous color. - - The drawing color is associated with the current environment - (*note Environments::). - - 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: - - - .mc \m[red]x\m[] - - - - Escape: \Mc - - Escape: \M(co - - Escape: \M[color] - Set background color for filled objects drawn with the `\D'...'' - commands. - - A red ellipse can be created with the following code: - - - \M[red]\h'0.5i'\D'E 2i 1i'\M[] - - The escape `\M[]' returns to the previous fill color. - - 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: I/O, Next: Postprocessor Access, Prev: Colors, Up: gtroff Reference - -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'. - - - 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 - ... - - is the same as `.pi foo | bar'. - - 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: Postprocessor Access, Next: Miscellaneous, Prev: I/O, Up: gtroff Reference - -Postprocessor Access -==================== - - There are two escapes which give information directly to the -postprocessor. This is particularly useful for embedding POSTSCRIPT -into the final document. - - - 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 `\\'. - - `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: Miscellaneous, Next: Gtroff Internals, Prev: Postprocessor Access, Up: gtroff Reference - -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 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. - - -File: groff, Node: Miscellaneous-Footnotes, Up: Miscellaneous - - (1) "Margin character" is a misnomer since it is an output glyph. - - -File: groff, Node: Gtroff Internals, Next: Debugging, Prev: Miscellaneous, Up: gtroff Reference - -`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. - - 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. - - 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'. - - - .fchar \[foo] foo - .tr x \[foo] - -Now let us assume that we install an additional special font `bar' -which has glyph `foo'. - - - .special bar - .rchar \[foo] - -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'. - - -File: groff, Node: Gtroff Internals-Footnotes, Up: Gtroff Internals - - (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: Debugging, Next: Implementation Differences, Prev: Gtroff Internals, Up: gtroff Reference - -Debugging -========= - - `gtroff' is not easy to debug, but there are some useful features -and strategies for debugging. - - - 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. - - Without argument, the request is ignored. - - 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. - - 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. - - - 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. - - STRING is read in copy mode. - - 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. - - The `tmc' request is similar to `tm1' but does not append a - newline (as is done in `tm' and `tm1'). - - - 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. - - - Request: .ex - The `ex' request also causes `gtroff' to stop processing; see also - *Note I/O::. - - 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. - - - .if \n(DB .tm debugging output - -To activate these statements say - - - groff -rDB=1 file - - 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. - - - 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. - - 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. - - - Request: .pnr - Print the names and contents of all currently defined number - registers on `stderr'. - - - 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. - - - 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. - - This request causes a line break. - - - 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 - - On execution, `gtroff' prints the following: - - - test:2: backtrace: macro `xxx' - test:5: backtrace: macro `yyy' - test:8: backtrace: file `test' - - The option `-b' of `gtroff' internally calls a variant of this - request on each error and warning. - - - 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. - - The default value is 1000; this is a compile-time constant. - - - 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'. - - - 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. - - For example, - - - .spreadwarn 0.2m - - will cause a warning if `gtroff' must add 0.2m or more for each - interword space in a line. - - This request is active only if text is justified to both margins - (using `.ad b'). - - `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'. - - - 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. - - The read-only number register `.warn' contains the current warning - level. - -* Menu: - -* Warnings:: - |