From: Yasuaki H. <yas...@us...> - 2008-11-03 06:16:31
|
Update of /cvsroot/maxima/maxima/interfaces/emacs/imaxima In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv19534 Modified Files: ChangeLog Makefile.am README imath.el imaxima-autoconf-variables.el imaxima-autoconf-variables.el.in imaxima.el imaxima.info imaxima.lisp imaxima.texi setup-imaxima-imath.el Log Message: Update for 1.0b2. Compatibility with OpenSUSE Linux 10.3. Index: ChangeLog =================================================================== RCS file: /cvsroot/maxima/maxima/interfaces/emacs/imaxima/ChangeLog,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- ChangeLog 25 Mar 2008 03:24:54 -0000 1.1 +++ ChangeLog 3 Nov 2008 06:16:23 -0000 1.2 @@ -1,3 +1,11 @@ +2008-10-26 Yasuaki Honda <yas...@gm...> + * A workaround for OpenSUSE Linux 10.3 is incorporated. + +2008-05-28 Yasuaki Honda <yh...@ma...> + * bohumir's patch for {eps xxx eps} is included. + * Inline graph support in both imaxima and imath is added. + * I have decided this version to be 1.0 beta. + 2008-01-06 Yasuaki Honda <yh...@ma...> * Nothing is changed for imaxima.el and imaxma.lisp. * setup-imaxima-imath.el is now a part of the distribution package. This Index: Makefile.am =================================================================== RCS file: /cvsroot/maxima/maxima/interfaces/emacs/imaxima/Makefile.am,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- Makefile.am 8 Jun 2008 16:30:00 -0000 1.2 +++ Makefile.am 3 Nov 2008 06:16:23 -0000 1.3 @@ -1,16 +1,6 @@ -include $(top_srcdir)/common.mk -EXTRA_DIST = imaxima.lisp imaxima.el imath.el imath-example imaxima-autoconf-variables.el setup-imaxima-imath.el\ - breqn097a/breqn.dtx\ - breqn097a/breqn.sty\ - breqn097a/cmbase.sym\ - breqn097a/flexisym.dtx\ - breqn097a/flexisym.sty\ - breqn097a/mathpazo.sym\ - breqn097a/mathptmx.sym\ - breqn097a/mathstyle.dtx\ - breqn097a/mathstyle.sty\ - breqn097a/msabm.sym - -emacs_DATA = imaxima.el imath.el imaxima.lisp imaxima-autoconf-variables.el +EXTRA_DIST = imaxima.lisp imath-example setup-imaxima-imath.el breqn097a breqn-install.sh +dist_lisp_LISP = imaxima.el imath.el imaxima.lisp imaxima-autoconf-variables.el setup-imaxima-imath.el ELCFILES = imaxima.elc imath.elc imaxima-autoconf-variables.elc info_TEXINFOS = imaxima.texi +CLEANFILES = imaxima.info + Index: README =================================================================== RCS file: /cvsroot/maxima/maxima/interfaces/emacs/imaxima/README,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- README 25 Mar 2008 03:24:54 -0000 1.1 +++ README 3 Nov 2008 06:16:23 -0000 1.2 @@ -46,6 +46,16 @@ is recommended. See the Info manaul for options suitable for using older versions of Ghostscript or not using Ghostscript at all. +From the version 1.0 beta, imaxima and imath supports inline graph +capability. That is, special plotting commands such as wxplot2d() +can be used in imaxima and the resulted graph appears in the +*imaxima* session buffer in Emacs. Similarly, you can use the same +special plotting commands in a maxima formula in imath mode buffers. +Such formula are converted to graph image in imath mode. + +To do so, you need to install GNUPLOT 4.2 or later. Your Maxima +should be 5.12.0 or later. + Imaxima and imath are distributed from: http://members3.jcom.home.ne.jp/imaxima by Yasuaki Honda, the current maintainer of this package. Index: imath.el =================================================================== RCS file: /cvsroot/maxima/maxima/interfaces/emacs/imaxima/imath.el,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- imath.el 19 Jun 2008 03:58:14 -0000 1.2 +++ imath.el 3 Nov 2008 06:16:23 -0000 1.3 @@ -1,11 +1,15 @@ ;;;; imath.el --- Imath minor mode -;; Copyright (C) 2004 Yasuaki Honda +;; Copyright (C) 2004, 2008 Yasuaki Honda +;; Copyright (C) 2007 bohumir for the {eps eps} formula support ;; Author: Yasuaki Honda (yh...@ma...) ;; Created: 7 Nov 2004 +;; Version: 1.0b ;; Keywords: maxima +;; $Id$ + ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the GNU General Public License as ;; published by the Free Software Foundation; either version 2 of @@ -85,6 +89,28 @@ {latex \\int {f\\left(x\\right)}{\\;dx} latex} {latex \\sum_{n=0}^{i}{a_{n}} latex} +Version 1.0 beta and later supports inline graph. You can use +the following six maxima commands in maxima forms: +wxplot2d(), wxplot3d(), wxdraw2d(), wxdraw3d(), wximplicit_plot(), +wxcontour_plot(). + +Example maxima forms for inline graph are: +{maxima wxplot2d(sin(5*x)/x,[x,-5,5]) maxima} +{maxima wxplot3d(sin(x)*y,[x,-5,5],[y,-5,5]) maxima} +{maxima wxdraw2d(implicit(x^2+y^3=5,x,-5,5,y,-5,5)) maxima} + +Removing the prefix \"wx\" from the commands above, you obtain +command names that are described in Maxima manual. The documentation +applies to the \"wx\" version of the commands. + +Version 1.0 beta and later supports inline EPS image. You can +insert arbitrary image files in EPS format using the following +syntax: +{eps filename eps} + +An example is: +{eps /home/george/image1.eps eps} + Assuming the cursor position is right after a form or in the middle, C-c ! transforms the form into the formula image using the Imaxima functionality. @@ -130,7 +156,7 @@ (imaxima)) (switch-to-buffer cur-buf)))) -;;; Continuation is used between maxima-to-latex function and +;;; Continuation is used between maxima-to-image function and ;;; get-image-from-imaxima. The value is either nil or a list of ;;; buffer, pos1, and pos2, where pos1 and pos2 are the beginning and ;;; end of current maxima formula. @@ -141,6 +167,8 @@ (defvar maxima-end " maxima}") (defvar latex-start "{latex ") (defvar latex-end " latex}") +(defvar eps-start "{eps ") +(defvar eps-end " eps}") (defun compose-maxima-formula () "Insert maxima form template at the current position." @@ -162,6 +190,9 @@ ((eql ftype 'latex) (setq start-symbol latex-start end-symbol latex-end)) + ((eql ftype 'eps) + (setq start-symbol eps-start + end-symbol eps-end)) ((eql ftype 'both) (save-excursion (multiple-value-bind (la-start la-end la-type) @@ -185,6 +216,8 @@ (return-from find-formula tmpresult)) ((setq tmpresult (find-formula 'maxima)) (return-from find-formula tmpresult)) + ((setq tmpresult (find-formula 'eps)) + (return-from find-formula tmpresult)) (t (return-from find-formula nil)))) (t (return-from find-formula nil))) @@ -224,13 +257,20 @@ (find-formula 'any) (if (and start end ftype) (cond ((eql ftype 'maxima) - (maxima-to-latex)) + (maxima-to-image)) + ((eql ftype 'eps) + (get-image-from-imaxima 'eps)) ((or (eql ftype 'both) (eql ftype 'latex)) - (get-image-from-imaxima)))))) + (get-image-from-imaxima 'latex) + ) + ) + ) + ) + ) -(defun maxima-to-latex () - "Transform maxima form which is placed just before current point or +(defun* maxima-to-image (&aux maxcmd) + "Transform a maxima form which is placed just before current point or is surrounding the current point into a formula image." (interactive "") (save-excursion @@ -238,6 +278,8 @@ (find-formula 'maxima) (let (curpos (point)) (when (and begin end) + (setq maxcmd (buffer-substring (+ begin (length maxima-start)) + (- end (length maxima-end)))) (kill-new (buffer-substring (+ begin (length maxima-start)) (- end (length maxima-end)))) (save-excursion @@ -247,23 +289,74 @@ (yank) (insert ";") (comint-send-input)))) - (setq continuation (list #'get-image-from-imaxima-1 + (setq continuation (list (if (string-match "[ ]*wx\\(plot2d\\|plot3d\\|draw\\|draw2d\\|draw3d\\|implicit_plot\\|contour_plot\\).*" maxcmd) + #'get-inline-graph + #'get-image-from-imaxima-1) (current-buffer) begin end))))) -(defun* get-image-from-imaxima () +(defun* maxima-to-image-all (&aux maxcmd) + "Transform a maxima form which is placed just before current point or +is surrounding the current point into a formula image." + (interactive "") + (if (not (re-search-forward "maxima}[^&]" (point-max) 0)) + (progn + (setq continuation nil) + (return-from maxima-to-image-all nil))) + (backward-char) + (multiple-value-bind (begin end) + (find-formula 'maxima) + (when (and begin end) + (setq maxcmd (buffer-substring (+ begin (length maxima-start)) + (- end (length maxima-end)))) + (kill-new (buffer-substring (+ begin (length maxima-start)) + (- end (length maxima-end)))) + (save-excursion + (set-buffer (if imaxima-use-maxima-mode-flag + "*maxima*" + "*imaxima*")) + (yank) + (insert ";") + (comint-send-input)) + (setq continuation (list (if (string-match "[ ]*wx\\(plot2d\\|plot3d\\|draw\\|draw2d\\|draw3d\\|implicit_plot\\|contour_plot\\).*" maxcmd) + #'(lambda (arg) + (let ((cont continuation)) + (funcall #'get-inline-graph arg) + (save-current-buffer + (set-buffer (nth 1 cont)) + (maxima-to-image-all)))) + #'(lambda (arg) + (let ((cont continuation)) + (funcall #'get-image-from-imaxima-1 arg) + (save-current-buffer + (set-buffer (nth 1 cont)) + (maxima-to-image-all))))) + (current-buffer) begin end))))) + + +(defun* get-image-from-imaxima (eps-or-latex) "Converts a both form or a latex form into a formula image when placed right after the form." (interactive "") (let (la-start la-end la-ftype entire-start entire-end entire-ftype - latex-string entire-string latex-formula) + entire-string latex-formula-or-epsfile) + (multiple-value-bind (la-start la-end la-ftype) - (find-formula 'latex) + (find-formula eps-or-latex) (when (and la-start la-end la-ftype) - (setq latex-string (buffer-substring la-start la-end)) - (setq latex-formula (substring latex-string - (length latex-start) - (- (length latex-string) - (length latex-end)))) + (setq entire-string (buffer-substring la-start la-end)) + (cond ((eql eps-or-latex 'latex) + (setq latex-formula-or-epsfile (substring entire-string + (length latex-start) + (- (length entire-string) + (length latex-end)))) + ) + ((eql eps-or-latex 'eps) + (setq latex-formula-or-epsfile (substring entire-string + (length eps-start) + (- (length entire-string) + (length eps-end)))) + ) + ) (multiple-value-bind (entire-start entire-end entire-ftype) (find-formula 'any) (when (and entire-start entire-end entire-ftype) @@ -272,15 +365,26 @@ (let ((ext (extent-at entire-start))) (if ext (return-from get-image-from-imaxima nil))) - (let ((ext (extent-at 0 (imaxima-make-image latex-formula t)))) - (if ext - (insert-extent ext entire-start entire-end t (current-buffer))))) + + (cond ((eql eps-or-latex 'latex) + (let ((ext (extent-at 0 (imaxima-make-image latex-formula-or-epsfile eps-or-latex t)))) + (if ext + (insert-extent ext entire-start entire-end t (current-buffer)))) + ) + ((eql eps-or-latex 'eps) + (let ((ext (extent-at 0 (imaxima-make-image latex-formula-or-epsfile eps-or-latex t)))) + (if ext + (insert-extent ext entire-start entire-end t (current-buffer)))) + ) + ) + ) + ;; FSF Emacs (add-text-properties entire-start entire-end (list 'display (get-text-property 1 'display - (imaxima-make-image latex-formula t))) + (imaxima-make-image latex-formula-or-epsfile eps-or-latex t))) (current-buffer))))))))) (defun get-image-from-imaxima-1 (latex-string) @@ -294,21 +398,51 @@ (let ((maxima-string (save-current-buffer (set-buffer (nth 1 continuation)) (buffer-substring (nth 2 continuation) - (nth 3 continuation))))) + (nth 3 continuation)))) + pos) (save-current-buffer (set-buffer (nth 1 continuation)) + (setq pos (copy-marker (nth 2 continuation) t)) (delete-region (nth 2 continuation) (nth 3 continuation)) (setq continuation nil) (let ((str-to-insert (concat maxima-string "&{latex " latex-string " latex}"))) (if (featurep 'xemacs) - (let ((ext (extent-at 0 (imaxima-make-image latex-string t)))) + (let ((ext (extent-at 0 (imaxima-make-image latex-string 'latex t)))) (if ext (insert-extent ext 0 (length str-to-insert) t str-to-insert))) (add-text-properties 0 (length str-to-insert) (list 'display (get-text-property 1 'display - (imaxima-make-image latex-string t))) + (imaxima-make-image latex-string 'latex t))) + str-to-insert)) + (goto-char pos) + (insert str-to-insert)))))) + +(defun get-inline-graph (latex-string) + (setq latex-string (copy-sequence latex-string)) + (if (featurep 'xemacs) + (let ((ext (extent-at 0 latex-string))) + (if ext (set-extent-property ext 'duplicable nil)))) + (when (string-match "^([\\%a-zA-Z0-9]+)" latex-string) + (setq latex-string (replace-match "" t t latex-string))) + (if continuation + (let ((maxima-string (save-current-buffer + (set-buffer (nth 1 continuation)) + (buffer-substring (nth 2 continuation) + (nth 3 continuation))))) + (save-current-buffer + (set-buffer (nth 1 continuation)) + (delete-region (nth 2 continuation) (nth 3 continuation)) + (setq continuation nil) + (let ((str-to-insert maxima-string)) + (if (featurep 'xemacs) + (let ((ext (extent-at 0 (imaxima-make-image latex-string 'latex t)))) + (if ext + (insert-extent ext 0 (length str-to-insert) t str-to-insert))) + (add-text-properties 0 (length str-to-insert) + (list 'display + (get-text-property 1 'display latex-string)) str-to-insert)) (insert str-to-insert)))))) @@ -318,13 +452,25 @@ formula images." (interactive "") (beginning-of-buffer) - (let ((msg "Converting")) + (let ((msg "Converting latex")) (message msg) (while (search-forward latex-end nil 1) - (get-image-from-imaxima) + (get-image-from-imaxima 'latex) (setq msg (concat msg ".")) (message msg)) (message (concat msg ".done."))) + (beginning-of-buffer) + (let ((msg "Converting eps")) + (while (search-forward eps-end nil 1) + (get-image-from-imaxima 'eps) + (setq msg (concat msg ".")) + (message msg)) + (message (concat msg ".done."))) + (beginning-of-buffer) + (let ((msg "Converting maxima...")) + (message msg) + (maxima-to-image-all) + (message (concat msg "done."))) (set-buffer-modified-p nil)) Index: imaxima-autoconf-variables.el =================================================================== RCS file: /cvsroot/maxima/maxima/interfaces/emacs/imaxima/imaxima-autoconf-variables.el,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- imaxima-autoconf-variables.el 29 Mar 2008 21:19:41 -0000 1.2 +++ imaxima-autoconf-variables.el 3 Nov 2008 06:16:23 -0000 1.3 @@ -2,6 +2,7 @@ ;; Copyright (C) 2007, 2008 Yasuaki Honda ;; Author: Yasuaki Honda (yh...@ma...) +;; $Id$ ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the GNU General Public License as @@ -18,6 +19,6 @@ ;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, ;; MA 02111-1307 USA (defconst *imaxima-autoconf-package* "imaxima-imath") -(defconst *imaxima-autoconf-version* "0.99") +(defconst *imaxima-autoconf-version* "1.0b2") (provide 'imaxima-autoconf-variables) Index: imaxima-autoconf-variables.el.in =================================================================== RCS file: /cvsroot/maxima/maxima/interfaces/emacs/imaxima/imaxima-autoconf-variables.el.in,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- imaxima-autoconf-variables.el.in 19 Jun 2008 03:58:14 -0000 1.2 +++ imaxima-autoconf-variables.el.in 3 Nov 2008 06:16:23 -0000 1.3 @@ -2,6 +2,7 @@ ;; Copyright (C) 2007, 2008 Yasuaki Honda ;; Author: Yasuaki Honda (yh...@ma...) +;; $Id$ ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the GNU General Public License as Index: imaxima.el =================================================================== RCS file: /cvsroot/maxima/maxima/interfaces/emacs/imaxima/imaxima.el,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- imaxima.el 19 Jun 2008 03:58:14 -0000 1.2 +++ imaxima.el 3 Nov 2008 06:16:23 -0000 1.3 @@ -4,11 +4,13 @@ ;; Author: Jesper Harder <ha...@if...> ;; Created: 14 Nov 2001 -;; Version: 0.99 +;; Version: 1.0b ;; Keywords: maxima ;; Copyright (C) 2006 Stephen Eglen (imaxima-print-buffer) -;; Copyright (C) 2007, 2008 Yasuaki Honda (imaxima-to-html) +;; Copyright (C) 2007, 2008 Yasuaki Honda (imaxima-to-html, inline graph) + +;; $Id$ ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the GNU General Public License as @@ -57,6 +59,13 @@ ;; "texmacs.lisp" in the TeXmacs distribution. Several of the image ;; routines are borrowed from David Kastrup's preview-latex.el. ;; +;; Version 1.0 beta and later supports inline graph. You can use +;; the following six maxima commands. +;; wxplot2d(), wxplot3d(), wxdraw2d(), wxdraw3d(), wximplicit_plot(), +;; wxcontour_plot(). +;; GNUPLOT 4.2 or later is needed for this to work. The resulted image +;; generated by gnuplot will be inserted as the output of the command. +;; ;; ;; Installation: ;; Take a look at the README file which comes with this file. @@ -272,6 +281,11 @@ :group 'imaxima :type '(string)) +(defcustom imaxima-cp-program "cp" + "cp executable." + :group 'imaxima + :type '(string)) + (defcustom imaxima-dvips-options '("-E" "-R") "Options passed to dvips for conversion from DVI to EPS." :group 'imaxima @@ -568,19 +582,19 @@ (defun imaxima-latex () "Convert Maxima buffer to LaTeX. -Thic command does not work in XEmacs." +This command does not work in XEmacs." (interactive) (let (pos2 label (pos (make-marker)) (buf (generate-new-buffer "*imaxima-latex*")) (oldbuf (current-buffer))) (set-buffer buf) (insert-buffer oldbuf) - ;; Remove copyright notice - (goto-char (point-min)) - (search-forward "(C1)" nil t 2) - (search-backward "(C1)" nil t) - (delete-region (point-min) (point)) - (goto-char (point-min)) +;; ;; Remove copyright notice +;; (goto-char (point-min)) +;; (search-forward "(%i1)" nil t 2) +;; (search-backward "(%i1)" nil t) +;; (delete-region (point-min) (point)) +;; (goto-char (point-min)) (insert "\\documentclass[leqno]{article} \\usepackage{verbatim} \\usepackage[cmbase]{flexisym} @@ -676,20 +690,43 @@ psfilename)) (imaxima-gs-wait)) -(defun imaxima-make-image (str &optional no-label-p) +(defun imaxima-check-plot-output (str) + "If the str is in the form ^Wpompt^W\\verb|plotfile filename|, then + filename is returned. Else, nil is returned." +;; (if (string-match "[^]*\\\\mathrm{wxxmltag}\\\\left\(\\\\verb|\\([^|]*\\)|.*" str) +;; (if (string-match "[^]*\\\\mathrm{wxxmltag}\\\\left[^/]*\\(.*\.eps\\).*" str) +;; (if (string-match "[^]*\\\\mathrm{wxxmltag}\\\\left\(\\\\verb|*\\(.*\.eps\\).*" str) + (if (string-match "[^]*\\\\mathrm{wxxmltag}\\\\left\(\\(\\\\verb|\\)*\\(.*\.eps\\).*" str) + (match-string 2 str) + nil)) + +(defun imaxima-make-image (str eps-or-latex &optional no-label-p) "Make image from STR. If no-label-p is specified t, label becomes nil and passed to imaxima-tex-to-dvi." + (let ((res (imaxima-check-plot-output str))) + (if res + (setq str res + eps-or-latex 'eps))) + (let* ((filename (expand-file-name (number-to-string (incf imaxima-file-counter)) imaxima-tmp-subdir)) (psfilename (concat filename ".ps")) (label "*")) - (when (string-match "\\(\\([^]*\\)\\)" str) - (setq label (match-string 2 str)) - (setq str (replace-match "" t t str 1))) - (if no-label-p (setq label nil)) ;; override label to nil if no-label-p - (imaxima-tex-to-dvi str label (concat filename ".tex")) - (imaxima-dvi-to-ps filename) + + (cond ((eql eps-or-latex 'latex) + (when (string-match "\\(\\([^]*\\)\\)" str) + (setq label (match-string 2 str)) + (setq str (replace-match "" t t str 1))) + (if no-label-p (setq label nil)) ;; override label to nil if no-label-p + (imaxima-tex-to-dvi str label (concat filename ".tex")) + (imaxima-dvi-to-ps filename) + ) + ((eql eps-or-latex 'eps) + (copy-file str psfilename) + (setq label nil) + ) + ) (if (not (file-exists-p psfilename)) (imaxima-latex-error str filename) (multiple-value-bind (bb width height) @@ -739,7 +776,7 @@ (defun imaxima-latex-error (str filename) "Make clickable error message. STR is offending LaTeX expression. FILENAME is name of the LaTeX file." - (let* ((msg "LaTex error in: ") + (let* ((msg "LaTeX error in: ") (delim (if (featurep 'xemacs) "; " "\n")) imaxima-error-2 @@ -799,8 +836,8 @@ (imaxima-with-temp-dir imaxima-tmp-subdir (apply 'call-process imaxima-tex-program nil nil nil - (list imaxima-initex-option "&latex" "mylatex.ltx" - (format "\\input{%s}" "format.tex"))))) + (list imaxima-initex-option "&latex" "mylatex.ltx" "format")))) +;; (format "\\input{%s}" "format.tex"))))) (defun imaxima-tex-to-dvi (str label filename &optional linear) "Run LaTeX on STR. @@ -918,7 +955,7 @@ (setq text (match-string 2 rest)) (setq match (match-string 3 rest)) (setq rest (replace-match "" t t rest 1)) - (setq output (concat output (if (equal output "") "" newline-char) text (imaxima-make-image match)))) + (setq output (concat output (if (equal output "") "" newline-char) text (imaxima-make-image match 'latex)))) (setq imaxima-output "") (message "Processing Maxima output...done") (if continuation @@ -938,7 +975,7 @@ (setq text (match-string 2 rest)) (setq match (match-string 3 rest)) (setq rest (replace-match "" t t rest 1)) - (setq output (concat output (if (equal output "") "" newline-char) text (imaxima-make-image match)))) + (setq output (concat output (if (equal output "") "" newline-char) text (imaxima-make-image match 'latex)))) (setq imaxima-output "") (message "Processing Maxima output...done") (if continuation @@ -947,7 +984,7 @@ ;; Special prompt, question. ((char-equal lastchar ?) (string-match "\\([^]*\\)" imaxima-output) - (prog1 (imaxima-make-image (match-string 1 imaxima-output)) + (prog1 (imaxima-make-image (match-string 1 imaxima-output) 'latex) (setq imaxima-output ""))) (t "")))))) @@ -1011,7 +1048,8 @@ (add-hook 'kill-buffer-hook 'imaxima-clean-up t t) (imaxima-setup-preoutput-filter) (maxima-single-string - (format "block(load(\"%s\"), linenum:0)$\n" imaxima-lisp-file)) +;; (format "?load(?subseq(?symbol\\-name(\"%s\"), 1));\n" imaxima-lisp-file)) + (format "block(load((\"%s\")), linenum:0)$\n" imaxima-lisp-file)) ;; maxima mode tries to run inferior-maxima-mode-hook twice ;; due to changes made in 5.9.2 release. To prevent this, ;; the following hook must be removed earlier than before. Index: imaxima.info =================================================================== RCS file: /cvsroot/maxima/maxima/interfaces/emacs/imaxima/imaxima.info,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- imaxima.info 25 Mar 2008 03:24:54 -0000 1.1 +++ imaxima.info 3 Nov 2008 06:16:23 -0000 1.2 @@ -24,8 +24,11 @@ Imaxima is a package for displaying the output from the computer algebra system Maxima as images typeset by TeX. -This manual documents imaxima version 0.99. You can download the latest -version of imaxima from `http://members3.jcom.home.ne.jp/imaxima/'. +This manual documents imaxima version 1.0b2. You can download the +latest version of imaxima from +`http://members3.jcom.home.ne.jp/imaxima/'. + +Since version 1.0b, imaxima and imath supports inline graph. Send suggestions and bug reports to Yasuaki Honda <im...@ma...>. @@ -33,6 +36,7 @@ * Installation:: Installing imaxima (and breqn). * Usage:: Commands you can use in imaxima. +* Inline Graph:: Commands you can use for inline graph. * Options:: Customizing imaxima. * Imath minor mode:: Interactive Math minor mode. * Index:: @@ -105,7 +109,7 @@ * Install the TeX files in the way explained above. -File: imaxima.info, Node: Usage, Next: Options, Prev: Installation, Up: Top +File: imaxima.info, Node: Usage, Next: Inline Graph, Prev: Installation, Up: Top 2 Usage ******* @@ -159,9 +163,46 @@ information when you want to make bug reports. -File: imaxima.info, Node: Options, Next: Imath minor mode, Prev: Usage, Up: Top +File: imaxima.info, Node: Inline Graph, Next: Options, Prev: Usage, Up: Top -3 Options +3 Inline Graph +************** + +Since version 1.0b, imaxima and imath supports the inline graph display +feature. That is, if a special graph command (such as wxplot2d, +wxplot3d) is used in the maxima session, the graph generated by the +command is inserted in the maxima session buffer, instead of displaying +in other window. + +Before using this feature, you must make sure `plot2d' does work with +Gnuplot by trying: + (%i1) plot2d(x^2,[x,-5,5],[plot_format,gnuplot]); +If this works fine, then quite likely `wxplot2d' works, too. + +Following commands can be used in a maxima session to draw graphs to be +displayed inline: `wxplot2d', `wxplot3d', `wxdraw2d', `wxdraw3d', +`wximplicit_plot', and `wxcontour_plot'. + +They correspond to their original commands `plot2d', `plot3d', `draw2d', +`draw3d', `implicit_plot', and `contour_plot'. + +The syntax of the wx-prefixed versions of the commands and their +arguments are the same as the ones of the corresponding original +commands. Hence, `wxplot2' draws a graph inline in maxima session, +while `plot2d' displays the same graph in the different window. + +The wx-prefixed versions of the commands set up arguments so that +Gnuplot is used to draw the graph and writes the graph in extended +postscript format into a temporary file. So, it is suggested not to use +plot options such as `plot_format'. + +`wxdraw2d' and `wxdraw3d' autamatically load the draw package since +they call `draw2d' and `draw3d' internally. + + +File: imaxima.info, Node: Options, Next: Imath minor mode, Prev: Inline Graph, Up: Top + +4 Options ********* * Menu: @@ -176,7 +217,7 @@ File: imaxima.info, Node: Appearance, Next: Line Breaking, Up: Options -3.1 Appearance +4.1 Appearance ============== -- ã¦ã¼ã¶ãªãã·ã§ã³: imaxima-pt-size @@ -228,7 +269,7 @@ File: imaxima.info, Node: Line Breaking, Next: Miscellaneous, Prev: Appearance, Up: Options -3.2 Line Breaking +4.2 Line Breaking ================= Imaxima usually does a decent job of breaking lines that are too wide @@ -265,7 +306,7 @@ File: imaxima.info, Node: Miscellaneous, Prev: Line Breaking, Up: Options -3.3 Miscellaneous +4.3 Miscellaneous ================= If the required files are in your path, you shouldn't normally need to @@ -332,7 +373,7 @@ File: imaxima.info, Node: Imath minor mode, Next: Index, Prev: Options, Up: Top -4 Imath minor mode +5 Imath minor mode ****************** The imath minor mode provides a small set of functions to aid insert @@ -385,7 +426,7 @@ File: imaxima.info, Node: Index, Prev: Imath minor mode, Up: Top -5 Index +6 Index ******* @@ -434,13 +475,14 @@ Tag Table: Node: Top567 -Node: Installation1199 -Node: Usage3243 -Node: Options5211 -Node: Appearance5609 -Node: Line Breaking7414 -Node: Miscellaneous8793 -Node: Imath minor mode11246 -Node: Index13487 +Node: Installation1323 +Node: Usage3367 +Node: Inline Graph5340 +Node: Options6872 +Node: Appearance7277 +Node: Line Breaking9082 +Node: Miscellaneous10461 +Node: Imath minor mode12914 +Node: Index15155 End Tag Table Index: imaxima.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/interfaces/emacs/imaxima/imaxima.lisp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- imaxima.lisp 25 Mar 2008 03:24:54 -0000 1.1 +++ imaxima.lisp 3 Nov 2008 06:16:23 -0000 1.2 @@ -1,3 +1,32 @@ +;; Copyright (C) 2001, 2002, 2003, 2004 Jesper Harder +;; Copyright (C) 2007, 2008 Yasuaki Honda +;; +;; Plotting support section of this file is the copy of the same +;; section of wxmathml.lisp with very small modification. The file +;; wxmathml.lisp is a part of the distribution of wxMaxima. + +;; Author: Jesper Harder <ha...@if...> +;; Created: 14 Nov 2001 +;; Version: 1.0b +;; Keywords: maxima +;; $Id$ +;; +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. +;; +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. +;; +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA +;; +;;; History: ;;; Putting prefix package name to the variable does cause ;;; error when the file is loaded into older clisp, e.g. 2.29. ;;; I changed it so that it checks the existence of the symbol @@ -23,6 +52,40 @@ (in-package :maxima) +(defvar *windows-OS* (string= *autoconf-win32* "true")) +(defmvar $wxplot_size '((mlist simp) 400 250)) +(defmvar $wxplot_old_gnuplot nil) +(defvar *image-counter* 0) + + +;;; Following function wx-gnuplot-installed-p and the macro +;;; wx-gnuplot-installation-check should be in plotting section +;;; later in this file. However, because they must be in the +;;; real toplevel, they are moved here. +;;; yasuaki honda +(defun wx-gnuplot-installed-p () + #+gcl + (cond ((member :linux *features*) + (let* ((tmp-stream (open "| which gnuplot" :direction :input)) + (result (read-line tmp-stream nil :eof))) + (if (eql result :eof) nil t))) + ((and (member :mingw32 *features*) + (probe-file "c:\\Windows\\System32\\where.exe")) + (let* ((tmp-stream (open "| where wgnuplot" :direction :input)) + (result (read-line tmp-stream nil :eof))) + (if (eql result :eof) nil t))) + (t t)) + #-gcl + ;; The function check-gnuplot-process is defined in + ;; maxima/src/plot.lisp since at least 5.12.0. + (handler-case (progn (check-gnuplot-process) t) + (error () nil))) + +(defun wx-gnuplot-installation-check () + (if (not (wx-gnuplot-installed-p)) + (merror (format t "Gnuplot error: Gnuplot is not installed, +nor Gnuplot is not recognized by maxima")))) + (defmacro style-warning-suppressor (&rest body) (if (member :clisp *features*) (setq body (cons @@ -137,6 +200,7 @@ ((get (caar x) 'tex) (funcall (get (caar x) 'tex) x l r)) (t (tex-function x l r nil)))) +#| (defun tex-atom (x l r) ;; atoms: note: can we lose by leaving out {}s ? (append l (list (cond ((numberp x) (texnumformat x)) @@ -147,6 +211,7 @@ (t (tex-stripdollar x)))) r)) +|# (defun texstring (x) (let ((sym-name @@ -212,11 +277,11 @@ (cond ((integerp atom) atom) (t - (setq r (explode atom)) + (setq r (exploden atom)) (setq exponent (member 'e r :test #'string-equal));; is it ddd.ddde+EE (cond ((null exponent) ;; it is not. go with it as given - atom) + (coerce r 'string)) (t (setq firstpart (nreverse (cdr (member 'e (reverse r) :test #'string-equal)))) @@ -263,7 +328,7 @@ (let ((texw)) (if (eql (caar x) '%gamma) (setq texw "\\Gamma") - (setq texw (texword (caar x)))) + (setq texw (caar x))) (setq l (tex texw l nil 'mparen 'mparen) r (tex (cons '(mprogn) (cdr x)) nil r 'mparen 'mparen)) (nconc l r))) @@ -351,6 +416,7 @@ (defprop $%i "i" texword) (defprop $%pi "\\pi" texword) +(defprop $%phi "\\phi" texword) ;; yhonda (defprop $%e "e" texword) (defprop $inf "\\infty " texword) (defprop $minf " -\\infty " texword) @@ -930,4 +996,159 @@ (t (mtell "~%Acceptable answers are Yes, Y, No, N, Unknown, Uk~%"))))) +;; +;; Plotting support +;; + +(defun wxxml-tag (x l r) + (let ((name (cadr x)) + (tag (caddr x))) + (append l (list (format nil "<~a>~a</~a>" tag name tag)) r))) + + +(defun wxplot-filename (&optional (suff t) &aux filename) + (incf *image-counter*) + (setq filename + (plot-temp-file (if suff + (format nil "maxout_~d.eps" *image-counter*) + (format nil "maxout_~d" *image-counter*)))) + (if (probe-file filename) + (delete-file filename)) + filename) + +(defun $wxplot_preamble () + (let ((frmt (if $wxplot_old_gnuplot + "set terminal postscript picsize ~d ~d; set zeroaxis;" + "set terminal postscript size ~d,~d; set zeroaxis;"))) + (format nil frmt + ($first $wxplot_size) + ($second $wxplot_size)))) + +(defun $range (i j) + (let ((x (gensym))) + (mfuncall '$makelist x x i j))) + +(defun $wxplot2d (&rest args) + ;; if gnuplot is not installed, this will terminate the + ;; further execution. + (wx-gnuplot-installation-check) + (let ((preamble ($wxplot_preamble)) + (system-preamble (get-plot-option-string '$gnuplot_preamble 2)) + (filename (wxplot-filename))) + (if (length system-preamble) + (setq preamble (format nil "~a; ~a" preamble system-preamble))) + (dolist (arg args) + (if (and (listp arg) (eql (cadr arg) '$gnuplot_preamble)) + (setq preamble (format nil "~a; ~a" + preamble (caddr arg))))) + (apply #'$plot2d `(,@args + ((mlist simp) $plot_format $gnuplot) +;; ((mlist simp) $gnuplot_preamble ,preamble) + ((mlist simp) $gnuplot_term $ps) + ((mlist simp) $gnuplot_out_file ,filename))) + ($ldisp `((wxxmltag simp) ,filename "img"))) + "") + +(defun $wxplot3d (&rest args) + ;; if gnuplot is not installed, this will terminate the + ;; further execution. + (wx-gnuplot-installation-check) + (let ((preamble ($wxplot_preamble)) + (system-preamble (get-plot-option-string '$gnuplot_preamble 2)) + (filename (wxplot-filename))) + (if (length system-preamble) + (setq preamble (format nil "~a; ~a" preamble system-preamble))) + (dolist (arg args) + (if (and (listp arg) (eql (cadr arg) '$gnuplot_preamble)) + (setq preamble (format nil "~a; ~a" + preamble (caddr arg))))) + (apply #'$plot3d `(,@args + ((mlist simp) $plot_format $gnuplot) +;; ((mlist simp) $gnuplot_preamble ,preamble) + ((mlist simp) $gnuplot_term $ps) + ((mlist simp) $gnuplot_out_file ,filename))) + ($ldisp `((wxxmltag simp) ,filename "img"))) + "") + +(defun $wxdraw2d (&rest args) + (apply #'$wxdraw + (list (cons '($gr2d) args)))) + + +(defun $wxdraw3d (&rest args) + (apply #'$wxdraw + (list (cons '($gr3d) args)))) + +(defun $wxdraw (&rest args) + ;; if gnuplot is not installed, this will terminate the + ;; further execution. + (wx-gnuplot-installation-check) + (let* ((filename (wxplot-filename nil)) + (*windows-OS* t) + res) + (if (not (fboundp '$draw)) + ($load '$draw)) + ;; Usually the following is used. + ;; (setq res (apply #'$draw + ;; However, CMUCL warns that function $draw is not defined. + ;; To suppress this warning, symbol-function is used to make + ;; clear that the runtime definition is used rather than + ;; read time. + (setq res (apply (symbol-function '$draw) + (append + `( + ((mequal simp) $terminal $eps) + ((mequal simp) $pic_width ,($first $wxplot_size)) + ((mequal simp) $pic_height ,($second $wxplot_size)) + ((mequal simp) $file_name ,filename)) + args))) + ($ldisp `((wxxmltag simp) ,(format nil "~a.eps" filename) "img")) + res)) + +(defun $wximplicit_plot (&rest args) + ;; if gnuplot is not installed, this will terminate the + ;; further execution. + (wx-gnuplot-installation-check) + (let ((preamble ($wxplot_preamble)) + (system-preamble (get-plot-option-string '$gnuplot_preamble 2)) + (filename (wxplot-filename))) + (if (not (fboundp '$implicit_plot)) + ($load '$implicit_plot)) + (if (length system-preamble) + (setq preamble (format nil "~a; ~a" preamble system-preamble))) + (dolist (arg args) + (if (and (listp arg) (eql (cadr arg) '$gnuplot_preamble)) + (setq preamble (format nil "~a; ~a" + preamble (caddr arg))))) + (apply (symbol-function '$implicit_plot) + `(,@args + ((mlist simp) $plot_format $gnuplot) +;; ((mlist simp) $gnuplot_preamble ,preamble) + ((mlist simp) $gnuplot_term $ps) + ((mlist simp) $gnuplot_out_file ,filename))) + ($ldisp `((wxxmltag simp) ,filename "img"))) + "") + + +(defun $wxcontour_plot (&rest args) + ;; if gnuplot is not installed, this will terminate the + ;; further execution. + (wx-gnuplot-installation-check) + (let ((preamble ($wxplot_preamble)) + (system-preamble (get-plot-option-string '$gnuplot_preamble 2)) + (filename (wxplot-filename))) + (if (length system-preamble) + (setq preamble (format nil "~a; ~a" preamble system-preamble))) + (dolist (arg args) + (if (and (listp arg) (eql (cadr arg) '$gnuplot_preamble)) + (setq preamble (format nil "~a; ~a" preamble (caddr arg))))) + (apply #'$contour_plot `(,@args + ((mlist simp) $plot_format $gnuplot) +;; ((mlist simp) $gnuplot_preamble ,preamble) + ((mlist simp) $gnuplot_term $ps) + ((mlist simp) $gnuplot_out_file ,filename))) + + ($ldisp `((wxxmltag simp) ,filename "img"))) + "") + ) ;; This paran closes style-warning-suppressor. Index: imaxima.texi =================================================================== RCS file: /cvsroot/maxima/maxima/interfaces/emacs/imaxima/imaxima.texi,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- imaxima.texi 25 Mar 2008 03:24:54 -0000 1.1 +++ imaxima.texi 3 Nov 2008 06:16:23 -0000 1.2 @@ -3,8 +3,9 @@ @setfilename imaxima.info @settitle Imaxima Manual @paragraphindent 0 -@set VERSION 0.99 -@set UPDATED September 2007 +@c @set VERSION 1.0b +@c @set UPDATED June 7 +@include version.texi @synindex fn cp @synindex vr cp @synindex pg cp @@ -60,12 +61,15 @@ download the latest version of imaxima from @uref{http://members3.jcom.home.ne.jp/imaxima/}. +Since version 1.0b, imaxima and imath supports inline graph. + Send suggestions and bug reports to @email{imaxima@@mac.com, Yasuaki Honda}. @menu * Installation:: Installing imaxima (and breqn). * Usage:: Commands you can use in imaxima. +* Inline Graph:: Commands you can use for inline graph. * Options:: Customizing imaxima. * Imath minor mode:: Interactive Math minor mode. * Index:: @@ -219,6 +223,44 @@ information when you want to make bug reports. @end defun +@node Inline Graph +@chapter Inline Graph + +Since version 1.0b, imaxima and imath supports the inline graph display +feature. That is, if a special graph command (such as wxplot2d, wxplot3d) +is used in the maxima session, the graph generated by the command is +inserted in the maxima session buffer, instead of displaying in other +window. + + +Before using this feature, you must make sure @code{plot2d} does work +with Gnuplot by trying: +@example +(%i1) plot2d(x^2,[x,-5,5],[plot_format,gnuplot]); +@end example +If this works fine, then quite likely @code{wxplot2d} works, too. + +Following commands can be used in a maxima session to draw graphs to +be displayed inline: @code{wxplot2d}, @code{wxplot3d}, @code{wxdraw2d}, +@code{wxdraw3d}, @code{wximplicit_plot}, and @code{wxcontour_plot}. + +They correspond to their original commands @code{plot2d}, @code{plot3d}, @code{draw2d}, +@code{draw3d}, @code{implicit_plot}, and @code{contour_plot}. + +The syntax of the wx-prefixed versions of the commands and their +arguments are the same as the ones of the corresponding original +commands. Hence, @code{wxplot2} draws a graph inline in maxima session, +while @code{plot2d} displays the same graph in the different window. + +The wx-prefixed versions of the commands set up arguments so that Gnuplot +is used to draw the graph and writes the graph in extended postscript +format into a temporary file. So, it is suggested not to use plot options +such as @code{plot_format}. + +@code{wxdraw2d} and @code{wxdraw3d} autamatically load the draw package since +they call @code{draw2d} and @code{draw3d} internally. + + @node Options @chapter Options Index: setup-imaxima-imath.el =================================================================== RCS file: /cvsroot/maxima/maxima/interfaces/emacs/imaxima/setup-imaxima-imath.el,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- setup-imaxima-imath.el 19 Jun 2008 03:58:14 -0000 1.2 +++ setup-imaxima-imath.el 3 Nov 2008 06:16:23 -0000 1.3 @@ -1,6 +1,7 @@ ;; Copyright (C) 2007, 2008 Yasuaki Honda ;; Author: Yasuaki Honda (yh...@ma...) +;; $Id$ ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the GNU General Public License as @@ -30,7 +31,7 @@ "Maxima emacs mode maxima.el directory, added to load-path") (defvar *imaxima-maxima-bin-dir* - (file-name-directory (car (file-expand-wildcards "c:/PROGRA~1/MAXIMA~1.0/bin/maxima.bat"))) + (file-name-directory (car (file-expand-wildcards "c:/Program Files/Maxima*/bin/maxima.bat"))) "Maxima bin directory, added to exec-path") (defvar *imaxima-maxima-info-dir* @@ -49,8 +50,7 @@ ;;; latex.exe is specified for the latex program to be invoked. (setq imaxima-tex-program "latex.exe") -(defvar *imaxima-imath-dir* - (file-name-directory (car (file-expand-wildcards "d:/Program-Files/imaxima-imath/imaxima.el"))) +(defvar *imaxima-imath-dir* *imaxima-maxima-el-dir* "Imaxima imath directory, containing .el, .lisp, and .info files") ;;; The following definition eases the locating of imaxima.lisp. @@ -68,7 +68,7 @@ (setq exec-path (append (list *imaxima-gs-bin-dir* *imaxima-maxima-bin-dir* *imaxima-miktex-bin-dir*) exec-path)) ;;; set up load-path -(setq load-path (append (list *imaxima-maxima-el-dir* *imaxima-imath-dir*) load-path)) +(setq load-path (append (list *imaxima-imath-dir* *imaxima-maxima-el-dir*) load-path)) ;;; set up Info-additional-directory-list (setq Info-additional-directory-list (list *imaxima-imath-dir* *imaxima-maxima-info-dir*) Info-additional-directory-list) |