对于任何想要实现最佳微排版效果的人来说:有些字体显然带有microtype
特定设置,而其他字体则没有。在这种情况下,microtype
应用“默认”设置可能对所有其他字体来说都不太完美。
LaTeX 提供了很多字体,因此可能很难找出所有具有特定microtype
设置的字体,但我们可以列出一些最受欢迎的字体。目前,我正在使用这些newcent
字体系列,不知道microtype
它是否使用了默认的微排版设置,我从未对其进行过调整。
哪些常见字体具有可与microtype
包一起使用的特定配置设置?
(请将更多字体配置添加到此流行字体列表中microtype
,或者在不支持自定义配置或性能不佳的字体之外做个注释)
- 我相信所有主流 TeX 发行版都附带 PSNFSS PostScript 字体集。这些字体有预打包的设置吗?
package
— / 罗马家族 / 无衬线字体 / 打字机 /- 默认 — / CM Roman / CM Sans Serif / CM Typewriter /
mathpazo
— / 帕拉蒂诺 / 无 / 无 /mathptmx
— / 次 / 无 / 无 /helvet
— / 无 / Helvetica / 无 /avant
— / 无 / 前卫 / 无chancery
— / Zaph Chancery / 无 / 无 /bookman
— / 书迷 / 先锋派 / 信使 /newcent
— / 新世纪教科书 / 先锋派 / 信使 /charter
— / 宪章 / 无 / 无 /
- 我还使用 LyX 来组织我的小说,这些是可从其下拉菜单中使用的其他罗马字体:
- 拉丁现代
- 乌托邦**(
fourier
) - 比特流宪章
- 灰色衬线体
- 混凝土罗马
- 以下是一些更受欢迎的字体。(Garamond 是当今小说中最流行的字体):
- URW 加拉蒙德
- EB 加拉蒙德
- Garamond 专家
- Linux 浪子
- 露西达·布莱特
因为我的项目是一本小说,所以我想从具有microtype
特定设置的字体中选择一种字体。
答案1
我认为期望在这里创建和维护一个完整的列表是不合理的。我认为最好解释如何确定字体是否具有这种支持,以便用户可以自己确定特定字体的当前答案。如果没有其他目的,这将使人们能够检查此处的答案是否仍然正确。
Thérèse 是对$(kpsewhich -var TEXMFDIST)/tex/latex/microtype/
的,它包含 的配置文件microtype
。但这仅提供有限的信息,因为:
- 一些配置文件位于其他地方;
- 配置文件的存在通常并不表示建立支持,因为特定字体是否具有这种支持取决于其他因素(引擎,编码等);
- 缺少配置文件并不表示缺乏这种支持,因为一种字体可能会被声明为别名,并且如果字体足够相似,这可能相当于自定义配置。
我举例说明这些观点。
其他地方的配置文件
- EB Garamond
$(kpsewhich -var TEXMFDIST)/tex/latex/ebgaramond/mt-EBGaramond.cfg
:。 - Junicode:
$(kpsewhich -var TEXMFDIST)/tex/latex/junicode/mt-Junicode.cfg
文件的存在并不构成支持
某个文件可能存在但不支持特定引擎的特定编码的字体。
- 无论配置文件如何,某些引擎都不支持 just的某些功能
microtype
。pdfTeX 支持所有功能,LuaTeX 现在支持许多功能,XeTeX 支持某些功能,而 TeX 则不支持任何功能。 mt-LatinModernRoman.cfg
如果您使用 pdfTeX 进行编译,则不支持 Latin Modern,因为此文件仅涉及 XeTeX 和 LuaTeX 使用的编码。因此,字体文件的存在并不能证明您的文档中将使用自定义设置,即使您的引擎支持所有microtype
功能并且您使用该字体。[支持 Latin Modern - 见下文 - 但如果您使用 pdfTeX,此文件无法证明任何事情。]
没有文件并不代表缺乏支持
- 一个文件可能支持多种字体。
mt-cmr.cfg
包括此代码:
\SetProtrusion
[ name = lmr-T1,
load = cmr-T1 ]
{ encoding = {T1,LY1},
family = lmr }
{
\textquotedblleft = {300,400}, \textquotedblright = {300,400}
}
T1
这意味着拉丁现代罗马体在编码或中加载时将主要使用计算机现代罗马体的突起设置LY1
,并进行一些添加或调整。
但关键的工作是在microtype.cfg
。那里有很多别名定义如下,包括:
\ifMT@fontspec
\DeclareMicrotypeAlias{lmr} {Latin Modern Roman}
\else
\DeclareMicrotypeAlias{lmr} {cmr} % lmodern
\fi
这意味着如果fontspec
正在使用,则将使用 的设置mt-LatinModernRoman.cfg
。否则,将使用 Computer Modern Roman 的设置。
但是,仅仅因为你使用的是拉丁现代罗马字体,这并不一定正确。你必须使用它作为 lmr
。如果您使用的是lmodern
包,那么一切都会好起来。但是如果您使用的是cfr-lm
,那么您使用的是 Latin Modern Roman,但是您不是使用lmr
:
\renewcommand{\rmdefault}{clm\cfrlm@rmpt\cfrlm@rmol}
这是哪个系列取决于使用的选项,但无论激活哪个选项,结果都不会是lmr
。 而是clm...
。 因此配置的别名microtype.cfg
将不起作用。
要确定是否microtype
会使用自定义设置,我们需要查看另一部分cfr-lm.sty
(删除了一些评论):
\newcommand{\cfr@ffs}{% alias to cmr
clm,clm2,clm2j,clmj,% roman
clms,clm2js,clm2s,clmjs,% sans
clmqs,clm2jqs,clm2qs,clmjqs%
}
\gdef\cfrlm@MicroType@Aliases{%
\@for \xx:=\cfr@ffs \do {%
\DeclareMicrotypeAlias{\xx}{cmr}}%
}
\def\cfrlm@MT@Hook{\cfrlm@MicroType@Aliases}
\@ifpackageloaded{microtype}{%
\cfrlm@MT@Hook}{%
\@ifundefined{Microtype@Hook}{%
\let\Microtype@Hook\cfrlm@MT@Hook}{%
\g@addto@macro\Microtype@Hook{\cfrlm@MT@Hook}}}
microtype
当且仅当用户加载时,这将为各个系列的 Computer Modern Roman 设置别名。
[说实话,我现在不确定这些是否正确。每次我研究这个问题时,它看起来都不一样。但是,我的代码显然是基于这个网站上的讨论,所以它一定很好 ;),不是吗?]
酸性测试
如果这一切看起来真的很复杂,那是因为它确实很复杂。幸运的是,有一种非常简单的方法可以确定字体是否具有自定义microtype
设置。只需在文档中使用该字体,编译microtype
并检查日志文件即可。
\documentclass{article}
\usepackage{cfr-lm}
\usepackage{microtype,kantlipsum}
\begin{document}
\kant[1]
\end{document}
使用 pdfLaTeX 编译此测试,日志文件中出现以下几行:
(/usr/local/texlive/2014/texmf-dist/tex/latex/microtype/mt-cmr.cfg
File: mt-cmr.cfg 2013/05/19 v2.2 microtype config. file: Computer Modern Roman
这表明别名已导致相关设置被加载。
现在替换cfr-lm
并kpfonts
检查日志:
Package microtype Info: Loading generic settings for font family
(microtype) `jkp' (encoding: OT1).
(microtype) For optimal results, create family-specific settings.
(microtype) For optimal results, create family-specific settings.
(microtype) See the microtype manual for details.
这告诉我们没有找到jkp
带有编码的自定义设置,因此在这种情况下依赖于通用设置。OT1
microtype
最后说明
当然,字体特定设置是否是一种改进完全取决于这些设置的质量。如果我弄乱了别名,cfr-lm
或者创建 Computer Modern Roman 设置的人缺乏对细节的关注,那么您可能最好使用通用设置!
编辑
cfr-lm
以下是用 pdfLaTeX 替换上面的内容newcent
并使用 pdfLaTeX 进行编译的结果:
Package microtype Info: Loading generic settings for font family
(microtype) `pnc' (encoding: OT1).
(microtype) For optimal results, create family-specific settings.
(microtype) See the microtype manual for details.
因此microtype
在这种情况下使用通用设置。
答案2
相关:如果您希望使用特定字体,但它没有现有的凸出设置,该怎么办?有策略吗?是的,只要您愿意做这项工作。这最适合 OpenType 字体;其他类型的结果未知(对我来说)。
您可以将字体文件加载到字体编辑器中,例如 FontForge。记下它的网格单位(对于 OpenType *.otf 字体,几乎总是每 em 1000 个)。将重要的字母(例如小写字母)复制i
到 Guide 层。这将作为位置的参考。
然后查看您感兴趣的每个字形(取决于您的语言)。您需要将其水平移动多少,以便与指南相比其左侧看起来不错i
?这是左突出的一个有用值。
右突出比较棘手,因为它涉及将参考字母的右侧与其他字母的右侧进行比较。单个指南字母不起作用。但是,您可以创建一个复制字体,其中所有内容都水平翻转;然后其左侧值将成为原始字体的右侧值。
当写入微类型突起值时,请务必使用 em 单位。
注意:请自行判断。有些人建议使用很久以前(汽车出现之前)使用但现在已不常用的突出部分。例如,在正常文本块外悬挂连字符。