如何在循环中使用 sage 命令?

如何在循环中使用 sage 命令?

我想创建一个包含随机问题及其解决方案的工作表。以下尝试未成功,抛出“段落在 \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 中打印它们这里 enter image description here

答案2

这不是真正的答案,但我还不能发表评论。你可以尝试阅读此文章

如果您想给学生发作业,这种方法很有意义,但如果您计划进行不同的测试,这种方法就不太管用了。在最后一种情况下,我的(丑陋的)解决方法是从 sagemath 笔记本中生成一个带有所有 latex 代码的 exams.txt 文件,然后使用 latex 插入其中。\input{exams.txt} 优点是您可以再次编译 .tex 文件而不覆盖它。我对更优雅的解决方案感兴趣。这是一个例子 你可以从第50页找到解决方案。

相关内容