動機
PythonTexの理由
実験に pythhon を使っている場合のみの話ですが、データが python で読み込めると思います。その上で、pdfを作ろうとした時に以下のようなことを自動化できたらいいなあと思いました。
- 数式の自動生成
- データの具体例などの提示
- 表の作成
- (図の挿入)
最後の図に関しては、図に影響するパラメータが変更する率が高い時やパラメータだけを変えた同じような図を幾つか使う時に有効だと思うので正直、、、。
※ pythonの実行とtexのコンパイル
tex のコンパイルの度に python が実行されることになるので、1文字推敲しただけで挿入する図までまた再生成することは、、、。( platex 、 dvipdfmx や pythontex などのコマンドをビルドスクリプトにまとめて実行している場合)
Texpadの理由
Texpad · Smoothest way to write LaTeX
有料ですが、お試しで2週間?使えます。
なぜ、Texpad なのかというと友達に紹介されて使ってみたかったです。有料も含め、 tex 用のエディターを検討中です。(今のところ TexShop か atomでgulpとか書いて頑張るか。参考)
導入
PythonTexのインストール
私は El Capitan で /usr/textbin フォルダが作れなくなってしまったので、こちらを参考にしたのですが、 TexLive に最初から PythonTex が入っています。
また、Pygmentsモジュールが必要なので
pip install pygments
します。
また、Texpadの環境設定のディストリビューションタブにMacTexをダウンロードボタンもあります。
Texpadのタイプセット
TexPad では以下のように選択できます。
また、 .tpbuildスクリプトを使用 にチェックを入れることでプロジェクトフォルダ以下のビルドスクリプトを bashで実行できます。
※ bib
参考文献 にチェックを入れれば、 biber とかもやってくれるみたいです。
私はまだ論文を書いたことがないので、 bib による管理がいまいちわかっておりません。
TexPadのビルドスクリプト
Texpad · Help · Custom Typesetting in Texpad OS X using Build Scripts
サンプルはこちら。
私は pyenv を使っているのですが、ビルドスクリプトに書いた pythontex コマンドがうまく実行されませんでした。
原因はインストールしたはずの pygmentsモジュールがないというエラーでした。
ビルドスクリプトの実行ユーザの問題なのかよくわかりませんでしたが、とりあえず無理矢理ビルドスクリプトの中で PYTHONPATH 追加してなんとかなりました。
Hello PythonTex!
基本的に {pycode}環境で python の関数などを定義して、\pyコマンドで tex上に出力できます。
\begin{pycode}
# -*- coding: UTF-8 -*-
def hello():
msg = r"Hello \textbf{PythonTex}!"
return msg
\end{pycode}
\py{hello() + " via py"}
実践
A Gentle Introduction to PythonTeX
上のスライドでは、sympyを使った数式、matplotlibを使った図、webkit2pngを使ったウェブページの挿入からtableの自動生成まで書かれています。
ただ、pycode環境でprintを使って直接出力していますが、自分の環境ではできませんでした。ちなみに自分は2.7です。
数式の自動生成
PythonTeXを試してみた:Pythonコードの出力結果をLaTeX文書に埋め込む : はむ吉(のんびり)の雑記帳
上のスライドでは\newcommandと組み合わせたり、sympyと組み合わせたりしています。
sympyにはlatexコマンドがありますが、わざわざsympyで数式を作らずに実際に自分が使っている数式から自動生成できたら最高です。
自分はTheanoベースのライブラリを使おうと思っているので、Theanoの数式のグラフ構造からsympyもしくはlatexに変換してくれるようなのがありそうな気がしたのですが見つかりませんでした。
(もっと探してみて、無かったら自分で書くかsympyで普通に書くかします。ですがsympyで書くのであれば普通にtexで書けばいいんじゃないのかなあと思っています。微分式などのsimplicationがどの程度のものなのかわかっていません。参考)
データの具体例などの提示
これは簡単にできそうです。
表の作成
すでにデータありきでやられていますが、自分がpdfにする前に実験結果を実際どう管理するのかというところです。
エクセル系(プレーンテキストじゃない)で保存しとく説が濃厚ですが、その場合、tabfileioとかを使ってみようと思っています。使ってみたらまた忘備録書きたいと思います。
(csvとかであれば、標準でモジュールがあるのであれですが。)
図の挿入
PythonTeXとMatplotlib - 何かを書き留める何か
\begin{pycode}
・・・
pylab.savefig('myplot.pdf')
\end{pycode}
\begin{figure}
\includegraphics{myplot.pdf}
\end{figure}
と言った感じです。
これは、一度画像を保存してしまって普通にtexで読み込めばいいかなと思います。
※ グラフ画像保存
rodeoを使えば、割とpythonでグラフ画像保存のハードル下がりそうなので(グラフィカルにできそう)使ってみたいです。ipythonベースのブラウザで動くエディターです。pandasのデータ構造をビューで表示してくれるみたいです。
TikZ
Plot of the Brillouin Function | TikZ example
上のページはluatexでluaで関数定義してTikZ作ってますが、これのpython版もいけるんじゃないか?と汗
感想
執筆環境とか調べる前に早く実験終わらせろやと言われそうです。。
