* Export tables as matrices (change tbl-export function on the fly)
@ 2012-11-14 14:49 Rasmus
2012-11-14 16:21 ` Nicolas Goaziou
0 siblings, 1 reply; 11+ messages in thread
From: Rasmus @ 2012-11-14 14:49 UTC (permalink / raw)
To: emacs-orgmode
Hi,
I'm doing some stuff where the natural output of my tables are
matrices. I found a decent translation function here ¹. However,
I'm not very successful in making org use it.
I tried to add
#+begin_src org
* heading
:PROPERTIES:
:TABLE_EXPORT_FORMAT: orgtbl-to-latex-matrix
:END:
#+end src
to the relevant section of my document, but this does not seem to be
the correct usage.
I also tried to radio tables. The problem is that when I do
#+NAME: P
#+ORGTBL: SEND P orgtbl-to-latex-matrix
|1|
I cannot send P to R/Octave. When I swap the ORGTBL and NAME around,
I can't send it to a radio table. I also tried with TBLNAME.
Anyway, the optimal would be to have Org just use a different
translation mechanism on the fly. Is that possible?
Thanks,
Rasmus
Footnotes:
¹ http://www.patokeefe.com/archives/742
#+begin_src emacs-lisp
(defun orgtbl-to-latex-matrix (table params)
"Convert the Orgtbl mode TABLE to a LaTeX Matrix."
(interactive)
(let* ((params2
(list
:tstart (concat "\\[\n\\begin{bmatrix}")
:tend "\\end{bmatrix}\n\\]"
:lstart "" :lend " \\\\" :sep " & "
:efmt "%s\\,(%s)" :hline "\\hline")))
(orgtbl-to-generic table (org-combine-plists params2 params))))
(defcustom orgtbl-latex-matrix-string "% BEGIN RECEIVE ORGTBL %n
% END RECEIVE ORGTBL %n
\\begin{comment}
#+ORGTBL: SEND %n orgtbl-to-latex-matrix :splice nil :skip 0
\\end{comment}\n"
"Template for the latex matrix orgtbl translator
All occurrences of %n in a template will be replaced with the name of the
table, obtained by prompting the user."
:type 'string
:group 'org-table)
#+end_src
--
C is for Cookie
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Export tables as matrices (change tbl-export function on the fly)
2012-11-14 14:49 Export tables as matrices (change tbl-export function on the fly) Rasmus
@ 2012-11-14 16:21 ` Nicolas Goaziou
2012-11-14 18:05 ` Rasmus
2012-11-17 13:26 ` Rasmus Pank Roulund
0 siblings, 2 replies; 11+ messages in thread
From: Nicolas Goaziou @ 2012-11-14 16:21 UTC (permalink / raw)
To: Rasmus; +Cc: emacs-orgmode
Hello,
Rasmus <rasmus@gmx.us> writes:
> I'm doing some stuff where the natural output of my tables are
> matrices. I found a decent translation function here ¹. However,
> I'm not very successful in making org use it.
Using the new exporter, something like should replace any table using
default environment (i.e. no special attribute) and without horizontal
rules with bmatrix environment. It should also insert it in math mode
automatically.
Untested.
#+begin_src emacs-lisp
(defun my-latex-table-to-matrix (table backend info)
(when (and (memq backend '(e-latex e-beamer))
(not (string-match "^\\\\[A-Za-z]+$" table))
(not (string-match "\\begin{\\(table*\\|sidewaystable\\)}" table)))
(let ((default-env (format "\\\\\\(begin\\|end\\){\\(%s\\)}.*"
org-e-latex-default-table-environment)))
(when (string-match default-env table)
(concat "\\[\n"
(org-trim
(replace-regexp-in-string
"\\\\\\(begin\\|end\\){\\(center\\)}" ""
(replace-regexp-in-string
default-env "\\\\\\1{bmatrix}" table)))
"\n\\]")))))
(add-to-list 'org-export-filter-table-functions 'my-latex-table-to-matrix)
#+end_src
Regards,
--
Nicolas Goaziou
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Export tables as matrices (change tbl-export function on the fly)
2012-11-14 16:21 ` Nicolas Goaziou
@ 2012-11-14 18:05 ` Rasmus
2012-11-17 13:26 ` Rasmus Pank Roulund
1 sibling, 0 replies; 11+ messages in thread
From: Rasmus @ 2012-11-14 18:05 UTC (permalink / raw)
To: n.goaziou; +Cc: emacs-orgmode
Nicolas Goaziou <n.goaziou@gmail.com> writes:
> Hello,
>
> Rasmus <rasmus@gmx.us> writes:
>
>> I'm doing some stuff where the natural output of my tables are
>> matrices. I found a decent translation function here ¹. However,
>> I'm not very successful in making org use it.
>
> Using the new exporter, something like should replace any table using
> default environment (i.e. no special attribute) and without horizontal
> rules with bmatrix environment. It should also insert it in math mode
> automatically.
this one seems to work better for me, but might be more ugly . . .
#+begin_src emacs-lisp
(defun my-latex-table-to-matrix (table backend info)
(when (and (memq backend '(e-latex e-beamer))
(not (string-match "\\\\^[A-Za-z]+$" table))
(not (string-match "\\begin{\\(table*\\|sidewaystable\\)}" table)))
(let ((default-env (format "\\\\\\(begin\\|end\\){\\(%s\\)}.*"
org-e-latex-default-table-environment)))
(when (string-match default-env table)
(concat "\\[\n"
(org-trim
(replace-regexp-in-string "\n\n" "\n"
(replace-regexp-in-string
"\\\\\\(begin\\|end\\){\\(center\\|table\\)}\\|\\\\toprule\\|\\\\bottomrule\\|\[[htbH]+?\]" ""
(replace-regexp-in-string
default-env "\\\\\\1{bmatrix}" table))))
"\n\\]\n")))))
(add-to-list 'org-export-filter-table-functions 'my-latex-table-to-matrix)
#+end_src
--
Dung makes an excellent fertilizer
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Export tables as matrices (change tbl-export function on the fly)
2012-11-14 16:21 ` Nicolas Goaziou
2012-11-14 18:05 ` Rasmus
@ 2012-11-17 13:26 ` Rasmus Pank Roulund
2012-11-17 15:32 ` Nicolas Goaziou
1 sibling, 1 reply; 11+ messages in thread
From: Rasmus Pank Roulund @ 2012-11-17 13:26 UTC (permalink / raw)
To: n.goaziou; +Cc: emacs-orgmode
Nicolas Goaziou <n.goaziou@gmail.com> writes:
>> I'm doing some stuff where the natural output of my tables are
>> matrices. I found a decent translation function here ¹. However,
>> I'm not very successful in making org use it.
>
> Using the new exporter, something like should replace any table using
> default environment (i.e. no special attribute) and without horizontal
> rules with bmatrix environment. It should also insert it in math mode
> automatically.
I didn't manage to get your (Nicolas') or my own attempt working
correctly for exporting matrices. I still think it would be nice.
I tried to use the regexp
(not (string-match "|[\\+-]+|" table))
to identify tables without heading separators, but it didn't work
properly.
Thinking about it, it might be nice to be able to specify table export
function more generally. For instance, I might have a matrix with
labels (in LaTeX a bordermatrix or kbordermatrix). Likewise, it might
also be nice to specify a header argument to tables s.t. I can specify
a name, e.g.
#+NAME: P
#+TBLOPTIONS: :prefix "P=" :type matrix
| a| b|
| c| d|
would export to
\[P=\begin{bmatrix}a&b\\c&d\end{bmatrix}\]
–Rasmus
--
May the Force be with you
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Export tables as matrices (change tbl-export function on the fly)
2012-11-17 13:26 ` Rasmus Pank Roulund
@ 2012-11-17 15:32 ` Nicolas Goaziou
2012-11-17 18:29 ` Rasmus
0 siblings, 1 reply; 11+ messages in thread
From: Nicolas Goaziou @ 2012-11-17 15:32 UTC (permalink / raw)
To: Rasmus Pank Roulund; +Cc: emacs-orgmode
Rasmus Pank Roulund <rasmus@gmx.us> writes:
> I didn't manage to get your (Nicolas') or my own attempt working
> correctly for exporting matrices. I still think it would be nice.
It's hard to fix this since you're not very explicit here.
> I tried to use the regexp
> (not (string-match "|[\\+-]+|" table))
> to identify tables without heading separators, but it didn't work
> properly.
It cannot work in filters. These are applied on back-end ouput, in this
case LaTeX code, not on Org code.
> Thinking about it, it might be nice to be able to specify table export
> function more generally. For instance, I might have a matrix with
> labels (in LaTeX a bordermatrix or kbordermatrix). Likewise, it might
> also be nice to specify a header argument to tables s.t. I can specify
> a name, e.g.
>
> #+NAME: P
> #+TBLOPTIONS: :prefix "P=" :type matrix
> | a| b|
> | c| d|
>
> would export to
> \[P=\begin{bmatrix}a&b\\c&d\end{bmatrix}\]
There is no TBLOPTIONS affiliated keyword, but it could go in ATTR_LATEX
since this probably only makes sense in a LaTeX-type output. If you
provide a full description of options and their effect, I might try to
implement it.
Regards,
--
Nicolas Goaziou
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Export tables as matrices (change tbl-export function on the fly)
2012-11-17 15:32 ` Nicolas Goaziou
@ 2012-11-17 18:29 ` Rasmus
2012-11-18 8:53 ` Nicolas Goaziou
0 siblings, 1 reply; 11+ messages in thread
From: Rasmus @ 2012-11-17 18:29 UTC (permalink / raw)
To: n.goaziou; +Cc: emacs-orgmode
Nicolas Goaziou <n.goaziou@gmail.com> writes:
>> I didn't manage to get your (Nicolas') or my own attempt working
>> correctly for exporting matrices. I still think it would be nice.
> It's hard to fix this since you're not very explicit here.
Sorry; you posted a code first which didn't work at all for me; I
tried to fix it, and I posted a code which I though worked but in the
end it didn't. Thus, I though it would be fair to post another
message stating this, if nothing else than for future viewers.
>> I tried to use the regexp
>> (not (string-match "|[\\+-]+|" table))
>> to identify tables without heading separators, but it didn't work
>> properly.
>
> It cannot work in filters. These are applied on back-end ouput, in
> this case LaTeX code, not on Org code.
Aha, that explains a lot. At some point when I don't have so many
assignments I really need to get to know the details of your work.
It's has so many cool features.
> There is no TBLOPTIONS affiliated keyword, but it could go in
> ATTR_LATEX
That a lot more clever. I just made up TBLOPTIONS since I couldn't
think of anywhere better. But you are of right. Such an option would
fit perfectly into ATTR_LATEX.
> If you provide a full description of options and their effect, I
> might try to implement it.
Okay I'll try. I don't know whether something like the below is what
you are thinking of. I use matrices all of the time so it would be
nice for me.
- PROPOSAL: New option(s)for ATTR_LATEX
- :type :: options a lisp translation function or key words
associated with a lisp list translation function.
- Default keyword: table; other known keywords: matrix
- table: current exporter
- matrix: exports to LaTeX matrix determined by the variable
org-export-latex-tables-matrix-default-type or :matrix-type.
Default is: bmatrix or pmatrix (probably bmatrix).
- in general array requires more configuration, but for me
array need not be supported.
- Matrix relevant keywords :: are the following
- If the additional variable ALIGN is set to k ∈ {l,r,c} use
the starred version of
org-export-latex-tables-matrix-default-type or :matrix-type
- If the additional keyword :bordered is t use the typeset
the matrix as \borderedmatrix{&col1&
... &colN\\row1&...\\...\\rowN}. A better example is
here ¹. Also, the default bordermatrix macro is determined
via org-export-latex-tables-matrix-bordered-type s.t. one
can specify kbordermatrix ² or qbordermatrix ³. Perhaps
Org automatically add the respective usepackage if this
option is set to something different from bordermatrix
(i.e. org-export-latex-tables-matrix-bordered-type is a
list of lists where the first element of a list is the
macro name and the second is the needed package).
- If :matrix-pre "string" is set "string" is typeset before
the matrix
- If :matrix-post "string" is set then "string" is typeset
after the matrix.
- Alternatively, CAPTION could be used, but it seems weird.
Are they written before or after the matrix? I'd prefer
CAPTIONs to be ignored typeset when matrices are typeset.
- If the table has a name the matrix is typeset using
equation and given an label. If not it may be typeset
using equation* or \[·\].
- Potentially: an :inline exists s.t. if inline is t the
matrix is typeset inline [i.e. with \(\)]. Perhaps, it
should be smart and use the small verison of
org-export-latex-tables-matrix-default-type. I.e. if
bmatrix use bsmallmatrix. This could be set via
org-export-latex-tables-matrix-inline-small.
Thanks,
Rasmus
Footnotes:
¹ http://www.math.harvard.edu/texman/node25.html
² https://www.hss.caltech.edu/~kcb/LaTeX.shtml
³ https://code.google.com/p/qbordermatrix/
--
When the facts change, I change my mind. What do you do, sir?
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Export tables as matrices (change tbl-export function on the fly)
2012-11-17 18:29 ` Rasmus
@ 2012-11-18 8:53 ` Nicolas Goaziou
2012-11-18 11:50 ` Rasmus
0 siblings, 1 reply; 11+ messages in thread
From: Nicolas Goaziou @ 2012-11-18 8:53 UTC (permalink / raw)
To: Rasmus; +Cc: emacs-orgmode
Rasmus <rasmus@gmx.us> writes:
> Sorry; you posted a code first which didn't work at all for me; I
> tried to fix it, and I posted a code which I though worked but in the
> end it didn't. Thus, I though it would be fair to post another
> message stating this, if nothing else than for future viewers.
I meant: what is the exact problem with my code (with examples and
expected output if possible)? It shouldn't be hard to fix.
> - PROPOSAL: New option(s)for ATTR_LATEX
> - :type :: options a lisp translation function or key words
> associated with a lisp list translation function.
Forget the lisp translation function. At this level, the function
operates on parsed data. It doesn't use any orgtbl-to-* function. Also,
even if the ATTR_LATEX keyword applies on the table, it also affects how
`table-row' elements and `table-cell' objects are transcoded.
The usual way to define a new transcoder in the new export API is to
create a derived backed using an alternative translation table. It is
easier than it sounds.
> - Default keyword: table; other known keywords: matrix
> - table: current exporter
> - matrix: exports to LaTeX matrix determined by the variable
> org-export-latex-tables-matrix-default-type or :matrix-type.
> Default is: bmatrix or pmatrix (probably bmatrix).
> - in general array requires more configuration, but for me
> array need not be supported.
I suggest to use a :math-mode t. With this mode, all cells are treated
as raw math code (no transformation is made on any cell). A global
variable can also set it `org-export-latex-table-math-mode' (default to
nil).
Then, the :environment keyword can be set to "tabular", "longtable",
"tabularx", "tabulary", "bmatrix", "pmatrix", "vmatrix", "kbordermatrix"
or "qbordermatrix". "bordermatrix", "array"... It would default to
`org-e-latex-default-table-environment' (default to "tabular").
> - Matrix relevant keywords :: are the following
> - If the additional variable ALIGN is set to k ∈ {l,r,c} use
> the starred version of
> org-export-latex-tables-matrix-default-type or :matrix-type
What is the variable ALIGN? You mean :align keyword? Do matrix
environments accept alignment? Also I haven't heard about starred
version of these. What do they do?
> - If the additional keyword :bordered is t use the typeset
> the matrix as \borderedmatrix{&col1&
> ... &colN\\row1&...\\...\\rowN}. A better example is
> here ¹. Also, the default bordermatrix macro is determined
> via org-export-latex-tables-matrix-bordered-type s.t. one
> can specify kbordermatrix ² or qbordermatrix ³.
From the syntax perspective, I see no difference between bordered
matrices and the others: they just use a different environment, which
can be provided through :environment keyword. Am I missing something?
> Perhaps Org automatically add the respective usepackage if this
> option is set to something different from bordermatrix (i.e.
> org-export-latex-tables-matrix-bordered-type is a list of lists
> where the first element of a list is the macro name and the
> second is the needed package).
The backend never adds any usepackage automatically. It is a can of
worms (incompatibilities, order of packages...). It's the responsibility
of the user to do so.
> - If :matrix-pre "string" is set "string" is typeset before
> the matrix
> - If :matrix-post "string" is set then "string" is typeset
> after the matrix.
> - Alternatively, CAPTION could be used, but it seems weird.
> Are they written before or after the matrix? I'd prefer
> CAPTIONs to be ignored typeset when matrices are typeset.
> - If the table has a name the matrix is typeset using
> equation and given an label. If not it may be typeset
> using equation* or \[·\].
Good idea.
> - Potentially: an :inline exists s.t. if inline is t the
> matrix is typeset inline [i.e. with \(\)]. Perhaps, it
> should be smart and use the small verison of
> org-export-latex-tables-matrix-default-type. I.e. if
> bmatrix use bsmallmatrix. This could be set via
> org-export-latex-tables-matrix-inline-small.
Do all matrix environments accept a small counterpart?
Regards,
--
Nicolas Goaziou
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Export tables as matrices (change tbl-export function on the fly)
2012-11-18 8:53 ` Nicolas Goaziou
@ 2012-11-18 11:50 ` Rasmus
2012-11-18 13:20 ` Nicolas Goaziou
0 siblings, 1 reply; 11+ messages in thread
From: Rasmus @ 2012-11-18 11:50 UTC (permalink / raw)
To: n.goaziou; +Cc: emacs-orgmode
Nicolas,
Thanks for your reply.
> I meant: what is the exact problem with my code (with examples and
> expected output if possible)? It shouldn't be hard to fix.
They are not caught by the regexp. And I wasn't able to find a regexp
which could correctly identify all cases. I have a sample in the footnote ¹
> Forget the lisp translation function. At this level, the function
> operates on parsed data. It doesn't use any orgtbl-to-* function. Also,
> even if the ATTR_LATEX keyword applies on the table, it also affects how
> `table-row' elements and `table-cell' objects are transcoded.
OK, thanks for pointing out.
> I suggest to use a :math-mode t. With this mode, all cells are
> treated as raw math code (no transformation is made on any cell).
Sounds good to me. However, should $'s be stripped? Say I have an
org-table which I'm indecisive about. In one sell I might have a
\frac{·}{·} in a cell; so in a normal table export I'd have to insert
$'s, but in :math-mode I wouldn't. It could thus be expensive to go
from :math mode to nil math mode. Hence, stripping $ might be
appropriate
> A global variable can also set it `org-export-latex-table-math-mode'
> (default to nil).
Nil by default for sure.
> Then, the :environment keyword can be set to "tabular", "longtable",
> "tabularx", "tabulary", "bmatrix", "pmatrix", "vmatrix", "kbordermatrix"
> or "qbordermatrix". "bordermatrix", "array"... It would default to
> `org-e-latex-default-table-environment' (default to "tabular").
and Bmatrix ({matrix}) and Vmatrix ( ||matrix||) and matrix (no
decoration).
Array needs per column configuration.
> What is the variable ALIGN? You mean :align keyword? Do matrix
> environments accept alignment? Also I haven't heard about starred
> version of these. What do they do?
They allow you to align a matrix to [rlc] (and maybe others?) They
are defined in mathtools.
Here's an example (unrelated to tables):
#+BEGIN_SRC latex
\documentclass{article}
\usepackage{amsmath,mathtools}
\begin{document}
$\max_{x}f(x)\quad\text{s.t. }\left\{\begin{matrix*}[r]g(x)\geq0\\h(x)+h(y)\geq
k\end{matrix*}\right.$
\end{document}
#+END_SRC
> From the syntax perspective, I see no difference between bordered
> matrices and the others: they just use a different environment, which
> can be provided through :environment keyword. Am I missing something?
No. But they are typically macros. Note the use of cr which
sometimes needs to be used in the bordermatrix (from TeX). It's not
the case in kbordermatrix (which I use) and presumably qbordermatrix.
#+BEGIN_SRC latex
\documentclass{article}
\begin{document}
$\bordermatrix{&a&b&c\cr a&1&0&0\cr b&0&1&0\cr c&0&0&1}$
\end{document}
#+END_SRC
> The backend never adds any usepackage automatically. It is a can of
> worms (incompatibilities, order of packages...). It's the responsibility
> of the user to do so.
I agree.
>> - Potentially: an :inline exists s.t. if inline is t the
>> matrix is typeset inline [i.e. with \(\)]. Perhaps, it
>> should be smart and use the small verison of
>> org-export-latex-tables-matrix-default-type. I.e. if
>> bmatrix use bsmallmatrix. This could be set via
>> org-export-latex-tables-matrix-inline-small.
>
> Do all matrix environments accept a small counterpart?
amsmath provides:
smallmatrix from which all variants be generated using
appropriated \left "bracket" \right "bracket"
mathtools provides:
smallmatrix*
psmallmatrix
psmallmatrix*
bsmallmatrix
bsmallmatrix*
Bsmallmatrix
Bsmallmatrix*
vsmallmatrix
vsmallmatrix*
Vsmallmatrix
Vsmallmatrix*
smallmatrix*
so I think it covers all variants except "small bordermatrix" and
"small arrary".
Thanks,
Rasmus
Footnotes:
¹ Adding the function function in the second post, the following
examples all translates to tables
#+BEGIN_SRC org
#+NAME: t1
| my table | with rows |
|----------+-----------|
| a | 2 |
| 5 | 3 |
matrix
| 1 | 2 |
| 3 | 4 |
#+NAME:t2
| 1 | 2 |
| 3 | 4 |
#+END_SRC
and output (note in dirty Emacs [not -q])
#+BEGIN_SRC LaTeX
\begin{table}[htb]
\label{t1}
\begin{center}
\begin{tabular}{lr}
\toprule
my table & with rows\\
\midrule
a & 2\\
5 & 3\\
\bottomrule
\end{tabular}
\end{center}
\end{table}
matrix
\begin{center}
\begin{tabular}{rr}
\toprule
1 & 2\\
3 & 4\\
\bottomrule
\end{tabular}
\end{center}
\begin{table}[htb]
\label{t2}
\begin{center}
\begin{tabular}{rr}
\toprule
1 & 2\\
3 & 4\\
\bottomrule
\end{tabular}
\end{center}
\end{table}
#+END_SRC
--
A page of history is worth a volume of logic
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Export tables as matrices (change tbl-export function on the fly)
2012-11-18 11:50 ` Rasmus
@ 2012-11-18 13:20 ` Nicolas Goaziou
2012-11-18 14:05 ` Rasmus
0 siblings, 1 reply; 11+ messages in thread
From: Nicolas Goaziou @ 2012-11-18 13:20 UTC (permalink / raw)
To: Rasmus; +Cc: emacs-orgmode
Rasmus <rasmus@gmx.us> writes:
>> I meant: what is the exact problem with my code (with examples and
>> expected output if possible)? It shouldn't be hard to fix.
>
> They are not caught by the regexp. And I wasn't able to find a regexp
> which could correctly identify all cases. I have a sample in the
> footnote ¹
That's because you use "booktabs" by default. It creates horizontal
rules, and the filter hence doesn't apply.
> Sounds good to me. However, should $'s be stripped? Say I have an
> org-table which I'm indecisive about. In one sell I might have a
> \frac{·}{·} in a cell; so in a normal table export I'd have to insert
> $'s, but in :math-mode I wouldn't. It could thus be expensive to go
> from :math mode to nil math mode. Hence, stripping $ might be
> appropriate
Since e-latex back-end doesn't strip anything in regular LaTeX snippets
or environments, it should be the same here. Switching to math mode
won't happen automatically, so the user can act appropriately.
>> Then, the :environment keyword can be set to "tabular", "longtable",
>> "tabularx", "tabulary", "bmatrix", "pmatrix", "vmatrix", "kbordermatrix"
>> or "qbordermatrix". "bordermatrix", "array"... It would default to
>> `org-e-latex-default-table-environment' (default to "tabular").
>
> and Bmatrix ({matrix}) and Vmatrix ( ||matrix||) and matrix (no
> decoration).
:environment value is a string. It can be set to anything.
> Array needs per column configuration.
That's not a problem, Org handles alignment per column already:
| <c> | <c> |
| a | b |
| c | d |
Also, every math environment but "array" ignores column separators.
>> What is the variable ALIGN? You mean :align keyword? Do matrix
>> environments accept alignment? Also I haven't heard about starred
>> version of these. What do they do?
>
> They allow you to align a matrix to [rlc] (and maybe others?) They
> are defined in mathtools.
>
> Here's an example (unrelated to tables):
>
> #+BEGIN_SRC latex
> \documentclass{article}
> \usepackage{amsmath,mathtools}
> \begin{document}
> $\max_{x}f(x)\quad\text{s.t. }\left\{\begin{matrix*}[r]g(x)\geq0\\h(x)+h(y)\geq
> k\end{matrix*}\right.$
> \end{document}
> #+END_SRC
Then the backend can add the alignment as an optional argument in math
mode only when the name of the environment ends with a star and the
alignment string is one character long.
>> From the syntax perspective, I see no difference between bordered
>> matrices and the others: they just use a different environment, which
>> can be provided through :environment keyword. Am I missing something?
>
> No. But they are typically macros. Note the use of cr which
> sometimes needs to be used in the bordermatrix (from TeX). It's not
> the case in kbordermatrix (which I use) and presumably qbordermatrix.
>
> #+BEGIN_SRC latex
> \documentclass{article}
> \begin{document}
> $\bordermatrix{&a&b&c\cr a&1&0&0\cr b&0&1&0\cr c&0&0&1}$
> \end{document}
> #+END_SRC
To circumvent the problem, org-e-latex.el can use a defconst to store
table/matrix environments requiring "\cr" instead of "\\" at the end of
each row. It will, as a starter, only contain "bordermatrix".
Any name to suggest for it?
>>> - Potentially: an :inline exists s.t. if inline is t the
>>> matrix is typeset inline [i.e. with \(\)]. Perhaps, it
>>> should be smart and use the small verison of
>>> org-export-latex-tables-matrix-default-type. I.e. if
>>> bmatrix use bsmallmatrix. This could be set via
>>> org-export-latex-tables-matrix-inline-small.
>>
>> Do all matrix environments accept a small counterpart?
>
> amsmath provides:
> smallmatrix from which all variants be generated using
> appropriated \left "bracket" \right "bracket"
> mathtools provides:
> smallmatrix*
> psmallmatrix
> psmallmatrix*
> bsmallmatrix
> bsmallmatrix*
> Bsmallmatrix
> Bsmallmatrix*
> vsmallmatrix
> vsmallmatrix*
> Vsmallmatrix
> Vsmallmatrix*
> smallmatrix*
>
> so I think it covers all variants except "small bordermatrix" and
> "small arrary".
Ok. Then the sanest approach is to allow :math-mode to be set to nil,
t or `inline'. When `inline', as you suggest, it replaces \[...\] with
\(...\) and ignores any label. But it still uses whatever environment is
provided in :environment, that is, it won't make any guess about which
one to use.
Also, instead of using a single `org-e-latex-default-table-environment',
its value can be a plist like the following:
(:table-mode "tabular" :math-mode "bmatrix" :inline-math-mode "smallmatrix")
What do you think about it?
Regards,
--
Nicolas Goaziou
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Export tables as matrices (change tbl-export function on the fly)
2012-11-18 13:20 ` Nicolas Goaziou
@ 2012-11-18 14:05 ` Rasmus
2012-11-18 19:12 ` Nicolas Goaziou
0 siblings, 1 reply; 11+ messages in thread
From: Rasmus @ 2012-11-18 14:05 UTC (permalink / raw)
To: n.goaziou; +Cc: emacs-orgmode
Nicolas,
> That's because you use "booktabs" by default. It creates horizontal
> rules, and the filter hence doesn't apply.
Aha. Is this (again) a misunderstanding because I though of org
source? I tried to identify org tables with rules.
> Since e-latex back-end doesn't strip anything in regular LaTeX
> snippets or environments, it should be the same here. Switching to
> math mode won't happen automatically, so the user can act
> appropriately.
I guess it's fine for most applications.
> :environment value is a string. It can be set to anything.
Probably the best approach.
> That's not a problem, Org handles alignment per column already:
>
> | <c> | <c> |
> | a | b |
> | c | d |
I had no idea. That's very cool.
> Then the backend can add the alignment as an optional argument in math
> mode only when the name of the environment ends with a star and the
> alignment string is one character long.
In the LATEX_ATTR or as in the example above? The former I assume.
> To circumvent the problem, org-e-latex.el can use a defconst to store
> table/matrix environments requiring "\cr" instead of "\\" at the end of
> each row. It will, as a starter, only contain "bordermatrix".
OK. How about just making a list of strings (with typical member
STRING) which are known to have the format
\STRING{matrix-like-output}? Then one can add whichever crazy
environment that might be needed to this list. And users can easily
add their favorite flavor of e.g. bordermatrix.
A short experiment seems to suggest that \cr works in place of \\.
> Any name to suggest for it?
I prefer the approach where the exists a list of macro-matrices, maybe
with delimiter and/or line separator. Then the the value of
:environment can be checked against this list.
E.g. org-e-latex-matrix-macro-environments. By default:
'(("bordermatrix" "\cr"))
And I'd personally extend it to
'(("bordermatrix" "\cr") ("kbordermatrix" "\\"))
NOTE: probably it's not nice to store line seperator and such here,
and indeed
'("bordermatrix" "kbordermatix")
seems like a nicer (as in simpler) list.
> Ok. Then the sanest approach is to allow :math-mode to be set to nil,
> t or `inline'. When `inline', as you suggest, it replaces \[...\] with
> \(...\) and ignores any label. But it still uses whatever environment is
> provided in :environment, that is, it won't make any guess about which
> one to use.
Yeah, you're right. Less guessing is better guessing. 'Display'
might be same t.
> Also, instead of using a single `org-e-latex-default-table-environment',
> its value can be a plist like the following:
>
> (:table-mode "tabular" :math-mode "bmatrix" :inline-math-mode "smallmatrix")
Yeah, that would be nice. Would it extend to the options in
ATTR_LATEX? I.e. would it be nice (?) to be able to specify
- environment
- math-environment
- inline-math-environment
in one option line s.t. I could easily switch from table to matrix to
inline matrix? E.g.
#+ATTR_LATEX: :math-environment "Bmatrix" :math-mode t
prints a display matrix
but
#+ATTR_LATEX: :math-environment "Bmatrix" :math-mode nil
prints a table.
I don't know whether this is just making things more confusing or
whether it would be useful. . .
Also, at least a prefix string would be very useful as that's how
matrices are usually named. E.g.
#+ATTR_LATEX: :math-mode t :prefix "P="
|1|2|
|3|4|
is translated to
P=\begin{bmatrix}1&2\\3&4\end{bmatrix}
Thanks,
Rasmus
--
Dung makes an excellent fertilizer
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Export tables as matrices (change tbl-export function on the fly)
2012-11-18 14:05 ` Rasmus
@ 2012-11-18 19:12 ` Nicolas Goaziou
0 siblings, 0 replies; 11+ messages in thread
From: Nicolas Goaziou @ 2012-11-18 19:12 UTC (permalink / raw)
To: Rasmus; +Cc: emacs-orgmode
Rasmus <rasmus@gmx.us> writes:
>> Then the backend can add the alignment as an optional argument in math
>> mode only when the name of the environment ends with a star and the
>> alignment string is one character long.
>
> In the LATEX_ATTR or as in the example above? The former I assume.
Correct.
>> To circumvent the problem, org-e-latex.el can use a defconst to store
>> table/matrix environments requiring "\cr" instead of "\\" at the end of
>> each row. It will, as a starter, only contain "bordermatrix".
>
> OK. How about just making a list of strings (with typical member
> STRING) which are known to have the format
> \STRING{matrix-like-output}? Then one can add whichever crazy
> environment that might be needed to this list. And users can easily
> add their favorite flavor of e.g. bordermatrix.
That's the idea: a list of strings which are used as commands and not as
environments, since environments use "\\".
> A short experiment seems to suggest that \cr works in place of \\.
"\\" is high-level, "\cr" is not. There are certainly drawbacks to use
replace \\ with \cr.
>> Also, instead of using a single `org-e-latex-default-table-environment',
>> its value can be a plist like the following:
>>
>> (:table-mode "tabular" :math-mode "bmatrix" :inline-math-mode "smallmatrix")
>
> Yeah, that would be nice. Would it extend to the options in
> ATTR_LATEX? I.e. would it be nice (?) to be able to specify
> - environment
> - math-environment
> - inline-math-environment
> in one option line s.t. I could easily switch from table to matrix to
> inline matrix? E.g.
>
> #+ATTR_LATEX: :math-environment "Bmatrix" :math-mode t
> prints a display matrix
> but
> #+ATTR_LATEX: :math-environment "Bmatrix" :math-mode nil
> prints a table.
>
> I don't know whether this is just making things more confusing or
> whether it would be useful. . .
That would be too much properties to my liking. There are already many
of them in tables.
> Also, at least a prefix string would be very useful as that's how
> matrices are usually named. E.g.
>
> #+ATTR_LATEX: :math-mode t :prefix "P="
> |1|2|
> |3|4|
>
> is translated to
> P=\begin{bmatrix}1&2\\3&4\end{bmatrix}
Sure :math-prefix and :math-suffix seem like a good idea.
Regards,
--
Nicolas Goaziou
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2012-11-18 19:17 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-14 14:49 Export tables as matrices (change tbl-export function on the fly) Rasmus
2012-11-14 16:21 ` Nicolas Goaziou
2012-11-14 18:05 ` Rasmus
2012-11-17 13:26 ` Rasmus Pank Roulund
2012-11-17 15:32 ` Nicolas Goaziou
2012-11-17 18:29 ` Rasmus
2012-11-18 8:53 ` Nicolas Goaziou
2012-11-18 11:50 ` Rasmus
2012-11-18 13:20 ` Nicolas Goaziou
2012-11-18 14:05 ` Rasmus
2012-11-18 19:12 ` Nicolas Goaziou
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).