Necesito eliminar automáticamente ciertos campos, por ejemplo abstract
, review
,, group
y file
, de los archivos .bib que contienen no solo entradas bibtex sino también entradas biblatex (más nuevas) como @Thesis
. Esto es lo mismo que preguntaron y respondieron.en esta pregunta, pero para archivos que incluyen entradas biblatex.
Así es como @Thesis
se vería una entrada de ejemplo para a en el archivo .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},
}
bibtool, que es la respuesta aceptada es la pregunta referida, todavía no parece admitir tales entradas y las omite con una advertencia:
@Thesis{Author_18_TheThesis,
_^
*** BibTool ERROR: (line 123 in ./yourbibliography.bib): Unknown entry type
*** BibTool WARNING: Skipping to next '@'
¿Cómo eliminaría automáticamente dichos campos de los archivos .bib que contienen entradas biblatex? (Preferiría soluciones que se ejecuten en una máquina Linux).
Respuesta1
La respuesta de Andrew Swann.El uso de bibtool originalmente vinculado en el OP funciona, siempre que biblatex
se proporcione el recurso (ht a moewe).
Entonces, para un archivo remove-fields.rsc
:
preserve.keys = On
preserve.key.case = On
resource{biblatex}
delete.field = { abstract }
delete.field = { review }
delete.field = { groups }
delete.field = { file }
El comando:
bibtool -r remove-fields ./references.bib -o new.bib
resultará en:
@Thesis{ Author_18_TheThesis,
Author = {Mr Author},
Title = {The Thesis},
Type = {Doctoral Dissertation},
Institution = {Department of Documents, University of Stackexchange},
Year = {2018},
ispreprintpublic={test}
}
Respuesta2
Aviso: De forma predeterminada,
biber
elimina silenciosamente los campos que el modelo de datos desconoce. Por lo tanto, si utiliza campos no estándar, consulte la actualización a continuación.
Puede utilizar biber
el modo de herramienta con un mapa fuente apropiado.
En el modo de herramienta de Biber, opera en su fuente de datos, por lo que debe ejecutarlo en la línea de comando como, por ejemplo:
biber --tool --configfile=biber-tool.conf <mybibfile>.bib
(Por supuesto, <>
solo puede sustituirlo por el nombre de archivo adecuado).
biber-tool.conf
especifica lo que desea que biber haga con su archivo. En su caso, desea eliminar ciertos campos de sus entradas, por lo que un mapa fuente es la herramienta adecuada para ello. El contenido de biber-tool.conf
sería (con algunas otras opciones relevantes para el control de la apariencia de salida):
<?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>
Con esta configuración, el comando anterior biber generará un nuevo archivo <mybibfile>_bibertool.bib
habiendo eliminado los campos especificados.
El resultado de tu entrada sería:
@thesis{Author_18_TheThesis,
author = {Author, Mr},
institution = {Department of Documents, University of Stackexchange},
date = {2018},
title = {The Thesis},
type = {Doctoral Dissertation},
}
Actualizar: De forma predeterminada, biber
elimina silenciosamente los campos que el modelo de datos desconoce. Entonces, si tiene alguno de estos en su fuente de datos, o si no está seguro y desea que se le advierta sobre los campos ignorados, use la opción --validate-datamodel
:
biber --tool --validate-datamodel <mybibfile>.bib
Para su entrada, eso le daría las siguientes advertencias:
WARN - Datamodel: Entry 'Author_18_TheThesis' (references.bib): Field 'groups' invalid in data model - ignoring
WARN - Datamodel: Entry 'Author_18_TheThesis' (references.bib): Field 'ispreprintpublic' invalid in data model - ignoring
Ahora, si no desea eliminar estos campos y debe conservarlos, debe extender biber
el modelo de datos de para incluirlos, lo cual se puede hacer en su archivo personalizado biber-tool.conf
, agregando sus campos no estándar dentro del <fields>...</fields>
grupo. En su caso (asumiendo que aquí se trata de campos de tipo "literal"):
<field fieldtype="field" datatype="literal">ispreprintpublic</field>
<field fieldtype="field" datatype="literal">groups</field>
Y, dentro del grupo <entryfields><entrytype>thesis</entrytype>...<\entryfields>
agrega:
<field>ispreprintpublic</field>
<field>groups</field>
La costumbre resultante biber-tool.conf
es entonces:
<?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>
<datamodel>
<fields>
<field fieldtype="field" datatype="literal">ispreprintpublic</field>
<field fieldtype="field" datatype="literal">groups</field>
</fields>
<entryfields>
<entrytype>thesis</entrytype>
<field>ispreprintpublic</field>
<field>groups</field>
</entryfields>
</datamodel>
</config>
Con ello, para esta entrada:
@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 = {test},
}
La salida es:
@thesis{Author_18_TheThesis,
author = {Author, Mr},
institution = {Department of Documents, University of Stackexchange},
date = {2018},
ispreprintpublic = {test},
title = {The Thesis},
type = {Doctoral Dissertation},
}
Esto no es especialmente sencillo. Pero, para citar uncomentariode PLK sobre el tema: "Los beneficios de tener un modelo de datos en modo herramienta superan este tipo de problema".
Respuesta3
Otra opción es la bib2bib
herramienta, que proporciona formas bastante flexibles y confiables de filtrar/extraer/expandir entradas de bibtex. Esta (poco conocida) utilidad es parte de labibtex2htmlconjunto de herramientas. (Nota: hay que buscar elPDFdocumentación, la documentación HTML no trata bib2bib
).
Por ejemplo, para eliminar ciertos campos de un biblatex.bib
archivo y guardar el resultado en bibtex.bib
:
bib2bib --remove abstract --remove file --remove review -ob bibtex.bib biblatex.bib
También es posible especificar opciones de filtrado y clasificación, cambiar el nombre de los campos ( --rename <old> <new>
), etc.
Respuesta4
Puedes hacerlo manualmente usando un editor de texto, como Sublime. Active la función Regex (opción+comando+R en Mac) y busque:
abstract = {.*},
y sustituirlo por nada.
Esto elimina cualquier cosa entre abstract = {
y},
Puede aplicar esto a otros campos.