pdflatex编译多语言latex文档的方法
关键词:latex,pdflatex,inputenc,fontenc,cjk,cjkutf8,zhmetrics
利用多语言latex文档,不是什么新鲜事。在xetex等原生支持unicode编码的引擎流行之前,它就已经是经常遇到的问题。
在当前的情况下,利用xelatex等编译器编译多语言文档已经很常见,方法也很简单。具体的方法可以参考:
![LaTeX技巧909:在 LaTeX 中输出多国语言](http://www.latexstudio.net/archives/10839)
习惯了使用xelatex之后,突然遇到要用pdflatex编译latex文档,不经包含多种西语,而且还要加入中文,发现是个麻烦事。
对于西语来说,用好inputenc和fontenc两个宏包基本能够解决,但要加入中文会遇到一些新的问题,本来西语编译的好好的,加入中文后就变了样,大量出错。之前知道在使用pdflatex编译中文的时期,CJK宏包是一个主要的处理方式,加入后仍然存在问题。
下面要介绍的就是这样一个示例,原来有英文文档夹杂另一种西语。使用了inputenc后,使用pdflatex编译完全没有问题。但加入中文后就存在问题了。下面用简化例子来说明:
```
\documentclass{article}
%\usepackage{ucs}
%\usepackage{CJK}
\usepackage{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{ctex}
\begin{document}
English text
Du côté de chez Swann
中文文本
%\begin{CJK}{UTF8}{hei}
%中文文本
%\end{CJK}
\end{document}
```
该例子,中文用ctex处理,采用xelatex编译没有问题。文档是utf-8编码,这种情况下fontenc,inputenc有没有存在没有关系。
但是要使用pdflatex编译的话,继续使用ctex就会出现乱码。
使用cjk宏包后仍然出现问题,搜索texexchange后发现对于utf编码的文档,需要使用cjkutf8。编译后的确没有问题,然后换成cjk仍然没有问题,发现差异主要在字体family上。于是再去找寻原理,把以前用的pdflatex中文字体相关的内容都去翻出来看了看,最后发现前人早已把所有的问题都解决了,我们只要能用就行了。
结合刘海洋的回帖,Yue Wang和Lingyun Wu的zhmetrics等,问题解决如下,直接上代码最直观:
```
\documentclass{article}
%\usepackage{ctex} %对于xelatex编译
\usepackage[encapsulated]{CJK}%可以与下一句替换
%\usepackage{CJKutf8}
%\usepackage{ucs}
%\usepackage{fontenc}
\usepackage[utf8]{inputenc}
%\AtBeginDvi{\input{zhwinfonts}} %对于先编译dvi的latex或者pdflatex
\input{zhwinfonts} %对于先编译dvi的latex或者pdflatex,与前面一句可以替换
\begin{document}
English text
Du côté de chez Swann
%中文文本
%\begin{CJK}{UTF8}{gbsn}%下面这些语句都可以替换
%\begin{CJK}{UTF8}{bsmi}%繁体
%\begin{CJK}{UTF8}{zhsong}
%\begin{CJK}{UTF8}{zhhei}
%\begin{CJK}{UTF8}{zhkai}
%\begin{CJK}{UTF8}{zhfs}
%\begin{CJK}{UTF8}{zhli}
\begin{CJK}{UTF8}{zhyou}
%\begin{CJK}{UTF8}{}
中文文本
\end{CJK}
\end{document}
```
参考资料:
1. http://www.latexstudio.net/archives/10839
2. https://tex.stackexchange.com/questions/165197/russian-and-chinese-in-the-same-document
3. https://tex.stackexchange.com/questions/17611/how-does-one-type-chinese-in-latex/17637#17637
4. zhmetrics:
5. gbsnu
6. cjk.txt
7. cjkutf8.txt