几天以来,我一直在使用该fontspec
选项\setmainfont[Renderer=Basic] ...
,以便使用该microtype
选项。tracking=true
LuaLaTeX
对此我有一个简单的问题:为什么使用Renderer=Basic
会让我的 pdf 计算变得如此之慢。现在使用lualatexmk
-- 一次运行几乎需要几个小时才能完成,而使用普通引擎进行几分钟(10+)的高风扇活动计算则需要几分钟lualatex
。
那么,再问一遍:这是什么Renderer=Basic
意思?与默认值有什么区别?
答案1
Luaotfload 2.4 版 (CTAN链接) 正式支持与 Xetex 类似的字母间距。您可以在字体定义时启用它(请参阅手册 详情请见):
\font \mainfont = "file:Iwona-Regular.otf:letterspace=15" at 42pt
其中,该值是所请求字体大小的百分比,即上例中的 6.3 pt。(或者,您可以使用选项直接将值指定为因子kernfactor
。为了达到与示例中相同的效果,您需要添加
kernfactor=0.15
。字距因子虽然在功能上相当于letterspace
,但在内部更有意义,并且在很大程度上与\setcharacterkerning
字母间距代码所衍生的 Context 系列宏的行为一致。)插入此宽度作为额外的字距在字形之间,对已经存在的字距、连字以及 TeX 节点列表中的其他成员进行特殊处理。
在 Fontspec 术语中,该功能应该可以通过 等LetterSpace
键直接访问\fontspec
。\set.*font
请注意,由于此功能很新,而且只经过了少量测试,因此可能仍存在一些问题。目前(2014 年 1 月)有 二 漏洞 跟踪器上报告 2.4 版本中有补丁,但需要进一步测试。
此外,输出不能保证与 Xetex 或
\letterspacefont
原语(或 Pdftex)相同。为了进行比较,下面是一个简短的测试文件:
\def \testfont {Iwona-Regular.otf}
%\def \testfont {lmroman10-regular.otf}
%\def \testfont {MinionPro_Regular.otf}
\def \testsize {20pt}
\ifdefined \directlua
\input luaotfload.sty
\font \mainfont = "file:\testfont" at \testsize
\font \mainfontlskern = "file:\testfont:letterspace=15" at \testsize
\letterspacefont \mainfontlsfont = \mainfont 150
\else
\font \mainfont = "[\testfont]" at \testsize
\font \mainfontlskern = "[\testfont]:letterspace=15" at \testsize
\def \mainfontlsfont {<unsupported!>}
\fi
\newdimen \scratchwd
\newbox \scratchbox
\def \test #1{%
foo
\begingroup
#1%
\setbox \scratchbox \hbox {bar baz}%
\global \scratchwd = \wd \scratchbox%
\box \scratchbox
\endgroup\
bar
(\the \scratchwd)
\endgraf
}
\mainfont
\test \mainfontlskern %% font kerning
\test \mainfontlsfont %% increased sidebearings
\bye
\letterspacefont
和选项的值letterspace
可能会有细微的差别。根据 Pdftex 手册,
This primitive creates an instance of \Something{font} with the widths
of all glyphs increased by \Something{integer} thousandths of an em (as
set in \Something{font}). The effect is letter spacing, but the glyphs
are actually larger (sidebearings are increased), so a single glyph will
take more space.
Afaics 的 Luatex 实现也是如此
\letterspacefont
。由于字体大小和埃姆(四边形) 尺寸对于大多数字体来说都是相同的,输出应该不会有太大差异。然而,还有另一个更明显的区别:该\letterspacefont
方法还影响周围的空间,而
letterspace
只在字形之间起作用。这种行为可能会在未来版本中发生变化,或者微型包可能会增加对调整间距的支持。
总而言之,现代 TeX 中有三种字母间距方法:
- 延长侧边距字形——这是 Pdftex 和 Luatex 中使用的策略
\letterspacefont
。该值在千分之一 em。 - 添加空格字形之间——根据 fontspec 手册,这是 Xetex 方法。该值在字体大小的百分之一(百分比)。
- 插入字距字形之间——这就是 Context 和 Luaotfload 所做的。在带有
kernfactor
选项的 Context 和 Luatofload 中,该值为应用于字体大小的因素。Luaotfload 的letterspace
选项(fontspec 包也使用了该选项)模拟 Xetex,它将值解释为 字体大小的百分之一(百分比)。
附言关于原始问题:
字体规格的Renderer
选项与 Luaotfload 一起使用时,选择两种可用的处理模式之一。
base
模式是 Context 中的默认模式,对于大多数拉丁语脚本来说应该“足够好”。通常,虽然 OP 的情况显然不是这样,但它可以加快排版速度。缺点是模式base
忽略了大多数 Opentype 功能,因此它不是许多脚本的选项。实现如下font-otb.lua
。node
模式是 Luaotfload 中的默认模式,它在排版过程中应用 Opentype 字体功能,但会略微降低性能。韓國,洛克尔,韋爾格,西甲,克利格,克恩,标记, 和韓國对于 DFLT 脚本来说,默认情况下处于活动状态(在 Luaotfload 中,不是上下文)。您可以在 Opentype 规范. 实现可以在font-otn.lua
。