From: "Eric Schulte" <schulte.eric@gmail.com>
To: "Thomas S. Dye" <tsd@tsdye.com>
Cc: Org Mode <emacs-orgmode@gnu.org>
Subject: Re: allow table* specification with #+ATTR_LaTeX:
Date: Thu, 16 Dec 2010 07:43:36 -0700 [thread overview]
Message-ID: <87oc8ln5gn.fsf@gmail.com> (raw)
In-Reply-To: <87aak5q29i.fsf@gmail.com> (Eric Schulte's message of "Thu, 16 Dec 2010 06:16:25 -0700")
[-- Attachment #1: Type: text/plain, Size: 1138 bytes --]
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
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: tables.patch --]
[-- Type: text/x-diff, Size: 2571 bytes --]
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 ()
[-- Attachment #3: Type: text/plain, Size: 6645 bytes --]
"Eric Schulte" <schulte.eric@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 <tsd@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
[-- Attachment #4: Type: text/plain, Size: 201 bytes --]
_______________________________________________
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
next prev parent reply other threads:[~2010-12-16 14:43 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-15 21:33 allow table* specification with #+ATTR_LaTeX: Eric Schulte
2010-12-16 4:27 ` Thomas S. Dye
2010-12-16 13:16 ` Eric Schulte
2010-12-16 14:43 ` Eric Schulte [this message]
2010-12-16 15:42 ` Thomas S. Dye
2010-12-17 0:57 ` Eric Schulte
2010-12-17 16:21 ` Thomas S. Dye
2010-12-17 20:39 ` Eric Schulte
2010-12-17 20:44 ` Carsten Dominik
2010-12-17 21:01 ` Eric Schulte
2010-12-17 21:04 ` Carsten Dominik
2010-12-18 20:18 ` Thomas S. Dye
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87oc8ln5gn.fsf@gmail.com \
--to=schulte.eric@gmail.com \
--cc=emacs-orgmode@gnu.org \
--cc=tsd@tsdye.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).