2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SATySFi のインストールチャレンジ(v0.0.6)

Last updated at Posted at 2021-04-23

SATySFi v0.0.6 のインストールに少しばかり苦戦した話。

$ uname -r
5.4.72-microsoft-standard-WSL2

SATySFi のインストールはソースコードからするものと、satyrographos というパッケージマネージャーを使ってインストールする方法があります。どちらでも躓きましたので、メモに書き残しておきます。最後に参考文献を載せておきますので、詳しく知りたい方はそちらを参照してください。

概要

  • ソースコードの v0.0.6 からのインストールは、omd との依存関係により上手く行きません。インストール時にomdのバージョンに制約をかける必要があります。既にこの問題は修正されているので、master からインストールする人は問題がないと思います。
  • satyrographos を使ったインストールではpkg-configが無いと怒られるので、それをインストールしましょう。

ソースコードからインストール

ocaml のバージョンの推奨は 4.10.0 ですが私は 4.12.0 をインストールしています。

$ sudo apt update -y && sudo apt upgrade -y
$ sudo apt install opam

$ opam init
$ eval $(opam env)

$ ocaml --version
The OCaml toplevel, version 4.08.1

$ opam switch create 4.12.0
$ eval $(opam env)
$ ocaml --version
The OCaml toplevel, version 4.12.0


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

$ mkdir SATySFi
$ cd SATySFi
$ wget https://github.com/gfngfn/SATySFi/archive/refs/tags/v0.0.6.tar.gz
$ tar -xzvf v0.0.6.tar.gz
$ cd SATySFi-0.0.6/
$ opam pin add satysfi .
#=== ERROR while compiling satysfi.0.0.6 ======================================#
# context     2.0.5 | linux/x86_64 | ocaml-base-compiler.4.12.0 | pinned(file:///home/blank71/SATySFi/SATySFi-0.0.6)
# path        ~/.opam/4.12.0/.opam-switch/build/satysfi.0.0.6
# command     ~/.opam/opam-init/hooks/sandbox.sh build make -f Makefile PREFIX=/home/blank71/.opam/4.12.0
# exit-code   2
# env-file    ~/.opam/log/satysfi-30433-d79b64.env
# output-file ~/.opam/log/satysfi-30433-d79b64.out
### output ###
# [...]
# Entering directory '/home/blank71/.opam/4.12.0/.opam-switch/build/satysfi.0.0.6/tools/gencode'
# Entering directory '/home/blank71/.opam/4.12.0/.opam-switch/build/satysfi.0.0.6/tools/gencode'
# dune exec --root tools/gencode ./gencode.exe -- --gen-text-mode-prims > src/frontend/__primitives_text_mode.gen.ml
# Entering directory '/home/blank71/.opam/4.12.0/.opam-switch/build/satysfi.0.0.6/tools/gencode'
# Entering directory '/home/blank71/.opam/4.12.0/.opam-switch/build/satysfi.0.0.6/tools/gencode'
# dune build
#       menhir src/parser.{ml,mli}
# Warning: 2 states have shift/reduce conflicts.
# Warning: 2 shift/reduce conflicts were arbitrarily resolved.
# File "src/md/decodeMD.ml", line 17, characters 17-25:
# Error: Unbound type constructor Omd.name
# make: *** [Makefile:47: all] Error 1

怒られました。原因は Restrict omd version to fix build by amutake · Pull Request #264 · gfngfn/SATySFi です。omd のバージョンが進んでしまったせいで、うまくインストールができません。omd のバージョンを指定します。

$ vim satysfi.opam 
## L38
## "omd"
## ->
## "omd" {< "2.0.0~"}
## と書き換え。
$ opam pin add satysfi .
## 無事インストールができます。

セットアップ

$ ./download-fonts.sh
$ sudo ./install-libs.sh

これで完了です。試しに demo.stay を使って PDF に出力してみましょう。

$ cd demo/
$ satysfi demo.saty
$ satysfi demo.saty
 ---- ---- ---- ----
  target file: 'demo.pdf'
  dump file: 'demo.satysfi-aux' (will be created)
  parsing 'demo.saty' ...
  parsing 'stdjabook.satyh' ...
  parsing 'pervasives.satyh' ...
  parsing 'gr.satyh' ...
  parsing 'geom.satyh' ...
  parsing 'list.satyg' ...
  parsing 'option.satyg' ...
  parsing 'math.satyh' ...
  parsing 'code.satyh' ...
  parsing 'color.satyh' ...
  parsing 'vdecoset.satyh' ...
  parsing 'annot.satyh' ...
  parsing 'footnote-scheme.satyh' ...
  parsing 'itemize.satyh' ...
  parsing 'tabular.satyh' ...
  parsing 'proof.satyh' ...
  parsing 'local.satyh' ...
  parsing 'hdecoset.satyh' ...
 ---- ---- ---- ----
  type checking 'color.satyh' ...
  type check passed.
 ---- ---- ---- ----
  type checking 'pervasives.satyh' ...
  type check passed.
 ---- ---- ---- ----
  type checking 'option.satyg' ...
  type check passed.
 ---- ---- ---- ----
  type checking 'geom.satyh' ...
  type check passed.
 ---- ---- ---- ----
  type checking 'list.satyg' ...
  type check passed.
 ---- ---- ---- ----
  type checking 'gr.satyh' ...
  type check passed.
 ---- ---- ---- ----
  type checking 'tabular.satyh' ...
  type check passed.
 ---- ---- ---- ----
  type checking 'annot.satyh' ...
  type check passed.
 ---- ---- ---- ----
  type checking 'footnote-scheme.satyh' ...
  type check passed.
 ---- ---- ---- ----
  type checking 'hdecoset.satyh' ...
  type check passed.
 ---- ---- ---- ----
  type checking 'itemize.satyh' ...
  type check passed.
 ---- ---- ---- ----
  type checking 'math.satyh' ...
  type check passed.
 ---- ---- ---- ----
  type checking 'proof.satyh' ...
  type check passed.
 ---- ---- ---- ----
  type checking 'vdecoset.satyh' ...
  type check passed.
 ---- ---- ---- ----
  type checking 'code.satyh' ...
  type check passed.
 ---- ---- ---- ----
  type checking 'stdjabook.satyh' ...
  type check passed.
 ---- ---- ---- ----
  type checking 'local.satyh' ...
  type check passed.
 ---- ---- ---- ----
  type checking 'demo.saty' ...
  type check passed. (document)
  preprocessing 'color.satyh' ...
  preprocessing 'pervasives.satyh' ...
  evaluating 'option.satyg' ...
  preprocessing 'geom.satyh' ...
  evaluating 'list.satyg' ...
  preprocessing 'gr.satyh' ...
  preprocessing 'tabular.satyh' ...
  preprocessing 'annot.satyh' ...
  preprocessing 'footnote-scheme.satyh' ...
  preprocessing 'hdecoset.satyh' ...
  preprocessing 'itemize.satyh' ...
  preprocessing 'math.satyh' ...
  preprocessing 'proof.satyh' ...
  preprocessing 'vdecoset.satyh' ...
  preprocessing 'code.satyh' ...
  preprocessing 'stdjabook.satyh' ...
  preprocessing 'local.satyh' ...
  preprocessing 'demo.saty' ...
  evaluating 'color.satyh' ...
  evaluating 'pervasives.satyh' ...
  evaluating 'geom.satyh' ...
  evaluating 'gr.satyh' ...
  evaluating 'tabular.satyh' ...
  evaluating 'annot.satyh' ...
  evaluating 'footnote-scheme.satyh' ...
  evaluating 'hdecoset.satyh' ...
  evaluating 'itemize.satyh' ...
  evaluating 'math.satyh' ...
  evaluating 'proof.satyh' ...
  evaluating 'vdecoset.satyh' ...
  evaluating 'code.satyh' ...
  evaluating 'stdjabook.satyh' ...
  evaluating 'local.satyh' ...
 ---- ---- ---- ----
  evaluating texts ...
  evaluation done.
 ---- ---- ---- ----
  breaking contents into pages ...
  [Warning] an overfull line occurs on page 1
  [Warning] an overfull line occurs on page 1
  needs another trial for solving cross references...
 ---- ---- ---- ----
  evaluating texts (2nd trial) ...
  evaluation done.
 ---- ---- ---- ----
  breaking contents into pages ...
  [Warning] an overfull line occurs on page 1
  [Warning] an overfull line occurs on page 1
  all cross references were solved.
 ---- ---- ---- ----
  embedding fonts ...
 ---- ---- ---- ----
  writing pages ...
 ---- ---- ---- ----
  output written on 'demo.pdf'.

これで成功です!!

satyrographos を使ったインストール

ocaml のバージョンの推奨は 4.10.0 ですが私は 4.12.0 をインストールしています。

$ sudo apt update -y && sudo apt upgrade -y
$ sudo apt install opam

$ opam init
$ eval $(opam env)

$ ocaml --version
The OCaml toplevel, version 4.08.1

$ opam switch create 4.12.0
$ eval $(opam env)
$ ocaml --version
The OCaml toplevel, version 4.12.0

$ opam repository add --all-switches satysfi-external https://github.com/gfngfn/satysfi-external-repo.git
$ opam repository add --all-switches satyrographos-repo https://github.com/na4zagin3/satyrographos-repo.git

$ opam install satysfi satysfi-dist satyrographos
#=== ERROR while compiling conf-pkg-config.2 ==================================#
# context     2.0.5 | linux/x86_64 | ocaml-base-compiler.4.12.0 | https://opam.ocaml.org#f7364ccf
# path        ~/.opam/4.12.0/.opam-switch/build/conf-pkg-config.2
# command     ~/.opam/opam-init/hooks/sandbox.sh build pkg-config --help
# exit-code   1
# env-file    ~/.opam/log/conf-pkg-config-21478-1be4d1.env
# output-file ~/.opam/log/conf-pkg-config-21478-1be4d1.out
### output ###
# bwrap: execvp pkg-config: No such file or directory

The packages you requested declare the following system dependencies. Please make sure they are installed before
retrying:
    pkg-config

pkg-config が無いと怒られたしまいました。インストールをします。

$ sudo apt install pkg-config
$ opam install satysfi satysfi-dist satyrographos
$ eval $(opam env)

$ satyrographos install

最後に

思いの外、インストールは簡単でした。

gist を載せておきます。
SATySFi build and installation
https://gist.github.com/blank71/a2053eba2ac3904c79a723b79b6ef973

私が困っているという投稿をしたときに助けてくれた @puripuri2100 さん、ありがとうございました。
https://twitter.com/void_cis_cs/status/1385434662026113028

参考文献

公式 README.md : gfngfn/SATySFi: A statically-typed, functional typesetting system

SATySFi インストール手引き 2021年2月版

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?