为什么某些字体中的基线跳过取决于字母的深度?

为什么某些字体中的基线跳过取决于字母的深度?

我在使用带封装的 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通常是0pt1pt但无论它有什么值,如果添加它,则意味着输出中的间距不一致。

答案2

显然,该字体具有较大的下降部(并且可能也有较大的上升部)。

稍微调整一下行距即可解决问题。在这个例子中,我使用了 Minion Pro,因为我没有 Adob​​e 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}

在此处输入图片描述

相关内容