Bei dieser Frage ging es um eine Nebenwirkung beidiese Antwort. Eine Möglichkeit, diese Nebenwirkung zu vermeiden, besteht darin, kein Biber zu verwenden, sondern bibtool -biblatex
wie indiese Antwort.
Ich verwende , biber --tool
um Felder wie abstract
, review
, groups
, und automatisch file
aus Biblatex-Einträgen in .bib-Dateien zu entfernen. Ein Nebeneffekt davon ist, dass alle Nicht-Standardfelder¹ ebenfalls entfernt zu werden scheinen, was ich verhindern möchte. Hier ist ein minimales Beispiel:
Dies ist der Eintrag in der .bib-Datei mybib.bib
:
@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 = {true},
}
Und dies ist die clean-bibfiles.conf
Konfigurationsdatei für biber --tool
:
<?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>
Beim Ausführen biber --tool --configfile=clean-bibfiles.conf mybib.bib
wird eine Datei erstellt mybib_bibertool.bib
, die diesen Biblatex-Eintrag enthält:
@thesis{Author_18_TheThesis,
author = {Author, Mr},
institution = {Department of Documents, University of Stackexchange},
date = {2018},
title = {The Thesis},
type = {Doctoral Dissertation},
}
Das Nicht-Standardfeld ispreprintpublic
wurde aus dem Eintrag entfernt. Genauer gesagt würden die Felder groups
und review
auch entfernt, wenn sie nicht in der Quellzuordnung enthalten wären, da beide ebenfalls Nicht-Standardfelder sind bzw. vom Artikeltyp „ausgeliehen“ wurden. Wie kann das automatische Entfernen solcher Felder bei der Verwendung verhindert werden biber --tool
?
¹Siehe z. B. "2.1.1 Reguläre Typen" und "4.2.4.1 Generische Felder" imBiblatex-Dokumentation.
Antwort1
Tatsächlich biber
werden keine Felder verarbeitet, die nicht Teil des Datenmodells sind. Wenn Ihre Datenquelle also nicht standardmäßige Felder oder Eintragstypen hat, müssen Sie biber
ein Datenmodell bereitstellen, das diese einschließt.
Bevor Sie mit dieser Aufgabe fortfahren, sollten Sie jedoch herausfinden, was im von Ihnen benötigten Standarddatenmodell tatsächlich fehlt. Dies können Sie mit der folgenden --validate-datamodel
Option tun:
biber --tool --validate-datamodel mybib.bib
Bei einer BIB-Datei, die Ihren Eintrag enthält, werden die folgenden Warnungen angezeigt:
WARN - Datamodel: Entry 'Author_18_TheThesis' (mybib.bib): Field 'review' invalid in data model - ignoring
WARN - Datamodel: Entry 'Author_18_TheThesis' (mybib.bib): Field 'groups' invalid in data model - ignoring
WARN - Datamodel: Entry 'Author_18_TheThesis' (mybib.bib): Field 'ispreprintpublic' invalid in data model - ignoring
Dadurch erfahren Sie genau, welche Felder Sie review
in groups
das ispreprintpublic
Datenmodell einschließen müssen.
(Natürlich wäre es nicht „üblich“, review
und groups
zum Datenmodell hinzuzufügen, um sie dann in die Quellzuordnung einzufügen. Ich mache es hier nur der Allgemeingültigkeit und der Vorgehensweise halber.)
Um Ihre benutzerdefinierte biber-tool.conf
Datei festzulegen (Sie haben sie so genannt clean-bibfiles.conf
, lassen wir es dabei, aber im Allgemeinen gibt es andere Vorgänge, die mit diesem Verfahren erreicht werden könnten), müssen Sie das Datenmodell anpassen, um die Zeile(n) Ihrer nicht standardmäßigen Felder in die <fields>...</fields>
Gruppe aufzunehmen. In Ihrem Fall (vorausgesetzt, es handelt sich hier um Felder vom Typ „literal“):
<field fieldtype="field" datatype="literal">review</field>
<field fieldtype="field" datatype="literal">groups</field>
<field fieldtype="field" datatype="literal">ispreprintpublic</field>
Und fügen Sie innerhalb der Gruppe <entryfields><entrytype>thesis</entrytype>...</entryfields>
hinzu:
<field>review</field>
<field>groups</field>
<field>ispreprintpublic</field>
Das Ergebnis clean-bibfiles.conf
sollte dann sein:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<output_fieldcase>title</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">review</field>
<field fieldtype="field" datatype="literal">groups</field>
<field fieldtype="field" datatype="literal">ispreprintpublic</field>
</fields>
<entryfields>
<entrytype>thesis</entrytype>
<field>review</field>
<field>groups</field>
<field>ispreprintpublic</field>
</entryfields>
</datamodel>
</config>
Mit dieser Konfigurationsdatei kann der Befehl:
biber --tool --validate-datamodel --configfile=clean-bibfiles.conf mybib.bib
gibt mybib_bibertool.bib
mit dem Eintrag wie gewünscht aus:
@Thesis{Author_18_TheThesis,
Author = {Author, Mr},
Institution = {Department of Documents, University of Stackexchange},
Date = {2018},
Ispreprintpublic = {test},
Title = {The Thesis},
Type = {Doctoral Dissertation},
}
Um das Standarddatenmodell und die Konfiguration zu prüfen, können Sie den Speicherort für die Standardeinstellungen biber-tool.conf
wie folgt ermitteln:
biber --tool-config
Dies ist vielleicht nicht ganz so einfach. Aber um PLKsKommentaroben: „Die Vorteile eines Datenmodells im Tool-Modus überwiegen diese Art von Problem.“