昔者荘周夢に胡蝶と為る。栩栩然として胡蝶なり。
自ら喩しみて志に適えるかな。周たるを知らざるなり。 俄然として覚むれば、則ちまぎれもなく周なり。
知らず、周の夢に胡蝶と為れるか、胡蝶の夢に周と為れるかを。
周と胡蝶とは、則ち必ず分有らん。此を之れ物化と謂う。
それは胡蝶の夢だろ、というツッコミを期待しつつ、PythonTeXでフラクタルの一種である王様の夢を書いてみる。正確にはPythonとPILで王様の夢を書き、それをLaTeXの文章に埋め込むという流れを一発で行う。
細かいことはともかく次のLaTeXファイルをPythonTeXで処理すればよい。
\documentclass[a4j]{jsarticle} \usepackage{amsmath,amssymb} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage{lmodern} \usepackage[dvipdfmx]{graphicx} \usepackage[makestderr]{pythontex} \restartpythontexsession{\thesection} \usepackage[framemethod=TikZ]{mdframed} \begin{document} \title{PythonTeX で王様の夢を紡ぐ} \author{Xaro} \date{\today} \maketitle \begin{equation*} \begin{split} &f: \mathbb{R}^{2} \ni (x, y) \mapsto (\sin(by) + c\sin(bx), \sin(ax) + d\sin(ay)) \in \mathbb{R}^{2}, \\ &\text{where}\;a = -0.966918, b = 2.879879, c = 0.765145\; \text{and}\; d = 0.744728. \end{split} \end{equation*} \begin{pycode} # -*- coding: UTF-8 -*- from math import sin from PIL import Image from PIL import ImageDraw def drawing(img): xsize,ysize = img.size a = -0.966918 b = 2.879879 c = 0.765145 d = 0.744728 oldx = 0.1 oldy = 0.1 draw = ImageDraw.Draw(img) for i in range(pow(10,5)): newx = sin(oldy*b) + c*sin(oldx*b) newy = sin(oldx*a) + d*sin(oldy*a) oldx = newx oldy = newy draw.point( (oldx * 180 + xsize // 2, oldy * 200 + ysize // 2), (0xff,0xff,0xff) ) return img def make_image(screen, bgcolor, filename): img = Image.new('RGB', screen, bgcolor) img = drawing(img) img.save(filename) if __name__ == '__main__': # 画像のサイズ screen = (800,600) # 画像の背景色(RGB) bgcolor=(0x00,0x00,0x00) # 保存するファイル名(ファイル形式は、拡張子から自動的に判別する) filename = "kings3.pdf" make_image(screen, bgcolor, filename) \end{pycode} \begin{figure}[h] \centering \includegraphics[width=12cm, clip]{kings3.pdf} \caption{King's Dream} \end{figure} \end{document}
なお処理方法は
$ platex -kanji=utf8 -interaction=nonstopmode kingsdream.tex $ pythontex kingsdream.tex $ platex -kanji=utf8 kingsdream.tex $ dvipdfmx kingsdream.dvi
である。
なお -interaction=nonstopmode はエラーを無視するオプションなので気をつけること。
上手くいけばこのようなPDFファイルが作成できるはずである。
様々なところから引用したのを自分の記事にするのは気が引けるが引用元を提示することで免じてもらいたい。
王様の夢自体はAmazon.co.jp: Chaos in Wonderland: Visual Adventures in a Fractal World: Clifford A. Pickover: 洋書
王様の夢のプログラムはMike Hewner's Homepage » Blog Archive » Making Simple Fractals in R
PILの部分はPIL(Python Imaging Library)で、点を描画するサンプル。 - Qiita [キータ]
胡蝶の夢はAmazon.co.jp: 荘子 内篇 (講談社学術文庫): 福永 光司: 本
オリジナリティがあるとすればPythonTeXでマンデルブロ集合やジュリア集合以外のフラクタルを書こうと思い立ったことぐらいである。