Source code for scisalt.matplotlib.latexfig
import os
import shutil
import shlex
import subprocess
[docs]def latexfig(textstr, filename, environment='align*', env_curly=None):
# ======================================
# Validate Extension
# ======================================
split = os.path.splitext(filename)
if split[1] != '.pdf':
raise IOError('Final filename must have extension ''pdf'', requested: {}'.format(filename))
# ======================================
# Get final destination
# ======================================
final_path = os.path.abspath(filename)
try:
os.mkdir(os.path.dirname(final_path))
except OSError as e:
if e.errno != 17:
raise
# ======================================
# Get current directory
# ======================================
cwd = os.getcwdu()
# ======================================
# Create info to write
# ======================================
template = r'''
\documentclass[10pt]{{article}}
\usepackage{{amssymb, amsmath, booktabs, multirow}}
\pagestyle{{empty}}
\begin{{document}}
\begin{{{environment}}}{env_curly}
{textstr}
\end{{{environment}}}
\end{{document}}
'''
if env_curly is not None:
env_curly = '{{{}}}'.format(env_curly)
else:
env_curly = ''
fullwrite = template.format(textstr=textstr, environment=environment, env_curly=env_curly)
# ======================================
# Get file names for intermediate files
# ======================================
tempdir = 'temp_latex'
tempfile = 'temp.tex'
split = os.path.splitext(tempfile)
pdffile = '{}.{}'.format(split[0], 'pdf')
cropfile = '{}-crop.{}'.format(split[0], 'pdf')
# ======================================
# Delete and remake temp directory
# ======================================
try:
shutil.rmtree(tempdir)
except OSError as e:
if e.errno is not 2:
raise
os.mkdir(tempdir)
# ======================================
# Create temporary file
# ======================================
f = open(os.path.join(tempdir, tempfile), 'w+')
f.write(fullwrite)
f.close()
# ======================================
# Compile figure
# ======================================
os.chdir(tempdir)
command = 'latexmk {} -pdf'.format(tempfile)
args = shlex.split(command)
subprocess.call(args)
command = 'pdfcrop {} {}'.format(pdffile, cropfile)
args = shlex.split(command)
subprocess.call(args)
# ======================================
# Move figure to correct location
# ======================================
shutil.move(cropfile, final_path)
# ======================================
# Clean up
# ======================================
os.chdir(cwd)
shutil.rmtree(tempdir)