Bibtex 排序:为什么会出现这种行为?

Bibtex 排序:为什么会出现这种行为?

我不明白为什么 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, 的排序顺序plainauthor, 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 进行排版时,指令的参数将被丢弃,即只有被排版,一切正常。900220139003201490042014.bbl\noop{9001}2014\noop2014

相关内容