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}
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:
Wie kann ich das Problem beheben/was ist falsch? Warum a\k\n.center
funktioniert es richtig und warum a\k\np.center
nicht?
Antwort1
Sie möchten nicht \pgfmathsetmacro
, sondern \pgfmathtruncatemacro
eine 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 \foreach
sind 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}