Unicode-math:并行使用多种书法字体

Unicode-math:并行使用多种书法字体

我想在同一个文档中方便地使用两种不同字体的书法字体。

例如在下面的代码片段中,我如何并行加载来自 LatinModern 的书法字体并通过类似的命令使用它\symcallatin{ABC}

我已经找到了一些依赖于切换整个字体的解决方案,例如使用mathversion。但我想避免这种情况,而是使用专用命令,允许在预定义字体中写入某些符号。如何实现?

% !TeX TS-program = lualatex
\documentclass{standalone}
\usepackage{fontspec,unicode-math}

\setmathfont{TeX Gyre Pagella Math}
\setmathfont[range={cal,bfcal},StylisticSet=1]{XITS Math}

\begin{document}
    $\symcal{ABC}$ 
\end{document}

答案1

在数学模式下组合不同的字体传统上是用\fam原语实现的。 默认情况下unicode-math不用于\famOTF 字体,但您可以通过手动将字体加载到 mathgroups 中来更改这种情况。机器不会加载其他字体unicode-math,因此range等不可用:

\documentclass{article}
\usepackage{unicode-math}
\setmathfont{XITS Math}
\ExplSyntaxOn
\makeatletter
\cs_new:Npn\definemathgroup#1#2#3#4{
  \fontspec_set_family:Nnn\l_my_math_font_family{SmallCapsFont={},ItalicFont={},BoldFont={},Script=Math,#3}{#4}
  \exp_args:Nc\new@mathgroup{\string#1}
  \::c\::n\::f\:::\new@symbolfont{\string#1}{TU}{\l_my_math_font_family}{\seriesdefault}{\shapedefault}
  \cs_new:Npn#1##1{#2{\fam\use:c{\string#1}##1}}
}
\makeatother
\ExplSyntaxOff
\definemathgroup\mathmyothercal\symcal{}{Latin Modern Math}
\definemathgroup\mathtgcal\symcal{}{Tex Gyre DejaVu Math}
\begin{document}
\[ABC=\symcal{ABC}=\mathtgcal{ABC}=\mathmyothercal{ABC}\]
\end{document}

在此处输入图片描述

在命令中,\definemathgroup第二个参数(\symcal在上述示例中始终如此)选择数学字母。这可以用其他命令替换,以\sym...加载unicode-math其他数学字母,例如,\smybbblackbord bold \symfrak、、、、...\symit\symnormal

相关内容