我对为 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}