0

我尝试根据以下代码编写一个函数:Latex,Emacs:出现错误时自动打开 *TeX Help* 缓冲区并在更正错误后关闭它?

我想用texi2dvi替换latexmk,但TeX-master-file不包含文件结尾.tex(这似乎是texi2dvi所必需的)。我发现可以.tex通过使用添加TeX-master-file t。但是,我无法让它工作(我不是 elisp 程序员)。这是我尝试过的:

;; texi2dvi 
(defun run-texi2dvi ()
  (interactive)
  (let ((TeX-save-query nil)
        (TeX-process-asynchronous nil)
        (master-file (expand-file-name (TeX-master-file t)))); append `.tex`
    (TeX-save-document "")
    (TeX-run-TeX "texi2dvi"
         (TeX-command-expand "PDFLATEX='pdflatex -synctex=1' texi2dvi -p %s" 'TeX-master-file)
                 master-file)
    (if (plist-get TeX-error-report-switches (intern master-file))
        (TeX-next-error t)
      (progn
    (demolish-tex-help)
    (minibuffer-message "texi2dvi: done.")))))
4

2 回答 2

1

不知道是否有更好的方法,但这个版本应该可以工作。基本上,TeX-command-expand 被赋予函数 TeX-master-file 作为内部调用的符号,并且在没有 I-want-the-extension 参数的情况下调用它。替换 lambda 强制执行此操作。

(defun run-texi2dvi ()
  (interactive)
  (let ((TeX-save-query nil)
        (TeX-process-asynchronous nil)
        (master-file (expand-file-name (TeX-master-file t)))); append `.tex`
    (TeX-save-document "")
    (TeX-run-TeX "texi2dvi"
         (TeX-command-expand
          "PDFLATEX='pdflatex -synctex=1' texi2dvi -p %s"
          (lambda (ext-ignored nondir)
            (TeX-master-file t nondir)))
                 master-file)
    (if (plist-get TeX-error-report-switches (intern master-file))
        (TeX-next-error t)
      (progn
    (demolish-tex-help)
    (minibuffer-message "texi2dvi: done.")))))
于 2012-07-20T22:05:24.863 回答
0

有关问题的更详细描述和简单的解决方法,请参见此处:https ://tex.stackexchange.com/questions/67244/how-to-set-up-texi2dvi-with-synctex-and-error-handling/67384 #67384

于 2012-08-16T09:16:03.080 回答