
写论文那会儿我手机里存了十几个收藏夹全是“overleaf怎么插入图片”“latex公式换行不生效”“参考文献标成[1-3]到底怎么写”这种碎片笔记。每篇都只说半句话真卡住的时候翻回去还得再搜半天。后来我实在受不了索性把常用的LaTeX操作全部整理成一份自用笔记从图片、公式、表格到参考文献和文档合并每一条都直接给能抄的代码和注释。这篇博文就是那份笔记的完整版。如果你正在用Overleaf写毕业论文、期刊投稿或课程report或者刚接触LaTeX但已经受够了Word里手动调格式这份笔记可以让你少走很多弯路。内容不追求教科书式的全面只挑高频场景全部是我实测过能编译通过、排版效果稳定的写法。1. 这个项目到底在记什么从一篇小论文说起1.1 项目缘起为什么选择Overleaf而不是本地安装先说结论如果你只是写论文不是做LaTeX宏包开发直接用Overleaf就行没必要在本地装发行版。我最初在本地装了完整版TeX Live将近5个G编译速度也没觉得多快。后来改用Overleaf浏览器打开就能写自动同步不用担心换电脑后环境丢了导师要改稿也只需要发个链接。Overleaf的另一个隐形优势是模板丰富。像IEEE会议、Elsevier期刊、各大学硕博论文模板点一下就能复制到自己账户里。你不需要从零搭一个.tex文件直接在现成模板上改内容就好这对新手非常友好。但Overleaf也有一个明显的学习成本它的报错信息对新人不太友好。有时候你只漏了一个\end{...}它给你弹出一大段日志看着像天书。所以我这份笔记的核心思路是不解释所有底层的TeX语法而是把高频操做成“代码块 一句话解释 常见坑”的格式用的时候直接搜、复制、改参数。1.2 笔记的核心结构从输入到输出的完整路径一份LaTeX文档不管是在Overleaf还是本地写起来都遵循一个固定框架\documentclass{article} % 文档类型article, book, report等 \usepackage[UTF8]{ctex} % 中文支持如果写中文论文必加 \usepackage{graphicx} % 插图必备宏包 \usepackage{amsmath, amssymb} % 数学公式必备宏包 \usepackage{float} % 让图片表格位置可控 \title{论文标题} \author{你的名字} \date{\today} \begin{document} \maketitle % 生成标题区域 \section{引言} % 一级标题 这里是正文内容... \end{document}这个骨架是所有LaTeX文档的地基。\documentclass和\begin{document}之间的部分是导言区用来加载宏包和做全局设置\begin{document}之后是正文区你写的内容全部放在这里。我整理笔记的时候给自己定了一个规则每个常用操作都写成一个可独立复制的代码块。因为LaTeX最大的特点就是“所见非所得”你看到的是一堆命令得编译之后才知道效果。所以笔记必须做到“复制即用”而不是给你一段残缺的例子让你自己补。1.3 编译方式选择PDFLaTeX还是XeLaTeXOverleaf左上角有个“Menu”按钮点开能看到编译方式。很多新手在这里卡住明明代码没错怎么中文显示不出来大概率是编译方式选错了。PDFLaTeX默认选项适合纯英文文档编译速度快。XeLaTeX支持系统字体和中文排版写中文论文必须选这个。LuaLaTeX功能更强但对新手来说没太大必要。我用的组合是XeLaTeX ctex宏包这个是Overleaf官方中文模板的默认搭配稳定性很好。如果你是从本地TexStudio转过来的注意本地默认可能也是PDFLaTeX写中文前记得改。提示切换编译方式后第一次编译可能会因为缓存而报错。这时点一下“Recompile”旁边的小三角选“Clear cached files”清除缓存文件再重新编译即可。2. 插入图片从单张到多图并排2.1 基础图片插入LaTeX的路径和浮动体机制先看最基础的单图插入代码\documentclass{article} \usepackage{graphicx} \usepackage{float} \begin{document} \begin{figure}[htbp] \centering \includegraphics[width0.8\textwidth]{图片文件名.png} \caption{这是图片标题} \label{fig:示例} \end{figure} \end{document}这段代码里有一个LaTeX新手很容易忽略的概念图片不是直接插在写字的位置而是放在浮动体里。LaTeX会根据[htbp]参数决定把图片放在哪里——hhere当前位置、ttop页顶、bbottom页底、p单独一页。所以你会发现明明代码写在\section{方法}后面编译出来图片却跑到下一页去了。这是正常的LaTeX在调整图片到最优排版位置。如果你想让图片绝对出现在代码所在位置可以加\usepackage{float}然后写[H]注意是大写\begin{figure}[H] \centering \includegraphics[width0.8\textwidth]{fig1.png} \caption{强制放在当前位置} \end{figure}2.2 图片大小和路径两个最常踩的坑\includegraphics支持很多可选参数我平时用得最多的是这三种参数写法作用示例width0.8\textwidth图片宽度占行宽的80%最常用height5cm指定高度限制太高图时用scale0.5按原图比例缩放简单粗暴但容易超宽坑点一图片格式兼容问题。Overleaf默认编译方式如果没改成XeLaTeX遇到部分格式的图片可能出现问题。尽量使用PNG、PDF、JPG三种格式如果图片是EPS格式要么提前转成PDF要么在导言区加\usepackage{epstopdf}让它自动转换。坑点二文件名不要带中文名。这是我反复踩的坑。Overleaf支持中文文件名看起来挺美但部分宏包和编译组合会对中文路径报错。我的习惯是图片一律命名为fig1.png、table2_example.pdf这样的格式内部用代码区分含义不要直接用中文名。2.3 多图并排与子图排版写论文经常需要把多张图放在一行做对比我一般用两种写法写法一不加子图标题直接横向排列\begin{figure}[htbp] \centering \includegraphics[width0.45\textwidth]{a.png} \hfill \includegraphics[width0.45\textwidth]{b.png} \caption{左右对比图} \label{fig:对比} \end{figure}这里的\hfill是水平填充把两张图挤到左右两端。width用百分比控制两张图各占45%行宽中间自然的留白就够了。写法二用subfigure子图环境带独立编号\usepackage{subcaption} \begin{figure}[htbp] \centering \begin{subfigure}{0.45\textwidth} \includegraphics[width\textwidth]{a.png} \caption{方法A的结果} \label{fig:a} \end{subfigure} \hfill \begin{subfigure}{0.45\textwidth} \includegraphics[width\textwidth]{b.png} \caption{方法B的结果} \label{fig:b} \end{subfigure} \caption{两种方法的效果对比} \label{fig:总图} \end{figure}这种方式子图会标为(a)、(b)正文里引用\ref{fig:a}会显示为“图1a”引用\ref{fig:总图}显示为“图1”。期刊投稿时很多期刊要求这种格式。2.4 图片排版进阶绕排和双栏如果你用的是双栏模板比如IEEE conference图片经常会因为太宽而被截断。解法有两个% 解法1通栏图跨两栏显示 \begin{figure*}[htbp] \centering \includegraphics[width\textwidth]{wide_figure.png} \caption{跨双栏的宽图} \end{figure*} % 解法2绕排让文字环绕图片 \usepackage{wrapfig} \begin{wrapfigure}{r}{0.4\textwidth} \centering \includegraphics[width0.4\textwidth]{small.png} \caption{右侧绕排小图} \end{wrapfigure}figure*环境带星号会跨双栏wrapfigure可以把小图嵌在段落一侧。注意绕排环境容易在列表前后出问题一般段落中间用比较稳。3. 数学公式行内公式到多行对齐3.1 行内公式与独立公式的基本写法写数学公式是LaTeX的看家本领也是很多人迁移来的核心原因。公式分两种层级行内公式和独立公式。质能方程可以写为 $E mc^2$这是行内公式。 独立公式默认居中并且不自动编号 \[ E mc^2 \] 如果想自动编号用equation环境 \begin{equation} E mc^2 \label{eq:质能} \end{equation}行内公式用单美元符号$...$包裹独立公式用\[...\]或者equation环境。区别在于equation会自动生成公式编号并且可以用\label和\ref在正文中引用。3.2 多行公式与对齐最常用的三个环境写推导过程最怕公式一长串没对齐看得人头晕。这里介绍三个我常用的环境1. align环境最常用\begin{align} a b c \\ d e \end{align}是对齐点\\是换行。对齐之后多个等号的上下位置整整齐齐审稿人看着舒服自己也容易检查推导错误。align是每行都编号的。2. 多行公式只编号一次split环境\begin{equation} \begin{split} a b c d e \\ \quad f g \end{split} \end{equation}split嵌在equation里面意思是“把一个公式拆成多行”编号只有一个。换行后加\quad缩进视觉上告诉读者“这行是续行”。3. 不编号的对齐环境align*\begin{align*} y x^2 2x 1 \\ (x1)^2 \end{align*}带星号的版本不生成编号。我写latex笔记的时候默认用align*因为很多时候自己推导过程不需要编号。3.3 常用符号表与特殊结构的写法公式写多了之后你会发现难点不在语法而在记不住符号命令。这里整理一份我查得最频繁的速查表含义LaTeX命令效果希腊字母\alpha、\beta、\gammaα, β, γ分式\frac{分子}{分母}分数求和\sum_{i1}^{n}Σ积分\int_{a}^{b}∫无穷大\infty∞向量\vec{v}v→偏导\frac{\partial f}{\partial x}∂f/∂x点乘\cdot·正比\propto∝属于\in∈根号\sqrt{x}√x矩阵写法\begin{pmatrix} a b \\ c d \end{pmatrix}pmatrix是带圆括号的矩阵还有bmatrix方括号、vmatrix行列式竖线。注意矩阵每一行用\\分隔每一列用分隔和表格语法一致。3.4 公式与文字不对齐的解决经验很多新手在Overleaf里遇到的一个经典问题是公式和文字底端不对齐看起来整个段落很怪异。尤其在列表里写公式的时候行内公式会把行高撑大导致上下间距不协调。我的解决办法有两个方向第一使用\displaystyle让行内公式以显示样式排版行内 $\frac{1}{2}$ 写出来偏小写成 $\displaystyle\frac{1}{2}$ 就正常大小。第二调整局部垂直间距。如果是align环境前后空距不合适可以用\setlength{\abovedisplayskip}{3pt}和\setlength{\belowdisplayskip}{3pt}控制或者干脆用\vspace{-0.5em}手动微调。注意\displaystyle会让行距变大如果整段都是公式更推荐用\[\]独立公式而不是行内写。代码规范上大量复杂公式不要塞在$...$里。4. 表格制作从三线表到复杂排版4.1 最简单的手写表格LaTeX表格的入门代码是这样的\begin{table}[htbp] \centering \begin{tabular}{|c|c|c|} \hline 方法 准确率 耗时(s) \\ \hline A 85.3\% 12.4 \\ B 92.1\% 8.9 \\ \hline \end{tabular} \caption{不同方法的性能对比} \label{tab:对比} \end{table}{ |c|c|c| }声明了3列每个c表示一列居中对齐竖线是列边框。分隔单元格\\换行\hline画水平线。这就是一个能正常编译的最简表格。但说实话这种默认样式的表格看起来非常“中世纪”放在论文里有点拿不出手。4.2 让表格变美观booktabs宏包期刊和毕业论文的表格样式绝大多数是用booktabs宏包做出来的“三线表”——只有顶线、底线和表头分隔线其余全部去掉。\usepackage{booktabs} \begin{table}[htbp] \centering \begin{tabular}{ccc} \toprule 方法 准确率 耗时(s) \\ \midrule A 85.3\% 12.4 \\ B 92.1\% 8.9 \\ \bottomrule \end{tabular} \caption{三线表示例} \label{tab:booktabs} \end{table}\toprule、\midrule、\bottomrule是booktabs提供的三条粗细不同的线比\hline好看得多。我的原则是任何论文表格能不用竖线就不用竖线。4.3 自动换行、多行多列合并表格里经常遇到单元格内容太长、挤成一团的情况。主要是两个需求需求一表格自动换行默认tabular环境里的单元格是不会自动换行的必须手动加换行符。如果想让它自动换行用p{宽度}列类型\begin{tabular}{lp{4cm}r} 编号 实验描述 结果 \\ 1 这是一段很长很长的描述文字超过4厘米之后就会自动换行 通过 \\ \end{tabular}p{4cm}表示该列宽度4厘米文字超过宽度自动换行左对齐。有时候你觉得写了p{4cm}还是没换行很可能是因为你用的是l或c而不是p{}这一点最容易看漏。需求二合并多行多列\usepackage{multirow} \begin{tabular}{ccc} \toprule \multirow{2}{*}{方案} \multicolumn{2}{c}{实验结果} \\ \cmidrule(lr){2-3} 指标1 指标2 \\ \midrule A 0.85 12.4 \\ \bottomrule \end{tabular}\multicolumn{2}{c}{实验结果}把两列合并成一个大表头\multirow{2}{*}{方案}让“方案”两个字纵向跨越两行\cmidrule(lr){2-3}只画2到3列之下的短水平线。4.4 表格神器在线生成器和AI辅助思路手写复杂表格容易漏和\\排版调半天还不一定对。我现在的习惯是复杂表格绝不全手写优先用Excel设计好表格内容和结构。用在线LaTeX表格生成器比如tablesgenerator.com直接把Excel内容粘贴进去自动生成LaTeX代码。复制回Overleaf微调列宽和宏包。这方法对数据量大、列数多的表格尤其有效耗时从半小时压缩到两分钟。另外如果你经常需要批量处理数据转表格可以考虑在本地用Python的pandas库结合df.to_latex()方法生成LaTeX代码。这条我建议有一定编程基础的人再试新手直接用在线生成器就够了。5. 参考文献从手写编号到BibTeX自动化5.1 最简单的手写参考文献环境如果你只需要引用三五篇文献最直接的方式是用thebibliography\begin{thebibliography}{9} \bibitem{ref1} Author A, Author B. Title of the paper[J]. Journal Name, 2020, 12(3): 45-50. \bibitem{ref2} Author C. Book Title[M]. Beijing: Publisher, 2019. \end{thebibliography}正文中引用时写\cite{ref1}编译后在正文里自动显示为[1]参考文献列表也会按引用顺序编号。这种方式的痛点是文献一多手动管理\bibitem就非常容易乱。5.2 BibTeX自动化管理项目从“手抄”升级到“数据库”我现在的项目基本都用BibTeX。原理很简单你有一个.bib文献数据库文件里面每篇文献是一个条目正文用\cite{key}引用编译时LaTeX会自动从.bib文件里筛选被引用的文献生成参考文献列表。.bib文件里的条目长这样article{smith2020, author {Smith, John and Lee, Alice}, title {A Novel Approach for ...}, journal {Journal of LaTeX Studies}, year {2020}, volume {12}, number {3}, pages {45--50} } book{knuth1984, author {Knuth, Donald E.}, title {The TeXbook}, publisher {Addison-Wesley}, year {1984} }在Overleaf里使用BibTeX的关键是搞清楚编译流程。不是点了Recompile就完事参考文献需要多编译几遍。正确操作是编译 → 点一下顶部菜单里的“BibTeX”按钮 → 再编译。Overleaf现在有“Auto Compile”模式多数情况下能自动完成但如果参考文献没出来手动走一遍上面的流程就能解决。正文中引用时用\cite{smith2020}参考文献列表在文末加两行\bibliographystyle{unsrt} % 参考文献样式 \bibliography{references} % references是.bib文件名不用加后缀bibliographystyle控制文献列表的格式常用的有这几个样式特点应用场景plain按作者字母排序数字编号通用unsrt按引用顺序编号很多中文期刊用这个ieeetranIEEE风格理工科投稿apalike作者-年份风格文科社科5.3 连续引用标注[1-3]的写法“参考文献连续引用怎么标注[1-3]”这个问题我搜过好几次也踩过坑。这里直接说结论。如果希望\cite{a}和\cite{b}合并显示成[1,2]或者连续引用显示成[1-3]推荐用**cite宏包**\usepackage{cite}这样\cite{a, b}会自动显示为[1,2]如果a和b恰好编号相邻还会自动合并成[1,2]甚至[1-2]。用\cite{a, b, c, d}时如果编号连续自动显示为[1-4]。如果你用biblatex可以这样控制\usepackage[stylenumeric, citestylenumeric-comp]{biblatex} \addbibresource{references.bib}citestylenumeric-comp就是压缩连续编号为区间格式。文末输出用\printbibliography而不是\bibliography。注意连续引用的效果和编译方式有关。如果你从BibTeX切换到BibLaTeX\bibliography命令需要改成\printbibliography否则会报错。6. 多文件合并与多人协作6.1 用\input和\include拆分章节写毕业论文的时候所有内容挤在一个.tex文件里滚动查看和排查错误都很痛苦。拆分成多个文件管理是我强烈推荐的实践。Overleaf的文件夹管理在左侧边栏你可以创建chapters文件夹把每一章放一个.tex文件里主文件只负责组织和加载这些子文件。主文件main.tex中的写法\documentclass{book} \usepackage[UTF8]{ctex} \begin{document} \include{chapters/introduction} % 第一章 引言 \include{chapters/method} % 第二章 方法 \include{chapters/experiment} % 第三章 实验 \include{chapters/conclusion} % 第四章 结论 \end{document}子文件比如chapters/introduction.tex里不需要写\documentclass和\begin{document}直接写内容\chapter{引言} 这里是引言的正文内容。\include和\input的区别是命令行为适合场景\input{file}直接把文件内容粘贴进当前位置段落级嵌入\include{file}独立编译该文件内容自动分页章节级拆分简单理解章节用\include正文里复用的小片段用\input。6.2 用subfiles宏包实现子文件单独编译\include有个痛点你改了第二章却得从头编译整篇论文才能预览效果。如果论文很长编译时间能折磨死人。解法是subfiles宏包。操作分成两步第一步主文件导言区加载宏包并注明子文件名称\documentclass{book} \usepackage{subfiles} \begin{document} \subfile{chapters/method} \end{document}第二步每个子文件自身也是独立可编译的.tex文档需要保留完整的框架\documentclass[../main.tex]{subfiles} \begin{document} \chapter{方法} 这里是方法章节的内容。 \end{document}这样你在Overleaf客户端里直接打开chapters/method.tex点“Recompile”只编译这一章速度飞快。所有子文件共享主文件的宏包设置公式、引用、参考文献照常工作。6.3 Overleaf在线协作与修订模式Overleaf的多人协作功能说实话比Git对新人友好得多。点击右上角“Share”输入合作者邮箱还可以设置只读或可编辑权限。导师用只读链接看稿你可以直接在文档里用Overleaf的评论功能和导师沟通像Google Docs一样逐条回复。如果多人同时编辑建议用Overleaf的修订模式Track Changes。在编辑区右上角的模式切换里选“Review”再开启修订所有修改会以不同颜色标出方便一眼看出谁改了什么。多人协作最容易出现的冲突问题是两人同时改同一个文件后保存的会覆盖先保存的内容。所以我和合作者约定好同一时间各自负责不同的章节用subfiles拆开基本不会冲突。7. 常见问题与干货物资7.1 编译报错排查看懂logs的关键信息Overleaf编译报错时最关键的是找到第一处错误因为后面的报错往往是连锁反应。我处理报错的固定思路是打开“Logs and output files”面板拉到最上面找第一个红色的!开头的行。从这一行往上翻几行一般会看到出错的具体代码行。最常见的三类错误我给你做了一个速查报错内容常见原因解决办法Environment X undefined宏包没加载检查\usepackageFile not found路径错误或文件名拼写错检查文件名和扩展名Missing $ inserted公式环境没闭合检查$和\[是否成对Undefined control sequence命令拼写错误或宏包缺失用\usepackage加载对应宏包Runaway argument?花括号没闭合检查大括号是否成对Emergency stop文件编码或宏包冲突清理缓存重新编译如果实在看不出问题用二分法排查把最近新增的段落注释掉一半编译如果不报错了说明问题在注释掉的部分里再缩小范围。这个方法虽然笨但百试百灵。7.2 中文显示与字体相关的3个要点用Overleaf写中文论文只要记住三件事第一编译方式选XeLaTeX。Menu里切换不切换中文大概率乱码或编译失败。第二导言区加ctex宏包\usepackage[UTF8]{ctex}第三如果字体难看用\setCJKmainfont指定字体\setCJKmainfont{Noto Serif CJK SC} % 宋体风格 % 或者 \setCJKmainfont{Source Han Serif SC} % 思源宋体Overleaf的字体列表里能看到的系统字体基本都能直接用。写中文简历或者PPT风格文档时我一般把字体换成“Noto Sans CJK SC”更现代的黑体正文换行和紧缩都更好看。7.3 其他高频小技巧清单这份清单是我笔记里另一个高频翻看区域都是零散但实用的小技巧换行符怎么打在LaTeX里直接按回车不会在渲染结果中换行必须在行尾加\\或者用\newline。如果只是想换段空一行即可。特殊符号转义正文中如果要输入%、、_、#这些符号必须写成\%、\、\_、\#否则会编译报错。强制不换行人名和缩写如果不想被折行断开比如LaTeX现成的命令又不想让它断可以用\mbox{...}包裹。字体加粗和斜体\textbf{粗体}、\textit{斜体}、\underline{下划线}。颜色加\usepackage{xcolor}用{\color{red} 这是红字}。列表无序列表用itemize有序列表用enumerate每一项用\item开头。页边距调整\usepackage{geometry}然后\geometry{left2.5cm, right2.5cm, top2.5cm, bottom2.5cm}。页眉页脚加\usepackage{fancyhdr}用\fancyhead[L]{左侧页眉}、\fancyhead[C]{中间页眉}设置。最后一个建议自用笔记该往哪个方向发展这份笔记目前已经覆盖了我和身边同学写论文时90%以上的操作需求。如果你也想整理一份属于自己的LaTeX笔记我建议不要像我一开始那样只收藏不消化而是每遇到一个真正解决了的问题就用两三行代码加一句注释记下来放到按类别分好的文件里。三个月后再回头看你就会拥有一份比任何教程都贴合自己习惯的速查手册。LaTeX的上手曲线确实比Word陡但它带来的排版效果和写作效率尤其是处理公式和参考文献时的省心程度用久了真的会“回不去”。这篇笔记里的内容全部是用Overleaf实测过的你可以放心复制。接下来遇到具体问题多编译、多看日志、多拆解慢慢就熟练了。