处理可变高度字体

处理可变高度字体

我在使用 LaTeX 处理某种字体时遇到了问题,我想将其用于艺术项目。我正在编写一个基本文档,但是当我使用此字体编写普通文本时,基线会自动变化(可能是因为字体中的一些大写字母太高,但有趣的是,低于基线的字母(如 f、g 和 y)似乎不会影响这一点)。

由于该字体 (1805 Austerlitz Script) 不是免费的,因此我无法简单地分发它,我不确定发布 MWE 是否有意义,但我截取了一张屏幕截图来显示文本(中间没有编码)是如何以不均匀的基线打印的。请注意,我测试的一些但不是所有“手写”类型的脚本字体也发生了这种情况。

在此处输入图片描述

前六行都是一个段落,最后两行是第二个段落。此文本没有手动编码,也没有特殊环境。此处显示的所有字形都具有相同的字体大小。但是,正如您所见,大写字母“H”是此字体中的一个特殊罪魁祸首,它迫使第 1 行和第 2 行之间的空间比第 3 行和第 4 行之间的空间大得多。但并非所有大写字母都会影响此情况(参见第 3 行中的大写字母 A)。

我意识到这可能是字体问题。但是,有没有什么方法可以强制 LaTeX 以相等的基线(小于显示的基线)打印所有文本?我不在乎它是否会导致文本重叠(这是一个艺术项目,所以形式重于功能)。我宁愿不必每次在行之间出现这个额外的间隙时手动输入代码,因为这个文档是使用相同字体对更长的文档进行的测试。字体本身是不可协商的。

无论全局字体大小如何,该问题都会持续存在。更改 \baselineheight 似乎没有帮助,因为较低的值(甚至是负值)似乎只会减少段落之间的空间。它不会导致我必须接近的文本重叠。有趣的是,当我在 Microsoft Word 中使用相同的字体时,问题完全消失,这让我相信我可以在 LaTeX 中设置一些简单的方法来解决这个问题。

在此先感谢大家的所有建议。如果这是一个重复的问题或一个答案很简单的问题,我很抱歉——我已经搜索了几个小时试图弄清楚如何做到这一点。

— CB

答案1

(你随时可以做一个 mwe:-)


\documentclass{article}
\showoutput
\showboxdepth=3
\begin{document}

\fontfamily{cmdh}\selectfont

\def\z{High Dig  \^{H}at fff gg ABC $f=g$ }
\def\zz{one two three four five }

\z\z\z\z\z\z\z\z\z\z\z\z\z\z\z\z\z
\zz\zz\zz\zz\zz\zz\zz\zz\zz\zz\zz\zz\zz\zz

\end{document}

生产

在此处输入图片描述

当使用小写字母时,TeX 会使行距均匀,但当涉及较大的字母时,它会放弃并强制在每行文本之间留出 1pt 的间距。

你可以用眼睛看到或者查看日志,

$ pdflatex dd683  | grep '\.\.\..*lineskip'
...\glue(\lineskip) 1.0
...\glue(\lineskip) 1.0
...\glue(\lineskip) 1.0
...\glue(\lineskip) 1.0
...\glue(\lineskip) 1.0
...\glue(\lineskip) 1.0
...\glue(\baselineskip) 0.33333
...\glue(\baselineskip) 2.27777
...\glue(\baselineskip) 2.27777
...\glue(\baselineskip) 2.27777

如果你使用的是 Windows,那么你可能没有 grep,但请忽略它,只需使用 lineskip(通常不好)和 baselineskip(通常很好)查找行即可

所以您可以选择:接受不均匀的间距,或增加间距以适应最坏的情况,或强制均匀间距并检查是否有任何过度打印。

该段第一部分的行记录为

...\hbox(13.91667+1.94444)

所以它们比基线高出 14pt,比基线低 2pt,因此设置 16pt 的基线跳跃就足够了:

将字体选择更改为

 \fontfamily{cmdh}\fontsize{10pt}{16pt}\selectfont

产生一个日志

$ pdflatex dd683  | grep '\.\.\..*lineskip'
...\glue(\baselineskip) 0.13889
...\glue(\baselineskip) 0.13889
...\glue(\baselineskip) 0.13889
...\glue(\baselineskip) 0.13889
...\glue(\baselineskip) 0.13889
...\glue(\baselineskip) 0.13889
...\glue(\baselineskip) 4.33333
...\glue(\baselineskip) 6.27777
...\glue(\baselineskip) 6.27777
...\glue(\baselineskip) 6.27777

因此即使基线间距相同,看起来

在此处输入图片描述

但这可能相当宽敞,所以你可以使用

\lineskiplimit=-5pt
\fontfamily{cmdh}\fontsize{10pt}{13pt}\selectfont

允许使用 13pt 的基线间距进行最多 5pt 的叠印,从而产生

$ pdflatex dd683  | grep '\.\.\..*lineskip'
...\glue(\baselineskip) -2.86111
...\glue(\baselineskip) -2.86111
...\glue(\baselineskip) -2.86111
...\glue(\baselineskip) -2.86111
...\glue(\baselineskip) -2.86111
...\glue(\baselineskip) -2.86111
...\glue(\baselineskip) 1.33333
...\glue(\baselineskip) 3.27777
...\glue(\baselineskip) 3.27777
...\glue(\baselineskip) 3.27777

显示均匀间距,但插入约 3pt 的负间距,看起来像

在此处输入图片描述

这可能看起来比通常的全间距版本更好,但是数学斜体 f 确实碰到了重音符号 H,所以如果在实际情况下发生这种情况,您必须决定接受它或重新措辞或添加一个窄间距,这样它们就会错过或稍微增加基线间距。

相关内容