From mboxrd@z Thu Jan 1 00:00:00 1970 From: tsd@tsdye.com (Thomas S. Dye) Subject: [PATCH] Library of Babel source block Date: Sun, 28 Aug 2011 07:11:36 -1000 Message-ID: References: <87aaatbmq2.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([140.186.70.92]:44779) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qxitf-0004KL-0n for emacs-orgmode@gnu.org; Sun, 28 Aug 2011 13:11:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Qxitd-0003R9-84 for emacs-orgmode@gnu.org; Sun, 28 Aug 2011 13:11:46 -0400 Received: from oproxy5-pub.bluehost.com ([67.222.38.55]:48856) by eggs.gnu.org with smtp (Exim 4.71) (envelope-from ) id 1Qxitc-0003PR-QH for emacs-orgmode@gnu.org; Sun, 28 Aug 2011 13:11:45 -0400 In-Reply-To: <87aaatbmq2.fsf@gmail.com> (Eric Schulte's message of "Sun, 28 Aug 2011 08:44:52 -0600") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Eric Schulte Cc: Org-mode --=-=-= Eric Schulte writes: > Hi Tom, > > This sounds great, would you mind submitting this as a patch to the > library-of-babel.org file in the git repository, with some included > usage instructions in the same subtree as the code block? > > Thanks! -- Eric > > tsd@tsdye.com (Thomas S. Dye) writes: > >> 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 Hi Eric, Here is the patch that adds the booktabs-notes source block. I took the liberty of editing the description of the booktabs source block, which contained a contradiction about the number of required and optional arguments. Take a look to make sure I resolved the contradiction correctly. I tried to follow Bastien's suggestion about adding a change log to the commit message, but ended up with something that looks different than his example. I'm not sure why--perhaps Bastien is not working in magit, so his instructions apply to some other context? All the best, Tom --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-contrib-babel-library-of-babel.org-2011-08-28-Thomas.patch Content-Description: Source block for Library of Babel >From ebc18deea7958cf70f761b1fff8134c1e0a35288 Mon Sep 17 00:00:00 2001 From: Tom Dye Date: Sun, 28 Aug 2011 07:00:32 -1000 Subject: [PATCH] * contrib/babel/library-of-babel.org: 2011-08-28 Thomas Dye * Add booktabs-notes source block to the Library of Babel. Minor edits to booktabs documentation. --- contrib/babel/library-of-babel.org | 74 +++++++++++++++++++++++++++++++++--- 1 files changed, 68 insertions(+), 6 deletions(-) diff --git a/contrib/babel/library-of-babel.org b/contrib/babel/library-of-babel.org index e76b313..c3b000c 100644 --- a/contrib/babel/library-of-babel.org +++ b/contrib/babel/library-of-babel.org @@ -194,18 +194,26 @@ plot(data) * Tables -** LaTeX Table export +** LaTeX Table Export *** booktabs -This block can be used to wrap a table in the latex =booktabs= -environment, it takes the following arguments -- all but the first two -are optional. +This source block can be used to wrap a table in the latex =booktabs= +environment. The source block adds a =toprule= and =bottomrule= (so +don't use =hline= at the top or bottom of the table). The =hline= +after the header is replaced with a =midrule=. + +Note that this function bypasses the Org-mode LaTeX exporter and calls +=orgtbl-to-generic= to create the output table. This means that the +entries in the table are not translated from Org-mode to LaTeX. + +It takes the following arguments -- all but the first two are +optional. | arg | description | |-------+--------------------------------------------| | table | a reference to the table | -| align | optional alignment string | +| align | alignment string | | env | optional environment, default to "tabular" | | width | optional width specification string | @@ -241,7 +249,7 @@ are optional. (to-tab table)))))) #+end_src -*** Longtable +*** longtable This block can be used to wrap a table in the latex =longtable= environment, it takes the following arguments -- all but the first two @@ -288,6 +296,60 @@ are optional. (list :lend " \\\\" :sep " & " :hline hline))))) #+end_src + +*** booktabs-notes + +This source block builds on [[booktabs]]. It accepts two additional +arguments, both of which are optional. + +#+tblname: arguments +| arg | description | +|--------+------------------------------------------------------| +| notes | an org-mode table with footnotes | +| lspace | if non-nil, insert =addlinespace= after =bottomrule= | + +An example footnote to the =arguments= table specifies the column +span. Note the use of LaTeX, rather than Org-mode, markup. + +#+tblname: arguments-notes +| \multicolumn{2}{l}{This is a footnote to the \emph{arguments} table.} | + +#+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 + ** Elegant lisp for transposing a matrix. #+tblname: transpose-example -- 1.7.1 --=-=-= -- Thomas S. Dye http://www.tsdye.com --=-=-=--