# octave to (la)tex conversion

6 messages
Open this post in threaded view
|

## octave to (la)tex conversion

 Maxima has the function 'tex' that lets one transform an object in Maxima to a string of tex code. This is quite useful: an emacs mode (imaxima) uses this to create a front end that looks really professional; plus, with mathjax, it can be rolled into a nice web-based frontend. Is there anything similar in Octave? ---------- What I have in mind is the following application: I am writing course notes that have a lot of numerical examples in them. With \write18, I can put these inside a LaTeX file and have Octave do the computations. I would like to have Octave run a hook before quitting to dump all of the user-defined variables into a tex file as tex macros. It doesn't need to be fancy, something like x=1:2; ==> \def\octavex#1{\ifnum#1=1{1}\else\ifnum#1=2{2}\else\relax\fi\fi} IPC on the cheap, if you like. It seems like someone might have already written something like this. Leo _______________________________________________ Help-octave mailing list [hidden email] https://mailman.cae.wisc.edu/listinfo/help-octave
Open this post in threaded view
|

## Re: octave to (la)tex conversion

 On Tue, Oct 2, 2012 at 1:01 AM, Leo Butler <[hidden email]> wrote: > Maxima has the function 'tex' that lets one transform an object in > Maxima to a string of tex code. This is quite useful: an emacs mode > (imaxima) uses this to create a front end that looks really > professional; plus, with mathjax, it can be rolled into a nice web-based > frontend. > > Is there anything similar in Octave? > > ---------- > What I have in mind is the following application: I am writing course > notes that have a lot of numerical examples in them. With \write18, I > can put these inside a LaTeX file and have Octave do the computations. I > would like to have Octave run a hook before quitting to dump all of the > user-defined variables into a tex file as tex macros. It doesn't need to > be fancy, something like > > x=1:2; ==> > \def\octavex#1{\ifnum#1=1{1}\else\ifnum#1=2{2}\else\relax\fi\fi} > > IPC on the cheap, if you like. It seems like someone might have already > written something like this. > > Leo > > _______________________________________________ > Help-octave mailing list > [hidden email] > https://mailman.cae.wisc.edu/listinfo/help-octaveLeo, There are packages for latex that would parse your code and highlight it nicely, e.g. http://stackoverflow.com/questions/1966425/source-code-highlighting-in-latexThis may be more useful than converting octave to latex (which to me sounds only useful when defining functions, like in a CAS). with those tools you just insert your code and it looks nice in your latex document, no conversion needed. I do not know if a latex output has been already implemented. However if you would like to give ti a try, the instructions of jwe here http://wiki.octave.org/User:KaKiLa#make_output_format_a_valid_input_formatmay be useful. Basically you could define a new output function that does the conversion to tex. It may be not trivial though. Cheers -- M. Sc. Juan Pablo Carbajal ----- PhD Student University of Zürich http://ailab.ifi.uzh.ch/carbajal/_______________________________________________ Help-octave mailing list [hidden email] https://mailman.cae.wisc.edu/listinfo/help-octave
Open this post in threaded view
|

## Re: octave to (la)tex conversion

 In reply to this post by Leo Butler On 2 October 2012 01:01, Leo Butler <[hidden email]> wrote: > Maxima has the function 'tex' that lets one transform an object in > Maxima to a string of tex code. This is quite useful: an emacs mode > (imaxima) uses this to create a front end that looks really > professional; plus, with mathjax, it can be rolled into a nice web-based > frontend. > > Is there anything similar in Octave? > > ---------- > What I have in mind is the following application: I am writing course > notes that have a lot of numerical examples in them. With \write18, I > can put these inside a LaTeX file and have Octave do the computations. I > would like to have Octave run a hook before quitting to dump all of the > user-defined variables into a tex file as tex macros. It doesn't need to > be fancy, something like > > x=1:2; ==> > \def\octavex#1{\ifnum#1=1{1}\else\ifnum#1=2{2}\else\relax\fi\fi} > > IPC on the cheap, if you like. It seems like someone might have already > written something like this. > > Leo Look in the miscellaneous packages in the function publish'. It should do what you want though I'm not sure if free of bugs. You find any, please fix it and send us patches. There's also a very nice textable function that hasn't been released yet (also from miscellaneous package). Check it out at https://sourceforge.net/p/octave/code/11184/tree/trunk/octave-forge/main/miscellaneous/inst/textable.mCarnë _______________________________________________ Help-octave mailing list [hidden email] https://mailman.cae.wisc.edu/listinfo/help-octave
Open this post in threaded view
|

## Re: octave to (la)tex conversion

 Carnë Draug <[hidden email]> writes: > On 2 October 2012 01:01, Leo Butler <[hidden email]> wrote: >> Maxima has the function 'tex' that lets one transform an object in >> Maxima to a string of tex code. This is quite useful: an emacs mode >> (imaxima) uses this to create a front end that looks really >> professional; plus, with mathjax, it can be rolled into a nice web-based >> frontend. >> >> Is there anything similar in Octave? >> >> ---------- >> What I have in mind is the following application: I am writing course >> notes that have a lot of numerical examples in them. With \write18, I >> can put these inside a LaTeX file and have Octave do the computations. I >> would like to have Octave run a hook before quitting to dump all of the >> user-defined variables into a tex file as tex macros. It doesn't need to >> be fancy, something like >> >> x=1:2; ==> >> \def\octavex#1{\ifnum#1=1{1}\else\ifnum#1=2{2}\else\relax\fi\fi} >> >> IPC on the cheap, if you like. It seems like someone might have already >> written something like this. >> >> Leo > > Look in the miscellaneous packages in the function publish'. It > should do what you want though I'm not sure if free of bugs. You find > any, please fix it and send us patches. > > There's also a very nice textable function that hasn't been released > yet (also from miscellaneous package). Check it out at > > https://sourceforge.net/p/octave/code/11184/tree/trunk/octave-forge/main/miscellaneous/inst/textable.m> > Carnë Carnë, Juan, thanks for the replies. I am not interested in type-setting octave code in latex, there are a few ways to do that. The reference to maxima was because maxima makes it easy to customize the tex output via texput. Nor am I really interested in the approach taken by textable or publish. What I want is a way to export 'stuff' from octave to tex that preserves as much structure as possible. I want tex to do the typesetting and octave to do the calculations. From your responses, I infer that there is not a readily available way to do this. So, I scratched something together to illustrate what I want. Here is a snippet (apologies for the apalling code): ,---- | octave> x=rand(1,3) | x = | |    0.40866   0.24822   0.95185 | | octave> texit(x,"x") | ans = \def\x(#1){\ifnum#1<1\relax\else\ifnum#1>3\relax\else\ifnum#1=1{0.408658}\else\ifnum#1=2{0.248223}\else\ifnum#1=3{0.951853}\fi\fi\fi\fi\fi} ---- In tex, the vector components are accessed by \x(1), etc. To typeset \x as a vector just requires a simple tex macro to loop over all the entries in \x. ---------- (All code is released under gplv3; varargin is there to provide customizations): function s = texit(object,name,varargin)   if            isscalar(object),       s=texit_scalar(object,name,varargin);   elseif        isvector(object),       s=texit_vector(object,name,varargin);   elseif        ismatrix(object),       s=texit_matrix(object,name,varargin);   endif endfunction function s=texit_scalar(object,name,varargin)   s=sprintf("\\def\\%s{%f}",name,object); endfunction function s=texit_vector(x,name,varargin)   n=length(x);   c=texit_check_bounds(1,n);   s=cstrcat("\\def\\",name,"(#1){",c);   f="";   for i=1:n     t=texit_accessor(x(i),i);     s=cstrcat(s,"\\else",t);     f=cstrcat(f,"\\fi");   endfor   s=cstrcat(s,f,"\\fi\\fi}"); endfunction _______________________________________________ Help-octave mailing list [hidden email] https://mailman.cae.wisc.edu/listinfo/help-octave
Open this post in threaded view
|

## Re: octave to (la)tex conversion

 On 02/10/12 17:26, Leo Butler wrote: > Carnë Draug <[hidden email]> writes: > >> On 2 October 2012 01:01, Leo Butler <[hidden email]> wrote: >>> Maxima has the function 'tex' that lets one transform an object in >>> Maxima to a string of tex code. This is quite useful: an emacs mode >>> (imaxima) uses this to create a front end that looks really >>> professional; plus, with mathjax, it can be rolled into a nice web-based >>> frontend. >>> >>> Is there anything similar in Octave? >>> >>> ---------- >>> What I have in mind is the following application: I am writing course >>> notes that have a lot of numerical examples in them. With \write18, I >>> can put these inside a LaTeX file and have Octave do the computations. I >>> would like to have Octave run a hook before quitting to dump all of the >>> user-defined variables into a tex file as tex macros. It doesn't need to >>> be fancy, something like >>> >>> x=1:2; ==> >>> \def\octavex#1{\ifnum#1=1{1}\else\ifnum#1=2{2}\else\relax\fi\fi} >>> >>> IPC on the cheap, if you like. It seems like someone might have already >>> written something like this. >>> >>> Leo >> >> Look in the miscellaneous packages in the function publish'. It >> should do what you want though I'm not sure if free of bugs. You find >> any, please fix it and send us patches. >> >> There's also a very nice textable function that hasn't been released >> yet (also from miscellaneous package). Check it out at >> >> https://sourceforge.net/p/octave/code/11184/tree/trunk/octave-forge/main/miscellaneous/inst/textable.m>> >> Carnë > > Carnë, Juan, thanks for the replies. > > I am not interested in type-setting octave code in latex, there are a > few ways to do that. The reference to maxima was because maxima makes it easy > to customize the tex output via texput. > > Nor am I really interested in the approach taken by textable or > publish. What I want is a way to export 'stuff' from octave to tex that > preserves as much structure as possible. I want tex to do the > typesetting and octave to do the calculations. > >  From your responses, I infer that there is not a readily available way > to do this. So, I scratched something together to illustrate what I > want. Here is a snippet (apologies for the apalling code): > > ,---- > | octave> x=rand(1,3) > | x = > | > |    0.40866   0.24822   0.95185 > | > | octave> texit(x,"x") > | ans = \def\x(#1){\ifnum#1<1\relax\else\ifnum#1>3\relax\else\ifnum#1=1{0.408658}\else\ifnum#1=2{0.248223}\else\ifnum#1=3{0.951853}\fi\fi\fi\fi\fi} > ---- > > In tex, the vector components are accessed by \x(1), etc. > To typeset \x as a vector just requires a simple tex macro to loop > over all the entries in \x. > > > > ---------- > (All code is released under gplv3; varargin is there to provide customizations): > > function s = texit(object,name,varargin) >    if            isscalar(object),       s=texit_scalar(object,name,varargin); >    elseif        isvector(object),       s=texit_vector(object,name,varargin); >    elseif        ismatrix(object),       s=texit_matrix(object,name,varargin); >    endif > endfunction > > function s=texit_scalar(object,name,varargin) >    s=sprintf("\\def\\%s{%f}",name,object); > endfunction > > function s=texit_vector(x,name,varargin) >    n=length(x); >    c=texit_check_bounds(1,n); >    s=cstrcat("\\def\\",name,"(#1){",c); >    f=""; >    for i=1:n >      t=texit_accessor(x(i),i); >      s=cstrcat(s,"\\else",t); >      f=cstrcat(f,"\\fi"); >    endfor >    s=cstrcat(s,f,"\\fi\\fi}"); > endfunction > > > _______________________________________________ > Help-octave mailing list > [hidden email] > https://mailman.cae.wisc.edu/listinfo/help-octave> Hi, if you are an emacs user, you can achieve something similar using org-mode and the corresponding babel functionality. Basically you write the notes as an org file (the syntax is similar to markdown) and insert source blocks inbetween the notes. Once you are finished you export the whole thing to pdf (org-mode uses latex for this) and during the export, the source blocks are evaluated and replaced with their corresponding results. They support pretty much every popular programming language (ruby, python, lisp, octave, gnuplot, R, bash, ...) I use org-mode quite a lot, but so far I haven't had a look at the babel functionality, therefore, I can't tell you how good the results look. More information here: http://orgmode.org/http://orgmode.org/worg/org-contrib/babel/Regards, Laurent _______________________________________________ Help-octave mailing list [hidden email] https://mailman.cae.wisc.edu/listinfo/help-octave
Open this post in threaded view
|

## Re: octave to (la)tex conversion

 Laurent Hoeltgen <[hidden email]> writes: > On 02/10/12 17:26, Leo Butler wrote: >> Carnë Draug <[hidden email]> writes: >> >>> On 2 October 2012 01:01, Leo Butler <[hidden email]> wrote: >>>> Maxima has the function 'tex' that lets one transform an object in >>>> Maxima to a string of tex code. This is quite useful: an emacs mode >>>> (imaxima) uses this to create a front end that looks really >>>> professional; plus, with mathjax, it can be rolled into a nice web-based >>>> frontend. >>>> >>>> Is there anything similar in Octave? >>>> >>>> ---------- >>>> What I have in mind is the following application: I am writing course >>>> notes that have a lot of numerical examples in them. With \write18, I >>>> can put these inside a LaTeX file and have Octave do the computations. I >>>> would like to have Octave run a hook before quitting to dump all of the >>>> user-defined variables into a tex file as tex macros. It doesn't need to >>>> be fancy, something like >>>> >>>> x=1:2; ==> >>>> \def\octavex#1{\ifnum#1=1{1}\else\ifnum#1=2{2}\else\relax\fi\fi} >>>> >>>> IPC on the cheap, if you like. It seems like someone might have already >>>> written something like this. >>>> >>>> Leo >>> >>> Look in the miscellaneous packages in the function publish'. It >>> should do what you want though I'm not sure if free of bugs. You find >>> any, please fix it and send us patches. >>> >>> There's also a very nice textable function that hasn't been released >>> yet (also from miscellaneous package). Check it out at >>> >>> https://sourceforge.net/p/octave/code/11184/tree/trunk/octave-forge/main/miscellaneous/inst/textable.m>>> >>> Carnë >> >> Carnë, Juan, thanks for the replies. >> >> I am not interested in type-setting octave code in latex, there are a >> few ways to do that. The reference to maxima was because maxima makes it easy >> to customize the tex output via texput. >> >> Nor am I really interested in the approach taken by textable or >> publish. What I want is a way to export 'stuff' from octave to tex that >> preserves as much structure as possible. I want tex to do the >> typesetting and octave to do the calculations. >> >>  From your responses, I infer that there is not a readily available way >> to do this. So, I scratched something together to illustrate what I >> want. Here is a snippet (apologies for the apalling code): >> >> ,---- >> | octave> x=rand(1,3) >> | x = >> | >> |    0.40866   0.24822   0.95185 >> | >> | octave> texit(x,"x") >> | ans = \def\x(#1){\ifnum#1<1\relax\else\ifnum#1>3\relax\else\ifnum#1=1{0.408658}\else\ifnum#1=2{0.248223}\else\ifnum#1=3{0.951853}\fi\fi\fi\fi\fi} >> `---- >> >> In tex, the vector components are accessed by \x(1), etc. >> To typeset \x as a vector just requires a simple tex macro to loop >> over all the entries in \x. >> >> >> >> ---------- >> (All code is released under gplv3; varargin is there to provide customizations): >> >> function s = texit(object,name,varargin) >>    if            isscalar(object),       s=texit_scalar(object,name,varargin); >>    elseif        isvector(object),       s=texit_vector(object,name,varargin); >>    elseif        ismatrix(object),       s=texit_matrix(object,name,varargin); >>    endif >> endfunction >> >> function s=texit_scalar(object,name,varargin) >>    s=sprintf("\\def\\%s{%f}",name,object); >> endfunction >> >> function s=texit_vector(x,name,varargin) >>    n=length(x); >>    c=texit_check_bounds(1,n); >>    s=cstrcat("\\def\\",name,"(#1){",c); >>    f=""; >>    for i=1:n >>      t=texit_accessor(x(i),i); >>      s=cstrcat(s,"\\else",t); >>      f=cstrcat(f,"\\fi"); >>    endfor >>    s=cstrcat(s,f,"\\fi\\fi}"); >> endfunction >> >> >> _______________________________________________ >> Help-octave mailing list >> [hidden email] >> https://mailman.cae.wisc.edu/listinfo/help-octave>> > > Hi, > > if you are an emacs user, you can achieve something similar using > org-mode and the corresponding babel functionality. Basically you > write the notes as an org file (the syntax is similar to markdown) and > insert source blocks inbetween the notes. Once you are finished you > export the whole thing to pdf (org-mode uses latex for this) and > during the export, the source blocks are evaluated and replaced with > their corresponding results. They support pretty much every popular > programming language (ruby, python, lisp, octave, gnuplot, R, bash, > ...) > I use org-mode quite a lot, but so far I haven't had a look at the > babel functionality, therefore, I can't tell you how good the results > look. More information here: > > http://orgmode.org/> http://orgmode.org/worg/org-contrib/babel/> > Regards, > Laurent Thanks, Laurent, I am an emacs user. I have dabbled with org-mode and have used muse quite a bit (in the spring, I taught a 16 week course using muse to publish everything). Muse has a babel-like functionality built-in. My feeling was that simple things were done well, but for more complicated things it felt like there were too many moving parts. And org-mode is, I think, a couple of orders of magnitude more intricate than muse. Regardless of that, it is mid-semester and I don't want to change my non-muse/non-org-mode workflow radically...However, in the longer run, I may take a second look at org-mode. Leo _______________________________________________ Help-octave mailing list [hidden email] https://mailman.cae.wisc.edu/listinfo/help-octave