如何使用 biblatex 从目录中 \addbibresource 所有 *.bib 文件

如何使用 biblatex 从目录中 \addbibresource 所有 *.bib 文件

我在 Windows 上的 MiKTeX 下使用 biblatex 和 biber。我的.bib目录中有许多文件(例如$localtexmf/bibtex/bib),我想\addbibresource一次性全部处理它们。是否有内置选项可以biber执行此操作?

有关的:将一个目录中的所有 *.bib 文件包含到参考书目中

答案1

请尝试biberSourceForge 上 DEV 文件夹中的 2.13。您现在可以使用 BSD 样式通配符,例如\addbibresource

\addbibresource{bibfile*.bib}
\addbibresource{bibfile?.bib}
\addbibresource(bibfile{1,2}.bib}

答案2

TeX 无法原生查询目录内容。因此,.bib除非使用 shell escape 或 LuaTeX,否则您无法从 TeX 中获取目录中的文件列表并循环遍历它们。

使用 shell escape,你可以ls在目录上运行或类似操作,然后解析返回的列表,使用 LuaTeX,你可以使用 Lua 访问文件系统,请参阅如何迭代文件夹中文件的名称。然后您可以循环遍历该列表并应用\addbibresource到每个项目。

Biber 可能可以查询文件夹的内容,但目前没有面向用户界面允许您这样做。

我认为.bib文件的数量和名称是相当稳定的,因此您可以编制这些文件的列表,\addbibresource\input在所有文档中列出该列表。

答案3

我使用外部(PowerShell)脚本将bib文件夹中的所有文件合并为一个。

$bibfile = "C:\localtexmf\bibtex\bib\_all.bib"
$bibtemp = "C:\localtexmf\bibtex\bib\_tmp.bib"
rm $bibfile -ErrorAction Ignore
cat "C:\localtexmf\bibtex\bib\*.bib" | sc $bibtemp
Get-Content $bibtemp | Out-File -Encoding UTF8 $bibfile
rm $bibtemp -ErrorAction Ignore

它非常方便,您甚至可以将其添加为您的第一个任务biber.bat,这样您甚至不必考虑它。

相关内容