emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: "Eric Schulte" <schulte.eric@gmail.com>
To: Austin Frank <austin.frank@gmail.com>
Cc: emacs-orgmode@gnu.org
Subject: Re: [org-babel] suggestions for using tikz() graphic device with org-babel-R
Date: Wed, 14 Apr 2010 08:24:04 -0600	[thread overview]
Message-ID: <87y6gqf6yj.fsf@gmail.com> (raw)
In-Reply-To: <m0iq7ubm9c.fsf@gmail.com> (Austin Frank's message of "Wed, 14 Apr 2010 02:07:11 -0400")

Austin Frank <austin.frank@gmail.com> writes:

> Hi all--
>
> I'm very excited about a relatively new R package, tikzDevice.  This
> takes R graphics and generates LaTeX code inside a tikzpicture
> environment that reproduces the desired graphic.  This allows, among
> other things, for all text in a figure to use the same fonts as the rest
> of your document, and for graph annotations to use latex math markup.
>
> I have attached an example org file that has embedded R code that
> generates figures using the tikz() device.[fn:1]
>
> The output from a call to tikz() is a .tex file, which is intended to be
> included in a larger LaTeX file using the \input{} command.
>
> How would the org-babel gurus suggest that I automate the process of
> embedding these TeX-based graphics in an org file?  What is the right
> combination of :file, :exports, and :results arguments to have the
> generated file automatically included by a LaTeX \input{} command?
>

Hi Austin,

Yes, I agree, tikz is awesome.  I've recently started using it as my
favorite output terminal for gnuplot.  It allows graphs to scale
perfectly from papers to posters.  It's largely responsible for the
implementation of org-babel-latex, which allows for playing with tikz
through evaluation of latex source code blocks.

But, back to your question.  What does the R block return?

- if it returns the path to a file, then you can use :results file to
  insert a link to that file in your org-mode buffer, or you can wrap
  the path to that file in an include with something like the following

  #+source: graph-generator
  #+begin_src R :results file
    ...
  #+end_src
  
  #+begin_src emacs-lisp :var path=graph-generator :results latex
    (format "input{%s}" path)
  #+end_src

- if it returns raw LaTeX then you can use the :results latex header as
  used in the elisp block above

Hope that helps, if not then let me know.

Best -- Eric

>
> Thanks for any advice!
> /au
>
> Footnotes:
>
> [fn:1] If requested, I can send the generated tex and pdf files as well
>
> #+TITLE:     Generating PGF graphics from R in org-babel
> #+AUTHOR:    Austin F. Frank
> #+EMAIL:     austin.frank@gmail.com
> #+DATE:      2009-12-11 Fri
> #+LANGUAGE:  en
> #+OPTIONS:   H:3 num:nil toc:nil \n:nil @:t ::t |:t ^:t -:t f:t *:t <:t
> #+OPTIONS:   TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
> #+LATEX_HEADER:  \usepackage{tikz} 
>
>
> Recently a new =R= package, =pgfSweave=, was announced.[fn:1]  This
> package boasts a fascinating capability:  generating all R graphics as
> \{LaTeX} code that will be typeset using the tikz package and included
> as PGF graphics.[fn:2]  This is an appealing option for several
> reasons:
>   1.  Scaling of size and adjustments of position should be handled
>       seamlessly and without loss of resolution
>   2.  Colors can be specified identically for graphics and any other
>       markup in the $\LaTeX$ document
>   3.  Since they're just more $\LaTeX$ code, graphics can be manually
>       edited in emacs
>   4.  Same fonts will be used for text in figures as are used in the
>       text of the document
>   5.  $\LaTeX$ markup can be used in figure text
>   6.  tikz integrates nicely with Beamer
>
> Given this list of features, I decided to see whether I could get
> similar functionality in org-babel.
> * R code
> ** Load =tikzDevice=
>    First, we need to load the packages required for producing tikz
>    output in =R=.  If all goes well, you should get a message about
>    the paths to the various programs required to generate $\LaTeX$
>    markup from within =R=.
>
> #+source: load_tikzDevice
> #+BEGIN_SRC R :results output :exports both :cache
> ## I want to show the messages that are generated when the package is
> ## loaded.  These are printed to the equivalent of stderr, so I have
> ## to rewrite the `message' function to produce output that I can
> ## print back later.
> tikz.message <-
>   capture.output(withCallingHandlers(library(tikzDevice),
>                                      message =
>                                      function (m) cat(m$message)))
>
> cat(tikz.message, sep="\n")
> #+END_SRC
>
> ** R example
> #+source: lmer_example
> #+BEGIN_SRC R :results output :exports both :cache :session
> ## I use this library all the time
> library(lme4)
>
> ## here's the standard example
> m <- lmer(Reaction ~ Days + (1 | Subject), sleepstudy)
> print(m)
> #+END_SRC
>
> ** Graphics creation
> #+source: tikz_example
> #+BEGIN_SRC R :results file :exports code :cache :session
> library(tikzDevice)
> ranef.m <- ranef(m, postVar = TRUE)
> tikz(file = "ranef.tex", width=4, height=4)
> print(qqmath(ranef.m))
> dev.off()
> #+END_SRC
>
> #+BEGIN_CENTER
> #+CAPTION:  sample graphics
> \input{ranef}
> #+END_CENTER
>
> * Footnotes
>
> [fn:1] http://thread.gmane.org/gmane.comp.lang.r.packages/351
>
> [fn:2] http://sourceforge.net/projects/pgf/

  reply	other threads:[~2010-04-14 14:24 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-04-14  6:07 [org-babel] suggestions for using tikz() graphic device with org-babel-R Austin Frank
2010-04-14 14:24 ` Eric Schulte [this message]
2010-04-14 14:46   ` Erik Iverson

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=87y6gqf6yj.fsf@gmail.com \
    --to=schulte.eric@gmail.com \
    --cc=austin.frank@gmail.com \
    --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).