答案1
以下是使用该包的实现sagetex
。它利用了开源计算机代数系统,智者,它不属于 LaTeX 发行版。它还允许使用 Python 进行编程。
\documentclass{article}%
% -----------------------------The preamble ------------------------------------
\usepackage{fix-cm}% allow for a bigger font
% mathematical typesetting, fonts, and symbols
\usepackage{amsmath, amsfonts, amssymb}
\usepackage[T1]{fontenc}% change the fonts
\usepackage[margin=.5in]{geometry}% sets the margins
\usepackage{sagetex}% use Sage for it's math ability
\pagestyle{empty} % remove the page numbers
% -----------------------------End of the preamble ------------------------------
\begin{document}
\fontsize{17pt}{20pt}\selectfont %sets font size
\noindent
\begin{sagesilent}
def Problems(rows,columns):
output = r""
output += r"\begin{tabular}{r"+"r"*(2*columns)+"}"
for i in range(0,rows):
minuend = [Integer(randint(5,25)) for i in range(0,columns)]
subtrahend = [Integer(randint(-10,10)) for i in range(0,columns)]
for j in range(0,columns):
if j<columns-1:
output += r"%s & \hspace{.2in} &"%(minuend[j])
else:
output += r"%s \\"%(minuend[j])
##### second row #####
for j in range(0,columns):
if j<columns-1:
output += r"\underline{- %s} & \hspace{.5in} &"%(subtrahend[j])
else:
output += r"\underline{- %s}\\\\\\"%(subtrahend[j])
output += r"\end{tabular}"
return output
outputP = r""
outputP += Problems(4,5)
\end{sagesilent}
\begin{center}
\sagestr{outputP}
\end{center}
\end{document}
一些评论:
- output += r"\begin{tabular}{r"+"r"*(2*columns)+"}" 使用 Python 设置列数。由于问题之间应该有空格,因此添加了额外的列。能够调整使用的列使该
sagetex
方法非常方便。 - minuend = [Integer(randint(5,25)) for i in range(0,columns)] 将被减数设置为 5 到 25 之间的随机整数,而 subtrahend = [Integer(randint(-10,10)) for i in range(0,columns)] 将值设置在 -10 到 10 之间。
- 字体大小已增大,使得工作表更易于阅读。
- outputP += Problems(4,5) 会创建 4 行,每行 5 个问题(20 个问题)。通过调整这些数字,您可以轻松更改工作表中的问题数量。
最简单的方法sagetex
是打开一个免费的可钙帐户。
答案2
下面是一个实现expl3
。
\documentclass{article}
\usepackage{xparse,array}
\ExplSyntaxOn
\NewDocumentCommand{\randomsubtractions}{mm}
{% #1 = rows, #2 = columns
\zuriel_randomsubtractions:nn { #1 } { #2 }
}
\NewDocumentCommand{\boundsfirst}{mm}
{
\int_set:Nn \l_zuriel_first_lb_int { #1 }
\int_set:Nn \l_zuriel_first_ub_int { #2 }
}
\NewDocumentCommand{\boundssecond}{mm}
{
\int_set:Nn \l_zuriel_second_lb_int { #1 }
\int_set:Nn \l_zuriel_second_ub_int { #2 }
}
\int_new:N \l_zuriel_first_lb_int
\int_new:N \l_zuriel_first_ub_int
\int_new:N \l_zuriel_second_lb_int
\int_new:N \l_zuriel_second_ub_int
\cs_new_protected:Nn \zuriel_randomsubtractions:nn
{
\group_begin:
\setlength{\tabcolsep}{2em}
\begin{tabular}{ @{} *{#2}{>{$}c<{$}} c @{\hspace{-\tabcolsep}} }
\prg_replicate:nn { #1 } { \__zuriel_randomsubtraction_row:n { #2 } \\[6ex] }
\end{tabular}
\group_end:
}
\cs_new_protected:Nn \__zuriel_randomsubtraction_row:n
{
\prg_replicate:nn { #1 } { \__zuriel_randomsubtraction: & }
}
\cs_new_protected:Nn \__zuriel_randomsubtraction:
{
\begin{array}{@{} r @{}}
\int_rand:nn { \l_zuriel_first_lb_int } { \l_zuriel_first_ub_int } \\
- \int_rand:nn { \l_zuriel_second_lb_int } { \l_zuriel_second_ub_int } \\
\hline
\end{array}
}
\ExplSyntaxOff
\begin{document}
\boundsfirst{-10}{10} \boundssecond{1}{10}
\randomsubtractions{5}{5}
\end{document}