使用 Overleaf 的整段时间里,你自己的电脑一次排版也没做。Overleaf 只是浏览器这一侧的窗口,背后是跑在 Overleaf 服务器上的 TeX Live;它与桌面 LaTeX 环境的差别,几乎全部由这一件事派生:你不是升级 TeX Live,而是为每个项目选一个年份;缺少的宏包不能用 tlmgr 装;编译器的参数你没有机会自己敲;稿件的进出靠上传、下载或 git。作为交换,你得到本地装机绝对做不到的一件事——两个人同时写同一行。本页按实际遇到的顺序,梳理这些约束与这份回报。
本机没有 TeX,会改变什么
首先,你没法自己添加宏包。 Overleaf 的服务器上装着完整的 TeX Live——每个版本都收录五千余个宏包——但用户这一侧没有任何办法用 tlmgr install 补上里面没有的东西。替代路径是把 .sty 或 .cls 放进项目里,而放置的位置有规矩:编译过程只有在这些文件位于项目最顶层时才能找到它们。 若想把它们整理进文件夹,就必须在顶层建一个 latexmkrc,把 TEXINPUTS 指过去。
# latexmkrc at the top level of the project
# look in tex/ and bst/ before the system tree
$ENV{'TEXINPUTS'} = './tex//:' . $ENV{'TEXINPUTS'};
$ENV{'BSTINPUTS'} = './bst//:' . $ENV{'BSTINPUTS'};这份 latexmkrc 能生效,本身就透露了 Overleaf 的构造:构建是由 latexmk 驱动的。 因此,当你想给编译器加一个参数时,唯一的杠杆也是这个文件。不过想加参数的场合比想象中少:例如通常要求 -shell-escape 的 minted,按 Overleaf 自己的说法在这里「开箱即用」,因为服务器端已经替你安排好了。顺带一提,自行部署的 Community Edition 反而默认禁用 \write18,理由是那里所有编译都跑在同一个容器内。同一个名字下的两个产物,在「调用外部程序」这件事上的默认值恰好相反。
「在 Overleaf 能编译,在本机不行」——TeX Live 的年份
这种不一致的原因通常不在编辑器,而在发行版的年份。在 Overleaf,TeX Live 版本是按项目设定的:点齿轮图标进入 Compiler,再在下方的 TeX Live version 下拉框里选择。某个项目选的年份不会影响别的项目。较旧的版本归入 Legacy;Overleaf 自己说它们「不建议用于新项目」,却仍保留着,好让旧模板还能编译通过。切换并非永久性改动,随时可以换回去。
记住这一设计,至少能让你别怪错对象。图在合作者屏幕上崩了、去年能过的投稿模板今年不过了——这种时候首先该比对的既不是编辑器也不是宏包版本,而是双方的 TeX Live 年份。反过来,一旦你、合作者和目标期刊都统一到同一个年份,这个变量就退出了讨论。另外,Overleaf 会在新版 TeX Live 发布后经过测试再采用,因此上游刚发布的一段时间内,默认值可能仍是前一年。
新建项目:第一个小时的顺序
一切都发生在项目内部。仪表板左上角的 New Project 提供:空白的 Blank Project、从图库雏形起步的 From Template、带入本地 .zip 的 Upload Project,以及 Import from GitHub。无论选哪一个,最后都落到编辑器:左边文件列表、中间源码、右边 PDF 的三分屏。正因为在浏览器里就能开始,很容易想同时碰模板、协作、Git 和插图——但少出事的顺序是固定的:先一个人,先把最小的正文稳定地变成 PDF。
- 选空白项目或目标期刊的模板,先弄清入口文件是哪一个——通常是
main.tex。 - 在改动正文一个字之前,先按一次 Recompile,确认起始状态能生成 PDF。
- 在 Menu 里定下 Compiler 与 TeX Live version;若有疑问,把 Main document 也显式指定。
- 若要写日文,尽早决定走 LuaLaTeX,还是经
latexmkrc驱动的 pLaTeX/upLaTeX。 - 等根文件、编译器与文献方案都定下来之后,再邀请合作者。
- 投稿之前下载一份 ZIP,留一个能在本地复现的副本。
Compiler 该选哪个——这里的「LaTeX」指什么
下拉框里只有四项:默认的 pdfLaTeX,以及 LaTeX、XeLaTeX、LuaLaTeX。选择只对该项目生效。判断的两条轴是:你想怎样处理字体,以及手上的插图是什么格式。pdfLaTeX 接受 .png、.jpg、.pdf,并会当场转换 .eps;XeLaTeX 与 LuaLaTeX 则能直接处理 Unicode 与系统字体(OpenType/TrueType),对图像格式也不挑。
| Compiler | 内容与可用图像 | 适用场合 |
|---|---|---|
pdfLaTeX | 默认;.png、.jpg、.pdf,.eps 当场转换 | 以西文为主的标准文档 |
LaTeX | 经由 DVI 到 PDF(内部用 dvipdfmx);仅接受 .eps/.ps | pLaTeX 系的流程,插图全为 EPS 时 |
XeLaTeX | Unicode 与系统字体(OpenType/TrueType) | 想快速用上 OpenType、多语言混排 |
LuaLaTeX | Unicode、系统字体,以及 Lua 脚本扩展 | 新起的文档;也适合日文 |
这里有一个名称容易引起误会。下拉框里的 LaTeX 并不是指光秃秃的 latex 命令,而是指经由 DVI 抵达 PDF 的路径(内部调用 dvipdfmx)。这正是它的插图被限制在 .eps/.ps、不能直接放 .png 的原因。反过来,下文的日文 pLaTeX 流程正是从选择这个「LaTeX」开始的。若要用 pstricks,也要选 LaTeX 或 XeLaTeX(LuaLaTeX 不支持 pstricks)。另外,哪个文件是正文入口由 Main document 设置决定,可从文件列表的三点图标更改。
排日文:走 LuaLaTeX,还是经 latexmkrc 的 pLaTeX
默认的 pdfLaTeX 排不了日文。 不做任何设置就键入日文,要么报错,要么字符消失。路径有两条:(1) 把 Compiler 切到 LuaLaTeX;(2) 用 latexmkrc 驱动 pLaTeX/upLaTeX。若是从零开始,(1) 更稳妥,配置实质上只有一行。在 Menu 里把 Compiler 设为 LuaLaTeX,并在 \documentclass 中指定 luatexja 系的文档类——横排的 ltjsarticle 或 ltjarticle——日文排版即告就绪。不显式指定字体时会嵌入一个合理的默认字体,用 luatexja-preset 则可嵌入 IPAex 字体。
% Menu -> Compiler -> LuaLaTeX before compiling this file
\documentclass{ltjsarticle}
\usepackage[ipaex]{luatexja-preset}
\begin{document}
\section{はじめに}
こんにちは、\LaTeX! 数式も書けます: $e^{i\pi}+1=0$
\end{document}若要按日本学会刊物中仍属主流的 pLaTeX 流程写作,就先把 Compiler 设为「LaTeX」,再在项目最顶层添加一个名为 latexmkrc 的文件。由于 Overleaf 是用 latexmk 构建的,这个文件正是告诉它「用 platex 处理,再用 dvipdfmx 生成 PDF」的地方。若用 upLaTeX,把 platex 换成 uplatex、pbibtex 换成 upbibtex。较新的选择还有 jlreq 文档类,LuaLaTeX、pLaTeX、upLaTeX 都能用。
# latexmkrc for the pLaTeX route; set Compiler to LaTeX in the Menu
$latex = 'platex';
$bibtex = 'pbibtex';
$dvipdf = 'dvipdfmx %O -o %D %S';
$makeindex = 'mendex %O -o %D %S';若想干脆跳过这套配置,日本产的 Cloud LaTeX 无需任何设置即可排日文,稿件以日文为主时值得考虑。另外补一句:Overleaf 里在编辑器与 PDF 之间来回跳转的点击,同样是 SyncTeX 在起作用,每次编译都会在服务器上生成 output.synctex.gz——输出文件一律叫 output.* 而不是随主文件命名,是因为 Overleaf 的构建就是这么安排的。不过,若把 PDF 阅读器设置成「Browser」,这类跳转就不起作用。
把稿件搬进搬出:ZIP、GitHub 与 Git bridge
若草稿已在本地,Upload Project 是最短路径:丢进一个 .zip,Overleaf 会解包,并按原有文件夹结构重建为项目。不过限制很具体:压缩包里只能放 LaTeX 编译器能处理的文件——纯文本,以及 .eps、.pdf、.svg、.png 格式的图像;可编辑素材上限 7 MB;单个文件不得超过 50 MB;一次上传最多 180 个文件。Word 的 .docx 或庞大的数据集根本进不去。还有一个意外的坑:若正文文件被套在文件夹里,就跑不起来。 如果 zip 里所有内容都包在同一个目录中,请把内容提出一层再重新打包。
若稿件本就在 Git 里,有两条路。Import from GitHub——先在 Account Settings 里关联 GitHub 账号——可把可见的仓库转成项目,此后即可在 Overleaf 与仓库之间 push/pull。另一条是 Git bridge,它绕开托管服务,直接对 git.overleaf.com 执行 git clone(clone 地址就是把项目 URL 里的 www 换成 git,认证使用令牌)。两者都是付费方案的功能,且 Overleaf 既不支持 Git 子模块,也不支持 Git LFS。仓库过大时会撞上容量限制而导入失败。
协作编辑:Editor 计入名额,Viewer 不计
Overleaf 最大的卖点是货真价实的 同时编辑。从右上角的 Share 邀请他人,就能一起打开同一份稿件,彼此的光标与改动实时可见。邀请方式有两种:按邮箱地址邀请(可选 Editor 或 Viewer),或通过 Link Sharing 分发链接。链接分两种:持 View 链接者可读,持 Edit 链接者可编辑(编辑需要注册账号)。
这里,人数上限就开始起作用了。Viewer 不计入上限,Editor 却会消耗项目所有者的方案名额。 超出名额之后,再从编辑链接进来的人会自动降为只读。免费方案的协作者为 1 人——你和另一个人可以免费合写。付费方案会放宽:按 Overleaf 的方案限制页(2026 年 8 月查阅),Student 与 Standard 为 10 人,Pro 无上限。
评审与改稿的工具,在免费与付费之间划得很清楚。文内 评论 免费方案即可使用,但 修订追踪(track changes)——逐条接受或拒绝改动——以及能把项目回滚到早先状态的 完整版本历史,都属付费功能。在多人合著的改稿阶段需要这两样时,通常就是人们决定订阅的时刻。顺带一提,Overleaf 本身约在 2012 年以 WriteLaTeX 之名起步,创始人是数学家 John Hammersley 与 John Lees-Miller;2017 年 7 月它与竞争对手 ShareLaTeX 合并,把双方用户汇入同一个环境。你现在屏幕上看到的功能布局,正是那次汇流的产物。
当编译超时的时候
既然构建跑在别人的服务器上,时间就有上限。按 Overleaf 的方案限制页(2026 年 8 月查阅),免费方案的编译时间为 10 秒,付费方案为 240 秒。长篇学位论文,或是沉重的 TikZ/pgfplots 图,一旦超出就会被中断。这是在浏览器里写作难以回避的约束,因此当稿子长大以后,明智的做法是把项目从「顺手的草稿本」改看成「可复现的排版环境」。
- 在 Menu 里确认 Compiler、TeX Live version 与 Main document,并请合作者核对同样的设置。
- 若沉重的 TikZ/pgfplots 或高分辨率图片导致超时,就先把图预先编成 PDF,或暂时移除沉重的章节以定位原因。
- 错误变多时,关掉 Auto compile,切到 Stop on first error,只修第一个错误再往下读。
- 过期的中间文件有时会捣乱,感觉不对劲时先清空项目缓存再重新编译。
- 投稿前用 Download as ZIP 导出,并确认这一整包能在本地或另一个项目里复现出同样的 PDF。
从模板起步能省掉什么
能省掉的,是事后再去满足投稿规定的工作。Overleaf 的 模板库 收有海量起点——期刊、会议论文集、简历、学位论文、幻灯片——你可以从 New Project → Templates 选类型,或直接打开 overleaf.com/gallery,在中意的模板上点 Open as Template,一个具备该体例的项目便建立起来。尤其是出版社与学会提供的「官方」模板,从一开始就带着该刊的类文件与版式规则,其中一些还能在稿件完成后 直接从 Overleaf 投稿。
选择时有一条务实建议:模板带来的不只是体例,还有 对 Compiler 与 TeX Live 年份的预设。打开后先别改一个字,按一次 Recompile,确认在这些预设下能出 PDF,然后再动正文;这样以后就不必去分辨「是我写的部分有问题,还是模板太旧」。你也可以把自制的模板 提交 到模板库。