Biblatex, numeração zero quando uma chave desconhecida é chamada com nocite e defernumbers

Biblatex, numeração zero quando uma chave desconhecida é chamada com nocite e defernumbers

No meu exemplo "real", preciso imprimir bibliografias ordenadas com contador zerado, então preciso usar defernumbers=truee preciso usar \nocite{*}juntamente com citações reais. Descobri que quando falta uma chave, a numeração é zerada em todos os lugares. Obviamente para o documento final, onde todas as chaves estão presentes, isso não é um problema, mas no processo de redação do documento é. Você tem uma maneira de corrigir esse problema?

\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}

Responder1

O defernumbersrecurso funciona gravando os números das etiquetas no .auxarquivo. biblatexsó faz isso quando nenhuma outra chamada Biber for necessária, porque a expectativa é que uma chamada Biber possa potencialmente alterar a classificação, o que significaria que os números dos rótulos também mudariam.

No caso de uma chave de entrada ausente/errada, você sempre receberá uma solicitação de nova execução do Biber, o que significa que os números dos rótulos nunca serão gravados no .auxarquivo.

Se você precisar citar chaves de entrada indefinidas durante a fase de rascunho, talvez você possa simplesmente desabilitar defernumbers.

Se você insiste defernumbers, aqui está uma maneira de escrever os números das etiquetas, .auxmesmo que haja uma solicitação de reexecução do Biber.

\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}

Citação indefinida, mas as referências ainda são numeradas conforme o esperado.

informação relacionada