我正在尝试创建由随机数生成的代数测验,每个练习的变量都是字母表中的随机字母。
我想我可以得出随机数。
不确定如何生成随机字母。 中是否有此功能pgf
?还是我必须使用\pgfmathdeclarerandomlist{\listname}{<EntireAlphabet>}
和\pgfmathrandomitem
?
答案1
因为我们处理的是 TeX,谁在乎效率
\documentclass[]{article}
\usepackage{pgffor,pgfmath}
\def\getrandomletter{%
\pgfmathrandominteger{\mytemp}{1}{26}%
\foreach\x[count=\xi] in{a,...,z}{\ifnum\xi=\mytemp\x\breakforeach\fi}%
}
\begin{document}
\foreach\x in{1,...,26}{\getrandomletter}
\end{document}
我太傻了,没记住alphalph
这个包。它将数字转换成各种符号。
\documentclass[]{article}
\usepackage{pgffor,pgfmath,alphalph}
\def\getrandomletter{\pgfmathrandominteger{\mytemp}{1}{26}\alphalph{\mytemp}}
\begin{document}
\foreach\x in{1,...,26}{\getrandomletter}
\end{document}
给出相同的输出。
好吧,我继续傻下去。pgffor
已经理解字母将数字转换为字母。所以我们不需要alphalph
。我会多喝点咖啡。
\documentclass[]{article}
\usepackage{pgffor,pgfmath}
\def\getrandomletter{\pgfmathrandominteger{\zzz}{1}{26}\csname pgffor@alpha\endcsname{\zzz}}
\begin{document}
\foreach\x in{1,...,26}{\getrandomletter}
\end{document}
答案2
仅使用普通的 TeX 宏,您可以执行以下操作:
\input random
\newcount\code
\def\ranx{\setrannum\code{`a}{`z}\char\code}
\ranx \ranx \ranx \ranx \ranx \ranx \ranx \ranx \ranx
\bye
答案3
以下内容(目前)不适用于 XeLaTeX:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewExpandableDocumentCommand{\randomletter}{}
{
\int_to_alph:n { \fp_eval:n { randint(1,26) } }
}
\NewExpandableDocumentCommand{\randomLetter}{}
{
\int_to_Alph:n { \fp_eval:n { randint(1,26) } }
}
\ExplSyntaxOff
\begin{document}
\randomletter\ \randomletter\ \randomletter\ \randomletter\ \randomletter
\randomLetter\ \randomLetter\ \randomLetter\ \randomLetter\ \randomLetter
\end{document}