MWE

MWE

Em uma seção do meu documento, as referências são agrupadas em categorias por suas palavras-chave. Agora quero imprimir a bibliografia de cada seção com base na categoria da citação, por exemplo, uma bibliografia para artigos com palavra-chave ine uma bibliografia com palavra-chave out. Por estética quero que as bibliografias sejam numeradas continuamente, como nesta maquete textual

**In**
[1-1] a. “a”. In: a (a).
[1-2] c. “c”. In: c (c).
[1-3] e. “e”. In: e (e).
**Out**
[1-4] b. “b”. In: b (b).
[1-5] d. “d”. In: d (d).

Portanto, eu uso defernumbersof biblatexpara numerar as entradas continuamente. O problema é que isso faz com que a numeração comece novamente com 1 para cada \printbibliography.

Eu gostaria de defernumbersativar \printbibliographyper \refsection.

MWE

\documentclass{article}
\pagestyle{empty}
\usepackage{filecontents}
\begin{filecontents*}{test.bib}
@article{a,
  title = {a},
  author = {a},
  journal = {a},
  year = {a},
  keywords = {in}
}
@article{b,
  title = {b},
  author = {b},
  journal = {b},
  year = {b},
  keywords = {out}
}
@article{c,
  title = {c},
  author = {c},
  journal = {c},
  year = {c},
  keywords = {in}
}
@article{d,
  title = {d},
  author = {d},
  journal = {d},
  year = {d},
  keywords = {out}
}
@article{e,
  title = {e},
  author = {e},
  journal = {e},
  year = {e},
  keywords = {in}
}
\end{filecontents*}
\usepackage[
  defernumbers=true,
  citestyle=numeric,
]{biblatex}
\defbibheading{subbibliography}[\bibname]{%
  \subsubsection*{#1}
}
\addbibresource{test.bib}
\begin{document}
\section{Testing biblatex}
\refsection
\cite{a,b,c,d,e}
\printbibliography[
  title={In},
  prefixnumbers={\thesection-},
  heading=subbibliography,
  keyword=in
]
\printbibliography[
  title={Out},
  prefixnumbers={\thesection-},
  heading=subbibliography,
  keyword=out
]
\endrefsection

\section{Testing biblatex}
\refsection
\cite{a,b,c,d,e}
\printbibliography[
  title={In},
  prefixnumbers={\thesection-},
  heading=subbibliography,
  keyword=in
]
\printbibliography[
  title={Out},
  prefixnumbers={\thesection-},
  heading=subbibliography,
  keyword=out
]
\endrefsection
\end{document}

Saída

insira a descrição da imagem aqui


Claro, recompensa será oferecida!

Responder1

Este problema surge de uma funcionalidade inerente do biblatex. Como visto deoutras perguntas, biblatextem um implícito resetnumbers=trueque é aplicado quando você usa prefixnumberspara adicionar um prefixo ao rótulo. Isso pode ser resolvido de diferentes maneiras, mas apenas por meio de hacks que realmente alterem ligeiramente o problema ou alterem a maneira como o prefixo é tratado/aplicado.

Como a intenção desta questão é subdividir cada bibliografia por seção (ou capítulo, etc), é possível aplicar a prefixnumberconfiguração globalmente de uma forma diferente, eliminando o implícito resetnumbers=trueque é aplicado em cada uma \printbibliography. Para isso, redefinimos a forma como a etiqueta é impressa, incorporando \thesectionao formato:

\DeclareFieldFormat{labelnumber}{\mkbibsecnum{#1}}
\newrobustcmd{\mkbibsecnum}[1]{\thesection-#1\relax}

Cada etiqueta é armazenada como 1, 2, 3... mas é formatada com o número da seção em que aparece quando é impressa. (Nota*: como estamos adicionando o prefixo desta forma, o \printbibliographycomando deve aparecer no mesmo section/ refsectionque as citações. Em particular, isso significa que você não pode usar este método para imprimir uma bibliografia cumulativa no final com múltiplos refsections subdivididos com \printbibliography[section=1...]).

Neste ponto, resta redefinir a numeração no ponto adequado (a primeira bibliografia de cada refsection) com \printbibliography[...resetnumbers=true].

Resultado

O resultado aparece como:

bibliografias subdivididas

MWE

Fiz algumas alterações para tornar a solução mais eficiente do que no MWE original.

refsection=section(também pode ser ...=part, ...=chapter, etc) é passado globalmente para biblatexcoletar referências apenas em cada seção. Isto pode ser substituído por \newrefsection/ \endrefsectionconforme apropriado para particionar manualmente os itens da bibliografia.

defernumbers=trueé mantido para classificar cada subbibliografia sequencialmente.

Também comentei algumas das citações para acentuar o efeito da numeração e refsections.

O MWE modificado demonstrando esta solução:

\documentclass{article}
\pagestyle{empty}
\usepackage{filecontents}
\begin{filecontents*}{test.bib}
@article{a,
  title = {a},
  author = {a},
  journal = {a},
  year = {a},
  keywords = {in}
}
@article{b,
  title = {b},
  author = {b},
  journal = {b},
  year = {b},
  keywords = {out}
}
@article{c,
  title = {c},
  author = {c},
  journal = {c},
  year = {c},
  keywords = {in}
}
@article{d,
  title = {d},
  author = {d},
  journal = {d},
  year = {d},
  keywords = {out}
}
@article{e,
  title = {e},
  author = {e},
  journal = {e},
  year = {e},
  keywords = {in}
}
\end{filecontents*}
\usepackage[
  defernumbers=true,
  citestyle=numeric,
  refsection=section % Each \section{...} starts a new refsection environment
]{biblatex}

% Format the labelnumber with \thesection prefix
\DeclareFieldFormat{labelnumber}{\mkbibsecnum{#1}}
\newrobustcmd{\mkbibsecnum}[1]{\thesection-#1\relax}

\defbibheading{subbibliography}[\bibname]{%
  \subsubsection*{#1}
}
\addbibresource{test.bib}
\begin{document}

\section{Testing biblatex} % New refsection, too!
Cite a \cite{a};
Cite b \cite{b};
Cite c \cite{c};
\printbibliography[
  title={In},
  heading=subbibliography,
  keyword=in,
  resetnumbers=true % The first bibliography in each refsection needs its numbers manually reset
]
\printbibliography[
  title={Out},
  heading=subbibliography,
  keyword=out
]

\section{Testing biblatex} % New refsection, too!
Cite b \cite{b};
Cite d \cite{d};
Cite e \cite{e}.
\printbibliography[
  title={In},
  heading=subbibliography,
  keyword=in,
  resetnumbers=true % The first bibliography in each refsection needs its numbers manually reset
]
\printbibliography[
  title={Out},
  heading=subbibliography,
  keyword=out
]
\end{document}

*A solução do @Guidoredefine todo o ambiente bibliográfico e usa o contador de séries enumeradas para continuar contando para determinados rótulos, mas não para outros. Isso pode funcionar para esse problema (e resolveria o problema da bibliografia cumulativa), mas não consegui compilar o código com a numeração das seções conforme solicitado pelo OP.

informação relacionada