1375 lines
43 KiB
Plaintext
1375 lines
43 KiB
Plaintext
|
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::).
|
|||
|
|