Revert "Revert "new babel latex feature :imagemagick -- By Andreas Leha""
authorEric Schulte <schulte.eric@gmail.com>
Tue, 22 Nov 2011 13:59:58 +0000 (06:59 -0700)
committerEric Schulte <schulte.eric@gmail.com>
Tue, 22 Nov 2011 13:59:58 +0000 (06:59 -0700)
This reverts commit c6f6b3421ee9050a980f8fa0b5615e3f7136e7a8.

Andreas has now signed the FSF copyright assignment papers.

lisp/ob-latex.el

index 739a936..f41475f 100644 (file)
@@ -72,6 +72,10 @@ This function is called by `org-babel-execute-src-block'."
       (let* ((out-file (cdr (assoc :file params)))
             (tex-file (org-babel-temp-file "latex-" ".tex"))
             (border (cdr (assoc :border params)))
+            (imagemagick (cdr (assoc :imagemagick params)))
+            (im-in-options (cdr (assoc :iminoptions params)))
+            (im-out-options (cdr (assoc :imoutoptions params)))
+            (pdfpng (cdr (assoc :pdfpng params)))
             (fit (or (cdr (assoc :fit params)) border))
             (height (and fit (cdr (assoc :pdfheight params))))
             (width (and fit (cdr (assoc :pdfwidth params))))
@@ -81,10 +85,10 @@ This function is called by `org-babel-execute-src-block'."
              (append (cdr (assoc :packages params))
                      org-export-latex-packages-alist)))
         (cond
-         ((string-match "\\.png$" out-file)
+         ((and (string-match "\\.png$" out-file) (not imagemagick))
           (org-create-formula-image
            body out-file org-format-latex-options in-buffer))
-         ((string-match "\\.pdf$" out-file)
+         ((or (string-match "\\.pdf$" out-file) imagemagick)
          (require 'org-latex)
          (with-temp-file tex-file
            (insert
@@ -118,13 +122,29 @@ This function is called by `org-babel-execute-src-block'."
               (concat "\n\\begin{document}\n" body "\n\\end{document}\n")))
            (org-export-latex-fix-inputenc))
           (when (file-exists-p out-file) (delete-file out-file))
-          (rename-file (org-babel-latex-tex-to-pdf tex-file) out-file))
+         (let ((transient-pdf-file (org-babel-latex-tex-to-pdf tex-file)))
+           (cond
+            ((string-match "\\.pdf$" out-file)
+             (rename-file transient-pdf-file out-file))
+            (imagemagick
+             (convert-pdf
+              transient-pdf-file out-file im-in-options im-out-options)
+             (when (file-exists-p transient-pdf-file)
+               (delete-file transient-pdf-file))))))
          ((string-match "\\.\\([^\\.]+\\)$" out-file)
-          (error "can not create %s files, please specify a .png or .pdf file"
+          (error "can not create %s files, please specify a .png or .pdf file or try the :imagemagick header arguement"
                 (match-string 1 out-file))))
         nil) ;; signal that output has already been written to file
     body))
 
+
+(defun convert-pdf (pdffile out-file im-in-options im-out-options)
+  "Generate a file from a pdf file using imagemagick."
+  (let ((cmd (concat "convert " im-in-options " " pdffile " "
+                    im-out-options " " out-file)))
+    (message (concat "Converting pdffile file " cmd  "..."))
+    (shell-command cmd)))
+
 (defun org-babel-latex-tex-to-pdf (file)
   "Generate a pdf file according to the contents FILE.
 Extracted from `org-export-as-pdf' in org-latex.el."