1
%% File: `abbrvnat.bst'
2
%% A modification of `abbrv.bst' for use with natbib package
4
%% Copyright 1993-1999 Patrick W Daly
5
%% Max-Planck-Institut f\"ur Aeronomie
7
%% D-37191 Katlenburg-Lindau
9
%% E-mail: daly@linmpi.mpg.de
11
%% This program can be redistributed and/or modified under the terms
12
%% of the LaTeX Project Public License Distributed from CTAN
13
%% archives in directory macros/latex/base/lppl.txt; either
14
%% version 1 of the License, or any later version.
16
% Version and source file information:
17
% \ProvidesFile{natbst.mbs}[1999/05/11 1.6 (PWD)]
19
% BibTeX `plainnat' family
20
% version 0.99b for BibTeX versions 0.99a or later,
21
% for LaTeX versions 2.09 and 2e.
23
% For use with the `natbib.sty' package; emulates the corresponding
24
% member of the `plain' family, but with author-year citations.
26
% With version 6.0 of `natbib.sty', it may also be used for numerical
27
% citations, while retaining the commands \citeauthor, \citefullauthor,
28
% and \citeyear to print the corresponding information.
30
% For version 7.0 of `natbib.sty', the KEY field replaces missing
31
% authors/editors, and the date is left blank in \bibitem.
33
% Includes fields ISBN and ISSN.
35
% Includes field URL for Internet addresses (best used with
36
% with the url.sty package of Donald Arseneau
66
{ label extra.label sort.label short.list }
68
INTEGERS { output.state before.all mid.sentence after.sentence after.block }
70
FUNCTION {init.state.consts}
79
FUNCTION {output.nonnull}
81
output.state mid.sentence =
83
{ output.state after.block =
88
{ output.state before.all =
90
{ add.period$ " " * write$ }
94
mid.sentence 'output.state :=
107
FUNCTION {output.check}
110
{ pop$ "empty " t * " in " * cite$ * warning$ }
122
{ output.state before.all =
124
{ after.block 'output.state := }
128
FUNCTION {new.sentence}
129
{ output.state after.block =
131
{ output.state before.all =
133
{ after.sentence 'output.state := }
157
FUNCTION {new.block.checka}
164
FUNCTION {new.block.checkb}
173
FUNCTION {new.sentence.checka}
180
FUNCTION {new.sentence.checkb}
189
FUNCTION {field.or.null}
199
{ "{\em " swap$ * "}" * }
203
INTEGERS { nameptr namesleft numnames }
205
FUNCTION {format.names}
208
s num.names$ 'numnames :=
209
numnames 'namesleft :=
211
{ s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
228
nameptr #1 + 'nameptr :=
229
namesleft #1 - 'namesleft :=
234
FUNCTION {format.key}
236
{ key field.or.null }
241
FUNCTION {format.authors}
244
{ author format.names }
248
FUNCTION {format.editors}
251
{ editor format.names
252
editor num.names$ #1 >
260
FUNCTION {format.isbn}
263
{ new.block "ISBN " isbn * }
267
FUNCTION {format.issn}
270
{ new.block "ISSN " issn * }
274
FUNCTION {format.url}
277
{ new.block "URL \url{" url * "}" * }
281
FUNCTION {format.title}
284
{ title "t" change.case$ }
288
FUNCTION {format.full.names}
291
s num.names$ 'numnames :=
292
numnames 'namesleft :=
295
"{vv~}{ll}" format.name$ 't :=
314
nameptr #1 + 'nameptr :=
315
namesleft #1 - 'namesleft :=
320
FUNCTION {author.editor.full}
324
{ editor format.full.names }
327
{ author format.full.names }
331
FUNCTION {author.full}
334
{ author format.full.names }
338
FUNCTION {editor.full}
341
{ editor format.full.names }
345
FUNCTION {make.full.names}
350
{ type$ "proceedings" =
358
FUNCTION {output.bibitem}
362
")" make.full.names duplicate$ short.list =
371
before.all 'output.state :=
378
{ t #1 #1 substring$ "-" =
379
{ t #1 #2 substring$ "--" = not
381
t #2 global.max$ substring$ 't :=
383
{ { t #1 #1 substring$ "-" = }
385
t #2 global.max$ substring$ 't :=
391
{ t #1 #1 substring$ *
392
t #2 global.max$ substring$ 't :=
399
FUNCTION {format.date}
400
{ year duplicate$ empty$
401
{ "empty year in " cite$ * warning$
414
FUNCTION {format.btitle}
418
FUNCTION {tie.or.space.connect}
419
{ duplicate$ text.length$ #3 <
426
FUNCTION {either.or.check}
429
{ "can't use both " swap$ * " fields in " * cite$ * warning$ }
433
FUNCTION {format.bvolume}
436
{ "volume" volume tie.or.space.connect
439
{ " of " * series emphasize * }
441
"volume and number" number either.or.check
446
FUNCTION {format.number.series}
449
{ series field.or.null }
450
{ output.state mid.sentence =
454
number tie.or.space.connect
456
{ "there's a number but no series in " cite$ * warning$ }
457
{ " in " * series * }
466
FUNCTION {format.edition}
469
{ output.state mid.sentence =
470
{ edition "l" change.case$ " edition" * }
471
{ edition "t" change.case$ " edition" * }
477
INTEGERS { multiresult }
479
FUNCTION {multi.page.check}
488
swap$ duplicate$ "," =
491
{ #1 'multiresult := }
492
{ t #2 global.max$ substring$ 't := }
499
FUNCTION {format.pages}
502
{ pages multi.page.check
503
{ "pages" pages n.dashify tie.or.space.connect }
504
{ "page" pages tie.or.space.connect }
510
FUNCTION {format.vol.num.pages}
511
{ volume field.or.null
514
{ "\penalty0 (" number * ")" * *
516
{ "there's a number but no volume in " cite$ * warning$ }
524
{ pop$ format.pages }
525
{ ":\penalty0 " * pages n.dashify * }
531
FUNCTION {format.chapter.pages}
536
{ type "l" change.case$ }
538
chapter tie.or.space.connect
541
{ ", " * format.pages * }
547
FUNCTION {format.in.ed.booktitle}
551
{ "In " booktitle emphasize * }
552
{ "In " format.editors * ", " * booktitle emphasize * }
558
FUNCTION {empty.misc.check}
559
{ author empty$ title empty$ howpublished empty$
560
month empty$ year empty$ note empty$
563
{ "all relevant fields are empty in " cite$ * warning$ }
568
FUNCTION {format.thesis.type}
572
type "t" change.case$
577
FUNCTION {format.tr.number}
579
{ "Technical Report" }
584
{ number tie.or.space.connect }
588
FUNCTION {format.article.crossref}
591
{ "need key or journal for " cite$ * " to crossref " * crossref *
595
{ "In {\em " journal * "\/}" * }
600
" \citep{" * crossref * "}" *
603
FUNCTION {format.book.crossref}
605
{ "empty volume in " cite$ * "'s crossref of " * crossref * warning$
608
{ "Volume" volume tie.or.space.connect
613
editor field.or.null author field.or.null =
617
{ "need editor, key, or series for " cite$ * " to crossref " *
621
{ "{\em " * series * "\/}" * }
629
", \citet{" * crossref * "}" *
632
FUNCTION {format.incoll.inproc.crossref}
634
editor field.or.null author field.or.null =
638
{ "need editor, key, or booktitle for " cite$ * " to crossref " *
642
{ "In {\em " booktitle * "\/}" * }
650
" \citet{" * crossref * "}" *
655
format.authors "author" output.check
656
author format.key output
658
format.title "title" output.check
661
{ journal emphasize "journal" output.check
662
format.vol.num.pages output
663
format.date "year" output.check
665
{ format.article.crossref output.nonnull
679
{ format.editors "author and editor" output.check
680
editor format.key output
682
{ format.authors output.nonnull
684
{ "author and editor" editor either.or.check }
690
format.btitle "title" output.check
692
{ format.bvolume output
694
format.number.series output
696
publisher "publisher" output.check
700
format.book.crossref output.nonnull
703
format.edition output
704
format.date "year" output.check
714
format.authors output
715
author format.key output
717
format.title "title" output.check
718
howpublished address new.block.checkb
732
{ format.editors "author and editor" output.check
733
editor format.key output
735
{ format.authors output.nonnull
737
{ "author and editor" editor either.or.check }
743
format.btitle "title" output.check
745
{ format.bvolume output
746
format.chapter.pages "chapter and pages" output.check
748
format.number.series output
750
publisher "publisher" output.check
753
{ format.chapter.pages "chapter and pages" output.check
755
format.book.crossref output.nonnull
758
format.edition output
759
format.date "year" output.check
767
FUNCTION {incollection}
769
format.authors "author" output.check
770
author format.key output
772
format.title "title" output.check
775
{ format.in.ed.booktitle "booktitle" output.check
776
format.bvolume output
777
format.number.series output
778
format.chapter.pages output
780
publisher "publisher" output.check
782
format.edition output
783
format.date "year" output.check
785
{ format.incoll.inproc.crossref output.nonnull
786
format.chapter.pages output
796
FUNCTION {inproceedings}
798
format.authors "author" output.check
799
author format.key output
801
format.title "title" output.check
804
{ format.in.ed.booktitle "booktitle" output.check
805
format.bvolume output
806
format.number.series output
809
{ organization publisher new.sentence.checkb
812
format.date "year" output.check
814
{ address output.nonnull
815
format.date "year" output.check
822
{ format.incoll.inproc.crossref output.nonnull
833
FUNCTION {conference} { inproceedings }
837
format.authors output
838
author format.key output
840
format.btitle "title" output.check
841
organization address new.block.checkb
844
format.edition output
852
FUNCTION {mastersthesis}
854
format.authors "author" output.check
855
author format.key output
857
format.title "title" output.check
859
"Master's thesis" format.thesis.type output.nonnull
860
school "school" output.check
862
format.date "year" output.check
871
format.authors output
872
author format.key output
873
title howpublished new.block.checkb
875
howpublished new.block.checka
888
format.authors "author" output.check
889
author format.key output
891
format.btitle "title" output.check
893
"PhD thesis" format.thesis.type output.nonnull
894
school "school" output.check
896
format.date "year" output.check
903
FUNCTION {proceedings}
905
format.editors output
906
editor format.key output
908
format.btitle "title" output.check
909
format.bvolume output
910
format.number.series output
912
format.date "year" output.check
923
FUNCTION {techreport}
925
format.authors "author" output.check
926
author format.key output
928
format.title "title" output.check
930
format.tr.number output.nonnull
931
institution "institution" output.check
933
format.date "year" output.check
940
FUNCTION {unpublished}
942
format.authors "author" output.check
943
author format.key output
945
format.title "title" output.check
948
note "note" output.check
953
FUNCTION {default.type} { misc }
972
MACRO {sep} {"Sept."}
982
MACRO {acmcs} {"ACM Comput. Surv."}
984
MACRO {acta} {"Acta Inf."}
986
MACRO {cacm} {"Commun. ACM"}
988
MACRO {ibmjrd} {"IBM J. Res. Dev."}
990
MACRO {ibmsj} {"IBM Syst.~J."}
992
MACRO {ieeese} {"IEEE Trans. Softw. Eng."}
994
MACRO {ieeetc} {"IEEE Trans. Comput."}
997
{"IEEE Trans. Comput.-Aided Design Integrated Circuits"}
999
MACRO {ipl} {"Inf. Process. Lett."}
1001
MACRO {jacm} {"J.~ACM"}
1003
MACRO {jcss} {"J.~Comput. Syst. Sci."}
1005
MACRO {scp} {"Sci. Comput. Programming"}
1007
MACRO {sicomp} {"SIAM J. Comput."}
1009
MACRO {tocs} {"ACM Trans. Comput. Syst."}
1011
MACRO {tods} {"ACM Trans. Database Syst."}
1013
MACRO {tog} {"ACM Trans. Gr."}
1015
MACRO {toms} {"ACM Trans. Math. Softw."}
1017
MACRO {toois} {"ACM Trans. Office Inf. Syst."}
1019
MACRO {toplas} {"ACM Trans. Prog. Lang. Syst."}
1021
MACRO {tcs} {"Theoretical Comput. Sci."}
1033
FUNCTION {chop.word}
1036
s #1 len substring$ =
1037
{ s len #1 + global.max$ substring$ }
1042
FUNCTION {format.lab.names}
1044
s #1 "{vv~}{ll}" format.name$
1045
s num.names$ duplicate$
1047
{ pop$ " et~al." * }
1050
{ s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
1052
{ " and " * s #2 "{vv~}{ll}" format.name$ * }
1060
FUNCTION {author.key.label}
1063
{ cite$ #1 #3 substring$ }
1067
{ author format.lab.names }
1071
FUNCTION {author.editor.key.label}
1075
{ cite$ #1 #3 substring$ }
1079
{ editor format.lab.names }
1082
{ author format.lab.names }
1086
FUNCTION {author.key.organization.label}
1089
{ organization empty$
1090
{ cite$ #1 #3 substring$ }
1091
{ "The " #4 organization chop.word #3 text.prefix$ }
1097
{ author format.lab.names }
1101
FUNCTION {editor.key.organization.label}
1104
{ organization empty$
1105
{ cite$ #1 #3 substring$ }
1106
{ "The " #4 organization chop.word #3 text.prefix$ }
1112
{ editor format.lab.names }
1116
FUNCTION {calc.short.authors}
1120
'author.editor.key.label
1121
{ type$ "proceedings" =
1122
'editor.key.organization.label
1124
'author.key.organization.label
1134
FUNCTION {calc.label}
1135
{ calc.short.authors
1139
year duplicate$ empty$
1140
short.list key field.or.null = or
1148
FUNCTION {sort.format.names}
1152
s num.names$ 'numnames :=
1153
numnames 'namesleft :=
1159
s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't :=
1160
nameptr numnames = t "others" = and
1164
nameptr #1 + 'nameptr :=
1165
namesleft #1 - 'namesleft :=
1170
FUNCTION {sort.format.title}
1174
"The " #4 t chop.word
1178
#1 global.max$ substring$
1181
FUNCTION {author.sort}
1184
{ "to sort, need author or key in " cite$ * warning$
1190
{ author sort.format.names }
1194
FUNCTION {author.editor.sort}
1198
{ "to sort, need author, editor, or key in " cite$ * warning$
1204
{ editor sort.format.names }
1207
{ author sort.format.names }
1211
FUNCTION {author.organization.sort}
1213
{ organization empty$
1215
{ "to sort, need author, organization, or key in " cite$ * warning$
1221
{ "The " #4 organization chop.word sortify }
1224
{ author sort.format.names }
1228
FUNCTION {editor.organization.sort}
1230
{ organization empty$
1232
{ "to sort, need editor, organization, or key in " cite$ * warning$
1238
{ "The " #4 organization chop.word sortify }
1241
{ editor sort.format.names }
1254
{ type$ "proceedings" =
1255
'editor.organization.sort
1257
'author.organization.sort
1266
year field.or.null sortify
1273
#1 entry.max$ substring$
1276
#1 entry.max$ substring$
1284
STRINGS { longest.label last.label next.extra }
1286
INTEGERS { longest.label.width last.extra.num number.label }
1288
FUNCTION {initialize.longest.label}
1289
{ "" 'longest.label :=
1290
#0 int.to.chr$ 'last.label :=
1292
#0 'longest.label.width :=
1293
#0 'last.extra.num :=
1297
FUNCTION {forward.pass}
1298
{ last.label label =
1299
{ last.extra.num #1 + 'last.extra.num :=
1300
last.extra.num int.to.chr$ 'extra.label :=
1302
{ "a" chr.to.int$ 'last.extra.num :=
1304
label 'last.label :=
1307
number.label #1 + 'number.label :=
1310
FUNCTION {reverse.pass}
1312
{ "a" 'extra.label := }
1315
extra.label 'next.extra :=
1319
{ "{\natexlab{" swap$ * "}}" * }
1322
label extra.label * 'label :=
1325
EXECUTE {initialize.longest.label}
1327
ITERATE {forward.pass}
1329
REVERSE {reverse.pass}
1331
FUNCTION {bib.sort.order}
1332
{ sort.label 'sort.key$ :=
1335
ITERATE {bib.sort.order}
1339
FUNCTION {begin.bib}
1342
{ preamble$ write$ newline$ }
1344
"\begin{thebibliography}{" number.label int.to.str$ * "}" *
1346
"\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi"
1348
"\expandafter\ifx\csname url\endcsname\relax" write$ newline$
1349
" \def\url#1{{\tt #1}}\fi" write$ newline$
1354
EXECUTE {init.state.consts}
1356
ITERATE {call.type$}
1360
"\end{thebibliography}" write$ newline$