From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Abrahamsen Subject: [patch] LaTeX export using tabu tables Date: Sat, 23 Mar 2013 12:26:49 +0800 Message-ID: <87li9e4u7q.fsf@ericabrahamsen.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([208.118.235.92]:39560) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UJFxH-0005G4-Dm for emacs-orgmode@gnu.org; Sat, 23 Mar 2013 00:21:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UJFxE-0007dx-TW for emacs-orgmode@gnu.org; Sat, 23 Mar 2013 00:21:19 -0400 Received: from plane.gmane.org ([80.91.229.3]:55933) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UJFxE-0007dt-Mv for emacs-orgmode@gnu.org; Sat, 23 Mar 2013 00:21:16 -0400 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1UJFxb-00055n-2l for emacs-orgmode@gnu.org; Sat, 23 Mar 2013 05:21:39 +0100 Received: from 114.252.249.201 ([114.252.249.201]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sat, 23 Mar 2013 05:21:39 +0100 Received: from eric by 114.252.249.201 with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sat, 23 Mar 2013 05:21:39 +0100 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: emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain There are about forty different table environments for latex, all of which do slightly different things, and none of them seem to do it all. I found the "tabu" package recently, and thought "oh god another one", but it seems to do it all: clever column alignment, longtable functionality, all that good stuff. Attached is a patch that lets you use the "tabu" and "longtabu" table environments. Mostly the patch is necessary because tabu has its own annoying syntax for table width declarations. Where everyone else does something like: \begin{tabular}{\textwidth}{cllr} tabu does this: \begin{tabu} to \textwidth {cllr} Where you're allowed to use either "to" or "spread". Annoying, but in my case still worth it. Since table plists can handle spaces, this works with the attached patch: #+ATTR_LATEX: :environment tabu :width to \textwidth :font \scriptsize :align rXrXrr Actually I've just set `org-latex-default-table-environment' to tabu. Dunno if this is worth it for other people, but there's the patch. If access to the "spread" keyword isn't worth the trouble I can hard-code "to": that would at least mean you could switch between table and tabu without having to edit your ATTR_LATEX lines. Yrs, Eric --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0008-Allow-LaTeX-export-of-tables-using-the-tabu-package.patch >From ff2635d43509481ea4b72596a325a6f155dc0cfe Mon Sep 17 00:00:00 2001 From: Eric Abrahamsen Date: Sat, 23 Mar 2013 12:15:29 +0800 Subject: [PATCH 8/8] Allow LaTeX export of tables using the tabu package --- lisp/ox-latex.el | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el index 310fa14..1410b49 100644 --- a/lisp/ox-latex.el +++ b/lisp/ox-latex.el @@ -2429,7 +2429,7 @@ This function assumes TABLE has `org' as its `:type' property and org-latex-default-table-environment)) ;; If table is a float, determine environment: table, table* ;; or sidewaystable. - (float-env (unless (equal "longtable" table-env) + (float-env (unless (string-match-p "longtab" table-env) (let ((float (plist-get attr :float))) (cond ((string= float "sidewaystable") "sidewaystable") @@ -2447,10 +2447,12 @@ This function assumes TABLE has `org' as its `:type' property and org-latex-tables-centered))) ;; Prepare the final format string for the table. (cond - ;; Longtable. - ((equal "longtable" table-env) + ;; Longtable or longtabu. + ((string-match-p "longtab" table-env) (concat (and fontsize (concat "{" fontsize)) - (format "\\begin{longtable}{%s}\n" alignment) + (format "\\begin{%s}%s{%s}\n" table-env + (if (and width (equal "longtabu" table-env)) + (format " %s " width) "") alignment) (and org-latex-table-caption-above (org-string-nw-p caption) (concat caption "\\\\\n")) @@ -2458,7 +2460,7 @@ This function assumes TABLE has `org' as its `:type' property and (and (not org-latex-table-caption-above) (org-string-nw-p caption) (concat caption "\\\\\n")) - "\\end{longtable}\n" + (format "\\end{%s}\n" table-env) (and fontsize "}"))) ;; Others. (t (concat (cond @@ -2471,7 +2473,10 @@ This function assumes TABLE has `org' as its `:type' property and (fontsize (concat "{" fontsize))) (format "\\begin{%s}%s{%s}\n%s\\end{%s}" table-env - (if width (format "{%s}" width) "") + (if width (format + (if (equal "tabu" table-env) + " %s " + "{%s}") width) "") alignment contents table-env) @@ -2634,9 +2639,9 @@ a communication channel." (when (eq (org-element-property :type table-row) 'standard) (let* ((attr (org-export-read-attribute :attr_latex (org-export-get-parent table-row))) - (longtablep (string= (or (plist-get attr :environment) - org-latex-default-table-environment) - "longtable")) + (longtablep (string-match-p "longtab" + (or (plist-get attr :environment) + org-latex-default-table-environment))) (booktabsp (if (plist-member attr :booktabs) (plist-get attr :booktabs) org-latex-tables-booktabs)) -- 1.8.2 --=-=-=--