xref: /freebsd/contrib/mandoc/mandoc.1 (revision 24e4dcf4ba5e9dedcf89efd358ea3e1fe5867020)
1.\" $Id: mandoc.1,v 1.273 2025/08/22 13:17:06 schwarze Exp $
2.\"
3.\" Copyright (c) 2012, 2014-2023, 2025 Ingo Schwarze <schwarze@openbsd.org>
4.\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
5.\"
6.\" Permission to use, copy, modify, and distribute this software for any
7.\" purpose with or without fee is hereby granted, provided that the above
8.\" copyright notice and this permission notice appear in all copies.
9.\"
10.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17.\"
18.Dd $Mdocdate: August 22 2025 $
19.Dt MANDOC 1
20.Os
21.Sh NAME
22.Nm mandoc
23.Nd format manual pages
24.Sh SYNOPSIS
25.Nm mandoc
26.Op Fl ac
27.Op Fl I Cm os Ns = Ns Ar name
28.Op Fl K Ar encoding
29.Op Fl mdoc | man
30.Op Fl O Ar options
31.Op Fl T Ar output
32.Op Fl W Ar level
33.Op Ar
34.Sh DESCRIPTION
35The
36.Nm
37utility formats manual pages for display.
38.Pp
39By default,
40.Nm
41reads
42.Xr mdoc 7
43or
44.Xr man 7
45text from stdin and produces
46.Fl T Cm locale
47output.
48.Pp
49The options are as follows:
50.Bl -tag -width Ds
51.It Fl a
52If the standard output is a terminal device and
53.Fl c
54is not specified, use
55.Xr less 1
56to paginate the output, just like
57.Xr man 1
58would.
59.It Fl c
60Copy the formatted manual pages to the standard output without using
61.Xr less 1
62to paginate them.
63This is the default.
64It can be specified to override
65.Fl a .
66.It Fl I Cm os Ns = Ns Ar name
67Override the default operating system
68.Ar name
69for the
70.Xr mdoc 7
71.Ic \&Os
72and for the
73.Xr man 7
74.Ic \&TH
75macro.
76.It Fl K Ar encoding
77Specify the input encoding.
78The supported
79.Ar encoding
80arguments are
81.Cm us-ascii ,
82.Cm iso-8859-1 ,
83and
84.Cm utf-8 .
85If not specified, autodetection uses the first match in the following
86list:
87.Bl -enum
88.It
89If the first three bytes of the input file are the UTF-8 byte order
90mark (BOM, 0xefbbbf), input is interpreted as
91.Cm utf-8 .
92.It
93If the first or second line of the input file matches the
94.Sy emacs
95mode line format
96.Pp
97.D1 .\e" -*- Oo ...; Oc coding: Ar encoding ; No -*-
98.Pp
99then input is interpreted according to
100.Ar encoding .
101.It
102If the first non-ASCII byte in the file introduces a valid UTF-8
103sequence, input is interpreted as
104.Cm utf-8 .
105.It
106Otherwise, input is interpreted as
107.Cm iso-8859-1 .
108.El
109.It Fl mdoc | man
110With
111.Fl mdoc ,
112all input files are interpreted as
113.Xr mdoc 7 .
114With
115.Fl man ,
116all input files are interpreted as
117.Xr man 7 .
118By default, the input language is automatically detected for each file:
119if the first macro is
120.Ic \&Dd
121or
122.Ic \&Dt ,
123the
124.Xr mdoc 7
125parser is used; otherwise, the
126.Xr man 7
127parser is used.
128With other arguments,
129.Fl m
130is silently ignored.
131.It Fl O Ar options
132Comma-separated output options.
133See the descriptions of the individual output formats for supported
134.Ar options .
135.It Fl T Ar output
136Select the output format.
137Supported values for the
138.Ar output
139argument are
140.Cm ascii ,
141.Cm html ,
142the default of
143.Cm locale ,
144.Cm man ,
145.Cm markdown ,
146.Cm pdf ,
147.Cm ps ,
148.Cm tree ,
149and
150.Cm utf8 .
151.Pp
152The special
153.Fl T Cm lint
154mode only parses the input and produces no output.
155It implies
156.Fl W Cm all
157and redirects parser messages, which usually appear on standard
158error output, to standard output.
159.It Fl W Ar level
160Specify the minimum message
161.Ar level
162to be reported on the standard error output and to affect the exit status.
163The
164.Ar level
165can be
166.Cm base ,
167.Cm style ,
168.Cm warning ,
169.Cm error ,
170or
171.Cm unsupp .
172The
173.Cm base
174level automatically derives the operating system from the contents of the
175.Ic \&Os
176macro, from the
177.Fl Ios
178command line option, or from the
179.Xr uname 3
180return value.
181The levels
182.Cm openbsd
183and
184.Cm netbsd
185are variants of
186.Cm base
187that bypass autodetection and request validation of base system
188conventions for a particular operating system.
189The level
190.Cm all
191is an alias for
192.Cm base .
193By default,
194.Nm
195is silent.
196See
197.Sx EXIT STATUS
198and
199.Sx DIAGNOSTICS
200for details.
201.Pp
202The special option
203.Fl W Cm stop
204tells
205.Nm
206to exit after parsing a file that causes warnings or errors of at least
207the requested level.
208No formatted output will be produced from that file.
209If both a
210.Ar level
211and
212.Cm stop
213are requested, they can be joined with a comma, for example
214.Fl W Cm error , Ns Cm stop .
215.It Ar file
216Read from the given input file.
217If multiple files are specified, they are processed in the given order.
218If unspecified,
219.Nm
220reads from standard input.
221.El
222.Pp
223The options
224.Fl fhklw
225are also supported and are documented in
226.Xr man 1 .
227In
228.Fl f
229and
230.Fl k
231mode,
232.Nm
233also supports the options
234.Fl CMmOSs
235described in the
236.Xr apropos 1
237manual.
238The options
239.Fl fkl
240are mutually exclusive and override each other.
241.Ss ASCII Output
242Use
243.Fl T Cm ascii
244to force text output in 7-bit ASCII character encoding documented in the
245.Xr ascii 7
246manual page, ignoring the
247.Xr locale 1
248set in the environment.
249.Pp
250Font styles are applied by using back-spaced encoding such that an
251underlined character
252.Sq c
253is rendered as
254.Sq _ Ns \e[bs] Ns c ,
255where
256.Sq \e[bs]
257is the back-space character number 8.
258Emboldened characters are rendered as
259.Sq c Ns \e[bs] Ns c .
260This markup is typically converted to appropriate terminal sequences by
261the pager or
262.Xr ul 1 .
263To remove the markup, pipe the output to
264.Xr col 1
265.Fl b
266instead.
267.Pp
268The special characters documented in
269.Xr mandoc_char 7
270are rendered best-effort in an ASCII equivalent.
271In particular, opening and closing
272.Sq single quotes
273are represented as characters number 0x60 and 0x27, respectively,
274which agrees with all ASCII standards from 1965 to the latest
275revision (2012) and which matches the traditional way in which
276.Xr roff 7
277formatters represent single quotes in ASCII output.
278This correct ASCII rendering may look strange with modern
279Unicode-compatible fonts because contrary to ASCII, Unicode uses
280the code point U+0060 for the grave accent only, never for an opening
281quote.
282.Pp
283The following
284.Fl O
285arguments are accepted:
286.Bl -tag -width Ds
287.It Cm indent Ns = Ns Ar indent
288The left margin for normal text is set to
289.Ar indent
290blank characters instead of the default of five.
291Increasing this is not recommended; it may result in degraded formatting,
292for example overfull lines or ugly line breaks.
293When output is to a pager on a terminal that is less than 66 columns
294wide, the default is reduced to three columns.
295.It Cm tag Ns Op = Ns Ar term
296If the formatted manual page is opened in a pager,
297go to the definition of the
298.Ar term
299rather than showing the manual page from the beginning.
300If no
301.Ar term
302is specified, reuse the first command line argument that is not a
303.Ar section
304number.
305If that argument is in
306.Xr apropos 1
307.Ar key Ns = Ns Ar val
308format, only the
309.Ar val
310is used rather than the argument as a whole.
311This is useful for commands like
312.Ql man -akO tag Ic=ulimit
313to search for a keyword and jump right to its definition
314in the matching manual pages.
315.It Cm width Ns = Ns Ar width
316The output width is set to
317.Ar width
318instead of the default of 78.
319When output is to a pager on a terminal that is less than 79 columns
320wide, the default is reduced to one less than the terminal width.
321In any case, lines that are output in literal mode are never wrapped
322and may exceed the output width.
323.El
324.Ss HTML Output
325Output produced by
326.Fl T Cm html
327conforms to HTML5 using optional self-closing tags.
328Equations rendered from
329.Xr eqn 7
330blocks use MathML.
331Non-ASCII characters are rendered
332as hexadecimal Unicode character references.
333.Pp
334The following
335.Fl O
336arguments are accepted:
337.Bl -tag -width Ds
338.It Cm fragment
339Omit the <!DOCTYPE> declaration and the <html>, <head>, and <body>
340elements and only emit the subtree below the <body> element.
341The
342.Cm style
343argument will be ignored.
344This is useful when embedding manual content within existing documents.
345.It Cm includes Ns = Ns Ar fmt
346The string
347.Ar fmt ,
348for example,
349.Ar ../src/%I.html ,
350is used as a template for linked header files (usually via the
351.Ic \&In
352macro).
353Instances of
354.Sq \&%I
355are replaced with the include filename.
356The default is not to present a
357hyperlink.
358.It Cm man Ns = Ns Ar fmt Ns Op ; Ns Ar fmt
359The string
360.Ar fmt ,
361for example,
362.Ar ../html%S/%N.%S.html ,
363is used as a template for linked manuals (usually via the
364.Ic \&Xr
365macro).
366Instances of
367.Sq \&%N
368and
369.Sq %S
370are replaced with the linked manual's name and section, respectively.
371If no section is included, section 1 is assumed.
372The default is not to
373present a hyperlink.
374If two formats are given and a file
375.Ar %N.%S
376exists in the current directory, the first format is used;
377otherwise, the second format is used.
378.It Cm style Ns = Ns Ar style.css
379The file
380.Ar style.css
381is used as an external stylesheet.
382This must be a valid absolute or
383relative URI.
384.Pp
385Using the file
386.Pa mandoc.css
387that is distributed with
388.Nm
389is recommended.
390It provides an appearance similar to terminal output with some additional
391features specific to
392.Nm
393HTML output, in particular making anchor locations that support
394deep linking stand out visually by putting a dotted line under them,
395providing tooltips showing the semantic function of elements (macro
396names), providing some simple aspects of responsive web design, and
397providing simple support for users who prefer a dark color scheme.
398.Pp
399Using a custom CSS file is possible, but writing it requires
400proficiency in all of the languages HTML 5, CSS 4, and
401.Xr mdoc 7
402and familiarity with the
403.Nm Ns -specific
404classes used in
405.Pa mandoc.css .
406Besides, while the file
407.Pa mandoc.css
408is always adapted to the HTML output generated by the
409.Nm
410version it is distributed with, maintaining a custom CSS file usually
411requires adaptations each time
412.Nm
413is upgraded to a new version.
414.Pp
415If a stylesheet is not specified with
416.Fl O Cm style ,
417.Fl T Cm html
418embeds a minimal stylesheet into the HTML output, mostly to select
419adequate font-style and font-weight attributes for various macros.
420The result is readable in any graphical or text-based web browser,
421but does not aim for looking similar to terminal output.
422Instead, formatting is mostly left to browser defaults
423and to user settings in the browser configuration.
424.It Cm tag Ns Op = Ns Ar term
425Same syntax and semantics as for
426.Sx ASCII Output .
427This is implemented by passing a
428.Ic file://
429URI ending in a fragment identifier to the pager
430rather than passing merely a file name.
431When using this argument, use a pager supporting such URIs, for example
432.Bd -literal -offset 3n
433MANPAGER='lynx -force_html' man -T html -O tag=MANPAGER man
434MANPAGER='w3m -T text/html' man -T html -O tag=toc mandoc
435.Ed
436.Pp
437Consequently, for HTML output, this argument does not work with
438.Xr more 1
439or
440.Xr less 1 .
441For example,
442.Ql MANPAGER=less man -T html -O tag=toc mandoc
443does not work because
444.Xr less 1
445does not support
446.Ic file://
447URIs.
448.It Cm toc
449If an input file contains at least two non-standard sections,
450print a table of contents near the beginning of the output.
451.El
452.Ss Locale Output
453By default,
454.Nm
455automatically selects UTF-8 or ASCII output according to the current
456.Xr locale 1 .
457If any of the environment variables
458.Ev LC_ALL ,
459.Ev LC_CTYPE ,
460or
461.Ev LANG
462are set and the first one that is set
463selects the UTF-8 character encoding, it produces
464.Sx UTF-8 Output ;
465otherwise, it falls back to
466.Sx ASCII Output .
467This output mode can also be selected explicitly with
468.Fl T Cm locale .
469.Ss Man Output
470Use
471.Fl T Cm man
472to translate
473.Xr mdoc 7
474input into
475.Xr man 7
476output format.
477This is useful for distributing manual sources to legacy systems
478lacking
479.Xr mdoc 7
480formatters.
481Embedded
482.Xr eqn 7
483and
484.Xr tbl 7
485code is not supported.
486.Pp
487If the input format of a file is
488.Xr man 7 ,
489the input is copied to the output.
490The parser is also run, and as usual, the
491.Fl W
492level controls which
493.Sx DIAGNOSTICS
494are displayed before copying the input to the output.
495.Ss Markdown Output
496Use
497.Fl T Cm markdown
498to translate
499.Xr mdoc 7
500input to the markdown format conforming to
501.Lk https://daringfireball.net/projects/markdown/syntax.text\
502 "John Gruber's 2004 specification" .
503The output also almost conforms to the
504.Lk https://commonmark.org/ CommonMark
505specification.
506.Pp
507The character set used for the markdown output is ASCII.
508Non-ASCII characters are encoded as HTML entities.
509Since that is not possible in literal font contexts, because these
510are rendered as code spans and code blocks in the markdown output,
511non-ASCII characters are transliterated to ASCII approximations in
512these contexts.
513.Pp
514Markdown is a very weak markup language, so all semantic markup is
515lost, and even part of the presentational markup may be lost.
516Do not use this as an intermediate step in converting to HTML;
517instead, use
518.Fl T Cm html
519directly.
520.Pp
521The
522.Xr man 7 ,
523.Xr tbl 7 ,
524and
525.Xr eqn 7
526input languages are not supported by
527.Fl T Cm markdown
528output mode.
529.Ss PDF Output
530PDF-1.1 output may be generated by
531.Fl T Cm pdf .
532See
533.Sx PostScript Output
534for
535.Fl O
536arguments and defaults.
537.Ss PostScript Output
538PostScript
539.Qq Adobe-3.0
540Level-2 pages may be generated by
541.Fl T Cm ps .
542Output pages default to letter sized and are rendered in the Times font
543family, 11-point.
544Margins are calculated as 1/9 the page length and width.
545Line-height is 1.4m.
546.Pp
547Special characters are rendered as in
548.Sx ASCII Output .
549.Pp
550The following
551.Fl O
552arguments are accepted:
553.Bl -tag -width Ds
554.It Cm paper Ns = Ns Ar name
555The paper size
556.Ar name
557may be one of
558.Ar a3 ,
559.Ar a4 ,
560.Ar a5 ,
561.Ar legal ,
562or
563.Ar letter .
564You may also manually specify dimensions as
565.Ar NNxNN ,
566width by height in millimetres.
567If an unknown value is encountered,
568.Ar letter
569is used.
570.El
571.Ss UTF-8 Output
572Use
573.Fl T Cm utf8
574to force text output in UTF-8 multi-byte character encoding,
575ignoring the
576.Xr locale 1
577settings in the environment.
578See
579.Sx ASCII Output
580regarding font styles and
581.Fl O
582arguments.
583.Pp
584On operating systems lacking locale or wide character support, and
585on those where the internal character representation is not UCS-4,
586.Nm
587always falls back to
588.Sx ASCII Output .
589.Ss Syntax tree output
590Use
591.Fl T Cm tree
592to show a human readable representation of the syntax tree.
593It is useful for debugging the source code of manual pages.
594The exact format is subject to change, so don't write parsers for it.
595.Pp
596The first paragraph shows meta data found in the
597.Xr mdoc 7
598prologue, on the
599.Xr man 7
600.Ic \&TH
601line, or the fallbacks used.
602.Pp
603In the tree dump, each output line shows one syntax tree node.
604Child nodes are indented with respect to their parent node.
605The columns are:
606.Pp
607.Bl -enum -compact
608.It
609For macro nodes, the macro name; for text and
610.Xr tbl 7
611nodes, the content.
612There is a special format for
613.Xr eqn 7
614nodes.
615.It
616Node type (text, elem, block, head, body, body-end, tail, tbl, eqn).
617.It
618Flags:
619.Bl -dash -compact
620.It
621An opening parenthesis if the node is an opening delimiter.
622.It
623An asterisk if the node starts a new input line.
624.It
625The input line number (starting at one).
626.It
627A colon.
628.It
629The input column number (starting at one).
630.It
631A closing parenthesis if the node is a closing delimiter.
632.It
633A full stop if the node ends a sentence.
634.It
635BROKEN if the node is a block broken by another block.
636.It
637NOSRC if the node is not in the input file,
638but automatically generated from macros.
639.It
640NOPRT if the node is not supposed to generate output
641for any output format.
642.El
643.El
644.Pp
645The following
646.Fl O
647argument is accepted:
648.Bl -tag -width Ds
649.It Cm noval
650Skip validation and show the unvalidated syntax tree.
651This can help to find out whether a given behaviour is caused by
652the parser or by the validator.
653Meta data is not available in this case.
654.El
655.Sh ENVIRONMENT
656.Bl -tag -width MANPAGER
657.It Ev LC_CTYPE
658The character encoding
659.Xr locale 1 .
660When
661.Sx Locale Output
662is selected, it decides whether to use ASCII or UTF-8 output format.
663It never affects the interpretation of input files.
664.It Ev MANPAGER
665Any non-empty value of the environment variable
666.Ev MANPAGER
667is used instead of the standard pagination program,
668.Xr less 1 ;
669see
670.Xr man 1
671for details.
672Only used if
673.Fl a
674or
675.Fl l
676is specified.
677.It Ev PAGER
678Specifies the pagination program to use when
679.Ev MANPAGER
680is not defined.
681If neither PAGER nor MANPAGER is defined,
682.Xr less 1
683is used.
684Only used if
685.Fl a
686or
687.Fl l
688is specified.
689.El
690.Sh EXIT STATUS
691The
692.Nm
693utility exits with one of the following values, controlled by the message
694.Ar level
695associated with the
696.Fl W
697option:
698.Pp
699.Bl -tag -width Ds -compact
700.It 0
701No base system convention violations, style suggestions, warnings,
702or errors occurred, or those that did were ignored because they
703were lower than the requested
704.Ar level .
705.It 1
706At least one base system convention violation or style suggestion
707occurred, but no warning or error, and
708.Fl W Cm base
709or
710.Fl W Cm style
711was specified.
712.It 2
713At least one warning occurred, but no error, and
714.Fl W Cm warning
715or a lower
716.Ar level
717was requested.
718.It 3
719At least one parsing error occurred,
720but no unsupported feature was encountered, and
721.Fl W Cm error
722or a lower
723.Ar level
724was requested.
725.It 4
726At least one unsupported feature was encountered, and
727.Fl W Cm unsupp
728or a lower
729.Ar level
730was requested.
731.It 5
732Invalid command line arguments were specified.
733No input files have been read.
734.It 6
735An operating system error occurred, for example exhaustion
736of memory, file descriptors, or process table entries.
737Such errors may cause
738.Nm
739to exit at once, possibly in the middle of parsing or formatting a file.
740.El
741.Pp
742Note that selecting
743.Fl T Cm lint
744output mode implies
745.Fl W Cm all .
746.Sh EXAMPLES
747To page manuals to the terminal:
748.Pp
749.Dl $ mandoc -a mandoc.1 man.1 apropos.1 makewhatis.8
750.Pp
751To produce HTML manuals with
752.Pa /usr/share/misc/mandoc.css
753as the stylesheet:
754.Pp
755.Dl $ mandoc \-T html -O style=/usr/share/misc/mandoc.css mdoc.7 > mdoc.7.html
756.Pp
757To check over a large set of manuals:
758.Pp
759.Dl $ mandoc \-T lint \(gafind /usr/src -name \e*\e.[1-9]\(ga
760.Pp
761To produce a series of PostScript manuals for A4 paper:
762.Pp
763.Dl $ mandoc \-T ps \-O paper=a4 mdoc.7 man.7 > manuals.ps
764.Pp
765Convert a modern
766.Xr mdoc 7
767manual to the older
768.Xr man 7
769format, for use on systems lacking an
770.Xr mdoc 7
771parser:
772.Pp
773.Dl $ mandoc \-T man foo.mdoc > foo.man
774.Sh DIAGNOSTICS
775Messages displayed by
776.Nm
777follow this format:
778.Bd -ragged -offset indent
779.Nm :
780.Ar file : Ns Ar line : Ns Ar column : level : message : macro argument ...
781.Pq Ar os
782.Ed
783.Pp
784The first three fields identify the
785.Ar file
786name,
787.Ar line
788number, and
789.Ar column
790number of the input file where the message was triggered.
791The line and column numbers start at 1.
792Both are omitted for messages referring to an input file as a whole.
793All
794.Ar level
795and
796.Ar message
797strings are explained below.
798The name of the
799.Ar macro
800triggering the message and its arguments are omitted where meaningless.
801The
802.Ar os
803operating system specifier is omitted for messages that are relevant
804for all operating systems.
805Fatal messages about invalid command line arguments
806or operating system errors, for example when memory is exhausted,
807may also omit the
808.Ar file
809and
810.Ar level
811fields.
812.Pp
813Message levels have the following meanings:
814.Bl -tag -width "warning"
815.It Cm syserr
816An operating system error occurred.
817There isn't necessarily anything wrong with the input files.
818Output may all the same be missing or incomplete.
819.It Cm badarg
820Invalid command line arguments were specified.
821No input files have been read and no output is produced.
822.It Cm unsupp
823An input file uses unsupported low-level
824.Xr roff 7
825features.
826The output may be incomplete and/or misformatted,
827so using GNU troff instead of
828.Nm
829to process the file may be preferable.
830.It Cm error
831Indicates a risk of information loss or severe misformatting,
832in most cases caused by serious syntax errors.
833.It Cm warning
834Indicates a risk that the information shown or its formatting
835may mismatch the author's intent in minor ways.
836Additionally, syntax errors are classified at least as warnings,
837even if they do not usually cause misformatting.
838.It Cm style
839An input file uses dubious or discouraged style.
840This is not a complaint about the syntax, and probably neither
841formatting nor portability are in danger.
842While great care is taken to avoid false positives on the higher
843message levels, the
844.Cm style
845level tries to reduce the probability that issues go unnoticed,
846so it may occasionally issue bogus suggestions.
847Use your judgement to decide whether any particular
848.Cm style
849suggestion really justifies a change to the input file.
850.It Cm base
851A convention used in the base system of a specific operating system
852is not adhered to.
853These are not markup mistakes, and neither the quality of formatting
854nor portability are in danger.
855Messages of the
856.Cm base
857level are printed with the more intuitive
858.Cm style
859.Ar level
860tag.
861.El
862.Pp
863Messages of the
864.Cm base ,
865.Cm style ,
866.Cm warning ,
867.Cm error ,
868and
869.Cm unsupp
870levels are hidden unless their level, or a lower level, is requested using a
871.Fl W
872option or
873.Fl T Cm lint
874output mode.
875.Pp
876As indicated below, all
877.Cm base
878and some
879.Cm style
880checks are only performed if a specific operating system name occurs
881in the arguments of the
882.Fl W
883command line option, of the
884.Ic \&Os
885macro, of the
886.Fl Ios
887command line option, or, if neither are present, in the return value
888of the
889.Xr uname 3
890function.
891.Ss Conventions for base system manuals
892.Bl -ohang
893.It Sy "Mdocdate found"
894.Pq mdoc , Nx
895The
896.Ic \&Dd
897macro uses CVS
898.Ic Mdocdate
899keyword substitution, which is not supported by the
900.Nx
901base system.
902Consider using the conventional
903.Dq "Month dd, yyyy"
904format instead.
905.It Sy "Mdocdate missing"
906.Pq mdoc , Ox
907The
908.Ic \&Dd
909macro does not use CVS
910.Ic Mdocdate
911keyword substitution, but using it is conventionally expected in the
912.Ox
913base system.
914.It Sy "unknown architecture"
915.Pq mdoc , Ox , Nx
916The third argument of the
917.Ic \&Dt
918macro does not match any of the architectures this operating system
919is running on.
920.It Sy "operating system explicitly specified"
921.Pq mdoc , Ox , Nx
922The
923.Ic \&Os
924macro has an argument.
925In the base system, it is conventionally left blank.
926.It Sy "RCS id missing"
927.Pq Ox , Nx
928The manual page lacks the comment line with the RCS identifier
929generated by CVS
930.Ic OpenBSD
931or
932.Ic NetBSD
933keyword substitution as conventionally used in these operating systems.
934.El
935.Ss Style suggestions
936.Bl -ohang
937.It Sy "legacy man(7) date format"
938.Pq mdoc
939The
940.Ic \&Dd
941macro uses the legacy
942.Xr man 7
943date format
944.Dq yyyy-mm-dd .
945Consider using the conventional
946.Xr mdoc 7
947date format
948.Dq "Month dd, yyyy"
949instead.
950.It Sy "normalizing date format to" : No ...
951.Pq mdoc , man
952The
953.Ic \&Dd
954or
955.Ic \&TH
956macro provides an abbreviated month name or a day number with a
957leading zero.
958In the formatted output, the month name is written out in full
959and the leading zero is omitted.
960.It Sy "lower case character in document title"
961.Pq mdoc , man
962The title is still used as given in the
963.Ic \&Dt
964or
965.Ic \&TH
966macro.
967.It Sy "duplicate RCS id"
968A single manual page contains two copies of the RCS identifier for
969the same operating system.
970Consider deleting the later instance and moving the first one up
971to the top of the page.
972.It Sy "possible typo in section name"
973.Pq mdoc
974Fuzzy string matching revealed that the argument of an
975.Ic \&Sh
976macro is similar, but not identical to a standard section name.
977.It Sy "unterminated quoted argument"
978.Pq roff
979Macro arguments can be enclosed in double quote characters
980such that space characters and macro names contained in the quoted
981argument need not be escaped.
982The closing quote of the last argument of a macro can be omitted.
983However, omitting it is not recommended because it makes the code
984harder to read.
985.It Sy "useless macro"
986.Pq mdoc
987A
988.Ic \&Bt ,
989.Ic \&Tn ,
990or
991.Ic \&Ud
992macro was found.
993Simply delete it: it serves no useful purpose.
994.It Sy "consider using OS macro"
995.Pq mdoc
996A string was found in plain text or in a
997.Ic \&Bx
998macro that could be represented using
999.Ic \&Ox ,
1000.Ic \&Nx ,
1001.Ic \&Fx ,
1002or
1003.Ic \&Dx .
1004.It Sy "errnos out of order"
1005.Pq mdoc , Nx
1006The
1007.Ic \&Er
1008items in a
1009.Ic \&Bl
1010list are not in alphabetical order.
1011.It Sy "duplicate errno"
1012.Pq mdoc , Nx
1013A
1014.Ic \&Bl
1015list contains two consecutive
1016.Ic \&It
1017entries describing the same
1018.Ic \&Er
1019number.
1020.It Sy "referenced manual not found"
1021.Pq mdoc
1022An
1023.Ic \&Xr
1024macro references a manual page that was not found.
1025When running with
1026.Fl W Cm base ,
1027the search is restricted to the base system, by default to
1028.Pa /usr/share/man : Ns Pa /usr/X11R6/man .
1029This path can be configured at compile time using the
1030.Dv MANPATH_BASE
1031preprocessor macro.
1032When running with
1033.Fl W Cm style ,
1034the search is done along the full search path as described in the
1035.Xr man 1
1036manual page, respecting the
1037.Fl m
1038and
1039.Fl M
1040command line options, the
1041.Ev MANPATH
1042environment variable, the
1043.Xr man.conf 5
1044file and falling back to the default of
1045.Pa /usr/share/man : Ns Pa /usr/X11R6/man : Ns Pa /usr/local/man ,
1046also configurable at compile time using the
1047.Dv MANPATH_DEFAULT
1048preprocessor macro.
1049.It Sy "trailing delimiter"
1050.Pq mdoc
1051The last argument of an
1052.Ic \&Ex , \&Fo , \&Nd , \&Nm , \&Os , \&Sh , \&Ss , \&St ,
1053or
1054.Ic \&Sx
1055macro ends with a trailing delimiter.
1056This is usually bad style and often indicates typos.
1057Most likely, the delimiter can be removed.
1058.It Sy "no blank before trailing delimiter"
1059.Pq mdoc
1060The last argument of a macro that supports trailing delimiter
1061arguments is longer than one byte and ends with a trailing delimiter.
1062Consider inserting a blank such that the delimiter becomes a separate
1063argument, thus moving it out of the scope of the macro.
1064.It Sy "fill mode already enabled, skipping"
1065.Pq man
1066A
1067.Ic \&fi
1068request occurs even though the document is still in fill mode,
1069or already switched back to fill mode.
1070It has no effect.
1071.It Sy "fill mode already disabled, skipping"
1072.Pq man
1073An
1074.Ic \&nf
1075request occurs even though the document already switched to no-fill mode
1076and did not switch back to fill mode yet.
1077It has no effect.
1078.It Sy "input text line longer than 80 bytes"
1079Consider breaking the input text line
1080at one of the blank characters before column 80.
1081.It Sy "verbatim \(dq--\(dq, maybe consider using \e(em"
1082.Pq mdoc
1083Even though the ASCII output device renders an em-dash as
1084.Qq \-\- ,
1085that is not a good way to write it in an input file
1086because it renders poorly on all other output devices.
1087.It Sy "function name without markup"
1088.Pq mdoc
1089A word followed by an empty pair of parentheses occurs on a text line.
1090Consider using an
1091.Ic \&Fn
1092or
1093.Ic \&Xr
1094macro.
1095.It Sy "whitespace at end of input line"
1096.Pq mdoc , man , roff
1097Whitespace at the end of input lines is almost never semantically
1098significant \(em but in the odd case where it might be, it is
1099extremely confusing when reviewing and maintaining documents.
1100.It Sy "bad comment style"
1101.Pq roff
1102Comment lines start with a dot, a backslash, and a double-quote character.
1103The
1104.Nm
1105utility treats the line as a comment line even without the backslash,
1106but leaving out the backslash might not be portable.
1107.El
1108.Ss Warnings related to the document prologue
1109.Bl -ohang
1110.It Sy "missing manual title, using UNTITLED"
1111.Pq mdoc , man
1112A
1113.Ic \&Dt
1114or
1115.Ic \&TH
1116macro has no arguments, its first argument is an empty string, or there is no
1117.Ic \&Dt
1118macro before the first non-prologue
1119.Xr mdoc 7
1120macro.
1121.It Sy "missing manual title, using \(dq\(dq"
1122.Pq man
1123An input document does not contain any
1124.Ic \&TH
1125macro.
1126.It Sy "missing manual section, using \(dq\(dq"
1127.Pq mdoc , man
1128A
1129.Ic \&Dt
1130or
1131.Ic \&TH
1132macro lacks the mandatory section argument.
1133.It Sy "unknown manual section"
1134.Pq mdoc
1135The section number in a
1136.Ic \&Dt
1137line is invalid, but still used.
1138.It Sy "filename/section mismatch"
1139.Pq mdoc , man
1140The name of the input file being processed is known and its file
1141name extension starts with a non-zero digit, but the
1142.Ic \&Dt
1143or
1144.Ic \&TH
1145macro contains a
1146.Ar section
1147argument that starts with a different non-zero digit.
1148The
1149.Ar section
1150argument is used as provided anyway.
1151Consider checking whether the file name or the argument need a correction.
1152.It Sy "missing date, using \(dq\(dq"
1153.Pq mdoc , man
1154The document was parsed as
1155.Xr mdoc 7
1156and it has no
1157.Ic \&Dd
1158macro, or the
1159.Ic \&Dd
1160macro has no arguments or only empty arguments;
1161or the document was parsed as
1162.Xr man 7
1163and it has no
1164.Ic \&TH
1165macro, or the
1166.Ic \&TH
1167macro has less than three arguments or its third argument is empty.
1168.It Sy "cannot parse date, using it verbatim"
1169.Pq mdoc , man
1170The date given in a
1171.Ic \&Dd
1172or
1173.Ic \&TH
1174macro does not follow the conventional format.
1175.It Sy "date in the future, using it anyway"
1176.Pq mdoc , man
1177The date given in a
1178.Ic \&Dd
1179or
1180.Ic \&TH
1181macro is more than a day ahead of the current system
1182.Xr time 3 .
1183.It Sy "missing Os macro, using \(dq\(dq"
1184.Pq mdoc
1185The default or current system is not shown in this case.
1186.It Sy "late prologue macro"
1187.Pq mdoc
1188A
1189.Ic \&Dd
1190or
1191.Ic \&Os
1192macro occurs after some non-prologue macro, but still takes effect.
1193.It Sy "prologue macros out of order"
1194.Pq mdoc
1195The prologue macros are not given in the conventional order
1196.Ic \&Dd ,
1197.Ic \&Dt ,
1198.Ic \&Os .
1199All three macros are used even when given in another order.
1200.El
1201.Ss Warnings regarding document structure
1202.Bl -ohang
1203.It Sy ".so is fragile, better use ln(1)"
1204.Pq roff
1205Including files only works when the parser program runs with the correct
1206current working directory.
1207.It Sy "no document body"
1208.Pq mdoc , man
1209The document body contains neither text nor macros.
1210An empty document is shown, consisting only of a header and a footer line.
1211.It Sy "content before first section header"
1212.Pq mdoc , man
1213Some macros or text precede the first
1214.Ic \&Sh
1215or
1216.Ic \&SH
1217section header.
1218The offending macros and text are parsed and added to the top level
1219of the syntax tree, outside any section block.
1220.It Sy "first section is not NAME"
1221.Pq mdoc
1222The argument of the first
1223.Ic \&Sh
1224macro is not
1225.Sq NAME .
1226This may confuse
1227.Xr makewhatis 8
1228and
1229.Xr apropos 1 .
1230.It Sy "NAME section without Nm before Nd"
1231.Pq mdoc
1232The NAME section does not contain any
1233.Ic \&Nm
1234child macro before the first
1235.Ic \&Nd
1236macro.
1237.It Sy "NAME section without description"
1238.Pq mdoc
1239The NAME section lacks the mandatory
1240.Ic \&Nd
1241child macro.
1242.It Sy "description not at the end of NAME"
1243.Pq mdoc
1244The NAME section does contain an
1245.Ic \&Nd
1246child macro, but other content follows it.
1247.It Sy "bad NAME section content"
1248.Pq mdoc
1249The NAME section contains plain text or macros other than
1250.Ic \&Nm
1251and
1252.Ic \&Nd .
1253.It Sy "missing comma before name"
1254.Pq mdoc
1255The NAME section contains an
1256.Ic \&Nm
1257macro that is neither the first one nor preceded by a comma.
1258.It Sy "missing description line, using \(dq\(dq"
1259.Pq mdoc
1260The
1261.Ic \&Nd
1262macro lacks the required argument.
1263The title line of the manual will end after the dash.
1264.It Sy "description line outside NAME section"
1265.Pq mdoc
1266An
1267.Ic \&Nd
1268macro appears outside the NAME section.
1269The arguments are printed anyway and the following text is used for
1270.Xr apropos 1 ,
1271but none of that behaviour is portable.
1272.It Sy "sections out of conventional order"
1273.Pq mdoc
1274A standard section occurs after another section it usually precedes.
1275All section titles are used as given,
1276and the order of sections is not changed.
1277.It Sy "duplicate section title"
1278.Pq mdoc
1279The same standard section title occurs more than once.
1280.It Sy "unexpected section"
1281.Pq mdoc
1282A standard section header occurs in a section of the manual
1283where it normally isn't useful.
1284.It Sy "cross reference to self"
1285.Pq mdoc , man
1286An
1287.Ic \&Xr
1288or
1289.Ic \&MR
1290macro refers to a name and section matching the section of the present
1291manual page and a name mentioned in an
1292.Ic \&Nm
1293macro in the NAME or SYNOPSIS section, or in an
1294.Ic \&Fn
1295or
1296.Ic \&Fo
1297macro in the SYNOPSIS.
1298Consider using
1299.Ic \&Nm
1300or
1301.Ic \&Fn
1302instead of
1303.Ic \&Xr .
1304.It Sy "unusual Xr order"
1305.Pq mdoc
1306In the SEE ALSO section, an
1307.Ic \&Xr
1308macro with a lower section number follows one with a higher number,
1309or two
1310.Ic \&Xr
1311macros referring to the same section are out of alphabetical order.
1312.It Sy "unusual Xr punctuation"
1313.Pq mdoc
1314In the SEE ALSO section, punctuation between two
1315.Ic \&Xr
1316macros differs from a single comma, or there is trailing punctuation
1317after the last
1318.Ic \&Xr
1319macro.
1320.It Sy "AUTHORS section without An macro"
1321.Pq mdoc
1322An AUTHORS sections contains no
1323.Ic \&An
1324macros, or only empty ones.
1325Probably, there are author names lacking markup.
1326.El
1327.Ss "Warnings related to macros and nesting"
1328.Bl -ohang
1329.It Sy "obsolete macro"
1330.Pq mdoc
1331See the
1332.Xr mdoc 7
1333manual for replacements.
1334.It Sy "macro neither callable nor escaped"
1335.Pq mdoc
1336The name of a macro that is not callable appears on a macro line.
1337It is printed verbatim.
1338If the intention is to call it, move it to its own input line;
1339otherwise, escape it by prepending
1340.Sq \e& .
1341.It Sy "skipping paragraph macro"
1342In
1343.Xr mdoc 7
1344documents, this happens
1345.Bl -dash -compact
1346.It
1347at the beginning and end of sections and subsections
1348.It
1349right before non-compact lists and displays
1350.It
1351at the end of items in non-column, non-compact lists
1352.It
1353and for multiple consecutive paragraph macros.
1354.El
1355In
1356.Xr man 7
1357documents, it happens
1358.Bl -dash -compact
1359.It
1360for empty
1361.Ic \&P ,
1362.Ic \&PP ,
1363and
1364.Ic \&LP
1365macros
1366.It
1367for
1368.Ic \&IP
1369macros having neither head nor body arguments
1370.It
1371for
1372.Ic \&br
1373or
1374.Ic \&sp
1375right after
1376.Ic \&SH
1377or
1378.Ic \&SS
1379.El
1380.It Sy "moving paragraph macro out of list"
1381.Pq mdoc
1382A list item in a
1383.Ic \&Bl
1384list contains a trailing paragraph macro.
1385The paragraph macro is moved after the end of the list.
1386.It Sy "skipping no-space macro"
1387.Pq mdoc
1388An input line begins with an
1389.Ic \&Ns
1390macro, or the next argument after an
1391.Ic \&Ns
1392macro is an isolated closing delimiter.
1393The macro is ignored.
1394.It Sy "blocks badly nested"
1395.Pq mdoc
1396If two blocks intersect, one should completely contain the other.
1397Otherwise, rendered output is likely to look strange in any output
1398format, and rendering in SGML-based output formats is likely to be
1399outright wrong because such languages do not support badly nested
1400blocks at all.
1401Typical examples of badly nested blocks are
1402.Qq Ic \&Ao \&Bo \&Ac \&Bc
1403and
1404.Qq Ic \&Ao \&Bq \&Ac .
1405In these examples,
1406.Ic \&Ac
1407breaks
1408.Ic \&Bo
1409and
1410.Ic \&Bq ,
1411respectively.
1412.It Sy "nested displays are not portable"
1413.Pq mdoc
1414A
1415.Ic \&Bd ,
1416.Ic \&D1 ,
1417or
1418.Ic \&Dl
1419display occurs nested inside another
1420.Ic \&Bd
1421display.
1422This works with
1423.Nm ,
1424but fails with most other implementations.
1425.It Sy "moving content out of list"
1426.Pq mdoc
1427A
1428.Ic \&Bl
1429list block contains text or macros before the first
1430.Ic \&It
1431macro.
1432The offending children are moved before the beginning of the list.
1433.It Sy "first macro on line"
1434Inside a
1435.Ic \&Bl Fl column
1436list, a
1437.Ic \&Ta
1438macro occurs as the first macro on a line, which is not portable.
1439.It Sy "line scope broken"
1440.Pq man
1441While parsing the next-line scope of the previous macro,
1442another macro is found that prematurely terminates the previous one.
1443The previous, interrupted macro is deleted from the parse tree.
1444.El
1445.Ss "Warnings related to missing arguments"
1446.Bl -ohang
1447.It Sy "skipping empty request"
1448.Pq roff , eqn
1449The macro name is missing from a macro definition request,
1450or an
1451.Xr eqn 7
1452control statement or operation keyword lacks its required argument.
1453.It Sy "conditional request controls empty scope"
1454.Pq roff
1455A conditional request is only useful if any of the following
1456follows it on the same logical input line:
1457.Bl -dash -compact
1458.It
1459The
1460.Sq \e{
1461keyword to open a multi-line scope.
1462.It
1463A request or macro or some text, resulting in a single-line scope.
1464.It
1465The immediate end of the logical line without any intervening whitespace,
1466resulting in next-line scope.
1467.El
1468Here, a conditional request is followed by trailing whitespace only,
1469and there is no other content on its logical input line.
1470Note that it doesn't matter whether the logical input line is split
1471across multiple physical input lines using
1472.Sq \e
1473line continuation characters.
1474This is one of the rare cases
1475where trailing whitespace is syntactically significant.
1476The conditional request controls a scope containing whitespace only,
1477so it is unlikely to have a significant effect,
1478except that it may control a following
1479.Ic \&el
1480clause.
1481.It Sy "skipping empty macro"
1482.Pq mdoc
1483The indicated macro has no arguments and hence no effect.
1484.It Sy "empty block"
1485.Pq mdoc , man
1486A
1487.Ic \&Bd ,
1488.Ic \&Bk ,
1489.Ic \&Bl ,
1490.Ic \&D1 ,
1491.Ic \&Dl ,
1492or
1493.Ic \&RS
1494block contains nothing in its body and will produce no output.
1495.It Sy "empty argument, using 0n"
1496.Pq mdoc
1497The required width is missing after
1498.Ic \&Bd
1499or
1500.Ic \&Bl
1501.Fl offset
1502or
1503.Fl width .
1504.It Sy "missing display type, using -ragged"
1505.Pq mdoc
1506The
1507.Ic \&Bd
1508macro is invoked without the required display type.
1509.It Sy "list type is not the first argument"
1510.Pq mdoc
1511In a
1512.Ic \&Bl
1513macro, at least one other argument precedes the type argument.
1514The
1515.Nm
1516utility copes with any argument order, but some other
1517.Xr mdoc 7
1518implementations do not.
1519.It Sy "missing -width in -tag list, using 8n"
1520.Pq mdoc
1521Every
1522.Ic \&Bl
1523macro having the
1524.Fl tag
1525argument requires
1526.Fl width ,
1527too.
1528.It Sy "missing utility name, using \(dq\(dq"
1529.Pq mdoc
1530The
1531.Ic \&Ex Fl std
1532macro is called without an argument before
1533.Ic \&Nm
1534has first been called with an argument.
1535.It Sy "missing function name, using \(dq\(dq"
1536.Pq mdoc
1537The
1538.Ic \&Fo
1539macro is called without an argument.
1540No function name is printed.
1541.It Sy "empty head in list item"
1542.Pq mdoc
1543In a
1544.Ic \&Bl
1545.Fl diag ,
1546.Fl hang ,
1547.Fl inset ,
1548.Fl ohang ,
1549or
1550.Fl tag
1551list, an
1552.Ic \&It
1553macro lacks the required argument.
1554The item head is left empty.
1555.It Sy "empty list item"
1556.Pq mdoc
1557In a
1558.Ic \&Bl
1559.Fl bullet ,
1560.Fl dash ,
1561.Fl enum ,
1562or
1563.Fl hyphen
1564list, an
1565.Ic \&It
1566block is empty.
1567An empty list item is shown.
1568.It Sy "missing argument, using next line"
1569.Pq mdoc
1570An
1571.Ic \&It
1572macro in a
1573.Ic \&Bd Fl column
1574list has no arguments.
1575While
1576.Nm
1577uses the text or macros of the following line, if any, for the cell,
1578other formatters may misformat the list.
1579.It Sy "missing font type, using \efR"
1580.Pq mdoc
1581A
1582.Ic \&Bf
1583macro has no argument.
1584It switches to the default font.
1585.It Sy "unknown font type, using \efR"
1586.Pq mdoc
1587The
1588.Ic \&Bf
1589argument is invalid.
1590The default font is used instead.
1591.It Sy "nothing follows prefix"
1592.Pq mdoc
1593A
1594.Ic \&Pf
1595macro has no argument, or only one argument and no macro follows
1596on the same input line.
1597This defeats its purpose; in particular, spacing is not suppressed
1598before the text or macros following on the next input line.
1599.It Sy "empty reference block"
1600.Pq mdoc
1601An
1602.Ic \&Rs
1603macro is immediately followed by an
1604.Ic \&Re
1605macro on the next input line.
1606Such an empty block does not produce any output.
1607.It Sy "missing section argument"
1608.Pq mdoc , man
1609An
1610.Ic \&Xr
1611or
1612.Ic \&MR
1613macro lacks its second, section number argument.
1614The first argument, i.e. the name, is printed, but without a section number.
1615In the case of
1616.Ic \&Xr ,
1617the parentheses are also omitted.
1618.It Sy "missing -std argument, adding it"
1619.Pq mdoc
1620An
1621.Ic \&Ex
1622or
1623.Ic \&Rv
1624macro lacks the required
1625.Fl std
1626argument.
1627The
1628.Nm
1629utility assumes
1630.Fl std
1631even when it is not specified, but other implementations may not.
1632.It Sy "missing option string, using \(dq\(dq"
1633.Pq man
1634The
1635.Ic \&OP
1636macro is invoked without any argument.
1637An empty pair of square brackets is shown.
1638.It Sy "missing resource identifier, using \(dq\(dq"
1639.Pq man
1640The
1641.Ic \&MT
1642or
1643.Ic \&UR
1644macro is invoked without any argument.
1645An empty pair of angle brackets is shown.
1646.It Sy "missing eqn box, using \(dq\(dq"
1647.Pq eqn
1648A diacritic mark or a binary operator is found,
1649but there is nothing to the left of it.
1650An empty box is inserted.
1651.El
1652.Ss "Warnings related to bad macro arguments"
1653.Bl -ohang
1654.It Sy "duplicate argument"
1655.Pq mdoc
1656A
1657.Ic \&Bd
1658or
1659.Ic \&Bl
1660macro has more than one
1661.Fl compact ,
1662more than one
1663.Fl offset ,
1664or more than one
1665.Fl width
1666argument.
1667All but the last instances of these arguments are ignored.
1668.It Sy "skipping duplicate argument"
1669.Pq mdoc
1670An
1671.Ic \&An
1672macro has more than one
1673.Fl split
1674or
1675.Fl nosplit
1676argument.
1677All but the first of these arguments are ignored.
1678.It Sy "skipping duplicate display type"
1679.Pq mdoc
1680A
1681.Ic \&Bd
1682macro has more than one type argument; the first one is used.
1683.It Sy "skipping duplicate list type"
1684.Pq mdoc
1685A
1686.Ic \&Bl
1687macro has more than one type argument; the first one is used.
1688.It Sy "skipping -width argument"
1689.Pq mdoc
1690A
1691.Ic \&Bl
1692.Fl column ,
1693.Fl diag ,
1694.Fl ohang ,
1695.Fl inset ,
1696or
1697.Fl item
1698list has a
1699.Fl width
1700argument.
1701That has no effect.
1702.It Sy "wrong number of cells"
1703In a line of a
1704.Ic \&Bl Fl column
1705list, the number of tabs or
1706.Ic \&Ta
1707macros is less than the number expected from the list header line
1708or exceeds the expected number by more than one.
1709Missing cells remain empty, and all cells exceeding the number of
1710columns are joined into one single cell.
1711.It Sy "unknown AT&T UNIX version"
1712.Pq mdoc
1713An
1714.Ic \&At
1715macro has an invalid argument.
1716It is used verbatim, with
1717.Qq "AT&T UNIX "
1718prefixed to it.
1719.It Sy "comma in function argument"
1720.Pq mdoc
1721An argument of an
1722.Ic \&Fa
1723or
1724.Ic \&Fn
1725macro contains a comma; it should probably be split into two arguments.
1726.It Sy "parenthesis in function name"
1727.Pq mdoc
1728The first argument of an
1729.Ic \&Fc
1730or
1731.Ic \&Fn
1732macro contains an opening or closing parenthesis; that's probably wrong,
1733parentheses are added automatically.
1734.It Sy "unknown library name"
1735.Pq mdoc , not on Ox
1736An
1737.Ic \&Lb
1738macro has an unknown name argument and will be rendered as
1739.Qq library Dq Ar name .
1740.It Sy "invalid content in Rs block"
1741.Pq mdoc
1742An
1743.Ic \&Rs
1744block contains plain text or non-% macros.
1745The bogus content is left in the syntax tree.
1746Formatting may be poor.
1747.It Sy "invalid Boolean argument"
1748.Pq mdoc
1749An
1750.Ic \&Sm
1751macro has an argument other than
1752.Cm on
1753or
1754.Cm off .
1755The invalid argument is moved out of the macro, which leaves the macro
1756empty, causing it to toggle the spacing mode.
1757.It Sy "argument contains two font escapes"
1758.Pq roff
1759The second argument of a
1760.Ic char
1761request contains more than one font escape sequence.
1762A wrong font may remain active after using the character.
1763.It Sy "unknown font, skipping request"
1764.Pq man , tbl
1765A
1766.Xr roff 7
1767.Ic \&ft
1768request or a
1769.Xr tbl 7
1770.Ic \&f
1771layout modifier has an unknown
1772.Ar font
1773argument.
1774.It Sy "ignoring distance argument"
1775.Pq roff
1776In addition to the margin character, an
1777.Ic \&mc
1778request has a second argument supposed to represent a distance, but the
1779.Nm
1780implementation of
1781.Ic \&mc
1782always ignores the second argument.
1783.It Sy "odd number of characters in request"
1784.Pq roff
1785A
1786.Ic \&tr
1787request contains an odd number of characters.
1788The last character is mapped to the blank character.
1789.El
1790.Ss "Warnings related to plain text"
1791.Bl -ohang
1792.It Sy "blank line in fill mode, using .sp"
1793.Pq mdoc , man
1794The meaning of blank input lines is only well-defined in non-fill mode:
1795In fill mode, line breaks of text input lines are not supposed to be
1796significant.
1797However, for compatibility with groff, blank lines in fill mode
1798are formatted like
1799.Ic \&sp
1800requests.
1801To request a paragraph break, use
1802.Ic \&Pp
1803or
1804.Ic \&PP
1805instead of a blank line.
1806.It Sy "tab in filled text"
1807.Pq mdoc , man
1808The meaning of tab characters is only well-defined in non-fill mode:
1809In fill mode, whitespace is not supposed to be significant
1810on text input lines.
1811As an implementation dependent choice, tab characters on text lines
1812are passed through to the formatters in any case.
1813Given that the text before the tab character will be filled,
1814it is hard to predict which tab stop position the tab will advance to.
1815.It Sy "new sentence, new line"
1816.Pq mdoc
1817A new sentence starts in the middle of a text line.
1818Start it on a new input line to help formatters produce correct spacing.
1819.It Sy "invalid escape sequence argument"
1820.Pq roff
1821The argument of an escape sequence is of an invalid form.
1822Invalid escape sequences are ignored.
1823.It Sy "undefined escape, printing literally"
1824.Pq roff
1825In an escape sequence, the first character
1826right after the leading backslash is invalid.
1827That character is printed literally,
1828which is equivalent to ignoring the backslash.
1829.It Sy "undefined string, using \(dq\(dq"
1830.Pq roff
1831If a string is used without being defined before,
1832its value is implicitly set to the empty string.
1833However, defining strings explicitly before use
1834keeps the code more readable.
1835.El
1836.Ss "Warnings related to tables"
1837.Bl -ohang
1838.It Sy "tbl line starts with span"
1839.Pq tbl
1840The first cell in a table layout line is a horizontal span
1841.Pq Sq Cm s .
1842Data provided for this cell is ignored, and nothing is printed in the cell.
1843.It Sy "tbl column starts with span"
1844.Pq tbl
1845The first line of a table layout specification
1846requests a vertical span
1847.Pq Sq Cm ^ .
1848Data provided for this cell is ignored, and nothing is printed in the cell.
1849.It Sy "skipping vertical bar in tbl layout"
1850.Pq tbl
1851A table layout specification contains more than two consecutive vertical bars.
1852A double bar is printed, all additional bars are discarded.
1853.El
1854.Ss "Errors related to tables"
1855.Bl -ohang
1856.It Sy "non-alphabetic character in tbl options"
1857.Pq tbl
1858The table options line contains a character other than a letter,
1859blank, or comma where the beginning of an option name is expected.
1860The character is ignored.
1861.It Sy "skipping unknown tbl option"
1862.Pq tbl
1863The table options line contains a string of letters that does not
1864match any known option name.
1865The word is ignored.
1866.It Sy "missing tbl option argument"
1867.Pq tbl
1868A table option that requires an argument is not followed by an
1869opening parenthesis, or the opening parenthesis is immediately
1870followed by a closing parenthesis.
1871The option is ignored.
1872.It Sy "wrong tbl option argument size"
1873.Pq tbl
1874A table option argument contains an invalid number of characters.
1875Both the option and the argument are ignored.
1876.It Sy "empty tbl layout"
1877.Pq tbl
1878A table layout specification is completely empty,
1879specifying zero lines and zero columns.
1880As a fallback, a single left-justified column is used.
1881.It Sy "invalid character in tbl layout"
1882.Pq tbl
1883A table layout specification contains a character that can neither
1884be interpreted as a layout key character nor as a layout modifier,
1885or a modifier precedes the first key.
1886The invalid character is discarded.
1887.It Sy "unmatched parenthesis in tbl layout"
1888.Pq tbl
1889A table layout specification contains an opening parenthesis,
1890but no matching closing parenthesis.
1891The rest of the input line, starting from the parenthesis, has no effect.
1892.It Sy "ignoring invalid column width in tbl layout"
1893.Pq tbl
1894A column width specifier in a table layout is empty, zero, or not a valid
1895numerical expression.
1896The width specifier is ignored and the column is made wide enough
1897to accommodate all its data cells.
1898.It Sy "ignoring excessive spacing in tbl layout"
1899.Pq tbl
1900A spacing modifier in a table layout is unreasonably large.
1901The default spacing of 3n is used instead.
1902.It Sy "tbl without any data cells"
1903.Pq tbl
1904A table does not contain any data cells.
1905It will probably produce no output.
1906.It Sy "ignoring data in spanned tbl cell"
1907.Pq tbl
1908A table cell is marked as a horizontal span
1909.Pq Sq Cm s
1910or vertical span
1911.Pq Sq Cm ^
1912in the table layout, but it contains data.
1913The data is ignored.
1914.It Sy "ignoring extra tbl data cells"
1915.Pq tbl
1916A data line contains more cells than the corresponding layout line.
1917The data in the extra cells is ignored.
1918.It Sy "data block open at end of tbl"
1919.Pq tbl
1920A data block is opened with
1921.Cm T{ ,
1922but never closed with a matching
1923.Cm T} .
1924The remaining data lines of the table are all put into one cell,
1925and any remaining cells stay empty.
1926.El
1927.Ss "Errors related to roff, mdoc, and man code"
1928.Bl -ohang
1929.It Sy "duplicate prologue macro"
1930.Pq mdoc
1931One of the prologue macros occurs more than once.
1932The last instance overrides all previous ones.
1933.It Sy "skipping late title macro"
1934.Pq mdoc
1935The
1936.Ic \&Dt
1937macro appears after the first non-prologue macro.
1938Traditional formatters cannot handle this because
1939they write the page header before parsing the document body.
1940Even though this technical restriction does not apply to
1941.Nm ,
1942traditional semantics is preserved.
1943The late macro is discarded including its arguments.
1944.It Sy "input stack limit exceeded, infinite loop?"
1945.Pq roff
1946Explicit recursion limits are implemented for the following features,
1947in order to prevent infinite loops:
1948.Bl -dash -compact
1949.It
1950expansion of nested escape sequences
1951including expansion of strings and number registers,
1952.It
1953expansion of nested user-defined macros,
1954.It
1955and
1956.Ic \&so
1957file inclusion.
1958.El
1959When a limit is hit, the output is incorrect, typically losing
1960some content, but the parser can continue.
1961.It Sy "skipping bad character"
1962.Pq mdoc , man , roff
1963The input file contains a byte that is not a printable
1964.Xr ascii 7
1965character.
1966The message mentions the character number.
1967The offending byte is replaced with a question mark
1968.Pq Sq \&? .
1969Consider editing the input file to replace the byte with an ASCII
1970transliteration of the intended character.
1971.It Sy "skipping unknown macro"
1972.Pq mdoc , man , roff
1973The first identifier on a request or macro line is neither recognized as a
1974.Xr roff 7
1975request, nor as a user-defined macro, nor, respectively, as an
1976.Xr mdoc 7
1977or
1978.Xr man 7
1979macro.
1980It may be mistyped or unsupported.
1981The request or macro is discarded including its arguments.
1982.It Sy "skipping request outside macro"
1983.Pq roff
1984A
1985.Ic shift
1986or
1987.Ic return
1988request occurs outside any macro definition and has no effect.
1989.It Sy "skipping insecure request"
1990.Pq roff
1991An input file attempted to run a shell command
1992or to read or write an external file.
1993Such attempts are denied for security reasons.
1994.It Sy "skipping item outside list"
1995.Pq mdoc , eqn
1996An
1997.Ic \&It
1998macro occurs outside any
1999.Ic \&Bl
2000list, or an
2001.Xr eqn 7
2002.Ic above
2003delimiter occurs outside any pile.
2004It is discarded including its arguments.
2005.It Sy "skipping column outside column list"
2006.Pq mdoc
2007A
2008.Ic \&Ta
2009macro occurs outside any
2010.Ic \&Bl Fl column
2011block.
2012It is discarded including its arguments.
2013.It Sy "skipping end of block that is not open"
2014.Pq mdoc , man , eqn , tbl , roff
2015Various syntax elements can only be used to explicitly close blocks
2016that have previously been opened.
2017An
2018.Xr mdoc 7
2019block closing macro, a
2020.Xr man 7
2021.Ic \&ME , \&RE
2022or
2023.Ic \&UE
2024macro, an
2025.Xr eqn 7
2026right delimiter or closing brace, or the end of an equation, table, or
2027.Xr roff 7
2028conditional request is encountered but no matching block is open.
2029The offending request or macro is discarded.
2030.It Sy "fewer RS blocks open, skipping"
2031.Pq man
2032The
2033.Ic \&RE
2034macro is invoked with an argument, but less than the specified number of
2035.Ic \&RS
2036blocks is open.
2037The
2038.Ic \&RE
2039macro is discarded.
2040.It Sy "inserting missing end of block"
2041.Pq mdoc , tbl
2042Various
2043.Xr mdoc 7
2044macros as well as tables require explicit closing by dedicated macros.
2045A block that doesn't support bad nesting
2046ends before all of its children are properly closed.
2047The open child nodes are closed implicitly.
2048.It Sy "appending missing end of block"
2049.Pq mdoc , man , eqn , tbl , roff
2050At the end of the document, an explicit
2051.Xr mdoc 7
2052block, a
2053.Xr man 7
2054next-line scope or
2055.Ic \&MT , \&RS
2056or
2057.Ic \&UR
2058block, an equation, table, or
2059.Xr roff 7
2060conditional or ignore block is still open.
2061The open block is closed implicitly.
2062.It Sy "escaped character not allowed in a name"
2063.Pq roff
2064Macro, string and register identifiers consist of printable,
2065non-whitespace ASCII characters.
2066Escape sequences and characters and strings expressed in terms of them
2067cannot form part of a name.
2068The first argument of an
2069.Ic \&am ,
2070.Ic \&as ,
2071.Ic \&de ,
2072.Ic \&ds ,
2073.Ic \&nr ,
2074or
2075.Ic \&rr
2076request, or any argument of an
2077.Ic \&rm
2078request, or the name of a request or user defined macro being called,
2079is terminated by an escape sequence.
2080In the cases of
2081.Ic \&as ,
2082.Ic \&ds ,
2083and
2084.Ic \&nr ,
2085the request has no effect at all.
2086In the cases of
2087.Ic \&am ,
2088.Ic \&de ,
2089.Ic \&rr ,
2090and
2091.Ic \&rm ,
2092what was parsed up to this point is used as the arguments to the request,
2093and the rest of the input line is discarded including the escape sequence.
2094When parsing for a request or a user-defined macro name to be called,
2095only the escape sequence is discarded.
2096The characters preceding it are used as the request or macro name,
2097the characters following it are used as the arguments to the request or macro.
2098.It Sy "using macro argument outside macro"
2099.Pq roff
2100The escape sequence \e$ occurs outside any macro definition
2101and expands to the empty string.
2102.It Sy "argument number is not numeric"
2103.Pq roff
2104The argument of the escape sequence \e$ is not a digit;
2105the escape sequence expands to the empty string.
2106.It Sy "negative argument, using 0"
2107.Pq roff
2108A
2109.Ic \&shift
2110request has a negative argument
2111or an argument that is negative due to integer overflow.
2112Macro argument numbering remains unchanged.
2113.It Sy "NOT IMPLEMENTED: Bd -file"
2114.Pq mdoc
2115For security reasons, the
2116.Ic \&Bd
2117macro does not support the
2118.Fl file
2119argument.
2120By requesting the inclusion of a sensitive file, a malicious document
2121might otherwise trick a privileged user into inadvertently displaying
2122the file on the screen, revealing the file content to bystanders.
2123The argument is ignored including the file name following it.
2124.It Sy "skipping display without arguments"
2125.Pq mdoc
2126A
2127.Ic \&Bd
2128block macro does not have any arguments.
2129The block is discarded, and the block content is displayed in
2130whatever mode was active before the block.
2131.It Sy "missing list type, using -item"
2132.Pq mdoc
2133A
2134.Ic \&Bl
2135macro fails to specify the list type.
2136.It Sy "argument is not numeric, using 1"
2137.Pq roff
2138The argument of a
2139.Ic \&ce
2140request is not a number.
2141.It Sy "argument is not a character"
2142.Pq roff
2143The first argument of a
2144.Ic char
2145request is neither a single ASCII character
2146nor a single character escape sequence.
2147The request is ignored including all its arguments.
2148.It Sy "skipping unusable escape sequence"
2149.Pq roff
2150The first argument of an
2151.Ic mc
2152request is neither a single ASCII character
2153nor a single character escape sequence.
2154All arguments are ignored and printing of a margin character is disabled.
2155.It Sy "missing manual name, using \(dq\(dq"
2156.Pq mdoc , man
2157The first call to
2158.Ic \&Nm ,
2159or any call in the NAME section, lacks the required argument, or
2160.Ic \&MR
2161is called without any argument.
2162.It Sy "uname(3) system call failed, using UNKNOWN"
2163.Pq mdoc
2164The
2165.Ic \&Os
2166macro is called without arguments, and the
2167.Xr uname 3
2168system call failed.
2169As a workaround,
2170.Nm
2171can be compiled with
2172.Sm off
2173.Fl D Cm OSNAME=\(dq\e\(dq Ar string Cm \e\(dq\(dq .
2174.Sm on
2175.It Sy "unknown standard specifier"
2176.Pq mdoc
2177An
2178.Ic \&St
2179macro has an unknown argument and is discarded.
2180.It Sy "skipping request without numeric argument"
2181.Pq roff , eqn
2182An
2183.Ic \&it
2184request or an
2185.Xr eqn 7
2186.Ic \&size
2187or
2188.Ic \&gsize
2189statement has a non-numeric or negative argument or no argument at all.
2190The invalid request or statement is ignored.
2191.It Sy "excessive shift"
2192.Pq roff
2193The argument of a
2194.Ic shift
2195request is larger than the number of arguments of the macro that is
2196currently being executed.
2197All macro arguments are deleted and \en(.$ is set to zero.
2198.It Sy "NOT IMPLEMENTED: .so with absolute path or \(dq..\(dq"
2199.Pq roff
2200For security reasons,
2201.Nm
2202allows
2203.Ic \&so
2204file inclusion requests only with relative paths
2205and only without ascending to any parent directory.
2206By requesting the inclusion of a sensitive file, a malicious document
2207might otherwise trick a privileged user into inadvertently displaying
2208the file on the screen, revealing the file content to bystanders.
2209.Nm
2210only shows the path as it appears behind
2211.Ic \&so .
2212.It Sy ".so request failed"
2213.Pq roff
2214Servicing a
2215.Ic \&so
2216request requires reading an external file, but the file could not be
2217opened.
2218.Nm
2219only shows the path as it appears behind
2220.Ic \&so .
2221.It Sy "skipping all arguments"
2222.Pq mdoc , man , eqn , roff
2223An
2224.Xr mdoc 7
2225.Ic \&Bt ,
2226.Ic \&Ed ,
2227.Ic \&Ef ,
2228.Ic \&Ek ,
2229.Ic \&El ,
2230.Ic \&Lp ,
2231.Ic \&Pp ,
2232.Ic \&Re ,
2233.Ic \&Rs ,
2234or
2235.Ic \&Ud
2236macro, an
2237.Ic \&It
2238macro in a list that don't support item heads, a
2239.Xr man 7
2240.Ic \&LP ,
2241.Ic \&P ,
2242or
2243.Ic \&PP
2244macro, an
2245.Xr eqn 7
2246.Ic \&EQ
2247or
2248.Ic \&EN
2249macro, or a
2250.Xr roff 7
2251.Ic \&br ,
2252.Ic \&fi ,
2253or
2254.Ic \&nf
2255request or
2256.Sq \&..
2257block closing request is invoked with at least one argument.
2258All arguments are ignored.
2259.It Sy "skipping excess arguments"
2260.Pq mdoc , man , roff
2261A macro or request is invoked with too many arguments:
2262.Bl -dash -offset 2n -width 2n -compact
2263.It
2264.Ic \&Fo ,
2265.Ic \&MT ,
2266.Ic \&PD ,
2267.Ic \&RS ,
2268.Ic \&UR ,
2269.Ic \&ft ,
2270or
2271.Ic \&sp
2272with more than one argument
2273.It
2274.Ic \&An
2275with another argument after
2276.Fl split
2277or
2278.Fl nosplit
2279.It
2280.Ic \&RE
2281with more than one argument or with a non-integer argument
2282.It
2283.Ic \&OP
2284or a request of the
2285.Ic \&de
2286family with more than two arguments
2287.It
2288.Ic \&Dt
2289or
2290.Ic \&MR
2291with more than three arguments
2292.It
2293.Ic \&TH
2294with more than five arguments
2295.It
2296.Ic \&Bd ,
2297.Ic \&Bk ,
2298or
2299.Ic \&Bl
2300with invalid arguments
2301.El
2302The excess arguments are ignored.
2303.El
2304.Ss "Errors related to escape sequences"
2305.Bl -ohang
2306.It Sy "incomplete escape sequence"
2307.Pq roff
2308The end of the input line is encountered
2309while parsing the argument of an escape sequence.
2310In this case,
2311.Ic \e*
2312and
2313.Ic \en
2314expand to an empty string,
2315.Ic \eB
2316to the digit
2317.Sq 0 ,
2318and
2319.Ic \ew
2320to the length of the incomplete argument.
2321All other incomplete escape sequences are ignored.
2322.It Sy "invalid special character"
2323.Pq roff
2324A special character escape sequence is invalid,
2325for example a Unicode sequence pointing to a surrogate
2326or beyond the Unicode range, a \e[char...] escape sequence
2327representing a control character or pointing beyond the
2328.Vt unsigned char
2329range, or an invalid variable-length form
2330of a single-byte character escape sequence, for example writing
2331.Qq \e[e]
2332or
2333.Qq \e[~]
2334instead of
2335.Qq \ee
2336or
2337.Qq \e~ ,
2338respectively.
2339The escape sequence is ignored.
2340.It Sy "unknown special character"
2341.Pq roff
2342The name given in a special character escape sequence is not known to
2343.Nm .
2344The escape sequence is ignored.
2345.It Sy "invalid escape argument delimiter"
2346.Pq roff
2347An escape sequence that expects a numerical argument
2348attempts to employ one of the characters
2349.Qq " %&()*+-./0123456789:<=>"
2350as an argument delimiter.
2351The escape sequence is ignored including the invalid opening delimiter
2352and the rest of the argument may appear as output text.
2353While various characters can be used as argument delimiters,
2354using the apostrophe-quote character
2355.Pq Sq \(aq
2356is recommended for readability and robustness.
2357.El
2358.Ss Unsupported features
2359.Bl -ohang
2360.It Sy "input too large"
2361.Pq mdoc , man
2362Currently,
2363.Nm
2364cannot handle input files larger than its arbitrary size limit
2365of 2^31 bytes (2 Gigabytes).
2366Since useful manuals are always small, this is not a problem in practice.
2367Parsing is aborted as soon as the condition is detected.
2368.It Sy "unsupported control character"
2369.Pq roff
2370An ASCII control character supported by other
2371.Xr roff 7
2372implementations but not by
2373.Nm
2374was found in an input file.
2375It is replaced by a question mark.
2376.It Sy "unsupported escape sequence"
2377.Pq roff
2378An input file contains an escape sequence supported by GNU troff
2379or Heirloom troff but not by
2380.Nm ,
2381and it is likely that this will cause information loss
2382or considerable misformatting.
2383.It Sy "unsupported roff request"
2384.Pq roff
2385An input file contains a
2386.Xr roff 7
2387request supported by GNU troff or Heirloom troff but not by
2388.Nm ,
2389and it is likely that this will cause information loss
2390or considerable misformatting.
2391.It Sy "eqn delim option in tbl"
2392.Pq eqn , tbl
2393The options line of a table defines equation delimiters.
2394Any equation source code contained in the table will be printed unformatted.
2395.It Sy "unsupported table layout modifier"
2396.Pq tbl
2397A table layout specification contains an
2398.Sq Cm m
2399modifier.
2400The modifier is discarded.
2401.It Sy "ignoring macro in table"
2402.Pq tbl , mdoc , man
2403A table contains an invocation of an
2404.Xr mdoc 7
2405or
2406.Xr man 7
2407macro or of an undefined macro.
2408The macro is ignored, and its arguments are handled
2409as if they were a text line.
2410.It Sy "skipping tbl in -Tman mode"
2411.Pq mdoc , tbl
2412An input file contains the
2413.Ic \&TS
2414macro.
2415This message is only generated in
2416.Fl T Cm man
2417output mode, where
2418.Xr tbl 7
2419input is not supported.
2420.It Sy "skipping eqn in -Tman mode"
2421.Pq mdoc , eqn
2422An input file contains the
2423.Ic \&EQ
2424macro.
2425This message is only generated in
2426.Fl T Cm man
2427output mode, where
2428.Xr eqn 7
2429input is not supported.
2430.El
2431.Ss Bad command line arguments
2432.Bl -ohang
2433.It Sy "bad command line argument"
2434The argument following one of the
2435.Fl IKMmOTW
2436command line options is invalid, or a
2437.Ar file
2438given as a command line argument cannot be opened.
2439.It Sy "duplicate command line argument"
2440The
2441.Fl I
2442command line option was specified twice.
2443.It Sy "option has a superfluous value"
2444An argument to the
2445.Fl O
2446option has a value but does not accept one.
2447.It Sy "missing option value"
2448An argument to the
2449.Fl O
2450option has no argument but requires one.
2451.It Sy "bad option value"
2452An argument to the
2453.Fl O
2454.Cm indent
2455or
2456.Cm width
2457option has an invalid value.
2458.It Sy "duplicate option value"
2459The same
2460.Fl O
2461option is specified more than once.
2462.It Sy "no such tag"
2463The
2464.Fl O Cm tag
2465option was specified but the tag was not found in any of the displayed
2466manual pages.
2467.It Sy "\-Tmarkdown unsupported for man(7) input"
2468.Pq man
2469The
2470.Fl T Cm markdown
2471option was specified but an input file uses the
2472.Xr man 7
2473language.
2474No output is produced for that input file.
2475.El
2476.Sh SEE ALSO
2477.Xr apropos 1 ,
2478.Xr man 1 ,
2479.Xr eqn 7 ,
2480.Xr man 7 ,
2481.Xr mandoc_char 7 ,
2482.Xr mdoc 7 ,
2483.Xr roff 7 ,
2484.Xr tbl 7
2485.Sh HISTORY
2486The
2487.Nm
2488utility first appeared in
2489.Ox 4.8 .
2490The option
2491.Fl I
2492appeared in
2493.Ox 5.2 ,
2494and
2495.Fl aCcfhKklMSsw
2496in
2497.Ox 5.7 .
2498.Sh AUTHORS
2499.An -nosplit
2500The
2501.Nm
2502utility was written by
2503.An Kristaps Dzonsons Aq Mt kristaps@bsd.lv
2504and is maintained by
2505.An Ingo Schwarze Aq Mt schwarze@openbsd.org .
2506