Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

API Reference

deixis-block

Creates local annotation rendering/settings/counter scope around native content.

Setup Required

Returns: content.

Task guide

Example

deixis-block(id: <section>)[Local content.]

Minipage maps margin to internal inset and fixes outset at 0pt. Named IDs are unique; automatic scopes stay private. Breakable blocks use per-page margin frames and collect local footnotes at the block end. Page-local numbering restarts displayed markers at each original page, including inside multi-page blocks. HTML prints local footnote lists where their block ends.

deixis-block

deixis-block(id: auto, thread: none, sync-counters-with: auto, width: auto, height: auto, breakable: auto, fill: auto, stroke: auto, radius: auto, inset: auto, outset: auto, spacing: auto, above: auto, below: auto, clip: auto, sticky: auto, ..args)

Creates an isolated, self-contained layout environment for notes.

A minipage provides a separate rendering and counter scope. Margin notes use its insets; footnotes are collected after all main content, with native pagination for long collections. They are not per-page block footers. A single-column breakable block has a margin frame on each physical page, with normal overflow limits when space runs out. Overlay packing does not subtract native page-footer reservations or create more pages. Counters are independent by default and can be shared or synchronized explicitly. With page-local numbering, displayed markers restart on each original mark page even when the block spans pages; its footnotes still collect at the end.

//| sandbox-mode: "page"
#deixis-footnote[This is a page footnote.]
#deixis-block(inset: 5pt, fill: gray.lighten(90%))[
  Inside a `#deixis-block`, notes have their own counters and layout.
  #deixis-footnote[This is a block-level footnote.]
]

Experiment.

Nested blocks keep independent counters and rendering scopes. Breakable and threaded layouts should be checked against the available page/block space.

//| sandbox-mode: "page"
#deixis-block(inset: 5pt, fill: red.lighten(90%))[
  #deixis-footnote[Level 1.]
  #deixis-block(inset: 5pt, fill: orange.lighten(90%))[
    #deixis-footnote[Level 2.]
    #deixis-block(inset: 5pt, fill: yellow.lighten(90%))[
      #deixis-footnote[Level 3.]
      #deixis-block(inset: 5pt, fill: green.lighten(90%))[
        You are wandering into the unknown#deixis-footnote[Level 4.].
      ]
    ]
  ]
]
  • id (auto, str, label): A unique nonempty public block name; "page" is reserved. auto creates a private instance.
  • thread (none, str, label): A nonempty name sharing rendering and, by default, counters between distinct blocks. Matching strings/labels select the same thread.
  • sync-counters-with (auto, int, label, str): Synchronize internal counters with another #deixis-block or the global document counters rather than starting from 1.
  • width (auto, length, relative): See std.block.width.
  • height (auto, length, relative): See std.block.height.
  • breakable (auto, bool): See std.block.breakable.
  • fill (auto, color, none): See std.block.fill.
  • stroke (auto, stroke, none): See std.block.stroke.
  • radius (auto, length, dictionary): See std.block.radius.
  • inset (auto, length, dictionary): See std.block.inset.
  • outset (auto, length, dictionary): See std.block.outset.
  • spacing (auto, length): See std.block.spacing.
  • above (auto, length): See std.block.above.
  • below (auto, length): See std.block.below.
  • clip (auto, bool): See std.block.clip.
  • sticky (auto, bool): See std.block.sticky.
  • ..args (arguments): Accepts at most 1 positional argument: [body], the content of the minipage.

Parameters

NameDefaultTypes
idautoauto, str, label
threadnonenone, str, label
sync-counters-withautoauto, int, label, str
widthautoauto, length, relative
heightautoauto, length, relative
breakableautoauto, bool
fillautoauto, color, none
strokeautoauto, stroke, none
radiusautoauto, length, dictionary
insetautoauto, length, dictionary
outsetautoauto, length, dictionary
spacingautoauto, length
aboveautoauto, length
belowautoauto, length
clipautoauto, bool
stickyautoauto, bool
..argsvariadicarguments

id

A nonempty string/label name for this block. Names must be unique; page is reserved. Auto creates a private instance without a public name.

thread

Allows separate blocks to share rendering/counters through a nonempty string or label name. Equivalent strings/labels select the same thread.

//| sandbox-mode: "page"
#deixis-block(thread: "green", inset: 5pt, fill: green.lighten(90%))[
  #deixis-footnote[This block belongs to the `"green"` thread.]
]

#deixis-block(inset: 5pt, fill: red.lighten(90%))[
  #deixis-footnote[This block does not, hence, its notes count from 1.]
]

#deixis-block(thread: "green", inset: 5pt, fill: green.lighten(90%))[
  #deixis-footnote[This block also belongs to the `"green"` thread.]
]

Tip.

thread cannot be used to sync counters with the "page". For that purpose, use deixis-block.sync-counters-with. sync-counters-with controls numbering; thread controls rendering ownership. Each block still owns its collected footnotes independently.

sync-counters-with

Synchronize internal counters with another #deixis-block or the global document counters rather than starting from 1.

  • Accepts int for going up in the stack level, and "page" for the document global.
//| sandbox-mode: "page"
#deixis-block(sync-counters-with: "page", inset: 5pt, fill: red.lighten(90%))[
  #deixis-footnote[This block shares its counters with the document.]
]

#deixis-block(sync-counters-with: -1, inset: 5pt, fill: orange.lighten(90%))[
  #deixis-footnote[Same for this block.]
]
  • Also accepts label or str for targetting another #deixis-block.
//| sandbox-mode: "page"
#deixis-block(id: <blue-block>, inset: 5pt, fill: blue.lighten(90%))[
  #deixis-footnote[This block is given an `id: <blue-block>`.]
]

#deixis-block(sync-counters-with: <blue-block>, inset: 5pt, fill: teal.lighten(90%))[
  #deixis-footnote[This block shares its counters with `<blue-block>`.]
]

Tip.

To sync counters of multiple blocks, it is more convenient to use deixis-block.thread.

width

See std.block.width.

height

See std.block.height.

breakable

See std.block.breakable.

fill

See std.block.fill.

stroke

See std.block.stroke.

radius

See std.block.radius.

inset

See std.block.inset.

Info.

The left and right inset of a #deixis-block is where block-level deixis-margin-note-body are rendered.

outset

See std.block.outset.

spacing

See std.block.spacing.

above

See std.block.above.

below

See std.block.below.

clip

See std.block.clip.

sticky

See std.block.sticky.

..args

Accepts at most 1 positional argument: [body], the content of the minipage. See std.block.body.

deixis-minipage

deixis-minipage(id: auto, thread: none, sync-counters-with: auto, width: auto, height: auto, breakable: auto, fill: auto, stroke: auto, radius: auto, margin: auto, spacing: auto, above: auto, below: auto, clip: auto, sticky: auto, ..args)

Creates an isolated layout environment for notes, utilizing margin instead of inset/outset.

This is just a convenience wrapper around #deixis-block. It calls #deixis-block with inset: margin and outset: 0pt by default.

See #deixis-block for details about parameters.

  • id (auto, str, label): A unique nonempty public block name; "page" is reserved. auto creates a private instance.
  • thread (none, str, label): A nonempty name sharing rendering and, by default, counters between distinct blocks. Matching strings/labels select the same thread.
  • sync-counters-with (auto, int, label, str): Synchronize internal counters with another #deixis-block or the global document counters rather than starting from 1.
  • width (auto, length, relative): See std.block.width.
  • height (auto, length, relative): See std.block.height.
  • breakable (auto, bool): See std.block.breakable.
  • fill (auto, color, none): See std.block.fill.
  • stroke (auto, stroke, none): See std.block.stroke.
  • radius (auto, length, dictionary): See std.block.radius.
  • margin (auto, length, dictionary): Internal padding, forwarded to deixis-block.inset; reserves space for local margin notes.
  • spacing (auto, length): See std.block.spacing.
  • above (auto, length): See std.block.above.
  • below (auto, length): See std.block.below.
  • clip (auto, bool): See std.block.clip.
  • sticky (auto, bool): See std.block.sticky.
  • ..args (arguments): Accepts at most 1 positional argument: [body], the content of the minipage.

Parameters

NameDefaultTypes
idauto
threadnone
sync-counters-withauto
widthauto
heightauto
breakableauto
fillauto
strokeauto
radiusauto
marginautoauto, length, dictionary
spacingauto
aboveauto
belowauto
clipauto
stickyauto
..argsvariadic

margin

Internal padding between the block boundary and its content. Forwarded to deixis-block(inset: margin, outset: 0pt); its left and right padding also provide space for local margin notes.