我正在尝试在文内引用中列出所有作者。目前,et al.
如果作者超过两位,则会显示。请指教。这是我的代码。
\usepackage[round, authoryear]{natbib}
\bibliographystyle{aomlike}
以下是aomlike
书目样式代码
FUNCTION {format.names}
{ 's :=
#1 'nameptr :=
s num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
{ s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't := % last name first
nameptr #1 >
{ namesleft #1 >
{ ", " * t * }
{ numnames #2 >
{ "," * }
'skip$
if$
t "others" =
{ " et~al." * }
{ " and " * t * }
if$
}
if$
}
't
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
}
答案1
format.names
修改文件中的函数aomlike.bst
似乎可行,但事实并非如此。相反,我们需要修改函数format.lab.names
。
我建议您按如下方式进行。
复制一份
aomlike.bst
并将副本命名为aomlike2.bst
。(您可以自由选择更具描述性的名称。)在文本编辑器中打开文件
aomlike2.bst
。你用来编辑 tex 文件的程序就可以了。在文件中
aomlike2.bst
找到函数的定义format.lab.names
。在我的文件副本中,函数定义从第 971 行开始,占比略少于 20 行。删除(或注释掉)此函数定义并将其替换为以下 50 行 [!] 代码块:
FUNCTION {space.word} { " " swap$ * " " * } FUNCTION {format.lab.names} {'s := "" 't := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr "{vv~}{ll}" format.name$ 't := nameptr #1 > { nameptr #100 = numnames #99 > and { "others" 't := #1 'namesleft := } 'skip$ if$ namesleft #1 > { ", " * t * } { s nameptr "{ll}" format.name$ duplicate$ "others" = { 't := } { pop$ } if$ t "others" = { " " * "et~al." * } { numnames #2 > { "," * } 'skip$ if$ "and" space.word * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ }
如果条目中有超过 99 位作者(或编辑),代码会截断引文标注中显示的作者姓名列表。我相信这在实践中并不是一个有约束力的限制。
将文件保存
aomlike2.bst
在包含主 tex 文件的目录中,或保存在 BibTeX 搜索的目录中。如果选择第二个选项,请确保更新 TeX 发行版的文件名数据库。如果您不知道前面这句话的意思,我建议您选择选项 1。在您的主 tex 文件中,更改
\bibliographystyle{aomlike}
为\bibliographystyle{aomlike2}
并执行完整的重新编译循环,即重新运行 LaTeX、BibTeX 和 LaTeX 两次以上。
祝您 BibTeX 愉快!