SwiftLaTeX/SwiftLaTeX · 上手攻略

  • 仓库:SwiftLaTeX/SwiftLaTeX
  • 链接:https://github.com/SwiftLaX/SwiftLaTeX
  • 分类:academic-writing
  • 作者:Tom
  • 更新:2026-08-20

这是什么

SwiftLaTeX 是一个基于 WebAssembly 的浏览器端 LaTeX 编辑器/引擎,支持 PdfTeX 和 XeTeX 两种引擎,在浏览器中完全本地运行(所有计算不经过服务器),可选 WYSIWYG(所见即所得)编辑模式。

官方 Demo:https://www.swiftlatex.com

解决什么问题

传统的 LaTeX 编写需要本地安装完整的 TeX 发行版(如 TeX Live 或 MiKTeX),安装包体积庞大(数 GB),配置繁琐。SwiftLaTeX 将 TeX 引擎编译为 WebAssembly,让任何有浏览器的设备都能直接编译 LaTeX 文档,无需安装任何本地软件。对于嵌入 LaTeX 到网页、在线文档平台或教育场景,SwiftLaTeX 提供了一种轻量级解决方案。

快速安装

方式一:在线使用(推荐尝鲜)

直接访问 https://www.swiftlatex.com 使用在线编辑器,无需任何安装。

方式二:自托管(网页嵌入)

从 GitHub Releases 下载最新打包文件,放入网页目录:

<script src="PdfTeXEngine.js"></script>

然后初始化引擎(见核心用法)。

方式三:从源码编译

需要 Emscripten SDK(emsdk):

# 克隆 emsdk
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk

# 安装最新 SDK
./emsdk install latest
./emsdk activate latest
source ./emsdk_env.sh

# 编译 XeTeX 或 PdfTeX WASM 模块
cd pdftex.wasm   # 或 xetex.wasm
make

⚠️ 源码编译依赖 Emscripten,整个过程需要较长时间(约数十分钟),非开发者通常不需要这一步。

核心用法

方式一:网页嵌入(最典型用法)

<!DOCTYPE html>
<html>
<head>
  <title>SwiftLaTeX Demo</title>
  <script src="PdfTeXEngine.js"></script>
</head>
<body>
  <button onclick="compile()">Compile</button>
  <pre id="log"></pre>
  <script>
    async function compile() {
      const engine = new PdfTeXEngine();
      const logEl = document.getElementById('log');

      await engine.loadEngine();
      logEl.textContent = 'Engine loaded.';

      engine.writeMemFSFile("main.tex",
        "\\documentclass{article}\n" +
        "\\begin{document}\n" +
        "Hello, SwiftLaTeX!\n" +
        "\\end{document}"
      );

      engine.setEngineMainFile("main.tex");
      let result = await engine.compileLaTeX();

      logEl.textContent = result.log;  // 输出编译日志
      // result.pdf 包含 PDF 二进制数据
      console.log("PDF size:", result.pdf.length, "bytes");
    }
  </script>
</body>
</html>

方式二:在线编辑器

  1. 打开 https://www.swiftlatex.com
  2. 在左侧编辑器输入 LaTeX 代码
  3. 点击编译,右侧预览 PDF
  4. 支持 XeTeX 和 PdfTeX 引擎切换

核心 API 速查

API 返回值 说明
engine.loadEngine() Promise 异步加载 WebAssembly 引擎(首次调用约需数秒)
engine.isReady() boolean 检查引擎是否就绪
engine.writeMemFSFile(filename, content) void 上传 .tex 源文件或资源(支持 string 或 Uint8Array)
engine.makeMemFSFolder(folder) void 创建目录
engine.setEngineMainFile(filename) void 指定入口 .tex 文件
engine.compileLaTeX() Promise<CompileResult> 执行编译,返回 { log, pdf }
engine.flushCache() void 清空所有已上传文件
engine.closeWorker() void 关闭 Web Worker,释放资源

引擎选择建议

引擎 适用场景 字体支持 速度
XeTeX(推荐) 通用场景、中文、Unicode 内容 OpenType / TrueType,开箱即用 略慢
PdfTeX 纯英文、快速编译 TeX 内置字体 较快

⚠️ XeTeX 引擎不包含完整 ICU 数据集,locale 相关的断行行为可能与原生 XeTeX 有差异。如仅处理英文文档,PdfTeX 更快更稳定。

首次编译网络依赖

首次编译时,引擎需要从 CTAN 或 SwiftLaTeX 镜像服务器(https://texlive.swiftlatex.com)下载所需的宏包文件。有网速较慢或内网环境的用户,可自建 TeX Live 镜像服务器(参见 SwiftLaTeX/Texlive-Ondemand 仓库),并通过 engine.setTexliveEndpoint(url) 指定。

典型适用场景

  • 在线 LaTeX 编辑器:嵌入博客或在线教育平台,让用户无需本地安装 TeX 即可编写 LaTeX
  • 网页端论文预览:作者可在任何设备浏览器中实时预览论文排版效果
  • 自动化文档生成:服务端或客户端根据模板生成 PDF,无需安装完整 TeX 发行版
  • 轻量级 LaTeX 教学:学生直接在浏览器实验,无需配置本地环境
  • 嵌入式 LaTeX 渲染:在不支持本地 TeX 的嵌入式设备或受限环境中使用

坑与注意

  1. 性能约为原生 2 倍慢:官方称运行速度约为原生二倍,复杂文档(多图表、多次编译引用)的等待时间会明显更长。

  2. 首次编译需下载宏包:TeX Live 宏包按需下载,首次编译时如果网络不佳可能失败。可预先缓存或自建镜像服务器。

  3. 中文支持依赖 XeTeX 引擎:PdfTeX 不直接支持中文,需要用 XeTeX + fontspec 宏包,或自行配置 ctex 等中文宏包支持。

  4. WYSIWYG 模式仍在开发中(README 原话 WIP):目前主要使用代码编辑 + PDF 预览模式,不要期待完整的所见即所得体验。

  5. GitHub 仓库 2022 年后更新较少:SwiftLaTeX 核心引擎已稳定,但社区活跃度和新功能推进较慢。使用前评估是否满足你的功能需求。

  6. AGPL-3.0 许可证:如在商业产品中使用,注意 AGPL 的传染性——修改的源代码需开源。

  7. Emscripten 编译环境复杂:一般用户无需从源码编译,但如果需要自定义引擎或修改 WASM 模块,需要配置 Emscripten 环境。

与同类对比

工具 实现方式 是否开源 中文支持 性能 适合场景
SwiftLaTeX WebAssembly(纯浏览器) AGPL-3.0 XeTeX 支持 约原生 2x 慢 嵌入网页、轻量编辑
Overleaf 服务器端编译 闭源(社区版开源) 完整 原生速度 多人协作、完整功能
Papeeria 云端编译 闭源 完整 原生速度 在线协作写作
Authorea 云端编译 闭源 完整 原生速度 学术出版平台
CoCalc 云端 Jupyter + LaTeX 部分开源 完整 原生速度 教学、计算环境

SwiftLaTeX 的最大优势是完全客户端运行、不需要服务器——数据不会离开用户的浏览器,适合隐私敏感场景或作为嵌入式组件。劣势是功能完整度不如 Overleaf 等成熟平台。

一句话推荐结论

如果你需要在一个网页或博客中嵌入 LaTeX 编译能力,或者给无法安装 TeX 环境的用户提供在线 LaTeX 编辑体验,SwiftLaTeX 是目前最轻量、最直接的开源解决方案;作为日常主力 LaTeX 编辑器,Overleaf 等成熟平台仍是更稳妥的选择。