From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Schulte Subject: Re: parameterizing keyword values during a #+call Date: Tue, 30 Apr 2013 23:02:30 -0600 Message-ID: <87bo8v70fc.fsf@gmail.com> References: <87ehdw53b1.fsf@gmail.com> <11889.1367332802@greg-minshalls-mbp.local> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([208.118.235.92]:53147) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UXPGc-0004v9-7b for emacs-orgmode@gnu.org; Wed, 01 May 2013 01:07:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UXPGa-0004gP-Mt for emacs-orgmode@gnu.org; Wed, 01 May 2013 01:07:46 -0400 Received: from mail-pb0-x231.google.com ([2607:f8b0:400e:c01::231]:48021) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UXPGa-0004gI-CG for emacs-orgmode@gnu.org; Wed, 01 May 2013 01:07:44 -0400 Received: by mail-pb0-f49.google.com with SMTP id rp8so589454pbb.8 for ; Tue, 30 Apr 2013 22:07:43 -0700 (PDT) List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Gary Oberbrunner Cc: Orgmode Mailing List Gary Oberbrunner writes: > I've been having the same issue (exporting to HTML and PDF, and need all my > graphics filenames to adjust automatically). > > I mostly don't use #+CALL though; I just have src blocks. > > #+BEGIN_SRC python :session UDpython :exports results :results file > do_hbar('/tmp/machines-by-os.pdf', (8,1.5), data) > #+END_SRC > > Is there any way of interpolating the elisp value into the middle of a src > block? I guess I can add another #+HEADER line: > > #+HEADER: :var filename=(ext "/tmp/machines-by-os") > #+BEGIN_SRC python :session UDpython :exports results :results file > do_hbar(filename, (8,1.5), data) > #+END_SRC > > Is that the recommended method? > It looks to me like it should work just fine. > > Org-mode macros that got expanded in the middle of babel source block > text would be cool. Just saying. > I don't see the benefit of a macro expansion over the use of variables as you demonstrate above. Cheers, > > > > On Tue, Apr 30, 2013 at 10:40 AM, Greg Minshall wrote: > >> Eric, >> >> just for completeness, and in case this may be of use to other people, >> below is the result of my question + your suggestions. the following >> illustrates org-mode plus asymptote producing a .svg file during html >> export, and a pdf file during any other (presumably, latex) export. >> >> thanks again, Greg >> ---- >> # trying to get graphics that works for both latex/beamer and for html >> >> # here's a suggestion from Eric Schulte >> # http://article.gmane.org/gmane.emacs.orgmode/71301 >> # with this clarification >> # http://article.gmane.org/gmane.emacs.orgmode/71393 >> # which produced the following >> >> # we define an emacs lisp macro ext that produces a file extension >> # of "svg" or "pdf" depending on whether we are exporting to html or >> # to some other source. this macro is called when computing the >> # output file name argument in a call to an asymptote routine as in: >> # >> # #+call: rectangle[:file (ext twod-1)](TSIZE=1.0) :results file >> # >> # which calls an asymptote routine (defined in our file) called >> # rectangle to produce a file called twod-1.svg or twod-1.pdf. >> >> # define the ext emacs lisp macro (i think in the following you *need* >> # ":exports results" -- instead of ":exports none" -- to make sure the >> # code is executed during export; the ":results silent" keeps any >> # output -- or nil -- from showing up in the output file.) >> >> #+begin_src emacs-lisp :exports results :results silent >> (defmacro ext (base) >> (format "%s.%s" base >> (if (and (boundp 'backend) (equal backend 'html)) "svg" >> "pdf"))) >> #+end_src >> >> >> # follows an example use of the above macro >> >> # first, define a asymptote function (org-named "rectangle") that >> # draws a rectangle >> #+name: rectangle >> #+begin_src asymptote :var TSIZE=1.0 :exports none >> import trembling; >> size(100); >> int off = 2, width = 100, height = 30; >> string tsize = format("%g", TSIZE); >> tremble tr0=tremble(angle=0); // no trembling >> tremble tr10=tremble(angle=10,frequency=0.1,random=50,fuzz=1); >> >> picture rectangle(pair sw, pair ne, int offset, string text, tremble tr) >> { >> picture pic; >> path g = >> >> (sw.x+offset,sw.y+offset)--(ne.x-offset,sw.y+offset)--(ne.x-offset,ne.y-offset)--(sw.x+offset,ne.y-offset)--cycle; >> label(pic, text, ((sw.x+ne.x)/2, (sw.y+ne.y)/2)); >> draw(pic, tr.deform(g)); >> return pic; >> } >> >> add(rectangle((0,0),(width,height),0, "", tr0)); >> add(rectangle((0,0),(width,height),off, tsize, tr10)); >> #+end_src >> >> # now, invoke the above asymptote function, producing a file called >> # either twod-1.svg or twod-1.pdf: >> >> #+call: rectangle[:file (ext twod-1)](TSIZE=1.0) :results file >> >> # now, you can C-c C-e l o or C-c C-e h o and see the image in the >> # two formats >> >> # $Id: parameterizing.org,v 1.2 2013/04/30 14:37:29 minshall Exp $ >> >> -- Eric Schulte http://cs.unm.edu/~eschulte