#+TITLE: Testing the :post header arg # Set some Org Babel values for the whole document #+PROPERTY: header-args:R :session *myR* * Introduction In this document I explore the use of the =:post= header argument for Org mode source code blocks. My aim is to create several tables for export to LaTeX and have the =ATTR_LATEX= blocks automatically added to the output of the source code blocks. For these tests we wil use the =mtcars= data set that comes with R. * Testing the =:post= header argument The following block is supposed to be used in a =:post= call to set the =ATTR_LATEX= line. #+name: attr_wrap #+begin_src R :var data="" :results output cat("#+ATTR_LATEX: :environment tabularx :width \\textwidth :align Xrrr", "\n") data #+end_src The idea is to use this as a named src block so it can be reused for each table I want to create (here still without =:post= to show the regular output). #+name: create_table #+begin_src R :rownames yes :colnames yes :var brand="Mazda" mtcars[grepl(brand, rownames(mtcars)), c("mpg", "cyl", "disp")] #+end_src This works using =#+call:=: #+call: create_table(brand="Hornet") #+RESULTS: | | mpg | cyl | disp | |-------------------+------+-----+------| | Hornet 4 Drive | 21.4 | 6 | 258 | | Hornet Sportabout | 18.7 | 8 | 360 | Define a slightly different src block that actually uses the =:post= header argument: #+name: create_table2 #+begin_src R :rownames yes :colnames yes :var brand="Mazda" :post attr_wrap(data=*this*) mtcars[grepl(brand, rownames(mtcars)), c("mpg", "cyl", "disp")] #+end_src And call it: #+call: create_table2(brand="Toyota") #+RESULTS: : #+ATTR_LATEX: :environment tabularx :width \textwidth :align Xrrr : X mpg cyl disp : 1 Toyota Corolla 33.9 4 71.1 : 2 Toyota Corona 21.5 4 120.1 Note that the whole results block is preceded by a colon, instead of being formatted by Org. Using the Shell code from the Org manual doesn't work either, it adds a comma in front of the =#+ATTR_LATEX= line. #+name: attr_wrap2 #+begin_src sh :var data="" :results output echo "#+ATTR_LATEX: :environment tabularx :width \\textwidth :align Xrrr" echo "$data" #+end_src New =create_table= function: #+name: create_table3 #+begin_src R :rownames yes :colnames yes :var brand="Mazda" :post attr_wrap2(data=*this*) mtcars[grepl(brand, rownames(mtcars)), c("mpg", "cyl", "disp")] #+end_src And call it: #+call: create_table3(brand="Toyota") #+RESULTS: : #+ATTR_LATEX: :environment tabularx :width \textwidth :align Xrrr : Toyota Corolla 33.9 4 71.1 : Toyota Corona 21.5 4 120.1 Observe that now the column names have completely disappeared.