分别申报\footnotemark​footnotetext

分别申报\footnotemark​footnotetext

这有点相反这个问题我有一份很难排版的文档,因为里面有很多很长的脚注。其中一页有很多难看的垂直空间,因为后面的段落因为有脚注而无法向前移动。

有没有办法放宽脚注规则,允许 (a) 更激进地拆分脚注或 (b) 将它们全部推到下页,以尝试使排版更好?如果有办法在本地应用这些更改,那就更好了,因为我只在绝对必要时才这样做。

答案1

您有以下杠杆:

  • \footnotemark使用和将脚注标记(在上标位置打印数字 1、2、...)与脚注文本(位于页面主体底部的内容)分开footnotetext

  • 在脚注文本中设置\floatingpenalty=〈number〉,以调整 TeX 对接受\footnote当前页面上包含调用的文本的糟糕程度,即使该页面上已经有一个拆分脚注(即,接受当前页面上包含脚注的文本,这些脚注将不得不打印在后续页面上)。默认值为\floatingpenalty=10000(请参阅 ltfoat.dtx 或 source2e.pdf 中的定义\@footnotetext)。使用小于 10000 的数字,如\floatingpenalty=0\relax(您可以使用空格标记代替\relax)以使脚注不从包含脚注标记的页面开始更容易接受。请参阅下文以了解执行此更改的简单方法。

  • 在脚注文本中以垂直模式插入\penalty〈number〉(例如在 之后\par),以建议甚至强制 TeX(在准备文档的最终版本时,视具体情况而定)在特定点拆分脚注。使用〈number〉\relax空格标记结束 —— 与上文相同。小于或等于 -10000 的值强制中断(即脚注拆分)。请参阅 TeXbook 第 124 页,第二段。

  • 降低\interfootnotelinepenalty(默认为 100)以使 TeX 更愿意在脚注中的段落中间换行。默认值已经相当低了,除非所有其他可能性都已用尽,否则我不会理会这个参数。

注意:\floatingpenalty从脚注文本内部更改应该只会影响该脚注(更改仅限于插入1)。试图从脚注外部更改它以包含多个脚注是行不通的,而且可能会影响其他浮点数;但是,正如我将在下面展示的那样,使用etoolbox,您可以局部修补以在给定的 TeX 组内\@footnotetext使用您选择的 。\floatingpenalty

分别申报\footnotemarkfootnotetext

比较一下:

\documentclass{article}
\usepackage{lipsum}

\begin{document}
\lipsum[1-2]%
abcd\footnote{\lipsum[1-4]\lipsum[4][1-4]}~and%
\footnote{Footnote text declared along with its mark.}
\lipsum[3][2]%
\lipsum[3][2-4]
\end{document}

有了这个:

\documentclass{article}
\usepackage{lipsum}

\begin{document}
\lipsum[1-2]%
abcd\footnote{\lipsum[1-4]\lipsum[4][1-4]}~and%
\footnotemark
\lipsum[3][2]%
\footnotetext{Footnote text forcibly separate from its mark.}
\lipsum[3][2-4]
\end{document}

第一个给出:

第 1 页

第 1 页


第2页

第2页

而第二个产生:

第 1 页

第 1 页


第2页

第2页

修补@footnotetext 以进行本地更改\floatingpenalty

例子

请考虑以下示例:

\documentclass{article}
\usepackage{etoolbox}
\usepackage{lipsum}

\makeatletter
% Argument: custom value to use locally for \floatingpenalty inside footnotes
\newcommand*{\mySpecialfootnotes}[1]{%
  \patchcmd{\@footnotetext}{\floatingpenalty\@MM}{\floatingpenalty#1\relax}%
           {}{\errmessage{Couldn't patch \string\@footnotetext}}%
}
\makeatother

\begin{document}
\lipsum[1-2]%
abcd\footnote{\lipsum[1-4]\lipsum[4][1-4]}~and%
{%
  \mySpecialfootnotes{0}%
  \footnote{Footnote we can delay to the next page.}%
}%
\lipsum[3-5]
\end{document}

根据正常\@footnotetext定义,TeX 会拒绝拆分第一个脚注,因为这会导致第二个脚注从第 2 页开始,而脚注标记将在第 1 页(与第一个脚注的标记在同一行)。如果您注释掉该\mySpecialfootnotes{0}调用,就会得到以下结果。2如果您按上面所示执行\mySpecialfootnotes{0},则对于从该组内开始的每个脚注:

{%
  \mySpecialfootnotes{0}%
  \footnote{Footnote we can delay to the next page.}%
}%

(在本例中,这意味着“对于第二个脚注”),在脚注标记出现位置之后的页面上开始脚注文本被认为是可以的(作为参数传递给\mySpecialfootnotes—0 的惩罚 0 是中性的:既不被认为是好的,也不被认为是坏的)。这允许拆分第一个脚注,并导致第二个脚注出现在第 2 页,与第 1 页上的标记分开。

示例截图

  • 首先,您能得到什么没有调用\mySpecialfootnotes(即\@footnotetext未修改且\floatingpenalty与标准 LaTeX 一样):

第 1 页

第 1 页,未修补@footnotetext


第2页

第 2 页,未修补@footnotetext

(在这种情况下有第三页;我没有为其添加屏幕截图,因为它对于本次讨论来说不是特别有趣)

  • 现在,通过调用\mySpecialfootnotes(即\@footnotetext修补包含第二次调用的范围\footnote):

第 1 页

带有 @footnotetext 补丁的第 1 页


第2页

第 2 页,已修补 @footnotetext

(此例中没有第三页)

脚注

  1. \@footnotetext参见ltfoat.dtx 或 source2e.pdf 以及 TeXbook 第 280-281 页中的定义\insert\@makefntext根据上下文可以有不同的定义,例如参见 article.cls)。

  2. \flushbottom如果您尝试使用in effect(例如使用 book 类的默认参数),这会导致第一页出现可怕的“Underfull \vbox (badness 10000) has occurred while \output is active” 。

相关内容