这是从 PDFLaTeX 切换到 LuaLaTeX. 使用 user187802 的回答,我有以下设置:
\documentclass{article}
\usepackage{fontspec}
\setmainfont[
Extension = .otf,
UprightFont = *-regular,
BoldFont = *-bold,
ItalicFont = *-italic,
BoldItalicFont = *-bolditalic,
Ligatures = {
TeX,
CommonOff
}
]{NewCM10}
\usepackage[
math-style = TeX,
warnings-off = {
mathtools-colon
}
]{unicode-math}
\setmathfont{NewCMMath-Regular.otf}
\setmathfont[
version = bold,
FakeBold = 2
]{NewCMMath-Regular.otf}
\usepackage{polyglossia}
\setdefaultlanguage{danish}
\begin{document}
Test.\footnote{`12345' versus `$12345$'}
\end{document}
从输出结果可以看出,文本模式和数学模式下的字体大小和字体粗细都不相同。(这不仅出现在脚注中,而且在其他地方,差异更为微妙。)
使用字体时,如何才能获得文本模式和数学模式完全相同的字体大小和字体粗体NewCM10
?
答案1
显然,NewCM-Math 中的数字比例不同。
您可以为数字指定文本字体。
\documentclass{article}
\usepackage{polyglossia}
\usepackage{fontspec}
\setmainfont[
Extension = .otf,
UprightFont = *-Regular,
BoldFont = *-Bold,
ItalicFont = *-Italic,
BoldItalicFont = *-BoldItalic,
Ligatures = {
TeX,
CommonOff
},
NFSSFamily=ncm,
]{NewCM10}
\usepackage[
math-style = TeX,
warnings-off = {
mathtools-colon
}
]{unicode-math}
\setmathfont{NewCMMath-Regular.otf}
\setmathfont[
version = bold,
FakeBold = 4,
]{NewCMMath-Regular.otf}
\setdefaultlanguage{danish}
% fix digits
\DeclareSymbolFont{textdigits}{TU}{ncm}{m}{n}
\SetSymbolFont{textdigits}{bold}{TU}{ncm}{b}{n}
\Umathcode`0="7 \symtextdigits `0
\Umathcode`1="7 \symtextdigits `1
\Umathcode`2="7 \symtextdigits `2
\Umathcode`3="7 \symtextdigits `3
\Umathcode`4="7 \symtextdigits `4
\Umathcode`5="7 \symtextdigits `5
\Umathcode`6="7 \symtextdigits `6
\Umathcode`7="7 \symtextdigits `7
\Umathcode`8="7 \symtextdigits `8
\Umathcode`9="7 \symtextdigits `9
\newcommand{\test}{%
12345 versus $12345$\par
\sbox0{12345}\the\wd0\ versus \sbox0{$12345$}\the\wd0\par
}
\begin{document}
\test {\bfseries\boldmath\test}
\bigskip
{\footnotesize\test {\bfseries\boldmath\test}}
$a+b=c$
{\boldmath$a+b=c$}
\end{document}
如果没有这些\Umathcode
线,输出是
答案2
问题是 LaTeX 的 Unicode 数学ssty
以非常特殊的方式设置具有字体功能的数学 Unicode 字体。它用于+ssty=0
文本样式、+ssty=1
脚本样式等。我只在 OpTeX 中使用ssty=0
,ssty=1
等等,没有+
符号。我无法找到此字体功能中加号的文档(https://learn.microsoft.com/en-us/typography/opentype/spec/features_pt#ssty没有提到这一点) 但我发现如果使用它,那么字母的最终变体不是由为此功能指定的数字来选择的,而是由字体的大小来选择的。
比较:
LaTeX: [NewCMMath-Regular.otf]:mode=base;script=math;language=dflt;+ssty=0; at 8.0pt
OpTeX: [NewCMMath-Regular]:mode=base;script=math;ssty=0;mathsize=1; at 8.0pt
LaTeX 为加载的字体中的数字 1234 选择脚本替代形状,OpTeX 选择缩放到 8pt 的基本形状,这在脚注大小中看起来更好。当 时ssty=1
,即仅当使用数学模式下的脚本样式时,OpTeX 才会选择脚本替代形状。