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