emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Dan Davison <davison@stats.ox.ac.uk>
To: Eric Schulte <schulte.eric@gmail.com>
Cc: emacs-orgmode <emacs-orgmode@gnu.org>
Subject: Re: [babel] strategies for generating multiple graphics files from same code block
Date: Tue, 10 Aug 2010 17:51:39 -0400	[thread overview]
Message-ID: <87d3tqw2z8.fsf@stats.ox.ac.uk> (raw)
In-Reply-To: <87ocdatgdk.fsf@gmail.com> (Eric Schulte's message of "Tue, 10 Aug 2010 12:21:52 -0600")

"Eric Schulte" <schulte.eric@gmail.com> writes:

> Hi Erik,
>
> Given that arbitrary lisp forms can be used to assign header arguments,
> the following can be used to achieve this functionality under the
> current setup.
>
> #+Title: Export Target Conditional Header Arguments
>
> The following generates an =.eps= image for LaTeX export and a =.png=
> image for html export.
> #+begin_src gnuplot :term (if (and (boundp 'latexp) latexp) "postscript" "png") :file (if (and (boundp 'latexp) latexp) "sin.eps" "sin.png")
>   plot sin(x)
> #+end_src
>
> So, given that maybe the next development push for babel should focus on
> the ability to break header arguments over multiple lines, rather than
> on syntactic sugar for the above.

Alternatively, I believe we should be able to use sbe to put the elisp
code in blocks:

--8<---------------cut here---------------start------------->8---
#+begin_src gnuplot :term (sbe "get-image-type") :file (sbe "get-file-path")
  plot sin(x)
#+end_src

#+source: get-image-type
#+begin_src emacs-lisp
(if (and (boundp 'latexp) latexp) "postscript" "png")
#+end_src

#+source: get-file-path
#+begin_src emacs-lisp
(if (and (boundp 'latexp) latexp) "sin.eps" "sin.png")
#+end_src
--8<---------------cut here---------------end--------------->8---

As a matter of fact this currently fails on export with 'Invalid read
syntax: "#"', but that's a bug.

Dan

>
> Cheers -- Eric
>
> Erik Iverson <eriki@ccbr.umn.edu> writes:
>
>> Sounds good, and perhaps another 'export' target could be tangling of the code.
>>
>
> The above does not address tangling, however this could be fixed by
> having ob-tangle could set a tanglep global variable in the spirit of
> htmlp and latexp.
>
>>
>>
>> On 08/09/2010 06:00 PM, Eric Schulte wrote:
>>> Hi Erik,
>>>
>>> There is a planned feature for Org-babel which should subsume these use
>>> cases, namely backend-conditional header arguments.  These would allow
>>> you to specify different header arguments (including file) depending on
>>> the export target, be that html, latex, or none if you are just
>>> interactively evaluating inside of an Org-mode buffer.
>>>
>>> This is still in the early stages, and is waiting until I have a
>>> reasonable amount of free time.
>>>
>>> Cheers -- Eric
>>>
>>> Erik Iverson<eriki@ccbr.umn.edu>  writes:
>>>
>>>> Hello,
>>>>
>>>> I'm using org-mode to write R code and generate figures.
>>>>
>>>> I have multiple files generated per code block, one png and one PDF.
>>>> This is so that I can display the graphic:
>>>>
>>>> 1) Inline in my org-mode buffer (png)
>>>> 2) Upon export to HTML, viewable in the browser (png)
>>>> 3) Included in a separate PDF, *not* from exporting my org-mode
>>>> file.  For this, I would like a PDF version of the graphic to be
>>>> generated, and pdflatex can use it (pdf)
>>>>
>>>> So, for points 1 and 2 above, no problem.
>>>>
>>>> * Figure 1
>>>> Here is the first figure.
>>>>
>>>> #+begin_src R :file figure1.png :width 960 :exports both :tangle fig1.R
>>>>    plot(1,1)
>>>> #+end_src
>>>>
>>>> For point 3, I use tangling to write the source code to a file.  I
>>>> notice that the graphical code is wrapped by the export process by a
>>>> call to png() and dev.off().
>>>>
>>>> My question, is there any facility to have the tangled code generate a
>>>> PDF, instead of PNG?  I still need the png for goals 1 and 2, but the
>>>> pdf for goal 3.  Anyone else have any other strategies for realizing
>>>> all 3 of my goals?
>>>>
>>>> I suppose one would be to define a named code block, and use the noweb
>>>> syntax:
>>>>
>>>> Define the plot
>>>> #+srcname: fig-test
>>>> #+begin_src R
>>>>    plot(1,1)
>>>> #+end_src
>>>>
>>>> Tangle, but don't export
>>>> #+begin_src R :file figure1.pdf :exports none :tangle fig1.R :noweb yes
>>>>   <<fig-test>>
>>>> #+end_src
>>>>
>>>> Export, but don't tangle
>>>> #+begin_src R :file figure1.png :exports both :noweb yes
>>>>   <<fig-test>>
>>>> #+end_src
>>>>
>>>> This is not too bad, but maybe there's an alternative approach?
>>>>
>>>> Thanks!
>>>> Erik Iverson
>>>>
>>>> _______________________________________________
>>>> 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
>
> _______________________________________________
> 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

      reply	other threads:[~2010-08-10 21:51 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-09 21:04 [babel] strategies for generating multiple graphics files from same code block Erik Iverson
2010-08-09 23:00 ` Eric Schulte
2010-08-09 23:37   ` Erik Iverson
2010-08-10 18:21     ` Eric Schulte
2010-08-10 21:51       ` Dan Davison [this message]

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=87d3tqw2z8.fsf@stats.ox.ac.uk \
    --to=davison@stats.ox.ac.uk \
    --cc=emacs-orgmode@gnu.org \
    --cc=schulte.eric@gmail.com \
    /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).