On Mon, 16 Jan 2012 at 03:10AM -0800, jplab wrote:
> But since I'm a lazy guy, I want tex to do the work for me. That's why
> I thought of a tex command that would:
> 
> 1) take all the needed arguments;
> 2) run a sagesilent block;
> 3) include the produced tikz picture (produced in the sagesilent
> block, included in a file).
> 
> All that in a very nice tex command.
> 
> Something like (replacing the polytope things by a matrix for
> simplication reasons...):
> 
> \newcommand{\tikzimage}[1]{\begin{sagesilent}
>                                                        M=matrix([[1,1],
> [2,2]])
>                                                        Image=latex(M)
>  
> open('dessin.tex', 'w').write(Image);
>                                               \end{sagesilent}
>                                               \input{dessin.tex}
>                                               }

My first thought is, why do you need to write to an external file? It
looks like you could just do

\newcommand{\tikzimage}[1]{\sage{matrix([1,1],[2,2])}}

Another (untested!) idea is: use a regular sagesilent block to set up a
function that does what you want, and then use \sagestr to pull in the
code you want. Something like

\begin{sagesilent}
  def foo(x):
    return 'some tikz code with {0} in it'.format(x)
\end{sagesilent}

\newcommand{\tikzimage}[1]{\sagestr{#1}}

The \sagestr macro just pulls in a string, it doesn't run latex() on its
argument -- see the "Make Sage write your LaTeX for you" and the
"Plotting functions in TikZ with SageTeX" sections of the example file:
https://bitbucket.org/ddrake/sagetex/src/tip/example.tex (and the
typeset version:
https://bitbucket.org/ddrake/sagetex/downloads/example.pdf.

Do any of these ideas work for you?

Dan

--
---  Dan Drake
-----  http://mathsci.kaist.ac.kr/~drake
-------

Attachment: signature.asc
Description: Digital signature

Reply via email to