How to sort BibTeX references in reverse chronological order?

Here's a solution using biblatex:

\documentclass{article}

\usepackage[sorting=ydnt]{biblatex}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@misc{a01,
  author = {Author, A.},
  year = {2001},
  title = {Alpha},
}
@misc{b03,
  author = {Buthor, B.},
  year = {2003},
  title = {Bravo},
}
@misc{c02,
  author = {Cuthor, C.},
  year = {2002},
  title = {Charlie},
}
\end{filecontents}

\addbibresource{\jobname.bib}

\nocite{*}

\begin{document}

\printbibliography

\end{document}

enter image description here

See sections 3.1.2.1 and 3.5 of the biblatex documentation for details.


The bibliography style plainyr is a good starting point if you don't want to (or cannot) use biblatex. This style is similar to plain, but sorts the references chronologically by year. To get reverse chronological order, copy plainyr.bst to another file (such as plainrevyr.bst). Edit the new file and replace every occurrence of ITERATE with REVERSE as described in the previous answer.

plainyr.bst is the best starting point because it is the only default style that uses date as the primary sorting field, as described in http://www.ee.ic.ac.uk/hp/staff/dmb/perl/b4w_using.html#Sort

If you attempt to replace ITERATE with REVERSE in any other style you will change the sort order, but not the primary sort field. For example, starting with ieeetr results in a bibliography that is mostly sorted in reverse chronological order...and mostly isn't good enough for your CV!


If you're willing to customise an existing style (any existing style which orders things in ascending date order), then take the corresponding .bst file, head to the bottom, and replace ITERATE {call.type$} with REVERSE {call.type$}.

Details: You can find the existing file with (on unixes) kpsewhich plain.bst (if you want to customize the plain style). Copy that file to, say, myplain.bst, edit it, and then use {myplain} as your bibliographystyle.

Edited to clarify which ITERATE call to change.