第一个 \addbibresource 被忽略

第一个 \addbibresource 被忽略

在下面的测试文档中,\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}

仅当您想限制某个引用部分仅使用某些数据源而不是所有定义的资源时,才需要可选参数。

相关内容