rf(1) | General Commands Manual | rf(1) |
rf
—
rf |
file |
rf
is a reference system for troff and other roff
derivatives. It differs from refer(1), the traditional troff
reference system, in a couple important ways:
This means that you can move, copy and share your troff document without needing to worry about an additional reference file. Furthermore, you never run the risk of accidentally losing the references attached to a document.
rf
consists of circa 200 lines of Perl. If you
find a bug or an (in your opinion) undesirable behavior in
rf
, you can easily patch it.rf
is much simpler, much less opaque and
offers much more basic functionality than refer(1). You
can learn all of it in five minutes.The performance of rf
primarily depends on
the number of references (but not citations). On my HP Compaq dc5700 from
2007, the relationship between number of references and total execution time
is roughly the following:
Entries | Time |
3 | 0.01s |
50 | 0.07s |
100 | 0.14s |
200 | 0.26s |
500 | 0.65s |
2,000 | 2.59s |
10,000 | 12.94s |
Luckily, I would deem it extremely rare to have more than a couple of hundred unique references in a troff document.
rf
provides two features, which it calls
references and citations:
rf
is controlled by several macros, all
consisting of one uppercase and one lowercase letter, beginning with either
an ‘R’ – macros controlling references and citations
– or an ‘F’ – macros controlling the appearance
of references and citations.
Default: %a (%y). {\fI%t\fR}. {\*Q%q\*U}. %n, %d. %c: %p. {Available: %w.}
Default: (%A %y)
Default: (%y)
For a description of the format syntax, see FORMAT SYNTAX.
Format: Surname, Forename/Initial
In the final output, rf
prints a formatted
version of each reference in place of its definition.
rf
does not change the order of reference. This
means that you can arrange your references freely.
Reference identification. After the macro name, you should provide one or more keywords to identify the reference to which the citation is to refer. Each word is matched case-insensitively against the author, year and title of all references. For example:
.Rf Trubetzkoy 1969
If only a weak match is found, a helpful warning is printed on standard error.
Adjacent punctuation. To include some punctuation character immediately after the inline reference, use the following syntax:
.Rf Grot 1873 .
To wrap the inline reference in parentheses, use the following syntax:
.Rf Courtenay 1972 ) (
Shortcuts. Any instance of
''
is replaced with the last word on the preceding
line. This allows the following shortcut:
According to Brandt .Rx '' 1892 , Russian differs from other European languages in its [...]
.Ff (%A, %y) \" (Author, Year)
By wrapping an interpolation in braces, you can specify a prefix and/or suffix that should be included only if the interpolation is successful. For example:
.Ff (%A{, %y}). \" Here, ', ' is removed if there is no year.
To interpolate only the surnames of the authors, you can use the special %A syntax, with an uppercase instead of lowercase ‘a’.
Anywhere else in the line, backslashes are preserved literally.
By using backslashes, you can implement footnote-based citations. For example, using the ms macro package:
.Fx\ \**\ .FS\ %a, {\fI%t\fR}, {\*Q%q\*U}, %y.\ .FE
rf
removes common punctuation immediately
preceding and following an unsuccessful interpolation. Excessive spaces are
also removed, unless they follow a period, marking the end of a sentence.
rf
references.
.de noop .. .blm noop .SH Previous work .LP Davidson .Rx '' 1991 has performed a study [...] .PP [...] which leads to a higher total cholesterol level .Rf Smith 2007 . .SH Literature .XP .Ra Davidson, H. .Ry 1991 .Rt Seminal Work .Rc Athens .Rp Logos .XP .Ra Smith, P. .Ry 2007 .Rt Modern Society .Rc Athens .Rp Logos
When given the above file, rf
will output
the following source code:
.de noop .. .blm noop .SH Previous work .LP Davidson (1991) has performed a study [...] .PP [...] which leads to a higher total cholesterol level (Smith 2007). .SH Literature .XP Davidson, H. (1991). \fISeminal Work\fR. Athens: Logos. .XP Smith, P. (2007). \fIModern Society\fR. Athens: Logos.
rf
was written by John Ankarström
<john
(at)
ankarstrom.se>.
November 12, 2020 | Linux 5.4.72-0-lts |