From: Nick Dokos <ndokos@gmail.com>
To: emacs-orgmode@gnu.org
Subject: Re: exporting documents w/ babel results w/o evaluating babel blocks
Date: Mon, 23 May 2016 14:27:48 -0400 [thread overview]
Message-ID: <87a8jgocij.fsf@alphaville.usersys.redhat.com> (raw)
In-Reply-To: alpine.OSX.2.20.1605221317160.813@charles-berrys-macbook.local
"Charles C. Berry" <ccberry@ucsd.edu> writes:
> TL;DR: Org babel headers give excellent control over what gets run,
> when it gets run, and how. Users should use them. Don't reset
> `org-export-babel-evaluate'.
>
> ...
>
>> I think one of the main points of confusion in this thread still has
>> to do with why o-e-b-e switches what gets exported. If no code/results
>> are run/added/removed/modified as you mention, it doesn't speak to why
>> code export is always done for o-e-b-e = nil, but not otherwise. This
>> suggests babel is doing more than "executing code;" it's somehow
>> influencing what makes it into the export document. At least for me,
>> that was an unexpected interpretation of "everything babel does is
>> switched off."
>
> Babel is a fairly complicated beast.
>
We can all agree on that :-)
> If you want to grok what it is doing during export, you could instrument
> `org-export-as' (do `(info "(elisp) Edebug")' if you need to know about
> this), export something with babel code in it, and step thru to just
> before the line `(org-export-execute-babel-code)'. At that point have a
> look at the temp buffer the exporter is working in. (IIRC, it will have
> <2> suffixed to the name of the buffer from which you started the export.)
> Then do one more step to run the babel code and look again - be sure it is
> *still* the buffer named with the *<2> format that you are inspecting now.
> You will see what it is that Babel has done.
>
> In particular, a src block with no results initially, but with
> `:exports results' as a header will be gone, but results will now be
> seen.
>
I see.
> A src block that is has `#+begin-src emacs-lisp :exports code' will
> survive, but the header arg will be gone. So, transcoders in the
> exporter will not see the header arg.
>
I see.
>>
>> In fact, I just had an idea... I have o-e-b-e set to always, but just
>> turned org-confirm-babel-evaluate to on (I typically have it off). If
>> export the above and type "no" to make sure the code block is not
>> executed I do *not* get the code in the document. I think this
>> confirms that babel's responsibilities include *what* plain text in
>> .org the exporter formats into the output format.
>>
>> My suggestion would be to create a different variable to handle
>> formatting vs. execution unless things were designed this way? It
>> seems from all the comments that the majority of users expect the
>> time-heavy *code* not to be run at each export but still prefer the
>> blocks to behave as they intended.
>
> This is what `:eval never-export' was created for.
>
>> Theoretically, with all of my
>> results generated (e.g. into .pdf, .png, etc. plots; ascii tables,
>> whatever) shouldn't I be able to have o-e-b-e set to whatever and get
>> the same document? My document no longer depends on any of the code...
>> so I don't need it run, but the exported document will behave like
>> :exports both instead of :exports results just from turning babel off.
>>
>
> It sounds simple, but babel has a lot woven into it and getting the
> behavior you suggest by setting variables like o-e-b-e in emacs without
> breaking things is tricky. Consider what happens when you have something
> like:
>
> #+BEGIN_SRC emacs-lisp :var x=abc() :noweb yes :exports both
> <<format-some-code(y=x)>>
> #+END_SRC
>
> With o-e-b-e nil, what should happen? If nothing runs, x does not get set
> because abc() does not run, nor does the noweb code substitution take
> place because that requires the `format-some-code' src-block to run. If
> only some things `ought to' be run, how does the program decide which
> ones?
>
> Currently, the user can fine tune what is run and what is not during
> export using Babel headers. Let babel run and the headers will sort
> out the rest.
Thanks for the explanation: it certainly helped me understand somewhat
better what is happening. This is a fairly complicated set of
interactions however, and it *is* confusing: in the long run, babel
should be simplified; in particular, settings should be as orthogonal as
possible (global as well as header setting, although I realize that's
easier said than done - and backward compatibility might have to go
by the wayside in order for this to be accomplished).
>
> Frankly, I do not see why users would want to mess with o-e-b-e except
> in unusual cases - like debugging a complicated document, where having
> Babel changing things around could just make things harder.
>
OK - but then users need guidance that says "don't do that!". Can we add a
big warning to the doc for o-e-b-e?
> If there is a use case for a capability that is not well supported by
> existing headers it would be good to have an example.
>
There's the use case that John describes: I've evaluated everything,
checked everything, I'm ready for export, I don't want babel to touch
the results - and I have a million blocks, so I'd rather have a global
setting than go in with individual headers.
If you've covered this in a previous reply, please ignore me: I've only
paid intermittent attention to the thread, so apologies for missing a
big chunk of what has gone on before in the thread.
In any case, although I'm not happy about the state of things, I
understand better why they are as they are.
Thanks!
--
Nick
next prev parent reply other threads:[~2016-05-23 18:28 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-20 15:57 exporting documents w/ babel results w/o evaluating babel blocks Ken Mankoff
2016-05-20 16:14 ` John Hendy
2016-05-20 16:45 ` Ken Mankoff
2016-05-20 17:25 ` John Hendy
[not found] ` <878addc2b6b14ce99e907921f0985d24@HE1PR01MB1898.eurprd01.prod.exchangelabs.com>
2016-05-20 16:59 ` Eric S Fraga
2016-05-20 17:06 ` Ken Mankoff
[not found] ` <b29fde01938940d3b115abd9b257dc57@HE1PR01MB1898.eurprd01.prod.exchangelabs.com>
2016-05-20 17:11 ` Eric S Fraga
2016-05-20 17:23 ` John Hendy
2016-05-20 17:38 ` Ken Mankoff
2016-05-20 17:32 ` Ken Mankoff
2016-05-20 18:46 ` Nick Dokos
2016-05-20 21:20 ` Charles C. Berry
2016-05-21 19:01 ` Nick Dokos
2016-05-22 19:58 ` John Hendy
2016-05-22 21:52 ` Charles C. Berry
2016-05-23 18:27 ` Nick Dokos [this message]
2016-05-23 18:34 ` John Hendy
2016-05-23 20:08 ` Charles C. Berry
2016-05-24 1:34 ` Grant Rettke
2016-05-24 10:17 ` Andreas Kiermeier
2016-05-24 14:32 ` Ista Zahn
2016-05-24 15:09 ` Anthony Cowley
2016-05-24 15:48 ` Charles C. Berry
2016-05-24 15:53 ` Charles C. Berry
2016-05-20 23:06 ` Ken Mankoff
[not found] <0e207e1cbcc44453b29eea98ca5ebe05@HE1PR01MB1898.eurprd01.prod.exchangelabs.com>
2016-05-20 16:13 ` Eric S Fraga
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=87a8jgocij.fsf@alphaville.usersys.redhat.com \
--to=ndokos@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).