The ACM Transactions (acmtrans) bibliography style

Glenn Paulley  Andrew W. Appel  Rebecca L. Davies

David M. Jones

22 August 1995 Version 1.2b β

Contents

1 Introduction 1

2 Further features of acmtrans 2

3 Modifications and bug fixes from newapa.bst 3

4 To-do list 4

5 The docstrip modules 4

6 The macros 4 6.1 The field names and useful utilities . . . . . . . . . . . . . . . . . . 4 6.2 The entry types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

6.2.1 The article type . . . . . . . . . . . . . . . . . . . . . . . 23 6.2.2 The book type . . . . . . . . . . . . . . . . . . . . . . . . . 24 6.2.3 The booklet type . . . . . . . . . . . . . . . . . . . . . . . 25 6.2.4 The inbook type . . . . . . . . . . . . . . . . . . . . . . . . 25 6.2.5 The incollection type . . . . . . . . . . . . . . . . . . . . 26 6.2.6 The inproceedings type . . . . . . . . . . . . . . . . . . . 27 6.2.7 The conference type . . . . . . . . . . . . . . . . . . . . . 29 6.2.8 The manual type . . . . . . . . . . . . . . . . . . . . . . . . 29 6.2.9 The mastersthesis type . . . . . . . . . . . . . . . . . . . 29

\begin{matrix}c \\ ◯ \end{matrix}1995, all rights reserved. Copying of this file is authorized only if either (1) you make absolutely no changes to your copy, including name, or (2) if you do make changes, you name it something other than “acmtrans.bst”. There are undoubtably bugs in this style. Please send any bug reports, suggestions for im-

provements, etc., to jacm@theory.lcs.mit.edu.

6.2.10 The misc type . . . . . . . . . . . . . . . . . . . . . . . . . 30 6.2.11 The phdthesis type . . . . . . . . . . . . . . . . . . . . . . 30 6.2.12 The proceedings type . . . . . . . . . . . . . . . . . . . . . 30 6.2.13 The techreport type . . . . . . . . . . . . . . . . . . . . . 31 6.2.14 The unpublished type . . . . . . . . . . . . . . . . . . . . . 31 6.2.15 The default.type type . . . . . . . . . . . . . . . . . . . . 32

6.3 Standard abbreviations . . . . . . . . . . . . . . . . . . . . . . . . 32 6.4 Sorting the entries . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

1 Introduction

This is the acmtrans BibTEX style, which is based Glenn Paulley’s chicago bibliography style (for further information about the history of this code, please see the comments in chicago.bst). The acmtrans style was hacked by Andrew W. Appel and Rebecca L. Davies of Princeton University, and further modified and reworked by David M. Jones.

This style implements an “author-year” bibliography format, where in-text citations have the general form “[author name(s) year]” and the Reference list is sorted alphabetically by the author or whatever passes for author in the absence of one. The style also supports abbreviated author lists in citations.

This style must be supplemented by some TEX macros to process the citation information generated by acmtrans. The citation information deposited in the bibliography has the following format:

\citeauthoryear{⟨full-author-info⟩}{⟨abbrev-author-info⟩}{⟨year⟩}

The L^{A}TEX style should define something like the following:

    \let\@internalcite\cite
    \def\fullcite{\def\citeauthoryear##1##2##3{##1 ##3}\@internalcite}
    \def\fullciteA{\def\citeauthoryear##1##2##3{##1}\@internalcite}
    \def\shortcite{\def\citeauthoryear##1##2##3{##2 ##3}\@internalcite}
    \def\shortciteA{\def\citeauthoryear##1##2##3{##2}\@internalcite}
    \def\citeyear{\def\citeauthoryear##1##2##3{##3}\@internalcite}

Additional commands to manipulate different components of a citation can be defined so that, for example, you can list author’s names without parentheses if using a citation as a noun or object in a sentence. See the acmart document class for a more complete example.

In order to provide more flexibility for use with both L^{A}TEX 2.09 and L^{A}TEX 2ε, acmtrans uses the following macros for all font changes:

\bibsc for small caps

\bibemph for italics without an italic correction

\bibemphic for italics with an italic correction at the end.

For L^{A}TEX 2ε, the following is appropriate:

 \let\bibsc\textsc
 \let\bibemph\emph
 \let\bibemphic\emph

For L^{A}TEX 2.09, the following should do:

 \newcommand{\bibsc}[1]{{\sc#1}}
 \newcommand{\bibemph}[1]{{\em#1}}
 \newcommand{\bibemphic}[1]{{\em#1\/}}

One further macro, \bibyear, is needed, to format the year. The following definition is used in the acmart class. See the comments before output.year.check below and before \bibyear in acmart for more information.

 \newcommand{\bibyear}[2]{%
    \unskip\quad\ignorespaces#1\unskip
    \if#2. .\quad \else \quad#2 \fi
 }

These TEX macro definitions are found in the acmart document class.

2 Further features of acmtrans

• full names used in citations, but abbreviated citations are available (see above)

• if an entry has a “month”, then the month and year are also printed as part of that bibitem.

• all conjunctions use “and” instead of “&”

• major modification from Chicago Manual of Style (13th ed.) is that only the first author in a reference appears last name first- additional authors appear as J. Q. Public.

• pages are listed as “pp. xx-xx” in all entry types except article entries.

• book, inbook, and manual use “location: publisher” (or organization) for address and publisher. All other types list publishers separately.

• “pp.” are used to identify page numbers for all entry types except articles.

• organization is used as a citation label if neither author nor editor is present (for manuals).

• “et al.” is used for long author and editor lists, or when “others” is used.

3 Modifications and bug fixes from newapa.bst

• added month, year to bib entries if month is present

• fixed bug with In proceedings, added necessary comma after title

• all conjunctions changed to “and” from “&”

• fixed bug with author labels in my.full.label: “et al.” now is generated when “others” is an author name

• major modification from Chicago Manual of Style (13th ed.) is that only the first author in a reference appears last name first—additional authors appear as J. Q. Public.

• pages are listed as “pp. xx-xx” in all entry types except article entries. Unnecessary (IMHO) “()” around page numbers were removed, and page numbers now don’t end with a period.

• created chicago.sty for use with this bibstyle (required).

• fixed bugs in format.vol.num.pages for missing volume, number, and/or pages. Renamed to format.jour.vol.

• fixed bug in formatting booktitles: additional period an error if book has a volume.

• fixed bug: editors usually given redundant period before next clause

  (format.editors.dot) removed.

• added label support for organizations, if both author and editor are missing (from alpha.bst). If organization is too long, then the key field is used for abbreviated citations.

• In proceedings or books of several volumes, no comma was written between the “Volume x” and the page numbers (this was intentional in newapa.bst). Fixed.

• Some journals may not have volumes/numbers, only month/year (eg. IEEE Computer). Fixed bug in article style that assumed volume/number was always present.

4 To-do list

Here are a few of the many things that need to be done to finish this style file.

• Figure out what, if any, copyright notice should cover this file.

• Decide what parts of the above documentation to keep. Sort out credit issues.

• Get style rules from ACM and implement them.

• Implement format.proc.publisher and sort out other issues mentioned in connection with inproceedings.

• Sort out format.key business.

• Munge month to standardize month abbreviations when authors fail to use the standard strings.

• Sort out journal abbreviations.

• Make .bbl file look more like what the ACM wants for its automatic conversion programs. (In fact, we could output SGML code directly for them, if they’d tell us what they want.)

• Rewrite macrocode to index BST macros.

5 The docstrip modules

This code uses the following modules:

xref  use crossrefs in the bibliography
driver generate a driver file for the documentation

6 The macros

6.1 The field names and useful utilities

1 ENTRY
2 { address
3  author
4  booktitle
5  chapter
6  edition
7  editor
8  howpublished
9  institution
10  journal
11  key
12  month
13  note
14  number
15  organization
16  pages
17  publisher

In addition to the standard fields, we introduce three new fields, pub-year, pub-month and pub-address. These are for use in proceedings, where the year, month and address fields normally refer to the date and location of the conference rather than the publisher. For compatibility with the standard BibTEX styles, we introduce new fields for the publisher information rather than the conference information, although it would probably be more logical for the existing fields always to refer to the publisher and to introduce new fields for the conference information.

18  pub-year
19  pub-month
20  pub-address
21  school
22  series
23  title
24  type
25  volume
26  year

27 }

28 {}
29 { label.year extra.label sort.year sort.label }

30

31 INTEGERS {
32  output.state
33  before.all
34  mid.sentence
35  after.sentence
36  after.block

37 }

init.state.consts
38 FUNCTION {init.state.consts}
39 { #0 'before.all :=
40 #1 'mid.sentence :=
41 #2 'after.sentence :=
42 #3 'after.block :=

43 }

output.nonnull
44 STRINGS { s t u }

45

46 FUNCTION {output.nonnull}
47 { 's :=
48 output.state mid.sentence =
49  { ", " * write$ }
50  { output.state after.block =
51  { add.period$ write$
52  newline$
53  "\newblock " write$

54 }

55  { output.state before.all =
56  'write$
57  { add.period$ " " * write$ }
58  if$

60  if$
61  mid.sentence 'output.state :=

62 }

63 if$

64 s 65 }

output.nonnull.colon Use a colon to separate output. Used only for address/publisher combination in book/inbook types, address/institution for manuals, and organization:publisher for proceedings (inproceedings).

66 FUNCTION {output.nonnull.colon}
67 { 's :=
68 output.state mid.sentence =
69  { ": " * write$ }
70  { output.state after.block =
71  { add.period$ write$
72  newline$
73  "\newblock " write$

74 }

75  { output.state before.all =
76  'write$
77  { add.period$ " " * write$ }
78  if$

79 }

80  if$
81  mid.sentence 'output.state :=

82 }

83 if$

84 s 85 }

output
86 FUNCTION {output}
87 { duplicate$ empty$
88  'pop$
89  'output.nonnull
90 if$

91 }

output.colon
92 FUNCTION {output.colon}
93 { duplicate$ empty$
94  'pop$
95  'output.nonnull.colon
96 if$

97 }

output.check

 98 FUNCTION {output.check}
 99 { 't :=
100 duplicate$ empty$
101  { pop$ "empty " t * " in " * cite$ * warning$ }
102  'output.nonnull
103 if$

104 }

output.check.colon
105 FUNCTION {output.check.colon}
106 { 't :=
107 duplicate$ empty$
108  { pop$ "empty " t * " in " * cite$ * warning$ }
109  'output.nonnull.colon
110 if$

111 }

new.block
112 FUNCTION {new.block}
113 { output.state before.all =
114  'skip$
115  { after.block 'output.state := }
116 if$

117 }

new.sentence
118 FUNCTION {new.sentence}

119 {

120  output.state after.block =
121  'skip$
122  { output.state before.all =
123  'skip$
124  { after.sentence 'output.state := }
125  if$

126 }

127  if$

128 }

output.year.check This is somewhat nasty. We need to put a quad space around the year. Unfortunately, the obvious thing (i.e., putting out “\quad year\quad”) won’t work because the next call to output will add a period after the second \quad. Because of the way BibTEX writes things, it would be difficult to get the \quad in the right place, so instead we cheat by wrapping the year in the macro \bibyear, which is defined in acmart to look ahead one character and, if necessary, move the period before the second quad space.

This should be thought about some more.

129 FUNCTION {output.year.check}
130 { year empty$
131  { "empty year in " cite$ * warning$ }

132  { add.period$ write$
133  " \bibyear{" year * extra.label * "}" *
134  mid.sentence 'output.state :=

135 }

136 if$

137 }

fin.entry
138 FUNCTION {fin.entry}
139 { add.period$
140 write$
141 newline$

142 }

not
143 FUNCTION {not}
144 {   { #0 }
145  { #1 }
146 if$

147 }

and
148 FUNCTION {and}
149 {   'skip$
150  { pop$ #0 }
151 if$

152 }

or
153 FUNCTION {or}
154 {   { pop$ #1 }
155  'skip$
156 if$

157 }

new.block.checka
158 FUNCTION {new.block.checka}
159 { empty$
160  'skip$
161  'new.block
162 if$

163 }

new.block.checkb
164 FUNCTION {new.block.checkb}
165 { empty$
166 swap$ empty$
167 and
168  'skip$

169  'new.block
170 if$

171 }

new.sentence.checka
172 FUNCTION {new.sentence.checka}
173 { empty$
174  'skip$
175  'new.sentence
176 if$

177 }

new.sentence.checkb
178 FUNCTION {new.sentence.checkb}
179 { empty$
180 swap$ empty$
181 and
182  'skip$
183  'new.sentence
184 if$

185 }

field.or.null
186 FUNCTION {field.or.null}
187 { duplicate$ empty$
188  { pop$ "" }
189  'skip$
190 if$

191 }

parenthesize Put parentheses around the top string on the stack.

192 FUNCTION {parenthesize}
193 { duplicate$ empty$
194  { pop$ "" }
195  { " (" swap$ * ")" * }
196 if$

197 }

emphasize Emphasize the top string on the stack.

It’s a shame that we can’t assume people are using L^{A}TEX 2ε, since the \emph command would be much more convenient here. As it is, we have to try to guess whether or not we will need an italic correction, and use either emphasize or emphasize.ic as appropriate. As a partial solution, we use the macros \bibemph and \bibemphic, which should be defined by the style file. For L^{A}TEX 2ε, these can both be equivalent to \emph; for L^{A}TEX 2.09, \bibemphic should add an italic correction and \bibemph should not.

198 FUNCTION {emphasize}
199 { duplicate$ empty$

200  { pop$ "" }
201  { "\bibemph{" swap$ * "}" * }
202 if$

203 }

emphasize.ic Emphasize the top string on the stack, but add a trailing space.

204 FUNCTION {emphasize.ic}
205 { duplicate$ empty$
206  { pop$ "" }
207  { "\bibemphic{" swap$ * "}" * }
208 if$

209 }

emphasize.comma Emphasize the top string on stack, add a trailing comma and space.

Removed superfluous italic correction, moved comma outside of emphasis. [8/15/95—dmj]

210 FUNCTION {emphasize.comma}
211 { duplicate$ empty$
212  { pop$ "" }
213  { emphasize "," * }
214 if$

215 }

smallcaps Put the top string on the stack in small caps.

Should really use \textsc here and just make sure it is defined in acmart.sty.

216 FUNCTION {smallcaps}
217 { duplicate$ empty$
218  { pop$ "" }
219  { "\bibsc{" swap$ * "}" * }
220 if$

221 }

format.names Format bibliographical entries with the last name first. All names are formatted

in this routine.

Changed so that entire author list is surrounded by {\sc and }, instead of surrounding each individual element. Also moved “Junior” part to the very end, so that it appears after the first initial instead of before.

222 INTEGERS { nameptr namesleft numnames }

223

224 FUNCTION {format.names}
225 { 's :=
226 #1 'nameptr :=               % nameptr = 1;
227 s num.names$ 'numnames :=    % numnames = num.name$(s);
228 numnames 'namesleft :=
229  { namesleft #0 > }

230 {

231 %      nameptr #1 =
232 %        {s nameptr "{vv~}{ll}{, f.}{, jj}" format.name$ 't := } {
233  s nameptr "{vv~}{ll}{, f.}{, jj}" format.name$ 't :=

234 %      } if$
235  nameptr #1 >
236  { namesleft #1 >
237  { ", " * t * }
238  { numnames #2 >
239  { "," * }
240  'skip$
241  if$
242  t "others" =
243  { " et~al." * }
244  { " and " * t * } % from Chicago Manual of Style
245  if$

246 }

247  if$

248 } 249 't

250  if$
251  nameptr #1 + 'nameptr :=          % nameptr += 1;
252  namesleft #1 - 'namesleft :=      % namesleft =- 1;

253 }

254 while$
255  smallcaps

256 }

my.full.label
257 FUNCTION {my.full.label}
258 { 's :=
259 #1 'nameptr :=               % nameptr = 1;
260 s num.names$ 'numnames :=    % numnames = num.name$(s);
261 numnames 'namesleft :=
262  { namesleft #0 > }
263  { s nameptr "{vv~}{ll}" format.name$ 't :=  % get the next name
264  nameptr #1 >
265  { namesleft #1 >
266  { ", " * t * }
267  { numnames #2 >
268  { "," * }
269  'skip$
270  if$
271  t "others" =
272  { " et~al." * }
273  { " and " * t * } % from Chicago Manual of Style
274  if$

275 }

276  if$

277 } 278 't

279  if$
280  nameptr #1 + 'nameptr :=          % nameptr += 1;
281  namesleft #1 - 'namesleft :=      % namesleft =- 1;

283 while$

284 }

format.names.fml Format names in “familiar” format, with first initial followed by last name. Like

format.names, ALL names are formatted.

Changed so that entire author list is surrounded by {\sc and }, instead of surrounding each individual element.

285 FUNCTION {format.names.fml}
286 { 's :=
287 #1 'nameptr :=               % nameptr = 1;
288 s num.names$ 'numnames :=    % numnames = num.name$(s);
289 numnames 'namesleft :=
290  { namesleft #0 > }
291  { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
292  nameptr #1 >
293  { namesleft #1 >
294  { ", " * t * }
295  { numnames #2 >
296  { "," * }
297  'skip$
298  if$
299  t "others" =
300  { " et~al." * }
301  { " and " * t * }
302  if$

303 }

304  if$

305 } 306 't

307  if$
308  nameptr #1 + 'nameptr :=          % nameptr += 1;
309  namesleft #1 - 'namesleft :=      % namesleft =- 1;

310 }

311 while$
312  smallcaps

313 }

format.authors
314 FUNCTION {format.authors}
315 { author empty$
316  { "" }
317  { author format.names }
318 if$

319 }

format.key
320 FUNCTION {format.key}
321 { empty$

322  { key field.or.null }
323  { "" }
324 if$

325 }

format.editors.fml Format editor names for use in the “in” types: inbook, incollection, inproceedings: first initial, then last names. When editors are the LABEL for an entry, then format.editor is used which lists editors by last name first.

Removed parens around “Ed.” since that seems to be desired by the ACM. [8/18/95—dmj]

326 FUNCTION {format.editors.fml}
327 { editor empty$
328  { "" }
329  { editor format.names.fml
330  editor num.names$ #1 >
331  { " Eds." * }
332  { " Ed." * }
333  if$

334 }

335 if$

336 }

format.editors Format editor names for use in labels, last names first.

Removed parens around “Ed.” since that seems to be desired by the ACM. [8/18/95—dmj]

337 FUNCTION {format.editors}
338 { editor empty$
339  { "" }
340  { editor format.names
341  editor num.names$ #1 >
342  { " Eds." * }
343  { " Ed." * }
344  if$

345 }

346 if$

347 }

format.title
348 FUNCTION {format.title}
349 { title empty$
350  { "" }
351  { title "t" change.case$ }
352 if$

353 }

n.dashify
354 FUNCTION {n.dashify}
355 { 't :=

356 ""

357 { t empty$ not }
358  { t #1 #1 substring$ "-" =
359  { t #1 #2 substring$ "--" = not
360  { "--" *
361  t #2 global.max$ substring$ 't :=

362 }

363  {   { t #1 #1 substring$ "-" = }
364  { "-" *
365  t #2 global.max$ substring$ 't :=

366 }

367  while$

368 }

369  if$

370 }

371  { t #1 #1 substring$ *
372  t #2 global.max$ substring$ 't :=

373 }

374  if$

375 }

376 while$

377 }

format.btitle
378 FUNCTION {format.btitle}
379 { edition empty$
380 { title emphasize }
381 { title empty$

The following branch is somewhat eccentric, but I’ll leave it for now since it’s harmless, and in the current code, format.btitle is always followed by a call to output.check, which will generate a warning message if necessary.

382  { title emphasize }
383  { volume empty$     % gnp - check for volume, then don't need period
384  { title emphasize.ic edition " ed." * parenthesize * "." * }
385  { title emphasize.ic edition " ed." * parenthesize * }
386  if$

387 }

388  if$

389 }

390 if$

391 }

format.emphasize.booktitle
392 FUNCTION {format.emphasize.booktitle}
393 { edition empty$
394 { booktitle emphasize.ic }
395 { booktitle empty$

The following branch is also somewhat eccentric, but I’ll leave it for now since it should never be taken in the current code.

396  { booktitle emphasize }
397  { volume empty$  % gnp - extra period an error if book has a volume
398  { booktitle emphasize.ic edition " ed." * parenthesize * "." *}
399  { booktitle emphasize.ic edition " ed." * parenthesize * }
400  if$

401 }

402  if$

403 }

404 if$

405 }

tie.or.space.connect
406 FUNCTION {tie.or.space.connect}
407 { duplicate$ text.length$ #3 <
408  { "~" }
409  { " " }
410 if$
411 swap$ * *

412 }

either.or.check
413 FUNCTION {either.or.check}
414 { empty$
415  'pop$
416  { "can't use both " swap$ * " fields in " * cite$ * warning$ }
417 if$

418 }

format.bvolume
419 FUNCTION {format.bvolume}
420 { volume empty$
421  { "" }
422  { "Volume" volume tie.or.space.connect % gnp - changed to mixed case
423  series empty$
424  'skip$
425  { " of " * series emphasize * }
426  if$
427  "volume and number" number either.or.check

428 }

429 if$

430 }

format.number.series
431 FUNCTION {format.number.series}
432 { volume empty$
433  { number empty$
434  { series field.or.null }
435  { "Number" number tie.or.space.connect
436  series empty$

437  { "there's a number but no series in " cite$ * warning$ }
438  { " in " * series * }
439  if$

440 }

441  if$

442 }

443  { "" }
444 if$

445 }

multi.page.check
446 INTEGERS { multiresult }

447

448 FUNCTION {multi.page.check}
449 { 't :=
450 #0 'multiresult :=
451  { multiresult not
452  t empty$ not
453  and

454 }

455  { t #1 #1 substring$
456  duplicate$ "-" =
457  swap$ duplicate$ "," =
458  swap$ "+" =
459  or or
460  { #1 'multiresult := }
461  { t #2 global.max$ substring$ 't := }
462  if$

463 }

464 while$
465 multiresult

466 }

format.pages gnp - removed ()

467 FUNCTION {format.pages}
468 { pages empty$
469 { "" }

470 {

471 %    pages multi.page.check {
472  "pp.\ " pages n.dashify tie.or.space.connect
473 %       } { "pp.\ " pages tie.or.space.connect }
474 %    if$

475 }

476 if$

477 }

format.jour.vol By Young (and Spencer) GNP - fixed bugs with missing volume, number, and/or

pages Format journal, volume, number, pages for article types.

478 FUNCTION {format.jour.vol}
479 { journal empty$
480  { "no journal in " cite$ * warning$
481  "" }
482  { journal emphasize.ic }
483  if$
484 number empty$
485  { volume empty$
486  { "no number and no volume in " cite$ * warning$
487  "" * }
488  { "~" * volume emphasize * }
489  if$

490 }

491  { volume empty$
492  {"no volume for " cite$ * warning$
493  "~" * number * }
494  { "~" *
495  volume emphasize.comma
496  "~" * number * * }
497  if$
498  month empty$
499  'skip$
500  {month parenthesize *}
501  if$

502 }

503 if$
504 pages empty$
505  {"page numbers missing in " cite$ * warning$
506  "" * } % gnp - place a null string on the stack for output
507  { duplicate$ empty$
508  { pop$ format.pages }
509  { ", " *  pages n.dashify * } % gnp - removed pp. for articles
510  if$

511 }

512 if$

513 }

format.chapter.pages
514 FUNCTION {format.chapter.pages}
515 { chapter empty$
516  'format.pages
517  { type empty$
518  { "Chapter" } % gnp - changed to mixed case
519  { type "t" change.case$ }
520  if$
521  chapter tie.or.space.connect
522  pages empty$
523  {"page numbers missing in " cite$ * warning$}%gnp - added check
524  { ", " * format.pages * }
525  if$

527 if$

528 }

format.in.ed.booktitle
529 FUNCTION {format.in.ed.booktitle}
530 { booktitle empty$
531 { "" }
532 { editor empty$
533  { "In " format.emphasize.booktitle * }
534  { "In " format.editors.fml * ", " * format.emphasize.booktitle * }
535  if$

536 }

537 if$

538 }

format.thesis.title
539 FUNCTION {format.thesis.title}
540 { title empty$
541  'skip$
542 %   {pop$
543 { { "" }
544  title "t" change.case$

545 }

546 if$

547 }

format.tr.number
548 FUNCTION {format.tr.number}
549 { type empty$
550  { "Technical Report" }
551  'type
552 if$
553 number empty$
554  { "t" change.case$ }
555  { number tie.or.space.connect }
556 if$

557 }

format.crossref Merged format.article.crossref and format.incoll.inproc.crossref into

a single macro, format.crossref, which has proper spacing.

558 ⟨∗xref⟩

559 FUNCTION {format.crossref}

560 {

561  "See \citeN{" crossref * "}" *

562 } 563 ⟨/xref⟩

format.crossref.editor

564 ⟨∗xref⟩

565 FUNCTION {format.crossref.editor}
566 { editor #1 "{vv~}{ll}" format.name$
567 editor num.names$ duplicate$
568 #2 >
569  { pop$ " et~al." * }
570  { #2 <
571  'skip$
572  { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
573  { " et~al." * }
574  { " and " * editor #2 "{vv~}{ll}" format.name$ * }
575  if$

576 }

577  if$

578 }

579 if$

580 } 581 ⟨/xref⟩

format.book.crossref

582 ⟨∗xref⟩

583 FUNCTION {format.book.crossref}
584 { volume empty$
585  { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
586  "In "

587 }

588  { "Volume" volume tie.or.space.connect % gnp - changed to mixed case
589  " of " *

590 }

591 if$
592 editor empty$
593 editor field.or.null author field.or.null =

594 or

595  { key empty$
596  { series empty$
597  { "need editor, key, or series for " cite$ * " to crossref " *
598  crossref * warning$
599  "" *

600 }

601  { series emphasize.ic }
602  if$

603 }

604  { key * }
605  if$

606 }

607  { format.crossref.editor * }
608 if$
609 " \citeN{" * crossref * "}" *

610 } 611 ⟨/xref⟩

format.lab.names Determines “short” names for the abbreviated author information. “Long” labels are created in calc.label, using the routine my.full.label to format author and editor fields.

There are 4 cases for labels (n = 3 in the example):

1. one author: Foo

2. one to n: Foo, Bar and Baz

3. use of “and others”: Foo, Bar et al.

4. more than n: Foo et al.

612 FUNCTION {format.lab.names}
613 { 's :=
614 s num.names$ 'numnames :=
615 numnames #2 >    % change number to number of others allowed before
616  % forcing "et al".
617  { s #1 "{vv~}{ll}" format.name$ " et~al." * }

618 {

619  numnames #1 - 'namesleft :=
620  #2 'nameptr :=
621  s #1 "{vv~}{ll}" format.name$
622  { namesleft #0 > }
623  { nameptr numnames =
624  { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
625  { " et~al." * }
626  { " and " * s nameptr "{vv~}{ll}" format.name$ * }
627  if$

628 }

629  { ", " * s nameptr "{vv~}{ll}" format.name$ * }
630  if$
631  nameptr #1 + 'nameptr :=
632  namesleft #1 - 'namesleft :=

633 }

634  while$

635 }

636 if$

637 }

author.key.label
638 FUNCTION {author.key.label}
639 { author empty$
640  { key empty$
641  { "no key, author in " cite$ * warning$
642  cite$ #1 #3 substring$ }
643  'key
644  if$

645 }

646  { author format.lab.names }
647 if$

editor.key.label
649 FUNCTION {editor.key.label}
650 { editor empty$
651  { key empty$
652  { "no key, editor in " cite$ * warning$
653  cite$ #1 #3 substring$ }
654  'key
655  if$

656 }

657  { editor format.lab.names }
658 if$

659 }

author.key.org.label added - gnp. Provide label formatting by organization if author is null.

660 FUNCTION {author.key.org.label}
661 { author empty$
662  { organization empty$
663  { key empty$
664  { "no key, author or organization in " cite$ * warning$
665  cite$ #1 #3 substring$ }
666  'key
667  if$

668 }

669  'organization
670  if$

671 }

672  { author format.lab.names }
673 if$

674 }

editor.key.org.label added - gnp. Provide label formatting by organization if editor is null.

675 FUNCTION {editor.key.org.label}
676 { editor empty$
677  { organization empty$
678  { key empty$
679  { "no key, editor or organization in " cite$ * warning$
680  cite$ #1 #3 substring$ }
681  'key
682  if$

683 }

684  'organization
685  if$

686 }

687  { editor format.lab.names }
688 if$

689 }

author.editor.key.label
690 FUNCTION {author.editor.key.label}
691 { author empty$
692  { editor empty$
693  { key empty$
694  { "no key, author, or editor in " cite$ * warning$
695  cite$ #1 #3 substring$ }
696  'key
697  if$

698 }

699  { editor format.lab.names }
700  if$

701 }

702  { author format.lab.names }
703 if$

704 }

calc.label GNP: changed. Form label for BibTEX entry. The classification of which fields are used for which type of entry (book, inbook, etc.) are taken from alpha.bst. The change here from newapa is to also include organization as a citation label if author or editor is missing. See also author.organization.sort,

 editor.organization.sort.
705 FUNCTION {calc.label}
706 { type$ "book" =
707 type$ "inbook" =

708 or

709  'author.editor.key.label
710  { type$ "proceedings" =
711  'editor.key.org.label
712  { type$ "manual" =
713  'author.key.org.label
714  'author.key.label
715  if$

716 }

717  if$

718 }

719 if$
720 author empty$  % generate the full label citation information.
721  { editor empty$
722  { organization empty$
723  { "no author, editor, or organization in " cite$ * warning$
724  "??" }
725  'organization
726  if$

727 }

728  { editor my.full.label }
729  if$

730 }

731  { author my.full.label }

732 if$

leave label on the stack, to be popped when required.

733 "}{" * swap$ * "}{" *
734 %  year field.or.null purify$ #-1 #4 substring$ *

save the year for sort processing afterwards (adding a, b, c, etc.)

735 year field.or.null purify$ #-1 #4 substring$
736 'label.year :=

737 }

output.bibitem
738 FUNCTION {output.bibitem}
739 { newline$
740 "\bibitem[\protect\citeauthoryear{" write$
741 calc.label write$
742 sort.year write$
743 "}]{" write$
744 cite$ write$
745 "}" write$
746 newline$

747 ""

748 before.all 'output.state :=

749 }

6.2 The entry types

6.2.1 The article type

article
750 FUNCTION {article}

751 {

752  output.bibitem
753  format.authors "author" output.check

Some but not all types contain the following line. It’s questionable whether it belongs there at all, but if it does, shouldn’t it be in all the types?

754  author format.key output          % added
755  output.year.check                 % added
756  new.block
757  format.title "title" output.check
758  new.block

759 ⟨∗xref⟩

760  crossref missing$

761 { 762 ⟨/xref⟩

763  format.jour.vol output

764 ⟨∗xref⟩ 765 } 766 {

767  format.crossref output.nonnull
768  format.pages output

769 }

770  if$

771 ⟨/xref⟩

772 new.block
773 note output
774 fin.entry

775 }

6.2.2 The book type

book
776 FUNCTION {book}
777 { output.bibitem
778 author empty$
779  { format.editors "author and editor" output.check }
780  { format.authors
781  output.nonnull
782  crossref missing$
783  { "author and editor" editor either.or.check }
784  'skip$
785  if$

786 }

787 if$
788 output.year.check       % added
789 new.block
790 format.btitle "title" output.check

791 ⟨∗xref⟩

792 crossref missing$

793 { 794 ⟨/xref⟩

795  format.bvolume output
796  new.block
797  format.number.series output
798  new.sentence
799  publisher "publisher" output.check
800  address output

801 ⟨∗xref⟩ 802 } 803 {

804  new.block
805  format.book.crossref output.nonnull

806 }

807 if$

808 ⟨/xref⟩

809 new.block
810 note output
811 fin.entry

6.2.3 The booklet type

booklet
813 FUNCTION {booklet}
814 { output.bibitem
815 format.authors output
816 author format.key output          % added
817 output.year.check                 % added
818 new.block
819 format.title "title" output.check
820 new.block
821 howpublished output
822 address output
823 new.block
824 note output
825 fin.entry

826 }

6.2.4 The inbook type

inbook
827 FUNCTION {inbook}
828 { output.bibitem
829 author empty$
830  { format.editors "author and editor" output.check

831 }

832  { format.authors output.nonnull
833  crossref missing$
834  { "author and editor" editor either.or.check }
835  'skip$
836  if$

837 }

838 if$
839 output.year.check                 % added
840 new.block
841 format.btitle "title" output.check

842 ⟨∗xref⟩

843 crossref missing$

844 { 845 ⟨/xref⟩

846  format.bvolume output
847  format.chapter.pages "chapter and pages" output.check
848  new.block
849  format.number.series output
850  new.sentence
851  publisher "publisher" output.check.colon
852  address output

853 ⟨∗xref⟩ 854 } 855 {

856  format.chapter.pages "chapter and pages" output.check
857  new.block
858  format.book.crossref output.nonnull

859 }

860 if$

861 ⟨/xref⟩

862 new.block
863 note output
864 fin.entry

865 }

 6.2.5 The incollection type
incollection
866 FUNCTION {incollection}
867 { output.bibitem
868 format.authors "author" output.check
869 author format.key output       % added
870 output.year.check              % added
871 new.block
872 format.title "title" output.check
873 new.block

874 ⟨∗xref⟩

875 crossref missing$

876 { 877 ⟨/xref⟩

878  format.in.ed.booktitle "booktitle" output.check
879  format.bvolume output
880  format.number.series output
881  format.chapter.pages output % gnp - was special.output.nonnull
882 %                                 left out comma before page numbers
883  new.sentence
884  address output
885  publisher "publisher" output.check.colon

886 ⟨∗xref⟩ 887 } 888 {

889  format.crossref output.nonnull
890  format.chapter.pages output

891 }

892 if$

893 ⟨/xref⟩

894 new.block
895 note output
896 fin.entry

897 }

6.2.6 The inproceedings type
format.date
898 FUNCTION {format.date}
899 { year empty$
900  { month empty$
901  { "" }
902  { "there's a month but no year in " cite$ * warning$
903  month

904 }

905  if$

906 }

907  { month empty$
908  'year
909  { month " " * year * }
910  if$

911 }

912 if$

913 }

format.proc.loc.date
914 FUNCTION {format.proc.loc.date}

915 {

916  address field.or.null
917  format.date
918  duplicate$ empty$
919  'pop$
920  { swap$
921  duplicate$ empty$
922  'pop$
923  { ", " * swap$ * }
924  if$

925 }

926  if$
927  parenthesize

928 * 929 }

inproceedings Added format.proc.loc.date to format proceedings location and date. Should

also add something like format.proc.publisher to handle the pub-year, pub-month

and pub-address fields, but should first find out from ACM how such things should be handled. In particular, if year of publication is different from year of conference, which should be used in citation (presumably the year of publication).

A related problem is to decide exactly what the year refers to. In the standard styles, if there is a year but no address, the year is assumed to refer to the date of publication, while if there is an address, the address and date are assumed to refer to the conference. For true compatibility with the standard styles, we should probably preserve this distinction.

930 FUNCTION {inproceedings}

932 output.bibitem
933 format.authors "author" output.check
934 author format.key output            % added
935 output.year.check                   % added
936 new.block
937 format.title "title" output.check
938 new.block

939 ⟨∗xref⟩

940 crossref missing$

941 { 942 ⟨/xref⟩

943  format.in.ed.booktitle "booktitle" output.check
944  format.bvolume output
945  format.number.series output
946 %      address output
947  format.proc.loc.date %output
948  format.pages output
949  new.sentence
950  organization output
951  publisher output.colon

952 ⟨∗xref⟩ 953 } 954 {

955  format.crossref output.nonnull
956  format.pages output

957 }

958 if$

959 ⟨/xref⟩

960 new.block
961 note output
962 fin.entry

963 }

6.2.7 The conference type

conference
964 FUNCTION {conference} { inproceedings }

6.2.8 The manual type

manual
965 FUNCTION {manual}
966 { output.bibitem
967 author empty$
968  { editor empty$
969  { organization "organization" output.check
970  organization format.key output }  % if all else fails, use key
971  { format.editors "author and editor" output.check }

972  if$

973 }

974  { format.authors output.nonnull }
975  if$
976 output.year.check                 % added
977 new.block
978 format.btitle "title" output.check
979 organization address new.block.checkb

Reversed the order of “address” and “organization”, added the “:”.

980 address output
981 organization "organization" output.check.colon
982 %  address output
983 %  ":" output
984 %  organization output
985 new.block
986 note output
987 fin.entry

988 }

 6.2.9 The mastersthesis type
mastersthesis
989 FUNCTION {mastersthesis}
990 { output.bibitem
991 format.authors "author" output.check
992 author format.key output          % added
993 output.year.check                 % added
994 new.block
995 format.title "title" output.check
996 new.block
997 "Master's thesis" format.thesis.title output.nonnull
998 school "school" output.check
999 address output
1000 new.block
1001 note output
1002 fin.entry

1003 }

6.2.10 The misc type

misc
1004 FUNCTION {misc}
1005 { output.bibitem
1006 format.authors output
1007 author format.key output            % added
1008 output.year.check                   % added
1009 title howpublished new.block.checkb
1010 format.title output
1011 new.block

1012 howpublished output
1013 new.block
1014 note output
1015 fin.entry

1016 }

6.2.11 The phdthesis type

phdthesis
1017 FUNCTION {phdthesis}
1018 { output.bibitem
1019 format.authors "author" output.check
1020 author format.key output            % added
1021 output.year.check                   % added
1022 new.block
1023 format.btitle "title" output.check
1024 new.block
1025 format.thesis.title "Ph.\ D. thesis" output.nonnull
1026 school "school" output.check
1027 address output
1028 new.block
1029 note output
1030 fin.entry

1031 }

6.2.12 The proceedings type

proceedings
1032 FUNCTION {proceedings}
1033 { output.bibitem
1034 editor empty$
1035  { organization output
1036  organization format.key output } % gnp - changed from
1037  { format.editors output.nonnull }  % author format.key

1038 if$

1039 % author format.key output             % gnp - removed (should be either
1040 %                                        editor or organization
1041 output.year.check                    % added (newapa)
1042 new.block
1043 format.btitle "title" output.check
1044 format.bvolume output
1045 format.number.series output
1046 %  address output
1047  format.proc.loc.date % output
1048 new.sentence
1049 organization output
1050 publisher output.colon
1051 new.block
1052 note output

1053 fin.entry

1054 }

6.2.13 The techreport type

techreport
1055 FUNCTION {techreport}
1056 { output.bibitem
1057 format.authors "author" output.check
1058 author format.key output             % added
1059 output.year.check                    % added
1060 new.block
1061 format.title "title" output.check
1062 new.block
1063 format.tr.number
1064  month empty$
1065  'skip$
1066  { month parenthesize * }

1067 if$

1068 output.nonnull
1069 institution "institution" output.check
1070 address output
1071 new.block
1072 note output
1073 fin.entry

1074 }

6.2.14 The unpublished type

unpublished
1075 FUNCTION {unpublished}
1076 { output.bibitem
1077 format.authors "author" output.check
1078 author format.key output              % added
1079 output.year.check                      % added
1080 new.block
1081 format.title "title" output.check
1082 new.block
1083 note "note" output.check
1084 fin.entry

1085 }

6.2.15 The default.type type

default.type
1086 FUNCTION {default.type} { misc }

6.3 Standard abbreviations

The following abbreviations should all be checked to make sure they correspond to what the ACM wants.

1087 MACRO {jan} {"Jan."}

1088

1089 MACRO {feb} {"Feb."}

1090

1091 MACRO {mar} {"March"}

1092

1093 MACRO {apr} {"April"}

1094

1095 MACRO {may} {"May"}

1096

1097 MACRO {jun} {"June"}

1098

1099 MACRO {jul} {"July"}

1100

1101 MACRO {aug} {"Aug."}

1102

1103 MACRO {sep} {"Sept."}

1104

1105 MACRO {oct} {"Oct."}

1106

1107 MACRO {nov} {"Nov."}

1108

1109 MACRO {dec} {"Dec."}

1110

1111 MACRO {acmcs} {"ACM Computing Surveys"}

1112

1113 MACRO {acta} {"Acta Informatica"}

1114

1115 MACRO {ai} {"Artificial Intelligence"}

1116

1117 MACRO {cacm} {"Commun. ACM"}

1118

1119 MACRO {ibmjrd} {"IBM Journal of Research and Development"}

1120

1121 MACRO {ibmsj} {"IBM Systems Journal"}

1122

1123 MACRO {ieeese} {"IEEE Trans. Softw. Eng."}

1124

1125 MACRO {ieeetc} {"IEEE Transactions on Computers"}

1126

1127 MACRO {ieeetcad}
1128 {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}

1129

1130 MACRO {ipl} {"Inf. Process. Lett."}

1131

1132 MACRO {ic} {"Inf. Comput."}

1134 MACRO {jacm} {"Journal of the ACM"}

1135

1136 MACRO {jcss} {"J. Comput. Syst. Sci."}

1137

1138 MACRO {scp} {"Science of Computer Programming"}

1139

1140 MACRO {sicomp} {"SIAM Journal on Computing"}

1141

1142 MACRO {tocs} {"ACM Transactions on Computer Systems"}

1143

1144 MACRO {tods} {"ACM Transactions on Database Systems"}

1145

1146 MACRO {tog} {"ACM Transactions on Graphics"}

1147

1148 MACRO {toms} {"ACM Transactions on Mathematical Software"}

1149

1150 MACRO {toois} {"ACM Transactions on Office Information Systems"}

1151

1152 MACRO {toplas} {"ACM Trans. on Programm. Lang. Syst."}

1153

1154 MACRO {tcs} {"Theor. Comp. Sci."}

1155

1156 READ

6.4 Sorting the entries

sortify
1157 FUNCTION {sortify}
1158 { purify$
1159 "l" change.case$

1160 }

chop.word
1161 INTEGERS { len }

1162

1163 FUNCTION {chop.word}
1164 { 's :=
1165 'len :=
1166 s #1 len substring$ =
1167  { s len #1 + global.max$ substring$ }

1168 's 1169 if$ 1170 }

sort.format.names
1171 FUNCTION {sort.format.names}
1172 { 's :=
1173 #1 'nameptr :=

1174 ""

1175 s num.names$ 'numnames :=
1176 numnames 'namesleft :=
1177  { namesleft #0 > }
1178  { nameptr #1 >
1179  { "   " * }
1180  'skip$

1181 if$

1182  s nameptr "{vv{ } }{ll{ }}{  f{ }}{  jj{ }}" format.name$ 't :=
1183  nameptr numnames = t "others" = and
1184  { " et~al" * }
1185  { t sortify * }

1186 if$

1187  nameptr #1 + 'nameptr :=
1188  namesleft #1 - 'namesleft :=

1189 }

1190 while$

1191 }

sort.format.title
1192 FUNCTION {sort.format.title}
1193 { 't :=
1194 "A " #2
1195  "An " #3
1196  "The " #4 t chop.word
1197  chop.word
1198 chop.word
1199 sortify
1200 #1 global.max$ substring$

1201 }

author.sort
1202 FUNCTION {author.sort}
1203 { author empty$
1204  { key empty$
1205  { "to sort, need author or key in " cite$ * warning$

1206 "" }

1207  { key sortify }

1208 if$ 1209 }

1210  { author sort.format.names }

1211 if$ 1212 }

editor.sort
1213 FUNCTION {editor.sort}
1214 { editor empty$
1215  { key empty$
1216  { "to sort, need editor or key in " cite$ * warning$

1217 "" 1218 }

1219  { key sortify }

1220 if$ 1221 }

1222  { editor sort.format.names }

1223 if$ 1224 }

author.editor.sort
1225 FUNCTION {author.editor.sort}

1226 {

1227  author empty$
1228  { "missing author in " cite$ * warning$
1229  editor empty$
1230  { key empty$
1231  { "to sort, need author, editor, or key in "
1232  cite$ * warning$

1233 "" 1234 } 1235 {

1236  key sortify

1237 } 1238 if$ 1239 } 1240 {

1241  editor sort.format.names

1242 } 1243 if$ 1244 } 1245 {

1246  author sort.format.names

1247 } 1248 if$ 1249 }

author.organization.sort added - GNP. Stack author or organization for sorting (from alpha.bst). Unlike alpha.bst, we need entire names, not abbreviations

1250 FUNCTION {author.organization.sort}
1251 { author empty$
1252  { organization empty$
1253  { key empty$
1254  { "to sort, need author, organization, or key in "
1255  cite$ * warning$

1256 "" 1257 }

1258  { key sortify }

1259 if$ 1260 }

1261  { organization sortify }

1262 if$ 1263 }

1264  { author sort.format.names }

1265 if$ 1266 }

editor.organization.sort added - GNP. Stack editor or organization for sorting (from alpha.bst). Unlike alpha.bst, we need entire names, not abbreviations

1267 FUNCTION {editor.organization.sort}
1268 { editor empty$
1269  { organization empty$
1270  { key empty$
1271  { "to sort, need editor, organization, or key in "
1272  cite$ * warning$

1273 "" 1274 }

1275  { key sortify }

1276 if$ 1277 }

1278  { organization sortify }

1279 if$ 1280 }

1281  { editor sort.format.names }

1282 if$ 1283 }

presort Presort creates the bibentry’s label via a call to calc.label, and then sorts the entries based on entry type. Chicago.bst adds support for including organizations as the sort key; the following is stolen from alpha.bst.

1284 FUNCTION {presort}
1285 { calc.label sortify % recalculate bibitem label
1286 year field.or.null purify$ #-1 #4 substring$ * % add year

1287 " " 1288 *

1289 type$ "book" =
1290 type$ "inbook" =

1291 or

1292  'author.editor.sort
1293  { type$ "proceedings" =
1294  'editor.organization.sort
1295  { type$ "manual" =
1296  'author.organization.sort
1297  'author.sort

1298 if$ 1299 } 1300 if$ 1301 } 1302 if$

1303 #1 entry.max$ substring$        % added for newapa

1304 'sort.label :=                  % added for newapa
1305 sort.label                      % added for newapa

1306 * 1307 " " 1308 *

1309 title field.or.null
1310 sort.format.title

1311 *

1312 #1 entry.max$ substring$
1313 'sort.key$ :=

1314 }

1315 ITERATE {presort}

1316

1317 SORT    % by label, year, author/editor, title

1318

init.extra.label.stuff
1319 STRINGS { last.label next.extra }

1320

1321 INTEGERS { last.extra.num }

1322

1323 FUNCTION {init.extra.label.stuff}
1324 { #0 int.to.chr$ 'last.label :=
1325 "" 'next.extra :=
1326 #0 'last.extra.num :=

1327 }

forward.pass Pass through all entries, comparing current entry to last one. Need to concatenate year to the stack (done by calc.label) to determine if two entries are the same

  (see presort)
1328 FUNCTION {forward.pass}
1329 { last.label
1330 calc.label year field.or.null purify$ #-1 #4 substring$ * % add year
1331 #1 entry.max$ substring$ =     % are they equal?
1332  { last.extra.num #1 + 'last.extra.num :=
1333  last.extra.num int.to.chr$ 'extra.label :=

1334 }

1335  { "a" chr.to.int$ 'last.extra.num :=
1336  "" 'extra.label :=
1337  calc.label
1338  year field.or.null purify$ #-1 #4 substring$ * % add year
1339  #1 entry.max$ substring$ 'last.label := % assign to last.label

1340 } 1341 if$ 1342 }

reverse.pass
1343 FUNCTION {reverse.pass}

1344 { next.extra "b" =
1345  { "a" 'extra.label := }
1346  'skip$

1347 if$

1348 label.year extra.label * 'sort.year :=
1349 extra.label 'next.extra :=

1350 }

1351 EXECUTE {init.extra.label.stuff}

1352

1353 ITERATE {forward.pass}

1354

1355 REVERSE {reverse.pass}
bib.sort.order
1356 FUNCTION {bib.sort.order}
1357 { sort.label

1358 " " 1359 *

1360 year field.or.null sortify

1361 * 1362 " " 1363 *

1364 title field.or.null
1365 sort.format.title

1366 *

1367 #1 entry.max$ substring$
1368 'sort.key$ :=

1369 }

1370 ITERATE {bib.sort.order}

1371

1372 SORT % by sort.label, year, title --- giving final bib. order.
begin.bib
1373 FUNCTION {begin.bib}
1374 { preamble$ empty$
1375  'skip$
1376  { preamble$ write$ newline$ }

1377 if$

1378 "\begin{thebibliography}{}" write$ newline$

1379 }

1380 EXECUTE {begin.bib}

1381

1382 EXECUTE {init.state.consts}

1383

1384 ITERATE {call.type$}
end.bib

1385 FUNCTION {end.bib}
1386 { newline$
1387 "\end{thebibliography}" write$ newline$

1388 }

1389 EXECUTE {end.bib}

Index

The italic numbers denote the pages where the corresponding entry is described, numbers underlined point to the definition, all others indicate the places where it is used.

A

and . . . . . . . . . . . . . . . . . . . . . . . . \underline{148} article . . . . . . . . . . . . . . . . . . . . . \underline{750}

author.editor.key.label . . . . . . . \underline{690}
author.editor.sort . . . . . . . . . . . \underline{1225}
author.key.label . . . . . . . . . . . . . \underline{638}
author.key.org.label . . . . . . . . . . \underline{660}
author.organization.sort . . . . . . \underline{1250}

author.sort . . . . . . . . . . . . . . . . . \underline{1202}

B

begin.bib . . . . . . . . . . . . . . . . . . \underline{1373} bib.sort.order . . . . . . . . . . . . . . \underline{1356} book . . . . . . . . . . . . . . . . . . . . . . . . \underline{776} booklet . . . . . . . . . . . . . . . . . . . . . \underline{813}

C

calc.label . . . . . . . . . . . . . . . . . . \underline{705} chop.word . . . . . . . . . . . . . . . . . . \underline{1161} conference . . . . . . . . . . . . . . . . . . \underline{964}

D

default.type . . . . . . . . . . . . . . . . \underline{1086}

E

editor.key.label . . . . . . . . . . . . . \underline{649}
editor.key.org.label . . . . . . . . . . \underline{675}
editor.organization.sort . . . . . . \underline{1267}

editor.sort . . . . . . . . . . . . . . . . . \underline{1213} either.or.check . . . . . . . . . . . . . . \underline{413} emphasize . . . . . . . . . . . . . . . . . . . \underline{198} emphasize.comma . . . . . . . . . . . . . . \underline{210} emphasize.ic . . . . . . . . . . . . . . . . . \underline{204} end.bib . . . . . . . . . . . . . . . . . . . . \underline{1385}

F

field.or.null . . . . . . . . . . . . . . . . \underline{186} fin.entry . . . . . . . . . . . . . . . . . . . \underline{138} format.authors . . . . . . . . . . . . . . . \underline{314}

format.book.crossref . . . . . . . . . . \underline{582}

format.btitle . . . . . . . . . . . . . . . . \underline{378} format.bvolume . . . . . . . . . . . . . . . \underline{419}

format.chapter.pages . . . . . . . . . . \underline{514}

format.crossref . . . . . . . . . . . . . . \underline{558}

format.crossref.editor . . . . . . . . \underline{564}

format.date . . . . . . . . . . . . . . . . . . \underline{898} format.editors . . . . . . . . . . . . . . . \underline{337}

format.editors.fml . . . . . . . . . . . . \underline{326}
format.emphasize.booktitle . . . . . \underline{392}
format.in.ed.booktitle . . . . . . . . \underline{529}

format.jour.vol . . . . . . . . . . . . . . \underline{478} format.key . . . . . . . . . . . . . . . . . . \underline{320}

format.lab.names . . . . . . . . . . . . . \underline{612}

format.names . . . . . . . . . . . . . . . . . \underline{222}

format.names.fml . . . . . . . . . . . . . \underline{285}
format.number.series . . . . . . . . . . \underline{431}

format.pages . . . . . . . . . . . . . . . . . \underline{467}

format.proc.loc.date . . . . . . . . . . \underline{914}
format.thesis.title . . . . . . . . . . . \underline{539}

format.title . . . . . . . . . . . . . . . . . \underline{348}

format.tr.number . . . . . . . . . . . . . \underline{548}

forward.pass . . . . . . . . . . . . . . . . \underline{1328}

I

inbook . . . . . . . . . . . . . . . . . . . . . . \underline{827} incollection . . . . . . . . . . . . . . . . . \underline{866}

init.extra.label.stuff . . . . . . . \underline{1319}
init.state.consts . . . . . . . . . . . . \underline{38}

inproceedings . . . . . . . . . . . . . . . . \underline{930}

M

manual . . . . . . . . . . . . . . . . . . . . . . \underline{965} mastersthesis . . . . . . . . . . . . . . . . \underline{989} misc . . . . . . . . . . . . . . . . . . . . . . . \underline{1004}

multi.page.check . . . . . . . . . . . . . \underline{446}

my.full.label . . . . . . . . . . . . . . . . \underline{257}

N

n.dashify . . . . . . . . . . . . . . . . . . . \underline{354} new.block . . . . . . . . . . . . . . . . . . . \underline{112}

new.block.checka . . . . . . . . . . . . . \underline{158}
new.block.checkb . . . . . . . . . . . . . \underline{164}

new.sentence . . . . . . . . . . . . . . . . . \underline{118}

new.sentence.checka . . . . . . . . . . . \underline{172}
new.sentence.checkb . . . . . . . . . . . \underline{178}

not . . . . . . . . . . . . . . . . . . . . . . . . \underline{143}

O

or . . . . . . . . . . . . . . . . . . . . . . . . . \underline{153} output . . . . . . . . . . . . . . . . . . . . . . \underline{86} output.bibitem . . . . . . . . . . . . . . . \underline{738} output.check . . . . . . . . . . . . . . . . . \underline{98}

output.check.colon . . . . . . . . . . . . \underline{105}

output.colon . . . . . . . . . . . . . . . . . \underline{92} output.nonnull . . . . . . . . . . . . . . . \underline{44}

output.nonnull.colon . . . . . . . . . . \underline{66}

                                       output.year.check . . . . . . . . . . . . \underline{129}

P parenthesize . . . . . . . . . . . . . . . . . \underline{192} phdthesis . . . . . . . . . . . . . . . . . . \underline{1017} presort . . . . . . . . . . . . . . . . . . . . \underline{1284} proceedings . . . . . . . . . . . . . . . . . \underline{1032}

R reverse.pass . . . . . . . . . . . . . . . . \underline{1343}

S smallcaps . . . . . . . . . . . . . . . . . . . \underline{216}

                                       sort.format.names . . . . . . . . . . . \underline{1171}
                                       sort.format.title . . . . . . . . . . . \underline{1192}

sortify . . . . . . . . . . . . . . . . . . . . \underline{1157}

T techreport . . . . . . . . . . . . . . . . . \underline{1055}

                                       tie.or.space.connect . . . . . . . . . . \underline{406}

U unpublished . . . . . . . . . . . . . . . . . \underline{1075}