diff options
author | Karl Berry <karl@freefriends.org> | 2020-12-17 22:10:23 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2020-12-17 22:10:23 +0000 |
commit | 2b1bdfc1977f8221d10f4a2557821edd99369861 (patch) | |
tree | 7eab670f968e139a6139cbd9dc5c0516bd46229f /Master/texmf-dist/bibtex | |
parent | a84a9cc5fff6a4c026e565163a77f0f746bc000b (diff) |
gbt7714 (17dec20)
git-svn-id: svn://tug.org/texlive/trunk@57157 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/bibtex')
-rw-r--r-- | Master/texmf-dist/bibtex/bst/gbt7714/gbt7714-author-year.bst | 543 | ||||
-rw-r--r-- | Master/texmf-dist/bibtex/bst/gbt7714/gbt7714-numerical.bst | 529 |
2 files changed, 843 insertions, 229 deletions
diff --git a/Master/texmf-dist/bibtex/bst/gbt7714/gbt7714-author-year.bst b/Master/texmf-dist/bibtex/bst/gbt7714/gbt7714-author-year.bst index de890a107a8..ed3fc4b811b 100644 --- a/Master/texmf-dist/bibtex/bst/gbt7714/gbt7714-author-year.bst +++ b/Master/texmf-dist/bibtex/bst/gbt7714/gbt7714-author-year.bst @@ -6,9 +6,9 @@ %% %% gbt7714.dtx (with options: `2015,authoryear') %% ------------------------------------------------------------------- -%% GB/T 7714-2015 BibTeX Style +%% GB/T 7714—2015 BibTeX Style %% https://github.com/CTeX-org/gbt7714-bibtex-style -%% Version: 2020/06/08 v2.0.2 +%% Version: 2020/12/17 v2.1 %% ------------------------------------------------------------------- %% Copyright (C) 2016-2020 by Zeping Lee <zepinglee AT gmail.com> %% ------------------------------------------------------------------- @@ -21,9 +21,14 @@ %% version 2005/12/01 or later. %% ------------------------------------------------------------------- INTEGERS { + citation.et.al.min + citation.et.al.use.first + bibliography.et.al.min + bibliography.et.al.use.first uppercase.name - max.num.authors - period.between.author.year + terms.in.macro + year.after.author + period.after.author sentence.case.title link.title title.in.journal @@ -31,11 +36,13 @@ INTEGERS { show.medium.type slash.for.extraction in.booktitle - abbreviate.journal + short.journal italic.journal bold.journal.volume show.missing.address.publisher + space.before.pages only.start.page + show.urldate show.url show.doi show.preprint @@ -50,9 +57,14 @@ INTEGERS { 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 := - #3 'max.num.authors := - #0 'period.between.author.year := + #0 'terms.in.macro := + #1 'year.after.author := + #0 'period.after.author := #1 'sentence.case.title := #0 'link.title := #1 'title.in.journal := @@ -60,11 +72,13 @@ FUNCTION {load.config} #1 'show.medium.type := #1 'slash.for.extraction := #0 'in.booktitle := - #0 'abbreviate.journal := + #0 'short.journal := #0 'italic.journal := #0 'bold.journal.volume := #1 'show.missing.address.publisher := + #1 'space.before.pages := #0 'only.start.page := + #1 'show.urldate := #1 'show.url := #1 'show.doi := #0 'show.preprint := @@ -87,11 +101,15 @@ ENTRY edition editor eprint + eprinttype howpublished institution journal + journaltitle key + langid language + location mark medium note @@ -101,6 +119,7 @@ ENTRY publisher school series + shortjournal title translation translator @@ -109,8 +128,8 @@ ENTRY volume year } - { entry.lang entry.is.electronic entry.numbered } - { label extra.label sort.label short.list entry.mark entry.url } + { 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 } @@ -145,6 +164,9 @@ FUNCTION {bbl.space} if$ } +FUNCTION {bbl.and} +{ "" } + FUNCTION {bbl.et.al} { entry.lang lang.zh = { "等" } @@ -160,11 +182,29 @@ FUNCTION {bbl.et.al} if$ } +FUNCTION {citation.and} +{ terms.in.macro + { "{\biband}" } + 'bbl.and + if$ +} + FUNCTION {citation.et.al} -{ bbl.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 " } @@ -456,16 +496,27 @@ FUNCTION {check.entry.lang} get.str.lang } +STRINGS { entry.langid } + FUNCTION {set.entry.lang} -{ language empty$ +{ "" 'entry.langid := + language empty$ not + { language 'entry.langid := } + 'skip$ + if$ + langid empty$ not + { langid 'entry.langid := } + 'skip$ + if$ + entry.langid empty$ { check.entry.lang } - { language "english" = language "american" = or language "british" = or + { entry.langid "english" = entry.langid "american" = or entry.langid "british" = or { lang.en } - { language "chinese" = + { entry.langid "chinese" = { lang.zh } - { language "japanese" = + { entry.langid "japanese" = { lang.ja } - { language "russian" = + { entry.langid "russian" = { lang.ru } { check.entry.lang } if$ @@ -491,6 +542,25 @@ FUNCTION {set.entry.numbered} 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 := @@ -498,31 +568,21 @@ FUNCTION {format.names} "" numnames 'namesleft := { namesleft #0 > } - { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't := - nameptr #1 > - { ", " * } - 'skip$ - if$ - nameptr max.num.authors > - { bbl.et.al * + { 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 := } - { 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$ } + { nameptr #1 > + { namesleft #1 = bbl.and "" = not and + { bbl.and * } + { ", " * } if$ - * } + 'skip$ if$ + s nameptr format.name * } if$ nameptr #1 + 'nameptr := @@ -916,18 +976,38 @@ FUNCTION {abbreviate} } FUNCTION {format.journal} -{ journal empty$ not - { journal - abbreviate.journal - 'abbreviate - 'skip$ +{ "" + short.journal + { shortjournal empty$ not + { shortjournal * } + { journal empty$ not + { journal * abbreviate } + { journaltitle empty$ not + { journaltitle * abbreviate } + 'skip$ + if$ + } + if$ + } + if$ + } + { journal empty$ not + { journal * } + { journaltitle empty$ not + { journaltitle * } + 'skip$ + if$ + } if$ - italic.journal entry.lang lang.en = and + } + if$ + duplicate$ empty$ not + { italic.journal entry.lang lang.en = and 'italicize 'skip$ if$ } - { "" } + 'skip$ if$ } @@ -958,7 +1038,7 @@ FUNCTION {format.mark} 'skip$ if$ 'entry.mark := - "\allowbreak[" entry.mark * "]" * + "[" entry.mark * "]" * } { "" } if$ @@ -1026,8 +1106,15 @@ FUNCTION {format.publisher} FUNCTION {format.address.publisher} { address empty$ not - { address - format.publisher 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 * } @@ -1036,7 +1123,8 @@ FUNCTION {format.address.publisher} } if$ } - { entry.is.electronic not show.missing.address.publisher and + { 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 } @@ -1107,9 +1195,93 @@ FUNCTION {contains.dash} 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 {contains.slash} +{ duplicate$ empty$ + { pop$ #0 } + { 's := + { s empty$ not + s #1 #1 substring$ "-" = not + and + s #1 #1 substring$ "/" = not + and + } + { s #2 global.max$ substring$ 's := } + while$ + s empty$ not + } + if$ +} + FUNCTION {format.year} { year empty$ not - { year extract.before.dash } + { year extract.before.slash extra.label * } + { date empty$ not + { date extract.before.dash extra.label * } + { "empty year in " cite$ * warning$ + 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$ @@ -1121,14 +1293,15 @@ FUNCTION {format.year} if$ } if$ - extra.label * } FUNCTION {format.date} { type$ "patent" = type$ "newspaper" = or date empty$ not and { date } - { year } + { year field.or.null + extra.label * + } if$ } @@ -1140,7 +1313,9 @@ FUNCTION {format.editdate} } FUNCTION {format.urldate} -{ urldate empty$ not entry.is.electronic and +{ urldate empty$ not + show.urldate show.url and is.pure.electronic or and + url empty$ not and { "\allowbreak[" urldate * "]" * } { "" } if$ @@ -1196,7 +1371,7 @@ FUNCTION {format.journal.volume} FUNCTION {format.journal.number} { number empty$ not - { "\penalty0 (" number * ")" * } + { "\allowbreak (" number * ")" * } { "" } if$ } @@ -1204,15 +1379,13 @@ FUNCTION {format.journal.number} FUNCTION {format.journal.pages} { pages empty$ { "" } - { ": " - format.extracted.pages * - } + { format.extracted.pages } if$ } FUNCTION {format.periodical.year.volume.number} { year empty$ not - { year extract.before.dash } + { year extract.before.slash } { "empty year in periodical " cite$ * warning$ } if$ volume empty$ not @@ -1220,27 +1393,23 @@ FUNCTION {format.periodical.year.volume.number} 'skip$ if$ number empty$ not - { "\penalty0 (" * number extract.before.dash * ")" * } + { "\allowbreak (" * number extract.before.dash * ")" * } 'skip$ if$ - year contains.dash - { "--" * - year extract.after.dash empty$ - volume extract.after.dash empty$ and - number extract.after.dash empty$ and not - { year extract.after.dash empty$ not - { year extract.after.dash * } - { year extract.before.dash * } - if$ - volume empty$ not - { ", " * volume extract.after.dash * } - 'skip$ - if$ - number empty$ not - { "\penalty0 (" * number extract.after.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$ } @@ -1383,11 +1552,22 @@ FUNCTION {check.electronic} } FUNCTION {format.eprint} -{ "" - archivePrefix empty$ not - { archivePrefix * ": " * - "\eprint{https://" * - archivePrefix "l" change.case$ * ".org/abs/" * eprint * "}{" * +{ eprinttype empty$ not + { eprinttype } + { archivePrefix 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 } @@ -1458,11 +1638,15 @@ FUNCTION {monograph} } if$ output - period.between.author.year - 'new.sentence + year.after.author + { period.after.author + 'new.sentence + 'skip$ + if$ + format.year "year" output.check + } 'skip$ if$ - format.year "year" output.check new.block format.series.vol.num.title "title" output.check "M" set.entry.mark @@ -1473,7 +1657,11 @@ FUNCTION {monograph} format.edition output new.block format.address.publisher output - format.pages bbl.colon output.after + 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 @@ -1487,11 +1675,15 @@ FUNCTION {incollection} output.translation format.authors output author format.key output - period.between.author.year - 'new.sentence + year.after.author + { period.after.author + 'new.sentence + 'skip$ + if$ + format.year "year" output.check + } 'skip$ if$ - format.year "year" output.check new.block format.title "title" output.check "M" set.entry.mark @@ -1506,7 +1698,11 @@ FUNCTION {incollection} format.edition output new.block format.address.publisher output - format.extracted.pages bbl.colon output.after + 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 @@ -1520,11 +1716,15 @@ FUNCTION {periodical} output.translation format.authors output author format.key output - period.between.author.year - 'new.sentence + year.after.author + { period.after.author + 'new.sentence + 'skip$ + if$ + format.year "year" output.check + } 'skip$ if$ - format.year "year" output.check new.block format.title "title" output.check "J" set.entry.mark @@ -1533,6 +1733,10 @@ FUNCTION {periodical} 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 @@ -1546,11 +1750,15 @@ FUNCTION {article} output.translation format.authors output author format.key output - period.between.author.year - 'new.sentence + year.after.author + { period.after.author + 'new.sentence + 'skip$ + if$ + format.year "year" output.check + } 'skip$ if$ - format.year "year" output.check new.block title.in.journal { format.title "title" output.check @@ -1561,9 +1769,13 @@ FUNCTION {article} '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 "" output.after + format.journal.pages bbl.pages.colon output.after format.urldate "" output.after output.url output.doi @@ -1577,11 +1789,15 @@ FUNCTION {patent} output.translation format.authors output author format.key output - period.between.author.year - 'new.sentence + year.after.author + { period.after.author + 'new.sentence + 'skip$ + if$ + format.year "year" output.check + } 'skip$ if$ - format.year "year" output.check new.block format.title "title" output.check "P" set.entry.mark @@ -1599,22 +1815,35 @@ FUNCTION {patent} 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 - period.between.author.year - 'new.sentence + year.after.author + { period.after.author + 'new.sentence + 'skip$ + if$ + format.year "year" output.check + } 'skip$ if$ - format.year "year" output.check new.block format.series.vol.num.title "title" output.check "EB" set.entry.mark format.mark "" output.after new.block format.address.publisher output - format.pages bbl.colon output.after + 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 @@ -1638,11 +1867,15 @@ FUNCTION {preprint} } if$ output - period.between.author.year - 'new.sentence + year.after.author + { period.after.author + 'new.sentence + 'skip$ + if$ + format.year "year" output.check + } 'skip$ if$ - format.year "year" output.check new.block title.in.journal { format.series.vol.num.title "title" output.check @@ -1657,7 +1890,11 @@ FUNCTION {preprint} format.edition output new.block output.eprint - format.pages bbl.colon output.after + year.after.author not + { format.year "year" output.check } + 'skip$ + if$ + format.pages bbl.pages.colon output.after format.urldate "" output.after output.url new.block @@ -1676,7 +1913,8 @@ FUNCTION {misc} 'preprint { entry.is.electronic 'electronic - { "Z" set.entry.mark + { + "Z" set.entry.mark monograph } if$ @@ -1851,18 +2089,48 @@ FUNCTION {chop.word} 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 "{vv~}{ll}{, jj}{, ff}" format.name$ 't := - t get.str.lang 'name.lang := - name.lang lang.en = - { t #1 "{vv~}{ll}" format.name$} - { t #1 "{ll}{ff}" format.name$} - if$ - s num.names$ #1 > - { bbl.space * citation.et.al * } - 'skip$ - if$ + 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} @@ -1922,7 +2190,8 @@ FUNCTION {editor.key.organization.label} } FUNCTION {calc.short.authors} -{ type$ "book" = +{ "" 'short.label := + type$ "book" = type$ "inbook" = or 'author.editor.key.label @@ -1939,6 +2208,10 @@ FUNCTION {calc.short.authors} } if$ 'short.list := + short.label empty$ + { short.list 'short.label := } + 'skip$ + if$ } FUNCTION {calc.label} @@ -1953,6 +2226,16 @@ FUNCTION {calc.label} if$ * 'label := + short.label + "(" + * + format.year duplicate$ empty$ + short.list key field.or.null = or + { pop$ "" } + 'skip$ + if$ + * + 'short.label := } FUNCTION {sort.language.label} @@ -1972,6 +2255,7 @@ FUNCTION {sort.language.label} if$ } if$ + #64 + int.to.chr$ } @@ -2038,7 +2322,7 @@ FUNCTION {author.sort} { author sort.format.names } if$ } - { key sortify } + { key } if$ } @@ -2054,7 +2338,7 @@ FUNCTION {author.editor.sort} { author sort.format.names } if$ } - { key sortify } + { key } if$ } @@ -2070,7 +2354,7 @@ FUNCTION {author.organization.sort} { author sort.format.names } if$ } - { key sortify } + { key } if$ } @@ -2086,7 +2370,7 @@ FUNCTION {editor.organization.sort} { editor sort.format.names } if$ } - { key sortify } + { key } if$ } @@ -2094,11 +2378,14 @@ FUNCTION {presort} { set.entry.lang set.entry.numbered show.url show.doi check.electronic + #0 'is.pure.electronic := calc.label label sortify " " * sort.language.label + " " + * type$ "book" = type$ "inbook" = or @@ -2141,13 +2428,13 @@ FUNCTION {initialize.longest.label} } FUNCTION {forward.pass} -{ last.label label = +{ last.label short.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 := + short.label 'last.label := } if$ number.label #1 + 'number.label := @@ -2179,6 +2466,14 @@ FUNCTION {begin.bib} 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}" diff --git a/Master/texmf-dist/bibtex/bst/gbt7714/gbt7714-numerical.bst b/Master/texmf-dist/bibtex/bst/gbt7714/gbt7714-numerical.bst index c2064c60019..5b487f5ba15 100644 --- a/Master/texmf-dist/bibtex/bst/gbt7714/gbt7714-numerical.bst +++ b/Master/texmf-dist/bibtex/bst/gbt7714/gbt7714-numerical.bst @@ -6,9 +6,9 @@ %% %% gbt7714.dtx (with options: `2015,numerical') %% ------------------------------------------------------------------- -%% GB/T 7714-2015 BibTeX Style +%% GB/T 7714—2015 BibTeX Style %% https://github.com/CTeX-org/gbt7714-bibtex-style -%% Version: 2020/06/08 v2.0.2 +%% Version: 2020/12/17 v2.1 %% ------------------------------------------------------------------- %% Copyright (C) 2016-2020 by Zeping Lee <zepinglee AT gmail.com> %% ------------------------------------------------------------------- @@ -21,9 +21,14 @@ %% version 2005/12/01 or later. %% ------------------------------------------------------------------- INTEGERS { + citation.et.al.min + citation.et.al.use.first + bibliography.et.al.min + bibliography.et.al.use.first uppercase.name - max.num.authors - period.between.author.year + terms.in.macro + year.after.author + period.after.author sentence.case.title link.title title.in.journal @@ -31,11 +36,13 @@ INTEGERS { show.medium.type slash.for.extraction in.booktitle - abbreviate.journal + short.journal italic.journal bold.journal.volume show.missing.address.publisher + space.before.pages only.start.page + show.urldate show.url show.doi show.preprint @@ -45,8 +52,14 @@ INTEGERS { 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 := - #3 'max.num.authors := + #0 'terms.in.macro := + #0 'year.after.author := + #1 'period.after.author := #1 'sentence.case.title := #0 'link.title := #1 'title.in.journal := @@ -54,11 +67,13 @@ FUNCTION {load.config} #1 'show.medium.type := #1 'slash.for.extraction := #0 'in.booktitle := - #0 'abbreviate.journal := + #0 'short.journal := #0 'italic.journal := #0 'bold.journal.volume := #1 'show.missing.address.publisher := + #1 'space.before.pages := #0 'only.start.page := + #1 'show.urldate := #1 'show.url := #1 'show.doi := #0 'show.preprint := @@ -76,11 +91,15 @@ ENTRY edition editor eprint + eprinttype howpublished institution journal + journaltitle key + langid language + location mark medium note @@ -90,6 +109,7 @@ ENTRY publisher school series + shortjournal title translation translator @@ -98,8 +118,8 @@ ENTRY volume year } - { entry.lang entry.is.electronic entry.numbered } - { label extra.label sort.label short.list entry.mark entry.url } + { 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 } @@ -134,6 +154,9 @@ FUNCTION {bbl.space} if$ } +FUNCTION {bbl.and} +{ "" } + FUNCTION {bbl.et.al} { entry.lang lang.zh = { "等" } @@ -149,11 +172,29 @@ FUNCTION {bbl.et.al} if$ } +FUNCTION {citation.and} +{ terms.in.macro + { "{\biband}" } + 'bbl.and + if$ +} + FUNCTION {citation.et.al} -{ bbl.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 " } @@ -445,16 +486,27 @@ FUNCTION {check.entry.lang} get.str.lang } +STRINGS { entry.langid } + FUNCTION {set.entry.lang} -{ language empty$ +{ "" 'entry.langid := + language empty$ not + { language 'entry.langid := } + 'skip$ + if$ + langid empty$ not + { langid 'entry.langid := } + 'skip$ + if$ + entry.langid empty$ { check.entry.lang } - { language "english" = language "american" = or language "british" = or + { entry.langid "english" = entry.langid "american" = or entry.langid "british" = or { lang.en } - { language "chinese" = + { entry.langid "chinese" = { lang.zh } - { language "japanese" = + { entry.langid "japanese" = { lang.ja } - { language "russian" = + { entry.langid "russian" = { lang.ru } { check.entry.lang } if$ @@ -480,6 +532,25 @@ FUNCTION {set.entry.numbered} 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 := @@ -487,31 +558,21 @@ FUNCTION {format.names} "" numnames 'namesleft := { namesleft #0 > } - { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't := - nameptr #1 > - { ", " * } - 'skip$ - if$ - nameptr max.num.authors > - { bbl.et.al * + { 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 := } - { 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$ } + { nameptr #1 > + { namesleft #1 = bbl.and "" = not and + { bbl.and * } + { ", " * } if$ - * } + 'skip$ if$ + s nameptr format.name * } if$ nameptr #1 + 'nameptr := @@ -905,18 +966,38 @@ FUNCTION {abbreviate} } FUNCTION {format.journal} -{ journal empty$ not - { journal - abbreviate.journal - 'abbreviate - 'skip$ +{ "" + short.journal + { shortjournal empty$ not + { shortjournal * } + { journal empty$ not + { journal * abbreviate } + { journaltitle empty$ not + { journaltitle * abbreviate } + 'skip$ + if$ + } + if$ + } + if$ + } + { journal empty$ not + { journal * } + { journaltitle empty$ not + { journaltitle * } + 'skip$ + if$ + } if$ - italic.journal entry.lang lang.en = and + } + if$ + duplicate$ empty$ not + { italic.journal entry.lang lang.en = and 'italicize 'skip$ if$ } - { "" } + 'skip$ if$ } @@ -947,7 +1028,7 @@ FUNCTION {format.mark} 'skip$ if$ 'entry.mark := - "\allowbreak[" entry.mark * "]" * + "[" entry.mark * "]" * } { "" } if$ @@ -1015,8 +1096,15 @@ FUNCTION {format.publisher} FUNCTION {format.address.publisher} { address empty$ not - { address - format.publisher 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 * } @@ -1025,7 +1113,8 @@ FUNCTION {format.address.publisher} } if$ } - { entry.is.electronic not show.missing.address.publisher and + { 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 } @@ -1096,9 +1185,93 @@ FUNCTION {contains.dash} 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 {contains.slash} +{ duplicate$ empty$ + { pop$ #0 } + { 's := + { s empty$ not + s #1 #1 substring$ "-" = not + and + s #1 #1 substring$ "/" = not + and + } + { s #2 global.max$ substring$ 's := } + while$ + s empty$ not + } + if$ +} + FUNCTION {format.year} { year empty$ not - { year extract.before.dash } + { year extract.before.slash extra.label * } + { date empty$ not + { date extract.before.dash extra.label * } + { "empty year in " cite$ * warning$ + 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$ @@ -1110,14 +1283,15 @@ FUNCTION {format.year} if$ } if$ - extra.label * } FUNCTION {format.date} { type$ "patent" = type$ "newspaper" = or date empty$ not and { date } - { year } + { year field.or.null + extra.label * + } if$ } @@ -1129,7 +1303,9 @@ FUNCTION {format.editdate} } FUNCTION {format.urldate} -{ urldate empty$ not entry.is.electronic and +{ urldate empty$ not + show.urldate show.url and is.pure.electronic or and + url empty$ not and { "\allowbreak[" urldate * "]" * } { "" } if$ @@ -1185,7 +1361,7 @@ FUNCTION {format.journal.volume} FUNCTION {format.journal.number} { number empty$ not - { "\penalty0 (" number * ")" * } + { "\allowbreak (" number * ")" * } { "" } if$ } @@ -1193,15 +1369,13 @@ FUNCTION {format.journal.number} FUNCTION {format.journal.pages} { pages empty$ { "" } - { ": " - format.extracted.pages * - } + { format.extracted.pages } if$ } FUNCTION {format.periodical.year.volume.number} { year empty$ not - { year extract.before.dash } + { year extract.before.slash } { "empty year in periodical " cite$ * warning$ } if$ volume empty$ not @@ -1209,27 +1383,23 @@ FUNCTION {format.periodical.year.volume.number} 'skip$ if$ number empty$ not - { "\penalty0 (" * number extract.before.dash * ")" * } + { "\allowbreak (" * number extract.before.dash * ")" * } 'skip$ if$ - year contains.dash - { "--" * - year extract.after.dash empty$ - volume extract.after.dash empty$ and - number extract.after.dash empty$ and not - { year extract.after.dash empty$ not - { year extract.after.dash * } - { year extract.before.dash * } - if$ - volume empty$ not - { ", " * volume extract.after.dash * } - 'skip$ - if$ - number empty$ not - { "\penalty0 (" * number extract.after.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$ } @@ -1372,11 +1542,22 @@ FUNCTION {check.electronic} } FUNCTION {format.eprint} -{ "" - archivePrefix empty$ not - { archivePrefix * ": " * - "\eprint{https://" * - archivePrefix "l" change.case$ * ".org/abs/" * eprint * "}{" * +{ eprinttype empty$ not + { eprinttype } + { archivePrefix 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 } @@ -1447,6 +1628,15 @@ FUNCTION {monograph} } 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 @@ -1457,8 +1647,11 @@ FUNCTION {monograph} format.edition output new.block format.address.publisher output - format.year "year" output.check - format.pages bbl.colon output.after + 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 @@ -1472,6 +1665,15 @@ FUNCTION {incollection} 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 @@ -1486,8 +1688,11 @@ FUNCTION {incollection} format.edition output new.block format.address.publisher output - format.year "year" output.check - format.extracted.pages bbl.colon output.after + 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 @@ -1501,6 +1706,15 @@ FUNCTION {periodical} 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 @@ -1509,7 +1723,10 @@ FUNCTION {periodical} format.periodical.year.volume.number output new.block format.address.publisher output - format.date "year" output.check + year.after.author not + { format.periodical.year "year" output.check } + 'skip$ + if$ format.urldate "" output.after output.url output.doi @@ -1523,6 +1740,15 @@ FUNCTION {article} 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 @@ -1533,10 +1759,13 @@ FUNCTION {article} 'skip$ if$ format.journal "journal" output.check - format.date "year" 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 "" output.after + format.journal.pages bbl.pages.colon output.after format.urldate "" output.after output.url output.doi @@ -1550,6 +1779,15 @@ FUNCTION {patent} 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 @@ -1567,21 +1805,35 @@ FUNCTION {patent} 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 - date empty$ - { format.date output } + year.after.author not + { date empty$ + { format.date output } + 'skip$ + if$ + } 'skip$ if$ - format.pages bbl.colon output.after + format.pages bbl.pages.colon output.after format.editdate "" output.after format.urldate "" output.after output.url @@ -1605,6 +1857,15 @@ FUNCTION {preprint} } 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 @@ -1619,8 +1880,11 @@ FUNCTION {preprint} format.edition output new.block output.eprint - format.year "year" output.check - format.pages bbl.colon output.after + year.after.author not + { format.year "year" output.check } + 'skip$ + if$ + format.pages bbl.pages.colon output.after format.urldate "" output.after output.url new.block @@ -1639,7 +1903,8 @@ FUNCTION {misc} 'preprint { entry.is.electronic 'electronic - { "Z" set.entry.mark + { + "Z" set.entry.mark monograph } if$ @@ -1814,18 +2079,48 @@ FUNCTION {chop.word} 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 "{vv~}{ll}{, jj}{, ff}" format.name$ 't := - t get.str.lang 'name.lang := - name.lang lang.en = - { t #1 "{vv~}{ll}" format.name$} - { t #1 "{ll}{ff}" format.name$} - if$ - s num.names$ #1 > - { bbl.space * citation.et.al * } - 'skip$ - if$ + 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} @@ -1885,7 +2180,8 @@ FUNCTION {editor.key.organization.label} } FUNCTION {calc.short.authors} -{ type$ "book" = +{ "" 'short.label := + type$ "book" = type$ "inbook" = or 'author.editor.key.label @@ -1902,6 +2198,10 @@ FUNCTION {calc.short.authors} } if$ 'short.list := + short.label empty$ + { short.list 'short.label := } + 'skip$ + if$ } FUNCTION {calc.label} @@ -1916,6 +2216,16 @@ FUNCTION {calc.label} if$ * 'label := + short.label + "(" + * + format.year duplicate$ empty$ + short.list key field.or.null = or + { pop$ "" } + 'skip$ + if$ + * + 'short.label := } INTEGERS { seq.num } @@ -1932,6 +2242,7 @@ FUNCTION {presort} { set.entry.lang set.entry.numbered show.url show.doi check.electronic + #0 'is.pure.electronic := calc.label label sortify " " @@ -1958,13 +2269,13 @@ FUNCTION {initialize.longest.label} } FUNCTION {forward.pass} -{ last.label label = +{ last.label short.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 := + short.label 'last.label := } if$ number.label #1 + 'number.label := @@ -1996,6 +2307,14 @@ FUNCTION {begin.bib} 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}" |