From: Andreas Leha <andreas.leha@med.uni-goettingen.de>
To: emacs-orgmode@gnu.org
Subject: [PATCH] new babel latex feature :imagemagick
Date: Thu, 24 Feb 2011 17:16:55 +0100 [thread overview]
Message-ID: <4D668477.8080005@med.uni-goettingen.de> (raw)
[-- Attachment #1.1.1: Type: text/plain, Size: 1960 bytes --]
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
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.1.2: ob-latex.el.diff --]
[-- Type: text/x-patch; name="ob-latex.el.diff", Size: 2896 bytes --]
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."
[-- Attachment #1.2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 6432 bytes --]
[-- Attachment #2: Type: text/plain, Size: 201 bytes --]
_______________________________________________
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
next reply other threads:[~2011-02-24 16:22 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-02-24 16:16 Andreas Leha [this message]
2011-02-24 18:49 ` [PATCH] new babel latex feature :imagemagick Eric S Fraga
2011-02-26 0:16 ` Eric Schulte
2011-02-28 9:28 ` Eric S Fraga
2011-02-26 0:13 ` Eric Schulte
2011-02-26 0:13 ` Eric Schulte
2011-02-26 10:41 ` Andreas Leha
2011-02-26 16:06 ` Eric Schulte
2011-02-26 16:41 ` Eric Schulte
2011-06-28 20:52 ` Sebastien Vauban
2011-06-29 0:42 ` Eric Schulte
2011-11-22 10:37 ` Andreas Leha
2011-11-22 13:58 ` Eric Schulte
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=4D668477.8080005@med.uni-goettingen.de \
--to=andreas.leha@med.uni-goettingen.de \
--cc=emacs-orgmode@gnu.org \
/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).