LaTeX 使用教程:从环境配置到中文公式、表格与参考文献排版
发布时间:2026/10/1 16:22:23 锦皓数字建站

第一次被 LaTeX 折腾到凌晨两点是因为一份课程论文里的三十多个公式。那会儿我用 Word 硬扛公式编号全靠手打改一处删一行后面所有编号集体错位参考文献的引用序号也跟着乱。后来导师说了一句你这排版不如用 LaTeX我才算踏进了这个坑。这篇 LaTeX 使用教程就是从我这几年的实际使用里攒出来的涵盖环境安装、VSCode 配置、中文排版、数学公式、图片表格、参考文献和报错排查写完还会持续更新。它适合三类人正在写学位论文的研究生、要交数学建模竞赛论文的本科生以及任何被 Word 公式排版折磨过、想换套工作流的人。我不打算把它写成一份冷冰冰的命令手册而是尽量按我当初是怎么一步步摸过来的这个顺序讲包括我踩过的那些坑。1. 我为什么劝你早点把 LaTeX 装上1.1 Word 排版数学公式的真实困境很多人对 LaTeX 的印象停留在理工科才用其实核心矛盾只有一个当文档里的结构化内容变多时手动排版的成本会指数级上涨。Word 处理纯文字文档没问题但一旦涉及公式编号、图表引用、参考文献序号、目录页码它就从编辑器变成了你亲手维护的一套数据库。你删掉中间一个公式后面几十个编号得手动改你换一份参考文献全文的引用序号全乱。我在写第一篇小论文时用 Word 排了大概 60 个公式。改稿时导师让我把第 12 个公式删掉我删完之后花了四十分钟重排编号还在第 37 个公式那里漏改了一个被审稿意见指出来。这种错误不是能力问题是工具本身的设计就没打算让机器帮你维护这些关系。LaTeX 解决这个问题的思路很直接你把内容和结构写下来编号和引用交给编译器算。你写\label{eq:energy}引用写\eqref{eq:energy}不管中间插入删除多少个公式编号永远是对的。这个差别用过一次就回不去了。1.2 LaTeX 的内容与格式分离到底赢在哪用一句更通俗的话讲Word 是你一边写一边调格式LaTeX 是你只管写内容格式由一套规则渲染出来。这带来几个很实在的好处。写正文的时候你脑子里想的是这一段是第几级标题这个公式要编号这张图要有题注而不是这个标题用几号字、加不加粗、缩进多少。你的注意力全部在内容上。等文章写完了想换个模板——比如从单栏换成双栏或者套上学校指定的学位论文模板——改一行\documentclass就行正文一个字不用动。另外一点是版本管理和协作。.tex文件是纯文本用 Git 管理非常舒服改了哪一行一目了然。Word 的二进制文件两个人在同一份.docx上改合并基本靠人肉。我现在的习惯是每个项目一个 Git 仓库每次改完稿提交一次导师提的意见对应哪个版本清清楚楚。提示如果你是团队协作写论文或竞赛论文.tex Git 这个组合的价值比你想的大得多。尤其是竞赛那种三天写完几十页的情况谁改了哪一段、哪个公式被谁动了都有记录。1.3 哪些人其实不需要折腾 LaTeX说了这么多好处也得说清楚它不适合谁。我见过不少人在一份两页的通知、一张单页简历上死磕 LaTeX最后花的时间比用 Word 多三倍收益几乎为零。如果你的文档满足下面这些条件就老实用 Word篇幅短、几乎没有公式、没有交叉引用、格式要求宽松、需要频繁发给不装 LaTeX 的人来回改。反过来只要你的文档里公式超过二十个、有几十条参考文献、或者有严格格式的模板要求那 LaTeX 的投入产出比就非常划算。判断标准很简单你手动维护编号、引用、目录的时间是否超过了学习成本。按我的经验一篇正经的学位论文这个临界点在你写第二章的时候就会到来。2. 环境搭建TeX Live、编辑器怎么搭配才不折腾2.1 TeX Live 全量安装和 MiKTeX 按需安装怎么选LaTeX 本身只是一套宏语言要编译成 PDF 需要一个发行版。目前主流就两个TeX Live和MiKTeX。TeX Live 的特点是一次装全完整版大概 5 到 8 GB包含了几乎所有你能想到的宏包和字体。装完之后基本不会再遇到缺宏包的问题离线也能用。缺点就是下载慢、装得久Windows 上如果杀毒软件实时扫描开着装一个小时都算快的。MiKTeX 的特点是按需下载初始安装只有几百 MB编译时发现缺哪个宏包就自动去下载。它的好处是省空间坏处是网络不稳或者学校模板依赖某些冷门宏包时会卡在网络请求上而且离线环境基本没法用。我的建议是如果你打算认真写论文直接上 TeX Live 完整版。用一次就装好的时间换后面几个月不再折腾这笔账很划算。MiKTeX 更适合只是偶尔编译别人给的文档、磁盘空间紧张的场景。对比项TeX LiveMiKTeX安装体积5 到 8 GB完整版几百 MB 起随用随下宏包完整性一次装全离线可用按需下载依赖网络安装时长40 到 90 分钟10 分钟左右适合人群学位论文、竞赛论文长期使用偶尔编译、空间有限跨平台Windows / macOS / Linux 一致以 Windows 为主2.2 三平台安装的实操细节与坑Windows 上的 TeX Live我推荐两条路。第一条是去国内镜像站下载 ISO 镜像挂载后运行install-tl-windows.bat第二条是下载在线安装器安装时手动把源改成国内镜像。后者体积小但依赖网络前者更稳。安装过程中有一个地方特别容易出问题安装路径千万别带中文和空格默认的C:\texlive\2024就很好别自作聪明改成D:\我的文档\latex 安装后面遇到的一堆文件找不到报错都是这么来的。安装完成后打开命令行验证tex --version xelatex --version latexmk --version三条都能输出版本号说明基本没问题。如果提示不是内部或外部命令说明环境变量没生效重启一下终端或者重启系统。macOS 上用brew install --cask mactex-no-gui安装完整版或者去官网下MacTeX.pkg。如果嫌大可以装 BasicTeX再用tlmgr按需补包但对新手来说缺包报错本身就是一道门槛我一般直接推荐完整版。装完自带的 TeXShop 就能用但后面我们还是会切到 VSCode。Linux 上最简单Ubuntu/Debian 系直接sudo apt update sudo apt install texlive-full如果担心体积可以只装核心加中文支持texlive-xetex texlive-lang-chinese texlive-latex-extra texlive-science后面缺什么再tlmgr install补。2.3 VSCode LaTeX Workshop 的完整配置编辑器这块我用得最久的是 VSCode 配上 LaTeX Workshop 插件。它的好处是一个窗口里同时管代码、预览 PDF、看报错、做正反向搜索而且你写代码的那些习惯多光标、快捷键、Git 集成都能直接用上。装插件很简单在扩展市场搜LaTeX Workshop作者是 James Yu 的那个。装完之后关键在配置很多人装完发现编译用的是 pdfLaTeX中文直接报错就是这个没配。打开settings.json把下面这段贴进去{ latex-workshop.latex.tools: [ { name: xelatex, command: xelatex, args: [-synctex1, -interactionnonstopmode, -file-line-error, %DOC%] }, { name: bibtex, command: bibtex, args: [%DOCFILE%] }, { name: biber, command: biber, args: [%DOC%] } ], latex-workshop.latex.recipes: [ { name: xelatex, tools: [xelatex] }, { name: xelatex - bibtex - xelatex*2, tools: [xelatex, bibtex, xelatex, xelatex] }, { name: xelatex - biber - xelatex*2, tools: [xelatex, biber, xelatex, xelatex] } ], latex-workshop.latex.recipe.default: lastUsed, latex-workshop.view.pdf.viewer: tab, latex-workshop.latex.autoBuild.run: onFileChange, latex-workshop.latex.autoClean.run: onBuilt }这里有几个点值得单独说。%DOC%是当前文件名不带扩展名%DOCFILE%是带扩展名的别写反。-synctex1生成同步信息是正向和反向搜索的前提。-file-line-error让报错信息带上文件名和行号排查时能省一半时间。-interactionnonstopmode让它遇错不卡住等你按键而是继续跑完并记录错误。latex-workshop.view.pdf.viewer设成tabPDF 就在 VSCode 的标签页里预览。配合侧边栏的 LaTeX 面板点 PDF 里任意位置按Ctrl加左键就能跳到源码对应行反过来在源码里按快捷键能跳到 PDF 对应位置改公式的时候特别爽。注意autoClean.run设成onBuilt会在每次编译后清理中间文件。这在写短文档时很清爽但写长论文时注意——如果你的引用还没解析成功就被清掉.aux可能反复出现问号编号。这种情况把它关掉等文档稳定了再手动清。2.4 TeXstudio 和 PyCharm 这两条备选路线不是所有人都喜欢 VSCode 那套配置。TeXstudio是专门为 LaTeX 做的编辑器内置 PDF 预览、符号面板、命令补全、错误高亮开箱就能用。它的配置逻辑是把编译器改掉选项 → 设置 → 构建把默认编译器从 pdfLaTeX 改成 XeLaTeX再在构建与查看里把编译链改成latexmk -xelatex一条龙自动处理多轮编译和参考文献。TeXstudio 的符号面板对新手特别友好希腊字母、积分号、箭头直接点不用背命令。PyCharm这条路我也试过。它本身不是 LaTeX 编辑器但你完全可以用它写.tex装个 TeXify 插件语法高亮和补全就有了或者走设置 → 工具 → 外部工具添加一个外部工具指向xelatex把参数设成-synctex1 -interactionnonstopmode $FilePath$工作目录设成$FileDir$之后用快捷键调用就行。适合那种主力写 Python、顺手写点 LaTeX 笔记的人不用为了写个公式再开一个编辑器。至于在线编译平台我一般只用来临时看一眼别人发来的文档正式写论文不建议——网络、隐私、模板兼容都有坑尤其是学校模板里那些自定义字体在线平台大概率渲染不出来。3. 从零写第一份中文文档导言区到底放什么3.1 最小可编译骨架先看一份能跑起来的最小文档。这段建议你直接复制到hello.tex里用 XeLaTeX 编译一遍先建立能跑的信心再往上加东西。\documentclass[12pt,a4paper]{ctexart} \usepackage{geometry} \geometry{left2.5cm, right2.5cm, top2.5cm, bottom2.5cm} \usepackage{amsmath, amssymb} \usepackage{graphicx} \usepackage{booktabs} \usepackage{hyperref} \title{我的第一份 LaTeX 文档} \author{你的名字} \date{\today} \begin{document} \maketitle \section{引言} 这是一段中文正文第一行写在这里。 这是另一段前面空行表示新起一个段落。 \section{公式测试} 行内公式写 $E mc^2$行间公式单独放一行 \begin{equation} \int_{0}^{\infty} e^{-x^2} \, dx \frac{\sqrt{\pi}}{2} \label{eq:gauss} \end{equation} 公式 \eqref{eq:gauss} 是一个经典的积分结果。 \end{document}\documentclass到\begin{document}之间的部分叫导言区用来声明文档类型、加载宏包、设置全局参数。\begin{document}之后才是正文。这个划分要记住因为很多新手把\usepackage写到了正文里报错信息还挺难懂。3.2 中文支持ctex 宏包和文档类怎么选中文排版在 LaTeX 里是个历史遗留问题。老办法是用CJK宏包配合 pdfLaTeX配置繁琐还经常出字体问题。现在的标准做法是走ctex有三种用法。第一种直接用 ctex 提供的文档类ctexart对应 article、ctexrep对应 report、ctexbook对应 book。这是最省事的汉字字体、段落间距、标点压缩都按中文习惯预设好了。第二种用标准文档类加宏包\documentclass{article}配\usepackage{ctex}。适合你已经有别人给的标准模板、不想改文档类的场景。第三种手动配置字体\usepackage{fontspec}配\setCJKmainfont{...}。这是最灵活的但也是最容易出问题的字体名写错一个字符就是一条fontspec Error。新手不建议从这里开始。这里有个必须强调的点用 ctex 就必须用 XeLaTeX 或 LuaLaTeX 编译不能用 pdfLaTeX。原因不复杂pdfLaTeX 对 Unicode 和系统字体的支持很弱而中文排版恰恰需要这两样。用 pdfLaTeX 编中文文档轻则是乱码重则直接报一堆字体找不到的错误。这是新手最常见的第一号坑。3.3 编译引擎XeLaTeX、LuaLaTeX 还是 pdfLaTeX三个引擎的选择困扰了不少人我用一张表说清楚。引擎字体支持中文支持速度推荐场景pdfLaTeX只支持 Type1 等老格式弱需 CJK 宏包快纯英文老模板、期刊指定XeLaTeX直接调用系统字体好ctex 默认中等中英文混排日常首选LuaLaTeX直接调用系统字体好稍慢需要 Lua 脚本扩展、复杂宏包日常结论很明确写中文文档用 XeLaTeX。它会直接去系统里找字体ctex在 Windows 上默认用中易宋体和中易黑体在 macOS 上默认用 Songti SC你基本不用管。只有两种情况需要换一是目标期刊明确要求 pdfLaTeX 提交二是你在做很复杂的自动化排版需要 Lua 脚本。数学建模这类竞赛模板看清楚它 README 里写的引擎要求大多数现在也是 XeLaTeX。4. 正文排版换行、分段和那些容易写错的符号4.1 换行这件事LaTeX 的规则和 Word 完全不一样这是新手最容易懵的地方。在 Word 里你按回车就是换行在 LaTeX 里源码里的单个换行符等于一个空格什么都不发生。真正的规则是源码里空一行中间没有非空白字符才表示新起一个段落段首会自动缩进两格。\\是强制换行用在当前段落内部换行后不缩进常出现在表格、居中环境、诗歌排版里。\newline效果和\\接近但用法上更正式一点一般不产生额外的垂直间距。\linebreak也会换行但它的逻辑是把这一行撑满再断可能拉出一个难看的行距普通正文别用。\par是手动分段等价于空一行。\noindent放在段首取消这一段的缩进。\newpage、\clearpage是换页\cleardoublepage会跳到下一个奇数页双面排版用。我见过最常见的错误就是在正文里每行末尾都加\\看起来像手动换行。这么写的后果是编译日志里刷出一堆Underfull \hbox (badness 10000)警告而且句子之间的行距、右边界都会变得很难看。正文一律用空行分段不要用\\这是铁律。标题方面\section{}是一级\section*{}带星号是不编号不显示在目录里\subsection{}、\subsubsection{}依次往下。再往下想细分就只能用\paragraph{}而且默认是行内标题需要自己调格式。4.2 强调、列表、引用和脚注正文里的基本格式元素用法很集中加粗\textbf{内容}斜体\textit{内容}等宽\texttt{代码}。注意 LaTeX 里传统上强调用\emph{}它会根据上下文自动切换斜体和正体嵌套时效果比\textit好。无序列表\begin{itemize} \item ... \end{itemize}。有序列表\begin{enumerate} \item ... \end{enumerate}。想换成12这种样式用\begin{enumerate}[(1)]需要enumitem宏包。描述列表\begin{description} \item[术语] 解释 \end{description}。引用块\begin{quote} ... \end{quote}整体缩进适合放引文。脚注\footnote{内容}编号自动生成正文里在句末或标点后写。列表这块我建议加一个enumitem宏包它能统一控制列表的间距和缩进写正式文档时特别有用。默认的itemize上下间距偏大一页里放三四个列表排版会很松散加一行\setlist{nosep}就紧凑了。4.3 特殊字符转义对照表LaTeX 里有一批字符是有特殊含义的直接写在正文里会引发各种奇怪的报错。这张表建议存下来写文档时对一下。想输出的符号源码写法说明#\#宏参数符号$\$数学模式开关%\%注释符号不转义会把后面整行注释掉\表格列分隔符_\_下标符号{}\{\}分组符号~\textasciitilde{}不换行空格^\textasciicircum{}上标符号\\textbackslash{}命令前缀其中%和是最阴的两个。%会把后面的内容直接注释掉你以为是排版问题其实是内容被吃了。放在正文里会直接报Misplaced alignment tab character 。还有中文输入法下打出的全角符号比如全角分号、全角括号在代码里会引起莫名其妙的错误写命令的时候一定要切回半角输入。提示如果你要排版一段包含大量特殊字符的代码或路径别一个个手动转义用\verb|内容|或者verbatim环境它会原样输出。但注意\verb不能出现在命令参数里。5. 数学公式从行内到多行对齐的完整打法5.1 行内公式和行间公式的取舍公式有两种基本形态。行内公式用$...$包起来跟着文字走比如$a^2 b^2 c^2$。它的特点是上下标会被压缩、分式会变小为的是不破坏行距。行间公式单独占一行用\[ ... \]或者equation环境。前者不带编号后者自动编号。选择原则很实际。短的、简单的、只是提一下的符号用行内有分式、求和、积分、矩阵这种体积大的公式一律用行间否则行内渲染出来挤成一团或者行距被撑开得很难看。我见过有人在行内塞了一个三层嵌套分式那一行的行距能顶三行页面观感直接崩掉。如果确实需要在行内把公式渲染得饱满一点可以加\displaystyle比如$\displaystyle\sum_{i1}^{n} a_i$但要节制使用它会让行距变大。5.2 amsmath 的几个核心环境写公式前先加载\usepackage{amsmath, amssymb}这是行业标准配置align、cases、\text这些命令都靠它。带编号的单行公式用equation\begin{equation} \label{eq:newton} F G \frac{m_1 m_2}{r^2} \end{equation}多行对齐用align用标对齐位置用\\换行\begin{align} (ab)^2 a^2 2ab b^2 \label{eq:expand1} \\ (a-b)^2 a^2 - 2ab b^2 \label{eq:expand2} \end{align}不想让某一行编号在那一行末尾加\nonumber或者用align*环境整体不编号。分段函数用cases\begin{equation} f(x) \begin{cases} x^2, x \geq 0 \\ -x, x 0 \end{cases} \end{equation}矩阵用pmatrix圆括号、bmatrix方括号、vmatrix竖线元素之间用分列\\分行。多行居中不对齐的用gather需要内部再分组的用split套在equation里。这里有一个容易忽略的细节数学模式里直接写中文会报错。想在公式里放中文用\text{中文}包起来而\text需要amsmath加上中文支持ctex 已经处理好。另一个细节是公式里的多字母变量名比如velocity不要直接写会被当成 v 乘 e 乘 l 乘 o 乘 c 乘 i 乘 t 乘 y 的斜体连乘。正确写法是\mathit{velocity}或者用\mathrm{}看你要不要斜体。5.3 希腊字母、运算符、关系符速查背命令不现实但高频的那批必须记熟剩下的查表。下面这几张表覆盖了日常写作 90% 的需求。希腊字母小写源码大写源码α\alphaΓ\Gammaβ\betaΔ\Deltaγ\gammaΘ\Thetaθ\thetaΛ\Lambdaλ\lambdaΠ\Piμ\muΣ\Sigmaπ\piΦ\Phiσ\sigmaΨ\Psiφ\phiΩ\Omegaω\omega注意大写希腊字母里只有那些长得和拉丁字母不一样的才有专门命令像 Α、Β、Ε 这些直接写大写拉丁字母 A、B、E 就行这是约定俗成的写法。运算符和关系符符号源码符号源码×\times≤\leq÷\div≥\geq±\pm≠\neq·\cdot≈\approx∑\sum≡\equiv∏\prod∈\in∫\int∉\notin∮\oint⊂\subset∂\partial⊆\subseteq∇\nabla∪\cup∞\infty∩\cap→\to⇒\Rightarrow↦\mapsto⇔\Leftrightarrow求和、积分、极限的上下限写法\sum_{i1}^{n}、\int_{0}^{1}、\lim_{x \to 0}。在行间公式里它们会自动排到符号的上下方在行内会排到右下角这个差别是引擎自动处理的不用你干预。想要强制放在上下方加\limits比如$\sum\limits_{i1}^{n}$。括号自适应有个技巧\left(和\right)会根据内容高度自动调整大小比手动\big\Big\bigg省事。但注意\left和\right必须成对出现跨行的时候要用\right.或\left.补一个空的另一半。这是Missing \right. inserted报错的来源。5.4 编号、引用和多轮编译的关系公式编号这件事值得单独说因为它牵扯到 LaTeX 的一个核心机制交叉引用靠中间文件传递信息需要编译两遍。流程是这样的第一遍编译时\label把标签和它对应的编号写进.aux文件第二遍编译时\ref和\eqref从.aux里读到编号填进正文。所以如果你新加了一个标签就立刻看 PDF引用位置很可能显示成??。这不是错误再编译一遍就好了。用latexmk或者 VSCode 的xelatex ×2配方它会自动判断需要编译几遍。标签的命名建议形成习惯按类型加前缀eq:给公式、fig:给图、tab:给表、sec:给章节。这样在补全时能快速认出目标类型也避免不同元素重名导致引用错位。引用公式用\eqref{eq:newton}它自带括号引用图、表、章节用\ref{fig:xxx}括号自己写。6. 图片和表格浮动体机制其实是个优点6.1 graphicx 插图的正确姿势插图靠graphicx宏包。基本写法\begin{figure}[htbp] \centering \includegraphics[width0.8\textwidth]{figures/result.png} \caption{实验结果对比} \label{fig:result} \end{figure}几个要点。\centering让图片在本行居中注意它是命令不是环境别写成\begin{center}后者会额外增加垂直间距。width0.8\textwidth表示图片宽度占正文宽度的 80%\textwidth在单栏文档里是正文宽度双栏文档里要用\columnwidth。尺寸也可以用scale按比例缩放但我更推荐用宽度控制因为换模板时宽度是按相对值算的更稳。\caption放\includegraphics下面图的题注就在下方如果你想题注在上方把\caption挪到前面。\label一定要放在\caption后面因为标签记录的是就近的编号放前面会记到上一张图的编号上这是个非常隐蔽的 bug。图片路径管理有个技巧如果所有图都在figures/目录下在导言区写\graphicspath{{figures/}}正文里就只用写文件名改目录结构的时候只改一处。支持的格式方面XeLaTeX 下 png、jpg、pdf 都没问题矢量图优先用 pdf 或 eps。这里有个常见坑文件名不要带中文和空格Windows 下偶尔能编过换到别的系统就是找不到文件。另外扩展名建议写全result和result.png在不同环境下行为不一致。6.2 为什么你的图片总是跑到后面去这是被问得最多的问题之一我代码写在第二章图片渲染出来跑到第三章去了。这不是 bug是浮动体机制。LaTeX 把 figure 和 table 叫做浮动体它的逻辑是图片不一定非要待在源码所在的位置如果当前页剩余空间放不下就自动移动到后面某页避免页面上留下大片空白。这个机制在排版密集的论文里其实是优点能让页面利用率最大化。问题在于当图片较多、文本很满的时候浮动体可能被推到好几页之后。控制它有几个办法。[htbp]这几个字母的意思是 here、top、bottom、page按优先级给引擎授权写[!htbp]里的感叹号表示忽略一些美观限制让它更倾向于待在原地。如果还是不行用float宏包的[H]参数强制就在这里代价是可能出现页面底部的大块空白。\usepackage{float} ... \begin{figure}[H] \centering \includegraphics[width0.7\textwidth]{figures/arch.pdf} \caption{系统架构} \label{fig:arch} \end{figure}另一个办法是placeins宏包在章节之间插一个\FloatBarrier强制把之前的浮动体全部排完再继续适合这一节的图不能跑到下一节去的需求。我自己写论文的习惯是正文里正常用[htbp]如果某张图确实跑得太远再单独上[H]不要全文都用[H]那样排版会很难看。6.3 三线表、表格自动换行和跨页长表表格是中文论文里比图片更麻烦的部分因为学术界要求三线表而三线表的线宽、间距都有讲究。用booktabs宏包\toprule、\midrule、\bottomrule三条线比\hline好看很多。\begin{table}[htbp] \centering \caption{不同算法的性能对比} \label{tab:perf} \begin{tabular}{lccc} \toprule 算法 准确率 召回率 耗时/s \\ \midrule 方法 A 0.92 0.89 12.4 \\ 方法 B 0.95 0.93 18.7 \\ 方法 C 0.94 0.91 9.3 \\ \bottomrule \end{tabular} \end{table}{lccc}里的字母表示列对齐方式l 左对齐、c 居中、r 右对齐有几列写几个字母。表格里分列、\\换行和正文的规则完全相反这一点初学者经常搞混。表格自动换行是高频需求因为单元格里的文字一长就会把表格撑出页面。有三种方案各有适用场景。第一种用p{宽度}列类型指定这一列的固定宽度文字超过就自动换行\begin{tabular}{p{2.5cm} p{5cm} p{5cm}} \toprule 项目 说明 备注 \\ \midrule 数据预处理 对原始数据做归一化和异常值剔除 需要保留处理前后的对照样本 \\ \bottomrule \end{tabular}第二种用tabularx宏包配合X列它会自动把剩余宽度平均分配给 X 列不用手动算宽度特别适合表格宽度正好等于正文宽度的需求\usepackage{tabularx} ... \begin{tabularx}{\textwidth}{lXX} \toprule 模块 功能描述 实现要点 \\ \midrule 采集层 负责多源数据的接入和缓存 采用生产者消费者模型降低耦合 \\ \bottomrule \end{tabularx}第三种单元格内部还要再分行的用makecell宏包\makecell[l]{第一行\\第二行}。注意这里的\\是在单元格内部换行外面那层的\\才是表格行结束用途不同。跨页的长表格必须用longtable环境它会自动在每页重复表头。用\endhead标记表头\endfirsthead标记首页表头。这个功能在附录里放参数表、结果明细表时非常有必要。如果表格实在超宽还有个暴力办法\resizebox{\textwidth}{!}{表格}把整个表格缩放到正文宽度。用它的问题是字号会跟着缩小正文 12pt 的文档里缩出来 8pt 的字可读性差建议只作为最后手段优先考虑换列类型或者把表格改成转置形式。7. 参考文献和模板别从零造轮子7.1 手写文献表、BibTeX 和 biblatex 三条路参考文献有三条路复杂度递增收益也递增。最原始的是thebibliography环境一条条手写\begin{thebibliography}{99} \bibitem{knuth1984} D. E. Knuth. \emph{The TeXbook}. Addison-Wesley, 1984. \bibitem{lamport1994} L. Lamport. \emph{LaTeX: A Document Preparation System}. Addison-Wesley, 1994. \end{thebibliography}正文里用\cite{knuth1984}引用。这种方式的好处是零依赖缺点是格式全手动改了顺序或者删了一条所有序号得自己维护一旦超过二十条就非常痛苦。第二条路是 BibTeX把文献信息集中写在一个.bib文件里正文用\cite{}引用编译时自动生成文献表。.bib文件的条目长这样article{zhang2023, author {张三 and 李四}, title {一种改进的优化算法}, journal {计算机学报}, year {2023}, volume {46}, number {3}, pages {512--525} }然后在.tex末尾写\bibliographystyle{gbt7714-numerical} \bibliography{ref}中文文献要配gbt7714样式这需要单独安装对应的.bst文件。英文用plain、unsrt、ieeetr这些内置样式unsrt是按引用顺序排、plain是按作者字母排选哪个看目标期刊要求。BibTeX 的编译链是xelatex → bibtex → xelatex → xelatex四步。少一步就会出现引用显示成[?]的情况。第三条路是 biblatex 加 biber这是更现代的方案配置在导言区\usepackage[backendbiber, stylegbt7714]{biblatex} \addbibresource{ref.bib}正文末尾写\printbibliography。编译链是xelatex → biber → xelatex → xelatex。biblatex 的优势是可以精细控制引用格式比如\citeauthor、\citeyear、\textcite这些命令写综述类文章时很方便。缺点是一些老模板还只支持 BibTeX套模板前先看清楚要求。不管你走哪条路.bib文件的编码必须是 UTF-8从数据库导出的条目经常带上不兼容的字符中文作者名、带特殊符号的期刊名都是排查重点。7.2 学校模板和竞赛模板的正确用法绝大多数人第一次认真用 LaTeX都用的是别人给的模板学校学位论文模板、数学建模竞赛模板、期刊投稿模板。这些模板通常包含一个.cls文档类或.sty宏包文件加上一个示范用的main.tex。使用模板的核心原则只有一条不要改.cls和.sty文件所有个性化改动写在main.tex的导言区。原因是模板文件是学校统一维护的格式审查时可能对比版本而且它内部定义了大量格式命令你改一处可能连锁影响别处。正确的打开方式是这样几步。把模板解压到一个纯英文路径的目录下先原样编译一遍确认能出 PDF这一步是排除环境问题的基准。编译时注意它要求的引擎数学建模的cumcmthesis这类模板通常要求 XeLaTeX有的还要求特定的编译链看README或者模板自带的说明文件。然后逐块替换内容把示例正文换成你自己的但保留它的章节命令、图表命令结构。填写封面信息时很多模板把姓名、学号、导师这些做成自定义命令比如\school{}、\major{}改之前先在.cls里搜一下命令名确认参数类型。直接往模板里硬写文字很容易被格式检查判不合格。竞赛模板还有几个专属坑。一是版本数学建模的模板每年可能有更新用旧版本套新要求格式对不上。二是封面页和承诺书通常有严格的字数限制和签名位改动要谨慎。三是附录代码竞赛论文一般要求附录放完整代码用listings或minted宏包排版minted需要系统装 Python 和 pygments如果编译环境不干净改用listings更稳。四是一页页的排版要求比如摘要页、目录页的页眉页脚模板一般已经处理好不要自己去动fancyhdr的设置。还有一点不得不提模板里的空白示例内容要删干净。我见过交稿时毕业论文里还留着此处填写摘要的这种低级错误在截止日期前一晚特别容易发生。建议在正式提交前用编辑器的搜索功能把示例请填写TODO这类关键词过一遍。8. 那些让我熬夜的报错和排查套路8.1 从 .log 文件读错误先看第一条 errorLaTeX 的报错有个特点一个错误往往会引发后面一连串错误比如漏了一个右花括号后面可能刷出几十条报错。所以第一条报错通常最接近根因修了它后面的可能一起消失。编译失败时去看同目录下的.log文件。里面以!开头的行、以及l.123这样的行号标记是关键。配合 VSCode 里配的-file-line-error报错面板会直接给出文件名:行号:错误信息点一下跳到出错位置效率高很多。我的排查顺序是这样的先看报错面板的第一条跳到对应行检查命令拼写、括号配对、环境是否闭合。如果把出问题的段落整段注释掉选中后按快捷键注释编译通过了说明问题就在这段里。然后在这段里二分注释很快就能定位到具体那行。这个方法笨但在面对几百行的文档时是最快的手段。8.2 高频报错对照表下面这些是我这几年遇到频率最高的报错配上原因和处理方式。报错信息常见原因处理方式Undefined control sequence命令拼写错误或宏包没加载检查拼写确认\usepackage到位Missing $ inserted数学符号写在文本模式常见是_、^用$包起公式或转义符号File xxx.sty not found宏包缺失tlmgr install xxx补装Package fontspec Error: The font cannot be found字体名写错或本机没装换成系统已装字体名Misplaced alignment tab character 正文里直接写了改成\Emergency stop括号或环境严重不匹配从后往前找未闭合的环境Runaway argument?花括号少了一个检查最近几行的{}配对! LaTeX Error: File xxx.png not found图片路径错、文件名带空格中文用相对路径文件名纯英文引用显示为[?]或??没跑 bibtex 或多轮编译不够跑完整编译链中文显示为乱码用了 pdfLaTeX 编中文换成 XeLaTeXEmergency stop这个最吓人但原因往往很朴素。它的意思是我不干了通常出现在\begin{document}之后原因是导言区里某个宏包加载失败或者括号从某一行开始就再也没配对上。这时候我会先把导言区里除文档类之外的\usepackage全注释掉逐个放开很快就能找到哪个宏包出的问题。8.3 Word 公式和 LaTeX 公式的互转现实工作中总会遇到要跟用 Word 的人交换文件的场景这里说两个方向的转换。Word 公式转 LaTeX从 Word 复制公式粘贴到.tex里通常得到的是乱码或者图片不行。新版 Word 的公式编辑器支持 LaTeX 语法输入在公式设计工具里可以切换Unicode Math和LaTeX两种模式切到 LaTeX 后输入的\frac{a}{b}会被解释成公式。反过来你想把 LaTeX 公式放进 Word先在公式编辑器里把模式切成 LaTeX粘贴进去再按空格或者回车它就会渲染成规范公式不再是一串反斜杠命令。批量文档转 LaTeXpandoc可以把.docx转成.tex命令是pandoc input.docx -o output.tex。它的优点是快缺点也很明显转换后的格式很素公式可能变成 OMML 的残留、图片位置混乱、样式全丢。我的用法是只拿它来提取纯文字内容公式和图表全部手动重排千万别指望一键转换能直接投出去。还有个细节值得一提Word 里显示的 LaTeX 源码如果直接粘到.tex里没反应先确认你粘的位置不在verbatim或者代码环境内那些环境会原样输出。另外一个常见问题是公式里的中文——Word 转换过来的公式里混着中文注释得手动用\text{}包起来否则一编译就报错。最后说个我自己的更新习惯。这篇教程我打算持续更新每次遇到新的坑、新的宏包用法、新的模板问题就补一节进去。LaTeX 这个工具的特点是你用得越深要学的东西越多但绝大部分人只需要掌握本文覆盖的这批内容就能顺利写完一篇论文。剩下那些冷门排版需求等真正遇到再查比一开始就啃完一整本手册高效得多。我个人的经验是先用起来报错就是最好的老师每次报错修好之后你对这套系统的理解都会比看十页文档更扎实。有一个小技巧我一直用给自己建一个snippets.tex文件把常用的导言区配置、三线表模板、公式环境、参考文献配置全部存进去新开一个文档就复制这份模板改不用每次从头回忆命令。这个文件用一年下来能省掉大量翻文档的时间也建议你从今天开始攒。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。