我想在同一个文档中方便地使用两种不同字体的书法字体。
例如在下面的代码片段中,我如何并行加载来自 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
不用于\fam
OTF 字体,但您可以通过手动将字体加载到 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
其他数学字母,例如,\smybb
blackbord bold \symfrak
、、、、...\symit
\symnormal