mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-25 11:37:56 +00:00
8696 lines
289 KiB
Plaintext
8696 lines
289 KiB
Plaintext
This is groff, produced by makeinfo version 4.8 from ./groff.texinfo.
|
||
|
||
This manual documents GNU `troff' version 1.19.2.
|
||
|
||
Copyright (C) 1994-2000, 2001, 2002, 2003, 2004, 2005 Free Software
|
||
Foundation, Inc.
|
||
|
||
Permission is granted to copy, distribute and/or modify this
|
||
document under the terms of the GNU Free Documentation License,
|
||
Version 1.1 or any later version published by the Free Software
|
||
Foundation; with no Invariant Sections, with the Front-Cover texts
|
||
being `A GNU Manual," and with the Back-Cover Texts as in (a)
|
||
below. A copy of the license is included in the section entitled
|
||
`GNU Free Documentation License."
|
||
|
||
(a) The FSF's Back-Cover Text is: `You have freedom to copy and
|
||
modify this GNU Manual, like GNU software. Copies published by
|
||
the Free Software Foundation raise funds for GNU development."
|
||
|
||
INFO-DIR-SECTION Typesetting
|
||
START-INFO-DIR-ENTRY
|
||
* Groff: (groff). The GNU troff document formatting system.
|
||
END-INFO-DIR-ENTRY
|
||
|
||
|
||
File: groff, Node: Top, Next: Introduction, Prev: (dir), Up: (dir)
|
||
|
||
GNU troff
|
||
*********
|
||
|
||
This manual documents GNU `troff' version 1.19.2.
|
||
|
||
Copyright (C) 1994-2000, 2001, 2002, 2003, 2004, 2005 Free Software
|
||
Foundation, Inc.
|
||
|
||
Permission is granted to copy, distribute and/or modify this
|
||
document under the terms of the GNU Free Documentation License,
|
||
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."
|
||
|
||
* Menu:
|
||
|
||
* Introduction::
|
||
* Invoking groff::
|
||
* Tutorial for Macro Users::
|
||
* Macro Packages::
|
||
* gtroff Reference::
|
||
* Preprocessors::
|
||
* Output Devices::
|
||
* File formats::
|
||
* Installation::
|
||
* Copying This Manual::
|
||
* Request Index::
|
||
* Escape Index::
|
||
* Operator Index::
|
||
* Register Index::
|
||
* Macro Index::
|
||
* String Index::
|
||
* Glyph Name Index::
|
||
* Font File Keyword Index::
|
||
* Program and File Index::
|
||
* Concept Index::
|
||
|
||
|
||
File: groff, Node: Introduction, Next: Invoking groff, Prev: Top, Up: Top
|
||
|
||
1 Introduction
|
||
**************
|
||
|
||
GNU `troff' (or `groff') is a system for typesetting documents.
|
||
`troff' is very flexible and has been in existence (and use) for about
|
||
3 decades. It is quite widespread and firmly entrenched in the UNIX
|
||
community.
|
||
|
||
* Menu:
|
||
|
||
* What Is groff?::
|
||
* History::
|
||
* groff Capabilities::
|
||
* Macro Package Intro::
|
||
* Preprocessor Intro::
|
||
* Output device intro::
|
||
* Credits::
|
||
|
||
|
||
File: groff, Node: What Is groff?, Next: History, Prev: Introduction, Up: Introduction
|
||
|
||
1.1 What Is `groff'?
|
||
====================
|
||
|
||
`groff' belongs to an older generation of document preparation systems,
|
||
which operate more like compilers than the more recent interactive
|
||
WYSIWYG(1) (*note What Is groff?-Footnote-1::) systems. `groff' and
|
||
its contemporary counterpart, TeX, both work using a "batch" paradigm:
|
||
The input (or "source") files are normal text files with embedded
|
||
formatting commands. These files can then be processed by `groff' to
|
||
produce a typeset document on a variety of devices.
|
||
|
||
Likewise, `groff' should not be confused with a "word processor",
|
||
since that term connotes an integrated system that includes an editor
|
||
and a text formatter. Also, many word processors follow the WYSIWYG
|
||
paradigm discussed earlier.
|
||
|
||
Although WYSIWYG systems may be easier to use, they have a number of
|
||
disadvantages compared to `troff':
|
||
|
||
* They must be used on a graphics display to work on a document.
|
||
|
||
* Most of the WYSIWYG systems are either non-free or are not very
|
||
portable.
|
||
|
||
* `troff' is firmly entrenched in all UNIX systems.
|
||
|
||
* It is difficult to have a wide range of capabilities available
|
||
within the confines of a GUI/window system.
|
||
|
||
* It is more difficult to make global changes to a document.
|
||
|
||
"GUIs normally make it simple to accomplish simple actions and
|
||
impossible to accomplish complex actions." -Doug Gwyn (22/Jun/91
|
||
in `comp.unix.wizards')
|
||
|
||
|
||
File: groff, Node: What Is groff?-Footnotes, Up: What Is groff?
|
||
|
||
(1) What You See Is What You Get
|
||
|
||
|
||
File: groff, Node: History, Next: groff Capabilities, Prev: What Is groff?, Up: Introduction
|
||
|
||
1.2 History
|
||
===========
|
||
|
||
`troff' can trace its origins back to a formatting program called
|
||
`runoff', written by J. E. Saltzer, which ran on MIT's CTSS operating
|
||
system in the mid-sixties. This name came from the common phrase of
|
||
the time "I'll run off a document." Bob Morris ported it to the 635
|
||
architecture and called the program `roff' (an abbreviation of
|
||
`runoff'). It was rewritten as `rf' for the PDP-7 (before having
|
||
UNIX), and at the same time (1969), Doug McIllroy rewrote an extended
|
||
and simplified version of `roff' in the BCPL programming language.
|
||
|
||
The first version of UNIX was developed on a PDP-7 which was sitting
|
||
around Bell Labs. In 1971 the developers wanted to get a PDP-11 for
|
||
further work on the operating system. In order to justify the cost for
|
||
this system, they proposed that they would implement a document
|
||
formatting system for the AT&T patents division. This first formatting
|
||
program was a reimplementation of McIllroy's `roff', written by
|
||
J. F. Ossanna.
|
||
|
||
When they needed a more flexible language, a new version of `roff'
|
||
called `nroff' ("Newer `roff'") was written. It had a much more
|
||
complicated syntax, but provided the basis for all future versions.
|
||
When they got a Graphic Systems CAT Phototypesetter, Ossanna wrote a
|
||
version of `nroff' that would drive it. It was dubbed `troff', for
|
||
"typesetter `roff'", although many people have speculated that it
|
||
actually means "Times `roff'" because of the use of the Times font
|
||
family in `troff' by default. As such, the name `troff' is pronounced
|
||
`t-roff' rather than `trough'.
|
||
|
||
With `troff' came `nroff' (they were actually the same program
|
||
except for some `#ifdef's), which was for producing output for line
|
||
printers and character terminals. It understood everything `troff'
|
||
did, and ignored the commands which were not applicable (e.g. font
|
||
changes).
|
||
|
||
Since there are several things which cannot be done easily in
|
||
`troff', work on several preprocessors began. These programs would
|
||
transform certain parts of a document into `troff', which made a very
|
||
natural use of pipes in UNIX.
|
||
|
||
The `eqn' preprocessor allowed mathematical formul<75> to be specified
|
||
in a much simpler and more intuitive manner. `tbl' is a preprocessor
|
||
for formatting tables. The `refer' preprocessor (and the similar
|
||
program, `bib') processes citations in a document according to a
|
||
bibliographic database.
|
||
|
||
Unfortunately, Ossanna's `troff' was written in PDP-11 assembly
|
||
language and produced output specifically for the CAT phototypesetter.
|
||
He rewrote it in C, although it was now 7000 lines of uncommented code
|
||
and still dependent on the CAT. As the CAT became less common, and was
|
||
no longer supported by the manufacturer, the need to make it support
|
||
other devices became a priority. However, before this could be done,
|
||
Ossanna was killed in a car accident.
|
||
|
||
So, Brian Kernighan took on the task of rewriting `troff'. The
|
||
newly rewritten version produced device independent code which was very
|
||
easy for postprocessors to read and translate to the appropriate
|
||
printer codes. Also, this new version of `troff' (called `ditroff' for
|
||
"device independent `troff'") had several extensions, which included
|
||
drawing functions.
|
||
|
||
Due to the additional abilities of the new version of `troff',
|
||
several new preprocessors appeared. The `pic' preprocessor provides a
|
||
wide range of drawing functions. Likewise the `ideal' preprocessor did
|
||
the same, although via a much different paradigm. The `grap'
|
||
preprocessor took specifications for graphs, but, unlike other
|
||
preprocessors, produced `pic' code.
|
||
|
||
James Clark began work on a GNU implementation of `ditroff' in
|
||
early 1989. The first version, `groff' 0.3.1, was released June 1990.
|
||
`groff' included:
|
||
|
||
* A replacement for `ditroff' with many extensions.
|
||
|
||
* The `soelim', `pic', `tbl', and `eqn' preprocessors.
|
||
|
||
* Postprocessors for character devices, POSTSCRIPT, TeX DVI, and
|
||
X Windows. GNU `troff' also eliminated the need for a separate
|
||
`nroff' program with a postprocessor which would produce ASCII
|
||
output.
|
||
|
||
* A version of the `me' macros and an implementation of the `man'
|
||
macros.
|
||
|
||
Also, a front-end was included which could construct the, sometimes
|
||
painfully long, pipelines required for all the post- and preprocessors.
|
||
|
||
Development of GNU `troff' progressed rapidly, and saw the additions
|
||
of a replacement for `refer', an implementation of the `ms' and `mm'
|
||
macros, and a program to deduce how to format a document (`grog').
|
||
|
||
It was declared a stable (i.e. non-beta) package with the release of
|
||
version 1.04 around November 1991.
|
||
|
||
Beginning in 1999, `groff' has new maintainers (the package was an
|
||
orphan for a few years). As a result, new features and programs like
|
||
`grn', a preprocessor for gremlin images, and an output device to
|
||
produce HTML output have been added.
|
||
|
||
|
||
File: groff, Node: groff Capabilities, Next: Macro Package Intro, Prev: History, Up: Introduction
|
||
|
||
1.3 `groff' Capabilities
|
||
========================
|
||
|
||
So what exactly is `groff' capable of doing? `groff' provides a wide
|
||
range of low-level text formatting operations. Using these, it is
|
||
possible to perform a wide range of formatting tasks, such as
|
||
footnotes, table of contents, multiple columns, etc. Here's a list of
|
||
the most important operations supported by `groff':
|
||
|
||
* text filling, adjusting, and centering
|
||
|
||
* hyphenation
|
||
|
||
* page control
|
||
|
||
* font and glyph size control
|
||
|
||
* vertical spacing (e.g. double-spacing)
|
||
|
||
* line length and indenting
|
||
|
||
* macros, strings, diversions, and traps
|
||
|
||
* number registers
|
||
|
||
* tabs, leaders, and fields
|
||
|
||
* input and output conventions and character translation
|
||
|
||
* overstrike, bracket, line drawing, and zero-width functions
|
||
|
||
* local horizontal and vertical motions and the width function
|
||
|
||
* three-part titles
|
||
|
||
* output line numbering
|
||
|
||
* conditional acceptance of input
|
||
|
||
* environment switching
|
||
|
||
* insertions from the standard input
|
||
|
||
* input/output file switching
|
||
|
||
* output and error messages
|
||
|
||
|
||
File: groff, Node: Macro Package Intro, Next: Preprocessor Intro, Prev: groff Capabilities, Up: Introduction
|
||
|
||
1.4 Macro Packages
|
||
==================
|
||
|
||
Since `groff' provides such low-level facilities, it can be quite
|
||
difficult to use by itself. However, `groff' provides a "macro"
|
||
facility to specify how certain routine operations (e.g. starting
|
||
paragraphs, printing headers and footers, etc.) should be done. These
|
||
macros can be collected together into a "macro package". There are a
|
||
number of macro packages available; the most common (and the ones
|
||
described in this manual) are `man', `mdoc', `me', `ms', and `mm'.
|
||
|
||
|
||
File: groff, Node: Preprocessor Intro, Next: Output device intro, Prev: Macro Package Intro, Up: Introduction
|
||
|
||
1.5 Preprocessors
|
||
=================
|
||
|
||
Although `groff' provides most functions needed to format a document,
|
||
some operations would be unwieldy (e.g. to draw pictures). Therefore,
|
||
programs called "preprocessors" were written which understand their own
|
||
language and produce the necessary `groff' operations. These
|
||
preprocessors are able to differentiate their own input from the rest
|
||
of the document via markers.
|
||
|
||
To use a preprocessor, UNIX pipes are used to feed the output from
|
||
the preprocessor into `groff'. Any number of preprocessors may be used
|
||
on a given document; in this case, the preprocessors are linked
|
||
together into one pipeline. However, with `groff', the user does not
|
||
need to construct the pipe, but only tell `groff' what preprocessors to
|
||
use.
|
||
|
||
`groff' currently has preprocessors for producing tables (`tbl'),
|
||
typesetting equations (`eqn'), drawing pictures (`pic' and `grn'), and
|
||
for processing bibliographies (`refer'). An associated program which
|
||
is useful when dealing with preprocessors is `soelim'.
|
||
|
||
A free implementation of `grap', a preprocessor for drawing graphs,
|
||
can be obtained as an extra package; `groff' can use `grap' also.
|
||
|
||
There are other preprocessors in existence, but, unfortunately, no
|
||
free implementations are available. Among them are preprocessors for
|
||
drawing mathematical pictures (`ideal') and chemical structures
|
||
(`chem').
|
||
|
||
|
||
File: groff, Node: Output device intro, Next: Credits, Prev: Preprocessor Intro, Up: Introduction
|
||
|
||
1.6 Output Devices
|
||
==================
|
||
|
||
`groff' actually produces device independent code which may be fed into
|
||
a postprocessor to produce output for a particular device. Currently,
|
||
`groff' has postprocessors for POSTSCRIPT devices, character terminals,
|
||
X Windows (for previewing), TeX DVI format, HP LaserJet 4 and Canon LBP
|
||
printers (which use CAPSL), and HTML.
|
||
|
||
|
||
File: groff, Node: Credits, Prev: Output device intro, Up: Introduction
|
||
|
||
1.7 Credits
|
||
===========
|
||
|
||
Large portions of this manual were taken from existing documents, most
|
||
notably, the manual pages for the `groff' package by James Clark, and
|
||
Eric Allman's papers on the `me' macro package.
|
||
|
||
The section on the `man' macro package is partly based on Susan G.
|
||
Kleinmann's `groff_man' manual page written for the Debian GNU/Linux
|
||
system.
|
||
|
||
Larry Kollar contributed the section in the `ms' macro package.
|
||
|
||
|
||
File: groff, Node: Invoking groff, Next: Tutorial for Macro Users, Prev: Introduction, Up: Top
|
||
|
||
2 Invoking `groff'
|
||
******************
|
||
|
||
This section focuses on how to invoke the `groff' front end. This
|
||
front end takes care of the details of constructing the pipeline among
|
||
the preprocessors, `gtroff' and the postprocessor.
|
||
|
||
It has become a tradition that GNU programs get the prefix `g' to
|
||
distinguish it from its original counterparts provided by the host (see
|
||
*Note Environment::, for more details). Thus, for example, `geqn' is
|
||
GNU `eqn'. On operating systems like GNU/Linux or the Hurd, which
|
||
don't contain proprietary versions of `troff', and on
|
||
MS-DOS/MS-Windows, where `troff' and associated programs are not
|
||
available at all, this prefix is omitted since GNU `troff' is the only
|
||
used incarnation of `troff'. Exception: `groff' is never replaced by
|
||
`roff'.
|
||
|
||
In this document, we consequently say `gtroff' when talking about
|
||
the GNU `troff' program. All other implementations of `troff' are
|
||
called AT&T `troff' which is the common origin of all `troff' derivates
|
||
(with more or less compatible changes). Similarly, we say `gpic',
|
||
`geqn', etc.
|
||
|
||
* Menu:
|
||
|
||
* Groff Options::
|
||
* Environment::
|
||
* Macro Directories::
|
||
* Font Directories::
|
||
* Paper Size::
|
||
* Invocation Examples::
|
||
|
||
|
||
File: groff, Node: Groff Options, Next: Environment, Prev: Invoking groff, Up: Invoking groff
|
||
|
||
2.1 Options
|
||
===========
|
||
|
||
`groff' normally runs the `gtroff' program and a postprocessor
|
||
appropriate for the selected device. The default device is `ps' (but
|
||
it can be changed when `groff' is configured and built). It can
|
||
optionally preprocess with any of `gpic', `geqn', `gtbl', `ggrn',
|
||
`grap', `grefer', or `gsoelim'.
|
||
|
||
This section only documents options to the `groff' front end. Many
|
||
of the arguments to `groff' are passed on to `gtroff', therefore those
|
||
are also included. Arguments to pre- or postprocessors can be found in
|
||
*Note Invoking gpic::, *Note Invoking geqn::, *Note Invoking gtbl::,
|
||
*Note Invoking ggrn::, *Note Invoking grefer::, *Note Invoking
|
||
gsoelim::, *Note Invoking grotty::, *Note Invoking grops::, *Note
|
||
Invoking grohtml::, *Note Invoking grodvi::, *Note Invoking grolj4::,
|
||
*Note Invoking grolbp::, and *Note Invoking gxditview::.
|
||
|
||
The command line format for `groff' is:
|
||
|
||
|
||
groff [ -abceghilpstvzCEGNRSUVXZ ] [ -FDIR ] [ -mNAME ]
|
||
[ -TDEF ] [ -fFAM ] [ -wNAME ] [ -WNAME ]
|
||
[ -MDIR ] [ -dCS ] [ -rCN ] [ -nNUM ]
|
||
[ -oLIST ] [ -PARG ] [ -LARG ] [ -IDIR ]
|
||
[ FILES... ]
|
||
|
||
The command line format for `gtroff' is as follows.
|
||
|
||
|
||
gtroff [ -abcivzCERU ] [ -wNAME ] [ -WNAME ] [ -dCS ]
|
||
[ -fFAM ] [ -mNAME ] [ -nNUM ]
|
||
[ -oLIST ] [ -rCN ] [ -TNAME ]
|
||
[ -FDIR ] [ -MDIR ] [ FILES... ]
|
||
|
||
Obviously, many of the options to `groff' are actually passed on to
|
||
`gtroff'.
|
||
|
||
Options without an argument can be grouped behind a single `-'. A
|
||
filename of `-' denotes the standard input. It is possible to have
|
||
whitespace between an option and its parameter.
|
||
|
||
The `grog' command can be used to guess the correct `groff' command
|
||
to format a file.
|
||
|
||
Here's the description of the command-line options:
|
||
|
||
`-h'
|
||
Print a help message.
|
||
|
||
`-e'
|
||
Preprocess with `geqn'.
|
||
|
||
`-t'
|
||
Preprocess with `gtbl'.
|
||
|
||
`-g'
|
||
Preprocess with `ggrn'.
|
||
|
||
`-G'
|
||
Preprocess with `grap'.
|
||
|
||
`-p'
|
||
Preprocess with `gpic'.
|
||
|
||
`-s'
|
||
Preprocess with `gsoelim'.
|
||
|
||
`-c'
|
||
Suppress color output.
|
||
|
||
`-R'
|
||
Preprocess with `grefer'. No mechanism is provided for passing
|
||
arguments to `grefer' because most `grefer' options have
|
||
equivalent commands which can be included in the file. *Note
|
||
grefer::, for more details.
|
||
|
||
Note that `gtroff' also accepts a `-R' option, which is not
|
||
accessible via `groff'. This option prevents the loading of the
|
||
`troffrc' and `troffrc-end' files.
|
||
|
||
`-v'
|
||
Make programs run by `groff' print out their version number.
|
||
|
||
`-V'
|
||
Print the pipeline on `stdout' instead of executing it. If
|
||
specified more than once, print the pipeline on `stderr' and
|
||
execute it.
|
||
|
||
`-z'
|
||
Suppress output from `gtroff'. Only error messages are printed.
|
||
|
||
`-Z'
|
||
Do not postprocess the output of `gtroff'. Normally `groff'
|
||
automatically runs the appropriate postprocessor.
|
||
|
||
`-PARG'
|
||
Pass ARG to the postprocessor. Each argument should be passed
|
||
with a separate `-P' option. Note that `groff' does not prepend
|
||
`-' to ARG before passing it to the postprocessor.
|
||
|
||
`-l'
|
||
Send the output to a spooler for printing. The command used for
|
||
this is specified by the `print' command in the device description
|
||
file (see *Note Font Files::, for more info). If not present,
|
||
`-l' is ignored.
|
||
|
||
`-LARG'
|
||
Pass ARG to the spooler. Each argument should be passed with a
|
||
separate `-L' option. Note that `groff' does not prepend a `-' to
|
||
ARG before passing it to the postprocessor. If the `print'
|
||
keyword in the device description file is missing, `-L' is ignored.
|
||
|
||
`-TDEV'
|
||
Prepare output for device DEV. The default device is `ps', unless
|
||
changed when `groff' was configured and built. The following are
|
||
the output devices currently available:
|
||
|
||
`ps'
|
||
For POSTSCRIPT printers and previewers.
|
||
|
||
`dvi'
|
||
For TeX DVI format.
|
||
|
||
`X75'
|
||
For a 75dpi X11 previewer.
|
||
|
||
`X75-12'
|
||
For a 75dpi X11 previewer with a 12pt base font in the
|
||
document.
|
||
|
||
`X100'
|
||
For a 100dpi X11 previewer.
|
||
|
||
`X100-12'
|
||
For a 100dpi X11 previewer with a 12pt base font in the
|
||
document.
|
||
|
||
`ascii'
|
||
For typewriter-like devices using the (7-bit) ASCII character
|
||
set.
|
||
|
||
`latin1'
|
||
For typewriter-like devices that support the Latin-1
|
||
(ISO 8859-1) character set.
|
||
|
||
`utf8'
|
||
For typewriter-like devices which use the Unicode (ISO 10646)
|
||
character set with UTF-8 encoding.
|
||
|
||
`cp1047'
|
||
For typewriter-like devices which use the EBCDIC encoding IBM
|
||
cp1047.
|
||
|
||
`lj4'
|
||
For HP LaserJet4-compatible (or other PCL5-compatible)
|
||
printers.
|
||
|
||
`lbp'
|
||
For Canon CAPSL printers (LBP-4 and LBP-8 series laser
|
||
printers).
|
||
|
||
`html'
|
||
To produce HTML output. Note that the HTML driver consists
|
||
of two parts, a preprocessor (`pre-grohtml') and a
|
||
postprocessor (`post-grohtml').
|
||
|
||
The predefined `gtroff' string register `.T' contains the current
|
||
output device; the read-only number register `.T' is set to 1 if
|
||
this option is used (which is always true if `groff' is used to
|
||
call `gtroff'). *Note Built-in Registers::.
|
||
|
||
The postprocessor to be used for a device is specified by the
|
||
`postpro' command in the device description file. (*Note Font
|
||
Files::, for more info.) This can be overridden with the `-X'
|
||
option.
|
||
|
||
`-X'
|
||
Preview with `gxditview' instead of using the usual postprocessor.
|
||
This is unlikely to produce good results except with `-Tps'.
|
||
|
||
Note that this is not the same as using `-TX75' or `-TX100' to
|
||
view a document with `gxditview': The former uses the metrics of
|
||
the specified device, whereas the latter uses X-specific fonts and
|
||
metrics.
|
||
|
||
`-N'
|
||
Don't allow newlines with `eqn' delimiters. This is the same as
|
||
the `-N' option in `geqn'.
|
||
|
||
`-S'
|
||
Safer mode. Pass the `-S' option to `gpic' and disable the
|
||
`open', `opena', `pso', `sy', and `pi' requests. For security
|
||
reasons, this is enabled by default.
|
||
|
||
`-U'
|
||
Unsafe mode. This enables the `open', `opena', `pso', `sy', and
|
||
`pi' requests.
|
||
|
||
`-a'
|
||
Generate an ASCII approximation of the typeset output. The
|
||
read-only register `.A' is then set to 1. *Note Built-in
|
||
Registers::. A typical example is
|
||
|
||
|
||
groff -a -man -Tdvi troff.man | less
|
||
|
||
which shows how lines are broken for the DVI device. Note that
|
||
this option is rather useless today since graphic output devices
|
||
are available virtually everywhere.
|
||
|
||
`-b'
|
||
Print a backtrace with each warning or error message. This
|
||
backtrace should help track down the cause of the error. The line
|
||
numbers given in the backtrace may not always be correct: `gtroff'
|
||
can get confused by `as' or `am' requests while counting line
|
||
numbers.
|
||
|
||
`-i'
|
||
Read the standard input after all the named input files have been
|
||
processed.
|
||
|
||
`-wNAME'
|
||
Enable warning NAME. Available warnings are described in *Note
|
||
Debugging::. Multiple `-w' options are allowed.
|
||
|
||
`-WNAME'
|
||
Inhibit warning NAME. Multiple `-W' options are allowed.
|
||
|
||
`-E'
|
||
Inhibit all error messages.
|
||
|
||
`-C'
|
||
Enable compatibility mode. *Note Implementation Differences::,
|
||
for the list of incompatibilities between `groff' and AT&T `troff'.
|
||
|
||
`-dCS'
|
||
`-dNAME=S'
|
||
Define C or NAME to be a string S. C must be a one-letter name;
|
||
NAME can be of arbitrary length. All string assignments happen
|
||
before loading any macro file (including the start-up file).
|
||
|
||
`-fFAM'
|
||
Use FAM as the default font family. *Note Font Families::.
|
||
|
||
`-mNAME'
|
||
Read in the file `NAME.tmac'. Normally `groff' searches for this
|
||
in its macro directories. If it isn't found, it tries `tmac.NAME'
|
||
(searching in the same directories).
|
||
|
||
`-nNUM'
|
||
Number the first page NUM.
|
||
|
||
`-oLIST'
|
||
Output only pages in LIST, which is a comma-separated list of page
|
||
ranges; `N' means print page N, `M-N' means print every page
|
||
between M and N, `-N' means print every page up to N, `N-' means
|
||
print every page beginning with N. `gtroff' exits after printing
|
||
the last page in the list. All the ranges are inclusive on both
|
||
ends.
|
||
|
||
Within `gtroff', this information can be extracted with the `.P'
|
||
register. *Note Built-in Registers::.
|
||
|
||
If your document restarts page numbering at the beginning of each
|
||
chapter, then `gtroff' prints the specified page range for each
|
||
chapter.
|
||
|
||
`-rCN'
|
||
`-rNAME=N'
|
||
Set number register C or NAME to the value N. C must be a
|
||
one-letter name; NAME can be of arbitrary length. N can be any
|
||
`gtroff' numeric expression. All register assignments happen
|
||
before loading any macro file (including the start-up file).
|
||
|
||
`-FDIR'
|
||
Search `DIR' for subdirectories `devNAME' (NAME is the name of the
|
||
device), for the `DESC' file, and for font files before looking in
|
||
the standard directories (*note Font Directories::). This option
|
||
is passed to all pre- and postprocessors using the
|
||
`GROFF_FONT_PATH' environment variable.
|
||
|
||
`-MDIR'
|
||
Search directory `DIR' for macro files before the standard
|
||
directories (*note Macro Directories::).
|
||
|
||
`-IDIR'
|
||
This option may be used to specify a directory to search for files.
|
||
It is passed to the following programs:
|
||
|
||
* `gsoelim' (see *Note gsoelim:: for more details); it also
|
||
implies `groff''s `-s' option.
|
||
|
||
* `gtroff'; it is used to search files named in the `psbb' and
|
||
`so' requests.
|
||
|
||
* `grops'; it is used to search files named in the
|
||
`\X'ps: import' and `\X'ps: file' escapes.
|
||
|
||
The current directory is always searched first. This option may be
|
||
specified more than once; the directories will be searched in the
|
||
order specified. No directory search is performed for files
|
||
specified using an absolute path.
|
||
|
||
|
||
File: groff, Node: Environment, Next: Macro Directories, Prev: Groff Options, Up: Invoking groff
|
||
|
||
2.2 Environment
|
||
===============
|
||
|
||
There are also several environment variables (of the operating system,
|
||
not within `gtroff') which can modify the behavior of `groff'.
|
||
|
||
`GROFF_COMMAND_PREFIX'
|
||
If this is set to X, then `groff' runs `Xtroff' instead of
|
||
`gtroff'. This also applies to `tbl', `pic', `eqn', `grn',
|
||
`refer', and `soelim'. It does not apply to `grops', `grodvi',
|
||
`grotty', `pre-grohtml', `post-grohtml', `grolj4', and `gxditview'.
|
||
|
||
The default command prefix is determined during the installation
|
||
process. If a non-GNU troff system is found, prefix `g' is used,
|
||
none otherwise.
|
||
|
||
`GROFF_TMAC_PATH'
|
||
A colon-separated list of directories in which to search for macro
|
||
files (before the default directories are tried). *Note Macro
|
||
Directories::.
|
||
|
||
`GROFF_TYPESETTER'
|
||
The default output device.
|
||
|
||
`GROFF_FONT_PATH'
|
||
A colon-separated list of directories in which to search for the
|
||
`dev'NAME directory (before the default directories are tried).
|
||
*Note Font Directories::.
|
||
|
||
`GROFF_BIN_PATH'
|
||
This search path, followed by `PATH', is used for commands executed
|
||
by `groff'.
|
||
|
||
`GROFF_TMPDIR'
|
||
The directory in which `groff' creates temporary files. If this is
|
||
not set and `TMPDIR' is set, temporary files are created in that
|
||
directory. Otherwise temporary files are created in a
|
||
system-dependent default directory (on Unix and GNU/Linux systems,
|
||
this is usually `/tmp'). `grops', `grefer', `pre-grohtml', and
|
||
`post-grohtml' can create temporary files in this directory.
|
||
|
||
Note that MS-DOS and MS-Windows ports of `groff' use semi-colons,
|
||
rather than colons, to separate the directories in the lists described
|
||
above.
|
||
|
||
|
||
File: groff, Node: Macro Directories, Next: Font Directories, Prev: Environment, Up: Invoking groff
|
||
|
||
2.3 Macro Directories
|
||
=====================
|
||
|
||
All macro file names must be named `NAME.tmac' or `tmac.NAME' to make
|
||
the `-mNAME' command line option work. The `mso' request doesn't have
|
||
this restriction; any file name can be used, and `gtroff' won't try to
|
||
append or prepend the `tmac' string.
|
||
|
||
Macro files are kept in the "tmac directories", all of which
|
||
constitute the "tmac path". The elements of the search path for macro
|
||
files are (in that order):
|
||
|
||
* The directories specified with `gtroff''s or `groff''s `-M'
|
||
command line option.
|
||
|
||
* The directories given in the `GROFF_TMAC_PATH' environment
|
||
variable.
|
||
|
||
* The current directory (only if in unsafe mode using the `-U'
|
||
command line switch).
|
||
|
||
* The home directory.
|
||
|
||
* A platform-dependent directory, a site-specific
|
||
(platform-independent) directory, and the main tmac directory; the
|
||
default locations are
|
||
|
||
|
||
/usr/local/lib/groff/site-tmac
|
||
/usr/local/share/groff/site-tmac
|
||
/usr/local/share/groff/1.18.2/tmac
|
||
|
||
assuming that the version of `groff' is 1.18.2, and the
|
||
installation prefix was `/usr/local'. It is possible to fine-tune
|
||
those directories during the installation process.
|
||
|
||
|
||
File: groff, Node: Font Directories, Next: Paper Size, Prev: Macro Directories, Up: Invoking groff
|
||
|
||
2.4 Font Directories
|
||
====================
|
||
|
||
Basically, there is no restriction how font files for `groff' are named
|
||
and how long font names are; however, to make the font family mechanism
|
||
work (*note Font Families::), fonts within a family should start with
|
||
the family name, followed by the shape. For example, the Times family
|
||
uses `T' for the family name and `R', `B', `I', and `BI' to indicate
|
||
the shapes `roman', `bold', `italic', and `bold italic', respectively.
|
||
Thus the final font names are `TR', `TB', `TI', and `TBI'.
|
||
|
||
All font files are kept in the "font directories" which constitute
|
||
the "font path". The file search functions will always append the
|
||
directory `dev'NAME, where NAME is the name of the output device.
|
||
Assuming, say, DVI output, and `/foo/bar' as a font directory, the font
|
||
files for `grodvi' must be in `/foo/bar/devdvi'.
|
||
|
||
The elements of the search path for font files are (in that order):
|
||
|
||
* The directories specified with `gtroff''s or `groff''s `-F'
|
||
command line option. All device drivers and some preprocessors
|
||
also have this option.
|
||
|
||
* The directories given in the `GROFF_FONT_PATH' environment
|
||
variable.
|
||
|
||
* A site-specific directory and the main font directory; the default
|
||
locations are
|
||
|
||
|
||
/usr/local/share/groff/site-font
|
||
/usr/local/share/groff/1.18.2/font
|
||
|
||
assuming that the version of `groff' is 1.18.2, and the
|
||
installation prefix was `/usr/local'. It is possible to fine-tune
|
||
those directories during the installation process.
|
||
|
||
|
||
File: groff, Node: Paper Size, Next: Invocation Examples, Prev: Font Directories, Up: Invoking groff
|
||
|
||
2.5 Paper Size
|
||
==============
|
||
|
||
In groff, the page size for `gtroff' and for output devices are handled
|
||
separately. *Note Page Layout::, for vertical manipulation of the page
|
||
size. *Note Line Layout::, for horizontal changes.
|
||
|
||
A default paper size can be set in the device's `DESC' file. Most
|
||
output devices also have a command line option `-p' to override the
|
||
default paper size and option `-l' to use landscape orientation. *Note
|
||
DESC File Format::, for a description of the `papersize' keyword which
|
||
takes the same argument as `-p'.
|
||
|
||
A convenient shorthand to set a particular paper size for `gtroff'
|
||
is command line option `-dpaper=SIZE'. This defines string `paper'
|
||
which is processed in file `papersize.tmac' (loaded in the start-up
|
||
file `troffrc' by default). Possible values for SIZE are the same as
|
||
the predefined values for the `papersize' keyword (but only in
|
||
lowercase) except `a7'-`d7'. An appended `l' (ell) character denotes
|
||
landscape orientation.
|
||
|
||
For example, use the following for PS output on A4 paper in landscape
|
||
orientation:
|
||
|
||
|
||
groff -Tps -dpaper=a4l -P-pa4 -P-l -ms foo.ms > foo.ps
|
||
|
||
Note that it is up to the particular macro package to respect default
|
||
page dimensions set in this way (most do).
|
||
|
||
|
||
File: groff, Node: Invocation Examples, Prev: Paper Size, Up: Invoking groff
|
||
|
||
2.6 Invocation Examples
|
||
=======================
|
||
|
||
This section lists several common uses of `groff' and the corresponding
|
||
command lines.
|
||
|
||
|
||
groff file
|
||
|
||
This command processes `file' without a macro package or a
|
||
preprocessor. The output device is the default, `ps', and the output
|
||
is sent to `stdout'.
|
||
|
||
|
||
groff -t -mandoc -Tascii file | less
|
||
|
||
This is basically what a call to the `man' program does. `gtroff'
|
||
processes the manual page `file' with the `mandoc' macro file (which in
|
||
turn either calls the `man' or the `mdoc' macro package), using the
|
||
`tbl' preprocessor and the ASCII output device. Finally, the `less'
|
||
pager displays the result.
|
||
|
||
|
||
groff -X -m me file
|
||
|
||
Preview `file' with `gxditview', using the `me' macro package. Since
|
||
no `-T' option is specified, use the default device (`ps'). Note that
|
||
you can either say `-m me' or `-me'; the latter is an anachronism from
|
||
the early days of UNIX.(1) (*note Invocation Examples-Footnote-1::)
|
||
|
||
|
||
groff -man -rD1 -z file
|
||
|
||
Check `file' with the `man' macro package, forcing double-sided
|
||
printing - don't produce any output.
|
||
|
||
* Menu:
|
||
|
||
* grog::
|
||
|
||
|
||
File: groff, Node: Invocation Examples-Footnotes, Up: Invocation Examples
|
||
|
||
(1) The same is true for the other main macro packages that come
|
||
with `groff': `man', `mdoc', `ms', `mm', and `mandoc'. This won't work
|
||
in general; for example, to load `trace.tmac', either `-mtrace' or
|
||
`-m trace' must be used.
|
||
|
||
|
||
File: groff, Node: grog, Prev: Invocation Examples, Up: Invocation Examples
|
||
|
||
2.6.1 `grog'
|
||
------------
|
||
|
||
`grog' reads files, guesses which of the `groff' preprocessors and/or
|
||
macro packages are required for formatting them, and prints the `groff'
|
||
command including those options on the standard output. It generates
|
||
one or more of the options `-e', `-man', `-me', `-mm', `-mom', `-ms',
|
||
`-mdoc', `-mdoc-old', `-p', `-R', `-g', `-G', `-s', and `-t'.
|
||
|
||
A special file name `-' refers to the standard input. Specifying no
|
||
files also means to read the standard input. Any specified options are
|
||
included in the printed command. No space is allowed between options
|
||
and their arguments. The only options recognized are `-C' (which is
|
||
also passed on) to enable compatibility mode, and `-v' to print the
|
||
version number and exit.
|
||
|
||
For example,
|
||
|
||
|
||
grog -Tdvi paper.ms
|
||
|
||
guesses the appropriate command to print `paper.ms' and then prints it
|
||
to the command line after adding the `-Tdvi' option. For direct
|
||
execution, enclose the call to `grog' in backquotes at the UNIX shell
|
||
prompt:
|
||
|
||
|
||
`grog -Tdvi paper.ms` > paper.dvi
|
||
|
||
As seen in the example, it is still necessary to redirect the output to
|
||
something meaningful (i.e. either a file or a pager program like
|
||
`less').
|
||
|
||
|
||
File: groff, Node: Tutorial for Macro Users, Next: Macro Packages, Prev: Invoking groff, Up: Top
|
||
|
||
3 Tutorial for Macro Users
|
||
**************************
|
||
|
||
Most users tend to use a macro package to format their papers. This
|
||
means that the whole breadth of `groff' is not necessary for most
|
||
people. This chapter covers the material needed to efficiently use a
|
||
macro package.
|
||
|
||
* Menu:
|
||
|
||
* Basics::
|
||
* Common Features::
|
||
|
||
|
||
File: groff, Node: Basics, Next: Common Features, Prev: Tutorial for Macro Users, Up: Tutorial for Macro Users
|
||
|
||
3.1 Basics
|
||
==========
|
||
|
||
This section covers some of the basic concepts necessary to understand
|
||
how to use a macro package.(1) (*note Basics-Footnote-1::) References
|
||
are made throughout to more detailed information, if desired.
|
||
|
||
`gtroff' reads an input file prepared by the user and outputs a
|
||
formatted document suitable for publication or framing. The input
|
||
consists of text, or words to be printed, and embedded commands
|
||
("requests" and "escapes"), which tell `gtroff' how to format the
|
||
output. For more detail on this, see *Note Embedded Commands::.
|
||
|
||
The word "argument" is used in this chapter to mean a word or number
|
||
which appears on the same line as a request, and which modifies the
|
||
meaning of that request. For example, the request
|
||
|
||
|
||
.sp
|
||
|
||
spaces one line, but
|
||
|
||
|
||
.sp 4
|
||
|
||
spaces four lines. The number 4 is an argument to the `sp' request
|
||
which says to space four lines instead of one. Arguments are separated
|
||
from the request and from each other by spaces (_no_ tabs). More
|
||
details on this can be found in *Note Request and Macro Arguments::.
|
||
|
||
The primary function of `gtroff' is to collect words from input
|
||
lines, fill output lines with those words, justify the right-hand margin
|
||
by inserting extra spaces in the line, and output the result. For
|
||
example, the input:
|
||
|
||
|
||
Now is the time
|
||
for all good men
|
||
to come to the aid
|
||
of their party.
|
||
Four score and seven
|
||
years ago, etc.
|
||
|
||
is read, packed onto output lines, and justified to produce:
|
||
|
||
Now is the time for all good men to come to the aid of their party.
|
||
Four score and seven years ago, etc.
|
||
|
||
Sometimes a new output line should be started even though the current
|
||
line is not yet full; for example, at the end of a paragraph. To do
|
||
this it is possible to cause a "break", which starts a new output line.
|
||
Some requests cause a break automatically, as normally do blank input
|
||
lines and input lines beginning with a space.
|
||
|
||
Not all input lines are text to be formatted. Some input lines are
|
||
requests which describe how to format the text. Requests always have a
|
||
period (`.') or an apostrophe (`'') as the first character of the input
|
||
line.
|
||
|
||
The text formatter also does more complex things, such as
|
||
automatically numbering pages, skipping over page boundaries, putting
|
||
footnotes in the correct place, and so forth.
|
||
|
||
Here are a few hints for preparing text for input to `gtroff'.
|
||
|
||
* First, keep the input lines short. Short input lines are easier to
|
||
edit, and `gtroff' packs words onto longer lines anyhow.
|
||
|
||
* In keeping with this, it is helpful to begin a new line after every
|
||
comma or phrase, since common corrections are to add or delete
|
||
sentences or phrases.
|
||
|
||
* End each sentence with two spaces - or better, start each sentence
|
||
on a new line. `gtroff' recognizes characters that usually end a
|
||
sentence, and inserts sentence space accordingly.
|
||
|
||
* Do not hyphenate words at the end of lines - `gtroff' is smart
|
||
enough to hyphenate words as needed, but is not smart enough to
|
||
take hyphens out and join a word back together. Also, words such
|
||
as "mother-in-law" should not be broken over a line, since then a
|
||
space can occur where not wanted, such as "mother- in-law".
|
||
|
||
`gtroff' double-spaces output text automatically if you use the
|
||
request `.ls 2'. Reactivate single-spaced mode by typing `.ls 1'.(2)
|
||
(*note Basics-Footnote-2::)
|
||
|
||
A number of requests allow to change the way the output looks,
|
||
sometimes called the "layout" of the output page. Most of these
|
||
requests adjust the placing of "whitespace" (blank lines or spaces).
|
||
|
||
The `bp' request starts a new page, causing a line break.
|
||
|
||
The request `.sp N' leaves N lines of blank space. N can be omitted
|
||
(meaning skip a single line) or can be of the form Ni (for N inches) or
|
||
Nc (for N centimeters). For example, the input:
|
||
|
||
|
||
.sp 1.5i
|
||
My thoughts on the subject
|
||
.sp
|
||
|
||
leaves one and a half inches of space, followed by the line "My
|
||
thoughts on the subject", followed by a single blank line (more
|
||
measurement units are available, see *Note Measurements::).
|
||
|
||
Text lines can be centered by using the `ce' request. The line
|
||
after `ce' is centered (horizontally) on the page. To center more than
|
||
one line, use `.ce N' (where N is the number of lines to center),
|
||
followed by the N lines. To center many lines without counting them,
|
||
type:
|
||
|
||
|
||
.ce 1000
|
||
lines to center
|
||
.ce 0
|
||
|
||
The `.ce 0' request tells `groff' to center zero more lines, in other
|
||
words, stop centering.
|
||
|
||
All of these requests cause a break; that is, they always start a new
|
||
line. To start a new line without performing any other action, use
|
||
`br'.
|
||
|
||
|
||
File: groff, Node: Basics-Footnotes, Up: Basics
|
||
|
||
(1) This section is derived from `Writing Papers with nroff using
|
||
-me' by Eric P. Allman.
|
||
|
||
(2) If you need finer granularity of the vertical space, use the
|
||
`pvs' request (*note Changing Type Sizes::).
|
||
|
||
|
||
File: groff, Node: Common Features, Prev: Basics, Up: Tutorial for Macro Users
|
||
|
||
3.2 Common Features
|
||
===================
|
||
|
||
`gtroff' provides very low-level operations for formatting a document.
|
||
There are many common routine operations which are done in all
|
||
documents. These common operations are written into "macros" and
|
||
collected into a "macro package".
|
||
|
||
All macro packages provide certain common capabilities which fall
|
||
into the following categories.
|
||
|
||
* Menu:
|
||
|
||
* Paragraphs::
|
||
* Sections and Chapters::
|
||
* Headers and Footers::
|
||
* Page Layout Adjustment::
|
||
* Displays::
|
||
* Footnotes and Annotations::
|
||
* Table of Contents::
|
||
* Indices::
|
||
* Paper Formats::
|
||
* Multiple Columns::
|
||
* Font and Size Changes::
|
||
* Predefined Strings::
|
||
* Preprocessor Support::
|
||
* Configuration and Customization::
|
||
|
||
|
||
File: groff, Node: Paragraphs, Next: Sections and Chapters, Prev: Common Features, Up: Common Features
|
||
|
||
3.2.1 Paragraphs
|
||
----------------
|
||
|
||
One of the most common and most used capability is starting a
|
||
paragraph. There are a number of different types of paragraphs, any of
|
||
which can be initiated with macros supplied by the macro package.
|
||
Normally, paragraphs start with a blank line and the first line
|
||
indented, like the text in this manual. There are also block style
|
||
paragraphs, which omit the indentation:
|
||
|
||
|
||
Some men look at constitutions with sanctimonious
|
||
reverence, and deem them like the ark of the covenant, too
|
||
sacred to be touched.
|
||
|
||
And there are also indented paragraphs which begin with a tag or label
|
||
at the margin and the remaining text indented.
|
||
|
||
|
||
one This is the first paragraph. Notice how the first
|
||
line of the resulting paragraph lines up with the
|
||
other lines in the paragraph.
|
||
|
||
|
||
longlabel
|
||
This paragraph had a long label. The first
|
||
character of text on the first line does not line up
|
||
with the text on second and subsequent lines,
|
||
although they line up with each other.
|
||
|
||
A variation of this is a bulleted list.
|
||
|
||
|
||
. Bulleted lists start with a bullet. It is possible
|
||
to use other glyphs instead of the bullet. In nroff
|
||
mode using the ASCII character set for output, a dot
|
||
is used instead of a real bullet.
|
||
|
||
|
||
File: groff, Node: Sections and Chapters, Next: Headers and Footers, Prev: Paragraphs, Up: Common Features
|
||
|
||
3.2.2 Sections and Chapters
|
||
---------------------------
|
||
|
||
Most macro packages supply some form of section headers. The simplest
|
||
kind is simply the heading on a line by itself in bold type. Others
|
||
supply automatically numbered section heading or different heading
|
||
styles at different levels. Some, more sophisticated, macro packages
|
||
supply macros for starting chapters and appendices.
|
||
|
||
|
||
File: groff, Node: Headers and Footers, Next: Page Layout Adjustment, Prev: Sections and Chapters, Up: Common Features
|
||
|
||
3.2.3 Headers and Footers
|
||
-------------------------
|
||
|
||
Every macro package gives some way to manipulate the "headers" and
|
||
"footers" (also called "titles") on each page. This is text put at the
|
||
top and bottom of each page, respectively, which contain data like the
|
||
current page number, the current chapter title, and so on. Its
|
||
appearance is not affected by the running text. Some packages allow
|
||
for different ones on the even and odd pages (for material printed in a
|
||
book form).
|
||
|
||
The titles are called "three-part titles", that is, there is a
|
||
left-justified part, a centered part, and a right-justified part. An
|
||
automatically generated page number may be put in any of these fields
|
||
with the `%' character (see *Note Page Layout::, for more details).
|
||
|
||
|
||
File: groff, Node: Page Layout Adjustment, Next: Displays, Prev: Headers and Footers, Up: Common Features
|
||
|
||
3.2.4 Page Layout
|
||
-----------------
|
||
|
||
Most macro packages let the user specify top and bottom margins and
|
||
other details about the appearance of the printed pages.
|
||
|
||
|
||
File: groff, Node: Displays, Next: Footnotes and Annotations, Prev: Page Layout Adjustment, Up: Common Features
|
||
|
||
3.2.5 Displays
|
||
--------------
|
||
|
||
"Displays" are sections of text to be set off from the body of the
|
||
paper. Major quotes, tables, and figures are types of displays, as are
|
||
all the examples used in this document.
|
||
|
||
"Major quotes" are quotes which are several lines long, and hence
|
||
are set in from the rest of the text without quote marks around them.
|
||
|
||
A "list" is an indented, single-spaced, unfilled display. Lists
|
||
should be used when the material to be printed should not be filled and
|
||
justified like normal text, such as columns of figures or the examples
|
||
used in this paper.
|
||
|
||
A "keep" is a display of lines which are kept on a single page if
|
||
possible. An example for a keep might be a diagram. Keeps differ from
|
||
lists in that lists may be broken over a page boundary whereas keeps are
|
||
not.
|
||
|
||
"Floating keeps" move relative to the text. Hence, they are good for
|
||
things which are referred to by name, such as "See figure 3". A
|
||
floating keep appears at the bottom of the current page if it fits;
|
||
otherwise, it appears at the top of the next page. Meanwhile, the
|
||
surrounding text `flows' around the keep, thus leaving no blank areas.
|
||
|
||
|
||
File: groff, Node: Footnotes and Annotations, Next: Table of Contents, Prev: Displays, Up: Common Features
|
||
|
||
3.2.6 Footnotes and Annotations
|
||
-------------------------------
|
||
|
||
There are a number of requests to save text for later printing.
|
||
|
||
"Footnotes" are printed at the bottom of the current page.
|
||
|
||
"Delayed text" is very similar to a footnote except that it is
|
||
printed when called for explicitly. This allows a list of references to
|
||
appear (for example) at the end of each chapter, as is the convention in
|
||
some disciplines.
|
||
|
||
Most macro packages which supply this functionality also supply a
|
||
means of automatically numbering either type of annotation.
|
||
|
||
|
||
File: groff, Node: Table of Contents, Next: Indices, Prev: Footnotes and Annotations, Up: Common Features
|
||
|
||
3.2.7 Table of Contents
|
||
-----------------------
|
||
|
||
"Tables of contents" are a type of delayed text having a tag (usually
|
||
the page number) attached to each entry after a row of dots. The table
|
||
accumulates throughout the paper until printed, usually after the paper
|
||
has ended. Many macro packages provide the ability to have several
|
||
tables of contents (e.g. a standard table of contents, a list of
|
||
tables, etc).
|
||
|
||
|
||
File: groff, Node: Indices, Next: Paper Formats, Prev: Table of Contents, Up: Common Features
|
||
|
||
3.2.8 Indices
|
||
-------------
|
||
|
||
While some macro packages use the term "index", none actually provide
|
||
that functionality. The facilities they call indices are actually more
|
||
appropriate for tables of contents.
|
||
|
||
To produce a real index in a document, external tools like the
|
||
`makeindex' program are necessary.
|
||
|
||
|
||
File: groff, Node: Paper Formats, Next: Multiple Columns, Prev: Indices, Up: Common Features
|
||
|
||
3.2.9 Paper Formats
|
||
-------------------
|
||
|
||
Some macro packages provide stock formats for various kinds of
|
||
documents. Many of them provide a common format for the title and
|
||
opening pages of a technical paper. The `mm' macros in particular
|
||
provide formats for letters and memoranda.
|
||
|
||
|
||
File: groff, Node: Multiple Columns, Next: Font and Size Changes, Prev: Paper Formats, Up: Common Features
|
||
|
||
3.2.10 Multiple Columns
|
||
-----------------------
|
||
|
||
Some macro packages (but not `man') provide the ability to have two or
|
||
more columns on a page.
|
||
|
||
|
||
File: groff, Node: Font and Size Changes, Next: Predefined Strings, Prev: Multiple Columns, Up: Common Features
|
||
|
||
3.2.11 Font and Size Changes
|
||
----------------------------
|
||
|
||
The built-in font and size functions are not always intuitive, so all
|
||
macro packages provide macros to make these operations simpler.
|
||
|
||
|
||
File: groff, Node: Predefined Strings, Next: Preprocessor Support, Prev: Font and Size Changes, Up: Common Features
|
||
|
||
3.2.12 Predefined Strings
|
||
-------------------------
|
||
|
||
Most macro packages provide various predefined strings for a variety of
|
||
uses; examples are sub- and superscripts, printable dates, quotes and
|
||
various special characters.
|
||
|
||
|
||
File: groff, Node: Preprocessor Support, Next: Configuration and Customization, Prev: Predefined Strings, Up: Common Features
|
||
|
||
3.2.13 Preprocessor Support
|
||
---------------------------
|
||
|
||
All macro packages provide support for various preprocessors and may
|
||
extend their functionality.
|
||
|
||
For example, all macro packages mark tables (which are processed with
|
||
`gtbl') by placing them between `TS' and `TE' macros. The `ms' macro
|
||
package has an option, `.TS H', that prints a caption at the top of a
|
||
new page (when the table is too long to fit on a single page).
|
||
|
||
|
||
File: groff, Node: Configuration and Customization, Prev: Preprocessor Support, Up: Common Features
|
||
|
||
3.2.14 Configuration and Customization
|
||
--------------------------------------
|
||
|
||
Some macro packages provide means of customizing many of the details of
|
||
how the package behaves. This ranges from setting the default type size
|
||
to changing the appearance of section headers.
|
||
|
||
|
||
File: groff, Node: Macro Packages, Next: gtroff Reference, Prev: Tutorial for Macro Users, Up: Top
|
||
|
||
4 Macro Packages
|
||
****************
|
||
|
||
This chapter documents the main macro packages that come with `groff'.
|
||
|
||
Different main macro packages can't be used at the same time; for
|
||
example
|
||
|
||
|
||
groff -m man foo.man -m ms bar.doc
|
||
|
||
doesn't work. Note that option arguments are processed before
|
||
non-option arguments; the above (failing) sample is thus reordered to
|
||
|
||
|
||
groff -m man -m ms foo.man bar.doc
|
||
|
||
* Menu:
|
||
|
||
* man::
|
||
* mdoc::
|
||
* ms::
|
||
* me::
|
||
* mm::
|
||
|
||
|
||
File: groff, Node: man, Next: mdoc, Prev: Macro Packages, Up: Macro Packages
|
||
|
||
4.1 `man'
|
||
=========
|
||
|
||
This is the most popular and probably the most important macro package
|
||
of `groff'. It is easy to use, and a vast majority of manual pages are
|
||
based on it.
|
||
|
||
* Menu:
|
||
|
||
* Man options::
|
||
* Man usage::
|
||
* Man font macros::
|
||
* Miscellaneous man macros::
|
||
* Predefined man strings::
|
||
* Preprocessors in man pages::
|
||
* Optional man extensions::
|
||
|
||
|
||
File: groff, Node: Man options, Next: Man usage, Prev: man, Up: man
|
||
|
||
4.1.1 Options
|
||
-------------
|
||
|
||
The command line format for using the `man' macros with `groff' is:
|
||
|
||
|
||
groff -m man [ -rLL=LENGTH ] [ -rLT=LENGTH ] [ -rFT=DIST ]
|
||
[ -rcR=1 ] [ -rC1 ] [ -rD1 ] [-rHY=FLAGS ]
|
||
[ -rPNNN ] [ -rSXX ] [ -rXNNN ]
|
||
[ -rIN=LENGTH ] [ -rSN=LENGTH ] [ FILES... ]
|
||
|
||
It is possible to use `-man' instead of `-m man'.
|
||
|
||
`-rcR=1'
|
||
This option (the default if a TTY output device is used) creates a
|
||
single, very long page instead of multiple pages. Use `-rcR=0' to
|
||
disable it.
|
||
|
||
`-rC1'
|
||
If more than one manual page is given on the command line, number
|
||
the pages continuously, rather than starting each at 1.
|
||
|
||
`-rD1'
|
||
Double-sided printing. Footers for even and odd pages are
|
||
formatted differently.
|
||
|
||
`-rFT=DIST'
|
||
Set the position of the footer text to DIST. If positive, the
|
||
distance is measured relative to the top of the page, otherwise it
|
||
is relative to the bottom. The default is -0.5i.
|
||
|
||
`-rHY=FLAGS'
|
||
Set hyphenation flags. Possible values are 1 to hyphenate without
|
||
restrictions, 2 to not hyphenate the last word on a page, 4 to
|
||
not hyphenate the last two characters of a word, and 8 to not
|
||
hyphenate the first two characters of a word. These values are
|
||
additive; the default is 14.
|
||
|
||
`-rIN=LENGTH'
|
||
Set the body text indentation to LENGTH. If not specified, the
|
||
indentation defaults to 7n (7 characters) in nroff mode and 7.2n
|
||
otherwise. For nroff, this value should always be an integer
|
||
multiple of unit `n' to get consistent indentation.
|
||
|
||
`-rLL=LENGTH'
|
||
Set line length to LENGTH. If not specified, the line length is
|
||
set to respect any value set by a prior `ll' request (which _must_
|
||
be in effect when the `TH' macro is invoked), if this differs from
|
||
the built-in default for the formatter; otherwise it defaults to
|
||
78n in nroff mode (this is 78 characters per line) and 6.5i in
|
||
troff mode.(1) (*note Man options-Footnote-1::)
|
||
|
||
`-rLT=LENGTH'
|
||
Set title length to LENGTH. If not specified, the title length
|
||
defaults to the line length.
|
||
|
||
`-rPNNN'
|
||
Page numbering starts with NNN rather than with 1.
|
||
|
||
`-rSXX'
|
||
Use XX (which can be 10, 11, or 12pt) as the base document font
|
||
size instead of the default value of 10pt.
|
||
|
||
`-rSN=LENGTH'
|
||
Set the indentation for sub-subheadings to LENGTH. If not
|
||
specified, the indentation defaults to 3n.
|
||
|
||
`-rXNNN'
|
||
After page NNN, number pages as NNNa, NNNb, NNNc, etc. For
|
||
example, the option `-rX2' produces the following page numbers: 1,
|
||
2, 2a, 2b, 2c, etc.
|
||
|
||
|
||
File: groff, Node: Man options-Footnotes, Up: Man options
|
||
|
||
(1) Note that the use of a `.ll LENGTH' request to initialize the
|
||
line length, prior to use of the `TH' macro, is supported for backward
|
||
compatibility with some versions of the `man' program. _Always_ use the
|
||
`-rLL=LENGTH' option, or an equivalent `.nr LL LENGTH' request, in
|
||
preference to such a `.ll LENGTH' request. In particular, note that in
|
||
nroff mode, the request `.ll 65n', (with any LENGTH expression which
|
||
evaluates equal to 65n, i.e., the formatter's default line length in
|
||
nroff mode), will _not_ set the line length to 65n (it will be adjusted
|
||
to the `man' macro package's default setting of 78n), whereas the use
|
||
of the `-rLL=65n' option, or the `.nr LL 65n' request _will_ establish
|
||
a line length of 65n.
|
||
|
||
|
||
File: groff, Node: Man usage, Next: Man font macros, Prev: Man options, Up: man
|
||
|
||
4.1.2 Usage
|
||
-----------
|
||
|
||
This section describes the available macros for manual pages. For
|
||
further customization, put additional macros and requests into the file
|
||
`man.local' which is loaded immediately after the `man' package.
|
||
|
||
-- Macro: .TH title section [extra1 [extra2 [extra3]]]
|
||
Set the title of the man page to TITLE and the section to SECTION,
|
||
which must have a value between 1 and 8. The value of SECTION may
|
||
also have a string appended, e.g. `.pm', to indicate a specific
|
||
subsection of the man pages.
|
||
|
||
Both TITLE and SECTION are positioned at the left and right in the
|
||
header line (with SECTION in parentheses immediately appended to
|
||
TITLE. EXTRA1 is positioned in the middle of the footer line.
|
||
EXTRA2 is positioned at the left in the footer line (or at the
|
||
left on even pages and at the right on odd pages if double-sided
|
||
printing is active). EXTRA3 is centered in the header line.
|
||
|
||
For HTML output, headers and footers are completely suppressed.
|
||
|
||
Additionally, this macro starts a new page; the new line number
|
||
is 1 again (except if the `-rC1' option is given on the command
|
||
line) - this feature is intended only for formatting multiple man
|
||
pages; a single man page should contain exactly one `TH' macro at
|
||
the beginning of the file.
|
||
|
||
-- Macro: .SH [heading]
|
||
Set up an unnumbered section heading sticking out to the left.
|
||
Prints out all the text following `SH' up to the end of the line
|
||
(or the text in the next line if there is no argument to `SH') in
|
||
bold face (or the font specified by the string `HF'), one size
|
||
larger than the base document size. Additionally, the left margin
|
||
and the indentation for the following text is reset to its default
|
||
value.
|
||
|
||
-- Macro: .SS [heading]
|
||
Set up an unnumbered (sub)section heading. Prints out all the text
|
||
following `SS' up to the end of the line (or the text in the next
|
||
line if there is no argument to `SS') in bold face (or the font
|
||
specified by the string `HF'), at the same size as the base
|
||
document size. Additionally, the left margin and the indentation
|
||
for the following text is reset to its default value.
|
||
|
||
-- Macro: .TP [nnn]
|
||
Set up an indented paragraph with label. The indentation is set to
|
||
NNN if that argument is supplied (the default unit is `n' if
|
||
omitted), otherwise it is set to the previous indentation value
|
||
specified with `TP', `IP', or `HP' (or to the default value if
|
||
none of them have been used yet).
|
||
|
||
The first line of text following this macro is interpreted as a
|
||
string to be printed flush-left, as it is appropriate for a label.
|
||
It is not interpreted as part of a paragraph, so there is no
|
||
attempt to fill the first line with text from the following input
|
||
lines. Nevertheless, if the label is not as wide as the
|
||
indentation the paragraph starts at the same line (but indented),
|
||
continuing on the following lines. If the label is wider than the
|
||
indentation the descriptive part of the paragraph begins on the
|
||
line following the label, entirely indented. Note that neither
|
||
font shape nor font size of the label is set to a default value;
|
||
on the other hand, the rest of the text has default font settings.
|
||
|
||
-- Macro: .LP
|
||
-- Macro: .PP
|
||
-- Macro: .P
|
||
These macros are mutual aliases. Any of them causes a line break
|
||
at the current position, followed by a vertical space downwards by
|
||
the amount specified by the `PD' macro. The font size and shape
|
||
are reset to the default value (10pt roman if no `-rS' option is
|
||
given on the command line). Finally, the current left margin and
|
||
the indentation is restored.
|
||
|
||
-- Macro: .IP [designator [nnn]]
|
||
Set up an indented paragraph, using DESIGNATOR as a tag to mark
|
||
its beginning. The indentation is set to NNN if that argument is
|
||
supplied (default unit is `n'), otherwise it is set to the
|
||
previous indentation value specified with `TP', `IP', or `HP' (or
|
||
the default value if none of them have been used yet). Font size
|
||
and face of the paragraph (but not the designator) are reset to
|
||
their default values.
|
||
|
||
To start an indented paragraph with a particular indentation but
|
||
without a designator, use `""' (two double quotes) as the first
|
||
argument of `IP'.
|
||
|
||
For example, to start a paragraph with bullets as the designator
|
||
and 4 en indentation, write
|
||
|
||
|
||
.IP \(bu 4
|
||
|
||
|
||
-- Macro: .HP [nnn]
|
||
Set up a paragraph with hanging left indentation. The indentation
|
||
is set to NNN if that argument is supplied (default unit is `n'),
|
||
otherwise it is set to the previous indentation value specified
|
||
with `TP', `IP', or `HP' (or the default value if non of them have
|
||
been used yet). Font size and face are reset to their default
|
||
values.
|
||
|
||
-- Macro: .RS [nnn]
|
||
Move the left margin to the right by the value NNN if specified
|
||
(default unit is `n'); otherwise it is set to the previous
|
||
indentation value specified with `TP', `IP', or `HP' (or to the
|
||
default value if none of them have been used yet). The
|
||
indentation value is then set to the default.
|
||
|
||
Calls to the `RS' macro can be nested.
|
||
|
||
-- Macro: .RE [nnn]
|
||
Move the left margin back to level NNN, restoring the previous left
|
||
margin. If no argument is given, it moves one level back. The
|
||
first level (i.e., no call to `RS' yet) has number 1, and each call
|
||
to `RS' increases the level by 1.
|
||
|
||
To summarize, the following macros cause a line break with the
|
||
insertion of vertical space (which amount can be changed with the `PD'
|
||
macro): `SH', `SS', `TP', `LP' (`PP', `P'), `IP', and `HP'.
|
||
|
||
The macros `RS' and `RE' also cause a break but do not insert
|
||
vertical space.
|
||
|
||
Finally, the macros `SH', `SS', `LP' (`PP', `P'), and `RS' reset the
|
||
indentation to its default value.
|
||
|
||
|
||
File: groff, Node: Man font macros, Next: Miscellaneous man macros, Prev: Man usage, Up: man
|
||
|
||
4.1.3 Macros to set fonts
|
||
-------------------------
|
||
|
||
The standard font is roman; the default text size is 10 point. If
|
||
command line option `-rS=N' is given, use Npt as the default text size.
|
||
|
||
-- Macro: .SM [text]
|
||
Set the text on the same line or the text on the next line in a
|
||
font that is one point size smaller than the default font.
|
||
|
||
-- Macro: .SB [text]
|
||
Set the text on the same line or the text on the next line in bold
|
||
face font, one point size smaller than the default font.
|
||
|
||
-- Macro: .BI text
|
||
Set its arguments alternately in bold face and italic, without a
|
||
space between the arguments. Thus,
|
||
|
||
|
||
.BI this "word and" that
|
||
|
||
produces "thisword andthat" with "this" and "that" in bold face,
|
||
and "word and" in italics.
|
||
|
||
-- Macro: .IB text
|
||
Set its arguments alternately in italic and bold face, without a
|
||
space between the arguments.
|
||
|
||
-- Macro: .RI text
|
||
Set its arguments alternately in roman and italic, without a space
|
||
between the arguments.
|
||
|
||
-- Macro: .IR text
|
||
Set its arguments alternately in italic and roman, without a space
|
||
between the arguments.
|
||
|
||
-- Macro: .BR text
|
||
Set its arguments alternately in bold face and roman, without a
|
||
space between the arguments.
|
||
|
||
-- Macro: .RB text
|
||
Set its arguments alternately in roman and bold face, without a
|
||
space between the arguments.
|
||
|
||
-- Macro: .B [text]
|
||
Set TEXT in bold face. If no text is present on the line where
|
||
the macro is called, then the text of the next line appears in bold
|
||
face.
|
||
|
||
-- Macro: .I [text]
|
||
Set TEXT in italic. If no text is present on the line where the
|
||
macro is called, then the text of the next line appears in italic.
|
||
|
||
|
||
File: groff, Node: Miscellaneous man macros, Next: Predefined man strings, Prev: Man font macros, Up: man
|
||
|
||
4.1.4 Miscellaneous macros
|
||
--------------------------
|
||
|
||
The default indentation is 7.2n in troff mode and 7n in nroff mode
|
||
except for `grohtml' which ignores indentation.
|
||
|
||
-- Macro: .DT
|
||
Set tabs every 0.5 inches. Since this macro is always executed
|
||
during a call to the `TH' macro, it makes sense to call it only if
|
||
the tab positions have been changed.
|
||
|
||
-- Macro: .PD [nnn]
|
||
Adjust the empty space before a new paragraph (or section). The
|
||
optional argument gives the amount of space (default unit is `v');
|
||
without parameter, the value is reset to its default value (1 line
|
||
in nroff mode, 0.4v otherwise).
|
||
|
||
This affects the macros `SH', `SS', `TP', `LP' (as well as `PP'
|
||
and `P'), `IP', and `HP'.
|
||
|
||
The following two macros are included for BSD compatibility.
|
||
|
||
-- Macro: .AT [system [release]]
|
||
Alter the footer for use with AT&T manpages. This command exists
|
||
only for compatibility; don't use it. The first argument SYSTEM
|
||
can be:
|
||
|
||
`3'
|
||
7th Edition (the default)
|
||
|
||
`4'
|
||
System III
|
||
|
||
`5'
|
||
System V
|
||
|
||
An optional second argument RELEASE to `AT' specifies the release
|
||
number (such as "System V Release 3").
|
||
|
||
-- Macro: .UC [version]
|
||
Alters the footer for use with BSD manpages. This command exists
|
||
only for compatibility; don't use it. The argument can be:
|
||
|
||
`3'
|
||
3rd Berkeley Distribution (the default)
|
||
|
||
`4'
|
||
4th Berkeley Distribution
|
||
|
||
`5'
|
||
4.2 Berkeley Distribution
|
||
|
||
`6'
|
||
4.3 Berkeley Distribution
|
||
|
||
`7'
|
||
4.4 Berkeley Distribution
|
||
|
||
|
||
File: groff, Node: Predefined man strings, Next: Preprocessors in man pages, Prev: Miscellaneous man macros, Up: man
|
||
|
||
4.1.5 Predefined strings
|
||
------------------------
|
||
|
||
The following strings are defined:
|
||
|
||
-- String: \*[S]
|
||
Switch back to the default font size.
|
||
|
||
-- String: \*[HF]
|
||
The typeface used for headings. The default is `B'.
|
||
|
||
-- String: \*[R]
|
||
The `registered' sign.
|
||
|
||
-- String: \*[Tm]
|
||
The `trademark' sign.
|
||
|
||
-- String: \*[lq]
|
||
-- String: \*[rq]
|
||
Left and right quote. This is equal to `\(lq' and `\(rq',
|
||
respectively.
|
||
|
||
|
||
File: groff, Node: Preprocessors in man pages, Next: Optional man extensions, Prev: Predefined man strings, Up: man
|
||
|
||
4.1.6 Preprocessors in `man' pages
|
||
----------------------------------
|
||
|
||
If a preprocessor like `gtbl' or `geqn' is needed, it has become common
|
||
usage to make the first line of the man page look like this:
|
||
|
||
|
||
'\" WORD
|
||
|
||
Note the single space character after the double quote. WORD consists
|
||
of letters for the needed preprocessors: `e' for `geqn', `r' for
|
||
`grefer', `t' for `gtbl'. Modern implementations of the `man' program
|
||
read this first line and automatically call the right preprocessor(s).
|
||
|
||
|
||
File: groff, Node: Optional man extensions, Prev: Preprocessors in man pages, Up: man
|
||
|
||
4.1.7 Optional `man' extensions
|
||
-------------------------------
|
||
|
||
Use the file `man.local' for local extensions to the `man' macros or
|
||
for style changes.
|
||
|
||
Custom headers and footers
|
||
..........................
|
||
|
||
In groff versions 1.18.2 and later, you can specify custom headers and
|
||
footers by redefining the following macros in `man.local'.
|
||
|
||
-- Macro: .PT
|
||
Control the content of the headers. Normally, the header prints
|
||
the command name and section number on either side, and the
|
||
optional fifth argument to `TH' in the center.
|
||
|
||
-- Macro: .BT
|
||
Control the content of the footers. Normally, the footer prints
|
||
the page number and the third and fourth arguments to `TH'.
|
||
|
||
Use the `FT' number register to specify the footer position. The
|
||
default is -0.5i.
|
||
|
||
Ultrix-specific man macros
|
||
..........................
|
||
|
||
The `groff' source distribution includes a file named `man.ultrix',
|
||
containing macros compatible with the Ultrix variant of `man'. Copy
|
||
this file into `man.local' (or use the `mso' request to load it) to
|
||
enable the following macros.
|
||
|
||
-- Macro: .CT key
|
||
Print `<CTRL/KEY>'.
|
||
|
||
-- Macro: .CW
|
||
Print subsequent text using the constant width (Courier) typeface.
|
||
|
||
-- Macro: .Ds
|
||
Begin a non-filled display.
|
||
|
||
-- Macro: .De
|
||
End a non-filled display started with `Ds'.
|
||
|
||
-- Macro: .EX [indent]
|
||
Begins a non-filled display using the constant width (Courier)
|
||
typeface. Use the optional INDENT argument to indent the display.
|
||
|
||
-- Macro: .EE
|
||
End a non-filled display started with `EX'.
|
||
|
||
-- Macro: .G [text]
|
||
Sets TEXT in Helvetica. If no text is present on the line where
|
||
the macro is called, then the text of the next line appears in
|
||
Helvetica.
|
||
|
||
-- Macro: .GL [text]
|
||
Sets TEXT in Helvetica Oblique. If no text is present on the line
|
||
where the macro is called, then the text of the next line appears
|
||
in Helvetica Oblique.
|
||
|
||
-- Macro: .HB [text]
|
||
Sets TEXT in Helvetica Bold. If no text is present on the line
|
||
where the macro is called, then all text up to the next `HB'
|
||
appears in Helvetica Bold.
|
||
|
||
-- Macro: .TB [text]
|
||
Identical to `HB'.
|
||
|
||
-- Macro: .MS title sect [punct]
|
||
Set a manpage reference in Ultrix format. The TITLE is in Courier
|
||
instead of italic. Optional punctuation follows the section
|
||
number without an intervening space.
|
||
|
||
-- Macro: .NT [`C'] [title]
|
||
Begin a note. Print the optional title, or the word "Note",
|
||
centered on the page. Text following the macro makes up the body
|
||
of the note, and is indented on both sides. If the first argument
|
||
is `C', the body of the note is printed centered (the second
|
||
argument replaces the word "Note" if specified).
|
||
|
||
-- Macro: .NE
|
||
End a note begun with `NT'.
|
||
|
||
-- Macro: .PN path [punct]
|
||
Set the path name in constant width (Courier), followed by
|
||
optional punctuation.
|
||
|
||
-- Macro: .Pn [punct] path [punct]
|
||
When called with two arguments, identical to `PN'. When called
|
||
with three arguments, set the second argument in constant width
|
||
(Courier), bracketed by the first and third arguments in the
|
||
current font.
|
||
|
||
-- Macro: .R
|
||
Switch to roman font and turn off any underlining in effect.
|
||
|
||
-- Macro: .RN
|
||
Print the string `<RETURN>'.
|
||
|
||
-- Macro: .VS [`4']
|
||
Start printing a change bar in the margin if the number `4' is
|
||
specified. Otherwise, this macro does nothing.
|
||
|
||
-- Macro: .VE
|
||
End printing the change bar begun by `VS'.
|
||
|
||
Simple example
|
||
..............
|
||
|
||
The following example `man.local' file alters the `SH' macro to add
|
||
some extra vertical space before printing the heading. Headings are
|
||
printed in Helvetica Bold.
|
||
|
||
|
||
.\" Make the heading fonts Helvetica
|
||
.ds HF HB
|
||
.
|
||
.\" Put more whitespace in front of headings.
|
||
.rn SH SH-orig
|
||
.de SH
|
||
. if t .sp (u;\\n[PD]*2)
|
||
. SH-orig \\$*
|
||
..
|
||
|
||
|
||
File: groff, Node: mdoc, Next: ms, Prev: man, Up: Macro Packages
|
||
|
||
4.2 `mdoc'
|
||
==========
|
||
|
||
See the `groff_mdoc(7)' man page (type `man groff_mdoc' at the command
|
||
line).
|
||
|
||
|
||
File: groff, Node: ms, Next: me, Prev: mdoc, Up: Macro Packages
|
||
|
||
4.3 `ms'
|
||
========
|
||
|
||
The `-ms' macros are suitable for reports, letters, books, user
|
||
manuals, and so forth. The package provides macros for cover pages,
|
||
section headings, paragraphs, lists, footnotes, pagination, and a table
|
||
of contents.
|
||
|
||
* Menu:
|
||
|
||
* ms Intro::
|
||
* General ms Structure::
|
||
* ms Document Control Registers::
|
||
* ms Cover Page Macros::
|
||
* ms Body Text::
|
||
* ms Page Layout::
|
||
* Differences from AT&T ms::
|
||
* Naming Conventions::
|
||
|
||
|
||
File: groff, Node: ms Intro, Next: General ms Structure, Prev: ms, Up: ms
|
||
|
||
4.3.1 Introduction to `ms'
|
||
--------------------------
|
||
|
||
The original `-ms' macros were included with AT&T `troff' as well as
|
||
the `man' macros. While the `man' package is intended for brief
|
||
documents that can be read on-line as well as printed, the `ms' macros
|
||
are suitable for longer documents that are meant to be printed rather
|
||
than read on-line.
|
||
|
||
The `ms' macro package included with `groff' is a complete,
|
||
bottom-up re-implementation. Several macros (specific to AT&T or
|
||
Berkeley) are not included, while several new commands are. *Note
|
||
Differences from AT&T ms::, for more information.
|
||
|
||
|
||
File: groff, Node: General ms Structure, Next: ms Document Control Registers, Prev: ms Intro, Up: ms
|
||
|
||
4.3.2 General structure of an `ms' document
|
||
-------------------------------------------
|
||
|
||
The `ms' macro package expects a certain amount of structure, but not
|
||
as much as packages such as `man' or `mdoc'.
|
||
|
||
The simplest documents can begin with a paragraph macro (such as
|
||
`LP' or `PP'), and consist of text separated by paragraph macros or
|
||
even blank lines. Longer documents have a structure as follows:
|
||
|
||
*Document type*
|
||
If you invoke the `RP' (report) macro on the first line of the
|
||
document, `groff' prints the cover page information on its own
|
||
page; otherwise it prints the information on the first page with
|
||
your document text immediately following. Other document formats
|
||
found in AT&T `troff' are specific to AT&T or Berkeley, and are
|
||
not supported in `groff'.
|
||
|
||
*Format and layout*
|
||
By setting number registers, you can change your document's type
|
||
(font and size), margins, spacing, headers and footers, and
|
||
footnotes. *Note ms Document Control Registers::, for more
|
||
details.
|
||
|
||
*Cover page*
|
||
A cover page consists of a title, the author's name and
|
||
institution, an abstract, and the date.(1) (*note General ms
|
||
Structure-Footnote-1::) *Note ms Cover Page Macros::, for more
|
||
details.
|
||
|
||
*Body*
|
||
Following the cover page is your document. You can use the `ms'
|
||
macros to write reports, letters, books, and so forth. The
|
||
package is designed for structured documents, consisting of
|
||
paragraphs interspersed with headings and augmented by lists,
|
||
footnotes, tables, and other common constructs. *Note ms Body
|
||
Text::, for more details.
|
||
|
||
*Table of contents*
|
||
Longer documents usually include a table of contents, which you can
|
||
invoke by placing the `TC' macro at the end of your document. The
|
||
`ms' macros have minimal indexing facilities, consisting of the
|
||
`IX' macro, which prints an entry on standard error. Printing the
|
||
table of contents at the end is necessary since `groff' is a
|
||
single-pass text formatter, thus it cannot determine the page
|
||
number of each section until that section has actually been set
|
||
and printed. Since `ms' output is intended for hardcopy, you can
|
||
manually relocate the pages containing the table of contents
|
||
between the cover page and the body text after printing.
|
||
|
||
|
||
File: groff, Node: General ms Structure-Footnotes, Up: General ms Structure
|
||
|
||
(1) Actually, only the title is required.
|
||
|
||
|
||
File: groff, Node: ms Document Control Registers, Next: ms Cover Page Macros, Prev: General ms Structure, Up: ms
|
||
|
||
4.3.3 Document control registers
|
||
--------------------------------
|
||
|
||
The following is a list of document control number registers. For the
|
||
sake of consistency, set registers related to margins at the beginning
|
||
of your document, or just after the `RP' macro. You can set other
|
||
registers later in your document, but you should keep them together at
|
||
the beginning to make them easy to find and edit as necessary.
|
||
|
||
Margin Settings
|
||
...............
|
||
|
||
-- Register: \n[PO]
|
||
Defines the page offset (i.e., the left margin). There is no
|
||
explicit right margin setting; the combination of the `PO' and `LL'
|
||
registers implicitly define the right margin width.
|
||
|
||
Effective: next page.
|
||
|
||
Default value: 1i.
|
||
|
||
-- Register: \n[LL]
|
||
Defines the line length (i.e., the width of the body text).
|
||
|
||
Effective: next paragraph.
|
||
|
||
Default: 6i.
|
||
|
||
-- Register: \n[LT]
|
||
Defines the title length (i.e., the header and footer width). This
|
||
is usually the same as `LL', but not necessarily.
|
||
|
||
Effective: next paragraph.
|
||
|
||
Default: 6i.
|
||
|
||
-- Register: \n[HM]
|
||
Defines the header margin height at the top of the page.
|
||
|
||
Effective: next page.
|
||
|
||
Default: 1i.
|
||
|
||
-- Register: \n[FM]
|
||
Defines the footer margin height at the bottom of the page.
|
||
|
||
Effective: next page.
|
||
|
||
Default: 1i.
|
||
|
||
Text Settings
|
||
.............
|
||
|
||
-- Register: \n[PS]
|
||
Defines the point size of the body text. If the value is larger
|
||
than or equal to 1000, divide it by 1000 to get a fractional point
|
||
size. For example, `.nr PS 10250' sets the document's point size
|
||
to 10.25p.
|
||
|
||
Effective: next paragraph.
|
||
|
||
Default: 10p.
|
||
|
||
-- Register: \n[VS]
|
||
Defines the space between lines (line height plus leading). If the
|
||
value is larger than or equal to 1000, divide it by 1000 to get a
|
||
fractional point size. Due to backwards compatibility, `VS' must
|
||
be smaller than 40000 (this is 40.0p).
|
||
|
||
Effective: next paragraph.
|
||
|
||
Default: 12p.
|
||
|
||
-- Register: \n[PSINCR]
|
||
Defines an increment in point size, which will be applied to
|
||
section headings at nesting levels below the value specified in
|
||
`GROWPS'. The value of `PSINCR' should be specified in points,
|
||
with the p scaling factor, and may include a fractional component;
|
||
for example, `.nr PSINCR 1.5p' sets a point size increment of 1.5p.
|
||
|
||
Effective: next section heading.
|
||
|
||
Default: 1p.
|
||
|
||
-- Register: \n[GROWPS]
|
||
Defines the heading level below which the point size increment set
|
||
by `PSINCR' becomes effective. Section headings at and above the
|
||
level specified by `GROWPS' will be printed at the point size set
|
||
by `PS'; for each level below the value of `GROWPS', the point
|
||
size will be increased in steps equal to the value of `PSINCR'.
|
||
Setting `GROWPS' to any value less than 2 disables the incremental
|
||
heading size feature.
|
||
|
||
Effective: next section heading.
|
||
|
||
Default: 0.
|
||
|
||
-- Register: \n[HY]
|
||
Defines the hyphenation level. `HY' sets safely the value of the
|
||
low-level `hy' register. Setting the value of `HY' to 0 is
|
||
equivalent to using the `nh' request.
|
||
|
||
Effective: next paragraph.
|
||
|
||
Default: 14.
|
||
|
||
-- Register: \n[FAM]
|
||
Defines the font family used to typeset the document.
|
||
|
||
Effective: next paragraph.
|
||
|
||
Default: as defined in the output device.
|
||
|
||
Paragraph Settings
|
||
..................
|
||
|
||
-- Register: \n[PI]
|
||
Defines the initial indentation of a (`PP' macro) paragraph.
|
||
|
||
Effective: next paragraph.
|
||
|
||
Default: 5n.
|
||
|
||
-- Register: \n[PD]
|
||
Defines the space between paragraphs.
|
||
|
||
Effective: next paragraph.
|
||
|
||
Default: 0.3v.
|
||
|
||
-- Register: \n[QI]
|
||
Defines the indentation on both sides of a quoted (`QP' macro)
|
||
paragraph.
|
||
|
||
Effective: next paragraph.
|
||
|
||
Default: 5n.
|
||
|
||
-- Register: \n[PORPHANS]
|
||
Defines the minimum number of initial lines of any paragraph which
|
||
should be kept together, to avoid orphan lines at the bottom of a
|
||
page. If a new paragraph is started close to the bottom of a page,
|
||
and there is insufficient space to accommodate `PORPHANS' lines
|
||
before an automatic page break, then the page break will be forced,
|
||
before the start of the paragraph.
|
||
|
||
Effective: next paragraph.
|
||
|
||
Default: 1.
|
||
|
||
-- Register: \n[HORPHANS]
|
||
Defines the minimum number of lines of the following paragraph
|
||
which should be kept together with any section heading introduced
|
||
by the `NH' or `SH' macros. If a section heading is placed close
|
||
to the bottom of a page, and there is insufficient space to
|
||
accommodate both the heading and at least `HORPHANS' lines of the
|
||
following paragraph, before an automatic page break, then the page
|
||
break will be forced before the heading.
|
||
|
||
Effective: next paragraph.
|
||
|
||
Default: 1.
|
||
|
||
Footnote Settings
|
||
.................
|
||
|
||
-- Register: \n[FL]
|
||
Defines the length of a footnote.
|
||
|
||
Effective: next footnote.
|
||
|
||
Default: `\n[LL]' * 5 / 6.
|
||
|
||
-- Register: \n[FI]
|
||
Defines the footnote indentation.
|
||
|
||
Effective: next footnote.
|
||
|
||
Default: 2n.
|
||
|
||
-- Register: \n[FF]
|
||
The footnote format:
|
||
`0'
|
||
Print the footnote number as a superscript; indent the
|
||
footnote (default).
|
||
|
||
`1'
|
||
Print the number followed by a period (like 1.) and indent the
|
||
footnote.
|
||
|
||
`2'
|
||
Like 1, without an indentation.
|
||
|
||
`3'
|
||
Like 1, but print the footnote number as a hanging paragraph.
|
||
|
||
Effective: next footnote.
|
||
|
||
Default: 0.
|
||
|
||
-- Register: \n[FPS]
|
||
Defines the footnote point size. If the value is larger than or
|
||
equal to 1000, divide it by 1000 to get a fractional point size.
|
||
|
||
Effective: next footnote.
|
||
|
||
Default: `\n[PS]' - 2.
|
||
|
||
-- Register: \n[FVS]
|
||
Defines the footnote vertical spacing. If the value is larger
|
||
than or equal to 1000, divide it by 1000 to get a fractional point
|
||
size.
|
||
|
||
Effective: next footnote.
|
||
|
||
Default: `\n[FPS]' + 2.
|
||
|
||
-- Register: \n[FPD]
|
||
Defines the footnote paragraph spacing.
|
||
|
||
Effective: next footnote.
|
||
|
||
Default: `\n[PD]' / 2.
|
||
|
||
Miscellaneous Number Registers
|
||
..............................
|
||
|
||
-- Register: \n[MINGW]
|
||
Defines the minimum width between columns in a multi-column
|
||
document.
|
||
|
||
Effective: next page.
|
||
|
||
Default: 2n.
|
||
|
||
|
||
File: groff, Node: ms Cover Page Macros, Next: ms Body Text, Prev: ms Document Control Registers, Up: ms
|
||
|
||
4.3.4 Cover page macros
|
||
-----------------------
|
||
|
||
Use the following macros to create a cover page for your document in
|
||
the order shown.
|
||
|
||
-- Macro: .RP [`no']
|
||
Specifies the report format for your document. The report format
|
||
creates a separate cover page. The default action (no `RP' macro)
|
||
is to print a subset of the cover page on page 1 of your document.
|
||
|
||
If you use the word `no' as an optional argument, `groff' prints a
|
||
title page but does not repeat any of the title page information
|
||
(title, author, abstract, etc.) on page 1 of the document.
|
||
|
||
-- Macro: .P1
|
||
(P-one) Prints the header on page 1. The default is to suppress
|
||
the header.
|
||
|
||
-- Macro: .DA [...]
|
||
(optional) Prints the current date, or the arguments to the macro
|
||
if any, on the title page (if specified) and in the footers. This
|
||
is the default for `nroff'.
|
||
|
||
-- Macro: .ND [...]
|
||
(optional) Prints the current date, or the arguments to the macro
|
||
if any, on the title page (if specified) but not in the footers.
|
||
This is the default for `troff'.
|
||
|
||
-- Macro: .TL
|
||
Specifies the document title. `groff' collects text following the
|
||
`TL' macro into the title, until reaching the author name or
|
||
abstract.
|
||
|
||
-- Macro: .AU
|
||
Specifies the author's name, which appears on the line (or lines)
|
||
immediately following. You can specify multiple authors as
|
||
follows:
|
||
|
||
|
||
.AU
|
||
John Doe
|
||
.AI
|
||
University of West Bumblefuzz
|
||
.AU
|
||
Martha Buck
|
||
.AI
|
||
Monolithic Corporation
|
||
|
||
...
|
||
|
||
|
||
-- Macro: .AI
|
||
Specifies the author's institution. You can specify multiple
|
||
institutions in the same way that you specify multiple authors.
|
||
|
||
-- Macro: .AB [`no']
|
||
Begins the abstract. The default is to print the word ABSTRACT,
|
||
centered and in italics, above the text of the abstract. The word
|
||
`no' as an optional argument suppresses this heading.
|
||
|
||
-- Macro: .AE
|
||
Ends the abstract.
|
||
|
||
The following is example mark-up for a title page.
|
||
|
||
|
||
.RP
|
||
.TL
|
||
The Inevitability of Code Bloat
|
||
in Commercial and Free Software
|
||
.AU
|
||
J. Random Luser
|
||
.AI
|
||
University of West Bumblefuzz
|
||
.AB
|
||
This report examines the long-term growth
|
||
of the code bases in two large, popular software
|
||
packages; the free Emacs and the commercial
|
||
Microsoft Word.
|
||
While differences appear in the type or order
|
||
of features added, due to the different
|
||
methodologies used, the results are the same
|
||
in the end.
|
||
.PP
|
||
The free software approach is shown to be
|
||
superior in that while free software can
|
||
become as bloated as commercial offerings,
|
||
free software tends to have fewer serious
|
||
bugs and the added features are in line with
|
||
user demand.
|
||
.AE
|
||
|
||
... the rest of the paper follows ...
|
||
|
||
|
||
File: groff, Node: ms Body Text, Next: ms Page Layout, Prev: ms Cover Page Macros, Up: ms
|
||
|
||
4.3.5 Body text
|
||
---------------
|
||
|
||
This section describes macros used to mark up the body of your
|
||
document. Examples include paragraphs, sections, and other groups.
|
||
|
||
* Menu:
|
||
|
||
* Paragraphs in ms::
|
||
* Headings in ms::
|
||
* Highlighting in ms::
|
||
* Lists in ms::
|
||
* Indentation values in ms::
|
||
* Tabstops in ms::
|
||
* ms Displays and Keeps::
|
||
* ms Insertions::
|
||
* Example multi-page table::
|
||
* ms Footnotes::
|
||
|
||
|
||
File: groff, Node: Paragraphs in ms, Next: Headings in ms, Prev: ms Body Text, Up: ms Body Text
|
||
|
||
4.3.5.1 Paragraphs
|
||
..................
|
||
|
||
The following paragraph types are available.
|
||
|
||
-- Macro: .PP
|
||
-- Macro: .LP
|
||
Sets a paragraph with an initial indentation.
|
||
|
||
-- Macro: .QP
|
||
Sets a paragraph that is indented at both left and right margins.
|
||
The effect is identical to the HTML `<BLOCKQUOTE>' element. The
|
||
next paragraph or heading returns margins to normal.
|
||
|
||
-- Macro: .XP
|
||
Sets a paragraph whose lines are indented, except for the first
|
||
line. This is a Berkeley extension.
|
||
|
||
The following markup uses all four paragraph macros.
|
||
|
||
|
||
.NH 2
|
||
Cases used in the study
|
||
.LP
|
||
The following software and versions were
|
||
considered for this report.
|
||
.PP
|
||
For commercial software, we chose
|
||
.B "Microsoft Word for Windows" ,
|
||
starting with version 1.0 through the
|
||
current version (Word 2000).
|
||
.PP
|
||
For free software, we chose
|
||
.B Emacs ,
|
||
from its first appearance as a standalone
|
||
editor through the current version (v20).
|
||
See [Bloggs 2002] for details.
|
||
.QP
|
||
Franklin's Law applied to software:
|
||
software expands to outgrow both
|
||
RAM and disk space over time.
|
||
.LP
|
||
Bibliography:
|
||
.XP
|
||
Bloggs, Joseph R.,
|
||
.I "Everyone's a Critic" ,
|
||
Underground Press, March 2002.
|
||
A definitive work that answers all questions
|
||
and criticisms about the quality and usability of
|
||
free software.
|
||
|
||
The `PORPHANS' register (*note ms Document Control Registers::)
|
||
operates in conjunction with each of these macros, to inhibit the
|
||
printing of orphan lines at the bottom of any page.
|
||
|
||
|
||
File: groff, Node: Headings in ms, Next: Highlighting in ms, Prev: Paragraphs in ms, Up: ms Body Text
|
||
|
||
4.3.5.2 Headings
|
||
................
|
||
|
||
Use headings to create a hierarchical structure for your document. The
|
||
`ms' macros print headings in *bold*, using the same font family and
|
||
point size as the body text.
|
||
|
||
The following describes the heading macros:
|
||
|
||
-- Macro: .NH curr-level
|
||
-- Macro: .NH S level0 ...
|
||
Numbered heading. The argument is either a numeric argument to
|
||
indicate the level of the heading, or the letter `S' followed by
|
||
numeric arguments to set the heading level explicitly.
|
||
|
||
If you specify heading levels out of sequence, such as invoking
|
||
`.NH 3' after `.NH 1', `groff' prints a warning on standard error.
|
||
|
||
-- String: \*[SN]
|
||
-- String: \*[SN-DOT]
|
||
-- String: \*[SN-NO-DOT]
|
||
After invocation of `NH', the assigned section number is made
|
||
available in the strings `SN-DOT' (exactly as it appears in the
|
||
printed section heading) and `SN-NO-DOT' (with the final period
|
||
omitted). The string `SN' is also defined, as an alias for
|
||
`SN-DOT'; if preferred, you may redefine it as an alias for
|
||
`SN-NO-DOT', by including the initialization
|
||
|
||
|
||
.ds SN-NO-DOT
|
||
.als SN SN-NO-DOT
|
||
|
||
*before* your first use of `NH', or simply
|
||
|
||
|
||
.als SN SN-NO-DOT
|
||
|
||
*after* your first use of `NH'.
|
||
|
||
-- Macro: .SH [match-level]
|
||
Unnumbered subheading.
|
||
|
||
The optional MATCH-LEVEL argument is a GNU extension. It is a
|
||
number indicating the level of the heading, in a manner analogous
|
||
to the CURR-LEVEL argument to `.NH'. Its purpose is to match the
|
||
point size, at which the heading is printed, to the size of a
|
||
numbered heading at the same level, when the `GROWPS' and `PSINCR'
|
||
heading size adjustment mechanism is in effect. *Note ms Document
|
||
Control Registers::.
|
||
|
||
The `HORPHANS' register (*note ms Document Control Registers::)
|
||
operates in conjunction with the `NH' and `SH' macros, to inhibit the
|
||
printing of orphaned section headings at the bottom of any page.
|
||
|
||
|
||
File: groff, Node: Highlighting in ms, Next: Lists in ms, Prev: Headings in ms, Up: ms Body Text
|
||
|
||
4.3.5.3 Highlighting
|
||
....................
|
||
|
||
The `ms' macros provide a variety of methods to highlight or emphasize
|
||
text:
|
||
|
||
-- Macro: .B [txt [post [pre]]]
|
||
Sets its first argument in *bold type*. If you specify a second
|
||
argument, `groff' prints it in the previous font after the bold
|
||
text, with no intervening space (this allows you to set
|
||
punctuation after the highlighted text without highlighting the
|
||
punctuation). Similarly, it prints the third argument (if any) in
|
||
the previous font *before* the first argument. For example,
|
||
|
||
|
||
.B foo ) (
|
||
|
||
prints (*foo*).
|
||
|
||
If you give this macro no arguments, `groff' prints all text
|
||
following in bold until the next highlighting, paragraph, or
|
||
heading macro.
|
||
|
||
-- Macro: .R [txt [post [pre]]]
|
||
Sets its first argument in roman (or regular) type. It operates
|
||
similarly to the `B' macro otherwise.
|
||
|
||
-- Macro: .I [txt [post [pre]]]
|
||
Sets its first argument in _italic type_. It operates similarly
|
||
to the `B' macro otherwise.
|
||
|
||
-- Macro: .CW [txt [post [pre]]]
|
||
Sets its first argument in a `constant width face'. It operates
|
||
similarly to the `B' macro otherwise.
|
||
|
||
-- Macro: .BI [txt [post [pre]]]
|
||
Sets its first argument in bold italic type. It operates
|
||
similarly to the `B' macro otherwise.
|
||
|
||
-- Macro: .BX [txt]
|
||
Prints its argument and draws a box around it. If you want to box
|
||
a string that contains spaces, use a digit-width space (`\0').
|
||
|
||
-- Macro: .UL [txt [post]]
|
||
Prints its first argument with an underline. If you specify a
|
||
second argument, `groff' prints it in the previous font after the
|
||
underlined text, with no intervening space.
|
||
|
||
-- Macro: .LG
|
||
Prints all text following in larger type (two points larger than
|
||
the current point size) until the next font size, highlighting,
|
||
paragraph, or heading macro. You can specify this macro multiple
|
||
times to enlarge the point size as needed.
|
||
|
||
-- Macro: .SM
|
||
Prints all text following in smaller type (two points smaller than
|
||
the current point size) until the next type size, highlighting,
|
||
paragraph, or heading macro. You can specify this macro multiple
|
||
times to reduce the point size as needed.
|
||
|
||
-- Macro: .NL
|
||
Prints all text following in the normal point size (that is, the
|
||
value of the `PS' register).
|
||
|
||
-- String: \*[{]
|
||
-- String: \*[}]
|
||
Text enclosed with `\*{' and `\*}' is printed as a superscript.
|
||
|
||
|
||
File: groff, Node: Lists in ms, Next: Indentation values in ms, Prev: Highlighting in ms, Up: ms Body Text
|
||
|
||
4.3.5.4 Lists
|
||
.............
|
||
|
||
The `IP' macro handles duties for all lists.
|
||
|
||
-- Macro: .IP [marker [width]]
|
||
The MARKER is usually a bullet glyph (`\[bu]') for unordered
|
||
lists, a number (or auto-incrementing number register) for
|
||
numbered lists, or a word or phrase for indented (glossary-style)
|
||
lists.
|
||
|
||
The WIDTH specifies the indentation for the body of each list
|
||
item; its default unit is `n'. Once specified, the indentation
|
||
remains the same for all list items in the document until specified
|
||
again.
|
||
|
||
The `PORPHANS' register (*note ms Document Control Registers::)
|
||
operates in conjunction with the `IP' macro, to inhibit the
|
||
printing of orphaned list markers at the bottom of any page.
|
||
|
||
The following is an example of a bulleted list.
|
||
|
||
|
||
A bulleted list:
|
||
.IP \[bu] 2
|
||
lawyers
|
||
.IP \[bu]
|
||
guns
|
||
.IP \[bu]
|
||
money
|
||
|
||
Produces:
|
||
|
||
|
||
A bulleted list:
|
||
|
||
o lawyers
|
||
|
||
o guns
|
||
|
||
o money
|
||
|
||
The following is an example of a numbered list.
|
||
|
||
|
||
.nr step 1 1
|
||
A numbered list:
|
||
.IP \n[step] 3
|
||
lawyers
|
||
.IP \n+[step]
|
||
guns
|
||
.IP \n+[step]
|
||
money
|
||
|
||
Produces:
|
||
|
||
|
||
A numbered list:
|
||
|
||
1. lawyers
|
||
|
||
2. guns
|
||
|
||
3. money
|
||
|
||
Note the use of the auto-incrementing number register in this
|
||
example.
|
||
|
||
The following is an example of a glossary-style list.
|
||
|
||
|
||
A glossary-style list:
|
||
.IP lawyers 0.4i
|
||
Two or more attorneys.
|
||
.IP guns
|
||
Firearms, preferably
|
||
large-caliber.
|
||
.IP money
|
||
Gotta pay for those
|
||
lawyers and guns!
|
||
|
||
Produces:
|
||
|
||
|
||
A glossary-style list:
|
||
|
||
lawyers
|
||
Two or more attorneys.
|
||
|
||
guns Firearms, preferably large-caliber.
|
||
|
||
money
|
||
Gotta pay for those lawyers and guns!
|
||
|
||
In the last example, the `IP' macro places the definition on the
|
||
same line as the term if it has enough space; otherwise, it breaks to
|
||
the next line and starts the definition below the term. This may or
|
||
may not be the effect you want, especially if some of the definitions
|
||
break and some do not. The following examples show two possible ways
|
||
to force a break.
|
||
|
||
The first workaround uses the `br' request to force a break after
|
||
printing the term or label.
|
||
|
||
|
||
A glossary-style list:
|
||
.IP lawyers 0.4i
|
||
Two or more attorneys.
|
||
.IP guns
|
||
.br
|
||
Firearms, preferably large-caliber.
|
||
.IP money
|
||
Gotta pay for those lawyers and guns!
|
||
|
||
The second workaround uses the `\p' escape to force the break. Note
|
||
the space following the escape; this is important. If you omit the
|
||
space, `groff' prints the first word on the same line as the term or
|
||
label (if it fits) *then* breaks the line.
|
||
|
||
|
||
A glossary-style list:
|
||
.IP lawyers 0.4i
|
||
Two or more attorneys.
|
||
.IP guns
|
||
\p Firearms, preferably large-caliber.
|
||
.IP money
|
||
Gotta pay for those lawyers and guns!
|
||
|
||
To set nested lists, use the `RS' and `RE' macros. *Note
|
||
Indentation values in ms::, for more information.
|
||
|
||
For example:
|
||
|
||
|
||
.IP \[bu] 2
|
||
Lawyers:
|
||
.RS
|
||
.IP \[bu]
|
||
Dewey,
|
||
.IP \[bu]
|
||
Cheatham,
|
||
.IP \[bu]
|
||
and Howe.
|
||
.RE
|
||
.IP \[bu]
|
||
Guns
|
||
|
||
Produces:
|
||
|
||
|
||
o Lawyers:
|
||
|
||
o Dewey,
|
||
|
||
o Cheatham,
|
||
|
||
o and Howe.
|
||
|
||
o Guns
|
||
|
||
|
||
File: groff, Node: Indentation values in ms, Next: Tabstops in ms, Prev: Lists in ms, Up: ms Body Text
|
||
|
||
4.3.5.5 Indentation values
|
||
..........................
|
||
|
||
In many situations, you may need to indentation a section of text while
|
||
still wrapping and filling. *Note Lists in ms::, for an example of
|
||
nested lists.
|
||
|
||
-- Macro: .RS
|
||
-- Macro: .RE
|
||
These macros begin and end an indented section. The `PI' register
|
||
controls the amount of indentation, allowing the indented text to
|
||
line up under hanging and indented paragraphs.
|
||
|
||
*Note ms Displays and Keeps::, for macros to indentation and turn off
|
||
filling.
|
||
|
||
|
||
File: groff, Node: Tabstops in ms, Next: ms Displays and Keeps, Prev: Indentation values in ms, Up: ms Body Text
|
||
|
||
4.3.5.6 Tab Stops
|
||
.................
|
||
|
||
Use the `ta' request to define tab stops as needed. *Note Tabs and
|
||
Fields::.
|
||
|
||
-- Macro: .TA
|
||
Use this macro to reset the tab stops to the default for `ms'
|
||
(every 5n). You can redefine the `TA' macro to create a different
|
||
set of default tab stops.
|
||
|
||
|
||
File: groff, Node: ms Displays and Keeps, Next: ms Insertions, Prev: Tabstops in ms, Up: ms Body Text
|
||
|
||
4.3.5.7 Displays and keeps
|
||
..........................
|
||
|
||
Use displays to show text-based examples or figures (such as code
|
||
listings).
|
||
|
||
Displays turn off filling, so lines of code are displayed as-is
|
||
without inserting `br' requests in between each line. Displays can be
|
||
"kept" on a single page, or allowed to break across pages.
|
||
|
||
-- Macro: .DS L
|
||
-- Macro: .LD
|
||
-- Macro: .DE
|
||
Left-justified display. The `.DS L' call generates a page break,
|
||
if necessary, to keep the entire display on one page. The `LD'
|
||
macro allows the display to break across pages. The `DE' macro
|
||
ends the display.
|
||
|
||
-- Macro: .DS I
|
||
-- Macro: .ID
|
||
-- Macro: .DE
|
||
Indents the display as defined by the `DI' register. The `.DS I'
|
||
call generates a page break, if necessary, to keep the entire
|
||
display on one page. The `ID' macro allows the display to break
|
||
across pages. The `DE' macro ends the display.
|
||
|
||
-- Macro: .DS B
|
||
-- Macro: .BD
|
||
-- Macro: .DE
|
||
Sets a block-centered display: the entire display is
|
||
left-justified, but indented so that the longest line in the
|
||
display is centered on the page. The `.DS B' call generates a
|
||
page break, if necessary, to keep the entire display on one page.
|
||
The `BD' macro allows the display to break across pages. The `DE'
|
||
macro ends the display.
|
||
|
||
-- Macro: .DS C
|
||
-- Macro: .CD
|
||
-- Macro: .DE
|
||
Sets a centered display: each line in the display is centered. The
|
||
`.DS C' call generates a page break, if necessary, to keep the
|
||
entire display on one page. The `CD' macro allows the display to
|
||
break across pages. The `DE' macro ends the display.
|
||
|
||
-- Macro: .DS R
|
||
-- Macro: .RD
|
||
-- Macro: .DE
|
||
Right-justifies each line in the display. The `.DS R' call
|
||
generates a page break, if necessary, to keep the entire display on
|
||
one page. The `RD' macro allows the display to break across
|
||
pages. The `DE' macro ends the display.
|
||
|
||
-- Macro: .Ds
|
||
-- Macro: .De
|
||
These two macros were formerly provided as aliases for `DS' and
|
||
`DE', respectively. They have been removed, and should no longer
|
||
be used. The original implementations of `DS' and `DE' are
|
||
retained, and should be used instead. X11 documents which actually
|
||
use `Ds' and `De' always load a specific macro file from the X11
|
||
distribution (`macros.t') which provides proper definitions for
|
||
the two macros.
|
||
|
||
On occasion, you may want to "keep" other text together on a page.
|
||
For example, you may want to keep two paragraphs together, or a
|
||
paragraph that refers to a table (or list, or other item) immediately
|
||
following. The `ms' macros provide the `KS' and `KE' macros for this
|
||
purpose.
|
||
|
||
-- Macro: .KS
|
||
-- Macro: .KE
|
||
The `KS' macro begins a block of text to be kept on a single page,
|
||
and the `KE' macro ends the block.
|
||
|
||
-- Macro: .KF
|
||
-- Macro: .KE
|
||
Specifies a "floating keep"; if the keep cannot fit on the current
|
||
page, `groff' holds the contents of the keep and allows text
|
||
following the keep (in the source file) to fill in the remainder of
|
||
the current page. When the page breaks, whether by an explicit
|
||
`bp' request or by reaching the end of the page, `groff' prints
|
||
the floating keep at the top of the new page. This is useful for
|
||
printing large graphics or tables that do not need to appear
|
||
exactly where specified.
|
||
|
||
You can also use the `ne' request to force a page break if there is
|
||
not enough vertical space remaining on the page.
|
||
|
||
Use the following macros to draw a box around a section of text (such
|
||
as a display).
|
||
|
||
-- Macro: .B1
|
||
-- Macro: .B2
|
||
Marks the beginning and ending of text that is to have a box drawn
|
||
around it. The `B1' macro begins the box; the `B2' macro ends it.
|
||
Text in the box is automatically placed in a diversion (keep).
|
||
|
||
|
||
File: groff, Node: ms Insertions, Next: Example multi-page table, Prev: ms Displays and Keeps, Up: ms Body Text
|
||
|
||
4.3.5.8 Tables, figures, equations, and references
|
||
..................................................
|
||
|
||
The `ms' macros support the standard `groff' preprocessors: `tbl',
|
||
`pic', `eqn', and `refer'. You mark text meant for preprocessors by
|
||
enclosing it in pairs of tags as follows.
|
||
|
||
-- Macro: .TS [`H']
|
||
-- Macro: .TE
|
||
Denotes a table, to be processed by the `tbl' preprocessor. The
|
||
optional argument `H' to `TS' instructs `groff' to create a
|
||
running header with the information up to the `TH' macro. `groff'
|
||
prints the header at the beginning of the table; if the table runs
|
||
onto another page, `groff' prints the header on the next page as
|
||
well.
|
||
|
||
-- Macro: .PS
|
||
-- Macro: .PE
|
||
Denotes a graphic, to be processed by the `pic' preprocessor. You
|
||
can create a `pic' file by hand, using the AT&T `pic' manual
|
||
available on the Web as a reference, or by using a graphics
|
||
program such as `xfig'.
|
||
|
||
-- Macro: .EQ [align]
|
||
-- Macro: .EN
|
||
Denotes an equation, to be processed by the `eqn' preprocessor.
|
||
The optional ALIGN argument can be `C', `L', or `I' to center (the
|
||
default), left-justify, or indent the equation.
|
||
|
||
-- Macro: .[
|
||
-- Macro: .]
|
||
Denotes a reference, to be processed by the `refer' preprocessor.
|
||
The GNU `refer(1)' man page provides a comprehensive reference to
|
||
the preprocessor and the format of the bibliographic database.
|
||
|
||
* Menu:
|
||
|
||
* Example multi-page table::
|
||
|
||
|
||
File: groff, Node: Example multi-page table, Next: ms Footnotes, Prev: ms Insertions, Up: ms Body Text
|
||
|
||
4.3.5.9 An example multi-page table
|
||
...................................
|
||
|
||
The following is an example of how to set up a table that may print
|
||
across two or more pages.
|
||
|
||
|
||
.TS H
|
||
allbox expand;
|
||
cb | cb .
|
||
Text ...of heading...
|
||
_
|
||
.TH
|
||
.T&
|
||
l | l .
|
||
... the rest of the table follows...
|
||
.CW
|
||
.TE
|
||
|
||
|
||
File: groff, Node: ms Footnotes, Prev: Example multi-page table, Up: ms Body Text
|
||
|
||
4.3.5.10 Footnotes
|
||
..................
|
||
|
||
The `ms' macro package has a flexible footnote system. You can specify
|
||
either numbered footnotes or symbolic footnotes (that is, using a
|
||
marker such as a dagger symbol).
|
||
|
||
-- String: \*[*]
|
||
Specifies the location of a numbered footnote marker in the text.
|
||
|
||
-- Macro: .FS
|
||
-- Macro: .FE
|
||
Specifies the text of the footnote. The default action is to
|
||
create a numbered footnote; you can create a symbolic footnote by
|
||
specifying a "mark" glyph (such as `\[dg]' for the dagger glyph)
|
||
in the body text and as an argument to the `FS' macro, followed by
|
||
the text of the footnote and the `FE' macro.
|
||
|
||
You can control how `groff' prints footnote numbers by changing the
|
||
value of the `FF' register. *Note ms Document Control Registers::.
|
||
|
||
Footnotes can be safely used within keeps and displays, but you
|
||
should avoid using numbered footnotes within floating keeps. You can
|
||
set a second `\**' marker between a `\**' and its corresponding `.FS'
|
||
entry; as long as each `FS' macro occurs _after_ the corresponding
|
||
`\**' and the occurrences of `.FS' are in the same order as the
|
||
corresponding occurrences of `\**'.
|
||
|
||
|
||
File: groff, Node: ms Page Layout, Next: Differences from AT&T ms, Prev: ms Body Text, Up: ms
|
||
|
||
4.3.6 Page layout
|
||
-----------------
|
||
|
||
The default output from the `ms' macros provides a minimalist page
|
||
layout: it prints a single column, with the page number centered at the
|
||
top of each page. It prints no footers.
|
||
|
||
You can change the layout by setting the proper number registers and
|
||
strings.
|
||
|
||
* Menu:
|
||
|
||
* ms Headers and Footers::
|
||
* ms Margins::
|
||
* ms Multiple Columns::
|
||
* ms TOC::
|
||
* ms Strings and Special Characters::
|
||
|
||
|
||
File: groff, Node: ms Headers and Footers, Next: ms Margins, Prev: ms Page Layout, Up: ms Page Layout
|
||
|
||
4.3.6.1 Headers and footers
|
||
...........................
|
||
|
||
For documents that do not distinguish between odd and even pages, set
|
||
the following strings:
|
||
|
||
-- String: \*[LH]
|
||
-- String: \*[CH]
|
||
-- String: \*[RH]
|
||
Sets the left, center, and right headers.
|
||
|
||
-- String: \*[LF]
|
||
-- String: \*[CF]
|
||
-- String: \*[RF]
|
||
Sets the left, center, and right footers.
|
||
|
||
For documents that need different information printed in the even and
|
||
odd pages, use the following macros:
|
||
|
||
-- Macro: .OH 'left'center'right'
|
||
-- Macro: .EH 'left'center'right'
|
||
-- Macro: .OF 'left'center'right'
|
||
-- Macro: .EF 'left'center'right'
|
||
The `OH' and `EH' macros define headers for the odd and even
|
||
pages; the `OF' and `EF' macros define footers for the odd and
|
||
even pages. This is more flexible than defining the individual
|
||
strings.
|
||
|
||
You can replace the quote (`'') marks with any character not
|
||
appearing in the header or footer text.
|
||
|
||
|
||
File: groff, Node: ms Margins, Next: ms Multiple Columns, Prev: ms Headers and Footers, Up: ms Page Layout
|
||
|
||
4.3.6.2 Margins
|
||
...............
|
||
|
||
You control margins using a set of number registers. *Note ms Document
|
||
Control Registers::, for details.
|
||
|
||
|
||
File: groff, Node: ms Multiple Columns, Next: ms TOC, Prev: ms Margins, Up: ms Page Layout
|
||
|
||
4.3.6.3 Multiple columns
|
||
........................
|
||
|
||
The `ms' macros can set text in as many columns as will reasonably fit
|
||
on the page. The following macros are available; all of them force a
|
||
page break if a multi-column mode is already set. However, if the
|
||
current mode is single-column, starting a multi-column mode does _not_
|
||
force a page break.
|
||
|
||
-- Macro: .1C
|
||
Single-column mode.
|
||
|
||
-- Macro: .2C
|
||
Two-column mode.
|
||
|
||
-- Macro: .MC [width [gutter]]
|
||
Multi-column mode. If you specify no arguments, it is equivalent
|
||
to the `2C' macro. Otherwise, WIDTH is the width of each column
|
||
and GUTTER is the space between columns. The `MINGW' number
|
||
register controls the default gutter width.
|
||
|
||
|
||
File: groff, Node: ms TOC, Next: ms Strings and Special Characters, Prev: ms Multiple Columns, Up: ms Page Layout
|
||
|
||
4.3.6.4 Creating a table of contents
|
||
....................................
|
||
|
||
The facilities in the `ms' macro package for creating a table of
|
||
contents are semi-automated at best. Assuming that you want the table
|
||
of contents to consist of the document's headings, you need to repeat
|
||
those headings wrapped in `XS' and `XE' macros.
|
||
|
||
-- Macro: .XS [page]
|
||
-- Macro: .XA [page]
|
||
-- Macro: .XE
|
||
These macros define a table of contents or an individual entry in
|
||
the table of contents, depending on their use. The macros are very
|
||
simple; they cannot indent a heading based on its level. The
|
||
easiest way to work around this is to add tabs to the table of
|
||
contents string. The following is an example:
|
||
|
||
|
||
.NH 1
|
||
Introduction
|
||
.XS
|
||
Introduction
|
||
.XE
|
||
.LP
|
||
...
|
||
.CW
|
||
.NH 2
|
||
Methodology
|
||
.XS
|
||
Methodology
|
||
.XE
|
||
.LP
|
||
...
|
||
|
||
You can manually create a table of contents by beginning with the
|
||
`XS' macro for the first entry, specifying the page number for
|
||
that entry as the argument to `XS'. Add subsequent entries using
|
||
the `XA' macro, specifying the page number for that entry as the
|
||
argument to `XA'. The following is an example:
|
||
|
||
|
||
.XS 1
|
||
Introduction
|
||
.XA 2
|
||
A Brief History of the Universe
|
||
.XA 729
|
||
Details of Galactic Formation
|
||
...
|
||
.XE
|
||
|
||
|
||
-- Macro: .TC [`no']
|
||
Prints the table of contents on a new page, setting the page number
|
||
to *i* (Roman lowercase numeral one). You should usually place
|
||
this macro at the end of the file, since `groff' is a single-pass
|
||
formatter and can only print what has been collected up to the
|
||
point that the `TC' macro appears.
|
||
|
||
The optional argument `no' suppresses printing the title specified
|
||
by the string register `TOC'.
|
||
|
||
-- Macro: .PX [`no']
|
||
Prints the table of contents on a new page, using the current page
|
||
numbering sequence. Use this macro to print a manually-generated
|
||
table of contents at the beginning of your document.
|
||
|
||
The optional argument `no' suppresses printing the title specified
|
||
by the string register `TOC'.
|
||
|
||
The `Groff and Friends HOWTO' includes a `sed' script that
|
||
automatically inserts `XS' and `XE' macro entries after each heading in
|
||
a document.
|
||
|
||
Altering the `NH' macro to automatically build the table of contents
|
||
is perhaps initially more difficult, but would save a great deal of
|
||
time in the long run if you use `ms' regularly.
|
||
|
||
|
||
File: groff, Node: ms Strings and Special Characters, Prev: ms TOC, Up: ms Page Layout
|
||
|
||
4.3.6.5 Strings and Special Characters
|
||
......................................
|
||
|
||
The `ms' macros provide the following predefined strings. You can
|
||
change the string definitions to help in creating documents in
|
||
languages other than English.
|
||
|
||
-- String: \*[REFERENCES]
|
||
Contains the string printed at the beginning of the references
|
||
(bibliography) page. The default is `References'.
|
||
|
||
-- String: \*[ABSTRACT]
|
||
Contains the string printed at the beginning of the abstract. The
|
||
default is `ABSTRACT'.
|
||
|
||
-- String: \*[TOC]
|
||
Contains the string printed at the beginning of the table of
|
||
contents.
|
||
|
||
-- String: \*[MONTH1]
|
||
-- String: \*[MONTH2]
|
||
-- String: \*[MONTH3]
|
||
-- String: \*[MONTH4]
|
||
-- String: \*[MONTH5]
|
||
-- String: \*[MONTH6]
|
||
-- String: \*[MONTH7]
|
||
-- String: \*[MONTH8]
|
||
-- String: \*[MONTH9]
|
||
-- String: \*[MONTH10]
|
||
-- String: \*[MONTH11]
|
||
-- String: \*[MONTH12]
|
||
Prints the full name of the month in dates. The default is
|
||
`January', `February', etc.
|
||
|
||
The following special characters are available(1) (*note ms Strings
|
||
and Special Characters-Footnote-1::):
|
||
|
||
-- String: \*[-]
|
||
Prints an em dash.
|
||
|
||
-- String: \*[Q]
|
||
-- String: \*[U]
|
||
Prints typographer's quotes in troff, and plain quotes in nroff.
|
||
`\*Q' is the left quote and `\*U' is the right quote.
|
||
|
||
Improved accent marks are available in the `ms' macros.
|
||
|
||
-- Macro: .AM
|
||
Specify this macro at the beginning of your document to enable
|
||
extended accent marks and special characters. This is a Berkeley
|
||
extension.
|
||
|
||
To use the accent marks, place them *after* the character being
|
||
accented.
|
||
|
||
Note that groff's native support for accents is superior to the
|
||
following definitions.
|
||
|
||
The following accent marks are available after invoking the `AM'
|
||
macro:
|
||
|
||
-- String: \*[']
|
||
Acute accent.
|
||
|
||
-- String: \*[`]
|
||
Grave accent.
|
||
|
||
-- String: \*[^]
|
||
Circumflex.
|
||
|
||
-- String: \*[,]
|
||
Cedilla.
|
||
|
||
-- String: \*[~]
|
||
Tilde.
|
||
|
||
-- String: \*[:]
|
||
Umlaut.
|
||
|
||
-- String: \*[v]
|
||
Hacek.
|
||
|
||
-- String: \*[_]
|
||
Macron (overbar).
|
||
|
||
-- String: \*[.]
|
||
Underdot.
|
||
|
||
-- String: \*[o]
|
||
Ring above.
|
||
|
||
The following are standalone characters available after invoking the
|
||
`AM' macro:
|
||
|
||
-- String: \*[?]
|
||
Upside-down question mark.
|
||
|
||
-- String: \*[!]
|
||
Upside-down exclamation point.
|
||
|
||
-- String: \*[8]
|
||
German <20> ligature.
|
||
|
||
-- String: \*[3]
|
||
Yogh.
|
||
|
||
-- String: \*[Th]
|
||
Uppercase thorn.
|
||
|
||
-- String: \*[th]
|
||
Lowercase thorn.
|
||
|
||
-- String: \*[D-]
|
||
Uppercase eth.
|
||
|
||
-- String: \*[d-]
|
||
Lowercase eth.
|
||
|
||
-- String: \*[q]
|
||
Hooked o.
|
||
|
||
-- String: \*[ae]
|
||
Lowercase <20> ligature.
|
||
|
||
-- String: \*[Ae]
|
||
Uppercase <20> ligature.
|
||
|
||
|
||
File: groff, Node: ms Strings and Special Characters-Footnotes, Up: ms Strings and Special Characters
|
||
|
||
(1) For an explanation what special characters are see *Note Special
|
||
Characters::.
|
||
|
||
|
||
File: groff, Node: Differences from AT&T ms, Next: Naming Conventions, Prev: ms Page Layout, Up: ms
|
||
|
||
4.3.7 Differences from AT&T `ms'
|
||
--------------------------------
|
||
|
||
This section lists the (minor) differences between the `groff -ms'
|
||
macros and AT&T `troff -ms' macros.
|
||
|
||
* The internals of `groff -ms' differ from the internals of AT&T
|
||
`troff -ms'. Documents that depend upon implementation details of
|
||
AT&T `troff -ms' may not format properly with `groff -ms'.
|
||
|
||
* The general error-handling policy of `groff -ms' is to detect and
|
||
report errors, rather than silently to ignore them.
|
||
|
||
* `groff -ms' does not work in compatibility mode (this is, with the
|
||
`-C' option).
|
||
|
||
* There is no special support for typewriter-like devices.
|
||
|
||
* `groff -ms' does not provide cut marks.
|
||
|
||
* Multiple line spacing is not supported. Use a larger vertical
|
||
spacing instead.
|
||
|
||
* Some UNIX `ms' documentation says that the `CW' and `GW' number
|
||
registers can be used to control the column width and gutter
|
||
width, respectively. These number registers are not used in
|
||
`groff -ms'.
|
||
|
||
* Macros that cause a reset (paragraphs, headings, etc.) may change
|
||
the indentation. Macros that change the indentation do not
|
||
increment or decrement the indentation, but rather set it
|
||
absolutely. This can cause problems for documents that define
|
||
additional macros of their own. The solution is to use not the
|
||
`in' request but instead the `RS' and `RE' macros.
|
||
|
||
* To make `groff -ms' use the default page offset (which also
|
||
specifies the left margin), the `PO' register must stay undefined
|
||
until the first `-ms' macro is evaluated. This implies that `PO'
|
||
should not be used early in the document, unless it is changed
|
||
also: Remember that accessing an undefined register automatically
|
||
defines it.
|
||
|
||
-- Register: \n[GS]
|
||
This number register is set to 1 by the `groff -ms' macros, but it
|
||
is not used by the `AT&T' `troff -ms' macros. Documents that need
|
||
to determine whether they are being formatted with `AT&T' `troff
|
||
-ms' or `groff -ms' should use this number register.
|
||
|
||
* Menu:
|
||
|
||
* Missing ms Macros::
|
||
* Additional ms Macros::
|
||
|
||
|
||
File: groff, Node: Missing ms Macros, Next: Additional ms Macros, Prev: Differences from AT&T ms, Up: Differences from AT&T ms
|
||
|
||
4.3.7.1 `troff' macros not appearing in `groff'
|
||
...............................................
|
||
|
||
Macros missing from `groff -ms' are cover page macros specific to Bell
|
||
Labs and Berkeley. The macros known to be missing are:
|
||
|
||
`.TM'
|
||
Technical memorandum; a cover sheet style
|
||
|
||
`.IM'
|
||
Internal memorandum; a cover sheet style
|
||
|
||
`.MR'
|
||
Memo for record; a cover sheet style
|
||
|
||
`.MF'
|
||
Memo for file; a cover sheet style
|
||
|
||
`.EG'
|
||
Engineer's notes; a cover sheet style
|
||
|
||
`.TR'
|
||
Computing Science Tech Report; a cover sheet style
|
||
|
||
`.OK'
|
||
Other keywords
|
||
|
||
`.CS'
|
||
Cover sheet information
|
||
|
||
`.MH'
|
||
A cover sheet macro
|
||
|
||
|
||
File: groff, Node: Additional ms Macros, Prev: Missing ms Macros, Up: Differences from AT&T ms
|
||
|
||
4.3.7.2 `groff' macros not appearing in AT&T `troff'
|
||
....................................................
|
||
|
||
The `groff -ms' macros have a few minor extensions compared to the AT&T
|
||
`troff -ms' macros.
|
||
|
||
-- Macro: .AM
|
||
Improved accent marks. *Note ms Strings and Special Characters::,
|
||
for details.
|
||
|
||
-- Macro: .DS I
|
||
Indented display. The default behavior of AT&T `troff -ms' was to
|
||
indent; the `groff' default prints displays flush left with the
|
||
body text.
|
||
|
||
-- Macro: .CW
|
||
Print text in `constant width' (Courier) font.
|
||
|
||
-- Macro: .IX
|
||
Indexing term (printed on standard error). You can write a script
|
||
to capture and process an index generated in this manner.
|
||
|
||
The following additional number registers appear in `groff -ms':
|
||
|
||
-- Register: \n[MINGW]
|
||
Specifies a minimum space between columns (for multi-column
|
||
output); this takes the place of the `GW' register that was
|
||
documented but apparently not implemented in AT&T `troff'.
|
||
|
||
Several new string registers are available as well. You can change
|
||
these to handle (for example) the local language. *Note ms Strings and
|
||
Special Characters::, for details.
|
||
|
||
|
||
File: groff, Node: Naming Conventions, Prev: Differences from AT&T ms, Up: ms
|
||
|
||
4.3.8 Naming Conventions
|
||
------------------------
|
||
|
||
The following conventions are used for names of macros, strings and
|
||
number registers. External names available to documents that use the
|
||
`groff -ms' macros contain only uppercase letters and digits.
|
||
|
||
Internally the macros are divided into modules; naming conventions
|
||
are as follows:
|
||
|
||
* Names used only within one module are of the form MODULE`*'NAME.
|
||
|
||
* Names used outside the module in which they are defined are of the
|
||
form MODULE`@'NAME.
|
||
|
||
* Names associated with a particular environment are of the form
|
||
ENVIRONMENT`:'NAME; these are used only within the `par' module.
|
||
|
||
* NAME does not have a module prefix.
|
||
|
||
* Constructed names used to implement arrays are of the form
|
||
ARRAY`!'INDEX.
|
||
|
||
Thus the groff ms macros reserve the following names:
|
||
|
||
* Names containing the characters `*', `@', and `:'.
|
||
|
||
* Names containing only uppercase letters and digits.
|
||
|
||
|
||
File: groff, Node: me, Next: mm, Prev: ms, Up: Macro Packages
|
||
|
||
4.4 `me'
|
||
========
|
||
|
||
See the `meintro.me' and `meref.me' documents in groff's `doc'
|
||
directory.
|
||
|
||
|
||
File: groff, Node: mm, Prev: me, Up: Macro Packages
|
||
|
||
4.5 `mm'
|
||
========
|
||
|
||
See the `groff_mm(7)' man page (type `man groff_mm' at the command
|
||
line).
|
||
|
||
|
||
File: groff, Node: gtroff Reference, Next: Preprocessors, Prev: Macro Packages, Up: Top
|
||
|
||
5 `gtroff' Reference
|
||
********************
|
||
|
||
This chapter covers *all* of the facilities of `gtroff'. Users of
|
||
macro packages may skip it if not interested in details.
|
||
|
||
* Menu:
|
||
|
||
* Text::
|
||
* Measurements::
|
||
* Expressions::
|
||
* Identifiers::
|
||
* Embedded Commands::
|
||
* Registers::
|
||
* Manipulating Filling and Adjusting::
|
||
* Manipulating Hyphenation::
|
||
* Manipulating Spacing::
|
||
* Tabs and Fields::
|
||
* Character Translations::
|
||
* Troff and Nroff Mode::
|
||
* Line Layout::
|
||
* Line Control::
|
||
* Page Layout::
|
||
* Page Control::
|
||
* Fonts and Symbols::
|
||
* Sizes::
|
||
* Strings::
|
||
* Conditionals and Loops::
|
||
* Writing Macros::
|
||
* Page Motions::
|
||
* Drawing Requests::
|
||
* Traps::
|
||
* Diversions::
|
||
* Environments::
|
||
* Suppressing output::
|
||
* Colors::
|
||
* I/O::
|
||
* Postprocessor Access::
|
||
* Miscellaneous::
|
||
* Gtroff Internals::
|
||
* Debugging::
|
||
* Implementation Differences::
|
||
|
||
|
||
File: groff, Node: Text, Next: Measurements, Prev: gtroff Reference, Up: gtroff Reference
|
||
|
||
5.1 Text
|
||
========
|
||
|
||
`gtroff' input files contain text with control commands interspersed
|
||
throughout. But, even without control codes, `gtroff' still does
|
||
several things with the input text:
|
||
|
||
* filling and adjusting
|
||
|
||
* adding additional space after sentences
|
||
|
||
* hyphenating
|
||
|
||
* inserting implicit line breaks
|
||
|
||
* Menu:
|
||
|
||
* Filling and Adjusting::
|
||
* Hyphenation::
|
||
* Sentences::
|
||
* Tab Stops::
|
||
* Implicit Line Breaks::
|
||
* Input Conventions::
|
||
* Input Encodings::
|
||
|
||
|
||
File: groff, Node: Filling and Adjusting, Next: Hyphenation, Prev: Text, Up: Text
|
||
|
||
5.1.1 Filling and Adjusting
|
||
---------------------------
|
||
|
||
When `gtroff' reads text, it collects words from the input and fits as
|
||
many of them together on one output line as it can. This is known as
|
||
"filling".
|
||
|
||
Once `gtroff' has a "filled" line, it tries to "adjust" it. This
|
||
means it widens the spacing between words until the text reaches the
|
||
right margin (in the default adjustment mode). Extra spaces between
|
||
words are preserved, but spaces at the end of lines are ignored.
|
||
Spaces at the front of a line cause a "break" (breaks are explained in
|
||
*Note Implicit Line Breaks::).
|
||
|
||
*Note Manipulating Filling and Adjusting::.
|
||
|
||
|
||
File: groff, Node: Hyphenation, Next: Sentences, Prev: Filling and Adjusting, Up: Text
|
||
|
||
5.1.2 Hyphenation
|
||
-----------------
|
||
|
||
Since the odds are not great for finding a set of words, for every
|
||
output line, which fit nicely on a line without inserting excessive
|
||
amounts of space between words, `gtroff' hyphenates words so that it
|
||
can justify lines without inserting too much space between words. It
|
||
uses an internal hyphenation algorithm (a simplified version of the
|
||
algorithm used within TeX) to indicate which words can be hyphenated
|
||
and how to do so. When a word is hyphenated, the first part of the
|
||
word is added to the current filled line being output (with an attached
|
||
hyphen), and the other portion is added to the next line to be filled.
|
||
|
||
*Note Manipulating Hyphenation::.
|
||
|
||
|
||
File: groff, Node: Sentences, Next: Tab Stops, Prev: Hyphenation, Up: Text
|
||
|
||
5.1.3 Sentences
|
||
---------------
|
||
|
||
Although it is often debated, some typesetting rules say there should be
|
||
different amounts of space after various punctuation marks. For
|
||
example, the `Chicago typsetting manual' says that a period at the end
|
||
of a sentence should have twice as much space following it as would a
|
||
comma or a period as part of an abbreviation.
|
||
|
||
`gtroff' does this by flagging certain characters (normally `!',
|
||
`?', and `.') as "end-of-sentence" characters. When `gtroff'
|
||
encounters one of these characters at the end of a line, it appends a
|
||
normal space followed by a "sentence space" in the formatted output.
|
||
(This justifies one of the conventions mentioned in *Note Input
|
||
Conventions::.)
|
||
|
||
In addition, the following characters and symbols are treated
|
||
transparently while handling end-of-sentence characters: `"', `'', `)',
|
||
`]', `*', `\[dg]', and `\[rq]'.
|
||
|
||
See the `cflags' request in *Note Using Symbols::, for more details.
|
||
|
||
To prevent the insertion of extra space after an end-of-sentence
|
||
character (at the end of a line), append `\&'.
|
||
|
||
|
||
File: groff, Node: Tab Stops, Next: Implicit Line Breaks, Prev: Sentences, Up: Text
|
||
|
||
5.1.4 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, Next: Input Conventions, Prev: Tab Stops, Up: Text
|
||
|
||
5.1.5 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: Input Encodings, Prev: Implicit Line Breaks, Up: Text
|
||
|
||
5.1.6 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: Input Encodings, Prev: Input Conventions, Up: Text
|
||
|
||
5.1.7 Input Encodings
|
||
---------------------
|
||
|
||
Currently, the following input encodings are available.
|
||
|
||
cp1047
|
||
This input encoding works only on EBCDIC platforms (and vice
|
||
versa, the other input encodings don't work with EBCDIC); the file
|
||
`cp1047.tmac' is by default loaded at start-up.
|
||
|
||
latin-1
|
||
This is the default input encoding on non-EBCDIC platforms; the
|
||
file `latin1.tmac' is loaded at start-up.
|
||
|
||
latin-2
|
||
To use this encoding, either say `.mso latin2.tmac' at the very
|
||
beginning of your document or use `-mlatin2' as a command line
|
||
argument for `groff'.
|
||
|
||
latin-9 (latin-0)
|
||
This encoding is intended (at least in Europe) to replace latin-1
|
||
encoding. The main difference to latin-1 is that latin-9 contains
|
||
the Euro character. To use this encoding, either say
|
||
`.mso latin9.tmac' at the very beginning of your document or use
|
||
`-mlatin9' as a command line argument for `groff'.
|
||
|
||
Note that it can happen that some input encoding characters are not
|
||
available for a particular output device. For example, saying
|
||
|
||
|
||
groff -Tlatin1 -mlatin9 ...
|
||
|
||
will fail if you use the Euro character in the input. Usually, this
|
||
limitation is present only for devices which have a limited set of
|
||
output glyphs (e.g. `-Tascii' and `-Tlatin1'); for other devices it is
|
||
usually sufficient to install proper fonts which contain the necessary
|
||
glyphs.
|
||
|
||
Due to the importance of the Euro glyph in Europe, the groff package
|
||
now comes with a POSTSCRIPT font called `freeeuro.pfa' which provides
|
||
various glyph shapes for the Euro. With other words, latin-9 encoding
|
||
is supported for the `-Tps' device out of the box (latin-2 isn't).
|
||
|
||
By its very nature, `-Tutf8' supports all input encodings; `-Tdvi'
|
||
has support for both latin-2 and latin-9 if the command line `-mec' is
|
||
used also to load the file `ec.tmac' (which flips to the EC fonts).
|
||
|
||
|
||
File: groff, Node: Measurements, Next: Expressions, Prev: Text, Up: gtroff Reference
|
||
|
||
5.2 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
|
||
|
||
5.2.1 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
|
||
|
||
5.3 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 and Macro Arguments::, and *Note Conditionals and
|
||
Loops::.
|
||
|
||
|
||
File: groff, Node: Identifiers, Next: Embedded Commands, Prev: Expressions, Up: gtroff Reference
|
||
|
||
5.4 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
|
||
|
||
5.5 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
|
||
|
||
5.5.1 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 and Macro Arguments::
|
||
|
||
|
||
File: groff, Node: Request and Macro Arguments, Prev: Requests, Up: Requests
|
||
|
||
5.5.1.1 Request and Macro Arguments
|
||
...................................
|
||
|
||
Arguments to requests and macros are processed much like the shell: The
|
||
line is split into arguments according to spaces.(1) (*note Request and
|
||
Macro Arguments-Footnote-1::)
|
||
|
||
An argument to a macro which is intended to contain spaces can
|
||
either be enclosed in double quotes, or have the spaces "escaped" with
|
||
backslashes. This is _not_ true for requests.
|
||
|
||
Here are a few examples for a hypothetical macro `uh':
|
||
|
||
|
||
.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 and Macro 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 and Macro Arguments-Footnotes, Up: Request and Macro 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
|
||
|
||
5.5.2 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 basically in the same manner.
|
||
|
||
*Note Writing Macros::, and *Note Request and Macro Arguments::.
|
||
|
||
|
||
File: groff, Node: Escapes, Prev: Macros, Up: Embedded Commands
|
||
|
||
5.5.3 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 caf<61> 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
|
||
|
||
5.5.3.1 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 [end]
|
||
Ignore all input until `gtroff' encounters the macro named `.'END
|
||
on a line by itself (or `..' if END 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
|
||
|
||
5.6 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
|
||
|
||
5.6.1 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
|
||
|
||
5.6.2 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
|
||
|
||
5.6.3 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
|
||
|
||
5.6.4 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
|
||
|
||
5.6.5 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
|
||
*Note Register Index::.
|
||
|
||
`\n[.F]'
|
||
This string-valued register returns the current input file name.
|
||
|
||
`\n[.H]'
|
||
Horizontal resolution in basic units.
|
||
|
||
`\n[.U]'
|
||
If `gtroff' is called with the `-U' command line option, the
|
||
number register `.U' is set to 1, and zero otherwise. *Note Groff
|
||
Options::.
|
||
|
||
`\n[.V]'
|
||
Vertical resolution in basic units.
|
||
|
||
`\n[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'.
|
||
|
||
`\n[minutes]'
|
||
The number of minutes after the hour, in the range 0 to 59.
|
||
Initialized at start-up of `gtroff'.
|
||
|
||
`\n[hours]'
|
||
The number of hours past midnight, in the range 0 to 23.
|
||
Initialized at start-up of `gtroff'.
|
||
|
||
`\n[dw]'
|
||
Day of the week (1-7).
|
||
|
||
`\n[dy]'
|
||
Day of the month (1-31).
|
||
|
||
`\n[mo]'
|
||
Current month (1-12).
|
||
|
||
`\n[year]'
|
||
The current year.
|
||
|
||
`\n[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.
|
||
|
||
`\n[.c]'
|
||
`\n[c.]'
|
||
The current _input_ line number. Register `.c' is read-only,
|
||
whereas `c.' (a `gtroff' extension) is writable also, affecting
|
||
both `.c' and `c.'.
|
||
|
||
`\n[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.
|
||
|
||
`\n[.x]'
|
||
The major version number. For example, if the version number is
|
||
1.03 then `.x' contains `1'.
|
||
|
||
`\n[.y]'
|
||
The minor version number. For example, if the version number is
|
||
1.03 then `.y' contains `03'.
|
||
|
||
`\n[.Y]'
|
||
The revision number of `groff'.
|
||
|
||
`\n[$$]'
|
||
The process ID of `gtroff'.
|
||
|
||
`\n[.g]'
|
||
Always 1. Macros should use this to determine whether they are
|
||
running under GNU `troff'.
|
||
|
||
`\n[.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::.
|
||
|
||
`\n[.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.
|
||
|
||
`\n[.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::.
|
||
|
||
`\*[.T]'
|
||
A single read-write string register which contains the current
|
||
output device (for example, `latin1' or `ps'). This is the only
|
||
string register defined by `gtroff'.
|
||
|
||
|
||
File: groff, Node: Manipulating Filling and Adjusting, Next: Manipulating Hyphenation, Prev: Registers, Up: gtroff Reference
|
||
|
||
5.7 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'.
|
||
|
||
Finally, MODE can be the numeric argument returned by the `.j'
|
||
register.
|
||
|
||
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
|
||
.nr ad \n[.j]
|
||
text
|
||
.ad c
|
||
text
|
||
.na
|
||
text
|
||
.ad \" back to centering
|
||
text
|
||
.ad \n[ad] \" back to right justifying
|
||
|
||
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 size of a space between 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.
|
||
In fill mode, the values specify the minimum distance.
|
||
|
||
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.
|
||
|
||
Another useful application of the `ss' request is to insert
|
||
discardable horizontal space, i.e., space which is discarded at a
|
||
line break. For example, paragraph-style footnotes could be
|
||
separated this way:
|
||
|
||
|
||
.ll 4.5i
|
||
1.\ This is the first footnote.\c
|
||
.ss 48
|
||
.nop
|
||
.ss 12
|
||
2.\ This is the second footnote.
|
||
|
||
The result:
|
||
|
||
|
||
1. This is the first footnote. 2. This
|
||
is the second footnote.
|
||
|
||
Note that the `\h' escape produces unbreakable space.
|
||
|
||
-- 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::).
|
||
|
||
|
||
File: groff, Node: Manipulating Hyphenation, Next: Manipulating Spacing, Prev: Manipulating Filling and Adjusting, Up: gtroff Reference
|
||
|
||
5.8 Manipulating Hyphenation
|
||
============================
|
||
|
||
Here a description of requests which influence hyphenation.
|
||
|
||
-- Request: .hy [mode]
|
||
-- Register: \n[.hy]
|
||
Enable hyphenation. The request has an optional numeric argument,
|
||
MODE, to restrict hyphenation if necessary:
|
||
|
||
`1'
|
||
The default argument if MODE is omitted. Hyphenate without
|
||
restrictions. This is also the start-up value of `gtroff'.
|
||
|
||
`2'
|
||
Do not hyphenate the last word on a page or column.
|
||
|
||
`4'
|
||
Do not hyphenate the last two characters of a word.
|
||
|
||
`8'
|
||
Do not hyphenate the first two characters of a word.
|
||
|
||
Values in the previous table are additive. For example, the
|
||
value 12 causes `gtroff' to neither hyphenate the last two nor the
|
||
first two characters of a word.
|
||
|
||
The current hyphenation restrictions can be found in the read-only
|
||
number register `.hy'.
|
||
|
||
The hyphenation mode is associated with the current environment
|
||
(*note Environments::).
|
||
|
||
-- Request: .nh
|
||
Disable hyphenation (i.e., set the hyphenation mode to zero). Note
|
||
that the hyphenation mode of the last call to `hy' is not
|
||
remembered.
|
||
|
||
The hyphenation mode is associated with the current environment
|
||
(*note Environments::).
|
||
|
||
-- Request: .hlm [nnn]
|
||
-- Register: \n[.hlm]
|
||
-- Register: \n[.hlc]
|
||
Set the maximum number of consecutive hyphenated lines to NNN. If
|
||
this number is negative, there is no maximum. The default value
|
||
is -1 if NNN is omitted. This value is associated with the
|
||
current environment (*note Environments::). Only lines output
|
||
from a given environment count towards the maximum associated with
|
||
that environment. Hyphens resulting from `\%' are counted;
|
||
explicit hyphens are not.
|
||
|
||
The current setting of `hlm' is available in the `.hlm' read-only
|
||
number register. Also the number of immediately preceding
|
||
consecutive hyphenated lines are available in the read-only number
|
||
register `.hlc'.
|
||
|
||
-- Request: .hw word1 word2 ...
|
||
Define how WORD1, WORD2, etc. are to be hyphenated. The words
|
||
must be given with hyphens at the hyphenation points. For example:
|
||
|
||
|
||
.hw in-sa-lub-rious
|
||
|
||
Besides the space character, any character whose hyphenation code
|
||
value is zero can be used to separate the arguments of `hw' (see
|
||
the documentation for the `hcode' request below for more
|
||
information). In addition, this request can be used more than
|
||
once.
|
||
|
||
Hyphenation exceptions specified with the `hw' request are
|
||
associated with the current hyphenation language; it causes an
|
||
error if there is no current hyphenation language.
|
||
|
||
This request is ignored if there is no parameter.
|
||
|
||
In old versions of `troff' there was a limited amount of space to
|
||
store such information; fortunately, with `gtroff', this is no
|
||
longer a restriction.
|
||
|
||
-- Escape: \%
|
||
-- Escape: \:
|
||
To tell `gtroff' how to hyphenate words on the fly, use the `\%'
|
||
escape, also known as the "hyphenation character". Preceding a
|
||
word with this character prevents it from being hyphenated;
|
||
putting it inside a word indicates to `gtroff' that the word may
|
||
be hyphenated at that point. Note that this mechanism only
|
||
affects that one occurrence of the word; to change the hyphenation
|
||
of a word for the entire document, use the `hw' request.
|
||
|
||
The `\:' escape inserts a zero-width break point (that is, the
|
||
word breaks but without adding a hyphen).
|
||
|
||
|
||
... check the /var/log/\:httpd/\:access_log file ...
|
||
|
||
Note that `\X' and `\Y' start a word, that is, the `\%' escape in
|
||
(say) `\X'...'\%foobar' and `\Y'...'\%foobar' no longer prevents
|
||
hyphenation but inserts a hyphenation point at the beginning of
|
||
`foobar'; most likely this isn't what you want to do.
|
||
|
||
-- Request: .hc [char]
|
||
Change the hyphenation character to CHAR. This character then
|
||
works the same as the `\%' escape, and thus, no longer appears in
|
||
the output. Without an argument, `hc' resets the hyphenation
|
||
character to be `\%' (the default) only.
|
||
|
||
The hyphenation character is associated with the current
|
||
environment (*note Environments::).
|
||
|
||
-- Request: .hpf pattern_file
|
||
-- Request: .hpfa pattern_file
|
||
-- Request: .hpfcode a b [c d ...]
|
||
Read in a file of hyphenation patterns. This file is searched for
|
||
in the same way as `NAME.tmac' (or `tmac.NAME') is searched for if
|
||
the `-mNAME' option is specified.
|
||
|
||
It should have the same format as (simple) TeX patterns files.
|
||
More specifically, the following scanning rules are implemented.
|
||
|
||
* A percent sign starts a comment (up to the end of the line)
|
||
even if preceded by a backslash.
|
||
|
||
* No support for `digraphs' like `\$'.
|
||
|
||
* `^^XX' (X is 0-9 or a-f) and `^^X' (character code of X in
|
||
the range 0-127) are recognized; other use of `^' causes an
|
||
error.
|
||
|
||
* No macro expansion.
|
||
|
||
* `hpf' checks for the expression `\patterns{...}' (possibly
|
||
with whitespace before and after the braces). Everything
|
||
between the braces is taken as hyphenation patterns.
|
||
Consequently, `{' and `}' are not allowed in patterns.
|
||
|
||
* Similarly, `\hyphenation{...}' gives a list of hyphenation
|
||
exceptions.
|
||
|
||
* `\endinput' is recognized also.
|
||
|
||
* For backwards compatibility, if `\patterns' is missing, the
|
||
whole file is treated as a list of hyphenation patterns (only
|
||
recognizing the `%' character as the start of a comment).
|
||
|
||
If no `hpf' request is specified (either in the document or in a
|
||
macro package), `gtroff' won't hyphenate at all.
|
||
|
||
The `hpfa' request appends a file of patterns to the current list.
|
||
|
||
The `hpfcode' request defines mapping values for character codes in
|
||
hyphenation patterns. `hpf' or `hpfa' then apply the mapping
|
||
(after reading the patterns) before replacing or appending them to
|
||
the current list of patterns. Its arguments are pairs of
|
||
character codes - integers from 0 to 255. The request maps
|
||
character code A to code B, code C to code D, and so on. You can
|
||
use character codes which would be invalid otherwise.
|
||
|
||
The set of hyphenation patterns is associated with the current
|
||
language set by the `hla' request. The `hpf' request is usually
|
||
invoked by the `troffrc' or `troffrc-end' file; by default,
|
||
`troffrc' loads hyphenation patterns and exceptions for American
|
||
English (in files `hyphen.us' and `hyphenex.us').
|
||
|
||
A second call to `hpf' (for the same language) will replace the
|
||
hyphenation patterns with the new ones.
|
||
|
||
Invoking `hpf' causes an error if there is no current hyphenation
|
||
language.
|
||
|
||
-- Request: .hcode c1 code1 [c2 code2 ...]
|
||
Set the hyphenation code of character C1 to CODE1, that of C2 to
|
||
CODE2, etc. A hyphenation code must be a single input character
|
||
(not a special character) other than a digit or a space.
|
||
|
||
To make hyphenation work, hyphenation codes must be set up. At
|
||
start-up, groff only assigns hyphenation codes to the letters
|
||
`a'-`z' (mapped to themselves) and to the letters `A'-`Z' (mapped
|
||
to `a'-`z'); all other hyphenation codes are set to zero.
|
||
Normally, hyphenation patterns contain only lowercase letters
|
||
which should be applied regardless of case. With other words, the
|
||
words `FOO' and `Foo' should be hyphenated exactly the same way as
|
||
the word `foo' is hyphenated, and this is what `hcode' is good
|
||
for. Words which contain other letters won't be hyphenated
|
||
properly if the corresponding hyphenation patterns actually do
|
||
contain them. For example, the following `hcode' requests are
|
||
necessary to assign hyphenation codes to the letters `<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
|
||
(this is needed for German):
|
||
|
||
|
||
.hcode <20> <20> <20> <20>
|
||
.hcode <20> <20> <20> <20>
|
||
.hcode <20> <20> <20> <20>
|
||
.hcode <20> <20>
|
||
|
||
Without those assignments, groff treats German words like
|
||
`Kinderg<72>rten' (the plural form of `kindergarten') as two
|
||
substrings `kinderg' and `rten' because the hyphenation code of
|
||
the umlaut a is zero by default. There is a German hyphenation
|
||
pattern which covers `kinder', so groff finds the hyphenation
|
||
`kin-der'. The other two hyphenation points (`kin-der-g<>r-ten')
|
||
are missed.
|
||
|
||
This request is ignored if it has no parameter.
|
||
|
||
-- Request: .hym [length]
|
||
-- Register: \n[.hym]
|
||
Set the (right) hyphenation margin to LENGTH. If the current
|
||
adjustment mode is not `b' or `n', the line is not hyphenated if
|
||
it is shorter than LENGTH. Without an argument, the hyphenation
|
||
margin is reset to its default value, which is 0. The default
|
||
scaling indicator for this request is `m'. The hyphenation margin
|
||
is associated with the current environment (*note Environments::).
|
||
|
||
A negative argument resets the hyphenation margin to zero, emitting
|
||
a warning of type `range'.
|
||
|
||
The current hyphenation margin is available in the `.hym' read-only
|
||
number register.
|
||
|
||
-- Request: .hys [hyphenation_space]
|
||
-- Register: \n[.hys]
|
||
Set the hyphenation space to HYPHENATION_SPACE. If the current
|
||
adjustment mode is `b' or `n', don't hyphenate the line if it can
|
||
be justified by adding no more than HYPHENATION_SPACE extra space
|
||
to each word space. Without argument, the hyphenation space is
|
||
set to its default value, which is 0. The default scaling
|
||
indicator for this request is `m'. The hyphenation space is
|
||
associated with the current environment (*note Environments::).
|
||
|
||
A negative argument resets the hyphenation space to zero, emitting
|
||
a warning of type `range'.
|
||
|
||
The current hyphenation space is available in the `.hys' read-only
|
||
number register.
|
||
|
||
-- Request: .shc [glyph]
|
||
Set the "soft hyphen character" to GLYPH.(1) (*note Manipulating
|
||
Hyphenation-Footnote-1::) If the argument is omitted, the soft
|
||
hyphen character is set to the default glyph `\(hy' (this is the
|
||
start-up value of `gtroff' also). The soft hyphen character is
|
||
the glyph that is inserted when a word is hyphenated at a line
|
||
break. If the soft hyphen character does not exist in the font of
|
||
the character immediately preceding a potential break point, then
|
||
the line is not broken at that point. Neither definitions
|
||
(specified with the `char' request) nor translations (specified
|
||
with the `tr' request) are considered when finding the soft hyphen
|
||
character.
|
||
|
||
-- Request: .hla language
|
||
-- Register: \n[.hla]
|
||
Set the current hyphenation language to the string LANGUAGE.
|
||
Hyphenation exceptions specified with the `hw' request and
|
||
hyphenation patterns specified with the `hpf' and `hpfa' requests
|
||
are both associated with the current hyphenation language. The
|
||
`hla' request is usually invoked by the `troffrc' or the
|
||
`troffrc-end' files; `troffrc' sets the default language to `us'.
|
||
|
||
The current hyphenation language is available as a string in the
|
||
read-only number register `.hla'.
|
||
|
||
|
||
.ds curr_language \n[.hla]
|
||
\*[curr_language]
|
||
=> us
|
||
|
||
|
||
|
||
File: groff, Node: Manipulating Hyphenation-Footnotes, Up: Manipulating Hyphenation
|
||
|
||
(1) "Soft hyphen character" is a misnomer since it is an output
|
||
glyph.
|
||
|
||
|
||
File: groff, Node: Manipulating Spacing, Next: Tabs and Fields, Prev: Manipulating Hyphenation, Up: gtroff Reference
|
||
|
||
5.9 Manipulating Spacing
|
||
========================
|
||
|
||
-- Request: .sp [distance]
|
||
Space downwards DISTANCE. With no argument it advances 1 line. A
|
||
negative argument causes `gtroff' to move up the page the
|
||
specified distance. If the argument is preceded by a `|' then
|
||
`gtroff' moves that distance from the top of the page. This
|
||
request causes a line break. The default scaling indicator is `v'.
|
||
|
||
If a vertical trap is sprung during execution of `sp', the amount
|
||
of vertical space after the trap is discarded. For example, this
|
||
|
||
|
||
.de xxx
|
||
..
|
||
.
|
||
.wh 0 xxx
|
||
.
|
||
.pl 5v
|
||
foo
|
||
.sp 2
|
||
bar
|
||
.sp 50
|
||
baz
|
||
|
||
results in
|
||
|
||
|
||
foo
|
||
|
||
|
||
bar
|
||
|
||
baz
|
||
|
||
The amount of discarded space is available in the number register
|
||
`.trunc'.
|
||
|
||
To protect `sp' against vertical traps, use the `vpt' request:
|
||
|
||
|
||
.vpt 0
|
||
.sp -3
|
||
.vpt 1
|
||
|
||
|
||
-- Request: .ls [nnn]
|
||
-- Register: \n[.L]
|
||
Output NNN-1 blank lines after each line of text. With no
|
||
argument, `gtroff' uses the previous value before the last `ls'
|
||
call.
|
||
|
||
|
||
.ls 2 \" This causes double-spaced output
|
||
.ls 3 \" This causes triple-spaced output
|
||
.ls \" Again double-spaced
|
||
|
||
The line spacing is associated with the current environment (*note
|
||
Environments::).
|
||
|
||
The read-only number register `.L' contains the current line
|
||
spacing setting.
|
||
|
||
*Note Changing Type Sizes::, for the requests `vs' and `pvs' as
|
||
alternatives to `ls'.
|
||
|
||
-- Escape: \x'spacing'
|
||
-- Register: \n[.a]
|
||
Sometimes, extra vertical spacing is only needed occasionally, e.g.
|
||
to allow space for a tall construct (like an equation). The `\x'
|
||
escape does this. The escape is given a numerical argument,
|
||
usually enclosed in quotes (like `\x'3p''); the default scaling
|
||
indicator is `v'. If this number is positive extra vertical space
|
||
is inserted below the current line. A negative number adds space
|
||
above. If this escape is used multiple times on the same line,
|
||
the maximum of the values is used.
|
||
|
||
*Note Escapes::, for details on parameter delimiting characters.
|
||
|
||
The `.a' read-only number register contains the most recent
|
||
(nonnegative) extra vertical line space.
|
||
|
||
Using `\x' can be necessary in combination with the `\b' escape,
|
||
as the following example shows.
|
||
|
||
|
||
This is a test with the \[rs]b escape.
|
||
.br
|
||
This is a test with the \[rs]b escape.
|
||
.br
|
||
This is a test with \b'xyz'\x'-1m'\x'1m'.
|
||
.br
|
||
This is a test with the \[rs]b escape.
|
||
.br
|
||
This is a test with the \[rs]b escape.
|
||
|
||
produces
|
||
|
||
|
||
This is a test with the \b escape.
|
||
This is a test with the \b escape.
|
||
x
|
||
This is a test with y.
|
||
z
|
||
This is a test with the \b escape.
|
||
This is a test with the \b escape.
|
||
|
||
|
||
-- Request: .ns
|
||
-- Request: .rs
|
||
-- Register: \n[.ns]
|
||
Enable "no-space mode". In this mode, spacing (either via `sp' or
|
||
via blank lines) is disabled. The `bp' request to advance to the
|
||
next page is also disabled, except if it is accompanied by a page
|
||
number (see *Note Page Control::, for more information). This
|
||
mode ends when actual text is output or the `rs' request is
|
||
encountered which ends no-space mode. The read-only number
|
||
register `.ns' is set to 1 as long as no-space mode is active.
|
||
|
||
This request is useful for macros that conditionally insert
|
||
vertical space before the text starts (for example, a paragraph
|
||
macro could insert some space except when it is the first
|
||
paragraph after a section header).
|
||
|
||
|
||
File: groff, Node: Tabs and Fields, Next: Character Translations, Prev: Manipulating Spacing, Up: gtroff Reference
|
||
|
||
5.10 Tabs and Fields
|
||
====================
|
||
|
||
A tab character (ASCII char 9, EBCDIC char 5) causes a horizontal
|
||
movement to the next tab stop (much like it did on a typewriter).
|
||
|
||
-- Escape: \t
|
||
This escape is a non-interpreted tab character. In copy mode
|
||
(*note Copy-in Mode::), `\t' is the same as a real tab character.
|
||
|
||
-- Request: .ta [n1 n2 ... nn T r1 r2 ... rn]
|
||
-- Register: \n[.tabs]
|
||
Change tab stop positions. This request takes a series of tab
|
||
specifiers as arguments (optionally divided into two groups with
|
||
the letter `T') which indicate where each tab stop is to be
|
||
(overriding any previous settings).
|
||
|
||
Tab stops can be specified absolutely, i.e., as the distance from
|
||
the left margin. For example, the following sets 6 tab stops every
|
||
one inch.
|
||
|
||
|
||
.ta 1i 2i 3i 4i 5i 6i
|
||
|
||
Tab stops can also be specified using a leading `+' which means
|
||
that the specified tab stop is set relative to the previous tab
|
||
stop. For example, the following is equivalent to the previous
|
||
example.
|
||
|
||
|
||
.ta 1i +1i +1i +1i +1i +1i
|
||
|
||
`gtroff' supports an extended syntax to specify repeat values after
|
||
the `T' mark (these values are always taken as relative) - this is
|
||
the usual way to specify tabs set at equal intervals. The
|
||
following is, yet again, the same as the previous examples. It
|
||
does even more since it defines an infinite number of tab stops
|
||
separated by one inch.
|
||
|
||
|
||
.ta T 1i
|
||
|
||
Now we are ready to interpret the full syntax given at the
|
||
beginning: Set tabs at positions N1, N2, ..., NN and then set tabs
|
||
at NN+R1, NN+R2, ..., NN+RN and then at NN+RN+R1, NN+RN+R2, ...,
|
||
NN+RN+RN, and so on.
|
||
|
||
Example: `4c +6c T 3c 5c 2c' is equivalent to `4c 10c 13c 18c 20c
|
||
23c 28c 30c ...'.
|
||
|
||
The material in each tab column (i.e., the column between two tab
|
||
stops) may be justified to the right or left or centered in the
|
||
column. This is specified by appending `R', `L', or `C' to the tab
|
||
specifier. The default justification is `L'. Example:
|
||
|
||
|
||
.ta 1i 2iC 3iR
|
||
|
||
Some notes:
|
||
|
||
* The default unit of the `ta' request is `m'.
|
||
|
||
* A tab stop is converted into a non-breakable horizontal
|
||
movement which can be neither stretched nor squeezed. For
|
||
example,
|
||
|
||
|
||
.ds foo a\tb\tc
|
||
.ta T 5i
|
||
\*[foo]
|
||
|
||
creates a single line which is a bit longer than 10 inches (a
|
||
string is used to show exactly where the tab characters are).
|
||
Now consider the following:
|
||
|
||
|
||
.ds bar a\tb b\tc
|
||
.ta T 5i
|
||
\*[bar]
|
||
|
||
`gtroff' first converts the tab stops of the line into
|
||
unbreakable horizontal movements, then splits the line after
|
||
the second `b' (assuming a sufficiently short line length).
|
||
Usually, this isn't what the user wants.
|
||
|
||
* Superfluous tabs (i.e., tab characters which do not
|
||
correspond to a tab stop) are ignored except the first one
|
||
which delimits the characters belonging to the last tab stop
|
||
for right-justifying or centering. Consider the following
|
||
example
|
||
|
||
|
||
.ds Z foo\tbar\tfoo
|
||
.ds ZZ foo\tbar\tfoobar
|
||
.ds ZZZ foo\tbar\tfoo\tbar
|
||
.ta 2i 4iR
|
||
\*[Z]
|
||
.br
|
||
\*[ZZ]
|
||
.br
|
||
\*[ZZZ]
|
||
.br
|
||
|
||
which produces the following output:
|
||
|
||
|
||
foo bar foo
|
||
foo bar foobar
|
||
foo bar foobar
|
||
|
||
The first line right-justifies the second `foo' relative to
|
||
the tab stop. The second line right-justifies `foobar'. The
|
||
third line finally right-justifies only `foo' because of the
|
||
additional tab character which marks the end of the string
|
||
belonging to the last defined tab stop.
|
||
|
||
* Tab stops are associated with the current environment (*note
|
||
Environments::).
|
||
|
||
* Calling `ta' without an argument removes all tab stops.
|
||
|
||
* The start-up value of `gtroff' is `T 0.8i'.
|
||
|
||
The read-only number register `.tabs' contains a string
|
||
representation of the current tab settings suitable for use as an
|
||
argument to the `ta' request.
|
||
|
||
|
||
.ds tab-string \n[.tabs]
|
||
\*[tab-string]
|
||
=> T120u
|
||
|
||
The `troff' version of the Plan 9 operating system uses register
|
||
`.S' for the same purpose.
|
||
|
||
-- Request: .tc [fill-glyph]
|
||
Normally `gtroff' fills the space to the next tab stop with
|
||
whitespace. This can be changed with the `tc' request. With no
|
||
argument `gtroff' reverts to using whitespace, which is the
|
||
default. The value of this "tab repetition character" is
|
||
associated with the current environment (*note Environments::).(1)
|
||
(*note Tabs and Fields-Footnote-1::)
|
||
|
||
-- Request: .linetabs n
|
||
-- Register: \n[.linetabs]
|
||
If N is missing or not zero, enable "line-tabs" mode, or disable
|
||
it otherwise (the default). In line-tabs mode, `gtroff' computes
|
||
tab distances relative to the (current) output line instead of the
|
||
input line.
|
||
|
||
For example, the following code:
|
||
|
||
|
||
.ds x a\t\c
|
||
.ds y b\t\c
|
||
.ds z c
|
||
.ta 1i 3i
|
||
\*x
|
||
\*y
|
||
\*z
|
||
|
||
in normal mode, results in the output
|
||
|
||
|
||
a b c
|
||
|
||
in line-tabs mode, the same code outputs
|
||
|
||
|
||
a b c
|
||
|
||
Line-tabs mode is associated with the current environment. The
|
||
read-only register `.linetabs' is set to 1 if in line-tabs mode,
|
||
and 0 in normal mode.
|
||
|
||
* Menu:
|
||
|
||
* Leaders::
|
||
* Fields::
|
||
|
||
|
||
File: groff, Node: Tabs and Fields-Footnotes, Up: Tabs and Fields
|
||
|
||
(1) "Tab repetition character" is a misnomer since it is an output
|
||
glyph.
|
||
|
||
|
||
File: groff, Node: Leaders, Next: Fields, Prev: Tabs and Fields, Up: Tabs and Fields
|
||
|
||
5.10.1 Leaders
|
||
--------------
|
||
|
||
Sometimes it may may be desirable to use the `tc' request to fill a
|
||
particular tab stop with a given glyph (for example dots in a table of
|
||
contents), but also normal tab stops on the rest of the line. For this
|
||
`gtroff' provides an alternate tab mechanism, called "leaders" which
|
||
does just that.
|
||
|
||
A leader character (character code 1) behaves similarly to a tab
|
||
character: It moves to the next tab stop. The only difference is that
|
||
for this movement, the fill glyph defaults to a period character and
|
||
not to space.
|
||
|
||
-- Escape: \a
|
||
This escape is a non-interpreted leader character. In copy mode
|
||
(*note Copy-in Mode::), `\a' is the same as a real leader
|
||
character.
|
||
|
||
-- Request: .lc [fill-glyph]
|
||
Declare the "leader repetition character".(1) (*note
|
||
Leaders-Footnote-1::) Without an argument, leaders act the same as
|
||
tabs (i.e., using whitespace for filling). `gtroff''s start-up
|
||
value is a dot (`.'). The value of the leader repetition
|
||
character is associated with the current environment (*note
|
||
Environments::).
|
||
|
||
For a table of contents, to name an example, tab stops may be
|
||
defined so that the section number is one tab stop, the title is the
|
||
second with the remaining space being filled with a line of dots, and
|
||
then the page number slightly separated from the dots.
|
||
|
||
|
||
.ds entry 1.1\tFoo\a\t12
|
||
.lc .
|
||
.ta 1i 5i +.25i
|
||
\*[entry]
|
||
|
||
This produces
|
||
|
||
|
||
1.1 Foo.......................................... 12
|
||
|
||
|
||
File: groff, Node: Leaders-Footnotes, Up: Leaders
|
||
|
||
(1) "Leader repetition character" is a misnomer since it is an
|
||
output glyph.
|
||
|
||
|
||
File: groff, Node: Fields, Prev: Leaders, Up: Tabs and Fields
|
||
|
||
5.10.2 Fields
|
||
-------------
|
||
|
||
"Fields" are a more general way of laying out tabular data. A field is
|
||
defined as the data between a pair of "delimiting characters". It
|
||
contains substrings which are separated by "padding characters". The
|
||
width of a field is the distance on the _input_ line from the position
|
||
where the field starts to the next tab stop. A padding character
|
||
inserts stretchable space similar to TeX's `\hss' command (thus it can
|
||
even be negative) to make the sum of all substring lengths plus the
|
||
stretchable space equal to the field width. If more than one padding
|
||
character is inserted, the available space is evenly distributed among
|
||
them.
|
||
|
||
-- Request: .fc [delim-char [padding-char]]
|
||
Define a delimiting and a padding character for fields. If the
|
||
latter is missing, the padding character defaults to a space
|
||
character. If there is no argument at all, the field mechanism is
|
||
disabled (which is the default). Note that contrary to e.g. the
|
||
tab repetition character, delimiting and padding characters are
|
||
_not_ associated to the current environment (*note Environments::).
|
||
|
||
Example:
|
||
|
||
|
||
.fc # ^
|
||
.ta T 3i
|
||
#foo^bar^smurf#
|
||
.br
|
||
#foo^^bar^smurf#
|
||
|
||
and here the result:
|
||
|
||
|
||
foo bar smurf
|
||
foo bar smurf
|
||
|
||
|
||
|
||
File: groff, Node: Character Translations, Next: Troff and Nroff Mode, Prev: Tabs and Fields, Up: gtroff Reference
|
||
|
||
5.11 Character Translations
|
||
===========================
|
||
|
||
The control character (`.') and the no-break control character (`'')
|
||
can be changed with the `cc' and `c2' requests, respectively.
|
||
|
||
-- Request: .cc [c]
|
||
Set the control character to C. With no argument the default
|
||
control character `.' is restored. The value of the control
|
||
character is associated with the current environment (*note
|
||
Environments::).
|
||
|
||
-- Request: .c2 [c]
|
||
Set the no-break control character to C. With no argument the
|
||
default control character `'' is restored. The value of the
|
||
no-break control character is associated with the current
|
||
environment (*note Environments::).
|
||
|
||
-- Request: .eo
|
||
Disable the escape mechanism completely. After executing this
|
||
request, the backslash character `\' no longer starts an escape
|
||
sequence.
|
||
|
||
This request can be very helpful in writing macros since it is not
|
||
necessary then to double the escape character. Here an example:
|
||
|
||
|
||
.\" This is a simplified version of the
|
||
.\" .BR request from the man macro package
|
||
.eo
|
||
.de BR
|
||
. ds result \&
|
||
. while (\n[.$] >= 2) \{\
|
||
. as result \fB\$1\fR\$2
|
||
. shift 2
|
||
. \}
|
||
. if \n[.$] .as result \fB\$1
|
||
\*[result]
|
||
. ft R
|
||
..
|
||
.ec
|
||
|
||
|
||
-- Request: .ec [c]
|
||
Set the escape character to C. With no argument the default
|
||
escape character `\' is restored. It can be also used to
|
||
re-enable the escape mechanism after an `eo' request.
|
||
|
||
Note that changing the escape character globally will likely break
|
||
macro packages since `gtroff' has no mechanism to `intern' macros,
|
||
i.e., to convert a macro definition into an internal form which is
|
||
independent of its representation (TeX has this mechanism). If a
|
||
macro is called, it is executed literally.
|
||
|
||
-- Request: .ecs
|
||
-- Request: .ecr
|
||
The `ecs' request saves the current escape character in an
|
||
internal register. Use this request in combination with the `ec'
|
||
request to temporarily change the escape character.
|
||
|
||
The `ecr' request restores the escape character saved with `ecs'.
|
||
Without a previous call to `ecs', this request sets the escape
|
||
character to `\'.
|
||
|
||
-- Escape: \\
|
||
-- Escape: \e
|
||
-- Escape: \E
|
||
Print the current escape character (which is the backslash
|
||
character `\' by default).
|
||
|
||
`\\' is a `delayed' backslash; more precisely, it is the default
|
||
escape character followed by a backslash, which no longer has
|
||
special meaning due to the leading escape character. It is _not_
|
||
an escape sequence in the usual sense! In any unknown escape
|
||
sequence `\X' the escape character is ignored and X is printed.
|
||
But if X is equal to the current escape character, no warning is
|
||
emitted.
|
||
|
||
As a consequence, only at top-level or in a diversion a backslash
|
||
glyph is printed; in copy-in mode, it expands to a single
|
||
backslash which then combines with the following character to an
|
||
escape sequence.
|
||
|
||
The `\E' escape differs from `\e' by printing an escape character
|
||
that is not interpreted in copy mode. Use this to define strings
|
||
with escapes that work when used in copy mode (for example, as a
|
||
macro argument). The following example defines strings to begin
|
||
and end a superscript:
|
||
|
||
|
||
.ds { \v'-.3m'\s'\En[.s]*60/100'
|
||
.ds } \s0\v'.3m'
|
||
|
||
Another example to demonstrate the differences between the various
|
||
escape sequences, using a strange escape character, `-'.
|
||
|
||
|
||
.ec -
|
||
.de xxx
|
||
--A'123'
|
||
..
|
||
.xxx
|
||
=> -A'foo'
|
||
|
||
The result is surprising for most users, expecting `1' since `foo'
|
||
is a valid identifier. What has happened? As mentioned above,
|
||
the leading escape character makes the following character
|
||
ordinary. Written with the default escape character the sequence
|
||
`--' becomes `\-' - this is the minus sign.
|
||
|
||
If the escape character followed by itself is a valid escape
|
||
sequence, only `\E' yields the expected result:
|
||
|
||
|
||
.ec -
|
||
.de xxx
|
||
-EA'123'
|
||
..
|
||
.xxx
|
||
=> 1
|
||
|
||
|
||
-- Escape: \.
|
||
Similar to `\\', the sequence `\.' isn't a real escape sequence.
|
||
As before, a warning message is suppressed if the escape character
|
||
is followed by a dot, and the dot itself is printed.
|
||
|
||
|
||
.de foo
|
||
. nop foo
|
||
.
|
||
. de bar
|
||
. nop bar
|
||
\\..
|
||
.
|
||
..
|
||
.foo
|
||
.bar
|
||
=> foo bar
|
||
|
||
The first backslash is consumed while the macro is read, and the
|
||
second is swallowed while exexuting macro `foo'.
|
||
|
||
A "translation" is a mapping of an input character to an output
|
||
glyph. The mapping occurs at output time, i.e., the input character
|
||
gets assigned the metric information of the mapped output character
|
||
right before input tokens are converted to nodes (*note Gtroff
|
||
Internals::, for more on this process).
|
||
|
||
-- Request: .tr abcd...
|
||
-- Request: .trin abcd...
|
||
Translate character A to glyph B, character C to glyph D, etc. If
|
||
there is an odd number of arguments, the last one is translated to
|
||
an unstretchable space (`\ ').
|
||
|
||
The `trin' request is identical to `tr', but when you unformat a
|
||
diversion with `asciify' it ignores the translation. *Note
|
||
Diversions::, for details about the `asciify' request.
|
||
|
||
Some notes:
|
||
|
||
* Special characters (`\(XX', `\[XXX]', `\C'XXX'', `\'', `\`',
|
||
`\-', `\_'), glyphs defined with the `char' request, and
|
||
numbered glyphs (`\N'XXX'') can be translated also.
|
||
|
||
* The `\e' escape can be translated also.
|
||
|
||
* Characters can be mapped onto the `\%' and `\~' escapes (but
|
||
`\%' and `\~' can't be mapped onto another glyph).
|
||
|
||
* The following characters can't be translated: space (with one
|
||
exception, see below), backspace, newline, leader (and `\a'),
|
||
tab (and `\t').
|
||
|
||
* Translations are not considered for finding the soft hyphen
|
||
character set with the `shc' request.
|
||
|
||
* The pair `C\&' (this is an arbitrary character C followed by
|
||
the zero width space character) maps this character to
|
||
nothing.
|
||
|
||
|
||
.tr a\&
|
||
foo bar
|
||
=> foo br
|
||
|
||
It is even possible to map the space character to nothing:
|
||
|
||
|
||
.tr aa \&
|
||
foo bar
|
||
=> foobar
|
||
|
||
As shown in the example, the space character can't be the
|
||
first character/glyph pair as an argument of `tr'.
|
||
Additionally, it is not possible to map the space character
|
||
to any other glyph; requests like `.tr aa x' undo `.tr aa \&'
|
||
instead.
|
||
|
||
If justification is active, lines are justified in spite of
|
||
the `empty' space character (but there is no minimal
|
||
distance, i.e. the space character, between words).
|
||
|
||
* After an output glyph has been constructed (this happens at
|
||
the moment immediately before the glyph is appended to an
|
||
output glyph list, either by direct output, in a macro,
|
||
diversion, or string), it is no longer affected by `tr'.
|
||
|
||
* Translating character to glyphs where one of them or both are
|
||
undefined is possible also; `tr' does not check whether the
|
||
entities in its argument do exist.
|
||
|
||
*Note Gtroff Internals::.
|
||
|
||
* `troff' no longer has a hard-coded dependency on Latin-1; all
|
||
`charXXX' entities have been removed from the font
|
||
description files. This has a notable consequence which
|
||
shows up in warnings like `can't find character with input
|
||
code XXX' if the `tr' request isn't handled properly.
|
||
|
||
Consider the following translation:
|
||
|
||
|
||
.tr <20><>
|
||
|
||
This maps input character `<60>' onto glyph `<60>', which is
|
||
identical to glyph `char201'. But this glyph intentionally
|
||
doesn't exist! Instead, `\[char201]' is treated as an input
|
||
character entity and is by default mapped onto `\['E]', and
|
||
`gtroff' doesn't handle translations of translations.
|
||
|
||
The right way to write the above translation is
|
||
|
||
|
||
.tr <20>\['E]
|
||
|
||
With other words, the first argument of `tr' should be an
|
||
input character or entity, and the second one a glyph entity.
|
||
|
||
* Without an argument, the `tr' request is ignored.
|
||
|
||
-- Request: .trnt abcd...
|
||
`trnt' is the same as the `tr' request except that the
|
||
translations do not apply to text that is transparently throughput
|
||
into a diversion with `\!'. *Note Diversions::, for more
|
||
information.
|
||
|
||
For example,
|
||
|
||
|
||
.tr ab
|
||
.di x
|
||
\!.tm a
|
||
.di
|
||
.x
|
||
|
||
prints `b' to the standard error stream; if `trnt' is used instead
|
||
of `tr' it prints `a'.
|
||
|
||
|
||
File: groff, Node: Troff and Nroff Mode, Next: Line Layout, Prev: Character Translations, Up: gtroff Reference
|
||
|
||
5.12 Troff and Nroff Mode
|
||
=========================
|
||
|
||
Originally, `nroff' and `troff' were two separate programs, the former
|
||
for TTY output, the latter for everything else. With GNU `troff', both
|
||
programs are merged into one executable, sending its output to a device
|
||
driver (`grotty' for TTY devices, `grops' for POSTSCRIPT, etc.) which
|
||
interprets the intermediate output of `gtroff'. For UNIX `troff' it
|
||
makes sense to talk about "Nroff mode" and "Troff mode" since the
|
||
differences are hardcoded. For GNU `troff', this distinction is not
|
||
appropriate because `gtroff' simply takes the information given in the
|
||
font files for a particular device without handling requests specially
|
||
if a TTY output device is used.
|
||
|
||
Usually, a macro package can be used with all output devices.
|
||
Nevertheless, it is sometimes necessary to make a distinction between
|
||
TTY and non-TTY devices: `gtroff' provides two built-in conditions `n'
|
||
and `t' for the `if', `ie', and `while' requests to decide whether
|
||
`gtroff' shall behave like `nroff' or like `troff'.
|
||
|
||
-- Request: .troff
|
||
Make the `t' built-in condition true (and the `n' built-in
|
||
condition false) for `if', `ie', and `while' conditional requests.
|
||
This is the default if `gtroff' (_not_ `groff') is started with
|
||
the `-R' switch to avoid loading of the start-up files `troffrc'
|
||
and `troffrc-end'. Without `-R', `gtroff' stays in troff mode if
|
||
the output device is not a TTY (e.g. `ps').
|
||
|
||
-- Request: .nroff
|
||
Make the `n' built-in condition true (and the `t' built-in
|
||
condition false) for `if', `ie', and `while' conditional requests.
|
||
This is the default if `gtroff' uses a TTY output device; the
|
||
code for switching to nroff mode is in the file `tty.tmac' which
|
||
is loaded by the start-up file `troffrc'.
|
||
|
||
*Note Conditionals and Loops::, for more details on built-in
|
||
conditions.
|
||
|
||
|
||
File: groff, Node: Line Layout, Next: Line Control, Prev: Troff and Nroff Mode, Up: gtroff Reference
|
||
|
||
5.13 Line Layout
|
||
================
|
||
|
||
The following drawing shows the dimensions which `gtroff' uses for
|
||
placing a line of output onto the page. They are labeled with the
|
||
request which manipulates each dimension.
|
||
|
||
|
||
-->| in |<--
|
||
|<-----------ll------------>|
|
||
+----+----+----------------------+----+
|
||
| : : : |
|
||
+----+----+----------------------+----+
|
||
-->| po |<--
|
||
|<--------paper width---------------->|
|
||
|
||
These dimensions are:
|
||
|
||
`po'
|
||
"Page offset" - this is the leftmost position of text on the final
|
||
output, defining the "left margin".
|
||
|
||
`in'
|
||
"Indentation" - this is the distance from the left margin where
|
||
text is printed.
|
||
|
||
`ll'
|
||
"Line length" - this is the distance from the left margin to right
|
||
margin.
|
||
|
||
A simple demonstration:
|
||
|
||
|
||
.ll 3i
|
||
This is text without indentation.
|
||
The line length has been set to 3\~inch.
|
||
.in +.5i
|
||
.ll -.5i
|
||
Now the left and right margins are both increased.
|
||
.in
|
||
.ll
|
||
Calling .in and .ll without parameters restore
|
||
the previous values.
|
||
|
||
Result:
|
||
|
||
|
||
This is text without indenta-
|
||
tion. The line length has
|
||
been set to 3 inch.
|
||
Now the left and
|
||
right margins are
|
||
both increased.
|
||
Calling .in and .ll without
|
||
parameters restore the previ-
|
||
ous values.
|
||
|
||
-- Request: .po [offset]
|
||
-- Request: .po +offset
|
||
-- Request: .po -offset
|
||
-- Register: \n[.o]
|
||
Set horizontal page offset to OFFSET (or increment or decrement
|
||
the current value by OFFSET). Note that this request does not
|
||
cause a break, so changing the page offset in the middle of text
|
||
being filled may not yield the expected result. The initial value
|
||
is 1i. For TTY output devices, it is set to 0 in the startup file
|
||
`troffrc'; the default scaling indicator is `m' (and not `v' as
|
||
incorrectly documented in the original UNIX troff manual).
|
||
|
||
The current page offset can be found in the read-only number
|
||
register `.o'.
|
||
|
||
If `po' is called without an argument, the page offset is reset to
|
||
the previous value before the last call to `po'.
|
||
|
||
|
||
.po 3i
|
||
\n[.o]
|
||
=> 720
|
||
.po -1i
|
||
\n[.o]
|
||
=> 480
|
||
.po
|
||
\n[.o]
|
||
=> 720
|
||
|
||
|
||
-- Request: .in [indent]
|
||
-- Request: .in +indent
|
||
-- Request: .in -indent
|
||
-- Register: \n[.i]
|
||
Set indentation to INDENT (or increment or decrement the current
|
||
value by INDENT). This request causes a break. Initially, there
|
||
is no indentation.
|
||
|
||
If `in' is called without an argument, the indentation is reset to
|
||
the previous value before the last call to `in'. The default
|
||
scaling indicator is `m'.
|
||
|
||
The indentation is associated with the current environment (*note
|
||
Environments::).
|
||
|
||
If a negative indentation value is specified (which is not
|
||
allowed), `gtroff' emits a warning of type `range' and sets the
|
||
indentation to zero.
|
||
|
||
The effect of `in' is delayed until a partially collected line (if
|
||
it exists) is output. A temporary indentation value is reset to
|
||
zero also.
|
||
|
||
The current indentation (as set by `in') can be found in the
|
||
read-only number register `.i'.
|
||
|
||
-- Request: .ti offset
|
||
-- Request: .ti +offset
|
||
-- Request: .ti -offset
|
||
-- Register: \n[.in]
|
||
Temporarily indent the next output line by OFFSET. If an
|
||
increment or decrement value is specified, adjust the temporary
|
||
indentation relative to the value set by the `in' request.
|
||
|
||
This request causes a break; its value is associated with the
|
||
current environment (*note Environments::). The default scaling
|
||
indicator is `m'. A call of `ti' without an argument is ignored.
|
||
|
||
If the total indentation value is negative (which is not allowed),
|
||
`gtroff' emits a warning of type `range' and sets the temporary
|
||
indentation to zero. `Total indentation' is either OFFSET if
|
||
specified as an absolute value, or the temporary plus normal
|
||
indentation, if OFFSET is given as a relative value.
|
||
|
||
The effect of `ti' is delayed until a partially collected line (if
|
||
it exists) is output.
|
||
|
||
The read-only number register `.in' is the indentation that applies
|
||
to the current output line.
|
||
|
||
The difference between `.i' and `.in' is that the latter takes
|
||
into account whether a partially collected line still uses the old
|
||
indentation value or a temporary indentation value is active.
|
||
|
||
-- Request: .ll [length]
|
||
-- Request: .ll +length
|
||
-- Request: .ll -length
|
||
-- Register: \n[.l]
|
||
-- Register: \n[.ll]
|
||
Set the line length to LENGTH (or increment or decrement the
|
||
current value by LENGTH). Initially, the line length is set to
|
||
6.5i. The effect of `ll' is delayed until a partially collected
|
||
line (if it exists) is output. The default scaling indicator is
|
||
`m'.
|
||
|
||
If `ll' is called without an argument, the line length is reset to
|
||
the previous value before the last call to `ll'. If a negative
|
||
line length is specified (which is not allowed), `gtroff' emits a
|
||
warning of type `range' and sets the line length to zero.
|
||
|
||
The line length is associated with the current environment (*note
|
||
Environments::).
|
||
|
||
The current line length (as set by `ll') can be found in the
|
||
read-only number register `.l'. The read-only number register
|
||
`.ll' is the line length that applies to the current output line.
|
||
|
||
Similar to `.i' and `.in', the difference between `.l' and `.ll'
|
||
is that the latter takes into account whether a partially
|
||
collected line still uses the old line length value.
|
||
|
||
|
||
File: groff, Node: Line Control, Next: Page Layout, Prev: Line Layout, Up: gtroff Reference
|
||
|
||
5.14 Line Control
|
||
=================
|
||
|
||
It is important to understand how `gtroff' handles input and output
|
||
lines.
|
||
|
||
Many escapes use positioning relative to the input line. For
|
||
example, this
|
||
|
||
|
||
This is a \h'|1.2i'test.
|
||
|
||
This is a
|
||
\h'|1.2i'test.
|
||
|
||
produces
|
||
|
||
|
||
This is a test.
|
||
|
||
This is a test.
|
||
|
||
The main usage of this feature is to define macros which act exactly
|
||
at the place where called.
|
||
|
||
|
||
.\" A simple macro to underline a word
|
||
.de underline
|
||
. nop \\$1\l'|0\[ul]'
|
||
..
|
||
|
||
In the above example, `|0' specifies a negative distance from the
|
||
current position (at the end of the just emitted argument `\$1') back
|
||
to the beginning of the input line. Thus, the `\l' escape draws a line
|
||
from right to left.
|
||
|
||
`gtroff' makes a difference between input and output line
|
||
continuation; the latter is also called "interrupting" a line.
|
||
|
||
-- Escape: \<RET>
|
||
-- Escape: \c
|
||
-- Register: \n[.int]
|
||
Continue a line. `\<RET>' (this is a backslash at the end of a
|
||
line immediately followed by a newline) works on the input level,
|
||
suppressing the effects of the following newline in the input.
|
||
|
||
|
||
This is a \
|
||
.test
|
||
=> This is a .test
|
||
|
||
The `|' operator is also affected.
|
||
|
||
`\c' works on the output level. Anything after this escape on the
|
||
same line is ignored, except `\R' which works as usual. Anything
|
||
before `\c' on the same line will be appended to the current
|
||
partial output line. The next non-command line after an
|
||
interrupted line counts as a new input line.
|
||
|
||
The visual results depend on whether no-fill mode is active.
|
||
|
||
* If no-fill mode is active (using the `nf' request), the next
|
||
input text line after `\c' will be handled as a continuation
|
||
of the same input text line.
|
||
|
||
|
||
.nf
|
||
This is a \c
|
||
test.
|
||
=> This is a test.
|
||
|
||
* If fill mode is active (using the `fi' request), a word
|
||
interrupted with `\c' will be continued with the text on the
|
||
next input text line, without an intervening space.
|
||
|
||
|
||
This is a te\c
|
||
st.
|
||
=> This is a test.
|
||
|
||
|
||
Note that an intervening control line which causes a break is
|
||
stronger than `\c', flushing out the current partial line in the
|
||
usual way.
|
||
|
||
The `.int' register contains a positive value if the last output
|
||
line was interrupted with `\c'; this is associated with the
|
||
current environment (*note Environments::).
|
||
|
||
|
||
File: groff, Node: Page Layout, Next: Page Control, Prev: Line Control, Up: gtroff Reference
|
||
|
||
5.15 Page Layout
|
||
================
|
||
|
||
`gtroff' provides some very primitive operations for controlling page
|
||
layout.
|
||
|
||
-- Request: .pl [length]
|
||
-- Request: .pl +length
|
||
-- Request: .pl -length
|
||
-- Register: \n[.p]
|
||
Set the "page length" to LENGTH (or increment or decrement the
|
||
current value by LENGTH). This is the length of the physical
|
||
output page. The default scaling indicator is `v'.
|
||
|
||
The current setting can be found in the read-only number register
|
||
`.p'.
|
||
|
||
Note that this only specifies the size of the page, not the top and
|
||
bottom margins. Those are not set by `gtroff' directly. *Note
|
||
Traps::, for further information on how to do this.
|
||
|
||
Negative `pl' values are possible also, but not very useful: No
|
||
trap is sprung, and each line is output on a single page (thus
|
||
suppressing all vertical spacing).
|
||
|
||
If no argument or an invalid argument is given, `pl' sets the page
|
||
length to 11i.
|
||
|
||
`gtroff' provides several operations which help in setting up top
|
||
and bottom titles (or headers and footers).
|
||
|
||
-- Request: .tl 'left'center'right'
|
||
Print a "title line". It consists of three parts: a left
|
||
justified portion, a centered portion, and a right justified
|
||
portion. The argument separator `'' can be replaced with any
|
||
character not occurring in the title line. The `%' character is
|
||
replaced with the current page number. This character can be
|
||
changed with the `pc' request (see below).
|
||
|
||
Without argument, `tl' is ignored.
|
||
|
||
Some notes:
|
||
|
||
* A title line is not restricted to the top or bottom of a page.
|
||
|
||
* `tl' prints the title line immediately, ignoring a partially
|
||
filled line (which stays untouched).
|
||
|
||
* It is not an error to omit closing delimiters. For example,
|
||
`.tl /foo' is equivalent to `.tl /foo///': It prints a title
|
||
line with the left justified word `foo'; the centered and
|
||
right justfied parts are empty.
|
||
|
||
* `tl' accepts the same parameter delimiting characters as the
|
||
`\A' escape; see *Note Escapes::.
|
||
|
||
-- Request: .lt [length]
|
||
-- Request: .lt +length
|
||
-- Request: .lt -length
|
||
-- Register: \n[.lt]
|
||
The title line is printed using its own line length, which is
|
||
specified (or incremented or decremented) with the `lt' request.
|
||
Initially, the title line length is set to 6.5i. If a negative
|
||
line length is specified (which is not allowed), `gtroff' emits a
|
||
warning of type `range' and sets the title line length to zero.
|
||
The default scaling indicator is `m'. If `lt' is called without
|
||
an argument, the title length is reset to the previous value
|
||
before the last call to `lt'.
|
||
|
||
The current setting of this is available in the `.lt' read-only
|
||
number register; it is associated with the current environment
|
||
(*note Environments::).
|
||
|
||
-- Request: .pn page
|
||
-- Request: .pn +page
|
||
-- Request: .pn -page
|
||
-- Register: \n[.pn]
|
||
Change (increase or decrease) the page number of the _next_ page.
|
||
The only argument is the page number; the request is ignored
|
||
without a parameter.
|
||
|
||
The read-only number register `.pn' contains the number of the next
|
||
page: either the value set by a `pn' request, or the number of the
|
||
current page plus 1.
|
||
|
||
-- Request: .pc [char]
|
||
Change the page number character (used by the `tl' request) to a
|
||
different character. With no argument, this mechanism is disabled.
|
||
Note that this doesn't affect the number register `%'.
|
||
|
||
*Note Traps::.
|
||
|
||
|
||
File: groff, Node: Page Control, Next: Fonts and Symbols, Prev: Page Layout, Up: gtroff Reference
|
||
|
||
5.16 Page Control
|
||
=================
|
||
|
||
-- Request: .bp [page]
|
||
-- Request: .bp +page
|
||
-- Request: .bp -page
|
||
-- Register: \n[%]
|
||
Stop processing the current page and move to the next page. This
|
||
request causes a break. It can also take an argument to set
|
||
(increase, decrease) the page number of the next page (which
|
||
actually becomes the current page after `bp' has finished). The
|
||
difference between `bp' and `pn' is that `pn' does not cause a
|
||
break or actually eject a page. *Note Page Layout::.
|
||
|
||
|
||
.de newpage \" define macro
|
||
'bp \" begin page
|
||
'sp .5i \" vertical space
|
||
.tl 'left top'center top'right top' \" title
|
||
'sp .3i \" vertical space
|
||
.. \" end macro
|
||
|
||
`bp' has no effect if not called within the top-level diversion
|
||
(*note Diversions::).
|
||
|
||
The read-write register `%' holds the current page number.
|
||
|
||
The number register `.pe' is set to 1 while `bp' is active. *Note
|
||
Page Location Traps::.
|
||
|
||
-- Request: .ne [space]
|
||
It is often necessary to force a certain amount of space before a
|
||
new page occurs. This is most useful to make sure that there is
|
||
not a single "orphan" line left at the bottom of a page. The `ne'
|
||
request ensures that there is a certain distance, specified by the
|
||
first argument, before the next page is triggered (see *Note
|
||
Traps::, for further information). The default scaling indicator
|
||
for `ne' is `v'; the default value of SPACE is 1v if no argument
|
||
is given.
|
||
|
||
For example, to make sure that no fewer than 2 lines get orphaned,
|
||
do the following before each paragraph:
|
||
|
||
|
||
.ne 2
|
||
text text text
|
||
|
||
`ne' will then automatically cause a page break if there is space
|
||
for one line only.
|
||
|
||
-- Request: .sv [space]
|
||
-- Request: .os
|
||
`sv' is similar to the `ne' request; it reserves the specified
|
||
amount of vertical space. If the desired amount of space exists
|
||
before the next trap (or the bottom page boundary if no trap is
|
||
set), the space is output immediately (ignoring a partially filled
|
||
line which stays untouched). If there is not enough space, it is
|
||
stored for later output via the `os' request. The default value
|
||
is 1v if no argument is given; the default scaling indicator is
|
||
`v'.
|
||
|
||
Both `sv' and `os' ignore no-space mode. While the `sv' request
|
||
allows negative values for SPACE, `os' will ignore them.
|
||
|
||
-- Register: \n[nl]
|
||
This register contains the current vertical position. If the
|
||
vertical position is zero and the top of page transition hasn't
|
||
happened yet, `nl' is set to negative value. `gtroff' itself does
|
||
this at the very beginning of a document before anything has been
|
||
printed, but the main usage is to plant a header trap on a page if
|
||
this page has already started.
|
||
|
||
Consider the following:
|
||
|
||
|
||
.de xxx
|
||
. sp
|
||
. tl ''Header''
|
||
. sp
|
||
..
|
||
.
|
||
First page.
|
||
.bp
|
||
.wh 0 xxx
|
||
.nr nl (-1)
|
||
Second page.
|
||
|
||
Result:
|
||
|
||
|
||
First page.
|
||
|
||
...
|
||
|
||
Header
|
||
|
||
Second page.
|
||
|
||
...
|
||
|
||
Without resetting `nl' to a negative value, the just planted trap
|
||
would be active beginning with the _next_ page, not the current
|
||
one.
|
||
|
||
*Note Diversions::, for a comparison with the `.h' and `.d'
|
||
registers.
|
||
|
||
|
||
File: groff, Node: Fonts and Symbols, Next: Sizes, Prev: Page Control, Up: gtroff Reference
|
||
|
||
5.17 Fonts and Symbols
|
||
======================
|
||
|
||
`gtroff' can switch fonts at any point in the text.
|
||
|
||
The basic set of fonts is `R', `I', `B', and `BI'. These are Times
|
||
Roman, Italic, Bold, and Bold Italic. For non-TTY devices, there is
|
||
also at least one symbol font which contains various special symbols
|
||
(Greek, mathematics).
|
||
|
||
* Menu:
|
||
|
||
* Changing Fonts::
|
||
* Font Families::
|
||
* Font Positions::
|
||
* Using Symbols::
|
||
* Special Fonts::
|
||
* Artificial Fonts::
|
||
* Ligatures and Kerning::
|
||
|
||
|
||
File: groff, Node: Changing Fonts, Next: Font Families, Prev: Fonts and Symbols, Up: Fonts and Symbols
|
||
|
||
5.17.1 Changing Fonts
|
||
---------------------
|
||
|
||
-- Request: .ft [font]
|
||
-- Escape: \ff
|
||
-- Escape: \f(fn
|
||
-- Escape: \f[font]
|
||
-- Register: \n[.sty]
|
||
The `ft' request and the `\f' escape change the current font to
|
||
FONT (one-character name F, two-character name FN).
|
||
|
||
If FONT is a style name (as set with the `sty' request or with the
|
||
`styles' command in the `DESC' file), use it within the current
|
||
font family (as set with the `fam' request, `\F' escape, or with
|
||
the `family' command in the `DESC' file).
|
||
|
||
With no argument or using `P' as an argument, `.ft' switches to
|
||
the previous font. Use `\f[]' to do this with the escape. The
|
||
old syntax forms `\fP' or `\f[P]' are also supported.
|
||
|
||
Fonts are generally specified as upper-case strings, which are
|
||
usually 1 to 4 characters representing an abbreviation or acronym
|
||
of the font name. This is no limitation, just a convention.
|
||
|
||
The example below produces two identical lines.
|
||
|
||
|
||
eggs, bacon,
|
||
.ft B
|
||
spam
|
||
.ft
|
||
and sausage.
|
||
|
||
eggs, bacon, \fBspam\fP and sausage.
|
||
|
||
Note that `\f' doesn't produce an input token in `gtroff'. As a
|
||
consequence, it can be used in requests like `mc' (which expects a
|
||
single character as an argument) to change the font on the fly:
|
||
|
||
|
||
.mc \f[I]x\f[]
|
||
|
||
The current style name is available in the read-only number
|
||
register `.sty' (this is a string-valued register); if the current
|
||
font isn't a style, the empty string is returned. It is
|
||
associated with the current environment.
|
||
|
||
*Note Font Positions::, for an alternative syntax.
|
||
|
||
-- Request: .ftr f [g]
|
||
Translate font F to font G. Whenever a font named F is referred
|
||
to in a `\f' escape sequence, in the `F' and `S' conditional
|
||
operators, or in the `ft', `ul', `bd', `cs', `tkf', `special',
|
||
`fspecial', `fp', or `sty' requests, font G is used. If G is
|
||
missing or equal to F the translation is undone.
|
||
|
||
|
||
File: groff, Node: Font Families, Next: Font Positions, Prev: Changing Fonts, Up: Fonts and Symbols
|
||
|
||
5.17.2 Font Families
|
||
--------------------
|
||
|
||
Due to the variety of fonts available, `gtroff' has added the concept
|
||
of "font families" and "font styles". The fonts are specified as the
|
||
concatenation of the font family and style. Specifying a font without
|
||
the family part causes `gtroff' to use that style of the current family.
|
||
|
||
Currently, fonts for the devices `-Tps', `-Tdvi', `-Tlj4', `-Tlbp',
|
||
and the X11 fonts are set up to this mechanism. By default, `gtroff'
|
||
uses the Times family with the four styles `R', `I', `B', and `BI'.
|
||
|
||
This way, it is possible to use the basic four fonts and to select a
|
||
different font family on the command line (*note Groff Options::).
|
||
|
||
-- Request: .fam [family]
|
||
-- Register: \n[.fam]
|
||
-- Escape: \Ff
|
||
-- Escape: \F(fm
|
||
-- Escape: \F[family]
|
||
-- Register: \n[.fn]
|
||
Switch font family to FAMILY (one-character name F, two-character
|
||
name FM). If no argument is given, switch back to the previous
|
||
font family. Use `\F[]' to do this with the escape. Note that
|
||
`\FP' doesn't work; it selects font family `P' instead.
|
||
|
||
The value at start-up is `T'. The current font family is
|
||
available in the read-only number register `.fam' (this is a
|
||
string-valued register); it is associated with the current
|
||
environment.
|
||
|
||
|
||
spam,
|
||
.fam H \" helvetica family
|
||
spam, \" used font is family H + style R = HR
|
||
.ft B \" family H + style B = font HB
|
||
spam,
|
||
.fam T \" times family
|
||
spam, \" used font is family T + style B = TB
|
||
.ft AR \" font AR (not a style)
|
||
baked beans,
|
||
.ft R \" family T + style R = font TR
|
||
and spam.
|
||
|
||
Note that `\F' doesn't produce an input token in `gtroff'. As a
|
||
consequence, it can be used in requests like `mc' (which expects a
|
||
single character as an argument) to change the font family on the
|
||
fly:
|
||
|
||
|
||
.mc \F[P]x\F[]
|
||
|
||
The `.fn' register contains the current "real font name" of the
|
||
current font. This is a string-valued register. If the current
|
||
font is a style, the value of `\n[.fn]' is the proper
|
||
concatenation of family and style name.
|
||
|
||
-- Request: .sty n style
|
||
Associate STYLE with font position N. A font position can be
|
||
associated either with a font or with a style. The current font
|
||
is the index of a font position and so is also either a font or a
|
||
style. If it is a style, the font that is actually used is the
|
||
font which name is the concatenation of the name of the current
|
||
family and the name of the current style. For example, if the
|
||
current font is 1 and font position 1 is associated with style `R'
|
||
and the current font family is `T', then font `TR' will be used.
|
||
If the current font is not a style, then the current family is
|
||
ignored. If the requests `cs', `bd', `tkf', `uf', or `fspecial'
|
||
are applied to a style, they will instead be applied to the member
|
||
of the current family corresponding to that style.
|
||
|
||
N must be a non-negative integer value.
|
||
|
||
The default family can be set with the `-f' option (*note Groff
|
||
Options::). The `styles' command in the `DESC' file controls
|
||
which font positions (if any) are initially associated with styles
|
||
rather than fonts. For example, the default setting for
|
||
POSTSCRIPT fonts
|
||
|
||
|
||
styles R I B BI
|
||
|
||
is equivalent to
|
||
|
||
|
||
.sty 1 R
|
||
.sty 2 I
|
||
.sty 3 B
|
||
.sty 4 BI
|
||
|
||
`fam' and `\F' always check whether the current font position is
|
||
valid; this can give surprising results if the current font
|
||
position is associated with a style.
|
||
|
||
In the following example, we want to access the POSTSCRIPT font
|
||
`FooBar' from the font family `Foo':
|
||
|
||
|
||
.sty \n[.fp] Bar
|
||
.fam Foo
|
||
=> warning: can't find font `FooR'
|
||
|
||
The default font position at start-up is 1; for the POSTSCRIPT
|
||
device, this is associated with style `R', so `gtroff' tries to
|
||
open `FooR'.
|
||
|
||
A solution to this problem is to use a dummy font like the
|
||
following:
|
||
|
||
|
||
.fp 0 dummy TR \" set up dummy font at position 0
|
||
.sty \n[.fp] Bar \" register style `Bar'
|
||
.ft 0 \" switch to font at position 0
|
||
.fam Foo \" activate family `Foo'
|
||
.ft Bar \" switch to font `FooBar'
|
||
|
||
*Note Font Positions::.
|
||
|
||
|
||
File: groff, Node: Font Positions, Next: Using Symbols, Prev: Font Families, Up: Fonts and Symbols
|
||
|
||
5.17.3 Font Positions
|
||
---------------------
|
||
|
||
For the sake of old phototypesetters and compatibility with old versions
|
||
of `troff', `gtroff' has the concept of font "positions", on which
|
||
various fonts are mounted.
|
||
|
||
-- Request: .fp pos font [external-name]
|
||
-- Register: \n[.f]
|
||
-- Register: \n[.fp]
|
||
Mount font FONT at position POS (which must be a non-negative
|
||
integer). This numeric position can then be referred to with font
|
||
changing commands. When `gtroff' starts it is using font
|
||
position 1 (which must exist; position 0 is unused usually at
|
||
start-up).
|
||
|
||
The current font in use, as a font position, is available in the
|
||
read-only number register `.f'. This can be useful to remember the
|
||
current font for later recall. It is associated with the current
|
||
environment (*note Environments::).
|
||
|
||
|
||
.nr save-font \n[.f]
|
||
.ft B
|
||
... text text text ...
|
||
.ft \n[save-font]
|
||
|
||
The number of the next free font position is available in the
|
||
read-only number register `.fp'. This is useful when mounting a
|
||
new font, like so:
|
||
|
||
|
||
.fp \n[.fp] NEATOFONT
|
||
|
||
Fonts not listed in the `DESC' file are automatically mounted on
|
||
the next available font position when they are referenced. If a
|
||
font is to be mounted explicitly with the `fp' request on an unused
|
||
font position, it should be mounted on the first unused font
|
||
position, which can be found in the `.fp' register. Although
|
||
`gtroff' does not enforce this strictly, it is not allowed to
|
||
mount a font at a position whose number is much greater (approx.
|
||
1000 positions) than that of any currently used position.
|
||
|
||
The `fp' request has an optional third argument. This argument
|
||
gives the external name of the font, which is used for finding the
|
||
font description file. The second argument gives the internal
|
||
name of the font which is used to refer to the font in `gtroff'
|
||
after it has been mounted. If there is no third argument then the
|
||
internal name is used as the external name. This feature makes it
|
||
possible to use fonts with long names in compatibility mode.
|
||
|
||
Both the `ft' request and the `\f' escape have alternative syntax
|
||
forms to access font positions.
|
||
|
||
-- Request: .ft nnn
|
||
-- Escape: \fn
|
||
-- Escape: \f(nn
|
||
-- Escape: \f[nnn]
|
||
Change the current font position to NNN (one-digit position N,
|
||
two-digit position NN), which must be a non-negative integer.
|
||
|
||
If NNN is associated with a style (as set with the `sty' request
|
||
or with the `styles' command in the `DESC' file), use it within
|
||
the current font family (as set with the `fam' request, the `\F'
|
||
escape, or with the `family' command in the `DESC' file).
|
||
|
||
|
||
this is font 1
|
||
.ft 2
|
||
this is font 2
|
||
.ft \" switch back to font 1
|
||
.ft 3
|
||
this is font 3
|
||
.ft
|
||
this is font 1 again
|
||
|
||
*Note Changing Fonts::, for the standard syntax form.
|
||
|
||
|
||
File: groff, Node: Using Symbols, Next: Special Fonts, Prev: Font Positions, Up: Fonts and Symbols
|
||
|
||
5.17.4 Using Symbols
|
||
--------------------
|
||
|
||
A "glyph" is a graphical representation of a "character". While a
|
||
character is an abstract entity containing semantic information, a
|
||
glyph is something which can be actually seen on screen or paper. It
|
||
is possible that a character has multiple glyph representation forms
|
||
(for example, the character `A' can be either written in a roman or an
|
||
italic font, yielding two different glyphs); sometimes more than one
|
||
character maps to a single glyph (this is a "ligature" - the most
|
||
common is `fi').
|
||
|
||
A "symbol" is simply a named glyph. Within `gtroff', all glyph
|
||
names of a particular font are defined in its font file. If the user
|
||
requests a glyph not available in this font, `gtroff' looks up an
|
||
ordered list of "special fonts". By default, the POSTSCRIPT output
|
||
device supports the two special fonts `SS' (slanted symbols) and `S'
|
||
(symbols) (the former is looked up before the latter). Other output
|
||
devices use different names for special fonts. Fonts mounted with the
|
||
`fonts' keyword in the `DESC' file are globally available. To install
|
||
additional special fonts locally (i.e. for a particular font), use the
|
||
`fspecial' request.
|
||
|
||
Here the exact rules how `gtroff' searches a given symbol:
|
||
|
||
* If the symbol has been defined with the `char' request, use it.
|
||
This hides a symbol with the same name in the current font.
|
||
|
||
* Check the current font.
|
||
|
||
* If the symbol has been defined with the `fchar' request, use it.
|
||
|
||
* Check whether the current font has a font-specific list of special
|
||
fonts; test all fonts in the order of appearance in the last
|
||
`fspecial' call if appropriate.
|
||
|
||
* If the symbol has been defined with the `fschar' request for the
|
||
current font, use it.
|
||
|
||
* Check all fonts in the order of appearance in the last `special'
|
||
call.
|
||
|
||
* If the symbol has been defined with the `schar' request, use it.
|
||
|
||
* As a last resort, consult all fonts loaded up to now for special
|
||
fonts and check them, starting with the lowest font number. Note
|
||
that this can sometimes lead to surprising results since the
|
||
`fonts' line in the `DESC' file often contains empty positions
|
||
which are filled later on. For example, consider the following:
|
||
|
||
|
||
fonts 3 0 0 FOO
|
||
|
||
This mounts font `foo' at font position 3. We assume that `FOO'
|
||
is a special font, containing glyph `foo', and that no font has
|
||
been loaded yet. The line
|
||
|
||
|
||
.fspecial BAR BAZ
|
||
|
||
makes font `BAZ' special only if font `BAR' is active. We further
|
||
assume that `BAZ' is really a special font, i.e., the font
|
||
description file contains the `special' keyword, and that it also
|
||
contains glyph `foo' with a special shape fitting to font `BAR'.
|
||
After executing `fspecial', font `BAR' is loaded at font
|
||
position 1, and `BAZ' at position 2.
|
||
|
||
We now switch to a new font `XXX', trying to access glyph `foo'
|
||
which is assumed to be missing. There are neither font-specific
|
||
special fonts for `XXX' nor any other fonts made special with the
|
||
`special' request, so `gtroff' starts the search for special fonts
|
||
in the list of already mounted fonts, with increasing font
|
||
positions. Consequently, it finds `BAZ' before `FOO' even for
|
||
`XXX' which is not the intended behaviour.
|
||
|
||
*Note Font Files::, and *Note Special Fonts::, for more details.
|
||
|
||
The list of available symbols is device dependent; see the
|
||
`groff_char(7)' man page for a complete list of all glyphs. For
|
||
example, say
|
||
|
||
|
||
man -Tdvi groff_char > groff_char.dvi
|
||
|
||
for a list using the default DVI fonts (not all versions of the `man'
|
||
program support the `-T' option). If you want to use an additional
|
||
macro package to change the used fonts, `groff' must be called directly:
|
||
|
||
|
||
groff -Tdvi -mec -man groff_char.7 > groff_char.dvi
|
||
|
||
Glyph names not listed in groff_char(7) are derived algorithmically,
|
||
using a simplified version of the Adobe Glyph List (AGL) algorithm
|
||
which is described in
|
||
`http://partners.adobe.com/asn/tech/type/unicodegn.jsp'. The (frozen)
|
||
set of glyph names which can't be derived algorithmically is called
|
||
"groff glyph list (GGL)".
|
||
|
||
* A glyph for Unicode character U+XXXX[X[X]] which is not a
|
||
composite character will be named `uXXXX[X[X]]'. X must be an
|
||
uppercase hexadecimal digit. Examples: `u1234', `u008E',
|
||
`u12DB8'. The largest Unicode value is 0x10FFFF. There must be at
|
||
least four `X' digits; if necessary, add leading zeroes (after the
|
||
`u'). No zero padding is allowed for character codes greater than
|
||
0xFFFF. Surrogates (i.e., Unicode values greater than 0xFFFF
|
||
represented with character codes from the surrogate area
|
||
U+D800-U+DFFF) are not allowed too.
|
||
|
||
* A glyph representing more than a single input character will be
|
||
named
|
||
|
||
`u' COMPONENT1 `_' COMPONENT2 `_' COMPONENT3 ...
|
||
|
||
Example: `u0045_0302_0301'.
|
||
|
||
For simplicity, all Unicode characters which are composites must be
|
||
decomposed maximally (this is normalization form D in the Unicode
|
||
standard); for example, `u00CA_0301' is not a valid glyph name
|
||
since U+00CA (LATIN CAPITAL LETTER E WITH CIRCUMFLEX) can be
|
||
further decomposed into U+0045 (LATIN CAPITAL LETTER E) and U+0302
|
||
(COMBINING CIRCUMFLEX ACCENT). `u0045_0302_0301' is thus the
|
||
glyph name for U+1EBE, LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND
|
||
ACUTE.
|
||
|
||
* groff maintains a table to decompose all algorithmically derived
|
||
glyph names which are composites itself. For example, `u0100'
|
||
(LATIN LETTER A WITH MACRON) will be automatically decomposed into
|
||
`u0041_0304'. Additionally, a glyph name of the GGL is preferred
|
||
to an algorithmically derived glyph name; groff also automatically
|
||
does the mapping. Example: The glyph `u0045_0302' will be mapped
|
||
to `^E'.
|
||
|
||
* glyph names of the GGL can't be used in composite glyph names; for
|
||
example, `^E_u0301' is invalid.
|
||
|
||
-- Escape: \(nm
|
||
-- Escape: \[name]
|
||
-- Escape: \[component1 component2 ...]
|
||
Insert a symbol NAME (two-character name NM) or a composite glyph
|
||
with component glyphs COMPONENT1, COMPONENT2, .... There is no
|
||
special syntax for one-character names - the natural form `\N'
|
||
would collide with escapes.(1) (*note Using Symbols-Footnote-1::)
|
||
|
||
If NAME is undefined, a warning of type `char' is generated, and
|
||
the escape is ignored. *Note Debugging::, for information about
|
||
warnings.
|
||
|
||
groff resolves `\[...]' with more than a single component as
|
||
follows:
|
||
|
||
* Any component which is found in the GGL will be converted to
|
||
the `uXXXX' form.
|
||
|
||
* Any component `uXXXX' which is found in the list of
|
||
decomposable glyphs will be decomposed.
|
||
|
||
* The resulting elements are then concatenated with `_'
|
||
inbetween, dropping the leading `u' in all elements but the
|
||
first.
|
||
|
||
No check for the existence of any component (similar to `tr'
|
||
request) will be done.
|
||
|
||
Examples:
|
||
|
||
`\[A ho]'
|
||
`A' maps to `u0041', `ho' maps to `u02DB', thus the final
|
||
glyph name would be `u0041_02DB'. Note this is not the
|
||
expected result: The ogonek glyph `ho' is a spacing ogonek,
|
||
but for a proper composite a non-spacing ogonek (U+0328) is
|
||
necessary. Looking into the file `composite.tmac' one can
|
||
find `.composite ho u0328' which changes the mapping of `ho'
|
||
while a composite glyph name is constructed, causing the
|
||
final glyph name to be `u0041_0328'.
|
||
|
||
`\[^E u0301]'
|
||
`\[^E aa]'
|
||
`\[E a^ aa]'
|
||
`\[E ^ ']'
|
||
`^E' maps to `u0045_0302', thus the final glyph name is
|
||
`u0045_0302_0301' in all forms (assuming proper calls of the
|
||
`composite' request).
|
||
|
||
It is not possible to define glyphs with names like `A ho' within
|
||
a groff font file. This is not really a limitation; instead, you
|
||
have to define `u0041_0328'.
|
||
|
||
-- Escape: \C'xxx'
|
||
Typeset the glyph named XXX.(2) (*note Using Symbols-Footnote-2::)
|
||
Normally it is more convenient to use `\[XXX]', but `\C' has the
|
||
advantage that it is compatible with newer versions of AT&T
|
||
`troff' and is available in compatibility mode.
|
||
|
||
-- Request: .composite from to
|
||
Map glyph name FROM to glyph name TO if it is used in `\[...]'
|
||
with more than one component. See above for examples.
|
||
|
||
This mapping is based on glyph names only; no check for the
|
||
existence of either glyph is done.
|
||
|
||
A set of default mappings for many accents can be found in the file
|
||
`composite.tmac' which is loaded at start-up.
|
||
|
||
-- Escape: \N'n'
|
||
Typeset the glyph with code N in the current font (`n' is *not*
|
||
the input character code). The number N can be any non-negative
|
||
decimal integer. Most devices only have glyphs with codes between
|
||
0 and 255; the Unicode output device uses codes in the range
|
||
0-65535. If the current font does not contain a glyph with that
|
||
code, special fonts are _not_ searched. The `\N' escape sequence
|
||
can be conveniently used in conjunction with the `char' request:
|
||
|
||
|
||
.char \[phone] \f[ZD]\N'37'
|
||
|
||
The code of each glyph is given in the fourth column in the font
|
||
description file after the `charset' command. It is possible to
|
||
include unnamed glyphs in the font description file by using a
|
||
name of `---'; the `\N' escape sequence is the only way to use
|
||
these.
|
||
|
||
No kerning is applied to glyphs accessed with `\N'.
|
||
|
||
Some escape sequences directly map onto special glyphs.
|
||
|
||
-- Escape: \'
|
||
This is a backslash followed by the apostrophe character, ASCII
|
||
character `0x27' (EBCDIC character `0x7D'). The same as `\[aa]',
|
||
the acute accent.
|
||
|
||
-- Escape: \`
|
||
This is a backslash followed by ASCII character `0x60' (EBCDIC
|
||
character `0x79' usually). The same as `\[ga]', the grave accent.
|
||
|
||
-- Escape: \-
|
||
This is the same as `\[-]', the minus sign in the current font.
|
||
|
||
-- Request: .cflags n c1 c2 ...
|
||
Input characters and symbols have certain properties associated
|
||
with it.(3) (*note Using Symbols-Footnote-3::) These properties
|
||
can be modified with the `cflags' request. The first argument is
|
||
the sum of the desired flags and the remaining arguments are the
|
||
characters or symbols to have those properties. It is possible to
|
||
omit the spaces between the characters or symbols.
|
||
|
||
`1'
|
||
The character ends sentences (initially characters `.?!' have
|
||
this property).
|
||
|
||
`2'
|
||
Lines can be broken before the character (initially no
|
||
characters have this property).
|
||
|
||
`4'
|
||
Lines can be broken after the character (initially the
|
||
character `-' and the symbols `\[hy]' and `\[em]' have this
|
||
property).
|
||
|
||
`8'
|
||
The character overlaps horizontally if used as a horizontal
|
||
line building element. Initially the symbols `\[ul]',
|
||
`\[rn]', `\[ru]', `\[radicalex]', and `\[sqrtex]' have this
|
||
property.
|
||
|
||
`16'
|
||
The character overlaps vertically if used as vertical line
|
||
building element. Initially symbol `\[br]' has this property.
|
||
|
||
`32'
|
||
An end-of-sentence character followed by any number of
|
||
characters with this property is treated as the end of a
|
||
sentence if followed by a newline or two spaces; in other
|
||
words the character is "transparent" for the purposes of
|
||
end-of-sentence recognition - this is the same as having a
|
||
zero space factor in TeX (initially characters `"')]*' and
|
||
the symbols `\[dg]' and `\[rq]' have this property).
|
||
|
||
-- Request: .char g [string]
|
||
-- Request: .fchar g [string]
|
||
-- Request: .fschar f g [string]
|
||
-- Request: .schar g [string]
|
||
Define a new glyph G to be STRING (which can be empty).(4) (*note
|
||
Using Symbols-Footnote-4::) Every time glyph G needs to be
|
||
printed, STRING is processed in a temporary environment and the
|
||
result is wrapped up into a single object. Compatibility mode is
|
||
turned off and the escape character is set to `\' while STRING is
|
||
being processed. Any emboldening, constant spacing or track
|
||
kerning is applied to this object rather than to individual
|
||
characters in STRING.
|
||
|
||
A glyph defined by these requests can be used just like a normal
|
||
glyph provided by the output device. In particular, other
|
||
characters can be translated to it with the `tr' or `trin'
|
||
requests; it can be made the leader character by the `lc' request;
|
||
repeated patterns can be drawn with the glyph using the `\l' and
|
||
`\L' escape sequences; words containing the glyph can be
|
||
hyphenated correctly if the `hcode' request is used to give the
|
||
glyph's symbol a hyphenation code.
|
||
|
||
There is a special anti-recursion feature: Use of `g' within the
|
||
glyph's definition is handled like normal characters and symbols
|
||
not defined with `char'.
|
||
|
||
Note that the `tr' and `trin' requests take precedence if `char'
|
||
accesses the same symbol.
|
||
|
||
|
||
.tr XY
|
||
X
|
||
=> Y
|
||
.char X Z
|
||
X
|
||
=> Y
|
||
.tr XX
|
||
X
|
||
=> Z
|
||
|
||
The `fchar' request defines a fallback glyph: `gtroff' only checks
|
||
for glyphs defined with `fchar' if it cannot find the glyph in the
|
||
current font. `gtroff' carries out this test before checking
|
||
special fonts.
|
||
|
||
`fschar' defines a fallback glyph for font F: `gtroff' checks for
|
||
glyphs defined with `fschar' after the list of fonts declared as
|
||
font-specific special fonts with the `fspecial' request, but
|
||
before the list of fonts declared as global special fonts with the
|
||
`special' request.
|
||
|
||
Finally, the `schar' request defines a global fallback glyph:
|
||
`gtroff' checks for glyphs defined with `schar' after the list of
|
||
fonts declared as global special fonts with the `special' request,
|
||
but before the already mounted special fonts.
|
||
|
||
*Note Using Symbols::, for a detailed description of the glyph
|
||
searching mechanism in `gtroff'.
|
||
|
||
-- Request: .rchar c1 c2 ...
|
||
-- Request: .rfschar f c1 c2 ...
|
||
Remove the definitions of glyphs C1, C2, .... This undoes the
|
||
effect of a `char', `fchar', or `schar' request.
|
||
|
||
It is possible to omit the whitespace between arguments.
|
||
|
||
The request `rfschar' removes glyph definitions defined with
|
||
`fschar' for glyph f.
|
||
|
||
*Note Special Characters::.
|
||
|
||
|
||
File: groff, Node: Using Symbols-Footnotes, Up: Using Symbols
|
||
|
||
(1) Note that a one-character symbol is not the same as an input
|
||
character, i.e., the character `a' is not the same as `\[a]'. By
|
||
default, `groff' defines only a single one-character symbol, `\[-]'; it
|
||
is usually accessed as `\-'. On the other hand, `gtroff' has the
|
||
special feature that `\[charXXX]' is the same as the input character
|
||
with character code XXX. For example, `\[char97]' is identical to the
|
||
letter `a' if ASCII encoding is active.
|
||
|
||
(2) `\C' is actually a misnomer since it accesses an output glyph.
|
||
|
||
(3) Note that the output glyphs themselves don't have such
|
||
properties. For `gtroff', a glyph is a numbered box with a given
|
||
width, depth, and height, nothing else. All manipulations with the
|
||
`cflags' request work on the input level.
|
||
|
||
(4) `char' is a misnomer since an output glyph is defined.
|
||
|
||
|
||
File: groff, Node: Special Fonts, Next: Artificial Fonts, Prev: Using Symbols, Up: Fonts and Symbols
|
||
|
||
5.17.5 Special Fonts
|
||
--------------------
|
||
|
||
Special fonts are those that `gtroff' searches when it cannot find the
|
||
requested glyph in the current font. The Symbol font is usually a
|
||
special font.
|
||
|
||
`gtroff' provides the following two requests to add more special
|
||
fonts. *Note Using Symbols::, for a detailed description of the glyph
|
||
searching mechanism in `gtroff'.
|
||
|
||
Usually, only non-TTY devices have special fonts.
|
||
|
||
-- Request: .special [s1 s2 ...]
|
||
-- Request: .fspecial f [s1 s2 ...]
|
||
Use the `special' request to define special fonts. Initially, this
|
||
list is empty.
|
||
|
||
Use the `fspecial' request to designate special fonts only when
|
||
font F is active. Initially, this list is empty.
|
||
|
||
Previous calls to `special' or `fspecial' are overwritten; without
|
||
arguments, the particular list of special fonts is set to empty.
|
||
Special fonts are searched in the order they appear as arguments.
|
||
|
||
All fonts which appear in a call to `special' or `fspecial' are
|
||
loaded.
|
||
|
||
*Note Using Symbols::, for the exact search order of glyphs.
|
||
|
||
|
||
File: groff, Node: Artificial Fonts, Next: Ligatures and Kerning, Prev: Special Fonts, Up: Fonts and Symbols
|
||
|
||
5.17.6 Artificial Fonts
|
||
-----------------------
|
||
|
||
There are a number of requests and escapes for artificially creating
|
||
fonts. These are largely vestiges of the days when output devices did
|
||
not have a wide variety of fonts, and when `nroff' and `troff' were
|
||
separate programs. Most of them are no longer necessary in GNU
|
||
`troff'. Nevertheless, they are supported.
|
||
|
||
-- Escape: \H'height'
|
||
-- Escape: \H'+height'
|
||
-- Escape: \H'-height'
|
||
-- Register: \n[.height]
|
||
Change (increment, decrement) the height of the current font, but
|
||
not the width. If HEIGHT is zero, restore the original height.
|
||
Default scaling indicator is `z'.
|
||
|
||
The read-only number register `.height' contains the font height as
|
||
set by `\H'.
|
||
|
||
Currently, only the `-Tps' device supports this feature.
|
||
|
||
Note that `\H' doesn't produce an input token in `gtroff'. As a
|
||
consequence, it can be used in requests like `mc' (which expects a
|
||
single character as an argument) to change the font on the fly:
|
||
|
||
|
||
.mc \H'+5z'x\H'0'
|
||
|
||
In compatibility mode, `gtroff' behaves differently: If an
|
||
increment or decrement is used, it is always taken relative to the
|
||
current point size and not relative to the previously selected font
|
||
height. Thus,
|
||
|
||
|
||
.cp 1
|
||
\H'+5'test \H'+5'test
|
||
|
||
prints the word `test' twice with the same font height (five
|
||
points larger than the current font size).
|
||
|
||
-- Escape: \S'slant'
|
||
-- Register: \n[.slant]
|
||
Slant the current font by SLANT degrees. Positive values slant to
|
||
the right. Only integer values are possible.
|
||
|
||
The read-only number register `.slant' contains the font slant as
|
||
set by `\S'.
|
||
|
||
Currently, only the `-Tps' device supports this feature.
|
||
|
||
Note that `\S' doesn't produce an input token in `gtroff'. As a
|
||
consequence, it can be used in requests like `mc' (which expects a
|
||
single character as an argument) to change the font on the fly:
|
||
|
||
|
||
.mc \S'20'x\S'0'
|
||
|
||
This request is incorrectly documented in the original UNIX troff
|
||
manual; the slant is always set to an absolute value.
|
||
|
||
-- Request: .ul [lines]
|
||
The `ul' request normally underlines subsequent lines if a TTY
|
||
output device is used. Otherwise, the lines are printed in italics
|
||
(only the term `underlined' is used in the following). The single
|
||
argument is the number of input lines to be underlined; with no
|
||
argument, the next line is underlined. If LINES is zero or
|
||
negative, stop the effects of `ul' (if it was active). Requests
|
||
and empty lines do not count for computing the number of underlined
|
||
input lines, even if they produce some output like `tl'. Lines
|
||
inserted by macros (e.g. invoked by a trap) do count.
|
||
|
||
At the beginning of `ul', the current font is stored and the
|
||
underline font is activated. Within the span of a `ul' request,
|
||
it is possible to change fonts, but after the last line affected by
|
||
`ul' the saved font is restored.
|
||
|
||
This number of lines still to be underlined is associated with the
|
||
current environment (*note Environments::). The underline font
|
||
can be changed with the `uf' request.
|
||
|
||
The `ul' request does not underline spaces.
|
||
|
||
-- Request: .cu [lines]
|
||
The `cu' request is similar to `ul' but underlines spaces as well
|
||
(if a TTY output device is used).
|
||
|
||
-- Request: .uf font
|
||
Set the underline font (globally) used by `ul' and `cu'. By
|
||
default, this is the font at position 2. FONT can be either a
|
||
non-negative font position or the name of a font.
|
||
|
||
-- Request: .bd font [offset]
|
||
-- Request: .bd font1 font2 [offset]
|
||
-- Register: \n[.b]
|
||
Artificially create a bold font by printing each glyph twice,
|
||
slightly offset.
|
||
|
||
Two syntax forms are available.
|
||
|
||
* Imitate a bold font unconditionally. The first argument
|
||
specifies the font to embolden, and the second is the number
|
||
of basic units, minus one, by which the two glyphs are
|
||
offset. If the second argument is missing, emboldening is
|
||
turned off.
|
||
|
||
FONT can be either a non-negative font position or the name
|
||
of a font.
|
||
|
||
OFFSET is available in the `.b' read-only register if a
|
||
special font is active; in the `bd' request, its default unit
|
||
is `u'.
|
||
|
||
* Imitate a bold form conditionally. Embolden FONT1 by OFFSET
|
||
only if font FONT2 is the current font. This command can be
|
||
issued repeatedly to set up different emboldening values for
|
||
different current fonts. If the second argument is missing,
|
||
emboldening is turned off for this particular current font.
|
||
|
||
This affects special fonts only (either set up with the
|
||
`special' command in font files or with the `fspecial'
|
||
request).
|
||
|
||
-- Request: .cs font [width [em-size]]
|
||
Switch to and from "constant glyph space mode". If activated, the
|
||
width of every glyph is WIDTH/36 ems. The em size is given
|
||
absolutely by EM-SIZE; if this argument is missing, the em value
|
||
is taken from the current font size (as set with the `ps' request)
|
||
when the font is effectively in use. Without second and third
|
||
argument, constant glyph space mode is deactivated.
|
||
|
||
Default scaling indicator for EM-SIZE is `z'; WIDTH is an integer.
|
||
|
||
|
||
File: groff, Node: Ligatures and Kerning, Prev: Artificial Fonts, Up: Fonts and Symbols
|
||
|
||
5.17.7 Ligatures and Kerning
|
||
----------------------------
|
||
|
||
Ligatures are groups of characters that are run together, i.e, producing
|
||
a single glyph. For example, the letters `f' and `i' can form a
|
||
ligature `fi' as in the word `file'. This produces a cleaner look
|
||
(albeit subtle) to the printed output. Usually, ligatures are not
|
||
available in fonts for TTY output devices.
|
||
|
||
Most POSTSCRIPT fonts support the fi and fl ligatures. The C/A/T
|
||
typesetter that was the target of AT&T `troff' also supported `ff',
|
||
`ffi', and `ffl' ligatures. Advanced typesetters or `expert' fonts may
|
||
include ligatures for `ft' and `ct', although GNU `troff' does not
|
||
support these (yet).
|
||
|
||
Only the current font is checked for ligatures and kerns; neither
|
||
special fonts nor entities defined with the `char' request (and its
|
||
siblings) are taken into account.
|
||
|
||
-- Request: .lg [flag]
|
||
-- Register: \n[.lg]
|
||
Switch the ligature mechanism on or off; if the parameter is
|
||
non-zero or missing, ligatures are enabled, otherwise disabled.
|
||
Default is on. The current ligature mode can be found in the
|
||
read-only number register `.lg' (set to 1 or 2 if ligatures are
|
||
enabled, 0 otherwise).
|
||
|
||
Setting the ligature mode to 2 enables the two-character ligatures
|
||
(fi, fl, and ff) and disables the three-character ligatures (ffi
|
||
and ffl).
|
||
|
||
"Pairwise kerning" is another subtle typesetting mechanism that
|
||
modifies the distance between a glyph pair to improve readability. In
|
||
most cases (but not always) the distance is decreased. Typewriter-like
|
||
fonts and fonts for terminals where all glyphs have the same width
|
||
don't use kerning.
|
||
|
||
-- Request: .kern [flag]
|
||
-- Register: \n[.kern]
|
||
Switch kerning on or off. If the parameter is non-zero or missing,
|
||
enable pairwise kerning, otherwise disable it. The read-only
|
||
number register `.kern' is set to 1 if pairwise kerning is enabled,
|
||
0 otherwise.
|
||
|
||
If the font description file contains pairwise kerning information,
|
||
glyphs from that font are kerned. Kerning between two glyphs can
|
||
be inhibited by placing `\&' between them: `V\&A'.
|
||
|
||
*Note Font File Format::.
|
||
|
||
"Track kerning" expands or reduces the space between glyphs. This
|
||
can be handy, for example, if you need to squeeze a long word onto a
|
||
single line or spread some text to fill a narrow column. It must be
|
||
used with great care since it is usually considered bad typography if
|
||
the reader notices the effect.
|
||
|
||
-- Request: .tkf f s1 n1 s2 n2
|
||
Enable track kerning for font F. If the current font is F the
|
||
width of every glyph is increased by an amount between N1 and N2
|
||
(N1, N2 can be negative); if the current point size is less than
|
||
or equal to S1 the width is increased by N1; if it is greater than
|
||
or equal to S2 the width is increased by N2; if the point size is
|
||
greater than or equal to S1 and less than or equal to S2 the
|
||
increase in width is a linear function of the point size.
|
||
|
||
The default scaling indicator is `z' for S1 and S2, `p' for N1 and
|
||
N2.
|
||
|
||
Note that the track kerning amount is added even to the rightmost
|
||
glyph in a line; for large values it is thus recommended to
|
||
increase the line length by the same amount to compensate it.
|
||
|
||
Sometimes, when typesetting letters of different fonts, more or less
|
||
space at such boundaries are needed. There are two escapes to help
|
||
with this.
|
||
|
||
-- Escape: \/
|
||
Increase the width of the preceding glyph so that the spacing
|
||
between that glyph and the following glyph is correct if the
|
||
following glyph is a roman glyph. For example, if an italic `f'
|
||
is immediately followed by a roman right parenthesis, then in many
|
||
fonts the top right portion of the `f' overlaps the top left of
|
||
the right parenthesis. Use this escape sequence whenever an
|
||
italic glyph is immediately followed by a roman glyph without any
|
||
intervening space. This small amount of space is also called
|
||
"italic correction".
|
||
|
||
|
||
-- Escape: \,
|
||
Modify the spacing of the following glyph so that the spacing
|
||
between that glyph and the preceding glyph is correct if the
|
||
preceding glyph is a roman glyph. Use this escape sequence
|
||
whenever a roman glyph is immediately followed by an italic glyph
|
||
without any intervening space. In analogy to above, this space
|
||
could be called "left italic correction", but this term isn't used
|
||
widely.
|
||
|
||
|
||
-- Escape: \&
|
||
Insert a zero-width character, which is invisible. Its intended
|
||
use is to stop interaction of a character with its surrounding.
|
||
|
||
* It prevents the insertion of extra space after an
|
||
end-of-sentence character.
|
||
|
||
|
||
Test.
|
||
Test.
|
||
=> Test. Test.
|
||
Test.\&
|
||
Test.
|
||
=> Test. Test.
|
||
|
||
* It prevents interpretation of a control character at the
|
||
beginning of an input line.
|
||
|
||
|
||
.Test
|
||
=> warning: `Test' not defined
|
||
\&.Test
|
||
=> .Test
|
||
|
||
* It prevents kerning between two glyphs.
|
||
|
||
* It is needed to map an arbitrary character to nothing in the
|
||
`tr' request (*note Character Translations::).
|
||
|
||
-- Escape: \)
|
||
This escape is similar to `\&' except that it behaves like a
|
||
character declared with the `cflags' request to be transparent for
|
||
the purposes of an end-of-sentence character.
|
||
|
||
Its main usage is in macro definitions to protect against arguments
|
||
starting with a control character.
|
||
|
||
|
||
.de xxx
|
||
\)\\$1
|
||
..
|
||
.de yyy
|
||
\&\\$1
|
||
..
|
||
This is a test.\c
|
||
.xxx '
|
||
This is a test.
|
||
=>This is a test.' This is a test.
|
||
This is a test.\c
|
||
.yyy '
|
||
This is a test.
|
||
=>This is a test.' This is a test.
|
||
|
||
|
||
|
||
File: groff, Node: Sizes, Next: Strings, Prev: Fonts and Symbols, Up: gtroff Reference
|
||
|
||
5.18 Sizes
|
||
==========
|
||
|
||
`gtroff' uses two dimensions with each line of text, type size and
|
||
vertical spacing. The "type size" is approximately the height of the
|
||
tallest glyph.(1) (*note Sizes-Footnote-1::) "Vertical spacing" is the
|
||
amount of space `gtroff' allows for a line of text; normally, this is
|
||
about 20% larger than the current type size. Ratios smaller than this
|
||
can result in hard-to-read text; larger than this, it spreads the text
|
||
out more vertically (useful for term papers). By default, `gtroff'
|
||
uses 10 point type on 12 point spacing.
|
||
|
||
The difference between type size and vertical spacing is known, by
|
||
typesetters, as "leading" (this is pronounced `ledding').
|
||
|
||
* Menu:
|
||
|
||
* Changing Type Sizes::
|
||
* Fractional Type Sizes::
|
||
|
||
|
||
File: groff, Node: Sizes-Footnotes, Up: Sizes
|
||
|
||
(1) This is usually the parenthesis. Note that in most cases the
|
||
real dimensions of the glyphs in a font are _not_ related to its type
|
||
size! For example, the standard POSTSCRIPT font families `Times
|
||
Roman', `Helvetica', and `Courier' can't be used together at 10pt; to
|
||
get acceptable output, the size of `Helvetica' has to be reduced by one
|
||
point, and the size of `Courier' must be increased by one point.
|
||
|
||
|
||
File: groff, Node: Changing Type Sizes, Next: Fractional Type Sizes, Prev: Sizes, Up: Sizes
|
||
|
||
5.18.1 Changing Type Sizes
|
||
--------------------------
|
||
|
||
-- Request: .ps [size]
|
||
-- Request: .ps +size
|
||
-- Request: .ps -size
|
||
-- Escape: \ssize
|
||
-- Register: \n[.s]
|
||
Use the `ps' request or the `\s' escape to change (increase,
|
||
decrease) the type size (in points). Specify SIZE as either an
|
||
absolute point size, or as a relative change from the current size.
|
||
The size 0, or no argument, goes back to the previous size.
|
||
|
||
Default scaling indicator of `size' is `z'. If `size' is zero or
|
||
negative, it is set to 1u.
|
||
|
||
The read-only number register `.s' returns the point size in
|
||
points as a decimal fraction. This is a string. To get the point
|
||
size in scaled points, use the `.ps' register instead.
|
||
|
||
`.s' is associated with the current environment (*note
|
||
Environments::).
|
||
|
||
|
||
snap, snap,
|
||
.ps +2
|
||
grin, grin,
|
||
.ps +2
|
||
wink, wink, \s+2nudge, nudge,\s+8 say no more!
|
||
.ps 10
|
||
|
||
The `\s' escape may be called in a variety of ways. Much like
|
||
other escapes there must be a way to determine where the argument
|
||
ends and the text begins. Any of the following forms are valid:
|
||
|
||
`\sN'
|
||
Set the point size to N points. N must be either 0 or in the
|
||
range 4 to 39.
|
||
|
||
`\s+N'
|
||
`\s-N'
|
||
Increase or decrease the point size by N points. N must be
|
||
exactly one digit.
|
||
|
||
`\s(NN'
|
||
Set the point size to NN points. NN must be exactly two
|
||
digits.
|
||
|
||
`\s+(NN'
|
||
`\s-(NN'
|
||
`\s(+NN'
|
||
`\s(-NN'
|
||
Increase or decrease the point size by NN points. NN must be
|
||
exactly two digits.
|
||
|
||
Note that `\s' doesn't produce an input token in `gtroff'. As a
|
||
consequence, it can be used in requests like `mc' (which expects a
|
||
single character as an argument) to change the font on the fly:
|
||
|
||
|
||
.mc \s[20]x\s[0]
|
||
|
||
*Note Fractional Type Sizes::, for yet another syntactical form of
|
||
using the `\s' escape.
|
||
|
||
-- Request: .sizes s1 s2 ... sn [0]
|
||
Some devices may only have certain permissible sizes, in which case
|
||
`gtroff' rounds to the nearest permissible size. The `DESC' file
|
||
specifies which sizes are permissible for the device.
|
||
|
||
Use the `sizes' request to change the permissible sizes for the
|
||
current output device. Arguments are in scaled points; the
|
||
`sizescale' line in the `DESC' file for the output device provides
|
||
the scaling factor. For example, if the scaling factor is 1000,
|
||
then the value 12000 is 12 points.
|
||
|
||
Each argument can be a single point size (such as `12000'), or a
|
||
range of sizes (such as `4000-72000'). You can optionally end the
|
||
list with a zero.
|
||
|
||
-- Request: .vs [space]
|
||
-- Request: .vs +space
|
||
-- Request: .vs -space
|
||
-- Register: \n[.v]
|
||
Change (increase, decrease) the vertical spacing by SPACE. The
|
||
default scaling indicator is `p'.
|
||
|
||
If `vs' is called without an argument, the vertical spacing is
|
||
reset to the previous value before the last call to `vs'.
|
||
|
||
`gtroff' creates a warning of type `range' if SPACE is negative;
|
||
the vertical spacing is then set to smallest positive value, the
|
||
vertical resolution (as given in the `.V' register).
|
||
|
||
Note that `.vs 0' isn't saved in a diversion since it doesn't
|
||
result in a vertical motion. You explicitly have to repeat this
|
||
command before inserting the diversion.
|
||
|
||
The read-only number register `.v' contains the current vertical
|
||
spacing; it is associated with the current environment (*note
|
||
Environments::).
|
||
|
||
The effective vertical line spacing consists of four components.
|
||
Breaking a line causes the following actions (in the given order).
|
||
|
||
* Move the current point vertically by the "extra pre-vertical line
|
||
space". This is the minimum value of all `\x' escapes with a
|
||
negative argument in the current output line.
|
||
|
||
* Move the current point vertically by the vertical line spacing as
|
||
set with the `vs' request.
|
||
|
||
* Output the current line.
|
||
|
||
* Move the current point vertically by the "extra post-vertical line
|
||
space". This is the maximum value of all `\x' escapes with a
|
||
positive argument in the line which has just been output.
|
||
|
||
* Move the current point vertically by the "post-vertical line
|
||
spacing" as set with the `pvs' request.
|
||
|
||
It is usually better to use `vs' or `pvs' instead of `ls' to produce
|
||
double-spaced documents: `vs' and `pvs' have a finer granularity for
|
||
the inserted vertical space compared to `ls'; furthermore, certain
|
||
preprocessors assume single-spacing.
|
||
|
||
*Note Manipulating Spacing::, for more details on the `\x' escape
|
||
and the `ls' request.
|
||
|
||
-- Request: .pvs [space]
|
||
-- Request: .pvs +space
|
||
-- Request: .pvs -space
|
||
-- Register: \n[.pvs]
|
||
Change (increase, decrease) the post-vertical spacing by SPACE.
|
||
The default scaling indicator is `p'.
|
||
|
||
If `pvs' is called without an argument, the post-vertical spacing
|
||
is reset to the previous value before the last call to `pvs'.
|
||
|
||
`gtroff' creates a warning of type `range' if SPACE is zero or
|
||
negative; the vertical spacing is then set to zero.
|
||
|
||
The read-only number register `.pvs' contains the current
|
||
post-vertical spacing; it is associated with the current
|
||
environment (*note Environments::).
|
||
|
||
|
||
File: groff, Node: Fractional Type Sizes, Prev: Changing Type Sizes, Up: Sizes
|
||
|
||
5.18.2 Fractional Type Sizes
|
||
----------------------------
|
||
|
||
A "scaled point" is equal to 1/SIZESCALE points, where SIZESCALE is
|
||
specified in the `DESC' file (1 by default). There is a new scale
|
||
indicator `z' which has the effect of multiplying by SIZESCALE.
|
||
Requests and escape sequences in `gtroff' interpret arguments that
|
||
represent a point size as being in units of scaled points, but they
|
||
evaluate each such argument using a default scale indicator of `z'.
|
||
Arguments treated in this way are the argument to the `ps' request, the
|
||
third argument to the `cs' request, the second and fourth arguments to
|
||
the `tkf' request, the argument to the `\H' escape sequence, and those
|
||
variants of the `\s' escape sequence that take a numeric expression as
|
||
their argument (see below).
|
||
|
||
For example, suppose SIZESCALE is 1000; then a scaled point is
|
||
equivalent to a millipoint; the request `.ps 10.25' is equivalent to
|
||
`.ps 10.25z' and thus sets the point size to 10250 scaled points, which
|
||
is equal to 10.25 points.
|
||
|
||
`gtroff' disallows the use of the `z' scale indicator in instances
|
||
where it would make no sense, such as a numeric expression whose
|
||
default scale indicator was neither `u' nor `z'. Similarly it would
|
||
make no sense to use a scaling indicator other than `z' or `u' in a
|
||
numeric expression whose default scale indicator was `z', and so
|
||
`gtroff' disallows this as well.
|
||
|
||
There is also new scale indicator `s' which multiplies by the number
|
||
of units in a scaled point. So, for example, `\n[.ps]s' is equal to
|
||
`1m'. Be sure not to confuse the `s' and `z' scale indicators.
|
||
|
||
-- Register: \n[.ps]
|
||
A read-only number register returning the point size in scaled
|
||
points.
|
||
|
||
`.ps' is associated with the current environment (*note
|
||
Environments::).
|
||
|
||
-- Register: \n[.psr]
|
||
-- Register: \n[.sr]
|
||
The last-requested point size in scaled points is contained in the
|
||
`.psr' read-only number register. The last requested point size
|
||
in points as a decimal fraction can be found in `.sr'. This is a
|
||
string-valued read-only number register.
|
||
|
||
Note that the requested point sizes are device-independent, whereas
|
||
the values returned by the `.ps' and `.s' registers are not. For
|
||
example, if a point size of 11pt is requested, and a `sizes'
|
||
request (or a `sizescale' line in a `DESC' file) specifies 10.95pt
|
||
instead, this value is actually used.
|
||
|
||
Both registers are associated with the current environment (*note
|
||
Environments::).
|
||
|
||
The `\s' escape has the following syntax for working with fractional
|
||
type sizes:
|
||
|
||
`\s[N]'
|
||
`\s'N''
|
||
Set the point size to N scaled points; N is a numeric expression
|
||
with a default scale indicator of `z'.
|
||
|
||
`\s[+N]'
|
||
`\s[-N]'
|
||
`\s+[N]'
|
||
`\s-[N]'
|
||
`\s'+N''
|
||
`\s'-N''
|
||
`\s+'N''
|
||
`\s-'N''
|
||
Increase or or decrease the point size by N scaled points; N is a
|
||
numeric expression with a default scale indicator of `z'.
|
||
|
||
*Note Font Files::.
|
||
|
||
|
||
File: groff, Node: Strings, Next: Conditionals and Loops, Prev: Sizes, Up: gtroff Reference
|
||
|
||
5.19 Strings
|
||
============
|
||
|
||
`gtroff' has string variables, which are entirely for user convenience
|
||
(i.e. there are no built-in strings exept `.T', but even this is a
|
||
read-write string variable).
|
||
|
||
-- Request: .ds name [string]
|
||
-- Request: .ds1 name [string]
|
||
-- Escape: \*n
|
||
-- Escape: \*(nm
|
||
-- Escape: \*[name arg1 arg2 ...]
|
||
Define and access a string variable NAME (one-character name N,
|
||
two-character name NM). If NAME already exists, `ds' overwrites
|
||
the previous definition. Only the syntax form using brackets can
|
||
take arguments which are handled identically to macro arguments;
|
||
the single exception is that a closing bracket as an argument must
|
||
be enclosed in double quotes. *Note Request and Macro
|
||
Arguments::, and *Note Parameters::.
|
||
|
||
Example:
|
||
|
||
|
||
.ds foo a \\$1 test
|
||
.
|
||
This is \*[foo nice].
|
||
=> This is a nice test.
|
||
|
||
The `\*' escape "interpolates" (expands in-place) a
|
||
previously-defined string variable. To be more precise, the stored
|
||
string is pushed onto the input stack which is then parsed by
|
||
`gtroff'. Similar to number registers, it is possible to nest
|
||
strings, i.e. string variables can be called within string
|
||
variables.
|
||
|
||
If the string named by the `\*' escape does not exist, it is
|
||
defined as empty, and a warning of type `mac' is emitted (see
|
||
*Note Debugging::, for more details).
|
||
|
||
*Caution:* Unlike other requests, the second argument to the `ds'
|
||
request takes up the entire line including trailing spaces. This
|
||
means that comments on a line with such a request can introduce
|
||
unwanted space into a string.
|
||
|
||
|
||
.ds UX \s-1UNIX\s0\u\s-3tm\s0\d \" UNIX trademark
|
||
|
||
Instead the comment should be put on another line or have the
|
||
comment escape adjacent with the end of the string.
|
||
|
||
|
||
.ds UX \s-1UNIX\s0\u\s-3tm\s0\d\" UNIX trademark
|
||
|
||
To produce leading space the string can be started with a double
|
||
quote. No trailing quote is needed; in fact, any trailing quote is
|
||
included in your string.
|
||
|
||
|
||
.ds sign " Yours in a white wine sauce,
|
||
|
||
Strings are not limited to a single line of text. A string can
|
||
span several lines by escaping the newlines with a backslash. The
|
||
resulting string is stored _without_ the newlines.
|
||
|
||
|
||
.ds foo lots and lots \
|
||
of text are on these \
|
||
next several lines
|
||
|
||
It is not possible to have real newlines in a string. To put a
|
||
single double quote character into a string, use two consecutive
|
||
double quote characters.
|
||
|
||
The `ds1' request turns off compatibility mode while interpreting
|
||
a string. To be more precise, a "compatibility save" input token
|
||
is inserted at the beginning of the string, and a "compatibility
|
||
restore" input token at the end.
|
||
|
||
|
||
.nr xxx 12345
|
||
.ds aa The value of xxx is \\n[xxx].
|
||
.ds1 bb The value of xxx ix \\n[xxx].
|
||
.
|
||
.cp 1
|
||
.
|
||
\*(aa
|
||
=> warning: number register `[' not defined
|
||
=> The value of xxx is 0xxx].
|
||
\*(bb
|
||
=> The value of xxx ix 12345.
|
||
|
||
Strings, macros, and diversions (and boxes) share the same name
|
||
space. Internally, even the same mechanism is used to store them.
|
||
This has some interesting consequences. For example, it is
|
||
possible to call a macro with string syntax and vice versa.
|
||
|
||
|
||
.de xxx
|
||
a funny test.
|
||
..
|
||
This is \*[xxx]
|
||
=> This is a funny test.
|
||
|
||
.ds yyy a funny test
|
||
This is
|
||
.yyy
|
||
=> This is a funny test.
|
||
|
||
Diversions and boxes can be also called with string syntax.
|
||
|
||
Another consequence is that you can copy one-line diversions or
|
||
boxes to a string.
|
||
|
||
|
||
.di xxx
|
||
a \fItest\fR
|
||
.br
|
||
.di
|
||
.ds yyy This is \*[xxx]\c
|
||
\*[yyy].
|
||
=> This is a test.
|
||
|
||
As the previous example shows, it is possible to store formatted
|
||
output in strings. The `\c' escape prevents the insertion of an
|
||
additional blank line in the output.
|
||
|
||
Copying diversions longer than a single output line produces
|
||
unexpected results.
|
||
|
||
|
||
.di xxx
|
||
a funny
|
||
.br
|
||
test
|
||
.br
|
||
.di
|
||
.ds yyy This is \*[xxx]\c
|
||
\*[yyy].
|
||
=> test This is a funny.
|
||
|
||
Usually, it is not predictable whether a diversion contains one or
|
||
more output lines, so this mechanism should be avoided. With UNIX
|
||
`troff', this was the only solution to strip off a final newline
|
||
from a diversion. Another disadvantage is that the spaces in the
|
||
copied string are already formatted, making them unstretchable.
|
||
This can cause ugly results.
|
||
|
||
A clean solution to this problem is available in GNU `troff',
|
||
using the requests `chop' to remove the final newline of a
|
||
diversion, and `unformat' to make the horizontal spaces
|
||
stretchable again.
|
||
|
||
|
||
.box xxx
|
||
a funny
|
||
.br
|
||
test
|
||
.br
|
||
.box
|
||
.chop xxx
|
||
.unformat xxx
|
||
This is \*[xxx].
|
||
=> This is a funny test.
|
||
|
||
*Note Gtroff Internals::, for more information.
|
||
|
||
-- Request: .as name [string]
|
||
-- Request: .as1 name [string]
|
||
The `as' request is similar to `ds' but appends STRING to the
|
||
string stored as NAME instead of redefining it. If NAME doesn't
|
||
exist yet, it is created.
|
||
|
||
|
||
.as sign " with shallots, onions and garlic,
|
||
|
||
The `as1' request is similar to `as', but compatibility mode is
|
||
switched off while the appended string is interpreted. To be more
|
||
precise, a "compatibility save" input token is inserted at the
|
||
beginning of the appended string, and a "compatibility restore"
|
||
input token at the end.
|
||
|
||
Rudimentary string manipulation routines are given with the next two
|
||
requests.
|
||
|
||
-- Request: .substring str n1 [n2]
|
||
Replace the string named STR with the substring defined by the
|
||
indices N1 and N2. The first character in the string has index 0.
|
||
If N2 is omitted, it is taken to be equal to the string's length.
|
||
If the index value N1 or N2 is negative, it is counted from the
|
||
end of the string, going backwards: The last character has
|
||
index -1, the character before the last character has index -2,
|
||
etc.
|
||
|
||
|
||
.ds xxx abcdefgh
|
||
.substring xxx 1 -4
|
||
\*[xxx]
|
||
=> bcde
|
||
|
||
|
||
-- Request: .length reg str
|
||
Compute the number of characters of STR and return it in the
|
||
number register REG. If REG doesn't exist, it is created. `str'
|
||
is read in copy mode.
|
||
|
||
|
||
.ds xxx abcd\h'3i'efgh
|
||
.length yyy \*[xxx]
|
||
\n[yyy]
|
||
=> 14
|
||
|
||
|
||
-- Request: .rn xx yy
|
||
Rename the request, macro, diversion, or string XX to YY.
|
||
|
||
-- Request: .rm xx
|
||
Remove the request, macro, diversion, or string XX. `gtroff'
|
||
treats subsequent invocations as if the object had never been
|
||
defined.
|
||
|
||
-- Request: .als new old
|
||
Create an alias named NEW for the request, string, macro, or
|
||
diversion object named OLD. The new name and the old name are
|
||
exactly equivalent (it is similar to a hard rather than a soft
|
||
link). If OLD is undefined, `gtroff' generates a warning of type
|
||
`mac' and ignores the request.
|
||
|
||
-- Request: .chop xx
|
||
Remove (chop) the last character from the macro, string, or
|
||
diversion named XX. This is useful for removing the newline from
|
||
the end of diversions that are to be interpolated as strings.
|
||
This command can be used repeatedly; see *Note Gtroff Internals::,
|
||
for details on nodes inserted additionally by `gtroff'.
|
||
|
||
*Note Identifiers::, and *Note Comments::.
|
||
|
||
|
||
File: groff, Node: Conditionals and Loops, Next: Writing Macros, Prev: Strings, Up: gtroff Reference
|
||
|
||
5.20 Conditionals and Loops
|
||
===========================
|
||
|
||
* Menu:
|
||
|
||
* Operators in Conditionals::
|
||
* if-else::
|
||
* while::
|
||
|
||
|
||
File: groff, Node: Operators in Conditionals, Next: if-else, Prev: Conditionals and Loops, Up: Conditionals and Loops
|
||
|
||
5.20.1 Operators in Conditionals
|
||
--------------------------------
|
||
|
||
In `if' and `while' requests, there are several more operators
|
||
available:
|
||
|
||
`e'
|
||
`o'
|
||
True if the current page is even or odd numbered (respectively).
|
||
|
||
`n'
|
||
True if the document is being processed in nroff mode (i.e., the
|
||
`.nroff' command has been issued).
|
||
|
||
`t'
|
||
True if the document is being processed in troff mode (i.e., the
|
||
`.troff' command has been issued).
|
||
|
||
`v'
|
||
Always false. This condition is for compatibility with other
|
||
`troff' versions only (identifying a `-Tversatec' device).
|
||
|
||
`'XXX'YYY''
|
||
True if the string XXX is equal to the string YYY. Other
|
||
characters can be used in place of the single quotes; the same set
|
||
of delimiters as for the `\D' escape is used (*note Escapes::).
|
||
`gtroff' formats the strings before being compared:
|
||
|
||
|
||
.ie "|"\fR|\fP" \
|
||
true
|
||
.el \
|
||
false
|
||
=> true
|
||
|
||
The resulting motions, glyph sizes, and fonts have to match,(1)
|
||
(*note Operators in Conditionals-Footnote-1::) and not the
|
||
individual motion, size, and font requests. In the previous
|
||
example, `|' and `\fR|\fP' both result in a roman `|' glyph with
|
||
the same point size and at the same location on the page, so the
|
||
strings are equal. If `.ft I' had been added before the `.ie',
|
||
the result would be "false" because (the first) `|' produces an
|
||
italic `|' rather than a roman one.
|
||
|
||
`r XXX'
|
||
True if there is a number register named XXX.
|
||
|
||
`d XXX'
|
||
True if there is a string, macro, diversion, or request named XXX.
|
||
|
||
`m XXX'
|
||
True if there is a color named XXX.
|
||
|
||
`c G'
|
||
True if there is a glyph G available(2) (*note Operators in
|
||
Conditionals-Footnote-2::); G is either an ASCII character or a
|
||
special character (`\(GG' or `\[GGG]'); the condition is also true
|
||
if G has been defined by the `char' request.
|
||
|
||
`F FONT'
|
||
True if a font named FONT exists. FONT is handled as if it was
|
||
opened with the `ft' request (this is, font translation and styles
|
||
are applied), without actually mounting it.
|
||
|
||
This test doesn't load the complete font but only its header to
|
||
verify its validity.
|
||
|
||
`S STYLE'
|
||
True if style STYLE has been registered. Font translation is
|
||
applied.
|
||
|
||
Note that these operators can't be combined with other operators like
|
||
`:' or `&'; only a leading `!' (without whitespace between the
|
||
exclamation mark and the operator) can be used to negate the result.
|
||
|
||
|
||
.nr xxx 1
|
||
.ie !r xxx \
|
||
true
|
||
.el \
|
||
false
|
||
=> false
|
||
|
||
A whitespace after `!' always evaluates to zero (this bizarre
|
||
behaviour is due to compatibility with UNIX `troff').
|
||
|
||
|
||
.nr xxx 1
|
||
.ie ! r xxx \
|
||
true
|
||
.el \
|
||
false
|
||
=> r xxx true
|
||
|
||
It is possible to omit the whitespace before the argument to the
|
||
`r', `d', and `c' operators.
|
||
|
||
*Note Expressions::.
|
||
|
||
|
||
File: groff, Node: Operators in Conditionals-Footnotes, Up: Operators in Conditionals
|
||
|
||
(1) The created output nodes must be identical. *Note Gtroff
|
||
Internals::.
|
||
|
||
(2) The name of this conditional operator is a misnomer since it
|
||
tests names of output glyphs.
|
||
|
||
|
||
File: groff, Node: if-else, Next: while, Prev: Operators in Conditionals, Up: Conditionals and Loops
|
||
|
||
5.20.2 if-else
|
||
--------------
|
||
|
||
`gtroff' has if-then-else constructs like other languages, although the
|
||
formatting can be painful.
|
||
|
||
-- Request: .if expr anything
|
||
Evaluate the expression EXPR, and executes ANYTHING (the remainder
|
||
of the line) if EXPR evaluates to a value greater than zero
|
||
(true). ANYTHING is interpreted as though it was on a line by
|
||
itself (except that leading spaces are swallowed). *Note
|
||
Expressions::, for more info.
|
||
|
||
|
||
.nr xxx 1
|
||
.nr yyy 2
|
||
.if ((\n[xxx] == 1) & (\n[yyy] == 2)) true
|
||
=> true
|
||
|
||
|
||
-- Request: .nop anything
|
||
Executes ANYTHING. This is similar to `.if 1'.
|
||
|
||
-- Request: .ie expr anything
|
||
-- Request: .el anything
|
||
Use the `ie' and `el' requests to write an if-then-else. The
|
||
first request is the `if' part and the latter is the `else' part.
|
||
|
||
|
||
.ie n .ls 2 \" double-spacing in nroff
|
||
.el .ls 1 \" single-spacing in troff
|
||
|
||
|
||
-- Escape: \{
|
||
-- Escape: \}
|
||
In many cases, an if (or if-else) construct needs to execute more
|
||
than one request. This can be done using the `\{' and `\}'
|
||
escapes. The following example shows the possible ways to use
|
||
these escapes (note the position of the opening and closing
|
||
braces).
|
||
|
||
|
||
.ie t \{\
|
||
. ds lq ``
|
||
. ds rq ''
|
||
.\}
|
||
.el \
|
||
.\{\
|
||
. ds lq "
|
||
. ds rq "\}
|
||
|
||
|
||
*Note Expressions::.
|
||
|
||
|
||
File: groff, Node: while, Prev: if-else, Up: Conditionals and Loops
|
||
|
||
5.20.3 while
|
||
------------
|
||
|
||
`gtroff' provides a looping construct using the `while' request, which
|
||
is used much like the `if' (and related) requests.
|
||
|
||
-- Request: .while expr anything
|
||
Evaluate the expression EXPR, and repeatedly execute ANYTHING (the
|
||
remainder of the line) until EXPR evaluates to 0.
|
||
|
||
|
||
.nr a 0 1
|
||
.while (\na < 9) \{\
|
||
\n+a,
|
||
.\}
|
||
\n+a
|
||
=> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
|
||
|
||
Some remarks.
|
||
|
||
* The body of a `while' request is treated like the body of a
|
||
`de' request: `gtroff' temporarily stores it in a macro which
|
||
is deleted after the loop has been exited. It can
|
||
considerably slow down a macro if the body of the `while'
|
||
request (within the macro) is large. Each time the macro is
|
||
executed, the `while' body is parsed and stored again as a
|
||
temporary macro.
|
||
|
||
|
||
.de xxx
|
||
. nr num 10
|
||
. while (\\n[num] > 0) \{\
|
||
. \" many lines of code
|
||
. nr num -1
|
||
. \}
|
||
..
|
||
|
||
The traditional and ofter better solution (UNIX `troff'
|
||
doesn't have the `while' request) is to use a recursive macro
|
||
instead which is parsed only once during its definition.
|
||
|
||
|
||
.de yyy
|
||
. if (\\n[num] > 0) \{\
|
||
. \" many lines of code
|
||
. nr num -1
|
||
. yyy
|
||
. \}
|
||
..
|
||
.
|
||
.de xxx
|
||
. nr num 10
|
||
. yyy
|
||
..
|
||
|
||
Note that the number of available recursion levels is set
|
||
to 1000 (this is a compile-time constant value of `gtroff').
|
||
|
||
* The closing brace of a `while' body must end a line.
|
||
|
||
|
||
.if 1 \{\
|
||
. nr a 0 1
|
||
. while (\n[a] < 10) \{\
|
||
. nop \n+[a]
|
||
.\}\}
|
||
=> unbalanced \{ \}
|
||
|
||
|
||
-- Request: .break
|
||
Break out of a `while' loop. Be sure not to confuse this with the
|
||
`br' request (causing a line break).
|
||
|
||
-- Request: .continue
|
||
Finish the current iteration of a `while' loop, immediately
|
||
restarting the next iteration.
|
||
|
||
*Note Expressions::.
|
||
|
||
|
||
File: groff, Node: Writing Macros, Next: Page Motions, Prev: Conditionals and Loops, Up: gtroff Reference
|
||
|
||
5.21 Writing Macros
|
||
===================
|
||
|
||
A "macro" is a collection of text and embedded commands which can be
|
||
invoked multiple times. Use macros to define common operations.
|
||
|
||
-- Request: .de name [end]
|
||
-- Request: .de1 name [end]
|
||
-- Request: .dei name [end]
|
||
-- Request: .dei1 name [end]
|
||
Define a new macro named NAME. `gtroff' copies subsequent lines
|
||
(starting with the next one) into an internal buffer until it
|
||
encounters the line `..' (two dots). The optional second argument
|
||
to `de' changes this to a macro to `.END'.
|
||
|
||
There can be whitespace after the first dot in the line containing
|
||
the ending token (either `.' or macro `END').
|
||
|
||
Here a small example macro called `P' which causes a break and
|
||
inserts some vertical space. It could be used to separate
|
||
paragraphs.
|
||
|
||
|
||
.de P
|
||
. br
|
||
. sp .8v
|
||
..
|
||
|
||
The following example defines a macro within another. Remember
|
||
that expansion must be protected twice; once for reading the macro
|
||
and once for executing.
|
||
|
||
|
||
\# a dummy macro to avoid a warning
|
||
.de end
|
||
..
|
||
.
|
||
.de foo
|
||
. de bar end
|
||
. nop \f[B]Hallo \\\\$1!\f[]
|
||
. end
|
||
..
|
||
.
|
||
.foo
|
||
.bar Joe
|
||
=> Hallo Joe!
|
||
|
||
Since `\f' has no expansion, it isn't necessary to protect its
|
||
backslash. Had we defined another macro within `bar' which takes
|
||
a parameter, eight backslashes would be necessary before `$1'.
|
||
|
||
The `de1' request turns off compatibility mode while executing the
|
||
macro. On entry, the current compatibility mode is saved and
|
||
restored at exit.
|
||
|
||
|
||
.nr xxx 12345
|
||
.
|
||
.de aa
|
||
The value of xxx is \\n[xxx].
|
||
..
|
||
.de1 bb
|
||
The value of xxx ix \\n[xxx].
|
||
..
|
||
.
|
||
.cp 1
|
||
.
|
||
.aa
|
||
=> warning: number register `[' not defined
|
||
=> The value of xxx is 0xxx].
|
||
.bb
|
||
=> The value of xxx ix 12345.
|
||
|
||
The `dei' request defines a macro indirectly. That is, it expands
|
||
strings whose names are NAME or END before performing the append.
|
||
|
||
This:
|
||
|
||
|
||
.ds xx aa
|
||
.ds yy bb
|
||
.dei xx yy
|
||
|
||
is equivalent to:
|
||
|
||
|
||
.de aa bb
|
||
|
||
The `dei1' request is similar to `dei' but with compatibility mode
|
||
switched off during execution of the defined macro.
|
||
|
||
If compatibility mode is on, `de' (and `dei') behave similar to
|
||
`de1' (and `dei1'): A `compatibility save' token is inserted at
|
||
the beginning, and a `compatibility restore' token at the end, with
|
||
compatibility mode switched on during execution. *Note Gtroff
|
||
Internals::, for more information on switching compatibility mode
|
||
on and off in a single document.
|
||
|
||
Using `trace.tmac', you can trace calls to `de' and `de1'.
|
||
|
||
Note that macro identifiers are shared with identifiers for
|
||
strings and diversions.
|
||
|
||
-- Request: .am name [end]
|
||
-- Request: .am1 name [end]
|
||
-- Request: .ami name [end]
|
||
-- Request: .ami1 name [end]
|
||
Works similarly to `de' except it appends onto the macro named
|
||
NAME. So, to make the previously defined `P' macro actually do
|
||
indented instead of block paragraphs, add the necessary code to the
|
||
existing macro like this:
|
||
|
||
|
||
.am P
|
||
.ti +5n
|
||
..
|
||
|
||
The `am1' request turns off compatibility mode while executing the
|
||
appended macro piece. To be more precise, a "compatibility save"
|
||
input token is inserted at the beginning of the appended code, and
|
||
a "compatibility restore" input token at the end.
|
||
|
||
The `ami' request appends indirectly, meaning that `gtroff'
|
||
expands strings whose names are NAME or END before performing the
|
||
append.
|
||
|
||
The `ami1' request is similar to `ami' but compatibility mode is
|
||
switched off during execution of the defined macro.
|
||
|
||
Using `trace.tmac', you can trace calls to `am' and `am1'.
|
||
|
||
*Note Strings::, for the `als' request to rename a macro.
|
||
|
||
The `de', `am', `di', `da', `ds', and `as' requests (together with
|
||
its variants) only create a new object if the name of the macro,
|
||
diversion or string diversion is currently undefined or if it is
|
||
defined to be a request; normally they modify the value of an existing
|
||
object.
|
||
|
||
-- Request: .return [anything]
|
||
Exit a macro, immediately returning to the caller.
|
||
|
||
If called with an argument, exit twice, namely the current macro
|
||
and the macro one level higher. This is used to define a wrapper
|
||
macro for `return' in `trace.tmac'.
|
||
|
||
* Menu:
|
||
|
||
* Copy-in Mode::
|
||
* Parameters::
|
||
|
||
|
||
File: groff, Node: Copy-in Mode, Next: Parameters, Prev: Writing Macros, Up: Writing Macros
|
||
|
||
5.21.1 Copy-in Mode
|
||
-------------------
|
||
|
||
When `gtroff' reads in the text for a macro, string, or diversion, it
|
||
copies the text (including request lines, but excluding escapes) into
|
||
an internal buffer. Escapes are converted into an internal form,
|
||
except for `\n', `\$', `\*', `\\' and `\<RET>' which are evaluated and
|
||
inserted into the text where the escape was located. This is known as
|
||
"copy-in" mode or "copy" mode.
|
||
|
||
What this means is that you can specify when these escapes are to be
|
||
evaluated (either at copy-in time or at the time of use) by insulating
|
||
the escapes with an extra backslash. Compare this to the `\def' and
|
||
`\edef' commands in TeX.
|
||
|
||
The following example prints the numbers 20 and 10:
|
||
|
||
|
||
.nr x 20
|
||
.de y
|
||
.nr x 10
|
||
\&\nx
|
||
\&\\nx
|
||
..
|
||
.y
|
||
|
||
|
||
File: groff, Node: Parameters, Prev: Copy-in Mode, Up: Writing Macros
|
||
|
||
5.21.2 Parameters
|
||
-----------------
|
||
|
||
The arguments to a macro or string can be examined using a variety of
|
||
escapes.
|
||
|
||
-- Register: \n[.$]
|
||
The number of arguments passed to a macro or string. This is a
|
||
read-only number register.
|
||
|
||
Note that the `shift' request can change its value.
|
||
|
||
Any individual argument can be retrieved with one of the following
|
||
escapes:
|
||
|
||
-- Escape: \$n
|
||
-- Escape: \$(nn
|
||
-- Escape: \$[nnn]
|
||
Retrieve the Nth, NNth or NNNth argument. As usual, the first
|
||
form only accepts a single number (larger than zero), the second a
|
||
two-digit number (larger or equal to 10), and the third any
|
||
positive integer value (larger than zero). Macros and strings can
|
||
have an unlimited number of arguments. Note that due to copy-in
|
||
mode, use two backslashes on these in actual use to prevent
|
||
interpolation until the macro is actually invoked.
|
||
|
||
-- Request: .shift [n]
|
||
Shift the arguments 1 position, or as many positions as specified
|
||
by its argument. After executing this request, argument I becomes
|
||
argument I-N; arguments 1 to N are no longer available. Shifting
|
||
by negative amounts is currently undefined.
|
||
|
||
The register `.$' is adjusted accordingly.
|
||
|
||
-- Escape: \$*
|
||
-- Escape: \$@
|
||
In some cases it is convenient to use all of the arguments at once
|
||
(for example, to pass the arguments along to another macro). The
|
||
`\$*' escape concatenates all the arguments separated by spaces. A
|
||
similar escape is `\$@', which concatenates all the arguments with
|
||
each surrounded by double quotes, and separated by spaces. If not
|
||
in compatibility mode, the input level of double quotes is
|
||
preserved (see *Note Request and Macro Arguments::).
|
||
|
||
-- Escape: \$0
|
||
The name used to invoke the current macro. The `als' request can
|
||
make a macro have more than one name.
|
||
|
||
|
||
.de generic-macro
|
||
. ...
|
||
. if \\n[error] \{\
|
||
. tm \\$0: Houston, we have a problem.
|
||
. return
|
||
. \}
|
||
..
|
||
.
|
||
.als foo generic-macro
|
||
.als bar generic-macro
|
||
|
||
|
||
*Note Request and Macro Arguments::.
|
||
|
||
|
||
File: groff, Node: Page Motions, Next: Drawing Requests, Prev: Writing Macros, Up: gtroff Reference
|
||
|
||
5.22 Page Motions
|
||
=================
|
||
|
||
*Note Manipulating Spacing::, for a discussion of the main request for
|
||
vertical motion, `sp'.
|
||
|
||
-- Request: .mk [reg]
|
||
-- Request: .rt [dist]
|
||
The request `mk' can be used to mark a location on a page, for
|
||
movement to later. This request takes a register name as an
|
||
argument in which to store the current page location. With no
|
||
argument it stores the location in an internal register. The
|
||
results of this can be used later by the `rt' or the `sp' request
|
||
(or the `\v' escape).
|
||
|
||
The `rt' request returns _upwards_ to the location marked with the
|
||
last `mk' request. If used with an argument, return to a position
|
||
which distance from the top of the page is DIST (no previous call
|
||
to `mk' is necessary in this case). Default scaling indicator is
|
||
`v'.
|
||
|
||
Here a primitive solution for a two-column macro.
|
||
|
||
|
||
.nr column-length 1.5i
|
||
.nr column-gap 4m
|
||
.nr bottom-margin 1m
|
||
.
|
||
|
||
|
||
.de 2c
|
||
. br
|
||
. mk
|
||
. ll \\n[column-length]u
|
||
. wh -\\n[bottom-margin]u 2c-trap
|
||
. nr right-side 0
|
||
..
|
||
.
|
||
|
||
|
||
.de 2c-trap
|
||
. ie \\n[right-side] \{\
|
||
. nr right-side 0
|
||
. po -(\\n[column-length]u + \\n[column-gap]u)
|
||
. \" remove trap
|
||
. wh -\\n[bottom-margin]u
|
||
. \}
|
||
. el \{\
|
||
. \" switch to right side
|
||
. nr right-side 1
|
||
. po +(\\n[column-length]u + \\n[column-gap]u)
|
||
. rt
|
||
. \}
|
||
..
|
||
.
|
||
|
||
|
||
.pl 1.5i
|
||
.ll 4i
|
||
This is a small test which shows how the
|
||
rt request works in combination with mk.
|
||
|
||
.2c
|
||
Starting here, text is typeset in two columns.
|
||
Note that this implementation isn't robust
|
||
and thus not suited for a real two-column
|
||
macro.
|
||
|
||
Result:
|
||
|
||
|
||
This is a small test which shows how the
|
||
rt request works in combination with mk.
|
||
|
||
Starting here, isn't robust
|
||
text is typeset and thus not
|
||
in two columns. suited for a
|
||
Note that this real two-column
|
||
implementation macro.
|
||
|
||
|
||
The following escapes give fine control of movements about the page.
|
||
|
||
-- Escape: \v'e'
|
||
Move vertically, usually from the current location on the page (if
|
||
no absolute position operator `|' is used). The argument E
|
||
specifies the distance to move; positive is downwards and negative
|
||
upwards. The default scaling indicator for this escape is `v'.
|
||
Beware, however, that `gtroff' continues text processing at the
|
||
point where the motion ends, so you should always balance motions
|
||
to avoid interference with text processing.
|
||
|
||
`\v' doesn't trigger a trap. This can be quite useful; for
|
||
example, consider a page bottom trap macro which prints a marker
|
||
in the margin to indicate continuation of a footnote or something
|
||
similar.
|
||
|
||
There are some special-case escapes for vertical motion.
|
||
|
||
-- Escape: \r
|
||
Move upwards 1v.
|
||
|
||
-- Escape: \u
|
||
Move upwards .5v.
|
||
|
||
-- Escape: \d
|
||
Move down .5v.
|
||
|
||
-- Escape: \h'e'
|
||
Move horizontally, usually from the current location (if no
|
||
absolute position operator `|' is used). The expression E
|
||
indicates how far to move: positive is rightwards and negative
|
||
leftwards. The default scaling indicator for this escape is `m'.
|
||
|
||
This horizontal space is not discarded at the end of a line. To
|
||
insert discardable space of a certain length use the `ss' request.
|
||
|
||
There are a number of special-case escapes for horizontal motion.
|
||
|
||
-- Escape: \<SP>
|
||
An unbreakable and unpaddable (i.e. not expanded during filling)
|
||
space. (Note: This is a backslash followed by a space.)
|
||
|
||
-- Escape: \~
|
||
An unbreakable space that stretches like a normal inter-word space
|
||
when a line is adjusted.
|
||
|
||
-- Escape: \|
|
||
A 1/6th em space. Ignored for TTY output devices (rounded to
|
||
zero).
|
||
|
||
-- Escape: \^
|
||
A 1/12th em space. Ignored for TTY output devices (rounded to
|
||
zero).
|
||
|
||
-- Escape: \0
|
||
A space the size of a digit.
|
||
|
||
The following string sets the TeX logo:
|
||
|
||
|
||
.ds TeX T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
|
||
|
||
-- Escape: \w'text'
|
||
-- Register: \n[st]
|
||
-- Register: \n[sb]
|
||
-- Register: \n[rst]
|
||
-- Register: \n[rsb]
|
||
-- Register: \n[ct]
|
||
-- Register: \n[ssc]
|
||
-- Register: \n[skw]
|
||
Return the width of the specified TEXT in basic units. This
|
||
allows horizontal movement based on the width of some arbitrary
|
||
text (e.g. given as an argument to a macro).
|
||
|
||
|
||
The length of the string `abc' is \w'abc'u.
|
||
=> The length of the string `abc' is 72u.
|
||
|
||
Font changes may occur in TEXT which don't affect current settings.
|
||
|
||
After use, `\w' sets several registers:
|
||
|
||
`st'
|
||
`sb'
|
||
The highest and lowest point of the baseline, respectively,
|
||
in TEXT.
|
||
|
||
`rst'
|
||
`rsb'
|
||
Like the `st' and `sb' registers, but takes account of the
|
||
heights and depths of glyphs. With other words, this gives
|
||
the highest and lowest point of TEXT. Values below the
|
||
baseline are negative.
|
||
|
||
`ct'
|
||
Defines the kinds of glyphs occurring in TEXT:
|
||
|
||
0
|
||
only short glyphs, no descenders or tall glyphs.
|
||
|
||
1
|
||
at least one descender.
|
||
|
||
2
|
||
at least one tall glyph.
|
||
|
||
3
|
||
at least one each of a descender and a tall glyph.
|
||
|
||
`ssc'
|
||
The amount of horizontal space (possibly negative) that
|
||
should be added to the last glyph before a subscript.
|
||
|
||
`skw'
|
||
How far to right of the center of the last glyph in the `\w'
|
||
argument, the center of an accent from a roman font should be
|
||
placed over that glyph.
|
||
|
||
-- Escape: \kp
|
||
-- Escape: \k(ps
|
||
-- Escape: \k[position]
|
||
Store the current horizontal position in the _input_ line in
|
||
number register with name POSITION (one-character name P,
|
||
two-character name PS). Use this, for example, to return to the
|
||
beginning of a string for highlighting or other decoration.
|
||
|
||
-- Register: \n[hp]
|
||
The current horizontal position at the input line.
|
||
|
||
-- Register: \n[.k]
|
||
A read-only number register containing the current horizontal
|
||
output position (relative to the current indentation).
|
||
|
||
-- Escape: \o'abc'
|
||
Overstrike glyphs A, B, C, ...; the glyphs are centered, and the
|
||
resulting spacing is the largest width of the affected glyphs.
|
||
|
||
-- Escape: \zg
|
||
Print glyph G with zero width, i.e., without spacing. Use this to
|
||
overstrike glyphs left-aligned.
|
||
|
||
-- Escape: \Z'anything'
|
||
Print ANYTHING, then restore the horizontal and vertical position.
|
||
The argument may not contain tabs or leaders.
|
||
|
||
The following is an example of a strike-through macro:
|
||
|
||
|
||
.de ST
|
||
.nr ww \w'\\$1'
|
||
\Z@\v'-.25m'\l'\\n[ww]u'@\\$1
|
||
..
|
||
.
|
||
This is
|
||
.ST "a test"
|
||
an actual emergency!
|
||
|
||
|
||
|
||
|
||
Local Variables:
|
||
coding: iso-8859-1
|
||
End:
|