在下面的测试文档中,\WithRSfalse
我得到了参考书目中的两个条目,但切换到后\WithRStrue
只出现来自第二个 bib 文件的条目。
\listfiles
\documentclass{article}
\usepackage{filecontents}
\usepackage[backend=biber]{biblatex}
\newif\ifWithRS
\WithRSfalse
\begin{filecontents*}{\jobname-1.bib}
@book{foo,
author = {XXX, YYY},
title = {FOO},
date = 1901,
}
\end{filecontents*}
\begin{filecontents*}{\jobname-2.bib}
@book{bar,
author = {UUU, VVV},
title = {BAR},
date = 1902,
}
\end{filecontents*}
\ifWithRS
\addbibresource[label=rs1]{\jobname-1.bib}
\addbibresource[label=rs1]{\jobname-2.bib}
\else
\addbibresource{\jobname-1.bib}
\addbibresource{\jobname-2.bib}
\fi
\begin{document}
BlaBla
\ifWithRS
\refsection[rs1]%
\nocite{*}
\printbibliography
\endrefsection
\else
\nocite{*}
\printbibliography
\fi
\end{document}
我编译了:
pdflatex xxx ; biber xxx ; pdflatex xxx ; pdflatex xxx
这是一个错误还是我的误解?
答案1
label
的论点需要\addbibresource
是独特的文件的标识符.bib
。因此您不能将其label=rs1
用于两个不同的源,后者将覆盖先前的提及。
我已经澄清了文档,以便更明确地说明这一点https://github.com/plk/biblatex/commit/b2d6b2466a013ce4dabf94d44e58b2c27fb1fd17。
refsection
和的可选参数\newrefsection
接受资源标签列表,因此您可以使用不同的标签并在启动新的引用部分时提供两者。
\listfiles
\documentclass{article}
\usepackage{filecontents}
\usepackage[backend=biber]{biblatex}
\newif\ifWithRS
\WithRStrue
\begin{filecontents*}{\jobname-1.bib}
@book{foo,
author = {XXX, YYY},
title = {FOO},
date = 1901,
}
\end{filecontents*}
\begin{filecontents*}{\jobname-2.bib}
@book{bar,
author = {UUU, VVV},
title = {BAR},
date = 1902,
}
\end{filecontents*}
\ifWithRS
\addbibresource[label=rs1]{\jobname-1.bib}
\addbibresource[label=rs2]{\jobname-2.bib}
\else
\addbibresource{\jobname-1.bib}
\addbibresource{\jobname-2.bib}
\fi
\begin{document}
BlaBla
\ifWithRS
\newrefsection[rs1,rs2]
\nocite{*}
\printbibliography
\endrefsection
\else
\nocite{*}
\printbibliography
\fi
\end{document}
严格来说,\refsection
它不能直接使用。你可以使用\newrefsection
\newrefsection[rs1,rs2]
\nocite{*}
\printbibliography
\endrefsection
或环境版本
\begin{refsection}[rs1,rs2]
\nocite{*}
\printbibliography
\end{refsection}
由于 LaTeX 实现环境的方式\refsection[rs1,rs2]
也有效,但不推荐。
万一一开始就不清楚,arefsection
不会需要提供资源标签的可选参数。如果没有给出标签,则假定所有已定义的资源。在 MWE 中,可以通过省略[rs1,rs2]
\begin{refsection}
\nocite{*}
\printbibliography
\end{refsection}
仅当您想限制某个引用部分仅使用某些数据源而不是所有定义的资源时,才需要可选参数。