Duas marcas de rodapé em um tcolorbox geram notas de rodapé com o mesmo rótulo

Duas marcas de rodapé em um tcolorbox geram notas de rodapé com o mesmo rótulo

Para obter o footnotesna parte inferior da página, em vez de na parte inferior do tcolorbox, eu uso \footnotemarkdentro tcolorboxe \footnotetextabaixo do tcolorbox. Aqui está um 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}

e aqui está o resultado: (tive que fingir um pouco para manter o tamanho da imagem razoável.):

Saída

Observe que, na parte inferior da página, a nota de rodapé 2 e a nota de rodapé 3 estão rotuladas corretamente como 2 e 3, enquanto a nota de rodapé 1 está incorretamente rotulada como 2.

Responder1

A causa deste problema não tem nada a ver com tcolorbox-- \footnotetextusa \@thefnmarko qual é sobrescrito cada vez \footnotemarkque é aplicado, portanto, múltiplas chamadas de \footnotemarkaumentarão o footnotecontador, mas não há associação desses valores do contador de notas de rodapé com o \footnotetext. Múltiplas especificações de \footnotetextnão aumentam o rótulo do contador de notas de rodapé relevante.

É possível usar \footnotetext[value]{...}, em vez disso, o que define o footnotecontador em um grupo - ele não vazará para fora.

A solução abaixo rastreia o número de \footnotemarkchamadas e atribui um rótulo a ele, \morefootnotetextrecupera o rótulo e extrai o valor do contador, sendo então digitado com \footnotetext[value]{...}.

Esta abordagem irá falhar se houver mais \footnotetextchamadas do que \footnotemarktarefas!

\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}

insira a descrição da imagem aqui

informação relacionada