假设在(wx)Maxima会话中我有以下
f:sin(x);
df:diff(f,x);
现在我想让它输出一个包含类似内容的文本文件,例如
如果$ f(x)= \ sin(x)$,则$ f ^ \ prime(x)= \ cos(x)$。
我找到了tex
和tex1
函数,但我认为我需要一些额外的字符串处理才能完成我想要的工作。
任何帮助表示感谢。
编辑:进一步澄清。
Auto Multiple Choice是一款可以帮助您创建和管理问卷的软件。要声明问题,可以使用LaTeX语法。从AMC的documentation,问题如下:
\element{geographie}{
\begin{question}{Cameroon}
Which is the capital city of Cameroon?
\begin{choices}
\correctchoice{Yaoundé}
\wrongchoice{Douala}
\wrongchoice{Abou-Dabi}
\end{choices}
\end{question}
}
可以看出,它只是LaTeX。现在,通过一些修改,我可以将这个例子变成一个数学问题
\element{derivatives}{
\begin{question}{trig_fun_diff_1}
If $f(x)=\sin(x)$ then $f^\prime(0)$ is
\begin{choices}
\correctchoice{$1$}
\wrongchoice{$-1$}
\wrongchoice{$0$}
\end{choices}
\end{question}
}
这是我想要的那种输出。比方说,我会有一个函数列表然后执行一个循环来计算它们的导数等等。
答案 0 :(得分:1)
嗯,tex
是TeX输出功能。它可以通过texput
(参见)在某种程度上进行自定义。
关于通过字符串操作进行后处理,我不推荐它。但是,如果您想沿着这条路前进,可以通过load(sregex)
访问正则表达式函数。不幸的是,它还没有记录;有关示例,请参阅sregex.lisp
的注释标题(在Maxima安装中的某个位置)。
答案 1 :(得分:1)
好的,回答您的更新问题。我的建议是将问题和答案作为表达式使用 - 首先构建问题列表,然后在结构中列出所需的列表,然后输出TeX文件作为最后一步。使用表达式通常比使用字符串更清晰,更简单。
E.g。这是一种简单的方法。我将使用3
来定义一个结构,以便我可以按名称引用它的部分。
defstruct
你也可以写
defstruct (question (name, datum, item, correct, incorrect));
myq1 : new (question);
myq1@name : "trig_fun_diff_1";
myq1@datum : f(x) = sin(x);
myq1@item : 'at ('diff (f(x), x), x = 0);
myq1@correct : 1;
myq1@incorrect : [0, -1];
我不知道哪种形式对您更方便。
然后你可以创建一个与此类似的输出函数:
myq1 : question ("trig_fun_diff_1", f(x) = sin(x),
'at ('diff (f(x), x), x = 0), 1, [0, -1]);
其中tex_question (q, output_stream) :=
(printf (output_stream, "\\begin{question}{~a}~%", q@name),
printf (output_stream, "If $~a$, then $~a$ is:~%", tex1 (q@datum), tex1 (q@item)),
printf (output_stream, "\\begin{choices}~%"),
/* make a list comprising correct and incorrect here */
/* shuffle the list (see random_permutation) */
/* output each correct or incorrect here */
printf (output_stream, "\\end{choices}~%"),
printf (output_stream, "\\end{question}~%));
是output_stream
返回的输出流(见)。
可能需要尝试不同的东西才能让衍生品以您想要的格式输出。我的建议是将其逻辑放入输出函数中。
使用表达式的一个副作用是输出除TeX之外的一些表示(例如纯文本,XML,HTML)是直截了当的。这可能会或可能不会对您的项目变得重要。