4

The context is that I have to cite some old sources (music manuscripts) whose date is only approximative. The simple solution is to have this as "ca. 1710" or whatever is the approximative year. However, this creates a problem when it gets sorted in the final bibliography, as these works should come before later works (usually printed re-editions) by the same author.

Currently in my bibliography (using the citations given at the bottom) the order is

Bach, Johann Sebastian (1853)

Bach, Johann Sebastian (ca. 1710)

Bach, Johann Sebastian et Anna Magdalena Bach (ca. 1730)

While the proper order should have the 1853 printed edition after the ca. 1710 manuscript.

I've tried different ways to solve this, including toying with the bib.sort.order function so as to simply ignore years, but that doesn't quite seem to fix it and it unsurprisingly creates problems with other entries which then don't sort properly.

I'm using natbib with author-date citations and a custom (french-language) bst file (the sorting is otherwise alphabetically by author, and then by year).

@book{bach1710,
  url={http://sammlungen.ub.uni-frankfurt.de/musikhs/content/titleinfo/4730749},
  title={Frankfurt am Main, Stadt- und Universitäts- Bibliothek, collection du Manskopfsches Museum für Muzik und Theatergeschichte, Mus.Hs. 1538},
  author={Bach, Johann Sebastian},
  year={ca. 1710}
}

@book{bach1730,
  url={https://www.bach-digital.de/receive/BachDigitalSource_source_00001141},
  title={Staatsbibliothek zu Berlin, collection du Preußischer Kulturbesitz, D-B Mus.ms. Bach P 226 Faszikel 9},
  author={Bach, Johann Sebastian and Bach, Anna Magdalena},
  year={ca. 1730},
}

@incollection{bach1853,
  author={Bach, Johann Sebastian},
  title={Ouverture nach Französischer Art},
  volume={3},
  editor={Becker, Carl Ferdinand},
  booktitle={Bach-Gesellschaft Ausgabe},
  publisher={Breitkopf und Härtel},
  address={Leipzig},
  year={1853},
}
1
  • 1
    Can you provide a small working example demonstrating the issue, so that those who would help you don't have to type one in themselves? Oct 14, 2020 at 13:17

1 Answer 1

4

There's an old, well-established trick in BibTeX circles to deal with just the issue you describe: to insert a judiciously chosen \noopsort directive in various places, to override BibTeX's default sorting rules without affecting the way the bibliographic entry is typeset by LaTeX. Essentially, one defines

\newcommand{\noopsort}[1]{}

and changes the field

  year         = {ca. 1710},

to

  year         = {{\noopsort{1710}}ca. 1710},

Likewise, one changes the field

  year         = {ca. 1730},

to

  year         = {{\noopsort{1730}}ca. 1710},

This works because during BibTeX's preliminary purification step (I'm not making this up)

the fields get changed to

  year         = {1710ca. 1710},

and

  year         = {1730ca. 1730},

respectively, for sorting purposes; that way, one guarantees that the former entry will indeed show up before the entry with year 1853.

For more on this subject, see BibTeX handling of the Dutch “van” name prefix with natbib, Twin reference in wrong order, and Problem using \noopsort to sort on 'year' using natbib. The latter posting also features an answer by egreg that shows how to get around natbib's propensity to choke on the presence of curly braces in the year field.

enter image description here

\documentclass{article}
\begin{filecontents}[overwrite]{mybib.bib}
@book{bach1710,
  author       = "Bach, Johann Sebastian",
  year         = "{\noopsort{1710}}ca. 1710",
  url          = "http://sammlungen.ub.uni-frankfurt.de/musikhs/content/titleinfo/4730749",
  title        = "Collection du Manskopfsches Museum für Muzik und
                  Theatergeschichte, Mus.Hs. 1538",
  publisher    = "Stadt- und Universitäts-\hspace{0pt}Bibliothek",
  address      = "Frankfurt am Main",
}
@book{bach1730,
  author       = "Bach, Johann Sebastian and Bach, Anna Magdalena",
  year         = "{\noopsort{1730}}ca. 1730",
  url          = "https://www.bach-digital.de/receive/BachDigitalSource_source_00001141",
  title        = "Collection du Preußischer Kulturbesitz, D-B Mus.ms.
                  Bach P 226 Faszikel 9",
  publisher    = "Staatsbibliothek zu Berlin",
}
@incollection{bach1853,
  author       = "Bach, Johann Sebastian",
  year         = 1853,
  title        = "{Ouverture nach Französischer Art}",
  volume       = 3,
  editor       = "Becker, Carl Ferdinand",
  booktitle    = "Bach-Gesellschaft Ausgabe",
  publisher    = "Breitkopf und Härtel",
  address      = "Leipzig",
}
\end{filecontents}

\usepackage[T1]{fontenc}
\newcommand{\noopsort}[1]{} % old BibTeX trick

\usepackage{xurl}
\usepackage{natbib}
\bibliographystyle{plainnat}

%% See https://tex.stackexchange.com/a/39718/5001
\makeatletter
\let\NAT@bare@aux\NAT@bare
\def\NAT@bare#1(#2){%
 \begingroup\edef\x{\endgroup
   \unexpanded{\NAT@bare@aux#1}(\@firstofone#2)}\x}
\makeatother

\begin{document}
\nocite{*}
\bibliography{mybib}
\end{document} 
1
  • 1
    Thanks for the in-depth explanation.
    – AlexJ
    Oct 14, 2020 at 14:21

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .