[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: org-in-org
From: |
Berry, Charles |
Subject: |
Re: org-in-org |
Date: |
Tue, 23 Feb 2021 19:46:32 +0000 |
Greg,
See inline
> On Feb 23, 2021, at 6:24 AM, Greg Minshall <minshall@umich.edu> wrote:
>
> i have a question about org-in-org source blocks. i volunteered to help
> in an effort to provide a tutorial of using the ESS (Emacs Speaks
> Statistics) package for R, in particular, from org mode.
>
> i'd like to write my contribution as a .org file. i'd like to include
> fragments of org code, including source blocks (in R). and, i'd like to
> show various result types. so, i'd like to be able to have the
> #+RESULTS show up in the org-in-org source block as exported inside the
> containing .org file.
I think I get your intention. You want the visual to look like it would if the
src-edit buffer was opened in emacs as org.
>
> and, i'd like to trigger all this from a makefile, using some emacs
> batch script to export the containing .org file into a .html or .pdf
> file.
>
> (i *think*) what i would like to end up with is what it would like if i
> had manually opened the org-in-org source blocks (C-c'), then went to
> each (or, possibly, selected, i guess) source blocks inside *that*
> (org-in-org) source block, and executed each, producing a #+RESULTS
> block for each, then closed the org-in-org source block (C-c', again),
> and then exported the containing .org file.
>
> is this possible? any ideas?
I have two alternative approaches:
1) Add an export engine for "org" to ox-ravel[1]. This is a trivial
customization of `org-ravel-engines' to add a '("org" . "engine='org'")
element. Then add a custom language engine[2] for rmarkdown or knitr.
The actions for the makefile would be a ravel export to generate *.Rmd, *.Rnw,
or *.Rhtml files followed by rmarkdown::render or knitr::knit on the generated
files.
2) Define this function:
#+begin_src emacs-lisp
(defun org-exe-org ()
(let ((org-confirm-babel-evaluate nil))
(org-edit-src-code)
(org-babel-execute-buffer)
(org-edit-src-exit)))
#+end_src
In an org buffer with one or more org src blocks containing R src blocks:
eval this
(org-babel-map-executables nil (org-exe-org))
Then export the buffer to pdf or html.
I haven't tested this much, but for the snippet below evaluating that line and
exporting to html produces two framed blocks with R src blocks and the results
displayed in each:
--8<---------------cut here---------------start------------->8---
#+begin_src org
,#+begin_src R
print("abc")
,#+end_src
#+end_src
#+begin_src org
,#+begin_src R
print("def")
,#+end_src
#+end_src
--8<---------------cut here---------------end--------------->8---
I expect doing this in batch mode will not be a challenge.
For pdf output the result is rather plain. Maybe there is some minted idiom
that would help?
HTH,
Chuck
p.s. I am an `ess-intro' member, in case it helps to move the conversation to
there.
[1] https://github.com/chasberry/orgmode-accessories
[2] https://bookdown.org/yihui/rmarkdown-cookbook/custom-engine.html