在普通的 LaTeX 中,可以使用 轻松添加新的数学字母\DeclareMathAlphabet
。然后可以并排使用 、 和 等字母。不幸的是, 中似乎没有类似的机制cmsy
,eus
或者至少没有实现其应有的功能。rsfs
unicode-math
\DeclareMathAlphabet
问题。我怎样才能设置自己的数学字母unicode-math
?
尝试过的解决方法
由于unicode-math
有很多数学字母,一种解决方法可能是使用 将未使用的字母替换为所需的字母\setmathfont[range=...->...]
。这在我的例子中不太有效:
\documentclass[12pt]{article}
\usepackage{fontspec,xltxtra,xunicode}
\defaultfontfeatures{Mapping=tex-text}
\usepackage{unicode-math}
\scrollmode
\setmathfont{xits-math.otf}
\setmathfont[range={\mathscr,\mathbfscr},StylisticSet=0]{xits-math.otf}
\setmathfont[range={\mathcal,\mathbfcal},StylisticSet=1]{xits-math.otf}
\setmathfont[range={\mathtt->\mathcal}]{latinmodern-math.otf}
\begin{document}
\[
\begin{array}{c}
\mathcal{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z} \\
\mathscr{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z} \\
\mathtt{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}
\end{array}
\]
我怀疑问题在于 Unicode 中的书法字母的代码点不连续。
使用\mathversion
似乎效果更好:
\documentclass[12pt]{article}
\usepackage{fontspec,xltxtra,xunicode}
\defaultfontfeatures{Mapping=tex-text}
\usepackage{unicode-math}
\setmathfont{xits-math.otf}
\setmathfont[version=eucal]{latinmodern-math.otf}
\newcommand{\eucal}[1]{\mathchoice %
{\mbox{\mathversion{eucal}$\displaystyle\mathscr{#1}$}} %
{\mbox{\mathversion{eucal}$\mathscr{#1}$}} %
{\mbox{\mathversion{eucal}$\scriptstyle\mathscr{#1}$}} %
{\mbox{\mathversion{eucal}$\scriptscriptstyle\mathscr{#1}$}}}
\setmathfont[range={\mathcal,\mathbfcal},StylisticSet=1]{xits-math.otf}
\begin{document}
\[
\begin{array}{c}
\mathcal{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z} \\
\mathscr{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z} \\
\eucal{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}
\end{array}
\]
\end{document}
但这感觉非常低效。
答案1
实际上DeclareMathAlphabet
工作正常,问题是拉丁字母已被赋予指向 Unicode 平面 1(1Dxxx 块)中的数学字母范围的数学代码,但字体需要 ASCII 范围。
unicode-math 通过切换数学代码(而不是改变数学系列)来实现数学字母表,因此最简单的做法是使用\mathup
将数学代码切换回 ASCII 范围,然后使用\mathfrak
或eufrak
或其他方式切换系列,如下所示。
\documentclass[12pt]{article}
\usepackage{amsfonts}
\usepackage{fontspec,xltxtra,xunicode}
\defaultfontfeatures{Mapping=tex-text}
\DeclareMathAlphabet{\mathrsfs}{U}{rsfso}{m}{n}
\DeclareMathAlphabet{\euler}{U}{euf}{m}{n}
\usepackage{unicode-math}
\setmathfont{xits-math.otf}
\setmathfont[range={\mathcal,\mathbfcal},StylisticSet=1]{xits-math.otf}
\begin{document}
\[
\begin{array}{cc}
1&\mathup{\mathrsfs{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}} \\
2&\mathcal{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z} \\
3&\mathscr{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z} \\
4&\mathup{\euler{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}}
\end{array}
\]
\end{document}