ox-latex: Disable precompile for xelatex/lualatex

* lisp/ox-latex.el (org-latex-make-preamble): If xelatex or
lualatex are used for LaTeX export, disable LaTeX header
precompilation (via the CTAN package mylatexformat) locally in the
buffer and issue a warning.  Xelatex does not support
precompilation, and while Lualatex supports it in some cases, it
is best left unsupported by the Org LaTeX export process until
precompilation support for them improves upstream.

* lisp/org-latex-preview.el (org-latex-preview--create-tex-file):
Make the same changes as above when precompiling LaTeX headers
for LaTeX preview purposes.
This commit is contained in:
Karthik Chikmagalur 2023-06-03 15:28:14 -07:00 committed by TEC
parent a9fbf9d7cf
commit 3b7c6faf9f
Signed by: tec
SSH Key Fingerprint: SHA256:eobz41Mnm0/iYWBvWThftS0ElEs1ftBr6jamutnXc/A
2 changed files with 33 additions and 17 deletions

View File

@ -1510,25 +1510,30 @@ The path of the created LaTeX file is returned."
(concat (make-temp-name "org-tex-") ".tex") (concat (make-temp-name "org-tex-") ".tex")
(and remote-file-p temporary-file-directory))) (and remote-file-p temporary-file-directory)))
(write-region-inhibit-fsync t) (write-region-inhibit-fsync t)
(coding-system-for-write buffer-file-coding-system)) (coding-system-for-write buffer-file-coding-system)
(precompile-failed-msg))
(when (and relative-file-p remote-file-p) (when (and relative-file-p remote-file-p)
(error "Org LaTeX Preview does not currently support \\input/\\include in remote files")) (error "Org LaTeX Preview does not currently support \\input/\\include in remote files"))
(when org-latex-preview-precompile (when org-latex-preview-precompile
(if-let ((format-file (org-latex-preview--precompile processing-info header))) (pcase (plist-get processing-info :latex-processor)
;; Replace header with .fmt file path. ("pdflatex"
(setq header (concat "%& " (file-name-sans-extension format-file))) (if-let ((format-file (org-latex-preview--precompile processing-info header
(not relative-file-p))))
(setq header (concat "%& " (file-name-sans-extension format-file)))
(setq precompile-failed-msg
"Precompile failed.")))
((or "xelatex" "lualatex")
(setq precompile-failed-msg
(concat
(plist-get processing-info :latex-processor)
" does not support precompilation."))))
(when precompile-failed-msg
(display-warning (display-warning
'(org latex-preview disable-local-precompile) '(org latex-preview disable-local-precompile)
(concat "Precompile failed, disabling LaTeX preview precompile in this buffer." (concat
"\n To renable, run `(setq-local org-latex-preview-use-precompilation t)' or reopen this buffer." precompile-failed-msg
(pcase (plist-get processing-info :latex-processor) " Disabling LaTeX preview precompile in this buffer.\n To re-enable, run `(setq-local org-latex-preview-precompile t)' or reopen this buffer."))
("lualatex" (setq-local org-latex-preview-precompile nil)))
"\n LuaLaTeX is known to be problematic, if you might be able to help please get in touch with emacs-orgmode@gnu.org.")
("xelatex"
;; Note: <https://tex.stackexchange.com/questions/395965/precompile-with-xelatex-and-fontspec> might be helpful.
"\n The current XeTeX approach does not support fontspec, if you might be able to help please get in touch with emacs-orgmode@gnu.org."))
"\n "))
(setq-local org-latex-preview-use-precompilation nil)))
(with-temp-file tex-temp-name (with-temp-file tex-temp-name
(insert header) (insert header)
;; The \abovedisplayskip length must be set after \begin{document} because ;; The \abovedisplayskip length must be set after \begin{document} because

View File

@ -2130,9 +2130,20 @@ specified in `org-latex-default-packages-alist' or
"\n")) "\n"))
(format-file (format-file
(and org-latex-precompile (and org-latex-precompile
(org-latex--precompile ;; Precompilation is disabled for xelatex/lualatex for now.
info preamble (if (member (plist-get info :latex-compiler)
(string-match-p "\\(?:\\\\input{\\|\\\\include{\\)[^/]" preamble))))) '("xelatex" "lualatex"))
(progn
(display-warning
'(org latex-export disable-local-precompile)
(format "%s does not support precompilation, disabling LaTeX precompile in this buffer.\n To re-enable, run `(setq-local org-latex-precompile t)' or reopen this buffer."
(plist-get info :latex-compiler)))
(setf (buffer-local-value
'org-latex-precompile (get-buffer (plist-get info :input-buffer)))
nil))
(org-latex--precompile
info preamble
(string-match-p "\\(?:\\\\input{\\|\\\\include{\\)[^/]" preamble))))))
(when (and format-file (not snippet?)) (when (and format-file (not snippet?))
(let ((preamble-parts (split-string preamble (regexp-quote header-split)))) (let ((preamble-parts (split-string preamble (regexp-quote header-split))))
(setq preamble (car preamble-parts) (setq preamble (car preamble-parts)