[ESS] ESS/R transcript with embedded graphics
Short, Tom
TShort at epri.com
Wed Aug 5 04:43:10 CEST 2009
This email describes two things I've cobbled together:
+ HTML export of an R session with syntax highlighting and inline
graphics (prettyR is a different way to get this). See enclosed
for a pdf of a part of a transcript of the graphics demo printed
to pdf.
+ Transcript of an R session with inline graphics in Emacs
It's a way to document work during the "exploratory stage".
Both are independent of each other. Both require you to use the
function "showplot" to create a copy of the graphic and indicate where
to put it. So you need to do:
> plot(sin)
> showplot() # the image is shown after this
> plot(cos)
> showplot("cos.png") # give it a local name
First, here's showplot:
showplot <- function(file = paste(tempfile(), ".png", sep = ""), ...) {
file <- gsub("\\\\", "/", file) # Needed on windows as iimage.el
doesn't like back slashes
din <- dev.size("in")
dev2bitmap(file, width = din[1], height = din[2], taa = 4, gaa = 2,
...)
cat("{{", file, "}}\n", sep = "")
}
This copies the current graph to a PNG file (a temporary file by
default). It outputs the name of the buffer between a set of curly
brackets. These curly brackets are used to insert the graphic into the
emacs buffer and for exporting to HTML.
HTML export
------------
This relies on htmlize by Hrvoje Niksic.
http://www.emacswiki.org/emacs/Htmlize
Run the following emacs lisp function to htmlize and launch your
browser. In the process, it substitutes the {{whatever}} with
appropriate html links.
(defun htmlize-buffer-with-images ()
"Convert buffer to html, including embedded images.
Creates a file called emacs-html-export.html in the current directory"
(interactive)
(require 'htmlize)
(save-excursion
(switch-to-buffer (htmlize-buffer (current-buffer)))
(goto-char (point-min))
; replace the {{file.png}} with <img src='file.png'/>
(while (re-search-forward "{{\\([-+./_0-9a-zA-Z:\\\\].*\\)}}" nil t)
(replace-match (concat "<img src='\\1'/>")))
;; cludge for Firefox/windows absolute paths: add // in front of c:
(goto-char (point-min))
(while (re-search-forward "<img src='\\(.:\\)" nil t)
(replace-match (concat "<img src='//\\1")))
(write-file "emacs-html-export.html")
(browse-url-of-file)))
Inline images in your emacs buffer
-----------------------------------
This uses iimage, a minor mode by KOSEKI Yoshinori. It's included with
GNU Emacs 23 and is also here:
http://www.netlaputa.ne.jp/~kose/Emacs/iimage.html
You need the following for your regex for image replacement, then just
run "iimage-mode".
(setq iimage-mode-image-regex-alist
`((,(concat "\\({{\\)"
"\\([:-+./_0-9a-zA-Z].*\\)"
"\\(}}\\)") . 2)))
With iimage, it doesn't automatically show graphics. Maybe a
hook could be added.
Note that most of this is only useful with ess-eval-visibly-p set
to t. Finally, this has only been tested on GNU Emacs 22 under
Windows XP with R 2.9.0.
- Tom
Tom Short
Electric Power Research Institute (EPRI)
More information about the ESS-help
mailing list