2005-10-20 10:45:19 +00:00
|
|
|
|
This is groff, produced by makeinfo version 4.8 from ./groff.texinfo.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
This manual documents GNU `troff' version 1.19.2.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
Copyright (C) 1994-2000, 2001, 2002, 2003, 2004, 2005 Free Software
|
|
|
|
|
Foundation, Inc.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
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."
|
2005-10-20 10:45:19 +00:00
|
|
|
|
|
2003-05-01 13:09:50 +00:00
|
|
|
|
INFO-DIR-SECTION Typesetting
|
2002-10-11 08:52:17 +00:00
|
|
|
|
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
|
|
|
|
|
*********
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
This manual documents GNU `troff' version 1.19.2.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
Copyright (C) 1994-2000, 2001, 2002, 2003, 2004, 2005 Free Software
|
|
|
|
|
Foundation, Inc.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
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."
|
2005-10-20 10:45:19 +00:00
|
|
|
|
|
2002-10-11 08:52:17 +00:00
|
|
|
|
* 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
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
1 Introduction
|
|
|
|
|
**************
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
GNU `troff' (or `groff') is a system for typesetting documents.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
`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
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
1.1 What Is `groff'?
|
|
|
|
|
====================
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
`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.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
1.2 History
|
|
|
|
|
===========
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
`troff' can trace its origins back to a formatting program called
|
2002-10-11 08:52:17 +00:00
|
|
|
|
`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.
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
The `eqn' preprocessor allowed mathematical formul<75> to be specified
|
2002-10-11 08:52:17 +00:00
|
|
|
|
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
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
1.3 `groff' Capabilities
|
|
|
|
|
========================
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
So what exactly is `groff' capable of doing? `groff' provides a wide
|
|
|
|
|
range of low-level text formatting operations. Using these, it is
|
2002-10-11 08:52:17 +00:00
|
|
|
|
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
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
1.4 Macro Packages
|
|
|
|
|
==================
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
Since `groff' provides such low-level facilities, it can be quite
|
2002-10-11 08:52:17 +00:00
|
|
|
|
difficult to use by itself. However, `groff' provides a "macro"
|
|
|
|
|
facility to specify how certain routine operations (e.g. starting
|
2003-05-01 13:09:50 +00:00
|
|
|
|
paragraphs, printing headers and footers, etc.) should be done. These
|
2002-10-11 08:52:17 +00:00
|
|
|
|
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
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
1.5 Preprocessors
|
|
|
|
|
=================
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
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.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
1.6 Output Devices
|
|
|
|
|
==================
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
`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.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
File: groff, Node: Credits, Prev: Output device intro, Up: Introduction
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
1.7 Credits
|
|
|
|
|
===========
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
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.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
2 Invoking `groff'
|
|
|
|
|
******************
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
This section focuses on how to invoke the `groff' front end. This
|
2002-10-11 08:52:17 +00:00
|
|
|
|
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::
|
2003-05-01 13:09:50 +00:00
|
|
|
|
* Paper Size::
|
2002-10-11 08:52:17 +00:00
|
|
|
|
* Invocation Examples::
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
File: groff, Node: Groff Options, Next: Environment, Prev: Invoking groff, Up: Invoking groff
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
2.1 Options
|
|
|
|
|
===========
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
`groff' normally runs the `gtroff' program and a postprocessor
|
2002-10-11 08:52:17 +00:00
|
|
|
|
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'
|
2005-10-20 10:45:19 +00:00
|
|
|
|
Print the pipeline on `stdout' instead of executing it. If
|
|
|
|
|
specified more than once, print the pipeline on `stderr' and
|
|
|
|
|
execute it.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
`-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
|
2003-05-01 13:09:50 +00:00
|
|
|
|
`gtroff' numeric expression. All register assignments happen
|
2002-10-11 08:52:17 +00:00
|
|
|
|
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'
|
2005-10-20 10:45:19 +00:00
|
|
|
|
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.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
File: groff, Node: Environment, Next: Macro Directories, Prev: Groff Options, Up: Invoking groff
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
2.2 Environment
|
|
|
|
|
===============
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
There are also several environment variables (of the operating system,
|
|
|
|
|
not within `gtroff') which can modify the behavior of `groff'.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
`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
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
2.3 Macro Directories
|
|
|
|
|
=====================
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
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.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
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
|
2003-05-01 13:09:50 +00:00
|
|
|
|
/usr/local/share/groff/1.18.2/tmac
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2003-05-01 13:09:50 +00:00
|
|
|
|
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.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
|
2003-05-01 13:09:50 +00:00
|
|
|
|
File: groff, Node: Font Directories, Next: Paper Size, Prev: Macro Directories, Up: Invoking groff
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
2.4 Font Directories
|
|
|
|
|
====================
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
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'.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
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
|
2003-05-01 13:09:50 +00:00
|
|
|
|
/usr/local/share/groff/1.18.2/font
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2003-05-01 13:09:50 +00:00
|
|
|
|
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.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
|
2003-05-01 13:09:50 +00:00
|
|
|
|
File: groff, Node: Paper Size, Next: Invocation Examples, Prev: Font Directories, Up: Invoking groff
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
2.5 Paper Size
|
|
|
|
|
==============
|
2003-05-01 13:09:50 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
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.
|
2003-05-01 13:09:50 +00:00
|
|
|
|
|
|
|
|
|
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
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
2.6 Invocation Examples
|
|
|
|
|
=======================
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
This section lists several common uses of `groff' and the corresponding
|
|
|
|
|
command lines.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
2.6.1 `grog'
|
|
|
|
|
------------
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
`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'.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
3 Tutorial for Macro Users
|
|
|
|
|
**************************
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
Most users tend to use a macro package to format their papers. This
|
2002-10-11 08:52:17 +00:00
|
|
|
|
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
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
3.1 Basics
|
|
|
|
|
==========
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
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.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
`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
|
2003-05-01 13:09:50 +00:00
|
|
|
|
details on this can be found in *Note Request and Macro Arguments::.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
3.2 Common Features
|
|
|
|
|
===================
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
`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
|
2002-10-11 08:52:17 +00:00
|
|
|
|
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
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
3.2.1 Paragraphs
|
|
|
|
|
----------------
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
One of the most common and most used capability is starting a
|
2002-10-11 08:52:17 +00:00
|
|
|
|
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
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
3.2.2 Sections and Chapters
|
|
|
|
|
---------------------------
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
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.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
File: groff, Node: Headers and Footers, Next: Page Layout Adjustment, Prev: Sections and Chapters, Up: Common Features
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
3.2.3 Headers and Footers
|
|
|
|
|
-------------------------
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
Every macro package gives some way to manipulate the "headers" and
|
2002-10-11 08:52:17 +00:00
|
|
|
|
"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
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
3.2.4 Page Layout
|
|
|
|
|
-----------------
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
Most macro packages let the user specify top and bottom margins and
|
2002-10-11 08:52:17 +00:00
|
|
|
|
other details about the appearance of the printed pages.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
File: groff, Node: Displays, Next: Footnotes and Annotations, Prev: Page Layout Adjustment, Up: Common Features
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
3.2.5 Displays
|
|
|
|
|
--------------
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
"Displays" are sections of text to be set off from the body of the
|
2002-10-11 08:52:17 +00:00
|
|
|
|
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
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
3.2.6 Footnotes and Annotations
|
|
|
|
|
-------------------------------
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
There are a number of requests to save text for later printing.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
"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
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
3.2.7 Table of Contents
|
|
|
|
|
-----------------------
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
"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).
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
File: groff, Node: Indices, Next: Paper Formats, Prev: Table of Contents, Up: Common Features
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
3.2.8 Indices
|
|
|
|
|
-------------
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
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.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
3.2.9 Paper Formats
|
|
|
|
|
-------------------
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
Some macro packages provide stock formats for various kinds of
|
2002-10-11 08:52:17 +00:00
|
|
|
|
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
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
3.2.10 Multiple Columns
|
|
|
|
|
-----------------------
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
Some macro packages (but not `man') provide the ability to have two or
|
|
|
|
|
more columns on a page.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
File: groff, Node: Font and Size Changes, Next: Predefined Strings, Prev: Multiple Columns, Up: Common Features
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
3.2.11 Font and Size Changes
|
|
|
|
|
----------------------------
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
The built-in font and size functions are not always intuitive, so all
|
2002-10-11 08:52:17 +00:00
|
|
|
|
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
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
3.2.12 Predefined Strings
|
|
|
|
|
-------------------------
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
Most macro packages provide various predefined strings for a variety of
|
|
|
|
|
uses; examples are sub- and superscripts, printable dates, quotes and
|
2002-10-11 08:52:17 +00:00
|
|
|
|
various special characters.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
File: groff, Node: Preprocessor Support, Next: Configuration and Customization, Prev: Predefined Strings, Up: Common Features
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
3.2.13 Preprocessor Support
|
|
|
|
|
---------------------------
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
All macro packages provide support for various preprocessors and may
|
2002-10-11 08:52:17 +00:00
|
|
|
|
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
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
3.2.14 Configuration and Customization
|
|
|
|
|
--------------------------------------
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
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.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
File: groff, Node: Macro Packages, Next: gtroff Reference, Prev: Tutorial for Macro Users, Up: Top
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
4 Macro Packages
|
|
|
|
|
****************
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
This chapter documents the main macro packages that come with `groff'.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2003-05-01 13:09:50 +00:00
|
|
|
|
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
|
|
|
|
|
|
2002-10-11 08:52:17 +00:00
|
|
|
|
* Menu:
|
|
|
|
|
|
|
|
|
|
* man::
|
|
|
|
|
* mdoc::
|
|
|
|
|
* ms::
|
|
|
|
|
* me::
|
|
|
|
|
* mm::
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
File: groff, Node: man, Next: mdoc, Prev: Macro Packages, Up: Macro Packages
|
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
4.1 `man'
|
|
|
|
|
=========
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
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.
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
* Menu:
|
|
|
|
|
|
|
|
|
|
* Man options::
|
|
|
|
|
* Man usage::
|
|
|
|
|
* Man font macros::
|
|
|
|
|
* Miscellaneous man macros::
|
|
|
|
|
* Predefined man strings::
|
|
|
|
|
* Preprocessors in man pages::
|
2003-05-01 13:09:50 +00:00
|
|
|
|
* Optional man extensions::
|
2002-10-11 08:52:17 +00:00
|
|
|
|
|
2005-10-20 10:45:19 +00:00
|
|
|
|
|
|
|
|
|
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:
|