最小工作示例

最小工作示例

我正在使用创建一个格式文件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(即行)的注释。技巧是。% mylatexmylatexformat\endofdump

相关内容