source: anuga_work/publications/boxing_day_validation_2008/spmpsci.bst @ 7465

Last change on this file since 7465 was 7220, checked in by jakeman, 15 years ago

John Jakeman: Made minor changes to validation study and added .bst file necessary for Ocean Dynamics Journal format

File size: 29.4 KB
Line 
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
45ENTRY
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 }
74INTEGERS { output.state before.all mid.sentence after.sentence after.block }
75FUNCTION {init.state.consts}
76{ #0 'before.all :=
77  #1 'mid.sentence :=
78  #2 'after.sentence :=
79  #3 'after.block :=
80}
81STRINGS { s t}
82FUNCTION {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}
102FUNCTION {output}
103{ duplicate$ empty$
104    'pop$
105    'output.nonnull
106  if$
107}
108FUNCTION {output.check}
109{ 't :=
110  duplicate$ empty$
111    { pop$ "empty " t * " in " * cite$ * warning$ }
112    'output.nonnull
113  if$
114}
115FUNCTION {fin.entry}
116{ duplicate$ empty$
117    'pop$
118    'write$
119  if$
120  newline$
121}
122
123FUNCTION {new.block}
124{ output.state before.all =
125    'skip$
126    { after.block 'output.state := }
127  if$
128}
129FUNCTION {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}
139FUNCTION {add.blank}
140{  " " * before.all 'output.state :=
141}
142
143FUNCTION {add.colon}
144{ duplicate$ empty$
145    'skip$
146    { ":" * add.blank }
147  if$
148}
149
150FUNCTION {date.block}
151{
152  new.block
153}
154
155FUNCTION {not}
156{   { #0 }
157    { #1 }
158  if$
159}
160FUNCTION {and}
161{   'skip$
162    { pop$ #0 }
163  if$
164}
165FUNCTION {or}
166{   { pop$ #1 }
167    'skip$
168  if$
169}
170FUNCTION {new.block.checka}
171{ empty$
172    'skip$
173    'new.block
174  if$
175}
176FUNCTION {new.block.checkb}
177{ empty$
178  swap$ empty$
179  and
180    'skip$
181    'new.block
182  if$
183}
184FUNCTION {new.sentence.checka}
185{ empty$
186    'skip$
187    'new.sentence
188  if$
189}
190FUNCTION {new.sentence.checkb}
191{ empty$
192  swap$ empty$
193  and
194    'skip$
195    'new.sentence
196  if$
197}
198FUNCTION {field.or.null}
199{ duplicate$ empty$
200    { pop$ "" }
201    'skip$
202  if$
203}
204FUNCTION {emphasize}
205{ duplicate$ empty$
206    { pop$ "" }
207    { "\emph{" swap$ * "}" * }
208  if$
209}
210FUNCTION {bolden}
211{ duplicate$ empty$
212    { pop$ "" }
213    { "\textbf{" swap$ * "}" * }
214  if$
215}
216FUNCTION {tie.or.space.prefix}
217{ duplicate$ text.length$ #3 <
218    { "~" }
219    { " " }
220  if$
221  swap$
222}
223
224FUNCTION {capitalize}
225{ "u" change.case$ "t" change.case$ }
226
227FUNCTION {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
232FUNCTION {bbl.and}
233{ "and"}
234
235FUNCTION {bbl.etal}
236{ "et~al." }
237
238FUNCTION {bbl.editors}
239{ "eds." }
240
241FUNCTION {bbl.editor}
242{ "ed." }
243
244FUNCTION {bbl.edby}
245{ "edited by" }
246
247FUNCTION {bbl.edition}
248{ "edn." }
249
250FUNCTION {bbl.volume}
251{ "vol." }
252
253FUNCTION {bbl.of}
254{ "of" }
255
256FUNCTION {bbl.number}
257{ "no." }
258
259FUNCTION {bbl.nr}
260{ "no." }
261
262FUNCTION {bbl.in}
263{ "in" }
264
265FUNCTION {bbl.pages}
266{ "pp." }
267
268FUNCTION {bbl.page}
269{ "p." }
270
271FUNCTION {bbl.chapter}
272{ "chap." }
273
274FUNCTION {bbl.techrep}
275{ "Tech. Rep." }
276
277FUNCTION {bbl.mthesis}
278{ "Master's thesis" }
279
280FUNCTION {bbl.phdthesis}
281{ "Ph.D. thesis" }
282
283MACRO {jan} {"Jan."}
284
285MACRO {feb} {"Feb."}
286
287MACRO {mar} {"Mar."}
288
289MACRO {apr} {"Apr."}
290
291MACRO {may} {"May"}
292
293MACRO {jun} {"Jun."}
294
295MACRO {jul} {"Jul."}
296
297MACRO {aug} {"Aug."}
298
299MACRO {sep} {"Sep."}
300
301MACRO {oct} {"Oct."}
302
303MACRO {nov} {"Nov."}
304
305MACRO {dec} {"Dec."}
306
307MACRO {acmcs} {"ACM Comput. Surv."}
308
309MACRO {acta} {"Acta Inf."}
310
311MACRO {cacm} {"Commun. ACM"}
312
313MACRO {ibmjrd} {"IBM J. Res. Dev."}
314
315MACRO {ibmsj} {"IBM Syst.~J."}
316
317MACRO {ieeese} {"IEEE Trans. Software Eng."}
318
319MACRO {ieeetc} {"IEEE Trans. Comput."}
320
321MACRO {ieeetcad}
322 {"IEEE Trans. Comput. Aid. Des."}
323
324MACRO {ipl} {"Inf. Process. Lett."}
325
326MACRO {jacm} {"J.~ACM"}
327
328MACRO {jcss} {"J.~Comput. Syst. Sci."}
329
330MACRO {scp} {"Sci. Comput. Program."}
331
332MACRO {sicomp} {"SIAM J. Comput."}
333
334MACRO {tocs} {"ACM Trans. Comput. Syst."}
335
336MACRO {tods} {"ACM Trans. Database Syst."}
337
338MACRO {tog} {"ACM Trans. Graphic."}
339
340MACRO {toms} {"ACM Trans. Math. Software"}
341
342MACRO {toois} {"ACM Trans. Office Inf. Syst."}
343
344MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."}
345
346MACRO {tcs} {"Theor. Comput. Sci."}
347
348FUNCTION {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}
366FUNCTION {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}
384FUNCTION {format.url}
385{ url empty$
386    { "" }
387    { "\urlprefix\url{" url * "}" * }
388  if$
389}
390
391STRINGS  { bibinfo}
392INTEGERS { nameptr namesleft numnames }
393
394FUNCTION {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}
435FUNCTION {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}
478FUNCTION {format.authors}
479{ author "author" format.names
480}
481FUNCTION {get.bbl.editor}
482{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
483
484FUNCTION {format.editors}
485{ editor "editor" format.names duplicate$ empty$ 'skip$
486    {
487      " " *
488      get.bbl.editor
489   "(" swap$ * ")" *
490      *
491    }
492  if$
493}
494FUNCTION {format.doi}
495{ doi "doi" bibinfo.check
496  duplicate$ empty$ 'skip$
497    {
498      new.block
499      "\doi{" swap$ * "}" *
500    }
501  if$
502}
503FUNCTION {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
522FUNCTION {format.title}
523{ title
524  duplicate$ empty$ 'skip$
525    { "t" change.case$ }
526  if$
527  "title" bibinfo.check
528}
529FUNCTION {output.bibitem}
530{ newline$
531  "\bibitem{" write$
532  cite$ write$
533  "}" write$
534  newline$
535  ""
536  before.all 'output.state :=
537}
538
539FUNCTION {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}
551FUNCTION {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}
572FUNCTION {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
599FUNCTION {word.in}
600{ bbl.in capitalize
601  ":" *
602  " " * }
603
604FUNCTION {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}
631FUNCTION {format.btitle}
632{ title "title" bibinfo.check
633  duplicate$ empty$ 'skip$
634    {
635    }
636  if$
637}
638FUNCTION {either.or.check}
639{ empty$
640    'pop$
641    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
642  if$
643}
644FUNCTION {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}
657FUNCTION {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
679FUNCTION {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}
691INTEGERS { multiresult }
692FUNCTION {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}
711FUNCTION {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}
728FUNCTION {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}
743FUNCTION {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}
755FUNCTION {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
779FUNCTION {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
799FUNCTION {format.booktitle}
800{
801  booktitle "booktitle" bibinfo.check
802}
803FUNCTION {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}
821FUNCTION {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}
830FUNCTION {format.thesis.type}
831{ type duplicate$ empty$
832    'pop$
833    { swap$ pop$
834      "t" change.case$ "type" bibinfo.check
835    }
836  if$
837}
838FUNCTION {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}
850FUNCTION {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}
863FUNCTION {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}
893FUNCTION {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}
922FUNCTION {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}
942FUNCTION {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}
961FUNCTION {format.publisher.address}
962{ publisher "publisher" bibinfo.warn format.org.or.pub
963}
964
965FUNCTION {format.organization.address}
966{ organization "organization" bibinfo.check format.org.or.pub
967}
968
969FUNCTION {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}
996FUNCTION {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}
1033FUNCTION {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
1051FUNCTION {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
1092FUNCTION {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}
1119FUNCTION {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}
1150FUNCTION {conference} { inproceedings }
1151FUNCTION {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
1191FUNCTION {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
1211FUNCTION {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}
1228FUNCTION {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
1248FUNCTION {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
1290FUNCTION {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
1310FUNCTION {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
1325FUNCTION {default.type} { misc }
1326READ
1327FUNCTION {sortify}
1328{ purify$
1329  "l" change.case$
1330}
1331INTEGERS { len }
1332FUNCTION {chop.word}
1333{ 's :=
1334  'len :=
1335  s #1 len substring$ =
1336    { s len #1 + global.max$ substring$ }
1337    's
1338  if$
1339}
1340FUNCTION {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
1366FUNCTION {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}
1376FUNCTION {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}
1388FUNCTION {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}
1404FUNCTION {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}
1420FUNCTION {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}
1436FUNCTION {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}
1463ITERATE {presort}
1464SORT
1465STRINGS { longest.label }
1466INTEGERS { number.label longest.label.width }
1467FUNCTION {initialize.longest.label}
1468{ "" 'longest.label :=
1469  #1 'number.label :=
1470  #0 'longest.label.width :=
1471}
1472FUNCTION {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}
1482EXECUTE {initialize.longest.label}
1483ITERATE {longest.label.pass}
1484FUNCTION {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}
1502EXECUTE {begin.bib}
1503EXECUTE {init.state.consts}
1504ITERATE {call.type$}
1505FUNCTION {end.bib}
1506{ newline$
1507  "\end{thebibliography}" write$ newline$
1508}
1509EXECUTE {end.bib}
1510%% End of customized bst file
1511%%
1512%% End of file `spmpsci.bst'.
Note: See TracBrowser for help on using the repository browser.