![“旧”数学字体命令(\mathrm 等)和 unicode-math(“range”选项)](https://linux22.com/image/356886/%E2%80%9C%E6%97%A7%E2%80%9D%E6%95%B0%E5%AD%A6%E5%AD%97%E4%BD%93%E5%91%BD%E4%BB%A4%EF%BC%88%5Cmathrm%20%E7%AD%89%EF%BC%89%E5%92%8C%20unicode-math%EF%BC%88%E2%80%9Crange%E2%80%9D%E9%80%89%E9%A1%B9%EF%BC%89.png)
我正在尝试使用 的unicode-math
功能 ( \setmathfont[range=…]
) 在数学模式下使用非数学字体。例如:
\documentclass{scrartcl}
\usepackage{unicode-math}
\setmainfont{FreeSans}
\setsansfont{FreeSans}
\setmathfont{Latin Modern Math}
\setmathfont{FreeSans}[range=up/{greek,Greek,latin,Latin,num}]
\setmathfont{FreeSans Oblique}[range=it/{greek,Greek,latin,Latin,num}]
\setmathfont{FreeSans Bold}[range=bfup/{greek,Greek,latin,Latin,num}]
\begin{document}
abc123
\textit{abc123}
\textbf{abc123}
\bigskip
\begin{tabular}{ll}
math & $abc123$ \\
mathit & $\mathit{abc123}$ \\
mathrm & $\mathrm{abc123}$ \\
mathup & $\mathup{abc123}$ \\
mathbf & $\mathbf{abc123}$ \\
mathbfup & $\mathbfup{abc123}$
\end{tabular}
\end{document}
对于此文档,我希望所有文本都使用 FreeSans,并且带有mathrm
和mathup
以及mathbf
和 的行mathbfup
相同。但是,我的结果是这样的:
因此,我对正在发生的事情有两个疑问:
- 为什么
\mathit
和\mathup
不同于\mathbfup
?\mathbfup
可以正常工作,生成 FreeSans Bold 文本。另一方面,其他两个则生成默认的拉丁现代数学。 - 我如何让所有这些命令都使用 FreeSans,就像
\mathbfup
它一样?我知道unicode-math
的命令\setmathfontface⟨command⟩{⟨font name⟩}[⟨font features⟩]
,但据我所知,它不允许我指定像 这样的范围。而且自己的命令range=up/{greek,Greek,latin,Latin,num}
不应该像一样“开箱即用”吗?unicode-math
\mathup
版本信息:TeX Live 2017、LuaTeX v1.0.4、unicode-math 2017/01/27 v0.8d。
答案1
如果您确实想要改变\mathbf
和类似:这可以通过(重新)声明数学字母轻松完成。
如果您想要调整\symXX
通常将字符映射到数学平面上的字形的命令,问题就开始了。这里的实现相当不完善。如果您将字体设置为最后一个“数学字体”,它或多或少可以工作,但这会破坏各种数学字体尺寸。如果您通过将真正的数学字体设置为最后一个字体来重置它们,那么字体symXX
就会损坏。另请参阅此问题https://github.com/wspr/unicode-math/issues/331。
\documentclass{scrartcl}
\usepackage{unicode-math}
\setmainfont{FreeSans}[NFSSFamily=FreeSans]
\setsansfont{FreeSans}
\setmathfont{Latin Modern Math}
\setmathfont{FreeSans}[range=up/{greek,Greek,latin,Latin,num}]
\setmathfont{FreeSans Bold}[range=bfup/{greek,Greek,latin,Latin,num}]
\setmathfont{FreeSans Oblique}[range=it/{greek,Greek,latin,Latin}]
% better a real math font at the end, but breaks the ranges above:
\setmathfont{Latin Modern Math}[range=\int]
%Or with `\setmathfontface`, see documentation
\DeclareMathAlphabet{\mathrm}{TU}{FreeSans}{m}{n}
\DeclareMathAlphabet{\mathbf}{TU}{FreeSans}{bx}{n}
\DeclareMathAlphabet{\mathit}{TU}{FreeSans}{m}{it}
\let\mathbfup\mathbf
\begin{document}
abc123 αβ
\textit{abc123 αβ}
\textbf{abc123 αβ}
\bigskip
\begin{tabular}{ll}
math & $abc123$ \\
mathrm & $\mathrm{abc123αβ}$ \\
mathup & $\mathup{abc123αβ}$ \\
mathbf & $\mathbf{abc123αβ}$ \\
mathbfup & $\mathbfup{abc123αβ}$\\
symup & $\symup{aα} \mupalpha $\\
symit & $\symit{a}\symit{α}\symit{β} \mita \mitalpha \mitvarTheta $\\
symbf & $\symbf{a}\symbf{b}\symbf{c}\symbf{α}\symbf{β} \mbfa \mbfb \mbfc \mbfvarTheta \mbfalpha \mbfbeta$ \\
\end{tabular}
\end{document}