如何在不同的计算机上指定不同的字体

如何在不同的计算机上指定不同的字体

在 Mac 上,OSX 预装的 Baskerville 字体与 LaTeX 配合得很好(正如建议的那样这里经过曼努埃尔)。但是,我相信该字体已获得许可,因此不能自由复制到其他计算机。在我的 Ubuntu 18.04 机器上,我可以使用 Baskervaldx 字体,但在我看来,它看起来并不那么好看。我该如何设置我的 .tex 文件,以便在我的 Mac 上运行使用 Baskerville 的命令,而在 Ubuntu 上运行使用 Baskervaldx 的命令?

具体来说,在 Mac 上,它应该运行以下命令:

\usepackage[no-math]{fontspec}
\setmainfont[Mapping=tex-text]{Baskerville}
\usepackage[defaultmathsizes,italic]{mathastext}

在 Ubuntu 上它应该运行这个命令:

\usepackage{Baskervaldx}

latexmk -xelatex从 Makefile 运行,因此提供不同的命令行选项或为环境变量提供不同的值不是问题。

如果有办法在 Ubuntu 上获得漂亮的 Baskerville,我很乐意听到。我愿意为字体付费,但市面上有太多 Baskerville,我不知道哪个是正确的。或者,如果有办法在 LaTeX 中说“如果可以,使用 Baskerville,如果必须,使用 Baskervaldx”,那可能实际上是最好的解决方案。

答案1

您可以检查字体是否存在:

\documentclass{article}

\usepackage[no-math]{fontspec}

\IfFontExistsTF{Baskerville}
{
\setmainfont[Mapping=tex-text]{Baskerville}
\usepackage[defaultmathsizes,italic]{mathastext}
}{
\usepackage{Baskervaldx}
}

\begin{document}
Abc.
\end{document}

有一个小小的缺点:如果不存在,则在查找和更新字体缓存时会有短暂的暂停。

另一种方法是进行更快但不太具体的测试,\IfFontExistsTF{Baskerville}\IfFileExists{any-file-only-on-the-mac}

答案2

您可以使用ifplatform包裹,它提供\ifmacosx\iflinux条件:

\usepackage{ifplatform}
\usepackage[no-math]{fontspec}
\ifmacosx
\setmainfont[Mapping=tex-text]{Baskerville}
\else
\setmainfont[Mapping=tex-text]{Baskervaldx}
\fi
\usepackage[defaultmathsizes,italic]{mathastext}

您需要添加-shell-escape您的latexmk选项。

还有其他版本的《巴斯克维尔》,例如自由巴斯克维尔巴斯克维尔F你可能会考虑。

相关内容