Unerwünschtes Element in der Referenzliste bei Verwendung von CrossRef mit Biber

Unerwünschtes Element in der Referenzliste bei Verwendung von CrossRef mit Biber

Ich habe gerade angefangen, Biber/Biblatex zu verwenden, und habe Probleme, einige seiner Verhaltensweisen zu verstehen. Ich kann mir nicht vorstellen, dass ich der Erste bin, der auf dieses Problem gestoßen ist, aber ich konnte keine doppelte Frage finden.

Ich zitiere mehrere Artikel, die in derselben Zeitschrift veröffentlicht wurden. Um sicherzustellen, dass die Zeitschrifteninformationen in allen Zitaten konsistent sind, habe ich einen separaten Bib-Eintrag erstellt, der nur die Zeitschrifteninformationen enthält. Ich verweise dann auf diesen Eintrag mit den Artikeleinträgen. Eine Beispieldatei references.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}
}

myarticle1Wenn ich nun in meinem Dokument sowohl als auch zitiere myarticle2, enthält die Referenzliste eine zusätzliche Zeile ohne Namen und nur die Zeitschrifteninformationen:

Ausgabe mit unerwünschtem Eintrag

Ein minimales funktionierendes Beispiel, das diese Ausgabe erzeugt, ist:

\documentclass{article}

\usepackage[backend=biber,style=alphabetic]{biblatex}
\addbibresource{references.bib}

\begin{document}
    
\cite{myarticle1,myarticle2}
    
\printbibliography{}
    
\end{document}

Interessanterweise erscheint der „leere“ Zeitschrifteneintrag nicht, wenn ich nur einen der beiden Artikel zitiere. (Das Ersetzen durch führt also \cite{myarticle1,myarticle2}zu \cite{myarticle1}einer Referenzliste mit einem statt drei Einträgen.)

Problemumgehungslösungen:Ich kann die Zeitschrifteninformationen in jeden Artikel kopieren und einfügen und den Querverweis entfernen. Wenn ich jedoch später einige Informationen zur Zeitschrift ändern möchte (z. B. eine Adresse des Herausgebers hinzufügen), muss ich alle Einträge durchgehen. Alternativ kann ich den Eintrag manuell aus der .bblDatei entfernen, was ebenfalls zum gewünschten Ergebnis führt. Keine dieser Lösungen ist für mich wirklich zufriedenstellend.

Frage:Welche Struktur sollte vorzugsweise gewählt werden, .bibdamit (a) ich die Zeitschrifteninformationen nicht doppelt eingeben und pflegen muss und (b) der Zeitschrifteneintrag nicht als separates Element in der Referenzliste erscheint, sofern er nicht ausdrücklich zitiert wird?

Ich danke Ihnen für Ihre Hilfe!

Antwort1

Bei dem crossrefFeld geht es um mehr als nur die Datenvererbung. Es geht auch darum, eine gewisse Eltern-Kind-Beziehung zwischen Einträgen herzustellen (vgl. das xrefFeld, welches diese Eltern-Kind-Beziehung nur ohne Datenvererbung modelliert).

Eine Besonderheit dieser Eltern-Kind-Beziehung besteht darin, dass ein Elterneintrag automatisch zur Bibliographie hinzugefügt wird, wenn er von einer bestimmten Anzahl von Kindern referenziert wird (auch wenn er nicht explizit zitiert wird). Die genaue Anzahl der Kindverweise kann mit der mincrossrefsOption gesteuert werden. Der Standardwert ist 2, was bedeutet, dass ein Elterneintrag zur Bibliographie hinzugefügt wird, wenn er von mindestens zwei (verschiedenen) Kindeinträgen referenziert wird. Dies ist in Ihrem Beispiel der Fall: myjournalwird referenziert von myarticle1und myarticle2.

Eine Möglichkeit, dies zu umgehen, wäre, mincrossrefseinen höheren (vielleicht unangemessen hohen) Wert einzustellen, wie 999von vorgeschlagenManuel WeinkaufimKommentare.

\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}

Eine Alternative wäre, anzugeben, biblatexdass myjournales sich nur um einen Datencontainer handelt und nicht um einen Eintrag, der als eigenständiger Eintrag in der Bibliographie erscheinen könnte. Dies geschieht durch Hinzufügen options = {dataonly},zum Eintrag. Dies ist nicht unähnlichZikade'SVorschlag vonoptions={skipbib=true},, aber etwas strenger (da dadurch auch die Erstellung von Labels vermieden wird, was hier, um fair zu sein, ohnehin fehlschlägt). Mit dieser Lösung myjournalerscheint es allerdings nicht einmal in der Bibliographie, wenn es explizit zitiert wird.

\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}

Wenn Sie diese zusätzliche Eltern-Kind-Beziehung nicht herstellen möchten, ist es möglicherweise besser, für diese Aufgabe ein anderes Werkzeug zu wählen:Zikadevorgeschlagene @xdataBehälter in derKommentare.Die biblatexDokumentationerklärt xdatawie folgt (§2.2.3Spezialgebiete, S. 31)

Dieses Feld erbt Daten von einem oder mehreren @xdataEinträgen. Konzeptionell xdata ist das Feld verbunden mit crossrefund xref: crossrefstellt eine logische Eltern-Kind-Beziehung her und erbt Daten; xrefstellt eine logische Eltern-Kind-Beziehung her, ohne Daten zu erben; xdataerbt Daten, ohne eine Beziehung herzustellen. Der Wert von xdatakann ein einzelner Eintragsschlüssel oder eine getrennte Liste von Schlüsseln sein. Weitere Einzelheiten finden Sie in §3.13.6.

Und das scheint gut zu passen: xdataEs crossreffehlt die Eltern-Kind-Beziehung, die das unerwünschte Verhalten überhaupt erst verursacht hat.

Dabei ist allerdings zu beachten, dass @xdataEinträge selbst nicht im Literaturverzeichnis erscheinen und auch nicht sinnvoll zitiert werden können. Darüber hinaus @crossrefkann die Feldvererbung mit die Eintragstypen der Eltern- und Kindeinträge berücksichtigen und Regeln aufstellen, wie das titleFeld eines Elternteils an ein Kind @collectionvererbt wird . Dies ist bei nicht möglich (und auch nicht sinnvoll) .booktitle@incollection@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}

In diesem speziellen Fall ignorieren alle Standardstile das publisherFeld für @articles, sodass Sie nur ein Feld erben, nämlich das journal(title). Einzelfeldvererbung kann auch mit @stringEinträgen modelliert werden. (Aber das ist natürlich keine Option, wenn Sie mehrere Felder auf einmal erben möchten.)

\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}

Alle veröffentlichten Beispiele erzeugen

[Mar19] Susan Martypants. „Dieses Ding“. In: Journal of Interesting Things (2019).//[Rof20] Peter Rofessor. „Dieses andere Ding“. In: Journal of Interesting Things (2020).

Antwort2

Der Kommentar von Manuel Weinkauf war tatsächlich die Lösung:

\usepackage[backend=biber,style=alphabetic,mincrossrefs=99]{biblatex}

Ich füge es als Antwort hinzu, damit die Frage geschlossen werden kann.

verwandte Informationen