1 .\" $Id: roff.7,v 1.6 2010/05/24 22:25:58 schwarze Exp $
3 .\" Copyright (c) 2010 Kristaps Dzonsons <kristaps@bsd.lv>
5 .\" Permission to use, copy, modify, and distribute this software for any
6 .\" purpose with or without fee is hereby granted, provided that the above
7 .\" copyright notice and this permission notice appear in all copies.
9 .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 .Dd $Mdocdate: May 24 2010 $
22 .Nd roff language reference
26 language is a general-purpose text-formatting language. The purpose of
27 this document is to consistently describe those language constructs
30 utility. It is a work in progress.
34 document follows simple rules: lines beginning with the control
39 are parsed for macros. Other lines are interpreted within the scope of
41 .Bd -literal -offset indent
42 \&.xx Macro lines change control state.
43 Other lines are interpreted within the current state.
47 documents may contain only graphable 7-bit ASCII characters, the space
48 character, and, in certain circumstances, the tab character. All
53 Macros are arbitrary in length and begin with a control character ,
57 at the beginning of the line.
58 An arbitrary amount of whitespace may sit between the control character
60 Thus, the following are equivalent:
61 .Bd -literal -offset indent
66 This section is a canonical reference of all macros, arranged
69 The syntax of this macro is the same as that of
71 except that a leading argument must be specified.
72 It is ignored, as are its children.
74 The syntax of this macro is the same as that of
76 except that a leading argument must be specified.
77 It is ignored, as are its children.
79 The syntax of this macro is the same as that of
81 except that a leading argument must be specified.
82 It is ignored, as are its children.
84 The syntax of this macro is the same as that of
86 except that a leading argument must be specified.
87 It is ignored, as are its children.
89 The syntax of this macro is the same as that of
91 except that a leading argument must be specified.
92 It is ignored, as are its children.
95 This macro is intended to have two arguments,
96 the name of the string to define and its content.
97 Currently, it is ignored including its arguments,
98 and the number of arguments is not checked.
100 The syntax of this macro is the same as that of
102 except that a leading argument must be specified.
103 It is ignored, as are its children.
107 half of an if/else conditional.
108 Pops a result off the stack of conditional evaluations pushed by
110 and uses it as its conditional.
111 If no stack entries are present (e.g., due to no prior
114 then false is assumed.
115 The syntax of this macro is similar to
117 except that the conditional is missing.
121 half of an if/else conditional.
122 The result of the conditional is pushed into a stack used by subsequent
125 which may be separated by any intervening input (or not exist at all).
126 Its syntax is equivalent to
129 Begins a conditional that always evaluates to false.
130 If a conditional is false, its children are not processed, but are
131 syntactically interpreted to preserve the integrity of the input
139 which may lead to interesting results, but
141 .D1 \&.if t \e .if t \e{\e
143 will continue to syntactically interpret to the block close of the final
145 Sub-conditionals, in this case, obviously inherit the truth value of
147 This macro has the following syntax:
149 .Bd -literal -offset indent -compact
154 .Bd -literal -offset indent -compact
158 .Bd -literal -offset indent -compact
163 .Bd -literal -offset indent -compact
168 COND is a conditional (for the time being, this always evaluates to
171 If the BODY section is begun by an escaped brace
173 scope continues until a closing-brace macro
175 If the BODY is not enclosed in braces, scope continues until the next
177 If the COND is followed by a BODY on the same line, whether after a
178 brace or not, then macros
180 begin with a control character.
181 It is generally more intuitive, in this case, to write
182 .Bd -literal -offset indent
189 than having the macro follow as
191 .D1 \&.if COND \e{ .foo
193 The scope of a conditional is always parsed, but only executed if the
194 conditional evaluates to true.
196 Note that text subsequent a
199 Furthermore, if an explicit closing sequence
201 is specified in a free-form line, the entire line is accepted within the
202 scope of the prior macro, not only the text preceding the close.
205 Accepts the following syntax:
207 .Bd -literal -offset indent -compact
212 .Bd -literal -offset indent -compact
218 In the first case, input is ignored until a
220 macro is encountered on its own line.
221 In the second case, input is ignored until a
230 Do not use the escape
232 anywhere in the definition of END.
233 It causes very strange behaviour.
234 Furthermore, if you redefine a
240 the subsequent invocation of
242 will first signify the end of comment, then be invoked as a macro.
243 This behaviour really shouldn't be counted upon.
245 Remove a request, macro or string.
246 This macro is intended to have one argument,
247 the name of the request, macro or string to be undefined.
248 Currently, it is ignored including its arguments,
249 and the number of arguments is not checked.
251 Output character translation.
252 This macro is intended to have one argument,
253 consisting of an even number of characters.
254 Currently, it is ignored including its arguments,
255 and the number of arguments is not checked.
257 This section documents compatibility between mandoc and other other
258 troff implementations, at this time limited to GNU troff
262 refers to groff versions before the
265 .Pq somewhere between 1.15 and 1.19 .
269 Historic groff did not accept white-space buffering the custom END tag
276 and family would print funny white-spaces with historic groff when
277 depending on next-line syntax.
282 reference was written by
283 .An Kristaps Dzonsons Aq kristaps@bsd.lv .