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

如何让Emacs显示与实际存储的字符不同的字符?,emacs,elisp,Emacs,Elisp,我想使用Elisp为Emacs实现动态文本替换(只替换显示,不替换实际存储的文件) 例如,在LaTeX文档中,我想键入\alpha,并让Emacs将其显示为α,这样更易于阅读。但是在结果.tex文件中,我仍然希望保存\alpha,而不是α。(备注:我可以自己使用XeTeX或LuaTeX直接支持UTF-8。但出于协作和日志要求的原因,我不希望UTF-8字符直接保存在.tex文件中。或者,我可以在AUCTeX中使用预览。但这在编辑公式时没有帮助) 一个现有的示例是在组织模式下,当我们键入[[link

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

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

一个现有的示例是在组织模式下,当我们键入
[[link][name]]
时,在键入最后一个
]
之后,显示的文本仅替换为带有超链接的名称。另一方面,保存此文件时,保存的内容是原始的
[[link][name]]
,与显示的内容不同

有什么办法可以实现吗


备注:Emacs手册的章节到此结束。但是,我需要指定起点和终点,而不是替换所需的字符串。这意味着我需要在每个用户输入后进行搜索,以确定起点和终点。由于算法的性能和复杂性,这看起来不切实际。

一种方法是为相关模式添加字体锁定关键字,并使用
合成区域
显示新图示符以代替旧字符串:

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