Eliminar automáticamente campos del archivo .bib que contiene entradas biblatex como @Thesis

Eliminar automáticamente campos del archivo .bib que contiene entradas biblatex como @Thesis

Necesito eliminar automáticamente ciertos campos, por ejemplo abstract, review,, groupy 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 @Thesisse 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 biblatexse 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, biberelimina 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 biberel 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.confespecifica 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.confserí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.bibhabiendo 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, biberelimina 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 biberel 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.confes 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 bib2bibherramienta, 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.bibarchivo 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.

información relacionada