我正在编辑emacs中的Mathematica代码。 Mathematica对希腊字母的明文表示看起来像
\[Alpha], \[Beta], \[Gamma], ...
我不介意输入这些,但结果代码很大,看起来很笨重,例如:
k[\[Beta]_,z_]:=z^(\[Beta]/2) Hypergeometric2F1[\[Beta]/2,\[Beta]/2,\[Beta],z];
有没有办法让emacs自动显示某些字符串(如\[Alpha]
)和其他字符串(如alpha的unicode字符)?注意,我不想实际用一个字符串替换另一个字符串(如果我理解的话,这是缩写的缩写),因为Mathematica仍然可以正确读取该文件。
答案 0 :(得分:5)
是的,有办法。普通的Emacs解决方案是使用compose-region
函数来完成它。此代码段将定义一个函数compose-greek-symbols
,如果font-lock处于活动状态,它将激活当前缓冲区中请求的缩写替换:
(setq
greek-symbols
(loop
;; characters are entered with `ucs-insert'
;; 'α' is "GREEK SMALL LETTER ALPHA"
for ch from ?α to ?ω
collect (let ((str (get-char-code-property ch 'name)))
(setq str
(upcase-initials
(downcase
(replace-regexp-in-string "greek small letter " "" str))))
(cons str ch))))
(defun compose-greek-symbols ()
(interactive)
(font-lock-add-keywords
nil
'(("\\\\\\[\\([^]]+\\)\\]"
(0 (progn (let
((sym (cdr-safe (assoc (match-string 1) greek-symbols))))
(when sym
(compose-region (match-beginning 0)
(match-end 0)
sym)))))))))
EmacsWiki提供情侣more solutions。如果你愿意安装新软件包,你可以尝试更复杂的东西,比如pretty-symbols-mode。