Elisp/texi2dvi: Как вызвать texi2dvi из Emacs?

Я пытаюсь написать функцию на основе кода из: Latex, Emacs: автоматически открывать буфер *TeX Help* при ошибке и закрывать его после исправления ошибки?

Я хотел бы заменить latexmk на texi2dvi, но 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.")))))

person Marius Hofert    schedule 19.07.2012    source источник


Ответы (2)


Не знаю, есть ли лучший способ сделать это, но эта версия должна работать. По сути, TeX-command-expand получила функцию TeX-master-file в качестве символа, который вызывался внутри, и там она вызывалась без аргумента I-want-extension. Замена лямбда заставляет это.

(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.")))))
person Tassilo Horn    schedule 20.07.2012
comment
К сожалению, это не работает должным образом. Если в файле .tex нет ошибки, то ладно. Но если и есть ошибка, то она не обнаруживается (буфер, отображающий сообщение об ошибке, не открывается). Кроме того, C-c C-l обычно показывает процесс, но я получаю только No process для этого документа. - person Marius Hofert; 14.08.2012

См. здесь более подробное описание проблемы и простой обходной путь: https://tex.stackexchange.com/questions/67244/how-to-set-up-texi2dvi-with-synctex-and-обработкаошибок/67384#67384

person Marius Hofert    schedule 16.08.2012