| groff_man(7) | Standards, Environments, and Macros | groff_man(7) |
groff_man - compose manual pages with GNU roff
groff -man |
[option ...] [file ...] |
groff -m man |
[option ...] [file ...] |
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
The following groff options set registers (with -r) and strings (with -d) recognized and used by the man macro package. To ensure rendering consistent with output device capabilities and reader preferences, man pages should never manipulate them.
James Clark wrote the initial GNU implementation of the man macro package. Later, Werner Lemberg supplied the S, LT, and cR registers, the last a 4.3BSD-Reno mdoc(7) feature. Larry Kollar added the FT, HY, and SN registers; the HF string; and the PT and BT macros in groff 1.19 (2003). Lemberg and Eric S. Raymond contributed EX/EE, MT/ME, UR/UE, TQ, and an early version of the SY/YS macros to groff 1.20 (2009). G. Branden Robinson implemented the AD and MF strings; CS, CT, and U registers; and the MR macro for groff 1.23 (2023), and the BP, PO, and TS registers and a revised implementation of the SY/YS macros for groff 1.24 (2026).
Susan G. Kleinmann wrote the initial version of this document for the Debian GNU/Linux system. Lemberg imported it to groff. He and Robinson revised and updated it. Raymond and Robinson documented the extension macros.
gtbl(1), geqn(1), and grefer(1) are preprocessors used with man pages. man(1) describes the man page librarian on your system. groff_mdoc(7) details the groff version of BSD's alternative macro package for man pages.
groff_man_style(7), groff(7), groff_char(7)
| 2026-03-14 | groff 1.24.1 |