我想生成一个随机数,并以此检查 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