SATySFIはじめてみる

# これは何？
未踏で新しい組版ソフトが開発されたらしい。その名は[SATySFI](https://github.com/gfngfn/SATySFi)。
ここではdocフォルダをコンパイル?できるようにするまでをやってみて、いろいろエラーがでてきたから、その解決方法を備忘録的に残してみる。
demoフォルダをコンパイルできればいいんだけど、satysfi-log.jpgっていうのがどこにあるのかわからんから、とりあえずdocをコンパイルしてみた感じです。

# 環境
Xubuntu 18.04　x86_64 をVirtualBoxで構築。

# 準備
基本的には[gfngfn/satysfi](https://github.com/gfngfn/SATySFi)のREADME-jaのUbuntu及びBuildの項目に準拠します。

OCamlのパッケージマネージャーであるopamをインストールする。

```
sudo apt-get update
sudo apt-get install build-essential git m4 unzip wget

wget https://raw.github.com/ocaml/opam/master/shell/opam_installer.sh -O - | sh -s /usr/local/bin

opam switch 4.06.0
eval `opam config env`
```

SATySFIのビルド

```
opam repository add satysfi-external https://github.com/gfngfn/satysfi-external-repo.git
opam update

# clone
git clone https://github.com/gfngfn/SATySFi.git
cd SATySFi

# build
opam pin add satysfi .
opam install satysfi
```

# docのコンパイル
`satysfi/doc`に移動し、`make`を実行してみる。
おそらく、以下のようなエラーが出ます。

```
$ make
satysfi doc-primitives.saty -o primitives.pdf
 ---- ---- ---- ----
  target file: 'primitives.pdf'
! [Error] package file not found: dist/hash/default-font.satysfi-hash
Makefile:4: recipe for target 'all' failed
make: *** [all] Error 1
```

これは、ホームディレクトリにライブラリ？が存在しないことから出るエラーのようです。
ホームディレクトリに`.satysfi`から始まるディレクトリが必要なようです。
そのライブラリの内容は、[ここ](https://github.com/gfngfn/SATySFi/blob/master/memo-ja-how-to-use.md)にメモがあります。
とりあえずはcloneしてきたsatysfiのディレクトリにある、`lib-satysfi/dist`以下を`~/.satysfi`にコピーすると、動作するようです。
その前にいくつかフォントが必要なようなので、それを先にダウンロードしておきます。

```
# SATySFIのルートディレクトリに移動します。
make lib
```

これで、`lib-satysfi/dist/fonts`にフォントがダウンロードされます。次にこれを、

```
mkdir ~/.satysfi
cp -r lib-satysfi/dist ~/.satysfi
```

とします。
再度、`SATySFI/doc`に移動し、`make`を実行してみます。

```
$ make
satysfi doc-primitives.saty -o primitives.pdf
 ---- ---- ---- ----
  target file: 'primitives.pdf'
  dump file: 'primitives.satysfi-aux' (will be created)
  parsing 'doc-primitives.saty' ...
  parsing 'stdja.satyh' ...
  parsing 'pervasives.satyh' ...
  parsing 'gr.satyh' ...
  parsing 'list.satyh' ...
  parsing 'math.satyh' ...
  parsing 'color.satyh' ...
  parsing 'local.satyh' ...
  parsing 'vdecoset.satyh' ...
  parsing 'decoset.satyh' ...
  parsing 'local-math.satyh' ...
 ---- ---- ---- ----
  reading 'list.satyh' ...
  type check passed.
 ---- ---- ---- ----
  reading 'pervasives.satyh' ...
  type check passed.
 ---- ---- ---- ----
  reading 'color.satyh' ...
  type check passed.
 ---- ---- ---- ----
  reading 'gr.satyh' ...
  type check passed.
 ---- ---- ---- ----
  reading 'math.satyh' ...
  type check passed.
 ---- ---- ---- ----
  reading 'decoset.satyh' ...
  type check passed.
 ---- ---- ---- ----
  reading 'vdecoset.satyh' ...
  type check passed.
 ---- ---- ---- ----
  reading 'stdja.satyh' ...
  type check passed.
 ---- ---- ---- ----
  reading 'local-math.satyh' ...
  type check passed.
 ---- ---- ---- ----
  reading 'local.satyh' ...
  type check passed.
 ---- ---- ---- ----
  reading 'doc-primitives.saty' ...
  type check passed. (document)
 ---- ---- ---- ----
  evaluating texts ...
! [Error] package file not found: dist/fonts/Junicode.ttf
Makefile:4: recipe for target 'all' failed
make: *** [all] Error 1
```

このようなエラー出ます。
まだフォント不足しているようです。最終的に

* [Junicode.ttf](http://junicode.sourceforge.net/)
* [ipaexm.ttf](https://ipafont.ipa.go.jp/old/)
* [ipaexg.ttf](https://ipafont.ipa.go.jp/old/)

の3つのフォントを`~/.satysfi/dist/fonts`に追加しました。
最後に`make`を実行すると。

```
$ make
satysfi doc-primitives.saty -o primitives.pdf
 ---- ---- ---- ----
  target file: 'primitives.pdf'
  dump file: 'primitives.satysfi-aux' (already exists)
  parsing 'doc-primitives.saty' ...
  parsing 'stdja.satyh' ...
  parsing 'pervasives.satyh' ...
  parsing 'gr.satyh' ...
  parsing 'list.satyh' ...
  parsing 'math.satyh' ...
  parsing 'color.satyh' ...
  parsing 'local.satyh' ...
  parsing 'vdecoset.satyh' ...
  parsing 'decoset.satyh' ...
  parsing 'local-math.satyh' ...
 ---- ---- ---- ----
  reading 'list.satyh' ...
  type check passed.
 ---- ---- ---- ----
  reading 'pervasives.satyh' ...
  type check passed.
 ---- ---- ---- ----
  reading 'color.satyh' ...
  type check passed.
 ---- ---- ---- ----
  reading 'gr.satyh' ...
  type check passed.
 ---- ---- ---- ----
  reading 'math.satyh' ...
  type check passed.
 ---- ---- ---- ----
  reading 'decoset.satyh' ...
  type check passed.
 ---- ---- ---- ----
  reading 'vdecoset.satyh' ...
  type check passed.
 ---- ---- ---- ----
  reading 'stdja.satyh' ...
  type check passed.
 ---- ---- ---- ----
  reading 'local-math.satyh' ...
  type check passed.
 ---- ---- ---- ----
  reading 'local.satyh' ...
  type check passed.
 ---- ---- ---- ----
  reading 'doc-primitives.saty' ...
  type check passed. (document)
 ---- ---- ---- ----
  evaluating texts ...
  evaluation done.
 ---- ---- ---- ----
  breaking contents into pages ...
  all cross references were solved.
 ---- ---- ---- ----
  embedding fonts ...
 ---- ---- ---- ----
  writing pages ...
 ---- ---- ---- ----
  output written on 'primitives.pdf'.
```

となり、`primitives.pdf`が生成されます。
XubuntuにはPDFビューワーソフトにAtrilというソフトがインストールされています。

```
atril primitives.pdf
```

と、することで生成されたpdfファイルを確認することができます。

# demoのコンパイル
前節のprimitives.pdfの生成ができていればdemoのコンパイルもすぐにできる。
`satysfi-log.jpg`というのが不足しているので、これをダウンロードしてきます。
リポジトリのトップにあるロゴ画像が`satysfi-log.png`なので、これをダウンロードしてきて、

```
convert satysfi-log.png satysfi-log.jpg
```

とします。
最後に`make`すると、demo.pdfが生成されます。

# まとめ
インストールからpdfの生成までとても簡単にできる。
組版の品質もとても綺麗でTexに匹敵するクオリティだと思う。
フォントのダウンロードと配置は少し手間取ったが、開発中のソフトであるからこの程度は仕方ないと思う。
ところで、Makefileには`/usr/local/share`にライブラリが配置されるように書かれているみたいだけど、memoには~/.satysfiに配置するようになっているのはどうしてだろう？
Makefileの整備が間に合ってないのかな？
んー、でもちょっと前まではLIBDIRってやつが~/.satysfiってなってるなー。
まぁいいか。

今回は、demoとdocをビルドしてみたから、次回は自分でファイルを作ってやってみよう。