問題:

問題:

我對 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)替換為1和。int(0)0
  • \foreach,0,1,2,3,4可以替換為0,...,4
  • 之後\pgfmathtruncatemacro,不需要;

中的條件\pgfmathparse已經改變。

首先,定義顏色。那麼該節點的程式碼只需要放置一次而不是兩次。

透過使用\inteval,無需定義\labelwith \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}

相關內容