有 Bug 吗?同上,使用 `floatrow` 包

有 Bug 吗?同上,使用 `floatrow` 包

当我使用floatrow带有 biblatex 的 -package 以及使用 ibidem-tracking 的引用样式时,通常,当我引用某个出版物两次时,第二次的引用会被替换为 (ibid.)(或德国的 ebd.),表示对与之前相同的来源的引用。

虽然在浮动对象的标题中引用,但完整的引用应该总是出现,而不是(同上)简短的。

floatrow当使用-package 而不是 时,这种行为似乎会被破坏float


妇女权利委员会:

\documentclass[12pt,a4paper]{scrartcl}

% Bibliography entries:
\begin{filecontents}{literatur.bib}
@booklet{one,
    author = {Author One and Author Three and Author Four and Author Five and Author Six and Author Seven and Author Eight and Author Nine},
    title = {Testtitle 1.},
    date = {2018},
}
@booklet{two,
    author = {Author Two},
    shortauthor = {AOne},
    title = {Testtitle 2.},
    date = {2018},

}
\end{filecontents}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc} 
\usepackage{lmodern}
\usepackage[ngerman]{babel}   

\usepackage{mwe} % Example figure
\usepackage{graphicx} % Includegraphics command

\usepackage[backend=biber,style=authoryear-ibid,sortlocale=de_DE]{biblatex}
\addbibresource{literatur.bib}

\usepackage{floatrow} % Creates a bug when used instead of float
\begin{document}

Here, I cite the publication a first time: \parencite{one}. Now, I cite it a second time, where ebd. shows up correctly. \parencite{one}.
\begin{figure}[H]
    \includegraphics[draft, width=0.3\textwidth]{example-image-a}
    \caption{In this float caption, when I cite a third time, no ebd. should appear \parencite{one}.}
\end{figure}
\printbibliography
\end{document}

此 MWE 的输出: MWE 的输出有问题


你能证实这一点吗?我猜这不是故意的?有解决方法吗?(我不需要解决方法 ATM,但也许其他人需要)

最后,如果确实如此,我应该在哪里报告此错误?(因为我没有报告错误的经验)

floatrow我在 Windows 10、 v0.3b 和v3.11上使用 MikTex biblatex

祝你今天过得愉快! :)

答案1

biblatex添加代码以\@floatboxreset禁用浮点数中的引用跟踪。这发生在钩子中\AtEndPreamble。该floatrow包有效地接管\@floatboxreset并用替换它,加载时\FR@flboxreset的原始定义被保留并用作以后的基础。但这意味着加载后发生的更改将被忽略或丢弃。\@floatboxresetfloatrow\FR@flboxreset\@floatboxresetfloatrow

有几种可能的解决方法。您也可以初始化\FR@flboxreset\AtEndPreamble如果\AtEndPreamble调用在 的前导定义之后,biblatex则修改\@floatboxreset将被拾取

\documentclass[12pt,a4paper]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc} 
\usepackage{lmodern}
\usepackage[ngerman]{babel}   

\usepackage{duckuments} % Example figure
\usepackage{graphicx} % Includegraphics command

\usepackage[backend=biber,style=authoryear-ibid]{biblatex}
\addbibresource{biblatex-examples.bib}

\usepackage{floatrow} % Creates a bug when used instead of float

\makeatletter
\AtEndPreamble{\let\FR@flboxreset\@floatboxreset}
\makeatother
\begin{document}

Here, I cite the publication a first time: \parencite{sigfridsson}. Now, I cite it a second time, where ebd. shows up correctly. \parencite{sigfridsson}.
\begin{figure}[H]
    \includegraphics[width=0.3\textwidth]{example-image-duck}
    \caption{In this float caption, when I cite a third time, no ebd. should appear \parencite{sigfridsson}.}
\end{figure}
\printbibliography
\end{document}

图形标题为“Abbildung 1: 在此浮动标题中,当我第三次引用时,不应出现 ebd。(Sigfridsson und Ryde 1998)。”没有 ebd/ibidem

或者也可以执行

\makeatletter
\apptocmd\@floatboxreset
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}}
  {}
  {\blx@err@patch{floats}}
\makeatother

手动加载中floatrow


这是 bug 吗?这是谁的 bug?

这很棘手。行为似乎与文档中的描述不符biblatex,因此您可以将其称为错误。(我可以尝试摆脱这种特殊情况,因为[H]不再是真正的浮点数,因此我可以争辩说§4.11.5浮标和 TOC/LOT/LOF 中的追踪器biblatex 文档的解释并不适用。这没有多大意义,因为即使没有[H]浮动,只要floatrow加载,问题仍然存在。)

要正确处理此类问题,biblatex需要干预许多通常不属于参考书目/引文包范围的事情。LaTeX 就是 LaTeX,几乎无法保证biblatex需要修补的代码在所有类和包组合中都能按预期运行。

我相当确信这\@floatboxreset不是完全错误的修补命令,而且我也相信尽可能晚地修补宏的谨慎方法有其优点。因此,biblatex除了检查floatrow或修补之外,我不确定在这种情况下是否还有更好的办法\FR@flboxreset

但同时我也不认为floatrow这有什么错。

鉴于floatrow自 2009 年以来没有更新过,我不确定您是否能够联系维护者。另外,我也不确定应该怎么floatrow做才能更好(当然,它可以稍后初始化 \FR@flboxreset,...)。

您还可以打开一个biblatex问题https://github.com/plk/biblatex/issues。可以biblatex用相对较少的努力来解决这个问题。我个人认为,biblatex为这么多不同的包和类打补丁并不是明智之举,因为维护这些补丁需要密切关注相关包和类的代码可能发生的变化。

相关内容