pgffor のまとめ
概要
pgfforパッケージは,多くのプログラミング言語で用いられるfor文と似た構文として\foreachコマンドを提供する.
pgfforパッケージはtikzパッケージを読み込むと自動的に読み込まれるようになっており,tikzによる描画で繰り返しを行うときに用いることが多いが,pgffor自体で単体でも使える独立したパッケージになっている.
この記事ではpgfforの基本的な使い方をまとめる.
公式のマニュアルはtexdoc tikzの89章にまとまっている.
記事内で触れていない機能も一部あるので,詳しく知りたい場合はマニュアルを参照してほしい.
構文
\foreachコマンドの構文を簡単にまとめる.
\foreach <variables> in <list> <commands>
<variables>で宣言された変数に<list>に含まれる値を順に代入し,それぞれの値を使って<commands>を実行する.
<variables>で変数(制御綴)を宣言する./で区切ることで複数の変数を宣言することもできる.
<list>は{0,1,2,3}のような,{...}で囲まれたカンマ区切りの値のリストである.- 変数が複数ある場合は
/で区切ってそれぞれの変数に対応する値を書ける.すべての値を明示的に書かない場合は,最後に書いた値が以降の変数について繰り返される. {0,1,...,10}のような省略構文を使うこともできる.
- 変数が複数ある場合は
<commands>は以下のいずれかである.tikzの1つの描画コマンド (次の;まで)- 1つの
\foreach文 (多重ループ) {...}で囲まれたグループ
リストの省略記法
連続した数字,英字の列挙について...を使った省略記法を用いることができる.
使用法は比較的直観的に使えるものになっていて,例えば,
- {0,...,5} → {0,1,2,3,4,5}
- {a,...,f} → {a,b,c,d,e,f}
のように扱われる.
...の前に2つの値を指定すると,その差分を使って補完する値が計算される.
例えば,
- {2,4,...,10} → {2,4,6,8,10}
- {0,0.1,...,0.5001} → {0,0.1,0.20001,0.30002,0.40002,0.50003}
のように使うことができる. 2つ目の例でわかるように,浮動小数点演算の誤差には注意する必要がある.
例
公式のマニュアルにあるサンプルをメインにいくつか例を見る.
- 基本的な繰り返し
\xに1,2,3,0を順番に代入し,[\x]を出力する.
\foreach \x in {1,2,3,0} {[\x]} % -> [1][2][3][0]
- tikz のコマンドを繰り返す
x座標を変えながらいくつかの円を描く.
\tikz \foreach \x in {0,1,2,3} \draw (\x,0) circle[radius=0.2cm];
![]()
- 二重ループ
2重ループを使って x,y の両方の座標についてループさせる.
\begin{tikzpicture} \foreach \x in {0,1,2,3} \foreach \y in {0,1,2,3} { \draw (\x,\y) circle[radius=0.2cm]; \fill (\x,\y) circle[radius=0.1cm]; } \end{tikzpicture}

- 2つの変数を宣言する
/で区切って\x, \xtext の2つの変数を宣言する.
\xtextを明示的に指定していない場合は,\xと同じ値が使われている.
\begin{tikzpicture} \foreach \x/\xtext in {0,...,3,2.72/e} \draw (\x,0) node {$\xtext$}; \end{tikzpicture}
![]()