1 % ---------------------------------------------------------------
3 % by Paolo.Ienne@di.epfl.ch
5 % ---------------------------------------------------------------
7 % no guarantee is given that the format corresponds perfectly to
8 % IEEE 8.5" x 11" Proceedings, but most features should be ok.
10 % ---------------------------------------------------------------
12 % `ieee' from BibTeX standard bibliography style `abbrv'
13 % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
14 % Copyright (C) 1985, all rights reserved.
15 % Copying of this file is authorized only if either
16 % (1) you make absolutely no changes to your copy, including name, or
17 % (2) if you do make changes, you name it something other than
18 % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
19 % This restriction helps ensure that all standard styles are identical.
20 % The file btxbst.doc has the documentation for this style.
49 INTEGERS { output.state before.all mid.sentence after.sentence after.block }
51 FUNCTION {init.state.consts}
60 FUNCTION {output.nonnull}
62 output.state mid.sentence =
64 { output.state after.block =
69 { output.state before.all =
71 { add.period$ " " * write$ }
75 mid.sentence 'output.state :=
88 FUNCTION {output.check}
91 { pop$ "empty " t * " in " * cite$ * warning$ }
96 FUNCTION {output.bibitem}
103 before.all 'output.state :=
113 { output.state before.all =
115 { after.block 'output.state := }
119 FUNCTION {new.sentence}
120 { output.state after.block =
122 { output.state before.all =
124 { after.sentence 'output.state := }
148 FUNCTION {new.block.checka}
155 FUNCTION {new.block.checkb}
164 FUNCTION {new.sentence.checka}
171 FUNCTION {new.sentence.checkb}
180 FUNCTION {field.or.null}
190 { "{\em " swap$ * "}" * }
194 INTEGERS { nameptr namesleft numnames }
196 FUNCTION {format.names}
199 s num.names$ 'numnames :=
200 numnames 'namesleft :=
202 { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
219 nameptr #1 + 'nameptr :=
220 namesleft #1 - 'namesleft :=
225 FUNCTION {format.authors}
228 { author format.names }
232 FUNCTION {format.editors}
235 { editor format.names
236 editor num.names$ #1 >
244 FUNCTION {format.title}
247 { title "t" change.case$ }
255 { t #1 #1 substring$ "-" =
256 { t #1 #2 substring$ "--" = not
258 t #2 global.max$ substring$ 't :=
260 { { t #1 #1 substring$ "-" = }
262 t #2 global.max$ substring$ 't :=
268 { t #1 #1 substring$ *
269 t #2 global.max$ substring$ 't :=
276 FUNCTION {format.date}
280 { "there's a month but no year in " cite$ * warning$
287 { month " " * year * }
293 FUNCTION {format.btitle}
297 FUNCTION {tie.or.space.connect}
298 { duplicate$ text.length$ #3 <
305 FUNCTION {either.or.check}
308 { "can't use both " swap$ * " fields in " * cite$ * warning$ }
312 FUNCTION {format.bvolume}
315 { "volume" volume tie.or.space.connect
318 { " of " * series emphasize * }
320 "volume and number" number either.or.check
325 FUNCTION {format.number.series}
328 { series field.or.null }
329 { output.state mid.sentence =
333 number tie.or.space.connect
335 { "there's a number but no series in " cite$ * warning$ }
336 { " in " * series * }
345 FUNCTION {format.edition}
348 { output.state mid.sentence =
349 { edition "l" change.case$ " edition" * }
350 { edition "t" change.case$ " edition" * }
356 INTEGERS { multiresult }
358 FUNCTION {multi.page.check}
367 swap$ duplicate$ "," =
370 { #1 'multiresult := }
371 { t #2 global.max$ substring$ 't := }
378 FUNCTION {format.pages}
381 { pages multi.page.check
382 { "pages" pages n.dashify tie.or.space.connect }
383 { "page" pages tie.or.space.connect }
389 FUNCTION {format.vol.num.pages}
390 { volume field.or.null
393 { "(" number * ")" * *
395 { "there's a number but no volume in " cite$ * warning$ }
403 { pop$ format.pages }
404 { ":" * pages n.dashify * }
410 FUNCTION {format.chapter.pages}
415 { type "l" change.case$ }
417 chapter tie.or.space.connect
420 { ", " * format.pages * }
426 FUNCTION {format.in.ed.booktitle}
430 { "In " booktitle emphasize * }
431 { "In " format.editors * ", " * booktitle emphasize * }
437 FUNCTION {empty.misc.check}
438 { author empty$ title empty$ howpublished empty$
439 month empty$ year empty$ note empty$
442 { "all relevant fields are empty in " cite$ * warning$ }
447 FUNCTION {format.thesis.type}
451 type "t" change.case$
456 FUNCTION {format.tr.number}
458 { "Technical Report" }
463 { number tie.or.space.connect }
467 FUNCTION {format.article.crossref}
470 { "need key or journal for " cite$ * " to crossref " * crossref *
474 { "In {\em " journal * "\/}" * }
479 " \cite{" * crossref * "}" *
482 FUNCTION {format.crossref.editor}
483 { editor #1 "{vv~}{ll}" format.name$
484 editor num.names$ duplicate$
489 { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
491 { " and " * editor #2 "{vv~}{ll}" format.name$ * }
499 FUNCTION {format.book.crossref}
501 { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
504 { "Volume" volume tie.or.space.connect
509 editor field.or.null author field.or.null =
513 { "need editor, key, or series for " cite$ * " to crossref " *
517 { "{\em " * series * "\/}" * }
523 { format.crossref.editor * }
525 " \cite{" * crossref * "}" *
528 FUNCTION {format.incoll.inproc.crossref}
530 editor field.or.null author field.or.null =
534 { "need editor, key, or booktitle for " cite$ * " to crossref " *
538 { "In {\em " booktitle * "\/}" * }
544 { "In " format.crossref.editor * }
546 " \cite{" * crossref * "}" *
551 format.authors "author" output.check
553 format.title "title" output.check
556 { journal emphasize "journal" output.check
557 format.vol.num.pages output
558 format.date "year" output.check
560 { format.article.crossref output.nonnull
572 { format.editors "author and editor" output.check }
573 { format.authors output.nonnull
575 { "author and editor" editor either.or.check }
581 format.btitle "title" output.check
583 { format.bvolume output
585 format.number.series output
587 publisher "publisher" output.check
591 format.book.crossref output.nonnull
594 format.edition output
595 format.date "year" output.check
603 format.authors output
605 format.title "title" output.check
606 howpublished address new.block.checkb
618 { format.editors "author and editor" output.check }
619 { format.authors output.nonnull
621 { "author and editor" editor either.or.check }
627 format.btitle "title" output.check
629 { format.bvolume output
630 format.chapter.pages "chapter and pages" output.check
632 format.number.series output
634 publisher "publisher" output.check
637 { format.chapter.pages "chapter and pages" output.check
639 format.book.crossref output.nonnull
642 format.edition output
643 format.date "year" output.check
649 FUNCTION {incollection}
651 format.authors "author" output.check
653 format.title "title" output.check
656 { format.in.ed.booktitle "booktitle" output.check
657 format.bvolume output
658 format.number.series output
659 format.chapter.pages output
661 publisher "publisher" output.check
663 format.edition output
664 format.date "year" output.check
666 { format.incoll.inproc.crossref output.nonnull
667 format.chapter.pages output
675 FUNCTION {inproceedings}
677 format.authors "author" output.check
679 format.title "title" output.check
682 { format.in.ed.booktitle "booktitle" output.check
683 format.bvolume output
684 format.number.series output
687 { organization publisher new.sentence.checkb
690 format.date "year" output.check
692 { address output.nonnull
693 format.date "year" output.check
700 { format.incoll.inproc.crossref output.nonnull
709 FUNCTION {conference} { inproceedings }
714 { organization empty$
716 { organization output.nonnull
721 { format.authors output.nonnull }
724 format.btitle "title" output.check
726 { organization empty$
727 { address new.block.checka
733 { organization address new.block.checkb
738 format.edition output
745 FUNCTION {mastersthesis}
747 format.authors "author" output.check
749 format.title "title" output.check
751 "Master's thesis" format.thesis.type output.nonnull
752 school "school" output.check
754 format.date "year" output.check
762 format.authors output
763 title howpublished new.block.checkb
765 howpublished new.block.checka
776 format.authors "author" output.check
778 format.btitle "title" output.check
780 "PhD thesis" format.thesis.type output.nonnull
781 school "school" output.check
783 format.date "year" output.check
789 FUNCTION {proceedings}
792 { organization output }
793 { format.editors output.nonnull }
796 format.btitle "title" output.check
797 format.bvolume output
798 format.number.series output
801 { publisher new.sentence.checka }
802 { organization publisher new.sentence.checkb
807 format.date "year" output.check
809 { address output.nonnull
810 format.date "year" output.check
814 { organization output }
824 FUNCTION {techreport}
826 format.authors "author" output.check
828 format.title "title" output.check
830 format.tr.number output.nonnull
831 institution "institution" output.check
833 format.date "year" output.check
839 FUNCTION {unpublished}
841 format.authors "author" output.check
843 format.title "title" output.check
845 note "note" output.check
850 FUNCTION {default.type} { misc }
868 MACRO {sep} {"Sept."}
876 MACRO {acmcs} {"ACM Comput. Surv."}
878 MACRO {acta} {"Acta Inf."}
880 MACRO {cacm} {"Commun. ACM"}
882 MACRO {ibmjrd} {"IBM J. Res. Dev."}
884 MACRO {ibmsj} {"IBM Syst.~J."}
886 MACRO {ieeese} {"IEEE Trans. Softw. Eng."}
888 MACRO {ieeetc} {"IEEE Trans. Comput."}
891 {"IEEE Trans. Comput.-Aided Design Integrated Circuits"}
893 MACRO {ipl} {"Inf. Process. Lett."}
895 MACRO {jacm} {"J.~ACM"}
897 MACRO {jcss} {"J.~Comput. Syst. Sci."}
899 MACRO {scp} {"Sci. Comput. Programming"}
901 MACRO {sicomp} {"SIAM J. Comput."}
903 MACRO {tocs} {"ACM Trans. Comput. Syst."}
905 MACRO {tods} {"ACM Trans. Database Syst."}
907 MACRO {tog} {"ACM Trans. Gr."}
909 MACRO {toms} {"ACM Trans. Math. Softw."}
911 MACRO {toois} {"ACM Trans. Office Inf. Syst."}
913 MACRO {toplas} {"ACM Trans. Prog. Lang. Syst."}
915 MACRO {tcs} {"Theoretical Comput. Sci."}
929 s #1 len substring$ =
930 { s len #1 + global.max$ substring$ }
935 FUNCTION {sort.format.names}
939 s num.names$ 'numnames :=
940 numnames 'namesleft :=
946 s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't :=
947 nameptr numnames = t "others" = and
951 nameptr #1 + 'nameptr :=
952 namesleft #1 - 'namesleft :=
957 FUNCTION {sort.format.title}
961 "The " #4 t chop.word
965 #1 global.max$ substring$
968 FUNCTION {author.sort}
971 { "to sort, need author or key in " cite$ * warning$
977 { author sort.format.names }
981 FUNCTION {author.editor.sort}
985 { "to sort, need author, editor, or key in " cite$ * warning$
991 { editor sort.format.names }
994 { author sort.format.names }
998 FUNCTION {author.organization.sort}
1000 { organization empty$
1002 { "to sort, need author, organization, or key in " cite$ * warning$
1008 { "The " #4 organization chop.word sortify }
1011 { author sort.format.names }
1015 FUNCTION {editor.organization.sort}
1017 { organization empty$
1019 { "to sort, need editor, organization, or key in " cite$ * warning$
1025 { "The " #4 organization chop.word sortify }
1028 { editor sort.format.names }
1037 { type$ "proceedings" =
1038 'editor.organization.sort
1040 'author.organization.sort
1049 year field.or.null sortify
1056 #1 entry.max$ substring$
1064 STRINGS { longest.label }
1066 INTEGERS { number.label longest.label.width }
1068 FUNCTION {initialize.longest.label}
1069 { "" 'longest.label :=
1071 #0 'longest.label.width :=
1074 FUNCTION {longest.label.pass}
1075 { number.label int.to.str$ 'label :=
1076 number.label #1 + 'number.label :=
1077 label width$ longest.label.width >
1078 { label 'longest.label :=
1079 label width$ 'longest.label.width :=
1085 EXECUTE {initialize.longest.label}
1087 ITERATE {longest.label.pass}
1089 FUNCTION {begin.bib}
1092 { preamble$ write$ newline$ }
1094 "\begin{thebibliography}{" longest.label *
1095 "}\setlength{\itemsep}{-1ex}\small" * write$ newline$
1100 EXECUTE {init.state.consts}
1102 ITERATE {call.type$}
1106 "\end{thebibliography}" write$ newline$
1111 % end of file ieee.bst
1112 % ---------------------------------------------------------------