groff_man_style(7) Miscellaneous Information Manual groff_man_style(7)
Name
groff_man_style - GNU roff man page tutorial and style guide
Synopsis
groff -man [option_...] [file_...]
groff -m man [option_...] [file_...]
Description
The GNU implementation of the man macro package is part of the groff
document formatting system. It is used to produce 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
cross references to appropriate subsections below.
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
.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
.SB Small bold Font style macros
.SH Section heading Document structure macros
.SM Small Font style macros
.SS Subsection heading Document structure macros
.SY Synopsis start Command 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 Command synopsis macros
We discuss other macros (.AT, .DT, .HP, .OP, .PD, 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.
Man pages should be encoded using Unicode basic Latin code points
exclusively, and employ the Unix line-ending convention (U+000A only).
Fundamental concepts
groff is a programming system for typesetting: we thus often use the
verb “to set” in the sense “to typeset”. The formatter troff(1)
collects words from the input and fills output lines with as many as
will fit. Words are separated by spaces and newlines. A transition to
a new output line is called a break. When formatted, a word may be
broken at hyphens, at \% or \: escape sequences (see subsection
“Portability” below), or at predetermined locations if automatic
hyphenation is enabled (see the -rHY option in section “Options”
below). An output line may be supplemented with inter-sentence space,
and then optionally adjusted with more space to a consistent line
length (see the -dAD option). roff(7) details these processes.
An input line that starts with a dot (.) or neutral apostrophe (') is a
control line. To call a macro, put its name after a dot on a control
line. We refer to macros in this document using this leading dot.
Some macros interpret arguments, words that follow the macro name. A
newline, unless escaped (see subsection “Portability” below), marks the
end of the macro call. An input line consisting of a dot followed by a
newline is called the empty request; it does nothing. Text lines are
input lines that are not control lines.
We describe below several man macros that plant one-line input traps:
the next input line that directly produces formatted output is treated
specially. For man documents that follow the advice in section
“Portability” below, this means that control lines using the empty
request and uncommented input lines ending with an escaped newline do
not spring the trap; anything else does (but see the .TP macro
description).
Macro reference preliminaries
A tagged paragraph describes each macro. We present coupled pairs
together, as with .EX and .EE.
Optional macro arguments are indicated by surrounding them with square
brackets. If a macro accepts multiple arguments, those containing
space characters must be double-quoted to be interpreted correctly. An
empty macro argument can be specified with a pair of double-quotes
(""), but the man package is designed such that this should seldom be
necessary. See section “Notes” below for examples of cases where
better alternatives to empty arguments in macro calls are available.
Most macro arguments will be formatted as text in the output;
exceptions are noted.
Document structure macros
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
topic. 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 topic section [footer-middle] [footer-inside] [header-middle]
Determine the contents of the page header and footer. roff
systems refer to these collectively as “titles”. The subject of
the man page is topic and the section of the manual to which it
belongs is section. 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. See man(1) or intro(1) for the manual sectioning
applicable to your system. topic and section are positioned
together at the left and right in the header (with section in
parentheses immediately appended to topic). footer-middle is
centered in the footer. The arrangement of the rest of the
footer depends on whether double-sided layout is enabled with
the option -rD1. When disabled (the default), footer-inside is
positioned at the bottom left. Otherwise, footer-inside appears
at the bottom left on recto (odd-numbered) pages, and at the
bottom right on verso (even-numbered) pages. The outside footer
is the page number, except in the continuous-rendering mode
enabled by the option -rcR=1, in which case it is the topic 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 will supply
text for it. The macro package may also abbreviate topic and
footer-inside with ellipses (...) if they would overrun the
space available in the header and footer, respectively. For
HTML output, headers and footers are suppressed.
Additionally, this macro breaks the page, resetting the number
to 1 (unless the -rC1 option is given). This feature is
intended only for formatting multiple man documents in sequence.
A valid man document calls .TH once, early in the file, prior to
any other macro calls.
By convention, footer-middle is the date of the most recent
modification to the man page source document, and footer-inside
is the name and version or release of the project providing it.
.SH [heading-text]
Set heading-text as a section heading. If no argument is given,
a one-line input trap is planted; text on the next line becomes
heading-text. The left margin is reset to zero to set the
heading text in bold (or the font specified by the string HF),
and, on typesetting devices, 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,
setting the left margin to the value of the IN register. Text
after heading-text is set as an ordinary paragraph (.P).
The content of heading-text and ordering of sections follows a
set of common practices, as has 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
topic[, another-topic]... \- summary-description
for a man page to be properly indexed. See man(7) for the
conventions prevailing on your system.
.SS [subheading-text]
Set subheading-text as a subsection heading indented between a
section heading and an ordinary paragraph (.P). If no argument
is given, a one-line input trap is planted; text on the next
line becomes subheading-text. The left margin is reset to the
value of the SN register to set the heading text 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, setting the left margin to the value of the
IN register. Text after subheading-text is set as an ordinary
paragraph (.P).
.EX
.EE Begin and end example. After .EX, filling is disabled and a
constant-width (monospaced) font is selected. Calling .EE
enables filling and restores the previous font.
Example regions are useful for formatting code, shell sessions,
and text file contents. An example region is not a “literal
mode” of any sort: special character escape sequences must still
be used to produce correct glyphs for ', -, \, ^, `, and ~, and
sentence endings are still detected and additional inter-
sentence space applied. If the amount of additional inter-
sentence spacing is altered, the rendering of, for instance,
regular expressions using . or ? followed by multiple spaces can
change. Use the dummy character escape sequence \& before the
spaces.
These macros are extensions introduced in Ninth Edition Research
Unix. Systems running that troff, or those from Documenter's
Workbench, Heirloom Doctools, or Plan 9 troff support them. To
be certain your page will be portable to systems that do not,
copy their definitions from the an-ext.tmac file of a groff
installation.
.RS [inset-amount]
Start a new relative inset level. The position of the left
margin is saved, then moved right by inset-amount, if specified,
and by the amount of the IN register otherwise. Calls to .RS
can be nested; each increments by 1 the inset level used by .RE.
The level prior to any .RS calls is 1.
.RE [level]
End a relative inset. The left margin corresponding to inset
level level is restored. If no argument is given, the inset
level is reduced by 1.
Paragraphing macros
An ordinary paragraph (.P) like this one is set without a first-line
indentation at the current left margin. In man pages and other
technical literature, definition lists are frequently encountered;
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 is useful to continue
the indented content of a narrative started with .TP, or to present an
itemized or ordered list. All of these macros break the output line.
If another paragraph macro has occurred since the previous .SH or .SS,
they (except for .TQ) follow the break with a default amount of
vertical space, which can be changed by the deprecated .PD macro; see
subsection “Horizontal and vertical spacing” below. They also reset
the type size and font style to defaults (.TQ again excepted); see
subsection “Font style macros” below.
.P
.LP
.PP Begin a new paragraph; these macros are synonymous. The
indentation is reset to the default value; the left margin, as
affected by .RS and .RE, is not.
.TP [indentation]
Set a paragraph with a leading tag, and the remainder of the
paragraph indented. A one-line input trap is planted; text on
the next line, which can be formatted with a macro, becomes the
tag, which is placed at the current left margin. The tag can be
extended with the \c escape sequence. Subsequent text is
indented by indentation, if specified, and by the amount of the
IN register otherwise. If the tag is not as wide as the
indentation, the paragraph starts on the same line as the tag,
at the applicable indentation, and continues on the following
lines. Otherwise, the descriptive part of the paragraph begins
on the line following the tag.
The line containing the tag can include a macro call, for
instance to set the tag in bold with .B. .TP was used to write
the first paragraph of this description of .TP, and .IP the
subsequent one.
.TQ Set an additional tag for a paragraph tagged with .TP. An input
trap is planted as with .TP.
This macro is a GNU extension not defined on systems running
AT&T, Plan 9, or Solaris troff; see an-ext.tmac in section
“Files” below.
The descriptions of .P, .LP, and .PP above were written using
.TP and .TQ.
.IP [tag] [indentation]
Set an indented paragraph with an optional tag. The tag and
indentation arguments, if present, are handled as with .TP, with
the exception that the tag argument to .IP cannot include a
macro call.
Two convenient uses for .IP are
(1) to start a new paragraph with the same indentation as an
immediately preceding .IP or .TP paragraph, if no
indentation argument is given; and
(2) to set a paragraph with a short tag that is not
semantically important, such as a bullet (•)—obtained
with the \(bu special character escape sequence—or list
enumerator, as seen in this very paragraph.
Command synopsis macros
.SY and .YS aid you to construct a command synopsis that has the
classical Unix appearance. They break the output line.
These macros are GNU extensions not defined on systems running AT&T,
Plan 9, or Solaris troff; see an-ext.tmac in section “Files” below.
.SY command
Begin synopsis. A new paragraph begins at the left margin (as
with .P) unless .SY has already been called without a
corresponding .YS, in which case only a break is performed.
Adjustment and automatic hyphenation are disabled. command is
set in bold. If a break is required, lines after the first are
indented by the width of command plus a space.
.YS End synopsis. Indentation, adjustment, and hyphenation are
restored to their previous states.
Multiple .SY/.YS blocks can be specified, for instance to distinguish
differing modes of operation of a complex command like tar(1); each
will be vertically separated as paragraphs are.
.SY can be repeated before .YS to indicate synonymous ways of invoking
a particular mode of operation.
groff's own command-line interface serves to illustrate most of the
specimens of synopsis syntax one is likely to encounter.
.SY groff
.RB [ \-abcCeEgGijklNpRsStUVXzZ ]
.RB [ \-d\~\c
.IR cs ]
.RB [ \-d\~\c
.IB name =\c
.IR string ]
.RB [ \-D\~\c
.IR enc ]
(and so on similarly)
.RI [ file\~ .\|.\|.]
.YS
.
.
.SY groff
.B \-h
.
.SY groff
.B \-\-help
.YS
.
.
.SY groff
.B \-v
.RI [ option\~ .\|.\|.\&]
.RI [ file\~ .\|.\|.]
.
.SY groff
.B \-\-version
.RI [ option\~ .\|.\|.\&]
.RI [ file\~ .\|.\|.]
.YS
produces the following output.
groff [-abcCeEgGijklNpRsStUVXzZ] [-d cs] [-d name=string]
[-D enc] [-f fam] [-F dir] [-I dir] [-K enc] [-L arg]
[-m name] [-M dir] [-n num] [-o list] [-P arg] [-r cn]
[-r reg=expr] [-T dev] [-w name] [-W name] [file_...]
groff -h
groff --help
groff -v [option_...] [file_...]
groff --version [option_...] [file_...]
Several features of the above example are of note.
• The empty request (.), which does nothing, is used to vertically
space the input file for readability by the document maintainer. Do
not put blank (empty) lines in a man page source document.
• Command and option names are presented in bold to cue the user that
they should be input literally.
• Option dashes are specified with the \- escape sequence; this is an
important practice to make them clearly visible and to facilitate
copy-and-paste from the rendered man page to a shell prompt or text
file.
• Option arguments and command operands are presented in italics (but
see subsection “Font style macros” below regarding terminals) to cue
the user that they must be replaced with appropriate text.
• Symbols that are neither to be typed literally nor replaced at the
user's discretion appear in the roman style; brackets surround
optional arguments, and an ellipsis indicates that the previous
syntactical element may be repeated arbitrarily.
• The non-breaking adjustable space escape sequence \~ is used to
prevent the output line from being broken within the option brackets;
see subsection “Portability” below.
• The output line continuation escape sequence \c is used with font
style alternation macros to allow all three font styles to be set
without (breakable) space among them; see subsection “Portability”
below.
• The dummy character escape sequence \& follows the ellipsis when
further text will follow after space on the output line, keeping its
last period from being interpreted as the end of a sentence and
causing additional inter-sentence space to be placed after it. See
subsection “Portability” below.
Hyperlink macros
Man page cross references like ls(1) are best presented with .MR. Text
may be hyperlinked to email addresses with .MT/.ME or other URIs with
.UR/.UE. Hyperlinked text is supported on HTML and terminal output
devices; 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), .MT and .UR
URIs are rendered between angle brackets after the linked text.
.MT, .ME, .UR, and .UE are GNU extensions not defined on systems
running AT&T, Plan 9, or Solaris troff; see an-ext.tmac in section
“Files” below. Plan 9 from User Space's troff implements .MR.
The arguments to .MR, .MT, and .UR should be prepared for typesetting
since they can appear in the output. Use special character escape
sequences to encode Unicode basic Latin characters where necessary,
particularly the hyphen-minus. (See section “Portability” below.)
URIs can be lengthy; rendering them can result in jarring adjustment or
variations in line length, or troff warnings when a hyperlink is longer
than an output line. The application of non-printing break point
escape sequences \: after each slash (or series thereof), and before
each dot (or series thereof) is recommended as a rule of thumb. The
former practice avoids forcing a trailing slash in a URI onto a
separate output line, and the latter helps the reader to avoid
mistakenly interpreting a dot at the end of a line as a period (or
multiple dots as an ellipsis). Thus,
.UR http://\:example\:.com/\:fb8afcfbaebc74e\:.cc
has several potential break points in the URI shown. Consider adding
break points before or after at signs in email addresses, and question
marks, ampersands, and number signs in HTTP(S) URIs. The formatter
removes \: escape sequences from hyperlinks when supplying device
control commands to output drivers.
.MR_topic manual-section [trailing-text]
(since_groff_1.23) Set a man page cross reference as
“topic(manual-section)”. 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. The cross reference hyperlinks to a URI of the
form “man:topic(manual-section)”.
The output driver
.MR grops 1
produces PostScript from
.I troff
output.
.
The Ghostscript program (\c
.MR gs 1 )
interprets PostScript and PDF.
.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.
When rendered by groff to a PostScript device,
Contact
.MT fred\:.foonly@\:fubar\:.net
Fred Foonly
.ME
for more information.
displays as “Contact Fred Foonly ⟨fred.foonly@fubar.net⟩ for
more information.”.
.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.
When rendered by groff to a PostScript device,
The GNU Project of the Free Software Foundation
hosts the
.UR https://\:www\:.gnu\:.org/\:software/\:groff/
.I groff
home page
.UE .
displays as “The GNU Project of the Free Software Foundation
hosts the groff home page
⟨https://www.gnu.org/software/groff/⟩.”.
The hyperlinking of .TP paragraph tags with .UR/.UE and .MT/.ME is not
yet supported; if attempted, the hyperlink will be typeset at the
beginning of the indented paragraph even on hyperlink-supporting
devices.
Font style macros
The man macro package is limited in its font styling options, offering
only bold (.B), italic (.I), and roman. Italic text is usually set
underscored instead on terminal devices. The .SM and .SB macros set
text in roman or bold, respectively, at a smaller type size; these
differ visually from regular-sized roman or bold text only on
typesetting devices. It is often necessary to set text in different
styles without intervening space. The macros .BI, .BR, .IB, .IR, .RB,
and .RI, where “B”, “I”, and “R” indicate bold, italic, and roman,
respectively, set their odd- and even-numbered arguments in alternating
styles, with no space separating them.
Because font styles are presentational rather than semantic,
conflicting traditions have arisen regarding which font styles should
be used to mark file or path names, environment variables, and inlined
literals.
The default type size and family for typesetting devices 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. If no argument is given, a one-line input
trap is planted; text on the next line, which can be further
formatted with a macro, is set in bold.
Use bold for literal portions of syntax synopses, for command-
line options in running text, and for literals that are major
topics of the subject under discussion; for example, this page
uses bold for macro, string, and register names. In an .EX/.EE
example of interactive I/O (such as a shell session), set only
user input in bold.
.I [text]
Set text in an italic or oblique face. If no argument is given,
a one-line input trap is planted; text on the next line, which
can be further formatted with a macro, is set in an italic or
oblique face.
Use italics for file and path names, for environment variables,
for C data types, for enumeration or preprocessor constants in
C, for variant (user-replaceable) portions of syntax synopses,
for the first occurrence (only) of a technical concept being
introduced, for names of journals and of literary works longer
than an article, and anywhere a parameter requiring replacement
by the user is encountered. An exception involves variant text
in a context already typeset in italics, such as file or path
names with replaceable components; in such cases, follow the
convention of mathematical typography: set the file or path name
in italics as usual but use roman for the variant part (see .IR
and .RI below), and italics again in running roman text when
referring to the variant material.
.SM [text]
Set text one point smaller than the default type size on
typesetting devices. If no argument is given, a one-line input
trap is planted; text on the next line, which can be further
formatted with a macro, is set smaller.
Note: terminals will render text at normal size instead. Do not
rely upon .SM to communicate semantic information distinct from
using roman style at normal size; it will be hidden from readers
using such devices.
.SB [text]
Set text in bold and (on typesetting devices) one point smaller
than the default type size. If no argument is given, a one-line
input trap is planted; text on the next line, which can be
further formatted with a macro, is set smaller and in bold.
This macro is an extension introduced in SunOS 4.0.
Note: terminals will render text in bold at the normal size
instead. Do not rely upon .SB to communicate semantic
information distinct from using bold style at normal size; it
will be hidden from readers using such devices.
Observe what is not prescribed for setting in bold or italics above:
elements of “synopsis language” such as ellipses and brackets around
options; proper names and adjectives; titles of anything other than
major works of literature; identifiers for standards documents or
technical reports such as CSTR #54, RFC 1918, Unicode 13.0, or
POSIX.1-2017; acronyms; and occurrences after the first of a technical
term.
Be frugal with italics for emphasis, and particularly with bold.
Article titles and brief runs of literal text, such as references to
individual characters or short strings, including section and
subsection headings of man pages, are suitable objects for quotation;
see the \(lq, \(rq, \(oq, and \(cq escape sequences in subsection
“Portability” below.
Unlike the above font style macros, the font style alternation macros
below set no input traps; they must be given arguments to have effect.
Italic corrections are applied as appropriate. If a space is required
within an argument, first consider whether the same result could be
achieved with as much clarity by using single-style macros on separate
input lines. When it cannot, double-quote an argument containing
embedded space characters. Setting all three different styles within a
word presents challenges; it is possible with the \c and/or \f escape
sequences. See subsection “Portability” below for approaches.
.BI bold-text italic-text ...
Set each argument in bold and italics, alternately.
.BI -r register = numeric-expression
.BR bold-text roman-text ...
Set each argument in bold and roman, alternately.
After
.B .NH
is called,
.IB italic-text bold-text ...
Set each argument in italics and bold, alternately.
In places where
.IB n th
is allowed,
.IR italic-text roman-text ...
Set each argument in italics and roman, alternately.
Use GNU
.IR pic 's
.B figname
command to change the name of the vbox.
.RB roman-text bold-text ...
Set each argument in roman and bold, alternately.
if
.I file
is
.RB \[lq] \- \[rq],
the standard input stream is read.
.RI roman-text italic-text ...
Set each argument in roman and italics, alternately.
.RI ( tpic
was a fork of AT&T
.I pic
by Tim Morgan of the University of California at Irvine
Horizontal and vertical spacing
The indentation argument accepted by .IP, .TP, and the deprecated .HP
is a number plus an optional scaling unit, as is .RS's inset-amount.
If no scaling unit is given, the man package assumes “n”; that is, the
width of a letter “n” in the font current when the macro is called (see
section “Measurements” in groff(7)). An indentation specified in a
call to .IP, .TP, or the deprecated .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.
The left margin used by ordinary paragraphs set with .P (and its
synonyms) not within an .RS/.RE relative inset is 7.2n for typesetting
devices and 7n for terminal devices (but see the -rIN option).
Headers, footers (both set with .TH), and section headings (.SH) are
set at the page offset (see groff(7)) and subsection headings (.SS)
indented from it by 3n (but see the -rSN option).
It may be helpful to think of the left margin and indentation as
related but distinct concepts; groff's implementation of the man macro
package tracks them separately. The left margin is manipulated by .RS
and .RE (and by .SH and .SS, which reset it to the default).
Indentation is controlled by the paragraphing macros (though, again,
.SH and .SS reset it); it is imposed by the .TP, .IP, and deprecated
.HP macros, and cancelled by .P and its synonyms. An extensive example
follows.
This ordinary (.P) paragraph is not in a relative inset nor does it
possess an indentation.
Now we have created a relative inset (in other words, moved the
left margin) with .RS and started another ordinary paragraph
with .P.
tag This tagged paragraph, set with .TP, is still within the
.RS region, but lines after the first have a
supplementary indentation that the tag lacks.
A paragraph like this one, set with .IP, will appear to
the reader as also associated with the tag above, because
.IP re-uses the previous paragraph's indentation unless
given an argument to change it. This paragraph is
affected both by the moved left margin (.RS) and
indentation (.IP).
┌─────────────────────────────────┐
│This table is affected both by │
│the left margin and indentation. │
└─────────────────────────────────┘
• This indented paragraph has a bullet for a tag, making it
more obvious that the left margin and indentation are
distinct; only the former affects the tag, but both
affect the text of the paragraph.
This ordinary (.P) paragraph resets the indentation, but the
left margin is still inset.
┌────────────────────────────┐
│This table is affected only │
│by the left margin. │
└────────────────────────────┘
Finally, we have ended the relative inset by using .RE, which (because
we used only one .RS/.RE pair) has reset the left margin to the
default. This is an ordinary .P paragraph.
Resist the temptation to mock up tabular or multi-column output with
tab characters or the indentation arguments to .IP, .TP, .RS, or the
deprecated .HP; the result may not render comprehensibly on an output
device you fail to check, or which is developed in the future. The
table preprocessor tbl(1) can likely meet your needs.
Several macros insert vertical space: .SH, .SS, .TP, .P (and its
synonyms), .IP, and the deprecated .HP. The default inter-section and
inter-paragraph spacing is is 1v for terminal devices and 0.4v for
typesetting devices (“v” is a unit of vertical distance, where 1v is
the distance between adjacent text baselines in a single-spaced
document). (The deprecated macro .PD can change this vertical spacing,
but its use is discouraged.) Between .EX and .EE calls, the inter-
paragraph spacing is 1v regardless of output device.
Registers
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.
Strings
The following strings are defined for use in man pages. Others are
supported 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.
None of the above is necessary in a contemporary man page. \*S is
superfluous, since type size changes are invisible on terminal devices
and macros that change it restore its original value afterward. Better
alternatives exist for the rest; simply use the \(rg, \(lq, \(rq, and
\(tm special character escape sequences directly. Unless a man page
author is aiming for a pathological level of portability, such as the
composition of pages for consumption on simulators of 1980s Unix
systems (or Solaris troff, though even it supports \(rg), the above
strings should be avoided.
Portability
It is wise to quote multi-word section and subsection headings; the .SH
and .SS macros of man(7) implementations descended from Seventh Edition
Unix supported six arguments at most. A similar restriction applied to
the .B, .I, .SM, and font style alternation macros.
The two major syntactical categories for formatting control in the roff
language are requests and escape sequences. Since the man macros are
implemented in terms of groff requests and escape sequences, one can,
in principle, supplement the functionality of man with these lower-
level elements where necessary.
However, using raw groff requests (apart from the empty request “.”) is
likely to make your page render poorly when processed by other tools;
many of these attempt to interpret page sources directly for conversion
to HTML. Some requests make implicit assumptions about things like
character and page sizes that may not hold in an HTML environment;
also, many of these viewers don't interpret the full groff vocabulary,
a problem that can lead to portions of your text being omitted or
presented incomprehensibly.
For portability to modern viewers, it is best to write your page solely
with the macros described in this page (except for the ones identified
as deprecated, which should be avoided). The macros we have described
as extensions (.EX/.EE, .SY/.YS, .TQ, .UR/.UE, .MT/.ME, .MR, and .SB)
should be used with caution, as they may not be built in to some viewer
that is important to your audience. See an-ext.tmac in section “Files”
below.
Similar caveats apply to escape sequences. Some escape sequences are
however required for correct typesetting even in man pages and usually
do not cause portability problems. Several of these render glyphs
corresponding to punctuation code points in the Unicode basic Latin
range (U+0000–U+007F) that are handled specially in roff input; the
escape sequences below must be used to render them correctly and
portably when documenting material that uses them syntactically—namely,
any of the set ' - \ ^ ` ~ (apostrophe, dash or minus, backslash,
caret, grave accent, tilde).
\" Comment. Everything after the double-quote to the end of the
input line is ignored. Whole-line comments should be placed
immediately after the empty request (“.”).
\newline
Join the next input line to the current one. Except for the
update of the input line counter (used for diagnostic messages
and related purposes), a series of lines ending in backslash-
newline appears to groff as a single input line. Use this
escape sequence to split excessively long input lines for
document maintenance.
\% Control hyphenation. The location of this escape sequence
within a word marks a hyphenation point, supplementing groff's
automatic hyphenation patterns. At the beginning of a word, it
suppresses any hyphenation breaks within except those specified
with \%.
\: Insert a non-printing break point. A word can break at such a
point, but a hyphen glyph is not written to the output if it
does. This escape sequence is an input word boundary, so the
remainder of the word is subject to hyphenation as normal. You
can use \: and \% in combination to control breaking of a file
name or URI or to permit hyphenation only after certain explicit
hyphens within a word. See subsection “Hyperlink macros” above
for an example.
This escape sequence is a groff extension also supported by
Heirloom Doctools troff 050915 (September 2005), mandoc 1.14.5
(2019-03-10), and neatroff (commit 399a4936, 2014-02-17), but
not by Plan 9, Solaris, or Documenter's Workbench troffs.
\~ Adjustable non-breaking space. Use this escape sequence to
prevent a break inside a short phrase or between a numerical
quantity and its corresponding unit(s).
Before starting the motor,
set the output speed to\~1.
There are 1,024\~bytes in 1\~KiB.
CSTR\~#8 documents the B\~language.
This escape sequence is a groff extension also supported by
Heirloom Doctools troff 050915 (September 2005), mandoc 1.9.5
(2009-09-21), neatroff (commit 1c6ab0f6e, 2016-09-13), and
Plan 9 from User Space troff (commit 93f8143600, 2022-08-12),
but not by Solaris or Documenter's Workbench troffs.
\& Dummy character. Insert at the beginning of an input line to
prevent a dot or apostrophe from being interpreted as beginning
a roff control line. Append to an end-of-sentence punctuation
sequence to keep it from being recognized as such.
\| Thin space (one-sixth em on typesetters, zero-width on
terminals); a non-breaking space. Used primarily in ellipses
(“.\|.\|.”) to space the dots more pleasantly on typesetting
devices like dvi, pdf, and ps.
\c End a text line without inserting space or attempting a break.
Normally, if filling is enabled, the end of a text line is
treated like a space; an output line may be broken there (if
not, an adjustable space is inserted); if filling is disabled,
the line will be broken there, as in .EX/.EE examples. The next
line is interpreted as usual and can include a macro call
(contrast with \newline). \c is useful when three font styles
are needed in a single word, as in a command synopsis.
.RB [ \-\-stylesheet=\c
.IR name ]
It also helps when changing font styles in .EX/.EE examples,
since they are not filled.
.EX
$ \c
.B groff \-T utf8 \-Z \c
.I file \c
.B | grotty \-i
.EE
Alternatively, and perhaps with better portability, the \f font
selection escape sequence can be used; see below. Using \c to
continue a .TP paragraph tag across multiple input lines will
render incorrectly with groff 1.22.3, mandoc 1.14.1, older
versions of these programs, and perhaps with some other
formatters.
\e Format the current escape character on the output; widely used
in man pages to render a backslash glyph. It works reliably as
long as the “.ec” request is not used, which should never happen
in man pages, and it is slightly more portable than the more
explicit \(rs (“reverse solidus”) special character escape
sequence.
\fB, \fI, \fR, \fP
Switch to bold, italic, roman, or back to the previous style,
respectively. Either \f or \c is needed when three different
font styles are required in a word.
.RB [ \-\-reference\-dictionary=\fI\,name\/\fP ]
.RB [ \-\-reference\-dictionary=\c
.IR name ]
Style escape sequences may be more portable than \c. As shown
above, it is up to you to account for italic corrections with
“\/” and “\,”, which are themselves GNU extensions, if desired
and if supported by your implementation.
\fP reliably returns to the style in use immediately preceding
the previous \f escape sequence only if no sectioning,
paragraph, or style macro calls have intervened.
As long as at most two styles are needed in a word, style macros
like .B and .BI usually result in more readable roff source than
\f escape sequences do.
Several special characters are also widely portable. Except for \-,
\(em, and \(ga, AT&T troff did not consistently define the characters
listed below, but its descendants, like Plan 9 or Solaris troff, can be
made to support them by defining them in font description files, making
them aliases of existing glyphs if necessary; see groff_font(5).
\- Minus sign or basic Latin hyphen-minus. This escape sequence
produces the Unix command-line option dash in the output. “-”
is a hyphen in the roff language; some output devices replace it
with U+2010 (hyphen) or similar.
\(aq Basic Latin neutral apostrophe. Some output devices format “'”
as a right single quotation mark.
\(oq
\(cq Opening (left) and closing (right) single quotation marks. Use
these for paired directional single quotes, ‘like this’.
\(dq Basic Latin quotation mark (double quote). Use in macro calls
to prevent ‘"” from being interpreted as beginning a quoted
argument, or simply for readability.
.TP
.BI "split \(dq" text \(dq
\(lq
\(rq Left and right double quotation marks. Use these for paired
directional double quotes, “like this”.
\(em Em-dash. Use for an interruption—such as this one—in a
sentence.
\(en En-dash. Use to separate the ends of a range, particularly
between numbers; for example, “the digits 1–9”.
\(ga Basic Latin grave accent. Some output devices format “`” as a
left single quotation mark.
\(ha Basic Latin circumflex accent (“hat”). Some output devices
format “^” as U+02C6 (modifier letter circumflex accent) or
similar.
\(rs Reverse solidus (backslash). The backslash is the default
escape character in the roff language, so it does not represent
itself in output. Also see \e above.
\(ti Basic Latin tilde. Some output devices format “~” as U+02DC
(small tilde) or similar.
For maximum portability, escape sequences and special characters not
listed above are better avoided in man pages.
Hooks
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 will likely
consist of “.sp” and “.tl” requests. They must also increase the page
length with “.pl” requests in continuous rendering mode; .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.
Deprecated features
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.
system can be any of the following.
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 [inches]).
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 is desirable to restore them, you
should probably be composing a table using tbl(1) instead.
.HP [indentation]
Set up a paragraph with a hanging left indentation. The
indentation argument, if present, is handled as with .TP.
Use of this presentation-oriented macro is deprecated. A
hanging indentation cannot be expressed naturally under HTML,
and non-roff-based man page interpreters may treat .HP as an
ordinary paragraph. Thus, information or distinctions you mean
to express with indentation may be lost.
.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 originating in
Documenter's Workbench troff, is deprecated. It cannot 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 it is preferable to use font style alternation macros, which
afford greater flexibility.
.PD [vertical-space]
Define the vertical space between paragraphs or (sub)sections.
The optional argument vertical-space specifies the amount; the
default scaling unit is “v”. Without an argument, the spacing
is reset 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.
.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.
version can be any of the following.
3 3rd Berkeley Distribution (default)
4 4th Berkeley Distribution
5 4.2 Berkeley Distribution
6 4.3 Berkeley Distribution
7 4.4 Berkeley Distribution
History
M. Douglas McIlroy <m.douglas.mcilroy@dartmouth.edu> designed,
implemented, and documented the AT&T man macros for Unix Version 7
(1979) and employed them to edit the first volume of its Programmer's
Manual, a compilation of all man pages supplied by the system. That
man supported the macros listed in this page not described as
extensions, except .P and the deprecated .AT and .UC. The only strings
defined were R and S; no registers were documented.
.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
Research Unix (1986) introduced .EX and .EE. SunOS 4.0 (1988) added
.SB.
The foregoing features were what James Clark implemented in early
versions of groff. Later, groff 1.20 (2009) originated .SY/.YS, .TQ,
.MT/.ME, and .UR/.UE. Plan 9 from User Space's troff introduced .MR in
2020.
Options
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.
-dAD=adjustment-mode
Set line adjustment to adjustment-mode, which is typically “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.
-rcR=1 Enable continuous rendering. Output is not paginated; instead,
one (potentially very long) page is produced. This is the
default for terminal and HTML devices. Use -rcR=0 to disable it
on terminal devices; on HTML devices, it cannot be disabled.
-rC1 Number output pages consecutively, in strictly increasing
sequence, rather than resetting the page number to 1 (or the
value of register P) with each new man document.
-rCS=1 Set section headings (the argument(s) to .SH) in full capitals.
This transformation is off by default because it discards case
distinction information.
-rCT=1 Set the man page topic (the first argument to .TH) in full
capitals in headers and footers. This transformation is off by
default because it discards case distinction information.
-rD1 Enable double-sided layout, formatting footers for even and odd
pages differently; see the description of .TH in subsection
“Document structure macros” above.
-rFT=footer-distance
Set distance of the footer relative to the bottom of the page to
footer-distance; this amount is always negative. At one half-
inch above this location, the page text is broken before writing
the footer. Ignored if continuous rendering is enabled. The
default is -0.5i.
-dHF=heading-font
Set 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. See groff(7).
-rHY=0 Disable automatic hyphenation. Normally, it is enabled (1).
The hyphenation mode is determined by the groff locale; see
section “Localization“ of groff(7).
-rIN=standard-indentation
Set the amount of indentation used for ordinary paragraphs (.P
and its synonyms) and the default indentation amount used by
.IP, .RS, .TP, and the deprecated .HP. See subsection
“Horizontal and vertical spacing” above for the default. For
terminal devices, standard-indentation should always be an
integer multiple of unit “n” to get consistent indentation.
-rLL=line-length
Set line length; the default is 78n for terminal devices and
6.5i for typesetting devices.
-rLT=title-length
Set the line length for titles. (“Titles” is the roff term for
headers and footers.) By default, it is set to the line length
(see -rLL above).
-dMF=man-page-topic-font
Set the font used for man page topics named in .TH and .MR
calls; the default is “I” (italic style of the default family).
Any valid argument to groff's “.ft” request may be used. If the
MF string ends in “I”, it is assumed to be an oblique typeface,
and italic corrections are applied before and after man page
topics.
-rPn Start enumeration of pages at n. The default is 1.
-rStype-size
Use type-size for the document's body text; acceptable values
are 10, 11, or 12 points. See subsection “Font style macros”
above for the default.
-rSN=subsection-indentation
Set indentation of subsection headings to
subsection-indentation. See subsection “Horizontal and vertical
spacing” above for the default.
-rU1 Enable generation of URI hyperlinks in the grohtml and grotty
output drivers. grohtml enables them by default; grotty does
not, pending more widespread pager support for OSC 8 escape
sequences. Use -rU0 to disable hyperlinks; this will make the
arguments to MT and UR calls visible in the document text
produced by link-capable drivers.
-rXp Number successors of page p as pa, pb, pc, and so forth. The
register tracking the suffixed page letter uses format “a” (see
the “.af” request in groff(7)). For example, the option -rX2
produces the following page numbers: 1, 2, 2a, 2b, ..., 2aa,
2ab, and so on.
Files
/opt/homebrew/Cellar/groff/1.23.0_1/share/groff/1.23.0/tmac/an.tmac
Most man macros are defined in this file. It also loads
extensions from an-ext.tmac (see below).
/opt/homebrew/Cellar/groff/1.23.0_1/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
man program or 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 reloads each
macro package as necessary.
/opt/homebrew/Cellar/groff/1.23.0_1/share/groff/1.23.0/tmac/an-ext.tmac
Except for .SB, definitions of macros described above as
extensions are contained in this file; in some cases, they are
simpler versions of definitions appearing in an.tmac, and are
ignored if the formatter is GNU troff. They are written to be
compatible with AT&T troff and permissively licensed—not
copylefted. To reduce the risk of name space collisions, string
and register names begin only with “m”. We encourage man page
authors who are concerned about portability to legacy Unix
systems to copy these definitions into their pages, and
maintainers of troff implementations or work-alike systems that
format man pages to re-use them.
The definitions for these macros are read after a page calls
.TH, so they will replace any macros of the same names preceding
it in your file. If you use your own implementations of these
macros, they must be defined after .TH is called to have any
effect. Furthermore, it is wise to define such page-local
macros (if at all) after the “Name” section to accommodate timid
makewhatis or mandb implementations that may give up their scan
for indexing material early.
/opt/homebrew/Cellar/groff/1.23.0_1/share/groff/1.23.0/tmac/man.tmac
This is a wrapper that loads an.tmac.
/opt/homebrew/Cellar/groff/1.23.0_1/share/groff/1.23.0/tmac/mandoc.tmac
This is a wrapper that loads andoc.tmac.
/opt/homebrew/etc/groff/site-tmac/man.local
Put site-local changes and customizations into this file.
.\" Use narrower indentation on terminals and similar.
.if n .nr IN 4n
.\" Put only one space after the end of a sentence.
.ss 12 0 \" See groff(7).
.\" Keep pages narrow even on wide terminals.
.if n .if \n[LL]>78n .nr LL 78n
.\" Ensure hyperlinks are enabled for terminals.
.nr U 1
On multi-user systems, it is more considerate to users whose
preferences may differ from the administrator's to be less
aggressive with such settings, or to permit their override with
a user-specific man.local file. Place the requests below at the
end of the site-local file to manifest courtesy.
.soquiet \V[XDG_CONFIG_HOME]/man.local
.soquiet \V[HOME]/.man.local
However, a security-sandboxed man(1) program may lack permission
to open such files.
Notes
Some tips on troubleshooting your man pages follow.
• Some ASCII characters look funny or copy and paste wrong.
On devices with large glyph repertoires, like UTF-8-capable
terminals and PDF, several keyboard glyphs are mapped to code
points outside the Unicode basic Latin range because that
usually results in better typography in the general case. When
documenting GNU/Linux command or C language syntax, however,
this translation is sometimes not desirable.
To get a “literal”... ...should be input.
────────────────────────────────────────────
' \(aq
- \-
\ \(rs
^ \(ha
` \(ga
~ \(ti
────────────────────────────────────────────
Additionally, if a neutral double quote (") is needed in a macro
argument, you can use \(dq to get it. You should not use \(aq
for an ordinary apostrophe (as in “can't”) or \- for an ordinary
hyphen (as in “word-aligned”). Review subsection “Portability”
above.
• Do I ever need to use an empty macro argument ("")?
Probably not. When this seems necessary, often a shorter or
clearer alternative is available.
Instead of... ...should be considered.
────────────────────────────────────────────────────────────────
.TP "" .TP
────────────────────────────────────────────────────────────────
.BI "" italic-text bold-text .IB italic-text bold-text
────────────────────────────────────────────────────────────────
.TH foo 1 "" "foo 1.2.3" .TH foo 1 yyyy-mm-dd "foo 1.2.3"
────────────────────────────────────────────────────────────────
.IP "" 4n .IP
────────────────────────────────────────────────────────────────
.IP "" 4n .RS 4n
paragraph .P
... paragraph
... .RE
────────────────────────────────────────────────────────────────
.B one two "" three .B one two three
In the title heading (.TH), the date of the page's last revision
is more important than packaging information; it should not be
omitted. Ideally, a page maintainer will keep both up to date.
.IP is sometimes ill-understood and misused, especially when no
marker argument is supplied—an indentation argument is not
required. By setting an explicit indentation, you may be
overriding the reader's preference as set with the -rIN option.
If your page renders adequately without one, use the simpler
form. If you need to indent multiple (unmarked) paragraphs,
consider setting an inset region with .RS and .RE instead.
In the last example, the empty argument does have a subtly
different effect than its suggested replacement: the empty
argument causes an additional space character to be interpolated
between the arguments “two” and “three”—but it is a regular
breaking space, so it can be discarded at the end of an output
line. It is better not to be subtle, particularly with space,
which can be overlooked in source and rendered forms.
• .RS doesn't indent relative to my indented paragraph.
The .RS macro sets the left margin; that is, the position at
which an ordinary paragraph (.P and its synonyms) will be set.
.IP, .TP, and the deprecated .HP use the same default
indentation. If not given an argument, .RS moves the left
margin by this same amount. To create an inset relative to an
indented paragraph, call .RS repeatedly until an acceptable
indentation is achieved, or give .RS an indentation argument
that is at least as much as the paragraph's indentation amount
relative to an adjacent .P paragraph. See subsection
“Horizontal and vertical spacing” above for the values.
Another approach you can use with tagged paragraphs is to place
an .RS call immediately after the paragraph tag; this will also
force a break regardless of the width of the tag, which some
authors prefer. Follow-up paragraphs under the tag can then be
set with .P instead of .IP. Remember to use .RE to end the
indented region before starting the next tagged paragraph (at
the appropriate nesting level).
• .RE doesn't move the inset back to the expected level.
• warning: scaling unit invalid in context
• warning: register 'an-saved-marginn' not defined
• warning: register 'an-saved-prevailing-indentn' not defined
The .RS macro takes an indentation amount as an argument; the
.RE macro's argument is a specific inset level. .RE 1 goes to
the level before any .RS macros were called, .RE 2 goes to the
level of the first .RS call you made, and so forth. If you
desire symmetry in your macro calls, simply issue one .RE
without an argument for each .RS that precedes it.
After calls to the .SH and .SS sectioning macros, all relative
insets are cleared and calls to .RE have no effect until .RS is
used again.
• Do I need to keep typing the indentation in a series of .IP calls?
Not if you don't want to change it. Review subsection
“Horizontal and vertical spacing” above.
Instead of... ...should be considered.
─────────────────────────────────────────────
.IP \(bu 4n .IP \(bu 4n
paragraph paragraph
.IP \(bu 4n .IP \(bu
another-paragraph another-paragraph
─────────────────────────────────────────────
• Why doesn't the package provide a string to insert an ellipsis?
Examples of ellipsis usage are shown above, in subsection
“Command synopsis macros”. The idiomatic roff ellipsis is three
dots (periods) with thin space escape sequences \| internally
separating them. Since dots both begin control lines and are
candidate end-of-sentence characters, however, it is sometimes
necessary to prefix and/or suffix an ellipsis with the dummy
character escape sequence \&. That fact stands even if a string
is defined to contain the sequence; further, if the string ends
with \&, end-of-sentence detection is defeated when you use the
string at the end of an actual sentence. (Ending a sentence
with an ellipsis is often poor style, but not always.) A
hypothetical string EL that contained an ellipsis, but not the
trailing dummy character \&, would then need to be suffixed with
the latter when not ending a sentence.
Instead of... ...do this.
──────────────────────────────────────────────────
.ds EL \&.\|.\|. Arguments are
Arguments are .IR src-file\~ .\|.\|.\&
.IR src-file\~ \*(EL\& .IR dest-dir .
.IR dest-dir .
──────────────────────────────────────────────────
The first column practices a false economy; the savings in
typing is offset by the cost of obscuring even the suggestion of
an ellipsis to a casual reader of the source document, and
reduced portability to non-roff man page formatters that cannot
handle string definitions.
There is an ellipsis code point in Unicode, and some fonts have
an ellipsis glyph, which some man pages have accessed in a non-
portable way with the font-dependent \N escape sequence. We
discourage the use of these; on terminals, they may crowd the
dots into a half-width character cell, and will not render at
all if the output device doesn't have the glyph. In syntax
synopses, missing ellipses can cause great confusion. Dots and
space are universally supported.
Authors
The initial GNU implementation of the man macro package was written by
James Clark. Later, Werner Lemberg <wl@gnu.org> supplied the S, LT,
and cR registers, the last a 4.3BSD-Reno mdoc(7) feature. Larry Kollar
<kollar@alltel.net> added the FT, HY, and SN registers; the HF string;
and the PT and BT macros. G. Branden Robinson
<g.branden.robinson@gmail.com> implemented the AD and MF strings; CS,
CT, and U registers; and the MR macro. Except for .SB, the extension
macros were written by Lemberg, Eric S. Raymond <esr@thyrsus.com>, and
Robinson.
This document was originally written for the Debian GNU/Linux system by
Susan G. Kleinmann <sgk@debian.org>. It was corrected and updated by
Lemberg and Robinson. The extension macros were documented by Raymond
and Robinson. Raymond also originated the portability section, to
which Ingo Schwarze <schwarze@usta.de> contributed most of the material
on escape sequences.
See also
tbl(1), eqn(1), and refer(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 the BSD-originated alternative macro
package for man pages.
groff_man(7), groff(7), groff_char(7), man(7)
groff 1.23.0 5 July 2023 groff_man_style(7)