# groff_man_style

## 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 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
           **.HP** Begin paragraph with hanging indent   Paragraphing macros
           **.I** Italic                                Font style macros
           **.IB** Italic, bold alternating              Font style macros
           **.IP** Indented paragraph                    Paragraphing macros
           **.IR** Italic, roman alternating             Font style macros
           **.LP** Begin paragraph                       Paragraphing macros
           **.ME** Mail-to end                           Hyperlink macros
           **.MR** Man page cross reference              Hyperlink macros
           **.MT** Mail-to start                         Hyperlink macros
           **.P** Begin paragraph                       Paragraphing macros
           **.PP** Begin paragraph                       Paragraphing macros
           **.RB** Roman, bold alternating               Font style macros
           **.RE** Relative inset end                    Document structure macros
           **.RI** Roman, italic alternating             Font style macros
           **.RS** Relative inset start                  Document structure macros
           **.SH** Section heading                       Document structure macros
           **.SM** Small                                 Font style macros
           **.SS** Subsection heading                    Document structure macros
           **.SY** Synopsis start                        Synopsis macros
           **.TH** Title heading                         Document structure macros
           **.TP** Tagged paragraph                      Paragraphing macros
           **.TQ** Supplemental paragraph tag            Paragraphing macros
           **.UE** URI end                               Hyperlink macros
           **.UR** URI start                             Hyperlink macros
           **.YS** Synopsis end                          Synopsis macros
    
           We discuss other macros (**AT** , **DT** , **OP** , **PD** , **SB** , and **UC**) in subsection
           “Deprecated features” below.
    
           Throughout Unix documentation, a manual entry is referred to
           simply as a “man page”, regardless of its length, without gendered
           implication, and irrespective of the macro package selected for
           its composition.
    
           A 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._  Breaks can
           occur at explicit hyphens, at **\%** or **\:** escape sequences (see
           subsection “Portability” below), or at predetermined locations in
           a word 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.  The formatter prepares output for _terminals_ or for
           more capable _typesetters_ that can change the type size and font
           family.
    
           A _roff_ document can contain _control lines,_ which start with a dot
           (**.**) or neutral apostrophe (**'**).  All other input lines are _text_
           _lines_ to be formatted.  A _macro_ collects control and/or text lines
           to ease document composition.  _man_ is a _macro package._  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.
    
           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 you require an
           empty macro argument, specify it as a pair of neutral 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.  Given no argument,
                  **SH** plants a one-line input trap; text on the next line
                  becomes _heading-text._  The heading text is set in bold (or
                  the font specified by the string **HF**), and, on typesetters,
                  slightly larger than the base type size.  If the heading
                  font **\*[HF]** is bold, use of an italic style in _heading-text_
                  is mapped to the bold-italic style if available in the font
                  family.  The inset level is reset to 1; see subsection
                  “Horizontal and vertical spacing” below.  Text lines after
                  the call are set as an ordinary paragraph (**P**).
    
                  The content of _heading-text_ and ordering of sections
                  follows a set of common practices, as does much of the
                  layout of material within sections.  For example, a section
                  called “Name” or “NAME” must exist, must be the first
                  section after the **TH** call, and must contain only text of
                  the form
                         _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**).
                  Given no argument, **SS** plants a one-line input trap; text on
                  the next line becomes _subheading-text._  The subheading text
                  is set in bold (or the font specified by the string **HF**).
                  If the heading font **\*[HF]** is bold, use of an italic style
                  in _subheading-text_ is mapped to the bold-italic style if
                  available in the font family.  The inset level is reset to
                  1; see subsection “Horizontal and vertical spacing” below.
                  Text lines after the call are set as an ordinary paragraph
                  (**P**).
    
           **.EX**
           **.EE** Begin and end example.  After **EX** , filling is disabled (and,
                  on typesetters, a monospaced font family is selected).
                  Calling **EE** enables filling (and restores the previous
                  family).
    
                  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.
    
                  Ninth Edition Unix introduced the **EX** and **EE** extensions.
                  Documenter's Workbench (DWB), Heirloom Doctools, and Plan 9
                  _troff_ s, and _mandoc_ (since 1.12.2) support them.  Solaris 10
                  _troff_ does not.
    
           **.RS**[_inset-amount_]
                  Start new relative inset.  _man_ saves any current inset
                  amount and moves right by: _inset-amount,_ if specified; the
                  _indentation_ amount of the preceding **IP** , **TP** , or **HP** macro
                  call if no (sub-)sectioning or ordinary paragraphing macro
                  has intervened; or the amount of the **IN** register.  **RS** calls
                  can nest; each increments by 1 the _level_ used by **RE**.  The
                  level prior to any **RS** call is 1.
    
           **.RE**[_inset-level_]
                  End a relative inset, restoring the inset amount of _inset-_
                  _level,_ or 1 if none is specified.
    
       **Paragraphing macros**
           These macros break the output line.  An _ordinary_ paragraph (**P**)
           like this one indents all output lines by the same amount.  A
           hanging paragraph (**HP**) is a cosmetic variant of **P** with a hanging
           indent.  Definition lists frequently occur in man pages; these can
           be set as _tagged paragraphs,_ which have one (**TP**) or more (**TQ**)
           leading tags followed by a paragraph that has an additional
           indentation.  The indented paragraph (**IP**) macro is useful to
           continue the indented content of a narrative started with **TP** , or
           to present an itemized or ordered list.  If paragraph macro has
           been called since **SH** or **SS** , all except for **TQ** follow the break
           with vertical space (in an amount configured by the deprecated **PD**
           macro); see subsection “Horizontal and vertical spacing” below.
           Except for **TQ** , these macros reset the type size and font style to
           defaults, and restore the configured hyphenation mode.
    
           **.P**
           **.LP**
           **.PP** Begin a new paragraph; these macros are synonymous.  Any
                  indentation from use of **IP** , **TP** , or **HP** is cleared.  The
                  inset amount, as affected by **RS** and **RE** , is not.
    
           **.HP**[_indentation_]
                  Set a paragraph with a hanging indentation.  Text on output
                  lines after the first is indented by _indentation,_ if
                  specified, and by the amount of the **IN** register otherwise.
    
                  _Caution:_ A hanging indentation cannot be expressed
                  naturally in (pure) HTML, a hanging paragraph is not
                  distinguishable from an ordinary one if it formats on only
                  one output line, and non-_roff_ -based man page interpreters
                  may treat **HP** as an ordinary paragraph anyway.  Thus,
                  information or distinctions you mean to express with
                  indentation may be lost.
    
           **.TP**[_indentation_]
                  Set an indented paragraph with a leading unindented tag.
                  The macro plants a one-line input trap that honors the **\c**
                  escape sequence; text on the next line becomes the tag, set
                  without indentation.  Text on subsequent lines is indented
                  by _indentation,_ if specified, and by the amount of the **IN**
                  register otherwise.  If the tag, plus the “tag spacing”
                  stored in the **TS** register (see section “Options” below) is
                  wider than the indentation, the package breaks the line
                  after the tag.
    
                  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 DWB, Plan 9, or Solaris 10 _troff_ s.
    
                  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; DWB, Plan 9, or Solaris 10 _troff_ s do not.
    
           **.SY** _keyword_ [_suffix_]
                  Begin synopsis.  Adjustment and automatic hyphenation are
                  disabled.  If **SY** has already been called without a
                  corresponding **YS** , a break is performed.  _keyword_ and any
                  _suffix_ are set in bold.  When _suffix_ is present, _groff man_
                  sets the next word after it without intervening space.  If
                  a break is required in subsequent text (up to a
                  paragraphing, sectioning, or **YS** macro call), lines after
                  the first are indented.  Unless the previous synopsis's
                  indentation is reused (see **YS** below), output lines after
                  the first indent by the width of the pending output line up
                  to the end of _keyword_ plus a space, if _keyword_ is the only
                  argument, and up to the end of _suffix_ otherwise.
    
           **.YS**[_reuse-indentation_]
                  End synopsis, breaking the line and restoring indentation,
                  adjustment, and hyphenation to their previous states.  If
                  an argument is given, the indentation corresponding to the
                  previous **SY** call is reused by the next **SY** call instead of
                  being computed.
    
           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
    
           Given the foregoing input, _groff man_ 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 because it is followed by characters that are
              transparent to end-of-sentence detection, and/or a newline,
              which would in turn normally cause the formatter to place
              additional inter-sentence space 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
    
           _groff 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**.
           Mark email addresses with **MT** /**ME** and other sorts of URI with **UR** /**UE**.
           To hyperlink text, terminals and pager programs must support
           ECMA-48 OSC 8 escape sequences (see _grotty_(1)).  When device
           support is unavailable or disabled with the **U** register (see
           section “Options” below), _groff man_ renders these URIs between
           angle brackets (**⟨ ⟩**) after the linked text.
    
           **MT** , **ME** , **UR** , and **UE** are GNU extensions supported by Heirloom
           Doctools and _mandoc_ (**UR** /**UE** since 1.12.3; **MT** /**ME** since 1.14.2) but
           not by DWB, Plan 9 (original), or Solaris 10 _troff_ s.  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 subsection “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.  The macros **BI** , **BR** , **IB** , **IR** , **RB** , and **RI** set
           their odd- and even-numbered arguments as text in the alternating
           styles their names indicate, with no space separating them.
    
           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.  Given no argument, **B** plants a one-line
                  input trap; text on the next line, which can be further
                  formatted with a macro, is set in bold.
    
                  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.  Given no argument,
                  **I** plants a one-line input trap; text on the next line,
                  which can be further formatted with a macro, is set in an
                  italic or oblique face.
    
                  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.  Given no argument, **SM** plants a one-line input
                  trap; text on the next line, which can be further formatted
                  with a macro, is set smaller.
    
                  _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 16, or POSIX.1-2024; 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 **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 **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 **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
           **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 **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.  _groff man_
           supports others for configuration of rendering parameters; see
           section “Options” below.
    
           **\*R** interpolates a special character escape sequence for the
                  “registered sign” glyph, **\(rg** , if available, and “(Reg.)”
                  otherwise.
    
           **\*S** interpolates an escape sequence setting the type size to
                  the document default.
    
           **\*(lq**
           **\*(rq** interpolate special character escape sequences for left and
                  right double-quotation marks, **\(lq** and **\(rq** , respectively.
    
           **\*(Tm** interpolates a special character escape sequence for the
                  “trade mark sign” glyph, **\(tm** , if available, and “(TM)”
                  otherwise.
    
           A contemporary man page needs none of the above.  **\*S** is
           superfluous; 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 10 _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.
    
           In _roff_ systems, elemental typesetting functions called _requests_
           and _escape sequences_ control formatting operations.  A request
           appears on a control line.  An escape sequence starts with a
           backslash (**\**) and can appear anywhere.  However, use of _roff_
           requests (apart from the empty request “**.** ”) risks poor rendering
           when a page is processed by non-_roff_ formatters that attempt to
           interpret page sources.  (Historically, this was commonly
           attempted for HTML conversion.)  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, causing a document's
           contents to be presented incomprehensibly or omitted entirely.
    
           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.  Splitting excessively long input
                     lines can ease 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 DWB, Plan 9, or Solaris 10
                     _troff_ s.
    
           **\~** 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 DWB or Solaris 10 _troff_ s.
    
           **\ &        **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.  Nothing on the input line after this escape
                     sequence is formatted.  **\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
    
                     Normally, if filling is enabled, the formatter treats
                     the end of a text line like a space.  It checks for the
                     end of a sentence, and _may_ break the output line (if
                     not, it inserts an adjustable space).  If filling is
                     disabled, the formatter _will_ break the output line, as
                     in **EX** /**EE** examples.  The formatter interprets the next
                     input line as usual, recognizing control lines,
                     including macro calls (contrast with **\**_newline_).
    
                     The **\f** font selection escape sequence is an alternative
                     to **\c** ; 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 DWB, Plan 9, or
           Solaris 10 _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 DWB, Plan 9, or
           Solaris 10 _troff_ s.
    
           **\-** 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.
           **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.
    
           **.OP** _option-name_ [_option-argument_]
                  Indicate an optional command parameter called _option-name_ ,
                  which is set in bold.  If the option takes an argument,
                  specify _option-argument_ using a noun, abbreviation, or
                  hyphenated noun phrase.  If present, _option-argument_ is
                  preceded by a space and set in italics.  Square brackets in
                  roman surround both arguments.
    
                  Use of this quasi-semantic macro, an extension whose name
                  originated in DWB _troff_ , is deprecated; _groff_ 's
                  implementation differs.  Neither can easily be used to
                  annotate options that take optional arguments or options
                  whose arguments have internal structure (such as a mixture
                  of literal and variable components).  One could work around
                  these limitations with font selection escape sequences, but
                  font style alternation macros are preferable; they are more
                  flexible and perform italic corrections on typesetters.
    
           **.PD**[_vertical-space_]
                  Configure the amount of vertical space between paragraphs
                  or (sub)sections.  The optional argument _vertical-space_
                  specifies the amount; the default scaling unit is “v”.
                  Without an argument, inter-paragraph spacing resets to its
                  default value; see subsection “Horizontal and vertical
                  spacing” above.
    
                  Use of this presentation-oriented macro is deprecated.  It
                  translates poorly to HTML, under which exact control of
                  inter-paragraph spacing is not readily available.  Thus,
                  information or distinctions that you use **PD** to express are
                  likely to be lost.
    
           **.SB**[_text_]
                  Set _text_ in bold and (on typesetters) one point smaller
                  than the default type size.  Given no argument, **SB** plants a
                  one-line input trap; text on the next line, which can be
                  further formatted with a macro, is set smaller and in bold.
                  Use of this macro, an extension originating in SunOS 4.0
                  _troff_ , is deprecated.  **SM** without an argument, followed
                  immediately by “**B** _text_ ”, produces the same output more
                  portably.  The macros' order is interchangeable; put _text_
                  with the latter.
    
                  _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



           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 lettercase distinctions.
    
           **-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 lettercase
                  distinctions.
    
           **-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 **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.
    
           **-rP** _n_   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.
    
           **-rS** _type-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 its legacy output mode).
    
           **-rX** _p_   Number successors of page _p_ as _p_ a, _p_ b, _p_ c, 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



           _/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 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



           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 its 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]
             ────────────────────────────────────────────
    
             If a neutral double quote (") is needed in a macro argument, you
             can use **\[dq]** to get it.  Do _not_ use **\[aq]** for an ordinary
             apostrophe (as in “can't”) or **\-** for an ordinary hyphen (as in
             “word-aligned”).
    
           • 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 **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.
    
             **RE** takes an inset _level_ as an argument, unlike **RS** 's inset
             _amount._  “**.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 with
             arguments, 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 subsection “Portability” above.  DWB, Plan 9, and
             Solaris 10 _troff_ s 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 _troff_ s, 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.
    
           • Escape sequences of the form **\[**_xx_**]** don't format correctly.
    
             The **\[**_xx_**]** special character escape sequence is a GNU _troff_
             extension also supported by _mandoc,_ Heirloom Doctools _troff,_ and
             _neatroff._  DWB, Plan 9, and Solaris 10 _troff_ s don't implement
             it.  If your man page requires portability to these formatters,
             spell such escape sequences as “**\(**_xx_ ”; no closing parenthesis is
             used.  _xx_ must be exactly two characters; _groff_char_(7) lists
             portable special character identifiers.
    


## Authors



           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⟩ contributed **EX** /**EE** , **MT** /**ME** ,
           **UR** /**UE** , **TQ** , and an early version of the **SY** /**YS** macros to _groff_ 1.20
           (2009).  G. Branden Robinson ⟨g.branden.robinson@gmail.com⟩
           implemented the **AD** and **MF** strings; **CS** , **CT** , and **U** registers; and
           the **MR** macro for _groff_ 1.23 (2023), and the **BP** , **PO** , and **TS**
           registers and a revised implementation of the **SY** /**YS** macros for
           _groff_ 1.24 (2025).
    
           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 BSD's alternative macro
           package for man pages.
    
           _groff_man_(7), _groff_(7), _groff_char_(7)
    


* * *