全离线 Android Markdown 编辑器,专为 GPT 数学公式渲染而生。
EasyMd 是一款完全离线运行的 Android Markdown 编辑器,采用原生编辑器 + WebView 实时预览的架构,无需任何网络权限。特别针对 GPT 输出的数学公式格式进行了深度优化,一键渲染 [...] 格式的 LaTeX 公式。
GPT 输出的数学公式直接复制时,通常使用 [...] 和 '(...)' 包裹,而非标准的 $$...$$。EasyMd 内置 GptMathPreprocessor 预处理器,自动识别并转换:
GPT 输出(难读): EasyMd 渲染(清晰):
( E = mc^2 ) $ E = mc^2 $
[\frac{d}{dx}f(x) = \lim_{h \to 0} $$\frac{d}{dx}f(x) = \lim_{h \to 0}
\frac{f(x+h)-f(x)}{h}] \frac{f(x+h)-f(x)}{h}$$
[\begin{cases} $$\begin{cases}
5x_1 + 2x_2 + x_3 = -12 \\ 5x_1 + 2x_2 + x_3 = -12 \\
-x_1 + 4x_2 + 2x_3 = 20 \\ -x_1 + 4x_2 + 2x_3 = 20 \\
2x_1 - 3x_2 + 10x_3 = 3 2x_1 - 3x_2 + 10x_3 = 3
\end{cases}] \end{cases}$$
支持检测的数学特征:$ 内联公式、\begin 环境、\frac、\sum、\int、\alpha、\beta、\sqrt、\left、\right、数字表达式。
只需在工具栏中开启 GPT 模式开关,粘贴 GPT 的数学输出,即可实时看到渲染后的专业公式。
- 📐 完整 LaTeX 支持 — 基于 MathJax 3.2.2,支持行内公式、块级公式、矩阵、环境等
- 💻 代码高亮 — 基于 Prism.js,支持 11+ 编程语言语法高亮
- 📊 Mermaid 图表 — 支持流程图、时序图、甘特图等图表渲染
- 🌓 深色/浅色主题 — 一键切换,预览区和编辑器同步响应
- 📱 三种布局模式 — 左右分屏、上下分屏、编辑/预览切换
- 🔤 可调字体 — 编辑器支持捏合缩放(8sp–36sp)
- 📂 文件导入导出 — 支持打开和保存
.md文件 - 📴 完全离线 — 所有 JS 库均打包在 APK 中,零网络依赖
git clone https://github.com/ArrogHie/EasyMarkdown.git
cd EasyMarkdown项目依赖以下离线 JS 库,需手动下载并放入 app/src/main/assets/js/ 目录:
# 从 GitHub 下载 MathJax 3.2.2 发布包
# 下载地址:https://github.com/mathjax/MathJax/releases/tag/3.2.2
# 解压后将 es5/ 目录下所有文件复制到:
app/src/main/assets/js/mathjax/# 下载 markdown-it 的浏览器独立版本
# https://cdn.jsdelivr.net/npm/markdown-it@14/dist/markdown-it.min.js
# 放入:
app/src/main/assets/js/markdown-it.min.js需要三个文件:
| 文件 | 下载地址(jsDelivr CDN) |
|---|---|
prism-core.min.js |
https://cdn.jsdelivr.net/npm/prismjs@1/components/prism-core.min.js |
prism-languages.min.js |
从 Prism 官网 自选语言后下载 |
prism-theme-light.css |
https://cdn.jsdelivr.net/npm/prismjs@1/themes/prism.css |
prism-theme-dark.css |
https://cdn.jsdelivr.net/npm/prismjs@1/themes/prism-tomorrow.css |
放入 app/src/main/assets/js/prism/ 目录。
# 下载 Mermaid 独立版本
# https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js
# 放入:
app/src/main/assets/js/mermaid/mermaid.min.js下载完成后,app/src/main/assets/js/ 目录应如下:
app/src/main/assets/js/
├── app.js # 项目自有(已在仓库中)
├── markdown-it.min.js # 下载
├── mathjax/ # 下载(es5/ 完整目录)
│ ├── tex-svg.js
│ ├── core.js
│ ├── input/tex/extensions/ams.js
│ └── ...(约 100 个文件)
├── mermaid/
│ └── mermaid.min.js # 下载
└── prism/
├── prism-core.min.js # 下载
├── prism-languages.min.js # 下载(自选语言)
├── prism-theme-light.css # 下载
└── prism-theme-dark.css # 下载
# 构建 Debug APK(可直接安装测试)
./gradlew assembleDebug
# APK 输出位置
# app/build/outputs/apk/debug/app-debug.apk
# 运行单元测试
./gradlew test- Android: 7.0+ (API 24)
- JDK: 17+
- Gradle: 9.4.1
- AGP: 9.2.1
MainActivity
└─ MdEditorScreen (Compose)
├─ Toolbar (主题 / GPT / 布局切换)
├─ EditorPanel (原生 EditText + 行号侧栏)
└─ PreviewPanel (WebView 实时预览)
├─ markdown-it → HTML
├─ MathJax 3 → SVG 公式
├─ Prism.js → 代码高亮
└─ Mermaid → 图表
- 架构: MVVM,单一
MdEditorViewModel作为数据源 - 渲染管线: Kotlin HtmlRenderer → JS 模板字面量 → app.js 处理 → WebView DOM
- 同步策略: 编辑器内容变化 → 自适应防抖(300/500/1000ms)→ 预览更新
| 输入格式 | 检测条件 | 输出格式 |
|---|---|---|
[公式] (单行,含数学特征) |
$、\frac、数字等 |
$$公式$$ |
[公式](多行,含数学特征) |
$、\begin、数字等 |
$$\n公式\n$$ |
[公式] (不含数学特征) |
无匹配 | 保持原样 |
行尾单个 \ |
GPT 错误换行 | \\(LaTeX 换行) |
- 粘贴 GPT 数学回答 → 开启 GPT 模式 → 自动渲染公式
- 查看 GPT 输出的方程组 →
[...\begin{cases}...]自动转为矩阵排版 - 编辑 Markdown 笔记 → 关闭 GPT 模式 → 标准 Markdown 编辑体验
| 组件 | 技术 |
|---|---|
| 语言 | Kotlin 2.2.10 |
| UI | Jetpack Compose + Material 3 |
| 编辑器 | 原生 EditText(MdEditText) |
| 预览 | WebView + markdown-it |
| 数学渲染 | MathJax 3.2.2 (SVG) |
| 代码高亮 | Prism.js |
| 图表 | Mermaid |
| 设置持久化 | Jetpack DataStore (Preferences) |
MIT License