我正在与一位对字体选择很挑剔的合作者合作编写文档。我的合作者向我提供了字体文件,但在我使用的特定机器上,我没有管理员权限,无法在系统范围内安装字体。不过,我可以通过fontspec
(我们用作lualatex
引擎)显式加载字体,但这意味着我们的文档略有不同,因为我的合作者从系统加载字体,而我从文件加载字体。
我们能否让一个前导码同时适用于两者?我设想它会告诉您fontspec
查找特定字体,如果找不到,则查找另一种字体。
请注意,这是关于加载整个字体,而不仅仅是单个字符。
一些可供玩的代码。
\documentclass{article}
\usepackage{fontspec}
% One person has this installed system-wide
\setmainfont{TeX Gyre Termes}
% Try misspelling the above and watch lualatex complain loudly about the missing font
% The other only has the file
\setmainfont{texgyretermes-regular.otf}
\begin{document}
Wouldn't it be nice if this were Termes?
\end{document}
(注意:我知道这个问题的答案,而且它实际上是一个 RTM,但我确实花了一段时间在网上徒劳地寻找答案,甚至没有得到任何可能的提示,所以我觉得值得在这里发布以改善搜索引擎结果。我会等一下再发布我的答案,因为我很懒,在我还没来得及回答之前,其他人可能会发布一个更好的答案和漂亮的代码。一旦答案发布,我就会删除此注释。)
答案1
有一个命令\IfFontExists(TF)
可以fontspec
提供所需的功能:
\documentclass{article}
%\url{https://tex.stackexchange.com/q/438577/86}
\usepackage{fontspec}
% Check to see if this font is installed system-wide
\IfFontExistsTF{TeX Gyre Termes}{%
% One person has this installed system-wide
\setmainfont{TeX Gyre Termes}
}{
% If not, load it from the file
\setmainfont{texgyretermes-regular.otf}
}
\begin{document}
Wouldn't it be nice if this were Termes?
\end{document}
如果TeX Gyre Termes
系统上安装了字体,lualatex
则会找到它,并因此选择 true 分支,从系统中加载它。如果系统中不存在字体,则会从文件中加载它。
这意味着在系统上安装了它的人不必拥有不必要的文件,而系统上没有安装它的人不必安装仅在单个文档中使用的字体(或者可以使用他们无法安装的字体)。