Maxima 将乘法的标准tex输出更改为最大值
我们试图改变maxima在转换为tex时转换乘法的方式 默认情况下,maxima给出一个空格:Maxima 将乘法的标准tex输出更改为最大值,maxima,Maxima,我们试图改变maxima在转换为tex时转换乘法的方式 默认情况下,maxima给出一个空格:\, 我们将其更改为我们自己的latex宏,看起来像一个空格,但这样我们保留了sementical的含义,这使得将latex转换回maxima更容易 :lisp (setf (get 'mtimes 'texsym) '("\\invisibletimes ")); 然而,我们有一个问题,那就是当我们进行简化时。我们使用它来生成解释解决方案的步骤。例如: tex1(block([simp: false
\,
我们将其更改为我们自己的latex宏,看起来像一个空格,但这样我们保留了sementical的含义,这使得将latex转换回maxima更容易
:lisp (setf (get 'mtimes 'texsym) '("\\invisibletimes "));
然而,我们有一个问题,那就是当我们进行简化时。我们使用它来生成解释解决方案的步骤。例如:
tex1(block([simp: false], 2*3));
当然,在乘法时,我们可以使用显式乘法(\cdot)
所以我们希望,如果乘法的两个参数都是数字,那么在转换为tex时,我们有一个\cdot
可能吗?是的,如果有一个由TEX属性命名的函数,则调用该函数来处理表达式。由TEX命名的函数有3个参数,即一个表达式,其运算符与TEX属性所附加的运算符相同,stuff位于左侧,stuff位于右侧,TEX函数返回一个字符串列表,这些字符串是应输出的TEX位 您可以说
:lisp(trace-tex-mtimes)
来了解它是如何工作的。您可以通过说出:lisp(symbol plist'MTIMES)
来查看附加到MTIMES或其他运算符的函数,或者对于另一个mfoo运算符,通常可以看到:lisp(symbol plist'mfoo)
因此,如果您用其他函数替换TEX-MTIMES(通过:lisp(setf(get'MTIMES'TEX)
)我的TEX-MTIMES),那么您可以在更大程度上控制输出。以下是适合您使用的功能的概要:
(defun my-tex-mtimes (e l r)
(if $simp
(tex-nary e l r) ;; punt to default handler
(tex-mtimes-special-case e l r)))
您可以使TEX-MTIMES-SPECIAL-CASE尽可能复杂。我假设您可以为此执行Lisp编程。最简单的尝试,也许是进一步努力的出发点,就是暂时用\cdot
替换TEXSYM。比如:
(defun tex-mtimes-special-case (e l r)
(let ((prev-texsym (get 'mtimes 'texsym)))
(prog2 (setf (get 'mtimes 'texsym) (list "\\cdot "))
(tex-nary e l r)
(setf (get 'mtimes 'texsym) prev-texsym))))