Re: [O] «Macro» expansion in source blocks; code-sharing between blocks

2014-09-19 Thread Eric S Fraga
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

2014-09-19 Thread Charles Berry
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

2014-09-19 Thread Rainer M Krug
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

2014-09-19 Thread Andreas Kiermeier
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

2014-09-19 Thread Andreas Kiermeier
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

2014-09-18 Thread Tobias Getzner
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

2014-09-18 Thread Tobias Getzner
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

2014-09-18 Thread Eric S Fraga
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

2014-09-18 Thread Tobias Getzner
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

2014-09-18 Thread Andreas Kiermeier
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