A control character is optionally followed by tabs and/or spaces and
then an identifier naming a request or macro. The invocation of an
unrecognized request is interpreted as a macro call. Defining a macro
with the same name as a request replaces the request. Deleting a
request name with the rm
request makes it unavailable. The
als
request can alias requests, permitting them to be wrapped or
non-destructively replaced. See Strings.
There is no inherent limit on argument length or quantity. Most
requests take one or more arguments, and ignore any they do not expect.
A request may be separated from its arguments by tabs or spaces, but
only spaces can separate an argument from its successor. Only one
between arguments is necessary; any excess is ignored. GNU troff
does not allow tabs for argument separation.43
Generally, a space within a request argument is not relevant, not
meaningful, or is supported by bespoke provisions, as with the tl
request’s delimiters (see Page Layout). Some requests, like
ds
, interpret the remainder of the control line as a single
argument. See Strings.
Spaces and tabs immediately after a control character are ignored. Commonly, authors structure the source of documents or macro files with them.
.de center . if \\n[.br] \ . br . ce \\$1 .. . . .de right-align .→if \\n[.br] \ .→→br .→rj \\$1 ..
If you assign an empty blank line trap, you can separate macro definitions (or any input lines) with blank lines.
.de do-nothing .. .blm do-nothing \" activate blank line trap .de center . if \\n[.br] \ . br . ce \\$1 .. .de right-align .→if \\n[.br] \ .→→br .→rj \\$1 .. .blm \" deactivate blank line trap
See Blank Line Traps.