在 AUCTeX 中重新绑定按键

在 AUCTeX 中重新绑定按键

我正在尝试重新绑定 AUCTeX 中的几个键,主要\textit是诸如此类。因此,作为测试,我添加了.emacs

(add-hook 'LaTeX-mode-hook
  (lambda ()
    (define-key LaTeX-mode-map (kbd "C-S-i") 'find-file)
  )
)

它可以起作用,但是我必须编写哪个命令而不是像find-file插入\textit那样C-c C-f C-i

答案1

Emacs 中一个非常有用的功能是describe-key它会告诉你哪个键调用了哪个函数。所以,在 AucTEX 中,它似乎C-c C-f C-i会调用TeX-font然后C-i作为参数传递。

因此,一个简单的解决方案是将一个键绑定到 TeX-font 并保留C-i(和其他)以获取所需的字体。您可以使用自定义可能的字体列表和辅助快捷键TeX-font-list。因此,您将拥有一个简单的:

(define-key LaTeX-mode-map (kbd "C-S-i") 'TeX-font)

(使用您想要的任何键)。

如果您确实只想重新绑定斜体而不做其他任何事情,您可以随时执行以下操作:

(define-key LaTeX-mode-map (kbd "C-S-i") '(lambda () (interactive)(TeX-font nil ?\C-i)))

不需要重新定义 TeX-font 的整个行为。

答案2

您可以使用如下方法:

  (defun insert-textit()
  "places textit{} into LaTeX buffer."
  (interactive)
  (if (region-active-p)
      (progn
        (save-excursion
          (goto-char (region-beginning))    
          (insert "\\textit{" ))
        (save-excursion
          (goto-char (region-end))
          (insert "}")))
    (insert "\\textit{}")
    (goto-char (forward-point -2)))
  (goto-char (forward-point 1)))

    (add-hook 'LaTeX-mode-hook
      (lambda ()
        (define-key LaTeX-mode-map (kbd "C-S-i") 'insert-textit)
      )
    )

编辑

此扩展代码也处理标记区域的情况。

编辑#2

我删除了不需要的连接和最后的 prog

答案3

我找到了一种基于宏的简单(且通用)方法(感谢insert-kbd-macro我刚刚发现的)。由于我不需要删除,所以C-c C-f C-i我定义了一个宏,然后将其绑定到C-S-i

(fset 'my-set-textit
   (lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item `(,(kbd "C-c C-f C-i") 0 "%d") arg)))

然后我使用'my-set-textitdefine-key(编辑:用特殊字符替换代码。)

相关内容