当我使用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}
你能证实这一点吗?我猜这不是故意的?有解决方法吗?(我不需要解决方法 ATM,但也许其他人需要)
最后,如果确实如此,我应该在哪里报告此错误?(因为我没有报告错误的经验)
floatrow
我在 Windows 10、 v0.3b 和v3.11上使用 MikTex biblatex
。
祝你今天过得愉快! :)
答案1
biblatex
添加代码以\@floatboxreset
禁用浮点数中的引用跟踪。这发生在钩子中\AtEndPreamble
。该floatrow
包有效地接管\@floatboxreset
并用替换它,加载时\FR@flboxreset
的原始定义被保留并用作以后的基础。但这意味着加载后发生的更改将被忽略或丢弃。\@floatboxreset
floatrow
\FR@flboxreset
\@floatboxreset
floatrow
有几种可能的解决方法。您也可以初始化\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}
或者也可以执行
\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
为这么多不同的包和类打补丁并不是明智之举,因为维护这些补丁需要密切关注相关包和类的代码可能发生的变化。