Chinaunix首页 | 论坛 | 博客
  • 博客访问: 399771
  • 博文数量: 76
  • 博客积分: 3016
  • 博客等级: 中校
  • 技术积分: 782
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-27 12:05
文章分类

全部博文(76)

文章存档

2017年(1)

2015年(1)

2009年(2)

2008年(28)

2007年(44)

我的朋友

分类: LINUX

2008-09-28 21:03:25

之所以要写下这份东西,原因是这个问题浪费了我好几个小时!!
系统环境
Debian stable
en_US.UTF8

一、错误再现和分析
在此环境下,编辑一个 tex 输入文件,使用中文 CJK 宏包,并选用 GBK/GB 字符集。

\documentclass[a4paper,12pt]{article}

\usepackage{CJK}

\begin{document}

\begin{CJK*}{GB}{gbsn}

你好!

\end{CJK*}

\end{document}


然后保存退出,用 pdflatex GB_sample.tex 一下,会发现系统报错,说什么“未定义的字体”之类(当然原文是英文的)。
出现这一错误的原因是,系统环境是 en_US.UTF8,因此编辑文件时所用的字符都默认为 UTF-8 字符集
中的文字,而不是 GBK 字符。因此用 pdflatex 想要得到正确的 pdf 文件是不可能的!

二、解决之道
知道了产生错误的原因,就可以很容易地解决它了。一共有两种方法可以解决这个问题。

法1.把文件中的字符从 UTF-8 转换成 gb2312 就可以了。使用的工具是 iconv,这个工具大多数 Linux 发行版都有的。

iconv -f utf8 -t gb2312 GB_sample.tex > test.tex

pdflatex test.tex


这样就能得到正确的 pdf 文件

法2.直接使用 CJKutf8 宏包。由于我的环境是 en_US.UTF8 的环境,所以用 CJKutf8 是最适合我的。这样就免去了再进行编码转化的麻烦。
而且如果你的 latex 中需要出现一点繁体的话,用这个宏包就再好不过了。

范例:

\documentclass[a4paper,12pt]{article}

\usepackage{CJKutf8}

\begin{document}

\begin{CJK*}{UTF8}{gbsn}

你好!

\CJKfamily{bsmi}

中國!

\end{CJK*}

\end{document}



然后保存为 UTF8_sample.tex,再用 pdflatex UTF8_sample.tex 就可以得到正确的 pdf 文件了。
而且 pdf 文件中,还能看到繁体中文。

在默认安装 latex-cjk 的情况下,latex 中只有四个免费的中文字体可以用,分别是
gbsn(简体宋)、gkai(简体楷)、bsmi(繁体宋)、bkai(繁体楷)
如果想得到黑体输出之类的话,就要自己添加字体了。这个我以后有空会研究一下的,网上也有方法,有兴趣的话可以自己先用 google 搜索着看看。

三、写在最后
总体来讲,我个人觉得繁体字的显示效果比简体字好看多了。

  • \begin{CJK} 和 \begin{CJK*} 的差异
来自 /usr/share/doc/latex-cjk-common/CJK.txt

{CJK} 环境下,中文字符后面会自动加上空格和 newline(换行符),
而 {CJK*} 环境则不会这么做。
这两种环境,可以用

\CJKspace      CJK*---->CJK
\CJKnospace    CJK----->CJK*

来临时切换。一般推荐使用 CJK* 环境。否则在排版一些比较复杂的文档,比如数学公式时,可能会出现莫名其妙的错误。

  • \CJKtilde
这个用于把‘~’的定义从一个不可打断的空格变为一个 CJK 字符的 1/4 大小的空格。这样就能在中文字符之间插入英文字符或者其它非中文字符,而又不会引起中文字体的变形、错位等情形。尤其是在 \hbox 这种命令中成为重要。
在 BibTex 中,要用‘{~}’代替‘~’。
用 \standardtilde 可以让‘~’恢复原来的定义。不过一般而言没有必要这么做的。你可以用 \nbs(non-breakabel space,LaTex 命令 \nonbreakspace 的缩写)来生成一个不可打断的空格。

我的意见是,一定要在开头使用上 \CJKtilde,这样把英文放在两个‘~’之间。用‘~’来代替原来想要输入的空格,
如:

“你好~China~,这样在中英文混排时,就不至于出现字符错位之类的问题。”

主要参考
/usr/share/doc/latex-cjk-common/

阅读(4203) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~