Hi David,
On Wed, May 13, 2020 at 11:53 PM David Sevilla <[email protected]> wrote:
> Hi, I have been trying to use SageTeX in a document where I also use the
> fancyhdr package, and I am not able to put Sage computations in the header
> (or the footer). A minimal example follows.
>
> \documentclass{article}
> \usepackage{sagetex}
> \usepackage{fancyhdr}
>
> \begin{document}
>
> \begin{sagesilent}
> n = 1
> \end{sagesilent}
>
> \fancyhead[R]{$\sage{n}$}
> \title
> {$\sage{n}$}
> \maketitle
> \thispagestyle{fancy}
>
> \end{document}
>
>
> After pdflatex, and running sage on the .sagetex.sage file, I get the
> following error:
>
> Processing Sage code for test02.tex...
> Code block (line 7) begin...end
> Inline formula 0 (line 14)
> Sage processing complete. Run LaTeX on test02.tex again.
> Inline formula 1 (line 17)
>
> **** Error in Sage code on line 17 of test02.tex! Traceback follows.
> Traceback (most recent call last):
> File "test02.sagetex.sage.py", line 24, in <module>
> _st_.inline(_sage_const_1 , latex(n))
> File "/usr/lib/python2.7/dist-packages/sagetex.py", line 121, in inline
> '}{{%\n' + s.rstrip() + '}{}{}{}{}}\n')
> ValueError: I/O operation on closed file
>
> **** Running Sage on test02.sage failed! Fix test02.tex and try again.
> Traceback (most recent call last):
> File "test02.sagetex.sage.py", line 26, in <module>
> _st_.goboom(_sage_const_17 )
> File "/usr/lib/python2.7/dist-packages/sagetex.py", line 264, in goboom
> os.remove(self.filename + '.sagetex.sout.tmp')
> OSError: [Errno 2] No such file or directory: 'test02.sagetex.sout.tmp'
>
> As you can see, "inline formula 0" was generated properly and the processing
> ended there; that line (14) is the \maketitle. On the other hand, inline
> formula 1 was not resolved because the file was already closed (note the
> "Sage processing complete" before); the line 17 where it arose is the
> \end{document}. After the second pdflatex, the Sage result appears correctly
> in the title but "??" appears instead in the header, and I get the:
>
> LaTeX Warning: Reference `@sageinline1' on page 1 undefined on input line 17.
>
>
>
> Any suggestions on how to combine these two packages is very welcome, or at
> least an explanation of this behaviour (why did Sage think that there was
> nothing else to do after formula 0???). I cannot think of a workaround, other
> than avoiding fancyhdr and searching for smart LaTeX to be able to put things
> into place.
>
Thanks for the record. A hotfix is to edit
/usr/lib/python2.7/dist-packages/sagetex.py
and replace the line 285, which is
self.souttmp.close()
with the following 2 lines:
self.souttmp.flush()
os.fsync(self.souttmp.fileno())
Then it should work. The problem is that fancyhdr does some kind of
postprocessing, after sagetex thinks all is done.
Indeed, with this fix I see running sage with the pdflatex output of
your file hh.tex
$ sage hh.sagetex.sage
Processing Sage code for hh.tex...
Code block (line 7) begin...end
Inline formula 0 (line 14)
Sage processing complete. Run LaTeX on hh.tex again.
Inline formula 1 (line 17)
This should be of course properly fixed - please open an issue on
https://github.com/sagemath/sagetex
Best
Dmirii
> Thanks!
>
> --
> You received this message because you are subscribed to the Google Groups
> "sage-support" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/sage-support/fabb1997-a5c5-4a5f-819c-1f5a4fb63ff3%40googlegroups.com.
--
You received this message because you are subscribed to the Google Groups
"sage-support" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/sage-support/CAAWYfq2i4TzbEFaC4XAV-B%3Dk9GMO5r-smvNRNNbvV44PU_F57w%40mail.gmail.com.