]> AND Private Git Repository - 16dcc.git/blob - elsarticle-harv.bst
Logo AND Algorithmique Numérique Distribuée

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