我定期维护一个长文档(通过‘维持’我的意思是:添加新部分,删除一些旧内容等,而无需彻底改变整个内容)。我正在使用XeLaTeX
由标准 MacTex 安装提供的。该文档使用Times
macOS 上提供的标准字体。这种字体已经使用多年,没有问题。
昨天我醒来发现我的文档中的斜体字似乎毫无缘由地被破坏了。所有斜体部分现在排版为加粗斜体。经过调查,我发现这个问题并不只存在于这个文件。例如,我可以用这个小例子重现这个问题。
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Times}
\begin{document}
Normal is OK.
\textbf{Bold is OK.}
\textbf{\textit{Bold Italic is OK.}}
\textit{Italic is broken :-(}
\end{document}
以下是我所知道的内容:
这是最近出现的问题。我 100% 确定 Italic 以前没问题。我很挑剔,能立即注意到这些问题。
这可能是字体特有的。
Helvetica
例如,如果我改用,则不会发生此问题。这并非特定于命令
textit
。导致斜体文本的任何其他命令/标题/事件也将被破坏。字体文件没有丢失或损坏。这是我检查的第一件事。所有样式都很好,包括斜体。我可以
Times
在任何应用程序中照常使用,没有问题。我最近没有添加任何 TeX 包,也没有以任何方式修改系统字体,至少没有手动修改过。我没有动过我的 TeX 安装。
我最近更新到了 High Sierra,这是一个小更新,据我所知,它并不影响我的 TeX 安装。
这个奇怪的错误让我震惊不已,我正在寻求建议!
答案1
随着 MacOSX 10.13“High Sierra”的最新推出,许多字体系列的“家族成员”过去作为单独的字体文件分发,现在则被分组到一起保存在.ttc
文件中。
对于受此更改影响的部分(但肯定不是全部)字体系列,该luaotfload
实用程序(由 LuaLaTeX 调用fontspec
)似乎需要一些明确的帮助来确定从给定字体系列中选择哪些“系列成员”。 其中一个系列是Times [Roman]
,其系列成员包括Times
、Times Bold
、Times Italic
和Times Bold Italic
。
附言:我快速粗略地检查了哪些 .ttc 字体位于此问题中/Libruary/Fonts
并/System/Library/Fonts
受其影响。(请参阅下面的代码以了解如何运行此检查。)受影响的字体包括 Avenir、Futura、Gill Sans、Helvetica、Helvetica Neue、Hoefler Text、Optima 和 Times。一些不受影响的字体包括 Avenir Next、Baskerville、Charter、Didot、Menlo、Palatino、PT Sans 和 PT Serif。显然,这个列表远未完成。我目前还无法判断 ttc 文件内部发生了什么,导致luaotfload
在某些情况下成功,而在其他情况下失败。
当这种情况发生时,有必要改变
\setmainfont{Times}
到
\setmainfont{Times}[ItalicFont ={* Italic},
BoldFont ={* Bold},
BoldItalicFont={* Bold Italic}]
在这种情况下Hoefler Text
,有必要改变
\setmainfont{Hoefler Text}
到
\setmainfont{Hoefler Text}[ItalicFont = {* Italic},
BoldFont = {* Black},
BoldItalicFont= {* Black Italic}]
这是因为使用 Hoefler Text,大胆的家族成员被命名为“Black”和“Black Italic”,而不是“Bold”和“Bold Italic”。
完整的 MWE:
\documentclass{article}
\usepackage{fontspec}
\newcommand{\test}[1]{\setmainfont{#1}#1\par
Normal \textbf{Bold} \textit{Italic} \textbf{\textit{Bold Italic}}%
\par\smallskip}
\begin{document}
\begin{document}
\verb+fonts in /System/Library/Fonts+
\smallskip
\test{Avenir}
\test{Avenir Next}
\test{Helvetica}
\test{Helvetica Neue}
\test{Menlo}
\test{Optima}
\test{Palatino}
\test{Times}
\medskip
\verb+fonts in /Library/Fonts+
\smallskip
\test{Baskerville}
\test{Bodoni 72}
\test{Charter}
\test{Didot}
\test{Futura}
\test{Gill Sans}
\test{Hoefler Text}
\test{PT Sans}
\test{PT Serif}
\end{document}
\end{document}