Конфигурирование emacs для латекса - переменная void-переменная 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 работать с этой конфигурацией?

2 ответа

Решение

Вы используете неправильный символ одинарной кавычки? кажется, что это какая-то обратная цитата вместо простой одинарной. Пытаться

'LaTeX-mode-hook

вместо

’LaTeX-mode-hook

(и так же для всех других случаев этого персонажа).

Как также сказал Томас, обратная кавычка - это не символ, который вы хотите использовать там, это должна быть простая прямая кавычка. Но, как правило, если вы получаете сообщение об ошибке "значение символа как переменной пусто", это означает то же самое, что и NPE (исключение нулевого указателя) в других языках. Способ проверить, что пошло не так, выглядит так:

Переместите точку к переменной, которая дает проблему и Ch v (или M-x describe-variable [имя переменной без кавычек]). Вы можете использовать TAB для завершения имени переменной при вводе, чтобы убедиться, что вы случайно не набрали ее неправильно. Как только вы видите буфер, который описывает переменную - вы знаете, что исправили ошибку.

Теперь, если у вас установлен режим LaTeX через auctex.el, тогда latex-mode-hook должен существовать. Тем не менее, вы должны убедиться, что auctex.el действительно загружается и требует latex-mode, То, как это происходит, не является идиоматическим способом сделать это в Emacs, в большинстве случаев вы добавляете исходные файлы для режима в load-path переменная, а затем (require 'mode-name) или загрузить режим условно, как только Emacs откроет тип файла, с которым он связан (сокращает время запуска Emacs) через autoload как описано здесь: Emacs: Лучшая практика для ленивых режимов загрузки в.emacs?,

Однако всякий раз, когда вы видите переменную [something]-mode-hook это означает, что это список функций, которые вы хотите вызвать, когда [something] режим загружается. Если [something] Режим вообще существует, есть вероятность того, что переменная тоже существует (99,9%) (не может быть недействительной). Так что, если он недействителен - нужно убедиться, что режим, к которому он относится, при всех нагрузках.

Другие вопросы по тегам