更改最大乘法的标准tex输出

时间:2018-11-21 15:29:07

标签: maxima

我们尝试更改在转换为tex时最大值转换乘法的方式。

默认情况下,最大值会提供一个空格:\,

我们将其更改为我们自己的乳胶宏,看起来像一个空间,但是这样我们保留了特殊的含义,这使得将乳胶转换回最大值变得更容易。

:lisp (setf (get 'mtimes 'texsym) '("\\invisibletimes "));

但是,我们有一个问题,那就是简化程序。我们将其用于生成解决方案说明中的步骤。例如:

tex1(block([simp: false], 2*3));

当然,在将数字相乘时,我们可能需要显式乘法(\ cdot)。

因此,我们希望如果乘法的两个参数都是数字,那么在转换为tex时,我们将拥有一个\cdot

有可能吗?

1 个答案:

答案 0 :(得分:1)

是的,如果有一个由TEX属性命名的函数,则调用该函数来处理表达式。 TEX命名的函数带有3个参数,即具有与TEX属性相连的相同运算符的表达式,左侧填充和右侧填充,并且TEX函数返回字符串列表,这些字符串是TeX的位应该输出。

您可以说:lisp (trace tex-mtimes)看看它是如何工作的。您可以通过说:lisp (symbol-plist 'mtimes)或通常说:lisp (symbol-plist 'mfoo)来表示另一个MFOO运算符,来查看附加到MTIMES或其他运算符的功能。

因此,如果将TEX-MTIMES(用:lisp (setf (get 'mtimes 'tex) 'my-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))))