这篇的错误和不严谨较多, 可以参考 Stone-Zeng 的博客 来获得更多的字体知识
2.5 字体
在论文中我们使用最多的是一个字体的四种性质:字族(font family), 字体形状(font shape), 字体系列(font series)[1], 和字体大小(size)
. LaTeX提供了带参数命令和字体声明两种修改字体的命令, 前者用于少量字体的更换, 后者用于分组或环境中字体的整体更换例如:
2.5.1 字体的性质
字族
预设的字族有三种:罗马字族(roman family), 无衬线字族(sans serif family)和打字机字族(typewriter family), 其中无衬线字族也叫等线字族, 打字机字族也叫等宽字族, 其命令和显示效果为:
字体形状
字体预设的形状有4种:直立形状(upright shape, 也称roman shape), 意大利形状(italic shape), 倾斜形状(slanted shape), 小型大写形状(small capitals shape), 其对应的命令及显示为:
在论文中正文模式使用直立字形. 要注意倾斜形状和意大利形状的区别, 倾斜形状只是直接对符号进行倾斜而产生的, 而我们常说的斜体往往指的是意大利形状, 它更类似于手写体. 因为数学公式中的字体一般使用意大利形状, 因而与数学混排时倾斜形状不会与公式中的字母混淆; 在标题, 参考文献中也有使用倾斜形状的, 一般会根据所使用的模板不同而不同. 但是, 并不是所有的字族都有这么多种形状, 除了LaTeX默认的Computer Modern和Latin Modern, 大多数字体都只有意大利与倾斜两种形状中的一种, 很多字体也缺少小型大写字母符号. 另一方面, 一些其他字体也会提供更多其他的形状, 比如Venturis Adf字体就提供意大利的小型大写和空心等形状, 具体的命令可以查看对应字体的pdf文档, 其路径是C:\texlive\2018\texmf-dist\doc\fonts\
(TeXlive), MikTeX也可以到类似的路径下寻找pdf文档.
字体系列
预设命令中字体系列有中等(medium)和加宽加粗(bold extened)两类:
论文正文默认使用中等字体系列, 两个命令表示的意义对不同套的字体可能有所区别, 如命令\textbf
和\bfseries
对默认的字体选择加宽加粗字体系列, 但对一些字体则是选择加粗(bold)或半粗(demi-bold)字体系列.
上面介绍字体的三种性质, 同一种性质之间不能叠加, 但不同类的性质可以叠加, 三种性质的组合效果见下表
字体大小
在LaTeX中修改字体大小有两种方法, 一种是用系统内的字体大小, 另一种是在文类中添加可选参数, 这里我们只介绍如何用命令修改字体大小. 字体修改命令只有声明式的命令, 即对命令后的文字起效, 下面给出各个字体下各个命令的点数:
字体尺寸命令 | 10pt(默认选项) | 11pt | 12pt |
---|---|---|---|
\tiny |
5pt | 6pt | 6pt |
\scriptsize |
7pt | 8pt | 8pt |
\footnotesize |
8pt | 9pt | 10pt |
\small |
9pt | 10pt | 10.95pt |
\normalsize |
10pt | 10.95pt | 12pt |
\large |
12pt | 12pt | 14.4pt |
\Large |
14.4pt | 14.4pt | 17.28pt |
\LARGE |
17.28pt | 17.28pt | 20.74pt |
\huge |
20.74pt | 20.74pt | 24.88pt |
\Huge |
24.88pt | 24.88pt | 24.88pt |
当使用默认的10pt时, 所有字体尺寸命令与排版效果如下表:
注 对于整段文字都需要调整字体的, 可以使用一对花括号将要改变字体的内容括起来, 或者使用环境形式的更改方案, 如
\begin{large}
...
\end{large}
中文字体
对于中文字体, 大多数并没有所谓的粗体和意大利体, 但是在中文论文的写作过程中经常会需要用它们来做强调, 为此, ctex
宏包重定义了\rmfamily
, 使其对中文也起作用, 另外还定义了一些组合字体, 可以让中文也使用粗体\bfseries
和意大利体\itshape
, 默认的中文字族是rm
, 其正常字体是宋体, 粗体是黑体, 意大利体是楷体, 对应的无衬线字族是微软雅黑, 打字机字族是仿宋, 故上面我们看到在抄录命令中中文变成了仿宋体就是这个原因, 我们用下面的示例来进行综合的说明:
\documentclass{article}
\usepackage[UTF8]{ctex}
\begin{document}
\textrm{正常的中文字体}, \textsf{无衬线中文字体}, \texttt{打字机中文字体}, \textbf{中文粗体}, \textit{意大利中文字体}
\end{document}
而且ctex还针对中文用户设计了特别的字号, 类似MS-Word中的初号, 小四等等, 其命令为\zihao{数值}
, 其中的数值有16个可选项, 部分对应关系如下表:
字号 | 初号 | 小初 | 一号 | 小一 | 二号 | 小二 | 三号 | 小三 | 四号 |
---|---|---|---|---|---|---|---|---|---|
代码 | 0 | -0 | 1 | -1 | 2 | -2 | 3 | -3 | 4 |
以上字体大小与使用文类中的字体大小无关, 其点数都是固定不变的.
注意:在上文中提及的字族, 形状和系列的命令都是使用对应性质的命令, 而不是对应性质的名称, 如加宽加粗的命令是\textbf
, 而加宽加粗系列的名称是bx
2.5.2 字体设置
说完了LaTeX中的字体的性质, 再说说怎么更换字体.
英文字体
对于英文字体可以使用fontspec
宏包, 使用声明命令\fontspec[<性质>]{<字体>}
, 其中字体可以是字体名或字体文件名, 例如:MS-Word中默认的西文字体是Times New Roman, 字体名叫"Times New Roman", 而字体文件名叫"times.ttf", 注意, 当使用字体名时, LaTeX会自动调用字体对应的其他字形和系列, 而使用文件名使用更换字体的时候需要同时在[性质]中指定其对应的形状和系列, 否则无法使用其对应的形状和系列. 即如果想要完整使用Times New Roman字体的话, 以下命令二选一
\fontspec[BoldFont=timesbd.ttf, ItalicFont=timesi.ttf, BoldItalicFont=timesbi.ttf]{times.ttf}
\fontspec{Times New Roman}
或者可以指定其他字体作为times.ttf
的粗宽体和意大利体, 只需在[性质]中添加想使用的字体即可. 需要注意的是这种修改方式只可以改变当前文档中的罗马体, 即当我们使用\textsf, \texttt
命令的时候, 仍是调用原来的无衬线字体和等宽字体, 如果需要全局进行这种字体的修改的话, 推荐使用下面的格式:
\setmainfont[<性质>]{<字体名>} %设置正文罗马字体
\setsansfont[<性质>]{<字体名>} %设置正文无衬线字体
\setmonofont[<性质>]{<字体名>} %设置正文等宽字体
上述命令中的性质的说明与命令\fontspec
中的性质相同, 这些命令推荐用在导言区来修改全文的字体, 而且系统会尽量找到这些字体对应的粗宽体和意大利体, 尽量使得命令\textbf
和命令\textit
, 同时可以使用新的字族命令:
\newfontfamily<命令>[<性质>]{<字体名>}
这个命令中<命令>
是用户自定义的用来调用该字体的一个命令, <字体名>依旧可以是字体名称或者字体文件名, 然后用定义的声明命令来调用该字体, 看下例:
例 调用新字族命令来改变一段文字的字体.
\documentclass{article}
\begin{document}
\newfontfamily\myfont{Lucida Handwriting}
\myfont This is my font.
\end{document}
中文字体
对于CJK(China, Janpan, Korea)文字, \fontspec
命令对其不起作用, 类比英文的字体更换方法, 我们可以使用xeCJK
宏包中的命令, 但是我们无需主动调用这个宏包, 因为ctex文类以及ctex宏包都自动调用了这个宏包. 我们可以用下面的命令来改变全局CJK文字的罗马体, 无衬线体还有等宽体.
\setCJKmainfont[<性质>]{<字体名>} %设置正文罗马字体
\setCJKsansfont[<性质>]{<字体名>} %设置正文无衬线字体
\setCJKmonofont[<性质>]{<字体名>} %设置正文等宽字体
还有另一种调用字体的方法, 即定义新字族, 只是命令与英文命令有些区别:
\setCJKfamilyfont{<自定义字族>}[<性质>]{<字体名>}
并且用声明命令\CJKfamily{<自定义字族>}
来调用该命令, 看下例.
\documentclass{article}
\usepackage[UTF8]{ctex}
\begin{document}
\setCJKfamilyfont{myCJKfont}{华文行楷}
\CJKfamily{myCJKfont} 华文行楷
\end{document}
同样这种方法只对CJK文字起作用, 不会改变英文的字体, xeCJK
宏包又为我们提供了三个命令, 扩充了字体更换功能:
\CJKfamily{<自定义字族>} %只改变CJK文字字体
\CJKfamily+{<自定义字族>} %改变CJK和非CJK文字
\CJKfamily-{<自定义字族>} %只改变非CJK文字
同样, 对于中文字体, ctex
宏包也给了我们更多的方便, 使用\songti
, \heiti
, \fangsong
, \kaishu
, \youyuan
, \lishu
来分别输出宋体, 黑体, 仿宋, 楷书, 幼圆, 隶书, 上述命令都是声明形式的, 但是不能在导言区使用. 中文字体宏包ctex
将章节中的字体设为黑体, 如果想更改章节名中的字体, 可以使用上述字体命令, 如果要改变全文中某个层次的中文字体, 可以参考中文标题宏包ctexcap
.
-
通常指字体的重量(weight, 即粗细)和宽度(width) ↩