Да, если есть функция, названная свойством TEX, эта функция вызывается для обработки выражения.Функция, названная TEX, принимает 3 аргумента, а именно выражение с тем же оператором, к которому присоединено свойство TEX, вещи слева и вещи справа, а функция TEX возвращает список строк, которые являются битами TeX.который должен быть выведен.
Вы можете сказать :lisp (trace tex-mtimes)
, чтобы увидеть, как это работает.Вы можете увидеть функции, подключенные к MTIMES или другим операторам, сказав :lisp (symbol-plist 'mtimes)
или вообще :lisp (symbol-plist 'mfoo)
для другого оператора MFOO.
Так что если вы замените 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 настолько сложным, насколько захотите.Я предполагаю, что вы можете выполнить программирование на Лиспе для этого.Самая простая вещь, которую можно попробовать, возможно, отправная точка для дальнейших усилий, это просто временно заменить TEXSYM на \cdot
.Что-то вроде:
(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))))