mdslides
把一份 Markdown 變成單一 HTML 檔的簡報
useless-husband · 2026
為什麼要做這個
- 用 PowerPoint 或 Keynote 做簡報,內容和排版糾纏在一起
- 檔案很大,用 git 也看不出這次改了什麼
- 想要:只寫內容,其他交給工具
- 目標:輸出一個 HTML 檔,雙擊就能播,寄給別人也不會壞
一份 Markdown 就是一份簡報
---
title: 我的簡報
theme: dark
---
# 第一頁
---
## 第二頁
- 用三個減號分頁
- 講者備註寫在 Note: 後面
Note: 只有你看得到
逐步顯示
清單項目前面用 +,每按一下才出現一項:
- 第一步:先講問題
- 第二步:再講做法
- 第三步:最後給結論
一般的 - 項目則會一次全部出現。
程式碼與語法高亮
在語言後面加 {2,4-5} 就能標出重點行:
function fizzbuzz(n) { const out = []; for (let i = 1; i <= n; i++) { if (i % 15 === 0) out.push("FizzBuzz"); else if (i % 3 === 0) out.push("Fizz"); else out.push(String(i)); } return out;}
支援 js / ts、python、bash、json、html、css、go。
表格與對齊
| 按鍵 | 功能 | 備註 |
|---|---|---|
| 空白 / → / PageDown | 下一步 | 有逐步項目時先顯示項目 |
| ← / PageUp | 上一步 | |
| Home / End | 第一頁 / 最後一頁 | |
| o | 總覽 | 方向鍵選取,Enter 進入 |
| f | 全螢幕 | |
| b | 黑屏 | |
| s | 簡報者模式 | 開新視窗 |
圖片會直接內嵌
本機圖片在建置時轉成 base64,輸出仍然只有一個檔案:
,路徑相對於 Markdown 檔。
主題與版面
- light:白底,預設
- dark:深色
- paper:米白底,像紙本
- 想要別的?用
--css my.css追加自己的 CSS
每頁可以用註解換版面:
<!-- .slide: class="center" -->
內建 center、title、small、cols、invert。
指令
# 產生單一 HTML 檔
mdslides talk.md -o talk.html
# 本機預覽,存檔就自動重新載入
mdslides serve talk.md --port 18080
# 存成 PDF 時,把備註印在每頁下面
mdslides talk.md --print-notes
存成 PDF:用 Chrome 開啟輸出檔,列印,目的地選「另存為 PDF」。
原理
Markdown 解析器、語法高亮、播放器都是自己寫的
零執行期依賴,node --test 就能跑測試