1. A new version of dimension.mac and new html documentation may found at
http://www.unk.edu/acad/math/people/willisb/dimension-1.machttp://www.unk.edu/acad/math/people/willisb/dimension.html
The new version adds support for subscripted variables and it
should now work correctly when compiled. (The makelist function
doesn't translate or compile correctly; this is a known bug.)
I thank CY for testing the new version under Maxima 5.9.
2. Utilities for mactex may be found at
http://www.unk.edu/acad/math/people/willisb/mactex-utilities.lisp
The utility code allows for LaTeX style fractions and matrices and
directional limits. Additionally, it has an improved version of
my texput function:
;; texput is a maxima-level interface to putprop that allows a user
;; to modify the behavior of maxima's tex function. Here are a few examples:
;; (C1) texput(me,"\\mu_e");
;; (D1) \mu_e
;; (C2) tex(me);
;; $$\mu_e$$
;; (C4) texput("<<",[" \\langle ", " \\rangle "],matchfix);
;; (D4) \langle ( \rangle)
;; (C5) matchfix("<<",">>");
;; (D5) "<<"
;; (C6) tex(<<a>>);
;; $$ \langle a \rangle $$
;; (D6) FALSE
;; (C7) tex(<<a,b>>);
;; $$ \langle a , b \rangle $$
;; To change the argument separator from a comma to a character ch,
;; make the third element of the second argument of texput that character. For
;; example, to make Dirac brackets, use
;; (C12) texput("<<",[" \\langle ", " \\rangle "," \\, | \\,"],matchfix);
;; (D12) \langle ( \rangle , \, | \,)
;; (C13) tex(<<a>>);
;; $$ \langle a \rangle $$
;; (D13) FALSE
;; (C14) tex(<<a,b>>);
;; $$ \langle a \, | \,b \rangle $$
;; (C15) texput(grad," \\nabla ",prefix);
;; (D15) 70
;; (C16) prefix("grad");
;; (D16) "GRAD"
;; (C17) tex(grad f);
;; $$ \nabla f$$
;; (C19) texput("~"," \\times ",infix);
;; (D19) 180
;; (C20) tex(a~b);
;; $$a \times b$$
;; (C22) postfix(@);
;; (D22) "@"
;; (C23) texput("@","!!",postfix);
;; (D23) 160
;; (C24) tex(x @);
;; $$x!!$$
3. Until now, I never had a reason to redefine matrix element addition.
Now, I do:
/* Find minimal path lengths. */
nary("@+");
"@+"([a]) := apply(min,a);
matrix_element_add : "@+";
infix("&");
"&"(a,b) := if (a = inf or b = inf) then inf else a + b;
MATRIX_ELEMENT_MULT : "&";
m : matrix([0,4,1,inf],[inf,0,inf,1],[2,1,0,6],[inf,5,2,0]);
m.m;
m.m.m;
m.m.m.m;
/*------------------*/
Regards,
Barton