SATySFi
メモ
ブロックコマンド (縦に連なるやつ)、インラインコマンド (横に連なるやつ)、数式コマンドがある
それぞれ let-block, let-inline, let-math で定義する
ブロックは +hoge、インラインと数式は \hoge のように (おそらく慣習的に) 書く
@require: はインストール済みパッケージ (dist 以下)
@import: は同じディレクトリにあるパッケージ
@import: ../hogehoge とかもできるので同じというわけでもないけど、相対的なやつ
(| |) はレコード。constraint 'a :: (| ... |) は 'a は (| ... |) の部分型になっていることを表す
math モードの中でのコマンドの引数は ! をつける
オプション引数
let-inline \hoge ?:fuga ?:piyo = ... みたいに定義できる
\hoge?:{ふが}?:{ぴよ} みたいに与える
手前のものを省略したいときは \hoge?*?:{ぴよ}
block 中の block
let-block ctx +small-block bt = let size = get-font-size ctx in ctx = set-font-size (size *' 0.8) ctx in read-block ctx bt みたいなのがあったとすると
+small-block<+p{hogehoge}> とか +small-block<+math(${aaa});> とかみたいにつかえる
モジュールのシグネチャで direct がついていない値は Module.hogehoge みたいにして呼び出す
let-inline, let-block, let-math で定義したコマンドはわからん
はみ出る場合
inline-frame-breakable, block-frame-breakable は使ってあるか?
SATySFi のバグの可能性もある
footnote にはみ出るのはバグだった
let-inline, let-block, let-math で定義したコマンドは再利用性があんまりよくない気がするので、 let-inline ctx \hoge args = ... は、 let hoge-scheme ctx args = ... を定義してから let-inline ctx \hoge args = hoge-scheme ctx args すると良さそう
主要な型
block-text
縦に伸びるテキスト
段落の積み重ねとか
inline-text
横に伸びるテキスト
{} で渡す
math
数式
length
長さ。ptとかcmとかつくやつ
inline-boxes
inline-boxes: テキスト以外の組版情報によって既に組まれたテキスト
let-inline の返り値の型は全部これ
block-boxes
ブロックのリスト
let-block の返り値は全部これ
わからん
# をつけるかつけないか
math とか inline とかのときは、普通にやるとその文字列が出てきちゃうから、変数だということを明示するために # をつける?
math の中の inline、inline の中の math
の相互変換のやりかたがわからない (できない?)
\text と \math でできそうな気はしたけど、なんかうまくいかない
=> できた。 math area での \text!{hogehoge}、inline area での ${hogehoge} (\math はいらない)
でも let-math とか let-inline でやる方法はわからない
=> できた。 let-math \hoge = ${\text!{hoge}} みたいにするとよい
let-inline も、試してないけど let-inline \hoge = {${hoge}}
以下 valid なやつ
let-math \hogehoge = ${\text!{hogehoge}}
let-math \eqn-in-math m = ${\text!{\eqn(${#m});}}
let-math \align-in-math m = ${\text!{\align([${|#m|}]);}}
; をつけるかつけないか
ルールがあるっぽいけどわからん
! をつけるかつけないか
math area で、inline-text {} を使うとき、block-text <> を使うときは ! が必要そう
改行する方法
let-math で文脈を取得する方法
できないのかも
インストール
SATySFi, Satyrographos
自分でコマンドを定義するときに使えそうな関数
read-inline : context -> inline-text -> inline-boxes
p71参照
新しい文脈でテキストを組む
++ : inline-boxes -> inline-boxes -> inline-boxes
clear-page : block-boxes
改ページ
hook-page-break : (pbinfo -> -> ()) -> inline-boxes
ページ情報が入っている?