unicode-math 字体覆盖的 n 次方根字距调整问题

unicode-math 字体覆盖的 n 次方根字距调整问题

我都在用\mathscr\mathcal来表示不同的含义并期望出现不同的字符。

我最近切换到 XeTeX 并开始使用新字体(TeX 环流佩格拉在这个例子中)与包fontspecunicode-math。正如所建议的这个问题的答案,我用来自不同字体(XITS-math)的字符覆盖\mathcal和。\mathscr

不幸的是,这会导致破坏一个(看似)不相关的数学符号的设置:n 次方根。

\documentclass{minimal}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont{TeX Gyre Pagella}
\setmathfont{TeX Gyre Pagella Math}
% Math font overrides ----
\setmathfont[range={\mathcal,\mathbfcal},
             StylisticSet=1,Extension=.otf,BoldFont=*bold]{xits-math}
\setmathfont[range=\mathscr,Extension=.otf,BoldFont=*bold]{xits-math}

\begin{document}
Some math letters:
\[ \mathbb{C} \mathcal{C} \mathscr{C} \mathfrak{C} \]

Here's a big $n$-th root:
\[ F_k(x,y,z)  = \sqrt[n]{\sum_{i=1}^{k} f_i^n} \,. \]
\end{document}

此代码产生以下结果: 残缺的 n 次方根 全部C不同,但n离根号(√)太近。

注释掉数学字体覆盖会产生 n 次方根的正确结果(但\mathcal现在\mathscr 产生相同的字符): 正确的 n 次方根

我的问题是

  • 为什么覆盖\mathscr\mathcal会影响 n 次方根的设置?
  • 我该如何避免这个问题?(或者我必须更改字体?)

答案1

编辑

我认为,使用当前的 unicode-math(2/2018)不再需要这个。

=====

如果你重置 fontdimens,它似乎可以工作:

\documentclass{article}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont{TeX Gyre Pagella}
\setmathfont{TeX Gyre Pagella Math}

\ExplSyntaxOn 
 %store the values
\int_step_inline:nnnn {1}{1}{65}{\tl_set:cx{l_tmp_fontdimen_#1_tl}{\the\fontdimen #1  \l__um_font }}
\ExplSyntaxOff

% Math font overrides ----
\setmathfont[range={\mathcal,\mathbfcal},
             StylisticSet=1,Extension=.otf,BoldFont=*bold]{xits-math}
\setmathfont[range=\mathscr,Extension=.otf,BoldFont=*bold]{xits-math}


\ExplSyntaxOn
%restore the values
\int_step_inline:nnnn {1}{1}{65}{\fontdimen #1  \l__um_font =\tl_use:c{ l_tmp_fontdimen_#1_tl}}
\ExplSyntaxOff



\begin{document}
Some math letters:
\[ \mathbb{C} \mathcal{C} \mathscr{C} \mathfrak{C} \]

Here's a big $n$-th root:
\[ F_k(x,y,z)  = \sqrt[n]{\sum_{i=1}^{k} f_i^n} \,. \]
\end{document}

但这只是实验性的...并且只用 xelatex 测试过。(而且对于其他数学风格来说它们可能仍然不正确)。

在此处输入图片描述

相关内容