2021年11月4日木曜日

TikZの反復と分岐

数理的なモデルと関連した 図を書くのにPowerPointはちょっと使いにくい。MathematicaJuliaでも表現力の自由度が足りない。そこで,PGF/TikZの登場となる。その機能を十分に生かそうとすると,TikZ環境でのプログラミングが必要であり,変数の処理や反復・分岐などが求められる。

PGF/TikZについては,Tantauの1300pを超えるマニュアルがあるのだけれど,これがまた詳しすぎて読みにくい。そんなわけで,日本語の適当な解説書を探すのだけれどこれがまたないのだった。そんなわけで,ボルツマン分布の概念図を作図しようとしていきなりつまづいた。

反復の方は\foreachを使うというところまではいいのだが,これに条件分岐を入れるとなんだかやヤコしい。しかも,堪え性のない老人は,最近の大学生のように真面目に調べずにネット情報を漁ってつまみ食いしようとするものだから,訳がわからない状態になるのであった。

小学生からのプログラミング教育は,いっそのことLaTeX+PGF/TikZにしたらいいのではないかとしみじみ思う今日この頃です。Pictogrammingと合体できないものか。まあグダグダ言いながらなんとか,解決方法の1つが見つかった。

/begin{tikzpicture}
\draw[step=2, dotted] (0,0) grid (13,2);
\foreach \x [count=\i]in {1,3,...,13}
{
\draw (\x,-0.5) node{\$(n_\i,u_\i)\$};
\foreach \y in {1,...,8}
\pgfmathsetmacro{\col}{ifthenelse(rnd*8 > \y,"white",ifthenelse(rnd*8 <\y,"gray","white"))}
\draw[fill,\col] (\x+rnd*1.6-0.8, rnd*1.6+0.2) circle(0.05);
}
\end{tikzpicture}

少し違うタイプの問題が出ても対応できる自信はまったくない,勉強不足なのであった。


図:TikZの例,\foreachとifthenelseとrndを組み合わせたもの


0 件のコメント: