Как создать (автоматически вставленный) шаблон LaTeX с Emacs+AUCTeX?

Я использую Emacs+AUCTex для написания документов LaTeX. У меня есть конкретные потребности, поэтому моя типичная преамбула довольно длинная. Сегодня у меня есть файл.tex только с этой преамбулой (шаблон так), и я использую Cx Cw, чтобы написать новый файл из этого шаблона. Это не лучшее решение, потому что моя локализация шаблона может быть далека от нового файла.

Так есть ли способ вызывать шаблоны LaTeX в Emacs другим (более коротким) способом?

РЕДАКТИРОВАТЬ: режим автоматической вставки предлагает способ достичь того, что я хочу, но он не помещает автоматически мой шаблон (преамбула LaTeX), когда я создаю.tex файл. Я должен запустить автоматическую вставку Mx. Как я могу автоматизировать это на основе расширения файла?

3 ответа

Решение

В конце VirTeX-common-initialization (По существу) TeX-master-file добавлен в find-file-hooks, Это источник для %%% Local Variables: %%% mode: latex %%% TeX-master: t %%% End: вещи. (Обратите внимание, что VirTeX-common-initialization это первое, что в LaTeX-common-initialization который называется в TeX-latex-mode быть псевдонимом для latex-mode.)

Чтобы получить доступ к автоматически добавленным комментариям, вы можете удалить крючок:

(add-hook 'TeX-mode-hook '(lambda ()
  (remove-hook 'find-file-hooks (car find-file-hooks) 'local)))

Это похоже на взломать. Но добавляя TeX-master-file довольно жестко запрограммирован без пользовательских настроек. Поэтому мне кажется, что у вас нет другого шанса.

После этого исправления auto-insert все работает автоматически. (По крайней мере для меня.)

Но я заменил записи в auto-insert-alist, Значение вместо

(define-auto-insert "\\.tex$" "my-latex-template.tex")

У меня есть что-то подобное:

(let ((el (assoc 'latex-mode auto-insert-alist)))
  (if el
      (setcdr el "/c/temp/autoinsert.tex")
    (define-auto-insert "\\.tex$" "/c/temp/autoinsert.tex")))

Может быть, это важно, а может и нет. Мне пора домой, и я не могу больше расследовать это.

Вы, вероятно, ищете автоматический режим вставки. Это ортогонально AUCTeX - например, я использую его для вставки шаблона класса для файлов.java.

Поместите следующее в ваш .emacs файл:

(auto-insert-mode)
 ;; *NOTE* Trailing slash important
(setq auto-insert-directory "/path/to/template/directory/")
(setq auto-insert-query nil)
(define-auto-insert "\\.tex$" "my-latex-template.tex")

Конечно, вы можете сделать регулярное выражение, используемое в качестве первого аргумента define-auto-insert более сложный, например, для вставки разных преамбул в зависимости от рабочего каталога.

Я адаптировал этот код из примера из EmacsWiki, где вы также можете найти дополнительную информацию.

Это самое простое решение, которое я могу придумать:

(defun insert-latex-template()
  (when (= (point-max) (point-min))
    (insert-file "/path/to/your/template/file")))

(add-hook 'latex-mode-hook 'insert-latex-template)
Другие вопросы по тегам