コードブロックしたい(#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 Kryptonと
HackGen35Console 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つを組み合わせています。