LaTeX的起源
LATEX 和 TEX 都是用于排版的语言。TEX 及其发展出的语言都是指令驱动的,用于生成 pdf 文件。这些语言的基础都在于宏控制序列,开发者可以通过编写代码来进行精确、高度自动化同时高度可定制的排版任务。无论是字体字号还是段落格式,随笔文集还是论文,都可以用 LATEX 中高度集成化的指令设计解决。此外,LATEX 可以自动为您的各种题注进行编号,并方便地在后文中引用,这样您就不需要在编号变动后一个个手动改动引用了,这也意味着出错的几率大大降低。
TEX 的出现很早,可追溯至 HTML 标记语言出现之前。LATEX 继承和发展了 TEX,可以简单地认为 TEX 相对“朴实无华”而 LATEX 内置了众多常用宏。对本文读者而言只需要知道一件事:LATEX相比一般的 TEX 更加易用,适合快速上手。本文接下来只讨论 LATEX 而不再讨论 TEX。
2.LaTeX的优势与劣势
LATEX 在排版工作上几乎无所不能。使用社区提供的宏包,它能完成几乎任何常见排版需求。对选择 LATEX 顾虑最大的人群恐怕是 Microsoft Office Word 的用。诚然 Markdown 和 HTML&CSS都可用于排版,但是 Markdown 和 TML&CSS 的业务还是主要集中于网络界面。Markdown 也可以做文档排版,但是就笔者的经验而言,Markdown 使用上虽然简易,但是很多自定义功能实现反而比 LATEX 复杂一些。而在离线程序文档中,Markdown 写就的 README 和 LATEX 就更没有什么
比较意义了。所以,笔者并不认为 Markdown 和 LATEX 有太多的业务重叠。也有读者可能会使用方正和 Adobe 的产品,但那些产品通常是收费的(当然,Microsoft Office 也是收费的。您也可以使用某些软件的免费版,但相比之下 LATEX 中不存在免费版比收费版更差的情况),而且主要面向专业的排版厂商,个人开发者使用那种体量的企业级产品实在是没有必要。我们这里主要阐述 LATEX 相比 Microsoft Office Word 的优劣。
相比于 Microsoft Office Word 的 GUI 为核心的设计,在 LATEX 下您一般不需要特别考虑把图片放在哪,LATEX 会尝试自己解决这件事。如果对它的工作不满意,也可以通过参数自行指定。相比 Word 下需要点来点去拖来拖去,LATEX 只需要您已经写好的代码就能得到最终结果,要修改效果也只需要简单地改写代码,不需要打开额外的属性页面。
LATEX 另一大亮点是集成包管理系统,只需要引入几个包敲几行代码就能生成漂亮的数学公式或是化学方程式,物理论文或是生物论文自然也可以。如果需要插图,LATEX 也有一些常见的绘图软件,只要需要的示意图不是太复杂,您就能用 LATEX 把它画出来。相比于传统讲义设计中繁琐的示意图绘制、公式插入和特殊符号插入,您在 LATEX 下只需要几行代码。当然,这些代码需要用户自行编写。
传统计算机工程领域讲义编写中,代码高亮常常是通过截图或第三方工具实现的。这一切在LATEX 社区提供的宏包面前都黯然失色。在 LATEX 下,您所需要的只是引入包,设置高亮格式,把代码复制进来。如果愿意,您甚至可以自己实现一门语言及其在 LATEX 下的高亮。哪怕拥有 yacc 工具的用户也需要自己编写代码才能实现这样的自定义语言高亮,但在 LATEX 下,用户只需要使用提供好的工具,甚至没有必要真的把这门语言实现出来。
然而,LATEX 是诞生于 CLI 时代的工具(当然也有 IDE,但底层仍然是 CLI),对于使用惯了Windows 提供的图形化操作的用户而言,LATEX 可能不是太美好。而且,LATEX 并不是所见即所得的工具,所以您需要不断改写和编译您的源码才能得到期望的文档。但是,如果您真的是本文所面向的计算机领域工程师,我有理由相信您是乐于折腾手头的工具和设备的 geek——否则恐怕不会选择这个行业。如果果真如此的话,有理由相信 LATEX 能成为您今后的最佳伴侣。
二、文档结构介绍 LaTeX代码文档主要分为两部分——导言区和编辑区,导言区主要用于设置相应的全局设置,编辑区则是文档内容的编写,代码示例如下:
% 导言区
\documentclass{article}
\usepackage{ctex} % 导入中文编写宏包
\usepackage{float} % 掌管各类浮动体的宏包
%文档编辑区
\begin{document}
% 进行文本的编辑
\end{document}
三、常见宏包介绍 LaTex实际上是以宏为基础的语言,所以严格而言,“包”在这里应当叫做宏包。宏以\def 命令定义,此外,\newenvironment、\newcommand 和\renewcommand 分别可以定义新环境、新宏和修改特定宏的作用。作为一篇简明教程,这里我们只进行“脚本小子”式的教学,讲述一些宏包的功能介绍,而略去关于宏本身的内容。
\usepackage{amsmath} % 提供了一系列功能强大的工具,用于编写复杂的数学公式和数学结构
\usepackage{amsthm} % 提供了定义和排版定理、引理、证明等数学结构的功能
\usepackage{ctex} % 为中文文档提供了完善的支持,包括中文字符的处理、中文文档类、章节标题格式等
\usepackage{ifthen} % 提供了条件判断命令,可以在文档中根据不同条件执行不同的操作。
\usepackage{titlesec} % 用于自定义和调整章节标题的格式和样式,包括字体、间距、对齐方式等。
\usepackage{titletoc} % 用于定制目录的样式和格式,包括添加额外的目录内容、修改目录标题样式等。
\usepackage{SIunits} % 提供了一套用于输入和排版科学单位的命令,以确保单位的一致性和标准化。
\usepackage{tikz} % 强大的绘图工具,可以绘制各种类型的图形、图表和图示,支持高度自定义。
\usepackage{extarrows} % 提供了一些额外的箭头符号,用于数学公式和图表中的指示和标记。
\usepackage{indentfirst} % 自动缩进文档中每个段落的第一行。
\usepackage{geometry} % 用于设置页面布局和页边距,可定制页面的大小、边距、页眉页脚等。
\usepackage{multirow} % 提供了在表格中创建跨行单元格的功能。
\usepackage{fancyhdr} % 用于自定义页面的页眉和页脚,可以添加页眉页脚内容和样式。
\usepackage{lastpage} % 提供了一个命令,用于获取文档的总页数,方便在文档中引用。
\usepackage{layout} % 显示当前页面布局的详细信息,包括页面尺寸、边距等。
\usepackage{listings} % 用于排版代码清单,支持多种编程语言的语法高亮和格式设置。
\usepackage{xcolor} % 用于设置文档中的颜色,支持各种颜色模型和色彩空间。
\usepackage{multicol} % 用于创建多栏布局,可以在文档中同时显示多列内容。
\usepackage{subcaption} % 用于支持子图和子表格,并提供了一些相关的命令和环境。
\usepackage{graphicx} % 用于插入和处理图片,支持多种图片格式,并提供了一些图片调整和处理的命令。
\usepackage{algorithm2e} % 用于排版算法和伪代码,提供了一些用于排版算法的命令和环境。
\usepackage{dirtree} % 用于绘制目录结构的树状图,方便显示文件和文件夹的组织结构。
\usepackage{menukeys} % 用于排版键盘快捷键和菜单,支持自定义快捷键的样式和格式。
\usepackage{fontspec} % 提供了对字体的高级控制功能,支持使用系统安装的字体,并提供了一些字体设置命令。
\usepackage[T3, OT2, T1]{fontenc} % 用于指定字体编码,影响文档中字符的显示,常用于支持特定字符集。
\usepackage[noenc]{tipa} % 提供了一些国际音标的支持,用于排版国际音标符号。
\usepackage{metalogo} % 用于排版各种 Logo,如 LaTeX、TeX 等。
\usepackage[colorlinks, hyperfootnotes = false]{hyperref} % 用于创建超链接,可以在文档中添加链接到网页、章节、图片等的交互式链接。
\usepackage{textgreek} % 提供了使用希腊字母的命令,方便在文档中输入希腊字母符号。
\usepackage{chemfig} % 用于绘制化学结构式,支持排版复杂的化学分子结构。
\usepackage[version = 4]{mhchem} % 用于排版化学方程式,提供了一套用于输入和排版化学式的命令和环境。
\usepackage{array} % 提供了增强的表格功能,包括更灵活的列格式和表格样式设置。
\usepackage{float}