spbasic.bst (33250B)
1 %% 2 %% This is file `spbasic.bst', 3 %% generated with the docstrip utility. 4 %% 5 %% The original source files were: 6 %% 7 %% merlin.mbs (with options: `ay,nat,seq-lab,vonx,nm-rvx,ed-rev,jnrlst,dt-beg,yr-par,yrp-x,yrpp-xsp,note-yr,jxper,jttl-rm,thtit-a,pgsep-c,num-xser,ser-vol,jnm-x,btit-rm,bt-rm,pre-pub,doi,edparxc,blk-tit,in-col,fin-bare,pp,ed,abr,mth-bare,ord,jabr,xand,eprint,url,url-blk,em-x,nfss,') 8 %% ---------------------------------------- 9 %% 10 %%********************************************************************************%% 11 %% %% 12 %% For Springer medical, life sciences, chemistry, geology, engineering and %% 13 %% computer science publications. %% 14 %% For use with the natbib package (see below). Default is author-year citations. %% 15 %% When citations are numbered, please use \usepackage[numbers]{natbib}. %% 16 %% A lack of punctuation is the key feature. Springer-Verlag 2004/10/15 %% 17 %% Report bugs and improvements to: Joylene Vette-Guillaume or Frank Holzwarth %% 18 %% %% 19 %%********************************************************************************%% 20 %% 21 %% Copyright 1994-2004 Patrick W Daly 22 % =============================================================== 23 % IMPORTANT NOTICE: 24 % This bibliographic style (bst) file has been generated from one or 25 % more master bibliographic style (mbs) files, listed above. 26 % 27 % This generated file can be redistributed and/or modified under the terms 28 % of the LaTeX Project Public License Distributed from CTAN 29 % archives in directory macros/latex/base/lppl.txt; either 30 % version 1 of the License, or any later version. 31 % =============================================================== 32 % Name and version information of the main mbs file: 33 % \ProvidesFile{merlin.mbs}[2004/02/09 4.13 (PWD, AO, DPC)] 34 % For use with BibTeX version 0.99a or later 35 %------------------------------------------------------------------- 36 % This bibliography style file is intended for texts in ENGLISH 37 % This is an author-year citation style bibliography. As such, it is 38 % non-standard LaTeX, and requires a special package file to function properly. 39 % Such a package is natbib.sty by Patrick W. Daly 40 % The form of the \bibitem entries is 41 % \bibitem[Jones et al.(1990)]{key}... 42 % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}... 43 % The essential feature is that the label (the part in brackets) consists 44 % of the author names, as they should appear in the citation, with the year 45 % in parentheses following. There must be no space before the opening 46 % parenthesis! 47 % With natbib v5.3, a full list of authors may also follow the year. 48 % In natbib.sty, it is possible to define the type of enclosures that is 49 % really wanted (brackets or parentheses), but in either case, there must 50 % be parentheses in the label. 51 % The \cite command functions as follows: 52 % \citet{key} ==>> Jones et al. (1990) 53 % \citet*{key} ==>> Jones, Baker, and Smith (1990) 54 % \citep{key} ==>> (Jones et al., 1990) 55 % \citep*{key} ==>> (Jones, Baker, and Smith, 1990) 56 % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2) 57 % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990) 58 % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32) 59 % \citeauthor{key} ==>> Jones et al. 60 % \citeauthor*{key} ==>> Jones, Baker, and Smith 61 % \citeyear{key} ==>> 1990 62 %--------------------------------------------------------------------- 63 64 ENTRY 65 { address 66 archive 67 author 68 booktitle 69 chapter 70 doi 71 edition 72 editor 73 eid 74 eprint 75 howpublished 76 institution 77 journal 78 key 79 month 80 note 81 number 82 organization 83 pages 84 publisher 85 school 86 series 87 title 88 type 89 url 90 volume 91 year 92 } 93 {} 94 { label extra.label sort.label short.list } 95 INTEGERS { output.state before.all mid.sentence after.sentence after.block } 96 FUNCTION {init.state.consts} 97 { #0 'before.all := 98 #1 'mid.sentence := 99 #2 'after.sentence := 100 #3 'after.block := 101 } 102 STRINGS { s t} 103 FUNCTION {output.nonnull} 104 { 's := 105 output.state mid.sentence = 106 { ", " * write$ } 107 { output.state after.block = 108 { add.period$ write$ 109 newline$ 110 "\newblock " write$ 111 } 112 { output.state before.all = 113 'write$ 114 { add.period$ " " * write$ } 115 if$ 116 } 117 if$ 118 mid.sentence 'output.state := 119 } 120 if$ 121 s 122 } 123 FUNCTION {output} 124 { duplicate$ empty$ 125 'pop$ 126 'output.nonnull 127 if$ 128 } 129 FUNCTION {output.check} 130 { 't := 131 duplicate$ empty$ 132 { pop$ "empty " t * " in " * cite$ * warning$ } 133 'output.nonnull 134 if$ 135 } 136 FUNCTION {fin.entry} 137 { duplicate$ empty$ 138 'pop$ 139 'write$ 140 if$ 141 newline$ 142 } 143 144 FUNCTION {new.block} 145 { output.state before.all = 146 'skip$ 147 { after.block 'output.state := } 148 if$ 149 } 150 FUNCTION {new.sentence} 151 { output.state after.block = 152 'skip$ 153 { output.state before.all = 154 'skip$ 155 { after.sentence 'output.state := } 156 if$ 157 } 158 if$ 159 } 160 FUNCTION {add.blank} 161 { " " * before.all 'output.state := 162 } 163 164 FUNCTION {no.blank.or.punct} 165 { "\hspace{0pt}" * before.all 'output.state := 166 } 167 168 FUNCTION {date.block} 169 { 170 add.blank 171 } 172 173 FUNCTION {not} 174 { { #0 } 175 { #1 } 176 if$ 177 } 178 FUNCTION {and} 179 { 'skip$ 180 { pop$ #0 } 181 if$ 182 } 183 FUNCTION {or} 184 { { pop$ #1 } 185 'skip$ 186 if$ 187 } 188 STRINGS {z} 189 FUNCTION {remove.dots} 190 { 'z := 191 "" 192 { z empty$ not } 193 { z #1 #1 substring$ 194 z #2 global.max$ substring$ 'z := 195 duplicate$ "." = 'pop$ 196 { * } 197 if$ 198 } 199 while$ 200 } 201 FUNCTION {new.block.checkb} 202 { empty$ 203 swap$ empty$ 204 and 205 'skip$ 206 'new.block 207 if$ 208 } 209 FUNCTION {field.or.null} 210 { duplicate$ empty$ 211 { pop$ "" } 212 'skip$ 213 if$ 214 } 215 FUNCTION {emphasize} 216 { skip$ } 217 FUNCTION {tie.or.space.prefix} 218 { duplicate$ text.length$ #3 < 219 { "~" } 220 { " " } 221 if$ 222 swap$ 223 } 224 225 FUNCTION {capitalize} 226 { "u" change.case$ "t" change.case$ } 227 228 FUNCTION {space.word} 229 { " " swap$ * " " * } 230 % Here are the language-specific definitions for explicit words. 231 % Each function has a name bbl.xxx where xxx is the English word. 232 % The language selected here is ENGLISH 233 FUNCTION {bbl.and} 234 { "and"} 235 236 FUNCTION {bbl.etal} 237 { "et~al" } 238 239 FUNCTION {bbl.editors} 240 { "eds" } 241 242 FUNCTION {bbl.editor} 243 { "ed" } 244 245 FUNCTION {bbl.edby} 246 { "edited by" } 247 248 FUNCTION {bbl.edition} 249 { "edn" } 250 251 FUNCTION {bbl.volume} 252 { "vol" } 253 254 FUNCTION {bbl.of} 255 { "of" } 256 257 FUNCTION {bbl.number} 258 { "no." } 259 260 FUNCTION {bbl.nr} 261 { "no." } 262 263 FUNCTION {bbl.in} 264 { "in" } 265 266 FUNCTION {bbl.pages} 267 { "pp" } 268 269 FUNCTION {bbl.page} 270 { "p" } 271 272 FUNCTION {bbl.chapter} 273 { "chap" } 274 275 FUNCTION {bbl.techrep} 276 { "Tech. Rep." } 277 278 FUNCTION {bbl.mthesis} 279 { "Master's thesis" } 280 281 FUNCTION {bbl.phdthesis} 282 { "PhD thesis" } 283 284 FUNCTION {bbl.first} 285 { "1st" } 286 287 FUNCTION {bbl.second} 288 { "2nd" } 289 290 FUNCTION {bbl.third} 291 { "3rd" } 292 293 FUNCTION {bbl.fourth} 294 { "4th" } 295 296 FUNCTION {bbl.fifth} 297 { "5th" } 298 299 FUNCTION {bbl.st} 300 { "st" } 301 302 FUNCTION {bbl.nd} 303 { "nd" } 304 305 FUNCTION {bbl.rd} 306 { "rd" } 307 308 FUNCTION {bbl.th} 309 { "th" } 310 311 MACRO {jan} {"Jan."} 312 313 MACRO {feb} {"Feb."} 314 315 MACRO {mar} {"Mar."} 316 317 MACRO {apr} {"Apr."} 318 319 MACRO {may} {"May"} 320 321 MACRO {jun} {"Jun."} 322 323 MACRO {jul} {"Jul."} 324 325 MACRO {aug} {"Aug."} 326 327 MACRO {sep} {"Sep."} 328 329 MACRO {oct} {"Oct."} 330 331 MACRO {nov} {"Nov."} 332 333 MACRO {dec} {"Dec."} 334 335 FUNCTION {eng.ord} 336 { duplicate$ "1" swap$ * 337 #-2 #1 substring$ "1" = 338 { bbl.th * } 339 { duplicate$ #-1 #1 substring$ 340 duplicate$ "1" = 341 { pop$ bbl.st * } 342 { duplicate$ "2" = 343 { pop$ bbl.nd * } 344 { "3" = 345 { bbl.rd * } 346 { bbl.th * } 347 if$ 348 } 349 if$ 350 } 351 if$ 352 } 353 if$ 354 } 355 356 MACRO {acmcs} {"ACM Comput Surv"} 357 358 MACRO {acta} {"Acta Inf"} 359 360 MACRO {cacm} {"Commun ACM"} 361 362 MACRO {ibmjrd} {"IBM~J~Res Dev"} 363 364 MACRO {ibmsj} {"IBM Syst~J"} 365 366 MACRO {ieeese} {"IEEE Trans Softw Eng"} 367 368 MACRO {ieeetc} {"IEEE Trans Comput"} 369 370 MACRO {ieeetcad} 371 {"IEEE Trans Comput Aid Des"} 372 373 MACRO {ipl} {"Inf Process Lett"} 374 375 MACRO {jacm} {"J~ACM"} 376 377 MACRO {jcss} {"J~Comput Syst Sci"} 378 379 MACRO {scp} {"Sci Comput Program"} 380 381 MACRO {sicomp} {"SIAM J~Comput"} 382 383 MACRO {tocs} {"ACM Trans Comput Syst"} 384 385 MACRO {tods} {"ACM Trans Database Syst"} 386 387 MACRO {tog} {"ACM Trans Graphic"} 388 389 MACRO {toms} {"ACM Trans Math Softw"} 390 391 MACRO {toois} {"ACM Trans Office Inf Syst"} 392 393 MACRO {toplas} {"ACM Trans Program Lang Syst"} 394 395 MACRO {tcs} {"Theor Comput Sci"} 396 397 FUNCTION {bibinfo.check} 398 { swap$ 399 duplicate$ missing$ 400 { 401 pop$ pop$ 402 "" 403 } 404 { duplicate$ empty$ 405 { 406 swap$ pop$ 407 } 408 { swap$ 409 pop$ 410 } 411 if$ 412 } 413 if$ 414 } 415 FUNCTION {bibinfo.warn} 416 { swap$ 417 duplicate$ missing$ 418 { 419 swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ 420 "" 421 } 422 { duplicate$ empty$ 423 { 424 swap$ "empty " swap$ * " in " * cite$ * warning$ 425 } 426 { swap$ 427 pop$ 428 } 429 if$ 430 } 431 if$ 432 } 433 FUNCTION {format.eprint} 434 { eprint duplicate$ empty$ 435 'skip$ 436 { "\eprint" 437 archive empty$ 438 'skip$ 439 { "[" * archive * "]" * } 440 if$ 441 "{" * swap$ * "}" * 442 } 443 if$ 444 } 445 FUNCTION {format.url} 446 { url empty$ 447 { "" } 448 { "\urlprefix\url{" url * "}" * } 449 if$ 450 } 451 452 STRINGS { bibinfo} 453 INTEGERS { nameptr namesleft numnames } 454 455 FUNCTION {format.names} 456 { 'bibinfo := 457 duplicate$ empty$ 'skip$ { 458 's := 459 "" 't := 460 #1 'nameptr := 461 s num.names$ 'numnames := 462 numnames 'namesleft := 463 { namesleft #0 > } 464 { s nameptr 465 "{vv~}{ll}{ f{}}{ jj}" 466 format.name$ 467 remove.dots 468 bibinfo bibinfo.check 469 't := 470 nameptr #1 > 471 { 472 namesleft #1 > 473 { ", " * t * } 474 { 475 "," * 476 s nameptr "{ll}" format.name$ duplicate$ "others" = 477 { 't := } 478 { pop$ } 479 if$ 480 t "others" = 481 { 482 " " * bbl.etal * 483 } 484 { " " * t * } 485 if$ 486 } 487 if$ 488 } 489 't 490 if$ 491 nameptr #1 + 'nameptr := 492 namesleft #1 - 'namesleft := 493 } 494 while$ 495 } if$ 496 } 497 FUNCTION {format.names.ed} 498 { 499 format.names 500 } 501 FUNCTION {format.key} 502 { empty$ 503 { key field.or.null } 504 { "" } 505 if$ 506 } 507 508 FUNCTION {format.authors} 509 { author "author" format.names 510 } 511 FUNCTION {get.bbl.editor} 512 { editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ } 513 514 FUNCTION {format.editors} 515 { editor "editor" format.names duplicate$ empty$ 'skip$ 516 { 517 " " * 518 get.bbl.editor 519 "(" swap$ * ")" * 520 * 521 } 522 if$ 523 } 524 FUNCTION {format.doi} 525 { doi "doi" bibinfo.check 526 duplicate$ empty$ 'skip$ 527 { 528 "\doi{" swap$ * "}" * 529 } 530 if$ 531 } 532 FUNCTION {format.note} 533 { 534 note empty$ 535 { "" } 536 { note #1 #1 substring$ 537 duplicate$ "{" = 538 'skip$ 539 { output.state mid.sentence = 540 { "l" } 541 { "u" } 542 if$ 543 change.case$ 544 } 545 if$ 546 note #2 global.max$ substring$ * "note" bibinfo.check 547 } 548 if$ 549 } 550 551 FUNCTION {format.title} 552 { title 553 duplicate$ empty$ 'skip$ 554 { "t" change.case$ } 555 if$ 556 "title" bibinfo.check 557 } 558 FUNCTION {format.full.names} 559 {'s := 560 "" 't := 561 #1 'nameptr := 562 s num.names$ 'numnames := 563 numnames 'namesleft := 564 { namesleft #0 > } 565 { s nameptr 566 "{vv~}{ll}" format.name$ 567 't := 568 nameptr #1 > 569 { 570 namesleft #1 > 571 { ", " * t * } 572 { 573 s nameptr "{ll}" format.name$ duplicate$ "others" = 574 { 't := } 575 { pop$ } 576 if$ 577 t "others" = 578 { 579 " " * bbl.etal * 580 } 581 { 582 numnames #2 > 583 { "," * } 584 'skip$ 585 if$ 586 bbl.and 587 space.word * t * 588 } 589 if$ 590 } 591 if$ 592 } 593 't 594 if$ 595 nameptr #1 + 'nameptr := 596 namesleft #1 - 'namesleft := 597 } 598 while$ 599 } 600 601 FUNCTION {author.editor.key.full} 602 { author empty$ 603 { editor empty$ 604 { key empty$ 605 { cite$ #1 #3 substring$ } 606 'key 607 if$ 608 } 609 { editor format.full.names } 610 if$ 611 } 612 { author format.full.names } 613 if$ 614 } 615 616 FUNCTION {author.key.full} 617 { author empty$ 618 { key empty$ 619 { cite$ #1 #3 substring$ } 620 'key 621 if$ 622 } 623 { author format.full.names } 624 if$ 625 } 626 627 FUNCTION {editor.key.full} 628 { editor empty$ 629 { key empty$ 630 { cite$ #1 #3 substring$ } 631 'key 632 if$ 633 } 634 { editor format.full.names } 635 if$ 636 } 637 638 FUNCTION {make.full.names} 639 { type$ "book" = 640 type$ "inbook" = 641 or 642 'author.editor.key.full 643 { type$ "proceedings" = 644 'editor.key.full 645 'author.key.full 646 if$ 647 } 648 if$ 649 } 650 651 FUNCTION {output.bibitem} 652 { newline$ 653 "\bibitem[{" write$ 654 label write$ 655 ")" make.full.names duplicate$ short.list = 656 { pop$ } 657 { * } 658 if$ 659 "}]{" * write$ 660 cite$ write$ 661 "}" write$ 662 newline$ 663 "" 664 before.all 'output.state := 665 } 666 667 FUNCTION {add.period} 668 { duplicate$ empty$ 669 'skip$ 670 { "." * add.blank } 671 if$ 672 } 673 674 FUNCTION {if.digit} 675 { duplicate$ "0" = 676 swap$ duplicate$ "1" = 677 swap$ duplicate$ "2" = 678 swap$ duplicate$ "3" = 679 swap$ duplicate$ "4" = 680 swap$ duplicate$ "5" = 681 swap$ duplicate$ "6" = 682 swap$ duplicate$ "7" = 683 swap$ duplicate$ "8" = 684 swap$ "9" = or or or or or or or or or 685 } 686 FUNCTION {n.separate} 687 { 't := 688 "" 689 #0 'numnames := 690 { t empty$ not } 691 { t #-1 #1 substring$ if.digit 692 { numnames #1 + 'numnames := } 693 { #0 'numnames := } 694 if$ 695 t #-1 #1 substring$ swap$ * 696 t #-2 global.max$ substring$ 't := 697 numnames #5 = 698 { duplicate$ #1 #2 substring$ swap$ 699 #3 global.max$ substring$ 700 "," swap$ * * 701 } 702 'skip$ 703 if$ 704 } 705 while$ 706 } 707 FUNCTION {n.dashify} 708 { 709 n.separate 710 't := 711 "" 712 { t empty$ not } 713 { t #1 #1 substring$ "-" = 714 { t #1 #2 substring$ "--" = not 715 { "--" * 716 t #2 global.max$ substring$ 't := 717 } 718 { { t #1 #1 substring$ "-" = } 719 { "-" * 720 t #2 global.max$ substring$ 't := 721 } 722 while$ 723 } 724 if$ 725 } 726 { t #1 #1 substring$ * 727 t #2 global.max$ substring$ 't := 728 } 729 if$ 730 } 731 while$ 732 } 733 734 FUNCTION {word.in} 735 { bbl.in capitalize 736 ":" * 737 " " * } 738 739 FUNCTION {format.date} 740 { year "year" bibinfo.check duplicate$ empty$ 741 { 742 "empty year in " cite$ * "; set to ????" * warning$ 743 pop$ "????" 744 } 745 'skip$ 746 if$ 747 extra.label * 748 before.all 'output.state := 749 " (" swap$ * ")" * 750 } 751 FUNCTION {format.btitle} 752 { title "title" bibinfo.check 753 duplicate$ empty$ 'skip$ 754 { 755 } 756 if$ 757 } 758 FUNCTION {either.or.check} 759 { empty$ 760 'pop$ 761 { "can't use both " swap$ * " fields in " * cite$ * warning$ } 762 if$ 763 } 764 FUNCTION {format.bvolume} 765 { volume empty$ 766 { "" } 767 { bbl.volume volume tie.or.space.prefix 768 "volume" bibinfo.check * * 769 series "series" bibinfo.check 770 duplicate$ empty$ 'pop$ 771 { emphasize ", " * swap$ * } 772 if$ 773 "volume and number" number either.or.check 774 } 775 if$ 776 } 777 FUNCTION {format.number.series} 778 { volume empty$ 779 { number empty$ 780 { series field.or.null } 781 { series empty$ 782 { number "number" bibinfo.check } 783 { output.state mid.sentence = 784 { bbl.number } 785 { bbl.number capitalize } 786 if$ 787 number tie.or.space.prefix "number" bibinfo.check * * 788 bbl.in space.word * 789 series "series" bibinfo.check * 790 } 791 if$ 792 } 793 if$ 794 } 795 { "" } 796 if$ 797 } 798 FUNCTION {is.num} 799 { chr.to.int$ 800 duplicate$ "0" chr.to.int$ < not 801 swap$ "9" chr.to.int$ > not and 802 } 803 804 FUNCTION {extract.num} 805 { duplicate$ 't := 806 "" 's := 807 { t empty$ not } 808 { t #1 #1 substring$ 809 t #2 global.max$ substring$ 't := 810 duplicate$ is.num 811 { s swap$ * 's := } 812 { pop$ "" 't := } 813 if$ 814 } 815 while$ 816 s empty$ 817 'skip$ 818 { pop$ s } 819 if$ 820 } 821 822 FUNCTION {convert.edition} 823 { extract.num "l" change.case$ 's := 824 s "first" = s "1" = or 825 { bbl.first 't := } 826 { s "second" = s "2" = or 827 { bbl.second 't := } 828 { s "third" = s "3" = or 829 { bbl.third 't := } 830 { s "fourth" = s "4" = or 831 { bbl.fourth 't := } 832 { s "fifth" = s "5" = or 833 { bbl.fifth 't := } 834 { s #1 #1 substring$ is.num 835 { s eng.ord 't := } 836 { edition 't := } 837 if$ 838 } 839 if$ 840 } 841 if$ 842 } 843 if$ 844 } 845 if$ 846 } 847 if$ 848 t 849 } 850 851 FUNCTION {format.edition} 852 { edition duplicate$ empty$ 'skip$ 853 { 854 convert.edition 855 output.state mid.sentence = 856 { "l" } 857 { "t" } 858 if$ change.case$ 859 "edition" bibinfo.check 860 " " * bbl.edition * 861 } 862 if$ 863 } 864 INTEGERS { multiresult } 865 FUNCTION {multi.page.check} 866 { 't := 867 #0 'multiresult := 868 { multiresult not 869 t empty$ not 870 and 871 } 872 { t #1 #1 substring$ 873 duplicate$ "-" = 874 swap$ duplicate$ "," = 875 swap$ "+" = 876 or or 877 { #1 'multiresult := } 878 { t #2 global.max$ substring$ 't := } 879 if$ 880 } 881 while$ 882 multiresult 883 } 884 FUNCTION {format.pages} 885 { pages duplicate$ empty$ 'skip$ 886 { duplicate$ multi.page.check 887 { 888 bbl.pages swap$ 889 n.dashify 890 } 891 { 892 bbl.page swap$ 893 } 894 if$ 895 tie.or.space.prefix 896 "pages" bibinfo.check 897 * * 898 } 899 if$ 900 } 901 FUNCTION {format.journal.pages} 902 { pages duplicate$ empty$ 'pop$ 903 { swap$ duplicate$ empty$ 904 { pop$ pop$ format.pages } 905 { 906 ":" * 907 swap$ 908 n.dashify 909 "pages" bibinfo.check 910 * 911 } 912 if$ 913 } 914 if$ 915 } 916 FUNCTION {format.journal.eid} 917 { eid "eid" bibinfo.check 918 duplicate$ empty$ 'pop$ 919 { swap$ duplicate$ empty$ 'skip$ 920 { 921 ":" * 922 } 923 if$ 924 swap$ * 925 } 926 if$ 927 } 928 FUNCTION {format.vol.num.pages} 929 { volume field.or.null 930 duplicate$ empty$ 'skip$ 931 { 932 "volume" bibinfo.check 933 } 934 if$ 935 number "number" bibinfo.check duplicate$ empty$ 'skip$ 936 { 937 swap$ duplicate$ empty$ 938 { "there's a number but no volume in " cite$ * warning$ } 939 'skip$ 940 if$ 941 swap$ 942 "(" swap$ * ")" * 943 } 944 if$ * 945 eid empty$ 946 { format.journal.pages } 947 { format.journal.eid } 948 if$ 949 } 950 951 FUNCTION {format.chapter.pages} 952 { chapter empty$ 953 'format.pages 954 { type empty$ 955 { bbl.chapter } 956 { type "l" change.case$ 957 "type" bibinfo.check 958 } 959 if$ 960 chapter tie.or.space.prefix 961 "chapter" bibinfo.check 962 * * 963 pages empty$ 964 'skip$ 965 { ", " * format.pages * } 966 if$ 967 } 968 if$ 969 } 970 971 FUNCTION {format.booktitle} 972 { 973 booktitle "booktitle" bibinfo.check 974 } 975 FUNCTION {format.in.ed.booktitle} 976 { format.booktitle duplicate$ empty$ 'skip$ 977 { 978 editor "editor" format.names.ed duplicate$ empty$ 'pop$ 979 { 980 " " * 981 get.bbl.editor 982 "(" swap$ * ") " * 983 * swap$ 984 * } 985 if$ 986 word.in swap$ * 987 } 988 if$ 989 } 990 FUNCTION {format.thesis.type} 991 { type duplicate$ empty$ 992 'pop$ 993 { swap$ pop$ 994 "t" change.case$ "type" bibinfo.check 995 } 996 if$ 997 } 998 FUNCTION {format.tr.number} 999 { number "number" bibinfo.check 1000 type duplicate$ empty$ 1001 { pop$ bbl.techrep } 1002 'skip$ 1003 if$ 1004 "type" bibinfo.check 1005 swap$ duplicate$ empty$ 1006 { pop$ "t" change.case$ } 1007 { tie.or.space.prefix * * } 1008 if$ 1009 } 1010 FUNCTION {format.article.crossref} 1011 { 1012 word.in 1013 " \cite{" * crossref * "}" * 1014 } 1015 FUNCTION {format.book.crossref} 1016 { volume duplicate$ empty$ 1017 { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ 1018 pop$ word.in 1019 } 1020 { bbl.volume 1021 capitalize 1022 swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word * 1023 } 1024 if$ 1025 " \cite{" * crossref * "}" * 1026 } 1027 FUNCTION {format.incoll.inproc.crossref} 1028 { 1029 word.in 1030 " \cite{" * crossref * "}" * 1031 } 1032 FUNCTION {format.org.or.pub} 1033 { 't := 1034 "" 1035 address empty$ t empty$ and 1036 'skip$ 1037 { 1038 t empty$ 1039 { address "address" bibinfo.check * 1040 } 1041 { t * 1042 address empty$ 1043 'skip$ 1044 { ", " * address "address" bibinfo.check * } 1045 if$ 1046 } 1047 if$ 1048 } 1049 if$ 1050 } 1051 FUNCTION {format.publisher.address} 1052 { publisher "publisher" bibinfo.warn format.org.or.pub 1053 } 1054 1055 FUNCTION {format.organization.address} 1056 { organization "organization" bibinfo.check format.org.or.pub 1057 } 1058 1059 FUNCTION {article} 1060 { output.bibitem 1061 format.authors "author" output.check 1062 author format.key output 1063 format.date "year" output.check 1064 date.block 1065 format.title "title" output.check 1066 new.sentence 1067 crossref missing$ 1068 { 1069 journal 1070 remove.dots 1071 "journal" bibinfo.check 1072 "journal" output.check 1073 add.blank 1074 format.vol.num.pages output 1075 } 1076 { format.article.crossref output.nonnull 1077 format.pages output 1078 } 1079 if$ 1080 format.doi output 1081 format.url output 1082 format.note output 1083 format.eprint output 1084 fin.entry 1085 } 1086 FUNCTION {book} 1087 { output.bibitem 1088 author empty$ 1089 { format.editors "author and editor" output.check 1090 editor format.key output 1091 add.blank 1092 } 1093 { format.authors output.nonnull 1094 crossref missing$ 1095 { "author and editor" editor either.or.check } 1096 'skip$ 1097 if$ 1098 } 1099 if$ 1100 format.date "year" output.check 1101 date.block 1102 format.btitle "title" output.check 1103 crossref missing$ 1104 { format.bvolume output 1105 format.edition output 1106 new.sentence 1107 format.number.series output 1108 format.publisher.address output 1109 } 1110 { 1111 new.sentence 1112 format.book.crossref output.nonnull 1113 } 1114 if$ 1115 format.doi output 1116 format.url output 1117 format.note output 1118 format.eprint output 1119 fin.entry 1120 } 1121 FUNCTION {booklet} 1122 { output.bibitem 1123 format.authors output 1124 author format.key output 1125 format.date "year" output.check 1126 date.block 1127 format.title "title" output.check 1128 new.sentence 1129 howpublished "howpublished" bibinfo.check output 1130 address "address" bibinfo.check output 1131 format.doi output 1132 format.url output 1133 format.note output 1134 format.eprint output 1135 fin.entry 1136 } 1137 1138 FUNCTION {inbook} 1139 { output.bibitem 1140 author empty$ 1141 { format.editors "author and editor" output.check 1142 editor format.key output 1143 } 1144 { format.authors output.nonnull 1145 crossref missing$ 1146 { "author and editor" editor either.or.check } 1147 'skip$ 1148 if$ 1149 } 1150 if$ 1151 format.date "year" output.check 1152 date.block 1153 format.btitle "title" output.check 1154 crossref missing$ 1155 { 1156 format.bvolume output 1157 format.edition output 1158 format.publisher.address output 1159 format.chapter.pages "chapter and pages" output.check 1160 new.sentence 1161 format.number.series output 1162 } 1163 { 1164 format.chapter.pages "chapter and pages" output.check 1165 new.sentence 1166 format.book.crossref output.nonnull 1167 } 1168 if$ 1169 format.doi output 1170 format.url output 1171 format.note output 1172 format.eprint output 1173 fin.entry 1174 } 1175 1176 FUNCTION {incollection} 1177 { output.bibitem 1178 format.authors "author" output.check 1179 author format.key output 1180 format.date "year" output.check 1181 date.block 1182 format.title "title" output.check 1183 new.sentence 1184 crossref missing$ 1185 { format.in.ed.booktitle "booktitle" output.check 1186 format.bvolume output 1187 format.edition output 1188 format.number.series output 1189 format.publisher.address output 1190 format.chapter.pages output 1191 } 1192 { format.incoll.inproc.crossref output.nonnull 1193 format.chapter.pages output 1194 } 1195 if$ 1196 format.doi output 1197 format.url output 1198 format.note output 1199 format.eprint output 1200 fin.entry 1201 } 1202 FUNCTION {inproceedings} 1203 { output.bibitem 1204 format.authors "author" output.check 1205 author format.key output 1206 format.date "year" output.check 1207 date.block 1208 format.title "title" output.check 1209 new.sentence 1210 crossref missing$ 1211 { format.in.ed.booktitle "booktitle" output.check 1212 publisher empty$ 1213 { format.organization.address output } 1214 { organization "organization" bibinfo.check output 1215 format.publisher.address output 1216 } 1217 if$ 1218 format.bvolume output 1219 format.number.series output 1220 format.pages output 1221 } 1222 { format.incoll.inproc.crossref output.nonnull 1223 format.pages output 1224 } 1225 if$ 1226 format.doi output 1227 format.url output 1228 format.note output 1229 format.eprint output 1230 fin.entry 1231 } 1232 FUNCTION {conference} { inproceedings } 1233 FUNCTION {manual} 1234 { output.bibitem 1235 format.authors output 1236 author format.key output 1237 format.date "year" output.check 1238 date.block 1239 format.btitle "title" output.check 1240 new.sentence 1241 organization "organization" bibinfo.check output 1242 address "address" bibinfo.check output 1243 format.edition output 1244 format.doi output 1245 format.url output 1246 format.note output 1247 format.eprint output 1248 fin.entry 1249 } 1250 1251 FUNCTION {mastersthesis} 1252 { output.bibitem 1253 format.authors "author" output.check 1254 author format.key output 1255 format.date "year" output.check 1256 date.block 1257 format.title 1258 "title" output.check 1259 new.sentence 1260 bbl.mthesis format.thesis.type output.nonnull 1261 school "school" bibinfo.warn output 1262 address "address" bibinfo.check output 1263 format.doi output 1264 format.url output 1265 format.note output 1266 format.eprint output 1267 fin.entry 1268 } 1269 1270 FUNCTION {misc} 1271 { output.bibitem 1272 format.authors output 1273 author format.key output 1274 format.date "year" output.check 1275 date.block 1276 format.title output 1277 new.sentence 1278 howpublished "howpublished" bibinfo.check output 1279 format.doi output 1280 format.url output 1281 format.note output 1282 format.eprint output 1283 fin.entry 1284 } 1285 FUNCTION {phdthesis} 1286 { output.bibitem 1287 format.authors "author" output.check 1288 author format.key output 1289 format.date "year" output.check 1290 date.block 1291 format.title 1292 "title" output.check 1293 new.sentence 1294 bbl.phdthesis format.thesis.type output.nonnull 1295 school "school" bibinfo.warn output 1296 address "address" bibinfo.check output 1297 format.doi output 1298 format.url output 1299 format.note output 1300 format.eprint output 1301 fin.entry 1302 } 1303 1304 FUNCTION {proceedings} 1305 { output.bibitem 1306 format.editors output 1307 editor format.key output 1308 format.date "year" output.check 1309 date.block 1310 format.btitle "title" output.check 1311 format.bvolume output 1312 format.number.series output 1313 publisher empty$ 1314 { format.organization.address output } 1315 { organization "organization" bibinfo.check output 1316 format.publisher.address output 1317 } 1318 if$ 1319 format.doi output 1320 format.url output 1321 format.note output 1322 format.eprint output 1323 fin.entry 1324 } 1325 1326 FUNCTION {techreport} 1327 { output.bibitem 1328 format.authors "author" output.check 1329 author format.key output 1330 format.date "year" output.check 1331 date.block 1332 format.title 1333 "title" output.check 1334 new.sentence 1335 format.tr.number output.nonnull 1336 institution "institution" bibinfo.warn output 1337 address "address" bibinfo.check output 1338 format.doi output 1339 format.url output 1340 format.note output 1341 format.eprint output 1342 fin.entry 1343 } 1344 1345 FUNCTION {unpublished} 1346 { output.bibitem 1347 format.authors "author" output.check 1348 author format.key output 1349 format.date "year" output.check 1350 date.block 1351 format.title "title" output.check 1352 format.doi output 1353 format.url output 1354 format.note "note" output.check 1355 format.eprint output 1356 fin.entry 1357 } 1358 1359 FUNCTION {default.type} { misc } 1360 READ 1361 FUNCTION {sortify} 1362 { purify$ 1363 "l" change.case$ 1364 } 1365 INTEGERS { len } 1366 FUNCTION {chop.word} 1367 { 's := 1368 'len := 1369 s #1 len substring$ = 1370 { s len #1 + global.max$ substring$ } 1371 's 1372 if$ 1373 } 1374 FUNCTION {format.lab.names} 1375 { 's := 1376 "" 't := 1377 s #1 "{vv~}{ll}" format.name$ 1378 s num.names$ duplicate$ 1379 #2 > 1380 { pop$ 1381 " " * bbl.etal * 1382 } 1383 { #2 < 1384 'skip$ 1385 { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = 1386 { 1387 " " * bbl.etal * 1388 } 1389 { bbl.and space.word * s #2 "{vv~}{ll}" format.name$ 1390 * } 1391 if$ 1392 } 1393 if$ 1394 } 1395 if$ 1396 } 1397 1398 FUNCTION {author.key.label} 1399 { author empty$ 1400 { key empty$ 1401 { cite$ #1 #3 substring$ } 1402 'key 1403 if$ 1404 } 1405 { author format.lab.names } 1406 if$ 1407 } 1408 1409 FUNCTION {author.editor.key.label} 1410 { author empty$ 1411 { editor empty$ 1412 { key empty$ 1413 { cite$ #1 #3 substring$ } 1414 'key 1415 if$ 1416 } 1417 { editor format.lab.names } 1418 if$ 1419 } 1420 { author format.lab.names } 1421 if$ 1422 } 1423 1424 FUNCTION {editor.key.label} 1425 { editor empty$ 1426 { key empty$ 1427 { cite$ #1 #3 substring$ } 1428 'key 1429 if$ 1430 } 1431 { editor format.lab.names } 1432 if$ 1433 } 1434 1435 FUNCTION {calc.short.authors} 1436 { type$ "book" = 1437 type$ "inbook" = 1438 or 1439 'author.editor.key.label 1440 { type$ "proceedings" = 1441 'editor.key.label 1442 'author.key.label 1443 if$ 1444 } 1445 if$ 1446 'short.list := 1447 } 1448 1449 FUNCTION {calc.label} 1450 { calc.short.authors 1451 short.list 1452 "(" 1453 * 1454 year duplicate$ empty$ 1455 { pop$ "????" } 1456 'skip$ 1457 if$ 1458 * 1459 'label := 1460 } 1461 1462 FUNCTION {sort.format.names} 1463 { 's := 1464 #1 'nameptr := 1465 "" 1466 s num.names$ 'numnames := 1467 numnames 'namesleft := 1468 { namesleft #0 > } 1469 { s nameptr 1470 "{ll{ }}{ f{ }}{ jj{ }}" 1471 format.name$ 't := 1472 nameptr #1 > 1473 { 1474 " " * 1475 namesleft #1 = t "others" = and 1476 { "zzzzz" * } 1477 { numnames #2 > nameptr #2 = and 1478 { "zz" * year field.or.null * " " * } 1479 'skip$ 1480 if$ 1481 t sortify * 1482 } 1483 if$ 1484 } 1485 { t sortify * } 1486 if$ 1487 nameptr #1 + 'nameptr := 1488 namesleft #1 - 'namesleft := 1489 } 1490 while$ 1491 } 1492 1493 FUNCTION {sort.format.title} 1494 { 't := 1495 "A " #2 1496 "An " #3 1497 "The " #4 t chop.word 1498 chop.word 1499 chop.word 1500 sortify 1501 #1 global.max$ substring$ 1502 } 1503 FUNCTION {author.sort} 1504 { author empty$ 1505 { key empty$ 1506 { "to sort, need author or key in " cite$ * warning$ 1507 "" 1508 } 1509 { key sortify } 1510 if$ 1511 } 1512 { author sort.format.names } 1513 if$ 1514 } 1515 FUNCTION {author.editor.sort} 1516 { author empty$ 1517 { editor empty$ 1518 { key empty$ 1519 { "to sort, need author, editor, or key in " cite$ * warning$ 1520 "" 1521 } 1522 { key sortify } 1523 if$ 1524 } 1525 { editor sort.format.names } 1526 if$ 1527 } 1528 { author sort.format.names } 1529 if$ 1530 } 1531 FUNCTION {editor.sort} 1532 { editor empty$ 1533 { key empty$ 1534 { "to sort, need editor or key in " cite$ * warning$ 1535 "" 1536 } 1537 { key sortify } 1538 if$ 1539 } 1540 { editor sort.format.names } 1541 if$ 1542 } 1543 FUNCTION {presort} 1544 { calc.label 1545 label sortify 1546 " " 1547 * 1548 type$ "book" = 1549 type$ "inbook" = 1550 or 1551 'author.editor.sort 1552 { type$ "proceedings" = 1553 'editor.sort 1554 'author.sort 1555 if$ 1556 } 1557 if$ 1558 #1 entry.max$ substring$ 1559 'sort.label := 1560 sort.label 1561 * 1562 " " 1563 * 1564 title field.or.null 1565 sort.format.title 1566 * 1567 #1 entry.max$ substring$ 1568 'sort.key$ := 1569 } 1570 1571 ITERATE {presort} 1572 SORT 1573 STRINGS { last.label next.extra } 1574 INTEGERS { last.extra.num number.label } 1575 FUNCTION {initialize.extra.label.stuff} 1576 { #0 int.to.chr$ 'last.label := 1577 "" 'next.extra := 1578 #0 'last.extra.num := 1579 #0 'number.label := 1580 } 1581 FUNCTION {forward.pass} 1582 { last.label label = 1583 { last.extra.num #1 + 'last.extra.num := 1584 last.extra.num int.to.chr$ 'extra.label := 1585 } 1586 { "a" chr.to.int$ 'last.extra.num := 1587 "" 'extra.label := 1588 label 'last.label := 1589 } 1590 if$ 1591 number.label #1 + 'number.label := 1592 } 1593 FUNCTION {reverse.pass} 1594 { next.extra "b" = 1595 { "a" 'extra.label := } 1596 'skip$ 1597 if$ 1598 extra.label 'next.extra := 1599 extra.label 1600 duplicate$ empty$ 1601 'skip$ 1602 { "{\natexlab{" swap$ * "}}" * } 1603 if$ 1604 'extra.label := 1605 label extra.label * 'label := 1606 } 1607 EXECUTE {initialize.extra.label.stuff} 1608 ITERATE {forward.pass} 1609 REVERSE {reverse.pass} 1610 FUNCTION {bib.sort.order} 1611 { sort.label 1612 " " 1613 * 1614 year field.or.null sortify 1615 * 1616 " " 1617 * 1618 title field.or.null 1619 sort.format.title 1620 * 1621 #1 entry.max$ substring$ 1622 'sort.key$ := 1623 } 1624 ITERATE {bib.sort.order} 1625 SORT 1626 FUNCTION {begin.bib} 1627 { preamble$ empty$ 1628 'skip$ 1629 { preamble$ write$ newline$ } 1630 if$ 1631 "\begin{thebibliography}{" number.label int.to.str$ * "}" * 1632 write$ newline$ 1633 "\providecommand{\natexlab}[1]{#1}" 1634 write$ newline$ 1635 "\providecommand{\url}[1]{{#1}}" 1636 write$ newline$ 1637 "\providecommand{\urlprefix}{URL }" 1638 write$ newline$ 1639 "\expandafter\ifx\csname urlstyle\endcsname\relax" 1640 write$ newline$ 1641 " \providecommand{\doi}[1]{DOI~\discretionary{}{}{}#1}\else" 1642 write$ newline$ 1643 " \providecommand{\doi}{DOI~\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi" 1644 write$ newline$ 1645 "\providecommand{\eprint}[2][]{\url{#2}}" 1646 write$ newline$ 1647 } 1648 EXECUTE {begin.bib} 1649 EXECUTE {init.state.consts} 1650 ITERATE {call.type$} 1651 FUNCTION {end.bib} 1652 { newline$ 1653 "\end{thebibliography}" write$ newline$ 1654 } 1655 EXECUTE {end.bib} 1656 %% End of customized bst file 1657 %% 1658 %% End of file `spbasic.bst'. 1659