First time here? Check out the FAQ!

Ask Your Question
1

Sagetex : how to capture sageblock output for future use.

asked 8 years ago

Emmanuel Charpentier gravatar image

updated 8 years ago

[ 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}}
% Lotsadiscussion
\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 ?

Preview: (hide)

2 Answers

Sort by » oldest newest most voted
1

answered 7 years ago

Emmanuel Charpentier gravatar image

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.

Preview: (hide)
link
0

answered 8 years ago

kcrisman gravatar image

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?

Preview: (hide)
link

Comments

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...).

Emmanuel Charpentier gravatar imageEmmanuel Charpentier ( 8 years ago )

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

kcrisman gravatar imagekcrisman ( 8 years ago )

Your Answer

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

Add Answer

Question Tools

1 follower

Stats

Asked: 8 years ago

Seen: 745 times

Last updated: Mar 17 '18