Use texi2dvi for processing LaTeX to pdf
* lisp/org-latex.el (org-latex-to-pdf-process): Use texi2dvi if available. (org-export-latex-get-error): New function. (org-export-as-pdf): Give an indication of the errors that happened during processing.
This commit is contained in:
parent
02357b0c2a
commit
59ba412552
|
@ -456,8 +456,10 @@ allowed. The default we use here encompasses both."
|
|||
:group 'org-export)
|
||||
|
||||
(defcustom org-latex-to-pdf-process
|
||||
'("pdflatex -interaction nonstopmode -output-directory %o %f"
|
||||
"pdflatex -interaction nonstopmode -output-directory %o %f")
|
||||
(if (executable-find "texi2dvi")
|
||||
'("texi2dvi -p -b -c -V %f")
|
||||
'("pdflatex -interaction nonstopmode -output-directory %o %f"
|
||||
"pdflatex -interaction nonstopmode -output-directory %o %f"))
|
||||
"Commands to process a LaTeX file to a PDF file.
|
||||
This is a list of strings, each of them will be given to the shell
|
||||
as a command. %f in the command will be replaced by the full file name, %b
|
||||
|
@ -468,6 +470,9 @@ pdflatex, maybe mixed with a call to bibtex. Org does not have a clever
|
|||
mechanism to detect which of these commands have to be run to get to a stable
|
||||
result, and it also does not do any error checking.
|
||||
|
||||
By default, Org used texi2dvi to do the processing, if that command
|
||||
is on the system. If not, it uses 2 pdflatex runs.
|
||||
|
||||
Alternatively, this may be a Lisp function that does the processing, so you
|
||||
could use this to apply the machinery of AUCTeX or the Emacs LaTeX mode.
|
||||
This function should accept the file name as its single argument."
|
||||
|
@ -871,16 +876,40 @@ when PUB-DIR is set, use this as the publishing directory."
|
|||
t t cmd)))
|
||||
(shell-command cmd outbuf outbuf)))
|
||||
(message (concat "Processing LaTeX file " file "...done"))
|
||||
(setq errors (org-export-latex-get-error outbuf))
|
||||
(if (not (file-exists-p pdffile))
|
||||
(error (concat "PDF file " pdffile " was not produced"))
|
||||
(error (concat "PDF file " pdffile " was not produced"
|
||||
(if errors (concat ":" errors "") "")))
|
||||
(set-window-configuration wconfig)
|
||||
(when org-export-pdf-remove-logfiles
|
||||
(dolist (ext org-export-pdf-logfiles)
|
||||
(setq file (concat base "." ext))
|
||||
(and (file-exists-p file) (delete-file file))))
|
||||
(message "Exporting to PDF...done")
|
||||
(message (concat
|
||||
"Exporting to PDF...done"
|
||||
(if errors
|
||||
(concat ", with some errors:" errors)
|
||||
"")))
|
||||
pdffile)))
|
||||
|
||||
(defun org-export-latex-get-error (buf)
|
||||
"Collect the kinds of errors that remain in pdflatex processing."
|
||||
(with-current-buffer buf
|
||||
(save-excursion
|
||||
(goto-char (point-max))
|
||||
(when (re-search-backward "^[ \t]*This is pdf.*?TeX.*?Version" nil t)
|
||||
;; OK, we are at the location of the final run
|
||||
(let ((pos (point)) (errors "") (case-fold-search t))
|
||||
(if (re-search-forward "Reference.*?undefined" nil t)
|
||||
(setq errors (concat errors " [undefined reference]")))
|
||||
(goto-char pos)
|
||||
(if (re-search-forward "Citation.*?undefined" nil t)
|
||||
(setq errors (concat errors " [undefined citation]")))
|
||||
(goto-char pos)
|
||||
(if (re-search-forward "Undefined control sequence" nil t)
|
||||
(setq errors (concat errors " [undefined control sequence]")))
|
||||
(and (org-string-nw-p errors) errors))))))
|
||||
|
||||
;;;###autoload
|
||||
(defun org-export-as-pdf-and-open (arg)
|
||||
"Export as LaTeX, then process through to PDF, and open."
|
||||
|
|
Loading…
Reference in New Issue