1 .\" $Id: roff.7,v 1.34 2011/11/06 14:43:14 kristaps Exp $
3 .\" Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
4 .\" Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
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.
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.
18 .Dd $Mdocdate: November 6 2011 $
23 .Nd roff language reference for mandoc
27 language is a general purpose text formatting language.
28 Since traditional implementations of the
32 manual formatting languages are based on it,
33 many real-world manuals use small numbers of
35 requests intermixed with their
40 To properly format such manuals, the
42 utility supports a tiny subset of
45 Only these requests supported by
47 are documented in the present manual,
48 together with the basic language syntax shared by
59 Input lines beginning with the control character
61 are parsed for requests and macros.
67 Requests change the processing state and manipulate the formatting;
68 some macros also define the document structure and produce formatted
72 is accepted as an alternative control character,
78 Lines not beginning with control characters are called
80 They provide free-form text to be printed; the formatting of the text
81 depends on the respective processing context.
84 documents may contain only graphable 7-bit ASCII characters, the space
85 character, and, in certain circumstances, the tab character.
86 The back-space character
88 indicates the start of an escape sequence for
90 .Sx Special Characters ,
91 .Sx Predefined Strings ,
93 user-defined strings defined using the
97 Text following an escaped double-quote
99 whether in a request, macro, or text line, is ignored to the end of the line.
100 A request line beginning with a control character and comment escape
103 Furthermore, request lines with only a control character and optional
104 trailing whitespace are stripped from input.
107 .Bd -literal -offset indent -compact
108 \&.\e\(dq This is a comment line.
109 \&.\e\(dq The next line is ignored:
111 \&.Sh EXAMPLES \e\(dq This is a comment, too.
112 \&example text \e\(dq And so is this.
114 .Ss Special Characters
115 Special characters are used to encode special glyphs and are rendered
116 differently across output media.
117 They may occur in request, macro, and text lines.
118 Sequences begin with the escape character
120 followed by either an open-parenthesis
122 for two-character sequences; an open-bracket
124 for n-character sequences (terminated at a close-bracket
126 or a single one character sequence.
129 .Bl -tag -width Ds -offset indent -compact
131 Two-letter em dash escape.
133 One-letter backslash escape.
140 Terms may be text-decorated using the
142 escape followed by an indicator: B (bold), I (italic), R (regular), or P
143 (revert to previous mode).
144 A numerical representation 3, 2, or 1 (bold, italic, and regular,
145 respectively) may be used instead.
146 The indicator or numerical representative may be preceded by C
147 (constant-width), which is ignored.
150 .Bl -tag -width Ds -offset indent -compact
152 Write in bold, then switch to regular font mode.
153 .It Li \efIitalic\efP
154 Write in italic, then return to previous font mode.
161 which encourages semantic annotation.
162 .Ss Predefined Strings
163 Predefined strings, like
164 .Sx Special Characters ,
165 mark special output glyphs.
166 Predefined strings are escaped with the slash-asterisk,
176 .Bl -tag -width Ds -offset indent -compact
178 Two-letter ampersand predefined string.
180 One-letter double-quote predefined string.
183 Predefined strings are not recommended for use,
184 as they differ across implementations.
189 Manuals using these predefined strings are almost certainly not portable.
191 Whitespace consists of the space character.
192 In text lines, whitespace is preserved within a line.
193 In request and macro lines, whitespace delimits arguments and is discarded.
195 Unescaped trailing spaces are stripped from text line input unless in a
197 In general, trailing whitespace on any input line is discouraged for
198 reasons of portability.
199 In the rare case that a blank character is needed at the end of an
200 input line, it may be forced by
203 Literal space characters can be produced in the output
204 using escape sequences.
205 In macro lines, they can also be included in arguments using quotation; see
209 Blank text lines, which may include whitespace, are only permitted
210 within literal contexts.
211 If the first character of a text line is a space, that line is printed
212 with a leading newline.
214 Many requests and macros support scaled widths for their arguments.
215 The syntax for a scaled width is
216 .Sq Li [+-]?[0-9]*.[0-9]*[:unit:] ,
217 where a decimal must be preceded or followed by at least one digit.
218 Negative numbers, while accepted, are truncated to zero.
220 The following scaling units are accepted:
222 .Bl -tag -width Ds -offset indent -compact
235 default vertical span
247 default horizontal span
252 Using anything other than
258 is necessarily non-portable across output media.
262 If a scaling unit is not provided, the numerical value is interpreted
263 under the default rules of
265 for vertical spaces and
270 .Bl -tag -width ".Bl -tag -width 2i" -offset indent -compact
271 .It Li \&.Bl -tag -width 2i
272 two-inch tagged list indentation in
275 two-inch tagged list indentation in
281 Each sentence should terminate at the end of an input line.
282 By doing this, a formatter will be able to apply the proper amount of
283 spacing after the end of sentence (unescaped) period, exclamation mark,
284 or question mark followed by zero or more non-sentence closing
293 The proper spacing is also intelligently preserved if a sentence ends at
294 the boundary of a macro line.
297 .Bd -literal -offset indent -compact
298 Do not end sentences mid-line like this. Instead,
299 end a sentence like this.
300 A macro would end like this:
304 A request or macro line consists of:
308 the control character
312 at the beginning of the line,
314 optionally an arbitrary amount of whitespace,
316 the name of the request or the macro, which is one word of arbitrary
317 length, terminated by whitespace,
319 and zero or more arguments delimited by whitespace.
322 Thus, the following request lines are all equivalent:
323 .Bd -literal -offset indent
329 Macros are provided by the
333 languages and can be defined by the
336 When called, they follow the same syntax as requests, except that
337 macro arguments may optionally be quoted by enclosing them
338 in double quote characters
340 Quoted text, even if it contains whitespace or would cause
341 a macro invocation when unquoted, is always considered literal text.
342 Inside quoted text, pairs of double quote characters
344 resolve to single double quote characters.
346 To be recognised as the beginning of a quoted argument, the opening
347 quote character must be preceded by a space character.
348 A quoted argument extends to the next double quote character that is not
349 part of a pair, or to the end of the input line, whichever comes earlier.
350 Leaving out the terminating double quote character at the end of the line
352 For clarity, if more arguments follow on the same input line,
353 it is recommended to follow the terminating double quote character
354 by a space character; in case the next character after the terminating
355 double quote character is anything else, it is regarded as the beginning
356 of the next, unquoted argument.
358 Both in quoted and unquoted arguments, pairs of backslashes
360 resolve to single backslashes.
361 In unquoted arguments, space characters can alternatively be included
362 by preceding them with a backslash
364 but quoting is usually better for clarity.
367 .Bl -tag -width Ds -offset indent -compact
368 .It Li .Fn strlen \(dqconst char *s\(dq
371 into one function argument.
377 would be considered separate arguments.
378 .It Li .Op \(dqFl a\(dq
381 as literal text instead of a flag macro.
383 .Sh REQUEST REFERENCE
387 parser recognises the following requests.
390 language defines many more requests not implemented in
393 Set line adjustment mode.
394 This line-scoped request is intended to have one argument to select
395 normal, left, right, or centre adjustment for subsequent text.
396 Currently, it is ignored including its arguments,
397 and the number of arguments is not checked.
399 Append to a macro definition.
400 The syntax of this request is the same as that of
402 It is currently ignored by
406 Append to a macro definition, specifying the macro name indirectly.
407 The syntax of this request is the same as that of
409 It is currently ignored by
413 Append to a macro definition, switching roff compatibility mode off
414 during macro execution.
415 The syntax of this request is the same as that of
417 It is currently ignored by
424 Its syntax can be either
425 .Bd -literal -offset indent
426 .Pf . Cm \&de Ar name
432 .Bd -literal -offset indent
433 .Pf . Cm \&de Ar name Ar end
438 Both forms define or redefine the macro
441 .Ar macro definition ,
442 which may consist of one or more input lines, including the newline
443 characters terminating each line, optionally containing calls to
447 macros or high-level macros like
451 macros, whichever applies to the document in question.
455 macro works in the same way as for
460 .Ar macro definition ,
461 and after that, it is also evaluated as a
465 macro, but not as a high-level macro.
467 The macro can be invoked later using the syntax
469 .D1 Pf . Ar name Op Ar argument Op Ar argument ...
471 Regarding argument parsing, see
475 The line invoking the macro will be replaced
476 in the input stream by the
477 .Ar macro definition ,
478 replacing all occurrences of
483 .Ar N Ns th Ar argument .
485 .Bd -literal -offset indent
487 \efI\e^\e\e$1\e^\efP\e\e$2
494 .D1 \efI\e^XtFree\e^\efP.
496 in the input stream, and thus in the output: \fI\^XtFree\^\fP.
498 Since macros and user-defined strings share a common string table,
501 clobbers the user-defined string
505 can also be printed using the
507 string interpolation syntax described below
509 but this is rarely useful because every macro definition contains at least
510 one explicit newline character.
512 In order to prevent endless recursion, both groff and
514 limit the stack depth for expanding macros and strings
515 to a large, but finite number.
516 Do not rely on the exact value of this limit.
520 macro, specifying the macro name indirectly.
521 The syntax of this request is the same as that of
523 It is currently ignored by
529 macro that will be executed with
531 compatibility mode switched off during macro execution.
532 This is a GNU extension not available in traditional
534 implementations and not even in older versions of groff.
539 compatibility mode at all, it handles this request as an alias for
542 Define a user-defined string.
543 Its syntax is as follows:
545 .D1 Pf . Cm \&ds Ar name Oo \(dq Oc Ns Ar string
551 arguments are space-separated.
554 begins with a double-quote character, that character will not be part
556 All remaining characters on the input line form the
558 including whitespace and double-quote characters, even trailing ones.
562 can be interpolated into subsequent text by using
563 .No \e* Ns Bq Ar name
566 of arbitrary length, or \e*(NN or \e*N if the length of
568 is two or one characters, respectively.
569 Interpolation can be prevented by escaping the leading backslash;
570 that is, an asterisk preceded by an even number of backslashes
571 does not trigger string interpolation.
573 Since user-defined strings and macros share a common string table,
580 used for defining a string can also be invoked as a macro,
581 in which case the following input line will be appended to the
583 forming a new input line passed to the
587 .Bd -literal -offset indent
598 Such abuse is of course strongly discouraged.
602 half of an if/else conditional.
603 Pops a result off the stack of conditional evaluations pushed by
605 and uses it as its conditional.
606 If no stack entries are present (e.g., due to no prior
609 then false is assumed.
610 The syntax of this request is similar to
612 except that the conditional is missing.
614 End an equation block.
618 Begin an equation block.
621 for a description of the equation language.
623 Set automatic hyphenation mode.
624 This line-scoped request is currently ignored.
628 half of an if/else conditional.
629 The result of the conditional is pushed into a stack used by subsequent
632 which may be separated by any intervening input (or not exist at all).
633 Its syntax is equivalent to
636 Begins a conditional.
637 Right now, the conditional evaluates to true
638 if and only if it starts with the letter
640 indicating processing in nroff style as opposed to troff style.
641 If a conditional is false, its children are not processed, but are
642 syntactically interpreted to preserve the integrity of the input
650 which may lead to interesting results, but
652 .D1 \&.if t .if t \e{\e
654 will continue to syntactically interpret to the block close of the final
656 Sub-conditionals, in this case, obviously inherit the truth value of
658 This request has the following syntax:
659 .Bd -literal -offset indent
664 .Bd -literal -offset indent
668 .Bd -literal -offset indent
673 .Bd -literal -offset indent
678 COND is a conditional statement.
679 roff allows for complicated conditionals; mandoc is much simpler.
680 At this time, mandoc supports only
689 All other invocations are read up to the next end of line or space and
692 If the BODY section is begun by an escaped brace
694 scope continues until a closing-brace escape sequence
696 If the BODY is not enclosed in braces, scope continues until
698 If the COND is followed by a BODY on the same line, whether after a
699 brace or not, then requests and macros
701 begin with a control character.
702 It is generally more intuitive, in this case, to write
703 .Bd -literal -offset indent
710 than having the request or macro follow as
712 .D1 \&.if COND \e{ .foo
714 The scope of a conditional is always parsed, but only executed if the
715 conditional evaluates to true.
719 is converted into a zero-width escape sequence if not passed as a
728 being considered an argument of the
733 Its syntax can be either
734 .Bd -literal -offset indent
741 .Bd -literal -offset indent
747 In the first case, input is ignored until a
749 request is encountered on its own line.
750 In the second case, input is ignored until the specified
752 macro is encountered.
753 Do not use the escape character
755 anywhere in the definition of
757 it would cause very strange behaviour.
761 macro is a roff request or a roff macro, like in
765 the subsequent invocation of
767 will first terminate the
769 then be invoked as usual.
770 Otherwise, it only terminates the
772 and arguments following it or the
774 request are discarded.
776 Declare the need for the specified minimum vertical space
777 before the next trap or the bottom of the page.
778 This line-scoped request is currently ignored.
780 Turn off automatic hyphenation mode.
781 This line-scoped request is currently ignored.
783 Remove a request, macro or string.
784 This request is intended to have one argument,
785 the name of the request, macro or string to be undefined.
786 Currently, it is ignored including its arguments,
787 and the number of arguments is not checked.
790 A register is an arbitrary string value that defines some sort of state,
791 which influences parsing and/or formatting.
792 Its syntax is as follows:
794 .D1 Pf \. Cm \&nr Ar name Ar value
798 may, at the moment, only be an integer.
799 So far, only the following register
804 If set to a positive integer value, certain
806 macros will behave in the same way as in the
809 If set to 0, these macros will behave in the same way as outside the
811 section, even when called within the
814 Note that starting a new
818 macro will reset this register.
821 Turn on no-space mode.
822 This line-scoped request is intended to take no arguments.
823 Currently, it is ignored including its arguments,
824 and the number of arguments is not checked.
827 This line-scoped request is intended to take one numerical argument.
828 Currently, it is ignored including its arguments,
829 and the number of arguments is not checked.
831 Include a source file.
832 Its syntax is as follows:
834 .D1 Pf \. Cm \&so Ar file
838 will be read and its contents processed as input in place of the
841 To avoid inadvertent inclusion of unrelated files,
843 only accepts relative paths not containing the strings
849 This line-scoped request can take an arbitrary number of arguments.
850 Currently, it is ignored including its arguments.
852 Output character translation.
853 Its syntax is as follows:
855 .D1 Pf \. Cm \&tr Ar [ab]+
859 characters are replaced
863 Replacement (or origin) characters may also be character escapes; thus,
867 replaces all invocations of \e(xx with \e(yy.
869 Re-start a table layout, retaining the options of the prior table
878 Begin a table, which formats input in aligned rows and columns.
881 for a description of the tbl language.
883 This section documents compatibility between mandoc and other other
885 implementations, at this time limited to GNU troff
889 refers to groff version 1.15.
899 macros are considered regular macros.
902 implementations, these are special macros that must be specified without
903 spacing between the control character (which must be a period) and the
908 register is only compatible with OpenBSD's groff-1.15.
910 Historic groff did not accept white-space before a custom
918 and family would print funny white-spaces with historic groff when
919 using the next-line syntax.
929 .%A Joseph F. Ossanna
930 .%A Brian W. Kernighan
931 .%I AT&T Bell Laboratories
932 .%T Troff User's Manual
933 .%R Computing Science Technical Report
935 .%C Murray Hill, New Jersey
937 .%U http://www.kohala.com/start/troff/cstr54.ps
940 .%A Joseph F. Ossanna
941 .%A Brian W. Kernighan
943 .%T Heirloom Documentation Tools Nroff/Troff User's Manual
944 .%D September 17, 2007
945 .%U http://heirloom.sourceforge.net/doctools/troff.pdf
948 The RUNOFF typesetting system was written in PL/1 for the CTSS
949 operating system by Jerome ("Jerry") E. Saltzer in 1961.
950 It was first used as the main documentation tool by Multics since 1963.
951 Robert ("Bob") H. Morris ported it to the GE-635 and called it
953 Doug McIlroy rewrote it in BCPL in 1969,
954 Joseph F. Ossanna rewrote it in PDP-11 assembly in 1973,
955 and Brian W. Kernighan rewrote it in C in 1975.
960 reference was written by
961 .An Kristaps Dzonsons ,
962 .Mt kristaps@bsd.lv ;
965 .Mt schwarze@openbsd.org .