動機
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
版もいけるんじゃないか?と汗
感想
執筆環境とか調べる前に早く実験終わらせろやと言われそうです。。