何かを書き留める何か

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

PythonTeXとMatplotlib

今回はMatplotlibで作成したグラフをPythonTeXに半自動的にLaTeXドキュメントに埋め込む方法を説明する。何故半自動なのかは察してください。
なおPythonTeXに関しては
PythonTeXで遊ぶ - 何かを書き留める何か
に拙い解説がある。なおMatplotlib自体の解説はありません。Google先生にお尋ねください。

  • とりあえず以下のファイルを作成する。名前はmatsample.texとする。

なお1から9までの整数をランダムに重複を許して10個選び、それを折れ線グラフでプロットするものである。

\documentclass[a4j]{jsarticle}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage[dvipdfmx]{graphicx}

\usepackage[makestderr]{pythontex}
\restartpythontexsession{\thesection}

\usepackage[framemethod=TikZ]{mdframed}

\begin{document}
\begin{pycode}
# -*- coding: UTF-8 -*-
import random
import numpy
import pylab

x = [random.randint(1,9) for x in range(10)]

pylab.plot(x)
pylab.savefig('myplot.pdf', bbox_inches='tight')
\end{pycode}
\begin{figure}
\centering
\includegraphics{myplot.pdf}
\caption{Sample}
\label{sample}
\end{figure}
\end{document}
  • 次のコマンドを実行する。
@echo off
platex -kanji=utf8  matsample.tex
pythontex matsample.tex
platex -kanji=utf8 matsample.tex
dvipdfmx matsample.dvi

1回目のplatexを実行するとmyplot.pdfが存在しないと怒られるがEnterを打鍵して無視する。これが半自動の所以である。全自動にしたい場合は

platex -interaction=nonstopmode -kanji=utf8 matsample.tex

とすればエラーを無視してくれるがその他のエラーも無視してしまうため、渡さずに実行したほうが不毛なデバッグに悩まされずに済むと思う。

  • 上手くいけば、次のようなPDFが得られるはずである。

f:id:XaroCydeykn:20130916155122j:plain

PythonTeXとMatplotlibの連携が上手くいけばドキュメントや論文の作成が捗るのではないだろうか。
残念ながら、私は(今のところ)使う機会は少なそうである。