我想在图形中使用不同的数学字体(即 tikzpictures)。我已经问过了一个问题关于这个话题,我尝试混合mathspec
和unicode-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