2013-03-21 4 views
2

Emacs에서 Mathematica 코드를 편집 중입니다. 나는이를 입력 괜찮다 Emacs 디스플레이 전용 약어

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

처럼 그리스 문자에 대한 티카의 일반 텍스트 표현이 보이지만, 결과 코드가 크고 못생긴 - 찾고있다, 예를 들면 :
k[\[Beta]_,z_]:=z^(\[Beta]/2) Hypergeometric2F1[\[Beta]/2,\[Beta]/2,\[Beta],z]; 

만들 수있는 방법이 있나요 이맥스는 특정 문자열 (예 : \[Alpha])을 다른 문자열 (예 : 유니 코드 문자)로 표시합니다. Mathematica가 파일을 올바르게 읽을 수 있어야하기 때문에 한 문자열을 다른 문자열로 대체하고 싶지는 않습니다 (정확히 이해하면 약어가됩니다).

+0

다른 모드 (예 : org-mode)가 수행하는 방식은 보이지 않는 사양입니다. 구현할 수있는 약간의 프로젝트 일지 모르지만, http://www.gnu.org/software/emacs/manual/html_node/elisp/Invisible-Text.html – Rob

+0

[Emacs가 다른 것을 표시하는 방법 문자가 실제로 저장된?] (http://stackoverflow.com/questions/13600160/how-to-let-emacs-display-a-different-character-from-that-actually-stored) – Francesco

답변

5

예, 방법이 있습니다. 일반 이맥스 솔루션은 정확하게 수행하는 compose-region 함수를 사용하는 것입니다. 이 조각은 당신에게 글꼴 잠금이 활성화 된 경우 현재 버퍼에있는 요구 된 약어 교체를 활성화하는 기능 compose-greek-symbols를 정의합니다 :

(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과 같이 더 복잡한 것을 시도 할 수 있습니다.