TikZ Foreach 命令に関する質問

TikZ Foreach 命令に関する質問

- 溝口 洸熙 の投稿
返信数: 5

目標

 TikZにおけるForeach文で,2変数に対してfor文を回したい.(2重ループではない)

現状

\newcounter{reg}
\setcounter{reg}{-1}
\newcommand{\reg}[1][]{\refstepcounter{reg}\arabic{reg}}
略
\foreach \u in {15.75,15.25,...,0.25}
{
  \node[above] at (\u,1){\scriptsize\ttfamily \reg};
}
略

で出力は,添付ファイル1です.このボックスの上の番号をcouterを用いずに定義したい.

試したこと

\newcounter{reg}
\setcounter{reg}{-1}
\newcommand{\reg}[1][]{\refstepcounter{reg}\arabic{reg}}
略
\foreach \u \v  in {15.75/0,15.25/1,...,0.25/31}
{
  \node[above] at (\u,1){\scriptsize\ttfamily \reg};
}
略

結果

 ==> Fatal error occurred, no output PDF file produced!SyncTeX written on report.synctex.gz.
添付 添付ファイル1.png
溝口 洸熙 への返信

Re: TikZ Foreach 命令に関する質問

- 和田 勇 の投稿
参考 https://qiita.com/yanagi4q/items/86692fce62fdf6bb83ef
Tikz の foreach を使う練習

\documentclass{jlreq}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
  \foreach \u [count=\reg from 0]  in { 15.75, 15.25, ..., 0.25  }
  {
    \node[above] at (\u,1){\scriptsize\ttfamily \reg};
  }
\end{tikzpicture}
\end{document}

PS
tikz のマニュアルを検索したけど、「...,」で増減指定く方法で複数のものをという例は見つかりませんでした。

また座標値や刻み幅を変更することを考慮すると { 0,1,...,31} としてその値から \u を導出する方が良いかなとも思いました。(未検証だけど)
和田 勇 への返信

Re: TikZ Foreach 命令に関する質問

- 和田 勇 の投稿
{ 0,1,...,31}  の方法で、描画文字位置を導出する方法を試してみました。
基準座標位置や刻みの変更に要員対応できるかと思います。

\begin{tikzpicture}
  \foreach \ix in { 0, 1, ..., 31 }
  {
    \node[above] at ( 16 - 0.25 - \ix * 0.5 ,1){\scriptsize\ttfamily \ix};
  }
\end{tikzpicture}
和田 勇 への返信

Re: TikZ Foreach 命令に関する質問

- 溝口 洸熙 の投稿

お忙しい中,ありがとうございます. 無事,目標を達成することができました.

ところで,座標に関するお話ですが,

($(1,1)+(1,2)$)

のように$$で挟む方法が私の中では基本でしたが,上記の例のように$$で挟まなくても座標計算を実現できています.

$$を挟む記法と挟まない記法の違いを教えていただけると幸いです.

溝口 洸熙 への返信

Re: TikZ Foreach 命令に関する質問

- 和田 勇 の投稿

おお、そうなんだ ...

### ($...$) とするにはそのままではエラーになるので calc を使うと計算できる様ですね

        \usetikzlibrary{calc} % お忘れなく

        \foreach \ix in { 0, 1, ..., 31 }
        {
            \node[above] at (     16 - 0.25 - \ix * 0.5 ,1     ){\scriptsize\ttfamily \ix};
            \node[above] at ( $ ( 16 - 0.25 - \ix * 0.5 ,2 ) $ ){\scriptsize\ttfamily \ix};
        }

別のスレッドでつぶやいた ripgrep-all で tikz のマニュアル検索

         rga  '[(][$].*[$]' $pgfmanual

         rga '(.node|.draw).*[(][^$()]+[)]' $pgfmanual

で検索してみた結果からですとどちらでも良いような感じ。

もしエラーになったら calc の導入やら座標表現を見直す ことにしようと思います。