我发现了这个问题:
\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}