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 の文書に付け加えていくということが考えられます.