Tcolorbox - Fußnoten am Ende jeder Seite
Ich benutze tcolorbox
, um meinen Text mit einem farbigen Kästchen zu umgeben.
Es scheint, dass keine Fußnoten am Ende jeder Seite platziert werden können. Stattdessen werden sie am Ende der gesamten Box platziert. Demonstration unten:
Wie du siehst:
- Fußnote 1 erscheint am Ende des Feldes (weil ich es mit dem richtigen
\footnote{}
Befehl eingefügt habe . - Fußnoten 2-4 sind gefälscht - ich manuell erstellt sie hochgestellten Indizes im Text verwendet wird , und eine Kombination aus
\hrule\
, der\fakefill
Befehl, und dasenumitem
Paket.
Wie kann ich so etwas wie die 'falschen' Fußnoten erreichen, die ich mit dem Befehl \ footnote erstellt habe? Dh am Ende der entsprechenden Seite platziert (nicht am Ende der gesamten Box).
Außerdem möchte ich, dass der Fußnotentext linksbündig mit der Fußnotenregel ausgerichtet wird, ähnlich wie bei meinen gefälschten Fußnoten, und nicht eingerückt wird (wie die eigentliche Fußnote 1 am Ende).
MWE für das Bild oben:
\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}
Antworten
Standardmäßig wird der Inhalt der tcolorbox
Umgebung in einer Umgebung minipage
(festgelegt von capture=minipage
) verarbeitet. Es ist minipage
das, was das Verhalten von ändert \footnote
.
Im folgenden Beispiel emuliere ich das normale Verhalten von \footnote
by
- Wiederherstellung des fußnotenbezogenen Zählers (von
mpfootnote
bisfootnote
) und - Verschieben des Einfügens auf
\footins
(normalerweise in\@footnotetext
) bis zum Ende der ersten Schichttcolorbox
.
Derzeit werden alle \footnote
in einem zerbrechlichen tcolorbox
Element verwendeten s so gesetzt, als würden sie am Ende des letzten Teils verwendet.
Ähnliche Patches können ausgeführt werden minipage
, aber das Schlüsselwertsystem von tcolorbox
macht den Patch weicher (weniger Notwendigkeit, interne Makros zu ändern) und leichter (kürzere Codes).
\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}