|
@@ -0,0 +1,2542 @@
|
|
|
|
+%% BUPTThesis.bst
|
|
|
|
+%%
|
|
|
|
+%% 北京邮电大学研究生学位论文参考文献 BibTeX 样式
|
|
|
|
+%%
|
|
|
|
+%% 项目主页:http://code.google.com/p/buptthesis/
|
|
|
|
+%%
|
|
|
|
+%% 本样式基于 IEEEtran 和 ThuThesis 修改而成,基本满足北京邮电大学研究生论文格式要求
|
|
|
|
+%%
|
|
|
|
+%% 作者:
|
|
|
|
+%% 张煜 (email:dazzlezhang@gmail.com)
|
|
|
|
+%%
|
|
|
|
+%% 更新记录:
|
|
|
|
+%% $LastChangedBy$
|
|
|
|
+%% $LastChangedDate$
|
|
|
|
+%% $LastChangedRevision$
|
|
|
|
+
|
|
|
|
+%% 一些设置的缺省值
|
|
|
|
+% 英文姓名排版格式字符串, 按<last name全称>~<first name首字母><, 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 % 是否匿名
|
|
|
|
+ }
|
|
|
|
+ {}
|
|
|
|
+ { 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$
|
|
|
|
+
|
|
|
|
+ "\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$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 逻辑非: 栈顶元素的逻辑非
|
|
|
|
+FUNCTION {not} {
|
|
|
|
+ { #0 }
|
|
|
|
+ { #1 }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 逻辑与
|
|
|
|
+FUNCTION {and} {
|
|
|
|
+ { skip$ }
|
|
|
|
+ { pop$ #0 }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 逻辑或
|
|
|
|
+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$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 将栈顶字符串转换为整数
|
|
|
|
+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 {initialize.status.constants}
|
|
|
|
+{ #0 'before.all := % 起始
|
|
|
|
+ #1 'mid.sentence := % 句中
|
|
|
|
+ #2 'after.sentence := % 句末
|
|
|
|
+ #3 'after.block := % 块后
|
|
|
|
+ #4 'after.title := %
|
|
|
|
+ #5 'before.pages := %
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+FUNCTION {remove.char}
|
|
|
|
+{ 't :=
|
|
|
|
+ 's :=
|
|
|
|
+ ""
|
|
|
|
+ { s empty$ not }
|
|
|
|
+ { s #1 #1 substring$
|
|
|
|
+ s #2 global.max$ substring$ 's :=
|
|
|
|
+ duplicate$ t = 'pop$
|
|
|
|
+ { * }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ while$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+STRINGS {z}
|
|
|
|
+FUNCTION {remove.period}
|
|
|
|
+{ 'z :=
|
|
|
|
+ ""
|
|
|
|
+ { z empty$ not }
|
|
|
|
+ { z #1 #1 substring$
|
|
|
|
+ z #2 global.max$ substring$ 'z :=
|
|
|
|
+ duplicate$ "." = 'pop$
|
|
|
|
+ { * }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ while$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+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 {bibinfo.check}
|
|
|
|
+{ swap$
|
|
|
|
+ duplicate$ missing$
|
|
|
|
+ {
|
|
|
|
+ pop$ pop$
|
|
|
|
+ ""
|
|
|
|
+ }
|
|
|
|
+ { duplicate$ empty$
|
|
|
|
+ {
|
|
|
|
+ swap$ pop$
|
|
|
|
+ }
|
|
|
|
+ { swap$
|
|
|
|
+ pop$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+%%%%%%%%%%%%
|
|
|
|
+%% 调试例程
|
|
|
|
+%%%%%%%%%%%%
|
|
|
|
+
|
|
|
|
+% 默认调试输出函数
|
|
|
|
+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 {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
|
|
|
|
+ output.state mid.sentence =
|
|
|
|
+ { bbl.comma * write$ } % mid.sentence 前置逗号
|
|
|
|
+ { 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$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+ mid.sentence 'output.state :=
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+ % s
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 无警告输出函数
|
|
|
|
+FUNCTION {output} {
|
|
|
|
+ duplicate$ empty$
|
|
|
|
+ { pop$ } % 若输出项为空, 则舍去空输出项
|
|
|
|
+ { output.nonnull } % 否则调用非空输出函数
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 警告输出函数: 同 output, 但是对于空项给出警告提示
|
|
|
|
+FUNCTION {output.warn}
|
|
|
|
+{ '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
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+FUNCTION {start.entry}
|
|
|
|
+{ newline$
|
|
|
|
+ "\bibitem{" write$
|
|
|
|
+ cite$ write$
|
|
|
|
+ "}" write$
|
|
|
|
+ newline$
|
|
|
|
+ ""
|
|
|
|
+ before.all 'output.state :=
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+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 := }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+FUNCTION {new.sentence}
|
|
|
|
+{ output.state after.block =
|
|
|
|
+ 'skip$
|
|
|
|
+ { output.state before.all =
|
|
|
|
+ 'skip$
|
|
|
|
+ { after.sentence '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 {emphasize}
|
|
|
|
+{ duplicate$ empty$
|
|
|
|
+ { pop$ "" }
|
|
|
|
+ { "{\em " swap$ * "}" * }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+FUNCTION {format.language}
|
|
|
|
+{ language empty$
|
|
|
|
+ 'skip$
|
|
|
|
+ 'skip$
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+FUNCTION {is.space}
|
|
|
|
+{ chr.to.int$
|
|
|
|
+ duplicate$ #32 =
|
|
|
|
+ { pop$ #1 }
|
|
|
|
+ { pop$ #0 }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+FUNCTION {is.lower.char}
|
|
|
|
+{
|
|
|
|
+ chr.to.int$
|
|
|
|
+ duplicate$ #96 >
|
|
|
|
+ { #123 <
|
|
|
|
+ { #1 }
|
|
|
|
+ { #0 }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ { pop$ #0 }
|
|
|
|
+ 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$ % <language 判断结束>
|
|
|
|
+ remove.period % 并删除缩写符号'.'
|
|
|
|
+ 't := % 格式化后的姓名暂存于 t
|
|
|
|
+ nameptr #1 >
|
|
|
|
+ { nameptr max.num.names.before.forced.et.al #1 + =
|
|
|
|
+ { "others" 't := % 如果当前作者的序数已经超出了最大列显作者数
|
|
|
|
+ #1 'namesleft := } % 则置未处理姓名数为#1, 以便跳出循环
|
|
|
|
+ { bbl.comma * } % 如果作者序数在允许范围内, 则添加逗号
|
|
|
|
+ if$ % <et al 判断结束>
|
|
|
|
+ namesleft #1 > % 若当前姓名不是最后一个
|
|
|
|
+ { t * } % 显示当前姓名
|
|
|
|
+ { t "others" = % 若当前姓名是最后一个且后面有略去的姓名
|
|
|
|
+ { bbl.etal * } % 添加", et~al"或",等"
|
|
|
|
+ { t * } % 如果没有略去姓名,以句点结束
|
|
|
|
+ if$ % <others 判断结束>
|
|
|
|
+ }
|
|
|
|
+ if$ % <namesleft 判断结束>
|
|
|
|
+ }
|
|
|
|
+ { t } % 如果是第一个作者, 直接将排版后的姓名压栈
|
|
|
|
+ if$
|
|
|
|
+ nameptr #1 + 'nameptr := % 姓名指针加 1
|
|
|
|
+ namesleft #1 - 'namesleft := % 剩余姓名数减 1
|
|
|
|
+ }
|
|
|
|
+ while$
|
|
|
|
+}
|
|
|
|
+% 格式化姓名
|
|
|
|
+FUNCTION {format.names} {
|
|
|
|
+ is.for.peer.review
|
|
|
|
+ { format.names.for.peer.review } % 格式化盲审姓名
|
|
|
|
+ { format.names.for.non.peer.review } % 格式化非盲审姓名
|
|
|
|
+ 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 }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 译者格式
|
|
|
|
+FUNCTION {format.translators}
|
|
|
|
+{ translator empty$
|
|
|
|
+ { "" } % 无译者
|
|
|
|
+ { new.block % 有译者
|
|
|
|
+ translator format.names ",译" *
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 机构格式
|
|
|
|
+FUNCTION {format.institution} {
|
|
|
|
+ institution empty$
|
|
|
|
+ { "" }
|
|
|
|
+ { institution }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 组织格式
|
|
|
|
+FUNCTION {format.organization} {
|
|
|
|
+ organization empty$
|
|
|
|
+ { "" }
|
|
|
|
+ { organization }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 文献类型标志代码/电子文献载体标志代码
|
|
|
|
+FUNCTION {bib.type.designator} {
|
|
|
|
+% % DEBUG
|
|
|
|
+% "bib.type.designator(type:" type$ * debug.output
|
|
|
|
+% " url: " url empty$ { "<N/A>" }{ 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
|
|
|
|
+ }
|
|
|
|
+ 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.title}
|
|
|
|
+{ title empty$
|
|
|
|
+ { "" }
|
|
|
|
+ { new.block
|
|
|
|
+ title }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 格式化年月日``YYYY-MM-DD''
|
|
|
|
+FUNCTION {format.year.month.day} {
|
|
|
|
+ year empty$
|
|
|
|
+ { "YYYY" }
|
|
|
|
+ { year }
|
|
|
|
+ if$
|
|
|
|
+ "-" *
|
|
|
|
+ month empty$
|
|
|
|
+ { "MM" * }
|
|
|
|
+ { month text.length$ #2 <
|
|
|
|
+ { "0" * }
|
|
|
|
+ { skip$ }
|
|
|
|
+ if$
|
|
|
|
+ month *
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+ "-" *
|
|
|
|
+ day empty$
|
|
|
|
+ { "DD" * }
|
|
|
|
+ { day text.length$ #2 <
|
|
|
|
+ { "0" * }
|
|
|
|
+ 'skip$
|
|
|
|
+ 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$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 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$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+ % 文献类型标志
|
|
|
|
+ bib.type.designator *
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 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 * "]" * }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% electronic的主要责任者:
|
|
|
|
+% author 或 organization
|
|
|
|
+FUNCTION {format.electronic.authors}
|
|
|
|
+{
|
|
|
|
+ author empty$
|
|
|
|
+ { organization empty$
|
|
|
|
+ { " " }
|
|
|
|
+ { organization }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ { format.authors }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% electronic的出版项
|
|
|
|
+FUNCTION {format.electronic.publication} {
|
|
|
|
+ new.block
|
|
|
|
+ % 出版地: 出版者
|
|
|
|
+ address empty$
|
|
|
|
+ { "" }
|
|
|
|
+ { address
|
|
|
|
+ publisher empty$
|
|
|
|
+ { skip$ }
|
|
|
|
+ { bbl.colon * publisher * }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+
|
|
|
|
+ % 出版年
|
|
|
|
+ year empty$
|
|
|
|
+ { skip$ }
|
|
|
|
+ { publisher empty$
|
|
|
|
+ { "" }
|
|
|
|
+ { bbl.comma }
|
|
|
|
+ if$
|
|
|
|
+ * year * }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+%% article的标题格式
|
|
|
|
+FUNCTION {format.atitle}
|
|
|
|
+{ title empty$
|
|
|
|
+ { "" }
|
|
|
|
+ { title
|
|
|
|
+ newsletter empty$
|
|
|
|
+ { "~[J" * }
|
|
|
|
+ { newsletter "yes" =
|
|
|
|
+ { "~[N" * }
|
|
|
|
+ { "~[J" * }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+ url empty$
|
|
|
|
+ { "]" * }
|
|
|
|
+ { "/OL]" * }
|
|
|
|
+ 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 :=
|
|
|
|
+ ""
|
|
|
|
+ { t empty$ not }
|
|
|
|
+ { t #1 #1 substring$ "-" =
|
|
|
|
+ { t #1 #2 substring$ "--" = not
|
|
|
|
+ { "--" *
|
|
|
|
+ t #2 global.max$ substring$ 't :=
|
|
|
|
+ }
|
|
|
|
+ { { t #1 #1 substring$ "-" = }
|
|
|
|
+ { "-" *
|
|
|
|
+ t #2 global.max$ substring$ 't :=
|
|
|
|
+ }
|
|
|
|
+ while$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ { t #1 #1 substring$ *
|
|
|
|
+ t #2 global.max$ substring$ 't :=
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ while$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 年,卷(期)
|
|
|
|
+FUNCTION {format.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$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ 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$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+function {format.year.year}
|
|
|
|
+{ year empty$
|
|
|
|
+ 'skip$
|
|
|
|
+ { year "--" *
|
|
|
|
+ year2 empty$
|
|
|
|
+ 'skip$
|
|
|
|
+ { year2 "now" =
|
|
|
|
+ 'skip$
|
|
|
|
+ { year2 * }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ 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$
|
|
|
|
+ }
|
|
|
|
+ { skip$ }
|
|
|
|
+ if$
|
|
|
|
+ bib.type.designator * % 标题 + [文献标志代码/电子文献载体标志代码]
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 科技报告标题格式
|
|
|
|
+FUNCTION {format.techreport.title} {
|
|
|
|
+ title empty$
|
|
|
|
+ { "" }
|
|
|
|
+ { new.block % 生成一个新的block
|
|
|
|
+ title % 标题 +
|
|
|
|
+ number empty$ % 编号 +
|
|
|
|
+ { "" }
|
|
|
|
+ { bbl.comma * number }
|
|
|
|
+ if$ *
|
|
|
|
+ bib.type.designator * % [文献标志代码/电子文献载体标志代码]
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 连续出版物标题格式
|
|
|
|
+FUNCTION {format.jtitle}
|
|
|
|
+{ title "~[J" *
|
|
|
|
+ url empty$
|
|
|
|
+ { "]" * }
|
|
|
|
+ { "/OL]" * }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 论文集标题格式
|
|
|
|
+FUNCTION {format.ptitle.volume}
|
|
|
|
+{ title
|
|
|
|
+ volume empty$
|
|
|
|
+ { "~[C]" }
|
|
|
|
+ { bbl.colon volume * "~[C]" * }
|
|
|
|
+ if$ *
|
|
|
|
+ %emphasize
|
|
|
|
+}
|
|
|
|
+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 {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
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+FUNCTION {format.number.series}
|
|
|
|
+{ volume empty$
|
|
|
|
+ { number empty$
|
|
|
|
+ { series field.or.null }
|
|
|
|
+ { output.state mid.sentence =
|
|
|
|
+ { "number" }
|
|
|
|
+ { "Number" }
|
|
|
|
+ if$
|
|
|
|
+ number tie.or.space.connect
|
|
|
|
+ series empty$
|
|
|
|
+ { "there's a number but no series in " cite$ * warning$ }
|
|
|
|
+ { " in " * series * }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ { "" }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 版本项格式
|
|
|
|
+FUNCTION {format.edition} {
|
|
|
|
+ edition empty$
|
|
|
|
+ { "" }
|
|
|
|
+ { new.block % 版本项按一个block输出
|
|
|
|
+ language empty$ % 英文文献版本号自动转换成数字形式的序数词
|
|
|
|
+ { edition convert.edition
|
|
|
|
+ "l" change.case$ " ed" *
|
|
|
|
+ }
|
|
|
|
+ { edition } % 中文文献版本号直接输出
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+FUNCTION {format.url}
|
|
|
|
+{ url empty$
|
|
|
|
+ { "" }
|
|
|
|
+ { new.block
|
|
|
|
+ "\url{" url * "}" *
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+FUNCTION {multi.page.check}
|
|
|
|
+{ 't :=
|
|
|
|
+ #0 'multiresult :=
|
|
|
|
+ { multiresult not
|
|
|
|
+ t empty$ not
|
|
|
|
+ and
|
|
|
|
+ }
|
|
|
|
+ { t #1 #1 substring$
|
|
|
|
+ duplicate$ "-" =
|
|
|
|
+ swap$ duplicate$ "," =
|
|
|
|
+ swap$ "+" =
|
|
|
|
+ or or
|
|
|
|
+ { #1 'multiresult := }
|
|
|
|
+ { t #2 global.max$ substring$ 't := }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ while$
|
|
|
|
+ multiresult
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+FUNCTION {format.pages}
|
|
|
|
+{ pages empty$
|
|
|
|
+ { "" }
|
|
|
|
+ { before.pages 'output.state :=
|
|
|
|
+ pages multi.page.check
|
|
|
|
+ { "" pages n.dashify tie.or.space.connect }
|
|
|
|
+ { "" pages tie.or.space.connect }
|
|
|
|
+ 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$
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+ pages empty$
|
|
|
|
+ 'skip$
|
|
|
|
+ { duplicate$ empty$
|
|
|
|
+ { pop$ format.pages }
|
|
|
|
+ { bbl.colon * pages n.dashify * }
|
|
|
|
+ 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 * "]" *
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+ %duplicate$ "top of stack = " swap$ * warning$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+FUNCTION {format.chapter.pages}
|
|
|
|
+{ chapter empty$
|
|
|
|
+ { "" }
|
|
|
|
+ { type empty$
|
|
|
|
+ { "chapter" }
|
|
|
|
+ { type "l" change.case$ }
|
|
|
|
+ if$
|
|
|
|
+ chapter tie.or.space.connect
|
|
|
|
+ pages empty$
|
|
|
|
+ 'skip$
|
|
|
|
+ { ", " * format.pages * }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+FUNCTION {format.in.booktitle}
|
|
|
|
+{ booktitle empty$
|
|
|
|
+ { "" }
|
|
|
|
+ { editor empty$
|
|
|
|
+ { language empty$
|
|
|
|
+ { " " booktitle * }
|
|
|
|
+ % { "Proceedings of " booktitle * }
|
|
|
|
+ { " " booktitle * }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ { language empty$
|
|
|
|
+% { "In: " format.editors * ", Proceedings of " * booktitle * }
|
|
|
|
+ { " " booktitle * }
|
|
|
|
+ { " " booktitle * }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+FUNCTION {format.in.ed.booktitle.volume}
|
|
|
|
+{ 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$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+FUNCTION {empty.misc.check}
|
|
|
|
+{ author empty$ title empty$ howpublished empty$
|
|
|
|
+ month empty$ year empty$ note empty$
|
|
|
|
+ and and and and 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$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+FUNCTION {format.book.crossref}
|
|
|
|
+{ volume empty$
|
|
|
|
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
|
|
|
|
+ "In "
|
|
|
|
+ }
|
|
|
|
+ { "Volume" volume tie.or.space.connect
|
|
|
|
+ " of " *
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+ editor empty$
|
|
|
|
+ editor field.or.null author field.or.null =
|
|
|
|
+ or
|
|
|
|
+ { key empty$
|
|
|
|
+ { series empty$
|
|
|
|
+ { "need editor, key, or series for " cite$ * " to crossref " *
|
|
|
|
+ crossref * warning$
|
|
|
|
+ "" *
|
|
|
|
+ }
|
|
|
|
+ { "{\em " * series * "\/}" * }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ { key * }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ { format.crossref.editor * }
|
|
|
|
+ if$
|
|
|
|
+ " \cite{" * crossref * "}" *
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+FUNCTION {format.incoll.inproc.crossref}
|
|
|
|
+{ editor empty$
|
|
|
|
+ editor field.or.null author field.or.null =
|
|
|
|
+ or
|
|
|
|
+ { key empty$
|
|
|
|
+ { booktitle empty$
|
|
|
|
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
|
|
|
|
+ crossref * warning$
|
|
|
|
+ ""
|
|
|
|
+ }
|
|
|
|
+ { "In {\em " booktitle * "\/}" * }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ { "In " key * }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ { "In " format.crossref.editor * }
|
|
|
|
+ if$
|
|
|
|
+ " \cite{" * 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$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 出版地: 出版者, 出版年
|
|
|
|
+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
|
|
|
|
+ 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
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 出版地: 学校, 出版年
|
|
|
|
+FUNCTION {format.address.school.year} {
|
|
|
|
+ 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$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+%%%%%%%%%%%%%%%%%
|
|
|
|
+%% 著录格式: 专著
|
|
|
|
+%%%%%%%%%%%%%%%%%
|
|
|
|
+
|
|
|
|
+% 普通图书
|
|
|
|
+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 % 备注
|
|
|
|
+
|
|
|
|
+ fin.entry
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 标准
|
|
|
|
+FUNCTION {standard} {
|
|
|
|
+ start.entry
|
|
|
|
+
|
|
|
|
+ organization empty$ % 主要责任人
|
|
|
|
+ { format.institution "organization and institution" output.warn }
|
|
|
|
+ { format.organization output.nonnull }
|
|
|
|
+ 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 % 备注项
|
|
|
|
+
|
|
|
|
+ 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
|
|
|
|
+
|
|
|
|
+ fin.entry
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 会议录/论文集
|
|
|
|
+FUNCTION {proceedings} {
|
|
|
|
+ start.entry
|
|
|
|
+
|
|
|
|
+ editor empty$
|
|
|
|
+ { organization empty$
|
|
|
|
+ { format.institution "author, organization institution" output.warn }
|
|
|
|
+ { format.organization output.nonnull }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ { format.editors output.nonnull }
|
|
|
|
+ if$
|
|
|
|
+ format.book.title "title" output.warn
|
|
|
|
+ format.address.publisher.year output
|
|
|
|
+ format.note output
|
|
|
|
+
|
|
|
|
+ fin.entry
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 科技报告
|
|
|
|
+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
|
|
|
|
+
|
|
|
|
+ fin.entry
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
+%% 著录格式: 专著中析出的文献
|
|
|
|
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
+
|
|
|
|
+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 {format.month.year} {
|
|
|
|
+ month empty$
|
|
|
|
+ { "" }
|
|
|
|
+ { month " " * }
|
|
|
|
+ if$
|
|
|
|
+ year empty$
|
|
|
|
+ { "There is month but no year in " cite$ * warning$ }
|
|
|
|
+ { year * }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+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} {
|
|
|
|
+ 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 {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 {format.update.date} {
|
|
|
|
+ update empty$
|
|
|
|
+ { "" }
|
|
|
|
+ { output.state mid.sentence =
|
|
|
|
+ { before.all 'output.state := }
|
|
|
|
+ { skip$ }
|
|
|
|
+ if$
|
|
|
|
+ "~(" update * ")" * }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
+%% 著录格式: 电子文献
|
|
|
|
+%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
+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
|
|
|
|
+
|
|
|
|
+ fin.entry
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
+%% 著录格式: 连续出版物
|
|
|
|
+%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
+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
|
|
|
|
+
|
|
|
|
+ fin.entry
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+FUNCTION {format.journal.title} {
|
|
|
|
+ journal empty$
|
|
|
|
+ { "" }
|
|
|
|
+ { new.block journal }
|
|
|
|
+ if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 连续出版物中析出的文献
|
|
|
|
+FUNCTION {article}
|
|
|
|
+{ start.entry
|
|
|
|
+
|
|
|
|
+ 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
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+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
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+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
|
|
|
|
+ }
|
|
|
|
+ { format.incoll.inproc.crossref output.nonnull
|
|
|
|
+ format.chapter.pages output
|
|
|
|
+ }
|
|
|
|
+ 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 {manual}
|
|
|
|
+{ start.entry
|
|
|
|
+ author empty$
|
|
|
|
+ { organization empty$
|
|
|
|
+ 'skip$
|
|
|
|
+ { organization output.nonnull
|
|
|
|
+ address output
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ { format.authors output.nonnull }
|
|
|
|
+ if$
|
|
|
|
+ new.block
|
|
|
|
+ format.book.title "title" output.warn
|
|
|
|
+ author empty$
|
|
|
|
+ { organization empty$
|
|
|
|
+ { address new.block.checka
|
|
|
|
+ address output
|
|
|
|
+ }
|
|
|
|
+ 'skip$
|
|
|
|
+ if$
|
|
|
|
+ }
|
|
|
|
+ { organization address new.block.checkb
|
|
|
|
+ organization output
|
|
|
|
+ address output
|
|
|
|
+ }
|
|
|
|
+ if$
|
|
|
|
+ format.edition output
|
|
|
|
+ format.date output
|
|
|
|
+ new.block
|
|
|
|
+ note output
|
|
|
|
+ fin.entry
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 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 {misc}
|
|
|
|
+{ start.entry
|
|
|
|
+
|
|
|
|
+ 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 {phdthesis.type}
|
|
|
|
+{ "~[D]"
|
|
|
|
+% language empty$
|
|
|
|
+% { "[PhD Thesis]" }
|
|
|
|
+% { "[博士学位论文]" }
|
|
|
|
+% if$
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+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
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+% 专用控制条目 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 :=
|
|
|
|
+ }
|
|
|
|
+ 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
|
|
|
|
+ }
|
|
|
|
+ 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 :=
|
|
|
|
+ }
|
|
|
|
+ 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 :=
|
|
|
|
+ }
|
|
|
|
+ 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}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+%%%%%%%%%%
|
|
|
|
+%% 主程序
|
|
|
|
+%%%%%%%%%%
|
|
|
|
+
|
|
|
|
+READ
|
|
|
|
+
|
|
|
|
+EXECUTE {initialize.controls} % 初始化控制变量
|
|
|
|
+EXECUTE {initialize.status.constants} % 初始化状态常量
|
|
|
|
+EXECUTE {banner.message} % 显示初始提示信息
|
|
|
|
+
|
|
|
|
+EXECUTE {initialize.longest.label} % 初始化最长的标号
|
|
|
|
+ITERATE {longest.label.pass} % 处理最长的标号
|
|
|
|
+
|
|
|
|
+EXECUTE {begin.bib} % 开始
|
|
|
|
+ITERATE {call.type$} %
|
|
|
|
+EXECUTE {end.bib} % 结束
|
|
|
|
+
|
|
|
|
+EXECUTE {completed.message} % 显示完成提示信息
|
|
|
|
+
|
|
|
|
+%% EOF
|