我坚信我只了解了 1% 的 LaTeX 如何选择(数学)字体,所以我猜除了缺少与 Helvetica 匹配的适当的数学字体之外,我的大部分问题都来自于此。
我的目标是在无衬线文本的环境中使用无衬线数学,在有衬线文本的环境中使用衬线数学。为此,我定义了数学版本sans
和sansbold
(我听说过这个 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=.87
forhelvet
而不是常见的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}