【LaTeX】【tikz入門】ループを使用する方法3選
数式を出力できるLaTeXには線や円、グラフなどの図形を描くことができるtikzパッケージが存在する。
例えば線分を何本も描いたりすると、数値やオプションが違うだけで似たような命令を使うことが多い。
同じようなコマンドが続くとコードが長くなってしまう。そこで、似たような処理を繰り返す場合にループ処理を使って一度にコマンドを記述する方法がある。
ここではループの基本的な使い方について取り上げる。
準備
tikzパッケージを使用するためには、プリアンブル(\\begin\{document\}
の前)に次のように記述して、tikzパッケージを使えるようにさせる。
\usepackage{tikz}
ここでエラーが出る場合は、使っている環境にtikzパッケージがインストールされていないので、別途インストールする必要がある。
具体例
1変数のループ
tikzでループを使用する構文は次の通りである。
\drawまたはfillまたはfilldraw \変数 in {価のリスト}{処理内容};
\\変数
を含む処理内容
を値のリスト
の内容で順番にループして処理をする。
変数の値のリストはカンマ,
で区切る。
例として、左から順に青色が薄くなっていく円の描画をループを使用して記述する。
\begin{tikzpicture} \foreach \x in {0,1,2,3,4,5} { \fill [blue,opacity=1-0.2*\x] (2*\x,0) circle [radius=1]; } \end{tikzpicture}
- 実行結果
上の例で次のように色を混ぜる構文にカッコを使うとエラーになる。
\[red!\\x*2!blue\]
\[red!(\\x*2)!blue\]
\[red!\{\\x*2\}!blue\]
\[red!\{(\\x*2)\}!blue\]
2変数のループ
次のように変数をスラッシュ/
で区切ると、1つのループの中で複数の変数をループできる。
tex
変数x/変数y in {値x1/値y1,値x2/値y2}
例として、色のついた円を描く。
\begin{tikzpicture} \foreach \x/\iro in {0/red,60/orange,120/yellow,180/green,240/blue,300/purple} { \fill [\iro] (\x:2) circle [radius =1]; } \end{tikzpicture}
- 実行結果
上の\\iro
のように、変数の名前は複数のアルファベットでも良い。
変数x
は値x1,値x2
に順に置き換わり、変数y
は値y1,値y2
に順に置き換わる。変数が3つ以上でも同様にスラッシュで変数を区切り、カンマでリストを作る。
スラッシュの数を変数とリストで合わせないとエラーになる。また、スラッシュとカンマの順番を間違えないように注意が必要である。
変数リストを省略
ループで使われる変数の値のリストに規則性がある場合、次のように3つのピリオド...
で記述を省略できる。
\変数 in {値1,値2,...,値n}
例として、八芒星を描く。
\begin{tikzpicture} \foreach \x in {0,45,90,...,315} { \draw (22.5+\x:2) -- (157.5+\x:2); } \end{tikzpicture}
- 実行結果
省略できる表現は以下のとおりである。
- 等差数列
- 順列:
1,...,6
->1,2,3,4,5,6
- 逆列:
6,...,1
->6,5,4,3,2,1
- 等差順列:
0,2,...,10
->0,2,4,6,8,10
- 等差逆列:
10,8,...,0
->10,8,6,4,2,0
- 順列:
- アルファベット列
- 順列:
a,...,f
->a,b,c,d,e,f
- 逆列:
f,...,a
->f,e,d,c,b,a
- 等差順列:
a,d,...,z
->a,d,g,j,m,p,s,v,y
- 等差 逆列:
z,w,...,a
->z,w,t,q,n,k,h,e,b
- 順列:
リストの省略方法は次のようになっている。上の構文
\変数 in {値1,値2,...,値n}
において、値2
から値n
を越えるまで、差分値2-値1
の等比列が作成される。値1
がないい場合は差分1とみなされる。
また、前後の値は無視されるため、等比数列や階差数列は作れない。
- 等比数列は作れない:
2,4,...,32
->2,4,8,12,16,20,24,28,32
- 階差数列は作れない:
1,3,6,...,21
->1,3,6,9,12,15,18,21
変数x
と変数y
がともに数字の場合はリストの作成がうまくいかないことがある。
変数が2つ以上のループではこのような省略が使えない。
次のような記述はエラーとなる。
\x/\y in {0/100,2/80,...,10/0}
まとめ
ループを扱う構文は次の通りである。
- 不規則なリストでループ
\foeach \x in {値1,値2,値3,値4...} { コマンド }
- 等差規則のあるリストでループ
\foeach \x in {値1,値2,...,値n} { コマンド }
- 複数の変数でループ
\foeach 変数x/変数y in {値x1/値y1,値x2/値y2} { コマンド }
- 複数の変数でリストの省略はできない
参考リンク
追記
ウェブ系のLaTeXであるKaTeXなど、一部の環境では\\iftrue
,\\iffalse
構文が使えない。そのため筆者はワードプレスのquicklatex環境を使用している。