BUPTBachelorThesis/BUPTBachelor.bst

2594 lines
55 KiB
Plaintext
Raw Normal View History

2024-11-24 17:46:47 +08:00
%% 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}{~ff}{, 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$ "masterthesis" = or
{language "Chinese" = { "学位论文" } { language empty$ = {"Dissertation"} if$} if$}
{ 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
}
% 卷(期).年,月(for article only)
FUNCTION {format.volume.number.year.month} {
add.period$
year empty$
{ "" }
{
volume empty$
'skip$
{ "~" * volume * }
if$
number empty$
'skip$
{ "~(" * number * ")" * }
if$
new.block
year
month empty$
'skip$
{ bbl.comma * month * }
if$
}
if$
}
%
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$
{ "" }
{
new.block
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.year} {
year empty$
{ "There is month but no year in " cite$ * warning$ }
{ new.block
year " " *
}
if$
}
FUNCTION {format.collection.title} {
booktitle empty$
{ "" }
{ new.block
language empty$
{"In "}
{"见"}
if$
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.volume.number.year.month output
%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.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 {thesis.type}
{
%"~[D]"
language empty$
{ "[Dissertation]" }
{ "[学位论文]" }
if$
}
FUNCTION {masterthesis}
{ start.entry
format.authors "author" add.period$ output.warn
new.block
format.title remove.dots " " * thesis.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 {phdthesis}
%{ start.entry
% format.authors "author" add.period$ output.warn
%new.block
%format.title remove.dots " " * thesis.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 {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 {phdthesis} {thesis}
%FUNCTION {masterthesis} {thesis}
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