0

我从批处理脚本中调用了 Maxima tex1,如下所示:

maxima --very-quiet -r "tex1(solve(8*x^2+7*x+5));" | grep -v false > output.txt

我得到output.txt如下:

 \left[ x=-{{\sqrt{111}\,i+7}\over{16}} , x={{\sqrt{111}\,i-7}\over{16}} \righ\
t] 

这作为 (La)TeX 输入文件无效。

如何防止 Maximatex1包装其输出?

4

2 回答 2

2

这么晚才回复很抱歉。

代替

tex1(解决(8*x^2+7*x+5));

写:

?princ(tex1(求解(8*x^2+7*x+5)))$

问题是 tex1 返回的字符串正在由显示格式化程序打印(如果您在交互式会话中使用 Maxima,该函数将打印该字符串)。显示格式化程序以 linel 字符(默认 = 79)分隔字符串并插入反斜杠。相反,出于您的目的,您希望完全避开显示格式化程序,因此您使用 ?princ (仅打印字符串的 Lisp 函数)打印字符串,并使用“$”而不是“;”终止输入 告诉 Maxima 不要调用显示格式化程序。

请注意,MYPRINC 中的硬编码常量 70 在这里不起作用。在给出的示例中未调用 MYPRINC。

于 2011-09-11T23:51:19.303 回答
1

不幸的是,这是硬编码到 Maxima 中的。解决此问题的一种方法是编辑文件中的 myprinc 函数maxima/src/mactex.lisp。有cond一个 70. 写在那里的表格,它应该是 linel 而不是 70。如果您在进行此更改后重新编译最大值,那么以下将起作用:

maxima --very-quiet -r "linel: 1000$ tex1(solve(8*x^2+7*x+5));" | grep -v false > output.txt

无论如何,我会尽快将补丁发送到 Maxima 列表,以便该程序的未来版本不会有这个缺点。

于 2011-06-11T14:47:38.647 回答