понедельник, 21 ноября 2016 г.

latex math to png

import getopt
import os
import subprocess
import sys
import tempfile


def __build_preamble():
    preamble = '\documentclass[a4paper, 12pt]{article}\n'
    preamble += \
"""
\usepackage[unicode]{hyperref}
\usepackage{mathtext}
\usepackage[T1, T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english, russian]{babel}
\\vskip 0.5 cm
\pagestyle{empty}
"""
    preamble += "\\begin{document}\n"
    return preamble

def math2png(eqs, outdir, prefix = '', size = 1):
    # Set the working directory
    workdir = tempfile.gettempdir()
    # Get a temporary file
    fd, texfile = tempfile.mkstemp('.tex', 'eq', workdir, True)
    # Create the TeX document
    with os.fdopen(fd, 'w+') as f:
        f.write(__build_preamble())
        for eq in eqs:
            f.write("$%s$\n" % eq.strip())
        f.write('\end{document}')

    f.close()

    # Generate the DVI file
    latexcmd = 'latex -halt-on-error -output-directory %s %s' % (workdir, texfile)
    _run(latexcmd.split())
    # Convert the DVI file to PNG's
    dvifile = texfile.replace('.tex', '.dvi')
    outprefix = os.path.join(outdir, prefix)
    dvicmd = "dvipng -T tight -x %i -z 9 -bg Transparent "\
            "-o %s%%d.png %s" % (size * 1000, outprefix, dvifile)
    _run(dvicmd.split())

def _run(cmd):
    env = os.environ.copy()
    env.update(dict(
        LANG='ru_RU.UTF-8',
        LC_CTYPE='ru_RU.UTF-8',
        HOME='/root',
    ))
    subprocess.Popen(
        cmd,
        env=env,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
    ).communicate()

Комментариев нет:

Отправить комментарий