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