troff (), short for "typesetter roff", is the major component of a
document processing system developed by
AT&T Corporation for the
Unix operating system. troff and the related
nroff were both developed from the original
roff.
While nroff was intended to produce output on terminals and line printers, troff was intended to produce output on
typesetting systems, specifically the
Graphic Systems CAT that had been introduced in 1972. Both used the same underlying
markup language and a single source file could normally be used by nroff or troff without change.
''troff'' features commands to designate fonts, spacing, paragraphs, margins, footnotes and more. Unlike many other text formatters, ''troff'' can position characters arbitrarily on a page, even overlapping them, and has a fully programmable input language. Separate preprocessors are used for more convenient production of tables, diagrams, and mathematics. Inputs to troff are plain text files that can be created by any text editor.
Extensive
macro packages have been created for various document styles. A typical distribution of troff includes the me macros for formatting research papers, man and mdoc macros for creating Unix
man pages, mv macros for creating mountable
transparencies, and the ms and mm macros for letters, books, technical memoranda, and reports.
History
''troffs origins can be traced to a
text-formatting program called
RUNOFF, which was written by
Jerome H. Saltzer for
MIT's
CTSS operating system in the mid-1960s. (The name allegedly came from the phrase ''I'll run off a document''.)
Bob Morris ported it to the
GE 635 architecture and called the program
roff (an abbreviation of ''runoff''). It was rewritten as
rf for the
PDP-7, and at the same time (1969),
Doug McIlroy 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 Bell Labs patents department. This first formatting program was a reimplementation of McIllroy's ''roff'', written by
Joe F. Ossanna.
When they needed a more flexible language, a new version of ''roff'' called
nroff (''newer "roff"'') was written, which provided the basis for all future versions. When they got a
Graphic Systems CAT phototypesetter, Ossanna modified ''nroff'' to support multiple fonts and
proportional spacing. Dubbed ''troff'', for ''typesetter roff'', its sophisticated output amazed the typesetter manufacturer and confused
peer reviewers, who thought that manuscripts using ''troff'' had been published before.
As such, the name ''troff'' is pronounced rather than *.
With ''troff'' came ''nroff'' (they were actually almost the same program), 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.
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. Ossanna died before this task was completed, so
Brian Kernighan took on the task of rewriting ''troff''. The newly rewritten version produced a device-independent code which was very easy for post-processors to read and translate to the appropriate printer codes. Also, this new version of ''troff'' (often called ditroff for ''device independent troff'') had several extensions, which included drawing functions. The program's documentation defines the output format of ''ditroff'', which is used by many modern ''troff'' clones like GNU
groff.
The ''troff'' collection of tools (including
pre- and post-processors) was eventually called
''Documenter's WorkBench'' (DWB), and was under continuous development in Bell Labs and later at the spin-off
Unix System Laboratories (USL) through 1994. At that time,
SoftQuad took over the maintenance, although Brian Kernighan continued to improve ''troff'' on his own. Thus, there are at least the following variants of the original Bell Labs ''troff'' in use:
* the SoftQuad DWB, based on USL DWB 2.0 from 1994;
* the DWB 3.4 from
Lucent Software Solutions (formerly USL);
* troff,
Plan 9 edition.
While ''troff'' has been supplanted by other programs such as
Interleaf,
FrameMaker, and
LaTeX, it is still being used quite extensively. It remains the default formatter for the
UNIX documentation.
The software was reimplemented as
groff for the
GNU system beginning in 1990. In addition, due to the
open sourcing of
Ancient UNIX systems, as well as modern successors such as the ditroff based open-sourced versions found on
OpenSolaris and
Plan 9 from Bell Labs, there are several versions of AT&T troff (CAT and ditroff-based) available under various open-source licenses.
Macros
Troff includes sets of commands called macros that are run before starting to process the document. These macros include setting up page headers and footers, defining new commands, and generally influencing how the output will be formatted. The
command-line argument for including a macro set is ''-m''name, which has led to many macro sets being known as the base filename with a leading m.
The standard macro sets, with leading m are:
* man for creating
manual pages
* mdoc for semantically-annotated
manual pages, which are better adapted to
mandoc conversion to other formats.
mandoc
is a fusion that supports both sets of manual commands.
[
* me for creating research papers
* mm for creating memorandums
* ms for creating books, reports, and technical documentation
A more comprehensive list of macros available is usually listed in a ]tmac(5)
manual page.
Preprocessors
As ''troff'' evolved, since there are several things which cannot be done easily in ''troff'', several preprocessors were developed. These programs transform certain parts of a document into ''troff'' input, fitting naturally into the use of "pipelines" in Unix — sending the output of one program as the input to another (see pipes and filters). Typically, each preprocessor translates only sections of the input file that are specially marked, passing the rest of the file through unchanged. The embedded preprocessing instructions are written in a simple application-specific programming language, which provides a high degree of power and flexibility.
* eqn preprocessor allows mathematical formulae to be specified in simple and intuitive manner.
* tbl is a preprocessor for formatting tables.
* refer (and the similar program ''bib'') processes citations in a document according to a bibliographic database.
Three preprocessors provide ''troff'' with drawing capabilities by defining a domain-specific language for describing the picture.
* ''pic'' is a procedural programming language providing various drawing functions like ''circle'' and ''box''.
* ''ideal'' allows the drawing of pictures declaratively, deriving the picture by solving a system of simultaneous equations based on vectors and transformations described by its input.
* ''grn'' describes the pictures through graphical elements drawn at absolute coordinates, based on the ''gremlin file format'' defined by an early graphics workstation.
Yet more preprocessors allow the drawing of more complex pictures by generating output for ''pic''.
* ''grap'' draws charts, like scatter plots and histograms.
* ''chem'' draws chemical structure diagrams.
* ''dformat'' draws record-based data structures.
Reimplementations
*groff is GNU Project's free replacement for troff and nroff.
unroff
is an extensible replacement of troff written in Scheme
Heirloom troff
is based on troff from OpenSolaris. It includes support for OpenType fonts, improved support for Type 1 fonts, support for Unicode, a new paragraph formatting algorithm, and a groff compatibility mode.
*mandoc is a specialised compiler/formatter only for the man and mdoc macro packages.
Neatroff
[http://litcave.rudi.ir/neatroff.pdf] is a new troff implementation, including support for advanced font features and bi-directional text.
See also
*Desktop publishing
*DocBook
*groff GNU troff/nroff replacement
*nroff
*SGML
*TeX
*Scribe (markup language)
References
External links
The Text Processor for Typesetters
User manual for the Plan 9 edition of troff
(In PostScript format)
section 3 describes the history of roff, nroff, troff, ditroff, tbl, eqn, and more.
* The original source code of nroff, troff and the preprocessors from AT&T Bell Labs in form of th
Documenter's Workbench (DWB) Release 3.3
(ported to current UNIX systems from http://www2.research.att.com/sw/download)
{{Document markup languages
Category:Free typesetting software
Category:Page description languages
Category:History of software
Category:Plan 9 commands
Category:Unix text processing utilities