`biber --tool` が .bib ファイル内の非標準フィールドを削除しないようにする

`biber --tool` が .bib ファイル内の非標準フィールドを削除しないようにする

この質問は、この答えこの副作用を避ける一つの方法は、ビバーを使わないことですがbibtool -biblatexこの答え

私は、、、、などのフィールドを .bib ファイルの biblatex エントリから自動的に削除するために を使用しています。このbiber --tool副作用として、すべての非標準フィールド¹ も削除されるようですが、これは避けたいものです。以下に最小限の例を示します。abstractreviewgroupsfile

これは .bib ファイル内のエントリです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},
}

これはclean-bibfiles.conf以下の設定ファイルです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>

実行すると、次の biblatex エントリを含むファイルbiber --tool --configfile=clean-bibfiles.conf mybib.bibが生成されます。mybib_bibertool.bib

@thesis{Author_18_TheThesis,
  author      = {Author, Mr},
  institution = {Department of Documents, University of Stackexchange},
  date        = {2018},
  title       = {The Thesis},
  type        = {Doctoral Dissertation},
}

非標準フィールドispreprintpublicがエントリから削除されました。正確に言うと、groupsおよびreviewフィールドも、ソースマップに存在しない場合でも削除されます。これは、 も非標準フィールドであるか、それぞれ記事タイプから「借用」されているためです。 を使用するときに、このようなフィールドが自動的に削除されないようにするにはどうすればよいですかbiber --tool?


¹「2.1.1 通常の型」および「4.2.4.1 ジェネリックフィールド」を参照してください。biblatex ドキュメント

答え1

実際、biberデータモデルの一部ではないフィールドは処理されないため、データ ソースに非標準のフィールドまたはエントリ タイプがある場合は、biberそれらを含むデータ モデルを提供する必要があります。

ただし、このタスクを進める前に、必要なデフォルトのデータモデルに実際に何が欠けているかを知っておくことをお勧めします。これは、次の--validate-datamodelオプションを使用して行うことができます。

biber --tool --validate-datamodel mybib.bib

あなたのエントリを含む .bib ファイルでは、次の警告が表示されます。

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

これにより、フィールドreviewgroupsおよびをispreprintpublicデータモデルに含める必要があることが正確にわかります。

(もちろん、データモデルにreviewと を追加してgroups、それをソースマップにドロップするのは「通常」の方法ではありません。ここでは、一般性と手順のためにそれを行っています。)

カスタムbiber-tool.confファイルを設定するには ( という名前を付けたのでclean-bibfiles.conf、そのままにしておきます。ただし、一般にこの手順で実行できる他の操作もあります)、データモデルを調整して、グループ内に非標準フィールドの行を含める必要があります<fields>...</fields>。この場合 (ここでは「リテラル」タイプのフィールドであると想定)、次のようになります。

<field fieldtype="field" datatype="literal">review</field>
<field fieldtype="field" datatype="literal">groups</field>
<field fieldtype="field" datatype="literal">ispreprintpublic</field>

そして、グループ内に<entryfields><entrytype>thesis</entrytype>...</entryfields>以下を追加します:

<field>review</field>
<field>groups</field>
<field>ispreprintpublic</field>

結果はclean-bibfiles.conf次のようになります。

<?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>

この構成ファイルでは、コマンド:

biber --tool --validate-datamodel --configfile=clean-bibfiles.conf mybib.bib

mybib_bibertool.bib希望どおりのエントリが出力されます:

@Thesis{Author_18_TheThesis,
  Author           = {Author, Mr},
  Institution      = {Department of Documents, University of Stackexchange},
  Date             = {2018},
  Ispreprintpublic = {test},
  Title            = {The Thesis},
  Type             = {Doctoral Dissertation},
}

デフォルトのデータモデルと構成を確認するには、次のコマンドでデフォルトの場所を見つけることができますbiber-tool.conf

biber --tool-config

これは特に簡単なことではないかもしれない。しかし、PLKの言葉を引用すると、コメント上記: 「データモデルをツール モードにすることによる利点は、この種の問題を上回ります。」

関連情報