去除 org-mode 輸出 HTML 時產生多餘的空格

使用 org-mode 產生 HTML 網頁的時候,偶而會看到中文字中間會夾雜著一個空 白符號,其狀況如下圖,這到底是怎麼一回事?

會出現這個問題,是因為在 org-mode 中啟用了 auto-fill-mode,會自動將一 行控制在 80 的文字以內,而換行符號則會在 org-mode 轉換成 HTML 的過程中, 被置換為空白符號。這個空格在英文中並不是問題,但是在非英語系的語言中, 可能就會產生令人討厭的感覺。

由於目前這個問題尚未被 org-mode 官方修正,因此讓我們透過 emacs 的 defadvice 功能,來 修正 一下這個問題吧,請在你的 .emacs 加上

(defadvice org-html-paragraph (before org-html-paragraph-advice
                                      (paragraph contents info) activate)
  "Join consecutive Chinese lines into a single long line without
unwanted space when exporting org-mode to html."
  (let* ((origin-contents (ad-get-arg 1))
         (fix-regexp "[[:multibyte:]]")
         (fixed-contents
          (replace-regexp-in-string
           (concat
            "\\(" fix-regexp "\\) *\n *\\(" fix-regexp "\\)") "\\1\\2" origin-contents)))

    (ad-set-arg 1 fixed-contents)))

這樣使用 org-mode 輸出 HTML 的時候,就不會再出現多餘的空格了 :)

這個問題實際上是網友 Jerry 告訴我我才注意到的,最近因為將整個部若格產 生器改用自己撰寫的 emacs-blogit 來產生,才又再次重視這個問題。