环境:Windows+texstudio+texlive
xetex将使用你系统的字体,也就是说你不用自己去编译字体了。
增加字体设定宏包
-
在texlive的命令行下
使用$ fc-list :lang=zh-cn可以看到你的中文字体。
使用$ fc-list可以看到你的所有字体。 -
在D:\\Edit\\texlive2018\\texmf-dist\\tex\\xelatex\\zhfontcfg中创建一个“zhfontcfg.sty” 文件如下(没有zhfontcfg文件夹就自己创建):
% xetex/xelatex 字体设定宏包
\\ProvidesPackage{zhfontcfg}
\\usepackage{fontspec,xunicode}
\\defaultfontfeatures{Mapping=tex-text} %如果没有它,会有一些 tex 特殊字符无法正常使用,比如连字符。
% 中文断行
\\XeTeXlinebreaklocale \"zh\"
\\XeTeXlinebreakskip = 0pt plus 1pt minus 0.1pt
%将系统字体名映射为逻辑字体名称,主要是为了维护的方便
\\newcommand\\fontnamehei{Microsoft YaHei}
\\newcommand\\fontnamesong{SimSun}
\\newcommand\\fontnamekai{KaiTi}
\\newcommand\\fontnamemono{DejaVu Sans Mono}
\\newcommand\\fontnameroman{Times New Roman}
%设置文档正文字体为宋体
\\setmainfont[BoldFont=\\fontnamehei]{\\fontnamesong}
\\setsansfont[BoldFont=\\fontnamehei]{\\fontnamekai}
\\setmonofont{\\fontnamemono}
%楷体
\\newfontinstance\\KAI{\\fontnamekai}
\\newcommand{\\kai}[1]{{\\KAI #1}}
%黑体
\\newfontinstance\\HEI{\\fontnamehei}
\\newcommand{\\hei}[1]{{\\HEI #1}}
%英文
\\newfontinstance\\ENF{\\fontnameroman}
\\newcommand{\\en}[1]{\\,{\\ENF #1}\\,}
\\newcommand{\\EN}{\\,\\ENF\\,}
- 执行texhash(或mktexlsr )更新。一切ok.用xelatex编译,你的文档将不含任何乱码,包括书签,
中文字体的使用
简单的按照这个例子做就行了:
\\documentclass{article}
\\usepackage{zhfontcfg}
\\usepackage[color s, color=black]{hyperref}
%opening
\\ {latex多字体简易示例}
\\begin{document}
\\make
\\section{楷体}
\\kai{楷体}
\\section{黑体}
\\hei{黑体}
\\end{document}
推荐字体
一般使用的字体有三套。
一是在Linux下常用的文泉驿字体,但它不适合写正式的文档。
二是在网上下载Adobe的四套字体,分别是宋体、仿宋、黑体和楷体。
三是可以拷贝Window下的字体。但是这涉及到版权问题。如果确实想用,可以在 百度上搜索“方正楷体”、“方正宋体”,等等。
使用字体的方法如下:
- 先拷贝字体到C:\\Windows\\Fonts下的相应的子目录中,然后运行
fc-cache更新系统的字体缓存。 - 在xeCJK中,设置主字体是使用
\\setCJKmainfont命令(因为我们的CTeX会调 用xeCJK,因此可以使用xeCJK中的命令)。 - 具体的字体名字可以用
fc-list :zh-cn命令来查看。
CTeX和xeCJK的关系
二者都是宏包,但是,CTeX是一个上层的中文LaTeX宏包。它的下层是可选的,可 以支持xeCJK、CJK,甚至更老的CCT宏包。对于不同的下层宏包它进行不同的设 置。xeCJK完全可以脱离CTeX使用,但是这样你虽然不用担心字体,同样也不能享 受到CTeX的中文版式。
其他设置
-
如果你的系统中没有CTeX要求的全套六种字体,则一定要在\\usepackage{ctex} 的选项中加上adobefonts。
这样一来CTeX会用相应的Adobe字体去代替它要求的六套字体。不然有时会出现 找不到字体的现象,尤其是使用特殊字体的时候,比如在verbtim环境中。 -
一般情况下,中文文档中是不使用斜体的。因此在CTeX调用xeCJK时,默认是不使用斜体的,所以你就算在文档中使用\\textsl{},最终也不会产生任何斜体效果。
如果你真的要用,就要修改/ctex/engine/ctex-xecjk-engine.def6中 的一行:
\\RequirePackage[BoldFont,normalindentfirst]{xeCJK}
改为:
\\RequirePackage[BoldFont,slantfont,normalindentfirst]{xeCJK}
使用CTeX的两种方法
第一种是直接使用CTeX的文档类。
\\documentclass[adobefonts]{ctexart}
第二种是使用CTeX包。
\\usepackage[adobefonts]{ctex}
二者的区别是:当通过\\usepackage来使用CTeX包时,产生的仍然是”CONTENTS”、”INDEX”,而不是“目录”、“索引”。
当然,如果要用其他类作为文档类,就必须使用第二种方式了,最典型就是 用beamer类做幻灯片的时候了。
这时,如果要使用中文的“目录”、“摘要”等样式,可以使用这两条命 令:
\\renewcommand*\\contentsname{目录}
\\renewcommand*\\abstractname{摘要}
还有一个更折腾的方法。修改一下ctex/ctex.sty文件,在其中添加一 句
\\input{ctex-caption.def}
这样就一直保持中文的名称了。
继续阅读与本文标签相同的文章
浅析三防平板在仓储管理方面的应用及成效
5G来了!三大运营商明日统一开启商用计划
-
AIoT入门:用虚拟设备体验物联网平台设备上云&设备数据存储
2026-05-18栏目: 教程
-
基于宜搭的“企业报销流程”实践案例
2026-05-18栏目: 教程
-
计算的旋律—阿里云视觉语言的探索
2026-05-18栏目: 教程
-
数据库实例性能调优利器-Performance Insights最佳实践
2026-05-18栏目: 教程
-
[集合]Collection源码解析(1)
2026-05-18栏目: 教程
