如何使用BibTeX按照出现顺序排序引文?

382

默认情况下(使用“plain”样式),BibTeX按字母顺序排序引用。

如何按照文档中出现的顺序对引用进行排序?


53
有帮助的问题(已获赞),但这个问题不应该属于http://tex.stackexchange.com/吗? - Chthonic Project
21
@ChthonicProject,我认为tex.stackexchange.com直到2010年才开始运作,而这个问题是在2008年提出的。此外,这个问题太旧了无法迁移,因此它仍然存在于这里。 - Richard Erickson
4
删除 .aux 和 .bbl 文件并重新构建。 - Emad Aghaei
@EmadAghayi 对我不起作用。 - untreated_paramediensis_karnik
我遇到了与\documentclass[acmlarge]{acmart}相同的问题。 - user3582228
13个回答

303

这个问题有三个好的答案。

  • 如果你对unsrt参考文献样式的格式满意,那么可以使用它。
  • 使用makebst (链接)工具设计自己的参考文献样式。

而我的个人推荐是:

  • 使用biblatex(链接)。它是LaTeX世界中最完整和灵活的参考文献工具。

使用biblatex,你需要编写类似于下面的内容:

\documentclass[12pt]{article}
\usepackage[sorting=none]{biblatex}
\bibliography{journals,phd-references} % Where journals.bib and phd-references.bib are BibTeX databases
\begin{document}
\cite{robertson2007}
\cite{earnshaw1842}
\printbibliography
\end{document}

2
biblatex 包的一个明显优点是它允许使用 TeX 宏编辑参考文献样式,而不是使用奇怪的 BibTeX 巫术。其他包可能更适合快速/可靠的解决方案。 - Brendan
2
我需要补充一点,如果你正在使用biblatex的话,最好使用\addbibresource而不是\bibliography。所以,\addbibresource{journals.bib,phd-references.bib} - Custodio
2
我不得不使用\usepackage[backend=bibtex, sorting=none]{biblatex},否则参考文献将无法显示。 - Archisman Panigrahi
在我的情况下,使用splncs03_unsrt.bst解决了这个问题。 - Nav

192
改变
\bibliographystyle{plain}

\bibliographystyle{ieeetr}

然后重新构建几次,以替换使用 plain 样式时创建的 .aux 和 .bbl 文件。

或者直接删除 .aux 和 .bbl 文件并重新构建。

如果您使用的是 MiKTeX,则不需要下载任何额外的内容。


4
谢谢!非常好的解决方案,简单易行! - Antillar Maximus
7
如果您正在为ACM出版物撰写论文,则“unsrt”比“ieeetr”更好,因为后者适用于IEEE论文,其格式略有不同。 “unsrt”和“abbrv”产生相同类型的格式。您可能想查看此链接:http://sites.stat.psu.edu/~surajit/present/bib.htm。 - Ash Catchem
简单的答案出现了!虽然Will Robertsonbiblatex中心化的回答最终是LaTeX社区前进的方式,但LyX仍然缺乏对biblatex的内置支持,这是一个巨大(并且越来越尴尬)的障碍。自从第一次提出这个问题以来已经过去了八年!我永远不会理解LyX开发者的优先事项。现在是2016年。无人驾驶汽车和便携式超级计算机已经成为现实,但我们仍然被锁定在同样可怕的BibTeX石头上。 - Cecil Curry
3
它在Overleaf应用程序中无法运行。我按照https://www.overleaf.com/learn/how-to/Clearing_the_cache的指示在Overleaf中将它们删除,但问题仍未得到解决。 - Emad Aghaei
和 @EmadAghayi 一样,你是怎么解决这个问题的? - Travis
显示剩余4条评论

25
我想到的最好方法是使用“unsrt”样式,它似乎是经过微调的“plain”样式。例如:
\bibliographystyle{unsrt}
\bibliography{bibliography}

但如果我的风格不是默认的呢?


4
如果您正在使用自定义的BibTeX样式,您可以编辑它以删除SORT命令吗? - ChrisN
默认情况下,维基页面建议您使用 plain 样式。如果您粘贴时粗心大意,将会使用 plain 而不是 unsrt 样式。http://en.wikibooks.org/wiki/LaTeX/Bibliography_Management - Andras Gyomrey
如果这不起作用,请尝试删除 .bbl 文件,然后重新运行 LaTeX 编译。 - Matthias Luh

23

简短说明一下 - 我正在使用修改过的 plain.bst 版本,它位于我的Latex文件目录中。结果表明,按出现顺序进行排序是一个相对易于更改的内容;只需找到以下代码片段:

...
ITERATE {presort}

SORT
...

...并对其进行评论 - 我将其更改为:

...
%% % avoid sort:
%% ITERATE {presort}
%%
%% SORT
...

运行 bibtexpdflatexpdflatex 后,引用将按出现的顺序排序(也就是说,它们将是未排序的 :))。

谢谢!

编辑:刚刚意识到我写的实际上是 @ChrisN 的评论:“你能编辑一下把 SORT 命令去掉吗?”;)


14

你已经回答了自己的问题---unsrt用于将参考文献按出现顺序列出。

但你可能还想看一下natbib,这是一个非常灵活的引用包,我无法想象没有它该怎么生存。


7
“natbib”只会影响文档中的“\cite”命令的排版。尽管如此,“unsrtnat.bst”已经与其捆绑在一起以实现原帖子中寻求的效果。(我建议使用biblatex,除非最为重要的是绝对稳定性。) - Will Robertson

6
我是一个对Bibtex(以及Latex总体)有些陌生的人,我想重新启动这篇旧文章,因为我发现它在我的许多关于Latex参考书目排序的谷歌搜索中出现了。
我提供了更详细的答案,希望能帮助一些像我一样面临相同困难的新手。
以下是主要的.tex文件示例,其中调用了参考书目:
\documentclass{article}
\begin{document}

So basically this is where the body of your document goes.

``FreeBSD is easy to install,'' said no one ever \cite{drugtrafficker88}.

``Yeah well at least I've got chicken,'' said Leeroy Jenkins \cite{goodenough04}.

\newpage
\bibliographystyle{ieeetr} % Use ieeetr to list refs in the order they're cited
\bibliography{references} % Or whatever your .bib file is called
\end{document}

...以及 .bib 文件本身的示例:

@ARTICLE{ goodenough04,
AUTHOR    = "G. D. Goodenough and others", 
TITLE     = "What it's like to have a sick-nasty last name",
JOURNAL   = "IEEE Trans. Geosci. Rem. Sens.",
YEAR      = "xxxx",
volume    = "xx",
number    = "xx",
pages     = "xx--xx"
}
@BOOK{ drugtrafficker88,
AUTHOR    = "G. Drugtrafficker", 
TITLE     = "What it's Like to Have a Misleading Last Name",
YEAR      = "xxxx",
PUBLISHER = "Harcourt Brace Jovanovich, Inc."
ADDRESS   = "The Florida Alps, FL, USA"
}

请注意,.bib文件中的参考文献是按照相反顺序列出的,但引用的顺序与论文中引用的顺序相同。
有关.bib文件格式的更多信息,请访问此处:http://en.wikibooks.org/wiki/LaTeX/Bibliography_Management

3

如果您希望引用数量按顺序出现在文档中,可以添加此代码。但需要注意的是,在参考文献页面中,引用将不会按顺序排列:

\bibliographystyle{unsrt}

3

我经常使用参考文献样式natbib,因为它提供了相对完整的格式和标签。


3
我在overleaf中使用以下代码,可以将参考文献按升序排列:

\usepackage{cite}

\bibliographystyle{unsrt}


2

使用 unsrt 的问题在于格式。使用 \bibliographystyle{ieeetr} 可以按照引用顺序在文档中获取参考文献。


您对格式的说法似乎与被接受的(并且得到了大量赞同的)答案相矛盾。您能否澄清一下? - Zero3
ieeetr 似乎没有按照它们出现的顺序排序。 - vineeshvs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接