layout

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(
    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.

To retrieve the remaining height of the page rather than its full size, you can wrap your layout call in a {block(height: 1fr)}. This works because the block automatically grows to fill the remaining space (see the [fraction] documentation for more details).

#set page(height: 150pt)

#lorem(20)

#block(height: 1fr, layout(size => [
  Remaining height: #size.height
]))

You can also use this function to resolve a [ratio] to a fixed length. 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}.