Hi Tom,
Thanks for the pointer, how about this revised version of the patch.
It
takes the following inputs
#+begin_src org
#+CAPTION: A wide table with tabulary
#+LABEL: tbl:wide
#+ATTR_LaTeX: table* tabulary[\textwidth] 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[\textwidth] align=l|lp{3cm}r|l
| 1 | 2 | 3 |
| 4 | 5 | 6 |
#+end_src
and yields the following output
#+begin_src latex
\begin{table*}[htb]
\caption{A wide table with tabulary} \label{tbl:wide}
\begin{center}
\begin{tabulary}{\textwidth}{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}{\textwidth}{l|lp{3cm}r|l}
1 & 2 & 3 \\
4 & 5 & 6 \\
\end{tabularx}
\end{center}
\end{table}
#+end_src
I'm not sure about the square bracket syntax, maybe curly would be
preferable. Definitely open to suggestions.
Should this be applied? Are there any obvious areas for
improvement?
Thanks -- Eric
diff --git a/lisp/org-latex.el b/lisp/org-latex.el
index a261171..af0a15d 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,16 @@ 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
+ (progn
+ (message "attr:%s" attr)
+ (if (and attr (stringp attr)
+ (string-match "\\(tabular.*\\)\\[\\(.+\\)\\]"
attr))
+ (list (match-string 1 attr) (match-string 2 attr))
+ org-export-latex-tabular-environment))
align (and attr (stringp attr)
(string-match "\\<align=\\([^ \t\n\r]+\
\)" attr)
(match-string 1 attr))
@@ -1821,7 +1831,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"
@@ -1832,8 +1843,15 @@ The conversion is made depending of STRING-
BEFORE and STRING-AFTER."
(if (and org-export-latex-tables-centered
(not longtblp))
"\\begin{center}\n")
(if (not longtblp)
- (format "\\begin{%s}{%s}\n"
- org-export-latex-tabular-environment align))
+ (if (listp org-export-latex-tabular-environment)
+ (apply
+ #'format
+ (append
+ (list "\\begin{%s}{%s}{%s}\n")
+ org-export-latex-tabular-environment
+ (list align)))
+ (format "\\begin{%s}{%s}\n"
+ org-export-latex-tabular-environment
align)))
(orgtbl-to-latex
lines
`(:tstart nil :tend nil
@@ -1847,12 +1865,14 @@ The conversion is made depending of STRING-
BEFORE and STRING-AFTER."
nil)))
(if (not longtblp)
(format "\n\\end{%s}"
- org-export-latex-tabular-environment))
+ (if (listp
org-export-latex-tabular-environment)
+ (car
org-export-latex-tabular-environment)
+ org-export-latex-tabular-environment)))
(if longtblp "\n" (if org-export-latex-
tables-centered
"\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 ()
"Thomas S. Dye" <t...@tsdye.com> writes:
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" <schulte.e...@gmail.com> 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 <t...@tsdye.com> 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.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode