我正在准备一个书体项目,试图确保每页的行数恰好与字块的高度相符,这样跨页和底页的两页上的行数就能对齐。\raggedbottom
正如您所推测的那样,没有。
对于正文,typearea
我使用的 KOMA-Script 可以完美地处理这个问题,我得到了一个适合精确行数的字体块。但是,我将其用于enotez
尾注章节,我选择以\small
字体大小排版。并且没有理由认为\textheight
计算的结果typearea
适合\normalsize
排版的整个页面的精确行数\small
,事实上,它们不适合。
我想通过稍微调整行距来实现尾注与正文相同的对齐效果,以便尾注章节也符合确切的行数。但是我似乎无法做到,因此有此问题。
本书的正常字体大小为11pt
,使用scrbook
class withDIV=12
和 papersize 234mm:156mm
。
\documentclass[11pt]{scrbook}
\KOMAoptions{
paper=234mm:156mm, % small royal octavo
DIV=12, % DIV calls '\typearea' and recalculates it.
headings=normal, % less large headings.
}
尾注是使用从 派生的enotez
自定义环境设置的。我设置和(据说)以删除项目之间的垂直空间,但允许使用一些粘合。我希望这会对应于常规段落的垂直间距行为(尽管我可能错了)。enumitem
description
parsep=\parskip,
itemsep=0pt,
\parskip
\usepackage{enumitem}
\usepackage{enotez}
\setenotez{
list-heading=\addchap{#1},
list-style=customendnotes,
split=chapter,
backref,
reset,
}
\newlist{customendnotes}{description}{4}
\setlist[customendnotes]{
leftmargin=1em,
listparindent=1em,
labelsep=.2em,
parsep=\parskip, % 0pt plus 1pt
itemsep=0pt,
% noitemsep, % sames as parsep=0pt,itemsep=0pt => underfull vboxes...
}
\DeclareInstance{enotez-list}{customendnotes}{list}
{
list-type = customendnotes,
format = \small,
}
现在,\normalsize
获取一个10.95pt
带有前导的字体13.6pt
(\baselineskip
),\small
是10pt
带有前导的字体12pt
。typearea
设置\textheight
一个500.6pt
。
正文为:(500.6 + (13.6 - 11)) / 13.6 = 37
,第37轮。
最后的注释是:(500.6 + (12 - 10)) / 12 = 41.88333
。
因此,字体块应该能够容纳近 42 行,但 41 行是完整的。我想稍微增加那里的行距,这样这个页面就能正好容纳 41 行。
所以我想:(((500.6 - (41*10)) / 40 ) + 10 = 12.265pt
将其反转(500.6 + (12.265 - 10)) / 12.265 = 41
,检查)
因此,12.265pt
是我想要的理论指导。我尝试用 来设置它\linespread
。{\small \linespread{1.02208333333}\selectfont \the\baselineskip}
结果为12.26495pt
,足够接近了。
但是,问题在于上述推理在某些地方存在缺陷,因为排版在 中的尾注页\small
根本放不下 41 行,而是 39 行或 40 行,视情况而定。结果,跨页的两页之间的行当然没有对齐(我给 加了一些胶水parsep
,但删除它只会导致垂直框未满)。我猜我遗漏了列表环境的一些垂直参数,但我真的无法确定原因。而且,由于不理解垂直空间从何而来,我无法得到正确的数字。
那么,问题是,为什么这一页不像我预期的那样适合 41 行?我如何才能正确计算(并设置)本章页面的行距,以便它适合字块中的确切行数?
将事物组合在一起的 MWE 示例。
\documentclass[11pt]{scrbook}
\KOMAoptions{
paper=234mm:156mm, % small royal octavo
DIV=12, % DIV calls '\typearea' and recalculates it.
headings=normal, % less large headings.
}
\usepackage{enumitem}
\usepackage{enotez}
\setenotez{
list-heading=\addchap{#1},
list-style=customendnotes,
split=chapter,
backref,
reset,
}
\newlist{customendnotes}{description}{4}
\setlist[customendnotes]{
leftmargin=1em,
listparindent=1em,
labelsep=.2em,
parsep=\parskip, % 0pt plus 1pt
itemsep=0pt,
% noitemsep, % sames as parsep=0pt,itemsep=0pt => underfull vboxes...
}
\DeclareInstance{enotez-list}{customendnotes}{list}{
list-type = customendnotes,
format = \small,
}
\AddToHook{env/customendnotes/begin}{\linespread{1.02208333333}\selectfont}
\usepackage{lipsum}
\usepackage{showframe}
\usepackage[hidelinks]{hyperref}
\ExplSyntaxOn
\NewDocumentCommand \testchapter {}
{
\prg_replicate:nn { 25 }
{
\lipsum[1]\endnote{\lipsum[][1-5]}
\lipsum[1]\endnote{\lipsum[][6-14]}
\lipsum[1]\endnote{\lipsum[][15-16]}
\lipsum[1]\endnote{\lipsum[][17-25]}
\lipsum[1]\endnote{\lipsum[][26-28]}
\lipsum[1]\endnote{\lipsum[][29-40]}
}
}
\ExplSyntaxOff
\begin{document}
\makeatletter
\newcommand\thefontsize[1]{{#1 The current font size is: \f@size pt\par}}
\makeatother
\thefontsize\normalsize % 10.95pt
\thefontsize\small %10pt
\the\textheight % 500.60022pt
\the\baselineskip % 13.6pt
{\small \the\baselineskip} % 12pt
{\small \linespread{1.02208333333}\selectfont \the\baselineskip} % 12.26495pt
\tableofcontents
\chapter{Chapter 1}
\testchapter
\chapter{Chapter 2}
\testchapter
\printendnotes
\end{document}
编辑:我认为我已经找到了罪魁祸首,但不是全部。enotez
为了支持hyperref
链接,添加了一个凸起的链接,其硬编码高度为1em
,这解释了我所发现的项目之间的空间。可以使用以下方法修复此问题:
\cs_set_protected:Npn \enotez_write_list_number:n #1
{
\bool_if:NT \l__enotez_hyperfootnotes_bool
{
% \box_move_up:nn {1em} { \hbox:n { \hypertarget {enz.#1} { } } }
\Hy@raisedlink { \hypertarget {enz.#1} { } }
}
\tl_use:N \l__enotez_list_number_format_tl
\bool_lazy_and:nnTF
{ \l__enotez_hyperfootnotes_bool }
{ \l__enotez_hyperbackref_bool }
{
\exp_args:Nnx
\hyperlink {enz.#1.backref}
{ \exp_not:V \l__enotez_endnote_mark_tl }
}
{
\str_if_eq:neTF {a} { \prop_item:Nn \g__enotez_endnote_man_prop {#1} }
{ \prop_item:Nn \g__enotez_endnote_mark_prop {#1} }
{ \exp_not:V \l__enotez_endnote_mark_tl }
}
}
这样,现在 41 行就合适了。但是,如果我将设置\linespread
为我计算出的理论值(\linespread{1.02208333333}
,以实现 的前导12.265pt
),第 41 行会再次跳转到下一页。反复试验表明,我可以达到的最高值为\linespread{1.0199966}
(结果为\baselineskip
)12.23987pt
。我仍然想知道为什么会有这种差异。
答案1
enotez
建议上游调整凸起的超链接(https://github.com/cgnieder/enotez/issues/42),已经实现并将在下一版本中提供 (当前为 2022/01/04 的 v0.10d)。