このページは日本語に翻訳済みです。
layout
現在の外側のコンテナ(存在しなければページ)の寸法(幅と高さ)へのアクセスを提供します。
widthとheightというlength型のキーを持つ辞書を単一の引数として受け取る関数を受け付けます。
関数にはcontextが渡されるため、contextキーワードと組み合わせて使用する必要はありません。
これが以下の例でmeasureが呼び出せる理由です。
#let text = lorem(30)
#layout(size => [
#let (height,) = measure(
width: size.width,
text,
)
This text is #height high with
the current page width: \
#text
])

layout関数はコンテンツにブロックレベルのコンテナであることを強制するため、そのコンテナ内部でページを基準とした配置や改ページはできないことに注意してください。
例えば、幅が800ptで高さが400ptのボックスの中からlayoutが呼び出されたとすると、指定された関数には(width: 800pt, height: 400pt)という引数が与えられます。
ページに直接置かれた場合は、ページの寸法からそのマージンを引いたものを受け取ります。
これは主に測定と組み合わせるときに便利です。
layoutの呼び出しをblock(height: 1fr)でラップすることで、ページ全体の高さではなく、残りの高さを取得できます。
これが動作するのは、残りのスペースを埋めるようにブロックが自動的に拡張するためです(詳細は比率のドキュメントを参照してください)。
#set page(height: 150pt)
#lorem(20)
#block(height: 1fr, layout(size => [
Remaining height: #size.height
]))

この関数は、ratioを固定長に変換するためにも利用できます。
これは独自のレイアウト抽象化を構築する際に重宝するかもしれません。
#layout(size => {
let half = 50% * size.width
[Half a page is #half wide.]
})

layoutが提供する幅と高さは、対象ページの寸法がautoに設定されていると無限大となりうることに注意してください。
引数引数引数は関数への入力値です。関数名の後に括弧で囲んで指定します。
layout()->func
func外側のコンテナの大きさと一緒に呼び出す関数。 戻り値は文書に表示されます。
コンテナの大きさはwidthとheightのキーを持つdictionaryとして与えられます。
この関数は、layoutによって返されるコンテンツが文書に現れると、その都度1回呼び出されます。
これによりそのコンテナの寸法に依存するコンテンツの生成が可能になります。