我在某些 tcolorbox 中的一些脚注方面遇到了这个问题。我希望将脚注显示在脚注标记所在的页面底部。显然,当 tcolorbox 很长并且分成 2 或 3 页时(它们是可拆分的 tcolorbox),很难实现这一点。这个问题与
用垂直条或背景装饰环境,但保留脚注的默认行为(即正确页面上的文本)
(首先我想对这篇文章发表评论,但我太“新手”了,无法这样做(需要一些声誉点......))。
显然问题的核心在于放置浮点数的 LaTeX 算法,从以下帖子中人们可能会认为我的问题没有解决方案。
然而,几年后,我想知道是否有人可以找到一种 TeX 补丁来按照要求放置脚注,例如使它们比其他类型的浮动对象具有某种优先级?
其他类似问题: tcolorbox 环境中的脚注
我在前言中提到的 tex 补丁是在这个论坛上找到的(Tcolorbox-每页末尾都有脚注) 使 tcolorbox 里面的脚注看起来就像普通的脚注一样,也就是说在 tcolorbox 外面。
任何想法?
问候,埃里克
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[ % Define your margins here
a4paper,
left=2.5cm,
right=2.5cm,
bottom=2.5cm,
textheight=650pt,
footskip=50pt
]{geometry}
\usepackage{lipsum,changepage}
\usepackage[breakable,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}
\begin{tcolorbox}[breakable,
colback=blue!7!white,
colframe=blue!75!black,
title=Protocole détaillé:
]
\lipsum[1-4]
Nous avons mis en suspension
le pellet\footnote{Egalement appelé culot en français, il correspond au fond
du tube dans lequel les diatomées se sont agglomérées.}
\lipsum[1-1]
Nous avons ensuite introduit le contenu dans des tubes à cryogénisation pour faire
un shock freeze\footnote{Méthode qui consiste à plonger brusquement les tubes
dans de l'azote liquide afin de détériorer les membranes.}.
Nous avons ajouté ensuite du $\beta$-mercaptoéthanol et
du Tween qui servent à lyser\footnote{Ouvrir, voire détruire les membranes des cellules.}
\lipsum[1-5]
\end{tcolorbox}
\end{document}
答案1
这会将脚注写入辅助文件,因此需要两次传递。在每一页的末尾,它会检查下一页上是否有脚注,并将其添加到队列中。它们可能与正常脚注(tcolorbox 之外)的顺序不一致。
另一个可能的问题是,如果脚注放在页面底部附近,在这种情况下,脚注及其标记将循环,永远不会在同一页上。使用单独的 \footnotemark 和 \footnotetext 来强制放置。
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[ % Define your margins here
a4paper,
left=2.5cm,
right=2.5cm,
bottom=2.5cm,
textheight=650pt,
footskip=50pt
]{geometry}
\usepackage{lipsum,changepage}
\usepackage[breakable,hooks]{tcolorbox}
\newif\iffootaux
\newcounter{footaux}% for \csname
\newcounter{auxpage}% to handle frontmatter etc.
\setcounter{auxpage}{1}
\makeatletter
\tcbset{every box/.style={before upper app=\tcb@footnote@setup}}
\def\tcb@footnote@setup{\let\footnotetext=\footaux
\let\footnote=\footnoteaux}
\def\footnoteaux{\@ifnextchar[\@xfootnoteaux{\stepcounter{footnote}%
\footnotemark[\thefootnote]\@footaux[\thefootnote]}}
\def\@xfootnoteaux[#1]{\footnotemark[#1]\@footaux[#1]}
\def\footaux{\@ifnextchar[\@footaux{\@footaux[\thefootnote]}}
\def\@footaux[#1]#2{\protected@write{\@auxout}{\let\theauxpage\relax}{\string\newfootnote{\theauxpage}{#1}{#2}}}
\newcommand{\newfootnote}[3]{% #1 = \theauxpage, #2 = \thefoontnote, #3 = text
\ifnum#1=1\relax
\footnotetext[#2]{#3}%
\else
\stepcounter{footaux}%
\expandafter\xdef\csname footauxpage\thefootaux\endcsname{#1}%
\expandafter\xdef\csname footauxnumber\thefootaux\endcsname{#2}%
\expandafter\protected@xdef\csname footauxtext\thefootaux\endcsname{#3}%
\fi}
% to run at the end of every page (debug version)
\newcommand{\addfootaux}{\loop
\@ifundefined{footauxpage\thefootaux}{\footauxfalse}{%
\count1=\csname footauxpage\thefootaux\endcsname\relax
\advance\count1 by -1
\ifnum\count1=\value{auxpage}%
\expandafter\let\expandafter\footauxnumber\csname footauxnumber\thefootaux\endcsname
\expandafter\let\expandafter\footauxtext\csname footauxtext\thefootaux\endcsname
\footnotetext[\footauxnumber]{\footauxtext}%
\footauxtrue
\else
\footauxfalse
\fi}
\iffootaux
\global\expandafter\let\csname footauxpage\thefootaux\endcsname\relax
\global\expandafter\let\csname footauxnumber\thefootaux\endcsname\relax
\global\expandafter\let\csname footauxtext\thefootaux\endcsname\relax
\stepcounter{footaux}%
\repeat
\stepcounter{auxpage}}
\makeatother
\AtBeginDocument{\setcounter{footaux}{1}}% reset counter after \newfootnote
\AddToHook{shipout/after}{\addfootaux}
\begin{document}
\begin{tcolorbox}[breakable,
colback=blue!7!white,
colframe=blue!75!black,
title=Protocole détaillé:
]
\let\footnotetext=\footaux
\lipsum[1-4]
Nous avons mis en suspension
le pellet\footnote{Egalement appelé culot en français, il correspond au fond
du tube dans lequel les diatomées se sont agglomérées.}
\lipsum[1-1]
Nous avons ensuite introduit le contenu dans des tubes à cryogénisation pour faire
un shock freeze\footnote{Méthode qui consiste à plonger brusquement les tubes
dans de l'azote liquide afin de détériorer les membranes.}.
Nous avons ajouté ensuite du $\beta$-mercaptoéthanol et
du Tween qui servent à lyser\footnote{Ouvrir, voire détruire les membranes des cellules.}
\lipsum[1-5]
\end{tcolorbox}
\end{document}