LaTeX+BibTeX 中作者等行为不一致

LaTeX+BibTeX 中作者等行为不一致

我在使用 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},它将始终显示所有作者。

相关内容