Patchwork [O] customize latex table export

login
register
Submitter Christophe Rhodes
Date 2011-11-29 17:44:26
Message ID <87fwh6escl.fsf@cantab.net>
Download mbox | patch
Permalink /patch/1061/
State New
Headers show

Comments

Christophe Rhodes - 2011-11-29 17:44:26
Carsten Dominik <carsten.dominik@gmail.com> writes, a long time ago:

> On May 19, 2011, at 2:34 PM, Christophe Rhodes wrote:
>
>> To produce documents in something approaching my organization's house
>> style, I need to be able to style the headers of tables.  It's nice that
>> orgtbl has the functionality for this, but the call to orgtbl-to-latex
>> has a hard-coded list of parameters with no possibility for extension.
>> With the attached patch, I am able to put e.g.
>> 
>> #+BIND: org-export-latex-tables-orgtbl-extra-parameters (:hfmt "\\multicolumn{1}{c}{\\bf\\color{white}\\cellcolor{blue}%s}")
>> 
>> in the header of my document, and tables throughout the document all
>> pick up this style.
>> 
>> I daresay that this is not the optimal way of doing things; while this
>> solves my immediate problem there is likely to be a more general way of
>> doing things.
>
> would it be better to be able to set these parameters on a per-table basis with ATTR_LaTeX ?
> Would you like to try to prepare a patch to this effect?

Find attached a patch to this effect.  It is the combination of two
changes which I consider tiny: one is the support for hfmt itself as an
ATTR_LaTeX attribute; the other is the consolidation of the
word-matching on the attributes into local macros, which I needed
because my use case (as above) includes the string "multicolumn", which
was otherwise confusing the attribute parser into thinking that I needed
a table* LaTeX environment.

Please let me know if this suits better.
Christophe
niels giesen - 2011-12-02 09:59:05
Hi Christophe,

Could you provide us with a minimal example of how this new functionality
can be used?

I am trying to test it and see if there are any conflicts with my patch of
late to supports the booktabs package @
http://patchwork.newartisans.com/patch/1016/  (aside from one of the two
patches not applying without some minor human intervention around line
1998).

Besides that, it would in general be good to have an example for
documentation purposes.

On Tue, Nov 29, 2011 at 6:44 PM, Christophe Rhodes <csr21@cantab.net> wrote:

> Carsten Dominik <carsten.dominik@gmail.com> writes, a long time ago:
>
> > On May 19, 2011, at 2:34 PM, Christophe Rhodes wrote:
> >
> >> To produce documents in something approaching my organization's house
> >> style, I need to be able to style the headers of tables.  It's nice that
> >> orgtbl has the functionality for this, but the call to orgtbl-to-latex
> >> has a hard-coded list of parameters with no possibility for extension.
> >> With the attached patch, I am able to put e.g.
> >>
> >> #+BIND: org-export-latex-tables-orgtbl-extra-parameters (:hfmt
> "\\multicolumn{1}{c}{\\bf\\color{white}\\cellcolor{blue}%s}")
> >>
> >> in the header of my document, and tables throughout the document all
> >> pick up this style.
> >>
> >> I daresay that this is not the optimal way of doing things; while this
> >> solves my immediate problem there is likely to be a more general way of
> >> doing things.
> >
> > would it be better to be able to set these parameters on a per-table
> basis with ATTR_LaTeX ?
> > Would you like to try to prepare a patch to this effect?
>
> Find attached a patch to this effect.  It is the combination of two
> changes which I consider tiny: one is the support for hfmt itself as an
> ATTR_LaTeX attribute; the other is the consolidation of the
> word-matching on the attributes into local macros, which I needed
> because my use case (as above) includes the string "multicolumn", which
> was otherwise confusing the attribute parser into thinking that I needed
> a table* LaTeX environment.
>
> Please let me know if this suits better.
>
>
>
> Christophe
>
>
Christophe Rhodes - 2011-12-02 10:21:13
Niels Giesen <niels.giesen@gmail.com> writes:

> Could you provide us with a minimal example of how this new functionality
> can be used?

Sure, sorry.  Here we go:

--- start here ---
#+TITLE: Example of using hfmt
#+AUTHOR: Christophe Rhodes

* Introduction
  This document shows the use of the =hfmt= tag in =#+LaTeX_ATTR=
  lines to customize table headings.  Analgous functionality is
  available in HTML export by customizing the style of =th= tags.
* Example table

#+ATTR_LaTeX: hfmt=\multicolumn{1}{c}{\textbf{%s}}
| table       | headings  |
|-------------+-----------|
| body        | cells     |
| have        | unchanged |
| formatting. |           |
---  end here  ---

> I am trying to test it and see if there are any conflicts with my patch of
> late to supports the booktabs package @
> http://patchwork.newartisans.com/patch/1016/  (aside from one of the two
> patches not applying without some minor human intervention around line
> 1998).

Apart from the code conflict itself, I don't see why it shouldn't work:
this patch only changes the export of individual cells, while the
booktabs one alters the export of lines :-).  Your patch took the
approach I originally took too, with a customization variable; Carsten
(in May, aeons ago) suggested that an attribute might be preferable,
which is why I've reworked it in this way.  (It might be sensible for my
patch to have a configuration variable so that there could be a
document-wide default, too; I don't know whether it would be sensible
for yours to be customizeable using ATTR_LaTeX...

> Besides that, it would in general be good to have an example for
> documentation purposes.

I hope this helps,

Christophe
Christophe Rhodes - 2011-12-07 15:43:19
Hi,

Christophe Rhodes <csr21@cantab.net> writes:

> Carsten Dominik <carsten.dominik@gmail.com> writes, a long time ago:
>
>>
>> would it be better to be able to set these parameters on a per-table
>> basis with ATTR_LaTeX ?  Would you like to try to prepare a patch to
>> this effect?
>
> Find attached a patch to this effect.

Is there anything else that I can do to encourage this patch into the
upstream org-mode?

Thanks,

Christophe
Christophe Rhodes - 2011-12-14 09:01:49
Christophe Rhodes <csr21@cantab.net> writes:

> Christophe Rhodes <csr21@cantab.net> writes:
>
>> Carsten Dominik <carsten.dominik@gmail.com> writes, a long time ago:
>>
>>>
>>> would it be better to be able to set these parameters on a per-table
>>> basis with ATTR_LaTeX ?  Would you like to try to prepare a patch to
>>> this effect?
>>
>> Find attached a patch to this effect.
>
> Is there anything else that I can do to encourage this patch into the
> upstream org-mode?

Again, is there anything more I can do to get this functionality
(customizing header lines of tables in LaTeX export, in case everyone
has lost the context) into org-mode?

Best,

Christophe
Bastien Guerry - 2011-12-14 10:19:15
Hi Christophe,

Christophe Rhodes <csr21@cantab.net> writes:

> Again, is there anything more I can do to get this functionality
> (customizing header lines of tables in LaTeX export, in case everyone
> has lost the context) into org-mode?

I saw your patch, thanks for it.

I'm willing to apply it, but I will do when I have a good idea of how it
interacts with Niels proposal, and maybe a generalization of Niels idea,
where it would be possible to set a default #+ATTR for tables, images,
etc.

Best,

Patch

From aba08346276e558fd7f6aa635e6f1e5081a2d3c3 Mon Sep 17 00:00:00 2001
From: Christophe Rhodes <csr21@cantab.net>
Date: Tue, 29 Nov 2011 17:30:14 +0000
Subject: [PATCH] hfmt table attribute in LaTeX export

* org-latex.el (org-export-latex-tables):
  - new word-match and attr-match local macros to reduce
    boilerplate.  (This is a tiny, mechanical change)
  - support hfmt LaTeX_ATTR attribute, and if given pass
    it through to orgtbl-to-latex.  (This is a tiny change)
---
 lisp/org-latex.el |   28 ++++++++++++++--------------
 1 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/lisp/org-latex.el b/lisp/org-latex.el
index 2ec347a..aebfda5 100644
--- a/lisp/org-latex.el
+++ b/lisp/org-latex.el
@@ -1891,7 +1891,10 @@  The conversion is made depending of STRING-BEFORE and STRING-AFTER."
                                 "\\end{verbatim}\n")))
               (apply 'delete-region (list beg end))
               (insert (org-export-latex-protect-string tbl)))
-          (progn
+          (macrolet ((word-match (string haystack)
+		       `(string-match ,(format "\\(?:\\`\\|\\s-\\)%s\\(?:\\'\\|\\s-\\)" string) ,haystack))
+		     (attr-match (string)
+		       `(and attr (stringp attr) (word-match ,string attr))))
             (setq caption (org-find-text-property-in-string
                            'org-caption raw-table)
 		  shortn (org-find-text-property-in-string
@@ -1901,26 +1904,22 @@  The conversion is made depending of STRING-BEFORE and STRING-AFTER."
                   label (org-find-text-property-in-string
                          'org-label raw-table)
                   longtblp (and attr (stringp attr)
-                                (string-match "\\<longtable\\>" attr))
-		  tblenv (if (and attr (stringp attr)
-				  (or (string-match (regexp-quote "table*") attr)
-				      (string-match "\\<multicolumn\\>" attr)))
+                                (word-match "longtable" attr))
+		  tblenv (if (or (attr-match (regexp-quote "table*"))
+				 (attr-match "multicolumn"))
 			     "table*" "table")
 		  tabular-env
-		  (if (and attr (stringp attr)
-			   (string-match "\\(tabular.\\)" attr))
+		  (if (attr-match "\\(tabular.\\)")
 		      (match-string 1 attr)
 		    org-export-latex-tabular-environment)
-		  width (and attr (stringp attr)
-                             (string-match "\\<width=\\([^ \t\n\r]+\\)" attr)
+		  width (and (attr-match "width=\\(\\S-+\\)")
                              (match-string 1 attr))
-                  align (and attr (stringp attr)
-                             (string-match "\\<align=\\([^ \t\n\r]+\\)" attr)
+                  align (and (attr-match "align=\\(\\S-+\\)")
                              (match-string 1 attr))
+		  hfmt (and (attr-match "hfmt=\\(\\S-+\\)")
+			    (match-string 1 attr))
                   floatp (or caption label (string= "table*" tblenv))
-		  placement     (if (and attr
-					 (stringp attr)
-					 (string-match "[ \t]*\\<placement=\\(\\S-+\\)" attr))
+		  placement     (if (attr-match "placement=\\(\\S-+\\)")
 				    (match-string 1 attr)
 				  (concat
 				   "[" org-latex-default-figure-position "]")))
@@ -1999,6 +1998,7 @@  The conversion is made depending of STRING-BEFORE and STRING-AFTER."
                         (orgtbl-to-latex
                          lines
                          `(:tstart nil :tend nil
+				   ,@(and hfmt `(:hfmt ,hfmt))
                                    :hlend ,(if longtblp
                                                (format "\\\\
 \\hline
-- 
1.7.7.1