我想创建一个包含随机问题及其解决方案的工作表。以下尝试未成功,抛出“段落在 \multido@@ 完成之前结束。“
\documentclass[11pt,twocolumn]{scrartcl}
\usepackage{sagetex}
\usepackage{multido}
\begin{document}
\begin{sagesilent}
x, y = var('x, y')
\end{sagesilent}
\multido{}{5}{
\begin{sagesilent}
a = Integer(randint(1,9))
b = Integer(randint(1,9))
c = Integer(randint(1,9))
d = Integer(randint(1,9))
e = Integer(randint(1,9))
f = Integer(randint(1,9))
\end{sagesilent}
\begin{eqnarray*}
\sage{a}x+\sage{b}y&=&\sage{c} \\
\sage{d}x+\sage{e}y&=&\sage{f}
\end{eqnarray*}
\begin{sagesilent}
sol=solve([a*x+b*y==-c,d*x+e*y==f],x,y)
\end{sagesilent}
Sol: $\sage{sol}$
}
\end{document}
你知道我该怎么做吗?谢谢!
答案1
该sagetex
软件包会经过 1. LaTeX 编译,然后是 2. Sage 编译(执行所有计算),然后是 3. LaTeX 编译,将步骤 2 中的计算插入到 LaTeX 文档中。当您使用包含命令的 multido 时,sage
您的文档将在第一次通过时失败,因为 LaTeX 编译依赖于sage
尚未计算的计算。您无法通过这种方式构建文档。这是一种实现您想要的可能方法。
\documentclass[11pt,twocolumn]{scrartcl}
\usepackage{sagetex}
\usepackage{amsmath}
\begin{document}
Try this:\\\\
\noindent
\begin{sagesilent}
x, y = var('x,y')
output = r""
for i in range(0,5):
a = Integer(randint(1,9))
b = Integer(randint(1,9))
c = Integer(randint(1,9))
d = Integer(randint(1,9))
e = Integer(randint(1,9))
f = Integer(randint(1,9))
output += r"\begin{tabular}{ccc}"
output += r"$%s x+%s y$ & $=$ & $%s$\\ "%(a,b,c)
output += r"$%s x+ %s y$ & $=$ & $%s$\\ "%(d,e,f)
output += r"\end{tabular}\\"
eqns = [a*x+b*y==-c, d*x+e*y==f]
sol = solve(eqns,x,y,solution_dict=True)
for ans in sol:
output += r"\\Sol: $x=%s, y=%s$ \\\\"%(latex(ans[x]), latex(ans[y]))
\end{sagesilent}
\sagestr{output}
\end{document}
现在没有 LaTeX 文档可言,因为它sagestr
是编译过程的一部分sage
。因此第一次 LaTeX 编译没有问题。sage
接下来是编译,通过将输出放入 LaTeX 代码字符串中,所有计算和 LaTeX 代码都会插入到编译的第三步中。结果显示在 Sagemath Cloud 中运行。
请注意,在尝试打印出解决方案时,您将获得一个列表。我已经说明了如何获取“x”和“y”,并使用latex()
上述命令在 LaTeX 中打印它们这里