source: doc/papers/OOPSLA17/ACM-Reference-Format.bst@ 2dcb750

ADT aaron-thesis arm-eh ast-experimental cleanup-dtors deferred_resn demangler enum forall-pointer-decay jacob/cs343-translation jenkins-sandbox new-ast new-ast-unique-expr new-env no_list persistent-indexer pthread-emulation qualifiedEnum resolv-new with_gc
Last change on this file since 2dcb750 was f4e3419d, checked in by Peter A. Buhr <pabuhr@…>, 8 years ago

restructure paper documents

  • Property mode set to 100644
File size: 90.2 KB
Line 
1%%% -*-BibTeX-*-
2%%% ====================================================================
3%%% @BibTeX-style-file{
4%%% author = "Nelson H. F. Beebe, Boris Veytsman and Gerald Murray",
5%%% version = "1.18",
6%%% date = "10 July 2016",
7%%% filename = "ACM-Reference-Format.bst",
8%%% email = "beebe@math.utah.edu, beebe@acm.org,
9%%% beebe@computer.org, borisv@lk.net, murray@hq.acm.org",
10%%% codetable = "ISO/ASCII",
11%%% keywords = "ACM Transactions bibliography style; BibTeX",
12%%% license = "public domain",
13%%% supported = "yes",
14%%% abstract = "",
15%%% }
16%%% ====================================================================
17
18% ACM BibTeX style, ACM-Reference-Format.bst
19% for BibTeX version 0.99c, LaTeX version 3.141
20% ACM extensions with code cleaned up, extended, and debugged 10--15-Nov-2008
21% Revised 17-APRIL-2008 (Nelson)
22% Revised 13-MARCH-2011 (Boris/Gerry)
23% Revised 23-MARCH-2011 (Boris/Gerry)
24% Revised 27-MARCH-2011 (Boris/Gerry)
25% Revised 15-APRIL-2011 (Boris/Gerry)
26% Revised 27-SEPTEMBER-2011 (Boris)
27% Revised 10-JULY-2016 (Boris)
28%
29%
30% History (by Nelson)
31%
32% Based on 'acmtrans' (for ACM Journals)
33% Date: 28th April 2008
34%
35% 1. Avoid 'repeating' the 'month' values.
36% 2. Avoid incorrectly italicizing the volume number.
37% 3. Avoid non italicizing certain titles (book, inproceedings etc).
38% 4. NO series if there is NO volume.
39% 5. Sorting of reference with first surname.
40% 6. Article no added for Inproceedings.
41%
42% Date: 07th May 2008
43%
44% 1. Abbreviation list added
45%
46% Citation format: [author-last-name year]
47% [author-last-name and author-last-name year]
48% [author-last-name, author-last-name, and author-last-name year]
49% [author-last-name et al. year]
50% [author-last-name]
51% author-last-name [year]
52% [author-last-name and author-last-name]
53% [author-last-name et al.]
54% [year] or [year,year]
55% year or year,year
56%
57% Reference list ordering: alphabetical by author or whatever passes
58% for author in the absence of one.
59%
60% Features of the old acmtrans.bst:
61% =================================
62%
63% - all authors appear last name first.
64% - all pages are listed xx-xx, (no pp.) and are at the end of the reference
65% - publishers are identified as publisher, address
66% - conferences papers (inproceedings) may give city of conference,
67% date of conference, and journal that the proceedings appear in.
68% - months abbreviated to max four letters (eg. Mar.)
69% - volume of a series indicated after the title of the series
70% - editors appear after edited title and are identified by a trailing "Eds."
71% not in parentheses. Editor names are not given in small caps.
72% (unless there is no author line)
73% - names terminated with a period even if there is no first name.
74% - editions are indicated trailing after the work, not in parentheses.
75% - "et al." citations have a protected period to avoid bad spacing (jrh)
76% - "address" required when publisher given
77% - series (roman) and volume are in a sentence separate from (book-)title
78%
79%
80% Features of chicago.bst:
81% =======================
82%
83% - full names used in citations, but abbreviated citations are available
84% (see above)
85% - if an entry has a "month", then the month and year are also printed
86% as part of that bibitem.
87% - all conjunctions use "and" instead of "\&"
88% - major modification from Chicago Manual of Style (13th ed.) is that
89% only the first author in a reference appears last name first-
90% additional authors appear as J. Q. Public.
91% - pages are listed as "pp. xx-xx" in all entry types except
92% article entries.
93% - book, inbook, and manual use "location: publisher" (or organization)
94% for address and publisher. All other types list publishers separately.
95% - "pp." are used to identify page numbers for all entry types except
96% articles.
97% - organization is used as a citation label if neither author nor editor
98% is present (for manuals).
99% - "et al." is used for long author and editor lists, or when "others"
100% is used.
101%
102% Modifications and bug fixes from newapa.bst:
103% ===========================================
104%
105% - added month, year to bib entries if month is present
106% - fixed bug with In proceedings, added necessary comma after title
107% - all conjunctions changed to "and" from "\&"
108% - fixed bug with author labels in my.full.label: "et al." now is
109% generated when "others" is an author name
110% - major modification from Chicago Manual of Style (13th ed.) is that
111% only the first author in a reference appears last name first-
112% additional authors appear as J. Q. Public.
113% - pages are listed as "pp. xx-xx" in all entry types except
114% article entries. Unnecessary (IMHO) "()" around page numbers
115% were removed, and page numbers now don't end with a period.
116% - created chicago.sty for use with this bibstyle (required).
117% - fixed bugs in FUNCTION {format.vol.num.pages} for missing volume,
118% number, and /or pages. Renamed to format.journal.volume.number.
119% - fixed bug in formatting booktitles: additional period an error if
120% book has a volume.
121% - fixed bug: editors usually given redundant period before next clause
122% (format.editors.dot) removed.
123% - added label support for organizations, if both author and editor
124% are missing (from alpha.bst). If organization is too long, then
125% the key field is used for abbreviated citations.
126% - In proceedings or books of several volumes, no comma was written
127% between the "Volume x" and the page numbers (this was intentional
128% in newapa.bst). Fixed.
129% - Some journals may not have volumes/numbers, only month/year (eg.
130% IEEE Computer). Fixed bug in article style that assumed volume/number
131% was always present.
132%
133% Original documentation for newapa.sty:
134% =====================================
135%
136% This version was made by modifying the master file made by
137% Oren Patashnik (PATASHNIK@SCORE.STANFORD.EDU), and the 'named' BibTeX
138% style of Peter F. Patel-Schneider.
139%
140% Copyright (C) 1985, all rights reserved.
141% Copying of this file is authorized only if either
142% (1) you make absolutely no changes to your copy, including name, or
143% (2) if you do make changes, you name it something other than 'newapa.bst'.
144% There are undoubtably bugs in this style. If you make bug fixes,
145% improvements, etc. please let me know. My e-mail address is:
146% spencer@cgrg.ohio.state.edu or 71160.3141@compuserve.com
147%
148% This style was made from 'plain.bst', 'named.bst', and 'apalike.bst',
149% with lots of tweaking to make it look like APA style, along with tips
150% from Young Ryu and Brian Reiser's modifications of 'apalike.bst'.
151%
152%
153% Start of ACM-Reference-Format-Journals.bst
154%
155% Note: Many of the new bibentry 'fields' will only work with the
156% 'ACM-Reference-Format-Journals.bst' file. Legacy .bib files (which will, in all probability,
157% NOT contain these new fields) will _still_ work with the ACM-Reference-Format-Journals.bst.
158%
159%
160ENTRY
161 { address
162 advisor
163 archiveprefix
164 author
165 booktitle
166 chapter
167 city % jtb: added
168 date % jtb: added
169 edition
170 editor
171 eprint
172 howpublished
173 institution
174 journal
175 key
176 month
177 note
178 number
179 organization
180 pages
181 primaryclass
182 publisher
183 school
184 series
185 title
186 type
187 volume
188 year
189 % New keys recognized
190 issue % UTAH: used in, e.g., ACM SIGSAM Bulletin and ACM Communications in Computer Algebra
191 articleno
192 day % UTAH: needed for newspapers, weeklies, bi-weeklies
193 doi % UTAH
194 url % UTAH
195 bookpages % UTAH
196 numpages
197 lastaccessed % UTAH: used only for @Misc{...}
198 coden % UTAH
199 isbn % UTAH
200 isbn-13 % UTAH
201 issn % UTAH
202 lccn % UTAH
203 }
204 {}
205 { label.year extra.label sort.year sort.label }
206
207INTEGERS { output.state before.all mid.sentence after.sentence after.block }
208
209INTEGERS { show-isbn-10-and-13 } % initialized below in begin.bib
210
211INTEGERS { nameptr namesleft numnames }
212
213INTEGERS { multiresult }
214
215INTEGERS { len }
216
217INTEGERS { last.extra.num }
218
219STRINGS { s t t.org u }
220
221STRINGS { last.label next.extra }
222
223STRINGS { p1 p2 p3 page.count }
224
225FUNCTION { dump.stack.1 }
226{
227 duplicate$ "STACK[top] = [" swap$ * "]" * warning$
228}
229
230FUNCTION { dump.stack.2 }
231{
232 duplicate$ "STACK[top ] = [" swap$ * "]" * warning$
233 swap$
234 duplicate$ "STACK[top-1] = [" swap$ * "]" * warning$
235 swap$
236}
237
238FUNCTION { empty.or.unknown }
239{
240 %% Examine the top stack entry, and push 1 if it is empty, or
241 %% consists only of whitespace, or is a string beginning with two
242 %% queries (??), and otherwise, push 0.
243 %%
244 %% This function provides a replacement for empty$, with the
245 %% convenient feature that unknown values marked by two leading
246 %% queries are treated the same as missing values, and thus, do not
247 %% appear in the output .bbl file, and yet, their presence in .bib
248 %% file(s) serves to mark values which are temporarily missing, but
249 %% are expected to be filled in eventually once more data is
250 %% obtained. The TeX User Group and BibNet bibliography archives
251 %% make extensive use of this practice.
252 %%
253 %% An empty string cannot serve the same purpose, because just as in
254 %% statistics data processing, an unknown value is not the same as an
255 %% empty value.
256 %%
257 %% At entry: stack = ... top:[string]
258 %% At exit: stack = ... top:[0 or 1]
259
260 duplicate$ empty$
261 { pop$ #1 }
262 { #1 #2 substring$ "??" = }
263 if$
264}
265
266FUNCTION { writeln }
267{
268 %% In BibTeX style files, the sequences
269 %%
270 %% ... "one" "two" output
271 %% ... "one" "two" output.xxx
272 %%
273 %% ship "one" to the output file, possibly following by punctuation,
274 %% leaving the stack with
275 %%
276 %% ... "two"
277 %%
278 %% There is thus a one-string lag in output processing that must be
279 %% carefully handled to avoid duplicating a string in the output
280 %% file. Unless otherwise noted, all output.xxx functions leave
281 %% just one new string on the stack, and that model should be born
282 %% in mind when reading or writing function code.
283 %%
284 %% BibTeX's asynchronous buffering of output from strings from the
285 %% stack is confusing because newline$ bypasses the buffer. It
286 %% would have been so much easier for newline to be a character
287 %% rather than a state of the output-in-progress.
288 %%
289 %% The documentation in btxhak.dvi is WRONG: it says
290 %%
291 %% newline$ Writes onto the bbl file what's accumulated in the
292 %% output buffer. It writes a blank line if and only
293 %% if the output buffer is empty. Since write$ does
294 %% reasonable line breaking, you should use this
295 %% function only when you want a blank line or an
296 %% explicit line break.
297 %%
298 %% write$ Pops the top (string) literal and writes it on the
299 %% output buffer (which will result in stuff being
300 %% written onto the bbl file when the buffer fills
301 %% up).
302 %%
303 %% Examination of the BibTeX source code shows that write$ does
304 %% indeed behave as claimed, but newline$ sends a newline character
305 %% directly to the output file, leaving the stack unchanged. The
306 %% first line "Writes onto ... buffer." is therefore wrong.
307 %%
308 %% The original BibTeX style files almost always use "write$ newline$"
309 %% in that order, so it makes sense to hide that pair in a private
310 %% function like this one, named after a statement in Pascal,
311 %% the programming language embedded in the BibTeX Web program.
312
313 write$ % output top-of-stack string
314 newline$ % immediate write of newline (not via stack)
315}
316
317FUNCTION { init.state.consts }
318{
319 #0 'before.all :=
320 #1 'mid.sentence :=
321 #2 'after.sentence :=
322 #3 'after.block :=
323}
324
325FUNCTION { output.nonnull }
326{ % Stack in: ... R S T Stack out: ... R T File out: S<comma><space>
327 's :=
328 output.state mid.sentence =
329 {
330 ", " * write$
331 }
332 {
333 output.state after.block =
334 {
335 add.period$ writeln
336 "\newblock " write$
337 }
338 {
339 output.state before.all =
340 {
341 write$
342 }
343 {
344 add.period$ " " * write$
345 }
346 if$
347 }
348 if$
349 mid.sentence 'output.state :=
350 }
351 if$
352 s
353}
354
355FUNCTION { output.nonnull.dot.space }
356{ % Stack in: ... R S T Stack out: ... R T File out: S<dot><space>
357 's :=
358 output.state mid.sentence = % { "<DEBUG output.nonnull.dot.space>. " * write$ }
359 {
360 ". " * write$
361 }
362 {
363 output.state after.block =
364 {
365 add.period$ writeln "\newblock " write$
366 }
367 {
368 output.state before.all =
369 {
370 write$
371 }
372 {
373 add.period$ " " * write$
374 }
375 if$
376 }
377 if$
378 mid.sentence 'output.state :=
379 }
380 if$
381 s
382}
383
384FUNCTION { output.nonnull.remove }
385{ % Stack in: ... R S T Stack out: ... R T File out: S<space>
386 's :=
387 output.state mid.sentence =
388 {
389 " " * write$
390 }
391 {
392 output.state after.block =
393 {
394 add.period$ writeln "\newblock " write$
395 }
396 {
397 output.state before.all =
398 {
399 write$
400 }
401 {
402 add.period$ " " * write$
403 }
404 if$
405 }
406 if$
407 mid.sentence 'output.state :=
408 }
409 if$
410 s
411}
412
413FUNCTION { output.nonnull.removenospace }
414{ % Stack in: ... R S T Stack out: ... R T File out: S
415 's :=
416 output.state mid.sentence =
417 {
418 "" * write$
419 }
420 {
421 output.state after.block =
422 {
423 add.period$ writeln "\newblock " write$
424 }
425 {
426 output.state before.all =
427 {
428 write$
429 }
430 {
431 add.period$ " " * write$
432 }
433 if$
434 }
435 if$
436 mid.sentence 'output.state :=
437 }
438 if$
439 s
440}
441
442FUNCTION { output }
443{ % discard top token if empty, else like output.nonnull
444 duplicate$ empty.or.unknown
445 'pop$
446 'output.nonnull
447 if$
448}
449
450FUNCTION { output.dot.space }
451{ % discard top token if empty, else like output.nonnull.dot.space
452 duplicate$ empty.or.unknown
453 'pop$
454 'output.nonnull.dot.space
455 if$
456}
457
458FUNCTION { output.removenospace }
459{ % discard top token if empty, else like output.nonnull.removenospace
460 duplicate$ empty.or.unknown
461 'pop$
462 'output.nonnull.removenospace
463 if$
464}
465
466FUNCTION { output.check }
467{ % like output, but warn if key name on top-of-stack is not set
468 't :=
469 duplicate$ empty.or.unknown
470 { pop$ "empty " t * " in " * cite$ * warning$ }
471 'output.nonnull
472 if$
473}
474
475FUNCTION { bibinfo.output.check }
476{ % like output.check, adding bibinfo field
477 't :=
478 duplicate$ empty.or.unknown
479 { pop$ "empty " t * " in " * cite$ * warning$ }
480 { "\bibinfo{" t "}{" * * swap$ * "}" *
481 output.nonnull }
482 if$
483}
484
485FUNCTION { output.check.dot.space }
486{ % like output.dot.space, but warn if key name on top-of-stack is not set
487 't :=
488 duplicate$ empty.or.unknown
489 { pop$ "empty " t * " in " * cite$ * warning$ }
490 'output.nonnull.dot.space
491 if$
492}
493
494FUNCTION { fin.block }
495{ % functionally, but not logically, identical to fin.entry
496 add.period$
497 writeln
498}
499
500FUNCTION { fin.entry }
501{
502 add.period$
503 writeln
504}
505
506FUNCTION { new.sentence }
507{ % update sentence state, with neither output nor stack change
508 output.state after.block =
509 'skip$
510 {
511 output.state before.all =
512 'skip$
513 { after.sentence 'output.state := }
514 if$
515 }
516 if$
517}
518
519FUNCTION { fin.sentence }
520{
521 add.period$
522 write$
523 new.sentence
524 ""
525}
526
527FUNCTION { new.block }
528{
529 output.state before.all =
530 'skip$
531 { after.block 'output.state := }
532 if$
533}
534
535FUNCTION { output.coden } % UTAH
536{ % output non-empty CODEN as one-line sentence (stack untouched)
537 coden empty.or.unknown
538 { }
539 { "\showCODEN{" coden * "}" * writeln }
540 if$
541}
542
543FUNCTION { format.articleno }
544{
545 articleno empty.or.unknown
546 { "" }
547 {
548 numpages empty.or.unknown
549 { "articleno field, but no numpages field, in " cite$ * warning$ }
550 { }
551 if$
552 "Article \bibinfo{articleno}{" articleno * "}" *
553 }
554 if$
555}
556
557FUNCTION { format.year }
558{ % push year string or "????" onto output stack
559 %% Because year is a mandatory field, we always force SOMETHING
560 %% to be output
561 "\bibinfo{year}{"
562 year empty.or.unknown
563 { "????" }
564 { year }
565 if$
566 * "}" *
567}
568
569FUNCTION { format.day.month }
570{ % push "day month " or "month " or "" onto output stack
571 day empty.or.unknown
572 {
573 month empty.or.unknown
574 { "" }
575 { "\bibinfo{date}{" month * "} " *}
576 if$
577 }
578 {
579 month empty.or.unknown
580 { "" }
581 { "\bibinfo{date}{" day * " " * month * "} " *}
582 if$
583 }
584 if$
585}
586
587FUNCTION { format.day.month.year } % UTAH
588{ % if month is empty, push "" else push "(MON.)" or "(DD MON.)"
589 % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
590 % acm-*.bst addition: prefix parenthesized date string with
591 % ", Article nnn "
592 articleno empty.or.unknown
593 { "" }
594 { ", " format.articleno * }
595 if$
596 " (" * format.day.month * format.year * ")" *
597}
598
599FUNCTION { output.day.month.year } % UTAH
600{ % if month is empty value, do nothing; else output stack top and
601 % leave with new top string "(MON.)" or "(DD MON.)"
602 % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
603 format.day.month.year
604 output.nonnull.remove
605}
606
607FUNCTION { strip.doi } % UTAH
608{ % Strip any Web address prefix to recover the bare DOI, leaving the
609 % result on the output stack, as recommended by CrossRef DOI
610 % documentation.
611 % For example, reduce "http://doi.acm.org/10.1145/1534530.1534545" to
612 % "10.1145/1534530.1534545". That is later typeset and displayed as
613 % doi:10.1145/1534530.1534545 as the LAST item in the reference list
614 % entry. Publisher Web sites wrap this with a suitable link to a real
615 % URL to resolve the DOI, and the master http://dx.doi.org/ address is
616 % preferred, since publisher-specific URLs can disappear in response
617 % to economic events. All journals are encouraged by the DOI
618 % authorities to use that typeset format and link procedures for
619 % uniformity across all publications that include DOIs in reference
620 % lists.
621 % The numeric prefix is guaranteed to start with "10.", so we use
622 % that as a test.
623 doi #1 #3 substring$ "10." =
624 { doi }
625 {
626 doi #1 #7 substring$ "http://" =
627 {
628 doi #8 doi text.length$ #7 - substring$ 't := % get modifiable copy of rest of DOI
629
630 "INTERNAL STYLE-FILE ERROR" 's :=
631
632 % search for next "/" and assign its suffix to s
633
634 { t text.length$ }
635 {
636 t #1 #1 substring$ "/" =
637 {
638 % save rest of string as true DOI (should be 10.xxxx/yyyy)
639 t #2 t text.length$ #1 - substring$ 's :=
640 "" 't := % empty string t terminates the loop
641 }
642 {
643 % discard first character and continue loop: t <= substring(t,2,last)
644 t #2 t text.length$ #1 - substring$ 't :=
645 }
646 if$
647 }
648 while$
649
650 % check for valid DOI (should be 10.xxxx/yyyy)
651 s #1 #3 substring$ "10." =
652 { }
653 { "unrecognized DOI substring " s * " in DOI value [" * doi * "]" * warning$ }
654 if$
655
656 s % push the stripped DOI on the output stack
657
658 }
659 {
660 "unrecognized DOI value [" doi * "]" * warning$
661 doi % push the unrecognized original DOI on the output stack
662 }
663 if$
664 }
665 if$
666}
667
668%
669% Change by BV: added standard prefix to URL
670%
671FUNCTION { output.doi } % UTAH
672{ % output non-empty DOI as one-line sentence (stack untouched)
673 doi empty.or.unknown
674 { }
675 {
676 %% NB: We want URLs at beginning of line to reduce likelihood of
677 %% BibTeX's nasty line wrapping after column 79, which then requires
678 %% manual (or automated) editing of the .bbl file to repair.
679 %% The \url{} macro strips percent-newlines, and is thus safe in
680 %% the presence of the line wrapping, but \path|...| and
681 %% \verb|...| do not.
682 "\showDOI{%" writeln
683 "\url{http://dx.doi.org/" strip.doi * "}}" * writeln
684 }
685 if$
686}
687
688FUNCTION { output.isbn } % UTAH
689{ % output non-empty ISBN-10 and/or ISBN-13 as one-line sentences (stack untouched)
690 show-isbn-10-and-13
691 {
692 %% show both 10- and 13-digit ISBNs
693 isbn empty.or.unknown
694 { }
695 {
696 "\showISBNx{" isbn * "}" * writeln
697 }
698 if$
699 isbn-13 empty.or.unknown
700 { }
701 {
702 "\showISBNxiii{" isbn-13 * "}" * writeln
703 }
704 if$
705 }
706 {
707 %% show 10-digit ISBNs only if 13-digit ISBNs not available
708 isbn-13 empty.or.unknown
709 {
710 isbn empty.or.unknown
711 { }
712 {
713 "\showISBNx{" isbn * "}" * writeln
714 }
715 if$
716 }
717 {
718 "\showISBNxiii{" isbn-13 * "}" * writeln
719 }
720 if$
721 }
722 if$
723}
724
725FUNCTION { output.issn } % UTAH
726{ % output non-empty ISSN as one-line sentence (stack untouched)
727 issn empty.or.unknown
728 { }
729 { "\showISSN{" issn * "}" * writeln }
730 if$
731}
732
733FUNCTION { output.issue }
734{ % output non-empty issue number as a one-line sentence (stack untouched)
735 issue empty.or.unknown
736 { }
737 { "Issue " issue * "." * writeln }
738 if$
739}
740
741FUNCTION { output.lccn } % UTAH
742{ % return with stack untouched
743 lccn empty.or.unknown
744 { }
745 { "\showLCCN{" lccn * "}" * writeln }
746 if$
747}
748
749FUNCTION { output.note } % UTAH
750{ % return with stack empty
751 note empty.or.unknown
752 { }
753 { "\shownote{" note add.period$ * "}" * writeln }
754 if$
755}
756
757FUNCTION { output.note.check } % UTAH
758{ % return with stack empty
759 note empty.or.unknown
760 { "empty note in " cite$ * warning$ }
761 { "\shownote{" note add.period$ * "}" * writeln }
762 if$
763}
764
765FUNCTION { output.eprint } %
766{ % return with stack empty
767 eprint empty.or.unknown
768 { }
769 { "\showeprint"
770 archiveprefix empty.or.unknown
771 { }
772 { "[" archiveprefix "l" change.case$ "]" * * * }
773 if$
774 "{" *
775 primaryclass empty.or.unknown
776 { }
777 { primaryclass "/" * *}
778 if$
779 eprint "}" * *
780 writeln
781 }
782 if$
783}
784
785
786%
787% Changes by BV 2011/04/15. Do not output
788% url if doi is defined
789%
790FUNCTION { output.url } % UTAH
791{ % return with stack untouched
792 % output URL and associated lastaccessed fields
793 doi empty.or.unknown
794 {
795 url empty.or.unknown
796 { }
797 {
798 %% NB: We want URLs at beginning of line to reduce likelihood of
799 %% BibTeX's nasty line wrapping after column 79, which would require
800 %% manual (or automated) editing of the .bbl file to repair. However,
801 %% the \url{} macro handles the unwrapping job automatically.
802 "\showURL{%" writeln
803 lastaccessed empty.or.unknown
804 { "" }
805 { "Retrieved " lastaccessed * " from " * }
806 if$
807
808 %% The URL field may contain a semicolon-separated list of Web
809 %% addresses, and we locate and wrap each of them in \url{...}.
810 %% The simplistic approach of putting the entire list into the
811 %% macro argument is that the semicolons are typeset in a
812 %% typewriter font, and no space follows them.
813 %%
814 %% We therefore replace the original code
815 %% "\url{" * url * "}}" * writeln
816 %% with this character-at-a-time loop:
817
818 "\url{" *
819
820 url 't := % get modifiable copy of URL list
821
822 { t text.length$ }
823 {
824 t #1 #1 substring$ ";" =
825 { % then split argument at separator
826 "};" * writeln
827 "\url{"
828 }
829 { % else concatenate nonblank character to argument
830 t #1 #1 substring$ " " =
831 { }
832 { t #1 #1 substring$ * }
833 if$
834 }
835 if$
836
837 t #2 t text.length$ #1 - substring$ 't :=
838 }
839 while$
840
841 "}}" * writeln
842 }
843 if$
844 }
845 { }
846 if$
847}
848
849FUNCTION { output.year.check }
850{ % warn if year empty, else output top string and leave " YEAR<label>" on stack in mid-sentence
851 year empty.or.unknown
852 { "empty year in " cite$ * warning$ }
853 { write$
854 " \bibinfo{year}{" year * "}" *
855 "\natexlab{" extra.label * "}" * *
856 mid.sentence 'output.state :=
857 }
858 if$
859}
860
861FUNCTION { not }
862{
863 { #0 }
864 { #1 }
865 if$
866}
867
868FUNCTION { and }
869{
870 'skip$
871 { pop$ #0 }
872 if$
873}
874
875FUNCTION { or }
876{
877 { pop$ #1 }
878 'skip$
879 if$
880}
881
882FUNCTION { le }
883{
884 %% test whether first number is less than or equal to second number
885 %% stack in: n1 n2
886 %% stack out: if n1 <= n2 then 1 else 0
887
888 %% "DEBUG: le " cite$ * warning$
889 > { #0 } { #1 } if$
890}
891
892FUNCTION { ge }
893{
894 %% test whether first number is greater than or equal to second number
895 %% stack in: n1 n2
896 %% stack out: if n1 >= n2 then 1 else 0
897
898 %% "DEBUG: ge " cite$ * warning$
899 < { #0 } { #1 } if$
900}
901
902FUNCTION { is.leading.digit }
903{
904 %% test whether first character of string is a digit
905 %% stack in: string
906 %% stack out: if first-char-is-digit then 1 else 0
907
908 #1 #1 substring$ % replace string by string[1:1]
909 duplicate$ % string[1:1] string[1:1]
910 chr.to.int$
911 "0" chr.to.int$ swap$ le % "0" <= string[1:1] --> 0-or-1
912 swap$ % 0-or-1 string[1:1]
913 chr.to.int$
914 "9" chr.to.int$ le % string[1:1} <= "9" --> 0-or-1
915 and
916}
917
918FUNCTION { skip.digits }
919{
920 %% skip over leading digits in string
921 %% stack in: string
922 %% stack out: rest-of-string leading-digits
923
924 %% "DEBUG: enter skip.digits " cite$ * warning$
925
926 %% dump.stack.1
927
928 duplicate$
929 't :=
930 't.org :=
931 "" 'u :=
932
933 { t text.length$ }
934 {
935 %% "=================DEBUG: skip.digits t = [" t * "]" * warning$
936 t is.leading.digit
937 { t #2 t text.length$ #1 - substring$ }
938 {
939 t 'u :=
940 ""
941 }
942 if$
943 't :=
944 }
945 while$
946
947 u % rest of string
948 t.org #1 t.org text.length$ u text.length$ - substring$ % leading digits
949
950 %% "DEBUG: t.org = [" t.org * "]" * warning$
951 %% "DEBUG: u = [" u * "]" * warning$
952
953 %% dump.stack.2
954
955 %% "DEBUG: leave skip.digits " cite$ * warning$
956}
957
958FUNCTION { skip.nondigits }
959{
960 %% skip over leading nondigits in string
961 %% stack in: string
962 %% stack out: rest-of-string
963
964 %% "DEBUG: enter skip.nondigits " cite$ * warning$
965
966 't :=
967 "" 'u :=
968
969 { t text.length$ }
970 {
971 %% "=================DEBUG: skip.nondigits t = [" t * "]" * warning$
972 t is.leading.digit
973 {
974 t 'u :=
975 ""
976 }
977 { t #2 t text.length$ #1 - substring$ }
978 if$
979 't :=
980 }
981 while$
982
983 u % rest of string
984
985 %% dump.stack.1
986 %% "DEBUG: leave skip.nondigits " cite$ * warning$
987}
988
989FUNCTION { parse.next.number }
990{
991 %% stack in: string
992 %% stack out: rest-of-string next-numeric-part-of-string
993 %% Example:
994 %% stack in: "123:1--123:59"
995 %% stack out: ":1--123:59" "123"
996
997 's :=
998 s skip.nondigits 's :=
999 s skip.digits
1000}
1001
1002FUNCTION { reduce.pages.to.page.count }
1003{
1004 %% Stack in: arbitrary-and-unused
1005 %% Stack out: unchanged
1006 %%
1007 %% For the new-style pagination with article number and numpages or
1008 %% pages, we expect to have BibTeX entries containing something like
1009 %% articleno = "17",
1010 %% pages = "1--23",
1011 %% with output "Article 17, 23 pages",
1012 %% or
1013 %% articleno = "17",
1014 %% numpages = "23",
1015 %% with output "Article 17, 23 pages",
1016 %% or
1017 %% articleno = "17",
1018 %% pages = "17:1--17:23",
1019 %% with output "Article 17, 23 pages",
1020 %%
1021 %% If articleno is missing or empty, then we should output "1--23",
1022 %% "23" (with a warning of a missing articleno), or "17:1--17:23",
1023 %% respectively.
1024
1025 %% "DEBUG: enter reduce.pages.to.page.count " cite$ * warning$
1026
1027 %% "DEBUG: pages = [" pages * "]" * warning$
1028
1029 pages
1030 parse.next.number 'p1 :=
1031 parse.next.number 'p2 :=
1032 parse.next.number 'p3 :=
1033 parse.next.number 'page.count :=
1034
1035 duplicate$
1036 empty.or.unknown
1037 { }
1038 {
1039 duplicate$ "unexpected trailing garbage [" swap$ *
1040 "] after n:p1--n:p2 in pages = [" *
1041 pages *
1042 "] in " *
1043 cite$ *
1044 warning$
1045 }
1046 if$
1047
1048 pop$
1049
1050 %% "DEBUG: reduce.pages.to.page.count: "
1051 %% " p1 = " p1 * *
1052 %% " p2 = " p2 * *
1053 %% " p3 = " p3 * *
1054 %% " p4 = " page.count * *
1055 %% " in " cite$ * * warning$
1056
1057 p1 p3 = p2 "1" = and numpages empty.or.unknown and
1058 { "INFO: reduced pages = [" pages * "] to numpages = [" * page.count * "]" * warning$ }
1059 {
1060 numpages empty.or.unknown
1061 { pages }
1062 { numpages }
1063 if$
1064 'page.count :=
1065 }
1066 if$
1067
1068 p1 "1" = p3 empty.or.unknown and numpages empty.or.unknown and
1069 {
1070 p2 'page.count :=
1071 "INFO: reduced pages = [" pages * "] to numpages = [" * page.count * "]" * warning$
1072 }
1073 {
1074 numpages empty.or.unknown
1075 { pages }
1076 { numpages }
1077 if$
1078 'page.count :=
1079 }
1080 if$
1081
1082 %% "DEBUG: leave reduce.pages.to.page.count " cite$ * warning$
1083}
1084
1085FUNCTION { new.block.checkb }
1086{ % issue a new.block only if at least one of top two stack strings is not empty
1087 empty.or.unknown
1088 swap$ empty.or.unknown
1089 and
1090 'skip$
1091 'new.block
1092 if$
1093}
1094
1095FUNCTION { field.or.null }
1096{ % convert empty value to null string, else return value
1097 duplicate$ empty.or.unknown
1098 { pop$ "" }
1099 'skip$
1100 if$
1101}
1102
1103FUNCTION { emphasize }
1104{ % emphasize a non-empty top string on the stack (WITHOUT italic correction)
1105 duplicate$ empty.or.unknown
1106 { pop$ "" }
1107 { "{\em " swap$ * "}" * }
1108 if$
1109}
1110
1111FUNCTION { emphasize.with.italic.correction }
1112{ % convert empty string to null string, or emphasize with a trailing italic correction
1113 duplicate$ empty.or.unknown
1114 { pop$ "" }
1115 { "{\em " swap$ * "\/}" * }
1116 if$
1117}
1118
1119FUNCTION { comma }
1120{ % convert empty string to null string, or brace string and add trailing comma
1121 duplicate$ empty.or.unknown
1122 { pop$ "" }
1123 { "{" swap$ * "}," * }
1124 if$
1125}
1126
1127FUNCTION { format.names }
1128{
1129 % Format bibliographical entries with the first author last name first,
1130 % and subsequent authors with initials followed by last name.
1131 % All names are formatted in this routine.
1132
1133 's :=
1134 #1 'nameptr := % nameptr = 1;
1135 s num.names$ 'numnames := % numnames = num.name$(s);
1136 numnames 'namesleft :=
1137 { namesleft #0 > }
1138 { nameptr #1 =
1139 %NO: BAD ORDER: {"{" s nameptr "{ff~}{ll}{, jj}{, vv}" format.name$ * "}" * 't := }
1140 %NO: BAD ORDER: {"{" s nameptr "{ff~}{ll}{, jj}{, vv}" format.name$ * "}" * 't := }
1141 {"\bibinfo{person}{" s nameptr "{ff }{vv }{ll}{, jj}" format.name$ * "}" * 't := }
1142 {"\bibinfo{person}{" s nameptr "{ff }{vv }{ll}{, jj}" format.name$ * "}" * 't := }
1143 if$
1144 nameptr #1 >
1145 {
1146 namesleft #1 >
1147 { ", " * t * }
1148 {
1149 numnames #2 >
1150 { "," * }
1151 'skip$
1152 if$
1153 t "{\sc others}" =
1154 { " {et~al\mbox{.}}" * } % jrh: avoid spacing problems
1155 { " {and} " * t * } % from Chicago Manual of Style
1156 if$
1157 }
1158 if$
1159 }
1160 't
1161 if$
1162 nameptr #1 + 'nameptr := % nameptr += 1;
1163 namesleft #1 - 'namesleft := % namesleft =- 1;
1164 }
1165 while$
1166}
1167
1168FUNCTION { my.full.label }
1169{
1170 's :=
1171 #1 'nameptr := % nameptr = 1;
1172 s num.names$ 'numnames := % numnames = num.name$(s);
1173 numnames 'namesleft :=
1174 { namesleft #0 > }
1175
1176 { s nameptr "{vv~}{ll}" format.name$ 't := % get the next name
1177 nameptr #1 >
1178 {
1179 namesleft #1 >
1180 { ", " * t * }
1181 {
1182 numnames #2 >
1183 { "," * }
1184 'skip$
1185 if$
1186 t "others" =
1187 { " et~al\mbox{.}" * } % jrh: avoid spacing problems
1188 { " and " * t * } % from Chicago Manual of Style
1189 if$
1190 }
1191 if$
1192 }
1193 't
1194 if$
1195 nameptr #1 + 'nameptr := % nameptr += 1;
1196 namesleft #1 - 'namesleft := % namesleft =- 1;
1197 }
1198 while$
1199
1200}
1201
1202FUNCTION { format.names.fml }
1203{
1204 % Format names in "familiar" format, with first initial followed by
1205 % last name. Like format.names, ALL names are formatted.
1206 % jtb: The names are NOT put in small caps
1207
1208 's :=
1209 #1 'nameptr := % nameptr = 1;
1210 s num.names$ 'numnames := % numnames = num.name$(s);
1211 numnames 'namesleft :=
1212 { namesleft #0 > }
1213
1214 {
1215 "\bibinfo{person}{" s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ * "}" * 't :=
1216
1217 nameptr #1 >
1218 {
1219 namesleft #1 >
1220 { ", " * t * }
1221 {
1222 numnames #2 >
1223 { "," * }
1224 'skip$
1225 if$
1226 t "{others}" =
1227 { " {et~al\mbox{.}}" * }
1228 { " {and} " * t * }
1229 if$
1230 }
1231 if$
1232 }
1233 't
1234 if$
1235 nameptr #1 + 'nameptr := % nameptr += 1;
1236 namesleft #1 - 'namesleft := % namesleft =- 1;
1237 }
1238 while$
1239}
1240
1241FUNCTION { format.authors }
1242{
1243 author empty.or.unknown
1244 { "" }
1245 {
1246 "\bibfield{author}{"
1247 author format.names add.period$ * "}" *} % jtb: add period if none before
1248 if$
1249}
1250
1251FUNCTION { format.key }
1252{
1253 empty.or.unknown
1254 { key field.or.null }
1255 { "" }
1256 if$
1257}
1258
1259FUNCTION { format.no.key }
1260{
1261 empty.or.unknown
1262 { "" }
1263 { "" }
1264 if$
1265}
1266
1267FUNCTION { format.editors.fml }
1268{
1269 % Format editor names for use in the "in" types: inbook, incollection,
1270 % inproceedings: first initial, then last names. When editors are the
1271 % LABEL for an entry, then format.editor is used which lists editors
1272 % by last name first.
1273
1274 editor empty.or.unknown
1275 { "" }
1276 {
1277 "\bibfield{editor}{"
1278 editor format.names.fml
1279 * "}" *
1280 editor num.names$ #1 >
1281 { " (Eds.)" * }
1282 { " (Ed.)" * }
1283 if$
1284 }
1285 if$
1286}
1287
1288FUNCTION { format.editors }
1289{ % format editor names for use in labels, last names first.
1290 editor empty.or.unknown
1291 { "" }
1292 {
1293 "\bibfield{editor}{"
1294 editor format.names
1295 * "}" *
1296 editor num.names$ #1 >
1297 { " (Eds.)." * }
1298 { " (Ed.)." * }
1299 if$
1300 }
1301 if$
1302}
1303
1304FUNCTION { format.articletitle }
1305{
1306 title empty.or.unknown
1307 { "" }
1308 % Use this to preserve lettercase in titles:
1309 { "\showarticletitle{" title * "}" * }
1310 % Use this for downcase title style:
1311 % { \showarticletitle{" title "t" change.case$ * "}" * }
1312 if$
1313}
1314
1315FUNCTION { format.title }
1316{
1317 title empty.or.unknown
1318 { "" }
1319 % Use this to preserve lettercase in titles:
1320 { "\bibinfo{title}{" title * "}" * }
1321 % Use this for downcase title style:
1322 % { title "t" change.case$ }
1323 if$
1324}
1325
1326FUNCTION { n.dashify }
1327{
1328 't :=
1329 ""
1330 { t empty.or.unknown not }
1331 {
1332 t #1 #1 substring$ "-" =
1333 {
1334 t #1 #2 substring$ "--" = not
1335 { "--" *
1336 t #2 global.max$ substring$ 't :=
1337 }
1338 {
1339 { t #1 #1 substring$ "-" = }
1340 {
1341 "-" *
1342 t #2 global.max$ substring$ 't :=
1343 }
1344 while$
1345 }
1346 if$
1347 }
1348 {
1349 t #1 #1 substring$ *
1350 t #2 global.max$ substring$ 't :=
1351 }
1352 if$
1353 }
1354 while$
1355}
1356
1357FUNCTION { format.btitle }
1358{
1359 "\bibinfo{booktitle}{"
1360 edition empty.or.unknown
1361 { title emphasize }
1362 { title empty.or.unknown
1363 { title emphasize } % jtb: what is this supposed to do ?!?
1364 { "{\em " title * "\/} (\bibinfo{edition}{" * edition "l" change.case$ *
1365 "} ed.)" * } % jtb: no parens for ed.
1366 if$
1367 }
1368 if$
1369 * "}" *
1370}
1371
1372FUNCTION { format.emphasize.booktitle }
1373{ % push "" or "{\em booktitle}" or "{\em booktitle}, (second ed.)" on stack
1374 "\bibinfo{booktitle}{"
1375 edition empty.or.unknown
1376 { booktitle emphasize }
1377 { booktitle empty.or.unknown
1378 { "" }
1379 { "{\em " booktitle * "} (\bibinfo{edition}{" *
1380 edition "l" change.case$ * "} ed.)" * }
1381 if$
1382 }
1383 if$
1384 * "}" *
1385}
1386
1387FUNCTION { format.city }
1388{
1389 % jtb: if the preceding string (the title of the conference) is non-empty,
1390 % jtb: append the location, otherwise leave empty (so as to trigger the
1391 % jtb: error message in output.check
1392
1393 duplicate$ empty.or.unknown
1394 { }
1395 {
1396 city empty.or.unknown
1397 {
1398 date empty.or.unknown
1399 { }
1400 { " (" * date * ")" * }
1401 if$
1402 }
1403 {
1404 date empty.or.unknown
1405 { " (" * city * ")" * }
1406 { " (" * city * ", " * date * ")" * }
1407 if$
1408 }
1409 if$
1410 }
1411 if$
1412}
1413
1414FUNCTION { tie.or.space.connect }
1415{
1416 duplicate$ text.length$ #3 <
1417 { "~" }
1418 { " " }
1419 if$
1420 swap$ * *
1421}
1422
1423FUNCTION { either.or.check }
1424{
1425 empty.or.unknown
1426 'pop$
1427 { "can't use both " swap$ * " fields in " * cite$ * warning$ }
1428 if$
1429}
1430
1431FUNCTION { format.bvolume }
1432{
1433 % jtb: If there is a series, this is added and the volume trails after it.
1434 % jtb: Otherwise, "Vol" is Capitalized.
1435
1436 volume empty.or.unknown
1437 { "" }
1438 {
1439 series empty.or.unknown
1440 { "Vol.~\bibinfo{volume}{" volume "}" * *}
1441 { "\bibinfo{series}{" series "}, " * *
1442 "Vol.~\bibinfo{volume}{" volume "}" * * *}
1443 if$
1444 "volume and number" number either.or.check
1445 }
1446 if$
1447}
1448
1449FUNCTION { format.bvolume.noseries }
1450{
1451 volume empty.or.unknown
1452 { "" }
1453 { "Vol.~\bibinfo{volume}{" volume "}" * *
1454 "volume and number" number either.or.check
1455 }
1456 if$
1457}
1458
1459FUNCTION { format.series }
1460{
1461 series empty.or.unknown
1462 {""}
1463 {" {\em (\bibinfo{series}{" * series "})}" *}
1464 if$
1465}
1466
1467FUNCTION { format.number.series }
1468{
1469 volume empty.or.unknown
1470 {
1471 number empty.or.unknown
1472 {
1473 volume empty.or.unknown
1474 { "" }
1475 {
1476 series empty.or.unknown
1477 { "" }
1478 { " (\bibinfo{series}{" series * "})" * }
1479 if$
1480 }
1481 if$
1482 } % { series field.or.null }
1483 {
1484 output.state mid.sentence =
1485 { "Number" } % gnp - changed to mixed case always
1486 { "Number" }
1487 if$
1488 number tie.or.space.connect series empty.or.unknown
1489 { "there's a number but no series in " cite$ * warning$ }
1490 { " in \bibinfo{series}{" * series * "}" * }
1491 if$
1492 }
1493 if$
1494 }
1495 {
1496 ""
1497 }
1498 if$
1499}
1500
1501FUNCTION { multi.page.check }
1502{
1503 't :=
1504 #0 'multiresult :=
1505 { multiresult not
1506 t empty.or.unknown not
1507 and
1508 }
1509 { t #1 #1 substring$
1510 duplicate$ "-" =
1511 swap$ duplicate$ "," =
1512 swap$ "+" =
1513 or or
1514 { #1 'multiresult := }
1515 { t #2 global.max$ substring$ 't := }
1516 if$
1517 }
1518 while$
1519 multiresult
1520}
1521
1522FUNCTION { format.pages }
1523{
1524 pages empty.or.unknown
1525 { "" }
1526 { "\bibinfo{pages}{"
1527 pages multi.page.check
1528 { pages n.dashify } % gnp - removed () % jtb: removed pp.
1529 { pages }
1530 if$
1531 * "}" *
1532 }
1533 if$
1534}
1535
1536FUNCTION { format.pages.check.without.articleno }
1537{ %% format pages field only if articleno is absent
1538 %% Stack out: pages-specification
1539 numpages missing$ pages missing$ and
1540 { "page numbers missing in both pages and numpages fields in " cite$ * warning$ }
1541 { }
1542 if$
1543
1544 articleno empty.or.unknown
1545 {
1546 pages missing$
1547 { numpages }
1548 { format.pages }
1549 if$
1550 }
1551 { "" }
1552 if$
1553}
1554
1555FUNCTION { format.pages.check }
1556{
1557 pages empty.or.unknown
1558 { "page numbers missing in " cite$ * warning$ "" }
1559 { pages n.dashify }
1560 if$
1561}
1562
1563FUNCTION { format.bookpages }
1564{
1565 bookpages empty.or.unknown
1566 { "" }
1567 { bookpages "book pages" tie.or.space.connect }
1568 if$
1569}
1570
1571FUNCTION { format.named.pages }
1572{
1573 pages empty.or.unknown
1574 { "" }
1575 { format.pages "pages" tie.or.space.connect }
1576 if$
1577}
1578
1579%
1580% Changed by Boris Veytsman, 2011-03-13
1581% Now the word "pages" is printed even if
1582% there field pages is not empty.
1583%
1584
1585FUNCTION { format.page.count }
1586{
1587 page.count empty.or.unknown
1588 { "" }
1589 {
1590 articleno empty.or.unknown
1591 { "numpages field, but no articleno field, in " cite$ * warning$ }
1592 { }
1593 if$
1594 "\bibinfo{numpages}{" page.count * "}~pages" *
1595 }
1596 if$
1597}
1598
1599FUNCTION { format.articleno.numpages }
1600{
1601 %% There are seven possible outputs, depending on which fields are set.
1602 %%
1603 %% These four are handled here:
1604 %%
1605 %% articleno, numpages, pages -> "Article articleno-value, numpages-value pages"
1606 %% articleno, numpages -> "Article articleno-value, numpages-value pages"
1607 %% articleno, pages -> "Article articleno-value, reduced-pages-value pages"
1608 %% articleno -> "Article articleno-value" and warn about missing numpages
1609 %%
1610 %% The remaining three have already been handled by
1611 %% format.pages.check.without.articleno:
1612 %%
1613 %% numpages, pages -> "pages-value"
1614 %% numpages -> "numpages-value"
1615 %% pages -> "pages-value"
1616
1617 articleno empty.or.unknown
1618 {
1619 numpages empty.or.unknown
1620 { }
1621 { "require articleno with numpages field in " cite$ * warning$ }
1622 if$
1623 ""
1624 }
1625 {
1626 numpages empty.or.unknown
1627 {
1628 pages empty.or.unknown
1629 {
1630 "require pages or numpages fields with articleno field in " cite$ * warning$
1631 "" 'page.count :=
1632 }
1633 { reduce.pages.to.page.count }
1634 if$
1635 }
1636 { numpages 'page.count := }
1637 if$
1638
1639 %% The Article number is now handled in format.day.month.year because
1640 %% ACM prefers the style "Digital Libraries 12, 3, Article 5 (July 2008)"
1641 %% over "Digital Libraries 12, 3 (July 2008), Article 5"
1642 %% format.articleno output
1643 format.page.count
1644 }
1645 if$
1646}
1647
1648FUNCTION { format.journal.volume.number.day.month.year }
1649{
1650 % By Young (and Spencer)
1651 % GNP - fixed bugs with missing volume, number, and/or pages
1652 %
1653 % Format journal, volume, number, pages for article types.
1654 %
1655 journal empty.or.unknown
1656 { "no journal in " cite$ * warning$
1657 "" }
1658% { journal emphasize.with.italic.correction }
1659 {
1660 "\bibinfo{journal}{"
1661 journal "Journal of the ACM" =
1662 { "{\it J. ACM}" }
1663 {
1664 journal "American Mathematical Society Translations" =
1665 { "{\it Amer. Math. Soc. Transl.}" }
1666 {
1667 journal "Bulletin of the American Mathematical Society" =
1668 { "{\it Bull. Amer. Math. Soc.}" }
1669 {
1670 journal "Proceedings of the American Mathematical Society" =
1671 { "{\it Proc. Amer. Math. Soc.}" }
1672 {
1673 journal "Transactions of the American Mathematical Society" =
1674 { "{\it Trans. Amer. Math. Soc.}" }
1675 {
1676 journal "Communications of the {ACM}" =
1677 { "{\it Commun. {ACM}}" }
1678 {
1679 journal "{ACM} Computing Surveys" =
1680 { "{\it Comput. Surveys}" }
1681 {
1682 journal "{ACM} Transactions on Mathematical Software" =
1683 { "{\it {ACM} Trans. Math. Software}" }
1684 {
1685 journal "{ACM} {SIGNUM} Newsletter" =
1686 { "{\it {ACM} {SIGNUM} Newslett.}" }
1687 {
1688 journal "American Journal of Sociology" =
1689 { "{\it Amer. J. Sociology}" }
1690 {
1691 journal "Journal of the American Statistical Association" =
1692 { "{\it J. Amer. Statist. Assoc.}" }
1693 {
1694 journal "Applied Mathematics and Computation" =
1695 { "{\it Appl. Math. Comput.}" }
1696 {
1697 journal "American Mathematical Monthly" =
1698 { "{\it Amer. Math. Monthly}" }
1699 {
1700 journal "British Journal of Mathematical and Statistical Psychology" =
1701 { "{\it Brit. J. Math. Statist. Psych.}" }
1702 {
1703 journal "Canadian Mathematical Bulletin" =
1704 { "{\it Canad. Math. Bull.}" }
1705 {
1706 journal "Journal of Computational and Applied Mathematics" =
1707 { "{\it J. Comput. Appl. Math.}" }
1708 {
1709 journal "Journal of Computational Physics" =
1710 { "{\it J. Comput. Phys.}" }
1711 {
1712 journal "Computers and Structures" =
1713 { "{\it Comput. \& Structures}" }
1714 {
1715 journal "The Computer Journal" =
1716 { "{\it Comput. J.}" }
1717 {
1718 journal "Journal of Computer and System Sciences" =
1719 { "{\it J. Comput. System Sci.}" }
1720 {
1721 journal "Contemporary Mathematics" =
1722 { "{\it Contemp. Math.}" }
1723 {
1724 journal "Crelle's Journal" =
1725 { "{\it Crelle's J.}" }
1726 {
1727 journal "Giornale di Mathematiche" =
1728 { "{\it Giorn. Mat.}" }
1729 {
1730 journal "{IEEE} Transactions on Computers" =
1731 { "{\it {IEEE} Trans. Comput.}" }
1732 {
1733 journal "{IEEE} Transactions on Automatic Control" =
1734 { "{\it {IEEE} Trans. Automat. Control}" }
1735 {
1736 journal "Proceedings of the {IEEE}" =
1737 { "{\it Proc. {IEEE}}" }
1738 {
1739 journal "{IEEE} Transactions on Aerospace and Electronic Systems" =
1740 { "{\it {IEEE} Trans. Aerospace Electron. Systems}" }
1741 {
1742 journal "{IMA} Journal of Numerical Analysis" =
1743 { "{\it {IMA} J. Numer. Anal.}" }
1744 {
1745 journal "Information Processing Letters" =
1746 { "{\it Inform. Process. Lett.}" }
1747 {
1748 journal "Journal of the Institute of Mathematics and its Applications" =
1749 { "{\it J. Inst. Math. Appl.}" }
1750 {
1751 journal "International Journal of Control" =
1752 { "{\it Internat. J. Control}" }
1753 {
1754 journal "International Journal for Numerical Methods in Engineering" =
1755 { "{\it Internat. J. Numer. Methods Engrg.}" }
1756 {
1757 journal "International Journal of Supercomputing Applications" =
1758 { "{\it Internat. J. Supercomputing Applic.}" }
1759 {
1760 journal "Journal of Research of the National Bureau of Standards" =
1761 { "{\it J. Res. Nat. Bur. Standards}" }
1762 {
1763 journal "Linear Algebra and its Applications" =
1764 { "{\it Linear Algebra Appl.}" }
1765 {
1766 journal "Journal of Mathematical Analysis and Applications" =
1767 { "{\it J. Math. Anal. Appl.}" }
1768 {
1769 journal "Mathematische Annalen" =
1770 { "{\it Math. Ann.}" }
1771 {
1772 journal "Journal of Mathematical Physics" =
1773 { "{\it J. Math. Phys.}" }
1774 {
1775 journal "Mathematics of Computation" =
1776 { "{\it Math. Comp.}" }
1777 {
1778 journal "Mathematica Scandinavica" =
1779 { "{\it Math. Scand.}" }
1780 {
1781 journal "Mathematical Tables and Other Aids to Computation" =
1782 { "{\it Math. Tables Aids Comput.}" }
1783 {
1784 journal "Numerische Mathematik" =
1785 { "{\it Numer. Math.}" }
1786 {
1787 journal "Pacific Journal of Mathematics" =
1788 { "{\it Pacific J. Math.}" }
1789 {
1790 journal "Journal of Parallel and Distributed Computing" =
1791 { "{\it J. Parallel and Distrib. Comput.}" }
1792 {
1793 journal "Parallel Computing" =
1794 { "{\it Parallel Comput.}" }
1795 {
1796 journal "Philosophical Magazine" =
1797 { "{\it Philos. Mag.}" }
1798 {
1799 journal "Proceedings of the National Academy of Sciences of the USA" =
1800 { "{\it Proc. Nat. Acad. Sci. U. S. A.}" }
1801 {
1802 journal "Quarterly Journal of Mathematics, Oxford, Series (2)" =
1803 { "{\it Quart. J. Math. Oxford Ser. (2)}" }
1804 {
1805 journal "Quarterly of Applied Mathematics" =
1806 { "{\it Quart. Appl. Math.}" }
1807 {
1808 journal "Review of the International Statisical Institute" =
1809 { "{\it Rev. Inst. Internat. Statist.}" }
1810 {
1811 journal "Journal of the Society for Industrial and Applied Mathematics" =
1812 { "{\it J. Soc. Indust. Appl. Math.}" }
1813 {
1814 journal "Journal of the Society for Industrial and Applied Mathematics, Series B, Numerical Analysis" =
1815 { "{\it J. Soc. Indust. Appl. Math. Ser. B Numer. Anal.}" }
1816 {
1817 journal "{SIAM} Journal on Algebraic and Discrete Methods" =
1818 { "{\it {SIAM} J. Algebraic Discrete Methods}" }
1819 {
1820 journal "{SIAM} Journal on Applied Mathematics" =
1821 { "{\it {SIAM} J. Appl. Math.}" }
1822 {
1823 journal "{SIAM} Journal on Computing" =
1824 { "{\it {SIAM} J. Comput.}" }
1825 {
1826 journal "{SIAM} Journal on Matrix Analysis and Applications" =
1827 { "{\it {SIAM} J. Matrix Anal. Appl.}" }
1828 {
1829 journal "{SIAM} Journal on Numerical Analysis" =
1830 { "{\it {SIAM} J. Numer. Anal.}" }
1831 {
1832 journal "{SIAM} Review" =
1833 { "{\it {SIAM} Rev.}" }
1834 {
1835 journal "{SIAM} Journal on Scientific and Statistical Computing" =
1836 { "{\it {SIAM} J. Sci. Statist. Comput.}" }
1837 {
1838 journal "Software Practice and Experience" =
1839 { "{\it Software Prac. Experience}" }
1840 {
1841 journal "Statistical Science" =
1842 { "{\it Statist. Sci.}" }
1843 {
1844 journal "{USSR} Computational Mathematics and Mathematical Physics" =
1845 { "{\it {U. S. S. R.} Comput. Math. and Math. Phys.}" }
1846 {
1847 journal "Journal of {VLSI} and Computer Systems" =
1848 { "{\it J. {VLSI} Comput. Syst.}" }
1849 {
1850 journal "Zeitschrift fur Angewandte Mathematik und Mechanik" =
1851 { "{\it Z. Angew. Math. Mech.}" }
1852 {
1853 journal "Zeitschrift fur Angewandte Mathematik und Physik" =
1854 { "{\it Z. Angew. Math. Phys.}" }
1855 {
1856 journal "ACM Computing Surveys" =
1857 { "{\it Comput. Surveys}" }
1858 {
1859 journal "ACM Transactions on Mathematical Software" =
1860 { "{\it ACM Trans. Math. Software}" }
1861 {
1862 journal "ACM {SIGNUM} Newsletter" =
1863 { "{\it ACM {SIGNUM} Newslett.}" }
1864 {
1865 journal "IEEE Transactions on Computers" =
1866 { "{\it IEEE Trans. Comput.}" }
1867 {
1868 journal "IEEE Transactions on Automatic Control" =
1869 { "{\it IEEE Trans. Automat. Control}" }
1870 {
1871 journal "Proceedings of the IEEE" =
1872 { "{\it Proc. IEEE}" }
1873 {
1874 journal "IEEE Transactions on Aerospace and Electronic Systems" =
1875 { "{\it IEEE Trans. Aerospace Electron. Systems}" }
1876 {
1877 journal "IMA Journal of Numerical Analysis" =
1878 { "{\it IMA J. Numer. Anal.}" }
1879 {
1880 journal "SIAM Journal on Algebraic and Discrete Methods" =
1881 { "{\it SIAM J. Algebraic Discrete Methods}" }
1882 {
1883 journal "SIAM Journal on Applied Mathematics" =
1884 { "{\it SIAM J. Appl. Math.}" }
1885 {
1886 journal "SIAM Journal on Computing" =
1887 { "{\it SIAM J. Comput.}" }
1888 {
1889 journal "SIAM Journal on Matrix Analysis and Applications" =
1890 { "{\it SIAM J. Matrix Anal. Appl.}" }
1891 {
1892 journal "SIAM Journal on Numerical Analysis" =
1893 { "{\it SIAM J. Numer. Anal.}" }
1894 {
1895 journal "SIAM Review" =
1896 { "{\it SIAM Rev.}" }
1897 {
1898 journal "SIAM Journal on Scientific and Statistical Computing" =
1899 { "{\it SIAM J. Sci. Statist. Comput.}" }
1900 {
1901 journal "USSR Computational Mathematics and Mathematical Physics" =
1902 { "{\it U. S. S. R. Comput. Math. and Math. Phys.}" }
1903 {
1904 journal "Journal of VLSI and Computer Systems" =
1905 { "{\it J. VLSI Comput. Syst.}" }
1906 {
1907 journal "Communications of the ACM" =
1908 { "{\it Commun. ACM}" }
1909 %% If no match with cases needing special handling, just output journal name
1910 { journal emphasize.with.italic.correction }
1911 if$
1912 }
1913 if$
1914 }
1915 if$
1916 }
1917 if$
1918 }
1919 if$
1920 }
1921 if$
1922 }
1923 if$
1924 }
1925 if$
1926 }
1927 if$
1928 }
1929 if$
1930 }
1931 if$
1932 }
1933 if$
1934 }
1935 if$
1936 }
1937 if$
1938 }
1939 if$
1940 }
1941 if$
1942 }
1943 if$
1944 }
1945 if$
1946 }
1947 if$
1948 }
1949 if$
1950 }
1951 if$
1952 }
1953 if$
1954 }
1955 if$
1956 }
1957 if$
1958 }
1959 if$
1960 }
1961 if$
1962 }
1963 if$
1964 }
1965 if$
1966 }
1967 if$
1968 }
1969 if$
1970 }
1971 if$
1972 }
1973 if$
1974 }
1975 if$
1976 }
1977 if$
1978 }
1979 if$
1980 }
1981 if$
1982 }
1983 if$
1984 }
1985 if$
1986 }
1987 if$
1988 }
1989 if$
1990 }
1991 if$
1992 }
1993 if$
1994 }
1995 if$
1996 }
1997 if$
1998 }
1999 if$
2000 }
2001 if$
2002 }
2003 if$
2004 }
2005 if$
2006 }
2007 if$
2008 }
2009 if$
2010 }
2011 if$
2012 }
2013 if$
2014 }
2015 if$
2016 }
2017 if$
2018 }
2019 if$
2020 }
2021 if$
2022 }
2023 if$
2024 }
2025 if$
2026 }
2027 if$
2028 }
2029 if$
2030 }
2031 if$
2032 }
2033 if$
2034 }
2035 if$
2036 }
2037 if$
2038 }
2039 if$
2040 }
2041 if$
2042 }
2043 if$
2044 }
2045 if$
2046 }
2047 if$
2048 }
2049 if$
2050 }
2051 if$
2052 }
2053 if$
2054 }
2055 if$
2056 }
2057 if$
2058 }
2059 if$
2060 }
2061 if$
2062 }
2063 if$
2064 }
2065 if$
2066 }
2067 if$
2068 }
2069 if$
2070 }
2071 if$
2072 }
2073 if$
2074 }
2075 if$
2076 * "}" *
2077 }
2078 if$
2079
2080 number empty.or.unknown
2081 {
2082 volume empty.or.unknown
2083 { "no number and no volume in " cite$ * warning$ "" * }
2084 { " " * " \bibinfo{volume}{" * volume * "}" * }
2085 if$
2086 }
2087 {
2088 volume empty.or.unknown
2089 {
2090 "unusual to have number, but no volume, for " cite$ * warning$
2091 " \bibinfo{number}{" * number * "}" *
2092 }
2093 { " \bibinfo{volume}{" * volume * "}, \bibinfo{number}{" *
2094 number * "}" *}
2095 if$
2096 }
2097 if$
2098
2099 format.day.month.year *
2100}
2101
2102FUNCTION { format.chapter.pages }
2103{
2104 chapter empty.or.unknown
2105 'format.pages
2106 { type empty.or.unknown
2107 { "Chapter" } % gnp - changed to mixed case
2108 { type "t" change.case$ }
2109 if$
2110 chapter tie.or.space.connect
2111 pages empty.or.unknown
2112 {"page numbers missing in " cite$ * warning$} % gnp - added check
2113 { ", " * format.pages * }
2114 if$
2115 }
2116 if$
2117}
2118
2119FUNCTION { format.in.emphasize.booktitle }
2120{ % jtb: format for collections or proceedings not appearing in a journal
2121 booktitle empty.or.unknown
2122 { "" }
2123 { "In " format.emphasize.booktitle * }
2124 if$
2125}
2126
2127FUNCTION { format.in.booktitle }
2128{ % jtb: format for proceedings appearing in a journal
2129 booktitle empty.or.unknown
2130 { "" }
2131 { "In \bibinfo{booktitle}{" booktitle * "}" * }
2132 if$
2133}
2134
2135FUNCTION { format.in.ed.booktitle }
2136{
2137 booktitle empty.or.unknown
2138 { "" }
2139 { editor empty.or.unknown
2140 { "In " format.emphasize.booktitle * }
2141 % jtb: swapped editor location
2142 { "In " format.emphasize.booktitle * ", " * format.editors.fml * }
2143 if$
2144 }
2145 if$
2146}
2147
2148FUNCTION { format.thesis.type }
2149{ % call with default type on stack top
2150 type empty.or.unknown
2151 'skip$ % use default type
2152 {
2153 pop$ % discard default type
2154 % NO: it is silly to have to brace protect every degree type!: type "t" change.case$
2155 type
2156 }
2157 if$
2158}
2159
2160FUNCTION { format.tr.number }
2161{
2162 "\bibinfo{type}{"
2163 type empty.or.unknown
2164 { "{T}echnical {R}eport" }
2165 'type
2166 if$
2167 "}" * *
2168 number empty.or.unknown
2169 { "t" change.case$ }
2170 %% LOOKS BAD: { "." * number tie.or.space.connect }
2171 %% Prefer "Research report RJ687." to "Research report. RJ687."
2172 { number tie.or.space.connect }
2173 if$
2174}
2175
2176FUNCTION { format.advisor }
2177{
2178 advisor empty.or.unknown
2179 { "" }
2180 { "Advisor(s) " advisor * }
2181 if$
2182}
2183
2184FUNCTION { format.article.crossref }
2185{ "See"
2186 "\citeN{" * crossref * "}" *
2187}
2188
2189FUNCTION { format.crossref.editor }
2190{
2191 editor #1 "{vv~}{ll}" format.name$
2192 editor num.names$ duplicate$
2193 #2 >
2194 { pop$ " et~al\mbox{.}" * } % jrh: avoid spacing problems
2195 { #2 <
2196 'skip$
2197 { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
2198 { " et~al\mbox{.}" * } % jrh: avoid spacing problems
2199 { " and " * editor #2 "{vv~}{ll}" format.name$ * }
2200 if$
2201 }
2202 if$
2203 }
2204 if$
2205}
2206
2207FUNCTION { format.book.crossref }
2208{
2209 volume empty.or.unknown
2210 { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
2211 "In "
2212 }
2213 { "Volume" volume tie.or.space.connect % gnp - changed to mixed case
2214 " of " *
2215 }
2216 if$
2217 editor empty.or.unknown
2218 editor field.or.null author field.or.null =
2219 or
2220 { key empty.or.unknown
2221 { series empty.or.unknown
2222 { "need editor, key, or series for " cite$ * " to crossref " *
2223 crossref * warning$
2224 "" *
2225 }
2226 { "{\em " * series * "\/}" * }
2227 if$
2228 }
2229 { key * }
2230 if$
2231 }
2232 { format.crossref.editor * }
2233 if$
2234 " \citeN{" * crossref * "}" *
2235}
2236
2237FUNCTION { format.incoll.inproc.crossref }
2238{ "See"
2239 " \citeN{" * crossref * "}" *
2240}
2241
2242FUNCTION { format.lab.names }
2243{
2244 % format.lab.names:
2245 %
2246 % determines "short" names for the abbreviated author information.
2247 % "Long" labels are created in calc.label, using the routine my.full.label
2248 % to format author and editor fields.
2249 %
2250 % There are 4 cases for labels. (n=3 in the example)
2251 % a) one author Foo
2252 % b) one to n Foo, Bar and Baz
2253 % c) use of "and others" Foo, Bar et al.
2254 % d) more than n Foo et al.
2255
2256 's :=
2257 s num.names$ 'numnames :=
2258 numnames #2 > % change number to number of others allowed before
2259 % forcing "et al".
2260 { s #1 "{vv~}{ll}" format.name$ " et~al\mbox{.}" * } % jrh: \mbox{} added
2261 {
2262 numnames #1 - 'namesleft :=
2263 #2 'nameptr :=
2264 s #1 "{vv~}{ll}" format.name$
2265 { namesleft #0 > }
2266 { nameptr numnames =
2267 { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
2268 { " et~al\mbox{.}" * } % jrh: avoid spacing problems
2269 { " and " * s nameptr "{vv~}{ll}" format.name$ * }
2270 if$
2271 }
2272 { ", " * s nameptr "{vv~}{ll}" format.name$ * }
2273 if$
2274 nameptr #1 + 'nameptr :=
2275 namesleft #1 - 'namesleft :=
2276 }
2277 while$
2278 }
2279 if$
2280}
2281
2282FUNCTION { author.key.label }
2283{
2284 author empty.or.unknown
2285 { key empty.or.unknown
2286 { "no key, author in " cite$ * warning$
2287 cite$ #1 #3 substring$ }
2288 'key
2289 if$
2290 }
2291 { author format.lab.names }
2292 if$
2293}
2294
2295FUNCTION { author.key.organization.label }
2296{ % added - gnp. Provide label formatting by organization if author is null.
2297 author empty.or.unknown
2298 { organization empty.or.unknown
2299 { key empty.or.unknown
2300 { "no key, author or organization in " cite$ * warning$
2301 cite$ #1 #3 substring$ }
2302 'key
2303 if$
2304 }
2305 { organization }
2306 if$
2307 }
2308 { author format.lab.names }
2309 if$
2310}
2311
2312FUNCTION { editor.key.organization.label }
2313{ % added - gnp. Provide label formatting by organization if editor is null.
2314 editor empty.or.unknown
2315 { organization empty.or.unknown
2316 { key empty.or.unknown
2317 { "no key, editor or organization in " cite$ * warning$
2318 cite$ #1 #3 substring$ }
2319 'key
2320 if$
2321 }
2322 { organization }
2323 if$
2324 }
2325 { editor format.lab.names }
2326 if$
2327}
2328
2329FUNCTION { author.editor.key.label }
2330{
2331 author empty.or.unknown
2332 { editor empty.or.unknown
2333 { key empty.or.unknown
2334 { "no key, author, or editor in " cite$ * warning$
2335 cite$ #1 #3 substring$ }
2336 'key
2337 if$
2338 }
2339 { editor format.lab.names }
2340 if$
2341 }
2342 { author format.lab.names }
2343 if$
2344}
2345
2346FUNCTION { calc.label }
2347{
2348 % Changed - GNP. See also author.organization.sort, editor.organization.sort
2349 % Form label for BibTeX entry. The classification of which fields are used
2350 % for which type of entry (book, inbook, etc.) are taken from alpha.bst.
2351 % The change here from newapa is to also include organization as a
2352 % citation label if author or editor is missing.
2353
2354 type$ "book" =
2355 type$ "inbook" =
2356 or
2357 type$ "periodical" =
2358 or
2359 'author.editor.key.label
2360 { type$ "proceedings" =
2361 'editor.key.organization.label
2362 { type$ "manual" =
2363 'author.key.organization.label
2364 'author.key.label
2365 if$
2366 }
2367 if$
2368 }
2369 if$
2370
2371 author empty.or.unknown % generate the full label citation information.
2372 {
2373 editor empty.or.unknown
2374 {
2375 organization empty.or.unknown
2376 {
2377 key empty.or.unknown
2378 {
2379 "no author, editor, organization, or key in " cite$ * warning$
2380 "??"
2381 }
2382 { key }
2383 if$
2384 }
2385 { organization }
2386 if$
2387 }
2388 { editor my.full.label }
2389 if$
2390 }
2391 { author my.full.label }
2392 if$
2393
2394 % leave label on the stack, to be popped when required.
2395
2396 "}{" * swap$ * "}{" *
2397 % year field.or.null purify$ #-1 #4 substring$ *
2398 %
2399 % save the year for sort processing afterwards (adding a, b, c, etc.)
2400 %
2401 year field.or.null purify$ #-1 #4 substring$
2402 'label.year :=
2403}
2404
2405
2406FUNCTION { output.bibitem }
2407{
2408 newline$
2409 "\bibitem[\protect\citeauthoryear{" write$
2410 calc.label write$
2411 sort.year write$
2412 "}]%" writeln
2413 " {" write$
2414 cite$ write$
2415 "}" writeln
2416 ""
2417 before.all 'output.state :=
2418}
2419
2420
2421FUNCTION { output.issue.doi.coden.isxn.lccn.url.eprint }
2422{ % enter and return with stack empty
2423 %% We switch now from buffered output to output of complete lines, so
2424 %% that the Issue .. URL data have their own lines, and are less likely
2425 %% to be line-wrapped by BibTeX's short-sighted algorithm, which wraps
2426 %% lines longer than 79 characters, backtracking to what it thinks is
2427 %% a break point in the string. Any such wrapping MUST be undone to
2428 %% prevent percent-newline from appearing in DOIs and URLs. The
2429 %% output data are intentionally wrapped in \showxxx{} macros at
2430 %% beginning of line, and that supply their own punctuation (if they
2431 %% are not defined to suppress output entirely), to make it easier for
2432 %% other software to recover them from .bbl files.
2433 %%
2434 %% It also makes it possible to later change the macro definitions
2435 %% to suppress particular output values, or alter their appearance.
2436 %%
2437 %% Note that it is possible for theses, technical reports, and
2438 %% manuals to have ISBNs, and anything that has an ISBN may also
2439 %% have an ISSN. When there are no values for these keys, there
2440 %% is no output generated for them here.
2441
2442 "\newblock" writeln
2443 after.block 'output.state :=
2444
2445 output.issue
2446 output.isbn
2447 output.coden % CODEN is functionally like ISSN, so output them sequentially
2448 output.issn
2449 output.lccn
2450 output.doi % DOI is ALWAYS last according to CrossRef DOI documentation
2451 output.eprint
2452 output.url % but ACM wants URL last
2453}
2454
2455FUNCTION { output.issue.doi.coden.isxn.lccn.url.eprint.note }
2456{ % enter with stack empty, return with empty string on stack
2457 output.issue.doi.coden.isxn.lccn.url.eprint
2458 note empty.or.unknown
2459 { }
2460 {
2461 "\newblock" writeln
2462 output.note
2463 }
2464 if$
2465 ""
2466}
2467
2468FUNCTION { output.issue.doi.coden.isxn.lccn.url.eprint.note.check }
2469{ % enter with stack empty, return with empty string on stack
2470 output.issue.doi.coden.isxn.lccn.url.eprint
2471 note empty.or.unknown
2472 { }
2473 {
2474 "\newblock" writeln
2475 output.note.check
2476 }
2477 if$
2478 ""
2479}
2480
2481FUNCTION { article }
2482{
2483 output.bibitem
2484
2485 author empty.or.unknown
2486 {
2487 editor empty.or.unknown
2488 { "neither author and editor supplied for " cite$ * warning$ }
2489 { format.editors "editor" output.check }
2490 if$
2491 }
2492 { format.authors "author" output.check }
2493 if$
2494
2495 author format.no.key output % added
2496 output.year.check % added
2497 new.block
2498 format.articletitle "title" output.check
2499 new.block
2500 howpublished empty.or.unknown
2501 { }
2502 { "\bibinfo{howpublished}{" howpublished "}" * * output }
2503 if$
2504
2505 crossref missing$
2506 { format.journal.volume.number.day.month.year }
2507 {
2508 "cross reference in @Article{...} is unusual" warning$
2509 format.article.crossref output.nonnull
2510 }
2511 if$
2512 output
2513
2514 format.pages.check.without.articleno output
2515 format.articleno.numpages output
2516 fin.block
2517 output.issue.doi.coden.isxn.lccn.url.eprint.note
2518 fin.entry
2519}
2520
2521FUNCTION { book }
2522{
2523 output.bibitem
2524 author empty.or.unknown
2525 { format.editors "author and editor" output.check }
2526 { format.authors output.nonnull
2527 crossref missing$
2528 { "author and editor" editor either.or.check }
2529 'skip$
2530 if$
2531 }
2532 if$
2533 output.year.check % added
2534 new.block
2535 format.btitle "title" output.check
2536 crossref missing$
2537 { new.sentence % jtb: start a new sentence for series/volume
2538 format.bvolume output
2539 new.block
2540 format.number.series output
2541 new.sentence
2542 publisher "publisher" bibinfo.output.check
2543 address "address" bibinfo.output.check % jtb: require address
2544 fin.sentence
2545 pages empty.or.unknown
2546 { format.bookpages } % use bookpages when pages empty
2547 { format.pages.check "pages" tie.or.space.connect }
2548 if$
2549 output
2550 }
2551 { new.block
2552 format.book.crossref output.nonnull
2553 }
2554 if$
2555 fin.block
2556 output.issue.doi.coden.isxn.lccn.url.eprint.note
2557 fin.entry
2558}
2559
2560FUNCTION { booklet }
2561{
2562 output.bibitem
2563 format.authors output
2564 author format.key output % added
2565 output.year.check % added
2566 new.block
2567 format.title "title" output.check
2568 new.block
2569 howpublished empty.or.unknown
2570 { }
2571 { "\bibinfo{howpublished}{" howpublished "}" * * output }
2572 if$
2573 address output
2574 fin.block
2575 output.issue.doi.coden.isxn.lccn.url.eprint.note
2576 fin.entry
2577}
2578
2579FUNCTION { inbook }
2580{
2581 output.bibitem
2582 author empty.or.unknown
2583 { format.editors
2584 "author and editor" output.check
2585 }
2586 { format.authors output.nonnull
2587 crossref missing$
2588 { "author and editor" editor either.or.check }
2589 'skip$
2590 if$
2591 }
2592 if$
2593 output.year.check % added
2594 new.block
2595 format.btitle "title" output.check
2596 crossref missing$
2597 { new.sentence % jtb: start a new sentence for series/volume
2598 format.bvolume output
2599 new.block
2600 format.number.series output
2601 new.sentence
2602 publisher "publisher" bibinfo.output.check
2603 address "address" bibinfo.output.check % jtb: require address
2604 format.bookpages output
2605 format.chapter.pages
2606 "chapter and pages" output.check % jtb: moved from before publisher
2607 }
2608 {
2609 format.bookpages output
2610 format.chapter.pages "chapter and pages" output.check
2611 new.block
2612 format.book.crossref output.nonnull
2613 }
2614 if$
2615 fin.block
2616 output.issue.doi.coden.isxn.lccn.url.eprint.note
2617 fin.entry
2618}
2619
2620FUNCTION { incollection }
2621{
2622 output.bibitem
2623 format.authors "author" output.check
2624 author format.key output % added
2625 output.year.check % added
2626 new.block
2627 format.articletitle "title" output.check
2628 new.block
2629 crossref missing$
2630 { format.in.ed.booktitle "booktitle" output.check
2631 new.sentence % jtb: start a new sentence for series/volume
2632 format.bvolume output
2633 format.number.series output
2634 new.sentence
2635 publisher "publisher" bibinfo.output.check
2636 address "address" bibinfo.output.check % jtb: require address
2637 format.bookpages output
2638 format.chapter.pages output % gnp - was special.output.nonnull
2639 % left out comma before page numbers
2640 % jtb: moved from before publisher
2641 }
2642 {
2643 format.incoll.inproc.crossref output.nonnull
2644 format.chapter.pages output
2645 }
2646 if$
2647 fin.block
2648 output.issue.doi.coden.isxn.lccn.url.eprint.note
2649 fin.entry
2650}
2651
2652FUNCTION { inproceedings }
2653{
2654 output.bibitem
2655 format.authors "author" output.check
2656 author format.key output % added
2657 output.year.check % added
2658 new.block
2659 format.articletitle "title" output.check
2660 howpublished empty.or.unknown
2661 { }
2662 { "\bibinfo{howpublished}{" howpublished "}" * * output.dot.space }
2663 if$
2664 crossref missing$
2665 {
2666 journal missing$ % jtb: proceedings appearing in journals
2667 { format.in.emphasize.booktitle format.city "booktitle" output.check.dot.space
2668 format.series output.removenospace
2669 format.editors.fml output % BV 2011/09/27 Moved dot to comma
2670 format.bvolume.noseries output
2671 new.sentence
2672 organization output
2673 publisher "publisher" bibinfo.output.check % jtb: require publisher (?)
2674 address "address" bibinfo.output.check % jtb: require address
2675 format.bookpages output
2676 }
2677 {
2678 format.in.booktitle format.city "booktitle" output.check
2679 format.editors.fml output
2680 new.sentence
2681 format.journal.volume.number.day.month.year output
2682 }
2683 if$
2684 format.articleno output
2685 format.pages.check.without.articleno output
2686 }
2687 {
2688 format.incoll.inproc.crossref output.nonnull
2689 format.articleno output
2690 format.pages.check.without.articleno output
2691 }
2692 if$
2693 format.articleno.numpages output
2694 fin.block
2695 output.issue.doi.coden.isxn.lccn.url.eprint.note
2696 fin.entry
2697}
2698
2699FUNCTION { conference } { inproceedings }
2700
2701FUNCTION { manual }
2702{
2703 output.bibitem
2704 author empty.or.unknown
2705 { editor empty.or.unknown
2706 { organization "organization" output.check
2707 organization format.key output } % if all else fails, use key
2708 { format.editors "author and editor" output.check }
2709 if$
2710 }
2711 { format.authors output.nonnull }
2712 if$
2713 output.year.check % added
2714 new.block
2715 format.btitle "title" output.check
2716 organization address new.block.checkb
2717 % jtb: back to normal style: organization, address
2718 organization "organization" output.check
2719 address output
2720 fin.block
2721 output.issue.doi.coden.isxn.lccn.url.eprint.note
2722 fin.entry
2723}
2724
2725FUNCTION { mastersthesis }
2726{
2727 output.bibitem
2728 format.authors "author" output.check
2729 author format.key output % added
2730 output.year.check % added
2731 new.block
2732 format.title emphasize "title" output.check % NB: ACM style requires emphasized thesis title
2733 new.block
2734 "\bibinfo{thesistype}{Master's\ thesis}" format.thesis.type output
2735 new.sentence
2736 school "school" bibinfo.output.check
2737 address empty.or.unknown
2738 { }
2739 { "\bibinfo{address}{" address * "}" * output }
2740 if$
2741 new.block
2742 format.advisor output
2743 fin.block
2744 output.issue.doi.coden.isxn.lccn.url.eprint.note
2745 fin.entry
2746}
2747
2748FUNCTION { misc }
2749{
2750 output.bibitem
2751 format.authors output
2752 author format.key output % added
2753 output.year.check % added
2754 title howpublished new.block.checkb
2755 format.title output
2756 new.block
2757 howpublished empty.or.unknown
2758 { }
2759 { "\bibinfo{howpublished}{" howpublished "}" * * output }
2760 if$
2761 "" output.nonnull.dot.space
2762 output.day.month.year
2763 fin.block
2764 output.issue.doi.coden.isxn.lccn.url.eprint.note
2765 fin.entry
2766}
2767
2768FUNCTION { online } { misc }
2769
2770FUNCTION { game } { misc }
2771
2772
2773FUNCTION { phdthesis }
2774{
2775 output.bibitem
2776 format.authors "author" output.check
2777 author format.key output % added
2778 output.year.check % added
2779 new.block
2780 format.title emphasize "title" output.check % NB: ACM style requires emphasized thesis title
2781 new.block
2782 "\bibinfo{thesistype}{Ph.D. Dissertation}" format.thesis.type output
2783 new.sentence
2784 school "school" bibinfo.output.check
2785 address empty.or.unknown
2786 { }
2787 { "\bibinfo{address}{" address * "}" * output }
2788 if$
2789 new.block
2790 format.advisor output
2791 fin.block
2792 output.issue.doi.coden.isxn.lccn.url.eprint.note
2793 fin.entry
2794}
2795
2796FUNCTION {format.date}
2797{ year empty.or.unknown
2798 { month empty.or.unknown
2799 {
2800 "" % output empty date if year/month both empty
2801 day empty.or.unknown
2802 { }
2803 { "there's a day but no month or year in " cite$ * warning$ }
2804 if$
2805 }
2806 { "there's a month but no year in " cite$ * warning$
2807 month
2808 day empty.or.unknown
2809 { }
2810 { " " * day * }
2811 if$
2812 }
2813 if$
2814 }
2815 { month empty.or.unknown
2816 {
2817 year % output only year if month empty
2818 day empty.or.unknown
2819 { }
2820 { "there's a day and year but no month in " cite$ * warning$ }
2821 if$
2822 }
2823 {
2824 month " " *
2825 day empty.or.unknown
2826 { }
2827 { day * ", " * }
2828 if$
2829 year *
2830 }
2831 if$
2832 }
2833 if$
2834}
2835
2836FUNCTION {new.block.checka}
2837{
2838 empty.or.unknown
2839 'skip$
2840 'new.block
2841 if$
2842}
2843
2844FUNCTION { periodical }
2845{
2846 output.bibitem
2847 editor empty.or.unknown
2848 { organization output }
2849 { format.editors output.nonnull }
2850 if$
2851 new.block
2852 output.year.check
2853 new.sentence
2854 format.articletitle "title" output.check
2855 format.journal.volume.number.day.month.year output
2856 fin.entry
2857}
2858
2859FUNCTION { proceedings }
2860{
2861 output.bibitem
2862 editor empty.or.unknown
2863 { organization output
2864 organization format.key output } % gnp - changed from author format.key
2865 { format.editors output.nonnull }
2866 if$
2867 % author format.key output % gnp - removed (should be either
2868 % editor or organization
2869 output.year.check % added (newapa)
2870 new.block
2871 format.btitle format.city "title" output.check % jtb: added city
2872 new.sentence
2873 format.bvolume output
2874 format.number.series output
2875 new.sentence
2876 organization output
2877 % jtb: normal order: publisher, address
2878 publisher empty.or.unknown
2879 { }
2880 { "\bibinfo{publisher}{" publisher * "}" * output }
2881 if$
2882 address empty.or.unknown
2883 { }
2884 { "\bibinfo{address}{" address * "}" * output }
2885 if$
2886 fin.block
2887 output.issue.doi.coden.isxn.lccn.url.eprint.note
2888 fin.entry
2889}
2890
2891FUNCTION { techreport }
2892{
2893 output.bibitem
2894 format.authors "author" output.check
2895 author format.key output % added
2896 output.year.check % added
2897 new.block
2898 format.btitle "title" output.check
2899 new.block
2900% format.tr.number output % jtb: moved month ...
2901 format.tr.number output new.sentence % Gerry - need dot 2011/09/28
2902 institution "institution" bibinfo.output.check
2903 address empty.or.unknown
2904 { }
2905 { "\bibinfo{address}{" address "}" * * output }
2906 if$
2907 new.sentence
2908 format.named.pages output
2909 % ACM omits year at end in transactions style
2910 % format.day.month.year output.nonnull.dot.space % jtb: ... to here (no parens)
2911 fin.block
2912 output.issue.doi.coden.isxn.lccn.url.eprint.note
2913 fin.entry
2914}
2915
2916FUNCTION { unpublished }
2917{
2918 output.bibitem
2919 format.authors
2920 "author" output.check
2921 author format.key output % added
2922 output.year.check % added
2923 new.block
2924 format.title "title" output.check
2925 fin.sentence
2926 output.day.month.year % UTAH
2927 fin.block
2928 output.issue.doi.coden.isxn.lccn.url.eprint.note.check
2929 fin.entry
2930}
2931
2932FUNCTION { default.type } { misc }
2933
2934%%% ACM journal-style month definitions: full name if 1--5 letters, else
2935%%% abbreviation of 3 or 4 characters and a dot
2936
2937MACRO {jan} {"Jan."}
2938
2939MACRO {feb} {"Feb."}
2940
2941MACRO {mar} {"March"}
2942
2943MACRO {apr} {"April"}
2944
2945MACRO {may} {"May"}
2946
2947MACRO {jun} {"June"}
2948
2949MACRO {jul} {"July"}
2950
2951MACRO {aug} {"Aug."}
2952
2953MACRO {sep} {"Sept."}
2954
2955MACRO {oct} {"Oct."}
2956
2957MACRO {nov} {"Nov."}
2958
2959MACRO {dec} {"Dec."}
2960
2961
2962%%% ====================================================================
2963%%% I M P O R T A N T C H A N G E
2964%%%
2965%%% For the 2009 release of the official acm-*.bst files, there are to
2966%%% be NO predefined journal abbreviations in those style files.
2967%%%
2968%%% ACM may later develop an official list of mappings of full journal
2969%%% names of commonly-cited journals to ACM-preferred abbreviations, but
2970%%% authors should consider that use of any of these commented-out
2971%%% abbreviations is DEPRECATED unless the BibTeX file itself provides
2972%%% its own @String{name = "value"} definitions.
2973%%%
2974%%% Use of journal (and publisher and address) @String{...}
2975%%% abbreviations, as opposed to explicit value assignments such as
2976%%% journal = "J. ACM" and publisher = "IEEE", is preferred in
2977%%% bibliographic databases, because it makes it easier for journal
2978%%% production staff to replace those definitions by publisher-preferred
2979%%% abbreviations when articles are typeset for publication.
2980%%%
2981%%% For historical reasons, and because some of these abbreviations are
2982%%% used in other (non-ACM) bibliography style files, they are preserved
2983%%% here in comments. Future releases of the acm*-.bst files are likely
2984%%% to remove them entirely.
2985%%% ====================================================================
2986%%%
2987%%% DEPRECATED: MACRO {acmcs} {"ACM Comput. Surv."} % original BibTeX
2988%%% DEPRECATED:
2989%%% DEPRECATED: MACRO {acmlett} {"ACM Lett. Program. Lang. Syst."}
2990%%% DEPRECATED:
2991%%% DEPRECATED: MACRO {acta} {"Acta Inf."} % original BibTeX
2992%%% DEPRECATED:
2993%%% DEPRECATED: MACRO {ai} {"Artificial Intelligence"}
2994%%% DEPRECATED:
2995%%% DEPRECATED: MACRO {al} {"Ada Lett."}
2996%%% DEPRECATED:
2997%%% DEPRECATED: MACRO {acr} {"Adv. Comput. Res."}
2998%%% DEPRECATED:
2999%%% DEPRECATED: MACRO {bit} {"Bit"}
3000%%% DEPRECATED:
3001%%% DEPRECATED: MACRO {cacm} {"Commun. ACM"} % original BibTeX
3002%%% DEPRECATED:
3003%%% DEPRECATED: MACRO {cj} {"Comput. J."}
3004%%% DEPRECATED:
3005%%% DEPRECATED: MACRO {cn} {"Comput. Netw."}
3006%%% DEPRECATED:
3007%%% DEPRECATED: MACRO {cl} {"Comput. Lang."}
3008%%% DEPRECATED:
3009%%% DEPRECATED: MACRO {ibmjrd} {"IBM J. Res. and Development"} % original BibTeX
3010%%% DEPRECATED:
3011%%% DEPRECATED: MACRO {ibmsj} {"IBM Systems Journal"} % original BibTeX
3012%%% DEPRECATED:
3013%%% DEPRECATED: MACRO {ict} {"Inf. Contr."}
3014%%% DEPRECATED:
3015%%% DEPRECATED: MACRO {ieebcs} {"IEE/BCS Softw. Eng. J."}
3016%%% DEPRECATED:
3017%%% DEPRECATED: MACRO {ieees} {"IEEE Softw."}
3018%%% DEPRECATED:
3019%%% DEPRECATED: MACRO {ieeese} {"IEEE Trans. Softw. Eng."} % original BibTeX
3020%%% DEPRECATED:
3021%%% DEPRECATED: MACRO {ieeetc} {"IEEE Trans. Comput."} % original BibTeX
3022%%% DEPRECATED:
3023%%% DEPRECATED: MACRO {ieeetcad} {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} % original BibTeX
3024%%% DEPRECATED:
3025%%% DEPRECATED: MACRO {ieeetpds} {"IEEE Trans. Parall. Distrib. Syst."}
3026%%% DEPRECATED:
3027%%% DEPRECATED: MACRO {ieeetit} {"IEEE Trans. Inf. Theory"}
3028%%% DEPRECATED:
3029%%% DEPRECATED: MACRO {ipl} {"Inf. Process. Lett."} % original BibTeX
3030%%% DEPRECATED:
3031%%% DEPRECATED: MACRO {icp} {"Inf. Comput."}
3032%%% DEPRECATED:
3033%%% DEPRECATED: MACRO {ist} {"Inf. Softw. Tech."}
3034%%% DEPRECATED:
3035%%% DEPRECATED: MACRO {ijsa} {"Int. J. Supercomput. Appl."}
3036%%% DEPRECATED:
3037%%% DEPRECATED: MACRO {ijpp} {"Int. J. Parallel Program."}
3038%%% DEPRECATED:
3039%%% DEPRECATED: MACRO {jacm} {"J. ACM"} % original BibTeX
3040%%% DEPRECATED:
3041%%% DEPRECATED: % MACRO {jcss} {"Journal of Computer and System Sciences"} % original BibTeX
3042%%% DEPRECATED: MACRO {jcss} {"J. Comput. Syst. Sci."} % original BibTeX
3043%%% DEPRECATED:
3044%%% DEPRECATED: MACRO {jlp} {"J. Logic Program."}
3045%%% DEPRECATED:
3046%%% DEPRECATED: MACRO {jfp} {"J. Funct. Program."}
3047%%% DEPRECATED:
3048%%% DEPRECATED: MACRO {jsmrp} {"J. Softw. Maint. Res. Pract."}
3049%%% DEPRECATED:
3050%%% DEPRECATED: MACRO {jss} {"J. Syst. Softw."}
3051%%% DEPRECATED:
3052%%% DEPRECATED: MACRO {jlc} {"J. Logic and Comput."}
3053%%% DEPRECATED:
3054%%% DEPRECATED: MACRO {jlsc} {"J. Lisp Symb. Comput."}
3055%%% DEPRECATED:
3056%%% DEPRECATED: MACRO {lpls} {"Lett. Program. Lang. Syst."}
3057%%% DEPRECATED:
3058%%% DEPRECATED: MACRO {mor} {"Math. Oper. Res."}
3059%%% DEPRECATED:
3060%%% DEPRECATED: MACRO {mscs} {"Math. Struct. Comput. Sci."}
3061%%% DEPRECATED:
3062%%% DEPRECATED: MACRO {mst} {"Math. Syst. Theor."}
3063%%% DEPRECATED:
3064%%% DEPRECATED: MACRO {ngc} {"New Gen. Comput."}
3065%%% DEPRECATED:
3066%%% DEPRECATED: MACRO {scp} {"Sci. Comput. Program."} % original BibTeX
3067%%% DEPRECATED:
3068%%% DEPRECATED: MACRO {sicomp} {"SIAM J. Comput."} % original BibTeX
3069%%% DEPRECATED:
3070%%% DEPRECATED: MACRO {spe} {"Softw. Pract. Exper."}
3071%%% DEPRECATED:
3072%%% DEPRECATED: MACRO {tocs} {"ACM Trans. Comput. Syst."} % original BibTeX
3073%%% DEPRECATED:
3074%%% DEPRECATED: MACRO {tods} {"ACM Trans. Database Syst."} % original BibTeX
3075%%% DEPRECATED:
3076%%% DEPRECATED: MACRO {tog} {"ACM Trans. Graphics"} % original BibTeX
3077%%% DEPRECATED:
3078%%% DEPRECATED: MACRO {toms} {"ACM Trans. Math. Softw."} % original BibTeX
3079%%% DEPRECATED:
3080%%% DEPRECATED: MACRO {toois} {"ACM Trans. Office Inf. Syst."} % original BibTeX
3081%%% DEPRECATED:
3082%%% DEPRECATED: MACRO {toplas} {"ACM Trans. Program. Lang. Syst."} % original BibTeX
3083%%% DEPRECATED:
3084%%% DEPRECATED: MACRO {tcs} {"Theor. Comput. Sci."} % original BibTeX
3085%%% DEPRECATED:
3086%%% DEPRECATED: MACRO {tr} {"Tech. Rep."}
3087%%% ====================================================================
3088
3089READ
3090
3091FUNCTION { sortify }
3092{
3093 purify$
3094 "l" change.case$
3095}
3096
3097FUNCTION { chop.word }
3098{
3099 's :=
3100 'len :=
3101 s #1 len substring$ =
3102 { s len #1 + global.max$ substring$ }
3103 's
3104 if$
3105}
3106
3107FUNCTION { sort.format.names }
3108{
3109 's :=
3110 #1 'nameptr :=
3111 ""
3112 s num.names$ 'numnames :=
3113 numnames 'namesleft :=
3114 { namesleft #0 > }
3115 { nameptr #1 >
3116 { " " * }
3117 'skip$
3118 if$
3119 % s nameptr "{ff{ } }{ll{ }}{ vv{ }}{ jj{ }}" format.name$ 't :=
3120 s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't :=
3121 nameptr numnames = t "others" = and
3122 { " et~al" * }
3123 { t sortify * }
3124 if$
3125 nameptr #1 + 'nameptr :=
3126 namesleft #1 - 'namesleft :=
3127 }
3128 while$
3129}
3130
3131FUNCTION { sort.format.title }
3132{
3133 't :=
3134 "A " #2
3135 "An " #3
3136 "The " #4 t chop.word
3137 chop.word
3138 chop.word
3139 sortify
3140 #1 global.max$ substring$
3141}
3142
3143FUNCTION { author.sort }
3144{
3145 author empty.or.unknown
3146 { key empty.or.unknown
3147 { "to sort, need author or key in " cite$ * warning$
3148 "" }
3149 { key sortify }
3150 if$
3151 }
3152 { author sort.format.names }
3153 if$
3154}
3155
3156FUNCTION { author.editor.sort }
3157{
3158 author empty.or.unknown
3159 {
3160 editor empty.or.unknown
3161 {
3162 key empty.or.unknown
3163 { "to sort, need author, editor, or key in " cite$ * warning$
3164 ""
3165 }
3166 { key sortify }
3167 if$
3168 }
3169 { editor sort.format.names }
3170 if$
3171 }
3172 { author sort.format.names }
3173 if$
3174}
3175
3176FUNCTION { author.organization.sort }
3177{
3178 % added - GNP. Stack author or organization for sorting (from alpha.bst).
3179 % Unlike alpha.bst, we need entire names, not abbreviations
3180
3181 author empty.or.unknown
3182 { organization empty.or.unknown
3183 { key empty.or.unknown
3184 { "to sort, need author, organization, or key in " cite$ * warning$
3185 ""
3186 }
3187 { key sortify }
3188 if$
3189 }
3190 { organization sortify }
3191 if$
3192 }
3193 { author sort.format.names }
3194 if$
3195}
3196
3197FUNCTION { editor.organization.sort }
3198{
3199 % added - GNP. Stack editor or organization for sorting (from alpha.bst).
3200 % Unlike alpha.bst, we need entire names, not abbreviations
3201
3202 editor empty.or.unknown
3203 { organization empty.or.unknown
3204 { key empty.or.unknown
3205 { "to sort, need editor, organization, or key in " cite$ * warning$
3206 ""
3207 }
3208 { key sortify }
3209 if$
3210 }
3211 { organization sortify }
3212 if$
3213 }
3214 { editor sort.format.names }
3215 if$
3216}
3217
3218FUNCTION { presort }
3219{
3220 % Presort creates the bibentry's label via a call to calc.label, and then
3221 % sorts the entries based on entry type. Chicago.bst adds support for
3222 % including organizations as the sort key; the following is stolen from
3223 % alpha.bst.
3224
3225 calc.label sortify % recalculate bibitem label
3226 year field.or.null purify$ #-1 #4 substring$ * % add year
3227 " "
3228 *
3229 type$ "book" =
3230 type$ "inbook" =
3231 or
3232 'author.editor.sort
3233 { type$ "proceedings" =
3234 'editor.organization.sort
3235 { type$ "manual" =
3236 'author.organization.sort
3237 'author.sort
3238 if$
3239 }
3240 if$
3241 }
3242 if$
3243 #1 entry.max$ substring$ % added for newapa
3244 'sort.label := % added for newapa
3245 sort.label % added for newapa
3246 *
3247 " "
3248 *
3249 title field.or.null
3250 sort.format.title
3251 *
3252 #1 entry.max$ substring$
3253 'sort.key$ :=
3254}
3255
3256ITERATE { presort }
3257
3258SORT % by label, year, author/editor, title
3259
3260FUNCTION { initialize.extra.label.stuff }
3261{ #0 int.to.chr$ 'last.label :=
3262 "" 'next.extra :=
3263 #0 'last.extra.num :=
3264}
3265
3266FUNCTION { forward.pass }
3267{
3268 % Pass through all entries, comparing current entry to last one.
3269 % Need to concatenate year to the stack (done by calc.label) to determine
3270 % if two entries are the same (see presort)
3271
3272 last.label
3273 % OLD:calc.label year field.or.null purify$ #-1 #4 substring$ * % add year
3274 % NEW:
3275 author.key.label year field.or.null purify$ #-1 #4 substring$ * % add year
3276 #1 entry.max$ substring$ = % are they equal?
3277 { last.extra.num #1 + 'last.extra.num :=
3278 last.extra.num int.to.chr$ 'extra.label :=
3279 }
3280 { "a" chr.to.int$ 'last.extra.num :=
3281 "" 'extra.label :=
3282 % OLD: calc.label year field.or.null purify$ #-1 #4 substring$ * % add year
3283 % NEW:
3284 author.key.label year field.or.null purify$ #-1 #4 substring$ * % add year
3285 #1 entry.max$ substring$ 'last.label := % assign to last.label
3286 }
3287 if$
3288}
3289
3290FUNCTION { reverse.pass }
3291{
3292 next.extra "b" =
3293 { "a" 'extra.label := }
3294 'skip$
3295 if$
3296 label.year extra.label * 'sort.year :=
3297 extra.label 'next.extra :=
3298}
3299
3300EXECUTE {initialize.extra.label.stuff}
3301
3302ITERATE {forward.pass}
3303
3304REVERSE {reverse.pass}
3305
3306FUNCTION { bib.sort.order }
3307{
3308 sort.label
3309 " "
3310 *
3311 year field.or.null sortify
3312 *
3313 " "
3314 *
3315 title field.or.null
3316 sort.format.title
3317 *
3318 #1 entry.max$ substring$
3319 'sort.key$ :=
3320}
3321
3322ITERATE { bib.sort.order }
3323
3324SORT % by sort.label, year, title --- giving final bib. order.
3325
3326FUNCTION { begin.bib }
3327{
3328 %% Set to #0 show 13-digit ISBN in preference to 10-digit ISBN.
3329 %% Set to #1 to show both 10-digit and 13-digit ISBNs.
3330 #1 'show-isbn-10-and-13 :=
3331
3332 "%%% -*-BibTeX-*-" writeln
3333 "%%% Do NOT edit. File created by BibTeX with style" writeln
3334 "%%% ACM-Reference-Format-Journals [18-Jan-2012]." writeln
3335 "" writeln
3336
3337 preamble$ empty.or.unknown
3338 'skip$
3339 { preamble$ writeln }
3340 if$
3341 "\begin{thebibliography}{00}" writeln
3342 "" writeln
3343 "%%% ====================================================================" writeln
3344 "%%% NOTE TO THE USER: you can override these defaults by providing" writeln
3345 "%%% customized versions of any of these macros before the \bibliography" writeln
3346 "%%% command. Each of them MUST provide its own final punctuation," writeln
3347 "%%% except for \shownote{}, \showDOI{}, and \showURL{}. The latter two" writeln
3348 "%%% do not use final punctuation, in order to avoid confusing it with" writeln
3349 "%%% the Web address." writeln
3350 "%%%" writeln
3351 "%%% To suppress output of a particular field, define its macro to expand" writeln
3352 "%%% to an empty string, or better, \unskip, like this:" writeln
3353 "%%%" writeln
3354 "%%% \newcommand{\showDOI}[1]{\unskip} % LaTeX syntax" writeln
3355 "%%%" writeln
3356 "%%% \def \showDOI #1{\unskip} % plain TeX syntax" writeln
3357 "%%%" writeln
3358 "%%% ====================================================================" writeln
3359 "" writeln
3360
3361 %% ACM publications do not use CODEN, ISSN, and LCCN data, so their default
3362 %% macro wrappers expand to \unskip, discarding their values and unwanted
3363 %% space.
3364 %%
3365 %% For other publications, prior definitions like these may be useful:
3366 %%
3367 %% Plain TeX:
3368 %% \def \showCODEN #1{CODEN #1.}
3369 %% \def \showISSN #1{ISSN #1.}
3370 %% \def \showLCCN #1{LCCN #1.}
3371 %%
3372 %% LaTeX:
3373 %% \newcommand{\showCODEN}[1]{CODEN #1.}
3374 %% \newcommand{\showISSN}[1]#1{ISSN #1.}
3375 %% \newcommand{\showLCCN}[1]{LCCN #1.}
3376
3377 "\ifx \showCODEN \undefined \def \showCODEN #1{\unskip} \fi" writeln
3378 "\ifx \showDOI \undefined \def \showDOI #1{{\tt DOI:}\penalty0{#1}\ } \fi" writeln
3379 % ACM styles omit ISBNs, but they can be included by suitable definitions of
3380 % \showISBNx and \showISBNxiii before the .bbl file is read
3381 "\ifx \showISBNx \undefined \def \showISBNx #1{\unskip} \fi" writeln
3382 "\ifx \showISBNxiii \undefined \def \showISBNxiii #1{\unskip} \fi" writeln
3383 "\ifx \showISSN \undefined \def \showISSN #1{\unskip} \fi" writeln
3384 "\ifx \showLCCN \undefined \def \showLCCN #1{\unskip} \fi" writeln
3385 "\ifx \shownote \undefined \def \shownote #1{#1} \fi" writeln % NB: final period supplied by add.period$ above
3386 "\ifx \showarticletitle \undefined \def \showarticletitle #1{#1} \fi" writeln
3387 "\ifx \showURL \undefined \def \showURL #1{#1} \fi" writeln
3388 "% The following commands are used for tagged output and should be " writeln
3389 "% invisible to TeX" writeln
3390 "\providecommand\bibfield[2]{#2}" writeln
3391 "\providecommand\bibinfo[2]{#2}" writeln
3392 "\providecommand\natexlab[1]{#1}" writeln
3393 "\providecommand\showeprint[2][]{arXiv:#2}" writeln
3394}
3395
3396EXECUTE {begin.bib}
3397
3398EXECUTE {init.state.consts}
3399
3400ITERATE {call.type$}
3401
3402FUNCTION { end.bib }
3403{
3404 newline$
3405 "\end{thebibliography}"
3406 writeln
3407}
3408
3409EXECUTE {end.bib}
3410
3411
3412
Note: See TracBrowser for help on using the repository browser.