Help us understand the problem. What is going on with this article?

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. FileDownload asMarkdown (.md)mynotebook をダウンロードします.
  3. ブラウザーがファイルをダウンロードするフォルダーに mynotebook.md が出てきます.
  4. mynotebook.md をアプリ Byword で開きます.
  5. FileExportLaTeX...mynotebook.md を書き出します.
  6. mynotebook.tex というファイルが出来ていることを確認します.
  7. mydocument.texmynotebook.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.ipynbjupyter 上で

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

rana-aerea
引退したプログラマーです. 引退後はサラリーマンをしていました. サラリーマン経験も活かしてプログラマー復活を目指すことにしました. まずは, macOS + TeX + Sagemath のカスタマイズの 状況報告のため Qiita にも参加した次第です. 始動の日まで記事の書きなおしが多いと思います. 2020年03月31日始動を目指して整備中ですのでよろしくお願いします.
http://rana-aerea.o.oo7.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした