From 70eb44bce2ff0fd06c28d656d0def78e0a68f00b Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sat, 11 Dec 2010 02:05:00 +0900 Subject: [PATCH] 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 --- anki/deck.py | 10 +++++++++- anki/latex.py | 19 +++++++------------ 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/anki/deck.py b/anki/deck.py index 33d9e2d06..6fcbfd44b 100644 --- a/anki/deck.py +++ b/anki/deck.py @@ -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() diff --git a/anki/latex.py b/anki/latex.py index 0a13d304f..c30eef47b 100644 --- a/anki/latex.py +++ b/anki/latex.py @@ -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("", "\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