
1. 从“劝退”到“真香”我为什么坚持用LaTeX写文档第一次接触LaTeX大概是十年前写本科毕业论文的时候。当时被导师要求必须用LaTeX排版看着满屏幕的\begin{document}和\usepackage还有动不动就报错、死活编译不出来的PDF我的内心是崩溃的。身边几乎所有同学都在用Word调整格式只需要点点鼠标而我却要像写代码一样去“编译”我的论文。那种感觉就像别人在开自动挡汽车而我还在手摇拖拉机。但硬着头皮啃下来之后我发现了LaTeX的魔力。当我的论文最终呈现出和顶级期刊几乎一模一样的精美版式公式排版工整得像印刷体参考文献自动编号且格式统一时那种成就感和掌控感是Word无法给予的。更重要的是我再也不用担心因为误触一个键导致几十页的格式全乱套。LaTeX将内容你写的文字、公式和样式字体、间距、布局彻底分离你只需要关心“写什么”LaTeX引擎会帮你处理好“长什么样”。这种“一次编写处处精美”的特性尤其适合需要反复修改、多人协作、对格式有严苛要求的场景比如学术论文、技术报告、书籍、幻灯片甚至是简历。网络上关于LaTeX的讨论热度一直很高从“安装教程”、“环境配置”到“符号大全”、“论文模板”再到各种报错比如经典的invalid utf-8 byte sequence都说明了它既有强大的吸引力也有不低的学习门槛。很多人被其陡峭的学习曲线劝退但一旦跨过那个坎就会进入一个高效、优雅的文档创作世界。这篇内容就是把我这些年从“小白”到“熟练工”过程中最常用、最核心的LaTeX指令整理出来。它不是一份面面俱到的百科全书而是一份“生存指南”和“效率手册”目标是让你能快速上手解决90%的日常排版需求避开我当年踩过的那些坑。2. 万丈高楼平地起文档结构与基础环境指令在开始敲打具体内容之前我们必须先搭建好LaTeX文档的“脚手架”。一个标准的LaTeX源文件通常以.tex结尾就像一座建筑有地基、有框架最后才是内部的装修和摆设。2.1 文档类与导言区定义整篇文档的“基因”每个LaTeX文档都必须以\documentclass命令开头它决定了文档的整体类型和基本样式。你可以把它理解为选择建筑的“用途”是盖住宅楼、写字楼还是体育馆\documentclass[选项]{文档类}最常用的文档类有article用于短文、报告、期刊文章。这是最常用、最基础的文档类。report用于更长的报告、学位论文如硕士论文支持分章Chapter。book用于书籍支持前言、章节、附录等复杂结构。beamer用于制作演示文稿幻灯片提供了丰富的主题和动画效果。在\documentclass之后到\begin{document}之前的部分称为“导言区”。这里是加载宏包、进行全局设置的地方相当于建筑的设计图纸和材料清单。核心指令\usepackage[选项]{包名}这是导言区最最重要的指令。LaTeX的核心功能很精简强大之处在于无数社区贡献的“宏包”。比如\usepackage{amsmath}美国数学学会提供的数学公式扩展包提供了align,matrix等强大环境几乎写数学公式必用。\usepackage{graphicx}插入图片的必备包。\usepackage{hyperref}为文档中的交叉引用、目录、参考文献生成超链接生成PDF时体验极佳。\usepackage{xeCJK}或\usepackage{ctex}中文字体和支持包。如果你用XeLaTeX或LuaLaTeX引擎编译中文文档ctex宏包是首选它集成了字体、标点调整等大量中文优化。\title{标题}\author{作者}\date{日期}定义文档的元信息。日期可以留空\date{}则会自动生成编译当天的日期。\begin{document}和\end{document}这是文档内容的“围墙”。所有你看到的正文内容都必须写在这两个命令之间。一个极简但完整的文档骨架示例\documentclass[11pt, a4paper]{article} % 11号字A4纸 \usepackage{amsmath} % 数学包 \usepackage{graphicx} % 图形包 \usepackage{hyperref} % 超链接包 \usepackage{ctex} % 中文支持包如果用XeLaTeX编译 \title{我的第一篇LaTeX文档} \author{张三} \date{\today} % 使用今天日期 \begin{document} \maketitle % 这个命令会在正文区生成标题、作者、日期 这里是正文的开始…… \end{document}注意\maketitle命令必须放在\begin{document}之后它才会根据你在导言区定义的\title,\author,\date信息来生成标题页。2.2 章节与目录构建清晰的层次在正文区内我们需要用章节命令来组织内容结构。LaTeX会自动为这些章节编号并可以轻松生成目录。核心指令\part{部分名}用于书籍将内容分为几大部分。\chapter{章名}用于report和book类article类不支持。\section{节名}一级章节。\subsection{小节名}二级章节。\subsubsection{小小节名}三级章节通常不编号。\paragraph{段落名}和\subparagraph{子段落名}更细的划分通常不编号。LaTeX会自动根据你使用的文档类决定哪些章节命令会被编号以及编号的格式如1, 1.1, 1.1.1。生成目录 只需要在你想放置目录的位置通常在标题页之后正文之前插入命令\tableofcontents。LaTeX会收集所有章节标题及其页码自动生成目录。通常需要编译两次第一次LaTeX收集目录信息并写入一个.toc文件第二次编译时读取这个文件生成正确的目录页码。一个结构示例\begin{document} \maketitle \tableofcontents % 生成目录 \newpage % 另起一页 \section{引言} 这里是引言部分的内容…… \section{相关工作} \subsection{方法A} 介绍方法A…… \subsection{方法B} 介绍方法B…… \section{实验与结果} 这里是实验部分…… \end{document}3. 内容填充核心文本、列表与引用搭建好结构我们就可以开始填充内容了。LaTeX中处理普通文本、列表和交叉引用有其独特的逻辑和命令。3.1 文本格式与特殊字符LaTeX中连续的空白字符空格、制表符、换行在输出时通常被视为一个空格。段落由空行或\par命令来分隔。字体与强调\textbf{粗体文本}生成粗体。\textit{斜体文本}生成斜体。\underline{下划线文本}生成下划线。\emph{强调文本}语义化的强调。在直体文本中它显示为斜体在斜体文本中它显示为直体比直接用\textit更智能。引号LaTeX中使用反引号和单引号来生成左右引号。正确的姿势是这是左引号 和 这是左双引号 。特殊字符有些字符在LaTeX中有特殊含义如# $ % { } _ ^ ~ \。如果需要在文本中直接输出它们需要在前面加上反斜杠\进行转义例如\%输出%\$输出$\{输出{。注意~输出一个不可断行的空格常用于人名、图表编号前防止编号跑到下一行而\textasciitilde输出波浪线字符~。3.2 列表环境有序与无序列表是组织要点的利器。LaTeX提供了三种主要的列表环境。无序列表(itemize)使用圆点作为项目符号。\begin{itemize} \item 第一项 \item 第二项 \item 第三项 \end{itemize}有序列表(enumerate)使用数字编号。\begin{enumerate} \item 第一步 \item 第二步 \item 第三步 \end{enumerate}描述列表(description)用于对术语进行解释。\begin{description} \item[LaTeX] 一种基于TeX的排版系统。 \item[Word] 一种“所见即所得”的文字处理器。 \end{description}列表可以嵌套只需在内层列表的\begin和\end外增加一层缩进通常用空格或TabLaTeX会自动调整项目符号的样式。\begin{enumerate} \item 主要步骤 \begin{itemize} \item 子步骤A \item 子步骤B \end{itemize} \item 下一步 \end{enumerate}3.3 交叉引用与标签让文档“活”起来这是LaTeX相比Word等工具在长文档管理上的一大优势。你可以为章节、公式、图表、表格等任何需要引用的地方打上“标签”然后在文中任何地方通过标签名来引用它。LaTeX会自动处理编号和页码。核心指令打标签在需要引用的对象如章节命令、公式环境、图表之后使用\label{标签名}命令。标签名可以自定义但最好有明确意义如fig:my_plot,eq:einstein,sec:intro。引用标签在文中需要引用的地方使用\ref{标签名}来引用其编号使用\pageref{标签名}来引用其所在页码。工作流程与避坑指南 和目录一样交叉引用通常也需要编译两次才能正确显示。第一次编译时LaTeX将标签和其对应的编号写入.aux文件第二次编译时读取这些信息并替换文中的\ref命令。踩坑实录最常见的错误是“引用显示为两个问号??”。这几乎总是因为只编译了一次。请养成习惯在添加或修改了\label或章节结构后连续编译两次。在VS Code等编辑器中这通常是按两次编译快捷键。示例\section{引言}\label{sec:introduction} 这里是引言部分我们将在第\ref{sec:method}节介绍方法并在图\ref{fig:sample}中展示结果。 \section{方法}\label{sec:method} 我们的方法基于以下公式 \begin{equation}\label{eq:main} E mc^2 \end{equation} \begin{figure}[htbp] \centering \includegraphics[width0.8\textwidth]{plot.png} \caption{示例图片}\label{fig:sample} \end{figure} 如公式(\ref{eq:main})所示结合图\ref{fig:sample}我们在第\ref{sec:introduction}节提出的问题得到了验证。在上面的例子中\ref{sec:method}会被替换成“2”\ref{fig:sample}会被替换成“1”\ref{eq:main}会被替换成“(1)”。这一切都是自动的。如果你在“方法”章节前又插入了一个新的章节那么“方法”的编号会自动变成3文中所有引用它的地方也会自动更新为3——这才是真正的“自动化排版”。4. 理工科的灵魂数学公式排版LaTeX的“杀手级”应用就是数学公式排版。它在这方面的精确性和美观度是行业标准。数学公式分为“行内公式”和“行间公式”。4.1 行内公式与行间公式行内公式嵌入在文本行中的公式如 $Emc^2$。使用单美元符号$公式内容$使用\(公式内容\)不常用行间公式单独占据一行的公式通常居中显示并有编号。使用双美元符号$$公式内容$$这是Plain TeX的语法在LaTeX中虽然常用但并非官方推荐可能导致间距问题官方推荐环境equation环境单个带编号的公式。\begin{equation}\label{eq:1} a^2 b^2 c^2 \end{equation}align环境需amsmath包用于多行、多列的对齐公式每行都有一个编号或用\nonumber取消某行编号。\begin{align} f(x) (xa)(xb) \nonumber \\ x^2 (ab)x ab \label{eq:expand} \end{align}这里的是对齐点通常放在等号或关系符前面使得多行公式的等号对齐。\\用于换行。4.2 常用数学符号与命令这是新手最需要查阅“符号大全”的地方。以下是一些最核心的上下标上标x^{2}或x^2单个字符时可省略花括号下标x_{i}或x_i同时上下标x_i^2或x^{2}_{i}希腊字母直接输入命令大写字母为首字母大写。小写\alpha,\beta,\gamma,\delta,\epsilon,\theta,\pi,\omega...大写\Gamma,\Delta,\Theta,\Pi,\Omega...运算符与函数名分数\frac{分子}{分母} 例如\frac{1}{2}。开方\sqrt[n]{表达式} 例如\sqrt{2},\sqrt[3]{x}。求和、积分\sum_{下限}^{上限},\int_{下限}^{上限}。行内公式上下标在右侧行间公式在上下方。极限\lim_{x \to 0}。三角函数、对数等函数名用\sin,\cos,\log,\ln,\max,\min等它们会以正体显示与斜体的变量区分开。括号与定界符自动调整大小的括号\left( ... \right)\left[ ... \right]\left\{ ... \right\}。\left和\right必须成对出现如果只想显示一边用\left.或\right.点表示空定界符。手动指定大小\big,\Big,\bigg,\Bigg加在括号命令前如\Big( \frac{1}{2} \Big)。矩阵与数组需amsmath包matrix无括号矩阵。pmatrix圆括号矩阵()。bmatrix方括号矩阵[]。vmatrix行列式竖线||。\begin{pmatrix} a b \\ c d \end{pmatrix}一个综合示例\begin{equation} \nabla \cdot \mathbf{E} \frac{\rho}{\epsilon_0}, \quad \int_{\Omega} \nabla \cdot \mathbf{E} \, dV \oint_{\partial \Omega} \mathbf{E} \cdot d\mathbf{S} \end{equation}这段代码将排版出高斯定律的微分和积分形式包含矢量、散度算子、积分符号和闭合曲面积分。实操心得遇到不认识的符号最快的办法不是去翻厚厚的符号表而是在编辑器中尝试输入你能想到的英文单词比如约等于\approx不等于\neq正比于\propto无穷大\infty偏导数\partial。LaTeX的数学命令命名大多非常直观。另外善用amsmath包的\text{文本}命令可以在公式中插入一小段正体文本比如x_{\text{min}}。5. 图表插入与浮动体控制在学术文档中图表的位置通常需要自动调整以避免出现在页面顶部或底部等不美观的位置。LaTeX用“浮动体”环境figure和table来处理这个问题。5.1 插入图片插入图片需要使用graphicx宏包基本命令是\includegraphics。核心指令\begin{figure}[位置参数] \centering % 让图片居中 \includegraphics[选项]{图片文件名} \caption{图片标题}\label{fig:标签名} \end{figure}位置参数 ([htbp])给LaTeX的放置建议按优先级排序。h此处here尽量放在代码所在的位置。t页面顶部top。b页面底部bottom。p单独一页page专门放置浮动体的页面。!强制忽略一些内部限制慎用。通常写成[htbp]让LaTeX按“此处 顶部 底部 单独页”的顺序尝试放置。图片选项width...,height...指定宽度或高度。常用相对单位如\textwidth文本宽度或\linewidth行宽例如width0.5\textwidth表示图片宽度为文本宽度的一半。scale...缩放因子如scale0.8。angle...旋转角度如angle90。\caption和\label\caption为图片生成标题和自动编号如“图1”。\label命令必须放在\caption之后才能正确引用到图号否则引用的可能是章节号。支持格式LaTeX本身支持EPS格式。但如果使用pdflatex编译则支持PDF, PNG, JPG等格式。使用xelatex或lualatex也支持常见位图格式。5.2 创建表格表格的创建稍微复杂最常用的是tabular环境。基本语法\begin{table}[htbp] \centering \caption{表格标题}\label{tab:sample} \begin{tabular}{列格式定义} \hline % 横线 表头1 表头2 表头3 \\ \hline 数据A1 数据A2 数据A3 \\ 数据B1 数据B2 数据B3 \\ \hline \end{tabular} \end{table}列格式定义定义每列的对齐方式。l左对齐列。c居中对齐列。r右对齐列。|绘制竖线。p{宽度}指定固定宽度的段落列内容会自动换行。例如{l|c|r}定义了三列分别为左对齐、带竖线、居中对齐、带竖线、右对齐。列分隔符。\\行结束符换行。\hline画一条横贯整个表格的水平线。\cline{m-n}画一条从第m列到第n列的部分横线。表格进阶与美化\multicolumn{跨列数}{对齐}{内容}横向合并单元格。\multirow{跨行数}{宽度}{内容}需multirow包纵向合并单元格。通常需要与\multicolumn配合使用。booktabs宏包强烈推荐用于制作专业、简洁的三线表。它提供了\toprule,\midrule,\bottomrule等命令来绘制高质量的水平线并建议去掉所有竖线使表格更清爽。\usepackage{booktabs} ... \begin{tabular}{ccc} \toprule 项目 数值1 数值2 \\ \midrule A 1.23 4.56 \\ B 7.89 0.12 \\ \bottomrule \end{tabular}踩坑实录浮动体图表的位置是LaTeX自动优化的有时它可能不会完全按照你代码中的顺序出现或者被推到很远的位置。不要试图用[h!]等参数强行控制每一处位置这常会导致编译报错或排版混乱。正确的做法是相信LaTeX的算法只提供建议参数[htbp]确保每个浮动体都有清晰的\caption和\label在文中用\ref引用而不是说“下图”。如果某个图表必须紧跟某段文字可以考虑使用H参数需float宏包但这会破坏浮动机制可能导致页面留下大片空白。6. 文献管理与引用BibTeX/Biber的自动化之道手动管理参考文献是学术写作的噩梦。LaTeX配合BibTeX或Biber工具可以实现引用的完全自动化。6.1 工作流程与.bib文件核心工具BibTeX传统工具处理.bib文件支持基本的参考文献格式。Biber新一代后端与biblatex宏包配合功能更强大支持Unicode对中文友好是现代工作流的首选。标准工作流以biblatexBiber为例编写你的.tex主文件。用一个单独的.bib文件管理所有参考文献条目。每个条目像一个数据库记录有类型如article,book和许多字段author,title,journal,year,pages等。在LaTeX文档中引用这些条目。编译顺序XeLaTeX-Biber-XeLaTeX两次。如果是pdfLaTeX则是pdfLaTeX-BibTeX-pdfLaTeX两次。一个.bib文件示例(myrefs.bib)article{einstein1905, author {Albert Einstein}, title {On the electrodynamics of moving bodies}, journal {Annalen der Physik}, volume {322}, number {10}, pages {891--921}, year {1905} } book{knuth1984, author {Donald E. Knuth}, title {The {\TeX}book}, publisher {Addison-Wesley}, year {1984}, address {Reading, Massachusetts} }每个条目都有一个唯一的“钥匙”如einstein1905,knuth1984在文中引用时就使用这个钥匙。6.2 在LaTeX中引用与生成参考文献列表步骤1导言区设置使用biblatex宏包\usepackage[backendbiber, stylegb7714-2015]{biblatex} % 使用biber后端采用国标GB/T 7714-2015样式 \addbibresource{myrefs.bib} % 指定你的.bib文件style选项决定了参考文献的格式如authoryear作者-年份numeric数字编号gb7714-2015中国国标等。步骤2在文中引用\cite{钥匙}生成最基本的引用如[1]或(Einstein, 1905)。\cite[见][第5页]{钥匙}生成带前后缀的引用如[1 见第5页]。\citet{钥匙}natbib包风格生成作者名在外的文本引用如Einstein (1905)。\citep{钥匙}生成作者名在内的括号引用如(Einstein, 1905)。步骤3在文档末尾生成参考文献列表 在\end{document}之前放置命令\printbibliography % 生成参考文献列表完整的编译命令链在命令行或配置好的编辑器中xelatex main.tex # 第一次编译生成.aux文件包含引用信息 biber main # 运行Biber处理.bib文件生成.bbl文件 xelatex main.tex # 第二次编译将引用信息插入正文 xelatex main.tex # 第三次编译可选确保所有交叉引用稳定避坑指南最常见的错误是“引用显示为问号?”或“参考文献列表为空”。请严格按照上述顺序编译。在VS Code的LaTeX Workshop插件中可以配置“recipe”来自动执行这个链。另一个常见问题是.bib文件中的条目格式错误比如缺少逗号、括号不匹配。可以使用JabRef、Zotero配合Better BibTeX插件等文献管理软件来生成和维护.bib文件它们能极大减少手动输入的错误。7. 进阶技巧与日常排错掌握了以上核心指令你已经能应对绝大多数文档排版需求。下面是一些能显著提升效率和质量的高级技巧和常见问题解决方法。7.1 自定义命令与环境打造你的“模板”如果你发现某段复杂的格式代码比如一个特殊格式的文本框、一个固定结构的表格需要反复使用你可以将其定义为自定义命令或环境实现“一次定义到处使用”。自定义命令(\newcommand)% 在导言区定义 \newcommand{\keyword}[1]{\textbf{\textcolor{blue}{#1}}} % 定义一个名为\keyword的命令它接受一个参数#1将其变为蓝色粗体 % 在正文中使用 本文研究的核心是\keyword{机器学习}算法。自定义环境(\newenvironment)% 在导言区定义 \newenvironment{mybox}[1]{% 环境开始部分 \begin{center} \fbox{\begin{minipage}{0.9\textwidth} \textbf{#1}\\ % 环境参数作为标题 \rule[0.5ex]{\textwidth}{0.5pt}\\ % 一条横线 }{\par% 环境结束部分 \end{minipage}} \end{center} } % 在正文中使用 \begin{mybox}{重要提示} 这是一个自定义的提示框环境内容会被框起来并居中显示。 \end{mybox}7.2 页面布局与分栏\newpage强制换新页。\clearpage强制换新页并输出所有未处理的浮动体图表。\cleardoublepage在双面打印中强制换到下一个右手页奇数页。\pagebreak和\nopagebreak建议在此处分页或避免分页。双栏排版在\documentclass选项中添加twocolumn如\documentclass[twocolumn]{article}。或者使用multicol宏包进行局部分栏。7.3 常见报错与排查思路! Undefined control sequence.最常见的错误意味着你输入了一个LaTeX不认识的命令。检查拼写比如\includegrahpics拼写错误或忘记加载必要的宏包如用\includegraphics却没加\usepackage{graphicx}。! Missing $ inserted.你很可能在数学环境外使用了数学模式专用的命令如_,^,\frac。确保数学命令被包裹在$...$或\[...\]等数学环境中。**! LaTeX Error: Filexxx.sty not found.**缺少某个宏包。你需要通过TeX发行版的包管理器如TeX Live的tlmgr MiKTeX的包管理器来安装它。! Package inputenc Error: Unicode character ... (UXXXX) (inputenc) not set up for use with LaTeX.或! error: invalid utf-8 byte sequence编码问题。确保你的.tex文件以UTF-8无BOM格式保存。对于pdflatex你可能需要在导言区添加\usepackage[utf8]{inputenc}。对于xelatex或lualatex它们原生支持UTF-8通常不需要此包。图表/引用/目录显示为??编译次数不够。请连续编译两次或执行完整的编译链。浮动体位置不理想如前所述不要过度干预。可以尝试调整位置参数微调\begin{figure}[htbp]中的顺序或者使用\FloatBarrier命令placeins宏包限制浮动体在当前章节内浮动。调试建议当遇到复杂错误时学会阅读.log日志文件。错误信息通常会给出出错的行号如l.45表示第45行和附近的内容。从错误指示的行开始向上查看上下文往往能快速定位问题。另外养成分段编译的习惯先注释掉大段代码让文档能通过编译然后逐步取消注释定位引发错误的具体行。我个人在实际使用中最深刻的体会是LaTeX的学习是一个“先苦后甜”的过程。初期需要记忆一些命令和语法但一旦建立起自己的文档模板和常用命令集后续的写作就会变得异常高效和专注。你不再需要为格式分心所有的精力都可以投入到内容创作本身。对于需要频繁修改、格式严谨、包含大量数学公式和交叉引用的文档LaTeX带来的时间节省和品质提升是巨大的。从今天开始尝试用LaTeX写你的下一份报告或论文吧从模仿一个简单的模板开始遇到问题就搜索你会发现这片曾经看似艰深的领域其实充满了秩序与美感。