A package to allow SATySFi to have floating boxes at the bottom of pages.
SATySFi で図をページ下部に配置できるようにした.
git clone https://github.com/sano-jin/satysfi-footnote-scheme-ext.git
cd satysfi-footnote-scheme-ext
# satysfi-base を利用しているので,base のインストールが必要.
opam install satysfi-base
satyrographos install
cd demo
satysfi sample.saty # sample.pdf が生成される.
この出力結果は demo/sample.pdf となる.
このパッケージは footnote-scheme.satyh の拡張版であり, footnote を活用して図をページ下部に配置することを可能にする. footnote-scheme.satyh の後方互換性がある(ことを意図して作った1)ので, 単に footnote-scheme.satyh の代わりにこのパッケージを用いるようにすれば良い.
このパッケージの FootnoteScheme
モジュールが公開している field は
val initialize : unit -> unit
val start-page : unit -> unit
val main : context -> (int -> inline-boxes) -> (int -> block-boxes) -> inline-boxes
val main-no-number : context -> (unit -> inline-boxes) -> (unit -> block-boxes) -> inline-boxes
- (new)
val add-float-bottom : block-boxes -> inline-boxes
であり,add-float-bottom
が追加で新たに公開している field である.
(図を footnote の最上部に配置するために,
本来の footnote は一旦退避させておくなど,
他の関数も内部的にはかなり色々追加の処理をしている.)
- footnote-scheme-ext.satyh を install する. 現在まだ satyrographos に登録していないので, src/footnote-scheme-ext.satyh を手動でコピーしてきて手元に置いてやる必要がある. また,satysfi-base を利用しているので,これもインストールしてやる必要がある.
- footnote-scheme.satyh の代わりに, このパッケージ footnote-scheme-ext.satyh を import/require する.
- ページ下部に配置したい
float-box: block-text
がある場合は,FootnoteScheme.add-float-bottom float-box
としてやる. FootnoteScheme.initialize
,FootnoteScheme.start-page
などは, 従来の footnote-scheme.satyh と同じように呼び出してやる必要がある.
stdjareport.satyh
の \figure
コマンドを改造して,top/bottom の指定ができるようにしたいとする.
- satysfi-base をインストール.
opam install satysfi-base satyrographos install
- このパッケージ
footnote-scheme-ext
をインストール. とりあえずは src/footnote-scheme-ext.satyh を手動でコピーしてきて手元に置いてやる必要がある. stdjareport.sath
で@require: footnote-scheme
の代わりに@import: footnote-scheme-ext
する.@import: footnote-scheme-ext
- まず
stdjareport.satyh
において,float box の position の型を定義しておく.type floatpos = | FloatPosTop | FloatPosBottom
\figure
コマンドがfloatpos
を引数に取れるように型を変更する.direct \figure : [string?; floatpos?; inline-text; block-text] inline-cmd
\figure
コマンド内部において,floatpos
でFloatPosBottom
を指定されたときはFootnoteScheme.add-float-bottom
するようにする.% パラメータ floatpos を新たに追加. let-inline ctx \figure ?:labelopt ?:floatpos caption inner = ... let bb-inner = ... in match floatpos with | Some(FloatPosBottom) -> % FloatPosBottom を指定されたときは footnote-scheme-ext の関数を用いてページ下部に配置する. FootnoteScheme.add-float-bottom bb-inner | _ -> hook-page-break (fun pbinfo _ -> ( let () = display-message (`register `# ^ (arabic pbinfo#page-number)) in ref-float-boxes <- (pbinfo#page-number, bb-inner) :: !ref-float-boxes ))
- ユーザに
FloatPosBottom
などのように書かせるのが手間なら, easytable などのように alias 用のコマンドを作っておく. 例えば以下のようにすることで, ユーザはopen FloatPosAlias in
をすれば,\figure ?:(`label`) ?:(b) {This is a caption} <...>
のようにして使うことができる.module FloatPosAlias : sig val t : floatpos val b : floatpos end = struct let t = FloatPosTop let b = FloatPosBottom end
これらの改造を施した stdjareport.satyh が, demo/stdjareport.satyh である.
demo/local.satyh 及び demo/satysfi-logo.jpg は, SATySFi の公式デモのもの をそのままコピーしてきて配置している.
開発者向け(自分用)のメモは memo.md にある.
- satyrographos に登録する.
- ドキュメントを作る.
- (需要がありそうであれば)英訳.
Footnotes
-
バグっていて違う挙動になる可能性はある... ↩