From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nicolas Goaziou Subject: Re: org-create-formula-image-with-imagemagick conflicts with org-latex-pdf-process Date: Tue, 26 Feb 2013 09:39:27 +0100 Message-ID: <87y5ebqxj4.fsf@gmail.com> References: <87fw0jsj18.fsf@sophokles.streitblatt.de> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([208.118.235.92]:34914) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UAJ72-0007YH-VP for emacs-orgmode@gnu.org; Tue, 26 Feb 2013 06:54:27 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UAG4c-0003Bd-DU for emacs-orgmode@gnu.org; Tue, 26 Feb 2013 03:39:54 -0500 Received: from mail-we0-x229.google.com ([2a00:1450:400c:c03::229]:64418) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UAG4b-0003BJ-Rj for emacs-orgmode@gnu.org; Tue, 26 Feb 2013 03:39:42 -0500 Received: by mail-we0-f169.google.com with SMTP id t11so3429302wey.28 for ; Tue, 26 Feb 2013 00:39:41 -0800 (PST) In-Reply-To: <87fw0jsj18.fsf@sophokles.streitblatt.de> (Florian Beck's message of "Tue, 26 Feb 2013 07:09:39 +0100") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Florian Beck Cc: emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain Hello, Florian Beck writes: > `org-create-formula-image-with-imagemagick' doesn't handle the case that > `org-latex-pdf-process' is set to a function. > > To reproduce: > > - set `org-latex-pdf-process' to a function > - (setq org-latex-create-formula-image-program 'imagemagick) > this makes preview fail > - set #+OPTIONS: latex:imagemagick => html export broken > > However, just calling this function from > `org-create-formula-image-with-imagemagick' would not be a good idea. > How about adding a new variable `org-latex-formula-pdf-process'? What about re-using the existing tool from "ox-latex.el"? What do you think of the following patch? Regards, -- Nicolas Goaziou --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-Use-org-latex-compile-when-processing-formulas-with-.patch >From 40dabf94dae93d2935982a7d04f3b7804069b733 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Tue, 26 Feb 2013 09:28:59 +0100 Subject: [PATCH] Use `org-latex-compile' when processing formulas with imagemagick * lisp/ox-latex.el (org-latex-compile): Add an optional argument for latex snippet previewing. * lisp/org.el (org-create-formula-image-with-imagemagick): Use `org-latex-compile' instead of rewriting it. --- lisp/org.el | 36 ++---------------------------------- lisp/ox-latex.el | 15 ++++++++++----- 2 files changed, 12 insertions(+), 39 deletions(-) diff --git a/lisp/org.el b/lisp/org.el index 55cd00e..03bd8f3 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -18167,7 +18167,7 @@ share a good deal of logic." (delete-file (concat texfilebase e)))) pngfile)))) -(defvar org-latex-pdf-process) ; From ox-latex.el +(declare-function org-latex-compile "org-latex" (texfile &optional snippet)) (defun org-create-formula-image-with-imagemagick (string tofile options buffer) "This calls convert, which is included into imagemagick." (require 'ox-latex) @@ -18204,39 +18204,7 @@ share a good deal of logic." string "\n}\n" "\n\\end{document}\n"))) - (let ((dir default-directory) cmd cmds latex-frags-cmds) - (condition-case nil - (progn - (cd tmpdir) - (setq cmds org-latex-pdf-process) - (while cmds - (setq latex-frags-cmds (pop cmds)) - (if (listp latex-frags-cmds) - (setq cmds nil) - (setq latex-frags-cmds (list (car org-latex-pdf-process))))) - (while latex-frags-cmds - (setq cmd (pop latex-frags-cmds)) - (while (string-match "%b" cmd) - (setq cmd (replace-match - (save-match-data - (shell-quote-argument texfile)) - t t cmd))) - (while (string-match "%f" cmd) - (setq cmd (replace-match - (save-match-data - (shell-quote-argument - (file-name-nondirectory texfile))) - t t cmd))) - (while (string-match "%o" cmd) - (setq cmd (replace-match - (save-match-data - (shell-quote-argument - (file-name-directory texfile))) - t t cmd))) - (setq cmd (split-string cmd)) - (eval (append (list 'call-process (pop cmd) nil nil nil) cmd)))) - (error nil)) - (cd dir)) + (org-latex-compile texfile t) (if (not (file-exists-p pdffile)) (progn (message "Failed to create pdf file from %s" texfile) nil) (condition-case nil diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el index 3b0924c..5ebfe7e 100644 --- a/lisp/ox-latex.el +++ b/lisp/ox-latex.el @@ -2774,12 +2774,16 @@ Return PDF file's name." (org-latex-export-to-latex nil subtreep visible-only body-only ext-plist)))) -(defun org-latex-compile (texfile) +(defun org-latex-compile (texfile &optional snippet) "Compile a TeX file. TEXFILE is the name of the file being compiled. Processing is done through the command specified in `org-latex-pdf-process'. +When optional argument SNIPPET is non-nil, TEXFILE is a temporary +file used to preview a LaTeX snippet. In this case, do not +create a log buffer and do not bother removing log files. + Return PDF file name or an error if it couldn't be produced." (let* ((base-name (file-name-sans-extension (file-name-nondirectory texfile))) (full-name (file-truename texfile)) @@ -2788,7 +2792,7 @@ Return PDF file name or an error if it couldn't be produced." ;; not to whatever value the current buffer may have. (default-directory (file-name-directory full-name)) errors) - (message (format "Processing LaTeX file %s ..." texfile)) + (unless snippet (message (format "Processing LaTeX file %s ..." texfile))) (save-window-excursion (cond ;; A function is provided: Apply it. @@ -2798,7 +2802,8 @@ Return PDF file name or an error if it couldn't be produced." ;; values in each command before applying it. Output is ;; redirected to "*Org PDF LaTeX Output*" buffer. ((consp org-latex-pdf-process) - (let ((outbuf (get-buffer-create "*Org PDF LaTeX Output*"))) + (let ((outbuf (and (not snippet) + (get-buffer-create "*Org PDF LaTeX Output*")))) (mapc (lambda (command) (shell-command @@ -2811,7 +2816,7 @@ Return PDF file name or an error if it couldn't be produced." outbuf)) org-latex-pdf-process) ;; Collect standard errors from output buffer. - (setq errors (org-latex--collect-errors outbuf)))) + (setq errors (and (not snippet) (org-latex--collect-errors outbuf))))) (t (error "No valid command to process to PDF"))) (let ((pdffile (concat out-dir base-name ".pdf"))) ;; Check for process failure. Provide collected errors if @@ -2821,7 +2826,7 @@ Return PDF file name or an error if it couldn't be produced." (when errors (concat ": " errors)))) ;; Else remove log files, when specified, and signal end of ;; process to user, along with any error encountered. - (when org-latex-remove-logfiles + (when (and (not snippet) org-latex-remove-logfiles) (dolist (ext org-latex-logfiles-extensions) (let ((file (concat out-dir base-name "." ext))) (when (file-exists-p file) (delete-file file))))) -- 1.8.1.4 --=-=-=--