我不明白为什么 bibtex 要以这种方式对以下参考文献进行排序。
\documentclass{article}
\begin{document}
Four citations: \cite{one,two,three,four}
\bibliographystyle{plain}
\bibliography{bib}
\end{document}
...使用以下 bib.bib 文件:
@inproceedings{one,
author = {Author Name},
title = {BBB title},
booktitle = {BBB Conference},
year = {2014}
}
@article{two,
author = {Author Name},
title = {BBB title},
journal = {Journal of Journals},
volume = {1},
year = {2013}
}
@inproceedings{three,
author = {Author Name},
title = {AAA title},
booktitle = {AAA Conference},
year = {2014}
}
@article{four,
author = {Author Name},
title = {AAA title},
journal = {Journal of Journals},
volume = {1},
year = {2014}
}
看起来 bibtex 先按“年份”排序,然后才按“标题”排序。但是,根据bibtex 文档,默认排序行为是在“年份”之前考虑“标题”。
问题:
在这个 MWE 中,如果默认行为是按“标题”在“年份”之前排序,那么为什么 bibtex 会按“年份”在“标题”之前排序?
答案1
根据 的文档bibtex
, 的排序顺序plain
是author, year, title
,正如OP所述,而不是author, title, year
。 这似乎是一个误解。
这是指朴素标准风格,而bibtex
手册第 2.2 节描述了这些变化:
如果author, title, year
要求排序,最好使用biblatex
带有sorting=nty
选项的包。(n = 姓名(作者))
\documentclass{article}
\usepackage[backend=bibtex,sorting=nty,sortcites=true]{biblatex}
\addbibresource{bib.bib}
\begin{document}
Four citations: \cite{one,two,three,four}
\printbibliography
\end{document}
利用sorting=nty
而sorting=nyt
产生默认plain
样式bibtex
backend=biber
请比较两个输出。如果使用 而不是 ,则结果是相同的bibtex
答案2
Christian Hupfer 的解决方案使用比布拉特克斯,优雅而简单。万一你不能使用 biblatex——比如,因为你必须使用基于 BibTeX 的参考书目样式,而 biblatex 中没有很好的对应样式,或者因为你提交论文的期刊需要BibTeX 的使用——这是一种通过 BibTeX 自身的机制实现作者-标题-年份排序的方法。
首先,创建一个名为\noop
(“无操作”)的宏并将其放在 bib 文件的顶部,如下所示:
@preamble{ "\newcommand{\noop}[1]{} " }
您可能想知道宏的意义是什么,它对其参数毫无作用——请继续阅读。
其次,在年份字段的内容前面加上\noop
说明:
@inproceedings{one,
author = {Author Name},
...
year = {\noop{9001}2014}
}
@article{two,
author = {Author Name},
...
year = {\noop{9002}2013}
}
@inproceedings{three,
author = {Author Name},
...
year = {\noop{9003}2014}
}
@article{four,
author = {Author Name},
...
year = {\noop{9004}2014}
}
这四条指令的参数\noop
不必是连续的整数,但如果您使用连续的整数,那么跟踪它们可能是最容易的。请注意,我建议使用一定范围的整数,这些整数显然不会被误认为是出版年份。
为什么这样做有效?重要的是要记住 BibTeX 和 LaTeX 之间的分工:BibTeX 汇编参考书目(并对条目进行排序),但 LaTeX 进行实际排版。在 BibTeX 运行期间,和noop{
部分}
被删除在排序步骤中,让 BibTeX 认为它正在处理四个带有年份字段的条目,这些字段的值如下:、、90012014
和,BibTeX 将按该顺序对条目进行排序。如果您仔细查看文件(BibTeX 放置其输出的位置),您会看到诸如、 等内容。最后,当 LaTeX 进行排版时,指令的参数将被丢弃,即只有被排版,一切正常。90022013
90032014
90042014
.bbl
\noop{9001}2014
\noop
2014