Re: [O] [patch] LaTeX export using tabu tables

2013-04-07 Thread Marcin Borkowski
Dnia 2013-03-27, o godz. 09:59:49
Eric Abrahamsen e...@ericabrahamsen.net napisał(a):

 Marcin Borkowski mb...@wmi.amu.edu.pl writes:
 
  Dnia 2013-03-25, o godz. 13:35:08
  Eric Abrahamsen e...@ericabrahamsen.net napisał(a):
 
  Nicolas Goaziou n.goaz...@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



Re: [O] [patch] LaTeX export using tabu tables

2013-03-27 Thread Nicolas Goaziou
Hello,

Eric Abrahamsen e...@ericabrahamsen.net writes:

 Nicolas Goaziou n.goaz...@gmail.com writes:

 I'll get this right eventually...

It looks good. I applied it.

Thank you for your work.


Regards,

-- 
Nicolas Goaziou



Re: [O] [patch] LaTeX export using tabu tables

2013-03-26 Thread Marcin Borkowski
Dnia 2013-03-25, o godz. 13:35:08
Eric Abrahamsen e...@ericabrahamsen.net napisał(a):

 Nicolas Goaziou n.goaz...@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



Re: [O] [patch] LaTeX export using tabu tables

2013-03-26 Thread Eric Abrahamsen
Marcin Borkowski mb...@wmi.amu.edu.pl writes:

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

 Nicolas Goaziou n.goaz...@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.




Re: [O] [patch] LaTeX export using tabu tables

2013-03-25 Thread Bastien
Hi Eric,

Eric Abrahamsen e...@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



Re: [O] [patch] LaTeX export using tabu tables

2013-03-25 Thread Eric Abrahamsen
Bastien b...@altern.org writes:

 Hi Eric,

 Eric Abrahamsen e...@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,




Re: [O] [patch] LaTeX export using tabu tables

2013-03-25 Thread Bastien
Hi Eric,

Eric Abrahamsen e...@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



Re: [O] [patch] LaTeX export using tabu tables

2013-03-25 Thread Nicolas Goaziou
Hello,

Eric Abrahamsen e...@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



Re: [O] [patch] LaTeX export using tabu tables

2013-03-25 Thread Eric Abrahamsen
Nicolas Goaziou n.goaz...@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
From 675c33c7939795758ae6d1c2b33201bd25a6ac6e Mon Sep 17 00:00:00 2001
From: Eric Abrahamsen e...@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 

Re: [O] [patch] LaTeX export using tabu tables

2013-03-24 Thread Nicolas Goaziou
Hello,

Eric Abrahamsen e...@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



Re: [O] [patch] LaTeX export using tabu tables

2013-03-24 Thread Eric Abrahamsen
Nicolas Goaziou n.goaz...@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

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

Re: [O] [patch] LaTeX export using tabu tables

2013-03-23 Thread Vikas Rawal
 
 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



[O] [patch] LaTeX export using tabu tables

2013-03-22 Thread Eric Abrahamsen
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

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