如果我有一个未知*.tex
文件并且想知道是否需要随后运行 BiBTeX,那么在脚本中找出答案的最简单方法是什么?
考虑这个文件:
\documentclass{article}
\begin{document}
Test\cite{Test}
\bibliographystyle{plain}
\bibliography{Mit}
\end{document}
与此文件相比:
\documentclass{article}
\begin{document}
Test
\end{document}
据我所知,最简单的方法是检查文件*.aux
:
\relax
\citation{Test}
\bibdata{Mit}
\gdef \@abspage@last{1}
如果这包含\bibdata
,我需要运行BibTeX,对吗?
答案1
该
\bibliography
指令清楚地表明您在某些时候需要运行 BibTeX。当然,BibTeX 不会知道如何格式化书目条目,除非您的文档还包含
\bibliographystyle
指令。\bibliography
几乎与and/or的存在同样\bibliographystyle
具有诊断意义的是,您的文档加载了引文管理包,例如cite
、natbib
或apacite
。另一方面,如果你的文档加载了该
biblatex
包,你几乎肯定应该不是运行 BibTeX,而不是运行biber
。此规则的唯一例外是如果软件包biblatex
加载了选项backend=bibtex
,在这种情况下您肯定需要运行 BibTeX,而不是biber
。
答案2
我将您的问题解释为“如何确定给定的任意 LaTeX 文档是否需要运行bibtex
才能完成编译”。
这就是最妙的部分,你不需要(R)。至少,你不需要自己决定。这是因为有相当多的 LaTeX 包装器可以做到这一点。
我推荐latexmk
。还有arara
,但我没有研究过。latexmk
你只需说:
latexmk -pdf document.tex
,当完成所有迭代pdflatex
调用(以及不包括的)步骤后,它会返回。bibtex
- 作为另一个示例,
latexmk -pdflua document.tex
请求带有 PDF 输出的 LuaTeX。
该latexmk
脚本需要perl
,因此如果这会导致交易失败,请寻找替代方案。我不确定它在 Windows 下运行得如何。