Markdown 引用語法教學

寫技術文件或學術文章的時候,經常需要在正文中標註「這句話引自某篇論文」或「這個資料來源於某個報告」。Markdown 本身沒有專門的引用(citation)語法,但透過 Markdown 腳註 和 Pandoc 擴展,可以實現從簡單的文獻標註到完整的參考文獻管理。

這篇文章就來講 Markdown 裡怎麼做引用——包括最基礎的腳註引用法,以及更專業的 Pandoc citation 語法。

腳註引用:最簡單的方法

如果你只是偶爾需要在文章裡加幾條引用,用 Markdown 腳註 就夠了。把引用內容直接寫進腳註定義裡:

這項研究表明,程式碼審查能有效減少缺陷率。[^smith2020]

[^smith2020]: Smith, J. (2020). *Code Review Practices in Large-Scale Software Development*. IEEE Software, 37(4), 78-85.

渲染後,正文會出現一個上標數字 ¹,點擊後跳到頁面底部的參考文獻說明。

這種方式的好處是簡單直觀,GitHub、GitLab、Obsidian、Typora 這些平台都支援 [^1] 腳註語法。壞處是——你得手動維護引用格式,比如每條參考文獻的 APA 格式都要自己拼。

說實話,引用不超過五六條的時候,用腳註完全沒問題。但要是寫一篇有幾十條引用的論文或者長篇技術報告,手動管理格式就是噩夢了。這就是 Pandoc citation 發揮作用的地方。

Pandoc Citation 語法:@key 引用

Pandoc 是一個強大的文件轉換工具,它擴展了 Markdown,增加了專門用於學術引用的語法。核心就是 @ 符號。

基本用法

在正文裡用 @citationKey 引用文獻:

程式碼審查對軟體品質有顯著影響 [@smith2020]。

根據 @smith2020 的研究,程式碼審查能減少 60% 的缺陷。

兩種寫法的區別:

  • [@smith2020] — 括號引用(parenthetical),渲染為 (Smith, 2020)
  • @smith2020 — 敘述引用(narrative),渲染為 Smith (2020),適合融入句子

加入前綴和後綴

括號引用裡可以加前綴和後綴:

多項研究證實了這一點 [見 @smith2020; 也參考 @jones2019, 第 3 章]。

資料顯示增長了 30% [@smith2020, p. 45]。

渲染效果:

  • (見 Smith, 2020; 也參考 Jones, 2019, 第 3 章)
  • (Smith, 2020, p. 45)

引用多篇文獻

用分號隔開:

[@smith2020; @jones2019; @wang2021]

渲染後按你指定的引用樣式排列,比如 APA 格式會變成 (Jones, 2019; Smith, 2020; Wang, 2021)

隱藏作者只顯示年份

有時候你已經提到了作者名字,只想顯示年份:

Smith 指出 [-@smith2020] 程式碼審查非常關鍵。

-@ 會省略作者,只渲染 (2020)

準備 BibTeX 檔案

Pandoc citation 的關鍵是 .bib 檔案——一個純文字的參考文獻資料庫。每筆記錄長這樣:

@article{smith2020,
  author  = {Smith, John},
  title   = {Code Review Practices in Large-Scale Software Development},
  journal = {IEEE Software},
  volume  = {37},
  number  = {4},
  pages   = {78--85},
  year    = {2020}
}

@book{jones2019,
  author    = {Jones, Mary},
  title     = {Software Quality Assurance},
  publisher = {Springer},
  year      = {2019}
}

花括號裡的 smith2020jones2019 就是你在正文中用的 citation key。命名規則是「作者+年份」或任意有意義的字串,只要正文和 .bib 檔案裡的 key 對得上就行。

這裡我踩過一個坑:有一回從 Zotero 匯出 BibTeX 檔案,結果 citation key 裡帶了空格(比如 @smith 2020),Pandoc 怎樣都不識別。後來統一把 key 改成無空格的格式(smith2020)就好了。如果你也從 Zotero 匯出,建議裝一個 Better BibTeX 外掛,它會自動產生規範的 citation key。

取得 BibTeX 的幾種方式

來源操作
Google Scholar搜尋文獻 → 點引號按鈕 → 選 BibTeX
Zotero安裝 Better BibTeX 外掛 → 右鍵匯出
Mendeley選文獻 → File → Export → BibTeX
手寫按格式直接建立 .bib 檔案

用 Pandoc 產生參考文獻

有了 .md 檔案和 .bib 檔案,用一條命令就能產生帶參考文獻的文件:

pandoc document.md \
  --citeproc \
  --bibliography=refs.bib \
  -o output.pdf

關鍵參數說明:

  • --citeproc — 啟用引用處理(替代了舊版的 --filter pandoc-citeproc
  • --bibliography=refs.bib — 指定 BibTeX 檔案路徑
  • -o output.pdf — 輸出格式(也可以是 .html.docx 等)

Pandoc 會自動:

  1. 把正文裡的 @key 替換為格式化的引用標註
  2. 在文末產生完整的參考文獻列表(References)
  3. 正文引用和參考文獻列表自動關聯

指定引用樣式

--csl 參數可以切換引用格式:

pandoc document.md \
  --citeproc \
  --bibliography=refs.bib \
  --csl=apa.csl \
  -o output.pdf

CSL(Citation Style Language)檔案可以從 Zotero Style Repository 免費下載,支援超過一萬種樣式。常見的幾種:

樣式檔案領域
APA 7thapa-7th-edition.csl社會科學、心理學
IEEEieee.csl工程、電腦科學
Chicagochicago-author-date.csl人文學科
MLA 9thmodern-language-association.csl語言、文學

引用工具鏈比較

除了直接用 Pandoc,還有幾個工具鏈也支援 Markdown 引用:

工具引用語法文獻格式特點
Pandoc@keyBibTeX / CSL最通用,命令列工具
Quarto@keyBibTeX / CSL基於 Pandoc,更易用,支援互動文件
R Markdown@keyBibTeX / CSLR 語言生態,適合資料分析
Jekyll Scholar{% cite key %}BibTeXJekyll 部落格專用
MyST@key / DOI 連結BibTeX支援 DOI 自動識別

Quarto 是 Pandoc 的上層封裝,語法完全一樣,但設定更簡單。如果你不想折騰命令列參數,Quarto 是個不錯的選擇——在 _quarto.yml 裡設好 bibliography 和 csl 就行,連 pandoc 命令都不用手動輸入。

腳註 vs 引用:什麼時候用哪個

這兩個東西容易搞混,簡單說一下區別:

特性腳註 [^1]引用 @key
用途補充說明、備註、簡單引用學術引用、參考文獻管理
格式管理手動自動(透過 CSL 樣式)
參考文獻列表不自動產生自動產生
適用平台GitHub、GitLab、Obsidian 等Pandoc、Quarto、R Markdown
複雜度

我的建議是:

  • 寫部落格、README、技術文件 → 用腳註 [^1],簡單夠用
  • 寫論文、研究報告、書籍 → 用 Pandoc citation @key,自動管格式
  • 在 GitHub 上討論學術問題 → 用腳註手動寫引用格式(GitHub 不支援 Pandoc citation)

常見問題

GitHub 上能用 @key 引用嗎?

不能。GitHub 的 Markdown 渲染器不支援 Pandoc citation 語法。在 GitHub 上做引用,只能用腳註方式:

根據研究[^1],這個方案可行。

[^1]: Smith, J. (2020). *Code Review Practices*. IEEE Software, 37(4), 78-85.

Pandoc 提示找不到 citation key 怎麼辦?

檢查這幾點:

  1. .bib 檔案裡的 key 和正文裡的 @key 是否完全一致(區分大小寫)
  2. --bibliography 參數指定的檔案路徑是否正確
  3. .bib 檔案的語法是否有誤(多餘的逗號、缺少花括號等)

怎麼在 Obsidian 裡做學術引用?

Obsidian 原生只支援腳註 [^1],不認識 Pandoc 的 @key 語法。但可以裝社群外掛來解決:

  • Pandoc Plugin — 在 Obsidian 裡直接呼叫 Pandoc 匯出帶引用的文件
  • Citations Plugin — 連接 Zotero 資料庫,在 Obsidian 裡搜尋和插入引用

引用樣式怎麼改?

--csl 參數指向的 .csl 檔案就行。比如從 APA 改成 IEEE:

pandoc doc.md --citeproc --bibliography=refs.bib --csl=apa.csl -o output.pdf

# IEEE 格式
pandoc doc.md --citeproc --bibliography=refs.bib --csl=ieee.csl -o output.pdf

同樣的正文,換個 CSL 檔案,輸出的引用格式和參考文獻列表就會自動調整。

參考來源