defernumbers を使用すると、skipbib を使用しても biblatex の数値ラベルは正しく表示されますが、引用 \AtEndDocument の場合は正しく表示されません。

defernumbers を使用すると、skipbib を使用しても biblatex の数値ラベルは正しく表示されますが、引用 \AtEndDocument の場合は正しく表示されません。

コンテクスト: biblatex 2.9aそしてbiber 1.9

のおかげでdefernumbers、次の MWE に示すように、biblatex参考文献 ( ) からエントリがスキップされた場合でも、数値ラベルは正しく表示されます。options={skipbib}

\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 アート):

   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(最後から 2 番目の行をコメント アウトすることによって)、数値ラベルが間違ってしまいます(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 は、「ドキュメントの終了」フックで多くの作業 (クリーンアップやその他の作業) を行っています。cite コマンドが前もって表示されるようにする必要があります。そのため、 before を移動するか\AtEndDocument\usepackage{biblatex}コードをフックの先頭に追加します。

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

(パッチ パッケージの 1 つに "\PreToAtEndDocument" コマンドが用意されているかどうかはわかりません)。

関連情報