如果运行 bibtex 而不是 biber,如何让 bibtex 发出有意义的错误消息?

如果运行 bibtex 而不是 biber,如何让 bibtex 发出有意义的错误消息?

假设我有一个自定义类,需要使用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)

相关内容