질문:

질문:

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예상치 못한 결과가 발생할 수 있습니다.
  • 내부에는 \pgfmathparsej있어야 합니다 \j.
  • 은 및 으로 int(1)대체될 수 있습니다 .1int(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}

관련 정보