マクロツイーター

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

SATySFi で文書作成が容易なクラスファイルを作成した(※ただし画期的)

これは「SATySFi Advent Caleandar 2018」の 18 日目の記事です。
(17 日目は matsud224 さん でした。19 日目は puripuri2100 さん です。)

みなさん、サティスファイしていますか!?

えっ、あんまり SATySFi していない? ナンデ?

えっ、ぜひとも SATySFi してみたいけど難しくて使いこなせない? じゃあ、代わりに scSATySFi とかを使うのはどうでしょうか?

えっ、確かに scSATySFi の出力はトッテモ素敵だけど、型システムが簡単すぎるので使う気が起きない? やっぱり複雑な型システムをもつ SATySFi を使いこなしてドヤ顔したい? なるほど……。

というわけで、画期的な文書クラスを作りました

簡単! 素敵! 本質的!

scarticle クラスを使うと、誰でも簡単に、scSATySFi と同じくらい素敵な文書を作れます。具体的には、SATySFi 文書ソースを次のようになります。

% scarticle を使おう!
@require: scarticle

document (|
  title = `サンプル`; % タイトル
  show-title = true; % タイトルを出力するか
|) '<
  % 本文の記述
  +p {scarticle で誰でも\emph{簡単}に\SATySFi;文書を作れます。}
>

えっ、stdja クラスの文書とほとんど同じでやっぱり難しそう? いえ、心配は無用です。タイトルのところを見てください。

  title = `サンプル`; % タイトルは文字列で指定

stdja などの多くのクラスでは title の値は {...} という書き方をします。これは「SATySFi の組版機能を使って組まれるテキスト」*1を表していて、高機能ではあるのですが、その代わりに、「正しい書き方を習得しないといけない」という難しさを伴っています。

このため、scarticle ではタイトルは単なる文字列の値として指定します。SATySFi の文字列値の書き方は非常に単純で、` ` の中にそのまま文字列を書くだけです。{...} のテキストを書くときにはエスケープが必要な <; も含めて、あらゆる文字をそのまま書けます。(ただし ` だけは書けない((もちろん、SATySFi の文法を知っている強い人なら ` を含む文字列値も書けます。『The SATySFibook』の「基本的な基本的なデータ」(3.2.3 節)で説明されています。))のですが、これが必要なことはまずないでしょう。)

では本文('< > の中身)はどうでしょうか。これは stdja などと同じ書き方をしていて((実際は stdjabook と同じコマンド(+p+section\emph\SATySFi など)が使えるようになっています。ただし数式関連の命令には対応していません。))何か難しそうです。しかしこれも心配はいりません。scarticle クラスは文書を本質的にすることを指向していて、そこでは本文の内容は全く本質的でないので完全に無視されます。ヘタに書いても型エラーの原因になるだけなので、思い切って本文は省略しましょう!

[thesis.saty]
@require: scarticle

document (|
  title = `卒業論文`;
  show-title = true;
|) '< % 省略!!
>

タイトルの文字列以外はそのまま書き写すだけなので、とても簡単になりました! えっ、本文を省略してしまうと、内容がない文書になってしまう? いえ、そんなことはありません。実際にこの文書ソースをコンパイルしてみましょう。

> satysfi thesis.saty
 ---- ---- ---- ----
  target file: 'thesis.pdf'
  dump file: 'thesis.satysfi-aux' (will be created)
  parsing 'thesis.saty' ...
  parsing 'scarticle.satyh' ...
  parsing 'pervasives.satyh' ...
  parsing 'list.satyg' ...
 ---- ---- ---- ----
……(略)……
  writing pages ...
 ---- ---- ---- ----
  output written on 'thesis.pdf'.

この通り、本質的な内容をもつトッテモ素敵な文書になっています。しかも、箒もついてきます。*2スバラシイ!☃︎

まとめ

というわけで皆さん、scarticle クラスを使って、本質的な文書をサティスファイしましょう!

*1:SATySFi の用語では「インラインテキスト」(inline text)と呼びます。

*2:なんといっても、今日は 18 日ですからね。