我正在尝试使用\pgfmathrandomlist
s。
我知道该命令\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
。