В чем разница между tex-mode и latex-mode и LaTeX-mode в emacs

Я настраиваю AUCTeX в Emacs.

Большинство конфигураций помещены в ловушку LaTeX-mode-hook. Когда я открываю файл main.tex, я замечаю, что основным режимом является режим латекса, и мои подключенные конфигурации не активируются. Я должен использовать Mx Tex-latex-mode, чтобы активировать их. Но основной режим все еще в режиме латекса.

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

        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;; auctex

        (setq TeX-auto-save t)
        (setq TeX-parse-self t)
       ))

Поэтому я хотел бы знать, в чем отличие этих режимов, и как я могу автоматически включить AUCTeX при открытии файла *.tex.

2 ответа

Решение

Режимы, предоставляемые AUCTeX, перечислены по адресу https://www.gnu.org/software/auctex/manual/auctex.html, и они

  • plain-TeX-mode
  • LaTeX-mode
  • ams-TeX-mode
  • ConTeXt-mode
  • Texinfo-mode
  • docTeX-mode

Вместо,

  • tex-mode
  • plain-tex-mode
  • latex-mode
  • slitex-mode
  • doctex-mode

(обратите внимание на различную заглавную букву) - основные режимы, предоставляемые пакетом режимов TeX, поставляемым с Emacs.

Если вы хотите, чтобы открыть все *.tex файлы с режимом AUCTeX LaTeX добавить это к вашему .emacs:

(add-to-list 'auto-mode-alist '("\\.tex$" . LaTeX-mode))

На самом деле, это не должно быть необходимым, потому что AUCTeX определяет tex-mode.el имена мод как псевдонимы своих режимов.

TLDR: используйте или (они означают одно и то же), не нужно менять и используйте для подключения к AucTeX.

Настройка AucTeX может быть довольно запутанной, потому что он использует рекомендации для переопределения встроенной поддержки Emacs для TeX и его друзей.

Итак, после установки AucTeX из ELPA вы должны увидеть следующее в C-h f latex-mode:

      This function has :override advice: ‘TeX-latex-mode’.

То же самое для всех других текстовых режимов, хотя список режимов, которые переопределяет AucTeX, зависит от значения параметра TeX-modesпеременная.

Функция не определена в AucTeX (больше?): она определена в ядре Emacs с загадочным комментарием о совместимости:

      ;; The following three autoloaded aliases appear to conflict with
;; AUCTeX.  However, even though AUCTeX uses the mixed case variants
;; for all mode relevant variables and hooks, the invocation function
;; and setting of `major-mode' themselves need to be lowercase for
;; AUCTeX to provide a fully functional user-level replacement.  So
;; these aliases should remain as they are, in particular since AUCTeX
;; users are likely to use them.
;; Note from Stef: I don't understand the above explanation, the only
;; justification I can find to keep those confusing aliases is for those
;; users who may have files annotated with -*- LaTeX -*- (e.g. because they
;; received them from someone using AUCTeX).

;;;###autoload
(defalias 'TeX-mode #'tex-mode)
;;;###autoload
(defalias 'plain-TeX-mode #'plain-tex-mode)
;;;###autoload
(defalias 'LaTeX-mode #'latex-mode)

Все это означает, что, по крайней мере, в 2021 году вам не нужно менять auto-mode-alistиспользовать AucTeX; достаточно просто установить его, чтобы переопределить встроенную функциональность Emacs.

К сожалению, есть еще один источник путаницы. Несмотря на то LaTeX-modeтеперь в основном просто бесполезный псевдоним для , оказывается, что код в AucTeX, который переопределяет latex-modeне звонит _latex-mode-hook(это звонит LaTeX-mode-hook, что отличается. Итак LaTeX-переменные, которые являются переменными AucTeX (в отличие от строчных, встроенных в Emacs), по-прежнему полезны.

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