循环中随机排列数字

循环中随机排列数字

我想要一份文档,其中将打印完全相同的一定页数的页面,并且每页都应该有一个唯一的编号。

我知道如何用循环来实现这一点,但是我不想要随机顺序的数字,如 5,2,7,10,1,....(没有任何双数,也没有超出范围的数字)。

是否可以在 LaTeX 中执行此操作?我会给出一个数字,然后我会得到一个可以在循环中使用它的随机数字数组?(我不想通过某些外部脚本创建列表,因为数字可能不同)。

LaTeX 有没有办法实现这样的功能?非常感谢!

(背景:我想在考试中用数字来指代学生,以便最后制作一个匿名名单。当数字按自然顺序排列时,每个人都可以在考试中看到邻居的分数。目前我正在打印后进行洗牌)

编辑:目前,我正在使用这种代码。我希望有一个解决方案,即计算出一个新的数量\randno,我可以在循环中使用它,而不是examno

\documentclass{article}
\newcounter{examno} \setcounter{examno}{1}
\newcommand{\numbermax}{7}

\begin{document}
\loop
Test. This is exam no. \arabic{examno} \pagebreak
\ifnum\value{examno}<\numbermax
\stepcounter{examno}
\repeat
\end{document}

答案1

感谢评论中的所有用户。我使用了percusse来自如何随机打乱切片图像的顺序?

解决我的问题的完整示例如下:

\documentclass{article}
\usepackage{tikz,xstring}

\def\mylist{}
\def\myrandlist{}

\newcommand{\numbermax}{17}

\foreach \x in {1,...,\numbermax}{ %Generate list
\xdef\mylist{\mylist\noexpand{\x\noexpand}}
}

\begin{document}

% Shuffle list
\pgfmathdeclarerandomlist{mynum}{\mylist} %Define the list 
\foreach \x in {1,...,\numbermax}{
\pgfmathrandomitem{\mynum}{mynum} % Pick one from that list
\xdef\myrandlist{\myrandlist,\mynum} % place in the new list
\StrSubstitute{\mylist}{{\mynum}}{}[\sublist] % Delete that entry from the list
\global\let\mylist\sublist % Update the main list
\pgfmathdeclarerandomlist{mynum}{\mylist} % Redefine the list
}
\xdef\myrandlist{\myrandlist,} % puts comma at the end of list

\foreach \x in {1,...,\numbermax} {%Generate exam
\pgfmathtruncatemacro{\xnext}{\x+1}
Test. This is exam no. \StrBetween[\x,\xnext]{\myrandlist}{,}{,}

}

\end{document}

非常感谢!!(我很抱歉回答我自己的问题,但我认为有人可能会对回答问题的整个代码感兴趣。)

相关内容