Jelajahi Sumber

new babel latex feature :imagemagick -- By Andreas Leha

  It enables the output of graphics in a lot of formats using
  imagemagick.

* lisp/ob-latex.el (org-babel-execute:latex): Add imagemagick options,
  and for file types other than png and pdf it uses imagemagick to
  convert a compiled pdf file to the desired file type.
  (convert-pdf): Convert a pdf file to a new file type using
  imagemagick.
Eric Schulte 14 tahun lalu
induk
melakukan
3ea00f215a
1 mengubah file dengan 24 tambahan dan 4 penghapusan
  1. 24 4
      lisp/ob-latex.el

+ 24 - 4
lisp/ob-latex.el

@@ -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."