XeTeX:Vollkorn 字体导致水平盒子过满

XeTeX:Vollkorn 字体导致水平盒子过满

XeTeX,版本 3.14159265-2.6-0.99996(TeX Live 2016/Debian)

我正在使用 fontspec 将主字体设置为福尔科恩。字体比较大,所以我猜测latex无法优化hboxes是正常的?

我尝试了 Debian 软件包 fonts-vollkorn,卸载后,我直接从制造商处尝试了 TTF 和 OTF。知道问题可能是什么吗?Vollkorn 是唯一一款我遇到此问题的字体。在较大的文件中也多次出现此问题。

\documentclass[12pt, a4paper, ngerman]{scrreprt}

\usepackage[ngerman]{babel}

\usepackage{fontspec}
\setmainfont{Vollkorn}
\setsansfont{FreeSans}
\setmonofont{FreeMono}

和:

Overfull \hbox (22.59073pt too wide) in paragraph at lines 144--154
\TU/Vollkorn(0)/m/n/12 für nicht ansteckende Krankheiten, wie Krebs, Diabetes u
nd Herz-Kreislauf-Erkrankungen.

在此处输入图片描述

答案1

TeX 将段落分成行时,会经历一个三阶段的过程(Bouckaert,2003,概率换行算法):

  • 阶段1,仅使用空格作为断点。每行都有一个“不良度”,其值取决于行的紧度或松度。如果没有一个不良度超过预定义的限制,则段落将被接受。
  • 否则,在阶段2,TeX 会尝试使用连字符,并对每行附加额外/替代的“不良程度”计算。如果任何不良程度均不超过另一个预定义限制,则该段落将被接受。
  • 否则,在第 3 阶段之后,TeX 添加\emergencystretch并重复第 2 阶段,希望额外的可拉伸性足够好。

如果所有阶段都失败,那么 TeX 只会吐出过长的行。

您有多种选择来影响换行:

  1. 正如@HenriMenke 指出的那样,在 之后,禁止Herz-自动连字符Kreislauf和,因此您可以使用from代替。Erkrankungen"=babel-但是,这将有效抑制硬连字符周围的字距调整。
  2. 以类似的方式,您始终可以手动插入连字点,如 中所示Herz-Kreis\-lauf-Er\-kran\-kun\-gen此方法可保留硬连字符周围的字距。

    到目前为止,上述两种方法都需要手动调整:您转到超出范围的行并更改突出的单词,以帮助 TeX 进入第二阶段。由于字距调整(与 相比Audio"=VideoAudio-Video,我更喜欢第二种方法。
  3. \emergencystretch为 TeX 在第 3 阶段的开展做出积极贡献。
  4. 更改 Vollkorn 的字间距。恕我直言,Vollkorn 中的正常间距太窄(这是字体设计师故意为之):它只有15  em 宽。相比之下,Times、Palatino 和 Baskerville 的间距都是14  em 宽。就我个人而言,我不介意将 Vollkorn 的字间距(以及其可拉伸性和可收缩性)扩大 10%。

断线方法

\documentclass{article}
\usepackage{showframe}
\usepackage[ngerman]{babel}
\usepackage{fontspec}
\setmainfont{Vollkorn-Regular.otf}
\newfontface\VollkornLargerSpace{Vollkorn-Regular.otf}[
  WordSpace=1.1
]

\setlength\parindent{0pt}% for illustration
\setlength\parskip{6pt}  % for illustration

\begin{document}
Unfortunate line breaks:\\
für nicht ansteckende Krankheiten, wie Krebs, Diabetes und
Herz-Kreislauf-Erkrankungen.

Method~1:\\
für nicht ansteckende Krankheiten, wie Krebs, Diabetes und
Herz"=Kreislauf"=Erkrankungen.\hfill
\hbox{An eagle eye will notice that kernings in `-K' and `-E' are lost!}

Method~2:\\
für nicht ansteckende Krankheiten, wie Krebs, Diabetes und
Herz-Kreis\-lauf-Er\-kran\-kun\-gen.

`Audio"=Video' versus `Audio-Video'.

\begingroup
\setlength\emergencystretch{1em}%
Method~3:\\
\dots\ sterben immer zuerst und in größerer Zahl.
Sie sind ebenso weit anfälliger
für nicht ansteckende Krankheiten, wie Krebs, Diabetes und
Herz-Kreislauf-Erkrankungen. % an empty line to finish this local paragraph

\endgroup

\begingroup
\VollkornLargerSpace % use larger inter-word spaces
Method~4:\\
\dots\ sterben immer zuerst und in größerer Zahl.
Sie sind ebenso weit anfälliger
für nicht ansteckende Krankheiten, wie Krebs, Diabetes und
Herz-Kreislauf-Erkrankungen.
\endgroup
\end{document}

相关内容