Anker funktionieren nicht bei von foreach generierten Knotennamen: „Unbekannter Operator ‚c‘ oder ‚ce‘ (in ‚0.center‘).“

Anker funktionieren nicht bei von foreach generierten Knotennamen: „Unbekannter Operator ‚c‘ oder ‚ce‘ (in ‚0.center‘).“

Ich versuche also, ein Tikzbild für das Pascal-Dreieck zu generieren. Dies ist mein Code und das Ergebnis bisher:

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

Dies ist das Ergebnis: Pascalsches Dreieck, aber mit falschen Pfeilen

Ich möchte jedoch Verbindungen zwischen den Mittelpunkten haben, daher habe ich „.center“ hinzugefügt, um die Linien zum Mittelpunktsanker zu zeichnen:

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

Aber dann erhalte ich die folgende Fehlermeldung: Fehler beim Hinzufügen von Ankern zum zweiten Knoten

Wie kann ich das Problem beheben/was ist falsch? Warum a\k\n.centerfunktioniert es richtig und warum a\k\np.centernicht?

Antwort1

Sie möchten nicht \pgfmathsetmacro, sondern \pgfmathtruncatemacroeine ganzzahlige Darstellung erhalten. Ebenso kann/sollte das Makro für den Wert des Binomialkoeffizienten mit definiert werden \edef.

Übrigens ist es besser, einen Stil zu definieren, als lange Listen mit Optionen zu wiederholen: viel handlicher. Außerdem \foreachsind Zyklen keine PGF-Anweisungen, daher sollten ihnen keine Semikolons folgen (Sie erhalten jede Menge Warnungen, dass sie ;in nicht vorhanden sind \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}

Bildbeschreibung hier eingeben

verwandte Informationen