答案1
课程memoir
在某种程度上做到了这一点,但总的来说,我认为除非某些 LaTeX 大师能想出点什么,否则需要进行人工干预。然而,应用可能非常有限,以至于他们可能觉得不值得花时间,尽管也许有人会把这当作一项智力练习。
基本上,您要求两种脚注样式。如果一页只有一个脚注,则应居中。如果有多个脚注,则设置为两列,居中。
% oefootnotesprob.tex SE 622546
\documentclass{memoir}
\setlength{\textheight}{0.33\textheight} % just to shorten the pages
\usepackage{lipsum}
%% make footnotes start at 1 on each page
\usepackage{perpage}
\MakePerPage{footnote}
\renewcommand{\footnoterule}{} %% no rule above footnotes
\begin{document}
%%% footnotes set in two twolumns, non centered
\twocolumnfootnotes
\footmarkstyle{(#1) } % marker in footnote set in parentheses
\lipsum[1]%
\footnote{One}\footnote{Two}\footnote{Three}
\newpage
%%%%% just one (centered) footnote on this page
\plainfootnotes
\setlength{\footmarkwidth}{0em}
\footmarkstyle{\hfil (#1) }
\lipsum[2]\footnote{Another \hfil}
\end{document}
MWE 显示了一个居中的单个脚注和两列未居中的脚注。我不知道如何自动执行这些操作,也不知道如何将两列居中。
另一个想法是,如果一页上的脚注溢出到下一页,而下一页的格式不同(多个与单个),该怎么办?
答案2
综合讨论中的想法,我提出了以下针对最多 4 个脚注的逐案实施方案:
\newcount\footcount
\def\stackfootnotes#1{\tabskip1em plus 1fil\halign to\hsize{&\hfil##\hfil\cr #1}}
\def\footnote#1{\advance\footcount by1 \toks\footcount={#1}
\ifdim\pagegoal<\maxdimen
\dimen0=\pagegoal \advance\dimen0 by-\ht\footins
\advance\dimen0 by-\dp\footins \pagegoal=\dimen0\fi
\setbox\footins=\vbox{\ifcase\footcount \or
\stackfootnotes{\the\toks1 \cr}\or
\stackfootnotes{\the\toks1 &\the\toks2 \cr}\or
\stackfootnotes{\the\toks1 &\the\toks2 \cr\multispan2\hfil\the\toks3 \hfil\cr}\or
\stackfootnotes{\the\toks1 &\the\toks3 \cr\the\toks2 &\the\toks4 \cr}\fi}
\ifdim\pagegoal<\maxdimen
\dimen0=\pagegoal \advance\dimen0 by\ht\footins
\advance\dimen0 by\dp\footins \pagegoal=\dimen0\fi}
虽然费力,但容易适应。\footcount
必须在每一页上重置为0。
拐弯处危险:这些\pagegoal
操作旨在为页面底部的脚注框保留空间。如果我们使用 ,TeX 会自动执行此操作\insert\footins
,但我们\box\footins
直接进行操作。(另请参阅我对该问题的评论。)