はじめに
静的型付けによる一貫した構造的記述が可能な組版処理システムSATySFi。関数型プログラミングの知識が必要で少しハードルは高いですが、慣れると確かにTeXより使いやすいです。エラーの場所もわかりやすいし、コマンドのカスタマイズも簡単。
今回は、物理(工)学者、量子コンピュータエンジニアが親の顔よりもよく見るブラケット記法(${|\psi\rangle},\langle \phi|,\langle \phi|A|\psi\rangle$みたいなやつ) をSATySFiで表示するコマンドを紹介します。
動機
- SATySFiの標準ライブラリ に入っていない
- 使う人はめちゃくちゃよく使う
方法
コマンド定義
SATySFi文書のローカルのクラスファイルlocal.satyh
(その文書でだけ共有されるクラスファイルはたいていこの名前)に以下を追記し、適用したいSATySFi文書にimportしてください。
@require stdjareport
...
let-math \bra =
math-paren (Math.angle-left 0.5pt) Math.abs-right
let-math \ket =
math-paren Math.abs-left (Math.angle-right 0.5pt)
let-math \braket lst =
math-paren-with-middle
(Math.angle-left 0.5pt) (Math.angle-right 0.5pt)
(Math.abs-right) lst
let-math
は数式コマンド
の定義宣言で、ここでは\bra
、\ket
、\braket
コマンドを定義しています。
ブラケット記法内の|
は本来Math.bar-middle
を使う方が意図がわかりやすいんでしょうが、表示してみたところ字間が広く空いてしまったのでMath.abs-right
を使いました(本当は記号の流用は避けたい)。
ここで使った関数はmath.satyhで定義されているので参考にしていただければと思います。
使い方
例として以下のようにコマンドを使ってみました。
SATySFiファイル
@import: local
@require: itemize
document(|
title = {ブラケット記法のテスト};
author = {Massn};
|) '<
+listing{
* ブラ:${\bra{\phi}}
* ケット:${\ket{\psi}}
* ブラケット:
**${\braket![${\psi};${\phi}]}
**${\braket![${\psi};${A};${\phi}]}
**${\braket![${\psi};${A};${B};${\phi}]}
}
>
表示結果
$ satysfi braket-test.satyh
でbraket-test.pdf
を生成しました。タイトル以外の主要部分は以下のように表示されます。
$\langle\psi|A|B|\phi\rangle$という書き方に意味があるかわかりませんが、まあこういうのも書けますよということで入れておきました。