pgfkeys 计算(即动态定义)的密钥

pgfkeys 计算(即动态定义)的密钥

我想在 latex/tikz 中执行一些简单的模拟(以生成动态图)。比如说细胞自动机、Ising 模型等。

我需要将变量的值存储在某个地方(一个数组),我尝试了 pgfkeys。但是,它似乎不接受“计算”键。这是一个最小示例

%storing (and printing for check)
  \foreach \i in {0,...,5} {
     \FPrandom{\rand}\FPeval{res}{round(rand:2)};
     \pgfkeys{/c/\i/.code=\res};
     \draw (\i, 0)  node{\pgfkeys{/c/\i}};
  }

%retrieving 
  \foreach \i in {0,...,5} {
     \draw (\i, 0)  node{\pgfkeys{/c/\i}};
  }

它说键 /c/0 ... 是未知的。

我认为这是因为在使用之前需要扩展键内的“\i”,但我不知道如何获取它。

答案1

foreach 循环引入一个组并执行该组内的内容。因此键(实际上是宏)会一直存在,直到该组结束,然后消失。常规 TikZ 命令会立即执行,因此这不会造成问题。您可以引入一个全局宏并在其中累积键,而不是破解此行为。然后在 foreach 之外,您可以一次性设置它们。

我使用了 pgfmath 代替fp但这并不相关。

\documentclass{article}
\usepackage{pgf,pgffor}
\pgfmathsetseed{\pdfuniformdeviate 10000000}% Faster random seed
\begin{document}

%storing (and printing for check)

\def\temp{}
\foreach \i in {0,...,5} {
    \pgfmathsetmacro\res{rand/2}%
    \pgfmathprintnumber[fixed,fixed zerofill,precision=2]{\res}
    \xdef\temp{\temp,/c/\i/.initial=0,/c/\i=\res}% Append to existing `\temp`
}
\expandafter\pgfkeys\expandafter{\temp} % First expand \temp then execute pgfkeys

%retrieving 
\foreach \i in {0,...,5} {
   \pgfmathprintnumber[fixed,fixed zerofill,precision=2]{\pgfkeysvalueof{/c/\i}}
}

\end{document}

在此处输入图片描述

相关内容