VsCode 配置 Latex 编译环境并指定输出目录:用 TaoToken 统一管理 API 调用 1. 为什么要在 VsCode 里把 LaTeX 编译和 API 调用一起收口写论文、写技术文档、写课程作业只要用到 LaTeX绕不开两件事一是编译链路要顺二是写作过程中那些辅助性的 API 调用要有个统一出口。前者决定你能不能一键出 PDF后者决定你在写引言、改摘要、翻译参考文献时是不是每次都要翻出不同的 Key 和 Base URL 去改配置。我自己的场景是这样的一个main.tex放在项目根目录图片在figure/下参考文献是books.bib。如果直接编译aux、log、bbl、pdf全都会堆在根目录和源文件混在一起时间一长根本分不清哪个是源文件哪个是中间产物。所以第一件事就是把输出目录单独指定到Tmp/。第二件事是 API 调用。写 LaTeX 的时候经常需要让模型帮忙润色一段中文摘要、把英文摘要翻成中文、或者检查一段公式描述有没有歧义。如果每个工具都单独配一套 Key改起来很烦。TaoToken 在这里的作用就是提供一个统一的 API 入口Base URL 固定Key 统一管理模型 ID 按需切换。这样你在 VsCode 里无论是用插件、还是用命令行脚本调 API都走同一个通道不用来回改配置。这篇内容适合谁已经在用 VsCode 写 LaTeX、但输出目录还很乱的人想把 LaTeX 写作辅助 API 统一收口的人以及想搞清楚latex-workshop.latex.outDir和-output-directory到底怎么配合的人。下面我会先给可复制的settings.json片段再给编译命令和输出目录指定方式最后跑一次完整编译验证 PDF 确实落到目标目录。核心检索词先明确VsCode 配置 LaTeX 编译环境并指定输出目录同时用 TaoToken 统一管理 API 调用。你可以在 VsCode 里完成 LaTeX 编译、PDF 预览、以及写作辅助 API 的调用不需要在多个工具之间来回切换配置。2. TaoToken 前置准备Base URL、Key 与模型 ID 三件套在讲 LaTeX 配置之前先把 API 这一侧的前置条件说清楚。因为后面无论是用命令行脚本调模型还是在 VsCode 插件里配 API都需要这三样东西Base URL、API Key、Model ID。TaoToken 的 API 地址是https://taotoken.net/api这个地址不加任何查询参数直接作为 Base URL 使用。API Key 需要你在控制台里创建创建之后复制出来注意不要提交到 Git 仓库里。模型 ID 根据你要用的模型来填比如你想用某个对话模型做文本润色就填对应的模型标识。如果你还没有 Key可以先去控制台创建一个。地址是https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentconsole。创建完之后在 API Keys 页面可以看到你的 Key 列表地址是https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentapi-keys。这里要强调一点Base URL 和 Key 是两回事。Base URL 是固定的https://taotoken.net/apiKey 是你自己创建的、每个账号不同。模型 ID 是第三个变量它决定你这次请求走哪个模型。这三件套在后面的配置里会反复出现建议你先记下来。如果你只是想先验证一下模型能不能通可以用模型对话页面直接试。地址是https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmodels。在页面上选一个模型输入一段文本看看返回是否正常。这一步不需要写代码适合先确认 Key 和模型 ID 没问题。对于长期在 VsCode 里写 LaTeX、需要频繁调用 API 做润色和翻译的场景可以考虑 Coding Plan。地址是https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding-plan。它的定位是给长期编码和 Agent 场景用的如果你每天都要调很多次 API这个比按次计费更省心。接入文档在https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdoc里面有完整的请求示例和参数说明。Claude Code 相关的接入说明在https://taotoken.net/claudecode?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentclaudecode如果你用 Claude Code 做写作辅助可以参考这个页面。把这三件套准备好之后就可以进入 VsCode 的 LaTeX 配置了。下面的配置片段里LaTeX 编译部分和 API 调用部分是分开的但都放在同一个settings.json里这样你打开 VsCode 就能同时管两件事。3. 可复制配置settings.json 片段与输出目录指定VsCode 的 LaTeX 编译环境主要靠 LaTeX Workshop 扩展。你需要在扩展市场里搜索并安装它。安装完之后打开全局settings.json把下面的配置复制进去。注意这段配置里包含了输出目录指定和编译工具链定义你可以直接复制但路径要根据自己的项目调整。{ latex-workshop.latex.autoBuild.run: never, latex-workshop.showContextMenu: true, latex-workshop.intellisense.package.enabled: true, latex-workshop.message.error.show: false, latex-workshop.message.warning.show: true, latex-workshop.latex.outDir: %DIR%/Tmp, latex-workshop.latex.tools: [ { name: xelatex, command: xelatex, args: [ -synctex1, -interactionnonstopmode, -file-line-error, -output-directory%OUTDIR%, %DOCFILE% ] }, { name: pdflatex, command: pdflatex, args: [ -synctex1, -interactionnonstopmode, -file-line-error, -output-directory%OUTDIR%, %DOCFILE% ] }, { name: latexmk, command: latexmk, args: [ -synctex1, -interactionnonstopmode, -file-line-error, -pdf, -outdir%OUTDIR%, %DOCFILE% ] }, { name: bibtex, command: bibtex, args: [ %OUTDIR%/%DOCFILE% ] } ], latex-workshop.latex.recipes: [ { name: XeLaTeX, tools: [xelatex] }, { name: PDFLaTeX, tools: [pdflatex] }, { name: BibTeX, tools: [bibtex] }, { name: LaTeXmk, tools: [latexmk] }, { name: xelatex - bibtex - xelatex*2, tools: [xelatex, bibtex, xelatex, xelatex] }, { name: pdflatex - bibtex - pdflatex*2, tools: [pdflatex, bibtex, pdflatex, pdflatex] } ], latex-workshop.latex.clean.fileTypes: [ *.aux, *.bbl, *.blg, *.idx, *.ind, *.lof, *.lot, *.out, *.toc, *.acn, *.acr, *.alg, *.glg, *.glo, *.gls, *.ist, *.fls, *.log, *.fdb_latexmk ], latex-workshop.latex.autoClean.run: onFailed, latex-workshop.latex.recipe.default: lastUsed, latex-workshop.view.pdf.internal.synctex.keybinding: double-click }这段配置里最关键的一行是latex-workshop.latex.outDir: %DIR%/Tmp。它告诉 LaTeX Workshop编译产生的中间文件和 PDF 都放到当前源文件所在目录下的Tmp文件夹里。%DIR%是 LaTeX Workshop 的变量表示当前.tex文件所在目录。所以如果你的main.tex在E:\CODING\SCRIPTS\LATEX\CHINESE-CLASSIC那么输出目录就是E:\CODING\SCRIPTS\LATEX\CHINESE-CLASSIC\Tmp。注意Tmp文件夹需要你提前创建好。xelatex 在发现输出目录不存在时会终止编译它不会自动帮你创建。这一点和命令行编译是一样的。你可以在项目根目录下手动新建一个Tmp文件夹或者用命令mkdir Tmp创建。另外bibtex工具的参数改成了%OUTDIR%/%DOCFILE%。这是因为当输出目录改变后bibtex需要去Tmp目录里找.aux文件。如果不改这个参数bibtex会在源文件目录里找.aux结果找不到参考文献就编译不出来。如果你还想在同一个settings.json里管理 API 调用可以加一段自定义配置。比如你写了一个脚本scripts/polish.py用来调 TaoToken 的 API 做文本润色那么可以在settings.json里加一个任务{ tasks: { version: 2.0.0, tasks: [ { label: polish-latex-text, type: shell, command: python, args: [scripts/polish.py, ${file}], problemMatcher: [] } ] } }这个任务会在你当前打开的.tex文件上运行polish.py。脚本里用到的 Base URL 就是https://taotoken.net/apiKey 从环境变量读取模型 ID 作为参数传入。这样你的 LaTeX 编译和 API 调用就都在 VsCode 里统一管理了。4. 验证请求完整编译一次并确认 PDF 落到目标目录配置写完之后需要实际编译一次来验证。先确认你的项目结构是这样的E:\CODING\SCRIPTS\LATEX\CHINESE-CLASSIC │ books.bib │ main.tex │ ├─figure │ 1.jpg │ 2.jpg │ 3.jpg │ 4.jpg │ └─TmpTmp文件夹是空的用来接收编译输出。然后在 VsCode 里打开main.tex左侧会出现一个 TEX 图标点开就是 LaTeX Workshop 的工具栏。你可以选择xelatex - bibtex - xelatex*2这个 recipe它会依次执行 xelatex、bibtex、再两次 xelatex适合有参考文献的场景。编译完成后检查Tmp目录应该能看到这些文件Tmp main.aux main.bbl main.blg main.log main.pdfmain.pdf就是最终产物。源文件目录里除了main.tex、books.bib和figure/不应该再有aux、log、pdf这些文件。如果Tmp里没有main.pdf说明编译过程中有错误需要看main.log里的报错信息。如果你想用命令行验证可以在项目根目录执行mkdir Tmp xelatex -output-directoryTmp main bibtex Tmp/main.aux xelatex -output-directoryTmp main xelatex -output-directoryTmp main注意bibtex的参数是Tmp/main.aux不是main.aux。这是因为.aux文件在Tmp目录里。执行完之后Tmp/main.pdf就是最终 PDF。接下来验证 API 调用。假设你写了一个简单的 Python 脚本scripts/polish.py内容如下import os import sys import requests base_url https://taotoken.net/api api_key os.environ.get(TAOTOKEN_API_KEY) model_id your-model-id def polish(text): headers { Authorization: fBearer {api_key}, Content-Type: application/json } payload { model: model_id, messages: [ {role: system, content: 你是一个学术写作助手请润色下面的中文段落保持原意。}, {role: user, content: text} ] } resp requests.post(f{base_url}/v1/chat/completions, jsonpayload, headersheaders) resp.raise_for_status() return resp.json()[choices][0][message][content] if __name__ __main__: with open(sys.argv[1], r, encodingutf-8) as f: content f.read() print(polish(content))运行之前先设置环境变量export TAOTOKEN_API_KEY你的Key然后执行python scripts/polish.py main.tex如果返回了润色后的文本说明 API 调用走通了。这里的关键是 Base URL 用的是https://taotoken.net/api请求路径是/v1/chat/completionsHeader 里带Authorization: Bearer Key。模型 ID 根据你实际使用的模型填写。如果你在 VsCode 里用任务运行这个脚本可以在.vscode/tasks.json里配置然后按CtrlShiftP选择Tasks: Run Task再选polish-latex-text。这样你就不需要离开 VsCode 就能完成 API 调用。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth配置过程中最容易遇到的几个报错我逐个说一下排查思路。第一个是401 Unauthorized。这个通常出现在 API 调用侧说明你的 Key 不对或者没有正确带上。检查三件事Key 是否复制完整有没有多余空格Header 里是不是Authorization: Bearer Key的格式Base URL 是不是https://taotoken.net/api。如果你用的是环境变量确认环境变量在当前终端里已经生效可以用echo $TAOTOKEN_API_KEY看一下。第二个是local proxy failed。这个报错一般和网络环境有关但不要往代理方向想。先检查你的请求地址是不是写成了https://taotoken.net/api有没有多写或少写路径。另外确认你的网络能正常访问这个地址可以用curl -I https://taotoken.net/api看一下返回状态。如果返回 200 或 401说明地址是通的如果超时检查本机 DNS 和网络设置。第三个是reading choices相关的报错比如KeyError: choices或者list index out of range。这说明 API 返回的 JSON 结构和你预期的不一样。可能的原因是你的请求体格式不对比如messages字段拼写错误或者model字段填了一个不存在的模型 ID。建议先把返回的原始 JSON 打印出来看确认结构。可以在脚本里加一行print(resp.json())看看实际返回了什么。第四个是OAuth相关的报错。如果你在某个工具里配置 API 时看到 OAuth 字样说明那个工具默认走的是 OAuth 流程而不是 API Key 流程。你需要找到工具里切换认证方式的选项改成 API Key 模式然后填入 Base URL 和 Key。TaoToken 的 API 调用走的是 Bearer Token不需要 OAuth。还有一个 LaTeX 侧的常见问题编译后Tmp目录里没有 PDF但也没有明显报错。这种情况通常是Tmp文件夹不存在xelatex 直接终止了。检查项目根目录下有没有Tmp文件夹没有就手动创建。另外确认settings.json里的outDir路径是否正确%DIR%/Tmp表示源文件目录下的Tmp如果你的项目结构不同需要相应调整。如果你在 VsCode 里同时用了 Cline MCP 或者 Claude Code 做写作辅助配置里需要写全三件套Base URL、Key、Model ID。Base URL 是https://taotoken.net/apiKey 从控制台获取Model ID 按你选的模型填。这三样缺一不可少一个就会报 401 或者模型不存在。6. 统一收口之后LaTeX 编译与 API 调用的日常使用建议配置完成之后你的日常工作流会变成这样打开 VsCode写main.tex需要编译时点一下 LaTeX Workshop 的编译按钮PDF 自动落到Tmp/main.pdf。需要润色某段文字时选中文字运行polish-latex-text任务脚本调 TaoToken 的 API 返回结果。整个过程不需要离开 VsCode也不需要手动切换 Key 或 Base URL。如果你经常需要切换模型比如有时候用这个模型做翻译有时候用那个模型做润色可以在脚本里把模型 ID 做成参数或者用环境变量控制。这样你只需要改一个地方不用动settings.json里的 LaTeX 配置。对于长期写论文或者技术文档的人建议把Tmp目录加到.gitignore里避免中间产物被提交到仓库。同时把 API Key 放在环境变量里不要写死在脚本或配置文件里。如果你用 Coding Plan可以在https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding-plan了解适合长期使用的方案。最后提醒一点LaTeX 编译和 API 调用是两条独立的链路但它们可以在 VsCode 里统一管理。LaTeX 编译靠 LaTeX Workshop 扩展和settings.jsonAPI 调用靠脚本和任务配置。两者的共同点是都需要一个稳定的入口LaTeX 的入口是outDir和编译工具链API 的入口是 Base URL 和 Key。把这两个入口都收口到 VsCode 的配置里你就不用来回切换工具了。