我都在用\mathscr
和\mathcal
来表示不同的含义并期望出现不同的字符。
我最近切换到 XeTeX 并开始使用新字体(TeX 环流佩格拉在这个例子中)与包fontspec
和unicode-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 次方根的正确结果(但\mathcal
现在\mathscr
产生相同的字符):
我的问题是
- 为什么覆盖
\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 测试过。(而且对于其他数学风格来说它们可能仍然不正确)。