当人们被那些熟悉的错误信息困扰时
! Package natbib Error: Bibliography not compatible with author-year citations,
如何找到导致问题的条目?我知道有很多答案描述了可能导致错误的原因(例如缺少字段year
),但是是否有一个工具可以列出会导致给定引用格式出现错误的所有条目?
答案1
最后你在你的问题中问道:
是否有一个工具可以列出所有会导致给定引用格式出错的条目?
您无法仅看到包裹natbib
或 BibTeX 文件。它们都是您必须一起测试的单元。
因此,只有一个“工具”可用于测试 BiBTeX 文件:
LaTeX 带调用包natbib
和完整的 BibTeX 文件。
使用以下 MWE 可以轻松完成此操作。我添加了两个bib
文件,一个没有错误,一个有错误,大家可以使用我的 natbib-bibtex-test-mwe 找到这些错误。只需将注释从一个命令移动\bibliography
到另一个命令即可。
命令\nocite{*}
显示全部生成的参考书目文件中有 bib 条目(在我的例子中有四个)。
包filecontents
用于将两个示例 bib 文件添加到 MWE,这样只需编译一个文件。实际上只需更改\jobname
为 bib 文件的文件名(.bib
请不要使用扩展名!)。
natbib-bibtex-测试-mwe:
\RequirePackage{filecontents} % loading package filecontents
% writing file \jobname.bib, for example mb-bibtex.bib.
% Creating bib file without errors:
\begin{filecontents*}{\jobname.bib}
@Book{Companion.1994,
author = {Goossens, Michel and Mittelbach, Frank and Samarin, Alexander},
title = {The LaTeX Companion},
edition = {1},
publisher = {Addison-Wesley},
location = {Reading, Mass.},
year = {1994},
}
@Book{adams.1980,
title = {The Restaurant at the End of the Universe},
author = {Douglas Adams},
series = {The Hitchhiker's Guide to the Galaxy},
publisher = {Pan Macmillan},
year = {1980},
}
@article{einstein,
author = {Albert Einstein},
title = {{Zur Elektrodynamik bewegter K{\"o}rper}. ({German})
[{On} the electrodynamics of moving bodies]},
journal = {Annalen der Physik},
volume = {322},
number = {10},
pages = {891--921},
year = {1905},
DOI = {http://dx.doi.org/10.1002/andp.19053221004},
}
@misc{mozart:KV183,
author = {Mozart, Wolfgang Amadeus},
title = {Sinfonie g-Moll},
year = {1773},
address = {Salzburg},
note = {New K{\"o}chelverzeichnis Nr. 183, old version Nr. 25;
Erster Satz: Allegro con brio, Zweiter Satz: Andante,
Dritter Satz: Menuetto, Vierter Satz: Allegro},
}
\end{filecontents*}
% Creating bib file with errors:
\begin{filecontents*}{\jobname-error.bib}
@Book{adams,
author = {Goossens, Michel and Mittelbach, Frank and Samarin, Alexander},
title = {The LaTeX Companion},
edition = {1},
publisher = {Addison-Wesley},
location = {Reading, Mass.}
year = {1994},
}
@Book{adams,
title = {The Restaurant at the End of the Universe},
author = {Douglas Adams},
series = {The Hitchhiker's Guide to the Galaxy},
publisher = {Pan Macmillan},
year = {1980}
}
@article{einstein,
title = {Zur Elektrodynamik bewegter K{\"o}rper. ({German})
[{On} the electrodynamics of moving bodies]},
journal = {Annalen der Physik},
volume = {322},
number = {10},
pages = {891--921},
DOI = {http://dx.doi.org/10.1002/andp.19053221004},
}
misc{mozart:KV183,
author = {Mozart, Wolfgang Amadeus},
title = {Sinfonie g-Moll},
year = {1773},
address = {Salzburg},
note = {New K{\"o}chelverzeichnis Nr. 183, old version Nr. 25;
Erster Satz: Allegro con brio, Zweiter Satz: Andante,
Dritter Satz: Menuetto, Vierter Satz: Allegro},
}
\end{filecontents*}
\documentclass{article}
\usepackage[numbers]{natbib} % bibliography style
\usepackage[colorlinks]{hyperref} % better urls in bibliography
\begin{document}
Test the complete \texttt{.bib} file. \nocite{*}
\bibliographystyle{plainnat} % needs package natbib
\bibliography{\jobname} % uses \jobname.bib, according to \jobname.tex
%\bibliography{\jobname-error} % uses \jobname.bib, according to \jobname.tex
\end{document}
无错误的 BibTeX 文件的结果:
文件并非无错误的结果(对于 bib 文件,我有 2 个错误和 6 个警告。 这两个警告filecontents
是正常的!):
对我来说,所有抛出的错误消息和警告都非常清楚。
最后的提示:如果您有一个很大的 BibTeX 文件,请复制其中的一部分并在特殊的测试 BiBTeX 文件中测试该部分,纠正错误并在单独的 BibTeX 测试文件中继续下一部分,依此类推。
答案2
此错误是由.bst
文件而不是.bib
文件中的条目引起的。通常,您必须使用与 natbib 兼容的 bst 文件和 natbib: abbrvnat
而不是abbrv
,unsrtnat
而不是unsrt
等。