首先介绍一下背景。我使用的是 MathTime Pro II(不是OpenType 字体)作为我的数学字体,并且不想替换它。我思考unicode-math
如果我想使用所有其他字体的 OTF 版本,这将阻止我的加载。我成功地使用了 TeX Gyre Termes 的 Roman 版本、TeX Gyre Heros 的 sans serif 版本和 Microsoft 的 Consolas 的打字机版本。显然,我正在使用 XeTeX 进行编译并使用fontspec
,但没有unicode-math
。
现在谈谈我的问题(很难浓缩成问题标题)。我已经弄清楚了如何使用例如从 OTF 版本的 Stix Two Math 访问单个字符,尽管{{fontspec{STIX Two Math}\char"27D3}}
我不确定这是否会在数学模式下起作用(我使用该特定字符作为一种 QED 符号,并且它处于文本模式)。所以我的第一个问题是:
- 这能在数学模式下工作吗?如果不行,我需要做哪些改动才能让它在数学模式下工作?
我有不是弄清楚了如何访问代码高于 FFFF 的字符。我得到的错误让我Unicode 字符的数学模式中出现错误字符代码,我以为我找到了答案;尽管尝试了很多次,我还是无法将该代码转化为可以解决我的问题的形式。所以我的第二个问题是:
- 如何访问 Stix Two Math OTF 字体(或任何字体)中代码大于 FFFF 的字符?
我意识到这是一个多方面的问题,但担心将其分成两个问题会使答案变得模糊。我希望我已经成功提供了设置和我想要实现的目标。最终,我希望可以使用整个 Stix Two Math OTF 字体,而无需替换 MathTime Pro II。我可能一次只需要几个字符。
答案1
您还没有展示您做了什么或者遇到了什么错误。
这显示了 stix two math 与 latin modern tfm 字体,mathtime 将是相同的。
\documentclass{article}
\usepackage{fontspec}
\newfontface\StixTwoMath{STIXTwoMath-Regular.otf}[NFSSFamily=stixtwomath,Script=Math]
\DeclareSymbolFont{stixtwomath}{TU}{stixtwomath}{m}{n}
\Umathchardef\myA "0 \symstixtwomath "1D400
\begin{document}
{\StixTwoMath \char"1D400 /
答案2
这是一个数学模式\stixtwosymbol
命令(基于\boldsymbol
from amsbsy
),它可以用 STIX Two Math 中的符号替换任意符号。它还会创建 a\mathversion{stixtwo}
和 a \stixtwomath
,其工作方式与\mathversion{bold}
和类似\boldmath
。
\documentclass{article}
\usepackage{unicode-math}
\setmathfont{New Computer Modern Math Book}
\setmathfont{STIX Two Math}[version=stixtwo]
\makeatletter
\newcommand\stixtwomath{\mathversion{stixtwo}}
%% Based on the definition of \boldsymbol from amsbsy.sty"
\DeclareRobustCommand{\stixtwosymbol}[1]{%
\begingroup%
\let\@nomath\@gobble \mathversion{stixtwo}%
\math@atom{#1}{%
\mathchoice%
{\hbox{$\m@th\displaystyle#1$}}%
{\hbox{$\m@th\textstyle#1$}}%
{\hbox{$\m@th\scriptstyle#1$}}%
{\hbox{$\m@th\scriptscriptstyle#1$}}}%
\endgroup}
\makeatother
\begin{document}
\noindent\( x \triangleright y \)\\
\( x \stixtwosymbol{\triangleright} y\)
\end{document}
您可以使用任意文本模式命令,包括设置字体系列,后跟\symbol{"123A}
,将其包装在\text
from amsmath
(或amstext
)中。如果您需要它有除 之外的任何间距\mathord
,则需要在数学类中再次包装它,例如,
\newfontface\symbolfont{STIX Two Math}
\newcommand\triangleright{\mathbin{\text{\symbolfont\symbol{"2A65}}}}
然而,框架挑战:如果您真正想要的是使用来自不同数学字体的某些符号,请始终使用range=
以下选项unicode-math
:
\defaultfontfeatures{Scale=MatchLowercase}
\setmathfont{New Computer Modern Math Book} % Or your font of choice
\setmathfont{STIX Two Math}[range={\triangleleft,\triangleright}]
您还可以设置范围和字母,并使用十六进制或十进制 Unicode 代码点代替符号名称。例如
\setmathfont{STIX Two Math}[StylisticSet=8, range={"222B-"2233,"2A0B-"2A1C}]
将所有积分变为直立,或
\setmathfont{STIX Two Math}[StylisticSet=1, range={scr, bfscr}]
\mathscr
将和\mathbfscr
字母从副本更改\mathcal
为脚本字体。