这篇文章是对之前文章的后续使用某些字体时,无法在 MacTeX2014 和 MacTeX2015 下使用 LuaLaTeX 生成连字和LuaLaTeX、fontspec、.ttc 字体和字距调整(Mac OS 上的 Optima)。
我有一台 13 英寸 MacBookPro,运行 MacOSX 10.9.4。问题是,随着 MacTeX2104 的发布,LuaLaTeX- 但不是XeLaTeX——显然已停止对某些文件扩展名为 .ttc 的字体进行字距调整和连字。请考虑以下 MWE:
% !TEX TS-program = LuaLaTeX
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Hoefler Text}
\setsansfont{Optima}
\listfiles
\begin{document}
WA AV Test Type off fit fly office baffle
\textsf{WA AV Test Type}
\end{document}
在 LuaTeX 0.79.1(MacTeX2014 的一部分)下运行这个 MWE,我得到
而在 LuaTeX 0.76(由 MacTeX2013 提供)下运行它,我得到
在 LuaTeX 0.76 输出中,请注意复杂的字距调整和各种 f 连字符的存在。不幸的是,字距调整和连字符似乎在 LuaTeX 0.79.1 下都消失了,至少对于本 MWE 中使用的两种特定字体(Hoefler Text
和Optima
)而言。事实上,不仅仅是这两种字体遇到了问题;很少几个包含的文件扩展名为 .ttc 的字体/Library/Fonts
也经历了这种性能下降。我测试过的字体中,发现存在上述问题的有Baskerville
、Didot
和Futura Medium
。
相比之下,我还没有(目前为止!)发现任何扩展名为 .otf 的字体在使用 MacTeX2014 版本的 Lua(La)TeX 运行时会出现这些问题。
问题:
是否可以/应该做些什么来在 MacTeX2014/LuaLaTeX 0.79.1 下使用这些 .ttc 字体重新启用字距调整和连字功能?
除非对上述问题给出肯定的回答,否则将一种或多种受影响的字体转换为允许 LuaLaTeX 0.79.1 正确执行字距调整和连字的格式 (.otf?) 的分步说明是什么?我说的“正确”是指 LuaLaTeX 0.76 以及旧版和最新版本的 XeLaTeX 能够完成这些工作的方式。用于执行字体格式转换或改编的任何软件都应该是开源的,并且(显然……)能够在 MacOSX 下运行。
我愿意(并且能够!)为这两个问题的每一个正确答案提供 200 分的“奖励”。
附录2015 年 8 月:我发布了部分解决方案针对这个问题,即如何手动设置一个或多个 OpenType 功能文件,为 LuaLaTeX 提供生成连字符替换的指令,作为对我之前关于这个主题的帖子的回答,使用某些字体时,无法在 MacTeX2014 和 MacTeX2015 下使用 LuaLaTeX 生成连字。
为了完整起见,这里是在两个不同的 TeX 发行版下运行 MWE 时生成的文件列表。
运行 MacTeX2014 时:
This is LuaTeX, Version beta-0.79.1 (TeX Live 2014) (rev 4971)
(format=lualatex 2014.7.9) 26 AUG 2014 21:07
*File List*
article.cls 2007/10/19 v1.4h Standard LaTeX document class
size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
fontspec.sty 2014/06/21 v2.4a Font selection for XeLaTeX and LuaLaTeX
expl3.sty 2014/07/20 v5241 L3 programming layer (loader)
expl3-code.tex 2014/07/20 v5241 L3 programming layer
etex.sty 1998/03/26 v2.0 eTeX basic definition package (PEB)
l3unicode-data.def 2014/06/30 v5166 L3 Unicode data
l3pdfmode.def 2014/07/18 v5232 L3 Experimental driver: PDF mode
xparse.sty 2014/07/20 v5241 L3 Experimental document command parser
luaotfload.sty 2014/08/10 v2.5-4 OpenType layout system
luatexbase.sty 2013/05/11 v0.6 Resource management for the LuaTeX macro programmer
ifluatex.sty 2010/03/01 v1.3 Provides the ifluatex switch (HO)
luatex.sty 2010/03/09 v0.4 LuaTeX basic definition package (HO)
infwarerr.sty 2010/04/08 v1.3 Providing info/warning/error messages (HO)
luatex-loader.sty 2010/03/09 v0.4 Lua module loader (HO)
luatexbase-compat.sty 2011/05/24 v0.4 Compatibility tools for LuaTeX
luatexbase-modutils.sty 2013/05/11 v0.6 Module utilities for LuaTeX
luatexbase-loader.sty 2013/05/11 v0.6 Lua module loader for LuaTeX
luatexbase-regs.sty 2011/05/24 v0.4 Registers allocation for LuaTeX
luatexbase-attr.sty 2013/05/11 v0.6 Attributes allocation for LuaTeX
luatexbase-cctb.sty 2013/05/11 v0.6 Catcodetable allocation for LuaTeX
luatexbase-mcb.sty 2013/05/11 v0.6 Callback management for LuaTeX
fontspec-patches.sty 2014/06/21 v2.4a Font selection for XeLaTeX and LuaLaTeX
fontspec-luatex.sty 2014/06/21 v2.4a Font selection for XeLaTeX and LuaLaTeX
fontenc.sty
eu2enc.def 2010/05/27 v0.1h Experimental Unicode font encodings
eu2lmr.fd 2009/10/30 v1.6 Font defs for Latin Modern
xunicode.sty 2011/09/09 v0.981 provides access to latin accents and many other characters in Unicode lower plane
eu2lmss.fd 2009/10/30 v1.6 Font defs for Latin Modern
graphicx.sty 2014/04/25 v1.0g Enhanced LaTeX Graphics (DPC,SPQR)
keyval.sty 2014/05/08 v1.15 key=value parser (DPC)
graphics.sty 2009/02/05 v1.0o Standard LaTeX Graphics (DPC,SPQR)
trig.sty 1999/03/16 v1.09 sin cos tan (DPC)
graphics.cfg 2010/04/23 v1.9 graphics configuration of TeX Live
pdftex.def 2011/05/27 v0.06d Graphics/color for pdfTeX
ltxcmds.sty 2011/11/09 v1.22 LaTeX kernel commands for general use (HO)
pdftexcmds.sty 2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO)
ifpdf.sty 2011/01/30 v2.3 Provides the ifpdf switch (HO)
fontspec.cfg
t3cmr.fd 2001/12/31 TIPA font definitions
supp-pdf.mkii
epstopdf-base.sty 2010/02/09 v2.5 Base part for package epstopdf
grfext.sty 2010/08/19 v1.1 Manage graphics extensions (HO)
kvdefinekeys.sty 2011/04/07 v1.3 Define keys (HO)
kvoptions.sty 2011/06/30 v3.11 Key value format for package options (HO)
kvsetkeys.sty 2012/04/25 v1.16 Key value parser (HO)
etexcmds.sty 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO)
epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live
***********
运行 MacTeX2013 时:
This is LuaTeX, Version beta-0.76.0-2013061817 (rev 4627)
(format=lualatex 2014.3.31) 26 AUG 2014 21:09
*File List*
article.cls 2007/10/19 v1.4h Standard LaTeX document class
size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
fontspec.sty 2013/05/20 v2.3c Font selection for XeLaTeX and LuaLaTeX
expl3.sty 2014/01/07 v4646 L3 Experimental code bundle wrapper
l3names.sty 2014/01/04 v4640 L3 Namespace for primitives
l3bootstrap.sty 2014/01/04 v4640 L3 Experimental bootstrap code
luatex.sty 2010/03/09 v0.4 LuaTeX basic definition package (HO)
infwarerr.sty 2010/04/08 v1.3 Providing info/warning/error messages (HO)
ifluatex.sty 2010/03/01 v1.3 Provides the ifluatex switch (HO)
etex.sty 1998/03/26 v2.0 eTeX basic definition package (PEB)
luatex-loader.sty 2010/03/09 v0.4 Lua module loader (HO)
pdftexcmds.sty 2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO)
ltxcmds.sty 2011/11/09 v1.22 LaTeX kernel commands for general use (HO)
ifpdf.sty 2011/01/30 v2.3 Provides the ifpdf switch (HO)
l3basics.sty 2014/01/04 v4642 L3 Basic definitions
l3expan.sty 2014/01/04 v4642 L3 Argument expansion
l3tl.sty 2013/12/27 v4625 L3 Token lists
l3seq.sty 2013/12/14 v4623 L3 Sequences and stacks
l3int.sty 2013/08/02 v4583 L3 Integers
l3quark.sty 2013/12/14 v4623 L3 Quarks
l3prg.sty 2014/01/04 v4642 L3 Control structures
l3clist.sty 2013/07/28 v4581 L3 Comma separated lists
l3token.sty 2013/08/25 v4587 L3 Experimental token manipulation
l3prop.sty 2013/12/14 v4623 L3 Property lists
l3msg.sty 2013/07/28 v4581 L3 Messages
l3file.sty 2013/10/13 v4596 L3 File and I/O operations
l3skip.sty 2013/07/28 v4581 L3 Dimensions and skips
l3keys.sty 2013/12/08 v4614 L3 Experimental key-value interfaces
l3fp.sty 2014/01/04 v4642 L3 Floating points
l3box.sty 2013/07/28 v4581 L3 Experimental boxes
l3coffins.sty 2013/12/14 v4624 L3 Coffin code layer
l3color.sty 2012/08/29 v4156 L3 Experimental color support
l3luatex.sty 2013/07/28 v4581 L3 Experimental LuaTeX-specific functions
l3candidates.sty 2014/01/06 v4643 L3 Experimental additions to l3kernel
xparse.sty 2013/12/31 v4634 L3 Experimental document command parser
luaotfload.sty 2014/02/05 v2.4-3 OpenType layout system
luatexbase.sty 2013/05/11 v0.6 Resource management for the LuaTeX macro programmer
luatexbase-compat.sty 2011/05/24 v0.4 Compatibility tools for LuaTeX
luatexbase-modutils.sty 2013/05/11 v0.6 Module utilities for LuaTeX
luatexbase-loader.sty 2013/05/11 v0.6 Lua module loader for LuaTeX
luatexbase-regs.sty 2011/05/24 v0.4 Registers allocation for LuaTeX
luatexbase-attr.sty 2013/05/11 v0.6 Attributes allocation for LuaTeX
luatexbase-cctb.sty 2013/05/11 v0.6 Catcodetable allocation for LuaTeX
luatexbase-mcb.sty 2013/05/11 v0.6 Callback management for LuaTeX
fontspec-patches.sty 2013/05/20 v2.3c Font selection for XeLaTeX and LuaLaTeX
fixltx2e.sty 2006/09/13 v1.1m fixes to LaTeX
fontspec-luatex.sty 2013/05/20 v2.3c Font selection for XeLaTeX and LuaLaTeX
fontenc.sty
eu2enc.def 2010/05/27 v0.1h Experimental Unicode font encodings
eu2lmr.fd 2009/10/30 v1.6 Font defs for Latin Modern
xunicode.sty 2011/09/09 v0.981 provides access to latin accents and many other characters in Unicode lower plane
eu2lmss.fd 2009/10/30 v1.6 Font defs for Latin Modern
graphicx.sty 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR)
keyval.sty 1999/03/16 v1.13 key=value parser (DPC)
graphics.sty 2009/02/05 v1.0o Standard LaTeX Graphics (DPC,SPQR)
trig.sty 1999/03/16 v1.09 sin cos tan (DPC)
graphics.cfg 2010/04/23 v1.9 graphics configuration of TeX Live
pdftex.def 2011/05/27 v0.06d Graphics/color for pdfTeX
fontspec.cfg
t3cmr.fd 2001/12/31 TIPA font definitions
supp-pdf.mkii
epstopdf-base.sty 2010/02/09 v2.5 Base part for package epstopdf
grfext.sty 2010/08/19 v1.1 Manage graphics extensions (HO)
kvdefinekeys.sty 2011/04/07 v1.3 Define keys (HO)
kvoptions.sty 2011/06/30 v3.11 Key value format for package options (HO)
kvsetkeys.sty 2012/04/25 v1.16 Key value parser (HO)
etexcmds.sty 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO)
epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live
***********
答案1
字体是否打包为 TTC 与这里的问题无关。
Apple 发布的大多数(全部?)拉丁字体都使用 AAT 布局表,而不是 OpenType。LuaTeX 的旧版本偶然部分支持 AAT;正如 egreg 在上面的评论中指出的那样,用作 LuaTeX 字体加载器基础的 FontForge 将一些 AAT 功能映射到等效的 OpenType 功能,这就是为什么字距调整或连字等简单功能似乎可以正常工作的原因。但是,该代码几乎没有经过测试,导致许多 Mac OS X 系统字体崩溃(这些软件包必须luaotfload
列入黑名单),而且它彻底破坏了包含 AAT 和 OpenType 布局表的字体(许多来自 SIL 的字体,如 Charis,都包含),因为映射的 AAT 功能与真正的 OpenType 功能重复,这让 OpenType 处理器感到困惑。
支持第三方的 AAT 布局表相当困难(由于文档不完整或完全缺失),我不知道除了 Apple 之外是否有其他可行的实现,但 LuaTeX 不能使用它,因为它希望保持系统独立性。XeTeX 当然使用 Apple API 来获得 AAT 支持,但代价是在 Mac OS X 和其他平台之间使用 AAT 字体时会产生不同的输出(这也意味着当 Apple 弃用 XeTeX 最初使用的 API 并且没有将其移植到其 64 位架构时,我们必须进行大量更改才能将 XeTeX 移植到 64 位 Mac OS X 系统)。
因此解决方案是避免使用 AAT 字体并使用 OpenType 字体,或者编写自己的功能文件来模拟缺失的 OpenType 支持。