使用 unicode-math 切换数学字体

使用 unicode-math 切换数学字体

我想在图形中使用不同的数学字体(即 tikzpictures)。我已经问过了一个问题关于这个话题,我尝试混合mathspecunicode-math。现在经过一番研究我意识到根本mathspec不允许切换字体,我应该只使用unicode-math

但是我的 MWE(或者我应该说 MnWE,因为它不起作用)中也出现了构建错误:

% !TEX TS-program = xelatex
\documentclass{article}

\usepackage{etoolbox}
\usepackage{tikz}
\usepackage{unicode-math}
\setmainfont{TeX Gyre Pagella}
\newcommand{\rmmath}{\setmathfont{TeX Gyre Pagella Math}}
\rmmath
\setsansfont[Scale=MatchUppercase]{Candara}

\newcommand{\sfmath}{ %
    \setmathfont{TeX Gyre Pagella Math} %
    \setmathfont[range=\mathup, Numbers=Lining, Scale=MatchUppercase]{Candara} %
    \setmathfont[range=\mathit, Scale=MatchUppercase]{Candara Italic} %
    \setmathfont[range=\mathbf, Scale=MatchUppercase]{Candara Bold} %
}

\BeforeBeginEnvironment{tikzpicture}{\sfmath}
\AfterEndEnvironment{tikzpicture}{\rmmath}

\begin{document}
% This would work, but I actually do not need sans math in running text
%   \sfmath $I$
%   \rmmath $I$
%   \sfmath $I$
%   \rmmath $I$
%   \sfmath $I$
%   \rmmath $I$
%   \sfmath $I$
%   \rmmath $I$

    Text $I$
    \begin{figure}
    \begin{tikzpicture}
        \node {Node: $I$};
    \end{tikzpicture}
    \caption{Caption text with math $I$}
    \end{figure}
    Text
% If you remove the following lines it will compile
    \begin{figure}
    \begin{tikzpicture}
        \node {Node: $I$};
    \end{tikzpicture}
    \caption{with math $I$}
    \end{figure}
\end{document}

一些有趣的注意事项:如果我删除环境figure,即仅使用tikzpicture它就会构建。如果我使用center而不是figure它也不会起作用。有趣的是,如果我只有想象它将要构建。

我收到的第一个错误:

.................................................
. fontspec info: "defining-font"
. 
. Font family 'Candara(1)' created for font 'Candara' with options
. [BoldItalicFont={},ItalicFont={},Script=Math,SizeFeatures={{Size=10-},{Size=7
.40005-10,Font=Candara,Style=MathScript},{Size=-7.40005,Font=Candara,Style=Math
ScriptScript}},Numbers={Lining},Scale={MatchUppercase}].
. 
. This font family consists of the following shapes:
.................................................

! LaTeX Error: Symbol font `um_fam1' not defined.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.43 ^^I\begin{tikzpicture}

Your command was ignored.

答案1

我遇到了完全相同的问题。你可以通过使用数学版本来部分规避它,即

\setmathfont[version=default]{TeX Gyre Pagella Math} %
\setmathfont[version=sansserif, Numbers=Lining, Scale=MatchUppercase]{Candara}

然后使用

\mathversion{sansserif}

来回切换。

然而,数学版本与该论点不兼容range=,这可能使这种方法变得毫无用处。我自己实际上很快就整理出了一个 Tex Gyre Pagella Math 版本,其中所有衬线拉丁字母和数字都替换为 Tex Gyre Heros 的无衬线版本。并非所有东西都能正常工作,例如\sqrt有问题,但对于简单的数学来说,它似乎没问题。您可以在此处下载:http://n.ethz.ch/~thomasu/download/TeXGyrePagellaMathSans-Normal.otf

相关内容