summaryrefslogtreecommitdiffstats
path: root/tmac/groff_mdoc.7.man
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:44:05 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:44:05 +0000
commitd318611dd6f23fcfedd50e9b9e24620b102ba96a (patch)
tree8b9eef82ca40fdd5a8deeabf07572074c236095d /tmac/groff_mdoc.7.man
parentInitial commit. (diff)
downloadgroff-d318611dd6f23fcfedd50e9b9e24620b102ba96a.tar.xz
groff-d318611dd6f23fcfedd50e9b9e24620b102ba96a.zip
Adding upstream version 1.23.0.upstream/1.23.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tmac/groff_mdoc.7.man')
-rw-r--r--tmac/groff_mdoc.7.man5375
1 files changed, 5375 insertions, 0 deletions
diff --git a/tmac/groff_mdoc.7.man b/tmac/groff_mdoc.7.man
new file mode 100644
index 0000000..d161c86
--- /dev/null
+++ b/tmac/groff_mdoc.7.man
@@ -0,0 +1,5375 @@
+'\" t
+.\" groff_mdoc.man
+.\"
+.\" A complete reference of the mdoc macro package for GNU troff.
+.\"
+.\" Based on NetBSD's mdoc.samples.7, version 1.21.
+.\"
+.\"
+.\" Warning: You can't format this file with the old mdoc macros!
+.\"
+.\"
+.\" Copyright (C) 1990, 1993
+.\" The Regents of the University of California. All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in
+.\" the documentation and/or other materials provided with the
+.\" distribution.
+.\" 3. [Deleted. See
+.\" ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
+.\" 4. Neither the name of the University nor the names of its
+.\" contributors may be used to endorse or promote products derived
+.\" from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS"
+.\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+.\" PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
+.\" CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" @(#)mdoc.samples.7 8.2 (Berkeley) 12/30/93
+.\"
+.\" This reference invokes every macro in the package several times and
+.\" is guaranteed to give worst-case performance for an already
+.\" extremely slow package.
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr *groff_groff_mdoc_7_man_C \n[.cp]
+.cp 0
+.
+.
+.Dd @MDATE@
+.Dt groff_mdoc 7
+.Os groff @VERSION@
+.
+.
+.Sh Name
+.
+.Nm groff_mdoc
+.Nd compose BSD-style manual (man) pages with GNU
+.Xr roff
+.
+.
+.Sh Synopsis
+.
+.Nm groff Fl m Ns Cm doc Ar file No ...
+.
+.
+.Sh Description
+.
+The GNU implementation of the
+.Xr mdoc
+macro package is part of the
+.Xr groff @MAN1EXT@
+document formatting system.
+.
+.Xr mdoc
+is a
+structurally- and semantically-oriented package for writing
+.Ux
+manual pages with
+.Xr @g@troff @MAN1EXT@ .
+.
+Its predecessor,
+the
+.Xr man 7
+package,
+primarily addressed page layout and presentational concerns,
+leaving the selection of fonts and other typesetting details to the
+individual author.
+.
+This discretion has led to divergent styling practices among authors
+using it.
+.
+.
+.Pp
+.Xr mdoc
+organizes its macros into
+.Em domains .
+.
+The
+.Em "page structure domain"
+lays out the page and
+comprises titles,
+section headings,
+displays,
+and lists.
+.
+The
+.Em "general text domain"
+supplies macros to quote or style text,
+or to interpolate common noun phrases.
+.
+The
+.Em "manual domain"
+offers semantic macros corresponding to the terminology used by
+practitioners in discussion of
+.Ux
+commands,
+routines,
+and files.
+.
+Manual domain macros distinguish
+command-line arguments and options,
+function names,
+function parameters,
+pathnames,
+variables,
+cross references to other manual pages,
+and so on.
+.
+These terms are meaningful both to the author and the readers of a
+manual page.
+.
+It is hoped that the resulting increased consistency of the man page
+corpus will enable easier translation to future documentation tools.
+.
+.
+.Pp
+Throughout
+.Ux
+documentation,
+a manual entry is referred to simply as a
+.Dq "man page" ,
+regardless of its length,
+without gendered implication,
+and irrespective of the macro package selected for its composition.
+.
+.
+.Sh "Getting started"
+.
+The
+.Xr mdoc
+package attempts to simplify man page authorship and maintenance without
+requiring mastery of the
+.Xr roff
+language.
+.
+This document presents only essential facts about
+.Xr roff.
+.
+For further background,
+including a discussion of basic typographical concepts like
+.Dq breaking ,
+.Dq filling ,
+and
+.Dq adjustment ,
+see
+.Xr roff @MAN7EXT@ .
+.
+Specialized units of measurement also arise,
+namely
+ens,
+vees,
+inches,
+and points,
+abbreviated
+.Dq n ,
+.Dq v ,
+.Dq i ,
+and
+.Dq p ,
+respectively;
+see section
+.Sx Measurements
+of
+.Xr groff @MAN7EXT@ .
+.
+.
+.Pp
+For brief examples,
+we employ an arrow notation illustrating a transformation of input on
+the left to rendered output on the right.
+.
+Consider the
+.Pf . Ic \&Dq
+macro,
+which double-quotes its arguments.
+.
+.Bl -tag -width ".Dq\ man page" -offset indent -compact
+.It Li ".Dq man page"
+\[->]
+.Dq man page
+.El
+.
+.
+.Ss Usage
+.
+An
+.Xr mdoc
+.Em macro
+is
+.Em called
+by placing the
+.Xr roff
+control character,
+.Ql .\&
+(dot)
+at the beginning of a line followed by its name.
+.\" XXX; All mdoc macro names except Brq, Bro, Brc are 2 characters long
+.\" and thus portable to old troffs. Why the innovation here, when
+.\" `Cq`, `Co`, and `Cc` were available? Try to sell this reform to
+.\" Ingo Schwarze.
+.
+In this document,
+we often discuss a macro name with this leading dot to identify it
+clearly,
+but the dot is
+.Em not
+part of its name.
+.
+Space or tab characters can separate the dot from the macro name.
+.
+Arguments may follow,
+separated from the macro name and each other by spaces,
+but
+.Em not
+tabs.
+.
+The dot at the beginning of the line prepares the formatter to expect a
+macro name.
+.
+A dot followed immediately by a newline is ignored;
+this is called the
+.Em "empty request" .
+.
+To begin an input line with a dot
+(or a neutral apostrophe
+.Ql \[aq] )
+in some context other than a macro call,
+precede it with the
+.Ql \e&
+escape sequence;
+this is a dummy character,
+not formatted for output.
+.
+The backslash is the
+.Xr roff
+escape character;
+it can appear anywhere and it always followed by at least one more
+character.
+.
+If followed by a newline,
+the backslash escapes the input line break;
+you can thus keep input lines to a reasonable length without affecting
+their interpretation.
+.
+.
+.Pp
+Macros in GNU
+.Xr troff
+accept an unlimited number of arguments,
+in contrast to other
+.Xr troff Ns No s
+that often can't handle more than nine.
+.
+In limited cases,
+arguments may be continued or extended on the next input line without
+resort to the
+.Ql \[rs] Ns Em newline
+escape sequence;
+see subsection
+.Sx "Extended arguments"
+below.
+.
+Neutral double quotes
+.Li \[dq]
+can be used to group multiple words into an argument;
+see subsection
+.Sx "Passing space characters in an argument"
+below.
+.
+.
+.Pp
+Most of
+.Xr mdoc Ns No 's
+general text and manual domain macros
+.Em parse
+their argument lists
+for
+.Em callable
+macro names.
+.
+This means that an argument in the list matching a general text or
+manual domain macro name
+(and defined to be callable)
+will be called with the remaining arguments when it is encountered.
+.
+In such cases,
+the argument,
+although the name of a macro,
+is not preceded by a dot.
+.
+Macro calls can thus be nested.
+.
+This approach to macro argument processing is a unique characteristic of
+the
+.Xr mdoc
+package,
+not a general feature of
+.Xr roff
+syntax.
+.
+.
+.Pp
+For example,
+the option macro,
+.Pf . Ic \&Op ,
+may call the flag and argument macros,
+.Pf . Ic \&Fl
+and
+.Pf . Ic \&Ar ,
+to specify an optional flag with an argument.
+.
+.\" Use width of second example below.
+.Bl -tag -width ".Op\ \e&Fl\ s\ \e&Ar bytes" -offset indent -compact
+.It Li ".Op Fl s Ar bytes"
+\[->]
+.Op Fl s Ar bytes
+.El
+.
+To prevent a word from being interpreted as a macro name,
+precede it with the dummy character.
+.
+.Bl -tag -width ".Op\ \e&Fl\ s\ \e&Ar bytes" -offset indent -compact
+.It Li ".Op \e&Fl s \e&Ar bytes"
+\[->]
+.Op \&Fl s \&Ar bytes
+.El
+.
+.
+.Pp
+In this document,
+macros whose argument lists are parsed for callable arguments are
+referred to as
+.Em parsed ,
+and those that may be called from an argument list are referred to as
+.Em callable .
+.
+This usage is a technical
+.Em "faux pas" ,
+since all
+.Xr mdoc
+macros are in fact interpreted
+(unless prevented with
+.Ql \e& ) ,
+but as it is cumbersome to constantly refer to macros as
+.Dq "being able to call other macros" ,
+we employ the term
+.Dq parsed
+instead.
+.
+Except where explicitly stated,
+all
+.Xr mdoc
+macros are parsed and callable.
+.
+.
+.Pp
+In the following,
+we term an
+.Xr mdoc
+macro that starts a line
+(with a leading dot)
+a
+.Em command
+if a distinction from those appearing as arguments of other macros is
+necessary.
+.
+.
+.Ss "Passing space characters in an argument"
+.
+Sometimes it is desirable to give a macro an argument containing one or
+more space characters,
+for instance to specify a particular arrangement of arguments demanded
+by the macro.
+.
+Additionally,
+quoting multi-word arguments that are to be treated the same makes
+.Xr mdoc
+work faster;
+macros that parse arguments do so once
+(at most)
+for each.
+.
+For example,
+the function command
+.Pf . Ic \&Fn
+expects its first argument to be the name of a function and any
+remaining arguments to be function parameters.
+.
+Because C language standards mandate the inclusion of types
+.Em and
+identifiers in the parameter lists of function definitions,
+each
+.Ql \&Fn
+parameter after the first will be at least two words in length,
+as in
+.Dq Ar "int foo" .
+.
+.
+.Pp
+There are a few ways to embed a space in a macro argument.
+.
+One is to use the unadjustable space escape sequence
+.Li \[rs] Ns Em space .
+.
+The formatter treats this escape sequence as if it were any other
+printable character,
+and will not break a line there as it would a word space when the
+output line is full.
+.
+This method is useful for macro arguments that are not expected to
+straddle an output line boundary,
+but has a drawback:
+this space does not adjust as others do when the output line is
+formatted.
+.
+An alternative is to use the unbreakable space escape sequence,
+.Ql \[rs]\[ti] ,
+which cannot break but does adjust.
+.
+This
+.Xr groff
+extension is widely but not perfectly portable.
+.
+Another method is to enclose the string in double quotes.
+.
+.Bl -tag -width ".Fn\ fetch\ \[dq]char\ *str\[dq]" -offset indent \
+-compact
+.It Li ".Fn fetch char\e *str"
+\[->]
+.Fn fetch char\ *str
+.It Li ".Fn fetch char\e\[ti]*str"
+\[->]
+.Fn fetch char\~*str
+.It Li ".Fn fetch \[dq]char *str\[dq]"
+\[->]
+.Fn fetch "char *str"
+.El
+.
+If the
+.Ql \[rs]
+before the space in the first example
+or the double quotes in the third example
+were omitted,
+.Ql .Fn
+would see three arguments,
+and the result would contain an undesired comma.
+.
+.\" Use same width as before so it's easier to see the discrepancy.
+.Bl -tag -width ".Fn\ fetch\ \[dq]char\ *str\[dq]" -offset indent \
+-compact
+.It Li ".Fn fetch char *str"
+\[->]
+.Fn fetch char *str
+.El
+.
+.
+.\".Pp
+.\" For an example of what happens when the parameter list overlaps a
+.\" newline boundary,
+.\" see the
+.\" .Sx Bugs
+.\" section.
+.
+.
+.Ss "Trailing space characters"
+.
+.\" XXX: This claim of confusion is nonsense. The formatter ignores
+.\" them. If mdoc doesn't, that's a bug or design flaw. It's still
+.\" good style not to have them. Whitespace churn makes diff(1) and
+.\" revision control users unhappy.
+.\"
+.\".Xr @g@troff
+.\"can be confused by space characters at the end of a line.
+.
+It is wise to remove trailing spaces from the ends of input lines.
+.
+Should the need arise to put a formattable space at the end of a line,
+do so with the unadjustable or unbreakable space escape sequences.
+.
+.
+.Ss "Formatting the backslash glyph"
+.
+When you need the
+.Xr roff
+escape character
+.Ql \[rs]
+to appear in the output,
+use
+.Ql \[rs]e
+or
+.Ql \[rs](rs
+instead.
+.
+Technically,
+.Ql \[rs]e
+formats the current escape character;
+it works reliably as long as no
+.Xr roff
+request is used to change it,
+which should never happen in man pages.
+.
+.Ql \[rs](rs
+is a
+.Xr groff
+special character escape sequence that explicitly formats the
+.Dq "reverse solidus"
+(backslash) glyph.
+.
+.
+.Ss "Other possible pitfalls"
+.
+.Xr "groff mdoc"
+warns when an empty input line is found outside of a
+.Em display ,
+a topic presented in subsection
+.Sx "Examples and displays"
+below.
+.
+Use empty requests to space the source document for maintenance.
+.
+.
+.Pp
+Leading spaces cause a break and are formatted.
+.
+Avoid this behaviour if possible.
+.
+Similarly,
+do not put more than one space between words in an ordinary text line;
+they are not
+.Dq normalized
+to a single space as other text formatters might do.
+.
+.
+.Pp
+Don't try to use the neutral double quote character
+.Ql \[dq]
+to represent itself in an argument.
+.
+Use the special character escape sequence
+.Ql \[rs](dq
+to format it.
+.\" That's NOT a groffism, but showed up in the "post" and "Latin1"
+.\" devices of Tenth Edition Research Unix.
+.
+Further,
+this glyph should not be used for conventional quotation;
+.Xr mdoc
+offers several quotation macros.
+.
+See subsection
+.Sx "Enclosure and quoting macros"
+below.
+.
+.
+.Pp
+The formatter attempts to detect the ends of sentences and by default
+puts the equivalent of two spaces between sentences on the same output
+line;
+see
+.Xr roff @MAN7EXT@ .
+.
+To defeat this detection in a parsed list of macro arguments,
+put
+.Ql \e&
+before the punctuation mark.
+.
+Thus,
+.
+.Bd -literal -offset indent -compact
+The
+\&.Ql .
+character.
+\&.Pp
+The
+\&.Ql \e&.
+character.
+\&.Pp
+\&.No test .
+test
+\&.Pp
+\&.No test.
+test
+.Ed
+.
+gives
+.
+.Bd -filled -offset indent -compact
+The
+.Ql .
+character
+.
+.
+.Pp
+The
+.Ql \&.
+character.
+.
+.
+.Pp
+.No test .
+test
+.
+.
+.Pp
+.No test.
+test
+.Ed
+.
+as output.
+.
+As can be seen in the first and third output lines,
+.Xr mdoc
+handles punctuation characters specially in macro arguments.
+.
+This will be explained in section
+.Sx "General syntax"
+below.
+.
+.
+.Pp
+A comment in the source file of a man page can begin with
+.Sq Li .\e"
+at the start of an input line,
+.Sq Li \e"
+after other input,
+or
+.Sq Li \e#
+anywhere
+(the last is a
+.Xr groff
+extension);
+the remainder of any such line is ignored.
+.
+.
+.Sh "A man page template"
+.
+Use
+.Xr mdoc
+to construct a man page from the following template.
+.
+.Bd -literal -offset indent
+\&.\e" The following three macro calls are required.
+\&.Dd date
+\&.Dt topic [section-identifier [section-keyword-or-title]]
+\&.Os [package-or-operating system [version-or-release]]
+\&.Sh Name
+\&.Nm topic
+\&.Nd summary-description
+\&.\e" The next heading is used in sections 2 and 3.
+\&.\e" .Sh Library
+\&.\e" The next heading is used in sections 1-4, 6, 8, and 9.
+\&.Sh Synopsis
+\&.Sh Description
+\&.\e" Uncomment and populate the following sections as needed.
+\&.\e" .Sh \[dq]Implementation notes\[dq]
+\&.\e" The next heading is used in sections 2, 3, and 9.
+\&.\e" .Sh \[dq]Return values\[dq]
+\&.\e" The next heading is used in sections 1, 3, 6, and 8.
+\&.\e" .Sh Environment
+\&.\e" .Sh Files
+\&.\e" The next heading is used in sections 1, 6, and 8.
+\&.\e" .Sh \[dq]Exit status\[dq]
+\&.\e" .Sh Examples
+\&.\e" The next heading is used in sections 1, 4, 6, 8, and 9.
+\&.\e" .Sh Diagnostics
+\&.\e" .Sh Compatibility
+\&.\e" The next heading is used in sections 2, 3, 4, and 9.
+\&.\e" .Sh Errors
+\&.\e" .Sh \[dq]See also\[dq]
+\&.\e" .Sh Standards
+\&.\e" .Sh History
+\&.\e" .Sh Authors
+\&.\e" .Sh Caveats
+\&.\e" .Sh Bugs
+.Ed
+.
+.
+.Pp
+The first items in the template are the commands
+.Pf . Ic \&Dd ,
+.Pf . Ic \&Dt ,
+and
+.Pf . Ic \&Os .
+.
+They identify the page and are discussed below in section
+.Sx "Title macros" .
+.
+.
+.Pp
+The remaining items in the template are section headings
+.Pf ( Pf . Ic \&Sh ) ;
+of which
+.Sx Name
+and
+.Sx Description
+are mandatory.
+.
+These headings are discussed in section
+.Sx "Page structure domain" ,
+which follows section
+.Sx "Manual domain" .
+.
+Familiarize yourself with manual domain macros first;
+we use them to illustrate the use of page structure domain macros.
+.
+.
+.Sh Conventions
+.
+In the descriptions of macros below,
+square brackets surround optional arguments.
+.
+An ellipsis
+.Pf ( Sq ... )
+represents repetition of the preceding argument zero or more times.
+.
+Alternative values of a parameter are separated with
+.Ql | .
+.
+If a mandatory parameter can take one of several alternative values,
+use braces to enclose the set,
+with spaces and
+.Ql |
+separating the items.
+.
+.\" XXX: Angle brackets should only be necessary when space doesn't
+.\" separate parameters.
+.\" .
+.\" Metasyntactic variables are specified within angle brackets.
+.\"Bl -tag -width 6n -offset indent -compact
+.Bl -tag -offset indent -compact
+.It Nm ztar Xo
+.Brq Cm c | Cm x
+.Op Fl w Op Fl y | Fl z
+.Op Fl f Ar archive
+.Ar member No ...
+.Xc
+.El
+.
+An alternative to using braces is to separately synopsize distinct
+operation modes,
+particularly if the list of valid optional arguments is dependent on the
+user's choice of a mandatory parameter.
+.
+.Bl -tag -offset indent -compact
+.It Nm ztar Xo
+.Cm c
+.Op Fl w Op Fl y | Fl z
+.Op Fl f Ar archive
+.Ar member No ...
+.Xc
+.It Nm ztar Xo
+.Cm x
+.Op Fl w Op Fl y | Fl z
+.Op Fl f Ar archive
+.Ar member No ...
+.Xc
+.El
+.
+.
+.Pp
+Most macros affect subsequent arguments until another macro or a newline
+is encountered.
+.
+For example,
+.Sq Li ".Li ls Bq Ar file"
+doesn't produce
+.Sq Li "ls [file]" ,
+but
+.Sq Li ls Bq Ar file .
+.
+Consequently,
+a warning message is emitted for many commands if the first argument is
+itself a macro,
+since it cancels the effect of the preceding one.
+.\" XXX: I don't think it is made clear which macros eat only one
+.\" argument and which ones devour tokens until another macro is
+.\" encountered. -- GBR
+.
+On rare occasions,
+you might want to format a word along with surrounding brackets as a
+literal.
+.
+.\" XXX: Why do we need the extra "\ " for the width parameter? Without
+.\" it, the line breaks before the arrow on a 78n terminal. But there
+.\" should be room anyway...bug?
+.\"
+.\" XXX: Arguably, Bq should respect the altered font family in a `Bl`,
+.\" but it sets the brackets and argument in Times roman. Maybe all the
+.\" enclosures work this way.
+.Bl -tag -width "Li\ \[dq]ls\ [file]\[dq]\ " -offset indent -compact
+.It Li ".Li \[dq]ls [file]\[dq]"
+\[->]
+.Li "ls [file]"
+.Em "# list any files named e, f, i, or l"
+.El
+.
+.
+.Pp
+Many macros possess an implicit width,
+used when they are contained in lists and displays.
+.
+If you avoid relying on these default measurements,
+you escape potential conflicts with site-local modifications of the
+.Xr mdoc
+package.
+.
+Explicit
+.Fl width
+and
+.Fl offset
+arguments to the
+.Pf . Ic \&Bl
+and
+.Pf . Ic \&Bd
+macros are preferable.
+.
+.
+.Sh "Title macros"
+.
+We present the
+.Sy mandatory
+title macros first due to their importance even though they formally
+belong to the page structure domain macros.
+.\" XXX: This was formerly "...for someone who wishes to start writing a
+.\" man page yesterday."
+.\"
+.\" Cute joke, but we're 800+ lines into this page source and four pages
+.\" into the document when formatted for U.S. letter paper. We lost
+.\" that kind of reader last _week_.
+.
+They designate the
+topic,
+date of last revision,
+and the operating system or software project associated with the page.
+.
+Call each once at the beginning of the document.
+.
+They populate the page headers and footers,
+which are in
+.Xr roff
+parlance termed
+.Dq titles .
+.
+.
+.Bl -tag -width 6n
+.It Li .Dd Xo
+.Ar date
+.Xc
+This first macro of any
+.Xr mdoc
+manual records the last modification date of the document source.
+.
+Arguments are concatenated and separated with space characters.
+.
+.
+.Pp
+Historically,
+.Ar date
+was written in U.S.\& traditional format,
+.Do
+.\" XXX: Em -> Ar when we de-Courierize .Ar.
+.Em Month day Li , Em year
+.Dc
+where
+.Em Month
+is the full month name in English,
+.Em day
+an integer without a leading zero,
+and
+.Em year
+the four-digit year.
+.
+This localism is not enforced,
+however.
+.
+You may prefer ISO 8601 format,
+.Em YYYY-MM-DD.
+.
+A
+.Ar date
+of the form
+.Sq Li $Mdocdate: Ar Month day year Li $
+is also recognized.
+.
+It is used in
+.Ox
+manuals to automatically insert the current date when committing.
+.
+.
+.Pp
+This macro is neither callable nor parsed.
+.
+.
+.br
+.ne 5v
+.It Li .Dt Ar topic Op Ar section-identifier \
+Op Ar section-keyword-or-title
+.
+.Ar topic
+is the subject of the man page.
+.
+A
+.Ar section-identifier
+that begins with an integer in the range 1\[en]9
+or is one of the words
+.Ql unass ,
+.Ql draft ,
+or
+.Ql paper
+selects a predefined section title.
+.
+This use of
+.Dq 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.
+.
+.
+.br
+.ne 3v
+.Pp
+In this implementation,
+the following titles are defined for integral section numbers.
+.
+.
+.Bd -unfilled -offset indent
+.TS
+Lf(CR) L.
+1 \*[doc-volume-ds-1]
+2 \*[doc-volume-ds-2]
+3 \*[doc-volume-ds-3]
+4 \*[doc-volume-ds-4]
+5 \*[doc-volume-ds-5]
+6 \*[doc-volume-ds-6]
+7 \*[doc-volume-ds-7]
+8 \*[doc-volume-ds-8]
+9 \*[doc-volume-ds-9]
+.TE
+.Ed
+.
+.
+.Pp
+A section title may be arbitrary or one of the following abbreviations.
+.
+.
+.Bd -unfilled -offset indent
+.TS
+Lf(CR) L.
+USD \*[doc-volume-ds-USD]
+PS1 \*[doc-volume-ds-PS1]
+AMD \*[doc-volume-ds-AMD]
+SMM \*[doc-volume-ds-SMM]
+URM \*[doc-volume-ds-URM]
+PRM \*[doc-volume-ds-PRM]
+KM \*[doc-volume-ds-KM]
+IND \*[doc-volume-ds-IND]
+LOCAL \*[doc-volume-ds-LOCAL]
+CON \*[doc-volume-ds-CON]
+.TE
+.Ed
+.
+.
+.Pp
+For compatibility,
+.Ql MMI
+can be used for
+.Ql IND ,
+and
+.Ql LOC
+for
+.Ql LOCAL .
+.
+Values from the previous table will specify a new section title.
+.
+If
+.Ar section-keyword-or-title
+designates a computer architecture recognized by
+.Xr "groff mdoc" ,
+its value is prepended to the default section title as specified by the
+second parameter.
+.\" mandoc(1) appears to put the architecture string after (or in place
+.\" of) the section title, in parentheses.
+.
+By default,
+the following architecture keywords are defined.
+.
+\# we use 'No' to avoid hyphenation
+.\" Resort to ps/vs violence if necessary because this macro package is
+.\" obsessed with dumping gigantic piles of identifiers on users, and I
+.\" need the space to keep this macro description to a single page in
+.\" PS/PDF(!). Lists of information like this simply beg to bit-rot.
+.\" -- GBR
+.br
+.ps -2
+.vs -2
+.Bd -ragged -offset 4n
+.No acorn26 , acorn32 , algor , alpha , amd64 , amiga , amigappc ,
+.No arc , arm , arm26 , arm32 , armish , atari , aviion ,
+.No beagle , bebox , cats , cesfic , cobalt , dreamcast ,
+.No emips , evbarm , evbmips , evbppc , evbsh3 , ews4800mips ,
+.No hp300 , hp700 , hpcarm , hpcmips , hpcsh , hppa , hppa64 ,
+.No i386 , ia64 , ibmnws , iyonix , landisk , loongson , luna68k ,
+.No luna88k , m68k , mac68k , macppc , mips , mips64 , mipsco , mmeye ,
+.No mvme68k , mvme88k , mvmeppc , netwinder , news68k , newsmips ,
+.No next68k , ofppc , palm , pc532 , playstation2 , pmax , pmppc ,
+.No powerpc , prep , rs6000 , sandpoint , sbmips , sgi , sgimips , sh3 ,
+.No shark , socppc , solbourne , sparc , sparc64 , sun2 , sun3 ,
+.No tahoe , vax , x68k , x86_64 , xen , zaurus
+.Ed
+.vs
+.ps
+.
+.
+.Pp
+If a section title is not determined after the above matches have been
+attempted,
+.Ar section-keyword-or-title
+is used.
+.
+.
+.br
+.ne 10v \" Keep explanatory paragraph with the following table.
+.Pp
+The effects of varying
+.Ql .Dt
+arguments on the page header content
+are shown below.
+.
+Observe how
+.Ql \[rs]&
+prevents the numeral\~2 from being used to look up a predefined section
+title.
+.
+.
+.Pp
+.\" On terminals, 2n is as far as we can offset without overrunning a
+.\" 78n width.
+.Bd -unfilled -offset 2n
+.TS
+tab(@);
+Lf(CR)1 L2 L C R.
+\&.Dt foo 2@\[->]@foo(2)@System Calls Manual@foo(2)
+\&.Dt foo 2 m68k@\[->]@foo(2)@m68k System Calls Manual@foo(2)
+\&.Dt foo 2 baz@\[->]@foo(2)@System Calls Manual@foo(2)
+\&.Dt foo \[rs]&2 baz@\[->]@foo(2)@baz@foo(2)
+\&.Dt foo \[dq]\[dq] baz@\[->]@foo@baz@foo
+\&.Dt foo M Z80@\[->]@foo(M)@Z80@foo(M)
+.TE
+.Ed
+.
+.
+.Pp
+.Xr roff
+strings define section titles and architecture identifiers.
+.
+Site-specific additions might be found in the file
+.Pa mdoc.local ;
+see section
+.Sx Files
+below.
+.
+.
+.Pp
+This macro is neither callable nor parsed.
+.
+.
+.It Li .Os Op Ar operating-system-or-package-name \
+Op Ar version-or-release
+.
+This macro associates the document with a software distribution.
+.
+When composing a man page to be included in the base installation of an
+operating system,
+do not provide an argument;
+.Xr mdoc
+will supply it.
+.
+In this implementation,
+that default is
+.Dq "\*[doc-default-operating-system]" .
+.
+It may be overridden in the site configuration file,
+.Pa mdoc.local ;
+see section
+.Sx Files
+below.
+.
+A portable software package maintaining its own man pages can supply
+its name and version number or release identifier as optional arguments.
+.
+A
+.Em version-or-release
+argument should use the standard nomenclature for the software
+specified.
+.
+In the following table,
+recognized
+.Em version-or-release
+arguments for some predefined operating systems are listed.
+.
+As with
+.Pf . Ic \&Dt ,
+site additions might be defined in
+.Pa mdoc.local .
+.
+.Bd -ragged -compact
+.Bl -tag -width ".No DragonFly" -offset indent
+.It ATT
+7th, 7, III, 3, V, V.2, V.3, V.4
+.It BSD
+3, 4, 4.1, 4.2, 4.3, 4.3t, 4.3T, 4.3r, 4.3R, 4.4
+.It NetBSD
+0.8, 0.8a, 0.9, 0.9a, 1.0, 1.0a, 1.1, 1.2, 1.2a, 1.2b, 1.2c, 1.2d, 1.2e,
+1.3, 1.3a, 1.4, 1.4.1, 1.4.2, 1.4.3, 1.5, 1.5.1, 1.5.2, 1.5.3, 1.6,
+1.6.1, 1.6.2, 1.6.3, 2.0, 2.0.1, 2.0.2, 2.0.3, 2.1, 3.0, 3.0.1, 3.0.2,
+3.0.3, 3.1, 3.1.1, 4.0, 4.0.1, 5.0, 5.0.1, 5.0.2, 5.1, 5.1.2, 5.1.3,
+5.1.4, 5.2, 5.2.1, 5.2.2, 6.0, 6.0.1, 6.0.2, 6.0.3, 6.0.4, 6.0.5, 6.0.6,
+6.1, 6.1.1, 6.1.2, 6.1.3, 6.1.4, 6.1.5, 7.0, 7.0.1, 7.0.2, 7.1, 7.1.1,
+7.1.2, 7.2, 8.0, 8.1
+.It FreeBSD
+1.0, 1.1, 1.1.5, 1.1.5.1, 2.0, 2.0.5, 2.1, 2.1.5, 2.1.6, 2.1.7, 2.2,
+2.2.1, 2.2.2, 2.2.5, 2.2.6, 2.2.7, 2.2.8, 2.2.9, 3.0, 3.1, 3.2, 3.3,
+3.4, 3.5, 4.0, 4.1, 4.1.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.6.2, 4.7, 4.8,
+4.9, 4.10, 4.11, 5.0, 5.1, 5.2, 5.2.1, 5.3, 5.4, 5.5, 6.0, 6.1, 6.2,
+6.3, 6.4, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1, 8.2, 8.3, 8.4, 9.0, 9.1,
+9.2, 9.3, 10.0, 10.1, 10.2, 10.3, 10.4, 11.0, 11.1, 11.2, 11.3, 12.0,
+12.1
+.It OpenBSD
+2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3.0, 3.1, 3.2, 3.3,
+3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7,
+4.8, 4.9, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 6.0, 6.1,
+6.2, 6.3, 6.4, 6.5, 6.6
+.It DragonFly
+1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.8.1, 1.9, 1.10, 1.11,
+1.12, 1.12.2, 1.13, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9,
+2.9.1, 2.10, 2.10.1, 2.11, 2.12, 2.13, 3.0, 3.0.1, 3.0.2, 3.1, 3.2,
+3.2.1, 3.2.2, 3.3, 3.4, 3.4.1, 3.4.2, 3.4.3, 3.5, 3.6, 3.6.1, 3.6.2,
+3.7, 3.8, 3.8.1, 3.8.2, 4.0, 4.0.1, 4.0.2, 4.0.3, 4.0.4, 4.0.5, 4.0.6,
+4.1, 4.2, 4.2.1, 4.2.2, 4.2.3, 4.2.4, 4.3, 4.4, 4.4.1, 4.4.2, 4.4.3,
+4.5, 4.6, 4.6.1, 4.6.2, 4.7, 4.8, 4.8.1, 4.9, 5.0, 5.0.1, 5.0.2, 5.1,
+5.2, 5.2.1, 5.2.2, 5.3, 5.4, 5.4.1, 5.4.2, 5.4.3, 5.5, 5.6, 5.6.1, 5.6.2
+.It Darwin
+8.0.0, 8.1.0, 8.2.0, 8.3.0, 8.4.0, 8.5.0, 8.6.0, 8.7.0, 8.8.0, 8.9.0,
+8.10.0, 8.11.0, 9.0.0, 9.1.0, 9.2.0, 9.3.0, 9.4.0, 9.5.0, 9.6.0, 9.7.0,
+9.8.0, 10.0.0, 10.1.0, 10.2.0, 10.3.0, 10.4.0, 10.5.0, 10.6.0, 10.7.0,
+10.8.0, 11.0.0, 11.1.0, 11.2.0, 11.3.0, 11.4.0, 11.5.0, 12.0.0, 12.1.0,
+12.2.0, 13.0.0, 13.1.0, 13.2.0, 13.3.0, 13.4.0, 14.0.0, 14.1.0, 14.2.0,
+14.3.0, 14.4.0, 14.5.0, 15.0.0, 15.1.0, 15.2.0, 15.3.0, 15.4.0, 15.5.0,
+15.6.0, 16.0.0, 16.1.0, 16.2.0, 16.3.0, 16.4.0, 16.5.0, 16.6.0, 17.0.0,
+17.1.0, 17.2.0, 17.3.0, 17.4.0, 17.5.0, 17.6.0, 17.7.0, 18.0.0, 18.1.0,
+18.2.0, 18.3.0, 18.4.0, 18.5.0, 18.6.0, 18.7.0, 19.0.0, 19.1.0, 19.2.0
+.El
+.Ed
+.
+.
+.Pp
+Historically,
+the first argument used with
+.Pf . Ic \&Dt
+was
+.Li BSD
+or
+.Li ATT .
+.
+An unrecognized version argument after
+.Li ATT
+is replaced with
+.Dq Ux ;
+for other predefined abbreviations,
+it is ignored and a warning diagnostic emitted.
+.
+Otherwise,
+unrecognized arguments are displayed verbatim in the page footer.
+.
+For instance,
+this page uses
+.Dq Li .Os groff @VERSION@
+whereas a locally produced page might employ
+.Dq Li .Os \[dq]UXYZ CS Department\[dq] ,
+omitting versioning.
+.
+.
+.Pp
+This macro is neither callable nor parsed.
+.El
+.
+.
+.br
+.ne 4v
+.Sh "Introduction to manual and general text domains"
+.
+.
+.Ss "What's in a Name" Ns ... \" XXX: Ns not scrubbed for PDF bookmark
+.
+The manual domain macro names are derived from the day to day informal
+language used to describe commands, subroutines and related files.
+Slightly different variations of this language are used to describe the
+three different aspects of writing a man page.
+First, there is the description of
+.Xr mdoc
+macro command usage.
+Second is the description of a
+.Ux
+command
+.Em with
+.Xr mdoc
+macros, and third, the description of a command to a user in the verbal
+sense; that is, discussion of a command in the text of a man page.
+.
+.
+.Pp
+In the first case,
+.Xr @g@troff
+macros are themselves a type of command;
+the general syntax for a
+.Xr troff
+command is:
+.
+.Bd -filled -offset indent
+.Li ".Xx argument1 argument2" ...
+.Ed
+.
+.
+.Pp
+.
+.Ql .Xx
+is a macro command, and anything following it are arguments to
+be processed.
+In the second case, the description of a
+.Ux
+command using the manual domain macros is a bit more involved;
+a typical
+.Sx Synopsis
+command line might be displayed as:
+.
+.Bd -filled -offset indent
+.Nm filter
+.Op Fl flag
+.Ao Ar infile Ac Ao Ar outfile Ac
+.Ed
+.
+.
+.Pp
+Here,
+.Nm filter
+is the command name and the
+bracketed string
+.Fl flag
+is a
+.Em flag
+argument designated as optional by the option brackets.
+In
+.Xr mdoc
+terms,
+.Ao Ar infile Ac
+and
+.Ao Ar outfile Ac
+are called
+.Em meta arguments ;
+in this example, the user has to replace the meta expressions given in angle
+brackets with real file names.
+Note that in this document meta arguments are used to describe
+.Xr mdoc
+commands; in most man pages, meta variables are not specifically written
+with angle brackets.
+.
+The macros that formatted the above example:
+.
+.Bd -literal -offset indent
+\&.Nm filter
+\&.Op Fl flag
+\&.Ao Ar infile Ac Ao Ar outfile Ac
+.Ed
+.
+.
+.Pp
+In the third case,
+discussion of commands and command syntax includes both examples above,
+but may add more detail.
+.
+The arguments
+.Ao Ar infile Ac
+and
+.Ao Ar outfile Ac
+from the example above might be referred to as
+.Em operands
+or
+.Em file arguments .
+.
+Some command-line argument lists are quite long:
+.
+.Bd -ragged
+.Bl -tag -width ".Nm make" -offset indent -compact
+.It Nm make
+.Op Fl eiknqrstv
+.Op Fl D Ar variable
+.Op Fl d Ar flags
+.Op Fl f Ar makefile
+.Op Fl I Ar directory
+.Op Fl j Ar max_jobs
+.Op Ar variable Ns = Ns Ar value
+.Bk
+.Op Ar target No ...
+.Ek
+.El
+.Ed
+.
+.
+.Pp
+Here one might talk about the command
+.Xr make
+and qualify the argument,
+.Ar makefile ,
+as an argument to the flag,
+.Fl f ,
+or discuss the optional file operand
+.Ar target .
+In the verbal context, such detail can prevent confusion, however the
+.Xr mdoc
+package does not have a macro for an argument
+.Em to
+a flag.
+Instead the
+.Ql \&Ar
+argument macro is used for an operand or file argument like
+.Ar target
+as well as an argument to a flag like
+.Ar variable .
+The make command line was produced from:
+.
+.Bd -literal -offset indent
+\&.Nm make
+\&.Op Fl eiknqrstv
+\&.Op Fl D Ar variable
+\&.Op Fl d Ar flags
+\&.Op Fl f Ar makefile
+\&.Op Fl I Ar directory
+\&.Op Fl j Ar max_jobs
+\&.Op Ar variable Ns = Ns Ar value
+\&.Bk
+\&.Op Ar target ...
+\&.Ek
+.Ed
+.
+.
+.Pp
+The
+.Ql .Bk
+and
+.Ql .Ek
+macros are explained in
+.Sx Keeps .
+.
+.
+.Ss "General Syntax"
+.
+The manual domain and general text domain macros share a similar syntax
+with a few minor deviations;
+most notably,
+.Ql .Ar ,
+.Ql .Fl ,
+.Ql .Nm ,
+and
+.Ql .Pa
+differ only when called without arguments; and
+.Ql .Fn
+and
+.Ql .Xr
+impose an order on their argument lists.
+.
+All manual domain macros are capable of recognizing and properly
+handling punctuation,
+provided each punctuation character is separated by a leading space.
+.
+If a command is given:
+.
+.
+.Pp
+.Dl \&.Ar sptr, ptr),
+.
+.
+.Pp
+The result is:
+.
+.
+.Pp
+.Dl Ar sptr, ptr),
+.
+.
+.Pp
+The punctuation is not recognized and all is output in the
+font used by
+.Ql .Ar .
+If the punctuation is separated by a leading white space:
+.
+.
+.Pp
+.Dl \&.Ar "sptr , ptr ) ,"
+.
+.
+.Pp
+The result is:
+.
+.
+.Pp
+.Dl Ar sptr , ptr ) ,
+.
+.
+.Pp
+The punctuation is now recognized and output in the default font
+distinguishing it from the argument strings.
+.
+To remove the special meaning from a punctuation character,
+escape it with
+.Ql \e& .
+.
+.
+.Pp
+The following punctuation characters are recognized by
+.Xr mdoc :
+.
+.Bl -column -offset indent-two XXXXXX XXXXXX XXXXXX XXXXXX
+.It Li .\& Ta Li ,\& Ta Li :\& Ta Li ;\& Ta Li (\&
+.It Li )\& Ta Li [\& Ta Li ]\& Ta Li ?\& Ta Li !\&
+.El
+.
+.
+.Pp
+.
+.Xr troff
+is limited as a macro language,
+and has difficulty when presented with a string containing certain
+mathematical,
+logical,
+or quotation character sequences:
+.
+.Bd -literal -offset indent-two
+{+,\-,/,*,%,<,>,<=,>=,=,==,&,\[ga],\[aq],"}
+.Ed
+.
+.
+.Pp
+The problem is that
+.Xr troff
+may assume it is supposed to actually perform the operation or
+evaluation suggested by the characters.
+.
+To prevent the accidental evaluation of these characters,
+escape them with
+.Ql \e& .
+.
+Typical syntax is shown in the first manual domain macro displayed
+below,
+.Ql .Ad .
+.
+.
+.Sh "Manual domain"
+.
+.
+.Ss Addresses
+.
+The address macro identifies an address construct.
+.
+.
+.Pp
+.Dl Usage: .Ad Ao address Ac ...
+.
+.
+.Pp
+.Bl -tag -width ".Li .Ad\ f1\ ,\ f2\ ,\ f3\ :" -compact -offset 15n
+.It Li ".Ad addr1"
+.Ad addr1
+.It Li ".Ad addr1 ."
+.Ad addr1 .
+.It Li ".Ad addr1 , file2"
+.Ad addr1 , file2
+.It Li ".Ad f1 , f2 , f3 :"
+.Ad f1 , f2 , f3 :
+.It Li ".Ad addr ) ) ,"
+.Ad addr ) ) ,
+.El
+.
+.
+.Pp
+The default width is 12n.
+.
+.Ss "Author Name"
+.
+The
+.Ql .An
+macro is used to specify the name of the author of the item being
+documented, or the name of the author of the actual manual page.
+.
+.
+.Pp
+.Dl Usage: .An Ao author name Ac ...
+.
+.
+.Pp
+.Bl -tag -width ".Li .An\ \[dq]Joe\ Author\[dq]\ )\ )\ ," -offset 15n
+.It Li ".An \[dq]Joe Author\[dq]"
+.An "Joe Author"
+.It Li ".An \[dq]Joe Author\[dq] ,"
+.An "Joe Author" ,
+.It Li ".An \[dq]Joe Author\[dq] Aq nobody@FreeBSD.org"
+.An "Joe Author" Aq nobody@FreeBSD.org
+.It Li ".An \[dq]Joe Author\[dq] ) ) ,"
+.An "Joe Author" ) ) ,
+.El
+.
+.
+.Pp
+The default width is 12n.
+.
+.
+.Pp
+In a section titled
+.Dq Authors ,
+.Ql \&An
+causes a break,
+allowing each new name to appear on its own line.
+.
+If this is not desirable,
+.
+.Bd -literal -offset indent
+\&.An \-nosplit
+.Ed
+.
+.
+.Pp
+.
+call will turn this off.
+To turn splitting back on, write
+.
+.Bd -literal -offset indent
+\&.An \-split
+.Ed
+.
+.
+.Ss Arguments
+.
+The
+.Li .Ar
+argument macro may be used whenever an argument is referenced.
+.
+If called without arguments,
+.Sq Ar
+is output.
+.
+This places the ellipsis in italics,
+which is ugly and incorrect,
+and will be noticed on terminals that underline text instead of using an
+oblique typeface.
+.
+We recommend using
+.Ql ".Ar file \&No ..."
+instead.
+.
+.
+.Pp
+.Dl Usage: .Ar Oo Ao argument Ac Oc No ...
+.
+.
+.Pp
+.Bl -tag -width ".Li .Ar\ file1\ file2" -compact -offset 15n
+.It Li .Ar
+.Ar
+.It Li .Ar file \&No ...
+.Ar file No ...
+.It Li ".Ar file1"
+.Ar file1
+.It Li ".Ar file1 ."
+.Ar file1 .
+.It Li ".Ar file1 file2"
+.Ar file1 file2
+.It Li ".Ar f1 f2 f3 :"
+.Ar f1 f2 f3 :
+.It Li ".Ar file ) ) ,"
+.Ar file ) ) ,
+.El
+.
+.
+.Pp
+.
+The default width is 12n.
+.
+.
+.Ss "Configuration Declaration (Section Four Only)"
+.
+The
+.Ql .Cd
+macro is used to demonstrate a
+.Xr config 8
+declaration for a device interface in a section four manual.
+.
+.
+.Pp
+.Dl Usage: .Cd Ao argument Ac ...
+.
+.
+.Pp
+.Bl -tag -width ".Li .Cd\ Xdevice\ le0\ at\ scode?X" -offset 15n
+.It Li ".Cd \[dq]device le0 at scode?\[dq]"
+.Cd "device le0 at scode?"
+.El
+.
+.
+.Pp
+In a section titled
+.Dq Synopsis ,
+.Ql \&Cd
+causes a break before and after its arguments.
+.
+.
+.Pp
+The default width is 12n.
+.
+.
+.Ss "Command Modifiers"
+.
+The command modifier is identical to the
+.Ql .Fl
+(flag) command with the exception that the
+.Ql .Cm
+macro does not assert a dash in front of every argument.
+Traditionally flags are marked by the preceding dash, however, some commands
+or subsets of commands do not use them.
+Command modifiers may also be specified in conjunction with interactive
+commands such as editor commands.
+See
+.Sx Flags .
+.
+.
+.Pp
+The default width is 10n.
+.
+.
+.Ss "Defined Variables"
+.
+A variable
+(or constant)
+that is defined in an include file is specified by the macro
+.Ql .Dv .
+.
+.
+.Pp
+.Dl Usage: .Dv Ao defined-variable Ac ...
+.
+.
+.Pp
+.Bl -tag -width ".Li .Dv\ MAXHOSTNAMELEN" -compact -offset 15n
+.It Li ".Dv MAXHOSTNAMELEN"
+.Dv MAXHOSTNAMELEN
+.It Li ".Dv TIOCGPGRP )"
+.Dv TIOCGPGRP )
+.El
+.
+.
+.Pp
+.
+The default width is 12n.
+.
+.
+.Ss Errnos
+.
+The
+.Ql .Er
+errno macro specifies the error return value for section 2,
+3,
+and\~9 library routines.
+.
+The second example below shows
+.Ql .Er
+used with the
+.Ql .Bq
+general text domain macro,
+as it would be used in a section two manual page.
+.
+.
+.Pp
+.Dl Usage: .Er Ao errno type Ac ...
+.Pp
+.Bl -tag -width ".Li .Bq\ Er\ ENOTDIR" -compact -offset 15n
+.It Li ".Er ENOENT"
+.Er ENOENT
+.It Li ".Er ENOENT ) ;"
+.Er ENOENT ) ;
+.It Li ".Bq Er ENOTDIR"
+.Bq Er ENOTDIR
+.El
+.Pp
+.
+The default width is 17n.
+.
+.
+.Ss "Environment Variables"
+.
+The
+.Ql .Ev
+macro specifies an environment variable.
+.Pp
+.Dl Usage: .Ev Ao argument Ac ...
+.Pp
+.Bl -tag -width ".Li .Ev\ PRINTER\ )\ )\ ," -compact -offset 15n
+.It Li ".Ev DISPLAY"
+.Ev DISPLAY
+.It Li ".Ev PATH ."
+.Ev PATH .
+.It Li ".Ev PRINTER ) ) ,"
+.Ev PRINTER ) ) ,
+.El
+.Pp
+.
+The default width is 15n.
+.
+.
+.Ss Flags
+.
+The
+.Ql .Fl
+macro handles command-line flags.
+It prepends a dash,
+.Ql \- ,
+to the flag.
+.
+For interactive command flags that are not prepended with a dash,
+the
+.Ql .Cm
+(command modifier)
+macro is identical,
+but without the dash.
+.
+.
+.Pp
+.Dl Usage: .Fl Ao argument Ac ...
+.Pp
+.Bl -tag -width ".Li .Fl\ xyz\ )\ ," -compact -offset 15n
+.It Li .Fl
+.Fl
+.It Li ".Fl cfv"
+.Fl cfv
+.It Li ".Fl cfv ."
+.Fl cfv .
+.It Li ".Cm cfv ."
+.Cm cfv .
+.It Li ".Fl s v t"
+.Fl s v t
+.It Li ".Fl \- ,"
+.Fl \- ,
+.It Li ".Fl xyz ) ,"
+.Fl xyz ) ,
+.It Li ".Fl |"
+.Fl |
+.El
+.Pp
+The
+.Ql .Fl
+macro without any arguments results in a dash representing stdin/stdout.
+Note that giving
+.Ql .Fl
+a single dash will result in two dashes.
+.Pp
+The default width is 12n.
+.
+.
+.Ss "Function Declarations"
+.
+The
+.Ql .Fd
+macro is used in the
+.Sx Synopsis
+section with section two or three functions.
+It is neither callable nor parsed.
+.Pp
+.Dl Usage: .Fd Ao argument Ac ...
+.Pp
+.Bl -tag -width ".Li .Fd\ X#include\ <sys/types.h>X" -compact -offset 15n
+.It Li ".Fd \[dq]#include <sys/types.h>\[dq]"
+.Fd "#include <sys/types.h>"
+.El
+.
+.
+.Pp
+In a section titled
+.Dq Synopsis ,
+.Ql \&Fd
+causes a break if a function has already been presented and a break has
+not occurred,
+leaving vertical space between one function declaration and the next.
+.\" XXX: that's not what "break" means
+.
+.
+.Pp
+In a section titled
+.Dq Synopsis ,
+the
+.Ql \&In
+macro represents the
+.Li #include
+statement,
+and is the short form of the above example.
+.
+It specifies the C\~header file as being included in a C\~program.
+.
+It also causes a break.
+.
+.
+.Pp
+While not in the
+.Dq Synopsis
+section,
+it represents the header file enclosed in angle brackets.
+.
+.
+.Pp
+.Dl Usage: .In Ao header file Ac
+.
+.
+.Pp
+.Bl -tag -width ".Li .In\ stdio.h" -compact -offset 15n
+.nr in-synopsis-section 1
+.It Li ".In stdio.h"
+.In stdio.h
+.nr in-synopsis-section 0
+.It Li ".In stdio.h"
+.In stdio.h
+.El
+.
+.
+.Ss "Function Types"
+.
+This macro is intended for the
+.Dq Synopsis
+section.
+.
+It may be used anywhere else in the man page without problems,
+but its main purpose is to present the function type
+(in BSD kernel normal form)
+for the
+.Dq Synopsis
+of sections two and three.
+.
+(It causes a break,
+allowing the function name to appear on the next line.)
+.
+.
+.Pp
+.Dl Usage: .Ft Ao type Ac ...
+.Pp
+.Bl -tag -width ".Li .Ft\ struct\ stat" -compact -offset 15n
+.It Li ".Ft struct stat"
+.Ft struct stat
+.El
+.
+.
+.Ss "Functions (Library Routines)"
+.
+The
+.Ql .Fn
+macro is modeled on
+.Tn ANSI\~C
+conventions.
+.Pp
+.Dl Usage: .Fn Ao function Ac Oo Ao parameter Ac Oc ...
+.Pp
+.Bl -tag -width ".Li .Fn\ align\ Xchar\ *ptrX\ ," -compact -offset 15n
+.It Li ".Fn getchar"
+.Fn getchar
+.It Li ".Fn strlen ) ,"
+.Fn strlen ) ,
+.It Li ".Fn align \[dq]char *ptr\[dq] ,"
+.Fn align "char *ptr" ,
+.El
+.Pp
+Note that any call to another macro signals the end of the
+.Ql .Fn
+call (it will insert a closing parenthesis at that point).
+.
+.
+.Pp
+For functions with many parameters
+(which is rare),
+the macros
+.Ql .Fo
+(function open)
+and
+.Ql .Fc
+(function close)
+may be used with
+.Ql .Fa
+(function argument).
+.Pp
+Example:
+.
+.Bd -literal -offset indent
+\&.Ft int
+\&.Fo res_mkquery
+\&.Fa "int op"
+\&.Fa "char *dname"
+\&.Fa "int class"
+\&.Fa "int type"
+\&.Fa "char *data"
+\&.Fa "int datalen"
+\&.Fa "struct rrec *newrr"
+\&.Fa "char *buf"
+\&.Fa "int buflen"
+\&.Fc
+.Ed
+.Pp
+.
+Produces:
+.
+.Bd -ragged -offset indent
+.Ft int
+.Fo res_mkquery
+.Fa "int op"
+.Fa "char *dname"
+.Fa "int class"
+.Fa "int type"
+.Fa "char *data"
+.Fa "int datalen"
+.Fa "struct rrec *newrr"
+.Fa "char *buf"
+.Fa "int buflen"
+.Fc
+.Ed
+.
+.
+.Pp
+Typically,
+in a
+.Dq Synopsis
+section,
+the function delcaration will begin the line.
+.
+If more than one function is presented in the
+.Dq Synopsis
+section and a function type has not been given,
+a break will occur,
+leaving vertical space between the current and prior function names.
+.\" XXX: that's not what "break" means
+.
+.
+.Pp
+The default width values of
+.Ql .Fn
+and
+.Ql .Fo
+are 12n and 16n,
+respectively.
+.
+.
+.Ss "Function Arguments"
+.
+The
+.Ql .Fa
+macro is used to refer to function arguments (parameters) outside of the
+.Sx Synopsis
+section of the manual or inside the
+.Sx Synopsis
+section if the enclosure macros
+.Ql .Fo
+and
+.Ql .Fc
+instead of
+.Ql .Fn
+are used.
+.Ql .Fa
+may also be used to refer to structure members.
+.Pp
+.Dl Usage: .Fa Ao function argument Ac ...
+.Pp
+.Bl -tag -width ".Li .Fa\ d_namlen\ )\ )\ ," -compact -offset 15n
+.It Li ".Fa d_namlen ) ) ,"
+.Fa d_namlen ) ) ,
+.It Li ".Fa iov_len"
+.Fa iov_len
+.El
+.Pp
+.
+The default width is 12n.
+.
+.
+.Ss "Return Values"
+.
+The
+.Ql .Rv
+macro generates text for use in the
+.Sx Return values
+section.
+.Pp
+.Dl Usage: .Rv Oo \-std Oc Op Ao function Ac ...
+.Pp
+For example,
+.Ql ".Rv \-std atexit"
+produces:
+.
+.Bd -ragged -offset indent
+\# a small hack to suppress a warning message
+.ds doc-section-old "\*[doc-section]
+.ds doc-section 3
+.Rv -std atexit
+.ds doc-section "\*[doc-section-old]
+.Ed
+.Pp
+.
+The
+.Fl std
+option is valid only for manual page sections\~2 and\~3.
+Currently, this macro does nothing if used without the
+.Fl std
+flag.
+.
+.
+.Ss "Exit Status"
+.
+The
+.Ql .Ex
+macro generates text for use in the
+.Sx Diagnostics
+section.
+.Pp
+.Dl Usage: .Ex Oo \-std Oc Op Ao utility Ac ...
+.Pp
+For example,
+.Ql ".Ex \-std cat"
+produces:
+.
+.Bd -ragged -offset indent
+\# a small hack to suppress a warning message
+.ds doc-section-old "\*[doc-section]
+.ds doc-section 1
+.Ex -std cat
+.ds doc-section "\*[doc-section-old]
+.Ed
+.Pp
+.
+The
+.Fl std
+option is valid only for manual page sections 1, 6 and\~8.
+Currently, this macro does nothing if used without the
+.Fl std
+flag.
+.
+.
+.Ss "Interactive Commands"
+.
+The
+.Ql .Ic
+macro designates an interactive or internal command.
+.Pp
+.Dl Usage: .Ic Ao argument Ac ...
+.Pp
+.Bl -tag -width ".Li .Ic\ setenv\ ,\ unsetenv" -compact -offset 15n
+.It Li ".Ic :wq"
+.Ic :wq
+.It Li ".Ic \[dq]do while {...}\[dq]"
+.Ic "do while {...}"
+.It Li ".Ic setenv , unsetenv"
+.Ic setenv , unsetenv
+.El
+.Pp
+.
+The default width is 12n.
+.
+.
+.Ss "Library Names"
+.
+The
+.Ql .Lb
+macro is used to specify the library where a particular function is compiled
+in.
+.Pp
+.Dl Usage: .Lb Ao argument Ac ...
+.Pp
+Available arguments to
+.Ql .Lb
+and their results are:
+.
+.Pp
+.Bl -tag -width ".Li librpcsec_gss" -compact -offset indent
+.It Li libarchive
+.Lb libarchive
+.It Li libarm
+.Lb libarm
+.It Li libarm32
+.Lb libarm32
+.It Li libbluetooth
+.Lb libbluetooth
+.It Li libbsm
+.Lb libbsm
+.It Li libc
+.Lb libc
+.It Li libc_r
+.Lb libc_r
+.It Li libcalendar
+.Lb libcalendar
+.It Li libcam
+.Lb libcam
+.It Li libcdk
+.Lb libcdk
+.It Li libcipher
+.Lb libcipher
+.It Li libcompat
+.Lb libcompat
+.It Li libcrypt
+.Lb libcrypt
+.It Li libcurses
+.Lb libcurses
+.It Li libdevinfo
+.Lb libdevinfo
+.It Li libdevstat
+.Lb libdevstat
+.It Li libdisk
+.Lb libdisk
+.It Li libdwarf
+.Lb libdwarf
+.It Li libedit
+.Lb libedit
+.It Li libelf
+.Lb libelf
+.It Li libevent
+.Lb libevent
+.It Li libfetch
+.Lb libfetch
+.It Li libform
+.Lb libform
+.It Li libgeom
+.Lb libgeom
+.It Li libgpib
+.Lb libgpib
+.It Li libi386
+.Lb libi386
+.It Li libintl
+.Lb libintl
+.It Li libipsec
+.Lb libipsec
+.It Li libipx
+.Lb libipx
+.It Li libiscsi
+.Lb libiscsi
+.It Li libjail
+.Lb libjail
+.It Li libkiconv
+.Lb libkiconv
+.It Li libkse
+.Lb libkse
+.It Li libkvm
+.Lb libkvm
+.It Li libm
+.Lb libm
+.It Li libm68k
+.Lb libm68k
+.It Li libmagic
+.Lb libmagic
+.It Li libmd
+.Lb libmd
+.It Li libmemstat
+.Lb libmemstat
+.It Li libmenu
+.Lb libmenu
+.It Li libnetgraph
+.Lb libnetgraph
+.It Li libnetpgp
+.Lb libnetpgp
+.It Li libossaudio
+.Lb libossaudio
+.It Li libpam
+.Lb libpam
+.It Li libpcap
+.Lb libpcap
+.It Li libpci
+.Lb libpci
+.It Li libpmc
+.Lb libpmc
+.It Li libposix
+.Lb libposix
+.It Li libprop
+.Lb libprop
+.It Li libpthread
+.Lb libpthread
+.It Li libpuffs
+.Lb libpuffs
+.It Li librefuse
+.Lb librefuse
+.It Li libresolv
+.Lb libresolv
+.It Li librpcsec_gss
+.Lb librpcsec_gss
+.It Li librpcsvc
+.Lb librpcsvc
+.It Li librt
+.Lb librt
+.It Li libsdp
+.Lb libsdp
+.It Li libssp
+.Lb libssp
+.It Li libSystem
+.Lb libSystem
+.It Li libtermcap
+.Lb libtermcap
+.It Li libterminfo
+.Lb libterminfo
+.It Li libthr
+.Lb libthr
+.It Li libufs
+.Lb libufs
+.It Li libugidfw
+.Lb libugidfw
+.It Li libulog
+.Lb libulog
+.It Li libusbhid
+.Lb libusbhid
+.It Li libutil
+.Lb libutil
+.It Li libvgl
+.Lb libvgl
+.It Li libx86_64
+.Lb libx86_64
+.It Li libz
+.Lb libz
+.El
+.
+.
+.Pp
+Site-specific additions might be found in the file
+.Pa mdoc.local ;
+see section
+.Sx Files
+below.
+.
+.
+.Pp
+In a section titled
+.Dq Library ,
+.Ql \&Lb
+causes a break before and after its arguments.
+.
+.
+.Ss Literals
+.
+The
+.Ql \&Li
+literal macro may be used for special characters,
+symbolic constants,
+and other syntactical items that should be typed exactly as displayed.
+.
+.
+.Pp
+.Dl Usage: .Li Ao argument Ac ...
+.Pp
+.Bl -tag -width ".Li .Li\ cntrl\-D\ )\ ," -compact -offset 15n
+.It Li ".Li \een"
+.Li \en
+.It Li ".Li M1 M2 M3 ;"
+.Li M1 M2 M3 ;
+.It Li ".Li cntrl\-D ) ,"
+.Li cntrl-D ) ,
+.It Li ".Li 1024 ..."
+.Li 1024 ...
+.El
+.Pp
+.
+The default width is 16n.
+.
+.
+.Ss Names
+.
+The
+.Ql \&Nm
+macro is used for the document title or page topic.
+.
+Upon its first call,
+it has the peculiarity of remembering its argument,
+which should always be the topic of the man page.
+.
+When subsequently called without arguments,
+.Ql \&Nm
+regurgitates this initial name for the sole purpose of making less work
+for the author.
+.
+Use of
+.Ql \&Nm
+is also appropriate when presenting a command synopsis for the topic of
+a man page in section 1,
+6,
+or 8.
+.
+Its behavior changes when presented with arguments of various forms.
+.
+.
+.Pp
+.Bl -tag -width ".Li .Nm\ groff_mdoc" -compact -offset 15n
+.It Li ".Nm groff_mdoc"
+.Nm groff_mdoc
+.It Li ".Nm"
+.Nm
+.It Li ".Nm \e\-mdoc"
+.Nm \-mdoc
+.It Li ".Nm foo ) ) ,"
+.Nm foo ) ) ,
+.It Li ".Nm :"
+.Nm :
+.El
+.
+.
+.Pp
+By default,
+the topic is set in boldface to reflect its prime importance in the
+discussion.
+.
+Cross references to other man page topics should use
+.Ql \&Xr ;
+including a second argument for the section number enables them to be
+hyperlinked.
+.
+By default,
+cross-referenced topics are set in italics to avoid cluttering the page
+with boldface.
+.
+.
+.Pp
+The default width is 10n.
+.
+.
+.Ss Options
+The
+.Ql .Op
+macro places option brackets around any remaining arguments on the
+command line,
+and places any trailing punctuation outside the brackets.
+.
+The macros
+.Ql .Oo
+and
+.Ql .Oc
+(which produce an opening and a closing option bracket,
+respectively)
+may be used across one or more lines or to specify the exact position of
+the closing parenthesis.
+.
+.
+.Pp
+.Dl Usage: .Op Oo Ao option Ac Oc ...
+.Pp
+.Bl -tag -width ".Li .Op\ Fl\ c\ Ar\ objfil\ Op\ Ar\ corfil\ ," -compact -offset 15n
+.It Li .Op
+.Op
+.It Li ".Op Fl k"
+.Op Fl k
+.It Li ".Op Fl k ) ."
+.Op Fl k ) .
+.It Li ".Op Fl k Ar kookfile"
+.Op Fl k Ar kookfile
+.It Li ".Op Fl k Ar kookfile ,"
+.Op Fl k Ar kookfile ,
+.It Li ".Op Ar objfil Op Ar corfil"
+.Op Ar objfil Op Ar corfil
+.It Li ".Op Fl c Ar objfil Op Ar corfil ,"
+.Op Fl c Ar objfil Op Ar corfil ,
+.It Li ".Op word1 word2"
+.Op word1 word2
+.It Li ".Li .Op Oo Ao option Ac Oc ..."
+.Li .Op Oo Ao option Ac Oc ...
+.El
+.Pp
+Here a typical example of the
+.Ql .Oo
+and
+.Ql .Oc
+macros:
+.
+.Bd -literal -offset indent
+\&.Oo
+\&.Op Fl k Ar kilobytes
+\&.Op Fl i Ar interval
+\&.Op Fl c Ar count
+\&.Oc
+.Ed
+.Pp
+.
+Produces:
+.
+.Bd -filled -offset indent
+.Oo
+.Op Fl k Ar kilobytes
+.Op Fl i Ar interval
+.Op Fl c Ar count
+.Oc
+.Ed
+.Pp
+.
+The default width values of
+.Ql .Op
+and
+.Ql .Oo
+are 14n and 10n, respectively.
+.
+.
+.Ss Pathnames
+.
+The
+.Ql .Pa
+macro formats file specifications.
+.
+If called without arguments,
+.Sq Pa
+(recognized by many shells)
+is output,
+representing the user's home directory.
+.
+.
+.Pp
+.Dl Usage: .Pa Oo Ao pathname Ac Oc ...
+.Pp
+.Bl -tag -width ".Li .Pa\ /tmp/fooXXXXX\ )\ ." -compact -offset 15n
+.It Li .Pa
+.Pa
+.It Li ".Pa /usr/share"
+.Pa /usr/share
+.It Li ".Pa /tmp/fooXXXXX ) ."
+.Pa /tmp/fooXXXXX ) .
+.El
+.Pp
+.
+The default width is 32n.
+.
+.
+.Ss Standards
+.
+The
+.Ql .St
+macro replaces standard abbreviations with their formal names.
+.Pp
+.Dl Usage: .St Ao abbreviation Ac ...
+.Pp
+Available pairs for
+.Dq Abbreviation/Formal Name
+are:
+.
+.Pp
+.Tn ANSI/ISO C
+.Pp
+.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent
+.It Li \-ansiC
+.St -ansiC
+.It Li \-ansiC\-89
+.St -ansiC-89
+.It Li \-isoC
+.St -isoC
+.It Li \-isoC\-90
+.St -isoC-90
+.It Li \-isoC\-99
+.St -isoC-99
+.It Li \-isoC\-2011
+.St -isoC-2011
+.El
+.Pp
+.
+.Tn POSIX
+Part 1: System API
+.Pp
+.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent
+.It Li \-iso9945\-1\-90
+.St -iso9945-1-90
+.It Li \-iso9945\-1\-96
+.St -iso9945-1-96
+.It Li \-p1003.1
+.St -p1003.1
+.It Li \-p1003.1\-88
+.St -p1003.1-88
+.It Li \-p1003.1\-90
+.St -p1003.1-90
+.It Li \-p1003.1\-96
+.St -p1003.1-96
+.It Li \-p1003.1b\-93
+.St -p1003.1b-93
+.It Li \-p1003.1c\-95
+.St -p1003.1c-95
+.It Li \-p1003.1g\-2000
+.St -p1003.1g-2000
+.It Li \-p1003.1i\-95
+.St -p1003.1i-95
+.It Li \-p1003.1\-2001
+.St -p1003.1-2001
+.It Li \-p1003.1\-2004
+.St -p1003.1-2004
+.It Li \-p1003.1\-2008
+.St -p1003.1-2008
+.El
+.Pp
+.
+.Tn POSIX
+Part 2: Shell and Utilities
+.Pp
+.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent
+.It Li \-iso9945\-2\-93
+.St -iso9945-2-93
+.It Li \-p1003.2
+.St -p1003.2
+.It Li \-p1003.2\-92
+.St -p1003.2-92
+.It Li \-p1003.2a\-92
+.St -p1003.2a-92
+.El
+.Pp
+.
+X/Open
+.Pp
+.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent
+.It Li \-susv1
+.St -susv1
+.It Li \-susv2
+.St -susv2
+.It Li \-susv3
+.St -susv3
+.It Li \-susv4
+.St -susv4
+.It Li \-svid4
+.St -svid4
+.It Li \-xbd5
+.St -xbd5
+.It Li \-xcu5
+.St -xcu5
+.It Li \-xcurses4.2
+.St -xcurses4.2
+.It Li \-xns5
+.St -xns5
+.It Li \-xns5.2
+.St -xns5.2
+.It Li \-xpg3
+.St -xpg3
+.It Li \-xpg4
+.St -xpg4
+.It Li \-xpg4.2
+.St -xpg4.2
+.It Li \-xsh5
+.St -xsh5
+.El
+.Pp
+.
+Miscellaneous
+.Pp
+.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent
+.It Li \-ieee754
+.St -ieee754
+.It Li \-iso8601
+.St -iso8601
+.It Li \-iso8802\-3
+.St -iso8802-3
+.El
+.
+.
+.Ss "Variable Types"
+The
+.Ql .Vt
+macro may be used whenever a type is referenced.
+.
+In a section titled
+.Dq Synopsis ,
+.Ql \&Vt
+causes a break
+(useful for old-style C variable declarations).
+.
+.
+.Pp
+.Dl Usage: .Vt Ao type Ac ...
+.Pp
+.Bl -tag -width ".Li .Vt\ extern\ char\ *optarg\ ;" -compact -offset 15n
+.It Li ".Vt extern char *optarg ;"
+.Vt extern char *optarg ;
+.It Li ".Vt FILE *"
+.Vt FILE *
+.El
+.
+.
+.Ss Variables
+.
+Generic variable reference.
+.Pp
+.Dl Usage: .Va Ao variable Ac ...
+.Pp
+.Bl -tag -width ".Li .Va\ Xchar\ sX\ ]\ )\ )\ ," -compact -offset 15n
+.It Li ".Va count"
+.Va count
+.It Li ".Va settimer ,"
+.Va settimer ,
+.It Li ".Va \[dq]int *prt\[dq] ) :"
+.Va "int *prt" ) :
+.It Li ".Va \[dq]char s\[dq] ] ) ) ,"
+.Va "char s" ] ) ) ,
+.El
+.Pp
+.
+The default width is 12n.
+.
+.
+.Ss "Manual Page Cross References"
+.
+The
+.Ql .Xr
+macro expects the first argument to be a manual page name.
+.
+The optional second argument,
+if a string
+(defining the manual section),
+is
+put into parentheses.
+.
+.
+.Pp
+.Dl Usage: .Xr Ao man page name Ac Oo Ao section Ac Oc ...
+.
+.
+.Pp
+.Bl -tag -width ".Li .Xr\ xinit\ 1x\ ;" -compact -offset 15n
+.It Li ".Xr mdoc"
+.Xr mdoc
+.It Li ".Xr mdoc ,"
+.Xr mdoc ,
+.It Li ".Xr mdoc 7"
+.Xr mdoc 7
+.It Li ".Xr xinit 1x ;"
+.Xr xinit 1x ;
+.El
+.
+.
+.Pp
+The default width is 10n.
+.
+.
+.Sh "General text domain"
+.
+.
+.Ss "AT&T Macro"
+.
+.Pp
+.Dl Usage: .At Oo Ao version Ac Oc ...
+.Pp
+.Bl -tag -width ".Li .At\ v6\ ." -compact -offset 15n
+.It Li .At
+.At
+.It Li ".At v6 ."
+.At v6 .
+.El
+.Pp
+The following values for
+.Ao version Ac
+are possible:
+.Pp
+.Dl 32v, v1, v2, v3, v4, v5, v6, v7, III, V, V.1, V.2, V.3, V.4
+.
+.
+.Ss "BSD Macro"
+.
+.Pp
+.Dl "Usage: .Bx" Bro \-alpha | \-beta | \-devel Brc ...
+.Dl " .Bx" Oo Ao version Ac Oo Ao release Ac Oc Oc ...
+.Pp
+.Bl -tag -width ".Li .Bx\ -devel" -compact -offset 15n
+.It Li .Bx
+.Bx
+.It Li ".Bx 4.3 ."
+.Bx 4.3 .
+.It Li ".Bx \-devel"
+.Bx -devel
+.El
+.Pp
+.Ao version Ac
+will be prepended to the string
+.Sq Bx .
+The following values for
+.Ao release Ac
+are possible:
+.Pp
+.Dl Reno, reno, Tahoe, tahoe, Lite, lite, Lite2, lite2
+.
+.
+.Ss "NetBSD Macro"
+.
+.Pp
+.Dl Usage: .Nx Oo Ao version Ac Oc ...
+.Pp
+.Bl -tag -width ".Li .Nx\ 1.4\ ." -compact -offset 15n
+.It Li .Nx
+.Nx
+.It Li ".Nx 1.4 ."
+.Nx 1.4 .
+.El
+.Pp
+For possible values of
+.Ao version Ac
+see the description of the
+.Ql .Os
+command above in section
+.Sx "Title macros" .
+.
+.
+.Ss "FreeBSD Macro"
+.
+.Pp
+.Dl Usage: .Fx Oo Ao version Ac Oc ...
+.Pp
+.Bl -tag -width ".Li .Fx\ 2.2\ ." -compact -offset 15n
+.It Li .Fx
+.Fx
+.It Li ".Fx 2.2 ."
+.Fx 2.2 .
+.El
+.Pp
+For possible values of
+.Ao version Ac
+see the description of the
+.Ql .Os
+command above in section
+.Sx "Title macros" .
+.
+.
+.Ss "DragonFly Macro"
+.
+.Pp
+.Dl Usage: .Dx Oo Ao version Ac Oc ...
+.Pp
+.Bl -tag -width ".Li .Dx\ 1.4\ ." -compact -offset 15n
+.It Li .Dx
+.Dx
+.It Li ".Dx 1.4 ."
+.Dx 1.4 .
+.El
+.Pp
+For possible values of
+.Ao version Ac
+see the description of the
+.Ql .Os
+command above in section
+.Sx "Title macros" .
+.
+.
+.Ss "OpenBSD Macro"
+.
+.Pp
+.Dl Usage: .Ox Oo Ao version Ac Oc ...
+.Pp
+.Bl -tag -width ".Li .Ox\ 1.0" -compact -offset 15n
+.It Li ".Ox 1.0"
+.Ox 1.0
+.El
+.
+.
+.Ss "BSD/OS Macro"
+.
+.Pp
+.Dl Usage: .Bsx Oo Ao version Ac Oc ...
+.Pp
+.Bl -tag -width ".Li .Bsx\ 1.0" -compact -offset 15n
+.It Li ".Bsx 1.0"
+.Bsx 1.0
+.El
+.
+.
+.Ss "Unix Macro"
+.
+.Pp
+.Dl Usage: .Ux ...
+.Pp
+.Bl -tag -width ".Li .Ux" -compact -offset 15n
+.It Li .Ux
+.Ux
+.El
+.
+.
+.Ss "Emphasis Macro"
+.
+Text may be stressed or emphasized with the
+.Ql .Em
+macro.
+The usual font for emphasis is italic.
+.Pp
+.Dl Usage: .Em Ao argument Ac ...
+.Pp
+.Bl -tag -width ".Li .Em\ vide\ infra\ )\ )\ ," -compact -offset 15n
+.It Li ".Em does not"
+.Em does not
+.It Li ".Em exceed 1024 ."
+.Em exceed 1024 .
+.It Li ".Em vide infra ) ) ,"
+.Em vide infra ) ) ,
+.El
+.Pp
+.
+The default width is 10n.
+.
+.
+.Ss "Font Mode"
+.
+The
+.Ql .Bf
+font mode must be ended with the
+.Ql .Ef
+macro (the latter takes no arguments).
+Font modes may be nested within other font modes.
+.Pp
+.Ql .Bf
+has the following syntax:
+.Pp
+.Dl .Bf Ao font mode Ac
+.Pp
+.Ao font mode Ac
+must be one of the following three types:
+.Pp
+.Bl -tag -width ".Sy \&Sy | Fl symbolic" -compact -offset indent
+.It Sy \&Em | Fl emphasis
+Same as if the
+.Ql .Em
+macro was used for the entire block of text.
+.It Sy \&Li | Fl literal
+Same as if the
+.Ql .Li
+macro was used for the entire block of text.
+.It Sy \&Sy | Fl symbolic
+Same as if the
+.Ql .Sy
+macro was used for the entire block of text.
+.El
+.Pp
+Both macros are neither callable nor parsed.
+.
+.
+.Ss "Enclosure and Quoting Macros"
+.
+The concept of enclosure is similar to quoting.
+The object being to enclose one or more strings between a pair of characters
+like quotes or parentheses.
+The terms quoting and enclosure are used interchangeably throughout this
+document.
+Most of the one-line enclosure macros end in small letter
+.Ql q
+to give a hint of quoting, but there are a few irregularities.
+.
+For each enclosure macro,
+there is a pair of opening and closing macros that end with the
+lowercase letters
+.Ql o
+and
+.Ql c
+respectively.
+.Pp
+\# XXX
+.if t \
+. ne 10
+.
+.TS
+lb lb lb lb lb
+l l l l l.
+Quote Open Close Function Result
+\&.Aq .Ao .Ac Angle Bracket Enclosure <string>
+\&.Bq .Bo .Bc Bracket Enclosure [string]
+\&.Brq .Bro .Brc Brace Enclosure {string}
+\&.Dq .Do .Dc Double Quote \[lq]string\[rq]
+\&.Eq .Eo .Ec Enclose String (in XY) XstringY
+\&.Pq .Po .Pc Parenthesis Enclosure (string)
+\&.Ql Quoted Literal \[lq]string\[rq] or string
+\&.Qq .Qo .Qc Straight Double Quote "string"
+\&.Sq .So .Sc Single Quote \[oq]string\[cq]
+.TE
+.Pp
+All macros ending with
+.Sq q
+and
+.Sq o
+have a default width value of 12n.
+.
+.Bl -tag -width ".Li .Ec , .Eo"
+.It Li .Eo , .Ec
+These macros expect the first argument to be the opening and closing
+strings,
+respectively.
+.
+.It Li .Es , .En
+To work around the nine-argument limit in the original
+.Xr troff \" generic
+program,
+.Xr mdoc
+supports two other macros that are now obsolete.
+.
+.Ql .Es
+uses its first and second parameters as opening and closing marks which
+are then used to enclose the arguments of
+.Ql .En .
+.
+The default width value is 12n for both macros.
+.
+.It Li .Eq
+The first and second arguments of this macro are the opening and
+closing strings respectively, followed by the arguments to be enclosed.
+.It Li .Ql
+The quoted literal macro behaves differently in
+.Xr troff \" mode
+and
+.Xr nroff \" mode
+modes.
+.
+If formatted with
+.Xr @g@nroff @MAN1EXT@ ,
+a quoted literal is always quoted.
+.
+If formatted with
+.Xr @g@troff ,
+an item is only quoted if the width of the item is less than three
+constant-width characters.
+.
+This is to make short strings more visible where the font change to
+literal (constant-width) is less noticeable.
+.
+.
+.Pp
+The default width is 16n.
+.
+.It Li .Pf
+The prefix macro suppresses the whitespace between its first and second
+argument:
+.
+.Bl -tag -width ".Li .Pf\ (\ Fa\ name2" -offset indent
+.It Li ".Pf ( Fa name2"
+.Pf ( Fa name2
+.El
+.Pp
+.
+The default width is 12n.
+.Pp
+The
+.Ql .Ns
+macro (see below) performs the analogous suffix function.
+.It Li .Ap
+The
+.Ql .Ap
+macro inserts an apostrophe and exits any special text modes, continuing in
+.Ql .No
+mode.
+.El
+.Pp
+.
+Examples of quoting:
+.
+.Pp
+.Bl -tag -width ".Li .Bq\ Em\ Greek\ ,\ French\ ." -compact -offset indent
+.It Li .Aq
+.Aq
+.It Li ".Aq Pa ctype.h ) ,"
+.Aq Pa ctype.h ) ,
+.It Li .Bq
+.Bq
+.It Li ".Bq Em Greek , French ."
+.Bq Em Greek , French .
+.It Li .Dq
+.Dq
+.It Li ".Dq string abc ."
+.Dq string abc .
+.It Li ".Dq \[aq]\[rs][ha][A\-Z]\[aq]"
+.Dq '\[ha][A-Z]'
+.It Li ".Ql man mdoc"
+.Ql man mdoc
+.It Li .Qq
+.Qq
+.It Li ".Qq string ) ,"
+.Qq string ) ,
+.It Li ".Qq string Ns ),"
+.Qq string Ns ),
+.It Li .Sq
+.Sq
+.It Li ".Sq string"
+.Sq string
+.It Li ".Em or Ap ing"
+.Em or Ap ing
+.El
+.Pp
+.
+For a good example of nested enclosure macros, see the
+.Ql .Op
+option macro.
+It was created from the same underlying enclosure macros as those presented
+in the list above.
+The
+.Ql .Xo
+and
+.Ql .Xc
+extended argument list macros are discussed below.
+.
+.
+.Ss "Normal text macro"
+.
+.Ql \&No
+formats subsequent argument(s) normally,
+ending the effect of
+.Ql \&Em
+and similar.
+.
+Parsing is
+.Em not
+suppressed,
+so you must prefix words like
+.Ql \&No
+with
+.Ql \e&
+to avoid their interpretation as
+.Xr mdoc
+macros.
+.
+.
+.Pp
+.Dl Usage: .No Ar argument No ...
+.
+.
+.Pp
+.Bl -tag -width ".Li .Em\ Use\ caution\ No\ here\ ." \
+-compact -offset 15n
+.It Li ".Em Use caution No here ."
+\[->]
+.Em Use caution No here .
+.It Li ".Em No dogs allowed ."
+\[->]
+.\" We cheat here to prevent a diagnostic warning. We want to
+.\" illustrate output that may surprise the novice.
+.Em \&No No dogs allowed .
+.It Li ".Em \e&No dogs allowed ."
+\[->]
+.Em \&No dogs allowed .
+.El
+.
+.
+.Pp
+The default width is 12n.
+.
+.
+.Ss "No-Space Macro"
+.
+The
+.Ql .Ns
+macro suppresses insertion of a space between the current position and its
+first parameter.
+For example, it is useful for old style argument lists where there is no
+space between the flag and argument:
+.Pp
+.Dl "Usage:" ... Ao argument Ac \&Ns Oo Ao argument Ac Oc ...
+.Dl " " .Ns Ao argument Ac ...
+.Pp
+.Bl -tag -width ".Li .Op\ Fl\ I\ Ns\ Ar\ directory" -compact -offset 15n
+.It Li ".Op Fl I Ns Ar directory"
+.Op Fl I Ns Ar directory
+.El
+.Pp
+Note: The
+.Ql .Ns
+macro always invokes the
+.Ql .No
+macro after eliminating the space unless another macro name follows it.
+If used as a command (i.e., the second form above in the
+.Sq Usage
+line),
+.Ql .Ns
+is identical to
+.Ql .No .
+.
+.
+.Ss "(Sub)section cross references"
+.
+Use the
+.Ql .Sx
+macro to cite a (sub)section heading within the given document.
+.
+.
+.Pp
+.Dl Usage: .Sx Ao section-reference Ac ...
+.
+.
+.Pp
+.Bl -tag -width ".Li .Sx\ Files" -offset 15n
+.It Li ".Sx Files"
+\[->]
+.Sx Files
+.El
+.
+.
+.Pp
+The default width is 16n.
+.
+.
+.Ss Symbolics
+.
+The symbolic emphasis macro is generally a boldface macro in either the
+symbolic sense or the traditional English usage.
+.
+.
+.Pp
+.Dl Usage: .Sy Ao symbol Ac ...
+.
+.
+.Pp
+.Bl -tag -width ".Li .Sy\ Important\ Notice" -compact -offset 15n
+.It Li ".Sy Important Notice"
+\[->]
+.Sy Important Notice
+.El
+.
+.
+.Pp
+The default width is 6n.
+.
+.
+.Ss "Mathematical Symbols"
+.
+Use this macro for mathematical symbols and similar things.
+.
+.
+.Pp
+.Dl Usage: .Ms Ao math symbol Ac ...
+.
+.
+.Pp
+.Bl -tag -width ".Li .Ms\ sigma" -compact -offset 15n
+.It Li ".Ms sigma"
+\[->]
+.Ms sigma
+.El
+.
+.
+.Pp
+The default width is 6n.
+.
+.
+.Ss "References and Citations"
+.
+The following macros make a modest attempt to handle references.
+.
+At best,
+the macros make it convenient to manually drop in a subset of
+.Xr @g@refer @MAN1EXT@
+style references.
+.
+.
+.Pp
+.Bl -tag -width 6n -offset indent -compact
+.It Li .Rs
+Reference start
+(does not take arguments).
+.
+In a section titled
+.Dq "See also" ,
+it causes a break
+and begins collection of reference information until the reference end
+macro is read.
+.
+.It Li .Re
+Reference end (does not take arguments).
+The reference is printed.
+.It Li .%A
+Reference author name; one name per invocation.
+.It Li .%B
+Book title.
+.It Li .%C
+City/place.
+.It Li .%D
+Date.
+.It Li .%I
+Issuer/publisher name.
+.It Li .%J
+Journal name.
+.It Li .%N
+Issue number.
+.It Li .%O
+Optional information.
+.It Li .%P
+Page number.
+.It Li .%Q
+Corporate or foreign author.
+.It Li .%R
+Report name.
+.It Li .%T
+Title of article.
+.It Li .%U
+Optional hypertext reference.
+.It Li .%V
+Volume.
+.El
+.Pp
+Macros beginning with
+.Ql %
+are not callable but accept multiple arguments in the usual way.
+Only the
+.Ql .Tn
+macro is handled properly as a parameter; other macros will cause strange
+output.
+.Ql .%B
+and
+.Ql .%T
+can be used outside of the
+.Ql .Rs/.Re
+environment.
+.Pp
+Example:
+.
+.Bd -literal -offset indent
+\&.Rs
+\&.%A "Matthew Bar"
+\&.%A "John Foo"
+\&.%T "Implementation Notes on foobar(1)"
+\&.%R "Technical Report ABC\-DE\-12\-345"
+\&.%Q "Drofnats College"
+\&.%C "Nowhere"
+\&.%D "April 1991"
+\&.Re
+.Ed
+.Pp
+produces
+.
+.Bd -ragged -offset indent
+.Rs
+.%A "Matthew Bar"
+.%A "John Foo"
+.%T "Implementation Notes on foobar(1)"
+.%R "Technical Report ABC-DE-12-345"
+.%Q "Drofnats College"
+.%C "Nowhere"
+.%D "April 1991"
+.Re
+.Ed
+.
+.Ss "Trade Names or Acronyms"
+.
+The trade name macro prints its arguments at a smaller type size.
+.
+It is intended to imitate a small caps fonts for fully capitalized
+acronyms.
+.
+.
+.Pp
+.Dl Usage: .Tn Ao symbol Ac ...
+.Pp
+.Bl -tag -width ".Li .Tn\ ASCII" -compact -offset 15n
+.It Li ".Tn DEC"
+.Tn DEC
+.It Li ".Tn ASCII"
+.Tn ASCII
+.El
+.Pp
+.
+The default width is 10n.
+.
+.
+.Ss "Extended Arguments"
+.
+The
+.Li .Xo
+and
+.Li .Xc
+macros allow one to extend an argument list on a macro boundary for the
+.Ql .It
+macro (see below).
+Note that
+.Li .Xo
+and
+.Li .Xc
+are implemented similarly to all other macros opening and closing an
+enclosure (without inserting characters, of course).
+This means that the following is true for those macros also.
+.Pp
+Here is an example of
+.Ql .Xo
+using the space mode macro to turn spacing off:
+.
+.Bd -literal -offset indent
+\&.Bd \-literal \-offset indent
+\&.Sm off
+\&.It Xo Sy I Ar operation
+\&.No \een Ar count No \een
+\&.Xc
+\&.Sm on
+\&.Ed
+.Ed
+.Pp
+.
+produces
+.
+.Bd -filled -offset indent
+.Bl -tag -compact
+.Sm off
+.It Xo Sy I Ar operation
+.No \en Ar count No \en
+.Xc
+.Sm on
+.El
+.Ed
+.Pp
+.
+Another one:
+.
+.Bd -literal -offset indent
+\&.Bd \-literal \-offset indent
+\&.Sm off
+\&.It Cm S No / Ar old_pattern Xo
+\&.No / Ar new_pattern
+\&.No / Op Cm g
+\&.Xc
+\&.Sm on
+\&.Ed
+.Ed
+.Pp
+.
+produces
+.
+.Bd -filled -offset indent
+.Bl -tag -compact
+.Sm off
+.It Cm S No \&/ Ar old_pattern Xo
+.No \&/ Ar new_pattern
+.No \&/ Op Cm g
+.Xc
+.Sm on
+.El
+.Ed
+.Pp
+.
+Another example of
+.Ql .Xo
+and enclosure macros: Test the value of a variable.
+.
+.Bd -literal -offset indent
+\&.Bd \-literal \-offset indent
+\&.It Xo
+\&.Ic .ifndef
+\&.Oo \e&! Oc Ns Ar variable Oo
+\&.Ar operator variable No ...
+\&.Oc Xc
+\&.Ed
+.Ed
+.Pp
+.
+produces
+.
+.Bd -filled -offset indent
+.Bl -tag -width flag -compact
+.It Xo
+.Ic .ifndef
+.Oo \&! Oc Ns Ar variable Oo
+.Ar operator variable No ...
+.Oc Xc
+.El
+.Ed
+.Pp
+.
+.
+.Sh "Page structure domain"
+.
+.
+.Ss "Section headings"
+.
+The following
+.Ql .Sh
+section heading macros are required in every man page.
+.
+The remaining section headings are recommended at the discretion of the
+author writing the manual page.
+The
+.Ql .Sh
+macro is parsed but not generally callable.
+It can be used as an argument in a call to
+.Ql .Sh
+only; it then reactivates the default font for
+.Ql .Sh .
+.Pp
+The default width is 8n.
+.
+.Bl -tag -width ".Li .Sh\ Return\ values"
+.It Li ".Sh Name"
+The
+.Ql ".Sh Name"
+macro is mandatory.
+.
+If not specified,
+headers,
+footers,
+and page layout defaults will not be set and things will be rather
+unpleasant.
+.
+The
+.Em Name
+section consists of at least three items.
+The first is the
+.Ql .Nm
+name macro naming the subject of the man page.
+The second is the name description macro,
+.Ql .Nd ,
+which separates the subject name from the third item, which is the
+description.
+The description should be the most terse and lucid possible, as the space
+available is small.
+.Pp
+.Ql .Nd
+first prints
+.Ql \- ,
+then all its arguments.
+.
+.It Li ".Sh Library"
+This section is for section two and three function calls.
+It should consist of a single
+.Ql .Lb
+macro call;
+see
+.Sx "Library Names" .
+.
+.It Li ".Sh Synopsis"
+The
+.Sx Synopsis
+section describes the typical usage of the subject of a man page.
+The macros required are either
+.Ql .Nm ,
+.Ql .Cd ,
+or
+.Ql .Fn
+(and possibly
+.Ql .Fo ,
+.Ql .Fc ,
+.Ql .Fd ,
+and
+.Ql .Ft ) .
+The function name macro
+.Ql .Fn
+is required for manual page sections\~2 and\~3; the command and general name
+macro
+.Ql .Nm
+is required for sections 1, 5, 6, 7, and\~8.
+Section\~4 manuals require a
+.Ql .Nm ,
+.Ql .Fd
+or a
+.Ql .Cd
+configuration device usage macro.
+Several other macros may be necessary to produce the synopsis line as shown
+below:
+.
+.Bd -filled -offset indent
+.Nm cat
+.Op Fl benstuv
+.Op Fl
+.Ar file No ...
+.Ed
+.Pp
+.
+The following macros were used:
+.Pp
+.Dl ".Nm cat"
+.Dl ".Op Fl benstuv"
+.Dl ".Op Fl"
+.Dl ".Ar file No ..."
+.
+.It Li ".Sh Description"
+In most cases the first text in the
+.Sx Description
+section is a brief paragraph on the command, function or file, followed by a
+lexical list of options and respective explanations.
+To create such a list, the
+.Ql .Bl
+(begin list),
+.Ql .It
+(list item) and
+.Ql .El
+(end list)
+macros are used (see
+.Sx Lists and Columns
+below).
+.
+.It Li ".Sh Implementation notes"
+Implementation specific information should be placed here.
+.
+.It Li ".Sh Return values"
+Sections 2, 3 and\~9 function return values should go here.
+The
+.Ql .Rv
+macro may be used to generate text for use in the
+.Sx Return values
+section for most section 2 and 3 library functions;
+see
+.Sx "Return Values" .
+.El
+.Pp
+.
+The following
+.Ql .Sh
+section headings are part of the preferred manual page layout and must
+be used appropriately to maintain consistency.
+They are listed in the order in which they would be used.
+.
+.Bl -tag -width ".Li .Sh\ Compatibility"
+.It Li ".Sh Environment"
+The
+.Em Environment
+section should reveal any related environment variables and clues to their
+behavior and/or usage.
+.
+.It Li ".Sh Files"
+Files which are used or created by the man page subject should be listed via
+the
+.Ql .Pa
+macro in the
+.Sx Files
+section.
+.
+.It Li ".Sh Examples"
+There are several ways to create examples.
+See subsection
+.Sx "Examples and Displays"
+below for details.
+.
+.It Li ".Sh Diagnostics"
+Diagnostic messages from a command should be placed in this section.
+The
+.Ql .Ex
+macro may be used to generate text for use in the
+.Sx Diagnostics
+section for most section 1, 6 and\~8 commands;
+see
+.Sx "Exit Status" .
+.
+.It Li ".Sh Compatibility"
+Known compatibility issues (e.g.\& deprecated options or parameters)
+should be listed here.
+.
+.It Li ".Sh Errors"
+Specific error handling, especially from library functions (man page
+sections 2, 3, and\~9) should go here.
+The
+.Ql .Er
+macro is used to specify an error (errno).
+.
+.It Li ".Sh See also"
+References to other material on the man page topic and cross references
+to other relevant man pages should be placed in the
+.Sx "See also"
+section.
+.
+Cross references are specified using the
+.Ql .Xr
+macro.
+.
+Currently
+.Xr @g@refer @MAN1EXT@
+style references are not accommodated.
+.
+.
+.Pp
+It is recommended that the cross references be sorted by section number,
+then alphabetically by name within each section,
+then separated by commas.
+.
+Example:
+.
+.
+.Pp
+.Xr ls 1 ,
+.Xr ps 1 ,
+.Xr group 5 ,
+.Xr passwd 5
+.
+.It Li ".Sh Standards"
+If the command,
+library function,
+or file adheres to a specific implementation such as
+.St -p1003.2
+or
+.St -ansiC
+this should be noted here.
+.
+If the command does not adhere to any standard,
+its history should be noted in the
+.Em History
+section.
+.
+.It Li ".Sh History"
+Any command which does not adhere to any specific standards should be
+outlined historically in this section.
+.
+.It Li ".Sh Authors"
+Credits should be placed here.
+.
+Use the
+.Ql .An
+macro for names and the
+.Ql .Aq
+macro for email addresses within optional contact information.
+.
+Explicitly indicate whether the person authored the initial manual page
+or the software or whatever the person is being credited for.
+.It Li ".Sh Bugs"
+Blatant problems with the topic go here.
+.El
+.Pp
+.
+User-specified
+.Ql .Sh
+sections may be added; for example, this section was set with:
+.
+.Bd -literal -offset 15n
+\&.Sh "Page structure domain"
+.Ed
+.
+.
+.Ss "Subsection headings"
+.
+Subsection headings have exactly the same syntax as section headings:
+.Ql .Ss
+is parsed but not generally callable.
+It can be used as an argument in a call to
+.Ql .Ss
+only; it then reactivates the default font for
+.Ql .Ss .
+.Pp
+The default width is 8n.
+.
+.
+.Ss "Paragraphs and Line Spacing"
+.
+.Bl -tag -width ".Li .Pp"
+.It Li .Pp
+The
+.Ql .Pp
+paragraph command may be used to specify a line space where necessary.
+The macro is not necessary after a
+.Ql .Sh
+or
+.Ql .Ss
+macro or before a
+.Ql .Bl
+or
+.Ql .Bd
+macro (which both assert a vertical distance unless the
+.Fl compact
+flag is given).
+.Pp
+The macro is neither callable nor parsed and takes no arguments; an
+alternative name is
+.Ql .Lp .
+.El
+.
+.\" XXX
+.
+.\" This worked with version one, need to redo for version three
+.\" .Pp
+.\" .Ds I
+.\" .Cw (ax+bx+c) \ is\ produced\ by\ \&
+.\" .\".Cw (ax+bx+c) \&.Va_by_) \&_and_\& \&[?/]m_b1_e1_f1[?/]\&
+.\" .Cl Cx \t\t
+.\" .Li \&.Cx\ (
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Va ax
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Sy \+
+.\" .Cx
+.\" .Cl Cx \&(\&
+.\" .Va ax
+.\" .Cx +
+.\" .Va by
+.\" .Cx +
+.\" .Va c )
+.\" .Cx \t
+.\" .Em is produced by
+.\" .Cx \t
+.\" .Li \&.Va by
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Sy \+
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Va c )
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Cx
+.\" .Cx
+.\" .Cw
+.\" .De
+.\" .Pp
+.\" This example shows the same equation in a different format.
+.\" The spaces
+.\" around the
+.\" .Li \&+
+.\" signs were forced with
+.\" .Li \e :
+.\" .Pp
+.\" .Ds I
+.\" .Cw (ax\ +\ bx\ +\ c) \ is\ produced\ by\ \&
+.\" .\".Cw (ax+bx+c) \&.Va_by_) \&_and_\& \&[?/]m_b1_e1_f1[?/]\&
+.\" .Cl Cx \t\t
+.\" .Li \&.Cx\ (
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Va a
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Sy x
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Cx \e\ +\e\ \e&
+.\" .Cx
+.\" .Cl Cx \&(\&
+.\" .Va a
+.\" .Sy x
+.\" .Cx \ +\ \&
+.\" .Va b
+.\" .Sy y
+.\" .Cx \ +\ \&
+.\" .Va c )
+.\" .Cx \t
+.\" .Em is produced by
+.\" .Cl Cx \t\t
+.\" .Li \&.Va b
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Sy y
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Cx \e\ +\e\ \e&
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Va c )
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Cx
+.\" .Cx
+.\" .Cw
+.\" .De
+.\" .Pp
+.\" The incantation below was
+.\" lifted from the
+.\" .Xr adb 1
+.\" manual page:
+.\" .Pp
+.\" .Ds I
+.\" .Cw \&[?/]m_b1_e1_f1[?/]\& is\ produced\ by
+.\" .Cl Cx \t\t
+.\" .Li \&.Cx Op Sy ?/
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Nm m
+.\" .Cx
+.\" .Cl Cx Op Sy ?/
+.\" .Nm m
+.\" .Ad \ b1 e1 f1
+.\" .Op Sy ?/
+.\" .Cx \t
+.\" .Em is produced by
+.\" .Cx \t
+.\" .Li \&.Ar \e\ b1 e1 f1
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Op Sy ?/
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Cx
+.\" .Cx
+.\" .Cw
+.\" .De
+.\" .Pp
+.
+.
+.Ss Keeps
+.
+The only keep that is implemented at this time is for words.
+.
+The macros are
+.Ql .Bk
+(begin keep)
+and
+.Ql .Ek
+(end keep).
+.
+The only option that
+.Ql .Bk
+currently accepts is
+.Fl words
+(also the default);
+this prevents breaks in the middle of options.
+.
+In the example for
+.Nm make
+command-line arguments
+(see
+.Sx What's in a Name ) ,
+the keep prevents
+.Xr @g@nroff
+from placing the flag and the argument on separate lines.
+.
+.
+.Pp
+Neither macro is callable or parsed.
+.
+.
+.Pp
+More work needs to be done on the keep macros;
+specifically,
+a
+.Fl line
+option should be added.
+.
+.
+.Ss "Examples and Displays"
+.
+There are seven types of displays.
+.
+.
+.Pp
+.Bl -tag -width ".Li .D1"
+.It Li .D1
+(This is D-one.)
+Display one line of indented text.
+This macro is parsed but not callable.
+.
+.
+.Pp
+.D1 Fl ldghfstru
+.
+.
+.Pp
+The above was produced by:
+.Li ".D1 Fl ldghfstru" .
+.
+.It Li .Dl
+(This is D-ell.)
+Display one line of indented
+.Em literal
+text.
+The
+.Ql .Dl
+example macro has been used throughout this file.
+It allows the indentation (display) of one line of text.
+Its default font is set to constant width (literal).
+.Ql .Dl
+is parsed but not callable.
+.
+.
+.Pp
+.Dl % ls \-ldg /usr/local/bin
+.
+.
+.Pp
+The above was produced by:
+.Li ".Dl % ls \e\-ldg /usr/local/bin" .
+.
+.It Li .Bd
+Begin display.
+The
+.Ql .Bd
+display must be ended with the
+.Ql .Ed
+macro.
+It has the following syntax:
+.
+.
+.Pp
+.Bd -ragged -compact
+.Bl -tag -width ".Li .Bd" -offset indent
+.It Li .Bd Xo
+.Bro \-literal | \-filled | \-unfilled | \-ragged | \-centered Brc
+.Oo \-offset Ao string Ac Oc Oo \-file Ao file name Ac Oc Oo \-compact Oc Xc
+.El
+.Ed
+.
+.
+.Pp
+.Bl -tag -width ".Fl file Ao Ar file name Ac " -compact
+.It Fl ragged
+Fill, but do not adjust the right margin (only left-justify).
+.
+.It Fl centered
+Center lines between the current left and right margin.
+.
+Note that each single line is centered.
+.
+.It Fl unfilled
+Do not fill;
+break lines where their input lines are broken.
+.
+This can produce overlong lines without warning messages.
+.
+.It Fl filled
+Display a filled block.
+The block of text is formatted (i.e., the text is justified on both the left
+and right side).
+.
+.It Fl literal
+Display block with literal font (usually fixed-width).
+.
+Useful for source code or simple tabbed or spaced text.
+.
+.It Fl file Ao Ar file name Ac
+The file whose name follows the
+.Fl file
+flag is read and displayed before any data enclosed with
+.Ql .Bd
+and
+.Ql .Ed ,
+using the selected display type.
+.
+Any
+.Xr @g@troff/ Ns Xr mdoc
+commands in the file will be processed.
+.
+.It Fl offset Ao Ar string Ac
+If
+.Fl offset
+is specified with one of the following strings, the string is interpreted to
+indicate the level of indentation for the forthcoming block of text:
+.
+.
+.Pp
+.Bl -tag -width ".Ar indent-two" -compact
+.It Ar left
+Align block on the current left margin; this is the default mode of
+.Ql .Bd .
+.It Ar center
+Supposedly center the block.
+At this time unfortunately, the block merely gets left aligned about an
+imaginary center margin.
+.It Ar indent
+Indent by one default indent value or tab.
+The default indent value is also used for the
+.Ql .D1
+and
+.Ql .Dl
+macros, so one is guaranteed the two types of displays will line up.
+The indentation value is normally set to\~6n or about two thirds of an inch
+(six constant width characters).
+.It Ar indent\-two
+Indent two times the default indent value.
+.It Ar right
+This
+.Em left
+aligns the block about two inches from the right side of the page.
+This macro needs work and perhaps may never do the right thing within
+.Xr @g@troff .
+.El
+.
+.
+.Pp
+If
+.Ao string Ac
+is a valid numeric expression instead
+.Pf ( Em with a scaling indicator other than
+.Sq Em u ) ,
+use that value for indentation.
+The most useful scaling indicators are
+.Sq m
+and
+.Sq n ,
+specifying the so-called
+.Em \&Em
+and
+.Em "En square" .
+.
+This is approximately the width of the letters
+.Sq m
+and
+.Sq n
+respectively
+of the current font
+(for
+.Xr nroff
+output,
+both scaling indicators give the same values).
+.
+If
+.Ao string Ac
+isn't a numeric expression, it is tested whether it is an
+.Xr mdoc
+macro name, and the default offset value associated with this macro is used.
+Finally, if all tests fail,
+the width of
+.Ao string Ac
+(typeset with a fixed-width font) is taken as the offset.
+.It Fl compact
+Suppress insertion of vertical space before begin of display.
+.El
+.
+.It Li .Ed
+End display (takes no arguments).
+.El
+.
+.
+.Ss "Lists and Columns"
+.
+There are several types of lists which may be initiated with the
+.Ql .Bl
+begin-list macro.
+.
+Items within the list are specified with the
+.Ql .It
+item macro,
+and each list must end with the
+.Ql .El
+macro.
+.
+Lists may be nested within themselves and within displays.
+.
+The use of columns inside of lists or lists inside of columns is
+untested.
+.
+.
+.Pp
+In addition,
+several list attributes may be specified such as the width of a tag,
+the list offset,
+and compactness
+(blank lines between items allowed or disallowed).
+.
+Most of this document has been formatted with a tag style list
+.Pf ( Fl tag ) .
+.
+.
+.Pp
+It has the following syntax forms:
+.
+.
+.Pp
+.Bd -ragged -compact
+.Bl -tag -width ".Li .Bl" -offset indent -compact
+.It Li .Bl Xo
+.Bro \-hang | \-ohang | \-tag | \-diag | \-inset Brc
+.Oo \-width Ao string Ac Oc
+.Oo \-offset Ao string Ac Oc Oo \-compact Oc Xc
+.It Li .Bl Xo
+.No \-column Oo \-offset Ao string Ac Oc
+.Ao string1 Ac Ao string2 Ac ... Xc
+.It Li .Bl Xo
+.Bro \-item | \-enum Oo \-nested Oc | \-bullet | \-hyphen | \-dash Brc
+.Oo \-offset Ao string Ac Oc Oo \-compact Oc Xc
+.El
+.Ed
+.
+.
+.Pp
+And now a detailed description of the list types.
+.
+.
+.Pp
+.Bl -tag -width ".Fl column" -compact
+.It Fl bullet
+A bullet list.
+.
+.Bd -literal -offset indent
+\&.Bl \-bullet \-offset indent \-compact
+\&.It
+Bullet one goes here.
+\&.It
+Bullet two here.
+\&.El
+.Ed
+.
+.
+.Pp
+Produces:
+.
+.
+.Pp
+.Bl -bullet -offset indent -compact
+.It
+Bullet one goes here.
+.It
+Bullet two here.
+.El
+.
+.
+.Pp
+.
+.It Fl dash No ( or Fl hyphen )
+A dash list.
+.
+.Bd -literal -offset indent
+\&.Bl \-dash \-offset indent \-compact
+\&.It
+Dash one goes here.
+\&.It
+Dash two here.
+\&.El
+.Ed
+.
+.
+.Pp
+Produces:
+.
+.
+.Pp
+.Bl -dash -offset indent -compact
+.It
+Dash one goes here.
+.It
+Dash two here.
+.El
+.
+.
+.Pp
+.It Fl enum
+An enumerated list.
+.
+.Bd -literal -offset indent
+\&.Bl \-enum \-offset indent \-compact
+\&.It
+Item one goes here.
+\&.It
+And item two here.
+\&.El
+.Ed
+.
+.
+.Pp
+The result:
+.
+.
+.Pp
+.Bl -enum -offset indent -compact
+.It
+Item one goes here.
+.It
+And item two here.
+.El
+.
+.
+.Pp
+If you want to nest enumerated lists,
+use the
+.Fl nested
+flag
+(starting with the second-level list):
+.
+.Bd -literal -offset indent
+\&.Bl \-enum \-offset indent \-compact
+\&.It
+Item one goes here
+\&.Bl \-enum \-nested \-compact
+\&.It
+Item two goes here.
+\&.It
+And item three here.
+\&.El
+\&.It
+And item four here.
+\&.El
+.Ed
+.
+.
+.Pp
+Result:
+.
+.
+.Pp
+.Bl -enum -offset indent -compact
+.It
+Item one goes here.
+.Bl -enum -nested -compact
+.It
+Item two goes here.
+.It
+And item three here.
+.El
+.It
+And item four here.
+.El
+.
+.
+.Pp
+.
+.It Fl item
+A list of type
+.Fl item
+without list markers.
+.
+.Bd -literal -offset indent
+\&.Bl \-item \-offset indent
+\&.It
+Item one goes here.
+Item one goes here.
+Item one goes here.
+\&.It
+Item two here.
+Item two here.
+Item two here.
+\&.El
+.Ed
+.
+.
+.Pp
+Produces:
+.
+.
+.Pp
+.Bl -item -offset indent
+.It
+Item one goes here.
+Item one goes here.
+Item one goes here.
+.It
+Item two here.
+Item two here.
+Item two here.
+.El
+.
+.
+.Pp
+.It Fl tag
+A list with tags.
+Use
+.Fl width
+to specify the tag width.
+.
+.
+.Pp
+.Bl -tag -width "PPID" -compact -offset indent
+.It SL
+sleep time of the process (seconds blocked)
+.It PAGEIN
+number of disk I/O operations resulting from references by the process
+to pages not loaded in core.
+.It UID
+numerical user-id of process owner
+.It PPID
+numerical id of parent of process priority
+(non-positive when in non-interruptible wait)
+.El
+.
+.
+.Pp
+The raw text:
+.
+.Bd -literal -offset indent
+\&.Bl \-tag \-width "PPID" \-compact \-offset indent
+\&.It SL
+sleep time of the process (seconds blocked)
+\&.It PAGEIN
+number of disk I/O operations resulting from references
+by the process to pages not loaded in core.
+\&.It UID
+numerical user\-id of process owner
+\&.It PPID
+numerical id of parent of process priority
+(non\-positive when in non\-interruptible wait)
+\&.El
+.Ed
+.
+.
+.Pp
+.It Fl diag
+Diag lists create section four diagnostic lists and are similar to inset
+lists except callable macros are ignored.
+The
+.Fl width
+flag is not meaningful in this context.
+.
+.
+.Pp
+Example:
+.
+.Bd -literal -offset indent
+\&.Bl \-diag
+\&.It You can't use Sy here.
+The message says all.
+\&.El
+.Ed
+.
+.
+.Pp
+produces
+.
+.Bl -diag
+.It You can't use Sy here.
+The message says all.
+.El
+.
+.
+.Pp
+.It Fl hang
+A list with hanging tags.
+.
+.Bl -hang -offset indent
+.It Em Hanged
+labels appear similar to tagged lists when the
+label is smaller than the label width.
+.It Em Longer hanged list labels
+blend into the paragraph unlike
+tagged paragraph labels.
+.El
+.
+.
+.Pp
+And the unformatted text which created it:
+.
+.Bd -literal -offset indent
+\&.Bl \-hang \-offset indent
+\&.It Em Hanged
+labels appear similar to tagged lists when the
+label is smaller than the label width.
+\&.It Em Longer hanged list labels
+blend into the paragraph unlike
+tagged paragraph labels.
+\&.El
+.Ed
+.
+.
+.Pp
+.It Fl ohang
+Lists with overhanging tags do not use indentation for the items;
+tags are written to a separate line.
+.
+.
+.Pp
+.Bl -ohang -offset indent
+.It Sy SL
+sleep time of the process (seconds blocked)
+.It Sy PAGEIN
+number of disk I/O operations resulting from references by the process
+to pages not loaded in core.
+.It Sy UID
+numerical user-id of process owner
+.It Sy PPID
+numerical id of parent of process priority
+(non-positive when in non-interruptible wait)
+.El
+.
+.
+.Pp
+The raw text:
+.
+.Bd -literal -offset indent
+\&.Bl \-ohang \-offset indent
+\&.It Sy SL
+sleep time of the process (seconds blocked)
+\&.It Sy PAGEIN
+number of disk I/O operations resulting from references
+by the process to pages not loaded in core.
+\&.It Sy UID
+numerical user\-id of process owner
+\&.It Sy PPID
+numerical id of parent of process priority
+(non\-positive when in non\-interruptible wait)
+\&.El
+.Ed
+.
+.
+.Pp
+.It Fl inset
+Here is an example of inset labels:
+.Bl -inset -offset indent
+.It Em Tag
+The tagged list (also called a tagged paragraph)
+is the most common type of list used in the
+Berkeley manuals.
+Use a
+.Fl width
+attribute as described below.
+.It Em Diag
+Diag lists create section four diagnostic lists
+and are similar to inset lists except callable
+macros are ignored.
+.It Em Hang
+Hanged labels are a matter of taste.
+.It Em Ohang
+Overhanging labels are nice when space is constrained.
+.It Em Inset
+Inset labels are useful for controlling blocks of
+paragraphs and are valuable for converting
+.Xr mdoc
+manuals to other formats.
+.El
+.
+.
+.Pp
+Here is the source text which produced the above example:
+.
+.Bd -literal -offset indent
+\&.Bl \-inset \-offset indent
+\&.It Em Tag
+The tagged list (also called a tagged paragraph)
+is the most common type of list used in the
+Berkeley manuals.
+\&.It Em Diag
+Diag lists create section four diagnostic lists
+and are similar to inset lists except callable
+macros are ignored.
+\&.It Em Hang
+Hanged labels are a matter of taste.
+\&.It Em Ohang
+Overhanging labels are nice when space is constrained.
+\&.It Em Inset
+Inset labels are useful for controlling blocks of
+paragraphs and are valuable for converting
+\&.Xr mdoc
+manuals to other formats.
+\&.El
+.Ed
+.
+.
+.Pp
+.
+.It Fl column
+This list type generates multiple columns.
+The number of columns and the width of each column is determined by the
+arguments to the
+.Fl column
+list,
+.Aq Ar string1 ,
+.Aq Ar string2 ,
+etc.
+If
+.Aq Ar stringN
+starts with a
+.Ql .\&
+(dot) immediately followed by a valid
+.Xr mdoc
+macro name, interpret
+.Aq Ar stringN
+and use the width of the result.
+Otherwise, the width of
+.Aq Ar stringN
+(typeset with a fixed-width font) is taken as the
+.Ar N Ns th
+column width.
+.
+.
+.Pp
+Each
+.Ql .It
+argument is parsed to make a row, each column within the row is a separate
+argument separated by a tab or the
+.Ql .Ta
+macro.
+.
+.
+.Pp
+The table:
+.
+.Bl -column -offset indent ".Sy String" ".Sy Nroff" ".Sy Troff"
+.It Sy String Ta Sy Nroff Ta Sy Troff
+.It Li <= Ta <= Ta \*(<=
+.It Li >= Ta >= Ta \*(>=
+.El
+.
+.
+.Pp
+was produced by:
+.
+.Bd -literal
+\&.Bl \-column \-offset indent ".Sy String" ".Sy Nroff" ".Sy Troff"
+\&.It Sy String Ta Sy Nroff Ta Sy Troff
+\&.It Li <= Ta <= Ta \e*(<=
+\&.It Li >= Ta >= Ta \e*(>=
+\&.El
+.Ed
+.
+.
+.Pp
+Don't abuse this list type!
+.
+For more complicated cases it might be far better and easier to use
+.Xr @g@tbl @MAN1EXT@ ,
+the table preprocessor.
+.El
+.
+.
+.Pp
+Other keywords:
+.
+.Bl -tag -width ".Fl indent Ao Ar string Ac"
+.It Fl width Ao Ar string Ac
+If
+.Aq Ar string
+starts with a
+.Ql .\&
+(dot) immediately followed by a valid
+.Xr mdoc
+macro name, interpret
+.Aq Ar string
+and use the width of the result.
+.
+Almost all lists in this document use this option.
+.
+.
+.Pp
+Example:
+.
+.Bd -literal -offset indent
+\&.Bl \-tag \-width ".Fl test Ao Ar string Ac"
+\&.It Fl test Ao Ar string Ac
+This is a longer sentence to show how the
+\&.Fl width
+flag works in combination with a tag list.
+\&.El
+.Ed
+.
+.
+.Pp
+gives:
+.
+.Bl -tag -width ".Fl test Ao Ar string Ac"
+.It Fl test Ao Ar string Ac
+This is a longer sentence to show how the
+.Fl width
+flag works in combination with a tag list.
+.El
+.
+.
+.Pp
+(Note that the current state of
+.Xr mdoc
+is saved before
+.Aq Ar string
+is interpreted;
+afterwards,
+all variables are restored again.
+.
+However,
+boxes
+(used for enclosures)
+can't be saved in
+.Tn GNU
+.Xr @g@troff @MAN1EXT@ ;
+as a consequence,
+arguments must always be
+.Em balanced
+to avoid nasty errors.
+.
+For example,
+do not write
+.Ql ".Ao Ar string"
+but
+.Ql ".Ao Ar string Xc"
+instead if you really need only an opening angle bracket.)
+.
+.
+.Pp
+Otherwise,
+if
+.Aq Ar string
+is a valid numeric expression
+.Em ( with a scaling indicator other than
+.Sq Em u ) ,
+use that value for indentation.
+The most useful scaling indicators are
+.Sq m
+and
+.Sq n ,
+specifying the so-called
+.Em \&Em
+and
+.Em "En square" .
+This is approximately the width of the letters
+.Sq m
+and
+.Sq n
+respectively
+of the current font
+(for
+.Xr @g@nroff
+output,
+both scaling indicators give the same values).
+.
+If
+.Aq Ar string
+isn't a numeric expression, it is tested whether it is an
+.Xr mdoc
+macro name, and the default width value associated with this macro is used.
+Finally, if all tests fail,
+the width of
+.Aq Ar string
+(typeset with a fixed-width font) is taken as the width.
+.
+.
+.Pp
+If a width is not specified for the tag list type,
+.Sq 6n
+is used.
+.It Fl offset Ao Ar string Ac
+If
+.Aq Ar string
+is
+.Ar indent ,
+a default indent value (normally set to\~6n,
+similar to the value used in
+.Ql .Dl
+or
+.Ql .Bd )
+is used.
+If
+.Aq Ar string
+is a valid numeric expression instead
+.Pf ( Em with a scaling indicator other than
+.Sq Em u ) ,
+use that value for indentation.
+The most useful scaling indicators are
+.Sq m
+and
+.Sq n ,
+specifying the so-called
+.Em \&Em
+and
+.Em "En square" .
+.
+This is approximately the width of the letters
+.Sq m
+and
+.Sq n
+respectively
+of the current font
+(for
+.Xr nroff
+output,
+both scaling indicators give the same values).
+.
+If
+.Aq Ar string
+isn't a numeric expression, it is tested whether it is an
+.Xr mdoc
+macro name, and the default offset value associated with this macro is used.
+Finally, if all tests fail,
+the width of
+.Aq Ar string
+(typeset with a fixed-width font) is taken as the offset.
+.It Fl compact
+Suppress insertion of vertical space before the list and between list items.
+.El
+.
+.
+.Sh "Miscellaneous macros"
+.
+A double handful of macros fit only uncomfortably into one of the above
+sections.
+.
+Of these,
+we couldn't find attested examples for
+.Ql \&Me
+or
+.Ql \&Ot .
+.
+They are documented here for completeness\[em]if you know their proper
+usage,
+please send a mail to
+.Mt groff@gnu.org
+and include a specimen with its provenance.
+.
+.
+.Bl -tag -width ".Li .Bt"
+.It Li .Bt
+formats boilerplate text.
+.
+.\" XXX: .Bt gets parsed (i.e., called) _and_ measured even _with_ a
+.\" leading dot. See Savannah #63672.
+.Bl -tag -width \&.Bt -offset indent
+.It Li .Bt
+\[->]
+.Bt
+.El
+.
+.
+.Pp
+It is neither callable nor parsed and takes no arguments.
+.
+Its default width is 6n.
+.
+.
+.It Li .Fr
+is an obsolete means of specifying a function return value.
+.
+.
+.Pp
+.D1 Usage: Pf . Ic \&Fr Ar return-value No ...
+.
+.
+.Pp
+.Ql \&Fr
+allows a break right before the return value
+(usually a single digit)
+which is bad typographical behaviour.
+.
+Instead,
+set the return value with the rest of the code,
+using
+.Ql \[rs]\[ti]
+to tie the return value to the previous word.
+.
+.
+.Pp
+Its default width is 12n.
+.
+.
+.It Li .Hf
+Inlines the contents of a (header) file into the document.
+.
+.
+.Pp
+.D1 Usage: Pf . Ic \&Hf Ar file
+.
+.
+.Pp
+It first prints
+.Ql File:
+followed by the file name,
+then the contents of
+.Ar file .
+.
+It is neither callable nor parsed.
+.
+.
+.It Li .Lk
+Embed hyperlink.
+.
+.
+.Pp
+.D1 Usage: Pf . Ic \&Lk Ar uri Op Ar link-text
+.
+.
+.Pp
+Its default width is 6n.
+.
+.
+.It Li .Me
+Usage unknown.
+.
+The
+.Xr mdoc
+sources describe it as a macro for
+.Dq "menu entries" .
+.
+.
+.Pp
+Its default width is 6n.
+.
+.
+.It Li .Mt
+Embed email address.
+.
+.
+.Pp
+.D1 Usage: Pf . Ic \&Mt Ar email-address
+.
+.
+.Pp
+Its default width is 6n.
+.
+.
+.It Li .Ot
+Usage unknown.
+The
+.Xr mdoc
+sources describe it as
+.Dq "old function type (fortran)" .
+.
+.
+.It Li .Sm
+Manipulate or toggle argument-spacing mode.
+.
+.
+.Pp
+.D1 Usage: Pf . Ic \&Sm Oo Li on | Li off Oc ...
+.
+.
+.Pp
+If argument-spacing mode is off,
+no spaces between macro arguments are inserted.
+.
+If called without a parameter
+(or if the next parameter is neither
+.Ql on
+nor
+.Ql off ) ,
+.Ql \&Sm
+toggles argument-spacing mode.
+.
+.
+.Pp
+Its default width is 8n.
+.\" XXX: The package demands it, but how is that meaningful?
+.
+.
+.It Li .Ud
+formats boilerplate text.
+.
+.\" XXX: .Ud gets parsed (i.e., called) _and_ measured even _with_ a
+.\" leading dot. See Savannah #63672.
+.Bl -tag -width \&.Ud -offset indent
+.It Li .Ud
+\[->]
+.Ud
+.El
+.
+.
+.Pp
+It is neither callable nor parsed and takes no arguments.
+.
+Its default width is 8n.
+.El
+.
+.
+.Sh "Predefined strings"
+.
+The following strings are predefined for compatibility with legacy
+.Xr mdoc
+documents.
+.
+Contemporary ones should use the alternatives shown in the
+.Dq Prefer
+column below.
+.
+See
+.Xr groff_char @MAN7EXT@
+for a full discussion of these special character escape sequences.
+.
+.
+.Pp
+.\" Note: This table pushes 80-column ASCII and Latin-1 terminals to
+.\" the limits of their capacity. Observe the spacing parameters of the
+.\" 2nd and 3rd columns; we had to steal a character cell from each (the
+.\" default is 3) because in the UCS column, the word "infinity" gets
+.\" written out in full, which in turn pushes the >= and Ge rows past
+.\" the 78n norm. Update with caution. See Savannah #59424.
+.TS
+Cb Lb2 Lb2 Lb Lb Lb
+Lf(CR) L2 L2 L Lf(CR) L.
+String 7-bit 8-bit UCS Prefer Meaning
+\[rs]*(<= <= <= \*[<=] \[rs](<= less than or equal to
+\[rs]*(>= >= >= \*[>=] \[rs](>= greater than or equal to
+\[rs]*(Rq " " \*[Rq] \[rs](rq right double quote
+\[rs]*(Lq " " \*[Lq] \[rs](lq left double quote
+\[rs]*(ua \[ha] \[ha] \*[ua] \[rs](ua vertical arrow up
+\[rs]*(aa \[aq] \' \*[aa] \[rs](aa acute accent
+\[rs]*(ga \` \` \*[ga] \[rs](ga grave accent
+\[rs]*(q \&" \&" \*[q] \[rs](dq neutral double quote
+\[rs]*(Pi pi pi \*[Pi] \[rs](*p lowercase pi
+\[rs]*(Ne != != \*[Ne] \[rs](!= not equals
+\[rs]*(Le <= <= \*[Le] \[rs](<= less than or equal to
+\[rs]*(Ge >= >= \*[Ge] \[rs](>= greater than or equal to
+\[rs]*(Lt < < \*[Lt] < less than
+\[rs]*(Gt > > \*[Gt] > greater than
+\[rs]*(Pm +\- \[+-] \*[Pm] \[rs](+\- plus or minus
+\[rs]*(If infinity infinity \*[If] \[rs](if infinity
+\[rs]*(Am \*[Am] \*[Am] \*[Am] & ampersand
+\[rs]*(Na \*[Na] \*[Na] \*[Na] NaN not a number
+\[rs]*(Ba \*[Ba] \*[Ba] \*[Ba] | bar
+.TE
+.
+.
+.Pp
+Some column headings are shorthand for standardized character encodings;
+\[lq]7-bit\[rq] for ISO 646:1991 IRV (US-ASCII),
+\[lq]8-bit\[rq] for ISO 8859-1 (Latin-1) and IBM code page 1047,
+and
+\[lq]UCS\[rq] for ISO 10646 (Unicode character set).
+.
+Historically, \" (\[ti]1989)
+.Xr mdoc
+configured the string definitions to fit the capabilities expected of
+the output device.
+.
+Old typesetters \" like the C/A/T
+lacked directional double quotes,
+producing repeated directional single quotes
+\[oq]\[oq]like this\[cq]\[cq];
+early versions of
+.Xr mdoc
+in fact defined the
+.Ql Lq
+and
+.Ql Rq
+strings this way. \" thanks to Ingo Schwarze for the research
+.
+Nowadays,
+output drivers \" technically, their macro files or font descriptions
+take on the responsibility of glyph substitution,
+as they possess relevant knowledge of their available repertoires.
+.
+.
+.Sh Diagnostics
+.
+The debugging macro
+.Ql .Db
+offered by
+previous versions of
+.Xr mdoc
+is unavailable in
+.Tn GNU
+.Xr @g@troff @MAN1EXT@
+since the latter provides better facilities to check parameters;
+additionally,
+.Xr "groff mdoc"
+implements many error and warning messages,
+making the package more robust and more verbose.
+.
+.
+.Pp
+The remaining debugging macro is
+.Ql .Rd ,
+which dumps the package's global register and string contents to the
+standard error stream.
+.
+A normal user will never need it.
+.
+.
+.Sh Options
+.
+The following
+.Xr groff
+options set registers
+(with
+.Fl r )
+and strings
+(with
+.Fl d )
+recognized and used by the
+.Xr mdoc
+macro package.
+.
+To ensure rendering consistent with output device capabilities and
+reader preferences,
+man pages should never manipulate them.
+.
+.
+.Pp
+Setting string
+.Ql AD
+configures the adjustment mode for most formatted text.
+.
+Typical values are
+.Ql b
+for adjustment to both margins
+(the default),
+or
+.Ql l
+for left alignment
+(ragged right margin).
+.
+Any valid argument to
+.Xr groff Ns 's
+.Ql ad
+request may be used.
+.
+See
+.Xr groff @MAN7EXT@
+for less-common choices.
+.
+.Dl groff \-Tutf8 \-dAD=l \-mdoc groff_mdoc.7 | less \-R
+.
+.
+.Pp
+Setting register
+.Ql C
+to\~1 numbers output pages consecutively,
+rather than resetting the page number to\~1
+(or the value of register
+.Ql P )
+with each new
+.Xr mdoc
+document.
+.
+.
+.Pp
+By default,
+the package inhibits page breaks,
+headers,
+and footers in the midst of the document text if it is being displayed
+with a terminal device such as
+.Sq latin1
+or
+.Sq utf8 ,
+to enable more efficient viewing of the page.
+.
+This behavior can be changed to format the page as if for 66-line
+Teletype output by setting the continuous rendering register
+.Ql cR
+to zero while calling
+.Xr groff @MAN1EXT@ .
+.
+.Dl groff \-Tlatin1 \-rcR=0 \-mdoc foo.man > foo.txt
+.
+On HTML devices,
+it cannot be disabled.
+.
+.
+.Pp
+Section headings
+(defined with
+.Ql .Sh )
+and page titles in headers
+(defined with
+.Ql .Dt )
+can be presented in full capitals by setting the registers
+.Ql CS
+and
+.Ql CT ,
+respectively,
+to 1.
+.
+These transformations are off by default because they discard case
+distinction information.
+.
+.
+.Pp
+Setting register
+.Ql D
+to\~1 enables double-sided page layout,
+which is only distinct when not continuously rendering.
+.
+It places the page number at the bottom right on odd-numbered (recto)
+pages,
+and at the bottom left on even-numbered (verso) pages,
+swapping places with the arguments to
+.Ql .Os .
+.
+.Dl groff \-Tps \-rD1 \-mdoc foo.man > foo.ps
+.
+.
+.Pp
+The value of the
+.Ql FT
+register determines the footer's distance from the page bottom;
+this amount is always negative and should specify a scaling unit.
+.
+At one half-inch above this location,
+the page text is broken before writing the footer.
+.
+It is ignored if continuous rendering is enabled.
+.
+The default is \-0.5i.
+.
+.
+.Pp
+The
+.Ql HF
+string sets
+the font used for section and subsection headings;
+the default is
+.Ql B
+(bold style of the default family).
+.
+Any valid argument to
+.Xr groff Ns 's
+.Ql ft
+request may be used.
+.
+.
+.Pp
+Normally,
+automatic hyphenation is enabled using a mode appropriate to the
+.Xr groff
+locale;
+see section \[lq]Localization\[lq] of
+.Xr groff @MAN7EXT@ .
+.
+It can be disabled by setting the
+.Ql HY
+register to zero.
+.
+.Dl groff \-Tutf8 \-rHY=0 \-mdoc foo.man | less \-R
+.
+.
+.Pp
+The paragraph and subsection heading indentation amounts can be changed
+by setting the registers
+.Ql IN
+and
+.Ql SN .
+.
+.Dl groff \-Tutf8 \-rIN=5n \-rSN=2n \-mdoc foo.man | less \-R
+.
+The default paragraph indentation is 7.2n on typesetters and 7n on
+terminals.
+.
+The default subsection heading indentation amount is 3n;
+section headings are set with an indentation of zero.
+.
+.
+.Pp
+The line and title lengths can be changed by setting the registers
+.Ql LL
+and
+.Ql LT ,
+respectively:
+.
+.Dl groff \-Tutf8 \-rLL=100n \-rLT=100n \-mdoc foo.man | less \-R
+.
+If not set,
+both registers default to 78n for terminal devices and 6.5i otherwise.
+.
+.
+.Pp
+Setting the
+.Ql P
+register starts enumeration of pages at its value.
+.
+The default is\~1.
+.
+.
+.Pp
+To change the document font size to 11p or 12p,
+set register
+.Ql S
+accordingly:
+.
+.Dl groff \-Tdvi \-rS11 \-mdoc foo.man > foo.dvi
+.
+Register
+.Ql S
+is ignored when formatting for terminal devices.
+.
+.
+.Pp
+Setting the
+.Ql X
+register to a page number
+.Ar p
+numbers its successors as
+.Ar p Ns Li a ,
+.Ar p Ns Li b ,
+.Ar p Ns Li c ,
+and so forth.
+.
+The register tracking the suffixed page letter uses format
+.Ql a
+(see the
+.Ql af
+request in
+.Xr groff @MAN7EXT@ ) .
+.
+.
+.br
+.ne 4v
+.Sh Files
+.
+.Bl -tag
+.It Pa @MACRODIR@/\:andoc\:.tmac
+This brief
+.Xr groff
+program detects whether the
+.Xr man
+or
+.Xr mdoc
+macro package is being used by a document and loads the correct macro
+definitions,
+taking advantage of the fact that pages using them must call
+.Li TH
+or
+.Li Dd ,
+respectively,
+before any other macros.
+.
+A user typing,
+for example,
+.Dl groff \-mandoc page.1
+need not know which package the file
+.Pa page.1
+uses.
+.
+Multiple man pages,
+in either format,
+can be handled;
+.Pa \%andoc\:.tmac
+reloads each macro package as necessary.
+.
+.
+.It Pa @MACRODIR@/\:doc\:.tmac
+implements the bulk of the
+.Xr groff Xr mdoc
+package and loads further components as needed from the
+.Pa mdoc
+subdirectory.
+.
+.
+.It Pa @MACRODIR@/\:mdoc\:.tmac
+is a wrapper that loads
+.Pa doc.tmac .
+.
+.
+.It Pa @MACRODIR@/\:mdoc/\:doc\-common
+defines macros,
+registers,
+and strings
+concerned with the production of formatted output.
+.\" XXX: This is a weak explanation. The boundary between doc.tmac's
+.\" concerns and doc-common's is not at all clear to GBR. Should some
+.\" of these files be merged?
+.
+It includes strings of the form
+.Ql doc\-volume\-ds\- Ns Ar X
+and
+.Ql doc\-volume\-as\- Ns Ar X
+for manual section titles and architecture identifiers,
+respectively,
+where
+.Ar X
+is an argument recognized by
+.Pf . Ic \&Dt .
+.
+.
+.It Pa @MACRODIR@/\:mdoc/\:doc\-nroff
+defines parameters appropriate for rendering to terminal devices.
+.
+.
+.It Pa @MACRODIR@/\:mdoc/\:doc\-ditroff
+defines parameters appropriate for rendering to typesetter devices.
+.
+.
+.It Pa @MACRODIR@/\:mdoc/\:doc\-syms
+defines many strings and macros that interpolate formatted text,
+such as names of operating system releases,
+*BSD libraries,
+and standards documents.
+.
+The string names are of the form
+.Ql doc\-str\- Ns Ar O Ns Li \- Ns Ar V ,
+.Ql doc\-str\-St Ns Li \-\- Ns Ar S Ns Li \- Ns Ar I
+(observe the double dashes),
+or
+.Ql doc\-str\-Lb\- Ns Ar L ,
+where
+.Ar O
+is one of the operating system macros from section
+.Sx "General text domain"
+above,
+.Ar V
+is an encoding of an operating system release
+(sometimes omitted along with the
+.Ql \-
+preceding it),
+.Ar S
+an identifier for a standards body or committee,
+.Ar I
+one for an issue of a standard promulgated by
+.Ar S ,
+and
+.Ar L
+a keyword identifying a *BSD library.
+.
+.
+.It Pa @LOCALMACRODIR@/\:mdoc\:.local
+This file houses local additions and customizations to the package.
+.
+It can be empty.
+.El
+.
+.
+.Sh "See also"
+.
+The
+.Lk https://mandoc.bsd.lv/ mandoc
+project maintains an independent implementation of the
+.Xr mdoc
+language and a renderer that directly parses its markup as well as that
+of
+.Xr man .
+.
+.
+.Pp
+.Xr groff @MAN1EXT@ ,
+.Xr man 1 ,
+.Xr @g@troff @MAN1EXT@ ,
+.Xr groff_man @MAN7EXT@ ,
+.Xr mdoc 7
+.
+.
+.Sh Bugs
+.
+Section 3f has not been added to the header routines.
+.
+.
+.Pp
+.Ql .Fn
+needs to have a check to prevent splitting up the line if its length is
+too short.
+.
+Occasionally it separates the last parenthesis,
+and sometimes looks ridiculous if output lines are being filled.
+.
+.
+.Pp
+The list and display macros do not do any keeps and certainly should be
+able to.
+.
+.
+.Pp
+As of
+.Xr groff
+1.23,
+.Ql \&Tn
+no longer changes the type size;
+this functionality may return in the next release.
+.\" Note what happens if the parameter list overlaps a newline
+.\" boundary.
+.\" to make sure a line boundary is crossed:
+.\" .Bd -literal
+.\" \&.Fn struct\e\ dictionarytable\e\ *dictionarylookup struct\e\ dictionarytable\e\ *tab[]
+.\" .Ed
+.\" .
+.\" .
+.\" .Pp
+.\" produces, nudge nudge,
+.\" .Fn struct\ dictionarytable\ *dictionarylookup char\ *h struct\ dictionarytable\ *tab[] ,
+.\" .Fn struct\ dictionarytable\ *dictionarylookup char\ *h struct\ dictionarytable\ *tab[] ,
+.\" nudge
+.\" .Fn struct\ dictionarytable\ *dictionarylookup char\ *h struct\ dictionarytable\ *tab[] .
+.\" .
+.\" .
+.\" .Pp
+.\" If double quotes are used, for example:
+.\" .Bd -literal
+.\" \&.Fn \*qstruct dictionarytable *dictionarylookup\*q \*qchar *h\*q \*qstruct dictionarytable *tab[]\*q
+.\" .Ed
+.\" .
+.\" .
+.\" .Pp
+.\" produces, nudge nudge,
+.\" .Fn "struct dictionarytable *dictionarylookup" "char *h" "struct dictionarytable *tab[]" ,
+.\" nudge
+.\" .Fn "struct dictionarytable *dictionarylookup" "char *h" "struct dictionarytable *tab[]" ,
+.\" nudge
+.\" .Fn "struct dictionarytable *dictionarylookup" "char *h" "struct dictionarytable *tab[]" .
+.\" .
+.\" .
+.\" .Pp
+.\" Not a pretty sight...
+.\" In a paragraph, a long parameter containing unpaddable spaces as
+.\" in the former example will cause
+.\" .Xr @g@troff
+.\" to break the line and spread
+.\" the remaining words out.
+.\" The latter example will adjust nicely to
+.\" justified margins, but may break in between an argument and its
+.\" declaration.
+.\" In
+.\" .Xr @g@nroff
+.\" the right margin is normally ragged and the problem is not as
+.\" severe.
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[*groff_groff_mdoc_7_man_C]
+.do rr *groff_groff_mdoc_7_man_C
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72: