![牛津逗号仅适用于三位或更多作者,但不适用于两位作者](https://linux22.com/image/383927/%E7%89%9B%E6%B4%A5%E9%80%97%E5%8F%B7%E4%BB%85%E9%80%82%E7%94%A8%E4%BA%8E%E4%B8%89%E4%BD%8D%E6%88%96%E6%9B%B4%E5%A4%9A%E4%BD%9C%E8%80%85%EF%BC%8C%E4%BD%86%E4%B8%8D%E9%80%82%E7%94%A8%E4%BA%8E%E4%B8%A4%E4%BD%8D%E4%BD%9C%E8%80%85.png)
仅当条目有 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 文件中,将参数
\bibliographystyle
from更改aea
为aea-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
- 请注意两个额外的逗号: