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: Thomas S. Dye
Subject: Re: [Orgmode] allow table* specification with #+ATTR_LaTeX:
Date: Thu, 16 Dec 2010 05:42:48 -1000

Hi Eric,

The syntax for tabularx and tabulary includes a width specification that is a required argument:

\begin{tabulary}{<width>}{<align>} ... \end{tabulary}
\begin{tabularx}{<width>}{<align>} ... \end{tabularx}

This is typically set to something like \linewidth, \colwidth, or \textwidth, but might also take an absolute length like 250pt, 5in, etc.

All the best,
Tom

On Dec 16, 2010, at 4:43 AM, Eric Schulte wrote:

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]