2013年6月9日日曜日

[Python]TeX の数式を png に出力するスクリプト

[TeX] 数式文字列を png ファイルにして出力する の手順を python スクリプトで実行できるようにする。
# -*- coding:utf-8 -*-
import os
import optparse

########################################################################
## Check options
########################################################################
def checkOption(opt):
 if opt == None:
  parser.print_help()
  exit()

skeleton = """
\\documentclass[11pt,a4paper]{report}
\\pagestyle{empty}
\\begin{document}
\\%s{$%s$}
\\end{document}
"""

parser = optparse.OptionParser()
parser.add_option("-t", "--tex", dest="tex", help="tex format", metavar="[TEX]")
parser.add_option("-s", "--size", dest="size", help="Font size (0-9)", default="4", metavar="[SIZE]")
parser.add_option("-o", "--output", dest="out", help="output file name prefix", metavar="[OUT]")
(options, args) = parser.parse_args()
checkOption(options.tex)
checkOption(options.size)
checkOption(options.out)

print "tex   : %s" % (options.tex)
print "size  : %s" % (options.size)
print "output: %s" % (options.out)

# フォントサイズを決める
if options.size == "0":
 fontsize = "tiny"
elif options.size == "1":
 fontsize = "scriptsize"
elif options.size == "2":
 fontsize = "footnotesize"
elif options.size == "3":
 fontsize = "small"
elif options.size == "4":
 fontsize = "normalsize"
elif options.size == "5":
 fontsize = "large"
elif options.size == "6":
 fontsize = "Large"
elif options.size == "7":
 fontsize = "LARGE"
elif options.size == "8":
 fontsize = "huge"
elif options.size == "9":
 fontsize = "Huge"
else:
 fontsize = "normalsize"

texdata = skeleton % (fontsize, options.tex)
print texdata

outputBase = options.out
texFilename = outputBase + ".tex"
dviFilename = outputBase + ".dvi"
pngFilename = outputBase + ".png"

fd = open(texFilename, "w")
fd.write(texdata)
fd.close()

os.system("platex %s" % (texFilename))
os.system("dvipng %s -o %s -T tight" % (dviFilename, pngFilename))

print "Remove temporary files"
print " %s, %s, %s, %s" % (texFilename, dviFilename, outputBase + ".log", outputBase + "aux")
os.remove(texFilename)
os.remove(dviFilename)
os.remove(outputBase + ".log")
os.remove(outputBase + ".aux")

実行結果
python tex2png.py -t "y=ax^{2}" -o y_ax2
python tex2png.py -t "y=ax^{2}" -s 1 -o y_ax2_1
python tex2png.py -t "y=ax^{2}" -s 9 -o y_ax2_9

0 件のコメント:

コメントを投稿