我正在尝试重新绑定 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-textit
。define-key
(编辑:用特殊字符替换代码。)