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