
Estou interessado em colorir certas células de uma imagem TikZ. É o seguinte:
Fiz isso usando a grade e criando os números. Apresento o código que criei acima:
\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 do ciclo, existem algumas falas comentadas. Acontece que quero colorir apenas o número que aparece no quadrado azul, na verdade, os que estão abaixo dele (16,22,21). No entanto, recebi vários erros! É uma lista de até 24 erros. Suspeito que tenho um problema com a redação da condição.
Questões:
Você sabe quais são os erros da condição? Você poderia recomendar uma referência para ler sobre essas condições?
Atualizar
Desculpe por sair, mas estou de volta. A resposta foi muito útil, porém preciso fazer algumas alterações para obter o resultado esperado. Há uma instância do código e a imagem 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}
Usei uma cor diferente para cada etapa, fico muito grato pela ajuda. Alguma idéia sobre minha segunda pergunta?
Responder1
Em relação ao código da pergunta:
- O
[
depois\pgfmathparse
deveria ser{
. - O uso de múltiplos
<=
em uma condição\pgfmathparse
pode levar a resultados inesperados. - Dentro
\pgfmathparse
,j
deveria estar\j
. - O
int(1)
pode ser substituído por1
eint(0)
por0
. - Com
\foreach
,0,1,2,3,4
pode ser substituído por0,...,4
. - Depois de
\pgfmathtruncatemacro
, não;
é necessário.
A condição em \pgfmathparse
foi alterada.
Primeiro, a cor é definida. Então, o código do nó só precisa ser colocado uma vez, em vez de duas.
Ao usar \inteval
, é desnecessário definir \label
com \pgfmathtruncatemacro
.
O código dos quadrados pode ser simplificado com 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}