図版したい(#figure

1#figure(
2  image("image.jpg", width: 80%),
3  caption: [図版のキャプション],
4) <label>
5
6〇〇については @label を参照してください。

#figure要素で図版を挿入できます。 第一引数に挿入したい図版コンテンツを指定します。 画像ファイルを指定する場合は#image要素を使います。

コンテンツブロックを指定できるので、#rectなどの図形も挿入できます。 また、表(#table)やコードブロック(#raw)なども指定できます。

注釈

ラベル機能で<図ラベル>を設定できます。 設定した図ラベルは@図ラベルで 本文中で参照できます。

キャプションしたい(#figure.caption

1#figure(
2  [コンテンツ],
3  caption: [キャプション],
4)

captionオプションで図版のキャプションを設定できます。

注釈

レポートや論文の場合、図版のキャプションは必須です。 このとき、単に図版のタイトルだけ記述するのではなく、本文を読まなくても、この図版が何を示しているのかわかるように説明するとよいです。

1#show figure.caption: it => {
2  set align(left)
3  it
4}

キャプションはデフォルトで図版に対して中央寄せで表示されます。 左寄せにしたい場合はshowルールで変更します。

余白したい

 1// figure全体の設定
 2#set figure(gap: 0em)
 3#show figure: set block(
 4  inset: 0.5em,
 5  width: 100%,
 6  // stroke: 1tp,  // enable when debug
 7)
 8
 9// figure.captionの設定
10#show figure.caption: it => {
11  block(
12    inset: 0.5em,
13    width: 100%
14  )[
15    #align(left)[
16      #it
17    ]
18  ]
19}
20
21#figure(
22  [content],
23  caption: [...]
24)

画像とキャプション周りの余白はshowルールで変更できます。 デフォルトだと、 画像と本文の間、 画像とキャプションの間の間隔が窮屈に感じたので、微調整したサンプルです。 最適な値は各自で探してください。

注釈

まず、図版とキャプションのアキをリセット(gap: 0emに設定)したあと、 コンテンツとキャプションそれぞれに0.5emのパディングを追加しています。

結果として、 図版とキャプションの間に1emのアキができます。

stroke: 1ptを有効にすると それぞれの表示エリアを確認できます。

注釈

set block(...)でブロック要素を設定していますが、これはその下の要素にも設定が染み出しています。 そのためstrokeがデバッグ的に使えます。

block.with(...)を使って変更が適用されるスコープを限定するほうが正しいやり方かもしれません。 (ひとまずこのまま)

図版を並べたい

 1#columns(2)[
 2  #figure(
 3    [content],
 4    caption: [左図のキャプションです。],
 5  )<fig-left>
 6
 7  #colbreak()
 8
 9  #figure(
10    [content],
11    caption: [右図のキャプションです。],
12  )<fig-right>
13]

図版を横に並べたい場合は #columns関数で段組みしたところに、#figureを挿入します。

1#figure(
2  [#columns(2)[
3    [左図]
4    #colbreak()
5    [右図]
6  ]],
7  caption: [2つの図を説明する1つのキャプションです。]
8)<fig-label>

複数の図版を横にならべて、キャプションを1つにまとめたい場合は、 #figureの第一引数であるコンテンツブロックの中を#columnsで段組みして 図版コンテンツ(#imageなど)を挿入します。

注釈

LaTeXで横並びの図を作成する場合、 minipageのような外部パッケージが必要でした。

Typstでは標準機能だけで簡単に作ることができました。 角括弧が多くなり読みづらくなるのはさておき、 コンテンツブロック([...])の柔軟さと使い勝手のよさが、ようやくわかってきた気がします。

リファレンス