Esta pergunta era sobre um efeito colateral encontrado emesta resposta. Uma maneira de evitar esse efeito colateral é não usar biber, mas bibtool -biblatex
conforme indicado emesta resposta.
Estou usando biber --tool
para remover automaticamente campos como abstract
, review
, groups
e file
de entradas biblatex em arquivos .bib. Um efeito colateral disso é que todos os campos não padrão¹ também parecem ter sido removidos, o que quero evitar. Aqui está um exemplo mínimo:
Esta é a entrada no arquivo .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},
}
E este é o clean-bibfiles.conf
arquivo de configuração para 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>
A execução biber --tool --configfile=clean-bibfiles.conf mybib.bib
produzirá um mybib_bibertool.bib
arquivo que contém esta entrada do biblatex:
@thesis{Author_18_TheThesis,
author = {Author, Mr},
institution = {Department of Documents, University of Stackexchange},
date = {2018},
title = {The Thesis},
type = {Doctoral Dissertation},
}
O campo não padrão ispreprintpublic
foi removido da entrada. Para ser mais preciso, os campos groups
e review
também seriam removidos mesmo que não estivessem no mapa de origem, pois ambos também são campos não padrão ou são "emprestados" do tipo de artigo, respectivamente. Como evitar a remoção automática de tais campos ao usar biber --tool
?
¹Veja, por exemplo, "2.1.1 Tipos Regulares" e "4.2.4.1 Campos Genéricos" nadocumentação biblatex.
Responder1
Na verdade, biber
não lida com campos que não fazem parte do modelo de dados; portanto, se sua fonte de dados tiver campos ou tipos de entrada não padrão, você deverá fornecer biber
um modelo de dados que os inclua.
Mas, antes de prosseguir com esta tarefa, é uma boa ideia saber o que realmente está faltando no modelo de dados padrão que você precisa. Você pode fazer isso com a --validate-datamodel
opção:
biber --tool --validate-datamodel mybib.bib
Em um arquivo .bib contendo essa sua entrada, você recebe os seguintes avisos:
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
O que permite saber exatamente que você deve incluir os campos review
e o modelo de dados.groups
ispreprintpublic
(É claro que adicionar review
e groups
ao modelo de dados para depois soltá-los no mapa de origem não seria o "usual". Estou apenas fazendo isso aqui por uma questão de generalidade e procedimento.)
Para definir seu biber-tool.conf
arquivo personalizado (você o chamou de clean-bibfiles.conf
, vamos mantê-lo assim, mas em geral existem outras operações que podem ser realizadas através deste procedimento), você terá que ajustar o modelo de dados para incluir a(s) linha(s) do seu arquivo não-padrão. campo(s) dentro do <fields>...</fields>
grupo. No seu caso (assumindo aqui que estes são campos do tipo "literal"):
<field fieldtype="field" datatype="literal">review</field>
<field fieldtype="field" datatype="literal">groups</field>
<field fieldtype="field" datatype="literal">ispreprintpublic</field>
E, dentro do grupo <entryfields><entrytype>thesis</entrytype>...</entryfields>
adicione:
<field>review</field>
<field>groups</field>
<field>ispreprintpublic</field>
O resultado clean-bibfiles.conf
deverá então ser:
<?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>
Com este arquivo de configuração, o comando:
biber --tool --validate-datamodel --configfile=clean-bibfiles.conf mybib.bib
irá gerar mybib_bibertool.bib
a entrada conforme desejado:
@Thesis{Author_18_TheThesis,
Author = {Author, Mr},
Institution = {Department of Documents, University of Stackexchange},
Date = {2018},
Ispreprintpublic = {test},
Title = {The Thesis},
Type = {Doctoral Dissertation},
}
Para verificar o modelo de dados e a configuração padrão, você pode encontrar o local do padrão biber-tool.conf
com:
biber --tool-config
Isto pode não ser especialmente simples. Mas, para citar PLKComenteacima: "Os benefícios de ter um modelo de dados no modo ferramenta superam esse tipo de problema."