Die Frage

Die Frage

Die Frage

Wie kann ich sicherstellen, dass Querverweiseinträge in einer .bibDatei enthalten sind biber, die ich für ein Dokument erstelle, wenn das Dokument nicht die Querverweiseinträge selbst zitiert, sondern nur die Einträge, die auf sie verweisen? Um es klarzustellen: Ich möchte nicht, dass die Querverweiseinträge separat im Literaturverzeichnis erscheinen, sondern ich brauche sie in der .bibDatei, damit vollständige Daten für die Einträge verfügbar sind, die ich zitiere.

Hintergrund

Betrachten Sie das folgende Dokument, das eine reguläre Datenbank mit Bibliografieeinträgen verwendet (hier als enthalten orig.bib):

\documentclass{article}
\usepackage[backend=biber]{biblatex}
  \bibliography{orig}
\usepackage{filecontents}
\begin{filecontents}{orig.bib}
@bookinbook{author-bk1,
  crossref = {author-bigbk},
  title = {Originally a Separate Book},
  pages = {345--789}}

@suppbook{author-essays-intro,
  crossref = {author-essays},
  title = {Introduction},
  pages = {1--8}}

@incollection{author-essay,
  crossref = {editor-collection},
  title = {My Essay},
  pages = {8-34},
  author = {Author, Bit Busy}}

@book{author-bigbk,
  author = {Author, Prolific},
  title = {Collected Works},
  year = 1453,
  publisher = {Printers 'R Us},
  address = {Milky Way}}

@book{author-essays,
  title = {Essays},
  author = {Author, Busy},
  year = 1578,
  publisher = {We Print 4U},
  address = {Alpha Centauri}}

@book{editor-collection,
  editor = {Editor, Fair},
  booktitle = {Collection of People's Thoughts},
  year = 1679,
  publisher = {Great Collections in Print},
  address = {Earth}}
\end{filecontents}

\begin{document}

\autocites{author-bk1,author-essays-intro,author-essay}

\printbibliography

\end{document}

Wie erwartet ergibt sich daraus folgendes:

Vollständige Referenzliste

Das Versprechen

Nehmen wir nun an, ich möchte eine Datei erstellen .bib, die nur die Einträge enthält, die für dieses bestimmte Dokument erforderlich sind. (Bei diesem Beispiel wäre das natürlich sinnlos, da orig.bibnichts anderes enthalten ist, aber das ist natürlich normalerweise nicht der Fall.)

Im biberHandbuch von finde ich Folgendes:

3.1.1 Die Option output_format

Biber kann ... BibTeX-.bib-Dateien ausgeben. Die Ausgabe von .bib ist im Tool-Modus möglich, wenn Sie eine ganze Datenquellendatei unabhängig von einem bestimmten Dokument konvertieren (siehe Abschnitt 3.12). Dies ist auch nützlich, wenn Sie statt einer .bbl-Datei eine neue .bib-Datei möchten, die nur die zitierten Einträge aus einem Dokument enthält, sodass Sie beispielsweise ein minimal vollständiges Paket zum Satz an jemanden senden können. Dazu würden Sie Biber nach dem ersten LaTeX-Lauf folgendermaßen aufrufen:

biber --output_format=bibtex test.bcf 

Das Ergebnis wäre eine neue .bib-Datei mit dem Namen test_biber.bib, die alle zitierten Einträge in test.tex in der Reihenfolge der Zitate enthält und entsprechend den verschiedenen ouput_*-Optionen formatiert ist.

Also versuche ich Folgendes:

biber --output_format=bibtex prawf3.bcf

Das Problem

Mein Versuch erzeugt prawf3_biber.bib:

@BOOKINBOOK{author-bk1,
  CROSSREF = {author-bigbk},
  PAGES    = {345--789},
  TITLE    = {Originally a Separate Book},
}

@SUPPBOOK{author-essays-intro,
  CROSSREF = {author-essays},
  PAGES    = {1--8},
  TITLE    = {Introduction},
}

@INCOLLECTION{author-essay,
  AUTHOR   = {Author, Bit Busy},
  CROSSREF = {editor-collection},
  PAGES    = {8-34},
  TITLE    = {My Essay},
}

was natürlich nicht das ist, was Sie sich erhoffen, da die Verwendung dieser .bibDatei eindeutig nicht die gewünschten Ergebnisse liefert. Das heißt:

\documentclass{article}
\usepackage[backend=biber]{biblatex}
  \bibliography{prawf3_biber}

\begin{document}

\autocites{author-bk1,author-essays-intro,author-essay}

\printbibliography

\end{document}

wird auf Probleme stoßen, wenn biberausgeführt wird:

INFO - Found 3 citekeys in bib section 0
INFO - Processing section 0
INFO - Looking for bibtex format file 'prawf3_biber.bib' for section 0
INFO - Found BibTeX data source 'prawf3_biber.bib'
WARN - I didn't find a database entry for crossref 'author-bigbk' in entry 'author-bk1' - ignoring (section 0)
WARN - I didn't find a database entry for crossref 'author-essays' in entry 'author-essays-intro' - ignoring (section 0)
WARN - I didn't find a database entry for crossref 'editor-collection' in entry 'author-essay' - ignoring (section 0)

was offensichtlich nur zu erwarten ist, da die mit Querverweisen versehenen Einträge nicht vorhanden sind.

biberDas Handbuch von bespricht zwar die Verwendung von CrossRef-Daten im tool-Modus, aber das scheint nur beim Konvertieren einer gesamten Datenquelle zu gelten. Wenn ich das also auf anwenden wollte orig.bib, könnte ich das tun und dann die (jetzt vollständigen) Einträge mit dem obigen Befehl in extrahieren prawf3_biber.bib. [Zumindest gehe ich davon aus, dass ich das könnte – ich habe es nicht getestet.]

Die Frage noch einmal betrachtet

Aber wie kann ich sicherstellen, dass die Einträge in der generierten .bibDatei mit Daten aus den Querverweiseinträgen ergänzt werden?ohneKonvertieren der Originaldatei .bibundohneunter Zitierung der im Dokument enthaltenen Querverweise?

Antwort1

Ich habe endlich herausgefunden, wie das geht. In der Dokumentation sieht es so aus, als ob die Verwendung von --output_formatin der von mir beschriebenen Weise sich vom Aufrufmodus unterscheidet tool. Die Art und Weise, wie crossrefDaten dort behandelt werden, scheint für den hier betroffenen Fall also nicht relevant zu sein. Allerdings

biber --help

ist eher hilfreich. Insbesondere heißt es darin, dass--output_format=bibtex macht nur Sinn im toolModus. Da diese Option also, wie die Dokumentation nahelegt, eindeutig für solche Fälle vorgesehen ist, muss es sinnvoll sein, toolauch hier den Modus zu verwenden. Darüber hinaus ist die Befehlshilfe für relativ einfache Anwendungen auch viel einfacher zu verstehen. Während die Dokumentation zum toolModus sehr detailliert auf die Konfiguration der richtigen Verarbeitungsarten für verschiedene Datenquellentransformationen eingeht, werden die grundlegenden Optionen in der Befehlshilfe besser erläutert.

Insbesondere stellt sich heraus, dass es eine Option gibt, genau das zu tun, was hier gewünscht wird:

biber --output_format=bibtex --output_resolve prawf3.bcf

Dies bewirkt, dass die Querverweise nicht in die resultierenden Einträge aufgenommen werden .bib. Stattdessen wird Folgendes ausgeführt:vollständigdie Einträge, die sie verwenden, mit Daten aus den referenzierten Einträgen. Das Ergebnis prawf3_biber.bib:

@BOOKINBOOK{author-bk1,
  AUTHOR     = {Author, Prolific},
  BOOKAUTHOR = {Author, Prolific},
  BOOKTITLE  = {Collected Works},
  LOCATION   = {Milky Way},
  PAGES      = {345--789},
  PUBLISHER  = {Printers 'R Us},
  TITLE      = {Originally a Separate Book},
  YEAR       = {1453},
}

@SUPPBOOK{author-essays-intro,
  AUTHOR     = {Author, Busy},
  BOOKAUTHOR = {Author, Busy},
  BOOKTITLE  = {Essays},
  LOCATION   = {Alpha Centauri},
  PAGES      = {1--8},
  PUBLISHER  = {We Print 4U},
  TITLE      = {Introduction},
  YEAR       = {1578},
}

@INCOLLECTION{author-essay,
  AUTHOR    = {Author, Bit Busy},
  BOOKTITLE = {Collection of People's Thoughts},
  EDITOR    = {Editor, Fair},
  LOCATION  = {Earth},
  PAGES     = {8-34},
  PUBLISHER = {Great Collections in Print},
  TITLE     = {My Essay},
  YEAR      = {1679},
}

was für viele Zwecke tatsächlich besser ist, als die mit Querverweisen versehenen Einträge separat aufzunehmen.

Antwort2

Wenn überhaupt möglich, ist aus offensichtlichen Gründen (vor allem der Bequemlichkeit) die Antwort von cfr vorzuziehen.

Wenn man jedoch vermeiden möchte, wie Biber Querverweise auflöst, und alle Einträge getrennt halten möchte – etwa, weil man mehrere Artikel aus einer Essaysammlung zitieren möchte und deshalb jeder Essay in der Bibliografie nur auf das Buch verweisen muss und nicht die vollständige bibliografische Referenz angeben muss –, könnte man etwa Folgendes tun:

latex      basefile.tex 
biber -m 1 basefile.bcf     # `--mincrossref | -m 1` produces a .bbl with all the references
bbl2nocite basefile tmpfile # see below
latex      basefile.tex
biber --output_format=bibtex basefile.bcf # produces `basefile_biber.bib`

Damit dies funktioniert, müssen Sie irgendwie wissen, \inputwas Sie extrahieren .bbl. Ich habe dies mit einem hirnlosen bbl2nociteSkript gemacht, das im Wesentlichen nur zusammenfasst grepund sed:

#!/bin/bash
#
# Find and convert all lines in a .bbl file from
# \entry{<key>}{<entrytype>}{}
# to
# \nocite{<key>}
#
# usage: bbl2nocite inputfile outputfile
INFILE=$1
OUTFILE=$2

grep '\\entry' $INFILE.bbl | sed 's/\\entry/\\nocite/g' | sed 's/}{.*/}/' > $OUTFILE.tex

Die andere Änderung, die Sie vornehmen müssen, ist in .tex: Sie müssen \inputdas tun, was ich tmpfile.texoben genannt habe. In der Beispieldatei von cfr müssen Sie nur Folgendes hinzufügen:

\input{tmpfile}

direkt vor dem \printbibliography; oder Sie könnten stattdessen Folgendes tun:

\InputIfFileExists{tmpfile.tex}{\input{tmpfile}}{\relax}

Und schließlich erhalten Sie die neue Bibliografiedatei mit der Endung _biber.bib, die in diesem Fall sechs Einträge enthalten sollte.

Als letztes ist zu beachten, dass Sie die Zeile möglicherweise auskommentieren \Input...und eine Folge von latex, biber, und latexerneut ausführen müssen, um zum ursprünglichen Erscheinungsbild der Bibliographie zurückzukehren. In der obigen Datei von cfr führt diese Technik beispielsweise dazu, dass alle sechs Einträge in der Bibliographie angezeigt werden, was möglicherweise nicht erwünscht ist.

verwandte Informationen