diff options
Diffstat (limited to 'contrib/groff/doc/groff-4')
-rw-r--r-- | contrib/groff/doc/groff-4 | 1316 |
1 files changed, 1316 insertions, 0 deletions
diff --git a/contrib/groff/doc/groff-4 b/contrib/groff/doc/groff-4 new file mode 100644 index 000000000000..8b6d91aaaf0a --- /dev/null +++ b/contrib/groff/doc/groff-4 @@ -0,0 +1,1316 @@ +This is groff, produced by makeinfo version 4.2 from ./groff.texinfo. + +This manual documents GNU `troff' version 1.18. + + Copyright (C) 1994-2000, 2001, 2002 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 Miscellaneous +START-INFO-DIR-ENTRY +* Groff: (groff). The GNU troff document formatting system. +END-INFO-DIR-ENTRY + + +File: groff, Node: Manipulating Hyphenation, Next: Manipulating Spacing, Prev: Manipulating Filling and Adjusting, Up: gtroff Reference + +Manipulating Hyphenation +======================== + + As discussed in *Note Hyphenation::, `gtroff' hyphenates words. +There are a number of ways to influence hyphenation. + + - Request: .hy [mode] + - Register: \n[.hy] + Enable hyphenation. The request has an optional numeric argument, + MODE, to restrict hyphenation if necessary: + + `1' + The default argument if MODE is omitted. Hyphenate without + restrictions. This is also the start-up value of `gtroff'. + + `2' + Do not hyphenate the last word on a page or column. + + `4' + Do not hyphenate the last two characters of a word. + + `8' + Do not hyphenate the first two characters of a word. + + Values in the previous table are additive. For example, the + value 12 causes `gtroff' to neither hyphenate the last two nor the + first two characters of a word. + + The current hyphenation restrictions can be found in the read-only + number register `.hy'. + + The hyphenation mode is associated with the current environment + (*note Environments::). + + - Request: .nh + Disable hyphenation (i.e., set the hyphenation mode to zero). Note + that the hyphenation mode of the last call to `hy' is not + remembered. + + The hyphenation mode is associated with the current environment + (*note Environments::). + + - Request: .hlm [nnn] + - Register: \n[.hlm] + - Register: \n[.hlc] + Set the maximum number of consecutive hyphenated lines to NNN. If + this number is negative, there is no maximum. The default value + is -1 if NNN is omitted. This value is associated with the + current environment (*note Environments::). Only lines output + from a given environment count towards the maximum associated with + that environment. Hyphens resulting from `\%' are counted; + explicit hyphens are not. + + The current setting of `hlm' is available in the `.hlm' read-only + number register. Also the number of immediately preceding + consecutive hyphenated lines are available in the read-only number + register `.hlc'. + + - Request: .hw word1 word2 ... + Define how WORD1, WORD2, etc. are to be hyphenated. The words + must be given with hyphens at the hyphenation points. For example: + + + .hw in-sa-lub-rious + + Besides the space character, any character whose hyphenation code + value is zero can be used to separate the arguments of `hw' (see + the documentation for the `hcode' request below for more + information). In addition, this request can be used more than + once. + + Hyphenation exceptions specified with the `hw' request are + associated with the current hyphenation language; it causes an + error if there is no current hyphenation language. + + This request is ignored if there is no parameter. + + In old versions of `troff' there was a limited amount of space to + store such information; fortunately, with `gtroff', this is no + longer a restriction. + + - Escape: \% + - Escape: \: + To tell `gtroff' how to hyphenate words on the fly, use the `\%' + escape, also known as the "hyphenation character". Preceding a + word with this character prevents it from being hyphenated; + putting it inside a word indicates to `gtroff' that the word may + be hyphenated at that point. Note that this mechanism only + affects that one occurrence of the word; to change the hyphenation + of a word for the entire document, use the `hw' request. + + The `\:' escape inserts a zero-width break point (that is, the + word breaks but without adding a hyphen). + + + ... check the /var/log/\:httpd/\:access_log file ... + + Note that `\X' and `\Y' start a word, that is, the `\%' escape in + (say) ` \X'...'\%foobar' and ` \Y'...'\%foobar' no longer prevents + hyphenation but inserts a hyphenation point at the beginning of + `foobar'; most likely this isn't what you want to do. + + - Request: .hc [char] + Change the hyphenation character to CHAR. This character then + works the same as the `\%' escape, and thus, no longer appears in + the output. Without an argument, `hc' resets the hyphenation + character to be `\%' (the default) only. + + The hyphenation character is associated with the current + environment (*note Environments::). + + - Request: .hpf pattern_file + - Request: .hpfa pattern_file + - Request: .hpfcode a b [c d ...] + Read in a file of hyphenation patterns. This file is searched for + in the same way as `NAME.tmac' (or `tmac.NAME') is searched for if + the `-mNAME' option is specified. + + It should have the same format as (simple) TeX patterns files. + More specifically, the following scanning rules are implemented. + + * A percent sign starts a comment (up to the end of the line) + even if preceded by a backslash. + + * No support for `digraphs' like `\$'. + + * `^^XX' (X is 0-9 or a-f) and `^^X' (character code of X in + the range 0-127) are recognized; other use of `^' causes an + error. + + * No macro expansion. + + * `hpf' checks for the expression `\patterns{...}' (possibly + with whitespace before and after the braces). Everything + between the braces is taken as hyphenation patterns. + Consequently, `{' and `}' are not allowed in patterns. + + * Similarly, `\hyphenation{...}' gives a list of hyphenation + exceptions. + + * `\endinput' is recognized also. + + * For backwards compatibility, if `\patterns' is missing, the + whole file is treated as a list of hyphenation patterns (only + recognizing the `%' character as the start of a comment). + + If no `hpf' request is specified (either in the document or in a + macro package), `gtroff' won't hyphenate at all. + + The `hpfa' request appends a file of patterns to the current list. + + The `hpfcode' request defines mapping values for character codes in + hyphenation patterns. `hpf' or `hpfa' then apply the mapping + (after reading the patterns) before replacing or appending them to + the current list of patterns. Its arguments are pairs of + character codes - integers from 0 to 255. The request maps + character code A to code B, code C to code D, and so on. You can + use character codes which would be invalid otherwise. + + The set of hyphenation patterns is associated with the current + language set by the `hla' request. The `hpf' request is usually + invoked by the `troffrc' or `troffrc-end' file; by default, + `troffrc' loads hyphenation patterns for American English (in file + `hyphen.us'). + + A second call to `hpf' (for the same language) will replace the + hyphenation patterns with the new ones. + + Invoking `hpf' causes an error if there is no current hyphenation + language. + + - Request: .hcode c1 code1 c2 code2 ... + Set the hyphenation code of character C1 to CODE1, that of C2 to + CODE2, etc. A hyphenation code must be a single input character + (not a special character) other than a digit or a space. + Initially each lower-case letter (`a'-`z') has its hyphenation + code set to itself, and each upper-case letter (`A'-`Z') has a + hyphenation code which is the lower-case version of itself. + + This request is ignored if it has no parameter. + + - Request: .hym [length] + - Register: \n[.hym] + Set the (right) hyphenation margin to LENGTH. If the current + adjustment mode is not `b' or `n', the line is not hyphenated if + it is shorter than LENGTH. Without an argument, the hyphenation + margin is reset to its default value, which is 0. The default + scaling indicator for this request is `m'. The hyphenation margin + is associated with the current environment (*note Environments::). + + A negative argument resets the hyphenation margin to zero, emitting + a warning of type `range'. + + The current hyphenation margin is available in the `.hym' read-only + number register. + + - Request: .hys [hyphenation_space] + - Register: \n[.hys] + Set the hyphenation space to HYPHENATION_SPACE. If the current + adjustment mode is `b' or `n', don't hyphenate the line if it can + be justified by adding no more than HYPHENATION_SPACE extra space + to each word space. Without argument, the hyphenation space is + set to its default value, which is 0. The default scaling + indicator for this request is `m'. The hyphenation space is + associated with the current environment (*note Environments::). + + A negative argument resets the hyphenation space to zero, emitting + a warning of type `range'. + + The current hyphenation space is available in the `.hys' read-only + number register. + + - Request: .shc [glyph] + Set the "soft hyphen character" to GLYPH.(1) (*note Manipulating + Hyphenation-Footnote-1::) If the argument is omitted, the soft + hyphen character is set to the default glyph `\(hy' (this is the + start-up value of `gtroff' also). The soft hyphen character is + the glyph that is inserted when a word is hyphenated at a line + break. If the soft hyphen character does not exist in the font of + the character immediately preceding a potential break point, then + the line is not broken at that point. Neither definitions + (specified with the `char' request) nor translations (specified + with the `tr' request) are considered when finding the soft hyphen + character. + + - Request: .hla language + - Register: \n[.hla] + Set the current hyphenation language to the string LANGUAGE. + Hyphenation exceptions specified with the `hw' request and + hyphenation patterns specified with the `hpf' and `hpfa' requests + are both associated with the current hyphenation language. The + `hla' request is usually invoked by the `troffrc' or the + `troffrc-end' files; `troffrc' sets the default language to `us'. + + The current hyphenation language is available as a string in the + read-only number register `.hla'. + + + .ds curr_language \n[.hla] + \*[curr_language] + => us + + + +File: groff, Node: Manipulating Hyphenation-Footnotes, Up: Manipulating Hyphenation + + (1) "Soft hyphen character" is a misnomer since it is an output +glyph. + + +File: groff, Node: Manipulating Spacing, Next: Tabs and Fields, Prev: Manipulating Hyphenation, Up: gtroff Reference + +Manipulating Spacing +==================== + + - Request: .sp [distance] + Space downwards DISTANCE. With no argument it advances 1 line. A + negative argument causes `gtroff' to move up the page the + specified distance. If the argument is preceded by a `|' then + `gtroff' moves that distance from the top of the page. This + request causes a line break. The default scaling indicator is `v'. + + - Request: .ls [nnn] + - Register: \n[.L] + Output NNN-1 blank lines after each line of text. With no + argument, `gtroff' uses the previous value before the last `ls' + call. + + + .ls 2 \" This causes double-spaced output + .ls 3 \" This causes triple-spaced output + .ls \" Again double-spaced + + The line spacing is associated with the current environment (*note + Environments::). + + The read-only number register `.L' contains the current line + spacing setting. + + *Note Changing Type Sizes::, for the requests `vs' and `pvs' as +alternatives to `ls'. + + - Escape: \x'SPACING' + - Register: \n[.a] + Sometimes, extra vertical spacing is only needed occasionally, e.g. + to allow space for a tall construct (like an equation). The `\x' + escape does this. The escape is given a numerical argument, + usually enclosed in quotes (like `\x'3p''); the default scaling + indicator is `v'. If this number is positive extra vertical space + is inserted below the current line. A negative number adds space + above. If this escape is used multiple times on the same line, + the maximum of the values is used. + + *Note Escapes::, for details on parameter delimiting characters. + + The `.a' read-only number register contains the most recent + (nonnegative) extra vertical line space. + + Using `\x' can be necessary in combination with the `\b' escape, + as the following example shows. + + + This is a test with the \[rs]b escape. + .br + This is a test with the \[rs]b escape. + .br + This is a test with \b'xyz'\x'-1m'\x'1m'. + .br + This is a test with the \[rs]b escape. + .br + This is a test with the \[rs]b escape. + + produces + + + This is a test with the \b escape. + This is a test with the \b escape. + x + This is a test with y. + z + This is a test with the \b escape. + This is a test with the \b escape. + + + - Request: .ns + - Request: .rs + - Register: \n[.ns] + Enable "no-space mode". In this mode, spacing (either via `sp' or + via blank lines) is disabled. The `bp' request to advance to the + next page is also disabled, except if it is accompanied by a page + number (see *Note Page Control::, for more information). This + mode ends when actual text is output or the `rs' request is + encountered which ends no-space mode. The read-only number + register `.ns' is set to 1 as long as no-space mode is active. + + This request is useful for macros that conditionally insert + vertical space before the text starts (for example, a paragraph + macro could insert some space except when it is the first + paragraph after a section header). + + +File: groff, Node: Tabs and Fields, Next: Character Translations, Prev: Manipulating Spacing, Up: gtroff Reference + +Tabs and Fields +=============== + + A tab character (ASCII char 9, EBCDIC char 5) causes a horizontal +movement to the next tab stop (much like it did on a typewriter). + + - Escape: \t + This escape is a non-interpreted tab character. In copy mode + (*note Copy-in Mode::), `\t' is the same as a real tab character. + + - Request: .ta [n1 n2 ... nn T r1 r2 ... rn] + - Register: \n[.tabs] + Change tab stop positions. This request takes a series of tab + specifiers as arguments (optionally divided into two groups with + the letter `T') which indicate where each tab stop is to be + (overriding any previous settings). + + Tab stops can be specified absolutely, i.e., as the distance from + the left margin. For example, the following sets 6 tab stops every + one inch. + + + .ta 1i 2i 3i 4i 5i 6i + + Tab stops can also be specified using a leading `+' which means + that the specified tab stop is set relative to the previous tab + stop. For example, the following is equivalent to the previous + example. + + + .ta 1i +1i +1i +1i +1i +1i + + `gtroff' supports an extended syntax to specify repeat values after + the `T' mark (these values are always taken as relative) - this is + the usual way to specify tabs set at equal intervals. The + following is, yet again, the same as the previous examples. It + does even more since it defines an infinite number of tab stops + separated by one inch. + + + .ta T 1i + + Now we are ready to interpret the full syntax given at the + beginning: Set tabs at positions N1, N2, ..., NN and then set tabs + at NN+R1, NN+R2, ..., NN+RN and then at NN+RN+R1, NN+RN+R2, ..., + NN+RN+RN, and so on. + + Example: `4c +6c T 3c 5c 2c' is equivalent to `4c 10c 13c 18c 20c + 23c 28c 30c ...'. + + The material in each tab column (i.e., the column between two tab + stops) may be justified to the right or left or centered in the + column. This is specified by appending `R', `L', or `C' to the tab + specifier. The default justification is `L'. Example: + + + .ta 1i 2iC 3iR + + Some notes: + + * The default unit of the `ta' request is `m'. + + * A tab stop is converted into a non-breakable horizontal + movement which can be neither stretched nor squeezed. For + example, + + + .ds foo a\tb\tc + .ta T 5i + \*[foo] + + creates a single line which is a bit longer than 10 inches (a + string is used to show exactly where the tab characters are). + Now consider the following: + + + .ds bar a\tb b\tc + .ta T 5i + \*[bar] + + `gtroff' first converts the tab stops of the line into + unbreakable horizontal movements, then splits the line after + the second `b' (assuming a sufficiently short line length). + Usually, this isn't what the user wants. + + * Superfluous tabs (i.e., tab characters which do not + correspond to a tab stop) are ignored except the first one + which delimits the characters belonging to the last tab stop + for right-justifying or centering. Consider the following + example + + + .ds Z foo\tbar\tfoo + .ds ZZ foo\tbar\tfoobar + .ds ZZZ foo\tbar\tfoo\tbar + .ta 2i 4iR + \*[Z] + .br + \*[ZZ] + .br + \*[ZZZ] + .br + + which produces the following output: + + + foo bar foo + foo bar foobar + foo bar foobar + + The first line right-justifies the second `foo' relative to + the tab stop. The second line right-justifies `foobar'. The + third line finally right-justifies only `foo' because of the + additional tab character which marks the end of the string + belonging to the last defined tab stop. + + * Tab stops are associated with the current environment (*note + Environments::). + + * Calling `ta' without an argument removes all tab stops. + + * The start-up value of `gtroff' is `T 0.5i' in troff mode and + `T 0.8i' in nroff mode (the latter is done with an explicit + call to the `ta' request in the file `tty.tmac'. + + The read-only number register `.tabs' contains a string + representation of the current tab settings suitable for use as an + argument to the `ta' request. + + + .ds tab-string \n[.tabs] + \*[tab-string] + => T120u + + The `troff' version of the Plan 9 operating system uses register + `.S' for the same purpose. + + - Request: .tc [fill-glyph] + Normally `gtroff' fills the space to the next tab stop with + whitespace. This can be changed with the `tc' request. With no + argument `gtroff' reverts to using whitespace, which is the + default. The value of this "tab repetition character" is + associated with the current environment (*note Environments::).(1) + (*note Tabs and Fields-Footnote-1::) + + - Request: .linetabs n + - Register: \n[.linetabs] + If N is missing or not zero, enable "line-tabs" mode, or disable + it otherwise (the default). In line-tabs mode, `gtroff' computes + tab distances relative to the (current) output line instead of the + input line. + + For example, the following code: + + + .ds x a\t\c + .ds y b\t\c + .ds z c + .ta 1i 3i + \*x + \*y + \*z + + in normal mode, results in the output + + + a b c + + in line-tabs mode, the same code outputs + + + a b c + + Line-tabs mode is associated with the current environment. The + read-only register `.linetabs' is set to 1 if in line-tabs mode, + and 0 in normal mode. + +* Menu: + +* Leaders:: +* Fields:: + + +File: groff, Node: Tabs and Fields-Footnotes, Up: Tabs and Fields + + (1) "Tab repetition character" is a misnomer since it is an output +glyph. + + +File: groff, Node: Leaders, Next: Fields, Prev: Tabs and Fields, Up: Tabs and Fields + +Leaders +------- + + Sometimes it may may be desirable to use the `tc' request to fill a +particular tab stop with a given glyph (for example dots in a table of +contents), but also normal tab stops on the rest of the line. For this +`gtroff' provides an alternate tab mechanism, called "leaders" which +does just that. + + A leader character (character code 1) behaves similarly to a tab +character: It moves to the next tab stop. The only difference is that +for this movement, the fill glyph defaults to a period character and +not to space. + + - Escape: \a + This escape is a non-interpreted leader character. In copy mode + (*note Copy-in Mode::), `\a' is the same as a real leader + character. + + - Request: .lc [fill-glyph] + Declare the "leader repetition character".(1) (*note + Leaders-Footnote-1::) Without an argument, leaders act the same as + tabs (i.e., using whitespace for filling). `gtroff''s start-up + value is a dot (`.'). The value of the leader repetition + character is associated with the current environment (*note + Environments::). + + For a table of contents, to name an example, tab stops may be +defined so that the section number is one tab stop, the title is the +second with the remaining space being filled with a line of dots, and +then the page number slightly separated from the dots. + + + .ds entry 1.1\tFoo\a\t12 + .lc . + .ta 1i 5i +.25i + \*[entry] + +This produces + + + 1.1 Foo.......................................... 12 + + +File: groff, Node: Leaders-Footnotes, Up: Leaders + + (1) "Leader repetition character" is a misnomer since it is an +output glyph. + + +File: groff, Node: Fields, Prev: Leaders, Up: Tabs and Fields + +Fields +------ + + "Fields" are a more general way of laying out tabular data. A field +is defined as the data between a pair of "delimiting characters". It +contains substrings which are separated by "padding characters". The +width of a field is the distance on the _input_ line from the position +where the field starts to the next tab stop. A padding character +inserts stretchable space similar to TeX's `\hss' command (thus it can +even be negative) to make the sum of all substring lengths plus the +stretchable space equal to the field width. If more than one padding +character is inserted, the available space is evenly distributed among +them. + + - Request: .fc [delim-char [padding-char]] + Define a delimiting and a padding character for fields. If the + latter is missing, the padding character defaults to a space + character. If there is no argument at all, the field mechanism is + disabled (which is the default). Note that contrary to e.g. the + tab repetition character, delimiting and padding characters are + _not_ associated to the current environment (*note Environments::). + + Example: + + + .fc # ^ + .ta T 3i + #foo^bar^smurf# + .br + #foo^^bar^smurf# + + and here the result: + + + foo bar smurf + foo bar smurf + + + +File: groff, Node: Character Translations, Next: Troff and Nroff Mode, Prev: Tabs and Fields, Up: gtroff Reference + +Character Translations +====================== + + The control character (`.') and the no-break control character (`'') +can be changed with the `cc' and `c2' requests, respectively. + + - Request: .cc [c] + Set the control character to C. With no argument the default + control character `.' is restored. The value of the control + character is associated with the current environment (*note + Environments::). + + - Request: .c2 [c] + Set the no-break control character to C. With no argument the + default control character `'' is restored. The value of the + no-break control character is associated with the current + environment (*note Environments::). + + - Request: .eo + Disable the escape mechanism completely. After executing this + request, the backslash character `\' no longer starts an escape + sequence. + + This request can be very helpful in writing macros since it is not + necessary then to double the escape character. Here an example: + + + .\" This is a simplified version of the + .\" .BR request from the man macro package + .eo + .de BR + . ds result \& + . while (\n[.$] >= 2) \{\ + . as result \fB\$1\fR\$2 + . shift 2 + . \} + . if \n[.$] .as result \fB\$1 + \*[result] + . ft R + .. + .ec + + + - Request: .ec [c] + Set the escape character to C. With no argument the default + escape character `\' is restored. It can be also used to + re-enable the escape mechanism after an `eo' request. + + Note that changing the escape character globally will likely break + macro packages since `gtroff' has no mechanism to `intern' macros, + i.e., to convert a macro definition into an internal form which is + independent of its representation (TeX has this mechanism). If a + macro is called, it is executed literally. + + - Request: .ecs + - Request: .ecr + The `ecs' request saves the current escape character in an + internal register. Use this request in combination with the `ec' + request to temporarily change the escape character. + + The `ecr' request restores the escape character saved with `ecs'. + Without a previous call to `ecs', this request sets the escape + character to `\'. + + - Escape: \\ + - Escape: \e + - Escape: \E + Print the current escape character (which is the backslash + character `\' by default). + + `\\' is a `delayed' backslash; more precisely, it is the default + escape character followed by a backslash, which no longer has + special meaning due to the leading escape character. It is _not_ + an escape sequence in the usual sense! In any unknown escape + sequence `\X' the escape character is ignored and X is printed. + But if X is equal to the current escape character, no warning is + emitted. + + As a consequence, only at top-level or in a diversion a backslash + glyph is printed; in copy-in mode, it expands to a single + backslash which then combines with the following character to an + escape sequence. + + The `\E' escape differs from `\e' by printing an escape character + that is not interpreted in copy mode. Use this to define strings + with escapes that work when used in copy mode (for example, as a + macro argument). The following example defines strings to begin + and end a superscript: + + + .ds { \v'-.3m'\s'\Es[.s]*60/100' + .ds } \s0\v'.3m' + + Another example to demonstrate the differences between the various + escape sequences, using a strange escape character, `-'. + + + .ec - + .de xxx + --A'123' + .. + .xxx + => -A'foo' + + The result is surprising for most users, expecting `1' since `foo' + is a valid identifier. What has happened? As mentioned above, + the leading escape character makes the following character + ordinary. Written with the default escape character the sequence + `--' becomes `\-' - this is the minus sign. + + If the escape character followed by itself is a valid escape + sequence, only `\E' yields the expected result: + + + .ec - + .de xxx + -EA'123' + .. + .xxx + => 1 + + + - Escape: \. + Similar to `\\', the sequence `\.' isn't a real escape sequence. + As before, a warning message is suppressed if the escape character + is followed by a dot, and the dot itself is printed. + + + .de foo + . nop foo + . + . de bar + . nop bar + \\.. + . + .. + .foo + .bar + => foo bar + + The first backslash is consumed while the macro is read, and the + second is swallowed while exexuting macro `foo'. + + A "translation" is a mapping of an input character to an output +glyph. The mapping occurs at output time, i.e., the input character +gets assigned the metric information of the mapped output character +right before input tokens are converted to nodes (*note Gtroff +Internals::, for more on this process). + + - Request: .tr abcd... + - Request: .trin abcd... + Translate character A to glyph B, character C to glyph D, etc. If + there is an odd number of arguments, the last one is translated to + an unstretchable space (`\ '). + + The `trin' request is identical to `tr', but when you unformat a + diversion with `asciify' it ignores the translation. *Note + Diversions::, for details about the `asciify' request. + + Some notes: + + * Special characters (`\(XX', `\[XXX]', `\C'XXX'', `\'', `\`', + `\-', `\_'), glyphs defined with the `char' request, and + numbered glyphs (`\N'XXX'') can be translated also. + + * The `\e' escape can be translated also. + + * Characters can be mapped onto the `\%' and `\~' escapes (but + `\%' and `\~' can't be mapped onto another glyph). + + * The following characters can't be translated: space (with one + exception, see below), backspace, newline, leader (and `\a'), + tab (and `\t'). + + * Translations are not considered for finding the soft hyphen + character set with the `shc' request. + + * The pair `C\&' (this is an arbitrary character C followed by + the zero width space character) maps this character to + nothing. + + + .tr a\& + foo bar + => foo br + + It is even possible to map the space character to nothing: + + + .tr aa \& + foo bar + => foobar + + As shown in the example, the space character can't be the + first character/glyph pair as an argument of `tr'. + Additionally, it is not possible to map the space character + to any other glyph; requests like `.tr aa x' undo `.tr aa \&' + instead. + + If justification is active, lines are justified in spite of + the `empty' space character (but there is no minimal + distance, i.e. the space character, between words). + + * After an output glyph has been constructed (this happens at + the moment immediately before the glyph is appended to an + output glyph list, either by direct output, in a macro, + diversion, or string), it is no longer affected by `tr'. + + * Translating character to glyphs where one of them or both are + undefined is possible also; `tr' does not check whether the + entities in its argument do exist. + + *Note Gtroff Internals::. + + * `troff' no longer has a hard-coded dependency on Latin-1; all + `charXXX' entities have been removed from the font + description files. This has a notable consequence which + shows up in warnings like `can't find character with input + code XXX' if the `tr' request isn't handled properly. + + Consider the following translation: + + + .tr e'E' + + This maps input character `e'' onto glyph `E'', which is + identical to glyph `char201'. But this glyph intentionally + doesn't exist! Instead, `\[char201]' is treated as an input + character entity and is by default mapped onto `\['E]', and + `gtroff' doesn't handle translations of translations. + + The right way to write the above translation is + + + .tr e'\['E] + + With other words, the first argument of `tr' should be an + input character or entity, and the second one a glyph entity. + + * Without an argument, the `tr' request is ignored. + + - Request: .trnt abcd... + `trnt' is the same as the `tr' request except that the + translations do not apply to text that is transparently throughput + into a diversion with `\!'. *Note Diversions::, for more + information. + + For example, + + + .tr ab + .di x + \!.tm a + .di + .x + + prints `b' to the standard error stream; if `trnt' is used instead + of `tr' it prints `a'. + + +File: groff, Node: Troff and Nroff Mode, Next: Line Layout, Prev: Character Translations, Up: gtroff Reference + +Troff and Nroff Mode +==================== + + Originally, `nroff' and `troff' were two separate programs, the +former for TTY output, the latter for everything else. With GNU +`troff', both programs are merged into one executable, sending its +output to a device driver (`grotty' for TTY devices, `grops' for +POSTSCRIPT, etc.) which interprets the intermediate output of `gtroff'. +For UNIX `troff' it makes sense to talk about "Nroff mode" and "Troff +mode" since the differences are hardcoded. For GNU `troff', this +distinction is not appropriate because `gtroff' simply takes the +information given in the font files for a particular device without +handling requests specially if a TTY output device is used. + + Usually, a macro package can be used with all output devices. +Nevertheless, it is sometimes necessary to make a distinction between +TTY and non-TTY devices: `gtroff' provides two built-in conditions `n' +and `t' for the `if', `ie', and `while' requests to decide whether +`gtroff' shall behave like `nroff' or like `troff'. + + - Request: .troff + Make the `t' built-in condition true (and the `n' built-in + condition false) for `if', `ie', and `while' conditional requests. + This is the default if `gtroff' (_not_ `groff') is started with + the `-R' switch to avoid loading of the start-up files `troffrc' + and `troffrc-end'. Without `-R', `gtroff' stays in troff mode if + the output device is not a TTY (e.g. `ps'). + + - Request: .nroff + Make the `n' built-in condition true (and the `t' built-in + condition false) for `if', `ie', and `while' conditional requests. + This is the default if `gtroff' uses a TTY output device; the + code for switching to nroff mode is in the file `tty.tmac' which + is loaded by the start-up file `troffrc'. + + *Note Conditionals and Loops::, for more details on built-in +conditions. + + +File: groff, Node: Line Layout, Next: Line Control, Prev: Troff and Nroff Mode, Up: gtroff Reference + +Line Layout +=========== + + The following drawing shows the dimensions which `gtroff' uses for +placing a line of output onto the page. They are labeled with the +request which manipulates each dimension. + + + -->| in |<-- + |<-----------ll------------>| + +----+----+----------------------+----+ + | : : : | + +----+----+----------------------+----+ + -->| po |<-- + |<--------paper width---------------->| + +These dimensions are: + +`po' + "Page offset" - this is the leftmost position of text on the final + output, defining the "left margin". + +`in' + "Indentation" - this is the distance from the left margin where + text is printed. + +`ll' + "Line length" - this is the distance from the left margin to right + margin. + + A simple demonstration: + + + .ll 3i + This is text without indentation. + The line length has been set to 3\~inch. + .in +.5i + .ll -.5i + Now the left and right margins are both increased. + .in + .ll + Calling .in and .ll without parameters restore + the previous values. + + Result: + + + This is text without indenta- + tion. The line length has + been set to 3 inch. + Now the left and + right margins are + both increased. + Calling .in and .ll without + parameters restore the previ- + ous values. + + - Request: .po [offset] + - Request: .po +offset + - Request: .po -offset + - Register: \n[.o] + Set horizontal page offset to OFFSET (or increment or decrement + the current value by OFFSET). Note that this request does not + cause a break, so changing the page offset in the middle of text + being filled may not yield the expected result. The initial value + is 1i. For TTY output devices, it is set to 0 in the startup file + `troffrc'; the default scaling indicator is `m' (and not `v' as + incorrectly documented in the original UNIX troff manual). + + The current page offset can be found in the read-only number + register `.o'. + + If `po' is called without an argument, the page offset is reset to + the previous value before the last call to `po'. + + + .po 3i + \n[.o] + => 720 + .po -1i + \n[.o] + => 480 + .po + \n[.o] + => 720 + + + - Request: .in [indent] + - Request: .in +indent + - Request: .in -indent + - Register: \n[.i] + Set indentation to INDENT (or increment or decrement the current + value by INDENT). This request causes a break. Initially, there + is no indentation. + + If `in' is called without an argument, the indentation is reset to + the previous value before the last call to `in'. The default + scaling indicator is `m'. + + The indentation is associated with the current environment (*note + Environments::). + + If a negative indentation value is specified (which is not + allowed), `gtroff' emits a warning of type `range' and sets the + indentation to zero. + + The effect of `in' is delayed until a partially collected line (if + it exists) is output. A temporary indent value is reset to zero + also. + + The current indentation (as set by `in') can be found in the + read-only number register `.i'. + + - Request: .ti offset + - Request: .ti +offset + - Request: .ti -offset + - Register: \n[.in] + Temporarily indent the next output line by OFFSET. If an + increment or decrement value is specified, adjust the temporary + indentation relative to the value set by the `in' request. + + This request causes a break; its value is associated with the + current environment (*note Environments::). The default scaling + indicator is `m'. A call of `ti' without an argument is ignored. + + If the total indentation value is negative (which is not allowed), + `gtroff' emits a warning of type `range' and sets the temporary + indentation to zero. `Total indentation' is either OFFSET if + specified as an absolute value, or the temporary plus normal + indentation, if OFFSET is given as a relative value. + + The effect of `ti' is delayed until a partially collected line (if + it exists) is output. + + The read-only number register `.in' is the indentation that applies + to the current output line. + + The difference between `.i' and `.in' is that the latter takes + into account whether a partially collected line still uses the old + indentation value or a temporary indentation value is active. + + - Request: .ll [length] + - Request: .ll +length + - Request: .ll -length + - Register: \n[.l] + - Register: \n[.ll] + Set the line length to LENGTH (or increment or decrement the + current value by LENGTH). Initially, the line length is set to + 6.5i. The effect of `ll' is delayed until a partially collected + line (if it exists) is output. The default scaling indicator is + `m'. + + If `ll' is called without an argument, the line length is reset to + the previous value before the last call to `ll'. If a negative + line length is specified (which is not allowed), `gtroff' emits a + warning of type `range' and sets the line length to zero. + + The line length is associated with the current environment (*note + Environments::). + + The current line length (as set by `ll') can be found in the + read-only number register `.l'. The read-only number register + `.ll' is the line length that applies to the current output line. + + Similar to `.i' and `.in', the difference between `.l' and `.ll' + is that the latter takes into account whether a partially + collected line still uses the old line length value. + + +File: groff, Node: Line Control, Next: Page Layout, Prev: Line Layout, Up: gtroff Reference + +Line Control +============ + + It is important to understand how `gtroff' handles input and output +lines. + + Many escapes use positioning relative to the input line. For +example, this + + + This is a \h'|1.2i'test. + + This is a + \h'|1.2i'test. + +produces + + + This is a test. + + This is a test. + + The main usage of this feature is to define macros which act exactly +at the place where called. + + + .\" A simple macro to underline a word + .de underline + . nop \\$1\l'|0\[ul]' + .. + +In the above example, `|0' specifies a negative distance from the +current position (at the end of the just emitted argument `\$1') back +to the beginning of the input line. Thus, the `\l' escape draws a line +from right to left. + + `gtroff' makes a difference between input and output line +continuation; the latter is also called "interrupting" a line. + + - Escape: \<RET> + - Escape: \c + - Register: \n[.int] + Continue a line. `\<RET>' (this is a backslash at the end of a + line immediately followed by a newline) works on the input level, + suppressing the effects of the following newline in the input. + + + This is a \ + .test + => This is a .test + + The `|' operator is also affected. + + `\c' works on the output level. Anything after this escape on the + same line is ignored, except `\R' which works as usual. Anything + before `\c' on the same line will be appended to the current + partial output line. The next non-command line after an + interrupted line counts as a new input line. + + The visual results depend on whether no-fill mode is active. + + * If no-fill mode is active (using the `nf' request), the next + input text line after `\c' will be handled as a continuation + of the same input text line. + + + .nf + This is a \c + test. + => This is a test. + + * If fill mode is active (using the `fi' request), a word + interrupted with `\c' will be continued with the text on the + next input text line, without an intervening space. + + + This is a te\c + st. + => This is a test. + + + Note that an intervening control line which causes a break is + stronger than `\c', flushing out the current partial line in the + usual way. + + The `.int' register contains a positive value if the last output + line was interrupted with `\c'; this is associated with the + current environment (*note Environments::). + + + +File: groff, Node: Page Layout, Next: Page Control, Prev: Line Control, Up: gtroff Reference + +Page Layout +=========== + + `gtroff' provides some very primitive operations for controlling +page layout. + + - Request: .pl [length] + - Request: .pl +length + - Request: .pl -length + - Register: \n[.p] + Set the "page length" to LENGTH (or increment or decrement the + current value by LENGTH). This is the length of the physical + output page. The default scaling indicator is `v'. + + The current setting can be found in the read-only number register + `.p'. + + Note that this only specifies the size of the page, not the top and + bottom margins. Those are not set by `gtroff' directly. *Note + Traps::, for further information on how to do this. + + Negative `pl' values are possible also, but not very useful: No + trap is sprung, and each line is output on a single page (thus + suppressing all vertical spacing). + + If no argument or an invalid argument is given, `pl' sets the page + length to 11i. + + `gtroff' provides several operations which help in setting up top +and bottom titles (or headers and footers). + + - Request: .tl 'left'center'right' + Print a "title line". It consists of three parts: a left + justified portion, a centered portion, and a right justified + portion. The argument separator `'' can be replaced with any + character not occurring in the title line. The `%' character is + replaced with the current page number. This character can be + changed with the `pc' request (see below). + + Without argument, `tl' is ignored. + + Some notes: + + * A title line is not restricted to the top or bottom of a page. + + * `tl' prints the title line immediately, ignoring a partially + filled line (which stays untouched). + + * It is not an error to omit closing delimiters. For example, + `.tl /foo' is equivalent to `.tl /foo///': It prints a title + line with the left justified word `foo'; the centered and + right justfied parts are empty. + + * `tl' accepts the same parameter delimiting characters as the + `\A' escape; see *Note Escapes::. + + - Request: .lt [length] + - Request: .lt +length + - Request: .lt -length + - Register: \n[.lt] + The title line is printed using its own line length, which is + specified (or incremented or decremented) with the `lt' request. + Initially, the title line length is set to 6.5i. If a negative + line length is specified (which is not allowed), `gtroff' emits a + warning of type `range' and sets the title line length to zero. + The default scaling indicator is `m'. If `lt' is called without + an argument, the title length is reset to the previous value + before the last call to `lt'. + + The current setting of this is available in the `.lt' read-only + number register; it is associated with the current environment + (*note Environments::). + + + - Request: .pn page + - Request: .pn +page + - Request: .pn -page + - Register: \n[.pn] + Change (increase or decrease) the page number of the _next_ page. + The only argument is the page number; the request is ignored + without a parameter. + + The read-only number register `.pn' contains the number of the next + page: either the value set by a `pn' request, or the number of the + current page plus 1. + + - Register: \n[%] + A read-write register holding the current page number. + + - Request: .pc [char] + Change the page number character (used by the `tl' request) to a + different character. With no argument, this mechanism is disabled. + Note that this doesn't affect the number register `%'. + + *Note Traps::. + |