diff --git a/BIT-thesis-template-grd/GBT7714-2005NLang.bst b/BIT-thesis-template-grd/GBT7714-2005NLang.bst index fd68709..d95a3b4 100644 --- a/BIT-thesis-template-grd/GBT7714-2005NLang.bst +++ b/BIT-thesis-template-grd/GBT7714-2005NLang.bst @@ -1,691 +1,197 @@ -%% BUPTThesis.bst %% -%% 北京理工大学研究生学位论文参考文献 BibTeX 样式 -%% -%% -%% 直接采用了北京邮电大学的模板 -%% +%% This is file `gbt-7714-2015-numerical.bst', +%% generated with the docstrip utility. %% -%% 本样式基于 IEEEtran 和 ThuThesis 修改而成,基本满足北京邮电大学研究生论文格式要求 +%% The original source files were: %% -%% 作者: -%% 张煜 (email:dazzlezhang@gmail.com) -%% -%% 更新记录: -%% $LastChangedBy: dazzlezhang $ -%% $LastChangedDate: 2009-06-24 11:30:57 +0800 (三, 2009-06-24) $ -%% $LastChangedRevision: 71 $ - -%% 一些设置的缺省值 -% 英文姓名排版格式字符串, 按~<, Jr.>格式 -FUNCTION {default.name.format.string} {"{vv~}{ll}{~f}{, Jj}"} - -% 列出的最多作者数目, 即当作者数目超过下列数字时, 超出部分的作者姓名将略去 -FUNCTION {default.max.num.names.before.forced.et.al} { #3 } - -% 是否为盲审版本, #0 表示盲审将隐去作者信息, #1 表示非盲审 -FUNCTION {default.is.for.peer.review} { #0 } -%%%%%%%%%%%%%% -% 一些辅助函数 -%%%%%%%%%%%%%% -% #0 不在终端显示开始/完成的提示信息 -% #1 显示提示信息 -FUNCTION {is.print.banners.to.terminal} {#1} - -%%%%%%%%%%%%%%%% -% 版本与提示信息 -%%%%%%%%%%%%%%%% -% 版本信息 -FUNCTION{bst.file.version} { "0.2" } -FUNCTION{bst.file.date} { "2009/01/25" } -FUNCTION{bst.file.website} { - "http://code.google.com/p/buptthesis/" } - -% 开始提示信息 -FUNCTION {banner.message}{ - is.print.banners.to.terminal - { "-- BUPTThesis.bst version" " " * bst.file.version * - " (" * bst.file.date * ") " * "by Yu Zhang." * - top$ - "-- " bst.file.website * - top$ - "-- See the " quote$ * "userguide.pdf" * quote$ * - " manual for usage information." * - top$ - } - { skip$ } - if$ -} - -% 完成提示信息 -FUNCTION {completed.message} { - is.print.banners.to.terminal - { "" top$ "Done." top$ } - { skip$ } - if$ -} - -%%%%%%%%%%%%%%%%%%% -%% 预定义的字符串宏 -%%%%%%%%%%%%%%%%%%% -% 英文月份 -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"} - -%%%%%%%%%%%% -%% 条目定义 -%%%%%%%%%%%% -ENTRY { address % 地址 - assignee % 标准授权人 - author % 作者 - booktitle % 专著/论文集名 - chapter % - day % - dayfiled % - edition % 版本 - editor % 编者 - howpublished % 出版形式 - esubtype % 电子文献子类 - institution % - journal % 期刊 - key % - language % 语言 - month % 月 - monthfiled % - nationality % - newsletter % - note % - number % - number2 % - organization % - pages % - publisher % - refdate % - update % 电子文档更新或修改日期 - school % - series % - title % - translator % - type % - volume % - volume2 % - year % - year2 % - yearfiled % - url % URL - pubaddress % 出版地 - CTLname_format_string % 作者英文姓名排版格式 - CTLmax_names_forced_etal % 强制略去的最大作者数 - CTLauthor_name_english % 作者英文姓名 - CTLauthor_name_chinese % 作者中文姓名 - CTLfor_peer_review % 是否匿名 +%% gbt-7714-2015.dtx (with options: `numerical') +%% +%% Copyright (C) 2016-2017 by Zeping Lee +%% +%% This file may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.2 of this license or (at your option) any later +%% version. The latest version of this license is in: +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.2 or later is part of all distributions of +%% LaTeX version 1999/12/01 or later. +%% +%% This BibTeX style file is derived from `plainnat.bst' by Patrick W Daly, +%% which was designed for use with the `natbib.sty' package. +%% +ENTRY + { address + author + booktitle + chapter + date + doi + eid + edition + editor + howpublished + institution + isbn + issn + journal + key + language + mark + media + month + note + number + organization + pages + publisher + school + series + title + translator + type + url + urldate + volume + year } - {} - { label } - -%%%%%%%%%%%%% -%% 字符串常量 -%%%%%%%%%%%%% -% FUNCTION {bbl.anonymous} { language empty$ { "Anon" } { "佚名" } if$ } -FUNCTION {bbl.anonymous} { "" } -FUNCTION {bbl.etal} { language empty$ { "et~al" } { "等" } if$ } -FUNCTION {bbl.sine.loco} { language empty$ { "S.~l." } { "出版地不详" } if$ } -FUNCTION {bbl.sine.nomine} { language empty$ { "s.~n." } { "出版者不详" } if$ } - -FUNCTION {bbl.comma} { language empty$ { ", " } { "," } if$ } -FUNCTION {bbl.colon} { language empty$ { ": " } { ":" } if$ } -FUNCTION {bbl.period} { language empty$ { "." } { "." } if$ } -FUNCTION {bbl.parallel} { "~//~" } - -FUNCTION {bbl.st} { "st" } % 序数词后缀 -FUNCTION {bbl.nd} { "nd" } % 序数词后缀 -FUNCTION {bbl.rd} { "rd" } % 序数词后缀 -FUNCTION {bbl.th} { "th" } % 序数词后缀 - -FUNCTION {bbl.number} { "第" } -FUNCTION {bbl.author} { "作者" } - -%%%%%%%%%%%% -%% 整型变量 -%%%%%%%%%%% -INTEGERS { output.state before.all mid.sentence after.title after.sentence url.sentence after.block before.pages } -INTEGERS { number.label longest.label.width multiresult - nameptr namesleft numnames lastnamecapitalized namelength charptr } -INTEGERS { max.num.names.before.forced.et.al } -INTEGERS { is.for.peer.review } - -%%%%%%%%%%%%% -%% 字符串变量 -%%%%%%%%%%%%% -STRINGS { s - t - longest.label - thename - name.emph.author.en % 强调现实的作者英文姓名 - name.emph.author.zh % 强调显示的作者中文姓名 - name.format.string % 姓名的格式字符串 - author.name.in.english % 作者英文姓名 - author.name.in.chinese % 作者中文姓名 -} - -%%%%%%%%%%%%%%%%%%%%% -%% LaTeX 参考文献代码 -%%%%%%%%%%%%%%%%%%%%% - -% 输出 .bbl 文件开始 -FUNCTION {begin.bib} { - "% Generated by BUPTThesis.bst, version: " bst.file.version * - " (" * bst.file.date * ")" * - write$ newline$ % 输出注释行,说明产生该bbl的bst及版本 - - preamble$ empty$ % 输出前导 - 'skip$ - { preamble$ write$ newline$ } - if$ + { lang } + { mark_ label extra.label sort.label short.list } - "\begin{thebibliography}{" longest.label * "}" * - write$ newline$ % 输出 \begin{thebiliography}{x} -} - -% 输出 .bbl 文件结束部分 -FUNCTION {end.bib} { - newline$ - "\end{thebibliography}" - write$ newline$ -} - -%%%%%%%%%%%% -%% 底层函数 -%%%%%%%%%%%% - -% 控制变量初始化 -FUNCTION {initialize.controls} { - default.name.format.string 'name.format.string := - default.max.num.names.before.forced.et.al 'max.num.names.before.forced.et.al := - default.is.for.peer.review 'is.for.peer.review := -} - -% 初始化最长 label -FUNCTION {initialize.longest.label} { - "" 'longest.label := - #1 'number.label := - #0 'longest.label.width := -} - -% 最长 label pass -FUNCTION {longest.label.pass} -{ number.label int.to.str$ 'label := - number.label #1 + 'number.label := - label width$ longest.label.width > - { label 'longest.label := - label width$ 'longest.label.width := - } - { skip$ } - if$ -} +INTEGERS { output.state before.all mid.sentence after.sentence after.block after.slash } -% 逻辑非: 栈顶元素的逻辑非 -FUNCTION {not} { - { #0 } - { #1 } - if$ -} - -% 逻辑与 -FUNCTION {and} { - { skip$ } - { pop$ #0 } - if$ -} +INTEGERS { lang.zh lang.ja lang.en lang.ru lang.default } -% 逻辑或 -FUNCTION {or} { - { pop$ #1 } - { skip$ } - if$ -} - -% 返回 #1 : 栈顶字符是数字"0"~"9" -% 返回 #0 : 其他 -FUNCTION {is.num} { - chr.to.int$ - duplicate$ "0" chr.to.int$ < not - swap$ "9" chr.to.int$ > not and -} - -% 栈顶整数乘以10 -FUNCTION {bump.int.mag} { - #0 'multiresult := % 初始化乘运算结果 y <- 0 - { duplicate$ #0 > } % 栈顶整数 x = 0 时才停止循环 - { #1 - % x <- x - 1 - multiresult #10 + - 'multiresult := % y <- y + 10 - } - while$ - pop$ % 释放 x - multiresult % y 压栈返回 -} - -% 将栈顶字符("0"~"9")转换为整数(0~9) -FUNCTION {char.to.integer} { - duplicate$ - is.num - { chr.to.int$ "0" chr.to.int$ - } - { "noninteger character " quote$ * swap$ * quote$ * - " in integer field of " * cite$ * warning$ - #0 % 如果栈定字符不是("0"~"9"), 给出警告返回 0 - } - if$ -} +INTEGERS { charptr stringlength } -% 将栈顶字符串转换为整数 -FUNCTION {string.to.integer} { - duplicate$ text.length$ 'namesleft := % namesleft <- 字符串长度 - #1 'nameptr := % nameptr <- 1 - #0 'numnames := % numnames <- 0 - { nameptr namesleft > not } % while( ! ( nameptr > namesleft ) ) - { duplicate$ nameptr #1 substring$ % 取第 nameptr 个字符 x - char.to.integer numnames bump.int.mag + - 'numnames := % numnames <- chr2int( x ) + 10 * numnames - nameptr #1 + - 'nameptr := % nameptr <- nameptr + 1 - } - while$ - pop$ % 释放栈顶元素 - numnames % numnames 压栈返回 -} - -% convert the strings "yes" or "no" to #1 or #0 respectively -FUNCTION {yes.no.to.int} -{ "l" change.case$ duplicate$ - "yes" = - { pop$ #1 } - { duplicate$ "no" = - { pop$ #0 } - { "unknown boolean " quote$ * swap$ * quote$ * - " in " * cite$ * warning$ - #0 - } - if$ - } - if$ +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := + #4 'after.slash := + #4 'lang.zh := + #5 'lang.ja := + #1 'lang.en := + #3 'lang.ru := + #0 'lang.default := } -% 初始化状态常量 -FUNCTION {initialize.status.constants} -{ #0 'before.all := % 起始 - #1 'mid.sentence := % 句中 - #2 'after.sentence := % 句末 - #3 'after.block := % 块后 - #4 'after.title := % - #5 'before.pages := % -} +STRINGS { s t } -FUNCTION {remove.char} -{ 't := - 's := - "" - { s empty$ not } - { s #1 #1 substring$ - s #2 global.max$ substring$ 's := - duplicate$ t = 'pop$ - { * } - if$ - } - while$ +FUNCTION {debug} +{ 's := + duplicate$ + "DEBUG: " s * " -> `" * + swap$ * "'" * + top$ } -STRINGS {z} -FUNCTION {remove.period} -{ 'z := - "" - { z empty$ not } - { z #1 #1 substring$ - z #2 global.max$ substring$ 'z := - duplicate$ "." = 'pop$ - { * } - if$ - } - while$ +FUNCTION {debug.int} +{ 's := + duplicate$ int.to.str$ + "DEBUG: " s * " == " * + swap$ * + top$ } -FUNCTION {remove.dots} { - duplicate$ "input=" swap$ * warning$ - "language=" language * warning$ - language empty$ - { "." remove.char - duplicate$ "output('.')=" swap$ * warning$ } - { "." remove.char - duplicate$ "output('.')=" swap$ * warning$ - "." remove.char - duplicate$ "output('.')=" swap$ * warning$ } - if$ +FUNCTION {punct.colon} +{ ": " } -FUNCTION {bibinfo.check} -{ swap$ - duplicate$ missing$ - { - pop$ pop$ - "" - } - { duplicate$ empty$ - { - swap$ pop$ - } - { swap$ - pop$ - } - if$ - } - if$ +FUNCTION {punct.slash} +{ "//\allowbreak{}" } -%%%%%%%%%%%% -%% 调试例程 -%%%%%%%%%%%% - -% 默认调试输出函数 -FUNCTION {debug.output} { - "[DEBUG] " swap$ * top$ -} - -% 状态调试输出函数 -FUNCTION {debug.output.status} { - "---- output.state=" - output.state before.all = - { "before.all" } - { output.state mid.sentence = - { "mid.sentence" } - { output.state after.sentence = - { "after.sentence" } - { output.state url.sentence = - { "url.sentence" } - { output.state before.pages = - { "before.pages" } - { "after.block" } - if$ - } - if$ - } - if$ - } - if$ - } - if$ - * debug.output +FUNCTION {punct.space} +{ " " } -FUNCTION {output.year} -{ 't := - number empty$ - volume empty$ - and - { add.period$ write$ } - { ", " * write$ } - if$ - t -} - -% STRINGS {z} -% FUNCTION {remove.dots} -% { 'z := -% "" -% { z empty$ not } -% { z #1 #1 substring$ -% z #2 global.max$ substring$ 'z := -% duplicate$ bbl.period = 'pop$ -% { * } -% if$ -% } -% while$ -% %z -% } - -% 对于中文文献, 用全角句点替换英文句点 -FUNCTION {replace.half.width.period} { -% % DEBUG -% duplicate$ "-- replace.half.width.period(" swap$ * ")" * debug.output -% % END OF DEBUG - language empty$ - { " " * } % 对于英文文献, 在句点后加一空格 - { duplicate$ text.length$ 'numnames := % numnames 等于字符串长度 -% % DEBUG -% numnames int.to.str$ "---- text.length$=" swap$ * debug.output -% % END OF DEBUG - duplicate$ numnames #1 substring$ "." = - { % % DEBUG -% "---- Found '.' at the end" debug.output -% % END OF DEBUG - numnames #1 - - #1 swap$ substring$ - bbl.period * - } - { skip$ } - if$ - } - if$ -% % DEBUG -% duplicate$ "---- Return=" swap$ * debug.output -% % END OF DEBUG -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% 输出例程: 输出栈顶项并根据需要添加标点符号 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% 非空项输出函数: 用于输出非空项 -FUNCTION {output.nonnull} { -% % DEBUG -% duplicate$ "output.nonnull(" swap$ * ")" * debug.output -% debug.output.status -% % END OF DEBUG - swap$ - % 根据当前输出状态添加前置标点符号 - % before.all 起始, 不添加任何标点符号直接输出 - % mid.sentence 句中, 前置逗号输出 - % after.sentence 句末, 前置句号输出 - % after.block 块后, 前置句号, 后置 \newblock 输出 - % after.title +FUNCTION {output.nonnull} +{ 's := output.state mid.sentence = - { bbl.comma * write$ } % mid.sentence 前置逗号 + { ", " * write$ } { output.state after.block = - { add.period$ % 块后, 后置句号 - replace.half.width.period % 为中文文献替换句点 - write$ - newline$ -% "\newblock " write$ - } % 后置 \newblock 输出 - { output.state before.all = - { write$ } % 起始, 不添加任何标点符号直接输出 - { output.state after.title = - { bbl.parallel * - write$ } - { output.state before.pages = - { bbl.colon * - write$ } - { add.period$ % 句末, 前置句号输出 - replace.half.width.period - write$ } % - if$ - } - if$ - } - if$ - } + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { output.state after.slash = + { punct.slash * write$ } + { add.period$ " " * write$ } + if$ + } + if$ + } if$ mid.sentence 'output.state := } if$ - % s + s } -% 无警告输出函数 -FUNCTION {output} { - duplicate$ empty$ - { pop$ } % 若输出项为空, 则舍去空输出项 - { output.nonnull } % 否则调用非空输出函数 +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull if$ } -% 警告输出函数: 同 output, 但是对于空项给出警告提示 -FUNCTION {output.warn} +FUNCTION {output.after} { 't := duplicate$ empty$ - { pop$ "empty " t * " in " * cite$ * warning$ } - { output.nonnull } - if$ -} - -% 将数字字符串转换成序数词形式字符串(例如: "7" -> "7th") -FUNCTION {num.to.ordinal} { - duplicate$ #-1 #1 substring$ "1" = - { bbl.st * } - { duplicate$ #-1 #1 substring$ "2" = - { bbl.nd * } - { duplicate$ #-1 #1 substring$ "3" = - { bbl.rd * } - { bbl.th * } - if$ - } - if$ - } - if$ -} - -% 从字符串中提取前导数字的函数 -% 如果栈顶字符串以数字开头(例如: "11th"), 则将字符串用其数字部分(即,"11") -% 替换. 否则, 保持原字符串不变. 用于版本转换函数(convert.edition) -% s 保存提取出的数字, t 保存剩余待扫描的字符串. -FUNCTION {extract.num} { - duplicate$ 't := % t <- 输入字符串 - "" 's := % s <- "" - { t empty$ not } % while( t != "" ) { - { t #1 #1 substring$ % tmp <- t[0] - t #2 global.max$ substring$ - 't := % t <- t[2:global.max$] - duplicate$ is.num % if( is.num( tmp ) ) - { s swap$ * 's := } % s <- s & tmp - { pop$ "" 't := } % else t <- "" - if$ % } - } % - while$ % if( s == "" ) - s empty$ % ; - 'skip$ % else - { pop$ s } % return s - if$ % -} - -% 将1st~10th单词形式的序数词转换成阿拉伯数字形式 -FUNCTION {word.to.num} { - duplicate$ "l" change.case$ - 's := % s <- lower( arg ) - s "first" = % if ( s == "first" ) - { pop$ "1" } % return "1" - { skip$ } - if$ - s "second" = % if ( s == "second" ) - { pop$ "2" } % return "2" - { skip$ } - if$ - s "third" = - { pop$ "3" } - { skip$ } - if$ - s "fourth" = - { pop$ "4" } - { skip$ } - if$ - s "fifth" = - { pop$ "5" } - { skip$ } - if$ - s "sixth" = - { pop$ "6" } - { skip$ } - if$ - s "seventh" = - { pop$ "7" } - { skip$ } - if$ - s "eighth" = - { pop$ "8" } - { skip$ } - if$ - s "ninth" = - { pop$ "9" } - { skip$ } - if$ - s "tenth" = - { pop$ "10" } - { skip$ } - if$ -} - -% 转换字符串形式的序数词为数字形式的序数词 -% 例如: 将 "Eleventh" 转换为 "11th" -FUNCTION {convert.edition} { - duplicate$ empty$ 'skip$ - { duplicate$ #1 #1 substring$ - is.num % if( is.num( arg[1] ) ) { - { extract.num % tmp <- extract.num( arg ) - num.to.ordinal % tmp <- num.to.ordinal( tmp ) - } % } else { - { word.to.num % tmp <- word.to.num( arg ) - duplicate$ #1 #1 substring$ - is.num % if( is.num( tmp[1] ) ) - { num.to.ordinal } % tmp <- num.to.ordinal( tmp ) - { "edition ordinal word " - quote$ * edition * quote$ * - " may be too high (or improper) for conversion" * - " in " * cite$ * warning$ % else output warning + '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 = + { punct.slash * write$ } + { add.period$ " " * write$ } + if$ + } + if$ } if$ + mid.sentence 'output.state := } if$ + s } if$ } -FUNCTION {start.entry} -{ newline$ - "\bibitem{" write$ - cite$ write$ - "}" write$ - newline$ - "" - before.all 'output.state := +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ } FUNCTION {fin.entry} { add.period$ - replace.half.width.period write$ newline$ } -% FUNCTION {fin.entry} -% { duplicate$ empty$ -% 'pop$ -% 'write$ -% if$ -% newline$ -% } - FUNCTION {new.block} { output.state before.all = 'skip$ - { after.block 'output.state := } + { output.state after.slash = + 'skip$ + { after.block 'output.state := } + if$ + } if$ } @@ -693,13 +199,42 @@ FUNCTION {new.sentence} { output.state after.block = 'skip$ { output.state before.all = - 'skip$ - { after.sentence 'output.state := } + 'skip$ + { output.state after.slash = + 'skip$ + { after.sentence 'output.state := } + if$ + } if$ } if$ } +FUNCTION {new.slash} +{ output.state before.all = + 'skip$ + { after.slash 'output.state := } + if$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + FUNCTION {new.block.checka} { empty$ 'skip$ @@ -742,325 +277,131 @@ FUNCTION {field.or.null} FUNCTION {emphasize} { duplicate$ empty$ { pop$ "" } - { "{\em " swap$ * "}" * } + { "\emph{" swap$ * "}" * } if$ } +FUNCTION {is.in.chinese} +{ lang lang.zh = +} - - - -FUNCTION {format.language} -{ language empty$ - 'skip$ - 'skip$ - if$ - } -FUNCTION {is.space} -{ chr.to.int$ - duplicate$ #32 = - { pop$ #1 } - { pop$ #0 } +FUNCTION {format.et.al} +{ is.in.chinese + { "等"} + { "et~al." } if$ } -FUNCTION {is.lower.char} -{ - chr.to.int$ - duplicate$ #96 > - { #123 < - { #1 } - { #0 } - if$ - } - { pop$ #0 } + +FUNCTION {format.anonymous} +{ is.in.chinese + { "佚名" } + { "Anon" } if$ } -% 将last name转换为全大写 -FUNCTION {capitalize.last.name} { - "u" change.case$ -} -% FUNCTION {capitalize.last.name} -% { -% 'thename := % 输入参数 thename -% thename text.length$ -% 'namelength := % namelength := thename 的长度 -% #1 'charptr := -% #0 'lastnamecapitalized := -% "" - -% { charptr #1 - namelength < -% % % debug -% % duplicate$ int.to.str$ "( charptr + #1 > namelength ) == " swap$ * warning$ -% % % eod -% } -% { -% % % debug -% % "charptr = " charptr int.to.str$ * -% % ", lastnamecapitalized = " * -% % lastnamecapitalized int.to.str$ * warning$ -% % % eod -% lastnamecapitalized #1 = -% { thename charptr namelength charptr - #1 + substring$ * -% namelength #1 + 'charptr := -% % % debug -% % duplicate$ "top of the stack = " swap$ * warning$ -% % % eod -% } -% { thename charptr #1 substring$ -% % % debug -% % duplicate$ "the char = " swap$ * warning$ -% % % eod -% duplicate$ is.lower.char -% % % debug -% % duplicate$ int.to.str$ "is.lower.char = " swap$ * warning$ -% % % eod -% { "u" change.case$ * } -% { duplicate$ is.space -% % % debug -% % duplicate$ int.to.str$ "is.space = " swap$ * warning$ -% % % eod -% { #1 'lastnamecapitalized := -% * -% } -% { * -% } -% if$ -% } -% if$ -% % % debug -% % duplicate$ "top of the stack = " swap$ * warning$ -% % % eod -% charptr #1 + 'charptr := -% } -% if$ -% } -% while$ -% } -% 格式化盲审姓名 -FUNCTION {format.names.for.peer.review} { - 's := % s := author域 - #1 'nameptr := % nameptr 是姓名指针,初始化为 1 - s num.names$ 'numnames := % 利用 num.names$ 获得 s 中的作者数量存入 nameptr - numnames 'namesleft := % 未处理的姓名数 namesleft := numnames - % 循环处理所有姓名 - { namesleft #0 > } % if namesleft > #0 (还有姓名没有格式化) - { s nameptr % 选择第 nameptr 个姓名 - name.format.string % 按 name.format.string 的格式排版 - format.name$ % 调用 format.name$ - remove.period % 并删除缩写符号'.' - 't := % 格式化后的姓名暂存于 t - language empty$ - { author.name.in.english }% 如果是英文文献将 author.name.in.english 压栈 - { author.name.in.chinese } % 否则将 author.name.in.chinese 压栈 - if$ - t = % 用当前的姓名与栈上的姓名做比较 - { nameptr int.to.str$ % 将作者序号转化为字符串 - "\CJKnumber{" swap$ * "}" * % 使用中文数字 - bbl.number swap$ * bbl.author * % 加上``第''和``作者'' -% duplicate$ debug.output - } - { skip$ } - if$ - nameptr #1 + 'nameptr := % 姓名指针加 1 - namesleft #1 - 'namesleft := % 剩余姓名数减 1 - } - while$ -} -% 格式化非盲审姓名 -FUNCTION {format.names.for.non.peer.review} { - % 初始化 - 's := % s := author域 - #1 'nameptr := % nameptr 是姓名指针,初始化为 1 - s num.names$ 'numnames := % 利用 num.names$ 获得 s 中的作者数量存入 nameptr - numnames 'namesleft := % 未处理的姓名数 namesleft := numnames - % 循环处理所有姓名 - { namesleft #0 > } % if namesleft > #0 (还有姓名没有格式化) - { s nameptr % 选择第 nameptr 个姓名 - name.format.string % 按 name.format.string 的格式排版 - format.name$ % 调用 format.name$ -% language empty$ -% { "u" change.case$ } % 如果不是语言为空, 做大写转换 -% { skip$ } -% if$ % - remove.period % 并删除缩写符号'.' - 't := % 格式化后的姓名暂存于 t - nameptr #1 > - { nameptr max.num.names.before.forced.et.al #1 + = - { "others" 't := % 如果当前作者的序数已经超出了最大列显作者数 - #1 'namesleft := } % 则置未处理姓名数为#1, 以便跳出循环 - { skip$ } % 如果作者序数在允许范围内, 则跳过 - if$ % - bbl.comma * % 添加逗号 - namesleft #1 > % 若当前姓名不是最后一个 - { t * } % 显示当前姓名 - { t "others" = % 若当前姓名是最后一个且后面有略去的姓名 - { bbl.etal * } % 添加", et~al"或",等" - { t * } % 如果没有略去姓名,以句点结束 - if$ % - } - if$ % - } - { t } % 如果是第一个作者, 直接将排版后的姓名压栈 - if$ - nameptr #1 + 'nameptr := % 姓名指针加 1 - namesleft #1 - 'namesleft := % 剩余姓名数减 1 - } +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > nameptr #4 < and } + { s nameptr "{vv~}{ll}{ f{ }}{ jj}" format.name$ 't := + nameptr #1 > + { namesleft #1 > + { ", " * t * } + { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ "others" = + { ", " * format.et.al * } + { ", " * t * } + if$ + } + if$ + nameptr #3 = namesleft #1 > and + { ", " * format.et.al * } + 'skip$ + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } while$ } -% 格式化姓名 -FUNCTION {format.names} { - is.for.peer.review - { format.names.for.peer.review } % 格式化盲审姓名 - { format.names.for.non.peer.review } % 格式化非盲审姓名 + +FUNCTION {format.key} +{ empty$ + { key field.or.null } + { "" } if$ } + FUNCTION {format.authors} { author empty$ - { bbl.anonymous - "The author in " cite$ * " is missing." * warning$ } + { "" } { author format.names } if$ } FUNCTION {format.editors} { editor empty$ - { bbl.anonymous - "The editor in " cite$ * " is missing." * warning$ - } - { editor format.names } - if$ -} - -FUNCTION {format.assignees} { - assignee empty$ { "" } - { assignee format.names } + { editor format.names } if$ } -% 译者格式 FUNCTION {format.translators} { translator empty$ - { "" } % 无译者 - { new.block % 有译者 - translator format.names ",译" * + { "" } + { translator format.names + is.in.chinese + { translator num.names$ #3 > + { "译" * } + { ", 译" * } + if$ + } + 'skip$ + if$ } if$ } -% 机构格式 -FUNCTION {format.institution} { - institution empty$ +FUNCTION {format.url} +{ url empty$ { "" } - { institution } + { new.block "\url{" url * "}" * } if$ } -% 组织格式 -FUNCTION {format.organization} { - organization empty$ - { "" } - { organization } - if$ -} - -% 文献类型标志代码/电子文献载体标志代码 -FUNCTION {bib.type.designator} { -% % DEBUG -% "bib.type.designator(type:" type$ * debug.output -% " url: " url empty$ { "" }{ url } if$ * debug.output -% % END OF DEBUG - - % 文献类型标志代码 - type$ "book" = type$ "inbook" = or - { "M" } - { type$ "standard" = - { "S" } - { type$ "proceedings" = type$ "conference" = or type$ "inproceedings" = or - { "C" } - { type$ "patent" = - { "P" } - { type$ "phdthesis" = type$ "mastersthesis" = or - { "D" } - { type$ "techreport" = - { "R" } - { type$ "article" = type$ "periodical" = or - { "J" } - { type$ "online" = type$ "webpage" = or type$ "www" = or - { "EB" } - { type$ "electronic" = - { esubtype empty$ - { url empty$ - { "" } - { "EB" } - if$ - } - { esubtype "webpage" = - { "EB" } - { esubtype "database" = - { "DB" } - { esubtype "program" = - { "CP" } - { "" } - if$ % electronics[program] - } - if$ % electronics[database] - } - if$ % electronics[webpage] - } - if$ - } - { "" } % 其他 - if$ % electronics - } - if$ % online/webpage/www - } - if$ % article/periodical - } - if$ % techreport - } - if$ % phdthesis/mastersthesis - } - if$ % patent - } - if$ % proceedings/inproceedings/conference - } - if$ % standard +FUNCTION {is.doi.in.url} +{ url empty$ + { #0 } + { doi text.length$ 'stringlength := + url text.length$ 'charptr := + { url charptr stringlength substring$ doi = not + charptr #0 > + and + } + { charptr #1 - 'charptr := } + while$ + charptr } - if$ % book/inbook -% % DEBUG -% duplicate$ " doc.designator: " swap$ * debug.output -% % END OF DEBUG - % 电子文献载体标志代码 - duplicate$ "" = - { skip$ } - { "~[" swap$ * - howpublished empty$ - { url empty$ - { "" } - { "/OL" } - if$ - } - { howpublished "online" = - { "/OL" } - { howpublished "magtype" = - { "MT" } - { howpublished "disk" = - { "DK" } - { howpublished "cdrom" = - { "CD" } - { "" } - if$ % cdrom - } - if$ % disk - } - if$ % magitude type - } - if$ % online - } - if$ - * "]" * + if$ +} + +FUNCTION {format.doi} + + { "" } + + +FUNCTION {add.link} +{ url empty$ not + { "\href{" url * "}{" * swap$ * "}" * } + { doi empty$ not + { "\href{http://dx.doi.org/" doi * "}{" * swap$ * "}" * } + 'skip$ + if$ } if$ } @@ -1068,333 +409,245 @@ FUNCTION {bib.type.designator} { FUNCTION {format.title} { title empty$ { "" } - { new.block - title } + { title "t" change.case$ add.link } if$ } -% 格式化年月日``YYYY-MM-DD'' -FUNCTION {format.year.month.day} { - year empty$ - { "YYYY" } - { year } - if$ - "-" * - month empty$ - { "MM" * } - { month text.length$ #2 < - { "0" * } - { skip$ } +FUNCTION {set.mark} +{ mark_ empty$ not + 'pop$ + { mark empty$ not + { pop$ mark 'mark_ := } + { 'mark_ := } if$ - month * - } - if$ - "-" * - day empty$ - { "DD" * } - { day text.length$ #2 < - { "0" * } - 'skip$ + media empty$ not + { mark_ "/" * media * 'mark_ := } + { url empty$ not + { mark_ "/OL" * 'mark_ := } + 'skip$ + if$ + } if$ - day * } if$ } -FUNCTION {format.reference.date} { - refdate empty$ - { "" - url empty$ - { skip$ } - { "The refdate in " cite$ * " is missing." * warning$ } - if$ - } - { output.state mid.sentence = - { before.all 'output.state := } - { skip$ } - if$ - "~[" refdate * "]" * } - if$ -} +FUNCTION {format.mark} +{ "\allowbreak[" mark_ * "]" * } -% patent的题名项: 专利题名: 专利国别, 专利号~[文献类型标志] -FUNCTION {format.patent.title} { - title empty$ % 专利提名 - { "" } - { new.block - title bbl.colon * - nationality empty$ % 专利国别, 专利号 - { % 专利国别为必备项 - "The nationality in " cite$ * " is missing." * warning$ - } - { number empty$ - { % 专利号为必选项 - "The number in " cite$ * " is missing." * warning$ - } - { % 产生``专利国别, 专利号'' - nationality * bbl.comma * number * - } - if$ - } +FUNCTION {format.full.names} +{'s := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}" format.name$ 't := + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et~al." * } + { " and " * t * } + if$ + } + if$ + } + 't if$ - % 文献类型标志 - bib.type.designator * + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := } - if$ + while$ } -% patent的出版项: -FUNCTION {format.patent.publication} { - new.block - format.year.month.day -% % DEBUG -% duplicate$ "End of format.patent.publication, top = " swap$ * debug.output -% % END OF DEBUG - url empty$ - { skip$ } - { refdate empty$ - { "The refdate in " cite$ * " is missing." * warning$ } - { "~[" * refdate * "]" * } +FUNCTION {author.editor.full} +{ author empty$ + { editor empty$ + { "" } + { editor format.full.names } if$ } + { author format.full.names } if$ } -% electronic的主要责任者: -% author 或 organization -FUNCTION {format.electronic.authors} -{ - author empty$ - { organization empty$ - { " " } - { organization } - if$ - } - { format.authors } +FUNCTION {author.full} +{ author empty$ + { "" } + { author format.full.names } if$ } -% electronic的出版项 -FUNCTION {format.electronic.publication} { - new.block - % 出版地: 出版者 - address empty$ +FUNCTION {editor.full} +{ editor empty$ { "" } - { address - publisher empty$ - { skip$ } - { bbl.colon * publisher * } - if$ - } - if$ - - % 出版年 - year empty$ - { skip$ } - { publisher empty$ - { "" } - { bbl.comma } - if$ - * year * } + { editor format.full.names } if$ } -%% article的标题格式 -FUNCTION {format.atitle} -{ title empty$ - { "" } - { title - newsletter empty$ - { "~[J" * } - { newsletter "yes" = - { "~[N" * } - { "~[J" * } - if$ - } - if$ - url empty$ - { "]" * } - { "/OL]" * } +FUNCTION {make.full.names} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.full + { type$ "proceedings" = + 'editor.full + 'author.full if$ } if$ } -%% incollection的标题格式 -FUNCTION {format.ictitle} -{ title empty$ - { "" } - { title "~[M]~//~" * - editor format.names * - } - if$ -} -%% inproceedings的标题格式 -FUNCTION {format.iptitle} -{ title empty$ - { "" } - { title "~[C]~//~" * - editor format.names * - } - if$ -} -FUNCTION {n.dashify} -{ 't := +FUNCTION {output.bibitem} +{ newline$ + "\bibitem[" write$ + label write$ + ")" make.full.names duplicate$ short.list = + { pop$ } + { * } + if$ + "]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + + +FUNCTION {n.dashify} +{ 't := "" { t empty$ not } { t #1 #1 substring$ "-" = - { t #1 #2 substring$ "--" = not - { "--" * - t #2 global.max$ substring$ 't := + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ } - { { t #1 #1 substring$ "-" = } - { "-" * + { t #1 #1 substring$ * t #2 global.max$ substring$ 't := } - while$ - } - if$ - } - { t #1 #1 substring$ * - t #2 global.max$ substring$ 't := - } if$ } while$ } -% 年,卷(期) -FUNCTION {format.year.volume.number} { - year empty$ - { "" } - { type$ "periodical" = - { new.block } - { mid.sentence 'output.state := } - if$ - year - volume empty$ - 'skip$ - { bbl.comma * volume * } - if$ - number empty$ - 'skip$ - { "~(" * number * ")" * } - if$ - year2 empty$ - { skip$ } - { "~--" * - year2 "now" = - { skip$ } - { year2 * - volume2 empty$ - { skip$ } - { bbl.comma * volume2 * } - if$ - number2 empty$ - 'skip$ - { "~(" * number2 * ")" * } - if$ - } - if$ - } +FUNCTION {format.date} +{ type$ "patent" = type$ "newspaper" = or + date empty$ not and + { date } + { year duplicate$ empty$ + { "empty year in " cite$ * warning$ + pop$ "" } + 'skip$ if$ + extra.label * } if$ -% %% DEBUG -% duplicate$ "format.year.volume.number=" swap$ * debug.output -% %% END OF DEBUG } -% -FUNCTION {format.date} -{ year empty$ - { month empty$ - { "" } - { "there's a month but no year in " cite$ * warning$ - month - } - if$ - } - { month empty$ - { year } - { month bbl.comma * year * } - if$ +FUNCTION {extract.before.dash} +{ duplicate$ empty$ + { pop$ "" } + { 's := + #1 'charptr := + s text.length$ #1 + 'stringlength := + { charptr stringlength < + s charptr #1 substring$ "-" = not + and + } + { charptr #1 + 'charptr := } + while$ + s #1 charptr #1 - substring$ } if$ } -function {format.year.year} -{ year empty$ - 'skip$ - { year "--" * - year2 empty$ - 'skip$ - { year2 "now" = - 'skip$ - { year2 * } - if$ - } - if$ + +FUNCTION {extract.after.dash} +{ duplicate$ empty$ + { pop$ "" } + { 's := + #1 'charptr := + s text.length$ #1 + 'stringlength := + { charptr stringlength < + s charptr #1 substring$ "-" = not + and + } + { charptr #1 + 'charptr := } + while$ + { charptr stringlength < + s charptr #1 substring$ "-" = + and + } + { charptr #1 + 'charptr := } + while$ + s charptr global.max$ substring$ } if$ } -% 专著标题格式 -FUNCTION {format.book.title} { - new.block % 生成一个新的block - title - type$ "proceedings" = - { address empty$ - { skip$ } - { bbl.comma * address * bbl.comma * - month empty$ - { skip$ } - { month * } - if$ - year empty$ - { skip$ } - { year * } - if$ - } - 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 } - { skip$ } if$ - bib.type.designator * % 标题 + [文献标志代码/电子文献载体标志代码] } -% 科技报告标题格式 -FUNCTION {format.techreport.title} { - title empty$ - { "" } - { new.block % 生成一个新的block - title % 标题 + - number empty$ % 编号 + - { "" } - { bbl.comma * number } - if$ * - bib.type.designator * % [文献标志代码/电子文献载体标志代码] +FUNCTION {format.year} +{ year empty$ not + { year } + { date empty$ not + { date extract.before.dash } + { "empty year in " cite$ * warning$ + "" } + if$ } if$ + extra.label * } -% 连续出版物标题格式 -FUNCTION {format.jtitle} -{ title "~[J" * - url empty$ - { "]" * } - { "/OL]" * } +FUNCTION {format.editdate} +{ date empty$ not + type$ "newspaper" = not and + url empty$ not doi empty$ not or + and + { "\allowbreak(" date * ")" * } + { "" } if$ } -% 论文集标题格式 -FUNCTION {format.ptitle.volume} -{ title - volume empty$ - { "~[C]" } - { bbl.colon volume * "~[C]" * } - if$ * - %emphasize +FUNCTION {format.urldate} + + { "" } + + +FUNCTION {format.btitle} +{ title emphasize } + FUNCTION {tie.or.space.connect} { duplicate$ text.length$ #3 < { "~" } @@ -1410,200 +663,289 @@ FUNCTION {either.or.check} if$ } -FUNCTION {format.bvolume} -{ volume empty$ - { "" } - { language empty$ - { "volume" volume tie.or.space.connect } - { volume } - if$ - series empty$ - 'skip$ - { " of " * series emphasize * } - if$ - "volume and number" number either.or.check +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 {format.number.series} -{ volume empty$ - { number empty$ - { series field.or.null } - { output.state mid.sentence = - { "number" } - { "Number" } - if$ - number tie.or.space.connect - series empty$ - { "there's a number but no series in " cite$ * warning$ } - { " in " * series * } - if$ +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$ + { "" } + { volume is.number + { is.in.chinese + { "第" volume * "卷" * } + { "volume" volume tie.or.space.connect } + if$ + } + { volume } if$ } - { "" } if$ } -% 版本项格式 -FUNCTION {format.edition} { - edition empty$ +FUNCTION {format.number} +{ number empty$ { "" } - { new.block % 版本项按一个block输出 - language empty$ % 英文文献版本号自动转换成数字形式的序数词 - { edition convert.edition - "l" change.case$ " ed" * - } - { edition } % 中文文献版本号直接输出 + { number is.number + { is.in.chinese + { "第" 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.url} -{ url empty$ - { "" } - { new.block - "\url{" url * "}" * +FUNCTION {format.series.vol.num.title} +{ format.volume.number 's := + series empty$ not + { series ": " * + s empty$ not + { s * "\quad " * } + 'skip$ + if$ + title * + } + { title + s empty$ not + { ": " * s * } + 'skip$ + if$ } if$ + "t" change.case$ add.link } -FUNCTION {multi.page.check} -{ 't := - #0 'multiresult := - { multiresult not - t empty$ not - and +FUNCTION {format.series.vol.num.booktitle} +{ format.volume.number 's := + series empty$ not + { series ": " * + s empty$ not + { s * "\quad " * } + 'skip$ + if$ + booktitle * } - { t #1 #1 substring$ - duplicate$ "-" = - swap$ duplicate$ "," = - swap$ "+" = - or or - { #1 'multiresult := } - { t #2 global.max$ substring$ 't := } + { booktitle + s empty$ not + { ": " * s * } + 'skip$ if$ } - while$ - multiresult + if$ } -FUNCTION {format.pages} -{ pages empty$ - { "" } - { before.pages 'output.state := - pages multi.page.check - { "" pages n.dashify tie.or.space.connect } - { "" pages tie.or.space.connect } +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.vol.num.pages} -{ volume field.or.null - number empty$ - 'skip$ - { "(" number * ")" * * - volume empty$ - { newsletter empty$ - { "there's a number but no volume in " cite$ * warning$ } - 'skip$ - if$ - } - 'skip$ +FUNCTION {format.edition} +{ edition empty$ + { "" } + { edition is.number + { is.in.chinese + { edition "版" * } + { edition num.to.ordinal " ed." * } + if$ + } + { lang lang.en = + { edition "t" change.case$ 's := + s "Revised" = s "Revised edition" = or + { "Rev. ed." } + { s " ed." *} + if$ + } + { edition } + if$ + } if$ } if$ - pages empty$ - 'skip$ - { duplicate$ empty$ - { pop$ format.pages } - { bbl.colon * pages n.dashify * } +} + +FUNCTION {format.sine.loco} +{ is.in.chinese + { "[出版地不详]" } + { "[S.l.]" } + if$ +} + +FUNCTION {format.address} +{ address } + +FUNCTION {format.sine.nomine} +{ is.in.chinese + { "[出版地不详]" } + { "[s.n.]" } + if$ +} + +FUNCTION {format.publisher} +{ publisher empty$ not + { publisher } + { school empty$ not + { school } + { organization empty$ not + { organization } + { institution empty$ not + { institution } + { "" } + if$ + } + if$ + } if$ } if$ - % duplicate$ "top of stack = " swap$ * warning$ - url empty$ - 'skip$ - { refdate empty$ - { "there's an url but no refdate in " cite$ * warning$ } - { %duplicate$ "url and refdate is not empty, top of stack = " swap$ * warning$ - "~[" * refdate * "]" * - } +} + +FUNCTION {format.sine.loco.sine.nomine} +{ is.in.chinese + { "[出版地不详: 出版者不详]" } + { "[S.l.: s.n.]" } + if$ +} + +FUNCTION {format.address.publisher} +{ address empty$ not + { address + format.publisher empty$ not + { ": " * format.publisher * } + { url empty$ doi empty$ and + { ": " * format.sine.nomine * } + 'skip$ + if$ + } + if$ + } + { url empty$ doi empty$ and + { format.publisher empty$ not + { format.sine.loco ": " * format.publisher * } + { format.sine.loco.sine.nomine } + if$ + } + { format.publisher empty$ not + { format.publisher } + { "" } + if$ + } if$ - %duplicate$ "top of stack = " swap$ * warning$ } if$ } -FUNCTION {format.chapter.pages} -{ chapter empty$ +FUNCTION {format.pages} +{ pages empty$ { "" } - { type empty$ - { "chapter" } - { type "l" change.case$ } - if$ - chapter tie.or.space.connect - pages empty$ - 'skip$ - { ", " * format.pages * } - if$ - } + { pages n.dashify } if$ } -FUNCTION {format.in.booktitle} -{ booktitle empty$ +FUNCTION {format.journal.volume} +{ volume } + +FUNCTION {format.journal.number} +{ number empty$ not + { "\penalty0 (" number * ")" * } { "" } - { editor empty$ - { language empty$ - { " " booktitle * } - % { "Proceedings of " booktitle * } - { " " booktitle * } - if$ - } - { language empty$ -% { "In: " format.editors * ", Proceedings of " * booktitle * } - { " " booktitle * } - { " " booktitle * } - if$ - } + if$ +} + +FUNCTION {format.periodical.year.volume.number} +{ year empty$ not + { year extract.before.dash } + { "No 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 {format.in.ed.booktitle.volume} +FUNCTION {format.in.ed.booktitle} { booktitle empty$ { "" } { editor empty$ - { language empty$ -% { "Proceedings of " booktitle * } - { " " booktitle * } - { " " booktitle * } - if$ - } - { language empty$ - %{ "In: " format.editors * ", Proceedings of " * booktitle * } - { " " booktitle * } - { " " booktitle * } - if$ - } - if$ - %% volume - volume empty$ - 'skip$ - { language empty$ - { "Vol." * volume * } - { ":第" * volume * "卷" * } - if$ - } + { "In " booktitle emphasize * } + { "In " format.editors * ", " * booktitle emphasize * } if$ - } + } if$ } @@ -1611,61 +953,25 @@ FUNCTION {empty.misc.check} { author empty$ title empty$ howpublished empty$ month empty$ year empty$ note empty$ and and and and and + key empty$ not and { "all relevant fields are empty in " cite$ * warning$ } 'skip$ if$ } -FUNCTION {format.thesis.type} -{ type empty$ - 'skip$ - { pop$ - type "t" change.case$ - } - if$ -} - -FUNCTION {format.tr.number} -{ type empty$ - { "Technical Report" } - 'type - if$ - number empty$ - { "t" change.case$ } - { number tie.or.space.connect } - if$ -} - FUNCTION {format.article.crossref} { key empty$ { journal empty$ - { "need key or journal for " cite$ * " to crossref " * crossref * - warning$ - "" - } - { "In {\em " journal * "\/}" * } - if$ - } - { "In " key * } - if$ - " \cite{" * crossref * "}" * -} - -FUNCTION {format.crossref.editor} -{ editor #1 "{ll }{f{~}}" format.name$ - editor num.names$ duplicate$ - #2 > - { pop$ " et~al." * } - { #2 < - 'skip$ - { editor #2 "{ll }{f{~}}" format.name$ "others" = - { " et~al." * } - { " and " * editor #2 "{ll }{f{~}}" format.name$ * } - if$ - } + { "need key or journal for " cite$ * " to crossref " * crossref * + warning$ + "" + } + { "In \emph{" journal * "}" * } if$ } + { "In " } if$ + " \citet{" * crossref * "}" * } FUNCTION {format.book.crossref} @@ -1681,20 +987,20 @@ FUNCTION {format.book.crossref} editor field.or.null author field.or.null = or { key empty$ - { series empty$ + { series empty$ { "need editor, key, or series for " cite$ * " to crossref " * crossref * warning$ "" * } - { "{\em " * series * "\/}" * } - if$ - } - { key * } + { "\emph{" * series * "}" * } + if$ + } + 'skip$ if$ } - { format.crossref.editor * } + 'skip$ if$ - " \cite{" * crossref * "}" * + " \citet{" * crossref * "}" * } FUNCTION {format.incoll.inproc.crossref} @@ -1702,844 +1008,615 @@ FUNCTION {format.incoll.inproc.crossref} editor field.or.null author field.or.null = or { key empty$ - { booktitle empty$ - { "need editor, key, or booktitle for " cite$ * " to crossref " * - crossref * warning$ - "" + { booktitle empty$ + { "need editor, key, or booktitle for " cite$ * " to crossref " * + crossref * warning$ + "" + } + { "In \emph{" booktitle * "}" * } + if$ } - { "In {\em " booktitle * "\/}" * } - if$ - } - { "In " key * } + { "In " } if$ } - { "In " format.crossref.editor * } + { "In " } if$ - " \cite{" * crossref * "}" * + " \citet{" * crossref * "}" * } -% 出版地: 出版者 -FUNCTION {format.address.publisher} { - new.block - type$ "inproceedings" = - { pubaddress empty$ - { "[" bbl.sine.loco * "]" * bbl.colon * % 无出版地 - publisher empty$ - { "there's neither pubaddress nor publisher in " cite$ * warning$ - "[" * bbl.sine.nomine * "]" * % 无出版者 - } - { "there's a publisher but no pubaddress in " cite$ * warning$ - publisher * % 有出版者 - } - if$ - } - { pubaddress bbl.colon * % 有出版地 - publisher empty$ - { "there's a pubaddress but no publisher in " cite$ * warning$ - "[" * bbl.sine.nomine * "]" * % 无出版者 - } - { publisher * } % 有出版者 - if$ - } - if$ - } - { address empty$ - { "[" bbl.sine.loco * "]" * bbl.colon * % 无出版地 - publisher empty$ - { "there's neither address nor publisher in " cite$ * warning$ - "[" * bbl.sine.nomine * "]" * % 无出版者 - } - { "there's a publisher but no address in " cite$ * warning$ - publisher * % 有出版者 - } - if$ - } - { address bbl.colon * % 有出版地 - publisher empty$ - { "there's a address but no publisher in " cite$ * warning$ - "[" * bbl.sine.nomine * "]" * % 无出版者 - } - { publisher * } % 有出版者 - if$ - } +FUNCTION {monograph} +{ output.bibitem + author empty$ not + { format.authors } + { editor empty$ not + { format.editors } + { "" } if$ } if$ + output + new.block + format.series.vol.num.title "title" output.check + "M" set.mark + format.mark "" output.after + new.block + format.translators output + new.sentence + format.edition output + new.block + format.address.publisher output + format.date "year" output.check + format.pages punct.colon output.after + format.urldate "" output.after + format.url output + format.doi output + fin.entry } -% 出版地: 出版者, 出版年 -FUNCTION {format.address.publisher.year} { -% % DEBUG -% "-- format.address.publisher.year(){" debug.output -% "-- address =" address * debug.output -% "-- publisher=" publisher * debug.output -% "-- year =" year * debug.output -% % END OF DEBUG +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + author format.key output new.block - type$ "inproceedings" = - { pubaddress empty$ - { "" % "[" bbl.sine.loco * "]" * bbl.colon * % 无出版地 - publisher empty$ - { "there's neither pubaddress nor publisher in " cite$ * warning$ - "" * % "[" * bbl.sine.nomine * "]" * % 无出版者 - } - { "there's a publisher but no pubaddress in " cite$ * warning$ - publisher * % 有出版者 - } - if$ - } - { publisher empty$ - { "there's a pubaddress but no publisher in " cite$ * warning$ - "" % "[" * bbl.sine.nomine * "]" * % 无出版者 - } - { pubaddress bbl.colon * % 有出版地 - publisher * } % 有出版者 - if$ - } - if$ - } - { address empty$ - { "" % "[" bbl.sine.loco * "]" * bbl.colon * % 无出版地 - publisher empty$ - { "there's neither address nor publisher in " cite$ * warning$ - "" * % "[" * bbl.sine.nomine * "]" * % 无出版者 - } - { "there's a publisher but no address in " cite$ * warning$ - publisher * % 有出版者 - } - if$ - } - { publisher empty$ - { "there's a address but no publisher in " cite$ * warning$ - "" % "[" * bbl.sine.nomine * "]" * % 无出版者 - } - { address bbl.colon * % 有出版地 - publisher * } % 有出版者 - if$ - } - if$ - } - if$ - - % 出版年 - year empty$ - { "there's no year in " cite$ * warning$ } - { type$ "inproceedings" = - { bbl.comma * year * } - { publisher empty$ - { year * } - { bbl.comma * year * } - if$ - } - if$ - - type$ "periodical" = - { year2 empty$ % 对连续出版物可以排版 year2 - { skip$ } - { "--" * - year2 "l" change.case$ "now" = - { skip$ } - { year2 * } - if$ - } - if$ - } - { skip$ } - if$ - } - if$ -% % DEBUG -% duplicate$ "-- }=" swap$ * debug.output -% % END OF DEBUG + format.title "title" output.check + "M" set.mark + format.mark "" output.after + new.block + format.translators output + new.block + 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.date "year" output.check + format.pages punct.colon output.after + format.urldate "" output.after + format.url output + format.doi output + fin.entry } -% 出版地: 学校, 出版年 -FUNCTION {format.address.school.year} { +FUNCTION {periodical} +{ output.bibitem + format.authors "author" output.check + author format.key output new.block - address empty$ - { "[" bbl.sine.loco * "]" * bbl.colon * % 无出版地 - school empty$ - { "there's neither address nor school in " cite$ * warning$ - "[" bbl.sine.nomine * "]" * % 无出版者 - } - { "there's a school but no address in " cite$ * warning$ - school * % 有出版者 - } - if$ - } - { address bbl.colon * % 有出版地 - school empty$ - { "there's a address but no school in " cite$ * warning$ - "[" bbl.sine.nomine * "]" * % 无出版者 - } - { school * } % 有出版者 - if$ - } - if$ - % 出版年 - year empty$ - { "there's no year in " cite$ * warning$ } - { bbl.comma * year * } - if$ -} - - -% FUNCTION {format.title.type} -% { title empty$ -% { type empty$ -% { "" } -% { "there's a type but no title in " cite$ * warning$ -% type -% } -% if$ -% } -% { type empty$ -% 'title -% { title bbl.colon * type * } -% if$ -% } -% if$ -% } - -FUNCTION {format.note} { - note empty$ - { new.block "" } - { url empty$ - { new.block } - { before.all 'output.state := } - if$ - note } - if$ + format.title "title" output.check + "J" set.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 + fin.entry } -%%%%%%%%%%%%%%%%% -%% 著录格式: 专著 -%%%%%%%%%%%%%%%%% - -% 普通图书 -FUNCTION {book} { - start.entry % 开始 - - author empty$ % 主要责任者 - { format.editors "author and editor" output.warn } - { format.authors output.nonnull } - if$ - format.book.title "title" output.warn % 题名项 - format.translators output % 其他责任者(可选) - format.edition output % 版本项 - format.address.publisher.year output.nonnull % - format.reference.date output % - format.url output % 获取或访问路径 - format.note output % 备注 - +FUNCTION {article.in.journal} +{ output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.title "title" output.check + "J" set.mark + format.mark "" output.after + new.block + journal "journal" output.check + format.date "year" output.check + volume output + format.journal.number "" output.after + format.pages punct.colon output.after + format.editdate "" output.after + format.urldate "" output.after + format.url output + format.doi output fin.entry } -% 标准 -FUNCTION {standard} { - start.entry - - organization empty$ % 主要责任人 - { format.institution "organization and institution" output.warn } - { format.organization output.nonnull } +FUNCTION {patent} +{ output.bibitem + format.authors output + author format.key output + new.block + format.title + number empty$ not + { punct.colon * number * } + 'skip$ if$ - format.book.title "title" output.warn % 题名项 - format.translators output % 其他责任人 - format.edition output % 版本项 - format.address.publisher.year output.nonnull % 出版项 - format.url output % URL - format.note output % 备注项 - + "title" output.check + "P" set.mark + format.mark "" output.after + new.block + format.date "year" output.check + format.urldate "" output.after + format.url output + format.doi output fin.entry } -% 学位论文 -FUNCTION {phdthesis} { - start.entry - - format.authors "author" output.warn - format.book.title "title" output.warn - format.address.school.year output - format.note output - +FUNCTION {online} +{ output.bibitem + format.authors output + author format.key output + new.block + format.series.vol.num.title "title" output.check + "EB" set.mark + format.mark "" output.after + new.block + format.address.publisher output + date empty$ + { format.date output } + 'skip$ + if$ + format.pages punct.colon output.after + format.editdate "" output.after + format.urldate "" output.after + format.url output + format.doi output fin.entry } -% 会议录/论文集 -FUNCTION {proceedings} { - start.entry - - editor empty$ - { organization empty$ - { format.institution "author, organization institution" output.warn } - { format.organization output.nonnull } +FUNCTION {misc} +{ journal empty$ not + { article.in.journal } + { booktitle empty$ not + { incollection } + { url empty$ not + { online } + { monograph } + if$ + } if$ } - { format.editors output.nonnull } if$ - format.book.title "title" output.warn - format.address.publisher.year output - format.note output +} - fin.entry +FUNCTION {archive} +{ "A" set.mark + misc } -% 科技报告 -FUNCTION {techreport} { - start.entry - - author empty$ - { organization empty$ - { format.institution - "author, organization and institution" output.warn } - { format.organization output.nonnull } - if$ - } - { format.authors output.nonnull } - if$ - format.techreport.title "title" output.warn - format.address.publisher.year output.nonnull - format.url output - format.note output +FUNCTION {article} { misc } - fin.entry -} +FUNCTION {book} { monograph } -%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% 著录格式: 专著中析出的文献 -%%%%%%%%%%%%%%%%%%%%%%%%%%%% +FUNCTION {collection} +{ "G" set.mark + monograph } -FUNCTION {format.collection.editors} { - booktitle empty$ - { "" } - { after.title 'output.state := - format.editors } - if$ -} -FUNCTION {format.address} { - booktitle empty$ - { new.block } - { mid.sentence 'output.state := } - if$ - address empty$ - { "" } - { address } - if$ +FUNCTION {database} +{ "DB" set.mark + misc } -FUNCTION {format.month.year} { - month empty$ - { "" } - { month " " * } - if$ - year empty$ - { "There is month but no year in " cite$ * warning$ } - { year * } - if$ +FUNCTION {dataset} +{ "DS" set.mark + misc } -FUNCTION {format.collection.title} { - booktitle empty$ - { "" } - { new.block - "In " booktitle * -% address empty$ -% { skip$ } -% { bbl.comma * address * bbl.comma * -% month empty$ -% { skip$ } -% { month * } -% if$ -% year empty$ -% { skip$ } -% { " " * year * } -% if$ -% } -% if$ - } - if$ +FUNCTION {inbook} { book } + +FUNCTION {inproceedings} +{ "C" set.mark + incollection } -% 图书中析出的文献 -FUNCTION {inbook} { - start.entry - - author empty$ - { format.editors "author and editor" output.warn } - { format.authors output.nonnull } - if$ - format.book.title "title" output.warn - format.collection.editors "editor" output.warn - format.collection.title "booktitle" output.warn - format.translators output % 其他责任人 - format.edition output % 版本项 - format.address.publisher.year output.nonnull % 出版项 - format.pages "pages" output.warn % - format.url output % URL - format.note output % 备注项 - fin.entry +FUNCTION {conference} { inproceedings } + +FUNCTION {map} +{ "CM" set.mark + misc } -%%%%%%%%%%%%%%%%% -%% 著录格式: 专利 -%%%%%%%%%%%%%%%%% -FUNCTION {patent} { - start.entry - - author empty$ - { format.assignees "assignee" output.warn } - { format.authors output.nonnull } - if$ - format.patent.title "title" output.warn - format.patent.publication output - format.url output - format.note output - - fin.entry +FUNCTION {mastersthesis} +{ "D" set.mark + monograph } -% 电子文献更新或修改日期 -FUNCTION {format.update.date} { - update empty$ - { "" } - { output.state mid.sentence = - { before.all 'output.state := } - { skip$ } - if$ - "~(" update * ")" * } - if$ +FUNCTION {newspaper} +{ "N" set.mark + article.in.journal } -%%%%%%%%%%%%%%%%%%%%% -%% 著录格式: 电子文献 -%%%%%%%%%%%%%%%%%%%%% -FUNCTION {electronic} { - start.entry - - author empty$ - { organization "author and organization" output.warn } - { format.authors output.nonnull } - if$ - format.book.title output - format.electronic.publication output - format.update.date output - format.reference.date output - format.url output - format.note output +FUNCTION {phdthesis} { mastersthesis } - fin.entry +FUNCTION {proceedings} +{ "C" set.mark + monograph } -%%%%%%%%%%%%%%%%%%%%%%% -%% 著录格式: 连续出版物 -%%%%%%%%%%%%%%%%%%%%%%% -FUNCTION {periodical} { - start.entry - - editor empty$ - { format.organization "editors and organization" output.warn } - { format.editors output.nonnull } - if$ - format.book.title "title" output.warn - format.year.volume.number output - format.address.publisher.year output - format.url output - format.note output +FUNCTION {program} +{ "CP" set.mark + misc +} - fin.entry +FUNCTION {standard} +{ "S" set.mark + misc } -FUNCTION {format.journal.title} { - journal empty$ - { "" } - { new.block journal } - if$ +FUNCTION {techreport} +{ "R" set.mark + misc } -% 连续出版物中析出的文献 -FUNCTION {article} -{ start.entry +FUNCTION {default.type} { misc } - format.authors "author" output.warn - format.book.title "title" output.warn - format.journal.title "journal" output.warn - format.year.volume.number output - format.pages "pages" output.warn - format.reference.date output - format.url output - format.note output - - fin.entry -} +MACRO {jan} {"January"} -FUNCTION {booklet} -{ start.entry - format.authors output - new.block - format.title "title" output.warn - howpublished address new.block.checkb - howpublished output - address output - format.date output - new.block - note output - fin.entry +MACRO {feb} {"February"} + +MACRO {mar} {"March"} + +MACRO {apr} {"April"} + +MACRO {may} {"May"} + +MACRO {jun} {"June"} + +MACRO {jul} {"July"} + +MACRO {aug} {"August"} + +MACRO {sep} {"September"} + +MACRO {oct} {"October"} + +MACRO {nov} {"November"} + +MACRO {dec} {"December"} + +MACRO {acmcs} {"ACM Computing Surveys"} + +MACRO {acta} {"Acta Informatica"} + +MACRO {cacm} {"Communications of the ACM"} + +MACRO {ibmjrd} {"IBM Journal of Research and Development"} + +MACRO {ibmsj} {"IBM Systems Journal"} + +MACRO {ieeese} {"IEEE Transactions on Software Engineering"} + +MACRO {ieeetc} {"IEEE Transactions on Computers"} + +MACRO {ieeetcad} + {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} + +MACRO {ipl} {"Information Processing Letters"} + +MACRO {jacm} {"Journal of the ACM"} + +MACRO {jcss} {"Journal of Computer and System Sciences"} + +MACRO {scp} {"Science of Computer Programming"} + +MACRO {sicomp} {"SIAM Journal on Computing"} + +MACRO {tocs} {"ACM Transactions on Computer Systems"} + +MACRO {tods} {"ACM Transactions on Database Systems"} + +MACRO {tog} {"ACM Transactions on Graphics"} + +MACRO {toms} {"ACM Transactions on Mathematical Software"} + +MACRO {toois} {"ACM Transactions on Office Information Systems"} + +MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} + +MACRO {tcs} {"Theoretical Computer Science"} + +READ + +EXECUTE {init.state.consts} + +INTEGERS { ascii } + +FUNCTION {char.lang} +{ chr.to.int$ 'ascii := + ascii #31 > ascii #128 < and + { lang.en } + { ascii #227 > ascii #234 < and + { lang.zh } + { ascii #227 = + { lang.ja } + { ascii #207 > ascii #212 < and + { lang.ru } + { lang.default } + if$ + } + if$ + } + if$ + } + if$ } -FUNCTION {incollection} -{ start.entry - format.authors "author" output.warn - new.block - format.ictitle "title" output.warn - new.block - crossref missing$ - { %format.in.ed.booktitle "booktitle" output.warn - %format.bvolume output - format.in.ed.booktitle.volume "booktitle" output.warn - format.number.series output - format.chapter.pages output - new.sentence -% publisher "publisher" output.warn -% address output - format.address.publisher.year output - format.edition output - format.date ":" * format.pages * output - %format.date "year" output.warn +FUNCTION {set.language} +{ language empty$ + { lang.default 'lang := + author field.or.null title field.or.null * 's := + s empty$ + 'skip$ + { #1 'charptr := + s text.length$ #1 + 'stringlength := + { charptr stringlength < } + { s charptr #1 substring$ char.lang + duplicate$ #3 > + { charptr #2 + 'charptr := } + 'skip$ + if$ + duplicate$ lang > + { 'lang := } + 'pop$ + if$ + charptr #1 + 'charptr := + } + while$ + } + if$ } - { format.incoll.inproc.crossref output.nonnull - format.chapter.pages output + { language "en" = + { lang.en } + { language "zh" = + { lang.zh } + { language "ja" = + { lang.ja } + { language "ru" = + { lang.ru } + { lang.default } + if$ + } + if$ + } + if$ + } + if$ + 'lang := } if$ - new.block - note output - fin.entry } -% 论文集中析出的文献 -FUNCTION {inproceedings} { - start.entry - - format.authors "author" output.warn - format.book.title "title" output.warn - format.collection.editors "editor" output.warn - format.collection.title "booktitle" output.warn - format.address output - format.month.year output -% format.address.publisher.year output.nonnull % 出版项 - format.pages "pages" output.warn % - format.url output % URL - format.note output % 备注项 -% format.in.booktitle "booktitle" output.warn -% %format.bvolume output -% %format.number.series output -% %format.pages output -% address empty$ -% { organization publisher new.sentence.checkb -% organization output -% publisher output -% %format.date "year" output.warn -% %year output -% format.date ":" * format.pages * output -% } -% { %address output.nonnull -% format.address.publisher.year output -% %format.date "year" output.warn -% % year output -% format.date ":" * format.pages * output -% new.sentence -% organization output -% %publisher output -% } -% if$ -% new.block - % pages output - %remove.dots - -% { format.incoll.inproc.crossref output.nonnull -% format.pages output -% } -% if$ -% new.block -% note output - fin.entry +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +INTEGERS { len } + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ } -FUNCTION {manual} -{ start.entry - author empty$ - { organization empty$ +FUNCTION {format.lab.names} +{ 's := + s #1 "{vv~}{ll}" format.name$ + s num.names$ #1 > + { "\ " * format.et.al * } 'skip$ - { organization output.nonnull - address output + 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$ } - { format.authors output.nonnull } + { author format.lab.names } if$ - new.block - format.book.title "title" output.warn - author empty$ - { organization empty$ - { address new.block.checka - address output +} + +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$ } - 'skip$ + { 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$ } - { organization address new.block.checkb - organization output - address output + { editor format.lab.names } + if$ +} + +FUNCTION {calc.short.authors} +{ type$ "book" = + type$ "inbook" = + or + type$ "collection" = + or + 'author.editor.key.label + { type$ "proceedings" = + { editor empty$ not + 'editor.key.organization.label + 'author.key.organization.label + if$ + } + 'author.key.label + if$ } if$ - format.edition output - format.date output - new.block - note output - fin.entry + 'short.list := } -% FUNCTION {masterthesis.type} -% { "~[D]" -% % language empty$ -% % { "[Master Thesis]" } -% % { "[硕士学位论文]" } -% % if$ -% } - -% FUNCTION {mastersthesis} -% { start.entry -% format.authors "author" add.period$ output.warn -% new.block -% format.title remove.dots " " * masterthesis.type * output -% new.block -% format.address.school output -% %address output -% %school "school" output.warn -% format.date "year" output.warn -% new.block -% note output -% fin.entry -% } +FUNCTION {calc.label} +{ calc.short.authors + short.list + "(" + * + year duplicate$ empty$ + short.list key field.or.null = or + { pop$ + urldate empty$ not + { urldate extract.before.dash } + { "" } + if$ + } + 'extract.before.dash + if$ + * + 'label := +} -FUNCTION {misc} -{ start.entry +INTEGERS { seq.num } - format.authors output -% title howpublished new.block.checkb - format.title output -% howpublished new.block.checka -% howpublished output -% format.date output - format.address output - format.month.year output - format.pages "pages" output.warn - format.url output -% new.block - format.note output - fin.entry -% empty.misc.check +FUNCTION {init.seq} +{ #0 'seq.num :=} + +EXECUTE {init.seq} + +FUNCTION {int.to.fix} +{ "000000000" swap$ int.to.str$ * + #-1 #10 substring$ } -FUNCTION {phdthesis.type} -{ "~[D]" -% language empty$ -% { "[PhD Thesis]" } -% { "[博士学位论文]" } -% if$ +FUNCTION {presort} +{ set.language + calc.label + label sortify + " " + * + seq.num #1 + 'seq.num := + seq.num int.to.fix + 'sort.label := + sort.label * + #1 entry.max$ substring$ + 'sort.key$ := } +ITERATE {presort} +SORT +STRINGS { longest.label last.label next.extra } -FUNCTION {unpublished} -{ start.entry - format.authors "author" output.warn - new.block - format.title "title" output.warn - new.block - note "note" output.warn - format.date output - fin.entry +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 := } -% 专用控制条目 BUPTThesisBSTCTL 用于提供方便的用户设置接口 -FUNCTION {BUPTThesisBSTCTL}{ - is.print.banners.to.terminal - { "** BUPTThesis BST control entry " quote$ * cite$ * - quote$ * " detected." * - top$ - } - { skip$ } - if$ -% CTLuse_article_number -% empty$ -% { skip$ } -% { CTLuse_article_number -% yes.no.to.int -% 'is.use.number.for.article := -% } -% if$ -% CTLuse_paper -% empty$ -% { skip$ } -% { CTLuse_paper -% yes.no.to.int -% 'is.use.paper := -% } -% if$ -% CTLuse_forced_etal -% empty$ -% { skip$ } -% { CTLuse_forced_etal -% yes.no.to.int -% 'is.forced.et.al := -% } -% if$ - % 显示作者数目 - CTLmax_names_forced_etal - empty$ - { skip$ } - { CTLmax_names_forced_etal - string.to.integer - 'max.num.names.before.forced.et.al := +FUNCTION {forward.pass} +{ last.label label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := } - if$ - % 论文作者英文姓名 - CTLauthor_name_english - empty$ - { skip$ } - { CTLauthor_name_english - 'author.name.in.english := - % #1 'is.for.peer.review := -% "CTLauthor_name_english=" author.name.in.english * debug.output + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := } if$ - % 论文作者中文姓名 - CTLauthor_name_chinese - empty$ - { skip$ } - { CTLauthor_name_chinese - 'author.name.in.chinese := - % #1 'is.for.peer.review := -% "CTLauthor_name_chinese=" author.name.in.chinese * debug.output - } - if$ - CTLfor_peer_review - empty$ - { skip$ } - { CTLfor_peer_review - yes.no.to.int - 'is.for.peer.review := - } + number.label #1 + 'number.label := +} + +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ if$ -% CTLnames_show_etal -% empty$ -% { skip$ } -% { CTLnames_show_etal -% string.to.integer -% 'num.names.shown.with.forced.et.al := -% } -% if$ -% CTLuse_alt_spacing -% empty$ -% { skip$ } -% { CTLuse_alt_spacing -% yes.no.to.int -% 'is.use.alt.interword.spacing := -% } -% if$ -% CTLalt_stretch_factor -% empty$ -% { skip$ } -% { CTLalt_stretch_factor -% 'ALTinterwordstretchfactor := -% "\renewcommand{\BIBentryALTinterwordstretchfactor}{" -% ALTinterwordstretchfactor * "}" * -% write$ newline$ -% } -% if$ -% CTLdash_repeated_names -% empty$ -% { skip$ } -% { CTLdash_repeated_names -% yes.no.to.int -% 'is.dash.repeated.names := -% } -% if$ -% CTLname_emph_author_en % 强调显示的作者英文姓名 -% empty$ -% { skip$ } % 若没有给出则跳过 -% { CTLname_emph_author_en -% 'name.emph.author.en := % 否则更新 name.emph.author.en -% } -% if$ -% CTLname_emph_author_zh % 强调显示的作者中文姓名 -% empty$ -% { skip$ } % 若没有给出则跳过 -% { CTLname_emph_author_zh -% 'name.emph.author.zh := % 否则更新 name.emph.author.zh -% } -% if$ - CTLname_format_string % 英文姓名排版格式字符串 - empty$ - { skip$ } % 若没有自定义则跳过 - { CTLname_format_string % 否则更新 name.format.string - 'name.format.string := - } + extra.label 'next.extra := + extra.label + duplicate$ empty$ + 'skip$ + { "{\natexlab{" swap$ * "}}" * } if$ -% CTLname_latex_cmd -% empty$ -% { skip$ } -% { CTLname_latex_cmd -% 'name.latex.cmd := -% } -% if$ -% CTLname_url_prefix -% missing$ -% { skip$ } -% { CTLname_url_prefix -% 'name.url.prefix := -% } -% if$ - - -% num.names.shown.with.forced.et.al max.num.names.before.forced.et.al > -% { "CTLnames_show_etal cannot be greater than CTLmax_names_forced_etal in " cite$ * warning$ -% max.num.names.before.forced.et.al 'num.names.shown.with.forced.et.al := -% } -% { skip$ } -% if$ -} - -%%%%%%%%%%%% -%% 条目别名 -%%%%%%%%%%%% -FUNCTION {mastersthesis} {phdthesis} -FUNCTION {conference} {inproceedings} -FUNCTION {online} {electronic} -FUNCTION {internet} {electronic} -FUNCTION {webpage} {electronic} -FUNCTION {www} {electronic} -FUNCTION {default.type} {misc} - - -%%%%%%%%%% -%% 主程序 -%%%%%%%%%% + 'extra.label := + label extra.label * 'label := +} -READ +EXECUTE {initialize.longest.label} + +ITERATE {forward.pass} -EXECUTE {initialize.controls} % 初始化控制变量 -EXECUTE {initialize.status.constants} % 初始化状态常量 -EXECUTE {banner.message} % 显示初始提示信息 +REVERSE {reverse.pass} + +FUNCTION {bib.sort.order} +{ sort.label 'sort.key$ := +} -EXECUTE {initialize.longest.label} % 初始化最长的标号 -ITERATE {longest.label.pass} % 处理最长的标号 +ITERATE {bib.sort.order} -EXECUTE {begin.bib} % 开始 -ITERATE {call.type$} % -EXECUTE {end.bib} % 结束 +SORT -EXECUTE {completed.message} % 显示完成提示信息 +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$ + "\providecommand{\href}[2]{#2}" + write$ newline$ + "\providecommand{\doi}[1]{DOI: \href{http://dx.doi.org/#1}{#1}}" + write$ newline$ + "\expandafter\ifx\csname urlstyle\endcsname\relax\relax\else" + write$ newline$ + " \urlstyle{same}\fi" + write$ newline$ +} + +EXECUTE {begin.bib} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} -%% EOF +EXECUTE {end.bib}