牛津逗号仅适用于三位或更多作者,但不适用于两位作者

牛津逗号仅适用于三位或更多作者,但不适用于两位作者

仅当条目有 3 个或更多作者时我才想插入牛津逗号,但如果条目只有两个作者则不会插入。

例如

A 和 B (1999) [无逗号]

A、B 和 C (1999) [C 前面有逗号]

我试过

author = "A and Firstname { B,} and C"

在书目条目本身中。这适用于引用标注,但格式化的书目条目中会出现两个逗号。

我用aea书目格式,可以在线获取这里。您现在可能已经猜到了,此参考书目样式设置为始终在penultimate_author和之间插入逗号and final_author之间插入逗号——即使条目有正好两个作者。有没有办法调整此书目样式,以便只有当条目包含三个或以上作者?

为了完整起见,下面是参考书目样式format.names的函数aea

FUNCTION {format.names}
{ 's :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
  { namesleft #0 > }
    { nameptr #1 = 
        {   s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't := }
        {   s nameptr "{ff }{vv~}{ll}{, jj}" format.name$ 't := }
        if$
      nameptr #1 >
        { namesleft #1 >
          { ", " * t * }
          { t "others" =
            { ", et~al." * }
            { " and " * t * }
            if$
          }
          if$
        }
        't
        if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
    while$
}

答案1

我建议您按如下方式进行:

  • 复制一份aea.bst并将该副本命名为aea-oxford.bst

  • 在文本编辑器中打开文件aea-oxford.bst。你用来编辑 tex 文件的程序就可以了。

  • 在文件中,找到函数format.names。基本上,这就是您在查询中显示其代码的函数。

  • 在此函数中,将三行替换

      { t "others" =
        { ", et~al." * }
        { ", and " * t * }
    

    包含以下七行:

          { numnames #2 >
              { "," * }
              'skip$
            if$
            t "others" =
              { " et~al." * }
              { " and " * t * }
    

    新代码的第一部分包括一个测试,用于检查姓氏总数是否大于 2。如果是,则插入逗号;如果不是,则不执行任何操作。在第二部分(只有在以下情况下才会执行)两个或以上姓氏,其中一个可能是字符串“others”),如果第二个姓氏是“真实的”,即不由字符串“others”组成,则插入一个简单的“and”。

  • 将该文件存储aea-oxford.bst在主 tex 文件所在的目录中。

  • 在主 tex 文件中,将参数\bibliographystylefrom更改aeaaea-oxford。然后,执行完整的重新编译循环 —— LaTeX、BibTeX、LaTeX 和 LaTeX 再次 —— 以完全传播所有更改。


完整的 MWE (最小工作示例) 和屏幕截图;我用黄色突出显示了所做的两项更改aea-oxford.bst

在此处输入图片描述

\RequirePackage{filecontents}
\begin{filecontents}{mybib.bib}
@misc{a, author = "A", title  = "Thoughts", year   = 3001, } 
@misc{ab, author = "A and B", title  = "Thoughts", year   = 3002, }
@misc{abc, author = "A and B and C", title  = "Thoughts", year   = 3003, }
@misc{abcd, author = "A and B and C and D", title  = "Thoughts", year   = 3004, }
@misc{abcde, author = "A and others", title  = "Thoughts", year   = 3005, }
\end{filecontents}

\documentclass{article}
\usepackage[round,authoryear]{natbib}
\bibliographystyle{aea-oxford}

\begin{document}
\noindent
\cite{a}, \cite{ab}, \cite{abc}, \cite{abcd}, \cite{abcde}
\bibliography{mybib}
\end{document}

仅用于比较,如果使用未修改的参考书目样式,以下是相同 MWE 的输出aea- 请注意两个额外的逗号:

在此处输入图片描述

相关内容