Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
% This file: % http://angg.twu.net/LATEX/emaxima.sty.html % http://angg.twu.net/LATEX/emaxima.sty % (find-angg "LATEX/emaxima.sty") % % This is a copy of the file emaxima.sty from the Maxima distribution % with these two lines commented out: % % %\usepackage[pdftex]{color} % %\usepackage{pdfcolmk} %%%% Identification \ProvidesPackage{emaxima}[2004/12/20] %%% Commentary % This package can be loaded with the command % \usepackage[options...]{emaxima} % The possible options (explained below) are: % breqn, lines, listings, preview % The breqn option will use the LaTeX breqn package (which must be % installed) to break long maxima lines into shorter lines % automatically. % The preview option will enable the Emacs preview package (which % must be installed) to preview the maxima environments. % The lines option will put lines before and after some of the % environments. % The listings option will use the LaTeX listings package (which must % be installed) to typeset some of the maxima code. To use this, the % file maxima.sty must be in the search path for TeX. % % This package provides the following environments: % \begin{maxima} % ... % \end{maxima} % and % \begin{maximasession} % ... % \end{maximasession} % (Both versions have starred forms: maxima* and maximasession*, which % will be skipped when the document is typeset.) % The maxima environments can be joined with [...] optional arguments % (as described in the documentation). % The maxima and maximasession environments are sometimes split into % input and output, separated by % \maximaoutput % or (if the output is in TeX form) % \maximaoutput* %%% %%%% How to customize % Indentation % \setlength{\maximaindent}{<len>} will set the indentation % of all the maxima code % Colors % \renewcommand{\maximapromptcolor}{<color>} % \renewcommand{\maximainputcolor}{<color>} % \renewcommand{\maximaoutputcolor}{<color>} % will set the colors of the TeX output of the sessions. % Cell appearance % The top, middle and bottom of a maxima cell are determined by the % commands: \maximatop, \maximamiddle, \maximabottom % By default, \maximamiddle is set to \maximaoutputmarker. % If the lines option is used, then \maximatop and \maximabottom % are set to \maximaboxtop and \maximaboxbottom, respectively. % Otherwise, \maximatop and \maximabottom are set to do nothing. % The top and bottom of a maxima session are determined by % \maximasessiontop and \maximasessionbottom, respectively. % By default, they do nothing. % Fonts % The verbatim output for maxima cells is inserted with % \maximaverbatiminput. This will do one of two things. % If the listings option is used, this is defined by % \lstinputlisting[style=emaxima]{#1}, and so can be adjusted by % resetting the emaxima style. By default, this style is given by % \lstdefinestyle{emaxima} % {language=maxima, % aboveskip=0pt, % belowskip=0pt, % xleftmargin=\maximaindent} % If the listings package is not used, then \maximaverbatiminput is % defined by \VerbatimInput[xleftmargin=\maximaindent]{#1} % (\VerbatimInput is from the fancyvrb package.) % In either case, it can be adjusted by redefining % \maximaverbatiminput, which is expected to indent everything by % \maximaindent % The fonts used in the maximasessions is \maximafont, by default % \ttfamily. %%%% Initial Code \RequirePackage{ifthen} \RequirePackage{alltt} \usepackage{ifpdf} \ifpdf %\usepackage[pdftex]{color} %\usepackage{pdfcolmk} \color{black} \else \usepackage{color} \fi \newboolean{m@ximapreview} \setboolean{m@ximapreview}{false} \newboolean{m@ximabreqn} \setboolean{m@ximabreqn}{false} \newboolean{m@ximalistings} \setboolean{m@ximalistings}{false} \newboolean{m@ximalines} \setboolean{m@ximalines}{false} \newboolean{m@ximainline} \setboolean{m@ximainline}{false} %%%% Declaration of options \DeclareOption{preview} {\setboolean{m@ximapreview}{true}} \DeclareOption{breqn} {\setboolean{m@ximabreqn}{true}} \DeclareOption{listings} {\setboolean{m@ximalistings}{true}} \DeclareOption{lines} {\setboolean{m@ximalines}{true}} \DeclareOption{inline} {\setboolean{m@ximainline}{true}} %%%% Execution of options \ProcessOptions %%%% Package loading %%%% Main code %%%% Some TeX coding % First of all, a command to deactivate everything except \ \chardef \other = 12 \def\m@ximadeactivate{% \catcode`\$ = \other \catcode`\& = \other \catcode`\# = \other \catcode`\% = \other \catcode`\~ = \other \catcode`\^ = \other \catcode`\_ = \other \catcode`\ = \other \catcode`\{ = \other \catcode`\} = \other} % Next, a comment environment which ends at the next \end, % \maximaoutput or \maximasessionoutput. % It does this by looking at the next token and seeing if it is % one of these. If not, it discards it; if it is, it ends the % comment environment. % Putting \m@ximastartcomment (even inside a command) will start this. \def\m@ximacomment{% \futurelet\m@xima@token\m@ximacommentl@@k} \def\m@ximacommentl@@k{% \ifx\m@xima@token\end \let\m@xima@next=\m@xima@endcomment \else \ifx\m@xima@token\maximaoutput \let\m@xima@next=\m@xima@endcomment \else \ifx\m@xima@token\par \let\m@xima@next=\m@ximaparcomment \else \let\m@xima@next=\m@ximacommenttwo \fi \fi \fi \m@xima@next} \def\m@ximaparcomment#1\par{% \m@ximacomment} \def\m@ximacommenttwo#1 {% \m@ximacomment} \def\m@ximastartcomment{% \begingroup \m@ximadeactivate \m@ximacomment} \def\m@xima@endcomment{% \endgroup} % Also, a comment environment which only ends with \end % Putting \m@ximastartfullcomment (even inside a command) will start this. \def\m@ximafullcomment{% \futurelet\m@xima@token\m@ximafullcommentl@@k} \def\m@ximafullcommentl@@k{% \ifx\m@xima@token\end \let\m@xima@next=\m@xima@endfullcomment \else \ifx\m@xima@token\par \let\m@xima@next=\m@ximaparfullcomment \else \let\m@xima@next=\m@ximafullcommenttwo \fi \fi \m@xima@next} \def\m@ximaparfullcomment#1\par{% \m@ximafullcomment} \def\m@ximafullcommenttwo#1 {% \m@ximafullcomment} \def\m@ximastartfullcomment{% \begingroup \m@ximadeactivate \m@ximafullcomment} \def\m@xima@endfullcomment{% \endgroup} % Next, a write environment which ends at the next \maximaoutput or \end. % It does this by looking at the next token and seeing if it is % one of these. If not, it writes it; if it is, it ends the % write environment. % It can be started with \m@ximastartwrite \def\m@ximatempfile{\jobname.tmp} \newwrite\m@ximaout \def\m@ximawriteskipline#1 {% \m@ximawrite} \def\m@ximawrite{% \futurelet\m@xima@token\m@ximawritel@@k} \def\m@ximawritel@@k{% \ifx\m@xima@token\end \let\m@xima@next=\m@xima@endwrite \else \ifx\m@xima@token\maximaoutput \let\m@xima@next=\m@xima@endwrite \else \ifx\m@xima@token\par \let\m@xima@next=\m@xima@parwrite \else \let\m@xima@next=\m@ximawritetwo \fi \fi \fi \m@xima@next} \def\m@xima@parwrite#1\par{% \immediate\write\m@ximaout{} \m@ximawrite} \def\m@ximawritetwo#1 {% \immediate\write\m@ximaout{\noexpand#1}% \m@ximawrite} \def\m@ximastartwriteskipline{% \begingroup \immediate\openout \m@ximaout \m@ximatempfile \m@ximadeactivate \m@ximawriteskipline} \def\m@ximastartwrite{% \begingroup \immediate\openout \m@ximaout \m@ximatempfile \m@ximadeactivate \m@ximawrite} \def\m@xima@endwrite{% % \immediate\write\m@ximaout{ } \immediate\closeout\m@ximaout% \endgroup \m@ximawritetempfile} % A command to verbatim typeset the file. % It is determined by the command \maximaverbatiminput, % whose default value depends on the option listings. \newcommand{\m@ximawritetempfile} {\par \noindent \maximaverbatiminput{\m@ximatempfile} \par} % The \maximaverbatiminput command depends on whether the % listings option is given. % The command should indent the code to \maximaindent \newlength{\maximaindent} \setlength{\maximaindent}{2ex} \newcommand{\m@ximaindent} {\setlength{\leftskip}{\maximaindent} \setlength{\rightskip}{\maximaindent}} \ifthenelse{\boolean{m@ximalistings}} {\RequirePackage{maxima} \lstdefinestyle{emaxima} {language=maxima, aboveskip=0pt, belowskip=0pt, xleftmargin=\maximaindent} \newcommand{\maximaverbatiminput}[1] {\lstinputlisting[style=emaxima]{#1}}} {\RequirePackage{fancyvrb} \newcommand{\maximaverbatiminput}[1] {\VerbatimInput[xleftmargin=\maximaindent]{#1}}} % Now, a command to see if the argument ends in a colon or not % \maximaendsincolon{string} will set the boolean maximaendsincolon % to be true if string ends with a colon, false otherwise. \newboolean{m@ximaendsincolon} \newcommand{\maximaendsincolon}[1] {\setboolean{m@ximaendsincolon}{false} \m@ximacheckcolon#1\end} \newcommand{\m@ximacheckcolon}[1] {\ifx#1\end \let\next=\relax \else \let\next=\m@ximacheckcolon \ifx#1: \setboolean{m@ximaendsincolon}{true} \else \setboolean{m@ximaendsincolon}{false} \fi \fi \next} \newcommand{\m@ximaremovecolon}[1] {{\m@cstrip#1}} \def\m@cstrip#1:{#1} %% Now, set some environments %% We need environments for maxima, maxima*, maximasession, maximasession* %% Any environment that ends in * will be a comment environment \newenvironment{maxima*}[1][] {\m@ximastartfullcomment} {} \newenvironment{maximasession*}[1][] {\m@ximastartfullcomment} {} %% The maxima environment should write verbatim the ``top'' part %% (before an output marker) and the the bottom verbatim or TeXed. %% A macro for writing Maxima in the ``proper'' font \newcommand{\Maxima}{\textsf{\textsl{Maxima}}} %% The top of the box \newcommand{\m@ximanoparttop} {\vskip -1ex \hbox to \hsize{\vrule depth 1ex height .3pt width .4pt \vrule height .4pt depth 0pt width 1.1em \lower .4ex \hbox{\tiny ~\Maxima} \hrulefill \vrule depth 1ex height .3pt width .4pt} \vskip 1ex} \newcommand{\m@ximaparttop} {\vskip -1ex \hbox to \hsize{\vrule depth 1ex height .3pt width .4pt \vrule height .4pt depth 0pt width 1.1em \lower .4ex \hbox{\tiny ~\Maxima} \hrulefill \lower .4ex \hbox{\tiny~\m@ximapartname} \hrulefill \vrule depth 1ex height .3pt width .4pt} \vskip 1ex} \newcommand{\maximaboxtop} {\ifthenelse{\equal{\m@ximapartname}{}} {\m@ximanoparttop} {\m@ximaparttop}} %% The bottom of the box \newcommand{\maximaboxbottom} {\hbox to \hsize{\vrule depth 0ex height 1ex width .4pt \hrulefill \vrule depth 0ex height 1ex width .4pt}} %% The middle of the box \newcommand{\maximaoutputmarker} {\par\noindent \hspace*{\maximaindent} \rule{.4\linewidth}{0.4pt} \par\noindent} % \newcommand{\maximaoutputmarker} % {\par\noindent % \vskip -1ex % \hbox to \hsize{\hskip 1.5em % \vrule height .4pt depth 0pt width 3em % \lower .4ex \hbox{\tiny Output} % \hrulefill % \hskip 1.5em} % \vskip 1ex % \par\noindent} %% Setting the name \newcommand{\m@ximasetname}[1] {\maximaendsincolon{#1} \ifthenelse{\equal{#1}{}} {\renewcommand{\m@ximapartname}{}} {\ifthenelse{\boolean{m@ximaendsincolon}} % {\renewcommand{\m@ximapartname}{Definition of #1}} {\renewcommand{\m@ximapartname}{Definition of \m@ximaremovecolon{#1}}} {\renewcommand{\m@ximapartname}{#1}}}} %% Now the environments \newboolean{m@ximaverbatimoutput} \newboolean{m@ximatexoutput} \newcommand{\m@ximapartname}{} % Default top, middle and bottom of the maxima environment \ifthenelse{\boolean{m@ximalines}} {\newcommand{\maximatop}{\maximaboxtop} \newcommand{\maximamiddle}{\maximaoutputmarker} \newcommand{\maximabottom}{\maximaboxbottom}} {\newcommand{\maximatop}{} \newcommand{\maximamiddle}{\maximaoutputmarker} \newcommand{\maximabottom}{}} \newcommand{\maximaoutput}{} \newenvironment{maxima}[1][]% {~\par\renewcommand{\maximaoutput} {\@ifstar{\maximatexoutput}{\maximaverbatimoutput}} \begingroup \m@ximasetname{#1} \setboolean{m@ximaverbatimoutput}{false} \setboolean{m@ximatexoutput}{false} \maximatop \ifthenelse{\equal{\m@ximapartname}{}} {\m@ximastartwrite}{\m@ximastartwriteskipline}} {\ifthenelse{\boolean{m@ximaverbatimoutput}} {} % verbatim output {\ifthenelse{\boolean{m@ximatexoutput}} {\par\noindent} % TeX output {}} % no output \maximabottom \endgroup \par\noindent} \newcommand{\maximaverbatimoutput} {\setboolean{m@ximaverbatimoutput}{true} \maximamiddle \m@ximastartwrite} \newcommand{\maximatexoutput} {\def\m##1\\{% \par\noindent \begingroup\maximafont\color{\maximaoutputcolor} \begin{em@ximam@th} ##1 \end{em@ximam@th}\endgroup} \def\t##1.##2\\{% \par\noindent \begingroup\maximafont\color{\maximaoutputcolor}\textcolor{\maximapromptcolor} {(\%t##1)}\begin{em@ximam@th} ##2 \end{em@ximam@th}\endgroup} \def\p{\begingroup\color{\maximaoutputcolor} \setupm@ximasessionverbatim\dom@ximasessionpreprompt} \setboolean{m@ximatexoutput}{true} \maximamiddle \m@ximaindent \par\noindent} %% Some stuff to help with lists of examples \newcommand{\maximaexamplesname}{List of Maxima Examples} %% Some stuff of the list of examples \@ifclassloaded{book} {\newcounter{maximaexample}[chapter] \newcommand\listofmaximaexamples{% \if@twocolumn \@restonecoltrue\onecolumn \else \@restonecolfalse \fi \chapter*{\maximaexamplesname}% \@mkboth{\MakeUppercase\maximaexamplesname}% {\MakeUppercase\maximaexamplesname}% \@starttoc{lom}% \if@restonecol\twocolumn\fi } \newcommand{\maxcaption}[1]{\addcontentsline{lom}{figure} {\protect\numberline{\thechapter.\themaximaexample} {\protect\ignorespaces #1}}}} {\newcounter{maximaexample} \newcommand\listofmaximaexamples{% \if@twocolumn \@restonecoltrue\onecolumn \else \@restonecolfalse \fi \section*{\maximaexamplesname}% \@mkboth{\MakeUppercase\maximaexamplesname}% {\MakeUppercase\maximaexamplesname}% \@starttoc{lom}% \if@restonecol\twocolumn\fi } \newcommand{\maxcaption}[1]{\addcontentsline{lom}{figure} {\protect\numberline{\themaximaexample} {\protect\ignorespaces #1}}}} \newcommand{\l@example}[2]{\par\noindent#1 {\itshape #2}} %% The maximasession environment should ignore the ``top'' part %% (before an output marker) and the the bottom verbatim or TeXed. %% If TeXed, some commands need to be set up. \newboolean{m@ximasessionverbatimoutput} \newboolean{m@ximasessiontexoutput} \newcommand{\maximasessiontop}{} \newcommand{\maximasessionbottom}{} \newenvironment{maximasession}[1][] {~\par\renewcommand{\maximaoutput} {\begingroup \@ifstar{\maximasessiontexoutput}{\maximasessionverbatimoutput}} \ifthenelse{\equal{#1}{}} {}{\stepcounter{maximaexample} \maxcaption{#1}} \setboolean{m@ximasessionverbatimoutput}{false} \setboolean{m@ximasessiontexoutput}{false} \m@ximastartcomment} {\ifthenelse{\boolean{m@ximasessionverbatimoutput}} {\maximasessionbottom \endgroup\par\noindent} % verbatim output {\ifthenelse{\boolean{m@ximasessiontexoutput}} {\par\maximasessionbottom \endgroup\par\noindent} % TeX output {}}} \newenvironment{maximanu} {\begin{maxima}} {\end{maxima}} \newenvironment{maximasessionnu} {\begin{maximasession}} {\end{maximasession}} \newenvironment{maximanu*} {\begin{maxima*}} {\end{maxima*}} \newenvironment{maximasessionnu*} {\begin{maximasession*}} {\end{maximasession*}} \ifthenelse{\boolean{m@ximapreview}} {\RequirePackage{preview} \PreviewEnvironment[{[]}]{maxima} \PreviewEnvironment{maximasession}} {} \newcommand{\maximasessionverbatimoutput} {\setboolean{m@ximasessionverbatimoutput}{true} \maximasessiontop \m@ximastartwrite} \ifthenelse{\boolean{m@ximainline}} {\newenvironment{em@ximam@th} {\hfil\(} {\)\hfil}} {\ifthenelse{\boolean{m@ximabreqn}} {\RequirePackage[cmbase]{flexisym} \RequirePackage{breqn} \newenvironment{em@ximam@th} {\begin{dmath*}} {\end{dmath*}}} {\newenvironment{em@ximam@th} {\begin{displaymath}} {\end{displaymath}}}} \newcommand{\maximapromptcolor}{red} \newcommand{\maximainputcolor}{blue} \newcommand{\maximaoutputcolor}{blue} \newcommand{\maximafont}{\ttfamily} \def\m@ximauncatcodespecials{\def\do##1{\catcode`##1=12 }\dospecials} \def\m@ximapercent{\%} \def\setupm@ximasessionverbatim{ \obeylines \m@ximauncatcodespecials \obeyspaces} {\obeyspaces\global\let =\ } {\catcode`\|=0 \catcode`\\=12 % |obeylines|gdef|dom@ximatexsessionverbatim#1.#2\\{|maximafont|par|noindent|textcolor{|maximapromptcolor}{(|m@ximapercent{}i#1)}#2|par|endgroup} |obeylines|gdef|dom@ximasessionpreprompt#1\\{|par|noindent#1|par|endgroup}} \newcommand{\maximasessionpreoutput}{} \newcommand{\m@ximasetupsessiontexoutput} {\def\i{\begingroup\color{\maximainputcolor} \setupm@ximasessionverbatim\dom@ximatexsessionverbatim} \def\o##1.##2\\{% \par\noindent \begingroup\maximafont\color{\maximaoutputcolor}\textcolor{\maximapromptcolor} {(\%o##1)}\begin{em@ximam@th} ##2 \end{em@ximam@th}\endgroup} \def\oo##1\\{% \par\noindent \begingroup\maximafont\color{\maximaoutputcolor} \begin{em@ximam@th} ##1 \end{em@ximam@th}\endgroup} \def\t##1.##2\\{% \par\noindent \begingroup\maximafont\color{\maximaoutputcolor}\textcolor{\maximapromptcolor} {(\%t##1)}\begin{em@ximam@th} ##2 \end{em@ximam@th}\endgroup} \def\ps{maximasessionpreoutput} \def\p{\begingroup\color{\maximaoutputcolor} \setupm@ximasessionverbatim\dom@ximasessionpreprompt}} \newcommand{\maximasessiontexoutput} {\setboolean{m@ximasessiontexoutput}{true} \maximasessiontop \m@ximasetupsessiontexoutput \m@ximaindent}