在 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
选项。