如何在 tikz 中包含带有计算变量的 if-else

如何在 tikz 中包含带有计算变量的 if-else

我正在尝试绘制一些网格,每个点都根据坐标用特定颜色圈出。我在网上找到一些使用 ifthen 包来包含 if 语句的代码,如果我按条件“if \x=\y”为对角点着色,则以下代码有效

\usepackage{tikz, ifthen}
\begin{tikzpicture}
  \foreach \x in {0,1,...,6}
  {
    \foreach \y in {0,1,...,6}
    {
      \ifthenelse{\x=\y}{\def\col{red}}{\def\col{black}}
      \node[draw,circle,inner sep=1.5pt,fill,color=\col] at (\x,\y) {};
    }
  }
\end{tikzpicture}

但是现在我需要给非对角线着色,这应该以 \x=\y+1 为条件,如果我用条件改变 \ifthenelse

    \ifthenelse{\x=\y+1}{\def\col{red}}{\def\col{black}}

情节仍然是对角线元素着色。我也尝试

    \ifthenelse{\x-\y=1}{\def\col{red}}{\def\col{black}}

那么只有原点是红色的。如何对变量进行数学运算并使其与 \ifthenelse 一起工作是相当令人困惑的

答案1

使用 pgf 内置的功能ifthenelse

\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}
  \foreach \x in {0,1,...,6}
  {
    \foreach \y in {0,1,...,6}
    {
    \pgfmathsetmacro{\col}{ifthenelse(\x==\y,"red",ifthenelse(\x==\y+1,"blue","black"))}
    \node[draw,circle,inner sep=1.5pt,fill,color=\col] at (\x,\y) {};
    }
  }
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

TikZ 通过 运行所有内容\pgfmathparse,允许使用数学表达式,但 ifthen 不允许。因此{\x=\y+1}实际上比较宏\x\y并忽略+1(因为它仍然设置主对角线)。

另外,我假设您不想将主对角线重置为黑色。

\documentclass{standalone}
\usepackage{tikz, ifthen}
\begin{document}
\begin{tikzpicture}
  \foreach \x in {0,1,...,6}
  {
    \foreach \y in {0,1,...,6}
    {
      \ifthenelse{\x=\y}{\def\col{red}}{\def\col{black}}
      \pgfmathparse{\y+1}
      \ifthenelse{\x=\pgfmathresult}{\def\col{blue}}{}
      \node[draw,circle,inner sep=1.5pt,fill,color=\col] at (\x,\y) {};
    }
  }
\end{tikzpicture}
\end{document}

演示

相关内容