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

Templates 如何使用Emacs+;创建(自动插入)LaTeX模板;AUCTeX?,templates,emacs,latex,auctex,Templates,Emacs,Latex,Auctex,我使用Emacs+AUCTex编写LaTeX文档。我有特殊的需求,所以我的典型序言相当长。今天,我有一个.tex文件,只有这个序言(模板so),我使用C-x C-w从这个模板编写一个新文件。这不是最好的解决方案,因为我的模板本地化可能离新文件很远 那么,有没有一种方法可以用另一种(更短的)方式在Emacs中调用LaTeX模板呢 编辑:自动插入模式提供了一种实现我想要的功能的方法,但在我创建.tex文件时,它不会自动放置我的模板(LaTeX序言)。我必须启动M-x自动插入。如何根据文件扩展名自动执

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

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


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

您可能正在寻找。这与AUCTeX正交-例如,我使用它为.java文件插入一个类模板

将以下内容放入
.emacs
文件中:

(自动插入模式)
;; *注意*尾随斜杠很重要
(setq自动插入目录“/path/to/template/directory/”)
(setq自动插入查询nil)
(定义自动插入“\\.tex$”my latex template.tex”)
当然,您可以使用作
定义自动插入的第一个参数的正则表达式更加复杂,例如,根据工作目录插入不同的前导码


我从中的一个示例改编了这段代码,您还可以从中找到其他信息。

您可能正在查找。这与AUCTeX正交-例如,我使用它为.java文件插入一个类模板

将以下内容放入
.emacs
文件中:

(自动插入模式)
;; *注意*尾随斜杠很重要
(setq自动插入目录“/path/to/template/directory/”)
(setq自动插入查询nil)
(定义自动插入“\\.tex$”my latex template.tex”)
当然,您可以使用作
定义自动插入的第一个参数的正则表达式更加复杂,例如,根据工作目录插入不同的前导码


我从中的一个示例改编了此代码,您也可以从中找到其他信息。

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

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

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

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

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

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

VirTeX公共初始化
(基本上)的末尾,将
TeX主文件
添加到
查找文件挂钩
。这是
%%%局部变量的源:%%%模式:latex%%%TeX主机:t%%%End:
stuff。(注意,
VirTeX公共初始化
LaTeX公共初始化
中的第一件事,它在
TeX-LaTeX模式
中被调用,是
LaTeX模式
的别名)

要使用自动添加的注释,可以移除挂钩:

(add-hook 'TeX-mode-hook '(lambda ()
  (remove-hook 'find-file-hooks (car find-file-hooks) 'local)))
那看起来像一个黑客。但是添加
TeX主文件
是非常硬的编码,没有用户选项。所以,在我看来,你没有其他机会了

校正后,
自动插入
功能自动工作。 (至少对我来说是这样。)

但是,我已经替换了
自动插入列表中的条目。意思,而不是

(定义自动插入“\\.tex$”我的latex模板.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")))

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

VirTeX公共初始化结束时,
TeX主文件
被添加到
find file hooks
。这是
%%%局部变量的源:%%%模式:latex%%%TeX主机:t%%%End:
stuff。(注意,
VirTeX公共初始化
LaTeX公共初始化
中的第一件事,它在
TeX-LaTeX模式
中被调用,是
LaTeX模式
的别名)

要使用自动添加的注释,可以移除挂钩:

(add-hook 'TeX-mode-hook '(lambda ()
  (remove-hook 'find-file-hooks (car find-file-hooks) 'local)))
那看起来像一个黑客。但是添加
TeX主文件
是非常硬的编码,没有用户选项。所以,在我看来,你没有其他机会了

校正后,
自动插入
功能自动工作。 (至少对我来说是这样。)

但是,我已经替换了
自动插入列表中的条目。意思,而不是

(定义自动插入“\\.tex$”我的latex模板.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中添加模板,但没有后续行动。我推荐一个模板的表单文件目录,并调用您需要的任何内容并使用它,或者将其插入您已有的任何内容中。你也可以使用YASnippet来达到这个目的。作为@juanleon,建议您使用的函数是
insert file
。如果使用OSX,则如果Emacs是使用ns构建的,则可以从OSX面板插入文件。我想在AUCTeX中添加模板,但没有后续操作。我建议使用模板的表单文件目录,调用您需要的任何内容并使用它,或者将它插入您已经拥有的任何内容。你也可以使用YASnippet来达到这个目的。作为@juanleon,建议您使用的函数是
insert file
。如果使用OSX,那么如果Emacs是用ns构建的,则可以从OSX面板插入文件。谢谢@Thomas
M-x自动插入
工作正常,但不是在创建.tex文件时插入前导的自动部分。当我使用
C-x C-f
test.tex时,我只有
%%%局部变量:%%%模式:latex%%%tex主控:t%%%结束:
@ppr我编辑了我的答案,因为自动插入模式提供了将模板骨架插入新文件的更标准的方法。在上面的代码中调整了目录和模板文件的名称之后,它对我来说工作得很好。我个人化了
/path/to/template/directory/