我使用Emacs + AUCTex编写LaTeX文档。我有特定的需求所以我的典型序言很长。今天,我有一个.tex文件,只有这个序言(模板),我用C-x C-w从这个模板写一个新文件。它不是最好的解决方案,因为我的模板本地化可能远离新文件。
那么有没有办法以另一种(更短的)方式在Emacs中调用LaTeX模板?
编辑:自动插入模式提供了一种实现我想要的方法,但是当我创建.tex文件时,它不会自动我的模板(LaTeX前导码)。我必须启动M-x自动插入。如何根据文件扩展名将其自动化?
答案 0 :(得分: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
的第一件事。{/ 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)