我最近安装了 STIX 2.0.0,并注意到 \mathcal 和 \mathscr 给出相同的结果(书法字母)。一个最简单的例子:
\documentclass{article}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont{STIX Two Text}
\setmathfont{STIX Two Math}
\begin{document}
$$
\mathcal{A} \mathscr{A}
$$
\end{document}
但如果我添加选项
\setmathfont[StylisticSet=01]{STIX Two Math}
它们再次给出了相同的结果,这次是“圆体”书法字母。
这是 STIX 2 中这些命令的正常行为吗?有没有办法将第一种命令放在 \mathcal 上,将第二种“圆手风格”命令放在 \mathscr 上?
答案1
定义范围的字体\mathscr
,请参见第 5.4.2 节“书法与脚本变体”。
\documentclass{article}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont{STIX Two Text}
\setmathfont{STIX Two Math}
\setmathfont{STIX Two Math}[range={scr,bfscr},StylisticSet=01]
\begin{document}
$\mathcal{A}\mathcal{B}\mathcal{C}$
$\mathscr{A}\mathscr{B}\mathscr{C}$
\end{document}
这是unicode-math
旧方法的版本
\DeclareMathAlphabet{\mathscr}{<encoding>}{<family>}{<series>}{<shape>}
这样做\mathscr{A}
只是根据数学代码选择字形,而不是通过\mathchoice
设置完全不同的数学版本的文本模式框。
答案2
\mathcal
和\mathscr
(实际上,\symcal
和\symscr
,和前两个命令只是别名)指向相同的 Unicode 范围,从 可以看出unicode-math.sty
:
\usv_set:nnn {scr} {Latin}{"1D49C}
\usv_set:nnn {cal} {Latin}{"1D49C}
所以它们不应该看起来有所不同。
如果你想要他们这样做,那么你必须使用不同的数学版本。这种方法的问题在于您无法在公式中切换数学版本,但这\mathscr
应该不是什么大问题。只需将字母放入这样的框中:
\documentclass{article}
\usepackage{amsmath}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont{STIX Two Text}
\setmathfont{STIX Two Math}
\setmathfont{STIX Two Math}[version=script,StylisticSet=1]
\renewcommand{\mathscr}[1]{{\text{\mathversion{script}$\symscr{#1}$}}}
\begin{document}
\[
\mathcal{A} \mathscr{A} \mathcal{A}
\]
\end{document}
我还用 替换了$$ ... $$
它,\[ ... \]
因为后者在 LaTeX 代码中的表现更好(例如,它们尊重fleqn
documentclass 选项)。