OUCC

BLOG

記事一覧 タグ一覧

覚えておくと便利なTypstの文法

投稿日:

この記事は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はまだまだ機能があるのでうまく使いこなせるように勉強します。

また、授業で使ったテンプレートはこちらに上げているので良かったら使用してください。

GitHub - miyaji255/Typst-Utilities: 自分用のTypst Utility
自分用のTypst Utility. Contribute to miyaji255/Typst-Utilities development by creating an account on GitHub.
GitHub - miyaji255/Typst-Utilities: 自分用のTypst Utility favicon https://github.com/miyaji255/Typst-Utilities
GitHub - miyaji255/Typst-Utilities: 自分用のTypst Utility

参考

Typst Documentation
Learn how to use Typst to compose documents faster. Get started with the tutorial, or dive into the reference.
Typst Documentation favicon https://typst.app/docs
Typst Documentation