Постановка задачи
У меня есть большой .bib
файл, который я хотел бы разделить на несколько .bib
файлов меньшего размера.
Для этого я ищу парсер, который позволит мне извлечь, скажем, все @book
записи из исходного .bib
файла, чтобы я мог сохранить их в новом файле. Сами записи должны оставаться в основном нетронутыми.
На всякий случай: я использую biblatex
& biber
(под Debian GNU/Linux), который, как мне кажется, предлагает некоторые возможности синтаксического анализа, которые я с удовольствием здесь применил.
решение1
Это возможно с помощью режима инструмента Biber. К сожалению, была небольшая проблема с точной функциональностью, которая вам нужна в версиях до 2.11. Проблема была сообщена (https://github.com/plk/biber/issues/212) и решена в Biber 2.11.
Создать onlybooks.conf
с содержимым
<?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>
Затем позвоните Биберу с
biber --tool --configfile=onlybooks.conf <yourfile>.bib
и вам должен быть представлен файл с именем , <yourfile>_bibertool.bib
содержащий только @book
записи <yourfile>.bib
.
Предупреждение о том, что Biber удаляет поля, неизвестные в его модели данных, конечно, применимо и здесь, см.Запретить `biber --tool` удалять нестандартные поля в файлах .bib.
В качестве альтернативы вы можете bib2bib
использовать bibtex2html
. Вы можете узнать гораздо больше вPDF-документация.
Использовать
bib2bib -c '$type = "BOOK"' -ob onlybooks.bib <yourfile.bib>
чтобы получить только @book
записи <yourfile>.bib
из onlybooks.bib
.
Тип должен быть всегда заглавными буквами и заключен в кавычки. В ОС Windows внешние кавычки должны быть двойными, а внутренние одинарными -c "$type = 'BOOK'"
, в то время как в Unix все должно быть наоборот.-c '$type = "BOOK"'
Вы также можете использоватьbibtool
:
bibtool --select{@book} all.bib -o some.bib
Записывает только записи @book
вall.bib
some.bib
Некоторые менеджеры библиографии, такие как JabRef, также предлагают фильтрацию .bib
файлов, возможно, это можно использовать и здесь.