如何使用 unicode-math 为黑板粗体符号设置另一种字体

如何使用 unicode-math 为黑板粗体符号设置另一种字体

我正在使用 STIX2 Math,unicode-math但不喜欢无衬线 Bbb。我已设法将黑板粗体字符设置为 DejaVu,\setmathfont[range=bb]{DejaVu Math TeX Gyre}但这仅适用于\mathbb,我习惯使用软件包附带的、等\Bbb1命令。\BbbRunicode-math

我想知道是否有任何方法可以更改这些字符的字体。我知道我可以在范围内单独列出每个字符,但一定有更直接的方法(我希望!)。

\documentclass{article}

\usepackage{unicode-math}
\setmathfont{STIX Two Math}
\setmathfont[range=bb]{DejaVu Math TeX Gyre}

\begin{document}

\[
    \BbbR \mathbb{R}
\]

\end{document

我希望这两个看起来一样。

答案1

\setmathfont{texgyredejavu-math.otf}[range={"1D538-"1D56B,"0211D}]

在此处输入图片描述

答案2

我想这部分unicode-math可能需要重新加工。

实际情况是,输入包unicode-math-table.tex具有所有数学符号的定义;例如,它有

\UnicodeMathSymbol{"0211D}{\BbbR}{\mathalpha}{/bbb r, open face r}%

基本上就是这样

\Umathcode    "0211D = "7 "0 "211D
\Umathchardef \BbbR  = "7 "0 "211D

因此输入\mathbb{R}将会得到预期的结果,因为它会产生\BbbR,但是在数学组可能不同于 0 的上下文中,事实上当range=bb指定了字体时也是如此。

我认为,unicode-math-table还应该记录字符被分配到哪个范围,以便能够将范围与相应的数学组配对,从而使上述定义具有正确的默认数学组。嗯,确实如此,但在不同的地方,并没有完全实现。

唉!目前还无法实现。不过,你可以\BbbX在正确的位置重新定义命令,让命令正常工作:

\documentclass{article}

\usepackage{unicode-math}

\setmainfont{STIX Two Text}
\setmathfont{STIX Two Math}
\setmathfont{TeX Gyre DejaVu Math}[
  Scale=MatchUppercase,
  range=bb,
]
\setmathfont{STIX Two Math}[range=] % to reset the font parameters

\ExplSyntaxOn
\cs_new_protected:Nn \__noble_reset_bb:
 {
  \int_step_inline:nnn { `A } { `Z }
   {
    \cs_set_protected:cpx { Bbb \char_generate:nn { ##1 } { 11 } }
     {
      \exp_not:N \mathbb { \char_generate:nn { ##1 } { 11 } }
     }
   }
 }
\AtBeginDocument{\__noble_reset_bb:}
\ExplSyntaxOff

\begin{document}

\[
    X \BbbR \mathbb{R} ℝ Y
\]

\end{document}

然而,该示例显示直接输入 Unicode 字符是行不通的。

在此处输入图片描述

为此,必须采取不同的方法。

相关内容