通常,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
文件,单击parse
,然后select
。generate
您应该会在 jabref 中打开一个子数据库。保存它。
从命令行,假设您处理路径,请执行以下操作:
jabref.jar -a filename[.aux],newBibFile[.bib]
也可以看看jabref 的命令行选项。
答案3
这是对帕维尔的回答旨在解决评论中提出的问题。因此,它比那里的解决方案更具体:如果您不需要解析条目crossref
中的字段,则更简单的命令就可以正常工作.bib
。
为了在使用/时解析文件crossref
中的字段,您需要告知要做什么。.bib
biblatex
biber
biber
给定<filename>.tex
,运行:
pdflatex <filename>.tex
biber --output_format=bibtex --output_resolve <filename>.bcf
其中latex
、xelatex
等lualatex
可以根据需要替换pdflatex
。只要能生成你的.bcf
就可以了。
答案4
除了 egreg 的回答之外,我想指出另一种解决方案。Nelson Beebe 开发了名为 和 的实用程序bibextract
来citetags
处理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
。