groff_mdoc(7) Miscellaneous Information Manual groff_mdoc(7)
Name
groff_mdoc - compose BSD-style manual (man) pages with GNU roff
Synopsis
groff -mdoc file ...
Description
The GNU implementation of the mdoc macro package is part of the groff(1)
document formatting system. mdoc is a structurally- and semantically-
oriented package for writing UNIX manual pages with troff(1). Its
predecessor, the man(7) package, primarily addressed page layout and
presentational concerns, leaving the selection of fonts and other
typesetting details to the individual author. This discretion has led to
divergent styling practices among authors using it.
mdoc organizes its macros into domains. The page structure domain lays
out the page and comprises titles, section headings, displays, and lists.
The general text domain supplies macros to quote or style text, or to
interpolate common noun phrases. The manual domain offers semantic
macros corresponding to the terminology used by practitioners in
discussion of UNIX commands, routines, and files. Manual domain macros
distinguish command-line arguments and options, function names, function
parameters, pathnames, variables, cross references to other manual pages,
and so on. These terms are meaningful both to the author and the readers
of a manual page. It is hoped that the resulting increased consistency
of the man page corpus will enable easier translation to future
documentation tools.
Throughout UNIX documentation, a manual entry is referred to simply as a
"man page", regardless of its length, without gendered implication, and
irrespective of the macro package selected for its composition.
Getting started
The mdoc package attempts to simplify man page authorship and maintenance
without requiring mastery of the roff language. This document presents
only essential facts about roff. For further background, including a
discussion of basic typographical concepts like "breaking", "filling",
and "adjustment", see roff(7). Specialized units of measurement also
arise, namely ens, vees, inches, and points, abbreviated "n", "v", "i",
and "p", respectively; see section Measurements of groff(7).
For brief examples, we employ an arrow notation illustrating a
transformation of input on the left to rendered output on the right.
Consider the .Dq macro, which double-quotes its arguments.
.Dq man page -> "man page"
Usage
An mdoc macro is called by placing the roff control character, `.' (dot)
at the beginning of a line followed by its name. In this document, we
often discuss a macro name with this leading dot to identify it clearly,
but the dot is not part of its name. Space or tab characters can
separate the dot from the macro name. Arguments may follow, separated
from the macro name and each other by spaces, but not tabs. The dot at
the beginning of the line prepares the formatter to expect a macro name.
A dot followed immediately by a newline is ignored; this is called the
empty request. To begin an input line with a dot (or a neutral
apostrophe `'') in some context other than a macro call, precede it with
the `\&' escape sequence; this is a dummy character, not formatted for
output. The backslash is the roff escape character; it can appear
anywhere and it always followed by at least one more character. If
followed by a newline, the backslash escapes the input line break; you
can thus keep input lines to a reasonable length without affecting their
interpretation.
Macros in GNU troff accept an unlimited number of arguments, in contrast
to other troffs that often can't handle more than nine. In limited
cases, arguments may be continued or extended on the next input line
without resort to the `\newline' escape sequence; see subsection Extended
arguments below. Neutral double quotes " can be used to group multiple
words into an argument; see subsection Passing space characters in an
argument below.
Most of mdoc's general text and manual domain macros parse their argument
lists for callable macro names. This means that an argument in the list
matching a general text or manual domain macro name (and defined to be
callable) will be called with the remaining arguments when it is
encountered. In such cases, the argument, although the name of a macro,
is not preceded by a dot. Macro calls can thus be nested. This approach
to macro argument processing is a unique characteristic of the mdoc
package, not a general feature of roff syntax.
For example, the option macro, .Op, may call the flag and argument
macros, .Fl and .Ar, to specify an optional flag with an argument.
.Op Fl s Ar bytes -> [-s bytes]
To prevent a word from being interpreted as a macro name, precede it with
the dummy character.
.Op \&Fl s \&Ar bytes -> [Fl s Ar bytes]
In this document, macros whose argument lists are parsed for callable
arguments are referred to as parsed, and those that may be called from an
argument list are referred to as callable. This usage is a technical
faux pas, since all mdoc macros are in fact interpreted (unless prevented
with `\&'), but as it is cumbersome to constantly refer to macros as
"being able to call other macros", we employ the term "parsed" instead.
Except where explicitly stated, all mdoc macros are parsed and callable.
In the following, we term an mdoc macro that starts a line (with a
leading dot) a command if a distinction from those appearing as arguments
of other macros is necessary.
Passing space characters in an argument
Sometimes it is desirable to give a macro an argument containing one or
more space characters, for instance to specify a particular arrangement
of arguments demanded by the macro. Additionally, quoting multi-word
arguments that are to be treated the same makes mdoc work faster; macros
that parse arguments do so once (at most) for each. For example, the
function command .Fn expects its first argument to be the name of a
function and any remaining arguments to be function parameters. Because
C language standards mandate the inclusion of types and identifiers in
the parameter lists of function definitions, each `Fn' parameter after
the first will be at least two words in length, as in "int foo".
There are a few ways to embed a space in a macro argument. One is to use
the unadjustable space escape sequence \space. The formatter treats this
escape sequence as if it were any other printable character, and will not
break a line there as it would a word space when the output line is full.
This method is useful for macro arguments that are not expected to
straddle an output line boundary, but has a drawback: this space does not
adjust as others do when the output line is formatted. An alternative is
to use the unbreakable space escape sequence, `\~', which cannot break
but does adjust. This groff extension is widely but not perfectly
portable. Another method is to enclose the string in double quotes.
.Fn fetch char\ *str -> fetch(char *str)
.Fn fetch char\~*str -> fetch(char *str)
.Fn fetch "char *str" -> fetch(char *str)
If the `\' before the space in the first example or the double quotes in
the third example were omitted, `.Fn' would see three arguments, and the
result would contain an undesired comma.
.Fn fetch char *str -> fetch(char, *str)
Trailing space characters
It is wise to remove trailing spaces from the ends of input lines.
Should the need arise to put a formattable space at the end of a line, do
so with the unadjustable or unbreakable space escape sequences.
Formatting the backslash glyph
When you need the roff escape character `\' to appear in the output, use
`\e' or `\(rs' instead. Technically, `\e' formats the current escape
character; it works reliably as long as no roff request is used to change
it, which should never happen in man pages. `\(rs' is a groff special
character escape sequence that explicitly formats the "reverse solidus"
(backslash) glyph.
Other possible pitfalls
groff mdoc warns when an empty input line is found outside of a display,
a topic presented in subsection Examples and displays below. Use empty
requests to space the source document for maintenance.
Leading spaces cause a break and are formatted. Avoid this behaviour if
possible. Similarly, do not put more than one space between words in an
ordinary text line; they are not "normalized" to a single space as other
text formatters might do.
Don't try to use the neutral double quote character `"' to represent
itself in an argument. Use the special character escape sequence `\(dq'
to format it. Further, this glyph should not be used for conventional
quotation; mdoc offers several quotation macros. See subsection
Enclosure and quoting macros below.
The formatter attempts to detect the ends of sentences and by default
puts the equivalent of two spaces between sentences on the same output
line; see roff(7). To defeat this detection in a parsed list of macro
arguments, put `\&' before the punctuation mark. Thus,
The
.Ql .
character.
.Pp
The
.Ql \&.
character.
.Pp
.No test .
test
.Pp
.No test.
test
gives
The `'. character
The `.' character.
test. test
test. test
as output. As can be seen in the first and third output lines, mdoc
handles punctuation characters specially in macro arguments. This will
be explained in section General syntax below.
A comment in the source file of a man page can begin with `.\"' at the
start of an input line, `\"' after other input, or `\#' anywhere (the
last is a groff extension); the remainder of any such line is ignored.
A man page template
Use mdoc to construct a man page from the following template.
.\" The following three macro calls are required.
.Dd date
.Dt topic [section-identifier [section-keyword-or-title]]
.Os [package-or-operating system [version-or-release]]
.Sh Name
.Nm topic
.Nd summary-description
.\" The next heading is used in sections 2 and 3.
.\" .Sh Library
.\" The next heading is used in sections 1-4, 6, 8, and 9.
.Sh Synopsis
.Sh Description
.\" Uncomment and populate the following sections as needed.
.\" .Sh "Implementation notes"
.\" The next heading is used in sections 2, 3, and 9.
.\" .Sh "Return values"
.\" The next heading is used in sections 1, 3, 6, and 8.
.\" .Sh Environment
.\" .Sh Files
.\" The next heading is used in sections 1, 6, and 8.
.\" .Sh "Exit status"
.\" .Sh Examples
.\" The next heading is used in sections 1, 4, 6, 8, and 9.
.\" .Sh Diagnostics
.\" .Sh Compatibility
.\" The next heading is used in sections 2, 3, 4, and 9.
.\" .Sh Errors
.\" .Sh "See also"
.\" .Sh Standards
.\" .Sh History
.\" .Sh Authors
.\" .Sh Caveats
.\" .Sh Bugs
The first items in the template are the commands .Dd, .Dt, and .Os. They
identify the page and are discussed below in section Title macros.
The remaining items in the template are section headings (.Sh); of which
Name and Description are mandatory. These headings are discussed in
section Page structure domain, which follows section Manual domain.
Familiarize yourself with manual domain macros first; we use them to
illustrate the use of page structure domain macros.
Conventions
In the descriptions of macros below, square brackets surround optional
arguments. An ellipsis (`...') represents repetition of the preceding
argument zero or more times. Alternative values of a parameter are
separated with `|'. If a mandatory parameter can take one of several
alternative values, use braces to enclose the set, with spaces and `|'
separating the items.
ztar {c | x} [-w [-y | -z]] [-f archive] member ...
An alternative to using braces is to separately synopsize distinct
operation modes, particularly if the list of valid optional arguments is
dependent on the user's choice of a mandatory parameter.
ztar c [-w [-y | -z]] [-f archive] member ...
ztar x [-w [-y | -z]] [-f archive] member ...
Most macros affect subsequent arguments until another macro or a newline
is encountered. For example, `.Li ls Bq Ar file' doesn't produce `ls
[file]', but `ls [file]'. Consequently, a warning message is emitted for
many commands if the first argument is itself a macro, since it cancels
the effect of the preceding one. On rare occasions, you might want to
format a word along with surrounding brackets as a literal.
.Li "ls [file]" -> ls [file] # list any files named e, f, i, or l
Many macros possess an implicit width, used when they are contained in
lists and displays. If you avoid relying on these default measurements,
you escape potential conflicts with site-local modifications of the mdoc
package. Explicit -width and -offset arguments to the .Bl and .Bd macros
are preferable.
Title macros
We present the mandatory title macros first due to their importance even
though they formally belong to the page structure domain macros. They
designate the topic, date of last revision, and the operating system or
software project associated with the page. Call each once at the
beginning of the document. They populate the page headers and footers,
which are in roff parlance termed "titles".
.Dd date
This first macro of any mdoc manual records the last modification
date of the document source. Arguments are concatenated and
separated with space characters.
Historically, date was written in U.S. traditional format, "Month
day , year" where Month is the full month name in English, day an
integer without a leading zero, and year the four-digit year.
This localism is not enforced, however. You may prefer ISO 8601
format, YYYY-MM-DD. A date of the form `$Mdocdate: Month day year
$' is also recognized. It is used in OpenBSD manuals to
automatically insert the current date when committing.
This macro is neither callable nor parsed.
.Dt topic [section-identifier [section-keyword-or-title]]
topic is the subject of the man page. A section-identifier that
begins with an integer in the range 1-9 or is one of the words
`unass', `draft', or `paper' selects a predefined section title.
This use of "section" has nothing to do with the section headings
otherwise discussed in this page; it arises from the
organizational scheme of printed and bound Unix manuals.
In this implementation, the following titles are defined for
integral section numbers.
1
2
3
4
5
6
7
8
9
A section title may be arbitrary or one of the following
abbreviations.
USD
PS1
AMD
SMM
URM
PRM
KM
IND
LOCAL
CON
For compatibility, `MMI' can be used for `IND', and `LOC' for
`LOCAL'. Values from the previous table will specify a new
section title. If section-keyword-or-title designates a computer
architecture recognized by groff mdoc, its value is prepended to
the default section title as specified by the second parameter.
By default, the following architecture keywords are defined.
acorn26, acorn32, algor, alpha, amd64, amiga, amigappc, arc,
arm, arm26, arm32, armish, atari, aviion, beagle, bebox,
cats, cesfic, cobalt, dreamcast, emips, evbarm, evbmips,
evbppc, evbsh3, ews4800mips, hp300, hp700, hpcarm, hpcmips,
hpcsh, hppa, hppa64, i386, ia64, ibmnws, iyonix, landisk,
loongson, luna68k, luna88k, m68k, mac68k, macppc, mips,
mips64, mipsco, mmeye, mvme68k, mvme88k, mvmeppc, netwinder,
news68k, newsmips, next68k, ofppc, palm, pc532, playstation2,
pmax, pmppc, powerpc, prep, rs6000, sandpoint, sbmips, sgi,
sgimips, sh3, shark, socppc, solbourne, sparc, sparc64, sun2,
sun3, tahoe, vax, x68k, x86_64, xen, zaurus
If a section title is not determined after the above matches have
been attempted, section-keyword-or-title is used.
The effects of varying `.Dt' arguments on the page header content
are shown below. Observe how `\&' prevents the numeral 2 from
being used to look up a predefined section title.
.Dt foo 2 -> foo(2) System Calls Manual foo(2)
.Dt foo 2 m68k -> foo(2) m68k System Calls Manual foo(2)
.Dt foo 2 baz -> foo(2) System Calls Manual foo(2)
.Dt foo \&2 baz -> foo(2) baz foo(2)
.Dt foo "" baz -> foo baz foo
.Dt foo M Z80 -> foo(M) Z80 foo(M)
roff strings define section titles and architecture identifiers.
Site-specific additions might be found in the file mdoc.local;
see section Files below.
This macro is neither callable nor parsed.
.Os [operating-system-or-package-name [version-or-release]]
This macro associates the document with a software distribution.
When composing a man page to be included in the base installation
of an operating system, do not provide an argument; mdoc will
supply it. In this implementation, that default is "". It may
be overridden in the site configuration file, mdoc.local; see
section Files below. A portable software package maintaining its
own man pages can supply its name and version number or release
identifier as optional arguments. A version-or-release argument
should use the standard nomenclature for the software specified.
In the following table, recognized version-or-release arguments
for some predefined operating systems are listed. As with .Dt,
site additions might be defined in mdoc.local.
ATT 7th, 7, III, 3, V, V.2, V.3, V.4
BSD 3, 4, 4.1, 4.2, 4.3, 4.3t, 4.3T, 4.3r, 4.3R,
4.4
NetBSD 0.8, 0.8a, 0.9, 0.9a, 1.0, 1.0a, 1.1, 1.2,
1.2a, 1.2b, 1.2c, 1.2d, 1.2e, 1.3, 1.3a,
1.4, 1.4.1, 1.4.2, 1.4.3, 1.5, 1.5.1, 1.5.2,
1.5.3, 1.6, 1.6.1, 1.6.2, 1.6.3, 2.0, 2.0.1,
2.0.2, 2.0.3, 2.1, 3.0, 3.0.1, 3.0.2, 3.0.3,
3.1, 3.1.1, 4.0, 4.0.1, 5.0, 5.0.1, 5.0.2,
5.1, 5.1.2, 5.1.3, 5.1.4, 5.2, 5.2.1, 5.2.2,
6.0, 6.0.1, 6.0.2, 6.0.3, 6.0.4, 6.0.5,
6.0.6, 6.1, 6.1.1, 6.1.2, 6.1.3, 6.1.4,
6.1.5, 7.0, 7.0.1, 7.0.2, 7.1, 7.1.1, 7.1.2,
7.2, 8.0, 8.1
FreeBSD 1.0, 1.1, 1.1.5, 1.1.5.1, 2.0, 2.0.5, 2.1,
2.1.5, 2.1.6, 2.1.7, 2.2, 2.2.1, 2.2.2,
2.2.5, 2.2.6, 2.2.7, 2.2.8, 2.2.9, 3.0, 3.1,
3.2, 3.3, 3.4, 3.5, 4.0, 4.1, 4.1.1, 4.2,
4.3, 4.4, 4.5, 4.6, 4.6.2, 4.7, 4.8, 4.9,
4.10, 4.11, 5.0, 5.1, 5.2, 5.2.1, 5.3, 5.4,
5.5, 6.0, 6.1, 6.2, 6.3, 6.4, 7.0, 7.1, 7.2,
7.3, 7.4, 8.0, 8.1, 8.2, 8.3, 8.4, 9.0, 9.1,
9.2, 9.3, 10.0, 10.1, 10.2, 10.3, 10.4,
11.0, 11.1, 11.2, 11.3, 12.0, 12.1
OpenBSD 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8,
2.9, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7,
3.8, 3.9, 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6,
4.7, 4.8, 4.9, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5,
5.6, 5.7, 5.8, 5.9, 6.0, 6.1, 6.2, 6.3, 6.4,
6.5, 6.6
DragonFly 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8,
1.8.1, 1.9, 1.10, 1.11, 1.12, 1.12.2, 1.13,
2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8,
2.9, 2.9.1, 2.10, 2.10.1, 2.11, 2.12, 2.13,
3.0, 3.0.1, 3.0.2, 3.1, 3.2, 3.2.1, 3.2.2,
3.3, 3.4, 3.4.1, 3.4.2, 3.4.3, 3.5, 3.6,
3.6.1, 3.6.2, 3.7, 3.8, 3.8.1, 3.8.2, 4.0,
4.0.1, 4.0.2, 4.0.3, 4.0.4, 4.0.5, 4.0.6,
4.1, 4.2, 4.2.1, 4.2.2, 4.2.3, 4.2.4, 4.3,
4.4, 4.4.1, 4.4.2, 4.4.3, 4.5, 4.6, 4.6.1,
4.6.2, 4.7, 4.8, 4.8.1, 4.9, 5.0, 5.0.1,
5.0.2, 5.1, 5.2, 5.2.1, 5.2.2, 5.3, 5.4,
5.4.1, 5.4.2, 5.4.3, 5.5, 5.6, 5.6.1, 5.6.2
Darwin 8.0.0, 8.1.0, 8.2.0, 8.3.0, 8.4.0, 8.5.0,
8.6.0, 8.7.0, 8.8.0, 8.9.0, 8.10.0, 8.11.0,
9.0.0, 9.1.0, 9.2.0, 9.3.0, 9.4.0, 9.5.0,
9.6.0, 9.7.0, 9.8.0, 10.0.0, 10.1.0, 10.2.0,
10.3.0, 10.4.0, 10.5.0, 10.6.0, 10.7.0,
10.8.0, 11.0.0, 11.1.0, 11.2.0, 11.3.0,
11.4.0, 11.5.0, 12.0.0, 12.1.0, 12.2.0,
13.0.0, 13.1.0, 13.2.0, 13.3.0, 13.4.0,
14.0.0, 14.1.0, 14.2.0, 14.3.0, 14.4.0,
14.5.0, 15.0.0, 15.1.0, 15.2.0, 15.3.0,
15.4.0, 15.5.0, 15.6.0, 16.0.0, 16.1.0,
16.2.0, 16.3.0, 16.4.0, 16.5.0, 16.6.0,
17.0.0, 17.1.0, 17.2.0, 17.3.0, 17.4.0,
17.5.0, 17.6.0, 17.7.0, 18.0.0, 18.1.0,
18.2.0, 18.3.0, 18.4.0, 18.5.0, 18.6.0,
18.7.0, 19.0.0, 19.1.0, 19.2.0
Historically, the first argument used with .Dt was BSD or ATT.
An unrecognized version argument after ATT is replaced with
"UNIX"; for other predefined abbreviations, it is ignored and a
warning diagnostic emitted. Otherwise, unrecognized arguments
are displayed verbatim in the page footer. For instance, this
page uses ".Os groff 1.23.0" whereas a locally produced page
might employ ".Os "UXYZ CS Department"", omitting versioning.
This macro is neither callable nor parsed.
Introduction to manual and general text domains
What's in a Name...
The manual domain macro names are derived from the day to day informal
language used to describe commands, subroutines and related files.
Slightly different variations of this language are used to describe the
three different aspects of writing a man page. First, there is the
description of mdoc macro command usage. Second is the description of a
UNIX command with mdoc macros, and third, the description of a command to
a user in the verbal sense; that is, discussion of a command in the text
of a man page.
In the first case, troff macros are themselves a type of command; the
general syntax for a troff command is:
.Xx argument1 argument2 ...
`.Xx' is a macro command, and anything following it are arguments to be
processed. In the second case, the description of a UNIX command using
the manual domain macros is a bit more involved; a typical Synopsis
command line might be displayed as:
filter [-flag] <infile> <outfile>
Here, filter is the command name and the bracketed string -flag is a flag
argument designated as optional by the option brackets. In mdoc terms,
<infile> and <outfile> are called meta arguments; in this example, the
user has to replace the meta expressions given in angle brackets with
real file names. Note that in this document meta arguments are used to
describe mdoc commands; in most man pages, meta variables are not
specifically written with angle brackets. The macros that formatted the
above example:
.Nm filter
.Op Fl flag
.Ao Ar infile Ac Ao Ar outfile Ac
In the third case, discussion of commands and command syntax includes
both examples above, but may add more detail. The arguments <infile> and
<outfile> from the example above might be referred to as operands or file
arguments. Some command-line argument lists are quite long:
make [-eiknqrstv] [-D variable] [-d flags] [-f makefile] [-I
directory] [-j max_jobs] [variable=value] [target ...]
Here one might talk about the command make and qualify the argument,
makefile, as an argument to the flag, -f, or discuss the optional file
operand target. In the verbal context, such detail can prevent
confusion, however the mdoc package does not have a macro for an argument
to a flag. Instead the `Ar' argument macro is used for an operand or
file argument like target as well as an argument to a flag like variable.
The make command line was produced from:
.Nm make
.Op Fl eiknqrstv
.Op Fl D Ar variable
.Op Fl d Ar flags
.Op Fl f Ar makefile
.Op Fl I Ar directory
.Op Fl j Ar max_jobs
.Op Ar variable Ns = Ns Ar value
.Bk
.Op Ar target ...
.Ek
The `.Bk' and `.Ek' macros are explained in Keeps.
General Syntax
The manual domain and general text domain macros share a similar syntax
with a few minor deviations; most notably, `.Ar', `.Fl', `.Nm', and `.Pa'
differ only when called without arguments; and `.Fn' and `.Xr' impose an
order on their argument lists. All manual domain macros are capable of
recognizing and properly handling punctuation, provided each punctuation
character is separated by a leading space. If a command is given:
.Ar sptr, ptr),
The result is:
sptr, ptr),
The punctuation is not recognized and all is output in the font used by
`.Ar'. If the punctuation is separated by a leading white space:
.Ar sptr , ptr ) ,
The result is:
sptr, ptr),
The punctuation is now recognized and output in the default font
distinguishing it from the argument strings. To remove the special
meaning from a punctuation character, escape it with `\&'.
The following punctuation characters are recognized by mdoc:
. , : ; (
) [ ] ? !
troff is limited as a macro language, and has difficulty when presented
with a string containing certain mathematical, logical, or quotation
character sequences:
{+,-,/,*,%,<,>,<=,>=,=,==,&,`,',"}
The problem is that troff may assume it is supposed to actually perform
the operation or evaluation suggested by the characters. To prevent the
accidental evaluation of these characters, escape them with `\&'.
Typical syntax is shown in the first manual domain macro displayed below,
`.Ad'.
Manual domain
Addresses
The address macro identifies an address construct.
Usage: .Ad <address> ...
.Ad addr1 addr1
.Ad addr1 . addr1.
.Ad addr1 , file2 addr1, file2
.Ad f1 , f2 , f3 : f1, f2, f3:
.Ad addr ) ) , addr)),
The default width is 12n.
Author Name
The `.An' macro is used to specify the name of the author of the item
being documented, or the name of the author of the actual manual page.
Usage: .An <author name> ...
.An "Joe Author" Joe Author
.An "Joe Author" , Joe Author,
.An "Joe Author" Aq nobody@FreeBSD.org
Joe Author
<nobody@FreeBSD.org>
.An "Joe Author" ) ) , Joe Author)),
The default width is 12n.
In a section titled "Authors", `An' causes a break, allowing each new
name to appear on its own line. If this is not desirable,
.An -nosplit
call will turn this off. To turn splitting back on, write
.An -split
Arguments
The .Ar argument macro may be used whenever an argument is referenced.
If called without arguments, `file ...' is output. This places the
ellipsis in italics, which is ugly and incorrect, and will be noticed on
terminals that underline text instead of using an oblique typeface. We
recommend using `.Ar file No ...' instead.
Usage: .Ar [<argument>] ...
.Ar file ...
.Ar file No ... file ...
.Ar file1 file1
.Ar file1 . file1.
.Ar file1 file2 file1 file2
.Ar f1 f2 f3 : f1 f2 f3:
.Ar file ) ) , file)),
The default width is 12n.
Configuration Declaration (Section Four Only)
The `.Cd' macro is used to demonstrate a config(8) declaration for a
device interface in a section four manual.
Usage: .Cd <argument> ...
.Cd "device le0 at scode?" device le0 at scode?
In a section titled "Synopsis", `Cd' causes a break before and after its
arguments.
The default width is 12n.
Command Modifiers
The command modifier is identical to the `.Fl' (flag) command with the
exception that the `.Cm' macro does not assert a dash in front of every
argument. Traditionally flags are marked by the preceding dash, however,
some commands or subsets of commands do not use them. Command modifiers
may also be specified in conjunction with interactive commands such as
editor commands. See Flags.
The default width is 10n.
Defined Variables
A variable (or constant) that is defined in an include file is specified
by the macro `.Dv'.
Usage: .Dv <defined-variable> ...
.Dv MAXHOSTNAMELEN MAXHOSTNAMELEN
.Dv TIOCGPGRP ) TIOCGPGRP)
The default width is 12n.
Errnos
The `.Er' errno macro specifies the error return value for section 2, 3,
and 9 library routines. The second example below shows `.Er' used with
the `.Bq' general text domain macro, as it would be used in a section two
manual page.
Usage: .Er <errno type> ...
.Er ENOENT ENOENT
.Er ENOENT ) ; ENOENT);
.Bq Er ENOTDIR [ENOTDIR]
The default width is 17n.
Environment Variables
The `.Ev' macro specifies an environment variable.
Usage: .Ev <argument> ...
.Ev DISPLAY DISPLAY
.Ev PATH . PATH.
.Ev PRINTER ) ) , PRINTER)),
The default width is 15n.
Flags
The `.Fl' macro handles command-line flags. It prepends a dash, `-', to
the flag. For interactive command flags that are not prepended with a
dash, the `.Cm' (command modifier) macro is identical, but without the
dash.
Usage: .Fl <argument> ...
.Fl -
.Fl cfv -cfv
.Fl cfv . -cfv.
.Cm cfv . cfv.
.Fl s v t -s -v -t
.Fl - , --,
.Fl xyz ) , -xyz),
.Fl | - |
The `.Fl' macro without any arguments results in a dash representing
stdin/stdout. Note that giving `.Fl' a single dash will result in two
dashes.
The default width is 12n.
Function Declarations
The `.Fd' macro is used in the Synopsis section with section two or three
functions. It is neither callable nor parsed.
Usage: .Fd <argument> ...
.Fd "#include <sys/types.h>" #include <sys/types.h>
In a section titled "Synopsis", `Fd' causes a break if a function has
already been presented and a break has not occurred, leaving vertical
space between one function declaration and the next.
In a section titled "Synopsis", the `In' macro represents the #include
statement, and is the short form of the above example. It specifies the
C header file as being included in a C program. It also causes a break.
While not in the "Synopsis" section, it represents the header file
enclosed in angle brackets.
Usage: .In <header file>
.In stdio.h <stdio.h>
.In stdio.h <stdio.h>
Function Types
This macro is intended for the "Synopsis" section. It may be used
anywhere else in the man page without problems, but its main purpose is
to present the function type (in BSD kernel normal form) for the
"Synopsis" of sections two and three. (It causes a break, allowing the
function name to appear on the next line.)
Usage: .Ft <type> ...
.Ft struct stat struct stat
Functions (Library Routines)
The `.Fn' macro is modeled on ANSI C conventions.
Usage: .Fn <function> [<parameter>] ...
.Fn getchar getchar()
.Fn strlen ) , strlen()),
.Fn align "char *ptr" , align(char *ptr),
Note that any call to another macro signals the end of the `.Fn' call (it
will insert a closing parenthesis at that point).
For functions with many parameters (which is rare), the macros `.Fo'
(function open) and `.Fc' (function close) may be used with `.Fa'
(function argument).
Example:
.Ft int
.Fo res_mkquery
.Fa "int op"
.Fa "char *dname"
.Fa "int class"
.Fa "int type"
.Fa "char *data"
.Fa "int datalen"
.Fa "struct rrec *newrr"
.Fa "char *buf"
.Fa "int buflen"
.Fc
Produces:
int res_mkquery(int op, char *dname, int class, int type,
char *data, int datalen, struct rrec *newrr, char *buf, int buflen)
Typically, in a "Synopsis" section, the function delcaration will begin
the line. If more than one function is presented in the "Synopsis"
section and a function type has not been given, a break will occur,
leaving vertical space between the current and prior function names.
The default width values of `.Fn' and `.Fo' are 12n and 16n,
respectively.
Function Arguments
The `.Fa' macro is used to refer to function arguments (parameters)
outside of the Synopsis section of the manual or inside the Synopsis
section if the enclosure macros `.Fo' and `.Fc' instead of `.Fn' are
used. `.Fa' may also be used to refer to structure members.
Usage: .Fa <function argument> ...
.Fa d_namlen ) ) , d_namlen)),
.Fa iov_len iov_len
The default width is 12n.
Return Values
The `.Rv' macro generates text for use in the Return values section.
Usage: .Rv [-std] [<function> ...]
For example, `.Rv -std atexit' produces:
The atexit() function returns the value 0 if successful; otherwise
the value -1 is returned and the global variable errno is set to
indicate the error.
The -std option is valid only for manual page sections 2 and 3.
Currently, this macro does nothing if used without the -std flag.
Exit Status
The `.Ex' macro generates text for use in the Diagnostics section.
Usage: .Ex [-std] [<utility> ...]
For example, `.Ex -std cat' produces:
The cat utility exits 0 on success, and >0 if an error occurs.
The -std option is valid only for manual page sections 1, 6 and 8.
Currently, this macro does nothing if used without the -std flag.
Interactive Commands
The `.Ic' macro designates an interactive or internal command.
Usage: .Ic <argument> ...
.Ic :wq :wq
.Ic "do while {...}" do while {...}
.Ic setenv , unsetenv setenv, unsetenv
The default width is 12n.
Library Names
The `.Lb' macro is used to specify the library where a particular
function is compiled in.
Usage: .Lb <argument> ...
Available arguments to `.Lb' and their results are:
libarchive Streaming Archive Library (libarchive,
-larchive)
libarm ARM Architecture Library (libarm, -larm)
libarm32 ARM32 Architecture Library (libarm32, -larm32)
libbluetooth Bluetooth Library (libbluetooth, -lbluetooth)
libbsm Basic Security Module Library (libbsm, -lbsm)
libc Standard C Library (libc, -lc)
libc_r Reentrant C Library (libc_r, -lc_r)
libcalendar Calendar Arithmetic Library (libcalendar,
-lcalendar)
libcam Common Access Method User Library (libcam,
-lcam)
libcdk Curses Development Kit Library (libcdk, -lcdk)
libcipher FreeSec Crypt Library (libcipher, -lcipher)
libcompat Compatibility Library (libcompat, -lcompat)
libcrypt Crypt Library (libcrypt, -lcrypt)
libcurses Curses Library (libcurses, -lcurses)
libdevinfo Device and Resource Information Utility Library
(libdevinfo, -ldevinfo)
libdevstat Device Statistics Library (libdevstat,
-ldevstat)
libdisk Interface to Slice and Partition Labels Library
(libdisk, -ldisk)
libdwarf DWARF Access Library (libdwarf, -ldwarf)
libedit Command Line Editor Library (libedit, -ledit)
libelf ELF Access Library (libelf, -lelf)
libevent Event Notification Library (libevent, -levent)
libfetch File Transfer Library (libfetch, -lfetch)
libform Curses Form Library (libform, -lform)
libgeom Userland API Library for Kernel GEOM subsystem
(libgeom, -lgeom)
libgpib library "libgpib"
libi386 i386 Architecture Library (libi386, -li386)
libintl Internationalized Message Handling Library
(libintl, -lintl)
libipsec IPsec Policy Control Library (libipsec, -lipsec)
libipx library "libipx"
libiscsi iSCSI protocol library (libiscsi, -liscsi)
libjail Jail Library (libjail, -ljail)
libkiconv Kernel-side iconv Library (libkiconv, -lkiconv)
libkse N:M Threading Library (libkse, -lkse)
libkvm Kernel Data Access Library (libkvm, -lkvm)
libm Math Library (libm, -lm)
libm68k m68k Architecture Library (libm68k, -lm68k)
libmagic Magic Number Recognition Library (libmagic,
-lmagic)
libmd Message Digest (MD4, MD5, etc.) Support Library
(libmd, -lmd)
libmemstat Kernel Memory Allocator Statistics Library
(libmemstat, -lmemstat)
libmenu Curses Menu Library (libmenu, -lmenu)
libnetgraph Netgraph User Library (libnetgraph, -lnetgraph)
libnetpgp Netpgp Signing, Verification, Encryption and
Decryption (libnetpgp, -lnetpgp)
libossaudio OSS Audio Emulation Library (libossaudio,
-lossaudio)
libpam Pluggable Authentication Module Library (libpam,
-lpam)
libpcap Packet capture Library (libpcap, -lpcap)
libpci PCI Bus Access Library (libpci, -lpci)
libpmc Performance Counters Library (libpmc, -lpmc)
libposix POSIX Compatibility Library (libposix, -lposix)
libprop Property Container Object Library (libprop,
-lprop)
libpthread POSIX Threads Library (libpthread, -lpthread)
libpuffs puffs Convenience Library (libpuffs, -lpuffs)
librefuse File System in Userspace Convenience Library
(librefuse, -lrefuse)
libresolv DNS Resolver Library (libresolv, -lresolv)
librpcsec_gss RPC GSS-API Authentication Library
(librpcsec_gss, -lrpcsec_gss)
librpcsvc RPC Service Library (librpcsvc, -lrpcsvc)
librt POSIX Real-time Library (librt, -lrt)
libsdp Bluetooth Service Discovery Protocol User
Library (libsdp, -lsdp)
libssp Buffer Overflow Protection Library (libssp,
-lssp)
libSystem System Library (libSystem, -lSystem)
libtermcap Termcap Access Library (libtermcap, -ltermcap)
libterminfo Terminal Information Library (libterminfo,
-lterminfo)
libthr 1:1 Threading Library (libthr, -lthr)
libufs UFS File System Access Library (libufs, -lufs)
libugidfw File System Firewall Interface Library
(libugidfw, -lugidfw)
libulog User Login Record Library (libulog, -lulog)
libusbhid USB Human Interface Devices Library (libusbhid,
-lusbhid)
libutil System Utilities Library (libutil, -lutil)
libvgl Video Graphics Library (libvgl, -lvgl)
libx86_64 x86_64 Architecture Library (libx86_64,
-lx86_64)
libz Compression Library (libz, -lz)
Site-specific additions might be found in the file mdoc.local; see
section Files below.
In a section titled "Library", `Lb' causes a break before and after its
arguments.
Literals
The `Li' literal macro may be used for special characters, symbolic
constants, and other syntactical items that should be typed exactly as
displayed.
Usage: .Li <argument> ...
.Li \en \n
.Li M1 M2 M3 ; M1 M2 M3;
.Li cntrl-D ) , cntrl-D),
.Li 1024 ... 1024 ...
The default width is 16n.
Names
The `Nm' macro is used for the document title or page topic. Upon its
first call, it has the peculiarity of remembering its argument, which
should always be the topic of the man page. When subsequently called
without arguments, `Nm' regurgitates this initial name for the sole
purpose of making less work for the author. Use of `Nm' is also
appropriate when presenting a command synopsis for the topic of a man
page in section 1, 6, or 8. Its behavior changes when presented with
arguments of various forms.
.Nm groff_mdoc groff_mdoc
.Nm groff_mdoc
.Nm \-mdoc -mdoc
.Nm foo ) ) , foo)),
.Nm : groff_mdoc:
By default, the topic is set in boldface to reflect its prime importance
in the discussion. Cross references to other man page topics should use
`Xr'; including a second argument for the section number enables them to
be hyperlinked. By default, cross-referenced topics are set in italics
to avoid cluttering the page with boldface.
The default width is 10n.
Options
The `.Op' macro places option brackets around any remaining arguments on
the command line, and places any trailing punctuation outside the
brackets. The macros `.Oo' and `.Oc' (which produce an opening and a
closing option bracket, respectively) may be used across one or more
lines or to specify the exact position of the closing parenthesis.
Usage: .Op [<option>] ...
.Op []
.Op Fl k [-k]
.Op Fl k ) . [-k]).
.Op Fl k Ar kookfile [-k kookfile]
.Op Fl k Ar kookfile , [-k kookfile],
.Op Ar objfil Op Ar corfil [objfil [corfil]]
.Op Fl c Ar objfil Op Ar corfil , [-c objfil
[corfil]],
.Op word1 word2 [word1 word2]
.Li .Op Oo Ao option Ac Oc ... .Op [<option>] ...
Here a typical example of the `.Oo' and `.Oc' macros:
.Oo
.Op Fl k Ar kilobytes
.Op Fl i Ar interval
.Op Fl c Ar count
.Oc
Produces:
[[-k kilobytes] [-i interval] [-c count]]
The default width values of `.Op' and `.Oo' are 14n and 10n,
respectively.
Pathnames
The `.Pa' macro formats file specifications. If called without
arguments, `~' (recognized by many shells) is output, representing the
user's home directory.
Usage: .Pa [<pathname>] ...
.Pa ~
.Pa /usr/share /usr/share
.Pa /tmp/fooXXXXX ) . /tmp/fooXXXXX).
The default width is 32n.
Standards
The `.St' macro replaces standard abbreviations with their formal names.
Usage: .St <abbreviation> ...
Available pairs for "Abbreviation/Formal Name" are:
ANSI/ISO C
-ansiC ANSI X3.159-1989 ("ANSI C89")
-ansiC-89 ANSI X3.159-1989 ("ANSI C89")
-isoC ISO/IEC 9899:1990 ("ISO C90")
-isoC-90 ISO/IEC 9899:1990 ("ISO C90")
-isoC-99 ISO/IEC 9899:1999 ("ISO C99")
-isoC-2011 ISO/IEC 9899:2011 ("ISO C11")
POSIX Part 1: System API
-iso9945-1-90 ISO/IEC 9945-1:1990 ("POSIX.1")
-iso9945-1-96 ISO/IEC 9945-1:1996 ("POSIX.1")
-p1003.1 IEEE Std 1003.1 ("POSIX.1")
-p1003.1-88 IEEE Std 1003.1-1988 ("POSIX.1")
-p1003.1-90 IEEE Std 1003.1-1990 ("POSIX.1")
-p1003.1-96 ISO/IEC 9945-1:1996 ("POSIX.1")
-p1003.1b-93 IEEE Std 1003.1b-1993 ("POSIX.1b")
-p1003.1c-95 IEEE Std 1003.1c-1995 ("POSIX.1c")
-p1003.1g-2000 IEEE Std 1003.1g-2000 ("POSIX.1g")
-p1003.1i-95 IEEE Std 1003.1i-1995 ("POSIX.1i")
-p1003.1-2001 IEEE Std 1003.1-2001 ("POSIX.1")
-p1003.1-2004 IEEE Std 1003.1-2004 ("POSIX.1")
-p1003.1-2008 IEEE Std 1003.1-2008 ("POSIX.1")
POSIX Part 2: Shell and Utilities
-iso9945-2-93 ISO/IEC 9945-2:1993 ("POSIX.2")
-p1003.2 IEEE Std 1003.2 ("POSIX.2")
-p1003.2-92 IEEE Std 1003.2-1992 ("POSIX.2")
-p1003.2a-92 IEEE Std 1003.2a-1992 ("POSIX.2")
X/Open
-susv1 Version 1 of the Single UNIX Specification
("SUSv1")
-susv2 Version 2 of the Single UNIX Specification
("SUSv2")
-susv3 Version 3 of the Single UNIX Specification
("SUSv3")
-susv4 Version 4 of the Single UNIX Specification
("SUSv4")
-svid4 System V Interface Definition, Fourth Edition
("SVID4")
-xbd5 X/Open Base Definitions Issue 5 ("XBD5")
-xcu5 X/Open Commands and Utilities Issue 5 ("XCU5")
-xcurses4.2 X/Open Curses Issue 4, Version 2 ("XCURSES4.2")
-xns5 X/Open Networking Services Issue 5 ("XNS5")
-xns5.2 X/Open Networking Services Issue 5.2 ("XNS5.2")
-xpg3 X/Open Portability Guide Issue 3 ("XPG3")
-xpg4 X/Open Portability Guide Issue 4 ("XPG4")
-xpg4.2 X/Open Portability Guide Issue 4, Version 2
("XPG4.2")
-xsh5 X/Open System Interfaces and Headers Issue 5
("XSH5")
Miscellaneous
-ieee754 IEEE Std 754-1985
-iso8601 ISO 8601
-iso8802-3 ISO 8802-3: 1989
Variable Types
The `.Vt' macro may be used whenever a type is referenced. In a section
titled "Synopsis", `Vt' causes a break (useful for old-style C variable
declarations).
Usage: .Vt <type> ...
.Vt extern char *optarg ; extern char *optarg;
.Vt FILE * FILE *
Variables
Generic variable reference.
Usage: .Va <variable> ...
.Va count count
.Va settimer , settimer,
.Va "int *prt" ) : int *prt):
.Va "char s" ] ) ) , char s])),
The default width is 12n.
Manual Page Cross References
The `.Xr' macro expects the first argument to be a manual page name. The
optional second argument, if a string (defining the manual section), is
put into parentheses.
Usage: .Xr <man page name> [<section>] ...
.Xr mdoc mdoc
.Xr mdoc , mdoc,
.Xr mdoc 7 mdoc(7)
.Xr xinit 1x ; xinit(1x);
The default width is 10n.
General text domain
AT&T Macro
Usage: .At [<version>] ...
.At AT&T UNIX
.At v6 . Version 6 AT&T UNIX.
The following values for <version> are possible:
32v, v1, v2, v3, v4, v5, v6, v7, III, V, V.1, V.2, V.3, V.4
BSD Macro
Usage: .Bx {-alpha | -beta | -devel} ...
.Bx [<version> [<release>]] ...
.Bx BSD
.Bx 4.3 . 4.3BSD.
.Bx -devel -develBSD
<version> will be prepended to the string `BSD'. The following values
for <release> are possible:
Reno, reno, Tahoe, tahoe, Lite, lite, Lite2, lite2
NetBSD Macro
Usage: .Nx [<version>] ...
.Nx NetBSD
.Nx 1.4 . NetBSD 1.4.
For possible values of <version> see the description of the `.Os' command
above in section Title macros.
FreeBSD Macro
Usage: .Fx [<version>] ...
.Fx FreeBSD
.Fx 2.2 . FreeBSD 2.2.
For possible values of <version> see the description of the `.Os' command
above in section Title macros.
DragonFly Macro
Usage: .Dx [<version>] ...
.Dx DragonFly
.Dx 1.4 . DragonFly 1.4.
For possible values of <version> see the description of the `.Os' command
above in section Title macros.
OpenBSD Macro
Usage: .Ox [<version>] ...
.Ox 1.0 OpenBSD 1.0
BSD/OS Macro
Usage: .Bsx [<version>] ...
.Bsx 1.0 BSD/OS 1.0
Unix Macro
Usage: .Ux ...
.Ux UNIX
Emphasis Macro
Text may be stressed or emphasized with the `.Em' macro. The usual font
for emphasis is italic.
Usage: .Em <argument> ...
.Em does not does not
.Em exceed 1024 . exceed 1024.
.Em vide infra ) ) , vide infra)),
The default width is 10n.
Font Mode
The `.Bf' font mode must be ended with the `.Ef' macro (the latter takes
no arguments). Font modes may be nested within other font modes.
`.Bf' has the following syntax:
.Bf <font mode>
<font mode> must be one of the following three types:
Em | -emphasis Same as if the `.Em' macro was used for the
entire block of text.
Li | -literal Same as if the `.Li' macro was used for the
entire block of text.
Sy | -symbolic Same as if the `.Sy' macro was used for the
entire block of text.
Both macros are neither callable nor parsed.
Enclosure and Quoting Macros
The concept of enclosure is similar to quoting. The object being to
enclose one or more strings between a pair of characters like quotes or
parentheses. The terms quoting and enclosure are used interchangeably
throughout this document. Most of the one-line enclosure macros end in
small letter `q' to give a hint of quoting, but there are a few
irregularities. For each enclosure macro, there is a pair of opening and
closing macros that end with the lowercase letters `o' and `c'
respectively.
Quote Open Close Function Result
.Aq .Ao .Ac Angle Bracket Enclosure <string>
.Bq .Bo .Bc Bracket Enclosure [string]
.Brq .Bro .Brc Brace Enclosure {string}
.Dq .Do .Dc Double Quote "string"
.Eq .Eo .Ec Enclose String (in XY) XstringY
.Pq .Po .Pc Parenthesis Enclosure (string)
.Ql Quoted Literal "string" or string
.Qq .Qo .Qc Straight Double Quote "string"
.Sq .So .Sc Single Quote `string'
All macros ending with `q' and `o' have a default width value of 12n.
.Eo, .Ec These macros expect the first argument to be the opening
and closing strings, respectively.
.Es, .En To work around the nine-argument limit in the original
troff program, mdoc supports two other macros that are now
obsolete. `.Es' uses its first and second parameters as
opening and closing marks which are then used to enclose
the arguments of `.En'. The default width value is 12n
for both macros.
.Eq The first and second arguments of this macro are the
opening and closing strings respectively, followed by the
arguments to be enclosed.
.Ql The quoted literal macro behaves differently in troff and
nroff modes. If formatted with nroff(1), a quoted literal
is always quoted. If formatted with troff, an item is
only quoted if the width of the item is less than three
constant-width characters. This is to make short strings
more visible where the font change to literal (constant-
width) is less noticeable.
The default width is 16n.
.Pf The prefix macro suppresses the whitespace between its
first and second argument:
.Pf ( Fa name2 (name2
The default width is 12n.
The `.Ns' macro (see below) performs the analogous suffix
function.
.Ap The `.Ap' macro inserts an apostrophe and exits any
special text modes, continuing in `.No' mode.
Examples of quoting:
.Aq <>
.Aq Pa ctype.h ) , <ctype.h>),
.Bq []
.Bq Em Greek , French . [Greek, French].
.Dq ""
.Dq string abc . "string abc".
.Dq '\[ha][A-Z]' "'^[A-Z]'"
.Ql man mdoc `man mdoc'
.Qq ""
.Qq string ) , "string"),
.Qq string Ns ), "string),"
.Sq `'
.Sq string `string'
.Em or Ap ing or'ing
For a good example of nested enclosure macros, see the `.Op' option
macro. It was created from the same underlying enclosure macros as those
presented in the list above. The `.Xo' and `.Xc' extended argument list
macros are discussed below.
Normal text macro
`No' formats subsequent argument(s) normally, ending the effect of `Em'
and similar. Parsing is not suppressed, so you must prefix words like
`No' with `\&' to avoid their interpretation as mdoc macros.
Usage: .No argument ...
.Em Use caution No here . -> Use caution here.
.Em No dogs allowed . -> No dogs allowed.
.Em \&No dogs allowed . -> No dogs allowed.
The default width is 12n.
No-Space Macro
The `.Ns' macro suppresses insertion of a space between the current
position and its first parameter. For example, it is useful for old
style argument lists where there is no space between the flag and
argument:
Usage: ... <argument> Ns [<argument>] ...
.Ns <argument> ...
.Op Fl I Ns Ar directory [-Idirectory]
Note: The `.Ns' macro always invokes the `.No' macro after eliminating
the space unless another macro name follows it. If used as a command
(i.e., the second form above in the `Usage' line), `.Ns' is identical to
`.No'.
(Sub)section cross references
Use the `.Sx' macro to cite a (sub)section heading within the given
document.
Usage: .Sx <section-reference> ...
.Sx Files -> Files
The default width is 16n.
Symbolics
The symbolic emphasis macro is generally a boldface macro in either the
symbolic sense or the traditional English usage.
Usage: .Sy <symbol> ...
.Sy Important Notice -> Important Notice
The default width is 6n.
Mathematical Symbols
Use this macro for mathematical symbols and similar things.
Usage: .Ms <math symbol> ...
.Ms sigma -> sigma
The default width is 6n.
References and Citations
The following macros make a modest attempt to handle references. At
best, the macros make it convenient to manually drop in a subset of
refer(1) style references.
.Rs Reference start (does not take arguments). In a section
titled "See also", it causes a break and begins collection
of reference information until the reference end macro is
read.
.Re Reference end (does not take arguments). The reference is
printed.
.%A Reference author name; one name per invocation.
.%B Book title.
.%C City/place.
.%D Date.
.%I Issuer/publisher name.
.%J Journal name.
.%N Issue number.
.%O Optional information.
.%P Page number.
.%Q Corporate or foreign author.
.%R Report name.
.%T Title of article.
.%U Optional hypertext reference.
.%V Volume.
Macros beginning with `%' are not callable but accept multiple arguments
in the usual way. Only the `.Tn' macro is handled properly as a
parameter; other macros will cause strange output. `.%B' and `.%T' can
be used outside of the `.Rs/.Re' environment.
Example:
.Rs
.%A "Matthew Bar"
.%A "John Foo"
.%T "Implementation Notes on foobar(1)"
.%R "Technical Report ABC-DE-12-345"
.%Q "Drofnats College"
.%C "Nowhere"
.%D "April 1991"
.Re
produces
Matthew Bar and John Foo, Implementation Notes on foobar(1),
Technical Report ABC-DE-12-345, Drofnats College, Nowhere, April
1991.
Trade Names or Acronyms
The trade name macro prints its arguments at a smaller type size. It is
intended to imitate a small caps fonts for fully capitalized acronyms.
Usage: .Tn <symbol> ...
.Tn DEC DEC
.Tn ASCII ASCII
The default width is 10n.
Extended Arguments
The .Xo and .Xc macros allow one to extend an argument list on a macro
boundary for the `.It' macro (see below). Note that .Xo and .Xc are
implemented similarly to all other macros opening and closing an
enclosure (without inserting characters, of course). This means that the
following is true for those macros also.
Here is an example of `.Xo' using the space mode macro to turn spacing
off:
.Bd -literal -offset indent
.Sm off
.It Xo Sy I Ar operation
.No \en Ar count No \en
.Xc
.Sm on
.Ed
produces
Ioperation\ncount\n
Another one:
.Bd -literal -offset indent
.Sm off
.It Cm S No / Ar old_pattern Xo
.No / Ar new_pattern
.No / Op Cm g
.Xc
.Sm on
.Ed
produces
S/old_pattern/new_pattern/[g]
Another example of `.Xo' and enclosure macros: Test the value of a
variable.
.Bd -literal -offset indent
.It Xo
.Ic .ifndef
.Oo \&! Oc Ns Ar variable Oo
.Ar operator variable No ...
.Oc Xc
.Ed
produces
.ifndef [!]variable [operator variable ...]
Page structure domain
Section headings
The following `.Sh' section heading macros are required in every man
page. The remaining section headings are recommended at the discretion
of the author writing the manual page. The `.Sh' macro is parsed but not
generally callable. It can be used as an argument in a call to `.Sh'
only; it then reactivates the default font for `.Sh'.
The default width is 8n.
.Sh Name The `.Sh Name' macro is mandatory. If not
specified, headers, footers, and page layout
defaults will not be set and things will be rather
unpleasant. The Name section consists of at least
three items. The first is the `.Nm' name macro
naming the subject of the man page. The second is
the name description macro, `.Nd', which separates
the subject name from the third item, which is the
description. The description should be the most
terse and lucid possible, as the space available
is small.
`.Nd' first prints `-', then all its arguments.
.Sh Library This section is for section two and three function
calls. It should consist of a single `.Lb' macro
call; see Library Names.
.Sh Synopsis The Synopsis section describes the typical usage
of the subject of a man page. The macros required
are either `.Nm', `.Cd', or `.Fn' (and possibly
`.Fo', `.Fc', `.Fd', and `.Ft'). The function
name macro `.Fn' is required for manual page
sections 2 and 3; the command and general name
macro `.Nm' is required for sections 1, 5, 6, 7,
and 8. Section 4 manuals require a `.Nm', `.Fd'
or a `.Cd' configuration device usage macro.
Several other macros may be necessary to produce
the synopsis line as shown below:
cat [-benstuv] [-] file ...
The following macros were used:
.Nm cat
.Op Fl benstuv
.Op Fl
.Ar file No ...
.Sh Description In most cases the first text in the Description
section is a brief paragraph on the command,
function or file, followed by a lexical list of
options and respective explanations. To create
such a list, the `.Bl' (begin list), `.It' (list
item) and `.El' (end list) macros are used (see
Lists and Columns below).
.Sh Implementation notes
Implementation specific information should be
placed here.
.Sh Return values Sections 2, 3 and 9 function return values should
go here. The `.Rv' macro may be used to generate
text for use in the Return values section for most
section 2 and 3 library functions; see Return
Values.
The following `.Sh' section headings are part of the preferred manual
page layout and must be used appropriately to maintain consistency. They
are listed in the order in which they would be used.
.Sh Environment The Environment section should reveal any related
environment variables and clues to their behavior
and/or usage.
.Sh Files Files which are used or created by the man page
subject should be listed via the `.Pa' macro in
the Files section.
.Sh Examples There are several ways to create examples. See
subsection Examples and Displays below for
details.
.Sh Diagnostics Diagnostic messages from a command should be
placed in this section. The `.Ex' macro may be
used to generate text for use in the Diagnostics
section for most section 1, 6 and 8 commands; see
Exit Status.
.Sh Compatibility Known compatibility issues (e.g. deprecated
options or parameters) should be listed here.
.Sh Errors Specific error handling, especially from library
functions (man page sections 2, 3, and 9) should
go here. The `.Er' macro is used to specify an
error (errno).
.Sh See also References to other material on the man page topic
and cross references to other relevant man pages
should be placed in the See also section. Cross
references are specified using the `.Xr' macro.
Currently refer(1) style references are not
accommodated.
It is recommended that the cross references be
sorted by section number, then alphabetically by
name within each section, then separated by
commas. Example:
ls(1), ps(1), group(5), passwd(5)
.Sh Standards If the command, library function, or file adheres
to a specific implementation such as IEEE Std
1003.2 ("POSIX.2") or ANSI X3.159-1989
("ANSI C89") this should be noted here. If the
command does not adhere to any standard, its
history should be noted in the History section.
.Sh History Any command which does not adhere to any specific
standards should be outlined historically in this
section.
.Sh Authors Credits should be placed here. Use the `.An'
macro for names and the `.Aq' macro for email
addresses within optional contact information.
Explicitly indicate whether the person authored
the initial manual page or the software or
whatever the person is being credited for.
.Sh Bugs Blatant problems with the topic go here.
User-specified `.Sh' sections may be added; for example, this section was
set with:
.Sh "Page structure domain"
Subsection headings
Subsection headings have exactly the same syntax as section headings:
`.Ss' is parsed but not generally callable. It can be used as an
argument in a call to `.Ss' only; it then reactivates the default font
for `.Ss'.
The default width is 8n.
Paragraphs and Line Spacing
.Pp The `.Pp' paragraph command may be used to specify a line space
where necessary. The macro is not necessary after a `.Sh' or
`.Ss' macro or before a `.Bl' or `.Bd' macro (which both assert
a vertical distance unless the -compact flag is given).
The macro is neither callable nor parsed and takes no arguments;
an alternative name is `.Lp'.
Keeps
The only keep that is implemented at this time is for words. The macros
are `.Bk' (begin keep) and `.Ek' (end keep). The only option that `.Bk'
currently accepts is -words (also the default); this prevents breaks in
the middle of options. In the example for make command-line arguments
(see What's in a Name), the keep prevents nroff from placing the flag and
the argument on separate lines.
Neither macro is callable or parsed.
More work needs to be done on the keep macros; specifically, a -line
option should be added.
Examples and Displays
There are seven types of displays.
.D1 (This is D-one.) Display one line of indented text. This macro
is parsed but not callable.
-ldghfstru
The above was produced by: .D1 Fl ldghfstru.
.Dl (This is D-ell.) Display one line of indented literal text.
The `.Dl' example macro has been used throughout this file. It
allows the indentation (display) of one line of text. Its
default font is set to constant width (literal). `.Dl' is
parsed but not callable.
% ls -ldg /usr/local/bin
The above was produced by: .Dl % ls \-ldg /usr/local/bin.
.Bd Begin display. The `.Bd' display must be ended with the `.Ed'
macro. It has the following syntax:
.Bd {-literal | -filled | -unfilled | -ragged | -centered}
[-offset <string>] [-file <file name>] [-compact]
-ragged Fill, but do not adjust the right
margin (only left-justify).
-centered Center lines between the current
left and right margin. Note that
each single line is centered.
-unfilled Do not fill; break lines where
their input lines are broken.
This can produce overlong lines
without warning messages.
-filled Display a filled block. The block
of text is formatted (i.e., the
text is justified on both the left
and right side).
-literal Display block with literal font
(usually fixed-width). Useful for
source code or simple tabbed or
spaced text.
-file <file name> The file whose name follows the
-file flag is read and displayed
before any data enclosed with
`.Bd' and `.Ed', using the
selected display type. Any
troff/mdoc commands in the file
will be processed.
-offset <string> If -offset is specified with one
of the following strings, the
string is interpreted to indicate
the level of indentation for the
forthcoming block of text:
left Align block on the
current left
margin; this is
the default mode
of `.Bd'.
center Supposedly center
the block. At
this time
unfortunately, the
block merely gets
left aligned about
an imaginary
center margin.
indent Indent by one
default indent
value or tab. The
default indent
value is also used
for the `.D1' and
`.Dl' macros, so
one is guaranteed
the two types of
displays will line
up. The
indentation value
is normally set
to 6n or about two
thirds of an inch
(six constant
width characters).
indent-two Indent two times
the default indent
value.
right This left aligns
the block about
two inches from
the right side of
the page. This
macro needs work
and perhaps may
never do the right
thing within
troff.
If <string> is a valid numeric
expression instead (with a scaling
indicator other than `u'), use
that value for indentation. The
most useful scaling indicators are
`m' and `n', specifying the so-
called Em and En square. This is
approximately the width of the
letters `m' and `n' respectively
of the current font (for nroff
output, both scaling indicators
give the same values). If
<string> isn't a numeric
expression, it is tested whether
it is an mdoc macro name, and the
default offset value associated
with this macro is used. Finally,
if all tests fail, the width of
<string> (typeset with a fixed-
width font) is taken as the
offset.
-compact Suppress insertion of vertical
space before begin of display.
.Ed End display (takes no arguments).
Lists and Columns
There are several types of lists which may be initiated with the `.Bl'
begin-list macro. Items within the list are specified with the `.It'
item macro, and each list must end with the `.El' macro. Lists may be
nested within themselves and within displays. The use of columns inside
of lists or lists inside of columns is untested.
In addition, several list attributes may be specified such as the width
of a tag, the list offset, and compactness (blank lines between items
allowed or disallowed). Most of this document has been formatted with a
tag style list (-tag).
It has the following syntax forms:
.Bl {-hang | -ohang | -tag | -diag | -inset} [-width <string>]
[-offset <string>] [-compact]
.Bl -column [-offset <string>] <string1> <string2> ...
.Bl {-item | -enum [-nested] | -bullet | -hyphen | -dash} [-offset
<string>] [-compact]
And now a detailed description of the list types.
-bullet A bullet list.
.Bl -bullet -offset indent -compact
.It
Bullet one goes here.
.It
Bullet two here.
.El
Produces:
o Bullet one goes here.
o Bullet two here.
-dash (or -hyphen)
A dash list.
.Bl -dash -offset indent -compact
.It
Dash one goes here.
.It
Dash two here.
.El
Produces:
- Dash one goes here.
- Dash two here.
-enum An enumerated list.
.Bl -enum -offset indent -compact
.It
Item one goes here.
.It
And item two here.
.El
The result:
1. Item one goes here.
2. And item two here.
If you want to nest enumerated lists, use the -nested flag
(starting with the second-level list):
.Bl -enum -offset indent -compact
.It
Item one goes here
.Bl -enum -nested -compact
.It
Item two goes here.
.It
And item three here.
.El
.It
And item four here.
.El
Result:
1. Item one goes here.
1. Item two goes here.
2. And item three here.
2. And item four here.
-item A list of type -item without list markers.
.Bl -item -offset indent
.It
Item one goes here.
Item one goes here.
Item one goes here.
.It
Item two here.
Item two here.
Item two here.
.El
Produces:
Item one goes here. Item one goes here. Item one goes
here.
Item two here. Item two here. Item two here.
-tag A list with tags. Use -width to specify the tag width.
SL sleep time of the process (seconds blocked)
PAGEIN
number of disk I/O operations resulting from
references by the process to pages not loaded in
core.
UID numerical user-id of process owner
PPID numerical id of parent of process priority (non-
positive when in non-interruptible wait)
The raw text:
.Bl -tag -width "PPID" -compact -offset indent
.It SL
sleep time of the process (seconds blocked)
.It PAGEIN
number of disk I/O operations resulting from references
by the process to pages not loaded in core.
.It UID
numerical user-id of process owner
.It PPID
numerical id of parent of process priority
(non-positive when in non-interruptible wait)
.El
-diag Diag lists create section four diagnostic lists and are
similar to inset lists except callable macros are ignored.
The -width flag is not meaningful in this context.
Example:
.Bl -diag
.It You can't use Sy here.
The message says all.
.El
produces
You can't use Sy here. The message says all.
-hang A list with hanging tags.
Hanged labels appear similar to tagged lists when the
label is smaller than the label width.
Longer hanged list labels blend into the paragraph
unlike tagged paragraph labels.
And the unformatted text which created it:
.Bl -hang -offset indent
.It Em Hanged
labels appear similar to tagged lists when the
label is smaller than the label width.
.It Em Longer hanged list labels
blend into the paragraph unlike
tagged paragraph labels.
.El
-ohang Lists with overhanging tags do not use indentation for the
items; tags are written to a separate line.
SL
sleep time of the process (seconds blocked)
PAGEIN
number of disk I/O operations resulting from references
by the process to pages not loaded in core.
UID
numerical user-id of process owner
PPID
numerical id of parent of process priority (non-
positive when in non-interruptible wait)
The raw text:
.Bl -ohang -offset indent
.It Sy SL
sleep time of the process (seconds blocked)
.It Sy PAGEIN
number of disk I/O operations resulting from references
by the process to pages not loaded in core.
.It Sy UID
numerical user-id of process owner
.It Sy PPID
numerical id of parent of process priority
(non-positive when in non-interruptible wait)
.El
-inset Here is an example of inset labels:
Tag The tagged list (also called a tagged paragraph) is
the most common type of list used in the Berkeley
manuals. Use a -width attribute as described below.
Diag Diag lists create section four diagnostic lists
and are similar to inset lists except callable macros
are ignored.
Hang Hanged labels are a matter of taste.
Ohang Overhanging labels are nice when space is
constrained.
Inset Inset labels are useful for controlling blocks of
paragraphs and are valuable for converting mdoc manuals
to other formats.
Here is the source text which produced the above example:
.Bl -inset -offset indent
.It Em Tag
The tagged list (also called a tagged paragraph)
is the most common type of list used in the
Berkeley manuals.
.It Em Diag
Diag lists create section four diagnostic lists
and are similar to inset lists except callable
macros are ignored.
.It Em Hang
Hanged labels are a matter of taste.
.It Em Ohang
Overhanging labels are nice when space is constrained.
.It Em Inset
Inset labels are useful for controlling blocks of
paragraphs and are valuable for converting
.Xr mdoc
manuals to other formats.
.El
-column This list type generates multiple columns. The number of
columns and the width of each column is determined by the
arguments to the -column list, <string1>, <string2>, etc. If
<stringN> starts with a `.' (dot) immediately followed by a
valid mdoc macro name, interpret <stringN> and use the width
of the result. Otherwise, the width of <stringN> (typeset
with a fixed-width font) is taken as the Nth column width.
Each `.It' argument is parsed to make a row, each column
within the row is a separate argument separated by a tab or
the `.Ta' macro.
The table:
String Nroff Troff
<= <= <=
>= >= >=
was produced by:
.Bl -column -offset indent ".Sy String" ".Sy Nroff" ".Sy Troff"
.It Sy String Ta Sy Nroff Ta Sy Troff
.It Li <= Ta <= Ta \*(<=
.It Li >= Ta >= Ta \*(>=
.El
Don't abuse this list type! For more complicated cases it
might be far better and easier to use tbl(1), the table
preprocessor.
Other keywords:
-width <string> If <string> starts with a `.' (dot)
immediately followed by a valid mdoc macro
name, interpret <string> and use the width of
the result. Almost all lists in this
document use this option.
Example:
.Bl -tag -width ".Fl test Ao Ar string Ac"
.It Fl test Ao Ar string Ac
This is a longer sentence to show how the
.Fl width
flag works in combination with a tag list.
.El
gives:
-test <string> This is a longer
sentence to show
how the -width flag
works in
combination with a
tag list.
(Note that the current state of mdoc is saved
before <string> is interpreted; afterwards,
all variables are restored again. However,
boxes (used for enclosures) can't be saved in
GNU troff(1); as a consequence, arguments
must always be balanced to avoid nasty
errors. For example, do not write `.Ao Ar
string' but `.Ao Ar string Xc' instead if you
really need only an opening angle bracket.)
Otherwise, if <string> is a valid numeric
expression (with a scaling indicator other
than `u'), use that value for indentation.
The most useful scaling indicators are `m'
and `n', specifying the so-called Em and En
square. This is approximately the width of
the letters `m' and `n' respectively of the
current font (for nroff output, both scaling
indicators give the same values). If
<string> isn't a numeric expression, it is
tested whether it is an mdoc macro name, and
the default width value associated with this
macro is used. Finally, if all tests fail,
the width of <string> (typeset with a fixed-
width font) is taken as the width.
If a width is not specified for the tag list
type, `6n' is used.
-offset <string> If <string> is indent, a default indent value
(normally set to 6n, similar to the value
used in `.Dl' or `.Bd') is used. If <string>
is a valid numeric expression instead (with a
scaling indicator other than `u'), use that
value for indentation. The most useful
scaling indicators are `m' and `n',
specifying the so-called Em and En square.
This is approximately the width of the
letters `m' and `n' respectively of the
current font (for nroff output, both scaling
indicators give the same values). If
<string> isn't a numeric expression, it is
tested whether it is an mdoc macro name, and
the default offset value associated with this
macro is used. Finally, if all tests fail,
the width of <string> (typeset with a fixed-
width font) is taken as the offset.
-compact Suppress insertion of vertical space before
the list and between list items.
Miscellaneous macros
A double handful of macros fit only uncomfortably into one of the above
sections. Of these, we couldn't find attested examples for `Me' or `Ot'.
They are documented here for completeness--if you know their proper
usage, please send a mail to groff@gnu.org and include a specimen with
its provenance.
.Bt formats boilerplate text.
.Bt -> is currently in beta test.
It is neither callable nor parsed and takes no arguments. Its
default width is 6n.
.Fr is an obsolete means of specifying a function return value.
Usage: .Fr return-value ...
`Fr' allows a break right before the return value (usually a
single digit) which is bad typographical behaviour. Instead,
set the return value with the rest of the code, using `\~' to
tie the return value to the previous word.
Its default width is 12n.
.Hf Inlines the contents of a (header) file into the document.
Usage: .Hf file
It first prints `File:' followed by the file name, then the
contents of file. It is neither callable nor parsed.
.Lk Embed hyperlink.
Usage: .Lk uri [link-text]
Its default width is 6n.
.Me Usage unknown. The mdoc sources describe it as a macro for
"menu entries".
Its default width is 6n.
.Mt Embed email address.
Usage: .Mt email-address
Its default width is 6n.
.Ot Usage unknown. The mdoc sources describe it as "old function
type (fortran)".
.Sm Manipulate or toggle argument-spacing mode.
Usage: .Sm [on | off] ...
If argument-spacing mode is off, no spaces between macro
arguments are inserted. If called without a parameter (or if
the next parameter is neither `on' nor `off'), `Sm' toggles
argument-spacing mode.
Its default width is 8n.
.Ud formats boilerplate text.
.Ud -> currently under development.
It is neither callable nor parsed and takes no arguments. Its
default width is 8n.
Predefined strings
The following strings are predefined for compatibility with legacy mdoc
documents. Contemporary ones should use the alternatives shown in the
"Prefer" column below. See groff_char(7) for a full discussion of these
special character escape sequences.
String 7-bit 8-bit UCS Prefer Meaning
\*(<= <= <= <= \(<= less than or equal to
\*(>= >= >= >= \(>= greater than or equal to
\*(Rq " " " \(rq right double quote
\*(Lq " " " \(lq left double quote
\*(ua ^ ^ ^ \(ua vertical arrow up
\*(aa ' ' ' \(aa acute accent
\*(ga ` ` ` \(ga grave accent
\*(q " " " \(dq neutral double quote
\*(Pi pi pi pi \(*p lowercase pi
\*(Ne != != != \(!= not equals
\*(Le <= <= <= \(<= less than or equal to
\*(Ge >= >= >= \(>= greater than or equal to
\*(Lt < < < < less than
\*(Gt > > > > greater than
\*(Pm +- +- +- \(+- plus or minus
\*(If infinity infinity infinity \(if infinity
\*(Am & & & & ampersand
\*(Na NaN NaN NaN NaN not a number
\*(Ba | | | | bar
Some column headings are shorthand for standardized character encodings;
"7-bit" for ISO 646:1991 IRV (US-ASCII), "8-bit" for ISO 8859-1 (Latin-1)
and IBM code page 1047, and "UCS" for ISO 10646 (Unicode character set).
Historically, mdoc configured the string definitions to fit the
capabilities expected of the output device. Old typesetters lacked
directional double quotes, producing repeated directional single quotes
``like this''; early versions of mdoc in fact defined the `Lq' and `Rq'
strings this way. Nowadays, output drivers take on the responsibility of
glyph substitution, as they possess relevant knowledge of their available
repertoires.
Diagnostics
The debugging macro `.Db' offered by previous versions of mdoc is
unavailable in GNU troff(1) since the latter provides better facilities
to check parameters; additionally, groff mdoc implements many error and
warning messages, making the package more robust and more verbose.
The remaining debugging macro is `.Rd', which dumps the package's global
register and string contents to the standard error stream. A normal user
will never need it.
Options
The following groff options set registers (with -r) and strings (with -d)
recognized and used by the mdoc macro package. To ensure rendering
consistent with output device capabilities and reader preferences, man
pages should never manipulate them.
Setting string `AD' configures the adjustment mode for most formatted
text. Typical values are `b' for adjustment to both margins (the
default), or `l' for left alignment (ragged right margin). Any valid
argument to groff's `ad' request may be used. See groff(7) for less-
common choices.
groff -Tutf8 -dAD=l -mdoc groff_mdoc.7 | less -R
Setting register `C' to 1 numbers output pages consecutively, rather than
resetting the page number to 1 (or the value of register `P') with each
new mdoc document.
By default, the package inhibits page breaks, headers, and footers in the
midst of the document text if it is being displayed with a terminal
device such as `latin1' or `utf8', to enable more efficient viewing of
the page. This behavior can be changed to format the page as if for
66-line Teletype output by setting the continuous rendering register `cR'
to zero while calling groff(1).
groff -Tlatin1 -rcR=0 -mdoc foo.man > foo.txt
On HTML devices, it cannot be disabled.
Section headings (defined with `.Sh') and page titles in headers (defined
with `.Dt') can be presented in full capitals by setting the registers
`CS' and `CT', respectively, to 1. These transformations are off by
default because they discard case distinction information.
Setting register `D' to 1 enables double-sided page layout, which is only
distinct when not continuously rendering. It places the page number at
the bottom right on odd-numbered (recto) pages, and at the bottom left on
even-numbered (verso) pages, swapping places with the arguments to `.Os'.
groff -Tps -rD1 -mdoc foo.man > foo.ps
The value of the `FT' register determines the footer's distance from the
page bottom; this amount is always negative and should specify a scaling
unit. At one half-inch above this location, the page text is broken
before writing the footer. It is ignored if continuous rendering is
enabled. The default is -0.5i.
The `HF' string sets the font used for section and subsection headings;
the default is `B' (bold style of the default family). Any valid
argument to groff's `ft' request may be used.
Normally, automatic hyphenation is enabled using a mode appropriate to
the groff locale; see section "Localization" of groff(7). It can be
disabled by setting the `HY' register to zero.
groff -Tutf8 -rHY=0 -mdoc foo.man | less -R
The paragraph and subsection heading indentation amounts can be changed
by setting the registers `IN' and `SN'.
groff -Tutf8 -rIN=5n -rSN=2n -mdoc foo.man | less -R
The default paragraph indentation is 7.2n on typesetters and 7n on
terminals. The default subsection heading indentation amount is 3n;
section headings are set with an indentation of zero.
The line and title lengths can be changed by setting the registers `LL'
and `LT', respectively:
groff -Tutf8 -rLL=100n -rLT=100n -mdoc foo.man | less -R
If not set, both registers default to 78n for terminal devices and 6.5i
otherwise.
Setting the `P' register starts enumeration of pages at its value. The
default is 1.
To change the document font size to 11p or 12p, set register `S'
accordingly:
groff -Tdvi -rS11 -mdoc foo.man > foo.dvi
Register `S' is ignored when formatting for terminal devices.
Setting the `X' register to a page number p numbers its successors as pa,
pb, pc, and so forth. The register tracking the suffixed page letter
uses format `a' (see the `af' request in groff(7)).
Files
/opt/local/share/groff/1.23.0/tmac/andoc.tmac
This brief groff program detects whether the man or mdoc macro
package is being used by a document and loads the correct macro
definitions, taking advantage of the fact that pages using them
must call TH or Dd, respectively, before any other macros. A
user typing, for example,
groff -mandoc page.1
need not know which package the file page.1 uses. Multiple man
pages, in either format, can be handled; andoc.tmac reloads each
macro package as necessary.
/opt/local/share/groff/1.23.0/tmac/doc.tmac
implements the bulk of the groff mdoc package and loads further
components as needed from the mdoc subdirectory.
/opt/local/share/groff/1.23.0/tmac/mdoc.tmac
is a wrapper that loads doc.tmac.
/opt/local/share/groff/1.23.0/tmac/mdoc/doc-common
defines macros, registers, and strings concerned with the
production of formatted output. It includes strings of the form
`doc-volume-ds-X' and `doc-volume-as-X' for manual section titles
and architecture identifiers, respectively, where X is an
argument recognized by .Dt.
/opt/local/share/groff/1.23.0/tmac/mdoc/doc-nroff
defines parameters appropriate for rendering to terminal devices.
/opt/local/share/groff/1.23.0/tmac/mdoc/doc-ditroff
defines parameters appropriate for rendering to typesetter
devices.
/opt/local/share/groff/1.23.0/tmac/mdoc/doc-syms
defines many strings and macros that interpolate formatted text,
such as names of operating system releases, *BSD libraries, and
standards documents. The string names are of the form
`doc-str-O-V', `doc-str-St--S-I' (observe the double dashes), or
`doc-str-Lb-L', where O is one of the operating system macros
from section General text domain above, V is an encoding of an
operating system release (sometimes omitted along with the `-'
preceding it), S an identifier for a standards body or committee,
I one for an issue of a standard promulgated by S, and L a
keyword identifying a *BSD library.
/opt/local/share/groff/site-tmac/mdoc.local
This file houses local additions and customizations to the
package. It can be empty.
See also
The mandoc: https://mandoc.bsd.lv/ project maintains an independent
implementation of the mdoc language and a renderer that directly parses
its markup as well as that of man.
groff(1), man(1), troff(1), groff_man(7), mdoc(7)
Bugs
Section 3f has not been added to the header routines.
`.Fn' needs to have a check to prevent splitting up the line if its
length is too short. Occasionally it separates the last parenthesis, and
sometimes looks ridiculous if output lines are being filled.
The list and display macros do not do any keeps and certainly should be
able to.
As of groff 1.23, `Tn' no longer changes the type size; this
functionality may return in the next release.
groff 1.23.0 2 July 2023 groff 1.23.0
groff 1.23.0 - Generated Fri Dec 22 16:34:08 CST 2023
