跳到主要内容

半小时学会 LaTeX

这个入门教程不要求你有任何 LaTeX 基础, 但我们的目标很简单粗暴:看完之后,你不仅能写出人生第一份 LaTeX 文档, 还会对接下来的 LaTeX 深造之路,有足够的底气和信心——不再一脸懵逼,而是“我上我也行”。

什么是 LaTeX

LaTeXLaTeX(念作“雷-泰赫”或者“拉-泰克”,你怎么顺嘴怎么来)是一款用来排版专业文档的利器。但得提前打个招呼:它的工作方式,和你以前用过的那些 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 写的。它不是“新潮”,恰恰是最老派也最可靠的技术之一。

关于 TeX 版本号的冷知识
  • 最新稳定版本: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作品

你会发现 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 给你准备了三种方式,能手动能可视化,总有一款适合你:

  1. 点按钮插图:在编辑器工具栏上点一下 “Insert Figure” 按钮,适用于 Visual Editor 或 Code Editor,两边都能搞;
  2. 复制粘贴图片:直接把图片粘进编辑器,懒人福音,LoongTeX 会自动帮你生成对应的 LaTeX 代码;
  3. 写代码插图:用 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.pngdata.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}