Tcolorbox - notes de bas de page à la fin de chaque page
J'utilise tcolorbox
pour entourer mon texte d'une boîte colorée.
Il semble qu'il ne puisse pas placer de notes de bas de page à la fin de chaque page. Au lieu de cela, il les place à la fin de la boîte entière. Démonstration ci-dessous:

Comme vous pouvez le voir:
- La note de bas de page 1 apparaît à la fin de la boîte (car je l'ai insérée en utilisant la
\footnote{}
commande appropriée . - Les notes de bas de page 2 à 4 sont fausses - je les ai créées manuellement en utilisant des exposants dans le texte et une combinaison de
\hrule\
la\fakefill
commande et duenumitem
package.
Comment puis-je obtenir quelque chose comme les «fausses» notes de bas de page que j'ai créées avec la commande \ footnote? C'est-à-dire placé en bas de la page concernée (pas à la fin de la boîte entière).
De plus, j'aimerais que le texte de la note de bas de page soit aligné à gauche sur la règle de note de bas de page, similaire à mes fausses notes de bas de page, plutôt que mis en retrait (comme la note de bas de page 1 à la fin).
MWE pour l'image ci-dessus:
\documentclass[12pt]{article}
% look of the page
\usepackage[margin=0.8in, top = 1.3in, bottom = 1.3in, headheight = 0.6in]{geometry}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fancyhdr}
\renewcommand{\headrulewidth}{0pt}
\setlength{\footskip}{50pt}
\setlength{\footnotesep}{\baselineskip} % space between footnotes
\setlength{\parindent}{0pt} % space at start of paragraph
\setlength{\parskip}{0.14in} % space between paragraphs
% math
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsthm}
% relevant to this question
\usepackage{enumitem}
\usepackage[many]{tcolorbox}
\usepackage{xcolor}
\newcommand*{\fakebreak}{\par\vspace{\textheight minus \textheight}\pagebreak}
\newcommand*{\fakefill}{\par\vspace{\textheight minus \textheight}}
\begin{document}
\begin{tcolorbox}[%
parbox = false,
colback = white, colframe = black,
left = 0.5in, right = 0.5in, top = 0.4in, bottom = 0.4in,
height = 9.06in,
sharp corners,
boxrule = 1pt,
breakable,
]
\renewcommand{\thempfootnote}{\arabic{mpfootnote}}
First sentence.\footnote{Footnote 1.} \\
Second sentence.$^2$
\fakefill
\par\noindent\rule{0.3\textwidth}{0.4pt}
{\footnotesize
\begin{enumerate}[leftmargin = 0in, rightmargin = 0in, topsep = 0pt]
\item[$^2$] Footnote 2.
\end{enumerate}
}
\newpage
Third sentence.$^3$\\
Fourth sentence.$^4$
\fakefill
\par\noindent\rule{0.3\textwidth}{0.4pt}
{\footnotesize
\begin{enumerate}[leftmargin = 0in, rightmargin = 0in, topsep = 0pt]
\item[$^3$] Footnote 3.
\item[$^4$] Footnote 4.
\end{enumerate}
}
\end{tcolorbox}
\end{document}
Réponses
Par défaut, le contenu de l' tcolorbox
environnement est traité dans un minipage
env (défini par capture=minipage
). C'est minipage
cela qui change le comportement de \footnote
.
Dans l'exemple suivant, j'émule le comportement normal de \footnote
by
- la restauration du compteur lié aux notes de bas de page (de
mpfootnote
àfootnote
), et - reporter l'insertion à
\footins
(normalement effectuée\@footnotetext
) jusqu'à la fin de la première couchetcolorbox
.
Actuellement, tous les \footnote
s utilisés dans un breakable tcolorbox
sont composés comme s'ils étaient utilisés à la fin de la dernière partie.
Des correctifs similaires peuvent être effectués sur minipage
, mais le système clé-valeur de tcolorbox
rend le correctif plus doux (moins besoin de modifier les macros internes) et plus léger (codes plus courts).
\documentclass{article}
\usepackage[papersize={10cm, 15cm}]{geometry}
\usepackage{lipsum}
\usepackage[hooks]{tcolorbox}
\makeatletter
% restore footnote internals to those in normal page, not minipage
\def\tcb@restore@footnote{%
\def\@mpfn{footnote}%
\def\thempfn{\arabic{footnote}}%
\let\@footnotetext\tcb@footnote@collect
}
% collect footnote text
\long\def\tcb@footnote@collect#1{%
% expand \@thefnmark before appending before app to \tcb@footnote@acc
\expandafter\gappto\expandafter\tcb@footnote@acc\expandafter{%
\expandafter\footnotetext\expandafter[\@thefnmark]{#1}%
}%
}
\def\tcb@footnote@use{%
\tcb@footnote@acc
\global\let\tcb@footnote@acc\@empty
}
\global\let\tcb@footnote@acc\@empty
\tcbset{
% restore for every box
every box/.style={
before upper pre=\tcb@restore@footnote
},
% use for layer 1 boxes only
every box on layer 1/.append style={
after app=\tcb@footnote@use
}
}
\makeatother
\begin{document}
text\footnote{first}
\begin{tcolorbox}
content\footnote{inside tcolorbox}\par
footnote with optional argument\footnote[10]{inside tcolorbox 2}
\end{tcolorbox}
text\footnote{third}
\begin{tcolorbox}
content\footnote{inside second tcolorbox}\par
footnote with optional argument\footnote[20]{inside second tcolorbox 2}
\begin{tcolorbox}
content\footnote{layer 2}
\begin{tcolorbox}
content\footnote{layer 3}
\end{tcolorbox}
\end{tcolorbox}
\end{tcolorbox}
text\footnote{seventh}
\end{document}
