8

我想使用 Elisp 为 Emacs 实现动态文本替换(仅替换显示,不替换实际存储的文件)。

例如,在 LaTeX 文档中,我想键入\alpha,然后让 Emacs 将其显示为α,这样更易​​于阅读。但在结果.tex文件中,我仍然想要\alpha, 而不是α被保存。(备注:我可以自己使用XeTeX或LuaTeX直接支持UTF-8。但出于合作和期刊要求,我不希望将UTF-8字符直接保存在.tex文件中。或者我可以使用预览在 AUCTeX 中。但这在我编辑公式时无济于事)

一个现有的例子是在 org-mode 中,当我们输入 时[[link][name]],在输入 last 之后],显示的文本只被名称替换,带有超链接。另一方面,当保存这个文件时,保存的内容是原始的[[link][name]],与显示的不同。

任何想法如何实施?

PS:替换Emacs 手册的文本部分的显示规范关闭。但是,我需要指定起点和终点,而不是替换所需的字符串。这意味着我需要在每个用户输入后进行搜索以确定起点和终点。由于算法的性能和复杂性,这看起来不切实际。

4

1 回答 1

6

一种方法是为相关模式添加字体锁定关键字,并用于compose-region显示新字形来代替旧字符串:

(font-lock-add-keywords
 'latex-mode `(("\\(\\\\alpha\\)"
                (0 (progn (compose-region (match-beginning 1)
                                          (match-end 1) "α")
                          nil)))))

另请注意,org-mode它已经内置了这种功能,不仅适用于您提到的链接,还适用于类似 LaTeX 的实体:

(setq org-pretty-entities t)
于 2012-11-28T07:55:43.610 回答