LaTex

关于编辑器的简单介绍

  • 编辑器编辑.tex 纯文本
  • 所谓 TeX 发行,指的是包括 TeX 系统的各种可执行程序,以及他们执行时需要的一些辅助程序和宏包文档的集合。
  • WinEdt 过于繁琐,很多功能用不上,反而给新手增加学习成本;
  • TeXworks 是 TeX Live 自带的编辑器,而 TeX Live 是跨平台的,各个操作系统都可以使用。

排版工具

  • TeXworks 为我们预设了若干排版工具(pdfTeX, pdfLaTeX, XeTeX, XeLaTeX 等),他们分别代表什么实在太过复杂并且也不是当前需要讲明白的。本文中需要用到的排版工具主要是 XeLaTeX,关于这些工具的介绍,可以参看后文。当你对 TeX 系统相当熟悉之后,也可以不适用 TeXworks 预设的工具,自己配置排版工具。
  • TeXworks 默认的排版工具是 pdfLaTeX,如果你希望更改这个默认值,可以在编辑 - 首选项 - 排版 - 处理工具 - 默认 中修改。

Hello, world!

    \documentclass{article}
    %这里是导言区
    \begin{document}
    Hello, world!
    \end{document}
  • 此处的第一行\documentclass{article}中包含了一个控制序列(或称命令/标记)。所谓控制序列,是以反斜杠\开头,以第一个空格或非字母 的字符结束的一串文字,他们并不被输出,但是他们会影响输出文档的效果。这里的控制序列是documentclass,它后面紧跟着的{article}代表这个控制序列有一个必要的参数,该参数的值为article. 这个控制序列的作用,是调用名为 “article” 的文档类。
  • 部分控制序列还有被方括号[]包括的可选参数。
  • 所谓文档类,即是 TeX 系统预设的(或是用户自定的)一些格式的集合。不同的文档类在输出效果上会有差别。
  • 其后出现了控制序列begin,这个控制序列总是与end成对出现。这两个控制序列以及他们中间的内容被称为“环境”;他们之后的第一个必要参数总是一致的,被称为环境名。
  • 只有在 “document” 环境中的内容,才会被正常输出到文档中去或是作为控制序列对文档产生影响。因此,在\end{document}之后插入任何内容都是无效的。
  • \begin{document}\documentclass{article}之间的部分被称为导言区。导言区中的控制序列,通常会影响到整个输出文档。

实现中英文混排新方法——使用 ctex 文档类

    \documentclass[UTF8]{ctexart}
    \begin{document}
    你好,world!
    \end{document}
  • 如果没有意外,你将会看到类似下图的输出结果。
  • 相较于之前的例子,这份代码只有细微的差异:
  • 新版 ctex 宏包和文档类的默认能够自动检测用户的操作系统,并为之配置合适的字库。对于 Windows 用户、Mac OS X 用户和 Linux 用户,都无需做任何配置,就能使用 ctex 宏包和文档类来排版中文。[2015-05-20 更新]

老方法——直接调用 xeCJK 宏包

    \documentclass{article}
    \usepackage{xeCJK}%调用 xeCJK 宏包
    \setCJKmainfont{SimSun}%设置 CJK 主字体为 SimSun (宋体)
    \begin{document}
    你好,world!
    \end{document}
  • 如果你的 TeX 系统提示找不到字体,请换用你的操作系统中可用的中文字体。关于如何寻找你的操作系统中可用的中文字体,请参考本章最后一小节。
  • 所谓的宏包,就是一系列控制序列的合集。这些控制序列太常用,以至于人们会觉得每次将他们写在导言区太过繁琐,于是将他们打包放在同一个文件中,成为所谓的宏包(台湾方面称之为“巨集套件”)。\usepackage{·}可以用来调用宏包。
  • \setCJKmainfont{·}是定义在 “xeCJK” 宏包中的控制序列,它可以用来设置 CJK 主字体
  • 请注意,TeX 系统对宏包名称和控制序列的大小写是敏感的

查看当前操作系统中的字体

  • 按下 + R;
  • 键入cmd, 回车。
  • 在系统命令行中输入如下命令:
  • fc-list :lang=zh-cn > C:\font.txt
  • 打开 C 盘根目录下的 C:\font.txt 纯文本文档,里面的内容就是你当前系统可用的全部中文字体,用sublime或vim打开
  • 其中的每一行,都代表着一个可用的字体。其形式如下:
  • <字体文件路径>: <字体标示名1>, <字体表示名2>:Style=<字体类型>
  • C:/WINDOWS/fonts/simsun.ttc: 宋体,SimSun:style=Regular
  • 出现了之前文档里调用的字体SimSun,此处表明该字体有两个表示名:宋体和SimSun,我们在\setCJKmainfont{·}中填入任意一个都有同样的效果。
  • 因此,如果之前的文档无法编译通过,请在你的操作系统字体中,选取一个自己喜欢的,将它的字体表示名填入到\setCJKmainfont{·}中去。

作者、标题、日期

  • 新方法:
    \documentclass[UTF8]{ctexart}
    \title{你好,world!}
    \author{Liam}
    \date{\today}
    \begin{document}
    \maketitle
    你好,world!
    \end{document}
  • 旧方法:
    \documentclass{article}
    %
    % 设置中文字体
    % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \usepackage[SlantFont,BoldFont,CJKchecksingle,CJKnumber]{xeCJK}
    \newcommand\fontnamehei{SimHei}%黑体
    \newcommand\fontnamesong{SimSun}%宋体
    \newcommand\fontnamekai{KaiTi_GB2312}%楷体
    \newcommand\fontnameyahei{Yahei Mono}%雅黑
    \defaultfontfeatures{Mapping=tex-text}
    \setCJKmainfont[BoldFont=\fontnamehei,ItalicFont=\fontnamekai]{\fontnamesong}
    \setCJKmonofont{\fontnameyahei}
    \setCJKsansfont[BoldFont=\fontnamehei]{\fontnameyahei}
    %
    % 设置标题、作者、日期
    % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \title{你好,world!}
    \author{Liam}
    \date{\today}
    \begin{document}
    \maketitle
    你好,world!
    \end{document}
  • 导言区复杂了很多,但和之前的文档主要的区别只有两处(新方法只有一处,此处第 2 条)。
    1. 深入定义了中文字体以及断行逻辑;
      • 调用xeCJK宏包的时候,添加了一些可选参数;
      • 使用\newcommand命令,将系统字体名映射为相应的命令,方便维护;
      • 在定义主字体的时候,用[]添加了一些可选参数,增强功能。
    2. 定义了 标题、作者、日期。
  • 在document环境中,除了原本的你好,world!,还多了一个控制序列maketitle。这个控制序列能将在导言区中定义的 标题、作者、日期 按照预定的格式展现出来。
  • 使用titling宏包可以修改上述默认格式。参考TeXdoc.

章节和段落

  • 新方法:
    \documentclass[UTF8]{ctexart}
    \title{你好,world!}
    \author{Liam}
    \date{\today}
    \begin{document}
    \maketitle
    \section{你好中国}
    中国在East Asia.
    \subsection{Hello Beijing}
    北京是capital of China.
    \subsubsection{Hello Dongcheng District}
    \paragraph{Tian'anmen Square}
    is in the center of Beijing
    \subparagraph{Chairman Mao}
    is in the center of 天安门广场。
    \subsection{Hello 山东}
    \paragraph{山东大学} is one of the best university in 山东。
    \end{document}
  • 旧方法:
    \documentclass{article}
    %
    % 设置中文字体
    % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \usepackage[SlantFont,BoldFont,CJKchecksingle,CJKnumber]{xeCJK}
    \newcommand\fontnamehei{SimHei}
    \newcommand\fontnamesong{SimSun}
    \newcommand\fontnamekai{KaiTi_GB2312}%KaiTi
    \newcommand\fontnameyahei{Yahei Mono}
    \defaultfontfeatures{Mapping=tex-text}
    \setCJKmainfont[BoldFont=\fontnamehei,ItalicFont=\fontnamekai]{\fontnamesong}
    \setCJKmonofont{\fontnameyahei}
    \setCJKsansfont[BoldFont=\fontnamehei]{\fontnameyahei}
    %
    % 设置标题、作者、日期
    % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \title{你好,world!}
    \author{Liam}
    \date{\today}
    \begin{document}
    \maketitle
    \section{你好中国}
    中国在East Asia.
    \subsection{Hello Beijing}
    北京是capital of China.
    \subsubsection{Hello Dongcheng District}
    \paragraph{Tian'anmen Square}
    is in the center of Beijing
    \subparagraph{Chairman Mao}
    is in the center of 天安门广场。
    \subsection{Hello 山东}
    \paragraph{山东大学} is one of the best university in 山东。
    \end{document}
  • 在文档类 article/ctexart 中,定义了五个控制序列来调整行文组织结构。他们分别是
  • \section{·}
  • \subsection{·}
  • \subsubsection{·}
  • \paragraph{·}
  • \subparagraph{·}
  • report/ctexrep中,还有\chapter{·};在文档类book/ctexbook中,还定义了\part{·}

插入目录

  • 在上一节的文档中,找到\maketitle,在它的下面插入控制序列\tableofcontents,保存并用 XeLaTeX 编译两次,观察效果:
  • 新方法:
    \documentclass[UTF8]{ctexart}
    \title{你好,world!}
    \author{Liam}
    \date{\today}
    \begin{document}
    \maketitle
    \tableofcontents
    \section{你好中国}
    中国在East Asia.
    \subsection{Hello Beijing}
    北京是capital of China.
    \subsubsection{Hello Dongcheng District}
    \paragraph{Tian'anmen Square}
    is in the center of Beijing
    \subparagraph{Chairman Mao}
    is in the center of 天安门广场。
    \subsection{Hello 山东}
    \paragraph{山东大学} is one of the best university in 山东。
    \end{document}
  • 旧方法:
    \documentclass{article}
    %
    % 设置中文字体
    % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \usepackage[SlantFont,BoldFont,CJKchecksingle,CJKnumber]{xeCJK}
    \newcommand\fontnamehei{SimHei}
    \newcommand\fontnamesong{SimSun}
    \newcommand\fontnamekai{KaiTi_GB2312}%KaiTi
    \newcommand\fontnameyahei{Yahei Mono}
    \defaultfontfeatures{Mapping=tex-text}
    \setCJKmainfont[BoldFont=\fontnamehei,ItalicFont=\fontnamekai]{\fontnamesong}
    \setCJKmonofont{\fontnameyahei}
    \setCJKsansfont[BoldFont=\fontnamehei]{\fontnameyahei}
    %
    % 设置标题、作者、日期
    % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \title{你好,world!}
    \author{Liam}
    \date{\today}
    \begin{document}
    \maketitle
    \tableofcontents
    \section{你好中国}
    中国在East Asia.
    中国在East Asia.
    \subsection{Hello Beijing}
    北京是capital of China.
    \subsubsection{Hello Dongcheng District}
    \paragraph{Tian'anmen Square}
    is in the center of Beijing
    \subparagraph{Chairman Mao}
    is in the center of 天安门广场。
    \subsection{Hello 山东}
    \paragraph{山东大学} is one of the best university in 山东。
    \end{document}
  • 试试交换\maketitle和\tableofcontents的顺序,看看会发生什么。
  • 请注意,在“你好中国”这一节中,两次“中国在East Asia.”中如果夹有一个空行,则输出却只有一个换行并没有空行。这是因为 LaTeX 将一个换行当做是一个简单的空格来处理,如果需要换行另起一段,则需要用两个换行(一个空行)来实现。

插入数学公式

  • 这部分的演示中,为了节省篇幅,将取消导言区中中文支持的部分。在实际使用中,你只需要将导言区中的相关部分加上,就可以同时使用中文,并编写数学公式了——这并不冲突。
    为了使用 AMS-LaTeX 提供的数学功能,我们需要在导言区加载amsmath宏包:
    \usepackage{amsmath}
数学模式
  • LaTeX 的数学模式有两种:行内模式(inline)和行间模式(display)。前者在正文的行文中,插入数学公式;后者独立排列单独成行。
    在行文中,使用 ... 可以插入行内公式,使用[ … ]可以插入行间公式,如果需要对行间公式进行编号,可以使用equation环境:
    \begin{equation}
    \end{equation}
  • 行内公式也可以使用(…)来插入,略嫌麻烦。无编号的行间公式也可以使用$$ … $$来插入,但是这样做会改变行文的默认行间距,不推荐。
上下标
  • 示例代码(请保存后,使用 XeLaTeX 编译,查看效果):
    \documentclass{article}
    %
    % 数学环境支持
    % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \usepackage{amsmath}
    \begin{document}
    Einstein 's $E=mc^2$.
    \[ E=mc^2. \]
    \begin{equation}
    E=mc^2.
    \end{equation}
    \end{document}
  • 值得一提的是,行内公式和行间公式对标点的要求是不同的。行内公式的标点,应该放在数学模式的限定符之外,而行间公式则应该放在数学模式限定符之内。
  • 在数学模式中,需要表示上标,可以使用^来实现(下标则是_)。它默认只作用于之后的一个字符,如果想对连续的几个字符起作用,请将这些字符用花括号{}括起来,例如:
    \[ z = r\cdot e^{2\pi i}. \]
根式与分式
  • 根式用\sqrt{·}来表示,分式用\frac{·}{·}来表示(第一个参数为分子,第二个为分母)。
  • 示例代码(请保存后,使用 XeLaTeX 编译,查看效果):
    \documentclass{article}
    %
    % 数学环境支持
    % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \usepackage{amsmath}
    \begin{document}
    $\sqrt{x}$, $\frac{1}{2}$.
    \[ \sqrt{x}, \]
    \[ \frac{1}{2}. \]
    \end{document}
  • 可以发现,在行间公式和行内公式中,分式的输出效果是有差异的。如果要强制行内模式的分式显示为行间模式的大小,可以使用\dfrac, 反之可以使用\tfrac
运算符
  • 一些小的运算符,可以在数学模式下直接输入;另一些需要用控制序列生成,如
    \[ \pm\; \times \; \div\; \cdot\; \cap\; \cup\;
    \geq\; \leq\; \neq\; \approx \; \equiv \]
  • 连加、连乘、极限、积分等大型运算符分别用\sum, \prod, \lim, \int生成。他们的上下标在行内公式中被压缩,以适应行高。我们可以用\limits\nolimits来强制显式地指定是否压缩这些上下标。例如:
    $ \sum_{i=1}^n i\quad \prod_{i=1}^n $
    $ \sum\limits _{i=1}^n i\quad \prod\limits _{i=1}^n $
    \[ \lim_{x\to0}x^2 \quad \int_a^b x^2 dx \]
    \[ \lim\nolimits _{x\to0}x^2\quad \int\nolimits_a^b x^2 dx \]
  • 多重积分可以使用\iint, \iiint, \iiiint, \idotsint 等命令输入。
    \[ \iint\quad \iiint\quad \iiiint\quad \idotsint \]
分隔符
  • 各种括号用(), [], {}, \langle\rangle等命令表示;注意花括号通常用来输入命令和环境的参数,所以在数学公式中它们前面要加\。因为 LaTeX 中|和|的应用过于随意,amsmath 宏包推荐用\lvert\rvert和\lVert\rVert取而代之
    为了调整这些分隔符的大小,amsmath宏包推荐使用\big, \Big, \bigg, \Bigg放在上述括号前面调整大小。
    \[ \Bigg(\bigg(\Big(\big((x)\big)\Big)\bigg)\Bigg) \]
    \[ \Bigg[\bigg[\Big[\big[[x]\big]\Big]\bigg]\Bigg] \]
    \[ \Bigg \{\bigg \{\Big \{\big \{\{x\}\big \}\Big \}\bigg \}\Bigg\} \]
    \[ \Bigg\langle\bigg\langle\Big\langle\big\langle\langle x
    \rangle\big\rangle\Big\rangle\bigg\rangle\Bigg\rangle \]
    \[ \Bigg\lvert\bigg\lvert\Big\lvert\big\lvert\lvert x
    \rvert\big\rvert\Big\rvert\bigg\rvert\Bigg\rvert \]
    \[ \Bigg\lVert\bigg\lVert\Big\lVert\big\lVert\lVert x
    \rVert\big\rVert\Big\rVert\bigg\rVert\Bigg\rVert \]
省略号
  • 省略号用\dots, \cdots, \vdots, \ddots 等命令表示。\dots 和\cdots的纵向位置不同,前者一般用于有下标的序列。
    \[ x_1,x_2,\dots ,x_n\quad 1,2,\cdots ,n\quad
    \vdots\quad \ddots \]
矩阵
  • amsmath 的pmatrix, bmatrix, Bmatrix, vmatrix, Vmatrix 等环境可以在矩阵两边加上各种分隔符。
    \[ \begin{pmatrix} a&b\\c&d \end{pmatrix} \quad
    \begin{bmatrix} a&b\\c&d \end{bmatrix} \quad
    \begin{Bmatrix} a&b\\c&d \end{Bmatrix} \quad
    \begin{vmatrix} a&b\\c&d \end{vmatrix} \quad
    \begin{Vmatrix} a&b\\c&d \end{Vmatrix} \]
  • 使用smallmatrix环境,可以生成行内公式的小矩阵。
    Marry has a little matrix $ ( \begin{smallmatrix} a&b\\c&d \end{smallmatrix} ) $.
多行公式
  • 有的公式特别长,我们需要手动为他们换行;有几个公式是一组,我们需要将他们放在一起;还有些类似分段函数,我们需要给它加上一个左边的花括号。
长公式
不对齐
  • 无须对齐的长公式可以使用multline环境。
    \begin{multline}
    x = a+b+c+{} \\
    d+e+f+g
    \end{multline}
  • 如果不需要编号,可以使用multiline*环境代替。
对齐

* 需要对齐的公式,可以使用aligned次环境来实现,它必须包含在数学环境之内。

    \[\begin{aligned}
    x ={}& a+b+c+{} \\
    &d+e+f+g
    \end{aligned}\]
公式组
  • 无需对齐的公式组可以使用gather环境,需要对齐的公式组可以使用align环境。他们都带有编号,如果不需要编号可以使用带星花的版本。
    \begin{gather}
    a = b+c+d \\
    x = y+z
    \end{gather}
    \begin{align}
    a &= b+c+d \\
    x &= y+z
    \end{align}
分段函数
  • 分段函数可以用cases次环境来实现,它必须包含在数学环境之内。
    \[ y=\ begin{cases}
    -x,\quad x\leq 0 \\
    x,\quad x>0
    \end{cases} \]

插入图片和表格

图片
  • 在 LaTeX 中插入图片,有很多种方式。最好用的应当属利用graphicx宏包提供的\includegraphics命令。比如你在你的 TeX 源文件同目录下,有名为 a.jpg 的图片,你可以用这样的方式将它插入到输出文档中:
    \documentclass{article}
    \usepackage{graphicx}
    \begin{document}
    \includegraphics{a.jpg}
    \end{document}
  • 图片可能很大,超过了输出文件的纸张大小,或者干脆就是你自己觉得输出的效果不爽。这时候你可以用\includegraphics控制序列的可选参数来控制。比如
    \includegraphics[width = .8\textwidth]{a.jpg}
  • 这样图片的宽度会被缩放至页面宽度的百分之八十,图片的总高度会按比例缩放。
  • \includegraphics控制序列还有若干其他的可选参数可供使用,一般并用不到。感兴趣的话,可以去查看该宏包的文档。
表格
  • tabular环境提供了最简单的表格功能。它用\hline命令表示横线,|表示竖线;用&来分列,用\来换行;每列可以采用居中、居左、居右等横向对齐方式,分别用l、c、r 来表示。
    \begin{tabular}{|l|c|r|}
     \hline
    操作系统& 发行版& 编辑器\\
     \hline
    Windows & MikTeX & TexMakerX \\
     \hline
    Unix/Linux & teTeX & Kile \\
     \hline
    Mac OS & MacTeX & TeXShop \\
     \hline
    通用& TeX Live & TeXworks \\
     \hline
    \end{tabular}
浮动体
  • 插图和表格通常需要占据大块空间,所以在文字处理软件中我们经常需要调整他们的位置。figure和table环境可以自动完成这样的任务;这种自动调整位置的环境称作浮动体(float)。我们以figure为例。
    \begin{figure}[htbp]
    \centering
    \includegraphics{a.jpg}
    \caption{有图有真相}
    \label{fig:myphoto}
    \end{figure}
  • “htbp” 选项用来指定插图的理想位置,这几个字母分别代表here, top, bottom, float page,也就是就这里、页顶、页尾、浮动页(专门放浮动体的单独页面) 。\centering用来使插图居中;\caption命令设置插图标题,LaTeX 会自动给浮动体的标题加上编号。注意\label应该放在标题之后。
  • 图片和表格的各种特殊效果,限于篇幅此处无法详叙。请查看最后一章推荐的文档。

版面设置

页边距
  • 设置页边距,推荐使用geometry宏包。可以在这里查看它的说明文档。
  • 比如我希望,将纸张的长度设置为20cm、宽度设置为15cm、左边距1cm、右边距2cm、上边距3cm、下边距4cm,可以在导言区加上这样几行:
    \usepackage{geometry}
    \geometry{papersize={20cm,15cm}}
    \geometry{left=1cm,right=2cm,top=3cm,bottom=4cm}
页眉页脚
  • 设置页眉页脚,推荐使用fancyhdr宏包。可以在这里查看它的说明文档。
  • 比如我希望,在页眉左边写上我的名字,中间写上今天的日期,右边写上我的电话;页脚的正中写上页码;页眉和正文直接有一道宽为0.4pt的横线分割,可以在导言区加上如下几行:
    \usepackage{fancyhdr}
    \pagestyle{fancy}
    \lhead{\author}
    \chead{\date}
    \rhead{152xxxxxxxx}
    \lfoot{}
    \cfoot{\thepage}
    \rfoot{}
    \renewcommand{\headrulewidth}{0.4pt}
    \renewcommand{\headwidth}{\textwidth}
    \renewcommand{\footrulewidth}{0pt}
首行缩进
  • 中国人写文章,习惯每一段的段首都空出两个中文汉字的长度。美国人没有这个习惯,他们每一小节的段首都顶格。为了解决这个问题,我们可以在导言区调用\usepackage{indentfirst}.
  • 就算是这样,首行缩进的长度,仍然不符合中国人的习惯。我们可以在导言区添加这样的控制序列\setlength{\parindent}{2.45em}来调整首行缩进的大小。这里的 2.45em 是中文小四号字大小两个中文字的长度
行间距
  • 我们可以通过setspace宏包提供的命令来调整行间距。比如在导言区添加如下内容,可以将行距设置为1.5倍:
    \usepackage{setspace}
    \onehalfspacing
  • 具体可以查看该宏包的文档。
段间距
  • 我们可以通过修改计数器\parskip的值来调整段间距。例如在导言区添加以下内容
    \addtolength{\parskip}{.4em}
  • 则可以在原有的基础上,增加段间距 0.4em. 如果需要减小段间距,只需将该数值改为负值即可。

TeX 家族

  • 带有 TeX 的词,仅仅是本文就已经提到了 TeX, LaTeX, XeLaTeX. 通常中国学生面对不了解意思的一群形近单词,都会有一种“本能的恐惧”(笑~)。
  • 因此,“大神们”在为新手介绍 TeX 的时候,如果互相争论 “XXTeX 比 YYTeX 好”或者是“XXTeX 的 YYTeX 如何如何”,往往会蹦出下面这些带有 TeX 的词汇:
  • TeX, pdfTeX, XeTeX, LuaTeX, LaTeX, pdfLaTeX, XeLaTeX …

TeX - LaTeX

  • TeX 是高德纳(Donald Ervin Knuth,1938年1月10日 –)教授愤世嫉俗(大雾;追求完美)做出来的排版引擎,同时也是该引擎使用的标记语言(Markup Lang)的名称。这里所谓的引擎,是指能够实现断行、分页等操作的程序(请注意这并不是定义);这里的标记语言,是指一种将控制命令和文本结合起来的格式,它的主体是其中的文本而控制命令则实现一些特殊效果(同样请注意这并不是定义)。
  • 而 LaTeX 则是 L. Lamport (1941年2月7日 – ) 教授开发的基于 TeX 的排版系统。实际上 LaTeX 利用 TeX 的控制命令,定义了许多新的控制命令并封装成一个可执行文件。这个可执行文件会去解释 LaTeX 新定义的命令成为 TeX 的控制命令,并最终交由 TeX 引擎进行排版。
  • 实际上,LaTeX 是基于一个叫做 plain TeX 的格式的。plain TeX 是高德纳教授为了方便用户,自己基于原始的 TeX 定义的格式,但实际上 plain TeX 的命令仍然十分晦涩。至于原始的 TeX 直接使用的人就更少了,因此 plain TeX 格式逐渐就成为了 TeX 格式的同义词,尽管他们事实上是不同的。
  • 因此在 TeX - LaTeX 组合中,
    1. 最终进行断行、分页等操作的,是 TeX 引擎;
    2. LaTeX 实际上是一个工具,它将用户按照它的格式编写的文档解释成 TeX 引擎能理解的形式并交付给 TeX 引擎处理,再将最终结果返回给用户。

pdfTeX - pdfLaTeX

  • TeX 系统生成的文件是 dvi 格式,虽然可以用其他程序将其转换为例如 pdf 等更为常见的格式,但是毕竟不方便。
  • dvi 格式是为了排版而产生的,它本身并不支持所谓的“交叉引用”,pdfTeX 直接输出 pdf 格式的文档,这也是 pdfTeX 相对 TeX 进步(易用性方面)的地方。
  • 为了解决这个问题,Hàn Thế Thành 博士在他的博士论文中提出了 pdfTeX 这个对 TeX 引擎的扩展。二者最主要的差别就是 pdfTeX 直接输出 pdf 格式文档,而 TeX 引擎则输出 dvi 格式的文档。
  • pdfLaTeX 这个程序的主要工作依旧是将 LaTeX 格式的文档进行解释,不过此次是将解释之后的结果交付给 pdfTeX 引擎处理。

XeTeX - XeLaTeX

  • 高德纳教授在实现 TeX 的当初并没有考虑到中日韩等字符的处理,而只支持 ASCII 字符。这并不是说中日韩字符就无法使用 TeX 引擎排版了,事实上 TeX 将每个字符用一个框包括起来(这被称为盒子)然后将一个个的盒子按照一定规则排列起来,因而 TeX 的算法理论上适用于任何字符。ASCII 字符简单理解,就是在半角模式下你的键盘能直接输出的字符。
  • 在 XeTeX 出现之前,为了能让 TeX 系统排版中文,国人曾使用了 天元、CCT、CJK 等手段处理中文。其中 天元和CCT 现在已经基本不用,CJK 因为使用时间长且效果相对较好,现在还有人使用。
  • 不同于 CJK 等方式使用 TeX 和 pdfTeX 这两个不直接支持 Unicode 字符的引擎,XeTeX 引擎直接支持 Unicode 字符。也就是说现在不使用 CJK 也能排版中日韩文的文档了,并且这种方式要比之前的方式更加优秀。
  • XeLaTeX 和 XeTeX 的关系与 pdfLaTeX 和 pdfTeX 的关系类似,这里不再赘述。

LuaTeX

  • LuaTeX 是正在开发完善的一个 TeX 引擎,相对它的前辈们还相当的不完善,这里不赘述。

CTeX - MiKTeX - TeX Live

  • 之前介绍了 TeX, LaTeX, pdfTeX, pdfLaTeX, XeTeX, XeLaTeX, LuaTeX 等,他们都是 TeX 家族的一部分。但是作为一个能够使用的 TeX 系统,仅仅有他们还是不够的。CTeX, MiKTeX, TeX Live 都是被称为“发行”的软件合集。他们包括了上述各种引擎的可执行程序,以及一些文档类、模板、字体文件、辅助程序等等。其中 CTeX 是建立在 MiKTeX 的基础之上的。

不同发行版对比

发行版WindowsMacLinux
MiKTex
TeXLive
CTex
proTeXt

总结

  • TeX - pdfTeX - XeTeX - LuaTeX 都是排版引擎,按照先进程度递增(LuaTeX 尚未完善)。
  • LaTeX 是一种格式,基于 TeX 格式定义了很多更方便使用的控制命令。上述四个引擎都有对应的程序将 LaTeX 格式解释成引擎能处理的内容。
  • CTeX, MiKTeX, TeX Live 都是 TeX 的发行,他们是许许多多东西的集合。
  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值