Ah! you caught me :) I've just pushed up documentation. -- Eric
Carsten Dominik <carsten.domi...@gmail.com> writes: > This is great, I like it. Maybe a change to the manual > would be appropriate? > > Best wishes > > - Carsten > > On Dec 17, 2010, at 9:39 PM, Eric Schulte wrote: > >> Hi Tom, >> >> Thanks for all you help on this front. I've just pushed up the patch >> with your suggested syntax (which is much better than my original). >> It >> allows the following behavior. >> >> The following org >> #+begin_src org >> #+CAPTION: A wide table with tabulary >> #+LABEL: tbl:wide >> #+ATTR_LaTeX: table* tabulary width=\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 width=\textwidth align=l|lp{3cm}r|l >> | 1 | 2 | 3 | >> | 4 | 5 | 6 | >> >> and now a simple table >> >> | 1 | 2 | 3 | >> | 4 | 5 | 6 | >> #+end_src >> >> exports to the following tex >> #+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} >> >> >> and now a simple table >> >> >> \begin{center} >> \begin{tabular}{rrr} >> 1 & 2 & 3 \\ >> 4 & 5 & 6 \\ >> \end{tabular} >> \end{center} >> #+end_src >> >> >> Thanks -- Eric >> >> "Thomas S. Dye" <t...@tsdye.com> writes: >> >>> Hi Eric, >>> >>> A syntax like this, with a width attribute, seems most like Org-mode >>> to me: >>> >>> #+ATTR_LaTeX table* tabularx width=\textwidth align=llXrl >>> >>> If that isn't a reasonable possibility, then, yes, the square >>> brackets >>> should be changed. These represent optional arguments in LaTeX. The >>> width argument is required by tabularx and tabulary, not optional, so >>> it looks like an error from a LaTeX point of view. Changing the >>> square brackets to curly brackets in this case would have the >>> advantage of looking a lot like the underlying LaTeX. >>> >>> All the best, >>> Tom >>> >>> On Dec 16, 2010, at 2:57 PM, Eric Schulte wrote: >>> >>>> 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 >> >> _______________________________________________ >> 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 _______________________________________________ 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