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();

|#