読者です 読者をやめる 読者になる 読者になる

何かを書き留める何か

数学や読んだ本について書く何かです。最近は社会人として生き残りの術を学ぶ日々です。

PythonTeXで遊ぶ

この記事はhttp://tug.org/tug2013/program.html:=TUG 2013のプログラムでPythonTeXという言葉を見かけてしまった故の記録である。


PythonTeXとはLaTeXドキュメントの中に埋め込んだPythonソースを実行してその結果をLaTeXドキュメントに埋め込むためのパッケージである、らしい(英語に自信がない)。
英語がちゃんと読めて計算機を自由自在に扱える人はこんな拙い記事を読まずに今すぐCTANのミラーサイトに飛んでPythonTeXを探して各自ドキュメントを読み込んで欲しい。そしてまともな日本語解説記事を書いて欲しい(願望)。

以下はPythonTeXの拙い紹介をして、日本人に興味を持ってもらってまともな日本語の記事が増えることを期待して書くことにする。今のところGoogle先生に尋ねても日本語のページはほとんどない。特に使い方に日本語で言及したものは無かった。

追記(2013/09/16)


を参考に以下を書き換えました。kurokyこと黒木先生ありがとうございます。

追記(2013/10/06)TeXLive2013とPythonTeXを入れた | The Coherence World
こういうのを待っていたんだ!!!

  • まず、TeX Liveを最新の状態に更新する。やり方は簡単で
tlmgr --self --all update

と唱えればよい。

  • Pygmentsをインストールする。easy_installが使えるならば
easy_install pygments

が一番簡単。easy_installが無い場合はGoogle先生に尋ねたほうが早い。

\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)latexPythonで走らせたいコードを生成し、それをpythontex.pyで実行し埋め込むための準備をし、2回目の(p)latexで埋め込む。最後のdvipdfmxは本質的な作業でないことに注意。またpdftex, XeTeX, LuaTeXでも動作する(らしい)。

  • 上手くいけばf:id:XaroCydeykn:20130915153129j:plainのようなPDFファイルが生成されるはず。

英語が出来ないと辛い世の中である。