跳到主要内容

LaTeX 教程

LaTeX 简介

LaTeX 是基于 TeX 引擎的专业排版系统,由 Leslie Lamport 开发。它采用纯文本编写文档,编译输出 PDF,让作者专注内容而不用关注排版细节,擅长数学公式、参考文献处理,是理工科学术论文、技术文档的主流排版工具。

宏包: LaTeX 的扩展能力库,使用 \usepackage{宏包名} 在导言区加载,用来补充原生不具备的功能,如中文渲染、公式、插图等。

LaTeX 特点

  • 高质量排版:LaTeX 以其专业的排版质量而闻名,尤其擅长处理复杂的数学公式和参考文献。能自动调整文档格式,生成符合出版标准的高质量排版效果。
  • 基于标记语言:LaTeX 采用纯文本的标记语言格式,用户通过输入特定的命令和标签来定义文档的结构和格式。例如,通过\section{}定义章节,通过\textbf{}定义粗体。
  • 跨平台支持:LaTeX 是跨平台的,支持 Windows、macOS 和 Linux 等操作系统。生成的文档通常为 PDF 格式,且在不同平台上具有一致的展示效果。
  • 适合学术写作:LaTeX 非常适合用于撰写学术论文、书籍、技术文档、报告等,尤其是包含大量数学公式、参考文献和复杂排版需求的文档。它对文献管理、公式输入和排版效果有极好的支持。
  • 自动化文档管理:LaTeX 在长文档、书籍或论文中提供了强大的自动化功能,例如自动编号、自动生成目录、交叉引用、自动排版公式等。它能够自动处理文献引用、参考文献列表等,非常适合需要精准格式的文档。

LaTeX 与 Word 的区别

特性LaTeXMicrosoft Word
排版质量专业级排版,尤其擅长处理复杂公式和长文档。适合简单文档,复杂排版需要手动调整。
学习曲线需要学习基本语法,初期上手较难。所见即所得,易于上手。
自动化程度自动处理编号、交叉引用、目录生成等。需要手动调整编号和格式。
数学公式支持强大的数学公式排版能力,支持复杂符号和结构。公式编辑功能有限,复杂公式难以处理。
跨平台支持完全跨平台,文档在不同系统上表现一致。跨平台支持较好,但格式可能因版本不同而有所变化。
文档结构内容与格式分离,便于维护和协作。内容与格式混合,长文档维护较困难。
扩展性通过宏包扩展功能,支持自定义命令和环境。功能扩展依赖于插件,灵活性较低。

LaTeX 工作流程

  1. 编写 LaTeX 源代码:使用纯文本编辑器编写 .tex 文件,内容包含文档结构、文本和命令。
  2. 编译 LaTeX 源代码:使用 LaTeX 编译器(如 pdflatex、xelatex、lualatex 等)编译源代码,生成 PDF 文件。
  3. 预览 PDF 文件:使用 PDF 阅读器预览编译后的 PDF 文件,内容会根据源代码自动排版。
  4. 修改源代码:根据需要修改 LaTeX 源代码,重复编译和预览步骤,直到满意为止。

基础语法

LaTeX文档基础结构

一份完整LaTeX文档分为三部分:文档类声明、导言区、正文区

  • 文档类:定义整篇文档类型(文章、报告、书籍)
  • 导言区:放在\begin{document}之前,加载宏包、全局配置
  • 正文区:\begin{document}\end{document}之间,所有正文内容
  • % 为注释符号,该行后续内容不会参与编译
\documentclass{article}
% 导言区:加载宏包
\usepackage{ctex} % 中文支持宏包
\usepackage{amsmath} % 数学公式宏包

\begin{document}

你好,LaTeX!

这是一份最小示例文档。

\end{document}

你好,LaTeX!

这是一份最小示例文档。

常用文档类:

  1. article:短篇文章、会议论文
  2. report:课程报告、学位报告,支持分章节
  3. book:书籍排版

文档结构与排版

文档结构与排版主要解决文档的「骨架」问题:标题怎么排、章节怎么分、目录怎么生成、页面编辑和页眉页脚怎么设置。这些内容只需设置一次,全文自动生效,这正是 LaTeX 处理长文档的核心优势。

标题作者与日期

三步走:在导言区声明信息,在正文区调用 \maketitle 渲染。

\documentclass{ctexart}

\title{论文标题} % 标题(必填,想渲染标题区就必须定义)
\author{张三 \and 李四} % 作者,\and 分隔多位作者
\date{\today} % 日期:\today 自动当天;{} 空参数表示不显示

\begin{document}

\maketitle % 在这里渲染标题区(居中的标题、作者、日期)

\end{document}

命令作用常用写法
\title{...}声明标题标题中可用 \\ 手动换行
\author{...}声明作者张三 \and 李四;\thanks 可加脚注注明单位
\date{...}声明日期\today 当天;固定日期手写;{} 隐藏
\maketitle渲染标题区放在正文区开头

章节命令与自动编号

章节是结构化文档的基本单位,LaTeX 用一组命令表达层级,编号全部自动。

命令层级适用文档类
\part{...}部分(0 级,编号独立)article / report / book
\chapter{...}章(1 级,独立起页)仅 report / book
\section{...}节(article 中的1级)全部
\subsection{...}小节(2级)全部
\subsubsection{...}小小节(3级)全部
\paragraph{...}带标题的段落(不编号)全部

两件事最能体现「自动」的价值:一是中间插入新章节,后面编号自动顺延;二是命令加星号(如 \section*{...})表示不编号、不进目录。

实例:章节与脚注

\documentclass{ctexart}
\begin{document}

\section{引言} 这是引言的内容。所有章节的编号都由 LaTeX 自动生成。

\subsection{研究背景} 这里介绍研究背景\footnote{这是一条脚注,编号与排版都是自动的。}。
\subsection{研究意义} 这里说明研究意义。

\section{方法}
\subsection{数据采集}
\subsubsection{样本选择} 层级编号到 subsubsection 为第三层。
\subsection{模型设计}

\section{结论}

\end{document}

\footnote{脚注内容} 在所在位置打上编号,把内容排到本页底部,编号全文连续,因此脚注里不可以再嵌套 \footnote

目录生成

目录只需要一个命令:\tableofcontents,它会扫描全文的章节命令,自动生成带页码的目录。

实例:生成目录

\documentclass{ctexart}
\begin{document}

\tableofcontents
% 目录单独成页,正文从下一页开始
\newpage

\section{引言}
引言内容。

\subsection{研究背景}
这里介绍研究背景。

\section{方法}
方法内容。

\section{结论}
结论内容。

\end{document}

目录页码靠 .aux 文件传递,所以新增章节后目录不会立刻正确,再编译一遍就即可。

想控制目录深度,可在导言区设置:\setcounter{tocdepth}{2} 表示只收录到 subsection;配合 \setcounter{secnumdepth}{2} 可以同时控制正文里编号到第几层。

页面设置:geometry 宏包

页边距、纸张大小这些页面参数,统一交给 geometry 宏包管理。

实例:常用页面设置

% 写法一:选项直接跟在宏包名前的方括号里(选项少时最常用)
\usepackage[a4paper, margin=2.5cm]{geometry}

% 写法二:先加载,再用 \geometry 集中设置(选项多时更清晰)
\usepackage{geometry}
\geometry{
a4paper, % 纸张:A4
margin=2.5cm, % 四边页边距统一 2.5 厘米
includefoot % 页脚算进版心,避免页脚「悬」在页边距外
}

A4 页面,四边边距均为 2.5 cm。

版心区域(由 geometry 宏包控制,实际效果见编译后的 PDF)。

两种写法效果完全相同,任选其一。注意宏包选项永远写在方括号 [] 里——把选项写进花括号 {} 是新手高频错误。

选项含义示例
margin四边统一边距margin=2.5cm
top / bottom / left / right单独控制某一边left=3cm,right=3cm
a4paper / a5paper / letterpaper纸张规格a4paper
landscape横向页面横向幻灯片或宽表
textwidth / textheight直接指定版心宽高textwidth=15cm

国内论文常用「奇偶页对称装订」:加 bindingoffset=1cm 可以给装订边额外留出1厘米。

页眉页脚:fancyhdr 宏包

fancyhdr 把页眉和页脚各分成左、中、右三个槽位,你想放什么就填什么。

命令控制的槽位
\fancyhead[L]{...}页眉左侧
\fancyhead[C]{...}页眉中间
\fancyhead[R]{...}页眉右侧
\fancyfoot[L]{...}页脚左侧
\fancyfoot[C]{...}页脚中间
\fancyfoot[R]{...}页脚右侧

实例:经典学术页眉页脚

\documentclass{ctexart}
\usepackage[a4paper, margin=2.5cm]{geometry}
\usepackage{fancyhdr}

\pagestyle{fancy} % 启用 fancyhdr 页面风格
\fancyhf{} % 先清空全部槽位,避免残留默认页码
\fancyhead[L]{\nouppercase\leftmark} % 页眉左侧:当前一级章节名
\fancyhead[R]{第 \thepage 页} % 页眉右侧:页码
\fancyfoot[C]{ LaTeX 引导教程} % 页脚中间:自定义文字
\renewcommand{\headrulewidth}{0.4pt} % 页眉下方横线的粗细

\begin{document}

\section{页面布局}
正文与页面的距离由geometry宏包控制,包括页边距、纸张、页眉页脚区域。
合理的页面边距能让文档更易读,学术文档通常要求上下2.5厘米、左右2.5厘米左右。
页面布局参数一旦在导言区设置好,全文自动生效,不需要逐页调整

\section{页眉页脚}
faneyhdr把页眉和页脚各分成左、中、右三个槽位,可以自由组合内容。
页眉常放章节名与页码,页脚常放页码或文档名,学术期刊的模板都有严格规定。
页码1会随页面自动递增,交叉引用里的页码也由它提供。

\end{document}

\markright\leftmark 是两个「动态书签」,LaTeX 在排版每一页时会自动记录当前所在的章节,写入对应的书签;页码随之自动更新。

命令作用使用建议
\newpage结束当前页,从新页继续日常最推荐这个
\clearpage换页并先输出所有未处理的浮动图表章节收尾、文档末尾用它更保险
\linebreak在此处强制断行并两端对齐少用,交给LaTeX自动断行
\pagebreak建议在此处换页(可与 \nopagebreak 对比体会)少用

不要频繁手动 \newpage 去「对齐」页面——让 LaTeX 自动分页,文档改起来才不会全盘错位。手动换页只用于结构性断点,比如目录后、章节间。

小结

功能命令 / 宏包所属位置
标题区\title / \author / \maketitle导言区声明,正文渲染
章节\section / \subsection / \subsubsection正文区
脚注\footnote{...}正文区(通常紧跟文字)
目录\tableofcontents导言之后,正文之前
页面边距geometry 宏包导言区
页眉页脚fancyhdr 宏包导言区

文字格式与列表

文字格式与列表可处理正文的「血肉」:字体样式怎么切换、字号怎么调、三种列表环境怎么用、对齐方式怎么控制。 原则依旧:这些是语义命令,你告诉 LaTeX「这是强调」,具体长什么样由文档类决定。

字体样式

常用样式一共五种,都是「命令 + 花括号」的形式,作用于括号内的文字。

效果命令说明
加粗\textbf{...}bold face
斜体\textit{...}中文会自动映射为楷体
下划线\underline{...}正式排版中慎用,欧美习惯用斜体代替
等宽\texttt{...}typewriter,代码、命令、文件名专用
强调\emph{...}智能强调:正文里变斜体,斜体里变正体

实例:字体样式

\documentclass{ctexart}
\begin{document}
\textbf{加粗文字}、\textit{斜体文字}、\underline{下划线文字}、\texttt{等宽文字}。

中文强调用 \emph{重点},英文强调用 \emph{emphasis}。

组合使用:\textbf{加粗且\textit{斜体}},\texttt{代码里也可以\textbf{加粗}}。
\end{document}

注意输出里的一个细节:中文的「斜体」实际显示为楷体——汉字没有斜体传统,ctex自动用楷体承担「倾斜」的强调职能,这是正确的本地化处理。 \emph 与 \textit 的区别在于「智能」:在已经是斜体的文字里,\emph 会自动切换回正体,产生对比强调;写论文时优先用 \emph。

不要用下划线强调内容——那是打字机时代的遗产。学术排版中强调用斜体或加粗就够了。

字号调整

西文字号是一组「声明型」命令,从 \tiny 到 \Huge 共十级,以 \normalsize 为基准按比例缩放。

由小到大命令
1–5级(小)\tiny\scriptsize\footnotesize\small\normalsize
6–10级(大)\large\Large\LARGE\huge\Huge

实例:字号与中文字号

\documentclass{ctexart}
\begin{document}
{\tiny tiny 脚注级}、{\scriptsize scriptsize}、{\footnotesize footnotesize}、{\small small}、正文默认 \normalsize。

{\large large}、{\Large Large}、{\LARGE LARGE}、{\huge huge}、{\Huge Huge}。

% 中文论文更常用「号数」直接指定:\zihao{号数}
中文字号:{\zihao{5}五号(正文常用)}、{\zihao{-4}小四(论文正文)}、{\zihao{4}四号(节标题)}。
\end{document}

字号命令是「开关」不是「范围」——写 \large 之后的所有文字都会变大,直到分组结束。所以务必用花括号包住:{\large 大字},后面的小字才不受影响。

中文文档建议直接用 \zihao{号数};数字前加减号表示「小几号」,\zihao{-4} 就是大名鼎鼎的「小四」——国内高校论文正文的标配字号。

三种列表环境

列表是 LaTeX 里最常用的「环境」(\begin\end 成对出现),三种环境对应三种语义。

环境用途标签
itemize并列要点,无顺序圆点、短横线等符号
enumerate有顺序的步骤1. 2. 3. 编号
description词条解释自定义词条名

实例:三种列表与嵌套

\documentclass{ctexart}
\begin{document}

无序列表 itemize:
\begin{itemize}
\item 第一项
\item 第二项
\begin{itemize}
\item 嵌套的子项,符号自动变化
\item 又一个子项
\end{itemize}
\end{itemize}

有序列表 enumerate:
\begin{enumerate}
\item 安装发行版
\item 选择编辑器
\item 编译第一个文档
\end{enumerate}

描述列表 description:
\begin{description}
\item[LaTeX] 一套基于 TeX 的排版系统
\item[宏包] 即插即用的功能扩展包
\end{description}

\end{document}

无序列表 itemize:

  • 第一项
  • 第二项
    • 嵌套的子项,符号自动变化
    • 又一个子项

有序列表 enumerate:

  1. 安装发行版
  2. 选择编辑器
  3. 编译第一个文档

描述列表 description:

LaTeX 一套基于 TeX 的排版系统

宏包 即插即用的功能扩展包

默认列表表不需要任何额外设置;深层自动缩进,符号逐级变化(圆点、短横线、星号……),最多可嵌套四层。 默认列表的行间距宽松,论文里常需要紧凑版本,enumitem 宏包提供精细控制。

实例:enumitem 定制列表

\documentclass{ctexart}
\usepackage{enumitem} % 导入宏包
\begin{document}
\begin{itemize}[label=\textsquare, noitemsep] % 方块标签 + 去掉条目间额外间距
\item 紧凑的无序列表
\end{itemize}

\begin{enumerate}[label=(\alph*)] % 编号样式改为 (a) (b) (c)
\item 第一点
\item 第二点
\end{enumerate}
\end{document}
  • □ 紧凑的无序列表
  1. (a) 第一点
  2. (b) 第二点

对齐方式

正文默认两端对齐(justified),这是排印长文档的标准做法,不需要任何设置。 需要局部改变对齐时,用三个环境:centerflushleftflushright

实例:居中与右对齐

\documentclass{ctexart}
\begin{document}
正文默认两端对齐,最后一行靠左,这是排版学的标准做法。

\begin{center}
居中的文字\\
第二行仍然居中
\end{center}

\begin{flushright}
右对齐的文字\\
署名常用右对齐
\end{flushright}

\end{document}

写法特点适用场合
\begin{center}...\end{center}环境形式,自带上下间距正文中独立成段的居中
\centering声明命令,不额外加间距图表浮动体内部,第8篇见
\begin{flushright}...\end{flushright}右对齐环境署名、日期

小结

需求命令易错点
加粗/斜体/等宽\textbf / \textit / \texttt命令只作用于花括号内
强调\emph中文映射为楷体
改字号\large ...\zihao{n}忘记花括号导致后面全变大
列表itemize / enumerate / description嵌套时 \begin \end 必须成对
居中center 环境或 \centering两者行间行为不同

数学公式与符号

数学排版是LaTeX皇冠上的明珠,也是大多数人选择它的第一理由。 本篇覆盖数学公式的地基:行内与行间公式、上下标、分数、根号、希腊字母与常用符号表。

文中每个「写法 \to 效果」对照均为实时渲染,你在文档中看到的效果,就是 LaTeX 排出来的样子。

行内公式与行间公式

公式只有两种存在形态:嵌在句子里的行内公式,用一对 $ 包住;独立成行居中的行间公式,用 \[\] 包住。

\documentclass{ctexart}
\usepackage{amsmath}
\usepackage{amssymb}
\begin{document}
一元二次方程 $ax^2 + bx + c = 0$ 的求根公式为
\[
x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a},
\]
其中判别式 $\Delta = b^2 - 4ac$ 决定根的个数。
\end{document}

行内公式与行间公式效果

形态写法效果什么时候用
行内公式$...$与文字同高,嵌在句中简单、被句子引用的公式
行间公式\[...\]独立成行、居中、字号更大重要公式、复杂公式

两个习惯要避免:一是用旧式 $$...$$ 写行间公式,它对间距的控制有缺陷,统一用 \[...\];二是一个句子被行间公式打断后,行间公式前不要有空行——公式还在句子里,没有分段。

上下标

^ 是上标,_ 是下标,都只作用于紧随其后的一个字符或一个花括号组。

写法渲染结果
x^2x2x^2
a_{ij}aija_{ij}
2^{n+1}2n+12^{n+1}
x_i^2xi2x_i^2
x^{i^2}xi2x^{i^2}
e^{-t}ete^{-t}

对比第四、五行的写法:x_i^2 是「第 i 个 x 的平方」,x^{i^2} 是「x 的 i2i^2 次方」——花括号决定了作用的范围,差之毫厘谬以千里。

上下标多于一个字符就必须加花括号。\hat{x}10 会被排成 x^10\hat{x}10(x加帽子,后面直接跟数字10,不是上标),正确写法是 \hat{x}^{10},最终排版为 x^10\hat{x}^{10}

分数与根号

\frac{分子}{分母} 生成分数,\sqrt{被开方数} 生成根号,n 次根写成 \sqrt[n]{...}

写法渲染结果
\frac{a+b}{c}a+bc\frac{a+b}{c}
\frac{1}{1+\frac{1}{x}}11+1x\frac{1}{1+\frac{1}{x}}
\sqrt{2}2\sqrt{2}
\sqrt[3]{x^2+1}x2+13\sqrt[3]{x^2+1}
(\frac{a}{b})(ab)(\frac{a}{b})
\left(\frac{a}{b}\right)(ab)\left(\frac{a}{b}\right)

最后一对值得专门记:普通括号不会随着内容长高,\left(\right) 让括号自动适配内容高度,包分数、包矩阵时必用。

行内公式里的分数会被自动压缩(分母下移、字号变小),如果嫌它太小,把 \frac 换成 \dfrac(display frac),分数就会保持行间的大小。

希腊字母

希腊字母的命令就是「反斜杠 + 英文名」,大小写靠命令首字母控制。

小写希腊字母

命令效果命令效果
\alphaα\alpha\betaβ\beta
\gammaγ\gamma\deltaδ\delta
\epsilonϵ\epsilon\varepsilonε\varepsilon
\thetaθ\theta\lambdaλ\lambda
\muμ\mu\piπ\pi
\sigmaσ\sigma\omegaω\omega
\phiϕ\phi\varphiφ\varphi

大写希腊字母

命令效果命令效果
\GammaΓ\Gamma\DeltaΔ\Delta
\SigmaΣ\Sigma\OmegaΩ\Omega

注意两点:大写命令仅首字母大写(\Sigma 不是 \SIGMA);\epsilon\varepsilon\phi\varphi 是同一字母的两种字形,数学惯例各有用途,论文里保持统一即可。

常用符号速查

高频符号按用途分三张表,效果列均为实时渲染。

命令效果命令效果
\times×\times\div÷\div
\pm±\pm\mp\mp
\cdot\cdot\leq\leq
\geq\geq\neq\neq
\approx\approx\equiv\equiv
\ll\ll\gg\gg
命令效果命令效果
\in\in\notin\notin
\subset\subset\subseteq\subseteq
\cup\cup\cap\cap
\emptyset\emptyset\infty\infty
\forall\forall\exists\exists
\Rightarrow\Rightarrow\Leftrightarrow\Leftrightarrow
命令效果命令效果
\partial\partial\nabla\nabla
\to\to\mapsto\mapsto
\mathrm{d}xdx\mathrm{d}x\hat{x}x^\hat{x}
\bar{x}xˉ\bar{x}\vec{x}x\vec{x}

大运算符:求和、积分、极限

\sum\int\lim 是三个最常用的大运算符,配合上下标使用。

\sum_{i=1}^n i = \frac{n(n+1)}{2} \\[1em]
\int_{0}^{\infty} e^{-x^2} \mathrm{d}x = \frac{\sqrt{\pi}}{2} \\[1em]
\lim_{n\to\infty} \left(1+\frac{1}{n}\right)^n = e
i=1ni=n(n+1)20ex2dx=π2limn(1+1n)n=e\sum_{i=1}^n i = \frac{n(n+1)}{2} \\[1em] \int_{0}^{\infty} e^{-x^2} \mathrm{d}x = \frac{\sqrt{\pi}}{2} \\[1em] \lim_{n\to\infty} \left(1+\frac{1}{n}\right)^n = e

行间公式里,求和号的上下标位于符号正上/正下方;放进行内公式时会自动压缩到侧边。若在行内也想保持「上下」形态,外面套一层 \displaystyle 即可。

两个必备宏包:amsmath 与 amssymb

amsmathamssymb 是数学排版的「官方扩展库」,写公式前建议加载。

宏包提供什么
amsmath更多公式环境(align 等,第7篇)、\dfrac / \tfrac、公式编号控制
amssymb扩展数学符号,如 \mathbb 空心字体

数学里常用的字体效果命令也来自这两个宏包:

写法效果
\mathbb{R}R\mathbb{R}
\mathcal{F}F\mathcal{F}
\vec{v}v\vec{v}
\mathrm{e}^{\mathrm{i}\pi}eiπ\mathrm{e}^{\mathrm{i}\pi}

最后一行是个排版细节:自然对数的底e、虚数单位i,如果直接写,会被当作变量排成斜体;用 \mathrm{} 包住排成正体,才符合出版规范。 公式里不要出现中文和全角标点。$\(\alpha\)+\(\beta\)$ 这样用输入法打出来的全角加号、Unicode希腊字母,都是错误用法——公式内容必须用命令输入,中文说明放在 $ 之外。

综合示例:真实文档编译

把本篇内容放进一份完整文档里编译:

\documentclass{ctexart}
\usepackage{amsmath} % 数学公式增强宏包,公式排版标配
\usepackage{amssymb}
\begin{document}

一元二次方程 $ax^2 + bx + c = 0$ 的求根公式为
\[
x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a},
\]
其中判别式 $\Delta = b^2 - 4ac$ 决定根的个数。

数学中最优美的公式当属欧拉公式
\[
\mathrm{e}^{\mathrm{i}\pi} + 1 = 0,
\]
它把五个最重要的常数联系在了一起。

\end{document}

综合示例编译效果

小结

需求写法
行内公式$...$
行间公式\[...\]
上下标\(\hat{x}\){10}、a_{ij}(多字符必须花括号)
分数/根号\frac{a}{b}\sqrt[n]{x}
自适应括号\left( \right)
行内大分数\dfrac{a}{b}
正体字符\mathrm{e}

数学公式进阶

上一篇解决了单行公式,这一篇处理「大块头」:矩阵、方程组、多行推导和公式编号。 它们全部来自 amsmath 宏包——这也是为什么所有数学文档的导言区都该有一行 \usepackage{amsmath}

矩阵:matrix 家族

矩阵用环境表示:& 分隔列,\\ 换行,环境名决定外层的括号样式。

环境外层样式典型用途
matrix无括号拼接数据块
pmatrix圆括号 ()普通矩阵
bmatrix方括号 []系数矩阵、线性代数
Bmatrix大括号 {}集合表示
vmatrix单竖线 | |行列式
Vmatrix双竖线 || ||范数

pmatrix(圆括号矩阵)

\[
\begin{pmatrix}
1 & 2 \\
3 & 4
\end{pmatrix}
\]
(1234)\begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}

bmatrix(方括号矩阵)

\[
\begin{bmatrix}
1 & 0 \\
0 & 1
\end{bmatrix}
\]
[1001]\begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}

vmatrix(行列式)

\[
\begin{vmatrix}
a & b \\
c & d
\end{vmatrix}
= ad - bc
\]
abcd=adbc\begin{vmatrix} a & b \\ c & d \end{vmatrix} = ad - bc

实例:带省略号的 n 阶矩阵

\[
\begin{pmatrix}
a_{11} & \cdots & a_{1n} \\
\vdots & \ddots & \vdots \\
a_{n1} & \cdots & a_{nn}
\end{pmatrix}
\]
(a11a1nan1ann)\begin{pmatrix} a_{11} & \cdots & a_{1n} \\ \vdots & \ddots & \vdots \\ a_{n1} & \cdots & a_{nn} \end{pmatrix}

三种省略号各司其职:\cdots 横向、\vdots 纵向、\ddots 斜向。矩阵元素多时,务必用省略号而不是把几十个元素全部敲进去。 行内公式中放不下大矩阵时,可以用 smallmatrix 环境,它会压缩行距与字号。

多行推导:align 环境

align 是数学推导的主力环境:多行公式按 & 标记的位置对齐,每行自动编号。

实例:两行推导

\begin{align}
(a+b)^2 &= a^2 + 2ab + b^2 \\
&= a^2 + b^2 + 2ab
\end{align}
(a+b)2=a2+2ab+b2=a2+b2+2ab\begin{align} (a+b)^2 &= a^2 + 2ab + b^2 \\ &= a^2 + b^2 + 2ab \end{align}

规则只有两条:& 放在「对齐锚点」处(通常是等号前),它会把前后分成两列;\\ 换行。每行都会自动获得编号。

实例:定积分计算

\begin{align}
\int_0^1 x^2 \,\mathrm{d}x
&= \left[ \frac{x^3}{3} \right]_0^1 \notag \\[2pt]
&= \frac{1}{3}
\end{align}
01x2dx=[x33]01=13\begin{align} \int_0^1 x^2 \,\mathrm{d}x &= \left[ \frac{x^3}{3} \right]_0^1 \notag \\[2pt] &= \frac{1}{3} \end{align}

这里出现了两个新写法:\notag 让某一行不编号(推导中间行不需要编号时用它);\\ 后面的 [2pt] 微调行距,可省略。

不需要任何编号时,用带星号的 align* 环境——这与章节命令 \section* 的逻辑一致:星号等于「不编号、不进目录」。

方程组与分段函数:cases 环境

cases 环境专门生成左侧一个大括号的分组结构,方程组和分段函数的标准写法。

实例:二元一次方程组

\[
\begin{cases}
x + y = 5 \\
2x - y = 1
\end{cases}
\]
{x+y=52xy=1\begin{cases} x + y = 5 \\ 2x - y = 1 \end{cases}

实例:分段函数

\[
f(x) =
\begin{cases}
-x, & x < 0 \\
x, & x \ge 0
\end{cases}
\]
f(x)={x,x<0x,x0f(x) = \begin{cases} -x, & x < 0 \\ x, & x \ge 0 \end{cases}

分段函数里 & 的作用变了:把「函数值」和「成立条件」分成两列,第二列条件会自动与右侧对齐。

公式编号与引用

行间公式 \[...\] 不编号;需要被引用的公式,用 equation 环境,它会自动编号。

实例:编号与引用

\documentclass{ctexart}
\usepackage{amsmath}
\begin{document}
由式 \eqref{eq:pyth} 可知,直角三角形的斜边满足
\begin{equation}\label{eq:pyth}
a^2 + b^2 = c^2,
\end{equation}
而等差数列的前 $n$ 项和为
\begin{equation}\label{eq:sum}
S_n = \frac{n(a_1 + a_n)}{2}.
\end{equation}
\end{document}

由式(1)可知,直角三角形的斜边满足

a2+b2=c2(1)a^2 + b^2 = c^2 \tag{1}

而等差数列的前 nn 项和为

Sn=n(a1+an)2(2)S_n = \frac{n(a_1 + a_n)}{2} \tag{2}

两个公式分别自动编号为 (1)、(2),引用时用 \eqref{key} 得到带括号的编号。

三步记住:equation 负责编号,\label{key} 打标签,\eqref{key} 引用(自动带括号)。 标签的取名建议【类型:内容】,如 eq:pytheq:sum——公式多了以后,eq:3 这种名字会降低文档的可读性。

引用显示 ?? 说明 aux 还没更新,再编译一遍。

超长公式折行:split 环境

一个公式长得超过版心宽度时,放进 equation 里再用 split 折行——整段保持同一个编号。

\begin{equation}
\begin{split}
\sum_{i=1}^n (x_i - \bar{x})(y_i - \bar{y})
&= \sum_{i=1}^n x_i y_i - n\bar{x}\bar{y} \\
&= \frac{1}{n}\sum_{i=1}^n x_i y_i - \bar{x}\bar{y}
\end{split}
\end{equation}
i=1n(xixˉ)(yiyˉ)=i=1nxiyinxˉyˉ=1ni=1nxiyixˉyˉ\begin{equation} \begin{split} \sum_{i=1}^n (x_i - \bar{x})(y_i - \bar{y}) &= \sum_{i=1}^n x_i y_i - n\bar{x}\bar{y} \\ &= \frac{1}{n}\sum_{i=1}^n x_i y_i - \bar{x}\bar{y} \end{split} \end{equation}

splitalign 的区别:align多个公式,各编各的;split一个公式拆成几行,共享一个编号。split 必须住在 equation(或 \[...\])里面。

常见公式错误排查

数学模式的报错占了新手报错的一大半,高频错误如下:

错误写法问题正确写法
文本中直接用 \alpha数学命令只能用于数学模式α\alpha
a1+ba - 1 + b_^ 后面缺内容补上:a1+b2a_1 + b^2
\dfrac没加载 amsmath 却用 \dfrac导言区 \usepackage{amsmath}
\a & b \\ c & d普通行间公式里乱用 && 只属于 matrixalign 等环境
公式里中文说明字体与断行全乱说明文字放到 外,或用 \text{中文}
align 里忘了 \\多行挤成一行每行末尾(最后一行除外)加 \\

其中 \text{...}amsmath 宏包提供,这里单独说明:当需要在数学公式内部嵌入少量文本(例如条件说明「当 (x>0) 时」、物理单位等场景),使用 \text{} 包裹文本,可保持文字为正体,并维持合理字符间距。

小结

需求环境 / 命令
矩阵pmatrix / bmatrix / vmatrix&分列,\\换行)
多行推导(每行编号)align,星号版不编号
方程组 / 分段函数cases
单个编号公式equation + \label
引用公式编号\eqref{key}
长公式折行equation 内嵌 split

插图与表格

图表是论文的骨架件。本篇讲四件事:插图命令与浮动体、基础表格、学术标准的三线表、合并单元格。

LaTeX 对图表的管理哲学与编号一致:你只管放内容和起标题,位置、编号、引用全部自动。

插图:graphicx 宏包

插图只需要两条命令:导言区加载 graphicx,正文里 \includegraphics 放图片文件。

常用选项含义示例
width宽度,可用相对值width=0.8\textwidth(版心宽的 80%)
height高度height=5cm
scale缩放倍数scale=0.5
angle旋转角度angle=90

文件名建议不带扩展名:写 sin 而不是 sin.png,LaTeX 会自动按当前编译器支持的格式查找(XeLaTeX 支持 PDF、PNG、JPG 等),换格式不用改源码。

💡 控制图片大小时优先用 width=\textwidth 的比例值,而不是 scale —— 前者保证图片永远不超出版心,后者在不同字号设置下可能意外溢出。

浮动体:figure 环境

图片不该直接躺在正文流里,标准做法是放进 figure 浮动体环境。

实例:标准插图

\documentclass{ctexart}
\usepackage{graphicx} % 插图必备宏包
\begin{document}
正弦函数 $y = \sin x$ 的图像如图~\ref{fig:sin} 所示。

\begin{figure}[htbp] % 浮动体环境,位置参数见下表
\centering % 图片在浮动体内居中
\includegraphics[width=0.6\textwidth]{sin}
\caption{正弦函数曲线} % 图题,编号自动生成
\label{fig:sin} % 标签,供 \ref 引用
\end{figure}
\end{document}
正弦函数曲线

图 1:正弦函数曲线

「我的图片怎么跑到别的地方去了?」——这不是 bug,是浮动机制在起作用:LaTeX 会为每张图选择不产生大空隙的位置。真需要钉死位置时,用 float 宏包的 [H] 参数(大写,表示 here 且不许动)。

参数含义优先级说明
hhere,就在源码位置只是建议,版面放不下时 LaTeX 会自行调整
ttop,本页顶部学术论文最常见的选择
bbottom,本页底部常与 t 搭配
pfloat page,独立浮动页图表多时自动集中成附录页
!(如 [!h])放宽排版约束强烈要求时叠加使用

基础表格:tabular 环境

表格的语法骨架与矩阵一样:& 分列,\\ 换行,列格式在环境参数里声明。

实例:带全边框的表格

\documentclass{ctexart}
\begin{document}
\begin{tabular}{|l|c|r|} % 列格式:左对齐、居中、右对齐,竖线分隔
\hline % 顶部横线
姓名 & 年龄 & 得分 \\ % & 分列,\\ 换行
\hline
张三 & 20 & 92 \\
李四 & 21 & 88 \\
\hline % 底部横线
\end{tabular}
\end{document}
姓名年龄得分张三2092李四2188\begin{array}{|l|c|r|} \hline \text{姓名} & \text{年龄} & \text{得分} \\ \hline \text{张三} & 20 & 92 \\ \text{李四} & 21 & 88 \\ \hline \end{array}
列格式符号含义
l/c/r该列左对齐 / 居中 / 右对齐
|在该位置画竖线
p{2cm}固定列宽,单元格内自动换行

学术标准:booktabs 三线表

翻开任何一本正规出版物,表格都是「三条横线、零条竖线」——这叫三线表,由 booktabs 宏包提供。

实例:三线表

\documentclass{ctexart}
\usepackage{booktabs} % 三线表专用宏包
\begin{document}
\begin{tabular}{lccc} % 三线表不使用任何竖线
\toprule % 顶线,最粗
算法 & 准确率 & 召回率 & F1 \\
\midrule % 中线,较细
模型 A & 0.91 & 0.88 & 0.89 \\
模型 B & 0.93 & 0.90 & 0.91 \\
\bottomrule % 底线,最粗
\end{tabular}
\end{document}
算法准确率召回率F1模型 A0.910.880.89模型 B0.930.900.91\begin{array}{lccc} \hline \text{算法} & \text{准确率} & \text{召回率} & \text{F1} \\ \hline \text{模型 A} & 0.91 & 0.88 & 0.89 \\ \text{模型 B} & 0.93 & 0.90 & 0.91 \\ \hline \end{array}

💡 期刊和毕业论文的格式规范几乎都要求三线表。日常作业里用 |\hline 带全边框表格没有问题,但投稿前请务必改成 booktabs

合并单元格:multirow 与 multicolumn

复杂表头需要合并:横向合并用 \multicolumn(LaTeX 内置),纵向合并用 \multirow(需要加载 multirow 宏包)。

实例:双层表头

\documentclass{ctexart}
\usepackage{booktabs}
\usepackage{multirow} % 纵向合并单元格
\begin{document}
\begin{tabular}{lcc}
\toprule
\multirow{2}{*}{数据集} & \multicolumn{2}{c}{准确率} \\
\cmidrule(lr){2-3} % 只在第2~3列画部分横线
& 训练集 & 测试集 \\
\midrule
MNIST & 0.99 & 0.98 \\
CIFAR-10 & 0.95 & 0.91 \\
\bottomrule
\end{tabular}
\end{document}

命令语法说明
\multirow\multirow{行数}{宽度}{内容}纵向跨行,跨的行里对应位置留空
\multicolumn\multicolumn{列数}{列格式}{内容}横向跨列,需要重写该格的列格式
\cmidrule\cmidrule(lr){2-3}部分横线,(lr) 表示两端留一点空隙,更精致

表格标题与整体浮动

表格同样住在浮动体里,环境是 table,其余套路与 figure 完全一致。

实例:带编号的表格

\begin{table}[htbp]
\centering
\caption{实验结果对比} % 表题(惯例在表格上方)
\label{tab:result}
\begin{tabular}{lcc}
\toprule
数据集 & 训练集 & 测试集 \\
\midrule
MNIST & 0.99 & 0.98 \\
CIFAR-10 & 0.95 & 0.91 \\
\bottomrule
\end{tabular}
\end{table}

表 1:实验结果对比

数据集训练集测试集MNIST0.990.98CIFAR-100.950.91\begin{array}{lcc} \hline \text{数据集} & \text{训练集} & \text{测试集} \\ \hline \text{MNIST} & 0.99 & 0.98 \\ \text{CIFAR-10} & 0.95 & 0.91 \\ \hline \end{array}

两条不成文的惯例:表题放表格上方,图题放图片下方;图表标签前缀分别用 tab:fig:,引用时一眼就能认出类型。 表格比版心宽时有两个急救方案:整个 tabular 外套 \resizebox{\textwidth}{!}{...} 等比例缩放;或用 tabularx 宏包自动分配列宽。

小结

需求命令 / 环境
插图\includegraphics[width=0.8\textwidth]{文件名}
图表浮动体figure / table + [htbp] + \centering + \caption + \label
表格骨架tabular& 分列、\\ 换行
三线表booktabs\toprule \midrule \bottomrule
合并单元格\multirow\multicolumn
部分横线\cmidrule(lr){2-3}

交叉引用与文献管理

长文档的两大自动化利器:交叉引用(章节、图表、公式之间互相指向)和参考文献管理(BibTeX)。 它们的共同哲学:编号永远是自动的,你只负责起一个「标签名」。

标签与引用:\label\ref

交叉引用三步走:在被引用处用 \label{标签} 打标签,在引用处用 \ref{标签}(或 \pageref\eqref)获取编号。

命令输出什么典型搭配
\label{key}无输出,给前面的对象打标签紧跟 \section\captionequation
\ref{key}编号数字(如 3、1.2)\ref{sec:method}
\eqref{key}带括号编号(如 (1))\eqref{eq:loss}(公式专用)
\pageref{key}所在页码见第\pageref{sec:method}

\label必须紧跟被引用的命令之后、写在同一个环境层级里——\section{方法}\label{sec:method} 是正确姿势;若把 \label 写到下一段去,引用到的就是错误的对象。公式的 \label 要写在 equation 环境内部。

实例:章节、公式、图片互引

\documentclass{ctexart}
\usepackage{amsmath, graphicx}
\begin{document}

\section{方法}\label{sec:method}
本节介绍模型结构,损失函数见式\eqref{eq:loss},
实验分析见第\ref{sec:result} 节。

\begin{equation}\label{eq:loss}
L = \sum_{i=1}^n \left( y_i - \hat{y}_i \right)^2
\end{equation}

\section{实验结果}\label{sec:result}
方法(第\ref{sec:method} 节)的损失由式\eqref{eq:loss} 度量,
曲线形态见图\ref{fig:sin}。

\begin{figure}[htbp]
\centering
\includegraphics[width=0.5\textwidth]{sin}
\caption{正弦曲线}
\label{fig:sin}
\end{figure}

\end{document}

1 方法

本节介绍模型结构,损失函数见式 (1),实验分析见第 2 节。

L=i=1n(yiy^i)2(1)L = \sum_{i=1}^n \left( y_i - \hat{y}_i \right)^2 \tag{1}

2 实验结果

方法(第 1 节)的损失由式 (1) 度量,曲线形态见图 1。

正弦函数曲线

图 1:正弦函数曲线

章节公式图片交叉引用的编译效果: 所有引用都自动取到了正确编号。之后不管插入多少新章节、新公式,编号与引用会自动更新——这是 Word 里「手动改编号改到崩溃」的终极解药。

标签命名建议「前缀:内容」,常用的前缀约定如下。

前缀对象示例
sec:章节\label{sec:method}
fig:\label{fig:sin}
tab:\label{tab:result}
eq:公式\label{eq:loss}
chap:章(report/book)\label{chap:intro}

超链接:hyperref 宏包

加载 hyperref 后,所有 \ref\cite\url 自动变成可点击的链接,并在 PDF 里生成侧边书签栏。

实例:hyperref 常用配置

\usepackage[colorlinks=true, linkcolor=blue, % 正文引用:蓝色
citecolor=blue, urlcolor=blue]{hyperref}
% colorlinks=true 用颜色标记链接(默认红框很难看)
% 三个参数分别控制:内部引用 / 文献引用 / 网址的颜色

\url{https://uniresearch.uniplore.com/} % 网址排版:自动断行、可点击

配置后,文档中的引用、网址都会变成可点击的超链接。

例如:https://uniresearch.uniplore.com/

hyperref 几乎永远应该是导言区最后一个加载的宏包——它要等所有其他宏包就位后才能正确改造文档,放早了会莫名冲突。

参考文献:BibTeX 工作流

参考文献的正确姿势不是在文末手写列表,而是:文献信息存进 .bib 数据库,正文用 \cite 引用,BibTeX 程序自动生成格式化的文献列表。

先看文献数据库长什么样——每条文献是一个「条目」。

实例:refs.bib 文献数据库

@article{alexnet2012, % 条目类型:期刊论文
author = {Krizhevsky, Alex and Sutskever, Ilya and Hinton, Geoffrey E.},
title = {ImageNet Classification with Deep Convolutional Neural Networks},
journal = {Communications of the ACM},
year = {2017},
volume = {60},
pages = {84--90}
}

@book{goodfellow2016, % 条目类型:图书
author = {Goodfellow, Ian and Bengio, Yoshua and Courville, Aaron},
title = {Deep Learning},
publisher = {MIT Press},
year = {2016}
}

花括号里第一项是引用键(如 alexnet2012),正文里 \cite{alexnet2012} 就靠它找到这条文献;键名随意,但全文唯一。

条目类型对应文献关键字段
@article期刊论文author、title、journal、year
@inproceedings会议论文author、title、booktitle、year
@book图书author/editor、title、publisher、year
@phdthesis博士论文author、title、school、year
@misc / @online网页、报告等title、url、note、year

正文侧只有两条命令,放在文档末尾:

实例:引用与生成文献列表

\documentclass{ctexart}
\begin{document}
深度学习的突破源于 AlexNet~\cite{alexnet2012},
系统教材可参考~\cite{goodfellow2016}。

\bibliographystyle{plain} % 文献样式: plain 数字序号风格
\bibliography{refs} % 文献数据库文件(不带 .bib 扩展名)
\end{document}

深度学习的突破源于 AlexNet[2],系统教材可参考[1]

参考文献

[1] Goodfellow I, Bengio Y, Courville A. Deep Learning[M]. MIT Press, 2016.

[2] Krizhevsky A, Sutskever I, Hinton G E. ImageNet Classification with Deep Convolutional Neural Networks[J]. Communications of the ACM, 2017, 60: 84-90.

引用处自动出现 [1], [2],文末自动生成按引用顺序排列的文献列表——你没写过一行格式。

为什么要编译四遍

加了 BibTeX 之后,完整的编译变成四步,文件之间形成一条流水线。

步骤命令作用
1xelatex main生成 main.aux,记录正文引用了哪些键
2bibtex main读 .aux 与 refs.bib,生成 main.bbl 文献列表
3xelatex main把 .bbl 内容排进文档
4xelatex main引用编号稳定,显示正确

引用显示「??」的原因就藏在这条流水线里:没跑 bibtex、或跑完没再编译两遍。Overleaf 会自动帮你跑完全部步骤,本地推荐用 latexmk -pdf main.tex 一键代劳。

BibLaTeX:更现代的选择

BibTeX 是 1985 年的老库;后继者 biblatex(配合程序 biber)在中文场景下更值得了解。

维度BibTeXbiblatex + biber
诞生时间19852009 起
Unicode / 中文支持有限原生 UTF-8
样式定制需写 .bst 文件,门槛高LaTeX 语法,直观
中文国标需配置,较繁琐biblatex-gb7714-2015 宏包直接支持
适用建议老模板、期刊指定时用新项目、中文论文优先

实例:biblatex 基本用法

\usepackage[backend=biber, style=numeric]{biblatex} % backend 指定 biber
\addbibresource{refs.bib} % 注意带 .bib 扩展名

\begin{document}
深度学习的突破源于 AlexNet~\cite{alexnet2012}。

\printbibliography[title=参考文献] % 文档末尾打印参考文献
\end{document}

深度学习的突破源于 AlexNet[1]

参考文献

[1] Krizhevsky A, Sutskever I, Hinton G E. ImageNet Classification with Deep Convolutional Neural Networks[J]. Communications of the ACM, 2017, 60: 84-90.

命令从 bibtex 换成 biber,其余编译流水线完全相同。写中文毕业论文时,装上 biblatex-gb7714-2015 宏包、把 style 换成 gb7714-2015,即可满足国标著录格式。

小结

需求命令
打标签\label{前缀:名字}(紧跟被引用对象)
引用编号 / 页码 / 公式\ref\pageref\eqref
超链接hyperref(最后加载)
引用文献\cite{键名},文献存 .bib 数据库
生成文献列表BibTeX:\bibliography;biblatex:\printbibliography
一键编译latexmk -pdf main.tex

常用宏包与技巧

前几个章节用到的宏包已经不少,本篇做个系统收口:宏包速查、自定义命令、代码排版、多文件工程、latexmk与排错心法。 掌握这些「工具箱」内容,你就从会写LaTeX进化到会管理LaTeX项目。

常用宏包速查

宏包用 \usepackage[选项]{宏包名} 加载,全部放在导言区。

宏包用途本系列出现
geometry页面边距与纸张LaTeX文档结构与排版
fancyhdr页眉页脚LaTeX文档结构与排版
amsmath / amssymb数学公式增强 / 扩展符号LaTeX数学公式基础、LaTeX数学公式进阶
graphicx插图LaTeX插图与表格
booktabs / multirow三线表 / 纵向合并单元格LaTeX插图与表格
enumitem列表定制LaTeX文字格式与列表
xcolor颜色定义本章节介绍
listings代码排版本章节介绍
hyperref超链接与书签LaTeX交叉引用与文献管理
biblatex参考文献(现代方案)LaTeX交叉引用与文献管理
float图表强制定位 [H]LaTeX插图与表格

本地环境提示 File 'xxx.sty' not found 时,用 tlmgr install xxx 安装(TeX Live),MiKTeX则会自动下载。Overleaf自带几乎所有宏包,无此烦恼。

自定义命令:\newcommand

当同样的内容写了三遍以上,就该定义命令了。\newcommand{命令名}[参数个数][定义]

实例:三种自定义命令

% 无参数:把长命令缩短
\newcommand{\R}{\mathbb{R}} % 以后写 $\R$ 就是 $\mathbb{R}$

% 一个参数:封装固定格式
\newcommand{\email}[1]{\texttt{#1}} % #1 表示第一个参数

% 带默认值的可选参数:[参数个数][默认值]
\newcommand{\vecn}[2][n]{x_1, \dots, x_{#1}}
% 用法: $\vecn$ 得到 $x_1,\dots,x_n$
% $\vecn[5]$ 得到 $x_1,\dots,x_5$

\begin{document}
定义在 $\R$ 上的函数,向量 $\vecn$ 与 $\vecn[5]$。
联系邮箱 \email{uniresearch@email.uniplore.com}。
\end{document}

定义在 R\mathbb{R} 上的函数,向量 x1,,xnx_1, \dots, x_nx1,,x5x_1, \dots, x_5

联系邮箱 uniresearch@email.uniplore.com

命令用途注意
\newcommand定义新命令命令名不能与已有命令冲突
\renewcommand重定义已有命令改造默认样式时用,慎改基础命令
\newenvironment定义新环境语法同上,给出开始与结束代码

自定义环境的语法一并认识一下:

实例:自定义「注意」环境

\newenvironment{note}
{\par\medskip\noindent\textbf{注意:}\itshape} % 开始代码
{\par\medskip} % 结束代码

\begin{note}
这里的内容会自动以「注意:」开头并排成斜体。
\end{note}

**注意:**这里的内容会自动以「注意:」开头并排成斜体。

代码排版:listings 宏包

技术文档里贴代码,用 listings 宏包,语言高亮、行号、边框全自动。

实例:带高亮和行号的代码块

\documentclass{ctexart}
\usepackage{listings} % 代码排版宏包
\usepackage{xcolor} % 颜色支持

\lstset{ % 全局代码样式设置
basicstyle=\ttfamily\small, % 等宽字体、稍小字号
keywordstyle=\color{blue}, % 关键字蓝色
commentstyle=\color{gray}, % 注释灰色
stringstyle=\color{purple}, % 字符串紫色
numbers=left, % 行号在左侧
numberstyle=\tiny\color{gray},
showstringspaces=false, % 不显示字符串内空格标记
frame=single % 单线边框
}

\begin{document}

\begin{lstlisting}[language=Python, caption=计算斐波那契数列]
# 计算第 n 项斐波那契数(中文注释测试)
def fib(n):
if n < 2:
return n
return fib(n - 1) + fib(n - 2)

print(fib(10)) # 输出 55
\end{lstlisting}

\end{document}

Listing 1: 计算斐波那契数列

# 计算第 n 项斐波那契数(中文注释测试)
def fib(n):
if n < 2:
return n
return fib(n - 1) + fib(n - 2)

print(fib(10)) # 输出 55

lstlisting 是「原样环境」:内部内容不做任何LaTeX解释,&% 都不用转义。caption 同样自动编号(Listing 1)。常见语言名有 Python、C、Java、HTML、SQL、bash 等,不指定 language 则纯文本着色。

listings 对 UTF-8 中文的支持依赖编译器:XeLaTeX 下中文注释正常;老引擎(latex/pdfLaTeX)下会乱码。中文文档请坚持用 XeLaTeX 编译。

多文件工程:\input\include

文档超过几百行就该拆文件——main.tex 只做骨架,内容分而治之。

实例:main.tex 骨架

\documentclass{ctexart}
\usepackage{amsmath, graphicx, booktabs, hyperref}

\begin{document}

\input{chapters/intro} % 引言(文件名不带 .tex)
\input{chapters/method} % 方法
\input{chapters/result} % 实验
\input{chapters/conclusion}% 结论

\bibliographystyle{plain}
\bibliography{refs}

\end{document}

两条命令看着相似,行为有明确分工:

对比项\input{文件}\include{文件}
能否嵌套可以(子文件里再input)不可以
是否强制换页不换页每个文件前强制 \clearpage
配合 \includeonly不支持支持,只编译指定章节(提速利器)
适用粒度任意片段(宏定义、图表、封面)章级大块内容

常见坑:\include 会强制换页,用它拼「同一页的几个小节」会发现莫名分页——小片段一律用 \input

latexmk:一键编译

第9篇的四遍编译流水线,手动敲四条命令很折磨人,latexmk全自动代劳。

$ latexmk -xelatex main.tex # XeLaTeX 引擎编译,自动跑所有遍数
$ latexmk -xelatex -C main.tex # 连中间文件一起清理
$ latexmk -xelatex -c main.tex # 连PDF一起保留,清理附属文件

latexmk 会自动判断:有 bibtex、目录引用有变动就多编译几遍,直到所有编号稳定。编辑器里配置「构建命令」为 latexmk -xelatex main.tex

排错心法

LaTeX 报错信息以叹号开头、附带行号,格式固定,看懂前几行就够了。

! Undefined control sequence.

l.42 \section{方法}

l.42 指出出错行——本例第42行把 \section 拼成了 \secton。修这一处,后面一串连锁错误往往一起消失。

报错信息含义处理
Undefined control sequence命令不存在:拼写错误或缺宏包对照行号查拼写;确认宏包已加载
Missing $ inserted数学命令出现在文本模式$\alpha$ 等放进 $ 内
File xxx not found找不到文件或宏包检查路径;tlmgr install xxx
Runaway argument环境没闭合(少了 \end对照行号补 \end{...}
LaTeX Error: Environment xxx undefined用了未定义的环境检查环境拼写与宏包
! Emergency stop编译彻底中止往上翻日志找第一个错误
Reference undefined(警告)引用是 ??多编译一遍

永远只修日志里的第一个错误——后面的错误多半是第一个错误的连锁反应。修完重编译,比一口气改十处靠谱得多。

小结

需求方案
减少重复输入\newcommand 定义命令与环境
贴代码listings + \lstset 全局样式
大文档拆分\input(片段) / \include(章级)
一键编译latexmk -xelatex
排错读日志第一个 ! 错误的行号

排版一篇完整论文

本篇把前十篇的知识全部装配起来:用多文件工程,从零排版一篇带摘要、公式、图表和参考文献的完整小论文。 建议照着做一遍——看会了不等于写会了,完整走过一次流程,LaTeX 就真正属于你。

项目结构

先规划目录:骨架与内容分离,每章一个文件。

paper/
├── main.tex # 骨架:导言区 + 按顺序组装各章节
├── refs.bib # 参考文献数据库
├── figures/
│ └── fit.png # 插图
└── sections/
├── abstract.tex # 摘要
├── intro.tex # 引言
├── method.tex # 方法
├── result.tex # 实验结果
└── conclusion.tex# 结论

main.tex:项目骨架

骨架文件只做三件事:加载宏包、声明标题、按顺序组装。

实例:main.tex

\documentclass[12pt, a4paper]{ctexart}

% -------- 页面与基础宏包 --------
\usepackage{geometry}
\geometry{margin=2.5cm}
\usepackage{amsmath, amssymb} % 数学
\usepackage{graphicx} % 插图
\usepackage{booktabs, multirow} % 三线表
\usepackage[colorlinks=true, linkcolor=blue,
citecolor=blue, urlcolor=blue]{hyperref}

% -------- 标题信息 --------
\title{基于最小二乘法的周期信号拟合研究}
\author{UniResearch}
\date{\today}

\begin{document}

\maketitle

\input{sections/abstract} % 摘要
\input{sections/intro} % 引言
\input{sections/method} % 方法
\input{sections/result} % 实验结果
\input{sections/conclusion} % 结论

\bibliographystyle{plain}
\bibliography{refs} % 参考文献

\end{document}

基于最小二乘法的周期信号拟合研究

UniResearch

2026 年 8 月 20 日

摘要 本文研究周期信号的参数化建模方法,基于最小二乘准则推导了正弦模型 y=Asin(ωx+φ)+cy = A\sin(\omega x + \varphi) + c 的估计流程,并在合成数据上验证了方法的有效性。实验表明,低噪声条件下拟合相对误差低于 1%。

关键词: 最小二乘法;周期信号;参数估计

各章节内容

每个文件就是一段普通正文,以摘要和引言为例。

实例:sections/abstract.tex

\begin{abstract}
本文研究周期信号的参数化建模方法,基于最小二乘准则推导了正弦模型
$y = A\sin(\omega x + \varphi) + c$ 的估计流程,
并在合成数据上验证了方法的有效性。

实验表明,低噪声条件下拟合相对误差低于 1\%。

\medskip
\noindent\textbf{关键词:}最小二乘法;周期信号;参数估计
\end{abstract}

摘要 本文研究周期信号的参数化建模方法,基于最小二乘准则推导了正弦模型 y=Asin(ωx+φ)+cy = A\sin(\omega x + \varphi) + c 的估计流程,并在合成数据上验证了方法的有效性。实验表明,低噪声条件下拟合相对误差低于 1%。

关键词: 最小二乘法;周期信号;参数估计

实例:sections/intro.tex

\section{引言}\label{sec:intro}
周期信号广泛存在于通信、振动分析与生物医学工程等领域,
对这类信号进行参数化建模是滤波、预测与压缩的共同基础~\cite{oppenheim1997}。
经典的最小二乘法为模型参数估计提供了系统化的求解框架~\cite{bjorck1996}。

本文的组织如下:第~\ref{sec:method} 节建立模型并给出求解步骤,
第~\ref{sec:result} 节报告实验结果,第~\ref{sec:conclusion} 节总结全文。

1 引言

周期信号广泛存在于通信、振动分析与生物医学工程等领域,对这类信号进行参数化建模是滤波、预测与压缩的共同基础[2]。经典的最小二乘法为模型参数估计提供了系统化的求解框架[1]

本文的组织如下:第 2 节建立模型并给出求解步骤,第 3 节报告实验结果,第 4 节总结全文。

方法部分放公式,实验部分放图表,套路你已经全部见过。

实例:sections/method.tex(公式部分)

\section{方法}\label{sec:method}
考虑如下正弦模型:
\begin{equation}\label{eq:model}
y = A \sin(\omega x + \varphi) + c,
\end{equation}
其中 $A$ 为振幅,$\omega$ 为角频率,$\varphi$ 为初相位,$c$ 为直流分量。

参数估计的目标是最小化残差平方和
\begin{equation}\label{eq:loss}
S(A, \omega, \varphi, c)
= \sum_{i=1}^n \left( y_i - A \sin(\omega x_i + \varphi) - c \right)^2 .
\end{equation}
对于固定的 $\omega$,式\eqref{eq:loss} 关于其余参数是线性最小二乘问题,
可由正规方程直接求解。

2 方法

考虑如下正弦模型:

y=Asin(ωx+φ)+c(1)y = A \sin(\omega x + \varphi) + c \tag{1}

其中 AA 为振幅,ω\omega 为角频率,φ\varphi 为初相位,cc 为直流分量。

参数估计的目标是最小化残差平方和

S(A,ω,φ,c)=i=1n(yiAsin(ωxi+φ)c)2(2)S(A, \omega, \varphi, c) = \sum_{i=1}^n \left( y_i - A \sin(\omega x_i + \varphi) - c \right)^2 \tag{2}

对于固定的 ω\omega,式 (2) 关于其余参数是线性最小二乘问题,可由正规方程直接求解。

实例:sections/result.tex(图表部分)

\section{实验结果}\label{sec:result}
在 $[0, 2\pi]$ 上等间隔采样 $n = 200$ 个点生成合成数据,
并加入标准差为 $0.05$ 的高斯噪声。
拟合曲线与带噪声采样点的对比如图\ref{fig:fit} 所示,
不同噪声水平下的误差指标见表\ref{tab:err}。

\begin{figure}[htbp]
\centering
\includegraphics[width=0.65\textwidth]{figures/fit}
\caption{拟合曲线(实线)与带噪声采样点(散点)}
\label{fig:fit}
\end{figure}

\begin{table}[htbp]
\centering
\caption{不同噪声水平下的均方根误差}
\label{tab:err}
\begin{tabular}{lccc}
\toprule
噪声标准差 & 0.01 & 0.05 & 0.10 \\
\midrule
RMSE & 0.011 & 0.053 & 0.104 \\
相对误差 & 1.1\% & 5.3\% & 10.4\% \\
\bottomrule
\end{tabular}
\end{table}
\end{section}

3 实验结果

[0,2π][0, 2\pi] 上等间隔采样 n=200n = 200 个点生成合成数据,并加入标准差为 0.05 的高斯噪声。拟合曲线与带噪声采样点的对比如图 1 所示,不同噪声水平下的误差指标见表 1。

拟合曲线

图 1:拟合曲线(实线)与带噪声采样点(散点)

表 1:不同噪声水平下的均方根误差

噪声标准差0.010.050.10RMSE0.0110.0530.104相对误差1.1%5.3%10.4%\begin{array}{lccc} \hline \text{噪声标准差} & 0.01 & 0.05 & 0.10 \\ \hline \text{RMSE} & 0.011 & 0.053 & 0.104 \\ \text{相对误差} & 1.1\% & 5.3\% & 10.4\% \\ \hline \end{array}

refs.bib 里是两条文献数据,正文用 \cite{oppenheim1997}\cite{bjorck1996} 引用(完整写法见第9篇)。

编译与效果

多文件项目只需编译 main.tex\input 会自动展开。带文献的完整流程:

$ cd paper
$ latexmk -xelatex main.tex # 一键完成(推荐)
# 或者手动四步:xelatex -> bibtex -> xelatex -> xelatex

第一页效果(标题区、摘要与关键词、引言的引用编号):

\title{基于最小二乘法的周期信号拟合研究}
\author{UniResearch}
\date{\today}

\begin{abstract}
本文研究周期信号的参数化建模方法,基于最小二乘准则推导了正弦模型
$y = A\sin(\omega x + \varphi) + c$ 的估计流程,
并在合成数据上验证了方法的有效性。

实验表明,低噪声条件下拟合相对误差低于 1\%。

\medskip
\noindent\textbf{关键词:}最小二乘法;周期信号;参数估计
\end{abstract}

\section{引言}\label{sec:intro}
周期信号广泛存在于通信、振动分析与生物医学工程等领域,
对这类信号进行参数化建模是滤波、预测与压缩的共同基础~\cite{oppenheim1997}。
经典的最小二乘法为模型参数估计提供了系统化的求解框架~\cite{bjorck1996}。

本文的组织如下:第~\ref{sec:method} 节建立模型并给出求解步骤,
第~\ref{sec:result} 节报告实验结果,第~\ref{sec:conclusion} 节总结全文。

基于最小二乘法的周期信号拟合研究

UniResearch

2026 年 8 月 20 日

摘要

本文研究周期信号的参数化建模方法,基于最小二乘准则推导了正弦模型 y=Asin(ωx+φ)+cy = A\sin(\omega x + \varphi) + c 的估计流程,并在合成数据上验证了方法的有效性。实验表明,低噪声条件下拟合相对误差低于 1%。

关键词: 最小二乘法;周期信号;参数估计

1 引言

周期信号广泛存在于通信、振动分析与生物医学工程等领域,对这类信号进行参数化建模是滤波、预测与压缩的共同基础[2]。经典的最小二乘法为模型参数估计提供了系统化的求解框架[1]

本文的组织如下:第 2 节建立模型并给出求解步骤,第 3 节报告实验结果,第 4 节总结全文。

第二页效果(公式编号与引用、浮动图、三线表、结论与参考文献):

\section{方法}\label{sec:method}
考虑如下正弦模型:
\begin{equation}\label{eq:model}
y = A \sin(\omega x + \varphi) + c,
\end{equation}
其中 $A$ 为振幅,$\omega$ 为角频率,$\varphi$ 为初相位,$c$ 为直流分量。

参数估计的目标是最小化残差平方和
\begin{equation}\label{eq:loss}
S(A, \omega, \varphi, c)
= \sum_{i=1}^n \left( y_i - A \sin(\omega x_i + \varphi) - c \right)^2 .
\end{equation}
对于固定的 $\omega$,式\eqref{eq:loss} 关于其余参数是线性最小二乘问题,
可由正规方程直接求解;$\omega$ 则在区间 $[\omega_{\min}, \omega_{\max}]$ 上网格搜索确定,
最终取使 $S$ 最小的参数组合。

\section{实验结果}\label{sec:result}
在 $[0, 2\pi]$ 上等间隔采样 $n = 200$ 个点生成合成数据,
并加入标准差为 $0.05$ 的高斯噪声。
拟合曲线与带噪声采样点的对比如图~\ref{fig:fit} 所示,
不同噪声水平下的误差指标见表~\ref{tab:err}。

\begin{figure}[htbp]
\centering
\includegraphics[width=0.65\textwidth]{figures/fit}
\caption{拟合曲线(实线)与带噪声采样点(散点)}
\label{fig:fit}
\end{figure}

\begin{table}[htbp]
\centering
\caption{不同噪声水平下的均方根误差}
\label{tab:err}
\begin{tabular}{lccc}
\toprule
噪声标准差 & 0.01 & 0.05 & 0.10 \\
\midrule
RMSE & 0.011 & 0.053 & 0.104 \\
相对误差 & 1.1\% & 5.3\% & 10.4\% \\
\bottomrule
\end{tabular}
\end{table}

\section{结论}\label{sec:conclusion}
本文将正弦拟合分解为「网格搜索 + 线性最小二乘」两步,
流程简单、求解稳定。
后续工作将把方法推广到多分量谐波信号,
并研究频率初值的自动估计。

\begin{thebibliography}{9}
\bibitem{bjorck1996}
Åke Björck. \textit{Numerical Methods for Least Squares Problems}. SIAM, 1996.
\bibitem{oppenheim1997}
Alan V. Oppenheim and Alan S. Willsky. \textit{Signals and Systems}. Prentice Hall, 2 edition, 1997.
\end{thebibliography}

2 方法

考虑如下正弦模型:

y=Asin(ωx+φ)+c(1)y = A \sin(\omega x + \varphi) + c \tag{1}

其中 AA 为振幅,ω\omega 为角频率,φ\varphi 为初相位,cc 为直流分量。

参数估计的目标是最小化残差平方和

S(A,ω,φ,c)=i=1n(yiAsin(ωxi+φ)c)2(2)S(A, \omega, \varphi, c) = \sum_{i=1}^n \left( y_i - A \sin(\omega x_i + \varphi) - c \right)^2 \tag{2}

对于固定的 ω\omega,式 (2) 关于其余参数是线性最小二乘问题,可由正规方程直接求解;ω\omega 则在区间 [ω_min, ω_max] 上网格搜索确定,最终取使 SS 最小的参数组合。

3 实验结果

[0,2π][0, 2\pi] 上等间隔采样 n=200n = 200 个点生成合成数据,并加入标准差为 0.05 的高斯噪声。拟合曲线与带噪声采样点的对比如图 1 所示,不同噪声水平下的误差指标见表 1。

Fitted curve

图 1:拟合曲线(实线)与带噪声采样点(散点)

表 1:不同噪声水平下的均方根误差

噪声标准差0.010.050.10RMSE0.0110.0530.104相对误差1.1%5.3%10.4%\begin{array}{lccc} \hline \text{噪声标准差} & 0.01 & 0.05 & 0.10 \\ \hline \text{RMSE} & 0.011 & 0.053 & 0.104 \\ \text{相对误差} & 1.1\% & 5.3\% & 10.4\% \\ \hline \end{array}

4 结论

本文将正弦拟合分解为「网格搜索 + 线性最小二乘」两步,流程简单、求解稳定。后续工作将把方法推广到多分量谐波信号,并研究频率初值的自动估计。

参考文献

[1] Åke Björck. Numerical Methods for Least Squares Problems. SIAM, 1996.

[2] Alan V. Oppenheim and Alan S. Willsky. Signals and Systems. Prentice Hall, 2 edition, 1997.

检查几个「自动化痕迹」:引言里的(^1)(^2)与文末文献一一对应;图和表都有自己的编号,正文引用「图1」「表1」全部正确;公式(1)(2)被\eqref引用为带括号的形式。

修改任何一处引用或编号,重跑一次latexmk,所有编号自动更新——这就是十篇内容换来的一份「再也不用手动核对编号」的文档。

真实世界:从模板开始

实际写论文,你不该从零搭骨架——期刊和学校都提供现成模板。

模板来源去哪找特点
Overleaf模板库Overleaf → Templates数千个学位论文、期刊、海报模板,一键打开
期刊官网期刊 Author Guidelines 页面投稿指定格式,务必以此为准
学校学位论文模板学校图书馆 / GitHub 搜索「[校名] + thesis」满足校内格式审查
GitHub搜索 awesome-latex 等合集社区维护的模板与资源汇总

全局的心法一句话: 只往占位符里填内容,不动模板结构。 模板里那些看不懂的导言区设置,是别人调好的格式,删改一处可能全盘崩坏。

小结

环节本篇的实践
工程组织main.tex 骨架 + sections/分章 + figures/图片
导言区geometry、amsmath、graphicx、booktabs、hyperref
正文要素摘要、章节、公式、图表、交叉引用、文献
编译latexmk -xelatex 一键完成
效率建议真实投稿用官方模板,只填内容不改结构