2471 lines
45 KiB
Plaintext
2471 lines
45 KiB
Plaintext
|
%%
|
|||
|
%% This is file `variants/ustc/ustcthesis-numerical.bst',
|
|||
|
%% generated with the docstrip utility.
|
|||
|
%%
|
|||
|
%% The original source files were:
|
|||
|
%%
|
|||
|
%% gbt7714.dtx (with options: `2015,ustc,numerical')
|
|||
|
%% -------------------------------------------------------------------
|
|||
|
%% GB/T 7714 BibTeX Style
|
|||
|
%% https://github.com/zepinglee/gbt7714-bibtex-style
|
|||
|
%% Version: 2024/03/08 v2.1.6
|
|||
|
%% -------------------------------------------------------------------
|
|||
|
%% Copyright (C) 2016--2024 by Zeping Lee <zepinglee AT gmail.com>
|
|||
|
%% -------------------------------------------------------------------
|
|||
|
%% This file may be distributed and/or modified under the
|
|||
|
%% conditions of the LaTeX Project Public License, either version 1.3c
|
|||
|
%% of this license or (at your option) any later version.
|
|||
|
%% The latest version of this license is in
|
|||
|
%% https://www.latex-project.org/lppl.txt
|
|||
|
%% and version 1.3c or later is part of all distributions of LaTeX
|
|||
|
%% version 2008 or later.
|
|||
|
%% -------------------------------------------------------------------
|
|||
|
INTEGERS {
|
|||
|
citation.et.al.min
|
|||
|
citation.et.al.use.first
|
|||
|
bibliography.et.al.min
|
|||
|
bibliography.et.al.use.first
|
|||
|
uppercase.name
|
|||
|
terms.in.macro
|
|||
|
year.after.author
|
|||
|
period.after.author
|
|||
|
italic.book.title
|
|||
|
sentence.case.title
|
|||
|
link.title
|
|||
|
title.in.journal
|
|||
|
show.patent.country
|
|||
|
show.mark
|
|||
|
space.before.mark
|
|||
|
show.medium.type
|
|||
|
short.journal
|
|||
|
italic.journal
|
|||
|
link.journal
|
|||
|
bold.journal.volume
|
|||
|
show.missing.address.publisher
|
|||
|
space.before.pages
|
|||
|
only.start.page
|
|||
|
wave.dash.in.pages
|
|||
|
show.urldate
|
|||
|
show.url
|
|||
|
show.doi
|
|||
|
show.preprint
|
|||
|
show.note
|
|||
|
show.english.translation
|
|||
|
end.with.period
|
|||
|
}
|
|||
|
|
|||
|
STRINGS {
|
|||
|
component.part.label
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {load.config}
|
|||
|
{
|
|||
|
#2 'citation.et.al.min :=
|
|||
|
#1 'citation.et.al.use.first :=
|
|||
|
#4 'bibliography.et.al.min :=
|
|||
|
#3 'bibliography.et.al.use.first :=
|
|||
|
#1 'uppercase.name :=
|
|||
|
#0 'terms.in.macro :=
|
|||
|
#0 'year.after.author :=
|
|||
|
#1 'period.after.author :=
|
|||
|
#0 'italic.book.title :=
|
|||
|
#1 'sentence.case.title :=
|
|||
|
#0 'link.title :=
|
|||
|
#1 'title.in.journal :=
|
|||
|
#1 'show.patent.country :=
|
|||
|
#1 'show.mark :=
|
|||
|
#0 'space.before.mark :=
|
|||
|
#1 'show.medium.type :=
|
|||
|
"slash" 'component.part.label :=
|
|||
|
#0 'short.journal :=
|
|||
|
#0 'italic.journal :=
|
|||
|
#0 'link.journal :=
|
|||
|
#0 'bold.journal.volume :=
|
|||
|
#0 'show.missing.address.publisher :=
|
|||
|
#1 'space.before.pages :=
|
|||
|
#0 'only.start.page :=
|
|||
|
#0 'wave.dash.in.pages :=
|
|||
|
#1 'show.urldate :=
|
|||
|
#1 'show.url :=
|
|||
|
#1 'show.doi :=
|
|||
|
#1 'show.preprint :=
|
|||
|
#0 'show.note :=
|
|||
|
#0 'show.english.translation :=
|
|||
|
#1 'end.with.period :=
|
|||
|
}
|
|||
|
|
|||
|
ENTRY
|
|||
|
{ address
|
|||
|
archivePrefix
|
|||
|
author
|
|||
|
booktitle
|
|||
|
date
|
|||
|
doi
|
|||
|
edition
|
|||
|
editor
|
|||
|
eprint
|
|||
|
eprinttype
|
|||
|
entrysubtype
|
|||
|
howpublished
|
|||
|
institution
|
|||
|
journal
|
|||
|
journaltitle
|
|||
|
key
|
|||
|
langid
|
|||
|
language
|
|||
|
location
|
|||
|
mark
|
|||
|
medium
|
|||
|
note
|
|||
|
number
|
|||
|
organization
|
|||
|
pages
|
|||
|
publisher
|
|||
|
school
|
|||
|
series
|
|||
|
shortjournal
|
|||
|
title
|
|||
|
translation
|
|||
|
translator
|
|||
|
url
|
|||
|
urldate
|
|||
|
volume
|
|||
|
year
|
|||
|
}
|
|||
|
{ entry.lang entry.is.electronic is.pure.electronic entry.numbered }
|
|||
|
{ label extra.label sort.label short.label short.list entry.mark entry.url }
|
|||
|
|
|||
|
INTEGERS { output.state before.all mid.sentence after.sentence after.block after.slash }
|
|||
|
|
|||
|
INTEGERS { lang.zh lang.ja lang.en lang.ru lang.other }
|
|||
|
|
|||
|
INTEGERS { charptr len }
|
|||
|
|
|||
|
FUNCTION {init.state.consts}
|
|||
|
{ #0 'before.all :=
|
|||
|
#1 'mid.sentence :=
|
|||
|
#2 'after.sentence :=
|
|||
|
#3 'after.block :=
|
|||
|
#4 'after.slash :=
|
|||
|
#3 'lang.zh :=
|
|||
|
#4 'lang.ja :=
|
|||
|
#1 'lang.en :=
|
|||
|
#2 'lang.ru :=
|
|||
|
#0 'lang.other :=
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {bbl.anonymous}
|
|||
|
{ entry.lang lang.zh =
|
|||
|
{ "佚名" }
|
|||
|
{ "Anon" }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {bbl.space}
|
|||
|
{ entry.lang lang.zh =
|
|||
|
{ "\ " }
|
|||
|
{ " " }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {bbl.and}
|
|||
|
{ "" }
|
|||
|
|
|||
|
FUNCTION {bbl.et.al}
|
|||
|
{ entry.lang lang.zh =
|
|||
|
{ "等" }
|
|||
|
{ entry.lang lang.ja =
|
|||
|
{ "他" }
|
|||
|
{ entry.lang lang.ru =
|
|||
|
{ "идр" }
|
|||
|
{ "et~al." }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {citation.and}
|
|||
|
{ terms.in.macro
|
|||
|
{ "{\biband}" }
|
|||
|
'bbl.and
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {citation.et.al}
|
|||
|
{ terms.in.macro
|
|||
|
{ "{\bibetal}" }
|
|||
|
'bbl.et.al
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {bbl.colon} { ": " }
|
|||
|
|
|||
|
FUNCTION {bbl.pages.colon}
|
|||
|
{ space.before.pages
|
|||
|
{ ": " }
|
|||
|
{ ":\allowbreak " }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {bbl.wide.space} { "\quad " }
|
|||
|
|
|||
|
FUNCTION {bbl.slash} { "//\allowbreak " }
|
|||
|
|
|||
|
FUNCTION {bbl.sine.loco}
|
|||
|
{ entry.lang lang.zh =
|
|||
|
{ "[出版地不详]" }
|
|||
|
{ "[S.l.]" }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {bbl.sine.nomine}
|
|||
|
{ entry.lang lang.zh =
|
|||
|
{ "[出版者不详]" }
|
|||
|
{ "[s.n.]" }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {bbl.sine.loco.sine.nomine}
|
|||
|
{ entry.lang lang.zh =
|
|||
|
{ "[出版地不详: 出版者不详]" }
|
|||
|
{ "[S.l.: s.n.]" }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {not}
|
|||
|
{ { #0 }
|
|||
|
{ #1 }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {and}
|
|||
|
{ 'skip$
|
|||
|
{ pop$ #0 }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {or}
|
|||
|
{ { pop$ #1 }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
STRINGS { x y }
|
|||
|
|
|||
|
FUNCTION {contains}
|
|||
|
{ 'y :=
|
|||
|
'x :=
|
|||
|
y text.length$ 'len :=
|
|||
|
x text.length$ len - #1 + 'charptr :=
|
|||
|
{ charptr #0 >
|
|||
|
x charptr len substring$ y = not
|
|||
|
and
|
|||
|
}
|
|||
|
{ charptr #1 - 'charptr := }
|
|||
|
while$
|
|||
|
charptr #0 >
|
|||
|
}
|
|||
|
|
|||
|
STRINGS { s t }
|
|||
|
|
|||
|
FUNCTION {output.nonnull}
|
|||
|
{ 's :=
|
|||
|
output.state mid.sentence =
|
|||
|
{ ", " * write$ }
|
|||
|
{ output.state after.block =
|
|||
|
{ add.period$ write$
|
|||
|
newline$
|
|||
|
"\newblock " write$
|
|||
|
}
|
|||
|
{ output.state before.all =
|
|||
|
'write$
|
|||
|
{ output.state after.slash =
|
|||
|
{ bbl.slash * write$
|
|||
|
newline$
|
|||
|
}
|
|||
|
{ add.period$ " " * write$ }
|
|||
|
if$
|
|||
|
}
|
|||
|
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 =
|
|||
|
{ add.period$ write$
|
|||
|
newline$
|
|||
|
"\newblock " write$
|
|||
|
}
|
|||
|
{ output.state before.all =
|
|||
|
'write$
|
|||
|
{ output.state after.slash =
|
|||
|
{ bbl.slash * write$ }
|
|||
|
{ add.period$ " " * write$ }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
mid.sentence 'output.state :=
|
|||
|
}
|
|||
|
if$
|
|||
|
s
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {output.check}
|
|||
|
{ 't :=
|
|||
|
duplicate$ empty$
|
|||
|
{ pop$ "empty " t * " in " * cite$ * warning$ }
|
|||
|
'output.nonnull
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {fin.entry}
|
|||
|
{ end.with.period
|
|||
|
'add.period$
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
write$
|
|||
|
show.english.translation entry.lang lang.zh = and
|
|||
|
{ ")"
|
|||
|
write$
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
newline$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {new.block}
|
|||
|
{ output.state before.all =
|
|||
|
'skip$
|
|||
|
{ output.state after.slash =
|
|||
|
'skip$
|
|||
|
{ after.block 'output.state := }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {new.sentence}
|
|||
|
{ output.state after.block =
|
|||
|
'skip$
|
|||
|
{ output.state before.all =
|
|||
|
'skip$
|
|||
|
{ output.state after.slash =
|
|||
|
'skip$
|
|||
|
{ after.sentence 'output.state := }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {new.slash}
|
|||
|
{ output.state before.all =
|
|||
|
'skip$
|
|||
|
{ component.part.label "slash" =
|
|||
|
{ after.slash 'output.state := }
|
|||
|
{ new.block
|
|||
|
component.part.label "in" =
|
|||
|
{ entry.lang lang.en =
|
|||
|
{ "In: " output
|
|||
|
write$
|
|||
|
""
|
|||
|
before.all 'output.state :=
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
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 {format.btitle}
|
|||
|
{ italic.book.title
|
|||
|
entry.lang lang.en = and
|
|||
|
'emphasize
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
INTEGERS { byte second.byte }
|
|||
|
|
|||
|
INTEGERS { char.lang tmp.lang }
|
|||
|
|
|||
|
STRINGS { tmp.str }
|
|||
|
|
|||
|
FUNCTION {get.str.lang}
|
|||
|
{ 'tmp.str :=
|
|||
|
lang.other 'tmp.lang :=
|
|||
|
#1 'charptr :=
|
|||
|
tmp.str text.length$ #1 + 'len :=
|
|||
|
{ charptr len < }
|
|||
|
{ tmp.str charptr #1 substring$ chr.to.int$ 'byte :=
|
|||
|
byte #128 <
|
|||
|
{ charptr #1 + 'charptr :=
|
|||
|
byte #64 > byte #91 < and byte #96 > byte #123 < and or
|
|||
|
{ lang.en 'char.lang := }
|
|||
|
{ lang.other 'char.lang := }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ tmp.str charptr #1 + #1 substring$ chr.to.int$ 'second.byte :=
|
|||
|
byte #224 <
|
|||
|
{ charptr #2 + 'charptr :=
|
|||
|
byte #207 > byte #212 < and
|
|||
|
byte #212 = second.byte #176 < and or
|
|||
|
{ lang.ru 'char.lang := }
|
|||
|
{ lang.other 'char.lang := }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ byte #240 <
|
|||
|
{ charptr #3 + 'charptr :=
|
|||
|
byte #227 > byte #234 < and
|
|||
|
{ lang.zh 'char.lang := }
|
|||
|
{ byte #227 =
|
|||
|
{ second.byte #143 >
|
|||
|
{ lang.zh 'char.lang := }
|
|||
|
{ second.byte #128 > second.byte #132 < and
|
|||
|
{ lang.ja 'char.lang := }
|
|||
|
{ lang.other 'char.lang := }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
{ byte #239 =
|
|||
|
second.byte #163 > second.byte #172 < and and
|
|||
|
{ lang.zh 'char.lang := }
|
|||
|
{ lang.other 'char.lang := }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
{ charptr #4 + 'charptr :=
|
|||
|
byte #240 = second.byte #159 > and
|
|||
|
{ lang.zh 'char.lang := }
|
|||
|
{ lang.other 'char.lang := }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
char.lang tmp.lang >
|
|||
|
{ char.lang 'tmp.lang := }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
while$
|
|||
|
tmp.lang
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {check.entry.lang}
|
|||
|
{ author field.or.null
|
|||
|
title field.or.null *
|
|||
|
get.str.lang
|
|||
|
}
|
|||
|
|
|||
|
STRINGS { entry.langid }
|
|||
|
|
|||
|
FUNCTION {set.entry.lang}
|
|||
|
{ "" 'entry.langid :=
|
|||
|
language empty$ not
|
|||
|
{ language 'entry.langid := }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
langid empty$ not
|
|||
|
{ langid 'entry.langid := }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
entry.langid empty$
|
|||
|
{ check.entry.lang }
|
|||
|
{ entry.langid "english" = entry.langid "american" = or entry.langid "british" = or
|
|||
|
{ lang.en }
|
|||
|
{ entry.langid "chinese" =
|
|||
|
{ lang.zh }
|
|||
|
{ entry.langid "japanese" =
|
|||
|
{ lang.ja }
|
|||
|
{ entry.langid "russian" =
|
|||
|
{ lang.ru }
|
|||
|
{ check.entry.lang }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
'entry.lang :=
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {set.entry.numbered}
|
|||
|
{ type$ "patent" =
|
|||
|
type$ "standard" = or
|
|||
|
type$ "techreport" = or
|
|||
|
{ #1 'entry.numbered := }
|
|||
|
{ #0 'entry.numbered := }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
INTEGERS { nameptr namesleft numnames name.lang }
|
|||
|
|
|||
|
FUNCTION {format.name}
|
|||
|
{ "{vv~}{ll}{, jj}{, ff}" format.name$ 't :=
|
|||
|
t "others" =
|
|||
|
{ bbl.et.al }
|
|||
|
{ t get.str.lang 'name.lang :=
|
|||
|
name.lang lang.en =
|
|||
|
{ t #1 "{vv~}{ll}{ f{~}}" format.name$
|
|||
|
uppercase.name
|
|||
|
{ "u" change.case$ }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
t #1 "{, jj}" format.name$ *
|
|||
|
}
|
|||
|
{ t #1 "{ll}{ff}" format.name$ }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.names}
|
|||
|
{ 's :=
|
|||
|
#1 'nameptr :=
|
|||
|
s num.names$ 'numnames :=
|
|||
|
""
|
|||
|
numnames 'namesleft :=
|
|||
|
{ namesleft #0 > }
|
|||
|
{ s nameptr format.name bbl.et.al =
|
|||
|
numnames bibliography.et.al.min #1 - > nameptr bibliography.et.al.use.first > and or
|
|||
|
{ ", " *
|
|||
|
bbl.et.al *
|
|||
|
#1 'namesleft :=
|
|||
|
}
|
|||
|
{ nameptr #1 >
|
|||
|
{ namesleft #1 = bbl.and "" = not and
|
|||
|
{ bbl.and * }
|
|||
|
{ ", " * }
|
|||
|
if$
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
s nameptr format.name *
|
|||
|
}
|
|||
|
if$
|
|||
|
nameptr #1 + 'nameptr :=
|
|||
|
namesleft #1 - 'namesleft :=
|
|||
|
}
|
|||
|
while$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.key}
|
|||
|
{ empty$
|
|||
|
{ key field.or.null }
|
|||
|
{ "" }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.authors}
|
|||
|
{ author empty$ not
|
|||
|
{ author format.names }
|
|||
|
{ "empty author in " cite$ * warning$
|
|||
|
""
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.editors}
|
|||
|
{ editor empty$
|
|||
|
{ "" }
|
|||
|
{ editor format.names }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.translators}
|
|||
|
{ translator empty$
|
|||
|
{ "" }
|
|||
|
{ translator format.names
|
|||
|
entry.lang lang.zh =
|
|||
|
{ translator num.names$ #3 >
|
|||
|
{ "译" * }
|
|||
|
{ ", 译" * }
|
|||
|
if$
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.full.names}
|
|||
|
{'s :=
|
|||
|
#1 'nameptr :=
|
|||
|
s num.names$ 'numnames :=
|
|||
|
numnames 'namesleft :=
|
|||
|
{ namesleft #0 > }
|
|||
|
{ s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't :=
|
|||
|
t get.str.lang 'name.lang :=
|
|||
|
name.lang lang.en =
|
|||
|
{ t #1 "{vv~}{ll}" format.name$ 't := }
|
|||
|
{ t #1 "{ll}{ff}" format.name$ 't := }
|
|||
|
if$
|
|||
|
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" = booktitle empty$ not and
|
|||
|
or
|
|||
|
'author.editor.full
|
|||
|
{ type$ "collection" =
|
|||
|
type$ "proceedings" =
|
|||
|
or
|
|||
|
'editor.full
|
|||
|
'author.full
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {output.bibitem}
|
|||
|
{ newline$
|
|||
|
"\bibitem[" write$
|
|||
|
label ")" *
|
|||
|
make.full.names duplicate$ short.list =
|
|||
|
{ pop$ }
|
|||
|
{ duplicate$ "]" contains
|
|||
|
{ "{" swap$ * "}" * }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
*
|
|||
|
}
|
|||
|
if$
|
|||
|
"]{" * write$
|
|||
|
cite$ write$
|
|||
|
"}" write$
|
|||
|
newline$
|
|||
|
""
|
|||
|
before.all 'output.state :=
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {change.sentence.case}
|
|||
|
{ entry.lang lang.en =
|
|||
|
{ "t" change.case$ }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {add.link}
|
|||
|
{ url empty$ not
|
|||
|
{ "\href{" url * "}{" * swap$ * "}" * }
|
|||
|
{ doi empty$ not
|
|||
|
{ "\href{https://doi.org/" doi * "}{" * swap$ * "}" * }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.title}
|
|||
|
{ title empty$
|
|||
|
{ "" }
|
|||
|
{ title
|
|||
|
sentence.case.title
|
|||
|
'change.sentence.case
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
entry.numbered number empty$ not and
|
|||
|
{ bbl.colon *
|
|||
|
type$ "patent" = show.patent.country and
|
|||
|
{ address empty$ not
|
|||
|
{ address * ", " * }
|
|||
|
{ location empty$ not
|
|||
|
{ location * ", " * }
|
|||
|
{ entry.lang lang.zh =
|
|||
|
{ "中国" * ", " * }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
number *
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
link.title
|
|||
|
'add.link
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
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$
|
|||
|
}
|
|||
|
|
|||
|
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.volume}
|
|||
|
{ volume empty$ not
|
|||
|
{ volume is.number
|
|||
|
{ entry.lang lang.zh =
|
|||
|
{ "第 " volume * " 卷" * }
|
|||
|
{ "Vol." volume tie.or.space.connect }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ volume }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ "" }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.number}
|
|||
|
{ number empty$ not
|
|||
|
{ number is.number
|
|||
|
{ entry.lang lang.zh =
|
|||
|
{ "第 " number * " 册" * }
|
|||
|
{ "No." number tie.or.space.connect }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ number }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ "" }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.volume.number}
|
|||
|
{ volume empty$ not
|
|||
|
{ format.volume }
|
|||
|
{ format.number }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.title.vol.num}
|
|||
|
{ title
|
|||
|
sentence.case.title
|
|||
|
'change.sentence.case
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
entry.numbered
|
|||
|
{ number empty$ not
|
|||
|
{ bbl.colon * number * }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
{ format.volume.number 's :=
|
|||
|
s empty$ not
|
|||
|
{ bbl.colon * s * }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.series.vol.num.title}
|
|||
|
{ format.volume.number 's :=
|
|||
|
series empty$ not
|
|||
|
{ series
|
|||
|
sentence.case.title
|
|||
|
'change.sentence.case
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
entry.numbered
|
|||
|
{ bbl.wide.space * }
|
|||
|
{ bbl.colon *
|
|||
|
s empty$ not
|
|||
|
{ s * bbl.wide.space * }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
title *
|
|||
|
sentence.case.title
|
|||
|
'change.sentence.case
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
entry.numbered number empty$ not and
|
|||
|
{ bbl.colon * number * }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
{ format.title.vol.num }
|
|||
|
if$
|
|||
|
format.btitle
|
|||
|
link.title
|
|||
|
'add.link
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.booktitle.vol.num}
|
|||
|
{ booktitle
|
|||
|
entry.numbered
|
|||
|
'skip$
|
|||
|
{ format.volume.number 's :=
|
|||
|
s empty$ not
|
|||
|
{ bbl.colon * s * }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.series.vol.num.booktitle}
|
|||
|
{ format.volume.number 's :=
|
|||
|
series empty$ not
|
|||
|
{ series bbl.colon *
|
|||
|
entry.numbered not s empty$ not and
|
|||
|
{ s * bbl.wide.space * }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
booktitle *
|
|||
|
}
|
|||
|
{ format.booktitle.vol.num }
|
|||
|
if$
|
|||
|
format.btitle
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {remove.period}
|
|||
|
{ 't :=
|
|||
|
"" 's :=
|
|||
|
{ t empty$ not }
|
|||
|
{ t #1 #1 substring$ 'tmp.str :=
|
|||
|
tmp.str "." = not
|
|||
|
{ s tmp.str * 's := }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
t #2 global.max$ substring$ 't :=
|
|||
|
}
|
|||
|
while$
|
|||
|
s
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {abbreviate}
|
|||
|
{ remove.period
|
|||
|
't :=
|
|||
|
t "l" change.case$ 's :=
|
|||
|
""
|
|||
|
s "physical review letters" =
|
|||
|
{ "Phys Rev Lett" }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
's :=
|
|||
|
s empty$
|
|||
|
{ t }
|
|||
|
{ pop$ s }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {get.journal.title}
|
|||
|
{ short.journal
|
|||
|
{ shortjournal empty$ not
|
|||
|
{ shortjournal }
|
|||
|
{ journal empty$ not
|
|||
|
{ journal abbreviate }
|
|||
|
{ journaltitle empty$ not
|
|||
|
{ journaltitle abbreviate }
|
|||
|
{ "" }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
{ journal empty$ not
|
|||
|
{ journal }
|
|||
|
{ journaltitle empty$ not
|
|||
|
{ journaltitle }
|
|||
|
{ shortjournal empty$ not
|
|||
|
{ shortjournal }
|
|||
|
{ "" }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {check.arxiv.preprint}
|
|||
|
{ #1 #5 substring$ purify$ "l" change.case$ "arxiv" =
|
|||
|
{ #1 }
|
|||
|
{ #0 }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.journal}
|
|||
|
{ get.journal.title
|
|||
|
duplicate$ empty$ not
|
|||
|
{ italic.journal entry.lang lang.en = and
|
|||
|
'emphasize
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
link.journal
|
|||
|
'add.link
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {set.entry.mark}
|
|||
|
{ entry.mark empty$ not
|
|||
|
'pop$
|
|||
|
{ mark empty$ not
|
|||
|
{ pop$ mark 'entry.mark := }
|
|||
|
{ 'entry.mark := }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.mark}
|
|||
|
{ show.mark
|
|||
|
{ entry.mark
|
|||
|
show.medium.type
|
|||
|
{ medium empty$ not
|
|||
|
{ "/" * medium * }
|
|||
|
{ entry.is.electronic
|
|||
|
{ "/OL" * }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
'entry.mark :=
|
|||
|
space.before.mark
|
|||
|
{ " " }
|
|||
|
{ "\allowbreak" }
|
|||
|
if$
|
|||
|
"[" * entry.mark * "]" *
|
|||
|
}
|
|||
|
{ "" }
|
|||
|
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
|
|||
|
{ edition "1" = not
|
|||
|
{ entry.lang lang.zh =
|
|||
|
{ edition " 版" * }
|
|||
|
{ edition num.to.ordinal " ed." * }
|
|||
|
if$
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
{ entry.lang lang.en =
|
|||
|
{ edition change.sentence.case 's :=
|
|||
|
s "Revised" = s "Revised edition" = or
|
|||
|
{ "Rev. ed." }
|
|||
|
{ s " ed." * }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ edition }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.publisher}
|
|||
|
{ publisher empty$ not
|
|||
|
{ publisher }
|
|||
|
{ school empty$ not
|
|||
|
{ school }
|
|||
|
{ organization empty$ not
|
|||
|
{ organization }
|
|||
|
{ institution empty$ not
|
|||
|
{ institution }
|
|||
|
{ "" }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.address.publisher}
|
|||
|
{ address empty$ not
|
|||
|
{ address }
|
|||
|
{ location empty$ not
|
|||
|
{ location }
|
|||
|
{ "" }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
duplicate$ empty$ not
|
|||
|
{ format.publisher empty$ not
|
|||
|
{ bbl.colon * format.publisher * }
|
|||
|
{ entry.is.electronic not show.missing.address.publisher and
|
|||
|
{ bbl.colon * bbl.sine.nomine * }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
{ pop$
|
|||
|
entry.is.electronic not show.missing.address.publisher and
|
|||
|
{ format.publisher empty$ not
|
|||
|
{ bbl.sine.loco bbl.colon * format.publisher * }
|
|||
|
{ bbl.sine.loco.sine.nomine }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ format.publisher empty$ not
|
|||
|
{ format.publisher }
|
|||
|
{ "" }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {extract.before.dash}
|
|||
|
{ duplicate$ empty$
|
|||
|
{ pop$ "" }
|
|||
|
{ 's :=
|
|||
|
#1 'charptr :=
|
|||
|
s text.length$ #1 + 'len :=
|
|||
|
{ charptr len <
|
|||
|
s charptr #1 substring$ "-" = not
|
|||
|
and
|
|||
|
}
|
|||
|
{ charptr #1 + 'charptr := }
|
|||
|
while$
|
|||
|
s #1 charptr #1 - substring$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {extract.after.dash}
|
|||
|
{ duplicate$ empty$
|
|||
|
{ pop$ "" }
|
|||
|
{ 's :=
|
|||
|
#1 'charptr :=
|
|||
|
s text.length$ #1 + 'len :=
|
|||
|
{ charptr len <
|
|||
|
s charptr #1 substring$ "-" = not
|
|||
|
and
|
|||
|
}
|
|||
|
{ charptr #1 + 'charptr := }
|
|||
|
while$
|
|||
|
{ charptr len <
|
|||
|
s charptr #1 substring$ "-" =
|
|||
|
and
|
|||
|
}
|
|||
|
{ charptr #1 + 'charptr := }
|
|||
|
while$
|
|||
|
s charptr global.max$ substring$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {extract.before.slash}
|
|||
|
{ duplicate$ empty$
|
|||
|
{ pop$ "" }
|
|||
|
{ 's :=
|
|||
|
#1 'charptr :=
|
|||
|
s text.length$ #1 + 'len :=
|
|||
|
{ charptr len <
|
|||
|
s charptr #1 substring$ "/" = not
|
|||
|
and
|
|||
|
}
|
|||
|
{ charptr #1 + 'charptr := }
|
|||
|
while$
|
|||
|
s #1 charptr #1 - substring$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {extract.after.slash}
|
|||
|
{ duplicate$ empty$
|
|||
|
{ pop$ "" }
|
|||
|
{ 's :=
|
|||
|
#1 'charptr :=
|
|||
|
s text.length$ #1 + 'len :=
|
|||
|
{ charptr len <
|
|||
|
s charptr #1 substring$ "-" = not
|
|||
|
and
|
|||
|
s charptr #1 substring$ "/" = not
|
|||
|
and
|
|||
|
}
|
|||
|
{ charptr #1 + 'charptr := }
|
|||
|
while$
|
|||
|
{ charptr len <
|
|||
|
s charptr #1 substring$ "-" =
|
|||
|
s charptr #1 substring$ "/" =
|
|||
|
or
|
|||
|
and
|
|||
|
}
|
|||
|
{ charptr #1 + 'charptr := }
|
|||
|
while$
|
|||
|
s charptr global.max$ substring$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.year}
|
|||
|
{ year empty$ not
|
|||
|
{ year extra.label * }
|
|||
|
{ date empty$ not
|
|||
|
{ date extract.before.dash extra.label * }
|
|||
|
{ entry.is.electronic not
|
|||
|
{ "empty year in " cite$ * warning$ }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
urldate empty$ not
|
|||
|
{ "[" urldate extract.before.dash * extra.label * "]" * }
|
|||
|
{ "" }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.periodical.year}
|
|||
|
{ year empty$ not
|
|||
|
{ year extract.before.slash
|
|||
|
"--" *
|
|||
|
year extract.after.slash
|
|||
|
duplicate$ empty$
|
|||
|
'pop$
|
|||
|
{ * }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ date empty$ not
|
|||
|
{ date extract.before.dash }
|
|||
|
{ "empty year in " cite$ * warning$
|
|||
|
urldate empty$ not
|
|||
|
{ "[" urldate extract.before.dash * "]" * }
|
|||
|
{ "" }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.date}
|
|||
|
{ date empty$ not
|
|||
|
{ type$ "patent" = type$ "newspaper" = or
|
|||
|
{ date }
|
|||
|
{ entrysubtype empty$ not
|
|||
|
{ type$ "article" = entrysubtype "newspaper" = and
|
|||
|
{ date }
|
|||
|
{ format.year }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ format.year }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
{ year empty$ not
|
|||
|
{ format.year }
|
|||
|
{ "" }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.editdate}
|
|||
|
{ date empty$ not
|
|||
|
{ "\allowbreak(" date * ")" * }
|
|||
|
{ "" }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.urldate}
|
|||
|
{ show.urldate show.url and entry.url empty$ not and
|
|||
|
is.pure.electronic or
|
|||
|
urldate empty$ not and
|
|||
|
{ "\allowbreak[" urldate * "]" * }
|
|||
|
{ "" }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {hyphenate}
|
|||
|
{ 't :=
|
|||
|
""
|
|||
|
{ t empty$ not }
|
|||
|
{ t #1 #1 substring$ "-" =
|
|||
|
{ wave.dash.in.pages
|
|||
|
{ "~" * }
|
|||
|
{ "-" * }
|
|||
|
if$
|
|||
|
{ t #1 #1 substring$ "-" = }
|
|||
|
{ t #2 global.max$ substring$ 't := }
|
|||
|
while$
|
|||
|
}
|
|||
|
{ t #1 #1 substring$ *
|
|||
|
t #2 global.max$ substring$ 't :=
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
while$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.pages}
|
|||
|
{ pages empty$
|
|||
|
{ "" }
|
|||
|
{ pages hyphenate }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.extracted.pages}
|
|||
|
{ pages empty$
|
|||
|
{ "" }
|
|||
|
{ pages
|
|||
|
only.start.page
|
|||
|
'extract.before.dash
|
|||
|
'hyphenate
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.journal.volume}
|
|||
|
{ volume empty$ not
|
|||
|
{ bold.journal.volume
|
|||
|
{ "\textbf{" volume * "}" * }
|
|||
|
{ volume }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ "" }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.journal.number}
|
|||
|
{ number empty$ not
|
|||
|
{ "\allowbreak (" number * ")" * }
|
|||
|
{ "" }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.journal.pages}
|
|||
|
{ pages empty$
|
|||
|
{ "" }
|
|||
|
{ format.extracted.pages }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.periodical.year.volume.number}
|
|||
|
{ year empty$ not
|
|||
|
{ year extract.before.slash }
|
|||
|
{ "empty year in periodical " cite$ * warning$ }
|
|||
|
if$
|
|||
|
volume empty$ not
|
|||
|
{ ", " * volume extract.before.dash * }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
number empty$ not
|
|||
|
{ "\allowbreak (" * number extract.before.dash * ")" * }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
"--" *
|
|||
|
year extract.after.slash empty$
|
|||
|
volume extract.after.dash empty$ and
|
|||
|
number extract.after.dash empty$ and not
|
|||
|
{ year extract.after.slash empty$ not
|
|||
|
{ year extract.after.slash * }
|
|||
|
{ year extract.before.slash * }
|
|||
|
if$
|
|||
|
volume empty$ not
|
|||
|
{ ", " * volume extract.after.dash * }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
number empty$ not
|
|||
|
{ "\allowbreak (" * number extract.after.dash * ")" * }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {check.url}
|
|||
|
{ url empty$ not
|
|||
|
{ url 'entry.url :=
|
|||
|
#1 'entry.is.electronic :=
|
|||
|
}
|
|||
|
{ howpublished empty$ not
|
|||
|
{ howpublished #1 #5 substring$ "\url{" =
|
|||
|
{ howpublished 'entry.url :=
|
|||
|
#1 'entry.is.electronic :=
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
{ note empty$ not
|
|||
|
{ note #1 #5 substring$ "\url{" =
|
|||
|
{ note 'entry.url :=
|
|||
|
#1 'entry.is.electronic :=
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {output.url}
|
|||
|
{ show.url is.pure.electronic or
|
|||
|
entry.url empty$ not and
|
|||
|
{ new.block
|
|||
|
entry.url #1 #5 substring$ "\url{" =
|
|||
|
{ entry.url }
|
|||
|
{ "\url{" entry.url * "}" * }
|
|||
|
if$
|
|||
|
output
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {check.doi}
|
|||
|
{ doi empty$ not
|
|||
|
{ #1 'entry.is.electronic := }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {is.in.url}
|
|||
|
{ 's :=
|
|||
|
s empty$
|
|||
|
{ #1 }
|
|||
|
{ entry.url empty$
|
|||
|
{ #0 }
|
|||
|
{ s text.length$ 'len :=
|
|||
|
entry.url "l" change.case$ text.length$ 'charptr :=
|
|||
|
{ entry.url "l" change.case$ charptr len substring$ s "l" change.case$ = not
|
|||
|
charptr #0 >
|
|||
|
and
|
|||
|
}
|
|||
|
{ charptr #1 - 'charptr := }
|
|||
|
while$
|
|||
|
charptr
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.doi}
|
|||
|
{ ""
|
|||
|
doi empty$ not
|
|||
|
{ "" 's :=
|
|||
|
doi 't :=
|
|||
|
#0 'numnames :=
|
|||
|
{ t empty$ not}
|
|||
|
{ t #1 #1 substring$ 'tmp.str :=
|
|||
|
tmp.str "," = tmp.str " " = or t #2 #1 substring$ empty$ or
|
|||
|
{ t #2 #1 substring$ empty$
|
|||
|
{ s tmp.str * 's := }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
s empty$ s is.in.url or
|
|||
|
'skip$
|
|||
|
{ numnames #1 + 'numnames :=
|
|||
|
numnames #1 >
|
|||
|
{ ", " * }
|
|||
|
{ "DOI: " * }
|
|||
|
if$
|
|||
|
"\doi{" s * "}" * *
|
|||
|
}
|
|||
|
if$
|
|||
|
"" 's :=
|
|||
|
}
|
|||
|
{ s tmp.str * 's := }
|
|||
|
if$
|
|||
|
t #2 global.max$ substring$ 't :=
|
|||
|
}
|
|||
|
while$
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {output.doi}
|
|||
|
{ doi empty$ not show.doi and
|
|||
|
show.english.translation entry.lang lang.zh = and not and
|
|||
|
{ new.block
|
|||
|
format.doi output
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {check.electronic}
|
|||
|
{ "" 'entry.url :=
|
|||
|
#0 'entry.is.electronic :=
|
|||
|
'check.doi
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
'check.url
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
medium empty$ not
|
|||
|
{ medium "MT" = medium "DK" = or medium "CD" = or medium "OL" = or
|
|||
|
{ #1 'entry.is.electronic := }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.eprint}
|
|||
|
{ archivePrefix empty$ not
|
|||
|
{ archivePrefix }
|
|||
|
{ eprinttype empty$ not
|
|||
|
{ archivePrefix }
|
|||
|
{ "" }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
's :=
|
|||
|
s empty$ not
|
|||
|
{ s ": \eprint{" *
|
|||
|
url empty$ not
|
|||
|
{ url }
|
|||
|
{ "https://" s "l" change.case$ * ".org/abs/" * eprint * }
|
|||
|
if$
|
|||
|
* "}{" *
|
|||
|
eprint * "}" *
|
|||
|
}
|
|||
|
{ eprint }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {output.eprint}
|
|||
|
{ show.preprint eprint empty$ not and
|
|||
|
{ new.block
|
|||
|
format.eprint output
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.note}
|
|||
|
{ note empty$ not show.note and
|
|||
|
{ note }
|
|||
|
{ "" }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {output.translation}
|
|||
|
{ show.english.translation entry.lang lang.zh = and
|
|||
|
{ translation empty$ not
|
|||
|
{ translation }
|
|||
|
{ "[English translation missing!]" }
|
|||
|
if$
|
|||
|
" (in Chinese)" * output
|
|||
|
write$
|
|||
|
format.doi duplicate$ empty$ not
|
|||
|
{ newline$
|
|||
|
write$
|
|||
|
}
|
|||
|
'pop$
|
|||
|
if$
|
|||
|
" \\" write$
|
|||
|
newline$
|
|||
|
"(" write$
|
|||
|
""
|
|||
|
before.all 'output.state :=
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {empty.misc.check}
|
|||
|
{ author empty$ title empty$
|
|||
|
year empty$
|
|||
|
and and
|
|||
|
key empty$ not and
|
|||
|
{ "all relevant fields are empty in " cite$ * warning$ }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {monograph}
|
|||
|
{ output.bibitem
|
|||
|
output.translation
|
|||
|
author empty$ not
|
|||
|
{ format.authors }
|
|||
|
{ editor empty$ not
|
|||
|
{ format.editors }
|
|||
|
{ "empty author and editor in " cite$ * warning$
|
|||
|
""
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
output
|
|||
|
year.after.author
|
|||
|
{ period.after.author
|
|||
|
'new.sentence
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
format.year "year" output.check
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
new.block
|
|||
|
format.series.vol.num.title "title" output.check
|
|||
|
"M" set.entry.mark
|
|||
|
format.mark "" output.after
|
|||
|
new.block
|
|||
|
format.translators output
|
|||
|
new.sentence
|
|||
|
format.edition output
|
|||
|
new.block
|
|||
|
format.address.publisher output
|
|||
|
year.after.author not
|
|||
|
{ format.year "year" output.check }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
format.pages bbl.pages.colon output.after
|
|||
|
format.urldate "" output.after
|
|||
|
output.url
|
|||
|
output.doi
|
|||
|
new.block
|
|||
|
format.note output
|
|||
|
fin.entry
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {incollection}
|
|||
|
{ output.bibitem
|
|||
|
output.translation
|
|||
|
format.authors output
|
|||
|
author format.key output
|
|||
|
year.after.author
|
|||
|
{ period.after.author
|
|||
|
'new.sentence
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
format.year "year" output.check
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
new.block
|
|||
|
format.title "title" output.check
|
|||
|
"M" set.entry.mark
|
|||
|
format.mark "" output.after
|
|||
|
new.block
|
|||
|
format.translators output
|
|||
|
new.slash
|
|||
|
format.editors output
|
|||
|
new.block
|
|||
|
format.series.vol.num.booktitle "booktitle" output.check
|
|||
|
new.block
|
|||
|
format.edition output
|
|||
|
new.block
|
|||
|
format.address.publisher output
|
|||
|
year.after.author not
|
|||
|
{ format.year "year" output.check }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
format.extracted.pages bbl.pages.colon output.after
|
|||
|
format.urldate "" output.after
|
|||
|
output.url
|
|||
|
output.doi
|
|||
|
new.block
|
|||
|
format.note output
|
|||
|
fin.entry
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {periodical}
|
|||
|
{ output.bibitem
|
|||
|
output.translation
|
|||
|
format.authors output
|
|||
|
author format.key output
|
|||
|
year.after.author
|
|||
|
{ period.after.author
|
|||
|
'new.sentence
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
format.year "year" output.check
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
new.block
|
|||
|
format.title "title" output.check
|
|||
|
"J" set.entry.mark
|
|||
|
format.mark "" output.after
|
|||
|
new.block
|
|||
|
format.periodical.year.volume.number output
|
|||
|
new.block
|
|||
|
format.address.publisher output
|
|||
|
year.after.author not
|
|||
|
{ format.periodical.year "year" output.check }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
format.urldate "" output.after
|
|||
|
output.url
|
|||
|
output.doi
|
|||
|
new.block
|
|||
|
format.note output
|
|||
|
fin.entry
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {journal.article}
|
|||
|
{ output.bibitem
|
|||
|
output.translation
|
|||
|
format.authors output
|
|||
|
author format.key output
|
|||
|
year.after.author
|
|||
|
{ period.after.author
|
|||
|
'new.sentence
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
format.year "year" output.check
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
new.block
|
|||
|
title.in.journal
|
|||
|
{ format.title "title" output.check
|
|||
|
entrysubtype empty$ not
|
|||
|
{
|
|||
|
entrysubtype "newspaper" =
|
|||
|
{ "N" set.entry.mark }
|
|||
|
{ "J" set.entry.mark }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ "J" set.entry.mark }
|
|||
|
if$
|
|||
|
format.mark "" output.after
|
|||
|
new.block
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
format.journal "journal" output.check
|
|||
|
year.after.author not
|
|||
|
{ format.date "year" output.check }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
format.journal.volume output
|
|||
|
format.journal.number "" output.after
|
|||
|
format.journal.pages bbl.pages.colon output.after
|
|||
|
format.urldate "" output.after
|
|||
|
output.url
|
|||
|
output.doi
|
|||
|
new.block
|
|||
|
format.note output
|
|||
|
fin.entry
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {patent}
|
|||
|
{ output.bibitem
|
|||
|
output.translation
|
|||
|
format.authors output
|
|||
|
author format.key output
|
|||
|
year.after.author
|
|||
|
{ period.after.author
|
|||
|
'new.sentence
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
format.year "year" output.check
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
new.block
|
|||
|
format.title "title" output.check
|
|||
|
"P" set.entry.mark
|
|||
|
format.mark "" output.after
|
|||
|
new.block
|
|||
|
format.date "year" output.check
|
|||
|
format.urldate "" output.after
|
|||
|
output.url
|
|||
|
output.doi
|
|||
|
new.block
|
|||
|
format.note output
|
|||
|
fin.entry
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {electronic}
|
|||
|
{ #1 #1 check.electronic
|
|||
|
#1 'entry.is.electronic :=
|
|||
|
#1 'is.pure.electronic :=
|
|||
|
output.bibitem
|
|||
|
output.translation
|
|||
|
format.authors output
|
|||
|
author format.key output
|
|||
|
year.after.author
|
|||
|
{ period.after.author
|
|||
|
'new.sentence
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
format.year "year" output.check
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
new.block
|
|||
|
format.series.vol.num.title "title" output.check
|
|||
|
"EB" set.entry.mark
|
|||
|
format.mark "" output.after
|
|||
|
new.block
|
|||
|
format.address.publisher output
|
|||
|
year.after.author not
|
|||
|
{ date empty$
|
|||
|
{ format.date output }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
format.pages bbl.pages.colon output.after
|
|||
|
format.editdate "" output.after
|
|||
|
format.urldate "" output.after
|
|||
|
output.url
|
|||
|
output.doi
|
|||
|
new.block
|
|||
|
format.note output
|
|||
|
fin.entry
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {preprint}
|
|||
|
{ output.bibitem
|
|||
|
output.translation
|
|||
|
author empty$ not
|
|||
|
{ format.authors }
|
|||
|
{ editor empty$ not
|
|||
|
{ format.editors }
|
|||
|
{ "empty author and editor in " cite$ * warning$
|
|||
|
""
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
output
|
|||
|
year.after.author
|
|||
|
{ period.after.author
|
|||
|
'new.sentence
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
format.year "year" output.check
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
new.block
|
|||
|
title.in.journal
|
|||
|
{ format.series.vol.num.title "title" output.check
|
|||
|
"A" set.entry.mark
|
|||
|
format.mark "" output.after
|
|||
|
new.block
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
format.translators output
|
|||
|
new.sentence
|
|||
|
format.edition output
|
|||
|
new.block
|
|||
|
year.after.author not
|
|||
|
{ date empty$
|
|||
|
{ format.date output }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
format.pages bbl.pages.colon output.after
|
|||
|
format.editdate "" output.after
|
|||
|
format.urldate "" output.after
|
|||
|
output.eprint
|
|||
|
output.url
|
|||
|
show.preprint not eprint empty$ or
|
|||
|
'output.doi
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
new.block
|
|||
|
format.note output
|
|||
|
fin.entry
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {misc}
|
|||
|
{ get.journal.title
|
|||
|
duplicate$ empty$ not
|
|||
|
{ check.arxiv.preprint
|
|||
|
'preprint
|
|||
|
'journal.article
|
|||
|
if$
|
|||
|
}
|
|||
|
{ pop$
|
|||
|
booktitle empty$ not
|
|||
|
'incollection
|
|||
|
{ publisher empty$ not
|
|||
|
'monograph
|
|||
|
{ eprint empty$ not archivePrefix empty$ not or
|
|||
|
'preprint
|
|||
|
{ entry.is.electronic
|
|||
|
'electronic
|
|||
|
{
|
|||
|
"Z" set.entry.mark
|
|||
|
monograph
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
empty.misc.check
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {archive}
|
|||
|
{ "A" set.entry.mark
|
|||
|
misc
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {article} { misc }
|
|||
|
|
|||
|
FUNCTION {book} { monograph }
|
|||
|
|
|||
|
FUNCTION {booklet} { book }
|
|||
|
|
|||
|
FUNCTION {collection}
|
|||
|
{ "G" set.entry.mark
|
|||
|
monograph
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {database}
|
|||
|
{ "DB" set.entry.mark
|
|||
|
electronic
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {dataset}
|
|||
|
{ "DS" set.entry.mark
|
|||
|
electronic
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {inbook} {
|
|||
|
booktitle empty$
|
|||
|
'book
|
|||
|
'incollection
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {inproceedings}
|
|||
|
{ "C" set.entry.mark
|
|||
|
incollection
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {conference} { inproceedings }
|
|||
|
|
|||
|
FUNCTION {legislation} { archive }
|
|||
|
|
|||
|
FUNCTION {map}
|
|||
|
{ "CM" set.entry.mark
|
|||
|
misc
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {manual} { monograph }
|
|||
|
|
|||
|
FUNCTION {mastersthesis}
|
|||
|
{ "D" set.entry.mark
|
|||
|
monograph
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {newspaper}
|
|||
|
{ "N" set.entry.mark
|
|||
|
article
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {online}
|
|||
|
{ "EB" set.entry.mark
|
|||
|
electronic
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {phdthesis} { mastersthesis }
|
|||
|
|
|||
|
FUNCTION {proceedings}
|
|||
|
{ "C" set.entry.mark
|
|||
|
monograph
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {software}
|
|||
|
{ "CP" set.entry.mark
|
|||
|
electronic
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {standard}
|
|||
|
{ "S" set.entry.mark
|
|||
|
misc
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {techreport}
|
|||
|
{ "R" set.entry.mark
|
|||
|
misc
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {unpublished} { misc }
|
|||
|
|
|||
|
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"}
|
|||
|
|
|||
|
FUNCTION {sortify}
|
|||
|
{ purify$
|
|||
|
"l" change.case$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {chop.word}
|
|||
|
{ 's :=
|
|||
|
'len :=
|
|||
|
s #1 len substring$ =
|
|||
|
{ s len #1 + global.max$ substring$ }
|
|||
|
's
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.lab.name}
|
|||
|
{ "{vv~}{ll}{, jj}{, ff}" format.name$ 't :=
|
|||
|
t "others" =
|
|||
|
{ citation.et.al }
|
|||
|
{ t get.str.lang 'name.lang :=
|
|||
|
name.lang lang.zh = name.lang lang.ja = or
|
|||
|
{ t #1 "{ll}{ff}" format.name$ }
|
|||
|
{ t #1 "{vv~}{ll}" format.name$ }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.lab.names}
|
|||
|
{ 's :=
|
|||
|
s #1 format.lab.name 'short.label :=
|
|||
|
#1 'nameptr :=
|
|||
|
s num.names$ 'numnames :=
|
|||
|
""
|
|||
|
numnames 'namesleft :=
|
|||
|
{ namesleft #0 > }
|
|||
|
{ s nameptr format.lab.name citation.et.al =
|
|||
|
numnames citation.et.al.min #1 - > nameptr citation.et.al.use.first > and or
|
|||
|
{ bbl.space *
|
|||
|
citation.et.al *
|
|||
|
#1 'namesleft :=
|
|||
|
}
|
|||
|
{ nameptr #1 >
|
|||
|
{ namesleft #1 = citation.and "" = not and
|
|||
|
{ citation.and * }
|
|||
|
{ ", " * }
|
|||
|
if$
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
s nameptr format.lab.name *
|
|||
|
}
|
|||
|
if$
|
|||
|
nameptr #1 + 'nameptr :=
|
|||
|
namesleft #1 - 'namesleft :=
|
|||
|
}
|
|||
|
while$
|
|||
|
}
|
|||
|
|
|||
|
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}
|
|||
|
{ "" 'short.label :=
|
|||
|
type$ "book" =
|
|||
|
type$ "inbook" = booktitle empty$ not and
|
|||
|
or
|
|||
|
'author.editor.key.label
|
|||
|
{ type$ "collection" =
|
|||
|
type$ "proceedings" =
|
|||
|
or
|
|||
|
{ editor empty$ not
|
|||
|
'editor.key.organization.label
|
|||
|
'author.key.organization.label
|
|||
|
if$
|
|||
|
}
|
|||
|
'author.key.label
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
'short.list :=
|
|||
|
short.label empty$
|
|||
|
{ short.list 'short.label := }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {calc.label}
|
|||
|
{ calc.short.authors
|
|||
|
short.list "]" contains
|
|||
|
{ "{" short.list * "}" * }
|
|||
|
{ short.list }
|
|||
|
if$
|
|||
|
"("
|
|||
|
*
|
|||
|
format.year duplicate$ empty$
|
|||
|
short.list key field.or.null = or
|
|||
|
{ pop$ "" }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
duplicate$ "]" contains
|
|||
|
{ "{" swap$ * "}" * }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
*
|
|||
|
'label :=
|
|||
|
short.label
|
|||
|
"("
|
|||
|
*
|
|||
|
format.year duplicate$ empty$
|
|||
|
short.list key field.or.null = or
|
|||
|
{ pop$ "" }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
*
|
|||
|
'short.label :=
|
|||
|
}
|
|||
|
|
|||
|
INTEGERS { seq.num }
|
|||
|
|
|||
|
FUNCTION {init.seq}
|
|||
|
{ #0 'seq.num :=}
|
|||
|
|
|||
|
FUNCTION {int.to.fix}
|
|||
|
{ "000000000" swap$ int.to.str$ *
|
|||
|
#-1 #10 substring$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {presort}
|
|||
|
{ set.entry.lang
|
|||
|
set.entry.numbered
|
|||
|
show.url show.doi check.electronic
|
|||
|
#0 'is.pure.electronic :=
|
|||
|
calc.label
|
|||
|
label sortify
|
|||
|
" "
|
|||
|
*
|
|||
|
seq.num #1 + 'seq.num :=
|
|||
|
seq.num int.to.fix
|
|||
|
'sort.label :=
|
|||
|
sort.label *
|
|||
|
#1 entry.max$ substring$
|
|||
|
'sort.key$ :=
|
|||
|
}
|
|||
|
|
|||
|
STRINGS { longest.label last.label next.extra last.extra.label }
|
|||
|
|
|||
|
INTEGERS { longest.label.width number.label }
|
|||
|
|
|||
|
FUNCTION {initialize.longest.label}
|
|||
|
{ "" 'longest.label :=
|
|||
|
#0 int.to.chr$ 'last.label :=
|
|||
|
"" 'next.extra :=
|
|||
|
#0 'longest.label.width :=
|
|||
|
#0 'number.label :=
|
|||
|
"" 'last.extra.label :=
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {forward.pass}
|
|||
|
{
|
|||
|
number.label #1 + 'number.label :=
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {reverse.pass}
|
|||
|
{
|
|||
|
label extra.label * 'label :=
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {bib.sort.order}
|
|||
|
{ sort.label 'sort.key$ :=
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {begin.bib}
|
|||
|
{ preamble$ empty$
|
|||
|
'skip$
|
|||
|
{ preamble$ write$ newline$ }
|
|||
|
if$
|
|||
|
"\begin{thebibliography}{" number.label int.to.str$ * "}" *
|
|||
|
write$ newline$
|
|||
|
terms.in.macro
|
|||
|
{ "\providecommand{\biband}{和}"
|
|||
|
write$ newline$
|
|||
|
"\providecommand{\bibetal}{等}"
|
|||
|
write$ newline$
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
"\providecommand{\natexlab}[1]{#1}"
|
|||
|
write$ newline$
|
|||
|
"\providecommand{\url}[1]{#1}"
|
|||
|
write$ newline$
|
|||
|
"\expandafter\ifx\csname urlstyle\endcsname\relax\else"
|
|||
|
write$ newline$
|
|||
|
" \urlstyle{same}\fi"
|
|||
|
write$ newline$
|
|||
|
"\expandafter\ifx\csname href\endcsname\relax"
|
|||
|
write$ newline$
|
|||
|
" \DeclareUrlCommand\doi{\urlstyle{rm}}"
|
|||
|
write$ newline$
|
|||
|
" \def\eprint#1#2{#2}"
|
|||
|
write$ newline$
|
|||
|
"\else"
|
|||
|
write$ newline$
|
|||
|
" \def\doi#1{\href{https://doi.org/#1}{\nolinkurl{#1}}}"
|
|||
|
write$ newline$
|
|||
|
" \let\eprint\href"
|
|||
|
write$ newline$
|
|||
|
"\fi"
|
|||
|
write$ newline$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {end.bib}
|
|||
|
{ newline$
|
|||
|
"\end{thebibliography}" write$ newline$
|
|||
|
}
|
|||
|
|
|||
|
READ
|
|||
|
|
|||
|
EXECUTE {init.state.consts}
|
|||
|
|
|||
|
EXECUTE {load.config}
|
|||
|
|
|||
|
EXECUTE {init.seq}
|
|||
|
|
|||
|
ITERATE {presort}
|
|||
|
|
|||
|
SORT
|
|||
|
|
|||
|
EXECUTE {initialize.longest.label}
|
|||
|
|
|||
|
ITERATE {forward.pass}
|
|||
|
|
|||
|
REVERSE {reverse.pass}
|
|||
|
|
|||
|
ITERATE {bib.sort.order}
|
|||
|
|
|||
|
SORT
|
|||
|
|
|||
|
EXECUTE {begin.bib}
|
|||
|
|
|||
|
ITERATE {call.type$}
|
|||
|
|
|||
|
EXECUTE {end.bib}
|