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
]

// 引数がなければカッコも省略可能
#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: "みやじ")

前後のスペースなしに参照を貼る

#[@label]のように#[]で囲むことで日本語のようなスペースがない言語でも参照を使えます。

#[@label]は比例の式です

// #[]を使わないとスペースが必要になる
@label は比例の式です
$ f(x) = a x $ <label>

SVGで複数ページ出力するには{p}を使う

{p}で出力ファイルにページ番号をつけて、複数ページのSVGを出力することができます。

typst compile input.typ output{p}.svg

また、これは直接関係しないのですがPowerShellで{}を使うと変数展開になるので、 `{p`}のようにバッククオートでエスケープする必要があります。

コマンドラインから入力を与えられる

--input key=valueのように入力を与えることができます。これはsys.inputs.keyで文字列として参照できます。

typst compile --input key=value input.typ

System Functions - Typst Documentation

最後に

Typstはまだまだ機能があるのでうまく使いこなせるように勉強します。

参考

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