aboutsummaryrefslogtreecommitdiff
path: root/fref.t
blob: 0765dec0d3fc9bb7ebd697e52a2c8aa3d21be2b0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
.\"
.\" Use the following commands to build this document:
.\"    $ export LC_ALL=en_US.UTF-8
.\"    $ <fref.t ./fref | troff -ms | dpost | ps2pdf - >fref.pdf
.\"
.do mediasize letter
.nr LL 6.5i
.ss 12 0
.TL
\f(BIfref\fP,
reference list formatter for \f(BItroff\fP
.AU
John Ankarström
.DA
.PP
.2C
.SH
Introduction
.PP
\fIfref\fR (\(lqformat reference\(rq)
is a troff preprocessor that formats reference lists
embedded in the \fItroff\fR source code
according to the Harvard system.
It supports multiple languages
and is macro package-independent.
.PP
\fIfref\fR has been developed to address concerns
unsatisfactorily met by previous solutions.
It differs from the much beloved \fIrefer\fR
in the following ways:
.in +2n
.IP 1. 3
\fIfref\fR is a reference \fIformatter\fP,
not a reference \fIresolver\fR like \fIrefer\fP.
It formats references specified in the troff source,
not in an external database.
.IP 2. 3
As a result of the first point,
\fIfref\fR requires no macro package support,
unlike \fIrefer\fR, which relies on macro packages
to do the formatting.
.IP 3. 3
As a further result of the first point,
\fIfref\fR is a much simpler program than \fIrefer\fP
and is thus easier for the user to extend
according to his own preferences.
.in
.PP
Because \fIfref\fR does not resolve references,
it is limited in its functionality.
It is not a good fit for reference styles that require
elaborate inline citations.
For this reason, \fIfref\fR is primarily designed
for reference styles with simple inline citations,
such as the Harvard system,
that the user can type himself without much trouble.
Indeed, for parenthetical citations,
it is likely quicker to manually type the citation
than to instruct the computer to generate it.
In such cases, I hope you will find
\fIfref\fR to be a very fitting solution.
.PP
If you do use the Harvard system,
\fIfref\fR offers many benefits over \fIrefer\fP.
While the format of \fIrefer\fR references
depend on the macro package one uses,
the output of \fIfref\fR is completely independent
of any macro package.
Furthermore, \fIfref\fR supports a richer variety of reference fields,
such as translator and hypertext reference.
.SH
Operation
.PP
The \fIfref\fR program takes \fItroff\fP source code on standard input
and emits the same on standard output.
Lines beginning with `%' (percent) are processed specially.
Each such line denotes a field in a reference.
For example:
.IP
.nf
\&.SH
References
\&.XP
\&%au	Baudouin de Courtenay, J.
\&%da	1972
\&%ti	The Difference between Phonetics and ...
\&%bo	A Baudouin de Courtenay Anthology
\&%ed	T. A. Sebeok et al.
\&%tr	Edward Stankiewicz
\&%ci	Bloomington
\&%pu	Indiana University Press
\&.XP
\&\fI... another reference ...\fR
.PP
\fIfref\fR collects all percent lines
until the next non-percent line,
at which point a formatted reference is generated
from the information specified in the fields.
In the example above,
the second .XP line will trigger \fIfref\fR
to print a reference containing
all the fields gathered thus far.
.PP
If, for some reason, a specified field
is left out by \fIfref\fR,
a warning is emitted on standard error.
This might happen if an %ed (editor) field has been specified
without a corresponding %bo (book) or %jo (journal) field.
.PP
If an unknown field is specified,
\fIfref\fR dies.
.PP
The hard-coded reference style includes some language-specific words.
The language (English by default) is controlled with the \fI-l\fR flag:
.IP
.nf
.ta 10m
\&$ <example.t fref -lsv	\fI# Swedish\fR
\&$ <example.t fref -lru	\fI# Russian\fR
.SH
Reference fields
.PP
\fIfref\fR supports a large number of fields.
All have two-letter names, much like \fItroff\fR requests:
.IP %au
\fIAuthor\fR.
This is the only field of which
more than one instance is allowed.
Note that the author name is output as is.
.IP %ad
\fIAccess date\fR.
This field is output after a hypertext reference.
.IP %bo
\fIBook\fR.
.IP %ci
\fICity\fR.
.IP %da
\fIDate (year)\fR.
.IP %ed
\fIEditor\fR.
.IP %hr
\fIHypertext reference\fR.
.IP %jo
\fIJournal\fR.
.IP %la
\fILabel\fR.
This field is output at the beginning of the reference,
followed by an equals sign.
.IP %lg
\fIReference-specific language\fR.
This field temporarily overrides the \fI-l\fR flag
and the default language of English
for a single reference.
.IP %no
\fITODO: Issue number\fR.
.IP %pp
\fIPages\fR.
.IP %pu
\fIPublisher\fR.
.IP %se
\fITODO: Series\fR.
.IP %ti
\fITitle\fR.
.IP %tr
\fITranslator\fR.
.IP %vo
\fIVolume\fR.
.IP %xx
\fIExtra information\fR.
The text is output at the end of the reference,
but before any hypertext reference and access date.
.SH
Source code
.PP
Users of \fIfref\fR are encouraged to modify
the source code according to their own requirements.
\fIfref\fR is written in C using \fIlex\fR
and contains circa 330 lines of code.