この記事はhttp://tug.org/tug2013/program.html:=TUG 2013のプログラムでPythonTeXという言葉を見かけてしまった故の記録である。
PythonTeXとはLaTeXドキュメントの中に埋め込んだPythonソースを実行してその結果をLaTeXドキュメントに埋め込むためのパッケージである、らしい(英語に自信がない)。
英語がちゃんと読めて計算機を自由自在に扱える人はこんな拙い記事を読まずに今すぐCTANのミラーサイトに飛んでPythonTeXを探して各自ドキュメントを読み込んで欲しい。そしてまともな日本語解説記事を書いて欲しい(願望)。
以下はPythonTeXの拙い紹介をして、日本人に興味を持ってもらってまともな日本語の記事が増えることを期待して書くことにする。今のところGoogle先生に尋ねても日本語のページはほとんどない。特に使い方に日本語で言及したものは無かった。
追記(2013/09/16)
PythonTeX を使う導入を書いてくだった方がおられる - http://t.co/oi1GaIgHuz PythonTeX はここ数日の間にTeX Liveに取り込まれたので,tlmgrでアップデートするとインストールの手間はほとんどなくなったと思います.
— kuroky (@kuroky_plus) September 15, 2013
を参考に以下を書き換えました。kurokyこと黒木先生ありがとうございます。
追記(2013/10/06)TeXLive2013とPythonTeXを入れた | The Coherence World
こういうのを待っていたんだ!!!
- まず、TeX Liveを最新の状態に更新する。やり方は簡単で
tlmgr --self --all update
と唱えればよい。
- Python環境はPythonの日本語サイト参照してインストール。PythonTeXはPythonのバージョンが2.7及び3.2以上で動作するようである。
- Pygmentsをインストールする。easy_installが使えるならば
easy_install pygments
が一番簡単。easy_installが無い場合はGoogle先生に尋ねたほうが早い。
- 次のようなLaTeXファイルを作成する(名前はsample-pi.texとしておく)。sample-pi.texは円周率1万桁を出力するものである。ここで円周率の計算のためのPythonコードは円周率を求める - Pythonを書くを引用した。
\documentclass[a4j]{jsarticle} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage{lmodern} \usepackage[makestderr]{pythontex} \restartpythontexsession{\thesection} \usepackage[framemethod=TikZ]{mdframed} \title{$\pi$} \author{Xaro} \date{} \begin{document} \maketitle \begin{pycode} # -*- coding: utf-8 -*- import math import random import textwrap def arctan(p, n): x = p//n nn = n*n c = 1 s = x k = 1 while x > 0: x //= nn k += 2 c = -c s += c*(x//k) return s def pi_mantissa(digit, redund=10): p = 10**digit q = 10**redund p *= q pi = 4*(12*arctan(p,18)+8*arctan(p,57)-5*arctan(p,239)) pi //= q return pi pi = textwrap.wrap(str(pi_mantissa(10000, redund=10)), width=70) for x in pi: print(x+"\n") \end{pycode} \end{document}
理屈としては、pycode環境にPythonコードを入れることにより、最終的にはそこにPythonコードの実行結果が入る。また、pyconsole環境でコンソール入出力、\py{2 + 4**2}でステイトメントの実行結果が埋め込めるようである。詳しくは同梱のマニュアル(英語)のうちpythontex_quickstart.pdfを参照したほうが早い。
- 次のコマンドを実行する
platex -kanji=utf8 sample-pi.tex pythontex sample-pi.tex platex -kanji=utf8 sample-pi.tex dvipdfmx sample-pi.dvi
仕組みとしては、1回目の(p)latexでPythonで走らせたいコードを生成し、それをpythontex.pyで実行し埋め込むための準備をし、2回目の(p)latexで埋め込む。最後のdvipdfmxは本質的な作業でないことに注意。またpdftex, XeTeX, LuaTeXでも動作する(らしい)。
- 上手くいけばのようなPDFファイルが生成されるはず。
英語が出来ないと辛い世の中である。