Slide 1

Slide 1 text

satysfi-easytable: SATYSFI で簡易な表組版 monaqa 2020 年 7 月 25 日 1/16

Slide 2

Slide 2 text

自己紹介 名前: monaqa Twitter: https://twitter.com/mo_naqa GitHub: https://github.com/monaqa 今までに作成した SATYSFI のパッケージ SLYDIFI (https://github.com/monaqa/slydifi) スライド作成のためのクラスファイル(このスライドも SLYDIFI 製) satysfi-enumitem (https://github.com/monaqa/satysfi-enumitem) 豊富なスタイルの箇条書きを簡単に組む satysfi-easytable (https://github.com/monaqa/satysfi-easytable) シンプルな表を簡単に組む etc. 2/16

Slide 3

Slide 3 text

自己紹介 名前: monaqa Twitter: https://twitter.com/mo_naqa GitHub: https://github.com/monaqa 今までに作成した SATYSFI のパッケージ SLYDIFI (https://github.com/monaqa/slydifi) スライド作成のためのクラスファイル(このスライドも SLYDIFI 製) satysfi-enumitem (https://github.com/monaqa/satysfi-enumitem) 豊富なスタイルの箇条書きを簡単に組む satysfi-easytable (https://github.com/monaqa/satysfi-easytable) シンプルな表を簡単に組む etc. 3/16

Slide 4

Slide 4 text

現在の SATYSFI の表組版事情 『The SATYSFIbook』 9.4 節 表組版 (p. 117) より引用 表組版は,全組版処理システムの泣き所である.簡潔なインターフェイスにする と機能が貧相になり, かといって高い自由度を保とうとすると簡素な表を組みた い場合でもかなり記述量が多くなってしまったりする.現状の SATYSFI の表組版 機能は,後者に振り切れたような形式化が行なわれている. デフォルトでは複雑な表が組めるが, 面倒 4/16

Slide 5

Slide 5 text

Before: 標準の table パッケージを用いた表組み Menu Size Price Ginger ale L $6.00 Orange juice L $8.50 Coca cola XL $12.50 @require: table \tabular(fun t -> ( %第1引数で表の中身の指定 let (c, l, r) = (t#c, t#l, t#r) in [ [ l {Menu}; c {Size}; r {Price} ]; [ l {Ginger ale}; c {L}; r {\$6.00} ]; [ l {Orange juice}; c {L}; r {\$8.50} ]; [ l {Coca cola}; c {XL}; r {\$12.50} ]; ] ))(fun xs ys ->( %第2引数で罫線の指定 let thin = stroke 0.5pt Color.black in let thick = stroke 1pt Color.black in %まだまだ続くよ 5/16

Slide 6

Slide 6 text

Before: 標準の table パッケージを用いた表組み Menu Size Price Ginger ale L $6.00 Orange juice L $8.50 Coca cola XL $12.50 match (ys, List.reverse ys) with | (y0 :: y1 :: _, ylast :: _) -> ( match (xs, List.reverse xs) with | (x0 :: _, xlast :: _) -> [ thick (Gr.line (x0, y0) (xlast, y0)); thin (Gr.line (x0, y1) (xlast, y1)); thick (Gr.line (x0, ylast) (xlast, ylast)); ] | _ -> [] ) | _ -> [] )); %終わり 6/16

Slide 7

Slide 7 text

After: easytable パッケージを用いた表組み Menu Size Price Ginger ale L $6.00 Orange juice L $8.50 Coca cola XL $12.50 @require: easytable/easytable open EasyTableAlias %いくつかの関数が楽に書けるように \easytable[l; c; r]{ | Menu | Size | Price | Ginger ale | L | \$6.00 | Orange juice | L | \$8.50 | Coca cola | XL | \$12.50 |} %終わり! 簡素な表は必要最小限の記述量で組めるよう API を単純化 7/16

Slide 8

Slide 8 text

Example: 列幅指定・セル内での行分割 lw で列幅を指定すれば, 長文も自動で行分割される Menu Sentence Ginger ale Long sentence. Orange juice Very long long long SATYSFI sentence. Coca cola このように長い文章 が入っていても全く 問題ない. \easytable[l; lw 90pt]{ | Menu | Sentence | Ginger ale | Long sentence. | Orange juice | Very long long long \SATySFi; sentence. | Coca cola |このように長い文章が入っていても全く問題ない. |} 8/16

Slide 9

Slide 9 text

easytable の工夫点 関数をフルに活かした API \easytable[l; lw 90pt]{ 予め用意された関数から選べる → 慣れてなくても使いやすい 自分で関数を定義可能 → 自由にカスタマイズできる 例:プリアンブルで let empty ctx it = EmptyCell と定義すると … ? 9/16

Slide 10

Slide 10 text

Example: 罫線・背景色のカスタマイズ 罫線はオプション引数で指定 ℎ ℎ ℎ ℎ ℎ % v 1 :左から1番目に鉛直の線を引く % h 1 :上から1番目に水平の線を引く % rect:表全体を太枠で囲む \easytable?:[v 1; h 1; rect;][c; c; c; c;]{ | | ${e} | ${g} | ${h} | ${e} | ${e} | ${g} | ${h} | ${g} | ${g} | ${h} | ${e} | ${h} | ${h} | ${e} | ${g} |} 10/16

Slide 11

Slide 11 text

Example: 罫線・背景色のカスタマイズ ある程度複雑な罫線や背景色も指定可能 ℎ ℎ ℎ ℎ ℎ \easytable?:[ bg-r (Color.gray 0.8) 0 1; % 1行目の背景色 bg-c (Color.gray 0.8) 0 1; % 1列目の背景色 d (0, 0) (1, 1); %左上の斜め線 v 1; h 1; rect; %内部の鉛直線,水平線,外枠 ][c; c; c; c;]{ | | ${e} | ${g} | ${h} | ${e} | ${e} | ${g} | ${h} | ${g} | ${g} | ${h} | ${e} | ${h} | ${h} | ${e} | ${g} |} 11/16

Slide 12

Slide 12 text

まとめ リポジトリはこちら satysfi-easytable で楽に表が書ける 行揃え,行幅指定をサポート 罫線・背景色の指定も可能 関数をフルに活かした拡張性の高い API (宣伝)よければ以下も使ってみてください SLYDIFI (https://github.com/monaqa/slydifi) satysfi-enumitem (https://github.com/monaqa/satysfi-enumitem) Happy SATYSFIing! 12/16

Slide 13

Slide 13 text

補遺 13/16

Slide 14

Slide 14 text

easytable の工夫点 2 SATYSFIの糖衣構文を使って AsciiDoc 風の構文を実現 \easytable[l; c; r][ {Menu}; {Size}; {Price}; {Ginger ale}; {L}; {\$6.00}; {Orange juice}; {L}; {\$8.50}; {Coca cola}; {XL}; {\$12.50}; ]; プログラミング言語としては直感的 マークアップするには大変 \easytable[l; c; r]{ | Menu | Size | Price | Ginger ale | L | \$6.00 | Orange juice | L | \$8.50 | Coca cola | XL | \$12.50 |} %終わり! AsciiDoc や Markdown にも似た構文 マークアップしやすい (どちらで書いてもよい) 14/16

Slide 15

Slide 15 text

Example: パディング調整・文字の均等割り付け 2020 年 の 祝 日 1/1 元 日 1/13 成 人 の 日 2/11 建 国 記 念 の 日 (中略) 9/22 秋 分 の 日 11/3 文 化 の 日 11/23 勤 労 感 謝 の 日 \easytable?:[t; b; m 1; v 2] [r |> hmgn 10pt 0pt; l |> hmgn 0pt 10pt; eq-sp]{ | | | 2020年 の 祝 日 | 1/|1 |元 日 | 1/|13 |成 人 の 日 | 2/|11 |建 国 記 念 の 日 | | | (中略) | 9/|22 |秋 分 の 日 | 11/|3 |文 化 の 日 | 11/|23 |勤 労 感 謝 の 日 |} 15/16

Slide 16

Slide 16 text

本日の発表で用いたシステム・パッケージ等 名前 概要 リンク SATYSFI 説明不要 https://github.com/gfngfn/SATySFi satyrographos SATYSFIのパッケージマネージャ https://github.com/na4zagin3/satyrographos SATySFi-it LATEXiT みたいなやつ.表のミニ マルな例を作成するのに使用 https://qiita.com/wasabiz/items/676a08c158514aa30f2d SLYDIFI SATYSFIのスライド作成クラス https://github.com/monaqa/slydifi enumitem 箇条書き作成用パッケージ https://github.com/monaqa/satysfi-enumitem satynx Vim のシンタックスハイライトを SATYSFI 上で再現するプラグイン 準備中 16/16