[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

39. alt-display


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

39.1 Introduction to alt-display

alt-displayパッケージは、 Maximaが出力を表示する方法を変える手段を提供します。 2002年に *alt-display1d**alt-display2d* Lispフックが Maximaに導入されましたが、 このパッケージの導入まで Maxima REPLから容易にアクセスできませんでした。

パッケージは、代わりの表示関数を定義する汎用の関数と表示関数を設定する別の関数を提供します。 パッケージは、 TeX, Texinfo, XML, Texinfo内の3つの出力フォーマットすべてで出力を生成するカスタマイズされた表示関数も提供します。

以下はサンプルのやり取りです:

 
(%i1) load("alt-display.mac")$
(%i2) set_alt_display(2,tex_display)$

(%i3) x/(x^2+y^2) = 1;
\mbox{\tt\red({\it \%o_3}) \black}$${{x}\over{y^2+x^2}}=1$$

(%i4) set_alt_display(2,mathml_display)$

(%i5) x/(x^2+y^2) = 1;
<math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>mlabel</mi>
<mfenced separators=""><msub><mi>%o</mi> <mn>5</mn></msub>
<mo>,</mo><mfrac><mrow><mi>x</mi> </mrow> <mrow><msup><mrow>
<mi>y</mi> </mrow> <mn>2</mn> </msup> <mo>+</mo> <msup><mrow>
<mi>x</mi> </mrow> <mn>2</mn> </msup> </mrow></mfrac> <mo>=</mo>
<mn>1</mn> </mfenced> </math>

(%i6) set_alt_display(2,multi_display_for_texinfo)$

(%i7) x/(x^2+y^2) = 1;

@iftex
@tex
\mbox{\tt\red({\it \%o_7}) \black}$${{x}\over{y^2+x^2}}=1$$
@end tex
@end iftex
@ifhtml
@html

<math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>mlabel</mi>
<mfenced separators=""><msub><mi>%o</mi> <mn>7</mn></msub>
<mo>,</mo><mfrac><mrow><mi>x</mi> </mrow> <mrow><msup><mrow>
<mi>y</mi> </mrow> <mn>2</mn> </msup> <mo>+</mo> <msup><mrow>
<mi>x</mi> </mrow> <mn>2</mn> </msup> </mrow></mfrac> <mo>=</mo>
<mn>1</mn> </mfenced> </math>
@end html
@end ifhtml
@ifinfo
@example
(%o7) x/(y^2+x^2) = 1
@end example
@end ifinfo

もし代わりの表示関数がエラーを起こしたら、エラーが捕捉され、表示関数はデフォルトの表示にリセットされます。 以下の例では、出力を表示するように関数 errorを設定します。 これはエラーをスローし、2d表示をデフォルトにリセットすることでエラーをハンドリングします。

 
(%i8) set_alt_display(2,?error)$

(%i9) x;

Error in *alt-display2d*.
Messge: Condition designator ((MLABEL) $%O9 $X) is not of type (OR SYMBOL STRING
                                                             FUNCTION).
*alt-display2d* reset to nil.
 -- an error. To debug this try: debugmode(true);

(%i10) x;
(%o10)                                 x


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

39.2 Functions and Variables for alt-display

関数: define_alt_display (function(input), expr)

この関数は defineに似ています: 引数を評価し、関数定義に展開します。 functionは、入力(input)が1つの関数です。 Lisp変数名に簡単にアクセスできるように便宜上、代入は評価の後に exprに適用されます。

プロンプトそれぞれでタイムスタンプを設定する:

 
(%i1) load("alt-display.mac")$

(%i2) display2d:false$

(%i3) define_alt_display(time_stamp(x),
                   block([alt_display1d:false,alt_display2d:false],
                         simp:true,
                         prompt_prefix:printf(false,"~a~%",timedate()),
                         displa(x)));

(%o3) time_stamp(x):=block([simp:false],
                 block([?\*alt\-display1d\*:false,?\*alt\-display2d\*:false],
                       simp:true,
                       ?\*prompt\-prefix\*:printf(false,"~a~%",timedate()),
                       ?displa(x)))
(%i4) set_alt_display(1,time_stamp);

(%o4) done
2016-10-03 09:49:27-05:00
(%i5)

入力行 %i3は、 define_alt_displayを使って time_stampを定義しています。 出力行 %o3は、 displa?displa(表示関数)に置き換えられるのと同様に Maxima変数名 alt_display1d, alt_display2d, prompt_prefixがそれらのLisp解釈に置き換わっていることを示しています。

表示変数 alt_display1d, alt_display2dは、 displa内で無限再帰を抑制するために time_stampの本体の中で両方 falseに束縛されます。

Categories:  Package alt-display

関数: info_display (form)

これはデフォルトの1-d 表示関数のエーリアスです。 代わりの1-dか2-d表示間数として使えます。

 
(%i1) load("alt-display.mac")$

(%i2) set_alt_display(2,info_display);

(%o2) done
(%i3) x/y;

(%o3) x/y

Categories:  Package alt-display

関数: mathml_display (form)

MathML出力を生成します。

 
(%i1) load("alt-display.mac")$

(%i2) set_alt_display(2,mathml_display);
<math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>mlabel</mi>
 <mfenced separators=""><msub><mi>%o</mi> <mn>2</mn></msub>
 <mo>,</mo><mi>done</mi> </mfenced> </math>

Categories:  Package alt-display

関数: tex_display (form)

TeX出力を生成します。

 
(%i2) set_alt_display(2,tex_display);
\mbox{\tt\red({\it \%o_2}) \black}$$\mathbf{done}$$
(%i3) x/(x^2+y^2);
\mbox{\tt\red({\it \%o_3}) \black}$${{x}\over{y^2+x^2}}$$

Categories:  Package alt-display

関数: multi_display_for_texinfo (form)

3つの表示関数すべてを使ってTexinfo出力を生成します。

 
(%i2) set_alt_display(2,multi_display_for_texinfo)$

(%i3) x/(x^2+y^2);

@iftex
@tex
\mbox{\tt\red({\it \%o_3}) \black}$${{x}\over{y^2+x^2}}$$
@end tex
@end iftex
@ifhtml
@html

   <math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>mlabel</mi>
   <mfenced separators=""><msub><mi>%o</mi> <mn>3</mn></msub>
   <mo>,</mo><mfrac><mrow><mi>x</mi> </mrow> <mrow><msup><mrow>
   <mi>y</mi> </mrow> <mn>2</mn> </msup> <mo>+</mo> <msup><mrow>
   <mi>x</mi> </mrow> <mn>2</mn> </msup> </mrow></mfrac> </mfenced> </math>
@end html
@end ifhtml
@ifinfo
@example
(%o3) x/(y^2+x^2)
@end example
@end ifinfo

Categories:  Package alt-display

関数: reset_displays ()

プロンプトプレフィックスとサフィックスを空の文字列にリセットし、 1-dと2-d表示関数を両方デフォルトに設定します。

Categories:  Package alt-display

関数: set_alt_display (num, display-function)

入力 numは設定される表示です: 1もしくは2です。 2番目の入力 display-functionは使われる表示関数です。 表示関数は Maxima関数か lambda式のいずれかです。

以下は表示関数が lambda式の例です; ただ TeXとして結果を表示します。

 
(%i1) load("alt-display.mac")$

(%i2) set_alt_display(2, lambda([form], tex(?caddr(form))))$

(%i3) integrate(exp(-t^2),t,0,inf);
$${{\sqrt{\pi}}\over{2}}$$

ユーザー定義の表示関数は、出力を 印刷するように気をつけなければいけません。 文字列を返す表示関数は何も表示しないように見え、エラーも起こしません。

Categories:  Package alt-display

関数: set_prompt (fix, expr)

プロンプトプレフィックスかサフィックスを exprに設定します。 入力 fixは、 prefix, suffix, general, prolog, epilogのいずれか1つに評価されなければいけません。 exprは文字列もしくは falseに評価されなければいけません; もし falseなら、 fixはデフォルト値にリセットされます。

 
(%i1) load("alt-display.mac")$
(%i2) set_prompt('prefix,printf(false,"It is now: ~a~%",timedate()))$

It is now: 2014-01-07 15:23:23-05:00
(%i3)

以下の例は、 prologを除くそれぞれのオプションの効果を示します。 epilogプロンプトは Maximaが閉めるように印刷されることに注意してください。 入力行が $で終了しない限り、generalが入力の終わりと出力の間に印刷されます。

以下はプロンプト文字列が置かれる場所を示す例です。

 
(%i1) load("alt-display.mac")$

(%i2) set_prompt(prefix,"<<prefix>> ",suffix,"<<suffix>> ",general,
           printf(false,"<<general>>~%"),epilog,printf(false,"<<epilog>>~%"));

(%o2)                                done
<<prefix>> (%i3) <<suffix>> x/y;
<<general>>
                                       x
(%o3)                                  -
                                       y
<<prefix>> (%i4) <<suffix>> quit();
<<general>>
<<epilog>>

以下は、 Maximaが、端末か、Emacs(8)のような端末エミュレータ内で走っている時、 入力と出力を群生化させる方法を示す例です。

figures/color_terminal

それぞれのプロンプト文字列は ASCIIエスケープ文字 (27) で始まり、開カギ括弧 (91)が続きます; それぞれの文字列は小文字のm (109) で終わります。 ウェブページ http://misc.flogisoft.com/bash/tip_colors_and_formattinghttp://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html は 端末の色を設定するために制御文字列を使う方法に関して情報を提供します。

Categories:  Package alt-display


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by 市川雄二 on October, 5 2017 using texi2html 1.76.