Planteamiento del problema
Tengo un .bib
archivo grande que me gustaría dividir en varios .bib
archivos más pequeños.
Para esto, estoy buscando un analizador que me permita extraer, digamos, todas las @book
entradas del .bib
archivo original, para poder guardarlas en un archivo nuevo. Básicamente, las entradas mismas deberían permanecer intactas.
Por si ayuda: estoy usando biblatex
& biber
(en Debian GNU/Linux), cuyo IIRC ofrece algunas capacidades de análisis que me encantaría emplear aquí.
Respuesta1
Esto es posible con el modo herramienta de Biber. Desafortunadamente, hubo un pequeño problema con la funcionalidad exacta que necesitas en las versiones anteriores a la 2.11. El problema ha sido reportado (https://github.com/plk/biber/issues/212) y está resuelto en Biber 2.11.
Crea un onlybooks.conf
con el contenido.
<?xml version="1.0" encoding="UTF-8"?>
<config>
<output_align>true</output_align>
<output_fieldcase>lower</output_fieldcase>
<sourcemap>
<maps datatype="bibtex" map_overwrite="1">
<map>
<per_nottype>book</per_nottype>
<map_step map_entry_null="1" />
</map>
</maps>
</sourcemap>
</config>
Entonces llama a Biber con
biber --tool --configfile=onlybooks.conf <yourfile>.bib
y debería aparecer un archivo llamado <yourfile>_bibertool.bib
que solo contiene las @book
entradas de <yourfile>.bib
.
La advertencia de que Biber elimina campos no conocidos en su modelo de datos, por supuesto, también se aplica aquí, verEvite que `biber --tool` elimine campos no estándar en archivos .bib.
Alternativamente, puede utilizar bib2bib
de bibtex2html
. Puedes descubrir mucho más en elDocumentación en PDF.
Usar
bib2bib -c '$type = "BOOK"' -ob onlybooks.bib <yourfile.bib>
para obtener solo las @book
entradas de <yourfile>.bib
en onlybooks.bib
.
El tipo siempre debe estar en mayúsculas y debe estar entre comillas. En los sistemas operativos Windows, las comillas exteriores deben ser dobles y las interiores simples -c "$type = 'BOOK'"
, mientras que en Unix debe ser al revés.-c '$type = "BOOK"'
También puedes usarbibtool
:
bibtool --select{@book} all.bib -o some.bib
Escribe sólo las @book
entradas de all.bib
asome.bib
Algunos administradores de bibliografía como JabRef también ofrecen filtrar .bib
archivos, tal vez eso también pueda usarse aquí.