2

我使用 Emacs+AUCtex 来编写 LaTeX 文档。我有特定的需求,所以我的典型序言很长。今天,我有一个只有这个序言的 .tex 文件(一个模板),我使用 Cx Cw 从这个模板编写一个新文件。这不是最好的解决方案,因为我的模板本地化可能与新文件相去甚远。

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

编辑:自动插入模式提供了一种方法来实现我想要的,但是当我创建一个 .tex 文件时它不会自动放置我的模板(LaTeX 序言)。我必须启动 Mx 自动插入。如何根据文件扩展名自动执行此操作?

4

3 回答 3

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

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

于 2013-11-10T19:00:58.370 回答
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中的一个示例改编了这段代码,您还可以在其中找到其他信息。

于 2013-10-13T10:22:28.887 回答
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)
于 2013-11-08T10:24:19.160 回答