SATySFiでphantom
LaTeX では, \phantom{a} というコマンドで「a」と同じ幅,高さ,深さを持つボックスを作ることができます.
SATySFi でもこのコマンドと同機能を持つコマンドを作りたい,というお話です.
code: sastysfi
let-inline ctx \phantom it =
let ib = read-inline ctx it in
let (w, h, d) = get-natural-metrics ib in
inline-graphics w h d (fun _ -> [])
inline-graphics は本来グラフィックスのリストを描画して inline-boxes にするためのコマンドですが,グラフィックスのリストを与えるべきところに空のリストを与えることで,何も描画しない「ただ余白だけ」の inline-boxes を作成できます. 「一度与えられたテキストを組んでみて,できたインラインボックス列の大きさを測って,それと同じ大きさのまっさらなキャンバスを作成する」というイメージです.
ただし,この方法ではグルーが考慮されないため,複数行にまたがる段落中で使う場合などでは厳密に一致しない可能性があります.
\hphantom や \vphantom も同様にして作成可能です.
code: sastysfi
let-inline ctx \hphantom it =
let ib = read-inline ctx it in
let (w, h, d) = get-natural-metrics ib in
inline-graphics w 0pt 0pt (fun _ -> [])
let-inline ctx \hphantom it =
let ib = read-inline ctx it in
let (w, h, d) = get-natural-metrics ib in
inline-graphics 0pt h d (fun _ -> [])