我正在修改 abbrvnat.bst 以 (1) 将年份移到作者后面,(2) 在年份两边加上括号,(3) 删除作者后面的逗号,(4) 将作者姓名列为 , (例如,Ozsu, M.T.
而不是M. T. Ozsu
,这是 abbrvnat 的排版方式)。我能够通过在format.date "year" output.check
作者后面移动来执行 (1):
FUNCTION {article}
{ output.bibitem
format.authors "author" output.check
author format.key output
format.date "year" output.check
new.block
...
我尝试按照这里的一些相关文章来做 (2) 和 (3),但没有成功。我知道对于 (2),我需要修改以下定义,但我不知道如何修改:
FUNCTION {format.date}
{ year duplicate$ empty$
{ "empty year in " cite$ * warning$
pop$ "" }
'skip$
if$
month empty$
'skip$
{ month
" " * swap$ *
}
if$
extra.label *
}
我认为对于(3),我需要修改以下内容,但是,我再次不知道该如何修改:
FUNCTION {format.authors}
{ author empty$
{ "" }
{ author format.names }
if$
}
对于(4),我真的不知道......
我将非常感激您的帮助。
答案1
(3)和(4)可以一起解决。在你的 bst 文件中,有一行指定了名称的格式。它看起来像
{ s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
您可以在函数中找到它format.names
(位于文件的第 222 行左右abbrvnat.bst
)。括号内的符号表示名称的不同部分及其格式,例如
f.
代表缩写的名字(ff
代表完整的名字)vv
代表“de”或“von”之类的词ll
代表姓氏jj
代表junior
或类似的东西- 空格和标点符号代表其本身
您可以更改此行以更改名称的格式,例如
{ s nameptr "{vv~}{ll}{, f.}{, jj}" format.name$ 't :=
会给你“Ozsu, MT”而不是“MT Ozsu”(或者如果你是某个初级贵族,则会给你“de~Ozsu, MT, junior”而不是“MT de~Ozsu, junior”;-)
编辑(安德鲁·斯旺)对于(2),你可以使用以下格式格式化日期
FUNCTION {format.date}
{ year duplicate$ empty$
{ "empty year in " cite$ * warning$
pop$ "" }
'skip$
if$
"(" swap$ *
extra.label *
")" *
}
为了去掉年份前的逗号,你可以这样写你的冠词定义:
FUNCTION {article}
{ output.bibitem
format.authors "author" output.check
author format.key output
after.sentence 'output.state :=
format.date "year" output.check
new.block
...
内部有状态0
,...,分别3
称为before.all
、mid.sentence
和。 在此样式文件中,调用仅为状态 、 和 插入标点符号after.sentence
。因此,对于无标点符号,将 设置为就足够了。after.block
output.check
output.nonnull
before.all
mid.sentence
after.block
output.state
after.sentence