我使用的是 Bibtex、Natbib 和 Chicago Style。但是,我需要更改作者格式。如果有 3 位或更多作者,则只应提及第一位作者,然后是“et al.” 。目前,所有三位作者均已提及,只有 4 位或更多作者时才会出现“et al.” 。我该如何更改?
解决方案一定隐藏在这段代码的某个地方:
FUNCTION {format.rem.names}
{ 's :=
'f :=
#2 'nameptr :=
s num.names$ 'numnames :=
numnames #1 - 'namesleft :=
{ namesleft #0 > }
{ s nameptr f format.name$ 't :=
nameptr #1 >
{ namesleft #1 >
{ ", " * t * }
{
", " *
t "others" =
{ " et~al." * }
{ " \harvardand\ " * t * }
if$
}
if$
}
't
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
}
答案1
您发布的代码摘录中存在宏,\harvardand
表明该代码来自哈佛引文管理包:agsm
,,,,,,和。快速检查发现,在这七个候选apsr
文件中,dcu
jmr
jphysicsB
kluwer
nederlands
只有两个样式--apsr
和jmr
-- 具有一个名为的功能format.rem.names
。进一步检查发现,在这两种样式中,只有apsr
在以下情况下才会将作者(或编辑)列表截断为“firstauthor et al.”至少四位作者/编辑;相反,jmr
只要有三个或更多作者/编辑者,样式就会截断列表。
那么,让我们继续,假设您实际上使用的是apsr
书目样式,而不是称为的样式chicago
。事实证明,该函数format.rem.names
是不是如果您想更改截断行为,以便当文章有三位或更多作者/编辑时显示“firstauthor et al.”,则需要查找此位置。验证此说法的一种方法是注意该函数format.rem.names
是完全相同的在apsr
和中jrm
;由于它们的截断设置不相同,所以差异一定发生在其他函数中。
相反,您需要查看函数内部format.lab.names.abbr
,它如下所示apsr.bst
:
FUNCTION {format.lab.names.abbr}
{ 's :=
s num.names$ 'numnames :=
numnames #1 >
{ numnames #3 >
{ s #1 "{vv~}{ll}" format.name$ " et~al." * }
{ s format.lab.names.full }
if$
}
{ s #1 "{vv~}{ll}" format.name$ }
if$
}
关键代码序列是“内部” if 子句,即
{ numnames #3 >
{ s #1 "{vv~}{ll}" format.name$ " et~al." * }
{ s format.lab.names.full }
if$
这段代码片段的意思是:“如果变量‘numnames’(包含文章的作者/编辑者的数量)是比...更棒3,将字符串“s”(将包含格式化的作者字符串,用于引用调用)写为“firstauthor et~al。”否则,即,如果作者数量为 2 或 3,则调用函数format.lab.names.full
。”(如果存在,则“外部”if 子句为真超过 1作者。)
该怎么办?好吧,就改变
{ numnames #3 >
到
{ numnames #2 >
(在我的文件副本中apsr.bst
,此代码片段出现在第 572 行。)
请这样做不是直接修改/编辑原始文件 ( apsr.bst
)。相反,复制文件并将副本命名为apsr-mod.bst
。应用 中建议的编辑apsr-mod.bst
,然后保存apsr-mod.bst
到包含主 tex 文件的目录中。最后,确保 (a) 更改\bibliographystyle{apsr}
为\bibliographystyle{apsr-mod}
并 (b) 重新运行 LaTeX、BibTeX 和 LaTeX再两次完全传播所有变化。