%%
% Standard Maple Environments
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ProvidesPackage{mapleenv}[1998/09/19 -- Maple Environments -- mapleenv.sty ]
\typeout{Defining Standard Maple Environemnts}
\RequirePackage{mapleutil}
\usepackage{color}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Copyright (c) 1994--1998 by Waterloo Maple Inc., all rights reserved.
%
% Permission is granted to use this package without charge. It may
% be redistributed providing that it is distributed as is
% and without charge.  You may modify these macros for your own use,
% and redistribute them, subject to the following conditions.
%
% 1. The package name used for any modified version of this file is 
%    different from mapleenv and the file name used is different from
%    mapleenv.sty
%
% 2. You acknowledge this copyright notice and this file as the source.
%
% 3. The new file is redistributed under the same terms and conditions 
%    as indicated here, including a version of this notice modified to
%    refer to the new file and/or package name.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 
% Mapleenv.sty - Environments for Export to LaTeX
%
% This package defines the environments used by Maple V Release 5's
% "Export to Latex" facility.  In addition, each of the environments 
% accepts an optional parameter.  For example, for example,
% Maple Input lines accept any of:
%
%      \begin{mapleinput}...\end{mapleinput},   (default)
%
% The contents of such an environment are in terms of mapleinline.
%
% The "Export to LaTeX" facility of the Maple worksheet does not use any
% of the optional parameters.  They exist to provide the additional
% control needed for reprocessing long LaTeX manuscripts and which is
% carried out by a special "Maple Filter".
% 
% Maple output can occur in several forms.  Maple's "prettyprint" output,
% as well as error messages and warnings, is encapsulated as
%
% 	        \begin{maplettyout}...\end{maplettyout} 
%
% "Export to Latex" generates LaTeX code for the entire worksheet. 
%  The displayed mathematics output is controlled to fit a
%  user specified line width and appears inside the environment
%
% 	\begin{maplelatex}...\end{maplelatex}
%
% Maple generated plots are exported as postscript files.
% The resulting files are included in the LaTeX document 
% by using the macro call
%
%  	\mapleplot{filename}
%
% On processing by LaTeX, the postscript code from the 
% indicated file is read into "dvi" file and a display is 
% generated at that point in the document.  The plot dimensions 
% are specified as \MaplePlotHeight and \MaplePlotWidth.
%
% The actual embedding is accomplished using the LaTeX2e graphics 
% package.  This style file has been tested with the following dvi to 
% PostScript conversion programs:
%
%     dvips 
%     dvipsone
%
% ----------------------------------------------
% Environments that ignored by the Maple Filter
% ----------------------------------------------
% The Maple Filter is a special version of Maple that can read
% and update latex files which have been developed using these
% macros.  There is a need, in such tex files, to display information
% in the same manner as the preceding manner and yet guarantee that
% the information is not changed by the Maple Filter.
% The macros are identical to those describe above, but with each 
% name preceded by an "i".
%
%   \begin{imapleinput}...\end{imapleinput}  like mapleinput
%   \begin{mapleinput}[p]...\end{imapleinput} as above, default case
%   \begin{imaplelatex}...\end{imaplelatex} like maplelatex
%   \imapleplot{filename}   like mapleplot
%   \imaplesepline	  like \maplesepline, but ignored by the filter.
%
% ----------------------------------------------
% Implementation Details
% ----------------------------------------------
% The mapleinput, and maplettyout environments are similar to 
% \begin{verbatim}...\end{verbatim} but with several 
% important differences.
%
% - The spacing relative to the surrounding environment is different.
%
% - Page breaks are encouraged before commands, or after results,
%   and discouraged inbetween.
%
% - maplettyout and maplelatex environments are assumed to follow
%   mapleinput regions and so have less space above.  This allows us to
%   reduce the space between adjacent Maple regions without any
%   elaborate mechanism to detect when there have been intervening
%   paragraphs of text.
%
% - the size of the font for text regions is definable.  Use \MapleFont
%   to reset the font.
%
% - the  indentation of the environments can be indented by setting 
%   the value of \LeftMapleSkip  .
%
% - a prompt is automatically generated at the start of each line in
%   the case of the input environments.
%
% Much of the spacing and sizing information is parameterized.
% The following Macros control most of the spacing for the the 
% Maple environments.  They are all resettable in the preamble of 
% your document. 
% 
% \AboveMapleSkip	- space above an environment
% \BelowMapleSkip	- space below an environment
% \AboveMaplePlot	- space above a Maple Plot 
% \BelowMaplePlot	- space below a Maple Plot
% \MaplePlotHeight	- vertical space reserved for a plot
% \MaplePlotWidth	- width reserved for a plot
% \MaplePlotAngle	- angle of rotatation
% \LeftMapleSkip 	- the amount of left indentation
% \MapleFont 		- The Maple font 
% \MapleSize 		- The size of the Maple font in mapleinput and 
%                          maplettyout
% \MapleLatexSize	- The size of the Maple fonts in maplelatex
% \MapleFirstLine	- controls ingoring first line feed
% \MaplePrompttrue 	- controls insertion of prompt char
% \MaplePromptString	- defines the prompt string
% \MaplePromptSecondary	- defines the secondary prompt string
% \MapleSkip		- amount of glue before and after
%			displayed text
% \MapleTab		- number of spaces per tab (8)
%
% Spacing, dimensions, etc.  
%
% These are all defined and given default values in the file
% mapleenv.def Most may be changed in your document preamble.
%
\input{mapleenv.def}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Define those Maple environments that are to be ignored by
% the Maple Filter.  
% 
% \begin{imapleinput} ...\end{imapleinput}
% \begin{imaplettyout} ...\end{imaplettyout}
% \begin{imaplelatex} ...\end{imaplelatex}
% \imaplesepline
% \imapleplot
%
% These environments are ignored by the Maple Filter.
%
% -- imapleinput
%
\def\imapleinput{
\removelastskip%
\MaplePrompttrue% prompt is required in this environment.
\if@minipage\removelastskip\vskip-1.3ex%
\else\vskip\AboveMapleSkip\fi%
\@SetupMapleTty{0}% The 0 indicates ignore first new line
\@BeginIMapleInput% 
}
%
\def\endimapleinput{%
  \@EndMapleTty%
  \removelastskip%
  \edef\@MapleIOType{\MapleIOType}
  \ifx\@MapleIOType\@MapleQuiet%
    \typeout{ .............Quiet Maple Command finished}
  \else
    \vskip\BelowMapleSkip% not usually followed by output...
  \fi%
  \@endpetrue
  \ignorespaces
}
%
% -- imaplettyout
%
\def\imaplettyout{
  \removelastskip%
  \nopagebreak[3]% 
  \MaplePromptfalse	  % No prompt is required in this environment.
  \@SetupMapleTty{1}   % The 1 indicates "respect first new line"
  \@BeginIMapleTtyout  % np indicates omit prompt
}
%
\def\endimaplettyout{%
  \@EndMapleTty%
  \removelastskip
  \vskip\BelowMapleSkip%
  \pagebreak[3]%
  \@endpetrue
  \ignorespaces
}%
%
% -- imaplelatex
%
%  an inert maple latex environment  (ignored by the filter)
%
\newenvironment{imaplelatex}%
{\vskip.5\AboveMapleSkip\vskip\z@\begin{maplelatex}}{\end{maplelatex}}%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Define active mapleinput environments.
% 
% \begin{mapleinput} ...\end{mapleinput}
% \begin{maplettyout} ...\end{maplettyout}
% \begin{maplelatex} ...\end{maplelatex}
% 
% These parameterized environments are intended for reprocessing 
% by the Maple Filter.
%
% The [a] case is used by default.  
% The [q] is the quiet (suppressed)  mode.
% The [ni] (no input) behaves the same as [q]
% The [no] behaves the same as [a]
%
% Page breaks are inhibited immediately following the input
% environment.  This assumes that no extra space is 
% required below the region as it is followed by some
% form of Maple output region.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% -- mapleinput
%
\newlength\newleftskip%
\newbox\mapleinputbox%
\newenvironment{mapleinput}{%
%\def\@gobblefirst##1{\relax\egroup\par}
%\def\@gobblesecond##1##2{##1\egroup\par}
\def\@gobblesemicolons##1{##1}
\advance\hsize by -\LeftMapleSkip%
\global\setbox\mapleinputbox=\vbox\bgroup%
\everypar{\the\MaplePromptString\MaplePromptString=\MaplePromptSecondary\ }
\leftskip=\z@%
\parindent=\z@%
\parfillskip=0pt plus 1fil
\lineskiplimit=0\normalbaselineskip
\baselineskip=.85\normalbaselineskip
}{%
\egroup% end of vbox
\par\removelastskip
\vskip\AboveMapleSkip%
\newleftskip=\leftskip%
\advance\newleftskip by \LeftMapleSkip%
\advance\newleftskip by \@totalleftmargin% needed for lists
\hbox{\hskip\newleftskip\box\mapleinputbox}
\vskip\BelowMapleSkip}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% -- maplettyout
%
\def\maplettyout{
  \removelastskip%
  \vskip 0pt plus 0pt minus 3pt%  
  \nopagebreak[3]% 
  \MaplePromptfalse	  % No prompt is required in this environment.
  \@SetupMapleTty{1}   % The 1 indicates "respect first new line"
  \@ifnextchar [{\@BeginMapleTtyout}{\@BeginMapleTtyout[a]}%
}
% 
\def\endmaplettyout{%
  \@EndMapleTty%
  \edef\@MapleIOType{\MapleIOType}
  \ifx\@MapleIOType\@MapleQuiet%
     \typeout{ .............Quiet Maple TTY finished}
  \else
    \vskip\BelowMapleSkip%
    \pagebreak[3]%
    \@endpetrue
    \ignorespaces
  \fi
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% -- maplelatex 
%
% This is essentially a wrapper around a display math environment
% It gobbles its content if the [q] or [no] options are in
% effect.
%
\newbox\maplebox
\def\maplelatex{\@ifnextchar [{\@maplelatex}{\@maplelatex[a]}}
%
\def\@maplelatex[#1]{%
\edef\@MapleIOType{#1}%
\gdef\MapleIOType{#1}%% for \ifx test%
\ifx\@MapleIOType\@MapleNoOutput%
\typeout{ .............Output Option [no]}%
\gdef\MapleIOType{q}%%  handle same as \@MapleQuiet  
\fi%
\global\setbox\maplebox=\vbox\bgroup%
\MakeSuperScript{^}%  Ensure these have normal interpretation
\MakeSubScript{_}%
}%
%
\def\endmaplelatex{\egroup%
\edef\@MapleIOType{\MapleIOType}%
\ifx\@MapleIOType\@MapleQuiet%   End the same as the verbatim's
\par%
%\@endpetrue
\else%
%\ifvmode\removelastskip\fi%
\nopagebreak[3]%
\centerline{%
\vbox{%
\hbox{\vrule height4pt depth0pt width 0pt}%
\unvbox\maplebox}}%
\vskip\BelowMapleSkip%
\everypar{}%
\par%

%\pagebreak[3]%
%\@endpetrue
%\ignorespaces
\fi%
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% -- maplesepline
%
\newcommand{\maplesepline}{\vskip \parskip%
\hrule\@height\MapleSepLineHeight\@width\MapleSepLineWidth%
\vskip \parskip\relax}
%
% -- imaplesepline ( the inert form )
%
\let\imaplesepline\maplesepline
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% -- \mapleIndent
%
% - Special Indentation Macro used to format procedures
%
\newdimen\Tab
\Tab=3ex
\def\mapleIndent#1{\hbox{\hskip#1\Tab\relax}}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  Special environments for in-line maple commands.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%  \begin{maplegroup}				- maple exchange group
%  ...
%  ... and \mexpr{sin(x^2)} ...			- inline maple code
%  ...
%  \mapleinline{Inert}{TwoD}{int(sin(x^2),x);}{%	- for maple filter
%  {mapletex}{$\int{ .... }$}		        - for latex
%  ...
%  ...
%  \mapleresult					- location of inline results
%  \begin{maplelatex}				- actual displayed results
%  ...
%  \end{maplelatex}
%  \end{maplegroup}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 
% -- \mexpr 
%
% 	\mexpr{int(sin(x^2),x)} --- \mapleexpr{int(sin(x^2),x)}
%
% To make { and } visible in this verbatim environment, use \{ and \}
% Also, to make \ visible, use \\. 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
\def\mexpr{\setbox\@inlinebox=\hbox\bgroup\ttfamily\dosetup\let\\\BackSlash\@domexpr}
%
\def\mapleexpr{\bgroup\ttfamily\dosetup\let\\\BackSlash\@domexpr}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%  \@dosetup	      sets up the character codes, etc. for verbatim
%  \@domexpr          completes the following inline math
%  \@gobblefirst      absorbs the inline math (not displaying it)
%  \@gobblesecond     absorbs the second following argument.
%  \@gobblesemicolons      absorbs semi-colons inside of the 1d mode.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\dosetup{\let\do\@makeother\dospecials\postdospecials}
%
%\def\@domexpr#1{#1\egroup\fbox{\box\@inlinebox}}
\def\@domexpr#1{#1\egroup\box\@inlinebox}
%
\def\@gobblefirst#1{%
\relax\egroup%
% \fbox{\box\@inlinebox}%   %%% DEBUG %%%
\box\@inlinebox%
\setbox\@inlinebox=\hbox{}}
%
\def\@gobblesecond#1#2{%
#1\egroup\ignorespaces%
% \fbox{\box\@inlinebox}% %%% DEBUG %%%
\box\@inlinebox%
\setbox\@inlinebox=\hbox{}}
%
\def\@gobblesemicolons{\MakeActive{;}\@@gobblesemicolons}
%
{\MakeActive{;}\gdef\@@gobblesemicolons{\edef;{\relax}}}

%%% end of mexpr
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 
% -- \mapleinline
%
%	Essentially a four argument macro used to control the
%	display of inline material generated by Maple.
%
%	\mapleinline %
%	 	% "active", or "inert"
%	  % 1d or 2d
%	 % raw maple code as per \mexpr
%	 % latex representation
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \mapleinline{inert}{2d}{int(sin(x^2),x)}{ % used to generate display
% $\int{\sin(x^2),dx}$}	                    % updated by the filter
%
% Could use \@bsphack ... \@esphack for absorbing unwanted space not 
% currently used, but spacing inside this macro definition is 
% very important.
%
\edef\OneD{1d}\edef\TwoD{2d}% # tokens to identify modes
\newif\ifDisplay\Displayfalse
\newbox\@inlinebox\setbox\@inlinebox=\hbox{}%
\@ifundefined{@skiponetoken}{\gdef\@skiponetoken#1{\relax}}{\relax}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 2-D output
% final output macro for mapleinline.
% include spacing above and below to ensure there is
% whitespace around the object when it occurs in
% a spreadsheet cell.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\@doTwoD#1{\egroup%
%\@ifnextchar\cr{\@skiponetoken}{\relax}%
\@@doTwoD}%
%
\newdimen\cellwidth%
\def\@@doTwoD#1{%
\ignorespaces%
\setbox\@inlinebox=\hbox{\textcolor{blue}{#1}}%
%\setbox\@inlinebox=\hbox{#1}%
\ifMapleTableCell%  		  Used in maplespreadsheet
\cellwidth=\wd\@inlinebox%
\hbox{$\vcenter{\hsize=\cellwidth%
\hbox{\vrule height3pt depth0pt width 0pt}%
\box\@inlinebox%
\hbox{\vrule height0pt depth 3pt width 0pt}%  Actual output
}$}%
\egroup%
\else%				  Used inline ...
%\fbox{\hbox{\unhbox\@inlinebox}}\egroup% Actual output
\box\@inlinebox\egroup%
\fi%
}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 1-D output
% Final output macro for mapleinline for 1-D output.
% The raw tokens must be dumped into the output stream so
% we use unhbox.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\@doOneD#1{\MakeOther{\ } \textcolor{red}{#1}\egroup\unvbox\@inlinebox\relax\@mgobbleone}
%\def\@doOneD#1{\MakeOther{\ } #1\egroup\unvbox\@inlinebox\relax\@mgobbleone}
\def\@mgobbleone#1{\relax\egroup}
%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\mapleinline#1#2{%
% ignore first argument (inert or active)		
\def\[{$}\def\]{$}%		% needed for math mode.
\edef\DisplayType{#2}%		% 1d or 2d
\ifx\DisplayType\TwoD%
\let\Display\@doTwoD%	% display the 2-D representation
\global\Displaytrue%
\else%
\let\Display\@doOneD%	% display the 1-D representation
\global\Displayfalse%
\fi%
\bgroup%
\global\setbox\@inlinebox=\vbox\bgroup%
\obeylines%
\everypar{\the\MaplePromptString\MaplePromptString=\MaplePromptSecondary\ }
\ttfamily\dosetup\obeyspaces\let\\\BackSlash\Display%
}%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% -- \begin{maplegroup} ... \end{maplegroup}
% -- \mapleresult
%
%	A environment used to group commands and result together into
%	one unit.  Inside, these are separated by \mapleresult.
%	The maple filter automatically deletes the part of a maplegroup
%	which follows \mapleresult and replaces it with new results.
%	
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\newenvironment{maplegroup}{}{}
\def\maplegroup{\relax}
\def\endmaplegroup{\relax}
\let\mapleresult\relax   
\endinput %%% mapleenv.sty
%%%