<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>科研写作 on 我的博客</title><link>https://blog.5616760.com/tags/%E7%A7%91%E7%A0%94%E5%86%99%E4%BD%9C/</link><description>Recent content in 科研写作 on 我的博客</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Fri, 16 Oct 2026 08:30:00 +0800</lastBuildDate><atom:link href="https://blog.5616760.com/tags/%E7%A7%91%E7%A0%94%E5%86%99%E4%BD%9C/index.xml" rel="self" type="application/rss+xml"/><item><title>Realtime TeX：把 LaTeX 的编译等待压到 1 毫秒，边打字边渲染</title><link>https://blog.5616760.com/0049.html</link><pubDate>Fri, 16 Oct 2026 08:30:00 +0800</pubDate><guid>https://blog.5616760.com/0049.html</guid><description>&lt;p&gt;写 LaTeX 的痛，大多数人不忍心细想：&lt;strong&gt;改一个字，等好几秒；看个效果，卡得心焦。&lt;/strong&gt; 本地是漫长的全量编译，云端是 Overleaf 每次保存都要重新跑一遍整篇文档。你不是在&amp;quot;打字&amp;quot;，你是在&amp;quot;排队&amp;quot;。&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;realtime-tex&lt;/code&gt;（下称 &lt;strong&gt;rtex&lt;/strong&gt;）想解决的正是这件事。但它的思路不是把编译&amp;quot;变快&amp;quot;，而是&lt;strong&gt;重新发明了编译的粒度&lt;/strong&gt;——不再每次推倒重来地全量编译，而是让 LuaTeX 进程常驻内存，&lt;strong&gt;只重排你正在编辑的那一个段落，约 1 毫秒&lt;/strong&gt;；至于分页、全局交叉引用、参考文献这类&amp;quot;真·全局&amp;quot;的东西，交给后台完整编译静默跟上。&lt;/p&gt;&#10;&lt;p&gt;这个项目由作者 &lt;strong&gt;HenryXiaoYang&lt;/strong&gt; 打造，分两层：底层的 Rust 引擎 &lt;strong&gt;rtex&lt;/strong&gt;（MIT，&lt;strong&gt;190 star / 20 fork&lt;/strong&gt;，2026-10-07 创建），以及上层搭在它上面的 VS Code 插件 &lt;strong&gt;Realtime TeX Live Preview&lt;/strong&gt;（TypeScript，MIT，&lt;strong&gt;48 star / 6 fork&lt;/strong&gt;，2026-10-08 创建）。本文对两层一起拆解。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;数据说明&lt;/strong&gt;：本文信息主要来自两个 GitHub 仓库（默认分支均为 &lt;code&gt;main&lt;/code&gt;，作者 &lt;code&gt;HenryXiaoYang&lt;/code&gt;）的 &lt;code&gt;README.md&lt;/code&gt; 与文档：底层引擎 &lt;code&gt;realtime-tex&lt;/code&gt; 的 &lt;code&gt;docs/benchmarks.md&lt;/code&gt;（2026-10-10 实测，rtex 0.0.2，4-vCPU 云服务器）及其 &lt;code&gt;docs/live-editing.md&lt;/code&gt;；插件 &lt;code&gt;realtime-tex-vsc-plugin&lt;/code&gt; 的 &lt;code&gt;README.md&lt;/code&gt;（含全部设置项与命令清单）。数据快照时间为 &lt;strong&gt;2026-10-16&lt;/strong&gt;。该项目创建仅一周余，处于快速迭代期，具体行为请以你所用版本与仓库最新文档为准。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;img alt="图：rtex 的动静分离——左上源码、右下预览，右侧公式与文字随按键即时更新（AI 生成示意图）" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.5616760.com/img/0049-001.jpg"&gt;&lt;/p&gt;&#10;&lt;h2 id="目录"&gt;目录&#10;&lt;/h2&gt;&lt;ol&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e4%b8%80%e5%ae%83%e6%98%af%e4%bb%80%e4%b9%88" &gt;它是什么&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e4%ba%8c%e7%9c%9f%e9%97%ae%e9%a2%98%e4%b8%8d%e5%9c%a8%e7%bc%96%e8%af%91%e5%bf%ab%e5%9c%a8%e7%bc%96%e8%af%91%e7%b2%92%e5%ba%a6" &gt;真问题不在「编译快」，在「编译粒度」&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e4%b8%89%e6%9e%b6%e6%9e%84%e6%a0%b8%e5%bf%83%e5%8a%a8%e9%9d%99%e5%88%86%e7%a6%bb%e7%9a%84%e5%8f%8c%e8%a7%a6%e5%8f%91" &gt;架构核心：动静分离的双触发&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%9b%9b%e6%80%a7%e8%83%bd%e5%9f%ba%e5%87%86%e5%8f%aa%e8%b7%9f%e6%ae%b5%e8%90%bd%e8%b5%b0%e4%b8%8d%e8%b7%9f%e6%96%87%e6%a1%a3%e8%b5%b0" &gt;性能基准：只跟段落走，不跟文档走&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e4%ba%94%e9%9a%94%e7%a9%ba%e5%8f%ab%e6%9d%bf-typst-%e4%b8%8e-overleaf" &gt;隔空叫板 Typst 与 Overleaf&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%85%ad%e7%b2%be%e5%ba%a6%e9%80%90%e5%ad%97%e5%bd%a2%e5%88%b0-165536-pt-%e7%9a%84%e7%a1%ae%e5%ae%9a%e6%80%a7" &gt;精度：逐字形到 1/65536 pt 的确定性&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e4%b8%83%e5%ad%97%e4%bd%93%e6%9c%80%e5%a4%a7%e7%9a%84%e6%80%a7%e8%83%bd%e6%9d%a0%e6%9d%86" &gt;字体：最大的性能杠杆&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%85%ab%e6%8f%92%e4%bb%b6%e9%9b%b6%e9%97%a8%e6%a7%9b%e4%b8%8a%e6%89%8b%e4%b8%8e%e9%82%a3%e4%ba%9b%e8%b4%b4%e5%bf%83%e7%bb%86%e8%8a%82" &gt;插件：零门槛上手与那些贴心细节&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e4%b9%9d%e5%b7%a5%e7%a8%8b%e6%b0%94%e8%b4%a8%e7%b2%be%e7%a1%ae%e6%89%8d-live%e4%b8%8d%e8%83%bd%e8%af%81%e6%98%8e%e5%b0%b1%e8%af%9a%e5%ae%9e%e9%99%8d%e7%ba%a7" &gt;工程气质：精确才 live，不能证明就诚实降级&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%8d%81%e6%88%90%e7%86%9f%e5%ba%a6%e8%af%84%e4%bc%b0" &gt;成熟度评估&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%8d%81%e4%b8%80%e7%bb%93%e8%af%ad" &gt;结语&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%85%8d%e8%b4%a3%e5%a3%b0%e6%98%8e" &gt;免责声明&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="一它是什么"&gt;一、它是什么&#10;&lt;/h2&gt;&lt;p&gt;一句话：&lt;strong&gt;一个让 LaTeX 文案跟随你打字速度即时更新的实时排版引擎 + 配套 VS Code 预览插件。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;它的工作方式不在网页对话框里。你打开一个 LaTeX 项目，打开 &lt;code&gt;.tex&lt;/code&gt; 文件，点标题栏的预览图标（或按 &lt;code&gt;Ctrl+Alt+V&lt;/code&gt; / Mac 上 &lt;code&gt;Cmd+Alt+V&lt;/code&gt;），开始打字——预览面板里的那段文字就跟着每个按键刷新。而你手头的事，跟平常一样：改措辞、调公式、算引用编号。&lt;/p&gt;&#10;&lt;p&gt;底层之所以能做到&amp;quot;跟得上打字&amp;quot;，是因为 rtex 不是每次给你重跑一遍整篇文档，而是&lt;strong&gt;让一个已经加载好导言区（preamble）的 LuaTeX 进程常驻着&lt;/strong&gt;，你敲键盘时，它只把当前编辑的那一段重新排版，然后把新画好的那几行交给编辑器去画。&lt;/p&gt;&#10;&lt;p&gt;这个项目分化自两件事：一是作者自己写的 Rust 引擎（负责真正&amp;quot;快&amp;quot;的部分），二是上面包装的 VS Code 插件（负责&amp;quot;好用&amp;quot;的部分）。&lt;strong&gt;引擎卖的是能力，插件卖的是上手体验。&lt;/strong&gt; 下面的章节，我会对两者都展开。&lt;/p&gt;&#10;&lt;p&gt;它自划的适用边界也很清晰：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;合适&lt;/strong&gt;：需要反复微调长文档、重排版成本极高、让人对编译等待不耐烦的 LaTeX 写作场景——论文、专著、报告；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;不合适&lt;/strong&gt;：只有打印需求、完全不在乎编辑体验的场景。以及——老实说——&lt;strong&gt;对 190 star 的新引擎，别指望它能一夜替代你打磨多年的工程链&lt;/strong&gt;，这一点我会在成熟度评估里明说。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="二真问题不在编译快在编译粒度"&gt;二、真问题不在「编译快」，在「编译粒度」&#10;&lt;/h2&gt;&lt;p&gt;先给一个反直觉的立场：&lt;strong&gt;rtex 的核心创新，恰恰是它放弃了一个几乎所有工具都在追求的目标——&amp;ldquo;把全量编译变快&amp;rdquo;。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;全量编译的缺陷是结构性的，跟硬件没关系：一篇 300 页的文档，你改的是第 57 页的第 2 行，但工具得把整篇从头排到尾——分页会变、引用编号要重算、目录要更新。这种&amp;quot;牵一发而动全身&amp;quot;的工作，无论机器多快，都是在一个&lt;strong&gt;和你的修改无关&lt;/strong&gt;的尺度上白白消耗。&lt;/p&gt;&#10;&lt;p&gt;现有的替代方案也各有各的补不上的洞：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Overleaf 之类的云端&lt;/strong&gt;：每次重编译都等于把整篇文档交给服务器重跑一遍，所以你看到的不是你打字的&amp;quot;现状&amp;quot;，而是&amp;quot;上一次编译的结果&amp;quot;；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Typst&lt;/strong&gt;：它的确是增量式的，但它用的是自己的一套 markup，LaTeX 老用户的既有文档、既有宏包全部用不了——等于&lt;strong&gt;重写&lt;/strong&gt;；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;LaTeX Workshop 这类本地编译器&lt;/strong&gt;：自动监听保存并全量编译，本质仍是&amp;quot;重新造一遍完整文档&amp;quot;。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;rtex 换了个问法：&lt;strong&gt;为什么我只改了一段，却要重排整篇？&lt;/strong&gt; 于是它把&amp;quot;编译&amp;quot;这个动作拆成了两个粒度完全不同、互不干扰的部分。这就是下一节的&amp;quot;动静分离&amp;quot;。&lt;/p&gt;&#10;&lt;h2 id="三架构核心动静分离的双触发"&gt;三、架构核心：动静分离的双触发&#10;&lt;/h2&gt;&lt;p&gt;rtex 用一个常驻 LuaTeX 进程，把一个按键触发的动作拆成两条并行的通道：&lt;/p&gt;&#10;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart TD&#10; K["一次按键 keystroke"] --&gt; R["rtex（常驻 LuaTeX 进程，&lt;br/&gt;已加载导言区）"]&#10; R --&gt; L["live 通道：只重排当前段落&lt;br/&gt;≈ 1 ms，返回该段新行"]&#10; K --&gt; B["background 通道：全量编译&lt;br/&gt;分页/引用/目录/浮动体/参考文献"]&#10; L --&gt; P["编辑器直接绘制该段落（显示列表）&lt;br/&gt;无需 PDF 往返"]&#10; B --&gt; P2["新页面、交叉引用编号、&lt;br/&gt;目录、参考文献列表"]&#10; style L fill:#0A7CFF,stroke:#0A7CFF,color:#fff&#10; style B fill:#F59E0B,stroke:#F59E0B,color:#fff&#10; style P fill:#2EA44F,stroke:#2EA44F,color:#fff&lt;/pre&gt;&lt;p&gt;拆开看，每条通道各司其职：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;live 通道（局部、即时）&lt;/strong&gt;：只取你正在编辑的那一段，调用已加载好环境的 LuaTeX 重新排版那一块，约 &lt;strong&gt;1 ms&lt;/strong&gt; 内返回该段的新行，供编辑器直接绘制。它服务的正是&amp;quot;我打一个字，它动一下&amp;quot;的即时反馈；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;background 通道（全局、兜底）&lt;/strong&gt;：一段文字的版面是独立的，但把它&amp;quot;装进&amp;quot;整篇文档就绕不开全局状态——这一行会推到哪里分页、&lt;code&gt;\ref&lt;/code&gt;/&lt;code&gt;\cite&lt;/code&gt; 的编号是多少、目录里那一行是什么、浮动体跑到哪、参考文献排出来是什么样。这些由后台一次完整编译静默更新，通常在&lt;strong&gt;你停顿一两秒之后&lt;/strong&gt;才姗姗来迟——但你是无感的，因为它是&amp;quot;追着你的脚步&amp;quot;，而不是&amp;quot;挡在你前面&amp;quot;。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart LR&#10; S["你打一个字"] --&gt; LIVE["live 通道：&lt;br/&gt;该段立即重排（≈1 ms）"]&#10; S --&gt; BG["background 通道：&lt;br/&gt;全量编译补全局（1-2 s 后）"]&#10; LIVE --&gt; R["预览里：你正敲的这段&lt;br/&gt;每一个字立刻出现、排版精确"]&#10; BG --&gt; R2["预览里：分页/引用号/目录&lt;br/&gt;悄悄追上来"]&#10; style LIVE fill:#0A7CFF,stroke:#0A7CFF,color:#fff&#10; style BG fill:#F59E0B,stroke:#F59E0B,color:#fff&lt;/pre&gt;&lt;p&gt;这套&amp;quot;动静分离&amp;quot;是 rtex 对&amp;quot;1 ms&amp;quot;这个标号的真正支撑。&lt;strong&gt;它没有跟全量编译比速度，而是把&amp;quot;你关注的局部&amp;quot;从&amp;quot;整篇的全局&amp;quot;里剥离出来，让前者快，让后者不打扰你。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;值得强调的一句：&lt;strong&gt;文档长度几乎不影响这条链路的耗时&lt;/strong&gt;——因为 live 通道根本不看文档有多长，它只处理那一段。&lt;/p&gt;&#10;&lt;h2 id="四性能基准只跟段落走不跟文档走"&gt;四、性能基准：只跟段落走，不跟文档走&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;docs/benchmarks.md&lt;/code&gt; 里有份很扎实的实测（2026-10-10，rtex 0.0.2，一台 4-vCPU 云服务器，Intel Xeon 2.10 GHz，Linux + TeX Live 2026；笔记本通常更快）。每个数字是 300 次单字符编辑的中位数，间隔 2 ms，在预热会话里测得。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;打字延迟&lt;/strong&gt;（从 &lt;code&gt;apply_edit&lt;/code&gt; 到编辑器拿到 &lt;code&gt;ParagraphUpdate&lt;/code&gt;，包含显示列表解码，即除绘制外的一切）：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;段落&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;10 页文档&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;100 页文档&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;300 页文档&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1 行&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.50 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.48 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.61 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4 行&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.04 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.10 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.18 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;10–11 行&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2.39 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.94 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3 行含行内公式&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.89 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.90 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.24 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;第一行数字已经说明问题：&lt;strong&gt;300 页的文档，跟 10 页的一样快。&lt;/strong&gt; 各种单元格之间 ±20% 的差异，一部分是共享 VM 上的噪声，一部分是每本书的段落文本本身不同——那 300 页的&amp;quot;行内公式&amp;quot;段落分数式更多，仅 TeX 阶段就 0.53 ms（对比 10 页的 0.31 ms）。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;按单元类型看&lt;/strong&gt;（同一本书只含每种单元）：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;单元&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;10 页&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;100 页&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;TeX 阶段(100页)&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;节标题 &lt;code&gt;\section&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.80 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.95 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.49 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;含 display 公式段落&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.38 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.65 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.79 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;含脚注段落&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.90 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.73 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.99 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;列表（itemize，3 项）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.68 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.53 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.96 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;图（图像 + 题注）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.74 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.68 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.07 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;表格（booktabs + 题注）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.52 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.70 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.98 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;这些环境的大部分时间花在 LaTeX 自己的机制上（&lt;code&gt;\list&lt;/code&gt;、&lt;code&gt;\halign&lt;/code&gt;、&lt;code&gt;\@startsection&lt;/code&gt;、&lt;code&gt;\includegraphics&lt;/code&gt;、计数器）。每种单元的 P95 都落在中位数 1.5 倍以内——只有 100 页书里那个脚注段落除外（4.3 ms）。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;时间都去哪了&lt;/strong&gt;（300 页书，单行段落，总 0.61 ms）：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;阶段&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;耗时&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TeX：恢复上下文 + 排版该 box&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.16 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;遍历 box + 编码显示列表&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.07 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;其他：两次进程交接、线程唤醒、解码、会话&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.38 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;注意最后那行——&lt;strong&gt;固定成本占了 0.4 ms，全是进程和线程在按键间隙睡着后又被叫醒的花销。&lt;/strong&gt; 这正是为什么&amp;quot;连续快速编辑&amp;quot;会比&amp;quot;零敲碎打&amp;quot;快 2-3 倍（连续击键时线程保持温热，单行可压到 0.23–0.27 ms，4 行 0.7–1.0 ms）。在笔记本上（上下文切换更快），这部分会更小。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;后台通道（排版布局）&lt;/strong&gt;：一个 pass 是一次带 capture 包的 LuaLaTeX 运行。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;文档&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;页数&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;live 引擎就绪&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;首次布局&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;后续每次布局&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;纯净导出&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TFM 字体&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;10&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.6 s&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.5 s（2 pass）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.5 s&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.4 s&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TFM 字体&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;100&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.7 s&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;7.2 s（2 pass）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3.1 s&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2.5 s&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TFM 字体&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;300&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.6 s&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;19.4 s（2 pass）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;9.4 s&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;5.1 s&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;OpenType (node mode)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;100&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.2 s&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;15.2 s（2 pass）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;6.9 s&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;10.9 s&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;长文档下，capture 包是主要开销&lt;/strong&gt;——它要为每页写一份显示列表（JSON），约 &lt;strong&gt;120 KB/页&lt;/strong&gt;，100 页书就是 &lt;strong&gt;14 MB&lt;/strong&gt;。实测 100 页书两次 LuaLaTeX 运行：不带 capture 包 1.25 s，带上直接变 &lt;strong&gt;3.3 s&lt;/strong&gt;。但注意：&lt;strong&gt;这些 pass 只在&amp;quot;你停止打字之后&amp;quot;才发生，live 更新全程不受影响。&lt;/strong&gt; 作者自己也指认了最明显的下一步优化：改成二进制写页列表、且只写变动过的页面。&lt;/p&gt;&#10;&lt;h2 id="五隔空叫板-typst-与-overleaf"&gt;五、隔空叫板 Typst 与 Overleaf&#10;&lt;/h2&gt;&lt;p&gt;同一个文本，三种工具在同一台机器上测（A4、11 pt、每段约 5 行，中间段落编辑 30 次）：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;页数&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;rtex（每次编辑，P95）&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Typst 0.15.1 &lt;code&gt;watch&lt;/code&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Typst 单页导出&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;全量 pdfLaTeX&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;全量 LuaLaTeX&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;10&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.6 ms (2.4)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;18 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;9 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.12 s&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.52 s&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;100&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.3 ms (1.7)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;146 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;47 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.25 s&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.91 s&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;300&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.3 ms (1.7)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;414 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;121 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.51 s&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.69 s&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;这个对比必须说明&lt;strong&gt;不完全是同一个量纲&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;rtex 的数字是&lt;strong&gt;段落本身&lt;/strong&gt;；分页、页断、交叉引用由下一轮后台 pass 在几秒内追平（见上节）;&lt;/li&gt;&#10;&lt;li&gt;Typst 和全量 LaTeX 每次产出的是&lt;strong&gt;完整一致的文档&lt;/strong&gt;，所以耗时会随文档长度增长；&lt;/li&gt;&#10;&lt;li&gt;全量 LuaLaTeX（0.52–1.69 s）就是 &lt;strong&gt;Overleaf 每次 recompile 的下限&lt;/strong&gt;——它每次都要重跑整篇，何况在线服务还要额外加上排队、沙箱、下载和渲染的开销。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;所以这组数字真正说明的是：&lt;strong&gt;你按下按键后，要等多久才看到&amp;quot;你打的那段文字被排版出来&amp;quot;。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;rtex：无论文档多长，&lt;strong&gt;一两个毫秒&lt;/strong&gt;；&lt;/li&gt;&#10;&lt;li&gt;Typst：&lt;strong&gt;几十到几百毫秒&lt;/strong&gt;，且随文档变长而上升；&lt;/li&gt;&#10;&lt;li&gt;全量重编译：&lt;strong&gt;一秒甚至更多&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;再看三者各自的选择（README 里那张表）：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;rtex&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Typst&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Overleaf&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;语言&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;只支持 LuaLaTeX，&lt;strong&gt;直接沿用既有文档与宏包&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;自己的 markup，LaTeX 文档得重写&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;LaTeX（pdfLaTeX/XeLaTeX/LuaLaTeX）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;输出&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;跟 LuaLaTeX 完全一致&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Typst 自己的排版结果&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;真实的 LaTeX 输出&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;打字时&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;段落立即精确，布局几秒后追上&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;每次编译全文档一致&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;每次 recompile 后全文档一致&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;协作&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;无，纯本地&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Web 应用，实时协作&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;实时协作、评论、历史、模板&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;环境&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;本机 TeX Live + Rust（插件会自动装）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;单一声明状态，或浏览器&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;浏览器&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;一句话总结各自的取舍：&lt;strong&gt;Typst 放弃&amp;quot;LaTeX 兼容&amp;quot;，换来&amp;quot;天生增量 + 协作&amp;quot;；Overleaf 放弃&amp;quot;即时反馈&amp;quot;，换来&amp;quot;零配置 + 协作&amp;quot;；rtex 放弃&amp;quot;协作&amp;quot;，换来&amp;quot;LaTeX 兼容 + 即时反馈&amp;quot;。&lt;/strong&gt; 三条路都通向&amp;quot;快&amp;quot;，只是各放弃了不同的东西。&lt;/p&gt;&#10;&lt;h2 id="六精度逐字形到-165536-pt-的确定性"&gt;六、精度：逐字形到 1/65536 pt 的确定性&#10;&lt;/h2&gt;&lt;p&gt;这是 rtex 最&amp;quot;较真&amp;quot;、也最容易被标题党忽略的一点。&lt;/p&gt;&#10;&lt;p&gt;很多&amp;quot;实时预览&amp;quot;插件为了快，会牺牲精度——预览给你看个大概，最终输出和真正编译结果不一样。rtex 反其道而为：&lt;strong&gt;预览和最终产物必须完全一致。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;它用的是未修改的、来自 TeX Live 的&lt;strong&gt;原生 LuaTeX&lt;/strong&gt;，所以：&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;结果就是 LuaLaTeX 产生的结果：同样的断行，同样的字形，同样精确到 1/65536 pt 的位置。导出的 PDF 与正常 LuaLaTeX 构建逐字节一致。&lt;/strong&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;1/65536 pt 这个分母（TeX 的 &lt;code&gt;sp&lt;/code&gt; 单位），意味着它不是&amp;quot;看起来像&amp;quot;，而是&lt;strong&gt;数值上等价&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;那么预览面板是怎么画的？README 里写得很清楚——&lt;strong&gt;编辑器直接绘制 rtex 输出的显示列表（display list），而不是先出一张 PDF 再显示&lt;/strong&gt;，所以一次按键只需重绘一个段落，&lt;strong&gt;不需要 PDF 往返&lt;/strong&gt;。它能画这些东西：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;按字形索引（glyph index）绘制的 &lt;strong&gt;OpenType / TrueType&lt;/strong&gt; 字体；&lt;/li&gt;&#10;&lt;li&gt;通过 TeX 的 &lt;code&gt;pdftex.map&lt;/code&gt; 找到的 &lt;strong&gt;Type1&lt;/strong&gt; 字体（如 Computer Modern 数学字体和 &lt;code&gt;lmodern&lt;/code&gt;）；&lt;/li&gt;&#10;&lt;li&gt;颜色、规则线、PNG/JPEG/PDF 图像，以及 &lt;code&gt;graphicx&lt;/code&gt; 的缩放。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;但也有一些页面&lt;strong&gt;没办法只用显示列表画出来&lt;/strong&gt;——比如 &lt;strong&gt;TikZ 绘图&lt;/strong&gt;或 &lt;code&gt;\special&lt;/code&gt;。这类页面会&lt;strong&gt;从后台的 PDF 里呈现出来&lt;/strong&gt;，并打上一个小 &lt;strong&gt;&amp;ldquo;from PDF&amp;rdquo;&lt;/strong&gt; 标记；不过，你对这些页面上的编辑，仍然会以 live 的方式叠加显示在其上。&lt;/p&gt;&#10;&lt;p&gt;这就是&amp;quot;动静分离&amp;quot;在绘制层面的一次延续：&lt;strong&gt;能精确画的，实时精确画；不能精确画的，明确告诉你它退回用 PDF 了。&lt;/strong&gt; 绝不装作&amp;quot;我都能实时渲染，且都一样精确&amp;quot;。&lt;/p&gt;&#10;&lt;h2 id="七字体最大的性能杠杆"&gt;七、字体：最大的性能杠杆&#10;&lt;/h2&gt;&lt;p&gt;README 里有个相当反直觉的结论：&lt;strong&gt;字体设置，比文档长短更能决定 live 更新的快慢。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;同一本 300 页书，三种字体方案：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;字体方案&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;1 行&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;4 行&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;11 行&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;行内公式&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;[T1]{fontenc}&lt;/code&gt; + &lt;code&gt;lmodern&lt;/code&gt;（TFM）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.61 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.18 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.94 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.24 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;fontspec，TeX Gyre Pagella，&lt;code&gt;Renderer=Basic&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.61 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.27 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2.29 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.05 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;fontspec，TeX Gyre Pagella，&lt;strong&gt;默认（node mode）&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.85 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;3.70 ms&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;9.17 ms&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2.47 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;差一个&amp;quot;默认 node mode&amp;quot;，11 行段落直接从 1.94 ms 暴涨到 9.17 ms——几乎 5 倍。&lt;/strong&gt; 原因是：node mode 下 &lt;code&gt;luaotfload&lt;/code&gt; 每次编译都在 Lua 里重新做 OpenType 整形（shaping）；对那个 11 行段落，TeX 阶段就花了 8.0 ms（对比 TFM 的 0.9 ms）。&lt;/p&gt;&#10;&lt;p&gt;而 &lt;code&gt;Renderer=Basic&lt;/code&gt; 用引擎自带的连字与字距表，&lt;strong&gt;跟 TFM 一样快&lt;/strong&gt;。&lt;code&gt;Renderer=HarfBuzz&lt;/code&gt;（HarfBuzz 模式）比 node mode 还慢。&lt;/p&gt;&#10;&lt;p&gt;所以如果你想要拉丁文本最快的更新，官方建议直白到一句口诀：&lt;strong&gt;用 &lt;code&gt;Renderer=Basic&lt;/code&gt; 或 TFM 字体。&lt;/strong&gt; 这条对中文/东亚文本的适用性仍需按你的文档实测——但&amp;quot;打字体验可以是一根杠杆&amp;quot;这个结论本身，值得每个 LaTeX 用户记住：&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;你的实时预览有多跟手，很大程度上取决于你用什么字体加载方式，而不是你写了多少页。&lt;/strong&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h2 id="八插件零门槛上手与那些贴心细节"&gt;八、插件：零门槛上手与那些贴心细节&#10;&lt;/h2&gt;&lt;p&gt;底层引擎再快，如果装起来劝退，也是白搭。&lt;code&gt;Realtime TeX Live Preview&lt;/code&gt; 在这方面做得很细。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;一键安装与引导。&lt;/strong&gt; 首次使用，插件会自动检测缺什么：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;rtex 没装&lt;/strong&gt;：点 &lt;strong&gt;Install rtex&lt;/strong&gt;，它会下载你这平台最新 release 的预编译引擎（几 MB），并校验其 &lt;strong&gt;SHA-256&lt;/strong&gt;。想自己构建？&lt;strong&gt;Build from Source&lt;/strong&gt; 会克隆 &lt;code&gt;realtime-tex&lt;/code&gt; 的 &lt;code&gt;main&lt;/code&gt; 用 Rust 的 &lt;code&gt;cargo&lt;/code&gt; 编译（几分钟；Windows 上还需要 Git for Windows 和 rustup 要求的 Visual Studio C++ Build Tools）。&lt;code&gt;realtimeTex.installFrom&lt;/code&gt; 设置决定 &lt;strong&gt;Install rtex&lt;/strong&gt; 走哪条路；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;没找到 LuaLaTeX&lt;/strong&gt;：让你选 TeX Live 的 &lt;code&gt;bin&lt;/code&gt; 目录，或者让插件帮你装一个&lt;strong&gt;精简版 TeX Live 2026&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;命令面板里的 &lt;strong&gt;Realtime TeX: Check Setup&lt;/strong&gt; 会逐项检查并给出修复。插件还会自动维护它装的 rtex（下载版更新到最新 release，源码版拉取 &lt;code&gt;main&lt;/code&gt; 重新编译），每天检查一次并弹 &lt;strong&gt;Update Now&lt;/strong&gt;；&lt;strong&gt;Realtime TeX: Update rtex Engine&lt;/strong&gt; 可随时手动更新并重启引擎。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;主文件识别。&lt;/strong&gt; 它会按顺序自动找主文件：&lt;code&gt;% !TEX root = main.tex&lt;/code&gt; 注释 → 含 &lt;code&gt;\documentclass&lt;/code&gt; 的文件 → &lt;code&gt;\input&lt;/code&gt; 或 &lt;code&gt;\include&lt;/code&gt; 当前文件的文件。有歧义就问你选，结果存入 &lt;code&gt;realtimeTex.mainFile&lt;/code&gt;。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;沉浸式写作的功能矩阵&lt;/strong&gt;（这是插件层真正让体验&amp;quot;丝滑&amp;quot;的部分）：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;功能&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;说明&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;状态胶囊（Status pill）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;「Live · 0.8 ms」&lt;/strong&gt; 表示该段以这个速度被重排；&lt;strong&gt;「Updating layout…」&lt;/strong&gt; 表示正做全量编译补页码/引用/浮动体；&lt;strong&gt;「Up to date」&lt;/strong&gt; 表示全部一致；&lt;strong&gt;「N errors」&lt;/strong&gt; 打开问题面板&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;实时标记（live markers）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;行号旁的竖条：&lt;strong&gt;绿色实线&lt;/strong&gt; = 随打字实时更新；&lt;strong&gt;琥珀色虚线&lt;/strong&gt; = 等待全量编译（导言区、TikZ 等）。悬停能看到&amp;quot;为什么它退到全量编译了&amp;quot;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;光标跟随&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;预览自动滚动到你正在编辑的段落，&lt;code&gt;Ctrl+Alt+J&lt;/code&gt; 随时跳转&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;反向跳转&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;在预览里&lt;strong&gt;双击&lt;/strong&gt;（或 &lt;code&gt;Ctrl/Cmd+单击&lt;/code&gt;）某个段落，直达源码&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;缩放&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;Ctrl&lt;/code&gt; + 鼠标滚轮，&lt;code&gt;Ctrl&lt;/code&gt; + &lt;code&gt;=&lt;/code&gt; / &lt;code&gt;−&lt;/code&gt; / &lt;code&gt;0&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;导出 PDF&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;Ctrl+Alt+E&lt;/code&gt;，写出到主文件旁的 &lt;code&gt;main.pdf&lt;/code&gt;，结果与纯净 LuaLaTeX 构建&lt;strong&gt;完全一致&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;错误诊断&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;LaTeX 错误与警告出现在 &lt;strong&gt;Problems 面板&lt;/strong&gt;，源码里以&lt;strong&gt;波浪线&lt;/strong&gt;标出&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;哪些内容会随按键即时更新？&lt;/strong&gt; 正文、行内与 display 公式（&lt;code&gt;align&lt;/code&gt; 等）、&lt;code&gt;\ref&lt;/code&gt;/&lt;code&gt;\eqref&lt;/code&gt;/&lt;code&gt;\cite&lt;/code&gt;（用上一次全量编译的编号）、列表、定理、图与表格内容、标题、脚注标记、你自己的宏与环境、以及绝大多数宏包。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;哪些会等下一次全量编译（通常 1-2 秒后）？&lt;/strong&gt; 导言区改动、TikZ、移动后的浮动体、页面底部的脚注文字、新的分页。状态胶囊会提示此刻正处于哪种状态。&lt;/p&gt;&#10;&lt;h2 id="九工程气质精确才-live不能证明就诚实降级"&gt;九、工程气质：精确才 live，不能证明就诚实降级&#10;&lt;/h2&gt;&lt;p&gt;这一节我想单独讲讲它作为&amp;quot;工程&amp;quot;的态度——因为这可能是它最值得其他工具学习的地方。&lt;/p&gt;&#10;&lt;p&gt;rtex 设计里有一条近乎偏执的约束，README 反复强调：&lt;strong&gt;它绝不会推送一个它无法证明&amp;quot;精确等于完整 LuaLaTeX 输出&amp;quot;的 live 结果。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;具体在引擎侧的体现是 &lt;code&gt;realtimeTex.engine.eligibility&lt;/code&gt; 设置（默认 &lt;code&gt;probe&lt;/code&gt;）：有两种策略来决定&amp;quot;哪些部分可以 live 更新&amp;quot;——&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;probe&lt;/code&gt;（默认）&lt;/strong&gt;：把一次 live 结果与上一次完整编译反复比对，验证没问题才采用。这是&amp;quot;实证派&amp;quot;；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;allowlist&lt;/code&gt;&lt;/strong&gt;：只允许已知安全的命令参与 live，其余全部交给全量编译。这是&amp;quot;保守派&amp;quot;。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;无论哪种，底层逻辑一致：&lt;strong&gt;当 rtex 无法证明某个 live 结果是精确的，它会直接告诉你为什么，然后让那个段落等到下一次后台 pass 再出现。&lt;/strong&gt; 它宁可让你多等 1 秒，也绝不多给你一个&amp;quot;看似对、实则错&amp;quot;的瞬时结果。&lt;/p&gt;&#10;&lt;p&gt;配套的还有一次 &lt;code&gt;updateCheck&lt;/code&gt; 之外的稳健性设计——&lt;code&gt;fastBudgetMs&lt;/code&gt;（默认 50 ms：某部分实时重排如果连续 3 次超过这个预算，就改用全量编译兜底）和 &lt;code&gt;pictureCache&lt;/code&gt;（默认 true：复用上一次全量编译里未改动的 TikZ 图片，实测能把一个 111 页 120 张图的文档的 pass 从 45 s 缩到 18 s）。&lt;/p&gt;&#10;&lt;p&gt;再看一眼调试侧。&lt;code&gt;realtimeTex.debug.enabled&lt;/code&gt;（默认 false）开启后，只要 live 引擎挂起或崩溃，rtex 就会存下一整份调试包（源码、上下文、trace、TeX 日志），并在 &lt;code&gt;requests.log&lt;/code&gt; 里记下每次 live 编译；&lt;strong&gt;Open Debug Folder&lt;/strong&gt; 直接打开它们。&lt;/p&gt;&#10;&lt;p&gt;这套组合给的信号很一致：&lt;strong&gt;它把&amp;quot;可验证性&amp;quot;和&amp;quot;诚实降级&amp;quot;当成了第一性，把&amp;quot;快&amp;quot;当成了结果，而不是目标。&lt;/strong&gt; 在一个人人都标榜&amp;quot;AI 极速渲染&amp;quot;的赛道里，愿意主动给&amp;quot;什么是不能 live 的&amp;quot;划一条边界，其实比报一个更大胆的毫秒数更难得。&lt;/p&gt;&#10;&lt;h2 id="十成熟度评估"&gt;十、成熟度评估&#10;&lt;/h2&gt;&lt;p&gt;客观看看这个项目：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;维度&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;现状&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;引擎&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;rtex&lt;/strong&gt;，Rust，MIT，&lt;strong&gt;190 star / 20 fork&lt;/strong&gt;，2026-10-07 创建&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;插件&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;realtime-tex-vsc-plugin&lt;/strong&gt;，TypeScript，MIT，&lt;strong&gt;48 star / 6 fork&lt;/strong&gt;，2026-10-08 创建&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;许可&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;两层均 MIT，&lt;strong&gt;对商用/二次开发极友好&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;性能数据&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;有独立 &lt;code&gt;docs/benchmarks.md&lt;/code&gt;，基准可复现（&lt;code&gt;rtex bench&lt;/code&gt;，且与 TUG 2026 论文基准联动），有精度（1/65536 pt）与字体三方案的实测&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;测试&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;插件带单元测试（&lt;code&gt;node:test&lt;/code&gt;）、typecheck、以及驱动真实 VS Code 的 E2E 套件（需要构建好的 rtex + TeX Live）；引擎有 &lt;code&gt;rtex bench&lt;/code&gt; 内置的 CI 门槛检查&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;工程诚意&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;边界清晰（精确才 live）、分级降级（probe/allowlist、fastBudgetMs、pictureCache）、完整调试包、undo 式诚实——&lt;strong&gt;不像新人作品&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;成熟度&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;极早期&lt;/strong&gt;：创建一周余，两层仓库体量均小，需观察后续迭代与维护&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;已经验证过的&lt;/strong&gt;：动态分离架构成立；live 通道 300 页与 10 页同速；预览与最终产物逐字形一致（1/65536 pt）；插件能零门槛自动装引擎与精简 TeX Live；错误/警告能进 Problems 面板。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;仍待观察 / 值得注意的边界&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;项目太年轻&lt;/strong&gt;：创建一周余、star 少。它的&amp;quot;只影响文档复杂度，不影响文档长度&amp;quot;是优雅的，但到底能不能接住你那篇有几百个自定义宏 API、几十个宏包、复杂的 &lt;code&gt;cls&lt;/code&gt; 的工程文档，&lt;strong&gt;需要你自己拿真实工程试&lt;/strong&gt;；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;只支持 LuaLaTeX&lt;/strong&gt;：XeLaTeX / pdfLaTeX 的老工程无法直接受益；这是精度的前提，也是一个明确的适用范围；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;依赖本机环境&lt;/strong&gt;：需要 TeX Live（至少含 LuaLaTeX）与 Rust（若源码构建）。插件的&amp;quot;一键装精简 TeX Live&amp;quot;缓解了，但完整 TeX Live 仍是硬前提；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;无协作&lt;/strong&gt;：纯本地、单机。需要多人协同的场合，它和 Overleaf 不在同一战场；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;capture 包仍是重头&lt;/strong&gt;：后台 pass 里 120 KB/页的 JSON 显示列表、14 MB 的 100 页书，作者已点名是下一步优化对象；文案规模极大时后台追平会更重；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;中文/东亚字体需实测&lt;/strong&gt;：README 给出的&amp;quot;最优&amp;quot;建议是针对拉丁（TFM / Renderer=Basic）。中文文档默认走 &lt;code&gt;ctex&lt;/code&gt; / &lt;code&gt;fontspec&lt;/code&gt;，那个&amp;quot;node mode 慢 5 倍&amp;quot;的坑很可能会踩到，&lt;strong&gt;建议你就自己的中英混排工程跑一次 &lt;code&gt;Realtime TeX: Check Setup&lt;/code&gt; + &lt;code&gt;rtex probe&lt;/code&gt;&lt;/strong&gt;，确认 lean 后再上。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;适合谁用&lt;/strong&gt;：已经用 LuaLaTeX 写长文、被&amp;quot;改一个字等几秒&amp;quot;折磨、但手里那套工程链（宏包、自定义环境、模板）不想重写的科研党与写作者；愿意为&amp;quot;即时反馈&amp;quot;把导言区、字体加载方式稍微调优的人；以及想研究&amp;quot;实时排版引擎怎么做粒度切分&amp;quot;的开发者——它的动静分离 + 逐字形确定性的组合，是很值得抄的思路。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;不太适合&lt;/strong&gt;：XeLaTeX / pdfLaTeX 老工程；需要多人实时协作的团队；改造意愿低、只想要&amp;quot;一键装完就能跑&amp;quot;的纯尝鲜用户（它确实能装，但上限取决于你的文档）。&lt;/p&gt;&#10;&lt;h2 id="十一结语"&gt;十一、结语&#10;&lt;/h2&gt;&lt;p&gt;把 rtex 拆开看完，我想说它最值得记住的，不是&amp;quot;1 ms&amp;quot;这个能上标题的数字，而是&lt;strong&gt;它用另一个角度重新定义了这个问题的答案&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;它没有试图把全量编译变快&lt;/strong&gt;，而是把&amp;quot;你改的局部&amp;quot;从&amp;quot;整篇的全局&amp;quot;里拆出来——&lt;strong&gt;编译的粒度，比编译的速度更本质&lt;/strong&gt;；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;它用&amp;quot;可证明的精确&amp;quot;换取&amp;quot;可接受的快&amp;quot;&lt;/strong&gt;，预览与最终产物逐字形一致（1/65536 pt），不给你一个&amp;quot;看起来对、实则错&amp;quot;的瞬时结果——&lt;strong&gt;诚实，在这里是一种性能指标&lt;/strong&gt;；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;它清清楚楚地告诉你哪里降级了&lt;/strong&gt;（TikZ 退回 from PDF、probe 不通过就等后台 pass），而不是装作无所不能——&lt;strong&gt;边界，是工程成熟度的一部分&lt;/strong&gt;；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;它甚至点出了那个最大的杠杆&lt;/strong&gt;：换一种字体加载方式，比买一台更强的电脑更能提升你的打字流畅度。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;但我也得把丑话说在前面：&lt;strong&gt;这是一个创建才一周余的新引擎，48/190 star，MIT，很吸引人，但距离&amp;quot;拿你几十万字、几百个宏的工程文档去信任它&amp;quot;还有一段路。&lt;/strong&gt; 你完全可以从一个小的 test book 试起——正如它 README 里自带的 &lt;code&gt;gen-book&lt;/code&gt; 和 &lt;code&gt;verify&lt;/code&gt;——先确认它能精确接管你的文档，再让它跟着你一起打长文。&lt;/p&gt;&#10;&lt;p&gt;在&amp;quot;AI 生成速度&amp;quot;被反复吹捧的当下，一个愿意谈&amp;quot;1/65536 pt 精度&amp;quot;、谈&amp;quot;我证明不了就不 live&amp;quot;、谈&amp;quot;你不是要更快，你是要跟上你打字&amp;quot;的项目，本身就值得被记住。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;引用与延伸：《Real-Time LuaTeX: Recompiling Large Documents in 1 ms》（Clemens Lode，TUGboat 2026）是该设计的理论来源，其基准也随 rtex 一起分发、可复现。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="免责声明"&gt;免责声明&#10;&lt;/h2&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;本文为个人学习性质的项目文档解读，不构成对该软件的推荐、担保或安全评估。rtex 与 Realtime TeX Live Preview 均为 &lt;strong&gt;MIT 许可&lt;/strong&gt;的开源项目，处于快速迭代期（截至快照 &lt;strong&gt;2026-10-16&lt;/strong&gt;，两层仓库均创建一周余）；文中性能与精度数据来自项目自身的 &lt;code&gt;docs/benchmarks.md&lt;/code&gt;（2026-10-10 实测，rtex 0.0.2，特定 VM），不完全代表你的实机表现，&lt;strong&gt;强烈建议以你所用版本 + 真实工程实测为准&lt;/strong&gt;。特别提示：① 该项目&lt;strong&gt;仅支持 LuaLaTeX&lt;/strong&gt;，XeLaTeX/pdfLaTeX 与依赖其的既有工程无法直接受益；② 使用全程&lt;strong&gt;依赖本机 TeX Live 与 Rust&lt;/strong&gt;（源码构建时），插件可代装精简 TeX Live，但完整环境仍是硬前提；③ 中文/东亚字体的实时性能与 README 针对拉丁文本给出的最优建议可能有出入，&lt;strong&gt;请先对你自己中英混排的文档跑一次 &lt;code&gt;Check Setup&lt;/code&gt; 与 &lt;code&gt;rtex probe&lt;/code&gt; 再决定&lt;/strong&gt;。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;</description></item></channel></rss>