如何使用Emacs + AUCTeX创建(自动插入)LaTeX模板?

时间:2013-10-12 14:44:58

标签: templates emacs latex auctex

我使用Emacs + AUCTex编写LaTeX文档。我有特定的需求所以我的典型序言很长。今天,我有一个.tex文件,只有这个序言(模板),我用C-x C-w从这个模板写一个新文件。它不是最好的解决方案,因为我的模板本地化可能远离新文件。

那么有没有办法以另一种(更短的)方式在Emacs中调用LaTeX模板?

编辑:自动插入模式提供了一种实现我想要的方法,但是当我创建.tex文件时,它不会自动我的模板(LaTeX前导码)。我必须启动M-x自动插入。如何根据文件扩展名将其自动化?

3 个答案:

答案 0 :(得分:3)

VirTeX-common-initialization(基本上)TeX-master-file的末尾添加到find-file-hooks。这是%%% Local Variables: %%% mode: latex %%% TeX-master: t %%% End:内容的来源。 (请注意,VirTeX-common-initialization中的LaTeX-common-initializationTeX-latex-mode中调用latex-mode的第一件事。{/ 1}}。

要获得自动添加的评论,您可以删除钩子:

(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")))

也许,这很重要,也许不是。我现在必须回家了,我无法进一步调查。

答案 1 :(得分:1)

你可能正在寻找auto-insert-mode。这与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中的示例修改了此代码,您还可以在其中找到其他信息。

答案 2 :(得分:0)

这是我能想到的最简单的解决方案:

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

(add-hook 'latex-mode-hook 'insert-latex-template)