【学习笔记】LaTeX 小记

本文重构于 2026.06.23:以新的理解重新调整了这篇文章。

reference:

声明:本学习笔记内容浅薄,仅作为入门使用。进阶的 LaTeX 用法需要进一步研究。

推荐将所有示例中的代码放到编译器中运行一遍,体验一下展示的效果。

熟悉 LaTeX

LaTeX 是一门专业的排版系统(标记语言),使用代码描述文档结构与格式,然后系统编译生成高质量的排版文档。由于 LaTeX 全程使用代码编写(纯文本格式),这使得 AI 可以轻松地指导 LaTeX 编写,我们要学会善用 AI 工具。

LaTeX 可以非常优雅地排版复杂公式,适用于生成高印刷质量的科技和数学类文档。

在如今这个 AI 工具如此发达的时代,是否需要精进掌握 LaTeX 还是五五之说,不过至少要做到可以 Vibe Coding。

下面是一些概念的介绍:

TeX:是 Donald Knuth 发明的排版系统,主要用来进行高质量的文字和数学公式排版。相当于是“底层排版系统”。

LaTeX:是建立在 TeX 上的“工具包”,可以简单理解成 LaTeX 是对 TeX 对一层封装。LaTeX 让用户不必直接处理太多底层排版细节,而是用更接近文档结构的方式写作。

LaTeX 发行版:一个将各种排版引擎、编译脚本、格式转换工具、管理界面、配置文件、支持工具、字体以及数以千计的宏包和文档,集合起来打包发布的软件。

本地 LaTeX 编辑器:TeX Live + VS Code

在本地进行 LaTeX 写作,需要 LaTeX 发行版(TeX Live)和本地 LaTeX 编辑器(VS Code / TeX Studio)配合使用。编辑器通常不负责真正的排版编译,而是调用 LaTeX 发行版中的工具完成文档生成。

TeX Live:是由 TUG(TeX User Group)发布的,目前使用最为广泛的 LaTeX 发行版,支持 Windows、Linux 和 macOS。其中 macOS 上有一套独立的发行版,称为 MacTeX。

TeX Live 安装 reference:

VS Code + LaTeX Workshop:先安装 VS Code,再在 VS Code 的扩展商店中搜索并安装 LaTeX Workshop。

然后在你打开 .tex 文件之时,就可以在左侧的导航栏,找到 TEX 一栏,里面有两个主要的命令:

  • 「构建 LaTeX 项目」:编译该 .tex 文件,导出成 .pdf 文件。可以理解成编译运行,注意要选对编译方式。
  • 「查看 LaTeX PDF」:查看导出的 .pdf 文件。

怎么编译?:

  • 如果你使用编辑器:你可以使用编辑器提供的“编译”按钮(例如 VS Code 就要点上面提到的「构建 LaTeX 项目」)。
  • 如果你使用命令行:则需要打开 Windows 的命令行或类 Unix 的终端,在项目所在的目录下输入 pdflatex <项目名> 或 xelatex <项目名> 等等。前面的项表示编译方式,后面的项表示项目名称(可以省略 .tex 后缀)。

在线 LaTeX 编辑器:Overleaf / OnlineLaTeX

在线编辑器有许多优点:无需在意环境、实时预览、在线访问、版本控制、丰富的模板库。

推荐新手使用,不用折腾许多环境问题。

Overleaf:https://cn.overleaf.com/

不过免费版本编译时长限制为 \(10\)s,除了大型论文外肯定够用了。

OnlineLaTeX:https://www.onlinelatex.com/home/

LaTeX 文档基础

命令、环境、分组

命令:简单命令的格式形如

\命令[可选参数]{必选参数}

LaTeX 的命令对大小写敏感!

环境:用以令一些效果在局部生效,或是生成特殊的文档元素。LaTeX 环境的用法为一对命令 \begin{} 和 \end{}

\begin{环境名}[可选参数]{必选参数}
...
\end{环境名}

分组:使用一对花括号 {} 进行分组。分组可以限制命令的作用范围,使其只在局部生效,不影响分组外的内容。

示例:

这是普通文字,{\bfseries 这是加粗文字},这里又恢复普通文字。

基础结构

LaTeX 文档结构:导言区 + 文档内容。

\documentclass[a4paper]{article} % 文档类型(如 article, report, book, beamer)

% 导言区开始
\usepackage{graphicx} % 引用宏包
\graphicspath{{image/}} % 设置图片目录
% 导言区结束

\begin{document}
% 正文内容从这里开始
\end{document}

文档内容:文档的正文内容,包含在 \begin{document} 与 \end{document} 这两个标签之间。

导言区:\begin{document} 之前 .tex 文件中的所有内容都被成为导言区。在导言区中,你可以定义文档的类型、定义你所使用的语言、定义你想引入的宏包,以及许多其他的模块。

  • \documentclass{}:声明了文档类型(称为文档类),控制文档的整体外观。不同类型的文档需要不同的文档类。
  • \usepackage{}:引用宏包,以增强或扩充 LaTeX 的功能。
  • ...

组织方式

当编写长篇文章时,单个源文件会使修改、校对变得十分困难。将源文件分割成若干个文件,例如将每章内容单独写在一个文件中,会大大简化修改和校对的工作。

  • \include{<文件名>}:用于在源代码中插入文件(按“完整章节”导入)。
    • \include 前后会自动执行 \clearpage,因此通常每个文件开始与结束会另起一页。
    • 每个被包含文件会生成独立的 .aux 辅助信息。
    • 不能嵌套使用 \include。
  • \input{<文件名>}:用于在源代码中插入文件(直接嵌入内容)。
    • 纯粹地将文件中的内容插入,不会自动分页。
    • 不会生成独立的辅助文件。
    • 可以嵌套使用 \input。

注意:这里的 <文件名> 必须是不带 .tex 后缀的文件名(虽然 \input 就算带后缀好像也无妨)。

文件路径

在编写文章时,会涉及到对文件的引用(例如上面提到的 \include 与 \input),本地文件的路径分为绝对路径与相对路径。

建议将主文件、章节、图片、参考文献和宏定义分别置于清晰的子目录中,并优先使用相对路径。这样整个项目移动、压缩或提交给他人时,通常无需修改 LaTeX 源码。

文件路径分隔符:

  • Windows:默认使用反斜杠 \ 作为路径分隔符,但内核支持两种分隔符(\ 与 / 均可)。
  • Linux/Unix/macOS:一律使用正斜杠 / 作为路径分隔符(反斜杠 \ 在 Shell 里是转义字符,不会被识别为路径分隔符)。

不论是在 Windows 或 Linux 环境下,都建议统一使用 / 作为路径分隔符,TeX 引擎内部会把 / 转化成对应系统的路径分隔符。

By the way:在 LaTeX 中,反斜杠 \ 是命令起始符,不是路径分隔符。若想使用反斜杠必须转义 \\。

绝对路径:从文件系统的根目录 / 开始、能够唯一定位文件的完整路径。

示例:

% Windows
\input{C:/Users/Alice/Documents/Thesis/chapters/introduction}

% Linux/macOS
\input{/home/alice/thesis/chapters/introduction}

相对路径:以当前编译的主 .tex 文件所在目录为参考,描述目标文件的路径。

  • . 表示当前目录,在很多情况下可以省略。
  • .. 表示上一级目录,例如 ../ 表示当前目录的父目录。

示例:

\include{chapters/introduction}
\include{chapters/method}

% 与 \include{chapters/...} 相同
\include{./chapters/introduction}
\include{./chapters/method}

% 上一级目录下的 shared 文件夹中的 macros.tex 文件
\input{../shared/macros}

路径规范:LaTeX 的文件路径中尽量不要有中文、空格、特殊符号。

对 \input 而言,添加双引号 "" 可能可用。

示例:

\input{"/Users/calculatelove/Courses-FZU/430 大二秋冬/433 人工智能代数学基础/FinalProject/work"}

对 \include 而言,不能简单靠双引号解决。

LaTeX 个人常用宏包

\usepackage{ctex} % 提供中文排版支持,并适配 XeLaTeX / LuaLaTeX 等中文文档环境
\usepackage{unicode-math} % 使用 Unicode 方式设置和调用数学字体,通常需 XeLaTeX 或 LuaLaTeX 编译
\usepackage{amsmath} % 扩展数学公式排版功能,如多行公式、对齐环境和常用数学命令
\usepackage{latexsym} % 补充 LaTeX 默认未提供的一部分数学符号
\usepackage{xcolor} % 提供文字、表格、背景等颜色设置功能
\usepackage{graphicx} % 支持插入、缩放、旋转和裁剪图片
\usepackage{multicol} % 提供多栏排版环境,适合文章正文或题目分栏
\usepackage{booktabs} % 提供三线表等更美观、规范的表格线命令
\usepackage{enumitem} % 自定义列表的缩进、编号样式、间距和标签格式
\usepackage{calligra} % 提供 Calligra 英文手写字体
\usepackage{listings} % 支持基础代码排版与语法高亮,无需额外编译权限
\usepackage{minted} % 基于 Pygments 提供更丰富的代码高亮,编译时通常需启用 -shell-escape
\usepackage{stackengine} % 支持文字、符号和图形的堆叠、叠放与组合排版
\usepackage{indentfirst} % 使各章节后的首段也自动进行首行缩进
\usepackage{ulem} % 提供下划线、删除线、波浪线等文本修饰命令
\usepackage{hyperref} % 为目录、引用、网址和交叉引用生成可点击超链接

ctex:提供对中文的支持

LaTeX 本身不直接支持中文。

ctex 为中文文档提供了较为完整的支持:包括中文字体设置、中文标点处理、章节标题格式、日期格式以及中英文混排等功能。使用它之后,用户通常不需要手动配置复杂的 CJK 字体环境,就可以较方便地在 LaTeX 文档中输入和排版中文内容。

源代码文件应保存为 UTF-8 编码,推荐使用 xelatex 或 lualatex 编译。

Linux 与 macOS 环境下需要注意字体问题。

LaTeX 标题页

标题:\title{}

作者:\author{}

日期:\date{}。你可以手动地输入日期,或使用 \today 指令(\date{\today})。

现在你已经定义了文档的标题、作者、日期,你可以使用 \maketitle 指令来让这些命令生效。

示例:

\documentclass{article}

\title{Basis of Data Structure}
\author{C.L.}
\date{\today}

\begin{document}

\maketitle % 生成标题

What we are going to introduce is the Basis of data structure.

\end{document}

通常可以结合使用 \newpage 来使得标题页独占一页。

LaTeX 文档结构

摘要

摘要:常见格式为

\begin{abstract}
    本文简要介绍 ... % 摘要
\end{abstract}

常常用于简要概述或总结本文的核心主题或论点。

标准文档类中,article 和 report 通常支持 abstract,而 book 默认没有 abstract 环境。

章节层次

章节层次:LaTeX 的章节层次从高到低分别是

层次 含义
\part 部、篇
\chapter 章(仅 book/report 有,article 没有)
\section 节(一级标题)
\subsection 小节(二级标题)
\subsubsection 小小节(三级标题)
\paragraph 段标题(行内标题)
\subparagraph 子段标题(行内标题)

目录

小提示:目录至少要编译两遍才能稳定显示。

目录:可以使用 \tableofcontents 生成目录,带章节标号与页码。

示例:

\tableofcontents

\part{数据结构}

\section{线段树}

\subsection{普通线段树}

\subsubsection{势能线段树}

\paragraph{Segment Tree Beat!} 这段文字会接在标题后面。

LaTeX 文本标记

注释

注释:注释是一种不会出现在最终输出文档的文字。常用于组织文档、添加笔记、临时屏蔽内容和调试代码。

使用 % 添加注释,会注释掉从它出现的位置到该行行尾的内容。

示例:

This is text. % This is a comment.

如果需要注释多行,则每一行都需要添加 %。

加粗、斜体、下划线、删除线

加粗:\textbf{} 或 {\bfseries ...}

斜体:\textit{} 或 {\itshape ...}

下划线:\underline{}

删除线:\sout{}(需要使用 ulem 宏包)。

示例:

This is normal text.

\textbf{This is bold text.}

{\bfseries This is also bold text.}

\textit{This is italic text.}

{\itshape This is also italic text.}

\underline{This is underlined text.}

\sout{This is deleted text.}

混合使用示例:

\textbf{This sentence is bold, and \textit{this part is italic}.}

\textit{This sentence is italic, and \textbf{this part is bold}.}

\underline{This is underlined, and \textbf{this part is bold}.}

\sout{This text is deleted, but \textbf{this part is still bold}.}

颜色

需要使用宏包 xcolor,使用 \usepackage[dvipsnames]{xcolor} 可以载入更多预定义颜色。

文本颜色:\textcolor{<颜色>}{<文本>} 或 {\color{<颜色>} 文本},也可以给公式上色。

文本背景颜色:\colorbox{<颜色><文本>}

带边框的文本背景颜色:\fcolorbox{边框颜色}{背景颜色}{文本}

颜色混合:颜色A!比例!颜色B,例如 red!40!blue 表示 \(40\%\) 的红色与 \(60\%\) 的蓝色混合。

示例:

\textcolor{red}{这是一段红色文本。}

\textcolor{blue}{这是一段蓝色文本。}

\textcolor{green!40!black}{这是一段偏深绿色文本。}

\[
\textcolor{blue}{x^2} + \textcolor{red}{y^2} = z^2
\]

{\color{purple} 这一整句话都是紫色的。}

{\color{orange} 这一整句话都是橙色的。}

\colorbox{yellow}{这是黄色背景的文本。}

\colorbox{cyan}{这是青色背景的文本。}

\colorbox{green!20}{这是浅绿色背景的文本。}

\fcolorbox{red}{yellow}{这是红色边框、黄色背景的文本。}

\fcolorbox{blue}{white}{这是蓝色边框、白色背景的文本。}

\fcolorbox{black}{green!20}{这是黑色边框、浅绿色背景的文本。}

\colorbox{black}{\textcolor{white}{这是黑底白字。}}

\fcolorbox{red}{black}{\textcolor{white}{这是红框、黑底、白字。}}

自定义颜色:\definecolor{颜色名}{颜色模型}{颜色值},常见的颜色模型有

\definecolor{颜色名}{RGB}{红,绿,蓝} % 每个值的范围是 0~255
\definecolor{颜色名}{rgb}{红,绿,蓝} % 每个值的范围是 0~1
\definecolor{颜色名}{HTML}{十六进制颜色} % 例如 1E5AB4
\definecolor{颜色名}{gray}{灰度值} % 灰度值的范围是 0~1
\definecolor{颜色名}{cmyk}{青,品红,黄,黑} % 每个值的范围是 0~1

定义颜色之后,颜色名就可以像 red 一样使用。

示例:

% 导言区

\definecolor{myblue}{RGB}{30,90,180}
\definecolor{myred}{rgb}{0.8,0.2,0.2}
\definecolor{mygreen}{HTML}{2E8B57}
\definecolor{mygray}{gray}{0.5}
\definecolor{myprintblue}{cmyk}{1,0.5,0,0}

% 正文

\textcolor{myblue}{这是使用 RGB 模型定义的蓝色文本。}

\textcolor{myred}{这是使用 rgb 模型定义的红色文本。}

\textcolor{mygreen}{这是使用 HTML 模型定义的绿色文本。}

\textcolor{mygray}{这是使用 gray 模型定义的灰色文本。}

\textcolor{myprintblue}{这是使用 cmyk 模型定义的蓝色文本。}

字号

命令 相对大小(从小到大) 默认 10 pt 文档下的大致字号
\tiny 最小 5 pt
\scriptsize 很小 7 pt
\footnotesize 脚注大小 8 pt
\small 小 9 pt
\normalsize 正常(默认) 10 pt
\large 稍大 12 pt
\Large 大 14.4 pt
\LARGE 很大 17.28 pt
\huge 次大 20.74 pt
\Huge 最大 24.88 pt

示例:

{\tiny Text}

{\scriptsize Text}

{\footnotesize Text}

{\small Text}

{\normalsize Text}

{\large Text}

{\Large Text}

{\LARGE Text}

{\huge Text}

{\Huge Text}

字体

LaTeX 普通正文默认使用罗马字体族的中等字重、直立字形的衬线字体。在经典设置下,具体字体通常是 Computer Modern Roman。

LaTeX 常用字体族命令:

  • 罗马字体:\textrm{} 或 {\rmfamily ...}
  • 无衬线字体:\textsf{} 或 {\sffamily ...}
  • 等宽字体:\texttt{} 或 {\ttfamily ...}

切换字体:{\fontfamily{...}\selectfont ...}(二者必须连用)

  • \fontfamily{...}:声明选择的字体族。
  • \selectfont:用于实际切换上述选择的字体。

示例:

% 导言区

\usepackage{fontspec}
\newfontfamily\msyhen{Microsoft YaHei}
\newCJKfontfamily\msyhcn{Microsoft YaHei}

% 正文

\textrm{这是罗马字体。}

\textsf{这是无衬线字体。}

\texttt{This is typewriter text.}

{\msyhcn 这是一段使用微软雅黑显示的中文文本。} % 注意 Overleaf 上没有微软雅黑

{\msyhen This is English text in Microsoft YaHei.}

LaTeX 数学公式

需要使用宏包 amsmath。

LaTeX 的数学内容必须写在数学模式中。

行内公式:用单个美元符号 $ ... $ 包围起来的内容(也可以写成 \( ... \))。

单行公式:

  • \[ ... \] 包围起来的内容:不自动编号的单行公式。
  • equation 环境内的公式:自动编号的单行公式,使用 equation* 环境可以取消自动编号。

不推荐使用 $$ ... $$ 包围起来的内容:是 Plain TeX 遗留写法。它在许多情况下仍能编译,但可能产生不一致的公式间距,并且不适合与现代 LaTeX 数学环境混用,在多数学术期刊模板中被禁止。

最好不要尝试在单行公式中编写多行公式,很多编译器在上述的环境中不处理 \\。

多行公式:

  • align 环境内的公式:每一行在某一位置对其的多行公式,自动编号。
  • gather 环境内的公式:每一行整体居中的多行公式,自动编号。
  • 使用 align* 和 gather* 环境可以取消自动编号,使用 \notag 可以取消某一行编号。

示例:

这是一个行内公式 $e^{ix} = \cos(x) + i \sin(x)$,这是另一个行内公式 \(a^2 + b^2 = c^2\)。

\[
f(n) = \sum\limits_{i = m}^n \binom{n}{i} g(i) \iff g(n) = \sum\limits_{i = m}^n (-1)^{n - i} \binom{n}{i} f(i)
\]

\begin{equation}
    E = mc^2
\end{equation}

\begin{align}
    \complement_U (A \cap B) = \complement_U A \cup \complement_U B \\
    \complement_U (A \cup B) = \complement_U A \cap \complement_U B
\end{align}

\begin{align}
    \sum_{i = 1}^n\sum_{j = 1}^i A^j_iA^{n - j}_{m - j} & = \sum_{i = 1}^n\sum_{j = 1}^i \frac{i!}{(i - j)!}\frac{(m - j)!}{(m - n)!} \\
    & = \sum_{j = 1}^n \frac{(m - j)!}{(m - n)!}\sum_{i = j}^n \frac{i!}{(i - j)!} \\
    & = \sum_{j = 1}^n \frac{(m - j)!j!}{(m - n)!}\sum_{i = j}^n \frac{i!}{(i - j)!j!} \\
    & = \sum_{j = 1}^n \frac{(m - j)!j!}{(m - n)!}\sum_{i = j}^n \binom{i}{j} \\
    & = \sum_{j = 1}^n \frac{(m - j)!j!}{(m - n)!}\binom{n + 1}{j + 1}
\end{align}

\begin{gather}
    \nabla \cdot \mathbf{E} = \frac{\rho}{\varepsilon_0} \\
    \nabla \cdot \mathbf{B} = 0 \\
    \nabla \times \mathbf{E} = -\frac{\partial \mathbf{B}}{\partial t} \\
    \nabla \times \mathbf{B} = \mu_0 \mathbf{J}
    + \mu_0 \varepsilon_0 \frac{\partial \mathbf{E}}{\partial t}
\end{gather}

此处应有一大段关于数学公式的细节介绍,但由于笔者在使用 markdown 时已经记清楚了个大概,就不再赘述。

数学公式的查找:

LaTeX 列表

reference:https://cn.overleaf.com/learn/latex/Lists

列表:常见格式为

\begin{<列表类型>}
	\item
	\item
	\item
\end{<列表类型>}
  • 在 LaTeX 中有许多类型的列表,最常见的三种列表类型为:
    • 无序列表:itemize
    • 有序列表:enumerate
    • 描述性列表:description
  • \item:用来列举列表中的其中一项。
  • \item[<描述>]:用来列举列表中的其中一项,可以自定义描述词(无序列表与有序列表仍然适用,但是描述性列表的描述词会加粗)。

示例:

无序列表:
\begin{itemize}
	\item 第一项。
	\item 第二项。
	\item 第三项。
\end{itemize}

有序列表:
\begin{enumerate}
	\item 第一项。
	\item 第二项。
	\item 第三项。
\end{enumerate}

描述性列表:
设 $G$ 为非空集合,其上有 $G \times G \to G$(封闭性)的二元运算 $\cdot$,如果满足以下性质,则称 $(G, \cdot)$ 是一个群:
\begin{description}
	\item[结合律:] 对于任意 $a, b, c \in G$,成立 $a \cdot (b \cdot c) = (a \cdot b) \cdot c$。
	\item[有单位元:] 存在 $e \in G$,使得对于任意 $a \in G$,都成立 $a \cdot e = e \cdot a = a$。
	\item[存在逆元:] 对于任意 $a \in G$,都存在相应的 $b \in G$ 使得 $a \cdot b = b \cdot a = e$。
\end{description}

列表的嵌套:常见格式为

\begin{itemize} % 一级列表
    \item 1
    \begin{itemize} % 二级列表
		\item 1.1
        \begin{itemize} % 三级列表
            \item 1.1.1
            \item 1.1.2
        \end{itemize}
		\item 1.2
    \end{itemize}
    \item 2
    \begin{itemize} % 二级列表
		\item 2.1
		\item 2.2
    \end{itemize}
\end{itemize}

在 LaTeX 中,可以在列表中嵌套列表(可以是同一种列表,也可以是不同种列表)。

  • 对于无序列表,黑圆点类型会随着嵌套深度的增加而变化。
  • 对于有序列表,数字类型会随着嵌套深度的增加而变化。

LaTeX 图片

需要使用宏包 graphicx。

图片:常见格式为

\begin{figure}
	\includegraphics[可选参数]{logo}
\end{figure}
  • \graphicspath{{image/}}:设置图片目录为 .tex 所在目录下的 image 文件夹(必须是双层花括号,结尾必须要有 /)。
  • \includegraphics[可选参数]{logo}:在文档中添加图片。这里的 logo 是图片的文件名(可以省略后缀名)。
\includegraphics 可选参数 含义 举例
width=<长度> 将图片缩放至指定宽度 \includegraphics[width=0.8\textwidth]{logx}
height=<长度> 将图片缩放至指定高度 \includegraphics[height=10cm]{logx}
scale=<因子> 将图片相对于原尺寸按比例缩放 \includegraphics[scale=0.5]{logx}
keepaspectratio 保持宽高比;通常与 width 或 height 连用 \includegraphics[width=10cm, keepaspectratio]{logo}
angle=<角度> 将图片逆时针旋转(角度制) \includegraphics[angle=90]{logo}
trim=<左 下 右 上>, clip 裁剪图片边缘。四个参数分别对应
左下右上的裁剪距离。注意加 clip
\includegraphics[trim=1cm 2cm 1cm 2cm, clip]{logo}

长度单位举例:

  • cm、mm、in、pt。
  • \textwidth(正文区宽度,不包括左右页边距)、\linewidth(当前行的宽度)、\paperwidth(整张纸的物理宽度)。

示例:

\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.3\linewidth]{photo.png}
\end{figure}

LaTeX 表格

表格:常见格式为

\begin{tabular}{<表格参数>}
    表格内容 & 表格内容 \\
    \hline
    表格内容 & 表格内容
\end{tabular}

示例:

\begin{tabular}{|l|c|r|}
    \hline
    左对齐 & 居中 & 右对齐 \\
    \hline
    cell 1 & cell 2 & cell 3 \\
    \hline
    cell 4 & cell 5 & cell 6 \\
    \hline
\end{tabular}
  • 在表格参数中,l/c/r 分别表示左对齐/居中/右对齐,竖线 | 表示表格在对应位置存在一条列间竖线。
  • &:用于划分行内的单元格,每一行的单元格数量必须与列格式相匹配,例如 \(3\) 列表格需要有 \(2\) 个 & 分隔。
  • \\:用于换行。
  • \hline:用于表格在对应位置绘制一条行间横线。

*LaTeX 浮动体

reference:https://liam.page/2017/03/11/floats-in-LaTeX-basic/

图片和表格有时会很大,在插入的位置不一定放得下,又不方便分页。因此需要浮动调整。常见格式:

\begin{figure}[<位置描述符>] % 例如 htbp
	<图片>
\end{figure}
  • 位置描述符,指定了浮动体摆放的编号。基本的位置描述符有以下几种:
    • h:表示 here,尽量放在当前位置附近。
    • t:表示 top,页面顶部。
    • b:表示 bottom,页面底部。
    • p:表示 float page,浮动页(单独成页)。
  • 使用 htbp 时,LaTeX 会根据文档排版的需要,选择最合适的位置来放置图像或表格。如果不能完全满足指定的位置,LaTeX 会根据文档的排版规则进行调整。

LaTeX 交叉引用

小提示:交叉引用至少要编译两遍才能稳定显示。

标签:用于标记你希望交叉引用的内容。相当于给一个内容起别名,后续要引用时,就引用该标签。常见格式为

\label{标签名}

常常与章节、公式、图片、表格等等一起使用。

为了避免标记冲突,通常使用统一前缀标记:sec: 表示章节,eq: 表示公式,fig: 表示图片,tab: 表示表格。

引用:用于引用你之前标记的标签。常见格式为

\ref{标签} % 引用对象的编号
\pageref{标签} % 引用对象所在的页码
\eqref{标签} % 引用公式的编号,并自动添加两个半角括号
\nameref{标签} % 引用章节标题等对象的名称

\eqref 来自宏包 amsmath,\nameref 通常来自宏包 hyperref。

特别地,当使用了宏包 hyperref 时,\ref、\eqref 等会自动添加超链接。

章节的交叉引用

示例:

\section{数据结构介绍}\label{sec:介绍}

今天我们要介绍数据结构基础 ...

\newpage

相关内容见第~\ref{sec:介绍} 节。% 其中 ~ 是不可断行空格,可以避免“第”和编号被拆到两行。

该节标题为“\nameref{sec:介绍}”,位于第~\pageref{sec:介绍} 页。

公式的交叉引用

编号只能对带编号的环境使用(来自 amsmath),而不能对 \[ ... \] 或 $$ ... $$ 使用。

示例 1:单行公式。

\begin{equation} \label{eq:范德蒙德卷积}
    \sum\limits_{k}\binom{s}{k}\binom{t}{m - k} = \binom{s + t}{m}
\end{equation}

\newpage

详见公式 \ref{eq:范德蒙德卷积}。

详见公式 \eqref{eq:范德蒙德卷积}。

示例 2:多行公式,将 \label 放在你想引用的那一行,其他不想加编号的行可以加 \notag 或 \nonumber。

\begin{align}
& \sum\limits_{i = 1}^{n - 1} A_{n - 1 - s}^{i - 1} \cdot s \cdot (n - 1 - i)! \cdot (n - i) \notag \\
& = \sum\limits_{i = 1}^{n - 1} \frac{(n - 1 - s)!}{(n - i - s)!} \cdot s \cdot (n - i)! \notag \\
& = (n - 1 - s)! \cdot s \cdot \sum\limits_{i = 1}^{n - 1} \frac{(n - i)!}{(n - i - s)!} \notag \\
& = (n - 1 - s)! \cdot s \cdot s! \cdot \sum\limits_{i = 1}^{n - 1} \frac{(n - i)!}{(n - i - s)! \cdot s!} \notag \\
& = (n - 1 - s)! \cdot s \cdot s! \cdot \sum\limits_{i = 1}^{n - 1} \binom{n - i}{s} \notag \\
& = (n - 1 - s)! \cdot s \cdot s! \cdot \sum\limits_{i = 1}^{n - 1} \binom{i}{s} \label{eq:上指标求和法} \\
& = (n - 1 - s)! \cdot s \cdot s! \cdot \binom{n}{s + 1} \notag \\
& = (n - 1 - s)! \cdot s \cdot s! \cdot \frac{n!}{(n - 1 - s)! \cdot (s + 1)!} \notag \\
& = \frac{s}{s + 1} \cdot n! \notag
\end{align}

在公式 \eqref{eq:上指标求和法} 的化简中,运用了\emph{上指标求和法}的技巧 ...

示例 3:多行公式作为一个整体,只产生一个编号,使用 equation + aligned 环境。

\begin{equation} \label{eq:一元二次方程求根公式}
\begin{aligned}
ax^2 + bx + c &= 0 \\
x^2 + \frac{b}{a}x &= -\frac{c}{a} \\
\left(x + \frac{b}{2a}\right)^2 &= \frac{b^2 - 4ac}{4a^2} \\
x &= \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}
\end{aligned}
\end{equation}

由式 \eqref{eq:一元二次方程求根公式} 可知,二次方程的解由判别式决定。

图片的交叉引用

示例:

福大校徽请参见图~\ref{fig:logo}
\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.2\linewidth]{fzu-logo.png}
    \caption{福大校徽。}
    \label{fig:logo}
\end{figure}
  • \centering:将图片居中。
  • \caption:设置图片标题,若 \caption 放在 \includegraphics 前方,则标题在图片上方;否则在图片下方。
  • 图片标签应该放在 \caption 之后,否则可能引用到错误的编号。

表格的交叉引用

示例:

\begin{table}[htbp]
    \centering
    \begin{tabular}{|c|c|}
        \hline
        金牌 & $10\%$ \\
        \hline
        银牌 & $20\%$ \\
        \hline
        铜牌 & $30\%$ \\
        \hline
    \end{tabular}
    \caption{ICPC 各奖牌比例}
    \label{tab:icpc-medal-ratio}
\end{table}

ICPC 各奖牌比例详见表~\ref{tab:icpc-medal-ratio}。
  • \centering:将表格居中。
  • \caption:设置表格标题,若 \caption 放在 tabular 环境前方,则标题在表格上方;否则在表格下方。
  • 表格标签应该放在 \caption 之后,否则可能引用到错误的编号。

LaTeX 代码

minted

reference:https://zhuanlan.zhihu.com/p/348850937

需要使用宏包 minted。

要使得 minted 与本地 LaTeX 发行版配合使用,必须安装附加程序 pygments。并且需要在 TeX Studio 中更改 xelatex 的编译命令(具体参考 reference)。但是可以在 Overleaf 上开箱即用。

minted 代码渲染:

\begin{minted}{<语言>}
<代码>
\end{minted}

minted 个人设置:

\definecolor{LightGray}{gray}{0.95} % 定义浅灰色背景
\setminted{
	tabsize=4, % 设置缩进大小=4
	autogobble, % 自动删除代码开头的多余缩进
	breaklines, % 自动在长代码处换行
	frame=lines, % 设置代码框架为线条
	framesep=2mm, % 设置框架与代码之间的间距
	baselinestretch=1.2, % 设置行间距
	bgcolor=LightGray, % 设置背景颜色为浅灰色
	fontsize=\footnotesize, % 设置代码字体为 \footnotesize
	linenos % 显示行号
}

minted 插入代码:\inputminted{<language>}{<file>}(参照 \input)。

示例 1:

\begin{minted}{C++}
#include <bits/stdc++.h>

using i64 = long long;

#define debug(a) std::cout << #a << '=' << (a) << ' '

template <class T>
inline void chmin(T &x, const T &y) {
    if (x > y) {
        x = y;
    }
}
template <class T>
inline void chmax(T &x, const T &y) {
    if (x < y) {
        x = y;
    }
}

int main() {
    std::ios::sync_with_stdio(0);
    std::cin.tie(0);

    return 0;
}
\end{minted}

LaTeX 页面布局

到 LaTeX 实际写作的时候,需要对 LaTeX 的页面布局进行调整。

等到笔者有实际写作需求的时候,将会研究一下好看的 LaTeX 页面布局。

页边距

需要使用宏包 geometry。

\geometry{left=1.8cm,right=1.8cm,top=1.8cm,bottom=1.8cm}

将正文区域安排在距离纸张四边各 1.8 厘米的位置以内。

Beamer(幻灯片类)

reference:https://shootingwang.github.io/LaTeX-Beamer.html

Beamer 是一个功能强大的 LaTeX 类,用于制作演示文稿。许多学术类演示文稿都依靠 Beamer 制作。

Beamer 结构清晰,且由于 Beamer 基于 LaTeX,对数学公式特别友好,故 Beamer 是学术类(尤其数学类)文稿制作的极佳选择。因为学术类演示文稿的内容重要性远大于文稿美观性。

常见格式为

\documentclass{beamer}

% 导言区开始

\usetheme{...} % 演示主题
\usecolortheme{...} % 颜色主题

% 导言区结束

\begin{document}
	\begin{frame}
		<文稿内容>
	\end{frame}
	...
\end{document}

主题

Beamer 的主题系统主要包括:

  • \usetheme{}:演示主题。
  • \usecolortheme{}:颜色主题。
  • \usefonttheme{}:字体主题。
  • \useinnertheme{}:内部结构主题,控制标题页、列表、块环境等。
  • \useoutertheme{}:外部结构主题,控制页眉、页脚、导航栏、侧边栏等。

可以通过 https://hartwork.org/beamer-theme-matrix/ 来挑选你喜欢的演示+颜色主题组合(行是演示主题,列是颜色主题)。

个人最喜欢的主题组合是:

\usetheme{Ilmenau}
\usecolortheme{default}

在 Overleaf 上,也可以搜索许多的 LaTeX 模版,例如 FZU Beamer,感谢学长的制作🙏

一些内部结构主题的简介:

内部结构主题 效果简介
default Beamer 默认内部样式
circles 把项目符号、目录编号等设计成圆形风格
rectangles 把项目符号、目录编号等设计成矩形或方块风格
rounded 让块环境、标题框等元素带有圆角效果

一些外部结构主题的简介:

外部结构主题 效果简介
default Beamer 默认外部样式
infolines 在底部加入信息栏,常显示作者、标题、日期、页码等信息
miniframes 在顶部显示小圆点或小框形式的导航,用来表示每一页在章节中的位置
sidebar 添加侧边栏,通常显示章节和小节导航
smoothbars 类似 miniframes,但顶部导航条更平滑、美观,带有较柔和的导航区域效果
smoothtree 类似 tree,但视觉上更平滑。顶部以层级结构显示 section/subsection
split 将顶部或底部区域分割成左右两部分,常用于同时显示章节、小节、标题、作者等信息
shadow 基于较丰富的外观设计,带有阴影效果,视觉上更立体
tree 在顶部以树状层级方式显示章节、小节导航

页

Beamer 的一个页称作一个 frame,一个页的常见格式为

\begin{frame}{标题}
	<文稿内容>
\end{frame}

同样地,Beamer 也有标题页等的特殊页码。

% 导言区

\title{报告标题}
\author{作者}
\institute{单位}
\date{\today}

% 正文

\begin{frame}
	\titlepage
\end{frame}

引用块

Beamer 有三种基本引用块:提示块 block,警示块 alertblock,示例块 examples。

常见格式为

\begin{block}{<提示块名字>}
蓝色的提示块。
\end{block}

\begin{alertblock}{<警示块名字>}
红色的警示块。
\end{alertblock}

\begin{examples}
绿色的示例块,名字叫``例''。
\end{examples}

小组件

设置顶部导航栏(小圆点导航栏)

小提示:至少要编译两遍才能稳定显示。

需要使用外部主题 miniframes,部分主题自带该外部主题(例如 Ilmenau)。

Beamer 内部自动的交叉引用:

  • 一个小圆点代表了一个页。
  • 一个 \subsection 中的所有页,其对应的小圆点集中在同一行。
  • 一个 \section 中的所有 \subsection,其包含的小圆点分列于不同行。

圆角阴影块

\setbeamertemplate{blocks}[rounded][shadow=true]

设置 PDF 滚动样式

\hypersetup{
	pdfpagelayout=OneColumn, % 单列,连续滚动
	pdfstartview=Fit % 打开时宽度自适应窗口
}

公式间距优化

% 每个 frame 开始时设置行间公式上下距离
\AtBeginEnvironment{frame}{%
	\setlength{\abovedisplayskip}{4pt}
	\setlength{\belowdisplayskip}{4pt}
	\setlength{\abovedisplayshortskip}{2pt}
	\setlength{\belowdisplayshortskip}{2pt}
}

页码设置

小提示:至少要编译两遍才能稳定显示。

\setbeamertemplate{page number in head/foot}[totalframenumber] % 当前 frame / 总 frame

进度条

% 进度条颜色
\setbeamercolor{progress bar}{fg=blue!70!black,bg=black!15}

\makeatletter
\newdimen\progressbar@width

\newcommand{\insertprogressbar}{%
	\progressbar@width=\paperwidth
	\multiply\progressbar@width by \insertframenumber
	\divide\progressbar@width by \inserttotalframenumber

	\begin{beamercolorbox}[wd=\paperwidth,ht=1.4pt,dp=0pt]{progress bar}
    	{\usebeamercolor[fg]{progress bar}%
			\rule{\progressbar@width}{1.4pt}}%
		{\usebeamercolor[bg]{progress bar}%
			\rule{\dimexpr\paperwidth-\progressbar@width\relax}{1.4pt}}%
	\end{beamercolorbox}%
}

% 放在 footline 下方
\addtobeamertemplate{footline}{}{\insertprogressbar}
\makeatother
posted @ 2025-05-19 12:04  Calculatelove  阅读(554)  评论(1)    收藏  举报