我正在使用创建一个格式文件mylatexformat
。这使我能够预编译我的(非常长的前言,缩短了编译时间。
然而,biber 并没有回应addbibresource
,也没有抱怨
WARN - I didn't find a database entry for '...'
或者,如果格式文件中根本没有包含任何 bibresource:
WARN - No data sources defined!
我怎么能够addbibresource
和有预编译的序言吗?
最小工作示例
foo.tex
\documentclass{article}
\usepackage[backend=biber]{biblatex}
\addbibresource{foo.bib}
\endofdump
\addbibresource{foo2.bib}
\begin{document}
This is just a test. With a citation: \textcite{test1}.
And another: \textcite{test2}.
\printbibliography
\end{document}
foo.bib
@article{test1,
title = {Some title},
journaltitle = {Some journal},
author = {Rob, London},
date = {2018-01-01}
}
foo2.bib
@article{test2,
title = {Some title 2},
journaltitle = {Some journal},
author = {Rob, London},
date = {2018-01-02}
}
如果我首先使用以下命令编译序言:
pdftex -ini -jobname="foo" "&pdflatex" mylatexformat.ltx foo.tex
然后我注释掉(或者删除)前言并添加%&foo
第一行:
foo.tex (编译前言之后):
%&foo
\addbibresource{foo2.bib}
\begin{document}
\maketitle
This is just a test. With a citation: \textcite{test1}.
And another: \textcite{test2}.
\printbibliography
\end{document}
biber 现在会抱怨:
> biber foo
.
.
.
WARN - I didn't find a database entry for 'test2' (section 0)
答案1
你缺少\endofdump
%&foo
\endofdump
\addbibresource{foo2.bib}
\begin{document}
\maketitle
This is just a test. With a citation: \textcite{test1}.
And another: \textcite{test2}.
\printbibliography
\end{document}
如果您使用预编译格式,则前导码中的所有代码都\endofdump
将被忽略。您可以通过在前导码中调用明显未定义的命令(例如\zzz
)来验证这一点:只有将其写入后才会导致错误\endofdump
。
这包含的文件mylatexformat
包含评论的逐字副本mylatex
也有类似的限制
'mylatex' 格式通常会跳过整个前导码(认为它是预先加载的),因此此类新命令不会生效。
中的解决方案是在前言中mylatex
添加带有内容mylatex
(即行)的注释。技巧是。% mylatex
mylatexformat
\endofdump