emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Nicolas Goaziou <n.goaziou@gmail.com>
To: Florian Beck <fb@miszellen.de>
Cc: emacs-orgmode@gnu.org
Subject: Re: org-create-formula-image-with-imagemagick conflicts with org-latex-pdf-process
Date: Tue, 26 Feb 2013 09:39:27 +0100	[thread overview]
Message-ID: <87y5ebqxj4.fsf@gmail.com> (raw)
In-Reply-To: <87fw0jsj18.fsf@sophokles.streitblatt.de> (Florian Beck's message of "Tue, 26 Feb 2013 07:09:39 +0100")

[-- Attachment #1: Type: text/plain, Size: 708 bytes --]

Hello,

Florian Beck <fb@miszellen.de> 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

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Use-org-latex-compile-when-processing-formulas-with-.patch --]
[-- Type: text/x-patch, Size: 5236 bytes --]

From 40dabf94dae93d2935982a7d04f3b7804069b733 Mon Sep 17 00:00:00 2001
From: Nicolas Goaziou <n.goaziou@gmail.com>
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


  reply	other threads:[~2013-02-26 11:54 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-02-26  6:09 org-create-formula-image-with-imagemagick conflicts with org-latex-pdf-process Florian Beck
2013-02-26  8:39 ` Nicolas Goaziou [this message]
2013-02-26 11:37   ` Florian Beck
2013-02-26 12:47     ` Nicolas Goaziou

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87y5ebqxj4.fsf@gmail.com \
    --to=n.goaziou@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    --cc=fb@miszellen.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).