在文本和数学模式下使用任何 Stix Two Math OTF 字符,无需将其加载为数学字体

在文本和数学模式下使用任何 Stix Two Math OTF 字符,无需将其加载为数学字体

首先介绍一下背景。我使用的是 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命令(基于\boldsymbolfrom 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}

STIX 双样品

您可以使用任意文本模式命令,包括设置字体系列,后跟\symbol{"123A},将其包装在\textfrom 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为脚本字体。

相关内容