ダブルクリック起動の SageMath-9.0.app の jupyter notebook で view 関数を使えるようにして, 計算結果の print, show, view による表示を比較したこと

ダブルクリック起動の SageMath-X.X.app は計算結果を `view()` 関数で表示できないとう問題点と,  Markdown セルが入っている ipynb ファイル( jupyter notebook のノートブック・ファイル)を LaTeX にダウンロードできないという問題点があります. 
 
それぞれ, LaTeX や pandoc をみつけられないことが理由です.
LaTeX と pandoc をインストールする必要があるのはもちろんですが, もう一工夫する必要があります. 環境変数を設定してから SageMath-X.X.app を呼び出す Mac アプリを作って対策としました.

数式処理の計算結果の表示の仕方 8  通りを比較する機会となりましたので, 計算結果の LaTeX ソース関係の 8 通りも含めて合計 16 通りを比較する動作テスト用のサンプル・プログラムを作成しました. 

## 実際に試した使用環境

バージョン情報は以下の通りです.

* macOS Mojave 10.14.6
* TeXLive2017+TeXShop 3.97 (奥村晴彦／黒木祐介 著 改訂第7版 LaTeX2ε 美文書作成入門) mac風インストール
* SageMath-9.0 
* minimal example は 2020年02月21日作成

## SageMath-9.9.app で LaTeX と pandoc を使うための対処療法

対処方を 2 つ試しました. 一つは  `bash` コマンド

```shell
#!/bin/bash

/Applications/SageMath-9.0.app/Contents/MacOS/Sage >> ~/MySageLog.log 2>> ~/MySageLog.log & exit
```

を `SageMathWrapper.command`  テキストファイル にして, この `SageMathWrapper.command` をダブルクリックするという方法です.

この方法は `Terminal.app` のウィンドウが新しく開いたままになってしまうという欠点があります. また, そのウィンドウで Quit すると `Terminal.app` の他のウィンドウまで閉じてしまうという問題点があります.

もう一つの対策は, オートメーターを使って,  Mac の GUI と unix の橋渡しのコマンドを作ることです. `/Applications/Automator.app` をダブルクリックして開いて, `アプリケーション`をクリック, `選択`ボタンをクリック すると新規書類の編集画面になりますので,  左上の検索ボックスに`シェル`と入力して`リターン`キーを打つと `シェルスクリプトを実行` という項目がでてきます. この項目を右側のウィンドウにドラッグします. `シェル: /bin/bash` の下の空のボックス (Automator.app のバージョンによっては `cat ` が入っているボックスの中身を削除して空にしたボックス)に 下記のコードを入力して, `コマンド-S` キーなどで, `SageMathWrapper.app` というファイル名でセーブします.

```shell
/bin/bash --login -c /Applications/SageMath-9.0.app/Contents/MacOS/Sage >> ~/MySageLog.log 2>> ~/MySageLog.log &
exit
```

このファイル `SageMathWrapper.app` をダブルクリックすると `SageMath-9.0.app` が起動します.

以上 2 つの方法のどちらで起動した場合でも LaTeX と pandoc が `SageMath-9.0.app` から使えるようになります. ユーザーの視点でいうなら, `view` 関数が正常動作するようになり, `jupyter note book` の Web ページ内の`File` → `Download as` → `LaTeX` で ipynb ファイル (ノートブック)をダウンロードすることができるようになります.

脇道にそれますが..., ダウンロード先は ブラウザーのダウンロード先のようです. `Safari` の場合はデフォールトで `ダウンロード` フォルダーですが, `Safari` で書類などを別の場所にダウンロードした後は Jupyter Notebook のダウンロード先も変わってしまうようです. ブラウザーの機能でダウンロード先を設定し直しておきましょう. 

`SageMath-9.0.app` と unix の橋渡しをするアプリは AppleScript で作ることも可能です. これについては勉強中です.


## 今回の方法が対処するエラーの判定法

まず, LaTeX と pandoc がインストールしてあるかどうか確認します. `Terminal.app` の画面で

```
myhome$ which pdflatex; which pandoc
```

というコマンドを実行して出力のパスのフォルダー名を確認します.
出力にファイル名が無かったり, 1つだけだったりした場合は不足しているソフトウェアをインストールして下さい.

出力が `/usr/local/bin/pdflatex` と  `/usr/local/bin/pandoc` になった場合は, フォルダー名は `/usr/local/bin` です.

次に, `SageMath-9.0.app` をダブルクリックや Dock のアイコンのクリック , LaunchPad のアイコンのクリックで起動して, Jupyter Notebook のノートブックの画面で, 

```
        !echo $PATH
```

を実行します. 出力の中に先ほどのフォルダーがない場合が今回の記事に該当します.

出力は長いので, 出力の最後の方を見て下さい. 該当する場合の出力の最後の方は

```
/Applications/SageMath-9.0.app/Contents/Resources/sage/src/bin:/usr/bin:/bin:/usr/sbin:/sbin
```

となっています.  コロン `:` で区切ってある出力を右から見て行くいと,

``` text
    /sbin
    /usr/sbin
    /bin
    /usr/bin
```

と短いパス名が並んでいて, そのすぐ次に長いパス名で `SageMath`や `sage` などの文字列が来ている場合です.

##  `pandoc` が見つけられないエラー
順序が前後しますが,  内容が短い方を先にします. 今回の方法は `jupyter note book` の Web ページ内の`File` → `Download as` → `LaTeX` 
で出る

```
    500 : Internal Server Error
    The error was:
        
        nbconvert failed: Pandoc wasn't found.
        Please check that pandoc is installed:
        http://pandoc.org/installing.html
```

というエラーの対処療法になっています.

## `print`, `show`, `view` `latex` の動作テスト・プログラムと LaTeX が見つけられないエラー  (サブセクションの中身全体で ipynb ファイル 1つです)

```Markdown
Sagemath display the result of calculation in plain text format or in latex format.
It can show the latex image in a different window. Finally, it can give latex source of the output.
```

```python
%display plain
# display the result of calcuation in plain text format
```

```python
print( factor(x^2+2*x+1) )
```

```
    (x + 1)^2
```

```python
factor(x^2+2*x+1)
```

```
    (x + 1)^2
```

```python
show(factor(x^2+2*x+1))
```

```
    (x + 1)^2
```

```python
view(factor(x^2+2*x+1))
```

```
    Error: PDFLaTeX does not seem to be installed.  Download it from
    ctan.org and try again.
    Latex error
```

```python
print( latex(factor(x^2+2*x+1)) )
```

```
    {\left(x + 1\right)}^{2}
```

```python
latex(factor(x^2+2*x+1))
```

```
    {\left(x + 1\right)}^{2}
```

```python
show(latex(factor(x^2+2*x+1)))
```

```
    {\left(x + 1\right)}^{2}
```

```python
view(latex(factor(x^2+2*x+1)))
```

```
    Error: PDFLaTeX does not seem to be installed.  Download it from
    ctan.org and try again.
    Latex error
```

```python
%display latex
# display the result of calcuation in  latex format
```

```python
print( factor(x^2+2*x+1) )
```

```
    (x + 1)^2
```

```python
factor(x^2+2*x+1)
```

```math
{\left(x + 1\right)}^{2}
```

```python
show(factor(x^2+2*x+1))
```

```math
{\left(x + 1\right)}^{2}
```

```python
view(factor(x^2+2*x+1))
```

```
    Error: PDFLaTeX does not seem to be installed.  Download it from
    ctan.org and try again.
    Latex error
```

```python
print( latex(factor(x^2+2*x+1)) )
```

```
    {\left(x + 1\right)}^{2}
```

```python
latex(factor(x^2+2*x+1))
```

```math
{\left(x + 1\right)}^{2}
```

```python
show(latex(factor(x^2+2*x+1)))
```

```math
{\left(x + 1\right)}^{2}
```

```python
view(latex(factor(x^2+2*x+1)))
```

```
    Error: PDFLaTeX does not seem to be installed.  Download it from
    ctan.org and try again.
    Latex error
```

## 動作テスト・プログラムの結果

対処療法を用いない場合でも `%display latex` は機能しています. エラーがでるのは, `view` 関数を使用する場合です. 対処療法を用いると, `view` 関数のエラーメッセージがでなくなって, `view` 関数の実行では別ウィンドウに数式の表示がでました.

対処療法を用いた場合でも , `%display plain` と `%display latex` の状態によらずにテキスト出力を使いたい場合は, `print(,...)` や `print(latex(...))` を使うとよいようです. 出力を pdf  にとっておいて, Sagemath で再使用したい場合や, LaTeX で出力を使う場合などの状況が考えられます.