深入Quarto:掌握程式碼區塊的進階選項

更新 發佈閱讀 10 分鐘

在技術寫作的世界裡,我們一直在尋找更好的方式來呈現程式碼與分析結果。從早期的 Sweave 到 R Markdown,再到 2022 年 Posit 公司推出的 Quarto,這個領域不斷進化。Quarto 可以說是 R Markdown 的下一代進化版,但它不再侷限於 R 語言,而是以「適用於所有人」為目標,支援 Python、Julia、Observable JS 等多種程式語言。

.qmd Quarto 的原始檔案格式。你可以把它想像成一個「可執行的 Markdown」:在普通的文字與標記之外,你還可以嵌入程式碼,並在輸出文件(HTML、PDF、Word 等)中直接呈現程式碼、執行結果、圖表,甚至是互動式元件。它支援 Python、R、Julia、Observable JS 等多種語言,讓跨語言的分析工作變得前所未有的流暢。

那麼,為什麼要從 .Rmd 轉向 .qmd?Quarto 最大的優勢在於它將過去需要透過許多套件才能實現的功能(如寫書、做簡報、建網站)整合為單一、一致的系統。它採用更清晰的語法,並提供超過 40 種輸出格式,讓技術文件創作變得更直覺、更強大。

而今天,我們就要聚焦在 .qmd 格式中最核心的功能——程式碼區塊選項,這些選項讓你精準控制程式碼與結果的呈現方式。

程式碼區塊的基本結構

在 .qmd 中,一個程式碼區塊以三個反引號加上語言標籤(如 python)開始,並以三個反引號結束。但真正讓它強大的,是區塊標頭中的選項

以下是一個基礎的程式碼區塊結構:

```{python}
# 這裡放你的程式碼
print("Hello, Quarto!")
```

如果要加入選項,則使用 #| 開頭的註解語法,每個選項獨立成行:

```{python}
#| echo: true
#| include: true
#| eval: true
print("Hello, Quarto!")
```

這種設計比 R Markdown 將所有選項擠在一行內更清晰易讀,尤其在選項較多時特別實用。現在,我們就來逐一解析這些關鍵選項。


1. echo:控制程式碼是否顯示

echo 選項決定「程式碼本身」是否出現在最終輸出文件中。

  • echo: true(預設):顯示程式碼區塊的原始程式碼。
  • echo: false:隱藏程式碼,只顯示執行結果。

應用場景: 當你希望呈現最終結果給非技術讀者,或報告中不想讓程式碼干擾閱讀流暢度時,可以將 echo 設為 false

```{python}
#| echo: false
print("這段程式碼會被執行,但不會顯示程式碼本身")
```

2. include:完全隱藏程式碼與結果

如果 echo 是「是否顯示程式碼」,include 就是「是否在文件中包含這個區塊的任何東西」。

  • include: true(預設):正常顯示(依據 echo 等設定)。
  • include: false:程式碼既不顯示,也不執行(或執行但不顯示任何輸出)。

應用場景: 當你需要執行某些設定、載入套件或資料前處理,但不想讓讀者看到這些步驟時,include: false 非常實用。

```{python}
#| include: false
import pandas as pd
import numpy as np
# 這段設定程式碼完全不會出現在文件中
```

3. eval:控制是否執行程式碼

eval 決定程式碼是否被執行。

  • eval: true(預設):執行程式碼,並顯示結果。
  • eval: false:不執行程式碼。如果 echo: true,仍會顯示程式碼本身。

應用場景: 當你想展示程式碼的「想法」或「結構」,但由於缺乏環境、資料,或為了節省編譯時間而不實際執行時,可以設定 eval: false

```{python}
#| eval: false
#| echo: true
print("這段程式碼只會顯示,不會被執行")
```

4. message 與 warning:控制提示與警告訊息

在執行程式碼時,經常會產生套件載入訊息、狀態更新(message)或潛在問題提示(warning)。

  • message: false:隱藏所有標準的訊息輸出(如套件載入訊息)。
  • warning: false:隱藏所有的警告訊息。

應用場景: 讓最終文件保持乾淨,避免過多雜訊干擾主要內容。

```{python}
#| message: false
#| warning: false
import pandas as pd
# 載入套件時不會顯示任何提示訊息
```

5. output:控制輸出格式

output 選項決定程式碼的輸出如何被渲染。

  • output: asis:將輸出視為 Markdown 語法直接渲染。這在動態產生表格或文字段落時非常強大。
  • output: text:將輸出以純文字形式呈現。

6. putpaged-print:輸出PDF時自動分頁

  • paged-print: true(預設):當輸出內容較長時,在列印/匯出為 PDF 時自動分頁顯示
  • paged-print: false:停用分頁輸出,所有內容連續顯示在同一頁

7. 圖形相關設定

當你的程式碼產生圖形時,可以透過以下選項控制圖片的呈現:

  • fig-width 與 fig-height:設定圖形尺寸(單位:英吋)
  • fig-cap:設定圖片標題
  • fig-align:設定圖片對齊方式(left、center、right)
```{python}
#| fig-width: 6
#| fig-height: 4
#| fig-cap: "這是一張簡單的折線圖"
#| fig-align: center
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.show()
```

8. cache:啟用快取

當程式碼執行時間較長時,可以啟用快取功能。只要程式碼內容沒有變動,再次編譯時就會跳過執行,直接使用之前儲存的結果,大幅節省編譯時間。

```{python}
#| cache: true
# 這段耗時的計算只會在程式碼有變動時才重新執行
result = slow_computation()
```

9. label:為程式碼區塊命名

為區塊加上名稱,不僅方便在文中引用,也有助於除錯和組織文件。

```{python}
#| label: data-loading
#| echo: false
data = pd.read_csv("data.csv")
```

綜合應用

以下是一個結合多種選項的完整範例,展示如何在教學文章中同時呈現程式碼、隱藏載入訊息、控制圖形尺寸,並將部分設定區塊完全隱藏。

```{python}
#| label: setup
#| include: false
# 這個區塊用來載入套件,完全隱藏在最終文件中
import pandas as pd
import matplotlib.pyplot as plt
```

```{python}
#| label: data-summary
#| echo: true
#| message: false
#| fig-width: 8
#| fig-height: 5
#| fig-cap: "銷售趨勢圖"

# 讀取資料
df = pd.DataFrame({
'月份': ['1月', '2月', '3月', '4月'],
'銷售額': [120, 135, 148, 162]
})

# 繪製圖表
plt.plot(df['月份'], df['銷售額'], marker='o')
plt.title('2024年第一季銷售趨勢')
plt.ylabel('銷售額(萬元)')
plt.show()
```

結語

.qmd 格式的程式碼區塊選項,就像一個精巧的控制面板,讓你精準拿捏「什麼該呈現、什麼該隱藏、如何呈現」。透過 echoincludeevalmessagewarning 以及圖形與快取等進階設定,你可以創作出既乾淨專業,又富有互動性與可重現性的技術文件。

無論你是資料科學家、技術作家,或是希望將分析流程記錄下來的專業人士,掌握這些選項都能讓你的 .qmd 作品從「可讀」進化為「優雅」。現在,就打開你的 Quarto 專案,試試看這些設定,打造屬於你的高品質技術內容吧!



留言
avatar-img
慵懶貓系的小墨魚:數據外的日常觀察
3會員
50內容數
小墨魚,一位白天擅長資料分析與統計建模的數據工作者,夜裡則沉浸在書本與文字裡,透過閱讀與寫作與世界對話。工作之餘,也兼職統計家教,協助學生理解複雜的統計概念與軟體操作。這裡記錄我的書評、生活觀察、科技碎念,有時也寫下關於時間與情緒的小片段。願這些文字,成為我們在日常中相遇的溫柔片刻。
2026/03/04
解決GIS座標系統轉換的痛點,釐清WGS84 (EPSG:4326)、TWD97_121 (EPSG:3826) 與 TWD97_119 (EPSG:3825) 在臺灣的地理資料處理上的應用差異,提供資料分析師與研究者在R或Python中的實務開發建議。
Thumbnail
2026/03/04
解決GIS座標系統轉換的痛點,釐清WGS84 (EPSG:4326)、TWD97_121 (EPSG:3826) 與 TWD97_119 (EPSG:3825) 在臺灣的地理資料處理上的應用差異,提供資料分析師與研究者在R或Python中的實務開發建議。
Thumbnail
2026/02/11
JSON 已成為網路上資料交換的標準格式。本文將深入解析 JSON 中 {}(物件)和 [](陣列)的應用時機,並介紹如何在 Python 中輕鬆轉換 JSON 資料,以及處理中文編碼和格式化等實用技巧。
Thumbnail
2026/02/11
JSON 已成為網路上資料交換的標準格式。本文將深入解析 JSON 中 {}(物件)和 [](陣列)的應用時機,並介紹如何在 Python 中輕鬆轉換 JSON 資料,以及處理中文編碼和格式化等實用技巧。
Thumbnail
2026/01/31
本文深入解析 CI/CD 的核心概念(持續整合與持續部署),並介紹 GitHub Actions 如何作為一個強大的自動化平臺,協助開發團隊提升效率與可靠性。從基礎的 YAML 設定檔到進階的矩陣測試與 secrets 管理,提供實用的技巧與最佳實踐,引導開發者踏上自動化之旅。
Thumbnail
2026/01/31
本文深入解析 CI/CD 的核心概念(持續整合與持續部署),並介紹 GitHub Actions 如何作為一個強大的自動化平臺,協助開發團隊提升效率與可靠性。從基礎的 YAML 設定檔到進階的矩陣測試與 secrets 管理,提供實用的技巧與最佳實踐,引導開發者踏上自動化之旅。
Thumbnail
看更多
你可能也想看
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
一種能讓人能自在向外的水晶 寫這篇是因為近期有社團成員分享,我就順便寫成一個完整的總體介紹: 仙人掌紫水晶,是一種與「人和」有關的水晶。但這裡所說的人和,並不是被動地吸引人緣或等待運氣發生,而是一種主動的狀態—— 包含選擇、心態、判斷與行動力。 它對應的不是「讓人變外向」,而是讓人在面對人與
Thumbnail
一種能讓人能自在向外的水晶 寫這篇是因為近期有社團成員分享,我就順便寫成一個完整的總體介紹: 仙人掌紫水晶,是一種與「人和」有關的水晶。但這裡所說的人和,並不是被動地吸引人緣或等待運氣發生,而是一種主動的狀態—— 包含選擇、心態、判斷與行動力。 它對應的不是「讓人變外向」,而是讓人在面對人與
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
大家好!今天我要分享一個我自己改進的 reveal.js 模板。如果你在使用 Quarto 工作,歡迎試試這個模板!Quarto 是一個極實用的科學寫作工具,能應用於報告、動態文件、電子書、簡報、網頁等等。
Thumbnail
大家好!今天我要分享一個我自己改進的 reveal.js 模板。如果你在使用 Quarto 工作,歡迎試試這個模板!Quarto 是一個極實用的科學寫作工具,能應用於報告、動態文件、電子書、簡報、網頁等等。
Thumbnail
大人最討厭小孩頂嘴,但孩子也不喜歡被否定   有時候孩子的情緒卡住了,其實不是不想說,而是不知道該怎麼說。 孩子在成長的過程中,有很多事需要感受和學習,然後情緒是最原始的反應,不過我們往往只接受孩子開心的、順從的反應。 若是有抗拒或是變得煩躁,大人就會很想要立刻糾正甚至要求孩子不可以這麼做,看
Thumbnail
大人最討厭小孩頂嘴,但孩子也不喜歡被否定   有時候孩子的情緒卡住了,其實不是不想說,而是不知道該怎麼說。 孩子在成長的過程中,有很多事需要感受和學習,然後情緒是最原始的反應,不過我們往往只接受孩子開心的、順從的反應。 若是有抗拒或是變得煩躁,大人就會很想要立刻糾正甚至要求孩子不可以這麼做,看
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
千禧年出生的我,很難體會台灣經濟起飛時期,那種感覺究竟是什麼。基於一些情懷開始透過接觸台灣老檔車和老玩物來試圖還原過往,但手錶這一塊一直被我所忽略。曾經有款台灣品牌手錶風靡全台且市占率高達80%,但如今眾人遺忘了它。
Thumbnail
千禧年出生的我,很難體會台灣經濟起飛時期,那種感覺究竟是什麼。基於一些情懷開始透過接觸台灣老檔車和老玩物來試圖還原過往,但手錶這一塊一直被我所忽略。曾經有款台灣品牌手錶風靡全台且市占率高達80%,但如今眾人遺忘了它。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News