%%
%% This is file `cqunumerical.bst',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% cquthesis.dtx  (with options: `bst')
%%
%% This is a generated file.
%%
%% Copyright (C) 2016-2016 by Zhennan Li <[email protected]>
%% This file may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either
%% version 1.3 of this license or (at your option) any later
%% version. The latest version of this license is in:
%%
%% http://www.latex-project.org/lppl.txt
%%
%% and version 1.3 or later is part of all distributions of
%% LaTeX version 2005/12/01 or later.
%%
%% This is the .bst file of the cquthesis package with LaTeX2e.
%%
%% This file contains code from USTC TeX User Group:
%%
%% https://github.com/ustctug/gbt-7714-20155
%%
%% The author would like to acknowledge the contributors for their efforts and, essentially, beautiful mind.
%%
ENTRY
 { address
   author
   booktitle
   chapter
   citedate
   doi
   eid
   edition
   editor
   editdate
   howpublished
   institution
   isbn
   issn
   journal
   key
   language
   mark
   media
   month
   note
   number
   organization
   pages
   publisher
   school
   series
   title
   translator
   type
   url
   volume
   year
 }
 { lang }
 { label extra.label sort.label short.list }

INTEGERS { output.state before.all mid.sentence after.sentence after.block }
INTEGERS { lang.zh lang.ja lang.en lang.ru lang.default }

FUNCTION {init.state.consts}
{ #0 'before.all :=
 #1 'mid.sentence :=
 #2 'after.sentence :=
 #3 'after.block :=
 #4 'lang.zh :=
 #5 'lang.ja :=
 #1 'lang.en :=
 #3 'lang.ru :=
 #0 'lang.default :=
}

STRINGS { s t }

FUNCTION {debug}
{ 's :=
 duplicate$
 "DEBUG: " s * " -> `" *
 swap$ * "'" *
 top$
}

FUNCTION {debug.int}
{ 's :=
 duplicate$ int.to.str$
 "DEBUG: " s * " == " *
 swap$ *
 top$
}

FUNCTION {output.nonnull}
{ 's :=
 output.state mid.sentence =
   { ", " * write$ }
   { output.state after.block =
       { add.period$ write$
         newline$
         "\newblock " write$
       }
       { 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.after}
{ 't :=
 duplicate$ empty$
   'pop$
   { 's :=
     output.state mid.sentence =
       { t * write$ }
       { output.state after.block =
           { t * write$
             newline$
             "\newblock " write$
           }
           { output.state before.all =
               'write$
               { t * write$ }
             if$
           }
         if$
         mid.sentence 'output.state :=
       }
     if$
     s
   }
 if$
}

FUNCTION {punct.colon}
{ ": "
}

FUNCTION {punct.slash}
{ "//"
}

FUNCTION {punct.space}
{ " "
}

FUNCTION {output.check}
{ 't :=
 duplicate$ empty$
   { pop$ "empty " t * " in " * cite$ * warning$ }
   'output.nonnull
 if$
}

FUNCTION {fin.entry}
{ add.period$
 write$
 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 {not}
{   { #0 }
   { #1 }
 if$
}

FUNCTION {and}
{   'skip$
   { pop$ #0 }
 if$
}

FUNCTION {or}
{   { pop$ #1 }
   'skip$
 if$
}

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}
{ duplicate$ empty$
   { pop$ "" }
   { "\emph{" swap$ * "}" * }
 if$
}

FUNCTION {is.in.chinese}
{ lang lang.zh =
}

FUNCTION {format.et.al}
{ is.in.chinese
   { "等"}
   { "et~al." }
 if$
}

FUNCTION {format.anonymous}
{ is.in.chinese
   { "佚名"}
   { "Anon, " year * }
 if$
}

INTEGERS { nameptr namesleft numnames }

FUNCTION {format.names}
{ 's :=
 #1 'nameptr :=
 s num.names$ 'numnames :=
 numnames 'namesleft :=
   { namesleft #0 > nameptr #4 < and }
   { s nameptr "{vv~}{ll}{ f{ }}{, jj}" format.name$ 't :=
     nameptr #1 >
       { namesleft #1 >
           { ", " * t * }
           { t "others" =
               { ", " * format.et.al * }
               { ", " * t * }
             if$
           }
         if$
         nameptr #3 = namesleft #1 > and
           { ", " * format.et.al * }
           'skip$
         if$
       }
       't
     if$
     nameptr #1 + 'nameptr :=
     namesleft #1 - 'namesleft :=
   }
 while$
}

FUNCTION {format.key}
{ empty$
   { key field.or.null }
   { "" }
 if$
}

FUNCTION {format.authors}
{ author empty$
   { "" }
   { author format.names }
 if$
}

FUNCTION {format.editors}
{ editor empty$
   { "" }
   { editor format.names
   }
 if$
}

FUNCTION {format.translators}
{ translator empty$
   { "" }
   { translator format.names
     is.in.chinese
       { ",译" * }
       'skip$
     if$
   }
 if$
}

FUNCTION {format.isbn}
{ isbn empty$
   { "" }
   { new.block "ISBN " isbn * }
 if$
}

FUNCTION {format.issn}
{ issn empty$
   { "" }
   { new.block "ISSN " issn * }
 if$
}

FUNCTION {format.url}
{ url empty$
   { "" }
   { new.block "\url{" url * "}" * }
 if$
}

FUNCTION {format.doi}
{ doi empty$
   { "" }
   { new.block "\doi{" doi * "}" * }
 if$
}

FUNCTION {format.title}
{ title empty$
   { "" }
   { title "t" change.case$ }
 if$
}

FUNCTION {format.mark}
{ mark empty$
   'skip$
   { pop$ mark }
 if$
 "[" swap$ *
 media empty$
   { url empty$
       'skip$
       { "/OL" * }
     if$
   }
   { "/" * media * }
 if$
 "]" *
}

FUNCTION {format.full.names}
{'s :=
 #1 'nameptr :=
 s num.names$ 'numnames :=
 numnames 'namesleft :=
   { namesleft #0 > }
   { s nameptr
     "{vv~}{ll}" format.name$ 't :=
     nameptr #1 >
       {
         namesleft #1 >
           { ", " * t * }
           {
             numnames #2 >
               { "," * }
               'skip$
             if$
             t "others" =
               { " et~al." * }
               { " and " * t * }
             if$
           }
         if$
       }
       't
     if$
     nameptr #1 + 'nameptr :=
     namesleft #1 - 'namesleft :=
   }
 while$
}

FUNCTION {author.editor.full}
{ author empty$
   { editor empty$
       { "" }
       { editor format.full.names }
     if$
   }
   { author format.full.names }
 if$
}

FUNCTION {author.full}
{ author empty$
   { "" }
   { author format.full.names }
 if$
}

FUNCTION {editor.full}
{ editor empty$
   { "" }
   { editor format.full.names }
 if$
}

FUNCTION {make.full.names}
{ type$ "book" =
 type$ "inbook" =
 or
   'author.editor.full
   { type$ "proceedings" =
       'editor.full
       'author.full
     if$
   }
 if$
}

FUNCTION {output.bibitem}
{ newline$
 "\bibitem[" write$
 label write$
 ")" make.full.names duplicate$ short.list =
    { pop$ }
    { * }
  if$
 "]{" * 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 {format.date}
{ year duplicate$ empty$
   { "empty year in " cite$ * warning$
      pop$ "" }
   'skip$
 if$
 month empty$
   'skip$
   { month
     " " * swap$ *
   }
 if$
 extra.label *
}

FUNCTION {format.editdate}
{ editdate empty$
   { "" }
   { "(" citedate * ")" * }
 if$
}

FUNCTION {format.citedate}
{ citedate empty$
   { "" }
   { "[" citedate * "]" * }
 if$
}

FUNCTION {tie.or.space.connect}
{ duplicate$ text.length$ #3 <
   { "~" }
   { " " }
 if$
 swap$ * *
}

FUNCTION {either.or.check}
{ empty$
   'pop$
   { "can't use both " swap$ * " fields in " * cite$ * warning$ }
 if$
}

FUNCTION {is.digit}
{ duplicate$ empty$
   { pop$ #0 }
   { chr.to.int$
     duplicate$ "0" chr.to.int$ <
     { pop$ #0 }
     { "9" chr.to.int$ >
         { #0 }
         { #1 }
       if$
     }
   if$
   }
 if$
}

INTEGERS { charptr stringlength }

FUNCTION {is.number}
{ 's :=
 s empty$
   { #0 }
   { s text.length$ 'charptr :=
       { charptr #0 >
         s charptr #1 substring$ is.digit
         and
       }
       { charptr #1 - 'charptr := }
     while$
     charptr not
   }
 if$
}

FUNCTION {format.bvolume}
{ volume empty$
   { "" }
   { volume is.number
       { is.in.chinese
           { "第" volume * "卷" * }
           { "volume" volume tie.or.space.connect }
         if$
       }
       { volume }
     if$
   }
 if$
}

FUNCTION {format.number}
{ number empty$
   { "" }
   { number is.number
       { is.in.chinese
           { "第" volume * "册" * }
           { "number" number tie.or.space.connect }
         if$
       }
       { number }
     if$
   }
 if$
}

FUNCTION {format.number.series}
{ volume empty$
   { number empty$
       { series field.or.null }
       { output.state mid.sentence =
           { "number" }
           { "Number" }
         if$
         number tie.or.space.connect
         series empty$
           { "there's a number but no series in " cite$ * warning$ }
           { " in " * series * }
         if$
       }
     if$
   }
   { "" }
 if$
}

FUNCTION {format.series.volume.title}
{ series empty$
   { title
     volume empty$
       'skip$
       { ": " * format.bvolume * }
     if$
   }
   { series
     volume empty$
       { number empty$
         'skip$
         { ": " * format.number * }
       if$ }
       { volume empty$
         'skip$
         { ": " * format.bvolume * }
       if$
       }
     if$
     "\hspace{1em}" * title *
   }
 if$
}

FUNCTION {format.journal}
{ journal
 is.in.chinese
   'skip$
   { "\ustcjournal{" swap$ * "}" * }
 if$
}

FUNCTION {num.to.ordinal}
{ duplicate$ text.length$ 'charptr :=
 duplicate$ charptr #1 substring$ 's :=
 s "1" =
   { "st" * }
   { s "2" =
       { "nd" * }
       { s "3" =
           { "rd" * }
           { "th" * }
         if$
       }
     if$
   }
 if$
}

FUNCTION {format.edition}
{ edition empty$
   { "" }
   { edition is.number
       { is.in.chinese
           { edition "版" * }
           { edition num.to.ordinal " ed." * }
         if$
       }
       { edition "t" change.case$
         edition "Revised" =
           { "Rev. ed." }
           { edition "Revised edition" =
               { "Rev. ed." }
               'skip$
             if$
           }
         if$
        }
     if$
   }
 if$
}

FUNCTION {format.address}
{ address empty$
   { url empty$
       { is.in.chinese
           { "[出版地不详]" }
           { "[S.l.]" }
         if$
       }
       { "" }
     if$
   }
   { address }
 if$
}

FUNCTION {format.publisher}
{ publisher empty$
   { url empty$
       { is.in.chinese
           { "[出版者不详]" }
           { "[s.n.]" }
         if$
       }
       { "" }
     if$
   }
   { publisher }
 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 empty$
   { "" }
   { pages }
 if$
}

FUNCTION {format.eid}
{ eid empty$
   { "" }
   { "art." eid tie.or.space.connect }
 if$
}

FUNCTION {format.vol.num.pages}
{ volume field.or.null
 number empty$
   'skip$
   { "\penalty0 (" number * ")" * *
     volume empty$
       { "there's a number but no volume in " cite$ * warning$ }
       'skip$
     if$
   }
 if$
 pages empty$
   'skip$
   { duplicate$ empty$
       { pop$ format.pages }
       { ":\penalty0 " * pages n.dashify * }
     if$
   }
 if$
}

FUNCTION {format.vol.num.eid}
{ volume field.or.null
 number empty$
   'skip$
   { "\penalty0 (" number * ")" * *
     volume empty$
       { "there's a number but no volume in " cite$ * warning$ }
       'skip$
     if$
   }
 if$
 eid empty$
   'skip$
   { duplicate$ empty$
       { pop$ format.eid }
       { ":\penalty0 " * eid * }
     if$
   }
 if$
}

FUNCTION {format.chapter.pages}
{ chapter empty$
   'format.pages
   { type empty$
       { "chapter" }
       { type "l" change.case$ }
     if$
     chapter tie.or.space.connect
     pages empty$
       'skip$
       { ", " * format.pages * }
     if$
   }
 if$
}

FUNCTION {format.in.ed.booktitle}
{ booktitle empty$
   { "" }
   { editor empty$
       { "In " booktitle emphasize * }
       { "In " format.editors * ", " * booktitle emphasize * }
     if$
   }
 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 empty$
   'skip$
   { pop$
     type "t" change.case$
   }
 if$
}

FUNCTION {format.tr.number}
{ type empty$
   { "Technical Report" }
   'type
 if$
 number empty$
   { "t" change.case$ }
   { number tie.or.space.connect }
 if$
}

FUNCTION {format.article.crossref}
{ key empty$
   { journal empty$
       { "need key or journal for " cite$ * " to crossref " * crossref *
         warning$
         ""
       }
       { "In \emph{" journal * "}" * }
     if$
   }
   { "In " }
 if$
 " \citet{" * crossref * "}" *
}

FUNCTION {format.book.crossref}
{ volume empty$
   { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
     "In "
   }
   { "Volume" volume tie.or.space.connect
     " of " *
   }
 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$
             "" *
           }
           { "\emph{" * series * "}" * }
         if$
       }
       'skip$
     if$
   }
   'skip$
 if$
 " \citet{" * crossref * "}" *
}

FUNCTION {format.incoll.inproc.crossref}
{ editor empty$
 editor field.or.null author field.or.null =
 or
   { key empty$
       { booktitle empty$
           { "need editor, key, or booktitle for " cite$ * " to crossref " *
             crossref * warning$
             ""
           }
           { "In \emph{" booktitle * "}" * }
         if$
       }
       { "In " }
     if$
   }
   { "In " }
 if$
 " \citet{" * crossref * "}" *
}

FUNCTION {archive}
{ output.bibitem
 format.authors output
 author format.key output
 new.block
 format.series.volume.title "title" output.check
 "A" format.mark "" output.after
 new.block
 format.translators output
 new.block
 format.edition output
 new.sentence
 format.address output
 format.publisher punct.colon output.after
 format.date "year" output.check
 format.pages punct.colon output.after
 format.citedate "" output.after
 format.url output
 format.doi output
 fin.entry
}

FUNCTION {article}
{ output.bibitem
 format.authors "author" output.check
 author format.key output
 new.block
 format.title "title" output.check
 journal empty$
   { "M" format.mark "" output.after
     new.block
     format.translators output
     new.block
     format.editors punct.slash output.after
     new.block
     booktitle "booktitle" output.check
     new.block
     format.bvolume punct.colon output.after
     new.block
     format.edition output
     new.block
     format.address output
     format.publisher punct.colon output.after
     format.date "year" output.check
     format.pages punct.colon output.after
   }
   { "J" format.mark "" output.after
     new.block
     format.journal "journal" output.check
     new.block
     format.date "year" output.check
     format.vol.num.pages output
   }
 if$
 format.citedate "" output.after
 format.url output
 format.doi output
 fin.entry
}

FUNCTION {book}
{ output.bibitem
 author empty$
   { format.editors "author and editor" output.check
     editor format.key output
   }
   { format.authors output.nonnull
     crossref missing$
       { "author and editor" editor either.or.check }
       'skip$
     if$
   }
 if$
 new.block
 format.series.volume.title "title" output.check
 "M" format.mark "" output.after
 new.block
 format.translators output
 new.block
 format.edition output
 new.sentence
 format.address output
 format.publisher punct.colon output.after
 format.date "year" output.check
 format.pages punct.colon output.after
 format.citedate "" output.after
 format.url output
 format.doi output
 fin.entry
}

FUNCTION {collection}
{ output.bibitem
 author empty$
   { format.editors "author and editor" output.check
     editor format.key output
   }
   { format.authors output.nonnull
     crossref missing$
       { "author and editor" editor either.or.check }
       'skip$
     if$
   }
 if$
 new.block
 format.series.volume.title "title" output.check
 "G" format.mark "" output.after
 new.block
 format.translators output
 new.block
 format.edition output
 new.sentence
 format.address output
 format.publisher punct.colon output.after
 format.date "year" output.check
 format.pages punct.colon output.after
 format.citedate "" output.after
 format.url output
 format.doi output
 fin.entry
}

FUNCTION {database}
{ output.bibitem
 format.authors output
 author format.key output
 new.block
 format.series.volume.title "title" output.check
 "DB" format.mark "" output.after
 new.block
 format.date "year" output.check
 format.editdate "" output.after
 format.citedate "" output.after
 format.url output
 format.doi output
 fin.entry
}

FUNCTION {dataset}
{ output.bibitem
 format.authors output
 author format.key output
 new.block
 format.series.volume.title "title" output.check
 "DS" format.mark "" output.after
 new.block
 format.translators output
 new.block
 format.edition output
 new.sentence
 format.address output
 format.publisher punct.colon output.after
 format.date "year" output.check
 format.pages punct.colon output.after
 format.editdate "" output.after
 format.citedate "" output.after
 format.url output
 format.doi output
 fin.entry
}

FUNCTION {inbook} { book }

FUNCTION {incollection} { book }

FUNCTION {inproceedings}
{ output.bibitem
 format.authors "author" output.check
 author format.key output
 new.block
 format.title "title" output.check
 "C" format.mark "" output.after
 new.block
 format.translators output
 new.block
 editor empty$
   { organization }
   { format.editors }
 if$ punct.slash output.after
 new.block
 booktitle "booktitle" output.check
 new.block
 format.bvolume punct.colon output.after
 new.block
 format.edition output
 new.sentence
 format.address output
 publisher empty$
   { organization }
   { format.publisher }
 if$ punct.colon output.after
 format.date "year" output.check
 format.pages punct.colon output.after
 format.citedate "" output.after
 format.url output
 format.doi output
 fin.entry
}

FUNCTION {conference} { inproceedings }

FUNCTION {manual}
{ output.bibitem
 format.authors output
 author format.key output
 new.block
 format.series.volume.title "title" output.check
 organization address new.block.checkb
 organization output
 format.address output
 format.edition output
 format.date output
 format.url output
 new.block
 note output
 fin.entry
}

FUNCTION {map}
{ output.bibitem
 format.authors output
 author format.key output
 new.block
 format.series.volume.title "title" output.check
 "CM" format.mark "" output.after
 new.block
 format.translators output
 new.block
 format.edition output
 new.sentence
 format.address output
 format.publisher punct.colon output.after
 format.date "year" output.check
 format.pages punct.colon output.after
 format.citedate "" output.after
 format.url output
 format.doi output
 fin.entry
}

FUNCTION {mastersthesis}
{ output.bibitem
 format.authors output
 author format.key output
 new.block
 format.series.volume.title "title" output.check
 "D" format.mark ": [Master]" * "" output.after
 new.block
 format.translators output
 new.block
 format.edition output
 new.sentence
 format.address output
 school empty$
   { format.publisher }
   { school }
 if$ punct.colon output.after
 format.date "year" output.check
 format.pages punct.colon output.after
 format.citedate "" output.after
 format.url output
 format.doi output
 fin.entry
}

FUNCTION {misc}
{ output.bibitem
 format.authors output
 author format.key output
 new.block
 format.series.volume.title "title" output.check
 "M" format.mark "" output.after
 new.block
 format.translators output
 new.block
 format.edition output
 new.sentence
 format.address output
 format.publisher punct.colon output.after
 format.date "year" output.check
 format.pages punct.colon output.after
 format.citedate "" output.after
 format.url output
 format.doi output
 fin.entry
}

FUNCTION {newspaper}
{ output.bibitem
 format.authors "author" output.check
 author format.key output
 new.block
 format.title "title" output.check
 "N" format.mark "" output.after
 new.block
 journal "journal" output.check
 new.block
 format.date "year" output.check
 format.vol.num.pages output
 format.citedate "" output.after
 format.url output
 format.doi output
 fin.entry
}

FUNCTION {patent}
{ output.bibitem
 format.authors output
 author format.key output
 new.block
 format.title "title" output.check
 "P" format.mark "" output.after
 new.block
 format.date "year" output.check
 format.citedate "" output.after
 format.url output
 format.doi output
 fin.entry
}

FUNCTION {phdthesis}
{ output.bibitem
 format.authors output
 author format.key output
 new.block
 format.series.volume.title "title" output.check
 "D" format.mark ": [PhD]" * "" output.after
 new.block
 format.translators output
 new.block
 format.edition output
 new.sentence
 format.address output
 school empty$
   { format.publisher }
   { school }
 if$ punct.colon output.after
 format.date "year" output.check
 format.pages punct.colon output.after
 format.citedate "" output.after
 format.url output
 format.doi output
 fin.entry
}

FUNCTION {proceedings}
{ output.bibitem
 format.editors output
 editor format.key output
 new.block
 format.series.volume.title "title" output.check
 "C" format.mark "" output.after
 new.block
 format.translators output
 new.block
 format.edition output
 new.sentence
 format.address output
 publisher empty$
   { organization }
   { format.publisher }
 if$ punct.colon output.after
 format.date "year" output.check
 format.pages punct.colon output.after
 format.citedate "" output.after
 format.url output
 format.doi output
 fin.entry
}

FUNCTION {program}
{ output.bibitem
 format.authors output
 author format.key output
 new.block
 format.series.volume.title "title" output.check
 "CP" format.mark "" output.after
 new.block
 format.date "year" output.check
 format.editdate "" output.after
 format.citedate "" output.after
 format.url output
 format.doi output
 fin.entry
}

FUNCTION {standard}
{ output.bibitem
 format.authors output
 author format.key output
 new.block
 format.series.volume.title "title" output.check
 "S" format.mark "" output.after
 new.block
 format.translators output
 new.block
 format.edition output
 new.sentence
 format.address output
 format.publisher punct.colon output.after
 format.date "year" output.check
 format.pages punct.colon output.after
 format.citedate "" output.after
 format.url output
 format.doi output
 fin.entry
}

FUNCTION {techreport}
{ output.bibitem
 author empty$
   { institution output
     institution format.key output
   }
   { format.authors output
     author format.key output
   }
 if$
 new.block
 format.series.volume.title "title" output.check
 "R" format.mark "" output.after
 new.block
 format.translators output
 new.block
 format.edition output
 new.sentence
 format.address output
 format.publisher punct.colon output.after
 format.date "year" output.check
 format.pages punct.colon output.after
 format.editdate "" output.after
 format.citedate "" output.after
 format.url output
 format.doi output
 fin.entry
}

FUNCTION {unpublished}
{ output.bibitem
 format.authors "author" output.check
 author format.key output
 new.block
 format.title "title" output.check
 new.block
 note "note" output.check
 format.date output
 format.url output
 fin.entry
}

FUNCTION {default.type} { misc }


MACRO {jan} {"January"}

MACRO {feb} {"February"}

MACRO {mar} {"March"}

MACRO {apr} {"April"}

MACRO {may} {"May"}

MACRO {jun} {"June"}

MACRO {jul} {"July"}

MACRO {aug} {"August"}

MACRO {sep} {"September"}

MACRO {oct} {"October"}

MACRO {nov} {"November"}

MACRO {dec} {"December"}



MACRO {acmcs} {"ACM Computing Surveys"}

MACRO {acta} {"Acta Informatica"}

MACRO {cacm} {"Communications of the ACM"}

MACRO {ibmjrd} {"IBM Journal of Research and Development"}

MACRO {ibmsj} {"IBM Systems Journal"}

MACRO {ieeese} {"IEEE Transactions on Software Engineering"}

MACRO {ieeetc} {"IEEE Transactions on Computers"}

MACRO {ieeetcad}
{"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}

MACRO {ipl} {"Information Processing Letters"}

MACRO {jacm} {"Journal of the ACM"}

MACRO {jcss} {"Journal of Computer and System Sciences"}

MACRO {scp} {"Science of Computer Programming"}

MACRO {sicomp} {"SIAM Journal on Computing"}

MACRO {tocs} {"ACM Transactions on Computer Systems"}

MACRO {tods} {"ACM Transactions on Database Systems"}

MACRO {tog} {"ACM Transactions on Graphics"}

MACRO {toms} {"ACM Transactions on Mathematical Software"}

MACRO {toois} {"ACM Transactions on Office Information Systems"}

MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}

MACRO {tcs} {"Theoretical Computer Science"}


READ

EXECUTE {init.state.consts}

INTEGERS { ascii }

FUNCTION {char.lang}
{ chr.to.int$ 'ascii :=
 ascii #31 > ascii #128 < and
   { lang.en }
   { ascii #227 > ascii #234 < and
       { lang.zh }
       { ascii #227 =
           { lang.ja }
           { lang.default }
         if$
       }
     if$
   }
 if$
}

FUNCTION {set.language}
{ language empty$
   { lang.default 'lang :=
     author field.or.null title field.or.null * 's :=
     s empty$
       'skip$
       { #1 'charptr :=
         s text.length$ #1 + 'stringlength :=
           { charptr stringlength < }
           { s charptr #1 substring$ char.lang
             duplicate$ #3 >
               { charptr #2 + 'charptr := }
               'skip$
             if$
             duplicate$ lang >
               { 'lang := }
               'pop$
             if$
             charptr #1 + 'charptr :=
           }
         while$
       }
     if$
   }
   { language "en" =
       { lang.en }
       { language "zh" =
           { lang.zh }
           { language "ja" =
               { lang.ja }
               { lang.default }
             if$
           }
         if$
       }
     if$
     'lang :=
   }
 if$
}

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 {format.lab.names}
{ 's :=
 s #1 "{vv~}{ll}" format.name$
 s num.names$ #1 >
   { ", " * format.et.al * }
   'skip$
 if$
}

FUNCTION {author.key.label}
{ author empty$
   { key empty$
       { cite$ #1 #3 substring$ }
       'key
     if$
   }
   { author format.lab.names }
 if$
}

FUNCTION {author.editor.key.label}
{ author empty$
   { editor empty$
       { key empty$
           { cite$ #1 #3 substring$ }
           'key
         if$
       }
       { editor format.lab.names }
     if$
   }
   { author format.lab.names }
 if$
}

FUNCTION {author.key.organization.label}
{ author empty$
   { key empty$
       { organization empty$
           { cite$ #1 #3 substring$ }
           { "The " #4 organization chop.word #3 text.prefix$ }
         if$
       }
       'key
     if$
   }
   { author format.lab.names }
 if$
}

FUNCTION {editor.key.organization.label}
{ editor empty$
   { key empty$
       { organization empty$
           { cite$ #1 #3 substring$ }
           { "The " #4 organization chop.word #3 text.prefix$ }
         if$
       }
       'key
     if$
   }
   { editor format.lab.names }
 if$
}

FUNCTION {calc.short.authors}
{ type$ "book" =
 type$ "inbook" =
 or
   'author.editor.key.label
   { type$ "proceedings" =
       'editor.key.organization.label
       { type$ "manual" =
           'author.key.organization.label
           'author.key.label
         if$
       }
     if$
   }
 if$
 'short.list :=
}

FUNCTION {calc.label}
{ calc.short.authors
 short.list
 "("
 *
 year duplicate$ empty$
 short.list key field.or.null = or
    { pop$ "" }
    'skip$
 if$
 *
 'label :=
}

INTEGERS { seq.num }

FUNCTION {init.seq}
{ #0 'seq.num :=}

EXECUTE {init.seq}

FUNCTION {int.to.fix}
{ "000000000" swap$ int.to.str$ *
 #-1 #10 substring$
}


FUNCTION {presort}
{ set.language
 calc.label
 label sortify
 "    "
 *
 seq.num #1 + 'seq.num :=
 seq.num  int.to.fix
 'sort.label :=
 sort.label *
 #1 entry.max$ substring$
 'sort.key$ :=
}

ITERATE {presort}

SORT

STRINGS { longest.label last.label next.extra }

INTEGERS { longest.label.width last.extra.num number.label }

FUNCTION {initialize.longest.label}
{ "" 'longest.label :=
 #0 int.to.chr$ 'last.label :=
 "" 'next.extra :=
 #0 'longest.label.width :=
 #0 'last.extra.num :=
 #0 'number.label :=
}

FUNCTION {forward.pass}
{ last.label label =
   { last.extra.num #1 + 'last.extra.num :=
     last.extra.num int.to.chr$ 'extra.label :=
   }
   { "a" chr.to.int$ 'last.extra.num :=
     "" 'extra.label :=
     label 'last.label :=
   }
 if$
 number.label #1 + 'number.label :=
}

FUNCTION {reverse.pass}
{ next.extra "b" =
   { "a" 'extra.label := }
   'skip$
 if$
 extra.label 'next.extra :=
 extra.label
 duplicate$ empty$
   'skip$
   { "{\natexlab{" swap$ * "}}" * }
 if$
 'extra.label :=
 label extra.label * 'label :=
}

EXECUTE {initialize.longest.label}

ITERATE {forward.pass}

REVERSE {reverse.pass}

FUNCTION {bib.sort.order}
{ sort.label  'sort.key$ :=
}

ITERATE {bib.sort.order}

SORT

FUNCTION {begin.bib}
{   preamble$ empty$
   'skip$
   { preamble$ write$ newline$ }
 if$
 "\bibpunct{[}{]}{,}{s}{,}{,}"
 write$ newline$
 "\begin{thebibliography}{" number.label int.to.str$ * "}" *
 write$ newline$
 "\ifx\ustcjournal\undefined\newcommand\ustcjournal{\relax}\fi"
 write$ newline$
 "\providecommand{\natexlab}[1]{#1}"
 write$ newline$
 "\providecommand{\url}[1]{\texttt{#1}}"
 write$ newline$
 "\expandafter\ifx\csname urlstyle\endcsname\relax"
 write$ newline$
 "  \providecommand{\doi}[1]{DOI: #1}\else"
 write$ newline$
 "  \providecommand{\doi}{DOI: \begingroup \urlstyle{rm}\Url}\fi"
 write$ newline$
}

EXECUTE {begin.bib}

ITERATE {call.type$}

FUNCTION {end.bib}
{ newline$
 "\end{thebibliography}" write$ newline$
}

EXECUTE {end.bib}

%%
%% End of file `cqunumerical.bst'.