Вопросы:

Вопросы:

Меня интересует раскраска определенных ячеек картинки TikZ. Она следующая:

Картинка, которую я создал

Я сделал это, используя сетку и создавая числа. Я представляю код, который я создал выше:

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

Внутри цикла есть несколько закомментированных строк. Дело в том, что я хочу раскрасить только те числа, которые появляются из синего квадрата, на самом деле те, которые находятся под ним (16,22,21). Однако я получил несколько ошибок! Это список до 24 ошибок. Я подозреваю, что у меня проблема с написанием условия.

Вопросы:

Знаете ли вы, какие ошибки в условии? Не могли бы вы порекомендовать ссылку, чтобы почитать об этих условиях?

Обновлять

Извините, что ушел, но я вернулся. Ответ был очень полезен, однако мне нужно внести некоторые изменения, чтобы получить ожидаемый результат. Есть пример кода и полученное изображение

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

Шаг моего строительства

Я использовал другой цвет для каждого шага, я очень благодарен за помощь. Есть идеи по моему второму вопросу?

решение1

Относительно кода в вопросе:

  • После [должно \pgfmathparseбыть {.
  • Использование нескольких <=в одном условии \pgfmathparseможет привести к неожиданным результатам.
  • Внутри \pgfmathparseдолжно jбыть \j.
  • Можно int(1)заменить на 1и int(0)на 0.
  • С \foreach, 0,1,2,3,4можно заменить на 0,...,4.
  • После этого \pgfmathtruncatemacroнет не ;требуется.

Условие \pgfmathparseбыло изменено.

Сначала определяется цвет. Затем код для узла нужно разместить только один раз, а не два раза.

При использовании \intevalнет необходимости определять \labelс помощью \pgfmathtruncatemacro.

Код для квадратов можно упростить с помощью 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}

Связанный контент