[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

# 39. alt-display

[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

## 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

[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

## 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],
                               prompt_prefix:printf(false,"~a~%",timedate()),
                               displa(x)));

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

      (%o4) done
      2014-01-07 13:41:50-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)のような端末エミュレータ内で走っている時、 入力と出力を群生化させる方法を示す例です。

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

  Categories: Package alt-display

[ << ] | [ >> ] |  |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

この文書は市川 雄二によって10月, 18 2015にtexi2html 1.76を用いて生成されました。