この記事はOUCC Advent Calendar 2023の23日目の記事です。前回の記事はあいうえおさんのPowerPointの音声ファイルをWhisperで文字起こししてみたでした。
Typst を授業のレポートに使う中でドキュメントなどからは読み取りづらいが、知っておいたほうが良いという文法がいくつかあったので紹介します。
Typstとは
TypstはLatexの代替を目指して作られている新しい組版システムです。高速で書きやすいことが売りでコンパイル時間は体感できないほど早く、学習もドキュメントがしっかりしているので簡単です。
この記事ではそんなドキュメントに明確に記述されてはないが、便利な書き方を紹介します。
最後の引数はMarkup Modeで後ろにつけられる
具体的にはこのようにかけるということです。
#let myfunc(value: 1, content) = {
content
}
// 普通はこのように書く
#myfunc([abc])
// このようにも書ける
#myfunc()[
abc
]
カスタム関数でネイティブ関数と同じように書けるようになるのでテンプレートを作るときに重宝します。
カスタム関数もデフォルト値の変更ができる
Typstは変数の上書きができます。これを悪用すると本来デフォルト値を変更できないはずのカスタム関数も変更できるようになります。
#let myfunc(value: 1) = {
return value * 2;
}
// これはできない
#set myfunc(value: 2)
// 上書き
#let myfunc = myfunc.with(value: 2)
ただし見ての通り上書きしているだけなのでもう一度変更したりなどはできません。ちなみにmyfunc.with
という関数は引数の値を適用した関数を返します。Typscriptで書くと次のような感じです。
type myfunc = (value: number) => number;
type myfunc_with = (value: number) => (() => number)
フォントやページ番号などを関数にまとめる
フォントやページ番号などの設定はスコープの関係上普通に関数を呼ぶだけでは設定されません。これをまとめて設定するには#show
を使う必要があります。#show: func
のように:
の前に何も置かずに#show
するとファイル全体が引数に渡されます。
#show: it => {
set text(font: "Yu Mincho")
set heading(numbering: "1.1.1.")
it
}
これとfunc.with
を組み合わせることでうまく抽象化することができます。
// template.typ などにおいて参照する。
#set mysetting(title: "",name: "", fontSize: 10pt, content) {
set text(font: "Yu Mincho", size: fontSize)
set heading(numbering: "1.1.1.")
[
#text(font: "Yu Gothic", size: 20pt)[
* #title *
]
#name
#pagebreak
]
content
}
#show: mysetting.with(title: "Typst 紹介", name: "みやじ")
最後に
Typstはまだまだ機能があるのでうまく使いこなせるように勉強します。
また、授業で使ったテンプレートはこちらに上げているので良かったら使用してください。