LaTeX 字体之字族篇

字族、字系与字形

字体 (typeface) 的概念非常令人恼火,在电子化时代,基本上也都以字体 (font) 作为替代的称呼。字族、字系与字形这三者大概可以并称字体

  • 宋体、黑体、楷体,这属于字族
  • 加粗、加斜属于字系和字形
  • 五号、小四属于字号

fontspec 宏包

fontspec 是一个基于 XeLaTeX 和 LuaLaTeX 的宏包(此处划重点),所以在编译时要注意不能使用 PdfLaTeX,否则会出现编译错误(建议使用 XeLaTex)。

使用 fontspec 宏包更改字体

xelatex 编译命令能够支持直接调用系统安装的 .ttf 或 .otf 格式字体,xelatex 命令下支持用户调用字体的宏包是 fontspec

如何使用 xelatex 进行编译

  • 可以将 xelatex 作为编辑器的默认编译器,编译即自动使用 xelatex(推荐该方式)
  • 或者找到 xelatex 命令

使用 xelatex 进行编译

方式 1:以 TexStudio 为例

09-TexStduio默认编译器设置为xelatex.png

方式 2:以 TexStudio 为例

08-使用xelatex进行编译.png

语法格式

1
2
3
4
5
6
7
\usepackage{fontspec}
\setmainfont[⟨font features⟩]{⟨font name⟩} %设置衬线字体
\setsansfont[⟨font features⟩]{⟨font name⟩} %设置无衬线字体
\setmonofont[⟨font features⟩]{⟨font name⟩} %设置等宽字体

% 举个例子
\setsansfont[BoldFont={Arial Bold}, ItalicFont={Arial Italic}]{Arial}
  • font features:用来手动配置对应的粗体或斜体
  • font name:字体名称

什么是衬线字体、非衬线字体以及等宽字体?
参考资料:博客园:Serif 和 Sans-serif 字体的区别

由于中文字体少有对应的粗体或斜体,⟨font features⟩ 里多用其他字体来配置,比如习惯上将宋体的 BoldFont 配置为黑体,而 ItalicFont 配置为楷体。

(可先跳过此段)需要注意的是:fontspec 宏包会覆盖数学字体设置。需要调用一些数学字体宏包时,应当在调用 fontspec 宏包时指定 no-math 选项。
(可先跳过此段)fontspec 宏包可能被其它宏包或文档类如 xeCJK、ctex 文档类)自动调用时,则在文档开头的 \documentclass 命令里指定 no-math 选项。

需求 1:全文更换字体

在前言部分对字体进行设置

1
2
3
%语法:\setmainfont{FONT_NAME}
% 比如
\setmainfont{Times New Roman} %设置全文英文衬线字体为Times New Roman,注意Latex区分大小写

需求 2:中文为宋体,英文为 Times New Roman

在 ctex 中文文档类下,默认中文字体为宋体(衬线字体),只要将英文字体的衬线字体设置为 Times New Roman 即可满足需求

1
2
3
4
5
6
7
8
\documentclass{ctexart}
\usepackage{fontspec}
\setmainfont{Times New Roman}[BoldFont={Times New Roman Bold}, ItalicFont={Times New Roman Italic}] %设置
\begin{document}
Hello, Welcome to Latex %普通英文字体为Times New Roman
你好,欢迎来到Latex的世界 % 普通文字中文字体为宋体,英文为Times New Roman字体

\end{document}

01-中文设置为宋体,英文设置为Times,英文加粗斜体也为Times.png

对于非正文字体是不是也设置成功了呢?可以测试一下标题字体与图片标题字体

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
\documentclass{ctexart}
\usepackage{fontspec}
\setmainfont{Times New Roman}[BoldFont={Times New Roman Bold}, ItalicFont={Times New Roman Italic}] % 设置衬线字体为Times New Roman,加粗和斜体也为Times New Roman加粗体和斜体

\begin{document}
Hello, Welcome to Latex %普通英文字体为Times New Roman

你好,欢迎来到Latex的世界 % 普通文字中文字体为宋体,英文为Times New Roman字体

\textbf{Hello, Welcome to Latex} %加粗则设置为Times New Roman加粗字

\textit{Hello, Welcome to Latex} %加粗则设置为Times New Roman斜体

\section{This is a section}
\subsection{This is a subsection}
\subsubsection{This is a subsubsection}

\begin{figure}[hbp]
\caption{This is a caption}
\end{figure}

\end{document}

02-中宋英Times.png

可以看到 ctexart 对应的 section 标题都是加粗的,那么对于中文呢,还会是加粗的宋体吗?我们刚才只设定了英文衬线字体,普通文字、加粗、斜体文字均匀 Times New Roman 字体,

1
\setmainfont{Times New Roman}[BoldFont={Times New Roman Bold}, ItalicFont={Times New Roman Italic}] % 设置衬线字体为Times New Roman,加粗和斜体也为Times New Roman加粗体和斜体

首先需要明确一点:汉字没有斜体.平常我们看到的加斜汉字,通常是几何变换得到的结果,非常的粗糙,并不严格满足排版要求;而真正的字形上需要精细的设计的。同时,汉字字体里面也很少加粗体的设计。
西文一般设有加斜,但是这与 “斜体” 并不是同一回事.加斜是指某种字族的 Italy 字系;而斜体,是指 Slant 字族.在行文中表强调时使用的是前者;在 Microsoft Word 等软件中看到的倾斜的字母 I,也代表前者.

加粗和斜体通常不是加粗的宋体和宋体的斜体,而是由其他字体替代,对应的加粗体为黑体字体,斜体为楷体字体。

1
2
3
4
5
6
7
8
9
10
11
12
13
\documentclass{ctexart}
\usepackage{fontspec}
\setmainfont{Times New Roman}[BoldFont={Times New Roman Bold}, ItalicFont={Times New Roman Italic}] % 设置衬线字体为Times New Roman,加粗和斜体也为Times New Roman加粗体和斜体

\begin{document}
\section{这是一个一级标题}

你好,欢迎来到Latex的世界 % 普通文字中文字体为宋体,英文为Times New Roman字体

\textbf{你好,欢迎来到Latex的世界} %粗体

\textit{你好,欢迎来到Latex的世界} %斜体
\end{document}

03-中文字体加粗加斜的一些设置.png

需求 3:自定义中文字体

中文方面, ctex 宏包直接定义了新的中文文档类 ctexart, ctexrep 与 ctexbook,以及 ctexbeamer 幻灯片文档类
ctex 宏包已经为我们提供了以下的字体命令
参考资料:中国 TeX 用户组. CTeX 宏集手册(可以该网站可下载到最新版本的 CTeX 宏基手册)

字体 命令
宋体 songti
黑体 heiti
仿宋 fangsong
楷书 kaishu
1
2
3
4
5
6
7
\documentclass{ctexart}
\begin{document}
我是全局字体,我使用的是宋体\\
{\kaishu 我是ctex已定义好的字体,我使用的楷体}\\
{\heiti 我是ctex已定义好的字体,我使用的黑体}\\
{\fangsong 我是ctex已定义好的字体,我使用的仿宋}\\
\end{document}

05-CTeX提供的中文字体命令.png

除了以上字体,我还想使用其他的中文字体呢?
查询电脑上字体对应的英文名称,具体如何查询可以查看一下两个连接
比如说查询到华文行楷对应的英文名称为 STXingkai,那么可以通过如下方式自定义命令,在正文中,只要使用 \huawenxingkai 即可将字体设置为华文行楷

如何查询中文字体对应的英文名称参考资料

1
fc-list -f "%{family}\n" :lang=zh-cn >c:\list.txt
  1. 打开 CMD
  2. 将以上命令复制到 CMD,回车
  3. 去 C 盘根目录查看 list.txt 文件

(Latex)如何查看本地中文字体的英文名称.gif

参考资料:

1
2
\setCJKfamilyfont{hwxk}{STXingkai}             %使用STXingkai华文行楷字体
\newcommand{\huawenxingkai}{\CJKfamily{hwxk}}

最小案例如下:

1
2
3
4
5
6
\documentclass{ctexart}
\setCJKfamilyfont{hwxk}{STXingkai} %使用STXingkai华文行楷字体
\newcommand{\huawenxingkai}{\CJKfamily{hwxk}}
\begin{document}
{\huawenxingkai 我是自定义的字体,我使用的华文行楷}
\end{document}

06-我是自定义字体华文行楷.png

注意:只需要给某些文字设定字体时,请将命令和需要修改字体的文字用大括号包起来

1
2
3
4
{\huawenxingkai 我是自定义的字体,我使用的华文行楷}

% 以下命令会修改该命令之后的所有的文字字体,修改局部字体时不推荐这样使用,推荐使用花括号进行分组,如以上命令
\huawenxingkai{} 我是自定义的字体,我使用的华文行楷

比如如下案例,会导致第二行文字也变为黑体

1
2
3
4
5
6
\documentclass{ctexart}
\begin{document}
\heiti{} 你好,欢迎来到Latex的世界

你好,欢迎来到Latex的世界
\end{document}

07-设置全局字体的方式.png

待续

参考资料