Maxima Frontier
◉ はじめに
Maxima Frontier の各文書の中では、Maxima による処理(主に関数)を記した外部ファイルを表現する際に、listings.sty を利用しています。listings.sty は、各種プログラミング言語等のソースファイルを LaTeX 文書に簡単に、しかも美しく掲載するために作成されているスタイルファイルです。利用可能な言語として、C、Java、Perl 等はもとより、Mathematica や MuPAD までもが用意されていますが、残念ながら Maxima は用意されていません。もちろん、あらかじめ用意されていない言語等でも、自分で定義すれば listings.sty は利用可能ですので、定義を例示しておきます。
◉ Maxima の入出力
Maxima は通常ターミナル(コマンドプロンプト)で実行しますから、入出力は全て Type Writer 体で表現すればよいでしょう。
\documentclass[b5paper,10pt]{jsarticle}
\usepackage[deluxe]{otf}
\usepackage[svgnames]{xcolor}
\usepackage{txfonts, listings, jlisting}

% listings.sty
\lstdefinelanguage{IOA}{%
	keywords={}, basicstyle=\ttfamily,
	texcl=true, escapeinside=`',	% TeX の命令を使えるようにする
	keepspaces=true, tabsize=5,
	basewidth=0.5em,		% 文字間隔を少し縮める
}

\begin{document}

\begin{lstlisting}[language=IOA]
(%i1) monte(n) := block([k: 0],
	for i: 1 thru n do if random(1.0)^2 + random(1.0)^2 < 1 then k: k + 1,
	float(4 * k / n)
);
(%o1) monte(n) := block([k : 0], for i thru n 
                 2              2                                4 k
     do if random (1.0) + random (1.0) < 1 then k : k + 1, float(---))
                                                                  n
(%i2) monte(10000);
(%o2)                               3.1256
\end{lstlisting}

\end{document}
このとき、出力は次のようになります。
これだけでは、単純に verbatim 環境を用いた場合と変わりませんが、listings.sty を用いると、背景に色をつけたり、行番号を付けたり、内部で LaTeX の命令が使えるといったメリットがあります。
\documentclass[b5paper,10pt]{jsarticle}
\usepackage[deluxe]{otf}
\usepackage[svgnames]{xcolor}
\usepackage{txfonts, listings, jlisting}

% listings.sty
\lstdefinelanguage{IOB}{%
	keywords={}, basicstyle=\ttfamily,
	texcl=true, escapeinside=`',		% TeX の命令を使えるようにする
	keepspaces=true, tabsize=5,
	frame=single, rulecolor=\color{white}, framesep=6pt,	% ダミーの罫線を入れる
	backgroundcolor=\color{LavenderBlush},	% 背景に色を付ける
	xleftmargin=6pt, xrightmargin=6pt,	% framesep の値に合わせる
	basewidth=0.5em,			% 文字間隔を少し縮める
	numbers=left, numberstyle=\footnotesize, numbersep=12pt
}

\begin{document}

\begin{lstlisting}[language=IOB]
(%i1) monte(n) := block([k: 0],
	for i: 1 thru n do if random(1.0)^2 + random(1.0)^2 < 1 then k: k + 1,
	float(4 * k / n)
);
(%o1) monte(n) := block([k : 0], for i thru n 
                 2              2                                4 k
     do if random (1.0) + random (1.0) < 1 then k : k + 1, float(---))
                                                                  n
(%i2) monte(10000);
(%o2)                               3.1256 `\hfill{← $\pi$ の近似値}'
\end{lstlisting}

\end{document}
この場合の出力は、次のようになります。一番したの「← π の近似値」が LaTeX の命令を利用した部分です。
この他、frame の引数に、l、r、t、b、L、R、T、B を与えることで、周囲を罫線(小文字が一重線、大文字が二重線)で囲むことも出来ますし、lineskip で行間を調整すること等も出来ますが、背景色が帯状になったり、縦の罫線が切れ切れになってしまうことがあるようです。そのため、Maxima Frontier では、fancyvrb.sty と framed.sty を組み合わせて記述しています。
\newenvironment{IO}{
        \VerbatimEnvironment%
        \definecolor{shadecolor}{cmyk}{0.2, 0, 0.25, 0}%
        \setlength{\topsep}{0.5¥topsep}
        \begin{shaded}%
        \setlength{\baselineskip}{0pt}
        \begin{Verbatim}[tabsize=4, baselinestretch=0.8,
        frame=single, framerule=0pt, framesep=3pt]%
}{
        \end{Verbatim}%
        \end{shaded}%
}
上記をプリアンブルに記入しておき、本文の中で Maxima の入出力を \begin{IO} と \end{IO} で囲みます。出力例は、Maxima Frontier の各文書をご覧下さい。
◉ Maxima の処理・関数
Maxima の処理を LaTeX 文書に掲載する場合は、組み込み関数を太字にすると美しくなります。
\documentclass[b5paper,10pt]{jsarticle}
\usepackage[deluxe]{otf}
\usepackage[svgnames]{xcolor}
\usepackage{txfonts, listings, jlisting}

% listings.sty
\lstdefinelanguage{Maxima}{%
	morekeywords={%
		algsys, alphacharp, append, 
		bfloat, block, 
		charlist, cint, color, cons, 
		diff, disp, divide, do, draw2d, 
		else, elseif, endcons, endcons, evenp, explicit, 
		false, float, for, 
		ident, if, in, 
		karatsuba, 
		length, line_width, 
		makelist, matrix, 
		oddp, 
		point_size, point_type, points, print, printf, 
		random, read_list, realonly, rest, return, 
		sdowncase, sqrt, subst, sum, 
		then, thru, times, true, 
		user_preamble, 
		while, 
		zerolist
	},
	texcl=true, escapeinside=`',
	numbers=left, numberstyle=\footnotesize, 
	numbersep=12pt, tabsize=4, breaklines=true, 
	frame=single, framerule=0.4pt, framesep=6pt
}


\begin{document}

\begin{lstlisting}[language=Maxima]
monte(n) := block([k: 0],
	for i: 1 thru n do if random(1.0)^2 + random(1.0)^2 < 1 then k: k + 1,
	float(4 * k / n)
);
\end{lstlisting}

\end{document}
必要に応じて、keywords に関数名や変数名を追記していきます。出力結果は次の通りです。