LaTeX 当然不会把数学模式中的黑体全搞成 poor man's bold,只不过你自己(在不清楚的情况下)用了专门生成 poor man's bold 的命令,然后回头来问为什么这个命令会产生它应该产生的功能。对吧? 回到问题本身。真正应该问的,应该是「如何正确地在 LaTeX 数学公式中使用粗体」。当然,这还是一个字体选择的问题。下面只考虑相对传统的数学字体,也就是不使用 unicode-math 的情形,后者用法比较特别,仅用于 XeTeX 和 LuaTeX 的引擎,你可以自己读它的手册。

一、基本机制

在 LaTeX 中,选择字体通常都是通过 NFSS 机制完成的,数学字体也不例外。基本的切换为数学粗体的命令是 \boldmath,它通常被定义为 \mathversion{bold},意思是全局地把当前的数学字体设置为粗体,并且它应该在数学环境外面使用。(与之相对的恢复正常粗细是 \unboldmath 即 \mathversion{normal}。)因此我们有:
\documentclass{article}
\begin{document}
\boldmath $a^2 + b^2 = c^2$
\end{document}
boldmath1 出现多次复制的 poor man's bold 了吗?并没有。 和普通的公式对比就能看出,这里不仅字母和数字被加粗了,加号和等号也都加粗了。这当然是最好的情况——数学符号使用的实际字体确实有加粗和不加粗两种格式。 但也有一些时候,字体是不完整的,如果你所用的数学字体包并没有为一个符号设计粗细两种格式,你当然不可能通过简单的命令选择到这个符号。比如说积分号,默认的 CM 数学字体就没有对应的粗体形式的符号,你直接使用 \boldmath $\int$ 得到的就是不加粗的积分号。 对于字体不完整的情况,最好的办法就是换一个完整的字体。比如说使用 txfonts 或者说修正了的 newtxmath 字体包,就会得到正确的加粗积分号,如下图: boldmath2 而如果不更换字体还一定要加粗,就可能需要使用后面提及的伪粗体(poor man's bold)技术了。

二、加粗个别符号的机制

更多的时候我们只希望加粗个别符号。这当然还是一个字体选择的问题。LaTeX 并不允许在数学公式内部直接设置 \mathversion,即在公式内使用 \boldmath 是无效的。为此,amsmath 宏包(更确切地说是子包 amsbsy)提供了 \boldsymbol 命令,使用 \boldsymbol{符号} 的效果大约就是临时切换到文本模式,设置 \boldmath,然后里面嵌套一个小数学公式,输出加粗符号。(除此以外宏包也用一些代码处理了数学间距和大小的变化情况。)最后用起来的效果就是只加粗了参数里面的符号。如
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\[
a+b\times c \ne \boldsymbol{a+b \times c}
\]
\end{document}
boldmath3   那么如果没有粗体形式呢?amsmath 还提供了 \pmb 命令来提供伪粗体(poor man's bold)的符号。伪粗体的表现形式就是连续输出三个的相同符号,三个符号相互重叠而略有错位,形式伪粗体的效果。如图所示:     boldmath4  

在有可用的粗体字体时(比如上图中的字母 k),伪粗体是应该尽量避免的;而对于缺少粗体形式的符号(如上图的积分号),如果没有可用的字体,那么也不失为一种备用选择。

三、推荐的宏包——bm

与 amsbsy 功能类似,更为强大的,是专门处理数学粗体的 bm 宏包。 bm 宏包提供的主要命令是 \bm,它和 amsmath 的 \boldsymbol 一样,把参数中的数学符号用粗体输出。不同的是,在符号有粗体形式的字体可用时,它的功能与 \boldsymbol 大致相同,会选择对应的粗体输出;而在符号没有粗体形式的字体可用时,它的功能又与 \pmb 一样,会采用伪粗体输出。除此而外,bm 宏包也在参数嵌套、数学字母字体切换等方面相比 amsbsy 处理得更为细致。例如下例中,数学字母是正常粗体,积分号是伪粗体:
\documentclass{article}
\usepackage{bm}
\begin{document}
\[
\int k\,\mathrm{d}x \ne
\bm{\int k\,\mathrm{d}x}
\]
\end{document}
boldmath5  

四、选用高质量的字体

在高质量的排版输出中,应该避免使用伪粗体。而要避免伪粗体,没有其他路子可走,就是选用字重齐全的高质量数学字体。TeX 系统自带的 CM 字体缺少部分粗体符号,但可以使用符号更为齐全的 newtxmath(Times 风格,配合 newtxtext 使用,前身是 txfonts)、stix(Times 风格,STIX 系列字体以大而全著称)、pxfonts(Palatino 风格)、mathdesign(本身只包含符号,有不同选项用来配合 Utopia、Garamond、Charter 字体)、MnSymbol(只包含符号)、fdsymbol(只包含符号)、lucidabr(Lucida Bright 商业字体)等字体包。一些专业的商业字体,如 MathTime Pro 的两个版本,甚至有 normal、bold、heavy 三种粗细可以使用(bm 宏包为最后一种粗细提供了 \hm 命令)。在排版时可以优先选择这类字体。下面是 newtxmath 的效果:
\documentclass{article}
\usepackage{newtxtext,newtxmath}
\usepackage{bm}
\begin{document}
\[
\sum \int (k\oplus j) \,\mathrm{d}x \ne
\bm{\sum \int (k\oplus j) \,\mathrm{d}x}
\]
\end{document}
      boldmath6   当然,即使不使用这类拥有全套粗体形式的数学字体(毕竟加粗的求和、积分号并不常用),也应该尽量选择支持较多符号的数学字体(考虑拉丁字母、希腊字母、常用运算符、AMS 运算符等)。

五、如何达到题目中说的「LaTeX 数学模式中的黑体都是多次复制」的糟糕效果?

最后我们举一个符号较少、质量较差的数学字体作为反例来完结这段讨论。PSNFSS 下属的 mathptmx 字体包,是一个在各种文档模板中十分常见的数学字体包。事实上,mathptmx 包并没有自己对应的任何实际字体,所有数学字母和符号分别来自 Times Roman 的正文字母、rsfs 包的花体字母、Adobe Symbol 字体中的数学符号,剩下的数学符号由默认的 CM 补全。更糟糕的是,mathptmx 根本没有任何粗体形式的符号。在 mathptmx 包中,\boldmath 命令被直接重定义为发出一个缺字体的警告:
\def\boldmath{%
   \PackageWarning%
   {mathptmx}%
   {There are no bold math fonts}%
   \global\let\boldmath=\relax
}
  因此,如果你使用了 mathptmx 这样不包含任何粗体形式的低质量的字体包,而又采用 bm 包的 \bm 命令来产生粗体,那么很自然,所有加粗的字符就都被作为伪粗体输出了。仍沿用前面 newtxmath 字体包的例子:
\documentclass{article}
\usepackage{mathptmx}
\usepackage{bm}
\begin{document}
\[
\sum\int(k\oplus\pi)\,\mathrm{d}x \ne
\bm{\sum\int(k\oplus\pi)\,\mathrm{d}x}
\]
\end{document}
  效果非常之吓人:   boldmath7选自:http://www.zhihu.com/question/25290041  

点赞(1)

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部