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работает путем записи номеров меток в .auxфайл. biblatexОна делает это только после того, как больше не требуются вызовы Biber, поскольку предполагается, что вызов Biber может потенциально изменить сортировку, а это означает, что номера меток также изменятся.

В случае отсутствия/неправильного ключа ввода вы всегда получите запрос на повторный запуск Biber, что означает, что номера меток никогда не будут записаны в .auxфайл.

Если вам необходимо ссылаться на неопределенные ключи ввода на этапе черновика, возможно, вы могли бы просто отключить defernumbers.

Если вы настаиваете 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}

Ссылка не определена, но ссылки по-прежнему пронумерованы, как и ожидалось.

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