若要避免 Markdown 程式碼區塊後的文字變成程式碼,請移除文字開頭的定位字元或四個空格縮排。如果你也想在 Mac 上的 Obsidian 中看到段落縮排,請讓 Markdown 維持不縮排,並使用 CSS 加上間距。
為什麼段落會變成另一個程式碼區塊?
結束圍欄式程式碼區塊,只會結束該區塊,不會停用下方文字的縮排語法。在最外層,開頭有四個或更多空格就可能開始另一個縮排式程式碼區塊。因此,即使只有第一個區塊有圍欄,以下範例仍包含兩個程式碼區塊。CommonMark:縮排式程式碼區塊。
```text
Sample output
```
This should be a normal paragraph.
關鍵在於不想要的文字是屬於原本的圍欄式區塊,還是開始了新的區塊。如果結束圍欄仍出現在程式碼中,請確認它使用與開啟圍欄相同的字元,且反引號或波浪號的數量至少相同。若是最外層區塊,請將兩個圍欄都放在左邊界,方便檢查。GitHub Flavored Markdown:圍欄式程式碼區塊。
加入空白行無法消除四空格縮排。相對地,緊接在一般段落後的縮排文字,可能仍是該段落的一部分,因為縮排式程式碼區塊不能中斷段落。這說明了為什麼筆記中其他地方看似相同的縮排有時會有不同效果。CommonMark:縮排式程式碼區塊。
如何在 Mac 上還原成一般段落?
在 Obsidian 中切換至 Source mode,檢查實際的圍欄和開頭的空白字元。使用狀態列中的編輯模式控制項,或選擇 Settings → Editor → Default editing mode → Source mode。Obsidian 說明此模式會依照原樣顯示 Markdown 語法。檢視與編輯模式。
找到結束圍欄後的第一行文字。刪除開頭的空格或定位字元,讓文字位於左邊界。其他有相同問題的後續段落也照此處理。保留預期程式碼區塊內的縮排。
使用以下完整的 Markdown 範例作為參考:
```text
Sample output
```
This is a normal paragraph with **bold text**.
This is another normal paragraph.
為了讓原始碼更易讀,請在結束圍欄後保留空白行。GitHub 明確建議在圍欄式程式碼區塊前後加入空白行,不過圍欄語法本身並不要求這麼做。本文用來顯示範例的四個反引號外層圍欄,能讓內層的三個反引號保持可見。建立及醒目標示程式碼區塊。
切換至 Reading view 檢查結果;在 macOS 上,Cmd+E 可在編輯與閱讀模式之間切換。確認說明文字使用一般段落格式,且 bold text 會以粗體顯示。Live Preview 會隱藏大部分 Markdown 語法,並在游標周圍顯示語法,因此請使用 Source mode 進行診斷,並以 Reading view 做最後的視覺檢查。檢視與編輯模式。
在四空格縮排中只移除兩個空格,或許能避免文字在最外層被解析為程式碼,但不會產生可見的段落縮排。Obsidian 說明相鄰的一般空格在呈現的文字中會合併。原始碼中的縮排和顯示出的縮排是兩種不同需求。基本格式語法。
如何在 Obsidian 中保留可見的段落縮排?
若要縮排首行,請使用一般段落搭配 CSS 片段。這樣能將段落結構與呈現方式分開:Markdown 保持易讀,CSS 則提供視覺間距。Obsidian 支援自訂片段,以及用來將樣式套用至指定筆記的 cssclasses 屬性。CSS 片段。
以下是示意用的自訂樣式,根據 Obsidian 文件所述的 class 機制和 CSS 段落縮排編寫。這不是 Obsidian 內建的格式指令。它會套用至呈現後的段落元素;請在 Reading view 檢查外觀。
新增筆記屬性和樣式表
將這個屬性區塊放在筆記最開頭。如果筆記已經有屬性區塊,請在其中加入 cssclasses,不要再建立第二個區塊。程式碼圍欄後的文字請保持不縮排。
---
cssclasses:
- paragraph-indent
---
建立一個名為 paragraph-indent.css 的純文字檔,並放入以下完整樣式表:
.paragraph-indent p {
text-indent: 2em;
}
p 選取器會指定自訂筆記類別內的段落。text-indent 屬性會將首行向內移;換行後的文字仍從原本位置開始。2em 是示意用的值,你可以自行調整。它不會在筆記中插入空格。MDN:text-indent。
在 Mac 上,請使用純文字編輯器處理樣式表。如果使用 TextEdit,請在儲存前選擇 Format → Make Plain Text。確認最終檔名為 paragraph-indent.css,而不是富文字文件或以 .css.txt 結尾的檔案。Apple 說明,轉換為純文字會移除文件格式,且通常會以 .txt 副檔名儲存。在 Mac 上使用 TextEdit 建立、開啟和轉換文件。
- 在 Obsidian 中,開啟
Settings → Appearance → CSS snippets。 - 選擇
Open snippets folder,並將paragraph-indent.css放入該資料夾。 - 如果清單中沒有顯示該檔案,請選擇
Reload snippets。 - 開啟該片段的切換鈕,然後在
Reading view檢查筆記。CSS 片段。
這個寬泛的範例會縮排所選筆記中符合條件的所有呈現段落,包括其他結構內的段落。它不會只套用於程式碼區塊後緊接的段落。若要還原樣式,請停用片段,或移除筆記的 paragraph-indent 類別。
這份樣式表無法修正仍被解析為程式碼的文字:它的選取器指定的是段落。請先修正空白字元。此外,這個段落選取器並非完整的 Live Preview 編輯器樣式;不必期待編輯器和閱讀檢視中的外觀完全一致。
在清單中或 GitHub 上會有什麼不同?
清單內的縮排會決定內容是否屬於該清單項目。不要不加區分地移除縮排。在以下完整範例中,圍欄和說明文字都有三個開頭空格,與 1. 後方的內容對齊。說明文字仍是該項目中的段落。GitHub Flavored Markdown:清單項目。
1. Review the sample.
```text
Sample output
```
This explanation belongs to the same list item.
若使用其他清單標記,請根據標記及其後的空格計算延續縮排。若一律要求移除所有縮排,會破壞預期結構。如果說明文字應位於清單之外,請將它移回左邊界。GitHub Flavored Markdown:清單項目。
Obsidian 說明,除了自有擴充功能外,它也支援 CommonMark 和 GitHub Flavored Markdown。但這不代表 Obsidian 的 CSS 片段是可攜式的 Markdown 格式:該片段需要在 Obsidian 中另外設定。移動筆記時,請檢查目的地實際使用的呈現器。Obsidian 也說明,HTML 元素內的 Markdown 不會被處理,因此使用 HTML 包裝會改變格式條件,並非通用的解決方案。Obsidian Flavored Markdown。
該選擇哪種修正方式?
使用符合預期結果的最小改動:
- 程式碼後的一般文字: 移除段落開頭的定位字元或四個空格縮排。
- 清單項目內的段落: 保留該項目內容所需的縮排。
- 在 Obsidian 中顯示首行縮排: 使用未縮排的文字,搭配指定範圍的 CSS 範例。
- 在多個應用程式中檢視文件: 保持 Markdown 結構清晰,並在各個目的地分別確認呈現方式。
檢查完成的筆記時,請問自己兩個問題:文字是否被解析為段落?該段落是否有你想要的間距?先修正 Markdown 結構,再於呈現器支援的地方套用視覺縮排,並讓樣式表與文字內容分開。
來源
- CommonMark 規範 — 縮排式程式碼區塊 — CommonMark。
- GitHub Flavored Markdown 規範 — GitHub。
- 建立及醒目標示程式碼區塊 — GitHub Docs。
- 基本格式語法 — Obsidian 說明。
- 檢視與編輯模式 — Obsidian 說明。
- CSS 片段 — Obsidian 說明。
- Obsidian Flavored Markdown — Obsidian 說明。
- text-indent — MDN Web Docs。
- 在 Mac 上使用 TextEdit 建立、開啟和轉換文件 — Apple 支援。