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
というファイル名になっています.
-
Sagemath
起動して Web インターフェイスjupyter
からmynotebook
を開きます. -
File
→Download as
→Markdown (.md)
でmynotebook
をダウンロードします. - ブラウザーがファイルをダウンロードするフォルダーに
mynotebook.md
が出てきます. -
mynotebook.md
をアプリByword
で開きます. -
File
→Export
→LaTeX...
でmynotebook.md
を書き出します. -
mynotebook.tex
というファイルが出来ていることを確認します. -
mydocument.tex
とmynotebook.tex
を開いて,mynotebook.tex
の内容をmydocument.tex
の中の編集箇所にコピペします. - 必要に応じて
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
が書き始めで空っぽの場合の例を挙げておきます.
\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 プログラムは
\begin{lstlisting}[language=python]
\end{lstlisting}
という TeX 環境に入っていますので, この TeX 環境を
\begin{sageblock}
\end{sageblock}
という SageTeX の環境に変更すると, LaTeX から Sagemath プログラムを実行することができます. (コンパイルの仕方は SageTeX を TeXShop で使うために Sagemath のバージョンを TeXShop に登録すること や Sagemath のバージョンアップごとの SageTeX と TeXShop の設定を簡単にするにはアプリにシンボリック・リンクを張ること を参照して下さい.)
実行結果を表示するためには,
\begin{sagecommandline}
sage: factor(2020-02-14)
\end{sagecommandline}
という形で sagecommandline
環境を使わないといけないようです.
こちらの環境の場合は, プログラムの行の頭にコマンドライン風のプロンプト sage:
を付けます. sage:
の左にはスペースを1回以上付けても構いません. sage:
自体は 6文字で一番右にスペースが必要です.
実行結果を Out[...]
の部分と比較して正常実行が確認できたら, Out[...]
とすぐその後の verbatim
環境を削除するとよいでしょう. また, Sagemath プログラムの部分をコピペしてパラメータを多少変更するなどしてから実行することも可能です.
応用としては, 函数の定義を jupyter で作ってデバッグしてから LaTeX の文書に付け加えていくということが考えられます.