我想在 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}