Sagemath の jupyter notebook を Byword で LaTeX (SageTeX) へ変換できること

Sagemath の プログラムを jupyter notebook で試してから Byword を用いて LaTeX  ソースに変換して, さらに SageTeX を使って加工するという手順を使うと数式処理が LaTeX  の中で使い易くなります. Byword は MacOS のアプリです.

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

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

* 作業記録の日付は 2019年11月15日
* macOS Mojave 10.14.6
* Safari 13.0.2
* TeXLive2017+TeXShop 3.97 (奥村晴彦／黒木祐介 著 改訂第7版 LaTeX2ε 美文書作成入門) mac風インストール
* e-pTeX, Version 3.14159265-p3.7.1-161114-2.6 (utf8.euc) (TeX Live 2017)
* SageMath-9.0 
* Byword 2.9.2
* 公開用の minimal example は 2020年02月14日作成

##  Jupyter Notebook を markdown 経由で LaTeX コードに変換する手順

`mydocument.tex` という LaTeX 文書を編集中に数式の計算が必要になったというシナリオで Sagemath から` jupyter` を起動して `mynotebook` という notebook を作った場合を例にして説明します. `mynotebook` はファイルシステム上では `mynotebook.ipynb` というファイル名になっています.

1. `Sagemath` 起動して Web インターフェイス `jupyter` から  `mynotebook` を開きます.
2. `File`→`Download as`→`Markdown (.md)`で `mynotebook`  をダウンロードします.
3. ブラウザーがファイルをダウンロードするフォルダーに `mynotebook.md` が出てきます.
4. `mynotebook.md` をアプリ `Byword` で開きます.
5. `File`→`Export`→`LaTeX...`で `mynotebook.md` を書き出します.
6.  `mynotebook.tex` というファイルが出来ていることを確認します.
7. `mydocument.tex` と `mynotebook.tex` を開いて,  `mynotebook.tex` の内容を  `mydocument.tex` の中の編集箇所にコピペします.
8. 必要に応じて `mydocument.tex` の preamble にパッケージの指示を書きます.
    * `\usepackage{listings}` --- Sagemath のプログラムの引用に使っています.
    * `\usepackage{graphicx}` --- `mynotebook.ipynb` にグラフがある場合に必要です.
    * `\usepackage{dvipdfmx}` または `\usepackage[dvipdfmx]{graphicx}` または `\documentclass[dvipdfmx]{...}` --- platex の処理系を使用している場合は `\usepackage{graphicx}` を `\usepackage[dvipdfmx]{graphicx}` に置き換えるなどして, `dvipdfmx` を使用します.
    * `\usepackage{sagetex}` --- Sagemath のプログラムを LaTeX から実行するために使います.

## 使用例
`mynotebook.ipynb` が `jupyter` 上で

```
Sagemath can factor integers.
In [1]:

factor(2020-02-14)
Out[1]:
2^2 * 3 * 167
In [ ]:

```

となっている場合を例にして説明します. `In [1]:` の後の空白は `jupyter` からコピペするとなぜか出てくる空行です. `In[ 1]:` の中のプログラムは `factor(2020-02-14)` で引き算を2回してから素因数分解するプログラムです.

`jupyter` からダウンロードしてできる `mynotebook.md` の中身は

```

    Sagemath can factor integers.


    ```python
    factor(2020-02-14)
    ```




        2^2 * 3 * 167




    ```python

    ```
```

で空行が多くなっている他は読みやすい感じです.
Byword  で LaTeX に変換した結果は次の通りです.

```
Sagemath can factor integers.

\begin{lstlisting}[language=python]
factor(2020-02-14)
\end{lstlisting}

\begin{verbatim}
2^2 * 3 * 167
\end{verbatim}

\begin{lstlisting}[language=python]

\end{lstlisting}
```

この変換結果を `mydocument.tex` の中にコピペして,
`mydocument.tex` の preamble を編集するわけですが,
ここでは `mydocument.tex` が書き始めで空っぽの場合の例を挙げておきます.

```TeX
\documentclass[dvipdfmx]{article}
\usepackage{sagetex}
\usepackage{listings}
\usepackage{graphicx}
\begin{document}
<LaTeX file exported by ByWord>
\end{document}
```

この中の `<LaTeX file exported by ByWord>` の行をそっくり `mynotebook.tex` の内容に置き換えるとコンパイルできました.
 オプションの `[dvipdfmx]` は platex の場合のものですので,
 pdflatex や luatex を使う場合は `[dvipdfmx]` を外してください.

`mynotebook.ipynb` の中の Sagemath プログラムは

```TeX
\begin{lstlisting}[language=python]

\end{lstlisting}
```

という TeX 環境に入っていますので, この TeX 環境を

```TeX
\begin{sageblock}

\end{sageblock}
```

という SageTeX の環境に変更すると, LaTeX から Sagemath プログラムを実行することができます. (コンパイルの仕方は [SageTeX を TeXShop で使うために Sagemath のバージョンを TeXShop に登録すること](https://qiita.com/rana-aerea/items/468f221bbab18131316e)  や [Sagemath のバージョンアップごとの SageTeX と TeXShop の設定を簡単にするにはアプリにシンボリック・リンクを張ること](https://qiita.com/rana-aerea/items/0b79d4d65dde5d5df313) を参照して下さい.)
実行結果を表示するためには,

```TeX
\begin{sagecommandline}
sage: factor(2020-02-14)
\end{sagecommandline}
```

という形で `sagecommandline` 環境を使わないといけないようです.
こちらの環境の場合は, プログラムの行の頭にコマンドライン風のプロンプト `sage: ` を付けます. `sage: ` の左にはスペースを1回以上付けても構いません. `sage: ` 自体は 6文字で一番右にスペースが必要です.
実行結果を `Out[...]` の部分と比較して正常実行が確認できたら, `Out[...]` とすぐその後の `verbatim` 環境を削除するとよいでしょう. また, Sagemath プログラムの部分をコピペしてパラメータを多少変更するなどしてから実行することも可能です.

応用としては,  函数の定義を jupyter で作ってデバッグしてから LaTeX の文書に付け加えていくということが考えられます.