|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
;; This file:
;; http://anggtwu.net/MAXIMA/dim-antideriv.lisp.html
;; http://anggtwu.net/MAXIMA/dim-antideriv.lisp
;; (find-angg "MAXIMA/dim-antideriv.lisp")
;; Author: Robert Dodier
;; Trivial changes by: Eduardo Ochs
;; From: https://sourceforge.net/p/maxima/mailman/message/59178281/
;; (find-maximamsg "59178281 202504 29" "RDodier: dim-antideriv.lisp")
;; (find-maximamsg "59178287 202504 29" "Edrx: Thanks!!! =)")
;; (find-maximamsg "59178856 202505 01" "Edrx: TeXmacs")
;;
;; DIM-%ANTIDERIV -- 2-d pretty printer display for antiderivative-like expressions
;; copyright 2025 by Robert Dodier
;; I release this work under terms of the GNU General Public License, v2
(if (not (fboundp 'display2d-unicode-enabled))
(defun display2d-unicode-enabled () nil))
(defun dim-%antideriv (form result)
(unless (= (length (cdr form)) 4)
(return-from dim-%antideriv (dimension-function form result)))
(let*
((args (rest form))
(expr (first args))
(my-var (second args))
(lower-val (third args))
(upper-val (fourth args))
(lower-eqn (list '(mequal) my-var lower-val))
(upper-eqn (list '(mequal) my-var upper-val))
(vertical-bar-char (if (display2d-unicode-enabled)
at-char-unicode
(car (coerce $absboxchar 'list))))
vertical-bar
expr-result lower-result upper-result
expr-w expr-h expr-d lower-w lower-h lower-d upper-w upper-h upper-d)
(declare (ignorable expr-w expr-h expr-d lower-w lower-h lower-d upper-w upper-h upper-d))
(setq expr-result (dimension expr nil 'mparen 'mparen nil 0)
expr-w width expr-h height expr-d depth)
(setq lower-result (dimension-infix lower-eqn nil)
lower-w width lower-h height lower-d depth)
(setq upper-result (dimension-infix upper-eqn nil)
upper-w width upper-h height upper-d depth)
(setq vertical-bar (list 'd-vbar
(1+ (max expr-h upper-d))
(max (1+ expr-d) lower-h)
vertical-bar-char))
(setq result (append (list (append (list (- lower-w) (max expr-h upper-d)) upper-result)
(append (list 0 (- (max (1+ expr-d) lower-h))) lower-result)
vertical-bar
(append (list 0 0) expr-result))
result))
(setq height (+ 1 (max expr-h upper-d) upper-h)
depth (+ (max (1+ expr-d) lower-h) lower-d))
(update-heights height depth)
result))
(setf (get '%antideriv 'dimension) 'dim-%antideriv)
(setf (get '$antideriv 'dimension) 'dim-%antideriv) ; Edrx
#|
** Tests:
* (eepitch-oldmaxima)
* (eepitch-kill)
* (eepitch-oldmaxima)
* (eepitch-maxima)
* (eepitch-kill)
* (eepitch-maxima)
load ("dim-antideriv.lisp");
42 = 'antideriv (F(u), u, a, b);
42 = 'antideriv (F(u[k]), u[k], a[k], b[k]);
42 = 'antideriv(a+b,u,z^2^n+y[k],x^2-z[k]);
42 = 'antideriv(a+b,u,z^2^n+y[k],x^2-z[k[l[u]]]);
mybox(o) := matrix(["+", "-", "_"],["|",o,"|"],["+", "-", "_"]);
o : antideriv(a+b,u,z^2^n+y[k],x^2-z[k[l[u]]]);
mybox(o);
o : 'antideriv (F(u), u, a, b);
o : antideriv (F(u), u, a, b);
tex1(o);
texput(antideriv, antideriv_tex);
antideriv_tex(o) :=
block([fx,x,a,b], [fx,x,a,b]:args(o),
format("\\left.~a\\right|_{~a=~a}^{~a=~a}",
tex1(fx), tex1(x),tex1(a), tex1(x),tex1(b)));
antideriv_tex([f(x),x,a,b]);
tex1(antideriv(f(x),x,a,b));
to_lisp();
|#