tags. Example:
y^2=x^2+\alpha^2 here.
The script extracts the equations, creates a temporary LaTeX document,
compiles it, saves the equations as images and replaces the original markup
with images.
Usage:
python eqhtml.py source dest
Process source and save result in dest. Note that no error checking is
performed.
"""
from elementtree import ElementTree as et
import os, sys
# Include your favourite LaTeX packages and commands here
tex_preamble = r'''
\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{amssymb}
\usepackage{bm}
\newcommand{\mx}[1]{\mathbf{\bm{#1}}} % Matrix command
\newcommand{\vc}[1]{\mathbf{\bm{#1}}} % Vector command
\newcommand{\T}{\text{T}} % Transpose
\pagestyle{empty}
\begin{document}
'''
imgpath = '' # path to generated equations. e.q 'img/'
# get source and dest filenames from command line
sourcefn = sys.argv[1]
destfn = sys.argv[2]
sourcefn_base = os.path.splitext(os.path.basename(sourcefn))[0]
# change working directory to the same as source's
cwd = os.getcwd()
os.chdir(os.path.abspath(os.path.dirname(sourcefn)))
sourcefn = os.path.basename(sourcefn)
texfn = sourcefn_base+'.tex'
print "Processing %s" % sourcefn
# load and parse source document
f = open(sourcefn)
xhtmltree = et.parse(f)
f.close()
# find all elements with attribute class='eq'
eqs = [element for element in xhtmltree.getiterator()
if element.get('class','')=='eq']
# equations are now available in the eqs[..].text variable
# create a LaTeX document and insert equations
f = open(texfn,'w')
f.write(tex_preamble)
counter = 1
for eq in eqs:
if eq.tag == 'span': # inline equation
f.write("$%s$ \n \\newpage \n" % eq.text)
else:
f.write("\\[\n%s \n\\] \n \\newpage \n" % eq.text)
# delete LaTeX code from the document tree, and replace
# them by image urls.
del eq.text
imgname = "%seq%s%i.png" % (imgpath,sourcefn_base, counter)
et.SubElement(eq,'img',src=imgname, alt='')
counter += 1
# end LaTeX document
f.write('\end{document}')
f.close()
# compile LaTeX document. A DVI file is created
os.system('latex %s' % texfn)
# Run dvipng on the generated DVI file. Use tight bounding box.
# Magnification is set to 1200
cmd = "dvipng -T tight -x 1200 -z 9 -bg transparent " \
+ "-o %seq%s%%d.png %s" % (imgpath , sourcefn_base, sourcefn_base)
os.system(cmd)
# Remove temporary files
os.remove(sourcefn_base+'.tex')
os.remove(sourcefn_base+'.log')
os.remove(sourcefn_base+'.aux')
os.remove(sourcefn_base+'.dvi')
os.chdir(cwd)
# Write processed source document to dest
xhtmltree.write(destfn)
print "Done."