emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orgmode] allow table* specification with #+ATTR_LaTeX:


From: Eric Schulte
Subject: Re: [Orgmode] allow table* specification with #+ATTR_LaTeX:
Date: Thu, 16 Dec 2010 07:43:36 -0700
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux)

The attached patch implements the behavior described previously, so for
example the following org

#+begin_src org
  #+CAPTION: A wide table with tabulary
  #+LABEL: tbl:wide
  #+ATTR_LaTeX: table* tabulary align=l|lp{3cm}r|l
  | 1 | 2 | 3 |
  | 4 | 5 | 6 |

  #+CAPTION: A normal table with tabularx
  #+LABEL: tbl:wide
  #+ATTR_LaTeX: table tabularx align=l|lp{3cm}r|l
  | 1 | 2 | 3 |
  | 4 | 5 | 6 |
#+end_src

exports to the following latex

#+begin_src latex
  \begin{table*}[htb]
  \caption{A wide table with tabulary} \label{tbl:wide}
  \begin{center}
  \begin{tabulary}{l|lp{3cm}r|l}
   1  &  2  &  3  \\
   4  &  5  &  6  \\
  \end{tabulary}
  \end{center}
  \end{table*}


  \begin{table}[htb]
  \caption{A normal table with tabularx} \label{tbl:wide}
  \begin{center}
  \begin{tabularx}{l|lp{3cm}r|l}
   1  &  2  &  3  \\
   4  &  5  &  6  \\
  \end{tabularx}
  \end{center}
  \end{table}
#+end_src

Does this behavior and patch look reasonable?  If I don't hear by the
end of the day I will apply this patch, I just wanted to check first on
list as the export mechanisms aren't my personal area of expertise.

Thanks -- Eric

diff --git a/lisp/org-latex.el b/lisp/org-latex.el
index a261171..66541de 100644
--- a/lisp/org-latex.el
+++ b/lisp/org-latex.el
@@ -1741,7 +1741,7 @@ The conversion is made depending of STRING-BEFORE and 
STRING-AFTER."
              (org-table-last-column-widths (copy-sequence
                                             org-table-last-column-widths))
              fnum fields line lines olines gr colgropen line-fmt align
-             caption shortn label attr floatp placement longtblp)
+             caption shortn label attr floatp placement longtblp tblenv 
tblrenv)
         (if org-export-latex-tables-verbatim
             (let* ((tbl (concat "\\begin{verbatim}\n" raw-table
                                 "\\end{verbatim}\n")))
@@ -1758,6 +1758,15 @@ The conversion is made depending of STRING-BEFORE and 
STRING-AFTER."
                          'org-label raw-table)
                   longtblp (and attr (stringp attr)
                                 (string-match "\\<longtable\\>" attr))
+                 tblenv (if (and attr (stringp attr)
+                                 (string-match (regexp-quote "table*") attr))
+                            "table*" "table")
+                 org-export-latex-tabular-environment
+                 (if (and attr (stringp attr)
+                          (string-match (regexp-quote "tabularx") attr))
+                     "tabularx"
+                   (if (string-match (regexp-quote "tabulary") attr)
+                       "tabulary" org-export-latex-tabular-environment))
                   align (and attr (stringp attr)
                              (string-match "\\<align=\\([^ \t\n\r]+\\)" attr)
                              (match-string 1 attr))
@@ -1821,7 +1830,8 @@ The conversion is made depending of STRING-BEFORE and 
STRING-AFTER."
                        (concat
                         (if longtblp
                             (concat "\\begin{longtable}{" align "}\n")
-                          (if floatp (format "\\begin{table}%s\n" placement)))
+                          (if floatp
+                             (format "\\begin{%s}%s\n" tblenv placement)))
                         (if floatp
                             (format
                              "\\caption%s{%s} %s"
@@ -1852,7 +1862,7 @@ The conversion is made depending of STRING-BEFORE and 
STRING-AFTER."
                                               "\n\\end{center}\n" "\n"))
                         (if longtblp
                             "\\end{longtable}"
-                          (if floatp "\\end{table}"))))
+                          (if floatp (format "\\end{%s}" tblenv)))))
                       "\n\n"))))))))
 
 (defun org-export-latex-convert-table.el-table ()
"Eric Schulte" <address@hidden> writes:

> Hi Tom,
>
> Thanks for the informative list.  I had no idea LaTeX supported so many
> table options.  How about I update the patch so that is supports the
> following sets of mutually exclusive options...
> - longtable :: wraps the table in a longtable with no table or tabular
>                wrappers -- already implemented
> - table* :: replaces =table= wrapper with =table*= wrapper, contains an
>             inner tabular wrapper
> - tabular[xy] :: specifies the inner tabular wrapping environment, only
>                  one can be specified
>
> so for example, the following
>
> #+begin_src org
>   #+CAPTION: A wide table
>   #+LABEL: tbl:wide
>   #+ATTR_LaTeX: table* tabulary align=l|lp{3cm}r|l
>   | ... | ... |
>   | ... | ... |
> #+end_src
>
> results in the following
>
> #+begin_src latex
>   \begin{table*}[htb]
>   \caption{A wide table} \label{tbl:wide}
>   \begin{center}
>   \begin{tabulary}{l|lp{3cm}r|l}
>    1  &  2  &  3  \\
>    4  &  5  &  6  \\
>   \end{tabulary}
>   \end{center}
>   \end{table*}
> #+end_src
>
> Then the next question would be how to insert a =figure*= instead of a
> simple =figure= environment.
>
> Thanks -- Eric
>
> Thomas S. Dye <address@hidden> writes:
>
>> Hi Eric,
>>
>> It would be great to have a more general solution.  Tables are hard to
>> typeset, so it might take a while to come up with a good
>> specification.  Here is what I know about the LaTeX side of things.
>>
>> ** LaTeX destinations for an Org-mode table
>> *** Environments for typesetting a table
>>     - table placed in the output where it occurs in the input
>>     - all of these environments can be used on their own
>> **** tabular
>>      standard LaTeX environment, doesn't break across pages, no caption
>> **** tabularx
>>      extended environment that can automatically calculate column
>>      widths and wrap text within table cells, doesn't break across
>>      pages, no caption
>> **** tabulary
>>      like tabularx, but tries harder to come up with optimal column
>> widths
>> **** supertabular
>>      extended tabular environment that breaks across pages, includes
>>      caption
>> **** supertabular*
>>      like supertabular, but for wide tables in a multicolumn page
>>      layout
>> **** mpsupertabular
>>      like supertabular, but also handles footnotes within the table
>> **** mpsupertabular*
>>      like mpsupertabular, but for multicolumn page layouts
>> **** longtable
>>      extended tabular environment that breaks across pages and
>>      includes a caption, but can't be used in a multicolumn page
>>      layout
>> *** Environment for floating a table and adding a caption
>>     floats a table typeset by some other environment to a place in the
>>     output that LaTeX determines appropriate, probably not where it
>>     occurs in the input
>> **** =table=, single column document
>>      typically wraps a =tabular=, =tabularx=, or =tabulary= environment
>> **** =table*=, multi-column document
>>      typically wraps a =tabular=, =tabularx=, or =tabulary= environment
>> *** "Typical" uses
>>     In our report production work we regularly use seven setups:
>>     - table or table* wrapped around tabularx or tabular
>>     - longtable
>>     - tabular or tabularx on their own
>>
>> hth,
>> Tom
>> On Dec 15, 2010, at 11:33 AM, Eric Schulte wrote:
>>
>>> Hi,
>>>
>>> The attached patch allows the use of table* latex tables from within
>>> Org
>>> mode documents using the attr_latex lines, for example
>>>
>>> #+CAPTION: A wide table
>>> #+LABEL: tbl:wide
>>> #+ATTR_LaTeX: table* align=l|lp{3cm}r|l
>>> | ... | ... |
>>> | ... | ... |
>>>
>>> Should this be added, or should we put together a more general
>>> solution
>>> for different types of table environments?  Currently only longtable
>>> is
>>> supported.  Also, is there already a way to do this that I have
>>> missed?
>>>
>>> Thanks -- Eric
>>>
>>> diff --git a/lisp/org-latex.el b/lisp/org-latex.el
>>> index a261171..b7f48d3 100644
>>> --- a/lisp/org-latex.el
>>> +++ b/lisp/org-latex.el
>>> @@ -1741,7 +1741,7 @@ The conversion is made depending of STRING-
>>> BEFORE and STRING-AFTER."
>>>              (org-table-last-column-widths (copy-sequence
>>>                                             org-table-last-column-
>>> widths))
>>>              fnum fields line lines olines gr colgropen line-fmt align
>>> -             caption shortn label attr floatp placement longtblp)
>>> +             caption shortn label attr floatp placement longtblp
>>> tblenv)
>>>         (if org-export-latex-tables-verbatim
>>>             (let* ((tbl (concat "\\begin{verbatim}\n" raw-table
>>>                                 "\\end{verbatim}\n")))
>>> @@ -1758,6 +1758,9 @@ The conversion is made depending of STRING-
>>> BEFORE and STRING-AFTER."
>>>                          'org-label raw-table)
>>>                   longtblp (and attr (stringp attr)
>>>                                 (string-match "\\<longtable\\>" attr))
>>> +             tblenv (if (and attr (stringp attr)
>>> +                             (string-match (regexp-quote "table*") attr))
>>> +                        "table*" "table")
>>>                   align (and attr (stringp attr)
>>>                              (string-match "\\<align=\\([^ \t\n\r]+\
>>> \)" attr)
>>>                              (match-string 1 attr))
>>> @@ -1821,7 +1824,8 @@ The conversion is made depending of STRING-
>>> BEFORE and STRING-AFTER."
>>>                        (concat
>>>                         (if longtblp
>>>                             (concat "\\begin{longtable}{" align "}\n")
>>> -                          (if floatp (format "\\begin{table}%s\n"
>>> placement)))
>>> +                          (if floatp
>>> +                         (format "\\begin{%s}%s\n" tblenv placement)))
>>>                         (if floatp
>>>                             (format
>>>                              "\\caption%s{%s} %s"
>>> @@ -1852,7 +1856,7 @@ The conversion is made depending of STRING-
>>> BEFORE and STRING-AFTER."
>>>                                               "\n\\end{center}\n"
>>> "\n"))
>>>                         (if longtblp
>>>                             "\\end{longtable}"
>>> -                          (if floatp "\\end{table}"))))
>>> +                          (if floatp (format "\\end{%s}" tblenv)))))
>>>                       "\n\n"))))))))
>>>
>>> (defun org-export-latex-convert-table.el-table ()
>>> _______________________________________________
>>> Emacs-orgmode mailing list
>>> Please use `Reply All' to send replies to the list.
>>> address@hidden
>>> http://lists.gnu.org/mailman/listinfo/emacs-orgmode

reply via email to

[Prev in Thread] Current Thread [Next in Thread]