fontspec 选项“Renderer=Basic”——这是什么意思?

fontspec 选项“Renderer=Basic”——这是什么意思?

几天以来,我一直在使用该fontspec选项\setmainfont[Renderer=Basic] ...,以便使用该microtype选项。tracking=trueLuaLaTeX

对此我有一个简单的问题:为什么使用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

相关内容