我喜欢用英文标点而不是中文标点, 但是导出需要上交的报告时需要用中文标点, 因此希望将 org mode buffer 中的英文标点转换为中文标点, 正则表达式替换是不够的, 比如数学环境和代码环境中的 ,
就不应该被替换.
我想只对不导出部分(比如 :noexport:
tag 下)的 paragraph 进行替换, 并且避开数学环境, 代码环境等. 在z自己实现之前, 我想问问有没有已有的包对 org-mode 进行中英文标点转换的?
我喜欢用英文标点而不是中文标点, 但是导出需要上交的报告时需要用中文标点, 因此希望将 org mode buffer 中的英文标点转换为中文标点, 正则表达式替换是不够的, 比如数学环境和代码环境中的 ,
就不应该被替换.
我想只对不导出部分(比如 :noexport:
tag 下)的 paragraph 进行替换, 并且避开数学环境, 代码环境等. 在z自己实现之前, 我想问问有没有已有的包对 org-mode 进行中英文标点转换的?
我写过一个转换标点符号的函数。只处理了我用到的情况。你可以参考下。
(defun my-convert-to-fullwidth-punctuations ()
(interactive)
(let ((cjk "\\([\u4E00-\u9FCC\u3400-\u4DB5\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]\\|[\ud840-\ud868][\udc00-\udfff]\\|\ud869[\udc00-\uded6\udf00-\udfff]\\|[\ud86a-\ud86c][\udc00-\udfff]\\|\ud86d[\udc00-\udf34\udf40-\udfff]\\|\ud86e[\udc00-\udc1d]\\)" )
(punct-before-cjk '(("\"" . "“")
("(" . "(")
("'" . "‘")))
(punct-after-cjk '(("." . "。")
("," . ",")
("!" . "!")
("?" . "?")
(":" . ":")
(";" . ";")
("\"" . "”")
(")" . ")"))))
(pcase-dolist (`(,punct-half . ,punct-full) punct-before-cjk)
(replace-regexp-in-region (concat (regexp-quote punct-half) cjk)
(concat punct-full "\\1")
(point-min)))
(pcase-dolist (`(,punct-half . ,punct-full) punct-after-cjk)
(replace-regexp-in-region (concat cjk (regexp-quote punct-half))
(concat "\\1" punct-full)
(point-min)))))
这不是自己实现最简单吗? 没有包天生满足你这么个人化的需求的. 你把自己写的替换函数放到 org-export-before-processing-hook
或者 org-export-before-parsing-hook
里, 甚至可以不改动 org 源文件, 只改导出的文件.