Ich muss bestimmte Felder - z. B. abstract
, review
, group
, und file
- automatisch aus .bib-Dateien entfernen, die nicht nur Bibtex-Einträge, sondern auch (neuere) Biblatex-Einträge wie enthalten @Thesis
. Dies ist dasselbe wie gefragt und beantwortetin dieser Frage, aber für Dateien, die Biblatex-Einträge enthalten.
So @Thesis
könnte ein Beispieleintrag für a in der .bib-Datei aussehen:
@Thesis{Author_18_TheThesis,
author = {Mr Author},
title = {The Thesis},
type = {Doctoral Dissertation},
institution = {Department of Documents, University of Stackexchange},
year = {2018},
abstract = {This is the abstract.},
file = {:author/Author_18_TheThesis.pdf:PDF},
review = {This is the review.},
groups = {publications},
}
Bibtool, die akzeptierte Antwort auf die gestellte Frage, scheint solche Einträge noch nicht zu unterstützen und überspringt sie mit einer Warnung:
@Thesis{Author_18_TheThesis,
_^
*** BibTool ERROR: (line 123 in ./yourbibliography.bib): Unknown entry type
*** BibTool WARNING: Skipping to next '@'
Wie würden Sie solche Felder automatisch aus .bib-Dateien mit Biblatex-Einträgen entfernen? (Ich würde Lösungen bevorzugen, die auf einem Linux-Rechner laufen).
Antwort1
Andrew Swanns AntwortDie Verwendung des ursprünglich im OP verlinkten Bibtools funktioniert, sofern die Ressource biblatex
angegeben ist (ht an moewe).
Also, für eine Datei remove-fields.rsc
:
preserve.keys = On
preserve.key.case = On
resource{biblatex}
delete.field = { abstract }
delete.field = { review }
delete.field = { groups }
delete.field = { file }
Der Befehl:
bibtool -r remove-fields ./references.bib -o new.bib
wird darin enden, dass:
@Thesis{ Author_18_TheThesis,
Author = {Mr Author},
Title = {The Thesis},
Type = {Doctoral Dissertation},
Institution = {Department of Documents, University of Stackexchange},
Year = {2018},
ispreprintpublic={test}
}
Antwort2
Beachten: Standardmäßig
biber
werden Felder, die dem Datenmodell unbekannt sind, stillschweigend gelöscht. Wenn Sie also nicht standardmäßige Felder verwenden, lesen Sie das Update unten.
biber
Sie können den Tool-Modus mit einer entsprechenden Sourcemap verwenden .
Im Toolmodus von Biber wird es auf Ihrer Datenquelle ausgeführt, daher sollten Sie es in der Befehlszeile beispielsweise wie folgt ausführen:
biber --tool --configfile=biber-tool.conf <mybibfile>.bib
(Dies steht Ihnen natürlich <>
nur zum Ersetzen durch den entsprechenden Dateinamen zur Verfügung.)
biber-tool.conf
gibt an, was biber mit Ihrer Datei machen soll. In Ihrem Fall möchten Sie bestimmte Felder aus Ihren Einträgen löschen, daher ist eine Sourcemap das geeignete Werkzeug dafür. Der Inhalt von biber-tool.conf
wäre dann (mit einigen anderen Optionen, die für die Steuerung des Ausgabeaussehens relevant sind):
<?xml version="1.0" encoding="UTF-8"?>
<config>
<output_fieldcase>lower</output_fieldcase>
<output_indent>2</output_indent>
<output_align>true</output_align>
<sourcemap>
<maps datatype="bibtex" map_overwrite="1">
<map map_overwrite="1">
<map_step map_field_set="abstract" map_null="1"/>
<map_step map_field_set="review" map_null="1"/>
<map_step map_field_set="groups" map_null="1"/>
<map_step map_field_set="file" map_null="1"/>
</map>
</maps>
</sourcemap>
</config>
Mit diesem Setup gibt der obige Befehl biber eine neue Datei aus, <mybibfile>_bibertool.bib
aus der die angegebenen Felder entfernt wurden.
Das Ergebnis für Ihre Eingabe wäre:
@thesis{Author_18_TheThesis,
author = {Author, Mr},
institution = {Department of Documents, University of Stackexchange},
date = {2018},
title = {The Thesis},
type = {Doctoral Dissertation},
}
Aktualisieren: Standardmäßig biber
werden Felder, die dem Datenmodell unbekannt sind, stillschweigend gelöscht. Wenn Ihre Datenquelle also solche Felder enthält oder Sie sich nicht sicher sind und vor ignorierten Feldern gewarnt werden möchten, verwenden Sie die Option --validate-datamodel
:
biber --tool --validate-datamodel <mybibfile>.bib
Für Ihren Eintrag würden Ihnen folgende Warnungen angezeigt:
WARN - Datamodel: Entry 'Author_18_TheThesis' (references.bib): Field 'groups' invalid in data model - ignoring
WARN - Datamodel: Entry 'Author_18_TheThesis' (references.bib): Field 'ispreprintpublic' invalid in data model - ignoring
Wenn das Löschen dieser Felder nicht gewünscht ist und Sie sie behalten müssen, müssen Sie biber
das Datenmodell von erweitern, um sie einzuschließen. Dies können Sie in Ihrem benutzerdefinierten tun biber-tool.conf
, indem Sie Ihre nicht standardmäßigen Felder innerhalb der <fields>...</fields>
Gruppe hinzufügen. In Ihrem Fall (vorausgesetzt, es handelt sich hier um Felder vom Typ „wörtlich“):
<field fieldtype="field" datatype="literal">ispreprintpublic</field>
<field fieldtype="field" datatype="literal">groups</field>
Und fügen Sie innerhalb der Gruppe <entryfields><entrytype>thesis</entrytype>...<\entryfields>
hinzu:
<field>ispreprintpublic</field>
<field>groups</field>
Der daraus resultierende Brauch biber-tool.conf
ist dann:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<output_fieldcase>lower</output_fieldcase>
<output_indent>2</output_indent>
<output_align>true</output_align>
<sourcemap>
<maps datatype="bibtex" map_overwrite="1">
<map map_overwrite="1">
<map_step map_field_set="abstract" map_null="1"/>
<map_step map_field_set="review" map_null="1"/>
<map_step map_field_set="groups" map_null="1"/>
<map_step map_field_set="file" map_null="1"/>
</map>
</maps>
</sourcemap>
<datamodel>
<fields>
<field fieldtype="field" datatype="literal">ispreprintpublic</field>
<field fieldtype="field" datatype="literal">groups</field>
</fields>
<entryfields>
<entrytype>thesis</entrytype>
<field>ispreprintpublic</field>
<field>groups</field>
</entryfields>
</datamodel>
</config>
Damit gilt für diese Eingabe:
@Thesis{Author_18_TheThesis,
author = {Mr Author},
title = {The Thesis},
type = {Doctoral Dissertation},
institution = {Department of Documents, University of Stackexchange},
year = {2018},
abstract = {This is the abstract.},
file = {:author/Author_18_TheThesis.pdf:PDF},
review = {This is the review.},
groups = {publications},
ispreprintpublic = {test},
}
Die Ausgabe ist:
@thesis{Author_18_TheThesis,
author = {Author, Mr},
institution = {Department of Documents, University of Stackexchange},
date = {2018},
ispreprintpublic = {test},
title = {The Thesis},
type = {Doctoral Dissertation},
}
Das ist nicht ganz einfach. Aber, um ein Zitat zu zitierenKommentarvon PLK zu diesem Thema: „Die Vorteile eines Datenmodells im Tool-Modus überwiegen diese Art von Problem.“
Antwort3
Eine weitere Option ist das bib2bib
Tool, das ziemlich flexible und zuverlässige Möglichkeiten zum Filtern/Extrahieren/Erweitern von Bibtex-Einträgen bietet. Dieses (wenig bekannte) Dienstprogramm ist Teil desbibtex2htmlTool-Suite. (Hinweis: Sie müssen nach demPDFDokumentation, die HTML-Dokumentation behandelt dies nicht bib2bib
.)
Um beispielsweise bestimmte Felder aus einer biblatex.bib
Datei zu entfernen und die Ausgabe hier zu speichern bibtex.bib
:
bib2bib --remove abstract --remove file --remove review -ob bibtex.bib biblatex.bib
Darüber hinaus besteht die Möglichkeit, Filter- und Sortieroptionen festzulegen, Felder umzubenennen ( --rename <old> <new>
) und mehr.
Antwort4
Sie können es einfach manuell mit einem Texteditor wie Sublime tun. Aktivieren Sie die Regex-Funktion (Option+Befehl+R auf dem Mac) und suchen Sie nach:
abstract = {.*},
und ersetzen Sie es durch nichts.
Dadurch wird alles zwischen abstract = {
und entfernt},
Sie können dies auf andere Felder anwenden.