\chapter{中文}

\section{字符集和编码}
\label{sec:encoding}

众所周知电脑内部采用二进制编码，因为它易于用电子电路实现。所有字符（包括字母、数字、符号、控制码等）在电脑内部都是用二进制表示的，字符集（Character Set）的二进制编码被称为字符编码（Character Encoding），有时人们也会混用这两个术语。

1963~年发布的~American Standard Code for Information Interchange（~ASCII）是最早出现的字符编码，它用~7~位（bit）表示了~$2^7=128$个字符，只能勉强覆盖英文字符。

美国人发明了电脑，英语被优先考虑是很自然的事情。随着电脑技术的传播，人们呼吁把字符编码扩充到~8~位也就是一个字节（byte），于是国际标准化组织（International Organization for Standardization，ISO）推出了~ISO 8859。$2^8=256$个字符显然也不能满足需要，所以~8859~被分为十几个部分，从~8859-1（西欧语言）、8859-2（中欧语言），直到~8859-16（东南欧语言），覆盖了大部分使用拉丁字母的语言文字。

在~ISO~标准完全定型之前，IBM~就有一系列自己的字符编码，他们称之为代码页（Code Page），其中著名的有~1981~年就被用于~IBM PC~的~437（扩展~ASCII）、850（西欧语言）、852（东欧语言）。IBM~代码页通常被用于控制台（Console）环境，也就是~MS-DOS~或~Unix Shell~那样的命令行环境。

微软将~IBM~代码页称为~OEM~代码页，自己定义的称为~ANSI~代码页，后者中著名的有1252（西欧语言）、1250（东欧语言）、936（GBK~简体中文）、950（Big5~繁体中文）、932（SJIS~日文）、949（EUC-KR~韩文）等。

1981~年，中国大陆推出了第一个自己的字符集标准~GB2312，它是一个~$94*94$~的表，包括~7445~个字符（含~6763~个汉字）。GB2312~通常采用双字节的EUC-CN编码，所以后者也常常被称为~GB2312~编码；其实~GB2312~还有另一种编码方式~HZ，只是不常用。GB2312~不包含朱镕基的“镕”字，政府、新闻、出版、印刷等行业和部门在使用中感到十分不便，于是它在~1993~年被扩展为~GBK，后者包括~21886~个字符（含~21003~个汉字），没有形成正式标准。2000~年发布的~GB18030~包含~70244~个字符（含~27533~个汉字），采用四字节编码。GB18030~之前还出现过一个~GB13000，没有形成气候。

1990~年ISO~推出了通用字符集（Universal Character Set，UCS），即~ISO 10646，意图一统江湖。它有两种编码：双字节的~UCS-2~和四字节的~UCS-4。

ISO~之外还有个希望一统江湖的组织：统一码联盟（The Unicode Consortium），它于~1991~年推出了~Unicode 1.0。后来两家组织意识到没必要做重复工作，于是开始合并双方的成果，携手奔小康。从~Unicode 2.0~开始，Unicode~采用了与~ISO 10646-1~相同的编码。

Unicode~主要有三种编码：UTF-8、UTF-16、UTF-32。UTF-8~使用一至四个~8~位编码。互联网工程任务组（Internet Engineering Task Force，~IETF）要求所有网络协议都支持~UTF-8，互联网电子邮件联盟（Internet Mail Consortium，IMC）也建议所有电子邮件软件都支持~UTF-8，所以它已成为互联网上的事实标准。UTF-16~用一或两个~16~位编码，基本上是~UCS-2~的超集，和~ASCII~不兼容。UTF-32~用一个~32~位编码，它是~UCS-4~的一个子集。

\section{中文解决方案}
\TeX~是基于单字节编码的，因为~Knuth~当初开发~\TeX~时没考虑那么远，也没有现成的标准可以借鉴。

\LaTeX~对中文的支持主要有两种方法：张林波\footnote{中科院计算数学所某实验室主任。}开发的~\href{ftp://ftp.cc.ac.cn/pub/cct/}{CCT}~和~Werner Lemberg\footnote{1968~年生于奥地利，从维也纳音乐学院获得作曲、指挥、钢琴、乐团管理、歌手教练等五个专业文凭，后自学中文和数学。曾任职于奥地利和德国多家剧院和乐团，现任德国科布伦茨某剧院指挥。}开发的~CJK~宏包。早期~CCT~比较流行，新的~CCT~也可以和~CJK~配合使用，网上可以找到的最后更新是~2003~年的。CJK~是当前主流，它不仅支持中日韩等东亚文字，还支持几十种其他不同语言的多种编码。

支持简体中文的~\LaTeX~发行版有吴凌云\footnote{中科院应用数学所研究员。}的~CTeX~和李树钧\footnote{德国哈根函授大学研究员。}的~ChinaTeX，繁体中文的有吴聪敏\footnote{台湾大学电机系学士，美国罗彻斯特大学经济学博士，现任台湾大学经济系教授。}、吴聪慧兄弟的~cwTeX~和蔡奇伟\footnote{美国犹他大学计算机博士，现任台湾静宜大学资讯工程系教授。}的~PUTeX。后面两个台湾的发行版包老师不熟悉，前面两个大陆的发行版都包含~MikTeX、CCT、CJK、WinEdt~等。

\section{CJK的使用}
CJK~的作者写的使用说明比较凌乱和晦涩，读者可以参阅李果正的《我的CJK》\citep{Lee_2004a}。

CJK~有两个基本宏包：\verb|CJK|~和~\verb|CJKutf8|，后者面向~UTF-8~编码。CJK~环境的一般使用方法如下：

\begin{code}
\usepackage{CJK(utf8)}
...
\begin{document}
\begin{CJK}{<encoding>}{<family>}
...
\end{CJK}
\end{document}
\end{code}

简体中文常用编码是~GBK~和~UTF8~。family~是指宋体、楷体、隶书等，具体引用要看电脑上安装了什么字体。麻烦的是~GBK~和~UTF8~字体不通用，也就是说每种编码需要自己的字体。CJK~自带的~UTF8~简体字体有~gbsn（宋体）和~gkai（楷体）。CTeX~提供的~GBK~字体有~song（宋体）、fs（仿宋）、kai（楷体）、hei（黑体）、li（隶书）、~you（幼圆）等。

注意使用~\verb|CJKutf8|~宏包时，\verb|CJK|~环境的编码最好是~UTF8，否则可能遭遇不测。

下面是一个简单的~GBK~示例和一个~UTF8~示例，注意用编辑器保存时要选则相应的编码格式，比如前者用~ANSI，后者用~UTF-8。
\begin{code}
\documentclass{article}
\usepackage{CJK}
\begin{document}
\begin{CJK}{GBK}{song}
这是一个CJK例子，使用了GBK编码和song字体。
\end{CJK}
\end{document}
\end{code}

\begin{code}
\documentclass{article}
\usepackage{CJKutf8}
\begin{document}
\begin{CJK}{UTF8}{gbsn}
这是一个CJK例子，使用了UTF-8编码和gbsn字体。
\end{CJK}
\end{document}
\end{code}

\bibliographystyle{unsrtnat}
\bibliography{reading}
\newpage
