如何解决不完整的 \iffalse 错误?

如何解决不完整的 \iffalse 错误?

我正在尝试创建多个 8x8 网格,每个网格上都有一个随机阴影框。这是用于课堂活动的,我想要一堆不同的网格,并且不想为每个网格硬编码随机框。我使用以下代码:

\begin{tikzpicture}[x=2.54cm, y=2.54cm]
    \foreach \y in {1,2,...,8}
    {
        \foreach \x in {1,2,...,8}
        {
            \ifthenelse{\x= \pgfmathparse{random(8)}\pgfmathresult \AND \y=\pgfmathparse{random(8)}\pgfmathresult}
            {\filldraw[draw=black,fill=lightgray] (\x,\y) rectangle (\x,\y) rectangle (1+\x,1+\y);}
            {\draw[black] (\x,\y) rectangle (\x,\y) rectangle (1+\x,1+\y);}
        }
    }
\end{tikzpicture}

我得到了错误

不完整 \iffalse;第 51 行之后的所有文本均被忽略”

其中第 51 行是 之前的那个右花括号\end{tikzpicture}。我已经四处寻找解决方法,但尚未找到。

答案1

只是充实了大卫的评论。

\documentclass{standalone}
\usepackage{ifthen}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[x=2.54cm, y=2.54cm]
\pgfmathtruncatemacro{\RandomX}{random(8)}
\pgfmathtruncatemacro{\RandomY}{random(8)}
    \foreach \y in {1,2,...,8}
    {
        \foreach \x in {1,2,...,8}
        {
            \ifthenelse{\x=\RandomX  \AND \y=\RandomY}
            {\filldraw[draw=black,fill=lightgray] (\x,\y) rectangle (\x,\y) rectangle (1+\x,1+\y);}
            {\draw[black] (\x,\y) rectangle (\x,\y) rectangle (1+\x,1+\y);}
        }
    }
\end{tikzpicture}
\end{document}

并且@cfr 是正确的,但是这也有效。

答案2

先绘制网格,然后对随机框进行着色似乎更容易,因为这样就不需要条件语句了。以下代码定义了一个宏\RandomSquareInGrid,用于对方形网格中的随机正方形进行着色。默认情况下,8x8会绘制网格,但有一个可选参数可以更改网格大小。当我运行下面的 MWE 时,我得到了 在此处输入图片描述

但由于阴影方块是随机选择的,因此输出应该会发生变化。

以下是代码:

\documentclass{article}
\usepackage{tikz}
\parindent=0pt

\newcommand\RandomSquareInGrid[1][8]{%
  \begin{tikzpicture}[scale=0.2,x=2.54cm, y=2.54cm]
    \foreach \x in {0,...,#1} {% draw the grid
      \draw(\x,0) -- ++(0,#1);
      \draw(0,\x) -- ++(#1,0);
    }
    \pgfmathsetmacro\xrnd{random(#1)}% choose a random square to shade
    \pgfmathsetmacro\yrnd{random(#1)}
    \draw[fill=lightgray](\xrnd,\yrnd) rectangle ++ (-1,-1);
  \end{tikzpicture}%
}
\begin{document}

  \RandomSquareInGrid \quad
  \RandomSquareInGrid \quad
  \RandomSquareInGrid

  \RandomSquareInGrid[4] \quad
  \RandomSquareInGrid[10]

\end{document}

实际上,与其像我一样“手工”绘制网格,不如使用tikzgrid 命令。请注意,我添加scale=0.2只是为了更轻松地查看输出。

相关内容