Acabei de começar a usar o biber/biblatex e estou tendo problemas para entender alguns de seus comportamentos. Não consigo imaginar que seja o primeiro a me deparar com esse problema, mas não consegui encontrar uma pergunta duplicada.
Estou citando vários artigos publicados na mesma revista. Para garantir que as informações do periódico sejam consistentes em todas as citações, fiz uma entrada separada contendo apenas as informações do periódico. Em seguida, cruzo essa entrada com as entradas do artigo. Um references.bib
arquivo de exemplo:
@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}
}
Agora, quando cito ambos myarticle1
e myarticle2
no meu documento, a lista de referências contém uma linha extra sem nome, e apenas as informações do periódico:
Um exemplo de trabalho mínimo que produz esta saída é:
\documentclass{article}
\usepackage[backend=biber,style=alphabetic]{biblatex}
\addbibresource{references.bib}
\begin{document}
\cite{myarticle1,myarticle2}
\printbibliography{}
\end{document}
Curiosamente, se eu citar apenas um dos dois artigos, o item “vazio” do periódico não aparece. (ou seja, substituindo \cite{myarticle1,myarticle2}
pelos \cite{myarticle1}
resultados de uma lista de referência de um item em vez de três.)
Soluções alternativas:Posso copiar e colar as informações do diário em todos os artigos e remover a referência cruzada. Porém, se mais tarde eu quiser alterar alguma informação sobre a revista (por exemplo, adicionar o endereço da editora), terei que passar por todas as entradas. Alternativamente, posso remover a entrada manualmente do .bbl
arquivo, o que também resulta na saída desejada. Nenhuma dessas soluções é bastante satisfatória para mim.
Pergunta:Qual é a maneira preferida de estruturar o livro .bib
para que (a) eu não precise digitar e manter informações duplicadas do diário e (b) o lançamento do diário não apareça como um item separado na lista de referências, a menos que seja explicitamente citado?
Obrigado pela ajuda!
Responder1
O crossref
campo envolve mais do que apenas herança de dados. Trata-se também de estabelecer uma certa relação pai-filho entre as entradas (cf. o xref
campo, que apenas modela esta relação pai-filho sem herança de dados).
Uma característica desta relação pai-filho é que uma entrada pai é automaticamente adicionada à bibliografia se for referida por um certo número de filhos (mesmo que não seja citada explicitamente). O número exato de referências filhas pode ser controlado com a mincrossrefs
opção. Seu valor padrão é 2
, o que significa que uma entrada pai será adicionada à bibliografia se for referida por pelo menos duas entradas filhas (diferentes). Esse é o caso do seu exemplo: myjournal
é referenciado por myarticle1
e myarticle2
.
Uma maneira de contornar isso seria definir mincrossrefs
um valor mais alto (talvez excessivamente alto), como 999
sugerido porManuel Weinkaufnocomentários.
\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}
Uma alternativa seria dizer biblatex
que myjournal
se trata apenas de um contêiner de dados e não de uma entrada que poderia aparecer na bibliografia por si só. Isso é feito adicionando options = {dataonly},
à entrada. Isto não é diferenteCigarradesugestão deoptions={skipbib=true},
, mas um pouco mais rigoroso (já que também evitará a criação de rótulos, o que de qualquer maneira falha aqui, para ser justo). Com esta solução myjournal
nem aparece na bibliografia quando citada explicitamente.
\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}
Se você não quiser estabelecer essa relação pai-filho adicional, talvez seja melhor escolher uma ferramenta diferente para o trabalho:Cigarrarecipientes sugeridos @xdata
nocomentários.A biblatex
documentaçãoexplica xdata
da seguinte forma (§2.2.3Campos Especiais, pág. 31)
Este campo herda dados de uma ou mais
@xdata
entradas. Conceitualmente, oxdata
campo está relacionado acrossref
exref
:crossref
estabelece uma relação lógica pai/filho e herda dados;xref
estabelece uma relação lógica pai/filho sem herdar dados;xdata
herda dados sem estabelecer uma relação. O valor dexdata
pode ser uma chave de entrada única ou uma lista separada de chaves. Consulte §3.13.6 para obter mais detalhes.
E isso parece uma ótima opção: xdata
sem crossref
a relação pai-filho que causou o comportamento indesejado em primeiro lugar.
Deve-se notar, entretanto, que @xdata
as entradas não podem aparecer na bibliografia e não podem ser citadas de forma útil. Além disso, a herança de campo @crossref
pode levar em consideração os tipos de entrada das entradas pai e filho e pode configurar regras como se o title
campo de um @collection
pai fosse herdado como booktitle
para um @incollection
filho. Isso não é possível (e não faz 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}
Neste caso específico, todos os estilos padrão irão ignorar o publisher
campo para @article
s, então você estará herdando apenas um campo, ou seja, o journal(title)
. A herança de campo único também pode ser modelada com @string
entradas. (Mas é claro que isso não é uma opção se você quiser herdar vários campos de uma só 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 os exemplos postados produzem
Responder2
O comentário de Manuel Weinkauf foi de facto a solução:
\usepackage[backend=biber,style=alphabetic,mincrossrefs=99]{biblatex}
Estou adicionando como resposta para que a pergunta possa ser encerrada.