コードブロックしたい(#raw

 1// 簡易マークアップ
 2
 3これは `inline code` です。
 4
 5```python
 6# これはコードブロックです。
 7def hello():
 8    print("hello")
 9```
10
11// 関数マークアップ
12これは #raw[inline code]です。
13
14#raw(
15  lang: "python",
16  block: true,
17)[
18# これはコードブロックです。
19def hello():
20    print("hello")
21]

raw要素で、コードブロックを表示できます。 langオプションでシンタックスハイライトする言語を設定できます。 blockオプションで、インライン表示とブロック表示を変更できます。

backtickを使った簡易マークアップの場合、 1つの場合はインライン表示、 3つの場合はブロック表示、となります。

ブロック表示したい(#raw.block

1#raw(
2  "コードサンプル",
3  block: true
4)

blockオプションで、 インライン表示とブロック表示を変更できます。

シンタックスしたい(#raw.lang

1#raw(
2  "コードサンプル",
3  lang: "python",
4)

langオプションでシンタックスハイライトする言語を設定できます。 Markdown記法でサポートされている言語名の他に、Typst固有の typ(Typst markup)、 typc(Typst code)、 typm(Typst math) がサポートされているそうです。

等幅フォントしたい

1#show raw: set text(font: ("Moralerspace Krypton", "HackGen35Console NF"))

コードブロックを表示するときは、等幅フォント(モノフォント)を設定するとよいです。 上記のサンプルでは、コード用フォントとして Moralerspace KryptonHackGen35Console NFを指定しています。

コードブロックを設定したい(raw.where(block: true)

 1// フォント設定
 2#show raw: set text(font: "Noto Sans Mono")
 3// ブロックの設定
 4#show raw.where(block: true): set block(
 5  fill: luma(95%),
 6  inset: 1em,
 7  radius: 1em
 8)
 9
10#raw(
11  lang: "python",
12  block: true,
13)[
14def hello():
15    print("hello")
16]

raw.where(block: true)で、ブロック表示のコードブロックを選択できます。 上記のサンプルでは、すべてのコードブロックを対象に、 背景色(fill: luma(95%))、 パディング(inset: 1em)を追加し、 角を丸く(radius: 1em)しています。

インラインコードを設定したい(raw.where(block: false)

1#show raw.where(block: false): set text(fill: olive)

raw.where(block: false)で、インライン表示のコードブロックを選択できます。 上記のサンプルでは、すべてのインラインコードを対象に、文字色をオリーブ(fill: olive)にしています。

言語名を表示したい

 1#show raw.where(block: true): it => {
 2  let lang-block = block.with(stroke: none)
 3  let code-block = block.with(stroke: luma(50%))
 4
 5  // 全体を包むブロック
 6  block(
 7    stroke: luma(90%),
 8  )[
 9    // 言語名を表示するブロック
10    #lang-block[#align(right)[#it.lang]]
11    // コードをそのまま表示するブロック
12    #code-block[#it]
13  ]
14}
15
16// usage
17#figure(
18  [
19```python
20def hello():
21  print("Hello World")
22```
23  ],
24  caption: "コードブロックのサンプル",
25)

コードブロックの言語名を表示することもできます。 デフォルトでは表示されていないため、#show raw.where(block: true): it => {...}の形で、コードブロック全体をクロージャーして装飾する必要があります。

上記のサンプルでは、コードブロック全体をblock要素に変換して、言語名を表示するブロックとコードを表示するブロックの2つを組み合わせています。