我正在尝试制作一个 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
宏中。