# Converts a TeX file into a PNG/SVG file. template = r""" \documentclass{{standalone}} \usepackage{{amsmath}} % TODO: Add user packages here. \begin{{document}} % The user content goes here. {content} \end{{document}} """ def render(user: str, source: str, png: bool = True) -> str: import tempfile import subprocess fmt = template.format(content=source) tmp = tempfile.NamedTemporaryFile(delete=False) print(tmp.name) tmp.write(bytes(fmt, encoding="utf8")) tmp.close() # Parse our templated file thru' LaTeX and dvipng. # TODO: Allow arbitrary DPI and foreground color. subprocess.run(["latex", tmp.name], cwd="/tmp") if png: print("PNG") subprocess.run(["dvipng", "-D", "1000", tmp.name + ".dvi", "-bg", "Transparent", "-fg", "rgb .75 .75 .75", "-o", tmp.name + ".png"], cwd="/tmp") return tmp.name + ".png" # TODO: raise NotImplementedError("SVG support is not currently implemented")