Ask Your Question
1

Sagetex : how to capture sageblock output for future use.

asked 2017-02-01 16:41:51 +0100

Emmanuel Charpentier gravatar image

updated 2017-02-01 17:45:36 +0100

[ 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 ?

edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted
1

answered 2018-03-17 10:49:52 +0100

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.

edit flag offensive delete link more
0

answered 2017-02-01 20:27:16 +0100

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?

edit flag offensive delete link more

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 ( 2017-02-02 08:04:09 +0100 )edit

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

kcrisman gravatar imagekcrisman ( 2017-02-02 22:26:03 +0100 )edit

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: 2017-02-01 16:41:51 +0100

Seen: 698 times

Last updated: Mar 17 '18