MacOS 使用 XeTeX 和 fontspec 加载字体失败

MacOS 使用 XeTeX 和 fontspec 加载字体失败

当我尝试使用 XeLaTeX 和 fontspec 编译使用 Dejavu Sans 字体(当然,该字体尚未安装在 MacOS 系统中)的文件时,\usepackage{pifont}或者如果我想使用 CMU Serif 字体\setsansfont{CMU Serif},fontspec 找不到字体(错误Package fontspec Error: The font "CMU Serif" cannot be found.)。

我知道一种解决方法是将提供这些字体的目录 ( /Library/TeX/Root/texmf-dist/fonts/opentype) 添加为内部的符号链接~/Library/Fonts。但是,这样做会破坏 Firefox 上的某些网站(可能是由于沙盒和重复字体问题),而 Firefox 确实比 latex 重要得多。

除了为每种字体指定文件路径或导致整个 MacOS 系统安装出现问题,强制查找包含字体的自定义目录之外,不可能没有其他解决方案fontspec......有人可以帮忙解决这个问题吗?

更详细地描述难题的相关问题:Fontspec 包在 MacOS/MacTeX 上找不到“Latin Modern Mono”

答案1

(评论有点太长了)字体规格手册中提到2.2 按文件名如何通过与完整文件路径不完全相同的文件名加载。例如在我的系统上

\documentclass{article}

\usepackage{fontspec}

%\XeTeXtracingfonts1
\setmainfont{DejaVuSans}[
    Extension      = .ttf,
    BoldFont       = *-Bold,
    ItalicFont     = *-Oblique,
    BoldItalicFont = *-BoldOblique
]

\begin{document}

abcde

\textit{abcde}

\textbf{abcde}

\textbf{\textit{abcde}}
\end{document}

\XeTeXtracingfonts1首先使用语法\setmainfont{DejaVu Sans}和符号链接将所有详细信息保存在日志文件中。然后我可以识别字体基名(或者使用 FontBook 获取它们)。

上面的问题在于指定扩展名。我想我曾经遇到过一个问题(警告:我非常怀疑这里我自己的段落,因为 TeXLive 在任何地方都会有相同的结构,所以它一定是在其他一些上下文中,字体不在 TeXLive 中,或者在一台计算机上安装的系统范围内,而在另一台计算机上安装的 TeXLive) 的可移植性,因为在某些系统上,所使用的字体是使用.otf扩展名安装的(即在中texmf-dist/fonts/opentype),而在其他一些系统上,则是使用扩展名安装的.ttf(在中texmf-dist/fonts/truetype)。

再次阅读2.2 按文件名看起来也许更好的语法是这样的:

\usepackage{fontspec}

\XeTeXtracingfonts1
\setmainfont{DejaVuSans}[
    Path,
    BoldFont       = *-Bold,
    ItalicFont     = *-Oblique,
    BoldItalicFont = *-BoldOblique
]

\begin{document}

abcde

\textit{abcde}

\textbf{abcde}

\textbf{\textit{abcde}}
\end{document}

删除符号链接后,此操作在我的 mac os 上有效,texmf-dist/fonts/truetype但不确定是否涉及一些缓存。先验地,它也应该在 pristine 安装上有效。

在此处输入图片描述

相关内容