使用 Avenir 字体与 fontspec + luatex 时出现“表格索引为零”错误

使用 Avenir 字体与 fontspec + luatex 时出现“表格索引为零”错误

根据包装fontspec的用户手册(2017/03/31 v2.6a,第 5.1 节,第 12 页)

LuaTEX 已知的字体 [...] 可以通过其标准名称加载,就像您大声朗读它们一样,例如英语字体格式一种或者Adobe Garamond。[...]
最简单的例子可能是类似于
\setmainfont{Cambria}[...]
[...] 可以通过多种方式找到“字体名称”,例如通过查看Font BookMac OS X等应用程序中列出的名称。

我的操作系统是 Mac OS X。以下屏幕截图显示了英语字体格式一种我的应用程序中的字体Font Book

字体手册中的 Times New Roman 字体

以下屏幕截图显示了Avenir我的应用程序中的字体名称Font Book

字体书中的 Avenir 字体

以下 LaTeX 文档将文档的主字体设置为Times New Roman

\documentclass{report}
\usepackage{fontspec}
\setmainfont{Times New Roman}
\begin{document}
Hello, world!
\end{document}

使用 LuaLaTeX 格式(即使用 LuaLaTeX“引擎”)处理该文档将生成以下 pdf,正如预期的那样:

你好世界!

但是,将“Times New Roman”替换为“Avenir”并使用 LuaLaTeX 格式重新处理文档会导致没有 pdf,并出现以下错误消息:

错误:表索引为零。

--- TeX 说 ---

\scan_stop:
l.3 \setmainfont{Avenir}

--- 帮助 ---
来自 .log 文件...

lua 解释器遇到了问题,因此该 lua 块的其余部分将被忽略。

有什么问题?为什么未来示例工作,而英语字体格式一种有吗?


操作系统:macOS Sierra 版本 10.12.5
MacTex 分布:MacTeX-2017
LuaTeX:版本 1.0.4

答案1

我真的不知道为什么 LuaLaTeX 不能将 Avenir Book 与直立字体关联起来;而 XeLaTeX 似乎运行良好。

实际上,如果仔细观察,就会发现使用 XeLaTeX 时,使用的是文件夹.ttc中的字体文件/System/Library/Fonts,而不是 中的文件之一/Library/Fonts。也许这就是 LuaLaTeX 发挥作用时的问题,因为luaotfload它选择字体的策略不同。

对于 LuaLaTeX,您需要指定字体名称(至少在这种情况下):

\documentclass{report}
\usepackage{fontspec}

\setmainfont{Avenir}[
  UprightFont=* Book,             % or Light
  ItalicFont=* Book Oblique,      % or Light Oblique
  BoldFont=* Black,               % or Medium
  BoldItalicFont=* Black Oblique, % or Medium Oblique
]

\begin{document}

Hello, world! \fontname\font

{\itshape Hello \fontname\font}

{\bfseries Hello \fontname\font}

{\bfseries\itshape Hello \fontname\font}

\end{document}

如果您想要的是 Medium 而不是 Black,那么使用 XeLaTeX 时也需要这样做。

使用 LuaLaTeX 输出

在此处输入图片描述

使用 XeLaTeX 输出

在此处输入图片描述

使用 XeLaTeX 输出并\setmainfont{Avenir}

在此处输入图片描述

答案2

结论字体名称是未来之书, 未来是字体系列名称;英语字体格式一种既是字体系列,也是主字体名称。下面介绍如何使用 Mac FontBook 区分它们以及在哪里找到它们


字体书中给出的名称(至少在您分享的部分中)不是真正的字体名称,因为字体或字体系列描述;有时它们匹配,但很多时候不匹配。事实上,您可以从屏幕截图中看到,一个名称下有多种字体。

您所追求的是增强的部分,您可以从信息面板。这是通过左上角的“i”形按钮​​获取的。抱歉,我是意大利人。你要找的是字体完整名称或者,作为替代方案,后记名称

在此处输入图片描述

在此处输入图片描述

您可以看到 Avenir 是家庭名称不对应任何特定的字体,而英语字体格式一种具有同名的特定字体

相关内容