zoukankan      html  css  js  c++  java
  • CJK简介(转)

    CJK 简介

      CJK Werner Lemberg 的出色工作。CJK 是中文(Chinese)、日文(Japanese)、韩文(Korean)三国文字的缩写。顾名思义,它能够支持这三种文字。实际上,CJK 能够支持在 LaTeX 中使用包括中文、日文、韩文在内的多种亚洲双字节文字。

      与国内较为普遍使用的中文 LaTeX 扩展 CCT 相比较,CJK LaTeX 结合得更为紧密。LaTeX 输出的 DVI 文件就是标准的 DVI 文件,可以直接浏览而无须象 CCT 那样要先用 patchdvi 进行预处理。(CCT 是在 emTeX 上开发的,和 emTeX 结合的较好,但由于 emTeX 版本较老,无法使用一些 TeX LaTeX 的新功能,如用 pdfTeXpdfLaTeX 生成 PDF 文件,以及用 LaTeX2Html 将中文 LaTeX 文件转换为 HTML 文件)

      CJK 作为一个 LaTeX2e 宏包,其对字体的定义遵照 NFSS(新字体选择框架)。这样就无须对 DVI 文件做特殊的处理就可以直接在任何 DVI Viewer 中预览和打印,也可直接用 dvips 等工具进行转换。CJK 可以自定义多种字体,可以使用多种字库,包括 TrType 字库、Type1 字库等。由于使用的是轮廓字库,因而 CJK 生成的 PS 文件和 PDF 文件效果要好于 CCT

     

    安装

      CJK 安装起来比较困难的原因主要在于如何设置正确的字体和安装正确的字库。CJK 支持许多字库方式,这是它的一个优点,但同时也容易使一个新手迷惑。而且许多设置都必须手工完成,这要求你对计算机和 TeX 都比较了解。

      目前在 CJK 中常用的字库有 TrType Type1 两种。前者的安装相对简单,而且可以利用中文 Windows 中的字库,减少占用的硬盘空间。我们制作安装包 CJK Setup for Win32 可以自动完成这一部分的设置工作。

      如果你想使用 Type1 字库,就必须在生成 Type1 字库的同时生成相应的 tfmafm enc 文件,还有字体的 map 文件。Unix/Linux 下的工具 gbpfb (作者:陈向阳,gbpfb 可以在 TurboLinux 中文版中找到)可以完成这一部分工作。我们也提供了在 Windows 下使用的相应版本 gbkfonts (作者:energy)。gbkfonts 不仅能生成所需的文件,同时还将这些文件按照 CJK 所要求的目录方式放置好。你只需把整个目录拷贝到你的 localtexmf 目录下,然后将 map 文件的名字加入 dvips 的配置文件 config.ps 中即可。

      由于两种方式字库使用相同的文件名,因而容易造成冲突。建议不要同时使用。

     

    使用简介

      CJK 的使用比较简单。首先在文件的头部(\documentclass 之后)加上:

    \usepackage{CJK}

      然后在正文中(\begin{document} \end{document})需要使用中文的地方使用:

    \begin{CJK*}{GBK}{song}

    ……

    中文或者英文

    ……

    \end{CJK*}

     

    这样中间的中文部分就会以宋体来排版。常用的其他字体还有:fs(仿宋)、kai(楷体)、hei(黑体)、li(隶书)、you(幼圆)。命令中的 GBK 是指中文内码,还可以用 GB BIG5(繁体字),前提是相应的字库设置是正确的。CJK Setup for Win32中已经设置好了 GB GBK

    如果在中间想要改变中文字体,就可以使用:

    \CJKfamily{GBK}{fs}

    来改为仿宋字体。改变中文字体的大小使用和英文相同的命令,也就是说中文和它附近的英文大小始终都是一致的。

      以上所说都是针对使用 TrType 字库的。如果 Type1 字库生成时使用了 -c 参数,也就是说是 compact 模式的,那么用法是一样的。而 Type1 字库更常用的一种方式是不使用 -c 参数生成的,称作 pmC 模式。则相应的 CJK 命令中要加上 [pmC] 参数:

    \begin{CJK*}[pmC]{GB}{song}
            ……
            \end{CJK*}

     

    使用说明

     

    很多人被 LaTeX 的各种文件,字体搞的头昏脑胀(我就曾经是其中一个). 其实 LaTeX+CJK 处理汉字的过程很简单。是这样的: 首先你编辑了一个文件 example.tex,里面有如下内容:

    \documentclass{article}  \usepackage{CJK}  \begin{CJK}{GBK}{song}  \begin{document}  您  \end{CJK}  \end{document}  
    1. 用户在命令行敲入 "latex example.tex". 一个跟 "tex" 一模一样只不过叫做 "latex"的程序启动了。它其实就是 TeX, LaTeX 和 TeX 其实是同一个程序。在有些系统下 latex 是一个脚本,里面只有几行字。比如我的 Linux 版本就是这样:
      #!/bin/sh  test -f "`kpsewhich latex.fmt`" || fmtutil --byfmt latex  exec tex -fmt=latex "$@"  
    2. TeX 发现自己是用叫做 "latex" 的命令启动的。或者脚本里明显指明了需要"latex"格式,它就去读入一个宏包叫做 latex.fmt. 这个文件一般在 $TEXMF/web2c. 以后我们就进入了 LaTeX 的世界,看到了?LaTeX 只是 TeX 的一种特殊情况(一种“格式”)。所以如果你能明白 TeX, LaTeX 给你的很多条条框框你都可以不遵守。
    3. LaTeX 发现用户使用了 CJK 宏包,在 \begin{CJK}{GBK}{song} 时,CJK 宏包把从现在开始一直到 \end{CJK} 的内容里的中文都变成了一些奇怪的TeX命令。这些命令根据不同的汉字转换不同的字体。它发现“您”,它就会把字体设置为 gbksong51, 然后取里面的第115个字符。

      为了达到这个目的,它把我们的汉字“您”变成了 "\C19/song/m/n/10/51 s", \C19/song/m/n/10/51 表示用 GBK 编码(C19) 的 song 体,粗细为 medium(m), 而不是 bold, 形状为upright(n), 而不是 italic, 大小是 10pt, 子集号码 51. 这个描述会被 C19song.fd 这个字体描述文件映射为gbksong51. 因为 C19song.fd 里有这样一行:

      \DeclareFontShape{C19}{song}{m}{n}{<-> CJK * gbksong}{}  

      所以 "\C19/song/m/n/10/51" 这个命令就会把字体设置为 "gbksong51 at 10pt"(TeX术语). 后面接着一个"s", "s" 的 ASCII 码是 115, 正好是 “您” 在这个子集中的索引号。

    4. LaTeX 继续处理文档的其它部分,就象处理其它任何英语文件一样……最后生成了 dvi 文件。
    5. 用户用 dvips 生成 PostScript 文件。dvips 找到 config.ps 配置,读取里面的字体映射文件列表,列表里有一个文件叫做 cjk.map, 它就去读取 cjk.map. cjk.map 指出:gbksong51 这个字体的图像(glyph)应该从Type1字体文件 gbksong51.pfb 里得到…… dvips 把这些信息存到一张表里备用。
    6. dvips 开始读取 dvi 文件,发现里面要求使用 gbksong51 这个字体,并且输出一个 "s" 对应的字符。它就下载(download,PostScript术语) gbksong51.pfb 到生成的 PostScript 文件 example.ps, 然后在合适的位置放上对“您”索引: s. 现在你用一个文本编辑器,比如 VIM, 打开 example.ps 就可以看到里面有如下内容:
      %%BeginFont: SimSun51  %!FontType1-1.0: SimSun 2.10  %%Creator: ttf2pfb, $Id: ttf2pfb.c,v 1.2 2002/07/27 12:58:58 wy Exp $  %%CreationDate: Sun Jul 28 17:44:29 2002  %%VMusage: 030000 030000  ...............  %%Page: 1 1  TeXDict begin 1 0 bop 639 523 a Fb(s)1926 8991 y Fa(1)p  eop end  %%Trailer  ....  

      而你用 gsview 打开文件就看到了“您”。发现没有?"SimSun51" 就是插入Type1字体的开始处, 而"(s)" 就是说“输出字符串s”。这个字体里的"s"看起来就是“您”。而那个SimSun51,就是所谓的PostScript 字体名字。你的文档就是这样生成的。

      从这个分析你可以看出,TeX 在本质上处理汉字是没有任何问题的,因为经过 CJK 的转化,汉字被转成了和英文字符一样的“盒子”。我们只要按照 TeX 的规则来处理这些盒子就可以实现与英文完全同样的功能。

  • 相关阅读:
    ppa 安装gnome3
    Ubuntu 升级VisualBox后无法启动 Kernel driver not installed (rc=-1908)
    ubuntu 安装 n卡 驱动
    apt-get 介绍。
    linux流量查看工具 iftop
    Ubuntu防火墙 UFW 设置
    Linux Shell快捷键(基本是通用的)
    gnome3 shell快捷键
    day2 -- 字符串常用方法、列表、字典
    day1 -- Python变量、注释、格式化输出字符串、input、if、while、for
  • 原文地址:https://www.cnblogs.com/stucp/p/2852853.html
Copyright © 2011-2022 走看看