Bibtex Chicago Style:需要更改三位或更多作者列表的截断设置

Bibtex Chicago Style:需要更改三位或更多作者列表的截断设置

我使用的是 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文件中,dcujmrjphysicsBkluwernederlands只有两个样式--apsrjmr-- 具有一个名为的功能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再两次完全传播所有变化。

相关内容