Helvetica 匹配数学版本

Helvetica 匹配数学版本

我坚信我只了解了 1% 的 LaTeX 如何选择(数学)字体,所以我猜除了缺少与 Helvetica 匹配的适当的数学字体之外,我的大部分问题都来自于此。

我的目标是在无衬线文本的环境中使用无衬线数学,在有衬线文本的环境中使用衬线数学。为此,我定义了数学版本sanssansbold(我听说过这个 16 种字体的限制,所以我想我不应该这样做,但现在我很好奇)。我尝试从(我认为)我理解的地方复制至少一些内容newtxsf.sty,最后是

\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage{amsmath,amssymb}
\usepackage{newtxtext,newtxmath}
\usepackage[scaled=0.87]{helvet}

\DeclareMathVersion{sans}
\DeclareMathVersion{boldsans}

\DeclareFontEncoding{LMS}{}{}
\DeclareFontSubstitution{LMS}{ntxsy}{m}{n}
\DeclareFontSubstitution{U}{ntxsfmia}{m}{it}

\SetSymbolFont{operators}       {sans}{\encodingdefault}{\sfdefault}{m}{n}
\SetSymbolFont{letters}         {sans}{OML}{ntxsfmi}{m}{it}
\SetSymbolFont{lettersA}        {sans}{U}{ntxsfmia}{m}{it}
\SetSymbolFont{largesymbolsTXA} {sans}{U}{ntxexa}{m}{n}
\SetMathAlphabet{\mathbf}       {sans}{T1}{phv}{b}{n}
\SetMathAlphabet{\mathit}       {sans}{OML}{ntxsfmi}{m}{it}

\SetSymbolFont{operators}       {boldsans}{\encodingdefault}{\sfdefault}{b}{n}
\SetSymbolFont{letters}         {boldsans}{OML}{ntxsfmi}{b}{n}
\SetSymbolFont{symbols}         {boldsans}{LMS}{ntxsy}{b}{n}
\SetSymbolFont{AMSm}            {boldsans}{U}{ntxsym}{b}{n}
\SetSymbolFont{symbolsC}        {boldsans}{U}{ntxsyc}{b}{n}
\SetSymbolFont{largesymbols}    {boldsans}{LMX}{ntxexx}{b}{n}
\SetSymbolFont{largesymbolsTXA} {boldsans}{U}{ntxexa}{b}{n}
\SetSymbolFont{lettersA}        {boldsans}{U}{ntxsfmia}{b}{it}
\SetMathAlphabet{\mathbf}       {boldsans}{T1}{phv}{b}{n}
\SetMathAlphabet{\mathit}       {boldsans}{OML}{ntxsfmi}{b}{it}

\newcommand\test{
    \emph{h}$h \sum_i \bigl[\bigr]  \to \lim_{\alpha} \Xi\ \mathbf{aB\Xi}\mathrm{aB}\mathit{aB\Xi}\mathfrak{aB}\mathcal{A}$
}
\begin{document}
        \test
        
        \bfseries\mathversion{bold}\test
        
        \mdseries\sffamily\mathversion{sans}\test

        \bfseries\mathversion{boldsans}\test
\end{document}

在此处输入图片描述

显而易见的问题是

  • \bigl[\bigr]匹配。其他支架和尺寸似乎可以。
  • $\mathbf{\Xi}$ 不起作用(应该吗?),这是因为\mathrm已经使用 完成, phv因为 似乎没有 的直立版本ntxsfmi。我不确定我是否应该关心。
  • Fraktur 字母在mathversion{normal}和中看起来不同\mathversion{sans}。虽然没有那么疼,但我想知道它从何而来。

除此之外,我应该这样做吗?我是否遗漏了什么?真的重要吗?您可能已经注意到,我使用了scaled=.87forhelvet而不是常见的0.95,我选择它位于 Times 和 之间newtxsf

答案1

您所拥有的实际上看起来很好(尽管您可能想在数学中使用 OT1 而不是 T1,正如 campa 在评论中指出的那样)。

16 个数学组的限制是每个数学版本 16 个字体,因此添加两个新的数学版本正是正确的方法。

[] 未对齐的问题不是你的错,它似乎是 txfonts 设置中的一个错误,你或许应该报告:

\documentclass{scrartcl}
\usepackage[T1]{fontenc}

\usepackage{newtxtext,newtxmath}

\begin{document}
        
\boldmath

$[], \bigl[\bigr], \Bigl[\Bigr]$
        
\end{document}

在此处输入图片描述

答案2

为了完整起见,以下是您在现代工具链中可以做同样事情的方法。代码\versionsymbol应该可以在任何引擎中运行。

\documentclass{article}
\usepackage{unicode-math}

\defaultfontfeatures{ Scale=MatchLowercase,
                      Ligatures = TeX }
\setmainfont{TeX Gyre Pagella}[Scale=1.0]
\setmathfont{KpMath-Regular}
\setmathfont[version=bold]{KpMath-Bold}
\setmathfont[version=sans]{KpMath-Sans}
\setmathfont[version=sansbold, FakeBold=1.2]{KpMath-Sans}

% A higher-order version of \boldsymbol from amsbsy.sty:
\makeatletter
\DeclareRobustCommand{\versionsymbol}[2]{%
  \begingroup
  \let\@nomath\@gobble \mathversion{#1}%
  \math@atom{#2}{%
  \mathchoice%
    {\hbox{\(\m@th\displaystyle#2\)}}%
    {\hbox{\(\m@th\textstyle#2\)}}%
    {\hbox{\(\m@th\scriptstyle#2\)}}%
    {\hbox{\(\m@th\scriptscriptstyle#2\)}}}%
  \endgroup}
\makeatother

\newcommand\sansmath{\mathversion{sans}}
\newcommand\sansboldmath{\mathversion{sansbold}}
\newcommand\sanssymbol[1]{\versionsymbol{sans}{#1}}
\newcommand\sansboldsymbol[1]{\versionsymbol{sansbold}{#1}}

\begin{document}

\( [x] \, \boldsymbol{[x]} \, \sanssymbol{[x]} \, \sansboldsymbol{[x]} \)

Default \( (r, \theta, \phi ) \)

{\bfseries\boldmath Bold \( (r, \theta, \phi ) \) }

{\sffamily\sansmath Sans-serif \( (r, \theta, \phi ) \) }

{\sffamily\bfseries\sansboldmath Sans-serif bold \( (r, \theta, \phi ) \)}

\end{document}

KP 字体样本

相关内容