半小时学会 LaTeX
这个入门教程不要求你有任何 LaTeX 基础, 但我们的目标很简单粗暴:看完之后,你不仅能写出人生第一份 LaTeX 文档, 还会对接下来的 LaTeX 深造之路,有足够的底气和信心——不再一脸懵逼,而是“我上我也行”。
什么是 LaTeX
(念作“雷-泰赫”或者“拉-泰克”,你怎么顺嘴怎么来)是一款用来排版专业文档的利器。但得提前打个招呼:它的工作方式,和你以前用过的那些 Word 啊、WPS 啊、LibreOffice 啊,完全不是一个路数。
传统的文档工具是“所见即所得”(WYSIWYG),你看到啥就写啥,点点鼠标加个粗、换个颜色、美其名曰排版。而 LaTeX 是“所想即所得”,你写的是一份纯文本文件,靠插入一些神奇的 LaTeX 命令,告诉系统你想要啥效果,最终交给 TeX 引擎来处理。
等你敲完代码,按下「编译」按钮,电脑就会把这份“带魔法的纯文本”变成一份排版精致、印出来都能直接投期刊的 PDF 文档。你只负责写内容,格式美不美、有多专业,全交给 LaTeX 和它背后的 TeX 引擎去操心。
一句话:你动脑子,电脑出好活。
它从哪来?为什么值得信任?
话说回 1978 年,美国斯坦福大学有位计算机科学家,叫 Donald Knuth(唐纳德·克努特),具体情况可自行谷歌,在这里你只需要知道此公是大神中的大神。
他写了一本旷世奇书《计算机程序设计艺术》,结果发现——当时没有任何排版系统能把这本书排得像样。 他气不过,干脆自己撸了一套排版引擎:TeX,从底层指令到字间距算法,精确得变态。
但 TeX 太强,也太“底层”,普通人用起来很崩溃。于是后来另一位大神——Leslie Lamport,在 TeX 之上封装了一层更友好的指令体系, 这就是我们今天用的 LaTeX(“Lamport + TeX”)。
所以你可以把它 理解成这样:
- TeX 是内核,LaTeX 是操作系统
- TeX 负责让每一页字都美得像艺术品
- LaTeX 负责让我们普通人能写出这样的艺术品
经过 40 多年的发展,LaTeX 已经被全世界的科研人员、工程师、数学家、期刊编辑部、大学出版社广泛采用。 你看到的顶刊论文、博士论文、学术书籍、科技讲义,大概率都是用 LaTeX 写的。它不是“新潮”,恰恰是最老派也最可靠的技术之一。
- 最新稳定版本:
v3.141592653
(2021年1月)- TeX 的版本号一直在逼近圆周率 π(比如 3.14159265…),但永远不会超过它。作者 Donald Knuth 说这是为了致敬数学之美,也象征这个系统已经“无限接近完美”了。
- 他还立下规矩:自己去世后,TeX 的版本号将最终定格为 π,不再更动。
- 而 LaTeX 的版本号呢,直接按时间来命名,比如 2024-06-01,主打一个稳定和纪实。
所以别人家的版本号是“我们还有很多要改的”,而 LaTeX 的版本号,是在说“我已经尽可能地写对了”。就,很理工科浪漫。
为什么要学习 LaTeX
关于要不要学 LaTeX,其实可以摆出一大堆支持和反对的理由,但说到底,这事儿就跟吃不吃香菜一样,是你自己的选择——看你习惯什么、喜欢什么、以及你对排版的要求有多高。
当然,如果你非要让我站个队,那我毫不犹豫站在 LaTeX 这边,原因如下:
- ✅ 它可以排版极其复杂的数学公式、表格和各种理工科硬核内容,轻轻松松搞定那些 Word 一碰就炸的东西;
- ✅ 它对脚注、交叉引用、参考文献管理这些“琐碎但不能错”的东西,简直是强到变态;
- ✅ 像目录、术语表、图表清单这些又臭又长的结构,LaTeX 也能一键生成,完全不费脑;
- ✅ 更别说,它本质上是可编程的系统,能装插件、能扩展,几千个免费包随便挑,想怎么定制就怎么来,什么“公司定制模板”、“期刊指定格式”全都能拿下。
一句话总结:LaTeX 给了你对文档排版几乎极致的控制权,印出来那叫一个“专业范儿”。 当然,它也有短板,比如那种“杂志风格”“图文乱飞”的页面,它就没那么擅长——那种场合你还是该用 InDesign 就用 InDesign,别硬来。
LaTeX 另一个特别香的优点,是它把“内容”跟“样式”分得特别清楚。你写好内容,想换个外观?换模板就行,不用一顿鼠标点到手抽筋。
你甚至可以预先写一个样式文件,定义好你自己的文档规范,以后所有类似的文章都能用这个“母版”一键生成, 这就是为什么很多学术期刊会提供 LaTeX 模板:统一格式、统一投稿流程,省事儿省心。
LoongTeX 上就有一个“模板天团 ”级别的模板库,上千种模板,从科研论文、技术报告、学术书籍,到简历、演示文稿一应俱全。 你只需要打开模板,新建一个项目,就可以直接开写——别担心格式的事儿,专心把内容写好就行。
总之,如果你是一个追求写作体验和专业排版效果的人,那 LaTeX 真的值得你认真尝试一下。用上了,你可能会想说一句:“😝我汤姆怎么才发现这玩意儿。”
编写你的第一个LATEX作品
第一步,咱们得先整一个新的 LaTeX 项目。
你可以在自己电脑上新建一个 .tex
文件,当然,图省事的话,直接在 LoongTeX 上开新项目也行。
咱们就从一个最简单、能跑起来的例子开始——点开就能在 LoongTeX 里跑, 别犹豫,先上车。
\documentclass{article}
\begin{document}
First document. This is a simple example, with no
extra parameters or packages included.
\end{document}
这个例子会生成下面这样的 PDF 文件:
你会发现 LaTeX 很贴心地帮你把段落首行缩进了,排版这事儿它全权代劳。我们接下来来拆一下这段代码里到底发生了什么。
第一行 \documentclass{article}
,意思是:这是一篇文章类型的文档。这个“类”定义了整篇文档的大致外观。
不同的内容,用的“类”也不一样——比如写简历你就不能用这个,要选专门的 cv
类;写学术论文就可以用标准的 article
类;
写书?用 book
;写报告?用 report
。LaTeX 世界里的“类”多得很,想看全套?
去 CTAN(一个叫“Comprehensive TeX Archive Network”的地方)挖宝吧,官方又全又靠谱。
设置好文档类型后,正文内容就写在 \begin{document}
和 \end{document}
之间。
你可以把例子打开,随便改点文字,然后点击 LoongTeX 上的「Recompile」按钮——它就会自动帮你排好版、生成 PDF。
体验跟写 Word 不一样,它更像是一个“严谨的排版机器”,但一旦习惯,会上瘾。
看不明白也没关系,这里有个短视频,点一下直接演示给你看。
todo:这里是一个视频
在 LoongTeX 里,任何项目都可以设置成“边写边编译”。 只要点一下“Recompile(重新编译)”按钮旁边那个小箭头, 然后把 “Auto Compile(自动编译)” 打开——就像下面这个截图里演示的那样。 从此告别手动点点点,专心写就完了。
todo: 这里是一张图片
刚刚我们学会了怎么往文档里加内容,接下来该整点“门面工程”了:给你的文档起个像样的标题。 要做到这一点,我们得稍微聊一下—— LaTeX 里一个听起来有点唬人但其实很简单的东西:导言区(preamble)。
文档的导言区(Preamble)
上面的截图展示了 LoongTeX 是如何把 LaTeX 文档保存为一个叫 main.tex
的文件的。.tex
是写 LaTeX 的标准后缀,大家都这么叫,别问为什么,行业惯例。
在前面的例子里,我们是在 \begin{document}
之后开始写正文内容的。
但其实,在这之前的所有内容,都属于 LaTeX 文档的“幕后配置区”——导言区(preamble),说白了就是整篇文档的“开场设定”。
在导言区里你要干什么?简单说,就是定调子:
- 用
\documentclass
告诉 LaTeX 你要写的是个什么类型的文 档(比如文章、报告、幻灯片); - 设置文档语言;
- 加载你需要的各种功能包(这玩意儿就像是给 Word 安装插件,后面我们会细讲);
- 还有各种配置项,能调的都在这儿调。
如果你想从最精简的配置开始,一份最基本的导言区可能长这样:
\documentclass[12pt, letterpaper]{article}
\usepackage{graphicx}
其中这行代码:
\documentclass[12pt, letterpaper]{article}
意思是啥?一句话:这是在告诉 LaTeX,“我要写一篇文章(article 类型),字号用 12pt,纸张用美国标准信纸(letterpaper)”。
这两个参数是写在中括号里的,多个参数之间用英文逗号隔开,是专门用来个性化配置这个 article 类型文档的。就像你点外卖,article 是主菜,12pt 和 letterpaper 是加辣和不要香菜。
具体来看这俩参数干了什么:
12pt
:把默认字体大小调到 12pt,比默认的 10pt 大一圈,适合眼睛不太好或者老板要求字号大的场景;letterpaper
:设置纸张大小为美国人常用的信纸(8.5 x 11 英寸),当然你也可以选a4paper
(国标)或者legalpaper
(更长一点的纸)。
字体大小还能选啥?常见的就 9pt、10pt、11pt、12pt,没特别指定的话,默认是 10pt。
如果你想深入了解页面尺寸和页边距这些问题,建议去看看我们的页面设置和边距配置那一篇,非常实用,适合强迫症患者深度掌握。
加载功能包:让 LaTeX 更能打
这一行:
\usepackage{graphicx}
是个典型例子,意思是“加载一个叫 graphicx
的外部功能包”。
这个包有啥用?简单粗暴:让 LaTeX 支持插图。没有它,你别说插图了,连个图片都识别不了——就像原始人写论文。
LaTeX 的功能很多都是靠“包”来扩展的,想了解更多怎么找包、怎么用包,去看看我们那篇《LaTeX 功能包指南》,不看你会后悔。
设置标题、作者、日期:文档的基本礼貌
要给你的文档加上标题、作者和日期,只需要在导言区(注意,不是在正文里)再写三行代码,分别是:
-
\title{My first LaTeX document}
:文章标题,写点像样的,不要“Untitled 1”那种丢人玩意儿。 -
\author{Hubert Farnsworth}
:作者名字写这儿。如果你想在下面加个脚注感谢赞助商、导师或者老板,可以用\thanks{}
。\thanks{Funded by the LoongTeX team.}
:就是这个,放在作者名字后面,大括号里写你想说的话。LaTeX 会自动加个上标 + 脚注,优雅又专业,适合在论文里“致谢一下”。
-
\date{August 2022}
:日期你可以自己填,也可以用\today
,每次编译的时候自动变成今天,适合懒人、完美主义者,还有最后一秒才交稿的夜猫子。
把这几行加进去之后,你的导言区大概就长这样了:
\documentclass[12pt, letterpaper]{article}
\title{My first LaTeX document}
\author{Hubert Farnsworth\thanks{Funded by the LoongTeX team.}}
\date{August 2022}
想让标题、作者和日期真正“印”到页面上,只需要在正文里加一句: \maketitle
。
\begin{document}
\maketitle
We have now added a title, author and date to our first \LaTeX{} document!
\end{document}
现在,导言区和正文部分已经拼齐了,你手上就有了一份完整可用的 LaTeX 文档,直接扔进 LoongTeX 就能跑起来——开箱即用,零配置上手。
\documentclass[12pt, letterpaper]{article}
\title{My first LaTeX document}
\author{Hubert Farnsworth\thanks{Funded by the Overleaf team.}}
\date{August 2022}
\begin{document}
\maketitle
We have now added a title, author and date to our first \LaTeX{} document!
\end{document}
这个例子的输出结果如下:
添加注释
LaTeX 其实可以看作是一种“专注于排版的编程语言”。既然是“写代码”,那就有个通用的好习惯——加注释。
LaTeX 里的注释,不会出现在排版结果中,对最终文档没有半点影响。它的作用就跟你写代码时的注释一样:可以记 “to do” 清单、解释复杂的宏命令,或者调试时暂时屏蔽某段内容,防止出事。
那怎么写注释?一句话:在行首加个 %
就行了。
比如下面这段代码,就是活生生的例子:只要有 %
的行,全都会被 LaTeX 忽略掉,连看都不看一眼,像老实人不理朋友圈广告一样。
\documentclass[12pt, letterpaper]{article}
\title{My first LaTeX document}
\author{Hubert Farnsworth\thanks{Funded by the Overleaf team.}}
\date{August 2022}
\begin{document}
\maketitle
We have now added a title, author and date to our first \LaTeX{} document!
% This line here is a comment. It will not be typeset in the document.
\end{document}
这个例子的输出,和之前那段没有注释的 LaTeX 代码一模一样。
——所以放心大胆地加 %
,它只是给人看的,LaTeX 根本不会搭理它。
粗体字、斜体字和下划线
接下来,我们来看看 LaTeX 里最常用、也最有“排面”的一些文本格式化命令。
- 粗体:用
\textbf{...}
,重点强调、喊话专用,适合关键概念或小标题。 - 斜体:用
\textit{...}
,适合引用、术语、或者“装个文艺范儿”。 - /下划线/:用
\underline{...}
,慎用,虽然能画线,但 不太优雅,用不好很像小学作文。
下面这段代码,就是这些命令的“实战演示”:能看到效果,也能上手照抄。
Some of the \textbf{greatest}
discoveries in \underline{science}
were made by \textbf{\textit{accident}}.
这个例子的输出结果如下:
还有一个非常实用的命令是 \emph{...}
,意思是“强调”某段文字。
它有点聪明,强调方式会根据上下文自动调整:
- 如果在普通正文里用,它就把文字变成斜体;
- 但如果你已经在斜体段落里用了,它反过来给你变回正体,突出重点。
简单说就是:它知道你在哪种语境下“强调”才有力度。下面这段代码就是经典示范,用一次你就明白了。
Some of the greatest \emph{discoveries} in science
were made by accident.
\textit{Some of the greatest \emph{discoveries}
in science were made by accident.}
\textbf{Some of the greatest \emph{discoveries}
in science were made by accident.}
这个例子的输出结果如下。
注意:有些 LaTeX 功能包,比如 Beamer(用来做幻灯片的那个),会改写
\emph
的默认行为。
比如它可能把强调文字变成粗体、变颜色,甚至加动画效果——总之不再是你在普通文章里看到的那个“斜体强调”。所以用了特定模板或宏包,最好提前看看
\emph
究竟干了啥,别到时候你以为在“轻轻地强调”,结果它给你整了个“聚光灯下喊麦”。
插入图片 :让你的文档不再“全是字”
这一节,我们来聊聊——怎么在 LaTeX 里插图。别担心,LoongTeX 给你准备了三种方式,能手动能可视化,总有一款适合你:
- 点按钮插图:在编辑器工具栏上点一下 “Insert Figure” 按钮,适用于 Visual Editor 或 Code Editor,两边都能搞;
- 复制粘贴图片:直接把图片粘进编辑器,懒人福音,LoongTeX 会自动帮你生成对应的 LaTeX 代码;
- 写代码插图:用 Code Editor 自己动手敲 LaTeX 代码,更灵活、更专业,适合手感流用户。
前两种方式会自动生成代码,但这里我们主要介绍第 3 种 —— 自己写代码插图。记得:图片必须上传到你的 LoongTeX 项目里,否则 LaTeX 找不到它。
下面是一个标准示例,告诉你怎么把图像优雅地嵌入文档:
\documentclass{article}
\usepackage{graphicx} % 用于导入图形的LaTeX软件包
\graphicspath{{images/}} % 配置Graphicx软件包
\begin{document}
The universe is immense and it seems to be homogeneous,
on a large scale, everywhere we look.
% The \includegraphcs command is
% provided (implemented) by the
% graphicx package
\includegraphics{universe}
There's a picture of a galaxy above.
\end{document}
这个例子的输出结果如下:
todo:这里是一个配图
要在 LaTeX 文档中插入图片,光会写命令还不够——你得先加载一个“外挂功能包”,也就是专门用来搞图像导入的工具包。
前面我们提到的例子里,加载的就是 graphicx
这个包,它提供了两个非常关键的命令:
\includegraphics{...}
:把图片插进来;\graphicspath{...}
:告 诉 LaTeX,“喂,我的图在这里”,别乱找。
要用这个包,你需要在导言区(preamble)加一句:
\usepackage{graphicx}
然后,如果你想更清晰地管理图片文件,比如你把所有图都放在一个叫 images/
的文件夹里,那就可以加上这句:
\graphicspath{{images/}}
这意思就是告诉 LaTeX:“兄弟,图片你别乱翻文件堆,我都放在 images/
文件夹里了。”
——加上这两步,你的插图系统就算是“武装到牙齿”了,接下来只管放心用 \includegraphics{}
调图 进来就行。
\includegraphics{universe}
这条命令,才是真正把图像塞进文档的那一步。这里的 universe
是图片文件的名字,不过没有加文件扩展名(比如 .png
、.jpg
之类的)。
💡 注意几点:
- 虽然你可以写成
\includegraphics{universe.png}
,但推荐写成不带扩展名的形式。这样 LaTeX 会自己去找支持的格式,比如 PDF、PNG、JPG、EPS……找到了就用,找不到才报错,更灵活、更兼容。- 文件名里不要有空格,也别用多个句号(像
my.graphic.final.png
这种就很危险)。在 LoongTeX 上传图片时,我们也建议用小写扩展名,比如logo.png
、data.jpg
,别整.PNG
这种大小写乱飞的风格,容易出问题。
📚 想了解更多关于 LaTeX 包的内容?放心,我们在本教程的最后专门讲了怎么“寻找和使用 LaTeX 包”,让你用得明明白白、稳稳当当。
标题、标签和参考文献
图片可以通过图表环境进行说明、标注和参考,如下图所示:
\documentclass{article}
\usepackage{graphicx}
\graphicspath{{images/}}
\begin{document}
\begin{figure}[h]
\centering
\includegraphics[width=0.75\textwidth]{mesh}
\caption{A nice plot.}
\label{fig:mesh1}
\end{figure}
As you can see in figure \ref{fig:mesh1}, the function grows near the origin. This example is on page \pageref{fig:mesh1}.
\end{document}
这个例子的输出结果如下:
在这个例子中,有几个值得注意的命令:
\includegraphics[width=0.75\textwidth]{mesh}
: 这种形式的\includegraphics
指示LATEX将图形的 宽度设置为文本宽度的75%,而文本宽度的值保存在\textwidth
命令中。\caption{A nice plot.}
: 顾名思义,这条命令是设置图的标题,可以放在图的上方或下方。如果您创建了一个数字列表,这个标题将在该列表中使用。\label{fig:mesh1}
: 为了在您的文档中引用这个图片,您可以使用\label
命令给它一个标签。该标签用于为图像生成一个编号,并与下一条命令相结合,使您能够引用它。\ref{fig:mesh1}
: 这个代码将被对应于参考图的数字所取代。
在LATEX文档中包含的图像应该放在一个图形环境中,或者类似的环境中,这样LATEX就可以自动将图像放置在文档中的合适位置。
更多的指导见于以下Overleaf帮助文章。
在LATEX中创建列表
您可以使用环境来创建不同类型的列表,环境是用来封装实现特定排版功能所需的LATEX代码。一个环境以 \begin{environment-name}
开始,以 \end{environment-name}
结束,其中 environment-name 可能是数字、表格或其中一种列表类型: itemize 用于无序列表,enumerate 用于有序列表。
无序列表
无序列表是由 itemize 环境产生的。每个列表条目前必须有 \item
命令,如下所示:
\documentclass{article}
\begin{document}
\begin{itemize}
\item The individual entries are indicated with a black dot, a so-called bullet.
\item The text in the entries may be of any length.
\end{itemize}
\end{document}
这个例子的输出结果如下:
你也可以打开这个更大的 LoongTeX 项目,它展示了各种类型的LATEX列表。
有序列表
有序列表使用与无序列表相同的语法,但使用 enumerate
环境创建:
\documentclass{article}
\begin{document}
\begin{enumerate}
\item This is the first entry in our list.
\item The list numbers increase with each entry we add.
\end{enumerate}
\end{document}
这个例子的输出结果如下:
与无序列表一样,每个条目前都必须有 \item
命令,在这里,它自动生成数字的有序列表标签值,从1开始。
要了解更多信息,您可以打开这个更大的 LoongTeX 项目,它演示了各种类型的 LaTeX 列表,或者访问我们关于 LaTeX 列表的专门帮助文章,它提供了更多的例子并展示了如何创建自定义列表。
为 LaTeX 添加数学运算
LaTeX 的主要优点之一是可以很容易地编写数学表达式。LaTeX 为数学排版提供了两种书写模式。
-
内联数学模式:用于编写作为段落一部分的公式
-
显示数学模式:用于编写不属于文本或段落的表达式,并在单独的行中排版。
内联数学模式
让我们看看内联数学模式的一个例子:
\documentclass[12pt, letterpaper]{article}
\begin{document}
In physics, the mass-energy equivalence is stated
by the equation $E=mc^2$, discovered in 1905 by Albert Einstein.
\end{document}
这个例子的输出结果如下:
要对内联数学进行排版,你可以使用这些分隔符对中的一个:\(...\), $ ... $
或 \begin{math} ... \end{math}
,如下面的例子所示:
\documentclass[12pt, letterpaper]{article}
\begin{document}
\begin{math}
E=mc^2
\end{math} is typeset in a paragraph using inline math mode---as is $E=mc^2$, and so too is \(E=mc^2\).
\end{document}
这个例子的输出结果如下:
显示数学模式
在显示模式下排版的方程可以编号或不编号,如下图所示:
\documentclass[12pt, letterpaper]{article}
\begin{document}
The mass-energy equivalence is described by the famous equation
\[ E=mc^2 \] discovered in 1905 by Albert Einstein.
In natural units ($c = 1$), the formula expresses the identity
\begin{equation}
E=m
\end{equation}
\end{document}
这个例子的输出结果如下:
为了排版显示模式的数学,你可以使用这些分隔符对中的一个:\[ ... \]
, \begin{displaymath} ... \end{displaymath}
或 \begin{equation} ... \end{equation}
。历史上,排版显示模式的数学需要使用 ......这里显示数学
......$$,但这种方法不再被推荐:使用LaTeX的定界符
[ ... ]` 代替。
更完整的例子
下面的例子展示了一系列使用LaTeX排版的数学内容:
\documentclass{article}
\begin{document}
Subscripts in math mode are written as $a_b$ and superscripts are written as $a^b$. These can be combined and nested to write expressions such as
\[ T^{i_1 i_2 \dots i_p}_{j_1 j_2 \dots j_q} = T(x^{i_1},\dots,x^{i_p},e_{j_1},\dots,e_{j_q}) \]
We write integrals using $\int$ and fractions using $\frac{a}{b}$. Limits are placed on integrals using superscripts and subscripts:
\[ \int_0^1 \frac{dx}{e^x} = \frac{e-1}{e} \]
Lower case Greek letters are written as $\omega$ $\delta$ etc. while upper case Greek letters are written as $\Omega$ $\Delta$.
Mathematical operators are prefixed with a backslash as $\sin(\beta)$, $\cos(\alpha)$, $\log(x)$ etc.
\end{document}
这个例子的输出结果如下:
下一个例子使用了由 amsmath 包提供的 equation*
环境,因此我们需要在我们的文档序言中添加以下一行:
\usepackage{amsmath}% For the equation* environment
关于使用amsmath的进一步信息,请看我们的帮助文章:
\documentclass{article}
\usepackage{amsmath}% For the equation* environment
\begin{document}
\section{First example}
The well-known Pythagorean theorem \(x^2 + y^2 = z^2\) was proved to be invalid for other exponents, meaning the next equation has no integer solutions for \(n>2\):
\[ x^n + y^n = z^n \]
\section{Second example}
This is a simple math expression \(\sqrt{x^2+1}\) inside text.
And this is also the same:
\begin{math}
\sqrt{x^2+1}
\end{math}
but by using another command.
This is a simple math expression without numbering
\[\sqrt{x^2+1}\]
separated from text.
This is also the same:
\begin{displaymath}
\sqrt{x^2+1}
\end{displaymath}
\ldots and this:
\begin{equation*}
\sqrt{x^2+1}
\end{equation*}
\end{document}