访问数据时 Latex 挂起

访问数据时 Latex 挂起

tikz我有以下代码,它使用包含数字数组的包生成图片。如果我更改该行:

\pgfmathsetmacro{\r}{\reds[\index]}

访问更大的数组:

\pgfmathsetmacro{\r}{\REDS[\index]}

构建过程就挂起了。我做错了什么?

\def\res{32}
\def\scale{0.22}

\def\reds
{{
1.00, 0.00, 1.00
}}

\def\REDS
{{
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00
}}

\begin{figure}[htb]
    \centering
    \mbox{} \hfill
\begin{tikzpicture}

    \foreach \x in {1,...,\res}{
        \foreach \y in {1,...,\res}{

            \pgfmathparse{(\x-0.5)*\scale-\scale}\edef\blx{\pgfmathresult}
            \pgfmathparse{(\y-0.5)*\scale-\scale}\edef\bly{\pgfmathresult}
            \pgfmathparse{(\x-0.5)*\scale}\edef\trx{\pgfmathresult}
            \pgfmathparse{(\y-0.5)*\scale}\edef\try{\pgfmathresult}

            \pgfmathparse{mod(((\x-1)*\res + \y-1),3)}\edef\index{\pgfmathresult}
            \pgfmathsetmacro{\r}{\reds[\index]}

            \definecolor{col}{rgb}{\r,0.7,0.4}

            \fill[col] (\blx,\bly) rectangle (\trx,\try);
        }
    }

\end{tikzpicture}

\end{figure}

答案1

如果你等待足够长的时间,就会得到结果。但我不知道你为什么要从 32x32 的数组中查找介于 0 和 2 之间的值。

\documentclass{article}
\usepackage{tikz}
\begin{document}
\def\res{32}
\def\scale{0.22}
\def\reds{{1.00, 0.00, 1.00}}
\def\REDS
{{
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00
}}
\begin{tikzpicture}
    \foreach \x in {1,...,\res}{
        \foreach \y in {1,...,\res}{
            \pgfmathsetmacro{\blx}{(\x-0.5)*\scale-\scale}
            \pgfmathsetmacro{\bly}{(\y-0.5)*\scale-\scale}
            \pgfmathsetmacro{\trx}{(\x-0.5)*\scale}
            \pgfmathsetmacro{\try}{(\y-0.5)*\scale}
            \pgfmathtruncatemacro\index{mod(((\x-1)*\res + \y-1),3)}
            \pgfmathsetmacro{\r}{\REDS[\index]}
            \definecolor{col}{rgb}{\r,0.7,0.4}
            \fill[col] (\blx,\bly) rectangle (\trx,\try);
        }
    }

\end{tikzpicture}
\end{document}

相关内容