重新定义AUCTeX字体并编译键绑定

3
我想修改字体绑定,例如C-c C-f C-b,改为更快的绑定,例如C-b。要找到相关函数,我尝试使用C-h k,但我无法正确终止键序列:实际上,当我输入C-c C-f时,它会触发TeX-font命令的帮助页面。
其次,我想覆盖C-c C-c的确认。我不理解如何在一般情况下使用OVERRIDE-CONFIRM参数,特别是如何将所有内容与新绑定(例如F1)关联而不进行确认。
谢谢您的帮助。

@wvxvw:澄清一下,我说:“为了找到涉及的函数,我尝试使用C-h k”。为了使用绑定函数,例如:global-set-keydefine-key,您需要知道要绑定的命令的名称。 C-h k有所帮助,因为键入C-h k C x 1将显示序列C x 1绑定到名为delete-other-windows的命令,这使我可以使用上述函数重新绑定它。如上所述,C-h k C-c C-f C-b无法按预期工作,即您无法获取绑定到C-c C-f C-b的命令的名称。 - antonio
@wvxvw:不知何故我看到了 C-c C-f,但我找不到 C-c C-f C-b - antonio
@wvxvw:我不确定,但如果在LaTeX模式下键入“C-c C-f C-b”,则会得到“\textbf {}”。无论如何,像Tyler建议的那样检查“tex.el”显示相关函数为“(TeX-font nil ?\C-b)”。 - antonio
我找到了一个关于自定义前缀的 C-h k 的解决方案。诀窍是 C-c C-f C-h。这是一种类似于 C-h k C-c C-f C-b 的方法,但它确实有效。抱歉,wvxvw,系统不鼓励我与您互动。我得到了“请避免在评论中进行扩展讨论”的提示。我宁愿遵守以避免引起 SE 的愤怒。 - antonio
@wvxvw:我在我的回答中添加了一个简短的解释,为什么你不能以通常的方式找到键绑定。 - Tyler
2个回答

5
auctex字体绑定键特别棘手,因为你要使用interactive函数和“c”代码字母。因此,C-c C-f调用函数TeX-font,然后你输入的下一个字母被收集作为参数传递给这个函数。因此,C-c C-f被绑定到一个函数,但像前缀一样起作用。请参见链接的手册页面以获取完整解释。
这意味着通常作为注释提供的建议不足以满足您的需求。您需要调用的关键代码是TeX-font。获取所需的正确参数需要挖掘源代码。我在我的.emacs中使用以下函数:
(defun TeX-typewriter()
  (interactive)
  (TeX-font nil ?\C-t))

(defun TeX-bold()
  (interactive)
  (TeX-font nil ?\C-b))

(defun TeX-emphasis()
  (interactive)
  (TeX-font nil ?\C-e))

(defun TeX-smallcaps()
  (interactive)
  (TeX-font nil ?\C-c))

有了这些函数定义后,我就在LaTeX-mode-hook中应用了这些按键绑定:
(defun my-LaTeX-hook ()
  (local-set-key "\C-ci" 'TeX-italics)
  (local-set-key "\C-cb" 'TeX-bold)
  (local-set-key "\C-ct" 'TeX-typewriter)
  (local-set-key "\C-ce" 'TeX-emphasis)
  (local-set-key "\C-cs" 'TeX-smallcaps))

(add-hook 'LaTeX-mode-hook 'my-LaTeX-hook)

这将TeX-bold绑定到C-c b,但你可以在这里使用任何你喜欢的东西(比如像你要求的那样用C-b)。

+1,但为什么是数字?跟着你的步伐,我挖掘了 tex.el。看起来我可以像这样做 (TeX-font nil ?\C-b) 而不是 (TeX-font nil 2),同样地,我可以使用 ?\C-e?\C-i 等。 - antonio
@antonio:在我写这篇文章的时候,TeX-font-list的源代码使用数字而不是更合理的字符值(例如,?\C-i等)。为了保持一致性,我保留了这些数字。我看到他们有时候会使用字符值。我将更新我的答案(和我的代码)。 - Tyler
好的,“TeX-italics”缺失了。我编辑了答案。为了与其他函数保持一致,我使用了“TeX-italic”,没有's'。 - antonio

1

我的“能力”无法修复 Tyler 代码中的一个小错误。在这里,我部分重写了它,并为第二部分问题提供了解决方案。

重新定义 AUCTeX 字体绑定

假设我们想设置以下字体绑定(但您可以随意修改它们):

Italic      "\C-ci" 
Bold        "\C-cb" 
Typewriter  "\C-ct" 
Emphasis    "\C-ce" 
Smallcaps   "\C-cs" 

将这些行添加到您的 init.el,或者您的 Emacs 初始化文件的名称:

(defun TeX-italic()
  (interactive)
  (TeX-font nil ?\C-i))

(defun TeX-bold()
  (interactive)
  (TeX-font nil ?\C-b))

(defun TeX-typewriter()
  (interactive)
  (TeX-font nil ?\C-t))

(defun TeX-emphasis()
  (interactive)
  (TeX-font nil ?\C-e))

(defun TeX-smallcaps()
  (interactive)
  (TeX-font nil ?\C-c))

(defun latex-font-hook ()
  (local-set-key "\C-ci" 'TeX-italic)
  (local-set-key "\C-cb" 'TeX-bold)
  (local-set-key "\C-ct" 'TeX-typewriter)
  (local-set-key "\C-ce" 'TeX-emphasis)
  (local-set-key "\C-cs" 'TeX-smallcaps))

(add-hook 'LaTeX-mode-hook 'latex-font-hook)

如果您对此处使用的按键不满意,请根据自己的喜好更改local-set-key的第一个参数,例如设置(local-set-key "\C-b" 'TeX-bold)将绑定到Control-b。
重新定义AUCTeX编译绑定键
要修改C-c C-c绑定键,并可能改进绑定编译函数(TeX-command-master),请参见我的帖子Build & view

刚看到这个。我的代码哪里出错了?我没看出来你做的有什么不同。 - Tyler
@Tyler:在函数列表中缺少(defun TeX-italic()...),尽管有(local-set-key "\C-ci" 'TeX-italic)。可能是打字错误。在写作中,我使用形容词将其拼写为"italic",类似于本地的facemenu-set-italic。你可以看到我在对你的回答发表评论时详细说明了这一点,并声称我也已经修复了这个问题。我确实这样做了,但由于我的声望问题,SO没有接受我的编辑。 - antonio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接