TeX & LaTeX Advent Calendar 2013のために書かれた記事です。
<12月4日:senopen||12月6日:Xaro Cydeykn>
1つのTeXファイルからは普通1つのdviファイルまたはpdfファイルが作成される。今回はPythonTeXを駆使してその常識をぶち破ることを試みる。ファイル名をTeXAdvent.texとする。(2013年12月08日追記:コメントに従って一部修正しました。)
\documentclass{ltjsarticle} \usepackage{amsmath} \usepackage{lmodern} \usepackage[ipaex]{luatexja-preset} \usepackage{luatexja-otf} \usepackage[makestderr]{pythontex} \begin{pycode} import os TeXmas = r""" \documentclass{ltjsarticle} \usepackage{amsmath} \usepackage{lmodern} \usepackage[ipaex]{luatexja-preset} \usepackage{luatexja-otf} \begin{document} 日本で漱石が「吾輩は猫である」を発表したころ, ドイツでは Albert Einstein が特殊相対論を発表した。 この理論によれば,エネルギー $E$ と質量 $m$ は \begin{equation} E = mc^{2} \end{equation} で関係づけられる。ここに $c$ は光速で, \begin{equation} c = 299{,}792{,}458 \, \mathrm{m/s} \end{equation} である。 \end{document} """ # ディレクトリの作成 try: os.mkdir("./testdir") except FileExistsError: pass # TeXファイルの作成 os.chdir("./testdir") with open("./MerryTeXmas.tex", 'w', buffering=1, encoding="UTF-8",) as f: f.write(TeXmas) #f.close() with文なので不要 # pdfTeXの実行 os.system(r"lualatex MerryTeXmas.tex") \end{pycode} \begin{document} TeX \& LaTeX Advent Calendar 2013 ! \begin{equation} \frac{\pi}{2} = \left( \int_{0}^{\infty} \frac{\sin x}{\sqrt{x}} dx \right)^2 = \sum_{k=0}^{\infty} \frac{(2k)!}{2^{2k}(k!)^2} \frac{1}{2k+1} = \prod_{k=1}^{\infty} \frac{4k^2}{4k^2 - 1} \end{equation} \end{document}
後はいつも通り
$ platex TeXAdvent.tex $ pythontex TeXAdvent.tex
のように実行すると不思議な*1ことに1つのファイルからpdfファイルが2つ生成される。ちなみに2つめのpdfファイルはTeXAdvent.texのあるディレクトリにあるはずのPythonTeXのフォルダ内にある。なんの役に立つのか、例えばテストを組版するときに解答ありとなしを同時に組版で出来る(しかも計算もSymPyにやらせることも可能!)というメリットが存在する可能性がある*2ので、きっといつか誰かの役に立つと思いたい。
この例から分かることとして
- LuaLaTeXでもPythonTeXは動作する(pdfLaTeX、XeLaTeXでも動作するはず)
- PythonTeXを使用した際のホームディレクトリはそのTeXファイルのあるディレクトリに作成される。
- os.system("command") で任意のコマンドが実行できてしまうので考え無しに実行するのは危険
がある。
なお、上記の例ではLuaLaTeXを用いている。導入方法の例として手前味噌ではあるが電通大生のためのLuaLaTeX -UEC Advent Calendar 2013- - 何かを書き留める何かを参照して欲しい。