下面我们来介绍一下,在字体设置与选择中常见的命令及其用法和含义:
\setmainfont
例如:\setmainfont{Times New Roman}表示为设置默认英文字体为Times New Roman.
\setCJKmainfont
用法:
\setCJKmainfont{<font name>}[<font features>] %二者等价
\setCJKmainfont[<font features>]{<font name>}
设置正文罗马族的CJK字体,影响\rmfamily
和\textrm
的字体,后面两个参数继承自fontspec
宏包,<font features>
是字体属性选项,<font name>
是字体名,可以是字体族名也可以是文件名。
\setCJKfamilyfont
\setCJKfamilyfont{<family>}{<font name>}[<font features>] %二者等价
\\setCJKfamilyfont{<family>}[<font features>]{<font name>}
声明新的CJK字体族<family>
并指定字体
\setCJKsansfont
\setCJKsansfont{<font name>}[<font features>]%或
\setCJKsansfont[<font features>]{<font name>}
设置正文无衬线族的CJK字体,影响\sffamily
和\textsf
的字体。
\setCJKmonofont
\setCJKmonofont{<font name>}[<font features>]%或
\setCJKmonofont[<font features>]{<font name>}
设置正文等宽族的CJK字体,影响\ttfamily
和\texttt
的字体。
例1
下面的例子引用xeCJK宏包,CJKchecksingle
参数防止段落最后一行只有一个汉字;CJKnumber
参数自动载入另一个宏包CJKnumber
,提供\CJKnumber
命令把阿拉伯数字转换为中文数字。
\usepackage[CJKchecksingle,CJKnumber]{xeCJK}
\setCJKmainfont[BoldFont={Adobe Heiti Std},ItalicFont={Adobe Kaiti Std}]{Adobe Song Std}
\setCJKsansfont{Adobe Heiti Std}
\setCJKmonofont{Adobe Fangsong Std}
\punctstyle{hangmobanjiao}
\setCJKmainfont
命令设置来中文正文字体为宋体,它的两个参数BoldFont
和ItalicFont
分别设置来粗体为黑体,斜体为楷体。\setCJKsansfont
设置无衬线字体为黑体,\setCJKmonofont
设置等宽字体为仿宋。
而当我在VScode中运行这段代码却运行不了,我先逐行纠错:
从第一步调用宏包的时候开始报错:Option clash for package xeCJK.
查找来一番,发现是宏包冲突,其实在使用ctexart
文档类的时候已经默认调用ctex
宏包,说明这两个宏包冲突,然后我将文档类改为article
,当我改了之后又开始警告:
这次又回到上一篇blog中没有解决的历史遗留问题了,看来不把它解决掉,我是不会善罢甘休的。
警告⚠️:Fandol is being set as the default font for CJK text. (xeCJK) Please make sure it has been properly installed.
(高情商警告):Fandol是CJK文本的默认字体,请确保它已经安装了
(低情商警告):你是不是没得这个Fandol字体啊!
我在找了半天的字体也安装在字体册上可还是有报错哎。
设置中文字体指令
\setCJKfamilyfont{自定义的CJKfamily名称}{系统字体名称}
\newcommand{自定义指令名}{自定义的CJKfamily名称}
示例:
\setCJKfamilyfont{hwzs}{STZhongsong}
\newcommand{\stzs}{\CJKfamily{hwzs}}
\setCJKfamilyfont{heitij}{SimHei}
\newcommand{\heitij}{\CJKfamily{heitij}}
我在网站上下载的STZhongsong 字体和SimHei字体通过这个方式重新定义了命令。在正文的书写过程中直接用命令\stzs
和命令\heitij
表示即可。