]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
doc: html: reference each command option
authorPádraig Brady <P@draigBrady.com>
Thu, 27 Nov 2025 21:02:45 +0000 (21:02 +0000)
committerPádraig Brady <P@draigBrady.com>
Fri, 5 Dec 2025 16:40:00 +0000 (16:40 +0000)
* doc/coreutils.texi: Add anchors to each command option.
This also has the advantage of removing over 1000 lines,
through the use of macros.

doc/coreutils.texi

index 84102725a50f0a6492b82e0b1705673440268e2d..54acdaa642246506bf8974782bfc1ffcfeaa7afa 100644 (file)
@@ -587,42 +587,34 @@ insights to the overall process.
 @node Common options
 @chapter Common options
 
-@macro optBackup
-@item -b
-@itemx --backup[=@var{method}]
-@opindex -b
-@opindex --backup
+@macro optBackup{cmd}
+@optItem{\cmd\,-b}
+@optItemx{\cmd\,--backup,[=@var{method}]}
 @vindex VERSION_CONTROL
 @cindex backups, making
 @xref{Backup options}.
 Make a backup of each file that would otherwise be overwritten or removed.
 @end macro
 
-@macro optBackupSuffix
-@item -S @var{suffix}
-@itemx --suffix=@var{suffix}
-@opindex -S
-@opindex --suffix
+@macro optBackupSuffix{cmd}
+@optItem{\cmd\,-S,@w{ }@var{suffix}}
+@optItemx{\cmd\,--suffix,=@var{suffix}}
 Append @var{suffix} to each backup file made with @option{-b}.
 @xref{Backup options}.
 @end macro
 
-@macro optTargetDirectory
-@item -t @var{directory}
-@itemx --target-directory=@var{directory}
-@opindex -t
-@opindex --target-directory
+@macro optTargetDirectory{cmd}
+@optItem{\cmd\,-t,@w{ }@var{directory}}
+@optItemx{\cmd\,--target-directory,=@var{directory}}
 @cindex target directory
 @cindex destination directory
 Specify the destination @var{directory}.
 @xref{Target directory}.
 @end macro
 
-@macro optNoTargetDirectory
-@item -T
-@itemx --no-target-directory
-@opindex -T
-@opindex --no-target-directory
+@macro optNoTargetDirectory{cmd}
+@optItem{\cmd\,-T}
+@optItemx{\cmd\,--no-target-directory}
 @cindex target directory
 @cindex destination directory
 Do not treat the last operand specially when it is a directory or a
@@ -636,11 +628,9 @@ rather than a newline.  This option enables other programs to parse the
 output even when that output would contain data with embedded newlines.
 @end macro
 
-@macro optNull
-@item -0
-@itemx --null
-@opindex -0
-@opindex --null
+@macro optNull{cmd}
+@optItem{\cmd\,-0}
+@optItemx{\cmd\,--null}
 @outputNUL
 @end macro
 
@@ -663,9 +653,8 @@ reliably handle arbitrary file names (even those containing blanks
 or other special characters).
 @end macro
 
-@macro optSi
-@item --si
-@opindex --si
+@macro optSi{cmd}
+@optItem{\cmd\,--si}
 @cindex SI output
 Append an SI-style abbreviation to each size, such as @samp{M} for
 megabytes.  Powers of 1000 are used, not 1024; @samp{M} stands for
@@ -675,11 +664,9 @@ megabytes.  Powers of 1000 are used, not 1024; @samp{M} stands for
 you prefer powers of 1024.
 @end macro
 
-@macro optHumanReadable
-@item -h
-@itemx --human-readable
-@opindex -h
-@opindex --human-readable
+@macro optHumanReadable{cmd}
+@optItem{\cmd\,-h}
+@optItemx{\cmd\,--human-readable}
 @cindex human-readable output
 Append a size letter to each size, such as @samp{M} for mebibytes.
 Powers of 1024 are used, not 1000; @samp{M} stands for 1,048,576 bytes.
@@ -687,9 +674,8 @@ This option is equivalent to @option{--block-size=human-readable}.
 Use the @option{--si} option if you prefer powers of 1000.
 @end macro
 
-@macro optStripTrailingSlashes
-@item --strip-trailing-slashes
-@opindex --strip-trailing-slashes
+@macro optStripTrailingSlashes{cmd}
+@optItem{\cmd\,--strip-trailing-slashes}
 @cindex stripping trailing slashes
 Remove any trailing slashes from each @var{source} argument.
 @xref{Trailing slashes}.
@@ -1419,18 +1405,16 @@ a symlink or its referent.
 
 @table @samp
 
-@macro choptH
-@item -H
-@opindex -H
+@macro choptH{cmd}
+@optItem{\cmd\,-H}
 @cindex symbolic link to directory, traverse if on the command line
 If @option{--recursive} (@option{-R}) is specified and
 a command line argument is a symbolic link to a directory, traverse it.
 @end macro
 @choptH
 
-@macro choptL
-@item -L
-@opindex -L
+@macro choptL{cmd}
+@optItem{\cmd\,-L}
 @cindex symbolic link to directory, traverse each that is encountered
 In a recursive traversal, traverse every symbolic link to a directory
 that is encountered.
@@ -1447,12 +1431,10 @@ the operation will be performed on the target of that symlink,
 possibly allowing the attacker to escalate privileges.
 
 @end macro
-
 @choptL
 
-@macro choptP
-@item -P
-@opindex -P
+@macro choptP{cmd}
+@optItem{\cmd\,-P}
 @cindex symbolic link to directory, never traverse
 Do not traverse any symbolic links.
 @end macro
@@ -1746,63 +1728,46 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -A
-@itemx --show-all
-@opindex -A
-@opindex --show-all
+@optItem{cat,-A}
+@optItemx{cat,--show-all}
 Equivalent to @option{-vET}.
 
-@item -b
-@itemx --number-nonblank
-@opindex -b
-@opindex --number-nonblank
+@optItem{cat,-b}
+@optItemx{cat,--number-nonblank}
 Number all nonempty output lines, starting with 1.
 
-@item -e
-@opindex -e
+@optItem{cat,-e}
 Equivalent to @option{-vE}.
 
-@item -E
-@itemx --show-ends
-@opindex -E
-@opindex --show-ends
+@optItem{cat,-E}
+@optItemx{cat,--show-ends}
 Display a @samp{$} after the end of each line.
 The @code{\r\n} combination is shown as @samp{^M$}.
 
-@item -n
-@itemx --number
-@opindex -n
-@opindex --number
+@optItem{cat,-n}
+@optItemx{cat,--number}
 Number all output lines, starting with 1.  This option is ignored
 if @option{-b} is in effect.
 
-@item -s
-@itemx --squeeze-blank
-@opindex -s
-@opindex --squeeze-blank
+@optItem{cat,-s}
+@optItemx{cat,--squeeze-blank}
 @cindex squeezing empty lines
 @cindex squeezing blank lines
 Suppress repeated adjacent blank lines; output just one empty line
 instead of several.
 
-@item -t
-@opindex -t
+@optItem{cat,-t}
 Equivalent to @option{-vT}.
 
-@item -T
-@itemx --show-tabs
-@opindex -T
-@opindex --show-tabs
+@optItem{cat,-T}
+@optItemx{cat,--show-tabs}
 Display TAB characters as @samp{^I}.
 
-@item -u
-@opindex -u
+@optItem{cat,-u}
 Ignored; for POSIX compatibility.
 
-@item -v
-@itemx --show-nonprinting
-@opindex -v
-@opindex --show-nonprinting
+@optItem{cat,-v}
+@optItemx{cat,--show-nonprinting}
 Display control characters except for LFD and TAB using
 @samp{^} notation and precede characters that have the high bit set with
 @samp{M-}.
@@ -1852,23 +1817,17 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -b
-@itemx --before
-@opindex -b
-@opindex --before
+@optItem{tac,-b}
+@optItemx{tac,--before}
 The separator is attached to the beginning of the record that it
 precedes in the file.
 
-@item -r
-@itemx --regex
-@opindex -r
-@opindex --regex
+@optItem{tac,-r}
+@optItemx{tac,--regex}
 Treat the separator string as a regular expression.
 
-@item -s @var{separator}
-@itemx --separator=@var{separator}
-@opindex -s
-@opindex --separator
+@optItem{tac,-s,@w{ }@var{separator}}
+@optItemx{tac,--separator,=@var{separator}}
 Use @var{separator} as the record separator, instead of newline.
 Note an empty @var{separator} is treated as a zero byte.
 I.e., input and output items are delimited with ASCII NUL.
@@ -1941,10 +1900,8 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -b @var{style}
-@itemx --body-numbering=@var{style}
-@opindex -b
-@opindex --body-numbering
+@optItem{nl,-b,@w{ }@var{style}}
+@optItemx{nl,--body-numbering,=@var{style}}
 Select the numbering style for lines in the body section of each
 logical page.  When a line is not numbered, the current line number
 is not incremented, but the line number separator character is still
@@ -1963,10 +1920,8 @@ expression @var{bre}.
 @xref{Regular Expressions, , Regular Expressions, grep, The GNU Grep Manual}.
 @end table
 
-@item -d @var{cd}
-@itemx --section-delimiter=@var{cd}
-@opindex -d
-@opindex --section-delimiter
+@optItem{nl,-d,@w{ }@var{cd}}
+@optItemx{nl,--section-delimiter,=@var{cd}}
 @cindex section delimiters of pages
 Set the section delimiter characters to @var{cd}; default is
 @samp{\:}.  If only @var{c} is given, the second remains @samp{:}.
@@ -1976,29 +1931,21 @@ matching is disabled.
 (Remember to protect @samp{\} or other metacharacters from shell
 expansion with quotes or extra backslashes.)
 
-@item -f @var{style}
-@itemx --footer-numbering=@var{style}
-@opindex -f
-@opindex --footer-numbering
+@optItem{nl,-f,@w{ }@var{style}}
+@optItemx{nl,--footer-numbering,=@var{style}}
 Analogous to @option{--body-numbering}.
 
-@item -h @var{style}
-@itemx --header-numbering=@var{style}
-@opindex -h
-@opindex --header-numbering
+@optItem{nl,-h,@w{ }@var{style}}
+@optItemx{nl,--header-numbering,=@var{style}}
 Analogous to @option{--body-numbering}.
 
-@item -i @var{number}
-@itemx --line-increment=@var{number}
-@opindex -i
-@opindex --line-increment
+@optItem{nl,-i,@w{ }@var{number}}
+@optItemx{nl,--line-increment,=@var{number}}
 Increment line numbers by @var{number} (default 1).
 @var{number} can be negative to decrement.
 
-@item -l @var{number}
-@itemx --join-blank-lines=@var{number}
-@opindex -l
-@opindex --join-blank-lines
+@optItem{nl,-l,@w{ }@var{number}}
+@optItemx{nl,--join-blank-lines,=@var{number}}
 @cindex empty lines, numbering
 @cindex blank lines, numbering
 Consider @var{number} (default 1) consecutive empty lines to be one
@@ -2007,10 +1954,8 @@ than @var{number} consecutive empty lines occur, do not number them.
 An empty line is one that contains no characters, not even spaces
 or tabs.
 
-@item -n @var{format}
-@itemx --number-format=@var{format}
-@opindex -n
-@opindex --number-format
+@optItem{nl,-n,@w{ }@var{format}}
+@optItemx{nl,--number-format,=@var{format}}
 Select the line numbering format (default is @code{rn}):
 
 @table @samp
@@ -2025,30 +1970,22 @@ right justified, no leading zeros;
 right justified, leading zeros.
 @end table
 
-@item -p
-@itemx --no-renumber
-@opindex -p
-@opindex --no-renumber
+@optItem{nl,-p}
+@optItemx{nl,--no-renumber}
 Do not reset the line number at the start of a logical page.
 
-@item -s @var{string}
-@itemx --number-separator=@var{string}
-@opindex -s
-@opindex --number-separator
+@optItem{nl,-s,@w{ }@var{string}}
+@optItemx{nl,--number-separator,=@var{string}}
 Separate the line number from the text line in the output with
 @var{string} (default is the TAB character).
 
-@item -v @var{number}
-@itemx --starting-line-number=@var{number}
-@opindex -v
-@opindex --starting-line-number
+@optItem{nl,-v,@w{ }@var{number}}
+@optItemx{nl,--starting-line-number,=@var{number}}
 Set the initial line number on each logical page to @var{number} (default 1).
 The starting @var{number} can be negative.
 
-@item -w @var{number}
-@itemx --number-width=@var{number}
-@opindex -w
-@opindex --number-width
+@optItem{nl,-w,@w{ }@var{number}}
+@optItemx{nl,--number-width,=@var{number}}
 Use @var{number} characters for line numbers (default 6).
 
 @end table
@@ -2099,10 +2036,8 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -A @var{radix}
-@itemx --address-radix=@var{radix}
-@opindex -A
-@opindex --address-radix
+@optItem{od,-A,@w{ }@var{radix}}
+@optItemx{od,--address-radix,=@var{radix}}
 @cindex radix for file offsets
 @cindex file offset radix
 Select the base in which file offsets are printed.  @var{radix} can
@@ -2121,8 +2056,7 @@ none (do not print offsets).
 
 The default is octal.
 
-@item --endian=@var{order}
-@opindex --endian
+@optItem{od,--endian,=@var{order}}
 @cindex byte-swapping
 @cindex endianness
 Reorder input bytes, to handle inputs with differing byte orders,
@@ -2131,27 +2065,21 @@ of the current system.  Swapping is performed according to the
 specified @option{--type} size and endian @var{order}, which can be
 @samp{little} or @samp{big}.
 
-@item -j @var{bytes}
-@itemx --skip-bytes=@var{bytes}
-@opindex -j
-@opindex --skip-bytes
+@optItem{od,-j,@w{ }@var{bytes}}
+@optItemx{od,--skip-bytes,=@var{bytes}}
 Skip @var{bytes} input bytes before formatting and writing.  If
 @var{bytes} begins with @samp{0x} or @samp{0X}, it is interpreted in
 hexadecimal; otherwise, if it begins with @samp{0}, in octal; otherwise,
 in decimal.
 @multiplierSuffixes{bytes}
 
-@item -N @var{bytes}
-@itemx --read-bytes=@var{bytes}
-@opindex -N
-@opindex --read-bytes
+@optItem{od,-N,@w{ }@var{bytes}}
+@optItemx{od,--read-bytes,=@var{bytes}}
 Output at most @var{bytes} bytes of the input.  Prefixes and suffixes on
 @code{bytes} are interpreted as for the @option{-j} option.
 
-@item -S @var{bytes}
-@itemx --strings[=@var{bytes}]
-@opindex -S
-@opindex --strings
+@optItem{od,-S,@w{ }@var{bytes}}
+@optItemx{od,--strings,=@var{bytes}}
 @cindex string constants, outputting
 Instead of the normal output, output only @dfn{string constants}: at
 least @var{bytes} consecutive printable characters,
@@ -2163,10 +2091,8 @@ are considered ASCII NUL terminated.
 
 If @var{bytes} is omitted with @option{--strings}, the default is 3.
 
-@item -t @var{type}
-@itemx --format=@var{type}
-@opindex -t
-@opindex --format
+@optItem{od,-t,@w{ }@var{type}}
+@optItemx{od,--format,=@var{type}}
 Select the format in which to output the file data.  @var{type} is a
 string of one or more of the below type indicator characters.  If you
 include more than one type indicator character in a single @var{type}
@@ -2239,19 +2165,15 @@ double
 long double
 @end table
 
-@item -v
-@itemx --output-duplicates
-@opindex -v
-@opindex --output-duplicates
+@optItem{od,-v}
+@optItemx{od,--output-duplicates}
 Output consecutive lines that are identical.  By default, when two or
 more consecutive output lines would be identical, @command{od} outputs only
 the first line, and puts just an asterisk on the following line to
 indicate the elision.
 
-@item -w[@var{n}]
-@itemx --width[=@var{n}]
-@opindex -w
-@opindex --width
+@optItem{od,-w,@w{ }@var{n}}
+@optItemx{od,--width,=@var{n}}
 Dump @code{n} input bytes per output line.  This must be a multiple of
 the least common multiple of the sizes associated with the specified
 output types.
@@ -2267,49 +2189,38 @@ specification options.  These options accumulate.
 
 @table @samp
 
-@item -a
-@opindex -a
+@optItem{od,-a}
 Output as named characters.  Equivalent to @samp{-t a}.
 
-@item -b
-@opindex -b
+@optItem{od,-b}
 Output as octal bytes.  Equivalent to @samp{-t o1}.
 
-@item -c
-@opindex -c
+@optItem{od,-c}
 Output as printable single byte characters, C backslash escapes
 or 3 digit octal sequences.  Equivalent to @samp{-t c}.
 
-@item -d
-@opindex -d
+@optItem{od,-d}
 Output as unsigned decimal two-byte units.  Equivalent to @samp{-t u2}.
 
-@item -f
-@opindex -f
+@optItem{od,-f}
 Output as floats.  Equivalent to @samp{-t fF}.
 
-@item -i
-@opindex -i
+@optItem{od,-i}
 Output as decimal ints.  Equivalent to @samp{-t dI}.
 
-@item -l
-@opindex -l
+@optItem{od,-l}
 Output as decimal long ints.  Equivalent to @samp{-t dL}.
 
-@item -o
-@opindex -o
+@optItem{od,-o}
 Output as octal two-byte units.  Equivalent to @option{-t o2}.
 
-@item -s
-@opindex -s
+@optItem{od,-s}
 Output as decimal two-byte units.  Equivalent to @option{-t d2}.
 
-@item -x
-@opindex -x
+@optItem{od,-x}
 Output as hexadecimal two-byte units.  Equivalent to @samp{-t x2}.
 
-@item --traditional
-@opindex --traditional
+@optItem{od,--traditional}
 Recognize the non-option label argument that traditional @command{od}
 accepted.  The following syntax:
 
@@ -2371,10 +2282,10 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -w @var{cols}
-@itemx --wrap=@var{cols}
-@opindex -w
-@opindex --wrap
+@optAnchor{base32,-w}
+@optAnchor{base32,--wrap}
+@optItem{base64,-w,@w{ }@var{cols}}
+@optItemx{base64,--wrap,=@var{cols}}
 @cindex wrap data
 @cindex column to wrap data after
 During encoding, wrap lines after @var{cols} characters.  This must be
@@ -2383,20 +2294,20 @@ a positive number.
 The default is to wrap after 76 characters.  Use the value 0 to
 disable line wrapping altogether.
 
-@item -d
-@itemx --decode
-@opindex -d
-@opindex --decode
+@optAnchor{base32,-d}
+@optAnchor{base32,--decode}
+@optItem{base64,-d}
+@optItemx{base64,--decode}
 @cindex Decode base64 data
 @cindex Base64 decoding
 Change the mode of operation, from the default of encoding data, to
 decoding data.  Input is expected to be base64 encoded data, and the
 output will be the original data.
 
-@item -i
-@itemx --ignore-garbage
-@opindex -i
-@opindex --ignore-garbage
+@optAnchor{base32,-i}
+@optAnchor{base32,--ignore-garbage}
+@optItem{base64,-i}
+@optItemx{base64,--ignore-garbage}
 @cindex Ignore garbage in base64 stream
 When decoding, newlines are always accepted.
 During decoding, ignore unrecognized bytes,
@@ -2434,22 +2345,19 @@ Supported @var{encoding}s are:
 
 @table @samp
 
-@item --base64
-@opindex --base64
+@optItem{basenc,--base64}
 Encode into (or decode from with @option{-d/--decode}) base64 form.
 The format conforms to
 @uref{https://datatracker.ietf.org/doc/html/rfc4648#section-4, RFC 4648#4}.
 Equivalent to the @command{base64} command.
 
-@item --base64url
-@opindex --base64url
+@optItem{basenc,--base64url}
 Encode into (or decode from with @option{-d/--decode}) file-and-url-safe
 base64 form (using @samp{_} and @samp{-} instead of @samp{+} and @samp{/}).
 The format conforms to
 @uref{https://datatracker.ietf.org/doc/html/rfc4648#section-5, RFC 4648#5}.
 
-@item --base58
-@opindex --base58
+@optItem{basenc,--base58}
 Encode into (or decode from with @option{-d/--decode}) base58 form.
 The format conforms to
 @uref{https://datatracker.ietf.org/doc/html/draft-msporny-base58-03,
@@ -2461,42 +2369,36 @@ For example this generates a unique 128 bit ID in 22 bytes:
 uuidgen | basenc --base16 -di | basenc --base58
 @end example
 
-@item --base32
-@opindex --base32
+@optItem{basenc,--base32}
 Encode into (or decode from with @option{-d/--decode}) base32 form.
 The encoded data uses the @samp{ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=} characters.
 The format conforms to
 @uref{https://datatracker.ietf.org/doc/html/rfc4648#section-6, RFC 4648#6}.
 Equivalent to the @command{base32} command.
 
-@item --base32hex
-@opindex --base32hex
+@optItem{basenc,--base32hex}
 Encode into (or decode from with @option{-d/--decode}) Extended Hex Alphabet
 base32 form. The encoded data uses the
 @samp{0123456789ABCDEFGHIJKLMNOPQRSTUV=} characters. The format conforms to
 @uref{https://datatracker.ietf.org/doc/html/rfc4648#section-7, RFC 4648#7}.
 
-@item --base16
-@opindex --base16
+@optItem{basenc,--base16}
 Encode into (or decode from with @option{-d/--decode}) base16 (hexadecimal)
 form. The encoded data uses the @samp{0123456789ABCDEF} characters. The format
 conforms to
 @uref{https://datatracker.ietf.org/doc/html/rfc4648#section-8, RFC 4648#8}.
 
-@item --base2lsbf
-@opindex --base2lsbf
+@optItem{basenc,--base2lsbf}
 Encode into (or decode from with @option{-d/--decode}) binary string form
 (@samp{0} and @samp{1}) with the @emph{least} significant bit of every byte
 first.
 
-@item --base2msbf
-@opindex --base2msbf
+@optItem{basenc,--base2msbf}
 Encode into (or decode from with @option{-d/--decode}) binary string form
 (@samp{0} and @samp{1}) with the @emph{most} significant bit of every byte
 first.
 
-@item --z85
-@opindex --z85
+@optItem{basenc,--z85}
 Encode into (or decode from with @option{-d/--decode}) Z85 form
 (a modified Ascii85 form). The encoded data uses the
 @samp{0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU@
@@ -2603,58 +2505,45 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -c
-@itemx --crown-margin
-@opindex -c
-@opindex --crown-margin
+@optItem{fmt,-c}
+@optItemx{fmt,--crown-margin}
 @cindex crown margin
 @dfn{Crown margin} mode: preserve the indentation of the first two
 lines within a paragraph, and align the left margin of each subsequent
 line with that of the second line.
 
-@item -t
-@itemx --tagged-paragraph
-@opindex -t
-@opindex --tagged-paragraph
+@optItem{fmt,-t}
+@optItemx{fmt,--tagged-paragraph}
 @cindex tagged paragraphs
 @dfn{Tagged paragraph} mode: like crown margin mode, except that if
 indentation of the first line of a paragraph is the same as the
 indentation of the second, the first line is treated as a one-line
 paragraph.
 
-@item -s
-@itemx --split-only
-@opindex -s
-@opindex --split-only
+@optItem{fmt,-s}
+@optItemx{fmt,--split-only}
 Split lines only.  Do not join short lines to form longer ones.  This
 prevents sample lines of code, and other such ``formatted'' text from
 being unduly combined.
 
-@item -u
-@itemx --uniform-spacing
-@opindex -u
-@opindex --uniform-spacing
+@optItem{fmt,-u}
+@optItemx{fmt,--uniform-spacing}
 Uniform spacing.  Reduce spacing between words to one space, and spacing
 between sentences to two spaces.
 
-@item -@var{width}
-@itemx -w @var{width}
-@itemx --width=@var{width}
-@opindex -@var{width}
-@opindex -w
-@opindex --width
+@optItem{fmt,-@var{width}}
+@optItemx{fmt,-w,@w{ }@var{width}}
+@optItemx{fmt,--width,=@var{width}}
 Fill output lines up to @var{width} characters (default 75 or @var{goal}
 plus 10, if @var{goal} is provided).
 
-@item -g @var{goal}
-@itemx --goal=@var{goal}
-@opindex -g
-@opindex --goal
+@optItem{fmt,-g,@w{ }@var{goal}}
+@optItemx{fmt,--goal,=@var{goal}}
 @command{fmt} initially tries to make lines @var{goal} characters wide.
 By default, this is 7% shorter than @var{width}.
 
-@item -p @var{prefix}
-@itemx --prefix=@var{prefix}
+@optItem{fmt,-p,@w{ }@var{prefix}}
+@optItemx{fmt,--prefix,=@var{prefix}}
 Only lines beginning with @var{prefix} (possibly preceded by whitespace)
 are subject to formatting.  The prefix and any preceding whitespace are
 stripped for the formatting and then re-attached to each formatted output
@@ -2712,6 +2601,7 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
+@optAnchor{pr,--pages}
 @item +@var{first_page}[:@var{last_page}]
 @itemx --pages=@var{first_page}[:@var{last_page}]
 @c The two following @opindex lines evoke warnings because they contain ':'
@@ -2729,10 +2619,8 @@ is identical.  By default, counting starts with the first page of input
 file (not first page printed).  Line numbering may be altered by @option{-N}
 option.
 
-@item -@var{column}
-@itemx --columns=@var{column}
-@opindex -@var{column}
-@opindex --columns
+@optItem{pr,-@var{column}}
+@optItemx{pr,--columns,=@var{column}}
 @cindex down columns
 With each single @var{file}, produce @var{column} columns of output
 (default is 1) and print columns down, unless @option{-a} is used.  The
@@ -2748,32 +2636,26 @@ Lines of full length are joined in a free field format and @option{-S}
 option may set field separators.  @option{-@var{column}} may not be used
 with the @option{-m} option.
 
-@item -a
-@itemx --across
-@opindex -a
-@opindex --across
+@optItem{pr,-a}
+@optItemx{pr,--across}
 @cindex across columns
 With each single @var{file}, print columns across rather than down.  The
 @option{-@var{column}} option must be given with @var{column} greater than one.
 If a line is too long to fit in a column, it is truncated.
 
-@item -c
-@itemx --show-control-chars
-@opindex -c
-@opindex --show-control-chars
+@optItem{pr,-c}
+@optItemx{pr,--show-control-chars}
 Print control characters using hat notation (e.g., @samp{^G}); print
 other nonprinting characters in octal backslash notation.  By default,
 nonprinting characters are not changed.
 
-@item -d
-@itemx --double-space
-@opindex -d
-@opindex --double-space
+@optItem{pr,-d}
+@optItemx{pr,--double-space}
 @cindex double spacing
 Double space the output.
 
-@item -D @var{format}
-@itemx --date-format=@var{format}
+@optItem{pr,-D,@w{ }@var{format}}
+@optItemx{pr,--date-format,=@var{format}}
 @cindex time formats
 @cindex formatting times
 Format header dates using @var{format}, using the same conventions as
@@ -2798,47 +2680,36 @@ the @env{TZ} environment variable, or by the system default rules if
 @env{TZ} is not set.  @xref{TZ Variable,, Specifying the Time Zone
 with @env{TZ}, libc, The GNU C Library Reference Manual}.
 
-@item -e[@var{in-tabchar}[@var{in-tabwidth}]]
-@itemx --expand-tabs[=@var{in-tabchar}[@var{in-tabwidth}]]
-@opindex -e
-@opindex --expand-tabs
+@optItem{pr,-e,[@var{in-tabchar}[@var{in-tabwidth}]]}
+@optItemx{pr,--expand-tabs,[=@var{in-tabchar}[@var{in-tabwidth}]]}
 @cindex input tabs
 Expand @var{tab}s to spaces on input.  Optional argument @var{in-tabchar} is
 the input tab character (default is the TAB character).  Second optional
 argument @var{in-tabwidth} is the input tab character's width (default
 is 8).
 
-@item -f
-@itemx -F
-@itemx --form-feed
-@opindex -F
-@opindex -f
-@opindex --form-feed
+@optItem{pr,-f}
+@optItemx{pr,-F}
+@optItemx{pr,--form-feed}
 Use a form feed instead of newlines to separate output pages.  This does
 not alter the default page length of 66 lines.
 
-@item -h @var{header}
-@itemx --header=@var{header}
-@opindex -h
-@opindex --header
+@optItem{pr,-h,@w{ }@var{header}}
+@optItemx{pr,--header,=@var{header}}
 Replace the file name in the header with the centered string @var{header}.
 When using the shell, @var{header} should be quoted and should be
 separated from @option{-h} by a space.
 
-@item -i[@var{out-tabchar}[@var{out-tabwidth}]]
-@itemx --output-tabs[=@var{out-tabchar}[@var{out-tabwidth}]]
-@opindex -i
-@opindex --output-tabs
+@optItem{pr,-i,@w{ }[@var{out-tabchar}[@var{out-tabwidth}]]}
+@optItemx{pr,--output-tabs,=[@var{out-tabchar}[@var{out-tabwidth}]]}
 @cindex output tabs
 Replace spaces with @var{tab}s on output.  Optional argument @var{out-tabchar}
 is the output tab character (default is the TAB character).  Second optional
 argument @var{out-tabwidth} is the output tab character's width (default
 is 8).
 
-@item -J
-@itemx --join-lines
-@opindex -J
-@opindex --join-lines
+@optItem{pr,-J}
+@optItemx{pr,--join-lines}
 Merge lines of full length.  Used together with the column options
 @option{-@var{column}}, @option{-a -@var{column}} or @option{-m}.  Turns off
 @option{-W/-w} line truncation;
@@ -2849,19 +2720,15 @@ to disentangle the old (POSIX-compliant) options @option{-w} and
 @option{-s} along with the three column options.
 
 
-@item -l @var{page_length}
-@itemx --length=@var{page_length}
-@opindex -l
-@opindex --length
+@optItem{pr,-l,@w{ }@var{page_length}}
+@optItemx{pr,--length,=@var{page_length}}
 Set the page length to @var{page_length} (default 66) lines, including
 the lines of the header [and the footer].  If @var{page_length} is less
 than or equal to 10, the header and footer are omitted, as if the
 @option{-t} option had been given.
 
-@item -m
-@itemx --merge
-@opindex -m
-@opindex --merge
+@optItem{pr,-m}
+@optItemx{pr,--merge}
 Merge and print all @var{file}s in parallel, one in each column.  If a
 line is too long to fit in a column, it is truncated, unless the @option{-J}
 option is used.  @option{--sep-string[=@var{string}]} may be used.
@@ -2874,10 +2741,8 @@ show no separators or line numbers.  The default header becomes
 may be used with the @option{-h} or @option{--header} option to fill up
 the middle blank part.
 
-@item -n[@var{number-separator}[@var{digits}]]
-@itemx --number-lines[=@var{number-separator}[@var{digits}]]
-@opindex -n
-@opindex --number-lines
+@optItem{pr,-n,[@var{number-separator}[@var{digits}]]}
+@optItemx{pr,--number-lines,[=@var{number-separator}[@var{digits}]]}
 Provide @var{digits} digit line numbering (default for @var{digits} is
 5).  With multicolumn output the number occupies the first @var{digits}
 column positions of each text column or only each line of @option{-m}
@@ -2898,17 +2763,13 @@ fixed number of spaces is always printed in the place of the
 @var{number-separator} TAB@.  The tabification depends upon the output
 position.
 
-@item -N @var{line_number}
-@itemx --first-line-number=@var{line_number}
-@opindex -N
-@opindex --first-line-number
+@optItem{pr,-N,@w{ }@var{line_number}}
+@optItemx{pr,--first-line-number,=@var{line_number}}
 Start line counting with the number @var{line_number} at first line of
 first page printed (in most cases not the first line of the input file).
 
-@item -o @var{margin}
-@itemx --indent=@var{margin}
-@opindex -o
-@opindex --indent
+@optItem{pr,-o,@w{ }@var{margin}}
+@optItemx{pr,--indent,=@var{margin}}
 @cindex indenting lines
 @cindex left margin
 Indent each line with a margin @var{margin} spaces wide (default is zero).
@@ -2916,17 +2777,13 @@ The total page width is the size of the margin plus the @var{page_width}
 set with the @option{-W/-w} option.  A limited overflow may occur with
 numbered single column output (compare @option{-n} option).
 
-@item -r
-@itemx --no-file-warnings
-@opindex -r
-@opindex --no-file-warnings
+@optItem{pr,-r}
+@optItemx{pr,--no-file-warnings}
 Do not print a warning message when an argument @var{file} cannot be
 opened.  (The exit status will still be nonzero, however.)
 
-@item -s[@var{char}]
-@itemx --separator[=@var{char}]
-@opindex -s
-@opindex --separator
+@optItem{pr,-s,@w{ }@var{char}}
+@optItemx{pr,--separator,=@var{char}}
 Separate columns by a single character @var{char}.  The default for
 @var{char} is the TAB character without @option{-w} and @samp{no
 character} with @option{-w}.  Without @option{-s} the default separator
@@ -2934,11 +2791,8 @@ character} with @option{-w}.  Without @option{-s} the default separator
 three column options (@option{-COLUMN}|@option{-a -COLUMN}|@option{-m}) unless
 @option{-w} is set.  This is a POSIX-compliant formulation.
 
-
-@item -S[@var{string}]
-@itemx --sep-string[=@var{string}]
-@opindex -S
-@opindex --sep-string
+@optItem{pr,-S,[@var{string}]}
+@optItemx{pr,--sep-string,[=@var{string}]}
 Use @var{string} to separate output columns.  The @option{-S} option doesn't
 affect the @option{-W/-w} option, unlike the @option{-s} option which does.  It
 does not affect line truncation or column alignment.
@@ -2948,10 +2802,8 @@ Without @option{-S} or @option{-J}, @command{pr} uses a @samp{space}
 (same as @option{-S"@w{ }"}).
 If no @samp{@var{string}} argument is specified, @samp{""} is assumed.
 
-@item -t
-@itemx --omit-header
-@opindex -t
-@opindex --omit-header
+@optItem{pr,-t}
+@optItemx{pr,--omit-header}
 Do not print the usual header [and footer] on each page, and do not fill
 out the bottom of pages (with blank lines or a form feed).  No page
 structure is produced, but form feeds set in the input files are retained.
@@ -2960,23 +2812,17 @@ useful together with other options; e.g.: @option{-t -e4}, expand TAB characters
 in the input file to 4 spaces but don't make any other changes.  Use of
 @option{-t} overrides @option{-h}.
 
-@item -T
-@itemx --omit-pagination
-@opindex -T
-@opindex --omit-pagination
+@optItem{pr,-T}
+@optItemx{pr,--omit-pagination}
 Do not print header [and footer].  In addition eliminate all form feeds
 set in the input files.
 
-@item -v
-@itemx --show-nonprinting
-@opindex -v
-@opindex --show-nonprinting
+@optItem{pr,-v}
+@optItemx{pr,--show-nonprinting}
 Print nonprinting characters in octal backslash notation.
 
-@item -w @var{page_width}
-@itemx --width=@var{page_width}
-@opindex -w
-@opindex --width
+@optItem{pr,-w,@w{ }@var{page_width}}
+@optItemx{pr,--width,=@var{page_width}}
 Set page width to @var{page_width} characters for multiple text-column
 output only (default for @var{page_width} is 72).  The specified
 @var{page_width} is rounded down so that columns have equal width.
@@ -2986,10 +2832,8 @@ Lines of full length are merged, regardless of the column options
 set.  No @var{page_width} setting is possible with single column output.
 A POSIX-compliant formulation.
 
-@item -W @var{page_width}
-@itemx --page_width=@var{page_width}
-@opindex -W
-@opindex --page_width
+@optItem{pr,-W,@w{ }@var{page_width}}
+@optItemx{pr,--page-width,=@var{page_width}}
 Set the page width to @var{page_width} characters, honored with and
 without a column option.  With a column option, the specified @var{page_width}
 is rounded down so that columns have equal width.  Text lines are truncated,
@@ -3034,33 +2878,25 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -b
-@itemx --bytes
-@opindex -b
-@opindex --bytes
+@optItem{fold,-b}
+@optItemx{fold,--bytes}
 Count bytes rather than columns, so that tabs, backspaces, and carriage
 returns are each counted as taking up one column, just like other
 characters.
 
-@item -c
-@itemx --characters
-@opindex -c
-@opindex --characters
+@optItem{fold,-c}
+@optItemx{fold,--characters}
 Count characters rather than columns, meaning that lines containing
 characters wider than one column will be visually longer.
 
-@item -s
-@itemx --spaces
-@opindex -s
-@opindex --spaces
+@optItem{fold,-s}
+@optItemx{fold,--spaces}
 Break at word boundaries: the line is broken after the last blank before
 the maximum line length.  If the line contains no such blanks, the line
 is broken at the maximum line length as usual.
 
-@item -w @var{width}
-@itemx --width=@var{width}
-@opindex -w
-@opindex --width
+@optItem{fold,-w,@w{ }@var{width}}
+@optItemx{fold,--width,@var{width}}
 Use a maximum line length of @var{width} columns instead of 80.
 
 For compatibility @command{fold} supports an obsolete option syntax
@@ -3116,39 +2952,30 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -c [-]@var{num}
-@itemx --bytes=[-]@var{num}
-@opindex -c
-@opindex --bytes
+@optItem{head,-c,@w{ }[-]@var{num}}
+@optItemx{head,--bytes,=[-]@var{num}}
 Print the first @var{num} bytes, instead of initial lines.
 However, if @var{num} is prefixed with a @samp{-},
 print all but the last @var{num} bytes of each file.
 @multiplierSuffixes{num}
 
-@item -n [-]@var{num}
-@itemx --lines=[-]@var{num}
-@opindex -n
-@opindex --lines
+@optItem{head,-n,@w{ }[-]@var{num}}
+@optItemx{head,--lines,=[-]@var{num}}
 Output the first @var{num} lines.
 However, if @var{num} is prefixed with a @samp{-},
 print all but the last @var{num} lines of each file.
 Size multiplier suffixes are the same as with the @option{-c} option.
 
-@item -q
-@itemx --quiet
-@itemx --silent
-@opindex -q
-@opindex --quiet
-@opindex --silent
+@optItem{head,-q}
+@optItemx{head,--quiet}
+@optItemx{head,--silent}
 Never print file name headers.
 
-@item -v
-@itemx --verbose
-@opindex -v
-@opindex --verbose
+@optItem{head,-v}
+@optItemx{head,--verbose}
 Always print file name headers.
 
-@optZeroTerminated
+@optZeroTerminated{head}
 
 @end table
 
@@ -3211,25 +3038,20 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -c [+]@var{num}
-@itemx --bytes=[+]@var{num}
-@opindex -c
-@opindex --bytes
+@optItem{tail,-c,@w{ }[+]@var{num}}
+@optItemx{tail,--bytes,=[+]@var{num}}
 Output the last @var{num} bytes, instead of final lines.
 If @var{num} is prefixed with a @samp{+}, start printing with
 byte @var{num} from the start of each file. For example to skip the first byte
 use @code{tail -c +2}, while to skip all but the last byte use @code{tail -c 1}.
 @multiplierSuffixes{num}
 
-@item --debug
-@opindex --debug
+@optItem{tail,--debug}
 Output extra information to standard error,
 like the --follow implementation being used.
 
-@item -f
-@itemx --follow[=@var{how}]
-@opindex -f
-@opindex --follow
+@optItem{tail,-f}
+@optItemx{tail,--follow,[=@var{how}]}
 @cindex growing files
 @vindex name @r{follow option}
 @vindex descriptor @r{follow option}
@@ -3286,14 +3108,12 @@ by using a sub-second sleep interval, e.g., via an alias like this:
 alias tail='tail -s.1'
 @end example
 
-@item -F
-@opindex -F
+@optItem{tail,-F}
 This option is the same as @option{--follow=name --retry}.  That is, tail
 will attempt to reopen a file when it is removed.  Should this fail, tail
 will keep trying until it becomes accessible again.
 
-@item --max-unchanged-stats=@var{n}
-@opindex --max-unchanged-stats
+@optItem{tail,--max-unchanged-stats,=@var{n}}
 When tailing a file by name, if there have been @var{n} (default
 n=@value{DEFAULT_MAX_N_UNCHANGED_STATS_BETWEEN_OPENS}) consecutive
 iterations for which the file has not changed, then
@@ -3305,18 +3125,15 @@ and when it prints the lines that have accumulated in the new log file.
 This option is meaningful only when polling (i.e., without inotify)
 and when following by name.
 
-@item -n [+]@var{num}
-@itemx --lines=[+]@var{}
-@opindex -n
-@opindex --lines
+@optItem{tail,-n,@w{ }[+]@var{num}}
+@optItemx{tail,--lines,=[+]@var{num}}
 Output the last @var{num} lines.
 If @var{num} is prefixed with a @samp{+}, start printing with
 line @var{num} from the start of each file. For example to skip the first line
 use @code{tail -n +2}, while to skip all but the last line use @code{tail -n 1}.
 Size multiplier suffixes are the same as with the @option{-c} option.
 
-@item --pid=@var{pid}
-@opindex --pid
+@optItem{tail,--pid,=@var{pid}}
 When following by name or by descriptor, you may specify the process ID,
 @var{pid}, of one or more (by repeating @option{--pid}) writers of the
 @var{file} arguments.  Then, @command{tail} will exit shortly
@@ -3339,16 +3156,12 @@ terminate until long after the real writer has terminated.
 On some systems, @option{--pid} is not supported and @command{tail}
 outputs a warning.
 
-@item -q
-@itemx --quiet
-@itemx --silent
-@opindex -q
-@opindex --quiet
-@opindex --silent
+@optItem{tail,-q}
+@optItemx{tail,--quiet}
+@optItemx{tail,--silent}
 Never print file name headers.
 
-@item --retry
-@opindex --retry
+@optItem{tail,--retry}
 Indefinitely try to open the specified file.
 This option is useful mainly when following (and otherwise issues a warning).
 
@@ -3363,10 +3176,8 @@ Without this option, when @command{tail} encounters a file that doesn't
 exist or is otherwise inaccessible, it reports that fact and
 never checks it again.
 
-@item -s @var{number}
-@itemx --sleep-interval=@var{number}
-@opindex -s
-@opindex --sleep-interval
+@optItem{tail,-s,@w{ }@var{number}}
+@optItemx{tail,--sleep-interval,=@var{number}}
 Change the number of seconds to wait between iterations (the default is 1.0).
 During one iteration, every specified file is checked to see if it has
 changed size.
@@ -3377,13 +3188,11 @@ every @var{number} seconds.
 The @var{number} must be non-negative and can be a floating-point number
 in either the current or the C locale.  @xref{Floating point}.
 
-@item -v
-@itemx --verbose
-@opindex -v
-@opindex --verbose
+@optItem{tail,-v}
+@optItemx{tail,--verbose}
 Always print file name headers.
 
-@optZeroTerminated
+@optZeroTerminated{tail}
 
 @end table
 
@@ -3462,10 +3271,8 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -l @var{lines}
-@itemx --lines=@var{lines}
-@opindex -l
-@opindex --lines
+@optItem{split,-l,@w{ }@var{lines}}
+@optItemx{split,--lines,=@var{lines}}
 Put @var{lines} lines of @var{input} into each output file.
 If @option{--separator} is specified, then @var{lines} determines
 the number of records.
@@ -3474,17 +3281,13 @@ For compatibility @command{split} also supports an obsolete
 option syntax @option{-@var{lines}}.  New scripts should use
 @option{-l @var{lines}} instead.
 
-@item -b @var{size}
-@itemx --bytes=@var{size}
-@opindex -b
-@opindex --bytes
+@optItem{split,-b,@w{ }@var{size}}
+@optItemx{split,--bytes,=@var{size}}
 Put @var{size} bytes of @var{input} into each output file.
 @multiplierSuffixes{size}
 
-@item -C @var{size}
-@itemx --line-bytes=@var{size}
-@opindex -C
-@opindex --line-bytes
+@optItem{split,-C,@w{ }@var{size}}
+@optItemx{split,--lines-bytes,=@var{size}}
 Put into each output file as many complete lines of @var{input} as
 possible without exceeding @var{size} bytes.  Individual lines or records
 longer than @var{size} bytes are broken into multiple files.
@@ -3492,8 +3295,7 @@ longer than @var{size} bytes are broken into multiple files.
 If @option{--separator} is specified, then @var{lines} determines
 the number of records.
 
-@item --filter=@var{command}
-@opindex --filter
+@optItem{split,--filter,=@var{command}}
 With this option, rather than simply writing to each output file,
 write through a pipe to the specified shell @var{command} for each output file.
 @var{command} should use the $FILE environment variable, which is set
@@ -3511,11 +3313,8 @@ xz -dc BIG.xz | split -b200G --filter='xz > $FILE.xz' - big-
 Assuming a 10:1 compression ratio, that would create about fifty 20GiB files
 with names @file{big-aa.xz}, @file{big-ab.xz}, @file{big-ac.xz}, etc.
 
-@item -n @var{chunks}
-@itemx --number=@var{chunks}
-@opindex -n
-@opindex --number
-
+@optItem{split,-n,@w{ }@var{chunks}}
+@optItemx{split,--number,=@var{chunks}}
 Split @var{input} to @var{chunks} output files where @var{chunks} may be:
 
 @macro Stdout
@@ -3552,20 +3351,16 @@ cannot easily be determined, there is no trouble for @samp{r} mode
 because the size of the input is irrelevant.  For other modes, such an
 input is first copied to a temporary to determine its size.
 
-@item -a @var{length}
-@itemx --suffix-length=@var{length}
-@opindex -a
-@opindex --suffix-length
+@optItem{split,-a,@w{ }@var{length}}
+@optItemx{split,--suffix-length,=@var{length}}
 Use suffixes of length @var{length}.  If a @var{length} of 0 is specified,
 this is the same as if (any previous) @option{-a} was not specified, and
 thus enables the default behavior, which starts the suffix length at 2,
 and unless @option{-n} or @option{--numeric-suffixes=@var{from}} is
 specified, will auto increase the length by 2 as required.
 
-@item -d
-@itemx --numeric-suffixes[=@var{from}]
-@opindex -d
-@opindex --numeric-suffixes
+@optItem{split,-d}
+@optItemx{split,--numeric-suffixes,[=@var{from}]}
 Use digits in suffixes rather than lower-case letters.  The numerical
 suffix counts from @var{from} if specified, 0 otherwise.
 
@@ -3577,31 +3372,24 @@ suffixes beyond @samp{99}.  If option @option{--number} is specified and
 the number of files is less than @var{from}, a single run is assumed and the
 minimum suffix length required is automatically determined.
 
-@item -x
-@itemx --hex-suffixes[=@var{from}]
-@opindex -x
-@opindex --hex-suffixes
+@optItem{split,-x}
+@optItemx{split,--hex-suffixes,[=@var{from}]}
 Like @option{--numeric-suffixes}, but use hexadecimal numbers (in lower case).
 
-@item --additional-suffix=@var{suffix}
-@opindex --additional-suffix
+@optItem{split,--additional-suffix,=@var{suffix}}
 Append an additional @var{suffix} to output file names.  @var{suffix}
 must not contain slash.
 
-@item -e
-@itemx --elide-empty-files
-@opindex -e
-@opindex --elide-empty-files
+@optItem{split,-e}
+@optItemx{split,--elide-empty-files}
 Suppress the generation of zero-length output files.  This can happen
 with the @option{--number} option if a file is (truncated to be) shorter
 than the number requested, or if a line is so long as to completely
 span a chunk.  The output file sequence numbers, always run consecutively
 even when this option is specified.
 
-@item -t @var{separator}
-@itemx --separator=@var{separator}
-@opindex -t
-@opindex --separator
+@optItem{split,-t,@w{ }@var{separator}}
+@optItemx{split,--separator,=@var{separator}}
 @cindex line separator character
 @cindex record separator character
 Use character @var{separator} as the record separator instead of the default
@@ -3609,15 +3397,12 @@ newline character (ASCII LF).
 To specify ASCII NUL as the separator, use the two-character string @samp{\0},
 e.g., @samp{split -t '\0'}.
 
-@item -u
-@itemx --unbuffered
-@opindex -u
-@opindex --unbuffered
+@optItem{split,-u}
+@optItemx{split,--unbuffered}
 Immediately copy input to output in @option{--number r/@dots{}} mode,
 which is a much slower mode of operation.
 
-@item --verbose
-@opindex --verbose
+@optItem{split,--verbose}
 Write a diagnostic just before each output file is opened.
 
 @end table
@@ -3758,17 +3543,13 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -f @var{prefix}
-@itemx --prefix=@var{prefix}
-@opindex -f
-@opindex --prefix
+@optItem{csplit,-f,@w{ }@var{prefix}}
+@optItemx{csplit,--prefix,=@var{prefix}}
 @cindex output file name prefix
 Use @var{prefix} as the output file name prefix.
 
-@item -b @var{format}
-@itemx --suffix-format=@var{format}
-@opindex -b
-@opindex --suffix-format
+@optItem{csplit,-b,@w{ }@var{format}}
+@optItemx{csplit,--suffix-format,=@var{format}}
 @cindex output file name suffix
 Use @var{format} as the output file name suffix.  When this option is
 specified, the suffix string must include exactly one
@@ -3783,29 +3564,22 @@ entire @var{format} is given (with the current output file number) to
 individual output files in turn.  If this option is used, the
 @option{--digits} option is ignored.
 
-@item -n @var{digits}
-@itemx --digits=@var{digits}
-@opindex -n
-@opindex --digits
+@optItem{csplit,-n,@w{ }@var{digits}}
+@optItemx{csplit,--digits,=@var{digits}}
 Use output file names containing numbers that are @var{digits} digits
 long instead of the default 2.
 
-@item -k
-@itemx --keep-files
-@opindex -k
-@opindex --keep-files
+@optItem{csplit,-k}
+@optItemx{csplit,--keep-files}
 Do not remove output files when errors are encountered.
 
-@item --suppress-matched
-@opindex --suppress-matched
+@optItem{csplit,--suppress-matched}
 Do not output lines matching the specified @var{pattern}.
 I.e., suppress the boundary line from the start of the second
 and subsequent splits.
 
-@item -z
-@itemx --elide-empty-files
-@opindex -z
-@opindex --elide-empty-files
+@optItem{csplit,-z}
+@optItemx{csplit,--elide-empty-files}
 Suppress the generation of zero-length output files.  (In cases where
 the section delimiters of the input file are supposed to mark the first
 lines of each of the sections, the first output file will generally be a
@@ -3813,14 +3587,10 @@ zero-length file unless you use this option.)  The output file sequence
 numbers always run consecutively starting from 0, even when this option
 is specified.
 
-@item -s
-@itemx -q
-@itemx --silent
-@itemx --quiet
-@opindex -s
-@opindex -q
-@opindex --silent
-@opindex --quiet
+@optItem{csplit,-s}
+@optItemx{csplit,-q}
+@optItemx{csplit,--silent}
+@optItemx{csplit,--quiet}
 Do not print counts of output file sizes.
 
 @end table
@@ -3972,23 +3742,17 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -c
-@itemx --bytes
-@opindex -c
-@opindex --bytes
+@optItem{wc,-c}
+@optItemx{wc,--bytes}
 Print only the byte counts.
 
-@item -m
-@itemx --chars
-@opindex -m
-@opindex --chars
+@optItem{wc,-m}
+@optItemx{wc,--chars}
 Print only the character counts, as per the current locale.
 Encoding errors are not counted.
 
-@item -w
-@itemx --words
-@opindex -w
-@opindex --words
+@optItem{wc,-w}
+@optItemx{wc,--words}
 Print only the word counts.  A word is a nonempty sequence of non white
 space delimited by white space characters or by start or end of input.
 The current locale determines which characters are white space.
@@ -4001,30 +3765,24 @@ space even if the current locale does not: U+00A0 NO-BREAK SPACE,
 U+2007 FIGURE SPACE, U+202F NARROW NO-BREAK SPACE, and U+2060 WORD
 JOINER.
 
-@item -l
-@itemx --lines
-@opindex -l
-@opindex --lines
+@optItem{wc,-l}
+@optItemx{wc,--lines}
 Print only the newline character counts.
 If a file ends in a non-newline character,
 its trailing partial line is not counted.
 
-@item --debug
-@opindex --debug
+@optItem{wc,--debug}
 Output extra information to standard error.
 Currently; print the line count acceleration implementation being used.
 
-@item -L
-@itemx --max-line-length
-@opindex -L
-@opindex --max-line-length
+@optItem{wc,-L}
+@optItemx{wc,--max-line-length}
 Print only the maximum display widths.
 Tabs are set at every 8th column.
 Display widths of wide characters are considered.
 Non-printable characters are given 0 width.
 
-@item --total=@var{when}
-@opindex --total=@var{when}
+@optItem{wc,--total}
 Control when and how the final line with cumulative counts is printed.
 @var{when} is one of:
 @itemize @bullet
@@ -4047,8 +3805,7 @@ to simplify subsequent processing.
 @end itemize
 
 @macro filesZeroFromOption{cmd,withTotalOption,subListOutput}
-@item --files0-from=@var{file}
-@opindex --files0-from=@var{file}
+@optItem{\cmd\,--files0-from,=@var{file}}
 @c This is commented out to avoid a texi2dvi failure.
 @c texi2dvi (GNU Texinfo 4.11) 1.104
 @c @cindex including files from @command{\cmd\}
@@ -4108,17 +3865,14 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -r
-@opindex -r
+@optItem{sum,-r}
 @cindex BSD @command{sum}
 Use the default (BSD compatible) algorithm.  This option is included for
 compatibility with the System V @command{sum}.  Unless @option{-s} was also
 given, it has no effect.
 
-@item -s
-@itemx --sysv
-@opindex -s
-@opindex --sysv
+@optItem{sum,-s}
+@optItemx{sum,--sysv}
 @cindex System V @command{sum}
 Compute checksums using an algorithm compatible with System V
 @command{sum}'s default, and print file sizes in units of 512-byte blocks.
@@ -4216,10 +3970,8 @@ escape sequences are reserved for future use.
 
 @table @samp
 
-@item -a
-@itemx --algorithm
-@opindex -a
-@opindex --algorithm
+@optItem{cksum,-a,@w{ }@var{type}}
+@optItemx{cksum,--algorithm,=@var{type}}
 @cindex digest algorithm
 Compute checksums using the specified digest algorithm.
 
@@ -4250,8 +4002,7 @@ produce the same checksum:
 @samp{blake2b}   equivalent to @command{b2sum}
 @end example
 
-@item --base64
-@opindex --base64
+@optItem{cksum,--base64}
 @cindex base64 checksum encoding
 Print base64-encoded digests not hexadecimal.
 This option is ignored with @option{--check}.
@@ -4264,16 +4015,14 @@ modulo 3, and the @option{--check} parser requires precisely the same
 input digest string as what is output.  I.e., removing or adding any
 @samp{=} padding renders a digest non-matching.
 
-@item --debug
-@opindex --debug
+@optItem{cksum,--debug}
 Output extra information to standard error,
 like the checksum implementation being used.
 
-@item -l
-@itemx --length
-@opindex -l
-@opindex --length
+@optItem{cksum,-l,@w{ }@var{bits}}
+@optItemx{cksum,--length,=@var{bits}}
 @cindex BLAKE2 hash length
+@cindex SHA-2 hash length
 @cindex SHA-3 hash length
 Specify the digest size used with @option{-a sha2, sha3, or blake2b}.
 For @samp{blake2b} this is optional, with 512 being the default.  If the
@@ -4283,8 +4032,7 @@ option is required, and the @var{length} must be one of 224, 256, 384, or 512.
 This option is ignored when @option{--check} is specified,
 as the length is automatically determined when checking.
 
-@item --raw
-@opindex --raw
+@optItem{cksum,--raw}
 @cindex raw binary checksum
 Print only the unencoded raw binary digest for a single input.
 Do not output the file name or anything else.
@@ -4294,8 +4042,7 @@ This option works only with a single input.
 Unlike other output formats, @command{cksum} provides no way to
 @option{--check} a @option{--raw} checksum.
 
-@item --untagged
-@opindex --untagged
+@optItem{cksum,--untagged}
 Output using the original Coreutils format used by the other
 standalone checksum utilities like @command{md5sum} for example.
 This format has the checksum at the start of the line, and may be
@@ -4310,10 +4057,8 @@ This does not identify the digest algorithm used for the checksum.
 
 @table @samp
 
-@item -b
-@itemx --binary
-@opindex -b
-@opindex --binary
+@optItem{cksum,-b}
+@optItemx{cksum,--binary}
 @cindex binary input files
 Treat each input file as binary, by reading it in binary mode and
 outputting a @samp{*} flag.  This is the inverse of @option{--text}.
@@ -4329,8 +4074,8 @@ of the legacy standalone checksumming utilities.
 @end macro
 @cksumTextMode
 
-@item -c
-@itemx --check
+@optItem{cksum,-c}
+@optItemx{cksum,--check}
 Read file names and checksum information (not data) from each
 @var{file} (or from standard input if no @var{file} was specified) and report
 whether the checksums match the contents of the named files.
@@ -4371,16 +4116,14 @@ a checksum inconsistent with the associated file, or if no valid
 line is found, @command{cksum} exits with nonzero status.  Otherwise,
 it exits successfully.
 
-@item --ignore-missing
-@opindex --ignore-missing
+@optItem{cksum,--ignore-missing}
 @cindex verifying checksums
 This option is useful only when verifying checksums.
 When verifying checksums, don't fail or report any status
 for missing files.  This is useful when verifying a subset
 of downloaded files given a larger list of checksums.
 
-@item --quiet
-@opindex --quiet
+@optItem{cksum,--quiet}
 @cindex verifying checksums
 This option is useful only when verifying checksums.
 When verifying checksums, don't generate an 'OK' message per successfully
@@ -4388,8 +4131,7 @@ checked file.  Files that fail the verification are reported in the
 default one-line-per-file format.  If there is any checksum mismatch,
 print a warning summarizing the failures to standard error.
 
-@item --status
-@opindex --status
+@optItem{cksum,--status}
 @cindex verifying checksums
 This option is useful only when verifying checksums.
 When verifying checksums, don't generate the default one-line-per-file
@@ -4400,8 +4142,7 @@ If all listed files are readable and are consistent with the associated
 checksums, exit successfully.  Otherwise exit with a status code
 indicating there was a failure.
 
-@item --tag
-@opindex --tag
+@optItem{cksum,--tag}
 @cindex BSD output
 Output BSD style checksums, which indicate the checksum algorithm used.
 As a GNU extension, if @option{--zero} is not used, file names with problematic
@@ -4413,10 +4154,8 @@ the output format, while providing little benefit.
 @xref{cksum output modes} for details of this format.
 The @command{cksum} command, uses @option{--tag} as its default output format.
 
-@item -t
-@itemx --text
-@opindex -t
-@opindex --text
+@optItem{cksum,-t}
+@optItemx{cksum,--text}
 @cindex text input files
 Treat each input file as text, by reading it in text mode and
 outputting a @samp{ } flag.  This is the inverse of @option{--binary}.
@@ -4426,23 +4165,20 @@ the default for reading standard input when standard input is a
 terminal.  This mode is never defaulted to if @option{--tag} is used.
 @cksumTextMode
 
-@item -w
-@itemx --warn
-@opindex -w
-@opindex --warn
+@optItem{cksum,-w}
+@optItemx{cksum,--warn}
 @cindex verifying checksums
 When verifying checksums, warn about improperly formatted checksum lines.
 This option is useful only if all but a few lines in the checked input
 are valid.
 
-@item --strict
-@opindex --strict
+@optItem{cksum,--strict}
 @cindex verifying checksums
 When verifying checksums,
 if one or more input line is invalid,
 exit nonzero after all warnings have been issued.
 
-@optZero
+@optZero{cksum}
 Also file name escaping is not used.
 @end table
 
@@ -4513,10 +4249,8 @@ In addition @command{b2sum} supports the following options.
 
 @table @samp
 
-@item -l
-@itemx --length
-@opindex -l
-@opindex --length
+@optItem{b2sum,-l,@w{ }@var{bits}}
+@optItemx{b2sum,--length,=@var{bits}}
 @cindex BLAKE2 hash length
 Specify the digest size used by the algorithm.  This option is optional.
 By default a 512 bit digest will be used.  If the option is given it
@@ -4652,11 +4386,9 @@ mode:
 
 @table @samp
 
-@item -c
-@itemx --check
+@optItem{sort,-c}
+@optItemx{sort,--check}
 @itemx --check=diagnose-first
-@opindex -c
-@opindex --check
 @cindex checking whether a file is sorted
 Check whether the given file is already sorted: if it is not all
 sorted, print a diagnostic containing the first out-of-order line and
@@ -4664,10 +4396,9 @@ exit with a status of 1.
 Otherwise, exit successfully.
 At most one input file can be given.
 
-@item -C
+@optItem{sort,-C}
 @itemx --check=quiet
 @itemx --check=silent
-@opindex -c
 @opindex --check
 @cindex checking whether a file is sorted
 Exit successfully if the given file is already sorted, and
@@ -4675,10 +4406,8 @@ exit with status 1 otherwise.
 At most one input file can be given.
 This is like @option{-c}, except it does not print a diagnostic.
 
-@item -m
-@itemx --merge
-@opindex -m
-@opindex --merge
+@optItem{sort,-m}
+@optItemx{sort,--merge}
 @cindex merging sorted files
 Merge the given files by sorting them as a group.  Each input file must
 always be individually sorted.  It always works to sort instead of
@@ -4712,10 +4441,8 @@ so portable shell scripts should specify global options first.
 
 @table @samp
 
-@item -b
-@itemx --ignore-leading-blanks
-@opindex -b
-@opindex --ignore-leading-blanks
+@optItem{sort,-b}
+@optItemx{sort,--ignore-leading-blanks}
 @cindex blanks, ignoring leading
 @vindex LC_CTYPE
 Ignore leading blanks when finding sort keys in each line.
@@ -4724,10 +4451,8 @@ can change this.  Blanks may be ignored by your locale's collating
 rules, but without this option they will be significant for character
 positions specified in keys with the @option{-k} option.
 
-@item -d
-@itemx --dictionary-order
-@opindex -d
-@opindex --dictionary-order
+@optItem{sort,-d}
+@optItemx{sort,--dictionary-order}
 @cindex dictionary order
 @cindex phone directory order
 @cindex telephone directory order
@@ -4737,10 +4462,8 @@ letters, digits and blanks when sorting.
 By default letters and digits are those of ASCII and a blank
 is a space or a tab, but the @env{LC_CTYPE} locale can change this.
 
-@item -f
-@itemx --ignore-case
-@opindex -f
-@opindex --ignore-case
+@optItem{sort,-f}
+@optItemx{sort,--ignore-case}
 @cindex ignoring case
 @cindex case folding
 @vindex LC_CTYPE
@@ -4752,12 +4475,9 @@ thrown away.  (There is currently no way to throw away the upper case
 equivalent instead.  (Any @option{--reverse} given would only affect
 the final result, after the throwing away.))
 
-@item -g
-@itemx --general-numeric-sort
-@itemx --sort=general-numeric
-@opindex -g
-@opindex --general-numeric-sort
-@opindex --sort
+@optItem{sort,-g}
+@optItemx{sort,--general-numeric-sort}
+@optItemx{sort,--sort,=general-numeric}
 @cindex general numeric sort
 @vindex LC_NUMERIC
 Sort numerically, converting a prefix of each line to a long
@@ -4789,11 +4509,9 @@ or of varying case.  However for hex numbers of consistent case,
 and left padded with @samp{0} to a consistent width, a standard
 lexicographic sort will be faster.
 
-@item -h
-@itemx --human-numeric-sort
+@optItem{sort,-h}
+@optItemx{sort,--human-numeric-sort}
 @itemx --sort=human-numeric
-@opindex -h
-@opindex --human-numeric-sort
 @opindex --sort
 @cindex human numeric sort
 @vindex LC_NUMERIC
@@ -4812,10 +4530,8 @@ option; the SI suffix must immediately follow the number.
 To sort more accurately, you can use the @command{numfmt} command
 to reformat numbers to human format @emph{after} the sort.
 
-@item -i
-@itemx --ignore-nonprinting
-@opindex -i
-@opindex --ignore-nonprinting
+@optItem{sort,-i}
+@optItemx{sort,--ignore-nonprinting}
 @cindex nonprinting characters, ignoring
 @cindex unprintable characters, ignoring
 @vindex LC_CTYPE
@@ -4824,11 +4540,9 @@ The @env{LC_CTYPE} locale determines character types.
 This option has no effect if the stronger @option{--dictionary-order}
 (@option{-d}) option is also given.
 
-@item -M
-@itemx --month-sort
+@optItem{sort,-M}
+@optItemx{sort,--month-sort}
 @itemx --sort=month
-@opindex -M
-@opindex --month-sort
 @opindex --sort
 @cindex months, sorting by
 @vindex LC_TIME
@@ -4840,11 +4554,9 @@ category determines the month spellings.
 By default a blank is a space or a tab, but the @env{LC_CTYPE} locale
 can change this.
 
-@item -n
-@itemx --numeric-sort
+@optItem{sort,-n}
+@optItemx{sort,--numeric-sort}
 @itemx --sort=numeric
-@opindex -n
-@opindex --numeric-sort
 @opindex --sort
 @cindex numeric sort
 @vindex LC_CTYPE
@@ -4867,28 +4579,24 @@ Neither a leading @samp{+} nor exponential notation is recognized.
 To compare such strings numerically, use the
 @option{--general-numeric-sort} (@option{-g}) option.
 
-@item -V
-@itemx --version-sort
-@opindex -V
-@opindex --version-sort
+@optItem{sort,-V}
+@optItemx{sort,--version-sort}
+@itemx --sort=version
+@opindex --sort
 @cindex version number sort
 Sort by version name and number.  It behaves like a standard sort,
 except that each sequence of decimal digits is treated numerically
 as an index/version number.  (@xref{Version sort ordering}.)
 
-@item -r
-@itemx --reverse
-@opindex -r
-@opindex --reverse
+@optItem{sort,-r}
+@optItemx{sort,--reverse}
 @cindex reverse sorting
 Reverse the result of comparison, so that lines with greater key values
 appear earlier in the output instead of later.
 
-@item -R
-@itemx --random-sort
+@optItem{sort,-R}
+@optItemx{sort,--random-sort}
 @itemx --sort=random
-@opindex -R
-@opindex --random-sort
 @opindex --sort
 @cindex random sort
 Sort by hashing the input keys and then sorting the hash values.
@@ -4911,7 +4619,7 @@ Other options are:
 
 @table @samp
 
-@item --compress-program=@var{prog}
+@optItem{sort,--compress-program,@w{ }@var{prog}}
 Compress any temporary files with the program @var{prog}.
 
 With no arguments, @var{prog} must compress standard input to standard
@@ -4929,10 +4637,8 @@ White space and the backslash character should not appear in
 
 @filesZeroFromOption{sort,,sorted output}
 
-@item -k @var{pos1}[,@var{pos2}]
-@itemx --key=@var{pos1}[,@var{pos2}]
-@opindex -k
-@opindex --key
+@optItem{sort,-k,@w{ }@var{pos1}[@comma{}@var{pos2}]}
+@optItemx{sort,--key,=@var{pos1}[@comma{}@var{pos2}]}
 @cindex sort field
 Specify a sort field that consists of the part of the line between
 @var{pos1} and @var{pos2} (or the end of the line, if @var{pos2} is
@@ -4961,12 +4667,11 @@ Example:  To sort on the second field, use @option{--key=2,2}
 See also the @option{--debug} option to help determine the part
 of the line being used in the sort.
 
-@item --debug
+@optItem{sort,--debug}
 Highlight the portion of each line used for sorting.
 Also issue warnings about questionable usage to standard error.
 
-@item --batch-size=@var{nmerge}
-@opindex --batch-size
+@optItem{sort,--batch-size,=@var{nmerge}}
 @cindex number of inputs to merge, nmerge
 Merge at most @var{nmerge} inputs at once.
 
@@ -4992,10 +4697,8 @@ the operating system has other limits on the number of open files.  If
 the value of @var{nmerge} exceeds the resource limit, @command{sort}
 silently uses a smaller value.
 
-@item -o @var{output-file}
-@itemx --output=@var{output-file}
-@opindex -o
-@opindex --output
+@optItem{sort,-o,@w{ }@var{output-file}}
+@optItemx{sort,--output,=@var{output-file}}
 @cindex overwriting of input, allowed
 Write output to @var{output-file} instead of standard output.
 Normally, @command{sort} reads all input before opening
@@ -5015,17 +4718,14 @@ On newer systems, @option{-o} cannot appear after an input file if
 scripts should specify @option{-o @var{output-file}} before any input
 files.
 
-@item --random-source=@var{file}
-@opindex --random-source
+@optItem{sort,--random-source,=@var{file}}
 @cindex random source for sorting
 Use @var{file} as a source of random data used to determine which
 random hash function to use with the @option{-R} option.  @xref{Random
 sources}.
 
-@item -s
-@itemx --stable
-@opindex -s
-@opindex --stable
+@optItem{sort,-s}
+@optItemx{sort,--stable}
 @cindex sort stability
 @cindex sort's last-resort comparison
 
@@ -5033,10 +4733,8 @@ Make @command{sort} stable by disabling its last-resort comparison.
 This option has no effect if no fields or global ordering options
 other than @option{--reverse} (@option{-r}) are specified.
 
-@item -S @var{size}
-@itemx --buffer-size=@var{size}
-@opindex -S
-@opindex --buffer-size
+@optItem{sort,-S,@w{ }@var{size}}
+@optItemx{sort,--buffer-size,=@var{size}}
 @cindex size for main memory sorting
 Use a main-memory sort buffer of the given @var{size}.  By default,
 @var{size} is in units of 1024 bytes.  Appending @samp{%} causes
@@ -5054,10 +4752,8 @@ However, this option affects only the initial buffer size.  The buffer
 grows beyond @var{size} if @command{sort} encounters input lines larger
 than @var{size}.
 
-@item -t @var{separator}
-@itemx --field-separator=@var{separator}
-@opindex -t
-@opindex --field-separator
+@optItem{sort,-t,@w{ }@var{separator}}
+@optItemx{sort,--field-separator,=@var{separator}}
 @cindex field separator character
 Use character @var{separator} as the field separator when finding the
 sort keys in each line.  By default, fields are separated by the empty
@@ -5077,10 +4773,8 @@ retain the field separators present between the endpoints of the range.
 To specify ASCII NUL as the field separator,
 use the two-character string @samp{\0}, e.g., @samp{sort -t '\0'}.
 
-@item -T @var{tempdir}
-@itemx --temporary-directory=@var{tempdir}
-@opindex -T
-@opindex --temporary-directory
+@optItem{sort,-T,@w{ }@var{tempdir}}
+@optItemx{sort,--temporary-directory,=@var{tempdir}}
 @cindex temporary directory
 @vindex TMPDIR
 Use directory @var{tempdir} to store temporary files, overriding the
@@ -5090,8 +4784,7 @@ have a large sort or merge that is I/O-bound, you can often improve
 performance by using this option to specify directories on different
 file systems.
 
-@item --parallel=@var{n}
-@opindex --parallel
+@optItem{sort,--parallel,=@var{n}}
 @cindex multithreaded sort
 Set the number of sorts run in parallel to @var{n}. By default,
 @var{n} is set to the number of available processors, but limited
@@ -5099,10 +4792,8 @@ to 8, as performance gains diminish after that.
 Using @var{n} threads increases the memory usage by
 a factor of log @var{n}.  Also see @ref{nproc invocation}.
 
-@item -u
-@itemx --unique
-@opindex -u
-@opindex --unique
+@optItem{sort,-u}
+@optItemx{sort,--unique}
 @cindex uniquifying output
 
 Normally, output only the first of a sequence of lines that compare
@@ -5117,7 +4808,7 @@ For example, @code{sort -n -u} inspects only the value of the initial
 numeric string when checking for uniqueness, whereas @code{sort -n |
 uniq} inspects the entire line.  @xref{uniq invocation}.
 
-@optZeroTerminated
+@optZeroTerminated{sort}
 @macro newlineFieldSeparator
 With @option{-z} the newline character is treated as a field separator.
 @end macro
@@ -5363,17 +5054,13 @@ input.  The following options change the operation mode:
 
 @table @samp
 
-@item -e
-@itemx --echo
-@opindex -c
-@opindex --echo
+@optItem{shuf,-e}
+@optItemx{shuf,--echo}
 @cindex command-line operands to shuffle
 Treat each command-line operand as an input line.
 
-@item -i @var{lo}-@var{hi}
-@itemx --input-range=@var{lo}-@var{hi}
-@opindex -i
-@opindex --input-range
+@optItem{shuf,-i,@w{ }@var{lo}-@var{hi}}
+@optItemx{shuf,--input-range,=@var{lo}-@var{hi}}
 @cindex input range to shuffle
 Act as if input came from a file containing the range of unsigned
 decimal integers @var{lo}@dots{}@var{hi}, one per line.
@@ -5385,34 +5072,27 @@ operation modes:
 
 @table @samp
 
-@item -n @var{count}
-@itemx --head-count=@var{count}
-@opindex -n
-@opindex --head-count
+@optItem{shuf,-n,@w{ }@var{count}}
+@optItemx{shuf,--head-count,=@var{count}}
 @cindex head of output
 Output at most @var{count} lines.  By default, all input lines are
 output.
 
-@item -o @var{output-file}
-@itemx --output=@var{output-file}
-@opindex -o
-@opindex --output
+@optItem{shuf,-o,@w{ }@var{output-file}}
+@optItemx{shuf,--output,=@var{output-file}}
 @cindex overwriting of input, allowed
 Write output to @var{output-file} instead of standard output.
 @command{shuf} reads all input before opening
 @var{output-file}, so you can safely shuffle a file in place by using
 commands like @code{shuf -o F <F} and @code{cat F | shuf -o F}.
 
-@item --random-source=@var{file}
-@opindex --random-source
+@optItem{shuf,--random-source,=@var{file}}
 @cindex random source for shuffling
 Use @var{file} as a source of random data used to determine which
 permutation to generate.  @xref{Random sources}.
 
-@item -r
-@itemx --repeat
-@opindex -r
-@opindex --repeat
+@optItem{shuf,-r}
+@optItemx{shuf,--repeat}
 @cindex repeat output values
 Repeat output values, that is, select with replacement.  With this
 option the output is not a permutation of the input; instead, each
@@ -5421,7 +5101,7 @@ typically combined with @option{--head-count}; if
 @option{--head-count} is not given, @command{shuf} repeats
 indefinitely.
 
-@optZeroTerminated
+@optZeroTerminated{shuf}
 
 @end table
 
@@ -5532,10 +5212,8 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -f @var{n}
-@itemx --skip-fields=@var{n}
-@opindex -f
-@opindex --skip-fields
+@optItem{uniq,-f,@w{ }@var{n}}
+@optItemx{uniq,--skip-fields,=@var{n}}
 Skip @var{n} fields on each line before checking for uniqueness.  Use
 a null string for comparison if a line has fewer than @var{n} fields.
 Fields are a sequence of blank characters followed by non-blank characters.
@@ -5545,10 +5223,8 @@ field (which may optionally have leading blanks).
 For compatibility @command{uniq} supports a traditional option syntax
 @option{-@var{n}}.  New scripts should use @option{-f @var{n}} instead.
 
-@item -s @var{n}
-@itemx --skip-chars=@var{n}
-@opindex -s
-@opindex --skip-chars
+@optItem{uniq,-s,@w{ }@var{n}}
+@optItemx{uniq,--skip-chars,=@var{n}}
 Skip @var{n} characters before checking for uniqueness.  Use a null string
 for comparison if a line has fewer than @var{n} characters.  If you use both
 the field and character skipping options, fields are skipped over first.
@@ -5564,31 +5240,23 @@ behavior depends on this variable.
 For example, use @samp{uniq ./+10} or @samp{uniq -s 10} rather than
 the ambiguous @samp{uniq +10}.
 
-@item -c
-@itemx --count
-@opindex -c
-@opindex --count
+@optItem{uniq,-c}
+@optItemx{uniq,--count}
 Print the number of times each line occurred along with the line.
 
-@item -i
-@itemx --ignore-case
-@opindex -i
-@opindex --ignore-case
+@optItem{uniq,-i}
+@optItemx{uniq,--ignore-case}
 Ignore differences in case when comparing lines.
 
-@item -d
-@itemx --repeated
-@opindex -d
-@opindex --repeated
+@optItem{uniq,-d}
+@optItemx{uniq,--repeated}
 @cindex repeated lines, outputting
 Discard lines that are not repeated.  When used by itself, this option
 causes @command{uniq} to print the first copy of each repeated line,
 and nothing else.
 
-@item -D
-@itemx --all-repeated[=@var{delimit-method}]
-@opindex -D
-@opindex --all-repeated
+@optItem{uniq,-D}
+@optItemx{uniq,--all-repeated,[=@var{delimit-method}]}
 @cindex all repeated lines, outputting
 Do not discard the second and subsequent repeated input lines,
 but discard lines that are not repeated.
@@ -5631,8 +5299,7 @@ remove blank lines.
 This is a GNU extension.
 @c FIXME: give an example showing *how* it's useful
 
-@item --group[=@var{delimit-method}]
-@opindex --group
+@optItem{uniq,--group,[=@var{delimit-method}]}
 @cindex all lines, grouping
 Output all lines, and delimit each unique group.
 @nulOutputNote
@@ -5660,24 +5327,20 @@ Output a delimiter around each group of unique items.
 
 This is a GNU extension.
 
-@item -u
-@itemx --unique
-@opindex -u
-@opindex --unique
+@optItem{uniq,-u}
+@optItemx{uniq,--unique}
 @cindex unique lines, outputting
 Discard the last line that would be output for a repeated input group.
 When used by itself, this option causes @command{uniq} to print unique
 lines, and nothing else.
 
-@item -w @var{n}
-@itemx --check-chars=@var{n}
-@opindex -w
-@opindex --check-chars
+@optItem{uniq,-w,@w{ }@var{n}}
+@optItemx{uniq,--check-chars,=@var{n}}
 Compare at most @var{n} characters on each line (after skipping any specified
 fields and characters).  By default the entire rest of the lines are
 compared.
 
-@optZeroTerminated
+@optZeroTerminated{uniq}
 @newlineFieldSeparator
 
 @end table
@@ -5751,22 +5414,22 @@ probably not correspond with whatever you hoped it would be.
 
 @table @samp
 
-@item --check-order
+@optItem{comm,--check-order}
 Fail with an error message if either input file is wrongly ordered.
 
-@item --nocheck-order
+@optItem{comm,--nocheck-order}
 Do not check that both input files are in sorted order.
 
 Other options are:
 
-@item --output-delimiter=@var{str}
+@optItem{comm,--output-delimiter,=@var{str}}
 Print @var{str} between adjacent output columns,
 rather than the default of a single TAB character.
 
 The delimiter @var{str} may be empty, in which case
 the ASCII NUL character is used to delimit output columns.
 
-@item --total
+@optItem{comm,--total}
 Output a summary at the end.
 
 Similar to the regular output,
@@ -5797,7 +5460,7 @@ $ comm -12 file1 file2 | wc -l    # number of lines common to both files
 4
 @end example
 
-@optZeroTerminated
+@optZeroTerminated{comm}
 
 @end table
 
@@ -5865,8 +5528,8 @@ convention more than once per program invocation.
 
 @table @samp
 
-@item -G
-@itemx --traditional
+@optItem{ptx,-G}
+@optItemx{ptx,--traditional}
 As already explained, this option disables all GNU extensions to
 @command{ptx} and switches to traditional mode.
 
@@ -5901,10 +5564,8 @@ correctly.
 
 @table @samp
 
-@item -f
-@itemx --ignore-case
-@opindex -f
-@opindex --ignore-case
+@optItem{ptx,-f}
+@optItemx{ptx,--ignore-case}
 Fold lower case letters to upper case for sorting.
 
 @end table
@@ -5915,14 +5576,11 @@ Fold lower case letters to upper case for sorting.
 
 @table @samp
 
-@item -b @var{file}
-@itemx --break-file=@var{file}
-@opindex -b
-@opindex --break-file
-
+@optItem{ptx,-b,@w{ }@var{file}}
+@optItemx{ptx,--break-file,=@var{file}}
 This option provides an alternative (to @option{-W}) method of describing
 which characters make up words.  It introduces the name of a
-file which contains a list of characters which can@emph{not} be part of
+@var{file} which contains a list of characters which can@emph{not} be part of
 one word; this file is called the @dfn{Break file}.  Any character which
 is not part of the Break file is a word constituent.  If both options
 @option{-b} and @option{-W} are specified, then @option{-W} has precedence and
@@ -5934,23 +5592,17 @@ newline at all, not even at the end of the file.  When GNU extensions
 are disabled, spaces, tabs and newlines are always considered as break
 characters even if not included in the Break file.
 
-@item -i @var{file}
-@itemx --ignore-file=@var{file}
-@opindex -i
-@opindex --ignore-file
-
-The file associated with this option contains a list of words which will
+@optItem{ptx,-i,@w{ }@var{file}}
+@optItemx{ptx,--ignore-file,=@var{file}}
+The @var{file} associated with this option contains a list of words which will
 never be taken as keywords in concordance output.  It is called the
 @dfn{Ignore file}.  The file contains exactly one word in each line; the
 end of line separation of words is not subject to the value of the
 @option{-S} option.
 
-@item -o @var{file}
-@itemx --only-file=@var{file}
-@opindex -o
-@opindex --only-file
-
-The file associated with this option contains a list of words which will
+@optItem{ptx,-o,@w{ }@var{file}}
+@optItemx{ptx,--only-file,=@var{file}}
+The @var{file} associated with this option contains a list of words which will
 be retained in concordance output; any word not mentioned in this file
 is ignored.  The file is called the @dfn{Only file}.  The file contains
 exactly one word in each line; the end of line separation of words is
@@ -5960,11 +5612,8 @@ There is no default for the Only file.  When both an Only file and an
 Ignore file are specified, a word is considered a keyword only
 if it is listed in the Only file and not in the Ignore file.
 
-@item -r
-@itemx --references
-@opindex -r
-@opindex --references
-
+@optItem{ptx,-r}
+@optItemx{ptx,--references}
 On each input line, the leading sequence of non-white space characters will be
 taken to be a reference that has the purpose of identifying this input
 line in the resulting permuted index.
@@ -5979,17 +5628,14 @@ references from contexts in output, but it succeeds in doing so
 are disabled, this condition is always met and references are completely
 excluded from the output contexts.
 
-@item -S @var{regexp}
-@itemx --sentence-regexp=@var{regexp}
-@opindex -S
-@opindex --sentence-regexp
-
+@optItem{ptx,-S,@w{ }@var{regexp}}
+@optItemx{ptx,--sentence-regexp,=@var{regexp}}
 This option selects which regular expression will describe the end of a
 line or the end of a sentence.  In fact, this regular expression is not
 the only distinction between end of lines or end of sentences, and input
 line boundaries have no special significance outside this option.  By
 default, when GNU extensions are enabled and if @option{-r} option is not
-used, end of sentences are used.  In this case, this @var{regex} is
+used, end of sentences are used.  In this case, this @var{regexp} is
 imported from GNU Emacs:
 
 @example
@@ -6024,11 +5670,8 @@ As a matter of convenience to the user, many usual backslashed escape
 sequences from the C language are recognized and converted to the
 corresponding characters by @command{ptx} itself.
 
-@item -W @var{regexp}
-@itemx --word-regexp=@var{regexp}
-@opindex -W
-@opindex --word-regexp
-
+@optItem{ptx,-W,@w{ }@var{regexp}}
+@optItemx{ptx,--word-regexp,=@var{regexp}}
 This option selects which regular expression will describe each keyword.
 By default, if GNU extensions are enabled, a word is a sequence of
 letters; the @var{regexp} used is @samp{\w+}.  When GNU extensions are
@@ -6070,19 +5713,13 @@ Output format is further controlled by the following options.
 
 @table @samp
 
-@item -g @var{number}
-@itemx --gap-size=@var{number}
-@opindex -g
-@opindex --gap-size
-
+@optItem{ptx,-g,@w{ }@var{number}}
+@optItemx{ptx,--gap-size,=@var{number}}
 Select the size of the minimum white space gap between the fields on the
 output line.
 
-@item -w @var{number}
-@itemx --width=@var{number}
-@opindex -w
-@opindex --width
-
+@optItem{ptx,-w,@w{ }@var{number}}
+@optItemx{ptx,--width,=@var{number}}
 Select the maximum output width of each final line.  If references are
 used, they are included or excluded from the maximum output width
 depending on the value of option @option{-R}@.  If this option is not
@@ -6093,11 +5730,8 @@ output after the right context, the maximum output width does not take
 into account the space taken by references, nor the gap that precedes
 them.
 
-@item -A
-@itemx --auto-reference
-@opindex -A
-@opindex --auto-reference
-
+@optItem{ptx,-A}
+@optItemx{ptx,--auto-reference}
 Select automatic references.  Each input line will have an automatic
 reference made up of the file name and the line ordinal, with a single
 colon between them.  However, the file name will be empty when standard
@@ -6105,11 +5739,8 @@ input is being read.  If both @option{-A} and @option{-r} are selected, then
 the input reference is still read and skipped, but the automatic
 reference is used at output time, overriding the input reference.
 
-@item -R
-@itemx --right-side-refs
-@opindex -R
-@opindex --right-side-refs
-
+@optItem{ptx,-R}
+@optItemx{ptx,--right-side-refs}
 In the default output format, when option @option{-R} is not used, any
 references produced by the effect of options @option{-r} or @option{-A} are
 placed to the far right of output lines, after the right context.  With
@@ -6122,11 +5753,8 @@ is @emph{not} taken into account in total output width given by @option{-w}.
 This option is automatically selected whenever GNU extensions are
 disabled.
 
-@item -F @var{string}
-@itemx --flag-truncation=@var{string}
-@opindex -F
-@opindex --flag-truncation
-
+@optItem{ptx,-F,@w{ }@var{string}}
+@optItemx{ptx,--flag-truncation,=@var{string}}
 This option will request that any truncation in the output be reported
 using the string @var{string}.  Most output fields theoretically extend
 towards the beginning or the end of the current line, or current
@@ -6146,19 +5774,13 @@ As a matter of convenience to the user, many usual backslashed escape
 sequences, as found in the C language, are recognized and converted to
 the corresponding characters by @command{ptx} itself.
 
-@item -M @var{string}
-@itemx --macro-name=@var{string}
-@opindex -M
-@opindex --macro-name
-
+@optItem{ptx,-M,@w{ }@var{string}}
+@optItemx{ptx,--macro-name,=@var{string}}
 Select another @var{string} to be used instead of @samp{xx}, while
 generating output suitable for @command{nroff}, @command{troff} or @TeX{}.
 
-@item -O
-@itemx --format=roff
-@opindex -O
-@opindex --format=roff
-
+@optItem{ptx,-O}
+@optItemx{ptx,--format,=roff}
 Choose an output format suitable for @command{nroff} or @command{troff}
 processing.  Each output line will look like:
 
@@ -6177,9 +5799,8 @@ tab, is merely changed to exactly one space, with no special attempt to
 compress consecutive spaces.  Each quote character @samp{"} is doubled
 so it will be correctly processed by @command{nroff} or @command{troff}.
 
-@item -T
+@optItem{ptx,-T}
 @itemx --format=tex
-@opindex -T
 @opindex --format=tex
 
 Choose an output format suitable for @TeX{} processing.  Each output
@@ -6487,20 +6108,16 @@ options}.
 
 @table @samp
 
-@item -b @var{byte-list}
-@itemx --bytes=@var{byte-list}
-@opindex -b
-@opindex --bytes
+@optItem{cut,-b,@w{ }@var{byte-list}}
+@optItemx{cut,--bytes,=@var{byte-list}}
 Select for printing only the bytes in positions listed in
 @var{byte-list}.  Tabs and backspaces are treated like any other
 character; they take up 1 byte.  If an output delimiter is specified,
 (see the description of @option{--output-delimiter}), then output that
 string between ranges of selected bytes.
 
-@item -c @var{character-list}
-@itemx --characters=@var{character-list}
-@opindex -c
-@opindex --characters
+@optItem{cut,-c,@w{ }@var{character-list}}
+@optItemx{cut,--characters,=@var{character-list}}
 Select for printing only the characters in positions listed in
 @var{character-list}.  The same as @option{-b} for now, but
 internationalization will change that.  Tabs and backspaces are
@@ -6509,10 +6126,8 @@ output delimiter is specified, (see the description of
 @option{--output-delimiter}), then output that string between ranges
 of selected bytes.
 
-@item -f @var{field-list}
-@itemx --fields=@var{field-list}
-@opindex -f
-@opindex --fields
+@optItem{cut,-f,@w{ }@var{field-list}}
+@optItemx{cut,--fields,@var{field-list}}
 Select for printing only the fields listed in @var{field-list}.
 Fields are separated by a TAB character by default.  Also print any
 line that contains no delimiter character, unless the
@@ -6542,35 +6157,28 @@ join -a1 -o 1.2,1.1 - /dev/null # reorder the first two fields
 @end verbatim
 @end example
 
-@item -d @var{input_delim_byte}
-@itemx --delimiter=@var{input_delim_byte}
-@opindex -d
-@opindex --delimiter
+@optItem{cut,-d,@w{ }@var{input_delim_byte}}
+@optItemx{cut,--delimiter,=@var{input_delim_byte}}
 With @option{-f}, use the first byte of @var{input_delim_byte} as
 the input fields separator (default is TAB).
 
-@item -n
-@opindex -n
+@optItem{cut,-n}
 Do not split multi-byte characters (no-op for now).
 
-@item -s
-@itemx --only-delimited
-@opindex -s
-@opindex --only-delimited
+@optItem{cut,-s}
+@optItemx{cut,--only-delimited}
 For @option{-f}, do not print lines that do not contain the field separator
 character.  Normally, any line without a field separator is printed verbatim.
 
-@item --output-delimiter=@var{output_delim_string}
-@opindex --output-delimiter
-With @option{-f}, output fields are separated by @var{output_delim_string}.
+@optItem{cut,--output-delimiter,=@var{string}}
+With @option{-f}, output fields are separated by @var{string}.
 The default with @option{-f} is to use the input delimiter.
 When using @option{-b} or @option{-c} to select ranges of byte or
 character offsets (as opposed to ranges of fields),
 output @var{output_delim_string} between non-overlapping
 ranges of selected bytes.
 
-@item --complement
-@opindex --complement
+@optItem{cut,--complement}
 This option is a GNU extension.
 Select for printing the complement of the bytes, characters or fields
 selected with the @option{-b}, @option{-c} or @option{-f} options.
@@ -6578,7 +6186,7 @@ In other words, do @emph{not} print the bytes, characters or fields
 specified via those options.  This option is useful when you have
 many fields and want to print all but a few of them.
 
-@optZeroTerminated
+@optZeroTerminated{cut}
 
 @end table
 
@@ -6648,10 +6256,8 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -s
-@itemx --serial
-@opindex -s
-@opindex --serial
+@optItem{paste,-s}
+@optItemx{paste,--serial}
 Paste the lines of one file at a time rather than one line from each
 file.  Using the above example data:
 
@@ -6661,10 +6267,8 @@ $ paste -s num2 let3
 a       b       c
 @end example
 
-@item -d @var{delim-list}
-@itemx --delimiters=@var{delim-list}
-@opindex -d
-@opindex --delimiters
+@optItem{paste,-d,@w{ }@var{delim-list}}
+@optItemx{paste,--delimiter,=@var{delim-list}}
 Consecutively use the characters in @var{delim-list} instead of
 TAB to separate merged lines.  When @var{delim-list} is
 exhausted, start again at its beginning.  Using the above example data:
@@ -6676,7 +6280,7 @@ $ paste -d '%_' num2 let3 num2
 %c_
 @end example
 
-@optZeroTerminated
+@optZeroTerminated{paste}
 
 @end table
 
@@ -6746,24 +6350,21 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -a @var{file-number}
-@opindex -a
+@optItem{join,-a,@w{ }@var{file-number}}
 Print a line for each unpairable line in file @var{file-number} (either
 @samp{1} or @samp{2}), in addition to the normal output.
 
-@item --check-order
+@optItem{join,--check-order}
 Fail with an error message if either input file is wrongly ordered.
 
-@item --nocheck-order
+@optItem{join,--nocheck-order}
 Do not check that both input files are in sorted order.  This is the default.
 
-@item -e @var{string}
-@opindex -e
+@optItem{join,-e,@w{ }@var{string}}
 Replace those output fields that are missing in the input with @var{string}.
 I.e., missing fields specified with the @option{-12jo} options.
 
-@item --header
-@opindex --header
+@optItem{join,--header}
 Treat the first line of each input file as a header line.  The header lines
 will be joined and printed as the first output line.  If @option{-o} is used to
 specify output format, the header line will be printed according to the
@@ -6771,26 +6372,22 @@ specified format.  The header lines will not be checked for ordering even if
 @option{--check-order} is specified.  Also if the header lines from each file
 do not match, the heading fields from the first file will be used.
 
-@item -i
-@itemx --ignore-case
-@opindex -i
-@opindex --ignore-case
+@optItem{join,-i}
+@optItemx{join,--ignore-case}
 Ignore differences in case when comparing keys.
 With this option, the lines of the input files must be ordered in the same way.
 Use @samp{sort -f} to produce this ordering.
 
-@item -1 @var{field}
-@opindex -1
+@optItem{join,-1,@w{ }@var{field}}
 Join on field @var{field} (a positive integer) of file 1.
 
-@item -2 @var{field}
-@opindex -2
+@optItem{join,-2,@w{ }@var{field}}
 Join on field @var{field} (a positive integer) of file 2.
 
-@item -j @var{field}
+@optItem{join,-j,@w{ }@var{field}}
 Equivalent to @option{-1 @var{field} -2 @var{field}}.
 
-@item -o @var{field-list}
+@optItem{join,-o,@w{ }@var{field-list}}
 @itemx -o auto
 If the keyword @samp{auto} is specified, infer the output format from
 the first line in each file.  This is the same as the default output format
@@ -6822,7 +6419,7 @@ example, the commands @samp{join -o 1.2,2.2} and @samp{join -o '1.2
 All output lines -- including those printed because of any @option{-a}
 or @option{-v} option -- are subject to the specified @var{field-list}.
 
-@item -t @var{char}
+@optItem{join,-t,@w{ }@var{char}}
 Use character @var{char} as the input and output field separator.
 Treat as significant each occurrence of @var{char} in the input file.
 Use @samp{sort -t @var{char}}, without the @option{-b} option of
@@ -6831,11 +6428,11 @@ the whole line is considered, matching the default operation of sort.
 If @samp{-t '\0'} is specified then the ASCII NUL
 character is used to delimit the fields.
 
-@item -v @var{file-number}
+@optItem{join,-v,@w{ }@var{file-number}}
 Print a line for each unpairable line in file @var{file-number}
 (either @samp{1} or @samp{2}), instead of the normal output.
 
-@optZeroTerminated
+@optZeroTerminated{join}
 @newlineFieldSeparator
 
 @end table
@@ -7257,34 +6854,25 @@ Options must precede operands.
 
 @table @samp
 
-@item -c
-@itemx -C
-@itemx --complement
-@opindex -c
-@opindex -C
-@opindex --complement
+@optItem{tr,-c}
+@optItemx{tr,-C}
+@optItemx{tr,--complement}
 Instead of @var{array1}, use its complement (all characters not
 specified by @var{string1}), in ascending order.  Use this option with
 caution in multibyte locales where its meaning is not always clear
 or portable; see @ref{Character arrays}.
 
-@item -d
-@itemx --delete
-@opindex -d
-@opindex --delete
+@optItem{tr,-d}
+@optItemx{tr,--delete}
 Delete characters in @var{array1}; do not translate.
 
-@item -s
-@itemx --squeeze-repeats
-@opindex -s
-@opindex --squeeze-repeats
+@optItem{tr,-s}
+@optItemx{tr,--squeeze-repeats}
 Replace each sequence of a repeated character that is listed in
 the last specified @var{array}, with a single occurrence of that character.
 
-@item -t
-@itemx --truncate-set1
-@opindex -t
-@opindex --truncate-set1
+@optItem{tr,-t}
+@optItemx{tr,--truncate-set1}
 Truncate @var{array1} to the length of @var{array2}.
 
 @end table
@@ -7669,10 +7257,8 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -t @var{tab1}[,@var{tab2}]@dots{}
-@itemx --tabs=@var{tab1}[,@var{tab2}]@dots{}
-@opindex -t
-@opindex --tabs
+@optItem{expand,@w{ }@var{tab1}[@comma{}@var{tab2}]@dots{}}
+@optItemx{expand,--tabs,=@var{tab1}[@comma{}@var{tab2}]@dots{}}
 @cindex tab stops, setting
 If only one tab stop is given, set the tabs @var{tab1} spaces apart
 (default is 8).  Otherwise, set the tabs at columns @var{tab1},
@@ -7700,10 +7286,8 @@ For compatibility, GNU @command{expand} also accepts the obsolete
 option syntax, @option{-@var{t1}[,@var{t2}]@dots{}}.  New scripts
 should use @option{-t @var{t1}[,@var{t2}]@dots{}} instead.
 
-@item -i
-@itemx --initial
-@opindex -i
-@opindex --initial
+@optItem{expand,-i}
+@optItemx{expand,--initial}
 @cindex initial tabs, converting
 Only convert initial tabs (those that precede all non-space or non-tab
 characters) on each line to spaces.
@@ -7739,10 +7323,8 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -t @var{tab1}[,@var{tab2}]@dots{}
-@itemx --tabs=@var{tab1}[,@var{tab2}]@dots{}
-@opindex -t
-@opindex --tabs
+@optItem{unexpand,@w{ }@var{tab1}[@comma{}@var{tab2}]@dots{}}
+@optItemx{unexpand,--tabs,=@var{tab1}[@comma{}@var{tab2}]@dots{}}
 If only one tab stop is given, set the tabs @var{tab1} columns apart
 instead of the default 8.  Otherwise, set the tabs at columns
 @var{tab1}, @var{tab2}, @dots{} (numbered from 0), and leave blanks
@@ -7757,13 +7339,13 @@ separated by commas.  (Unlike @option{-t}, this obsolete option does
 not imply @option{-a}.)  New scripts should use @option{--first-only -t
 @var{tab1}[,@var{tab2}]@dots{}} instead.
 
-@item -a
-@itemx --all
-@opindex -a
-@opindex --all
+@optItem{unexpand,-a}
+@optItemx{unexpand,--all}
 Also convert all sequences of two or more blanks just before a tab stop,
 even if they occur after non-blank characters in a line.
 
+@optItem{unexpand,--first-only}
+Convert only leading sequences of blanks (overrides @option{-a}).
 @end table
 
 @exitstatus
@@ -7854,32 +7436,24 @@ files whose names start with @samp{.}.
 
 @table @samp
 
-@item -a
-@itemx --all
-@opindex -a
-@opindex --all
+@optItem{ls,-a}
+@optItemx{ls,--all}
 In directories, do not ignore file names that start with @samp{.}.
 
-@item -A
-@itemx --almost-all
-@opindex -A
-@opindex --almost-all
+@optItem{ls,-A}
+@optItemx{ls,--almost-all}
 In directories, do not ignore all file names that start with @samp{.};
 ignore only @file{.} and @file{..}.  The @option{--all} (@option{-a})
 option overrides this option.
 
-@item -B
-@itemx --ignore-backups
-@opindex -B
-@opindex --ignore-backups
+@optItem{ls,-B}
+@optItemx{ls,--ignore-backups}
 @cindex backup files, ignoring
 In directories, ignore files that end with @samp{~}.  This option is
 equivalent to @samp{--ignore='*~' --ignore='.*~'}.
 
-@item -d
-@itemx --directory
-@opindex -d
-@opindex --directory
+@optItem{ls,-d}
+@optItemx{ls,--directory}
 List just the names of directories, as with other types of files, rather
 than listing their contents.
 @c The following sentence is the same as the one for -F.
@@ -7888,16 +7462,13 @@ command line unless the @option{--dereference-command-line} (@option{-H}),
 @option{--dereference} (@option{-L}), or
 @option{--dereference-command-line-symlink-to-dir} options are specified.
 
-@item -H
-@itemx --dereference-command-line
-@opindex -H
-@opindex --dereference-command-line
+@optItem{ls,-H}
+@optItemx{ls,--dereference-command-line}
 @cindex symbolic links, dereferencing
 If a command line argument specifies a symbolic link, show information
 for the file the link references rather than for the link itself.
 
-@item --dereference-command-line-symlink-to-dir
-@opindex --dereference-command-line-symlink-to-dir
+@optItem{ls,--dereference-command-line-symlink-to-dir}
 @cindex symbolic links, dereferencing
 Do not dereference symbolic links, with one exception:
 if a command line argument specifies a symbolic link that refers to
@@ -7910,8 +7481,7 @@ or any of the following options is in effect:
 @option{--dereference} (@option{-L}), or
 @option{--dereference-command-line} (@option{-H})).
 
-@item --hide=PATTERN
-@opindex --hide=@var{pattern}
+@optItem{ls,--hide,=@var{pattern}}
 In directories, ignore files whose names match the shell pattern
 @var{pattern}, unless the @option{--all} (@option{-a}) or
 @option{--almost-all} (@option{-A}) is also given.  This
@@ -7924,10 +7494,8 @@ This option can be useful in shell aliases.  For example, if
 an alias for @samp{ls --ignore='*~'}, then the command @samp{lx -A}
 lists the file @file{README~} even though @samp{ly -A} would not.
 
-@item -I @var{pattern}
-@itemx --ignore=@var{pattern}
-@opindex -I
-@opindex --ignore=@var{pattern}
+@optItem{ls,-I,@w{ }@var{pattern}}
+@optItemx{ls,--ignore,=@var{pattern}}
 In directories, ignore files whose names match the shell pattern
 (not regular expression) @var{pattern}.  As
 in the shell, an initial @samp{.} in a file name does not match a
@@ -7942,20 +7510,16 @@ The first option ignores names of length 3 or more that start with @samp{.},
 the second ignores all two-character names that start with @samp{.}
 except @samp{..}, and the third ignores names that start with @samp{#}.
 
-@item -L
-@itemx --dereference
-@opindex -L
-@opindex --dereference
+@optItem{ls,-L}
+@optItemx{ls,--dereference}
 @cindex symbolic links, dereferencing
 When showing file information for a symbolic link, show information
 for the file the link references rather than the link itself.
 However, even with this option, @command{ls} still prints the name
 of the link itself, not the name of the file that the link points to.
 
-@item -R
-@itemx --recursive
-@opindex -R
-@opindex --recursive
+@optItem{ls,-R}
+@optItemx{ls,--recursive}
 @cindex recursive directory listing
 @cindex directory listing, recursive
 List the contents of all directories recursively.
@@ -7971,17 +7535,14 @@ default, only file names are shown.
 
 @table @samp
 
-@item --author
-@opindex --author
+@optItem{ls,--author}
 @cindex hurd, author, printing
 In long format, list each file's author.
 In GNU/Hurd, file authors can differ from their owners, but in other
 operating systems the two are the same.
 
-@item -D
-@itemx --dired
-@opindex -D
-@opindex --dired
+@optItem{ls,-D}
+@optItemx{ls,--dired}
 @cindex dired Emacs mode support
 Print an additional line after the main output:
 
@@ -8084,40 +7645,32 @@ The @option{--dired} (@option{-D}) option implies long format output
 with hyperlinks disabled, and takes precedence over previously specified
 output formats or hyperlink mode.
 
-@item --full-time
-@opindex --full-time
+@optItem{ls,--full-time}
 Produce long format, and list times in full.  It is
 equivalent to using @option{--format=long} (@option{-l}) with
 @option{--time-style=full-iso} (@pxref{Formatting file timestamps}).
 
-@item -g
-@opindex -g
+@optItem{ls,-g}
 Produce long format, but omit owner information.
 
-@item -G
-@itemx --no-group
-@opindex -G
-@opindex --no-group
+@optItem{ls,-G}
+@optItemx{ls,--no-group}
 Inhibit display of group information in long format.
 (This is the default in some non-GNU versions of @command{ls}, so we
 provide this option for compatibility.)
 
-@optHumanReadable
+@optHumanReadable{ls}
 
-@item -i
-@itemx --inode
-@opindex -i
-@opindex --inode
+@optItem{ls,-i}
+@optItemx{ls,--inode}
 @cindex inode number, printing
 Print the inode number (also called the file serial number and index
 number) of each file to the left of the file name.  (This number
 uniquely identifies each file within a particular file system.)
 
-@item -l
-@itemx --format=long
+@optItem{ls,-l}
+@optItemx{ls,--format,=long}
 @itemx --format=verbose
-@opindex -l
-@opindex --format
 @opindex long ls @r{format}
 @opindex verbose ls @r{format}
 Produce long format.
@@ -8240,26 +7793,21 @@ is marked with a @samp{+} character.
 whether alternate access methods apply to the file, which may happen for
 example with some NFS setups with files without read permission.
 
-@item -n
-@itemx --numeric-uid-gid
-@opindex -n
-@opindex --numeric-uid-gid
+@optItem{ls,-n}
+@optItemx{ls,--numeric-uid-gid}
 @cindex numeric uid and gid
 @cindex numeric user and group IDs
 Produce long format, but
 display right-justified numeric user and group IDs
 instead of left-justified owner and group names.
 
-@item -o
-@opindex -o
+@optItem{ls,-o}
 Produce long format, but omit group information.
 It is equivalent to using @option{--format=long} (@option{-l})
 with @option{--no-group} (@option{-G}).
 
-@item -s
-@itemx --size
-@opindex -s
-@opindex --size
+@optItem{ls,-s}
+@optItemx{ls,--size}
 @cindex file system allocation
 @cindex size of files, reporting
 Print the file system allocation of each file to the left of the file name.
@@ -8276,12 +7824,10 @@ systems, it reports sizes that are twice the correct values for files
 that are NFS-mounted from BSD systems.  This is due to a flaw in HP-UX;
 it also affects the HP-UX @command{ls} program.
 
-@optSi
+@optSi{ls}
 
-@item -Z
-@itemx --context
-@opindex -Z
-@opindex --context
+@optItem{ls,-Z}
+@optItemx{ls,--context}
 @cindex SELinux
 @cindex security context
 Display the SELinux security context or @samp{?} if none is found.
@@ -8303,10 +7849,9 @@ character collating sequence specified by the @env{LC_COLLATE} locale.
 
 @table @samp
 
-@item -c
+@optItem{ls,-c}
 @itemx --time=ctime
 @itemx --time=status
-@opindex -c
 @opindex --time
 @opindex ctime@r{, printing or sorting by}
 @opindex status time@r{, printing or sorting by}
@@ -8316,16 +7861,14 @@ print the status change timestamp (the ctime) instead of the mtime.
 When sorting by time or when not using long format,
 sort according to the ctime.  @xref{File timestamps}.
 
-@item -f
-@opindex -f
+@optItem{ls,-f}
 @cindex unsorted directory listing
 @cindex directory order, listing by
 Do not sort, and list all files.
 This is like @option{--sort=none} (@option{-U}) combined
 with @option{--all} (@option{-a}).
 
-@item --group-directories-first
-@opindex --group-directories-first
+@optItem{ls,--group-directories-first}
 When listing a directory's files,
 group all subdirectories before non-directories
 and then sort the subdirectories and the non-directories separately.
@@ -8334,38 +7877,31 @@ and the other sorting options specify a secondary key.
 However, any use of @option{--sort=none}
 (@option{-U}) disables this option altogether.
 
-@item -r
-@itemx --reverse
-@opindex -r
-@opindex --reverse
+@optItem{ls,-r}
+@optItemx{ls,--reverse}
 @cindex reverse sorting
 Reverse whatever the sorting method is -- e.g., list files in reverse
 alphabetical order, youngest first, smallest first, or whatever.
 This option has no effect when @option{--sort=none} (@option{-U})
 is in effect.
 
-@item -S
-@itemx --sort=size
-@opindex -S
-@opindex --sort
+@optItem{ls,-S}
+@optItemx{ls,--sort,=size}
 @opindex size of files@r{, sorting files by}
 Sort by file size, largest first.
 
-@item -t
+@optItem{ls,-t}
 @itemx --sort=time
-@opindex -t
 @opindex --sort
 @opindex modification timestamp@r{, sorting files by}
 Sort by modification timestamp (mtime) by default, newest first.
 The timestamp to order by can be changed with the @option{--time} option.
 @xref{File timestamps}.
 
-@item -u
-@itemx --time=atime
+@optItem{ls,-u}
+@optItem{ls,--time,=atime}
 @itemx --time=access
 @itemx --time=use
-@opindex -u
-@opindex --time
 @opindex use time@r{, printing or sorting files by}
 @opindex atime@r{, printing or sorting files by}
 @opindex access timestamp@r{, printing or sorting files by}
@@ -8396,9 +7932,8 @@ When sorting by time or when not using long format,
 sort according to the birth time.
 @xref{File timestamps}.
 
-@item -U
+@optItem{ls,-U}
 @itemx --sort=none
-@opindex -U
 @opindex --sort
 @opindex none@r{, sorting option for @command{ls}}
 Do not sort; list the files in whatever order they are
@@ -8408,9 +7943,8 @@ directories, where sorting can take some time.
 Unlike @option{-f}, this option does not imply @option{--all}
 (@option{-a}).
 
-@item -v
+@optItem{ls,-v}
 @itemx --sort=version
-@opindex -v
 @opindex --sort
 @opindex version@r{, sorting option for @command{ls}}
 Sort by version name and number, lowest first.  It behaves like a default
@@ -8431,9 +7965,8 @@ Sort by printed width of file names.
 This can be useful with the @option{--format=vertical} (@option{-C})
 output format, to most densely display the listed files.
 
-@item -X
+@optItem{ls,-X}
 @itemx --sort=extension
-@opindex -X
 @opindex --sort
 @opindex extension@r{, sorting files by}
 Sort directory contents alphabetically by file extension (characters
@@ -8458,14 +7991,12 @@ output is not a terminal.  See also the @option{--escape} (@option{-b}),
 @option{--hide-control-chars} (@option{-q}), and @option{--zero} options
 to disambiguate output of file names containing newline characters.
 
-@item -1
-@opindex -1
+@optItem{ls,-1}
 List one file per line.  This is like @option{--format=single-column}
 except that it has no effect if long format is also in effect.
 
-@item -C
+@optItem{ls,-C}
 @itemx --format=vertical
-@opindex -C
 @opindex --format
 @opindex vertical @r{sorted files in columns}
 List files in columns, sorted vertically, with no other information.
@@ -8474,8 +8005,7 @@ It is always the default for the @command{dir} program.
 GNU @command{ls} uses variable width columns to display as many files as
 possible in the fewest lines.
 
-@item --color [=@var{when}]
-@opindex --color
+@optItem{ls,--color,[=@var{when}]}
 @cindex color, distinguishing file types with
 Specify whether to use color for distinguishing file types; @var{when}
 may be omitted, or one of:
@@ -8514,11 +8044,9 @@ eval $(dircolors -p | perl -pe \
 and on a @code{dirent.d_type}-capable file system, @command{ls}
 will perform only one @code{stat} call per command line argument.
 
-@item -F
-@itemx --classify [=@var{when}]
+@optItem{ls,F}
+@optItemx{ls,--classify,[=@var{when}]}
 @itemx --indicator-style=classify
-@opindex -F
-@opindex --classify
 @opindex --indicator-style
 @cindex file type and executables, marking
 @cindex executables and file type, marking
@@ -8548,16 +8076,14 @@ command line unless the @option{--dereference-command-line} (@option{-H}),
 @option{--dereference} (@option{-L}), or
 @option{--dereference-command-line-symlink-to-dir} options are specified.
 
-@item --file-type
+@optItem{ls,--file-type}
 @itemx --indicator-style=file-type
-@opindex --file-type
 @opindex --indicator-style
 @cindex file type, marking
 Append a character to each file name indicating the file type.  This is
 like @option{--classify} (@option{-F}, except that executables are not marked.
 
-@item --hyperlink [=@var{when}]
-@opindex --hyperlink
+@optItem{ls,--hyperlink,[=@var{when}]}
 @cindex hyperlink, linking to files
 Output codes recognized by some terminals to link
 to files using the @samp{file://} URI format.
@@ -8577,8 +8103,7 @@ to files using the @samp{file://} URI format.
 Specifying @option{--hyperlink} and no @var{when} is equivalent to
 @option{--hyperlink=always}.
 
-@item --indicator-style=@var{word}
-@opindex --indicator-style
+@optItem{ls,--indicator-style,=@var{word}}
 Append a character indicator with style @var{word} to file names,
 as follows:
 
@@ -8598,10 +8123,8 @@ Append @samp{*} for executable regular files, otherwise behave as for
 (@option{-F}) option.
 @end table
 
-@item -k
-@itemx --kibibytes
-@opindex -k
-@opindex --kibibytes
+@optItem{ls,-k}
+@optItemx{ls,--kibibytes}
 Set the default block size to its normal value of 1024 bytes,
 overriding any contrary specification in environment variables
 (@pxref{Block size}).  If @option{--block-size},
@@ -8615,35 +8138,30 @@ and the file system allocation written by the @option{--size} (@option{-s})
 option.  It does not affect the file size in bytes that is written in
 long format.
 
-@item -m
+@optItem{ls,-m}
 @itemx --format=commas
-@opindex -m
 @opindex --format
 @opindex commas@r{, outputting between files}
 List files horizontally, with as many as will fit on each line,
 separated by @samp{, } (a comma and a space),
 and with no other information.
 
-@item -p
+@optItem{ls,-p}
 @itemx --indicator-style=slash
-@opindex -p
 @opindex --indicator-style
 @cindex file type, marking
 Append a @samp{/} to directory names.
 
-@item -x
+@optItem{ls,-x}
 @itemx --format=across
 @itemx --format=horizontal
-@opindex -x
 @opindex --format
 @opindex across@r{, listing files}
 @opindex horizontal@r{, listing files}
 List the files in columns, sorted horizontally.
 
-@item -T @var{cols}
-@itemx --tabsize=@var{cols}
-@opindex -T
-@opindex --tabsize
+@optItem{ls,-T,@w{ }@var{cols}}
+@optItemx{ls,--tabsize,=@var{cols}}
 Assume that each tab stop is @var{cols} columns wide.  The default is 8.
 @command{ls} uses tabs where possible in the output, for efficiency.  If
 @var{cols} is zero, do not use tabs at all.
@@ -8662,10 +8180,8 @@ to set hardware tabs to every four columns, you should also run
 @samp{export TABSIZE=4} or @samp{export TABSIZE=0}, or use the
 corresponding @option{--tabsize} options.
 
-@item -w @var{cols}
-@itemx --width=@var{cols}
-@opindex -w
-@opindex --width
+@optItem{ls,-w,@w{ }@var{cols}}
+@optItemx{ls,--width,=@var{cols}}
 @vindex COLUMNS
 Assume the screen is @var{cols} columns wide.  The default is taken
 from the terminal settings if possible; otherwise the environment
@@ -8674,8 +8190,7 @@ is 80.  With a @var{cols} value of @samp{0}, there is no limit on
 the length of the output line, and that single output line will
 be delimited with spaces, not tabs.
 
-@item --zero
-@opindex --zero
+@optItem{ls,--zero}
 @outputNUL
 This option is incompatible with the @option{--dired} (@option{-D}) option.
 This option also implies the options @option{--show-control-chars},
@@ -8710,8 +8225,7 @@ with @env{TZ}, libc, The GNU C Library Reference Manual}.
 The following option changes how file timestamps are printed.
 
 @table @samp
-@item --time-style=@var{style}
-@opindex --time-style
+@optItem{ls,--time-style,=@var{style}}
 @cindex time style
 List timestamps in style @var{style}.  The @var{style} should
 be one of the following:
@@ -8821,46 +8335,37 @@ These options change how file names themselves are printed.
 
 @table @samp
 
-@item -b
-@itemx --escape
+@optItem{ls,-b}
+@optItemx{ls,--escape}
 @itemx --quoting-style=escape
-@opindex -b
-@opindex --escape
 @opindex --quoting-style
 @cindex backslash sequences for file names
 Quote nongraphic characters in file names using alphabetic and octal
 backslash sequences like those used in C.
 
-@item -N
-@itemx --literal
+@optItem{ls,-N}
+@optItemx{ls,--literal}
 @itemx --quoting-style=literal
-@opindex -N
-@opindex --literal
 @opindex --quoting-style
 Do not quote file names.  However, with @command{ls} nongraphic
 characters are still printed as question marks if the output is a
 terminal and you do not specify the @option{--show-control-chars}
 option.
 
-@item -q
-@itemx --hide-control-chars
-@opindex -q
-@opindex --hide-control-chars
+@optItem{ls,-q}
+@optItemx{ls,--hide-control-chars}
 Print question marks instead of nongraphic characters in file names.
 This is the default if the output is a terminal and the program is
 @command{ls}.
 
-@item -Q
-@itemx --quote-name
+@optItem{ls,-Q}
+@optItemx{ls,--quote-name}
 @itemx --quoting-style=c
-@opindex -Q
-@opindex --quote-name
 @opindex --quoting-style
 Enclose file names in double quotes and quote nongraphic characters as
 in C.
 
-@item --quoting-style=@var{word}
-@opindex --quoting-style
+@optItem{ls,--quoting-style,=@var{word}}
 @cindex quoting style
 Use style @var{word} to quote file names and other strings that may
 contain arbitrary characters.  The @var{word} should
@@ -8915,8 +8420,7 @@ with the environment variable @env{QUOTING_STYLE}@.  If that environment
 variable is not set, the default value is @samp{shell-escape} when the
 output is a terminal, and @samp{literal} otherwise.
 
-@item --show-control-chars
-@opindex --show-control-chars
+@optItem{ls,--show-control-chars}
 Print nongraphic characters as-is in file names.
 This is the default unless the output is a terminal and the program is
 @command{ls}.
@@ -8988,33 +8492,25 @@ environment variable.
 The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
-@item -b
-@itemx --sh
-@itemx --bourne-shell
-@opindex -b
-@opindex --sh
-@opindex --bourne-shell
+@optItem{dircolors,-b}
+@optItemx{dircolors,--sh}
+@optItemx{dircolors,--bourne-shell}
 @cindex Bourne shell syntax for color setup
 @cindex @command{sh} syntax for color setup
 Output Bourne shell commands.  This is the default if the @env{SHELL}
 environment variable is set and does not end with @samp{csh} or
 @samp{tcsh}.
 
-@item -c
-@itemx --csh
-@itemx --c-shell
-@opindex -c
-@opindex --csh
-@opindex --c-shell
+@optItem{dircolors,-c}
+@optItemx{dircolors,--csh}
+@optItemx{dircolors,--c-shell}
 @cindex C shell syntax for color setup
 @cindex @command{csh} syntax for color setup
 Output C shell commands.  This is the default if @code{SHELL} ends with
 @command{csh} or @command{tcsh}.
 
-@item -p
-@itemx --print-database
-@opindex -p
-@opindex --print-database
+@optItem{dircolors,-p}
+@optItemx{dircolors,--print-database}
 @cindex color database, printing
 @cindex database for color setup, printing
 @cindex printing color database
@@ -9022,8 +8518,7 @@ Print the (compiled-in) default color configuration database.  This
 output is itself a valid configuration file, and is fairly descriptive
 of the possibilities.
 
-@item --print-ls-colors
-@opindex --print-ls-colors
+@optItem{dircolors,--print-ls-colors}
 @cindex printing ls colors
 Print the LS_COLORS entries on separate lines,
 each colored as per the color they represent.
@@ -9128,10 +8623,8 @@ you simply want to make a backup of an existing file before changing it.
 The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
-@item -a
-@itemx --archive
-@opindex -a
-@opindex --archive
+@optItem{cp,-a}
+@optItemx{cp,--archive}
 Preserve as much as possible of the structure and attributes of the
 original files in the copy (but do not attempt to preserve internal
 directory structure; i.e., @samp{ls -U} may list the entries in a copied
@@ -9140,24 +8633,16 @@ Try to preserve SELinux security context and extended attributes (xattr),
 but ignore any failure to do that and print no corresponding diagnostic.
 Equivalent to @option{-dR --preserve=all} with the reduced diagnostics.
 
-@item --attributes-only
-@opindex --attributes-only
+@optItem{cp,--attributes-only}
 Copy only the specified attributes of the source file to the destination.
 If the destination already exists, do not alter its contents.
 See the @option{--preserve} option for controlling which attributes to copy.
 
-@item -b
-@itemx --backup[=@var{method}]
-@opindex -b
-@opindex --backup
-@vindex VERSION_CONTROL
-@cindex backups, making
-@xref{Backup options}.
-Make a backup of each file that would otherwise be overwritten or removed.
-As a special case, @command{cp} makes a backup of @var{source} when the force
-and backup options are given and @var{source} and @var{dest} are the same
-name for an existing, regular file.  One useful application of this
-combination of options is this tiny Bourne shell script:
+@optBackup{cp}
+As a special case, @command{cp} makes a backup of @var{source} when the
+@option{force} and @option{backup} options are given and @var{source} and
+@var{dest} are the same name for an existing, regular file.  One useful
+application of this combination of options is this tiny Bourne shell script:
 
 @example
 #!/bin/sh
@@ -9170,7 +8655,7 @@ done
 exit $fail
 @end example
 
-@item --copy-contents
+@optItem{cp,--copy-contents}
 @cindex directories, copying recursively
 @cindex copying directories recursively
 @cindex recursively copying directories
@@ -9187,27 +8672,23 @@ fill up your destination file system if you use it to copy @file{/dev/zero}.
 This option has no effect unless copying recursively, and it does not
 affect the copying of symbolic links.
 
-@item -d
-@opindex -d
+@optItem{cp,-d}
 @cindex symbolic links, copying
 @cindex hard links, preserving
 Copy symbolic links as symbolic links rather than copying the files that
 they point to, and preserve hard links between source files in the copies.
 Equivalent to @option{--no-dereference --preserve=links}.
 
-@macro optDebugCopy
-@item --debug
-@opindex --debug
+@macro optDebugCopy{cmd}
+@optItem{\cmd\,--debug}
 @cindex debugging, copying
 Print extra information to standard output, explaining how files are copied.
 This option implies the @option{--verbose} option.
 @end macro
-@optDebugCopy
+@optDebugCopy{cp}
 
-@item -f
-@itemx --force
-@opindex -f
-@opindex --force
+@optItem{cp,-f}
+@optItemx{cp,--force}
 When copying without this option and an existing destination file cannot
 be opened for writing, the copy fails.  However, with @option{--force},
 when a destination file cannot be opened, @command{cp} then
@@ -9226,41 +8707,32 @@ This option is independent of the @option{--interactive} or
 This option is ignored when the @option{--no-clobber} or @option{-n} option
 is also used.
 
-@item -H
-@opindex -H
+@optItem{cp,-H}
 If a command line argument specifies a symbolic link, then copy the
 file it points to rather than the symbolic link itself.  However,
 copy (preserving its nature) any symbolic link that is encountered
 via recursive traversal.
 
-@item -i
-@itemx --interactive
-@opindex -i
-@opindex --interactive
+@optItem{cp,-i}
+@optItemx{cp,--interactive}
 When copying a file other than a directory, prompt whether to
 overwrite an existing destination file, and fail if the response
 is not affirmative.  The @option{-i} option overrides
 a previous @option{-n} option.
 
-@item -l
-@itemx --link
-@opindex -l
-@opindex --link
+@optItem{cp,-l}
+@optItemx{cp,--link}
 Make hard links instead of copies of non-directories.
 
-@item -L
-@itemx --dereference
-@opindex -L
-@opindex --dereference
+@optItem{cp,-L}
+@optItemx{cp,--dereference}
 Follow symbolic links when copying from them.
 With this option, @command{cp} cannot create a symbolic link.
 For example, a symlink (to regular file) in the source tree will be copied to
 a regular file in the destination tree.
 
-@item -n
-@itemx --no-clobber
-@opindex -n
-@opindex --no-clobber
+@optItem{cp,-n}
+@optItemx{cp,--no-clobber}
 Do not overwrite an existing file; silently skip instead.
 This option overrides a previous @option{-i} option.
 This option is mutually exclusive with @option{-b} or @option{--backup} option.
@@ -9269,19 +8741,15 @@ other platforms.  See also the @option{--update} option which will
 give more control over how to deal with existing files in the destination,
 and over the exit status in particular.
 
-@item -P
-@itemx --no-dereference
-@opindex -P
-@opindex --no-dereference
+@optItem{cp,-P}
+@optItemx{cp,--no-dereference}
 @cindex symbolic links, copying
 Copy symbolic links as symbolic links rather than copying the files that
 they point to.  This option affects only symbolic links in the source;
 symbolic links in the destination are always followed if possible.
 
-@item -p
-@itemx --preserve[=@var{attribute_list}]
-@opindex -p
-@opindex --preserve
+@optItem{cp,-p}
+@optItemx{cp,--preserve,[=@var{attribute_list}]}
 @cindex file information, preserving, extended attributes, xattr
 Preserve the specified attributes of the original files.
 If specified, the @var{attribute_list} must be a comma-separated list
@@ -9362,13 +8830,12 @@ the umask or a default ACL, possibly resulting in a more restrictive
 file mode.
 @xref{File permissions}.
 
-@item --no-preserve=@var{attribute_list}
+@optItem{cp,--no-preserve,=@var{attribute_list}}
 @cindex file information, preserving
 Do not preserve the specified attributes.  The @var{attribute_list}
 has the same form as for @option{--preserve}.
 
-@item --parents
-@opindex --parents
+@optItem{cp,--parents}
 @cindex parent directories and @command{cp}
 Form the name of each destination file by appending to the target
 directory a slash and the specified name of the source file.  The last
@@ -9383,12 +8850,9 @@ cp --parents a/b/c existing_dir
 copies the file @file{a/b/c} to @file{existing_dir/a/b/c}, creating
 any missing intermediate directories.
 
-@item -R
-@itemx -r
-@itemx --recursive
-@opindex -R
-@opindex -r
-@opindex --recursive
+@optItem{cp,-r}
+@optItemx{cp,-R}
+@optItemx{cp,--recursive}
 @cindex directories, copying recursively
 @cindex copying directories recursively
 @cindex recursively copying directories
@@ -9407,8 +8871,7 @@ Also, it is not portable to use @option{-R} to copy symbolic links
 unless you also specify @option{-P}, as POSIX allows
 implementations that dereference symbolic links by default.
 
-@item --reflink[=@var{when}]
-@opindex --reflink[=@var{when}]
+@optItem{cp,--reflink,[=@var{when}]}
 @cindex COW
 @cindex clone
 @cindex copy on write
@@ -9439,13 +8902,11 @@ This option is overridden by the @option{--link}, @option{--symbolic-link}
 and @option{--attributes-only} options, thus allowing it to be used
 to configure the default data copying behavior for @command{cp}.
 
-@item --remove-destination
-@opindex --remove-destination
+@optItem{cp,--remove-destination}
 Remove each existing destination file before attempting to open it
 (contrast with @option{-f} above).
 
-@item --sparse=@var{when}
-@opindex --sparse=@var{when}
+@optItem{cp,--sparse,=@var{when}}
 @cindex sparse files, copying
 @cindex holes, copying files with
 @findex read @r{system call, and holes}
@@ -9491,28 +8952,24 @@ minimum amount of space supported by the file system.
 alias cp='cp --sparse=always'
 @end example
 
-@optStripTrailingSlashes
+@optStripTrailingSlashes{cp}
 
-@item -s
-@itemx --symbolic-link
-@opindex -s
-@opindex --symbolic-link
+@optItem{cp,-s}
+@optItemx{cp,--symbolic-link}
 @cindex symbolic links, copying with
 Make symbolic links instead of copies of non-directories.  All source
 file names must be absolute (starting with @samp{/}) unless the
 destination files are in the current directory.  This option merely
 results in an error message on systems that do not support symbolic links.
 
-@optBackupSuffix
+@optBackupSuffix{cp}
 
-@optTargetDirectory
+@optTargetDirectory{cp}
 
-@optNoTargetDirectory
+@optNoTargetDirectory{cp}
 
-@item -u
-@itemx --update[=@var{which}]
-@opindex -u
-@opindex --update[=@var{which}]
+@optItem{cp,-u}
+@optItemx{cp,--update,[=@var{which}]}
 @cindex newer files, copying only
 Do not copy a non-directory that has an existing destination with the
 same or newer modification timestamp; instead, silently skip the file
@@ -9552,26 +9009,20 @@ in files being replaced if they're older than the corresponding source file.
 @end macro
 @whichUpdate
 
-@item -v
-@itemx --verbose
-@opindex -v
-@opindex --verbose
+@optItem{cp,-v}
+@optItemx{cp,--verbose}
 Print the name of each file before copying it.
 
-@item -x
-@itemx --one-file-system
-@opindex -x
-@opindex --one-file-system
+@optItem{cp,-x}
+@optItemx{cp,--one-file-system}
 @cindex file systems, omitting copying to different
 Skip subdirectories that are on different file systems from the one that
 the copy started on.
 However, mount point directories @emph{are} copied.
 
-@macro optContext
-@item -Z
-@itemx --context[=@var{context}]
-@opindex -Z
-@opindex --context
+@macro optContext{cmd}
+@optItem{\cmd\,-Z}
+@optItemx{\cmd\,--context,[=@var{context}]}
 @cindex SELinux, setting/restoring security context
 @cindex security context
 Without a specified @var{context}, adjust the SELinux security context according
@@ -9582,7 +9033,7 @@ will set the context for newly created files only.
 With a specified context, if both SELinux and SMACK are disabled, a warning is
 issued.
 @end macro
-@optContext
+@optContext{cp}
 This option is mutually exclusive with the @option{--preserve=context}
 option, and overrides the @option{--preserve=all} and @option{-a} options.
 
@@ -9648,33 +9099,28 @@ OS/360 JCL.
 
 @table @samp
 
-@item if=@var{file}
-@opindex if
+@optItem{dd,if,=@var{file}}
 Read from @var{file} instead of standard input.
 
-@item of=@var{file}
-@opindex of
+@optItem{dd,of,=@var{file}}
 Write to @var{file} instead of standard output.  Unless
 @samp{conv=notrunc} is given, truncate @var{file} before writing it.
 
-@item ibs=@var{bytes}
-@opindex ibs
+@optItem{dd,ibs,=@var{bytes}}
 @cindex block size of input
 @cindex input block size
 Set the input block size to @var{bytes}.
 This makes @command{dd} read @var{bytes} per block.
 The default is 512 bytes.
 
-@item obs=@var{bytes}
-@opindex obs
+@optItem{dd,obs,=@var{bytes}}
 @cindex block size of output
 @cindex output block size
 Set the output block size to @var{bytes}.
 This makes @command{dd} write @var{bytes} per block.
 The default is 512 bytes.
 
-@item bs=@var{bytes}
-@opindex bs
+@optItem{dd,bs,=@var{bytes}}
 @cindex block size
 Set both input and output block sizes to @var{bytes}.
 This makes @command{dd} read and write @var{bytes} per block,
@@ -9683,8 +9129,7 @@ In addition, if no data-transforming @option{conv} operand is specified,
 input is copied to the output as soon as it's read,
 even if it is smaller than the block size.
 
-@item cbs=@var{bytes}
-@opindex cbs
+@optItem{dd,cbs,=@var{bytes}}
 @cindex block size of conversion
 @cindex conversion block size
 @cindex fixed-length records, converting to variable-length
@@ -9694,27 +9139,22 @@ When converting variable-length records to fixed-length ones
 (@option{conv=block}) or the reverse (@option{conv=unblock}),
 use @var{bytes} as the fixed record length.
 
-@item skip=@var{n}
-@itemx iseek=@var{n}
-@opindex skip
-@opindex iseek
+@optItem{dd,skip,=@var{n}}
+@optItemx{dd,iseek,=@var{n}}
 Skip @var{n} @samp{ibs}-byte blocks in the input file before copying.
 If @var{n} ends in the letter @samp{B}, interpret @var{n}
 as a byte count rather than a block count.
 (@samp{B} and the @samp{iseek=} spelling are GNU extensions to POSIX.)
 
-@item seek=@var{n}
-@itemx oseek=@var{n}
-@opindex seek
-@opindex oseek
+@optItem{dd,seek,=@var{n}}
+@optItemx{dd,oseek,=@var{n}}
 Skip @var{n} @samp{obs}-byte blocks in the output file before
 truncating or copying.
 If @var{n} ends in the letter @samp{B}, interpret @var{n}
 as a byte count rather than a block count.
 (@samp{B} and the @samp{oseek=} spelling are GNU extensions to POSIX.)
 
-@item count=@var{n}
-@opindex count
+@optItem{dd,count,=@var{n}}
 Copy @var{n} @samp{ibs}-byte blocks from the input file, instead
 of everything until the end of the file.
 If @var{n} ends in the letter @samp{B},
@@ -9727,8 +9167,7 @@ rather than input read operations.
 As an extension to POSIX, @samp{count=0} copies zero blocks
 instead of copying all blocks.
 
-@item status=@var{level}
-@opindex status
+@optItem{dd,status,=@var{level}}
 Specify the amount of information printed.
 If this operand is given multiple times, the last one takes precedence.
 The @var{level} value can be one of the following:
@@ -9773,8 +9212,7 @@ truncated records} is output after the @samp{records out} line if
 
 The @samp{status=} operand is a GNU extension to POSIX.
 
-@item conv=@var{conversion}[,@var{conversion}]@dots{}
-@opindex conv
+@optItem{dd,conv,=@var{conversion}[@comma{}@var{conversion}]@dots{}}
 Convert the file as specified by the @var{conversion} argument(s).
 (No spaces around any comma(s).)
 
@@ -9917,13 +9355,11 @@ This conversion is a GNU extension to POSIX.
 
 @end table
 
-@item iflag=@var{flag}[,@var{flag}]@dots{}
-@opindex iflag
+@optItem{dd,iflag,=@var{flag}[@comma{}@var{flag}]@dots{}}
 Access the input file using the flags specified by the @var{flag}
 argument(s).  (No spaces around any comma(s).)
 
-@item oflag=@var{flag}[,@var{flag}]@dots{}
-@opindex oflag
+@optItem{dd,oflag,=@var{flag}[@comma{}@var{flag}]@dots{}}
 Access the output file using the flags specified by the @var{flag}
 argument(s).  (No spaces around any comma(s).)
 
@@ -10230,12 +9666,10 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@optBackup
+@optBackup{install}
 
-@item -C
-@itemx --compare
-@opindex -C
-@opindex --compare
+@optItem{install,-C}
+@optItemx{install,--compare}
 Compare content of source and destination files, and if there would be no
 change to the destination content, owner, group, permissions, and possibly
 SELinux context, then do not modify the destination at all.
@@ -10246,21 +9680,17 @@ incorrectly determines the default attributes that installed files would have
 This could result in redundant copies or attributes that are not reset to the
 correct defaults.
 
-@item -c
-@opindex -c
+@optItem{install,-c}
 Ignored; for compatibility with old Unix versions of @command{install}.
 
-@item -D
-@opindex -D
+@optItem{install,-D}
 Create any missing parent directories of @var{dest},
 then copy @var{source} to @var{dest}.
 Explicitly specifying the @option{--target-directory=@var{dir}} will similarly
 ensure the presence of that hierarchy before copying @var{source} arguments.
 
-@item -d
-@itemx --directory
-@opindex -d
-@opindex --directory
+@optItem{install,-d}
+@optItemx{install,--directory}
 @cindex directories, creating with given attributes
 @cindex parent directories, creating missing
 @cindex leading directories, creating missing
@@ -10268,21 +9698,17 @@ Create any missing parent directories, giving them the default
 attributes.  Then create each given directory, setting their owner,
 group and mode as given on the command line or to the defaults.
 
-@optDebugCopy
+@optDebugCopy{install}
 
-@item -g @var{group}
-@itemx --group=@var{group}
-@opindex -g
-@opindex --group
+@optItem{install,-g,@w{ }@var{group}}
+@optItemx{install,--group,=@var{group}}
 @cindex group ownership of installed files, setting
 Set the group ownership of installed files or directories to
 @var{group}.  The default is the process's current group.  @var{group}
 may be either a group name or a numeric group ID.
 
-@item -m @var{mode}
-@itemx --mode=@var{mode}
-@opindex -m
-@opindex --mode
+@optItem{install,-m,@w{ }@var{mode}}
+@optItemx{install,--mode,=@var{mode}}
 @cindex permissions of installed files, setting
 Set the file mode bits for the installed file or directory to @var{mode},
 which can be either an octal number, or a symbolic mode as in
@@ -10295,10 +9721,8 @@ This default is not quite the same as @samp{755}, since it disables
 instead of preserving set-user-ID and set-group-ID on directories.
 @xref{Directory Setuid and Setgid}.
 
-@item -o @var{owner}
-@itemx --owner=@var{owner}
-@opindex -o
-@opindex --owner
+@optItem{install,-o,@w{ }@var{owner}}
+@optItemx{install,--owner,=@var{owner}}
 @cindex ownership of installed files, setting
 @cindex appropriate privileges
 @vindex root @r{as default owner}
@@ -10307,8 +9731,7 @@ ownership of installed files or directories to @var{owner}.  The default
 is @code{root}.  @var{owner} may be either a user name or a numeric user
 ID.
 
-@item --preserve-context
-@opindex --preserve-context
+@optItem{install,--preserve-context}
 @cindex SELinux
 @cindex security context
 Preserve the SELinux security context of files and directories.
@@ -10316,10 +9739,8 @@ Failure to preserve the context in all of the files or directories
 will result in an exit status of 1.  If SELinux is disabled then
 print a warning and ignore the option.
 
-@item -p
-@itemx --preserve-timestamps
-@opindex -p
-@opindex --preserve-timestamps
+@optItem{install,-p}
+@optItemx{install,--preserve-timestamps}
 @cindex timestamps of installed files, preserving
 Set the time of last access and the time of last modification of each
 installed file to match those of each corresponding original file.
@@ -10329,33 +9750,28 @@ This option is useful if you want to use the last modification timestamps
 of installed files to keep track of when they were last built as opposed
 to when they were last installed.
 
-@item -s
-@itemx --strip
-@opindex -s
-@opindex --strip
+@optItem{install,-s}
+@optItemx{install,--strip}
 @cindex symbol table information, stripping
 @cindex stripping symbol table information
 Strip the symbol tables from installed binary executables.
 
-@item --strip-program=@var{program}
-@opindex --strip-program
+@optItem{install,--strip-program,=@var{program}}
 @cindex symbol table information, stripping, program
 Program used to strip binaries.
 
-@optBackupSuffix
+@optBackupSuffix{install}
 
-@optTargetDirectory
+@optTargetDirectory{install}
 Also specifying the @option{-D} option will ensure the directory is present.
 
-@optNoTargetDirectory
+@optNoTargetDirectory{install}
 
-@item -v
-@itemx --verbose
-@opindex -v
-@opindex --verbose
+@optItem{install,-v}
+@optItemx{install,--verbose}
 Print the name of each file before copying it.
 
-@optContext
+@optContext{install}
 This option is mutually exclusive with the @option{--preserve-context} option.
 
 
@@ -10430,14 +9846,12 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@optBackup
+@optBackup{mv}
 
-@optDebugCopy
+@optDebugCopy{mv}
 
-@item -f
-@itemx --force
-@opindex -f
-@opindex --force
+@optItem{mv,-f}
+@optItemx{mv,--force}
 @cindex prompts, omitting
 Do not prompt the user before replacing a destination file.
 @macro mvOptsIfn
@@ -10446,19 +9860,15 @@ options, only the final one takes effect.
 @end macro
 @mvOptsIfn
 
-@item -i
-@itemx --interactive
-@opindex -i
-@opindex --interactive
+@optItem{mv,-i}
+@optItemx{mv,--interactive}
 @cindex prompts, forcing
 Prompt whether to overwrite each existing destination file, regardless
 of its permissions, and fail if the response is not affirmative.
 @mvOptsIfn
 
-@item -n
-@itemx --no-clobber
-@opindex -n
-@opindex --no-clobber
+@optItem{mv,-n}
+@optItemx{mv,--no-clobber}
 @cindex prompts, omitting
 Do not overwrite an existing file; silently fail instead.
 @mvOptsIfn
@@ -10466,14 +9876,12 @@ This option is mutually exclusive with @option{-b} or @option{--backup} option.
 See also the @option{--update=none} option which will
 skip existing files but not fail.
 
-@item --no-copy
-@opindex --no-copy
+@optItem{mv,--no-copy}
 @cindex renaming files without copying them
 If a file cannot be renamed because the destination file system differs,
 fail with a diagnostic instead of copying and then removing the file.
 
-@item --exchange
-@opindex --exchange
+@optItem{mv,--exchange}
 Exchange source and destination instead of renaming source to destination.
 Both files must exist; they need not be the same type.
 This exchanges all data and metadata.
@@ -10493,10 +9901,8 @@ If the source and destination might not be on the same file system,
 using @code{--no-copy} will prevent future versions of @command{mv}
 from implementing the exchange by copying.
 
-@item -u
-@itemx --update
-@opindex -u
-@opindex --update
+@optItem{mv,-u}
+@optItemx{mv,--update}
 @cindex newer files, moving only
 Do not move a non-directory that has an existing destination with the
 same or newer modification timestamp;
@@ -10511,31 +9917,26 @@ option is also specified.
 
 @whichUpdate
 
-@item -v
-@itemx --verbose
-@opindex -v
-@opindex --verbose
+@optItem{mv,-v}
+@optItemx{mv,--verbose}
 Print the name of each file before moving it.
 
-@item --keep-directory-symlink
-@opindex --keep-directory-symlink
+@optItem{mv,--keep-directory-symlink}
 Follow existing symlinks to directories when copying.
 Use this option only when the destination directory's contents are trusted,
 as an attacker can place symlinks in the destination
 to cause @command{cp} write to arbitrary target directories.
 
-@optStripTrailingSlashes
+@optStripTrailingSlashes{mv}
 
-@optBackupSuffix
+@optBackupSuffix{mv}
 
-@optTargetDirectory
+@optTargetDirectory{mv}
 
-@optNoTargetDirectory
+@optNoTargetDirectory{mv}
 
-@item -Z
-@itemx --context
-@opindex -Z
-@opindex --context
+@optItem{mv,-Z}
+@optItemx{mv,--context}
 @cindex SELinux, restoring security context
 @cindex security context
 This option functions similarly to the @command{restorecon} command,
@@ -10585,36 +9986,29 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -d
-@itemx --dir
-@opindex -d
-@opindex --dir
+@optItem{rm,-d}
+@optItemx{rm,--dir}
 @cindex directories, removing
 Remove the listed directories if they are empty.
 
-@item -f
-@itemx --force
-@opindex -f
-@opindex --force
+@optItem{rm,-f}
+@optItemx{rm,--force}
 Ignore nonexistent files and missing operands, and never prompt the user.
 Ignore any previous @option{--interactive} (@option{-i}) option.
 
-@item -i
-@opindex -i
+@optItem{rm,-i}
 Prompt whether to remove each file.
 If the response is not affirmative, silently skip the file without failing.
 Ignore any previous @option{--force} (@option{-f}) option.
 Equivalent to @option{--interactive=always}.
 
-@item -I
-@opindex -I
+@optItem{rm,-I}
 Prompt once whether to proceed with the command, if more than three
 files are named or if a recursive removal is requested.  Ignore any
 previous @option{--force} (@option{-f}) option.  Equivalent to
 @option{--interactive=once}.
 
-@item --interactive [=@var{when}]
-@opindex --interactive
+@optItem{rm,--interactive,[=@var{when}]}
 Specify when to issue an interactive prompt.  @var{when} may be
 omitted, or one of:
 @itemize @bullet
@@ -10632,8 +10026,7 @@ removal is requested.  Equivalent to @option{-I}.
 @option{--interactive} with no @var{when} is equivalent to
 @option{--interactive=always}.
 
-@item --one-file-system
-@opindex --one-file-system
+@optItem{rm,--one-file-system}
 @cindex one file system, restricting @command{rm} to
 When removing a hierarchy recursively, do not remove any directory that is on a
 file system different from that of the corresponding command line argument.
@@ -10652,8 +10045,7 @@ chroot happen to be on the same file system.
 See also @option{--preserve-root=all} to protect command line arguments
 themselves.
 
-@item --preserve-root [=all]
-@opindex --preserve-root
+@optItem{rm,--preserve-root,[=all]}
 @cindex root directory, disallow recursive destruction
 Fail upon any attempt to remove the root directory, @file{/},
 when used with the @option{--recursive} option.
@@ -10662,27 +10054,21 @@ This is the default behavior.
 When @samp{all} is specified, reject any command line argument
 that is not on the same file system as its parent.
 
-@item --no-preserve-root
-@opindex --no-preserve-root
+@optItem{rm,--no-preserve-root}
 @cindex root directory, allow recursive destruction
 Do not treat @file{/} specially when removing recursively.
 This option is not recommended unless you really want to
 remove all the files on your computer.
 @xref{Treating / specially}.
 
-@item -r
-@itemx -R
-@itemx --recursive
-@opindex -r
-@opindex -R
-@opindex --recursive
+@optItem{rm,-r}
+@optItemx{rm,-R}
+@optItemx{rm,--recursive}
 @cindex directories, removing (recursively)
 Remove the listed directories and their contents recursively.
 
-@item -v
-@itemx --verbose
-@opindex -v
-@opindex --verbose
+@optItem{rm,-v}
+@optItemx{rm,--verbose}
 Print the name of each file before removing it.
 
 @end table
@@ -10855,45 +10241,33 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -f
-@itemx --force
-@opindex -f
-@opindex --force
+@optItem{shred,-f}
+@optItemx{shred,--force}
 @cindex force deletion
 Override file permissions if necessary to allow overwriting.
 
-@item -n @var{number}
-@itemx --iterations=@var{number}
-@opindex -n @var{number}
-@opindex --iterations=@var{number}
+@optItem{shred,-n,@w{ }@var{number}}
+@optItemx{shred,--iterations,=@var{number}}
 @cindex iterations, selecting the number of
 By default, @command{shred} uses @value{SHRED_DEFAULT_PASSES} passes of
 overwrite.  You can reduce this to save time, or increase it if you think it's
 appropriate.  After 25 passes all of the internal overwrite patterns will have
 been used at least once.
 
-@item --random-source=@var{file}
-@opindex --random-source
+@optItem{shred,--random-source,=@var{file}}
 @cindex random source for shredding
 Use @var{file} as a source of random data used to overwrite and to
 choose pass ordering.  @xref{Random sources}.
 
-@item -s @var{bytes}
-@itemx --size=@var{bytes}
-@opindex -s @var{bytes}
-@opindex --size=@var{bytes}
+@optItem{shred,-s,@w{ }@var{bytes}}
+@optItemx{shred,--size,=@var{bytes}}
 @cindex size of file to shred
 Shred the first @var{bytes} bytes of the file.  The default is to shred
 the whole file.  @var{bytes} can be followed by a size specification like
 @samp{K}, @samp{M}, or @samp{G} to specify a multiple.  @xref{Block size}.
 
-@item -u
-@itemx --remove[=@var{how}]
-@opindex -u
-@opindex --remove
-@opindex --remove=unlink
-@opindex --remove=wipe
-@opindex --remove=wipesync
+@optItem{shred,-u}
+@optItemx{shred,--remove,[=@var{how}]}
 @cindex removing files after shredding
 After shredding a file, deallocate it (if possible) and then remove it.
 If a file has multiple links, only the named links will be removed.
@@ -10909,17 +10283,13 @@ requiring a sync for every character in every file.  This can become
 significant with many files, or is redundant if your file system provides
 synchronous metadata updates.
 
-@item -v
-@itemx --verbose
-@opindex -v
-@opindex --verbose
+@optItem{shred,-v}
+@optItemx{shred,--verbose}
 Display to standard error all status updates as sterilization proceeds.
 This details each data and metadata operation as it is performed.
 
-@item -x
-@itemx --exact
-@opindex -x
-@opindex --exact
+@optItem{shred,-x}
+@optItemx{shred,--exact}
 By default, @command{shred} rounds the size of a regular file up to the next
 multiple of the file system block size to fully erase the slack space in
 the last block of the file.  This space may contain portions of the current
@@ -10929,10 +10299,8 @@ Thus, by default if you shred a 10-byte regular file on a system with 512-byte
 blocks, the resulting file will be 512 bytes long.  With this option,
 shred does not increase the apparent size of the file.
 
-@item -z
-@itemx --zero
-@opindex -z
-@opindex --zero
+@optItem{shred,-z}
+@optItemx{shred,--zero}
 Normally, the last pass that @command{shred} writes is made up of
 random data.  If this would be conspicuous on your storage device (for
 example, because it looks like encrypted data), or you just think
@@ -11164,46 +10532,35 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@optBackup
+@optBackup{ln}
 
-@item -d
-@itemx -F
-@itemx --directory
-@opindex -d
-@opindex -F
-@opindex --directory
+@optItem{ln,-d}
+@optItemx{ln,-F}
+@optItemx{ln,--directory}
 @cindex hard links to directories
 Allow users with appropriate privileges to attempt to make hard links
 to directories.
 However, this will probably fail due to
 system restrictions, even for the super-user.
 
-@item -f
-@itemx --force
-@opindex -f
-@opindex --force
+@optItem{ln,-f}
+@optItemx{ln,--force}
 Remove existing destination files.
 
-@item -i
-@itemx --interactive
-@opindex -i
-@opindex --interactive
+@optItem{ln,-i}
+@optItemx{ln,--interactive}
 @cindex prompting, and @command{ln}
 Prompt whether to remove existing destination files,
 and fail if the response is not affirmative.
 
-@item -L
-@itemx --logical
-@opindex -L
-@opindex --logical
+@optItem{ln,-L}
+@optItemx{ln,--logical}
 If @option{-s} is not in effect, and the source file is a symbolic
 link, create the hard link to the file referred to by the symbolic
 link, rather than the symbolic link itself.
 
-@item -n
-@itemx --no-dereference
-@opindex -n
-@opindex --no-dereference
+@optItem{ln,-n}
+@optItemx{ln,--no-dereference}
 Do not treat the last operand specially when it is a symbolic link to
 a directory.  Instead, treat it as if it were a normal file.
 
@@ -11221,10 +10578,8 @@ just like a directory.
 This option is weaker than the @option{--no-target-directory}
 (@option{-T}) option, so it has no effect if both options are given.
 
-@item -P
-@itemx --physical
-@opindex -P
-@opindex --physical
+@optItem{ln,-P}
+@optItemx{ln,--physical}
 If @option{-s} is not in effect, and the source file is a symbolic
 link, create the hard link to the symbolic link itself.  On platforms
 where this is not supported by the kernel, this option creates a
@@ -11232,10 +10587,8 @@ symbolic link with identical contents; since symbolic link contents
 cannot be edited, any file name resolution performed through either
 link will be the same as if a hard link had been created.
 
-@item -r
-@itemx --relative
-@opindex -r
-@opindex --relative
+@optItem{ln,-r}
+@optItemx{ln,--relative}
 Make symbolic links relative to the link location.
 This option is only valid with the @option{--symbolic} option.
 
@@ -11265,23 +10618,19 @@ ln--relative() {
 @end verbatim
 @end example
 
-@item -s
-@itemx --symbolic
-@opindex -s
-@opindex --symbolic
+@optItem{ln,-s}
+@optItemx{ln,--symbolic}
 Make symbolic links instead of hard links.  This option merely produces
 an error message on systems that do not support symbolic links.
 
-@optBackupSuffix
+@optBackupSuffix{ln}
 
-@optTargetDirectory
+@optTargetDirectory{ln}
 
-@optNoTargetDirectory
+@optNoTargetDirectory{ln}
 
-@item -v
-@itemx --verbose
-@opindex -v
-@opindex --verbose
+@optItem{ln,-v}
+@optItemx{ln,--verbose}
 Print the name of each file after linking it successfully.
 
 @end table
@@ -11347,10 +10696,8 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -m @var{mode}
-@itemx --mode=@var{mode}
-@opindex -m
-@opindex --mode
+@optItem{mkdir,-m,@w{ }@var{mode}}
+@optItemx{mkdir,--mode,=@var{mode}}
 @cindex modes of created directories, setting
 Set the file permission bits of created directories to @var{mode},
 which uses the same syntax as
@@ -11367,10 +10714,8 @@ incorrect.  @xref{Directory Setuid and Setgid}, for how the
 set-user-ID and set-group-ID bits of directories are inherited unless
 overridden in this way.
 
-@item -p
-@itemx --parents
-@opindex -p
-@opindex --parents
+@optItem{mkdir,-p}
+@optItemx{mkdir,--parents}
 @cindex parent directories, creating
 Make any missing parent directories for each argument, setting their
 file permission bits to @samp{=rwx,u+wx},
@@ -11390,14 +10735,12 @@ To set a parent's special mode bits as well, you can invoke
 Setgid}, for how the set-user-ID and set-group-ID bits of
 newly-created parent directories are inherited.
 
-@item -v
-@itemx --verbose
-@opindex -v
-@opindex --verbose
+@optItem{mkdir,-v}
+@optItemx{mkdir,--verbose}
 Print a message for each created directory.  This is most useful with
 @option{--parents}.
 
-@optContext
+@optContext{mkdir}
 
 @end table
 
@@ -11428,17 +10771,15 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -m @var{mode}
-@itemx --mode=@var{mode}
-@opindex -m
-@opindex --mode
+@optItem{mkfifo,-m,@w{ }@var{mode}}
+@optItemx{mkfifo,--mode,=@var{mode}}
 @cindex modes of created FIFOs, setting
 Set the mode of created FIFOs to @var{mode}, which is symbolic as in
 @command{chmod} and uses @samp{a=rw} (read and write allowed for everyone)
 for the point of departure.  @var{mode} should specify only file
 permission bits.  @xref{File permissions}.
 
-@optContext
+@optContext{mkfifo}
 
 @end table
 
@@ -11506,16 +10847,14 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -m @var{mode}
-@itemx --mode=@var{mode}
-@opindex -m
-@opindex --mode
+@optItem{mknod,-m,@w{ }@var{mode}}
+@optItemx{mknod,--mode,=@var{mode}}
 Set the mode of created files to @var{mode}, which is symbolic as in
 @command{chmod} and uses @samp{a=rw} as the point of departure.
 @var{mode} should specify only file permission bits.
 @xref{File permissions}.
 
-@optContext
+@optContext{mknod}
 
 @end table
 
@@ -11560,64 +10899,50 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -f
-@itemx --canonicalize
-@opindex -f
-@opindex --canonicalize
+@optItem{readlink,-f}
+@optItemx{readlink,--canonicalize}
 Activate canonicalize mode.
 If any component of the file name except the last one is missing or unavailable,
 @command{readlink} produces no output and exits with a nonzero exit
 code.  A trailing slash is ignored.
 
-@item -e
-@itemx --canonicalize-existing
-@opindex -e
-@opindex --canonicalize-existing
+@optItem{readlink,-e}
+@optItemx{readlink,--canonicalize-existing}
 Activate canonicalize mode.
 If any component is missing or unavailable, @command{readlink} produces
 no output and exits with a nonzero exit code.  A trailing slash
 requires that the name resolve to a directory.
 
-@item -m
-@itemx --canonicalize-missing
-@opindex -m
-@opindex --canonicalize-missing
+@optItem{readlink,-m}
+@optItemx{readlink,--canonicalize-missing}
 Activate canonicalize mode.
 If any component is missing or unavailable, @command{readlink} treats it
 as a directory.
 
-@item -n
-@itemx --no-newline
-@opindex -n
-@opindex --no-newline
+@optItem{readlink,-n}
+@optItemx{readlink,--no-newline}
 Do not print the output delimiter, when a single @var{file} is specified.
 Print a warning if specified along with multiple @var{file}s.
 
-@item -s
-@itemx -q
-@itemx --silent
-@itemx --quiet
-@opindex -s
-@opindex -q
-@opindex --silent
-@opindex --quiet
+@optItem{readlink,-s}
+@optItemx{readlink,-q}
+@optItemx{readlink,--silent}
+@optItemx{readlink,--quiet}
 Suppress most error messages.
 
 @vindex POSIXLY_CORRECT
 This option is on by default if the @env{POSIXLY_CORRECT} environment
 variable is not set.
 
-@item -v
-@itemx --verbose
-@opindex -v
-@opindex --verbose
+@optItem{readlink,-v}
+@optItemx{readlink,--verbose}
 Report error messages.
 
 @vindex POSIXLY_CORRECT
 This option is on by default if the @env{POSIXLY_CORRECT} environment
 variable is set.
 
-@optZero
+@optZero{readlink}
 
 @end table
 
@@ -11649,15 +10974,12 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item --ignore-fail-on-non-empty
-@opindex --ignore-fail-on-non-empty
+@optItem{rmdir,--ignore-fail-on-non-empty}
 @cindex directory deletion, ignoring failures
 Ignore each failure to remove a directory that is non-empty.
 
-@item -p
-@itemx --parents
-@opindex -p
-@opindex --parents
+@optItem{rmdir,-p}
+@optItemx{rmdir,--parents}
 @cindex parent directories, removing
 Remove @var{directory}, then try to remove each component of @var{directory}.
 So, for example, @samp{rmdir -p a/b/c} is similar to @samp{rmdir a/b/c a/b a}.
@@ -11666,10 +10988,8 @@ Use the @option{--ignore-fail-on-non-empty} option to make it so such
 a failure does not evoke a diagnostic and does not cause @command{rmdir} to
 exit unsuccessfully.
 
-@item -v
-@itemx --verbose
-@opindex -v
-@opindex --verbose
+@optItem{rmdir,-v}
+@optItemx{rmdir,--verbose}
 @cindex directory deletion, reporting
 Give a diagnostic for each successful removal.
 @var{directory} is removed.
@@ -11835,27 +11155,21 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -c
-@itemx --changes
-@opindex -c
-@opindex --changes
+@optItem{chown,-c}
+@optItemx{chown,--changes}
 @cindex changed owners, verbosely describing
 Verbosely describe the action for each @var{file} whose ownership
 actually changes.
 
-@item -f
-@itemx --silent
-@itemx --quiet
-@opindex -f
-@opindex --silent
-@opindex --quiet
+@optItem{chown,-f}
+@optItemx{chown,--silent}
+@optItemx{chown,--quiet}
 @cindex error messages, omitting
 Do not print error messages about files whose ownership cannot be
 changed.
 
 @macro chownFromOption{cmd}
-@item --from=@var{old-owner}
-@opindex --from
+@optItem{\cmd\,--from,=@var{old-owner}}
 @cindex symbolic links, changing owner
 Change a @var{file}'s ownership only if it has current attributes specified
 by @var{old-owner}.  @var{old-owner} has the same form as @var{new-owner}
@@ -11889,9 +11203,8 @@ though still not perfect:
 @end macro
 @chownFromOption{chown}
 
-@macro symlinkRefOpts
-@item --dereference
-@opindex --dereference
+@macro symlinkRefOpts{cmd}
+@optItem{\cmd\,--dereference}
 @cindex symbolic links, changing owner, group
 @findex lchown
 Do not act on symbolic links themselves but rather on what they point to.
@@ -11909,53 +11222,46 @@ This mode relies on the @code{lchown} system call.
 On systems that do not provide the @code{lchown} system call,
 no diagnostic is issued, but see @option{--verbose}.
 @end macro
-@symlinkRefOpts
+@symlinkRefOpts{chown}
 
-@item --preserve-root
-@opindex --preserve-root
+@optItem{chown,--preserve-root}
 @cindex root directory, disallow recursive modification
 Fail upon any attempt to recursively change the root directory, @file{/}.
 Without @option{--recursive}, this option has no effect.
 @xref{Treating / specially}.
 
-@item --no-preserve-root
-@opindex --no-preserve-root
+@optItem{chown,--no-preserve-root}
 @cindex root directory, allow recursive modification
 Cancel the effect of any preceding @option{--preserve-root} option.
 @xref{Treating / specially}.
 
-@item --reference=@var{ref_file}
-@opindex --reference
+@optItem{chown,--reference,=@var{ref_file}}
 Change the user and group of each @var{file} to be the same as those of
 @var{ref_file}.  If @var{ref_file} is a symbolic link, do not use the
 user and group of the symbolic link, but rather those of the file it
 refers to.
 
-@item -v
-@itemx --verbose
-@opindex -v
-@opindex --verbose
+@optItem{chown,-v}
+@optItemx{chown,--verbose}
 Output a diagnostic for every file processed.
 If a symbolic link is encountered during a recursive traversal
 on a system without the @code{lchown} system call, and @option{--no-dereference}
 is in effect, then issue a diagnostic saying neither the symbolic link nor
 its referent is being changed.
 
-@item -R
-@itemx --recursive
-@opindex -R
-@opindex --recursive
+@optItem{chown,-R}
+@optItemx{chown,--recursive}
 @cindex recursively changing file ownership
 Recursively change ownership of directories and their contents.
 
-@choptH
+@choptH{chown}
 @xref{Traversing symlinks}.
 
-@choptL
+@choptL{chown}
 @warnOptDerefWithRec
 @xref{Traversing symlinks}.
 
-@choptP
+@choptP{chown}
 @choptDefault
 @xref{Traversing symlinks}.
 
@@ -12004,72 +11310,60 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -c
-@itemx --changes
-@opindex -c
-@opindex --changes
+@optItem{chgrp,-c}
+@optItemx{chgrp,--changes}
 @cindex changed files, verbosely describing
 Verbosely describe the action for each @var{file} whose group actually
 changes.
 
-@item -f
-@itemx --silent
-@itemx --quiet
-@opindex -f
-@opindex --silent
-@opindex --quiet
+@optItem{chgrp,-f}
+@optItemx{chgrp,--silent}
+@optItemx{chgrp,--quiet}
 @cindex error messages, omitting
 Do not print error messages about files whose group cannot be
 changed.
 
 @chownFromOption{chgrp}
 
-@symlinkRefOpts
+@symlinkRefOpts{chgrp}
 
-@item --preserve-root
-@opindex --preserve-root
+@optItem{chgrp,--preserve-root}
 @cindex root directory, disallow recursive modification
 Fail upon any attempt to recursively change the root directory, @file{/}.
 Without @option{--recursive}, this option has no effect.
 @xref{Treating / specially}.
 
-@item --no-preserve-root
-@opindex --no-preserve-root
+@optItem{chgrp,--no-preserve-root}
 @cindex root directory, allow recursive modification
 Cancel the effect of any preceding @option{--preserve-root} option.
 @xref{Treating / specially}.
 
-@item --reference=@var{ref_file}
-@opindex --reference
+@optItem{chgrp,--reference,=@var{ref_file}}
 Change the group of each @var{file} to be the same as that of
 @var{ref_file}.  If @var{ref_file} is a symbolic link, do not use the
 group of the symbolic link, but rather that of the file it refers to.
 
-@item -v
-@itemx --verbose
-@opindex -v
-@opindex --verbose
+@optItem{chgrp,-v}
+@optItemx{chgrp,--verbose}
 Output a diagnostic for every file processed.
 If a symbolic link is encountered during a recursive traversal
 on a system without the @code{lchown} system call, and @option{--no-dereference}
 is in effect, then issue a diagnostic saying neither the symbolic link nor
 its referent is being changed.
 
-@item -R
-@itemx --recursive
-@opindex -R
-@opindex --recursive
+@optItem{chgrp,-R}
+@optItemx{chgrp,--recursive}
 @cindex recursively changing group ownership
 Recursively change the group ownership of directories and their contents.
 
-@choptH
+@choptH{chgrp}
 @xref{Traversing symlinks}.
 
-@choptL
+@choptL{chgrp}
 @warnOptDerefWithRec
 @xref{Traversing symlinks}.
 
-@choptP
+@choptP{chgrp}
 @choptDefault
 @xref{Traversing symlinks}.
 
@@ -12138,82 +11432,67 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -c
-@itemx --changes
-@opindex -c
-@opindex --changes
+@optItem{chmod,-c}
+@optItemx{chmod,--changes}
 Verbosely describe the action for each @var{file} whose permissions
 actually change.
 
-@item --dereference
-@opindex --dereference
+@optItem{chmod,--dereference}
 @cindex symbolic links, changing mode
 Do not act on symbolic links themselves but rather on what they point to.
 This is the default for command line arguments, but not for
 symbolic links encountered when recursing.
 @warnOptDerefWithRec
 
-@item -h
-@itemx --no-dereference
-@opindex -h
-@opindex --no-dereference
+@optItem{chmod,-h}
+@optItemx{chmod,--no-dereference}
 @cindex symbolic links, changing mode
 Act on symbolic links themselves instead of what they point to.
 On systems that do not support this, no diagnostic is issued,
 but see @option{--verbose}.
 
-@item -f
-@itemx --silent
-@itemx --quiet
-@opindex -f
-@opindex --silent
-@opindex --quiet
+@optItem{chmod,-f}
+@optItemx{chmod,--silent}
+@optItemx{chmod,--quiet}
 @cindex error messages, omitting
 Do not print error messages about files whose permissions cannot be
 changed.
 
-@item --preserve-root
-@opindex --preserve-root
+@optItem{chmod,--preserve-root}
 @cindex root directory, disallow recursive modification
 Fail upon any attempt to recursively change the root directory, @file{/}.
 Without @option{--recursive}, this option has no effect.
 @xref{Treating / specially}.
 
-@item --no-preserve-root
-@opindex --no-preserve-root
+@optItem{chmod,--no-preserve-root}
 @cindex root directory, allow recursive modification
 Cancel the effect of any preceding @option{--preserve-root} option.
 @xref{Treating / specially}.
 
-@item -v
-@itemx --verbose
-@opindex -v
-@opindex --verbose
+@optItem{chmod,-v}
+@optItemx{chmod,--verbose}
 Verbosely describe the action or non-action taken for every @var{file}.
 
-@item --reference=@var{ref_file}
-@opindex --reference
+@optItem{chmod,--reference,=@var{ref_file}}
 Change the mode of each @var{file} to be the same as that of @var{ref_file}.
 @xref{File permissions}.
 If @var{ref_file} is a symbolic link, do not use the mode
 of the symbolic link, but rather that of the file it refers to.
 
-@item -R
-@itemx --recursive
-@opindex -R
-@opindex --recursive
+@optItem{chmod,-R}
+@optItemx{chmod,--recursive}
 @cindex recursively changing access permissions
 Recursively change permissions of directories and their contents.
 
-@choptH
+@choptH{chmod}
 @choptDefault
 @xref{Traversing symlinks}.
 
-@choptL
+@choptL{chmod}
 @warnOptDerefWithRec
 @xref{Traversing symlinks}.
 
-@choptP
+@choptP{chmod}
 @xref{Traversing symlinks}.
 
 @end table
@@ -12294,27 +11573,21 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -a
-@itemx --time=atime
+@optItem{touch,-a}
+@optItemx{touch,--time,=atime}
 @itemx --time=access
 @itemx --time=use
-@opindex -a
-@opindex --time
 @opindex atime@r{, changing}
 @opindex access @r{time, changing}
 @opindex use @r{time, changing}
 Change the access timestamp only.  @xref{File timestamps}.
 
-@item -c
-@itemx --no-create
-@opindex -c
-@opindex --no-create
+@optItem{touch,-c}
+@optItemx{touch,--no-create}
 Do not warn about or create files that do not exist.
 
-@item -d @var{time}
-@itemx --date=@var{time}
-@opindex -d
-@opindex --date
+@optItem{touch,-d,@w{ }@var{time}}
+@optItemx{touch,--date,=@var{time}}
 @opindex time
 Use @var{time} instead of the current time.  It can contain month names,
 time zones, @samp{am} and @samp{pm}, @samp{yesterday}, etc.  For
@@ -12325,15 +11598,12 @@ minutes east of UTC@.  @xref{Date input formats}.
 File systems that do not support high-resolution timestamps
 silently ignore any excess precision here.
 
-@item -f
-@opindex -f
+@optItem{touch,-f}
 @cindex BSD @command{touch} compatibility
 Ignored; for compatibility with BSD versions of @command{touch}.
 
-@item -h
-@itemx --no-dereference
-@opindex -h
-@opindex --no-dereference
+@optItem{touch,-h}
+@optItemx{touch,--no-dereference}
 @cindex symbolic links, changing time
 @findex lutimes
 Attempt to change the timestamps of a symbolic link, rather than what
@@ -12348,19 +11618,16 @@ long enough to be observable.  When coupled with option @option{-r}, a
 reference timestamp is taken from a symbolic link rather than the file
 it refers to.
 
-@item -m
+@optItem{touch,-m}
 @itemx --time=mtime
 @itemx --time=modify
-@opindex -m
 @opindex --time
 @opindex mtime@r{, changing}
 @opindex modify @r{time, changing}
 Change the modification timestamp only.
 
-@item -r @var{file}
-@itemx --reference=@var{file}
-@opindex -r
-@opindex --reference
+@optItem{touch,-r,@w{ }@var{file}}
+@optItemx{touch,--reference,=@var{file}}
 Use the times of the reference @var{file} instead of the current time.
 If this option is combined with the @option{--date=@var{time}}
 (@option{-d @var{time}}) option, the reference @var{file}'s time is
@@ -12370,7 +11637,7 @@ equal to five seconds before the corresponding timestamp for @file{foo}.
 If @var{file} is a symbolic link, the reference timestamp is taken
 from the target of the symlink, unless @option{-h} was also in effect.
 
-@item -t [[@var{cc}]@var{yy}]@var{mmddhhmm}[.@var{ss}]
+@optItem{touch,-t,@w{ }[[@var{cc}]@var{yy}]@var{mmddhhmm}[.@var{ss}]}
 @cindex leap seconds
 Use the argument (optional four-digit or two-digit years, months,
 days, hours, minutes, optional seconds) instead of the current time.
@@ -12467,10 +11734,8 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -a
-@itemx --all
-@opindex -a
-@opindex --all
+@optItem{df,-a}
+@optItemx{df,--all}
 @cindex ignore file systems
 Include in the listing dummy, duplicate, or inaccessible file systems, which
 are omitted by default.  Dummy file systems are typically special purpose
@@ -12481,55 +11746,44 @@ Inaccessible file systems are those which are mounted but subsequently
 over-mounted by another file system at that point, or otherwise inaccessible
 due to permissions of the mount point etc.
 
-@item -B @var{size}
-@itemx --block-size=@var{size}
-@opindex -B
-@opindex --block-size
+@optItem{df,-B,@w{ }@var{size}}
+@optItemx{df,--block-size,=@var{size}}
 @cindex file system sizes
 Scale sizes by @var{size} before printing them (@pxref{Block size}).
 For example, @option{-BG} prints sizes in units of 1,073,741,824 bytes.
 
-@optHumanReadable
+@optHumanReadable{df}
 
-@item -H
-@opindex -H
+@optItem{df,-H}
 Equivalent to @option{--si}.
 
-@item -i
-@itemx --inodes
-@opindex -i
-@opindex --inodes
+@optItem{df,-i}
+@optItemx{df,--inodes}
 @cindex inode usage
 List inode usage information instead of block usage.  An inode (short
 for index node) contains information about a file such as its owner,
 permissions, timestamps, and location on the file system.
 
-@item -k
-@opindex -k
+@optItem{df,-k}
 @cindex kibibytes for file system sizes
 Print sizes in 1024-byte blocks, overriding the default block size
 (@pxref{Block size}).
 This option is equivalent to @option{--block-size=1K}.
 
-@item -l
-@itemx --local
-@opindex -l
-@opindex --local
+@optItem{df,-l}
+@optItemx{df,--local}
 @cindex file system types, limiting output to certain
 Limit the listing to local file systems.  By default, remote file systems
 are also listed.
 
-@item --no-sync
-@opindex --no-sync
+@optItem{df,--no-sync}
 @cindex file system space, retrieving old data more quickly
 Do not invoke the @code{sync} system call before getting any usage data.
 This may make @command{df} run significantly faster on systems with many
 file systems, but on some systems (notably Solaris) the results may be slightly
 out of date.  This is the default.
 
-@item --output
-@itemx --output[=@var{field_list}]
-@opindex --output
+@optItem{df,--output,[=@var{field_list}]}
 Use the output format defined by @var{field_list}, or print all fields if
 @var{field_list} is omitted.  In the latter case, the order of the columns
 conforms to the order of the field descriptions below.
@@ -12590,10 +11844,8 @@ df --o
 @end example
 
 
-@item -P
-@itemx --portability
-@opindex -P
-@opindex --portability
+@optItem{df,-P}
+@optItemx{df,--portability}
 @cindex one-line output format
 @cindex POSIX output format
 @cindex portable output format
@@ -12619,18 +11871,16 @@ variables.  However, the default block size is still affected by
 otherwise.  @xref{Block size}.
 @end enumerate
 
-@optSi
+@optSi{df}
 
-@item --sync
-@opindex --sync
+@optItem{df,--sync}
 @cindex file system space, retrieving current data more slowly
 Invoke the @code{sync} system call before getting any usage data.  On
 some systems (notably Solaris), doing this yields more up to date results,
 but in general this option makes @command{df} much slower, especially when
 there are many or very busy file systems.
 
-@item --total
-@opindex --total
+@optItem{df,--total}
 @cindex grand total of file system size, usage and available space
 Print a grand total of all arguments after all arguments have
 been processed.  This can be used to find out the total size, usage
@@ -12644,19 +11894,15 @@ If there is no @var{source} column (see @option{--output}), then
 @command{df} prints @samp{total} into the @var{target} column,
 if present.
 
-@item -t @var{fstype}
-@itemx --type=@var{fstype}
-@opindex -t
-@opindex --type
+@optItem{df,-t,@w{ }@var{fstype}}
+@optItemx{df,--type,=@var{fstype}}
 @cindex file system types, limiting output to certain
 Limit the listing to file systems of type @var{fstype}.  Multiple
 file system types can be specified by giving multiple @option{-t} options.
 By default, nothing is omitted.
 
-@item -T
-@itemx --print-type
-@opindex -T
-@opindex --print-type
+@optItem{df,-T}
+@optItemx{df,--print-type}
 @cindex file system types, printing
 Print each file system's type.  The types printed here are the same ones
 you can include or exclude with @option{-t} and @option{-x}.  The particular
@@ -12702,15 +11948,13 @@ File systems used by MS-Windows / MS-DOS.
 
 @end table
 
-@item -x @var{fstype}
-@itemx --exclude-type=@var{fstype}
-@opindex -x
-@opindex --exclude-type
+@optItem{df,-x,@w{ }@var{fstype}}
+@optItemx{df,--exclude-type,=@var{fstype}}
 Limit the listing to file systems not of type @var{fstype}.
 Multiple file system types can be eliminated by giving multiple
 @option{-x} options.  By default, no file system types are omitted.
 
-@item -v
+@optItem{df,-v}
 Ignored; for compatibility with System V versions of @command{df}.
 
 @end table
@@ -12759,18 +12003,14 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@optNull
+@optNull{du}
 
-@item -a
-@itemx --all
-@opindex -a
-@opindex --all
+@optItem{du,-a}
+@optItemx{du,--all}
 Show counts for all files, not just directories.
 
-@item -A
-@itemx --apparent-size
-@opindex -A
-@opindex --apparent-size
+@optItem{du,-A}
+@optItemx{du,--apparent-size}
 Print apparent sizes, rather than file system usage.  The apparent size of a
 file is the number of bytes reported by @code{wc -c} on regular files,
 or more generally, @code{ls -l --block-size=1} or @code{stat --format=%s}.
@@ -12791,42 +12031,32 @@ file systems, it actually uses almost no space.
 Apparent sizes are meaningful only for regular files and symbolic links.
 Other file types do not contribute to apparent size.
 
-@item -B @var{size}
-@itemx --block-size=@var{size}
-@opindex -B
-@opindex --block-size
+@optItem{du,-B,@w{ }@var{size}}
+@optItemx{du,--block-size,=@var{size}}
 @cindex file sizes
 Scale sizes by @var{size} before printing them (@pxref{Block size}).
 For example, @option{-BG} prints sizes in units of 1,073,741,824 bytes.
 
-@item -b
-@itemx --bytes
-@opindex -b
-@opindex --bytes
+@optItem{du,-b}
+@optItemx{du,--bytes}
 Equivalent to @code{--apparent-size --block-size=1}.
 
-@item -c
-@itemx --total
-@opindex -c
-@opindex --total
+@optItem{du,-c}
+@optItemx{du,--total}
 @cindex grand total of file system space
 Print a grand total of all arguments after all arguments have
 been processed.  This can be used to find out the total file system usage of
 a given set of files or directories.
 
-@item -D
-@itemx --dereference-args
-@opindex -D
-@opindex --dereference-args
+@optItem{du,-D}
+@optItemx{du,--dereference-args}
 Dereference symbolic links that are command line arguments.
 Does not affect other symbolic links.  This is helpful for finding
 out the file system usage of directories, such as @file{/usr/tmp}, which
 are often symbolic links.
 
-@item -d @var{depth}
-@itemx --max-depth=@var{depth}
-@opindex -d @var{depth}
-@opindex --max-depth=@var{depth}
+@optItem{du,-d,@w{ }@var{depth}}
+@optItemx{du,--max-depth,=@var{depth}}
 @cindex limiting output of @command{du}
 Show the total for each directory (and file if @option{--all}) that is at
 most MAX_DEPTH levels down from the root of the hierarchy.  The root
@@ -12835,14 +12065,12 @@ is at level 0, so @code{du --max-depth=0} is equivalent to @code{du -s}.
 @c --files0-from=FILE
 @filesZeroFromOption{du,, with the @option{--total} (@option{-c}) option}
 
-@item -H
-@opindex -H
+@optItem{du,-H}
 Equivalent to @option{--dereference-args} (@option{-D}).
 
-@optHumanReadable
+@optHumanReadable{du}
 
-@item --inodes
-@opindex --inodes
+@optItem{du,--inodes}
 @cindex inode usage, dereferencing in @command{du}
 List inode usage information instead of block usage.
 This option is useful for finding directories which contain many files, and
@@ -12853,67 +12081,53 @@ It can well be combined with the options @option{-a}, @option{-c},
 @option{-x}; however, passing other options regarding the block size, for
 example @option{-b}, @option{-m} and @option{--apparent-size}, is ignored.
 
-@item -k
-@opindex -k
+@optItem{du,-k}
 @cindex kibibytes for file sizes
 Print sizes in 1024-byte blocks, overriding the default block size
 (@pxref{Block size}).
 This option is equivalent to @option{--block-size=1K}.
 
-@item -L
-@itemx --dereference
-@opindex -L
-@opindex --dereference
+@optItem{du,-L}
+@optItemx{du,--dereference}
 @cindex symbolic links, dereferencing in @command{du}
 Dereference symbolic links (show the file system space used by the file
 or directory that the link points to instead of the space used by
 the link).
 
-@item -l
-@itemx --count-links
-@opindex -l
-@opindex --count-links
+@optItem{du,-l}
+@optItemx{du,--count-links}
 @cindex hard links, counting in @command{du}
 Count the size of all files, even if they have appeared already (as a
 hard link).
 
-@item -m
-@opindex -m
+@optItem{du,-m}
 @cindex mebibytes for file sizes
 Print sizes in 1,048,576-byte blocks, overriding the default block size
 (@pxref{Block size}).
 This option is equivalent to @option{--block-size=1M}.
 
-@item -P
-@itemx --no-dereference
-@opindex -P
-@opindex --no-dereference
+@optItem{du,-P}
+@optItemx{du,--no-dereference}
 @cindex symbolic links, dereferencing in @command{du}
 For each symbolic link encountered by @command{du},
 consider the file system space used by the symbolic link itself.
 
-@item -S
-@itemx --separate-dirs
-@opindex -S
-@opindex --separate-dirs
+@optItem{du,-S}
+@optItemx{du,--separate-dirs}
 Normally, in the output of @command{du} (when not using @option{--summarize}),
 the size listed next to a directory name, @var{d}, represents the sum
 of sizes of all entries beneath @var{d} as well as the size of @var{d} itself.
 With @option{--separate-dirs}, the size reported for a directory name,
 @var{d}, will exclude the size of any subdirectories.
 
-@optSi
+@optSi{du}
 
-@item -s
-@itemx --summarize
-@opindex -s
-@opindex --summarize
+@optItem{du,-s}
+@optItemx{du,--summarize}
 Display only a total for each argument.
 
-@item -t @var{size}
-@itemx --threshold=@var{size}
-@opindex -t
-@opindex --threshold
+@optItem{du,-t,@w{ }@var{size}}
+@optItemx{du,--threshold,=@var{size}}
 Exclude entries based on a given @var{size}.  The @var{size} refers to used
 blocks in normal mode (@pxref{Block size}), or inodes count in conjunction
 with the @option{--inodes} option.
@@ -12959,8 +12173,7 @@ du --inodes -x --threshold=20000 /
 @end example
 
 
-@item --time
-@opindex --time
+@optItem{du,--time}
 @cindex last modified dates, displaying in @command{du}
 Show the most recent modification timestamp (mtime) of any file in the
 directory, or any of its subdirectories.  @xref{File timestamps}.
@@ -12983,8 +12196,7 @@ the directory, or any of its subdirectories.  @xref{File timestamps}.
 Show the most recent access timestamp (atime) of any file in the
 directory, or any of its subdirectories.  @xref{File timestamps}.
 
-@item --time-style=@var{style}
-@opindex --time-style
+@optItem{du,--time-style,=@var{style}}
 @cindex time style
 List timestamps in style @var{style}.  This option has an effect only if
 the @option{--time} option is also specified.  The @var{style} should
@@ -13026,26 +12238,21 @@ the newline and any later characters are ignored; if @env{TIME_STYLE}
 begins with @samp{posix-} the @samp{posix-} is ignored; and if
 @env{TIME_STYLE} is @samp{locale} it is ignored.
 
-@item -X @var{file}
-@itemx --exclude-from=@var{file}
-@opindex -X @var{file}
-@opindex --exclude-from=@var{file}
+@optItem{du,-X,@w{ }@var{file}}
+@optItemx{du,--exclude-from,=@var{file}}
 @cindex excluding files from @command{du}
 Like @option{--exclude}, except take the patterns to exclude from @var{file},
 one per line.  If @var{file} is @samp{-}, take the patterns from standard
 input.
 
-@item --exclude=@var{pattern}
-@opindex --exclude=@var{pattern}
+@optItem{du,--exclude,=@var{pattern}}
 @cindex excluding files from @command{du}
 When recursing, skip subdirectories or files matching @var{pattern}.
 For example, @code{du --exclude='*.o'} excludes files whose names
 end in @samp{.o}.
 
-@item -x
-@itemx --one-file-system
-@opindex -x
-@opindex --one-file-system
+@optItem{du,-x}
+@optItemx{du,--one-file-system}
 @cindex one file system, restricting @command{du} to
 Skip directories that are on different file systems from the one that
 the argument being processed is on.
@@ -13112,27 +12319,22 @@ also give information about the files the links point to.
 
 @table @samp
 
-@item -L
-@itemx --dereference
-@opindex -L
-@opindex --dereference
+@optItem{stat,-L}
+@optItemx{stat,--dereference}
 @cindex symbolic links, dereferencing in @command{stat}
 Change how @command{stat} treats symbolic links.
 With this option, @command{stat} acts on the file referenced
 by each symbolic link argument.
 Without it, @command{stat} acts on any symbolic link argument directly.
 
-@item -f
-@itemx --file-system
-@opindex -f
-@opindex --file-system
+@optItem{stat,-f}
+@optItemx{stat,--file-system}
 @cindex file systems
 Report information about the file systems where the given files are located
 instead of information about the files themselves.
 This option implies the @option{-L} option.
 
-@item --cached=@var{mode}
-@opindex --cached=@var{mode}
+@optItem{stat,--cached,=@var{mode}}
 @cindex attribute caching
 Control how attributes are read from the file system;
 if supported by the system.  This allows one to
@@ -13153,10 +12355,8 @@ Leave the caching behavior to the underlying file system.
 
 @end table
 
-@item -c
-@itemx --format=@var{format}
-@opindex -c
-@opindex --format=@var{format}
+@optItem{stat,-c}
+@optItemx{stat,--format,=@var{format}}
 @cindex output format
 Use @var{format} rather than the default format.
 @var{format} is automatically newline-terminated, so
@@ -13168,8 +12368,7 @@ $ stat --format=%d:%i / /usr
 2057:2
 @end example
 
-@item --printf=@var{format}
-@opindex --printf=@var{format}
+@optItem{stat,--printf,=@var{format}}
 @cindex output format
 Use @var{format} rather than the default format.
 Like @option{--format}, but interpret backslash escapes,
@@ -13183,10 +12382,8 @@ $ stat --printf='%d:%i\n' / /usr
 2057:2
 @end example
 
-@item -t
-@itemx --terse
-@opindex -t
-@opindex --terse
+@optItem{stat,-t}
+@optItemx{stat,--terse}
 @cindex terse output
 Print the information in terse form, suitable for parsing by other programs.
 
@@ -13370,15 +12567,13 @@ synchronization method with the following options.  Also see
 @ref{Common options}.
 
 @table @samp
-@item -d
-@itemx --data
-@opindex --data
+@optItem{sync,-d}
+@optItemx{sync,--data}
 Use fdatasync(2) to sync only the data for the file,
 and any metadata required to maintain file system consistency.
 
-@item -f
-@itemx --file-system
-@opindex --file-system
+@optItem{sync,-f}
+@optItemx{sync,--file-system}
 Synchronize all the I/O waiting for the file systems that contain the file,
 using the syscall syncfs(2).  You would usually @emph{not} specify
 this option if passing a device node like @samp{/dev/sda} for example,
@@ -13418,28 +12613,20 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -c
-@itemx --no-create
-@opindex -c
-@opindex --no-create
+@optItem{truncate,-c}
+@optItemx{truncate,--no-create}
 Do not create files that do not exist.
 
-@item -o
-@itemx --io-blocks
-@opindex -o
-@opindex --io-blocks
+@optItem{truncate,-o}
+@optItemx{truncate,--io-blocks}
 Treat @var{size} as number of I/O blocks of the @var{file} rather than bytes.
 
-@item -r @var{rfile}
-@itemx --reference=@var{rfile}
-@opindex -r
-@opindex --reference
+@optItem{truncate,-r,@w{ }@var{rfile}}
+@optItemx{truncate,--reference,=@var{rfile}}
 Base the size of each @var{file} on the size of @var{rfile}.
 
-@item -s @var{size}
-@itemx --size=@var{size}
-@opindex -s
-@opindex --size
+@optItem{truncate,-s,@w{ }@var{size}}
+@optItemx{truncate,--size,=@var{size}}
 Set or adjust the size of each @var{file} according to @var{size}.
 @var{size} is in bytes unless @option{--io-blocks} is specified.
 @multiplierSuffixesNoBlocks{size}
@@ -13506,12 +12693,10 @@ Options must precede operands, and the normally-special argument
 @var{string}.
 
 @table @samp
-@item -n
-@opindex -n
+@optItem{echo,-n}
 Do not output the trailing newline.
 
-@item -e
-@opindex -e
+@optItem{echo,-e}
 @cindex backslash escapes
 Enable interpretation of the following backslash-escaped characters in
 each @var{string}:
@@ -13550,8 +12735,7 @@ the eight-bit value that is the hexadecimal number @var{hh}
 (one or two hexadecimal digits)
 @end table
 
-@item -E
-@opindex -E
+@optItem{echo,-E}
 @cindex backslash escapes
 Disable interpretation of backslash escapes in each @var{string}.
 This is the default.  If @option{-e} and @option{-E} are both
@@ -13930,47 +13114,38 @@ but not all files are the same!)
 
 @table @samp
 
-@item -b @var{file}
-@opindex -b
+@optItem{test,-b,@w{ }@var{file}}
 @cindex block special check
 True if @var{file} exists and is a block special device.
 
-@item -c @var{file}
-@opindex -c
+@optItem{test,-c,@w{ }@var{file}}
 @cindex character special check
 True if @var{file} exists and is a character special device.
 
-@item -d @var{file}
-@opindex -d
+@optItem{test,-d,@w{ }@var{file}}
 @cindex directory check
 True if @var{file} exists and is a directory.
 
-@item -f @var{file}
-@opindex -f
+@optItem{test,-f,@w{ }@var{file}}
 @cindex regular file check
 True if @var{file} exists and is a regular file.
 
-@item -h @var{file}
-@itemx -L @var{file}
-@opindex -L
-@opindex -h
+@optItem{test,-h,@w{ }@var{file}}
+@optItemx{test,-L,@w{ }@var{file}}
 @cindex symbolic link check
 True if @var{file} exists and is a symbolic link.
 Unlike all other file-related tests, this test does not dereference
 @var{file} if it is a symbolic link.
 
-@item -p @var{file}
-@opindex -p
+@optItem{test,-p,@w{ }@var{file}}
 @cindex named pipe check
 True if @var{file} exists and is a named pipe.
 
-@item -S @var{file}
-@opindex -S
+@optItem{test,-S,@w{ }@var{file}}
 @cindex socket check
 True if @var{file} exists and is a socket.
 
-@item -t @var{fd}
-@opindex -t
+@optItem{test,-t,@w{ }@var{fd}}
 @cindex terminal check
 True if @var{fd} is a file descriptor that is associated with a
 terminal.
@@ -13988,44 +13163,36 @@ These options test for particular access permissions.
 
 @table @samp
 
-@item -g @var{file}
-@opindex -g
+@optItem{test,-g,@w{ }@var{file}}
 @cindex set-group-ID check
 True if @var{file} exists and has its set-group-ID bit set.
 
-@item -k @var{file}
-@opindex -k
+@optItem{test,-k,@w{ }@var{file}}
 @cindex sticky bit check
 True if @var{file} exists and has its @dfn{sticky} bit set.
 
-@item -r @var{file}
-@opindex -r
+@optItem{test,-r,@w{ }@var{file}}
 @cindex readable file check
 True if @var{file} exists and the user has read access.
 
-@item -u @var{file}
-@opindex -u
+@optItem{test,-u,@w{ }@var{file}}
 @cindex set-user-ID check
 True if @var{file} exists and has its set-user-ID bit set.
 
-@item -w @var{file}
-@opindex -w
+@optItem{test,-w,@w{ }@var{file}}
 @cindex writable file check
 True if @var{file} exists and the user has write access.
 
-@item -x @var{file}
-@opindex -x
+@optItem{test,-x,@w{ }@var{file}}
 @cindex executable file check
 True if @var{file} exists and the user has execute access
 (or search permission, if it is a directory).
 
-@item -O @var{file}
-@opindex -O
+@optItem{test,-O,@w{ }@var{file}}
 @cindex owned by effective user ID check
 True if @var{file} exists and is owned by the current effective user ID.
 
-@item -G @var{file}
-@opindex -G
+@optItem{test,-G,@w{ }@var{file}}
 @cindex owned by effective group ID check
 True if @var{file} exists and is owned by the current effective group ID.
 
@@ -14040,28 +13207,29 @@ These options test other file characteristics.
 
 @table @samp
 
-@item -e @var{file}
-@opindex -e
+@optItem{test,-e,@w{ }@var{file}}
 @cindex existence-of-file check
 True if @var{file} exists.
 
-@item -s @var{file}
-@opindex -s
+@optItem{test,-s,@w{ }@var{file}}
 @cindex nonempty file check
 True if @var{file} exists and has a size greater than zero.
 
+@optAnchor{test,-nt}
 @item @var{file1} -nt @var{file2}
 @opindex -nt
 @cindex newer-than file check
 True if @var{file1} is newer (according to modification date) than
 @var{file2}, or if @var{file1} exists and @var{file2} does not.
 
+@optAnchor{test,-ot}
 @item @var{file1} -ot @var{file2}
 @opindex -ot
 @cindex older-than file check
 True if @var{file1} is older (according to modification date) than
 @var{file2}, or if @var{file2} exists and @var{file1} does not.
 
+@optAnchor{test,-ef}
 @item @var{file1} -ef @var{file2}
 @opindex -ef
 @cindex same file check
@@ -14069,8 +13237,7 @@ True if @var{file1} is older (according to modification date) than
 True if @var{file1} and @var{file2} have the same device and inode
 numbers, i.e., if they are hard links to each other.
 
-@item -N @var{file}
-@opindex -N
+@optItem{test,-N,@w{ }@var{file}}
 @cindex mtime-greater-atime file check
 True if @var{file} exists and has been modified (mtime) since it was
 last read (atime).
@@ -14095,14 +13262,12 @@ The quotes here prevent the wrong arguments from being passed to
 
 @table @samp
 
-@item -z @var{string}
-@opindex -z
+@optItem{test,-z,@w{ }@var{string}}
 @cindex zero-length string check
 True if the length of @var{string} is zero.
 
-@item -n @var{string}
+@optItem{test,-n,@w{ }@var{string}}
 @itemx @var{string}
-@opindex -n
 @cindex nonzero-length string check
 True if the length of @var{string} is nonzero.
 
@@ -14148,6 +13313,12 @@ which evaluates to the length of @var{string}.
 
 @table @samp
 
+@optAnchor{test,-eq}
+@optAnchor{test,-ne}
+@optAnchor{test,-lt}
+@optAnchor{test,-le}
+@optAnchor{test,-gt}
+@optAnchor{test,-ge}
 @item @var{arg1} -eq @var{arg2}
 @itemx @var{arg1} -ne @var{arg2}
 @itemx @var{arg1} -lt @var{arg2}
@@ -14216,6 +13387,7 @@ The @samp{!} should be specified to the left
 of a binary expression, I.e., @samp{! 1 -gt 2}
 rather than @samp{1 ! -gt 2}.
 
+@optAnchor{test,-a}
 @item @var{expr1} -a @var{expr2}
 @opindex -a
 @cindex logical and operator
@@ -14224,6 +13396,7 @@ True if both @var{expr1} and @var{expr2} are true.
 @samp{-a} is left associative,
 and has a higher precedence than @samp{-o}.
 
+@optAnchor{test,-o}
 @item @var{expr1} -o @var{expr2}
 @opindex -o
 @cindex logical or operator
@@ -14544,23 +13717,17 @@ conforms to POSIX and treats @samp{-} as a file name.
 The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
-@item -a
-@itemx --append
-@opindex -a
-@opindex --append
+@optItem{tee,-a}
+@optItemx{tee,--append}
 Append standard input to the given files rather than overwriting
 them.
 
-@item -i
-@itemx --ignore-interrupts
-@opindex -i
-@opindex --ignore-interrupts
+@optItem{tee,-i}
+@optItemx{tee,--ignore-interrupts}
 Ignore interrupt signals.
 
-@item -p
-@itemx --output-error[=@var{mode}]
-@opindex -p
-@opindex --output-error
+@optItem{tee,-p}
+@optItemx{tee,--output-error,[=@var{mode}]}
 Adjust the behavior with errors on the outputs.
 In summary @option{-p} allows @command{tee} to operate in a more
 appropriate manner with pipes, and to continue to process data
@@ -14783,22 +13950,18 @@ Options must precede operands.
 
 @table @samp
 
-@item -a
-@itemx --multiple
-@opindex -a
-@opindex --multiple
+@optItem{basename,-a}
+@optItemx{basename,--multiple}
 Support more than one argument.  Treat every argument as a @var{name}.
 With this, an optional @var{suffix} must be specified using the
 @option{-s} option.
 
-@item -s @var{suffix}
-@itemx --suffix=@var{suffix}
-@opindex -s
-@opindex --suffix
+@optItem{basename,-s,@w{ }@var{suffix}}
+@optItemx{basename,--suffix,=@var{suffix}}
 Remove a trailing @var{suffix}.
 This option implies the @option{-a} option.
 
-@optZero
+@optZero{basename}
 
 @end table
 
@@ -14853,7 +14016,7 @@ The program accepts the following option.  Also see @ref{Common options}.
 
 @table @samp
 
-@optZero
+@optZero{dirname}
 
 @end table
 
@@ -14911,8 +14074,7 @@ Options must precede operands.
 
 @table @samp
 
-@item -p
-@opindex -p
+@optItem{pathchk,-p}
 Instead of performing checks based on the underlying file system,
 print an error message if any of these conditions is true:
 
@@ -14930,13 +14092,11 @@ The length of a file name or one of its components exceeds the
 POSIX minimum limits for portability.
 @end enumerate
 
-@item -P
-@opindex -P
+@optItem{pathchk,-P}
 Print an error message if a file name is empty, or if it contains a component
 that begins with @samp{-}.
 
-@item --portability
-@opindex --portability
+@optItem{pathchk,--portability}
 Print an error message if a file name is not portable to all POSIX
 hosts.  This option is equivalent to @samp{-p -P}.
 
@@ -15056,36 +14216,28 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -d
-@itemx --directory
-@opindex -d
-@opindex --directory
+@optItem{mktemp,-d}
+@optItemx{mktemp,--directory}
 Create a directory rather than a file.  The directory will have read,
 write, and search permissions for the current user, but no permissions
 for the group or others; these permissions are reduced if the current
 umask is more restrictive.
 
-@item -q
-@itemx --quiet
-@opindex -q
-@opindex --quiet
+@optItem{mktemp,-q}
+@optItemx{mktemp,--quiet}
 Suppress diagnostics about failure to create a file or directory.  The
 exit status will still reflect whether a file was created.
 
-@item -u
-@itemx --dry-run
-@opindex -u
-@opindex --dry-run
+@optItem{mktemp,-u}
+@optItemx{mktemp,--dry-run}
 Generate a temporary name that does not name an existing file, without
 changing the file system contents.  Using the output of this command
 to create a new file is inherently unsafe, as there is a window of
 time between generating the name and using it where another process
 can create an object by the same name.
 
-@item -p @var{dir}
-@itemx --tmpdir[=@var{dir}]
-@opindex -p
-@opindex --tmpdir
+@optItem{mktemp,-p,@w{ }@var{dir}}
+@optItemx{mktemp,--tmpdir,[=@var{dir}]}
 Treat @var{template} relative to the directory @var{dir}.  If
 @var{dir} is not specified (only possible with the long option
 @option{--tmpdir}) or is the empty string, use the value of
@@ -15094,8 +14246,7 @@ specified, @var{template} must not be absolute.  However,
 @var{template} can still contain slashes, although intermediate
 directories must already exist.
 
-@item --suffix=@var{suffix}
-@opindex --suffix
+@optItem{mktemp,--suffix,=@var{suffix}}
 Append @var{suffix} to the @var{template}.  @var{suffix} must not
 contain slash.  If @option{--suffix} is specified, @var{template} must
 end in @samp{X}; if it is not specified, then an appropriate
@@ -15104,8 +14255,7 @@ end in @samp{X}; if it is not specified, then an appropriate
 @var{template} and for the creation of a @var{suffix} that starts with
 @samp{X}.
 
-@item -t
-@opindex -t
+@optItem{mktemp,-t}
 Treat @var{template} as a single file relative to the value of
 @env{TMPDIR} if available, or to the directory specified by
 @option{-p}, otherwise to @samp{/tmp}.  @var{template} must not
@@ -15159,60 +14309,45 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -E
-@itemx --canonicalize
-@opindex -E
-@opindex --canonicalize
-
+@optItem{realpath,-E}
+@optItemx{realpath,--canonicalize}
 Do not fail merely because the named file does not exist.
 Although this is the default behavior of GNU @code{realpath},
 POSIX does not require this default, so portable applications should
 use an explicit @option{-E}.
 
-@item -e
-@itemx --canonicalize-existing
-@opindex -e
-@opindex --canonicalize-existing
+@optItem{realpath,-e}
+@optItemx{realpath,--canonicalize-existing}
 Fail if the named file does not exist.
 A trailing slash requires that the name resolve to a directory.
 
-@item -m
-@itemx --canonicalize-missing
-@opindex -m
-@opindex --canonicalize-missing
+@optItem{realpath,-m}
+@optItemx{realpath,--canonicalize-missing}
 If any component of a specified file name is missing or unavailable,
 treat it as a directory.
 
-@item -L
-@itemx --logical
-@opindex -L
-@opindex --logical
+@optItem{realpath,-L}
+@optItemx{realpath,--logical}
 Symbolic links are resolved in the specified file names,
 but they are resolved after any subsequent @samp{..} components are processed.
 
-@item -P
-@itemx --physical
-@opindex -P
-@opindex --physical
+@optItem{realpath,-P}
+@optItemx{realpath,--physical}
 Symbolic links are resolved in the specified file names,
 and they are resolved before any subsequent @samp{..} components are processed.
 This is the default mode of operation.
 
-@item -q
-@itemx --quiet
-@opindex -q
-@opindex --quiet
+@optItem{realpath,-q}
+@optItemx{realpath,--quiet}
 Suppress diagnostic messages for specified file names.
 
-@item --relative-to=@var{dir}
-@opindex --relative-to
+@optItem{realpath,--relative-to,=@var{dir}}
 @cindex relpath
 Print the resolved file names relative to the specified directory.
 This option honors the @option{-m} and @option{-e} options
 pertaining to file existence.
 
-@item --relative-base=@var{dir}
-@opindex --relative-base
+@optItem{realpath,--relative-base,=@var{dir}}
 Print the resolved file names as relative @emph{if} the files
 are descendants of @var{dir}.
 Otherwise, print the resolved file names as absolute.
@@ -15221,18 +14356,15 @@ pertaining to file existence.
 For details about combining @option{--relative-to} and @option{--relative-base},
 @pxref{Realpath usage examples}.
 
-@item -s
-@itemx --strip
-@itemx --no-symlinks
-@opindex -s
-@opindex --strip
-@opindex --no-symlinks
+@optItem{realpath,-s}
+@optItemx{realpath,--strip}
+@optItemx{realpath,--no-symlinks}
 Do not resolve symbolic links.  Only resolve references to
 @samp{/./}, @samp{/../} and remove extra @samp{/} characters.
 When combined with the @option{-m} option, realpath operates
 only on the file name, and does not touch any actual file.
 
-@optZero
+@optZero{realpath}
 
 @end table
 
@@ -15355,19 +14487,15 @@ pwd [@var{option}]@dots{}
 The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
-@item -L
-@itemx --logical
-@opindex -L
-@opindex --logical
+@optItem{pwd,-L}
+@optItemx{pwd,--logical}
 If the contents of the environment variable @env{PWD} provide an
 absolute name of the current directory with no @samp{.} or @samp{..}
 components, but possibly with symbolic links, then output those
 contents.  Otherwise, fall back to default @option{-P} handling.
 
-@item -P
-@itemx --physical
-@opindex -P
-@opindex --physical
+@optItem{pwd,-P}
+@optItemx{pwd,--physical}
 Print a fully resolved name for the current directory.  That is, all
 components of the printed name will be actual directory names -- none
 will be symbolic links.
@@ -15413,17 +14541,13 @@ the terminal line operation, as described below.
 The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
-@item -a
-@itemx --all
-@opindex -a
-@opindex --all
+@optItem{stty,-a}
+@optItemx{stty,--all}
 Print all current settings in human-readable form.  This option may not
 be used in combination with any line settings.
 
-@item -F @var{device}
-@itemx --file=@var{device}
-@opindex -F
-@opindex --file
+@optItem{stty,-F,@w{ }@var{device}}
+@optItemx{stty,--file,=@var{device}}
 Set the line opened by the file name specified in @var{device} instead of
 the tty line connected to standard input.  This option is necessary
 because opening a POSIX tty requires use of the
@@ -15432,10 +14556,8 @@ until the carrier detect line is high if
 the @code{clocal} flag is not set.  Hence, it is not always possible
 to allow the shell to open the device in the traditional manner.
 
-@item -g
-@itemx --save
-@opindex -g
-@opindex --save
+@optItem{stty,-g}
+@optItemx{stty,--save}
 @cindex machine-readable @command{stty} output
 Print all current settings in a form that can be used as an argument to
 another @command{stty} command to restore the current settings.  This option
@@ -16132,7 +15254,7 @@ The program accepts the following option.  Also see @ref{Common options}.
 
 @table @samp
 
-@optNull
+@optNull{printenv}
 
 @end table
 
@@ -16165,12 +15287,9 @@ The program accepts the following option.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -s
-@itemx --silent
-@itemx --quiet
-@opindex -s
-@opindex --silent
-@opindex --quiet
+@optItem{printenv,-s}
+@optItemx{printenv,--silent}
+@optItemx{printenv,--quiet}
 Print nothing; only return an exit status.
 
 @end table
@@ -16241,42 +15360,30 @@ The options cause @command{id} to print only part of the above information.
 Also see @ref{Common options}.
 
 @table @samp
-@item -g
-@itemx --group
-@opindex -g
-@opindex --group
+@optItem{id,-g}
+@optItemx{id,--group}
 Print only the group ID.
 
-@item -G
-@itemx --groups
-@opindex -G
-@opindex --groups
+@optItem{id,-G}
+@optItemx{id,--groups}
 Print only the group ID and the supplementary groups.
 
-@item -n
-@itemx --name
-@opindex -n
-@opindex --name
+@optItem{id,-n}
+@optItemx{id,--name}
 Print the user or group name instead of the ID number.  Requires
 @option{-u}, @option{-g}, or @option{-G}.
 
-@item -r
-@itemx --real
-@opindex -r
-@opindex --real
+@optItem{id,-r}
+@optItemx{id,--real}
 Print the real, instead of effective, user or group ID@.  Requires
 @option{-u}, @option{-g}, or @option{-G}.
 
-@item -u
-@itemx --user
-@opindex -u
-@opindex --user
+@optItem{id,-u}
+@optItemx{id,--user}
 Print only the user ID.
 
-@item -Z
-@itemx --context
-@opindex -Z
-@opindex --context
+@optItem{id,-Z}
+@optItemx{id,--context}
 @cindex SELinux
 @cindex security context
 Print only the security context of the process, which is generally
@@ -16284,10 +15391,8 @@ the user's security context inherited from the parent process.
 If neither SELinux or SMACK is enabled then print a warning and
 set the exit status to 1.
 
-@item -z
-@itemx --zero
-@opindex -z
-@opindex --zero
+@optItem{id,-z}
+@optItemx{id,--zero}
 Delimit output items with ASCII NUL characters.
 This option is not permitted when using the default format.
 When multiple users are specified, and the @option{--groups} option
@@ -16459,95 +15564,69 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -a
-@itemx --all
-@opindex -a
-@opindex --all
+@optItem{who,-a}
+@optItemx{who,--all}
 Same as @samp{-b -d --login -p -r -t -T -u}.
 
-@item -b
-@itemx --boot
-@opindex -b
-@opindex --boot
+@optItem{who,-b}
+@optItemx{who,--boot}
 Print the date and time of last system boot.
 
-@item -d
-@itemx --dead
-@opindex -d
-@opindex --dead
+@optItem{who,-d}
+@optItemx{who,--dead}
 Print information corresponding to dead processes.
 
-@item -H
-@itemx --heading
-@opindex -H
-@opindex --heading
+@optItem{who,-H}
+@optItemx{who,--heading}
 Print a line of column headings.
 
-@item -l
-@itemx --login
-@opindex -l
-@opindex --login
+@optItem{who,-l}
+@optItemx{who,--login}
 List only the entries that correspond to processes via which the
 system is waiting for a user to login.  The user name is always @samp{LOGIN}.
 
-@macro lookupOption
-@item --lookup
-@opindex --lookup
+@macro lookupOption{cmd}
+@optItem{\cmd\,--lookup}
 Attempt to canonicalize hostnames found in utmp through a DNS lookup.
 This is not the default because of potential delays.
 @end macro
-@lookupOption
+@lookupOption{who}
 
-@item -m
-@opindex -m
+@optItem{who,-m}
 Same as @samp{who am i}.
 
-@item -p
-@itemx --process
-@opindex -p
-@opindex --process
+@optItem{who,-p}
+@optItemx{who,--process}
 List active processes spawned by init.
 
-@item -q
-@itemx --count
-@opindex -q
-@opindex --count
+@optItem{who,-q}
+@optItemx{who,--count}
 Print only the login names and the number of users logged on.
 Overrides all other options.
 
-@item -r
-@itemx --runlevel
-@opindex -r
-@opindex --runlevel
+@optItem{who,-r}
+@optItemx{who,--runlevel}
 Print the current (and maybe previous) run-level of the init process.
 
-@item -s
-@opindex -s
+@optItem{who,-s}
+@optItem{who,--short}
 Ignored; for compatibility with other versions of @command{who}.
 
-@item -t
-@itemx --time
-@opindex -t
-@opindex --time
+@optItem{who,-t}
+@optItemx{who,--time}
 Print last system clock change.
 
-@item -u
-@opindex -u
+@optItem{who,-u}
 @cindex idle time
 After the login time, print the number of hours and minutes that the
 user has been idle.  @samp{.} means the user was active in the last minute.
 @samp{old} means the user has been idle for more than 24 hours.
 
-@item -w
-@itemx -T
-@itemx --mesg
-@itemx --message
-@itemx --writable
-@opindex -w
-@opindex -T
-@opindex --mesg
-@opindex --message
-@opindex --writable
+@optItem{who,-w}
+@optItemx{who,-T}
+@optItemx{who,--mesg}
+@optItemx{who,--message}
+@optItemx{who,--writable}
 @cindex message status
 @pindex write@r{, allowed}
 After each login name print a character indicating the user's message status:
@@ -16581,50 +15660,41 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -l
-@opindex -l
+@optItem{pinky,-l}
 Produce long format output.
 
 When producing long output at least one @var{username} must be given.
 If @var{username} cannot be found, the real name is printed as
 @samp{???} and the home directory and shell are omitted.
 
-@item -b
-@opindex -b
+@optItem{pinky,-b}
 Omit the user's home directory and shell when printing in long format.
 
-@item -h
-@opindex -h
+@optItem{pinky,-h}
 Omit the user's project file when printing in long format.
 
-@item -p
-@opindex -p
+@optItem{pinky,-p}
 Omit the user's plan file when printing in long format.
 
-@item -s
-@opindex -s
+@optItem{pinky,-s}
 Produce short format output. This is the default behavior when no
 options are given.
 
-@item -f
-@opindex -f
+@optItem{pinky,-f}
 Omit the column headings when printing in short format.
 
-@item -w
-@opindex -w
+@optItem{pinky,-w}
 Omit the user's full name when printing in short format.
 
-@item -i
-@opindex -i
+@optItem{pinky,-i}
 Omit the user's full name and remote host when printing in short
 format.
 
-@item -q
-@opindex -q
+@optItem{pinky,-q}
 Omit the user's full name, remote host, and idle time when printing in
 short format.
 
-@lookupOption
+@lookupOption{pinky}
 
 @end table
 
@@ -17151,10 +16221,8 @@ I.e.: @option{--date}, @option{--file}, @option{--reference},
 
 @table @samp
 
-@item -d @var{datestr}
-@itemx --date=@var{datestr}
-@opindex -d
-@opindex --date
+@optItem{date,-d,@w{ }@var{datestr}}
+@optItemx{date,--date,=@var{datestr}}
 @cindex parsing date strings
 @cindex date strings, parsing
 @cindex arbitrary date strings, parsing
@@ -17176,28 +16244,23 @@ date -d "$(LC_TIME=C date)"
 @end example
 @xref{Date input formats}.
 
-@item --debug
-@opindex --debug
+@optItem{date,--debug}
 @cindex debugging date strings
 @cindex date strings, debugging
 @cindex arbitrary date strings, debugging
 Annotate the parsed date, display the effective time zone, and warn about
 potential misuse.
 
-@item -f @var{datefile}
-@itemx --file=@var{datefile}
-@opindex -f
-@opindex --file
+@optItem{date,-f,@w{ }@var{datefile}}
+@optItemx{date,--file,=@var{datefile}}
 Parse each line in @var{datefile} as with @option{-d} and display the
 resulting date and time.  If @var{datefile} is @samp{-}, use standard
 input.  This is useful when you have many dates to process, because the
 system overhead of starting up the @command{date} executable many times can
 be considerable.
 
-@item -I[@var{timespec}]
-@itemx --iso-8601[=@var{timespec}]
-@opindex -I[@var{timespec}]
-@opindex --iso-8601[=@var{timespec}]
+@optItem{date,-I,[@var{timespec}]}
+@optItemx{date,--iso-8601,[=@var{timespec}]}
 Display the date using an ISO 8601 format, @samp{%Y-%m-%d}.
 
 The argument @var{timespec} specifies the number of additional
@@ -17236,15 +16299,12 @@ for the @option{--date} (@option{-d}) and @option{--file}
 @end macro
 @dateParseNote
 
-@item -r @var{file}
-@itemx --reference=@var{file}
-@opindex -r
-@opindex --reference
+@optItem{date,-r,@w{ }@var{file}}
+@optItemx{date,--reference,=@var{file}}
 Display the date and time of the last modification of @var{file},
 instead of the current date and time.
 
-@item --resolution
-@opindex --resolution
+@optItem{date,--resolution}
 Display the timestamp resolution instead of the time.
 Current clock timestamps that are output by @command{date}
 are integer multiples of the timestamp resolution.
@@ -17256,10 +16316,8 @@ the output is:
 0.001000000
 @end example
 
-@item -R
-@itemx --rfc-email
-@opindex -R
-@opindex --rfc-email
+@optItem{date,-R}
+@optItemx{date,--rfc-email}
 Display the date and time using the format @samp{%a, %d %b %Y %H:%M:%S
 %z}, evaluated in the C locale so abbreviations are always in English.
 For example:
@@ -17279,8 +16337,7 @@ For compatibility with older versions of @command{date},
 @option{--rfc-2822} and @option{--rfc-822} are aliases for
 @option{--rfc-email}.
 
-@item --rfc-3339=@var{timespec}
-@opindex --rfc-3339=@var{timespec}
+@optItem{date,--rfc-3339,=@var{timespec}}
 Display the date using a format specified by
 @uref{https://datatracker.ietf.org/doc/rfc3339/, Internet
 RFC 3339}.  This is like @option{--iso-8601}, except that a space rather
@@ -17310,19 +16367,14 @@ This is like the format @samp{%Y-%m-%d %H:%M:%S.%N%:z}.
 
 @end table
 
-@item -s @var{datestr}
-@itemx --set=@var{datestr}
-@opindex -s
-@opindex --set
+@optItem{date,-s,@w{ }@var{datestr}}
+@optItemx{date,--set,=@var{datestr}}
 Set the date and time to @var{datestr}.  See @option{-d} above.
 See also @ref{Setting the time}.
 
-@item -u
-@itemx --utc
-@itemx --universal
-@opindex -u
-@opindex --utc
-@opindex --universal
+@optItem{date,-u}
+@optItemx{date,--utc}
+@optItemx{date,--universal}
 @cindex Coordinated Universal Time
 @cindex UTC
 @cindex Greenwich Mean Time
@@ -17568,15 +16620,13 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item --all
-@opindex --all
+@optItem{nproc,--all}
 Print the number of installed processors on the system, which may
 be greater than the number online or available to the current process.
 The @env{OMP_NUM_THREADS} or @env{OMP_THREAD_LIMIT} environment variables,
 or cgroup CPU quotas, are not honored in this case.
 
-@item --ignore=@var{number}
-@opindex --ignore
+@optItem{nproc,--ignore,=@var{number}}
 If possible, exclude this @var{number} of processing units.
 
 @end table
@@ -17622,17 +16672,13 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -a
-@itemx --all
-@opindex -a
-@opindex --all
+@optItem{uname,-a}
+@optItemx{uname,--all}
 Print all of the below information, except omit the processor type
 and the hardware platform name if they are unknown.
 
-@item -i
-@itemx --hardware-platform
-@opindex -i
-@opindex --hardware-platform
+@optItem{uname,-i}
+@optItemx{uname,--hardware-platform}
 @cindex implementation, hardware
 @cindex hardware platform
 @cindex platform, hardware
@@ -17641,54 +16687,42 @@ Print the hardware platform name
 Print @samp{unknown} if this information is not available.
 This is non-portable, even across GNU/Linux distributions.
 
-@item -m
-@itemx --machine
-@opindex -m
-@opindex --machine
+@optItem{uname,-m}
+@optItemx{uname,--machine}
 @cindex machine type
 @cindex hardware class
 @cindex hardware type
 Print the machine hardware name (sometimes called the hardware class
 or hardware type).
 
-@item -n
-@itemx --nodename
-@opindex -n
-@opindex --nodename
+@optItem{uname,-n}
+@optItemx{uname,--nodename}
 @cindex hostname
 @cindex node name
 @cindex network node name
 Print the network node hostname.
 
-@item -p
-@itemx --processor
-@opindex -p
-@opindex --processor
+@optItem{uname,-p}
+@optItemx{uname,--processor}
 @cindex host processor type
 Print the processor type (sometimes called the instruction set
 architecture or ISA).
 Print @samp{unknown} if this information is not available.
 This is non-portable, even across GNU/Linux distributions.
 
-@item -o
-@itemx --operating-system
-@opindex -o
-@opindex --operating-system
+@optItem{uname,-o}
+@optItemx{uname,--operating-system}
 @cindex operating system name
 Print the name of the operating system.
 
-@item -r
-@itemx --kernel-release
-@opindex -r
-@opindex --kernel-release
+@optItem{uname,-r}
+@optItemx{uname,--kernel-release}
 @cindex kernel release
 @cindex release of kernel
 Print the kernel release.
 
-@item -s
-@itemx --kernel-name
-@opindex -s
-@opindex --kernel-name
+@optItem{uname,-s}
+@optItemx{uname,--kernel-name}
 @cindex kernel name
 @cindex name of kernel
 Print the kernel name.
@@ -17701,10 +16735,8 @@ differ.  Some operating systems (e.g., FreeBSD, HP-UX) have the same
 name as their underlying kernels; others (e.g., GNU/Linux, Solaris)
 do not.
 
-@item -v
-@itemx --kernel-version
-@opindex -v
-@opindex --kernel-version
+@optItem{uname,-v}
+@optItemx{uname,--kernel-version}
 @cindex kernel version
 @cindex version of kernel
 Print the kernel version.
@@ -17848,78 +16880,60 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item --dereference
-@opindex --dereference
+@optItem{chcon,--dereference}
 Do not affect symbolic links but what they refer to; this is the default.
 
-@item -h
-@itemx --no-dereference
-@opindex -h
-@opindex --no-dereference
+@optItem{chcon,-h}
+@optItemx{chcon,--no-dereference}
 @cindex no dereference
 Affect the symbolic links themselves instead of any referenced file.
 
-@item --reference=@var{rfile}
-@opindex --reference
+@optItem{chcon,--reference,=@var{rfile}}
 @cindex reference file
 Use @var{rfile}'s security context rather than specifying a @var{context} value.
 
-@item -R
-@itemx --recursive
-@opindex -R
-@opindex --recursive
+@optItem{chcon,-R}
+@optItemx{chcon,--recursive}
 Operate on files and directories recursively.
 
-@item --preserve-root
-@opindex --preserve-root
+@optItem{chcon,--preserve-root}
 Refuse to operate recursively on the root directory, @file{/},
 when used together with the @option{--recursive} option.
 @xref{Treating / specially}.
 
-@item --no-preserve-root
-@opindex --no-preserve-root
+@optItem{chcon,--no-preserve-root}
 Do not treat the root directory, @file{/}, specially when operating
 recursively; this is the default.
 @xref{Treating / specially}.
 
-@choptH
+@choptH{chcon}
 @xref{Traversing symlinks}.
 
-@choptL
+@choptL{chcon}
 @xref{Traversing symlinks}.
 
-@choptP
+@choptP{chcon}
 @xref{Traversing symlinks}.
 
-@item -v
-@itemx --verbose
-@opindex -v
-@opindex --verbose
+@optItem{chcon,-v}
+@optItemx{chcon,--verbose}
 @cindex diagnostic
 Output a diagnostic for every file processed.
 
-@item -u @var{user}
-@itemx --user=@var{user}
-@opindex -u
-@opindex --user
+@optItem{chcon,-u,@w{ }@var{user}}
+@optItemx{chcon,--user,=@var{user}}
 Set user @var{user} in the target security context.
 
-@item -r @var{role}
-@itemx --role=@var{role}
-@opindex -r
-@opindex --role
+@optItem{chcon,-r,@w{ }@var{role}}
+@optItemx{chcon,--role,=@var{role}}
 Set role @var{role} in the target security context.
 
-@item -t @var{type}
-@itemx --type=@var{type}
-@opindex -t
-@opindex --type
+@optItem{chcon,-t,@w{ }@var{type}}
+@optItemx{chcon,--type,=@var{type}}
 Set type @var{type} in the target security context.
 
-@item -l @var{range}
-@itemx --range=@var{range}
-@opindex -l
-@opindex --range
+@optItem{chcon,-l,@w{ }@var{range}}
+@optItemx{chcon,--range,=@var{range}}
 Set range @var{range} in the target security context.
 
 @end table
@@ -17965,34 +16979,24 @@ than the process would normally have.
 
 @table @samp
 
-@item -c
-@itemx --compute
-@opindex -c
-@opindex --compute
+@optItem{runcon,-c}
+@optItemx{runcon,--compute}
 Compute process transition context before modifying.
 
-@item -u @var{user}
-@itemx --user=@var{user}
-@opindex -u
-@opindex --user
+@optItem{runcon,-u,@w{ }@var{user}}
+@optItemx{runcon,--user,=@var{user}}
 Set user @var{user} in the target security context.
 
-@item -r @var{role}
-@itemx --role=@var{role}
-@opindex -r
-@opindex --role
+@optItem{runcon,-r,@w{ }@var{role}}
+@optItemx{runcon,--role,=@var{role}}
 Set role @var{role} in the target security context.
 
-@item -t @var{type}
-@itemx --type=@var{type}
-@opindex -t
-@opindex --type
+@optItem{runcon,-t,@w{ }@var{type}}
+@optItemx{runcon,--type,=@var{type}}
 Set type @var{type} in the target security context.
 
-@item -l @var{range}
-@itemx --range=@var{range}
-@opindex -l
-@opindex --range
+@optItem{runcon,-l,@w{ }@var{range}}
+@optItemx{runcon,--range,=@var{range}}
 Set range @var{range} in the target security context.
 
 @end table
@@ -18065,16 +17069,14 @@ Options must precede operands.
 
 @table @samp
 
-@item --groups=@var{groups}
-@opindex --groups
+@optItem{chroot,--groups,=@var{groups}}
 Use this option to override the supplementary @var{groups} to be
 used by the new process.
 The items in the list (names or numeric IDs) must be separated by commas.
 Use @samp{--groups=''} to disable the supplementary group look-up
 implicit in the @option{--userspec} option.
 
-@item --userspec=@var{user}[:@var{group}]
-@opindex --userspec
+@optItem{chroot,--userspec,=@var{user}[:@var{group}]}
 By default, @var{command} is run with the same credentials
 as the invoking process.
 Use this option to run it as a different @var{user} and/or with a
@@ -18083,8 +17085,7 @@ If a @var{user} is specified then the supplementary groups
 are set according to the system defined list for that user,
 unless overridden with the @option{--groups} option.
 
-@item --skip-chdir
-@opindex --skip-chdir
+@optItem{chroot,--skip-chdir}
 Use this option to not change the working directory to @file{/} after changing
 the root directory to @var{newroot}, i.e., inside the chroot.
 This option is only permitted when @var{newroot} is the old @file{/} directory,
@@ -18273,34 +17274,25 @@ Options must precede operands.
 
 @table @samp
 
-@optNull
+@optNull{env}
 
-@item -a @var{arg}
-@itemx --argv0=@var{arg}
-@opindex -a
-@opindex --argv0
+@optItem{env,-a,@w{ }@var{arg}}
+@optItemx{env,--argv0,=@var{arg}}
 Override the zeroth argument passed to the command being executed.
 Without this option a default value of @var{command} is used.
 
-@item -u @var{name}
-@itemx --unset=@var{name}
-@opindex -u
-@opindex --unset
+@optItem{env,-u,@w{ }@var{name}}
+@optItemx{env,--unset,=@var{name}}
 Remove variable @var{name} from the environment, if it was in the
 environment.
 
-@item -
-@itemx -i
-@itemx --ignore-environment
-@opindex -
-@opindex -i
-@opindex --ignore-environment
+@optItem{env,-}
+@optItemx{env,-i}
+@optItemx{env,--ignore-environment}
 Start with an empty environment, ignoring the inherited environment.
 
-@item -C @var{dir}
-@itemx --chdir=@var{dir}
-@opindex -C
-@opindex --chdir
+@optItem{env,-C,@w{ }@var{dir}}
+@optItemx{env,--chdir,=@var{dir}}
 Change the working directory to @var{dir} before invoking @var{command}.
 This differs from the shell built-in @command{cd} in that it starts
 @var{command} as a subprocess rather than altering the shell's own working
@@ -18316,7 +17308,7 @@ chroot /chroot env --chdir=/srv true
 env --chdir=/build FOO=bar timeout 5 true
 @end example
 
-@item --default-signal[=@var{sig}]
+@optItem{env,--default-signal,[=@var{sig}]}
 Unblock and reset signal @var{sig} to its default signal handler.
 Without @var{sig} all known signals are unblocked and reset to their defaults.
 Multiple signals can be comma-separated. An empty @var{sig} argument is a no-op.
@@ -18346,7 +17338,7 @@ trap '' PIPE && sh -c 'env --default-signal=PIPE seq inf | head -n1'
 @end example
 
 
-@item --ignore-signal[=@var{sig}]
+@optItem{env,--ignore-signal,[=@var{sig}]}
 Ignore signal @var{sig} when running a program.  Without @var{sig} all
 known signals are set to ignore.  Multiple signals can be comma-separated.
 An empty @var{sig} argument is a no-op. The following command runs @command{seq}
@@ -18371,18 +17363,16 @@ set to default while @samp{SIGINT} is ignored:
 env --default-signal=INT,PIPE --ignore-signal=INT
 @end example
 
-@item --block-signal[=@var{sig}]
+@optItem{env,--block-signal,[=@var{sig}]}
 Block signal(s) @var{sig} from being delivered.  Without @var{sig} all
 known signals are set to blocked.  Multiple signals can be comma-separated.
 An empty @var{sig} argument is a no-op.
 
-@item --list-signal-handling
+@optItem{env,--list-signal-handling}
 List blocked or ignored signals to standard error, before executing a command.
 
-@item -v
-@itemx --debug
-@opindex -v
-@opindex --debug
+@optItem{env,-v}
+@optItemx{env,--debug}
 Show verbose information for each processing step.
 
 @example
@@ -18398,10 +17388,8 @@ Linux
 When combined with @option{-S} it is recommended to list @option{-v}
 first, e.g. @command{env -vS'string'}.
 
-@item -S @var{string}
-@itemx --split-string=@var{string}
-@opindex -S
-@opindex --split-string
+@optItem{env,-S,@w{ }@var{string}}
+@optItemx{env,--split-string,=@var{string}}
 @cindex shebang arguments
 @cindex scripts arguments
 @cindex env in scripts
@@ -18824,10 +17812,8 @@ The program accepts the following option.  Also see @ref{Common options}.
 Options must precede operands.
 
 @table @samp
-@item -n @var{adjustment}
-@itemx --adjustment=@var{adjustment}
-@opindex -n
-@opindex --adjustment
+@optItem{nice,-n,@w{ }@var{adjustment}}
+@optItemx{nice,--adjustment,=@var{adjustment}}
 Add @var{adjustment} instead of 10 to the command's niceness.  If
 @var{adjustment} is negative and you lack appropriate privileges,
 @command{nice} issues a warning but otherwise acts as if you specified
@@ -19011,22 +17997,16 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item -i @var{mode}
-@itemx --input=@var{mode}
-@opindex -i
-@opindex --input
+@optItem{stdbuf,-i,@w{ }@var{mode}}
+@optItemx{stdbuf,--input,=@var{mode}}
 Adjust the standard input stream buffering.
 
-@item -o @var{mode}
-@itemx --output=@var{mode}
-@opindex -o
-@opindex --output
+@optItem{stdbuf,-o,@w{ }@var{mode}}
+@optItemx{stdbuf,--output,=@var{mode}}
 Adjust the standard output stream buffering.
 
-@item -e @var{mode}
-@itemx --error=@var{mode}
-@opindex -e
-@opindex --error
+@optItem{stdbuf,-e,@w{ }@var{mode}}
+@optItemx{stdbuf,--error,=@var{mode}}
 Adjust the standard error stream buffering.
 
 @end table
@@ -19094,10 +18074,8 @@ The program accepts the following options.  Also see @ref{Common options}.
 Options must precede operands.
 
 @table @samp
-@item -f
-@itemx --foreground
-@opindex -f
-@opindex --foreground
+@optItem{timeout,-f}
+@optItemx{timeout,--foreground}
 Don't create a separate background program group, so that
 the managed @var{command} can use the foreground TTY normally.
 This is needed to support two situations when timing out commands,
@@ -19116,10 +18094,8 @@ as it's generally not needed with foreground processes, and can
 cause intermittent signal delivery issues with programs that are monitors
 themselves (like GDB for example).
 
-@item -k @var{duration}
-@itemx --kill-after=@var{duration}
-@opindex -k
-@opindex --kill-after
+@optItem{timeout,-k,@w{ }@var{duration}}
+@optItemx{timeout,--kill-after,=@var{duration}}
 Ensure the monitored @var{command} is killed by also sending a @samp{KILL}
 signal.
 
@@ -19136,26 +18112,20 @@ either because the signal was blocked or ignored, or if the @var{command} takes
 too long (e.g. for cleanup work) to terminate itself within a certain amount
 of time.
 
-@item -p
-@itemx --preserve-status
-@opindex -p
-@opindex --preserve-status
+@optItem{timeout,-p}
+@optItemx{timeout,--preserve-status}
 Return the exit status of the managed @var{command} on timeout, rather than
 a specific exit status indicating a timeout.  This is useful if the
 managed @var{command} supports running for an indeterminate amount of time.
 
-@item -s @var{signal}
-@itemx --signal=@var{signal}
-@opindex -s
-@opindex --signal
+@optItem{timeout,-s,@w{ }@var{signal}}
+@optItemx{timeout,--signal,=@var{signal}}
 Send this @var{signal} to @var{command} on timeout, rather than the
 default @samp{TERM} signal.  @var{signal} may be a name like @samp{HUP}
 or a number.  @xref{Signal specifications}.
 
-@item -v
-@itemx --verbose
-@opindex -v
-@opindex --verbose
+@optItem{timeout,-v}
+@optItemx{timeout,--verbose}
 Diagnose to standard error, any signal sent upon timeout.
 @end table
 
@@ -19404,10 +18374,8 @@ numbers from standard input, delimited by newlines, tabs, or spaces.
 The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
-@item -h
-@itemx --exponents
-@opindex -h
-@opindex --exponents
+@optItem{factor,-h}
+@optItemx{factor,--exponents}
 print factors in the form @math{p^e}, rather than repeating
 the prime @samp{p}, @samp{e} times. If the exponent @samp{e} is 1,
 then it is omitted.
@@ -19489,19 +18457,15 @@ The program accepts the following options.  Also see @ref{Common options}.
 
 @table @samp
 
-@item --debug
-@opindex --debug
+@optItem{numfmt,--debug}
 Print (to standard error) warning messages about possible erroneous usage.
 
-@item -d @var{d}
-@itemx --delimiter=@var{d}
-@opindex -d
-@opindex --delimiter
+@optItem{numfmt,-d}
+@optItemx{numfmt,--delimiter,=@var{d}}
 Use the character @var{d} as input field separator (default: newline or blank).
 Using non-default delimiter turns off automatic padding.
 
-@item --field=@var{fields}
-@opindex --field
+@optItem{numfmt,--field,=@var{fields}}
 Convert the number in input field @var{fields} (default: 1).
 @var{fields} supports @command{cut} style field ranges:
 
@@ -19514,8 +18478,7 @@ N-M  from N'th to M'th field (inclusive)
 @end example
 
 
-@item --format=@var{format}
-@opindex --format
+@optItem{numfmt,--format,=@var{format}}
 Use printf-style floating FORMAT string.  The @var{format} string must contain
 one @samp{%f} directive, optionally with @samp{'}, @samp{-}, @samp{0}, width
 or precision modifiers.  The @samp{'} modifier will enable @option{--grouping},
@@ -19526,32 +18489,26 @@ number, up to the specified width.  A precision specification like @samp{%.1f}
 will override the precision determined from the input data or set due to
 @option{--to} option auto scaling.
 
-@item --from=@var{unit}
-@opindex --from
+@optItem{numfmt,--from,=@var{unit}}
 Auto-scales input numbers according to @var{unit}.  See UNITS below.
 The default is no scaling, meaning suffixes (e.g. @samp{M}, @samp{G}) will
 trigger an error.
 
-@item --from-unit=@var{n}
-@opindex --from-unit
+@optItem{numfmt,--from-unit,=@var{n}}
 Specify the input unit size (instead of the default 1).  Use this option when
 the input numbers represent other units (e.g. if the input number @samp{10}
 represents 10 units of 512 bytes, use @samp{--from-unit=512}).
 Suffixes are handled as with @samp{--from=auto}.
 
-@item --grouping
-@opindex --grouping
+@optItem{numfmt,--grouping}
 Group digits in output numbers according to the current locale's grouping rules
 (e.g @emph{Thousands Separator} character, commonly @samp{.} (dot) or @samp{,}
 comma).  This option has no effect in @samp{POSIX/C} locale.
 
-@item --header[=@var{n}]
-@opindex --header
-@opindex --header=N
+@optItem{numfmt,--header,[=@var{n}]}
 Print the first @var{n} (default: 1) lines without any conversion.
 
-@item --invalid=@var{mode}
-@opindex --invalid
+@optItem{numfmt,--invalid,=@var{mode}}
 The default action on input errors is to exit immediately with status code 2.
 @option{--invalid=@samp{abort}} explicitly specifies this default mode.
 With a @var{mode} of @samp{fail}, print a warning for @emph{each} conversion
@@ -19559,14 +18516,13 @@ error, and exit with status 2.  With a @var{mode} of @samp{warn}, exit with
 status 0, even in the presence of conversion errors, and with a @var{mode} of
 @samp{ignore} do not even print diagnostics.
 
-@item --padding=@var{n}
-@opindex --padding
+@optItem{numfmt,--padding,=@var{n}}
 Pad the output numbers to @var{n} characters, by adding spaces.  If @var{n} is
 a positive number, numbers will be right-aligned.  If @var{n} is a negative
 number, numbers will be left-aligned.  By default, numbers are automatically
 aligned based on the input line's width (only with the default delimiter).
 
-@item --round=@var{method}
+@optItem{numfmt,--round,=@var{method}}
 @opindex --round
 @opindex --round=up
 @opindex --round=down
@@ -19577,25 +18533,21 @@ When converting number representations, round the number according to
 @var{method}, which can be @samp{up}, @samp{down},
 @samp{from-zero} (the default), @samp{towards-zero}, @samp{nearest}.
 
-@item --suffix=@var{suffix}
-@opindex --suffix
+@optItem{numfmt,--suffix,=@var{suffix}}
 Add @samp{SUFFIX} to the output numbers, and accept optional @samp{SUFFIX} in
 input numbers.
 
-@item --to=@var{unit}
-@opindex --to
+@optItem{numfmt,--to,=@var{unit}}
 Auto-scales output numbers according to @var{unit}.  See @emph{Units} below.
 The default is no scaling, meaning all the digits of the number are printed.
 
-@item --to-unit=@var{n}
-@opindex --to-unit
+@optItem{numfmt,--to-unit,=@var{n}}
 Specify the output unit size (instead of the default 1).  Use this option when
 the output numbers represent other units (e.g. to represent @samp{4,000,000}
 bytes in blocks of 1kB, use @samp{--to=si --to-unit=1000}).
 Suffixes are handled as with @samp{--from=auto}.
 
-@item --unit-separator=@var{sep}
-@opindex --unit-separator
+@optItem{numfmt,--unit-separator,=@var{sep}}
 Support a separator @var{sep} between the number and unit,
 with @option{--from} or @option{--to} auto-scaled units.
 By default a blank or non-breaking space character is accepted on input,
@@ -19611,7 +18563,7 @@ Support blanks on input: @option{--delimiter=''}
 Ditto and output non-breaking space: @option{-d '' --unit-separator=$'\u00A0'}
 @end example
 
-@optZeroTerminated
+@optZeroTerminated{numfmt}
 @newlineFieldSeparator
 
 @end table
@@ -19869,10 +18821,8 @@ The program accepts the following options.  Also see @ref{Common options}.
 Options must precede operands.
 
 @table @samp
-@item -f @var{format}
-@itemx --format=@var{format}
-@opindex -f
-@opindex --format
+@optItem{seq,-f,@w{ }@var{format}}
+@optItemx{seq,--format,=@var{format}}
 @cindex formatting of numbers in @command{seq}
 Print all numbers using @var{format}.
 @var{format} must contain exactly one of the @samp{printf}-style
@@ -19891,18 +18841,14 @@ the default format is @samp{%.@var{p}f}, where @var{p} is the minimum
 precision that can represent the output numbers exactly.  Otherwise,
 the default format is @samp{%g}.
 
-@item -s @var{string}
-@itemx --separator=@var{string}
-@opindex -s
-@opindex --separator
+@optItem{seq,-s,@w{ }@var{string}}
+@optItemx{seq,--separator,=@var{string}}
 @cindex separator for numbers in @command{seq}
 Separate numbers with @var{string}; default is a newline.
 The output always terminates with a newline.
 
-@item -w
-@itemx --equal-width
-@opindex -w
-@opindex --equal-width
+@optItem{seq,-w}
+@optItemx{seq,--equal-width}
 Print all numbers with the same width, by padding with leading zeros.
 @var{first}, @var{step}, and @var{last} should all use a fixed point
 decimal representation.