17

Is there anything (command/script/function) that can convert a Octave expression to LaTeX. What I am asking for is something like this:

I type

a = eye(3,3); %Identity Matrix

and then do something like textify_me(a) which produces

\begin{array}{ccc}
1 & 0 & 0 \\ blah blah blah
\end{array}

AND/OR

syms x
int(sym('x^2'))

produces

\frac{x^3}{3}

I am not asking for "sweaving" of codes, exporting figures or anything similar. I am simply asking for conversion of variables and symbolic expressions directly to LaTeX format.

MATLAB has a function latex which does this. But it is closed source. Is there something Open Source or should I attempt to try and accumulate people to write it?

  • 1
    In the comments to this answer: tex.stackexchange.com/a/11716/86 Jan Hlavacek explains how to get Octave to print out a matrix in LaTeX format. It's an extremely useful comment! – Loop Space Feb 7 '12 at 18:20
  • 2
    I'm afraid LaTeX output is not possible with Octave. :( If I may suggest one application I like, it's Maxima. And it has a LaTeX output, e.g. tex(factor(x^2+2*x+1)); gives you $$\left(x+1\right)^2$$. :) – Paulo Cereda Feb 7 '12 at 18:45
8

If all you need is a matrix, you can do this:

strrep(strrep(mat2str(A),",","&"),";","\\\\\n")(2:end-1)

where A is your matrix. That will give you the body of your matrix, without the \begin{matrix} and \end{matrix}

strcat("\\begin{bmatrix}\n",strrep(strrep(mat2str(A),",","&"),";","\\\\\n")(2:end-1),"\n\\end{bmatrix}\n")

will generate the whole thing.

I don't think there is a more comprehensive solution in Octave.

Another option seems to be using scilab. It is also more or less MATLAB compatible (some say even more than Octave), and it has a prettyprint function that seems to do what you want. I have no experience with scilab, though.

7

Nowadays the latex function is available on Octave-Forge in the symbolic package.

>> pkg install -forge symbolic
>> pkg load symbolic

>> a = eye(3);
>> latex(sym(a))
\left[\begin{matrix}1 & 0 & 0\\0 & 1 & 0\\0 & 0 & 1\end{matrix}\right] 

>> syms x
>> latex(int(sym('x^2')))
\frac{x^{3}}{3}
4

But it is closed source. Is there something Open Source or should I attempt to try and accumulate people to write it?

If you aren't completely wedded to Octave, you can use Sage to do this.

sage: M = matrix([[2,3],[3,2]])
sage: latex(M)
\left(\begin{array}{rr}
2 & 3 \\
3 & 2
\end{array}\right)
sage: a = integral(x^2,x)
sage: latex(a)
\frac{1}{3} \, x^{3}

If you really do need to do this with Octave, you can use the Sage to Octave and back interface as well. I don't have a local Octave install so I can't post some code, but I don't think there should be a huge problem with the flow Octave -> Sage -> Latex.

  • This doesn't seem so satisfactory. At best it needs Sage, which is huge, and at worst you're suggesting switching languages entirely... – qubyte Feb 7 '12 at 17:25
  • 1
    Not exactly. Ignoring whether size is an issue these days with downloads (that depends a lot on where Nunoxic is), the same thing would work going to an online Sage server, assuming it has Octave installed (our local one, which I can't advertise, does). Again, untested... but it's worth a shot. – kcrisman Feb 7 '12 at 18:05
  • I need code compatibility with MATLAB so sage isn't the best alternative. – user10961 Feb 7 '12 at 19:02
  • Unfortunately (and, to me, surprisingly), it looks like we don't have a rudimentary reverse parser yet, like we do with Maple and Mathematica. I've opened a ticket for this at trac.sagemath.org/sage_trac/ticket/12467. – kcrisman Feb 7 '12 at 19:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy