編按:本文綜合整理自 pandoc.org 二十年回顧、LWN.net 報導、Hacker News 討論串、pandoc GitHub 倉庫、Wikipedia Pandoc 條目,並加入 Siami 編輯部觀點與分析。
一位哲學教授的副產品,如何變成寫作圈的瑞士刀
2026 年 8 月 3 日,是文件轉換工具 Pandoc 上線滿 20 年的日子。創辦人 John MacFarlane 是加州大學柏克萊分校的哲學教授,他在 個人回顧文章 中坦白承認,Pandoc 一開始只是「Haskell 學習過程中的副產品」,完全沒預料到會演變成全球安裝量數百萬、撐起無數學術與技術寫作流程的開源基礎建設。
故事開始於 MacFarlane 讀了哲學界友人 Greg Restall 推薦的 Haskell 入門書。他想找一個練手專案,於是把目標鎖定在 Markdown 解析器——當時市面上的 Markdown 實作(Perl、Python、Ruby、PHP)幾乎都是用一連串正則表達式直接轉 HTML,充滿各種邊角案例 bug。MacFarlane 改用 parser combinator 把 Markdown 解析成真正的抽象語法樹(AST),再透過 N 個 reader × M 個 writer 支援 N×M 種轉換——這個架構決定了 Pandoc 之後 20 年的擴展路線。
2006 年 8 月 3 日,Pandoc 0.1 釋出,僅約 3,000 行 Haskell 程式碼、無外部依賴、僅在作者個人網站上公告。沒想到這個「沒做行銷」的小工具,被 Debian 開發者 Recai Oktaş 主動打包、登上 Hackage,並被學術圈的講議與部落格採用,從此一發不可收拾。
20 年的技術里程碑:從 Markdown 工具到跨格式基礎建設
Pandoc 的發展可分為四個明確階段,每個階段都解鎖了當時尚未存在的功能。
Pandoc 0.x(2006–2008):從個人專案到 Debian 套件
- 0.3 版加入 DocBook writer 與後來成為 Markdown 標準的腳註語法
- 0.4 版加入 Markdown 表格、定義清單、上下標、groff man pages 與 ConTeXt writer
- 0.4 是第一個登上 Hackage 的版本,讓外部依賴管理變得可能
Pandoc 1.x(2008–2017):從單純轉換器到學術寫作引擎
這是 Pandoc 功能爆炸的十年,也是 CommonMark 標準誕生的年代:
- 1.0 加入 MediaWiki、GNU Texinfo、OpenDocument、ODT writer 與 fenced code blocks
- 1.4 引入彈性 template 系統(2010 年),大幅提升輸出客製化能力
- 1.9(2012)首度支援 docx 輸出,並加入 Beamer 與 DZSlides
- 1.13 同時集結 Albert Krewinkel(Org-mode)、Jesse Rosenthal(docx reader)、Matthew Pickering(EPUB、texmath)三位長期貢獻者的成果
- 1.14(2015)開始支援 CommonMark——這是 MacFarlane 為了解決 Markdown 語意歧義而發起的標準化專案
Pandoc 2.x(2017–2023):架構重構與學術整合
- 2.0 引入 PandocMonad typeclass,讓 reader/writer 可在純函式或允許 I/O 的環境中執行
- 同樣在 2.0 引入 Lua filters(Albert Krewinkel 主導),效能遠勝 JSON filters
- 2.11 重寫 citation 處理,改用 MacFarlane 從零打造的 citeproc library
- 2.15 加入
--sandbox選項,保證 parser/renderer 沒有 I/O 副作用 - 2018 年獲得 Handshake 捐贈 10 萬美元,用於支付維護者津貼
Pandoc 3.x(2023–至今):模組化與 WASM
Pandoc 3.0 把專案拆成四個獨立套件:pandoc(核心 library)、pandoc-lua-engine(Lua 整合)、pandoc-server(HTTP API)、pandoc-cli(命令列工具,可選擇不打包 Lua 與伺服器)。3.1.3 加入 Typst reader/writer,3.1.12 開始支援 MacFarlane 自己設計的新標記語言 djot,而 2026 年 2 月發布的 3.9 版更把整套編譯成 WASM——這意味著使用者現在可以在瀏覽器裡直接跑完整版 Pandoc(GUI 介面「Pandoc for the People」由 Claude Opus 協助設計)。
「MacFarlane 二十年前埋下的『AST 中介』設計哲學,讓 Pandoc 從一個 Haskell 練習作業變成整個文件處理生態的底層。從 Quarto 到 Jupyter Notebook,從 RStudio 到学术期刊投影片系統,背後都有 Pandoc 在跑。」
為什麼這件事重要:Pandoc 撐起了什麼
Pandoc 的影響力遠超過它本身的安裝數量,因為它已經成為下游工具鏈的通用轉接頭。
- 學術寫作:Quarto 與 R Markdown 把 Pandoc 當成核心引擎,把
.qmd、.Rmd編譯成論文、書籍、簡報、網站 - 資料科學:Jupyter Notebook 的
.ipynb支援(2019 年加入)讓 Pandoc 進入資料科學工作流 - 文獻管理:CSL 引用處理、EndNote 與 BibTeX bibliography 格式互轉,幾乎所有學術寫作工具都依賴 Pandoc 的 citeproc 處理
- 新型態語言橋樑:Typst(LaTeX 替代品)能在三年內快速普及,正是因為 Pandoc 3.1.3 起提供完整的 reader/writer 支援
- 瀏覽器原生:Pandoc 3.9 的 WASM 版本讓文件轉換不再需要伺服器,前端應用可以直接呼叫
從安裝數來看,Pandoc 出現在幾乎每一個主流 Linux 發行版的套件庫、在 macOS 與 Windows 有官方 installer、在 Docker Hub 有現成映像。GitHub 上已有 7,346 個 issue 被解決、600+ 位貢獻者參與。
數據解讀:Haskell 的選擇、貢獻者集中度與 LLM 時代的定位
這次回顧中有幾個值得深入解讀的數字與技術決策。
為什麼選 Haskell:作者本人的反思
MacFarlane 在文章最後一節「Retrospective: the choice of Haskell」坦承,當年選 Haskell 不是因為經過嚴格技術評估,而是哲學友人 Greg Restall 推薦的結果。但他回頭看認為 Haskell 的三個特性確實救了這個專案:
- Algebraic data types 提供乾淨的 AST 表示
- 強型別系統讓重構變得安全——編譯器會指出所有需要修改的地方
- 純函式語意讓
--sandbox模式可以嚴格保證 reader/writer 不會存取檔案系統
他評估過 Rust 作為替代方案,結論是 Rust「更快、更省記憶體」,但 Haskell 在「表達抽象」與「輔助開發者思考」上更貼近他心中理想語言的位置。
貢獻者高度集中:前三人佔九成變更
從作者提供的 20 年貢獻者統計可以看出極端集中度:
| 貢獻者 | 變更行數 | 活躍年份 |
|---|---|---|
| John MacFarlane | 372,317 | 2006– |
| Albert Krewinkel | 77,136 | 2014– |
| Jesse Rosenthal | 39,664 | 2014– |
| Christian Despres | 15,314 | 2019–2021 |
前三人的變更行數佔總量 90% 以上。這反映兩個事實:(1) 創始人長期主導(MacFarlane 二十年如一日),(2) Haskell 生態對貢獻者的高技術門檻讓新手難以加入。Handshake 的 10 萬美元捐贈雖然緩解了部分維護壓力,但整體仍高度依賴少數核心成員。
LLM 能取代 Pandoc 嗎?作者親自回答
MacFarlane 在「Whither Pandoc」一節直接面對這個問題:他承認 LLM 在 Markdown→HTML 這類任務上表現不錯,但 Pandoc 仍有三大不可取代的優勢:
- 能源效率——純轉換比呼叫 LLM 省電幾個數量級
- 確定性輸出——同一份文件永遠產生相同結果,可預測、可重現
- 當前可靠性——LLM 對複雜格式(如嵌套 emphasis、表格欄寬)仍會出包
他自己也承認,未來某天 LLM 可能會比 Pandoc 更可靠,就像當年 CommonMark 設計時遇到的「人類語意理解的極限」問題——「在我們的程式有 AI 之前,總會有這些 edge case;到某個點我們必須接受並停止設計更複雜的規則」。
寫在 20 週年之後:Pandoc 的下一步
MacFarlane 在文末表示,他仍然幾乎每天都在維護 Pandoc,但工作內容已經從「重大功能開發」轉向「修 bug、審 PR、處理基礎建設、回應使用者」。這種「成熟開源專案的日常」其實是另一種工程紀律的展現。
對於使用者,Pandoc 20 週年最值得記住的是:
- Pandoc 3.9 的 WASM 版本讓 pandoc.org/try 可以在瀏覽器裡跑完整版(不用裝任何東西)
- djot 作為 MacFarlane 自己設計的下一代輕量標記語言,Pandoc 已原生支援
- Typst 整合讓學術 PDF 排版正式脫離 LaTeX 的束縛
當被問到「Pandoc 還能做什麼不同的事」時,MacFarlane 的回答或許最能總結這個專案的精神:「繼續改進它。在我看來,還有很多可以改進的地方。」
Pandoc 20 年證明了一件事:真正持久的開源工具,往往不是解決熱門問題的那個,而是願意把一個冷門問題持續打磨二十年的那個。在 LLM 鋪天蓋地重新發明所有軟體的今天,這種「長期主義的工程美學」反而顯得格外珍貴。
網友熱門留言 (4)