block-frame-breakable
block-frame-breakable: context -> (length * length * length * length) -> deco-set -> (context -> block-boxes) -> block-boxes
囲み枠で囲まれた、ページ分割可能なブロックボックス列 (block-boxes) を作成するためのプリミティヴです。見れば分かるとおり、SATySFi のプリミティヴの中でもかなりシグニチャが複雑です(おそらく最も複雑な部類に入るでしょう)。 Argument:
context : 現在のテキスト処理文脈。
length * length * length * length : 上下左右に設けるマージンの幅(順に左、右、上、下のマージンを定める)。
context -> block-boxes : (paddings の値に応じて横幅が狭まった) context を与えて、枠の中に入れるブロックボックス列を出力するような関数。
見ての通り型が複雑であり、特に第3引数はややこしいものの、シンプルな囲み枠がほしいのであれば、 vdecoset パッケージですでに定義されているものを用いることができます。たとえば、引数に与えられたブロックテキストをシンプルな枠で囲む +simple-frame は以下のように定義されます。 code:satysfi
let-block ctx +simple-frame bt =
let pads = (7pt, 7pt, 10pt, 10pt) in
let decoset = VDecoSet.simple-frame-stroke 1pt Color.black in
block-frame-breakable ctx pads decoset (fun ctx -> read-block ctx bt)
本文中でこんなふうに使います:
code:satysfi
+simple-frame<
+p{ ... }