From ab107da60eb3af9d073bb97c3aa91e5e5ec6921a Mon Sep 17 00:00:00 2001 From: TEC Date: Wed, 4 Jan 2023 01:31:22 +0800 Subject: [PATCH] org-latex-preview: Graceful precompile failure * lisp/org-latex-preview.el (org-latex-preview-precompile, org-latex-preview--create-tex-file): Fall back to compiling without using a preamble format file if the preamble could not be precompiled without error. In such an event, alert the user that preamble precompilation failed, and in particular let them know if mylatexformat could not be found. --- lisp/org-latex-preview.el | 44 +++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/lisp/org-latex-preview.el b/lisp/org-latex-preview.el index 657c4ec6b..879120e4e 100644 --- a/lisp/org-latex-preview.el +++ b/lisp/org-latex-preview.el @@ -946,10 +946,10 @@ The path of the created LaTeX file is returned." org-latex-preview-preamble 'snippet)) "\n\\usepackage[active,tightpage,auctex]{preview}\n"))) (with-temp-file tex-temp-name - (insert (if org-latex-preview-use-precompilation - (concat "%&" - (org-latex-preview-precompile - processing-info header)) + (insert (if-let ((format-file + (and org-latex-preview-use-precompilation + (org-latex-preview-precompile processing-info header)))) + (concat "%&" format-file) header)) (insert "\n\\begin{document}\n") (dolist (fragment-info fragments) @@ -1379,15 +1379,41 @@ process." (header-base-file (expand-file-name header-hash temporary-file-directory)) (dump-file (concat header-base-file ".fmt")) - (header-file (concat header-base-file ".tex"))) + (header-file (concat header-base-file ".tex")) + (precompile-buffer + (with-current-buffer + (get-buffer-create "*Org Preview Preamble Precompilation*") + (erase-buffer) + (current-buffer)))) (if (file-exists-p dump-file) (file-name-base header-base-file) (with-temp-file header-file (insert header "\n\\endofdump\n")) - (file-name-base - (org-compile-file - header-file (plist-get processing-info :latex-precompiler) - "fmt"))))) + (message "Precompiling Org LaTeX Preview preamble...") + (condition-case file + (file-name-base + (org-compile-file + header-file (plist-get processing-info :latex-precompiler) + "fmt" nil precompile-buffer)) + (:success (kill-buffer precompile-buffer) + file) + (error + (unless (= 0 (call-process "kpsewhich" nil nil nil "mylatexformat.ltx")) + (display-warning + '(org latex-preview preamble-precompilation) + "The LaTeX package \"mylatexformat\" is required for precompilation, but could not be found") + :warning) + (unless (= 0 (call-process "kpsewhich" nil nil nil "preview.sty")) + (display-warning + '(org latex-preview preamble-precompilation) + "The LaTeX package \"preview\" is required for precompilation, but could not be found") + :warning) + (display-warning + '(org latex-preview preamble-precompilation) + (format "Failed to precompile preamble, see the \"%s\" buffer." + precompile-buffer) + :warning) + nil))))) (defun org-latex-preview--tex-styled (processing-type value options &optional html-p) "Apply LaTeX style commands to VALUE based on OPTIONS.