不用零宽空格在 org-mode 中标记中文的办法

我提供的只是一个例子,肯定不能覆盖所有情况

建议根据自己的需求添加相应的正则

好的,谢谢,了解啦。

(defun eli-strip-ws-maybe (text _backend _info)
    (let* ((text (replace-regexp-in-string
                  "\\(\\cc\\) *\n *\\(\\cc\\)"
                  "\\1\\2" text));; remove whitespace from line break
           ;; remove whitespace from `org-emphasis-alist'
           (text (replace-regexp-in-string "\\(\\cc?\\) \\(.*?\\) \\(\\cc\\)"
                                           "\\1\\2\\3" text))
           ;; restore whitespace between English words and Chinese words
           (text (replace-regexp-in-string "\\(\\cc\\)\\(\\(?:<[^>]+>\\)?[a-z0-9A-Z-]+\\(?:<[^>]+>\\)?\\)\\(\\cc\\)"
                                           "\\1 \\2 \\3" text))
           (text (replace-regexp-in-string "\\(\\cc\\) ?\\(\\\\[^{}()]*?\\)\\(\\cc\\)"
                                           "\\1 \\2 \\3" text)))
      text))

我不确定是否会有副作用,毕竟个人测试条件有限。

谢谢,目前可用,主要自己对正则只是刚入门水平。

我怎么遇到好多小问题,已经用 emacs -Q 测试过了,请问都是正则导致的吗?

在建立二级标题的时候,如果标题是中文,会出现空格被吞掉的情况

左图是 emacs -Q,右图是在 emacs -Q 的基础上加上了文中提到的 org 配置

抱歉,已更新正则

edit: 再次更新

1 个赞

感谢大佬,修复速度太快了,我也得好好学学正则了,免得遇到什么小问题都得来问 :joy:

话说最终版本是什么,看乱了已经 :rofl:

隐藏空格一直是一楼的,导出时过滤空格的正则可以用最新的,不过建议根据自己的习惯和需求自己定义

关于导出时移除零宽空格字符,在org-mode邮件列表里也有一些讨论,此外这个thread也讨论了不使用零宽空格标记中文的方法。

一直习惯在读推理小说的时候用org-mode做笔记,需要标记一些中文关键词,今天发现用radio-target更适合这个场景,可以在创建target的地方写点概括性的描述

那也未必, 这是我用 prettify symbol 设置的零宽字符的显示:

image

(("​" . 8248))

大部分情况下感观都还不错

2 个赞