[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[O] Library of Babel function
From: |
Thomas S. Dye |
Subject: |
[O] Library of Babel function |
Date: |
Sat, 27 Aug 2011 08:33:26 -1000 |
Hi Eric,
The booktabs-notes function, below, is based on the booktabs function in
the library of Babel. It takes a second table and adds it to the bottom
of the main table. I use it to add multicolumn footnotes to the bottom
of the table. There is also a switch that adds a linespace between the
main table and the notes table. I think the function might be a useful
addition to the library of Babel.
I tried to design it to be a functional replacement for the booktabs
function, but don't trust my emacs-lisp (or other) programming skills.
All the best,
Tom
#+srcname: booktabs-notes
#+begin_src emacs-lisp :var table='((:head) hline (:body)) :var notes='() :var
align='() :var env="tabular" :var width='() :var lspace='() :noweb yes :results
latex
(flet ((to-tab (tab)
(orgtbl-to-generic
(mapcar (lambda (lis)
(if (listp lis)
(mapcar (lambda (el)
(if (stringp el)
el
(format "%S" el))) lis)
lis)) tab)
(list :lend " \\\\" :sep " & " :hline "\\hline"))))
(org-fill-template
"
\\begin{%env}%width%align
\\toprule
%table
\\bottomrule%spacer
%notes
\\end{%env}\n"
(list
(cons "env" (or env "table"))
(cons "width" (if width (format "{%s}" width) ""))
(cons "align" (if align (format "{%s}" align) ""))
(cons "spacer" (if lspace "\\addlinespace" ""))
(cons "table"
;; only use \midrule if it looks like there are column headers
(if (equal 'hline (second table))
(concat (to-tab (list (first table)))
"\n\\midrule\n"
(to-tab (cddr table)))
(to-tab table)))
(cons "notes" (if notes (to-tab notes) ""))
)))
#+end_src
--
Thomas S. Dye
http://www.tsdye.com
- [O] Library of Babel function,
Thomas S. Dye <=