Cleanup
[carla.git] / data / presentation / lac2018 / acl.bst
blob8c7d3923a3b86ce8bda024f5f55c92609de642ad
1 % BibTeX `acl' style file for BibTeX version 0.99c, LaTeX version 2.09
2 % This version was made by modifying `aaai-named' format based on the master
3 % file by Oren Patashnik (PATASHNIK@SCORE.STANFORD.EDU)
5 % Copyright (C) 1985, all rights reserved.
6 % Modifications Copyright 1988, Peter F. Patel-Schneider
7 % Further modifictions by Stuart Shieber, 1991, and Fernando Pereira, 1992.
8 % Copying of this file is authorized only if either
9 % (1) you make absolutely no changes to your copy, including name, or
10 % (2) if you do make changes, you name it something other than
11 % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
12 % This restriction helps ensure that all standard styles are identical.
14 % There are undoubtably bugs in this style.  If you make bug fixes,
15 % improvements, etc.  please let me know.  My e-mail address is:
16 %       pfps@spar.slb.com
18 %   Citation format: [author-last-name, year]
19 %                    [author-last-name and author-last-name, year]
20 %                    [author-last-name {\em et al.}, year]
22 %   Reference list ordering: alphabetical by author or whatever passes
23 %       for author in the absence of one.
25 % This BibTeX style has support for short (year only) citations.  This
26 % is done by having the citations actually look like
27 %         \citename{name-info, }year
28 % The LaTeX style has to have the following
29 %     \let\@internalcite\cite
30 %     \def\cite{\def\citename##1{##1}\@internalcite}
31 %     \def\shortcite{\def\citename##1{}\@internalcite}
32 %     \def\@biblabel#1{\def\citename##1{##1}[#1]\hfill}
33 % which makes \shortcite the macro for short citations.
35 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
36 % Changes made by SMS for thesis style
37 %   no emphasis on "et al."
38 %   "Ph.D." includes periods (not "PhD")
39 %   moved year to immediately after author's name
40 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
41 ENTRY
42   { address
43     author
44     booktitle
45     chapter
46     edition
47     editor
48     howpublished
49     institution
50     journal
51     key
52     month
53     note
54     number
55     organization
56     pages
57     publisher
58     school
59     series
60     title
61     type
62     volume
63     year
64   }
65   {}
66   { label extra.label sort.label }
68 INTEGERS { output.state before.all mid.sentence after.sentence after.block }
70 FUNCTION {init.state.consts}
71 { #0 'before.all :=
72   #1 'mid.sentence :=
73   #2 'after.sentence :=
74   #3 'after.block :=
77 STRINGS { s t }
79 FUNCTION {output.nonnull}
80 { 's :=
81   output.state mid.sentence =
82     { ", " * write$ }
83     { output.state after.block =
84         { add.period$ write$
85           newline$
86           "\newblock " write$
87         }
88         { output.state before.all =
89             'write$
90             { add.period$ " " * write$ }
91           if$
92         }
93       if$
94       mid.sentence 'output.state :=
95     }
96   if$
97   s
100 FUNCTION {output}
101 { duplicate$ empty$
102     'pop$
103     'output.nonnull
104   if$
107 FUNCTION {output.check}
108 { 't :=
109   duplicate$ empty$
110     { pop$ "empty " t * " in " * cite$ * warning$ }
111     'output.nonnull
112   if$
115 FUNCTION {output.bibitem}
116 { newline$
118   "\bibitem[" write$
119   label write$
120   "]{" write$
122   cite$ write$
123   "}" write$
124   newline$
125   ""
126   before.all 'output.state :=
129 FUNCTION {fin.entry}
130 { add.period$
131   write$
132   newline$
135 FUNCTION {new.block}
136 { output.state before.all =
137     'skip$
138     { after.block 'output.state := }
139   if$
142 FUNCTION {new.sentence}
143 { output.state after.block =
144     'skip$
145     { output.state before.all =
146         'skip$
147         { after.sentence 'output.state := }
148       if$
149     }
150   if$
153 FUNCTION {not}
154 {   { #0 }
155     { #1 }
156   if$
159 FUNCTION {and}
160 {   'skip$
161     { pop$ #0 }
162   if$
165 FUNCTION {or}
166 {   { pop$ #1 }
167     'skip$
168   if$
171 FUNCTION {new.block.checka}
172 { empty$
173     'skip$
174     'new.block
175   if$
178 FUNCTION {new.block.checkb}
179 { empty$
180   swap$ empty$
181   and
182     'skip$
183     'new.block
184   if$
187 FUNCTION {new.sentence.checka}
188 { empty$
189     'skip$
190     'new.sentence
191   if$
194 FUNCTION {new.sentence.checkb}
195 { empty$
196   swap$ empty$
197   and
198     'skip$
199     'new.sentence
200   if$
203 FUNCTION {field.or.null}
204 { duplicate$ empty$
205     { pop$ "" }
206     'skip$
207   if$
210 FUNCTION {emphasize}
211 { duplicate$ empty$
212     { pop$ "" }
213     { "{\em " swap$ * "}" * }
214   if$
217 INTEGERS { nameptr namesleft numnames }
219 FUNCTION {format.names}
220 { 's :=
221   #1 'nameptr :=
222   s num.names$ 'numnames :=
223   numnames 'namesleft :=
224     { namesleft #0 > }
226     { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
228       nameptr #1 >
229         { namesleft #1 >
230             { ", " * t * }
231             { numnames #2 >
232                 { "," * }
233                 'skip$
234               if$
235               t "others" =
236                 { " et~al." * }
237                 { " and " * t * }
238               if$
239             }
240           if$
241         }
242         't
243       if$
244       nameptr #1 + 'nameptr :=
245       namesleft #1 - 'namesleft :=
246     }
247   while$
250 FUNCTION {format.authors}
251 { author empty$
252     { "" }
253     { author format.names }
254   if$
257 FUNCTION {format.editors}
258 { editor empty$
259     { "" }
260     { editor format.names
261       editor num.names$ #1 >
262         { ", editors" * }
263         { ", editor" * }
264       if$
265     }
266   if$
269 FUNCTION {format.title}
270 { title empty$
271     { "" }
273     { title "t" change.case$ }
275   if$
278 FUNCTION {n.dashify}
279 { 't :=
280   ""
281     { t empty$ not }
282     { t #1 #1 substring$ "-" =
283         { t #1 #2 substring$ "--" = not
284             { "--" *
285               t #2 global.max$ substring$ 't :=
286             }
287             {   { t #1 #1 substring$ "-" = }
288                 { "-" *
289                   t #2 global.max$ substring$ 't :=
290                 }
291               while$
292             }
293           if$
294         }
295         { t #1 #1 substring$ *
296           t #2 global.max$ substring$ 't :=
297         }
298       if$
299     }
300   while$
303 FUNCTION {format.date}
304 { year empty$
305     { month empty$
306         { "" }
307         { "there's a month but no year in " cite$ * warning$
308           month
309         }
310       if$
311     }
312     { month empty$
313         { "" }
314         { month }
315       if$
316     }
317   if$
320 FUNCTION {format.btitle}
321 { title emphasize
324 FUNCTION {tie.or.space.connect}
325 { duplicate$ text.length$ #3 <
326     { "~" }
327     { " " }
328   if$
329   swap$ * *
332 FUNCTION {either.or.check}
333 { empty$
334     'pop$
335     { "can't use both " swap$ * " fields in " * cite$ * warning$ }
336   if$
339 FUNCTION {format.bvolume}
340 { volume empty$
341     { "" }
342     { "volume" volume tie.or.space.connect
343       series empty$
344         'skip$
345         { " of " * series emphasize * }
346       if$
347       "volume and number" number either.or.check
348     }
349   if$
352 FUNCTION {format.number.series}
353 { volume empty$
354     { number empty$
355         { series field.or.null }
356         { output.state mid.sentence =
357             { "number" }
358             { "Number" }
359           if$
360           number tie.or.space.connect
361           series empty$
362             { "there's a number but no series in " cite$ * warning$ }
363             { " in " * series * }
364           if$
365         }
366       if$
367     }
368     { "" }
369   if$
372 FUNCTION {format.edition}
373 { edition empty$
374     { "" }
375     { output.state mid.sentence =
376         { edition "l" change.case$ " edition" * }
377         { edition "t" change.case$ " edition" * }
378       if$
379     }
380   if$
383 INTEGERS { multiresult }
385 FUNCTION {multi.page.check}
386 { 't :=
387   #0 'multiresult :=
388     { multiresult not
389       t empty$ not
390       and
391     }
392     { t #1 #1 substring$
393       duplicate$ "-" =
394       swap$ duplicate$ "," =
395       swap$ "+" =
396       or or
397         { #1 'multiresult := }
398         { t #2 global.max$ substring$ 't := }
399       if$
400     }
401   while$
402   multiresult
405 FUNCTION {format.pages}
406 { pages empty$
407     { "" }
408     { pages multi.page.check
409         { "pages" pages n.dashify tie.or.space.connect }
410         { "page" pages tie.or.space.connect }
411       if$
412     }
413   if$
416 FUNCTION {format.year.label}
417 { year extra.label *
420 FUNCTION {format.vol.num.pages}
421 { volume field.or.null
422   number empty$
423     'skip$
424     { "(" number * ")" * *
425       volume empty$
426         { "there's a number but no volume in " cite$ * warning$ }
427         'skip$
428       if$
429     }
430   if$
431   pages empty$
432     'skip$
433     { duplicate$ empty$
434         { pop$ format.pages }
435         { ":" * pages n.dashify * }
436       if$
437     }
438   if$
441 FUNCTION {format.chapter.pages}
442 { chapter empty$
443     'format.pages
444     { type empty$
445         { "chapter" }
446         { type "l" change.case$ }
447       if$
448       chapter tie.or.space.connect
449       pages empty$
450         'skip$
451         { ", " * format.pages * }
452       if$
453     }
454   if$
457 FUNCTION {format.in.ed.booktitle}
458 { booktitle empty$
459     { "" }
460     { editor empty$
461         { "In " booktitle emphasize * }
462         { "In " format.editors * ", " * booktitle emphasize * }
463       if$
464     }
465   if$
468 FUNCTION {empty.misc.check}
469 { author empty$ title empty$ howpublished empty$
470   month empty$ year empty$ note empty$
471   and and and and and
473   key empty$ not and
475     { "all relevant fields are empty in " cite$ * warning$ }
476     'skip$
477   if$
480 FUNCTION {format.thesis.type}
481 { type empty$
482     'skip$
483     { pop$
484       type "t" change.case$
485     }
486   if$
489 FUNCTION {format.tr.number}
490 { type empty$
491     { "Technical Report" }
492     'type
493   if$
494   number empty$
495     { "t" change.case$ }
496     { number tie.or.space.connect }
497   if$
500 FUNCTION {format.article.crossref}
501 { key empty$
502     { journal empty$
503         { "need key or journal for " cite$ * " to crossref " * crossref *
504           warning$
505           ""
506         }
507         { "In {\em " journal * "\/}" * }
508       if$
509     }
510     { "In " key * }
511   if$
512   " \cite{" * crossref * "}" *
515 FUNCTION {format.crossref.editor}
516 { editor #1 "{vv~}{ll}" format.name$
517   editor num.names$ duplicate$
518   #2 >
519     { pop$ " et~al." * }
520     { #2 <
521         'skip$
522         { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
523             { " et~al." * }
524             { " and " * editor #2 "{vv~}{ll}" format.name$ * }
525           if$
526         }
527       if$
528     }
529   if$
532 FUNCTION {format.book.crossref}
533 { volume empty$
534     { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
535       "In "
536     }
537     { "Volume" volume tie.or.space.connect
538       " of " *
539     }
540   if$
541   editor empty$
542   editor field.or.null author field.or.null =
543   or
544     { key empty$
545         { series empty$
546             { "need editor, key, or series for " cite$ * " to crossref " *
547               crossref * warning$
548               "" *
549             }
550             { "{\em " * series * "\/}" * }
551           if$
552         }
553         { key * }
554       if$
555     }
556     { format.crossref.editor * }
557   if$
558   " \cite{" * crossref * "}" *
561 FUNCTION {format.incoll.inproc.crossref}
562 { editor empty$
563   editor field.or.null author field.or.null =
564   or
565     { key empty$
566         { booktitle empty$
567             { "need editor, key, or booktitle for " cite$ * " to crossref " *
568               crossref * warning$
569               ""
570             }
571             { "In {\em " booktitle * "\/}" * }
572           if$
573         }
574         { "In " key * }
575       if$
576     }
577     { "In " format.crossref.editor * }
578   if$
579   " \cite{" * crossref * "}" *
582 FUNCTION {article}
583 { output.bibitem
584   format.authors "author" output.check
585   new.block
586   format.year.label "year" output.check
587   new.block
588   format.title "title" output.check
589   new.block
590   crossref missing$
591     { journal emphasize "journal" output.check
592       format.vol.num.pages output
593       format.date output
594     }
595     { format.article.crossref output.nonnull
596       format.pages output
597     }
598   if$
599   new.block
600   note output
601   fin.entry
604 FUNCTION {book}
605 { output.bibitem
606   author empty$
607     { format.editors "author and editor" output.check }
608     { format.authors output.nonnull
609       crossref missing$
610         { "author and editor" editor either.or.check }
611         'skip$
612       if$
613     }
614   if$
615   new.block
616   format.year.label "year" output.check
617   new.block
618   format.btitle "title" output.check
619   crossref missing$
620     { format.bvolume output
621       new.block
622       format.number.series output
623       new.sentence
624       publisher "publisher" output.check
625       address output
626     }
627     { new.block
628       format.book.crossref output.nonnull
629     }
630   if$
631   format.edition output
632   format.date output
633   new.block
634   note output
635   fin.entry
638 FUNCTION {booklet}
639 { output.bibitem
640   format.authors output
641   new.block
642   format.year.label "year" output.check
643   new.block
644   format.title "title" output.check
645   howpublished address new.block.checkb
646   howpublished output
647   address output
648   format.date output
649   new.block
650   note output
651   fin.entry
654 FUNCTION {inbook}
655 { output.bibitem
656   author empty$
657     { format.editors "author and editor" output.check }
658     { format.authors output.nonnull
659       crossref missing$
660         { "author and editor" editor either.or.check }
661         'skip$
662       if$
663     }
664   if$
665   format.year.label "year" output.check
666   new.block
667   new.block
668   format.btitle "title" output.check
669   crossref missing$
670     { format.bvolume output
671       format.chapter.pages "chapter and pages" output.check
672       new.block
673       format.number.series output
674       new.sentence
675       publisher "publisher" output.check
676       address output
677     }
678     { format.chapter.pages "chapter and pages" output.check
679       new.block
680       format.book.crossref output.nonnull
681     }
682   if$
683   format.edition output
684   format.date output
685   new.block
686   note output
687   fin.entry
690 FUNCTION {incollection}
691 { output.bibitem
692   format.authors "author" output.check
693   new.block
694   format.year.label "year" output.check
695   new.block
696   format.title "title" output.check
697   new.block
698   crossref missing$
699     { format.in.ed.booktitle "booktitle" output.check
700       format.bvolume output
701       format.number.series output
702       format.chapter.pages output
703       new.sentence
704       publisher "publisher" output.check
705       address output
706       format.edition output
707       format.date output
708     }
709     { format.incoll.inproc.crossref output.nonnull
710       format.chapter.pages output
711     }
712   if$
713   new.block
714   note output
715   fin.entry
718 FUNCTION {inproceedings}
719 { output.bibitem
720   format.authors "author" output.check
721   new.block
722   format.year.label "year" output.check
723   new.block
724   format.title "title" output.check
725   new.block
726   crossref missing$
727     { format.in.ed.booktitle "booktitle" output.check
728       format.bvolume output
729       format.number.series output
730       format.pages output
731       address empty$
732         { organization publisher new.sentence.checkb
733           organization output
734           publisher output
735           format.date output
736         }
737         { address output.nonnull
738           format.date output
739           new.sentence
740           organization output
741           publisher output
742         }
743       if$
744     }
745     { format.incoll.inproc.crossref output.nonnull
746       format.pages output
747     }
748   if$
749   new.block
750   note output
751   fin.entry
754 FUNCTION {conference} { inproceedings }
756 FUNCTION {manual}
757 { output.bibitem
758   author empty$
759     { organization empty$
760         'skip$
761         { organization output.nonnull
762           address output
763         }
764       if$
765     }
766     { format.authors output.nonnull }
767   if$
768   format.year.label "year" output.check
769   new.block
770   new.block
771   format.btitle "title" output.check
772   author empty$
773     { organization empty$
774         { address new.block.checka
775           address output
776         }
777         'skip$
778       if$
779     }
780     { organization address new.block.checkb
781       organization output
782       address output
783     }
784   if$
785   format.edition output
786   format.date output
787   new.block
788   note output
789   fin.entry
792 FUNCTION {mastersthesis}
793 { output.bibitem
794   format.authors "author" output.check
795   new.block
796   format.year.label "year" output.check
797   new.block
798   format.title "title" output.check
799   new.block
800   "Master's thesis" format.thesis.type output.nonnull
801   school "school" output.check
802   address output
803   format.date output
804   new.block
805   note output
806   fin.entry
809 FUNCTION {misc}
810 { output.bibitem
811   format.authors output
812   new.block
813   format.year.label output
814   new.block
815   title howpublished new.block.checkb
816   format.title output
817   howpublished new.block.checka
818   howpublished output
819   format.date output
820   new.block
821   note output
822   fin.entry
823   empty.misc.check
826 FUNCTION {phdthesis}
827 { output.bibitem
828   format.authors "author" output.check
829   new.block
830   format.year.label "year" output.check
831   new.block
832   format.btitle "title" output.check
833   new.block
834   "{Ph.D.} thesis" format.thesis.type output.nonnull
835   school "school" output.check
836   address output
837   format.date output
838   new.block
839   note output
840   fin.entry
843 FUNCTION {proceedings}
844 { output.bibitem
845   editor empty$
846     { organization output }
847     { format.editors output.nonnull }
848   if$
849   new.block
850   format.year.label "year" output.check
851   new.block
852   format.btitle "title" output.check
853   format.bvolume output
854   format.number.series output
855   address empty$
856     { editor empty$
857         { publisher new.sentence.checka }
858         { organization publisher new.sentence.checkb
859           organization output
860         }
861       if$
862       publisher output
863       format.date output
864     }
865     { address output.nonnull
866       format.date output
867       new.sentence
868       editor empty$
869         'skip$
870         { organization output }
871       if$
872       publisher output
873     }
874   if$
875   new.block
876   note output
877   fin.entry
880 FUNCTION {techreport}
881 { output.bibitem
882   format.authors "author" output.check
883   new.block
884   format.year.label "year" output.check
885   new.block
886   format.title "title" output.check
887   new.block
888   format.tr.number output.nonnull
889   institution "institution" output.check
890   address output
891   format.date output
892   new.block
893   note output
894   fin.entry
897 FUNCTION {unpublished}
898 { output.bibitem
899   format.authors "author" output.check
900   new.block
901   format.year.label "year" output.check
902   new.block
903   format.title "title" output.check
904   new.block
905   note "note" output.check
906   format.date output
907   fin.entry
910 FUNCTION {default.type} { misc }
912 MACRO {jan} {"January"}
914 MACRO {feb} {"February"}
916 MACRO {mar} {"March"}
918 MACRO {apr} {"April"}
920 MACRO {may} {"May"}
922 MACRO {jun} {"June"}
924 MACRO {jul} {"July"}
926 MACRO {aug} {"August"}
928 MACRO {sep} {"September"}
930 MACRO {oct} {"October"}
932 MACRO {nov} {"November"}
934 MACRO {dec} {"December"}
936 MACRO {acmcs} {"ACM Computing Surveys"}
938 MACRO {acta} {"Acta Informatica"}
940 MACRO {cacm} {"Communications of the ACM"}
942 MACRO {ibmjrd} {"IBM Journal of Research and Development"}
944 MACRO {ibmsj} {"IBM Systems Journal"}
946 MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
948 MACRO {ieeetc} {"IEEE Transactions on Computers"}
950 MACRO {ieeetcad}
951  {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
953 MACRO {ipl} {"Information Processing Letters"}
955 MACRO {jacm} {"Journal of the ACM"}
957 MACRO {jcss} {"Journal of Computer and System Sciences"}
959 MACRO {scp} {"Science of Computer Programming"}
961 MACRO {sicomp} {"SIAM Journal on Computing"}
963 MACRO {tocs} {"ACM Transactions on Computer Systems"}
965 MACRO {tods} {"ACM Transactions on Database Systems"}
967 MACRO {tog} {"ACM Transactions on Graphics"}
969 MACRO {toms} {"ACM Transactions on Mathematical Software"}
971 MACRO {toois} {"ACM Transactions on Office Information Systems"}
973 MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
975 MACRO {tcs} {"Theoretical Computer Science"}
977 READ
979 FUNCTION {sortify}
980 { purify$
981   "l" change.case$
984 INTEGERS { len }
986 FUNCTION {chop.word}
987 { 's :=
988   'len :=
989   s #1 len substring$ =
990     { s len #1 + global.max$ substring$ }
991     's
992   if$
995 INTEGERS { et.al.char.used }
997 FUNCTION {initialize.et.al.char.used}
998 { #0 'et.al.char.used :=
1001 EXECUTE {initialize.et.al.char.used}
1003 FUNCTION {format.lab.names}
1004 { 's :=
1005   s num.names$ 'numnames :=
1007   numnames #1 =
1008     { s #1 "{vv }{ll}" format.name$ }
1009     { numnames #2 =
1010         { s #1 "{vv }{ll }and " format.name$ s #2 "{vv }{ll}" format.name$ *
1011         }
1012         { s #1 "{vv }{ll }\bgroup et al.\egroup " format.name$ }
1013       if$
1014     }
1015   if$
1019 FUNCTION {author.key.label}
1020 { author empty$
1021     { key empty$
1023         { cite$ #1 #3 substring$ }
1025         { key #3 text.prefix$ }
1026       if$
1027     }
1028     { author format.lab.names }
1029   if$
1032 FUNCTION {author.editor.key.label}
1033 { author empty$
1034     { editor empty$
1035         { key empty$
1037             { cite$ #1 #3 substring$ }
1039             { key #3 text.prefix$ }
1040           if$
1041         }
1042         { editor format.lab.names }
1043       if$
1044     }
1045     { author format.lab.names }
1046   if$
1049 FUNCTION {author.key.organization.label}
1050 { author empty$
1051     { key empty$
1052         { organization empty$
1054             { cite$ #1 #3 substring$ }
1056             { "The " #4 organization chop.word #3 text.prefix$ }
1057           if$
1058         }
1059         { key #3 text.prefix$ }
1060       if$
1061     }
1062     { author format.lab.names }
1063   if$
1066 FUNCTION {editor.key.organization.label}
1067 { editor empty$
1068     { key empty$
1069         { organization empty$
1071             { cite$ #1 #3 substring$ }
1073             { "The " #4 organization chop.word #3 text.prefix$ }
1074           if$
1075         }
1076         { key #3 text.prefix$ }
1077       if$
1078     }
1079     { editor format.lab.names }
1080   if$
1083 FUNCTION {calc.label}
1084 { type$ "book" =
1085   type$ "inbook" =
1086   or
1087     'author.editor.key.label
1088     { type$ "proceedings" =
1089         'editor.key.organization.label
1090         { type$ "manual" =
1091             'author.key.organization.label
1092             'author.key.label
1093           if$
1094         }
1095       if$
1096     }
1097   if$
1098   duplicate$
1100   "\protect\citename{" swap$ * "}" *
1101   year field.or.null purify$ *
1102   'label :=
1103   year field.or.null purify$ *
1105   sortify 'sort.label :=
1108 FUNCTION {sort.format.names}
1109 { 's :=
1110   #1 'nameptr :=
1111   ""
1112   s num.names$ 'numnames :=
1113   numnames 'namesleft :=
1114     { namesleft #0 > }
1115     { nameptr #1 >
1116         { "   " * }
1117         'skip$
1118       if$
1120       s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
1122       nameptr numnames = t "others" = and
1123         { "et al" * }
1124         { t sortify * }
1125       if$
1126       nameptr #1 + 'nameptr :=
1127       namesleft #1 - 'namesleft :=
1128     }
1129   while$
1132 FUNCTION {sort.format.title}
1133 { 't :=
1134   "A " #2
1135     "An " #3
1136       "The " #4 t chop.word
1137     chop.word
1138   chop.word
1139   sortify
1140   #1 global.max$ substring$
1143 FUNCTION {author.sort}
1144 { author empty$
1145     { key empty$
1146         { "to sort, need author or key in " cite$ * warning$
1147           ""
1148         }
1149         { key sortify }
1150       if$
1151     }
1152     { author sort.format.names }
1153   if$
1156 FUNCTION {author.editor.sort}
1157 { author empty$
1158     { editor empty$
1159         { key empty$
1160             { "to sort, need author, editor, or key in " cite$ * warning$
1161               ""
1162             }
1163             { key sortify }
1164           if$
1165         }
1166         { editor sort.format.names }
1167       if$
1168     }
1169     { author sort.format.names }
1170   if$
1173 FUNCTION {author.organization.sort}
1174 { author empty$
1175     { organization empty$
1176         { key empty$
1177             { "to sort, need author, organization, or key in " cite$ * warning$
1178               ""
1179             }
1180             { key sortify }
1181           if$
1182         }
1183         { "The " #4 organization chop.word sortify }
1184       if$
1185     }
1186     { author sort.format.names }
1187   if$
1190 FUNCTION {editor.organization.sort}
1191 { editor empty$
1192     { organization empty$
1193         { key empty$
1194             { "to sort, need editor, organization, or key in " cite$ * warning$
1195               ""
1196             }
1197             { key sortify }
1198           if$
1199         }
1200         { "The " #4 organization chop.word sortify }
1201       if$
1202     }
1203     { editor sort.format.names }
1204   if$
1207 FUNCTION {presort}
1209 { calc.label
1210   sort.label
1211   "    "
1212   *
1213   type$ "book" =
1215   type$ "inbook" =
1216   or
1217     'author.editor.sort
1218     { type$ "proceedings" =
1219         'editor.organization.sort
1220         { type$ "manual" =
1221             'author.organization.sort
1222             'author.sort
1223           if$
1224         }
1225       if$
1226     }
1227   if$
1229   *
1231   "    "
1232   *
1233   year field.or.null sortify
1234   *
1235   "    "
1236   *
1237   title field.or.null
1238   sort.format.title
1239   *
1240   #1 entry.max$ substring$
1241   'sort.key$ :=
1244 ITERATE {presort}
1246 SORT
1248 STRINGS { longest.label last.sort.label next.extra }
1250 INTEGERS { longest.label.width last.extra.num }
1252 FUNCTION {initialize.longest.label}
1253 { "" 'longest.label :=
1254   #0 int.to.chr$ 'last.sort.label :=
1255   "" 'next.extra :=
1256   #0 'longest.label.width :=
1257   #0 'last.extra.num :=
1260 FUNCTION {forward.pass}
1261 { last.sort.label sort.label =
1262     { last.extra.num #1 + 'last.extra.num :=
1263       last.extra.num int.to.chr$ 'extra.label :=
1264     }
1265     { "a" chr.to.int$ 'last.extra.num :=
1266       "" 'extra.label :=
1267       sort.label 'last.sort.label :=
1268     }
1269   if$
1272 FUNCTION {reverse.pass}
1273 { next.extra "b" =
1274     { "a" 'extra.label := }
1275     'skip$
1276   if$
1277   label extra.label * 'label :=
1278   label width$ longest.label.width >
1279     { label 'longest.label :=
1280       label width$ 'longest.label.width :=
1281     }
1282     'skip$
1283   if$
1284   extra.label 'next.extra :=
1287 EXECUTE {initialize.longest.label}
1289 ITERATE {forward.pass}
1291 REVERSE {reverse.pass}
1293 FUNCTION {begin.bib}
1295 { et.al.char.used
1296     { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
1297     'skip$
1298   if$
1299   preamble$ empty$
1301     'skip$
1302     { preamble$ write$ newline$ }
1303   if$
1305   "\begin{thebibliography}{" "}" * write$ newline$
1309 EXECUTE {begin.bib}
1311 EXECUTE {init.state.consts}
1313 ITERATE {call.type$}
1315 FUNCTION {end.bib}
1316 { newline$
1317   "\end{thebibliography}" write$ newline$
1320 EXECUTE {end.bib}