# Sagetex : how to capture sageblock output for future use.

[ This is more, I think, a \LaTeX question than a Sagemath question. But since it's centered on the use of Sagetex, it is probably the right place to ask... ]

I'd like to be able to do some (boring but necessary) computation without printing it, use its results, then, in an appendix, show the computation (without re-running it).

The obvious solution would be to run the computation in a sagesilent block, use its results, then later insert a sageverbatim environment with the same code :

\begin{sagesilent}
## Boring computation
\end{sagesilent}
%% Lotsa discussion
\appendix
\begin{sageverbatim}
## Boring computation again
\end{sageverbatim}


The problem is that now, I have two copies of the same code, with no consistency guarantee (as illustrated in the example, BTW). I tried :

\let\foo={\begin{sageblock}
## boring computation
\end{sageblock}}
\appendix
\foo


But that doesn't work : The boring computation is still printed before the discussion and nothing is printed in the appendix. I'm not really surprised : the \LaTeX verbatim environments are full of such traps. And, no, using \protect is not enough.

Any idea ?

edit retag close merge delete

Sort by » oldest newest most voted

A possible workaround is to use the filecontents LaTeX package in order to :

• define in the main file the contents of a sage file in the working directory
• use it in a sagesilent block where needed,
• cleanly typeset in the appendix via lstinputlisting or minted.

It is not a perfect solution (the typesetting parameters used by minted or lstinputlisting need to be tweaked to get something "close to" the result of sageblock, but the consistency and ease of use are obtained : there is a single source for both the paper and the associated computations.

more

Hmm, I don't know much about verbatim or defining new variables. You are right about fragility, though, I get that kind of thing in beamer a lot. What I would do is this.

\begin{sagesilent}
## Boring computation
## final result x = my_result
\end{sagesilent}
%% Lotsa discussion
\appendix
The answer is $\sage{x}$.


Probably this should work?

more

This should work, yes. But it's not what I want to do.

The computation has to be available (for proof) but is in itself of little interest for readers. I want to be able to use its results in the main text, the add it to an appendix (think lemma enunciation vs demonstration, when the lemma is of weaker interest than the main theorem...).

( 2017-02-02 01:04:09 -0500 )edit

I see what you mean now. Unsure as to solution, I don't use sageverbatim myself.

( 2017-02-02 15:26:03 -0500 )edit