页面

2010年12月10日星期五

Emacs+LaTeX+Make

Emacs里面的AUCTeX相当好使,唯一让我觉得烦的是它的编译,很是怀念WinEdt时的一键编译。其实它还是非常智能的,用C-c C-c编译,会根据现有的文件猜出现在需要执行什么命令,是要latex还是view,基本能猜对。可是平时改一下文件,要看效果,就要按好多六下才行,还不算要Bibtex的情况:C-c C-c,回车,C-c C-c,回车。

经大牛教育,说用Make来管理比较好。今天折腾了一下,基本算是满足我要求了。

首先是要在Emacs里把当前的文件名取出来。在.emacs里添了几行:

(defun my-LaTeX-mode-common-hook()
  (define-key LaTeX-mode-map [(f9)] 'compile)
  (defun my-make-command()
    (concat "make TEX_FILE=" (file-name-sans-extension (file-relative-name buffer-file-name)) " "))
  (setq compile-command (my-make-command))
  (setq compilation-finish-functions
    (lambda (buf str)
      (when (and (string= (buffer-name buf) "*compilation*")
             (not (string-match "exited abnormally" str)))
        (run-at-time 0.5 nil 'delete-windows-on buf)
        )))
  ;;  (setq compilation-read-command nil)
)
(add-hook 'LaTeX-mode-hook 'my-LaTeX-mode-common-hook)

其实关键的是(file-name-sans-extension (file-relative-name buffer-file-name)) 这一长串,可以把当前文件去后缀名取出来,然后传到Makefile的参数TEX_FILE里。

后面还跟了两句,一个可以把compile完的提示窗口关掉,另一个可以让make TEX_FILE= 那句话的提示都省掉,直接给回车了,一键完事。

然后Makefile里就该咋写咋写了,最基本的:

all:
    pdflatex $(TEX_FILE)
    "C:/Program Files/Adobe/Reader 9.0/Reader/AcroRD32" $(TEX_FILE).pdf

把Makefile放在平时写tex的目录里,基本就满足要求了。

没有评论: