我有一个字符串列表{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}