![使用 setmathfont 范围选择单个字形会修改其他字形](https://linux22.com/image/360346/%E4%BD%BF%E7%94%A8%20setmathfont%20%E8%8C%83%E5%9B%B4%E9%80%89%E6%8B%A9%E5%8D%95%E4%B8%AA%E5%AD%97%E5%BD%A2%E4%BC%9A%E4%BF%AE%E6%94%B9%E5%85%B6%E4%BB%96%E5%AD%97%E5%BD%A2.png)
如何在不影响任何其他字形的情况下更改仅用于一个字形的字体?
我最近从 pdfLaTeX 切换到 XeLaTeX、fontspec 和 unicode-math。
我使用 TeX Gyre Pagella 作为我的主要数学字体,但我不喜欢空集的字形,所以我想使用 Asana Math 的字形来表示这个符号。
我正在尝试按照其手册第 4.1 节的规定,使用 unicode-math 的范围功能来实现这一点:
\documentclass{article}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmathfont{texgyrepagella-math.otf}
\setmathfont{Asana-Math.otf}[range={\emptyset}]
\begin{document}
$\emptyset\mathbb N\BbbN$
\end{document}
这并没有给出我预期的结果:
空集符号仍然来自 Pagella,\mathbb
字母表已更改为 Asana 的字母表。
将范围更改为[range={\varnothing}]
确实给出了正确的空集符号(我觉得很奇怪,但它有效!)但仍然有意想不到的后果:
我尝试将范围更改为[range=up/{\varnothing}]
表明我只想影响 upshape 字体,但这无法编译:
! Undefined control sequence.
\l__um_alphabet_tl ->\varnothing
l.5 ...ont{Asana-Math.otf}[range=up/{\varnothing}]
注意:unicode-math 如果是 v0.8f 并且 fontspec 是 v2.6d,来自 TexLive 2017。
编辑先前接受的解决方案
解决方法[range={\int}]
是使用分隔符导致不需要的空间:
\documentclass{article}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmathfont{texgyrepagella-math.otf}
\setmathfont{Asana-Math.otf}[range={\varnothing}]
\setmathfont{texgyrepagella-math.otf}[range={\int}]
\begin{document}
$\big||a| - |b|\big|\leq|a-b|$
\end{document}
空范围技巧那里有同样的效果。
答案1
范围选项有点问题,而且往往会发生超出预期的变化。因此请谨慎使用。对于您的情况,如果最后将字体重置为主字体(但我认为符号不太合适),则可以使用:
\documentclass{article}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmathfont{texgyrepagella-math.otf}
\setmathfont{Asana-Math.otf}[range={\varnothing}]
\setmathfont{texgyrepagella-math.otf}[range={\int}]
\begin{document}
$\emptyset\mathbb N\BbbN$
\end{document}
不需要的空格是由于 unicode-math 中关于句点的 delcode 的一个错误造成的。在这种情况下,它只影响 xelatex,lualatex 没有问题。另请参阅https://github.com/wspr/unicode-math/issues/344一个解决方法(我不会称之为解决方案,因为必须找出数字)是:
\documentclass{article}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmathfont{texgyrepagella-math.otf}
\setmathfont{Asana-Math.otf}[range={\varnothing}]
\setmathfont{texgyrepagella-math.otf}[range={\int}]
\Udelcodenum`.=1073741824
\begin{document}
$\big||a| - |b|\big|\leq|a-b|$
\end{document}