
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 in
e 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 defernumbers
of biblatex
para numerar as entradas continuamente. O problema é que isso faz com que a numeração comece novamente com 1 para cada \printbibliography
.
Eu gostaria de defernumbers
ativar \printbibliography
per \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
Claro, recompensa será oferecida!
Responder1
Este problema surge de uma funcionalidade inerente do biblatex
. Como visto deoutras perguntas, biblatex
tem um implícito resetnumbers=true
que é aplicado quando você usa prefixnumbers
para 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 prefixnumber
configuração globalmente de uma forma diferente, eliminando o implícito resetnumbers=true
que é aplicado em cada uma \printbibliography
. Para isso, redefinimos a forma como a etiqueta é impressa, incorporando \thesection
ao 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 \printbibliography
comando deve aparecer no mesmo section
/ refsection
que 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 refsection
s 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:
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 biblatex
coletar referências apenas em cada seção. Isto pode ser substituído por \newrefsection
/ \endrefsection
conforme 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 refsection
s.
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.