Tcolorbox - przypisy na końcu każdej strony
Używam, tcolorbox
aby otoczyć mój tekst kolorową ramką.
Wydaje się, że nie może umieszczać przypisów na końcu każdej strony. Zamiast tego umieszcza je na końcu całego pudełka. Demonstracja poniżej:

Jak widzisz:
- Przypis 1 pojawia się na końcu pudełka (ponieważ wstawiłem go za pomocą odpowiedniego
\footnote{}
polecenia. - Przypisy 2-4 są fałszywe - ręcznie tworzone je za pomocą indeksu górnego w tekście, a kombinacja
\hrule\
The\fakefill
poleceń, aenumitem
pakiet.
Jak mogę uzyskać coś takiego jak „fałszywe” przypisy, które utworzyłem za pomocą polecenia \ footnote? Tj. Umieszczony na dole odpowiedniej strony (nie na końcu całego pola).
Ponadto chciałbym, aby tekst przypisu był wyrównany do lewej z regułą przypisu, podobnie jak moje fałszywe przypisy, a nie wcięty (jak rzeczywisty przypis 1 na końcu).
MWE na zdjęciu powyżej:
\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}
Odpowiedzi
Domyślnie zawartość tcolorbox
środowiska jest przetwarzana w pliku minipage
env (ustawionym przez capture=minipage
). To minipage
zmienia zachowanie \footnote
.
W poniższym przykładzie naśladuję normalne zachowanie \footnote
by
- przywracanie licznika związanego z przypisami (od
mpfootnote
dofootnote
) oraz - odraczanie wstawiania
\footins
(zwykle gotowe\@footnotetext
) do końca pierwszej warstwytcolorbox
.
Obecnie wszystkie \footnote
znaki używane w łamanym tcolorbox
są składane tak, jakby były używane na końcu ostatniej części.
Podobne łaty można zrobić na minipage
, ale system klucz-wartość tcolorbox
sprawia, że łatka jest bardziej miękka (mniejsza potrzeba modyfikowania wewnętrznych makr) i lżejsza (krótsze kody).
\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}
