我在使用 BibTeX 引用我撰写的文章中的论文时遇到了一些问题。我提交的期刊提供了他们自己的 *.bst 和 *.sty 文件,这些文件应该按照期刊所需的格式进行格式化。
问题是,我对作者截断(即 et al)的行为非常不一致。当我引用同一篇论文时,我在某些地方得到了:
Author1 et al. (2003)
而在其他情况下我得到的是:
Author1, Author2, Author3, and Author4 (2003)
这一切都是在以相同方式使用 \cite{key} 时发生的。为了尝试诊断问题,我查看了 paper.aux 文件。在此文件中,我可以看到作者已被 BibTeX 正确解析。以下是 *.aux 文件条目的示例:
\bibcite{key}{{5}{2003}{{Author1 et~al.}}{{Author1, Author2, Author3, and Author4}}}
对我来说,下一个合乎逻辑的步骤是查看 *.bst 文件。不幸的是,我对 BibTeX 非常不熟悉。以下是我认为与 *.bst 文件相关的代码:
FUNCTION {bbl.etal}
{ "et~al." }
FUNCTION {format.names}
{ 'bibinfo :=
duplicate$ empty$ 'skip$ {
's :=
"" 't :=
#1 'nameptr :=
s num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
{ s nameptr
duplicate$ #1 >
{ "{f.~}{vv~}{ll}{, jj}" }
{ "{vv~}{ll}{, f.}{, jj}" }
if$
format.name$
bibinfo bibinfo.check
't :=
nameptr #1 >
{
namesleft #1 >
{ ", " * t * }
{
s nameptr "{ll}" format.name$ duplicate$ "others" =
{ 't := }
{ pop$ }
if$
numnames #2 >
{ "," * }
'skip$
if$
t "others" =
{
" " * bbl.etal *
}
{
bbl.and
space.word * t *
}
if$
}
if$
}
't
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
} if$
}
答案1
在您的最新评论中,您似乎有意寻找一种方法来监控这种行为。
您应该尝试一下 biblatex,它非常完整并且高度可配置。
对于您的具体情况,您可以使用\usepackage[maxnames=99]{biblatex}
,它将始终显示所有作者。