问题和背景(X):

问题和背景(X):

因为这可能会成为XY问题,我会尽量提供尽可能多的附加信息。但首先,我的问题是:

  • 问题 (Y):如何biber(在工具模式下).bib基于文件创建文件.bcf并使用其他 .bib文件作为数据源,而不是.bcf文件中指定的数据源?

问题和背景(X):

最近我开始使用 JabRef 进行书目管理。一方面,它使用.bib数据库格式非常方便,但另一方面也有一些缺点:

  • 所有元信息都包含在该.bib文件中,包括文件引用、个人评论和数据库特定配置。出于某些原因(我认为这些原因在这里并不重要),我想.bib为我的项目使用一个“干净”的文件,其中仅包含相关的书目数据。因此,我需要创建一个“精简”版本的数据库.bib文件,这引出了下一点:
  • JabRef 没有添加自定义 BibTeX 导出过滤器的选项当然,也可以以 BibTeX 格式导出参考书目的子集但这并不能解决新文件中有配置数据和个人字段的问题。我知道后一个问题可以通过 JabRef 的“设置/清除/重命名字段”功能解决,但这只是一个部分解决方案,而且当需要重复执行时非常麻烦。
  • 我希望只有实际的参考资料用过的在项目.bib文件中。这意味着我需要创建一个.bib仅包含更大.bib文件的引用参考文献的文件

目标

所以我想要的是:

  • 在 JabRef 中管理我的参考书目。
  • biblatex使用with编写 LaTeX 文档biber
  • 生成一个.bib仅包含文档中引用的参考文献的文件作为我的 JabRef 数据库的子集。
  • (从较小的.bib文件中删除所有包含多余信息的字段。这是不属于当前问题;我上面只是提到了这一点,作为我做到这一切。

我目前拥有的

基本上,我发现了三种不同的方法来解决我的问题:


方法 3几乎成功了。以下命令获取 中引用的所有参考文献,paper.tex并将其写入paper_biber.bib

biber --output_format=bibtex --output_resolve paper.bcf

不过,回想一下,我想要 .bibpaper_biber.bib文件:从文件自动创建的精简文件( ),此外还有一个包含以下内容的.bcf主/数据库文件master.bib全部我的参考文献。

这意味着,在 中paper.tex我有一行类似\addbibresource{paper_biber.bib}。因此,biber将以下内容写入paper.bcf

<bcf:bibdata section="0">
    <bcf:datasource type="file" datatype="bibtex">paper_biber.bib</bcf:datasource>
  </bcf:bibdata>

当我运行时biber --output_format=bibtex --output_resolve paper.bcf,从中biber查找引用的数据。paper.bcfpaper_biber.bib但这是错误的文件。我需要在中biber查找参考资料的数据。paper.bcfmaster.bib

当我手动编辑paper.bfcpaper_biber.bib替换master.bib

<bcf:bibdata section="0">
    <bcf:datasource type="file" datatype="bibtex">master.bib</bcf:datasource>
  </bcf:bibdata>

我得到了完全想要的结果,即包含在中引用的paper_biber.bib所有条目。master.bibpaper.bcf

不幸的是,手动编辑paper.bcf不太方便,而且很难实现自动化。这让我回到最初的问题:

我怎样才能biber(在工具模式下).bib基于文件创建文件.bcf并使用其他 .bib文件作为数据源,而不是.bcf文件中指定的数据源?

我尝试在biber手动的但却biber --help找不到任何有用的东西。

我想我可以使用一个biber.conf文件,根据手册,该文件应该可以覆盖.bcf文件中的任何设置,但我不知道我必须在该文件中写入什么。我尝试了以下操作,但没有效果:

<?xml version="1.0" encoding="UTF-8"?>
<config>
  <!-- SECTION 0 -->
  <bibdata section="0">
    <datasource type="file" datatype="bibtex">master.bib</datasource>
  </bibdata>
</config>

答案1

我自己找到了解决方案,它非常简单:该选项指定查找源文件的--input-directory目录。biber

唯一的限制是缩小后的.bib文件和完整文件需要具有相同的名称。那么解决方案是:

biber --output_format=bibtex --input-directory "path/to/database/" --output_resolve paper.bcf

编辑:上面的命令是不是一个完整的解决方案。它生成一个简化的文件,其名称如下,[name of input file]_biber.bib这意味着这只适用于非常具体的文件名关系:

  • 主 BIB 文件(数据库):somename_biber.bib
  • \addbibresource{somename_biber.bib}
  • 文档:somename.tex

但是,这非常有限制。因此,我决定编写一个小的批处理文件(我使用 Windows)来一次性解决所有问题:

cd %~dp0
cp relative/path/to/MasterDB.bib reduced.bib
biber --output_file=reduced.bib --output_format=bibtex --output_resolve --strip_comments ../paper
biber ../paper

@echo off
echo.
echo Done!

if "%1"=="--background" exit
Pause

假设上述脚本位于 中src/paper.tex带有addbibresource{src/reduced.bib}

工作流程如下:编译。运行脚本。这将使用必要的数据进行paper.tex更新/创建src/reduced.bibMasterDB.bib 创建。再次paper.bbl编译。paper.tex

相关内容