我正在使用 STIX2 Math,unicode-math
但不喜欢无衬线 Bbb。我已设法将黑板粗体字符设置为 DejaVu,\setmathfont[range=bb]{DejaVu Math TeX Gyre}
但这仅适用于\mathbb
,我习惯使用软件包附带的、等\Bbb1
命令。\BbbR
unicode-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
答案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 字符是行不通的。
为此,必须采取不同的方法。