8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TypstAdvent Calendar 2024

Day 17

Typstで簡単なテンプレートを作る

Last updated at Posted at 2024-12-16

はじめに

Typstでは文書設定をしなくても,デフォルトの設定である程度のものが書けます.しかし,何かレポートを書いたり,論文を書いたりする際には,多くの設定が必要になります.そうでなくとも,日本語で何かを書くには少なからずフォントの設定が必要です.このような設定は,同じ形式の文章を書くときには同じ設定となるので,テンプレート化しておくと便利です.

この記事では,簡単なTypstのテンプレートを作るための要点をまとめます.


  1. テンプレートを置く階層
  2. show関数を利用して設定を書き込む
  3. 設定項目
    1. 言語の設定
    2. ページの設定
    3. フォントの設定
    4. 行間の設定
    5. 章の設定
    6. インデントの設定
    7. 数式の設定
    8. figureの設定
  4. おわりに

また,私が作成した Typst用日本語テンプレート非公式の日本機械学会テンプレート もありますので,ぜひ積極的に使ってください!

1. テンプレートを置く階層

まず,テンプレート作る際に階層を決めておきます.テンプレートはメインのファイルと分けておくと便利ですので,この記事では,以下のようにしておきます.

.
├─ style
|  └─ style.typ
└─ main.typ

テンプレートファイル style.typ は,文章を書くファイル main.typ とは異なる階層 style などに入れておくと,きれいに整理できます.

Typstではファイルの読み込みを相対パスで行えます.main.typの冒頭には次のファイル読み込み設定をしておきましょう.

main.typ
#import "style/style.typ": *

上記では,ファイル名の後に : * としていますが,このようにすることで style.typ 内の全ての関数を一気に読み込むことができます.

2. show関数を利用して設定を書き込む

style.typ に設定を書くには,#let を利用します.
設定は最初に書き込みたいので,次のような関数を書きます.

style.typ
#let init(body) = {
  ここの設定を書いていく...
  body
}

これは init という関数を作っています.body という引数がありますが,ここには main.typinit 関数を呼び出した後の全てのものが入ります.特に操作をしない限りは,上記のように設定を書いた最後の行に body と書いておけば良いです.
関数の中身は{ }の中に書いていきます.
この括弧の中では#を使う必要はありません.

これを main.typ で呼ぶには,#showを利用します.

main.typ
#show: init

このときに引数を設定する必要はないです.このように書けば,init の中に書いた設定が全て読み込まれるようになります.

このあとは,全て init 関数の中に書いていきます.

3. 設定項目

簡単なテンプレートを作るために,いくつか設定を書いていきます.設定は全てinit 関数の中に書きます.

3.1 言語の設定

文書を日本語に設定するには,

set text(lang: "ja")

と書きます.
これで,目次や図表のキャプションが日本語になります.

設定前は
スクリーンショット 2024-12-15 23.27.06.png
と表示されますが,設定後は
スクリーンショット 2024-12-15 23.27.22.png

のようになります.

3.2 ページの設定

ページの設定をするには,

set page(
    paper:"a4",
    margin: (left: 25mm, right: 25mm, top: 30mm, bottom: 30mm),
    numbering: "1",
    number-align: center,
)

と書きます.

  • page: 紙の大きさを設定します.ほとんどの場合A4だと思いますので,"a4"としておきます
  • margin: 紙の余白を設定します
  • numbering: ページ番号を設定します."1 / 1"のように書けば,全体ページ数も表示できるようです
  • number-align: ページ番号の位置です

他にもたくさん設定項目があるので,必要に応じてページの設定を参照してください.

上の場合,設定前は
スクリーンショット 2024-12-15 23.29.46.png
のように白紙が表示されているのに対し,設定すると
スクリーンショット 2024-12-15 23.30.18.png
となり,ページ番号が設定されていることがわかります.また,上記の例では見えていませんが,余白も設定されています.

3.3 フォントの設定

フォントは

set text(font: "Harano Aji Mincho")

のように設定します.fontの引数はかなり自由度が高く,配列でも定義できるようです.
例えば

set text(font: ("CMU Serif", "Harano Aji Mincho"))

のようにすれば,CMU Serifにあるフォントが優先的に読み込まれ,ないフォントはHarano Aji Minchoから読み込まれます.これを使えば,あるていど英字と日本語を別のフォントにすることができます.

数式のフォントも次のように

show math.equation: set text(font: "Latin Modern Math")

と設定できます.

フォントは環境依存ですから,存在しないフォントを指定してしまう場合も考えられます.この場合,指定したフォントは無視されるようです.

上記のように設定を書き加えると,
スクリーンショット 2024-12-15 23.33.36.png

スクリーンショット 2024-12-15 23.34.58.png
のように日本語フォントが正しく設定されたことがわかります.

3.4 行間の設定

LaTeX と比較すると,Typstは若干行間が狭めに設定されているような感じがします.行間を設定するには

set par(leading: 1.0em)

のようにします.emはフォントサイズを基準にした倍率です.デフォルトは0.65emと少し狭めに設定されているようです.

設定前は
スクリーンショット 2024-12-15 23.36.56.png
のようになっていますが,設定すると
スクリーンショット 2024-12-15 23.37.12.png
のように行間が広がったことがわかります.

3.5 章の設定

Typstでは,章をheadingで設定できます.
章の番号付けは

set heading(numbering: "1.")

などとすれば設定できます.
細かい設定は

show heading: it => [
    ここに設定を書いていく...
]

のなかで書きます.
このとき,headingに必要な情報は全てitの中に書かれています.例えば,

#counter(heading).display(it.numbering)

などと書けば章番号が出力されます.

時々,itの中にnumberingが含まれないことがあります.
このような場合には,条件分岐で

#if it.numbering != none{
  counter(heading).display(it.numbering)
}

というように設定しないとエラーが出てしまいます.

章の題名もitから

#it.body

と書いて取得できます.

上記のように設定すると,
スクリーンショット 2024-12-15 23.38.59.png

スクリーンショット 2024-12-15 23.41.36.png
のように変更できます.
タイトルをゴシック体に変更したい時は,

show heading: it => [
    #set text(font: "Harano Aji Gothic")
]

などとすれば,
スクリーンショット 2024-12-15 23.44.23.png
と変更できます.

3.6 インデントの設定

Typstでもパラグラフの最初をインデントを設定できます.これは

set par(first-line-indent: 1em)

とすれば1文字分のインデントが設定されます.

3.7 数式の設定

数式は,ブロック形式と文章中の形式で異なる設定ができます.例えば,ブロック形式の数式のみ設定したい場合は,

show math.equation.where(block: true): it => {
    ここに設定を書いていく...
}

とします.例えば,数式を左揃えにしたい場合は

show math.equation.where(block: true): set align(left)

などとします.

日本機械学会の場合,数式は左揃えで空白を2文字空けることが求められています.このような場合は,gridを使って

show math.equation.where(block: true): it => {
    set align(left)
    grid(
        columns: (2em, auto),
        [],it
    )
}

とすれば設定できました.

実際に書いてみると,設定前は
スクリーンショット 2024-12-15 23.45.37.png
のように数式は中央に表示されますが,設定することで
スクリーンショット 2024-12-15 23.46.27.png
のように位置を変更できます.

3.8 figureの設定

Typstでは,表だけでなく図もfigure環境を使います.これらは自動で判別され,kindに反映されます.表の設定を変えたい場合は,

show figure.where(kind: table): it => {
    ここに設定を書いていく...
}

とします.図の場合はkindimageとすれば設定できます.

例えば,表のキャプションを上に配置したい場合,

show figure.where(kind: table): set figure.caption(position: top)

などと書きます.

日本機械学会の場合,図や表のキャプションはTable 1, Fig. 2などと書きますが,文章中で引用する場合は表1や図2と表記します.これを再現するには,特定の種類のrefだけsupplementを変えるを参考にして

// キャプションの設定
show figure.where(kind: table): set figure(supplement: "Table")
show figure.where(kind: image): set figure(supplement: "Fig. ")
// 引用の設定
set ref(supplement: it => {
    let body-func = it.body.func()
    if body-func == table{
        [表]
    }else if body-func == image{
        [図]
    }else{
        it.supplement
    }
})

とします.

設定前は,
スクリーンショット 2024-12-15 23.49.56.png
のようになりますが,設定後は
スクリーンショット 2024-12-15 23.56.29.png

のようになります.

4. おわりに

Typstの簡単なテンプレートを作る際に紹介しました.
この記事で紹介している例を利用すると,次のようなテンプレートができます.
スクリーンショット 2024-12-16 1.52.12.png

スタイルファイルを読み込むだけで,簡単に設定できていることがわかります.

また,さらに詳細な設定をした Typst用日本語テンプレート非公式の日本機械学会テンプレート もありますので,自由にご利用ください.

8
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?