Skip to main content
Glama

TeXChronicle — 面向章节的 LaTeX 历史记录与实时编辑

license

English · 简体中文 · 日本語 · 한국어 · Español · Français · Deutsch · Português

TeXChronicle 是一个以人为本的 LaTeX 工作区,用于编辑、渲染和恢复论文。它将源代码编辑器、可编辑的 Live 文档视图、精确的 PDF 预览、锚定评论和面向章节的 Git 历史整合在一个浏览器窗口中。每次成功编译都会记录源代码和对应的精确 PDF,而不会改动论文正常的 Git 分支。

它可以独立运行——LLM 是可选的。Claude Code、Codex 以及其他兼容 MCP 的智能体可以在需要时编辑相同的文件,或基于评论进行操作。Windows 便携版自带编译器、浏览器运行时、Node.js 和 Git,因此接收者不需要本地安装 TeX,也不需要 Overleaf 账户。

TeXChronicle 工作区:文件树、源代码编辑器、实时 PDF 和审阅者的评论

工作区

一个浏览器窗口(灵感来自 Typst 的单界面编辑器和 LiquidText 的锚定批注):

┌──────────────────────────────────────────────────────────────┐
│  ✓ up to date · 13 pages        Export .zip · Download PDF   │
├────────────┬──────────────────────────────┬──────────────────┤
│ Source /   │          PDF (live)          │    Comments      │
│ History    │  select text → 💬 comment    │  accepted → ask  │
│  editor,   │  highlights stay anchored    │  Claude to       │
│  timeline  │  auto-reloads on every edit  │  address them    │
│  + diffs   │                              │  → resolved ✓    │
└────────────┴──────────────────────────────┴──────────────────┘
  • 评论 → Claude 循环(这才是全部重点)。 就像导师在打印稿上批注那样,在渲染后的文档上进行审阅:选中文字,附上评论(“把这个段落写紧凑些”)。然后让 Claude “处理我的评论”——它会通过 check_comments 将它们作为 带位置的工作项 拉取(页码 + 引用片段 * 它锚定的源代码 file:line 位置 + 你的要求),编辑源码,并用文字说明解决每一张卡片。你与文档交互;Claude 与源码交互。用 /loop 可全自动运行,详见 docs/AGENT-LOOP.md。

  • 可编辑源码面板。 一个使用项目文件的 CodeMirror LaTeX 编辑器——保存(Ctrl+S)即重新编译并刷新 PDF,Typst 风格。或者继续使用你自己的编辑器:任何一次 保存 都会触发同样的实时循环。Code、Live 和 PDF 都是可全画布切换的工作区。Live 可立即把普通的学术 LaTeX 变成可编辑的文档(标题、正文、引用、脚注、列表、公式、图表)。编辑一个词只会修改它在源码中的精确区间;数学公式、引文、引用、命令、注释和未触碰的格式都会逐字节原样保留。受保护的结构在 Code 中仍保持可见、可展开;PDF 仍然精确。在需要对比时,Split 可以将源代码或 Live 放在 PDF 旁边。

  • PDF → 精确源码。 在由本地 TeX 后端生成的 PDF 中点击某一处,就可以通过 SyncTeX 打开对应的源码文件和所在行。可见文本处理也可应对宏展开的标题/作者块;在内置的 WASM 后端没有 SyncTeX 映射时,它仍然只是尽力而为的回退方案。

  • Live 自动重载。 文件监视器会在每次保存后自动重新编译——无论是 Claude 的编辑、内置编辑器还是你在外部编辑器里的编辑。

  • 面向章节的变更历史。 每次成功编译都会自动快照到一个隐藏的 git 引用(refs/latex-preview/checkpoints)——永远不触及你的分支、git log 或工作树。恢复前还会先保存一份可回退的安全快照,同时一个单独的标记确保未渲染的恢复状态永远不会被误当成成功的 PDF。历史记录会跟随每个章节和子章节在编辑、重命名和移动中的变化,使用标签和指标同时结合。清。可以浏览其独立时间线,只用比较其文字(或整个子树),恢复其中一部分而不回退论文其他部分,并重新打开该检查点生成的 PDF。同时也有一个整个项目的时间线可选。

  • 前往 Overleaf。 Download PDF、Export .zip(一个干净的构建输入包),以及针对公共 GitHub 仓库的 一键 Open in Overleaf 链接:Premium Git-bridge 同步方式在文档中写明就是 git push。参见 docs/USER-GUIDE.md。

  • 审阅工作流(审阅人 → 门 → 解决者)。 审阅/辩护方智能体通过 add_comment 提评论; 你接受/拒绝它们(或者打开 自动接受 享受“副驾驶”模式);然后一个作者循环以“副驾驶”模式解决掉接受意见。评论带有角色,并带一条回复线。参见 docs/AGENT-LOOP.md。

  • 保存 vs. 重新编译,由你决定。 内置编辑器每 30 秒自动保存一次且不重新编译;Ctrl+S / Save / Recompile 按需重建 PDF。(打开 ⚡ Live 可实时编译。) 你自己编辑器的修改,以及 Claude 的修改,仍然会通过文件监视器自动重新编译。

  • 真实项目。 自动检测主文件,同时收集多文件 \input/\include、.bib、仓库内的 .cls/.sty/.bst 和图片,运行 BibTeX 并在需要时自动重跑;常见缺失的宏包会自动注入。

  • 编译后端。 如果你本机有 latexmk 就使用本地 latexmk——完整宏包,输出与 Overleaf 一致;否则使用自带零安装的 WASM TeX Live。可以用 backend: "system" / "wasm" 强制指定其中之一。每次编译都会报告这次用了哪个后端。

  • 文档类。 内置 IEEEtran,因为 WASM TeX Live 里不带任何会议类,而且类的缺失不像宏包那样可以绕过。会议类(NeurIPS、ICML、CVPR、ACL、AAAI 等)没有可再分发的许可证,所以把作者/会议提供的 .cls 放在源码旁边即可,它会自动被使用。

  • MCP 工具: render_preview(编译并打开工作区)、check_comments / resolve_comment / add_comment / reply_to_comment(审阅循环)、show_diff(将并排 diff 渲染成图片——适合可以显示图片的客户端)。

  • 可执行的错误信息。 编译失败会返回解析后的 {file, line, message} 错误信息,让 Claude 可以自我修正,并在工作区中。

Related MCP server: overleaf-mcp

运行编辑器(无需 LLM)

Windows 便携版(no 安装)

Download from release TeXChronicle-<version>-Portable-Windows-x64.zip,解压整个文件夹,然后双击 TeXChronicle.exe. 它包含自己的 Node 运行时、Git、Headless Chromium 和完整的 Sport: taking BusyTeX 资源包,因此接收方 不需要 安装 npm、Node.js、Git、Perl 或 TeX,并且第一次编译不需要下载。选择一篇最近的论文,进入它的主 .tex 文件,或者直接将该文件拖到 TeXChronicle.exe 上。

这是一个即装即用的文件夹,不是安装程序:让它的子文件夹与 EXE 同目录。论文的检查点、评论和已保存的 PDF 仍留在论文的 .latex-preview 目录中,所以 Dropbox 或任何普通文件夹同步器都可以跨机器携带它们。同一时间只在一台机器上编辑:在另一处打开同一论文前,先让同步完成;两台电脑离线编辑同一边论文可能会导致检查点历史分裂。参见Windows 便携版指南 了解共享、校验和、更新、限制以及可复现构建命令。

One-click launcher(Windows)

在安装/链接 TeXChronicle 后,安装其桌面快捷方式(一次性):

texchronicle install-launcher

之后就不需要任何项目命令了:点击 TeXChronicle,它的 最近项目 窗口会列出你之前打开的论文,并有 Browse… 来浏览新的主 .tex 文件。双击论文,浏览器工作区就会打开。你也可以把 .tex 文件拖到桌面快捷方式上。打开一个已在运行的论文会复用其现有的工作区,而不是启动另外的进程。状态窗口会一直保持本地工作区处于活动状态;完成后请关闭它。texchronicle open 提供了相同的最近项目的选择器。

终端启动

在 npm 发布之前,直接从 GitHub 安装——无需克隆、无需构建步骤:

cd /path/to/paper
npx -y github:Aliutin/TeXChronicle preview main.tex

npm install 会自动克隆仓库并安装(包括其 UI 构建——见 与 LLM/MCP 客户端一同设置 了解具体在发生了什么以及成本),然后运行工作区。npm 以后,同一行命令是 npx -y texchronicle preview main.tex。

如果是开发者路线,可以改用源码检出的方式——安装并链接一次 TeXChronicle:

npm install
npm run build:ui
npm link

npm run build:ui 会构建浏览器工作区。如果没有它,一台全新的克隆会回退到基本查看器——只显示 PDF,没有编辑器、History 或评论。

然后从任何 LaTeX 项目目录运行:

cd /path/to/paper
texchronicle preview main.tex

浏览器工作区会打开,并在终端运行期间保持活着。使用 ⚡ Live 实现边输入边重新编译,或者按 Ctrl+S 保存并编译。每次干净的提交都会被记录在 History 中。按 Ctrl+C 停止。对于位于其他位置的项目,请用 texchronicle preview --project /path/to/paper main.tex。

Claude Code、Codex 和其他 MCP 客户端是可选的:它们可以在独立工作区运行期间编辑同一批文件,但并不是打开或使用它的必要条件。

与 LLM/MCP 客户端一同设置

软件包和 MCP 元数据使用 texchronicle 和 io.github.Aliutin/texchronicle。npm 包还没有发布——npm view texchronicle 仍是 404——所以从 GitHub 安装直接安装,可让 npm 处理,不需要自己克隆或构建,也不需要 build 步骤:

{
  "mcpServers": {
    "texchronicle": {
      "command": "npx",
      "args": ["-y", "github:Aliutin/TeXChronicle"]
    }
  }
}

npm 会克隆仓库并安装它。因为这个包有 prepare 脚本,npm 会同时安装它的 devDependencies 并在打包之前运行 prepare——该脚本就是 npm run build:ui,所以浏览器 UI (ui/dist) 是作为安装的一部分构建的,而不是让你记住的。然后 postinstall 会获取 Playwright 的 headless Chromium;关于如何退出这一步或把自己的浏览器指向它,见 Requirements。

GitHub 的方式有三点要注意,但都不会影响安装:机器需要在 PATH 中具备 git;安装过程会拉取 devDependencies(React、Vite、TypeScript)并构建 UI,因此明显比从 registry 安装慢;每指定 npx 运行都会在网络上重新解析 git 引用,所以使用上一版缓存,取决于 npm 版本。

设置有两种:

  • 源码签出——开发者方案,也适用于服务端使用你的工作树。在 TeXChronicle 目录中运行 npm install(会执行 prepare → npm run build:ui),然后把客户端入口指向入口脚本:"command": "node", "args": ["/absolute/path/to/TeXChronicle/bin/cli.mjs"]。请走 bin/cli.mjs 而不是 npx tsx src/server.ts:那是检查 Node 版本、并在版本过旧时清楚提示的地方,你还会预装某些 Windows 账户需要的 os.userInfo 依赖。直接调用把 src/server.ts 会跳过这两项,最终 MCP 客户端报 -32000。每次改动 ui/ 下内容后手动重新运行 npm run build:ui;同时注意:如果 clone 时被脚本跳过(npm install --ignore-scripts),打开的就是“基本查看器”而不是工作区,屏幕不会提示地说明原因。

  • 等到 npm 发布后,简写为:"command": "npx", "args": ["-y", "texchronicle"]。

  1. 重启 Claude Code(或 6. /mcp 重新连接),以便乘值服务器。

  2. 请 Claude 渲染。 例如 “渲染一下这篇论文”→ 第一次调用会先下载 WASM TeX Live 的资源(约 650 MB,一次性),然后编译并打开 live 预览。之后的编辑会自动重新加载。

它使用哪个文件夹?

服务会在启动时所在的文件夹运行。Claude Code 和 Codex 会把 MCP 服务器启动在项目目录,所以 .mcp.json 放在论文旁边即可。有些客户端(包括 Claude Desktop)会从你的主目录启动服务器,此时服务器可能没有可编译的论文。在这种情况下,需要明确地在服务器配置项中指定文件夹:

{
  "mcpServers": {
    "texchronicle": {
      "command": "npx",
      "args": ["-y", "github:Aliutin/TeXChronicle"],
      "env": { "TEXCHRONICLE_PROJECT": "/absolute/path/to/paper" }
    }
  }
}

或者作为服务器参数,附加在包名之后:"args": ["-y", "github:Aliutin/TeXChronicle", "--project", "/abs/path/to/paper"] —— 也可以从源码检出运行:"args": ["/abs/path/to/TeXChronicle/bin/cli.mjs", "--project", "/abs/path/to/paper"]。

第三种方式完全不需要改配置:向 render_preview 传 projectRoot 即可 —— 只要说 “render a preview of /Users/me/papers/thesis”,Claude 就会替你补上。它会把整个会话重新指向该目录,所以之后每次工具调用(评论、历史记录、diff)都会使用这个文件夹;它也是这三种方式中唯一一个可以由 agent 在对话中途自行应用的,无需你编辑配置文件并重启客户端。

如果服务器在某个不包含任何 .tex 文件的目录下启动,它会说明这一点并停止,而不会监听该目录或在那里创建历史存储;所显示的拒绝信息中会列出上面的全部三种方式。

WASM 资源不在本仓库中。它们会在首次运行时按用户各自的缓存获取——macOS 上用 ~/Library/Caches/texchronicle,Linux 上用 $XDG_CACHE_HOME/texchronicle,Windows 上用 %LOCALAPPDATA%\texchronicle——所以升级 TeXChronicle 时无需重新下载;一份检出、一次全局安装和一次 npx 运行会共用同一份副本。设置 TEXCHRONICLE_ASSETS_DIR 可以将其放到别处。若想预取,可运行:npx texlyre-busytex download-assets <that directory>。

作为 Claude Code 插件安装(斜杠命令)

可选的 Claude Code 插件会提供 MCP 服务器以及斜杠命令:

/plugin marketplace add Aliutin/TeXChronicle
/plugin install texchronicle

在 npm 发布之前,插件自带的服务器入口与上面的 GitHub 形式相同(npx -y github:Aliutin/TeXChronicle),因此它也有同样的注意点:git 要在 PATH 中,且首次启动时会安装并构建,而不是只做解包。一旦包发布到 npm,它会换成 npx -y texchronicle。

然后,在你的论文项目中,使用这些工作流命令来完成常见流程:

  • /texchronicle —— 编译并打开工作区(实时的服务可见预览)。

  • /ai-review [skill] —— 用某个技能评审论文(默认为 academic-paper-revision;可传入任何技能名称),并发布评论供你接受/拒绝。缺失的技能会给出安装提示。

  • /address-comments —— 处理你已经接受的评论(可以用 /loop 60s /address-comments 循环执行)。

  • ⚡ /ultra-agents [skill] [depth] —— 完全自主:评审、自动接受、修改、循环,最多 depth 轮(默认 2),如果某一轮没有发现新问题就提前结束。不需要逐轮审批——这正是它的意义,也是它的风险所在。depth > 5 会在开始前请你确认。它会在结束时给出总结(提出哪些问题、哪些内容,以及应当查看哪些检查点)——每一轮仍然是一个普通的、可回滚的检查点。参见 docs/AGENT-LOOP.md。

一个命令对应一个工具

每个 MCP 工具也都有一个同名斜杠命令,所以你可以在只需要执行某一步时直接输入工具名。需要记住的规则是:工具叫 X → 输入 /X。

输入这里

触发工具

作用

/render_preview

render_preview

编译论文并打开/刷新实时预览。

/check_comments

check_comments

列出已接受的评论,作为(还不做改动的)编辑指令。

/resolve_comment [id] [note]

resolve_comment

修改完成后把评论标记为已完成;它会变成绿色供你复查。

/add_comment ["quote"] [note]

add_comment

在段落上添加一条评论,供你 接受/拒绝。

/reply_to_comment [id] [text]

reply_to_comment

为评论添加一条串联显示与后续回复。

/show_diff [checkpoint]

show_diff

以图片形式显示并排差异(当前未提交的改动,或某个检查点)。

/list_checkpoints [limit]

list_checkpoints

最近的检查点及其 sha,由新到旧 —— 用它找出要传给 /show_diff 的条目。

你并不一定非要输入这些;普通英文即可(“render a preview”、“address my comments”)。这些命令只是一种内建、可快速输入的表达方式。

斜杠命令是由插件提供的:它们是 commands/ 目录下的文件,只有插件才会安装。服务器本身不会注册任何 prompt,因此 .mcp.json 配置只提供下方表格里的工具,而不提供 / 快捷方式——你用普通英文语句驱动它们(“render a preview”、“address my comments”),这本来也就是那些命令所展开的内容。

工具

这是面向任何支持 MCP 的客户端的 MCP 工具面。(在使用 Claude Code 时,你只需用普通英文提问,或者使用上面的斜杠命令;下面是底层的工具。)

工具

参数

作用

render_preview

projectRoot?(文稿所在文件夹的绝对路径——仅在启动时并未指向那里时需要;设置后其对本次session余下的部分生效) · mainFile? · engine?(pdflatex|xelatex|lualatex,省略时自动检测) · backend?(wasm|system|auto,默认为auto——本地有 latexmk 时用本地,否则使用发布版 WASM 引擎)

编译项目并打开/刷新实时工作目录。如果省略 mainFile,会扫描到 \documentclass 自动检测主文件。

check_comments

includeResolved?(默认 false)

返回已接受的评论中已定性的工作项——页码、引用的段落、所在源文件 file:line 以及督办事项。等待你决策的 Reviewer 建议会被反馈但不会作为工作项返回。

add_comment

quote · comment · role?(reviewer|defender) · page? · accepted?

把评论锚定到一段内容上。除非设置了 accepted,否则它以一条 等待你接受/拒绝 的 sugest 发布——正是这个标志让自动模式可行。

resolve_comment

id · note

在所有已完成的修改完成后,把评论标记为 done,并注明改了什么。它仅在当前源码与最新一次已成功渲染的检查点完全匹配时才会被接受,然后在 workspace 中变为 绿色 供你 review。

reply_to_comment

id · text · role?(author|reviewer|defender)

添加一条串联回复,便于双方在评论上就不能一致达成一致,而不必切到聊天。

show_diff

checkpoint?

将并排差异渲染为图片,并直接显示在对话中。默认为当前未提交的改动;传入 checkpoint 的 sha,可展示已保存的版本。

list_checkpoints

limit?(默认 10,最多 50)

显示最近的多个检查点,包含它们的 sha,新的优先——用它找一个来传给 show_diff。

上面这些工具构建出重点流程,而不是把它们列为工具之一。 /texchronicle、/ai-review、/address-comments 和 ⚡ /ultra-agents 是 Claude Code 插件命令,它们用来编排上面的工具 —— /ultra-agents 会按你允许的轮次数执行评审 → 自动接受 → 修复等流程,而 add_comment 中的 accepted 参数恰恰正是为此而设。它们并不属于 MCP 工具表面,所以其他 MCP 客户端只能看到上面的七个工具。参见 插件一节 和 docs/AGENT-LOOP.md。

在终端中查看

下面这些都是真实工具输出的,原样捕获自一次针对示例论文的真实 run,不是 mock。Claude Code 里你会看到这些,而浏览器中的 workspace(上面截图)实时对应同一份 State。

你输入:

/texchronicle

Claude 调用 render_preview 并回应:

✓ Compiled main.tex with xelatex in 1900ms — 2 files. Workspace (live preview,
source editor, history, PDF comments — auto-reloads on edits):
http://127.0.0.1:52042/app

你(或一个 Reviewer skill)留下一段评论,然后问下一步什么可处理。Claude 调用 check_comments:

1 accepted comment — edit each at its source location per the instruction, then
call resolve_comment with its id and a one-line note:

[id: 2fce9e3c8b5f] p.1 — "Sorting widgets efficiently is a long-standing problem"
  ↳ source: main.tex:15
  → Tighten this opening sentence.

(1 reviewer suggestion still awaits the human's accept in the workspace — not
actionable yet.)

Claude 作出修改并调用 resolve_comment:

✓ Resolved comment 2fce9e3c8b5f ("Sorting widgets efficiently is a long-standing
problem…") — the card now shows: Rewrote the opening sentence.

再次查看时,已接受的队列为空——只剩下尚未被接受的那条建议,还在等你决定:

No accepted comments. (2 already resolved.)

(1 reviewer suggestion still awaits the human's accept in the workspace — not
actionable yet.)

工作原理

Claude edits .tex ─┐
 file watcher ─────┼─▶ compile coordinator ─▶ headless Chromium ─▶ WASM TeX ─▶ PDF
 render_preview ───┘         (serialized)         (engine host)                │
                                                                               ▼
                     your workspace (/app)  ◀── WebSocket "reload" ◀── local HTTP server
                     Source · PDF · History · Comments        (serves /app + /latest.pdf)

WASM 引擎需要 DOM/Worker 等全局变量,因此服务器作为一个匿名的 headless Chromium 运行编译工作线程;而 workspace中你打开的则是一个轻量的 React + pdf.js 应用,本身不包含 WASM。参见 docs/ARCHITECTURE.md。

flowchart LR
  H["👤 You<br/>Source · PDF · History · Comments"]
  A["🤖 Claude Code<br/>+ review / author agents"]

  H <-->|"select text →<br/>anchor comment"| SRV["Preview server<br/>HTTP + WebSocket · serves /app"]
  A -->|"7 MCP tools"| MCP["MCP server<br/>render_preview · show_diff · list_checkpoints<br/>check / resolve / add / reply_comment"]

  SRV --> CO["Compile coordinator<br/>(serialized)"]
  MCP --> CO
  A -. edits source .-> FILES[("Paper files · git repo")]
  FILES --> WATCH["File watcher"] --> CO
  CO --> ENG["WASM busytex<br/>(headless Chromium)"] --> PDF["/latest.pdf"]
  PDF -. live reload .-> H
  CO --> CK["git checkpoints<br/>(hidden ref) → History"]

  SRV <--> CJSON[(".latex-preview/<br/>comments.json")]
  MCP <--> CJSON
  CJSON -->|"check_comments<br/>(your accepted asks)"| A

两个前端入口——你在工作区里,智能体通过 7 个 MCP 工具——汇合在同一个协调器、评论存储和 git 历史之上。你操作的是渲染后的文档(在锚点处添加评论);Claude 操作的是源代码(通过 check_comments 读取你的评论、进行编辑,再用 resolve_comment 解决)。正是这个共享底座,让评论循环、审阅工作流和可追溯的历史成为可能。

系统要求

以下要求适用于 npm/源码安装。Windows 便携版自带这些运行时,只需要 64 位 Windows 10 或更高版本,外加一个用于工作区窗口的普通网页浏览器。下面提到的 TEXCHRONICLE_* 变量都统一列在用户指南中。

  • Node 20.19+(chokidar 和 playwright 实际需要的最低版本;服务器启动时会检查并给出提示)

  • Playwright 的无头 Chromium(约 150–300 MB),会自动获取:安装时会有 postinstall 步骤下载它;如果首次需要浏览器时它缺失,届时会重试下载。可以通过以下方式更改:

    • TEXCHRONICLE_SKIP_BROWSER_DOWNLOAD=1(或 Playwright 自带的 PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1)跳过下载——适用于按量计费网络、CI 环境或离线构建的镜像。

    • 如果没有 Playwright Chromium,TeXChronicle 会回退到机器上已安装的 Chrome 或 Edge,并会在这样做时明确说明。

    • TEXCHRONICLE_BROWSER 可以显式指定浏览器,优先级高于以上所有方式:chrome、msedge、chromium,或某个可执行文件的完整路径。

    *故障排查:*如果自动下载被跳过或失败,而且系统中找不到 Chrome/Edge,一次性修复方法是在 TeXChronicle 目录中运行 npx --no-install playwright install chromium --only-shell。

  • 一次性的 WASM TeX Live 资源约占 650 MB 磁盘空间——全部在首次运行时获取,分为三个包集合(基本 87 MB、推荐 190 MB、额外 324 MB,外加 31 MB 的引擎)。一篇普通论文只会加载基本集合;较大的两个会留在磁盘上,直到有需要时才使用。这些资源按用户缓存,不按安装缓存,所以升级 TeXChronicle 不会重新下载它们。可以用 TEXCHRONICLE_ASSETS_DIR 覆盖存储位置。

  • 论文自身文件夹中的磁盘占用:每次干净渲染的 PDF 都保留在 .latex-preview/renders/<checkpoint>.pdf,这样历史记录中的查看 PDF 可以显示旧版本的确切输出。默认保留最新 50 份,更早的会被删除——把 TEXCHRONICLE_KEEP_RENDERS 设为其他数值,或设为 0 以保留全部。当前正显示在屏幕上的渲染结果永远不会被删除,不论它有多旧。

  • 本地安装 TeX 是可选的。 何时需要它见下文。

我需要本地安装 TeX 发行版吗?

不需要——内置的 WASM 引擎无需安装任何东西就能编译,这正是重点所在。但它只附带了 TeX Live 的一个子集,所以有些东西不在其中:svg、大多数面向特定发表场景的文档类,以及各种较不常用的宏包。当缺少某个宏包时,系统会明确告知你,而不是给你一份静默出错的 PDF。

如果你希望输出与 Overleaf 完全一致,就安装一个发行版。TeXChronicle 会自动发现它——无需配置:

macOS

MacTeX

Linux

texlive-full,通过你的包管理器安装

Windows

TeX Live,或 MiKTeX 外加 Strawberry Perl

latexmk 不会单独安装——它是一个驱动脚本,随上述 Linux 发行版一起安装。在 Windows 上,TeXChronicle 也会直接探测标准的按用户/系统安装的 MiKTeX 和 Strawberry Perl 所在位置,因此不完整的 PATH 无法强制使用内置编译器。在其他地方,请用 latexmk -version 检查,而不是 which latexmk:能找到文件并不代表它能运行。在 macOS 上,你可能需要先执行 eval "$(/usr/libexec/path_helper)" 或新开一个终端。

两个值得了解的 Windows 细节,它们都已经替你处理好了:

  • MiKTeX 的“安装前询问”——这是新装 MiKTeX Console 时留下的设置。它的提示是一个 GUI 对话框,TeXChronicle 在隐藏状态下运行引擎,没有人能回答它,因此编译会卡住。TeXChronic 会检测到该设置,改为在“关闭安装程序”的情况下运行;如果文档随后需要这台机器上的宏包缺失,它会告诉你缺少什么并给出修复方案(mpm --install=<pkg>,或 MiKTeX Console → 设置 → “Always install missing packages”)。

  • 两个 Perl。 如果你使用 Git Bash 或 MSYS2,一个 POSIX 仿真的 perl 会放在你的 PATH 上,而它无法运行 MiKTeX 的 latexmk。TeXChronic 会注意到这一点,并优先选择真正的 Strawberry Perl 安装,而不是 PATH 中的那个,因此本地编译在你的不知道时也能正常工作。

每次编译都会告诉你实际用的是哪一个——xelatex · system 或 xelatex · wasm。

开发

npm install
npm run typecheck    # tsc for the server and the UI
npm run build:ui     # build the React workspace to ui/dist
npm test             # the unit suite — engine-free, no browser, seconds
npm start            # run the server on stdio (for a manual MCP client)

有意识地把测试分为两层。npm test 覆盖评论存储、锚点匹配、行列几何、历史仓库、资源路径、编译日志分类、预览服务器关闭和 MCP 工作流 E2E——所有这些都不需要浏览器或 TeX 引擎,因此它保持快速和稳定。CI(.github/workflows/ci.yml)会在每次推送和拉取请求时,在 Node 20 和 22 上运行 typecheck + UI build +该测试套件。

单元测试在结构上无法看到的东西——多个缩放级别下的文本高亮几何、一次失败的渲染实际上向阅读者展示了什么、关闭时是否关闭了服务器并提醒了所有打开的窗口——这些存在于 scripts/smoke-*.mjs 中,并在 .github/workflows/smoke-macos.yml 中针对真实浏览器和不真实编译运行。每个这样的测试之所以存在,是因为某次功能发布时 API 已损坏但单元测试套件全绿。请不要因为遗漏某些更新而破坏现有的两个绿灯;请在变更时补充覆盖。

文档

  • 用户指南 — 日常使用、评论循环、实时编辑、文件树、将论文滑入 Overleaf、宏包覆盖。

  • 智能体循环 — 评论作为触发、在 /loop 中以无人值守方式运行、审阅者 → 门禁 → 解决助手工作流,以及 ⚡ /ultra-agents。

  • 路线图 — 已为并发智能体交付了哪些内容,以及真正的并行多智能体编辑仍需什么。

  • 架构 — 为什么需要无头浏览器、每个模块做什么、编译流程。

这四个文档都与此 README 一样翻译为同样的 8 种语言;每个页面顶部都有自己的语言切换器。

路线图

多个 Claude Code 会话已经可以在同一项目上并发工作,不会破坏评论或记录历史(参见 docs/ROADMAP.md)——真正的并行多智能体编辑(审阅者/作者/守护者各自在独立的 git 分支上,再合并回去)是下一个里程碑。

致谢

TeXChronicle 起初是 MagicTeX MCP 的一个分支,作者是 Zoe Lin 及贡献者,此后围绕“人优先编辑”和章节级历史做了大量重新设计。来源见 NOTICE.md。

另外感谢 texlyre-busytex 的维护者,他们推出的 WASM TeX Live 引擎为内置编译器提供了内核。

许可证

AGPL-3.0-or-later —— 与它所基于的 texlyre-busytex 引擎的许可证保持一致。另见 NOTICE.md 和 THIRD_PARTY_NOTICES.md。

Related MCP Connectors

Related MCP Servers