latex improvements

- move latex preamble into a deck var and include amsmath by default
- include the pre/postamble in the hash, so changes to the preamble result in
  newly generated images
This commit is contained in:
Damien Elmes 2010-12-11 02:05:00 +09:00
parent b0f300bb74
commit 70eb44bce2
2 changed files with 16 additions and 13 deletions

View file

@ -164,7 +164,7 @@ class Deck(object):
self.lastSessionStart = 0
self.queueLimit = 200
# if most recent deck var not defined, make sure defaults are set
if not self.s.scalar("select 1 from deckVars where key = 'mediaURL'"):
if not self.s.scalar("select 1 from deckVars where key = 'latexPost'"):
self.setVarDefault("suspendLeeches", True)
self.setVarDefault("leechFails", 16)
self.setVarDefault("perDay", True)
@ -174,6 +174,14 @@ class Deck(object):
self.setVarDefault("revInactive", self.suspended)
self.setVarDefault("newSpacing", 60)
self.setVarDefault("mediaURL", "")
self.setVarDefault("latexPre", (
"\\documentclass[12pt]{article}\n"
"\\special{papersize=3in,5in}"
"\\usepackage[utf8]{inputenc}"
"\\usepackage{amssymb,amsmath}"
"\\pagestyle{empty}\n"
"\\begin{document}"))
self.setVarDefault("latexPost", "\\end{document}")
self.updateCutoff()
self.setupStandardScheduler()

View file

@ -13,12 +13,6 @@ from anki.utils import genID, checksum, call
from anki.hooks import addHook
from htmlentitydefs import entitydefs
latexPreamble = ("\\documentclass[12pt]{article}\n"
"\\special{papersize=3in,5in}"
"\\usepackage[utf8]{inputenc}"
"\\pagestyle{empty}\n"
"\\begin{document}")
latexPostamble = "\\end{document}"
latexDviPngCmd = ["dvipng", "-D", "200", "-T", "tight"]
regexps = {
@ -61,22 +55,23 @@ def latexImgFile(deck, latexCode):
key = checksum(latexCode)
return "latex-%s.png" % key
def mungeLatex(latex):
"Convert entities, fix newlines, and convert to utf8."
def mungeLatex(deck, latex):
"Convert entities, fix newlines, convert to utf8, and wrap pre/postamble."
for match in re.compile("&([a-z]+);", re.IGNORECASE).finditer(latex):
if match.group(1) in entitydefs:
latex = latex.replace(match.group(), entitydefs[match.group(1)])
latex = re.sub("<br( /)?>", "\n", latex)
latex = latex.encode("utf-8")
latex = (deck.getVar("latexPre") + "\n" +
latex + "\n" +
deck.getVar("latexPost"))
return latex
def buildImg(deck, latex):
log = open(os.path.join(tmpdir, "latex_log.txt"), "w+")
texpath = os.path.join(tmpdir, "tmp.tex")
texfile = file(texpath, "w")
texfile.write(latexPreamble + "\n")
texfile.write(latex + "\n")
texfile.write(latexPostamble + "\n")
texfile.write(latex)
texfile.close()
# make sure we have a valid mediaDir
mdir = deck.mediaDir(create=True)
@ -125,7 +120,7 @@ def imageForLatex(deck, latex, build=True):
def imgLink(deck, latex, build=True):
"Parse LATEX and return a HTML image representing the output."
latex = mungeLatex(latex)
latex = mungeLatex(deck, latex)
(ok, img) = imageForLatex(deck, latex, build)
if ok:
return '<img src="%s">' % img