Quarto 筆記 (1) - 初體驗心得

我的 Quarto 初體驗心得。


前言

我原本在網路上查找 Sphinx(讀音近似「斯芬克斯」)的相關文件,比較跟我自己用過的一些文件編輯與出版工具比較,像是 MkDocsHugo。找來找去,無意間看到了 Quarto(讀音似「誇頭」),發現它似乎更符合我的需求。

從私人筆記到出版

我經常想,無論是私人筆記、部落格文章、還是寫一本書,最好能夠用同一套工具或平台,一條龍通吃。這也是為什麼以前剛開始接觸 Obsidian 時覺得很棒,但後來還是回到以 Visual Studio Code 來寫作的方式。目前的做法是,私人筆記以及要公開發布至部落格的文章,都是在 VS Code 中編寫 Markdown 文件,並利用 Hugo 搭配 Docsy 主題套件來生成靜態網站。但這樣還是缺了一塊:轉換成電子書。


Hugo 和 Docsy 有一些擴充標記語法,已經大致能滿足各種文件排版樣式的需要,語法用熟了也還挺習慣。總的來說,Hugo 和 Docsy 很好,我沒有什麼想要挑剔的。唯一的問題是,當我想要把過往這些 Markdown 文件整理成一本電子書,此時就會碰到格式轉換的問題,因為我慣用的書籍出版平台是 Leanpub,而 Leanpub 又有自己的一套 Markdown 方言。每當想到這個轉換程序就覺得累,缺乏效率。


看到 Quarto,我覺得或許找到了解決方案。


Quarto 初體驗

Quarto 跟上述工具一樣採用 Docs-as-Code 作為文件編寫與出版流程,一樣是 Markdown 標記語言(基於 R Markdown),再加上更豐富強大的擴充語法、可製作動態內容(使用 Python、R、Julia、Observable),也支援多種出版形式,包括:網站、線上書籍、PDF、ePub,甚至 MS Word 和投影片等等。它具備的功能已經超出我需要的。


接著想的是:功能這麼多,排版樣式這麼豐富,會不會很難上手、或者實際寫作時碰到一堆限制或 bugs 呢?


終歸還是得自己動手試試看才能確定。


於是,我做了第一個練習:在 GitHub 上面建立一個 repository,然後在這個 repo 中以 Quarto 的文件框架和語法來寫一本幾乎沒有內容的電子書,主要是為了測試以下需求:


  • ✅ 能輸出 HTML + EPUB + PDF 三種格式。
  • ✅ 生成之 PDF 可以正常顯示中文字,而不會是豆腐方塊。
  • ✅ 於本機生成書檔。
  • ✅ 透過 GitHub workflow 生成書檔。詳見 Quarto 筆記(2) - 自動發布至 GitHub Pages


底下是 Quarto 生成的線上電子書網站的截圖:



生成的 PDF 檔案的截圖:




如果你有興趣用這個小專案來體驗一下 Quarto,其原始碼的網址如下:



書籍檔案的結構如下:

quarto-book-demo/
├─ _quarto.yml
├─ index.qmd
├─ 01-intro.qmd
├─ 02-workflow.qmd
└─ references.qmd


重點說明:
  • _quarto.yml - 控制了整本書的排版相關參數,包括語系、各章的文檔名稱和順序、輸出資料夾、輸出哪些格式等等。
  • index.qmd - 作為首頁的內容。注意此檔案必須存在,因為 Quarto 生成的書籍也包含 HTML 格式。See also: Quarto 文件 > Book Structure
  • 01-intro.qmd - 第一章。
  • 02-workflow.qmd - 第二章。
  • references.qmd - 用來放參考文獻。

接著說明在本機電腦完成此練習所需的軟體環境與操作指令,相關內容也都有寫在 README 文件裡。

於本機建置

作業環境:Windows 11

需要安裝這些:

注意事項:
  • 安裝完成 Quarto CLI 之後,須重新啟動 Visual Studio Code。
  • 若沒有安裝 Noto Serif 繁體中文字型,未來生成的 PDF 檔案裡面的中文會是亂碼或豆腐(方塊字/口口口)。這個字型是在 _quarto.qmd 檔案中指定的。

安裝好上述工具後,為了在本機執行 quarto render 命令來測試生成 PDF,還需要使用以下命令來安裝 TinyTeX

quarto install tinytex

欲生成書籍檔案,在此專案根目錄下執行:

quarto render

若執行成功,專案根目錄下的 _output 資料夾裡面會有三種格式的電子書:HTML、EPUB、PDF。


完成此練習之後,確認 PDF 檔案能夠正確顯示中文,其餘的我就不擔心了。目前看起來,Quarto 這套工具組似乎能夠完全取代 Leanpub 的出版功能。這也意味著我需要學習更多的設定和語法。

Quarto vs. Settlr vs. Notion

這裡也順帶比較一下三種寫作工具:Quarto、Settlr、Notion。

以下內容主要來自 ChatGPT 的回答,其實我沒有用過 Notion,因為我始終認為,以純文字標記語言為基礎的寫作工具,搭配 Docs-as-Code 發布流程,才是長久且穩定的做法;這樣不但能避免 vendor lock-in,也能完整支援多人協作,特別是 diff 與 pull request 這些不可或缺的機制。
不過,如果最重要的目標是「讓公司裡所有人,不管有沒有 IT 背景,都能立刻上手,隨手把筆記和文件丟進知識庫」,那選 Notion 這種主打 WYSIWYG 的工具就很合理了。

快速結論

  • Quarto:偏向 Docs-as-Code 的專業文件/技術寫作流程,最適合用 Git + PR 做 review、差異比對與合併;團隊需要有 Git 技能。
  • Zettlr: 主打桌面應用程式、偏個人/離線的寫作工具,沒有內建多人即時協作或細緻的合併機制;若要多人協作要靠外部同步或把檔案放在 Git/雲端,合併多半是「檔案層級」的流程。
  • Notion: 以即時共同編輯與留言討論為強項(WYSIWYG),review 可以用「評論 / @ 指派 / 歷史版本還原」,但內建的版本差異(redline / 差異視覺化)較弱,對程式碼或純 Markdown 的精細差異比對、合併不友善。

比較表

比較項目QuartoZettlrNotion
文件類型 / 格式Markdown / Quarto(支援程式碼、R/Python、學術輸出)— 與 Git 相容,適合自動化 build本機 Markdown/文本為主(桌面 app,離線為優先)WYSIWYG/富文本(支援 Markdown 粘貼),頁面與資料庫為核心
審查(review comments)靠 GitHub/GitLab PR comments、issue 討論無內建多人即時評論;可借助外部工具或雲端內建評論、提及、@指派、Thread,適合跨部門快速回饋
版本差異比對(diff)借助 Git,可逐行比對 Markdown 變更無內建 diff;需搭配 Git 或外部 diff 工具有版本歷史,可回溯頁面,但無逐行 redline
合併(merge)透過 Git 分支與 PR 合併,支援衝突解決與審核流程多為檔案層級;若無 Git,容易出現覆蓋衝突即時編輯避免衝突,但無 Git-style 合併工具
即時協作非即時(Git 為主,可搭配雲端 IDE 改善體驗)不支援即時,多為桌面離線支援多人即時共同編輯(強項)
適合團隊情境技術文件、教學手冊、需 CI/CD、版本化發佈的團隊個人寫作、研究筆記、注重隱私或離線的小組產品/PM/設計/商務團隊,需要快速共同編輯與任務追蹤

結語

之所以對 Quarto 產生興趣,主要是因為它強大的排版功能以及生成電子書的能力。而且,它又是基於 Markdown 的 Docs-as-Code 流派的文件製作方法(也支援陽春的視覺化編輯),可以說完全符合我的寫作習慣和需求。

接下來,還必須編寫大一點的文件,才好確認會不會碰到卡住的情形。如果能順利推進,才敢放心把寫作與出版流程從 Hugo 和 Leanpub 移動至 Quarto。

Keep learning!

延伸閱讀



沒有留言:

技術提供:Blogger.
回頂端⬆️