更改最大值乘法的标准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输出的主要内容,如果未能解决你的问题,请参考以下文章