Preguntas:

Preguntas:

Estoy interesado en colorear ciertas celdas de una imagen de TikZ. Es el siguiente:

Imagen que creé

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}

Un paso de mi construcción.

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 \pgfmathparsedebería ser {.
  • El uso de múltiples <=en una sola condición \pgfmathparsepuede generar resultados inesperados.
  • Dentro \pgfmathparse, uno jdebería estar \j.
  • El int(1)puede ser reemplazado por 1y int(0)por 0.
  • Con \foreach, 0,1,2,3,4puede ser reemplazado por 0,...,4.
  • Después \pgfmathtruncatemacro, no ;se requiere.

La condición \pgfmathparseha 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 \labelcon \pgfmathtruncatemacro.

El código de los cuadrados se puede simplificar con rectangle +(1,1).

ingrese la descripción de la imagen aquí

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

información relacionada