对LaTeX上的字体概念一直很混淆,所以这里大概总结一下一点概念与机制。
主要涉及到字体的使用与选择,但不包括使用任意自定义字体/系统字体,以及中文字体。
关于中文字体+LaTeX,可以使用CJK[utf8]宏包,可以参考以前一篇旧文。
关于使用任意字体,太复杂,此处不表。参考[1]的section 4,文档 [8], 以及tex-font-cheatsheet [5] (also available using texdoc).
以上两个问题比较简单的处理方法是使用XeTeX/LuaTeX,它们都能直接使用系统的字体。因此顺带也把中文的问题给解决了。
所谓的NFSS, New Font Selection Scheme。
参考 fntguide [1], psnfss2e [2](可用texdoc docname打开),以及Font selection in LATEX: The most frequently asked questions (schmidt.pdf) [3]。
以上三个都是只有十来页的文档,非常值得一读。
另外,有一个非常好的网站 [4] 列出了LaTeX上主要能用的字体(depends on distribution)。
想用某种字体前可以先去参考。
以下为summary:
- 每种font有五个attributes:
- encoding, 如OT1, T1 等。
- family, 如cmr (=Computer Modern Roman), ptm (=Adobe Times)等. 值得注意的是,family 又分为三种:
- roman (serif),即衬线字体
- sans serif,即无衬线字体
- typewriter (monospace),即等款字体
- series, 如m for medium, b for bold
- shape, 如n for normal, it for italic, sl for slanted, sc for caps and small caps.
- size, 如1.5in, 3mm
- 所以,OT1 cmr m n 10 就是指 Computer Modern Roman 10 point, TeX 里面的font name就是cmr10
- 所以,平时见的\textxx command就是用来设置这写attr的。如\textrm{..} 用来更改 family, \textbf{..} 更改 series, \footnotesize 更改size 为 8pt
- 用于底层的font selection command为\font... 系列。如\fontfamily 用来选择family
- 使用author commands来直接选择字体。上面所说的如\textrm会选择一种现在选定的roman字体(\rmdefault)。因此要更改这个设置,则可以更新\rmdefault:
- \renewcommand{\rmdefault}{ptm}
- 数学字体与文本字体不同,并且更复杂。比如上面的命令只改变了文本字体,而没有改变数学字体。所以一般是用package来封装、完成上面所说的这些命令。
- 比如要把文本和数学字体都改为Times, 则执行 \usepackage{mathptmx}
- LaTeX包含有可用的minimum font sets ``PSNFSS collection'',除了默认的Knuth大爷的Computer Modern,还有Times, Helvetica, Palatino, Chater等,强烈建议参考 [2].
- 注:在 PSNFSS 里有一个pifont,包含了一些有趣的符号。如扑克牌……
- 执行 pdftex testfont 可以测试LaTeX能用的字体。执行后,输入字体名字(如cmr10),然后 \sample, \bye。TeX会生成对应的一个示例。font-change [6] 给出了一份不错的参考。
关于数学字体:
- 通过\mathbf 等命令来使用某种特别的数学字体。型如 \mathbf 的字体称为 math alphabets。它们只能在数学模式内使用。
- 数学字体与文本字体一样具有五个attribute。然而,它们并不能被单独设置,而只能通过设置 "math version" 来设置。predefined的math version有normal和bold。它们只能在数学模式外调用。如 \mathversion{bold} 选择使用了 \boldmath 这个math version。
- 综上所述,要选择特定的数学字体,必须使用如下的步骤:
- 定义一个新的mathversion:如 \DeclareMathVersion{normal}
- 定义相应的mathalphabet,如\SetMathAlphabet{\baz}{normal}{OT1}{cmss}{m}{n}, 它设置 \baz 为 normal 这个 math mode 的一个math alphabet,其中的OT1, cmss m, n参数意义如文本字体
- 定义数学符号字体以及数学符号。以上只是设置了math alphabet的字体,还必须为符号再定义一套字体。参考 [1]。
- 定义数学字体大小。有四种大小:\textstyle, \displaystyle, \scriptstyle 与 \scriptscriptstyle,使用\DeclareMathSizes设置。
- 最后,使用 \mathversion 来选用这个 math version.
最后,The UK TeX FAQ [7] 也是一份非常不错的文档,它的section K 包含了字体相关的FAQ。 可以使用 texdoc FAQ-en 来察看一份pdf copy。
Reference:
[1] fntguide
[2] psnfss2e
[3] schmidt.pdf
[4] The LaTeX Font Catalogue, http://www.tug.dk/FontCatalogue/
[5] tex-font-cheatsheet
[6] font-change
[7] The UK TeX FAQ, http://www.tex.ac.uk/cgi-bin/texfaq2html?introduction=yes
[8] 为LaTeX 添加英文 TrueType 字体, http://giantchen.googlepages.com/TrueTypeFonts_en.pdf