使用 MacTex2013 和 MacTeX2014 版本的 LuaLaTeX 与 .ttc 字体时字距调整和连字的差异

使用 MacTex2013 和 MacTeX2014 版本的 LuaLaTeX 与 .ttc 字体时字距调整和连字的差异

这篇文章是对之前文章的后续使用某些字体时,无法在 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 TextOptima)而言。事实上,不仅仅是这两种字体遇到了问题;很少几个包含的文件扩展名为 .ttc 的字体/Library/Fonts也经历了这种性能下降。我测试过的字体中,发现存在上述问题的有BaskervilleDidotFutura 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 支持。

相关内容