]> AND Private Git Repository - these_charles_emile.git/blob - phdthesisapa.bst
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
RCE : Nouvelle version de la these
[these_charles_emile.git] / phdthesisapa.bst
1 % BibTeX `apalike' bibliography style (version 0.99a, 8-Dec-10), adapted from
2 % the `alpha' style, version 0.99a; for BibTeX version 0.99a.
3 %
4 % Copyright (C) 1988, 2010 Oren Patashnik.
5 % Unlimited copying and redistribution of this file are permitted as long as
6 % it is unmodified.  Modifications (and redistribution of modified versions)
7 % are also permitted, but only if the resulting file is renamed.
8 %
9 % Differences between this style and `alpha' are generally heralded by a `%'.
10 % The file btxbst.doc has the documentation for alpha.bst.
11 %
12 % This style should be used with the `apalike' LaTeX style (apalike.sty).
13 % \cite's come out like "(Jones, 1986)" in the text but there are no labels
14 % in the bibliography, and something like "(1986)" comes out immediately
15 % after the author.  Author (and editor) names appear as last name, comma,
16 % initials.  A `year' field is required for every entry, and so is either
17 % an author (or in some cases, an editor) field or a key field.
18 %
19 % Editorial note:
20 % Many journals require a style like `apalike', but I strongly, strongly,
21 % strongly recommend that you not use it if you have a choice---use something
22 % like `plain' instead.  Mary-Claire van Leunen (A Handbook for Scholars,
23 % Knopf, 1979) argues convincingly that a style like `plain' encourages better
24 % writing than one like `apalike'.  Furthermore the strongest arguments for
25 % using an author-date style like `apalike'---that it's "the most practical"
26 % (The Chicago Manual of Style, University of Chicago Press, thirteenth
27 % edition, 1982, pages 400--401)---fall flat on their face with the new
28 % computer-typesetting technology.  For instance page 401 anachronistically
29 % states "The chief disadvantage of [a style like `plain'] is that additions
30 % or deletions cannot be made after the manuscript is typed without changing
31 % numbers in both text references and list."  LaTeX sidesteps the disadvantage.
32 %
33 % History:
34 %   15-sep-86  (OP)  Original version by Oren Patashnik, ideas from Susan King.
35 %   10-nov-86  (OP)  Truncated the sort.key$ string to the correct length
36 %                    in bib.sort.order to eliminate error message.
37 %   24-jan-88  (OP)  Updated for BibTeX version 0.99a, from alpha.bst 0.99a;
38 %                    apalike now sorts by author, then year, then title;
39 %                    THIS `apalike' VERSION DOES NOT WORK WITH BIBTEX 0.98i.
40 %    8-dec-10  (OP)  Still version 0.99a, as the code itself was unchanged;
41 %                    this release clarified the license.
42 %    07/09/14   (SG) Adapted for PHD thesis.
43
44 ENTRY
45   { address
46     author
47     booktitle
48     chapter
49     edition
50     editor
51     howpublished
52     institution
53     journal
54     key
55 %    month              not used in apalike
56     note
57     number
58     organization
59     pages
60     publisher
61     school
62     series
63     title
64     type
65     volume
66     year
67   }
68   {}
69   { label extra.label sort.label }
70
71 INTEGERS { output.state before.all mid.sentence after.sentence after.block }
72
73 FUNCTION {init.state.consts}
74 { #0 'before.all :=
75   #1 'mid.sentence :=
76   #2 'after.sentence :=
77   #3 'after.block :=
78 }
79
80 STRINGS { s t nt }
81
82 FUNCTION {output.nonnull}
83 { 's :=
84   output.state mid.sentence =
85     { ", " * write$ }
86     { output.state after.block =
87         { add.period$ write$
88           newline$
89           "\newblock " write$
90         }
91         { output.state before.all =
92             'write$
93             { add.period$ " " * write$ }
94           if$
95         }
96       if$
97       mid.sentence 'output.state :=
98     }
99   if$
100   s
101 }
102
103 FUNCTION {output}
104 { duplicate$ empty$
105     'pop$
106     'output.nonnull
107   if$
108 }
109
110 FUNCTION {output.check}
111 { 't :=
112   duplicate$ empty$
113     { pop$ "empty " t * " in " * cite$ * warning$ }
114     'output.nonnull
115   if$
116 }
117
118 %                                       apalike needs this function because
119 %                                       the year has special punctuation;
120 %                                       apalike ignores the month
121 FUNCTION {output.year.check}
122 { year empty$
123     { "empty year in " cite$ * warning$ }
124     { write$
125       " (" year * extra.label * ")" *
126       mid.sentence 'output.state :=
127     }
128   if$
129 }
130
131 FUNCTION {output.bibitem}
132 { newline$
133   "\bibitem[" write$
134   label write$
135   "]{" write$
136   cite$ write$
137   "}" write$
138   newline$
139   ""
140   before.all 'output.state :=
141 }
142
143 FUNCTION {fin.entry}
144 { add.period$
145   write$
146   newline$
147 }
148
149 FUNCTION {new.block}
150 { output.state before.all =
151     'skip$
152     { after.block 'output.state := }
153   if$
154 }
155
156 FUNCTION {new.sentence}
157 { output.state after.block =
158     'skip$
159     { output.state before.all =
160         'skip$
161         { after.sentence 'output.state := }
162       if$
163     }
164   if$
165 }
166
167 FUNCTION {not}
168 {   { #0 }
169     { #1 }
170   if$
171 }
172
173 FUNCTION {and}
174 {   'skip$
175     { pop$ #0 }
176   if$
177 }
178
179 FUNCTION {or}
180 {   { pop$ #1 }
181     'skip$
182   if$
183 }
184
185 FUNCTION {new.block.checkb}
186 { empty$
187   swap$ empty$
188   and
189     'skip$
190     'new.block
191   if$
192 }
193
194 FUNCTION {field.or.null}
195 { duplicate$ empty$
196     { pop$ "" }
197     'skip$
198   if$
199 }
200
201 FUNCTION {emphasize}
202 { duplicate$ empty$
203     { pop$ "" }
204     { "\phdthesisbibemph{" swap$ * "}" * }
205   if$
206 }
207
208 INTEGERS { nameptr namesleft numnames }
209
210 FUNCTION {format.names}
211 { 's :=
212   #1 'nameptr :=
213   s num.names$ 'numnames :=
214   numnames 'namesleft :=
215     { namesleft #0 > }
216     { s nameptr "{ll}" format.name$ 
217       purify$ "l" change.case$ 'nt :=
218       s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't :=
219       "\underlineifauthor{" nt * "}{" * t * "}" * 't :=
220       nameptr #1 >
221         { namesleft #1 >
222             { ", " * t * }
223             { t "others" =
224                 { ", \phdthesisbiband" * }
225                 { ", \phdthesisbiband" * t * }
226               if$
227             }
228           if$
229         }
230         't
231       if$
232       nameptr #1 + 'nameptr :=
233       namesleft #1 - 'namesleft :=
234     }
235   while$
236 }
237
238 FUNCTION {format.authors}
239 { author empty$
240     { "" }
241     { author format.names }
242   if$
243 }
244
245 FUNCTION {format.key}                   % this function is just for apalike
246 { empty$
247     { key field.or.null }
248     { "" }
249   if$
250 }
251
252 FUNCTION {format.editors}
253 { editor empty$
254     { "" }
255     { editor format.names
256       editor num.names$ #1 >
257         { ", \phdthesisbibeditors" * }
258         { ", \phdthesisbibeditor" * }
259       if$
260     }
261   if$
262 }
263
264 FUNCTION {format.title}
265 { title empty$
266     { "" }
267     { "\phdthesisbibEmph{" title "t" change.case$ * "}" * }
268   if$
269 }
270
271 FUNCTION {n.dashify}
272 { 't :=
273   ""
274     { t empty$ not }
275     { t #1 #1 substring$ "-" =
276         { t #1 #2 substring$ "--" = not
277             { "--" *
278               t #2 global.max$ substring$ 't :=
279             }
280             {   { t #1 #1 substring$ "-" = }
281                 { "-" *
282                   t #2 global.max$ substring$ 't :=
283                 }
284               while$
285             }
286           if$
287         }
288         { t #1 #1 substring$ *
289           t #2 global.max$ substring$ 't :=
290         }
291       if$
292     }
293   while$
294 }
295
296 FUNCTION {format.btitle}
297 { "\phdthesisbibEmph{" title * "}" *
298 }
299
300 FUNCTION {tie.or.space.connect}
301 { duplicate$ text.length$ #3 <
302     { "~" }
303     { " " }
304   if$
305   swap$ * *
306 }
307
308 FUNCTION {either.or.check}
309 { empty$
310     'pop$
311     { "can't use both " swap$ * " fields in " * cite$ * warning$ }
312   if$
313 }
314
315 FUNCTION {format.bvolume}
316 { volume empty$
317     { "" }
318     { "\phdthesisbibvolume" volume tie.or.space.connect
319       series empty$
320         'skip$
321         { " \phdthesisbibof " * series emphasize * }
322       if$
323       "\phdthesisbibvolumenumber" number either.or.check
324     }
325   if$
326 }
327
328 FUNCTION {format.number.series}
329 { volume empty$
330     { number empty$
331         { series field.or.null }
332         { output.state mid.sentence =
333             { "\phdthesisbibnumber" }
334             { "\phdthesisbibNumber" }
335           if$
336           number tie.or.space.connect
337           series empty$
338             { "there's a number but no series in " cite$ * warning$ }
339             { " \phdthesisbibin " * series * }
340           if$
341         }
342       if$
343     }
344     { "" }
345   if$
346 }
347
348 FUNCTION {format.edition}
349 { edition empty$
350     { "" }
351     { output.state mid.sentence =
352         { edition "l" change.case$ " \phdthesisbibedition" * }
353         { edition "t" change.case$ " \phdthesisbibedition" * }
354       if$
355     }
356   if$
357 }
358
359 INTEGERS { multiresult }
360
361 FUNCTION {multi.page.check}
362 { 't :=
363   #0 'multiresult :=
364     { multiresult not
365       t empty$ not
366       and
367     }
368     { t #1 #1 substring$
369       duplicate$ "-" =
370       swap$ duplicate$ "," =
371       swap$ "+" =
372       or or
373         { #1 'multiresult := }
374         { t #2 global.max$ substring$ 't := }
375       if$
376     }
377   while$
378   multiresult
379 }
380
381 FUNCTION {format.pages}
382 { pages empty$
383     { "" }
384     { pages multi.page.check
385         { "\phdthesisbibpages" pages n.dashify tie.or.space.connect }
386         { "\phdthesisbibpage" pages tie.or.space.connect }
387       if$
388     }
389   if$
390 }
391
392 FUNCTION {format.vol.num.pages}
393 { volume field.or.null
394   number empty$
395     'skip$
396     { "(" number * ")" * *
397       volume empty$
398         { "there's a number but no volume in " cite$ * warning$ }
399         'skip$
400       if$
401     }
402   if$
403   pages empty$
404     'skip$
405     { duplicate$ empty$
406         { pop$ format.pages }
407         { ":" * pages n.dashify * }
408       if$
409     }
410   if$
411 }
412
413 FUNCTION {format.chapter.pages}
414 { chapter empty$
415     'format.pages
416     { type empty$
417         { "\phdthesisbibchapter" }
418         { type "l" change.case$ }
419       if$
420       chapter tie.or.space.connect
421       pages empty$
422         'skip$
423         { ", " * format.pages * }
424       if$
425     }
426   if$
427 }
428
429 FUNCTION {format.in.ed.booktitle}
430 { booktitle empty$
431     { "" }
432     { editor empty$
433         { "\phdthesisbibIn " booktitle emphasize * }
434         { "\phdthesisbibIn " format.editors * ", " * booktitle emphasize * }
435       if$
436     }
437   if$
438 }
439
440 FUNCTION {format.thesis.type}
441 { type empty$
442     'skip$
443     { pop$
444       type "t" change.case$
445     }
446   if$
447 }
448
449 FUNCTION {format.tr.number}
450 { type empty$
451     { "\phdthesisbibtechnicalreport" }
452     'type
453   if$
454   number empty$
455     { "t" change.case$ }
456     { number tie.or.space.connect }
457   if$
458 }
459
460 FUNCTION {format.article.crossref}
461 { "\phdthesisbibIn\ "                                                  % this is for apalike
462   " \cite{" * crossref * "}" *
463 }
464
465 FUNCTION {format.book.crossref}
466 { volume empty$
467     { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
468       "\phdthesisbibIn\ "
469     }
470     { "\phdthesisbibVolume" volume tie.or.space.connect
471       " \phdthesisbibof\ " *
472     }
473   if$
474   "\cite{" * crossref * "}" *                           % this is for apalike
475 }
476
477 FUNCTION {format.incoll.inproc.crossref}
478 { "\phdthesisbibIn"                                                  % this is for apalike
479   " \cite{" * crossref * "}" *
480 }
481
482 FUNCTION {article}
483 { output.bibitem
484   format.authors "author" output.check
485   author format.key output                              % special for
486   output.year.check                                     % apalike
487   new.block
488   format.title "title" output.check
489   new.block
490   crossref missing$
491     { journal emphasize "journal" output.check
492       format.vol.num.pages output
493     }
494     { format.article.crossref output.nonnull
495       format.pages output
496     }
497   if$
498   new.block
499   note output
500   fin.entry
501 }
502
503 FUNCTION {book}
504 { output.bibitem
505   author empty$
506     { format.editors "author and editor" output.check
507       editor format.key output
508     }
509     { format.authors output.nonnull
510       crossref missing$
511         { "author and editor" editor either.or.check }
512         'skip$
513       if$
514     }
515   if$
516   output.year.check                             % special for apalike
517   new.block
518   format.btitle "title" output.check
519   crossref missing$
520     { format.bvolume output
521       new.block
522       format.number.series output
523       new.sentence
524       publisher "publisher" output.check
525       address output
526     }
527     { new.block
528       format.book.crossref output.nonnull
529     }
530   if$
531   format.edition output
532   new.block
533   note output
534   fin.entry
535 }
536
537 FUNCTION {booklet}
538 { output.bibitem
539   format.authors output
540   author format.key output                              % special for
541   output.year.check                                     % apalike
542   new.block
543   format.title "title" output.check
544   new.block
545   howpublished output
546   address output
547   new.block
548   note output
549   fin.entry
550 }
551
552 FUNCTION {inbook}
553 { output.bibitem
554   author empty$
555     { format.editors "author and editor" output.check
556       editor format.key output
557     }
558     { format.authors output.nonnull
559       crossref missing$
560         { "author and editor" editor either.or.check }
561         'skip$
562       if$
563     }
564   if$
565   output.year.check                             % special for apalike
566   new.block
567   format.btitle "title" output.check
568   crossref missing$
569     { format.bvolume output
570       format.chapter.pages "chapter and pages" output.check
571       new.block
572       format.number.series output
573       new.sentence
574       publisher "publisher" output.check
575       address output
576     }
577     { format.chapter.pages "chapter and pages" output.check
578       new.block
579       format.book.crossref output.nonnull
580     }
581   if$
582   format.edition output
583   new.block
584   note output
585   fin.entry
586 }
587
588 FUNCTION {incollection}
589 { output.bibitem
590   format.authors "author" output.check
591   author format.key output                              % special for
592   output.year.check                                     % apalike
593   new.block
594   format.title "title" output.check
595   new.block
596   crossref missing$
597     { format.in.ed.booktitle "booktitle" output.check
598       format.bvolume output
599       format.number.series output
600       format.chapter.pages output
601       new.sentence
602       publisher "publisher" output.check
603       address output
604       format.edition output
605     }
606     { format.incoll.inproc.crossref output.nonnull
607       format.chapter.pages output
608     }
609   if$
610   new.block
611   note output
612   fin.entry
613 }
614
615 FUNCTION {inproceedings}
616 { output.bibitem
617   format.authors "author" output.check
618   author format.key output                              % special for
619   output.year.check                                     % apalike
620   new.block
621   format.title "title" output.check
622   new.block
623   crossref missing$
624     { format.in.ed.booktitle "booktitle" output.check
625       format.bvolume output
626       format.number.series output
627       format.pages output
628       address output                                    % for apalike
629       new.sentence                                      % there's no year
630       organization output                               % here so things
631       publisher output                                  % are simpler
632     }
633     { format.incoll.inproc.crossref output.nonnull
634       format.pages output
635     }
636   if$
637   new.block
638   note output
639   fin.entry
640 }
641
642 FUNCTION {conference} { inproceedings }
643
644 FUNCTION {manual}
645 { output.bibitem
646   format.authors output
647   author format.key output                              % special for
648   output.year.check                                     % apalike
649   new.block
650   format.btitle "title" output.check
651   organization address new.block.checkb
652   organization output
653   address output
654   format.edition output
655   new.block
656   note output
657   fin.entry
658 }
659
660 FUNCTION {mastersthesis}
661 { output.bibitem
662   format.authors "author" output.check
663   author format.key output                              % special for
664   output.year.check                                     % apalike
665   new.block
666   format.title "title" output.check
667   new.block
668   "Master's thesis" format.thesis.type output.nonnull
669   school "school" output.check
670   address output
671   new.block
672   note output
673   fin.entry
674 }
675
676 FUNCTION {misc}
677 { output.bibitem
678   format.authors output
679   author format.key output                              % special for
680   output.year.check                                     % apalike
681   new.block
682   format.title output
683   new.block
684   howpublished output
685   new.block
686   note output
687   fin.entry
688 }
689
690 FUNCTION {phdthesis}
691 { output.bibitem
692   format.authors "author" output.check
693   author format.key output                              % special for
694   output.year.check                                     % apalike
695   new.block
696   format.btitle "title" output.check
697   new.block
698   "PhD thesis" format.thesis.type output.nonnull
699   school "school" output.check
700   address output
701   new.block
702   note output
703   fin.entry
704 }
705
706 FUNCTION {proceedings}
707 { output.bibitem
708   format.editors output
709   editor format.key output                              % special for
710   output.year.check                                     % apalike
711   new.block
712   format.btitle "title" output.check
713   format.bvolume output
714   format.number.series output
715   address output                                % for apalike
716   new.sentence                                  % we always output
717   organization output                           % a nonempty organization
718   publisher output                              % here
719   new.block
720   note output
721   fin.entry
722 }
723
724 FUNCTION {techreport}
725 { output.bibitem
726   format.authors "author" output.check
727   author format.key output                              % special for
728   output.year.check                                     % apalike
729   new.block
730   format.title "title" output.check
731   new.block
732   format.tr.number output.nonnull
733   institution "institution" output.check
734   address output
735   new.block
736   note output
737   fin.entry
738 }
739
740 FUNCTION {unpublished}
741 { output.bibitem
742   format.authors "author" output.check
743   author format.key output                              % special for
744   output.year.check                                     % apalike
745   new.block
746   format.title "title" output.check
747   new.block
748   note "note" output.check
749   fin.entry
750 }
751
752 FUNCTION {default.type} { misc }
753
754 MACRO {jan} {"\phdthesisbibJanuary"}
755
756 MACRO {feb} {"\phdthesisbibFebruary"}
757
758 MACRO {mar} {"\phdthesisbibMarch"}
759
760 MACRO {apr} {"\phdthesisbibApril"}
761
762 MACRO {may} {"\phdthesisbibMay"}
763
764 MACRO {jun} {"\phdthesisbibJune"}
765
766 MACRO {jul} {"\phdthesisbibJuly"}
767
768 MACRO {aug} {"\phdthesisbibAugust"}
769
770 MACRO {sep} {"\phdthesisbibSeptember"}
771
772 MACRO {oct} {"\phdthesisbibOctober"}
773
774 MACRO {nov} {"\phdthesisbibNovember"}
775
776 MACRO {dec} {"\phdthesisbibDecember"}
777
778 MACRO {acmcs} {"ACM Computing Surveys"}
779
780 MACRO {acta} {"Acta Informatica"}
781
782 MACRO {cacm} {"Communications of the ACM"}
783
784 MACRO {ibmjrd} {"IBM Journal of Research and Development"}
785
786 MACRO {ibmsj} {"IBM Systems Journal"}
787
788 MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
789
790 MACRO {ieeetc} {"IEEE Transactions on Computers"}
791
792 MACRO {ieeetcad}
793  {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
794
795 MACRO {ipl} {"Information Processing Letters"}
796
797 MACRO {jacm} {"Journal of the ACM"}
798
799 MACRO {jcss} {"Journal of Computer and System Sciences"}
800
801 MACRO {scp} {"Science of Computer Programming"}
802
803 MACRO {sicomp} {"SIAM Journal on Computing"}
804
805 MACRO {tocs} {"ACM Transactions on Computer Systems"}
806
807 MACRO {tods} {"ACM Transactions on Database Systems"}
808
809 MACRO {tog} {"ACM Transactions on Graphics"}
810
811 MACRO {toms} {"ACM Transactions on Mathematical Software"}
812
813 MACRO {toois} {"ACM Transactions on Office Information Systems"}
814
815 MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
816
817 MACRO {tcs} {"Theoretical Computer Science"}
818
819 READ
820
821 FUNCTION {sortify}
822 { purify$
823   "l" change.case$
824 }
825
826 INTEGERS { len }
827
828 FUNCTION {chop.word}
829 { 's :=
830   'len :=
831   s #1 len substring$ =
832     { s len #1 + global.max$ substring$ }
833     's
834   if$
835 }
836
837 %                       There are three apalike cases: one person (Jones),
838 %                       two (Jones and de~Bruijn), and more (Jones et~al.).
839 %                       This function is much like format.crossref.editors.
840 %
841 % Note that if more than one name exist, the "et al." is output
842 FUNCTION {format.lab.names}
843 { 's :=
844   s #1 "{vv~}{ll}" format.name$
845   s num.names$ duplicate$
846   #1 >
847     { pop$ " et~al." * }
848     { #2 <
849         'skip$
850         { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
851             { " \phdthesisbibetal" * }
852             { " \phdthesisbiband\ " * s #2 "{vv~}{ll}" format.name$ * }
853           if$
854         }
855       if$
856     }
857   if$
858 }
859
860 FUNCTION {author.key.label}
861 { author empty$
862     { key empty$
863         { cite$ #1 #3 substring$ }
864         'key                                    % apalike uses the whole key
865       if$
866     }
867     { author format.lab.names }
868   if$
869 }
870
871 FUNCTION {author.editor.key.label}
872 { author empty$
873     { editor empty$
874         { key empty$
875             { cite$ #1 #3 substring$ }
876             'key                                % apalike uses the whole key
877           if$
878         }
879         { editor format.lab.names }
880       if$
881     }
882     { author format.lab.names }
883   if$
884 }
885
886 FUNCTION {editor.key.label}
887 { editor empty$
888     { key empty$
889         { cite$ #1 #3 substring$ }
890         'key                    % apalike uses the whole key, no organization
891       if$
892     }
893     { editor format.lab.names }
894   if$
895 }
896
897 FUNCTION {calc.label}
898 { type$ "book" =
899   type$ "inbook" =
900   or
901     'author.editor.key.label
902     { type$ "proceedings" =
903         'editor.key.label                       % apalike ignores organization
904         'author.key.label                       % for labeling and sorting
905       if$
906     }
907   if$
908   ", "                                                  % these three lines are
909   *                                                     % for apalike, which
910   year field.or.null purify$ #-1 #4 substring$          % uses all four digits
911   *
912   'label :=
913 }
914
915 FUNCTION {sort.format.names}
916 { 's :=
917   #1 'nameptr :=
918   ""
919   s num.names$ 'numnames :=
920   numnames 'namesleft :=
921     { namesleft #0 > }
922     { nameptr #1 >
923         { "   " * }
924         'skip$
925       if$                                               % apalike uses initials
926       s nameptr "{vv{ } }{ll{ }}{  f{ }}{  jj{ }}" format.name$ 't := % <= here
927       nameptr numnames = t "others" = and
928         { "et al" * }
929         { t sortify * }
930       if$
931       nameptr #1 + 'nameptr :=
932       namesleft #1 - 'namesleft :=
933     }
934   while$
935 }
936
937 FUNCTION {sort.format.title}
938 { 't :=
939   "A " #2
940     "An " #3
941       "The " #4 t chop.word
942     chop.word
943   chop.word
944   sortify
945   #1 global.max$ substring$
946 }
947
948 FUNCTION {author.sort}
949 { author empty$
950     { key empty$
951         { "to sort, need author or key in " cite$ * warning$
952           ""
953         }
954         { key sortify }
955       if$
956     }
957     { author sort.format.names }
958   if$
959 }
960
961 FUNCTION {author.editor.sort}
962 { author empty$
963     { editor empty$
964         { key empty$
965             { "to sort, need author, editor, or key in " cite$ * warning$
966               ""
967             }
968             { key sortify }
969           if$
970         }
971         { editor sort.format.names }
972       if$
973     }
974     { author sort.format.names }
975   if$
976 }
977
978 FUNCTION {editor.sort}
979 { editor empty$
980     { key empty$
981         { "to sort, need editor or key in " cite$ * warning$
982           ""
983         }
984         { key sortify }
985       if$
986     }
987     { editor sort.format.names }
988   if$
989 }
990
991 %                       apalike uses two sorting passes; the first one sets the
992 %                       labels so that the `a's, `b's, etc. can be computed;
993 %                       the second pass puts the references in "correct" order.
994 %                       The presort function is for the first pass. It computes
995 %                       label, sort.label, and title, and then concatenates.
996 FUNCTION {presort}
997 { calc.label
998   label sortify
999   "    "
1000   *
1001   type$ "book" =
1002   type$ "inbook" =
1003   or
1004     'author.editor.sort
1005     { type$ "proceedings" =
1006         'editor.sort
1007         'author.sort
1008       if$
1009     }
1010   if$
1011   #1 entry.max$ substring$      % for
1012   'sort.label :=                % apalike
1013   sort.label                    % style
1014   *
1015   "    "
1016   *
1017   title field.or.null
1018   sort.format.title
1019   *
1020   #1 entry.max$ substring$
1021   'sort.key$ :=
1022 }
1023
1024 ITERATE {presort}
1025
1026 SORT            % by label, sort.label, title---for final label calculation
1027
1028 STRINGS { last.label next.extra }       % apalike labels are only for the text;
1029
1030 INTEGERS { last.extra.num }             % there are none in the bibliography
1031
1032 FUNCTION {initialize.extra.label.stuff} % and hence there is no `longest.label'
1033 { #0 int.to.chr$ 'last.label :=
1034   "" 'next.extra :=
1035   #0 'last.extra.num :=
1036 }
1037
1038 FUNCTION {forward.pass}
1039 { last.label label =
1040     { last.extra.num #1 + 'last.extra.num :=
1041       last.extra.num int.to.chr$ 'extra.label :=
1042     }
1043     { "a" chr.to.int$ 'last.extra.num :=
1044       "" 'extra.label :=
1045       label 'last.label :=
1046     }
1047   if$
1048 }
1049
1050 FUNCTION {reverse.pass}
1051 { next.extra "b" =
1052     { "a" 'extra.label := }
1053     'skip$
1054   if$
1055   label extra.label * 'label :=
1056   extra.label 'next.extra :=
1057 }
1058
1059 EXECUTE {initialize.extra.label.stuff}
1060
1061 ITERATE {forward.pass}
1062
1063 REVERSE {reverse.pass}
1064
1065 %                               Now that the label is right we sort for real,
1066 %                               on sort.label then year then title.  This is
1067 %                               for the second sorting pass.
1068 FUNCTION {bib.sort.order}
1069 { sort.label
1070   "    "
1071   *
1072   year field.or.null sortify
1073   *
1074   "    "
1075   *
1076   title field.or.null
1077   sort.format.title
1078   *
1079   #1 entry.max$ substring$
1080   'sort.key$ :=
1081 }
1082
1083 ITERATE {bib.sort.order}
1084
1085 SORT            % by sort.label, year, title---giving final bibliography order
1086
1087 FUNCTION {begin.bib}
1088 { preamble$ empty$                              % no \etalchar in apalike
1089     'skip$
1090     { preamble$ write$ newline$ }
1091   if$
1092   "\begin{thebibliography}{}" write$ newline$           % no labels in apalike
1093 }
1094
1095 EXECUTE {begin.bib}
1096
1097 EXECUTE {init.state.consts}
1098
1099 ITERATE {call.type$}
1100
1101 FUNCTION {end.bib}
1102 { newline$
1103   "\end{thebibliography}" write$ newline$
1104 }
1105
1106 EXECUTE {end.bib}