我有一个列表,然后从中随机选择了两件物品。
但这两项总是相同的。为什么?
\documentclass{article}
\usepackage{pgf}
\usepackage{pgffor}
\pgfmathsetseed{\number\pdfrandomseed}
\newcommand{\InitVariables}
{%
\pgfmathdeclarerandomlist{List}{{2}{3}{4}{5}{6}{7}{8}{9}}
\pgfmathrandomitem{\VarA}{List}
\pgfmathrandomitem{\VarB}{List}
}
\begin{document}
ATTEMPT ONE
\InitVariables
Variable A is \VarA .
Variable B is \VarB .
ATTEMPT TWO
\InitVariables
Variable A is \VarA .
Variable B is \VarB .
ATTEMPT THREE
\InitVariables
Variable A is \VarA .
Variable B is \VarB .
\end{document}
答案1
\pgfmathrandomitem
实际上并没有定义\varA
为随机选择的项目,而是将其定义为选择这样的项目,然后\VarB
得到相同的定义,两者都被定义为
> \VarB=macro:
->\csname pgfmath@randomlist@List@\pgfmath@randomtemp \endcsname .
如图所示\show
。
这里的项是不可扩展的,您可以简单地扩展定义以将实际值放入宏中,如第二和第四个所示\show
。
> \VarA=macro:
->5.
示例文档:
\documentclass{article}
\usepackage{pgf}
\usepackage{pgffor}
\pgfmathsetseed{\number\pdfrandomseed}
\newcommand{\InitVariables}
{%
\pgfmathdeclarerandomlist{List}{{2}{3}{4}{5}{6}{7}{8}{9}}
\pgfmathrandomitem{\VarA}{List}
\show\VarA
\edef\VarA{\VarA}
\show\VarA
\pgfmathrandomitem{\VarB}{List}
\show\VarB
\edef\VarB{\VarB}
\show\VarB
}
\begin{document}
ATTEMPT ONE
\InitVariables
Variable A is \VarA .
Variable B is \VarB .
ATTEMPT TWO
\InitVariables
Variable A is \VarA .
Variable B is \VarB .
ATTEMPT THREE
\InitVariables
Variable A is \VarA .
Variable B is \VarB .
\end{document}