5

「きれいなエンティティ」の動作を、Emacs 組み込みの から に移植しようとしていorg-modeましlatex-modeprettify-symbols-mode。このモードはfont-lock-mode、バッファ内の文字シーケンスを単一の (Unicode) 文字として表示するために使用します。デフォルトでは、インスタンスの emacs-lisp コード

(lambda () t)

になる

(λ () t)

ただし、文字シーケンスを空白などの文字で区切る必要があるようです。たとえば、私のセットアップでは、交換

\alpha \beta -> α β`

動作しますが、文字列が分離されていない場合は失敗します。

\alpha\beta -> \alphaβ

これは具体的には問題です。なぜなら、この修飾を使用して量子力学的方程式をより読みやすくしたかったからです。

|\psi\rangle -> |ψ⟩

を使用してこの区切り記号の問題を回避することは可能prettify-symbols-modeですか? そうでない場合はfont-lock-mode、下位レベルで使用することで可能ですか?

4

2 に答える 2

6

必要なことを行うコードは次のとおりです。

(defvar pretty-alist
  (cl-pairlis '("alpha" "beta" "gamma" "delta" "epsilon" "zeta" "eta"
                "theta" "iota" "kappa" "lambda" "mu" "nu" "xi"
                "omicron" "pi" "rho" "sigma_final" "sigma" "tau"
                "upsilon" "phi" "chi" "psi" "omega")
              (mapcar
               (lambda (x) (make-char 'greek-iso8859-7 x))
               (number-sequence 97 121))))
(add-to-list 'pretty-alist '("rangle" . ?\⟩))
(defun pretty-things ()
  (mapc
   (lambda (x)
     (let ((word (car x))
           (char (cdr x)))
       (font-lock-add-keywords
        nil
        `((,(concat "\\(^\\|[^a-zA-Z0-9]\\)\\(" word "\\)[a-zA-Z]")
            (0 (progn
                 (decompose-region (match-beginning 2) (match-end 2))
                 nil)))))
       (font-lock-add-keywords
        nil
        `((,(concat "\\(^\\|[^a-zA-Z0-9]\\)\\(" word "\\)[^a-zA-Z]")
            (0 (progn
                 (compose-region (1- (match-beginning 2)) (match-end 2)
                  ,char)
                 nil)))))))
   pretty-alist))

上で見られるように、pretty-alistギリシャ文字で始まります。次に \rangle、新しいものを追加する方法を示すためだけに追加します。自動的に有効にするには、フックに追加します。

(add-hook 'LaTeX-mode-hook 'pretty-things)

ここのコードを出発点として使用しました。参照を探すことができます。

于 2014-04-08T13:20:47.937 に答える