在数学笔记整理和技术写作的道路上,我长久以来都面临着一个两难的选择。
左手是 Markdown:它轻量、快捷,所见即所得。在 Typora 或 Obsidian 里敲击键盘,思绪如水流般顺畅,没有任何繁琐的标签阻断灵感。
右手是 LaTeX:它是学术界的各种标准,是排版的终极奥义。那完美的数学公式渲染、专业的字体间距、严谨的定理环境,是任何网页渲染都无法比拟的艺术品。
痛点在于: 用 LaTeX 直接写作太痛苦(满屏的 \begin 和 \end),而用 Markdown 导出的 PDF 又往往缺乏那份“专业感”。
于是,LaTeXRenderer 诞生了。
◎ LaTeXRenderer 升级出界面了进化:从脚本到全能工具箱
在项目发布之初,它还是一个纯粹的命令行工具。虽然高效,但对于很多不想折腾 Python 环境或被 LaTeX 安装折磨的用户来说,门槛依然存在。
于是,我给 LaTeXRenderer 做了三次重大的“手术”:可视化 (Web UI)、容器化 (Docker) 以及 架构重构。
初衷:鱼和熊掌兼得
我开发 LaTeXRenderer 的核心目标非常简单:用 Markdown 舒服地写,用 LaTeX 漂亮地发。
我希望我的工作流是这样的:
- 打开我最喜欢的 Markdown 编辑器,专注于内容创作。
- 像写代码一样写公式:
$E=mc^2$,$$ \int f(x) dx $$。 - 敲入一行命令
lxrender note.md --compile。 - Boom! 一个排版精美、带有我个人品牌(页眉、页脚、Logo)的 PDF 就生成了。
灵活的使用模式
为了适应不同的工作流,LaTeXRenderer 现在提供两种交互方式:
1. 现代化 Web 界面 (推荐)
这是目前最直观、门槛最低的使用方式。我使用 React 和 FastAPI 构建了一个轻量级的前台。你只需在浏览器中直接贴入 Markdown 内容,即可实时预览并生成 PDF。对于大多数日常写作,这能让你完全专注于内容本身。
2. 极简的命令行体验 (极客模式)
虽然 Web 界面更友好,但 CLI 模式依然为自动化脚本和极客用户保留。安装后,你可以通过一行命令进行批量转换:
# 转换并编译单个文件
lxrender my_note.md --compile --clean
部署方案:容器化一键搞定
LaTeX 的环境配置(特别是中文字体和各种宏包)一向是初学者的噩梦。现在,通过 Docker 方案,你可以在几分钟内拥有一套完整的生产环境:
docker-compose up -d --build
这种方式彻底隔离了宿主系统,预装了 XeLaTeX、思源宋体以及所有必要的依赖,是目前最推荐的安装方式。
核心:顶级的排版素质
LaTeXRenderer 之所以能输出比普通编辑器更专业的 PDF,得益于底层的硬核支持:
1. 原生 LaTeX 引擎渲染
不同于网页截图或简单的 HTML 转换,LaTeXRenderer 利用 Mistune 解析 AST 后生成纯正的 LaTeX 源码,再由 XeLaTeX 编译。这意味着你能获得最完美的数学公式间距和数学界标准的排版艺术。
2. 定制化排版系统 (matnoble.cls)
我将多年的排版经验凝练成了内置的类文件。它不仅处理了中文字体映射,还预设了:
- 专业模板:包含页眉、页脚及 GitHub 链接等品牌元素。
- 三线表支持:自动将 Markdown 表格转换为学术范儿十足的
booktabs格式。 - 彩色提醒框:基于
tcolorbox的核心公式、解题技巧等特殊环境。
◎ XeLaTeX 渲染的极致素质技术实现一瞥
为了支撑起“Web + CLI + Docker”的多样化需求,我重构了项目架构:
- 后端 (FastAPI):负责 Markdown 渲染逻辑的封装、文件 IO 转换以及与系统 LaTeX 引擎的异步通信。
- 前端 (React):提供极致流畅的写作体验,支持实时预览和配置参数(如标题、副标题)的动态注入。
- 核心引擎 (Mistune v3):通过编写自定义 Renderer 插件,深度定制 LaTeX 源码输出。
- 容器化 (Docker):预配置 XeTeX 编译链和中文字体支持,确保在任何环境下都能获得一致的输出。
结语与开源
目前,LaTeXRenderer 已经接管了我日常的数学笔记整理工作。它不仅让我保持了 Markdown 的高产,也让最终交付给读者的 PDF 文档保持了高水准的专业度。
如果你也是一名追求效率与美学的写作者,或者对 Python 自动化排版感兴趣,欢迎访问项目主页 Star 和试用!
