Два знака сноски в 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-- \footnotetextuses \@thefnmark, который перезаписывается каждый раз \footnotemarkпри применении, поэтому множественные вызовы \footnotemarkувеличат footnoteсчетчик, но нет никакой связи между этими значениями счетчика сносок и соответствующими \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}

введите описание изображения здесь

Связанный контент