Biblatex、nocite および defernumbers で不明なキーが呼び出された場合のゼロ番号付け

Biblatex、nocite および defernumbers で不明なキーが呼び出された場合のゼロ番号付け

私の「実際の」例では、カウンターをリセットしてソートされた参考文献を印刷する必要があるため、defernumbers=trueと を\nocite{*}実際の引用と組み合わせて使用​​する必要があります。キーが欠落していると、番号付けがすべての場所でゼロに設定されることがわかりました。明らかに、すべてのキーが存在する最終文書ではこれは問題ではありませんが、文書の作成プロセスでは問題になります。この問題を修正する方法はありますか?

\documentclass{article}
\usepackage[defernumbers=true
]{biblatex}

\usepackage{filecontents}
\begin{filecontents}{mabiblio.bib}
@misc{A-01,
  author = {Author, A.},
  year = {2001},
  title = {Alpha},
}
@book{B02,
  author = {Buthor, B.},
  year = {2002},
  title = {Bravo},
  location = {Location},
  publisher = {Publisher},
}
@article{C03,
  author = {Cuthor, C.},
  year = {2003},
  title = {Charlie},
  journaltitle = {Journal title},
  volume = {1},
}
@article{C04,
  author = {Cuthor 2, C.},
  year = {2004},
  title = {Charlie},
  journaltitle = {Journal title},
  volume = {2},
}
@article{B03,
  author = {Buthor 2, C.},
  year = {2004},
  title = {Charlie},
  journaltitle = {Journal title},
  volume = {1},
}
\end{filecontents}
\addbibresource{mabiblio.bib}

\begin{document}

\cite{authorA-01}% \cite{B02} \cite{C03}
\section{Biblio}

\nocite{*}

\printbibliography

\end{document}

答え1

このdefernumbers機能は、ラベル番号をファイルに書き込むことによって機能します.auxbiblatexこれは、Biber 呼び出しによってソートが変更される可能性があり、ラベル番号も変更される可能性があるため、それ以上の Biber 呼び出しが必要なくなった場合にのみ実行されます。

エントリ キーが欠落しているか間違っている場合は、常に Biber 再実行要求が送信されます。つまり、ラベル番号はファイルに書き込まれません.aux

ドラフト段階で未定義のエントリ キーを引用する必要がある場合は、 を無効にするだけでよいかもしれませんdefernumbers

どうしても が必要な場合は、 Biber の再実行要求があってもdefernumbersにラベル番号を書き込む方法があります。.aux

\documentclass{article}
\usepackage[defernumbers=true]{biblatex}

\makeatletter
\blx@AtEndDocument{%
  \iftoggle{blx@defernumbers}
    {\iftoggle{blx@runbiber}
      {\def\do#1{\blx@auxwrite\@mainaux{}{#1}}
       \dolistloop\blx@localnumaux}
      {}}
    {}}
\makeatother

\begin{filecontents}{\jobname.bib}
@misc{A-01,
  author = {Author, A.},
  year = {2001},
  title = {Alpha},
}
@book{B02,
  author = {Buthor, B.},
  year = {2002},
  title = {Bravo},
  location = {Location},
  publisher = {Publisher},
}
@article{C03,
  author = {Cuthor, C.},
  year = {2003},
  title = {Charlie},
  journaltitle = {Journal title},
  volume = {1},
}
@article{C04,
  author = {Cuthor 2, C.},
  year = {2004},
  title = {Charlie},
  journaltitle = {Journal title},
  volume = {2},
}
@article{B03,
  author = {Buthor 2, C.},
  year = {2004},
  title = {Charlie},
  journaltitle = {Journal title},
  volume = {1},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
\cite{authorA-01}% \cite{B02} \cite{C03}
\section{Biblio}

\nocite{*}

\printbibliography
\end{document}

引用は定義されていませんが、参照は期待どおりに番号付けされています。

関連情報