emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [patch] LaTeX export using tabu tables
@ 2013-03-23  4:26 Eric Abrahamsen
  2013-03-24  0:18 ` Vikas Rawal
  2013-03-24  9:26 ` Nicolas Goaziou
  0 siblings, 2 replies; 13+ messages in thread
From: Eric Abrahamsen @ 2013-03-23  4:26 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 1221 bytes --]

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


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0008-Allow-LaTeX-export-of-tables-using-the-tabu-package.patch --]
[-- Type: text/x-patch, Size: 2901 bytes --]

From ff2635d43509481ea4b72596a325a6f155dc0cfe Mon Sep 17 00:00:00 2001
From: Eric Abrahamsen <eric@ericabrahamsen.net>
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


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [patch] LaTeX export using tabu tables
  2013-03-23  4:26 [patch] LaTeX export using tabu tables Eric Abrahamsen
@ 2013-03-24  0:18 ` Vikas Rawal
  2013-03-24  9:26 ` Nicolas Goaziou
  1 sibling, 0 replies; 13+ messages in thread
From: Vikas Rawal @ 2013-03-24  0:18 UTC (permalink / raw)
  To: Eric Abrahamsen; +Cc: emacs-orgmode

> 
> 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:

Great!


> 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.
> 
I think that would be better. Capability to switch between different
table environments should be important from a user's perspective.

Vikas

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [patch] LaTeX export using tabu tables
  2013-03-23  4:26 [patch] LaTeX export using tabu tables Eric Abrahamsen
  2013-03-24  0:18 ` Vikas Rawal
@ 2013-03-24  9:26 ` Nicolas Goaziou
  2013-03-25  5:35   ` Eric Abrahamsen
  1 sibling, 1 reply; 13+ messages in thread
From: Nicolas Goaziou @ 2013-03-24  9:26 UTC (permalink / raw)
  To: Eric Abrahamsen; +Cc: emacs-orgmode

Hello,

Eric Abrahamsen <eric@ericabrahamsen.net> writes:

> 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.

Thanks for your patch. I didn't know about "tabu" package, but it looks
interesting.

I added some comments and suggestions wrt to the patch.

> 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.

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.

That new attribute needs to be documented in the comments at the
beginning of the library.

> Subject: [PATCH 8/8] Allow LaTeX export of tables using the tabu
> package

You need to list each modified function in the commit message.

> ---
>  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)

IMO, it's cleaner (as in more explicit) to use:

  (unless (member table-env '("longtable" "longtabu")) ...)

> -     ;; Longtable.
> -     ((equal "longtable" table-env)
> +     ;; Longtable or longtabu.
> +     ((string-match-p "longtab" table-env)

Ditto.

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.

> -	   (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)))

See remark above.


Regards,

-- 
Nicolas Goaziou

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [patch] LaTeX export using tabu tables
  2013-03-24  9:26 ` Nicolas Goaziou
@ 2013-03-25  5:35   ` Eric Abrahamsen
  2013-03-25  5:54     ` Bastien
                       ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Eric Abrahamsen @ 2013-03-25  5:35 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 1129 bytes --]

Nicolas Goaziou <n.goaziou@gmail.com> 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


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0008-ox-latex.el-org-latex-org-table-org-latex-table-row-.patch --]
[-- Type: text/x-patch, Size: 4423 bytes --]

From d4daaff48978958b788d4dd3f7434b7db276e4ac Mon Sep 17 00:00:00 2001
From: Eric Abrahamsen <eric@ericabrahamsen.net>
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


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [patch] LaTeX export using tabu tables
  2013-03-25  5:35   ` Eric Abrahamsen
@ 2013-03-25  5:54     ` Bastien
  2013-03-25  6:54       ` Eric Abrahamsen
  2013-03-25 19:59     ` Nicolas Goaziou
  2013-03-26 20:05     ` Marcin Borkowski
  2 siblings, 1 reply; 13+ messages in thread
From: Bastien @ 2013-03-25  5:54 UTC (permalink / raw)
  To: Eric Abrahamsen; +Cc: emacs-orgmode

Hi Eric,

Eric Abrahamsen <eric@ericabrahamsen.net> writes:

> Attached is a non-clever version that includes a :spread keyword,
> and a (hopefully) correctly-written commit message.

Thanks!  

I was surprised not to find you on the list of FSF-signed contributors
-- did you assigned your copyright to the FSF already?  If not, you'll
need to go through this for the patch to be included I'm afraid...

Thanks for letting us know.

Best,

-- 
 Bastien

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [patch] LaTeX export using tabu tables
  2013-03-25  6:54       ` Eric Abrahamsen
@ 2013-03-25  6:51         ` Bastien
  0 siblings, 0 replies; 13+ messages in thread
From: Bastien @ 2013-03-25  6:51 UTC (permalink / raw)
  To: Eric Abrahamsen; +Cc: emacs-orgmode

Hi Eric,

Eric Abrahamsen <eric@ericabrahamsen.net> writes:

> Huh, that surprises me too! I looked in my files and I'm supposed to be
> RT:710483, whatever that means -- they told me it would apply to any
> emacs-related packages...

We're all set then, I added you to the page:
http://orgmode.org/worg/org-contribute.html#contributors_with_fsf_papers

Thanks for confirming!

-- 
 Bastien

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [patch] LaTeX export using tabu tables
  2013-03-25  5:54     ` Bastien
@ 2013-03-25  6:54       ` Eric Abrahamsen
  2013-03-25  6:51         ` Bastien
  0 siblings, 1 reply; 13+ messages in thread
From: Eric Abrahamsen @ 2013-03-25  6:54 UTC (permalink / raw)
  To: emacs-orgmode

Bastien <bzg@altern.org> writes:

> Hi Eric,
>
> Eric Abrahamsen <eric@ericabrahamsen.net> writes:
>
>> Attached is a non-clever version that includes a :spread keyword,
>> and a (hopefully) correctly-written commit message.
>
> Thanks!  
>
> I was surprised not to find you on the list of FSF-signed contributors
> -- did you assigned your copyright to the FSF already?  If not, you'll
> need to go through this for the patch to be included I'm afraid...

Huh, that surprises me too! I looked in my files and I'm supposed to be
RT:710483, whatever that means -- they told me it would apply to any
emacs-related packages...


>
> Thanks for letting us know.
>
> Best,

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [patch] LaTeX export using tabu tables
  2013-03-25  5:35   ` Eric Abrahamsen
  2013-03-25  5:54     ` Bastien
@ 2013-03-25 19:59     ` Nicolas Goaziou
  2013-03-26  2:54       ` Eric Abrahamsen
  2013-03-26 20:05     ` Marcin Borkowski
  2 siblings, 1 reply; 13+ messages in thread
From: Nicolas Goaziou @ 2013-03-25 19:59 UTC (permalink / raw)
  To: Eric Abrahamsen; +Cc: emacs-orgmode

Hello,

Eric Abrahamsen <eric@ericabrahamsen.net> writes:

> 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.

Nice. A few more comments follow.

> 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.

Actually the first line of the commit should be more general (and
shouldn't end with a full stop). Perhaps something like:

  ox-latex: Allow use of "tabu" table environment

> * ox-latex.el (org-latex--org-table): New latex export attribute
>   :spread accommodates weird width specification syntax of the tabu
>   package.

I would drop a note about the "tabu" and "longtabu" support in the
description of the patch.

> +;; - `: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

Nitpick: Emacs documentation and comments require two spaces after
a sentence.

> +	 (spread (plist-member attr :spread))

I think you mean (plist-get attr :spread), otherwise ":spread nil" will
still activate spread. Also, since it's a predicate, I suggest to name
the variable "spreadp".

>  	 (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) "")

"longtabu" gets its own cond branch, but not "tabu". I think that
defeats the purpose of the separation, which is to be able to add
support for features of this rich table environment without cluttering
the rest of the code. Doing it partially isn't worth the code
duplication it implies.

IOW, either we separate both "tabu" and "longtabu" completely, or we
separate none of them. Your call.


Thank you again.


Regards,

-- 
Nicolas Goaziou

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [patch] LaTeX export using tabu tables
  2013-03-25 19:59     ` Nicolas Goaziou
@ 2013-03-26  2:54       ` Eric Abrahamsen
  2013-03-27 14:29         ` Nicolas Goaziou
  0 siblings, 1 reply; 13+ messages in thread
From: Eric Abrahamsen @ 2013-03-26  2:54 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 943 bytes --]

Nicolas Goaziou <n.goaziou@gmail.com> writes:

I'll get this right eventually...

>> +	 (spread (plist-member attr :spread))
>
> I think you mean (plist-get attr :spread), otherwise ":spread nil" will
> still activate spread. Also, since it's a predicate, I suggest to name
> the variable "spreadp".

Me being clever again -- I misunderstood how that would work.


[...]

> "longtabu" gets its own cond branch, but not "tabu". I think that
> defeats the purpose of the separation, which is to be able to add
> support for features of this rich table environment without cluttering
> the rest of the code. Doing it partially isn't worth the code
> duplication it implies.
>
> IOW, either we separate both "tabu" and "longtabu" completely, or we
> separate none of them. Your call.

I've kept the separation. There was no need to duplicate all the float
environment stuff, so there's not too much extra code.

Thanks for all the pointers!

Eric

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-ox-latex-Allow-use-of-the-tabu-and-longtabu-table-en.patch --]
[-- Type: text/x-patch, Size: 4763 bytes --]

From 675c33c7939795758ae6d1c2b33201bd25a6ac6e Mon Sep 17 00:00:00 2001
From: Eric Abrahamsen <eric@ericabrahamsen.net>
Date: Tue, 26 Mar 2013 10:45:30 +0800
Subject: [PATCH] ox-latex: Allow use of the "tabu" and "longtabu" table
 environments

* lisp/ox-latex.el (org-latex--org-table, org-latex-table-row): New
  table attribute :spread handles the width specification syntax of
  "tabu" and "longtabu" table environments.
---
 lisp/ox-latex.el | 51 +++++++++++++++++++++++++++++++++++++++++----------
 1 file changed, 41 insertions(+), 10 deletions(-)

diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el
index 310fa14..7ca1f94 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 '("longtable" "longtabu"))
 		      (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))
+	 (spreadp (plist-get 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 spreadp "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
@@ -2469,12 +2493,19 @@ This function assumes TABLE has `org' as its `:type' property and
 			  fontsize))
 		 (centerp (concat "\\begin{center}\n" fontsize))
 		 (fontsize (concat "{" fontsize)))
-		(format "\\begin{%s}%s{%s}\n%s\\end{%s}"
-			table-env
-			(if width (format "{%s}" width) "")
-			alignment
-			contents
-			table-env)
+		(cond ((equal "tabu" table-env)
+		       (format "\\begin{tabu}%s{%s}\n%s\\end{tabu}"
+			       (if width (format
+					  (if spreadp " spread %s " " to %s ")
+					  width) "")
+			       alignment
+			       contents))
+		      (t (format "\\begin{%s}%s{%s}\n%s\\end{%s}"
+				 table-env
+				 (if width (format "{%s}" width) "")
+				 alignment
+				 contents
+				 table-env)))
 		(cond
 		 (float-env
 		  (concat (if org-latex-table-caption-above "" caption)
@@ -2634,9 +2665,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)
+	   (longtablep (member (or (plist-get attr :environment)
 				    org-latex-default-table-environment)
-				"longtable"))
+				'("longtable" "longtabu")))
 	   (booktabsp (if (plist-member attr :booktabs)
 			  (plist-get attr :booktabs)
 			org-latex-tables-booktabs))
-- 
1.8.2


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [patch] LaTeX export using tabu tables
  2013-03-25  5:35   ` Eric Abrahamsen
  2013-03-25  5:54     ` Bastien
  2013-03-25 19:59     ` Nicolas Goaziou
@ 2013-03-26 20:05     ` Marcin Borkowski
  2013-03-27  1:59       ` Eric Abrahamsen
  2 siblings, 1 reply; 13+ messages in thread
From: Marcin Borkowski @ 2013-03-26 20:05 UTC (permalink / raw)
  To: emacs-orgmode

Dnia 2013-03-25, o godz. 13:35:08
Eric Abrahamsen <eric@ericabrahamsen.net> napisał(a):

> Nicolas Goaziou <n.goaziou@gmail.com> 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.

Slightly off-topic: I've looked (briefly) into tabu's documentation,
and I agree;).  If you want your tables /beautiful/, however, I strongly
recommend checking out the booktabs package (its manual contains also
general aesthetical/typographical advice on tables!).

Best,

-- 
Marcin Borkowski
http://octd.wmi.amu.edu.pl/en/Marcin_Borkowski
Adam Mickiewicz University

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [patch] LaTeX export using tabu tables
  2013-03-26 20:05     ` Marcin Borkowski
@ 2013-03-27  1:59       ` Eric Abrahamsen
  2013-04-07 13:15         ` Marcin Borkowski
  0 siblings, 1 reply; 13+ messages in thread
From: Eric Abrahamsen @ 2013-03-27  1:59 UTC (permalink / raw)
  To: emacs-orgmode

Marcin Borkowski <mbork@wmi.amu.edu.pl> writes:

> Dnia 2013-03-25, o godz. 13:35:08
> Eric Abrahamsen <eric@ericabrahamsen.net> napisał(a):
>
>> Nicolas Goaziou <n.goaziou@gmail.com> 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.
>
> Slightly off-topic: I've looked (briefly) into tabu's documentation,
> and I agree;).  If you want your tables /beautiful/, however, I strongly
> recommend checking out the booktabs package (its manual contains also
> general aesthetical/typographical advice on tables!).

Isn't it ghastly? Works great though. I'm definitely using booktabs and
enjoying it. That's the nice thing about tabu, it does a good job of
using extend existing table packages (longtable, colortab, etc) rather
than rolling its own. I'm particularly pleased with the siunitx
integration -- it means I can get rid of a table filter that added
\num{NN} all over the place.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [patch] LaTeX export using tabu tables
  2013-03-26  2:54       ` Eric Abrahamsen
@ 2013-03-27 14:29         ` Nicolas Goaziou
  0 siblings, 0 replies; 13+ messages in thread
From: Nicolas Goaziou @ 2013-03-27 14:29 UTC (permalink / raw)
  To: Eric Abrahamsen; +Cc: emacs-orgmode

Hello,

Eric Abrahamsen <eric@ericabrahamsen.net> writes:

> Nicolas Goaziou <n.goaziou@gmail.com> writes:
>
> I'll get this right eventually...

It looks good. I applied it.

Thank you for your work.


Regards,

-- 
Nicolas Goaziou

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [patch] LaTeX export using tabu tables
  2013-03-27  1:59       ` Eric Abrahamsen
@ 2013-04-07 13:15         ` Marcin Borkowski
  0 siblings, 0 replies; 13+ messages in thread
From: Marcin Borkowski @ 2013-04-07 13:15 UTC (permalink / raw)
  To: emacs-orgmode

Dnia 2013-03-27, o godz. 09:59:49
Eric Abrahamsen <eric@ericabrahamsen.net> napisał(a):

> Marcin Borkowski <mbork@wmi.amu.edu.pl> writes:
> 
> > Dnia 2013-03-25, o godz. 13:35:08
> > Eric Abrahamsen <eric@ericabrahamsen.net> napisał(a):
> >
> >> Nicolas Goaziou <n.goaziou@gmail.com> 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.
> >
> > Slightly off-topic: I've looked (briefly) into tabu's documentation,
> > and I agree;).  If you want your tables /beautiful/, however, I
> > strongly recommend checking out the booktabs package (its manual
> > contains also general aesthetical/typographical advice on tables!).
> 
> Isn't it ghastly? Works great though. I'm definitely using booktabs
> and enjoying it. That's the nice thing about tabu, it does a good job
> of using extend existing table packages (longtable, colortab, etc)
> rather than rolling its own. I'm particularly pleased with the siunitx
> integration -- it means I can get rid of a table filter that added
> \num{NN} all over the place.

Well, that means that I'll have to look at tabu a bit closer (despite
the appalling look of the docs).  Thanks for the pointer!

Best,

-- 
Marcin Borkowski
http://octd.wmi.amu.edu.pl/en/Marcin_Borkowski
Adam Mickiewicz University

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2013-04-07 13:15 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-03-23  4:26 [patch] LaTeX export using tabu tables Eric Abrahamsen
2013-03-24  0:18 ` Vikas Rawal
2013-03-24  9:26 ` Nicolas Goaziou
2013-03-25  5:35   ` Eric Abrahamsen
2013-03-25  5:54     ` Bastien
2013-03-25  6:54       ` Eric Abrahamsen
2013-03-25  6:51         ` Bastien
2013-03-25 19:59     ` Nicolas Goaziou
2013-03-26  2:54       ` Eric Abrahamsen
2013-03-27 14:29         ` Nicolas Goaziou
2013-03-26 20:05     ` Marcin Borkowski
2013-03-27  1:59       ` Eric Abrahamsen
2013-04-07 13:15         ` Marcin Borkowski

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).