pp4tex: 複数行マクロが動くようになった

複数行マクロ(もちろん引数あり)と、他のファイルからのincludeが出来るようになった。というわけで下のようなファイルをincludeしたら、後は\BayesForGaussって書くだけで手軽に使える。

% define \BayesForGauss:

% define \x \vec{x}
% define \y \vec{y}
% define \A \mat{A}
% define \b \vec{b}
% define \m \vec{\mu}
% define \Lam \mat{\Lambda}
% define \L \mat{L}

\begin{itembox}[l]{ガウス分布についてのベイズの定理(PRML p.90)}
% push
% define \S \mat{\Sigma}

given:
\[ p(\x) = \Gauss{\x | \m, \Lam\inv } \]
\[ p(\y|\x) = \Gauss{\y | \A\x + \b, \L\inv } \]
marginal and conditional distributions are:
\[ p(\y) = \Gauss{\y| \A\m + \b, \L\inv + \A \Lam\inv \A^T } \]
\[ p(\x|\y) = \Gauss{\x | \S (\A^T \L (\y - \b) + \Lam \m), \S\inv} \]
where
\[ \S = (\Lam + \A^T \L \A)\inv \]

% pop
\end{itembox}
% end

push/popで囲われている\Sはこのマクロのローカルの変数であって、マクロを使ってもその使った場所の名前空間にはインポートされない。一方、push/popの外にある名前はマクロを使った場所の名前空間にインポートされる。嫌ならマクロの使用自体をpush/popで囲えばいい。なんでこうしているかというと、下の使用例みたいに中の記号の一部はマクロの外で使いたいからなんだ。

これで当初考えていた機能は全部実装し終わった。masterブランチにマージした。gitの練習という意味では、新しい機能をブランチを作ってそこで作業してからmasterにマージしたのはよい点だったと思う。しかし「数字を含むトークン」のトピックブランチだったはずのalnum_tokensで複数行マクロの実装を初めてしまったのはダメな点だな。いい勉強になった。

https://github.com/nishio/pp4tex/tree/master