2021年12月18日

SATySFiで枠囲み

これはSATySFi advent calendar 2021の18日目の記事です.昨日はmonaqaさんでした.明日は未定です.

SATySFiでこんな枠囲みを実現するためにcolorboxというパッケージを作ってみました.

もともと枠囲み用のプリミティブblock-frame-breakableがあるのでそれを使っているだけですが,枠を少し用意したりして使いやすくしたつもり版です.

インストール

Satyrographosでインストールできます.

$ opam install satysfi-colorbox
$ satyrographos install

@require: colorbox/colorboxしてください.

使い方と例

SATySFi本体の0.1.0がでたら使い方を変えるかもしれませんが,今のところとりあえず以下のように使います.

+Colorbox.colorboxで描きます.名前からわかるようにブロック命令です.インラインの命令は(今のところ)ありません.最初の例は次のようにして出しました.

+Colorbox.colorbox [
  Colorbox.attach-boxed-title-on-bottom-right;
] ?:({タイトル}) <
  +p{枠囲みのサンプルです.}
>

このように,+Colorbox.colorbox [options] ?:({title}) <block>と一つのオプション引数と二つの必須引数をとります.引数optionが各種枠の設定で,[]の間にセミコロン区切りで設定を入れていきます.もちろん空の設定でもよく,その場合はデフォルトの設定が使われます.titleはタイトルで,省略するとタイトルのない枠ができます.残りのblockが中身です.なお常にページ分割可能な枠を出力します.

細かいオプションはマニュアルを見てもらうことにして,いくつか例を書いてみます.なお,オプション名の殆どはLaTeXパッケージのtcolorboxからとっています.

+Colorbox.colorbox [
  Colorbox.leftrule 2mm;
  Colorbox.arc 13pt;
] ?:({タイトル}) <
  +p {中身}
>

左の枠を太くしてまた四隅を丸っこくしました.

+Colorbox.colorbox [
  Colorbox.toprule 0pt;
  Colorbox.bottomrule 0pt;
  Colorbox.rightrule 0pt;
  Colorbox.leftrule 1.5mm;
  Colorbox.colframe (Color.gray 0.6);
  Colorbox.colback Color.white;
  Colorbox.arc 0pt;
] <
  +p {中身}
>

テキストの左側に線を引きたくなっても大丈夫.上下右の線の太さを0にして,線の色を灰色に,背景色を白にして四隅の丸まりの半径を0にしました.

+Colorbox.colorbox [] ?:({一つ目}) <
  +p{中身.}
  +Colorbox.colorbox [] ?:({二つ目}) <
    +p{の中にさらに枠.}
  >
>

ネストしても大丈夫.(これは単純に元となるblock-frame-breakableが素晴らしい.)

+Colorbox.colorbox [
  Colorbox.attach-boxed-title-on-top-center;
] ?:({タイトル}) <
  +p{中身}
>

独立したタイトルを上の真ん中に配置.

+Colorbox.colorbox [
  Colorbox.colback Color.white;
  Colorbox.attach-boxed-title-on-top-left;
  Colorbox.boxed-title-colframe Color.white;
  Colorbox.colbacktitle Color.white;
  Colorbox.coltitle Color.black;
  Colorbox.boxtitle-yshift -3mm;
  Colorbox.boxtitle-xshift 2mm;
] ?:({タイトル}) <
  +p{中身}
>

独立タイトルの背景色と枠の色を白にしてちょっと場所をいじってみた.

+Colorbox.colorbox [
  Colorbox.drop-shadow
] <
  +p{中身}
>

影付き.

余談?

以下のソースでPDFを作ると手元のAcrobatがエラーはきます.小さい例を作ろうと思ったのですがエラーが消えてしまうのでよくわからず.

@require: stdja
@import: src/colorbox
document(|
  title = {};
  author = {};
  show-title = false;
  show-toc = false;
|)
'<
  +Colorbox.colorbox [] <
    +p{中身}
  >
>

追記:解決しました.

0 件のコメント:

コメントを投稿

コメントの追加にはサードパーティーCookieの許可が必要です