
Estoy interesado en colorear ciertas celdas de una imagen de TikZ. Es el siguiente:
Lo hice usando la cuadrícula y creando los números. Les presento el código que creo arriba:
\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}
Dentro del ciclo hay algunas líneas comentadas. El caso es que quiero colorear solo el número que sale del cuadrado azul, de hecho, los que están debajo (16,22,21). Sin embargo, ¡recibí varios errores! Es una lista de hasta 24 errores. Sospecho que tengo un problema con la redacción de la condición.
Preguntas:
¿Sabes cuáles son los errores en la condición? ¿Podría recomendarme una referencia para leer sobre estas condiciones?
Actualizar
Perdón por salir, pero ya volví. La respuesta fue muy útil, sin embargo necesito hacer algunos cambios para obtener el resultado esperado. Hay una instancia del código y la imagen resultante.
\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}
Utilicé un color diferente para cada paso, estoy muy agradecida por la ayuda. ¿Alguna idea sobre mi segunda pregunta?
Respuesta1
Con respecto al código en la pregunta:
- El
[
después\pgfmathparse
debería ser{
. - El uso de múltiples
<=
en una sola condición\pgfmathparse
puede generar resultados inesperados. - Dentro
\pgfmathparse
, unoj
debería estar\j
. - El
int(1)
puede ser reemplazado por1
yint(0)
por0
. - Con
\foreach
,0,1,2,3,4
puede ser reemplazado por0,...,4
. - Después
\pgfmathtruncatemacro
, no;
se requiere.
La condición \pgfmathparse
ha sido cambiada.
Primero, se define el color. Luego, el código del nodo solo debe colocarse una vez en lugar de dos.
Al usar \inteval
, no es necesario definir \label
con \pgfmathtruncatemacro
.
El código de los cuadrados se puede simplificar con 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}