返回资讯中心
外部精选
软件工程
#开发者实时流

PhiTeX 发布:实时增量编译的 TeX 引擎,输出与 pdfLaTeX 逐字节一致

来源标题:PhiTeX: Fast Live Incremental TeX Engine

PhiTeX 是一款实时增量 TeX 编译器,编辑后仅重建受影响部分,60 页论文编译约 5 毫秒,输出与 pdfLaTeX、XeLaTeX 逐字节一致。它支持 Overleaf、VS Code、Neovim、Emacs 及任意 LSP 编辑器,可完全离线运行,TeX Live 为可选依赖。单个构建替代 latexmk,内置 BibTeX、biber 和 makeindex,并支持多线程与 SyncTeX。

Hacker News 最新qifzer2026/11/15 · 今天11 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

快速、现代的 TeX 编译器。 你一边打字,PDF 一边重建,结果与 {pdf,Xe,Lua}LaTeX 产出的完全一致, 就在你已经在用的编辑器里。 phitex.org · 开始使用 · 编辑器 · 工作原理

以毫秒级响应编辑 改一个词,只重建受它影响的部分。一篇 60 页的论文 ⟨~5 ms⟩;一篇学位论文快得像一封信。

与 {pdf,Xe}LaTeX 完全一致 无论是干净构建还是经过上千次编辑之后,都逐字节一致。变化的只有等待时间。

任何编辑器,包括 Overleaf Overleaf、VS Code、Neovim、Emacs、任何 LSP 编辑器,或者一个浏览器标签页。双击页面即可跳到源码。

私密且离线 你的论文永远不会离开你的机器或浏览器。如果安装了 TeX Live,网络只用于检查更新,而且只在你开启该功能时才会使用。

TeX Live 可选 没有它时,论文用到的每个宏包都会在首次使用时下载一次,并保留下来。

多线程 段落、页面和 PDF 通过 -j N 并行构建(v1.0 除非指定,否则单线程运行),在任何线程数下结果都相同。

此外:一次构建完成 latexmk 所做的工作,BibTeX、biber 和 makeindex 都在其中;错误会指向具体行;使用 --synctex 时,SyncTeX 可与你的 PDF 阅读器配合,像 pdflatex 一样双向跳转。

curl -fsSL https://phitex.org/install.sh | sh phitex watch paper.tex

在 Windows 上,使用 PowerShell:

irm https://phitex.org/install.ps1 | iex phitex watch paper.tex

phitex watch 会构建你的文档,在浏览器中实时打开,并在每次保存时重建。双击页面即可跳到源码。

一次构建,从头到尾。\ref、\cite、目录和索引在一次运行中全部确定:不需要“再运行一次”,也不需要 latexmk。BibTeX、biber 和 makeindex 在构建过程内部运行,并且只在它们的输入发生变化时才再次运行。glossaries 宏包的列表按 makeglossaries 的方式生成(在存在 STEM.ist 时,对 STEM.glo 和 STEM.acn 使用 STEM.ist 样式调用 makeindex)。

phitex build paper.tex # 生成最终 PDF,类似 latexmk -pdf phitex watch paper.tex # 在浏览器中实时显示,保存时重建 phitex --compat=pdflatex paper.tex # 单次运行,与 pdflatex 完全一致 phitex upgrade # 升级到最新版本,会先询问 [Y/n](-y:不再询问);phitex news 会说明带来了哪些变化

在你写作的地方都能用 Overleaf 扩展是非官方的:它并非由 Overleaf 制作,也未获其认可。Overleaf 自带的 Recompile 仍然是你提交的 PDF。

“完全一致”指的是相同的字节,而不是“看起来一样”。PhiTeX 写出的每个 PDF 都会与 pdfTeX 1.40.29(TeX Live 2026)的输出逐字节比较,包括对象编号,作业读回的文件也同样比较:.aux、目录、参考文献。一次编辑产生的 PDF 始终等同于完整重建会产生的 PDF。

每次变更都会检查:amsldoc、LaTeX 手册,在 1、8 和 16 线程下与 pdflatex 逐字节一致。

TeX 编译器每次都会从头读取你的文档。PhiTeX 在每个段落末尾将其切开,每一块(一个段落、一个公式显示、一个表格、一张图片)都是一个节点,各自对自己的文本运行 TeX,并在你的所有核心上同时进行。一次编辑只会重跑你改动的那一块,以及它之后读取了值发生变化的那些块;输出相同的页面会被保留。文档写出并读回的内容(.aux、.toc、.bbl、.ind)会逐条目跟踪,BibTeX、biber 和 makeindex 都在构建内部,因此引用能在一次构建中确定,就像 latexmk 所做的那样。

面向工程师:PhiTeX 是一个用 Rust 编写的 TeX 引擎,基于增量式、并行的 def-use 图。每个节点记录它读取了什么(宏和寄存器定义、计数器、字体,按名称和位置)以及它定义了什么。节点在预测输入上并行地投机运行;当一个定义提交时,只有读取了变化值的节点才会重跑。提交按位置范围分区,没有全局锁,也没有合并步骤,因此唯一的串行工作就是 TeX 真正的依赖链。断行、分页、输出例程和 PDF 写入器都是该图之上的层,而干净构建就是从零开始的一次编辑:只有一条代码路径,在每个线程数下都与 pdfTeX 1.40.29 逐字节比较。

PhiTeX 处于 alpha 阶段:更新会很频繁。有哪些变化、哪些还不能用,见 CHANGELOG.md。

cargo build --release -p phitex-cli # target/release/phitex cargo test

贡献 欢迎贡献:bug 报告、会出错的文档、修复以及新的编辑器集成。

如果 PhiTeX 为你节省了等待时间,点个 star 能帮别人发现它。

许可证 仅 GNU Affero 通用公共许可证 v3.0(AGPL-3.0-only);见 LICENSE。

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →