
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}