-
Notifications
You must be signed in to change notification settings - Fork 82
SATySFiの2段組機能
T. Suwa edited this page Dec 2, 2019
·
2 revisions
SATySFiに2段組を入れつつあるので,その簡単な報告です(一応既に動かせます).適宜「これを参照してください」などとポインタは張りますが,かなりコアな機能なので The SATySFibook を大体読んでいる程度の前提知識が必要です.
dev-two-column
というブランチ(この記事を最初に執筆している現在は c2ee489
というcommitを指しています)で開発しており,このcommitをcheckoutしてインストールすればすぐに以下のプリミティヴを使って2段組が実現できます:
page-break-two-column : page -> length -> T_3 -> T_4 -> T_5 -> block-boxes -> document
where
T_3 = unit -> block-boxes,
T_4 = (| page-number : int |) -> (|
text-origin : point;
text-height : length;
|),
T_5 = (| page-number : int |) -> (|
header-origin : point;
header-content : block-boxes;
footer-origin : point;
footer-content : block-boxes;
|)
T_4
と T_5
は page-break : page -> T_4 -> T_5 -> block-boxes -> document
で用いられています.これについては The SATySFibook 第12章を参照してください.
page-break-two-column page x-shift columnhookf pagecontf pagepartsf bb
という形で使います.各引数は以下のような内容です:
-
page : page
- 紙の寸法.
-
x-shift : length
- 左段の開始位置(=ブロックボックス列の最も左上の座標)と右段の開始位置の水平方向の距離.すなわち,“段の幅と段間の和”.
- 段間の長さではないことに注意.段間を指定するAPIではない主な理由は,SATySFiでは “段の幅” という概念が形式上は存在しないため.ブロックボックス列は,左端は揃っているものの一般には右端は揃っておらず,場所によって幅が異なる.
-
columnhookf : unit -> block-boxes
- 段のページ分割が始まる前に呼び出されるフック函数.戻り値は,まだページ分割が終わっていない残りのブロックボックス列の先頭に追加される.
- 特に何も追加しない場合は
block-nil
を返すように与えれば良い.
-
pagecontf : T_4
-
page-break
の第2引数と同じ(The SATySFibook 第12章参照). - ページ分割処理で新しいページの開始時に起動され,段落の開始位置と鉛直方向の理想の長さを返すように与える.
-
-
pagepartsf : T_5
-
page-break
の第3引数と同じ(The SATySFibook 第12章参照). - ページ分割処理でページ内容が確定した時に起動され,ヘッダとフッタを附加する.
-
-
bb : block-boxes
- 分割して文書にするブロックボックス列.
基本的には “単に半分に切れたページを隣り合わせにしている” だけで,脚註も今のところ左右の段ごとにつく形でしか出せません.
n 段組への一般化も特に難しくないので,もう少し一般性の高いAPIにしてもよいかもしれません.
そのうちSATySFiの2段組で組まれた第61回プログラミング・シンポジウムの豫稿が公開されると思いますのでご覧ください(内容自体はSATySFiの計算機科学的に特に面白い側面について触れた16ページの記事で,2段組機能自体については特に言及はありませんけれども).
- トップページ
- The SATySFibook Web公開版 第1版
- Wiki
- 目的別パッケージ一覧
- コマンドライン書式
- SATySFiコマンド一覧
- Satyrographos(パッケージマネージャ)
- 新しい言語機能の紹介
- 言語機能の構想