SATySFiでvspace
code:satysfi
let-block ctx +vspace len = block-skip len
2つのブロックの間に挟むと len の長さだけ縦に余白を空けてくれます(ただし下に述べた通りの注意があります).実際に使うには以下のようにします.
code:main.saty
+p{1番目}
+p{\pang;}
+p{\pang;}
+p{2番目}
+p{\pang;}
+vspace(10pt);
+p{\pang;}
+p{3番目}
+p{\pang;}
+vspace(-10pt);
+p{\pang;}
/icons/hr.icon
https://gyazo.com/726be80a89a2cf2b1c5f684ce2797814
/icons/hr.icon
あれ?うまくいっていないようです.この例だと,1番目と3番目に違いがありません.その原因は 枠を可視化 してみるとわかります. /icons/hr.icon
https://gyazo.com/be3c9b0812a6f2e095fff14aab273bd2
/icons/hr.icon
1番目と2番目の違いに注目です.2番目では 2つの +p{} の間に +hspace(); が入っているため,2つの段落間空白が入り込んでしまっています.そのため, +hspace(); で与える数値は段落間空白1つぶん縮める必要があります.
たとえば,段落間空白が 10pt になっている上の例の場合はこうなりますね.
code:satysfi
+p{1番目}
+p{\pang;}
+p{\pang;}
+p{2番目}
+p{\pang;}
+vspace(10pt -' 10pt);
+p{\pang;}
+p{3番目}
+p{\pang;}
+vspace(-10pt -' 10pt);
+p{\pang;}
うまくいきました.
/icons/hr.icon
https://gyazo.com/9b2f2de1adcb8a9908ec26b049f25878
/icons/hr.icon
本当に望ましい動作としては「前後の block-boxes に設定されている段落間空白を読み取り,適切な値を差し引いて返す」ような +vspace かもしれませんが,それは今の SATySFi では少し難しいかもしれません.少なくともすぐには実装が思いつきません!monaqa.icon ちなみに, block-skip の引数には負の長さを指定することもできます.そのため指定した値によっては文字が重なることもあります.