我想要一份文档,其中将打印完全相同的一定页数的页面,并且每页都应该有一个唯一的编号。
我知道如何用循环来实现这一点,但是我不想要随机顺序的数字,如 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}
非常感谢!!(我很抱歉回答我自己的问题,但我认为有人可能会对回答问题的整个代码感兴趣。)