Re: [O] [patch] LaTeX export using tabu tables
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
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
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
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
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
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
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
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
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
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
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
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
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