File: groff.info, Node: Delimiters, Prev: Using Escape Sequences, Up: Formatter Instructions
5.6.5 Delimiters
----------------
Some escape sequences that require parameters use delimiters. The
neutral apostrophe ''' is a popular choice and shown in this document.
The neutral double quote '"' is also commonly seen. Letters, numerals,
and leaders can be used. Punctuation characters are likely better
choices, except for those defined as infix operators in numeric
expressions; see below.
\l'1.5i\[bu]' \" draw 1.5 inches of bullet glyphs
The following escape sequences don't take arguments and thus are
allowed as delimiters: '\', '\%', '\|', '\^', '\{', '\}', '\'',
'\`', '\-', '\_', '\!', '\?', '\)', '\/', '\,', '\&', '\:', '\~', '\0',
'\a', '\c', '\d', '\e', '\E', '\p', '\r', '\t', and '\u'. However,
using them this way is discouraged; they can make the input confusing to
read.
A few escape sequences, '\A', '\b', '\o', '\w', '\X', and '\Z',
accept a newline as a delimiter. Newlines that serve as delimiters
continue to be recognized as input line terminators.
A caf\o
e\(aa
in Paris
=> A café in Paris
Use of newlines as delimiters in escape sequences is also discouraged.
Finally, the escape sequences '\D', '\h', '\H', '\l', '\L', '\N',
'\R', '\s', '\S', '\v', and '\x' prohibit many delimiters.
* the numerals '0'-'9' and the decimal point '.'
* the (single-character) operators '+-/*%<>=&:()'
* the space and tab characters
* any escape sequences other than '\%', '\:', '\{', '\}', '\'', '\`',
'\-', '\_', '\!', '\/', '\c', '\e', and '\p'
Delimiter syntax is complex and flexible primarily for historical
reasons; the foregoing restrictions need be kept in mind mainly when
using 'groff' in AT&T compatibility mode. GNU 'troff' keeps track of
the nesting depth of escape sequence interpolations, so the only
characters you need to avoid using as delimiters are those that appear
in the arguments you input, not any that result from interpolation.
Typically, ''' works fine. *Note Implementation Differences::.
$ groff -Tps
.de Mw
. nr wd \w'\\$1'
. tm "\\$1" is \\n(wd units wide.
..
.Mw Wet'suwet'en
.Mw Wet+200i
.cp 1 \" turn on compatibility mode
.Mw Wet'suwet'en
.Mw Wet'
.Mw Wet+200i
error-> "Wet'suwet'en" is 54740 units wide.
error-> "Wet'+200i" is 42610 units wide.
error-> "Wet'suwet'en" is 15860 units wide.
error-> "Wet'" is 15860 units wide.
error-> "Wet'+200i" is 14415860 units wide.
We see here that in compatibility mode, the part of the argument
after the ''' delimiter escapes from its context and, if nefariously
crafted, influences the computation of the WD register's value in a
surprising way.