防止“biber --tool”刪除 .bib 檔案中的非標準字段

防止“biber --tool”刪除 .bib 檔案中的非標準字段

這個問題是關於遇到的副作用這個答案。避免這種副作用的一種方法是不使用 biber,但bibtool -biblatex如中所述這個答案

我用來biber --tool自動刪除.bib 檔案中 biblatex 條目中的abstractreviewgroups和等欄位。file這樣做的一個副作用是所有非標準欄位似乎也被刪除,我想防止這種情況發生。這是一個最小的例子:

這是 .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>

運行biber --tool --configfile=clean-bibfiles.conf mybib.bib將產生一個mybib_bibertool.bib包含此 biblatex 條目的檔案:

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

非標準欄位ispreprintpublic已從條目中刪除。準確地說,即使groupsreview字段不在來源映射中,它們也會被刪除,因為它們也是非標準字段或分別從文章類型「借用」。如何防止使用時自動剝離此類欄位biber --tool


1參見例如“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

這讓您準確地知道必須將 fields 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的話評論上圖:“在工具模式下使用資料模型的好處超過了此類問題。”

相關內容