创建仅包含更大 .bib 文件中引用的参考文献的 .bib 文件

创建仅包含更大 .bib 文件中引用的参考文献的 .bib 文件

通常,LaTeX 只会为文本中引用的 BibTeX 条目创建参考文献。有没有办法.bib自动将这些条目提取到另一个文件中?例如,如果我有一个.bib包含两个条目的文件,而特定文本中只引用了一个条目,我需要一种方法来创建一个.bib仅包含该参考文献的新文件。

答案1

TeX Live 发行版(可能还有 MiKTeX)有一个bibexport程序。假设您的文档是myarticle.tex,您必须正常编译它,然后调用

bibexport -o extracted.bib myarticle.aux

其中extracted.bib是您要为新文件指定的名称.bib。请注意,您必须提供扩展名.aux(或根本不提供扩展名)。

然后,您必须更改.bib文档中文件的名称,以便使用extracted.bib

答案2

jabref可以在命令行和 GUI 模式下执行此操作。

第一个 GUI 模式:

在 jabref 中保持master.bib文件打开。然后在Tools→中New subdatase based on AUX file获取

AUX 文件导入对话框的屏幕截图

在这里选择.aux文件,单击parse,然后selectgenerate您应该会在 jabref 中打开一个子数据库。保存它。

从命令行,假设您处理路径,请执行以下操作:

jabref.jar -a filename[.aux],newBibFile[.bib]

也可以看看jabref 的命令行选项

答案3

这是对帕维尔的回答旨在解决评论中提出的问题。因此,它比那里的解决方案更具体:如果您不需要解析条目crossref中的字段,则更简单的命令就可以正常工作.bib

为了在使用/时解析文件crossref中的字段,您需要告知要做什么。.bibbiblatexbiberbiber

给定<filename>.tex,运行:

pdflatex <filename>.tex
biber --output_format=bibtex --output_resolve <filename>.bcf

其中latexxelatexlualatex可以根据需要替换pdflatex。只要能生成你的.bcf就可以了。

答案4

除了 egreg 的回答之外,我想指出另一种解决方案。Nelson Beebe 开发了名为 和 的实用程序bibextractcitetags处理citefind子书目数据库。您可以获取它们这里

在这种情况下,您可以正常编译文档,然后在 shell 中输入

citetags myarticle.aux > myarticle-tags
citefind myarticle-tags mybib.bib > mysubbib.bib

第一个命令打印了 中使用的所有引用键.tex,而第二个命令则选择了 中的所有条目,my bib.bib其中的键来自myarticle-tags。当然,如果需要,可以轻松编写脚本来合并这两个命令。

尽管它的工作方式与 类似bibexport,但此解决方案的优点是它不会删除biblatex等字段date,而bibexport默认情况下会删除 等字段,如评论中所述。biblatex如果您使用bibtex作为后端,它也可以与 一起使用,但据我所知,如果您使用 ,它则不行biber

相关内容