使用 \small 字体对章节尾注进行微调

使用 \small 字体对章节尾注进行微调

我正在准备一个书体项目,试图确保每页的行数恰好与字块的高度相符,这样跨页和底页的两页上的行数就能对齐。\raggedbottom正如您所推测的那样,没有。

对于正文,typearea我使用的 KOMA-Script 可以完美地处理这个问题,我得到了一个适合精确行数的字体块。但是,我将其用于enotez尾注章节,我选择以\small字体大小排版。并且没有理由认为\textheight计算的结果typearea适合\normalsize排版的整个页面的精确行数\small,事实上,它们不适合。

我想通过稍微调整行距来实现尾注与正文相同的对齐效果,以便尾注章节也符合确切的行数。但是我似乎无法做到,因此有此问题。

本书的正常字体大小为11pt,使用scrbookclass 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自定义环境设置的。我设置和(据说)以删除项目之间的垂直空间,但允许使用一些粘合。我希望这会对应于常规段落的垂直间距行为(尽管我可能错了)。enumitemdescriptionparsep=\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),\small10pt带有前导的字体12pttypearea设置\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}(结果为\baselineskip12.23987pt。我仍然想知道为什么会有这种差异。

答案1

enotez建议上游调整凸起的超链接(https://github.com/cgnieder/enotez/issues/42),已经实现并将在下一版本中提供 (当前为 2022/01/04 的 v0.10d)。

相关内容