随机数和 if 语句

随机数和 if 语句

我想生成一个随机数,并以此检查 if 语句。但是它不起作用。我尝试了以下方法:

\documentclass{minimal}
\usepackage[first=0, last=1]{lcg}
\newcommand{\random}{\rand\arabic{rand}}
\begin{document}

\def\var{\random}

\ifnum\var=1
We have a one.
\fi

\ifnum\var=0
We have a zero.
\fi

\end{document}`

我认为原因可能是变量 \var 与 0 或 1 的类型不同。有人可以帮忙吗?

答案1

\rand不是“可扩展的”。它是设置计数器的指令,即设置rand为某个值。

因此,\ifnum找到的不仅仅是一个数字,而是一组产生数字的指令。

您可以使用间接方法来避免此问题:

\documentclass{article}
\usepackage[first=0, last=1]{lcg}

\newcommand{\newrandomvar}[1]{%
  \newcommand{#1}{}% be sure the name is not taken
  \rand
  \edef#1{\arabic{rand}}% note \edef to end up with the actual value
}

\begin{document}

\newrandomvar{\var}

\ifnum\var=1
We have a one.
\fi

\ifnum\var=0
We have a zero.
\fi

\end{document}

一个“更现代”的版本。

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\newrandomvar}{m}
 {
  \tl_new:N #1
  \tl_set:Nx #1 { \int_rand:nn { 0 } { 1 } }
 }
\NewExpandableDocumentCommand{\vartest}{mmm}
 {
  \int_compare:nTF { #1 = 0 } { #2 } { #3 }
 }
\ExplSyntaxOff

\begin{document}

\newrandomvar{\var}

\ifnum\var=1
We have a one.
\fi

\ifnum\var=0
We have a zero.
\fi

We have a \vartest{\var}{zero}{one}.

\end{document}

答案2

“更现代”的版本应该是这样的:

\ifcase \pdfuniformdeviate2 We have zero\or We have one\fi

这里使用了pdfTeX原语\pdfuniformdeviate和TeX原语。\ifcase

扩展为从到 的\pdfuniformdeviate <number>一个随机数。0<number>-1

相关内容