2

我在 emacs 中编辑 Mathematica 代码。Mathematica 对希腊字母的明文表示看起来像

\[Alpha], \[Beta], \[Gamma], ...

我不介意输入这些,但生成的代码很大而且看起来很笨拙,例如:

k[\[Beta]_,z_]:=z^(\[Beta]/2) Hypergeometric2F1[\[Beta]/2,\[Beta]/2,\[Beta],z];

有没有办法让emacs自动将某些字符串(如\[Alpha])显示为其他字符串(如alpha的unicode字符)?注意,我不想用另一个字符串替换一个字符串(如果我理解正确,这是缩写的作用),因为 Mathematica 应该仍然可以正确读取该文件。

4

1 回答 1

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 提供了更多的解决方案。如果你愿意安装新的包,你总是可以尝试一些更复杂的东西,比如pretty-symbols-mode

于 2013-03-21T21:56:28.580 回答