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

Posted

技术标签:

【中文标题】更改最大值乘法的标准tex输出【英文标题】:Change standard tex output of multiplication in maxima 【发布时间】:2018-11-21 15:29:07 【问题描述】:

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

默认情况下,最大值给出一个空格:\,

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

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

但是,我们有一个问题,那就是当我们进行简化时。我们使用它来生成解释解决方案的步骤。例如:

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

当然,当数字相乘时,我们可以使用显式乘法 (\cdot)。

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

这可能吗?

【问题讨论】:

【参考方案1】:

是的,如果有一个由 TEX 属性命名的函数,则调用该函数来处理一个表达式。 TEX 命名的函数有 3 个参数,即具有与 TEX 属性附加的相同运算符的表达式,左边的东西,右边的东西,TEX 函数返回一个字符串列表,这些字符串是 TeX 的位应该输出。

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

所以如果你把 TEX-MTIMES (by :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))))

【讨论】:

以上是关于更改最大值乘法的标准tex输出的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 SwiftUI 列表中文本数量的最大限制?

LeetCode 29 Divide Two Integers (不使用乘法,除法,求模计算两个数的除法)

如何在 C++ 标准库中更改堆中的最大元素?

快速乘

乘积最大子数组

28 python 序列的乘法(字符串乘法)检查某个值是否属于一个序列 求序列的长度最大值和最小值