Этот вопрос касался побочного эффекта, возникшего вэтот ответ. Один из способов избежать этого побочного эффекта — не использовать Бибер, а 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
Это может быть не совсем просто. Но, цитируя ПЛКкомментарийвыше: «Преимущества наличия модели данных в режиме инструмента перевешивают проблемы такого рода».