Re: [O] «Macro» expansion in source blocks; code-sharing between blocks
On Friday, 19 Sep 2014 at 09:14, Andreas Kiermeier wrote: Having used this type of setup only over the last couple of days, I've come up with another question. It appears that the setup_fu is executed twice ... once as it's own source block (though by itself not maybe say :results none instead of silent? just grasping a straws here. -- : Eric S Fraga (0xFFFCF67D), Emacs 24.3.1, Org release_8.3beta-372-gdd70cf signature.asc Description: PGP signature
Re: [O] «Macro» expansion in source blocks; code-sharing between blocks
Andreas Kiermeier andreas.kiermeier at gmail.com writes: My two blocks (with some code removed for simplicity) are as follow: #+NAME: tbl-refyear #+BEGIN_SRC R :results silent :exports none latex(tabular( code remove )) #+END_SRC #+BEGIN_SRC latex :noweb yes \begin{table}[h] \label{tbl:refyear} \caption{Separation outcomes (death or any type of discharge) by reference year.} tbl-refyear() \end{table} #+END_SRC I've tried :cache yes as part of the tbl-refyear source block, but that didn't stop if from being run twice. Am I missing a suitable header argument? This is the only way I could find to wrap the latex table (which has some complex formatting and hence why I've used it over just producing a table) in a float with a caption (though I still can't properly reference the label when I export to a PDF file). Any thought would be greatly appreciated. TIA! Why not use library(xtable) and do it all in R? If you are not sure this is the right choice, I suggest you look at the help page for print.xtable - you have a lot of control over caption, label, positioning, etc. HTH, Chuck
Re: [O] «Macro» expansion in source blocks; code-sharing between blocks
Andreas Kiermeier andreas.kierme...@gmail.com writes: I don't think you need the :noweb yes as part of the setup_fu header, as this block is not pulling in other materials. Having used this type of setup only over the last couple of days, I've come up with another question. It appears that the setup_fu is executed twice ... once as it's own source block (though by itself not need) and once as part of the second noweb block. This isn't a problem if the execution time is small, but I'm trying to create a summary table in Latex format from 2 million records - so the time is considerable. Check out the :eval header argument: if you use , | #+BEGIN_SRC R :eval never :exports none ` this block is never executed - this should work. There are also other values for :eval. From the help: , | 14.8.2.25 `:eval' | . | | The `:eval' header argument can be used to limit the evaluation of | specific code blocks. The `:eval' header argument can be useful for | protecting against the evaluation of dangerous code blocks or to ensure | that evaluation will require a query regardless of the value of the | `org-confirm-babel-evaluate' variable. The possible values of `:eval' | and their effects are shown below. | | `never or no' | The code block will not be evaluated under any circumstances. | | `query' | Evaluation of the code block will require a query. | | `never-export or no-export' | The code block will not be evaluated during export but may still | be called interactively. | | `query-export' | Evaluation of the code block during export will require a query. | |If this header argument is not set then evaluation is determined by | the value of the `org-confirm-babel-evaluate' variable see *Note Code | evaluation security::. ` Cheers, Rainer My two blocks (with some code removed for simplicity) are as follow: #+NAME: tbl-refyear #+BEGIN_SRC R :results silent :exports none latex(tabular( code remove )) #+END_SRC #+BEGIN_SRC latex :noweb yes \begin{table}[h] \label{tbl:refyear} \caption{Separation outcomes (death or any type of discharge) by reference year.} tbl-refyear() \end{table} #+END_SRC I've tried :cache yes as part of the tbl-refyear source block, but that didn't stop if from being run twice. Am I missing a suitable header argument? This is the only way I could find to wrap the latex table (which has some complex formatting and hence why I've used it over just producing a table) in a float with a caption (though I still can't properly reference the label when I export to a PDF file). Any thought would be greatly appreciated. TIA! Andreas On 18 September 2014 23:31, Eric S Fraga e.fr...@ucl.ac.uk wrote: On Thursday, 18 Sep 2014 at 13:26, Tobias Getzner wrote: On Thu, 18 Sep 2014 13:17:14 +, Tobias Getzner wrote: Are there any convenient inline-expansion methods I might have overlooked? To illustrate, I was wondering if any of the following is feasible somehow: Yes, and you almost got it right with your syntactic expansion: #+begin_src org ,* Syntactic expansion ,#+name: setup_fu ,#+begin_src sh :noweb yes echo 2 ,#+end_src ,#+begin_src sh :results raw :noweb yes echo 1 setup_fu echo 3 ,#+end_src ,#+results: 1 2 3 #+end_src Org src blocks can reference other src blocks. Note the :noweb yes option and the use of -- : Eric S Fraga (0xFFFCF67D), Emacs 24.4.50.1, Org release_8.3beta-366-gb2fca7 -- Rainer M. Krug email: Raineratkrugsdotde PGP: 0x0F52F982 pgpWAFl74ly3w.pgp Description: PGP signature
Re: [O] «Macro» expansion in source blocks; code-sharing between blocks
Hi Chuck On 19 September 2014 12:29, Charles Berry ccbe...@ucsd.edu wrote: Why not use library(xtable) and do it all in R? If you are not sure this is the right choice, I suggest you look at the help page for print.xtable - you have a lot of control over caption, label, positioning, etc. I was trying to do that with latex(tabular( ...)) though I can see that I can wrap the table in a floating table environment with xtable. In fact, I did look at xtable before settling on the above approach, which I did because tabular does create some nice tables, including multiple levels and totals. I was trying to avoid R's simple table prop table functions and having to construct the table and various headings myself before wrapping it up in xtable(). But maybe that's the way to go. Thanks, Andreas
Re: [O] «Macro» expansion in source blocks; code-sharing between blocks
Thanks Rainer, but unfortunately this isn't working. I'm sure I'm doing something wrong ... somewhere. In case this makes any difference I have in the document header: #+PROPERTY: header-args:R :session *R* #+PROPERTY: header-args :results output graphics :exports results I've now changed the source block header to :exports none :eval no but now there really is nothing in the output. In fact, the corresponding .tex file now contains: \begin{table}[h] \label{tbl:refyear} \caption{Separation outcomes (death or any type of discharge) by reference year.} nil \end{table} and in the *Message* buffer I now have: Evaluation of this R code-block (tbl-refyear) is disabled. org-babel-exp processing... Evaluation of this R code-block (tbl-refyear) is disabled. executing Latex code block... So, this source block really doesn't evaluated at all. Thanks Andreas On 19 September 2014 18:34, Rainer M Krug rai...@krugs.de wrote: Andreas Kiermeier andreas.kierme...@gmail.com writes: I don't think you need the :noweb yes as part of the setup_fu header, as this block is not pulling in other materials. Having used this type of setup only over the last couple of days, I've come up with another question. It appears that the setup_fu is executed twice ... once as it's own source block (though by itself not need) and once as part of the second noweb block. This isn't a problem if the execution time is small, but I'm trying to create a summary table in Latex format from 2 million records - so the time is considerable. Check out the :eval header argument: if you use , | #+BEGIN_SRC R :eval never :exports none ` this block is never executed - this should work. There are also other values for :eval. From the help: , | 14.8.2.25 `:eval' | . | | The `:eval' header argument can be used to limit the evaluation of | specific code blocks. The `:eval' header argument can be useful for | protecting against the evaluation of dangerous code blocks or to ensure | that evaluation will require a query regardless of the value of the | `org-confirm-babel-evaluate' variable. The possible values of `:eval' | and their effects are shown below. | | `never or no' | The code block will not be evaluated under any circumstances. | | `query' | Evaluation of the code block will require a query. | | `never-export or no-export' | The code block will not be evaluated during export but may still | be called interactively. | | `query-export' | Evaluation of the code block during export will require a query. | |If this header argument is not set then evaluation is determined by | the value of the `org-confirm-babel-evaluate' variable see *Note Code | evaluation security::. ` Cheers, Rainer My two blocks (with some code removed for simplicity) are as follow: #+NAME: tbl-refyear #+BEGIN_SRC R :results silent :exports none latex(tabular( code remove )) #+END_SRC #+BEGIN_SRC latex :noweb yes \begin{table}[h] \label{tbl:refyear} \caption{Separation outcomes (death or any type of discharge) by reference year.} tbl-refyear() \end{table} #+END_SRC I've tried :cache yes as part of the tbl-refyear source block, but that didn't stop if from being run twice. Am I missing a suitable header argument? This is the only way I could find to wrap the latex table (which has some complex formatting and hence why I've used it over just producing a table) in a float with a caption (though I still can't properly reference the label when I export to a PDF file). Any thought would be greatly appreciated. TIA! Andreas
[O] «Macro» expansion in source blocks; code-sharing between blocks
Hello, I was wondering whether there exists some way of sharing literal code (or, possibly, code results) between subsequent code blocks. E.g., I was trying to create a document containing several tikz graphics, and I would like to share a number of style definitions between these. When I only export to LaTeX, I can of course just use isolated BEGIN_LATEX blocks, and refer to shared stuff using LaTeX semantics. But I was wondering if something like this could possibly be done using code blocks only. It seemed to me that there are two «expansion mechanisms» for source code in org: 1. Calling named source blocks; 2. macro expansion. As for 1., calling a named block from within another isn’t currently handled, is it? As for 2., macro expansion only occurs upon export, right? While I found an interesting proposal to expand macros within source code at [1], this supposedly only works when either doing an export or when tangling an external file. Are there any convenient inline-expansion methods I might have overlooked? Best regards, Tobias [1] https://lists.gnu.org/archive/html/emacs-orgmode/2011-03/msg00843.html
Re: [O] «Macro» expansion in source blocks; code-sharing between blocks
On Thu, 18 Sep 2014 13:17:14 +, Tobias Getzner wrote: Are there any convenient inline-expansion methods I might have overlooked? To illustrate, I was wondering if any of the following is feasible somehow: * Semantic expansion #+name setup_fu #+begin_src sh :results raw echo 2 #+end_src #+begin_src sh :results raw echo 1 echo {{{call_setup_fu()}}} ← some sort of escape syntax echo 3 #+end_src #+results: 1 2 3 * Syntactic expansion #+begin_macro setup_fu echo 2 #+end_macro #+begin_src sh :results raw echo 1 {{{setup_fu()}}} echo 3 #+end_src #+results: 1 2 3
Re: [O] «Macro» expansion in source blocks; code-sharing between blocks
On Thursday, 18 Sep 2014 at 13:26, Tobias Getzner wrote: On Thu, 18 Sep 2014 13:17:14 +, Tobias Getzner wrote: Are there any convenient inline-expansion methods I might have overlooked? To illustrate, I was wondering if any of the following is feasible somehow: Yes, and you almost got it right with your syntactic expansion: #+begin_src org ,* Syntactic expansion ,#+name: setup_fu ,#+begin_src sh :noweb yes echo 2 ,#+end_src ,#+begin_src sh :results raw :noweb yes echo 1 setup_fu echo 3 ,#+end_src ,#+results: 1 2 3 #+end_src Org src blocks can reference other src blocks. Note the :noweb yes option and the use of -- : Eric S Fraga (0xFFFCF67D), Emacs 24.4.50.1, Org release_8.3beta-366-gb2fca7 signature.asc Description: PGP signature
Re: [O] «Macro» expansion in source blocks; code-sharing between blocks
On Thu, 18 Sep 2014 15:01:37 +0100, Eric S Fraga wrote: Are there any convenient inline-expansion methods I might have overlooked? Org src blocks can reference other src blocks. Note the :noweb yes option and the use of Nice! And I see I get «semantic» expansion when I add call syntax after the block’s name. This is quite awesome. Not being familiar with the term, «noweb» must have slipped my attention when I was skimming through that section. Thanks very much for the pointer! Best, T.
Re: [O] «Macro» expansion in source blocks; code-sharing between blocks
I don't think you need the :noweb yes as part of the setup_fu header, as this block is not pulling in other materials. Having used this type of setup only over the last couple of days, I've come up with another question. It appears that the setup_fu is executed twice ... once as it's own source block (though by itself not need) and once as part of the second noweb block. This isn't a problem if the execution time is small, but I'm trying to create a summary table in Latex format from 2 million records - so the time is considerable. My two blocks (with some code removed for simplicity) are as follow: #+NAME: tbl-refyear #+BEGIN_SRC R :results silent :exports none latex(tabular( code remove )) #+END_SRC #+BEGIN_SRC latex :noweb yes \begin{table}[h] \label{tbl:refyear} \caption{Separation outcomes (death or any type of discharge) by reference year.} tbl-refyear() \end{table} #+END_SRC I've tried :cache yes as part of the tbl-refyear source block, but that didn't stop if from being run twice. Am I missing a suitable header argument? This is the only way I could find to wrap the latex table (which has some complex formatting and hence why I've used it over just producing a table) in a float with a caption (though I still can't properly reference the label when I export to a PDF file). Any thought would be greatly appreciated. TIA! Andreas On 18 September 2014 23:31, Eric S Fraga e.fr...@ucl.ac.uk wrote: On Thursday, 18 Sep 2014 at 13:26, Tobias Getzner wrote: On Thu, 18 Sep 2014 13:17:14 +, Tobias Getzner wrote: Are there any convenient inline-expansion methods I might have overlooked? To illustrate, I was wondering if any of the following is feasible somehow: Yes, and you almost got it right with your syntactic expansion: #+begin_src org ,* Syntactic expansion ,#+name: setup_fu ,#+begin_src sh :noweb yes echo 2 ,#+end_src ,#+begin_src sh :results raw :noweb yes echo 1 setup_fu echo 3 ,#+end_src ,#+results: 1 2 3 #+end_src Org src blocks can reference other src blocks. Note the :noweb yes option and the use of -- : Eric S Fraga (0xFFFCF67D), Emacs 24.4.50.1, Org release_8.3beta-366-gb2fca7