我试图理解我在 Latex 书目和有两位以上作者的 bibitem 中遇到的有些令人惊讶的行为。这是一个简单的演示.bib
文件:
@article{s0,
title={Title},
author={Aaronson, Aaron},
journal={Journal},
year={Year},
}
@article{s1,
title={Title},
author={Aaronson, Aaron and Christopher, Christina},
journal={Journal},
year={Year},
}
@article{s2,
title={Title},
author={Aaronson, Aaron and Baker, Brian and Dudley, Diedre},
journal={Journal},
year={Year}
}
以下是一份包含参考书目的最简文档:
\documentclass{article}
\usepackage{natbib}
\bibliographystyle{plainnat}
\begin{document}
\nocite{*}
\bibliography{test}
\end{document}
根据列出的作者,我希望按字母顺序排列的参考文献列表具有以下参考顺序:
- 亚伦·阿伦森
- Aaron Aaronson、Brian Baker 和 Diedre Dudley
- 亚伦·亚伦森和克里斯蒂娜·克里斯托弗
事实上,当我建立这个文档时,我得到了以下内容:
这是怎么回事?有没有办法强制执行我期望的字母顺序?
答案1
使用plainnat
BibTeX 为 MWE 中的条目生成以下排序名称
aaronson aaron % s0
aaronson aaron christopher christina % s1
aaronson aaron zzYear baker brian dudley diedre % s2
最后一点可能有点令人惊讶,但却解释了正在发生的事情。
plainnat
本质上确保“Name et al.”排在“Name zz”下,排在所有其他“Name”/“Name and OtherName”组合之后。请记住,对于作者年份引文,您只会在引文中看到“Aaronson et al.”,而不会看到“Aaronson, Baker and Dudley”。因此,统一对“et al.”条目进行排序是有意义的,这样总是可以轻松找到它们,并且不需要有关合著者的额外知识(如果您的读者只知道引文标签,他们就不会知道这些知识)。
当然,对于那些认识合著者或只阅读参考书目的人来说,这种排序顺序可能有点奇怪。
如果您想强制不同的排序顺序,则需要.bst
直接修改文件。
在您的机器上找到
plainnat.bst
。您可以通过输入kpsewhich plainnat.bst
。您可以通过在命令行/终端中输入来执行此操作。或者,从 CTAN 获取该文件的副本http://mirrors.ctan.org/macros/latex/contrib/natbib/plainnat.bst将文件复制到 TeX 可以找到的位置。文档目录就可以了。另请参阅https://texfaq.org/FAQ-inst-wlcf
将文件重命名为
plainnat-allsort.bst
(LPPL 强烈建议重命名原始文件的已更改副本)查找
FUNCTION {sort.format.names}
(ll. 1207-1235) 并将完整函数定义替换为FUNCTION {sort.format.names} { 's := #1 'nameptr := "" s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't := nameptr #1 > { " " * namesleft #1 = t "others" = and { "zzzzz" * } { t sortify * } if$ } { t sortify * } if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ }
在文件顶部添加一条包含您的姓名、当前日期和更改的简短描述的评论。
在您的文档中使用
\bibliographystyle{plainnat-allsort}
而不是。\bibliographystyle{plainnat}
作为步骤 1 至 5 的替代方案,您可以在以下位置获取该文件的修补版本https://gist.github.com/moewew/6b7f057d814d8fbd3e3883bceeae91cd
\documentclass{article}
\usepackage{natbib}
\bibliographystyle{plainnat-allsort}
\begin{filecontents}{\jobname.bib}
@article{s0,
title = {Title},
author = {Aaronson, Aaron},
journal = {Journal},
year = {Year},
}
@article{s1,
title = {Title},
author = {Aaronson, Aaron and Christopher, Christina},
journal = {Journal},
year = {Year},
}
@article{s2,
title = {Title},
author = {Aaronson, Aaron and Baker, Brian and Dudley, Diedre},
journal = {Journal},
year = {Year}
}
\end{filecontents}
\begin{document}
\cite{s0,s1,s2}
\bibliography{\jobname}
\end{document}