在Emacs初始化文件中添加一个TeX符号

3

我正在尝试将以下代码添加到我的.emacs初始化文件中:

(TeX-add-symbols '("eqref" TeX-arg-ref))

但是我无法让它工作。在命令行运行emacs t.tex(这里的t.tex是一个示例文本文件)时,我收到以下错误:

Warning (initialization): An error occurred while loading `.emacs':
Symbol's function definition is void: TeX-add-symbols

我正在使用Ubuntu 12.04上的GNU Emacs版本23.3.1。我的.emacs初始化文件如下:

(setq TeX-auto-parse t)
(setq TeX-electric-escape t)
(setq reftex-label-alist '((nil ?e nil "~\\eqref{%s}" nil nil)))
(add-hook 'LaTeX-mode-hook 'turn-on-reftex)
(setq reftex-plug-into-AUCTeX t)
(TeX-add-symbols '("eqref" TeX-arg-ref))

如果我输入ESC-:(即运行命令eval-expression),并在提示符处输入(TeX-add-symbols '("eqref" TeX-arg-ref)),则可以正常工作。 (也就是说,在运行此命令之后,我可以在缓冲区中输入\eqref,并且它将按预期工作。但这不是一个好的解决方案,每次编辑文件时都需要手动输入此代码。这就是为什么我尝试在.emacs文件中设置它的原因。)
此问题的背景信息:
我使用AucTeX样式amsmath.el时遇到问题。 看起来它在我的计算机上没有正确加载。 有关更多信息,请参见Using \eqref with RefTeX

2
(eval-after-load "latex" '(TeX-add-symbols '("eqref" TeX-arg-ref))) - giordano
您报告的错误 (Symbol's function definition is void: TeX-add-symbols) 应该已经被修复了,是吗?为了使 eqref 起作用,您需要删除我在 TeX.SE 上建议的 /var/lib 文件。 - giordano
是的 :) 但是当我输入 C-h v TeX-symbol-list 时,eqref 没有被定义... - Håkon Hægland
1
尝试使用(add-hook 'LaTeX-mode-hook '(lambda () (TeX-add-symbols '("eqref" TeX-arg-ref))))(add-hook 'LaTeX-mode-hook '(lambda () (TeX-add-symbols '("eqref" TeX-arg-ref (ignore))))) - giordano
是的,LaTeX-mode-hook 会在 LaTeX 模式激活时立即运行,/var/lib/.../amsmath.elc 会在文件解析时加载,并且 AUCTeX 看到你的 LaTeX 源包含 \usepackage{amsmath} 时也会加载。但是 TeX-symbol-list 应该包含一个 ("eqref" 1) 和一个 ("eqref" TeX-arg-ref (ignore)),AUCTeX 应该优先选择具有最长定义的那个,这种情况下是后者。这就是 AUCTeX 的工作原理,请参阅 AUCTeX 手册 - giordano
显示剩余7条评论
1个回答

3

在激活LaTeX-mode后,您必须评估代码,否则会出现错误Symbol's function definition is void: TeX-add-symbols。您可以将该函数添加到LaTeX-mode的钩子中。为了覆盖可能存在的其他eqref宏定义,您应该在宏的定义中添加一个虚拟的(ignore)。以下代码可解决问题:

请将以下代码复制到您的.emacs文件中:

(add-hook 'LaTeX-mode-hook
      '(lambda ()
         (TeX-add-symbols '("eqref" TeX-arg-ref (ignore)))))

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