emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
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 17:57:59 -0700	[thread overview]
Message-ID: <874oadxlk8.fsf@gmail.com> (raw)
In-Reply-To: <C8AFAEED-0750-409D-8C85-292DE6619B7F@tsdye.com> (Thomas S. Dye's message of "Thu, 16 Dec 2010 05:42:48 -1000")

[-- Attachment #1: Type: text/plain, Size: 1171 bytes --]

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


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: tables.patch --]
[-- Type: text/x-diff, Size: 3784 bytes --]

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 ()

[-- Attachment #3: Type: text/plain, Size: 11482 bytes --]


"Thomas S. Dye" <tsd@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.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

  reply	other threads:[~2010-12-17  0:58 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
2010-12-16 15:42       ` Thomas S. Dye
2010-12-17  0:57         ` Eric Schulte [this message]
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=874oadxlk8.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).