
En una sección de referencia de mi documento, las referencias están agrupadas en categorías por sus palabras clave. Ahora quiero imprimir la bibliografía de cada sección según la categoría de la cita, por ejemplo, una bibliografía para artículos con palabra clave in
y una bibliografía con palabra clave out
. Por estética quiero que las bibliografías estén numeradas continuamente, como en esta maqueta 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).
Por lo tanto, uso defernumbers
de biblatex
para numerar las entradas continuamente. El problema es que esto lleva a que la numeración comience nuevamente con 1 para cada \printbibliography
.
Me gustaría habilitar defernumbers
a través de \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}
Producción
¡Por supuesto, se ofrecerá recompensa!
Respuesta1
Este problema surge de una funcionalidad inherente de biblatex
. Como se ve desdeotras preguntas, biblatex
tiene un implícito resetnumbers=true
que se aplica cuando se utiliza prefixnumbers
para agregar un prefijo a la etiqueta. Esto se puede abordar de diferentes maneras, pero solo a través de trucos que realmente cambien ligeramente el problema o alteren la forma en que se maneja/aplica el prefijo.
Dado que la intención de esta pregunta es subdividir cada bibliografía por sección (o capítulo, etc.), es posible aplicar la prefixnumber
configuración globalmente de una manera diferente, eliminando lo implícito resetnumbers=true
que se aplica en cada una \printbibliography
. Para ello, redefinimos la forma de imprimir la etiqueta, incorporando \thesection
al formato:
\DeclareFieldFormat{labelnumber}{\mkbibsecnum{#1}}
\newrobustcmd{\mkbibsecnum}[1]{\thesection-#1\relax}
Cada etiqueta se almacena como 1, 2, 3... pero tiene el formato del número de sección en el que aparece cuando se imprime. (Nota*: debido a que agregamos el prefijo de esta manera, el \printbibliography
comando debe aparecer en el mismo section
/ refsection
que las citas. En particular, esto significa que no puede usar este método para imprimir una bibliografía acumulativa al final con múltiples refsection
s subdivididas con \printbibliography[section=1...]
).
Llegados a este punto sólo queda restablecer la numeración en el punto adecuado (la primera bibliografía de cada uno refsection
) con \printbibliography[...resetnumbers=true]
.
Resultado
El resultado aparece como:
MWE
He realizado algunos cambios para que la solución sea más eficiente que en el MWE original.
refsection=section
(también podría ser ...=part
, ...=chapter
, etc.) se pasa globalmente para biblatex
recopilar referencias solo en cada sección. Esto se puede reemplazar con \newrefsection
/ \endrefsection
según corresponda para particionar manualmente los elementos de la bibliografía.
defernumbers=true
se conserva para ordenar cada subbibliografía secuencialmente.
También comenté algunas de las citas para acentuar el efecto de la numeración y refsection
s.
El MWE modificado que demuestra esta solución:
\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}
*La solución de @Guidoredefine todo el entorno de bibliografía y utiliza el contador de series de enumeración para continuar contando ciertas etiquetas pero no otras. Esto podría funcionar para este problema (y solucionaría el problema de la bibliografía acumulativa), pero no pude compilar el código con la numeración de secciones como lo solicitó el OP.