Unofficial Markdown embed、小語法、大影響
幾日前(2024-09-30),我意外在論壇上發現 Obsidian 支援一個小語法:
![some_note](some_note.md#section_name)
其作用是,將 some_note.md
的指定 section_name
段落,embed 到眼前的 Markdown 文件裡直接顯示。
這個 embed 的需求不是什麼新概念,從最早的 HTML 的 iframe 跟 embed 到後來 Jekyll 的 include ,都有類似的用法。
但 Obsidian 所支援的這語法,方便而直覺,因為跟原本 embed 圖檔、PDF的語法相近,例如:
![some_picture](some_picture.jpg)
![some_document](some_document.pdf)
而其後的 #
後綴,也跟 URL 的標準用法一致,例如:
https://url.spec.whatwg.org/#dom-url-hash
(註:上述直接指向目標網頁的 “dom-url-hash” 的段落)
可說是最接近自然預期的理想語法了。
筆記需求
那,這有什麼影響?
以近日看到 Fourdollars 於 TOSSUG 的臉書分享了一篇文章 🤫 Unlocking secret ThinkPad functionality for emulating USB devices | Andrey Konovalov 為例。
若我想整理心得到筆記裡的話,要編輯到的地方可能有好幾處:
Fourdollars, 李世元, Shih-Yuan Lee.md
- 此處留個標記。因為日後可能會以:“…印象中 Fourdollars 好像曾分享過一篇文章…”像這樣的方式回憶起來。
Andrey Konovalov.md
- 於原作者的條目下,記錄主要內容。
ACPI.md
- 標記用到
acpixtract
,iasl
的實際案例。
- 標記用到
FT2232H.md
- 提到用
flashrom
跟 FT2232H 刷 Flash 記憶體的方式。
- 提到用
SPI.md
- 提到刷主機板上 SPI 晶片 的問題。
USB.md
- 關聯到 USB OTG, USB Raw Gadget 的知識。
ThinkPad.md
- 文中 提到 ThinkPad X1 Carbon 機型。
XPS 13.md
- 文尾提到 XPS 13 也能開啟同樣功能。
算起來至少有 8 個地方。
那麼,該怎麼編輯?
複本法
若採“複本法”,即在一處寫下來,然後複製到其他 7 處。
雖能留下內容,但會遇到困境如下:
- 有 8 處重複的文本內容
- 若其中一處修改,必須同步更新其他 7 處
- 若無法同步更新,則會產生資料不一致,而折損對資料的信任感
連結法
若採“連結法”,即在一處寫下來,再以 URL 捷徑、內部連結、等傳送門機制,轉連接到其他 7 處。
此法雖能避免重複內容,但缺點也很明顯。就是只看 URL 跟連結,不易回想起相關的心得內容 ,以致於搜尋瀏覽時,容易跳過。而若要一一點擊進去看,則效率低落,而且容易分神。
分拆法
而介於“複本法”與“連結法”的之一作法,是將心得的內文依主題分拆,而分別存放到對應的筆記條目去。例如,分拆部分內容,而記到 ACPI 、 USB、 等等的條目下,再附連結回原始心得文本。
這樣作雖可避開內容重複的問題,卻無可避免的造成筆記內容的支離破碎,而不易吸收跟重用。更要命的是,要分拆、分類、編修多處文件,才能記好一份心得。這成本太高,難以持續。
Embed 法
綜上所述, embed 法,也就是最開頭提到的功能,其實就是(就我所知的)最好的解答。
一行簡單的語法就能重複引用並顯示到多個地方,同時變更編輯只在原始條目一處,從根本上就滿足資料的一致性。
案例: TODO 用法
每個專案有各自的 TODO list , 自己也有個人的總 TODO list 清單,該如何組織?
假設個人總清單為 TODO.md
,並有其他專案 Project01.md
, Project02.md
,例舉測試內容如下:
-
TODO.md
:## My TODOs - [ ] task01 - [ ] task02 - [x] task03 ## Project01 ![Project01](Project01.md#TODO) ## Project02 ![Project02](Project02.md#TODO)
-
Project01.md
:## TODO - [x] task01 - [ ] task02 - [ ] task03 ## Notes ... blahblah ...
-
Project02
:## TODO - [ ] task01 - [x] task02 - [ ] task03 ## Notes ... blahblah ...
在 Obsidian 下, TODO.md
總清單的瀏覽效果如下:
如此安排的好處如下:
- 在個人
TODO.md
總清單,可一處集成顯示所有他處的 TODO list- 方便每日例行檢視,而不用再一一點開每個子項目
- 各個專案的文件專注顯示並維護自己局部的 TODO list
- 在 embed 的框頁面 裡,不能直接編輯內容。而是,注意到右邊有個連接圖示,點入進到對應的頁面再編輯。
- 另外,我意外發現,在 embed 的框頁面裡,checkbox 是可以直接 toggle 更新的。
小語法、大影響
從上述的討論可以瞭解到,此一 Embed 的語法,不僅僅只是方便顯示的功能而已,而是會聯動到知識內容的整體組織方法。
改變有多大,還不曉得。因為發現這才幾天的時間,目前還在摸索適應的重構中。
但至少最明顯的差異之一是,不用再糾結於某個段落要放分類 A ,還是放分類 B 。在新方法下,可以不用作選擇,直接全都要。