使用 \pgfmathparse 和 \ifnum 制作 TikZ 棋盘格

使用 \pgfmathparse 和 \ifnum 制作 TikZ 棋盘格

我正在尝试制作一个 6×6 的棋盘格小圆圈,颜色交替为红色和黑色。

为此,我尝试使用\pgfmathparse\ifnum来决定是否将圆圈涂成红色或黑色:

\documentclass[11pt]{article}
\pagestyle{empty}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \x in {0,...,5} \foreach \y in {0,...,5}
{
  \pgfmathparse{mod(\x+\y,2)}
  \ifnum\pgfmathresult=0{\path[fill=black] (\x*0.5cm,\y*0.5cm) circle (0.1cm);}
  \else{\path[fill=red] (\x*0.5cm,\y*0.5cm) circle (0.1cm);}\fi
}
\end{tikzpicture}
\end{document}

尽管当我尝试运行它pdflatex时代码出现错误! Missing = inserted for \ifnum.,但! Missing number, treated as zero.它确实产生了预期的结果。

关于计算我到底做错了什么以及应该如何制作这样的图片?

答案1

您只需要int在模运算符之前添加(否则它会返回一个\ifnum不喜欢的浮点数),因此:

\pgfmathparse{int(mod(\x+\y,2))}

一切都很好:)

答案2

由于您已经在使用该pgfmath库,因此您也可以使用其中的条件语法:

\documentclass[11pt]{article}
\pagestyle{empty}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \x in {0,...,5} \foreach \y in {0,...,5}
{
  \pgfmathparse{mod(\x+\y,2) ? "black" : "red"}
  \edef\colour{\pgfmathresult}
  \path[fill=\colour] (\x*0.5cm,\y*0.5cm) circle (0.1cm);
}
\end{tikzpicture}
\end{document}

生成:

替代文本

没有错误。(我使用的是 TikZ/PGF 2.10;我不确定这个条件语法是什么时候实现的。)

答案3

\ifnum比较两个整数,因此您必须确保数字确实是整数。因此,结合前面的答案,一个有效的代码可能是:

\documentclass[11pt]{article}
\pagestyle{empty}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \x in {0,...,5} 
  \foreach \y in {0,...,5}
  {
    \pgfmathparse{int(mod(\x+\y,2))}
    \let\r\pgfmathresult
    \ifnum\r=0
      \path[fill=red] (\x*0.5cm,\y*0.5cm) circle (0.1cm);
    \else
      \path[fill=black] (\x*0.5cm,\y*0.5cm) circle (0.1cm);
    \fi
  }
\end{tikzpicture}
\end{document}

请注意,它不是\pgfmathresult直接使用,而是将其值转储到\r宏中。

相关内容