如何清空列表 pgfmath randomlist

如何清空列表 pgfmath randomlist

我正在尝试使用\pgfmathrandomlists。

我知道该命令\pgfmathdeclarerandomlist{list}{{item1}{item2}...}会生成一个列表,并且该命令会\pgfmathrandomitem从列表中选择一个随机项目。

一旦我创建了列表并根据我的需要使用了它,我想清空该列表,以便我可以使用具有相同名称的新列表。我试过了,\pgfmathdeclarerandomlist{list}{}但没有用。

答案1

没有\pgfmathrandomitem真正知道列表是否为空的内部机制。下面的情况显示了这种异常:

\documentclass{article}
\usepackage{pgf}

\makeatletter
\newcommand{\pgfmathclearrandomlist}[1]{%
  \expandafter\global\expandafter\let\csname pgfmath@randomlist@#1\endcsname\relax}
\makeatother

\begin{document}

\pgfmathdeclarerandomlist{list}{{item1}{item2}{item3}{item4}}
\pgfmathrandomitem{\result}{list}\result% Returns item1/item2/item3/item4

\pgfmathdeclarerandomlist{list}{}
\pgfmathrandomitem{\result}{list}\result% Returns item1

\pgfmathdeclarerandomlist{list}{{}}
\pgfmathrandomitem{\result}{list}\result% Returns {}

\pgfmathclearrandomlist{list}
\pgfmathrandomitem{\result}{list}\result% List doesn't exist

\end{document}

第一个指令集创建一个包含四个项目的列表,从中随机选择一个。第二个指令“清除”此列表,尽管输出始终是先前定义的列表中的第一个项目 - item1。您可以通过给它一个空的项目来直观地清除列表 - {},但这可能没有帮助。也许解决方案是更新分配空列表时的工作方式\pgfmathdeclarerandomlist(这将是一个边际更新/补丁,因为它看起来像一个错误),或者使用 正式清除它\pgfmathclearrandomlist

相关内容