![在 TikZ 中的 foreach 循环内尝试计算模 3 时出错](https://linux22.com/image/421080/%E5%9C%A8%20TikZ%20%E4%B8%AD%E7%9A%84%20foreach%20%E5%BE%AA%E7%8E%AF%E5%86%85%E5%B0%9D%E8%AF%95%E8%AE%A1%E7%AE%97%E6%A8%A1%203%20%E6%97%B6%E5%87%BA%E9%94%99.png)
我的目标是按照以下方式绘制一系列形状:正方形、正方形、三角形、正方形、正方形、三角形......
我使用\foreach
循环,其中使用模块化算法来确定何时绘制三角形。这是我的 MWE:
\documentclass{article}
\usepackage{pgfplots,tikz,tikz-3dplot}
\usetikzlibrary{shapes.geometric}
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture} [scale=0.35,
triangle/.style = {regular polygon, regular polygon sides=3, scale=2.5},
square/.style = {regular polygon, regular polygon sides=4, scale=2}]
\foreach \i in {1,...,9}
{
\ifthenelse{mod(\i,3) = 0}
{
\node[triangle] (\i) at (\i,0) {};
}
{
\node[square] (\i) at (\i,0) {};
}
}
\end{tikzpicture}
\end{figure}
\end{document}
我收到错误:
! Missing number, treated as zero.
! Missing = inserted for \ifnum.
关于这些错误最相关的问题是这但它考虑的是小数,而我的情况并非如此。我遗漏了什么?
答案1
如果您查看日志文件,您将看到整个错误,其中您可以看到它抱怨m
,所以我认为它m
不是数字。这m
是m
中的mod
。
重点是,\ifthenelse
不了解pgf
s 数学函数,并且mod
未在该位置进行解析。您可以使用 进行计算\foreach [evaluate={\j=int(mod(\i,3));}]
并与之进行比较\j
。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture} [scale=0.35,
triangle/.style = {draw, regular polygon, regular polygon sides=3, scale=2.5},
square/.style = {draw, regular polygon, regular polygon sides=4, scale=2}]
\foreach [evaluate={\j=int(mod(\i,3));}] \i in {1,...,9}
{
\ifthenelse{\j = 0}
{
\node[triangle] (\i) at (\i,0) {};
}
{
\node[square] (\i) at (\i,0) {};
}
}
\end{tikzpicture}
\end{figure}
\end{document}