biblatex + siunitx:使用 refsection 时,图表列表中的引用不起作用

biblatex + siunitx:使用 refsection 时,图表列表中的引用不起作用

我偶然发现了一个问题,当我使用包时,图表列表中只有引用键biblatexsiunitx同时还有参考部分。

如果你编译下面的工作 MWE,你会在图片的标题中看到这一点

  • 图 1 siunitx 被注释时的标题
  • 图2 siunitx 被注释时的标题

最后你会得到正确的数字列表:

  • siunitx 被注释时的图列表

但如果你取消注释在该\usepackage{siunitx}行中,您会在图形标题中获得相同的内容,但在图形列表中,您只能获得引用关键字。

  • 使用 siunitx 时的图形列表

在使用该包时,有什么想法可以让图形列表像第一个示例中那样工作吗siunitx

谢谢。

Tex 文件:main.tex

\documentclass[12pt, a4paper]{book}

\usepackage{caption}
\usepackage{lipsum}
\usepackage{siunitx}

\usepackage{biblatex}

\addbibresource{biblatex-examples.bib}

\usepackage{hyperref}

\begin{document}

\begin{refsection}

\begin{figure}[htbp]
\centering
\rule{2cm}{2cm}
\caption{The is the first caption \protect{\autocite{bertram}}}
\end{figure}

\printbibliography

\end{refsection}


\begin{refsection}
\newpage
\lipsum[2] \autocite{doody}

\begin{figure}[htbp]
\centering
\rule{2cm}{2cm}
\caption{The is the second caption \protect{\autocite{aristotle:anima, doody}}}
\end{figure}

\printbibliography

\end{refsection}

\clearpage
\listoffigures



\end{document}
  • PS:我没有在这个 MWE 中使用 siunitx,但在我的实际项目中,我确实需要它。
  • PS2:我正在 Overleaf 上进行编译。
  • 编辑:我看到了这个问题biblatex 与 refsection 和表格列表相结合但它没有答案,并且它不包括siunitx包装部分。
  • 编辑 2:我调整了 MWE,使其不依赖于图像

答案1

更新

biblatex.lof在 v3.17 中切换到完全不同的处理等文件的方式.lot。MWE 现在应该可以正常工作。

如果您遇到类似问题,请彻底更新您的系统,并确保至少拥有biblatexv3.17。如果问题仍然存在,请在https://github.com/plk/biblatex/issues/

有关该问题的一些背景信息可以参见https://github.com/plk/biblatex/issues/1116

下面的答案是出于历史原因而保留的。它可能不会在当前版本中按预期工作,biblatex而且肯定不需要。


旧答案

作为达莱夫指出在评论中,在一个钩子中biblatex修补,但随后在一个钩子中重新定义,这也会覆盖的补丁。\addtocontents\AtEndPreamblesiunitx\addtocontents\AtBeginDocumentbiblatex

以下修复结合了biblatex和 的siunitx更改,\addtocontents并位于两个定义之后。

\documentclass[12pt, a4paper]{book}
\usepackage{graphicx}
\usepackage{lipsum}
\usepackage{siunitx}
\usepackage{biblatex}
\usepackage{hyperref}

\addbibresource{biblatex-examples.bib}

\makeatletter
\ExplSyntaxOn
\AtBeginDocument
  {
    \cs_set:Npn \addtocontents #1#2
      {
        \protected@write \@auxout
          {
            \cs_set_eq:NN \label    \use_none:n
            \cs_set_eq:NN \index    \use_none:n
            \cs_set_eq:NN \glossary \use_none:n
            \seq_map_inline:Nn \l_siunitx_unit_symbolic_seq
              { \__siunitx_contents_add:N ##1 }
          }
          { 
            \token_to_str:N \@writefile {#1} {\defcounter{refsection}{\the\c@refsection}\relax}
            \token_to_str:N \@writefile {#1} {#2}
          }
      }
  }
\ExplSyntaxOff
\makeatother

\begin{document}
\begin{refsection}
\begin{figure}[htbp]
\centering
\includegraphics[width=0.2\textwidth]{example-image}
\caption{The is the first caption \autocite{bertram}}
\end{figure}

\printbibliography
\end{refsection}

\clearpage
\begin{refsection}
\lipsum[2] \autocite{doody}

\begin{figure}[htbp]
\centering
\includegraphics[width=0.2\textwidth]{example-image}
\caption{The is the second caption \autocite{aristotle:anima, doody}}
\end{figure}

\printbibliography
\end{refsection}

\clearpage
\listoffigures
\end{document}

带有引用数的 LoF。

相关内容