diff options
Diffstat (limited to 'biblio/bibtex/contrib/gbt7714')
-rw-r--r-- | biblio/bibtex/contrib/gbt7714/CHANGELOG.md | 89 | ||||
-rw-r--r-- | biblio/bibtex/contrib/gbt7714/gbt7714-plain.bst | 2043 | ||||
-rw-r--r-- | biblio/bibtex/contrib/gbt7714/gbt7714-unsrt.bst | 1866 | ||||
-rw-r--r-- | biblio/bibtex/contrib/gbt7714/gbt7714.dtx | 401 | ||||
-rw-r--r-- | biblio/bibtex/contrib/gbt7714/gbt7714.pdf | bin | 322635 -> 328498 bytes | |||
-rw-r--r-- | biblio/bibtex/contrib/gbt7714/gbt7714.sty | 124 |
6 files changed, 342 insertions, 4181 deletions
diff --git a/biblio/bibtex/contrib/gbt7714/CHANGELOG.md b/biblio/bibtex/contrib/gbt7714/CHANGELOG.md new file mode 100644 index 0000000000..8e44024912 --- /dev/null +++ b/biblio/bibtex/contrib/gbt7714/CHANGELOG.md @@ -0,0 +1,89 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). + +## [Unreleased] + +## [v1.1.2] - 2019-11-20 +### Changed +- 不再依赖 `etoolbox` + +### Fixed +- 修正与 `newtx` 冲突([#42](https://github.com/CTeX-org/gbt7714-bibtex-style/issues/42)) + +## [v1.1.1] - 2019-03-21 +### Added +- 允许自定义文种的顺序 + +## [v1.1] - 2019-01-02 +### Added +- 允许自定义“et al” + +### Changed +- 修正 series 的 bug + +## [v1.0.9] - 2018-08-05 +### Added +- 增加选项在题名添加超链接 + +### Changed +- 不再转换题名 volume 的大小写 +- 修正不显示 url 的选项 + +## [v1.0.8] - 2018-06-23 +### Added +- 新增接口供用户自定义样式 +- 支持 howpublished 中的 url + +### Changed +- 使用 `xurl` 的方法改进 URL 断行 +- 使用“~”连接英文姓名 + +## [v1.0.7] - 2018-05-12 +### Changed +- 修正了检测 Unicode 语言 + +## [v1.0.6] - 2018-05-10 +### Changed +- 文献列表的数字标签左对齐 +- 不再处理中文标题的英文单词的大小写 + +## [v1.0.5] - 2018-04-18 +### Added +- 允许著录多个 DOI + +## [v1.0.4] - 2018-04-12 +### Changed +- 页码的连接号由 en dash 改为 hyphen + +## [v1.0.3] - 2018-03-29 +### Changed +- 顺序编码制连续两个文献引用之间使用连接号 + +## [v1.0.2] - 2018-03-16 +### Changed +- 正确识别姓名中的“others” + +## [v1.0.1] - 2018-03-09 +### Changed +- 著者出版年制的文献引用不再排序 + +## [v1.0] - 2018-01-01 +### Changed +- Initial release. + +[Unreleased]: https://github.com/CTeX-org/gbt7714-bibtex-style/compare/v1.1.2...HEAD +[v1.1.2]: https://github.com/CTeX-org/gbt7714-bibtex-style/compare/v1.1.1...v1.1.2 +[v1.1.1]: https://github.com/CTeX-org/gbt7714-bibtex-style/compare/v1.1...v1.1.1 +[v1.1]: https://github.com/CTeX-org/gbt7714-bibtex-style/compare/v1.0.9...v1.1 +[v1.0.9]: https://github.com/CTeX-org/gbt7714-bibtex-style/compare/v1.0.8...v1.0.9 +[v1.0.8]: https://github.com/CTeX-org/gbt7714-bibtex-style/compare/v1.0.7...v1.0.8 +[v1.0.7]: https://github.com/CTeX-org/gbt7714-bibtex-style/compare/v1.0.6...v1.0.7 +[v1.0.6]: https://github.com/CTeX-org/gbt7714-bibtex-style/compare/v1.0.5...v1.0.6 +[v1.0.5]: https://github.com/CTeX-org/gbt7714-bibtex-style/compare/v1.0.4...v1.0.5 +[v1.0.4]: https://github.com/CTeX-org/gbt7714-bibtex-style/compare/v1.0.3...v1.0.4 +[v1.0.3]: https://github.com/CTeX-org/gbt7714-bibtex-style/compare/v1.0.2...v1.0.3 +[v1.0.2]: https://github.com/CTeX-org/gbt7714-bibtex-style/compare/v1.0.1...v1.0.2 +[v1.0.1]: https://github.com/CTeX-org/gbt7714-bibtex-style/compare/v1.0...v1.0.1 +[v1.0]: https://github.com/CTeX-org/gbt7714-bibtex-style/releases/tag/v1.0 diff --git a/biblio/bibtex/contrib/gbt7714/gbt7714-plain.bst b/biblio/bibtex/contrib/gbt7714/gbt7714-plain.bst deleted file mode 100644 index 5e9aee9bb1..0000000000 --- a/biblio/bibtex/contrib/gbt7714/gbt7714-plain.bst +++ /dev/null @@ -1,2043 +0,0 @@ -%% -%% This is file `gbt7714-plain.bst', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% gbt7714.dtx (with options: `2015,authoryear') -%% ------------------------------------------------------------------- -%% GB/T 7714-2015 BibTeX Style -%% https://github.com/CTeX-org/gbt7714-bibtex-style -%% Version: 2019/03/21 v1.1.1 -%% ------------------------------------------------------------------- -%% Copyright (C) 2016-2019 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 2005/12/01 or later. -%% ------------------------------------------------------------------- -INTEGERS { - uppercase.name - max.num.authors - period.between.author.year - sentence.case.title - link.title - show.mark - slash.for.extraction - in.booktitle - italic.jounal - bold.journal.volume - show.missing.address.publisher - show.url - show.doi - show.note - lang.zh.order - lang.ja.order - lang.en.order - lang.ru.order - lang.other.order -} - -FUNCTION {load.config} -{ - #1 'uppercase.name := - #3 'max.num.authors := - #0 'period.between.author.year := - #1 'sentence.case.title := - #0 'link.title := - #1 'show.mark := - #1 'slash.for.extraction := - #0 'in.booktitle := - #0 'italic.jounal := - #0 'bold.journal.volume := - #1 'show.missing.address.publisher := - #1 'show.url := - #1 'show.doi := - #0 'show.note := - #1 'lang.zh.order := - #2 'lang.ja.order := - #3 'lang.en.order := - #4 'lang.ru.order := - #5 'lang.other.order := -} - -ENTRY - { address - author - booktitle - date - doi - edition - editor - howpublished - institution - journal - key - language - mark - medium - note - number - organization - pages - publisher - school - series - title - translator - url - urldate - volume - year - } - { entry.lang entry.is.electronic entry.numbered } - { label extra.label sort.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.et.al} -{ entry.lang lang.zh = - { "等" } - { entry.lang lang.ja = - { "他" } - { entry.lang lang.ru = - { "идр" } - { "et~al." } - if$ - } - if$ - } - if$ -} - -FUNCTION {citation.et.al} -{ bbl.et.al } - -FUNCTION {bbl.colon} { ": " } - -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 { 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} -{ add.period$ - write$ - 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$ - { slash.for.extraction - { after.slash 'output.state := } - { after.block 'output.state := } - 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 {italicize} -{ duplicate$ empty$ - { pop$ "" } - { "\textit{" swap$ * "}" * } - 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 -} - -FUNCTION {set.entry.lang} -{ language empty$ - { check.entry.lang } - { language "english" = language "american" = or language "british" = or - { lang.en } - { language "chinese" = - { lang.zh } - { language "japanese" = - { lang.ja } - { language "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.names} -{ 's := - #1 'nameptr := - s num.names$ 'numnames := - numnames 'namesleft := - { namesleft #0 > } - { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't := - nameptr max.num.authors > - { 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$ } - if$ - } - if$ - } - if$ - nameptr #1 > - { ", " swap$ * * } - 'skip$ - 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$ - bbl.anonymous - } - 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" = - or - 'author.editor.full - { type$ "collection" = - type$ "proceedings" = - or - 'editor.full - 'author.full - if$ - } - if$ -} - -FUNCTION {output.bibitem} -{ newline$ - "\bibitem[" write$ - label write$ - ")" make.full.names duplicate$ short.list = - { pop$ } - { * } - if$ - 's := - s text.length$ 'charptr := - { charptr #0 > } - { s charptr #1 substring$ "]" = - { #0 'charptr := } - { charptr #1 - 'charptr := } - if$ - } - while$ - charptr #0 > - { "{" s * "}" * } - { s } - 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{http://dx.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 * 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 * " 卷" * } - { "volume" volume tie.or.space.connect } - if$ - } - { volume } - if$ - } - { "" } - if$ -} - -FUNCTION {format.number} -{ number empty$ not - { number is.number - { entry.lang lang.zh = - { "第 " number * " 册" * } - { "number" 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$ - 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$ - in.booktitle - { duplicate$ empty$ not entry.lang lang.en = and - { "In: " swap$ * } - 'skip$ - if$ - } - 'skip$ - if$ -} - -FUNCTION {format.journal} -{ journal - italic.jounal entry.lang lang.en = and - 'italicize - '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 - { medium empty$ not - { entry.mark "/" * medium * 'entry.mark := } - { entry.is.electronic - { entry.mark "/OL" * 'entry.mark := } - 'skip$ - if$ - } - if$ - "\allowbreak[" 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 - { entry.lang lang.zh = - { edition " 版" * } - { edition num.to.ordinal " ed." * } - 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 - 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$ - } - { 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 {contains.dash} -{ duplicate$ empty$ - { pop$ #0 } - { 's := - { s empty$ not - 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 } - { date empty$ not - { date extract.before.dash } - { "empty year in " cite$ * warning$ - urldate empty$ not - { "[" urldate extract.before.dash * "]" * } - { "" } - if$ - } - if$ - } - if$ - extra.label * -} - -FUNCTION {format.date} -{ type$ "patent" = type$ "newspaper" = or - date empty$ not and - { date } - { year } - if$ -} - -FUNCTION {format.editdate} -{ date empty$ not - { "\allowbreak(" date * ")" * } - { "" } - if$ -} - -FUNCTION {format.urldate} -{ urldate empty$ not entry.is.electronic and - { "\allowbreak[" urldate * "]" * } - { "" } - if$ -} - -FUNCTION {hyphenate} -{ 't := - "" - { t empty$ not } - { t #1 #1 substring$ "-" = - { "-" * - { 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.journal.volume} -{ volume empty$ not - { bold.journal.volume - { "\textbf{" volume * "}" * } - { volume } - if$ - } - { "" } - if$ -} - -FUNCTION {format.journal.number} -{ number empty$ not - { "\penalty0 (" number * ")" * } - { "" } - if$ -} - -FUNCTION {format.journal.pages} -{ pages empty$ - { "" } - { ":\penalty0 " pages hyphenate * } - if$ -} - -FUNCTION {format.periodical.year.volume.number} -{ year empty$ not - { year extract.before.dash } - { "empty year in periodical " cite$ * warning$ } - if$ - volume empty$ not - { ", " * volume extract.before.dash * } - 'skip$ - if$ - number empty$ not - { "\penalty0 (" * 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$ - } - 'skip$ - if$ - } - 'skip$ - if$ -} - -FUNCTION {check.url} -{ url empty$ not - { "\url{" 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 {format.url} -{ entry.url empty$ not - { new.block entry.url } - { "" } - 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 text.length$ 'charptr := - { entry.url charptr len substring$ s = not - charptr #0 > - and - } - { charptr #1 - 'charptr := } - while$ - charptr - } - if$ - } - if$ -} - -FUNCTION {format.doi} -{ "" - doi empty$ not show.doi and - { "" '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$ - 's := - s empty$ not - { new.block s } - { "" } - if$ - } - '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.note} -{ note empty$ not show.note and - { note } - { "" } - 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 - author empty$ not - { format.authors } - { editor empty$ not - { format.editors } - { "empty author and editor in " cite$ * warning$ - bbl.anonymous - } - if$ - } - if$ - output - period.between.author.year - 'new.sentence - 'skip$ - if$ - format.year "year" output.check - 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 - format.pages bbl.colon output.after - format.urldate "" output.after - format.url output - format.doi output - new.block - format.note output - fin.entry -} - -FUNCTION {incollection} -{ output.bibitem - format.authors output - author format.key output - period.between.author.year - 'new.sentence - 'skip$ - if$ - format.year "year" output.check - 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 - format.pages bbl.colon output.after - format.urldate "" output.after - format.url output - format.doi output - new.block - format.note output - fin.entry -} - -FUNCTION {periodical} -{ output.bibitem - format.authors output - author format.key output - period.between.author.year - 'new.sentence - 'skip$ - if$ - format.year "year" output.check - 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 - format.urldate "" output.after - format.url output - format.doi output - new.block - format.note output - fin.entry -} - -FUNCTION {article} -{ output.bibitem - format.authors output - author format.key output - period.between.author.year - 'new.sentence - 'skip$ - if$ - format.year "year" output.check - new.block - format.title "title" output.check - "J" set.entry.mark - format.mark "" output.after - new.block - format.journal "journal" output.check - format.journal.volume output - format.journal.number "" output.after - format.journal.pages "" output.after - format.urldate "" output.after - format.url output - format.doi output - new.block - format.note output - fin.entry -} - -FUNCTION {patent} -{ output.bibitem - format.authors output - author format.key output - period.between.author.year - 'new.sentence - 'skip$ - if$ - format.year "year" output.check - 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 - format.url output - format.doi output - new.block - format.note output - fin.entry -} - -FUNCTION {electronic} -{ #1 #1 check.electronic - #1 'entry.is.electronic := - output.bibitem - format.authors output - author format.key output - period.between.author.year - 'new.sentence - '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 - format.editdate "" output.after - format.urldate "" output.after - format.url output - format.doi output - new.block - format.note output - fin.entry -} - -FUNCTION {misc} -{ journal empty$ not - 'article - { booktitle empty$ not - 'incollection - { publisher empty$ not - 'monograph - { entry.is.electronic - 'electronic - { "Z" set.entry.mark - monograph - } - if$ - } - if$ - } - if$ - } - if$ - empty.misc.check -} - -FUNCTION {archive} -{ "A" set.entry.mark - 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} { book } - -FUNCTION {inproceedings} -{ "C" set.entry.mark - incollection -} - -FUNCTION {conference} { inproceedings } - -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} -{ "Z" set.entry.mark - 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.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$ -} - -FUNCTION {author.key.label} -{ author empty$ - { key empty$ - { cite$ #1 #3 substring$ } - 'key - if$ - } - { author format.lab.names } - if$ -} - -FUNCTION {author.editor.key.label} -{ author empty$ - { editor empty$ - { key empty$ - { cite$ #1 #3 substring$ } - 'key - if$ - } - { editor format.lab.names } - if$ - } - { author format.lab.names } - if$ -} - -FUNCTION {author.key.organization.label} -{ author empty$ - { key empty$ - { organization empty$ - { cite$ #1 #3 substring$ } - { "The " #4 organization chop.word #3 text.prefix$ } - if$ - } - 'key - if$ - } - { author format.lab.names } - if$ -} - -FUNCTION {editor.key.organization.label} -{ editor empty$ - { key empty$ - { organization empty$ - { cite$ #1 #3 substring$ } - { "The " #4 organization chop.word #3 text.prefix$ } - if$ - } - 'key - if$ - } - { editor format.lab.names } - if$ -} - -FUNCTION {calc.short.authors} -{ type$ "book" = - type$ "inbook" = - or - 'author.editor.key.label - { type$ "collection" = - type$ "proceedings" = - or - { editor empty$ not - 'editor.key.organization.label - 'author.key.organization.label - if$ - } - 'author.key.label - if$ - } - if$ - 'short.list := -} - -FUNCTION {calc.label} -{ calc.short.authors - short.list - "(" - * - format.year duplicate$ empty$ - short.list key field.or.null = or - { pop$ "" } - 'skip$ - if$ - * - 'label := -} - -FUNCTION {sort.language.label} -{ entry.lang lang.zh = - { lang.zh.order } - { entry.lang lang.ja = - { lang.ja.order } - { entry.lang lang.en = - { lang.en.order } - { entry.lang lang.ru = - { lang.ru.order } - { lang.other.order } - if$ - } - if$ - } - if$ - } - if$ - int.to.chr$ -} - -FUNCTION {sort.format.names} -{ 's := - #1 'nameptr := - "" - s num.names$ 'numnames := - numnames 'namesleft := - { namesleft #0 > } - { - s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't := - nameptr #1 > - { - " " * - namesleft #1 = t "others" = and - { "zzzzz" * } - { numnames #2 > nameptr #2 = and - { "zz" * year field.or.null * " " * } - 'skip$ - if$ - t sortify * - } - if$ - } - { t sortify * } - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := - } - while$ -} - -FUNCTION {sort.format.title} -{ 't := - "A " #2 - "An " #3 - "The " #4 t chop.word - chop.word - chop.word - sortify - #1 global.max$ substring$ -} - -FUNCTION {anonymous.sort} -{ entry.lang lang.zh = - { "yi4 ming2" } - { "anon" } - if$ -} - -FUNCTION {warn.empty.key} -{ entry.lang lang.zh = - { "empty key in " cite$ * warning$ } - 'skip$ - if$ -} - -FUNCTION {author.sort} -{ key empty$ - { warn.empty.key - author empty$ - { anonymous.sort } - { author sort.format.names } - if$ - } - { key sortify } - if$ -} - -FUNCTION {author.editor.sort} -{ key empty$ - { warn.empty.key - author empty$ - { editor empty$ - { anonymous.sort } - { editor sort.format.names } - if$ - } - { author sort.format.names } - if$ - } - { key sortify } - if$ -} - -FUNCTION {author.organization.sort} -{ key empty$ - { warn.empty.key - author empty$ - { organization empty$ - { anonymous.sort } - { "The " #4 organization chop.word sortify } - if$ - } - { author sort.format.names } - if$ - } - { key sortify } - if$ -} - -FUNCTION {editor.organization.sort} -{ key empty$ - { warn.empty.key - editor empty$ - { organization empty$ - { anonymous.sort } - { "The " #4 organization chop.word sortify } - if$ - } - { editor sort.format.names } - if$ - } - { key sortify } - if$ -} - -FUNCTION {presort} -{ set.entry.lang - set.entry.numbered - show.url show.doi check.electronic - calc.label - label sortify - " " - * - sort.language.label - type$ "book" = - type$ "inbook" = - or - 'author.editor.sort - { type$ "collection" = - type$ "proceedings" = - or - 'editor.organization.sort - 'author.sort - if$ - } - if$ - * - " " - * - year field.or.null sortify - * - " " - * - cite$ - * - #1 entry.max$ substring$ - 'sort.label := - sort.label * - #1 entry.max$ substring$ - 'sort.key$ := -} - -STRINGS { longest.label last.label next.extra } - -INTEGERS { longest.label.width last.extra.num number.label } - -FUNCTION {initialize.longest.label} -{ "" 'longest.label := - #0 int.to.chr$ 'last.label := - "" 'next.extra := - #0 'longest.label.width := - #0 'last.extra.num := - #0 'number.label := -} - -FUNCTION {forward.pass} -{ last.label label = - { last.extra.num #1 + 'last.extra.num := - last.extra.num int.to.chr$ 'extra.label := - } - { "a" chr.to.int$ 'last.extra.num := - "" 'extra.label := - label 'last.label := - } - if$ - number.label #1 + 'number.label := -} - -FUNCTION {reverse.pass} -{ next.extra "b" = - { "a" 'extra.label := } - 'skip$ - if$ - extra.label 'next.extra := - extra.label - duplicate$ empty$ - 'skip$ - { "{\natexlab{" swap$ * "}}" * } - if$ - 'extra.label := - label extra.label * 'label := -} - -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$ - "\providecommand{\natexlab}[1]{#1}" - write$ newline$ - "\providecommand{\url}[1]{#1}" - write$ newline$ - "\expandafter\ifx\csname urlstyle\endcsname\relax\relax\else" - write$ newline$ - " \urlstyle{same}\fi" - write$ newline$ - show.doi - { "\providecommand{\href}[2]{\url{#2}}" - write$ newline$ - "\providecommand{\doi}[1]{\href{https://doi.org/#1}{#1}}" - write$ newline$ - } - 'skip$ - if$ -} - -FUNCTION {end.bib} -{ newline$ - "\end{thebibliography}" write$ newline$ -} - -READ - -EXECUTE {init.state.consts} - -EXECUTE {load.config} - -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} diff --git a/biblio/bibtex/contrib/gbt7714/gbt7714-unsrt.bst b/biblio/bibtex/contrib/gbt7714/gbt7714-unsrt.bst deleted file mode 100644 index 802e5e66e4..0000000000 --- a/biblio/bibtex/contrib/gbt7714/gbt7714-unsrt.bst +++ /dev/null @@ -1,1866 +0,0 @@ -%% -%% This is file `gbt7714-unsrt.bst', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% gbt7714.dtx (with options: `2015,numerical') -%% ------------------------------------------------------------------- -%% GB/T 7714-2015 BibTeX Style -%% https://github.com/CTeX-org/gbt7714-bibtex-style -%% Version: 2019/03/21 v1.1.1 -%% ------------------------------------------------------------------- -%% Copyright (C) 2016-2019 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 2005/12/01 or later. -%% ------------------------------------------------------------------- -INTEGERS { - uppercase.name - max.num.authors - period.between.author.year - sentence.case.title - link.title - show.mark - slash.for.extraction - in.booktitle - italic.jounal - bold.journal.volume - show.missing.address.publisher - show.url - show.doi - show.note -} - -FUNCTION {load.config} -{ - #1 'uppercase.name := - #3 'max.num.authors := - #1 'sentence.case.title := - #0 'link.title := - #1 'show.mark := - #1 'slash.for.extraction := - #0 'in.booktitle := - #0 'italic.jounal := - #0 'bold.journal.volume := - #1 'show.missing.address.publisher := - #1 'show.url := - #1 'show.doi := - #0 'show.note := -} - -ENTRY - { address - author - booktitle - date - doi - edition - editor - howpublished - institution - journal - key - language - mark - medium - note - number - organization - pages - publisher - school - series - title - translator - url - urldate - volume - year - } - { entry.lang entry.is.electronic entry.numbered } - { label extra.label sort.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.et.al} -{ entry.lang lang.zh = - { "等" } - { entry.lang lang.ja = - { "他" } - { entry.lang lang.ru = - { "идр" } - { "et~al." } - if$ - } - if$ - } - if$ -} - -FUNCTION {citation.et.al} -{ bbl.et.al } - -FUNCTION {bbl.colon} { ": " } - -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 { 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} -{ add.period$ - write$ - 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$ - { slash.for.extraction - { after.slash 'output.state := } - { after.block 'output.state := } - 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 {italicize} -{ duplicate$ empty$ - { pop$ "" } - { "\textit{" swap$ * "}" * } - 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 -} - -FUNCTION {set.entry.lang} -{ language empty$ - { check.entry.lang } - { language "english" = language "american" = or language "british" = or - { lang.en } - { language "chinese" = - { lang.zh } - { language "japanese" = - { lang.ja } - { language "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.names} -{ 's := - #1 'nameptr := - s num.names$ 'numnames := - numnames 'namesleft := - { namesleft #0 > } - { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't := - nameptr max.num.authors > - { 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$ } - if$ - } - if$ - } - if$ - nameptr #1 > - { ", " swap$ * * } - 'skip$ - 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" = - or - 'author.editor.full - { type$ "collection" = - type$ "proceedings" = - or - 'editor.full - 'author.full - if$ - } - if$ -} - -FUNCTION {output.bibitem} -{ newline$ - "\bibitem[" write$ - label write$ - ")" make.full.names duplicate$ short.list = - { pop$ } - { * } - if$ - 's := - s text.length$ 'charptr := - { charptr #0 > } - { s charptr #1 substring$ "]" = - { #0 'charptr := } - { charptr #1 - 'charptr := } - if$ - } - while$ - charptr #0 > - { "{" s * "}" * } - { s } - 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{http://dx.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 * 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 * " 卷" * } - { "volume" volume tie.or.space.connect } - if$ - } - { volume } - if$ - } - { "" } - if$ -} - -FUNCTION {format.number} -{ number empty$ not - { number is.number - { entry.lang lang.zh = - { "第 " number * " 册" * } - { "number" 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$ - 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$ - in.booktitle - { duplicate$ empty$ not entry.lang lang.en = and - { "In: " swap$ * } - 'skip$ - if$ - } - 'skip$ - if$ -} - -FUNCTION {format.journal} -{ journal - italic.jounal entry.lang lang.en = and - 'italicize - '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 - { medium empty$ not - { entry.mark "/" * medium * 'entry.mark := } - { entry.is.electronic - { entry.mark "/OL" * 'entry.mark := } - 'skip$ - if$ - } - if$ - "\allowbreak[" 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 - { entry.lang lang.zh = - { edition " 版" * } - { edition num.to.ordinal " ed." * } - 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 - 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$ - } - { 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 {contains.dash} -{ duplicate$ empty$ - { pop$ #0 } - { 's := - { s empty$ not - 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 } - { date empty$ not - { date extract.before.dash } - { "empty year in " cite$ * warning$ - urldate empty$ not - { "[" urldate extract.before.dash * "]" * } - { "" } - if$ - } - if$ - } - if$ - extra.label * -} - -FUNCTION {format.date} -{ type$ "patent" = type$ "newspaper" = or - date empty$ not and - { date } - { year } - if$ -} - -FUNCTION {format.editdate} -{ date empty$ not - { "\allowbreak(" date * ")" * } - { "" } - if$ -} - -FUNCTION {format.urldate} -{ urldate empty$ not entry.is.electronic and - { "\allowbreak[" urldate * "]" * } - { "" } - if$ -} - -FUNCTION {hyphenate} -{ 't := - "" - { t empty$ not } - { t #1 #1 substring$ "-" = - { "-" * - { 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.journal.volume} -{ volume empty$ not - { bold.journal.volume - { "\textbf{" volume * "}" * } - { volume } - if$ - } - { "" } - if$ -} - -FUNCTION {format.journal.number} -{ number empty$ not - { "\penalty0 (" number * ")" * } - { "" } - if$ -} - -FUNCTION {format.journal.pages} -{ pages empty$ - { "" } - { ":\penalty0 " pages hyphenate * } - if$ -} - -FUNCTION {format.periodical.year.volume.number} -{ year empty$ not - { year extract.before.dash } - { "empty year in periodical " cite$ * warning$ } - if$ - volume empty$ not - { ", " * volume extract.before.dash * } - 'skip$ - if$ - number empty$ not - { "\penalty0 (" * 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$ - } - 'skip$ - if$ - } - 'skip$ - if$ -} - -FUNCTION {check.url} -{ url empty$ not - { "\url{" 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 {format.url} -{ entry.url empty$ not - { new.block entry.url } - { "" } - 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 text.length$ 'charptr := - { entry.url charptr len substring$ s = not - charptr #0 > - and - } - { charptr #1 - 'charptr := } - while$ - charptr - } - if$ - } - if$ -} - -FUNCTION {format.doi} -{ "" - doi empty$ not show.doi and - { "" '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$ - 's := - s empty$ not - { new.block s } - { "" } - if$ - } - '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.note} -{ note empty$ not show.note and - { note } - { "" } - 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 - author empty$ not - { format.authors } - { editor empty$ not - { format.editors } - { "empty author and editor in " cite$ * warning$ - "" - } - if$ - } - if$ - output - 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 - format.year "year" output.check - format.pages bbl.colon output.after - format.urldate "" output.after - format.url output - format.doi output - new.block - format.note output - fin.entry -} - -FUNCTION {incollection} -{ output.bibitem - format.authors output - author format.key output - 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 - format.year "year" output.check - format.pages bbl.colon output.after - format.urldate "" output.after - format.url output - format.doi output - new.block - format.note output - fin.entry -} - -FUNCTION {periodical} -{ output.bibitem - format.authors output - author format.key output - 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 - format.date "year" output.check - format.urldate "" output.after - format.url output - format.doi output - new.block - format.note output - fin.entry -} - -FUNCTION {article} -{ output.bibitem - format.authors output - author format.key output - new.block - format.title "title" output.check - "J" set.entry.mark - format.mark "" output.after - new.block - format.journal "journal" output.check - format.date "year" output.check - format.journal.volume output - format.journal.number "" output.after - format.journal.pages "" output.after - format.urldate "" output.after - format.url output - format.doi output - new.block - format.note output - fin.entry -} - -FUNCTION {patent} -{ output.bibitem - format.authors output - author format.key output - 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 - format.url output - format.doi output - new.block - format.note output - fin.entry -} - -FUNCTION {electronic} -{ #1 #1 check.electronic - #1 'entry.is.electronic := - output.bibitem - format.authors output - author format.key output - 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 } - 'skip$ - if$ - format.pages bbl.colon output.after - format.editdate "" output.after - format.urldate "" output.after - format.url output - format.doi output - new.block - format.note output - fin.entry -} - -FUNCTION {misc} -{ journal empty$ not - 'article - { booktitle empty$ not - 'incollection - { publisher empty$ not - 'monograph - { entry.is.electronic - 'electronic - { "Z" set.entry.mark - monograph - } - if$ - } - if$ - } - if$ - } - if$ - empty.misc.check -} - -FUNCTION {archive} -{ "A" set.entry.mark - 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} { book } - -FUNCTION {inproceedings} -{ "C" set.entry.mark - incollection -} - -FUNCTION {conference} { inproceedings } - -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} -{ "Z" set.entry.mark - 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.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$ -} - -FUNCTION {author.key.label} -{ author empty$ - { key empty$ - { cite$ #1 #3 substring$ } - 'key - if$ - } - { author format.lab.names } - if$ -} - -FUNCTION {author.editor.key.label} -{ author empty$ - { editor empty$ - { key empty$ - { cite$ #1 #3 substring$ } - 'key - if$ - } - { editor format.lab.names } - if$ - } - { author format.lab.names } - if$ -} - -FUNCTION {author.key.organization.label} -{ author empty$ - { key empty$ - { organization empty$ - { cite$ #1 #3 substring$ } - { "The " #4 organization chop.word #3 text.prefix$ } - if$ - } - 'key - if$ - } - { author format.lab.names } - if$ -} - -FUNCTION {editor.key.organization.label} -{ editor empty$ - { key empty$ - { organization empty$ - { cite$ #1 #3 substring$ } - { "The " #4 organization chop.word #3 text.prefix$ } - if$ - } - 'key - if$ - } - { editor format.lab.names } - if$ -} - -FUNCTION {calc.short.authors} -{ type$ "book" = - type$ "inbook" = - or - 'author.editor.key.label - { type$ "collection" = - type$ "proceedings" = - or - { editor empty$ not - 'editor.key.organization.label - 'author.key.organization.label - if$ - } - 'author.key.label - if$ - } - if$ - 'short.list := -} - -FUNCTION {calc.label} -{ calc.short.authors - short.list - "(" - * - format.year duplicate$ empty$ - short.list key field.or.null = or - { pop$ "" } - 'skip$ - if$ - * - '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 - 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 } - -INTEGERS { longest.label.width last.extra.num number.label } - -FUNCTION {initialize.longest.label} -{ "" 'longest.label := - #0 int.to.chr$ 'last.label := - "" 'next.extra := - #0 'longest.label.width := - #0 'last.extra.num := - #0 'number.label := -} - -FUNCTION {forward.pass} -{ last.label label = - { last.extra.num #1 + 'last.extra.num := - last.extra.num int.to.chr$ 'extra.label := - } - { "a" chr.to.int$ 'last.extra.num := - "" 'extra.label := - label 'last.label := - } - if$ - number.label #1 + 'number.label := -} - -FUNCTION {reverse.pass} -{ next.extra "b" = - { "a" 'extra.label := } - 'skip$ - if$ - extra.label 'next.extra := - extra.label - duplicate$ empty$ - 'skip$ - { "{\natexlab{" swap$ * "}}" * } - if$ - 'extra.label := - label extra.label * 'label := -} - -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$ - "\providecommand{\natexlab}[1]{#1}" - write$ newline$ - "\providecommand{\url}[1]{#1}" - write$ newline$ - "\expandafter\ifx\csname urlstyle\endcsname\relax\relax\else" - write$ newline$ - " \urlstyle{same}\fi" - write$ newline$ - show.doi - { "\providecommand{\href}[2]{\url{#2}}" - write$ newline$ - "\providecommand{\doi}[1]{\href{https://doi.org/#1}{#1}}" - write$ newline$ - } - 'skip$ - if$ -} - -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} diff --git a/biblio/bibtex/contrib/gbt7714/gbt7714.dtx b/biblio/bibtex/contrib/gbt7714/gbt7714.dtx index cfadbd888b..4721ba99d6 100644 --- a/biblio/bibtex/contrib/gbt7714/gbt7714.dtx +++ b/biblio/bibtex/contrib/gbt7714/gbt7714.dtx @@ -22,11 +22,13 @@ %</internal> %<*install> \input docstrip.tex +\keepsilent +\askforoverwritefalse \preamble ------------------------------------------------------------------- GB/T 7714-2015 BibTeX Style https://github.com/CTeX-org/gbt7714-bibtex-style -Version: 2019/03/21 v1.1.1 +Version: 2019/11/20 v1.1.2 ------------------------------------------------------------------- Copyright (C) 2016-\the\year by Zeping Lee <zepinglee AT gmail.com> ------------------------------------------------------------------- @@ -39,34 +41,11 @@ and version 1.3c or later is part of all distributions of LaTeX version 2005/12/01 or later. ------------------------------------------------------------------- \endpreamble -\keepsilent -\askforoverwritefalse \nopostamble \generate{ \file{\jobname.sty}{\from{\jobname.dtx}{package}} \file{\jobname-plain.bst}{\from{\jobname.dtx}{2015,authoryear}} \file{\jobname-unsrt.bst}{\from{\jobname.dtx}{2015,numerical}} - \file{versions/2005/\jobname-2005-plain.bst}{ - \from{\jobname.dtx}{2005,authoryear} - } - \file{versions/2005/\jobname-2005-unsrt.bst}{ - \from{\jobname.dtx}{2005,numerical} - } - \file{versions/thu/thuthesis-author-year.bst}{ - \from{\jobname.dtx}{thu,2005,authoryear}} - \file{versions/thu/thuthesis-numeric.bst}{ - \from{\jobname.dtx}{thu,2005,numerical}} - \file{versions/thu/thuthesis-bachelor.bst}{ - \from{\jobname.dtx}{2015,numerical}} - \file{versions/ustc/ustcthesis-authoryear.bst}{ - \from{\jobname.dtx}{ustc,2015,authoryear} - } - \file{versions/ustc/ustcthesis-numerical.bst}{ - \from{\jobname.dtx}{ustc,2015,numerical} - } - \file{versions/ustc/ustcthesis-bachelor.bst}{ - \from{\jobname.dtx}{ustc,2015,numerical,nouppercase,nomark,italicjournal} - } } \endbatchfile %</install> @@ -79,7 +58,7 @@ version 2005/12/01 or later. %<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01] %<package>\ProvidesPackage{gbt7714} %<*package> - [2019/03/21 v1.1.1 GB/T 7714-2015 BibTeX Style] + [2019/11/20 v1.1.2 GB/T 7714-2015 BibTeX Style] %</package> % %<*driver> @@ -129,27 +108,9 @@ version 2005/12/01 or later. \itemsep\z@} \let\@listI\@listi \@listi -\renewcommand\glossaryname{版本历史} -\GlossaryPrologue{\section*{\glossaryname}} -\renewcommand*{\changes@}[3]{% - \protected@edef\@tempa{% - \noexpand\glossary{#1 (#2)\levelchar - \ifx\saved@macroname\@empty - \space\actualchar\generalname - \else - \expandafter\@gobble\saved@macroname - \actualchar - \string\verb\quotechar*\verbatimchar\saved@macroname\verbatimchar - \fi - :\levelchar #3}}% - \@tempa - \endgroup - \@esphack -} \makeatother \EnableCrossrefs \CodelineIndex -\RecordChanges % \OnlyDescription \begin{document} @@ -167,7 +128,6 @@ version 2005/12/01 or later. % \date{\filedate\qquad\fileversion} % \maketitle % -% \changes{v1.0}{2018/01/01}{Initial release.} % % % \begin{abstract} @@ -477,8 +437,6 @@ version 2005/12/01 or later. % \end{thebibliography} % % -% \linespread{1.3} -% \PrintChanges % % % \clearpage @@ -504,13 +462,11 @@ version 2005/12/01 or later. % \end{macrocode} % % 只在顺序编码时使用 \opt{sort\&compress}。 -% \changes{v1.0.1}{2018/03/09}{著者出版年制的文献引用不再排序} % \begin{macrocode} \if@gbt@numerical \PassOptionsToPackage{sort&compress}{natbib} \fi \RequirePackage{natbib} -\RequirePackage{etoolbox} \RequirePackage{url} % \end{macrocode} % @@ -529,25 +485,26 @@ version 2005/12/01 or later. % 这个仅用于\pkg{chapterbib}。 % \begin{macrocode} \newcommand\gbtbibstyle[1]{% - \ifstrequal{#1}{numerical}{% - \if@gbt@mmxv - \bibliographystyle{gbt7714-unsrt}% - \else - \bibliographystyle{gbt7714-2005-unsrt}% - \fi + \@ifundefined{gbt@bib@#1}{% + \PackageError{gbt7714}{Invalid argument #1}{}% }{% - \ifstrequal{#1}{authoryear}{% - \if@gbt@mmxv - \bibliographystyle{gbt7714-plain}% - \else - \bibliographystyle{gbt7714-2005-plain}% - \fi - }{% - \PackageError{gbt7714}{Unknown argument #1.}% - {It should be `numerical' or `authoryear'.}% - }% + \@nameuse{gbt@bib@#1} }% } +\newcommand\gbt@bib@numerical{% + \if@gbt@mmxv + \bibliographystyle{gbt7714-unsrt}% + \else + \bibliographystyle{gbt7714-2005-unsrt}% + \fi +} +\newcommand\gbt@bib@authoryear{% + \if@gbt@mmxv + \bibliographystyle{gbt7714-plain}% + \else + \bibliographystyle{gbt7714-2005-plain}% + \fi +} % \end{macrocode} % \end{macro} % @@ -568,23 +525,107 @@ version 2005/12/01 or later. % \end{macrocode} % % \begin{macro}{\cite} -% 下面修改 \pkg{natbib} 的引用格式,主要是将页码写在上标位置。 +% 下面修改 \pkg{natbib} 的引用格式,将页码写在上标位置。 +% 为了减少依赖的宏包,这里直接重定义命令不使用 \cs{patchcmd}。 +% % Numerical 模式的 \cs{citet} 的页码: % \begin{macrocode} -\newcommand\gbt@patchfailure[1]{% - \PackageError{gbt7714}{Failed to patch command \protect#1}{}% -} -\patchcmd{\NAT@citexnum}{% - \@ifnum{\NAT@ctype=\z@}{% - \if*#2*\else\NAT@cmt#2\fi - }{}% - \NAT@mbox{\NAT@@close}% -}{% - \NAT@mbox{\NAT@@close}% - \@ifnum{\NAT@ctype=\z@}{% - \if*#2*\else\textsuperscript{#2}\fi - }{}% -}{}{\gbt@patchfailure{\NAT@citexnum}} +\def\NAT@citexnum[#1][#2]#3{% + \NAT@reset@parser + \NAT@sort@cites{#3}% + \NAT@reset@citea + \@cite{\def\NAT@num{-1}\let\NAT@last@yr\relax\let\NAT@nm\@empty + \@for\@citeb:=\NAT@cite@list\do + {\@safe@activestrue + \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% + \@safe@activesfalse + \@ifundefined{b@\@citeb\@extra@b@citeb}{% + {\reset@font\bfseries?} + \NAT@citeundefined\PackageWarning{natbib}% + {Citation `\@citeb' on page \thepage \space undefined}}% + {\let\NAT@last@num\NAT@num\let\NAT@last@nm\NAT@nm + \NAT@parse{\@citeb}% + \ifNAT@longnames\@ifundefined{bv@\@citeb\@extra@b@citeb}{% + \let\NAT@name=\NAT@all@names + \global\@namedef{bv@\@citeb\@extra@b@citeb}{}}{}% + \fi + \ifNAT@full\let\NAT@nm\NAT@all@names\else + \let\NAT@nm\NAT@name\fi + \ifNAT@swa + \@ifnum{\NAT@ctype>\@ne}{% + \@citea + \NAT@hyper@{\@ifnum{\NAT@ctype=\tw@}{\NAT@test{\NAT@ctype}}{\NAT@alias}}% + }{% + \@ifnum{\NAT@cmprs>\z@}{% + \NAT@ifcat@num\NAT@num + {\let\NAT@nm=\NAT@num}% + {\def\NAT@nm{-2}}% + \NAT@ifcat@num\NAT@last@num + {\@tempcnta=\NAT@last@num\relax}% + {\@tempcnta\m@ne}% + \@ifnum{\NAT@nm=\@tempcnta}{% + \@ifnum{\NAT@merge>\@ne}{}{\NAT@last@yr@mbox}% + }{% + \advance\@tempcnta by\@ne + \@ifnum{\NAT@nm=\@tempcnta}{% +% \end{macrocode} +% +% 在顺序编码制下,\pkg{natbib} 只有在三个以上连续文献引用才会使用连接号, +% 这里修改为允许两个引用使用连接号。 +% \changes{v1.0.3}{2018/03/29}{顺序编码制连续两个文献引用之间使用连接号} +% \changes{v1.0.4}{2018/04/12}{页码的连接号由 en dash 改为 hyphen} +% \begin{macrocode} + % \ifx\NAT@last@yr\relax + % \def@NAT@last@yr{\@citea}% + % \else + % \def@NAT@last@yr{--\NAT@penalty}% + % \fi + \def@NAT@last@yr{-\NAT@penalty}% + }{% + \NAT@last@yr@mbox + }% + }% + }{% + \@tempswatrue + \@ifnum{\NAT@merge>\@ne}{\@ifnum{\NAT@last@num=\NAT@num\relax}{\@tempswafalse}{}}{}% + \if@tempswa\NAT@citea@mbox\fi + }% + }% + \NAT@def@citea + \else + \ifcase\NAT@ctype + \ifx\NAT@last@nm\NAT@nm \NAT@yrsep\NAT@penalty\NAT@space\else + \@citea \NAT@test{\@ne}\NAT@spacechar\NAT@mbox{\NAT@super@kern\NAT@@open}% + \fi + \if*#1*\else#1\NAT@spacechar\fi + \NAT@mbox{\NAT@hyper@{{\citenumfont{\NAT@num}}}}% + \NAT@def@citea@box + \or + \NAT@hyper@citea@space{\NAT@test{\NAT@ctype}}% + \or + \NAT@hyper@citea@space{\NAT@test{\NAT@ctype}}% + \or + \NAT@hyper@citea@space\NAT@alias + \fi + \fi + }% + }% + \@ifnum{\NAT@cmprs>\z@}{\NAT@last@yr}{}% + \ifNAT@swa\else +% \end{macrocode} +% +% 将页码放在括号外边,并且置于上标。 +% \begin{macrocode} + % \@ifnum{\NAT@ctype=\z@}{% + % \if*#2*\else\NAT@cmt#2\fi + % }{}% + \NAT@mbox{\NAT@@close}% + \@ifnum{\NAT@ctype=\z@}{% + \if*#2*\else\textsuperscript{#2}\fi + }{}% + \fi + }{#1}{#2}% +}% % \end{macrocode} % % Numerical 模式的 \cs{citep} 的页码: @@ -597,13 +638,102 @@ version 2005/12/01 or later. % % Author-year 模式的 \cs{citet} 的页码: % \begin{macrocode} -\patchcmd{\NAT@citex}{% - \if*#2*\else\NAT@cmt#2\fi - \if\relax\NAT@date\relax\else\NAT@@close\fi -}{% - \if\relax\NAT@date\relax\else\NAT@@close\fi - \if*#2*\else\textsuperscript{#2}\fi -}{}{\gbt@patchfailure{\NAT@citex}} +\def\NAT@citex% + [#1][#2]#3{% + \NAT@reset@parser + \NAT@sort@cites{#3}% + \NAT@reset@citea + \@cite{\let\NAT@nm\@empty\let\NAT@year\@empty + \@for\@citeb:=\NAT@cite@list\do + {\@safe@activestrue + \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% + \@safe@activesfalse + \@ifundefined{b@\@citeb\@extra@b@citeb}{\@citea% + {\reset@font\bfseries ?}\NAT@citeundefined + \PackageWarning{natbib}% + {Citation `\@citeb' on page \thepage \space undefined}\def\NAT@date{}}% + {\let\NAT@last@nm=\NAT@nm\let\NAT@last@yr=\NAT@year + \NAT@parse{\@citeb}% + \ifNAT@longnames\@ifundefined{bv@\@citeb\@extra@b@citeb}{% + \let\NAT@name=\NAT@all@names + \global\@namedef{bv@\@citeb\@extra@b@citeb}{}}{}% + \fi + \ifNAT@full\let\NAT@nm\NAT@all@names\else + \let\NAT@nm\NAT@name\fi + \ifNAT@swa\ifcase\NAT@ctype + \if\relax\NAT@date\relax + \@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}\NAT@date}% + \else + \ifx\NAT@last@nm\NAT@nm\NAT@yrsep + \ifx\NAT@last@yr\NAT@year + \def\NAT@temp{{?}}% + \ifx\NAT@temp\NAT@exlab\PackageWarningNoLine{natbib}% + {Multiple citation on page \thepage: same authors and + year\MessageBreak without distinguishing extra + letter,\MessageBreak appears as question mark}\fi + \NAT@hyper@{\NAT@exlab}% + \else\unskip\NAT@spacechar + \NAT@hyper@{\NAT@date}% + \fi + \else + \@citea\NAT@hyper@{% + \NAT@nmfmt{\NAT@nm}% + \hyper@natlinkbreak{% + \NAT@aysep\NAT@spacechar}{\@citeb\@extra@b@citeb + }% + \NAT@date + }% + \fi + \fi + \or\@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}}% + \or\@citea\NAT@hyper@{\NAT@date}% + \or\@citea\NAT@hyper@{\NAT@alias}% + \fi \NAT@def@citea + \else + \ifcase\NAT@ctype + \if\relax\NAT@date\relax + \@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}}% + \else + \ifx\NAT@last@nm\NAT@nm\NAT@yrsep + \ifx\NAT@last@yr\NAT@year + \def\NAT@temp{{?}}% + \ifx\NAT@temp\NAT@exlab\PackageWarningNoLine{natbib}% + {Multiple citation on page \thepage: same authors and + year\MessageBreak without distinguishing extra + letter,\MessageBreak appears as question mark}\fi + \NAT@hyper@{\NAT@exlab}% + \else + \unskip\NAT@spacechar + \NAT@hyper@{\NAT@date}% + \fi + \else + \@citea\NAT@hyper@{% + \NAT@nmfmt{\NAT@nm}% + \hyper@natlinkbreak{\NAT@spacechar\NAT@@open\if*#1*\else#1\NAT@spacechar\fi}% + {\@citeb\@extra@b@citeb}% + \NAT@date + }% + \fi + \fi + \or\@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}}% + \or\@citea\NAT@hyper@{\NAT@date}% + \or\@citea\NAT@hyper@{\NAT@alias}% + \fi + \if\relax\NAT@date\relax + \NAT@def@citea + \else + \NAT@def@citea@close + \fi + \fi + }}\ifNAT@swa\else +% \end{macrocode} +% +% 将页码放在括号外边,并且置于上标。 +% \begin{macrocode} + % \if*#2*\else\NAT@cmt#2\fi + \if\relax\NAT@date\relax\else\NAT@@close\fi + \if*#2*\else\textsuperscript{#2}\fi + \fi}{#1}{#2}} % \end{macrocode} % % Author-year 模式的 \cs{citep} 的页码: @@ -612,27 +742,10 @@ version 2005/12/01 or later. [3]{\ifNAT@swa\NAT@@open\if*#2*\else#2\NAT@spacechar\fi #1\NAT@@close\if*#3*\else\textsuperscript{#3}\fi\else#1\fi\endgroup} % \end{macrocode} -% -% 在顺序编码制下,\pkg{natbib} 只有在三个以上连续文献引用才会使用连接号, -% 这里修改为允许两个引用使用连接号。 -% \changes{v1.0.3}{2018/03/29}{顺序编码制连续两个文献引用之间使用连接号} -% \changes{v1.0.4}{2018/04/12}{页码的连接号由 en dash 改为 hyphen} -% \begin{macrocode} -\patchcmd{\NAT@citexnum}{% - \ifx\NAT@last@yr\relax - \def@NAT@last@yr{\@citea}% - \else - \def@NAT@last@yr{--\NAT@penalty}% - \fi -}{% - \def@NAT@last@yr{-\NAT@penalty}% -}{}{\gbt@patchfailure{\NAT@citexnum}} -% \end{macrocode} % \end{macro} % % \begin{environment}{thebibliography} % 参考文献列表的标签左对齐 -% \changes{v1.0.6}{2018/05/10}{文献列表的数字标签左对齐} % \begin{macrocode} \renewcommand\@biblabel[1]{[#1]\hfill} % \end{macrocode} @@ -640,16 +753,14 @@ version 2005/12/01 or later. % % \begin{macro}{\url} % 使用 \pkg{xurl} 宏包的方法,增加 URL 可断行的位置。 -% \changes{v1.0.8}{2018/06/23}{使用 \pkg{xurl} 的方法改进 URL 断行} -% \begin{macrocode} -\def\UrlBreaks{% - \do\/% - \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k\do\l% - \do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w\do\x\do\y\do\z% - \do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L% - \do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X\do\Y\do\Z% - \do0\do1\do2\do3\do4\do5\do6\do7\do8\do9\do=\do/\do.\do:% - \do\*\do\-\do\~\do\'\do\"\do\-} +% \begin{macrocode} +\g@addto@macro\UrlBreaks{% + \do0\do1\do2\do3\do4\do5\do6\do7\do8\do9% + \do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M + \do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X\do\Y\do\Z + \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k\do\l\do\m + \do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w\do\x\do\y\do\z +} \Urlmuskip=0mu plus 0.1mu %</package> % \end{macrocode} @@ -667,7 +778,6 @@ version 2005/12/01 or later. % \begin{environment}{bst} % 这里定义了一些变量用于定制样式, % 可以在下面的 |load.config| 函数中选择是否启用。 -% \changes{v1.0.8}{2018/06/23}{新增接口供用户自定义样式} % \begin{macrocode} %<*authoryear|numerical> INTEGERS { @@ -705,7 +815,9 @@ FUNCTION {load.config} % % 英文姓名转为全大写: % \begin{macrocode} +%<*!nouppercase&!thu> #1 'uppercase.name := +%</!nouppercase&!thu> %<*nouppercase|thu> #0 'uppercase.name := %</nouppercase|thu> @@ -719,7 +831,9 @@ FUNCTION {load.config} % 采用著者-出版年制时,作者姓名与年份之间使用句点连接: % \begin{macrocode} %<*authoryear> +%<*!period&!2005&!ustc> #0 'period.between.author.year := +%</!period&!2005&!ustc> %<*period|2005|ustc> #1 'period.between.author.year := %</period|2005|ustc> @@ -778,10 +892,12 @@ FUNCTION {load.config} % % 无出版地或出版者时,著录“出版地不详”,“出版者不详”,“S.l.” 或 “s.n.”: % \begin{macrocode} +%<*!noslsn&!thu&!ustc> #1 'show.missing.address.publisher := -%<*noslsn|ustc> +%</!noslsn&!thu&!ustc> +%<*noslsn|thu|ustc> #0 'show.missing.address.publisher := -%</noslsn|ustc> +%</noslsn|thu|ustc> % \end{macrocode} % % 是否著录 URL: @@ -794,7 +910,9 @@ FUNCTION {load.config} % % 是否著录 DOI: % \begin{macrocode} +%<*!nodoi&!2005> #1 'show.doi := +%</!nodoi&!2005> %<*nodoi|2005> #0 'show.doi := %</nodoi|2005> @@ -805,7 +923,6 @@ FUNCTION {load.config} #0 'show.note := % \end{macrocode} % -% \changes{v1.1.1}{2019/03/21}{允许自定义文种的顺序} % 参考文献表按照“著者-出版年”组织时,各个文种的顺序: % \begin{macrocode} %<*authoryear> @@ -1047,7 +1164,6 @@ FUNCTION {init.state.consts} % \end{macrocode} % % 下面是一些常量的定义 -% \changes{v1.1}{2019/01/02}{允许自定义“et al”} % \begin{macrocode} FUNCTION {bbl.anonymous} { entry.lang lang.zh = @@ -1090,7 +1206,12 @@ FUNCTION {bbl.wide.space} { "\quad " } FUNCTION {bbl.wide.space} { "\ " } %</2005> +%<*!thu> FUNCTION {bbl.slash} { "//\allowbreak " } +%</!thu> +%<*thu> +FUNCTION {bbl.slash} { " // " } +%</thu> FUNCTION {bbl.sine.loco} { entry.lang lang.zh = @@ -1220,21 +1341,9 @@ FUNCTION {output.check} % % This function finishes all entries. % -% Tsinghua requires no period at the end of book-like entries. % \begin{macrocode} FUNCTION {fin.entry} -%<*!thu> { add.period$ -%</!thu> -%<*thu> -{ type$ "book" = - type$ "inbook" = or - type$ "incollection" = or - type$ "collection" = or - 'skip$ - 'add.period$ - if$ -%</thu> write$ newline$ } @@ -1376,7 +1485,6 @@ FUNCTION {italicize} % \end{macrocode} % % \subsubsection{Detect Language} -% \changes{v1.0.7}{2018/05/12}{修正了检测 Unicode 语言} % \begin{macrocode} INTEGERS { byte second.byte } @@ -1586,8 +1694,6 @@ FUNCTION {set.entry.numbered} % % Other formatting functions are similar, so no "comment version" will be % given for them. -% \changes{v1.0.2}{2018/03/16}{正确识别姓名中的“others”} -% \changes{v1.0.8}{2018/06/23}{使用“\textasciitilde”连接英文姓名} % \begin{macrocode} INTEGERS { nameptr namesleft numnames name.lang } @@ -1752,19 +1858,15 @@ FUNCTION {make.full.names} FUNCTION {output.bibitem} { newline$ "\bibitem[" write$ - label write$ - ")" make.full.names duplicate$ short.list = + label ")" * + make.full.names duplicate$ short.list = { pop$ } { * } if$ 's := s text.length$ 'charptr := - { charptr #0 > } - { s charptr #1 substring$ "]" = - { #0 'charptr := } - { charptr #1 - 'charptr := } - if$ - } + { charptr #0 > s charptr #1 substring$ "[" = not and } + { charptr #1 - 'charptr := } while$ charptr #0 > { "{" s * "}" * } @@ -1787,9 +1889,6 @@ FUNCTION {output.bibitem} % and except for the first one after a colon (followed by whitespace)), % and hope the user has brace-surrounded words that need to stay capitilized; % for some styles, however, we leave it as it is in the database. -% \changes{v1.0.6}{2018/05/10}{不再处理中文标题的英文单词的大小写} -% \changes{v1.0.9}{2018/08/05}{不再转换题名 volume 的大小写} -% \changes{v1.0.9}{2018/08/05}{增加选项在题名添加超链接} % \begin{macrocode} FUNCTION {change.sentence.case} { entry.lang lang.en = @@ -2033,7 +2132,6 @@ FUNCTION {format.booktitle.vol.num} % \end{macrocode} % -% \changes{v1.1}{2019/01/02}{修正 series 的 bug} % \begin{macrocode} FUNCTION {format.series.vol.num.booktitle} { format.volume.number 's := @@ -2083,6 +2181,11 @@ FUNCTION {set.entry.mark} FUNCTION {format.mark} { show.mark +%<*thu> + type$ "phdthesis" = type$ "mastersthesis" = or type$ "patent" = or + medium empty$ not or entry.is.electronic or + and +%</thu> { medium empty$ not { entry.mark "/" * medium * 'entry.mark := } { entry.is.electronic @@ -2091,7 +2194,12 @@ FUNCTION {format.mark} if$ } if$ +%<*!thu> "\allowbreak[" entry.mark * "]" * +%</!thu> +%<*thu> + " [" entry.mark * "]" * +%</thu> } { "" } if$ @@ -2477,7 +2585,6 @@ FUNCTION {format.periodical.year.volume.number} % \subsubsection{Format url and doi} % % 传统的 \BibTeX{} 习惯使用 howpublished 著录 url,这里提供支持。 -% \changes{v1.0.8}{2018/06/23}{支持 howpublished 中的 url} % \begin{macrocode} FUNCTION {check.url} { url empty$ not @@ -2518,7 +2625,6 @@ FUNCTION {format.url} % \end{macrocode} % % 需要检测 DOI 是否已经包含在 URL 中。 -% \changes{v1.0.5}{2018/04/18}{允许著录多个 DOI} % \begin{macrocode} FUNCTION {check.doi} { doi empty$ not @@ -2903,7 +3009,6 @@ FUNCTION {electronic} % Optional: author, title, howpublished, month, year, note % % Misc 用来自动判断类型。 -% \changes{v1.0.9}{2018/08/05}{修正不显示 url 的选项} % \begin{macrocode} FUNCTION {misc} { journal empty$ not diff --git a/biblio/bibtex/contrib/gbt7714/gbt7714.pdf b/biblio/bibtex/contrib/gbt7714/gbt7714.pdf Binary files differindex a37986e804..296a5e5776 100644 --- a/biblio/bibtex/contrib/gbt7714/gbt7714.pdf +++ b/biblio/bibtex/contrib/gbt7714/gbt7714.pdf diff --git a/biblio/bibtex/contrib/gbt7714/gbt7714.sty b/biblio/bibtex/contrib/gbt7714/gbt7714.sty deleted file mode 100644 index 3269ff5bf7..0000000000 --- a/biblio/bibtex/contrib/gbt7714/gbt7714.sty +++ /dev/null @@ -1,124 +0,0 @@ -%% -%% This is file `gbt7714.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% gbt7714.dtx (with options: `package') -%% ------------------------------------------------------------------- -%% GB/T 7714-2015 BibTeX Style -%% https://github.com/CTeX-org/gbt7714-bibtex-style -%% Version: 2019/03/21 v1.1.1 -%% ------------------------------------------------------------------- -%% Copyright (C) 2016-2019 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 2005/12/01 or later. -%% ------------------------------------------------------------------- -\NeedsTeXFormat{LaTeX2e}[1999/12/01] -\ProvidesPackage{gbt7714} - [2019/03/21 v1.1.1 GB/T 7714-2015 BibTeX Style] -\newif\if@gbt@mmxv -\newif\if@gbt@numerical -\newif\if@gbt@super -\DeclareOption{2015}{\@gbt@mmxvtrue} -\DeclareOption{2005}{\@gbt@mmxvfalse} -\DeclareOption{super}{\@gbt@numericaltrue\@gbt@supertrue} -\DeclareOption{numbers}{\@gbt@numericaltrue\@gbt@superfalse} -\DeclareOption{authoryear}{\@gbt@numericalfalse} -\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{natbib}} -\ExecuteOptions{2015,super} -\ProcessOptions\relax -\if@gbt@numerical - \PassOptionsToPackage{sort&compress}{natbib} -\fi -\RequirePackage{natbib} -\RequirePackage{etoolbox} -\RequirePackage{url} -\newcommand\bibstyle@super{\bibpunct{[}{]}{,}{s}{,}{\textsuperscript{,}}} -\newcommand\bibstyle@numbers{\bibpunct{[}{]}{,}{n}{,}{,}} -\newcommand\bibstyle@authoryear{\bibpunct{(}{)}{;}{a}{,}{,}} -\newcommand\gbtbibstyle[1]{% - \ifstrequal{#1}{numerical}{% - \if@gbt@mmxv - \bibliographystyle{gbt7714-unsrt}% - \else - \bibliographystyle{gbt7714-2005-unsrt}% - \fi - }{% - \ifstrequal{#1}{authoryear}{% - \if@gbt@mmxv - \bibliographystyle{gbt7714-plain}% - \else - \bibliographystyle{gbt7714-2005-plain}% - \fi - }{% - \PackageError{gbt7714}{Unknown argument #1.}% - {It should be `numerical' or `authoryear'.}% - }% - }% -} -\if@gbt@numerical - \if@gbt@super - \citestyle{super}% - \gbtbibstyle{numerical}% - \else - \citestyle{numbers} - \gbtbibstyle{numerical}% - \fi -\else - \citestyle{authoryear} - \gbtbibstyle{authoryear}% -\fi -\newcommand\gbt@patchfailure[1]{% - \PackageError{gbt7714}{Failed to patch command \protect#1}{}% -} -\patchcmd{\NAT@citexnum}{% - \@ifnum{\NAT@ctype=\z@}{% - \if*#2*\else\NAT@cmt#2\fi - }{}% - \NAT@mbox{\NAT@@close}% -}{% - \NAT@mbox{\NAT@@close}% - \@ifnum{\NAT@ctype=\z@}{% - \if*#2*\else\textsuperscript{#2}\fi - }{}% -}{}{\gbt@patchfailure{\NAT@citexnum}} -\renewcommand\NAT@citesuper[3]{\ifNAT@swa - \if*#2*\else#2\NAT@spacechar\fi -\unskip\kern\p@\textsuperscript{\NAT@@open#1\NAT@@close\if*#3*\else#3\fi}% - \else #1\fi\endgroup} -\patchcmd{\NAT@citex}{% - \if*#2*\else\NAT@cmt#2\fi - \if\relax\NAT@date\relax\else\NAT@@close\fi -}{% - \if\relax\NAT@date\relax\else\NAT@@close\fi - \if*#2*\else\textsuperscript{#2}\fi -}{}{\gbt@patchfailure{\NAT@citex}} -\renewcommand\NAT@cite% - [3]{\ifNAT@swa\NAT@@open\if*#2*\else#2\NAT@spacechar\fi - #1\NAT@@close\if*#3*\else\textsuperscript{#3}\fi\else#1\fi\endgroup} -\patchcmd{\NAT@citexnum}{% - \ifx\NAT@last@yr\relax - \def@NAT@last@yr{\@citea}% - \else - \def@NAT@last@yr{--\NAT@penalty}% - \fi -}{% - \def@NAT@last@yr{-\NAT@penalty}% -}{}{\gbt@patchfailure{\NAT@citexnum}} -\renewcommand\@biblabel[1]{[#1]\hfill} -\def\UrlBreaks{% - \do\/% - \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k\do\l% - \do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w\do\x\do\y\do\z% - \do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L% - \do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X\do\Y\do\Z% - \do0\do1\do2\do3\do4\do5\do6\do7\do8\do9\do=\do/\do.\do:% - \do\*\do\-\do\~\do\'\do\"\do\-} -\Urlmuskip=0mu plus 0.1mu |