]> AND Private Git Repository - bibliographie.git/blob - styles/spmpsci.bst
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
resf
[bibliographie.git] / styles / spmpsci.bst
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