如何让Emacs显示不同于实际存储的字符?

8
我希望使用Elisp为Emacs实现动态文本替换(仅替换显示,不替换实际存储的文件)。例如,在LaTeX文档中,我想输入\alpha,然后让Emacs将其显示为α,这样更容易阅读。但在结果.tex文件中,我仍然希望保存\alpha,而不是α。(注:我可以自己使用XeTeX或LuaTeX直接支持UTF-8。但由于合作和期刊要求的原因,我不希望UTF-8字符直接保存在.tex文件中。或者我可以在AUCTeX中使用预览。但当我编辑公式时,这并没有帮助)。一个现有的例子是在org-mode中,当我们输入[[link][name]]后,最后一个]键入后,显示的文本会被替换为只有名称的超链接。另一方面,当保存此文件时,保存的内容是原始的[[link][name]],与显示的不同。有什么想法可以实现这个功能吗?PS:Emacs手册的“替换文本的显示规范”部分接近。但是,我需要指定起始点和结束点,而不是要替换的字符串。这意味着我需要在每次用户输入后进行搜索以确定起始点和结束点。由于性能和算法的复杂性,这看起来不现实。
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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接