(LaTeX-electric-left-right-brace)
我在 AUCTeX 中启用了此功能 。因此,当我输入 时,会自动插入\bigl(
相应的结束符。\bigr)
假设我已经写好了(foo)
,现在决定要使用大括号。
\bigr
当我插入时,如何让 AUCTeX 插入匹配项\bigl
?
- 我有
(foo)
- 我插入
\bigl
,因此我得到\bigl(foo)
。 - AUCTeX 现在将自动生成
\bigl(foo\bigr)
。
当然应该\bigr
在匹配的括号中插入。如果我有(foo(bar))
,那么\bigl(foo(bar)\bigr)
应该生成。
答案1
我最终做的事情有些不同。
我定义了一个 kbd 宏并将其保存到我的 init.el(参见https://www.gnu.org/software/emacs/manual/html_node/emacs/Save-Keyboard-Macro.html).(将其添加到您的 init.el 中)
(fset '\bigl1
[?\\ ?b ?i ?g ?l ?\C-\M-n left ?\\ ?b ?i ?g ?r right ?\C-\M-p])
然后我将它绑定到一些键盘命令(将其添加到你的 init.el 中)
(eval-after-load 'latex
'(define-key LaTeX-mode-map (kbd "s-1") #'bigl1))
因此,如果我们有(并且光标在左括号处),则按下s-1
(windowskey(在大多数机器上)与 1)会产生结果。\bigl(foo\bigl)
(foo)
为了获得这种行为Bigl
以及biggl
最终得到了
(fset '\bigl1
[?\\ ?b ?i ?g ?l ?\C-\M-n left ?\\ ?b ?i ?g ?r right ?\C-\M-p])
(fset '\bigl2
[?\\ ?B ?i ?g ?l ?\C-\M-n left ?\\ ?B ?i ?g ?r right ?\C-\M-p])
(fset '\bigl3
[?\\ ?b ?i ?g ?g ?l ?\C-\M-n left ?\\ ?b ?i ?g ?g ?r right ?\C-\M-p])
(eval-after-load 'latex
'(define-key LaTeX-mode-map (kbd "s-1") #'bigl1))
(eval-after-load 'latex
'(define-key LaTeX-mode-map (kbd "s-2") #'bigl2))
(eval-after-load 'latex
'(define-key LaTeX-mode-map (kbd "s-3") #'bigl3))
在我的 init.el 文件中。(第一)
然后我编写了一些程序,现在我可以添加(通过按 ,,,),,,到s-1
下一个(光标右侧)并将其对应项添加到匹配的s-2
s-3
s-4
\bigl/\bigr
\Bigl/\Bigr
\biggl/\biggr
\Biggl/\Biggr
(,),[,],\{,\}
),(,],[,\},\{
(defun addthings-left-right-latex-parentheses (links rechts)
"Adds first Input to the left and the second Input
to the right of the next (,),[,],\{,\} (right of the coursor)
to the matching ),(,],[,\},\{"
(interactive "sWhat do you want left of parentheses?:
\nsWhat do you want right of parentheses?: ")
(when (re-search-forward "[][()]\\|\\\\[{}]")
(if (or (char-equal (char-before) ?\() (char-equal (char-before) ?\[))
(progn (backward-char)
(insert links)
(forward-list)
(backward-char)
(insert rechts))
(if (or (char-equal (char-before) ?\)) (char-equal (char-before) ?\]))
(progn
(backward-list)
(insert links)
(forward-list)
(backward-char)
(insert rechts))
(if (char-equal (char-before) ?\{)
(progn
(backward-char)(backward-char)
(insert links)
(forward-char)(forward-char)
(setq counter 1)
(while (< 0 counter)
(progn
(re-search-forward "\\\\[{}]")
(if (char-equal (char-before) ?\{)
(setq counter (+ counter 1))
(setq counter (+ counter -1)))))
(backward-char)(backward-char)
(insert rechts))
(progn
(backward-char)(backward-char)
(insert rechts)
(setq counter 1)
(while (< 0 counter)
(progn
(re-search-backward "\\\\[{}]")
(forward-char)
(if (char-equal (char-after) ?\})
(setq counter (+ counter 1))
(setq counter (+ counter -1)))))
(backward-char)
(insert links)))))))
(eval-after-load 'latex
'(define-key LaTeX-mode-map (kbd "s-1")
(lambda () (interactive)
(addthings-left-right-latex-parentheses "\\bigl" "\\bigr"))))
(eval-after-load 'latex
'(define-key LaTeX-mode-map (kbd "s-2")
(lambda () (interactive)
(addthings-left-right-latex-parentheses "\\Bigl" "\\Bigr"))))
(eval-after-load 'latex
'(define-key LaTeX-mode-map (kbd "s-3")
(lambda () (interactive)
(addthings-left-right-latex-parentheses "\\biggl" "\\biggr"))))
(eval-after-load 'latex
'(define-key LaTeX-mode-map (kbd "s-4")
(lambda () (interactive)
(addthings-left-right-latex-parentheses "\\Biggl" "\\Biggr"))))
所以,没有理由不让你的(数学)乳胶括号更具可读性。