sankantsuのブログ

技術メモ・競プロなど

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つ目の例でわかるように,浮動小数点演算の誤差には注意する必要がある.

公式のマニュアルにあるサンプルをメインにいくつか例を見る.

  • 基本的な繰り返し
\foreach \x in {1,2,3,0} {[\x]}
% -> [1][2][3][0]

\x1,2,3,0を順番に代入し,[\x]を出力する.

  • tikz のコマンドを繰り返す
\tikz
    \foreach \x in {0,1,2,3}
        \draw (\x,0) circle[radius=0.2cm];

x座標を変えながらいくつかの円を描く.

  • 二重ループ
\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,y の両方の座標を変化させている.

  • 2つの変数を宣言する
\begin{tikzpicture}
    \foreach \x/\xtext in {0,..,3,2.72/e}
        \draw (\x,0) node {$\xtext$};
\end{tikzpicture}

\x, \xtext という2つの変数を宣言している. \xtextを明示的に指定していない場合は,\xと同じ値が使われている.

備考

画像を追加予定...