Hi all, Just a small patch that might make life easier for LaTeX (and esp. tikz) users. It enables the output of graphics in a lot of formats using imagemagick. See below for an example.
This is my first patch, I have never programmed emacs lisp before, and my common lisp experiences have been short and a while ago. So please excuse a (possibly) bad patch. Details: LaTeX source blocks now have three new options: - :imagemagick When not nil the source block is processed to pdf and the pdf is converted with imagemagick to whatever is given as :file Thus, the format is not limited to png. - :iminoptions This is passed to imagemagick before the pdf file - :imoutoptions This is passed to imagemagick before the output file Small Example: #+begin_src latex ... :file test.jpg :imagemagick yes :iminoptions -density 300 :imoutoptions -geometry 400 ... will use this command for conversion: convert -density 300 <tmp-pdf> -geometry 400 test.jpg Full example: Export this to pdf and to html to see the effect. ======================================= * Test #+begin_src R :session :exports both :results silent library("tikzDevice") #+end_src #+srcname: test_plot #+begin_src R :session :exports code :results output latex tikz(console=TRUE, width=4, height=4) plot(rnorm(100), rnorm(100)) dummy <- dev.off() #+end_src #+srcname: test_plot_png #+begin_src latex :exports (if (and (boundp 'backend) (eq backend 'latex)) "none" "results") :file test.png :imagemagick yes :iminoptions -density 600 :imoutoptions -geometry 400 :fit yes :noweb yes :headers '("\\usepackage{tikz}") <<test_plot()>> #+end_src #+srcname: test_plot_tikz #+begin_src latex :noweb yes <<test_plot()>> #+end_src * Latex Options :noexport: #+LATEX_HEADER: \usepackage{tikz} ======================================= Regards, Andreas
diff --git a/lisp/ob-latex.el b/lisp/ob-latex.el index 8943ded..6152ad3 100644 --- a/lisp/ob-latex.el +++ b/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,26 @@ 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."
smime.p7s
Description: S/MIME Cryptographic Signature
_______________________________________________ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode