LaTex中文字体学习笔记

73次阅读

共计 1704 个字符,预计需要花费 5 分钟才能阅读完成。

参考:LaTeX 入门系列之字体族

do not dive into design

不停试验代码,研究了一天字体,感觉还是不得其门,倒是这句话点醒了我。

考虑到拓展性,本打算直接使用 xeCJK 宏包,所以 ctex 很多特性没法用有些可惜。关于字体的完善,ctex 调用 xeCJK,xeCJK 调用 fontspec,实践中也会经常直接调用 fontspec 进行设置。
xeCJK 宏包在中文排版上需要一些特殊设置进行缩进,导言区需要添加满足中行首行缩进的需求。

\usepackage{indentfirst}% 设置缩进
\setlength{\parindent}{2em} % 也可在正文中非全局设置

1 粗体 textbf 与斜体 textit 仅对本身字体包含这两项属性的字体起作用,而中文字体仅有少数字体有加粗选项,例如宋体,xeCJK 加粗仍为宋体,但是 textit 已经设置为楷体了;ctex 宏包则将加粗设置为黑体,textit 同样设置为楷体。
另外,ctex 又在 win 下预配置了四种字体族:宋体,黑体,仿宋,楷体。

\documentclass{article}
\usepackage[heading=true]{ctex}% 添加 heading=true,使用中文版式
\begin{document}
我是宋体 Default,\textbf{我是黑体 Bold}\textit{我是楷体 Italian}
% 多空一行
{\songti 我是宋体 Default},{\heiti 我是黑体 Bold},{\kaishu 我是楷体 Italian},{\fangsong 我是仿宋}
\end{document}

如上述代码,将这两种实现方式放在一起进行对比,显示效果如图

此外,xeCJK 有伪斜体与伪粗体开关,在调用时可指定打开。

\usepackage[AutoFakeBold=true, AutoFakeSlant=true]{xeCJK}

等效命令:bfseries,itshape

2 另外一种方式是使用 fontspec 宏包设置字体。如果在 ctex 宏包中也需使用自定义字体,可添加命令参数。

\usepackage[UTF8, heading = true, fontset = none]{ctex}

\setmainfont{字体名} % 设置默认字体,如需中文需使用支持中文的字体
\setCJKmainfont{字体名}% 设置 CJK 默认字体
% 重新定义新的字体族命令:\newfontfamily< 命令 >[可选参数]{字体名}%ctex 宏包中已定义相关字体
\newCJKfontfamily< 命令 >[可选参数]{字体名}

形如 \newfontfamily\song{SimSun} % 正文中可使用 \song 指定字体

但是在导言区引入定义会导致,xeCJK 关于文档结构各级标题的字体设置全部丢失 -_-|||
查阅 xeCJK 文档可知,\newCJKfontfamily\setCJKfamilyfont\CJKfamily 的合并,然而在导言区使用\setCJKfamilyfont 依然造成全局字体改变;又,如使用 \newfontfamily,则正文中使用命令仅对英文起作用,中文字体不做改变。
因此结合文献以\newcommand 重新定义命令,在正文局部需要改变时调用字体命令,且以 {} 限制范围。

\newcommand{\yahei}{\setCJKfamilyfont{yahei}{Microsoft YaHei} \CJKfamily{yahei}}

如果使用 ctex 宏包,有些字体已经定义,就不需要重复定义了,也可以直接在导言区使用 newCJKfontfamily,搞不懂了。。。

3 字号设置以及本地化
参考 https://www.jianshu.com/p/b17…

\newcommand{\chuhao}{\fontsize{42pt}{\baselineskip}\selectfont}  % 字号设置,不确定 xeCJK 宏包定义 

另有命令 \fontspec{PMingLiU}\selectfont,尚未搞懂。。。字体设置就告一段落吧

正文完
 0