使用 unicode-math 选择无衬线数学字体

使用 unicode-math 选择无衬线数学字体

我正在用 XeLaTeX 排版一份文档,正文使用衬线字体,其他内容(章节标题、表格等)使用无衬线字体。对于数学运算的设置,我使用 TeX Gyre Pagella Math。使用fontspecunicode-math,这在大多数情况etoolbox下都可以正常工作。我使用包自动将浮点数切换到无衬线字体。但是,数学运算仍然以衬线字体排版。我知道如何使用切换到无衬线数学(可在 TGPM 中使用)\mathsf{…},但我想使这一过程自动化。我尝试了version=…选项unicode-math(与结合etoolbox),但我不知道如何让它工作。我还不知道如何etoolbox直接使用来让它工作。

下面是我当前设置的 MWE;重点是让表格内容中的数学也采用无衬线字体,但现在情况并非如此。需要说明的是:我使用其他 Komascript 选项将标题标签设置为无衬线字体,但为了简洁起见,这里省略了。另外,以防万一,我使用 Minion Pro 和 Fira Sans 作为我的实际字体,但可能不是每个人都有这些字体。

\documentclass[]{scrbook}

\usepackage[T1]{fontenc}
\usepackage{fontspec}
\usepackage{unicode-math}

\setmainfont{TeX Gyre Pagella}[%
    Ligatures   = TeX,%
    Numbers     = {OldStyle,Proportional},%
]
\setsansfont{TeX Gyre Heros}[%
    Ligatures   = TeX, %
    Numbers     = {Lining,Monospaced}, %
    Scale       = MatchLowercase, %
]

\setmathfont[%
    Scale       = MatchLowercase,%
]{TeX Gyre Pagella Math} %

\setmathfont[%
    version     = table,%
    Scale       = MatchLowercase,%
]{TeX Gyre Pagella Math} %

\usepackage{% 
    tabularx,%
    etoolbox,%
}

% etoolbox
\AtBeginEnvironment{tabularx}{%
   \sffamily\addfontfeature{Numbers={Lining, Monospaced}}%
    \mathversion{table}  
}

\begin{document}
\pagestyle{empty}

\begin{table}[t]
\centering
\caption{$\mathsf{a^{2}+b^{2}=c^{2}}$}
\begin{tabularx}{.6\linewidth}{lrr}
some & text & and some math \\
$a^{2}$ & $+b^{2}$ & $=c^{2}$
\end{tabularx}
\end{table}

\begin{displaymath}
  (x + a)^n = \sum_{k=0}^n {n \choose k} x^k a^{n-k}
\end{displaymath}


\end{document}

答案1

为了避免歧义,对于新读者来说,对unicode块有一个直观的了解可能会有所帮助。

Tex Gyre Pagella Math 有基础拉丁语(称之为“文本”,但可映射)

tgpm_bl

希腊语和科普特语(“文本”)

tgpm_g

... 还有很多其他的区块 ...

以及数学字母数字符号(MAS)块:

tgpm_mas1

tgpm_mas2

(旁注:由于 Unicode 的有机发展方式,一些比较著名的数学符号位于早期的字母类符号块中:

tgpm_lls

相比之下,Fira Sans Math 字体的 MAS 要小得多:

Fira Sans Math MAS


其他 Tex Gyre 字体(Bonum、DejaVu、Schola、Termes)有数学版本 - 例如参见...\texmf-dist\fonts\opentype\public\tex-gyre-math\

答案2

这是一个老问题,但值得回答。

我不确定你到底想要什么。如果你希望将 Termes 作为主字体,将 Fira Sans 作为其他字体,则可以使用 Fira Math 字体:

\defaultfontfeatures{Scale=MatchLowercase}
\setmainfont{TeX Gyre Termes}[Scale=1.0]
\setsansfont{Fira Sans}
\setmathfont{Fira Math}

如果您的意思是希望能够在\mathversion{normal}和之间切换\mathversion{sans},您可以这样做:

\defaultfontfeatures{Scale=MatchLowercase}
\setmainfont{TeX Gyre Termes}[Scale=1.0]
\setsansfont{Fira Sans}
\setmathfont{TeX Gyre Termes Math}
\setmathfont{Fira Math}[version=sans]

\mathversion{sans}

如果您想在数学模式中使用 Fira 的字母和数字,但使用 Termes 的其他符号,您可以尝试:

\defaultfontfeatures{Scale=MatchLowercase}
\setmainfont{TeX Gyre Termes}[Scale=1.0]
\setsansfont{Fira Sans}
\setmathfont{TeX Gyre Termes Math}
\setmathfont{Fira Math}[range={up,it,bfup,bfit}]

不幸的是,截至 2021 年,range=version=选项彼此不兼容。

相关内容