groff_man_style(7) — Linux manual page

Name | Synopsis | Description | Options | Files | Notes | Authors | See also | COLOPHON

groff_man_style(7)   Miscellaneous Information Manual  groff_man_style(7)

Name         top

       groff_man_style - GNU roff man page tutorial and style guide

Synopsis         top

       groff -man [option ...] [file ...]

       groff -m man [option ...] [file ...]

Description         top

       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.  Experienced man
       authors may prefer groff_man(7).

       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
       .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, HP, 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 man page employs the Unix line-ending convention (U+000A only).
       Some basic Latin characters have special meaning to roff; see
       subsection “Portability” below.

   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 can 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, then potentially
       adjusted with more space to a consistent length (see the -dAD
       option).  roff(7) details these processes.  Output is prepared for
       terminals or for more capable typesetters that can change the type
       size and font family.

       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.  Some macros interpret arguments, words that follow
       its name.  A newline, unless escaped (see subsection “Portability”
       below), marks the end of the macro call.  A control line with no
       macro name on it is called an 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.  If an empty macro
       argument is required, specify it with a pair of double-quotes
       ("").  See section “Notes” below for examples of cases where
       better alternatives to empty arguments in macro calls are
       available.  Most macro arguments are formatted as text in the
       output; exceptions are noted.  We identify some macros as
       extensions to the set originally implemented.  They are not
       supported everywhere; see subsection “Use of extensions” below.

   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 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]]]
              Populate the page header and footer.  roff systems refer to
              these collectively as “titles”.  Together, identifier and
              the section of the manual to which it belongs can uniquely
              identify a man document on the system.  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.  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 (...).  In 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 only 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, the macro 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
                     topic[, another-topic]... \- summary-description
              for tools like makewhatis(8) or mandb(8) to index them.

       .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, the macro 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).

              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 ~ (see subsection “Portability” below).
              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.

              EX and EE are extensions introduced in Ninth Edition Unix.
              Documenter's Workbench, Heirloom Doctools, and Plan 9
              troffs, and mandoc (since 1.12.2) also 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 (deprecated)
              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.  The inset amount corresponding to
              inset-level is restored.  If no argument is given, the
              inset level is reduced by 1.

   Paragraphing macros
       An ordinary paragraph (P) like this one indents all output lines
       by the same amount.  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 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.  Any
              indentation from use of IP, TP, or the deprecated HP is
              cleared.  The inset amount, as affected by RS and RE, is
              not.

       .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.

              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,
              planting a one-line input trap as with TP.

              TQ is a GNU extension supported by Heirloom Doctools troff
              (since Git snapshot 151220) and mandoc (since 1.14.5) but
              not by Documenter's Workbench, Plan 9, or Solaris troffs.

              The description of P, LP, and PP above was written using TP
              and TQ.

       .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.

              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 mark 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.

   Synopsis macros
       Use SY and YS to summarize syntax using familiar Unix conventions.
       Heirloom Doctools troff and mandoc (since 1.14.5) support these
       GNU extensions; Documenter's Workbench, 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.  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.

       Interleave multiple SY/YS blocks with paragraphing macros to
       distinguish differing modes of operation of a complex command like
       tar(1).  Omit the paragraphing macro to indicate synonymous ways
       of invoking a particular mode of operation.  Paragraphing macros
       can similarly manage grouping of function synopses.

       groff's own command-line interface illustrates most specimens of
       synopsis syntax one may encounter.

              .SY groff
              .RB [ \-abcCeEgGijklNpRsStUVXzZ ]
              .RB [ \-d\~\c
              .IR ctext ]
              .RB [ \-d\~\c
              .IB string =\c
              .IR text ]
              .RB [ \-D\~\c
              .IR fallback-encoding ]
              (and so on similarly)
              .RI [ file\~ .\|.\|.]
              .YS
              .
              .
              .P
              .SY groff
              .B \-h
              .YS
              .
              .SY groff
              .B \-\-help
              .YS
              .
              .
              .P
              .SY groff
              .B \-v
              .RI [ option\~ .\|.\|.\&]
              .RI [ file\~ .\|.\|.]
              .YS
              .
              .SY groff
              .B \-\-version
              .RI [ option\~ .\|.\|.\&]
              .RI [ file\~ .\|.\|.]
              .YS

       produces the following output.

              groff [-abcCeEgGijklNpRsStUVXzZ] [-d ctext]
                    [-d string=text] [-D fallback-encoding] [-f font-
                    family] [-F font-directory] [-I inclusion-directory]
                    [-K input-encoding] [-L spooler-argument] [-m macro-
                    package] [-M macro-directory] [-n page-number]
                    [-o page-list] [-P postprocessor-argument]
                    [-r cnumeric-expression] [-r register=numeric-
                    expression] [-T output-device] [-w warning-category]
                    [-W warning-category] [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, vertically spaces
          the input file for readability by the document maintainer.  Do
          not put blank (empty) lines in a man page source document.
          Some man(1) programs “squeeze” multiple blank output lines into
          one.

       •  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 input.

       •  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 syntactic element may be repeated arbitrarily.  Where
          whitespace separates optional arguments, a space precedes the
          ellipsis.

       •  The non-breaking adjustable space escape sequence \~ prevents
          the output line from breaking 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 is to 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.

       We might synopsize the standard C library function bsearch(3) as
       follows.

              .P
              .B void *\c
              .SY bsearch (
              .BI const\~void\~* key ,
              .BI const\~void\~* base ,
              .BI size_t\~ nmemb ,
              .BI int\~(* compar )\c
              .B (const\~void\~*, const\~void\~*));
              .YS

       man produces the following result.

              void *

              bsearch const void *key, const void *base, size_t nmemb,
                      int (*compar)(const void *, const void *));

   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
       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), MT and UR URIs are
       rendered between angle brackets after the linked text.

       MT, ME, UR, and UE are GNU extensions supported by Heirloom
       Doctools and mandoc (UR/UE since 1.12.3; MT/ME since 1.14.2) but
       not by Documenter's Workbench, Plan 9, 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.  (See section “Portability” below.)
       URIs can be lengthy; rendering them can result in jarring
       adjustment or variations in line length, or troff warnings when
       one 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.

       .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)”.

                     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/⟩.”.

       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.

   Font style macros
       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.  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 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.  If no argument is given, the macro
              plants a one-line input trap; 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, the macro 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.

              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
              typesetters.  If no argument is given, the macro plants a
              one-line input trap; text on the next line, which can be
              further formatted with a macro, is set smaller.

              Note: terminals render text at normal size instead.  Do not
              rely upon SM to communicate semantic information distinct
              from using roman style at normal size; it is 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.

       Use italics for emphasis rarely, and bold almost never.  Brief
       specimens of literal text, such as article titles, inline
       examples, mentions of individual characters or short strings, and
       (sub)section headings in man pages, are suitable 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.  They apply italic corrections 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.

                     Set an ellipsis on the math axis with the GNU extension macro
                     .BR cdots .

       .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.

                     .I file
                     is
                     .RB \[lq] - \[rq],
                     .I groff
                     reads the standard input stream.

       .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 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 the deprecated HP; an
       overriding argument is a number plus an optional scaling unit.  If
       no scaling unit is given, the man package assumes “n”; that is,
       roughly 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 inset amount and indentation are related but distinct
       parameters with the same defaults.  The former 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 with RS and started
              another ordinary paragraph with P.  We observe that all of
              its lines are inset and indented the same; contrast with a
              first-line indentation.

              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, appears 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.
                     Both the inset amount (RS) and indentation (IP)
                     affect this paragraph.
                     ┌───────────────────────────────────┐
                     │ This table is affected both by    │
                     │ the inset amount and indentation. │
                     └───────────────────────────────────┘

              •      This indented paragraph is marked with a bullet,
                     contrasting the inset amount and the indentation;
                     only the former affects the mark, but both affect
                     the text of the paragraph.

              This ordinary (P) paragraph resets the indentation, but the
              inset amount is unchanged.
              ┌─────────────────────────────┐
              │ This table is affected only │
              │ by the inset amount.        │
              └─────────────────────────────┘

       Finally, we have ended the relative inset by using RE, which
       (because we used only one RS/RE pair) has restored the inset
       amount to its initial value.  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 be comprehensible on an
       output device you fail to check, or which is developed in the
       future.  Consider the table preprocessor tbl(1) instead.

       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 1v for terminals and 0.4v for
       typesetters.  “v” is a unit of vertical distance, where 1v is the
       distance between adjacent text baselines.  (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
       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 terminals
       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 you are aiming for a pathological level of portability—
       perhaps composing a man page for consumption on simulators of
       1980s Unix systems (or Solaris troff, though even it supports
       \(rg)—avoid using the above strings.

   Use of extensions
       To ensure that your man page formats reliably on a wide variety of
       viewers, write it solely with the macros described in this page
       (except for the ones identified as deprecated, which you should
       avoid).  Macros described as extensions might be unsupported by a
       formatter that is important to your audience.  Nevertheless,
       groff's extensions are present because they perform tasks that are
       otherwise difficult or tedious to achieve portably.  If you
       require an extension but expect your man page to be rendered on a
       system that doesn't support it, write a configuration test to
       measure a property of the system, and use m4(1), sed(1), or a
       similar tool to generate a .man file from a .man.in file, defining
       page-local versions of extension macros only where necessary.  You
       can copy extension macro definitions from groff; see an-ext.tmac
       in section “Files” below.

       For example, we might put a line
              @DEFINE_MR@
       in our man document at the end of the “Name” section, test a
       system for the availability of the groff man MR macro, remove the
       line if the macro is present, and “inline” a definition otherwise,
       as follows.  (This version is slightly simplified and does not
       attempt to disable hyphenation when setting arguments to MR.)
              have_MR=$(echo .pm | troff -man 2>&1 | grep 'MR[[:space:]]')
              if [ -n "$have_MR" ]
              then
                sed '/@DEFINE_MR@/d' myprog.man.in > myprog.man
              else
                sed 's/@DEFINE_MR@/.de MR\
              .  ie \\\\n(.$=1 .I \\\\$1\
              .  el .IR \\\\$1 (\\\\$2)\\\\$3\
              ../' myprog.man.in > myprog.man
              fi
       (The profusion of backslashes is due to its status as an escape
       character in both roff and sed.)

       If the foregoing method is too much trouble, you could apply the
       radical technique of reading your man page using every formatter
       of interest, confirming satisfactory output from each.  Test
       documentation for syntactic validity and semantic correctness,
       just as you would test code.

   Portability
       An installed man page should contain Unicode basic Latin code
       points exclusively.  One can maintain it in a more convenient
       encoding, using preconv(1) to produce a basic Latin version that
       employs special character escape sequences to access code points
       necessary in non-English text.

       AT&T troff's man package and those of many of its descendants
       format man pages using a line length of 65 ens (character cells)
       on terminals, whereas groff man uses 80 ens (and mandoc(1) 78).
       Readers with low vision may also benefit from the narrower line
       length.  Inspect your documents with “nroff -t -r LL=65n -man” to
       ensure that their output lines don't overrun.

       The two major features that control formatting in the roff
       language are requests and escape sequences.  Since the man macros
       are implemented in terms of these, one can, in principle,
       supplement the functionality of man with these lower-level
       elements where necessary.

       However, use of roff requests (apart from the empty request “.”)
       risks poor rendering when your page is processed by non-roff
       formatters that attempt to interpret page sources.  (Historically,
       this was commonly attempted for HTML conversion.)  Requests may
       make assumptions that do not hold in an HTML environment.  Many of
       these programs don't interpret the full roff language (let alone
       extensions): they may be incapable of handling numeric
       expressions, control structures, or register, string, and macro
       definitions.  Such limitations can lead to portions of a document
       being presented incomprehensibly or omitted altogether.

       The wise man author quotes 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.  This
       restriction also applied to the B, I, SM, and font style
       alternation macros.

       Exercise restraint with escape sequences as with requests.  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+0020–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 as literals—namely, any of the set ' - \ ^
       ` ~ (apostrophe, dash or hyphen-minus, backslash, caret, grave
       accent, tilde).

       \"        Comment.  The formatter ignores everything after the
                 double-quote to the end of the input line.  Place whole-
                 line comments on a control line 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.  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.

                 \: is a GNU extension also supported by Heirloom
                 Doctools troff 050915 (September 2005), mandoc 1.13.1
                 (2014-08-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.

                 \~ is a GNU extension also supported by Heirloom
                 Doctools troff 050915 (September 2005), mandoc 1.9.14
                 (2009-11-16), 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.  Prefix an input line with it 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 typesetters.

       \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
                 break there (if it does not, troff inserts an adjustable
                 space); if filling is disabled, the line will break
                 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 ]

                 \c 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, the \f font selection escape sequence can
                 be used; see below.  Using \c to continue a TP paragraph
                 tag across multiple input lines renders incorrectly with
                 groff 1.22.3, mandoc 1.14.1, older versions of these
                 programs, and perhaps with some other formatters.

       \e        Format the roff 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, example, 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).  groff's extended notation for
       special characters, \[xx], is also supported by mandoc(1),
       Heirloom Doctools troff, and neatroff, but not Documenter's
       Workbench, Plan 9, or Solaris troff.

       \-     Minus sign.  \- produces the basic Latin hyphen-minus
              (U+002D) specifying Unix command-line options and
              frequently used in file names.  “-” is a hyphen in roff;
              some output devices format it as U+2010 (hyphen).

       \(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).  Employ it in
              macro calls to work around interpretation of ‘"’ as an
              argument delimiter.

                     .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, as 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).

       \(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).

       For maximum portability, avoid escape sequences (including special
       characters) not listed above.

   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 typically 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.

              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 [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 to
              restore them is desirable, consider composing a table using
              tbl(1) instead.

       .HP [indentation]
              Set a paragraph with a hanging indentation.  The first line
              sets with no (additional) indentation, and any further
              lines as with TP or IP.

              Use this presentation-oriented macro with 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.

       .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]
              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.  If no argument is given, the
              macro 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.

              Note: terminals 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 is hidden from readers using such devices.

       .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

   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 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.

       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.

Options         top

       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.

       -rBP=base-paragraph-inset
              Set the inset amount for ordinary paragraphs not within an
              RS/RE inset.  The default is 5n.

       -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 terminals; 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.

       -rCHECKSTYLE=n
              Report problems with usage of this macro package exhibited
              by the input at verbosity level n, where n is an integer in
              the range 0–3, inclusive; 0 disables the messages and is
              the default.  This feature is a development and debugging
              aid for man page maintainers; the problems diagnosed, and
              range and meanings of the supported levels are subject to
              change.

       -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 identifier (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 - 1v”.

       -dHF=heading-font
              Select 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 default indentation amount used by IP, TP, and the
              deprecated HP, and the inset amount used by RS.  The
              default is 7n on terminals and 7.2n on typesetters.  Use
              only integer multiples of unit “n” on terminals for
              consistent indentation.

       -rLL=line-length
              Set line length; the default is 80n on terminals and 6.5i
              on typesetters.

       -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
              Select the font used for man page identifiers in TH calls
              and topics named in 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”, the package assumes it to be an oblique typeface,
              and applies italic corrections before and after man page
              topics and identifiers.

       -rPn   Start enumeration of pages at n.  The default is 1.

       -rPO=page-offset
              Set page offset; the default is 0 on terminals and 1i on
              typesetters.

       -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.  The default is 3n.

       -rTS=separation
              Require the given separation between a TP paragraph's tag
              and its body.  The default is 2n.

       -rU0   Disable generation of URI hyperlinks in output drivers
              capable of them, making the arguments to MT and UR calls
              visible as formatted text.  grohtml(1), gropdf(1), and
              grotty(1) enable hyperlinks by default (the last only if
              not in legacy output mode).

       -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         top

       /usr/local/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).

       /usr/local/share/groff/1.23.0/tmac/andoc.tmac
              This brief groff program detects whether the man or mdoc
              macro package is being used by a document and loads the
              correct macro definitions, taking advantage of the fact
              that pages using them must call TH or Dd, respectively,
              before any other macros.  A man program or a user typing,
              for example, “groff -mandoc page.1”, need not know which
              package the file page.1 uses.  Multiple man pages, in
              either format, can be handled; andoc reloads each macro
              package as necessary.  Page-local redefinitions of names
              used by the man or mdoc packages prior to TH or Dd calls
              are “clobbered” by the reloading process.  If you want to
              provide your own definition of an extension macro to ensure
              its availability, the an-ext.tmac entry below offers
              advice.

       /usr/local/share/groff/1.23.0/tmac/an-ext.tmac
              Definitions of macros described above as extensions (and
              not deprecated) 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.  To ensure reliable rendering, define
              them after your page calls TH; see the discussion of andoc
              .tmac above.  Further, it is wise to define such page-local
              macros (if at all) after the “Name” section to accommodate
              timid makewhatis(8) or mandb(8) implementations that easily
              give up scanning for indexing material.

       /usr/local/share/groff/1.23.0/tmac/man.tmac
              is a wrapper enabling the package to be loaded with the
              option “-m man”.

       /usr/local/share/groff/1.23.0/tmac/mandoc.tmac
              is a wrapper enabling andoc.tmac to be loaded with the
              option “-m mandoc”.

       /usr/local/share/groff/site-tmac/man.local
              Put site-local changes and customizations into this file.

                     .\" 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]>80n .nr LL 80n

              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         top

       Some tips on composing and troubleshooting your man pages follow.

       • What's the difference between a man page topic and identifier?

         A single man page may document several related but distinct
         topics.  For example, printf(3) and fprintf(3) are often
         presented together.  Moreover, multiple programming languages
         have functions named “printf”, and may document these in a man
         page.  The identifier is intended to (with the section) uniquely
         identify a page on the system; it may furthermore correspond
         closely to the file name of the document.

         The man(1) librarian makes access to man pages convenient by
         resolving topics to man page identifiers.  Thus, you can type
         “man fprintf”, and other pages can refer to it, without knowing
         whether the installed document uses “printf”, “fprintf”, or even
         “c_printf” as an identifier.

       • Some ASCII characters look funny or copy and paste wrong.

         On devices with large glyph repertoires, like UTF-8-capable
         terminals and PDF, GNU troff, like AT&T troff before it, maps
         several keycaps to code points outside the Unicode basic Latin
         range (historically “ASCII”) 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 keeps both up to date.

         IP is sometimes ill-understood and misused, especially when no
         mark 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 determines the inset amount, the position at which
         an ordinary paragraph (P and its synonyms) is set; the value of
         the IN register determines its default amount.  This register
         also determines the default indentation used by IP, TP, and the
         deprecated HP.  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 ordinary (P) paragraph.

         Another approach to tagged paragraphs places an RS call
         immediately after the tag; this also forces a break regardless
         of the tag's width, 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.

         The RS macro takes an inset amount as an argument; the RE
         macro's argument is an 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.

         The SH and SS sectioning macros clear relative insets; RE calls
         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
         “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.

         Unicode defines an ellipsis code point, and some fonts have an
         ellipsis glyph, which some man pages have accessed non-portably
         with the font-dependent \N escape sequence.  We discourage their
         use; on terminals, they may crowd the dots into a half-width
         character cell, and do not render at all if the output device
         lacks the glyph.  In synopses, missing ellipses can mislead the
         reader.  Dots and space are universally supported.

       • When and how should I use quotation marks?

         As noted above in subsection “Font style macros”, apply
         quotation marks to “brief specimens of literal text, such as
         article titles, inline examples, mentions of individual
         characters or short strings, and (sub)section headings in man
         pages”.  Multi-word literals, such as Unix commands, when set
         inline (as opposed to displayed between EX and EE), should be
         quoted to ensure that the boundaries of the literal are clear
         even when the material is stripped of font styling by, for
         example, copy-and-paste operations.  groff, Heirloom Doctools
         troff, neatroff, and mandoc support all of the special
         characters \(oq, \(cq, \(lq, \(rq, \(aq, and \(dq described in
         section “Portability” above.  Solaris 10, DWB, and Plan 9 troffs
         do not.

         Historically, man pages used ` and ' exclusively for directional
         single quotation marks.  However, in recent years, some
         distributors of groff have chosen to override the meanings of
         these characters in man pages, remapping them to their Unicode
         Basic Latin code points.  Unfortunately, ` and ' are the only
         reliable means of obtaining directional single quotation marks
         in AT&T troff; in that implementation, often no special
         character escape sequences exist to obtain them.  Further, AT&T
         troff's special character identifiers, like its font names, were
         device-specific.  To achieve quotation portably in man pages
         rendered both by AT&T and more modern troffs, consider adding a
         preamble to your page after the TH call as follows.
                .ie \n(.g \{\
                .  ds oq \(oq
                .  ds cq \(cq
                .\}
                .el \{\
                .  ds oq `
                .  ds cq '
                .\}
       You must then use the \* escape sequence to interpolate the
       quotation mark strings.
                The command
                .RB \*(oq "while ! git pull; do sleep 10; done" \*(cq
                retries an update from the repository until it succeeds.
       If this procedure seems complex, petition your distributor to
       revert their remapping of the ` and ' characters.

Authors         top

       James Clark wrote the initial GNU implementation of the man macro
       package.  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 in groff 1.19 (2003).  Lemberg
       and Eric S. Raymond ⟨esr@thyrsus.com⟩ wrote EX/EE, MT/ME, UR/UE,
       SY/YS, and TQ macros for groff 1.20 (2009).  G. Branden Robinson
       ⟨g.branden.robinson@gmail.com⟩ implemented the AD and MF strings;
       BP, CS, CT, PO, TS, and U registers; and the MR macro.

       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         top

       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 BSD's alternative macro
       package for man pages.

       groff_man(7), groff(7), groff_char(7)

COLOPHON         top

       This page is part of the groff (GNU troff) project.  Information
       about the project can be found at 
       ⟨http://www.gnu.org/software/groff/⟩.  If you have a bug report for
       this manual page, see ⟨http://www.gnu.org/software/groff/⟩.  This
       page was obtained from the project's upstream Git repository
       ⟨https://git.savannah.gnu.org/git/groff.git⟩ on 2025-02-02.  (At
       that time, the date of the most recent commit that was found in
       the repository was 2025-01-28.)  If you discover any rendering
       problems in this HTML version of the page, or you believe there is
       a better or more up-to-date source for the page, or you have
       corrections or improvements to the information in this COLOPHON
       (which is not part of the original manual page), send a mail to
       man-pages@man7.org

groff 1.23.0.2782-1eed3-dirty   2025-02-01             groff_man_style(7)