【解决了】怎样去除 org-mode 导出的 html 中的中文字符内的空格?

情况是这样的,因为整个 org 文件是中英文混排的,可能一段中文一段英文。

中英文段落目前都用了 fill-paragraph,可能出现这样的一个段落:

在一些节中,我使用了英语,主要是因为,这一方面,在西方的文学作品中更广为人知。他
们中的一些词,都对应着中文的同一个词,很难去很好的说明。当然,我会尽量给关键词加
上中文。

它生成的 html 为:

<p>
"在一些节中,我使用了英语,主要是因为,这一方面,在西方的文学作品中更广为人知。他 们中的一些词,都对应着中文的同一个词,很难去很好的说明。当然,我会尽量给关键词加 上中文。"
</p>

注意,在他 们和末尾的加 上这样的换行的地方,有着空格。

本来全都是英语的话没什么问题,但是坏在这里是中文,就会导致生成的 html 变成这样的:

突然在字符中插入了空格。

那么问题来了,这个空格怎么去掉呢?

我一开始是在 #+OPTIONS 里面加上 \n:t,可以让 html 的换行的地方与 org mode 一样,但是,对于不同大小的屏幕来说,这不是一个很好的方法,可能会在一些小屏幕上出现问题(没到换行的地方提前换行了之类的)。

现在进行了一点 hack,我在前面的基础上,把生成的 html 用其他东西过滤了一下 <br > 字符,但是我担心以后遇到需要使用 <br > 的情况就麻烦了。

(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)))

摘自 spacemacs chinese layer

2 个赞

哦哦,明白了,谢谢!

我也用上了,谢谢!

那 github 上的效果是不是没办法改了 :joy: