図版したい(#figure / #figure.caption)
1#figure(
2 image("image.jpg", width: 80%),
3 caption: [図版のキャプション],
4)
#figure要素で図版を挿入できます。
第一引数に挿入したい図版コンテンツを指定します。
captionオプションで図版のキャプションを指定します。
図版コンテンツは、画像(#image)だけでなく、表(#table)や数式(#math)、コードブロック(#raw)なども指定できます。
図版全体にラベルを設定して、本文中で参照できます。
ヒント
レポートや論文の場合、本文に関係のない図版は挿入してはいけません。 図版は、本文の内容を補足・説明するものであるべきです。 図版を挿入するときには、その図版が本当に必要かどうか、本文の文脈に沿っているか、など吟味が必要です。
また、図版のキャプションは必須です。 このとき、単に図版のタイトルだけ記述するのではなく、本文を読まなくても、この図版が何を示しているのかわかるように説明するとよいです。
図版を参照したい(#label / #ref)
1#figure(
2 image("image.jpg", width: 80%),
3 caption: [図版のキャプション],
4) <fig1>
5
6この図は
7#ref(<fig1>)
8を参照してください。
相互参照の機能をつかって、本文中で図版を参照できます。
図版にラベル(#label)を設定して、#ref要素で参照します。
参照情報は、図版の要素名と番号の形式で表示されます。
図版の要素名は、#page.langで設定した言語に
図版を設定したい(#set figure)
1// figureの設定
2#set figure(gap: 1em)
3
4#show figure: block.with(
5 width: 100%,
6 inset: (top: 1em, bottom: 1em),
7 // stroke: 1pt, // enable when debug
8 // fill: luma(90%)
9)
デフォルトだと図版と本文のアキが窮屈に感じたので、微調整したサンプルです。
figure要素の上(top: 1em)と下(bottom: 1em)に余白(パディング)を追加しました。
また、図版とキャプションのアキもgap: 1emに変更しています。
ヒント
図版の設定を調整するときは、
stroke: 1ptやfill: luma(90%)を有効にして、表示エリアを確認しながら調整するのがオススメです。
注釈
1#show figure: set block(
2 width: 100%,
3 inset: 0.5em,
4 stroke: 1pt,
5 fill: luma(90%),
6)
block.withの代わりにset blockを使うこともできます。
ただし、設定が子要素(figure.captionなど)にも引き継がれてしまうため、block.withの方がオススメです。
図版のキャプションを設定したい(#show figure.caption)
1// キャプションの設定
2#show figure.caption: set align(left)
3#show figure.caption: block.with(
4 inset: (left: 1em, right: 1em),
5 width: 100%,
6 // stroke: 1pt, // enable when debug
7 // fill: luma(80%), // enable when debug
8)
9
10#figure(
11 [content],
12 caption: [...]
13)
図版のキャプション設定はshowルールで変更できます。
デフォルトで、キャプションは図版に対して中央寄せで表示されます。
このサンプルでは、キャプション全体の幅を図版と同じにして、テキストを左寄せにしています。
プレースホルダーしたい
1#let placeholder(width: 100%, height: 6cm, label: [placeholder]) = rect(
2 width: width,
3 height: height,
4 fill: gray.lighten(80%),
5 stroke: gray,
6)[
7 align(center + horizon )[
8 text(size: 12pt, color: gray)[label]
9 ]
10]
11
12// プレースホルダーを作成
13#figure(
14 placeholder(),
15 caption: [図版のキャプション],
16)
17
18// 大きさなどを変更したプレースホルダーを作成
19#figure(
20 placeholder.with(width: 80%, height: 4cm, label: [幅80%のプレースホルダー]),
21 caption: [図版のキャプション],
22)
図版がまだ用意できないときは、プレースホルダーを挿入しておくと便利です。
上記のサンプルでは、placeholder関数を定義して、矩形とテキストを組み合わせたプレースホルダーを作成しています。
withメソッドで、プレースホルダーの大きさやラベルを変更した新しいプレースホルダーを作成できます。
複数の図版を並べたい
1// +----------+----------+
2// | image1 | image2 |
3// | caption1 | caption2 |
4// +----------+----------+
5#columns(2, gutter: 0em)[
6 #figure(
7 [content],
8 caption: [左図のキャプションです。],
9 )<fig-left>
10
11 #figure(
12 [content],
13 caption: [右図のキャプションです。],
14 )<fig-right>
15]
複数の図版を横に並べたい場合は、#grid関数で段組みしたところに、図版(#figure)を挿入します。
上記のサンプルでは、2列のグリッドを作成して、各列に図版を挿入しています。
グリッドのgutterオプションで、図版同士のスペースを調整できます。
複数の図版をまとめたい
1// +---------+---------+
2// | image1 | image2 |
3// +---------+---------+
4// | caption |
5// +---------+---------+
6
7#let images = columns(2, gutter: 1em)[
8 [左図]
9 #colbreak()
10 [右図]
11]
12
13#figure(
14 images,
15 caption: [2つの図を説明する1つのキャプションです。]
16)<fig-label>
複数の図版を横にならべて、キャプションを1つにまとめたい場合は、
あらかじめ#gridで段組みしたコンテンツブロックを#figureの第一引数に渡します。
上記のサンプルでは、2列のグリッドに図を並べて、
そのグリッド全体に対してキャプションを設定しています。
注釈
LaTeXで横並びの図を作成する場合、 minipageのような外部パッケージが必要でした。
Typstでは標準機能だけで簡単に作ることができました。
角括弧が多くなり読みづらくなるのはさておき、
コンテンツブロック([...])の柔軟さと使い勝手のよさが、ようやくわかってきた気がします。