最开始接触Latex排版是从做ppt开始,所以一开始就与其他人的学习路线不同,但是这种奇葩的路线让自己对latex编译命令更为敏感。
首先介绍自己使用工具和环境:
* Tex 编译器:CTex
* 编辑器:Texmaker
错误排查
当在编译出现问题时,不要慌张,查看错误报告,仔细分析问题。
可以尝试下面两则通用的操作:
- 通过换用不用的编译命令
Texmaker 将一些编译命令集成到 一条命令中,可以在 Tools Toolbar 中进行选择(另外可以定制自己的集成编译指令)
在编译 beamer 模板时一直使用的 Xelatex 命令,但是在编译 article or report 时则应该使用 pdflatex 命令
- 删掉目录下的
.aux .log .out .toc
文件不同的编译命令之间切换时会出现一些不可预知的错误在日志、输出文件之中,这是可以尝试删掉目录下的相应文件,然后重新编译。
概念与原理
- 语言抽象层:
TeX 是一种宏语言。就像别的语言有库一样,TeX 语言有宏的集合。这些宏,就是用这个语言写出来的东西,供大家共用的。TeX 有个最基本的宏集合,与基础语言一起构成一种“格式”,就是 Plain TeX。基本的 TeX 语言和 Plain TeX 的宏,都是 Knuth 完成的。
后来有了 LaTeX,就是 Lamport TeX。LaTeX 也是宏的集合,也构成一种与 Plain TeX 不一样的格式。这种格式提供了不少方便的功能,并强调结构化的文档,因而很快风行起来。
一个语言是抽象的,不能运行就没有结果。
- 再来说软件层面:
tex
:Knuth 在设计这个语言的同时也给出了一个程序用来把 TeX 语言的代码转换为排版的结果——这个程序当然也叫 TeX。嗯,可以把这个程序看做编译器。直接运行
tex
命令(用小写字母表示你实际使用的命令),默认就是用 Plain TeX 这种格式进行排版。为示区别,我们可以把 Knuth 的这个 TeX 程序叫 Knuth TeX。tex
+编译选项:用 tex 加上一个选择格式的命令行编译选项,就可以改用 LaTeX 这种格式进行排版了。但这很麻烦,于是就把 tex 命令与对应编译选项合成为一个命令,叫 latex。简言之,latex 命令就是 tex 命令加一个选项的简写方式。
- ε-TeX:
Knuth TeX 这个程序有一些功能不好实现,后面就有人进行扩展,得到 ε-TeX 这个程序,一般写成 eTeX。eTeX 程序和 Knuth TeX 都是 TeX 语言的一个实现,eTeX 增加了少量的几个命令,但一般来说是没有太多区别的。
- pdfTeX:
Knuth TeX 输出的格式是 DVI(DeVice Independent)文件,但后来电子出版业和电子文档交换中常用的格式是 Adobe 公司开发的 PostScript 格式(PS)和 Portable Document Format 格式(PDF)。因此就需要有一些工具完成这样的转换,一些转换程序应运而生:Dvips(把 DVI 转换为 PS);DVIPDF、DVIPDFM、DVIPDFMx(把 DVI 转换为 PDF,可以认为后面的是前面的改进版)。
转换的过程令人不爽,于是就又有了 TeX 语言的又一个实现,pdfTeX。它会把 TeX 语言写的代码直接编译成 PDF 文件。当然,不难理解 pdftex 命令就是用 pdfTeX 这个程序和 Plain TeX 这个格式进行排版,而 pdflatex 这个命令就是用 pdfTeX 这个程序和 LaTeX 格式进行排版。不过 pdfTeX 程序也保留了输出 DVI 格式的能力。
- XeTeX:
时代在发展,多字节的编码渐渐代替 ASCII 成为主流。为了支持 Unicode 编码和直接访问操作系统字体,又出现了 TeX 语言的新的实现,即 XeTeX。作为一个现代的程序,XeTeX 也直接输出 PDF 文件(我们暂不去管它内部有格式转换的实现方式)。于是,不难理解 xetex 命令就是使用 XeTeX 程序以 Plain TeX 格式排版,而 xelatex 命令就是用 XeTeX 程序以 LaTeX 格式排版
- LuaTeX:
哦,人们的要求总是在发展,现在又想在 TeX 中嵌入其他语言进行更强有力的扩展了。于是 Lua 脚本语言和 TeX 语言的结合体,LuaTeX 应运而生。LuaTeX 程序也是 TeX 语言的一个完整的有扩展的实现。LuaTeX 支持 Unicode、系统字体和内嵌语言扩展,能直接输出 PDF 格式文件,也可以仍然输出 DVI 格式。
瞧,语言的脉络是简单的,但软件程序总是层出不穷
- 其他相关工具程序
最后说一下 BibTeX 和 MakeIndex。这两个都是与 TeX 相关联的工具程序,一般用在 LaTeX 格式上。BibTeX 处理 LaTeX 格式编译时输出的 .aux 文件,根据其中的引用,从文献数据库中提取生成参考文献列表;而 MakeIndex 处理 LaTeX 格式编译时输出的 .idx 文件(里面是索引条目),生成 .ind 文件(里面是排序整理好的索引条目)。
总结
下面将TeX, LaTeX, XeTeX, PdfTeX等基本概念做简单梳理
- TeX:一种宏语言。
- Plain Tex: Tex中的一个最基本的宏集合与TeX的基础语言构成的一种格式。
- LaTex: Tex中的一个宏集合,构成一种与 Plain TeX 不一样的格式。
- Tex程序:把Tex语言转换为排版的程序,也叫Tex。为区别,称这个 TeX 程序叫Knuth TeX。
- tex命令:Tex程序中的编译命令。tex命令默认用Plain TeX格式进行排版。也就是说tex命令后面默认跟的tex文件应该是用Plain Tex格式写的。
- latex命令:tex命令加上某一个选项使用,就会用LaTeX 格式进行排版,也就是说此时后面跟的tex文件应该是用LaTex格式写的。为方便,就把tex 命令与对应编译选项合成为一个命令,叫latex命令。
- ε-TeX 程序:Knuth TeX程序的一个扩展,也是一个程序,一般写成 eTeX。增加了少量的几个命令,但一般来说是与Knuth TeX程序没有太多区别的。
- 实现:在文中的意思就是指“程序”的意思。如文中:eTeX 程序和 Knuth TeX 都是TeX语言的一个实现(也就是说,eTeX 程序和 Knuth TeX 都是把TeX语言转换为排版的程序。程序作用于tex文本文件,把tex文件编译成dvi文件)。
- pdfTeX程序:Tex语言的又一个实现,也就是把Tex语言转换为排版的又一个程序。它会把 TeX 语言写的代码直接编译成 PDF 文件。
- pdftex命令:pdfTex程序中的命令,用来编译用Plain TeX格式写的tex文件。
- pdflatex命令:pdfTex程序中的命令,用来编译用LaTeX格式写的tex文件。
- XeTeX程序:TeX语言的新的实现,即把Tex语言转换为排版的一个新程序。支持Unicode 编码和直接访问操作系统字体。
- xetex命令:XeTeX程序中的命令,用来编译用Plain TeX格式写的tex文件。
- xelatex命令:XeTeX程序中的命令,用来编译用LaTeX格式写的tex文件。