![分别申报\footnotemarkfootnotetext](https://linux22.com/image/395586/%E5%88%86%E5%88%AB%E7%94%B3%E6%8A%A5%5Cfootnotemark%E2%80%8Bfootnotetext.png)
这有点相反这个问题我有一份很难排版的文档,因为里面有很多很长的脚注。其中一页有很多难看的垂直空间,因为后面的段落因为有脚注而无法向前移动。
有没有办法放宽脚注规则,允许 (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
分别申报\footnotemark
footnotetext
比较一下:
\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 页
第2页
而第二个产生:
第 1 页
第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 页
第2页
(在这种情况下有第三页;我没有为其添加屏幕截图,因为它对于本次讨论来说不是特别有趣)
- 现在,通过调用
\mySpecialfootnotes
(即\@footnotetext
修补包含第二次调用的范围\footnote
):
第 1 页
第2页
(此例中没有第三页)
脚注
\@footnotetext
参见ltfoat.dtx 或 source2e.pdf 以及 TeXbook 第 280-281 页中的定义\insert
(\@makefntext
根据上下文可以有不同的定义,例如参见 article.cls)。\flushbottom
如果您尝试使用in effect(例如使用 book 类的默认参数),这会导致第一页出现可怕的“Underfull \vbox (badness 10000) has occurred while \output is active” 。