Define or set registers using the
nr request or the
Although the following requests and escapes can be used to create registers, simply using an undefined register will cause it to be set to zero.
The argument to
\Rusually has to be enclosed in quotes. See Escapes, for details on parameter delimiting characters.
\Rescape doesn't produce an input token in
gtroff; in other words, it vanishes completely after
gtroffhas processed it.
For example, the following two lines are equivalent:.nr a (((17 + (3 * 4))) % 4) \R'a (((17 + (3 * 4))) % 4)' ⇒ 1
Note that the complete transparency of
\Rcan cause surprising effects if you use number registers like
.kwhich get evaluated at the time they are accessed..ll 1.6i . aaa bbb ccc ddd eee fff ggg hhh\R':k \n[.k]' .tm :k == \n[:k] ⇒ :k == 126950 . .br . aaa bbb ccc ddd eee fff ggg hhh\h'0'\R':k \n[.k]' .tm :k == \n[:k] ⇒ :k == 15000
If you process this with the PostScript device (
-Tps), there will be a line break eventually after
gggin both input lines. However, after processing the space after
ggg, the partially collected line is not overfull yet, so
troffcontinues to collect input until it sees the space (or in this case, the newline) after
hhh. At this point, the line is longer than the line length, and the line gets broken.
In the first input line, since the
\Rescape leaves no traces, the check for the overfull line hasn't been done yet at the point where
\Rgets handled, and you get a value for the
.knumber register which is even greater than the current line length.
In the second input line, the insertion of
\h'0'to emit an invisible zero-width space forces
troffto check the line length which in turn causes the start of a new output line. Now
.kreturns the expected value.
\R have two additional special forms to
increment or decrement a register.
.nr a 1 .nr a +1 \na ⇒ 2.nr a 7 .nr b 3 .nr a -\nb \na ⇒ 4 .nr a (-\nb) \na ⇒ -3
The surrounding parentheses prevent the interpretation of the minus sign as a decrementing operator. An alternative is to start the assignment with a ‘0’:.nr a 7 .nr b -3 .nr a \nb \na ⇒ 4 .nr a 0\nb \na ⇒ -3
Create an alias ident1 for a number register ident2. The new name and the old name are exactly equivalent. If ident1 is undefined, a warning of type ‘reg’ is generated, and the request is ignored. See Debugging, for information about warnings.