elsarticle/elsarticle-harv.bst
author Madarasi Peter
Wed, 30 Nov 2016 16:52:36 +0100
changeset 22 1a4874982d84
permissions -rw-r--r--
outline, fine tune
     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'.