3.2 標題、目錄與錨點
NoteCraftApp 使用文件 第 3 章・撰寫筆記

3.2 撰寫筆記

標題、目錄與錨點

筆記頁的目錄取自 H1 到 H3 標題。這頁說明 H1 與 frontmatter title 的關係、錨點 id 怎麼產生,以及怎麼連到某篇筆記的某個標題。

本頁目錄
  1. 目錄收哪些標題
  2. H1 與 frontmatter 的 title
  3. 錨點 id 怎麼產生
  4. 改標題就會改錨點
  5. 連到某個標題

標題不用另外設定什麼。寫 #、##、###,筆記頁就會有目錄,每個標題也自動有錨點 id。在「原文」框裡改改標題,「筆記頁」框裡的目錄與最下方的錨點 id 會跟著變:

原文guides/http-cache.md可以直接改
筆記頁NoteCraftApp 的實際渲染

快取策略

先說結論:靜態資源給長快取,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這層不進目錄#這層不進目錄
標題產生的目錄與錨點 id。改標題文字,右邊的目錄與 id 跟著變。

目錄收哪些標題

目錄只收 #、##、### 三層,#### 以下不列。沒有任何一層標題的筆記不顯示目錄。

  • 依層級縮排。最上層是這篇實際用到的最高層級:只有 ## 與 ### 的筆記,## 就是最上層
  • 有子標題的項目可以展開、收合。預設全部收合,可以在設定頁的「目錄預設狀態」改成全部展開;目錄標頭的按鈕也能一次展開或收合
  • 目錄標頭顯示各層的數量,例如 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: Installstep-1-install
## Cache-Control 與 ETagcache-control-與-etag
第二個 ## 快取策略快取策略-1

沒有自訂 id 的語法。## 標題 {#my-id} 在 .mdx 會編譯失敗,在 .md 則 {#my-id} 會變成標題文字的一部分。

改標題就會改錨點

id 跟著標題文字走。改了標題文字,指向舊錨點的連結就失效,但不會報錯,只是開啟後停在頁面頂端。

點目錄跳到標題時,網址不會帶上 #…,標題旁也沒有複製連結的按鈕。要連到某個標題,照上面的規則推出 id。

連到某個標題

同一篇筆記裡,直接寫 # 加 id:

Markdown
細節見[快取策略](#快取策略)。

連到別篇筆記,用相對路徑加 #:

guides/setup.md
授權碼流程見 [PKCE](./oauth/flow.mdx#pkce)。

相對路徑會被改寫成 /notes/guides/oauth/flow#pkce,規則見巢狀資料夾與網址。也可以直接寫網址:

Markdown
[PKCE](/notes/guides/oauth/flow#pkce)

/ 開頭的站內連結在部署到子路徑時會自動補上前綴,見部署到子路徑。開啟帶 # 的網址時,頁面會捲到該標題。

在 GitHub 上修改這一頁