foreach で生成されたノード名でアンカーが機能しません:「不明な演算子 `c' または `ce' ('0.center' 内)。」

foreach で生成されたノード名でアンカーが機能しません:「不明な演算子 `c' または `ce' ('0.center' 内)。」

そこで、パスカル三角形の tikzpicture を生成してみます。これが私のコードとこれまでの結果です:

\begin{figure}
\centering
\begin{tikzpicture}
    \foreach \n in {0,...,7}{
        \foreach \k in {0,...,\n}{
            \pgfmathsetmacro\nten{\n * 8}
            \node[rectangle,minimum height=1cm,minimum width=1cm,draw,fill=Red!\nten] (a\k\n) at (\k-\n/2,7-\n) {$\binom{\n}{\k}$};
            \pgfmathsetmacro\currbinom{\xinttheiiexpr binomial(\n,\k)\relax}
            \node[rectangle,minimum height=1cm,minimum width=1cm,draw,fill=Red!\nten] (b\k\n) at (\k-\n/2+10,7-\n) {$\currbinom$};
        };
    };
    %verbindungen
    \foreach \n in {0,...,6}{
        \foreach \k in {0,...,\n}{
            \pgfmathsetmacro\kp{\k+1}
            \pgfmathsetmacro\np{\n+1}
            \draw[->] (a\k\n.center) -- (a\k\np);
        };
    };
    \node[rectangle] (eqsign) at (5,4) {$=$};
\end{tikzpicture}
\caption{Caption}
\label{fig:pascal-tri}
\end{figure}

結果は次のとおりです。 パスカルの三角形、ただし矢印が間違っている

ただし、中心間を接続したいので、中心のアンカーに線を描くために「.center」を追加しました。

\begin{figure}
\centering
\begin{tikzpicture}
    \foreach \n in {0,...,7}{
        \foreach \k in {0,...,\n}{
            \pgfmathsetmacro\nten{\n * 8}
            \node[rectangle,minimum height=1cm,minimum width=1cm,draw,fill=Red!\nten] (a\k\n) at (\k-\n/2,7-\n) {$\binom{\n}{\k}$};
            \pgfmathsetmacro\currbinom{\xinttheiiexpr binomial(\n,\k)\relax}
            \node[rectangle,minimum height=1cm,minimum width=1cm,draw,fill=Red!\nten] (b\k\n) at (\k-\n/2+10,7-\n) {$\currbinom$};
        };
    };
    %verbindungen
    \foreach \n in {0,...,6}{
        \foreach \k in {0,...,\n}{
            \pgfmathsetmacro\kp{\k+1}
            \pgfmathsetmacro\np{\n+1}
            \draw[->] (a\k\n.center) -- (a\k\np.center);
        };
    };
    \node[rectangle] (eqsign) at (5,4) {$=$};
\end{tikzpicture}
\caption{Caption}
\label{fig:pascal-tri}
\end{figure}

しかし、次のエラーが発生します。 2 番目のノードにアンカーを追加するときにエラーが発生しました

修正方法 / 何が問題ですか?a\k\n.center正しく動作しているのに、なぜa\k\np.center動作しないのですか?

答え1

ではなく\pgfmathsetmacro\pgfmathtruncatemacro整数表現を取得したいのです。同様に、二項係数の値のマクロは次のように定義できます。\edef

ちなみに、長いオプション リストを繰り返すよりも、スタイルを定義する方がはるかに管理しやすくなります。また、サイクルは PGF ステートメントではないため、その後にセミコロンを付けるべきではありません (に存在しない\foreachという警告が大量に表示されます)。;\nullfont

\documentclass{article}
\usepackage[a4paper,margin=1cm]{geometry}
\usepackage{amsmath}
\usepackage[dvipsnames]{xcolor}
\usepackage{xintexpr}
\usepackage{tikz}

\begin{document}

\begin{figure}
\centering
\begin{tikzpicture}[
  rect/.style={rectangle,minimum height=1cm,minimum width=1cm,draw,fill=Red!\nten}
]
\foreach \n in {0,...,7}{
  \foreach \k in {0,...,\n}{
    \pgfmathsetmacro\nten{\n * 8}
    \node[rect] (a\k\n) at (\k-\n/2,7-\n) {$\binom{\n}{\k}$};
    \edef\currbinom{\xinttheiiexpr binomial(\n,\k)\relax}
    \node[rect] (b\k\n) at (\k-\n/2+10,7-\n) {$\currbinom$};
  }
}
%verbindungen
\foreach \n in {0,...,6}{
  \foreach \k in {0,...,\n}{
%    \pgfmathtruncatemacro\kp{\k+1}
    \pgfmathtruncatemacro\np{\n+1}
    \draw[->] ({a\k\n}.center) -- ({a\k\np}.center);
  }
}
\node[rectangle] (eqsign) at (5,4) {$=$};
\end{tikzpicture}
\caption{Caption}
\label{fig:pascal-tri}
\end{figure}

\end{document}

ここに画像の説明を入力してください

関連情報