Запретить `biber --tool` удалять нестандартные поля в файлах .bib

Запретить `biber --tool` удалять нестандартные поля в файлах .bib

Этот вопрос касался побочного эффекта, возникшего вэтот ответ. Один из способов избежать этого побочного эффекта — не использовать Бибер, а bibtool -biblatexкак указано вэтот ответ.

Я использую biber --toolдля автоматического удаления полей типа abstract, review, groups, и fileиз записей biblatex в файлах .bib. Побочным эффектом этого является то, что все нестандартные поля¹, похоже, также удаляются, чего я хочу избежать. Вот минимальный пример:

Это запись в файле .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было удалено из записи. Если быть точным, поля groupsи reviewтакже были бы удалены, даже если бы их не было в sourcemap, поскольку оба они также являются нестандартными полями или «заимствованы» из типа статьи соответственно. Как предотвратить автоматическое удаление таких полей при использовании biber --tool?


¹См., например, «2.1.1 Обычные типы» и «4.2.4.1 Универсальные поля» вдокументация библатекс.

решение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Что позволяет вам точно знать , какие поля вам необходимо включить groupsв 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

Это может быть не совсем просто. Но, цитируя ПЛКкомментарийвыше: «Преимущества наличия модели данных в режиме инструмента перевешивают проблемы такого рода».

Связанный контент