如何在一个文档中对齐短脚注(居中)和长脚注(左)

如何在一个文档中对齐短脚注(居中)和长脚注(左)

我想知道是否存在一些包/代码可以满足以下三个标准:

  • 较短的脚注,例如 Quine (1960, 22),将位于页面底部的中央,如果(且仅当)特定页面上只有一个脚注。

  • 一旦在给定页面上出现较长的脚注,即具有多行并因此按照“通常”的脚注边距运行的脚注,则出现在同一页面上的较短的脚注将“适应”并与“通常”的左边距对齐。

  • 此外,如果一页上同时出现两个甚至三个短脚注(无论是否存在较长的脚注),它们都会“变成”一个段落。也就是说,较短的脚注将全部位于一行中,但仍居中。

我这里没有任何 MWE,因为我的问题是关于这是否可能。手册和我所知道的所有来源都没有讨论这个问题(或者我没有找到它,在这种情况下我深表歉意)。

我现在正在读几本牛津大学出版社的最新书籍,它们确实有这种脚注设计,我很好奇是否可以使用 TeX/LaTeX/XeTeX 实现。我知道 footmisc、manyfoot 和 bigfoot,但它们的文档中都没有明确的说明可以解决这个问题。我认为,例如,manyfoot 可以通过引入不同的级别来帮助解决段落样式问题,但这样你就有不同的计数器,不同的脚注调用方式,这很复杂,或者至少不是理想的。我正在寻找一个更基本的解决方案。

非常感谢您的帮助。

答案1

此答案试图解决提问者问题的第 1 点和第 2 点,但没有解决第 3 点。此外,由于此答案使用了collect,因此它存在要求用户\includecollection在给定页面的最后一个脚注之后的缺点。这样一来,答案的价值就非常低了。

但是,我希望阅读此答案的人可能知道\includecollection在每一页上自动实现此操作的方法。我尝试通过重新定义来实现\thepage。但是,到那时,页面已经太旧而无法捕获脚注。

\documentclass{article}
\textheight 1in

\usepackage{collect}
\usepackage{ifthen}
\makeatletter
\let\sv@makefntext\@makefntext
\renewcommand\@makefntext[1]{\footform\sv@makefntext{#1}}
\makeatother

\definecollection{fntext}

\newcounter{startnote}
\setcounter{startnote}{1}
\newcounter{currentpage}
\setcounter{currentpage}{-1}

\newlength\indentlength
\setlength\indentlength{\textwidth}
\addtolength\indentlength{-\parindent}

\newcommand\myfootnote[1]{%
  \ifthenelse{\equal{\value{page}}{\value{currentpage}}}{}{%
    \setcounter{currentpage}{\value{page}}%
    \def\footform{\centering}}%
  \setbox0=\hbox{\footnotesize#1}%
  \ifdim\wd0>\indentlength\gdef\footform{}\fi%
  \footnotemark%
  \begin{collect}{fntext}{\setcounter{footnote}{\thestartnote}\footform}{}
    \stepcounter{startnote}%
    \footnotetext{#1}%
  \end{collect}
}

\begin{document}
This\myfootnote{short} is 
a\myfootnote{Long long long long long long long long long long long long
 long long long long long long long} test\myfootnote{third}.

\includecollection{fntext}

\clearpage

This\myfootnote{short} is a\myfootnote{second} test\myfootnote{third}.

\includecollection{fntext}
\end{document}

第 1 页:

在此处输入图片描述

第2页:

在此处输入图片描述

相关内容