[英]Configuring emacs for latex - void-variable LaTeX-mode-hook
在这个pdf文档之后,我将以下内容添加到~/.emacs
文件中:
(load "auctex.el" nil t t)
(setq TeX-auto-save t)
(setq TeX-parse-self t)
(setq TeX-PDF-mode t) ;; .pdf statt .dvi per default:
;;Zeilenumbruch
;;(add-hook ’LaTeX-mode-hook ’turn-on-auto-fill)
;;Syntax Higlight
(add-hook ’LaTeX-mode-hook ’turn-on-font-lock)
;; Mathe Modus
(add-hook ’LaTeX-mode-hook ’LaTeX-math-mode)
;; Reftex einflechten und laden
(setq reftex-plug-into-AUCTeX t)
(add-hook ’LaTeX-mode-hook ’turn-on-reftex)
;; Satzende ". " statt ". ". " fuer M-k: loeschen bis Satzende usw.
;;(setq sentence-end "[.?!][]\"’)}]*\\($\\| \\| \\)[
;;]*") ;; Da ist ein "Newline in der Zeile!"
;;(setq sentence-end-double-space nil)
;;direkte Rechtschreib Korrektur:
;;(add-hook ’LaTeX-mode-hook ’flyspell-mode)
;; Nur benutzen falls Auctex > 11.81 mit preview-latex:
(load "preview-latex.el" nil t t)
;; aspell ist besser als ispell.
;; Zeile kommentieren, falls nicht installiert:
(setq-default ispell-program-name "aspell")
;; Deutsche Rechtschreibung falls \usepackage{ngerman}
;; oder german benutzt wird
(add-hook ’TeX-language-de-hook
(function (lambda () (ispell-change-dictionary "german8"))))
不幸的是,emacs现在无法启动,而是出现错误
Warning (initialization): An error occurred while loading `/home/../.emacs':
Symbol's value as variable is void: ’LaTeX-mode-hook
To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file. Start Emacs with
the `--debug-init' option to view a complete error backtrace.
从--debug-init
开始时,它提供以下信息
Debugger entered--Lisp error: (void-variable ’LaTeX-mode-hook)
(add-hook ’LaTeX-mode-hook ’turn-on-font-lock)
eval-buffer(#<buffer *load*> nil "/home/../.emacs" nil t) ; Reading at buffer position 812
load-with-code-conversion("/home/../.emacs" "/home/../.emacs" t t)
load("~/.emacs" t t)
...
我尝试使用latex-mode-hook
代替。 我搜索了一个解决方案,但我似乎是唯一一个有这个问题的人。
我正在使用Ubuntu 12.04和最新的Emacs和Auctex。 如果需要,我会发布版本信息,但我认为必须在配置中添加某些内容,或者必须安装任何软件包。
如何让emacs使用该配置?
你使用错误的单引号字符吗? 它似乎是某种落后的引用,而不是简单的单引号。 尝试
'LaTeX-mode-hook
代替
’LaTeX-mode-hook
(同样适用于该角色的所有其他事件)。
正如托马斯所说,后面引用的不是你想在那里使用的字符,它应该是单引号。 但是,一般来说,如果你得到“符号的值作为变量是无效的”错误,它意味着与其他语言中的NPE(空指针异常)相同。 检查出错的方法是这样的:
将点移动到给出问题的变量和Ch v (或Mx describe-variable
[ Mx describe-variable
名称不带引号])。 您可以在键入时使用TAB完成变量名称,以查看您是否偶然输错了它。 一旦你看到描述变量的缓冲区 - 你知道你已经修复了错误。
现在,如果您通过auctex.el设置了LaTeX模式,那么必须存在latex-mode-hook
。 但是,您需要确保auctex.el实际加载并需要latex-mode
。 它这样做的方式并不是Emacs这样做的惯用方法,大多数时候你将模式的源文件添加到load-path
变量然后(require 'mode-name)
或者有条件地加载模式一次Emacs通过autoload
打开与之关联的文件类型(使Emacs的启动时间缩短),如下所述: Emacs:.emacs中延迟加载模式的最佳实践? 。
但是,每当您看到名为[something]-mode-hook
的变量时,就意味着这是在[something]
模式加载时要调用的函数列表。 如果[something]
模式完全存在,那么变量存在的可能性为99.99%(不能为空)。 因此,如果它是无效的 - 您需要确保它在所有负载下属于它的模式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.