Ask Your Question
0

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

asked 2011-01-11 08:17:27 +0200

Pedro gravatar image

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 flag offensive close merge delete

4 Answers

Sort by ยป oldest newest most voted
5

answered 2011-01-11 10:50:50 +0200

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)
edit flag offensive delete link more

Comments

You win. :^)

DSM gravatar imageDSM ( 2011-01-11 10:56:33 +0200 )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

kcrisman gravatar imagekcrisman ( 2011-01-11 11:16:00 +0200 )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.

John Palmieri gravatar imageJohn Palmieri ( 2011-01-11 11:40:03 +0200 )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.

kcrisman gravatar imagekcrisman ( 2011-01-11 21:49:11 +0200 )edit
0

answered 2012-01-17 09:31:49 +0200

pang gravatar image

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

html('$\pi$')
edit flag offensive delete link more
1

answered 2011-01-11 10:18:58 +0200

kcrisman gravatar image

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.

edit flag offensive delete link more
1

answered 2011-01-11 09:40:23 +0200

DSM gravatar image

updated 2011-01-11 10:07:21 +0200

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")
edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

Stats

Asked: 2011-01-11 08:17:27 +0200

Seen: 2,911 times

Last updated: Jan 17 '12