3.2 撰寫筆記
標題、目錄與錨點
筆記頁的目錄取自 H1 到 H3 標題。這頁說明 H1 與 frontmatter title 的關係、錨點 id 怎麼產生,以及怎麼連到某篇筆記的某個標題。
標題不用另外設定什麼。寫 #、##、###,筆記頁就會有目錄,每個標題也自動有錨點 id。在「原文」框裡改改標題,「筆記頁」框裡的目錄與最下方的錨點 id 會跟著變:
快取策略
先說結論:靜態資源給長快取,HTML 不快取。
Cache-Control 與 ETag
什麼時候要清快取?
OAuth 2.0 流程
Step 1: Install
這層不進目錄
錨點 id
- H2快取策略
#快取策略 - H3Cache-Control 與 ETag
#cache-control-與-etag - H3什麼時候要清快取?
#什麼時候要清快取 - H2OAuth 2.0 流程
#oauth-20-流程 - H3Step 1: Install
#step-1-install - H4這層不進目錄
#這層不進目錄
目錄收哪些標題
目錄只收 #、##、### 三層,#### 以下不列。沒有任何一層標題的筆記不顯示目錄。
- 依層級縮排。最上層是這篇實際用到的最高層級:只有
##與###的筆記,##就是最上層 - 有子標題的項目可以展開、收合。預設全部收合,可以在設定頁的「目錄預設狀態」改成全部展開;目錄標頭的按鈕也能一次展開或收合
- 目錄標頭顯示各層的數量,例如
H2×4 · H3×6 - 捲動內文時,目錄會標出目前讀到的標題
- 主區夠寬時目錄固定在右側;不夠寬時改成內文上方可折疊的面板
跳層也可以,例如 ## 底下直接接 ####。只是 #### 不會出現在目錄裡。
H1 與 frontmatter 的 title
頁首的大標題來自 frontmatter 的 title。沒寫 title 時,用內文第一個 # 開頭的那一行;程式碼區塊(``` 或 ~~~ 圍住的)與 {/* … */} 註解裡的不算,例如 bash 範例裡的 # 安裝相依套件 不會變成標題。
內文的 # 標題不會因此被隱藏:它照樣顯示在內文,也列入目錄。所以:
- 寫了 frontmatter
title的筆記,內文從##開始,標題才不會出現兩次 - 沒有 frontmatter 的純 Markdown,用一個
#當標題也可以,只是頁首與內文會各出現一次
title 的其他補值規則見 Frontmatter。
錨點 id 怎麼產生
每個標題依文字自動產生 id,規則和 GitHub 的標題錨點相同:
- 英文轉成小寫
- 空白換成
- - 標點符號移除,包括全形的「?」「、」;
-與_保留 - 中文、數字照樣保留
- 行內 code 裡的文字也算進去
- 同一篇裡文字相同的標題,第二個起依序加
-1、-2
| 標題 | id |
|---|---|
## 快取策略 | 快取策略 |
## 什麼是 MDX? | 什麼是-mdx |
## OAuth 2.0 流程 | oauth-20-流程 |
## Step 1: Install | step-1-install |
## Cache-Control 與 ETag | cache-control-與-etag |
第二個 ## 快取策略 | 快取策略-1 |
沒有自訂 id 的語法。## 標題 {#my-id} 在 .mdx 會編譯失敗,在 .md 則 {#my-id} 會變成標題文字的一部分。
改標題就會改錨點
id 跟著標題文字走。改了標題文字,指向舊錨點的連結就失效,但不會報錯,只是開啟後停在頁面頂端。
點目錄跳到標題時,網址不會帶上 #…,標題旁也沒有複製連結的按鈕。要連到某個標題,照上面的規則推出 id。
連到某個標題
同一篇筆記裡,直接寫 # 加 id:
細節見[快取策略](#快取策略)。連到別篇筆記,用相對路徑加 #:
授權碼流程見 [PKCE](./oauth/flow.mdx#pkce)。相對路徑會被改寫成 /notes/guides/oauth/flow#pkce,規則見巢狀資料夾與網址。也可以直接寫網址:
[PKCE](/notes/guides/oauth/flow#pkce)/ 開頭的站內連結在部署到子路徑時會自動補上前綴,見部署到子路徑。開啟帶 # 的網址時,頁面會捲到該標題。