我在使用带封装的 OTF 时遇到了线路高问题fontspec
。
线条的基线跳跃因所用字母的深度而异。例如,包含“g”的线条比仅包含无深度字母的另一条线条高出一些点。
屏幕截图显示了奇怪的行为:您可以很容易地看到第二页的第一行比第一页低一点。两者之间的唯一区别是标题中的小写字母“g”。
我实际使用的字体是»Adobe Garamond Pro«,但我已经测试过其他字体,例如»Minion Pro«,遇到了同样的效果。
但是,如果不使用 ,则不会产生效果fontspec
。这里有一个例子,当然只有在字体存在的情况下才有效:
\documentclass[a4paper,10pt,oneside]{memoir}
\usepackage{lipsum}
\usepackage{fontspec, calc}
\setmainfont{Adobe Garamond Pro}
\begin{document}
\chapter{Test what ever but lon er even lon er much lon er Test}
\lipsum[2-4]
\chapter{Testing what ever but longer even longer much longer}
\lipsum[2-4]
\end{document}
有人能向我解释一下这里发生了什么吗?请给我一个提示,如何解决?
答案1
以 Steven 修改后的例子来说,因为我有字体,所以如果你添加一些调试消息
\documentclass[a4paper,10pt,oneside]{memoir}
\usepackage{lipsum}
\usepackage{fontspec, calc}
\setmainfont{Palatino Linotype}
%\setmainfont{Adobe Garamond Pro}
\begin{document}
\chapter[zz]{Test what ever but lon er even lon er much lon er
Test}
\expandafter\typeout\expandafter{\the\font}
\expandafter\typeout\expandafter{\the\baselineskip}
\expandafter\typeout\expandafter{\the\fontcharht\font`N}
\expandafter\typeout\expandafter{\the\prevdepth}
\expandafter\typeout\expandafter{\the\dimexpr\prevdepth +\fontcharht\font`T\relax}
\lipsum[2-4]
\chapter{Test what ever but longer even longer much longer Test}
\expandafter\typeout\expandafter{\the\font}
\expandafter\typeout\expandafter{\the\baselineskip}
\expandafter\typeout\expandafter{\the\fontcharht\font`N}
\expandafter\typeout\expandafter{\the\prevdepth}
\expandafter\typeout\expandafter{\the\dimexpr\prevdepth +\fontcharht\font`T\relax}
\lipsum[2-4]
\end{document}
然后你得到
\TU/PalatinoLinotype(0)/m/n/10
12.0pt
7.1582pt
0.78989pt
7.94809pt
[1]
\TU/PalatinoLinotype(0)/m/n/10
12.0pt
7.1582pt
5.54956pt
12.70776pt
[2]
TeX 被要求将段落的第一行设置为与前一行基线相差 12pt 的基线。在第一种情况下,这意味着实际添加的\baselineskip
间距将刚好超过 4pt,但在第二种情况下,即使该行直接在标题后邻接,也会有 12.7pt 的基线间距。在这种情况下,TeX 不会后退和过度打印以强制使用请求的基线,而是放弃\baselineskip
并插入固定的\lineskip
间距,该间距不依赖于它所分隔的行的高度和深度。\lineskip
通常是0pt
或1pt
但无论它有什么值,如果添加它,则意味着输出中的间距不一致。
答案2
显然,该字体具有较大的下降部(并且可能也有较大的上升部)。
稍微调整一下行距即可解决问题。在这个例子中,我使用了 Minion Pro,因为我没有 Adobe Garamond Pro。
巨大的设置是\lineskip
为了表明该参数没有发挥作用(如果起作用,你会看到一个非常大的垂直空间)。
\documentclass[a4paper,10pt,oneside]{memoir}
\usepackage{lipsum}
\usepackage{fontspec}
\setmainfont{Minion Pro}
\linespread{1.02} % increase the leading by 2%
\begin{document}
\setlength{\lineskip}{30pt} % just for testing
\chapter{Test what ever but lon er even lon er much lon er Test}
\lipsum[2-4]
\chapter{Testing what ever but longer even longer much longer}
\lipsum[2-4]
\end{document}
随着\linespread
调整
无需\linespread
调整
这里您可以看到由于\lineskip
进入场景而增加的 30pt 空间。
答案3
正如我在评论中指出的那样,我没有 Garamond Pro,但\setmainfont{Palatino Linotype}
使用 XeLaTeX确认了另一种常见字体存在问题
我假设章节标题放在没有支柱的框中,因此下降部分的深度会影响整个框的深度。一种解决方案是在\strut
每个章节标题的末尾添加一个。
\documentclass[a4paper,10pt,oneside]{memoir}
\usepackage{lipsum}
\usepackage{fontspec, calc}
\setmainfont{Palatino Linotype}
%\setmainfont{Adobe Garamond Pro}
\begin{document}
\chapter{Test what ever but lon er even lon er much lon er
Test\strut}
\lipsum[2-4]
\chapter{Test what ever but longer even longer much longer Test\strut}
\lipsum[2-4]
\end{document}