elsarticle/elsarticle-harv.bst
changeset 21 54e95bfead8c
equal deleted inserted replaced
-1:000000000000 0:4114b0a3e565
       
     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'.