source: trunk/MESOSCALE/MANUAL/SRC/these.bst @ 3461

Last change on this file since 3461 was 209, checked in by aslmd, 13 years ago

MESOSCALE: something went wrong with moving DOC previously because forgot to update before committing... all apologies. this is now fixed.

  • Property svn:executable set to *
File size: 21.7 KB
Line 
1%
2% Style de bibliographie pour the`se - d'apres alpha.bst
3%
4% Matthieu Herrb (matthieu@laas.fr) - Juillet 89, Octobre 90
5%
6%        Les references seront designees tant dans le texte que dans
7% la liste recapitulative (ordonnee suivant l'ordre alphabetique du nom
8% du premier auteur), par le nom du premier auteur suivi des deux
9% derniers chiffres de l'annee de publication, le tout entre crochets.
10% Si deux references du meme auteur se rapportent a la meme annee, elles
11% seront differenciees par des lettres minuscules (a, b, etc.)
12%
13 
14        % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
15        % Copyright (C) 1985, all rights reserved.
16        % Copying of this file is authorized only if either
17        % (1) you make absolutely no changes to your copy, including name, or
18        % (2) if you do make changes, you name it something other than
19        % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
20        % This restriction helps ensure that all standard styles are identical.
21 
22ENTRY
23  { address
24    author
25    booktitle
26    chapter
27    edition
28    editor
29    howpublished
30    institution
31    journal
32    key
33    month
34    note
35    number
36    organization
37    pages
38    publisher
39    school
40    series
41    title
42    type
43    volume
44    year
45  }
46  {}
47  { label extra.label sort.label }
48 
49INTEGERS { output.state before.all mid.sentence after.sentence after.block }
50 
51FUNCTION {init.state.consts}
52{ #0 'before.all :=
53  #1 'mid.sentence :=
54  #2 'after.sentence :=
55  #3 'after.block :=
56}
57 
58STRINGS { s t }
59 
60FUNCTION {output.nonnull}
61{ 's :=
62  output.state mid.sentence =
63    { ", " * write$ }
64    { output.state after.block =
65        { add.period$ write$
66          newline$
67          "\newblock " write$
68        }
69        { output.state before.all =
70            'write$
71            { add.period$ " " * write$ }
72          if$
73        }
74      if$
75      mid.sentence 'output.state :=
76    }
77  if$
78  s
79}
80 
81FUNCTION {output}
82{ duplicate$ empty$
83    'pop$
84    'output.nonnull
85  if$
86}
87 
88FUNCTION {output.check}
89{ 't :=
90  duplicate$ empty$
91    { pop$ "empty " t * " in " * cite$ * warning$ }
92    'output.nonnull
93  if$
94}
95 
96FUNCTION {output.bibitem}
97{ newline$
98  "\bibitem[" write$
99  label write$
100  "]{" write$
101  cite$ write$
102  "}" write$
103  newline$
104  ""
105  before.all 'output.state :=
106}
107 
108FUNCTION {fin.entry}
109{ add.period$
110  write$
111  newline$
112}
113 
114FUNCTION {new.block}
115{ output.state before.all =
116    'skip$
117    { after.block 'output.state := }
118  if$
119}
120 
121FUNCTION {new.sentence}
122{ output.state after.block =
123    'skip$
124    { output.state before.all =
125        'skip$
126        { after.sentence 'output.state := }
127      if$
128    }
129  if$
130}
131 
132FUNCTION {not}
133{   { #0 }
134    { #1 }
135  if$
136}
137 
138FUNCTION {and}
139{   'skip$
140    { pop$ #0 }
141  if$
142}
143 
144FUNCTION {or}
145{   { pop$ #1 }
146    'skip$
147  if$
148}
149 
150FUNCTION {new.block.checka}
151{ empty$
152    'skip$
153    'new.block
154  if$
155}
156 
157FUNCTION {new.block.checkb}
158{ empty$
159  swap$ empty$
160  and
161    'skip$
162    'new.block
163  if$
164}
165 
166FUNCTION {new.sentence.checka}
167{ empty$
168    'skip$
169    'new.sentence
170  if$
171}
172 
173FUNCTION {new.sentence.checkb}
174{ empty$
175  swap$ empty$
176  and
177    'skip$
178    'new.sentence
179  if$
180}
181 
182FUNCTION {field.or.null}
183{ duplicate$ empty$
184    { pop$ "" }
185    'skip$
186  if$
187}
188 
189FUNCTION {emphasize}
190{ duplicate$ empty$
191    { pop$ "" }
192    { "{\em " swap$ * "}" * }
193  if$
194}
195 
196FUNCTION {scapify}
197{ duplicate$ empty$
198    { pop$ "" }
199    { "{\sc " swap$ * "}" * }
200  if$
201}
202 
203FUNCTION {underline}
204{ duplicate$ empty$
205    { pop$ "" }
206    { "{\ul " swap$ * "}" * }
207  if$
208}
209 
210INTEGERS { nameptr namesleft numnames }
211 
212FUNCTION {format.names}
213{ 's :=
214  #1 'nameptr :=
215  s num.names$ 'numnames :=
216  numnames 'namesleft :=
217    { namesleft #0 > }
218    { s nameptr "{ff~}{vv~}{ll}{~jj}" format.name$ 't :=
219      nameptr #1 >
220        { namesleft #1 >
221            { ", " * t * }
222            { numnames #2 >
223                { "" * }
224                'skip$
225              if$
226              t "others" =
227                { " et~al." emphasize * }
228                { " \& " * t * }
229              if$
230            }
231          if$
232        }
233        't
234      if$
235      nameptr #1 + 'nameptr :=
236      namesleft #1 - 'namesleft :=
237    }
238  while$
239}
240 
241FUNCTION {format.authors}
242{ author empty$
243    { "" }
244    { author format.names }
245  if$
246}
247 
248FUNCTION {format.editors}
249{ editor empty$
250    { "" }
251    { editor format.names
252      editor num.names$ #1 >
253        { ", editeurs" * }
254        { ", editeur" * }
255      if$
256    }
257  if$
258}
259 
260FUNCTION {format.title}
261{ title empty$
262    { "" }
263    { title "t" change.case$ }
264  if$
265}
266 
267FUNCTION {n.dashify}
268{ 't :=
269  ""
270    { t empty$ not }
271    { t #1 #1 substring$ "-" =
272        { t #1 #2 substring$ "--" = not
273            { "--" *
274              t #2 global.max$ substring$ 't :=
275            }
276            {   { t #1 #1 substring$ "-" = }
277                { "-" *
278                  t #2 global.max$ substring$ 't :=
279                }
280              while$
281            }
282          if$
283        }
284        { t #1 #1 substring$ *
285          t #2 global.max$ substring$ 't :=
286        }
287      if$
288    }
289  while$
290}
291 
292FUNCTION {format.date}
293{ year empty$
294    { month empty$
295        { "" }
296        { "there's a month but no year in " cite$ * warning$
297          month
298        }
299      if$
300    }
301    { month empty$
302        'year
303        { month " " * year * }
304      if$
305    }
306  if$
307}
308 
309FUNCTION {format.btitle}
310{ title emphasize
311}
312 
313FUNCTION {format.utitle}
314{ title emphasize
315}
316 
317FUNCTION {tie.or.space.connect}
318{ duplicate$ text.length$ #3 <
319    { "~" }
320    { " " }
321  if$
322  swap$ * *
323}
324 
325FUNCTION {either.or.check}
326{ empty$
327    'pop$
328    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
329  if$
330}
331 
332FUNCTION {format.bvolume}
333{ volume empty$
334    { "" }
335    { "volume" volume tie.or.space.connect
336      series empty$
337        'skip$
338        { " of " * series emphasize * }
339      if$
340      "volume and number" number either.or.check
341    }
342  if$
343}
344 
345FUNCTION {format.number.series}
346{ volume empty$
347    { number empty$
348        { series field.or.null }
349        { output.state mid.sentence =
350            { "num\'ero" }
351            { "Nume\'ero" }
352          if$
353          number tie.or.space.connect
354          series empty$
355            { "there's a number but no series in " cite$ * warning$ }
356            { " in " * series * }
357          if$
358        }
359      if$
360    }
361    { "" }
362  if$
363}
364 
365FUNCTION {format.edition}
366{ edition empty$
367    { "" }
368    { output.state mid.sentence =
369        { edition "l" change.case$ " edition" * }
370        { edition "t" change.case$ " edition" * }
371      if$
372    }
373  if$
374}
375 
376INTEGERS { multiresult }
377 
378FUNCTION {multi.page.check}
379{ 't :=
380  #0 'multiresult :=
381    { multiresult not
382      t empty$ not
383      and
384    }
385    { t #1 #1 substring$
386      duplicate$ "-" =
387      swap$ duplicate$ "," =
388      swap$ "+" =
389      or or
390        { #1 'multiresult := }
391        { t #2 global.max$ substring$ 't := }
392      if$
393    }
394  while$
395  multiresult
396}
397 
398FUNCTION {format.pages}
399{ pages empty$
400    { "" }
401    { pages multi.page.check
402        { "pages" pages n.dashify tie.or.space.connect }
403        { "page" pages tie.or.space.connect }
404      if$
405    }
406  if$
407}
408 
409 
410FUNCTION {format.volume}
411{ volume empty$
412    { "" }
413    { "vol.~" volume * }
414  if$
415}
416 
417FUNCTION {format.number}
418{ number empty$
419    { "" }
420    { "no.~" number * }
421  if$
422}
423 
424FUNCTION {format.chapter.pages}
425{ chapter empty$
426    'format.pages
427    { type empty$
428        { "chapitre" }
429        { type "l" change.case$ }
430      if$
431      chapter tie.or.space.connect
432      pages empty$
433        'skip$
434        { ", " * format.pages * }
435      if$
436    }
437  if$
438}
439 
440FUNCTION {format.in.ed.booktitle}
441{ booktitle empty$
442    { "" }
443    { editor empty$
444        { "In " booktitle * }
445        { "In " format.editors * ", " * booktitle * }
446      if$
447    }
448  if$
449}
450 
451FUNCTION {empty.misc.check}
452{ author empty$ title empty$ howpublished empty$
453  month empty$ year empty$ note empty$
454  and and and and and
455  key empty$ not and
456    { "all relevant fields are empty in " cite$ * warning$ }
457    'skip$
458  if$
459}
460 
461FUNCTION {format.thesis.type}
462{ type empty$
463    'skip$
464    { pop$
465      type "t" change.case$
466    }
467  if$
468}
469 
470FUNCTION {format.tr.number}
471{ type empty$
472    { "Rapport technique" }
473    'type
474  if$
475  number empty$
476    { "t" change.case$ }
477    { number tie.or.space.connect }
478  if$
479}
480 
481FUNCTION {format.article.crossref}
482{ key empty$
483    { journal empty$
484        { "need key or journal for " cite$ * " to crossref " * crossref *
485          warning$
486          ""
487        }
488        { "In {\em " journal * "\/}" * }
489      if$
490    }
491    { "In " key * }
492  if$
493  " \cite{" * crossref * "}" *
494}
495 
496FUNCTION {format.crossref.editor}
497{ editor #1 "{vv~}{ll}" format.name$
498  editor num.names$ duplicate$
499  #2 >
500    { pop$ " et~al." * }
501    { #2 <
502        'skip$
503        { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
504            { " et~al." * }
505            { " \& " * editor #2 "{vv~}{ll}" format.name$ * }
506          if$
507        }
508      if$
509    }
510  if$
511}
512 
513FUNCTION {format.book.crossref}
514{ volume empty$
515    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
516      "In "
517    }
518    { "Volume" volume tie.or.space.connect
519      " of " *
520    }
521  if$
522  editor empty$
523  editor field.or.null author field.or.null =
524  or
525    { key empty$
526        { series empty$
527            { "need editor, key, or series for " cite$ * " to crossref " *
528              crossref * warning$
529              "" *
530            }
531            { "{\em " * series * "\/}" * }
532          if$
533        }
534        { key * }
535      if$
536    }
537    { format.crossref.editor * }
538  if$
539  " \cite{" * crossref * "}" *
540}
541 
542FUNCTION {format.incoll.inproc.crossref}
543{ editor empty$
544  editor field.or.null author field.or.null =
545  or
546    { booktitle empty$
547        { key empty$
548            { "need editor, key, or booktitle for " cite$ * " to crossref " *
549              crossref * warning$
550              ""
551            }
552            { "In " key * }
553          if$
554        }
555        { "In " booktitle * }
556      if$
557    }
558    { "In " format.crossref.editor * }
559  if$
560  " \cite{" * crossref * "}" *
561}
562 
563FUNCTION {article}
564{ output.bibitem
565  format.authors "author" output.check
566  new.block
567  format.utitle "title" output.check
568  new.block
569  crossref missing$
570    { journal "journal" output.check
571      format.volume output
572      format.number output
573      format.pages output
574      format.date "year" output.check
575    }
576    { format.article.crossref output.nonnull
577      format.pages output
578    }
579  if$
580  new.block
581  note output
582  fin.entry
583}
584 
585FUNCTION {book}
586{ output.bibitem
587  author empty$
588    { format.editors "author and editor" output.check }
589    { format.authors output.nonnull
590      crossref missing$
591        { "author and editor" editor either.or.check }
592        'skip$
593      if$
594    }
595  if$
596  new.block
597  format.title "title" output.check
598  crossref missing$
599    { format.bvolume output
600      new.block
601      format.number.series output
602      new.sentence
603      publisher "publisher" output.check
604      address output
605    }
606    { new.block
607      format.book.crossref output.nonnull
608    }
609  if$
610  format.edition output
611  format.date "year" output.check
612  new.block
613  note output
614  fin.entry
615}
616 
617FUNCTION {booklet}
618{ output.bibitem
619  format.authors output
620  new.block
621  format.title "title" output.check
622  howpublished address new.block.checkb
623  howpublished output
624  address output
625  format.date output
626  new.block
627  note output
628  fin.entry
629}
630 
631FUNCTION {inbook}
632{ output.bibitem
633  author empty$
634    { format.editors "author and editor" output.check }
635    { format.authors output.nonnull
636      crossref missing$
637        { "author and editor" editor either.or.check }
638        'skip$
639      if$
640    }
641  if$
642  new.block
643  format.title "title" output.check
644  crossref missing$
645    { format.bvolume output
646      format.chapter.pages "chapter and pages" output.check
647      new.block
648      format.number.series output
649      new.sentence
650      publisher "publisher" output.check
651      address output
652    }
653    { format.chapter.pages "chapter and pages" output.check
654      new.block
655      format.book.crossref output.nonnull
656    }
657  if$
658  format.edition output
659  format.date "year" output.check
660  new.block
661  note output
662  fin.entry
663}
664 
665FUNCTION {incollection}
666{ output.bibitem
667  format.authors "author" output.check
668  new.block
669  format.utitle "title" output.check
670  new.block
671  crossref missing$
672    { format.in.ed.booktitle "booktitle" output.check
673      format.bvolume output
674      format.number.series output
675      format.chapter.pages output
676      new.sentence
677      publisher "publisher" output.check
678      address output
679      format.edition output
680      format.date "year" output.check
681    }
682    { format.incoll.inproc.crossref output.nonnull
683      format.chapter.pages output
684    }
685  if$
686  new.block
687  note output
688  fin.entry
689}
690 
691FUNCTION {inproceedings}
692{ output.bibitem
693  format.authors "author" output.check
694  new.block
695  format.utitle "title" output.check
696  new.block
697  crossref missing$
698    { format.in.ed.booktitle "booktitle" output.check
699      format.bvolume output
700      format.number.series output
701      format.pages output
702      address empty$
703        { organization publisher new.sentence.checkb
704          organization output
705          publisher output
706          format.date "year" output.check
707        }
708        { address output.nonnull
709          format.date "year" output.check
710          new.sentence
711          organization output
712          publisher output
713        }
714      if$
715    }
716    { format.incoll.inproc.crossref output.nonnull
717      format.pages output
718    }
719  if$
720  new.block
721  note output
722  fin.entry
723}
724 
725FUNCTION {conference} { inproceedings }
726 
727FUNCTION {manual}
728{ output.bibitem
729  author empty$
730    { organization empty$
731        'skip$
732        { organization output.nonnull
733          address output
734        }
735      if$
736    }
737    { format.authors output.nonnull }
738  if$
739  new.block
740  format.utitle "title" output.check
741  author empty$
742    { organization empty$
743        { address new.block.checka
744          address output
745        }
746        'skip$
747      if$
748    }
749    { organization address new.block.checkb
750      organization output
751      address output
752    }
753  if$
754  format.edition output
755  format.date output
756  new.block
757  note output
758  fin.entry
759}
760 
761FUNCTION {mastersthesis}
762{ output.bibitem
763  format.authors "author" output.check
764  new.block
765  format.title "title" output.check
766  new.block
767  "Master's thesis" format.thesis.type output.nonnull
768  school "school" output.check
769  address output
770  format.date "year" output.check
771  new.block
772  note output
773  fin.entry
774}
775 
776FUNCTION {misc}
777{ output.bibitem
778  format.authors output
779  title howpublished new.block.checkb
780  format.utitle output
781  howpublished new.block.checka
782  howpublished output
783  format.date output
784  new.block
785  note output
786  fin.entry
787  empty.misc.check
788}
789 
790FUNCTION {phdthesis}
791{ output.bibitem
792  format.authors "author" output.check
793  new.block
794  format.btitle "title" output.check
795  new.block
796  "PhD thesis" format.thesis.type output.nonnull
797  school "school" output.check
798  address output
799  format.date "year" output.check
800  new.block
801  note output
802  fin.entry
803}
804 
805FUNCTION {proceedings}
806{ output.bibitem
807  editor empty$
808    { organization output }
809    { format.editors output.nonnull }
810  if$
811  new.block
812  format.title "title" output.check
813  format.bvolume output
814  format.number.series output
815  address empty$
816    { editor empty$
817        { publisher new.sentence.checka }
818        { organization publisher new.sentence.checkb
819          organization output
820        }
821      if$
822      publisher output
823      format.date "year" output.check
824    }
825    { address output.nonnull
826      format.date "year" output.check
827      new.sentence
828      editor empty$
829        'skip$
830        { organization output }
831      if$
832      publisher output
833    }
834  if$
835  new.block
836  note output
837  fin.entry
838}
839 
840FUNCTION {techreport}
841{ output.bibitem
842  format.authors "author" output.check
843  new.block
844  format.utitle "title" output.check
845  new.block
846  format.tr.number output.nonnull
847  institution "institution" output.check
848  address output
849  format.date "year" output.check
850  new.block
851  note output
852  fin.entry
853}
854 
855FUNCTION {unpublished}
856{ output.bibitem
857  format.authors "author" output.check
858  new.block
859  format.title "title" output.check
860  new.block
861  note "note" output.check
862  format.date output
863  fin.entry
864}
865 
866FUNCTION {default.type} { misc }
867 
868MACRO {jan} {"January"}
869 
870MACRO {feb} {"February"}
871 
872MACRO {mar} {"March"}
873 
874MACRO {apr} {"April"}
875 
876MACRO {may} {"May"}
877 
878MACRO {jun} {"June"}
879 
880MACRO {jul} {"July"}
881 
882MACRO {aug} {"August"}
883 
884MACRO {sep} {"September"}
885 
886MACRO {oct} {"October"}
887 
888MACRO {nov} {"November"}
889 
890MACRO {dec} {"December"}
891 
892MACRO {acmcs} {"ACM Computing Surveys"}
893 
894MACRO {acta} {"Acta Informatica"}
895 
896MACRO {cacm} {"Communications of the ACM"}
897 
898MACRO {ibmjrd} {"IBM Journal of Research and Development"}
899 
900MACRO {ibmsj} {"IBM Systems Journal"}
901 
902MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
903 
904MACRO {ieeetc} {"IEEE Transactions on Computers"}
905 
906MACRO {ieeetcad}
907 {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
908 
909MACRO {ipl} {"Information Processing Letters"}
910 
911MACRO {jacm} {"Journal of the ACM"}
912 
913MACRO {jcss} {"Journal of Computer and System Sciences"}
914 
915MACRO {scp} {"Science of Computer Programming"}
916 
917MACRO {sicomp} {"SIAM Journal on Computing"}
918 
919MACRO {tocs} {"ACM Transactions on Computer Systems"}
920 
921MACRO {tods} {"ACM Transactions on Database Systems"}
922 
923MACRO {tog} {"ACM Transactions on Graphics"}
924 
925MACRO {toms} {"ACM Transactions on Mathematical Software"}
926 
927MACRO {toois} {"ACM Transactions on Office Information Systems"}
928 
929MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
930 
931MACRO {tcs} {"Theoretical Computer Science"}
932 
933READ
934 
935FUNCTION {sortify}
936{ purify$
937  "l" change.case$
938}
939 
940INTEGERS { len }
941 
942FUNCTION {chop.word}
943{ 's :=
944  'len :=
945  s #1 len substring$ =
946    { s len #1 + global.max$ substring$ }
947    's
948  if$
949}
950 
951INTEGERS { et.al.char.used }
952 
953FUNCTION {initialize.et.al.char.used}
954{ #0 'et.al.char.used :=
955}
956 
957EXECUTE {initialize.et.al.char.used}
958 
959%
960% Cette function produit le label avec le nom du premier auteur
961%
962FUNCTION {format.lab.names}
963{ 's :=
964  s #1 "{vv }{ll}" format.name$
965}
966 
967FUNCTION {author.key.label}
968{ author empty$
969    { key empty$
970        { cite$ #1 #3 substring$ }
971        { key #3 }
972      if$
973    }
974    { author format.lab.names }
975  if$
976}
977 
978FUNCTION {author.editor.key.label}
979{ author empty$
980    { editor empty$
981        { key empty$
982            { cite$ #1 #3 substring$ }
983            { key }
984          if$
985        }
986        { editor format.lab.names }
987      if$
988    }
989    { author format.lab.names }
990  if$
991}
992 
993FUNCTION {author.key.organization.label}
994{ author empty$
995    { key empty$
996        { organization empty$
997            { cite$ #1 #3 substring$ }
998            { "The " #4 organization chop.word #3 text.prefix$ }
999          if$
1000        }
1001        { key }
1002      if$
1003    }
1004    { author format.lab.names }
1005  if$
1006}
1007 
1008FUNCTION {editor.key.organization.label}
1009{ editor empty$
1010    { key empty$
1011        { organization empty$
1012            { cite$ #1 #3 substring$ }
1013            { "The " #4 organization chop.word #3 text.prefix$ }
1014          if$
1015        }
1016        { key }
1017      if$
1018    }
1019    { editor format.lab.names }
1020  if$
1021}
1022 
1023%
1024% Fonction modifiee pour generer les bons labels
1025FUNCTION {calc.label}
1026{ type$ "book" =
1027  type$ "inbook" =
1028  or
1029    'author.editor.key.label
1030    { type$ "proceedings" =
1031        'editor.key.organization.label
1032        { type$ "manual" =
1033            'author.key.organization.label
1034            'author.key.label
1035          if$
1036        }
1037      if$
1038    }
1039  if$
1040  duplicate$
1041  "~" *
1042  year #-1 #2 substring$ field.or.null purify$ *
1043  'label :=
1044  year #-1 #4 substring$ field.or.null purify$
1045  *
1046  sortify 'sort.label :=
1047}
1048 
1049FUNCTION {sort.format.names}
1050{ 's :=
1051  #1 'nameptr :=
1052  ""
1053  s num.names$ 'numnames :=
1054  numnames 'namesleft :=
1055    { namesleft #0 > }
1056    { nameptr #1 >
1057        { "   " * }
1058        'skip$
1059      if$
1060      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
1061      nameptr numnames = t "others" = and
1062        { "et al" * }
1063        { t sortify * }
1064      if$
1065      nameptr #1 + 'nameptr :=
1066      namesleft #1 - 'namesleft :=
1067    }
1068  while$
1069}
1070 
1071FUNCTION {sort.format.title}
1072{ 't :=
1073  "A " #2
1074    "An " #3
1075      "The " #4 t chop.word
1076    chop.word
1077  chop.word
1078  sortify
1079  #1 global.max$ substring$
1080}
1081 
1082FUNCTION {author.sort}
1083{ author empty$
1084    { key empty$
1085        { "to sort, need author or key in " cite$ * warning$
1086          ""
1087        }
1088        { key sortify }
1089      if$
1090    }
1091    { author sort.format.names }
1092  if$
1093}
1094 
1095FUNCTION {author.editor.sort}
1096{ author empty$
1097    { editor empty$
1098        { key empty$
1099            { "to sort, need author, editor, or key in " cite$ * warning$
1100              ""
1101            }
1102            { key sortify }
1103          if$
1104        }
1105        { editor sort.format.names }
1106      if$
1107    }
1108    { author sort.format.names }
1109  if$
1110}
1111 
1112FUNCTION {author.organization.sort}
1113{ author empty$
1114    { organization empty$
1115        { key empty$
1116            { "to sort, need author, organization, or key in " cite$ * warning$
1117              ""
1118            }
1119            { key sortify }
1120          if$
1121        }
1122        { "The " #4 organization chop.word sortify }
1123      if$
1124    }
1125    { author sort.format.names }
1126  if$
1127}
1128 
1129FUNCTION {editor.organization.sort}
1130{ editor empty$
1131    { organization empty$
1132        { key empty$
1133            { "to sort, need editor, organization, or key in " cite$ * warning$
1134              ""
1135            }
1136            { key sortify }
1137          if$
1138        }
1139        { "The " #4 organization chop.word sortify }
1140      if$
1141    }
1142    { editor sort.format.names }
1143  if$
1144}
1145 
1146FUNCTION {presort}
1147{ calc.label
1148  sort.label
1149  "    "
1150  *
1151  type$ "book" =
1152  type$ "inbook" =
1153  or
1154    'author.editor.sort
1155    { type$ "proceedings" =
1156        'editor.organization.sort
1157        { type$ "manual" =
1158            'author.organization.sort
1159            'author.sort
1160          if$
1161        }
1162      if$
1163    }
1164  if$
1165  *
1166  "    "
1167  *
1168  year field.or.null sortify
1169  *
1170  "    "
1171  *
1172  title field.or.null
1173  sort.format.title
1174  *
1175  #1 entry.max$ substring$
1176  'sort.key$ :=
1177}
1178 
1179ITERATE {presort}
1180 
1181SORT
1182 
1183STRINGS { longest.label last.sort.label next.extra }
1184 
1185INTEGERS { longest.label.width last.extra.num }
1186 
1187FUNCTION {initialize.longest.label}
1188{ "" 'longest.label :=
1189  #0 int.to.chr$ 'last.sort.label :=
1190  "" 'next.extra :=
1191  #0 'longest.label.width :=
1192  #0 'last.extra.num :=
1193}
1194 
1195FUNCTION {forward.pass}
1196{ last.sort.label sort.label =
1197    { last.extra.num #1 + 'last.extra.num :=
1198      last.extra.num int.to.chr$ 'extra.label :=
1199    }
1200    { "a" chr.to.int$ 'last.extra.num :=
1201      "" 'extra.label :=
1202      sort.label 'last.sort.label :=
1203    }
1204  if$
1205}
1206 
1207FUNCTION {reverse.pass}
1208{ next.extra "b" =
1209    { "a" 'extra.label := }
1210    'skip$
1211  if$
1212  label extra.label * 'label :=
1213  label width$ longest.label.width >
1214    { label 'longest.label :=
1215      label width$ 'longest.label.width :=
1216    }
1217    'skip$
1218  if$
1219  extra.label 'next.extra :=
1220}
1221 
1222EXECUTE {initialize.longest.label}
1223 
1224ITERATE {forward.pass}
1225 
1226REVERSE {reverse.pass}
1227 
1228FUNCTION {begin.bib}
1229{ et.al.char.used
1230    { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
1231    'skip$
1232  if$
1233  preamble$ empty$
1234    'skip$
1235    { preamble$ write$ newline$ }
1236  if$
1237  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
1238%  "\begin{thebibliography}{xxxxx}" write$ newline$
1239}
1240 
1241EXECUTE {begin.bib}
1242 
1243EXECUTE {init.state.consts}
1244 
1245ITERATE {call.type$}
1246 
1247FUNCTION {end.bib}
1248{ newline$
1249  "\end{thebibliography}" write$ newline$
1250}
1251 
1252EXECUTE {end.bib}
Note: See TracBrowser for help on using the repository browser.