我在emacs中编辑Mathematica代码.Mathematica的希腊字母的明文表示看起来像
\[Alpha], \[Beta], \[Gamma], ...
Run Code Online (Sandbox Code Playgroud)
我不介意输入这些,但结果代码很大,看起来很笨重,例如:
k[\[Beta]_,z_]:=z^(\[Beta]/2) Hypergeometric2F1[\[Beta]/2,\[Beta]/2,\[Beta],z];
Run Code Online (Sandbox Code Playgroud)
有没有办法使emacs自动显示某些字符串(如\[Alpha])作为其他字符串(如alpha的unicode字符)?注意,我不想实际用另一个字符串替换一个字符串(如果我理解的话,这是缩写的缩写),因为Mathematica仍然可以正确读取该文件.
是的,有办法.Plain 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)))))))))
Run Code Online (Sandbox Code Playgroud)
EmacsWiki提供了更多解决方案.如果你愿意安装新的软件包,你可以尝试更复杂的东西,比如漂亮的符号模式.