防止 `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


¹参见“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

这让您准确地知道您必须包含字段和review数据模型。groupsispreprintpublic

(当然,将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 的话评论以上:“在工具模式下拥有数据模型的好处大于这类问题。”

相关内容