偶尔,我会看到使用 natbib 和 unsrtnat 样式的参考书目条目中插入了多余的逗号。为什么会发生这种情况?我该如何解决?
这是一个简单的例子:
\begin{filecontents*}{bibliography.bib}
@misc{bib1,
title="{Title One}",
url="https://dummyurl"
}
@misc{bib2,
title="{Title Two}",
url="https://dummyurl"
}
\end{filecontents*}
\documentclass[]{article}
\usepackage[numbers]{natbib}
\begin{document}
This is a citation.~\cite{bib1}
%%This is another citation.~\cite{bib2} %% <--- if this line is uncommented, both bib entries will have an extra comma after the title
\bibliographystyle{unsrtnat}
\bibliography{bibliography}
\end{document}
下面是我看到的截图:(左边显示 MWE 中注释掉的那一行的输出,右边显示取消注释后的输出)
答案1
这种行为源于unsrtnat
在参考书目中区分不同条目的方式。以下内容可能不完整,但据我对 MWE 进行一些更改并查看生成的.bbl
文件后所理解。
- 如果指定了作者,例如一个条目为“FirstNameA LastNameA”,另一个条目为“FirstNameB LastNameB”,则它们各自的标签
LastNameA()
为LastNameB()
- 如果没有指定姓氏,则使用名字代替:
FirstNameA()
,FirstNameB()
- 如果指定了日期,也会使用日期。这可以区分同一作者的条目,
LastNameA(2019)
例如LastNameA(1999)
- 如果多个条目具有相同的作者和日期,则会在标签中的日期中添加一个不可见的字母,但该字母不会出现在最终编译的文档中,例如
LastNameA(2019{\natexlab{a}})
,LastNameA(2019{\natexlab{b}})
等等 - 如果未指定作者和日期,则引用标签的前三个字符将用于识别条目:例如
bib()
,在问题中的 MWE 的情况下。
现在,对于 5. 的情况,当参考书目中有两个(或更多)条目的标签以相同的三个字符开头时,将应用 4. 的相同程序:它们的标签为bib({\natexlab{a}})
和bib({\natexlab{b}})
。
错误就出在这里:尽管这些条目没有指定日期,但隐形{\natexlab{a}}
和{\natexlab{b}}
生成的日期unsrtnat
仍然存在,因此被解释为日期。这导致人们natbib
认为日期已指定,但当然,最终 PDF 中的此字段不会打印任何内容。
为了避免这个问题,可以指定作者和/或日期,正如 David Purton 在他的评论中所建议的那样。否则,确保引文标签的前三个字符不同就足够了,例如,在上面的 MWE 中,除了定义bib1
and之外,还可以定义and 。bib2
1bib
2bib
答案2
因为 {\natexlab{b}} 将被视为日期;然而它是空的。
修改*.bst文件:
- 找到函数:FUNCTION {misc}
- 删除此行:format.date 输出
- 完毕。