Converting Latex Documents to Sage Worksheets
Introduction
Latex documents can be translated to jsMath, the tool used to render mathematics in the Sage notebook. This project is about automating the conversion process so that authors can easily use a single command to convert a booklength Latex document to a collection of Sage worksheets. These could have embedded Sage input cells, possibly containing interacts, and the crossreferencing features of Latex would be preserved in the collection of Sage worksheets.
Rob Beezer, [email protected], rbeezer on #sagedevel IRC
Supported by
 University Puget Sound Lantz Senior Fellowship (AY 201011)
National Science Foundation DUE1022574 (20102013)
Conversion Software
Mercurial Repository @BitBucket
Clone using:
hg clone https://[email protected]/rbeezer/tex2sws/
Linear Algebra Patches
This table tracks patches meant to support the teaching of introductory linear algebra and the enhancement of Beezer's "A First Course in Linear Algebra."
Some tickets below that are available for review can be seen building and passing tests at the Sage PatchBot. Failures can be due to improper listing of necessary prerequisites, or builds not caught up with latest alpha version, so do not necessarily mean a ticket is not ready for review.
Ticket 
Description 
Status 
Acknowledgements 
trivial matrix kernels over nonfields 
4.4.alpha0 
Martin Albrecht 

vector constructor documentation 
4.6.1.alpha3 
Andrey Novoseltsev 

documentation fix on new_matrix constructor 
4.6.1.alpha3 
Benjamin Jones 

additions to allones matrix constructor 
4.6.2.alpha0 
KarlDieter Crisman, Robert Miller 

zero_vector constructor, vector constructor errorchecking 
4.6.2.alpha0 
Andrey Novoseltsev 

matrix augment accepts a vector 
4.6.2.alpha0 
Joris Vankerschaver, Robert Bradshaw 

generic Smith form fails on integer matrices 
4.6.2.alpha2 
Author: David Loeffler 

block matrix constructor 
4.6.2.alpha3 
Author: Willem Jan Palenstijn 

latex printing for vectors 
4.6.2.alpha3 
Author: Jason Grout 

add .is_singular() 
4.6.2.alpha3 
Robert Bradshaw 

conjugatetranspose of a matrix 
4.6.2.alpha3 
Robert Bradshaw 

documentation: matrix row/column linear combinations 
4.6.2.alpha3 
Alyson Deines 

columnoriented matrix constructor 
4.6.2.alpha3 
Dan Drake 

dictionary input to vector constructor 
4.6.2.alpha3 
Dima Pasechnik 

route sparse integer matrices to specialized Smith form 
4.6.2.alpha3 
David Loeffler 

matrix prettyprinting 
4.6.2.alpha3 
Author: Ivan Andrus 

improved error messages for noninvertible matrices 
4.6.2.alpha4 
Author: Andre Apitzsch 

row and column matrix from vector, deprecate transpose 
4.6.2.alpha4 
Volker Braun, Marco Streng 

echelon form over QQ is mutable 
4.6.2.alpha4 
Tom Coates 

diagonal matrix constructor rewrite 
4.6.2.alpha4 
Joint with: Dan Drake 

diagonal elements of a matrix 
4.6.2.rc0 
Tom Coates 

rows/columns of sparse matrices with zero rows/columns 
4.6.2.rc0 
Jason Grout 

speedup scalar multiples of sparse matrices 
4.7.alpha1 
Author: Maarten Derickx 

matrix row and column swapping, returns new matrix 
4.7.alpha2 
Alain Filbois 

matrix multiplication speedup 
4.7.alpha2 
Author: Simon King 

random vector constructor 
4.7.alpha3 
Felix Lawrence 

vector conjugation 
4.7.alpha3 
Felix Lawrence 

outer product of vectors 
4.7.alpha3 
Felix Lawrence, John Palmieri 

vector constructor fails with empty list 
4.7.alpha3 
Joint: J. Palmieri, Review: D.Pasechnik 

document vector constructor 
4.7.alpha3 
Martin Raum 

fix subdivision attribute 
4.7.alpha4 
Author: John Palmieri 

listing infinite vector space just hangs 
4.7.alpha4 
John Palmieri 

Hermitian inner product, doctests 
4.7.alpha4 
KarlDieter Crisman 

extended echelon form 
4.7.alpha4 
John Palmieri 

make matrix pivots immutable 
4.7.alpha4 
Author: John Palmieri 

is_unitary() for matrices 
4.7.alpha4 
Martin Raum 

constructor for elementary matrices 
4.7.alpha4 
KarlDieter Crisman 

overhaul matrix stack, augment 
4.7.alpha4 
Keshav Kini 

make subdivisions optional on tensor product 
4.7.alpha4 
John Palmieri 

algebraic closure of CDF 
4.7.alpha4 
Mike Hansen 

subspace decomposition, check optional 
4.7.alpha5 
Author: Martin Raum 

QR matrix decomposition over exact rings 
4.7.alpha5 
Simon Spicer 

is_diagonalizable() for matrices 
4.7.1.alpha0 
Dan Drake 

refactor matrix kernels 
4.7.1.alpha2 
Christian Stump 

Schur matrix decomposition 
4.7.1.alpha3 
Martin Raum, John Palmieri, Jeroen Demeyer 

similarity check for matrices 
4.7.1.alpha4 
Dan Drake 

LU decomposition for rectangular matrices 
4.7.2.alpha0 
Ryan Grout 

companion matrix constructor 
4.7.2.alpha1 
David Loeffler 

is_hermitian() for matrices 
4.7.2.alpha1 
Mike Hansen 

transformation matrix for echelon form of sparse matrices 
4.7.2.alpha1 
Author: Volker Braun 

free module inititalization 
4.7.2.alpha2 
Author: Nicolas Borie 

zigzag form and rational canonical form 
4.7.2.alpha2 
David Loeffler 

linear dependence of vectors 
4.7.2.alpha2 
Ivo Hedtke 

fix free module morphism surjectivity 
4.7.2.alpha2 
John Palmieri 

alias for free module morphism lift method 
4.7.2.alpha2 
Martin Raum 

solve systems over CDF 
4.7.2.alpha3 
Martin Raum 

properties for matrices 
4.7.2.alpha3 
H Schilly, J Grout, M Raum 

LU decomposition for exact matrices 
4.7.2.alpha3 
Martin Raum 

viewing matrices of algebraic numbers can hang 
4.7.2.alpha3 
Martin Raum 

matrix morphism additional methods 
4.7.2.alpha3 
Martin Raum 

update exact eigenspace routines 
4.7.2.alpha3 
Martin Raum 

vector() function speed 
4.7.2.alpha3 
Joint: William Stein 

random elements of algebraic field 
4.7.2.alpha3 
Simon Spicer, Leif Leonhardy 

zero_at method for RDF/CDF vectors 
4.7.2.alpha3 
Leif Leonhardy 

singular values for matrices over CDF 
4.7.2.alpha4 
Martin Raum, Jeroen Demeyer 

matrix and vector norms, condition number over CDF 
4.7.2.alpha4 
Simon Spicer, Martin Raum, Jeroen Demeyer 

expand print version of free module morphisms 
4.8.alpha1 
Julian Rueth 

arguments to rows(), columns(), jordan_block() 
4.8.alpha2 
Johan Bosman 









linear transformations 
positive review 
Martin Raum, Jason Grout 

fix and upgrade GramSchmidt 
positive review 
Martin Raum, John Palmieri, Jason Grout 









QR double dense matrix decomposition upgrade 
with patch 
Martin Raum 

is_normal() for matrices 
with patch 


upgrade is_unitary() for RDF/CDF 
with patch, dep. #10848, #11277 


cyclic subspaces (aka Krylov subspaces) 
with patch 


deprecate eigenspaces for matrices over RDF/CDF 
with patch 


RDF/CDF eigenvalues, symmetric matrices, multiplicities 
with patch 


upgrade matrix set_row() and set_column() 
with patch 










remove solveleftLU 
needs work 


rank for matrices over CDF 
new 


add double dense matrix file to documentation 
needs work 


adjoint metaticket 
information, dep. 10471, 8094, 10501 


deprecate adjoint in favor of adjugate 
needs work 


LLL reduced bases for right kernels 
new 


obliterate sage/matrix/misc.pyx 
orphaned 


Cholesky decomposition over rationals 
new 


speed up solve_right() 
new 


cached eigenstuff is mutable 
new 

Abstract Algebra Patches
Ticket 
Description 
Status 
Acknowledgements 
dicyclic groups 
4.2.1.alpha0 
David Joyner 

HigmanSims graph 
4.2.1.rc0 
Nathann Cohen 

Cayley tables, operation tables 
4.4.alpha0 
Nicolas M. Thiery, Jason Grout 

all subgroups of a permutation group 
4.6.2.alpha4 
Dima Pasechnik 

all cosets of a permutation group 
4.6.2.alpha4 
Dima Pasechnik 

intersections of permutation groups 
4.7.alpha3 
Dima Pasechnik 

inverse of permutation group elements 
4.7.alpha3 
Robert Bradshaw 

conjugates of permutation groups 
4.7.alpha3 
Dima Pasechnik 

commutator subgroup for permutation groups 
4.7.alpha3 
Dima Pasechnik, David Joyner 

permutation group cleanup 
4.7.1.alpha1 
Author: Mike Hansen 

inputs to lattice meet and join 
4.7.1.alpha1 
Anne Schilling, Franco Saliola 

all relations of a poset 
4.7.1.alpha1 
Franco Saliola 

random poset generation (docs, error checks) 
4.7.1.alpha3 
Franco Saliola 

add domains for permutation groups 
4.7.2.alpha0 
Author: Mike Hansen 









finitelygenerated abelian groups 
needs work 

Examples
To view a worksheet, click on the "worksheet" link, then in the resulting page find the big blue download box and use your browser's function to copy the link there. Then open your notebook, click the "Upload" link near the upperleft and then paste in the link into the URL field (the second one).
Note: If your version of Sage is 4.3.2 or older then some examples may not render quite right. See way below for how to edit older configurations.
 SageEnhancing an Abstract Algebra Textbook (Updated: 2011/08/10))
Tom Judson's free opensource Abstract Algebra; Theory and Applications
 This project is complete, Sage material and exercises available for most of the chapters
See the book's website to download
 SageEnhancing a Linear Algebra Textbook (Updated: 2011/08/03)
Rob Beezer's A First Course in Linear Algebra
Preview version now at book's website page
 Necessary patches tracked here; by section, on top of 4.7.1.rc1:
 #11535, LI (linear dependence)
 #10791, O (GramSchmidt)
 #10848, MM (hermitian check, merged 4.7.2.alpha1)
 #11595, EE (eigenspaces)
 #11552, #11600, #11553, #11556, LT (linear transformations)
 Approximating Polynomial Worksheet (2010/02/20)
 A classroom worksheet, with interacts
 Nice mix of mathematics and live demonstrations
 PDF could do something better with interacts (hide code, show screenshot?)
 SageTeX integration (Robert Marik, 2010/02/20)
Slightly modified version of the example.tex file from the SageTeX distribution
 All but three graphics coming through, understandably
 Missing 3D tachyon graphic is just a path problem and is fixable
Might be able to do something better with the sagesilent environment such as inserting a %hide at the start of the block
 To recreate this, run the following sequence of commands:
pdflatex example.tex sage example.sage htlatex example.tex "/path/to/tex4htsage.cfg" " cunihtf utf8" tex2sws
For fixed tex4htsage.cfg, tex2sws.py which allows to insert 3D graphics and vertex labels see this link.
 A WholeBook Experiment (2010/02/07)
This is all of Beezer's First Course in Linear Algebra as a linked collection of Sage worksheets. It runs about 900 pages when printed, but as a tar archive is around 700K.
 Details removed, this is now obsolete
tikz graphics migration (2010/02/03, Updated: 2010/02/20)
 tikz graphics in latex source passing through to the worksheet
 combinatorial graphs in Sage creating tikz source, also included
 worksheet has graphics as SVG, live cells, graph editor
 Not all browsers render SVG? Tested in Firefox
Latex source, some generated by Sage
PDF, a faithful rendition
Worksheet, note SVG graphics, run code, experiment with graph editor
This experiment prompted by a mailing list discussion
Group Theory Primer (2010/01/28)
Lots of simple Sage code, some simple mathematics, one interact (search for "@interact")
Best working demo (though it lacks a title)
Worksheet SourceTextbook Section Experiment (2010/01/30, updated 2010/02/07)
This is a straight conversion of a mathheavy section from Beezer's linear algebra text. See note above about jsMath and matrix formatting.
The original tex4ht output is at FCLA Section FS in jsMath which seems to render just fine for me.
 There is no embedded Sage code here yet, but that will be easy to add.
 Links go nowhere unless they are internal to this section.
Linked Worksheets (2010/01/30)
A simple manufactured example of crossworksheet linking. Fire up Sage, then create a new, temporary notebook with the user "link"
sage: from sagenb.notebook.notebook import Notebook sage: nb = Notebook('/tmp/test.sagenb') sage: nb.add_user('link', 'link', '', force=True) sage: nb.save() sage: exit
 At system commandline extract archive (below) to create the worksheets with numbers 0 and 1 in link's space.
$ cd /tmp/test.sagenb/home $ tar xvf <pathto>/linkworksheets.tar.gz
 Fire up Sage to start a notebook session in the temporary notebook:
sage: notebook(directory="/tmp/test.sagenb")
 You may need to create an admin password (do it).
You may see the worksheets, but be logged in as admin.
If needed, be certain to login as "link" with password "link."
 Open worksheet 0, execute a cell or two, find link to worksheet 1.
 Follow link to worksheet 1, execute some cells here too.
 Fire up Sage, then create a new, temporary notebook with the user "link"
tex4ht
This is a list of known configurations of tex4ht that seem to work:
 "tex4ht is part of the standard mactex distribution" (Dana Ernst, 2010/01/29)
 "TeXLive 2009 (separate from Ubuntu package manager) includes its own little package manager ('tlmgr') and I used that to install tex4ht" (Dan Drake, 2010/01/30)
Ubuntu/Kubuntu/Debian: (K)Ubuntu Karmic 2009/05/21, Debian stable 2008/07/01, Debian testing 2009/06/11
From Jason B. Hill (2010/02/24) "texlivefull" depends on tex4ht (and hence will install tex4ht) in Ubuntu/Xubuntu/Kubuntu 9.10.
 "tex4ht" may also be installed directly from the standard Ubuntu repositories via apt/aptitude on top of the smaller "texlivebase/texlivebasebin". This is also true for Debian stable.
 In either case, tex4ht/htlatex/etc commands must be added manually at this point to Kile, or can be called directly from the terminal.
Related Project
sws2tex, Example
Anybody want to try for the roundtrip, Latex > SWS > Latex?
jsMath Safe Boxes Edit
For Sage versions prior to 4.3.3.alpha0 (sagenb prior to 0.7.5) it is necessary to slightly tweak the jsMath configuration in Sage. It is a onecharacter edit. You can still view the sections, but "reasons" given in math displays (generally in proofs) won't render right and you will see lots of "@a()" stuff. This was fixed in Trac 8202 for Sage 4.3.3. Check your version of Sage with sage version.
The file to edit is
SAGE_ROOT/local/lib/python/sitepackages/sagenb0.6py2.6.egg/sagenb/data/sage/js/jsMath.js
where you might have to adjust the numbering on the sagenb package. Then at line 97 (or thereabouts) make the following change
jsMath.safeHBoxes=1 > jsMath.safeHBoxes=0