2 % ---------------------------------------------------------------
6 % by Paolo.Ienne@di.epfl.ch
9 % ---------------------------------------------------------------
11 % no guarantee is given that the format corresponds perfectly to
12 % IEEE 8.5" x 11" Proceedings, but most features should be ok.
14 % ---------------------------------------------------------------
16 % `latex8' from BibTeX standard bibliography style `abbrv'
17 % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
18 % Copyright (C) 1985, all rights reserved.
19 % Copying of this file is authorized only if either
20 % (1) you make absolutely no changes to your copy, including name, or
21 % (2) if you do make changes, you name it something other than
22 % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
23 % This restriction helps ensure that all standard styles are identical.
24 % The file btxbst.doc has the documentation for this style.
53 INTEGERS { output.state before.all mid.sentence after.sentence after.block }
55 FUNCTION {init.state.consts}
64 FUNCTION {output.nonnull}
66 output.state mid.sentence =
68 { output.state after.block =
73 { output.state before.all =
75 { add.period$ " " * write$ }
79 mid.sentence 'output.state :=
92 FUNCTION {output.check}
95 { pop$ "empty " t * " in " * cite$ * warning$ }
100 FUNCTION {output.bibitem}
107 before.all 'output.state :=
117 { output.state before.all =
119 { after.block 'output.state := }
123 FUNCTION {new.sentence}
124 { output.state after.block =
126 { output.state before.all =
128 { after.sentence 'output.state := }
152 FUNCTION {new.block.checka}
159 FUNCTION {new.block.checkb}
168 FUNCTION {new.sentence.checka}
175 FUNCTION {new.sentence.checkb}
184 FUNCTION {field.or.null}
194 { "{\em " swap$ * "}" * }
198 INTEGERS { nameptr namesleft numnames }
200 FUNCTION {format.names}
203 s num.names$ 'numnames :=
204 numnames 'namesleft :=
206 { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
223 nameptr #1 + 'nameptr :=
225 namesleft #1 - 'namesleft :=
230 FUNCTION {format.authors}
233 { author format.names }
237 FUNCTION {format.editors}
240 { editor format.names
241 editor num.names$ #1 >
249 FUNCTION {format.title}
252 { title "t" change.case$ }
260 { t #1 #1 substring$ "-" =
261 { t #1 #2 substring$ "--" = not
263 t #2 global.max$ substring$ 't :=
265 { { t #1 #1 substring$ "-" = }
267 t #2 global.max$ substring$ 't :=
273 { t #1 #1 substring$ *
274 t #2 global.max$ substring$ 't :=
281 FUNCTION {format.date}
285 { "there's a month but no year in " cite$ * warning$
292 { month " " * year * }
298 FUNCTION {format.btitle}
302 FUNCTION {tie.or.space.connect}
303 { duplicate$ text.length$ #3 <
310 FUNCTION {either.or.check}
313 { "can't use both " swap$ * " fields in " * cite$ * warning$ }
317 FUNCTION {format.bvolume}
320 { "volume" volume tie.or.space.connect
323 { " of " * series emphasize * }
325 "volume and number" number either.or.check
330 FUNCTION {format.number.series}
333 { series field.or.null }
334 { output.state mid.sentence =
338 number tie.or.space.connect
340 { "there's a number but no series in " cite$ * warning$ }
341 { " in " * series * }
350 FUNCTION {format.edition}
353 { output.state mid.sentence =
354 { edition "l" change.case$ " edition" * }
355 { edition "t" change.case$ " edition" * }
361 INTEGERS { multiresult }
363 FUNCTION {multi.page.check}
372 swap$ duplicate$ "," =
375 { #1 'multiresult := }
376 { t #2 global.max$ substring$ 't := }
383 FUNCTION {format.pages}
386 { pages multi.page.check
387 { "pages" pages n.dashify tie.or.space.connect }
388 { "page" pages tie.or.space.connect }
394 FUNCTION {format.vol.num.pages}
395 { volume field.or.null
398 { "(" number * ")" * *
400 { "there's a number but no volume in " cite$ * warning$ }
408 { pop$ format.pages }
409 { ":" * pages n.dashify * }
415 FUNCTION {format.chapter.pages}
420 { type "l" change.case$ }
422 chapter tie.or.space.connect
425 { ", " * format.pages * }
431 FUNCTION {format.in.ed.booktitle}
435 { "In " booktitle emphasize * }
436 { "In " format.editors * ", " * booktitle emphasize * }
442 FUNCTION {empty.misc.check}
444 { author empty$ title empty$ howpublished empty$
445 month empty$ year empty$ note empty$
448 { "all relevant fields are empty in " cite$ * warning$ }
453 FUNCTION {format.thesis.type}
457 type "t" change.case$
462 FUNCTION {format.tr.number}
464 { "Technical Report" }
469 { number tie.or.space.connect }
473 FUNCTION {format.article.crossref}
476 { "need key or journal for " cite$ * " to crossref " * crossref *
480 { "In {\em " journal * "\/}" * }
485 " \cite{" * crossref * "}" *
488 FUNCTION {format.crossref.editor}
489 { editor #1 "{vv~}{ll}" format.name$
490 editor num.names$ duplicate$
495 { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
497 { " and " * editor #2 "{vv~}{ll}" format.name$ * }
505 FUNCTION {format.book.crossref}
507 { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
510 { "Volume" volume tie.or.space.connect
515 editor field.or.null author field.or.null =
519 { "need editor, key, or series for " cite$ * " to crossref " *
523 { "{\em " * series * "\/}" * }
529 { format.crossref.editor * }
531 " \cite{" * crossref * "}" *
534 FUNCTION {format.incoll.inproc.crossref}
536 editor field.or.null author field.or.null =
540 { "need editor, key, or booktitle for " cite$ * " to crossref " *
544 { "In {\em " booktitle * "\/}" * }
550 { "In " format.crossref.editor * }
552 " \cite{" * crossref * "}" *
557 format.authors "author" output.check
559 format.title "title" output.check
562 { journal emphasize "journal" output.check
563 format.vol.num.pages output
564 format.date "year" output.check
566 { format.article.crossref output.nonnull
578 { format.editors "author and editor" output.check }
579 { format.authors output.nonnull
581 { "author and editor" editor either.or.check }
587 format.btitle "title" output.check
589 { format.bvolume output
591 format.number.series output
593 publisher "publisher" output.check
597 format.book.crossref output.nonnull
600 format.edition output
601 format.date "year" output.check
609 format.authors output
611 format.title "title" output.check
612 howpublished address new.block.checkb
624 { format.editors "author and editor" output.check }
625 { format.authors output.nonnull
628 { "author and editor" editor either.or.check }
634 format.btitle "title" output.check
636 { format.bvolume output
637 format.chapter.pages "chapter and pages" output.check
639 format.number.series output
641 publisher "publisher" output.check
644 { format.chapter.pages "chapter and pages" output.check
646 format.book.crossref output.nonnull
649 format.edition output
650 format.date "year" output.check
656 FUNCTION {incollection}
658 format.authors "author" output.check
660 format.title "title" output.check
663 { format.in.ed.booktitle "booktitle" output.check
664 format.bvolume output
665 format.number.series output
666 format.chapter.pages output
668 publisher "publisher" output.check
670 format.edition output
671 format.date "year" output.check
673 { format.incoll.inproc.crossref output.nonnull
674 format.chapter.pages output
682 FUNCTION {inproceedings}
684 format.authors "author" output.check
686 format.title "title" output.check
689 { format.in.ed.booktitle "booktitle" output.check
690 format.bvolume output
691 format.number.series output
694 { organization publisher new.sentence.checkb
697 format.date "year" output.check
699 { address output.nonnull
700 format.date "year" output.check
707 { format.incoll.inproc.crossref output.nonnull
716 FUNCTION {conference} { inproceedings }
721 { organization empty$
723 { organization output.nonnull
728 { format.authors output.nonnull }
731 format.btitle "title" output.check
733 { organization empty$
734 { address new.block.checka
740 { organization address new.block.checkb
745 format.edition output
752 FUNCTION {mastersthesis}
754 format.authors "author" output.check
756 format.title "title" output.check
758 "Master's thesis" format.thesis.type output.nonnull
759 school "school" output.check
761 format.date "year" output.check
769 format.authors output
770 title howpublished new.block.checkb
772 howpublished new.block.checka
783 format.authors "author" output.check
785 format.btitle "title" output.check
787 "PhD thesis" format.thesis.type output.nonnull
788 school "school" output.check
790 format.date "year" output.check
796 FUNCTION {proceedings}
799 { organization output }
800 { format.editors output.nonnull }
804 format.btitle "title" output.check
805 format.bvolume output
806 format.number.series output
809 { publisher new.sentence.checka }
810 { organization publisher new.sentence.checkb
815 format.date "year" output.check
817 { address output.nonnull
818 format.date "year" output.check
822 { organization output }
832 FUNCTION {techreport}
834 format.authors "author" output.check
836 format.title "title" output.check
838 format.tr.number output.nonnull
839 institution "institution" output.check
841 format.date "year" output.check
847 FUNCTION {unpublished}
849 format.authors "author" output.check
851 format.title "title" output.check
853 note "note" output.check
858 FUNCTION {default.type} { misc }
876 MACRO {sep} {"Sept."}
884 MACRO {acmcs} {"ACM Comput. Surv."}
886 MACRO {acta} {"Acta Inf."}
888 MACRO {cacm} {"Commun. ACM"}
890 MACRO {ibmjrd} {"IBM J. Res. Dev."}
892 MACRO {ibmsj} {"IBM Syst.~J."}
894 MACRO {ieeese} {"IEEE Trans. Softw. Eng."}
896 MACRO {ieeetc} {"IEEE Trans. Comput."}
899 {"IEEE Trans. Comput.-Aided Design Integrated Circuits"}
901 MACRO {ipl} {"Inf. Process. Lett."}
903 MACRO {jacm} {"J.~ACM"}
905 MACRO {jcss} {"J.~Comput. Syst. Sci."}
907 MACRO {scp} {"Sci. Comput. Programming"}
909 MACRO {sicomp} {"SIAM J. Comput."}
911 MACRO {tocs} {"ACM Trans. Comput. Syst."}
913 MACRO {tods} {"ACM Trans. Database Syst."}
915 MACRO {tog} {"ACM Trans. Gr."}
917 MACRO {toms} {"ACM Trans. Math. Softw."}
919 MACRO {toois} {"ACM Trans. Office Inf. Syst."}
921 MACRO {toplas} {"ACM Trans. Prog. Lang. Syst."}
923 MACRO {tcs} {"Theoretical Comput. Sci."}
937 s #1 len substring$ =
938 { s len #1 + global.max$ substring$ }
943 FUNCTION {sort.format.names}
947 s num.names$ 'numnames :=
948 numnames 'namesleft :=
954 s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't :=
955 nameptr numnames = t "others" = and
959 nameptr #1 + 'nameptr :=
960 namesleft #1 - 'namesleft :=
965 FUNCTION {sort.format.title}
969 "The " #4 t chop.word
973 #1 global.max$ substring$
976 FUNCTION {author.sort}
979 { "to sort, need author or key in " cite$ * warning$
985 { author sort.format.names }
989 FUNCTION {author.editor.sort}
993 { "to sort, need author, editor, or key in " cite$ * warning$
999 { editor sort.format.names }
1002 { author sort.format.names }
1006 FUNCTION {author.organization.sort}
1009 { organization empty$
1011 { "to sort, need author, organization, or key in " cite$ * warning$
1017 { "The " #4 organization chop.word sortify }
1020 { author sort.format.names }
1024 FUNCTION {editor.organization.sort}
1026 { organization empty$
1028 { "to sort, need editor, organization, or key in " cite$ * warning$
1034 { "The " #4 organization chop.word sortify }
1037 { editor sort.format.names }
1046 { type$ "proceedings" =
1047 'editor.organization.sort
1049 'author.organization.sort
1058 year field.or.null sortify
1065 #1 entry.max$ substring$
1073 STRINGS { longest.label }
1075 INTEGERS { number.label longest.label.width }
1077 FUNCTION {initialize.longest.label}
1078 { "" 'longest.label :=
1080 #0 'longest.label.width :=
1083 FUNCTION {longest.label.pass}
1084 { number.label int.to.str$ 'label :=
1085 number.label #1 + 'number.label :=
1086 label width$ longest.label.width >
1087 { label 'longest.label :=
1088 label width$ 'longest.label.width :=
1094 EXECUTE {initialize.longest.label}
1096 ITERATE {longest.label.pass}
1098 FUNCTION {begin.bib}
1101 { preamble$ write$ newline$ }
1103 "\begin{thebibliography}{" longest.label *
1104 "}\setlength{\itemsep}{-1ex}\small" * write$ newline$
1109 EXECUTE {init.state.consts}
1111 ITERATE {call.type$}
1115 "\end{thebibliography}" write$ newline$
1120 % end of file latex8.bst
1121 % ---------------------------------------------------------------