当 \footnotetext 被其他包重新定义时,如何强制 biblatex 修补脚注?

当 \footnotetext 被其他包重新定义时,如何强制 biblatex 修补脚注?

biblatex与该包一起使用时会发出以下警告linguex

Package biblatex Warning: Patching footnotes failed.
(biblatex) Footnote detection will not work.

这是因为linguex重新定义是\footnotetext为了支持脚注和尾注中的编号示例。

然而,重新定义\footnotetext使得biblatex修补脚注以支持同上同上引用。

根据一个答案(这里),只要我们不使用同上引用样式。

但是如果用户想同时使用两者linguex,并且同上引用样式?有没有办法让 biblatex 覆盖已执行的任何操作\footnotetext

梅威瑟:

\documentclass{article}

\usepackage{linguex}

\usepackage
[
  backend = biber,
  style   = authoryear-ibid,
]
{biblatex}

\begin{document}
\end{document}

答案1

您可以同时获得两全其美的效果:

\documentclass{article}

\usepackage
[
  backend = biber,
  style   = authoryear-ibid,
]
{biblatex}
\usepackage{linguex}

\makeatletter
\let\linguex@footnotetext\@footnotetext
\let\@footnotetext\predefinedfootnotetext
\AtBeginDocument{%
  \let\predefinedfootnotetext\@footnotetext
  \let\@footnotetext\linguex@footnotetext
}
\makeatother

\addbibresource{biblatex-examples.bib}

\setlength{\textheight}{5cm} % just to get a smaller image

\begin{document}

Lorem \cite{worman} ipsum\footcite{sigfridsson} dolor\footnote{\cite{sigfridsson}}

Text and text\footnote{A different example would be:
\ex. This is the first level of embedding 
  \a. This is the second level
  \b. This is still the second level, but:
    \a. This is the third level 
    \b. This is not the end. 
    \b. This is the end.\par}.

\end{document}

解释。

linguex设为;\predefinedfootnotetext然后根据原始值\@footnotetext重新定义。但是,当在文档开头尝试修补时,它失败了。因此,我们可以暂时恢复修补程序的含义,然后在修补完成后重新应用重新定义。\@footnotetextbiblatex\@footnotetext\@footnotetextlinguex

向团队提出功能请求,biblatex以便他们也支持linguex,这很容易,因为他们只需要\predefinedfootnotetext在包加载的情况下进行修补,就像他们为其他一些修补命令不同的情况提供的那样。

在此处输入图片描述

答案2

您可以使用以下方法恢复脚注检测功能

\makeatletter
\long\def\@footnotetext#1{\@noftnotefalse\predefinedfootnotetext{\toggletrue{blx@footnote}#1}%
         \@noftnotetrue}
\makeatother

但这并不能消除警告,但现在可以安全地忽略它。

平均能量损失

\documentclass{article}

\usepackage{linguex}

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

\makeatletter
\long\def\@footnotetext#1{\@noftnotefalse\predefinedfootnotetext{\toggletrue{blx@footnote}#1}%
         \@noftnotetrue}
\makeatother

\begin{document}
Lorem \cite{worman} ipsum\footcite{sigfridsson} dolor\footnote{\cite{sigfridsson}}
\end{document}

给出

1 Sigfridsson 和 Ryde 1998。

2同上

在脚注中,而没有修改的话你会得到

1 Sigfridsson 和 Ryde 1998。

2 Sigfridsson 和 Ryde 1998。

答案3

这是消除biblatex警告的方法:

\documentclass{article}
\usepackage{linguex}

\makeatletter
\let\@footnotetext\predefinedfootnotetext
\makeatother

\usepackage[backend=biber, style=authoryear-ibid]{biblatex}    
\begin{document}
\end{document}

我们\@footnotetext使用 恢复到它的标准定义\predefinedfootnotetext,它是由linguex它本身提供的。

但请注意,这样我们就不能再linguex使用脚注,并且需要借助于类似enumerate环境的东西来获取脚注中的编号示例。

相关内容