Entfernen Sie automatisch Felder aus der .bib-Datei, die Biblatex-Einträge wie @Thesis enthalten

Entfernen Sie automatisch Felder aus der .bib-Datei, die Biblatex-Einträge wie @Thesis enthalten

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 @Thesiskö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 biblatexangegeben 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 biberwerden Felder, die dem Datenmodell unbekannt sind, stillschweigend gelöscht. Wenn Sie also nicht standardmäßige Felder verwenden, lesen Sie das Update unten.

biberSie 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.confgibt 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.confwä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.bibaus 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 biberwerden 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 biberdas 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.confist 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 bib2bibTool, 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.bibDatei 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.

verwandte Informationen