macでSATySFiのデモファイルからPDFファイルを生成するところまで

# 読む前に
* <font color="Red">**公式のREADMEが充実したので、そちらをご覧になってください**</font>
  - <font color="Red"> **https://github.com/gfngfn/SATySFi** </font>

現状ではこれを読むことによって得られる実用的な価値は特に無いと思います。

あと、SATySFi自体のことを知りたいのなら、The SATySFi Bookがあります。https://gfngfn.booth.pm/items/1046747


# はじめに

2018/02/10のお昼過ぎにTwitterのタイムラインを見ていたら、SATySFi（"satisfy"と同様に発音するようです）という新しい組版処理システムが話題になってました。LaTeXの他には何かないのかなあと思っていたので（自分が使えるのかわからないけれど）ひとまず使ってみたいと感じました。

まだ情報も少ないかと思いますので、ここにインストール方法をメモしておくことにします。

「もっとマシな書き方がある、これではいかん」などと思った人がもっと詳細なものを書いてくれたり、これを修正する案が来たりすることを密かに期待しています。


* 誤り等のご指摘ありましたら何卒…何卒…
* もっと詳しく書いてほしい点についてもコメントがあれば対応するかもしれません

* **！2018/02/11追記**
    * SATySFiは開発中のものと私は認識しています。ここに書いてあることはすぐ古くなると思います
        * 例えば、$SATYSFI_LIB_ROOT の扱いは現在開発者が変更を検討しているように見えました（Twitter見ただけですけれど）
        * 消えたっぽいhttps://github.com/gfngfn/SATySFi/commit/aa03c8201fac3bb62f11d2f07cb3c53a04e4baab
    * DockerFileを書いていたり、使用フォントを変更したものを作成している方がいらっしゃるようです。そちらの利用を検討されると良いと思います（というか、Dockerfileを読むとだいたい何をするべきなのかがわかると思います）
        * https://github.com/odanado/SATySFi-docker/blob/master/Dockerfile
        * https://hub.docker.com/r/pandaman64/satysfi/

## 実行環境
OSは以下のとおりです。

* macOS High Sierra
* バージョン10.13.3
* OCamlの最新バージョン4.06が入っている
    - （デフォルトで入ってるかもしれないと言ったのですが、なかったかもしれない。そんなわけがない気もしてきました。まあ怒られたらbrew install ocamlしてください)

<img width="312" alt="スクリーンショット 2018-02-10 16.07.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/149061/a5de2edc-46fe-aa0c-130b-abd5cb8063d6.png">

## 筆者のスペック
素人が書いたのか、プロが書いたのか判別しておきたい人のために

* LaTeXはとても頻繁に使う（計算ノートを書くために）
* Python, C, C++ちょっと書いたことある
* OCaml一行も書いたこと無い
* 型とかよくわからない

つまりド素人である

# SATySFiとは

* リポジトリ：https://github.com/gfngfn/SATySFi
* 未踏紹介ページ：https://www.ipa.go.jp/jinzai/mitou/2017/gaiyou_t-4.html
 
リポジトリの日本語版READMEからの引用を下記に示します。

>SATySFi（英単語の “satisfy” と同様に発音します）は，新しい組版処理システムとその言語です。構文は主にテキスト部分とプログラム部分からなり，前者はLaTeX風の構文で文書を執筆するために，後者はコマンドを定義するために使われます。いわゆる函数型プログラミングの要領でコマンドが定義でき，かつ静的に型がつけられるため，柔軟な記述とわかりやすいエラー報告が実現されています。

未踏の申請テーマ概要を見ていると、作成者である諏訪 敬之（@bd_gfngfn）氏がLaTeXに対して感じていた問題点を解決するために（？）新たに作成した組版ソフトウェアのようです。

# インストール方法
この節では私がやったインストール手順を紹介します。

大まかな手順は以下の通りです

* OCaml関連の事前準備を行う
    - opamを使えるようにする
    - OCaml 4.05.0コンパイラを使えるようにする
        + ！これは不要になる可能性がある
        + See https://github.com/gfngfn/SATySFi/issues/15 for more detail
* その他細かな準備を行う
    - wgetを手に入れる
* リポジトリからクローンしてインストールする
* フォントを設定する
* デモファイルをコンパイルしてチェック

気をつけるべきことは以下のとおりです。認識していれば、手間はかかっても実行できるのではないかと思います

* macだとwget入ってないのでそれを入れなくてはいけない
* ocaml4.05じゃないとだめなので、そちらを使えるようにする必要がある
* デモファイルをコンパイルするのに必要なフォントが事前には手元にないので、自分でフォントを持ってくるか、他のフォントに変えなくてはいけない
* デモファイルをコンパイルするために必要なjpgファイルがdemoフォルダに必要なので、何かしら自分で用意しなくてはいけない

## 手順詳細

#### step1: opamを使えるようにする
* READMEを見ると、opamを使う必要があります。私の環境では事前に入っていなかったので入れる必要がありました
* これについては、https://qiita.com/oshuya/items/dd0faa707c5baf54249d を参考にしました
    - ! brew linkに権限で失敗していたら適当に権限をアレしてなんとかする
        
```bash
brew install opam
brew install hg
brew install darcs
opam init
```

#### step2: ocamlのバージョンを4.05.0に

* 現在、SATySFiは4.06.00以降のバージョンのOCamlでは動きません。したがって、OCamlのバージョンを変える必要があります
    * これはOCaml公式が推奨しているopam switchを使う方法がよいでしょう
* ！これについては、現在issueが立っているので必要なくなるかもしれません
    * https://github.com/gfngfn/SATySFi/issues/15
   
```bash
opam switch 4.05.0
eval `opam config env`
```

#### step3: wgetを入れる
* macにはデフォルトでwgetがない
    
```bash
brew install wget
```

#### step4: リポジトリをクローンする

```bash
git clone https://github.com/gfngfn/SATySFi.git
```

#### step5: $SATYSFI_LIB_ROOT を設定する
! これは不要になったようです
* SATySFiが入る場所を指定する必要があります
    * 管理者権限が不要な場所を指定したほうが楽でしょう
        * インストール関連の処理はsudoを使うのが非推奨なようですし
* ~/bash_profileなどに以下のようなものを追加します
    * ここの部分については、READMEじゃなくて、memo-ja-how-to-use.md を読みましょう

```bash
export SATYSFI_LIB_ROOT=/path/to/.opam/4.05.0/lib-satysfi
```

#### step6: READMEを参考にして、インストール
* READMEどおり、下記を実行します
* 問題がなければ、$SATYSFI_LIB_ROOT 以下の各ディレクトリに色々なものが入っているはずです

```bash
git submodule update -i
opam pin add satysfi .
opam install satysfi
```

#### step7: フォントを入れる

* デフォルトではデモファイルをコンパイルするためのフォントがないので、それを入れます
* おそらく、satysfi demo.saty -o demo.pdfをしたときに、怒られると思うので、そのエラーメッセージを見て適切なファイル名で適切な場所に置きます
    * ArnoPro-Regular（だった気がする）
    * ipa系 https://ipafont.ipa.go.jp/node26#jp 
    * osaka https://www.freejapanesefont.com/osaka-font-download/

#### step8: satysfi-logo.jpgを持ってくる
* デモディレクトリにロゴ画像ファイルがないので、怒られます。何か適切に持ってきてください。
* 私はリポジトリのトップ画像に使われてるやつをjpgで保存しました。

#### step9: コンパイル
* やる
    
```bash
satysfi demo.saty -o demo.pdf
```

動いた！
<img width="1149" alt="スクリーンショット 2018-02-10 18.39.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/149061/fbce08c0-e588-1519-0b63-c099b5e81389.png">


# その他
* フォント設定はもっと何か賢い方法があるような気がします。誰か教えて欲しい。