Esta pregunta era sobre un efecto secundario encontrado enesta respuesta. Una forma de evitar este efecto secundario es no utilizar biber sino bibtool -biblatex
como se indica enesta respuesta.
Estoy usando biber --tool
para eliminar automáticamente campos como ,, abstract
y de las entradas biblatex en archivos .bib. Un efecto secundario de esto es que todos los campos no estándar¹ parecen eliminarse también, lo cual quiero evitar. Aquí hay un ejemplo mínimo:review
groups
file
Esta es la entrada en el archivo .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},
}
Y este es el clean-bibfiles.conf
archivo de configuración 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>
La ejecución biber --tool --configfile=clean-bibfiles.conf mybib.bib
producirá un mybib_bibertool.bib
archivo que contiene esta entrada biblatex:
@thesis{Author_18_TheThesis,
author = {Author, Mr},
institution = {Department of Documents, University of Stackexchange},
date = {2018},
title = {The Thesis},
type = {Doctoral Dissertation},
}
El campo no estándar ispreprintpublic
ha sido eliminado de la entrada. Para ser precisos, los campos groups
y review
también se eliminarían incluso si no estuvieran en el mapa fuente, ya que ambos también son campos no estándar o están "prestados" del tipo de artículo, respectivamente. ¿Cómo evitar la eliminación automática de dichos campos cuando se utiliza biber --tool
?
¹Consulte, por ejemplo, "2.1.1 Tipos regulares" y "4.2.4.1 Campos genéricos" en ladocumentación biblatex.
Respuesta1
De hecho, biber
no maneja campos que no sean parte del modelo de datos, por lo que si su fuente de datos tiene campos o tipos de entrada no estándar, debe proporcionar biber
un modelo de datos que los incluya.
Pero, antes de continuar con esta tarea, es una buena idea saber qué falta realmente en el modelo de datos predeterminado que necesita. Puedes hacerlo con la --validate-datamodel
opción:
biber --tool --validate-datamodel mybib.bib
En un archivo .bib que contiene esa entrada suya, le brinda las siguientes advertencias:
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
Lo que te permite saber con precisión que debes incluir los campos review
y el modelo de datos.groups
ispreprintpublic
(Por supuesto, agregar review
y groups
al modelo de datos para luego colocarlos en el mapa fuente no sería lo "habitual". Solo lo hago aquí por razones de generalidad y procedimiento).
Para configurar su archivo personalizado biber-tool.conf
(lo llamó clean-bibfiles.conf
, mantengámoslo así, pero en general hay otras operaciones que se pueden lograr mediante este procedimiento), tendrá que ajustar el modelo de datos para incluir las líneas de su archivo no estándar. campo(s) dentro del <fields>...</fields>
grupo. En su caso (asumiendo que aquí se trata de campos de tipo "literal"):
<field fieldtype="field" datatype="literal">review</field>
<field fieldtype="field" datatype="literal">groups</field>
<field fieldtype="field" datatype="literal">ispreprintpublic</field>
Y, dentro del grupo <entryfields><entrytype>thesis</entrytype>...</entryfields>
agrega:
<field>review</field>
<field>groups</field>
<field>ispreprintpublic</field>
El resultado clean-bibfiles.conf
entonces debería 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>
Con este archivo de configuración, el comando:
biber --tool --validate-datamodel --configfile=clean-bibfiles.conf mybib.bib
saldrá mybib_bibertool.bib
con la entrada como se desee:
@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 el modelo de datos predeterminado y la configuración, puede encontrar la ubicación predeterminada biber-tool.conf
con:
biber --tool-config
Puede que esto no sea especialmente sencillo. Pero, para citar a PLKcomentarioarriba: "Los beneficios de tener un modelo de datos en modo herramienta superan este tipo de problema".