当我尝试使用 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 安装上有效。