我用tcolorbox
彩色框包围我的文本。
似乎它无法将脚注放在每页的末尾。相反,它将它们放在整个框的末尾。以下演示:
如你看到的:
- 脚注 1 出现在框的末尾(因为我使用正确的
\footnote{}
命令将其插入。 - 脚注 2-4 是假的 - 我使用文本中的上标以及
\hrule\
、\fakefill
命令和enumitem
包的组合手动创建了它们。
我怎样才能实现像我用 \footnote 命令创建的“假”脚注?即放置在相关页面的底部(而不是整个框的末尾)。
此外,我希望脚注文本与脚注规则左对齐,类似于我的假脚注,而不是缩进(如末尾的实际脚注 1)。
上图的 MWE:
\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}
答案1
默认情况下,环境的内容在env(由 设置)tcolorbox
中处理。它改变了 的行为。minipage
capture=minipage
minipage
\footnote
在下面的例子中,我模拟\footnote
了
- 恢复脚注相关计数器(从
mpfootnote
到footnote
),以及 - 将插入推迟到
\footins
(通常在\@footnotetext
)直到第一层的结束tcolorbox
。
目前,\footnote
可破坏内容中使用的所有 s 的tcolorbox
排版都好像它们是在最后一部分的末尾使用的。
可以在 上完成类似的补丁minipage
,但是 的键值系统tcolorbox
使补丁更软(不需要修改内部宏)和更轻(代码更短)。
- 更新 2023-10-29
/tcb/after
在默认结束当前段落之前使用收集的脚注,以防止相邻的tcolorbox
脚注之间有多余的垂直空间。- 重定向标题和下部的脚注
\documentclass{article}
\usepackage[margin=.5in, papersize={10cm, 17cm}]{geometry}
\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 title pre=\tcb@restore@footnote, % just in case
before upper pre=\tcb@restore@footnote,
before lower pre=\tcb@restore@footnote,
},
% use for layer 1 boxes only
every box on layer 1/.append style={
% use \footnotetext befere the default /tcb/after ends the current paragraph
after pre=\tcb@footnote@use
}
}
\makeatother
\begin{document}
text\footnote{first}
\begin{tcolorbox}[title=Title\footnote{text}]
content\footnote{inside tcolorbox}
\tcblower
footnote with optional argument\footnote[10]{inside tcolorbox}
\end{tcolorbox}
\begin{tcolorbox}
another box immediately following
\end{tcolorbox}
text\footnote{middle}
\begin{tcolorbox}
content\footnote{inside second tcolorbox}\par
\begin{tcolorbox}
content\footnote{layer \thetcblayer}
\begin{tcolorbox}
content\footnote{layer \thetcblayer}
\end{tcolorbox}
footnote with optional argument\footnote[20]{inside nested tcolorbox}
\end{tcolorbox}
\end{tcolorbox}
text\footnote{last}
\end{document}
答案2
该footnotehyper
软件包可以轻松完成这项工作。如果超链接不受欢迎,就不要使用该hyperref
软件包。
\documentclass{article}
\usepackage[papersize={10cm, 20cm}]{geometry}
\usepackage{hyperref}% optional
\usepackage{lipsum}
\usepackage{tcolorbox}
\usepackage{footnotehyper}
\makesavenoteenv{tcolorbox}
\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}