Tcolorbox - notas al pie de página al final de cada página
Estoy usando tcolorbox
para rodear mi texto con un cuadro de color.
Parece que no puede colocar notas al pie de página al final de cada página. En cambio, los coloca al final de toda la caja. Demostración a continuación:
Como puedes ver:
- La nota al pie 1 aparece al final del cuadro (porque la inserté usando el
\footnote{}
comando adecuado . - Notas al pie 2-4 son falsos - He creado manualmente utilizando superíndices en el texto, y una combinación de
\hrule\
, al\fakefill
mando, y elenumitem
paquete.
¿Cómo puedo lograr algo como las notas al pie 'falsas' que creé con el comando \ footnote? Es decir, se coloca en la parte inferior de la página correspondiente (no al final de todo el cuadro).
Además, me gustaría que el texto de la nota al pie esté alineado a la izquierda con la regla de la nota al pie, similar a mis notas al pie falsas, en lugar de sangrar (como la nota al pie 1 real al final).
MWE para la imagen de arriba:
\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}
Respuestas
De forma predeterminada, el contenido del tcolorbox
entorno se procesa en un minipage
env (establecido por capture=minipage
). Es lo minipage
que cambia el comportamiento de \footnote
.
En el siguiente ejemplo, emulo el comportamiento normal de \footnote
por
- restaurar el contador relacionado con la nota al pie (de
mpfootnote
afootnote
), y - posponer la inserción a
\footins
(normalmente hecha en\@footnotetext
) hasta el final de la primera capatcolorbox
.
Actualmente, todos los \footnote
mensajes de texto usados en un rompible tcolorbox
se componen como si se usaran al final de la última parte.
Se pueden hacer parches similares minipage
, pero el sistema de clave-valor tcolorbox
hace que el parche sea más suave (menos necesidad de modificar macros internas) y más ligero (códigos más cortos).
\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}