我需要编写一个字体为12pt
和18pt
行间(精确)的文档。我使用命令\linespread{X}\selectfont
行来增加行间大小……但我不知道必须增加多少才能使 X 达到18pt
。您知道如何正确定义 X 以获得18pt
每个行间吗?
谢谢 !
答案1
当使用金属活字时,字符被刻在大小相同的金属片上,独立于上升部和下降部
来源:http://designwithfontforge.com/en-US/The_EM_Square.html (请注意,为了便于阅读,图片已被镜像。)
可以通过插入金属条(主要由铅制成,因此为“引线”)来分隔线条。
TeX 为此使用了不同的模型,因为它只是通过参考点来对齐字符,所以它的模型是不同的:它试图保持基线之间的固定距离(当前的量\baselineskip
)。
18pt 行距的含义相当模糊。如您所见,图中没有行距,但字符不接触:“yp”刚好在“th”上方,但它们之间有一些空间。这是因为承载字符的部分的高度大于所有字符中最大高度和最大深度的总和(与一个支撑)。
因此,您可以参考一条线的最深下行线和下一条线的最高上行线之间的 18pt;或者您可以根据支柱的深度和高度来测量 18pt。这将产生截然不同的结果。
建议的leading
包可以解决这个问题,因为它允许以点为单位指定基线距离,而不是计算因子\linespread
。然而,一个简单的
\leading{18pt}
不行:
\documentclass[12pt]{article}
\usepackage{leading}
\leading{18pt}
\begin{document}
\noindent
\llap{\smash{%
\vrule height0pt depth \fontchardp\font`y \hskip 1pt
\vrule height0pt depth \dimexpr\fontchardp\font`y + 18pt\relax
}}by\\
by
\end{document}
该图像清楚地表明 18pt 是基线跳跃。
\documentclass[12pt]{article}
\usepackage{leading}
\AtBeginDocument{%
\settoheight{\dimen0}{%
ABCDEFGHIJKLMNOPQRSTUVWXYZ%
abcdefghijklmnopqrstuvwxyz%
}%
\settodepth{\dimen2}{%
ABCDEFGHIJKLMNOPQRSTUVWXYZ%
abcdefghijklmnopqrstuvwxyz%
}%
\leading{\dimexpr18pt+\dimen0+\dimen2}%
}
\begin{document}
\noindent
\llap{\smash{%
\vrule height0pt depth \fontchardp\font`y \hskip 1pt
\vrule height0pt depth \dimexpr\fontchardp\font`y + 18pt\relax
}}by\\
by
\end{document}
现在从 y 的底部到 b 的顶部正好有 18pt。
如果使用重音大写字符,则可能必须修复用于测量最大高度和深度的字母。
答案2
TeX 使用三个基本寄存器来控制行间空间。第一个是。如果后面的两行在寄存器\baselineskip
意义上不重叠,则将 用作后面两个基线的距离。“在寄存器意义上重叠”(默认设置为 0pt,但应该为正数或 [更常见的] 负数)表示:第一行中最大的下降部和第二行中最大的上升部之间的距离(当尝试使用 的规则时)大于或等于。如果此条件不成立,则根本不会为这两行使用 ,但会在这些行之间插入 (纯 TeX 默认为 1pt)。\lineskiplimit
\baselineskip
\lineskiplimit
\baselineskip
\lineskiplimit
\baselineskip
\lineskip
示例:如果设置\lineskiplimit
为足够的负值,则所有线的\baselineskip
距离都与它们是否重叠无关。
如果将\lineskiplimit
和设置\baselineskip
为 0pt,则会\lineskip
插入所有线之间,并且基线网格通常会丢失。
请注意,\baselineskip
nad\lineskip
是“跳过”寄存器(它们可能包括可拉伸性和/或可收缩性)但是\lineskiplimit
是“dimen”寄存器。