Recién comencé a usar biber/biblatex y tengo problemas para comprender parte de su comportamiento. No puedo imaginar que sea el primero en encontrarme con este problema, pero no pude encontrar una pregunta duplicada.
Cito varios artículos que se publican en la misma revista. Para garantizar que la información de la revista sea coherente en todas las citas, hice una entrada bibliográfica separada que contiene solo la información de la revista. Luego hago una referencia cruzada de esa entrada con las entradas del artículo. Un references.bib
archivo de ejemplo:
@article{myjournal,
journaltitle={Journal of Interesting Things},
publisher={Someone}
}
@article{myarticle1,
crossref={myjournal},
title={That thing},
author={Martypants, Susan},
year={2019},
}
@article{myarticle2,
crossref={myjournal},
title={That other thing},
author={Rofessor, Peter},
year={2020}
}
Ahora, cuando cito ambos myarticle1
y myarticle2
en mi documento, la lista de referencias contiene una línea adicional sin nombre y solo la información de la revista:
Un ejemplo práctico mínimo que produce este resultado es:
\documentclass{article}
\usepackage[backend=biber,style=alphabetic]{biblatex}
\addbibresource{references.bib}
\begin{document}
\cite{myarticle1,myarticle2}
\printbibliography{}
\end{document}
Curiosamente, si cito sólo uno de los dos artículos, el artículo "vacío" de la revista no aparece. (es decir, reemplazar \cite{myarticle1,myarticle2}
con da como \cite{myarticle1}
resultado una lista de referencia de un elemento en lugar de tres).
Soluciones alternativas:Puedo copiar y pegar la información de la revista en cada artículo y eliminar la referencia cruzada. Sin embargo, si luego quiero cambiar alguna información sobre la revista (por ejemplo, agregar una dirección del editor), tendré que revisar todas las entradas. Alternativamente, puedo eliminar la entrada manualmente del .bbl
archivo, lo que también da como resultado el resultado deseado. Ninguna de estas soluciones me resulta del todo satisfactoria.
Pregunta:¿Cuál es la forma preferida de estructurar el documento .bib
para que (a) no tenga que escribir y mantener información duplicada del diario y (b) el asiento del diario no aparezca como un elemento separado en la lista de referencias, a menos que se cite explícitamente?
¡Gracias por su ayuda!
Respuesta1
El crossref
campo es algo más que la simple herencia de datos. También se trata de establecer una determinada relación padre-hijo entre entradas (cf. el xref
campo, que sólo modela esta relación padre-hijo sin herencia de datos).
Una característica de esta relación padre-hijo es que una entrada padre se agrega automáticamente a la bibliografía si un cierto número de hijos hacen referencia a ella (incluso si no se cita explícitamente). El número exacto de referencias infantiles se puede controlar con la mincrossrefs
opción. Su valor predeterminado es 2
, lo que significa que una entrada principal se agrega a la bibliografía si al menos dos entradas secundarias (diferentes) hacen referencia a ella. Ese es el caso en su ejemplo: myjournal
hace referencia a myarticle1
y myarticle2
.
Una forma de evitarlo sería establecer mincrossrefs
un valor más alto (tal vez irrazonablemente alto) como 999
el sugerido porManuel Weinkaufen elcomentarios.
\documentclass{article}
\usepackage[backend=biber, style=alphabetic, mincrossrefs=999]{biblatex}
\begin{filecontents}{\jobname.bib}
@article{myjournal,
journaltitle = {Journal of Interesting Things},
publisher = {Someone},
}
@article{myarticle1,
crossref = {myjournal},
title = {That thing},
author = {Martypants, Susan},
year = {2019},
}
@article{myarticle2,
crossref = {myjournal},
title = {That other thing},
author = {Rofessor, Peter},
year = {2020},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\autocite{myarticle1,myarticle2}
\printbibliography
\end{document}
Una alternativa sería decir biblatex
que myjournal
es sólo un contenedor de datos y no una entrada que podría aparecer en la bibliografía por derecho propio. Eso se hace agregando options = {dataonly},
a la entrada. Esto no es diferenteCigarra'ssugerencia deoptions={skipbib=true},
, pero un poco más riguroso (ya que también evitará la creación de etiquetas, que de todos modos falla aquí, para ser justos). Sin embargo, esta solución myjournal
ni siquiera aparece en la bibliografía cuando se cita explícitamente.
\documentclass{article}
\usepackage[backend=biber, style=alphabetic]{biblatex}
\begin{filecontents}{\jobname.bib}
@article{myjournal,
journaltitle = {Journal of Interesting Things},
publisher = {Someone},
options = {dataonly},
}
@article{myarticle1,
crossref = {myjournal},
title = {That thing},
author = {Martypants, Susan},
year = {2019},
}
@article{myarticle2,
crossref = {myjournal},
title = {That other thing},
author = {Rofessor, Peter},
year = {2020},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\autocite{myarticle1,myarticle2}
\printbibliography
\end{document}
Si no desea establecer esta relación adicional entre padres e hijos, puede ser mejor elegir una herramienta diferente para el trabajo:Cigarracontenedores sugeridos @xdata
en elcomentarios.La biblatex
documentaciónexplica xdata
lo siguiente (§2.2.3Campos especiales, pag. 31)
Este campo hereda datos de una o más
@xdata
entradas. Conceptualmente, elxdata
campo está relacionado concrossref
yxref
:crossref
establece una relación lógica padre/hijo y hereda datos;xref
establece una relación lógica padre/hijo sin heredar datos;xdata
hereda datos sin establecer una relación. El valor dexdata
puede ser una clave de entrada única o una lista separada de claves. Consulte §3.13.6 para obtener más detalles.
Y eso parece encajar perfectamente: xdata
sin crossref
la relación padre-hijo que causó el comportamiento no deseado en primer lugar.
Sin embargo, cabe señalar que @xdata
las entradas no pueden aparecer en la bibliografía y no pueden citarse de manera útil. Además, la herencia de campos @crossref
puede tener en cuenta los tipos de entrada de las entradas primarias y secundarias y puede establecer reglas como si el title
campo de un @collection
padre se hereda como booktitle
un @incollection
campo secundario. Esto no es posible (y no tiene sentido) para @xdata
.
\documentclass{article}
\usepackage[backend=biber, style=alphabetic]{biblatex}
\begin{filecontents}{\jobname.bib}
@xdata{myjournal,
journaltitle = {Journal of Interesting Things},
publisher = {Someone},
}
@article{myarticle1,
xdata = {myjournal},
title = {That thing},
author = {Martypants, Susan},
year = {2019},
}
@article{myarticle2,
xdata = {myjournal},
title = {That other thing},
author = {Rofessor, Peter},
year = {2020},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\autocite{myarticle1,myarticle2}
\printbibliography
\end{document}
En este caso particular, todos los estilos estándar ignorarán el publisher
campo @article
s, por lo que solo heredarás un campo, a saber, el journal(title)
. La herencia de un solo campo también se puede modelar con @string
entradas. (Pero, por supuesto, esa no es una opción si desea heredar varios campos a la vez).
\documentclass{article}
\usepackage[backend=biber, style=alphabetic]{biblatex}
\begin{filecontents}{\jobname.bib}
@string{myjournal = {Journal of Interesting Things}}
@article{myarticle1,
journal = myjournal,
title = {That thing},
author = {Martypants, Susan},
year = {2019},
}
@article{myarticle2,
journal = myjournal,
title = {That other thing},
author = {Rofessor, Peter},
year = {2020},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\autocite{myarticle1,myarticle2}
\printbibliography
\end{document}
Todos los ejemplos publicados producen
Respuesta2
El comentario de Manuel Weinkauf fue efectivamente la solución:
\usepackage[backend=biber,style=alphabetic,mincrossrefs=99]{biblatex}
Lo agrego como respuesta para que se pueda cerrar la pregunta.