我的参考文献列表中有几条条目,包括大约 40 位作者。有没有办法bibtex
自动地将这些列表缩小到例如名字+“et al.”?
我不想手动编辑 BibTeX 条目,也不能使用biblatex
。如果可能的话,我也希望尽可能少地更改参考书目样式。
还有类似的问题,但是都没有一个简洁的答案:
natbib
例如似乎只改变文中的引用,但不改变参考书目中的条目。
编辑:我正在使用它\bibliographystyle{unsrt}
作为样式定义。
答案1
引文管理包natbib
管理引文标注的创建和显示。它不本身,确定应如何(甚至是否)截断大量作者的列表,无论是在引文标注中还是在格式化的书目参考中。此类截断问题由书目样式文件 ( .bst
) 确定,该文件通过命令 加载\bibliographystyle{<somestyle>}
。
如果你找不到符合你格式需求的现有 .bst 文件,你可以通过在 上运行 LaTeX 从头创建一个makebst.tex
,它是定制围兜包。运行该makebst
实用程序会启动一系列交互式多项选择题,所有可用的答案选项都得到了很好的解释。几个问题将与截断问题有关。输出将是.bst
您想要的文件。
附加说明,在收到 @fuenfundachtzig 使用书目样式的信息后unsrt
。(由于unsrt
书目样式只能创建数字样式的引文标注,因此以下答案解决了如何截断格式化书目中的作者列表,不是在引文标注中。)
我建议您按如下方式进行:
在你的 TeX 发行版中找到该文件
unsrt.bst
。复制此文件并将副本命名为unsrt85.bst
。执行不是直接编辑系统文件。unsrt85.bst
用您最喜欢的文本编辑器打开该文件。2020 年 9 月更新:我注意到,我于 2011 年 8 月提供的编辑说明不再有效。我不知道 BibTeX 对 bst 文件的处理究竟何时发生了变化。以下代码适用于最新的 TeXLive2020 TeX 发行版。
找到该函数
format.names
(它在我的文件副本中从 l. 185 开始)并在该函数内找到以下行,距顶部约 7 行:nameptr #1 >
假设你只想打印前三名作者(后跟“et al.”)超过四个(即“至少五位”)作者,你应该将 BibTeX 函数中的接下来的三行替换为即,
{ namesleft #1 > { ", " * t * } { numnames #2 >
包含以下 17 行:
{ nameptr #3 #1 + = numnames #4 > and { "others" 't := #1 'namesleft := } 'skip$ if$ namesleft #1 > { ", " * t * } { s nameptr "{ll}" format.name$ duplicate$ "others" = { 't := } { pop$ } if$ numnames #2 >
换句话说,此设置告诉 BibTeX,如果条目包含以下信息,则包含所有作者姓名:最多四个作者,并且只包括前三个名字,后面跟着“et al”(如果条目有超过四个作者。
将文件保存
unsrt85.bst
在包含主 tex 文件的目录中,或保存在 BibTeX 搜索的目录中。如果选择第二个选项,请确保根据需要更新 TeX 的文件名数据库。在主 tex 文件中,您需要更改
\bibliographystyle{unsrt}
为\bibliographystyle{unsrt85}
并执行完整的重新编译循环(LaTeX、BibTeX,然后再执行两次 LaTeX)。
附录2019 年 5 月:对于ACM-Reference-Format
参考书目样式,需要对上面提出的修复方案进行一处小修改:
nameptr #1 >
{
nameptr #3
#1 + =
numnames #5
> and
{ "\bibinfo{person}{others}" 't :=
#1 'namesleft := }
'skip$
if$
namesleft #1 >
即,字符串"others"
应替换为"\bibinfo{person}{others}"
。 (已使用 2.1 版验证ACM-Reference-Format.bst
。)
答案2
如果您使用 BibTeX,请and others
在主要作者之后放置,编译后的文件应显示 et. al,例如:
Author="H. Morgan and others"
答案3
无需.bib
手动编辑文件即可在引文或参考书目/参考文献列表中的“et al.”之前拥有所需的作者数量。
引文和参考书目中列出的作者数量由参考书目样式管理。例如,使用 APA 样式(要求参考书目中书籍引用的“et al.”前最多有前六位作者):
sample.tex
文件:
\documentclass{article}
\usepackage{apacite}
\bibliographystyle{apacite}
\begin{document}
Found in \cite{abk}.
\bibliography{sample}
\end{document}
sample.bib
文件:
@book{abk,
author = "A. Man and A. Woman and Second Man and Third Man and Fourth Man and Second Woman and Third Woman and Fourth Woman and Fifth Man",
title = "This book",
publisher = "Men \& Women",
year = 2025,
}
输出(未格式化,仅来自的文本.pdf
)
发现于(Man et al.,2025)。
参考
男人 A.、女人 A.、男人 S.、男人 T.、男人 F.、女人 S. 等人 (2025)。 这本书。 男人女人。
您需要确定一种合适的样式,如果出版商接受使用 (Any)TeX 或预配置样式生成的投稿,通常会提供样式,或者如果需求足够重要,您可以自己生成样式。如果您想要有关可能样式的建议,请说明您当前使用的样式以及想要实现的更改。
sample.bib
举一个使用相同文件但参考书目样式发生变化的不同样式的例子:
\documentclass{article}
\bibliographystyle{alpha}
\begin{document}
Found in \cite{abk}.
\bibliography{sample}
\end{document}
这种样式产生(再次,仅来自的文本.pdf
):
在 [MWM+ 25] 中找到。
参考
[MWM+ 25] 一个男人、一个女人、第二个男人、第三个男人、第四个男人、第二个女人、第三个女人、第四个女人和第五个男人。这本书. 男人和女人,2025 年。
这根本不会截断参考书目中的作者数量(与使用 APA 样式的第一个示例不同)。
答案4
您可以unsrt
使用 重新设置样式custom-bib
。将以下内容复制到文件中myunsrt.dbj
:
\input docstrip
\preamble
\endpreamble
\postamble
\endpostamble
\keepsilent
\askforoverwritefalse
\def\MBopts{\from{merlin.mbs}{%
seq-no,% no sorting
nmlm,% limit number of names in bibliography
x5,% maximum number of names to appear
m5,% minimum number of names before et al. is written
}}
\generate{\file{myunsrt.bst}{\MBopts}}
\endbatchfile
然后用 TeX 将其
latex myunsrt.dbj
您会发现一些细微的差别unsrt
:
- 斜体文字后会有斜体修正
- 该
note
字段的第一个单词将大写 - 博士论文将显示为“博士论文”,而不是“博士论文”
- 论文标题也会被强调,就像文章标题或书名一样
- 地址和年份不会成为书名的一部分
incollection
,而是项目的一部分incollection
;这会改变地址、年份和出版商的顺序(年份始终是最后)
我认为,这些差异是有益的。您可以通过将文件中的m5
和更改为其他内容(例如和 )来更改您希望在参考书目中看到的作者数量。x5
dbj
m7
x7