Switch branches/tags
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
138 lines (108 sloc) 5.67 KB
README file for the Heirloom Documentation Tools
The Heirloom Documentation Tools provide troff, nroff, and relat-
ed utilities to format manual pages and other documents for out-
put on terminals and printers. They are portable and enhanced
versions of the utilities released by Sun as part of OpenSolaris,
and, for pic, grap, mpm, and some minor parts, by Lucent as part
of Plan 9.
nroff is most prominently used to format Unix manual pages for
viewing them on a terminal. This implementation consumes rela-
tively few system resources and is thus suitable for small system
distributions. It has been enhanced to generate UTF-8 output.
troff generates typesetter output from the same document source
code as nroff. Thus a special use of it is to prepare manual
pages for printing. troff is a general-purpose typesetting pro-
cessor, though. Significant features have been added in this im-
plementation; see the "Nroff/Troff User's Manual", "Font Handling
in Troff with PostScript Devices", and "Justification in Heirloom
Troff" for details. All documents are included in the "doc" sub-
directory of the source code distribution; compiled PDF files can
be downloaded from the project home page.
Currently, troff is almost exclusively targeted at generating
output for PostScript interpreters. Its principal device in-
dependence has been retained, though; the intermediate output
language is largely unchanged. The troff driver for the Autolo-
gic APS-5 is still included. It is untested since it would be
surprising to find a phototypesetter of this type that is still
in use, but serves as an experimentation aid for device indepen-
The source code has been compiled successfully on:
NetBSD 6.1.5, 7, CURRENT
FreeBSD 8.4, 9.3, 10.1, CURRENT
Linux Slackware 14.1, OpenSuse Tumbleweed
Mac OS X
To build and install manually:
- Adjust the installation paths and compiler settings in the file
"mk.config", which is in makefile syntax.
- Execute "make", followed by "make install". "make mrproper"
will destroy all generated files.
troff currently reads several binary files which are built dur-
ing the compilation process. It is thus not possible to cross-
The locale-dependent character input in troff assumes that the C
library represents wchar_t values as Unicode characters. This is
the case on any modern Unix system.
The "pm" utility requires a C++ compiler. If such a compiler is
not available, delete the "mpm" directory from the list of sub-
directories to build in the top-level "makefile". The "pm" util-
ity is rarely used, so it should not be too dramatic if it is
In order to use the utilities for formatting manual pages, note
the following:
- You will normally want to use "nroff -Tlocale". By default,
nroff generates output for a Teletype Model 37 with half-line
capabilities which will lead to weird results with any xterm or
CRT terminal.
- tbl(1) should be used with option -Tlocale when producing input
for nroff and with option -g when producing input for troff.
- "nroff -Tlocale" will generate UTF-8 output if permitted by the
current setting of the LC_CTYPE locale, and the same as "nroff
-Tlp" otherwise.
- Macro names are normally restricted to two characters for com-
patibility with previous versions of nroff. With "nroff -mg",
long macro names and other groff extensions are accepted. You
will normally want to enable this because you are much more
likely to encounter manual pages written with groff in mind
than manual pages that require strict Unix compatibility.
- You need to filter the output of nroff through "col -x".
- You need at least the "an" macro file to format manual pages.
If you also want to use the Berkeley "doc" macros, you also
need "doc*" and "andoc". "nroff -mandoc" will then switch au-
tomatically between the two macro packages.
- Heirloom nroff can optimize line breaking over whole para-
graphs. This results in fewer ugly holes of successive spaces
in the output. To enable it with manual pages, add "-mpadj" to
the command line.
- It is recommended that the "-msafe" macro package is used when
viewing manual pages. It will remove those requests that al-
low to call programs or to write to files. If your man com-
mand runs with privileges, you then also need to ensure that
the "TROFFMACS" environment variable is unset when nroff is ex-
ecuted. Otherwise, a malicious user might replace the "safe"
macro package with his own version.
- Thus a complete pipeline to format manual pages for viewing is:
tbl -Tlocale input.1 | neqn | nroff -Tlocale -mg -msafe \
-mpadj -mandoc | col -x
- If you like italic text to appear underlined and boldfaced text
to appear bold on a CRT or X Window System terminal, also add a
call to the "ul" filter:
tbl -Tlocale input.1 | neqn | nroff -Tlocale -mg -msafe \
-mpadj -mandoc | col -x | ul
- To print manual pages with troff, use
tbl -g input.1 | eqn | troff -mg -msafe -mpadj -mandoc | \
dpost | lp
- You should of course configure your "man" command such that
it executes these pipelines automatically for you. For the
"man" command from the Heirloom Toolchest, suitable entries in
"/etc/default/man" are:
NROFF=/usr/local/ucb/nroff -Tlocale -mg -msafe -mpadj
TROFF=/usr/local/ucb/troff -mg -msafe -mpadj
TBL=/usr/local/ucb/tbl -Tlocale
COL=/usr/local/ucb/col -x | ul