数学和文本字体大小不一样

数学和文本字体大小不一样

这是从 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=0ssty=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 才会选择脚本替代形状。

相关内容