01_LaTeX的基本概念
的基本概念
本文主体内容来自一份 (不太) 简短的 LATEX2ε 介绍。
欢迎使用
概述
的优缺点
- 具有专业的排版输出能力,产生的文档看上去就像“印刷品”一样。
- 具有方便而强大的数学公式排版能力,无出其右者。
- 绝大多数时候,用户只需专注于一些组织文档结构的基础命令,无需(或很少)操心文档的版面设计。
- 很容易生成复杂的专业排版元素,如脚注、交叉引用、参考文献、目录等。
- 强大的可扩展性。世界各地的人开发了数以千计的
宏包用于补充和扩展 的功能。 - 能够促使用户写出结构良好的文档——而这也是
存在的初衷。 和 及相关软件是跨平台、免费、开源的。
- 入门门槛高。
- 不容易排查错误。
作为一个依靠编写代码工作的排版工具,其使用的宏语言比 C++ 或 Python 等语言在错误排查方面困难得多。它虽然能够提示错误,但不提供调试的机制,有时错误提示还很难理解。 - 不容易定制样式。
提供了一个基本上良好的样式,为了让用户不去关注样式而专注于文档结构。但如果想要改进 生成的文档样式则是十分困难的。 - 相比“所见即所得”的模式有一些不便,为了查看生成文档的效果,用户总要不停地编译。
Hello, World!
\documentclass{article}
\begin{document}
``Hello world!'' from \LaTeX.
\end{document}
这里首先介绍如何编译使用这份源代码,在后续小节中再介绍源代码的细节。你可以将这份源代码保存为helloworld.tex,而后编译。具体来说:
-
如果使用TeXworks 或TeXstudio 等编辑器,可以使用编辑器提供的“编译”或“排版”按钮。建议使用 pdfLaTeX 或 XeLaTeX 作为默认的编译方式。
-
如果使用命令行方式进行编译,打开终端,在源代码所在的目录下输入:
pdflatex helloworld
或者
xelatex helloworld
如果编译成功,可以在helloworld.tex 所在目录看到生成的helloworld.pdf 以及一些其它文件。
下面是排版中文的一个最简示例。编译的方式与上一份源代码相同,但需使用 XeLaTeX编译方式。
\documentclass{ctexart}
\begin{document}
“你好,世界!”来自\LaTeX{} 的问候。
\end{document}
命令和代码结构
命令和环境
-
反斜线和后面的一串字母,如
\{LaTeX}
。它们以任意非字母符号(空格、数字、标点等)为界限。 -
反斜线和后面的单个非字母符号,如
\$
。
注意 \{LaTeX}
命令可生成错落有致的 \{Latex}
或 \{LaTex}
什么都得不到,还会报错。
字母形式的
一些
\begin
和 \end
:
\begin{<environment name>}[<optional arguments>]{<mandatory arguments>}
...
\end{<environment name>}
有些命令(如 \bfseries
)会对其后所有内容产生作用。若要限制其作用范围,则需要使用分组。
源代码结构
\{documentclass}
命令作为开头,它指定了文档使用的文档类。document
环境当中的内容是文档正文。
在 \documentclass
和 \begin{document}
之间的位置称为导言区。
在导言区中常会使用 \{usepackage}
命令调用宏包,还会进行文档的全局设置。
\documentclass{...} % ... 为某文档类
% 导言区
\begin{document}
% 正文内容
\end{document}
% 此后内容会被忽略
宏包和文档类
文档类
文档类规定了 \documentclass
指定文档类:
\documentclass[<options>]{<class-name>}
其中article
、report
、book
,在其基础上派生的一些文档类,如支持中文排版的 ctexart
、ctexrep
、ctexbook
,或者有其它功能的文档类,如 moderncv
、beamer
等。
article | 文章格式的文档类,广泛用于科技论文、报告、说明文档等。 |
---|---|
report | 长篇报告格式的文档类,具有章节结构,用于综述、长篇论文、简单的书籍等。 |
book | 书籍文档类,包含章节结构和前言、正文、后记等结构。 |
proc | 基于article 文档类的一个简单的学术文档模板。 |
slides | 幻灯格式的文档类,使用无衬线字体。 |
minimal | 一个极其精简的文档类,只设定了纸张大小和基本字号,用作代码测试的最小工作示例。 |
可选参数 article
文档类排版文章,指定纸张为 A4 大小,基本字号为 11pt,双面排版:
\documentclass[11pt,twoside,a4paper]{article}
指定文档的基本字号。默认为 |
|
---|---|
指定纸张大小,默认为美式信纸( |
|
指定单面/双面排版。双面排版时,奇偶页的页眉页脚、页边距不同。article 和 report 默认为 book 默认为 |
|
指定单栏/双栏排版。默认为 |
|
指定新的一章 chapter 是在奇数页(右侧)开始,还是直接紧跟着上一页开始。report 默认为 book 默认为 article 无效。 |
|
指定横向排版。默认为纵向。 | |
指定标题命令 \maketitle 是否生成单独的标题页。article 默认为 report 和 book 默认为 |
|
令行间公式左对齐。默认为居中对齐。 | |
将公式编号放在左边。默认为右边。 | |
指定草稿/终稿模式。草稿模式下,断行不良(溢出)的地方会在行尾添加一个黑色方块;插图、超链接等功能也会受这一组选项影响,具体见后文。默认为 |
宏包
在使用
\usepackage[<options>]{<package-name>}
\usepackage
可以一次性调用多个宏包,在 <package-name>
中用逗号隔开。这种用法一般不要指定选项[4]。
% 一次性调用三个排版表格常用的宏包
\usepackage{tabularx, makecell, multirow}
在使用宏包和文档类之前,一定要首先确认它们是否安装在你的计算机中,否则 \usepackage
等命令会报错误。
宏包(包括前面所说的文档类)可能定义了许多命令和环境,或者修改了
texdoc <pkg-name>
其中 <pkg-name}>
是宏包或者文档类的名称。
用到的文件一览
除了源代码文件
每个宏包和文档类都是带特定扩展名的文件,除此之外也有一些文件出现于
宏包文件。宏包的名称与文件名一致。 | |
---|---|
文档类文件。文档类名称与文件名一致。 | |
参考文献数据库文件。 | |
用到的参考文献格式模板。 |
在编译过程中可能会生成相当多的辅助文件和日志。一些功能如交叉引用、参考文献、目录、索引等,需要先通过编译生成辅助文件,然后再次编译时读入辅助文件得到正确的结果,所以复杂的源代码可能要编译多次。
排版引擎生成的日志文件,供排查错误使用。 | |
---|---|
生成的主辅助文件,记录交叉引用、目录、参考文献的引用等。 | |
生成的目录记录文件。 | |
生成的图片目录记录文件。 | |
生成的表格目录记录文件。 | |
BibTeX生成的参考文献记录文件。 | |
BibTeX生成的日志文件。 | |
生成的供 makeindex 处理的索引记录文件。 |
|
makeindex 处理 |
|
makeindex 生成的日志文件。 |
|
hyperref 宏包生成的 PDF 书签记录文件。 |
文件的组织方式
当编写长篇文档时,例如当编写书籍、毕业论文时,单个源文件会使修改、校对变得十分困难。将源文件分割成若干个文件,例如将每章内容单独写在一个文件中,会大大简化修改和校对的工作。
\include
用来在源代码里插入文件:
\include{<filename>}
\include{chapters/file} % 相对路径
\include{/home/Bob/file} % *nix(包含 Linux、macOS)绝对路径
\include{D:/file} % Windows 绝对路径,用正斜线
值得注意的是 \include
在读入\input
命令,它纯粹是把文件里的内容插入:
\input{<filename>}
当导言区内容较多时,常常将其单独放置在一个 \input
命令插入。复杂的图、表、代码等也会用类似的手段处理。
\includeonly
命令来组织文件,用于导言区,指定只载入某些文件。导言区使用了 \{includeonly
后,正文中不在其列表范围的 \include
命令不会起效:
\includeonly{<filename1>,<filename2>,...}
需要注意的是,使用 \include
和 \input
命令载入的文件名最好不要加空格和特殊字符,也尽量避免使用中文名,否则很可能会出错。
最后介绍一个实用的工具宏包syntonly
。加载这个宏包后,在导言区使用 \syntaxonly
命令,可令编译后不生成 DVI 或者 PDF 文档,只排查错误,编译速度会快不少:
\usepackage{syntonly}
\syntaxonly
如果想生成文档,则用 % 注释掉 \syntaxonly
命令即可。
和 相关的术语和概念
在本章的最后有必要澄清几个概念:
- 引擎 全称为排版引擎,是编译源代码并生成文档的程序,如 pdfTeX、XeTeX等 。有时也称为编译器。
- 格式 是定义了一组命令的代码集。
就是最广泛应用的一个格式,高德纳本人还编写了一个简单的 plain TeX 格式,没有定义诸如\documentclass
和\section
等命令。 - 编译命令 是实际调用的、结合了引擎和格式的命令。如
命令是结合 XeTeX引擎和 格式的一个编译命令。
常见的引擎、格式和编译命令的关系总结于下表。
文档格式 | plain TeX 格式 | LaTeX 格式 | |
---|---|---|---|
TeX 引擎 | N/A | ||
pdfTeX 引擎 | |||
XeTeX 引擎 | |||
LuaTeX 引擎 |
在此介绍一下几个编译命令的基本特点:
虽然名为 |
|
---|---|
底层调用的引擎也是 pdfTeX,可以直接生成 |
|
底层调用的引擎是 XeTeX,支持 UTF-8 编码和对 TrueType/OpenType 字体的调用。 当前较为方便的中文排版解决方案基于 |
|
底层调用的引擎是 LuaTeX。这个引擎在pdfTeX 引擎基础上发展而来,除了支持 UTF-8 编码和对 TrueType/OpenType 字体的调用外,还支持通过 Lua 语言扩展 luatexja 宏包。 |
参考文献
[1] Partl H, Hyna I, Schlegl E. 一份 (不太) 简短的 LATEX2ε 介绍[J]. 2024. https://github.com/CTeX-org/lshort-zh-cn
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗