我想使用Elisp为Emacs实现动态文本替换(仅替换显示,不替换实际存储的文件).
例如,在LaTeX文档中,我想输入\alpha,让Emacs显示它?,因此更容易阅读.但是在结果.tex文件中,我仍然希望\alpha,而不是?保存.(注:我可以自己使用XeTeX或LuaTeX直接支持UTF-8.但由于协作和期刊要求的原因,我不希望将UTF-8字符直接保存在.tex文件中.或者我可以使用预览在AUCTeX.但是当我编辑公式时,这没有帮助)
现有的例子是在org-mode中,当我们输入时[[link][name]],在输入最后一个之后],显示的文本仅被名称替换为超链接.另一方面,保存此文件时,保存的内容是原始内容[[link][name]],与显示的内容不同.
有什么想法可以实现吗?
PS:替换 Emacs手册的文本部分的显示规格接近.但是,我需要指定起点和终点,而不是替换所需的字符串.这意味着我需要在每个用户输入后进行搜索以确定起点和终点.由于算法的性能和复杂性,这看起来不切实际.
一种方法是为相关模式添加字体锁定关键字,并compose-region用于显示新字形代替旧字符串:
(font-lock-add-keywords
'latex-mode `(("\\(\\\\alpha\\)"
(0 (progn (compose-region (match-beginning 1)
(match-end 1) "?")
nil)))))
Run Code Online (Sandbox Code Playgroud)
另请注意,org-mode这种内置功能已经内置,不仅适用于您提到的链接,也适用于类似LaTeX的实体:
(setq org-pretty-entities t)
Run Code Online (Sandbox Code Playgroud)