Skip to content
Snippets Groups Projects
Select Git revision
  • b5531ab73c8340575f3f170971e36292c60fcea5
  • master default protected
2 results

splncs04.bst

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    splncs04.bst 31.39 KiB
    %% BibTeX bibliography style `splncs03'
    %%
    %% BibTeX bibliography style for use with numbered references in
    %% Springer Verlag's "Lecture Notes in Computer Science" series.
    %% (See Springer's documentation for llncs.cls for
    %% more details of the suggested reference format.)  Note that this
    %% file will not work for author-year style citations.
    %%
    %% Use \documentclass{llncs} and \bibliographystyle{splncs03}, and cite
    %% a reference with (e.g.) \cite{smith77} to get a "[1]" in the text.
    %%
    %% This file comes to you courtesy of Maurizio "Titto" Patrignani of
    %% Dipartimento di Informatica e Automazione Universita' Roma Tre
    %%
    %% ================================================================================================
    %% This was file `titto-lncs-02.bst' produced on Wed Apr 1, 2009
    %% Edited by hand by titto based on `titto-lncs-01.bst' (see below)
    %%
    %% CHANGES (with respect to titto-lncs-01.bst):
    %% - Removed the call to \urlprefix (thus no "URL" string is added to the output)
    %% ================================================================================================
    %% This was file `titto-lncs-01.bst' produced on Fri Aug 22, 2008
    %% Edited by hand by titto based on `titto.bst' (see below)
    %%
    %% CHANGES (with respect to titto.bst):
    %% - Removed the "capitalize" command for editors string "(eds.)" and "(ed.)"
    %% - Introduced the functions titto.bbl.pages and titto.bbl.page for journal pages (without "pp.")
    %% - Added a new.sentence command to separate with a dot booktitle and series in the inproceedings
    %% - Commented all new.block commands before urls and notes (to separate them with a comma)
    %% - Introduced the functions titto.bbl.volume for handling journal volumes (without "vol." label)
    %% - Used for editors the same name conventions used for authors (see function format.in.ed.booktitle)
    %% - Removed a \newblock to avoid long spaces between title and "In: ..."
    %% - Added function titto.space.prefix to add a space instead of "~" after the (removed) "vol." label
    %% - Added doi
    %% ================================================================================================
    %% This was file `titto.bst',
    %% generated with the docstrip utility.
    %%
    %% The original source files were:
    %%
    %% merlin.mbs  (with options: `vonx,nm-rvvc,yr-par,jttl-rm,volp-com,jwdpg,jwdvol,numser,ser-vol,jnm-x,btit-rm,bt-rm,edparxc,bkedcap,au-col,in-col,fin-bare,pp,ed,abr,mth-bare,xedn,jabr,and-com,and-com-ed,xand,url,url-blk,em-x,nfss,')
    %% ----------------------------------------
    %% *** Tentative .bst file for Springer LNCS ***
    %%
    %% Copyright 1994-2007 Patrick W Daly
     % ===============================================================
     % IMPORTANT NOTICE:
     % This bibliographic style (bst) file has been generated from one or
     % more master bibliographic style (mbs) files, listed above.
     %
     % This generated file can be redistributed and/or modified under the terms
     % of the LaTeX Project Public License Distributed from CTAN
     % archives in directory macros/latex/base/lppl.txt; either
     % version 1 of the License, or any later version.
     % ===============================================================
     % Name and version information of the main mbs file:
     % \ProvidesFile{merlin.mbs}[2007/04/24 4.20 (PWD, AO, DPC)]
     %   For use with BibTeX version 0.99a or later
     %-------------------------------------------------------------------
     % This bibliography style file is intended for texts in ENGLISH
     % This is a numerical citation style, and as such is standard LaTeX.
     % It requires no extra package to interface to the main text.
     % The form of the \bibitem entries is
     %   \bibitem{key}...
     % Usage of \cite is as follows:
     %   \cite{key} ==>>          [#]
     %   \cite[chap. 2]{key} ==>> [#, chap. 2]
     % where # is a number determined by the ordering in the reference list.
     % The order in the reference list is alphabetical by authors.
     %---------------------------------------------------------------------
    
    ENTRY
      { address
        author
        booktitle
        chapter
        doi
        edition
        editor
        eid
        howpublished
        institution
        journal
        key
        month
        note
        number
        organization
        pages
        publisher
        school
        series
        title
        type
        url
        volume
        year
      }
      {}
      { label }
    INTEGERS { output.state before.all mid.sentence after.sentence after.block }
    FUNCTION {init.state.consts}
    { #0 'before.all :=
      #1 'mid.sentence :=
      #2 'after.sentence :=
      #3 'after.block :=
    }
    STRINGS { s t}
    FUNCTION {output.nonnull}
    { 's :=
      output.state mid.sentence =
        { ", " * write$ }
        { output.state after.block =
            { add.period$ write$
    %          newline$
    %          "\newblock " write$  % removed for titto-lncs-01
              " " write$            % to avoid long spaces between title and "In: ..."
            }
            { output.state before.all =
                'write$
                { add.period$ " " * write$ }
              if$
            }
          if$
          mid.sentence 'output.state :=
        }
      if$
      s
    }
    FUNCTION {output}
    { duplicate$ empty$
        'pop$
        'output.nonnull
      if$
    }
    FUNCTION {output.check}
    { 't :=
      duplicate$ empty$
        { pop$ "empty " t * " in " * cite$ * warning$ }
        'output.nonnull
      if$
    }
    FUNCTION {fin.entry}
    { duplicate$ empty$
        'pop$
        'write$
      if$
      newline$
    }
    
    FUNCTION {new.block}
    { output.state before.all =
        'skip$
        { after.block 'output.state := }
      if$
    }
    FUNCTION {new.sentence}
    { output.state after.block =
        'skip$
        { output.state before.all =
            'skip$
            { after.sentence 'output.state := }
          if$
        }
      if$
    }
    FUNCTION {add.blank}
    {  " " * before.all 'output.state :=
    }
    
    
    FUNCTION {add.colon}
    { duplicate$ empty$
        'skip$
        { ":" * add.blank }
      if$
    }
    
    FUNCTION {date.block}
    {
      new.block
    }
    
    FUNCTION {not}
    {   { #0 }
        { #1 }
      if$
    }
    FUNCTION {and}
    {   'skip$
        { pop$ #0 }
      if$
    }
    FUNCTION {or}
    {   { pop$ #1 }
        'skip$
      if$
    }
    STRINGS {z}
    FUNCTION {remove.dots}
    { 'z :=
      ""
      { z empty$ not }
      { z #1 #1 substring$
        z #2 global.max$ substring$ 'z :=
        duplicate$ "." = 'pop$
          { * }
        if$
      }
      while$
    }
    FUNCTION {new.block.checka}
    { empty$
        'skip$
        'new.block
      if$
    }
    FUNCTION {new.block.checkb}
    { empty$
      swap$ empty$
      and
        'skip$
        'new.block
      if$
    }
    FUNCTION {new.sentence.checka}
    { empty$
        'skip$
        'new.sentence
      if$
    }
    FUNCTION {new.sentence.checkb}
    { empty$
      swap$ empty$
      and
        'skip$
        'new.sentence
      if$
    }
    FUNCTION {field.or.null}
    { duplicate$ empty$
        { pop$ "" }
        'skip$
      if$
    }
    FUNCTION {emphasize}
    { skip$ }
    
    FUNCTION {embolden}
    { duplicate$ empty$
    { pop$ "" }
    { "\textbf{" swap$ * "}" * }
    if$
    }
    FUNCTION {tie.or.space.prefix}
    { duplicate$ text.length$ #5 <
        { "~" }
        { " " }
      if$
      swap$
    }
    FUNCTION {titto.space.prefix} %  always introduce a space
    { duplicate$ text.length$ #3 <
        { " " }
        { " " }
      if$
      swap$
    }
    
    
    FUNCTION {capitalize}
    { "u" change.case$ "t" change.case$ }
    
    FUNCTION {space.word}
    { " " swap$ * " " * }
     % Here are the language-specific definitions for explicit words.
     % Each function has a name bbl.xxx where xxx is the English word.
     % The language selected here is ENGLISH
    FUNCTION {bbl.and}
    { "and"}
    
    FUNCTION {bbl.etal}
    { "et~al." }
    
    FUNCTION {bbl.editors}
    { "eds." }
    
    FUNCTION {bbl.editor}
    { "ed." }
    
    FUNCTION {bbl.edby}
    { "edited by" }
    
    FUNCTION {bbl.edition}
    { "edn." }
    
    FUNCTION {bbl.volume}
    { "vol." }
    
    FUNCTION {titto.bbl.volume} % for handling journals
    { "" }
    
    FUNCTION {bbl.of}
    { "of" }
    
    FUNCTION {bbl.number}
    { "no." }
    
    FUNCTION {bbl.nr}
    { "no." }
    
    FUNCTION {bbl.in}
    { "in" }
    
    FUNCTION {bbl.pages}
    { "pp." }
    
    FUNCTION {bbl.page}
    { "p." }
    
    FUNCTION {titto.bbl.pages} % for journals
    { "" }
    
    FUNCTION {titto.bbl.page}  % for journals
    { "" }
    
    FUNCTION {bbl.chapter}
    { "chap." }
    
    FUNCTION {bbl.techrep}
    { "Tech. Rep." }
    
    FUNCTION {bbl.mthesis}
    { "Master's thesis" }
    
    FUNCTION {bbl.phdthesis}
    { "Ph.D. thesis" }
    
    MACRO {jan} {"Jan."}
    
    MACRO {feb} {"Feb."}
    
    MACRO {mar} {"Mar."}
    
    MACRO {apr} {"Apr."}
    
    MACRO {may} {"May"}
    
    MACRO {jun} {"Jun."}
    
    MACRO {jul} {"Jul."}
    
    MACRO {aug} {"Aug."}
    
    MACRO {sep} {"Sep."}
    
    MACRO {oct} {"Oct."}
    
    MACRO {nov} {"Nov."}
    
    MACRO {dec} {"Dec."}
    
    MACRO {acmcs} {"ACM Comput. Surv."}
    
    MACRO {acta} {"Acta Inf."}
    
    MACRO {cacm} {"Commun. ACM"}
    
    MACRO {ibmjrd} {"IBM J. Res. Dev."}
    
    MACRO {ibmsj} {"IBM Syst.~J."}
    
    MACRO {ieeese} {"IEEE Trans. Software Eng."}
    
    MACRO {ieeetc} {"IEEE Trans. Comput."}
    
    MACRO {ieeetcad}
     {"IEEE Trans. Comput. Aid. Des."}
    
    MACRO {ipl} {"Inf. Process. Lett."}
    
    MACRO {jacm} {"J.~ACM"}
    
    MACRO {jcss} {"J.~Comput. Syst. Sci."}
    
    MACRO {scp} {"Sci. Comput. Program."}
    
    MACRO {sicomp} {"SIAM J. Comput."}
    
    MACRO {tocs} {"ACM Trans. Comput. Syst."}
    
    MACRO {tods} {"ACM Trans. Database Syst."}
    
    MACRO {tog} {"ACM Trans. Graphic."}
    
    MACRO {toms} {"ACM Trans. Math. Software"}
    
    MACRO {toois} {"ACM Trans. Office Inf. Syst."}
    
    MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."}
    
    MACRO {tcs} {"Theor. Comput. Sci."}
    
    FUNCTION {bibinfo.check}
    { swap$
      duplicate$ missing$
        {
          pop$ pop$
          ""
        }
        { duplicate$ empty$
            {
              swap$ pop$
            }
            { swap$
              pop$
            }
          if$
        }
      if$
    }
    FUNCTION {bibinfo.warn}
    { swap$
      duplicate$ missing$
        {
          swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
          ""
        }
        { duplicate$ empty$
            {
              swap$ "empty " swap$ * " in " * cite$ * warning$
            }
            { swap$
              pop$
            }
          if$
        }
      if$
    }
    FUNCTION {format.url}
    { url empty$
        { "" }
    %    { "\urlprefix\url{" url * "}" * }
        { "\url{" url * "}" * }  % changed in titto-lncs-02.bst
      if$
    }
    
    FUNCTION {format.doi} % added in splncs04.bst
    { doi empty$
         { "" }
         { after.block 'output.state :=
           "\doi{" doi * "}" * }
      if$
    }
    
    INTEGERS { nameptr namesleft numnames }
    
    
    STRINGS  { bibinfo}
    
    FUNCTION {format.names}
    { 'bibinfo :=
      duplicate$ empty$ 'skip$ {
      's :=
      "" 't :=
      #1 'nameptr :=
      s num.names$ 'numnames :=
      numnames 'namesleft :=
        { namesleft #0 > }
        { s nameptr
          "{vv~}{ll}{, jj}{, f{.}.}"
          format.name$
          bibinfo bibinfo.check
          't :=
          nameptr #1 >
            {
              namesleft #1 >
                { ", " * t * }
                {
                  s nameptr "{ll}" format.name$ duplicate$ "others" =
                    { 't := }
                    { pop$ }
                  if$
                  "," *
                  t "others" =
                    {
                      " " * bbl.etal *
                    }
                    { " " * t * }
                  if$
                }
              if$
            }
            't
          if$
          nameptr #1 + 'nameptr :=
          namesleft #1 - 'namesleft :=
        }
      while$
      } if$
    }
    FUNCTION {format.names.ed}
    {
      'bibinfo :=
      duplicate$ empty$ 'skip$ {
      's :=
      "" 't :=
      #1 'nameptr :=
      s num.names$ 'numnames :=
      numnames 'namesleft :=
        { namesleft #0 > }
        { s nameptr
          "{f{.}.~}{vv~}{ll}{ jj}"
          format.name$
          bibinfo bibinfo.check
          't :=
          nameptr #1 >
            {
              namesleft #1 >
                { ", " * t * }
                {
                  s nameptr "{ll}" format.name$ duplicate$ "others" =
                    { 't := }
                    { pop$ }
                  if$
                  "," *
                  t "others" =
                    {
    
                      " " * bbl.etal *
                    }
                    { " " * t * }
                  if$
                }
              if$
            }
            't
          if$
          nameptr #1 + 'nameptr :=
          namesleft #1 - 'namesleft :=
        }
      while$
      } if$
    }
    FUNCTION {format.authors}
    { author "author" format.names
    }
    FUNCTION {get.bbl.editor}
    { editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
    
    FUNCTION {format.editors}
    { editor "editor" format.names duplicate$ empty$ 'skip$
        {
          " " *
          get.bbl.editor
    %      capitalize
       "(" swap$ * ")" *
          *
        }
      if$
    }
    FUNCTION {format.note}
    {
     note empty$
        { "" }
        { note #1 #1 substring$
          duplicate$ "{" =
            'skip$
            { output.state mid.sentence =
              { "l" }
              { "u" }
            if$
            change.case$
            }
          if$
          note #2 global.max$ substring$ * "note" bibinfo.check
        }
      if$
    }
    
    FUNCTION {format.title}
    { title
      duplicate$ empty$ 'skip$
        { "t" change.case$ }
      if$
      "title" bibinfo.check
    }
    FUNCTION {output.bibitem}
    { newline$
      "\bibitem{" write$
      cite$ write$
      "}" write$
      newline$
      ""
      before.all 'output.state :=
    }
    
    FUNCTION {n.dashify}
    {
      't :=
      ""
        { t empty$ not }
        { t #1 #1 substring$ "-" =
            { t #1 #2 substring$ "--" = not
                { "--" *
                  t #2 global.max$ substring$ 't :=
                }
                {   { t #1 #1 substring$ "-" = }
                    { "-" *
                      t #2 global.max$ substring$ 't :=
                    }
                  while$
                }
              if$
            }
            { t #1 #1 substring$ *
              t #2 global.max$ substring$ 't :=
            }
          if$
        }
      while$
    }
    
    FUNCTION {word.in}
    { bbl.in capitalize
      ":" *
      " " * }
    
    FUNCTION {format.date}
    {
      month "month" bibinfo.check
      duplicate$ empty$
      year  "year"  bibinfo.check duplicate$ empty$
        { swap$ 'skip$
            { "there's a month but no year in " cite$ * warning$ }
          if$
          *
        }
        { swap$ 'skip$
            {
              swap$
              " " * swap$
            }
          if$
          *
          remove.dots
        }
      if$
      duplicate$ empty$
        'skip$
        {
          before.all 'output.state :=
        " (" swap$ * ")" *
        }
      if$
    }
    FUNCTION {format.btitle}
    { title "title" bibinfo.check
      duplicate$ empty$ 'skip$
        {
        }
      if$
    }
    FUNCTION {either.or.check}
    { empty$
        'pop$
        { "can't use both " swap$ * " fields in " * cite$ * warning$ }
      if$
    }
    FUNCTION {format.bvolume}
    { volume empty$
        { "" }
        { bbl.volume volume tie.or.space.prefix
          "volume" bibinfo.check * *
          series "series" bibinfo.check
          duplicate$ empty$ 'pop$
            { emphasize ", " * swap$ * }
          if$
          "volume and number" number either.or.check
        }
      if$
    }
    FUNCTION {format.number.series}
    { volume empty$
        { number empty$
            { series field.or.null }
            { output.state mid.sentence =
                { bbl.number }
                { bbl.number capitalize }
              if$
              number tie.or.space.prefix "number" bibinfo.check * *
              series empty$
                { "there's a number but no series in " cite$ * warning$ }
                { bbl.in space.word *
                  series "series" bibinfo.check *
                }
              if$
            }
          if$
        }
        { "" }
      if$
    }
    
    FUNCTION {format.edition}
    { edition duplicate$ empty$ 'skip$
        {
          output.state mid.sentence =
            { "l" }
            { "t" }
          if$ change.case$
          "edition" bibinfo.check
          " " * bbl.edition *
        }
      if$
    }
    INTEGERS { multiresult }
    FUNCTION {multi.page.check}
    { 't :=
      #0 'multiresult :=
        { multiresult not
          t empty$ not
          and
        }
        { t #1 #1 substring$
          duplicate$ "-" =
          swap$ duplicate$ "," =
          swap$ "+" =
          or or
            { #1 'multiresult := }
            { t #2 global.max$ substring$ 't := }
          if$
        }
      while$
      multiresult
    }
    FUNCTION {format.pages}
    { pages duplicate$ empty$ 'skip$
        { duplicate$ multi.page.check
            {
              bbl.pages swap$
              n.dashify
            }
            {
              bbl.page swap$
            }
          if$
          tie.or.space.prefix
          "pages" bibinfo.check
          * *
        }
      if$
    }
    FUNCTION {format.journal.pages}
    { pages duplicate$ empty$ 'pop$
        { swap$ duplicate$ empty$
            { pop$ pop$ format.pages }
            {
              ", " *
              swap$
              n.dashify
              pages multi.page.check
                'titto.bbl.pages
                'titto.bbl.page
              if$
              swap$ tie.or.space.prefix
              "pages" bibinfo.check
              * *
              *
            }
          if$
        }
      if$
    }
    FUNCTION {format.journal.eid}
    { eid "eid" bibinfo.check
      duplicate$ empty$ 'pop$
        { swap$ duplicate$ empty$ 'skip$
          {
              ", " *
          }
          if$
          swap$ *
        }
      if$
    }
    FUNCTION {format.vol.num.pages} % this function is used only for journal entries
    { volume field.or.null embolden
      duplicate$ empty$ 'skip$
        {
    %    bbl.volume swap$ tie.or.space.prefix
         titto.bbl.volume swap$ titto.space.prefix
    %            rationale for the change above: for journals you don't want "vol." label
    %            hence it does not make sense to attach the journal number to the label when
    %            it is short
          "volume" bibinfo.check
          * *
          }
      if$
      number "number" bibinfo.check duplicate$ empty$ 'skip$
        {
          swap$ duplicate$ empty$
            { "there's a number but no volume in " cite$ * warning$ }
            'skip$
          if$
          swap$
          "(" swap$ * ")" *
        }
      if$ *
      eid empty$
        { format.journal.pages }
        { format.journal.eid }
      if$
    }
    
    FUNCTION {format.chapter.pages}
    { chapter empty$
        'format.pages
        { type empty$
            { bbl.chapter }
            { type "l" change.case$
              "type" bibinfo.check
            }
          if$
          chapter tie.or.space.prefix
          "chapter" bibinfo.check
          * *
          pages empty$
            'skip$
            { ", " * format.pages * }
          if$
        }
      if$
    }
    
    FUNCTION {format.booktitle}
    {
      booktitle "booktitle" bibinfo.check
    }
    FUNCTION {format.in.ed.booktitle}
    { format.booktitle duplicate$ empty$ 'skip$
        {
    %     editor "editor" format.names.ed duplicate$ empty$ 'pop$ % changed by titto
          editor "editor" format.names duplicate$ empty$ 'pop$
            {
              " " *
              get.bbl.editor
    %          capitalize
              "(" swap$ * ") " *
              * swap$
              * }
          if$
          word.in swap$ *
        }
      if$
    }
    FUNCTION {empty.misc.check}
    { author empty$ title empty$ howpublished empty$
      month empty$ year empty$ note empty$
      and and and and and
      key empty$ not and
        { "all relevant fields are empty in " cite$ * warning$ }
        'skip$
      if$
    }
    FUNCTION {format.thesis.type}
    { type duplicate$ empty$
        'pop$
        { swap$ pop$
          "t" change.case$ "type" bibinfo.check
        }
      if$
    }
    FUNCTION {format.tr.number}
    { number "number" bibinfo.check
      type duplicate$ empty$
        { pop$ bbl.techrep }
        'skip$
      if$
      "type" bibinfo.check
      swap$ duplicate$ empty$
        { pop$ "t" change.case$ }
        { tie.or.space.prefix * * }
      if$
    }
    FUNCTION {format.article.crossref}
    {
      key duplicate$ empty$
        { pop$
          journal duplicate$ empty$
            { "need key or journal for " cite$ * " to crossref " * crossref * warning$ }
            { "journal" bibinfo.check emphasize word.in swap$ * }
          if$
        }
        { word.in swap$ * " " *}
      if$
      " \cite{" * crossref * "}" *
    }
    FUNCTION {format.crossref.editor}
    { editor #1 "{vv~}{ll}" format.name$
      "editor" bibinfo.check
      editor num.names$ duplicate$
      #2 >
        { pop$
          "editor" bibinfo.check
          " " * bbl.etal
          *
        }
        { #2 <
            'skip$
            { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
                {
                  "editor" bibinfo.check
                  " " * bbl.etal
                  *
                }
                {
                 bbl.and space.word
                  * editor #2 "{vv~}{ll}" format.name$
                  "editor" bibinfo.check
                  *
                }
              if$
            }
          if$
        }
      if$
    }
    FUNCTION {format.book.crossref}
    { volume duplicate$ empty$
        { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
          pop$ word.in
        }
        { bbl.volume
          capitalize
          swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
        }
      if$
      editor empty$
      editor field.or.null author field.or.null =
      or
        { key empty$
            { series empty$
                { "need editor, key, or series for " cite$ * " to crossref " *
                  crossref * warning$
                  "" *
                }
                { series emphasize * }
              if$
            }
            { key * }
          if$
        }
        { format.crossref.editor * }
      if$
      " \cite{" * crossref * "}" *
    }
    FUNCTION {format.incoll.inproc.crossref}
    {
      editor empty$
      editor field.or.null author field.or.null =
      or
        { key empty$
            { format.booktitle duplicate$ empty$
                { "need editor, key, or booktitle for " cite$ * " to crossref " *
                  crossref * warning$
                }
                { word.in swap$ * }
              if$
            }
            { word.in key * " " *}
          if$
        }
        { word.in format.crossref.editor * " " *}
      if$
      " \cite{" * crossref * "}" *
    }
    FUNCTION {format.org.or.pub}
    { 't :=
      ""
      address empty$ t empty$ and
        'skip$
        {
          t empty$
            { address "address" bibinfo.check *
            }
            { t *
              address empty$
                'skip$
                { ", " * address "address" bibinfo.check * }
              if$
            }
          if$
        }
      if$
    }
    FUNCTION {format.publisher.address}
    { publisher "publisher" bibinfo.warn format.org.or.pub
    }
    
    FUNCTION {format.organization.address}
    { organization "organization" bibinfo.check format.org.or.pub
    }
    
    FUNCTION {article}
    { output.bibitem
      format.authors "author" output.check
      add.colon
      new.block
      format.title "title" output.check
      new.block
      crossref missing$
        {
          journal
          "journal" bibinfo.check
          "journal" output.check
          add.blank
          format.vol.num.pages output
          format.date "year" output.check
        }
        { format.article.crossref output.nonnull
          format.pages output
        }
      if$
    %  new.block
      format.doi output
      format.url output
    %  new.block
      format.note output
      fin.entry
    }
    FUNCTION {book}
    { output.bibitem
      author empty$
        { format.editors "author and editor" output.check
          add.colon
        }
        { format.authors output.nonnull
          add.colon
          crossref missing$
            { "author and editor" editor either.or.check }
            'skip$
          if$
        }
      if$
      new.block
      format.btitle "title" output.check
      crossref missing$
        { format.bvolume output
          new.block
          new.sentence
          format.number.series output
          format.publisher.address output
        }
        {
          new.block
          format.book.crossref output.nonnull
        }
      if$
      format.edition output
      format.date "year" output.check
    %  new.block
      format.doi output
      format.url output
    %  new.block
      format.note output
      fin.entry
    }
    FUNCTION {booklet}
    { output.bibitem
      format.authors output
      add.colon
      new.block
      format.title "title" output.check
      new.block
      howpublished "howpublished" bibinfo.check output
      address "address" bibinfo.check output
      format.date output
    %  new.block
      format.doi output
      format.url output
    %  new.block
      format.note output
      fin.entry
    }
    
    FUNCTION {inbook}
    { output.bibitem
      author empty$
        { format.editors "author and editor" output.check
          add.colon
        }
        { format.authors output.nonnull
          add.colon
          crossref missing$
            { "author and editor" editor either.or.check }
            'skip$
          if$
        }
      if$
      new.block
      format.btitle "title" output.check
      crossref missing$
        {
          format.bvolume output
          format.chapter.pages "chapter and pages" output.check
          new.block
          new.sentence
          format.number.series output
          format.publisher.address output
        }
        {
          format.chapter.pages "chapter and pages" output.check
          new.block
          format.book.crossref output.nonnull
        }
      if$
      format.edition output
      format.date "year" output.check
    %  new.block
      format.doi output
      format.url output
    %  new.block
      format.note output
      fin.entry
    }
    
    FUNCTION {incollection}
    { output.bibitem
      format.authors "author" output.check
      add.colon
      new.block
      format.title "title" output.check
      new.block
      crossref missing$
        { format.in.ed.booktitle "booktitle" output.check
          format.bvolume output
          format.chapter.pages output
          new.sentence
          format.number.series output
          format.publisher.address output
          format.edition output
          format.date "year" output.check
        }
        { format.incoll.inproc.crossref output.nonnull
          format.chapter.pages output
        }
      if$
    %  new.block
      format.doi output
      format.url output
    %  new.block
      format.note output
      fin.entry
    }
    FUNCTION {inproceedings}
    { output.bibitem
      format.authors "author" output.check
      add.colon
      new.block
      format.title "title" output.check
      new.block
      crossref missing$
        { format.in.ed.booktitle "booktitle" output.check
          new.sentence % added by titto
          format.bvolume output
          format.pages output
          new.sentence
          format.number.series output
          publisher empty$
            { format.organization.address output }
            { organization "organization" bibinfo.check output
              format.publisher.address output
            }
          if$
          format.date "year" output.check
        }
        { format.incoll.inproc.crossref output.nonnull
          format.pages output
        }
      if$
    %  new.block
      format.doi output
      format.url output
    %  new.block
      format.note output
      fin.entry
    }
    FUNCTION {conference} { inproceedings }
    FUNCTION {manual}
    { output.bibitem
      author empty$
        { organization "organization" bibinfo.check
          duplicate$ empty$ 'pop$
            { output
              address "address" bibinfo.check output
            }
          if$
        }
        { format.authors output.nonnull }
      if$
      add.colon
      new.block
      format.btitle "title" output.check
      author empty$
        { organization empty$
            {
              address new.block.checka
              address "address" bibinfo.check output
            }
            'skip$
          if$
        }
        {
          organization address new.block.checkb
          organization "organization" bibinfo.check output
          address "address" bibinfo.check output
        }
      if$
      format.edition output
      format.date output
    %  new.block
      format.doi output
      format.url output
    %  new.block
      format.note output
      fin.entry
    }
    
    FUNCTION {mastersthesis}
    { output.bibitem
      format.authors "author" output.check
      add.colon
      new.block
      format.btitle
      "title" output.check
      new.block
      bbl.mthesis format.thesis.type output.nonnull
      school "school" bibinfo.warn output
      address "address" bibinfo.check output
      format.date "year" output.check
    %  new.block
      format.doi output
      format.url output
    %  new.block
      format.note output
      fin.entry
    }
    
    FUNCTION {misc}
    { output.bibitem
      format.authors output
      add.colon
      title howpublished new.block.checkb
      format.title output
      howpublished new.block.checka
      howpublished "howpublished" bibinfo.check output
      format.date output
    %  new.block
      format.doi output
      format.url output
    %  new.block
      format.note output
      fin.entry
      empty.misc.check
    }
    FUNCTION {phdthesis}
    { output.bibitem
      format.authors "author" output.check
      add.colon
      new.block
      format.btitle
      "title" output.check
      new.block
      bbl.phdthesis format.thesis.type output.nonnull
      school "school" bibinfo.warn output
      address "address" bibinfo.check output
      format.date "year" output.check
    %  new.block
      format.doi output
      format.url output
    %  new.block
      format.note output
      fin.entry
    }
    
    FUNCTION {proceedings}
    { output.bibitem
      editor empty$
        { organization "organization" bibinfo.check output
        }
        { format.editors output.nonnull }
      if$
      add.colon
      new.block
      format.btitle "title" output.check
      format.bvolume output
      editor empty$
        { publisher empty$
            {  format.number.series output }
            {
              new.sentence
              format.number.series output
              format.publisher.address output
            }
          if$
        }
        { publisher empty$
            {
              new.sentence
              format.number.series output
              format.organization.address output }
            {
              new.sentence
              format.number.series output
              organization "organization" bibinfo.check output
              format.publisher.address output
            }
          if$
         }
      if$
          format.date "year" output.check
    %  new.block
      format.doi output
      format.url output
    %  new.block
      format.note output
      fin.entry
    }
    
    FUNCTION {techreport}
    { output.bibitem
      format.authors "author" output.check
      add.colon
      new.block
      format.title
      "title" output.check
      new.block
      format.tr.number output.nonnull
      institution "institution" bibinfo.warn output
      address "address" bibinfo.check output
      format.date "year" output.check
    %  new.block
      format.doi output
      format.url output
    %  new.block
      format.note output
      fin.entry
    }
    
    FUNCTION {unpublished}
    { output.bibitem
      format.authors "author" output.check
      add.colon
      new.block
      format.title "title" output.check
      format.date output
    %  new.block
      format.url output
    %  new.block
      format.note "note" output.check
      fin.entry
    }
    
    FUNCTION {default.type} { misc }
    READ
    FUNCTION {sortify}
    { purify$
      "l" change.case$
    }
    INTEGERS { len }
    FUNCTION {chop.word}
    { 's :=
      'len :=
      s #1 len substring$ =
        { s len #1 + global.max$ substring$ }
        's
      if$
    }
    FUNCTION {sort.format.names}
    { 's :=
      #1 'nameptr :=
      ""
      s num.names$ 'numnames :=
      numnames 'namesleft :=
        { namesleft #0 > }
        { s nameptr
          "{ll{ }}{  ff{ }}{  jj{ }}"
          format.name$ 't :=
          nameptr #1 >
            {
              "   "  *
              namesleft #1 = t "others" = and
                { "zzzzz" * }
                { t sortify * }
              if$
            }
            { t sortify * }
          if$
          nameptr #1 + 'nameptr :=
          namesleft #1 - 'namesleft :=
        }
      while$
    }
    
    FUNCTION {sort.format.title}
    { 't :=
      "A " #2
        "An " #3
          "The " #4 t chop.word
        chop.word
      chop.word
      sortify
      #1 global.max$ substring$
    }
    FUNCTION {author.sort}
    { author empty$
        { key empty$
            { "to sort, need author or key in " cite$ * warning$
              ""
            }
            { key sortify }
          if$
        }
        { author sort.format.names }
      if$
    }
    FUNCTION {author.editor.sort}
    { author empty$
        { editor empty$
            { key empty$
                { "to sort, need author, editor, or key in " cite$ * warning$
                  ""
                }
                { key sortify }
              if$
            }
            { editor sort.format.names }
          if$
        }
        { author sort.format.names }
      if$
    }
    FUNCTION {author.organization.sort}
    { author empty$
        { organization empty$
            { key empty$
                { "to sort, need author, organization, or key in " cite$ * warning$
                  ""
                }
                { key sortify }
              if$
            }
            { "The " #4 organization chop.word sortify }
          if$
        }
        { author sort.format.names }
      if$
    }
    FUNCTION {editor.organization.sort}
    { editor empty$
        { organization empty$
            { key empty$
                { "to sort, need editor, organization, or key in " cite$ * warning$
                  ""
                }
                { key sortify }
              if$
            }
            { "The " #4 organization chop.word sortify }
          if$
        }
        { editor sort.format.names }
      if$
    }
    FUNCTION {presort}
    { type$ "book" =
      type$ "inbook" =
      or
        'author.editor.sort
        { type$ "proceedings" =
            'editor.organization.sort
            { type$ "manual" =
                'author.organization.sort
                'author.sort
              if$
            }
          if$
        }
      if$
      "    "
      *
      year field.or.null sortify
      *
      "    "
      *
      title field.or.null
      sort.format.title
      *
      #1 entry.max$ substring$
      'sort.key$ :=
    }
    ITERATE {presort}
    SORT
    STRINGS { longest.label }
    INTEGERS { number.label longest.label.width }
    FUNCTION {initialize.longest.label}
    { "" 'longest.label :=
      #1 'number.label :=
      #0 'longest.label.width :=
    }
    FUNCTION {longest.label.pass}
    { number.label int.to.str$ 'label :=
      number.label #1 + 'number.label :=
      label width$ longest.label.width >
        { label 'longest.label :=
          label width$ 'longest.label.width :=
        }
        'skip$
      if$
    }
    EXECUTE {initialize.longest.label}
    ITERATE {longest.label.pass}
    FUNCTION {begin.bib}
    { preamble$ empty$
        'skip$
        { preamble$ write$ newline$ }
      if$
      "\begin{thebibliography}{"  longest.label  * "}" *
      write$ newline$
      "\providecommand{\url}[1]{\texttt{#1}}"
      write$ newline$
      "\providecommand{\urlprefix}{URL }"
      write$ newline$
      "\providecommand{\doi}[1]{https://doi.org/#1}"
      write$ newline$
    }
    EXECUTE {begin.bib}
    EXECUTE {init.state.consts}
    ITERATE {call.type$}
    FUNCTION {end.bib}
    { newline$
      "\end{thebibliography}" write$ newline$
    }
    EXECUTE {end.bib}
    %% End of customized bst file
    %%
    %% End of file `titto.bst'.