С defernumbers, правильные числовые метки biblatex даже с skipbib, но неправильные в случае цитирования \AtEndDocument

С defernumbers, правильные числовые метки biblatex даже с skipbib, но неправильные в случае цитирования \AtEndDocument

Контекст: biblatex 2.9aи biber 1.9.

Благодаря defernumbers, biblatexцифровые метки верны даже при пропущенных записях в библиографии ( options={skipbib}), как показано в следующем MWE:

\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{skipbib-aaaa,
  title={Aaaa (skipped from bibliography)},
  options={skipbib}
}
@misc{bbbb,
  title = {Bbbb}
}
@misc{cccc,
  title={Cccc (manually added at end of document)}
}
@misc{dddd,
  title={Dddd (automatically added at end of document)}
}
\end{filecontents}
%
\usepackage[backend=biber,defernumbers]{biblatex}%
\addbibresource{\jobname.bib}
%
\begin{document}
\citetitle{skipbib-aaaa} and \citetitle{bbbb}
\printbibliography
\citetitle{cccc}%
% \AtEndDocument{and \citetitle{dddd}}
\end{document}

что дает (ascii art):

   Aaaa (skipped from bibliography) and Bbbb

References
[1] Bbbb.
[2] Cccc (manually added at end of document).

   Cccc (manually added at end of document)

Но как только добавляется цитата \AtEndDocument(путем комментирования предпоследней строки), числовые метки становятся неправильными (ASCII-арт):

   Aaaa (skipped from bibliography) and Bbbb

References
[2] Bbbb.
[3] Cccc (manually added at end of document).
[4] Dddd (automatically added at end of document).

   Cccc (manually added at end of document)
   and Dddd (automatically added at end of document)

Примечания:

  • С bibtexбэкэндом проблем нет.
  • С biblatex 3.0и biber 2.0все хуже: при добавлении цитаты \AtEndDocumentвсе числовые метки становятся 0.

решение1

biblatex выполняет много работы (очистки и т. д.) в хуке "end document". Вы должны убедиться, что ваша команда cite видна раньше. Так что либо переместите ваш \AtEndDocumentbefore \usepackage{biblatex}, либо добавьте код к хуку:

\citetitle{cccc}%
\makeatletter\preto\@enddocumenthook{and \citetitle{dddd}}\makeatother

(Я не знаю, предлагает ли какой-либо из пакетов исправлений команду "\PreToAtEndDocument").

Связанный контент