The GNU implementation of the man macro package is part of
the groff document formatting system. It is used to compose manual
pages (“man pages”) like the one you are reading. This
document presents the macros thematically; for those needing only a quick
reference, the following table lists them alphabetically, with references to
appropriate subsections below.
Readers who are not already experienced groff users should
consult groff_man_style(7), an expanded version of this document, for
additional explanations and advice. It covers only those concepts required
for man page document maintenance, and not the full breadth of the
groff typesetting system.
| Macro |
Meaning |
Subsection |
| .B |
Bold |
Font style macros |
| .BI |
Bold, italic alternating |
Font style macros |
| .BR |
Bold, roman alternating |
Font style macros |
| .EE |
Example end |
Document structure macros |
| .EX |
Example begin |
Document structure macros |
| .HP |
Begin hanging paragraph |
Paragraphing macros |
| .I |
Italic |
Font style macros |
| .IB |
Italic, bold alternating |
Font style macros |
| .IP |
Indented paragraph |
Paragraphing macros |
| .IR |
Italic, roman alternating |
Font style macros |
| .LP |
Begin paragraph |
Paragraphing macros |
| .ME |
Mail-to end |
Hyperlink macros |
| .MR |
Man page cross reference |
Hyperlink macros |
| .MT |
Mail-to start |
Hyperlink macros |
| .P |
Begin paragraph |
Paragraphing macros |
| .PP |
Begin paragraph |
Paragraphing macros |
| .RB |
Roman, bold alternating |
Font style macros |
| .RE |
Relative inset end |
Document structure macros |
| .RI |
Roman, italic alternating |
Font style macros |
| .RS |
Relative inset start |
Document structure macros |
| .SH |
Section heading |
Document structure macros |
| .SM |
Small |
Font style macros |
| .SS |
Subsection heading |
Document structure macros |
| .SY |
Synopsis start |
Synopsis macros |
| .TH |
Title heading |
Document structure macros |
| .TP |
Tagged paragraph |
Paragraphing macros |
| .TQ |
Supplemental paragraph tag |
Paragraphing macros |
| .UE |
URI end |
Hyperlink macros |
| .UR |
URI start |
Hyperlink macros |
| .YS |
Synopsis end |
Synopsis macros |
We discuss other macros (AT, DT, OP,
PD, SB, and UC) in subsection “Deprecated
features” below.
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.
A tagged paragraph describes each macro. We present coupled pairs
together, as with EX and EE. If you require an empty macro
argument, specify it as a pair of neutral double quotes
(""). Most macro arguments are formatted as text in the
output; exceptions are noted.
Document structure macros organize a man page's content. All of
them break the output line. TH (title heading) identifies the
document as a man page and configures the page headers and footers. Section
headings (SH), one of which is mandatory and many of which are
conventionally expected, facilitate location of material by the reader and
aid the man page writer to discuss all essential aspects of the topics
presented. Subsection headings (SS) are optional and permit sections
that grow long to develop in a controlled way. Many technical discussions
benefit from examples; lengthy ones, especially those reflecting multiple
lines of input to or output from the system, are usefully bracketed by
EX and EE. When none of the foregoing meets a structural
demand, use RS/RE to inset a region within a (sub)section.
- .TH identifier
section [footer-middle [footer-inside [header-middle]]]
- Break the page, reset the page number to 1 (unless the -rC1
option is given), and use the arguments to populate the page header and
footer. Together, identifier and the section of the manual
to which it belongs can uniquely identify a man document on the
system. See man(1) or intro(1) for the manual sectioning
applicable to your system. identifier and section are
positioned at the left and right in the header; the latter is set after
the former, in parentheses and without space. footer-middle is
centered in the footer. By default, footer-inside is positioned at
the bottom left. Use of the double-sided layout option -rD1 places
footer-inside at the bottom left on recto (odd-numbered) pages, and
the bottom right on verso (even-numbered) pages. By default, the outside
footer is the page number. Use of the continuous-rendering option
-rcR=1 replaces it with identifier and section, as in
the header. header-middle is centered in the header. If
section is an integer between 1 and 9 (inclusive), there is
no need to specify header-middle; an.tmac supplies text for
it. If identifier or footer-inside would overrun the space
available in the header and/or footer, this package may abbreviate them
with ellipses. groff man suppresses headers and footers in HTML
output.
- A valid man document calls TH only once, early in the file,
prior to any other macro calls.
- .SH [heading-text]
- Set heading-text as a section heading. Given no argument, SH
plants a one-line input trap; text on the next line becomes
heading-text. The heading text is set in bold (or the font
specified by the string HF), and, on typesetters, slightly larger
than the base type size. If the heading font \*[HF] is bold, use of
an italic style in heading-text is mapped to the bold-italic style
if available in the font family. The inset level is reset to 1; see
subsection “Horizontal and vertical spacing” below. Text
lines after the call are set as an ordinary paragraph (P).
- The content of heading-text and ordering of sections follows a set
of common practices, as does much of the layout of material within
sections. For example, a section called “Name” or
“NAME” must exist, must be the first section after the
TH call, and must contain only text of the form
- .SS [subheading-text]
- Set subheading-text as a subsection heading indented between a
section heading and an ordinary paragraph (P). Given no argument,
SS plants a one-line input trap; text on the next line becomes
subheading-text. The subheading text is set in bold (or the font
specified by the string HF). If the heading font \*[HF] is
bold, use of an italic style in subheading-text is mapped to the
bold-italic style if available in the font family. The inset level is
reset to 1; see subsection “Horizontal and vertical spacing”
below. Text lines after the call are set as an ordinary paragraph
(P).
- .EX
- .EE
- Begin and end example. After EX, filling is disabled (and, on
typesetters, a monospaced font family is selected). Calling EE
enables filling (and restores the previous family).
- Ninth Edition Unix introduced the EX and EE extensions.
Documenter's Workbench (DWB), Heirloom Doctools, and Plan 9
troffs, and mandoc (since 1.12.2) support them. Solaris
troff does not.
- .RS [inset-amount]
- Start new relative inset. man saves any current inset amount and
moves right by: inset-amount, if specified; the indentation
amount of the preceding IP, TP, or HP macro call if
no (sub-)sectioning or ordinary paragraphing macro has intervened; or the
amount of the IN register. RS calls can nest; each
increments by 1 the level used by RE. The level prior
to any RS call is 1.
- .RE [inset-level]
- End a relative inset, reducing it to that of inset-level (or
by 1 if not specified) and restoring the corresponding inset
amount.
These macros break the output line. An ordinary paragraph
(P) indents all output lines by the same amount. A hanging paragraph
(HP) is a cosmetic variant of P with a hanging indent.
Definition lists frequently occur in man pages; these can be set as
tagged paragraphs, which have one (TP) or more (TQ)
leading tags followed by a paragraph that has an additional indentation. The
indented paragraph (IP) macro can continue the indented content of a
narrative started with TP, or present an itemized or ordered list. If
a paragraphing macro has been called since SH or SS, all
except TQ follow the break with vertical space (in an amount
configured by the deprecated PD macro); see subsection
“Horizontal and vertical spacing” below. Except for TQ,
these macros reset the type size, hyphenation, and adjustment to
(configured) defaults, and the font style to roman.
- .P
- .LP
- .PP
- Begin a new paragraph; these macros are synonymous. Any indentation from
use of IP, TP, or HP is cleared. The inset amount, as
affected by RS and RE, is not.
- .HP [indentation]
- Set a paragraph with a hanging indentation. Text on output lines after the
first is indented by indentation, if specified, and by the amount
of the IN register otherwise.
- Caution: A hanging indentation cannot be expressed naturally in
(pure) HTML, a hanging paragraph is not distinguishable from an ordinary
one if it formats on only one output line, and non-roff-based man
page interpreters may treat HP as an ordinary paragraph anyway.
Thus, information or distinctions you mean to express with indentation may
be lost.
- .TP [indentation]
- Set an indented paragraph with a leading unindented tag. The macro plants
a one-line input trap that honors the \c escape sequence; text on
the next line becomes the tag, set without indentation. Text on subsequent
lines is indented by indentation, if specified, and by the amount
of the IN register otherwise. If the tag, plus the “tag
spacing” stored in the TS register (see section
“Options” below) is wider than the indentation, the package
breaks the line after the tag.
- .TQ
- Set an additional tag for a paragraph tagged with TP, planting a
one-line input trap as with TP.
- TQ is a GNU extension supported by Heirloom Doctools troff
(since Git snapshot 151218) and mandoc (since 1.14.5) but not by
DWB, Plan 9, or Solaris troffs.
- .IP [mark [indentation]]
- Set an indented paragraph with an optional mark. Arguments, if present,
are handled as with TP, except that the mark argument to
IP cannot include a macro call, and the tag separation amount
stored in the TS register is not enforced.
Use SY and YS to summarize syntax using familiar
Unix conventions. Heirloom Doctools troff (since Git snapshot 151218)
and mandoc (since 1.14.5) support these GNU extensions; DWB,
Plan 9, and Solaris troffs do not.
- .SY keyword [suffix]
- Begin synopsis. Adjustment and automatic hyphenation are disabled. If
SY has already been called without a corresponding YS, a
break is performed. keyword and any suffix are set in bold.
When suffix is present, the package sets the next word after it
without intervening space. If a break is required in subsequent text (up
to a paragraphing, sectioning, or YS macro call), lines after the
first are indented. Unless the previous synopsis's indentation is reused
(see YS below), output lines after the first indent by the width of
the pending output line up to the end of keyword plus a space, if
keyword is the only argument, and up to the end of suffix
otherwise.
- .YS [reuse-indentation]
- End synopsis, breaking the line and restoring indentation, adjustment, and
hyphenation to their previous states. If an argument is given, the
indentation corresponding to the previous SY call is reused by the
next SY call instead of being computed.
Man page cross references are best presented with MR. Mark
email addresses with MT/ME and other sorts of URI with
UR/UE. To hyperlink text, terminals and pager programs must
support ECMA-48 OSC 8 escape sequences (see grotty(1)). When
device support is unavailable or disabled with the U register (see
section “Options” below), groff man renders these URIs
between angle brackets (⟨ ⟩) after the linked
text.
MT, ME, UR, and UE are GNU extensions
supported by Heirloom Doctools troff (since Git snapshot 151218) and
mandoc (UR/UE since 1.12.3; MT/ME since
1.14.2) but not by DWB, Plan 9 (original), or Solaris troffs.
Plan 9 from User Space's troff implements MR.
Prepare arguments to MR, MT, and UR for
typesetting; they can appear in the output. Use special character escape
sequences to encode Unicode basic Latin characters where necessary,
particularly the hyphen-minus.
- .MR topic [manual-section [trailing-text]]
- (since groff 1.23) Set a man page cross
reference as
“topic(manual-section)”. If
manual-section is absent, the package omits the surrounding
parentheses. If trailing-text (typically punctuation) is specified,
it follows the closing parenthesis without intervening space. Hyphenation
is disabled while the cross reference is set. topic is set in the
font specified by the MF string. If manual-section is
present, the cross reference hyperlinks to a URI of the form
“man:topic(manual-section)”.
- .MT address
- .ME [trailing-text]
- Identify address as an RFC 6068 addr-spec for a
“mailto:” URI with the text between the two macro calls as
the link text. An argument to ME is placed after the link text
without intervening space. address may not be visible in the
rendered document if hyperlinks are enabled and supported by the output
driver. If they are not, address is set in angle brackets after the
link text and before trailing-text. If hyperlinking is enabled but
there is no link text, address is formatted and hyperlinked
without angle brackets, except when address appears as a
TP paragraph tag.
- .UR uri
- .UE [trailing-text]
- Identify uri as an RFC 3986 URI hyperlink with the text between the
two macro calls as the link text. An argument to UE is placed after
the link text without intervening space. uri may not be visible in
the rendered document if hyperlinks are enabled and supported by the
output driver. If they are not, uri is set in angle brackets after
the link text and before trailing-text. If hyperlinking is enabled
but there is no link text, uri is formatted and hyperlinked
without angle brackets, except when uri appears as a
TP paragraph tag.
If a UR/UE or MT/ME pair occurs in a
TP tag and hyperlinking is unavailable, groff man sets the
link target at the beginning of the indented paragraph, not as part of the
tag, unless there is no link text.
The man macro package is limited in its font styling
options, offering only bold (B),
italic (I), and roman. Italic text may instead render
underscored on terminals. SM sets text at a smaller type size, which
differs visually from regular-sized text only on typesetters. The macros
BI, BR, IB, IR, RB, and RI set
their odd- and even-numbered arguments as text in the alternating styles
their names indicate, with no space separating them.
The default type size and family for typesetters is 10-point
Times, except on the X75-12 and X100-12 devices where the type
size is 12 points. The default style is roman.
- .B [text]
- Set text in bold. Given no argument, B plants a one-line
input trap; text on the next line, which can be further formatted with a
macro, is set in bold.
- .I [text]
- Set text in an italic or oblique face. Given no argument, I
plants a one-line input trap; text on the next line, which can be further
formatted with a macro, is set in an italic or oblique face.
- .SM [text]
- Set text one point smaller than the default type size on
typesetters. Given no argument, SM plants a one-line input trap;
text on the next line, which can be further formatted with a macro, is set
smaller.
Unlike the above font style macros, the font style alternation
macros below set no input traps; they must be given arguments to have
effect. They apply italic corrections as appropriate.
- .BI bold-text italic-text ...
- Set each argument in bold and italics, alternately.
- .BR bold-text roman-text ...
- Set each argument in bold and roman, alternately.
- .IB italic-text bold-text ...
- Set each argument in italics and bold, alternately.
- .IR italic-text roman-text ...
- Set each argument in italics and roman, alternately.
- .RB roman-text bold-text ...
- Set each argument in roman and bold, alternately.
- .RI roman-text italic-text ...
- Set each argument in roman and italics, alternately.
The package sets all text inboard of the left edge of the output
medium by the amount of the page offset; see register PO in
section “Options” below. Headers, footers (both set with
TH), and section headings (SH) lie at the page offset.
groff man indents subsection headings (SS) by the
amount in the SN register.
Ordinary paragraphs not within an RS/RE inset region
are inset by the amount stored in the BP register; see section
“Options” below. The IN register configures the default
indentation amount used by RS (as the inset-amount),
IP, TP, and HP; an overriding argument is a number plus
an optional scaling unit. If no scaling unit is given, the man
package assumes “n”. An indentation specified in a call to
IP, TP, or HP persists until (1) another of these
macros is called with an indentation argument, or (2) SH,
SS, or P or its synonyms is called; these clear the
indentation entirely.
Several macros insert vertical space: SH, SS,
TP, P (and its synonyms), IP, and HP. They then
enable no-space mode; see groff(7). The default inter-section
and inter-paragraph spacing is 1v for terminals and 0.4v for typesetters.
(The deprecated macro PD can change this vertical spacing, but we
discourage its use.) Between EX and EE calls, the
inter-paragraph spacing is 1v regardless of output device.
Registers are described in section “Options” below.
They can be set not only on the command line but in the site
man.local file as well; see section “Files” below.
The following strings are defined for use in man pages. None of
these is necessary in a contemporary man page; see
groff_man_style(7). groff man supports others for
configuration of rendering parameters; see section “Options”
below.
- \*R
- interpolates a special character escape sequence for the
“registered sign” glyph, \(rg, if available, and
“(Reg.)” otherwise.
- \*S
- interpolates an escape sequence setting the type size to the document
default.
- \*(lq
- \*(rq
- interpolate special character escape sequences for left and right
double-quotation marks, \(lq and \(rq, respectively.
- \*(Tm
- interpolates a special character escape sequence for the “trade
mark sign” glyph, \(tm, if available, and
“(TM)” otherwise.
Two macros, both GNU extensions, are called internally by the
groff man package to format page headers and footers and can be
redefined by the administrator in a site's man.local file (see
section “Files” below). The presentation of TH above
describes the default headers and footers. Because these macros are hooks
for groff man internals, man pages have no reason to call them. Such
hook definitions typically consist of “sp” and
“tl” requests. PT furthermore has the responsibility of
emitting a PDF bookmark after writing the first page header in a document.
Consult the existing implementations in an.tmac when drafting
replacements.
- .BT
- Set the page footer text (“bottom trap”).
- .PT
- Set the page header text (“page trap”).
To remove a page header or footer entirely, define the appropriate
macro as empty rather than deleting it.
Use of the following in man pages for public distribution is
discouraged.
- .AT [system [release]]
- Alter the footer for use with legacy AT&T man pages, overriding any
definition of the footer-inside argument to TH. This macro
exists only to render man pages from historical systems.
- The inside footer is populated per the value of system.
- 3
- 7th edition (default)
- 4
- System III
- 5
- System V
- The optional release argument specifies the release number, as in
“System V Release 3”.
- .DT
- Reset tab stops to the default (every 0.5i).
- Use of this presentation-oriented macro is deprecated. It translates
poorly to HTML, under which exact space control and tabulation are not
readily available. Thus, information or distinctions that you use tab
stops to express are likely to be lost. If you feel tempted to change the
tab stops such that calling this macro later to restore them is desirable,
consider composing a table using tbl(1) instead.
- .OP option-name [option-argument]
- Indicate an optional command parameter called option-name, which is
set in bold. If the option takes an argument, specify
option-argument using a noun, abbreviation, or hyphenated noun
phrase. If present, option-argument is preceded by a space and set
in italics. Square brackets in roman surround both arguments.
- Use of this quasi-semantic macro, an extension whose name originated in
DWB troff, is deprecated; groff's interface differs. Neither
can easily be used to annotate options that take optional arguments or
options whose arguments have internal structure (such as a mixture of
literal and variable components). One could work around these limitations
with font selection escape sequences, but font style alternation macros
are preferable; they are more flexible and perform italic corrections on
typesetters.
- .PD [vertical-space]
- Configure the amount of vertical space between paragraphs or
(sub)sections. The optional argument vertical-space specifies the
amount; the default scaling unit is “v”. Without an
argument, inter-paragraph spacing resets to its default value; see
subsection “Horizontal and vertical spacing” above.
- Use of this presentation-oriented macro is deprecated. It translates
poorly to HTML, under which exact control of inter-paragraph spacing is
not readily available. Thus, information or distinctions that you use
PD to express are likely to be lost.
- .SB [text]
- Set text in bold and (on typesetters) one point smaller than the
default type size. Given no argument, SB plants a one-line input
trap; text on the next line, which can be further formatted with a macro,
is set smaller and in bold. Use of this macro, an extension originating in
SunOS 4.0 troff, is deprecated. SM without an
argument, followed immediately by “B text”,
produces the same output more portably. The macros' order is
interchangeable; put text with the latter.
- .UC [version]
- Alter the footer for use with legacy BSD man pages, overriding any
definition of the footer-inside argument to TH. This macro
exists only to render man pages from historical systems.
- The inside footer is populated per the value of version.
- 3
- 3rd Berkeley Distribution (default)
- 4
- 4th Berkeley Distribution
- 5
- 4.2 Berkeley Distribution
- 6
- 4.3 Berkeley Distribution
- 7
- 4.4 Berkeley Distribution
M.
Douglas McIlroy designed, implemented, and documented the AT&T
man macros for Unix Version 7 (1979) and employed them to edit
Volume 1 of its Programmer's Manual, a compilation of all man
pages supplied by the system. The package supported the macros listed in
this page not described as extensions, except P and the deprecated
AT and UC. It documented no registers and defined only
R and S strings.
UC appeared in 3BSD (1980). Unix System III (1980)
introduced P and exposed the registers IN and LL, which
had been internal to Seventh Edition Unix man. PWB/Unix 2.0 (1980)
added the Tm string. 4BSD (1980) added lq and rq
strings. SunOS 2.0 (1985) recognized C, D, P,
and X registers. 4.3BSD (1986) added AT and P. Ninth
Edition Unix (1986) introduced EX and EE. SunOS 4.0
(1988) added SB. Unix System V (1988) incorporated the
lq and rq strings.
Except for EX/EE, James Clark implemented the
foregoing features in early versions of groff. Later, groff
1.20 (2009) resurrected EX/EE and originated
SY/YS, TQ, MT/ME, and
UR/UE. Plan 9 from User Space's troff introduced
MR in 2020, and incorporated the lq and rq strings in
2025.