从 .tex 文件中提取所有引用

从 .tex 文件中提取所有引用

是否有一种万无一失的方法来提取文件中引用的所有 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”扩展名)。其他编辑器必须具有类似的宏,无论是内置的还是可作为额外包访问的。

相关内容