从 foreach 中的字符串列表中随机抽取字符串

从 foreach 中的字符串列表中随机抽取字符串

我有一个字符串列表{happiness, only, real, when, shared},想从这个列表中进行采样\foreach

尽管这是一个非常简单的问题,但我在网上找不到任何解决方案。

任何想法?

答案1

我假设你想使用\foreach使用前列腺素包裹。

从问题来看,这并不是您真正想用这个列表做什么。如果您只是想循环它,一个简单的\foraech循环就可以了:

\foreach \x in {happiness, only, real, when, shared} { \x }

如果您将列表存储在宏中,\states那么它的工作方式完全相同:

\foreach \x in \states { \x }

另一方面,如果您想从列表中选择一个随机元素,那么您应该使用以下命令将其声明为随机列表:

\pgfmathdeclarerandomlist{states}{{happiness}{only}{real}{when}{shared}}

现在,您可以使用 随机访问列表中的元素\pgfmathrandomitem。这里唯一的区别是 将\pgfmathrandomitem其输出存储到宏中,因此您需要使用类似

\pgfmathrandomitem{\state}{states}\state

然后您可以使用\state上述所有方法。

以下是演示所有这些方法的完整 MWE:

\documentclass{article}
\usepackage{pgffor}
\begin{document}

  \foreach \x in {happiness, only, real, when, shared} { \x }

  \newcommand\states{happiness, only, real, when, shared}

  \foreach \x in \states { \x }

  \pgfmathdeclarerandomlist{states}{{happiness}{only}{real}{when}{shared}}

  \pgfmathrandomitem{\state}{states}\state

  \foreach \x in {1,...,5} {\pgfmathrandomitem{\state}{states}\state\space}

\end{document}

答案2

这是一个简单的 l3 版本。重要的部分是最后一个带有 的部分\clist_item,因为它会从列表中生成一个随机项。

映射

\documentclass{article}
\usepackage{expl3}

\begin{document}
\ExplSyntaxOn
\clist_new:N \l__valentin_my_clist
\clist_set:Nn \l__valentin_my_clist {happiness, only, real, when, shared}
\cs_set:Npn \__valentin_mapper #1 {
    \noindent Argument:~#1\\
}
\clist_map_function:NN \l__valentin_my_clist \__valentin_mapper
\clist_item:Nn \l__valentin_my_clist {\fp_eval:n {randint(1,\clist_count:N \l__valentin_my_clist)}}
\ExplSyntaxOff
\end{document}

相关内容