现有括号的电气行为

现有括号的电气行为

(LaTeX-electric-left-right-brace) 我在 AUCTeX 中启用了此功能 。因此,当我输入 时,会自动插入\bigl(相应的结束符。\bigr)

假设我已经写好了(foo),现在决定要使用大括号。

\bigr当我插入时,如何让 AUCTeX 插入匹配项\bigl

  1. 我有(foo)
  2. 我插入\bigl,因此我得到\bigl(foo)
  3. 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-2s-3s-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"))))

所以,没有理由不让你的(数学)乳胶括号更具可读性。

相关内容