Sublime Text的构建系统仅支持一次性命令执行,无法监听文件变化或自动刷新预览,必须依赖LaTeXTools+Skim或MarkdownPreview+LiveReload等协同组件实现真正实时预览。

Sublime Text 本身不内置实时预览编译系统,所谓“实时预览”其实是靠组合多个组件实现的:一个构建系统负责编译(比如 pdflatex 或 markdown),一个监听机制触发重编译,再加一个外部查看器(如 Skim 或浏览器)自动刷新。直接配单个构建系统是做不到“边打字边看结果”的。
为什么不能只靠 build_system 实现实时预览
Sublime Text 的构建系统(.sublime-build 文件)本质是一次性命令执行:保存 → 触发构建 → 执行命令 → 显示输出。它没有持续监听文件变化的能力,也不管理预览窗口的刷新逻辑。你按 Ctrl+B 它就跑一次,不会自动重复。
- 常见错误现象:
build_system配了pdflatex,但改完源码还得手动按快捷键,PDF 不自动更新 - 根本原因:构建系统无事件循环,不挂钩
on_post_save或文件监视器 - 性能影响:如果强行在构建里加轮询或 sleep,会卡死 UI,且不可靠
LaTeXTools + Skim 是 macOS 上最稳的实时预览链路
这不是“配置一个构建系统”,而是三件套协同:LaTeXTools 提供构建定义和前向同步支持,Skim 开启监听模式,系统级文件变更通知自动触发 PDF 刷新。
- 关键配置项必须对齐:
-
"viewer": "skim"(在LaTeXTools.sublime-settings中) -
"forward_sync": true(启用光标跳转) Skim → Preferences → Sync → Check "Check for file changes"
-
- 容易踩的坑:
-
skim_path路径写错(比如漏掉/Applications/Skim.app后缀)→ 构建成功但无法唤起 Skim - PDF 文件被其他程序(如 Preview)独占 → Skim 收不到文件变更通知,静默失败
- LaTeX 主文件名不是
main.tex且没设"tex_root"→ 构建时找不到入口,报! LaTeX Error: File `xxx.sty' not found
-
MarkdownPreview + LiveReload 实现真正的“保存即刷新”
这个组合才是最接近“实时预览”的体验:保存 Markdown 文件 → on_post_save 监听器触发 markdown_preview 命令 → 生成 HTML → 浏览器通过 LiveReload 插件收到 ws 消息并刷新。
- 必须开启的配置:
- 在
MarkdownPreview.sublime-settings中确保"enable_autoreload": true - 用
Command+Shift+P运行LiveReload: Enable/disable plug-ins→ 选Simple Reload - 首次预览必须先手动运行一次
Markdown Preview: Preview in Browser,否则 LiveReload 不激活
- 在
- 中文路径/空格问题:
- 如果文件路径含中文或空格,
markdown_preview可能生成错误的file://URL → 浏览器打不开 → 改用"parser": "github"或"gitlab"避开本地路径解析 - 更彻底的解法:把项目放在
/Users/xxx/docs这类纯 ASCII 路径下
- 如果文件路径含中文或空格,
真正难的不是配哪一行 JSON,而是理清谁负责监听、谁负责构建、谁负责刷新——这三个角色一旦错位(比如想让构建系统去 reload 浏览器),就会陷入无限调试。Skim 和 LiveReload 的底层都依赖操作系统级的文件变更通知(FSEvents / inotify),不是 Sublime 自己轮询出来的,这点最容易被忽略。


















