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 到 HTML 的流程

![說明](flow.svg),路徑相對於 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 就能跑測試