\fontspec 带缩放 + \chemgreek = 数学字体不缩放

\fontspec 带缩放 + \chemgreek = 数学字体不缩放

我发现了这个问题:

\chemgreek + \fontspec + Lucida.otf = 缺少希腊字符

原则上,这解决了我的问题(缺少希腊字符)。但由于我对字体使用了缩放,因此又出现了另一个问题:

\documentclass[12pt,
           ]{scrreprt}

\usepackage[ngerman]{babel}
\usepackage[babel, german=quotes]{csquotes}

\usepackage{chemmacros}
\usechemmodule{all}
\chemsetup{greek = {fontspec}}

\usepackage{amsmath}
\usepackage{fontspec}
\usepackage{unicode-math}

\defaultfontfeatures{Scale=.5}

\setmainfont{LucidaBrightOT.otf}
\setmathfont{LucidaBrightMathOT.otf}[NFSSFamily=lbm]

\ExplSyntaxOn
\cs_set_protected:Nn \chemgreek_text:n
{ \ensuremath { \text {\fontfamily{lbm}\selectfont #1} } }
\ExplSyntaxOff

\begin{document}
Blindtext $a_i=5$ blindtext.
\printchemgreekalphabet $\upalpha$ $\alpha$ \chemalpha

\end{document}

您可能会看到,数学字体无法正确缩放。我该怎么做才能解决这个问题?谢谢!

答案1

要在文档中缩小文本大小,最好更改正常字体大小,而不是缩放所有 Unicode 字体。因此,

\defaultfontfeatures{Scale=.5}

只需替换\documentclass[12pt]{scrreprt}\documentclass[6pt]{scrreprt}

现在让我们假设你因为某种原因不能这样做。问题是

\setmathfont{LucidaBrightMathOT.otf}[NFSSFamily=lbm]

unicode-math加载指定字体的多个变体来设置旧式数学参数,但使用该NFSSFamily选项时,每种字体都使用相同的 NFSS 系列名称,因此每种字体都会覆盖以前的字体。这意味着实际上只使用了最后一个字体,但最后一个字体会覆盖缩放选项以成为不同的字体。除了缩放问题之外,这还可能导致错误的数学参数。

要修复此问题,unicode-math只需NFSSFamily在加载主字体时传递选项即可。可以使用以下\patchcmd方法etoolbox修复字体加载宏unicode-math

\documentclass[12pt]{scrreprt}

\usepackage[ngerman]{babel}
\usepackage[babel, german=quotes]{csquotes}

\usepackage{chemmacros}
\usechemmodule{all}
\chemsetup{greek = {fontspec}}

\usepackage{amsmath}
\usepackage{fontspec}
\usepackage{unicode-math}
\usepackage{etoolbox}

\ExplSyntaxOn
\keys_define:nn{unicode-math}{
  NFSSFamily .tl_set:N = \l__my_um_nfssfamily_tl
}
\patchcmd \__um_fontspec_select_font: {
  \l__um_family_tl {\l__um_font_keyval_tl}
}{
  \l__um_family_tl {NFSSFamily={\l__my_um_nfssfamily_tl},\l__um_font_keyval_tl}
}{}{\GenericError{}{Something~broke}{}}
\ExplSyntaxOff

\defaultfontfeatures{Scale=.5}

\setmainfont{LucidaBrightOT.otf}
\setmathfont{LucidaBrightMathOT.otf}[NFSSFamily=lbm]

\ExplSyntaxOn
\cs_set_protected:Nn \chemgreek_text:n
{ \ensuremath { \text {\fontfamily{lbm}\selectfont #1} } }
\ExplSyntaxOff

\begin{document}
Blindtext $a_i=5$ blindtext.
\printchemgreekalphabet $\upalpha$ $\alpha$ \chemalpha
\end{document}

相关内容