# 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 book-length Latex document to a collection of Sage worksheets. These could have embedded Sage input cells, possibly containing interacts, and the cross-referencing features of Latex would be preserved in the collection of Sage worksheets.
Rob Beezer, beezer@ups.edu, rbeezer on #sage-devel IRC

Supported by

• University Puget Sound Lantz Senior Fellowship (AY 2010-11)
• National Science Foundation DUE-1022574 (2010-2013)

## Conversion Software

Mercurial Repository @BitBucket
Clone using:

`hg clone https://rbeezer@bitbucket.org/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.

## Abstract Algebra Patches

 Ticket Description Status Acknowledgements dicyclic groups 4.2.1.alpha0 David Joyner Higman-Sims 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 finitely-generated 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 upper-left 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.

• Sage-Enhancing an Abstract Algebra Textbook (Updated: 2011/08/10))
• Sage-Enhancing 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 (Gram-Schmidt)
• #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 re-create this, run the following sequence of commands:
```pdflatex example.tex
sage example.sage
htlatex example.tex "/path/to/tex4ht-sage.cfg" " -cunihtf -utf8"
tex2sws```
• For fixed tex4ht-sage.cfg, tex2sws.py which allows to insert 3D graphics and vertex labels see this link.

• A Whole-Book 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 Source

• Textbook Section Experiment (2010/01/30, updated 2010/02/07)
This is a straight conversion of a math-heavy 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.
A simple manufactured example of cross-worksheet 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.save()
sage: exit```
• At system command-line extract archive (below) to create the worksheets with numbers 0 and 1 in link's space.
```\$ cd /tmp/test.sagenb/home
• Fire up Sage to start a notebook session in the temporary notebook:
`sage: notebook(directory="/tmp/test.sagenb")`

You may see the worksheets, but be logged in as admin.

• Open worksheet 0, execute a cell or two, find link to worksheet 1.

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

• "texlive-full" 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 "texlive-base/texlive-base-bin". 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.

sws2tex, Example
Anybody want to try for the round-trip, 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 one-character 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/site-packages/sagenb-0.6-py2.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`

devel/LatexToWorksheet (last edited 2011-12-14 03:50:48 by rbeezer)