根据包装fontspec
的用户手册(2017/03/31 v2.6a,第 5.1 节,第 12 页)
LuaTEX 已知的字体 [...] 可以通过其标准名称加载,就像您大声朗读它们一样,例如英语字体格式一种或者Adobe Garamond。[...]
最简单的例子可能是类似于
\setmainfont{Cambria}[...]
[...] 可以通过多种方式找到“字体名称”,例如通过查看Font Book
Mac OS X等应用程序中列出的名称。
我的操作系统是 Mac OS X。以下屏幕截图显示了英语字体格式一种我的应用程序中的字体Font Book
。
以下屏幕截图显示了Avenir
我的应用程序中的字体名称Font Book
。
以下 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 时也需要这样做。