From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Abrahamsen Subject: Re: [patch] LaTeX export using tabu tables Date: Mon, 25 Mar 2013 13:35:08 +0800 Message-ID: <878v5cdotv.fsf@ericabrahamsen.net> References: <87li9e4u7q.fsf@ericabrahamsen.net> <87ehf5ywqn.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([208.118.235.92]:51473) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UJzyQ-0007o2-I3 for emacs-orgmode@gnu.org; Mon, 25 Mar 2013 01:29:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UJzyP-0005M3-3P for emacs-orgmode@gnu.org; Mon, 25 Mar 2013 01:29:34 -0400 Received: from plane.gmane.org ([80.91.229.3]:59527) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UJzyO-0005Lp-PU for emacs-orgmode@gnu.org; Mon, 25 Mar 2013 01:29:33 -0400 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1UJzyi-0002MC-JN for emacs-orgmode@gnu.org; Mon, 25 Mar 2013 06:29:52 +0100 Received: from 114.250.134.30 ([114.250.134.30]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 25 Mar 2013 06:29:52 +0100 Received: from eric by 114.250.134.30 with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 25 Mar 2013 06:29:52 +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 Nicolas Goaziou writes: > Thanks for your patch. I didn't know about "tabu" package, but it looks > interesting. It's definitely my new go-to table environment, though I'm struggling to ignore the fact that it's got the ugliest documentation of any LaTeX package I've ever seen. > You could also add another attribute, :spread, which would used "spread" > instead of "to" when non-nil. This way, users can have the best of both > worlds. [...] > You need to list each modified function in the commit message. [...] > IMO, it's cleaner (as in more explicit) to use: > > (unless (member table-env '("longtable" "longtabu")) ...) > > You may also use another branch in the `cond', in order to clearly > separate "tabu" and "longtabu" environments from other packages. It > would lead to some code duplication, but would allow for easier > development of tabu specific features (e.g. :spread keyword), if ever > needed. I was trying to be too clever! Attached is a non-clever version that includes a :spread keyword, and a (hopefully) correctly-written commit message. Thanks for the pointers, Eric --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0008-ox-latex.el-org-latex-org-table-org-latex-table-row-.patch >From d4daaff48978958b788d4dd3f7434b7db276e4ac Mon Sep 17 00:00:00 2001 From: Eric Abrahamsen Date: Mon, 25 Mar 2013 13:27:33 +0800 Subject: [PATCH 8/8] ox-latex.el (org-latex--org-table, org-latex-table-row): Allow use of the "tabu" table environment when exporting tables to LaTeX. * ox-latex.el (org-latex--org-table): New latex export attribute :spread accommodates weird width specification syntax of the tabu package. --- lisp/ox-latex.el | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el index 310fa14..49463ca 100644 --- a/lisp/ox-latex.el +++ b/lisp/ox-latex.el @@ -48,7 +48,7 @@ ;; - The second most important attribute is `:environment'. It is the ;; environment used for the table and defaults to ;; `org-latex-default-table-environment' value. It can be set to -;; anything, including "tabularx", "longtable", "array", +;; anything, including "tabularx", "longtable", "array", "tabu", ;; "bmatrix"... ;; ;; - `:float' attribute defines a float environment for the table. @@ -61,6 +61,12 @@ ;; alignment string of the table, its font size and its width. They ;; only apply on regular tables. ;; +;; - `:spread' is a boolean attribute specific to the "tabu" and +;; "longtabu" environments, and only takes effect when used in +;; conjunction with the `:width' attribute. When `:spread' is +;; present, the table will be spread or shrunk by the value of +;; `:width'. +;; ;; - `:booktabs', `:center' and `:rmlines' values are booleans. They ;; toggle, respectively "booktabs" usage (assuming the package is ;; properly loaded), table centering and removal of every horizontal @@ -2429,7 +2435,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 (member table-env '("longtabu" "longtable")) (let ((float (plist-get attr :float))) (cond ((string= float "sidewaystable") "sidewaystable") @@ -2441,6 +2447,7 @@ This function assumes TABLE has `org' as its `:type' property and (fontsize (let ((font (plist-get attr :font))) (and font (concat font "\n")))) (width (plist-get attr :width)) + (spread (plist-member attr :spread)) (placement (or (plist-get attr :placement) (format "[%s]" org-latex-default-figure-position))) (centerp (if (plist-member attr :center) (plist-get attr :center) @@ -2460,6 +2467,23 @@ This function assumes TABLE has `org' as its `:type' property and (concat caption "\\\\\n")) "\\end{longtable}\n" (and fontsize "}"))) + ;; Longtabu + ((equal "longtabu" table-env) + (concat (and fontsize (concat "{" fontsize)) + (format "\\begin{longtabu}%s{%s}\n" + (if width + (format " %s %s " + (if spread "spread" "to") width) "") + alignment) + (and org-latex-table-caption-above + (org-string-nw-p caption) + (concat caption "\\\\\n")) + contents + (and (not org-latex-table-caption-above) + (org-string-nw-p caption) + (concat caption "\\\\\n")) + "\\end{longtabu}\n" + (and fontsize "}"))) ;; Others. (t (concat (cond (float-env @@ -2471,7 +2495,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) + (if spread " spread %s " " to %s") + "{%s}") width) "") alignment contents table-env) @@ -2634,9 +2661,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 (member (or (plist-get attr :environment) + org-latex-default-table-environment) + '("longtable" "longtabu"))) (booktabsp (if (plist-member attr :booktabs) (plist-get attr :booktabs) org-latex-tables-booktabs)) -- 1.8.2 --=-=-=--