我们知道Latex一般用CJK和CTEX宏包支持中文编辑,CJK和CTEX的默认编码是GBK,而windows下的默然编码就是GBK,因此CJK和CTEX不需要特殊配置就可以直接支持中文Latex编译,只需要用GBK编码保存文件即可。但是如果把文件的字符编码换成现在更加普遍的utf-8的话,应该怎么操作呢?在这里有3种方式可以使用。

1、CJKutf8

CJK有两个基本宏包:CJK和CJKutf8,其中后者面向utf-8编码,其一般使用方法如下:

\usepackage{CJKutf8}
\begin{document}
\begin{CJK}{UTF8}{<font>}
...
\end{CJK}
\end{document}

font为简体中文字体,CJK自带的utf-8简体字体有gbsn(宋体)和gkai(楷体)。以下代码是一个简单的例子(一定要将tex文件保存成utf-8格式):

%test.tex
\documentclass{article}
\usepackage{CJKutf8}
\begin{document}
\begin{CJK}{UTF8}{gbsn}
这是一个CJKutf8的例子,使用的字体是gbsn。
\end{CJK}
\end{document}

用pdflatex编译tex文件,即可得到输出结果。

2、CTEX的UTF8选项

上面的CJKutf8只提供了两种字体,可选择的余地太小,我们可以直接用UTF8选项使CTEX支持utf-8编码,利用CTEX丰富的字体和中文设置可以更好地编辑Latex中文文本,其语法格式为:

\documentclass[UTF8]{article}
\usepackage{CTEX}
\begin{document}
...
\end{document}

或者,直接使用ctexart

\documentclass[UTF8]{ctexart}
\begin{document}
...
\end{document}

以下代码是一个简单的例子(同样把tex文件保存成utf-8格式):

% ctex_test.tex
\documentclass[UTF8]{article}
\usepackage{CTEX}
\begin{document}
这是一个CTEX的utf-8编码例子,{\kaishu 这里是楷体显示},{\songti 这里是宋体显示},{\heiti 这里是黑体显示},{\fangsong 这里是仿宋显示},{\lishu 这里是隶书显示},{\youyuan 这里是幼圆显示}。
\end{document}

用pdflatex编译tex文件:pdflate ctex_test.tex,即可得到如下输出结果,

3、xelatex编译

XeTeX是一种使用Unicode的TeX排版引擎,它原生的支持Unicode,并默认其输入文件为utf-8编码。XeTeX可以在不进行额外配置的情况下直接使用操作系统中安装的字体。XeLaTeX是使用LaTeX的排版引擎,也有上述XeTeX的优点,命令下直接使用xelatex ***.tex就会产生对应的PDF文件。以下是一个简单的xelatex编译ctex的例子(同样把tex文件保存成utf-8格式):

% xelatex_test.tex
\documentclass{article}
\usepackage{CTEX}
\begin{document}
这是一个CTEX的utf-8编码例子,{\kaishu 这里是楷体显示},{\songti 这里是宋体显示},{\heiti 这里是黑体显示},{\fangsong 这里是仿宋显示}。
\end{document}

明眼的同学一下就发现了,这货跟上面第2条中ctex的代码相比,就少了一个UTF8选项啊!额,表面看是这样的,但是如果如果直接把xelatex_test.tex用pdflatex编译,系统就会报错。这是因为不加UTF8选项,pdflatex默然按照GBK编码处理tex文件,而这个文件我们是用utf-8编码的,这样就会造成解码失败。这里直接用xelatex编译,就会编译成功,因为xelatex的默认输入文件是utf-8编码。切换到tex文件所在目录,直接用xelatex编译tex文件:xelatex xelatex_test.tex,即可得到如下输出结果,

Latex中文utf-8编码的三种方式的更多相关文章

  1. JAVA实现Base64编码的三种方式

    摘要: Javabase64编码的三种方式   有如下三种方式: 方式一:commons-codec.jar Java代码  1. String base64String="whuang12 ...

  2. 【整理】Linux下中文检索引擎coreseek4安装,以及PHP使用sphinx的三种方式(sphinxapi,sphinx的php扩展,SphinxSe作为mysql存储引擎)

          一,软件准备 coreseek4.1 (包含coreseek测试版和mmseg最新版本,以及测试数据包[内置中文分词与搜索.单字切分.mysql数据源.python数据源.RT实时索引等测 ...

  3. spring配置datasource三种方式及具体信息

    1.使用org.springframework.jdbc.datasource.DriverManagerDataSource说明:DriverManagerDataSource建立连接是只要有连接就 ...

  4. 三种方式解决你的js加载乱码

    第一种方式——编码统一 我们以前觉得出现乱码的原因是因为编码不统一,就是因为我们设置编码统一之后,就解决了问题,所以,让html和js的编码统一,是最简单的一个乱码解决方式,原因是什么,是因为,如果你 ...

  5. 头像截图上传三种方式之一(一个简单易用的flash插件)(asp.net版本)

    flash中有版权声明,不适合商业开发.这是官网地址:http://www.hdfu.net/ 本文参考了http://blog.csdn.net/yafei450225664/article/det ...

  6. vue+element ui项目总结点(一)select、Cascader级联选择器、encodeURI、decodeURI转码解码、mockjs用法、路由懒加载三种方式

    不多说上代码: <template> <div class="hello"> <h1>{{ msg }}</h1> <p> ...

  7. Python实现微信支付(三种方式)

    Python实现微信支付(三种方式) 关注公众号"轻松学编程"了解更多. 如果需要python SDk源码,可以加我微信[1257309054] 在文末有二维码. 一.准备环境 1 ...

  8. iOS字体加载三种方式

    静态加载 动态加载 动态下载苹果提供的多种字体 其他 打印出当前所有可用的字体 检查某字体是否已经下载 这是一篇很简短的文章,介绍了 iOS 自定义字体加载的三种方式. 静态加载 这个可以说是最简单最 ...

  9. PHP的学习--连接MySQL的三种方式

    记录一下PHP连接MySQL的三种方式. 先mock一下数据,可以执行一下sql. /*创建数据库*/ CREATE DATABASE IF NOT EXISTS `test`; /*选择数据库*/ ...

随机推荐

  1. PowerDesigner P M F 的意思

    M:表示强制非空:P:是否为主键:D:是否在模型中显示.gerenate:表示是否作为表生成

  2. php之快速入门学习-14(php-for循环)

    PHP 循环 - For 循环 循环执行代码块指定的次数,或者当指定的条件为真时循环执行代码块. for 循环 for 循环用于您预先知道脚本需要运行的次数的情况. 语法 for (初始值; 条件; ...

  3. flume hdfs一些简单配置记忆

    ############################################ # producer config ##################################### ...

  4. 【Qt】splitter

    一段简单的切割窗体的程序: <span style="font-size:18px;">#include "mainwindow.h" #inclu ...

  5. MySQL 数据库几种类型

    关系数据库(MySQL.Oracle.SQL Server.DB2.Postgres)键-值存储数据库(Riak和Redis)面向列的数据库(HBase) 面向文档的数据库(MongoDB 和Couc ...

  6. Gulp构建前端自动化工作流之:常用插件介绍及使用

    在对Gulp有了一个初步的了解之后,我们开始构建一个较为完整的Gulp开发环境. 本文主要分为6个段落: 1. 构建项目目录结构(Directory Structure Build) 2. 插件介绍及 ...

  7. javascript ActiveX 获取ip和MAC

    <HTML><HEAD><TITLE>WMI Scripting HTML</TITLE> <META http-equiv=Content-Ty ...

  8. Nginx随笔

    1.用于代理与反代理,处理大量请求的工具. 2.主要有三大模块:handle.upstream.过滤模块.handle用于在nginx内部接到请求并进行处理的状况:upstream用于需要nginx接 ...

  9. MVC Linq动态排序

    在nuget 中searh System.Linq.Dynamic 安装对应的版本, 这样都可以使用了 var orderExpression = string.Format("{0} {1 ...

  10. 赵雅智_android多线程下载带进度条

    progressBar说明 在某些操作的进度中的可视指示器,为用户呈现操作的进度,还它有一个次要的进度条,用来显示中间进度,如在流媒体播放的缓冲区的进度. 一个进度条也可不确定其进度.在不确定模式下, ...