Function layout

Source
pub fn layout(span: Span, func: Func) -> Content
Expand description

Provides access to the current outer container’s (or page’s, if none) dimensions (width and height).

Accepts a function that receives a single parameter, which is a dictionary with keys width and height, both of type [length]. The function is provided [context], meaning you don’t need to use it in combination with the context keyword. This is why [measure] can be called in the example below.

#let text = lorem(30)
#layout(size => [
  #let (height,) = measure(
    block(width: size.width, text),
  )
  This text is #height high with
  the current page width: \
  #text
])

Note that the layout function forces its contents into a [block]-level container, so placement relative to the page or pagebreaks are not possible within it.

If the layout call is placed inside a box with a width of {800pt} and a height of {400pt}, then the specified function will be given the argument {(width: 800pt, height: 400pt)}. If it is placed directly into the page, it receives the page’s dimensions minus its margins. This is mostly useful in combination with measurement.

You can also use this function to resolve [ratio] to fixed lengths. This might come in handy if you’re building your own layout abstractions.

#layout(size => {
  let half = 50% * size.width
  [Half a page is #half wide.]
})

Note that the width or height provided by layout will be infinite if the corresponding page dimension is set to {auto}.