问题描述
我正在开发一个到 Maxima 的接口(来自 R),它在启动时通过 init 文件更改 maxima 的输出显示:
load("mactex-utilities")$
load("alt-display.mac")$
set_prompt('prefix,"prompt;>>")$
set_prompt('suffix,"<<prompt;")$
my_display(x):=(?princ("out;>>"),?princ("(%o"),?princ(linenum),?princ(") "),tex(?caddr(x)),?princ("<<out;"))$
set_alt_display(2,my_display)$
现在我正在尝试处理 Maxima 提示用户声明关于变量的假设的情况,如本例所示:
(%i1) L: sqrt(1 - 1/(R^2));
1
(%o1) sqrt(1 - --)
2
R
(%i2) integrate(x,x,L);
Is R positive or negative?
positive;
2
R - 1
(%o2) ------
2
2 R
(%i3)
所以默认显示的是提示信息“R是正数还是负数?”。但是,当我使用上面的初始化文件时,不会打印此消息。但是,控制台会等待用户输入。所以我的问题是,如果有办法,我可以将它包含在我的自定义输出中。最好,我认为应该也可以将它包装在前/后缀字符串中,以便我的界面正确捕获它,但我不太熟悉 maxima 内部结构。
只是为了记录,我的界面的 repo 是 https://www.github.com/rcst/rmaxima
解决方法
此主题已在 maxima 邮件列表 (here) 上解决
本质上这似乎是 alt-display.lisp
代码中的一个错误
感谢 Leo Butler,这里是初始化脚本的重写版本,此外还自定义了规避问题的用户提示消息。
(load("mactex-utilities"),load("alt-display.mac"));
(set_prompt('prefix,"prompt;>>",'suffix,"<<prompt;"),my_display(x):=block([type],type:?caar(x),if type=?mtext then printf(true,"~%TEXT;>>~%~a~%<<TEXT;~%",?cadr(x))
else if type=?mlabel then printf(true,"~%out;>>~%(~a) ~a~a~a~%<<out;~%",?cadr(x),"$$",tex1(?caddr(x)),"$$")
else block([alt_display1d:false,alt_display2d:false],displa(x))),set_alt_display(2,my_display)) $
当使用它来初始化最大值时,上面例子的输出是
prompt;>>(%i1) <<prompt;L: sqrt(1 - 1/(R^2));
out;>>
(%o1) $$\sqrt{1-\frac{1}{R^2}}$$
<<out;
prompt;>>(%i2) <<prompt;integrate(x,x,L);
prompt;>>
TEXT;>>Is R positive or negative?<<TEXT;
<<prompt;
p;
out;>>
(%o2) $$\frac{R^2-1}{2\,R^2}$$
<<out;
prompt;>>(%i3) <<prompt;