Latex 环境下“中文字体”的使用

使用CTex自带编辑器WinEdt,在该环境下如何使用中文字体呢?作为一个菜鸟,折腾了好几天,最终基本解决了这个问题。现在整理下,分享给后来者。

对于使用中文字体,网上的很多教程是CCT、CJK和TY,不过,CCT已经不建议使用,而CJK、TY这些都已经过时了。而且这些方案中使用的中文字体就那么几种,想使用更多的字体,要单独去安装字体,无法直接调用系统安装的字体,这样无疑会很麻烦。最终网上找到的成熟方案是:XeLaTeX。

一、首先,从头讲起,基于LaTeX2对于字体的调用方式:

  1. {\字体名称 正文内容}

使用CTex宏包调用的实例:

1.新建文件,键入下面代码

  1. \documentclass{article}
  2. \usepackage{ctex}
  3. \begin{document}
  4. 中文宏包测试               \par % "\par"表示回车换号
  5. {\songti   这是宋体的样式} \par
  6. {\heiti    这是黑体的样式} \par
  7. {\fangsong 这是仿宋的样式} \par
  8. {\kaishu   这是楷书的样式} \par
  9. %{\lishu   这是隶书的样式} \par %CTeX的手册中是支持隶书和幼圆的,
  10. %{\youyuan 这是幼圆的样式} \par %但是不知是何原因编译有问题
  11. \end{document}

2.点击保存,这里这里保存类型建议以后一直选择“UTF-8”

注意;保存类型建议以后一直选择“UTF-8”,因为一方面xeCJK格式的汉字字体将无法显示,另一方面, GBK 编码是 ctex 宏包的缺省模式,使用 XeTEX 引擎的情况下总是内部使用 UTF-8 编码,所以不必使用这个选项,但这并不妨碍编写 GBK 编码的文档。

3.选择XeLaTeX编译方式,点击查看

4.效果如下图:

二、基于XeLaTeX的中文字体的使用

XeLaTeX可以直接调用系统中安装的字体,但是字体的名称并不是我们通常见到的那样,比如:华文隶书 在系统中是“STLiti”。而如何找到这种对于关系呢?

开始->运行->输入“CMD”,弹出命令窗口:输入:"fc-list",回车,就可以看到系统中所有安装字体的这种对于关系。当然,显示的原因,可能看不全,所有不如把它保存下来,方法是命令窗口中输入:“fc-list>>c:font.txt”(这里假设存入到D盘的font.txt文件下)。

注意笔者按照网上的两种方法:“fc-list:lang=zh-cn”(查看所有安装的中文字体)或者“fc-list:lang=en”(查看所有安装的英文字体),一直无法查看,在这点上折腾了很长时间。所以,如果你的电脑上可以按这两种方法查看那样最好,如果不能,不妨就用我的方法。当然,如果你搞清楚了其中的原因也欢迎留言。

现在有了这种对应关系,那么就可以继续了。在导言区对全局的字体进行设置:

然后便是对于其它字体的设置和使用,需要注意的是指令的名称是可以自己定义的,但是系统字体名称却一定要按照上面查出来了的字体名称

下面是一个完整的例子:

  1. \documentclass{article}
  2. \usepackage{ctex}
  3. \setmainfont{Times New Roman}%设置Times New Roman为默认的英文字体
  4. \setCJKmainfont{SimSun}      %设置宋体为默认的中文字体
  5. %设置要使用的英文字体
  6. %\newfontinstance{\courier}   {Courier}   %使用Courier字体
  7. \newfontinstance{\gramond}   {Garamond}   %使用Garamond字体
  8. %设置要使用的中文字体
  9. \setCJKfamilyfont{mhwxk}{STXingkai} %华文行楷
  10. \newcommand{\stxk}{\CJKfamily{mhwxk}}
  11. \setCJKfamilyfont{hwlsh}{STLiti} %华文隶书
  12. \newcommand{\sthwls}{\CJKfamily{hwlsh}}
  13. \begin{document}
  14. %{\courier This a Courier Style} \par
  15. {\gramond This a Garamond font style} \par
  16. {\stxk   这是华文行楷字体的式样} \par
  17. {\sthwls 这是华文隶书字体的式样} \par
  18. \end{document}

注意

1.以上面的程序代码为例,注释掉的部分是使用Courier字体,如果去掉注释,由于我的电脑上没有这样的字体,于是就出来了这样的情况:编译的时候没有错误,却无法生成PDF文件,进而也就无法查看,所以,出现编译没有错误,但是生成不了PDF文件时要考虑是不是本机没有这种字体。这一点一定一定要引起足够的重视!!!

2.对于系统中查到的字体名称,可能考虑到转义字符原因,有些是不能直接使用的,要把“\”去掉才能正确使用。

例如:系统中查到一种字体:“ FZXiaoBiaoSong\-B05S,方正小标宋简体”如果这样使用就是错误的:

  1. \setCJKfamilyfont{MyCJKfzxbs}{FZXiaoBiaoSong\-B05S} %方正小标宋简体
  2. \newcommand{\fzxbs}{\CJKfamily{MyCJKfzxbs}}

正确的使用方法是要去掉“\”的,下面是正确的示例,注意对比:

  1. \setCJKfamilyfont{MyCJKfzxbs}{FZXiaoBiaoSong-B05S} %方正小标宋简体
  2. \newcommand{\fzxbs}{\CJKfamily{MyCJKfzxbs}}

参考资料:

[1].在xeLaTeX和CTeX中使用本地系统字体的方法

[2].《CTeX宏包说明》

Latex 环境下“中文字体”的使用的更多相关文章

  1. Linux环境下中文字体乱码处理办法

    项目中包含了一项生成JPG图片的功能,该功能需要使用JAVA的Graphics2D动态生成图片中的文字,原来在Windows平台中没有发现问题,但是迁移至Linux平台后发现生成的中文变成了乱码. 百 ...

  2. 解决 Mac OS X Retina 屏幕显示环境下 jEdit 字体模糊的方法

    Mac OS X Retina 屏幕显示环境下,字体非常清晰.但是 jEdit 仍然很模糊,虽然 jEdit 用的是 Java,但这并不是理由.因为诸如 NetBeans 以及 IntelliJ ID ...

  3. matplotlib在MAC系统下中文字体显示问题

    最近想把部分python数据分析的代码从win系统迁移到MAC上,有部分图片上涉及中文显示,迁移到MAC上warning: UserWarning: findfont: Font family [u' ...

  4. Linux 环境下思源黑体字体与 Java 之间的兼容性问题的解决(补充说明)

    在前一篇随笔中,我讲了一下有关 Linux 环境下思源黑体与 Java 之间的兼容性问题,后来经过测试发现,默认安装的思源黑体字体同时包含简体字体和繁体字体,并且其对应的语言编码也是不同的.尝试着把繁 ...

  5. CentOS环境下中文显示乱码,vim和ls命令显示中文均为乱码的解决办法

    1.登陆linux系统打开操作终端之后,输入 echo $LANG可以查看当前使用的系统语言 2.查看是否有中文语言包可以在终端输入 locale命令,如有zh cn 表示已经安装了中文语言 3.如果 ...

  6. node.js express环境下中文需要注意的地方

    问题一: 最近在nuxt项目中开始着手把一些跨域的请求转移到express里,其实跟其他语言差不多,http对象发请求,接收请求都写得很顺畅.之前用的请求部分大多数是get请求,所以除了注意编码问题之 ...

  7. Fedora 24 Linux 环境下实现 Infinality 字体渲染增强及 Java 字体渲染改善的方法(修订)

    Fedora 24 Linux 桌面环境默认字体渲染引擎 freetype 及字体配置工具 fontconfig 采用的是未经优化的编译及设置,字体渲染效果比较差.而某些 Linux 发行版的桌面字体 ...

  8. Windows下的字体美化

    转自HJK的博客 许多人钟情于Mac很大一部分是因为Mac优雅的字体渲染,Windows原生的效果很难做得到,即便是开启了CleartType效果也不尽如人意.不论是微软本身的审美原因还是历史包袱,与 ...

  9. latex之在windows环境下能够在latex中使用中文

    今天要把前段时间的实验用英语先记录下来,自己就想根据原来会议的模版弄一个简易的页面(英语),突然想到之前用英文模板时是不能输入中文的,于是想着怎么在latex中输入中文,折腾了许久,终于成功了,现在分 ...

随机推荐

  1. Linux学习笔记之初级篇

    第一部分:[安装注意环节] 第二部分:[常用命令小试] 第三部分:[oracle的安装]

  2. Android ShareSDKQQ 第三方登录so easy?

    昨天群里有个群友看到我之前做的那个qq第三方登录怎么做的,于是乎思考了一下,还是决定写一篇博客记录下.事实上都不难的,事实上之前我又写到FaceBook的第三方登录不知道看下这Android集成Fac ...

  3. MVC模式下值的传递

    公司项目转用MVC开发,故学习总结一下mvc会用到的常用传值方法:       正如大家都熟悉的,MVC路由及运行机制是:       首先,Web 浏览器向服务器发送一条URL 请求,如http:/ ...

  4. kafka delete topic

    Don't think it is supported yet. Take a look at this JIRA tracking Delete Topic. For delete manually ...

  5. OpenCV图像处理篇之阈值操作函数

    阈值操作类型 这5种阈值操作类型保留opencv tutorials中的英文名称.依次为: Threshold Binary:即二值化,将大于阈值的灰度值设为最大灰度值.小于阈值的值设为0. Thre ...

  6. 【Linux】文件描述符与重定向

    重定向符号 符号 描述 > 输出重定向到一个文件或设备 覆盖原来的文件 >! 输出重定向到一个文件或设备 强制覆盖原来的文件 >> 输出重定向到一个文件或设备 追加原来的文件 ...

  7. C# 的Timer 在javascript中的实现--基于Typescript

    class Timer { //js 内置的timer对象 private _jsInnerTimerObj: any; private _enable: boolean; private _hand ...

  8. linux脚本加密shc

    linxu的shell脚本看下源码,都能明白含义.加密也是很关键的 01.安装shc加密 http://www.datsi.fi.upm.es/~frosal/sources/   ###下载源码 百 ...

  9. VC 线程间通信的三种方式

    1.使用全局变量(窗体不适用)     实现线程间通信的方法有很多,常用的主要是通过全局变量.自定义消息和事件对象等来实现的.其中又以对全局变量的使用最为简洁.该方法将全局变量作为线程监视的对象,并通 ...

  10. 深入PHP内核之函数和返回值

    1.关于返回值,PHP内核中使用了大量的宏来实现,我们先看一个函数 PHP_FUNCTION  宏的定义(Zend/zend_API.h) #define PHP_FUNCTION ZEND_FUNC ...