Конфигурирование 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%) (не может быть недействительной). Так что, если он недействителен - нужно убедиться, что режим, к которому он относится, при всех нагрузках.