为数学和 xelatex 中的常规和斜体设置单独的非开放 TTF/OTF 字体

为数学和 xelatex 中的常规和斜体设置单独的非开放 TTF/OTF 字体

我正在编写 Overleaf 文档,其中我想使用 Adob​​e Garamond Pro 作为我的数学字体。问题是我有用于 Regular TTF 和 Italic TTF 的单独文件(也可用作 OTF 文件)。

这意味着我必须使用 xelatex 来完成(因为您无法使用 PDFlatex 将非标准字体导入 Overleaf)。我还必须使用 mathspec 而不是 unicode-math 来完成,因为我没有数学友好的字体文件。但我似乎无法使用 mathspec 来完成,因为我有单独的常规和斜体文件。

例如,如果我尝试下面的代码,我将无法获得用于数学的 Garamond 字体。有很多这样的变体(例如如何编写 setmathfont-key),但它们都不起作用。

\documentclass[11pt]{book} 
\usepackage{amsmath}
\usepackage[no-math]{fontspec}

%% For Matspec
\usepackage{mathspec}
       \makeatletter
       \let\RequirePackage\original@RequirePackage % Get around amsmath before mathspec-warning
       \makeatother

%% For Unicode-math
% \usepackage{unicode-math} % uncomment if mathspec is used

\setmainfont[Mapping=tex-text,Numbers={OldStyle,Proportional}]{AGaramondPro}[
    Path=./fonts/,
    Extension = .ttf,
    UprightFont=*-Regular,
    ItalicFont=*-Italic]

%% For Unicode-math
% \setmathfont{Garamond-Math}
% \setmathfont{./fonts/AGaramondPro-Regular.ttf}[range=up/{Latin,num}]
% \setmathfont{./fonts/AGaramondPro-Italic.ttf}[range=it/{Latin,latin}]

%% For Mathspec
\setmathfont(Greek,Digits,Latin){./fonts/AGaramondPro-Italic.ttf}
 
\begin{document}
$h$ \textit{h}
\end{document}

如果我尝试使用unicode-math执行下面的代码,我只会收到一条警告,提示未找到字体。

\documentclass[11pt]{book} 
\usepackage{amsmath}
\usepackage[no-math]{fontspec}

%% For Matspec
% \usepackage{mathspec}
%        \makeatletter
%        \let\RequirePackage\original@RequirePackage % Get around amsmath before mathspec-warning
%        \makeatother

%% For Unicode-math
\usepackage{unicode-math} % uncomment if mathspec is used

\setmainfont[Mapping=tex-text,Numbers={OldStyle,Proportional}]{AGaramondPro}[
    Path=./fonts/,
    Extension = .ttf,
    UprightFont=*-Regular,
    ItalicFont=*-Italic]

%% For Unicode-math
\setmathfont{Garamond-Math}
\setmathfont{./fonts/AGaramondPro-Regular.ttf}[range=up/{Latin,num}]
\setmathfont{./fonts/AGaramondPro-Italic.ttf}[range=it/{Latin,latin}]

%% For Mathspec
% \setmathfont(Greek,Digits,Latin){./fonts/AGaramondPro-Italic.ttf}
 
\begin{document}
$h$ \textit{h}
\end{document}

有什么办法可以解决这个问题吗?

[编辑:我用完整的“工作”示例更新了 OP(假设您在正确的文件夹中有正确的字体)。在打印中使用 h 的原因是因为很容易识别该字母中字体的差异。“Garamond-math”呈现的结果类似,但不完全相同。在打印论文之前,我希望它们是相同的......]

答案1

正如 @DavidCarlisle 指出的那样,路径应该以与我最初的 unicode-math 示例不同的方式给出:有关 \setmathfont 命令可用选项的信息

在给出路径之后,我查看了 unicode-math 文档,但错过了它从 fontspec 继承键。

因此,正如@UlrikeFischer 所展示的,在这种情况下最好的方法是首先设置一个默认的、功能齐全的数学字体,然后在其基础上构建范围,如下所示:

\documentclass[11pt]{book} 
\usepackage{amsmath}
\usepackage[no-math]{fontspec}

\usepackage{unicode-math}

\setmainfont[Mapping=tex-text,Numbers={OldStyle,Proportional}]{AGaramondPro}[
    Path=./fonts/,
    Extension = .ttf,
    UprightFont=*-Regular,
    ItalicFont=*-Italic]

\setmathfont{Garamond-Math}
\setmathfont[Path=fonts/]{AGaramondPro-Regular.ttf}[range=up/{Latin,num}]
\setmathfont[Path=fonts/]{AGaramondPro-Italic.ttf}[range=it/{Latin,latin}]
 
\begin{document}
$h$ \textit{h}
\end{document}

这样,底部的 hs 就完全相同了。

相关内容