]> AND Private Git Repository - canny.git/blob - spbasic.bst
Logo AND Algorithmique Numérique Distribuée

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