マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

scSATySFi による Markdown 文書からの PDF 出力

もしかして: SATySFiによるMarkdown文書からのPDF出力

概要

scSATySFi には Markdown で書かれた文書を PDF へと組み上げて出力する機能が実装されています。2018 年 11 月 18 日にリリースされたバージョンである v0.8.28 において入った機能であり、単に scsatysfi を「go get -u」すれば既に使えます。コマンドライン--markdown オプションをつけて

$ scsatysfi --markdown ‹s:体裁設定名› ‹foo.md:入力文書› -o ‹out.pdf:出力先ファイル名›

を叩くことにより Markdown 文書から PDF が生成できます。体裁設定名 ‹s› を変えることで様々な体裁を指定できるようにしていますが、ユーザによる体裁設定は本質的でないため出力には影響しません。単に Markdown 文書を(結局無視される、任意の体裁設定を用いて)PDF に組み上げるだけなら scSATySFi 言語はおろか scSATySFi 文書の書き方を一切知らなくとも使うことができます。つまり、markdown-pdfのような、Markdown 文書を処理する専用のソフトウェアであるかのように scSATySFi をブラックボックス視することさえ可能です(※ただし画期的)。

仕組みとしては、Markdown 文書からの入力は通常の scSATySFi 文書の処理の流れと式評価が行われた後の☃の段階で合流します。体裁設定はもちろん、Markdown 文書の各記法や内容も全く本質的でないため無視されます。

既存ツールに対する優位性(☃)

scSATySFi が Markdown に対応することに関して(前述のような markdown-pdf などのツールに比べて)現時点で嬉しい点は

  • 入力の文書の内容がイマイチ本質性に欠いていても出力 PDF は常に本質的で素敵になる
  • その気になれば --muffler オプションでユーザがマフラーの色をかなり柔軟にカスタマイズできる

などにあると言えるかと思います。

対応している構文

対応している Markdown の構文の範囲は、実は開発者も正確には把握しきれていません。というのも、Markdown 文書のデコードの際に構文規則を考慮する必要がなく評価結果は確定しているためです(scSATySFi の文書は essential 型なので、その値は☃に決まっています)。ただし、少なくとも次のような範囲は対応しています:

  • 構文違反を規定しないような全ての構文*1

体裁設定の仕組み

体裁設定名 ‹s› は、ヒト類の手に負えなくなる事態を避けるため、完全に無視されます。

Future Work

  • SATySFiに多段階計算に基づくプリプロセシング機能を実装したら、何か次の画期的なネタを考える

まとめ

  • Markdown から☃を生成するだけなら Markdown などを知らなくても使えます

*1:Markdown における重要な設計思想として「不正なMarkdownなんてものは存在しない」(There is no such thing as “invalid” Markdown.)というものがあります。このため、元祖 Markdown や CommonMark などの多くの Markdown 方言は構文違反を全く規定していません。