SageTeXのスタイルファイルはSagemathのdistributionからインストールすること

Sagemath を Latex 内で使うパッケージ SageTeX はメンテナンスが続いているようです. 軽微な修正でも動作に影響が出るため, パッケージのファイル群は Sagemath のdistribution から Latex のフォルダー内に配置し直す必要があります.

## SageMath-8.6 から SageMath-8.9 へのアップグレードでSageTeXのマイナーチェンジに遭遇
事象は Sagemath のアップグレードで SageTeX の再設定が必要になったことです.

SageMath-8.9 の macOS 版のディスクイメージをダウンロードして, 早速マウントしました.

念のため,  Terminal.app を開いて diff で ` /Applications/SageMath-8.9.app/Contents/Resources/sage/local/share/texmf/tex/latex/sagetex ` の中身を既存のファイルと比較すると, 変更点が出てきました.

スクリプトで使っているpython のコマンドが `print ...` から`print(...)`に変更になったようです.

念のため, SageTeX パッケージを使っている既存のLatexソースをコンパイルしようとするとコンパイルできませんでした.

Sagemath についてくる  python の仕様変更が理由のようです.
## SageMath-8.9 から TeXLive へスタイルファイルや関連するスクリプトファイルをコピーして対処
私の環境での対処です. 他の環境での対処のヒントは後述します. (コピーの代わりにシンボリック・リンクを使う方法については, [Sagemath のバージョンアップごとの SageTeX と TeXShop の設定を簡単にするにはアプリにシンボリック・リンクを張ること](https://qiita.com/rana-aerea/items/0b79d4d65dde5d5df313) のステップ 4〜5 を見てください.

使用環境の癖が影響するかもしれませんのでバージョン情報を書いておきます.

* 作業記録の日付は2019年10月12日
* macOS Mojave 10.14.6
* TeXLive2017+TeXShop (奥村晴彦／黒木祐介 著 改訂第7版 LaTeX2ε 美文書作成入門) mac風インストール
* SageMath-8.9 (ディストリビューションは `sage-8.9-OSX_10.14.6-x86_64.app.dmg` で同梱の SageTeX は `2019/01/09 v3` )

ファイルの場所は

* TeXのソフトなど:  `/Applications/TeXLive`
* ユーザー共通のTeXのスタイルファイルなどを置く場所: `/Useres/Shared/TeXLive/texmf`
* SageMath-8.9のインストール後のファイル名: ` /Applications/SageMath-8.9.app`

設定を行ったときのアカウントは

* LaTeX2ε 美文書作成入門の付録の DVD から TeX システムをインストールしたアカウントで,
* 管理者権限があります.

このコンフィギュレーションで Terminal.app から
 
```console
myhome$ cp -R /Applications/SageMath-8.9.app/Contents/Resources/sage/local/share/texmf/tex  /Users/Shared/TeXLive/texmf
```

というコマンド1行で SageTeX のスタイルファイルなどをTeXLiveのユーザー共通ファイルの場所に配置することができました.

**2020-01-13 追記**:

スタイルファイルなどの配置の後に

```console
myhome$ texhash /Users/Shared/TeXLive/texmf
```

というコマンドを実行することになっているようです.
今回の作業記録にはこの部分がなかったので, 実行を忘れたまま使っていたようです. トリッキーな事情でパッケージが使えていたようです.

## SageTeX の使用例
確認用のサンプルですが, 今回は何もコンパイルできないという事象の対処ですので, 簡単なサンプルで十分です.

対処の結果, 下記のサンプルが Terminal.app のコマンドでコンパイルできるようになりました. コンパイルの仕方はサンプルに書き込んであります.

```TeX:2020-01-12-sagetex-by-shell.tex
\documentclass{article}
\usepackage{sagetex}
\begin{document}
title: \textsf{SageTeX} through command line

file and date: 2020-01-12-sagetex-by-shell.tex

author: @rana-aerea

Reference: % SageTeXのスタイルファイルはSagemathのdistributionからインストールすること
    https://qiita.com/rana-aerea/items/1d30c2dc4782416737d0

Use \textsf{SageTex} for letting
\textsf{Sagemath} to calculate formulae in {\LaTeX} documents!
\begin{sagecommandline}
    sage: P = x^3 - 7*x + 6   # assign a polynomial to P
    sage: factor(P)           # factorize the polynomial
\end{sagecommandline}

Compile this file by
\begin{verbatim}
    myhome$ lualatex  2020-01-12-sagetex-by-shell.tex
    myhome$ sage      2020-01-12-sagetex-by-shell.sagetex.sage 
    myhome$ lualatex  2020-01-12-sagetex-by-shell.tex
\end{verbatim}

Verified on:
\begin{verbatim}
    SageMath-8.9 (macOS)
    LuaTeX 1.0.4 (TeX Live 2017)
    macOS Mojave 10.14.6
\end{verbatim}
\end{document}
```

## Sage チュートリアルの読み方
ファイルの場所やコピーの仕方は [Sage チュートリアル v9.0 »SageTeXを使う](http://doc.sagemath.org/html/ja/tutorial/sagetex.html) に従いました. (私が設定した時は v8.9だったと思います.) 詳しくは「複数ユーザに対応するシステム」の部分です.

ただし, Sage チュートリアルに出てくる 変数`SAGE_ROOT`と`TEXMFLOCAL`は計算機関係の教科書でよく`<SAGE_ROOT>`や`<TEXMFLOCAL>`と書いてある種類の変数です. 要するに変数の中身を手で直接打ち込むという意味です.

まず, Terminal.app で以下のコマンドを実行してユーザー共通のスタイルファイルなどを置く場所を見つけます. ここの `TEXMFLOCAL` だけは文字列をそのまま打ち込みます.

```console
myhome$ kpsewhich -var-value=TEXMFLOCAL
/Users/Shared/TeXLive/texmf
```

次に,  `<SAGE_ROOT>` ですが, 結果を直接見る方が簡単です. `SageMath-8.9.app`か`SageMath-8.9`がフォルダー `/Applications` の直下に見える場合 `<SAGE_ROOT>` は

```
/Applications/SageMath-8.9.app/Contents/Resources/sage/
```

のことです. 機械に確認させるなら, Terminal.app から`sage`コマンドで

```console
myhome$ /Applications/SageMath-8.9.app/sage
```

とSagemathを起動して, Sagemath のセッションの中からシェルを呼び出すことによって調べることができます. (Jupyter Notebook からではうまくいきません.)

```sagemath
sage: sh.eval(''' echo "$SAGE_ROOT" ''')
/Users/myhome
/Applications/SageMath-8.9.app/Contents/Resources/sage
''
```

要するに `$SAGE_ROOT`はSagemathがコマンドの中で設定している環境変数です. 通例, Terminal.app から直接に調べても`$SAGE_ROOT`値は出てきません.

`<TEXMFLOCAL>` と`<SAGE_ROOT>`の値をテキストエディターなどに
コピペしておいた上で, 同じくテキストエディター上で,
 
```console
打ち込み不可 myhome$ cp -R SAGE_ROOT/local/share/texmf/tex TEXMFLOCAL
```
 
という1行の中の"SAGE_ROOT"と"TEXMFLOCAL"をその値に置き換えます.
編集結果のコマンド1行`cp -R ...`を Termnal.app にコピペして実行します.

私の場合は, 前掲のコマンドになりました.
 
```console
myhome$ cp -R /Applications/SageMath-8.9.app/Contents/Resources/sage/local/share/texmf/tex  /Users/Shared/TeXLive/texmf
```

1行コマンドをエディターで編集するのは, Terminal.app のコピペで誤って複数行をペーストすると変なことになることがあるからです.

通常のインストールでは管理者アカウントから

```console
myhome$ sudo cp -R /Applications/SageMath-8.9.app/Contents/Resources/sage/local/share/texmf/tex  /Users/Shared/TeXLive/texmf
```

というコマンドを実行してパスワードを入力するという仕方になると思います.

**2020-01-13 追記**:

スタイルファイルなどの配置の後に

```console
myhome$ texhash TEXMFLOCAL
```

というコマンドの実行が必要です.
`<TEXMFLOCAL>` は `kpsewhich ...`  で確認したフォルダー名に置き換えて打ち込みます.
こちらも, 通常は

```console
myhome$ sudo texhash TEXMFLOCAL
```

の `<TEXMFLOCAL>` をフォルダー名に置き換えたコマンドを使うことになっているようです.

文献によっては `texhash` が `mktexlsr` になっていますが, シンボリック・リンクで繋がっていて実体は同一のコマンドのようです.