Tikz:変数や演算

変数の宣言の仕方

整数だったら

\newcount\num
\num=0

小数は、文字列とおなじかんじでマクロしか無いかな。

\defを使う方法

これは、引数と取らない簡単な置き換えマクロである。
これを変数として利用しようってわけ。

\def\variable {Something that's better to use as a variable}

defの後にスペースは空けない!
個人的には\defのほうが短くて好き。

\newcommandを使う方法

本来はtexでマクロを定義するコマンド

\newcommand{\定義したいコマンド名}{コマンドなど}

if

texでも条件分岐ができる。

\if(条件)(真の場合) \else(偽の場合) \fi

「\else(偽の場合)」は,省略することもできる.\ifは,文字同士の比較のみ使用できる.

ループ

tikzを使っている場合は、foreachというC++使いにとってわりと親しみやすい構文が用意されている。

\foreach \y in {1,...,6}
{
\draw (\x,\y) +(-.5,-.5) rectangle ++(.5,.5);
\draw (\x,\y) node{\x,\y};
}

texには\loopという繰り返し構文もある

\loop 処理 \repeat

複数の変数をまわすループ

複数の変数を回したいときは\でつなぐ。
2つ以上の変数を繰り返したい、と思うと思う。
簡単な方法は入れ子構造にすることだ。
しかし、そうじゃなくて「同時に」繰り返したい場合
たとえば、2つの座標(スタートと目的地)を接続する辺のリストがあったとする。
この辺に対して繰り返したい。
つまり、「スタート地点」と「目的地」のペアについて同時に繰り返したい場合だ。
C++とかだったら、クラスがあるけどね。texにはどうやらないからね。
こういう場合が異なる2つの変数を同時に繰り返したい場合ってわけ。
それをやるには、

  • スラッシュ/で変数を区切ること。

である。
たとえば\xと\yという変数を繰り返したい場合はこうなる

\foreach \x / \y in {1/4,3,6,5/8} 
\draw(\x,0) node{$\y$};

出力結果はこうなる

4 6 8

つまり、inに書くことはこうだ。

in {変数A0/変数B0,変数A1/変数B1,変数A2/変数B2,…}

こいつのこまったところは,…,するとエラーになっちゃうこと。

四則演算

演算子 コマンド
+ \advance \変数名 by 値
* \multuply \変数名 by 値
÷ \divide \変数名 by 値

その他

  • \relax…初期化のために利用する空の定義 おしまいって意味

配列を使いたい!

調べてもなかなかでてこない~
とりあえず妥協策はあった。
switch構文のような方法でね。
それは、\ifcase

\ifcase \変数 \or 1の場合 \or 2の場合 \or 3の場合…\fi

大事なのは
\ifcaseではじめて、\fiで締めくくる。
tikzで使うなら、たとえばこんな使い方がある。

\begin{tikzpicture}
\draw  (0,0) grid (6,1);%マス目を書く
\foreach \x in {1,...,6}
{
\draw (\x-0.5,0.5) node{\ifcase \x \or 5 \or 2\fi};
}
\end{tikzpicture}

わかりやすくするために、余計なスタイル定義コードは取り除きました。
マス目の中に、数字を書きたくて、
必ずしも、1,2,3,4と書きたい場合じゃないときああ、配列使いたいなぁって思うよね。
ifcaseだったらコードの量的にまぁ、マシかな。毎回\draw()と何行も書くよりかは。

printfみたいに変数の演算結果を表示したい

mathresultで囲むといい。ただし、0.0みたいn少数になる。

\pgfmathparse{2pt+3.4pt} \pgfmathresult

Bibliography
サポートサイト Wikidot.com