当我已经指定 refsegment=section 时为什么还需要 \newrefsegment?

当我已经指定 refsegment=section 时为什么还需要 \newrefsegment?

以下运行良好,并准确显示了我想要的内容。我只是想知道这一点:\newrefsegment如果我已经指定了, 为什么还必须使用refsegment=section?我期望一切都能正常工作而无需额外的 \newrefsegment命令。另一方面,我可以省略它refsegment=section ,它仍然有效(这在某种程度上是清楚的)。

\documentclass{scrartcl}

\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[american]{babel}
\usepackage{titlesec}
\usepackage[
backend=bibtex,
style=authoryear,
refsegment=section
]{biblatex}

\defbibheading{subbibheading}{
  \section*{References for Section \ref{refsegment:\therefsection\therefsegment}}
}
\addbibresource{biblatex-examples.bib}

\begin{document}

\section{Foo}
\newrefsegment
\textcite{reese}
\printbibliography[segment=\therefsegment, heading=subbibheading]

\section{Bar}
\newrefsegment
\textcite{glashow}
\printbibliography[segment=\therefsegment, heading=subbibheading]

\printbibliography[heading=bibintoc]
\end{document}

答案1

为了获得正确的标签引用,您应该调整 biblatex 文档的“多个参考书目”和“细分参考书目”部分中给出的示例。对于您的情况,这意味着省略refsegment=section和,\newrefsegment在后面使用\section或将节体包裹在\begin{refsegment}和中\end{refsegment}

refsegment=section设置大致相当于发布\newrefsegment \section. biblatex 以这种方式修补分区命令,以确保标题中的引用不会被分配给前一个参考段或部分。

要定义节计数器递增后的标签,您可以在序言中修补相关命令。例如:

\makeatletter
\patchcmd{\refsegment}
  {\label{refsegment:\the\c@refsection\the\c@refsegment}}{}{}{}
\apptocmd{\@sect}
  {\label{refsegment:\the\c@refsection\the\c@refsegment}}{}{}
\makeatother

尽管附加补丁可能会干扰格式化标题的其他软件包。

titlesec 包重新定义了高级部门命令,因此 biblatex 所做的任何低级补丁都会被忽略;refsegmentrefsection选项根本不起作用。

相关内容