1. 为什么我要在本地复刻 Overleaf
写论文、写技术报告、写简历,LaTeX 几乎是绕不开的工具。Overleaf 的好处是打开浏览器就能写,编译、预览、报错都在一个页面里完成,团队协作也方便。但它有两个我始终绕不过去的坎:一是网络波动时编译排队,二是当我想让 AI 帮我改一段公式或者补一段参考文献格式时,得把内容复制到另一个 AI 工具里,改完再粘回来,来回切换非常割裂。
后来我把整套流程搬到了本地,用 VS Code 和 Cursor 配合 LaTeX Workshop 扩展,基本复刻了 Overleaf 的「左边写、右边预览、保存即编译」体验。更关键的是,我把 AI 辅助这一环也接进来了——通过 TaoToken 的统一 Key 和 API 通道,VS Code、Cursor 里的 AI 插件、以及我自己写的脚本可以共用同一个入口,不用再为每个工具单独配一套 Key。
这篇文章面向的是这样一类人:已经在本地装了 TeX 发行版,或者正准备装;希望用 VS Code / Cursor 替代 Overleaf 的在线编辑;同时想让 AI 辅助写作这件事变得顺手,而不是每换一个工具就重新折腾一遍配置。下面我会给出完整的 settings.json 骨架、TaoToken 的接入方式、编译验证动作,以及我实际踩过的几个报错。
2. TaoToken 前置:统一 Key 与 API 通道
在讲 LaTeX Workshop 配置之前,先把 AI 这一侧的前置说清楚。因为很多人卡住的地方不是 LaTeX 本身,而是「我到底该把 Key 填到哪个插件里」。
TaoToken 在这里扮演的角色是一个统一的 API 入口。你可以在它的控制台里创建 API Key,然后这个 Key 可以同时被 VS Code 的 AI 插件、Cursor 的自定义模型配置、以及命令行脚本调用。官网地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 基础地址是 https://taotoken.net/api (这个不加 UTM)。
具体操作上,你需要先拿到 Key。进入控制台创建 API Key 的入口在这里:https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 。创建时建议按用途命名,比如latex-vscode、cursor-agent,这样后面排查哪个 Key 用超了会清楚很多。
注意:API Key 只显示一次,创建后立刻复制保存到本地密码管理器或环境变量里,不要直接写进会提交到 Git 的 settings.json。
如果你只是想先验证模型能不能通,可以用模型对话页面直接试:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 。如果打算长期在 Cursor 里跑编码类 Agent 任务,可以看 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,配置字段对不上时以文档为准。
拿到 Key 之后,我建议把它写进系统环境变量,而不是硬编码。Linux / macOS 可以在~/.zshrc或~/.bashrc里加:
export TAOTOKEN_API_KEY="sk-你的key" export TAOTOKEN_BASE_URL="https://taotoken.net/api"Windows 则在「系统属性 → 环境变量」里新建用户变量,变量名TAOTOKEN_API_KEY,值填你的 Key。这样 VS Code、Cursor、终端脚本都能读到同一个值,真正做到「一次配置,多处复用」。
3. 可复制配置:LaTeX Workshop 的 settings.json 骨架
这一节是全文的核心。LaTeX Workshop 的配置项很多,但真正影响「Overleaf 式体验」的其实就那么几组:编译工具链、编译方案、自动编译触发、PDF 预览方式、正反向搜索。下面这份 settings.json 是我在 VS Code 和 Cursor 里都在用的骨架,你可以直接复制后按需改。
{ "latex-workshop.latex.autoBuild.run": "onSave", "latex-workshop.latex.tools": [ { "name": "xelatex", "command": "xelatex", "args": [ "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "%DOC%" ], "env": {} }, { "name": "pdflatex", "command": "pdflatex", "args": [ "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "%DOC%" ], "env": {} }, { "name": "bibtex", "command": "bibtex", "args": ["%DOCFILE%"], "env": {} } ], "latex-workshop.latex.recipes": [ { "name": "xelatex", "tools": ["xelatex"] }, { "name": "pdflatex", "tools": ["pdflatex"] }, { "name": "xelatex -> bibtex -> xelatex x2", "tools": ["xelatex", "bibtex", "xelatex", "xelatex"] } ], "latex-workshop.latex.recipe.default": "first", "latex-workshop.view.pdf.viewer": "tab", "latex-workshop.latex.autoClean.run": "onBuilt", "latex-workshop.latex.clean.fileTypes": [ "*.aux", "*.bbl", "*.blg", "*.idx", "*.ind", "*.lof", "*.lot", "*.out", "*.toc", "*.acn", "*.acr", "*.alg", "*.glg", "*.glo", "*.gls", "*.fls", "*.log", "*.snm", "*.nav", "*.vrb", "*.spl" ], "latex-workshop.latex.outDir": "%DIR%/build", "latex-workshop.synctex.afterBuild.enabled": true, "latex-workshop.view.pdf.internal.synctex.keybinding": "double-click" }几个关键点解释一下。autoBuild.run设为onSave,就是保存即编译,这是 Overleaf 体验的核心。recipe.default设为first,意味着默认用 recipes 列表里的第一个方案,所以如果你写中文文档,把xelatex方案放在第一位就行。outDir设为%DIR%/build,把编译产物集中到一个子目录,源码目录会干净很多,这个习惯我强烈建议保留。
view.pdf.viewer设为tab,PDF 会在编辑器内新标签页打开,而不是弹到外部阅读器,这样左右分屏时体验最接近 Overleaf。synctex.afterBuild.enabled打开后,正向搜索(源码跳 PDF)和反向搜索(PDF 跳源码)才能正常工作。
如果你用的是 Cursor,settings.json 的位置和 VS Code 一致:Ctrl+Shift+P打开命令面板,输入Preferences: Open User Settings (JSON)即可。Cursor 基于 VS Code 内核,LaTeX Workshop 扩展可以直接从扩展市场安装,配置项完全通用。
至于 AI 辅助那一侧,如果你用的是支持自定义 API 的插件,把 Base URL 填https://taotoken.net/api,Key 填环境变量里的值即可。Cursor 里则是在 Settings → Models 里配置自定义 OpenAI 兼容端点,同样填这个 Base URL。这样 LaTeX 编译走本地 TeX 发行版,AI 请求走 TaoToken 统一通道,两条链路互不干扰。
4. 验证请求与成功结果
配置写完,得验证它真的能跑。我一般分三步:先验证 TeX 命令本身可用,再验证 LaTeX Workshop 能编译,最后验证 AI 通道能通。
第一步,在终端里确认 TeX 发行版在 PATH 里:
pdflatex --version xelatex --version bibtex --version三条命令都能输出版本号,说明 TeX 环境没问题。如果提示 command not found,那就是安装时没勾选「加入 PATH」,Windows 下重装 MiKTeX 时注意勾选,或者手动把C:\texlive\2024\bin\windows这类路径加进环境变量。
第二步,新建一个最小测试文件test.tex:
\documentclass[UTF8]{ctexart} \begin{document} 你好,世界! 这是一个公式:$E = mc^2$ \end{document}保存后,LaTeX Workshop 应该自动触发编译。左下角状态栏会显示编译进度,成功后右侧 PDF 标签页会渲染出「你好,世界!」和公式。如果没自动编译,按Ctrl+Alt+B手动触发一次。PDF 出来后,在源码里把光标放到「世界」两个字上,按Ctrl+Alt+J,PDF 应该跳到对应位置,这就是正向搜索生效的标志。
第三步,验证 TaoToken 通道。用 curl 发一个最小请求:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o-mini", "messages": [{"role": "user", "content": "用一句话解释什么是LaTeX"}] }'返回里能看到choices字段和一段中文回复,就说明 Key 和通道都正常。模型名以你控制台里实际可用的为准,接入文档里有完整列表。
5. 本篇常见错排查
这一节列的都是我自己或身边朋友真实遇到过的报错,按出现频率排序。
报错一:LaTeX Error: File 'ctexart.cls' not found。这是中文宏包没装。MiKTeX 会在编译时弹窗提示按需安装,点安装即可;TeX Live 用户如果装的是最小化版本,需要手动tlmgr install ctex。装完重新编译。
报错二:编译成功但 PDF 不更新。大概率是outDir设了build目录,但 PDF 预览还指向旧路径。解决办法是在 settings.json 里确认latex-workshop.latex.outDir和预览路径一致,或者干脆先注释掉 outDir 这一行,让产物生成在源码同级目录,排除路径干扰后再加回来。
报错三:正向搜索跳转位置偏移。这通常是-synctex=1参数没加,或者 PDF 预览用的不是内置 viewer。检查 tools 里每个命令的 args 是否都带了-synctex=1,以及view.pdf.viewer是否为tab。
报错四:保存后编译卡住不动。常见于-interaction=nonstopmode缺失,导致 LaTeX 遇到错误时等待用户输入。确认 args 里有这个参数。另外如果文档里有\write18之类需要 shell 逃逸的命令,还要加-shell-escape。
报错五:AI 插件报 401 或 403。先确认环境变量是否真的被读取——在终端里echo $TAOTOKEN_API_KEY看有没有值。VS Code 从图形界面启动时可能读不到 shell 里 export 的变量,这种情况要么重启 VS Code,要么在 settings.json 里用插件支持的${env:TAOTOKEN_API_KEY}语法引用。如果还不行,去控制台确认 Key 没过期、额度没用完。
报错六:bibtex 编译后参考文献不显示。这是编译次数不够。bibtex 生成.bbl后,需要再跑两次 xelatex 才能把引用编号和文献列表正确写入。用 recipes 里的xelatex -> bibtex -> xelatex x2方案就能解决,别只跑单次 xelatex。
6. 把 AI 辅助接进 LaTeX 工作流
LaTeX 编译链路跑通之后,AI 辅助这一环才是真正拉开效率差距的地方。我的用法是:在 Cursor 里选中一段 LaTeX 源码,让 AI 帮我改公式、补表格、调格式;或者把一段中文描述丢给它,让它生成对应的tabular或equation环境。这些请求全部走 TaoToken 的统一通道,不用在多个工具之间切换 Key。
如果你主要在 VS Code 里写,可以装一个支持自定义 API 的对话插件,Base URL 填https://taotoken.net/api,Key 用环境变量注入。如果你更习惯 Cursor 的 Agent 模式,那就在 Cursor 的模型设置里配同一个 Base URL,这样 Cursor 的补全、对话、Agent 任务都走同一条通道。长期跑编码类或写作类 Agent 任务的话,Coding Plan 的额度模型会比按次调用更划算,具体可以看 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite 。
有一个细节值得单独说:LaTeX 源码里%是注释符,\是命令前缀,把整段源码丢给 AI 时,最好用代码块包起来,并在提示里说明「这是 LaTeX 源码,请保持命令和注释符不变」。否则 AI 有时会「好心」帮你把%删掉,导致整段内容被编译进去。这个坑我踩过一次,排查了半天才发现是注释符被吃了。
最后给一个我常用的提示模板,你可以直接拿去用:
下面是一段 LaTeX 源码,请帮我完成以下任务: 1. 把 equation 环境里的公式改成 align 环境并对齐等号 2. 保持所有 \label 和 \ref 不变 3. 不要修改任何 % 开头的注释行 源码: ```latex (粘贴你的源码)配置这件事,一次做对,后面就是纯享受。TeX 发行版 + LaTeX Workshop + TaoToken 统一 Key,这三样凑齐,本地就能得到一个比 Overleaf 更可控、AI 辅助更顺手的写作环境。