Latex中各种概念的区分
目录:
1 名词理解
latex(tex)本身其实并不复杂, 复杂的是各种不同的版本 + 中文环境 + 不同的操作系统版本 (尤其是linux下), 这几点加起来, 就让人头晕了. 比如:
- 各种名词让人头晕: tex, ctex, xetex, latex, xelatex, texlive, texpdf, pdflatex
- 各种中文字符集, 字体, 乱码, 编译报错问题.
在这里对一些概念试图加以区分. 对于不太想了解这些细节, 只想快速上手的人, 可以忽略本文直接移步:
(对于linux的用户, 如果想快速无障碍的上手, 强烈建议安装texlive-full latex-cjk-all这两个包, 这两个包很大, 不过正因如此, 包含的东西比较多, 所以网上与书上找到的各种例子, 基本上都能跑通. 所以这个空间换时间还是比较值得的.)
但是Mike推荐新手还是大概浏览一下本文, 哪怕有个笼统的印象也好.
下表来自(http://blog.csdn.net/dbzhang800/article/details/6820659)
类型 | 名词 | 解释 |
---|---|---|
引擎 | (Knuth)TeX | 真正的(原始的)TeX |
引擎 | ε-TeX | 相对于原始的TeX它提供了一种扩展模式 |
引擎 | pdfTeX | 它从tex文件不通过dvi文件直接生成pdf文件(开发者已经转向LuaTeX) |
引擎 | LuaTeX | 它使用Lua作为扩展语言, 对于LaTeX支持尚不完善? |
引擎 | XeTeX | 相对于原始的TeX, 主要增加了Unicode和 OpenType 的支持 |
------- | ---------------- | --------------------------------------------------------------- |
宏包 | plain TeX | 最古老的TeX宏包, 提供了一些最基本的命令 |
宏包 | AMSTeX | 是美国数学会提供的一个TeX宏包, 它添加了许多数学符号和数学字体 |
宏包 | LaTeX | 相对于PlainTeX, 它使得科技文档的排版更加直观和方便 |
宏包 | ConTeXt | 和LaTeX 相比, 它更加灵活和自由 |
------- | ---------------- | --------------------------------------------------------------- |
发行版 | TeX Live | 国际TeX用户组织TUG开发,支持不同的操作系统 |
发行版 | MiKTeX | Windows 下广泛使用的一个TeX发行版 |
发行版 | ConTeXt Minimals | 它包含了最新版本的 ConTeXt |
发行版 | teTeX | 一个Unix下的TeX发行版, 现在已经停止更新且并入TeXLive |
发行版 | fpTeX | 一个Windows的TeX发行版, 已不再更新 |
那么, 什么叫引擎, 宏包, 发行版呢?
打个不太恰当但是比较直观的比方:
(该列表为Mike个人的理解)
- Tex就相当于C/C++语言, 规定了基本的关键字, 语法等.
- 宏包就相当于C/C++各种库和宏函数等, 比如C++提供标准库, 但是有些人觉得不够用, 又开发了boost等库, 这就有点类似PlainTeX与LaTeX的关系.
- 引擎, 就有点类似于编译器(Mike: 或者有点类似于各种编程框架吧? 目前还不是理解的很清楚).
- 而发行版, 就有点类似于同是gnu编译器, 但是有Ubuntu下的, 有Fedora下的(额, 这个比方貌似不太恰当, 勉强帮助理解吧).
2 稍微具体一些的解释
2.1 PlainTeX(宏包)
原始的TeX已经有了一组宏包, 也就是Knuth所写的著名的Plain TeX(原始的TeX和Plain Tex都是<<The TeXbook>>
一书中介绍的内容).
2.2 LaTeX(宏包)
Tex中的一个宏包合, 构成一种与 Plain TeX 不一样的格式. PlainTeX很底层,不够方便, 直观, 于是Leslie Lamport写了另一组宏, 称为LaTeX, 主要是它版本配置和文中内容适度分开处理.
每一个LaTeX 命令实际上最后都会被转换解释成几个甚至上百个TeX 命令. 但是, 普通用户可以无需知道这中间的复杂联系. 就象编程的时候如果使用一些已经编译 好的函数库和模板可以使我们仅仅用几个命令就实现很多功能一样, LaTeX 根据人们排版文章的习惯, 定义了许多命令和模板, 通过这些命令和模板, 我们可以很快的得到漂亮的排版结果.
2.3 ctex(宏包)
ctex宏包提供了一个统一的中文LaTeX文档框架,底层支持CCT, CJK和xeCJK三种中文LaTeX系统.
- CCT 非常不推荐了
- CJK 这个? 应该在windows下工作还很不错
- xeCJK 比较推荐(该推荐来自: http://blog.csdn.net/dbzhang800/article/details/6820659)
ctex宏包提供了编写中文LaTeX文档常用的一些宏定义和命令.
主要文件包括ctexart.cls, ctexrep.cls, ctexbook.cls 和 ctex.sty, ctexcap.sty.
对于CJK与xeCJK的来龙去脉, 可以参考这个讨论: 知乎:如何评价xeCJK
2.4 pdfTeX(引擎)
它从tex文件不通过dvi文件直接生成pdf文件(开发者已经转向LuaTeX)
2.5 LuaTeX(引擎)
pdfTeX 的后继是LuaTEX, 这是一种把脚本语言 Lua 和 TeX 结合起来的程序.
2.6 XeTeX(引擎)
是一种使用Unicode的TeX排版引擎, 并支持一些现代字体技术, 例如 OpenType. 其作者和维护者是Jonathan Kew, 并以X11自由软件许可证发布. 它原生的支持Unicode, 并默认其输入文件为UTF-8编码. XeTeX可以在不进行额外配置的情况下直接使用操作系统中安装的字体, 因此可以直接利用OpenType, Graphite中的高级特性, 例如额外的字形, 花体, 合字, 可变的文本粗细等等.
2.7 XeLaTeX(引擎)
是使用LaTeX的排版引擎, 也有上述XeTeX的优点, 命令下直接使用 xelatex ***.tex
就会产生对应的PDF文件.
2.8 更多解释
如果想了解更多的来龙去脉, 请参考刘海洋老师的<<LaTeX入门>>
中的 "编译程序" 以及 "文字编码与 Unicode" 这两节. 该书作者好像是CTeX的负责人之一, 所以他写的书比较深入浅出, 尤其是对于这种历史沿革性的内容, 比网上找来的信息看着明白多了.
这里只给出一个简单的参考示意图, 表示他们的发展脉络:
3 Latex转pdf流程
原始的方式
latex dvips ps2pdf
*.tex ------> *.dvi ------> *.ps -------> *.pdf
dvipdfm(x)方式,少一个.ps 步骤
latex dvipdfm
*.tex ------> *.dvi --------> *.pdf
pdflatex或xelatex, 直接生成pdf
pdflatex
*.tex ---------> *.dvi