[Tex/LaTex] biblatex advises defernumbers=true but details of references may be very hard to find

biblatexsubdividing

Update

In order to better illustrate my question, I change the MWE for a more complete one and explain a bit further what I mean.

Context

Consider the following MWE:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[%
  backend=biber,refsegment=section,
  % defernumbers=true,
]{biblatex}
%
\addbibresource{biblatex-examples.bib}
%
\pagestyle{empty}
\AtBeginDocument{\footnotesize}
\AtBeginBibliography{\footnotesize} 
\begin{document}
\section{First section}
\autocite{westfahl:space,herrmann,gillies}.
\printbibliography[heading=subbibliography,segment=\therefsegment]
%
\section{Second section}
\autocite{glashow,aksin,gillies,matuz:doody}.
\printbibliography[heading=subbibliography,segment=\therefsegment]
%
\printbibliography
\end{document}

Its compilation leads to this duplicated warning:

Package biblatex Warning: Setting 'defernumbers=true' recommended.

Advice not followed (defernumbers=false)

The result is not so bad IMHO (sort order as expected):

enter image description here

Advice followed (defernumbers=true)

Following the advice to set defernumbers=true, no warning but a an esoteric order of the labels: sorting is by name but the labels are not sorted in ascending order (see below the following image a much more complete example).

enter image description here

Much more complete example

Below is a more complete example that better illustrates the troubles coming from the non ascending order of the labels.

Children play: just by reading the resulting document as if it would be printed, try to find details of reference e.g. [84] cited in 2nd section ๐Ÿ™‚

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[cm]{fullpage}
\usepackage{multicol}
\usepackage[%
backend=biber,refsegment=section,
defernumbers=true,
]{biblatex}
%
\addbibresource{biblatex-examples.bib}
%
\pagestyle{empty}
\AtBeginDocument{\tiny}
\AtBeginBibliography{\tiny}

\begin{document}
\begin{multicols}{3}%
\section{First section}
\autocite{%
  gaonkar,%
  companion,%
  nietzsche:ksa1,%
  moore,%
  cicero,%
  augustine,%
  britannica,%
  maron,%
  kullback:reprint,%
  vizedom:related,%
  markey,%
  weinberg,%
  wassenberg,%
  augustine,%
  almendro,%
  knuth:ct:related,%
  murray,%
  sigfridsson,%
  geer,%
  westfahl:space,%
  bertram,%
  baez/article,%
  kastenholz,%
  shore,%
  kullback:related,%
  hammond,%
  worman,%
  knuth:ct:a,%
  spiegelberg,%
  knuth:ct:b,%
  aksin,%
  wilde,%
  sorace,%
  matuz:doody,%
  vangennep:related,%
  padhye,%
  cicero,%
  malinowski,%
  baez/online,%
  aristotle:anima,%
  kullback:reprint,%
  vangennep,%
  nietzsche:historie,%
  knuth:ct,%
  kant:ku,%
  piccato,%
  gaonkar:in,%
  piccato,%
  sarfraz,%
  glashow,%
  massa,%
  knuth:ct:e,%
  itzhaki,%
  jcg,%
  angenendt,%
  cms,%
  gaonkar,%
  knuth:ct:d,%
  padhye,%
  averroes/hercz,%
  kant:kpv,%
  moore,%
  vazques-de-parga,%
  nietzsche:ksa,%
  chiu,%
  geer,%
  knuth:ct,%
  reese,%
  maron,%
  knuth:ct:a,%
  sigfridsson,%
  knuth:ct:c,%
  hyman,%
  gonzalez,%
  kant:kpv,%
  gillies,%
  aristotle:rhetoric,%
  nussbaum,%
  britannica,%
  iliad,%
  brandt,%
  springer,%
  knuth:ct:e,%
  knuth:ct:related,%
  westfahl:frontier,%
  massa,%
  baez/online,%
  vangennep:trans,%
  moore:related,%
  jcg,%
  nussbaum,%
}
\printbibliography[heading=subbibliography,segment=\therefsegment,title=References
of section 1]
%
\section{Second section}
\autocite{%
  averroes/bland,%
  almendro,%
  vangennep:related,%
  murray,%
  averroes/hercz,%
  sarfraz,%
  bertram,%
  angenendt,%
  knuth:ct:c,%
  herrmann,%
  gerhardt,%
  companion,%
  aristotle:anima,%
  aristotle:rhetoric,%
  baez/article,%
  ctan,%
  moraux,%
  cms,%
  spiegelberg,%
  moore:related,%
  doody,%
  wassenberg,%
  reese,%
  matuz:doody,%
  coleridge,%
  ctan,%
  salam,%
  moraux,%
  loh,%
  vizedom:related,%
  aristotle:poetics,%
  malinowski,%
  laufenberg,%
  cotton,%
  salam,%
  aristotle:poetics,%
  gaonkar:in,%
  gonzalez,%
  knuth:ct:b,%
  glashow,%
  aristotle:physics,%
  nietzsche:ksa,%
  nietzsche:historie,%
  hammond,%
  vangennep:trans,%
  worman,%
  westfahl:space,%
  pines,%
  weinberg,%
  knuth:ct:d,%
  westfahl:frontier,%
  laufenberg,%
  nietzsche:ksa1,%
  kullback,%
  yoon,%
  chiu,%
  kant:ku,%
  vangennep,%
  aristotle:physics,%
  vazques-de-parga,%
  sorace,%
  yoon,%
  kowalik,%
  brandt,%
  aksin,%
  loh,%
  doody,%
  averroes/bland,%
  itzhaki,%
  kastenholz,%
  hyman,%
  shore,%
  kullback:related,%
  kowalik,%
  kullback,%
  jaffe,%
  gerhardt,%
  coleridge,%
  herrmann,%
  iliad,%
  springer,%
  cotton,%
  markey,%
  gillies,%
  pines,%
  wilde,%
  averroes/hannes,%
  averroes/hannes,%
  jaffe,%
}
\printbibliography[heading=subbibliography,segment=\therefsegment,title=References
of section 2]
%
\printbibliography
\end{multicols}
\end{document}

Question

Hence, we see defernumbers=true possibly makes details of references very hard to find. So, what are the pros of defernumbers=true?

Best Answer

The biblatex documentation explains the defernumbers option as follows (p. 55)

In contrast to standard LaTeX, the numeric labels generated by this package are normally assigned to the full list of references at the beginning of the document body. If this option is enabled, numeric labels [...] are assigned the first time an entry is printed in any bibliography.

and then further on (ยง3.13.5 Bibliography Filters and Citation Labels, p. 132)

The citation labels generated by this package are assigned to the full list of references before it is split up by any bibliography filters. They are guaranteed to be unique across the entire document (or a refsection environment), no matter how many bibliography filters you are using. When using a numeric citation scheme, however, this will most likely lead to discontinuous numbering in split bibliographies. Use the defernumbers package option to avoid this problem. If this option is enabled, numeric labels are assigned the first time an entry is printed in any bibliography.

This explains what you are seeing in your examples. With defernumbers=false the labels are assigned to the full set of references at the beginning of the document (according to the global sorting scheme). Since the global \printbibliography at the end prints all references with the global sorting scheme, the numbering there is 'correct'. In the local bibliographies, however, entries are 'skipped' now, so they don't read chronologically.

If you have defernumbers=true a reference gets its (unique) label the first time it is printed in any bibliography. So the numbers are chronological in the local bibliographies. With the notable exception of [1] that appears in both local lists. It can't be assigned [7] in the second list, because it is already [1]. And it can't be placed before all other references in the second list, because then the sorting would not be according to the sorting scheme. The global bibliography of course suffers the same fate: if entries are sorted according to the sorting scheme, the numbering is not going to be continuous.

You'll find that in the situation you have of

  1. local bibliographies with overlapping entries
  2. and a global bibliography

both settings give sub-par results. And it is not clear at all if and how that issue should be resolved, i.e. how 'good' output would look like in this case.

If you, however, have a document with non-overlapping sub-bibliographies (and no global bibliography) then defernumbers=true is preferable. Because then the numbering of the first bibliography will then be resumed by the second.

So you could argue that there are situations where defernumbers=true is preferable, while in other situations no defernumbers setting yields brilliant results. If you have 'local' bibliographies but want to give preference to a 'global' bibliography, then defernumbers=false might be the better choice, because then at least the global list will be good, while the local ones might not look as nice (but at least the numbering is strictly increasing for each list).

Note that many use cases for split bibliographies that do not include splitting by refsegment are probably going to be of the type 'multiple sub-bibliographies with non-overlapping entries without global list', where defernumbers=true is preferable. I can think of lists split by entry-type (@online vs not-@online; @books, @articles, ...), by unique keyword (split 'primary' and 'secondary' references), by author ('works by this author' vs. 'works by all the other people'), ...

tl;dr

In some situations both settings yield sub-par results. But in most cases with split bibliographies, defernumbers=true, which makes sure that the sub-bibliographies have proper numbering, is probably to be preferred.

Related Question