很多人第一次在macOS上接触LaTeX多半是被毕业论文或者期刊投稿逼的。Word排版在纯文本场景下其实够用可一旦公式密度上来、参考文献格式换来换去、插图表格像堆积木一样摆位置你就知道什么叫“改一处崩一片”。我从本科毕设用Word鏖战到凌晨三点到研究生阶段全面转向LaTeX前后在Mac上折腾了很久踩过不少坑尤其是中英文混排这一块——网上教程七零八落要么只讲安装不讲适配要么只给模板不讲为什么。这篇就把我整套可复用的配置和经验写下来覆盖从环境安装、VS Code配置、中文字体体系到期刊模板结构、三线表格、图片定位、表格跨页这类论文高频操作末尾再加一份排错笔记。刚入门想搭环境的新手可以照着走已经被中文编译折磨到怀疑人生的朋友也能在第三节和第六节找到对应的解。1. 从Word到LaTeXmacOS论文写作的真实体验1.1 为什么macOS LaTeX是科研党的黄金组合macOS生态对LaTeX的友好程度确实比Windows高出一个量级。这不是玄学而是底层机制决定的。macOS内置的CoreText字体渲染对中文支持非常成熟XeLaTeX引擎可以直接调用系统中文字体比如宋体-简、黑体-简、苹方不需要像Windows那样额外安装字体到系统中才能让LaTeX识别。你在终端里跑一句fc-list或者在VS Code里编译通过XeLaTeX调用系统字体整个流程是“所见即所得”的字体映射方式比Windows下折腾fontconfig要省力得多。另外macOS本质上是Unix系统终端环境和Linux高度一致LaTeX命令行工具链、latexmk自动编译循环、脚本批处理文件名所有这些在Unix-like环境下都运行得特别自然。TeX Live在macOS下通过MacTeX发行版安装后所有二进制路径都是标准的/usr/local/texlive/...配合VS Code的集成终端调用基本没有Windows那种权限、路径分隔符、命令行编码的麻烦。1.2 Word排版下那些让人崩溃的场景我说个真实的对比场景。Word里写带编号的公式一旦在第二章前面插入三张图、两个表格后面所有“图2-1”的引用编号全部错位你需要挨个手动改。参考文献要是用尾注格式从顺序编码制换成作者年份制那基本等于重写一遍引用列表。这在LaTeX里就是一个命令的事\ref{}自动引用编号BibTeX/BibLaTeX一键切换参考文献样式。Word的“样式”功能理论上也能做自动化但实际论文写作中目录、图表编号、交叉引用这套链路的稳定程度和LaTeX差得很远。还有公式输入。Word的公式编辑器处理复杂推导式时光标永远在不知道哪里矩阵、分段函数、多行对齐公式的排版效果跟LaTeX的amsmath根本不在一个层面。你在期刊投稿时尤其会意识到很多期刊提供LaTeX模板审稿人和排版编辑都默认你交的是LaTeX源文件。中文学术圈这几年也在迅速跟进硕士博士论文模板、核心期刊模板几乎都有官方LaTeX版本。1.3 你需要先建立的三个基本认知LaTeX不是编辑器而是一套排版系统。你写的是带有控制序列的纯文本文件编译器把它变成PDF。这个转变需要适应但效率会指数级增长。引擎、宏包、发行版是三个不同的概念。发行版如MacTeX提供编译器和宏包管理器引擎XeLaTeX/LuaLaTeX/pdfLaTeX决定你用什么样的方式编译宏包如ctex、booktabs是解决具体排版问题的工具箱。中文适配这件事引擎和宏包各占一半功劳。编译过程一定有中间文件。.aux、.toc、.bbl、.log这些后缀名你以后会不断见到它们不是垃圾是交叉引用、目录、参考文献传递信息的桥梁。理解了这点很多诡异问题就迎刃而解。2. MacTeX与VS Code两小时搭好可复用的编译环境2.1 安装MacTeX标准版还是BasicTeXmacOS上LaTeX的发行版是MacTeX官网直链是tug.org/mactex也可以通过Homebrew安装brew install --cask mactex安装包大约4-5GB装完会自带TeX Live、TeXShop编辑器、LaTeX Workshop的依赖库Perl/Python模块、BibDesk文献管理工具。如果你是纯新手我的建议是不要碰BasicTeX直接上完整版。BasicTeX只有约100MB但缺了大量必备宏包中文字体支持、表格基础宏包、引用工具你都得用tlmgr install一个个补很多宏包还有依赖关系补包越野越远。完整版听起来占磁盘空间但换来的是“开箱即用”。用Homebrew装还是官网装都行选在终端里能敲出xelatex --version就算成功。装完后顺手做一次发行版更新sudo tlmgr update --self sudo tlmgr update --all这里不太建议每次都更新到最新新版TeX Live偶尔会和老模板产生兼容问题我用2023版妥妥跑毕业论文不需要追新。2.2 VS Code与LaTeX Workshop一份可复制的settings.json编辑器方面我用VS Code LaTeX Workshop插件没有第二选择。TeXShop虽然随MacTeX自带界面更加一键化但批量操作、多文件工程管理、Git版本控制这些场景下VS Code的工程能力完胜。LaTeX Workshop插件的安装很简单在VS Code扩展市场搜索“LaTeX Workshop”安装即可。关键是配置。默认配置下LaTeX Workshop会让你用pdfLaTeX编译这在碰到中文的时候基本是必死的——pdfLaTeX完全不支持中文字体除非你用CCT或天元这类老古董方案。我们要做的是把XeLaTeX设为默认编译器再配好参考文献编译链。打开VS Code的settings.json写入如下配置{ latex-workshop.latex.recipes: [ { name: xelatex, tools: [xelatex] }, { name: xelatex - bibtex - xelatex - xelatex, tools: [xelatex, bibtex, xelatex, xelatex] } ], latex-workshop.latex.tools: [ { name: xelatex, command: xelatex, args: [ -synctex1, -interactionnonstopmode, -file-line-error, -pdf, %DOC% ] }, { name: bibtex, command: bibtex, args: [%DOCFILE%] } ], latex-workshop.latex.clean.fileTypes: [ *.aux, *.bbl, *.blg, *.idx, *.ind, *.lof, *.lot, *.out, *.toc, *.acn, *.acr, *.alg, *.gls, *.glo, *.ist, *.fls, *.log, *.fdb_latexmk ], latex-workshop.view.pdf.viewer: tab }解释两个关键点。-synctex1打开源代码与PDF同步定位按下Command点击PDF中的一行能跳回对应LaTeX源码反过来源码中按CommandOptionJ也能定位到PDF对应位置。-interactionnonstopmode让编译出错时不停在交互界面直接生成带错误日志的PDF对自动化编译体验很重要不然报错卡住整个VS Code界面会显得像死机。2.3 第一次编译从空文档到Hello PDF配置完成后新建一个.tex文件建议文件名不要带空格和中文字符虽然XeLaTeX能处理但BibTeX和部分工具链对带中文路径的项目非常脆弱我亲眼见过参考文献全部报错的案例。写入以下最小文档\documentclass[UTF8]{article} \usepackage[UTF8]{ctex} \begin{document} 你好macOS \LaTeX。 \end{document}然后用CommandOptionB触发编译。这里补充一个细节LaTeX Workshop会读取文件头部魔法注释来决定编译方式在文档第一行写% !TEX program xelatex可以强制指定编译器避免多个TeX文件之间配置混乱。如果你不想改全局settings.json完全可以靠这行魔法注释完成编译引擎切换但既然前面已经配置好默认XeLaTeX这行注释写不写都行。首次编译XeLaTeX会比较慢尤其是ctex宏包需要初始化字体映射可能要三十秒到一分钟。中途不要急看到Output written on xxx.pdf再动下一步。打开PDF预览之后再往文档里加一个引用和一张图感受一遍 交叉引用浮动体 的完整流程。这一步没有报错你的环境搭建就成功了。3. XeLaTeX ctex中英文适配的底盘逻辑3.1 为什么必须用XeLaTeX/LuaLaTeX而不是pdfLaTeX很多人装完环境、抄了一份模板一编译发现中文全是乱码或者编译直接崩掉根因几乎都是引擎错选成了pdfLaTeX。pdfLaTeX诞生于上世纪九十年代当时的TeX生态只考虑了西文排版它对字体处理完全依赖传统TFM文件无法直接调用系统字体。而中文排版本质上是一套“文字编码 字体字形 标点压缩 行首行尾禁则”的组合体系pdfLaTeX想做中文就意味着要把汉字预打包成一堆特殊字体文件大量老教程里的CCT、天元、ChineseTeX这些名字就是这套老古董体系维护成本极高。XeLaTeX的贡献是把系统字体接口直接交给TeX引擎。它通过fontspec宏包读取操作系统的字体中文字体也就水到渠成。于是中文排版演变成这样一条极其现代的技术栈XeLaTeX负责字形渲染xeCJK宏包负责中英文混排时的标点压缩和间距控制ctex宏包负责把整个文档类按中文出版规范排版。LuaLaTeX的技术路线类似但Lua脚本接口更偏编程用户普通论文写作用不上所以默认选XeLaTeX就是最佳实践。3.2 ctex宏包与字体集选Fandol还是系统字体ctex宏包这个“中文字体总管”做得非常好。它的底层调用xeCJK同时封装了论文写作需要的一切中文排版规则——首行缩进、章节标题中文化、图表名称中文化、中文标点禁则这些都是你自己写可能写一星期都不完美的细节。使用方式有文档类和宏包两种% 方式一直接使用ctex文档类 \documentclass[UTF8, zhsong]{ctexart} % 方式二使用标准文档类宏包 \documentclass[UTF8]{article} \usepackage[UTF8]{ctex}区别在于使用ctexart文档类时章节命令\section自动把“1 Introduction”变成“1 引言”这种中文格式在英文article类中改用ctex宏包\section仍是英文样式但中文字体、标点规则都能正常处理。如果你的论文是中英混合章节标题用ctexart加\renewcommand覆盖普遍更顺手如果只是正文里偶尔夹杂中文宏包方式更灵活。字体集是新手最容易被各种教程搞晕的地方。ctex宏包字体集常用选项有fandol和macnew/mac选项原理适用场景fontsetfandol使用开源Fandol字体随TeX Live内置宋体黑体楷体仿宋齐全项目要在不同机器间迁移/跨平台编译保证任何人拉下来都能编译fontsetmacnew使用macOS系统自带中文字体宋体-简、黑体-简、楷体-简等只在自己Mac上编译需要更贴近中文出版物字形的效果fontsetnone不配置字体由你手动指定想完全自定义字体的中高级用户我在Mac上做过对比Fandol宋体的字形偏“印刷感”系统宋体-简的笔画更接近日常Office文档的风格视觉上后者更讨喜。但协作场景下我用Fandol因为同事在Windows上打开同一份源文件Fandol字体随TeX Live出发不会因缺字体报错。这就是分布式协作和视觉效果之间的取舍看你项目场景。3.3 手动指定中文字体的完整姿势如果你对ctex内置字体集不满意想用苹方甚至其他商业字体做正文fontsetnone打开手动控制的大门\documentclass[UTF8]{ctexart} \xeCJKsetup{CJKecglue{\hskip 0.15em}} % 控制中英文之间的间距 \setCJKmainfont{PingFang SC}[ BoldFont PingFang SC Semibold, ItalicFont Kaiti SC ] \setCJKsansfont{Heiti SC} \setCJKmonofont{STFangsong} \newCJKfontfamily\heiti{Heiti SC} \newCJKfontfamily\kaiti{Kaiti SC} \newCJKfontfamily\fangsong{STFangsong}这里强烈建议你为楷体、仿宋额外定义\newCJKfontfamily命令因为毕业论文里常有“引用文献用楷体”“例证用仿宋”的格式要求没有独立字体族命令到时想临时换字体四处救火非常麻烦。CJKecglue这行控制的是中英文之间的间距0.15em是我测试下来中文和拉丁字母之间最舒服的视觉空隙太小容易挤在一起太大又显得松散。一个常见误区有些教程会教你在中英文之间手动输入空格。这是多此一举而且会产生双重间距。xeCJK宏包默认会在中文字符和西文字符之间插入排版空隙源文件里不需要手敲空格。这也是为什么我强调看PDF效果而不是纠结源代码里有没有空格。4. 中英文混排的细节打磨标点、间距与段落规范4.1 中文标点与英文标点的自动切换中英文混排的排版质量三分靠字体七分靠标点。中文标点。“”、《》)和英文标点,.:)同时出现在一个段落里时天然的处理规则是中文上下文用全角标点英文上下文用半角标点。XeLaTeX ctex在这个层面已经做得相当智能它会根据当前字符的语种上下文自动调整标点宽度。比如你有这样一段混排文字在LaTeX中排版时需要注意“引号”与引号quotation的区别以及标点、ctex会识别出“在LaTeX中”里的“”是全角逗号它前后的中英文空隙会自动压缩“引号’与引号quotation的区别”这段里中文引号用“”英文引号用这些都会在生成的PDF中各就其位。不需要你手动切换输入法或调整宽度。真正需要你注意的是中文破折号和省略号。中文习惯用两个连续的em dash即“——”在LaTeX里你直接输入中文破折号字符“——”即可XeLaTeX能正确处理。英文的破折号分en dash–和em dash—使用场景是范围连接符和插入语混排时不要搞混。省略号同理中文用“……”英文用“…”有的宏包会默认把...转成…但中文里两个字符的省略号不会自动生成需要自己处理。4.2 首行缩进、行距与段间距的中文出版规范中文论文的段落规范看似简单实际隐藏了很多细节正文段落首行缩进两字符、章节标题前段间距大于后段间距、行距设置按字号倍数而非固定磅值。ctexart文档类其实已经把“首行缩进两字符”这个默认值写好了你看源码里一切正常% ctex宏包默认已有首行缩进 正常的中文段落开头会自动缩进两个字宽不需要你手动加\indent。 % 如果你因为某种原因取消了缩进想恢复用以下命令 \indent但如果是用article类加上ctex宏包首行缩进的处理跟文档类有所不同。\CJKindent这个开关控制中文字符缩进模式默认\CJKindenttrue时首行缩进会随中文字体字号自动计算为两个字宽。这个细节很多人不知道导致自己手动敲空格来缩进一旦字体大小调整所有手动空格全部作废。我的建议是绝对不要用空格模拟缩进要么信任ctex的自动化要么用\indent和\noindent命令控制。行距的处理也有讲究。Word里的“1.5倍行距”概念对应LaTeX里的\linespread{1.3}左右因为LaTeX的行距倍数是基于TeX自身排版的“基线间距/字号”比例1.0是人类阅读的默认值1.2到1.3是中文论文审查偏好的舒适区间。在ctexart中直接设置\linespread{1.3}\selectfont注意\linespread命令需要放在\selectfont之后才会生效。段间距我一般不动依靠\parskip默认值即可如果导师要求段间加空行设置\setlength{\parskip}{0.5em}即可千万不要用敲回车产生空行的方式那样源代码的可读性会变得极差。4.3 数字、单位、引号与破折号的实战习惯中英文混排论文里容易出错的反而是那些“不起眼”的小元素。数字与单位之间应该用\反斜杠加空格或~不加断行的空格连接这样可以避免“100 km”在行尾被拆成“100”和“km”两行。比如The range is 15~km测量精度为0.1~mm。这里的~是LaTeX中表示“不可断行空格”的命令用它连接数字和单位排版上既符合中文科技论文规范数字与单位间留空隙又不会在换行时把单位和数字拆开。很多模板会直接写15 km这样在自动换行时偶尔会出现尴尬的拆分。引号的处理需要分场景。中文场景里直接用中文引号“”这没有问题。英文场景里TeX传统的和即反引号和两个单引号可以生成弯引号但现在直接用尖角引号字符也行——XeLaTeX引擎对Unicode的支持完善和实际字符“没有区别。关键在于不要混用段落整体风格一旦确定为中文标点体系所有引号都该是中文引号不要偶尔冒出两个半角引号。5. 论文高频操作实战单栏模板、三线表格、图片定位与跨页5.1 单栏期刊模板标题、作者、机构、摘要、关键词一整套网上经常有人问“有没有期刊模板需要标题、作者、机构、摘要、关键词单栏排版”。其实不需要下载任何复杂模板一份标准的article类代码就能满足这个要求再配合ctex宏包解决中英文适配。下面这份是我自己整理的单栏中文论文起始模板直接复制就能编译\documentclass[UTF8, 11pt, onecolumn]{ctexart} \usepackage{geometry} \geometry{a4paper, margin2.5cm} \usepackage{amsmath, amssymb} \usepackage[round]{natbib} \usepackage{graphicx} \usepackage{booktabs} \usepackage{longtable} \usepackage{float} \usepackage{caption} \title{基于xxx的中文论文标题示例} \author{ 作者姓名$^{1}$\quad 第二作者$^{2}$ \\ \small 1. 第一作者机构名称城市 邮编 \\ \small 2. 第二作者机构名称城市 邮编 } \date{\today} \begin{document} \maketitle \begin{abstract} 本文提出了一种xxx方法在中英文混排环境下系统地解决了xxx问题。实验结果表明该方法在xxx指标上取得了显著改进。 \par\medskip {\bfseries 关键词}LaTeXMacOS中英文适配论文排版 \end{abstract} \section{引言} \section{相关工作} \section{方法} \section{实验与结果} \section{结论} \bibliographystyle{plainnat} \bibliography{myrefs} \end{document}这个模板有几个设计点值得说明。onecolumn参数在article类里其实是默认值但写上无妨明确表达需求。摘要区域用了\par\medskip把关键词和摘要正文分开很多模板会写成两段文字混在一起期刊投稿时连编辑都觉得乱。作者单位用$^{1}$上标加两行小字排列这是中文期刊的标准格式。\bibliography{myrefs}指向你项目目录下的myrefs.bib文件记得新建这个文件并填入条目。5.2 三线表格用booktabs做出出版级表格中文论文里“三线表”几乎是无冕之王。它只有顶线、栏目线、底线三条横线不出现竖线视觉极简符合学术出版的现代审美。实现方式很简单引入booktabs宏包即可\usepackage{booktabs} \begin{table}[htbp] \centering \caption{实验参数对比} \label{tab:params} \begin{tabular}{lccc} \toprule 参数名称 基准方法 本文方法 提升幅度 \\ \midrule 准确率(\%) 82.3 91.7 9.4 \\ 召回率(\%) 76.5 88.2 11.7 \\ F1分数 79.2 89.9 10.7 \\ \bottomrule \end{tabular} \end{table}\toprule、\midrule、\bottomrule三个命令控制三条线的粗细booktabs会自动把顶线加粗、底线加粗、栏目线稍细。不要用\hline代替\hline的线条没有粗细层次做出来的表格行间距也偏紧一眼就是Word风。表格内数字对齐是另一个专业细节。lccc表示左对齐加三列居中但如果数值里有负号、小数点和百分比符号推荐用dcolumn宏包按小数点对齐打印出来会整齐得多。表格行间距方面可以在\midrule后加一句\addlinespace[0.5em]或者直接在tabular环境前加入\renewcommand{\arraystretch}{1.3}让数据行不至于挤成一团。科技论文表格的排版潜规则是表头可加粗但数据行不要加粗——密集的粗体数字在打印版面上非常吸睛反而干扰数据对比阅读。5.3 图片“放在指定位置”理解浮动体机制与H参数“LaTeX图片放在指定位置”是被问爆的问题。每次看到有人到处问“图片怎么不按我的顺序排列”我都想说浮动体机制是LaTeX排版质量的基石不是Bug。默认的figure环境是浮动对象它会自动根据页面剩余空间把图片放到“最合适”的位置而不是你代码里写的物理位置。htbp参数是给LaTeX的建议优先级hhere放在当前代码所在位置ttop放在页面顶部bbottom放在页面底部ppage单独一页我的实践建议是正文中图表请用[htbp]组合让TeX有足够自由度。如果确实需要图片“必须在某段之后”使用float宏包的H参数强制不浮动\usepackage{float} \begin{figure}[H] \centering \includegraphics[width0.8\textwidth]{figures/result.png} \caption{实验结果对比图} \label{fig:result} \end{figure}[H]能让图片完全固定在源码位置代价是可能出现大片空白——因为LaTeX不会智能去补另一个浮动体占位。所以我的经验是初稿排成[htbp]先让整篇文章流动起来定稿时只对“必须在这里”的少数图用[H]。还有个容易漏的点\includegraphics的图片路径建议统一放在项目根目录下的figures/文件夹里并在导言区写上\graphicspath{{figures/}}这样主文档里只需要写文件名路径不会乱。5.4 表格跨页longtable与续表标题长表格是另一个高频痛点。默认的tabular环境不能在页面边界处拆开内容太多就会溢出页面范围编译时还会报Overfull \hbox警告看得人心烦。跨页表格的解决方案是longtable宏包\usepackage{longtable} \begin{longtable}{p{3cm}p{4cm}p{6cm}} \caption{跨页表格示例实验样本详细信息} \label{tab:long}\\ \toprule 样本ID 特征描述 处理结果 \\ \midrule \endfirsthead \multicolumn{3}{l}{\footnotesize 续表跨页表格示例} \\ \toprule 样本ID 特征描述 处理结果 \\ \midrule \endhead \midrule \multicolumn{3}{r}{接下一页} \\ \endfoot \bottomrule \endlastfoot 001 这是一个非常长的描述文本用于演示表格跨页时的表头重复行为 成功 \\ 002 ... 失败 \\ % 更多行... \end{longtable}longtable的实际用法比这稍复杂核心是四段表头区。\endfirsthead定义第一页的表头\endhead定义后续页重复的表头\endfoot是每页底部内容\endlastfoot是最后一页底部。上面示例里“续表跨页表格示例”表示后续页面重复表头的标题这样读者翻页后不会迷失“这张表是哪张”。长表格的列宽限制也更严格务必使用p{宽度}或X列配合tabularx宏包而不是简单的c因为在跨页场景里过宽的列会导致诡异的溢出版面。5.5 Word公式转LaTeX从截图到代码的工具流写论文免不了遇到“要从Word文档里抽公式”的场景Word自带公式格式OMML和LaTeX格式的互转很多工具都做得不够理想。我常用的方案有两种方案一截图识别推荐单条公式。Mathpix Snip这类工具可以截图直接识别为LaTeX代码识别精度很高支持复杂的矩阵、积分、分段函数还额外提供OCR识别文字和表格的能力。免费版够日常用了学术界几乎人手一个。识别出来的代码直接贴进equation环境即可\begin{equation} L_{\text{total}} \lambda_{\text{rec}} L_{\text{rec}} \lambda_{\text{adv}} L_{\text{adv}} \end{equation}方案二Pandoc批量转推荐整篇Word文档。Pandoc是文档格式转换神器能把Word文档连同公式、图表结构一次转成LaTeXpandoc paper.docx -t latex -o paper.tex这个方案对Word里用OMML输入的公式支持极好转出来的LaTeX代码带结构和公式环境虽然排版效果还需要调整但比手动重录效率高一个数量级。对于“手头有一堆Word老文档要并入LaTeX项目”的迁移场景Pandoc是可持续推荐的工具流。6. “编译失败”到“一次通过”中文LaTeX排查与避坑笔记6.1 三大高频报错字体找不到、字符缺失、ctex配置错误先来看第一类字体相关报错。典型日志长这样Package fontspec Error: The font Songti SC cannot be found.原因基本是系统中文字体名称写错或者当前ctex字体集与系统不匹配。用fc-list | grep -i songmacOS的CoreText对fc-list支持有限推荐进入Font Book确认准确字体名称核对系统中实际的字体全名。macOS下中文字体名称常常带“-简”“-繁”后缀例如正确的名字是Songti SC你写成SongtiSC或者宋体都会找不到。第二类字符缺失。编译过了但PDF里某些字符是空白方框或者编译日志里有大量Missing character: There is no ... in font。这个场景往往发生在外文字体里缺少中文字形或者反之。比如\setmainfont{Times New Roman}后正文里出现中文而Times New Roman本身没有中文字形XeLaTeX会转给备用字体但如果你没配置后备字体就只剩空白。解决方法是给西文字体指定CJK fallback\setmainfont{Times New Roman} \setCJKmainfont{Songti SC}第三类ctex配置错误。Package ctex Error: Unknown option macnew.这类报错往往出现在你用的TeX Live版本过旧ctex宏包还不支持新字体集选项。更新宏包是标准解法sudo tlmgr update --all。这里也建议你项目内把ctex的版本固定通过\usepackage{ctex}[2020/01/01]之类的方式避免宏包自动升级后行为变化导致老文档编译异常。6.2 编译顺序与“缓存中间文件”的恩怨LaTeX编译不是一遍完成的交叉引用、目录、参考文献需要多轮编译才能收敛。手写传统的四步法已经提过xelatex→bibtex→xelatex→xelatex。但很多人会忽略一个问题如果中途改了参考文献条目的key或删除了某个引用.aux和.bbl里残留的旧信息不会自动清理。这时即使按正确顺序编译引用编号也可能错乱。我的标准排错流程是先删掉所有中间文件再从头编译。在项目根目录执行latexmk -C如果没有安装latexmkMacTeX自带放心也可以在VS Code的LaTeX Workshop命令面板里选择“Clean up auxiliary files”。这个操作把.aux、.bbl、.blg、.log、.toc等全部清掉相当于排版系统的“冷启动”。实测下来大部分“莫名其妙乱码编号”“引用缺失”这类问题清完重编就好了。6.3 实战排查案例一篇中英文混排论文的完整踩坑链路有次我帮师弟排查一份论文Mac上编译直接崩错误是Undefined control sequence。光看这个信息完全没法定位但打开.log文件拉到出错行发现是在一个\bm命令上崩的。项目的导言区写了\usepackage{bm}但这台机器上是旧版TeX Livebm宏包的依赖包没装全命令无法解析。解决办法很简单把bm替换成\boldsymbol后者在amsmath里自带或者sudo tlmgr install bm。另一个印象深刻的坑是“为什么我导出的PDF每页都有一模一样的水印”排查半天发现他在导言区写了\usepackage[watermark]{draftwatermark}这是给自己注释提醒用的忘了删。这个坑属于自找但也说明了一个原则凡是导言区里影响全局的宏包写的时候在旁边加个注释标注“提交前删除/保留”。否则定稿时一个不起眼的宏包就能毁掉整篇论文的正式感。最后再分享一个我自己的使用习惯我会把“清理辅助文件 xelatex 预览”绑定成一个VS Code自定义recipe然后在源文件顶部写好魔法注释% !TEX program xelatex这样不管项目发给谁、换到什么机器上只要LaTeX环境变量没问题按一下编译键就是妥妥一遍过。工具链折腾到这个程度剩下的精力就能全部花在“写什么内容”上而不是“怎么把它排版出来”。这点是我觉得每个在macOS上写论文的人都应该尽早达到的状态。
阅读完成 · 觉得有帮助?