tex() and multiplication



I rebuilt Maxima with your fix, and it made factor() work properly,  
but it has some unfortunate side effects. I tried to evaluate

diff(1/x,x)

and got the following:

Maxima encountered a Lisp error:

  Type-error in KERNEL::OBJECT-NOT-LIST-ERROR-HANDLER: -1 is not of  
type LIST

Automatically continuing.
To reenable the Lisp debugger set *debugger-hook* to nil.

I restored the original version of nforma.lisp, recompiled, and I no  
longer get the error. No idea what might have caused that...

-matt

On Jul 20, 2006, at 5:26 PM, Richard Fateman wrote:

> OK guys, I think I have a pretty good fix.
>
> In the file nforma.lisp
> There is a function form-times.  Add two lines to it.
>
>
> (defun form-mtimes (form)
>   (cond ((null (cdr form)) '((mtimes)))
>
> 	((member 'factored(cdar form)) ; if factored, like 2 3^2, put in
> dots.
> 	 (nformat (cons '(mnctimes) (cdr form)))) ;rest of fix. RJF
> 20-July-06
>
> 	((equal -1 (cadr form)) (list '(mminus) (form-mtimes (cdr form))))
> .....
>
>
>
> Not only does this make the tex work, but it makes the ordinary  
> display work
> better.  That is,
>  Factor(6)   comes out as 2 . 3     instead of 2 3
> Factor (x^2-1) comes out as (x-1) . (x+1)
>
> And tex works the same way.
>
> The semantics are not changed.  Just the output formatting, so the  
> commands
> "part", display and Tex -- the only ones that works on the output  
> of the
> nformat program -- change.   Part will now think that part(factor 
> (120),0)
> is ".".  Since part should not be used (try inpart instead), maybe  
> this is
> acceptable. Inpart(factor(120,0) will be "*".
>
> Some results from factor look rather different, e.g.  factor(1/6)  
> changes
> from 1/(2 3) to (1/2).(1/3).
>
> Also 1/factor(1/120)  comes out as  3 5 8,  but that's the same as  
> before.
> The bug fix would be to change that to 120 by fixing the simplifier, I
> think.
>
> The whole fixed function is in
> http://www.cs.berkeley.edu/~fateman/temp/form-times.lisp
>
> Move it to, say c:/temp on your machine. In maxima, type
> load("c:/temp/form-times.lisp");
>
> As for making something different for the display of derivatives,  
> look at
> the code around derivabbrev.  Most people who have looked at this  
> closely
> usually decide that math notation is defective here.
>
> RJF
>
>
>
>
> -----Original Message-----
> From: maxima-admin at math.utexas.edu [mailto:maxima- 
> admin at math.utexas.edu] On
> Behalf Of Matthew Sarnoff
> Sent: Thursday, July 20, 2006 1:37 PM
> To: Chris Sangwin
> Cc: maxima at math.utexas.edu
> Subject: tex() and multiplication
>
> Chris: (defprop mtimes "\\cdot " texsym) will put a dot between _any_
> two expressions that are multiplied together. This makes expressions
> like "2*3" look fine, but "2*x" and "'diff(y,x)" look strange.
>
> Due to the many forms that the multiplication operator can take, I
> think that the behavior of times should be extended in the following
> way:
>
> 1. If the two expressions on either side of the operator are literal
> numbers (i.e. numberp returns true), then "\\cdot " should be used.
> 2. If not, "\\," should be used, except:
> 3. In noun-forms of derivatives, no space at all (or very small
> space) should be used in the denominator between the "d"/"\partial"
> and the "x" variable. The current behavior (separate the two with the
> "mtimes" symbol) looks a bit unclean.
>
> Also, speaking of derivatives, I think that when formatting 'diff
> (y,x), the "y" should be placed in the numerator if it is an atom.
> That way, 'diff(y,x) would render nicely as
>
> dy
> --
> dx
>
> instead of
>
> d
> -- y
> dx
>
> I've found the functions in mactex.lisp (tex-nary and tex-d) that
> need to be changed to accomodate this behavior, but I don't have
> enough Lisp experience to implement it. Thought I'd suggest it,  
> though.
>
> -matt
>
> _______________________________________________
> Maxima mailing list
> Maxima at math.utexas.edu
> http://www.math.utexas.edu/mailman/listinfo/maxima
>
>
>