As âncoras não funcionam em nomes de nós gerados por foreach: "Operador desconhecido `c' ou `ce' (em '0.center')."

As âncoras não funcionam em nomes de nós gerados por foreach: "Operador desconhecido `c' ou `ce' (em '0.center')."

Então tento gerar uma imagem tikz para o Triângulo de Pascal. Este é o meu código e resultado até agora:

\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}

Este é o resultado: Triângulo de Pascal, mas com setas erradas

Porém, quero ter conexões entre os centros, então adicionei ".center" para desenhar as linhas até a âncora central:

\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}

Mas então, recebo o seguinte erro: Erro ao adicionar âncoras ao segundo nó

Como consertar / o que há de errado? Por que está a\k\n.centerfuncionando corretamente, mas a\k\np.centernão?

Responder1

Você não quer \pgfmathsetmacro, mas \pgfmathtruncatemacrosim obter uma representação inteira. Da mesma forma, a macro para o valor do coeficiente binomial pode/deve ser definida com \edef.

Aliás, é melhor definir um estilo em vez de repetir longas listas de opções: muito mais administrável. Além disso, \foreachos ciclos não são instruções PGF, portanto não devem ser seguidos de ponto e vírgula (você recebe muitos avisos sobre ;a inexistência em \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}

insira a descrição da imagem aqui

informação relacionada