2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

変数の使い方(TeX・Tikzで数値計算)

Last updated at Posted at 2023-06-07

変数の使い方(TeX・Tikzで数値計算)

$$
\def\DIS{\displaystyle}
\def\fraction(#1/#2){\frac{#1}{#2}}
\def\ff(#1/#2){\frac{#1}{#2}}
\def\dd#1#2#3{\frac{d ^{#1}#2}{d #3^{#1}}}
\def\pdd#1#2{\frac{\partial ^{#1}#2}{\partial #3^{#1}}}
\def\bi#1#2{{}{#1}! , \mathrm C{#2}}
\def\bm{\boldsymbol}
$$

TeXで数値計算をするときは,2種類の変数の使い方があります。次のように定義します。

\def\hogehoge{数値}
\tikzmath{
    \tikzhoge = 数値;
}

数値計算は\tikzmath内で行うので,後者の変数を使う方が便利です。

しかし,\tikzmathの変数は,環境をまたいだりすると数値を忘れてしまうことがあります。次のように,0,1,2,3,4を表示するTeXを書きます。

\def\stepA{5}
\newcount\countA

\tikzmath{
    \tikzhoge =0;
}

\countA = 0 \loop\ifnum\countA < \stepA
{
    \begin{preview}
        \tikzhoge
    \end{preview}

    \tikzmath{
        \tikzhoge = \tikzhoge + 1;
        }
}
\advance\countA by1\repeat

これを実行すると0が5個表示されます。\tikzhogeに1ずつ足した結果が有効になっていません。

次のように変更して,数値を忘れないようにします。

\def\stepA{5}
\newcount\countA

\tikzmath{
    \tikzhoge =0;
}

\def\hogehoge{\tikzhoge}

\countA = 0 \loop\ifnum\countA < \stepA
{
    \begin{preview}
        \hogehoge
    \end{preview}

    \tikzmath{
        \tikzhoge = \hogehoge;
        \tikzhoge = \tikzhoge + 1;
        }

\global\edef\hogehoge{\tikzhoge}
}
\advance\countA by1\repeat

image.png
image.png
image.png
image.png
image.png

と表示されます。

\globalはTeX文章内全体で有効にする,\edefは数値を代入するという意味で,この2つを組み合わせます。

変数に番号をつける・配列 \expandafter

\def\edefは次のように使うことはできません。

\foreach \x in {1,...,5}{
    \global\def\csname hogehoge[\x] \endcsname{\tikzhoge}
}

\xの数値を有効にしなければいけません。次のように\expandafterを入れます。

\foreach \x in {1,...,5}{
    \global\expandafter\def\csname hogehoge[\x] \endcsname{\tikzhoge}
}

\tikzmathの変数にも番号をつけることができます。

\tikzmath{
        \tikzhoge{1} =1;
        \tikzhoge{2} =2;
            }

ただし,次のような事はできません。

\foreach \x in {1,...,5}{
    \global\expandafter\def\csname hogehoge[\x] \endcsname{\tikzhoge{\x}}
}

理由は分かりませんが(\xの取る値が整数型ではないのが理由かも),少々面倒ですが整数型の変数を導入し,カウンターを用いて解決します。

\countB = 0 \loop\ifnum\countB < 2
{
    \tikzmath{
        int \tikzcountB;
        \tikzcountB = \countB + 1;
    }
    \global\expandafter\edef\csname hogehoge[\tikzcountB] \endcsname{\tikzhoge{\tikzcountB}}
}
\advance\countB by1\repeat

\foreachでは,整数形の変数を用いても解決しませんでした。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?