
Чтобы получить 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
uses \@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}