教學 · Word → Markdown

Word 變成 Markdown 時留下了什麼

「保留格式」這句話有兩個意思,你指的是哪個,決定你會不會滿意轉出來的東西。

留下來的是那副骨架:標題、清單、表格、強調 —— 說明這份文件是怎麼搭起來的那部分。另一半,也就是它的樣子,沒有地方可去:Markdown 是純文字,而純文字裡沒有字型、顏色、頁邊距和分頁符。這是格式的天花板,不是功能缺了一塊。

去轉換器

結構留得下,外觀留不下

把 .docx 拆開看,每個段落都帶著一個樣式名稱,旁邊才是那堆格式。樣式名稱是有意義的那部分 —— 標題 2、清單段落、引言 —— 格式只是 Word 今天剛好這樣畫而已。

轉換器讀前一件,丟掉後一件。一個標題 2 變成 ##,而不是一段帶著字級的文字。這份 Markdown 落到哪裡,就跟著那邊自己的標題樣式走。

Markdown 裡沒有「字型」和「頁邊距」這兩種語法,所以不存在一種能留住它們的轉法。要頁面長得一模一樣,你要的是 PDF,不是 Markdown。

# 號是從真正的標題樣式裡長出來的

轉之前只有這一件事值得在 Word 裡做,而它決定了你拿到的是分好層的文件還是一大片段落。

你手動調大加粗的那一行,在檔案裡仍然是個普通段落,所以它轉出來是段落。沒有哪條規則能把「16pt 粗體」還原成 ##,又不順手毀掉全文所有加粗強調的句子。

  1. 01在 Word 裡點進你的某個標題,掃一眼樣式庫。highlight 落在「內文」上,兩個字就是全部問題。
  2. 02從樣式庫裡挑標題 1、2、3。樣子會變 —— 不喜歡就去改這個樣式的定義,別退回手動調字級。
  3. 03清單也一樣 —— 用清單按鈕,別手打「1.」加一個 Tab。手打的數字轉出來是死的文字,再也不會自動重新編號。
  4. 04轉完掃一眼輸出裡有沒有 # 和 -。一個 # 都沒有的檔案,說明它從一開始就沒分過層。

能轉過來的東西

一到六級標題,從 Word 的樣式來。Word 的「標題」和「副標題」樣式也對應成 # 和 ##,因為它們說的就是這個意思。

粗體轉 **,斜體轉 _,刪除線轉 ~~。上標和下標保留成 <sup> 和 <sub> —— Markdown 沒有這兩種語法,而丟掉它們會改變一個公式或者一個註腳標記的意思。

連結、任意層數的編號和項目清單、「引言」和「顯著引言」樣式轉成的引言區塊,以及「程式碼」「預先格式化」樣式的段落轉成的圍籬程式碼區塊。

Word 裡
一個嵌套的項目清單,
和一個從 3 開始的編號清單
Markdown
- Outer
  - Inner
- Second

3. Third
4. Fourth

會被丟掉的,以及為什麼

字型、字級、顏色、醒目提示、對齊、縮排、行距、分頁符、頁首、頁尾、頁邊距。全都是屬於一張紙的排版,而 Markdown 不是一張紙。

底線是最容易讓人意外的一個。Markdown 沒有底線,而最接近的東西 —— 連結 —— 比什麼都不做更糟,所以帶底線的文字出來是純文字。

追蹤修訂和註解會沒:你拿到的是定稿,不是編輯過程。文字方塊、SmartArt、圖表也留不下來,只有裡面的文字(如果有)能留。Word 還會把它沒能對應上的樣式告訴轉換器,那些提示顯示在輸出上方,去重之後最多顯示八條,後面跟一句一共還有多少條。

表格轉得過來,合併儲存格轉不過來

表格變成標準的直線表格。格子裡的直線會轉義成 \|,這樣一格裡有根直線不會把整列劈成兩半;比最寬那列短的列會補齊,表格保持是個矩形。

合併儲存格是例外,而且是硬的:Markdown 沒有 colspan 和 rowspan。跨兩欄合併的格子留下它的文字,旁邊多一個空格子。如果這些合併有意義,先在 Word 裡拆掉 —— 很多時候它們只是為了把標題置中。

格子裡的行內格式沒問題 —— 粗體、斜體、程式碼、連結都行。區塊級的不行:一格裡的項目清單出來是幾項擠在一起,因為直線表格的一列只能是一行。

Word 裡
表頭跨兩欄合併
Markdown
| Merged head |  |
| --- | --- |
| 1 | 2 |

圖片,以及 .doc 給不了的那一樣

舊 .doc 檔案是例外。那是 2007 年以前的二進位格式,在你的瀏覽器裡一個位元組一個位元組讀出來,圖片完全沒辦法救回來,精確的清單編號也一樣。文字、標題、表格、粗體斜體是能轉的,而且輸出會說明它走了這條路,不用你自己猜。手邊有 Word 的話,另存成 .docx 結果會乾淨得多。

還有一件值得知道:Word 裡的超連結常帶追蹤參數,從 Google 文件轉存出來的文件還會把連結包在 google.com/url 轉址裡。這兩樣都會被還原成真正的目標網址,而且輸出會說 —— 改了一個連結指向哪裡,是該說一聲的事。

  1. 01內嵌 base64 把每張圖都塞進 Markdown 本身。一個自帶圖片的檔案,不會丟圖 —— 但 data URI 比原圖大三分之一左右,而且在文字編輯器裡看著很難受。
  2. 02留佔位寫成 ![alt](./images/name.png),圖檔歸你自己放。Markdown 要進一個本來就有 images 目錄的版本庫時用這個。檔名是從 alt 文字來的,小寫加連字號。
  3. 03不要圖片就整個刪掉。純文字匯出用這個,但以後想不起來那裡原來有什麼就是它的代價。

先把標題樣式弄對,再把檔案拖進來。什麼都不會上傳 —— .docx 是在這個分頁裡解開的 —— 所以拿一份還沒定稿的機密文件來試正合適。

Word → MD