EmacsのLaTeXの入力支援モードであるYaTeXでは、YaTeX-insert-dollarという関数が定義されていて、ドル記号"\$"を入力すると"\$\$"が入力され、カーソルは2つのドル記号の間に移動し、入力モードは直接入力に切り替わります。
今のところの問題点は、数式モードの開始にドル記号が使われていても、"\\)"で閉じてしまうところです。ドル記号と括弧のどちらで開始された数式モードであるか判定する機能が欲しいところです。
またYaTeXは標準では"\\("と"\\)"で囲まれた数式の色付けが行われないようになっていますが、yatex19.el内で定義されている変数YaTeX-hilit-patterns-alistの定義内の
日本語入力をオフにしなくとも直接数式入力に移行できることや、インライン数式環境の閉じ忘れが防げるので重宝しています。
LaTeXのインライン数式モードとして、他にも"\\("と"\\)"で括る方法があり、ドル記号を入力するのと同じような挙動をする関数が欲しいなと思っていたので作成してみました。
とはいってもYaTeX-insert-dollarとYaTeX-insert-dollars-regionの挿入文字列を変えてみただけです。
(defun YaTeX-insert-math-paren ()
(interactive)
(if (or (not (YaTeX-closable-p))
; (= (preceding-char) 92)
;; (and (YaTeX-in-math-mode-p)
;; (or (/= (preceding-char) ?$) (/= (following-char) ?$)))
(YaTeX-in-math-mode-p))
(insert "\\)")
(insert "\\(\\)")
(forward-char -2)
(and YaTeX-use-jmode-hook
(fboundp 'add-text-properties)
(add-text-properties
(- 2 (point)) (+ 2 (point))
(list 'point-left 'YaTeX-jmode-hook
'point-entered 'YaTeX-jmode-hook
'front-sticky t
'rear-nonsticky t
'mjmode nil
'jmode (YaTeX-jmode))))
(YaTeX-jmode-off)
(or YaTeX-auto-math-mode YaTeX-math-mode (YaTeX-toggle-math-mode 1))))
(defun YaTeX-insert-math-parens-region (beg end)
(interactive "r")
(YaTeX-insert-braces-region beg end "\\(" "\\)"))
(add-hook 'yatex-mode-load-hook
(lambda ()
(define-key YaTeX-mode-map (kbd "C-(") 'YaTeX-insert-math-paren)
(define-key YaTeX-mode-map (kbd "C-)") "\\)")
(YaTeX-define-key (kbd "C-)") 'YaTeX-insert-math-parens-region)))
("[^\\]\\\\(" "\\\\)" formula) ; \( \)
部分のコメントアウトを外すと色付けがされるようになります。