我正在尝试寻找一种更简单的方法来生成随机乘法表。我想保持格式不变——包括表格和我添加的行等等……有没有更有效的方法来做到这一点?到目前为止,我刚刚自己添加了它们!感谢您的帮助。
\documentclass{exam}
\usepackage{tabularray,paracol}
\begin{document}
\begin{paracol}{5}
\begin{tblr}{|X[1,l]|}
\hline
$11 \times 2$ = \\
\hline
\hline
$6 \times 4$ = \\
\hline
\hline
$8 \times 8$ = \\
\hline
\hline
$3 \times 11$ = \\
\hline
\hline
$9 \times 9$ = \\
\hline
\hline
$7 \times 5$ = \\
\hline
\hline
$10 \times 10$ = \\
\hline
\hline
$4 \times 3$ = \\
\hline
\hline
$2 \times 6$ = \\
\hline
\hline
$5 \times 7$ = \\
\hline
\hline
$11 \times 8$ = \\
\hline
\hline
$8 \times 9$ = \\
\hline
\hline
$6 \times 10$ = \\
\hline
\hline
$3 \times 4$ = \\
\hline
\hline
$9 \times 7$ = \\
\hline
\hline
$7 \times 2$ = \\
\hline
\hline
$10 \times 11$ = \\
\hline
\hline
$4 \times 6$ = \\
\hline
\hline
$2 \times 3$ = \\
\hline
\hline
$5 \times 9$ = \\
\hline
\hline
$11 \times 7$ = \\
\hline
\hline
$8 \times 10$ = \\
\hline
\hline
$6 \times 2$ = \\
\hline
\hline
$3 \times 9$ = \\
\hline
\hline
$9 \times 4$ = \\
\hline
\hline
$7 \times 11$ = \\
\hline
\hline
$10 \times 6$ = \\
\hline
\end{tblr}
\switchcolumn
\begin{tblr}{|X[1,l]|}
\hline
$4 \times 7$ = \\
\hline
\hline
$2 \times 5$ = \\
\hline
\hline
$5 \times 3$ = \\
\hline
\hline
$11 \times 9$ = \\
\hline
\hline
$8 \times 6$ = \\
\hline
\hline
$6 \times 11$ = \\
\hline
\hline
$3 \times 2$ = \\
\hline
\hline
$9 \times 5$ = \\
\hline
\hline
$7 \times 10$ = \\
\hline
\hline
$10 \times 7$ = \\
\hline
\hline
$4 \times 11$ = \\
\hline
\hline
$2 \times 9$ = \\
\hline
\hline
$5 \times 6$ = \\
\hline
\hline
$11 \times 3$ = \\
\hline
\hline
$8 \times 7$ = \\
\hline
\hline
$6 \times 5$ = \\
\hline
\hline
$3 \times 10$ = \\
\hline
\hline
$9 \times 2$ = \\
\hline
\hline
$7 \times 4$ = \\
\hline
\hline
$10 \times 11$ = \\
\hline
\hline
$4 \times 9$ = \\
\hline
\hline
$2 \times 7$ = \\
\hline
\hline
$5 \times 12$ = \\
\hline
\hline
$11 \times 6$ = \\
\hline
\hline
$8 \times 11$ = \\
\hline
\hline
$6 \times 9$ = \\
\hline
\hline
$3 \times 7$ = \\
\hline
\end{tblr}
\switchcolumn
\begin{tblr}{|X[1,l]|}
\hline
$9 \times 3$ = \\
\hline
\hline
$7 \times 8$ = \\
\hline
\hline
$10 \times 5$ = \\
\hline
\hline
$4 \times 2$ = \\
\hline
\hline
$2 \times 10$ = \\
\hline
\hline
$5 \times 4$ = \\
\hline
\hline
$11 \times 12$ = \\
\hline
\hline
$8 \times 5$ = \\
\hline
\hline
$6 \times 7$ = \\
\hline
\hline
$3 \times 12$ = \\
\hline
\hline
$9 \times 1$ = \\
\hline
\hline
$7 \times 6$ = \\
\hline
\hline
$10 \times 9$ = \\
\hline
\hline
$4 \times 5$ = \\
\hline
\hline
$2 \times 8$ = \\
\hline
\hline
$5 \times 11$ = \\
\hline
\hline
$11 \times 5$ = \\
\hline
\hline
$8 \times 12$ = \\
\hline
\hline
$6 \times 3$ = \\
\hline
\hline
$3 \times 6$ = \\
\hline
\hline
$9 \times 10$ = \\
\hline
\hline
$7 \times 1$ = \\
\hline
\hline
$10 \times 4$ = \\
\hline
\hline
$4 \times 10$ = \\
\hline
\hline
$2 \times 6$ = \\
\hline
\hline
$5 \times 8$ = \\
\hline
\hline
$11 \times 11$ = \\
\hline
\end{tblr}
\switchcolumn
\begin{tblr}{|X[1,l]|}
\hline
$8 \times 4$ = \\
\hline
\hline
$6 \times 12$ = \\
\hline
\hline
$3 \times 5$ = \\
\hline
\hline
$9 \times 8$ = \\
\hline
\hline
$7 \times 2$ = \\
\hline
\end{tblr}
\end{paracol}
\end{document}
答案1
和expl3
你有\int_rand:nn
。
这是一种每行设置五个乘法的方法,无需任何表格或paracol
。
\documentclass{article}
\ExplSyntaxOn
\NewDocumentCommand{\randommult}{m}
{% #1 = number of items
\par\addvspace{\topsep}
\group_begin:
\setlength{\parindent}{0pt}
\setlength{\parfillskip}{0pt}
\linespread{1.5}\selectfont
\tse_randommult:n { #1 }
\par
\group_end:
\addvspace{\topsep}
}
\cs_new_protected:Nn \tse_randommult:n
{
\prg_replicate:nn { #1 } { \__tse_randommult: }
\int_compare:nF { \int_mod:nn { #1 } { 5 } = 0 }
{
\prg_replicate:nn { 5 - \int_mod:nn { #1 } { 5 } } { \__tse_randommult_box:Nn \makebox {} }
}
}
\cs_new_protected:Nn \__tse_randommult:
{
\__tse_randommult_box:Nn \framebox { $\int_rand:nn { 1 } { 19 } \times \int_rand:nn { 1 } { 19 } =$ }
}
\cs_new_protected:Nn \__tse_randommult_box:Nn
{
#1[\dim_eval:n { (\textwidth - 4em)/5 }][l]{ #2 } \hspace{1em plus 1 fil}
}
\ExplSyntaxOff
\begin{document}
\section*{Compute the following seventeen multiplications}
\randommult{17}
\section*{Compute the following ten multiplications}
\randommult{10}
\section*{Compute the following nineteen multiplications}
\randommult{19}
\end{document}
答案2
(我已编辑答案以纳入 OP 在评论中提供的信息,即exam
可能使用文档类。)
我正在尝试寻找一种更简单的方法来生成随机乘法表。...有没有更有效的方法来做到这一点?
如果可以自由使用 LuaLaTeX,那么实现 OP 的排版目标就很简单了。下面给出的代码使用了 Lua 的for
循环以及tex.sprint
和math.random
函数。对于整数m>2
,返回从到math.random(2,m)
范围内的均匀分布的整数。在下面使用的代码中,我使用了,因为 OP 代码中使用的最大整数似乎是。请注意,由于 TeX 特殊字符在 Lua 中具有特殊含义,因此需要输入反斜杠字符作为。2
m
math.random(2,12)
12
\
\\
以下布局遵循 OP 示例中提供的布局:3 列,每列 27 个案例,然后是 1 列,每列 5 个案例。为简单起见,我只显示前 8 行,而不是完整答案的所有 27 行。
补充:Lua 代码目前独立抽取伪随机数。由于有 11 个不同的整数,因此连续两个情况相同的概率为 1/121。屏幕截图中第三列的顶部就出现了这种重复情况。如果这被视为有问题,可以添加一些额外的代码来消除这种重复情况。
% !TEX TS-program = lualatex
\documentclass{exam}
\usepackage{array} % for 'w' column type
% The Lua function 'myfunc' does most of the work:
\directlua{
function myfunc ( n )
tex.sprint ( "\\begin{array}[t]{|wl{2.25cm}|}" )
for i = 1,n do
tex.sprint ( "\\hline" .. math.random(2,12) .. "\\times"
.. math.random(2,12) .. "= \\\\ \\hline" )
end
tex.sprint ( "\\end{array}" )
end
}
\begin{document}
\begin{questions}
\begin{question}[86] Solve the following multiplication cases. 1 point per case.
\[
\directlua { myfunc(27) } \qquad
\directlua { myfunc(27) } \qquad
\directlua { myfunc(27) } \qquad
\directlua { myfunc(5) }
\]
\end{question}
\end{questions}
\end{document}