Typstって何
新型のオモチャ😊 pic.twitter.com/yiQfWxpwUh
— 某ZR(ざんねん🙃) (@zr_tex8r) 2023年6月6日
Typstは今年(2023年)の3月頃に一般公開された、新しい組版エンジンです(現在はベータ版)。
詳細については以下の記事を参照しましょう。
開発も活発に続けられていて、5月20日リリースの0.4.0版では、なんと、日本語組版のサポートが始まりました😲 今も着実に改良が加えられているようです。
アレレレレ、いつの間にかTypstが日本語組版できるようになってるぞ? どういうこと⁉︎😲#Typst pic.twitter.com/ZCO45O1Hqe
— 某ZR(ざんねん🙃) (@zr_tex8r) 2023年6月9日
というわけで、早速Typstでチョット文書を作ってみました。
Typstでナベアツする件
プログラマブルな組版ソフトウェアで何か文書を作るとなれば、最初にやるべきなのはやっぱりNabeAzzですね。元ネタはもう忘れ去られていると思うので、改めて問題の内容を説明しておきます。
「NabeAzz問題」は以下の版面出力を行うプログラムを実装する問題です。
- 与えられた正整数 n に対して、1から n までの整数の十進表記を順に空白区切りで出力する。
- ただし、整数が「3の倍数である」または「その十進表記に数字3を含む」場合は、“アホなフォント”に切り替えて出力する。
「フォントを変えて出力する」という要件があるので組版用プログラム言語専用の問題といえます。これまでTeX、PostScript、MetaPostでの実装が知られています。
やってみた
- Typst:NabeAzzする文書(Gist/zr-tex8r)
#import "zrsimple.typ"
#show: zrsimple.doc.with(
paper: "a5",
title: "NabeAzz with Typst",
author: "ZR"
)
// "アホなフォント"のファミリ名
#let aho-font = "Allura"
// nabeazz(n integer) -> content
// 入力がnのときの"NabeAzz問題"の出力.
#let nabeazz(lmt) = {
range(1, lmt+1).map(n => {
if calc.rem(n, 3) == 0 or "3" in str(n) {
text(size: 2em, font: aho-font, str(n))
} else {
str(n)
}
}).join([ ])
}
#nabeazz(40)
とりあえず、Typstで簡単な文書を作ってみた😃#TeX以外 #アレ pic.twitter.com/zllF4Sgf0m
— 某ZR(ざんねん🙃) (@zr_tex8r) 2023年6月5日
Typstでドドスコする件
TypstでNabeAzzができたとなると、当然の帰結として次はドドスコをやりたくなりますね🙃
「ドドスコ問題」は次のようなプログラムを実装する問題です。
【問題】配列{"ドド","スコ"}からランダムに要素を標準出力し続け、『その並びが「ドドスコスコスコ」を3回繰り返したもの』に一致したときに「ラブ注入♡」と標準出力して終了するプログラムを作成せよ(配点:5点)
— ((🐑++)) (@Sheeeeepla) 2022年8月1日
この問題には組版的要件が含まれないため、イロイロな言語での実装が行われています。組版用言語に限ると、TeXやSATySFiでの実装があります。
やってみた
- Typst:ドドスコ(ラブ注入♡)する文書(Gist/zr-tex8r)
#import "zrjasimple.typ"
#show: zrjasimple.doc.with(
title: "Typst でドドスコしてみた",
author: "某 ZR"
)
// ddsk(seed integer) -> string
// 乱数種をseedとしたときの"ドドスコ問題"の出力の文字列.
#let ddsk(seed) = {
let (m, a) = (0x7FFFFFFF, 16807)
let next(v) = calc.rem(v * a, m)
let r = next(next(seed))
let s = 0
while s != 0x888 {
let b = calc.odd(int(r / 0x4000))
s = calc.rem(s * 2 + int(b), 0x1000)
if b {"ドド"} else {"スコ"}
r = next(r)
}
"ラブ注入♡"
}
#ddsk(80000)
- 公式Webアプリへのリンク
日本語の文字も出力できますよ!😃#TeX以外 #アレ pic.twitter.com/xy6YhsoDJT
— 某ZR(ざんねん🙃) (@zr_tex8r) 2023年6月5日
まとめ
現在のところ、TeXやSATySFiと比べるとTypstには以下のような大きなメリットがあります。
まだ公開されて間もないので、各種ブログネタが手つかずのまま残っていること🙃 #ええっ
— 某ZR(ざんねん🙃) (@zr_tex8r) 2023年6月6日
というわけで、皆さんも、Typstでイロイロやってみましょう!💁