我最近对网格排版产生了浓厚的兴趣,因此试图让页面上的所有元素彼此之间以 值的倍数分隔开\baselineskip
(不要尝试这样做,这会让你发疯)。经过一番折腾,除了脚注之外,我让所有内容都适合。根据 LaTeX2e 手册,\footnotesep
确定分隔脚注的支柱的高度。但是,将脚注的字体大小从 改为\footnotesize
并将\small
改为 后\baselineskip
,14.5pt
我可以告诉你不是这种情况,或者至少看起来并非如此。支柱高度应为 baselineskip 的 70%,因此\footnotesep
应为 ,10.15
以保证所有脚注都以 的倍数分隔\baselineskip
。但我的经验告诉我,它更接近10.425pt
。那么这是什么情况呢?算法实际上是如何工作的?
这是我的代码(用于 lualatex):
\documentclass[12pt,twoside]{article}
\usepackage{fontspec}
\usepackage[textwidth=130mm,textheight=40\baselineskip, centering, a4paper]{geometry}
\usepackage{lipsum}
\setlength{\headheight}{14.5pt}
\setlength{\splittopskip}{14.5pt}
\setlength{\lineskiplimit}{-\maxdimen}
\setlength{\parskip}{0pt}
\usepackage{footmisc}
\setlength{\skip\footins}{16.05pt}
\setlength{\footnotesep}{10.425pt}
\makeatletter
\renewcommand\footnoterule{
\kern-4.05\p@
\hrule\@width.4\columnwidth
\kern3.65\p@
}
\makeatother
\flushbottom
\renewcommand{\footnotesize}{}
\renewcommand{\footnotelayout}{\small\baselineskip=14.5pt}
\newcommand{\baselinegrid}{%
\raisebox{0pt}[\height][0pt]{\makebox[0pt][l]{%
\begin{minipage}[t]{\textwidth}%
\begin{color}{red}%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\rule{\textwidth}{.05pt}\linebreak%
\end{color}
\end{minipage}%
}}}
\begin{document}
\baselinegrid
texttexttext\footnote{a footnote.}
\lipsum[1-2]
textextext\footnote{another footnote.}\footnote{another footnote.}\footnote{another footnote.}\footnote{another footnote.}\footnote{another footnote.}\footnote{another footnote.}\footnote{another footnote.}\footnote{another footnote.}\footnote{another footnote.}\footnote{another footnote.}
\lipsum[3-4]
\end{document}
这样会生成一个在脚注中行距相当一致的文档(实际上整个文档都是如此)。但是,如果您更改\footnotesep
为,10.15
您应该会看到分离开始发生。发生了什么事??
答案1
问题在于您使用了\small
14.5pt\baselineskip
的 。它\small
本身使用了\baselineskip
13.6pt 的 。这意味着\strut
的\small
深度为 0.3*13.6pt = 4.08pt,而\baselineskip
的14.5pt
正常深度为 0.3*14.5pt = 4.35pt。由于设置\baselineskip
不会改变,因此\strut
您使用 的\strut
,\small
因此您会错过 4.35-4.08=0.27pt。您必须通过将其添加到 来补偿这一点\footnotesep
,这意味着正确值为 10.15+0.27=10.42pt,略小于您的估计值。
答案2
除了 minipage 脚注的类似代码外,\footnotesep
标准格式版本脚注中的唯一用途是它在\foonotetext
包的定义中出现了两次,例如footmisc
将具有类似的代码,具体取决于所使用的选项。
\long\def\@footnotetext#1{\insert\footins{%
\reset@font\footnotesize
\interlinepenalty\interfootnotelinepenalty
\splittopskip\footnotesep
% %%%%%%%%%%%
\splitmaxdepth \dp\strutbox \floatingpenalty \@MM
\hsize\columnwidth \@parboxrestore
\protected@edef\@currentlabel{%
\csname p@footnote\endcsname\@thefnmark
}%
\color@begingroup
\@makefntext{%
\rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
% %%%%%%%%%%%
\color@endgroup}}%
第一次使用在本地进行设置\splittopskip
,以便如果脚注拆分到一页,则延续部分的基线位于\footnotesep
插入框的顶部。
第二个用途是在每个脚注开头插入一个深度、宽度和高度为零的规则,作为间距。在每个脚注结尾处也插入\footnotesep
一个高度和宽度为零且深度为的规则。\strut
没有特定的规则说\footnotesep
\strut 的高度应该是\baselineskip
这些长度的 70% 并且可以相互独立地设置。
在你的情况下,如果你添加,\showoutput
你会看到每一行脚注文本都是
.\hbox(10.425+4.08003)x369.88582, glue set 265.5038fil
因此,框的高度来自\footnotesep
,深度来自 ,\dp\strutbox
总和略大于 14.404pt,因此略大于您的网格间距。您需要将 strutbox 设置为适合您的基线的大小,并设置 \footnotesep
为\ht\strutbox
,以便在此处获得精确的间距。(或至少设置\footnotesep
为\dimexpr\baselineskip-\dp\strutbox
)