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

Private GIT Repository
RCE : Nouvelle version de la these
[these_charles_emile.git] / phdthesisnum.bst
1 % Update to have a sorting order by year, by authors.
2
3 % ACM Transactions bibliography style (24-Jan-88 version)
4 %    A lot like abbrv.bst, but names come out "Last, initials", and in \sc.
5 %    Some dates are parenthesized.
6 %
7 %    History
8 %     2/ 6/86   (HWT)   Original version, by Howard Trickey.
9 %     3/ 5/86   (HWT)   Put in pp. everywhere but articles, as per ACM style.
10 %     1/24/88   (OP&HWT) Updated for BibTeX version 0.99a, Oren Patashnik;
11 %                       corrected the abbreviations to "Mar." and "Sept.";
12 %                       THIS `acm' VERSION DOES NOT WORK WITH BIBTEX 0.98i.
13 %     07/09/13  (SG) Adapted for PHD thesis.
14
15 ENTRY
16   { address
17     author
18     booktitle
19     chapter
20     edition
21     editor
22     howpublished
23     institution
24     journal
25     key
26     month
27     note
28     number
29     organization
30     pages
31     publisher
32     school
33     series
34     title
35     type
36     volume
37     year
38   }
39   {}
40   { label }
41
42 INTEGERS { output.state before.all mid.sentence after.sentence after.block }
43
44 FUNCTION {init.state.consts}
45 { #0 'before.all :=
46   #1 'mid.sentence :=
47   #2 'after.sentence :=
48   #3 'after.block :=
49 }
50
51 STRINGS { s t nt }
52
53 FUNCTION {output.nonnull}
54 { 's :=
55   output.state mid.sentence =
56     { ", " * write$ }
57     { output.state after.block =
58         { add.period$ write$
59           newline$
60           "\newblock " write$
61         }
62         { output.state before.all =
63             'write$
64             { add.period$ " " * write$ }
65           if$
66         }
67       if$
68       mid.sentence 'output.state :=
69     }
70   if$
71   s
72 }
73
74 FUNCTION {output}
75 { duplicate$ empty$
76     'pop$
77     'output.nonnull
78   if$
79 }
80
81 FUNCTION {output.check}
82 { 't :=
83   duplicate$ empty$
84     { pop$ "empty " t * " in " * cite$ * warning$ }
85     'output.nonnull
86   if$
87 }
88
89 FUNCTION {output.bibitem}
90 { newline$
91   "\bibitem{" write$
92   cite$ write$
93   "}{" write$
94   newline$
95   ""
96   before.all 'output.state :=
97 }
98
99 FUNCTION {fin.entry}
100 { add.period$
101   "}" *
102   write$
103   newline$
104 }
105
106 FUNCTION {new.block}
107 { output.state before.all =
108     'skip$
109     { after.block 'output.state := }
110   if$
111 }
112
113 FUNCTION {new.sentence}
114 { output.state after.block =
115     'skip$
116     { output.state before.all =
117         'skip$
118         { after.sentence 'output.state := }
119       if$
120     }
121   if$
122 }
123
124 FUNCTION {not}
125 {   { #0 }
126     { #1 }
127   if$
128 }
129
130 FUNCTION {and}
131 {   'skip$
132     { pop$ #0 }
133   if$
134 }
135
136 FUNCTION {or}
137 {   { pop$ #1 }
138     'skip$
139   if$
140 }
141
142 FUNCTION {new.block.checka}
143 { empty$
144     'skip$
145     'new.block
146   if$
147 }
148
149 FUNCTION {new.block.checkb}
150 { empty$
151   swap$ empty$
152   and
153     'skip$
154     'new.block
155   if$
156 }
157
158 FUNCTION {field.or.null}
159 { duplicate$ empty$
160     { pop$ "" }
161     'skip$
162   if$
163 }
164
165 FUNCTION {emphasize}
166 { duplicate$ empty$
167     { pop$ "" }
168     { "\phdthesisbibemph{" swap$ * "}" * }
169   if$
170 }
171
172 FUNCTION {emphasizeic}
173 { duplicate$ empty$
174     { pop$ "" }
175     { "\phdthesisbibemph{" swap$ * "}" * }
176   if$
177 }
178
179 FUNCTION {scapify}
180 { duplicate$ empty$
181     { pop$ "" }
182     { "{\sc " swap$ * "}" * }
183   if$
184 }
185
186 INTEGERS { nameptr namesleft numnames }
187
188 FUNCTION {format.names}
189 { 's :=
190   #1 'nameptr :=
191   s num.names$ 'numnames :=
192   numnames 'namesleft :=
193     { namesleft #0 > }
194     { s nameptr "{ll}" format.name$ 
195       purify$ "l" change.case$ 'nt :=
196       s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't :=
197       "\underlineifauthor{" nt * "}{" * t * "}" * 't :=
198       nameptr #1 >
199         { namesleft #1 >
200             { ", " * t * }
201             { t "others" =
202                 { ", et~al." * }
203                 { ", and " * t * }
204               if$
205             }
206           if$
207         }
208         't
209       if$
210       nameptr #1 + 'nameptr :=
211       namesleft #1 - 'namesleft :=
212     }
213   while$
214 }
215
216 % For names inside entries (e.g., editors of an "In ...");
217 % this is exactly ABBRV.BST's `format.names' function.
218 FUNCTION {format.innames}
219 { 's :=
220   #1 'nameptr :=
221   s num.names$ 'numnames :=
222   numnames 'namesleft :=
223     { namesleft #0 > }
224     { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
225       nameptr #1 >
226         { namesleft #1 >
227             { ", " * t * }
228             { numnames #2 >
229                 { "," * }
230                 'skip$
231               if$
232               t "others" =
233                 { " et~al." * }
234                 { " and " * t * }
235               if$
236             }
237           if$
238         }
239         't
240       if$
241       nameptr #1 + 'nameptr :=
242       namesleft #1 - 'namesleft :=
243     }
244   while$
245 }
246
247 FUNCTION {format.authors}
248 { author empty$
249     { "" }
250     { author format.names scapify }
251   if$
252 }
253
254 FUNCTION {format.editors}
255 { editor empty$
256     { "" }
257     { editor format.names scapify
258       editor num.names$ #1 >
259         { ", Eds." * }
260         { ", Ed." * }
261       if$
262     }
263   if$
264 }
265
266 FUNCTION {format.ineditors}
267 { editor empty$
268     { "" }
269     { editor format.innames
270       editor num.names$ #1 >
271         { ", Eds." * }
272         { ", Ed." * }
273       if$
274     }
275   if$
276 }
277
278 FUNCTION {format.title}
279 { title empty$
280     { "" }
281     { "\phdthesisbibEmph{" title "t" change.case$ * "}" * }
282   if$
283 }
284
285 FUNCTION {n.dashify}
286 { 't :=
287   ""
288     { t empty$ not }
289     { t #1 #1 substring$ "-" =
290         { t #1 #2 substring$ "--" = not
291             { "--" *
292               t #2 global.max$ substring$ 't :=
293             }
294             {   { t #1 #1 substring$ "-" = }
295                 { "-" *
296                   t #2 global.max$ substring$ 't :=
297                 }
298               while$
299             }
300           if$
301         }
302         { t #1 #1 substring$ *
303           t #2 global.max$ substring$ 't :=
304         }
305       if$
306     }
307   while$
308 }
309
310 FUNCTION {format.date}
311 { year empty$
312     { month empty$
313         { "" }
314         { "there's a month but no year in " cite$ * warning$
315           month
316         }
317       if$
318     }
319     { month empty$
320         'year
321         { month " " * year * }
322       if$
323     }
324   if$
325 }
326
327 FUNCTION {format.btitle}
328 { "\phdthesisbibEmph{" title * "}" *
329 }
330
331 FUNCTION {tie.or.space.connect}
332 { duplicate$ text.length$ #3 <
333     { "~" }
334     { " " }
335   if$
336   swap$ * *
337 }
338
339 FUNCTION {either.or.check}
340 { empty$
341     'pop$
342     { "can't use both " swap$ * " fields in " * cite$ * warning$ }
343   if$
344 }
345
346 FUNCTION {format.bvolume}
347 { volume empty$
348     { "" }
349     { "vol.~" volume *
350       series empty$
351         'skip$
352         { " of " * series emphasize * }
353       if$
354       "volume and number" number either.or.check
355     }
356   if$
357 }
358
359 FUNCTION {format.number.series}
360 { volume empty$
361     { number empty$
362         { series field.or.null }
363         { output.state mid.sentence =
364             { "no.~" }
365             { "No.~" }
366           if$
367           number *
368           series empty$
369             { "there's a number but no series in " cite$ * warning$ }
370             { " in " * series * }
371           if$
372         }
373       if$
374     }
375     { "" }
376   if$
377 }
378
379 FUNCTION {format.edition}
380 { edition empty$
381     { "" }
382     { output.state mid.sentence =
383         { edition "l" change.case$ "~ed." * }
384         { edition "t" change.case$ "~ed." * }
385       if$
386     }
387   if$
388 }
389
390 FUNCTION {format.pages}
391 { pages empty$
392     { "" }
393     { pages n.dashify }
394   if$
395 }
396
397 INTEGERS { multiresult }
398
399 FUNCTION {multi.page.check}
400 { 't :=
401   #0 'multiresult :=
402     { multiresult not
403       t empty$ not
404       and
405     }
406     { t #1 #1 substring$
407       duplicate$ "-" =
408       swap$ duplicate$ "," =
409       swap$ "+" =
410       or or
411         { #1 'multiresult := }
412         { t #2 global.max$ substring$ 't := }
413       if$
414     }
415   while$
416   multiresult
417 }
418
419 FUNCTION {format.pp.pages}
420 { pages empty$
421     { "" }
422     { pages multi.page.check
423         { "pp.~" pages n.dashify * }
424         { "p.~" pages * }
425       if$
426     }
427   if$
428 }
429
430 FUNCTION {format.journal.vol.num.date}
431 { journal empty$
432     { "empty journal in " cite$ * warning$
433       ""
434     }
435     { journal
436       volume empty$
437         'skip$
438         { " " * volume * }
439       if$
440       number empty$
441         'emphasizeic
442         { emphasize ", " * number * }
443       if$
444       year empty$
445         { "empty year in " cite$ * warning$ }
446         { " (" * format.date * ")" * }
447       if$
448     }
449   if$
450 }
451
452 FUNCTION {format.chapter.pages}
453 { chapter empty$
454     'format.pp.pages
455     { type empty$
456         { "ch.~" chapter * }
457         { type "l" change.case$ chapter tie.or.space.connect }
458       if$
459       pages empty$
460         'skip$
461         { ", " * format.pp.pages * }
462       if$
463     }
464   if$
465 }
466
467 FUNCTION {format.in.ed.booktitle}
468 { booktitle empty$
469     { "" }
470     { "In " booktitle emphasize *
471       editor empty$
472         'skip$
473         { ", " * format.ineditors * }
474       if$
475     }
476   if$
477 }
478
479 % The proceedings title (it's on the stack) gets an (address, date) appended
480 FUNCTION {format.proc.date}
481 { duplicate$ empty$
482     { pop$ "" }
483     { year empty$
484         { "empty year in " cite$ * warning$
485           address empty$
486             'emphasize
487             { emphasizeic
488               " (" * address * ")" *
489             }
490           if$
491         }
492         { emphasizeic
493           " (" *
494           address empty$
495             'skip$
496             { address * ", " * }
497           if$
498           format.date *
499           ")" *
500         }
501       if$
502     }
503   if$
504 }
505
506 FUNCTION {format.in.proc.date}
507 { booktitle empty$
508     { "" }
509     { "In " booktitle format.proc.date * }
510   if$
511 }
512
513 FUNCTION {empty.misc.check}
514 { author empty$ title empty$ howpublished empty$
515   month empty$ year empty$ note empty$
516   and and and and and
517   key empty$ not and
518     { "all relevant fields are empty in " cite$ * warning$ }
519     'skip$
520   if$
521 }
522
523 FUNCTION {format.thesis.type}
524 { type empty$
525     'skip$
526     { pop$
527       type "t" change.case$
528     }
529   if$
530 }
531
532 FUNCTION {format.tr.number}
533 { type empty$
534     { "Tech. Rep." }
535     'type
536   if$
537   number empty$
538     { "t" change.case$ }
539     { number tie.or.space.connect }
540   if$
541 }
542
543 FUNCTION {format.article.crossref}
544 { key empty$
545     { journal empty$
546         { "need key or journal for " cite$ * " to crossref " * crossref *
547           warning$
548           ""
549         }
550         { "In {\em " journal * "}" * }
551       if$
552     }
553     { "In " key * }
554   if$
555   " \cite{" * crossref * "}" *
556 }
557
558 FUNCTION {format.crossref.editor}
559 { editor #1 "{vv~}{ll}" format.name$
560   editor num.names$ duplicate$
561   #2 >
562     { pop$ " et~al." * }
563     { #2 <
564         'skip$
565         { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
566             { " et~al." * }
567             { " and " * editor #2 "{vv~}{ll}" format.name$ * }
568           if$
569         }
570       if$
571     }
572   if$
573 }
574
575 FUNCTION {format.book.crossref}
576 { volume empty$
577     { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
578       "In "
579     }
580     { "Vol.~" volume *
581       " of " *
582     }
583   if$
584   editor empty$
585   editor field.or.null author field.or.null =
586   or
587     { key empty$
588         { series empty$
589             { "need editor, key, or series for " cite$ * " to crossref " *
590               crossref * warning$
591               "" *
592             }
593             { "{\em " * series * "}" * }
594           if$
595         }
596         { key * }
597       if$
598     }
599     { format.crossref.editor * }
600   if$
601   " \cite{" * crossref * "}" *
602 }
603
604 FUNCTION {format.incoll.inproc.crossref}
605 { editor empty$
606   editor field.or.null author field.or.null =
607   or
608     { key empty$
609         { booktitle empty$
610             { "need editor, key, or booktitle for " cite$ * " to crossref " *
611               crossref * warning$
612               ""
613             }
614             { "In {\em " booktitle * "}" * }
615           if$
616         }
617         { "In " key * }
618       if$
619     }
620     { "In " format.crossref.editor * }
621   if$
622   " \cite{" * crossref * "}" *
623 }
624
625 FUNCTION {article}
626 { output.bibitem
627   format.authors "author" output.check
628   new.block
629   format.title "title" output.check
630   new.block
631   crossref missing$
632     { format.journal.vol.num.date output
633       format.pages output
634     }
635     { format.article.crossref output.nonnull
636       format.pp.pages output
637     }
638   if$
639   new.block
640   note output
641   fin.entry
642 }
643
644 FUNCTION {book}
645 { output.bibitem
646   author empty$
647     { format.editors "author and editor" output.check }
648     { format.authors output.nonnull
649       crossref missing$
650         { "author and editor" editor either.or.check }
651         'skip$
652       if$
653     }
654   if$
655   new.block
656   format.btitle "title" output.check
657   format.edition output
658   crossref missing$
659     { format.bvolume output
660       new.block
661       format.number.series output
662       new.sentence
663       publisher "publisher" output.check
664       address output
665     }
666     { new.block
667       format.book.crossref output.nonnull
668     }
669   if$
670   format.date "year" output.check
671   new.block
672   note output
673   fin.entry
674 }
675
676 FUNCTION {booklet}
677 { output.bibitem
678   format.authors output
679   new.block
680   format.title "title" output.check
681   howpublished address new.block.checkb
682   howpublished output
683   address output
684   format.date output
685   new.block
686   note output
687   fin.entry
688 }
689
690 FUNCTION {inbook}
691 { output.bibitem
692   author empty$
693     { format.editors "author and editor" output.check }
694     { format.authors output.nonnull
695       crossref missing$
696         { "author and editor" editor either.or.check }
697         'skip$
698       if$
699     }
700   if$
701   new.block
702   format.btitle "title" output.check
703   format.edition output
704   crossref missing$
705     { format.bvolume output
706       new.block
707       format.number.series output
708       new.sentence
709       publisher "publisher" output.check
710       address output
711     }
712     { new.block
713       format.book.crossref output.nonnull
714     }
715   if$
716   format.date "year" output.check
717   format.chapter.pages "chapter and pages" output.check
718   new.block
719   note output
720   fin.entry
721 }
722
723 FUNCTION {incollection}
724 { output.bibitem
725   format.authors "author" output.check
726   new.block
727   format.title "title" output.check
728   new.block
729   crossref missing$
730     { format.in.ed.booktitle "booktitle" output.check
731       format.edition output
732       format.bvolume output
733       format.number.series output
734       new.sentence
735       publisher "publisher" output.check
736       address output
737       format.date "year" output.check
738     }
739     { format.incoll.inproc.crossref output.nonnull }
740   if$
741   format.chapter.pages output
742   new.block
743   note output
744   fin.entry
745 }
746
747 FUNCTION {inproceedings}
748 { output.bibitem
749   format.authors "author" output.check
750   new.block
751   format.title "title" output.check
752   new.block
753   crossref missing$
754     { format.in.proc.date "booktitle" output.check
755       format.ineditors output
756       format.bvolume output
757       format.number.series output
758       organization output
759       publisher output
760     }
761     { format.incoll.inproc.crossref output.nonnull }
762   if$
763   format.pp.pages output
764   new.block
765   note output
766   fin.entry
767 }
768
769 FUNCTION {conference} { inproceedings }
770
771 FUNCTION {manual}
772 { output.bibitem
773   author empty$
774     { organization scapify output }
775     { format.authors output.nonnull }
776   if$
777   new.block
778   format.btitle "title" output.check
779   format.edition output
780   author empty$
781     { address new.block.checka }
782     { organization address new.block.checkb
783       organization output
784     }
785   if$
786   address output
787   format.date output
788   new.block
789   note output
790   fin.entry
791 }
792
793 FUNCTION {mastersthesis}
794 { output.bibitem
795   format.authors "author" output.check
796   new.block
797   format.title "title" output.check
798   new.block
799   "Master's thesis" format.thesis.type output.nonnull
800   school "school" output.check
801   address output
802   format.date "year" output.check
803   new.block
804   note output
805   fin.entry
806 }
807
808 FUNCTION {misc}
809 { output.bibitem
810   format.authors output
811   title howpublished new.block.checkb
812   format.title output
813   howpublished new.block.checka
814   howpublished output
815   format.date output
816   new.block
817   note output
818   fin.entry
819   empty.misc.check
820 }
821
822 FUNCTION {phdthesis}
823 { output.bibitem
824   format.authors "author" output.check
825   new.block
826   format.btitle "title" output.check
827   new.block
828   "PhD thesis" format.thesis.type output.nonnull
829   school "school" output.check
830   address output
831   format.date "year" output.check
832   new.block
833   note output
834   fin.entry
835 }
836
837 FUNCTION {proceedings}
838 { output.bibitem
839   editor empty$
840     { organization scapify output }
841     { format.editors output.nonnull }
842   if$
843   new.block
844   title format.proc.date "title" output.check
845   format.bvolume output
846   format.number.series output
847   editor empty$
848     'skip$
849     { organization output }
850   if$
851   publisher output
852   new.block
853   note output
854   fin.entry
855 }
856
857 FUNCTION {techreport}
858 { output.bibitem
859   format.authors "author" output.check
860   new.block
861   format.title "title" output.check
862   new.block
863   format.tr.number output.nonnull
864   institution "institution" output.check
865   address output
866   format.date "year" output.check
867   new.block
868   note output
869   fin.entry
870 }
871
872 FUNCTION {unpublished}
873 { output.bibitem
874   format.authors "author" output.check
875   new.block
876   format.title "title" output.check
877   new.block
878   note "note" output.check
879   format.date output
880   fin.entry
881 }
882
883 FUNCTION {default.type} { misc }
884
885 MACRO {jan} {"Jan."}
886
887 MACRO {feb} {"Feb."}
888
889 MACRO {mar} {"Mar."}
890
891 MACRO {apr} {"Apr."}
892
893 MACRO {may} {"May"}
894
895 MACRO {jun} {"June"}
896
897 MACRO {jul} {"July"}
898
899 MACRO {aug} {"Aug."}
900
901 MACRO {sep} {"Sept."}
902
903 MACRO {oct} {"Oct."}
904
905 MACRO {nov} {"Nov."}
906
907 MACRO {dec} {"Dec."}
908
909 MACRO {acmcs} {"ACM Comput. Surv."}
910
911 MACRO {acta} {"Acta Inf."}
912
913 MACRO {cacm} {"Commun. ACM"}
914
915 MACRO {ibmjrd} {"IBM J. Res. Dev."}
916
917 MACRO {ibmsj} {"IBM Syst.~J."}
918
919 MACRO {ieeese} {"IEEE Trans. Softw. Eng."}
920
921 MACRO {ieeetc} {"IEEE Trans. Comput."}
922
923 MACRO {ieeetcad}
924  {"IEEE Trans. Comput.-Aided Design Integrated Circuits"}
925
926 MACRO {ipl} {"Inf. Process. Lett."}
927
928 MACRO {jacm} {"J.~ACM"}
929
930 MACRO {jcss} {"J.~Comput. Syst. Sci."}
931
932 MACRO {scp} {"Sci. Comput. Programming"}
933
934 MACRO {sicomp} {"SIAM J. Comput."}
935
936 MACRO {tocs} {"ACM Trans. Comput. Syst."}
937
938 MACRO {tods} {"ACM Trans. Database Syst."}
939
940 MACRO {tog} {"ACM Trans. Gr."}
941
942 MACRO {toms} {"ACM Trans. Math. Softw."}
943
944 MACRO {toois} {"ACM Trans. Office Inf. Syst."}
945
946 MACRO {toplas} {"ACM Trans. Program. Lang. Syst."}
947
948 MACRO {tcs} {"Theoretical Comput. Sci."}
949
950 READ
951
952 FUNCTION {sortify}
953 { purify$
954   "l" change.case$
955 }
956
957 INTEGERS { len }
958
959 FUNCTION {chop.word}
960 { 's :=
961   'len :=
962   s #1 len substring$ =
963     { s len #1 + global.max$ substring$ }
964     's
965   if$
966 }
967
968 FUNCTION {sort.format.names}
969 { 's :=
970   #1 'nameptr :=
971   ""
972   s num.names$ 'numnames :=
973   numnames 'namesleft :=
974     { namesleft #0 > }
975     { nameptr #1 >
976         { "   " * }
977         'skip$
978       if$
979       s nameptr "{vv{ } }{ll{ }}{  f{ }}{  jj{ }}" format.name$ 't :=
980       nameptr numnames = t "others" = and
981         { "et al" * }
982         { t sortify * }
983       if$
984       nameptr #1 + 'nameptr :=
985       namesleft #1 - 'namesleft :=
986     }
987   while$
988 }
989
990 FUNCTION {sort.format.title}
991 { 't :=
992   "A " #2
993     "An " #3
994       "The " #4 t chop.word
995     chop.word
996   chop.word
997   sortify
998   #1 global.max$ substring$
999 }
1000
1001 FUNCTION {year.author.sort}
1002 { year empty$
1003     { author empty$
1004         { "to sort, need year or author in " cite$ * warning$
1005           ""
1006         }
1007         { author sort.format.names }
1008       if$
1009     }
1010     { year sortify }
1011   if$
1012 }
1013
1014 FUNCTION {year.author.editor.sort}
1015 { year empty$
1016         { author empty$
1017             { editor empty$
1018                 { key empty$
1019                     { "to sort, need yeary, author, editor, or key in " cite$ * warning$
1020                       ""
1021                     }
1022                     { key sortify }
1023                   if$
1024                 }
1025                 { editor sort.format.names }
1026               if$
1027             }
1028             { author sort.format.names }
1029           if$
1030         }
1031     { year sortify }
1032   if$
1033 }
1034
1035 FUNCTION {year.author.organization.sort}
1036 { year empty$
1037         { author empty$
1038             { organization empty$
1039                 { key empty$
1040                     { "to sort, need year, author, organization, or key in " cite$ * warning$
1041                       ""
1042                     }
1043                     { key sortify }
1044                   if$
1045                 }
1046                 { "The " #4 organization chop.word sortify }
1047               if$
1048             }
1049             { author sort.format.names }
1050           if$
1051         }
1052         { year sortify }
1053         if$
1054 }
1055
1056 FUNCTION {year.editor.organization.sort}
1057 { year empty$
1058         { editor empty$
1059             { organization empty$
1060                 { key empty$
1061                     { "to sort, need year, editor, organization, or key in " cite$ * warning$
1062                       ""
1063                     }
1064                     { key sortify }
1065                   if$
1066                 }
1067                 { "The " #4 organization chop.word sortify }
1068               if$
1069             }
1070             { editor sort.format.names }
1071           if$
1072         }
1073     { year sortify }
1074   if$
1075 }
1076
1077 FUNCTION {presort}
1078 { type$ "book" =
1079   type$ "inbook" =
1080   or
1081     'year.author.editor.sort
1082     { type$ "proceedings" =
1083         'year.editor.organization.sort
1084         { type$ "manual" =
1085             'year.author.organization.sort
1086             'year.author.sort
1087           if$
1088         }
1089       if$
1090     }
1091   if$
1092   "    "
1093   *
1094   author field.or.null sort.format.names
1095   *
1096   "    "
1097   *
1098   editor field.or.null sort.format.names
1099   *
1100   "    "
1101   *
1102   title field.or.null
1103   sort.format.title
1104   *
1105   #1 entry.max$ substring$
1106   'sort.key$ :=
1107 }
1108
1109 ITERATE {presort}
1110
1111 SORT
1112
1113 STRINGS { longest.label }
1114
1115 INTEGERS { number.label longest.label.width }
1116
1117 FUNCTION {initialize.longest.label}
1118 { "" 'longest.label :=
1119   #1 'number.label :=
1120   #0 'longest.label.width :=
1121 }
1122
1123 FUNCTION {longest.label.pass}
1124 { number.label int.to.str$ 'label :=
1125   number.label #1 + 'number.label :=
1126   label width$ longest.label.width >
1127     { label 'longest.label :=
1128       label width$ 'longest.label.width :=
1129     }
1130     'skip$
1131   if$
1132 }
1133
1134 EXECUTE {initialize.longest.label}
1135
1136 ITERATE {longest.label.pass}
1137
1138 FUNCTION {begin.bib}
1139 { preamble$ empty$
1140     'skip$
1141     { preamble$ write$ newline$ }
1142   if$
1143   "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
1144 }
1145
1146 EXECUTE {begin.bib}
1147
1148 EXECUTE {init.state.consts}
1149
1150 ITERATE {call.type$}
1151
1152 FUNCTION {end.bib}
1153 { newline$
1154   "\end{thebibliography}" write$ newline$
1155 }
1156
1157 EXECUTE {end.bib}