summaryrefslogtreecommitdiffstats
path: root/contrib/groff/doc/groff-3
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/groff/doc/groff-3')
-rw-r--r--contrib/groff/doc/groff-31374
1 files changed, 1374 insertions, 0 deletions
diff --git a/contrib/groff/doc/groff-3 b/contrib/groff/doc/groff-3
new file mode 100644
index 0000000..b808a39
--- /dev/null
+++ b/contrib/groff/doc/groff-3
@@ -0,0 +1,1374 @@
+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: Tab Stops, Next: Implicit Line Breaks, Prev: Sentences, Up: Text
+
+Tab Stops
+---------
+
+ `gtroff' translates "tabulator characters", also called "tabs"
+(normally code point ASCII `0x09' or EBCDIC `0x05'), in the input into
+movements to the next tabulator stop. These tab stops are initially
+located every half inch across the page. Using this, simple tables can
+be made easily. However, it can often be deceptive as the appearance
+(and width) of the text on a terminal and the results from `gtroff' can
+vary greatly.
+
+ Also, a possible sticking point is that lines beginning with tab
+characters are still filled, again producing unexpected results. For
+example, the following input
+
+ 1 2 3
+ 4 5
+
+produces
+
+ 1 2 3 4 5
+
+ *Note Tabs and Fields::.
+
+
+File: groff, Node: Implicit Line Breaks, Prev: Tab Stops, Up: Text
+
+Implicit Line Breaks
+--------------------
+
+ An important concept in `gtroff' is the "break". When a break
+occurs, `gtroff' outputs the partially filled line (unjustified), and
+resumes collecting and filling text on the next output line.
+
+ There are several ways to cause a break in `gtroff'. A blank line
+not only causes a break, but it also outputs a one-line vertical space
+(effectively a blank line). Note that this behaviour can be modified
+with the blank line macro request `blm'. *Note Blank Line Traps::.
+
+ A line that begins with a space causes a break and the space is
+output at the beginning of the next line. Note that this space isn't
+adjusted, even in fill mode.
+
+ The end of file also causes a break - otherwise the last line of the
+document may vanish!
+
+ Certain requests also cause breaks, implicitly or explicitly. This
+is discussed in *Note Manipulating Filling and Adjusting::.
+
+
+File: groff, Node: Input Conventions, Next: Measurements, Prev: Text, Up: gtroff Reference
+
+Input Conventions
+=================
+
+ Since `gtroff' does filling automatically, it is traditional in
+`groff' not to try and type things in as nicely formatted paragraphs.
+These are some conventions commonly used when typing `gtroff' text:
+
+ * Break lines after punctuation, particularly at the end of a
+ sentence and in other logical places. Keep separate phrases on
+ lines by themselves, as entire phrases are often added or deleted
+ when editing.
+
+ * Try to keep lines less than 40-60 characters, to allow space for
+ inserting more text.
+
+ * Do not try to do any formatting in a WYSIWYG manner (i.e., don't
+ try using spaces to get proper indentation).
+
+
+File: groff, Node: Measurements, Next: Expressions, Prev: Input Conventions, Up: gtroff Reference
+
+Measurements
+============
+
+ `gtroff' (like many other programs) requires numeric parameters to
+specify various measurements. Most numeric parameters(1) (*note
+Measurements-Footnote-1::) may have a "measurement unit" attached.
+These units are specified as a single character which immediately
+follows the number or expression. Each of these units are understood,
+by `gtroff', to be a multiple of its "basic unit". So, whenever a
+different measurement unit is specified `gtroff' converts this into its
+"basic units". This basic unit, represented by a `u', is a device
+dependent measurement which is quite small, ranging from 1/75th to
+1/72000th of an inch. The values may be given as fractional numbers;
+however, fractional basic units are always rounded to integers.
+
+ Some of the measurement units are completely independent of any of
+the current settings (e.g. type size) of `gtroff'.
+
+`i'
+ Inches. An antiquated measurement unit still in use in certain
+ backwards countries with incredibly low-cost computer equipment.
+ One inch is equal to 2.54cm.
+
+`c'
+ Centimeters. One centimeter is equal to 0.3937in.
+
+`p'
+ Points. This is a typesetter's measurement used for measure type
+ size. It is 72 points to an inch.
+
+`P'
+ Pica. Another typesetting measurement. 6 Picas to an inch (and
+ 12 points to a pica).
+
+`s'
+`z'
+ *Note Fractional Type Sizes::, for a discussion of these units.
+
+`f'
+ Fractions. Value is 65536. *Note Colors::, for usage.
+
+ The other measurements understood by `gtroff' depend on settings
+currently in effect in `gtroff'. These are very useful for specifying
+measurements which should look proper with any size of text.
+
+`m'
+ Ems. This unit is equal to the current font size in points. So
+ called because it is _approximately_ the width of the letter `m'
+ in the current font.
+
+`n'
+ Ens. In `groff', this is half of an em.
+
+`v'
+ Vertical space. This is equivalent to the current line spacing.
+ *Note Sizes::, for more information about this.
+
+`M'
+ 100ths of an em.
+
+* Menu:
+
+* Default Units::
+
+
+File: groff, Node: Measurements-Footnotes, Up: Measurements
+
+ (1) those that specify vertical or horizontal motion or a type size
+
+
+File: groff, Node: Default Units, Prev: Measurements, Up: Measurements
+
+Default Units
+-------------
+
+ Many requests take a default unit. While this can be helpful at
+times, it can cause strange errors in some expressions. For example,
+the line length request expects em units. Here are several attempts to
+get a line length of 3.5 inches and their results:
+
+
+ 3.5i => 3.5i
+ 7/2 => 0i
+ 7/2i => 0i
+ (7 / 2)u => 0i
+ 7i/2 => 0.1i
+ 7i/2u => 3.5i
+
+Everything is converted to basic units first. In the above example it
+is assumed that 1i equals 240u, and 1m equals 10p (thus 1m equals 33u).
+The value 7i/2 is first handled as 7i/2m, then converted to 1680u/66u
+which is 25u, and this is approximately 0.1i. As can be seen, a
+scaling indicator after a closing parenthesis is simply ignored.
+
+ Thus, the safest way to specify measurements is to always attach a
+scaling indicator. If you want to multiply or divide by a certain
+scalar value, use `u' as the unit for that value.
+
+
+File: groff, Node: Expressions, Next: Identifiers, Prev: Measurements, Up: gtroff Reference
+
+Expressions
+===========
+
+ `gtroff' has most arithmetic operators common to other languages:
+
+ * Arithmetic: `+' (addition), `-' (subtraction), `/' (division), `*'
+ (multiplication), `%' (modulo).
+
+ `gtroff' only provides integer arithmetic. The internal type used
+ for computing results is `int', which is usually a 32bit signed
+ integer.
+
+ * Comparison: `<' (less than), `>' (greater than), `<=' (less than
+ or equal), `>=' (greater than or equal), `=' (equal), `==' (the
+ same as `=').
+
+ * Logical: `&' (logical and), `:' (logical or).
+
+ * Unary operators: `-' (negating, i.e. changing the sign), `+' (just
+ for completeness; does nothing in expressions), `!' (logical not;
+ this works only within `if' and `while' requests). See below for
+ the use of unary operators in motion requests.
+
+ * Extrema: `>?' (maximum), `<?' (minimum).
+
+ Example:
+
+
+ .nr x 5
+ .nr y 3
+ .nr z (\n[x] >? \n[y])
+
+ The register `z' now contains 5.
+
+ * Scaling: `(C;E)'. Evaluate E using C as the default scaling
+ indicator. If C is missing, ignore scaling indicators in the
+ evaluation of E.
+
+ Parentheses may be used as in any other language. However, in
+`gtroff' they are necessary to ensure order of evaluation. `gtroff'
+has no operator precedence; expressions are evaluated left to right.
+This means that `gtroff' evaluates `3+5*4' as if it were parenthesized
+like `(3+5)*4', not as `3+(5*4)', as might be expected.
+
+ For many requests which cause a motion on the page, the unary
+operators `+' and `-' work differently if leading an expression. They
+then indicate a motion relative to the current position (down or up,
+respectively).
+
+ Similarly, a leading `|' operator indicates an absolute position.
+For vertical movements, it specifies the distance from the top of the
+page; for horizontal movements, it gives the distance from the beginning
+of the _input_ line.
+
+ `+' and `-' are also treated differently by the following requests
+and escapes: `bp', `in', `ll', `lt', `nm', `nr', `pl', `pn', `po', `ps',
+`pvs', `rt', `ti', `\H', `\R', and `\s'. Here, leading plus and minus
+signs indicate increments and decrements.
+
+ *Note Setting Registers::, for some examples.
+
+ - Escape: \B'ANYTHING'
+ Return 1 if ANYTHING is a valid numeric expression; or 0 if
+ ANYTHING is empty or not a valid numeric expression.
+
+ Due to the way arguments are parsed, spaces are not allowed in
+expressions, unless the entire expression is surrounded by parentheses.
+
+ *Note Request Arguments::, and *Note Conditionals and Loops::.
+
+
+File: groff, Node: Identifiers, Next: Embedded Commands, Prev: Expressions, Up: gtroff Reference
+
+Identifiers
+===========
+
+ Like any other language, `gtroff' has rules for properly formed
+"identifiers". In `gtroff', an identifier can be made up of almost any
+printable character, with the exception of the following characters:
+
+ * Whitespace characters (spaces, tabs, and newlines).
+
+ * Backspace (ASCII `0x08' or EBCDIC `0x16') and character code
+ `0x01'.
+
+ * The following input characters are invalid and are ignored if
+ `groff' runs on a machine based on ASCII, causing a warning
+ message of type `input' (see *Note Debugging::, for more details):
+ `0x00', `0x0B', `0x0D'-`0x1F', `0x80'-`0x9F'.
+
+ And here are the invalid input characters if `groff' runs on an
+ EBCDIC host: `0x00', `0x08', `0x09', `0x0B', `0x0D'-`0x14',
+ `0x17'-`0x1F', `0x30'-`0x3F'.
+
+ Currently, some of these reserved codepoints are used internally,
+ thus making it non-trivial to extend `gtroff' to cover Unicode or
+ other character sets and encodings which use characters of these
+ ranges.
+
+ Note that invalid characters are removed before parsing; an
+ identifier `foo', followed by an invalid character, followed by
+ `bar' is treated as `foobar'.
+
+ For example, any of the following is valid.
+
+
+ br
+ PP
+ (l
+ end-list
+ @_
+
+Note that identifiers longer than two characters with a closing bracket
+(`]') in its name can't be accessed with escape sequences which expect
+an identifier as a parameter. For example, `\[foo]]' accesses the
+glyph `foo', followed by `]', whereas `\C'foo]'' really asks for glyph
+`foo]'.
+
+ To avoid problems with the `refer' preprocessor, macro names should
+not start with `[' or `]'. Due to backwards compatibility, everything
+after `.[' and `.]' is handled as a special argument to `refer'. For
+example, `.[foo' makes `refer' to start a reference, using `foo' as a
+parameter.
+
+ - Escape: \A'IDENT'
+ Test whether an identifier IDENT is valid in `gtroff'. It expands
+ to the character 1 or 0 according to whether its argument (usually
+ delimited by quotes) is or is not acceptable as the name of a
+ string, macro, diversion, number register, environment, or font.
+ It returns 0 if no argument is given. This is useful for looking
+ up user input in some sort of associative table.
+
+
+ \A'end-list'
+ => 1
+
+
+ *Note Escapes::, for details on parameter delimiting characters.
+
+ Identifiers in `gtroff' can be any length, but, in some contexts,
+`gtroff' needs to be told where identifiers end and text begins (and in
+different ways depending on their length):
+
+ * Single character.
+
+ * Two characters. Must be prefixed with `(' in some situations.
+
+ * Arbitrary length (`gtroff' only). Must be bracketed with `['
+ and `]' in some situations. Any length identifier can be put in
+ brackets.
+
+ Unlike many other programming languages, undefined identifiers are
+silently ignored or expanded to nothing. When `gtroff' finds an
+undefined identifier, it emits a warning, doing the following:
+
+ * If the identifier is a string, macro, or diversion, `gtroff'
+ defines it as empty.
+
+ * If the identifier is a number register, `gtroff' defines it with a
+ value of 0.
+
+ *Note Warnings::., *Note Interpolating Registers::, and *Note
+Strings::.
+
+ Note that macros, strings, and diversions share the same name space.
+
+
+ .de xxx
+ . nop foo
+ ..
+ .
+ .di xxx
+ bar
+ .br
+ .di
+ .
+ .xxx
+ => bar
+
+As can be seen in the previous example, `gtroff' reuses the identifier
+`xxx', changing it from a macro to a diversion. No warning is emitted!
+The contents of the first macro definition is lost.
+
+ *Note Interpolating Registers::, and *Note Strings::.
+
+
+File: groff, Node: Embedded Commands, Next: Registers, Prev: Identifiers, Up: gtroff Reference
+
+Embedded Commands
+=================
+
+ Most documents need more functionality beyond filling, adjusting and
+implicit line breaking. In order to gain further functionality,
+`gtroff' allows commands to be embedded into the text, in two ways.
+
+ The first is a "request" which takes up an entire line, and does
+some large-scale operation (e.g. break lines, start new pages).
+
+ The other is an "escape" which can be usually embedded anywhere in
+the text; most requests can accept it even as an argument. Escapes
+generally do more minor operations like sub- and superscripts, print a
+symbol, etc.
+
+* Menu:
+
+* Requests::
+* Macros::
+* Escapes::
+
+
+File: groff, Node: Requests, Next: Macros, Prev: Embedded Commands, Up: Embedded Commands
+
+Requests
+--------
+
+ A request line begins with a control character, which is either a
+single quote (`'', the "no-break control character") or a period (`.',
+the normal "control character"). These can be changed; see *Note
+Character Translations::, for details. After this there may be
+optional tabs or spaces followed by an identifier which is the name of
+the request. This may be followed by any number of space-separated
+arguments (_no_ tabs here).
+
+ Since a control character followed by whitespace only is ignored, it
+is common practice to use this feature for structuring the source code
+of documents or macro packages.
+
+
+ .de foo
+ . tm This is foo.
+ ..
+ .
+ .
+ .de bar
+ . tm This is bar.
+ ..
+
+ Another possibility is to use the blank line macro request `blm' by
+assigning an empty macro to it.
+
+
+ .de do-nothing
+ ..
+ .blm do-nothing \" activate blank line macro
+
+ .de foo
+ . tm This is foo.
+ ..
+
+
+ .de bar
+ . tm This is bar.
+ ..
+
+ .blm \" deactivate blank line macro
+
+ *Note Blank Line Traps::.
+
+ To begin a line with a control character without it being
+interpreted, precede it with `\&'. This represents a zero width space,
+which means it does not affect the output.
+
+ In most cases the period is used as a control character. Several
+requests cause a break implicitly; using the single quote control
+character prevents this.
+
+* Menu:
+
+* Request Arguments::
+
+
+File: groff, Node: Request Arguments, Prev: Requests, Up: Requests
+
+Request Arguments
+.................
+
+ Arguments to requests (and macros) are processed much like the shell:
+The line is split into arguments according to spaces.(1) (*note Request
+Arguments-Footnote-1::) An argument which is intended to contain
+spaces can either be enclosed in double quotes, or have the spaces
+"escaped" with backslashes.
+
+ Here are a few examples:
+
+
+ .uh The Mouse Problem
+ .uh "The Mouse Problem"
+ .uh The\ Mouse\ Problem
+
+The first line is the `uh' macro being called with 3 arguments, `The',
+`Mouse', and `Problem'. The latter two have the same effect of calling
+the `uh' macro with one argument, `The Mouse Problem'.(2) (*note
+Request Arguments-Footnote-2::)
+
+ A double quote which isn't preceded by a space doesn't start a macro
+argument. If not closing a string, it is printed literally.
+
+ For example,
+
+
+ .xxx a" "b c" "de"fg"
+
+has the arguments `a"', `b c', `de', and `fg"'. Don't rely on this
+obscure behaviour!
+
+ There are two possibilities to get a double quote reliably.
+
+ * Enclose the whole argument with double quotes and use two
+ consecutive double quotes to represent a single one. This
+ traditional solution has the disadvantage that double quotes don't
+ survive argument expansion again if called in compatibility mode
+ (using the `-C' option of `groff'):
+
+
+ .de xx
+ . tm xx: `\\$1' `\\$2' `\\$3'
+ .
+ . yy "\\$1" "\\$2" "\\$3"
+ ..
+ .de yy
+ . tm yy: `\\$1' `\\$2' `\\$3'
+ ..
+ .xx A "test with ""quotes""" .
+ => xx: `A' `test with "quotes"' `.'
+ => yy: `A' `test with ' `quotes""'
+
+ If not in compatibility mode, you get the expected result
+
+
+ xx: `A' `test with "quotes"' `.'
+ yy: `A' `test with "quotes"' `.'
+
+ since `gtroff' preserves the input level.
+
+ * Use the double quote glyph `\(dq'. This works with and without
+ compatibility mode enabled since `gtroff' doesn't convert `\(dq'
+ back to a double quote input character.
+
+ Not that this method won't work with UNIX `troff' in general since
+ the glyph `dq' isn't defined normally.
+
+ Double quotes in the `ds' request are handled differently. *Note
+Strings::, for more details.
+
+
+File: groff, Node: Request Arguments-Footnotes, Up: Request Arguments
+
+ (1) Plan 9's `troff' implementation also allows tabs for argument
+separation - `gtroff' intentionally doesn't support this.
+
+ (2) The last solution, i.e., using escaped spaces, is "classical" in
+the sense that it can be found in most `troff' documents.
+Nevertheless, it is not optimal in all situations, since `\ ' inserts a
+fixed-width, non-breaking space character which can't stretch.
+`gtroff' provides a different command `\~' to insert a stretchable,
+non-breaking space.
+
+
+File: groff, Node: Macros, Next: Escapes, Prev: Requests, Up: Embedded Commands
+
+Macros
+------
+
+ `gtroff' has a "macro" facility for defining a series of lines which
+can be invoked by name. They are called in the same manner as requests
+- arguments also may be passed in the same manner.
+
+ *Note Writing Macros::, and *Note Request Arguments::.
+
+
+File: groff, Node: Escapes, Prev: Macros, Up: Embedded Commands
+
+Escapes
+-------
+
+ Escapes may occur anywhere in the input to `gtroff'. They usually
+begin with a backslash and are followed by a single character which
+indicates the function to be performed. The escape character can be
+changed; see *Note Character Translations::.
+
+ Escape sequences which require an identifier as a parameter accept
+three possible syntax forms.
+
+ * The next single character is the identifier.
+
+ * If this single character is an opening parenthesis, take the
+ following two characters as the identifier. Note that there is no
+ closing parenthesis after the identifier.
+
+ * If this single character is an opening bracket, take all characters
+ until a closing bracket as the identifier.
+
+Examples:
+
+
+ \fB
+ \n(XX
+ \*[TeX]
+
+ Other escapes may require several arguments and/or some special
+format. In such cases the argument is traditionally enclosed in single
+quotes (and quotes are always used in this manual for the definitions
+of escape sequences). The enclosed text is then processed according to
+what that escape expects. Example:
+
+
+ \l'1.5i\(bu'
+
+ Note that the quote character can be replaced with any other
+character which does not occur in the argument (even a newline or a
+space character) in the following escapes: `\o', `\b', and `\X'. This
+makes e.g.
+
+
+ A caf
+ \o
+ e\'
+
+
+ in Paris
+ => A cafe' in Paris
+
+possible, but it is better not to use this feature to avoid confusion.
+
+ The following escapes sequences (which are handled similarly to
+characters since they don't take a parameter) are also allowed as
+delimiters: `\%', `\ ', `\|', `\^', `\{', `\}', `\'', `\`', `\-', `\_',
+`\!', `\?', `\@', `\)', `\/', `\,', `\&', `\:', `\~', `\0', `\a', `\c',
+`\d', `\e', `\E', `\p', `\r', `\t', and `\u'. Again, don't use these
+if possible.
+
+ No newline characters as delimiters are allowed in the following
+escapes: `\A', `\B', `\Z', `\C', and `\w'.
+
+ Finally, the escapes `\D', `\h', `\H', `\l', `\L', `\N', `\R', `\s',
+`\S', `\v', and `\x' can't use the following characters as delimiters:
+
+ * The digits `0'-`9'.
+
+ * The (single-character) operators `+-/*%<>=&:().'.
+
+ * The space, tab, and newline characters.
+
+ * All escape sequences except `\%', `\:', `\{', `\}', `\'', `\`',
+ `\-', `\_', `\!', `\@', `\/', `\c', `\e', and `\p'.
+
+ To have a backslash (actually, the current escape character) appear
+in the output several escapes are defined: `\\', `\e' or `\E'. These
+are very similar, and only differ with respect to being used in macros
+or diversions. *Note Character Translations::, for an exact
+description of those escapes.
+
+ *Note Implementation Differences::, *Note Copy-in Mode::, and *Note
+Diversions::, *Note Identifiers::, for more information.
+
+* Menu:
+
+* Comments::
+
+
+File: groff, Node: Comments, Prev: Escapes, Up: Escapes
+
+Comments
+........
+
+ Probably one of the most(1) (*note Comments-Footnote-1::) common
+forms of escapes is the comment.
+
+ - Escape: \"
+ Start a comment. Everything to the end of the input line is
+ ignored.
+
+ This may sound simple, but it can be tricky to keep the comments
+ from interfering with the appearance of the final output.
+
+ If the escape is to the right of some text or a request, that
+ portion of the line is ignored, but the space leading up to it is
+ noticed by `gtroff'. This only affects the `ds' and `as' request
+ and its variants.
+
+ One possibly irritating idiosyncracy is that tabs must not be used
+ to line up comments. Tabs are not treated as whitespace between
+ the request and macro arguments.
+
+ A comment on a line by itself is treated as a blank line, because
+ after eliminating the comment, that is all that remains:
+
+
+ Test
+ \" comment
+ Test
+
+ produces
+
+
+ Test
+
+ Test
+
+ To avoid this, it is common to start the line with `.\"' which
+ causes the line to be treated as an undefined request and thus
+ ignored completely.
+
+ Another commenting scheme seen sometimes is three consecutive
+ single quotes (`'''') at the beginning of a line. This works, but
+ `gtroff' gives a warning about an undefined macro (namely `'''),
+ which is harmless, but irritating.
+
+ - Escape: \#
+ To avoid all this, `gtroff' has a new comment mechanism using the
+ `\#' escape. This escape works the same as `\"' except that the
+ newline is also ignored:
+
+
+ Test
+ \# comment
+ Test
+
+ produces
+
+
+ Test Test
+
+ as expected.
+
+ - Request: .ig yy
+ Ignore all input until `gtroff' encounters the macro named `.'YY
+ on a line by itself (or `..' if YY is not specified). This is
+ useful for commenting out large blocks of text:
+
+
+ text text text...
+ .ig
+ This is part of a large block
+ of text that has been
+ temporarily(?) commented out.
+
+ We can restore it simply by removing
+ the .ig request and the ".." at the
+ end of the block.
+ ..
+ More text text text...
+
+ produces
+
+
+ text text text... More text text text...
+
+ Note that the commented-out block of text does not cause a break.
+
+ The input is read in copy-mode; auto-incremented registers _are_
+ affected (*note Auto-increment::).
+
+
+File: groff, Node: Comments-Footnotes, Up: Comments
+
+ (1) Unfortunately, this is a lie. But hopefully future `gtroff'
+hackers will believe it `:-)'
+
+
+File: groff, Node: Registers, Next: Manipulating Filling and Adjusting, Prev: Embedded Commands, Up: gtroff Reference
+
+Registers
+=========
+
+ Numeric variables in `gtroff' are called "registers". There are a
+number of built-in registers, supplying anything from the date to
+details of formatting parameters.
+
+ *Note Identifiers::, for details on register identifiers.
+
+* Menu:
+
+* Setting Registers::
+* Interpolating Registers::
+* Auto-increment::
+* Assigning Formats::
+* Built-in Registers::
+
+
+File: groff, Node: Setting Registers, Next: Interpolating Registers, Prev: Registers, Up: Registers
+
+Setting Registers
+-----------------
+
+ Define or set registers using the `nr' request or the `\R' escape.
+
+ - Request: .nr ident value
+ - Escape: \R'IDENT VALUE'
+ Set number register IDENT to VALUE. If IDENT doesn't exist,
+ `gtroff' creates it.
+
+ The argument to `\R' usually has to be enclosed in quotes. *Note
+ Escapes::, for details on parameter delimiting characters.
+
+ The `\R' escape doesn't produce an input token in `gtroff'; with
+ other words, it vanishes completely after `gtroff' has processed
+ it.
+
+ For example, the following two lines are equivalent:
+
+
+ .nr a (((17 + (3 * 4))) % 4)
+ \R'a (((17 + (3 * 4))) % 4)'
+ => 1
+
+ Both `nr' and `\R' have two additional special forms to increment or
+decrement a register.
+
+ - Request: .nr ident +value
+ - Request: .nr ident -value
+ - Escape: \R'IDENT +VALUE'
+ - Escape: \R'IDENT -VALUE'
+ Increment (decrement) register IDENT by VALUE.
+
+
+ .nr a 1
+ .nr a +1
+ \na
+ => 2
+
+ To assign the negated value of a register to another register,
+ some care must be taken to get the desired result:
+
+
+ .nr a 7
+ .nr b 3
+ .nr a -\nb
+ \na
+ => 4
+ .nr a (-\nb)
+ \na
+ => -3
+
+ The surrounding parentheses prevent the interpretation of the
+ minus sign as a decrementing operator. An alternative is to start
+ the assignment with a `0':
+
+
+ .nr a 7
+ .nr b -3
+ .nr a \nb
+ \na
+ => 4
+ .nr a 0\nb
+ \na
+ => -3
+
+
+ - Request: .rr ident
+ Remove number register IDENT. If IDENT doesn't exist, the request
+ is ignored.
+
+ - Request: .rnn ident1 ident2
+ Rename number register IDENT1 to IDENT2. If either IDENT1 or
+ IDENT2 doesn't exist, the request is ignored.
+
+ - Request: .aln ident1 ident2
+ Create an alias IDENT1 for a number register IDENT2. The new name
+ and the old name are exactly equivalent. If IDENT1 is undefined,
+ a warning of type `reg' is generated, and the request is ignored.
+ *Note Debugging::, for information about warnings.
+
+
+File: groff, Node: Interpolating Registers, Next: Auto-increment, Prev: Setting Registers, Up: Registers
+
+Interpolating Registers
+-----------------------
+
+ Numeric registers can be accessed via the `\n' escape.
+
+ - Escape: \nI
+ - Escape: \n(ID
+ - Escape: \n[IDENT]
+ Interpolate number register with name IDENT (one-character name I,
+ two-character name ID). This means that the value of the register
+ is expanded in-place while `gtroff' is parsing the input line.
+ Nested assignments (also called indirect assignments) are possible.
+
+
+ .nr a 5
+ .nr as \na+\na
+ \n(as
+ => 10
+
+
+ .nr a1 5
+ .nr ab 6
+ .ds str b
+ .ds num 1
+ \n[a\n[num]]
+ => 5
+ \n[a\*[str]]
+ => 6
+
+
+
+File: groff, Node: Auto-increment, Next: Assigning Formats, Prev: Interpolating Registers, Up: Registers
+
+Auto-increment
+--------------
+
+ Number registers can also be auto-incremented and auto-decremented.
+The increment or decrement value can be specified with a third argument
+to the `nr' request or `\R' escape.
+
+ - Request: .nr ident value incr
+ Set number register IDENT to VALUE; the increment for
+ auto-incrementing is set to INCR. Note that the `\R' escape
+ doesn't support this notation.
+
+ To activate auto-incrementing, the escape `\n' has a special syntax
+form.
+
+ - Escape: \n+I
+ - Escape: \n-I
+ - Escape: \n(+ID
+ - Escape: \n(-ID
+ - Escape: \n+(ID
+ - Escape: \n-(ID
+ - Escape: \n[+IDENT]
+ - Escape: \n[-IDENT]
+ - Escape: \n+[IDENT]
+ - Escape: \n-[IDENT]
+ Before interpolating, increment or decrement IDENT (one-character
+ name I, two-character name ID) by the auto-increment value as
+ specified with the `nr' request (or the `\R' escape). If no
+ auto-increment value has been specified, these syntax forms are
+ identical to `\n'.
+
+ For example,
+
+
+ .nr a 0 1
+ .nr xx 0 5
+ .nr foo 0 -2
+ \n+a, \n+a, \n+a, \n+a, \n+a
+ .br
+ \n-(xx, \n-(xx, \n-(xx, \n-(xx, \n-(xx
+ .br
+ \n+[foo], \n+[foo], \n+[foo], \n+[foo], \n+[foo]
+
+produces
+
+
+ 1, 2, 3, 4, 5
+ -5, -10, -15, -20, -25
+ -2, -4, -6, -8, -10
+
+ To change the increment value without changing the value of a
+register (A in the example), the following can be used:
+
+
+ .nr a \na 10
+
+
+File: groff, Node: Assigning Formats, Next: Built-in Registers, Prev: Auto-increment, Up: Registers
+
+Assigning Formats
+-----------------
+
+ When a register is used in the text of an input file (as opposed to
+part of an expression), it is textually replaced (or interpolated) with
+a representation of that number. This output format can be changed to
+a variety of formats (numbers, Roman numerals, etc.). This is done
+using the `af' request.
+
+ - Request: .af ident format
+ Change the output format of a number register. The first argument
+ IDENT is the name of the number register to be changed, and the
+ second argument FORMAT is the output format. The following output
+ formats are available:
+
+ `1'
+ Decimal arabic numbers. This is the default format: 0, 1, 2,
+ 3, ....
+
+ `0...0'
+ Decimal numbers with as many digits as specified. So, `00'
+ would result in printing numbers as 01, 02, 03, ....
+
+ In fact, any digit instead of zero will do; `gtroff' only
+ counts how many digits are specified. As a consequence,
+ `af''s default format `1' could be specified as `0' also (and
+ exactly this is returned by the `\g' escape, see below).
+
+ `I'
+ Upper-case Roman numerals: 0, I, II, III, IV, ....
+
+ `i'
+ Lower-case Roman numerals: 0, i, ii, iii, iv, ....
+
+ `A'
+ Upper-case letters: 0, A, B, C, ..., Z, AA, AB, ....
+
+ `a'
+ Lower-case letters: 0, a, b, c, ..., z, aa, ab, ....
+
+ Omitting the number register format causes a warning of type
+ `missing'. *Note Debugging::, for more details. Specifying a
+ nonexistent format causes an error.
+
+ The following example produces `10, X, j, 010':
+
+
+ .nr a 10
+ .af a 1 \" the default format
+ \na,
+ .af a I
+ \na,
+ .af a a
+ \na,
+ .af a 001
+ \na
+
+ The largest number representable for the `i' and `I' formats is
+ 39999 (or -39999); UNIX `troff' uses `z' and `w' to represent
+ 10000 and 5000 in Roman numerals, and so does `gtroff'.
+ Currently, the correct glyphs of Roman numeral five thousand and
+ Roman numeral ten thousand (Unicode code points `U+2182' and
+ `U+2181', respectively) are not available.
+
+ If IDENT doesn't exist, it is created.
+
+ Changing the output format of a read-only register causes an
+ error. It is necessary to first copy the register's value to a
+ writeable register, then apply the `af' request to this other
+ register.
+
+ - Escape: \gI
+ - Escape: \g(ID
+ - Escape: \g[IDENT]
+ Return the current format of the specified register IDENT
+ (one-character name I, two-character name ID). For example, `\ga'
+ after the previous example would produce the string `000'. If the
+ register hasn't been defined yet, nothing is returned.
+
+
+File: groff, Node: Built-in Registers, Prev: Assigning Formats, Up: Registers
+
+Built-in Registers
+------------------
+
+ The following lists some built-in registers which are not described
+elsewhere in this manual. Any register which begins with a `.' is
+read-only. A complete listing of all built-in registers can be found in
+appendix *Note Register Index::.
+
+`.F'
+ This string-valued register returns the current input file name.
+
+`.H'
+ Horizontal resolution in basic units.
+
+`.V'
+ Vertical resolution in basic units.
+
+`seconds'
+ The number of seconds after the minute, normally in the range 0
+ to 59, but can be up to 61 to allow for leap seconds. Initialized
+ at start-up of `gtroff'.
+
+`minutes'
+ The number of minutes after the hour, in the range 0 to 59.
+ Initialized at start-up of `gtroff'.
+
+`hours'
+ The number of hours past midnight, in the range 0 to 23.
+ Initialized at start-up of `gtroff'.
+
+`dw'
+ Day of the week (1-7).
+
+`dy'
+ Day of the month (1-31).
+
+`mo'
+ Current month (1-12).
+
+`year'
+ The current year.
+
+`yr'
+ The current year minus 1900. Unfortunately, the documentation of
+ UNIX Version 7's `troff' had a year 2000 bug: It incorrectly
+ claimed that `yr' contains the last two digits of the year. That
+ claim has never been true of either AT&T `troff' or GNU `troff'.
+ Old `troff' input that looks like this:
+
+
+ '\" The following line stopped working after 1999
+ This document was formatted in 19\n(yr.
+
+ can be corrected as follows:
+
+
+ This document was formatted in \n[year].
+
+ or, to be portable to older `troff' versions, as follows:
+
+
+ .nr y4 1900+\n(yr
+ This document was formatted in \n(y4.
+
+`.c'
+`c.'
+ The current _input_ line number. Register `.c' is read-only,
+ whereas `c.' (a `gtroff' extension) is writable also, affecting
+ both `.c' and `c.'.
+
+`ln'
+ The current _output_ line number after a call to the `nm' request
+ to activate line numbering.
+
+ *Note Miscellaneous::, for more information about line numbering.
+
+`.x'
+ The major version number. For example, if the version number
+ is 1.03 then `.x' contains `1'.
+
+`.y'
+ The minor version number. For example, if the version number
+ is 1.03 then `.y' contains `03'.
+
+`.Y'
+ The revision number of `groff'.
+
+`$$'
+ The process ID of `gtroff'.
+
+`.g'
+ Always 1. Macros should use this to determine whether they are
+ running under GNU `troff'.
+
+`.A'
+ If the command line option `-a' is used to produce an ASCII
+ approximation of the output, this is set to 1, zero otherwise.
+ *Note Groff Options::.
+
+`.P'
+ This register is set to 1 (and to 0 otherwise) if the current page
+ is actually being printed, i.e., if the `-o' option is being used
+ to only print selected pages. *Note Groff Options::, for more
+ information.
+
+`.T'
+ If `gtroff' is called with the `-T' command line option, the
+ number register `.T' is set to 1, and zero otherwise. *Note Groff
+ Options::.
+
+ Additionally, `gtroff' predefines a single read-write string
+ register `.T' which contains the current output device (for
+ example, `latin1' or `ps').
+
+
+File: groff, Node: Manipulating Filling and Adjusting, Next: Manipulating Hyphenation, Prev: Registers, Up: gtroff Reference
+
+Manipulating Filling and Adjusting
+==================================
+
+ Various ways of causing "breaks" were given in *Note Implicit Line
+Breaks::. The `br' request likewise causes a break. Several other
+requests also cause breaks, but implicitly. These are `bp', `ce',
+`cf', `fi', `fl', `in', `nf', `rj', `sp', `ti', and `trf'.
+
+ - Request: .br
+ Break the current line, i.e., the input collected so far is emitted
+ without adjustment.
+
+ If the no-break control character is used, `gtroff' suppresses the
+ break:
+
+
+ a
+ 'br
+ b
+ => a b
+
+
+ Initially, `gtroff' fills and adjusts text to both margins. Filling
+can be disabled via the `nf' request and re-enabled with the `fi'
+request.
+
+ - Request: .fi
+ - Register: \n[.u]
+ Activate fill mode (which is the default). This request implicitly
+ enables adjusting; it also inserts a break in the text currently
+ being filled. The read-only number register `.u' is set to 1.
+
+ The fill mode status is associated with the current environment
+ (*note Environments::).
+
+ See *Note Line Control::, for interaction with the `\c' escape.
+
+ - Request: .nf
+ Activate no-fill mode. Input lines are output as-is, retaining
+ line breaks and ignoring the current line length. This command
+ implicitly disables adjusting; it also causes a break. The number
+ register `.u' is set to 0.
+
+ The fill mode status is associated with the current environment
+ (*note Environments::).
+
+ See *Note Line Control::, for interaction with the `\c' escape.
+
+ - Request: .ad [mode]
+ - Register: \n[.j]
+ Set adjusting mode.
+
+ Activation and deactivation of adjusting is done implicitly with
+ calls to the `fi' or `nf' requests.
+
+ MODE can have one of the following values:
+
+ `l'
+ Adjust text to the left margin. This produces what is
+ traditionally called ragged-right text.
+
+ `r'
+ Adjust text to the right margin, producing ragged-left text.
+
+ `c'
+ Center filled text. This is different to the `ce' request
+ which only centers text without filling.
+
+ `b'
+ `n'
+ Justify to both margins. This is the default used by
+ `gtroff'.
+
+ With no argument, `gtroff' adjusts lines in the same way it did
+ before adjusting was deactivated (with a call to `na', for
+ example).
+
+
+ text
+ .ad r
+ text
+ .ad c
+ text
+ .na
+ text
+ .ad \" back to centering
+ text
+
+ The current adjustment mode is available in the read-only number
+ register `.j'; it can be stored and subsequently used to set
+ adjustment.
+
+ The adjustment mode status is associated with the current
+ environment (*note Environments::).
+
+ - Request: .na
+ Disable adjusting. This request won't change the current
+ adjustment mode: A subsequent call to `ad' uses the previous
+ adjustment setting.
+
+ The adjustment mode status is associated with the current
+ environment (*note Environments::).
+
+ - Request: .brp
+ - Escape: \p
+ Adjust the current line and cause a break.
+
+ In most cases this produces very ugly results since `gtroff'
+ doesn't have a sophisticated paragraph building algorithm (as TeX
+ have, for example); instead, `gtroff' fills and adjusts a paragraph
+ line by line:
+
+
+ This is an uninteresting sentence.
+ This is an uninteresting sentence.\p
+ This is an uninteresting sentence.
+
+ is formatted as
+
+
+ This is an uninteresting sentence. This is an
+ uninteresting sentence.
+ This is an uninteresting sentence.
+
+
+ - Request: .ss word_space_size [sentence_space_size]
+ - Register: \n[.ss]
+ - Register: \n[.sss]
+ Change the minimum size of a space between filled words. It takes
+ its units as one twelfth of the space width parameter for the
+ current font. Initially both the WORD_SPACE_SIZE and
+ SENTENCE_SPACE_SIZE are 12.
+
+ If two arguments are given to the `ss' request, the second
+ argument sets the sentence space size. If the second argument is
+ not given, sentence space size is set to WORD_SPACE_SIZE. The
+ sentence space size is used in two circumstances: If the end of a
+ sentence occurs at the end of a line in fill mode, then both an
+ inter-word space and a sentence space are added; if two spaces
+ follow the end of a sentence in the middle of a line, then the
+ second space is a sentence space. If a second argument is never
+ given to the `ss' request, the behaviour of UNIX `troff' is the
+ same as that exhibited by GNU `troff'. In GNU `troff', as in UNIX
+ `troff', a sentence should always be followed by either a newline
+ or two spaces.
+
+ The read-only number registers `.ss' and `.sss' hold the values of
+ the parameters set by the first and second arguments of the `ss'
+ request.
+
+ The word space and sentence space values are associated with the
+ current environment (*note Environments::).
+
+ Contrary to AT&T `troff', this request is _not_ ignored if a TTY
+ output device is used; the given values are then rounded down to a
+ multiple of 12 (*note Implementation Differences::).
+
+ The request is ignored if there is no parameter.
+
+ - Request: .ce [nnn]
+ - Register: \n[.ce]
+ Center text. While the `.ad c' request also centers text, it
+ fills the text as well. `ce' does not fill the text it affects.
+ This request causes a break. The number of lines still to be
+ centered is associated with the current environment (*note
+ Environments::).
+
+ The following example demonstrates the differences. Here the
+ input:
+
+
+ .ll 4i
+ .ce 1000
+ This is a small text fragment which shows the differences
+ between the `.ce' and the `.ad c' request.
+ .ce 0
+
+ .ad c
+ This is a small text fragment which shows the differences
+ between the `.ce' and the `.ad c' request.
+
+ And here the result:
+
+
+ This is a small text fragment which
+ shows the differences
+ between the `.ce' and the `.ad c' request.
+
+ This is a small text fragment which
+ shows the differences between the `.ce'
+ and the `.ad c' request.
+
+ With no arguments, `ce' centers the next line of text. NNN
+ specifies the number of lines to be centered. If the argument is
+ zero or negative, centering is disabled.
+
+ The basic length for centering text is the line length (as set
+ with the `ll' request) minus the indentation (as set with the `in'
+ request). Temporary indentation is ignored.
+
+ As can be seen in the previous example, it is a common idiom to
+ turn on centering for a large number of lines, and to turn off
+ centering after text to be centered. This is useful for any
+ request which takes a number of lines as an argument.
+
+ The `.ce' read-only number register contains the number of lines
+ remaining to be centered, as set by the `ce' request.
+
+ - Request: .rj [nnn]
+ - Register: \n[.rj]
+ Justify unfilled text to the right margin. Arguments are
+ identical to the `ce' request. The `.rj' read-only number
+ register is the number of lines to be right-justified as set by
+ the `rj' request. This request causes a break. The number of
+ lines still to be right-justified is associated with the current
+ environment (*note Environments::).
+
OpenPOWER on IntegriCloud