foreach가 생성한 노드 이름에서 앵커가 작동하지 않습니다: "알 수 없는 연산자 `c' 또는 `ce'('0.center'에서)."

foreach가 생성한 노드 이름에서 앵커가 작동하지 않습니다: "알 수 없는 연산자 `c' 또는 `ce'('0.center'에서)."

그래서 저는 Pascal Triangle에 대한 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}

하지만 다음과 같은 오류가 발생합니다. 두 번째 노드에 앵커를 추가하는 중 오류가 발생했습니다.

어떻게 고치나요/무슨 문제인가요? a\k\n.center올바르게 작동하지만 작동 하지 않는 이유는 무엇입니까 a\k\np.center?

답변1

당신은 원하지 않지만 \pgfmathsetmacro정수 \pgfmathtruncatemacro표현을 얻으려고 합니다. 마찬가지로 이항 계수 값에 대한 매크로는 로 정의할 수 있거나 정의해야 합니다 \edef.

그건 그렇고, 긴 옵션 목록을 반복하는 대신 스타일을 정의하는 것이 더 낫습니다. 훨씬 더 관리하기 쉽습니다. 게다가 \foreach주기는 PGF 문이 아니므로 세미콜론이 뒤에 오면 안 됩니다( ;에 존재하지 않는다는 경고가 많이 표시됩니다 \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}

여기에 이미지 설명을 입력하세요

관련 정보