tcolorbox 中的两个脚注标记产生具有相同标签的脚注

tcolorbox 中的两个脚注标记产生具有相同标签的脚注

为了将 放在footnotes页面底部而不是 的底部tcolorbox,我使用了 的\footnotemark内部tcolorbox\footnotetext的下方tcolorbox。这是一个 MWE:

\documentclass[11pt]{book}
\usepackage{tcolorbox}

\begin{document}
\begin{tcolorbox}
This is a \textbf{tcolorbox}\footnotemark.

And this is some text.\footnotemark. 
\end{tcolorbox}
\footnotetext{This is footnote 1}
\footnotetext{This is footnote 2}
And more text.\footnote{This is footnote 3}
\end{document}

以下是输出:(我不得不稍微伪造一下,以保持图片大小合理。):

输出

请注意,在页面底部,脚注 2 和脚注 3 都正确标记为 2 和 3,而脚注 1 被错误标记为 2。

答案1

导致此问题的原因与 无关tcolorbox--每次应用时都会覆盖其\footnotetext用途,因此多次调用会增加计数器,但这些脚注计数器值与相应的 没有任何关联。多次指定不会增加相关的脚注计数器标签。\@thefnmark\footnotemark\footnotemarkfootnote\footnotetext\footnotetext

也可以使用\footnotetext[value]{...}另一种方法,将footnote计数器设置在一个组中——它不会泄漏到外面。

下面的解决方案跟踪呼叫次数\footnotemark并为其分配标签,\morefootnotetext检索标签并提取计数器值,然后使用进行排版\footnotetext[value]{...}

如果\footnotetext调用的次数多于\footnotemark分配的次数,这种方法将会失败!

\documentclass[11pt]{book}
\usepackage{xassoccnt}
\usepackage{tcolorbox}
\usepackage{refcount}

\newcounter{totalfootnotes}
\newcounter{totalfootnotetexts}

\DeclareAssociatedCounters{footnote}{totalfootnotes}% Count all footnotes

\usepackage{xpatch}
\usepackage{xparse}
\xpatchcmd{\footnotemark}{\stepcounter}{\refstepcounter}{}{}
\xapptocmd{\footnotemark}{\label{fnmark-\number\value{totalfootnotes}}}{}{}
\xpretocmd{\footnote}{\stepcounter{totalfootnotetexts}}{}{}% Explicitly step!


\NewDocumentCommand{\morefootnotetext}{o+m}{%
  \IfValueTF{#1}{%
    \footnotetext[#1]{#2}%
  }{%
    \stepcounter{totalfootnotetexts}%
    \footnotetext[\getrefnumber{fnmark-\number\value{totalfootnotetexts}}]{#2}
  }%
}


\begin{document}
\begin{tcolorbox}
This is a \textbf{tcolorbox}\footnotemark

And this is some text.\footnotemark
\end{tcolorbox}
\morefootnotetext{This is footnote 1 from inside}
\morefootnotetext{This is footnote 2 from inside}
And more text.\footnote{This is footnote 3 from outside}

Now an example with 4 footnotemark\footnote{A dummy footnote} calls
\begin{tcolorbox}
This is a \textbf{tcolorbox}\footnotemark

And this is some text.\footnotemark

Stuff\footnotemark Otherstuff\footnotemark
\end{tcolorbox}
\morefootnotetext{This is footnote 3 from inside}
\morefootnotetext{This is footnote 4 from inside}
\morefootnotetext{This is footnote 5 from inside}
\morefootnotetext{This is footnote 6 from inside}

\end{document}

在此处输入图片描述

相关内容