mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 22:42:25 -04:00
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:
parent
b0f300bb74
commit
70eb44bce2
2 changed files with 16 additions and 13 deletions
10
anki/deck.py
10
anki/deck.py
|
@ -164,7 +164,7 @@ class Deck(object):
|
||||||
self.lastSessionStart = 0
|
self.lastSessionStart = 0
|
||||||
self.queueLimit = 200
|
self.queueLimit = 200
|
||||||
# if most recent deck var not defined, make sure defaults are set
|
# 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("suspendLeeches", True)
|
||||||
self.setVarDefault("leechFails", 16)
|
self.setVarDefault("leechFails", 16)
|
||||||
self.setVarDefault("perDay", True)
|
self.setVarDefault("perDay", True)
|
||||||
|
@ -174,6 +174,14 @@ class Deck(object):
|
||||||
self.setVarDefault("revInactive", self.suspended)
|
self.setVarDefault("revInactive", self.suspended)
|
||||||
self.setVarDefault("newSpacing", 60)
|
self.setVarDefault("newSpacing", 60)
|
||||||
self.setVarDefault("mediaURL", "")
|
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.updateCutoff()
|
||||||
self.setupStandardScheduler()
|
self.setupStandardScheduler()
|
||||||
|
|
||||||
|
|
|
@ -13,12 +13,6 @@ from anki.utils import genID, checksum, call
|
||||||
from anki.hooks import addHook
|
from anki.hooks import addHook
|
||||||
from htmlentitydefs import entitydefs
|
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"]
|
latexDviPngCmd = ["dvipng", "-D", "200", "-T", "tight"]
|
||||||
|
|
||||||
regexps = {
|
regexps = {
|
||||||
|
@ -61,22 +55,23 @@ def latexImgFile(deck, latexCode):
|
||||||
key = checksum(latexCode)
|
key = checksum(latexCode)
|
||||||
return "latex-%s.png" % key
|
return "latex-%s.png" % key
|
||||||
|
|
||||||
def mungeLatex(latex):
|
def mungeLatex(deck, latex):
|
||||||
"Convert entities, fix newlines, and convert to utf8."
|
"Convert entities, fix newlines, convert to utf8, and wrap pre/postamble."
|
||||||
for match in re.compile("&([a-z]+);", re.IGNORECASE).finditer(latex):
|
for match in re.compile("&([a-z]+);", re.IGNORECASE).finditer(latex):
|
||||||
if match.group(1) in entitydefs:
|
if match.group(1) in entitydefs:
|
||||||
latex = latex.replace(match.group(), entitydefs[match.group(1)])
|
latex = latex.replace(match.group(), entitydefs[match.group(1)])
|
||||||
latex = re.sub("<br( /)?>", "\n", latex)
|
latex = re.sub("<br( /)?>", "\n", latex)
|
||||||
latex = latex.encode("utf-8")
|
latex = latex.encode("utf-8")
|
||||||
|
latex = (deck.getVar("latexPre") + "\n" +
|
||||||
|
latex + "\n" +
|
||||||
|
deck.getVar("latexPost"))
|
||||||
return latex
|
return latex
|
||||||
|
|
||||||
def buildImg(deck, latex):
|
def buildImg(deck, latex):
|
||||||
log = open(os.path.join(tmpdir, "latex_log.txt"), "w+")
|
log = open(os.path.join(tmpdir, "latex_log.txt"), "w+")
|
||||||
texpath = os.path.join(tmpdir, "tmp.tex")
|
texpath = os.path.join(tmpdir, "tmp.tex")
|
||||||
texfile = file(texpath, "w")
|
texfile = file(texpath, "w")
|
||||||
texfile.write(latexPreamble + "\n")
|
texfile.write(latex)
|
||||||
texfile.write(latex + "\n")
|
|
||||||
texfile.write(latexPostamble + "\n")
|
|
||||||
texfile.close()
|
texfile.close()
|
||||||
# make sure we have a valid mediaDir
|
# make sure we have a valid mediaDir
|
||||||
mdir = deck.mediaDir(create=True)
|
mdir = deck.mediaDir(create=True)
|
||||||
|
@ -125,7 +120,7 @@ def imageForLatex(deck, latex, build=True):
|
||||||
|
|
||||||
def imgLink(deck, latex, build=True):
|
def imgLink(deck, latex, build=True):
|
||||||
"Parse LATEX and return a HTML image representing the output."
|
"Parse LATEX and return a HTML image representing the output."
|
||||||
latex = mungeLatex(latex)
|
latex = mungeLatex(deck, latex)
|
||||||
(ok, img) = imageForLatex(deck, latex, build)
|
(ok, img) = imageForLatex(deck, latex, build)
|
||||||
if ok:
|
if ok:
|
||||||
return '<img src="%s">' % img
|
return '<img src="%s">' % img
|
||||||
|
|
Loading…
Reference in a new issue