
1. 先搞清楚LaTeX到底解决了什么问题再决定要不要装很多人第一次接触LaTeX是因为导师甩过来一句论文用LaTeX写或者看到某篇排版极其干净的论文底下一行小字写着Typeset by LaTeX。于是打开搜索引擎输入latex安装看到一堆发行版名字、镜像站地址、命令行参数瞬间劝退。我见过太多人卡在这一步最后默默回去打开了Word。但如果你真的理解LaTeX在做什么安装这件事其实半小时就能搞定剩下的时间都花在写内容上而不是反复调格式上。1.1 内容与排版分离这是LaTeX最核心的设定LaTeX的本质是一个标记语言 排版引擎的组合。你写的是纯文本里面用命令标记出结构——这里是一级标题那里是一个公式这段是一张表格。至于标题用什么字号、公式和正文之间留多少间距、图片浮到哪里全部交给排版引擎按规则决定。这和Word的逻辑完全相反。Word里你是所见即所得标题大了就用鼠标拖一下图片跑了就手动拽回来。文档二三十页还行一旦上百页、几十个公式、上百条参考文献手动调格式就成了灾难改一个字号全篇图号错位删一段文字目录页码全乱。LaTeX的解法是你只负责写这是什么引擎负责决定长什么样。章节编号、图表编号、交叉引用、目录、参考文献全部自动生成。你插了一张图编号自动排你删掉一段后面所有编号自动重排参考文献换一种样式只改一行命令。这个特性在长文档上的价值是压倒性的。1.2 哪些人真的需要LaTeX哪些人装了会后悔我不推荐所有人都用LaTeX。实话实说如果你的需求是写一份三页的通知、做个简单的简历或者需要频繁和不懂技术的人协作改稿Word或者在线文档反而更合适。LaTeX的学习成本是真实存在的前两周你大概率会因为它不给面子而暴躁。真正值得上LaTeX的场景有这么几类学位论文、期刊投稿篇幅长、格式规范严格、公式多、参考文献多而且很多期刊和学校只收LaTeX源文件。理工科的公式密集型文档数学、物理、计算机方向的笔记、讲义、实验报告。公式的排版质量差距一眼就能看出来。需要版本管理的写作LaTeX源文件是纯文本可以直接用Git管理每次改动的diff清清楚楚。这是Word的docx格式做不到的。需要模板化批量产出同一套模板换数据生成几十份报告用LaTeX写脚本比手工改Word高效得多。反过来说如果你只是偶尔写点东西而且完全不涉及公式和交叉引用那LaTeX带来的收益可能覆盖不了学习成本。这不是LaTeX不好是工具要匹不匹配的问题。1.3 一套LaTeX运行需要哪几个零件很多人搞不清TeX、LaTeX、发行版、编辑器这几个词的关系这里一次性说清楚。TeX是最底层的排版引擎本质是一个宏处理器。LaTeX是建立在TeX之上的一套宏包集合提供了\section、\begin{equation}这类高层命令让你不用直接跟底层打交道。发行版TeX Live、MiKTeX、MacTeX是把引擎、LaTeX宏包、字体、常用工具打包在一起的合集装一个发行版就等于把整套环境准备好了。编辑器则是你写代码的地方可以是VSCode、TeXstudio、TeXShop甚至Vim。所以完整的链路是组件作用常见选择排版引擎把源文件编译成PDFpdfTeX、XeTeX、LuaTeX宏包集合提供高层命令LaTeX 各类宏包发行版一次性打包安装上面两样TeX Live、MiKTeX、MacTeX编辑器写源文件、触发编译VSCode、TeXstudio、TeXShop编译工具自动跑多轮编译、清理中间文件latexmk提示初学者最常见的误区是把编辑器和发行版混为一谈。安装了TeXstudio不代表装了LaTeXTeXstudio只是一个空壳还需要单独装发行版。理解了这几个零件后面的安装就变成了一道选择题发行版选哪个、编辑器选哪个、编译链路怎么搭。2. 发行版三选一TeX Live、MiKTeX、MacTeX的取舍逻辑打开官网一看Windows上推荐MiKTeXLinux上默认TeX LiveMac上又是MacTeX。很多人就此卡住不知道该听谁的。其实这三个的关系没那么复杂选错了也不会世界末日但选对了能省不少后续维护的力气。2.1 TeX Live一次装齐长期省心TeX Live是跨平台的发行版Windows、Linux、macOS都能装也是绝大多数学校和期刊模板默认假设的环境。它的特点就一个字全。完整安装下来大约7到8GBCTAN上几乎所有主流宏包都包含在内编译任何模板基本不会遇到缺包。这个全带来的是确定性。你拿到一份师兄传下来的论文模板直接编译就能出PDF不需要中途停下来装七八个宏包。写论文最忌讳的就是思路正顺的时候被环境问题打断TeX Live用空间换掉了这个麻烦。代价是首次下载量大安装时间长。用官方源在国内下载可能要几个小时所以镜像加速这一步几乎必做后面我会详细讲怎么换源。TeX Live还有一个加分项是tlmgr也就是TeX Live Manager。装包、更新、回滚、切换镜像源都用它命令统一、文档齐全。每年发布一个新版本旧版本可以继续用但如果想跨年度升级官方建议是重新装而不是原地升级——这一点要提前有心理准备。2.2 MiKTeX按需下载的轻量派MiKTeX的核心卖点是按需安装。首次安装基础包可能只有几百MB当你编译时遇到缺失的宏包它会弹窗问你要不要下载点一下自动装好。对于只需要写几份简单文档、硬盘空间紧张的用户这个设计很友好。但这个友好在写长篇文档时会变成干扰。想象一下你正在改论文点编译弹窗点确定等下载再编译又弹窗——这种打断体验过一次就够了。虽然有自动安装缺失宏包的选项可以打开但网络不稳定时等待时间依然不可控。MiKTeX的另一个优势是Windows上更原生的安装体验图形化安装向导做得比较顺滑对完全没接触过命令行的用户更友好。它也有自己的包管理命令mpm不过生态和文档丰富度上不如tlmgr。我的建议是如果只是轻度使用、只写短文档MiKTeX够用如果是认真写论文或者长期使用直接上TeX Live别折腾。2.3 macOS上的MacTeX与Windows下的差异MacTeX本质上就是为macOS打包好的TeX Live功能上基本一致只是额外捆绑了TeXShop这个原生编辑器以及Ghostscript、BibDesk等工具。安装包大约4GB多也有一个体积小得多的BasicTeX版本约100MB只包含基础宏包缺什么用tlmgr补。Mac上的一个额外注意点是字体路径和权限。macOS的字体管理跟Windows不同用fontspec宏包调用系统字体时字体名称要用字体册里显示的准确名称而不是文件名。比如你想用宋体Windows上写SimSunMac上可能要写Songti SC写错了会报The font ... cannot be found。Windows这边则要留意路径里的空格和中文。TeX对路径处理偶尔会出问题尤其是把工作目录放在桌面这种中文路径下的时候。我一般建议单独建一个纯英文路径的工作目录比如D:\tex\papers能避开一大类莫名其妙的报错。至于Linux用户直接apt install texlive-full或者用TeX Live的官方安装脚本都行。发行版仓库里的版本可能偏旧如果要用新宏包还是建议用官方安装方式。注意不管装哪个发行版都别把工作目录放在带空格或中文的路径下这是新手报错里出现频率最高的一类原因而且报错信息往往指向别处很难排查。3. TeX Live的完整安装过程与镜像加速细节假设我们已经决定装TeX Live接下来把这套流程拆细。我会把Windows和类Unix系统的做法都讲清楚重点是镜像加速这一步它决定了你是等半小时还是等四小时。3.1 下载入口怎么选install-tl-windows.exe 还是完整ISOTeX Live的获取方式主要有三种。第一种是从官网下载网络安装器Windows上是install-tl-windows.exe跨平台是install-tl.zip。这个文件只有几十MB运行时从远程仓库边下边装。优点是包小、可以随时中断续传缺点是全程依赖网络网络慢的时候体验很差。第二种是下载完整ISO镜像大约5GB左右。下载完之后挂载或者解压从本地安装全程不需要网络速度取决于硬盘。缺点是要先下完5GB才能开始装而且下ISO本身也慢。第三种是通过镜像站直接下载网络安装器。这是我最推荐的方式因为安装器本身很小从镜像站下载几秒钟就好真正的网络流量消耗在安装过程中而我们会在安装时指定镜像源来加速。具体做法打开国内镜像站的CTAN目录找到systems/texlive/tlnet/路径下载里面的install-tl-windows.exeWindows或install-tl-unx.tar.gzLinux/macOS。3.2 用国内镜像替换默认源的具体做法这一步是关键。默认仓库在海外国内直连经常只有几十KB每秒装完整版要按小时算。换成国内镜像站之后速度能跑到几MB每秒整个安装过程通常半小时内结束。图形界面安装的情况下安装器启动后先别急着点下一步找到Repository或者修改之类的入口把仓库地址改成镜像站的地址。地址通常长这样以清华镜像为例https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet/如果要走命令行安装可以在启动安装器时直接指定仓库# Windows在解压目录下打开命令行 install-tl-windows.bat -no-gui -repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet/ # Linux / macOS解压后进入目录 ./install-tl -repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet/中科大、阿里云等也有CTAN镜像内容基本同步哪个速度快用哪个。换镜像之后如果速度还是上不去可以换个时段试镜像站的同步和带宽会有波动。提示镜像地址末尾的斜杠不要漏掉写成不带斜杠的形式在某些版本上会导致仓库识别失败。3.3 安装选项逐项过一遍scheme、路径、快捷方式进入安装配置界面后有几项需要留意。**安装方案scheme**默认是full也就是全量安装约7到8GB。如果你硬盘紧张可以选basic或small但之后遇到缺包就得靠tlmgr install补写论文时不建议图这个省。我的做法一直是直接全量一次装好后面几年都不用管。安装路径建议用默认值Windows上一般是C:\texlive\2024这种形式。不要改成带空格或中文的路径。Linux/macOS上默认在/usr/local/texlive/下面。快捷方式选项可以勾上主要是在Windows开始菜单里加一个TeX Live Manager的入口方便以后更新。portable模式是便携安装装到U盘里带着走一般用不到除非你有在无管理员权限的机器上使用的需求。安装后调整系统PATH这一项务必勾上。勾了之后才能在任意位置直接用tex、xelatex这些命令。如果漏勾了后面要手动把C:\texlive\2024\bin\windows加到环境变量里虽然也能补救但多一道手续。3.4 验证安装是否成功三条命令装完之后别急着打开编辑器先在命令行里验证一下。打开新的命令行窗口依次执行tex --version xelatex --version tlmgr --version三条命令都能正常输出版本信息说明引擎和包管理器都装好了。如果提示不是内部或外部命令八成是PATH没生效——试试关掉命令行重新开一个有时候环境变量需要新窗口才读得到。再补一条实际编译测试。新建一个test.tex写下面这几行\documentclass{article} \begin{document} Hello, \LaTeX. \end{document}然后在同目录下执行pdflatex test.tex如果目录里出现了test.pdf打开能看到Hello, LaTeX.环境就是通的。这一步别跳过它能提前暴露一类问题而不是等你写完五千字论文才发现编译不了。3.5 tlmgr 日常维护更新、装包、回滚环境装好之后日常维护基本靠tlmgr。三个最常用的操作# 切换镜像源加速后续所有下载 tlmgr option repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet/ # 先更新自己再更新所有已安装的包 tlmgr update --self tlmgr update --all # 安装某个缺失的宏包 tlmgr install tabularxupdate --self要放在前面因为包更新逻辑本身可能有变化先更新管理器再更新包更稳妥。如果某次更新之后编译突然报错可以用tlmgr回滚单个包tlmgr restore package-name远程存储上保留了历史版本用tlmgr info --revision可以查到有哪些版本可选。这个功能在赶论文deadline的时候能救命——最怕的就是更新完环境模板编译不过了而你没有时间排查。我的习惯是在论文冲刺期不做全量更新。等交完稿、有空闲了再统一更新避免引入意料之外的变量。4. 编辑器怎么搭VSCode LaTeX Workshop 的配置链路发行版装好之后如果你只打算偶尔编译一下命令行xelatex 文件名.tex其实就够了。但真写起来没有编辑器的高亮、补全、错误跳转效率会低很多。4.1 为什么我不推荐一开始就用 TeXstudioTeXstudio是专门为LaTeX做的编辑器开箱即用按钮齐全向导式的编译菜单对新手很友好。如果你的目标是今天就要把论文编译出来用它没什么问题。但如果你本来就在用VSCode写代码我建议直接用LaTeX Workshop插件。理由是省掉切换编辑器的成本你的主题、快捷键、Git集成、其他插件都在同一个环境里不用为了写LaTeX单独维护一套工作习惯。LaTeX Workshop的编译链配置虽然要写点JSON但配置一次就能长期用而且灵活度比TeXstudio的图形化配置高得多。另外VSCode的LaTeX Workshop在错误定位、PDF正向反向搜索、多文件项目支持上做得相当扎实配合latexmk之后基本上改完文件保存就自动编译、PDF自动刷新体验很顺。4.2 插件安装与 settings.json 的关键字段在VSCode扩展市场搜LaTeX Workshop安装即可。装完之后按CtrlShiftP输入settings json打开settings.json把配置写进去。下面这份配置是我用了挺久的版本做了精简去掉了花哨的部分{ latex-workshop.latex.tools: [ { name: xelatex, command: xelatex, args: [ -synctex1, -interactionnonstopmode, -file-line-error, %DOC% ] }, { name: bibtex, command: bibtex, args: [%DOCFILE%] }, { name: latexmk, command: latexmk, args: [ -synctex1, -interactionnonstopmode, -file-line-error, -xelatex, %DOC% ] } ], latex-workshop.latex.recipes: [ { name: latexmk (xelatex), tools: [latexmk] }, { name: xelatex × 2, tools: [xelatex, xelatex] }, { name: xelatex → bibtex → xelatex × 2, tools: [xelatex, bibtex, xelatex, xelatex] } ], latex-workshop.latex.recipe.default: latexmk (xelatex), latex-workshop.view.pdf.viewer: tab, latex-workshop.latex.autoBuild.run: onSave, latex-workshop.latex.clean.fileTypes: [ *.aux, *.bbl, *.blg, *.idx, *.ind, *.lof, *.lot, *.out, *.toc, *.fls, *.log, *.fdb_latexmk, *.synctex.gz ] }几个字段值得单独解释。-synctex1是生成正向/反向搜索数据的关键没有它就没法从PDF点回源码位置。-interactionnonstopmode让编译遇到错误时不停下来等输入否则在自动化流程里会卡死。-file-line-error最有用它让日志里的报错直接显示成文件名:行号: 错误信息排查效率提升很大。%DOC%表示当前主文件的完整路径%DOCFILE%表示不带扩展名的文件名bibtex需要这种形式。4.3 用 latexmk 当统一入口的好处latexmk是一个编译调度工具它自己会判断需要跑几轮编译、什么时候需要调用bibtex。配了它之后你只要点一次编译它就把该跑的轮次都跑完交叉引用和参考文献都正确。手动指定编译链的问题是文档里有交叉引用时至少要跑两遍xelatex有参考文献时要先跑xelatex、再bibtex、再xelatex两遍一共四轮。记这些顺序很烦而且一旦忘了一轮PDF里就会出现问号引用显示成??。用latexmk -xelatex这一整套逻辑它自己搞定。这也是为什么我把latexmk (xelatex)设成默认recipe。4.4 编译产物、清理与正向反向搜索编译过程中会产生一堆中间文件.aux、.log、.toc、.out、.fls、.fdb_latexmk、.synctex.gz。这些东西不是垃圾.aux存着交叉引用信息和页码删了就要重新编译好几轮.synctex.gz是正反向搜索的数据。所以清理要分清楚什么时候做。我的做法是平时不清理只在需要打包给别人、或者编译出现了奇怪的缓存问题时清理一次。LaTeX Workshop提供了清理命令配置里的clean.fileTypes决定了清理哪些后缀。正向搜索是从源码跳到PDF对应位置快捷键一般是CtrlAltJ。反向搜索是按住Ctrl在PDF上点一下跳回源码对应行。这两个功能在改长文档时非常省时间前提是编译时带了-synctex1并且PDF是在VSCode内置标签页里看的外部查看器需要额外配置。注意不要盲目开启outDir把编译产物输出到子目录。这个配置看起来很整洁但会导致相对路径问题——\includegraphics里的图片路径可能找不到。如果你确实想用建议配合\graphicspath{{figures/}{../figures/}}之类的设置或者干脆别折腾让中间文件留在源文件旁边。5. 从零写第一份文档文档类、中文支持与目录结构环境搭好接下来是真正开始写。这一步有两个坎文档类选择以及中文编译。5.1 文档类选择article、report、book 与 ctex 系列LaTeX的标准文档类有三个article最常用适合论文、报告、笔记。没有章chapter这一级结构是section/subsection。report多了一个\chapter层级适合学位论文、技术报告。有独立的标题页机制。book双面排版有前言、后记、索引等结构章节从右页开始适合书籍。中文用户还要知道ctex系列。ctexart、ctexrep、ctexbook分别对应上面三个区别在于它们内置了中文排版规则自动处理中英文之间的间距、调整首行缩进为两个汉字宽、设置合适的行距、处理中文标点。如果直接用article写中文会得到行距偏紧、缩进不对、中英文挤在一起的效果。所以中文文档直接用ctexart系列别自己配置中文规则那是个深坑。5.2 中文编译为什么必须走 XeLaTeX这是新手最容易踩的坑。你用pdflatex编译带中文的文档会报一堆关于字符编码和字体的错误或者干脆输出乱码、缺字。原因在于引擎对字符的处理方式不同引擎字符处理中文支持推荐场景pdfTeX8位编码需要额外配置麻烦需CJK宏包纯英文老模板XeTeX原生Unicode直接调用系统字体好配ctex即可中文文档首选LuaTeX原生Unicode可编程性强好需要Lua脚本扩展时xelatex直接调用操作系统的字体你写的宋体就是系统里的宋体不需要额外的字体映射配置。这是它比pdflatex省事的地方。所以中文文档的编译链就固定成xelatex或者latexmk -xelatex。上面配置里我把默认recipe设成latexmk (xelatex)就是为了避免每次都要手动选。5.3 一个可以直接抄的最小可用模板下面这个模板涵盖了大部分中文文档需要的东西可以直接复制保存成.tex文件用\documentclass[UTF8,12pt,a4paper]{ctexart} \usepackage{geometry} \geometry{left2.5cm,right2.5cm,top2.5cm,bottom2.5cm} \usepackage{graphicx} \graphicspath{{figures/}} \usepackage{amsmath,amssymb} \usepackage{booktabs} \usepackage{tabularx} \usepackage{makecell} \usepackage{hyperref} \hypersetup{colorlinkstrue,linkcolorblue,urlcolorblue,citecolorblue} \title{文档标题} \author{作者} \date{\today} \begin{document} \maketitle \tableofcontents \newpage \section{第一节} 这里是正文。中英文混排 mixed text 之间的间距会自动处理。 \subsection{小节} 段落之间空一行就是新段落。 \end{document}关于\graphicspath{{figures/}}它的作用是声明图片默认从figures子目录找。好处是正文里写\includegraphics{plot.pdf}就行不用每次都写完整相对路径。如果以后要搬动项目只要保持目录结构一致图片引用不会断。目录结构上我习惯是这样project/ ├── main.tex # 主文件只管 include 和全局设置 ├── chapters/ # 各章节单独成文件 ├── figures/ # 图片 ├── refs.bib # 参考文献 └── build/ # 编译产物可选5.4 分文件管理\input 与 \include 的差别长文档一定要拆文件不然一个几千行的.tex改起来是噩梦。拆文件用两个命令\input{chapters/intro}直接插入文件内容不产生额外的.aux文件可以嵌套使用。\include{chapters/intro}会单独产生一个.aux文件并且强制在插入前后分页。只能用在文档主体不能嵌套。\include的好处是支持\includeonly可以只编译指定章节写大论文时能大幅缩短编译时间\includeonly{chapters/method} ... \include{chapters/intro} \include{chapters/method} \include{chapters/experiment}这样即使只有一章要改编译时间也能压到几秒。缺点是那个强制分页——如果你不想要章节一定从新页开始就只能用\input。我的一般做法是章节用\input前后置部分摘要、附录、致谢用\include这样既能用\includeonly跳过附录又不会让每个小节都强制换页。提示\input的文件名不需要带.tex后缀LaTeX会自动补。写上后缀有时候也会工作但不写是更规范的做法。6. 高频语法实操换行、公式、图片、表格自动换行环境通了模板有了接下来是每天都要用到的语法。这四个是搜索量最大的主题也是新手问得最多的。6.1 换行的四种写法与它们的实际差别LaTeX里的换行行为跟Word完全不同这是最需要适应的地方。段落换行源码里空一行就产生一个新段落。新段落会有首行缩进中文是两个汉字宽段间距由文档类决定。这是最常用的方式你几乎不需要手动打换行符。强制换行不换段用\\。这会在当前位置断行但后面接的还是同一段落不缩进。常见用途是诗、地址、表格里的单元格内换行。要小心的是\\用在段落最后一行会产生Theres no line here to end的警告。\newline效果跟\\类似语义上更轻。区别在于\\可以带可选参数控制垂直间距比如\\[6pt]而\newline不行。\par等价于空一行显式表示这里是一个段落边界。用得多的地方是在宏定义里因为空行在宏定义内部有时不好控制。还有一个容易搞混的概念是断行建议。如果你只是想告诉LaTeX这个位置比较适合断行而不是强制断用\linebreak[3]数字0到4表示建议强度。它只在排版上需要时才会断不会强行留下大片空白。\newpage和\clearpage是分页命令。区别是\clearpage会先把所有浮动体图、表输出完再翻页\newpage不会。所以文档里有未处理的浮动体时用\clearpage更安全。6.2 数学公式行内、行间、多行对齐与希腊字母公式是LaTeX的看家本领。基本形式有三种行内公式设质量为 $m$速度为 $v$则动能为 $E \frac{1}{2}mv^2$。 带编号的行间公式 \begin{equation} E mc^2 \label{eq:emc} \end{equation} 不带编号的行间公式 \[ \int_{-\infty}^{\infty} e^{-x^2}\,dx \sqrt{\pi} \]行内公式用$...$会挤在正文里适合短小的符号。行间公式用equation环境独占一行并自动编号用\label打标签之后可以用\eqref{eq:emc}引用。多行对齐用align环境需要amsmath\begin{align} f(x) (x1)^2 \\ x^2 2x 1 \end{align}是竖直对齐点\\是换行。这个环境里每一行都自动编号不想编号的行在\\前加\notag。希腊字母和常用符号是另一个高频需求下面这张表覆盖了大部分日常使用类别命令与效果小写希腊字母\alpha\beta\gamma\delta\epsilon\theta\lambda\mu\pi\sigma\phi\omega大写希腊字母\Gamma\Delta\Theta\Lambda\Pi\Sigma\Phi\Omega变体字形\varepsilon\varphi\vartheta关系运算符\leq\geq\neq\approx\equiv\sim\propto集合符号\in\notin\subset\supset\cup\cap\emptyset大型运算符\sum\prod\int\oint\lim其他常用\infty\partial\nabla\forall\exists\pm\times\cdot几个实际踩过的坑数学模式里的_和^必须配花括号x_10只会把1作为下标要写x_{10}。文本里出现的下划线、百分号、与号、井号都要转义\_\%\\#。想在公式里写中文用\text{中文}但需要amsmath加载。还有一个排版细节公式里表示乘法的点用\cdot还是\times是有讲究的。数值相乘用\times比如2 \times 10^3符号相乘用\cdot或直接相邻比如mv。这不是LaTeX的规则是数学排版惯例但在正式论文里会被审稿人挑出来。6.3 插图graphicx 的参数与浮动体定位插图的标准写法\begin{figure}[htbp] \centering \includegraphics[width0.8\textwidth]{figures/result.pdf} \caption{实验结果对比} \label{fig:result} \end{figure} 如\autoref{fig:result}所示……figure是一个浮动体。这意味着你写的位置和最终PDF里的位置可能不一样LaTeX会按排版规则把它挪到合适的地方。[htbp]是位置建议h此处t页顶b页底p单独一页。建议只是建议LaTeX不保证遵守。一开始大家都会纠结为什么我的图跑到后面去了。我的建议是别跟浮动体较劲。用\ref交叉引用图在哪里都能被正文引到。强行用[H]需要float宏包把图钉死在当前位置结果是页面上出现大片空白看起来更糟。\includegraphics的关键参数是宽度建议用\textwidth的比例比如0.8\textwidth这样在不同页边距设置下都能保持相对比例。写绝对宽度比如10cm在换模板时容易溢出。图片格式上矢量图用PDFMatlab、Python绘图都可以直接导出PDF照片用JPG截图用PNG。不要用EPS除非你还在用很老的期刊模板。6.4 表格自动换行tabularx 的 X 列与 makecell表格是LaTeX里最容易出问题的地方尤其是列宽和换行。标准tabular环境的列宽是自适应的反正内容多长就多长结果就是文字太长时表格直接冲出页边距。解决办法有三个。方案一指定固定宽度的 p 列宽度内会自动换行。\begin{tabular}{|p{3cm}|p{8cm}|} \hline 项目 说明 \\ \hline A 这里是一段比较长的说明文字超过8厘米会自动换行。 \\ \hline \end{tabular}方案二用tabularx的X列自动分配剩余宽度并换行。这个更优雅因为总宽度定死为\textwidth不会溢出。\usepackage{tabularx} \begin{table}[htbp] \centering \caption{方案对比} \begin{tabularx}{\textwidth}{lX} \toprule 方案 说明 \\ \midrule tabularx 自动分配列宽长文本自动换行并撑满剩余空间适合说明性列 \\ p列 需要手动计算宽度控制精细但计算繁琐 \\ \bottomrule \end{tabularx} \end{table}方案三用makecell在单元格内手动换行适合表头这种需要两行显示的场景。\usepackage{makecell} \makecell{第一行\\第二行}另外强烈推荐用booktabs宏包替代\hline。booktabs提供的\toprule、\midrule、\bottomrule粗细不同、间距更合理是学术论文的默认风格比满屏横线的\hline好看太多。注意tabularx表格里的X列不能跟|竖线配合使用会报错。如果一定要竖线得用p列方案或者加载tabularx之后自定义列类型。还有一个实际会遇到的细节表格里的数字列如果按右对齐小数点会参差不齐。加载siunitx宏包用S列类型它会自动按小数点对齐\usepackage{siunitx} \begin{tabular}{lS[table-format3.2]} \toprule 名称 {数值} \\ \midrule 甲 123.45 \\ 乙 6.78 \\ \bottomrule \end{tabular}注意S列的表头需要用花括号包起来否则会被当成数字解析。7. 编译报错怎么查从日志读起前面都是顺利的情况。真实场景下你会遇到各种报错而且LaTeX的报错信息有时候非常不直觉。这一节讲排查方法。7.1 日志的读法第一处 Error 才是关键LaTeX遇到第一个严重错误就会停下除非开了nonstopmode但日志里会累积大量警告和提示。新手最容易犯的错是从头开始读日志读了半天不知道问题在哪。正确做法是在日志里搜第一个!开头的行。这是LaTeX的报错标记格式一般是! Undefined control sequence. l.23 \mycommand {参数}它告诉你三件事错误类型、出错的行号l.23、出错的原始代码行。如果编译时加了-file-line-error日志会直接显示成文件名:行号: 错误信息更直观。找到第一个错误之后先修这一个再重新编译。因为后面的一堆错误很可能是第一个错误的连锁反应——一个缺了右括号的环境可能导致后面所有内容都被解析错报出几十条无关的错误。修完第一个再编译往往后面的错误自己就消失了。7.2 几类高频报错的定位与修复下面这几类错误覆盖了我遇到过的八成情况报错信息常见原因处理方式Undefined control sequence命令名拼错或宏包未加载检查拼写确认\usepackage是否引入Missing $ inserted数学符号出现在文本模式检查_^\alpha等是否漏了$包裹File xxx.sty not found宏包缺失tlmgr install xxx或检查包名拼写Environment xxx undefined环境名拼错或宏包缺失检查\begin{}和\end{}是否匹配Runaway argument?括号不配对多半是花括号用编辑器的括号匹配功能逐段检查Font ... not found调用了不存在的字体核对系统字体名尤其macOS上Overfull \hbox内容超出行宽警告非错误一般不影响输出必要时调图片宽度Overfull \hbox是最常见的警告它只是说某一行超出了页边距一点点。中文文档里因为不能随便断行这个警告很常见通常可以忽略。但如果超出的量很大比如超过20pt就要检查是不是图片太宽或者表格太宽。Missing $ inserted这一条特别值得说。它经常在你写a_b或者10%的时候出现。_在文本模式是非法字符%在LaTeX里是注释符。所以正文里写变量名是 file_name要写成file\_name写增长了 10%要写成10\%。这两个字符是新手的重灾区。7.3 宏包缺失与版本冲突的处理顺序宏包缺失一般好解决日志里会明确写File xxx.sty not found然后tlmgr install xxx就行。麻烦的是版本冲突。典型表现是某个宏包加载后另一个宏包的命令失效了或者报出sorry, but the package is incompatible这种错误。处理原则是按加载顺序排查。LaTeX的宏包加载是有顺序的后面的宏包可以覆盖前面的定义。常见的冲突组合hyperref一般不放在前面它最好最后加载因为很多宏包要在它之前设置好锚点。ctex和某些字体宏包可能冲突同时用会重复设置字体。两个功能相似的宏包同时加载比如caption和ccaption可能互相覆盖。我的排查方法是二分法注释掉一半的\usepackage编译如果好了说明冲突在注释掉的那一半里如果还是错说明在保留的那一半里。然后继续二分几次就能定位到具体是哪个包。有个工具值得一提nag宏包可以检测过时的命令用法l2tabu文档列出了各种不推荐的旧写法。不过第一次写论文的时候不用管这些先把内容写出来更重要。提示环境和宏包更新之后如果突然报错先想想最近有没有跑过tlmgr update --all。回滚是比排查更快的解决路径尤其是deadline临近的时候。8. 论文模板与工程化习惯到这一步你已经能自己写文档了。但如果目标是写学位论文或者投稿还有几个工程化层面的习惯需要建立。8.1 拿到学校模板后的第一步不是改内容很多学校的论文模板是.zip包里面有主文件、样式文件.cls、示例章节、图片、参考文献样例。拿到之后大部分人的第一反应是删掉示例内容开始写自己的。我不建议这么做。正确的第一步是先原封不动编译一遍。确认模板在你的环境里能跑通、能出PDF。如果这一步就报错说明环境或模板本身有问题这时候你还没写任何内容问题定位起来简单得多。跑通之后再复制一份作为工作副本保留原始包不动。以后如果怀疑是自己的修改导致的问题可以拿原始包对比编译快速区分是模板问题还是我的问题。关于.cls样式文件原则上不要改。这是学校的格式规范改了可能导致格式审查不通过。如果某个地方不满意优先在main.tex的导言区用命令覆盖而不是动.cls。确实必须改的时候在旁边加注释说明改了什么、为什么改。8.2 引用管理BibTeX 与 biber 该怎么选参考文献有两种主流方案传统方案bibtex\bibliographystyle{}。refs.bib里存条目正文用\cite{key}引用编译时跑bibtex生成bbl文件。样式有很多种中文论文常用gbt7714。现代方案biblatexbiber。功能更强支持更复杂的排序、过滤、多语言。中文支持用biblatex-gb7714-2015。选择标准很简单跟着模板走。学校的模板用什么你就用什么。如果模板用了bibtex你硬改成biblatex可能要改一堆配置得不偿失。.bib文件的写法要注意每一个字段的格式都要正确article{zhang2023example, author {张三 and 李四}, title {一个示例论文标题}, journal {示例期刊}, year {2023}, volume {12}, number {3}, pages {45--56} }几个实际的坑中文作者名之间用and连接不是逗号页码用--两个短横线而不是-title里的专有名词大小写要用花括号保护比如{LaTeX}否则某些样式会把它们全部改成小写。引用键zhang2023example自己定但要有规律比如姓年份关键词几百条文献的时候能快速定位。8.3 用 Git 管 .tex 和该忽略哪些文件LaTeX源文件是纯文本天生适合Git。但编译产生的中间文件不要进版本库会污染diff、撑大仓库。一个.gitignore示例# 编译产物 *.aux *.log *.out *.toc *.lof *.lot *.bbl *.blg *.fls *.fdb_latexmk *.synctex.gz # 输出 *.pdf # 编辑器和系统文件 .vscode/ .DS_Store Thumbs.db*.pdf要不要忽略是个取舍。如果PDF是最终交付物比如投稿要求提交PDF那就不忽略如果只是编译中间结果忽略掉让仓库更干净。提交的时候commit message写清楚比如完成第二章初稿、修正图3的坐标轴标签。半年后回头看能快速找到某个改动是什么时候做的。8.4 几个用久了才体会到的习惯最后分享几个我用了一段时间之后才形成习惯的做法不算规范但确实省事。导言区加注释分区。所有\usepackage堆在一起过两周你就忘了哪个包是干什么的。按功能分组加注释% 中文与字体 \usepackage[UTF8]{ctex} % 数学 \usepackage{amsmath,amssymb} % 图表 \usepackage{graphicx,booktabs,tabularx} % 引用与链接 \usepackage{hyperref}给每个图表加label命名带类型前缀。fig:result、tab:params、eq:energy、sec:method。这样在补全列表里能一眼看出引用的是什么类型的对象也能避免图表标签重名。写完一节就编译一次。不要等写完五千字再编译那时候报错几百条根本无从下手。一次编译只需要几秒边写边编错误在最小范围内暴露。重要文档留一份定稿快照。投稿前的版本单独复制一份存档命名为v1-submitted。之后如果继续改新版本另存。这样万一需要回到投稿版本直接拿出来用不用凭记忆还原。别在deadline前一天更新环境。这条我用血泪换来的。更新宏包可能引入新的行为而你没有时间排查。环境稳定就让它稳定等忙完再说。絮叨到这儿其实我想说的是LaTeX的安装和各种配置本质上是一次性的投入。真正卡住大部分人的不是安装本身而是没人告诉你为什么这一步要这样做。镜像加速是为了避开跨境网络的波动XeLaTeX是为了直接调用系统字体latexmk是为了省掉记编译轮次的负担——每一处配置背后都有一个具体的痛点理解了痛点配置就不再是一串需要背诵的命令。我自己现在的习惯是每换一台机器从装发行版到配好VSCode前后大概四十分钟。大部分时间花在等TeX Live下载和解压上真正需要动手的就是改几行配置。这套东西装好之后能安安静静用上好几年中间偶尔跑一次tlmgr update就够了。