Writing Macros
==============
A "macro" is a collection of text and embedded commands which can be
invoked multiple times. Use macros to define common operations.
- Request: .de name [end]
Define a new macro named NAME. `gtroff' copies subsequent lines
(starting with the next one) into an internal buffer until it
encounters the line `..' (two dots). The optional second argument
to `de' changes this to a macro to `.END'.
Note that no leading whitespace is allowed in the line containing
the ending token (either `..' or the macro `.END').
Here a small example macro called `P' which causes a break and
inserts some vertical space. It could be used to separate
paragraphs.
.de P
. br
. sp .8v
..
- Request: .am xx
Works similarly to `de' except it appends onto the macro named XX.
So, to make the previously defined `P' macro actually do indented
instead of block paragraphs, add the necessary code to the
existing macro like this:
.am P
.ti +5n
..
- Request: .als new old
Create an alias named NEW for the request, string, macro, or
diversion object named OLD. The new name and the old name are
exactly equivalent (it is similar to a hard rather than a soft
link). If OLD is undefined, `gtroff' generates a warning of type
`mac' and ignores the request.
The `de', `am', `di', `da', `ds', and `as' requests only create a
new object if the name of the macro, diversion or string diversion
is currently undefined or if it is defined to be a request;
normally they modify the value of an existing object.