
在 macOS 上写 LaTeX 论文这件事看起来是装个软件就能开工真正动起笔来却常被中英文混杂的排版细节弄得头疼。我见过不少科研新手模板拿到了编译却一直报错最后只能退回 Word 凑合排版。问题往往不出在 LaTeX 语法本身而在两个容易低估的环节工具链选型和中文环境适配。这篇文章是我在 macOS 下写论文的全流程记录重点讲三件事从零搭建环境怎么做选型、中英文混排需要改哪些配置、编译构建和辅助文件清理如何自动化。准备用 LaTeX 写学位论文或期刊文章的学生以及想从 Word 迁移到 LaTeX 的研究型用户都可以照着走一遍。我不会堆砌太底层的排版原理只讲我实际跑通、能直接复用的方案。1. 环境搭建macOS 下的 LaTeX 发行版与编辑器选型1.1 为什么我坚持装全量 MacTeX而不是轻量版macOS 上主流的 TeX 发行版有两个MacTeX 和 BasicTeX。MacTeX 是 TeX Live 的 macOS 封装版体积动辄几个 GB把常用宏包、字体、文档、编辑器全部打包在一起BasicTeX 则只有几百 MB只保留最基础的引擎和少量宏包。很多教程说“轻量够用就行”但我不推荐论文用户上来就装 BasicTeX。理由很简单论文写作几乎躲不开宏包依赖。中文字体适配需要 ctex参考文献管理需要 bibstyles表格跨页需要 longtable图表排版需要 float 和 graphicx。这些在 BasicTeX 里都默认没有一旦缺宏包你就要反复打开 tlmgr 命令行补装。中途换包、版本冲突、路径不对浪费时间不说很容易打断写作节奏。MacTeX 一次性装全虽然下载体积大但换来的是开箱即用和极低的折腾成本。安装方式也很直接去 TUG 官网下载 MacTeX 的 pkg 安装包双击一路 Next 即可。装完后系统会自动把 TeX 相关的二进制路径写入 PATH一般不需要手动配置环境变量。如果你是 M 系列芯片的 Mac注意下载对应架构的版本Intel 版安装包在 Apple Silicon 上也能跑但性能和原生架构还是有差别建议按机器选。1.2 编辑器之争VSCode 的 LaTeX Workshop 上手体验macOS 自带的 TeXShop 是苹果用户常用的编辑器功能完整但界面和操作习惯偏传统。我的主力是 VSCode搭配 LaTeX Workshop 插件原因是它能统一写作环境你不需要在多个应用之间跳来跳去Markdown、代码、LaTeX 都在同一个窗口里管理而且 Git 集成对论文版本控制非常友好。安装流程很简单先装 VSCode再在扩展商店搜索 LaTeX Workshop一键安装。插件默认会扫描系统里已存在的 TeX 发行版自动识别 latexmk、xelatex、bibtex 等工具链。第一次打开 .tex 文件时可能会提示“找不到相关命令”多半是 PATH 没同步。出现这种情况终端里执行which xelatex确认路径然后在 VSCode 的 settings.json 里显式指定问题就解决了。插件里最省心的功能是编译快捷键。CmdS保存后自动编译右侧同步预览 PDF作为论文写作场景来说效率提升非常直接。我把预设定成“保存时自动编译 SyncTeX 双向定位”点击 PDF 里的某个位置光标能自动跳到对应的源文件代码行。改稿、校稿、返修整个过程比 Word 里反复滚动翻页舒服太多了。1.3 我的基础工具链清单以下是我在 Mac 上用来写论文的整套基础环境可以直接作为参考组件我的选择说明TeX 发行版MacTeX全量宏包开箱即用编辑器VSCode LaTeX Workshop自动编译、预览、SyncTeX编译引擎XeLaTeX处理中文和字体最稳构建工具latexmk自动化多轮编译参考文献BibTeX传统且兼容性最好这套组合最大的好处是能覆盖论文从写作到提交的全流程不需要额外装 GUI 工具。期刊投稿时如果对方要求生成特定格式的 PDF 或 LaTeX 源码这套环境也能直接支撑。我遇到多位合作者统一用同样配置后跨系统传文档基本没有环境差异问题。2. 中英文混排的核心配置字体、引擎和格式2.1 为什么用 XeLaTeX而不是默认的 pdfLaTeXLaTeX 写好文档后需要编译引擎把它转换成 PDF。传统上大家用 pdfLaTeX但我不推荐在中文论文场景里用它核心原因是 pdfLaTeX 对 Unicode 和系统字体的支持非常有限。中文字符在这种引擎下属于“非常见字符”要么需要额外宏包做映射要么直接出现缺字、乱码非常麻烦。XeLaTeX 的出现让 LaTeX 终于可以原生使用系统字体和 Unicode 字符集。它会直接调用 macOS 的字体库你可以直接写\setCJKmainfont把中文字体指定为苹方、宋体或者思源宋体也能让正文字体在不同系统间保持视觉一致。macOS 下我用 XeLaTeX 编译中英文混排文档基本没出现过缺字和乱码问题。这也是 LaTeX 圈子里的一个共识要写中文论文就用 XeLaTeX。在 VSCode 的 LaTeX Workshop 里设置默认引擎我改的是latex-workshop.latex.recipes配置把第一项指定为 xelatex这样每次编译都会自动调用 XeLaTeX不用手动敲命令。如果你在用 latexmk直接在文档导言区加一行% !TEX program xelatex也能让工具自动切换这个魔法注释在 TeXShop 和 VSCode 里都认。2.2 ctex 宏包中文排版的省心方案处理中文文章时可以手动配置字体、行距、缩进但更省心的做法是直接用 ctex 宏包。它把中文排版需要的一系列底层设置都集中封装了你只需要在导言区写一行\usepackage[fontsetmacnew, UTF8]{ctex}这里fontsetmacnew是让 ctex 自动选择 macOS 新版本的中文字体方案。这样写完之后正文里的中文默认会使用苹方这类系统字体英文和数字则回落到 Latin Modern中文标点、行距、首行缩进都会自动处理好不需要自己一个个设计规则。如果你的机器上没有这些字体把 fontset 改成fandol它会启用开源字体效果同样稳定适合在不同设备间迁移模板。ctex 宏包另一个实用价值是兼容性。我在处理期刊模板时经常遇到导言区已经写好了\usepackage{CJK}或老式\usepackage[UTF8]{ctex}的混合情况。只用新版 ctex就能把这些基础配置统一起来省去一大堆兼容补丁。对于学位论文还可以直接使用 ctexbook 文档类章节标题、目录格式、页眉页脚都继承了中国大学论文排版习惯比从零搭从容很多。2.3 页眉字号、字体切换和样式细节调整论文写作里页眉页脚往往有格式要求很多模板默认的页眉字号偏大或偏小。LaTeX 里调整页眉字号不像 Word 里选中就能改需要进入 fancyhdr 宏包的设置逻辑。我的做法是用\fancyhead定义页眉内容再用\renewcommand{\headrulewidth}调整分割线粗细字号则通过\fontsize{字号}{行距}\selectfont显式切换。举个例子把页眉字号设为小五号相当于 9pt的操作是\usepackage{fancyhdr} \pagestyle{fancy} \fancyhead[C]{\fontsize{9}{11}\selectfont 论文标题}关键细节在于\fontsize的第一个参数控制字号第二个控制行距。如果你只写了字号行距仍沿用上一组数值显示效果很容易出现偏挤或偏松。我在实际排版时通常会把行距设为字号的 1.2 倍左右肉眼看上去比较舒服。中文字体匹配方面建议给整篇文章确立一组中英文配对。这里说的配对不光是字体本身还包括字重和风格中文用宋体加粗作标题时英文对应使用粗体衬线体视觉上才协调。我常用的组合是“思源宋体 Source Serif Pro”或“苹方 Inter”正文、标题、代码区分别定义效果比全篇堆默认字体好很多。3. 论文排版实操从文档结构到图片表格3.1 页面结构和章节层级怎么搭论文的文档结构取决于学科和提交对象。通常期刊会给一份 LaTeX 模板你只需要在模板的对应位置填内容但学位论文和内部报告往往没有现成模板需要自己搭框架。我一般选用ctexbook或ctexart文档类分别对应书籍式长文和单篇文章式文本再结合\frontmatter、\mainmatter、\backmatter三层结构组织全文。在章节管理上我会用命令把摘要、目录、正文分开\begin{document} \frontmatter \tableofcontents \mainmatter \include{chapters/introduction} \include{chapters/method} \include{chapters/experiment} \backmatter \end{document}这里用\include而不是\input拆分章节优点是每个子文件可以单独编译也可以单独处理辅助文件。对很长的学位论文这种结构让每次编译时间从几十秒降到几秒调试起来非常方便。与之配合的\includeonly命令可以只编译指定的几章是每次改稿时的效率利器。3.2 图片放在指定位置 float 包和H的妙用LaTeX 里图片控位一直是让人头疼的问题很多新人都有过“明明写在源文件中第 3 页PDF 里却跑到第 5 页”的经历。这背后的机制是 LaTeX 把图片当作浮动体由排版引擎根据页面空间自行调整位置而不是固定放在源码里对应的位置。目的是兼顾整页的美观和内容连贯性但代价就是你“指哪不一定打哪”。如果你的目标就是让图片出现在指定位置可以用float宏包然后把图片环境改成\usepackage{float} \begin{figure}[H] \centering \includegraphics[width0.7\textwidth]{chart.png} \caption{实验对比结果} \label{fig:result} \end{figure}[H]表示强制将图片放置在当前位置不在上下浮动。这个写法的优点是不再出现图片乱跑缺点是如果当前位置剩余空间不足会留下大片空白。论文初稿阶段我常用[H]方便检查每张图对应的内容最后排版阶段再改回[htbp]让引擎自动优化页面利用效果更专业。需要留意的是图片格式建议优先用 PDF、EPS 这类矢量格式而不是 JPG。矢量图在缩放时不会失真印刷效果也明显更锐利。macOS 上从 Python 的 matplotlib 或 R 保存图片时直接用savefig(xxx.pdf)插入 LaTeX 后清晰度都比位图好。3.3 表格跨页和表格宽度问题的处理表格跨页是论文排版的高频痛点。普通 tabular 环境遇到表体过长时最多在一次性页面里显示完超出部分会直接溢出到页面外不会自动断开。解决办法是用 longtable 环境它允许表格跨页并支持在每一页的表头顶部重复表头。一个基本示例\usepackage{longtable} \begin{longtable}{p{3cm}p{5cm}p{4cm}} \caption{实验参数一览} \label{tab:params} \\ \textbf{参数} \textbf{取值} \textbf{说明} \\ \midrule \endfirsthead ... \end{longtable}写 longtable 时要额外注意\endfirsthead、\endhead、\endfoot这些命令它们分别控制表格在各页出现的表头和表尾。我第一次用的时候漏写了\endfirsthead结果每页的表头都重复了一遍表格间距也乱了。这个细节在论文模板中很常见需要提前了解避免排版后期才来返工。如果表格宽度超出页面常见做法是把列类型从c改成p{宽度}专门指定每个列的宽度。更灵活的方案是使用tabularx环境配合X列让表格自动撑满文本框宽度。我通常会结合booktabs宏包画三线表线条简洁格式清爽符合大多数期刊的排版要求。3.4 数学公式、思维导图和特殊符号的处理论文中的数学公式用 LaTeX 写起来比 Word 公式编辑器舒服太多。行内公式用前后单美元符独立公式用 equation 环境多行对齐用 align 环境。对公式进行编号时可以在 equation 后加\label正文再引用改动公式位置后编号会自动更新这对长论文非常重要比 Word 里手动插入“式(1)”“式(2)”靠谱一万倍。如果你想用 LaTeX 画思维导图它并不像 Visio 那样拖拽节点而是通过 TikZ 命令实现。TikZ 可以画树结构、连接线、节点框进阶一点能做简单的思维导图但上手门槛不低。我对大多数思维导图需求的做法是在外部工具比如 draw.io、Xmind里画好再导出 PDF 或高清 PNG 插入论文。纯 TikZ 画的图后续修改很不直观效率上远不如专用工具。如果你的期刊投稿要求所有图都是矢量格式那可以把思维导图导出为 SVG再转成 PDF 插入。4. 参考文献管理和多文件工程组织4.1 BibTeX 与中文文献的编码问题参考文献管理是论文写作的重头戏我的选择是 BibTeX。它把文献条目集中放在 .bib 文件里文中通过\cite{key}引用最后由 bibtex 工具根据.bst样式文件自动生成参考文献列表。好处是一篇论文里可以有几千条引用只要 key 不重复排版时不会乱。BibTeX 在中文文献上的最大风险是编码。老版本的 .bib 文件可能使用 GBK 编码而现代 LaTeX 默认按 UTF-8 读取。如果 .bib 里的中文作者名或标题出现乱码最常见的解法是把 .bib 文件转成 UTF-8然后在文献条目中正常写中文。macOS 下可以用iconv命令转换编码也可以在编辑器右下角直接切换文件编码再保存这些都远比手动逐条改快。遇到中文期刊名和作者名时建议把文献类型设置清楚有 DOI 的用article书用book会议论文用inproceedings。如果你引用的是中文论文但被检索数据库给了英文翻译标题保留中英两个字段也行交给 .bst 样式决定最终显示格式。投稿前务必检查一下 .bbl 文件里是否出现“?”或“undefined citation”的提示那是 bibliography 编译流程没走完的信号。4.2 用\input{}分文件管理长论文长论文最怕一个文件里塞几千行既有编译效率问题也有团队分工问题。我的目录结构通常是thesis/ main.tex chapters/ intro.tex method.tex experiment.tex conclusion.tex figures/ fig1.pdf fig2.pdf refs.bib在 main.tex 里用\include{chapters/method}把各章拉进来。这里有个细节是\include会强制分页不适合小段落如果只是想让某段内容插入到当前位置用\input更合适。学位论文每个章节天然是分页结构所以\include是首选。分文件以后Graphviz 和 SyncTeX 仍然能跨越文件边界工作。在 VSCode 里从 PDF 反查源码时插件会自动打开对应的子文件并把光标停在正确位置而不是只定位到 main.tex 的某一行。这一条体验在查图和查公式错位时能节省大量时间。4.3\includeonly提升编译效率论文写到中后期章节特别多每次编译全篇动不动十几秒很磨人。\includeonly是一个高性价比命令在导言区写下\includeonly{chapters/experiment}编译时就只生成 experiment 这一章其他章节的引用和编号仍保留全局信息但页面只输出指定的章节。这种编译速度几乎是秒开适合频繁改某一章的早期草稿。等需要完整版时再把\includeonly注释掉即可。对参考文献和交叉引用\includeonly不是完全兼容所有宏包有极少数情况下会提示未定义引用多编译一轮就能解决。5. 编译工作流与辅助文件清理自动化5.1 用 latexmk 统一编译流程LaTeX 的编译并不是一步到位的。带参考文献和交叉引用的文档通常要执行 xelatex、bibtex、再 xelatex 两遍顺序错了就会出现引用编号缺失。手动敲三遍命令不仅低效还很容易漏。latexmk 就是解决这个问题而生的工具它会根据文件依赖关系自动决定编译轮次一直运行到所有交叉引用稳定为止。我实际使用的命令是latexmk -xelatex -synctex1 main.tex-xelatex指定引擎-synctex1生成反向定位数据配合编辑器的 SyncTeX 功能。VSCode 的 LaTeX Workshop 默认就调用 latexmk所以只要在插件配置里把工具链选对保存后基本不用管编译过程。需要快速预览时也可以在插件面板点击 “View LaTeX PDF” 直接打开编译产物。5.2 清理 auxiliary files别让垃圾文件堆满目录每编译一次 LaTeX目录下都会生成若干辅助文件.aux、.log、.out、.bbl、.toc、.synctex.gz等。这些文件是编译过程的中间产物正常情况下不需要纳入版本控制或提交给期刊。它们的体积虽小但数目多了以后目录会变得非常乱而且偶尔损毁的辅助文件还会导致编译异常。macOS 下清理辅助文件最手动的做法是终端里执行latexmk -c main.tex这条命令会删除所有辅助文件但保留最终 PDF。如果想连 PDF 一起清除用latexmk -C。VSCode 的 LaTeX Workshop 也内置了对应操作在命令面板里搜索 “Clean up auxiliary files” 就能一键执行。我通常会在每次改完论文、准备 git commit 之前运行一次保证仓库里只有源码和 PDF队友克隆代码后能立刻编译不会因为遗留的.aux造成各种诡异问题。5.3 Git 管理 LaTeX 论文的隐藏技巧用 Git 管理 LaTeX 项目时.aux、.bbl、.log、.toc这些文件都不应该提交。我在项目根目录新建.gitignore写入这些扩展名随后每次提交只会记录.tex、.bib、图片和配置文件。这是一个不怎么起眼但极有用的小习惯能避免大量无意义的差异显示。跨设备编译时还有一个容易踩的坑macOS 会把.DS_Store散落在目录里虽然无害但容易污染提交记录。.gitignore里一并加上.DS_Store就好。论文提交到期刊系统时我一般只上传.tex、.bib、图片和编译脚本并主动把辅助文件清空后再压缩避免对方打开压缩包时看到一栈乱糟糟的中间产物。6. 常见报错与故障排查实录6.1 中文乱码和字体找不到的排查思路遇到中文显示为乱码先把编译引擎确认成 XeLaTeX。如果引擎没错再用字体相关命令检查fc-list :langzh如果输出里没有你想用的中文字体说明字体文件没被系统识别。macOS 下新装的字体需要到字体册里确认已经安装或者重启一下 LaTeX 进程再编译。字体名称的中文写法在 LaTeX 里经常不够直观建议在终端里用fc-list :langzh -f %{family}\n | sort -u查看系统认识的中文字体族名再把名字直接复制到\setCJKmainfont里比记忆“PingFang SC”这类名称更可靠。另外提示一下ctex宏包在找不到指定字体时会自动 fallback 到 fandol。如果你并不强求页面上必须使用某种品牌字体这个 fallback 过程几乎无感不影响最终成稿。但如果你的学校论文模板明确要求字号和字体类型需要在导言区把字体设定写死不要依赖自动 fallback。6.2 “安装器无法使用”之类的 macOS 环境问题Mac 上安装软件时经常会遇到“不能从你正运行的 macOS 版本使用此安装器”这类报错。原因多出在安装包与系统版本不匹配比如旧版 MacTeX 的 pkg 是在旧系统上签名打包的。解决思路有三个去官网下载匹配当前 macOS 版本的安装包优先使用 Homebrew 安装 TeX Live 子集或者手动把 pkg 里的内容解包到本地目录再接进 PATH。最省事的还是官网下最新版别用网上流传的“老镜像”。这个坑容易在论文截止前出现因为很多人平时不更新 TeX 环境真到要装模板时才发现安装包打不开。我现在的做法是每年更新一下 MacTeX 大版本更新频率不高却能避免很多兼容性问题。如果你在 Mac 上用 Homebrew也可以直接执行brew install --cask mactex后续用brew upgrade升级比起手动管理 pkg 要省心很多。6.3 表格超宽、图片乱跑和公式编号异常的应急手段表格超宽在双栏模板里尤其常见。应急办法一是把字号缩小到\footnotesize或\scriptsize二是把列类型从c改成p{}或X分配固定宽度三是在不得已时用\resizebox{\textwidth}{!}{ ... }强制缩放整张表。最后一个方法虽然简单粗暴但会导致表内字号过小影响阅读。投稿前最好还是手工调整列宽别图省事。图片乱跑先用[H]强制定位如果出现了大片空白换回[htbp]再微调顺序。公式编号异常比如出现了??多半是编译流程没跑完。此时执行latexmk -xelatex main.tex或者手动跑三遍 xelatex引用信息会自动修正。顺便说一句遇到任何诡异现象第一件事都是先看.log文件的关键词warning和error绝大多数问题在日志里都有线索不要凭感觉乱试。6.4 常用排查命令速查表场景命令说明查看编译日志中的错误行grep -A 5 ^! main.log错误通常以!开头检查缺失宏包latexpapersize main.tex或看日志提示not found时直接补宏包清理辅助文件latexmk -c main.tex保留 PDF删除中间文件查看可用中文字体fc-list :langzh -f %{family}\n确认字体族名称删除所有编译输出latexmk -C main.tex连 PDF 一起删检查超链接是否正常grep -i hyperref main.log确认 hyperref 无误报如果你刚开始接触 LaTeX可以把这份速查表保存下来。在日常调试中90% 的问题都能通过“查日志—补宏包—重编译”三步解决真正需要翻阅底层实现文档的机会并不多。我自己也是凭这几条命令度过了论文最忙的阶段很少被编译环境本身卡住过。写论文本身是件枯燥的事情LaTeX 能替你接管的是排版、引用、图表编号这些琐碎环节。按照上面的方案搭好环境之后后面只需专注内容本身剩下的就让工具去处理。我个人这几年最大的体会是不要在工具上贪便宜从一开始就装完整版、用对引擎反而省下了更多时间花在真正需要思考的地方。如果后续你还想继续扩展这个方案可以考虑加入 Git 分支管理不同版本的论文草稿或者用 GitHub Actions 在云端自动编译那样无论换到哪台 Mac 都能保持一致的写作环境。