假设我有一个自定义类,需要使用biblatex
,而且需要biber
后端(\RequirePackage[backend=biber]{biblatex}
)。尽管此类的文档说明了这些要求,但大家都知道没人会阅读文档。
biblatex
如果缺少以下内容,使用此类的人将收到通知:
LaTeX 错误:未找到文件“biblatex.sty”。
并且可能明白他们必须安装它。但是,关于要求biber
,事情就不那么清楚了。事实上,在 *latex 编译结束时会出现一个警告:
Package biblatex Warning: Please (re)run Biber on the file: (biblatex) test (biblatex) and rerun LaTeX afterwards.
但大家都知道,没有人会阅读警告(TeX 编辑器通常不会突出显示这些警告)。因此,这些人可能会运行bibtex
而不是biber
,而他们所看到的错误消息根本没有任何帮助:
This is BibTeX, Version 0.99d (TeX Live 2021) The top-level auxiliary file: test.aux I found no \citation commands---while reading file test.aux I found no \bibdata command---while reading file test.aux I found no \bibstyle command---while reading file test.aux (There were 3 error messages)
下面是一个使用上述内容的示例(简化,不涉及任何自定义类):
\documentclass{article}
\RequirePackage[backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
\autocite{knuth:ct:a}
\end{document}
我的问题是:类是否可以向.aux
文件(在其上bibtex
运行)添加一些内容,以便bibtex
在运行时发出更具信息性的错误消息biber
?
答案1
正确控制 BibTeX 操作的唯一方法是通过文件.bst
。所有其他行为都是硬编码的。特别是,BibTeX 将仅尝试根据指示的文件处理 指示的文件.aux
中指示\citation
的条目。如果或缺失, BibTeX 将抛出错误,但仅此而已。.bib
\bibdata
.bst
\bibstyle
\bibdata
\bibstyle
因此,一个想法是创建一个虚拟.bst
文件,尝试将更有用的错误消息注入输出。我们会告诉 BibTeX.bst
在遇到我们的.aux
文件时使用此文件。
据我所知,您无法使用文件中的任意文本引发错误.bst
。但您可以发出警告。
我能找到的文件的最小设置.bst
如下所示。
\documentclass{article}
\usepackage[backend=biber]{biblatex}
\begin{filecontents}{run-biber-error.bst}
ENTRY { dummy } {} {}
READ
FUNCTION {printwarning} {
"You need to run Biber instead of BibTeX" warning$
}
EXECUTE {printwarning}
\end{filecontents}
\makeatletter
\AtBeginDocument{\immediate\write\@auxout{\string\bibstyle{run-biber-error}}}
\makeatother
\addbibresource{biblatex-examples.bib}
\begin{document}
\autocite{knuth:ct:a}
\end{document}
这产生了
This is BibTeX, Version 0.99d (MiKTeX 21.12.10) The top-level auxiliary file: mabsssshg.aux The style file: run-biber-error.bst I found no \citation commands---while reading file mabsssshg.aux I found no \bibdata command---while reading file mabsssshg.aux Warning--You need to run Biber instead of BibTeX (There were 2 error messages)