File: groff.info, Node: Character Translations, Next: troff and nroff Modes, Prev: Tabs and Fields, Up: GNU troff Reference
5.13 Character Translations
===========================
A "translation" is a mapping of an input character to an output glyph.
The mapping occurs at output time, i.e., the input character gets
assigned the metric information of the mapped output character right
before input tokens are converted to nodes (*note Gtroff Internals::,
for more on this process).
-- Request: .tr abcd...
-- Request: .trin abcd...
Translate character A to glyph B, character C to glyph D, and so
on. If there is an odd number of characters in the argument, the
last one is translated to a fixed-width space (the same one
obtained by the '\' escape sequence).
The 'trin' request is identical to 'tr', but when you unformat a
diversion with 'asciify' it ignores the translation. *Note
Diversions::, for details about the 'asciify' request.
Some notes:
* Special characters ('\(XX', '\[XXX]', '\C'XXX'', '\'', '\`',
'\-', '\_'), glyphs defined with the 'char' request, and
numbered glyphs ('\N'XXX'') can be translated also.
* The '\e' escape can be translated also.
* Characters can be mapped onto the '\%' and '\~' escape
sequences (but '\%' and '\~' can't be mapped onto another
glyph).
* The following characters can't be translated: space (with one
exception, see below), backspace, newline, leader (and '\a'),
tab (and '\t').
* Translations are not considered for finding the soft hyphen
character set with the 'shc' request.
* The pair 'C\&' (an arbitrary character C followed by the dummy
character) maps this character to "nothing".
.tr a\&
foo bar
=> foo br
Even the space character can be mapped to the dummy character.
.tr aa \&
foo bar
=> foobar
As shown in the example, the space character can't be the
first character/glyph pair as an argument of 'tr'.
Additionally, it is not possible to map the space character to
any other glyph; requests like '.tr aa x' undo '.tr aa \&'
instead.
If justification is active, lines are justified in spite of
the 'empty' space character (but there is no minimal distance,
i.e., the space character, between words).
* After an output glyph has been constructed (this happens at
the moment immediately before the glyph is appended to an
output glyph list, either by direct output, in a macro,
diversion, or string), it is no longer affected by 'tr'.
* Translating character to glyphs where one of them or both are
undefined is possible also; 'tr' does not check whether the
elements of its argument exist.
*Note Gtroff Internals::.
* Without an argument, the 'tr' request is ignored.
-- Request: .trnt abcd...
'trnt' is the same as the 'tr' request except that the translations
do not apply to text that is transparently throughput into a
diversion with '\!'. *Note Diversions::.
For example,
.tr ab
.di x
\!.tm a
.di
.x
prints 'b' to the standard error stream; if 'trnt' is used instead
of 'tr' it prints 'a'.