是否有一种万无一失的方法来提取文件中引用的所有 bibtex 引用键.tex
?
我并不是指.tex
-file 上的正则表达式魔法,因为这必然会在使用不同引用命令的 等之间切换时导致问题。此外,使用 进行的引用natbib
将不会包括在内...apacite
\nocite{*}
我虽然考虑过查看.bbl
包含最终文档中所有参考资料的文件,但是.bbl
文件的格式在不同的包之间也有很大差异,因此密钥提取很困难。
答案1
引用包含在.aux
文件中。
\usepackage{atveryend}
\makeatletter
\let\origcitation\citation
\AtEndDocument{\def\mycites{\@gobble}%
\def\citation#1{\g@addto@macro\mycites{,#1}\origcitation{#1}}}
\AtVeryEndDocument{\typeout{***^^JCited keys: \mycites^^J***}}
\makeatother
这将在屏幕上和 .log 文件中显示,在 LaTeX 运行结束时,一条消息,例如
***
Cited keys: xxx,yyy,*
***
可以避免出现*
,但我认为不值得这么麻烦。只有实际引用的键才会出现(BibTeX 将其用作\citation{*}
包含整个数据库的信号)。
可以将引用输出到辅助文件:
\makeatletter
\let\origcitation\citation
\AtEndDocument{\def\mycites{}%
\def\citation#1{\g@addto@macro\mycites{#1^^J}\origcitation{#1}}}
\AtVeryEndDocument{\newwrite\citeout\immediate\openout\citeout=\jobname.cit
\immediate\write\citeout{\mycites}\immediate\closeout\citeout}
\makeatother
然后,如果文件是,则引用键将每行test.tex
保存在文件中。test.cit
答案2
和bibtool
您可以执行以下操作:
bibtool -- preserve.key.case=on -x file.aux -o bibliography.bib
这将提取您引用的参考书目。现在,如果您只提取grep
文件中的行@
,您将获得相当接近的键列表。该选项preserve.key.case=on
可确保键的大小写不会改变(响应下面的评论)。
答案3
各种支持 TeX 的编程编辑器都有宏来实现这一点。例如,有一个bibmacros
与 winedt 一起使用的包,它(除其他外)可以完成您描述的工作。它处理由 latex 和 BibTeX 创建的 .aux 文件,并创建一个名为 jobname-minimal.bib 的新 bib 文件,其中乔布斯是辅助文件的名称(当然,不带“aux”扩展名)。其他编辑器必须具有类似的宏,无论是内置的还是可作为额外包访问的。