
Ich interessiere mich für das Einfärben bestimmter Zellen eines TikZ-Bildes. Es handelt sich um Folgendes:
Ich habe es gemacht, indem ich das Raster verwendet und die Zahlen erstellt habe. Ich stelle den Code vor, den ich oben erstellt habe:
\begin{tikzpicture}[scale = 0.7] \draw[lightgray] (0,0) grid (9,9); \draw[blue] (2,2) grid (7,7); %Ciclo de cuadrado auxiliar \foreach \i in {0,1,2,3,4}{ \foreach\j in {0,1,2,3,4}{ \draw[red,thick,opacity = 0.5] (\i + \j,4 +\j - \i) rectangle (\i + \j + 1, 5 + \j - \i); } } %Cuadrado principal \draw[blue,opacity = 0.5] (2,2) grid (7,7); %Ubicación de números \foreach \i in {0,1,2,3,4}{ \foreach \j in {0,1,2,3,4}{ \pgfmathtruncatemacro{\label}{\i + \j + 4*\i + 1}; %\pgfmathparse[3 <= \i <= 5 && 0 <= j <= 1 ? int(1) : int(0)} %\ifnum\pgfmathresult = 1 %\node[teal] at (\i + \j + 0.5,4 +\j - \i + 0.5) {\label}; %\else \node at (\i + \j + 0.5,4 +\j - \i + 0.5) {\label}; %\fi } } \end{tikzpicture}
Innerhalb des Zyklus gibt es einige kommentierte Zeilen. Der Punkt ist, dass ich nur die Zahlen einfärben möchte, die außerhalb des blauen Quadrats erscheinen, und zwar die, die darunter liegen (16,22,21). Allerdings habe ich mehrere Fehler erhalten! Es ist eine Liste mit bis zu 24 Fehlern. Ich vermute, dass ich ein Problem mit dem Schreiben der Bedingung habe.
Fragen:
Wissen Sie, welche Fehler in dieser Bedingung enthalten sind? Können Sie eine Referenz empfehlen, in der man mehr über diese Bedingungen lesen kann?
Aktualisieren
Entschuldigen Sie, dass ich weggegangen bin, aber ich bin wieder da. Die Antwort war sehr hilfreich, ich muss jedoch einige Änderungen vornehmen, um das gewünschte Ergebnis zu erzielen. Es gibt eine Instanz des Codes und das resultierende Bild
\begin{figure}[H] \centering \begin{tikzpicture}[scale=0.7] %\draw[lightgray] (0,0) grid (9,9); %Cuadrado auxiliar con desplazados resaltados \foreach \i in {0,...,4}{ \foreach \j in {0,...,4}{ \draw[red!50,thick] (\i+\j,4+\j-\i) rectangle +(1,1); \pgfmathparse{\i - \j > 2 ? 1 : 0} \ifnum\pgfmathresult = 1 \def\mycolor{white} \node[\mycolor] at (\i+\j+0.5,4+\j-\i+0.5) {\inteval{5*\i+\j+1}}; \else \pgfmathparse{\j - \i > 2 ? 1 : 0} \ifnum\pgfmathresult = 1 \def\mycolor{white} \node[\mycolor] at (\i+\j+0.5,4+\j-\i+0.5) {\inteval{5*\i+\j+1}}; \else \pgfmathparse{\i + \j < 2 ? 1 : 0} \ifnum\pgfmathresult = 1 \def\mycolor{cyan} \node[\mycolor] at (\i+\j+0.5,4+\j-\i+0.5) {\inteval{5*\i+\j+1}}; \else \def\mycolor{black} \node[\mycolor] at (\i+\j+0.5,4+\j-\i+0.5) {\inteval{5*\i+\j+1}}; \fi \fi \fi } } %Cuadrado principal \draw[blue] (2,2) grid (7,7); %Resaltado en cuadrado principal de anteriores \node[teal] at (3.5,6.5) {$16$}; \node[teal] at (4.5,5.5) {$21$}; \node[teal] at (5.5,6.5) {$22$}; \node[violet] at (3.5,2.5) {$4$}; \node[violet] at (4.5,3.5) {$5$}; \node[violet] at (5.5,2.5) {$10$}; %Ubicacion de numeros nuevos \draw[->,cyan!50,thick] (1.5,5.5) to (6.5,5.5); \node[cyan] at (6.5,5.5) {$2$}; \draw[->,cyan!50,thick] (0.5,4.5) to (5.5,4.5); \node[cyan] at (5.5,4.5) {$1$}; \draw[->,cyan!50,thick] (1.5,3.5) to (6.5,3.5); \node[cyan] at (6.5,3.5) {$6$}; \end{tikzpicture}
Ich habe für jeden Schritt eine andere Farbe verwendet und bin für die Hilfe sehr dankbar. Irgendwelche Ideen zu meiner zweiten Frage?
Antwort1
Bezüglich des Codes in der Frage:
- Das
[
Nachher\pgfmathparse
sollte sein{
. - Die Verwendung mehrerer
<=
in einer Bedingung\pgfmathparse
kann zu unerwarteten Ergebnissen führen. - Drinnen sollte
\pgfmathparse
manj
sein\j
. - Das
int(1)
kann nach1
undint(0)
nach ersetzt werden0
. - Bei
\foreach
kann0,1,2,3,4
durch ersetzt werden0,...,4
. - Nach ist
\pgfmathtruncatemacro
„Nein“;
erforderlich.
Der Zustand in \pgfmathparse
wurde geändert.
Zuerst wird die Farbe definiert. Anschließend muss der Code für den Knoten nur einmal statt zweimal platziert werden.
Durch die Verwendung \inteval
ist eine Definition \label
mit nicht erforderlich \pgfmathtruncatemacro
.
Der Code für die Quadrate kann mit vereinfacht werden rectangle +(1,1)
.
\documentclass[border=6pt]{standalone}
\usepackage{xfp}%not necessary from 2022-06-01: see https://ctan.org/pkg/xfp
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[scale=0.7]
\draw[lightgray] (0,0) grid (9,9);
\draw[blue] (2,2) grid (7,7);
\foreach \i in {0,...,4}{
\foreach \j in {0,...,4}{
\pgfmathparse{\i+\j<2||\i+\j>6||\i-\j>2||\j-\i>2?1:0}
\ifnum\pgfmathresult=1
\def\mycolor{teal}
\draw[red!50,thick] (\i+\j,4+\j-\i) rectangle +(1,1);
\else
\def\mycolor{black}
\fi
\node[\mycolor] at (\i+\j+0.5,4+\j-\i+0.5) {\inteval{5*\i+\j+1}};
}
}
\end{tikzpicture}
\end{document}