
GNU Troff (Groff) — a GNU project.
HE groff (GNU Troff) software is a typesetting package which
reads plain text mixed with formatting commands and produces
formatted output. Groff now supports HTML.
Download
The source code of
the currently released versions of groff is available at the
FFII host (Germany),
GNU host (USA),
and its mirrors. The USA site also contains older, obsolete
versions.
The most actual
pre-release, development version is available from a CVS
repository, see below. Development snapshots (produced twice
a day from the CVS repository) can be downloaded from
here.
For a special
version of groff on the Microsoft operating systems, see
Groff for Windows.
GNU troff is
released under the
GNU Copyright License.
User issues lead:
Ted Harding.
Technical issues lead:
Werner Lemberg.
README
This is the GNU
groff document formatting system. The version number is
given in the file VERSION.
Included in this
release are implementations of troff, pic, eqn, tbl, grn,
refer, −man, −mdoc, and −ms macros, and
drivers for PostScript, TeX dvi format, HP LaserJet 4
printers, Canon CAPSL printers, HTML format (beta status),
and typewriter-like devices. Also included is a modified
version of the Berkeley −me macros, an enhanced
version of the X11 xditview previewer, and an implementation
of the −mm macros contributed by
Jörgen Hägg.
See the file
INSTALL for installation instructions. You will require a
C++ compiler.
The file NEWS
describes recent user-visible changes to groff.
Groff is free
software. See the file COPYING for copying permission.
The file PROBLEMS
describes various problems that have been encountered in
compiling, installing, and running groff.
The most recent
released version of groff is always available by
anonymous ftp.
The current
development version of groff is available from a
CVS repository.
You can access it by first selecting a parent directory in
which to create a working copy (call it, say, ~/cvswork),
and then executing the commands
cd ~/cvswork
CVS_RSH=ssh; export CVS_RSH
cvs -d:ext:anoncvs@savannah.gnu.org/cvsroot/groff -z5 co groff
(Note that you need
an SSH client for security reasons.)
This will create a
subdirectory, ~/cvswork/groff, with a ‘checked
out’ copy of the CVS repository. An update of this
working copy may be achieved, at any later time by invoking
the commands
cd ~/cvswork/groff
CVS_RSH=ssh cvs -z5 update -dP
Please read the CVS
info pages for further details.
Finally, it is
possible to access the CVS with a
web browser.
Alternatively, you
can download snapshots (which are updated twice a day). The
complete groff source as a single file is available
here.
A diff file
relative to groff-〈version〉, the latest official
groff release is available at
http://groff.ffii.org/groff/devel/groff-〈version〉-current.diff.gz
Assuming that
groff-〈version〉.tar.gz and
groff-〈version〉-current.diff.gz are in the same
directory, do the following to apply the diff file:
tar xzvf groff-〈version〉.tar.gz
cd groff-〈version〉
gunzip -c ../groff-〈version〉-current.diff.gz | patch -p1
Depending on your
requirements, you may need at least some of the following
tools to build groff directly from its source:
ghostscript
the psutils package
the netpbm package
texinfo 4.8
bison ≥ 1.875b or byacc
Note that texinfo
and bison or byacc are required only for building from CVS
sources (either a checked out working copy, or a daily
snapshot). They are not required for building from a stable
release tarball. Also note that the version numbers stated
are the minimum supported. No version of texinfo < 4.8
will work, and the original release of bison 1.875 is known
not to work; you may find that bison releases <
1.875 will work, but in case of difficulty, please update to
a later version before posting a bug report.
For all
sources, you need ghostscript for creation of either PDF or
HTML output; the netpbm and psutils packages are required
only for HTML output. If you don’t intend to produce
output in either of these formats, then these packages are
unnecessary.
Please report bugs
using the form in the file BUG-REPORT; the idea of this is
to make sure that FSF has all the information it needs to
fix the bug. At the very least, read the BUG-REPORT form and
make sure that you supply all the information that it asks
for. Even if you are not sure that something is a bug,
report it using BUG-REPORT: this will enable us to determine
whether it really is a bug or not.
Three mailing lists
are available:
You can post mails
directly to the ‘bug-groff’ list, without
subscribing; to post mails to the ‘groff’ list
you must subscribe to it.
To subscribe, send
e-mail to 〈list〉-request@〈domain〉
(example:
groff-request@gnu.org
for the ‘groff’ list) with the word
‘subscribe’ in either the subject or body of the
e-mail (don’t include the quotes). Alternatively, you
may subscribe by visiting the web pages at
http://lists.gnu.org/mailman/listinfo/bug-groff
http://lists.gnu.org/mailman/listinfo/groff
http://lists.gnu.org/mailman/listinfo/groff-commit
Each of these web
pages also provides a link to a browseable archive of
postings to the corresponding mailing list.
GNU groff was
written by James Clark.
It is now maintained by
Ted Harding
and Werner Lemberg.
NEWS VERSION 1.19.2
- Analogously to the .ft and \f pair, two
new requests ‘gcolor’ and ‘fcolor’
(which pair with \m and \M, respectively) have been added to
set the glyph and background colours.
- A new
read-only, string-valued register ‘.sty’ returns
the name of the current style.
- Two new
conditional operators ‘F 〈name〉’
and ‘S 〈name〉’ have been added.
‘F’ is true if a font 〈name〉 exists.
‘S’ is true if a style 〈name〉 has been
registered.
- Cyrillic
characters have been added to the ‘utf8’ and
‘html’ output devices.
pic
- The ‘by’ argument in a
‘for’ loop can now be negative if it is
additive. For the multiplicative case, it must be greater
than zero.
eqn
- The following keywords aren’t new
but haven’t been documented previously:
undef
NAME (to undefine a macro)
copy "FILE" (a synonym for
‘include’)
space n (to modify the vertical spacing before and after
an equation)
- The following
macros aren’t new but haven’t been documented
previously:
Alpha, ...,
Omega (the same as ‘ALPHA’, ...,
‘OMEGA’)
ldots (three dots on the base line)
dollar (a dollar glyph)
- The following
keywords have been extended. Again, this isn’t new but
hasn’t been documented previously:
col n { ... }
lcol n { ... }
rcol n { ... }
ccol n { ... }
pile n { ... }
lpile n { ... }
rpile n { ... }
cpile n { ... } (set vertical spacing between rows
to N)
grohtml
- This device driver has been raised to
beta stage; its set of tags should be stable now.
- New command
line option ‘−s’ to set the base point
size.
- New command
line option ‘−S’ to set the split level
while generating multiple files.
grotty
- Experimental support for zero-width and
double-width characters.
gxditview
- On platforms which have the
X Window System this program is now built and installed
automatically.
xtotroff
- This program to create font definition
files for xditview isn’t new but hasn’t been
installed previously.
groffer
- A security problem (reported as
CAN-2004-0969) has been fixed.
gdiffmk
- A new script contributed by Mike
Bianchi. It compares two groff, nroff, or troff documents
and creates an output with added margin characters (using
‘.mc’) to indicate the differences.
pdfroff
- A new wrapper script contributed by
Keith Marshall to easily create PDF documents with groff.
macro packages
- ms.tmac
- Support for fractional point sizes: A
value for the ‘PS’, ‘VS’,
‘FPS’, and ‘VPS’ register larger
than or equal to 1000 is always divided by 1000. For
example, ‘.nr PS 10250’ sets the
document’s font size to 10.25 points.
- The
‘Ds’ and ‘De’ macros provided in ms
since groff version 1.19 have been removed; the equivalent
‘DS’ and ‘DE’ macros 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.
- The following
registers have been added for improving layout control:
Defines number of lines
following ‘LP’, ‘PP’,
‘QP’, ‘IP’ or ‘XP’ which
must be kept together, before any automatic page break.
Sets number of lines of
following paragraph which must be kept with a heading,
defined by ‘NH’ or ‘SH’, before any
automatic page break.
Sets the first level of heading
(set with ‘NH’) which will keep the same point
size as body text.
Sets the point size increment
for each level of heading (set with ‘NH’), below
the threshold level set by ‘GROWPS’; e.g., if
\n[PS] = 10, \n[GROWPS] = 3 and
\n[PSINCR] = 2.0p, then ‘.NH 1’
will produce 14pt headings, ‘.NH 2’ will
produce 12pt, and all other levels will remain at 10pt
(because \n[PS] = 10).
- The
‘SH’ macro now accepts a numeric argument, to
make heading size match that of ‘NH’ with same
argument value when the
‘GROWPS’/‘PSINCR’ feature is
enabled.
Please refer to
the documentation of the ms package for other, minor
improvements.
- me.tmac
The section type
set with the ‘++’ request is available in the
‘_M’ register. This isn’t new but
hasn’t been documented before.
- www.tmac
The
‘HR’ macro no longer causes an empty line for
non-HTML devices.
A new macro
‘HEAD’ has been added to directly add data to
the <head>...</head> block.
New macros
‘OLS’ and ‘OLE’ to start and end an
ordered list.
New macros
‘DLS’ and ‘DLE’ to start and end a
definition list.
pdfmark
- A new macro package contributed by
Keith Marshall which implements PDF marks. This is in alpha
stage currently.
miscellaneous
- Two new keywords to the DESC file have
been added which are needed for grohtml:
‘image_generator’ and
‘unscaled_charwidths’. The former gives the name
of the program which creates PNG images, and the latter
makes troff always use unscaled character widths.
NEWS VERSION 1.19.1
groff
- The argument of the command line option
‘−I’ is now also passed to troff and
grops, specifying a directory to search for files on the
command line, files named in ‘so’ and
‘psbb’ requests, and files named in
\X’ps: file’ and
\X’ps: import’ escapes.
- If option
‘−V’ is used more than once, the commands
will be both printed on standard error and run.
troff
- Two new read-only, string-valued
registers ‘.m’ and ‘.M’ return the
name of the current drawing and background color,
respectively.
- New read-only
register ‘.U’ which is set to 1 if in safer
mode and set to 0 if in unsafe mode.
- An input
encoding file for latin-5 (a.k.a. ISO 8859-9) has been
added. Example use:
groff
−Tdvi −mlatin5 my_file > my_file.dvi
Note that some
output devices don’t support all glyphs of this
encoding.
- If the
‘return’ request is called with an argument, it
exits twice, namely the current macro and the macro one
level higher. This is used to define a wrapper macro for
‘return’ in trace.tmac.
- For
completeness, two new requests have been added:
‘dei1’ and ‘ami1’. They are
equivalent to ‘dei’ and ‘ami’,
respectively, but the macros are executed with compatibility
mode off (similar to ‘de1’ and
‘am1’).
- New command
line option ‘−I’ to specify a directory
for files (both those on the command line and those named in
‘psbb’ requests). This is also handled by the
groff wrapper program.
- Since version
1.19 you can say ‘.vs 0’. Older versions
emit a warning and convert this to
‘.vs \n[.V]’.
This hasn’t
been documented properly. Note that ‘.vs 0’
isn’t saved in a diversion since it doesn’t
result in vertical motion.
pic
- Dashed and dotted ellipses have been
implemented.
tbl
- New key character ‘x’ to
make tbl call a user-defined macro on a table cell. Patch by
Heinz-Jürgen Oertel.
grap2graph
- A new script contributed by
Eric S. Raymond. It
converts a grap diagram into a cropped image. Since it uses
gs and the PNM library, virtually all graphics formats are
available for output. [Note that the grap program itself
isn’t part of the groff package; see the file
MORE.STUFF how to obtain grap.]
grohtml
- New option ‘−j’ to
emit output splitted into multiple files.
grops
- New command line option
‘−I’ to specify a directory to search for
files on the command line and files named in
\X’ps: import’ and
\X’ps: file’ escapes. This is also handled
by the groff wrapper program.
- The default
value for the ‘broken’ keyword in the DESC file
is now 0.
grolj4
- A new man page
‘lj4_font(5)’ documents how fonts are accessed
with grolj4.
- The built-in
fonts for LJ4 and newer PCL 5 devices have been
completely revised, mainly to access as much glyphs as
possible. The provided metric files should be compatible
with recent PCL 5 printers also. Additionally, font
description files have been added for the Arial and Times
New Roman family, the MS symbol, and Wingdings fonts.
afmtodit
- New option ‘−x’ to
prevent use of built-in Adobe Glyph List.
hpftodit
- Completely revised to handle HP
TrueType metric files also. See the hpftodit manual page for
more details.
groffer
- This version is a rewrite of groffer in
many parts, but it is kept in the old single script
style.
- New options: −−text
(−−mode text), −−tty-viewer,
−−X (−−mode X),
−−X-viewer, −−html
(−−mode html), −−html-view,
−−apropos-data, −−apropos-devel,
−−apropos-progs.
- New
documentation file README_SH.
- Enhancement of
the configuration files and the ‘apropos’
handling.
macro packages
- www.tmac: New macro
‘JOBNAME’ to split output into multiple
files.
- In mdoc,
multiple calls to ‘.Lb’ are now supported in the
LIBRARY section.
NEWS VERSION 1.19
troff
- Input encoding files for latin-9
(a.k.a. latin-0 and ISO 8859-15) and latin-2 (ISO 8859-2)
have been added. Example use:
groff -Tdvi
-mlatin9 my_file > my_file.dvi
You still need
proper fonts with the necessary glyphs. Out of the box, the
groff package supports latin-9 only for −Tps,
−Tdvi, and −Tutf8, and latin-2 only for
−Tdvi and −Tutf8.
- Composite
glyphs are now supported. To do this, a subset of the Adobe
Glyph List (AGL) Algorithm as described in
http://partners.adobe.com/asn/tech/type/unicodegn.jsp
is used to construct glyph names based on Unicode character
codes. The existing groff glyph names are frozen; no glyph
names which can’t be constructed algorithmically will
be added in the future.
The \[...] escape
sequence has been extended to specify multiple glyph
components. Example:
\[A
ho]
this accesses a
glyph with the name ‘u0041_0328’.
Some groff glyphs
which are useful as composites map to ‘wrong’
Unicode code points. For example, ‘ho’ maps to
U+02DB which is a spacing ogonek, whereas a non-spacing
ogonek U+0328 is needed for composite glyphs. The new
request
.composite
from to
will change the
mapping while a composite glyph name is constructed. To make
\[A ho] yield the expected result,
.composite
ho u0328
is needed. [The new
file ‘composite.tmac’ loaded at start-up already
contains proper calls to ‘.composite’.]
Please refer to the
info pages of groff and to the groff_char man page for more
details.
- A new request
‘fschar’ has been added to define font-specific
fallback characters. They are searched after the list of
fonts declared with the ‘fspecial’ request but
before the list of fonts declared with
‘special’.
- Fallback
characters defined with ‘fschar’ can be removed
with the new ‘rfschar’ request.
- A new request
‘schar’ has been added to define global fallback
characters. They are searched after the list of fonts
declared with the ‘special’ request but before
the already mounted special fonts.
- In groff
versions 1.18 and 1.18.1, \D’f ...’
didn’t move the current point horizontally. Despite of
being silly, this change has been reverted for backwards
compatibility. Consequently, the intermediate output command
‘Df’ also moves the position horizontally
again.
\D’f ...’
is deprecated since it depends on the horizontal resolution
of the output device (given with the ‘hor’
parameter in the DESC file). Use the new
\D’Fg ...’ escape instead.
- For
orthogonality, new \D subcommands to change the fill color
are available:
\D’Fr
...’ (rgb)
\D’Fc ...’ (cmy)
\D’Fg ...’ (gray)
\D’Fk ...’ (cmyk)
\D’Fd’ (default color)
The arguments are
the same as with the ‘defcolor’ request. The
current position is not changed.
- The values set
with \H and \S are now available in number registers
\n[.height] and \n[.slant], respectively.
- The
‘.pe’ number register isn’t new but
hasn’t been documented before. It is set to 1
during a page ejection caused by the ‘bp’
request.
- The new glyph
symbol ‘tno’ is a textual variant of
‘no’.
- The new glyph
symbol ‘+e’ represents U+03F5, GREEK LUNATE
EPSILON SYMBOL. (Well, it is not really new since it has
been previously supported by grolj4.) The mapping for both
the dvi and lj4 symbol font has been changed accordingly so
that Greek small letter epsilon, ‘*e’, has the
same glyph shape as with other devices.
grops
- The font ‘freeeuro.pfa’ has
been added to provide various default glyph shapes for
‘eu’ and ‘Eu’.
- It is now
possible to access all glyphs in a Type 1 font, not
only 256 (provided the font file created by afmtodit has
proper entries). grops constructs additional encoding
vectors on the fly if necessary.
- The paper size
is now emitted via the %%DocumentMedia and PageSize
mechanisms so that it is no longer required to tell
‘gv’ or ‘ps2pdf’ about the paper
size. The ‘broken’ flag value 16 omits this
feature (the used PostScript command
‘setpagedevice’ is a LanguageLevel 2
extension). Patch by
Egil Kvaleberg.
- Non-slanted
PostScript metrics have been changed again; they no longer
contain negative left italic correction values. This assures
correct spacing with eqn.
grodvi
grolj4
- The glyphs \[*e] and \[+e] have been
exchanged to be in sync with all other devices.
- The glyph \[~=]
is now called \[|=]. Similar to other devices, \[~=] is now
another name for glyph \[~~].
grotty
- New option ‘−r’. It
is similar to the −i option except it tells grotty to
use the ‘reverse video’ attribute to render
italic fonts.
pic
- New command ‘figname’ to
set the name of a picture’s output box in TeX mode.
refer
- The environment variable
‘REFER’ to override the name of the default
database isn’t new but hasn’t been documented
before.
soelim
- New option ‘−r’ to
avoid emission of ‘.lf’ lines.
- New option
‘−t’ to emit TeX comment lines (giving
current file and the line number) instead of
‘.lf’ lines.
afmtodit
- Unencoded glyphs in an AFM file are
output also (since grops can now emit multiple encoding
vectors for a single font).
- New option
‘−m’ to prevent negative left italic
correction values.
- The mapping and
encoding file together with file ‘DESC’ are now
searched in the default font directory also. Please refer to
the man page of afmtodit for more details.
macro packages
- Larry Kollar
and others made the man macros more customizable.
- New command line options −rFT,
−rIN, and −rSN to set the vertical location of
the footer line, the body text indentation, and the
sub-subheading indentation.
- New command
line option −rHY (similar to the ms macros) to control
hyphenation.
- New macros
‘.PT’ and ‘.BT’ to print the header
and footer strings. They can be replaced with a customized
version in ‘man.local’.
- The string
‘HF’ now holds the typeface to print headings
and subheadings.
- Similar to the
ms macros, the LT register now defaults to LL if not
explicitly specified on the command line.
- troff’s
start-up file ‘troffrc’ now includes
‘papersize.tmac’ to set the paper size with the
command line option ‘-dpaper=<size>’.
Possible values for
‘<size>’ are the same as the predefined
‘papersize’ values in the DESC file (only
lowercase; see the groff_font man page) except a7-d7. An
appended ‘l’ (ell) character denotes landscape
orientation. Examples: ‘a4’, ‘c3l’,
‘letterl’.
Most output drivers
need additional command line switches ‘−p’
and ‘−l’ to override the default paper
length and orientation as set in the driver specific DESC
file.
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
NEWS VERSION 1.18.1
troff
- The non-slanted PostScript font
definition files have been regenerated to include left and
right italic correction values. Applying those to a glyph
(this is, prepending the glyph with ‘\,’ and
appending ‘\/’ to the glyph) sets the glyph
width to the real value given by the horizontal bounding box
values. Without those escapes, the advance width for the
particular glyph is used (which can differ
considerably).
Most users will
neither need this feature nor notice a difference in
existing documents (provided \, and \/ is used as
advertised, namely for italic fonts only); its main goal is
to improve image generation with grohtml.
This is an
experimental change, and feedback is welcome.
tbl
- Added global option
‘nospaces’ to ignore leading and trailing spaces
in data items.
grolbp
- The option −w
(−−linewidth) has been added (similar to other
device drivers) to set the default line width.
grn
- Support for b-spline and Bezier curves
has been added.
groffer
- New option −−shell to
select the shell under wich groffer shall run.
Macro Packages
- The string ‘Am’ (producing
an ampersand) has been added to mdoc for compatibility with
NetBSD.
- ‘.IX’
is now deprecated for mom; you should use ‘.IQ’
(Indent Quit) instead.
- In mom, new
inlines ‘FWD’, ‘BCK’,
‘UP’, and ‘DOWN’ deal with
horizontal and vertical movements; please refer to
contrib/mom/NEWS for more details.
- New macro
ENDNOTES_HDRFTR_CENTER for mom to better control headers.
Miscellaneous
- The ‘papersize’ keyword in
the DESC file now accepts multiple arguments. It is scanned
from left to the right, and the first valid argument is
used. This makes it possible to provide a fallback paper
size.
Example:
papersize
/etc/papersize a4
- A local font
directory has been prepended to the default font path; it
defaults to /usr/local/share/groff/site-font. Similar to the
normal font searching process, files must be placed into a
devXXX subdirectory, e.g.
/usr/local/share/groff/site-font/devps/FOO
for a PostScript
font definition file FOO.
NEWS VERSION 1.18
This section
describes recent user-visible changes in groff. Bug fixes
are not described. There are more details in the man
pages.
Please
read the changes below regarding
grotty, groff’s tty
frontend.
Troff
- Color support has
been added to troff and pic (and to the device drivers
grops, grodvi, grotty, and grohtml -- other preprocessors
and drivers will follow). A new function
‘defcolor’ defines colors; the escape sequence
‘\m’ sets the drawing color, the escape sequence
‘\M’ specifies the background color for closed
objects created with \D’...’ commands.
‘\m[]’ and ‘\M[]’ switch back to the
previous color. ‘\m’ and ‘\M’
correspond to the new troff output command sets starting
with ‘m’ and ‘DF’. The
device-specific default color is called
‘default’ and can’t be
redefined.
Use
the ‘color’ request to toggle the usage of
colors (default is on); the read-only register
‘.color’ is 0 if colors are not active, and
non-zero otherwise.
The
old ‘Df’ output command is mapped onto
‘DFg’; all color output commands don’t
change the current font position (consequently,
‘Df’ doesn’t either).
Outputting
color can be disabled in troff and groff with the
option −c (it is always disabled in compatibility
mode). See the section on grotty for the
GROFF_NO_SGR environment
variable also.
For
defining color components as fractions between 0 and 1,
a new scaling indicator ‘f’ has been defined:
1f = 65536u. For testing whether a color is
defined (with .if and .ie), a new conditional operator
‘m’ is available.
More
details can be found in the groff_diff.7 manual page and in
groff.texinfo.
- Similar
to \m and \M, \f[] switches back to the previous font. \fP
(and \f[P]) is still valid for backwards
compatibility.
- The
new escape \F is the same as ‘.fam’; \F[]
switches back to previous family -- \F[P] selects family
‘P’.
- Two
new glyph symbols are available: ‘eu’ is the
official Euro symbol; ‘Eu’ is a font-specific
glyph variant.
- The
new glyph symbols ‘t+−’,
‘tdi’, and ‘tmu’ are textual
variants of ‘+−’, ‘di’, and
‘mu’, respectively.
- Latin-1
character 181 (PS name ‘mu’, Unicode name U+00B5
MICRO SIGN) has got the troff glyph name
‘mc’.
- −Tutf8
is now available on EBCDIC hosts.
- Strings
can take arguments, using this syntax:
\*[foo arg1 arg2 ...]. Example:
.ds xxx This is a \\$1 test.
\*[xxx nice]
It
is now possible to have whitespace between the first and
second dot (or the name of the ending macro) to end a macro
definition. Example:
.de !
..
.
.de foo
. nop Hello, I’m ‘foo’.
. nop I will now define ‘bar’.
. de bar !
. nop Hello, I’m ‘bar’.
. !
..
‘.fn’
is a new string-valued register which returns the (internal)
real font name; styles and families are properly
concatenated.
Three
new read/write registers ‘seconds’,
‘minutes’, and ‘hours’ contain the
current time, set at start-up of troff. Use the
‘af’ request to control their output
format.
The
new request ‘fchar’ can be used to provide
fallback characters. It has the same syntax as the
‘char’ request; the only difference is that a
character defined with ‘.char’ hides the glyph
with the same name in the current font, whereas a character
defined with ‘.fchar’ is checked only if the
particular glyph isn’t found in the current font. This
test happens before checking special fonts.
In
analogy to the ‘tmc’ request,
‘.writec’ is the same as ‘.write’
but doesn’t emit a final newline.
The
new request ‘itc’ is a variant of
‘.it’ for which a line interrupted with \c
counts as one input line.
Two
new requests ‘ds1’ and ‘as1’ which
are similar to ‘ds’ and ‘as’ but
with compatibility mode disabled during expansion of strings
defined by them.
The
syntax of the ‘substring’ request has been
changed: The first character in a string now has
index 0, the last character has index −1.
Note that this is an incompatible change.
To
emit strings directly to the intermediate output, a new
‘output’ request has been added; it is similar
to ‘\!’ used at the top level.
‘.hpf’
has been extended. It can now handle most TeX hyphenation
pattern files without modification. To do that, the commands
\patterns, \hyphenation, and \endinput are recognized.
Please refer to groff_diff.7 for more
information.
‘hpfcode’
is a new request to provide an input encoding mapping for
the ‘hpf’ request.
The
new request ‘hpfa’ appends hyphenation patterns
(‘hpf’ replaces already existing
patterns).
A
new request ‘ami’ (append macro indirect) has
been added. The first and second parameter of
‘ami’ are taken from string registers rather
than directly; this very special request is needed to make
‘trace.tmac’ independent from the escape
character (which might even be disabled).
The
new request ‘sizes’ is similar to the
‘sizes’ command in DESC files. It expects the
same syntax; the data must be on a single line, and the
final ‘0’ can be omitted.
‘trin’
(translate input) is a new request which is similar to
‘tr’ with the exception that the
‘asciify’ request will use the character code
(if any) before the character translation.
Example:
.trin ax
.di xxx
a
.br
.di
.xxx
.trin aa
.asciify xxx
.xxx
The
result is ‘x a’. Using ‘tr’,
the result would be ‘x x’.
The
request ‘pvs’ isn’t new, but hasn’t
been documented before. It adds vertical space after a line
has been output. This makes it an alternative to the
‘ls’ request to produce double-spaced documents.
The read-only register ‘.pvs’ holds the current
amount of the post-vertical line space.
For
compatibility with plan 9’s troff, multiple
‘pi’ requests are supported:
.pi foo
.pi bar
is
now equivalent to
.pi
foo | bar
A
new escape sequence ‘\O’ is available to disable
and enable glyph output. Please see groff_diff.man and
groff.texinfo for more details.
The
escapes ‘\%’, ‘\&’,
‘\)’, and ‘\:’ no longer cause an
error in \X; they are ignored now. Additionally
‘\ ’ and ‘\~’ are converted to
single space characters.
The
default tab distance in nroff mode is now 0.8i to be
compatible with UNIX troff.
Using
the latin-1 input character 0xAD (soft hyphen) for the
‘shc’ request was a bad idea. Instead, it is now
translated to ‘\%’, and the default hyphenation
character is again \[hy]. Note that the glyph \[shc] is not
useful for typographic purposes; it only exists to have
glyph names for all latin-1 characters.
Macro Packages
- Peter Schaffter
has contributed a new major macro package called
‘mom’, mainly for non-scientific writers, which
takes care of many typographic issues. It comes with a
complete reference (in HTML format) and some examples.
‘mom’ has been designed to format documents for
PostScript output only.
- Two
macros ‘AT’ (AT&T) and ‘UC’
(Univ. of California) have been added to the man macros for
compatibility with older BSD releases.
- Both
the man and mdoc macro packages now use the LL and LT
registers for setting the line and title length,
respectively (similar to those registers in the ms macro
package). If not set on the command line or in a macro file
loaded before the macro package itself, they default to 78n
in nroff mode and 6.5i in troff mode.
- The
‘−xwidth’ specifier in the mdoc macro
package has been removed. Its functionality is now
integrated directly into ‘−width’.
Similarly, ‘−column’ has been extended to
has this functionality also.
- A
new macro ‘Ex’ has been added to the mdoc macro
package to document an exit status.
- ‘troff.man’
has been split. Differences to UNIX troff are now documented
in the new man page ‘groff_diff.man’.
- The
PSPIC macro has been extended to work with DVI output
(‘pspic.tmac’ is now automatically loaded for
−Tdvi), using a dvips special to load the EPS
file.
- The
trace.tmac package now traces calls to ‘am’
also. Additionally, it works in compatibility
mode.
- ‘troff.1’
has been split. Differences to UNIX troff are now documented
in the new man page ‘groff_diff.7’.
- ‘groff_mwww.7’
has been renamed to ‘groff_www.7’. The file
mwww.tmac has been removed.
- ‘groff_ms.7’
has been completely rewritten. It now contains a complete
reference to the ms macros.
- ‘groff_trace.7’
documents the trace macro package.
- Changes
in www.tmac
Note
that HTML support is still in alpha change, so it is rather
likely that both macro names and macro syntax will change.
Some of the macros mentioned below aren’t really new
but haven’t been documented properly
before.
- The following
macros have been renamed:
MAILTO
-> MTO
IMAGE -> IMG
LINE -> HR
- For
consistency, the macros ‘URL’,
‘FTL’, and ‘MTO’ now all have the
address as the first parameter followed by the
description.
- By
default, grohtml generates links to all section headings at
the top of the document. Use the new ‘LK’ macro
to specify a different place.
- For
specifying the background color and a background image, use
the new macros ‘BCL’ and ‘BGIMG’,
respectively.
- The
macro ‘NHR’ has been added; it suppresses the
generation of top and bottom rules which grohtml emits by
default.
- The
new macro ‘HX’ determines the cut-off point for
automatic link generation to headings.
- The
image position parameter names in ‘IMG’ have
been changed to ‘−L’,
‘−R’, and
‘−C’.
- New
macro ‘PIMG’ for inclusion of a PNG image (it
will automatically convert it into an EPS file if not
−Thtml is used).
- New
macro ‘MPIMG’ for putting a PNG image into the
left or right margin (it will automatically convert it into
an EPS file if not −Thtml is used).
- New
macros ‘HnS’, ‘HnE’ to start and end
a header line block.
- New
macro ‘DC’ to produce dropcap
characters.
- New
macro ‘HTL’ to generate an HTML title line only
but no H1 heading.
- New
macros ‘ULS’ and ‘ULE’ to start and
end an unordered list. The new macro ‘LI’
inserts a list item.
groff
Nroff
- Two new command
line options ‘−c’ and
‘−C’; the former passes
‘−c’ to grotty (switching to the old
output scheme); the latter passes ‘−C’ to
groff (enabling compatibility mode).
pic
- New keywords
‘color’ (or ‘colour’,
‘colored’, ‘coloured’),
‘outline’ (or ‘outlined’), and
‘shaded’ are available. ‘outline’
sets the color of the outline, ‘shaded’ the fill
color, and ‘color’ sets both.
Example:
circle
shaded "green" outline "black"
;
Filled
arrows always use the outline color for filling.
Color
support for TeX output is not implemented yet.
Pic2graph
- A new script
contributed by
Eric S. Raymond. It
converts a PIC diagram into a cropped image. Since it uses
gs and the PNM library, virtually all graphics formats are
available for output.
Eqn2graph
- A new script
contributed by
Eric S. Raymond. It
converts an EQN diagram into a cropped image. Since it uses
gs and the PNM library, virtually all graphics formats are
available for output.
Groffer
- A new script
contributed by
Bernd Warken. It
displays groff files and man pages on X and tty, taking care
of most parameters automatically.
Grog
grops
- Color support has
been added.
- A
new option ‘−p’ is available to select the
output paper size. It has the same syntax as the new
‘papersize’ keyword in the DESC file.
Grodvi
- By default, font
sizes are now available in the range 5−10000pt,
similar to PS fonts. If you want the old behaviour (i.e.,
font sizes at discrete values only), insert the following at
the start of your document:
.if ’\*[.T]’dvi’ \
. sizes 500 600 700 800 900 1000 1095 1200 1400 1440 1600 \
1728 1800 2000 2074 2200 2400 2488 2800 3600
A
new font file HBI (using cmssbxo10; this is slanted sans
serif bold extended) has been added.
Two
font families are now available: ‘T’ and
‘H’.
EC
and TC fonts have been integrated. Use
‘−mec’ (calling the file ec.tmac) to
switch to them. Those fonts give a much better coverage of
the symbols defined by groff than the CM fonts.
Note
that ec.tmac must be called before any language-specific
files; it doesn’t take care of hcode
values.
Color
support has been added. For drawing commands, colors are
translated to gray values currently.
Grotty
- Color support has
been added, using the SGR (ISO 6429, sometimes called
ANSI color) escape sequences.
- SGR
escape sequences are now used by default for underlining and
bold printing also, no longer using the backspace character
trick. To revert to the old behaviour, use the
‘−c’ switch.
Note
that you have to use the ‘−R’ option of
‘less’ to make SGR escapes display correctly. On
the other hand, terminal programs and consoles like
‘xterm’ which support SGR sequences natively can
directly display the output of grotty. Consequently, the
options ‘−b’, ‘−B’,
‘−u’, and ‘−U’ work only
in combination with ‘−c’ and are ignored
silently otherwise.
For
the ‘man’ program, it may be necessary to add
the ‘−R’ option of ‘less’ to
the $PAGER environment variable; alternatively, you can use
‘man’s ‘−P’ option (or adapt
its configuration file accordingly). See man(1) for more
details.
- If the environment variable GROFF_NO_SGR is set, SGR
output is disabled, reverting to the old
behaviour.
- A
new special \X’tty: sgr n’ has been
added; if n is non-zero or missing, enable SGR output (the
default).
- If
the new option ‘−i’ is used (only in SGR
mode), grotty sends escape sequences to set the italic font
attribute instead of the underline attribute for italic
fonts. Note that many terminals don’t have support for
this (including xterm).
grohtml
- Color support for
glyphs has been added.
- New
option ‘−h’ to select the style of
headings in HTML output.
- New
option ‘−b’ to set the background colour
to white.
- New
options ‘−a’ and ‘−g’ to
control the number of bits for anti-aliasing used for text
and graphics, respectively. Default value is 4;
0 means no anti-aliasing.
- groff
character/glyph entities now map onto HTML 4 character
entities.
Grolbp
- Valid paper sizes
are now specified as with the new ‘papersize’
keyword in the DESC file. Specifically, the old custom paper
type format ‘custAAAxBBB’ is no longer
supported.
Miscellaneous
- A new manual page
‘ditroff.7’ is available.
- The
groff texinfo manual will now be installed, together with a
bunch of examples.
- A
new keyword ‘papersize’ has been added to the
DESC file format. Its argument is either
- a predefined
paper format (e.g. ‘A4’ or
‘letter’)
- a
file name pointing to a file which must contain a paper size
specification in its first line (e.g.
‘/etc/papersize’)
- a
custom paper size definition like ‘35c,4i’
See
groff_font(5) for more details. This keyword only affects
the physical dimensions of the output medium; grops, grolj4,
and grolbp use it currently. troff completely ignores it.
This
document was produced using
groff-1.19.2.
The image at the top has been contributed by Imogen Mulley
(born 1991), based on a similar picture found on the
GNU server.