# What is the function for "%latex" on a notebook cell ?

In a notebook cell one can write:

%latex

Hello

\ [

x=f(x)

\ ]

and an image appear with perfect math notation. (not jsmath)

What is the sage command that does the same receiving a string ? Something like latexrender(r"Hello \ [x=f(x)\ ]")

edit retag close merge delete

Sort by » oldest newest most voted

In the notebook, I believe that executing a %latex cell is equivalent to the command

Latex().eval("string", globals=globals)


For example,

Latex().eval(r"""Hello

$x=f(x)$

Goodbye""", globals=globals)

more

You win. :^)

( 2011-01-11 03:56:33 -0500 )edit

Well, not quite - because he needed a *raw* string, and because Latex() is not in the default namespace. But that's enough for me to open a ticket - see http://trac.sagemath.org/sage_trac/ticket/10592

( 2011-01-11 04:16:00 -0500 )edit

Latex() is in the default name space for the notebook. You can also replace "Latex()" with "latex" (note the lack of parentheses in the second one). I also don't understand your comment about the raw string. Running "latex.eval(...)" from the command line seems to produce png files containing the image, rather than popping up a window with a picture.

( 2011-01-11 04:40:03 -0500 )edit

Okay, that is good to know. The issue about the raw string is just that in the command line one would have to be careful to add white space for LaTeX, and/or carriage returns, which I don't know quite how to do without actual carriage returns - does \n or \r work? Yes, producing the png makes sense - what does latex.show(...) do? Pop it up? That behavior should be available, at any rate.

( 2011-01-11 14:49:11 -0500 )edit

If you just want to typeset some latex using jsmath, use for example:

html('$\pi$')

more

Percent directives in the notebook literally call other systems directly. (So you need $\LaTeX$ in your PATH to do this, of course, which I don't.)

So there should be a way to use the stuff in sage.misc.latex to do this. In theory,

sage: show(latex('mystring'))


should work for anything. Certainly it will work if you put Sage objects and numbers in it, but with strings I think it's tricky - latex() wraps them with \texttt{} in general, while %latex wraps LATEX_HEADER around things - see

sage: sage.misc.latex.Latex??


or the whole source for sage.misc.latex.

So that's not a full answer, but maybe it will lead to a full answer. I just don't understand well enough how the notebook calls other systems, otherwise I'd look there and give a complete answer.

more

I don't know that there is one. But from the console, you can use the text command, and wrap the latex in $: text("Behold the power of TeX:$\\frac{x^2}{y^3} = 7$", (0, 0), axes=False,fontsize=20)  So you can trivially write a latexrender command yourself: def latexrender(s): pic = text("$" + s.replace('$','\$') + "$",(0,0),axes=False, color='black',fontsize=20) pic.show() latexrender(r"17 + \sum_{i=2}^{q} \, k^2 = 29383")  Adding extra features like allowing you to specify the properties via **kwargs is left as an exercise for the reader. I should note though that the above uses matplotlib's TeX implementation, not any system verson, AFAIK. Let's see if I can figure out how to do this from the notebook.. okay, the above still works there. I'll see if I can figure out how to get LaTeX itself called (although I should say that the matplotlib mathtext has worked pretty well for me). After a little thought, something like the following should get the job done: import matplotlib matplotlib.rcParams['text.usetex']=True def latexrender(s): pic = text("$" + s.replace('$','\$') + "\$",(0,0),axes=False, color='black',fontsize=20)
pic.show()

latexrender(r"17 + \displaystyle\sum\limits_{i=2}^q \, k^2 = 29383")

more