4

I'm giving a course where students are used to the mixed number notation. However, all the calculations that maxima does, use the more traditional notation of fractions. Is it possible to present 3/2 as 1 1/2. I need this for the latex output only.

(%i4) tex(3/2);
$${{3}\over{2}}$$
(%o4)                                false

So instead of this I would like to get:

(%i4) tex(3/2);
$$1 {{1}\over{2}}$$
(%o4)                                false

Is this possible?

Kasper
  • 12,594
  • 12
  • 41
  • 63

2 Answers2

3

You can assign TeX properties via texput. Rational numbers are represented as ((RAT) mmm nnn) which you can see via :lisp $x where x is a Maxima variable which is a rational number. So, you can set the TeX property by:

texput (?rat, texrat);

where your function texrat is defined as (for example):

texrat(x) := block ([i, r], 
                    i:floor(x), 
                    r:x-i, 
                    sconcat ("{", i, "} {{", num(r), "}\\over{", denom(r), "}}"));

Example:

(%i11) tex(sin(12/7));
$$\sin \left({1} {{5}\over{7}}\right)$$

Note that the new function is applied to a rational even when it's inside another operator.

Of course you can change the output of texrat to make it whatever you want.

Note that the ? before rat is necessary in the call to texput.

Some of this stuff is undocumented; sorry about that.

Robert Dodier
  • 16,905
  • 2
  • 31
  • 48
1

I don't think that there is an option for this, but it's easy to make your own function.

For example:

texixed(a):= tex(printf(false, "~a ~a", a-mod(a,1) , mod(a,1)));
texixed(5/3);
   $$\mbox{{}1 2/3{}}$$
texixed(7/2);
   $$\mbox{{}3 1/2{}}$$
Eelvex
  • 8,975
  • 26
  • 42